diff --git a/.clang-tidy b/.clang-tidy index e516ecccc8..c511b3c7aa 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -21,7 +21,6 @@ readability-duplicate-include, \ readability-string-compare" WarningsAsErrors: '' HeaderFilterRegex: '' -AnalyzeTemporaryDtors: false FormatStyle: file CheckOptions: - key: modernize-use-auto.RemoveStars diff --git a/CMakeLists.txt b/CMakeLists.txt index 808984400d..982ec564f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/ReleaseNotes/Beta4.11.4-1.txt b/ReleaseNotes/Beta4.11.4-1.txt new file mode 100644 index 0000000000..d981ab3a10 --- /dev/null +++ b/ReleaseNotes/Beta4.11.4-1.txt @@ -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 [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). + + ---------------------------------------------------------------------------- + diff --git a/cmake/History b/cmake/History index 81000224eb..841d3470c9 100644 --- a/cmake/History +++ b/cmake/History @@ -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 diff --git a/cmake/Modules/G4ConfigureGNUMakeHelpers.cmake b/cmake/Modules/G4ConfigureGNUMakeHelpers.cmake index cf532d121f..7d0bf53301 100644 --- a/cmake/Modules/G4ConfigureGNUMakeHelpers.cmake +++ b/cmake/Modules/G4ConfigureGNUMakeHelpers.cmake @@ -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() diff --git a/cmake/Modules/G4DatasetDefinitions.cmake b/cmake/Modules/G4DatasetDefinitions.cmake index 97e66c84dc..5e728bbc14 100644 --- a/cmake/Modules/G4DatasetDefinitions.cmake +++ b/cmake/Modules/G4DatasetDefinitions.cmake @@ -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 diff --git a/cmake/Modules/G4DeveloperAPI.cmake b/cmake/Modules/G4DeveloperAPI.cmake index 03c711d7ef..0bbbc3aac7 100644 --- a/cmake/Modules/G4DeveloperAPI.cmake +++ b/cmake/Modules/G4DeveloperAPI.cmake @@ -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}}) diff --git a/cmake/Modules/G4InterfaceOptions.cmake b/cmake/Modules/G4InterfaceOptions.cmake index 582fb927ba..6975cda31c 100644 --- a/cmake/Modules/G4InterfaceOptions.cmake +++ b/cmake/Modules/G4InterfaceOptions.cmake @@ -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) diff --git a/cmake/Modules/G4TestAPI.cmake b/cmake/Modules/G4TestAPI.cmake index 3fc94cf13b..c59aec5d4b 100644 --- a/cmake/Modules/G4TestAPI.cmake +++ b/cmake/Modules/G4TestAPI.cmake @@ -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=$ + -DCMAKE_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) diff --git a/config/History b/config/History index 12a5ceceaa..315cd95a4c 100644 --- a/config/History +++ b/config/History @@ -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. diff --git a/config/architecture.gmk b/config/architecture.gmk index 0a932e8c7c..be60fa410c 100644 --- a/config/architecture.gmk +++ b/config/architecture.gmk @@ -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 # # ------------------------------------------------------------------------- diff --git a/config/sys/Darwin-clang.gmk b/config/sys/Darwin-clang.gmk index 0844d2c071..9ad5caad58 100644 --- a/config/sys/Darwin-clang.gmk +++ b/config/sys/Darwin-clang.gmk @@ -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 diff --git a/config/sys/Darwin-g++.gmk b/config/sys/Darwin-g++.gmk index a4cac49af9..dc977e452f 100644 --- a/config/sys/Darwin-g++.gmk +++ b/config/sys/Darwin-g++.gmk @@ -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 diff --git a/config/sys/Linux-clang.gmk b/config/sys/Linux-clang.gmk index 5a24a903c8..6424facc8c 100644 --- a/config/sys/Linux-clang.gmk +++ b/config/sys/Linux-clang.gmk @@ -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 diff --git a/config/sys/Linux-g++.gmk b/config/sys/Linux-g++.gmk index a461848247..61d97c52d3 100644 --- a/config/sys/Linux-g++.gmk +++ b/config/sys/Linux-g++.gmk @@ -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 diff --git a/config/sys/Linux-icc.gmk b/config/sys/Linux-icc.gmk index b81f8e1480..1f91992eee 100644 --- a/config/sys/Linux-icc.gmk +++ b/config/sys/Linux-icc.gmk @@ -84,7 +84,7 @@ ifeq ($(G4SYSTEM),Linux-icc) endif ifndef QT_VERSION - QT_VERSION := 5 + QT_VERSION := 6 endif ifndef QTFLAGS diff --git a/config/sys/Linux-icx.gmk b/config/sys/Linux-icx.gmk index 5f67c5020d..302097a11f 100644 --- a/config/sys/Linux-icx.gmk +++ b/config/sys/Linux-icx.gmk @@ -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 diff --git a/config/sys/WIN32-VC.gmk b/config/sys/WIN32-VC.gmk index 581bb9f127..375cfcaea2 100644 --- a/config/sys/WIN32-VC.gmk +++ b/config/sys/WIN32-VC.gmk @@ -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 diff --git a/examples/History b/examples/History index 74bd2bd5c8..42ab2b9b65 100644 --- a/examples/History +++ b/examples/History @@ -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, diff --git a/examples/advanced/CaTS/CaTS.out b/examples/advanced/CaTS/CaTS.out index 9fff039873..f2435ef2fe 100644 --- a/examples/advanced/CaTS/CaTS.out +++ b/examples/advanced/CaTS/CaTS.out @@ -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 diff --git a/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out b/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out index af2d8039aa..9d79208e17 100644 --- a/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out +++ b/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out @@ -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 @@ -143,7 +143,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 ======== @@ -799,6 +799,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 @@ -815,6 +816,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 @@ -904,181 +906,7 @@ Index : 9 used in the geometry : Yes ================================================================== ### Run 0 starts. -Event 978 - --- Track Points - monitor : pi- [1,bp] 730.3 MeV : -2.783 1.271 -0.125 cm [-0.009686, 0.000328, 1] - target : pi- [1,bp] 729.8 MeV : 0.2301 4.995 1.304 cm [-0.649, -0.7608, 0.001184] - : eta [6,op] 283.1 MeV : -4.409 -0.4408 1.307 cm [-0.9268, -0.3688, 0.0716] - : neutron [7,np] 496.4 MeV : -4.409 -0.4408 1.307 cm [-0.4226, -0.9055, -0.03933] - : gamma [9,opdp] 389.5 MeV : -4.409 -0.4408 1.307 cm [-0.9722, 0.2324, 0.02855] - : gamma [8,opdp] 227.2 MeV : -4.409 -0.4408 1.307 cm [0.5121, -0.858, 0.04028] - vc (l) : gamma [8,opdp] 227.2 MeV : 1.967 3.747 -0.25 cm [0.1015, 0.04028, 0.994] - vc (r) : gamma [9,opdp] 389.5 MeV : 3.053 2.867 -0.25 cm [0.02719, 0.02855, 0.9992] - cal (l) : gamma [8,opdp] 227.2 MeV : 2.095 3.798 -15 cm [0.1015, 0.04028, 0.994] - cal (r) : gamma [9,opdp] 389.5 MeV : 3.087 2.903 -15 cm [0.02719, 0.02855, 0.9992] - --- - angle between the eta decay products : 134.112 deg - --- Triggered angular ranges: - 6 [ 0.0000, -0.2000) - --- Production model data: - Incident particle (LAB) : pi- -5.6640 0.7454 727.7539 MeV -- 741.0386 MeV - (SCM) : pi- -3.5115 0.4621 451.1856 MeV -- 472.2931 MeV - Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 3.5115 -0.4621 -451.1856 MeV -- 1.0411 GeV - Output particle (LAB) : eta -133.8829 20.2690 248.6198 MeV -- 616.6847 MeV - (SCM) : eta -131.7880 19.9933 -20.5569 MeV -- 564.2191 MeV - Nucleus output particle (LAB) : neutron 128.2189 -19.5236 479.1342 MeV -- 1.0626 GeV - (SCM) : neutron 131.7880 -19.9933 20.5569 MeV -- 949.1962 MeV - --- Reconstructed data: - -- entry points: - left: 2.27264 4.7218 -15 cm - right: 2.83815 2.39526 -15 cm - target: 0 0 0 fm - -- the angle: 129.048 deg - -- mass of the output particle: 513.838 MeV - -- mass of the nucleus output particle: 973.847 MeV - -- production model data: - Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV - (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -132.0466 31.8789 257.5577 MeV -- 590.6084 MeV - (SCM) : eta -132.0466 31.8789 1.2793 MeV -- 531.4922 MeV - Nucleus output particle (LAB) : neutron 132.0466 -31.8789 472.4423 MeV -- 1.0909 GeV - (SCM) : neutron 132.0466 -31.8789 -1.2793 MeV -- 983.2764 MeV - -- triggered angular ranges: - 5 [ 0.2000, 0.0000) - --- Energy Deposit - monitor : 383.22 keV - vc (l) : 0 eV - vc (r) : 0 eV - cal (l) : 216.486 MeV - 0 19.73 24.83 1.868 0 3.001 - 0.6737 8.141 152.2 3.842 0 0 - 0 0 0.6011 0.305 0.8085 0.4963 - 0 0 0 0 0 0 - cal (r) : 374.123 MeV - 0 2.204 11.49 0.3895 0 0 - 0 11.17 320.8 2.711 0.3936 0.4656 - 0.6458 6.066 15.1 1.558 0 1.09 - 0 0 0 0 0 0 -Event 2139 - --- Track Points - monitor : pi- [1,bp] 737 MeV : -3.414 -5.163 -1.25 mm [0.00409, 0.01064, 0.9999] - target : pi- [1,bp] 735.1 MeV : 3.039 3.971 -0.2005 cm [-0.6394, -0.7688, 0.01098] - : eta [10,op] 272 MeV : -2.419 -2.592 -0.1067 cm [-0.9422, -0.3351, -0.005996] - : neutron [11,np] 517.9 MeV : -2.419 -2.592 -0.1067 cm [-0.4116, -0.9112, 0.01828] - : gamma [13,opdp] 234.2 MeV : -2.419 -2.592 -0.1067 cm [0.4345, -0.9002, -0.02795] - : gamma [12,opdp] 377.5 MeV : -2.419 -2.592 -0.1067 cm [-0.9483, 0.317, 0.01302] - vc (l) : gamma [13,opdp] 234.2 MeV : -2.523 -1.712 -0.25 cm [0.01331, -0.02795, 0.9995] - vc (r) : gamma [12,opdp] 377.5 MeV : -3.462 6.377 -2.5 mm [-0.06078, 0.01302, 0.9981] - cal (l) : gamma [13,opdp] 234.2 MeV : -2.506 -1.747 -15 cm [0.01331, -0.02795, 0.9995] - cal (r) : gamma [12,opdp] 377.5 MeV : -0.4223 0.654 -15 cm [-0.06078, 0.01302, 0.9981] - --- - angle between the eta decay products : 134.251 deg - --- Triggered angular ranges: - 7 [-0.2000, -0.4000) - --- Production model data: - Incident particle (LAB) : pi- 2.3070 7.8372 732.9973 MeV -- 746.2115 MeV - (SCM) : pi- 1.4272 4.8486 453.4764 MeV -- 474.4957 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -1.4272 -4.8486 -453.4764 MeV -- 1.0421 GeV - Output particle (LAB) : eta -137.7217 -1.6308 234.5213 MeV -- 611.6559 MeV - (SCM) : eta -138.5706 -4.5146 -35.1937 MeV -- 566.2275 MeV - Nucleus output particle (LAB) : neutron 140.0287 9.4680 498.4760 MeV -- 1.0728 GeV - (SCM) : neutron 138.5706 4.5146 35.1937 MeV -- 950.3914 MeV - --- Reconstructed data: - -- entry points: - left: -4.23117 -1.66486 -15 cm - right: -2.98226 0.275906 -15 cm - target: 0 0 0 fm - -- the angle: 128.803 deg - -- mass of the output particle: 497.025 MeV - -- mass of the nucleus output particle: 965.691 MeV - -- production model data: - Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV - (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -186.6677 -3.6551 241.1024 MeV -- 583.1147 MeV - (SCM) : eta -186.6677 -3.6551 -13.3759 MeV -- 531.1038 MeV - Nucleus output particle (LAB) : neutron 186.6677 3.6551 488.8976 MeV -- 1.0984 GeV - (SCM) : neutron 186.6677 3.6551 13.3759 MeV -- 983.6648 MeV - -- triggered angular ranges: - 6 [ 0.0000, -0.2000) - --- Energy Deposit - monitor : 534.931 keV - vc (l) : 0 eV - vc (r) : 0 eV - cal (l) : 196.31 MeV - 0 0 0 0 0 1.395 - 0 0 0.3729 8.112 0.03617 0 - 0 0 0.1637 180.1 5.478 0 - 0 0 0 0.1939 0.4293 0 - cal (r) : 386.804 MeV - 0 0 0 0.936 0 0 - 0 0.3926 26.39 272.6 9.834 5.629 - 0.9161 0.3541 7.403 51.1 3.899 0 - 0 0 1.657 0.6686 0 4.987 -Event 3002 - --- Track Points - monitor : pi- [1,bp] 728.6 MeV : -4.402 3.157 -1.25 mm [-0.004002, -0.02335, 0.9997] - target : pi- [1,bp] 728 MeV : 2.823 4.127 -0.384 cm [-0.6432, -0.7653, -0.0236] - : eta [6,op] 275.2 MeV : -3.21 -3.052 -0.6038 cm [-0.8979, -0.4056, 0.171] - : neutron [7,np] 499.1 MeV : -3.21 -3.052 -0.6038 cm [-0.4397, -0.8889, -0.1288] - : gamma [9,opdp] 249.5 MeV : -3.21 -3.052 -0.6038 cm [0.3851, -0.9186, 0.0889] - : gamma [8,opdp] 363.6 MeV : -3.21 -3.052 -0.6038 cm [-0.9438, 0.3234, 0.06841] - vc (l) : gamma [9,opdp] 249.5 MeV : -6.46 4.518 -0.25 cm [-0.03924, 0.0889, 0.9953] - vc (r) : gamma [8,opdp] 363.6 MeV : -0.08323 3.276 -0.25 cm [-0.06812, 0.06841, 0.9953] - cal (l) : gamma [9,opdp] 249.5 MeV : -6.509 4.63 -15 cm [-0.03924, 0.0889, 0.9953] - cal (r) : gamma [8,opdp] 363.6 MeV : -0.1688 3.362 -15 cm [-0.06812, 0.06841, 0.9953] - --- - angle between the eta decay products : 130.875 deg - --- Triggered angular ranges: - 6 [ 0.0000, -0.2000) - --- Production model data: - Incident particle (LAB) : pi- -0.4858 -17.2421 725.1905 MeV -- 738.7006 MeV - (SCM) : pi- -0.3015 -10.6998 450.0275 MeV -- 471.2952 MeV - Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 0.3015 10.6998 -450.0275 MeV -- 1.0407 GeV - Output particle (LAB) : eta -117.5361 47.0554 244.3101 MeV -- 613.0817 MeV - (SCM) : eta -117.3569 53.4160 -23.2108 MeV -- 563.3093 MeV - Nucleus output particle (LAB) : neutron 117.0503 -64.2975 480.8804 MeV -- 1.0639 GeV - (SCM) : neutron 117.3569 -53.4160 23.2108 MeV -- 948.6557 MeV - --- Reconstructed data: - -- entry points: - left: -6.98064 5.50202 -15 cm - right: 0.096582 2.67046 -15 cm - target: 0 0 0 fm - -- the angle: 122.804 deg - -- mass of the output particle: 483.619 MeV - -- mass of the nucleus output particle: 1.00191 GeV - -- production model data: - Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV - (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -133.5241 35.2155 261.5267 MeV -- 566.8794 MeV - (SCM) : eta -133.5241 35.2155 17.1207 MeV -- 503.2386 MeV - Nucleus output particle (LAB) : neutron 133.5241 -35.2155 468.4733 MeV -- 1.1146 GeV - (SCM) : neutron 133.5241 -35.2155 -17.1207 MeV -- 1.0115 GeV - -- triggered angular ranges: - 5 [ 0.2000, 0.0000) - --- Energy Deposit - monitor : 514.248 keV - vc (l) : 0 eV - vc (r) : 0 eV - cal (l) : 216.447 MeV - 0 0.2037 0.1747 4.649 105 0.4414 - 0 0 0 2.857 101.3 0 - 0 0.5063 0.9084 0 0.3717 0 - 0 0 0 0 0 0 - cal (r) : 350.432 MeV - 0 0.9058 3.449 5.051 0.4366 0 - 0 0.5817 91.61 229.6 0 0 - 0 0.7832 14.56 3 0 0 - 0 0 0 0.4827 0 0 -Event 3340 +Event 3479 --- Track Points monitor : pi- [1,bp] 730.2 MeV : -1.348 -0.6601 -0.125 cm [-0.004845, 0.01051, 0.9999] target : pi- [1,bp] 729.7 MeV : 1.939 4.609 -0.3036 cm [-0.6466, -0.7627, 0.0121] @@ -1136,374 +964,548 @@ Event 3340 3.02 78.17 20.69 0 0 0 0.6562 258.8 71.3 0.1031 0 0 0.5558 1.533 0.5596 0.173 1.583 0 -Event 3863 +Event 5480 --- Track Points - monitor : pi- [1,bp] 730.1 MeV : 0.9645 -1.138 -0.125 cm [-0.01506, -0.01048, 0.9998] - target : pi- [1,bp] 729.6 MeV : 3.532 3.539 -1.516 cm [-0.6565, -0.7542, -0.0135] - : eta [3,op] 410.3 MeV : 1.094 0.7379 -1.566 cm [-0.7587, -0.6483, -0.06426] - : neutron [4,np] 329.4 MeV : 1.094 0.7379 -1.566 cm [-0.5076, -0.8603, 0.04756] - : gamma [6,opdp] 300.5 MeV : 1.094 0.7379 -1.566 cm [0.238, -0.9705, -0.03913] - : gamma [5,opdp] 383.9 MeV : 1.094 0.7379 -1.566 cm [-0.997, 0.06691, -0.03804] - vc (l) : gamma [6,opdp] 300.5 MeV : -10.39 -3.92 -0.25 cm [-0.1944, -0.03913, 0.9801] - vc (r) : gamma [5,opdp] 383.9 MeV : 10.77 -3.879 -0.25 cm [0.1934, -0.03804, 0.9804] - cal (l) : gamma [6,opdp] 300.5 MeV : -10.64 -3.969 -15 cm [-0.1944, -0.03913, 0.9801] - cal (r) : gamma [5,opdp] 383.9 MeV : 11.01 -3.927 -15 cm [0.1934, -0.03804, 0.9804] + monitor : pi- [1,bp] 727.4 MeV : 2.086 0.4419 -0.125 cm [0.009977, -0.02142, 0.9997] + target : pi- [1,bp] 726.1 MeV : 4.633 1.88 -0.1908 cm [-0.636, -0.7714, -0.02171] + : eta [5,op] 388.2 MeV : 2.917 -0.2023 -0.2494 cm [-0.7821, -0.6196, 0.06559] + : neutron [6,np] 358.3 MeV : 2.917 -0.2023 -0.2494 cm [-0.4404, -0.8903, -0.1153] + : gamma [8,opdp] 300.5 MeV : 2.917 -0.2023 -0.2494 cm [0.2119, -0.9745, 0.07452] + : gamma [7,opdp] 371 MeV : 2.917 -0.2023 -0.2494 cm [-0.99, 0.1408, 0.008283] + vc (l) : gamma [8,opdp] 300.5 MeV : -10.4 4.143 -0.25 cm [-0.2198, 0.07452, 0.9727] + vc (r) : gamma [7,opdp] 371 MeV : 6.905 0.2647 -0.25 cm [0.1203, 0.008283, 0.9927] + cal (l) : gamma [8,opdp] 300.5 MeV : -10.68 4.239 -15 cm [-0.2198, 0.07452, 0.9727] + cal (r) : gamma [7,opdp] 371 MeV : 7.056 0.2752 -15 cm [0.1203, 0.008283, 0.9927] --- - angle between the eta decay products : 107.503 deg + angle between the eta decay products : 110.263 deg --- Triggered angular ranges: - 1 [ 1.0000, 0.8000) + 2 [ 0.8000, 0.6000) --- Production model data: - Incident particle (LAB) : pi- -13.4004 -10.6973 728.3481 MeV -- 741.7984 MeV - (SCM) : pi- -8.3053 -6.6299 451.4135 MeV -- 472.6171 MeV - Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 8.3053 6.6299 -451.4135 MeV -- 1.0413 GeV - Output particle (LAB) : eta -67.4641 -26.3613 403.8070 MeV -- 684.4408 MeV - (SCM) : eta -62.2240 -22.1783 118.9960 MeV -- 564.5144 MeV - Nucleus output particle (LAB) : neutron 54.0637 15.6640 324.5411 MeV -- 995.6296 MeV - (SCM) : neutron 62.2240 22.1783 -118.9960 MeV -- 949.3718 MeV + Incident particle (LAB) : pi- 6.1935 -15.8570 725.2465 MeV -- 738.7504 MeV + (SCM) : pi- 3.8434 -9.8401 450.0531 MeV -- 471.3165 MeV + Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton -3.8434 9.8401 -450.0531 MeV -- 1.0407 GeV + Output particle (LAB) : eta -77.9743 25.4633 379.4466 MeV -- 671.4617 MeV + (SCM) : eta -80.3724 31.6032 98.6306 MeV -- 563.3287 MeV + Nucleus output particle (LAB) : neutron 84.1678 -41.3204 345.7999 MeV -- 1.0056 GeV + (SCM) : neutron 80.3724 -31.6032 -98.6306 MeV -- 948.6672 MeV --- Reconstructed data: -- entry points: - left: -12.3251 -3.29446 -15 cm - right: 11.526 -3.18269 -15 cm + left: -10.2446 4.51854 -15 cm + right: 9.08785 1.1857 -15 cm target: 0 0 0 fm - -- the angle: 107.299 deg - -- mass of the output particle: 561.407 MeV - -- mass of the nucleus output particle: 923.54 MeV + -- the angle: 111.542 deg + -- mass of the output particle: 530.536 MeV + -- mass of the nucleus output particle: 968.599 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -70.7587 -37.0477 414.0786 MeV -- 702.1522 MeV - (SCM) : eta -70.7587 -37.0477 121.2725 MeV -- 579.8825 MeV - Nucleus output particle (LAB) : neutron 70.7587 37.0477 315.9214 MeV -- 979.3424 MeV - (SCM) : neutron 70.7587 37.0477 -121.2725 MeV -- 934.8862 MeV + Output particle (LAB) : eta -43.3948 28.8053 360.3251 MeV -- 643.4403 MeV + (SCM) : eta -43.3948 28.8053 89.8970 MeV -- 540.6133 MeV + Nucleus output particle (LAB) : neutron 43.3948 -28.8053 369.6749 MeV -- 1.0381 GeV + (SCM) : neutron 43.3948 -28.8053 -89.8970 MeV -- 974.1553 MeV -- triggered angular ranges: 1 [ 1.0000, 0.8000) --- Energy Deposit - monitor : 423.013 keV - vc (l) : 0 eV + monitor : 1.11653 MeV + vc (l) : 185.451 keV vc (r) : 0 eV - cal (l) : 308.812 MeV - 0 0 0 0 0 1.155 - 0 0 0 1.4 0 0.8391 - 0 0 0 0.3913 90.47 193.9 - 0 0 0 0 2.661 17.99 - cal (r) : 393.34 MeV - 0.541 0.8797 0 0 0 0 - 3.696 2.876 0 0 0 0 - 205.3 156.9 0 0 0 0 - 6.43 15.13 0.9914 0.5961 0 0 -Event 6231 + cal (l) : 297.924 MeV + 0 0 0.2753 2.374 34.77 25.78 + 0 0 4.738 0.7191 97.02 129.4 + 0 0 0.5933 0 0.7986 1.466 + 0 0 0 0 0 0 + cal (r) : 345.516 MeV + 0.4013 1.487 1.875 0 0 0 + 10.91 257.4 6.402 0 0 0 + 2.405 58.18 4.854 0 0 0 + 1.378 0.268 0 0 0 0 +Event 7486 --- Track Points - monitor : pi- [1,bp] 729.7 MeV : 1.233 0.6435 -0.125 cm [0.004317, 0.001465, 1] - target : pi- [1,bp] 728.8 MeV : 4.125 2.826 0.6849 cm [-0.6403, -0.7682, 0.001152] - : eta [6,op] 327.4 MeV : 1.73 -0.04776 0.6892 cm [-0.2957, -0.9442, -0.145] - : neutron [7,np] 448.7 MeV : 1.73 -0.04776 0.6892 cm [-0.8246, -0.5558, 0.106] - : gamma [9,opdp] 392.2 MeV : 1.73 -0.04776 0.6892 cm [0.362, -0.9296, -0.06876] - : gamma [8,opdp] 246 MeV : 1.73 -0.04776 0.6892 cm [-0.9707, 0.2254, -0.08332] - vc (l) : gamma [9,opdp] 392.2 MeV : -2.225 -3.315 -0.25 cm [-0.06477, -0.06876, 0.9955] - vc (r) : gamma [8,opdp] 246 MeV : 1.631 -4.366 -0.25 cm [0.0335, -0.08332, 0.996] - cal (l) : gamma [9,opdp] 392.2 MeV : -2.306 -3.402 -15 cm [-0.06477, -0.06876, 0.9955] - cal (r) : gamma [8,opdp] 246 MeV : 1.674 -4.471 -15 cm [0.0335, -0.08332, 0.996] + monitor : pi- [1,bp] 734.2 MeV : 1.242 -6.951 -1.25 mm [-0.001876, 0.002133, 1] + target : pi- [1,bp] 733.7 MeV : 3.273 3.779 -0.6211 cm [-0.6441, -0.765, 0.00223] + : eta [5,op] 355.9 MeV : -1.143 -1.467 -0.6058 cm [-0.3228, -0.9434, -0.07613] + : neutron [6,np] 422.5 MeV : -1.143 -1.467 -0.6058 cm [-0.8458, -0.5293, 0.06712] + : gamma [8,opdp] 245.9 MeV : -1.143 -1.467 -0.6058 cm [-0.9742, 0.2113, -0.07935] + : gamma [7,opdp] 407.4 MeV : -1.143 -1.467 -0.6058 cm [0.3062, -0.9518, -0.0186] + vc (l) : gamma [7,opdp] 407.4 MeV : -8.939 -1.691 -0.25 cm [-0.1248, -0.0186, 0.992] + vc (r) : gamma [8,opdp] 245.9 MeV : 4.513 -5.23 -0.25 cm [0.04805, -0.07935, 0.9957] + cal (l) : gamma [7,opdp] 407.4 MeV : -9.096 -1.715 -15 cm [-0.1248, -0.0186, 0.992] + cal (r) : gamma [8,opdp] 245.9 MeV : 4.573 -5.33 -15 cm [0.04805, -0.07935, 0.9957] --- - angle between the eta decay products : 123.727 deg + angle between the eta decay products : 119.861 deg --- Triggered angular ranges: - 5 [ 0.2000, 0.0000) + 4 [ 0.4000, 0.2000) --- Production model data: - Incident particle (LAB) : pi- 1.4287 0.0765 727.9290 MeV -- 741.1899 MeV - (SCM) : pi- 0.8857 0.0474 451.2661 MeV -- 472.3576 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -0.8857 -0.0474 -451.2661 MeV -- 1.0412 GeV - Output particle (LAB) : eta 124.5536 -47.4684 299.0692 MeV -- 638.2491 MeV - (SCM) : eta 124.0155 -47.4972 24.9188 MeV -- 564.2779 MeV - Nucleus output particle (LAB) : neutron -123.1248 47.5449 428.8598 MeV -- 1.0412 GeV - (SCM) : neutron -124.0155 47.4972 -24.9188 MeV -- 949.2312 MeV + Incident particle (LAB) : pi- -2.1869 1.2637 732.0344 MeV -- 745.2252 MeV + (SCM) : pi- -1.3535 0.7821 453.0630 MeV -- 474.0763 MeV + Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 1.3535 -0.7821 -453.0630 MeV -- 1.0419 GeV + Output particle (LAB) : eta 127.8187 -27.0934 331.0553 MeV -- 653.3162 MeV + (SCM) : eta 128.6520 -27.5750 52.1159 MeV -- 565.8450 MeV + Nucleus output particle (LAB) : neutron -130.0057 28.3572 400.9792 MeV -- 1.0302 GeV + (SCM) : neutron -128.6520 27.5750 -52.1159 MeV -- 950.1636 MeV --- Reconstructed data: -- entry points: - left: -3.33509 -3.73824 -15 cm - right: 0.884471 -4.68337 -15 cm + left: -10.5332 -1.38976 -15 cm + right: 3.77712 -3.21158 -15 cm target: 0 0 0 fm - -- the angle: 125.428 deg - -- mass of the output particle: 492.142 MeV - -- mass of the nucleus output particle: 999.645 MeV + -- the angle: 116.315 deg + -- mass of the output particle: 527.186 MeV + -- mass of the nucleus output particle: 956.823 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 116.6641 -38.8253 260.9129 MeV -- 570.4359 MeV - (SCM) : eta 116.6641 -38.8253 14.7253 MeV -- 507.4824 MeV - Nucleus output particle (LAB) : neutron -116.6641 38.8253 469.0871 MeV -- 1.1111 GeV - (SCM) : neutron -116.6641 38.8253 -14.7253 MeV -- 1.0073 GeV + Output particle (LAB) : eta 123.5196 -21.9181 345.6557 MeV -- 642.7603 MeV + (SCM) : eta 123.5196 -21.9181 73.9408 MeV -- 546.9280 MeV + Nucleus output particle (LAB) : neutron -123.5196 21.9181 384.3443 MeV -- 1.0387 GeV + (SCM) : neutron -123.5196 21.9181 -73.9408 MeV -- 967.8407 MeV -- triggered angular ranges: - 5 [ 0.2000, 0.0000) + 3 [ 0.6000, 0.4000) --- Energy Deposit - monitor : 522.578 keV + monitor : 404.053 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 353.678 MeV - 0 0 0 0 0.1316 0 - 0 0 0.3681 1.14 1.247 0 - 0 0 16.54 299.1 13.71 1.41 - 0 1.285 1.274 10.65 6.809 0 - cal (r) : 216.758 MeV - 0 0 0 0 0 0 - 0 0 0.9333 0.6053 0 0 - 1.919 0 142.1 40.67 1.372 0 - 0.3594 2.826 15.37 8.101 1.771 0.7366 -Event 9239 + cal (l) : 405.073 MeV + 0 0 0 0.7068 0 0.9425 + 0 0 0 0.6427 6.202 32.09 + 0 0 0 2.413 334.6 24.57 + 0 0 0 0 1.18 1.703 + cal (r) : 237.688 MeV + 0 0 0.7709 0 0 0 + 0.6033 3.735 0.2499 0.9772 0 1.262 + 0 14.67 180.4 0.3224 0.7371 0 + 0.5769 4.408 29.02 0 0 0 +Event 9356 --- Track Points - monitor : pi- [1,bp] 721.8 MeV : -0.00885 -1.021 -0.125 cm [0.01197, -0.008816, 0.9999] - target : pi- [1,bp] 721.1 MeV : 3.5 3.571 -1.305 cm [-0.6318, -0.7751, -0.009783] - : eta [5,op] 264.9 MeV : 3.49 3.559 -1.305 cm [-0.223, -0.9662, -0.1292] - : neutron [6,np] 499.7 MeV : 3.49 3.559 -1.305 cm [-0.7934, -0.6063, 0.05449] - : gamma [8,opdp] 364.9 MeV : 3.49 3.559 -1.305 cm [0.4826, -0.8738, -0.06057] - : gamma [7,opdp] 243.7 MeV : 3.49 3.559 -1.305 cm [-0.9649, 0.2578, -0.0498] - vc (l) : gamma [8,opdp] 364.9 MeV : 8.802 -4.985 -0.25 cm [0.06807, -0.06057, 0.9958] - vc (r) : gamma [7,opdp] 243.7 MeV : -4.297 -4.357 -0.25 cm [0.0007122, -0.0498, 0.9988] - cal (l) : gamma [8,opdp] 364.9 MeV : 8.888 -5.061 -15 cm [0.06807, -0.06057, 0.9958] - cal (r) : gamma [7,opdp] 243.7 MeV : -4.296 -4.419 -15 cm [0.0007122, -0.0498, 0.9988] + monitor : pi- [1,bp] 734.4 MeV : 1.952 -9.042 -1.25 mm [0.01496, -0.0101, 0.9998] + target : pi- [1,bp] 733.9 MeV : 3.641 3.427 -1.214 cm [-0.6323, -0.7746, -0.01078] + : eta [6,op] 384.8 MeV : 1.806 1.179 -1.246 cm [-0.3711, -0.9286, 0.005872] + : neutron [7,np] 383.9 MeV : 1.806 1.179 -1.246 cm [-0.8362, -0.5477, -0.02764] + : gamma [9,opdp] 267 MeV : 1.806 1.179 -1.246 cm [-0.9953, 0.09734, 0.0003358] + : gamma [8,opdp] 402.5 MeV : 1.806 1.179 -1.246 cm [0.3054, -0.9522, 0.00539] + vc (l) : gamma [8,opdp] 402.5 MeV : -5.346 -0.9254 -0.25 cm [-0.1257, 0.00539, 0.9921] + vc (r) : gamma [9,opdp] 267 MeV : 8.374 -1.226 -0.25 cm [0.1636, 0.0003358, 0.9865] + cal (l) : gamma [8,opdp] 402.5 MeV : -5.504 -0.9186 -15 cm [-0.1257, 0.00539, 0.9921] + cal (r) : gamma [9,opdp] 267 MeV : 8.581 -1.225 -15 cm [0.1636, 0.0003358, 0.9865] --- - angle between the eta decay products : 133.462 deg + angle between the eta decay products : 113.366 deg --- Triggered angular ranges: - 7 [-0.2000, -0.4000) + 3 [ 0.6000, 0.4000) --- Production model data: - Incident particle (LAB) : pi- 10.3257 -7.0061 720.9653 MeV -- 734.4566 MeV - (SCM) : pi- 6.4189 -4.3553 448.1869 MeV -- 469.4800 MeV + Incident particle (LAB) : pi- 9.5047 -8.3505 732.8988 MeV -- 746.1773 MeV + (SCM) : pi- 5.8802 -5.1662 453.4218 MeV -- 474.4812 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -6.4189 4.3553 -448.1869 MeV -- 1.0398 GeV - Output particle (LAB) : eta 119.2779 -34.2345 234.0658 MeV -- 608.5547 MeV - (SCM) : eta 115.4806 -31.6580 -31.0709 MeV -- 561.6549 MeV - Nucleus output particle (LAB) : neutron -108.9523 27.2284 486.8995 MeV -- 1.0642 GeV - (SCM) : neutron -115.4806 31.6580 31.0709 MeV -- 947.6742 MeV + (SCM) : proton -5.8802 5.1662 -453.4218 MeV -- 1.0421 GeV + Output particle (LAB) : eta 120.2844 2.2593 365.4822 MeV -- 669.4800 MeV + (SCM) : eta 116.6153 5.4828 82.5626 MeV -- 566.2142 MeV + Nucleus output particle (LAB) : neutron -110.7797 -10.6098 367.4167 MeV -- 1.0150 GeV + (SCM) : neutron -116.6153 -5.4828 -82.5626 MeV -- 950.3835 MeV --- Reconstructed data: -- entry points: - left: 8.49128 -4.70279 -15 cm - right: -5.23263 -3.18192 -15 cm + left: -5.96053 -0.413651 -15 cm + right: 10.3975 -0.412969 -15 cm target: 0 0 0 fm - -- the angle: 142.322 deg - -- mass of the output particle: 551.382 MeV - -- mass of the nucleus output particle: 930.236 MeV + -- the angle: 114.491 deg + -- mass of the output particle: 557.299 MeV + -- mass of the nucleus output particle: 917.966 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 122.4993 -40.2985 185.1858 MeV -- 595.7733 MeV - (SCM) : eta 122.4993 -40.2985 -81.5475 MeV -- 572.1031 MeV - Nucleus output particle (LAB) : neutron -122.4993 40.2985 544.8142 MeV -- 1.0857 GeV - (SCM) : neutron -122.4993 40.2985 81.5475 MeV -- 942.6655 MeV + Output particle (LAB) : eta 148.9420 -4.6583 363.8003 MeV -- 682.0101 MeV + (SCM) : eta 148.9420 -4.6583 75.1672 MeV -- 581.7536 MeV + Nucleus output particle (LAB) : neutron -148.9420 4.6583 366.1997 MeV -- 999.4845 MeV + (SCM) : neutron -148.9420 4.6583 -75.1672 MeV -- 933.0151 MeV -- triggered angular ranges: - 8 [-0.4000, -0.6000) + 3 [ 0.6000, 0.4000) --- Energy Deposit - monitor : 539.18 keV + monitor : 438.154 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 360.203 MeV - 0 0 0 0 0 0 - 0 0.4864 0.5128 0 0 0 - 4.334 303.7 4.687 0 0 0 - 3.778 26.35 16.36 0 0 0 - cal (r) : 235.57 MeV - 0 0 0 0 0 0 - 0 0 2.265 27.99 0 4.023 - 0 0 0 156.4 9.008 0 - 0 0 0 22.34 9.134 4.361 -Event 9318 + cal (l) : 421.651 MeV + 0 0 0.5148 0.7194 1.046 4.629 + 0 0 1.532 27.77 77.63 2.345 + 0 0.3675 0.9361 168.1 130.5 0.2062 + 0 0 1.021 2.833 1.551 0 + cal (r) : 260.359 MeV + 0.5238 0 0 0 0 0 + 51.18 21.11 10.34 0 0 0 + 3.437 171.3 0 0 0 0 + 1.301 1.209 0 0 0 0 +Event 9930 --- Track Points - monitor : pi- [1,bp] 724.2 MeV : -5.012 -1.288 -1.25 mm [-0.008844, -0.01594, 0.9998] - target : pi- [1,bp] 723.6 MeV : 2.598 4.272 -0.5979 cm [-0.6491, -0.7606, -0.01627] - : eta [5,op] 297.3 MeV : -3.28 -2.615 -0.746 cm [-0.9032, -0.4215, -0.08101] - : neutron [6,np] 467.5 MeV : -3.28 -2.615 -0.746 cm [-0.4293, -0.9028, 0.02354] - : gamma [8,opdp] 232.6 MeV : -3.28 -2.615 -0.746 cm [0.4883, -0.8727, 8.353e-05] - : gamma [7,opdp] 390.7 MeV : -3.28 -2.615 -0.746 cm [-0.9781, 0.1989, -0.0617] - vc (l) : gamma [8,opdp] 232.6 MeV : 1.945 -7.412 -2.5 mm [0.07376, 8.353e-05, 0.9973] - vc (r) : gamma [7,opdp] 390.7 MeV : 6.823 -4.23 -0.25 cm [0.06106, -0.0617, 0.9962] - cal (l) : gamma [8,opdp] 232.6 MeV : 0.2869 -0.7411 -15 cm [0.07376, 8.353e-05, 0.9973] - cal (r) : gamma [7,opdp] 390.7 MeV : 6.899 -4.308 -15 cm [0.06106, -0.0617, 0.9962] + monitor : pi- [1,bp] 727.4 MeV : 1.404 1.753 -0.125 cm [-0.001304, -0.02747, 0.9996] + target : pi- [1,bp] 727 MeV : 4.117 2.837 0.9614 cm [-0.6444, -0.7642, -0.02655] + : eta [6,op] 296.4 MeV : -0.7483 -2.934 0.7617 cm [-0.8992, -0.4213, 0.1177] + : neutron [7,np] 476.5 MeV : -0.7483 -2.934 0.7617 cm [-0.4208, -0.9005, -0.1099] + : gamma [9,opdp] 380.9 MeV : -0.7483 -2.934 0.7617 cm [-0.9691, 0.2447, 0.0322] + : gamma [8,opdp] 242 MeV : -0.7483 -2.934 0.7617 cm [0.4236, -0.901, 0.09344] + vc (l) : gamma [8,opdp] 242 MeV : -1.742 6.056 -0.25 cm [0.003105, 0.09344, 0.9956] + vc (r) : gamma [9,opdp] 380.9 MeV : 3.877 2.656 -0.25 cm [0.01444, 0.0322, 0.9994] + cal (l) : gamma [8,opdp] 242 MeV : -1.738 6.173 -15 cm [0.003105, 0.09344, 0.9956] + cal (r) : gamma [9,opdp] 380.9 MeV : 3.895 2.696 -15 cm [0.01444, 0.0322, 0.9994] --- - angle between the eta decay products : 130.629 deg + angle between the eta decay products : 128.9 deg --- Triggered angular ranges: - 5 [ 0.2000, 0.0000) + 6 [ 0.0000, -0.2000) --- Production model data: - Incident particle (LAB) : pi- -7.6190 -13.0826 720.9851 MeV -- 734.5260 MeV - (SCM) : pi- -4.7362 -8.1325 448.1864 MeV -- 469.5098 MeV + Incident particle (LAB) : pi- -1.7193 -17.4771 724.6073 MeV -- 738.1355 MeV + (SCM) : pi- -1.0672 -10.8482 449.7700 MeV -- 471.0538 MeV Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 4.7362 8.1325 -448.1864 MeV -- 1.0399 GeV - Output particle (LAB) : eta -125.1673 -24.0863 268.6150 MeV -- 623.3409 MeV - (SCM) : eta -122.3301 -19.2144 0.1241 MeV -- 561.6820 MeV - Nucleus output particle (LAB) : neutron 117.5483 11.0037 452.3700 MeV -- 1.0495 GeV - (SCM) : neutron 122.3301 19.2144 -0.1241 MeV -- 947.6903 MeV + (SCM) : proton 1.0672 10.8482 -449.7700 MeV -- 1.0406 GeV + Output particle (LAB) : eta -123.9183 34.8816 267.0085 MeV -- 622.9115 MeV + (SCM) : eta -123.2787 41.3833 -2.5583 MeV -- 563.0893 MeV + Nucleus output particle (LAB) : neutron 122.1990 -52.3586 457.5988 MeV -- 1.0535 GeV + (SCM) : neutron 123.2787 -41.3833 2.5583 MeV -- 948.5251 MeV --- Reconstructed data: -- entry points: - left: 1.24601 -0.954767 -15 cm - right: 8.21423 -4.70985 -15 cm + left: -2.90287 4.41857 -15 cm + right: 4.408 2.64492 -15 cm target: 0 0 0 fm - -- the angle: 123.191 deg - -- mass of the output particle: 555.126 MeV - -- mass of the nucleus output particle: 946.458 MeV + -- the angle: 122.673 deg + -- mass of the output particle: 492.699 MeV + -- mass of the nucleus output particle: 1.00909 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -82.6311 -33.8084 311.6719 MeV -- 642.8645 MeV - (SCM) : eta -82.6311 -33.8084 36.1662 MeV -- 563.4212 MeV - Nucleus output particle (LAB) : neutron 82.6311 33.8084 418.3281 MeV -- 1.0386 GeV - (SCM) : neutron 82.6311 33.8084 -36.1662 MeV -- 951.3475 MeV + Output particle (LAB) : eta -82.8143 31.9833 272.4367 MeV -- 569.9604 MeV + (SCM) : eta -82.8143 31.9833 27.7466 MeV -- 501.4010 MeV + Nucleus output particle (LAB) : neutron 82.8143 -31.9833 457.5633 MeV -- 1.1115 GeV + (SCM) : neutron 82.8143 -31.9833 -27.7466 MeV -- 1.0134 GeV -- triggered angular ranges: 4 [ 0.4000, 0.2000) --- Energy Deposit - monitor : 433.199 keV + monitor : 351.207 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 260.227 MeV - 0 0 0.6464 0.2657 0 0 - 0 5.94 22.95 18.4 0.6214 0 - 0 0.5832 194.9 12.66 0 0 - 0 0 1.813 0.6284 0 0.7998 - cal (r) : 382.637 MeV - 0 0.4541 0 0 0 0 - 0 0.2539 0.8944 1.101 0 0 - 3.88 238.5 19.59 1.602 0 0 - 18.71 94.41 3.278 0 0 0 -Event 12782 + cal (l) : 236.094 MeV + 0 0 0.5728 167.3 1.891 0 + 0 0 11.43 45.54 0.1836 0 + 0 0 0.7018 4.332 2.177 0.3483 + 0 0 0 1.619 0 0 + cal (r) : 333.867 MeV + 0.8654 3.901 8.05 4.71 0 0 + 0.5341 13.7 275.8 1.043 0 0 + 1.087 11.89 10.74 1.142 0.2215 0 + 0 0 0.2301 0 0 0 +Event 11236 --- Track Points - monitor : pi- [1,bp] 721.6 MeV : 0.6514 1.393 -0.125 cm [-0.003437, 0.00326, 1] - target : pi- [1,bp] 721 MeV : 3.621 3.448 1.518 cm [-0.6451, -0.7641, 0.004137] - : eta [4,op] 197.7 MeV : 0.101 -0.7168 1.545 cm [-0.2361, -0.9713, -0.02966] - : neutron [5,np] 550 MeV : 0.101 -0.7168 1.545 cm [-0.7604, -0.6492, 0.0174] - : gamma [7,opdp] 243.4 MeV : 0.101 -0.7168 1.545 cm [-0.9149, 0.4013, -0.04377] - : gamma [6,opdp] 339 MeV : 0.101 -0.7168 1.545 cm [0.5193, -0.8545, 0.01413] - vc (l) : gamma [6,opdp] 339 MeV : 6.186 2.371 -0.25 cm [0.1095, 0.01413, 0.9939] - vc (r) : gamma [7,opdp] 243.4 MeV : -8.351 -1.071 -0.25 cm [-0.1508, -0.04377, 0.9876] - cal (l) : gamma [6,opdp] 339 MeV : 6.324 2.388 -15 cm [0.1095, 0.01413, 0.9939] - cal (r) : gamma [7,opdp] 243.4 MeV : -8.542 -1.127 -15 cm [-0.1508, -0.04377, 0.9876] + monitor : pi- [1,bp] 729.8 MeV : 4.082 -4.555 -1.25 mm [-0.00943, 0.0005985, 1] + target : pi- [1,bp] 728.7 MeV : 3.314 3.744 -0.4209 cm [-0.6502, -0.7597, 0.001502] + : eta [4,op] 366.1 MeV : 3.013 3.392 -0.4202 cm [-0.3697, -0.9291, 0.01347] + : neutron [5,np] 400.2 MeV : 3.013 3.392 -0.4202 cm [-0.8459, -0.5332, -0.009298] + : gamma [7,opdp] 391.3 MeV : 3.013 3.392 -0.4202 cm [0.3316, -0.9404, 0.07564] + : gamma [6,opdp] 267.7 MeV : 3.013 3.392 -0.4202 cm [-0.9903, 0.104, -0.09215] + vc (l) : gamma [7,opdp] 391.3 MeV : -1.751 4.195 -0.25 cm [-0.09694, 0.07564, 0.9924] + vc (r) : gamma [6,opdp] 267.7 MeV : 5.576 -6.116 -0.25 cm [0.1559, -0.09215, 0.9835] + cal (l) : gamma [7,opdp] 391.3 MeV : -1.873 4.29 -15 cm [-0.09694, 0.07564, 0.9924] + cal (r) : gamma [6,opdp] 267.7 MeV : 5.774 -6.233 -15 cm [0.1559, -0.09215, 0.9835] --- - angle between the eta decay products : 144.948 deg + angle between the eta decay products : 115.665 deg --- Triggered angular ranges: - 9 [-0.6000, -0.8000) + 3 [ 0.6000, 0.4000) --- Production model data: - Incident particle (LAB) : pi- -3.1972 3.7058 719.4385 MeV -- 732.8681 MeV - (SCM) : pi- -1.9888 2.3052 447.5307 MeV -- 468.7993 MeV + Incident particle (LAB) : pi- -7.2366 1.2103 728.5981 MeV -- 741.8819 MeV + (SCM) : pi- -4.4849 0.7501 451.5530 MeV -- 472.6527 MeV Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 1.9888 -2.3052 -447.5307 MeV -- 1.0395 GeV - Output particle (LAB) : eta 87.6463 -5.8634 177.0644 MeV -- 582.4267 MeV - (SCM) : eta 88.7961 -7.1961 -81.6728 MeV -- 561.0345 MeV - Nucleus output particle (LAB) : neutron -90.8435 9.5692 542.3741 MeV -- 1.0887 GeV - (SCM) : neutron -88.7961 7.1961 81.6728 MeV -- 947.3067 MeV + (SCM) : proton 4.4849 -0.7501 -451.5530 MeV -- 1.0413 GeV + Output particle (LAB) : eta 114.9394 4.9315 347.5238 MeV -- 658.9089 MeV + (SCM) : eta 117.7112 4.4679 68.4437 MeV -- 564.5469 MeV + Nucleus output particle (LAB) : neutron -122.1759 -3.7212 381.0743 MeV -- 1.0212 GeV + (SCM) : neutron -117.7112 -4.4679 -68.4437 MeV -- 949.3911 MeV --- Reconstructed data: -- entry points: - left: 8.62396 2.72626 -15 cm - right: -8.90495 -2.08036 -15 cm + left: -2.01884 3.34591 -15 cm + right: 6.82494 -6.29974 -15 cm target: 0 0 0 fm - -- the angle: 146.643 deg - -- mass of the output particle: 552.892 MeV - -- mass of the nucleus output particle: 945.723 MeV + -- the angle: 121.727 deg + -- mass of the output particle: 558.832 MeV + -- mass of the nucleus output particle: 924.564 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 48.8273 5.1276 166.3904 MeV -- 579.4703 MeV - (SCM) : eta 48.8273 5.1276 -94.5549 MeV -- 563.0637 MeV - Nucleus output particle (LAB) : neutron -48.8273 -5.1276 563.6096 MeV -- 1.1020 GeV - (SCM) : neutron -48.8273 -5.1276 94.5549 MeV -- 951.7050 MeV + Output particle (LAB) : eta 145.2625 -3.7623 314.3047 MeV -- 657.4164 MeV + (SCM) : eta 145.2625 -3.7623 32.0760 MeV -- 578.3060 MeV + Nucleus output particle (LAB) : neutron -145.2625 3.7623 415.6953 MeV -- 1.0241 GeV + (SCM) : neutron -145.2625 3.7623 -32.0760 MeV -- 936.4627 MeV -- triggered angular ranges: - 10 [-0.8000, -1.0000) + 4 [ 0.4000, 0.2000) --- Energy Deposit - monitor : 508.635 keV + monitor : 398.415 keV vc (l) : 0 eV - vc (r) : 0 eV - cal (l) : 315.503 MeV - 2.959 6.017 12.87 0.01438 0 0 - 9.457 258.3 9.588 0 0 0 - 3.304 10.36 0.8461 0.7767 0 0 - 0.3466 0.6518 0 0 0 0 - cal (r) : 263.967 MeV - 0 0 0 0 0.5555 0 - 0 0 0.2117 1.197 8.022 1.07 - 0 0 0 3.309 239.3 8.042 - 0 0 0 1.424 0.367 0.4899 -Event 13268 + vc (r) : 29.1147 keV + cal (l) : 404.318 MeV + 0 0.3891 15.65 8.857 1.039 0 + 0 0 9.979 359.2 0.9035 0 + 0 0 0.2122 2.827 3.915 0 + 0 0 1.352 0 0 0 + cal (r) : 253.099 MeV + 0 0 0 0 0 0 + 0 0 0.3867 0 0 0 + 1.195 59.19 29.67 1.198 0 0 + 7.284 106.4 46.7 1.05 0 0 +Event 12266 --- Track Points - monitor : pi- [1,bp] 730.3 MeV : -1.274 0.6765 -0.125 cm [-0.01406, 0.005383, 0.9999] - target : pi- [1,bp] 729.8 MeV : 1.634 4.725 0.8486 cm [-0.6557, -0.755, 0.007005] - : eta [4,op] 246.6 MeV : -2.108 0.4174 0.8886 cm [-0.182, -0.9832, 0.01015] - : neutron [5,np] 530.8 MeV : -2.108 0.4174 0.8886 cm [-0.815, -0.5795, 0.004498] - : gamma [7,opdp] 353.9 MeV : -2.108 0.4174 0.8886 cm [0.5551, -0.8315, 0.02113] - : gamma [6,opdp] 246.9 MeV : -2.108 0.4174 0.8886 cm [-0.9775, 0.2099, -0.02014] - vc (l) : gamma [7,opdp] 353.9 MeV : 7.477 2.172 -0.25 cm [0.1517, 0.02113, 0.9882] - vc (r) : gamma [6,opdp] 246.9 MeV : 2.99 -0.2532 -0.25 cm [0.05022, -0.02014, 0.9985] - cal (l) : gamma [7,opdp] 353.9 MeV : 7.669 2.198 -15 cm [0.1517, 0.02113, 0.9882] - cal (r) : gamma [6,opdp] 246.9 MeV : 3.052 -0.2785 -15 cm [0.05022, -0.02014, 0.9985] + monitor : pi- [1,bp] 730.5 MeV : 1.31 0.3119 -0.125 cm [0.001741, 0.01583, 0.9999] + target : pi- [1,bp] 730 MeV : 4.139 2.805 0.7608 cm [-0.6413, -0.7672, 0.01402] + : eta [5,op] 330.6 MeV : -0.04866 -2.207 0.8521 cm [-0.2807, -0.9598, -0.008056] + : neutron [6,np] 445.4 MeV : -0.04866 -2.207 0.8521 cm [-0.8401, -0.5418, 0.0275] + : gamma [8,opdp] 410.4 MeV : -0.04866 -2.207 0.8521 cm [0.3015, -0.9527, 0.0383] + : gamma [7,opdp] 229.5 MeV : -0.04866 -2.207 0.8521 cm [-0.9436, 0.3211, -0.08012] + vc (l) : gamma [8,opdp] 410.4 MeV : -8.391 3.047 -0.25 cm [-0.1294, 0.0383, 0.9909] + vc (r) : gamma [7,opdp] 229.5 MeV : -1.785 -3.922 -0.25 cm [-0.06595, -0.08012, 0.9946] + cal (l) : gamma [8,opdp] 410.4 MeV : -8.554 3.095 -15 cm [-0.1294, 0.0383, 0.9909] + cal (r) : gamma [7,opdp] 229.5 MeV : -1.868 -4.023 -15 cm [-0.06595, -0.08012, 0.9946] --- - angle between the eta decay products : 135.855 deg + angle between the eta decay products : 126.405 deg --- Triggered angular ranges: - 7 [-0.2000, -0.4000) + 4 [ 0.4000, 0.2000) --- Production model data: - Incident particle (LAB) : pi- -12.1911 4.8918 728.3056 MeV -- 741.6747 MeV - (SCM) : pi- -7.5561 3.0320 451.4100 MeV -- 472.5644 MeV - Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 7.5561 -3.0320 -451.4100 MeV -- 1.0412 GeV - Output particle (LAB) : eta 121.4631 2.5041 214.5868 MeV -- 600.7993 MeV - (SCM) : eta 125.9111 0.7192 -51.1409 MeV -- 564.4664 MeV - Nucleus output particle (LAB) : neutron -133.6541 2.3878 513.7188 MeV -- 1.0791 GeV - (SCM) : neutron -125.9111 -0.7192 51.1409 MeV -- 949.3432 MeV + Incident particle (LAB) : pi- 1.3815 9.5858 728.0937 MeV -- 741.4136 MeV + (SCM) : pi- 0.8564 5.9420 451.3269 MeV -- 472.4530 MeV + Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton -0.8564 -5.9420 -451.3269 MeV -- 1.0412 GeV + Output particle (LAB) : eta 132.8923 -2.6637 302.7434 MeV -- 639.9014 MeV + (SCM) : eta 132.3714 -6.2787 28.1655 MeV -- 564.3648 MeV + Nucleus output particle (LAB) : neutron -131.5108 12.2494 425.3503 MeV -- 1.0398 GeV + (SCM) : neutron -132.3714 6.2787 -28.1655 MeV -- 949.2829 MeV --- Reconstructed data: -- entry points: - left: 10.3792 2.91256 -15 cm - right: 2.75784 -2.64417 -15 cm + left: -9.72625 3.38895 -15 cm + right: -2.30106 -3.29884 -15 cm target: 0 0 0 fm - -- the angle: 137.229 deg - -- mass of the output particle: 533.543 MeV - -- mass of the nucleus output particle: 938.527 MeV + -- the angle: 123.084 deg + -- mass of the output particle: 554.819 MeV + -- mass of the nucleus output particle: 937.429 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 159.6920 7.8897 199.6037 MeV -- 591.6701 MeV - (SCM) : eta 159.6920 7.8897 -63.5653 MeV -- 560.6000 MeV - Nucleus output particle (LAB) : neutron -159.6920 -7.8897 530.3963 MeV -- 1.0898 GeV - (SCM) : neutron -159.6920 -7.8897 63.5653 MeV -- 954.1686 MeV + Output particle (LAB) : eta 117.0183 9.6306 324.6042 MeV -- 653.4354 MeV + (SCM) : eta 117.0183 9.6306 45.4276 MeV -- 568.9232 MeV + Nucleus output particle (LAB) : neutron -117.0183 -9.6306 405.3958 MeV -- 1.0281 GeV + (SCM) : neutron -117.0183 -9.6306 -45.4276 MeV -- 945.8455 MeV + -- triggered angular ranges: + 4 [ 0.4000, 0.2000) + --- Energy Deposit + monitor : 371.091 keV + vc (l) : 2.5339 keV + vc (r) : 24.01 keV + cal (l) : 411.456 MeV + 0 0 0.2958 0.7856 9.901 4.828 + 0 0 0 3.814 354.9 29.41 + 0 0 0 2.004 0.483 5.03 + 0 0 0 0 0 0 + cal (r) : 241.979 MeV + 0 0 0 0 0 0 + 0 0 2.892 2.254 0.2072 0 + 0 0 3.324 216.3 1.519 0 + 0 0 1.533 13.94 0 0 +Event 16697 + --- Track Points + monitor : pi- [1,bp] 732.7 MeV : -7.201 -1.713 -1.25 mm [-0.00432, 0.006768, 1] + target : pi- [1,bp] 732.2 MeV : 2.538 4.308 0.001097 cm [-0.6457, -0.7635, 0.006696] + : eta [4,op] 281.6 MeV : -1.523 -0.4917 0.04344 cm [-0.9243, -0.3613, 0.1228] + : neutron [5,np] 503.7 MeV : -1.523 -0.4917 0.04344 cm [-0.4193, -0.9059, -0.05979] + : gamma [7,opdp] 226.9 MeV : -1.523 -0.4917 0.04344 cm [0.5146, -0.8565, 0.04063] + : gamma [6,opdp] 389.1 MeV : -1.523 -0.4917 0.04344 cm [-0.9691, 0.238, 0.06516] + vc (l) : gamma [7,opdp] 226.9 MeV : 4.604 2.454 -0.25 cm [0.1044, 0.04063, 0.9937] + vc (r) : gamma [6,opdp] 389.1 MeV : 2.072 3.793 -0.25 cm [0.02091, 0.06516, 0.9977] + cal (l) : gamma [7,opdp] 226.9 MeV : 4.736 2.505 -15 cm [0.1044, 0.04063, 0.9937] + cal (r) : gamma [6,opdp] 389.1 MeV : 2.098 3.874 -15 cm [0.02091, 0.06516, 0.9977] + --- + angle between the eta decay products : 134.416 deg + --- Triggered angular ranges: + 6 [ 0.0000, -0.2000) + --- Production model data: + Incident particle (LAB) : pi- -2.4609 4.4533 730.5792 MeV -- 743.8089 MeV + (SCM) : pi- -1.5240 2.7578 452.4240 MeV -- 473.4736 MeV + Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 1.5240 -2.7578 -452.4240 MeV -- 1.0417 GeV + Output particle (LAB) : eta -133.9986 34.5711 245.2487 MeV -- 615.9955 MeV + (SCM) : eta -133.0894 32.9257 -24.6822 MeV -- 565.2954 MeV + Nucleus output particle (LAB) : neutron 131.5377 -30.1178 485.3304 MeV -- 1.0661 GeV + (SCM) : neutron 133.0894 -32.9257 24.6822 MeV -- 949.8364 MeV + --- Reconstructed data: + -- entry points: + left: 6.51736 2.61103 -15 cm + right: 3.28243 1.31037 -15 cm + target: 0 0 0 fm + -- the angle: 132.931 deg + -- mass of the output particle: 526.028 MeV + -- mass of the nucleus output particle: 967.807 MeV + -- production model data: + Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV + (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV + Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV + Output particle (LAB) : eta -118.0869 17.6741 246.4576 MeV -- 593.0458 MeV + (SCM) : eta -118.0869 17.6741 -12.2173 MeV -- 539.5473 MeV + Nucleus output particle (LAB) : neutron 118.0869 -17.6741 483.5424 MeV -- 1.0884 GeV + (SCM) : neutron 118.0869 -17.6741 12.2173 MeV -- 975.2214 MeV + -- triggered angular ranges: + 6 [ 0.0000, -0.2000) + --- Energy Deposit + monitor : 396.005 keV + vc (l) : 0 eV + vc (r) : 0 eV + cal (l) : 221.502 MeV + 0.2749 2.616 11.72 0.3668 0.04428 0 + 3.417 96.42 100.2 0.4724 0 0 + 0.6981 0.3475 1.653 0 0 0 + 1.092 1.828 0.3061 0 0 0 + cal (r) : 371.544 MeV + 0 0 10.13 2.327 0 0 + 2.954 5.829 309.8 4.073 0 0 + 0.3007 3.159 23.58 4.637 0 0 + 0 0.5846 0.7879 3.42 0 0 +Event 16865 + --- Track Points + monitor : pi- [1,bp] 736.2 MeV : -1.18 -0.9472 -0.125 cm [-0.006586, 0.003447, 1] + target : pi- [1,bp] 735.6 MeV : 2.105 4.535 -0.9 cm [-0.6456, -0.7636, 0.002129] + : eta [9,op] 230.9 MeV : -3.868 -2.526 -0.8818 cm [-0.1517, -0.9795, -0.1325] + : neutron [10,np] 551.5 MeV : -3.868 -2.526 -0.8818 cm [-0.7953, -0.6032, 0.05939] + : gamma [12,opdp] 354.7 MeV : -3.868 -2.526 -0.8818 cm [0.5463, -0.8362, -0.04833] + : gamma [11,opdp] 239.8 MeV : -3.868 -2.526 -0.8818 cm [-0.9542, 0.294, -0.05608] + vc (l) : gamma [12,opdp] 354.7 MeV : 3.753 -3.722 -0.25 cm [0.1417, -0.04833, 0.9887] + vc (r) : gamma [11,opdp] 239.8 MeV : 1.376 -4.011 -0.25 cm [-0.037, -0.05608, 0.9977] + cal (l) : gamma [12,opdp] 354.7 MeV : 3.932 -3.783 -15 cm [0.1417, -0.04833, 0.9887] + cal (r) : gamma [11,opdp] 239.8 MeV : 1.33 -4.081 -15 cm [-0.037, -0.05608, 0.9977] + --- + angle between the eta decay products : 139.85 deg + --- Triggered angular ranges: + 8 [-0.4000, -0.6000) + --- Production model data: + Incident particle (LAB) : pi- -3.6355 2.1559 732.4928 MeV -- 745.6831 MeV + (SCM) : pi- -2.2496 1.3341 453.2620 MeV -- 474.2711 MeV + Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 2.2496 -1.3341 -453.2620 MeV -- 1.0420 GeV + Output particle (LAB) : eta 118.5129 -30.5921 195.7386 MeV -- 594.5146 MeV + (SCM) : eta 119.8313 -31.3740 -69.8925 MeV -- 566.0226 MeV + Nucleus output particle (LAB) : neutron -122.1485 32.7481 536.7542 MeV -- 1.0894 GeV + (SCM) : neutron -119.8313 31.3740 69.8925 MeV -- 950.2694 MeV + --- Reconstructed data: + -- entry points: + left: 4.56966 -3.29046 -15 cm + right: 1.72439 -3.32572 -15 cm + target: 0 0 0 fm + -- the angle: 132.315 deg + -- mass of the output particle: 486.315 MeV + -- mass of the nucleus output particle: 1.0051 GeV + -- production model data: + Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV + (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV + Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV + Output particle (LAB) : eta 117.8194 -29.8733 212.0997 MeV -- 544.3001 MeV + (SCM) : eta 117.8194 -29.8733 -26.8652 MeV -- 501.9940 MeV + Nucleus output particle (LAB) : neutron -117.8194 29.8733 517.9003 MeV -- 1.1372 GeV + (SCM) : neutron -117.8194 29.8733 26.8652 MeV -- 1.0128 GeV -- triggered angular ranges: 7 [-0.2000, -0.4000) --- Energy Deposit - monitor : 403.769 keV + monitor : 418.908 keV + vc (l) : 0 eV + vc (r) : 221.831 keV + cal (l) : 330.393 MeV + 0 0 0.5087 0 0 0 + 0 5.595 2.816 0.5636 0 0 + 3.394 20.8 270 1.164 0.4956 0 + 0.01441 11.62 12.33 1.059 0 0 + cal (r) : 213.907 MeV + 0 0 0.3563 0.1648 0 0 + 0 3.968 0 0.9504 0 0 + 0 1.441 166.8 17.25 0 0 + 0 0.6439 1.331 20.96 0 0 +Event 17304 + --- Track Points + monitor : pi- [1,bp] 732.5 MeV : 0.2886 -1.395 -0.125 cm [-0.008719, -0.006016, 0.9999] + target : pi- [1,bp] 732 MeV : 3.238 3.81 -1.554 cm [-0.6496, -0.7603, -0.005509] + : eta [5,op] 251.6 MeV : -2.898 -3.374 -1.599 cm [-0.9465, -0.322, -0.01878] + : neutron [6,np] 529.2 MeV : -2.898 -3.374 -1.599 cm [-0.4461, -0.895, 0.006705] + : gamma [8,opdp] 363.3 MeV : -2.898 -3.374 -1.599 cm [-0.9257, 0.3778, 0.01932] + : gamma [7,opdp] 239.6 MeV : -2.898 -3.374 -1.599 cm [0.4095, -0.911, -0.04903] + vc (l) : gamma [7,opdp] 239.6 MeV : -4.844 -4.393 -0.25 cm [-0.01389, -0.04903, 0.9987] + vc (r) : gamma [8,opdp] 363.3 MeV : -3.17 -0.4921 -0.25 cm [-0.1253, 0.01932, 0.9919] + cal (l) : gamma [7,opdp] 239.6 MeV : -4.862 -4.455 -15 cm [-0.01389, -0.04903, 0.9987] + cal (r) : gamma [8,opdp] 363.3 MeV : -3.328 -0.4678 -15 cm [-0.1253, 0.01932, 0.9919] + --- + angle between the eta decay products : 136.399 deg + --- Triggered angular ranges: + 7 [-0.2000, -0.4000) + --- Production model data: + Incident particle (LAB) : pi- -6.7723 -1.1788 729.6824 MeV -- 742.9425 MeV + (SCM) : pi- -4.1953 -0.7303 452.0288 MeV -- 473.1046 MeV + Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 4.1953 0.7303 -452.0288 MeV -- 1.0415 GeV + Output particle (LAB) : eta -130.3730 -4.7267 215.1755 MeV -- 602.8870 MeV + (SCM) : eta -127.8982 -4.2959 -51.4726 MeV -- 564.9589 MeV + Nucleus output particle (LAB) : neutron 123.6007 3.5479 514.5069 MeV -- 1.0783 GeV + (SCM) : neutron 127.8982 4.2959 51.4726 MeV -- 949.6362 MeV + --- Reconstructed data: + -- entry points: + left: -2.5794 -4.49848 -15 cm + right: -5.76084 0.211613 -15 cm + target: 0 0 0 fm + -- the angle: 132.894 deg + -- mass of the output particle: 530.39 MeV + -- mass of the nucleus output particle: 953.074 MeV + -- production model data: + Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV + (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV + Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV + Output particle (LAB) : eta -142.2150 -15.8098 227.4100 MeV -- 594.5621 MeV + (SCM) : eta -142.2150 -15.8098 -34.0921 MeV -- 550.4098 MeV + Nucleus output particle (LAB) : neutron 142.2150 15.8098 502.5900 MeV -- 1.0869 GeV + (SCM) : neutron 142.2150 15.8098 34.0921 MeV -- 964.3588 MeV + -- triggered angular ranges: + 7 [-0.2000, -0.4000) + --- Energy Deposit + monitor : 393.35 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 369.577 MeV - 2.702 13.52 0 0 0 0 - 41.45 292.7 1.61 0.2956 0 0 - 7.143 10.12 0 0 0 0 - 0 0 0 0 0 0 - cal (r) : 222.093 MeV - 0 0 0 0 0 0 - 0 4.72 26.98 0 0 0 - 0.5977 2.633 168.7 9.309 1.251 0 - 0.4973 0.7498 0.785 5.493 0.4176 0 + cal (l) : 228.844 MeV + 0 0 0.08028 0.3041 0 0 + 0 0 1.91 1.645 0.2502 0 + 0 1.504 12.52 127.1 3.137 0.3718 + 0 0 5.372 64.25 10.3 0.1323 + cal (r) : 365.718 MeV + 0 0 0.8693 0.4207 0.6013 3.266 + 0 0 2.971 81.57 56.73 0.7697 + 0 0 0.6244 171.4 40.23 4.163 + 0 0 0 0.5787 1.564 0 Run terminated. Run Summary - Number of events processed : 13269, effectively: 10 - User=2.900000s Real=2.906851s Sys=0.000000s + Number of events processed : 17305, effectively: 10 + User=4.060000s Real=4.075432s Sys=0.000000s --- Setup acceptances (range | real (trg / mon) | rec (trg / mon / all)): - 1 [ 1.0000, 0.8000) | 0.00100604 ( 1 / 994 ) | 0.00100604 ( 1 / 994 / 1229 ) - 2 [ 0.8000, 0.6000) | 0.00000000 ( 0 / 1002 ) | 0.00000000 ( 0 / 1002 / 1256 ) - 3 [ 0.6000, 0.4000) | 0.00000000 ( 0 / 1061 ) | 0.00000000 ( 0 / 1061 / 1287 ) - 4 [ 0.4000, 0.2000) | 0.00000000 ( 0 / 1031 ) | 0.00096993 ( 1 / 1031 / 1276 ) - 5 [ 0.2000, 0.0000) | 0.00307377 ( 3 / 976 ) | 0.00409836 ( 4 / 976 / 1206 ) - 6 [ 0.0000, -0.2000) | 0.00189934 ( 2 / 1053 ) | 0.00094967 ( 1 / 1053 / 1294 ) - 7 [-0.2000, -0.4000) | 0.00295567 ( 3 / 1015 ) | 0.00098522 ( 1 / 1015 / 1217 ) - 8 [-0.4000, -0.6000) | 0.00000000 ( 0 / 1000 ) | 0.00100000 ( 1 / 1000 / 1225 ) - 9 [-0.6000, -0.8000) | 0.00096805 ( 1 / 1033 ) | 0.00000000 ( 0 / 1033 / 1278 ) - 10 [-0.8000, -1.0000) | 0.00000000 ( 0 / 998 ) | 0.00100200 ( 1 / 998 / 1236 ) + 1 [ 1.0000, 0.8000) | 0.00000000 ( 0 / 1349 ) | 0.00074129 ( 1 / 1349 / 1664 ) + 2 [ 0.8000, 0.6000) | 0.00080645 ( 1 / 1240 ) | 0.00000000 ( 0 / 1240 / 1525 ) + 3 [ 0.6000, 0.4000) | 0.00157729 ( 2 / 1268 ) | 0.00157729 ( 2 / 1268 / 1594 ) + 4 [ 0.4000, 0.2000) | 0.00153965 ( 2 / 1299 ) | 0.00230947 ( 3 / 1299 / 1603 ) + 5 [ 0.2000, 0.0000) | 0.00071891 ( 1 / 1391 ) | 0.00071891 ( 1 / 1391 / 1697 ) + 6 [ 0.0000, -0.2000) | 0.00153139 ( 2 / 1306 ) | 0.00076570 ( 1 / 1306 / 1580 ) + 7 [-0.2000, -0.4000) | 0.00072886 ( 1 / 1372 ) | 0.00145773 ( 2 / 1372 / 1654 ) + 8 [-0.4000, -0.6000) | 0.00076628 ( 1 / 1305 ) | 0.00000000 ( 0 / 1305 / 1597 ) + 9 [-0.6000, -0.8000) | 0.00000000 ( 0 / 1401 ) | 0.00000000 ( 0 / 1401 / 1730 ) + 10 [-0.8000, -1.0000) | 0.00000000 ( 0 / 1340 ) | 0.00000000 ( 0 / 1340 / 1665 ) --- False hits (edt | rec): 0 | 0 ================== Deleting memory pools =================== Number of memory pools allocated: 15; of which, static: 3 -Dynamic pools deleted: 12 / Total memory freed: 0.69 MB +Dynamic pools deleted: 12 / Total memory freed: 0.53 MB ============================================================ diff --git a/examples/advanced/ChargeExchangeMC/src/CexmcHistoWidget.cc b/examples/advanced/ChargeExchangeMC/src/CexmcHistoWidget.cc index e852a9821f..4d61f26cd9 100644 --- a/examples/advanced/ChargeExchangeMC/src/CexmcHistoWidget.cc +++ b/examples/advanced/ChargeExchangeMC/src/CexmcHistoWidget.cc @@ -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 ); } diff --git a/examples/advanced/HGCal_testbeam/History b/examples/advanced/HGCal_testbeam/History index 330af23e65..8c8fe88da2 100644 --- a/examples/advanced/HGCal_testbeam/History +++ b/examples/advanced/HGCal_testbeam/History @@ -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 diff --git a/examples/advanced/HGCal_testbeam/testbeam_electron.out b/examples/advanced/HGCal_testbeam/testbeam_electron.out index 06208bbd53..a75e8de4e6 100644 --- a/examples/advanced/HGCal_testbeam/testbeam_electron.out +++ b/examples/advanced/HGCal_testbeam/testbeam_electron.out @@ -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 diff --git a/examples/advanced/History b/examples/advanced/History index bfa413b470..76fd4ba379 100644 --- a/examples/advanced/History +++ b/examples/advanced/History @@ -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. diff --git a/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out b/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out index 27bcbf677e..a4d9ab40ba 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out +++ b/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out @@ -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... diff --git a/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out b/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out index ad14888d73..816d93b3d9 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out +++ b/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out @@ -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 diff --git a/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out b/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out index 21a103dcab..74e4d26c33 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out +++ b/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out @@ -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 diff --git a/examples/advanced/STCyclotron/STCyclotron.out b/examples/advanced/STCyclotron/STCyclotron.out index 0f658137c9..bcd2ec33e6 100644 --- a/examples/advanced/STCyclotron/STCyclotron.out +++ b/examples/advanced/STCyclotron/STCyclotron.out @@ -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. diff --git a/examples/advanced/air_shower/air_shower.out b/examples/advanced/air_shower/air_shower.out index 29213124a8..3bdeea5174 100644 --- a/examples/advanced/air_shower/air_shower.out +++ b/examples/advanced/air_shower/air_shower.out @@ -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. diff --git a/examples/advanced/amsEcal/run1.out b/examples/advanced/amsEcal/run1.out index 2dbef4a89e..ce2e4a889c 100644 --- a/examples/advanced/amsEcal/run1.out +++ b/examples/advanced/amsEcal/run1.out @@ -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. diff --git a/examples/advanced/brachytherapy/README b/examples/advanced/brachytherapy/README index 9c76e74cad..1c4d04a564 100644 --- a/examples/advanced/brachytherapy/README +++ b/examples/advanced/brachytherapy/README @@ -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 diff --git a/examples/advanced/brachytherapy/brachytherapy.out b/examples/advanced/brachytherapy/brachytherapy.out index 8d5237eea6..60a66a3935 100644 --- a/examples/advanced/brachytherapy/brachytherapy.out +++ b/examples/advanced/brachytherapy/brachytherapy.out @@ -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 ======== diff --git a/examples/advanced/composite_calorimeter/composite_calorimeter.out b/examples/advanced/composite_calorimeter/composite_calorimeter.out index 41decc9baf..8dbffc5a05 100644 --- a/examples/advanced/composite_calorimeter/composite_calorimeter.out +++ b/examples/advanced/composite_calorimeter/composite_calorimeter.out @@ -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. diff --git a/examples/advanced/dna/cellularPhantom/.README.txt b/examples/advanced/dna/cellularPhantom/.README.txt index baaf1bfdbc..ace5cca0cb 100644 --- a/examples/advanced/dna/cellularPhantom/.README.txt +++ b/examples/advanced/dna/cellularPhantom/.README.txt @@ -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 */ diff --git a/examples/advanced/dna/cellularPhantom/History b/examples/advanced/dna/cellularPhantom/History index 8141433feb..60c88ec5b0 100644 --- a/examples/advanced/dna/cellularPhantom/History +++ b/examples/advanced/dna/cellularPhantom/History @@ -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 diff --git a/examples/advanced/dna/cellularPhantom/README b/examples/advanced/dna/cellularPhantom/README index 41ed52edb2..0242733dc9 100644 --- a/examples/advanced/dna/cellularPhantom/README +++ b/examples/advanced/dna/cellularPhantom/README @@ -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 diff --git a/examples/advanced/dna/cellularPhantom/cellularPhantom.cc b/examples/advanced/dna/cellularPhantom/cellularPhantom.cc index 8bcd77ab48..dd1873665a 100644 --- a/examples/advanced/dna/cellularPhantom/cellularPhantom.cc +++ b/examples/advanced/dna/cellularPhantom/cellularPhantom.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/cellularPhantom.out b/examples/advanced/dna/cellularPhantom/cellularPhantom.out index 1512df47a2..01dd1f9c9d 100644 --- a/examples/advanced/dna/cellularPhantom/cellularPhantom.out +++ b/examples/advanced/dna/cellularPhantom/cellularPhantom.out @@ -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 =================== diff --git a/examples/advanced/dna/cellularPhantom/include/ActionInitialization.hh b/examples/advanced/dna/cellularPhantom/include/ActionInitialization.hh index 13c3d9432b..bda3f252eb 100644 --- a/examples/advanced/dna/cellularPhantom/include/ActionInitialization.hh +++ b/examples/advanced/dna/cellularPhantom/include/ActionInitialization.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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef ActionInitialization_h #define ActionInitialization_h 1 diff --git a/examples/advanced/dna/cellularPhantom/include/CellParameterisation.hh b/examples/advanced/dna/cellularPhantom/include/CellParameterisation.hh index 6d1202be83..fc7a43ec98 100644 --- a/examples/advanced/dna/cellularPhantom/include/CellParameterisation.hh +++ b/examples/advanced/dna/cellularPhantom/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,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]; } diff --git a/examples/advanced/dna/cellularPhantom/include/DetectorConstruction.hh b/examples/advanced/dna/cellularPhantom/include/DetectorConstruction.hh index 3fb924d7ca..ae800d1930 100644 --- a/examples/advanced/dna/cellularPhantom/include/DetectorConstruction.hh +++ b/examples/advanced/dna/cellularPhantom/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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef DetectorConstruction_h #define DetectorConstruction_h 1 diff --git a/examples/advanced/dna/cellularPhantom/include/DetectorMessenger.hh b/examples/advanced/dna/cellularPhantom/include/DetectorMessenger.hh index 5f12ab164c..5b77d515a2 100644 --- a/examples/advanced/dna/cellularPhantom/include/DetectorMessenger.hh +++ b/examples/advanced/dna/cellularPhantom/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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef DetectorMessenger_h #define DetectorMessenger_h 1 diff --git a/examples/advanced/dna/cellularPhantom/include/EventAction.hh b/examples/advanced/dna/cellularPhantom/include/EventAction.hh index 840876ad92..426c3a6e3a 100644 --- a/examples/advanced/dna/cellularPhantom/include/EventAction.hh +++ b/examples/advanced/dna/cellularPhantom/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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef EventAction_h #define EventAction_h 1 diff --git a/examples/advanced/dna/cellularPhantom/include/PhysicsList.hh b/examples/advanced/dna/cellularPhantom/include/PhysicsList.hh index 9374bf1808..4ea09d623a 100644 --- a/examples/advanced/dna/cellularPhantom/include/PhysicsList.hh +++ b/examples/advanced/dna/cellularPhantom/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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef PhysicsList_h #define PhysicsList_h 1 @@ -54,8 +55,6 @@ class PhysicsList: public G4VModularPhysicsList ~PhysicsList() override; void SetCuts() override; - - private: }; #endif diff --git a/examples/advanced/dna/cellularPhantom/include/PrimaryGeneratorAction.hh b/examples/advanced/dna/cellularPhantom/include/PrimaryGeneratorAction.hh index f79031ddf4..6b2cf965ce 100644 --- a/examples/advanced/dna/cellularPhantom/include/PrimaryGeneratorAction.hh +++ b/examples/advanced/dna/cellularPhantom/include/PrimaryGeneratorAction.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 -// -------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- #ifndef PrimaryGeneratorAction_h #define PrimaryGeneratorAction_h 1 diff --git a/examples/advanced/dna/cellularPhantom/include/Run.hh b/examples/advanced/dna/cellularPhantom/include/Run.hh new file mode 100644 index 0000000000..35eac9c074 --- /dev/null +++ b/examples/advanced/dna/cellularPhantom/include/Run.hh @@ -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 diff --git a/examples/advanced/dna/cellularPhantom/include/RunAction.hh b/examples/advanced/dna/cellularPhantom/include/RunAction.hh index 5ee1445d95..69eb5758aa 100644 --- a/examples/advanced/dna/cellularPhantom/include/RunAction.hh +++ b/examples/advanced/dna/cellularPhantom/include/RunAction.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,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 diff --git a/examples/advanced/dna/cellularPhantom/include/SteppingAction.hh b/examples/advanced/dna/cellularPhantom/include/SteppingAction.hh index 81dc6d58e6..d3eb5285c5 100644 --- a/examples/advanced/dna/cellularPhantom/include/SteppingAction.hh +++ b/examples/advanced/dna/cellularPhantom/include/SteppingAction.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,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; }; diff --git a/examples/advanced/dna/cellularPhantom/plot.C b/examples/advanced/dna/cellularPhantom/plot.C index 41a949632f..fa104b3389 100644 --- a/examples/advanced/dna/cellularPhantom/plot.C +++ b/examples/advanced/dna/cellularPhantom/plot.C @@ -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;iGetEntry(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;iGetEntry(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;iGetEntry(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(); - } diff --git a/examples/advanced/dna/cellularPhantom/src/ActionInitialization.cc b/examples/advanced/dna/cellularPhantom/src/ActionInitialization.cc index 77dfec6d47..8505c72131 100644 --- a/examples/advanced/dna/cellularPhantom/src/ActionInitialization.cc +++ b/examples/advanced/dna/cellularPhantom/src/ActionInitialization.cc @@ -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()); } diff --git a/examples/advanced/dna/cellularPhantom/src/CellParameterisation.cc b/examples/advanced/dna/cellularPhantom/src/CellParameterisation.cc index 5fe58681df..461b63f631 100644 --- a/examples/advanced/dna/cellularPhantom/src/CellParameterisation.cc +++ b/examples/advanced/dna/cellularPhantom/src/CellParameterisation.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/DetectorConstruction.cc b/examples/advanced/dna/cellularPhantom/src/DetectorConstruction.cc index c3017e914c..41caf0692a 100644 --- a/examples/advanced/dna/cellularPhantom/src/DetectorConstruction.cc +++ b/examples/advanced/dna/cellularPhantom/src/DetectorConstruction.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/DetectorMessenger.cc b/examples/advanced/dna/cellularPhantom/src/DetectorMessenger.cc index a0834a840e..3235b9651d 100644 --- a/examples/advanced/dna/cellularPhantom/src/DetectorMessenger.cc +++ b/examples/advanced/dna/cellularPhantom/src/DetectorMessenger.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/EventAction.cc b/examples/advanced/dna/cellularPhantom/src/EventAction.cc index e9086595d5..3dd43f7077 100644 --- a/examples/advanced/dna/cellularPhantom/src/EventAction.cc +++ b/examples/advanced/dna/cellularPhantom/src/EventAction.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/PhysicsList.cc b/examples/advanced/dna/cellularPhantom/src/PhysicsList.cc index feed1f23ea..e058b68333 100644 --- a/examples/advanced/dna/cellularPhantom/src/PhysicsList.cc +++ b/examples/advanced/dna/cellularPhantom/src/PhysicsList.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/PrimaryGeneratorAction.cc b/examples/advanced/dna/cellularPhantom/src/PrimaryGeneratorAction.cc index 843f28e5e7..330fa2c96c 100644 --- a/examples/advanced/dna/cellularPhantom/src/PrimaryGeneratorAction.cc +++ b/examples/advanced/dna/cellularPhantom/src/PrimaryGeneratorAction.cc @@ -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" diff --git a/examples/advanced/dna/cellularPhantom/src/Run.cc b/examples/advanced/dna/cellularPhantom/src/Run.cc new file mode 100644 index 0000000000..dd0188d70f --- /dev/null +++ b/examples/advanced/dna/cellularPhantom/src/Run.cc @@ -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(run); + + // Accumulate energy deposits per voxel + G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels(); + for (G4int i=0; ifVoxelEdeposit[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; + +} diff --git a/examples/advanced/dna/cellularPhantom/src/RunAction.cc b/examples/advanced/dna/cellularPhantom/src/RunAction.cc index 32cf762279..1cb7e4d433 100644 --- a/examples/advanced/dna/cellularPhantom/src/RunAction.cc +++ b/examples/advanced/dna/cellularPhantom/src/RunAction.cc @@ -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(); } diff --git a/examples/advanced/dna/cellularPhantom/src/SteppingAction.cc b/examples/advanced/dna/cellularPhantom/src/SteppingAction.cc index 2da7af4d6b..a2c2ca5366 100644 --- a/examples/advanced/dna/cellularPhantom/src/SteppingAction.cc +++ b/examples/advanced/dna/cellularPhantom/src/SteppingAction.cc @@ -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(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()); } diff --git a/examples/advanced/dna/dsbandrepair/dsbandrepair.out b/examples/advanced/dna/dsbandrepair/dsbandrepair.out index d7eea8c21a..aa1331b494 100644 --- a/examples/advanced/dna/dsbandrepair/dsbandrepair.out +++ b/examples/advanced/dna/dsbandrepair/dsbandrepair.out @@ -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 ====== diff --git a/examples/advanced/dna/moleculardna/.README.txt b/examples/advanced/dna/moleculardna/.README.txt index 50451c8656..8c7c0c56d6 100644 --- a/examples/advanced/dna/moleculardna/.README.txt +++ b/examples/advanced/dna/moleculardna/.README.txt @@ -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, diff --git a/examples/advanced/dna/moleculardna/CMakeLists.txt b/examples/advanced/dna/moleculardna/CMakeLists.txt index 98ad62571d..7812900477 100644 --- a/examples/advanced/dna/moleculardna/CMakeLists.txt +++ b/examples/advanced/dna/moleculardna/CMakeLists.txt @@ -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 diff --git a/examples/advanced/dna/moleculardna/History b/examples/advanced/dna/moleculardna/History index ac1852b1b5..2d3c0304cd 100644 --- a/examples/advanced/dna/moleculardna/History +++ b/examples/advanced/dna/moleculardna/History @@ -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 diff --git a/examples/advanced/dna/moleculardna/README b/examples/advanced/dna/moleculardna/README index 5ce85b7131..283fc8641e 100644 --- a/examples/advanced/dna/moleculardna/README +++ b/examples/advanced/dna/moleculardna/README @@ -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, diff --git a/examples/advanced/dna/moleculardna/cylinders.C b/examples/advanced/dna/moleculardna/cylinders.C index d30c670c39..4f5ee82ae6 100644 --- a/examples/advanced/dna/moleculardna/cylinders.C +++ b/examples/advanced/dna/moleculardna/cylinders.C @@ -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 : "<GetXaxis()->SetBinLabel(90,"DSBpp"); gr2->SetFillColor(49); - //Draw c1->cd(1); gr1->Draw("ba"); diff --git a/examples/advanced/dna/moleculardna/cylinders.mac b/examples/advanced/dna/moleculardna/cylinders.mac index 2042e47716..652ca19f9a 100644 --- a/examples/advanced/dna/moleculardna/cylinders.mac +++ b/examples/advanced/dna/moleculardna/cylinders.mac @@ -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 diff --git a/examples/advanced/dna/moleculardna/ecoli.C b/examples/advanced/dna/moleculardna/ecoli.C index e9fdac714c..6c1728f8d4 100644 --- a/examples/advanced/dna/moleculardna/ecoli.C +++ b/examples/advanced/dna/moleculardna/ecoli.C @@ -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> DSBBPID; // For reading species production @@ -200,26 +204,35 @@ for(int i = 0;i= 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;ieGetBinCenter(h1fragments->FindBin(val)); - double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); - h1fragments->Fill(val,1./binw/1000);//bp-1 - //cout <<"val:"<GetBinCenter(h1fragments->FindBin(val)); + double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); + h1fragments->Fill(val,1./binw/1000);//bp-1 + //cout <<"val:"<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> DSBBPID; // For reading species production @@ -200,26 +204,35 @@ for(int i = 0;i= 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;ieGetBinCenter(h1fragments->FindBin(val)); - double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); - h1fragments->Fill(val,1./binw/1000);//bp-1 - //cout <<"val:"<GetBinCenter(h1fragments->FindBin(val)); + double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); + h1fragments->Fill(val,1./binw/1000);//bp-1 + //cout <<"val:"<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> DSBBPID; // For reading species production @@ -199,26 +207,35 @@ for(int i = 0;i= 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;ieGetBinCenter(h1fragments->FindBin(val)); - double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); - h1fragments->Fill(val,1./binw/1000);//bp-1 - //cout <<"val:"<GetBinCenter(h1fragments->FindBin(val)); + double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); + h1fragments->Fill(val,1./binw/1000);//bp-1 + //cout <<"val:"<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> DSBBPID; // For reading species production @@ -200,26 +205,35 @@ for(int i = 0;i= 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;ieGetBinCenter(h1fragments->FindBin(val)); - double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); - h1fragments->Fill(val,1./binw/1000);//bp-1 - //cout <<"val:"<GetBinCenter(h1fragments->FindBin(val)); + double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); + h1fragments->Fill(val,1./binw/1000);//bp-1 + //cout <<"val:"<(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()(s); } diff --git a/examples/advanced/dna/moleculardna/include/DetectorConstruction.hh b/examples/advanced/dna/moleculardna/include/DetectorConstruction.hh index e6a094ccb2..38b17a6f3e 100644 --- a/examples/advanced/dna/moleculardna/include/DetectorConstruction.hh +++ b/examples/advanced/dna/moleculardna/include/DetectorConstruction.hh @@ -53,7 +53,7 @@ class G4Material; class DetectorConstruction : public G4VUserDetectorConstruction { public: - DetectorConstruction(); + DetectorConstruction(G4int vis); ~DetectorConstruction() override; diff --git a/examples/advanced/dna/moleculardna/include/PhysicsList.hh b/examples/advanced/dna/moleculardna/include/PhysicsList.hh index 65d1ba0361..02e2b79ceb 100644 --- a/examples/advanced/dna/moleculardna/include/PhysicsList.hh +++ b/examples/advanced/dna/moleculardna/include/PhysicsList.hh @@ -40,7 +40,7 @@ class G4VPhysicsConstructor; class PhysicsList : public G4VModularPhysicsList { public: - explicit PhysicsList(G4int list); + explicit PhysicsList(G4int list, G4int vis); ~PhysicsList() override = default; }; diff --git a/examples/advanced/dna/moleculardna/molecular.cc b/examples/advanced/dna/moleculardna/molecular.cc index a757a2e23c..1ff8572ced 100644 --- a/examples/advanced/dna/moleculardna/molecular.cc +++ b/examples/advanced/dna/moleculardna/molecular.cc @@ -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(); diff --git a/examples/advanced/dna/moleculardna/moleculardna.out b/examples/advanced/dna/moleculardna/moleculardna.out index 28089e696e..5587650ed2 100644 --- a/examples/advanced/dna/moleculardna/moleculardna.out +++ b/examples/advanced/dna/moleculardna/moleculardna.out @@ -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. diff --git a/examples/advanced/dna/moleculardna/phage.C b/examples/advanced/dna/moleculardna/phage.C new file mode 100644 index 0000000000..176115ffd6 --- /dev/null +++ b/examples/advanced/dna/moleculardna/phage.C @@ -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 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> 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;iGetEntry(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:"<GetBinCenter(h1fragments->FindBin(val)); + double binw = h1fragments->GetBinWidth (h1fragments->FindBin(val)); + h1fragments->Fill(val,1./binw/1000);//bp-1 + //cout <<"val:"<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;iGetEntry(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., O’Neill, 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;iGetEntry(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;iGetEntry(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;iGetEntry(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" <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; + +} diff --git a/examples/advanced/dna/moleculardna/phage.mac b/examples/advanced/dna/moleculardna/phage.mac new file mode 100644 index 0000000000..70e119bf19 --- /dev/null +++ b/examples/advanced/dna/moleculardna/phage.mac @@ -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 diff --git a/examples/advanced/dna/moleculardna/plasmid.C b/examples/advanced/dna/moleculardna/plasmid.C index 1d41e99153..4155226341 100644 --- a/examples/advanced/dna/moleculardna/plasmid.C +++ b/examples/advanced/dna/moleculardna/plasmid.C @@ -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> 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., O’Neill, 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., O’Neill, 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; diff --git a/examples/advanced/dna/moleculardna/plasmid.mac b/examples/advanced/dna/moleculardna/plasmid.mac index 50cdf38903..362593de0c 100644 --- a/examples/advanced/dna/moleculardna/plasmid.mac +++ b/examples/advanced/dna/moleculardna/plasmid.mac @@ -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 diff --git a/examples/advanced/dna/moleculardna/src/DetectorConstruction.cc b/examples/advanced/dna/moleculardna/src/DetectorConstruction.cc index 430617915b..e9486a67b5 100644 --- a/examples/advanced/dna/moleculardna/src/DetectorConstruction.cc +++ b/examples/advanced/dna/moleculardna/src/DetectorConstruction.cc @@ -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()); } } diff --git a/examples/advanced/dna/moleculardna/src/IRTDamageReactionModel.cc b/examples/advanced/dna/moleculardna/src/IRTDamageReactionModel.cc index 1a9852f3ce..90b12ad3e5 100644 --- a/examples/advanced/dna/moleculardna/src/IRTDamageReactionModel.cc +++ b/examples/advanced/dna/moleculardna/src/IRTDamageReactionModel.cc @@ -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(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...... diff --git a/examples/advanced/dna/moleculardna/src/PhysicsList.cc b/examples/advanced/dna/moleculardna/src/PhysicsList.cc index c27ca7596f..67b44d70b6 100644 --- a/examples/advanced/dna/moleculardna/src/PhysicsList.cc +++ b/examples/advanced/dna/moleculardna/src/PhysicsList.cc @@ -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)); } diff --git a/examples/advanced/dna/moleculardna/src/TimeStepAction.cc b/examples/advanced/dna/moleculardna/src/TimeStepAction.cc index e32da90c70..f42270fae0 100644 --- a/examples/advanced/dna/moleculardna/src/TimeStepAction.cc +++ b/examples/advanced/dna/moleculardna/src/TimeStepAction.cc @@ -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); } } } diff --git a/examples/advanced/doiPET/doiPET.out b/examples/advanced/doiPET/doiPET.out index 319303ec98..9035013f5d 100644 --- a/examples/advanced/doiPET/doiPET.out +++ b/examples/advanced/doiPET/doiPET.out @@ -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. diff --git a/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out b/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out index 4c9942df9f..d180fa5105 100644 --- a/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out +++ b/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out @@ -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 diff --git a/examples/advanced/eRosita/eRosita.out b/examples/advanced/eRosita/eRosita.out index d3f13cf95e..c275305d32 100644 --- a/examples/advanced/eRosita/eRosita.out +++ b/examples/advanced/eRosita/eRosita.out @@ -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. diff --git a/examples/advanced/exp_microdosimetry/README b/examples/advanced/exp_microdosimetry/README index ca9839440b..8dfa40a0e5 100644 --- a/examples/advanced/exp_microdosimetry/README +++ b/examples/advanced/exp_microdosimetry/README @@ -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) diff --git a/examples/advanced/exp_microdosimetry/exp_microdosimetry.out b/examples/advanced/exp_microdosimetry/exp_microdosimetry.out index e2cbbc5bfa..1c6ec08c7a 100644 --- a/examples/advanced/exp_microdosimetry/exp_microdosimetry.out +++ b/examples/advanced/exp_microdosimetry/exp_microdosimetry.out @@ -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 diff --git a/examples/advanced/fastAerosol/fastAerosol.out b/examples/advanced/fastAerosol/fastAerosol.out index ca8d4747f7..b4ec59f252 100644 --- a/examples/advanced/fastAerosol/fastAerosol.out +++ b/examples/advanced/fastAerosol/fastAerosol.out @@ -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. diff --git a/examples/advanced/gammaknife/gammaknife.out b/examples/advanced/gammaknife/gammaknife.out index fd0b621b24..5421d83951 100644 --- a/examples/advanced/gammaknife/gammaknife.out +++ b/examples/advanced/gammaknife/gammaknife.out @@ -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 @@ -30,23 +30,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", @@ -172,7 +173,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 ======== @@ -623,8 +624,8 @@ Run 0 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001639s Sys=0.000000s - User TOT = 0 Real TOT = 0.00178135 + User=0.000000s Real=0.001663s Sys=0.010000s + User TOT = 0 Real TOT = 0.00183386 Summary of Run 0 : /run/geometryModified @@ -693,8 +694,8 @@ Run 1 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001180s Sys=0.010000s - User TOT = 0 Real TOT = 0.00303679 + User=0.000000s Real=0.001226s Sys=0.000000s + User TOT = 0 Real TOT = 0.00312564 Summary of Run 1 : /run/geometryModified @@ -763,8 +764,8 @@ Run 2 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001408s Sys=0.000000s - User TOT = 0 Real TOT = 0.00452491 + User=0.000000s Real=0.001049s Sys=0.000000s + User TOT = 0 Real TOT = 0.00424293 Summary of Run 2 : /run/geometryModified @@ -833,8 +834,8 @@ Run 3 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000905s Sys=0.000000s - User TOT = 0 Real TOT = 0.00549907 + User=0.000000s Real=0.001045s Sys=0.000000s + User TOT = 0 Real TOT = 0.00536093 Summary of Run 3 : /run/geometryModified @@ -903,8 +904,8 @@ Run 4 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000917s Sys=0.000000s - User TOT = 0 Real TOT = 0.00648679 + User=0.000000s Real=0.001081s Sys=0.000000s + User TOT = 0 Real TOT = 0.0065133 Summary of Run 4 : /run/geometryModified @@ -973,8 +974,8 @@ Run 5 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000947s Sys=0.000000s - User TOT = 0 Real TOT = 0.00749868 + User=0.000000s Real=0.000856s Sys=0.000000s + User TOT = 0 Real TOT = 0.00743446 Summary of Run 5 : /run/geometryModified @@ -1043,8 +1044,8 @@ Run 6 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000923s Sys=0.000000s - User TOT = 0 Real TOT = 0.00849387 + User=0.000000s Real=0.001112s Sys=0.000000s + User TOT = 0 Real TOT = 0.0086219 Summary of Run 6 : /run/geometryModified @@ -1113,8 +1114,8 @@ Run 7 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001437s Sys=0.000000s - User TOT = 0 Real TOT = 0.0100149 + User=0.000000s Real=0.000981s Sys=0.000000s + User TOT = 0 Real TOT = 0.00967309 Summary of Run 7 : /run/geometryModified @@ -1183,8 +1184,8 @@ Run 8 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000997s Sys=0.000000s - User TOT = 0 Real TOT = 0.0110934 + User=0.000000s Real=0.000946s Sys=0.000000s + User TOT = 0 Real TOT = 0.0106841 Summary of Run 8 : /run/geometryModified @@ -1253,8 +1254,8 @@ Run 9 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000850s Sys=0.000000s - User TOT = 0 Real TOT = 0.0120399 + User=0.000000s Real=0.001200s Sys=0.000000s + User TOT = 0 Real TOT = 0.0119497 Summary of Run 9 : /run/geometryModified @@ -1323,8 +1324,8 @@ Run 10 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001022s Sys=0.000000s - User TOT = 0 Real TOT = 0.0131463 + User=0.010000s Real=0.001231s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0132494 Summary of Run 10 : /run/geometryModified @@ -1393,8 +1394,8 @@ Run 11 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001256s Sys=0.000000s - User TOT = 0 Real TOT = 0.0144722 + User=0.000000s Real=0.001002s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0143174 Summary of Run 11 : /run/geometryModified @@ -1463,8 +1464,8 @@ Run 12 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000930s Sys=0.010000s - User TOT = 0 Real TOT = 0.0154675 + User=0.000000s Real=0.001369s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0157535 Summary of Run 12 : /run/geometryModified @@ -1533,8 +1534,8 @@ Run 13 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000923s Sys=0.000000s - User TOT = 0 Real TOT = 0.0164648 + User=0.000000s Real=0.000992s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0168136 Summary of Run 13 : /run/geometryModified @@ -1603,8 +1604,8 @@ Run 14 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000924s Sys=0.000000s - User TOT = 0 Real TOT = 0.017462 + User=0.000000s Real=0.001119s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0180029 Summary of Run 14 : /run/geometryModified @@ -1673,8 +1674,8 @@ Run 15 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000795s Sys=0.000000s - User TOT = 0 Real TOT = 0.018323 + User=0.000000s Real=0.001611s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0196989 Summary of Run 15 : /run/geometryModified @@ -1743,8 +1744,8 @@ Run 16 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001164s Sys=0.000000s - User TOT = 0 Real TOT = 0.0195565 + User=0.000000s Real=0.000952s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0207189 Summary of Run 16 : /run/geometryModified @@ -1813,8 +1814,8 @@ Run 17 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001187s Sys=0.000000s - User TOT = 0 Real TOT = 0.0208311 + User=0.000000s Real=0.001090s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0218842 Summary of Run 17 : /run/geometryModified @@ -1883,8 +1884,8 @@ Run 18 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001002s Sys=0.000000s - User TOT = 0 Real TOT = 0.0219067 + User=0.000000s Real=0.000916s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0228665 Summary of Run 18 : /run/geometryModified @@ -1953,8 +1954,8 @@ Run 19 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001097s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0230812 + User=0.000000s Real=0.000887s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0238196 Summary of Run 19 : /run/geometryModified @@ -2024,7 +2025,7 @@ Run 20 starts ... Run Summary Number of events processed : 10 User=0.000000s Real=0.001061s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0242119 + User TOT = 0.01 Real TOT = 0.0249626 Summary of Run 20 : /run/geometryModified @@ -2093,8 +2094,8 @@ Run 21 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001053s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0253368 + User=0.000000s Real=0.000858s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.025885 Summary of Run 21 : /run/geometryModified @@ -2163,8 +2164,8 @@ Run 22 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000971s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0263804 + User=0.000000s Real=0.000915s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0268709 Summary of Run 22 : /run/geometryModified @@ -2233,8 +2234,8 @@ Run 23 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001045s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0275054 + User=0.000000s Real=0.000968s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0279051 Summary of Run 23 : /run/geometryModified @@ -2303,8 +2304,8 @@ Run 24 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001173s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0287638 + User=0.000000s Real=0.000887s Sys=0.010000s + User TOT = 0.01 Real TOT = 0.0288617 Summary of Run 24 : /run/geometryModified @@ -2373,8 +2374,8 @@ Run 25 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001090s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0299265 + User=0.000000s Real=0.001163s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0300908 Summary of Run 25 : /run/geometryModified @@ -2443,8 +2444,8 @@ Run 26 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001406s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0314082 + User=0.000000s Real=0.001338s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0314946 Summary of Run 26 : /run/geometryModified @@ -2513,8 +2514,8 @@ Run 27 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001079s Sys=0.010000s - User TOT = 0.01 Real TOT = 0.0325873 + User=0.000000s Real=0.001077s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0326372 Summary of Run 27 : /run/geometryModified @@ -2583,8 +2584,8 @@ Run 28 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001195s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0338751 + User=0.000000s Real=0.000925s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0336264 Summary of Run 28 : /run/geometryModified @@ -2653,8 +2654,8 @@ Run 29 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001132s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0350955 + User=0.000000s Real=0.001046s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0347629 Summary of Run 29 : /run/geometryModified @@ -2723,8 +2724,8 @@ Run 30 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001076s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0362388 + User=0.000000s Real=0.001090s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0359239 Summary of Run 30 : /run/geometryModified @@ -2793,8 +2794,8 @@ Run 31 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001013s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0373263 + User=0.000000s Real=0.001064s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0370659 Summary of Run 31 : /run/geometryModified @@ -2863,8 +2864,8 @@ Run 32 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001280s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0386856 + User=0.000000s Real=0.001308s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0384528 Summary of Run 32 : /run/geometryModified @@ -2933,8 +2934,8 @@ Run 33 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001404s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0401792 + User=0.000000s Real=0.000976s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0395031 Summary of Run 33 : /run/geometryModified @@ -3003,8 +3004,8 @@ Run 34 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001055s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0413201 + User=0.000000s Real=0.000907s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0404746 Summary of Run 34 : /run/geometryModified @@ -3073,8 +3074,8 @@ Run 35 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001174s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0425834 + User=0.000000s Real=0.000957s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0414992 Summary of Run 35 : /run/geometryModified @@ -3143,8 +3144,8 @@ Run 36 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001346s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0440152 + User=0.000000s Real=0.001123s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0427123 Summary of Run 36 : /run/geometryModified @@ -3213,8 +3214,8 @@ Run 37 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000966s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0450559 + User=0.000000s Real=0.001092s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0438747 Summary of Run 37 : /run/geometryModified @@ -3283,8 +3284,8 @@ Run 38 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001174s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0463127 + User=0.000000s Real=0.000927s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0448707 Summary of Run 38 : /run/geometryModified @@ -3353,8 +3354,8 @@ Run 39 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002058s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0484518 + User=0.000000s Real=0.000989s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0459334 Summary of Run 39 : /run/geometryModified @@ -3423,8 +3424,8 @@ Run 40 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001004s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0495346 + User=0.000000s Real=0.001188s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0471901 Summary of Run 40 : /run/geometryModified @@ -3493,8 +3494,8 @@ Run 41 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001404s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0510168 + User=0.000000s Real=0.001042s Sys=0.010000s + User TOT = 0.01 Real TOT = 0.0482973 Summary of Run 41 : /run/geometryModified @@ -3563,8 +3564,8 @@ Run 42 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001049s Sys=0.010000s - User TOT = 0.03 Real TOT = 0.0521514 + User=0.000000s Real=0.001067s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0494296 Summary of Run 42 : /run/geometryModified @@ -3633,8 +3634,8 @@ Run 43 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000931s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0531483 + User=0.000000s Real=0.001197s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0506963 Summary of Run 43 : /run/geometryModified @@ -3703,8 +3704,8 @@ Run 44 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001150s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0544012 + User=0.010000s Real=0.001200s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0519703 Summary of Run 44 : /run/geometryModified @@ -3773,8 +3774,8 @@ Run 45 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001388s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0558747 + User=0.000000s Real=0.000940s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0529824 Summary of Run 45 : /run/geometryModified @@ -3843,8 +3844,8 @@ Run 46 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001486s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0574438 + User=0.000000s Real=0.001054s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0541013 Summary of Run 46 : /run/geometryModified @@ -3913,8 +3914,8 @@ Run 47 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001264s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0587879 + User=0.000000s Real=0.000945s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0551147 Summary of Run 47 : /run/geometryModified @@ -3983,8 +3984,8 @@ Run 48 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001191s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0600595 + User=0.000000s Real=0.001155s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0563502 Summary of Run 48 : /run/geometryModified @@ -4053,8 +4054,8 @@ Run 49 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001184s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0613295 + User=0.000000s Real=0.001065s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0574984 Summary of Run 49 : /run/geometryModified @@ -4123,8 +4124,8 @@ Run 50 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001103s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0625023 + User=0.000000s Real=0.001108s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0586832 Summary of Run 50 : /run/geometryModified @@ -4193,8 +4194,8 @@ Run 51 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001068s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.063649 + User=0.000000s Real=0.001778s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.060527 Summary of Run 51 : /run/geometryModified @@ -4263,8 +4264,8 @@ Run 52 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000952s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0646752 + User=0.000000s Real=0.000908s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.061528 Summary of Run 52 : /run/geometryModified @@ -4333,8 +4334,8 @@ Run 53 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001018s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0657683 + User=0.000000s Real=0.000895s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0624925 Summary of Run 53 : /run/geometryModified @@ -4403,8 +4404,8 @@ Run 54 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000949s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0667994 + User=0.000000s Real=0.000954s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0635127 Summary of Run 54 : /run/geometryModified @@ -4473,8 +4474,8 @@ Run 55 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000945s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0678107 + User=0.000000s Real=0.001094s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0646799 Summary of Run 55 : /run/geometryModified @@ -4543,8 +4544,8 @@ Run 56 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001333s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0692223 + User=0.000000s Real=0.000989s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0657347 Summary of Run 56 : /run/geometryModified @@ -4613,8 +4614,8 @@ Run 57 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001249s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0705474 + User=0.000000s Real=0.001164s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.066963 Summary of Run 57 : /run/geometryModified @@ -4683,8 +4684,8 @@ Run 58 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000865s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0714772 + User=0.000000s Real=0.001239s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0682781 Summary of Run 58 : /run/geometryModified @@ -4753,8 +4754,8 @@ Run 59 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001098s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0726397 + User=0.000000s Real=0.001302s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0696494 Summary of Run 59 : /run/geometryModified @@ -4823,8 +4824,8 @@ Run 60 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000785s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0734912 + User=0.000000s Real=0.001299s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0710163 Summary of Run 60 : /run/geometryModified @@ -4893,8 +4894,8 @@ Run 61 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000905s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0744597 + User=0.000000s Real=0.001296s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0723855 Summary of Run 61 : /run/geometryModified @@ -4963,8 +4964,8 @@ Run 62 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001167s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.075691 + User=0.000000s Real=0.001210s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0736989 Summary of Run 62 : /run/geometryModified @@ -5033,8 +5034,8 @@ Run 63 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001053s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0768227 + User=0.010000s Real=0.001360s Sys=0.010000s + User TOT = 0.03 Real TOT = 0.0751278 Summary of Run 63 : /run/geometryModified @@ -5103,8 +5104,8 @@ Run 64 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001040s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0779404 + User=0.000000s Real=0.001270s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0764672 Summary of Run 64 : /run/geometryModified @@ -5173,8 +5174,8 @@ Run 65 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001377s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0794027 + User=0.000000s Real=0.001181s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0777203 Summary of Run 65 : /run/geometryModified @@ -5243,8 +5244,8 @@ Run 66 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001252s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0807453 + User=0.000000s Real=0.001458s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0792474 Summary of Run 66 : /run/geometryModified @@ -5313,8 +5314,8 @@ Run 67 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001197s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0820242 + User=0.000000s Real=0.001211s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0805269 Summary of Run 67 : /run/geometryModified @@ -5383,8 +5384,8 @@ Run 68 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001448s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0835545 + User=0.000000s Real=0.001419s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0820162 Summary of Run 68 : /run/geometryModified @@ -5453,8 +5454,8 @@ Run 69 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000968s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0846026 + User=0.000000s Real=0.001038s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0831193 Summary of Run 69 : /run/geometryModified @@ -5523,8 +5524,8 @@ Run 70 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001245s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0859115 + User=0.000000s Real=0.000888s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0840733 Summary of Run 70 : /run/geometryModified @@ -5593,8 +5594,8 @@ Run 71 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000912s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0868924 + User=0.000000s Real=0.001062s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0852016 Summary of Run 71 : /run/geometryModified @@ -5663,8 +5664,8 @@ Run 72 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000957s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0879123 + User=0.000000s Real=0.001221s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.0864986 Summary of Run 72 : /run/geometryModified @@ -5733,8 +5734,8 @@ Run 73 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000779s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0887584 + User=0.010000s Real=0.000980s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.087544 Summary of Run 73 : /run/geometryModified @@ -5803,8 +5804,8 @@ Run 74 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002857s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.0917025 + User=0.000000s Real=0.001014s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0886253 Summary of Run 74 : /run/geometryModified @@ -5873,8 +5874,8 @@ Run 75 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021956s Sys=0.010000s - User TOT = 0.05 Real TOT = 0.11378 + User=0.000000s Real=0.000997s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0896896 Summary of Run 75 : /run/geometryModified @@ -5943,8 +5944,8 @@ Run 76 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021598s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.135498 + User=0.000000s Real=0.001106s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0908616 Summary of Run 76 : /run/geometryModified @@ -6013,8 +6014,8 @@ Run 77 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020501s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.156119 + User=0.000000s Real=0.000801s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0917318 Summary of Run 77 : /run/geometryModified @@ -6083,8 +6084,8 @@ Run 78 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021972s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.178182 + User=0.000000s Real=0.000998s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0927954 Summary of Run 78 : /run/geometryModified @@ -6153,8 +6154,8 @@ Run 79 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020623s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.198912 + User=0.000000s Real=0.001051s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0939112 Summary of Run 79 : /run/geometryModified @@ -6223,8 +6224,8 @@ Run 80 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021781s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.220808 + User=0.000000s Real=0.000857s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0948336 Summary of Run 80 : /run/geometryModified @@ -6293,8 +6294,8 @@ Run 81 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021700s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.242628 + User=0.000000s Real=0.000955s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0958533 Summary of Run 81 : /run/geometryModified @@ -6363,8 +6364,8 @@ Run 82 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020794s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.263505 + User=0.000000s Real=0.001062s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.0970051 Summary of Run 82 : /run/geometryModified @@ -6433,8 +6434,8 @@ Run 83 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021827s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.28541 + User=0.010000s Real=0.001036s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.0981087 Summary of Run 83 : /run/geometryModified @@ -6503,8 +6504,8 @@ Run 84 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021926s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.307418 + User=0.000000s Real=0.000965s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.0991446 Summary of Run 84 : /run/geometryModified @@ -6573,8 +6574,8 @@ Run 85 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020930s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.328441 + User=0.000000s Real=0.000964s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.100176 Summary of Run 85 : /run/geometryModified @@ -6643,8 +6644,8 @@ Run 86 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021704s Sys=0.010000s - User TOT = 0.05 Real TOT = 0.350239 + User=0.000000s Real=0.000823s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.101067 Summary of Run 86 : /run/geometryModified @@ -6713,8 +6714,8 @@ Run 87 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020833s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.371175 + User=0.000000s Real=0.001140s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.102283 Summary of Run 87 : /run/geometryModified @@ -6783,8 +6784,8 @@ Run 88 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021941s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.393206 + User=0.000000s Real=0.000857s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.103232 Summary of Run 88 : /run/geometryModified @@ -6853,8 +6854,8 @@ Run 89 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021757s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.415058 + User=0.000000s Real=0.000875s Sys=0.010000s + User TOT = 0.05 Real TOT = 0.104179 Summary of Run 89 : /run/geometryModified @@ -6923,8 +6924,8 @@ Run 90 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020755s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.435897 + User=0.000000s Real=0.001339s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.10558 Summary of Run 90 : /run/geometryModified @@ -6993,8 +6994,8 @@ Run 91 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021907s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.457921 + User=0.000000s Real=0.001049s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.106695 Summary of Run 91 : /run/geometryModified @@ -7063,8 +7064,8 @@ Run 92 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021760s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.479782 + User=0.000000s Real=0.001094s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.107862 Summary of Run 92 : /run/geometryModified @@ -7133,8 +7134,8 @@ Run 93 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020871s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.50075 + User=0.000000s Real=0.000939s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.108876 Summary of Run 93 : /run/geometryModified @@ -7203,8 +7204,8 @@ Run 94 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021841s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.522682 + User=0.000000s Real=0.001174s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.110122 Summary of Run 94 : /run/geometryModified @@ -7273,8 +7274,8 @@ Run 95 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021075s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.543866 + User=0.000000s Real=0.001148s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.111349 Summary of Run 95 : /run/geometryModified @@ -7343,8 +7344,8 @@ Run 96 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021683s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.565653 + User=0.000000s Real=0.000990s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.112418 Summary of Run 96 : /run/geometryModified @@ -7413,8 +7414,8 @@ Run 97 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020873s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.586608 + User=0.000000s Real=0.006743s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.119233 Summary of Run 97 : /run/geometryModified @@ -7483,8 +7484,8 @@ Run 98 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021950s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.608651 + User=0.000000s Real=0.021082s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.140402 Summary of Run 98 : /run/geometryModified @@ -7553,8 +7554,8 @@ Run 99 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021630s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.630387 + User=0.000000s Real=0.022146s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.162636 Summary of Run 99 : /run/geometryModified @@ -7623,8 +7624,8 @@ Run 100 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020831s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.651302 + User=0.000000s Real=0.020661s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.183405 Summary of Run 100 : /run/geometryModified @@ -7693,8 +7694,8 @@ Run 101 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021763s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.673168 + User=0.000000s Real=0.022063s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.205558 Summary of Run 101 : /run/geometryModified @@ -7763,8 +7764,8 @@ Run 102 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021857s Sys=0.010000s - User TOT = 0.08 Real TOT = 0.695113 + User=0.000000s Real=0.020656s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.226335 Summary of Run 102 : /run/geometryModified @@ -7833,8 +7834,8 @@ Run 103 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020802s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.716015 + User=0.000000s Real=0.022000s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.248433 Summary of Run 103 : /run/geometryModified @@ -7903,8 +7904,8 @@ Run 104 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021962s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.738085 + User=0.000000s Real=0.020764s Sys=0.010000s + User TOT = 0.05 Real TOT = 0.269283 Summary of Run 104 : /run/geometryModified @@ -7973,8 +7974,8 @@ Run 105 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020518s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.758718 + User=0.000000s Real=0.022055s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.291421 Summary of Run 105 : /run/geometryModified @@ -8043,8 +8044,8 @@ Run 106 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021560s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.780388 + User=0.000000s Real=0.020944s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.31246 Summary of Run 106 : /run/geometryModified @@ -8113,8 +8114,8 @@ Run 107 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021771s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.802248 + User=0.000000s Real=0.021711s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.334278 Summary of Run 107 : /run/geometryModified @@ -8183,8 +8184,8 @@ Run 108 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020861s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.823212 + User=0.000000s Real=0.020630s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.355023 Summary of Run 108 : /run/geometryModified @@ -8253,8 +8254,8 @@ Run 109 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021885s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.845187 + User=0.000000s Real=0.021730s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.376859 Summary of Run 109 : /run/geometryModified @@ -8323,8 +8324,8 @@ Run 110 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021665s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.866949 + User=0.000000s Real=0.021197s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.398186 Summary of Run 110 : /run/geometryModified @@ -8393,8 +8394,8 @@ Run 111 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020805s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.887834 + User=0.010000s Real=0.021782s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.420076 Summary of Run 111 : /run/geometryModified @@ -8463,8 +8464,8 @@ Run 112 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021861s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.909783 + User=0.000000s Real=0.020602s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.440779 Summary of Run 112 : /run/geometryModified @@ -8533,8 +8534,8 @@ Run 113 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021902s Sys=0.010000s - User TOT = 0.09 Real TOT = 0.931778 + User=0.000000s Real=0.021885s Sys=0.010000s + User TOT = 0.06 Real TOT = 0.462772 Summary of Run 113 : /run/geometryModified @@ -8603,8 +8604,8 @@ Run 114 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020730s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.95261 + User=0.000000s Real=0.020939s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.483813 Summary of Run 114 : /run/geometryModified @@ -8673,8 +8674,8 @@ Run 115 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021823s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.974521 + User=0.000000s Real=0.021628s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.505553 Summary of Run 115 : /run/geometryModified @@ -8743,8 +8744,8 @@ Run 116 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020958s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.995568 + User=0.000000s Real=0.020933s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.526595 Summary of Run 116 : /run/geometryModified @@ -8813,8 +8814,8 @@ Run 117 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021826s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.01747 + User=0.000000s Real=0.021632s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.548341 Summary of Run 117 : /run/geometryModified @@ -8883,8 +8884,8 @@ Run 118 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.023014s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.04057 + User=0.000000s Real=0.020787s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.569224 Summary of Run 118 : /run/geometryModified @@ -8953,8 +8954,8 @@ Run 119 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.025774s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.06643 + User=0.000000s Real=0.021886s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.591222 Summary of Run 119 : /run/geometryModified @@ -9023,8 +9024,8 @@ Run 120 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.015637s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.08218 + User=0.010000s Real=0.021523s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.612851 Summary of Run 120 : /run/geometryModified @@ -9093,8 +9094,8 @@ Run 121 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022000s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.10427 + User=0.000000s Real=0.020952s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.633885 Summary of Run 121 : /run/geometryModified @@ -9163,8 +9164,8 @@ Run 122 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020916s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.12528 + User=0.000000s Real=0.021949s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.655927 Summary of Run 122 : /run/geometryModified @@ -9233,8 +9234,8 @@ Run 123 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021972s Sys=0.000000s - User TOT = 0.1 Real TOT = 1.14735 + User=0.000000s Real=0.020874s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.676894 Summary of Run 123 : /run/geometryModified @@ -9303,8 +9304,8 @@ Run 124 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020875s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.16832 + User=0.000000s Real=0.021872s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.698859 Summary of Run 124 : /run/geometryModified @@ -9373,8 +9374,8 @@ Run 125 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021831s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.19025 + User=0.000000s Real=0.020919s Sys=0.010000s + User TOT = 0.07 Real TOT = 0.719874 Summary of Run 125 : /run/geometryModified @@ -9443,8 +9444,8 @@ Run 126 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020950s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.21129 + User=0.000000s Real=0.021796s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.741781 Summary of Run 126 : /run/geometryModified @@ -9513,8 +9514,8 @@ Run 127 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021944s Sys=0.010000s - User TOT = 0.11 Real TOT = 1.23334 + User=0.000000s Real=0.021033s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.762905 Summary of Run 127 : /run/geometryModified @@ -9583,8 +9584,8 @@ Run 128 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020784s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.25422 + User=0.000000s Real=0.021816s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.784821 Summary of Run 128 : /run/geometryModified @@ -9653,8 +9654,8 @@ Run 129 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021784s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.27609 + User=0.000000s Real=0.020676s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.805609 Summary of Run 129 : /run/geometryModified @@ -9723,8 +9724,8 @@ Run 130 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021804s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.29798 + User=0.010000s Real=0.021792s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.827508 Summary of Run 130 : /run/geometryModified @@ -9793,8 +9794,8 @@ Run 131 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020830s Sys=0.000000s - User TOT = 0.11 Real TOT = 1.31889 + User=0.000000s Real=0.020667s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.848285 Summary of Run 131 : /run/geometryModified @@ -9863,8 +9864,8 @@ Run 132 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021911s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.34089 + User=0.000000s Real=0.021968s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.87034 Summary of Run 132 : /run/geometryModified @@ -9933,8 +9934,8 @@ Run 133 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021902s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.36287 + User=0.000000s Real=0.020901s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.891327 Summary of Run 133 : /run/geometryModified @@ -10003,8 +10004,8 @@ Run 134 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020861s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.38382 + User=0.000000s Real=0.021948s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.913361 Summary of Run 134 : /run/geometryModified @@ -10073,8 +10074,8 @@ Run 135 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.026449s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.41035 + User=0.000000s Real=0.020904s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.934393 Summary of Run 135 : /run/geometryModified @@ -10143,8 +10144,8 @@ Run 136 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.017051s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.42748 + User=0.000000s Real=0.022129s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.956615 Summary of Run 136 : /run/geometryModified @@ -10213,8 +10214,8 @@ Run 137 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020888s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.44846 + User=0.000000s Real=0.020946s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.977666 Summary of Run 137 : /run/geometryModified @@ -10283,8 +10284,8 @@ Run 138 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021874s Sys=0.010000s - User TOT = 0.12 Real TOT = 1.47043 + User=0.010000s Real=0.021595s Sys=0.000000s + User TOT = 0.09 Real TOT = 0.999371 Summary of Run 138 : /run/geometryModified @@ -10353,8 +10354,8 @@ Run 139 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021950s Sys=0.000000s - User TOT = 0.12 Real TOT = 1.49246 + User=0.000000s Real=0.021072s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.02055 Summary of Run 139 : /run/geometryModified @@ -10423,8 +10424,8 @@ Run 140 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020699s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.51326 + User=0.000000s Real=0.021586s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.04226 Summary of Run 140 : /run/geometryModified @@ -10493,8 +10494,8 @@ Run 141 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021990s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.53535 + User=0.000000s Real=0.021181s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.06353 Summary of Run 141 : /run/geometryModified @@ -10563,8 +10564,8 @@ Run 142 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020881s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.55631 + User=0.000000s Real=0.021575s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.08523 Summary of Run 142 : /run/geometryModified @@ -10633,8 +10634,8 @@ Run 143 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022009s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.57841 + User=0.000000s Real=0.020960s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.10628 Summary of Run 143 : /run/geometryModified @@ -10703,8 +10704,8 @@ Run 144 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021324s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.59981 + User=0.000000s Real=0.022033s Sys=0.000000s + User TOT = 0.09 Real TOT = 1.1284 Summary of Run 144 : /run/geometryModified @@ -10773,8 +10774,8 @@ Run 145 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021445s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.62134 + User=0.000000s Real=0.020969s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.14946 Summary of Run 145 : /run/geometryModified @@ -10843,8 +10844,8 @@ Run 146 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021783s Sys=0.000000s - User TOT = 0.13 Real TOT = 1.64321 + User=0.000000s Real=0.022064s Sys=0.010000s + User TOT = 0.1 Real TOT = 1.17165 Summary of Run 146 : /run/geometryModified @@ -10913,8 +10914,8 @@ Run 147 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020815s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.66412 + User=0.000000s Real=0.020512s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.19225 Summary of Run 147 : /run/geometryModified @@ -10983,8 +10984,8 @@ Run 148 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021911s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.68611 + User=0.000000s Real=0.021948s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.21429 Summary of Run 148 : /run/geometryModified @@ -11053,8 +11054,8 @@ Run 149 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022062s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.70826 + User=0.000000s Real=0.020954s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.23533 Summary of Run 149 : /run/geometryModified @@ -11123,8 +11124,8 @@ Run 150 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020783s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.72913 + User=0.000000s Real=0.021993s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.25741 Summary of Run 150 : /run/geometryModified @@ -11193,8 +11194,8 @@ Run 151 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021958s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.75117 + User=0.000000s Real=0.020684s Sys=0.000000s + User TOT = 0.1 Real TOT = 1.27819 Summary of Run 151 : /run/geometryModified @@ -11263,8 +11264,8 @@ Run 152 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020794s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.77206 + User=0.010000s Real=0.021223s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.29953 Summary of Run 152 : /run/geometryModified @@ -11333,8 +11334,8 @@ Run 153 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021986s Sys=0.000000s - User TOT = 0.14 Real TOT = 1.79413 + User=0.000000s Real=0.021802s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.32144 Summary of Run 153 : /run/geometryModified @@ -11403,8 +11404,8 @@ Run 154 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020811s Sys=0.000000s - User TOT = 0.15 Real TOT = 1.81505 + User=0.000000s Real=0.020739s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.34228 Summary of Run 154 : /run/geometryModified @@ -11473,8 +11474,8 @@ Run 155 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021796s Sys=0.010000s - User TOT = 0.15 Real TOT = 1.83695 + User=0.000000s Real=0.021857s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.36423 Summary of Run 155 : /run/geometryModified @@ -11543,8 +11544,8 @@ Run 156 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020809s Sys=0.000000s - User TOT = 0.15 Real TOT = 1.85785 + User=0.000000s Real=0.020699s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.38502 Summary of Run 156 : /run/geometryModified @@ -11613,8 +11614,8 @@ Run 157 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021789s Sys=0.000000s - User TOT = 0.15 Real TOT = 1.87973 + User=0.000000s Real=0.021755s Sys=0.000000s + User TOT = 0.11 Real TOT = 1.40687 Summary of Run 157 : /run/geometryModified @@ -11683,8 +11684,8 @@ Run 158 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020772s Sys=0.000000s - User TOT = 0.15 Real TOT = 1.90059 + User=0.010000s Real=0.021766s Sys=0.010000s + User TOT = 0.12 Real TOT = 1.42878 Summary of Run 158 : /run/geometryModified @@ -11753,8 +11754,8 @@ Run 159 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021985s Sys=0.000000s - User TOT = 0.16 Real TOT = 1.92266 + User=0.000000s Real=0.020920s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.44979 Summary of Run 159 : /run/geometryModified @@ -11823,8 +11824,8 @@ Run 160 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021970s Sys=0.000000s - User TOT = 0.16 Real TOT = 1.94474 + User=0.000000s Real=0.020936s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.47082 Summary of Run 160 : /run/geometryModified @@ -11893,8 +11894,8 @@ Run 161 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020813s Sys=0.000000s - User TOT = 0.16 Real TOT = 1.96565 + User=0.000000s Real=0.021895s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.4928 Summary of Run 161 : /run/geometryModified @@ -11963,8 +11964,8 @@ Run 162 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021871s Sys=0.000000s - User TOT = 0.16 Real TOT = 1.98761 + User=0.000000s Real=0.021969s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.51486 Summary of Run 162 : /run/geometryModified @@ -12033,8 +12034,8 @@ Run 163 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020842s Sys=0.000000s - User TOT = 0.16 Real TOT = 2.00855 + User=0.000000s Real=0.020738s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.53569 Summary of Run 163 : /run/geometryModified @@ -12103,8 +12104,8 @@ Run 164 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021939s Sys=0.000000s - User TOT = 0.16 Real TOT = 2.03058 + User=0.000000s Real=0.022099s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.5579 Summary of Run 164 : /run/geometryModified @@ -12173,8 +12174,8 @@ Run 165 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020724s Sys=0.000000s - User TOT = 0.16 Real TOT = 2.05139 + User=0.000000s Real=0.020527s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.57853 Summary of Run 165 : /run/geometryModified @@ -12243,8 +12244,8 @@ Run 166 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021683s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.07319 + User=0.000000s Real=0.021903s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.60053 Summary of Run 166 : /run/geometryModified @@ -12313,8 +12314,8 @@ Run 167 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022047s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.09552 + User=0.000000s Real=0.020702s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.62135 Summary of Run 167 : /run/geometryModified @@ -12383,8 +12384,8 @@ Run 168 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020426s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.11604 + User=0.000000s Real=0.021809s Sys=0.010000s + User TOT = 0.12 Real TOT = 1.64326 Summary of Run 168 : /run/geometryModified @@ -12453,8 +12454,8 @@ Run 169 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021626s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.13775 + User=0.000000s Real=0.020819s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.66419 Summary of Run 169 : /run/geometryModified @@ -12523,8 +12524,8 @@ Run 170 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020801s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.15864 + User=0.000000s Real=0.021915s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.68619 Summary of Run 170 : /run/geometryModified @@ -12593,8 +12594,8 @@ Run 171 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021814s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.18057 + User=0.000000s Real=0.021836s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.70812 Summary of Run 171 : /run/geometryModified @@ -12663,8 +12664,8 @@ Run 172 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021641s Sys=0.010000s - User TOT = 0.17 Real TOT = 2.20235 + User=0.000000s Real=0.020823s Sys=0.000000s + User TOT = 0.12 Real TOT = 1.72904 Summary of Run 172 : /run/geometryModified @@ -12733,8 +12734,8 @@ Run 173 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020561s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.22314 + User=0.010000s Real=0.021708s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.75083 Summary of Run 173 : /run/geometryModified @@ -12803,8 +12804,8 @@ Run 174 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021685s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.24497 + User=0.000000s Real=0.021092s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.77202 Summary of Run 174 : /run/geometryModified @@ -12873,8 +12874,8 @@ Run 175 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020649s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.26581 + User=0.000000s Real=0.021399s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.79356 Summary of Run 175 : /run/geometryModified @@ -12943,8 +12944,8 @@ Run 176 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021883s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.28779 + User=0.000000s Real=0.020693s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.81436 Summary of Run 176 : /run/geometryModified @@ -13013,8 +13014,8 @@ Run 177 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020882s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.30877 + User=0.000000s Real=0.021781s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.83624 Summary of Run 177 : /run/geometryModified @@ -13083,8 +13084,8 @@ Run 178 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021884s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.33074 + User=0.000000s Real=0.021686s Sys=0.010000s + User TOT = 0.13 Real TOT = 1.85804 Summary of Run 178 : /run/geometryModified @@ -13153,8 +13154,8 @@ Run 179 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020889s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.3517 + User=0.000000s Real=0.021000s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.87913 Summary of Run 179 : /run/geometryModified @@ -13223,8 +13224,8 @@ Run 180 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021977s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.37377 + User=0.000000s Real=0.021735s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.90096 Summary of Run 180 : /run/geometryModified @@ -13293,8 +13294,8 @@ Run 181 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021956s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.3958 + User=0.000000s Real=0.020816s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.92188 Summary of Run 181 : /run/geometryModified @@ -13363,8 +13364,8 @@ Run 182 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021107s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.41699 + User=0.000000s Real=0.021520s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.9435 Summary of Run 182 : /run/geometryModified @@ -13433,8 +13434,8 @@ Run 183 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021648s Sys=0.010000s - User TOT = 0.17 Real TOT = 2.43872 + User=0.000000s Real=0.021843s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.96544 Summary of Run 183 : /run/geometryModified @@ -13503,8 +13504,8 @@ Run 184 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020977s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.45978 + User=0.000000s Real=0.020886s Sys=0.000000s + User TOT = 0.13 Real TOT = 1.98643 Summary of Run 184 : /run/geometryModified @@ -13573,8 +13574,8 @@ Run 185 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021781s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.48164 + User=0.000000s Real=0.021988s Sys=0.000000s + User TOT = 0.13 Real TOT = 2.00851 Summary of Run 185 : /run/geometryModified @@ -13643,8 +13644,8 @@ Run 186 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021957s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.50368 + User=0.000000s Real=0.020692s Sys=0.000000s + User TOT = 0.13 Real TOT = 2.02929 Summary of Run 186 : /run/geometryModified @@ -13713,8 +13714,8 @@ Run 187 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020919s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.52468 + User=0.010000s Real=0.021873s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.05127 Summary of Run 187 : /run/geometryModified @@ -13783,8 +13784,8 @@ Run 188 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021941s Sys=0.000000s - User TOT = 0.17 Real TOT = 2.54669 + User=0.000000s Real=0.020896s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.07225 Summary of Run 188 : /run/geometryModified @@ -13853,8 +13854,8 @@ Run 189 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020995s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.56777 + User=0.000000s Real=0.022076s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.09441 Summary of Run 189 : /run/geometryModified @@ -13923,8 +13924,8 @@ Run 190 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022040s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.58989 + User=0.000000s Real=0.021729s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.11623 Summary of Run 190 : /run/geometryModified @@ -13993,8 +13994,8 @@ Run 191 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021862s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.61185 + User=0.000000s Real=0.023129s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.13944 Summary of Run 191 : /run/geometryModified @@ -14063,8 +14064,8 @@ Run 192 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020869s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.6328 + User=0.000000s Real=0.023865s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.16339 Summary of Run 192 : /run/geometryModified @@ -14133,8 +14134,8 @@ Run 193 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021941s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.65482 + User=0.000000s Real=0.020996s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.18447 Summary of Run 193 : /run/geometryModified @@ -14203,8 +14204,8 @@ Run 194 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020934s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.67583 + User=0.000000s Real=0.021946s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.20651 Summary of Run 194 : /run/geometryModified @@ -14273,8 +14274,8 @@ Run 195 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021952s Sys=0.000000s - User TOT = 0.18 Real TOT = 2.69787 + User=0.000000s Real=0.020801s Sys=0.000000s + User TOT = 0.14 Real TOT = 2.22747 Summary of Run 195 : /run/geometryModified @@ -14343,8 +14344,8 @@ Run 196 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021954s Sys=0.000000s - User TOT = 0.19 Real TOT = 2.7199 + User=0.010000s Real=0.021957s Sys=0.000000s + User TOT = 0.15 Real TOT = 2.24952 Summary of Run 196 : /run/geometryModified @@ -14413,8 +14414,8 @@ Run 197 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020964s Sys=0.000000s - User TOT = 0.19 Real TOT = 2.74094 + User=0.000000s Real=0.020713s Sys=0.000000s + User TOT = 0.15 Real TOT = 2.27036 Summary of Run 197 : /run/geometryModified @@ -14483,8 +14484,8 @@ Run 198 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022081s Sys=0.010000s - User TOT = 0.19 Real TOT = 2.76311 + User=0.000000s Real=0.021794s Sys=0.000000s + User TOT = 0.15 Real TOT = 2.29224 Summary of Run 198 : /run/geometryModified @@ -14553,8 +14554,8 @@ Run 199 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021588s Sys=0.000000s - User TOT = 0.19 Real TOT = 2.7848 + User=0.000000s Real=0.020931s Sys=0.000000s + User TOT = 0.15 Real TOT = 2.31328 Summary of Run 199 : /run/geometryModified @@ -14623,13 +14624,13 @@ Run 200 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020921s Sys=0.000000s - User TOT = 0.19 Real TOT = 2.8058 + User=0.000000s Real=0.021794s Sys=0.010000s + User TOT = 0.15 Real TOT = 2.33522 Summary of Run 200 : /score/dumpQuantityToFile boxMesh_1 eDep eDep_scorer.out Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 10 of which, static: 0 -Dynamic pools deleted: 10 / Total memory freed: 0.06 MB +Dynamic pools deleted: 10 / Total memory freed: 0.058 MB ============================================================ diff --git a/examples/advanced/gammaray_telescope/gammaraytel.out b/examples/advanced/gammaray_telescope/gammaraytel.out index 7dd8906b59..7a2fe37f8d 100644 --- a/examples/advanced/gammaray_telescope/gammaraytel.out +++ b/examples/advanced/gammaray_telescope/gammaraytel.out @@ -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", @@ -261,7 +262,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 ======== @@ -903,7 +904,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 @@ -965,6 +966,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 @@ -981,6 +983,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 @@ -1203,7 +1206,7 @@ Using G4ParticleGun... Particle energy: 3.56869 LIN Particle: proton Event: 5 -Number of tracker hits in this event: 25 +Number of tracker hits in this event: 23 5 90.9818 609 10 1 -58.1071 80.6338 95.55 5 126.295 1302 10 0 -58.107 80.6353 94.15 5 119.331 609 9 1 -58.1056 80.6669 65.55 @@ -1220,3531 +1223,3719 @@ Number of tracker hits in this event: 25 5 177.999 1304 4 0 -58.1162 80.9382 -85.85 5 99.7251 609 3 1 -58.0624 81.0392 -114.45 5 162.128 1304 3 0 -58.0613 81.0421 -115.85 - 5 165.592 610 2 1 -58.0371 81.0965 -144.45 - 5 242.767 1305 2 0 -58.0368 81.0999 -145.85 + 5 231.606 610 2 1 -58.0371 81.0965 -144.45 + 5 364.328 1305 2 0 -58.0368 81.0999 -145.85 5 119.874 610 1 1 -58.0376 81.1722 -174.45 5 94.9898 1305 1 0 -58.0385 81.1772 -175.85 5 126.395 609 0 1 -58.0558 81.282 -204.45 5 124.993 1306 0 0 -58.056 81.2888 -205.85 - 5 47.4889 611 2 1 -57.85 81.2064 -144.716 - 5 30.1926 612 2 1 -57.65 81.1768 -144.786 - 5 114.96 1304 2 0 -56.7928 81.05 -146.038 + 5 78.811 1304 2 0 -57.2031 81.0499 -146.087 Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 1.0972 LIN +Particle energy: 9.36191 LIN Particle: proton Event: 6 -Number of tracker hits in this event: 53 - 6 138.061 839 9 1 -12.1385 -117.566 65.55 - 6 122.724 312 9 0 -12.1406 -117.568 64.15 - 6 128.187 839 8 1 -12.2042 -117.62 35.55 - 6 221.306 312 8 0 -12.2073 -117.622 34.15 - 6 218.929 838 7 1 -12.2677 -117.656 5.55 - 6 164.97 312 7 0 -12.2694 -117.657 4.15 - 6 151.336 838 6 1 -12.2956 -117.666 -24.45 - 6 158.887 312 6 0 -12.2949 -117.665 -25.85 - 6 165.861 838 5 1 -12.2926 -117.658 -54.45 - 6 143.912 312 5 0 -12.2871 -117.655 -55.85 - 6 195.083 839 4 1 -12.1686 -117.631 -84.45 - 6 117.288 312 4 0 -12.1623 -117.626 -85.85 - 6 115.012 840 3 1 -12.0281 -117.522 -114.45 - 6 132.46 313 3 0 -12.031 -117.517 -115.85 - 6 7.00409 838 2 1 -12.25 -117.779 -144.535 - 6 1.25875 369 1 0 -11.4776 -106.196 -175.85 - 6 422.284 301 3 0 -15.5125 -119.945 -116.25 - 6 2304.41 300 3 0 -15.5195 -119.95 -116.193 - 6 3452.43 822 3 1 -15.6021 -120.185 -114.85 - 6 100.311 241 6 1 -131.888 40.4357 -24.696 - 6 737.903 844 2 1 -11.2279 -119.314 -144.45 - 6 785.85 845 2 1 -11.05 -119.513 -144.553 - 6 853.591 846 2 1 -10.85 -119.735 -144.668 - 6 676.703 847 2 1 -10.65 -119.949 -144.773 - 6 22.6383 292 2 0 -8.84696 -121.744 -145.85 - 6 1160.11 291 2 0 -8.84115 -121.75 -145.853 - 6 1932.2 290 2 0 -8.6401 -121.95 -145.98 - 6 2466.92 289 2 0 -8.41022 -122.15 -146.124 - 6 20.1495 1323 1 1 84.6873 -138.426 -174.45 - 6 122.859 1322 1 1 84.65 -138.374 -174.502 - 6 22.0112 1321 1 1 84.45 -138.102 -174.788 - 6 5.40625 214 1 0 83.7818 -137.17 -175.85 - 6 92.2816 215 1 0 83.767 -137.15 -175.874 - 6 286.075 216 1 0 83.6134 -136.95 -176.109 - 6 17.431 1213 0 1 62.6701 -114.478 -204.451 - 6 145.158 1212 0 1 62.6499 -114.438 -204.489 - 6 67.6467 335 0 0 61.9985 -113.074 -205.85 - 6 80.2941 336 0 0 61.9447 -112.95 -205.972 - 6 43.3206 337 0 0 61.8531 -112.75 -206.173 - 6 87.4695 14 2 0 92.3374 -177.221 -146.25 - 6 196.384 13 2 0 92.3144 -177.35 -146.072 - 6 141.63 12 2 0 92.2026 -177.55 -145.886 - 6 145.494 839 2 1 -12.0898 -117.403 -144.45 - 6 129.699 313 2 0 -11.9553 -117.375 -145.85 - 6 173.298 854 1 1 -9.19015 -116.816 -174.45 - 6 179.146 316 1 0 -9.05986 -116.793 -175.85 - 6 134.233 868 0 1 -6.40202 -116.324 -204.45 - 6 147.996 319 0 0 -6.28297 -116.296 -205.85 - 6 60.6383 310 4 0 -11.7719 -118.09 -85.85 - 6 67.0994 309 4 0 -11.813 -118.15 -85.8931 - 6 63.0697 838 4 1 -12.2773 -120.122 -84.85 - 6 39.3598 297 4 0 -13.2624 -120.554 -85.85 - 6 24.9325 298 4 0 -13.253 -120.55 -85.8684 -Number of digits in this event: 36 +Number of tracker hits in this event: 86 + 6 12.3842 500 12 0 90.1854 -80.0322 153.777 + 6 95.567 1386 13 1 97.4982 -43.5839 185.51 + 6 0.148482 1454 7 1 110.95 123.091 5.3618 + 6 1353.86 1288 9 1 77.6701 -97.3896 65.55 + 6 673.11 1287 9 1 77.65 -97.3751 65.537 + 6 768.287 1286 9 1 77.45 -97.2309 65.4071 + 6 651.927 1285 9 1 77.25 -97.0852 65.2794 + 6 463.589 421 9 0 75.5206 -95.8432 64.15 + 6 908.845 422 9 0 75.3905 -95.75 64.065 + 6 780.034 423 9 0 75.1113 -95.55 63.8794 + 6 414.638 1065 8 1 33.1146 -65.6035 35.55 + 6 851.897 1064 8 1 33.05 -65.5488 35.5003 + 6 860.09 1063 8 1 32.85 -65.378 35.3448 + 6 206.951 1062 8 1 32.65 -65.2027 35.1864 + 6 120.574 579 8 0 31.3104 -64.0707 34.15 + 6 1169.04 580 8 0 31.2859 -64.05 34.131 + 6 1238.45 581 8 0 31.0514 -63.85 33.9458 + 6 71.8631 582 8 0 30.8083 -63.65 33.758 + 6 1637.61 871 7 1 -5.73513 -32.4789 5.55 + 6 1319.65 870 7 1 -5.85 -32.3406 5.3208 + 6 1978.09 742 7 0 -6.4721 -31.5926 4.15 + 6 1892.15 743 7 0 -6.59224 -31.45 3.93591 + 6 1413.43 414 9 0 77.4998 -97.243 64.15 + 6 1414.81 1261 8 1 72.3872 -93.11 35.55 + 6 1439.41 436 8 0 71.9661 -92.8422 34.15 + 6 1692.04 1217 7 1 63.6197 -87.0193 5.55 + 6 1975.04 466 7 0 63.2738 -86.8044 4.15 + 6 3799.96 1184 6 1 57.0293 -82.4312 -24.45 + 6 4850.57 490 6 0 56.8435 -81.9537 -25.85 + 6 1940.36 491 6 0 56.8192 -81.85 -26.1458 + 6 254.993 943 4 1 8.81828 -125.585 -84.451 + 6 19.2663 273 4 0 8.73152 -125.547 -85.85 + 6 78.5175 272 4 0 8.7339 -125.55 -85.9169 + 6 42.13 305 3 0 -14.6907 -119.035 -116.25 + 6 79.8358 304 3 0 -14.7304 -119.15 -116.239 + 6 13.7142 942 4 1 8.65 -125.668 -84.8053 + 6 147.885 271 4 0 8.157 -125.872 -85.85 + 6 137.588 873 3 1 -5.31361 -131.474 -114.45 + 6 58.8325 872 3 1 -5.45 -131.53 -114.738 + 6 14.3428 242 3 0 -5.98067 -131.739 -115.85 + 6 113.273 241 3 0 -6.00822 -131.75 -115.908 + 6 42.1452 802 2 1 -19.5915 -137.096 -144.45 + 6 147.98 801 2 1 -19.65 -137.117 -144.57 + 6 0.719895 214 2 0 -20.2734 -137.349 -145.85 + 6 141.642 213 2 0 -20.2748 -137.35 -145.853 + 6 62.9991 729 1 1 -34.1689 -142.541 -174.45 + 6 124.279 728 1 1 -34.25 -142.573 -174.621 + 6 119.933 186 1 0 -34.836 -142.799 -175.85 + 6 21.4906 657 0 1 -48.6158 -148.125 -204.45 + 6 160.734 656 0 1 -48.65 -148.14 -204.519 + 6 195.873 158 0 0 -49.3177 -148.425 -205.85 + 6 188.333 328 4 0 149.848 -114.522 -86.2487 + 6 64.597 329 4 0 150.167 -114.35 -86.0064 + 6 59.5318 330 4 0 150.336 -114.15 -86.026 + 6 61.6725 331 4 0 150.437 -113.95 -86.1194 + 6 40.163 874 4 0 148.899 -5.15744 -86.2499 + 6 263.858 1076 4 0 -0.845763 35.4378 -86.2499 + 6 108.135 413 9 0 77.7486 -97.4547 64.15 + 6 88.8959 1288 8 1 77.8421 -97.6579 35.55 + 6 235.585 412 8 0 77.847 -97.6687 34.15 + 6 98.9746 1289 7 1 77.9487 -97.8883 5.55 + 6 179.346 411 7 0 77.9532 -97.8998 4.15 + 6 62.9723 1289 6 1 78.0489 -98.1349 -24.45 + 6 34.8332 1290 6 1 78.05 -98.137 -24.7188 + 6 109.149 410 6 0 78.0546 -98.1459 -25.85 + 6 114.702 1290 5 1 78.1699 -98.3719 -54.45 + 6 122.022 408 5 0 78.1748 -98.3822 -55.85 + 6 152.079 1291 4 1 78.2732 -98.5911 -84.45 + 6 129.221 407 4 0 78.2776 -98.6008 -85.85 + 6 155.302 1291 3 1 78.3665 -98.7993 -114.45 + 6 123.849 406 3 0 78.3723 -98.8086 -115.85 + 6 114.134 1292 2 1 78.4954 -98.9956 -144.45 + 6 135.184 405 2 0 78.5012 -99.0049 -145.85 + 6 199.281 1292 1 1 78.6221 -99.1969 -174.45 + 6 96.2589 404 1 0 78.6291 -99.2059 -175.85 + 6 105.685 1293 0 1 78.7773 -99.3897 -204.45 + 6 109.247 403 0 0 78.7841 -99.3989 -205.85 + 6 129.929 406 2 0 78.4842 -98.9496 -146.021 + 6 36.7291 1290 4 1 78.25 -98.5448 -84.7457 + 6 35.1471 412 4 0 77.5505 -97.6283 -85.85 + 6 90.6172 413 4 0 77.4938 -97.55 -85.9304 + 6 43.7481 414 4 0 77.3249 -97.35 -86.1199 + 6 53.8538 392 9 0 63.4562 -101.716 63.75 + 6 117.818 391 9 0 63.3738 -101.75 63.8734 + 6 137.956 1213 9 1 62.7965 -102.058 65.15 + 6 176.886 1212 9 1 62.65 -102.26 65.2921 +Number of digits in this event: 50 Using G4ParticleGun... -Particle energy: 7.66448 LIN +Particle energy: 2.57918 LIN Particle: proton Event: 7 -Number of tracker hits in this event: 159 - 7 141.093 966 11 1 13.322 16.0208 125.55 - 7 137.66 979 11 0 13.3221 16.0205 124.15 - 7 171.356 966 10 1 13.3198 16.0144 95.55 - 7 124.891 979 10 0 13.3205 16.0147 94.15 - 7 120.891 966 9 1 13.336 16.015 65.55 - 7 124.178 979 9 0 13.3371 16.0155 64.15 - 7 111.889 966 8 1 13.3627 16.0232 35.55 - 7 95.223 979 8 0 13.3636 16.0231 34.15 - 7 138.085 966 7 1 13.3817 16.0245 5.55 - 7 219.024 979 7 0 13.382 16.0244 4.15 - 7 97.288 966 6 1 13.3817 16.0222 -24.45 - 7 177.626 979 6 0 13.3818 16.023 -25.85 - 7 95.8604 966 5 1 13.3804 16.0378 -54.45 - 7 188.095 979 5 0 13.38 16.0394 -55.85 - 7 123.382 966 4 1 13.3722 16.0706 -84.45 - 7 112.02 980 4 0 13.3722 16.0724 -85.85 - 7 105.006 966 3 1 13.3694 16.1103 -114.45 - 7 202.29 980 3 0 13.3694 16.1136 -115.85 - 7 110.779 966 2 1 13.3699 16.1831 -144.45 - 7 98.776 980 2 0 13.37 16.1865 -145.85 - 7 624.569 966 1 1 13.3716 16.258 -174.45 - 7 109.649 981 1 0 13.3716 16.2613 -175.85 - 7 108.143 966 0 1 13.3702 16.3242 -204.45 - 7 157.674 981 0 0 13.3712 16.3272 -205.85 - 7 33.6841 811 4 1 -17.6615 -126.576 -84.8329 - 7 579.529 884 1 1 -3.14903 39.4812 -174.663 - 7 108.057 1054 0 0 13.7118 30.994 -206.25 - 7 290.329 1055 0 0 13.7129 31.05 -206.162 - 7 384.085 968 0 1 13.7291 31.8886 -204.85 - 7 370.916 1153 1 0 13.4603 50.6921 -176.25 - 7 213.507 1154 1 0 13.4579 50.85 -176.01 - 7 305.85 1253 2 0 14.355 70.6994 -146.25 - 7 225.664 1254 2 0 14.3624 70.85 -146.024 - 7 522.524 971 2 1 14.4038 71.6423 -144.85 - 7 138.694 1356 3 0 15.0316 91.4535 -116.25 - 7 349.881 1357 3 0 15.0346 91.55 -116.111 - 7 444.742 975 3 1 15.0539 92.4242 -114.85 - 7 302.669 1460 4 0 16.2144 112.192 -86.25 - 7 218.514 1461 4 0 16.2238 112.35 -86.022 - 7 457.591 981 4 1 16.2694 113.16 -84.85 - 7 35.3476 1290 5 0 34.3424 78.1582 -56.25 - 7 71.273 1289 5 0 34.392 78.05 -56.1712 - 7 385.59 1288 5 0 34.5401 77.8497 -56.0733 - 7 627.649 1287 5 0 34.9538 77.65 -56.0087 - 7 31.7384 1286 5 0 35.3878 77.45 -55.9751 - 7 179.336 1079 5 1 35.9611 78.1746 -54.85 - 7 46.9853 728 4 1 -34.4221 71.7062 -84.45 - 7 214.369 727 4 1 -34.4502 71.6928 -84.4957 - 7 2.69368 488 2 1 -82.2584 61.6695 -144.45 - 7 136.272 489 2 1 -82.25 61.6711 -144.453 - 7 9.77476 731 3 1 -33.65 109.274 -114.848 - 7 146.288 1258 1 0 158.066 71.65 -176.062 - 7 297.498 980 0 0 25.7658 16.078 -206.25 - 7 143.435 1027 0 1 25.4963 16.0334 -204.85 - 7 90.4459 1026 0 1 25.45 16.0252 -204.608 - 7 337.805 968 1 0 19.4066 13.7251 -176.25 - 7 183.826 995 1 1 19.0991 13.5955 -174.85 - 7 97.6273 994 1 1 19.05 13.5741 -174.629 - 7 299.738 956 2 0 13.4943 11.3371 -146.25 - 7 342.166 965 2 1 13.2419 11.2175 -144.85 - 7 280.221 951 3 0 8.82758 10.391 -116.25 - 7 282.984 942 3 1 8.6022 10.3492 -114.85 - 7 356.383 948 4 0 1.53983 9.71448 -86.25 - 7 320.196 905 4 1 1.15689 9.62144 -84.85 - 7 14.5318 904 4 1 1.05 9.58967 -84.4728 - 7 96.8277 912 5 0 -9.96512 2.4693 -56.25 - 7 361.907 911 5 0 -9.99484 2.45 -56.1741 - 7 328.345 847 5 1 -10.5168 2.10484 -54.85 - 7 51.7856 846 5 1 -10.65 2.01634 -54.5147 - 7 233 849 6 0 -27.6377 -10.1698 -26.25 - 7 246.414 848 6 0 -27.7493 -10.25 -26.0651 - 7 254.29 757 6 1 -28.4918 -10.8161 -24.85 - 7 192.025 756 6 1 -28.65 -10.9383 -24.592 - 7 61.5195 763 7 0 -47.2563 -27.4207 3.75 - 7 399.071 762 7 0 -47.2894 -27.45 3.80027 - 7 13.197 761 7 0 -47.5094 -27.65 4.14074 - 7 294.216 659 7 1 -48.1137 -28.2294 5.15 - 7 278.509 658 7 1 -48.25 -28.36 5.37764 - 7 475.766 652 8 0 -76.6406 -49.4911 33.75 - 7 446.554 651 8 0 -76.8548 -49.65 33.9628 - 7 92.3317 510 8 1 -77.9967 -50.5109 35.15 - 7 485.063 509 8 1 -78.05 -50.5511 35.2055 - 7 321.459 508 8 1 -78.25 -50.7017 35.4126 - 7 859.33 683 9 0 -114.645 -43.3276 63.75 - 7 532.168 684 9 0 -115.026 -43.25 64.0271 - 7 246.618 318 9 1 -116.467 -42.921 65.15 - 7 595.356 317 9 1 -116.55 -42.9023 65.2155 - 7 617.396 316 9 1 -116.75 -42.852 65.3804 - 7 6.34779 315 9 1 -116.95 -42.7988 65.5479 - 7 130.226 314 9 1 -117.202 -42.5855 65.55 - 7 41.0181 313 9 1 -117.35 -42.6152 65.2375 - 7 122.172 686 9 0 -117.865 -42.7252 64.15 - 7 139.28 246 8 1 -130.765 -45.9702 35.55 - 7 19.8121 245 8 1 -130.95 -46.0745 35.2165 - 7 26.1716 668 8 0 -131.553 -46.4204 34.15 - 7 93.1182 667 8 0 -131.606 -46.45 34.0571 - 7 320.704 162 7 1 -147.628 -55.498 5.55 - 7 209.628 161 7 1 -147.75 -55.5971 5.3243 - 7 134.297 619 7 0 -148.379 -56.0919 4.15 - 7 8.94381 618 7 0 -148.542 -56.25 3.78216 - 7 119.969 134 6 1 -153.318 -69.5676 -24.4507 - 7 15.1534 133 6 1 -153.35 -69.6972 -24.7782 - 7 128.925 549 6 0 -153.479 -70.1018 -25.85 - 7 223.818 117 5 1 -156.55 -80.8142 -54.45 - 7 43.818 493 5 0 -156.555 -81.3965 -55.85 - 7 106.143 492 5 0 -156.557 -81.45 -55.9833 - 7 306.203 108 4 1 -158.534 -91.8482 -84.45 - 7 32.0345 438 4 0 -158.538 -92.5085 -85.85 - 7 105.678 437 4 0 -158.538 -92.55 -85.9367 - 7 208.193 107 3 1 -158.661 -105.314 -114.45 - 7 192.245 372 3 0 -158.762 -105.562 -115.85 - 7 222.479 89 2 1 -162.225 -109.287 -144.451 - 7 115.263 351 2 0 -162.323 -109.841 -145.85 - 7 40.8172 350 2 0 -162.343 -109.95 -146.117 - 7 134.129 79 1 1 -164.221 -123.564 -174.45 - 7 14.2732 78 1 1 -164.35 -123.769 -174.806 - 7 115.177 278 1 0 -164.775 -124.353 -175.85 - 7 14.6346 277 1 0 -164.903 -124.55 -176.219 - 7 36.8 24 0 1 -175.292 -141.147 -204.45 - 7 252.932 23 0 1 -175.35 -141.221 -204.527 - 7 34.8462 22 0 1 -175.55 -141.502 -204.78 - 7 19.779 187 0 0 -176.38 -142.694 -205.85 - 7 156.916 186 0 0 -176.42 -142.75 -205.9 - 7 65.2994 185 0 0 -176.565 -142.95 -206.065 - 7 22.0499 184 0 0 -176.715 -143.15 -206.214 - 7 31.0627 1673 13 0 -31.811 154.871 183.75 - 7 8.62876 107 4 1 -158.551 -91.7943 -84.45 - 7 113.622 623 7 0 -147.279 -55.4025 4.15 - 7 8.30558 622 7 0 -147.178 -55.45 3.78758 - 7 1.98518 432 7 0 -135.618 -93.7409 3.75 - 7 125.432 431 7 0 -135.616 -93.7501 3.75867 - 7 140.54 430 7 0 -135.598 -93.95 3.86093 - 7 27.2723 654 7 0 -126.132 -49.0973 3.75 - 7 251.126 655 7 0 -126.198 -49.05 3.78421 - 7 26.4631 1167 5 1 53.4712 -11.1131 -54.85 - 7 243.516 1166 5 1 53.45 -11.1412 -54.7176 - 7 33.7851 401 12 0 -30.3964 -99.9238 153.75 - 7 67.6571 400 12 0 -30.4284 -99.95 153.877 - 7 171.204 744 12 1 -31.0815 -100.005 155.15 - 7 148.067 745 12 1 -31.05 -99.9859 155.481 - 7 99.5102 746 12 1 -30.85 -99.9553 155.272 - 7 136.377 402 12 0 -30.2081 -99.7324 154.15 - 7 39.4369 403 12 0 -30.1998 -99.55 153.832 - 7 42.5171 463 12 0 -29.2411 -87.4037 153.75 - 7 119.429 462 12 0 -29.2476 -87.45 153.804 - 7 95.4098 461 12 0 -29.1443 -87.65 154.062 - 7 245.919 765 12 1 -27.0479 -88.8943 155.15 - 7 1.19801 813 13 0 19.848 -17.3121 183.75 - 7 4232.63 946 0 0 79.1654 9.38125 -206.25 - 7 295.459 1314 0 1 82.9858 9.044 -204.85 - 7 861.681 1315 0 1 83.05 9.03794 -204.826 - 7 817.226 1316 0 1 83.25 9.0162 -204.752 - 7 915.353 1317 0 1 83.45 8.99124 -204.678 - 7 907.835 1318 0 1 83.65 8.96888 -204.604 - 7 1050.69 1319 0 1 83.85 8.95037 -204.533 - 7 191.507 1320 0 1 84.05 8.92879 -204.463 - 7 224.294 1119 3 0 -91.6634 43.9252 -116.25 - 7 191.204 967 10 1 13.45 16.0635 95.2213 - 7 46.641 993 10 0 13.4323 18.7141 94.1499 -Number of digits in this event: 99 +Number of tracker hits in this event: 25 + 7 119.764 561 11 1 -67.6625 -36.0369 125.55 + 7 155.137 720 11 0 -67.6623 -36.037 124.15 + 7 114.344 561 10 1 -67.6637 -36.0414 95.55 + 7 120.309 720 10 0 -67.6627 -36.0416 94.15 + 7 122.32 561 9 1 -67.6503 -36.0514 65.55 + 7 58.832 562 9 1 -67.65 -36.0518 65.4038 + 7 165.995 719 9 0 -67.6468 -36.0549 64.15 + 7 122.363 562 8 1 -67.5755 -36.122 35.55 + 7 161.998 719 8 0 -67.571 -36.1237 34.15 + 7 113.838 562 7 1 -67.4732 -36.1434 5.55 + 7 129.493 719 7 0 -67.4674 -36.1459 4.15 + 7 117.469 563 6 1 -67.3425 -36.1978 -24.45 + 7 95.5991 719 6 0 -67.3326 -36.1986 -25.85 + 7 108.031 564 5 1 -67.1286 -36.212 -54.45 + 7 131.748 719 5 0 -67.1182 -36.2125 -55.85 + 7 93.9381 565 4 1 -66.9049 -36.227 -84.45 + 7 204.45 719 4 0 -66.8926 -36.2263 -85.85 + 7 147.543 567 3 1 -66.6439 -36.2061 -114.45 + 7 185.844 719 3 0 -66.6336 -36.2032 -115.85 + 7 114.403 568 2 1 -66.4181 -36.131 -144.45 + 7 138.159 719 2 0 -66.4073 -36.1278 -145.85 + 7 112.852 569 1 1 -66.1817 -36.0589 -174.45 + 7 121.414 719 1 0 -66.1676 -36.0578 -175.85 + 7 133.124 570 0 1 -65.8824 -36.0326 -204.45 + 7 89.3345 720 0 0 -65.8668 -36.0305 -205.85 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 8.15364 LIN +Particle energy: 2.87644 LIN Particle: proton Event: 8 -Number of tracker hits in this event: 28 - 8 97.5546 497 10 1 -80.6433 42.0859 95.55 - 8 119.413 1110 10 0 -80.6436 42.087 94.15 - 8 108.916 497 9 1 -80.6493 42.1082 65.55 - 8 148.455 1110 9 0 -80.6497 42.1089 64.15 - 8 112.94 496 8 1 -80.6555 42.1231 35.55 - 8 118.172 1110 8 0 -80.6556 42.1238 34.15 - 8 121.013 496 7 1 -80.6603 42.1384 5.55 - 8 144.961 1110 7 0 -80.6604 42.1384 4.15 - 8 119.078 496 6 1 -80.659 42.1428 -24.45 - 8 172.024 1110 6 0 -80.658 42.1437 -25.85 - 8 101.214 497 5 1 -80.6364 42.1609 -54.45 - 8 103.238 1110 5 0 -80.6353 42.1619 -55.85 - 8 116.824 497 4 1 -80.6148 42.1844 -84.45 - 8 117.373 1110 4 0 -80.6139 42.1858 -85.85 - 8 102.006 497 3 1 -80.5965 42.2106 -114.45 - 8 119.024 1110 3 0 -80.5961 42.2116 -115.85 - 8 123.672 497 2 1 -80.5914 42.2318 -144.45 - 8 135.132 1110 2 0 -80.5913 42.2337 -145.85 - 8 104.252 497 1 1 -80.5882 42.2724 -174.45 - 8 117.148 1111 1 0 -80.5876 42.2746 -175.85 - 8 100.795 497 0 1 -80.5745 42.3199 -204.45 - 8 97.2751 1111 0 0 -80.5735 42.3228 -205.85 - 8 79.7204 1102 6 0 -18.7365 40.4784 -26.2499 - 8 76.4977 1101 6 0 -18.7366 40.4499 -26.1999 - 8 53.7826 997 7 0 -92.8365 19.5534 3.75 - 8 63.0732 996 7 0 -92.8579 19.45 3.97119 - 8 183.163 435 7 1 -93.0585 18.8427 5.15 - 8 192.25 434 7 1 -93.15 18.5166 5.53324 -Number of digits in this event: 9 +Number of tracker hits in this event: 26 + 8 157.38 1085 11 1 37.1304 7.3146 125.55 + 8 202.142 936 11 0 37.1319 7.31399 124.15 + 8 110.535 1085 10 1 37.1691 7.31358 95.55 + 8 129.708 936 10 0 37.1724 7.31445 94.15 + 8 107.321 1085 9 1 37.2365 7.3327 65.55 + 8 104.557 936 9 0 37.2394 7.33359 64.15 + 8 174.258 1086 8 1 37.2956 7.33792 35.55 + 8 104.949 936 8 0 37.3006 7.33813 34.15 + 8 120.647 1086 7 1 37.4087 7.35003 5.55 + 8 94.4742 936 7 0 37.4138 7.34974 4.15 + 8 110.789 1087 6 1 37.512 7.34826 -24.45 + 8 130.885 936 6 0 37.5193 7.34693 -25.85 + 8 90.8535 1088 5 1 37.6727 7.32157 -54.45 + 8 347.75 936 5 0 37.6791 7.32025 -55.85 + 8 107.465 1088 4 1 37.8116 7.29596 -84.45 + 8 108.877 936 4 0 37.8205 7.29302 -85.85 + 8 148.704 1089 3 1 38.0071 7.23427 -114.45 + 8 157.048 935 3 0 38.0185 7.23093 -115.85 + 8 154.087 1091 2 1 38.251 7.1609 -144.45 + 8 140.797 935 2 0 38.2607 7.15755 -145.85 + 8 131.306 1092 1 1 38.4613 7.08306 -174.45 + 8 111.344 935 1 0 38.4707 7.07935 -175.85 + 8 111.555 1093 0 1 38.6632 7.00885 -204.45 + 8 105.68 934 0 0 38.6755 7.00767 -205.85 + 8 320.194 1086 9 1 37.25 7.33764 65.2804 + 8 241.654 1084 11 1 37.05 7.35106 125.412 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 7.37736 LIN +Particle energy: 5.11378 LIN Particle: proton Event: 9 Number of tracker hits in this event: 25 - 9 140.741 1202 11 1 60.4739 31.3453 125.55 - 9 159.048 1056 11 0 60.4738 31.346 124.15 - 9 172.32 1202 10 1 60.4752 31.3676 95.55 - 9 101.181 1056 10 0 60.4771 31.3686 94.15 - 9 93.5965 1202 9 1 60.5171 31.3905 65.55 - 9 156.637 1056 9 0 60.5182 31.3911 64.15 - 9 100.805 1202 8 1 60.5412 31.4059 35.55 - 9 124.061 1056 8 0 60.5417 31.4073 34.15 - 9 113.298 1202 7 1 60.5503 31.4342 5.55 - 9 131.74 1056 7 0 60.5507 31.435 4.15 - 9 94.9086 1202 6 1 60.5589 31.4535 -24.45 - 9 118.036 1057 6 0 60.5607 31.454 -25.85 - 9 113.066 1202 5 1 60.5909 31.4649 -54.45 - 9 129.698 1057 5 0 60.5917 31.4652 -55.85 - 9 120.64 1202 4 1 60.6089 31.4713 -84.45 - 9 137.224 1057 4 0 60.6091 31.4718 -85.85 - 9 245.319 1202 3 1 60.6124 31.4836 -114.45 - 9 121.575 1057 3 0 60.6124 31.4839 -115.85 - 9 121.386 1202 2 1 60.6116 31.4865 -144.45 - 9 97.3424 1057 2 0 60.6112 31.4868 -145.85 - 9 128.613 1202 1 1 60.6047 31.4939 -174.45 - 9 149.613 1057 1 0 60.605 31.4927 -175.85 - 9 91.4374 1202 0 1 60.6084 31.4691 -204.45 - 9 127.268 1057 0 0 60.6088 31.4681 -205.85 - 9 122.902 1056 1 0 60.6047 31.45 -176.119 -Number of digits in this event: 17 + 9 132.711 1334 10 1 86.9604 28.999 95.55 + 9 127.035 1044 10 0 86.963 29.0043 94.15 + 9 158.274 1334 9 1 87.0233 29.133 65.55 + 9 184.844 1045 9 0 87.0259 29.1396 64.15 + 9 133.6 1335 8 1 87.0801 29.2731 35.55 + 9 104.95 1046 8 0 87.0812 29.2783 34.15 + 9 104.018 1335 7 1 87.1016 29.3878 5.55 + 9 134.149 1046 7 0 87.1022 29.3924 4.15 + 9 128.181 1335 6 1 87.1159 29.4837 -24.45 + 9 223.778 1047 6 0 87.1164 29.4886 -25.85 + 9 117.799 1335 5 1 87.1266 29.5942 -54.45 + 9 108.397 1047 5 0 87.128 29.6 -55.85 + 9 118.439 1335 4 1 87.1562 29.7152 -84.45 + 9 294.917 1048 4 0 87.1579 29.7203 -85.85 + 9 232.555 1335 3 1 87.1923 29.8285 -114.45 + 9 124.768 1048 3 0 87.1901 29.8351 -115.85 + 9 144.137 1335 2 1 87.1426 29.9711 -144.45 + 9 94.5255 1049 2 0 87.1412 29.9759 -145.85 + 9 130.697 1335 1 1 87.1213 30.0721 -174.45 + 9 130.687 1050 1 0 87.1198 30.0792 -175.85 + 9 91.9407 1335 0 1 87.0944 30.2263 -204.45 + 9 125.109 1050 0 0 87.0943 30.2333 -205.85 + 9 49.5131 1049 1 0 87.0696 30.05 -176.214 + 9 94.5997 909 1 0 -159.247 1.97389 -176.25 + 9 151.363 1335 9 1 87.0501 29.183 65.3444 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 1.1389 LIN +Particle energy: 8.85385 LIN Particle: proton Event: 10 -Number of tracker hits in this event: 29 - 10 105.271 1387 10 1 97.6317 18.0562 95.55 - 10 114.766 990 10 0 97.6371 18.0533 94.15 - 10 131.861 1388 9 1 97.7703 17.9884 65.55 - 10 174.268 989 9 0 97.771 17.9818 64.15 - 10 106.692 1388 8 1 97.7873 17.8631 35.55 - 10 155.709 989 8 0 97.7906 17.8595 34.15 - 10 218.427 1388 7 1 97.8687 17.7734 5.55 - 10 276.658 988 7 0 97.8716 17.7634 4.15 - 10 118.511 1388 6 1 97.9473 17.5798 -24.45 - 10 119.038 987 6 0 97.951 17.5733 -25.85 - 10 252.691 1389 5 1 98.0132 17.4386 -54.45 - 10 290.418 986 5 0 98.0213 17.4309 -55.85 - 10 122.953 1390 4 1 98.184 17.2754 -84.45 - 10 131.166 986 4 0 98.1914 17.2678 -85.85 - 10 172.165 1390 3 1 98.3404 17.1177 -114.45 - 10 113.301 985 3 0 98.3446 17.1133 -115.85 - 10 173.994 1391 2 1 98.4274 17.0244 -144.45 - 10 141.778 984 2 0 98.43 17.0239 -145.85 - 10 128.273 1391 1 1 98.4775 17.0169 -174.45 - 10 113.686 984 1 0 98.4806 17.0128 -175.85 - 10 131.916 1392 0 1 98.5681 16.9123 -204.45 - 10 115.49 984 0 0 98.5653 16.9007 -205.85 - 10 76.2649 1391 3 1 98.35 17.1154 -114.784 - 10 31.7973 1392 3 1 98.55 17.1514 -114.811 - 10 149.856 986 3 0 98.4623 17.409 -115.85 - 10 106.68 987 3 0 98.454 17.45 -116.002 - 10 71.0155 990 9 0 97.7558 18.05 63.9362 - 10 118.711 960 11 0 115.38 12.1519 123.75 - 10 211.408 959 11 0 115.298 12.05 123.829 -Number of digits in this event: 17 +Number of tracker hits in this event: 26 + 10 105.704 972 11 1 14.5685 73.4977 125.55 + 10 100.847 1267 11 0 14.5686 73.4972 124.15 + 10 106.873 972 10 1 14.5733 73.4871 95.55 + 10 105.265 1267 10 0 14.5718 73.4877 94.15 + 10 105.523 972 9 1 14.5378 73.5008 65.55 + 10 123.982 1267 9 0 14.5364 73.5022 64.15 + 10 115.396 972 8 1 14.5082 73.5293 35.55 + 10 263.628 1267 8 0 14.5078 73.5299 34.15 + 10 117.48 972 7 1 14.5034 73.5415 5.55 + 10 123.605 1267 7 0 14.503 73.5429 4.15 + 10 155.357 972 6 1 14.4967 73.5712 -24.45 + 10 188.417 1267 6 0 14.4964 73.5734 -25.85 + 10 137.424 972 5 1 14.4888 73.6169 -54.45 + 10 181.963 1267 5 0 14.489 73.6191 -55.85 + 10 153.357 972 4 1 14.4929 73.6639 -84.45 + 10 158.81 1268 4 0 14.4938 73.6663 -85.85 + 10 122.304 972 3 1 14.5111 73.7145 -114.45 + 10 126.758 1268 3 0 14.5126 73.7174 -115.85 + 10 211.126 972 2 1 14.5435 73.7775 -144.45 + 10 172.655 1268 2 0 14.544 73.7809 -145.85 + 10 99.4003 972 1 1 14.5533 73.8539 -174.45 + 10 121.25 1269 1 0 14.5536 73.8584 -175.85 + 10 99.5721 972 0 1 14.5604 73.9507 -204.45 + 10 409.318 1269 0 0 14.5602 73.9556 -205.85 + 10 82.2324 1269 2 0 14.5048 73.85 -145.865 + 10 167.492 1268 6 0 14.5375 73.6501 -25.9462 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 7.29154 LIN +Particle energy: 4.84477 LIN Particle: proton Event: 11 -Number of tracker hits in this event: 18 - 11 128.036 177 7 1 -144.662 34.7588 5.55 - 11 112.177 1073 7 0 -144.66 34.7586 4.15 - 11 126.848 177 6 1 -144.625 34.7564 -24.45 - 11 127.701 1073 6 0 -144.623 34.757 -25.85 - 11 116.051 177 5 1 -144.582 34.7666 -54.45 - 11 160.136 1073 5 0 -144.58 34.7664 -55.85 - 11 131 178 4 1 -144.545 34.7561 -84.45 - 11 112.118 1073 4 0 -144.542 34.7559 -85.85 - 11 96.9714 178 3 1 -144.483 34.753 -114.45 - 11 134.708 1073 3 0 -144.481 34.7528 -115.85 - 11 119.051 178 2 1 -144.429 34.7488 -144.45 - 11 102.308 1073 2 0 -144.427 34.7483 -145.85 - 11 110.629 178 1 1 -144.382 34.7439 -174.45 - 11 122.283 1073 1 0 -144.381 34.7436 -175.85 - 11 173.95 178 0 1 -144.36 34.7396 -204.45 - 11 123.715 1073 0 0 -144.36 34.7389 -205.85 - 11 14.2028 1351 4 0 137.65 90.4035 -86.1416 - 11 18.8896 1074 5 0 -144.462 34.85 -56.2028 -Number of digits in this event: 13 +Number of tracker hits in this event: 16 + 11 124.596 1593 7 1 138.883 46.6195 5.55 + 11 138.685 1132 7 0 138.884 46.6186 4.15 + 11 120.531 1593 6 1 138.919 46.604 -24.45 + 11 117.995 1132 6 0 138.92 46.6032 -25.85 + 11 120.556 1593 5 1 138.936 46.583 -54.45 + 11 221.149 1132 5 0 138.937 46.5834 -55.85 + 11 98.2912 1593 4 1 138.943 46.5891 -84.45 + 11 95.1066 1132 4 0 138.945 46.5873 -85.85 + 11 159.691 1594 3 1 138.984 46.5525 -114.45 + 11 140.356 1132 3 0 138.986 46.5508 -115.85 + 11 94.2286 1594 2 1 139.033 46.5107 -144.45 + 11 175.946 1132 2 0 139.034 46.5093 -145.85 + 11 168.474 1594 1 1 139.063 46.4813 -174.45 + 11 106.48 1132 1 0 139.064 46.4796 -175.85 + 11 108.433 1594 0 1 139.11 46.4457 -204.45 + 11 125.295 1131 0 0 139.112 46.4434 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 5.72233 LIN +Particle energy: 3.84867 LIN Particle: proton Event: 12 -Number of tracker hits in this event: 24 - 12 112.642 899 11 1 -0.180093 -3.65524 125.55 - 12 124.846 881 11 0 -0.178974 -3.65607 124.15 - 12 114.281 899 10 1 -0.154492 -3.66828 95.55 - 12 134.114 881 10 0 -0.154907 -3.66992 94.15 - 12 193.835 899 9 1 -0.164652 -3.70244 65.55 - 12 117.745 881 9 0 -0.166939 -3.70321 64.15 - 12 121.714 899 8 1 -0.212924 -3.71333 35.55 - 12 135.376 881 8 0 -0.21539 -3.71391 34.15 - 12 92.1379 898 7 1 -0.267716 -3.72423 5.55 - 12 147.307 881 7 0 -0.259051 -3.72124 4.15 - 12 105.673 899 6 1 -0.0873844 -3.66422 -24.45 - 12 105.908 881 6 0 -0.0789982 -3.66165 -25.85 - 12 108.57 900 5 1 0.0882417 -3.61249 -54.45 - 12 104.305 882 5 0 0.0956314 -3.60896 -55.85 - 12 213.124 900 4 1 0.243789 -3.53597 -84.45 - 12 112.546 882 4 0 0.249985 -3.53304 -85.85 - 12 107.876 901 3 1 0.373821 -3.47594 -114.45 - 12 102.087 882 3 0 0.379381 -3.47275 -115.85 - 12 133.565 902 2 1 0.492998 -3.4112 -144.45 - 12 114.21 883 2 0 0.496149 -3.40778 -145.85 - 12 109.153 902 1 1 0.562873 -3.3403 -174.45 - 12 95.4404 883 1 0 0.56558 -3.33588 -175.85 - 12 132.909 902 0 1 0.61933 -3.24516 -204.45 - 12 120.444 884 0 0 0.62215 -3.23921 -205.85 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 9.40514 LIN -Particle: proton -Event: 13 -Number of tracker hits in this event: 16 - 13 196.208 784 7 1 -23.1608 147.39 5.55 - 13 110.809 1636 7 0 -23.1607 147.39 4.15 - 13 114.21 784 6 1 -23.1638 147.383 -24.45 - 13 125.673 1636 6 0 -23.1648 147.382 -25.85 - 13 124.05 784 5 1 -23.1851 147.375 -54.45 - 13 115.937 1636 5 0 -23.1853 147.374 -55.85 - 13 107.962 784 4 1 -23.1839 147.35 -84.45 - 13 106.717 1635 4 0 -23.1846 147.349 -85.85 - 13 81.6092 784 3 1 -23.1987 147.336 -114.45 - 13 138.101 1635 3 0 -23.1989 147.336 -115.85 - 13 143.694 784 2 1 -23.2002 147.336 -144.45 - 13 144.391 1635 2 0 -23.2008 147.337 -145.85 - 13 193.137 784 1 1 -23.2114 147.354 -174.45 - 13 129.968 1636 1 0 -23.213 147.354 -175.85 - 13 107.773 784 0 1 -23.2464 147.363 -204.45 - 13 127.897 1636 0 0 -23.248 147.363 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 5.68289 LIN -Particle: proton -Event: 14 Number of tracker hits in this event: 25 - 14 170.998 1103 11 1 40.712 23.3798 125.55 - 14 101.237 1016 11 0 40.7124 23.3791 124.15 - 14 186.007 1103 10 1 40.7192 23.3637 95.55 - 14 114.479 1016 10 0 40.7195 23.3628 94.15 - 14 130.632 1103 9 1 40.7223 23.3469 65.55 - 14 181.307 1016 9 0 40.7234 23.3462 64.15 - 14 93.1026 1103 8 1 40.7411 23.3274 35.55 - 14 107.22 1016 8 0 40.7415 23.3263 34.15 - 14 148.973 1103 7 1 40.7497 23.3068 5.55 - 14 262.585 1016 7 0 40.7509 23.3066 4.15 - 14 102.058 1103 6 1 40.7808 23.3014 -24.45 - 14 92.4388 1016 6 0 40.7815 23.3003 -25.85 - 14 109.792 1103 5 1 40.7946 23.2786 -54.45 - 14 134.064 1016 5 0 40.7959 23.2775 -55.85 - 14 139.402 1103 4 1 40.8197 23.255 -84.45 - 14 114.248 1016 4 0 40.8214 23.2542 -85.85 - 14 122.927 1104 3 1 40.8586 23.2264 -114.45 - 14 102.152 1015 3 0 40.8609 23.2264 -115.85 - 14 94.8468 1104 2 1 40.9094 23.2312 -144.45 - 14 94.977 1015 2 0 40.9125 23.2322 -145.85 - 14 190.822 1104 1 1 40.972 23.2511 -174.45 - 14 126.894 1016 1 0 40.9759 23.251 -175.85 - 14 111.101 1105 0 1 41.0577 23.246 -204.45 - 14 97.9251 1015 0 0 41.0629 23.2462 -205.85 - 14 118.63 1015 7 0 40.7063 23.25 4.0617 + 12 107.126 501 11 1 -79.6805 -12.4116 125.55 + 12 129.967 838 11 0 -79.6787 -12.4101 124.15 + 12 111.211 501 10 1 -79.6507 -12.3802 95.55 + 12 127.686 838 10 0 -79.6497 -12.3774 94.15 + 12 113.97 502 9 1 -79.6361 -12.3197 65.55 + 12 93.9951 838 9 0 -79.6364 -12.3162 64.15 + 12 140.943 502 8 1 -79.6368 -12.249 35.55 + 12 125.895 839 8 0 -79.6363 -12.2445 34.15 + 12 96.467 502 7 1 -79.6274 -12.1599 5.55 + 12 103.923 839 7 0 -79.6273 -12.1574 4.15 + 12 145.881 502 6 1 -79.6331 -12.0978 -24.45 + 12 126.505 839 6 0 -79.6337 -12.0926 -25.85 + 12 261.971 502 5 1 -79.6436 -11.9851 -54.45 + 12 148.256 840 5 0 -79.6437 -11.9794 -55.85 + 12 60.5147 501 4 1 -79.6502 -11.8599 -84.45 + 12 56.6017 502 4 1 -79.65 -11.8589 -84.6593 + 12 138.752 840 4 0 -79.6488 -11.8532 -85.85 + 12 118.444 502 3 1 -79.6221 -11.7183 -114.45 + 12 103.872 841 3 0 -79.6194 -11.7125 -115.85 + 12 116.389 502 2 1 -79.5726 -11.59 -144.45 + 12 97.6581 842 2 0 -79.5704 -11.5849 -145.85 + 12 222.163 502 1 1 -79.5205 -11.4789 -174.45 + 12 105.44 842 1 0 -79.5172 -11.4745 -175.85 + 12 89.2031 502 0 1 -79.452 -11.3872 -204.45 + 12 136.836 843 0 0 -79.4488 -11.3844 -205.85 Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 2.22935 LIN +Particle energy: 4.20913 LIN +Particle: proton +Event: 13 +Number of tracker hits in this event: 27 + 13 111.608 637 11 1 -52.5099 -20.1537 125.55 + 13 105.268 799 11 0 -52.5098 -20.1546 124.15 + 13 265.77 637 10 1 -52.5092 -20.1834 95.55 + 13 117.667 799 10 0 -52.508 -20.1835 94.15 + 13 194.187 637 9 1 -52.4783 -20.1879 65.55 + 13 96.0704 799 9 0 -52.4783 -20.1877 64.15 + 13 259.358 637 8 1 -52.4812 -20.1834 35.55 + 13 92.6095 799 8 0 -52.4777 -20.1787 34.15 + 13 116.681 638 7 1 -52.4134 -20.0844 5.55 + 13 155.959 799 7 0 -52.4107 -20.0801 4.15 + 13 132.499 638 6 1 -52.3514 -19.99 -24.45 + 13 98.782 800 6 0 -52.3476 -19.9835 -25.85 + 13 109.461 638 5 1 -52.2644 -19.855 -54.45 + 13 287.612 801 5 0 -52.2605 -19.8492 -55.85 + 13 89.1586 639 4 1 -52.1757 -19.7294 -84.45 + 13 171.812 801 4 0 -52.1729 -19.724 -85.85 + 13 138.739 639 3 1 -52.1172 -19.6226 -114.45 + 13 106.659 802 3 0 -52.1134 -19.6188 -115.85 + 13 126.124 640 2 1 -52.0325 -19.537 -144.45 + 13 101.362 802 2 0 -52.0292 -19.5332 -145.85 + 13 150.82 640 1 1 -51.9657 -19.4504 -174.45 + 13 109.387 803 1 0 -51.9624 -19.447 -175.85 + 13 111.474 640 0 1 -51.8937 -19.3852 -204.45 + 13 154.724 803 0 0 -51.8911 -19.3835 -205.85 + 13 95.8966 638 8 1 -52.4499 -20.1631 35.2657 + 13 0.636274 782 9 0 -49.6643 -23.5686 64.15 + 13 288.557 668 9 1 -46.4462 -24.2655 65.1501 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 3.67438 LIN +Particle: proton +Event: 14 +Number of tracker hits in this event: 22 + 14 100.288 1341 9 1 88.3453 86.6395 65.55 + 14 139.287 1332 9 0 88.3441 86.6389 64.15 + 14 107.337 1341 8 1 88.3223 86.6275 35.55 + 14 95.4756 1332 8 0 88.3224 86.6271 34.15 + 14 134.828 1341 7 1 88.3181 86.6202 5.55 + 14 116.941 1332 7 0 88.3164 86.6198 4.15 + 14 107.227 1341 6 1 88.2764 86.6037 -24.45 + 14 149.509 1332 6 0 88.2758 86.603 -25.85 + 14 95.1139 1341 5 1 88.2724 86.5833 -54.45 + 14 109.028 1332 5 0 88.2721 86.5818 -55.85 + 14 99.1907 1341 4 1 88.2643 86.5496 -84.45 + 14 121.512 1332 4 0 88.2622 86.5481 -85.85 + 14 105.114 1340 3 1 88.2178 86.5141 -114.45 + 14 155.914 1332 3 0 88.2181 86.5146 -115.85 + 14 93.0115 1340 2 1 88.2274 86.5237 -144.45 + 14 131.61 1332 2 0 88.2299 86.5245 -145.85 + 14 236.25 1341 1 1 88.2736 86.5417 -174.45 + 14 116.555 1332 1 0 88.2754 86.54 -175.85 + 14 148.012 1341 0 1 88.3125 86.5107 -204.45 + 14 109.486 1332 0 0 88.314 86.5102 -205.85 + 14 265.133 1331 3 0 88.2159 86.45 -115.895 + 14 70.9886 1330 3 0 88.2919 86.25 -115.928 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 2.82616 LIN Particle: proton Event: 15 -Number of tracker hits in this event: 27 - 15 290.245 352 10 1 -109.7 -18.6684 95.55 - 15 94.979 806 10 0 -109.699 -18.6679 94.15 - 15 186.957 352 9 1 -109.661 -18.6715 65.55 - 15 107.274 806 9 0 -109.659 -18.6721 64.15 - 15 283.298 352 8 1 -109.65 -18.6892 35.55 - 15 124.806 806 8 0 -109.648 -18.6898 34.15 - 15 159.69 352 7 1 -109.615 -18.7052 5.55 - 15 128.945 806 7 0 -109.611 -18.7067 4.15 - 15 103.092 353 6 1 -109.533 -18.7393 -24.45 - 15 139.406 806 6 0 -109.529 -18.7401 -25.85 - 15 106.023 353 5 1 -109.439 -18.769 -54.45 - 15 267.028 806 5 0 -109.432 -18.7708 -55.85 - 15 100.548 354 4 1 -109.277 -18.8129 -84.45 - 15 98.3394 806 4 0 -109.271 -18.816 -85.85 - 15 128.123 355 3 1 -109.139 -18.8756 -114.45 - 15 109.352 805 3 0 -109.134 -18.8777 -115.85 - 15 108.689 355 2 1 -109.015 -18.9244 -144.45 - 15 131.943 805 2 0 -109.01 -18.9262 -145.85 - 15 359.752 356 1 1 -108.909 -18.9581 -174.45 - 15 135.517 805 1 0 -108.906 -18.9594 -175.85 - 15 146.996 356 0 1 -108.829 -18.9875 -204.45 - 15 174.96 805 0 0 -108.827 -18.9909 -205.85 - 15 216.522 824 1 0 -87.5974 -15.108 -176.25 - 15 222.789 825 1 0 -87.2463 -15.05 -175.946 - 15 80.7811 811 7 0 -110.584 -17.8161 4.14986 - 15 68.1229 812 7 0 -110.632 -17.65 4.00193 - 15 194.258 813 7 0 -110.652 -17.4498 3.87835 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 4.93314 LIN -Particle: proton -Event: 16 -Number of tracker hits in this event: 43 - 16 98.826 1426 10 1 105.395 19.812 95.55 - 16 110.143 998 10 0 105.395 19.8117 94.15 - 16 94.932 1426 9 1 105.386 19.8013 65.55 - 16 207.131 998 9 0 105.386 19.8006 64.15 - 16 132.944 1426 8 1 105.383 19.7884 35.55 - 16 131.219 998 8 0 105.382 19.7868 34.15 - 16 191.96 1426 7 1 105.366 19.7557 5.55 - 16 116.689 998 7 0 105.366 19.7547 4.15 - 16 129.389 1426 6 1 105.371 19.7294 -24.45 - 16 362.528 998 6 0 105.371 19.7295 -25.85 - 16 109.96 1426 5 1 105.38 19.7343 -54.45 - 16 121.317 998 5 0 105.381 19.7319 -55.85 - 16 209.873 1426 4 1 105.381 19.6826 -84.45 - 16 102.269 998 4 0 105.379 19.6804 -85.85 - 16 336.438 1425 3 1 105.346 19.6337 -114.45 - 16 106.168 997 3 0 105.342 19.6292 -115.85 - 16 143.087 1425 2 1 105.239 19.5355 -144.45 - 16 131.185 997 2 0 105.235 19.5315 -145.85 - 16 101.317 1424 1 1 105.141 19.449 -174.45 - 16 97.0997 996 1 0 105.136 19.4449 -175.85 - 16 100.37 1424 0 1 105.03 19.3572 -204.45 - 16 144.712 996 0 0 105.026 19.3539 -205.85 - 16 118.726 995 4 0 105.866 19.1941 -85.85 - 16 12.9164 994 4 0 105.984 19.05 -86.1844 - 16 24.3568 966 4 0 108.539 13.3905 -86.25 - 16 202.13 967 4 0 108.501 13.4501 -86.1513 - 16 78.6112 968 4 0 108.365 13.65 -85.8926 - 16 214.599 1440 4 1 108.246 15.0831 -84.85 - 16 414.745 1439 4 1 108.15 15.6114 -84.675 - 16 148.234 1441 4 1 108.35 16.6416 -84.8055 - 16 201.87 1442 4 1 108.55 16.4558 -84.7697 - 16 671.915 1443 4 1 108.75 16.2363 -84.7252 - 16 55.332 1444 4 1 108.95 15.754 -84.8468 - 16 95.8756 1425 6 1 105.35 19.7349 -24.5075 - 16 31.5461 1424 6 1 105.15 19.8006 -24.7822 - 16 36.1693 1252 6 0 70.6755 70.5458 -26.2499 - 16 67.3164 1253 6 0 70.6426 70.6501 -26.153 - 16 49.8614 1254 6 0 70.5837 70.8502 -26.0575 - 16 52.9794 1255 6 0 70.556 71.05 -26.0537 - 16 58.6616 1256 6 0 70.55 71.25 -26.0517 - 16 121.427 1257 6 0 70.5653 71.45 -26.0198 - 16 241.625 1258 6 0 70.6039 71.6507 -25.9668 - 16 403.078 1259 6 0 70.6115 71.85 -25.8871 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 5.5025 LIN -Particle: proton -Event: 17 -Number of tracker hits in this event: 24 - 17 114.729 1046 11 1 29.2812 -8.71811 125.55 - 17 110.283 856 11 0 29.2805 -8.71778 124.15 - 17 114.158 1046 10 1 29.2725 -8.71562 95.55 - 17 168.429 856 10 0 29.2726 -8.71603 94.15 - 17 136.214 1046 9 1 29.2765 -8.72553 65.55 - 17 99.3308 856 9 0 29.2756 -8.7275 64.15 - 17 121.685 1046 8 1 29.2534 -8.76926 35.55 - 17 113.338 856 8 0 29.2529 -8.77043 34.15 - 17 102.311 1045 7 1 29.2435 -8.79576 5.55 - 17 123.229 856 7 0 29.2429 -8.79673 4.15 - 17 103.316 1045 6 1 29.228 -8.81442 -24.45 - 17 132.881 856 6 0 29.2264 -8.81602 -25.85 - 17 94.6744 1045 5 1 29.1967 -8.84452 -54.45 - 17 112.446 856 5 0 29.1952 -8.84584 -55.85 - 17 128.284 1045 4 1 29.1627 -8.8645 -84.45 - 17 108.288 855 4 0 29.1616 -8.86662 -85.85 - 17 141.945 1045 3 1 29.137 -8.90829 -114.45 - 17 104.95 855 3 0 29.1368 -8.91078 -115.85 - 17 101.382 1045 2 1 29.1339 -8.96766 -144.45 - 17 132.062 855 2 0 29.1341 -8.97133 -145.85 - 17 239.054 1045 1 1 29.1411 -9.04932 -174.45 - 17 95.4673 854 1 0 29.1417 -9.05325 -175.85 - 17 163.68 1045 0 1 29.1525 -9.13233 -204.45 - 17 101.44 854 0 0 29.1531 -9.13626 -205.85 +Number of tracker hits in this event: 18 + 15 123.489 236 8 1 -132.764 32.5104 35.55 + 15 123.18 1062 8 0 -132.765 32.5107 34.15 + 15 107.878 236 7 1 -132.768 32.519 5.55 + 15 113.568 1062 7 0 -132.767 32.5182 4.15 + 15 163.732 237 6 1 -132.741 32.5059 -24.45 + 15 110.693 1062 6 0 -132.74 32.5044 -25.85 + 15 114.167 237 5 1 -132.721 32.4734 -54.45 + 15 113.867 1062 5 0 -132.72 32.472 -55.85 + 15 100.352 237 4 1 -132.7 32.4544 -84.45 + 15 161.586 1062 4 0 -132.699 32.4519 -85.85 + 15 120.991 237 3 1 -132.679 32.4025 -114.45 + 15 121.155 1061 3 0 -132.678 32.3991 -115.85 + 15 257.139 237 2 1 -132.646 32.3282 -144.45 + 15 98.6906 1061 2 0 -132.647 32.3249 -145.85 + 15 105.41 237 1 1 -132.668 32.2453 -174.45 + 15 127.728 1060 1 0 -132.668 32.2429 -175.85 + 15 150.051 237 0 1 -132.661 32.2005 -204.45 + 15 99.2923 1060 0 0 -132.662 32.1974 -205.85 Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 5.283 LIN +Particle energy: 4.63796 LIN +Particle: proton +Event: 16 +Number of tracker hits in this event: 36 + 16 98.9407 915 11 1 3.11518 0.636525 125.55 + 16 114.226 902 11 0 3.11472 0.634908 124.15 + 16 147.548 915 10 1 3.09921 0.609195 95.55 + 16 117.723 902 10 0 3.09871 0.607043 94.15 + 16 134.538 915 9 1 3.08717 0.559525 65.55 + 16 108.354 902 9 0 3.0879 0.558733 64.15 + 16 134.522 915 8 1 3.10228 0.543457 35.55 + 16 265.69 902 8 0 3.10209 0.543047 34.15 + 16 216.589 915 7 1 3.09671 0.545249 5.55 + 16 154.681 902 7 0 3.09823 0.544691 4.15 + 16 96.3066 915 6 1 3.12886 0.539412 -24.45 + 16 94.9277 902 6 0 3.13134 0.542079 -25.85 + 16 136.924 915 5 1 3.1888 0.598791 -54.45 + 16 118.031 902 5 0 3.19341 0.602594 -55.85 + 16 110.907 916 4 1 3.28102 0.678254 -84.45 + 16 116.686 903 4 0 3.2856 0.682174 -85.85 + 16 330.92 916 3 1 3.37861 0.758242 -114.45 + 16 121.493 903 3 0 3.38239 0.762518 -115.85 + 16 104.515 917 2 1 3.46469 0.847701 -144.45 + 16 110.324 904 2 0 3.4668 0.853026 -145.85 + 16 154.872 917 1 1 3.50043 0.95933 -174.45 + 16 104.106 904 1 0 3.50325 0.963984 -175.85 + 16 144.865 917 0 1 3.55737 1.06043 -204.45 + 16 105.797 905 0 0 3.55784 1.06726 -205.85 + 16 4.91111 53 1 0 -151.23 -169.35 -176.136 + 16 1.92208 1512 1 0 -27.0406 122.744 -176.25 + 16 67.6371 1513 1 0 -27.0423 122.75 -176.249 + 16 0.541272 1514 1 0 -27.0881 122.95 -176.25 + 16 47.524 910 3 0 2.60457 2.1855 -115.85 + 16 111.573 914 7 1 3.05 0.0512101 5.48946 + 16 134.093 913 7 1 2.85 -0.365914 5.33453 + 16 128.694 912 7 1 2.64965 -0.726201 5.214 + 16 39.0053 911 7 1 2.45 -0.922475 5.2025 + 16 12.6252 887 7 0 2.06314 -2.61169 4.15 + 16 100.339 886 7 0 2.05217 -2.65 4.12466 + 16 170.792 885 7 0 1.93202 -2.85037 4.12018 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 7.6547 LIN +Particle: proton +Event: 17 +Number of tracker hits in this event: 18 + 17 144.104 1114 8 1 42.9536 138.566 35.55 + 17 103.625 1592 8 0 42.9546 138.567 34.15 + 17 129.811 1114 7 1 42.9745 138.574 5.55 + 17 188.497 1592 7 0 42.9742 138.574 4.15 + 17 451.662 1114 6 1 42.9685 138.557 -24.45 + 17 142.606 1592 6 0 42.9687 138.554 -25.85 + 17 116.362 1114 5 1 42.9746 138.508 -54.45 + 17 124.696 1591 5 0 42.9745 138.506 -55.85 + 17 244.03 1114 4 1 42.9739 138.468 -84.45 + 17 342.117 1591 4 0 42.9736 138.466 -85.85 + 17 116.625 1114 3 1 42.9683 138.421 -114.45 + 17 114.03 1591 3 0 42.9685 138.419 -115.85 + 17 108.109 1114 2 1 42.9716 138.389 -144.45 + 17 120.368 1591 2 0 42.9723 138.386 -145.85 + 17 97.5587 1114 1 1 42.9858 138.316 -174.45 + 17 130.752 1590 1 0 42.9866 138.313 -175.85 + 17 103.968 1114 0 1 43.0031 138.237 -204.45 + 17 119.882 1590 0 0 43.0037 138.233 -205.85 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 9.70238 LIN Particle: proton Event: 18 Number of tracker hits in this event: 24 - 18 104.241 200 8 0 40.8747 -140.108 34.15 - 18 121.941 1104 7 1 40.8684 -140.107 5.55 - 18 199.058 200 7 0 40.8673 -140.106 4.15 - 18 163.951 1104 6 1 40.8526 -140.099 -24.45 - 18 118.195 200 6 0 40.852 -140.1 -25.85 - 18 138.589 1103 5 1 40.8385 -140.108 -54.45 - 18 130.057 200 5 0 40.8374 -140.109 -55.85 - 18 291.609 1103 4 1 40.8121 -140.138 -84.45 - 18 411.752 200 4 0 40.8116 -140.139 -85.85 - 18 237.614 1103 3 1 40.7975 -140.157 -114.45 - 18 89.2664 199 3 0 40.7959 -140.157 -115.85 - 18 121.387 1103 2 1 40.7598 -140.164 -144.45 - 18 121.726 199 2 0 40.7581 -140.165 -145.85 - 18 118.854 1103 1 1 40.7164 -140.167 -174.45 - 18 127.172 199 1 0 40.7149 -140.167 -175.85 - 18 143.519 1103 0 1 40.6853 -140.162 -204.45 - 18 196.004 199 0 0 40.6846 -140.162 -205.85 - 18 109.831 1102 0 1 40.65 -140.251 -204.518 - 18 63.0115 198 0 0 40.1104 -140.35 -206.029 - 18 118.437 199 4 0 41.3092 -140.193 -85.85 - 18 278.462 1102 4 1 40.6499 -140.19 -84.7884 - 18 13.1443 199 7 0 40.6981 -140.15 3.76446 - 18 75.6165 202 7 0 41.0783 -139.632 4.14978 - 18 243.474 203 7 0 40.9351 -139.55 4.10198 -Number of digits in this event: 17 + 18 108.12 895 11 1 -0.883936 -34.4057 125.55 + 18 175.722 728 11 0 -0.884359 -34.4062 124.15 + 18 89.4139 895 10 1 -0.888763 -34.4143 95.55 + 18 100.089 728 10 0 -0.888753 -34.4149 94.15 + 18 154.718 895 9 1 -0.890391 -34.4293 65.55 + 18 101.905 728 9 0 -0.890434 -34.4311 64.15 + 18 161.262 895 8 1 -0.893959 -34.47 35.55 + 18 196.171 727 8 0 -0.893886 -34.4721 34.15 + 18 225.59 895 7 1 -0.895629 -34.5169 5.55 + 18 105.389 727 7 0 -0.8958 -34.5199 4.15 + 18 162.688 895 6 1 -0.899628 -34.5821 -24.45 + 18 108.9 727 6 0 -0.899913 -34.5853 -25.85 + 18 122.555 895 5 1 -0.908003 -34.6524 -54.45 + 18 118.237 726 5 0 -0.908863 -34.6559 -55.85 + 18 122.064 895 4 1 -0.92731 -34.7247 -84.45 + 18 100.858 726 4 0 -0.927643 -34.7276 -85.85 + 18 111.268 895 3 1 -0.937296 -34.7866 -114.45 + 18 97.5349 726 3 0 -0.937228 -34.7897 -115.85 + 18 172.75 895 2 1 -0.938411 -34.8535 -144.45 + 18 102.641 725 2 0 -0.938569 -34.8562 -145.85 + 18 92.4965 895 1 1 -0.937657 -34.9166 -174.45 + 18 100.472 725 1 0 -0.938134 -34.9192 -175.85 + 18 128.186 895 0 1 -0.948848 -34.9728 -204.45 + 18 133.937 725 0 0 -0.949221 -34.9758 -205.85 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 3.01897 LIN +Particle energy: 4.88456 LIN Particle: proton Event: 19 -Number of tracker hits in this event: 22 - 19 126.12 1452 7 1 110.701 96.3691 5.55 - 19 138.19 1381 7 0 110.7 96.3715 4.15 - 19 118.835 1452 6 1 110.672 96.4201 -24.45 - 19 206.611 1381 6 0 110.673 96.4198 -25.85 - 19 114.552 1452 5 1 110.687 96.411 -54.45 - 19 103.41 1381 5 0 110.69 96.4088 -55.85 - 19 100.526 1452 4 1 110.749 96.3602 -84.45 - 19 2.89478 1453 4 1 110.75 96.3592 -84.8282 - 19 207.872 1381 4 0 110.753 96.3568 -85.85 - 19 110.521 1453 3 1 110.834 96.2912 -114.45 - 19 103.334 1380 3 0 110.837 96.2875 -115.85 - 19 121.939 1453 2 1 110.903 96.2104 -144.45 - 19 111.195 1380 2 0 110.904 96.2055 -145.85 - 19 114.153 1453 1 1 110.928 96.1046 -174.45 - 19 110.108 1379 1 0 110.929 96.1006 -175.85 - 19 245.906 1454 0 1 110.961 96.0261 -204.45 - 19 115.399 1379 0 0 110.959 96.0212 -205.85 - 19 56.2039 1386 0 0 165.248 97.4685 -206.25 - 19 108.976 1380 6 0 111.542 96.3493 -26.072 - 19 59.8348 1379 6 0 111.67 96.1493 -26.2193 - 19 173.58 706 6 0 54.4402 -38.7516 -26.2497 - 19 157.61 707 6 0 54.347 -38.65 -26.0778 -Number of digits in this event: 11 +Number of tracker hits in this event: 112 + 19 138.714 353 7 1 -109.543 -100.498 5.55 + 19 114.245 398 7 0 -109.542 -100.498 4.15 + 19 98.3518 353 6 1 -109.516 -100.491 -24.45 + 19 99.261 398 6 0 -109.513 -100.492 -25.85 + 19 108.783 353 5 1 -109.469 -100.498 -54.45 + 19 103.058 398 5 0 -109.467 -100.499 -55.85 + 19 127.986 353 4 1 -109.442 -100.514 -84.45 + 19 131.604 398 4 0 -109.439 -100.514 -85.85 + 19 231.448 353 3 1 -109.389 -100.519 -114.45 + 19 155.808 398 3 0 -109.387 -100.518 -115.85 + 19 126.91 354 2 1 -109.333 -100.51 -144.45 + 19 143.993 398 2 0 -109.331 -100.51 -145.85 + 19 146.345 354 1 1 -109.278 -100.506 -174.45 + 19 111.867 398 1 0 -109.275 -100.505 -175.85 + 19 98.3941 354 0 1 -109.204 -100.502 -204.45 + 19 228.098 398 0 0 -109.199 -100.502 -205.85 + 19 67.521 1324 3 0 -121.168 84.9857 -116.25 + 19 166.811 1325 3 0 -121.312 85.05 -116.07 + 19 66.6298 291 3 1 -121.811 85.275 -114.85 + 19 12.5776 660 6 0 -17.2288 -47.9116 -26.0074 + 19 100.557 631 2 0 -46.9378 -53.8325 -146.25 + 19 223.344 1131 3 1 46.3719 -141.38 -114.45 + 19 273.132 375 0 0 -107.277 -104.969 -206.25 + 19 20.0525 350 0 1 -110.069 -105.599 -204.85 + 19 92.1343 349 0 1 -110.15 -105.617 -204.811 + 19 58.0697 348 0 1 -110.35 -105.668 -204.705 + 19 56.3184 347 0 1 -110.55 -105.734 -204.609 + 19 33.4767 346 0 1 -110.75 -105.793 -204.502 + 19 298.018 344 0 1 -111.25 -105.82 -204.45 + 19 139.436 343 0 1 -111.35 -105.721 -204.639 + 19 106.235 376 0 0 -111.878 -104.931 -205.85 + 19 8.2208 377 0 0 -111.982 -104.75 -206.216 + 19 90.7503 404 0 0 -123.32 -99.1585 -206.25 + 19 56.8668 405 0 0 -123.408 -99.15 -205.97 + 19 46.7449 278 0 1 -124.457 -98.8189 -204.85 + 19 66.2268 277 0 1 -124.55 -98.7781 -204.779 + 19 63.8116 276 0 1 -124.75 -98.6597 -204.618 + 19 1.77895 275 0 1 -124.95 -98.5531 -204.455 + 19 124.328 325 0 0 5.25274 -115.072 -206.25 + 19 339.476 324 0 0 5.57095 -115.15 -206.156 + 19 16.5722 952 0 1 10.5857 -115.889 -204.85 + 19 55.3624 953 0 1 10.65 -115.898 -204.833 + 19 52.5642 954 0 1 10.85 -115.927 -204.782 + 19 51.9591 955 0 1 11.05 -115.953 -204.727 + 19 59.3547 956 0 1 11.25 -115.977 -204.672 + 19 98.2622 957 0 1 11.4502 -115.996 -204.62 + 19 52.3469 958 0 1 11.65 -116.01 -204.558 + 19 32.4557 959 0 1 11.8506 -116.026 -204.49 + 19 26.2729 964 0 1 12.9674 -115.873 -204.45 + 19 64.892 965 0 1 13.05 -115.822 -204.47 + 19 49.5149 966 0 1 13.251 -115.698 -204.517 + 19 84.9169 967 0 1 13.45 -115.573 -204.554 + 19 55.6066 968 0 1 13.65 -115.453 -204.591 + 19 107.324 969 0 1 13.8501 -115.322 -204.628 + 19 76.9743 970 0 1 14.05 -115.179 -204.67 + 19 75.0199 971 0 1 14.2501 -115.053 -204.683 + 19 63.0429 972 0 1 14.45 -114.945 -204.672 + 19 63.5914 973 0 1 14.6502 -114.837 -204.661 + 19 135.658 974 0 1 14.8502 -114.735 -204.657 + 19 49.941 975 0 1 15.05 -114.64 -204.681 + 19 91.6548 976 0 1 15.2506 -114.547 -204.706 + 19 59.9528 977 0 1 15.4502 -114.459 -204.736 + 19 132.085 978 0 1 15.65 -114.371 -204.764 + 19 56.847 979 0 1 15.85 -114.273 -204.793 + 19 10.051 980 0 1 16.05 -114.162 -204.838 + 19 60.6345 342 0 0 20.196 -111.688 -205.85 + 19 115.794 343 0 0 20.4215 -111.55 -205.923 + 19 207.311 344 0 0 20.7033 -111.35 -206.048 + 19 33.7665 345 0 0 20.9994 -111.15 -206.207 + 19 27.7935 521 0 0 72.8081 -75.7036 -206.25 + 19 157.88 522 0 0 72.8892 -75.65 -206.183 + 19 27.9357 523 0 0 73.1753 -75.45 -205.926 + 19 16.0446 1269 0 1 74.0099 -74.5405 -204.85 + 19 86.4803 1270 0 1 74.0503 -74.4961 -204.799 + 19 87.961 1271 0 1 74.25 -74.288 -204.608 + 19 96.7539 1273 0 1 74.6791 -73.9372 -204.45 + 19 147.027 1272 0 1 74.65 -73.6959 -204.651 + 19 4.30446 541 0 0 73.8977 -71.6695 -205.85 + 19 69.366 542 0 0 73.8907 -71.65 -205.861 + 19 178.403 284 1 0 33.6744 -123.158 -176.25 + 19 110.887 1072 1 1 34.4739 -123.354 -174.85 + 19 261.861 409 0 0 -28.2217 -98.2284 -206.25 + 19 24.8984 776 0 1 -24.702 -99.7273 -204.85 + 19 57.9994 777 0 1 -24.65 -99.7558 -204.831 + 19 90.9691 778 0 1 -24.45 -99.8721 -204.778 + 19 91.0283 779 0 1 -24.2497 -99.9819 -204.738 + 19 137.832 780 0 1 -24.0498 -100.113 -204.689 + 19 175.892 781 0 1 -23.85 -100.211 -204.653 + 19 93.0065 782 0 1 -23.65 -100.384 -204.711 + 19 75.4714 783 0 1 -23.45 -100.511 -204.819 + 19 93.9737 784 0 1 -23.2499 -100.583 -204.804 + 19 113.645 785 0 1 -23.05 -100.624 -204.759 + 19 284.499 786 0 1 -22.8495 -100.707 -204.741 + 19 133.453 396 0 0 -23.0913 -100.889 -205.85 + 19 32.8895 244 1 0 99.0317 -131.15 -176.005 + 19 23.6592 1402 1 1 100.681 -130.874 -174.85 + 19 95.3692 1403 1 1 100.75 -130.874 -174.792 + 19 101.625 1404 1 1 100.95 -130.9 -174.674 + 19 91.3049 1405 1 1 101.15 -131.028 -174.557 + 19 121.874 1406 1 1 101.35 -131.128 -174.58 + 19 64.4295 240 1 0 101.561 -132.013 -175.85 + 19 90.9213 239 1 0 101.656 -132.15 -175.943 + 19 12.1433 238 1 0 101.814 -132.35 -175.874 + 19 45.6431 1407 1 1 101.744 -133.716 -174.85 + 19 275.355 1408 1 1 101.75 -133.731 -174.72 + 19 79.8498 1409 1 1 101.95 -133.869 -174.647 + 19 9.50709 974 2 1 14.8605 -114.112 -144.45 + 19 146.17 973 2 1 14.8499 -114.124 -144.465 + 19 8.90229 972 2 1 14.65 -114.45 -144.818 + 19 66.1652 322 2 0 14.1996 -115.587 -145.85 + 19 72.4008 321 2 0 14.1289 -115.75 -146.047 + 19 14.691 320 2 0 13.9667 -115.95 -146.123 +Number of digits in this event: 33 Using G4ParticleGun... -Particle energy: 6.96477 LIN +Particle energy: 8.47359 LIN Particle: proton Event: 20 -Number of tracker hits in this event: 164 - 20 124.331 506 10 1 -78.6838 -37.4526 95.55 - 20 136.92 712 10 0 -78.6843 -37.452 94.15 - 20 112.887 506 9 1 -78.6957 -37.4433 65.55 - 20 105.58 713 9 0 -78.696 -37.4434 64.15 - 20 127.015 506 8 1 -78.7014 -37.4464 35.55 - 20 87.3848 713 8 0 -78.7018 -37.4463 34.15 - 20 98.3761 506 7 1 -78.7088 -37.4439 5.55 - 20 115.106 713 7 0 -78.7092 -37.4452 4.15 - 20 112.295 506 6 1 -78.7223 -37.4691 -24.45 - 20 104.134 712 6 0 -78.7226 -37.4703 -25.85 - 20 87.5651 506 5 1 -78.733 -37.4985 -54.45 - 20 185.291 712 5 0 -78.7335 -37.4998 -55.85 - 20 1.38517 1066 8 1 33.25 85.0082 35.2245 - 20 199.517 1067 8 1 33.45 85.2547 35.4726 - 20 7.20481 300 7 0 61.77 -120.15 4.03201 - 20 72.6579 754 8 0 112.131 -29.1734 33.9523 - 20 896.64 767 5 0 -72.3688 -26.6222 -56.25 - 20 918.33 540 5 1 -72.049 -26.0567 -54.85 - 20 551.286 831 6 0 -65.5142 -13.7387 -26.25 - 20 492.936 832 6 0 -65.4672 -13.65 -26.0443 - 20 999.25 574 6 1 -65.1793 -13.125 -24.85 - 20 1157.93 909 7 0 -58.1171 1.87203 3.75 - 20 206.273 910 7 0 -58.0335 2.05 4.08822 - 20 1424.73 611 7 1 -57.7802 2.59155 5.15 - 20 418.954 974 8 0 -51.6601 14.9977 33.75 - 20 1133.06 975 8 0 -51.6343 15.05 33.871 - 20 1562.79 643 8 1 -51.3441 15.5909 35.15 - 20 2114.88 1026 9 0 -42.0427 25.2561 63.75 - 20 2105.04 692 9 1 -41.58 25.7426 65.15 - 20 86.236 693 9 1 -41.45 25.9044 65.5363 - 20 1426.71 1154 10 0 0.364881 50.9396 93.75 - 20 1576.25 833 5 0 -31.2386 -13.4477 -56.25 - 20 1129.05 834 5 0 -30.8485 -13.25 -56.0208 - 20 106.524 755 5 1 -28.8728 -12.2526 -54.85 - 20 905.031 756 5 1 -28.85 -12.2411 -54.8365 - 20 778.602 757 5 1 -28.65 -12.1399 -54.7181 - 20 715.182 758 5 1 -28.45 -12.0372 -54.6013 - 20 266.842 759 5 1 -28.25 -11.9351 -54.4846 - 20 1505.79 975 6 0 19.4482 15.0785 -26.25 - 20 1758.68 976 6 0 19.7509 15.25 -26.0708 - 20 128.345 977 6 0 20.0985 15.45 -25.8664 - 20 227.834 1008 6 1 21.8157 16.4419 -24.85 - 20 1014.48 1009 6 1 21.85 16.4617 -24.8297 - 20 1130.11 1010 6 1 22.05 16.578 -24.7109 - 20 1061.82 1011 6 1 22.25 16.6929 -24.5941 - 20 245.649 1012 6 1 22.45 16.8079 -24.4774 - 20 768.873 506 4 1 -78.6573 -37.6465 -84.45 - 20 4123.38 507 4 1 -78.65 -37.662 -84.4852 - 20 7036.31 708 4 0 -78.3498 -38.2632 -85.85 - 20 656.249 714 4 0 -78.1754 -37.175 -85.85 - 20 141.676 558 3 1 -68.2889 -31.1727 -114.45 - 20 296.992 559 3 1 -68.25 -31.1433 -114.572 - 20 459.433 746 3 0 -67.8452 -30.8394 -115.85 - 20 418.119 605 2 1 -58.9711 -23.9006 -144.45 - 20 56.5873 606 2 1 -58.85 -23.8125 -144.82 - 20 420.731 782 2 0 -58.5123 -23.5665 -145.85 - 20 87.4245 654 1 1 -49.0778 -16.7274 -174.45 - 20 402.121 655 1 1 -49.05 -16.7036 -174.542 - 20 443.275 818 1 0 -48.6604 -16.3647 -175.85 - 20 625.124 698 0 1 -40.3954 -9.02614 -204.45 - 20 94.2033 856 0 0 -39.9043 -8.66495 -205.85 - 20 493.943 857 0 0 -39.884 -8.65 -205.908 - 20 64.9625 501 4 1 -79.7002 -37.2173 -84.4501 - 20 63.9232 500 4 1 -79.85 -37.136 -84.4946 - 20 86.448 499 4 1 -80.05 -37.0284 -84.5544 - 20 220.002 498 4 1 -80.2501 -36.929 -84.6192 - 20 73.8273 497 4 1 -80.45 -36.8364 -84.6906 - 20 91.0119 496 4 1 -80.6502 -36.7444 -84.7668 - 20 0.693304 495 4 1 -80.85 -36.6463 -84.8482 - 20 71.7674 723 4 0 -83.4094 -35.366 -85.85 - 20 129.748 724 4 0 -83.6476 -35.25 -85.9388 - 20 139.936 725 4 0 -84.0508 -35.05 -86.0834 - 20 15.3727 726 4 0 -84.472 -34.8498 -86.233 - 20 133.111 106 3 1 -158.806 -1.0855 -114.45 - 20 182.022 105 3 1 -158.95 -0.789809 -114.621 - 20 8.64016 104 3 1 -159.15 -0.359456 -114.84 - 20 53.8619 908 3 0 -160.193 1.67308 -115.85 - 20 80.2646 909 3 0 -160.288 1.85 -115.938 - 20 65.0032 910 3 0 -160.389 2.05 -116.035 - 20 82.5312 911 3 0 -160.487 2.25069 -116.126 - 20 21.9996 912 3 0 -160.583 2.45 -116.218 - 20 4924.26 268 3 0 133.656 -126.472 -116.243 - 20 667.657 269 3 0 133.684 -126.35 -116.111 - 20 171.266 270 3 0 133.732 -126.15 -115.896 - 20 1649.93 1569 3 1 133.97 -125.166 -114.85 - 20 712.501 389 4 0 133.59 -102.258 -86.25 - 20 1361.79 390 4 0 133.587 -102.15 -86.115 - 20 90.4711 391 4 0 133.581 -101.95 -85.8655 - 20 1481.73 1567 4 1 133.557 -101.175 -84.85 - 20 408.356 1566 4 1 133.55 -100.934 -84.5345 - 20 255.353 532 5 0 130.925 -73.4771 -56.25 - 20 1760.46 533 5 0 130.922 -73.45 -56.2221 - 20 1438.54 534 5 0 130.91 -73.25 -56.006 - 20 4770.69 1553 5 1 130.809 -72.1577 -54.85 - 20 129.072 508 4 1 -78.45 -37.5484 -84.4894 - 20 64.8992 509 4 1 -78.25 -37.5761 -84.6961 - 20 205.068 711 4 0 -77.136 -37.7365 -85.85 - 20 95.8821 653 3 1 -49.3424 -41.7794 -114.45 - 20 108.184 654 3 1 -49.25 -41.7942 -114.549 - 20 36.4473 655 3 1 -49.05 -41.8258 -114.764 - 20 232.268 690 3 0 -48.0396 -41.9871 -115.85 - 20 59.3237 792 2 1 -21.5634 -46.2818 -144.45 - 20 155.927 793 2 1 -21.45 -46.2941 -144.581 - 20 15.9102 794 2 1 -21.25 -46.3169 -144.815 - 20 112.493 668 2 0 -20.3648 -46.4224 -145.85 - 20 51.7046 667 2 0 -20.1326 -46.45 -146.122 - 20 114.666 917 1 1 3.46112 -49.4328 -174.45 - 20 223.45 918 1 1 3.65 -49.4471 -174.673 - 20 300.126 652 1 0 4.65143 -49.5102 -175.85 - 20 42.8014 1042 0 1 28.5572 -50.9075 -204.45 - 20 120.191 1043 0 1 28.65 -50.907 -204.554 - 20 66.6995 1044 0 1 28.85 -50.9064 -204.78 - 20 225.194 645 0 0 29.8197 -50.8965 -205.85 - 20 90.037 653 1 0 3.49604 -49.45 -176.116 - 20 17.5732 715 4 0 -78.7769 -37.05 -86.172 - 20 249.79 504 3 1 -79.1796 -30.2742 -114.45 - 20 100.852 750 3 0 -79.2002 -29.9406 -115.85 - 20 3.36483 751 3 0 -79.2058 -29.85 -116.23 - 20 108.022 502 2 1 -79.6214 -23.122 -144.45 - 20 124.749 786 2 0 -79.6409 -22.7884 -145.85 - 20 103.164 500 1 1 -80.035 -15.9736 -174.45 - 20 97.9725 822 1 0 -80.0539 -15.6411 -175.85 - 20 169.826 498 0 1 -80.4412 -8.84403 -204.45 - 20 51.6362 858 0 0 -80.4657 -8.45 -206.102 - 20 2.23848 978 7 1 15.65 11.9762 5.2436 - 20 183.565 712 4 0 -78.2084 -37.5354 -85.85 - 20 111.301 555 3 1 -68.9777 -37.5109 -114.45 - 20 5.98145 556 3 1 -68.85 -37.5173 -114.825 - 20 139.091 712 3 0 -68.4969 -37.537 -115.85 - 20 166.668 607 2 1 -58.6398 -38.1504 -144.45 - 20 144.195 709 2 0 -58.1687 -38.1966 -145.85 - 20 55.9878 656 1 1 -48.6851 -39.1266 -174.45 - 20 93.2312 657 1 1 -48.65 -39.1315 -174.554 - 20 152.297 704 1 0 -48.2094 -39.1947 -175.85 - 20 6.46897 707 0 1 -38.4607 -40.4916 -204.45 - 20 124.816 708 0 1 -38.45 -40.4923 -204.481 - 20 121.255 697 0 0 -37.9719 -40.5254 -205.85 - 20 19.0115 707 4 0 -78.7692 -38.45 -86.1717 - 20 55.5728 505 3 1 -79.0475 -51.4419 -114.45 - 20 160.126 639 3 0 -79.08 -52.0829 -115.85 - 20 10.3838 638 3 0 -79.0884 -52.25 -116.215 - 20 108.568 501 2 1 -79.7543 -65.2537 -144.45 - 20 117.919 570 2 0 -79.812 -65.911 -145.85 - 20 36.0689 569 2 0 -79.8241 -66.05 -146.145 - 20 155.567 495 1 1 -81.0237 -79.38 -174.45 - 20 0.479079 500 1 0 -81.085 -80.0474 -175.85 - 20 118.787 499 1 0 -81.0852 -80.05 -175.855 - 20 242.534 488 0 1 -82.3524 -93.6446 -204.45 - 20 17.6176 429 0 0 -82.4224 -94.3165 -205.85 - 20 113.883 428 0 0 -82.4259 -94.35 -205.92 - 20 99.7609 713 4 0 -78.6269 -37.45 -85.9221 - 20 119.602 517 3 1 -76.6423 -36.1225 -114.45 - 20 75.1399 719 3 0 -76.5456 -36.0621 -115.85 - 20 29.4099 720 3 0 -76.5263 -36.05 -116.129 - 20 207.801 527 2 1 -74.5722 -34.8233 -144.45 - 20 125.508 726 2 0 -74.4744 -34.7603 -145.85 - 20 92.0767 537 1 1 -72.4641 -33.4517 -174.45 - 20 45.1898 538 1 1 -72.45 -33.4432 -174.648 - 20 125.21 733 1 0 -72.3644 -33.3909 -175.85 - 20 231.644 548 0 1 -70.3406 -32.1385 -204.45 - 20 121.191 739 0 0 -70.2426 -32.075 -205.85 - 20 120.891 526 2 1 -74.65 -34.9584 -144.541 - 20 244.763 702 10 0 -99.1378 -39.6341 93.7501 - 20 108.156 701 10 0 -99.1803 -39.65 94.0188 -Number of digits in this event: 95 +Number of tracker hits in this event: 30 + 20 127.585 1063 10 1 32.8361 -93.4522 95.55 + 20 115.442 433 10 0 32.8364 -93.452 94.15 + 20 148.043 1063 9 1 32.8437 -93.4452 65.55 + 20 443.005 433 9 0 32.8437 -93.4448 64.15 + 20 169.89 1063 8 1 32.8478 -93.4339 35.55 + 20 171.8 433 8 0 32.8483 -93.4342 34.15 + 20 120.543 1064 7 1 32.8595 -93.4439 5.55 + 20 276.937 433 7 0 32.8606 -93.4446 4.15 + 20 126.752 1064 6 1 32.8831 -93.4603 -24.45 + 20 109.722 433 6 0 32.8845 -93.461 -25.85 + 20 100.435 1064 5 1 32.913 -93.4758 -54.45 + 20 225.479 433 5 0 32.9144 -93.4765 -55.85 + 20 113.807 1064 4 1 32.9409 -93.4894 -84.45 + 20 118.853 433 4 0 32.9429 -93.4901 -85.85 + 20 165.697 1064 3 1 32.9849 -93.5027 -114.45 + 20 107.164 433 3 0 32.9867 -93.5027 -115.85 + 20 121.546 1064 2 1 33.0239 -93.5007 -144.45 + 20 84.5163 433 2 0 33.0251 -93.4999 -145.85 + 20 155.345 1064 1 1 33.046 -93.4824 -174.45 + 20 117.356 433 1 0 33.0476 -93.4824 -175.85 + 20 307.015 1065 0 1 33.078 -93.4841 -204.45 + 20 116.991 433 0 0 33.0799 -93.4846 -205.85 + 20 109.412 1064 0 1 33.0499 -93.4763 -204.461 + 20 82.8939 1065 3 1 33.05 -93.437 -114.598 + 20 80.4177 1066 3 1 33.25 -93.3592 -114.732 + 20 238.546 1067 3 1 33.45 -93.3185 -114.68 + 20 79.2669 431 3 0 35.0577 -93.7561 -115.85 + 20 99.3237 1074 3 1 34.9069 -93.475 -114.85 + 20 47.4956 1073 3 1 34.85 -93.4549 -114.801 + 20 116.015 432 9 0 32.8633 -93.5501 63.886 +Number of digits in this event: 17 Using G4ParticleGun... -Particle energy: 1.89073 LIN +Particle energy: 5.0589 LIN Particle: proton Event: 21 -Number of tracker hits in this event: 23 - 21 132.278 523 10 1 -75.3295 -63.6144 95.55 - 21 99.2406 582 10 0 -75.3297 -63.6141 94.15 - 21 96.5345 523 9 1 -75.3372 -63.613 65.55 - 21 115.156 582 9 0 -75.3307 -63.6096 64.15 - 21 186.19 524 8 1 -75.1985 -63.5306 35.55 - 21 209.625 582 8 0 -75.1938 -63.5294 34.15 - 21 211.379 524 7 1 -75.0934 -63.4993 5.55 - 21 108.886 582 7 0 -75.0878 -63.5003 4.15 - 21 140.383 525 6 1 -74.9726 -63.532 -24.45 - 21 177.82 582 6 0 -74.963 -63.5326 -25.85 - 21 308.439 526 5 1 -74.7712 -63.5351 -54.45 - 21 117.007 582 5 0 -74.76 -63.5323 -55.85 - 21 104.256 527 4 1 -74.5191 -63.4805 -84.45 - 21 122.948 582 4 0 -74.5046 -63.477 -85.85 - 21 109.783 529 3 1 -74.1894 -63.4029 -114.45 - 21 107.584 583 3 0 -74.1744 -63.4034 -115.85 - 21 127.366 530 2 1 -73.8631 -63.4138 -144.45 - 21 148.722 583 2 0 -73.8488 -63.4143 -145.85 - 21 119.563 532 1 1 -73.5648 -63.4271 -174.45 - 21 121.725 583 1 0 -73.549 -63.4296 -175.85 - 21 145.239 534 0 1 -73.2358 -63.4716 -204.45 - 21 124.813 582 0 0 -73.2209 -63.4766 -205.85 - 21 124.087 581 6 0 -74.976 -63.65 -25.964 -Number of digits in this event: 15 +Number of tracker hits in this event: 28 + 21 108.619 462 10 1 -87.6208 28.8854 95.55 + 21 370.553 1044 10 0 -87.6203 28.8863 94.15 + 21 101.632 462 9 1 -87.6081 28.9062 65.55 + 21 106.647 1044 9 0 -87.6078 28.9071 64.15 + 21 123.596 462 8 1 -87.6062 28.929 35.55 + 21 131.55 1044 8 0 -87.6055 28.9297 34.15 + 21 158.656 462 7 1 -87.5964 28.9418 5.55 + 21 162.048 1044 7 0 -87.5958 28.9421 4.15 + 21 107.391 462 6 1 -87.5809 28.9558 -24.45 + 21 114.189 1044 6 0 -87.58 28.9556 -25.85 + 21 114.783 462 5 1 -87.5611 28.9498 -54.45 + 21 106.123 1044 5 0 -87.5611 28.9504 -55.85 + 21 175.154 462 4 1 -87.5626 28.959 -84.45 + 21 150.048 1044 4 0 -87.5615 28.9584 -85.85 + 21 106.513 462 3 1 -87.5366 28.9447 -114.45 + 21 94.5098 1044 3 0 -87.5353 28.9449 -115.85 + 21 97.2384 462 2 1 -87.513 28.9527 -144.45 + 21 136.286 1044 2 0 -87.5099 28.9516 -145.85 + 21 136.226 463 1 1 -87.4411 28.931 -174.45 + 21 163.887 1044 1 0 -87.4371 28.9301 -175.85 + 21 98.891 463 0 1 -87.3547 28.9095 -204.45 + 21 211.99 1044 0 0 -87.3515 28.9094 -205.85 + 21 54.3803 1445 0 1 109.336 83.9289 -204.702 + 21 100.295 461 10 1 -87.6501 28.9109 95.4793 + 21 53.9113 460 10 1 -87.85 29.1003 95.2874 + 21 29.7232 1181 10 0 -39.6456 56.4233 93.7502 + 21 249.285 1182 10 0 -39.6205 56.45 93.811 + 21 180.042 708 10 1 -38.3598 55.7126 95.15 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 7.46534 LIN +Particle energy: 4.3331 LIN Particle: proton Event: 22 -Number of tracker hits in this event: 23 - 22 175.815 1450 9 1 110.226 -56.7546 65.55 - 22 113.542 616 9 0 110.226 -56.7542 64.15 - 22 116.077 1450 8 1 110.219 -56.7478 35.55 - 22 120.332 616 8 0 110.218 -56.7476 34.15 - 22 120.195 1450 7 1 110.188 -56.7446 5.55 - 22 94.2893 616 7 0 110.186 -56.7464 4.15 - 22 197.573 1449 6 1 110.145 -56.7881 -24.45 - 22 94.1421 616 6 0 110.143 -56.7907 -25.85 - 22 191.764 1449 5 1 110.103 -56.848 -54.45 - 22 137.634 615 5 0 110.101 -56.8501 -55.85 - 22 144.062 1449 4 1 110.063 -56.8949 -84.45 - 22 121.335 615 4 0 110.061 -56.8967 -85.85 - 22 134.429 1449 3 1 110.021 -56.936 -114.45 - 22 99.4302 615 3 0 110.018 -56.9388 -115.85 - 22 105.437 1449 2 1 109.975 -56.9979 -144.45 - 22 89.6448 615 2 0 109.972 -57.0015 -145.85 - 22 140.979 1448 1 1 109.908 -57.0813 -174.45 - 22 246.368 614 1 0 109.905 -57.0858 -175.85 - 22 118.881 1448 0 1 109.838 -57.1761 -204.45 - 22 229.511 614 0 0 109.835 -57.182 -205.85 - 22 26.4791 605 1 0 109.908 -58.9803 -175.85 - 22 49.2754 1449 1 1 110.056 -58.5791 -174.85 - 22 130.617 615 1 0 109.851 -57.05 -175.994 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 6.94005 LIN -Particle: proton -Event: 23 -Number of tracker hits in this event: 18 - 23 97.6241 617 8 1 -56.5425 130.626 35.55 - 23 139.414 1552 8 0 -56.5435 130.626 34.15 - 23 266.482 617 7 1 -56.5586 130.621 5.55 - 23 124.385 1552 7 0 -56.559 130.618 4.15 - 23 116.889 617 6 1 -56.5697 130.557 -24.45 - 23 124.703 1552 6 0 -56.5688 130.553 -25.85 - 23 106.306 617 5 1 -56.5488 130.486 -54.45 - 23 109.508 1551 5 0 -56.5495 130.484 -55.85 - 23 103.962 617 4 1 -56.5667 130.43 -84.45 - 23 133.455 1551 4 0 -56.5676 130.427 -85.85 - 23 211.525 617 3 1 -56.5885 130.364 -114.45 - 23 181.853 1551 3 0 -56.5891 130.36 -115.85 - 23 106.739 617 2 1 -56.6 130.292 -144.45 - 23 162.429 1550 2 0 -56.6001 130.289 -145.85 - 23 103.812 617 1 1 -56.5993 130.223 -174.45 - 23 141.363 1550 1 0 -56.6005 130.218 -175.85 - 23 179.223 617 0 1 -56.6278 130.115 -204.45 - 23 111.86 1549 0 0 -56.6287 130.112 -205.85 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 7.30095 LIN -Particle: proton -Event: 24 -Number of tracker hits in this event: 24 - 24 110.562 984 11 1 16.9842 70.1181 125.55 - 24 134.81 1250 11 0 16.9844 70.1182 124.15 - 24 196.471 984 10 1 16.9876 70.117 95.55 - 24 118.343 1250 10 0 16.9878 70.117 94.15 - 24 98.4799 984 9 1 16.9896 70.1148 65.55 - 24 153.336 1250 9 0 16.9899 70.1144 64.15 - 24 137.077 984 8 1 16.9927 70.1056 35.55 - 24 95.0073 1250 8 0 16.994 70.1044 34.15 - 24 108.114 984 7 1 17.0195 70.081 5.55 - 24 101.216 1250 7 0 17.0205 70.0795 4.15 - 24 110.391 984 6 1 17.0416 70.0489 -24.45 - 24 126.217 1249 6 0 17.045 70.0473 -25.85 - 24 146.709 985 5 1 17.1172 70.0117 -54.45 - 24 124.138 1249 5 0 17.122 70.0093 -55.85 - 24 175.204 985 4 1 17.2228 69.9575 -84.45 - 24 157.274 1249 4 0 17.2281 69.9559 -85.85 - 24 135.074 986 3 1 17.3341 69.9219 -114.45 - 24 102.844 1249 3 0 17.3387 69.9199 -115.85 - 24 188.152 986 2 1 17.4369 69.8774 -144.45 - 24 137.442 1249 2 0 17.4425 69.8744 -145.85 - 24 126.73 987 1 1 17.5581 69.8218 -174.45 - 24 272.666 1248 1 0 17.5625 69.8187 -175.85 - 24 101.884 988 0 1 17.6506 69.7544 -204.45 - 24 99.3078 1248 0 0 17.6551 69.7524 -205.85 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 1.5294 LIN -Particle: proton -Event: 25 -Number of tracker hits in this event: 20 - 25 157.477 1452 9 1 110.593 -50.4333 65.55 - 25 129.037 648 9 0 110.594 -50.4323 64.15 - 25 107.463 1452 8 1 110.597 -50.4011 35.55 - 25 107.115 648 8 0 110.6 -50.3976 34.15 - 25 121.203 1452 7 1 110.662 -50.3405 5.55 - 25 232.478 648 7 0 110.671 -50.3368 4.15 - 25 126.242 1453 6 1 110.854 -50.2686 -24.45 - 25 157.154 648 6 0 110.86 -50.2619 -25.85 - 25 151.221 1454 5 1 110.98 -50.1387 -54.45 - 25 130.437 649 5 0 110.986 -50.1293 -55.85 - 25 126.528 1454 4 1 111.116 -49.917 -84.45 - 25 117.26 650 4 0 111.124 -49.9042 -85.85 - 25 111.701 1455 3 1 111.28 -49.6357 -114.45 - 25 199.812 652 3 0 111.286 -49.6209 -115.85 - 25 139.596 1456 2 1 111.395 -49.3226 -144.45 - 25 106.826 653 2 0 111.402 -49.3075 -145.85 - 25 185.933 1457 1 1 111.568 -49.0077 -174.45 - 25 152.227 655 1 0 111.58 -48.9931 -175.85 - 25 130.932 1458 0 1 111.808 -48.7064 -204.45 - 25 130.805 656 0 0 111.821 -48.6894 -205.85 +Number of tracker hits in this event: 25 + 22 121.712 818 11 1 -16.2984 28.2603 125.55 + 22 93.7806 1041 11 0 -16.2983 28.2587 124.15 + 22 121.58 818 10 1 -16.2912 28.2246 95.55 + 22 137.988 1040 10 0 -16.2918 28.2243 94.15 + 22 110.534 818 9 1 -16.3091 28.2172 65.55 + 22 100.369 1040 9 0 -16.31 28.2178 64.15 + 22 108.757 818 8 1 -16.3278 28.2308 35.55 + 22 460.111 1040 8 0 -16.3293 28.2333 34.15 + 22 109.549 818 7 1 -16.3575 28.2889 5.55 + 22 137.514 1041 7 0 -16.3571 28.2905 4.15 + 22 136.39 818 6 1 -16.3509 28.3218 -24.45 + 22 152.696 1041 6 0 -16.3498 28.3243 -25.85 + 22 107.007 818 5 1 -16.3221 28.3757 -54.45 + 22 107.888 1041 5 0 -16.3211 28.3791 -55.85 + 22 97.5541 818 4 1 -16.2992 28.4499 -84.45 + 22 124.911 1042 4 0 -16.2966 28.4539 -85.85 + 22 110.667 819 3 1 -16.2419 28.5359 -114.45 + 22 274.64 1042 3 0 -16.2393 28.5409 -115.85 + 22 128.766 819 2 1 -16.1788 28.6392 -144.45 + 22 146.48 1042 2 0 -16.176 28.6446 -145.85 + 22 104.413 819 1 1 -16.1209 28.7587 -174.45 + 22 154.021 1043 1 0 -16.1191 28.7654 -175.85 + 22 107.458 819 0 1 -16.0832 28.8917 -204.45 + 22 120.312 1044 0 0 -16.0816 28.9005 -205.85 + 22 30.4954 1507 6 0 48.8323 121.559 -26.25 Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 5.58932 LIN +Particle energy: 3.77197 LIN +Particle: proton +Event: 23 +Number of tracker hits in this event: 21 + 23 135.071 1354 9 1 91.0931 -74.5438 65.55 + 23 109.628 527 9 0 91.0922 -74.5432 64.15 + 23 126.998 1354 8 1 91.0792 -74.5298 35.55 + 23 118.468 527 8 0 91.0793 -74.529 34.15 + 23 106.137 1354 7 1 91.0795 -74.5071 5.55 + 23 117.619 527 7 0 91.0818 -74.5063 4.15 + 23 101.223 1354 6 1 91.133 -74.4834 -24.45 + 23 108.161 527 6 0 91.1355 -74.4827 -25.85 + 23 128.42 1355 5 1 91.1834 -74.4675 -54.45 + 23 114.593 527 5 0 91.1876 -74.4665 -55.85 + 23 105.01 1355 4 1 91.275 -74.446 -84.45 + 23 134.818 528 4 0 91.2799 -74.4448 -85.85 + 23 100.213 1356 3 1 91.3854 -74.4256 -114.45 + 23 147.957 528 3 0 91.3896 -74.4238 -115.85 + 23 132.948 1356 2 1 91.4838 -74.3811 -144.45 + 23 101.672 528 2 0 91.4907 -74.378 -145.85 + 23 119.165 1357 1 1 91.6315 -74.3162 -174.45 + 23 99.5764 528 1 0 91.6389 -74.3159 -175.85 + 23 207.097 1358 0 1 91.7903 -74.3119 -204.45 + 23 104.551 528 0 0 91.8018 -74.3127 -205.85 + 23 49.591 1357 0 1 91.7499 -74.3581 -204.577 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 7.67661 LIN +Particle: proton +Event: 24 +Number of tracker hits in this event: 33 + 24 142.958 688 10 1 -42.284 -75.3957 95.55 + 24 129.425 523 10 0 -42.2841 -75.3962 94.15 + 24 123.623 688 9 1 -42.2861 -75.4059 65.55 + 24 139.53 523 9 0 -42.2865 -75.4069 64.15 + 24 104.309 688 8 1 -42.2962 -75.4234 35.55 + 24 103.073 523 8 0 -42.2976 -75.4244 34.15 + 24 109.499 688 7 1 -42.3212 -75.445 5.55 + 24 102.967 523 7 0 -42.3224 -75.4456 4.15 + 24 112.816 688 6 1 -42.3465 -75.4557 -24.45 + 24 119.297 522 6 0 -42.3472 -75.4563 -25.85 + 24 129.059 688 5 1 -42.3624 -75.4727 -54.45 + 24 304.899 522 5 0 -42.3629 -75.4729 -55.85 + 24 149.608 688 4 1 -42.3699 -75.4789 -84.45 + 24 167.055 522 4 0 -42.3705 -75.4787 -85.85 + 24 127.027 688 3 1 -42.3845 -75.4692 -114.45 + 24 103.472 522 3 0 -42.3858 -75.4697 -115.85 + 24 110.585 688 2 1 -42.4175 -75.48 -144.45 + 24 215.861 522 2 0 -42.4181 -75.4811 -145.85 + 24 119.947 688 1 1 -42.4239 -75.4964 -174.45 + 24 93.6381 522 1 0 -42.4235 -75.4975 -175.85 + 24 116.775 688 0 1 -42.4219 -75.5177 -204.45 + 24 119.767 522 0 0 -42.4224 -75.5182 -205.85 + 24 54.3351 521 2 0 -42.4529 -75.65 -146.157 + 24 114.774 276 2 0 -45.7868 -124.92 -146.25 + 24 200.836 672 2 1 -45.5855 -124.946 -144.85 + 24 58.5112 671 2 1 -45.8169 -125.08 -144.45 + 24 76.9728 673 2 1 -45.4498 -125.042 -144.672 + 24 69.9 674 2 1 -45.2499 -125.074 -144.727 + 24 113.674 675 2 1 -45.0498 -125.12 -144.587 + 24 99.5326 676 2 1 -44.85 -125.317 -144.52 + 24 256.471 677 2 1 -44.65 -125.484 -144.528 + 24 75.7104 273 2 0 -44.0454 -125.406 -145.85 + 24 258.514 274 2 0 -44.0055 -125.35 -145.901 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 8.92442 LIN +Particle: proton +Event: 25 +Number of tracker hits in this event: 24 + 25 118.231 377 10 1 -104.641 -14.0609 95.55 + 25 115.122 829 10 0 -104.641 -14.0607 94.15 + 25 90.2907 377 9 1 -104.65 -14.0478 65.55 + 25 103.398 830 9 0 -104.649 -14.0467 64.15 + 25 113.154 377 8 1 -104.649 -14.0205 35.55 + 25 100.377 830 8 0 -104.649 -14.0191 34.15 + 25 194.151 377 7 1 -104.651 -13.9884 5.55 + 25 175.301 830 7 0 -104.651 -13.9866 4.15 + 25 111.477 377 6 1 -104.663 -13.9472 -24.45 + 25 101.132 830 6 0 -104.664 -13.9457 -25.85 + 25 120.865 377 5 1 -104.674 -13.9137 -54.45 + 25 263.46 830 5 0 -104.675 -13.9118 -55.85 + 25 149.499 377 4 1 -104.687 -13.872 -84.45 + 25 98.6631 830 4 0 -104.689 -13.8706 -85.85 + 25 93.1152 377 3 1 -104.713 -13.8446 -114.45 + 25 110.089 831 3 0 -104.714 -13.8431 -115.85 + 25 116.818 377 2 1 -104.732 -13.8149 -144.45 + 25 137.554 831 2 0 -104.733 -13.8134 -145.85 + 25 100.453 377 1 1 -104.738 -13.787 -174.45 + 25 128.771 831 1 0 -104.739 -13.7865 -175.85 + 25 125.477 376 0 1 -104.764 -13.7732 -204.45 + 25 231.167 831 0 0 -104.764 -13.7737 -205.85 + 25 307.881 378 7 1 -104.55 -13.9776 5.47653 + 25 125.827 829 7 0 -104.405 -14.2137 4.14986 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 5.03786 LIN Particle: proton Event: 26 -Number of tracker hits in this event: 35 - 26 173.128 433 10 1 -93.4469 37.4444 95.55 - 26 120.522 1086 10 0 -93.4476 37.4446 94.15 - 26 171.5 433 9 1 -93.461 37.4484 65.55 - 26 112.027 1086 9 0 -93.4627 37.4487 64.15 - 26 131.706 433 8 1 -93.4939 37.4543 35.55 - 26 101.517 1087 8 0 -93.4948 37.4569 34.15 - 26 226.583 433 7 1 -93.5112 37.5121 5.55 - 26 137.199 1087 7 0 -93.5131 37.5115 4.15 - 26 106.595 432 6 1 -93.5513 37.5031 -24.45 - 26 114.558 1087 6 0 -93.5529 37.5034 -25.85 - 26 100.23 432 5 1 -93.5882 37.5113 -54.45 - 26 96.4224 1087 5 0 -93.5907 37.5118 -55.85 - 26 129.353 432 4 1 -93.6422 37.5223 -84.45 - 26 175.028 1087 4 0 -93.6439 37.5248 -85.85 - 26 192.442 432 3 1 -93.6761 37.5717 -114.45 - 26 111.091 1087 3 0 -93.6787 37.5748 -115.85 - 26 148.813 432 2 1 -93.735 37.6354 -144.45 - 26 279.891 1087 2 0 -93.7377 37.6379 -145.85 - 26 122.956 431 1 1 -93.7938 37.6895 -174.45 - 26 143.461 1088 1 0 -93.7964 37.6922 -175.85 - 26 274.915 431 0 1 -93.8481 37.748 -204.45 - 26 110.905 1088 0 0 -93.8515 37.7507 -205.85 - 26 12.4619 432 0 1 -93.75 37.9153 -204.801 - 26 172.141 1092 0 0 -93.5081 38.5193 -205.85 - 26 96.0543 1093 0 0 -93.4949 38.65 -206.059 - 26 2.88593 1186 0 0 -91.5865 57.4402 -206.25 - 26 107.728 1187 0 0 -91.5839 57.4501 -206.233 - 26 128.082 445 0 1 -91.06 57.5643 -204.85 - 26 156.605 446 0 1 -90.8251 57.8753 -204.45 - 26 63.4183 1184 0 0 -91.5552 56.9322 -205.85 - 26 30.6711 457 0 1 -88.6137 56.1834 -204.85 - 26 8.37645 1179 0 0 -87.8449 55.8595 -205.85 - 26 49.587 1178 0 0 -87.8288 55.85 -205.861 - 26 148.425 460 0 1 -87.9562 55.1457 -204.85 - 26 22.3018 237 4 0 -148.93 -132.572 -86.25 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 3.4616 LIN -Particle: proton -Event: 27 -Number of tracker hits in this event: 25 - 27 114.871 1402 10 1 100.582 4.11028 95.55 - 27 132.051 920 10 0 100.584 4.11404 94.15 - 27 103.543 1402 9 1 100.632 4.1759 65.55 - 27 95.9759 920 9 0 100.635 4.1738 64.15 - 27 98.0288 1402 8 1 100.691 4.13206 35.55 - 27 93.4446 920 8 0 100.694 4.13109 34.15 - 27 147.666 1403 7 1 100.761 4.1093 5.55 - 27 114.876 920 7 0 100.765 4.10935 4.15 - 27 101.133 1403 6 1 100.858 4.11236 -24.45 - 27 95.8776 920 6 0 100.863 4.11326 -25.85 - 27 145.111 1404 5 1 100.962 4.13682 -54.45 - 27 111.052 920 5 0 100.967 4.1389 -55.85 - 27 111.83 1404 4 1 101.079 4.18387 -84.45 - 27 131.423 920 4 0 101.084 4.18659 -85.85 - 27 167.214 1405 3 1 101.201 4.24791 -114.45 - 27 109.049 921 3 0 101.206 4.2518 -115.85 - 27 106.84 1405 2 1 101.313 4.33109 -144.45 - 27 120.336 921 2 0 101.317 4.3357 -145.85 - 27 541.197 1406 1 1 101.381 4.4259 -174.45 - 27 223.46 921 1 0 101.385 4.43153 -175.85 - 27 123.161 1406 0 1 101.446 4.54579 -204.45 - 27 109.237 922 0 0 101.45 4.55121 -205.85 - 27 147.772 743 13 1 -31.4038 108.203 185.182 - 27 23.1862 665 5 0 117.57 -46.959 -56.25 - 27 397.404 1407 1 1 101.551 4.60588 -174.804 +Number of tracker hits in this event: 28 + 26 107.67 989 9 1 17.8849 -120.907 65.55 + 26 120.665 296 9 0 17.884 -120.908 64.15 + 26 114.849 989 8 1 17.8663 -120.946 35.55 + 26 132.66 296 8 0 17.8641 -120.948 34.15 + 26 141.729 988 7 1 17.8201 -120.995 5.55 + 26 108.795 295 7 0 17.8176 -120.998 4.15 + 26 213.485 988 6 1 17.7687 -121.054 -24.45 + 26 98.9524 295 6 0 17.7667 -121.057 -25.85 + 26 101.786 988 5 1 17.7282 -121.115 -54.45 + 26 107.357 295 5 0 17.724 -121.118 -55.85 + 26 121.038 987 4 1 17.6326 -121.185 -84.45 + 26 109.079 294 4 0 17.6266 -121.187 -85.85 + 26 281.196 987 3 1 17.5039 -121.228 -114.45 + 26 144.17 294 3 0 17.498 -121.23 -115.85 + 26 105.391 986 2 1 17.375 -121.264 -144.45 + 26 89.519 294 2 0 17.3691 -121.267 -145.85 + 26 95.5329 985 1 1 17.2492 -121.332 -174.45 + 26 109.67 294 1 0 17.2432 -121.335 -175.85 + 26 111.974 985 0 1 17.1255 -121.386 -204.45 + 26 268.606 293 0 0 17.1188 -121.389 -205.85 + 26 0.946262 762 2 1 -27.6402 -89.3274 -144.45 + 26 3.97908 291 2 0 -29.8927 -121.75 -145.864 + 26 7.00746 156 3 0 -0.962237 -148.75 -116.182 + 26 11.821 670 1 0 84.5834 -45.9326 -176.03 + 26 7.65831 1499 9 0 -42.236 119.95 63.7862 + 26 171.747 290 1 0 16.7642 -122.092 -175.85 + 26 216.282 289 1 0 16.7383 -122.15 -175.928 + 26 89.7269 988 4 1 17.6502 -121.205 -84.4533 Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 8.13664 LIN +Particle energy: 7.72671 LIN +Particle: proton +Event: 27 +Number of tracker hits in this event: 22 + 27 134.472 1047 9 1 29.5904 118.824 65.55 + 27 190.017 1493 9 0 29.5904 118.823 64.15 + 27 101.71 1047 8 1 29.5944 118.806 35.55 + 27 152.552 1493 8 0 29.5944 118.805 34.15 + 27 111.781 1047 7 1 29.5958 118.796 5.55 + 27 103.82 1493 7 0 29.5958 118.795 4.15 + 27 101.194 1047 6 1 29.6091 118.782 -24.45 + 27 93.8295 1493 6 0 29.6089 118.782 -25.85 + 27 108.72 1047 5 1 29.6034 118.776 -54.45 + 27 122.531 1493 5 0 29.6035 118.777 -55.85 + 27 138.884 1047 4 1 29.5988 118.778 -84.45 + 27 118.331 1493 4 0 29.598 118.779 -85.85 + 27 114.01 1047 3 1 29.581 118.788 -114.45 + 27 125.138 1493 3 0 29.5795 118.789 -115.85 + 27 89.2098 1047 2 1 29.549 118.807 -144.45 + 27 119.008 1493 2 0 29.5478 118.809 -145.85 + 27 201.741 1047 1 1 29.5221 118.843 -174.45 + 27 226.126 1493 1 0 29.5217 118.845 -175.85 + 27 191.837 1047 0 1 29.5125 118.887 -204.45 + 27 90.9103 1493 0 0 29.5119 118.889 -205.85 + 27 109.751 1046 0 1 29.45 118.846 -204.516 + 27 370.401 1045 0 1 29.2486 118.651 -204.606 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 9.95284 LIN Particle: proton Event: 28 -Number of tracker hits in this event: 20 - 28 121.694 1083 9 1 36.7891 114.388 65.55 - 28 129.011 1471 9 0 36.7898 114.389 64.15 - 28 159.103 1083 8 1 36.8108 114.404 35.55 - 28 120.439 1471 8 0 36.8111 114.405 34.15 - 28 158.561 1083 7 1 36.8181 114.433 5.55 - 28 120.745 1471 7 0 36.8179 114.435 4.15 - 28 112.603 1083 6 1 36.8171 114.472 -24.45 - 28 113.022 1471 6 0 36.8175 114.475 -25.85 - 28 102.937 1083 5 1 36.8248 114.52 -54.45 - 28 107.428 1471 5 0 36.8254 114.522 -55.85 - 28 121.041 1083 4 1 36.8399 114.568 -84.45 - 28 139.871 1472 4 0 36.8417 114.569 -85.85 - 28 122.749 1084 3 1 36.8782 114.608 -114.45 - 28 92.0733 1472 3 0 36.8789 114.61 -115.85 - 28 249.562 1084 2 1 36.8923 114.664 -144.45 - 28 117.179 1472 2 0 36.8931 114.666 -145.85 - 28 283.404 1084 1 1 36.9067 114.714 -174.45 - 28 117.735 1472 1 0 36.9071 114.716 -175.85 - 28 108.671 1084 0 1 36.916 114.756 -204.45 - 28 134.637 1473 0 0 36.9172 114.758 -205.85 -Number of digits in this event: 13 +Number of tracker hits in this event: 21 + 28 158.422 453 8 1 -89.3991 104.761 35.55 + 28 134.98 1423 8 0 -89.3997 104.761 34.15 + 28 131.13 453 7 1 -89.4083 104.763 5.55 + 28 145.395 1423 7 0 -89.4082 104.763 4.15 + 28 103.945 453 6 1 -89.4062 104.754 -24.45 + 28 142.536 1423 6 0 -89.407 104.753 -25.85 + 28 215.262 453 5 1 -89.4226 104.731 -54.45 + 28 110.23 1422 5 0 -89.4229 104.73 -55.85 + 28 139.872 453 4 1 -89.432 104.703 -84.45 + 28 119.361 1422 4 0 -89.4336 104.702 -85.85 + 28 100.391 452 3 1 -89.4681 104.688 -114.45 + 28 109.993 1422 3 0 -89.4696 104.687 -115.85 + 28 172.414 452 2 1 -89.4998 104.684 -144.45 + 28 102.708 1422 2 0 -89.5009 104.684 -145.85 + 28 110.139 452 1 1 -89.526 104.689 -174.45 + 28 111.933 1422 1 0 -89.5272 104.69 -175.85 + 28 144.38 452 0 1 -89.5507 104.719 -204.45 + 28 335.488 1422 0 0 -89.5512 104.72 -205.85 + 28 191.356 852 6 1 -9.46967 5.88379 -24.6999 + 28 196.409 1159 4 1 51.85 117.323 -84.5709 + 28 45.6359 1199 3 1 59.8964 176.201 -114.45 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 1.83496 LIN +Particle energy: 2.62737 LIN Particle: proton Event: 29 Number of tracker hits in this event: 22 - 29 131.623 954 10 1 10.8637 -93.3509 95.55 - 29 121.415 434 10 0 10.8648 -93.3487 94.15 - 29 130.924 954 9 1 10.8762 -93.3025 65.55 - 29 194.358 434 9 0 10.8749 -93.297 64.15 - 29 132.636 954 8 1 10.8598 -93.1865 35.55 - 29 97.6808 434 8 0 10.8579 -93.1819 34.15 - 29 123.807 953 7 1 10.8307 -93.0878 5.55 - 29 119.499 435 7 0 10.8311 -93.0835 4.15 - 29 107.483 953 6 1 10.8493 -93 -24.45 - 29 129.124 435 6 0 10.8497 -92.9961 -25.85 - 29 122.125 954 5 1 10.8604 -92.9139 -54.45 - 29 169.339 436 5 0 10.8604 -92.9138 -55.85 - 29 119.137 954 4 1 10.8547 -92.8946 -84.45 - 29 124.019 436 4 0 10.8554 -92.8894 -85.85 - 29 158.547 954 3 1 10.8685 -92.7738 -114.45 - 29 158.048 436 3 0 10.8725 -92.7681 -115.85 - 29 104.381 954 2 1 10.953 -92.6424 -144.45 - 29 148.755 437 2 0 10.959 -92.6344 -145.85 - 29 126.977 955 1 1 11.0803 -92.4698 -174.45 - 29 99.7139 438 1 0 11.0842 -92.4632 -175.85 - 29 101.484 955 0 1 11.1642 -92.3253 -204.45 - 29 103.49 439 0 0 11.1677 -92.3165 -205.85 + 29 147.993 879 10 1 -4.05709 114.305 95.55 + 29 124.268 1470 10 0 -4.05408 114.304 94.15 + 29 108.579 880 9 1 -3.99702 114.289 65.55 + 29 140.386 1470 9 0 -3.9961 114.289 64.15 + 29 111.219 880 8 1 -3.9797 114.286 35.55 + 29 111.073 1470 8 0 -3.98118 114.284 34.15 + 29 172.125 880 7 1 -4.00835 114.237 5.55 + 29 164.729 1470 7 0 -4.01062 114.238 4.15 + 29 102.002 879 6 1 -4.05033 114.275 -24.45 + 29 125.364 1470 6 0 -4.05151 114.277 -25.85 + 29 239.62 879 5 1 -4.07832 114.306 -54.45 + 29 129.561 1470 5 0 -4.08203 114.309 -55.85 + 29 282.914 879 4 1 -4.16132 114.378 -84.45 + 29 103.623 1471 4 0 -4.16277 114.383 -85.85 + 29 108.744 879 3 1 -4.18385 114.493 -114.45 + 29 126.16 1471 3 0 -4.18436 114.498 -115.85 + 29 132.091 879 2 1 -4.20106 114.599 -144.45 + 29 104.16 1472 2 0 -4.20036 114.601 -145.85 + 29 120.442 879 1 1 -4.19061 114.643 -174.45 + 29 115.334 1472 1 0 -4.18984 114.646 -175.85 + 29 154.262 879 0 1 -4.18767 114.709 -204.45 + 29 121.32 1472 0 0 -4.18854 114.709 -205.85 Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 6.47547 LIN +Particle energy: 2.36341 LIN Particle: proton Event: 30 -Number of tracker hits in this event: 28 - 30 141.467 1339 10 1 87.8804 -8.38413 95.55 - 30 94.6992 858 10 0 87.8802 -8.38484 94.15 - 30 107.295 1339 9 1 87.8767 -8.39942 65.55 - 30 102.144 858 9 0 87.8768 -8.40091 64.15 - 30 125.632 1339 8 1 87.8788 -8.43116 35.55 - 30 191.614 858 8 0 87.8787 -8.43254 34.15 - 30 104.866 1339 7 1 87.874 -8.46188 5.55 - 30 117.853 857 7 0 87.8734 -8.46176 4.15 - 30 98.0512 1339 6 1 87.8577 -8.46043 -24.45 - 30 116.931 857 6 0 87.856 -8.46058 -25.85 - 30 117.751 1338 5 1 87.8222 -8.45479 -54.45 - 30 153.66 857 5 0 87.82 -8.45334 -55.85 - 30 164.173 1338 4 1 87.7756 -8.4246 -84.45 - 30 131.115 858 4 0 87.7728 -8.42369 -85.85 - 30 110.909 1338 3 1 87.7215 -8.4057 -114.45 - 30 109.657 858 3 0 87.7195 -8.40389 -115.85 - 30 128.371 1338 2 1 87.6805 -8.36844 -144.45 - 30 89.7896 858 2 0 87.6811 -8.36776 -145.85 - 30 119.874 1338 1 1 87.696 -8.35154 -174.45 - 30 166.964 858 1 0 87.6967 -8.35024 -175.85 - 30 132.987 1338 0 1 87.7101 -8.32206 -204.45 - 30 110.731 858 0 0 87.7107 -8.32015 -205.85 - 30 76.2345 1323 1 0 35.5434 84.7426 -176.085 - 30 21.5562 1215 6 0 116.784 63.1355 -26.246 - 30 44.9485 1081 6 0 149.165 36.36 -25.9311 - 30 43.0648 846 0 1 -10.7341 38.5123 -204.753 - 30 155.496 118 3 1 -156.461 -59.6592 -114.45 - 30 756.97 1465 5 1 113.195 45.033 -54.8453 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 4.00577 LIN -Particle: proton -Event: 31 Number of tracker hits in this event: 22 - 31 121.817 1319 10 1 83.9523 29.8065 95.55 - 31 160.087 1048 10 0 83.9532 29.8064 94.15 - 31 152.786 1319 9 1 83.9708 29.8047 65.55 - 31 137.063 1048 9 0 83.9723 29.8051 64.15 - 31 164.966 1319 8 1 84.0036 29.8182 35.55 - 31 147.159 1048 8 0 84.0063 29.8181 34.15 - 31 150.248 1320 7 1 84.0554 29.8104 5.55 - 31 154.879 1048 7 0 84.0577 29.8086 4.15 - 31 163.267 1320 6 1 84.1094 29.7724 -24.45 - 31 125.55 1048 6 0 84.1101 29.7703 -25.85 - 31 109.566 1320 5 1 84.1257 29.7273 -54.45 - 31 108.472 1048 5 0 84.1264 29.7263 -55.85 - 31 110.17 1320 4 1 84.1368 29.7099 -84.45 - 31 103.05 1048 4 0 84.1367 29.7099 -85.85 - 31 124.814 1320 3 1 84.1395 29.7138 -114.45 - 31 139.451 1048 3 0 84.1398 29.7134 -115.85 - 31 100.386 1320 2 1 84.1475 29.6959 -144.45 - 31 103.435 1048 2 0 84.1471 29.6938 -145.85 - 31 125.92 1320 1 1 84.1411 29.6471 -174.45 - 31 93.1333 1047 1 0 84.1408 29.6453 -175.85 - 31 106.133 1320 0 1 84.1446 29.6051 -204.45 - 31 192.988 1047 0 0 84.1433 29.603 -205.85 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 9.20768 LIN -Particle: proton -Event: 32 -Number of tracker hits in this event: 18 - 32 151.442 1240 8 1 68.2105 127.022 35.55 - 32 133.2 1534 8 0 68.2101 127.021 34.15 - 32 92.6652 1240 7 1 68.1959 126.985 5.55 - 32 105.09 1534 7 0 68.1958 126.983 4.15 - 32 103.825 1240 6 1 68.1962 126.928 -24.45 - 32 114.849 1533 6 0 68.1961 126.927 -25.85 - 32 101.413 1240 5 1 68.1948 126.891 -54.45 - 32 153.26 1533 5 0 68.195 126.889 -55.85 - 32 111.191 1240 4 1 68.1965 126.854 -84.45 - 32 98.9231 1533 4 0 68.1964 126.853 -85.85 - 32 118.012 1240 3 1 68.1957 126.836 -114.45 - 32 100.903 1533 3 0 68.1957 126.836 -115.85 - 32 102.712 1240 2 1 68.1952 126.837 -144.45 - 32 106.783 1533 2 0 68.1944 126.837 -145.85 - 32 100.904 1240 1 1 68.177 126.823 -174.45 - 32 110.586 1533 1 0 68.1731 126.823 -175.85 - 32 123.669 1240 0 1 68.0941 126.826 -204.45 - 32 126.896 1533 0 0 68.0908 126.827 -205.85 -Number of digits in this event: 6 -Using G4ParticleGun... -Particle energy: 6.14765 LIN -Particle: proton -Event: 33 -Number of tracker hits in this event: 19 - 33 113.379 753 8 1 -29.4396 139.6 35.55 - 33 101.576 1597 8 0 -29.4413 139.599 34.15 - 33 94.6993 752 7 1 -29.4772 139.589 5.55 - 33 106.806 1597 7 0 -29.48 139.588 4.15 - 33 146.688 752 6 1 -29.5367 139.556 -24.45 - 33 89.3681 1597 6 0 -29.5385 139.556 -25.85 - 33 148.051 752 5 1 -29.5764 139.557 -54.45 - 33 113.391 1597 5 0 -29.5789 139.557 -55.85 - 33 108.275 752 4 1 -29.6282 139.568 -84.45 - 33 108.373 1597 4 0 -29.6307 139.567 -85.85 - 33 218.492 751 3 1 -29.682 139.54 -114.45 - 33 137.459 1596 3 0 -29.684 139.537 -115.85 - 33 119.541 751 2 1 -29.7218 139.488 -144.45 - 33 248.288 1596 2 0 -29.722 139.487 -145.85 - 33 100.355 751 1 1 -29.7237 139.463 -174.45 - 33 102.595 1596 1 0 -29.724 139.462 -175.85 - 33 145.21 751 0 1 -29.7318 139.443 -204.45 - 33 285.571 1596 0 0 -29.7334 139.442 -205.85 - 33 125.742 1596 4 0 -29.6486 139.55 -86.1518 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 3.21524 LIN -Particle: proton -Event: 34 -Number of tracker hits in this event: 22 - 34 89.2729 355 10 1 -108.992 34.3156 95.55 - 34 97.4459 1071 10 0 -108.991 34.3151 94.15 - 34 116.473 355 9 1 -108.977 34.3051 65.55 - 34 109.431 1071 9 0 -108.976 34.3047 64.15 - 34 100.436 355 8 1 -108.966 34.294 35.55 - 34 97.3337 1071 8 0 -108.964 34.2931 34.15 - 34 113.013 356 7 1 -108.909 34.2822 5.55 - 34 122.121 1071 7 0 -108.906 34.2782 4.15 - 34 146.771 356 6 1 -108.846 34.1982 -24.45 - 34 103.992 1070 6 0 -108.845 34.1936 -25.85 - 34 100.195 356 5 1 -108.816 34.0943 -54.45 - 34 109.842 1070 5 0 -108.815 34.0902 -55.85 - 34 117.704 356 4 1 -108.794 34.0103 -84.45 - 34 208.298 1069 4 0 -108.793 34.0078 -85.85 - 34 131.611 356 3 1 -108.776 33.9576 -114.45 - 34 100.976 1069 3 0 -108.776 33.9553 -115.85 - 34 111.274 356 2 1 -108.789 33.9204 -144.45 - 34 121.146 1069 2 0 -108.789 33.9184 -145.85 - 34 267.432 356 1 1 -108.795 33.8848 -174.45 - 34 168.416 1069 1 0 -108.793 33.8863 -175.85 - 34 174.532 356 0 1 -108.759 33.9254 -204.45 - 34 132.567 1069 0 0 -108.756 33.9294 -205.85 -Number of digits in this event: 12 -Using G4ParticleGun... -Particle energy: 9.29027 LIN -Particle: proton -Event: 35 -Number of tracker hits in this event: 24 - 35 201.204 730 11 1 -34.0412 -66.4966 125.55 - 35 132.108 567 11 0 -34.0412 -66.4962 124.15 - 35 134.963 730 10 1 -34.039 -66.4899 95.55 - 35 121.921 567 10 0 -34.0394 -66.4896 94.15 - 35 115.128 730 9 1 -34.0471 -66.4799 65.55 - 35 104.585 567 9 0 -34.0473 -66.4791 64.15 - 35 114.571 730 8 1 -34.0494 -66.462 35.55 - 35 115.539 567 8 0 -34.0499 -66.461 34.15 - 35 186.866 729 7 1 -34.0586 -66.4435 5.55 - 35 114.03 568 7 0 -34.0591 -66.4423 4.15 - 35 319.22 729 6 1 -34.0712 -66.4212 -24.45 - 35 134.604 568 6 0 -34.0713 -66.419 -25.85 - 35 111.398 729 5 1 -34.0734 -66.3751 -54.45 - 35 115.58 568 5 0 -34.0736 -66.3735 -55.85 - 35 111.88 729 4 1 -34.0767 -66.3401 -84.45 - 35 134.786 568 4 0 -34.0765 -66.338 -85.85 - 35 117.422 729 3 1 -34.0759 -66.2928 -114.45 - 35 94.6334 568 3 0 -34.0756 -66.2899 -115.85 - 35 201.571 729 2 1 -34.071 -66.2343 -144.45 - 35 167.814 569 2 0 -34.071 -66.2326 -145.85 - 35 97.4172 729 1 1 -34.0707 -66.1971 -174.45 - 35 119.98 569 1 0 -34.0701 -66.1961 -175.85 - 35 136.471 729 0 1 -34.0568 -66.1746 -204.45 - 35 135.467 569 0 0 -34.056 -66.173 -205.85 + 30 122.826 889 10 1 -2.19812 109.393 95.55 + 30 108.503 1446 10 0 -2.19893 109.392 94.15 + 30 121.44 889 9 1 -2.20791 109.367 65.55 + 30 136.624 1446 9 0 -2.20685 109.366 64.15 + 30 135.478 889 8 1 -2.17051 109.334 35.55 + 30 160.092 1445 8 0 -2.17014 109.332 34.15 + 30 171.684 889 7 1 -2.17103 109.286 5.55 + 30 245.112 1445 7 0 -2.17186 109.283 4.15 + 30 101.049 889 6 1 -2.19213 109.232 -24.45 + 30 103.836 1445 6 0 -2.1944 109.23 -25.85 + 30 121.47 889 5 1 -2.24439 109.193 -54.45 + 30 148.579 1445 5 0 -2.24825 109.192 -55.85 + 30 99.9817 888 4 1 -2.3273 109.175 -84.45 + 30 94.7577 1445 4 0 -2.33229 109.174 -85.85 + 30 118.432 888 3 1 -2.44059 109.172 -114.45 + 30 100.797 1445 3 0 -2.44671 109.17 -115.85 + 30 106.149 887 2 1 -2.5746 109.144 -144.45 + 30 131.869 1444 2 0 -2.58152 109.143 -145.85 + 30 146.088 886 1 1 -2.72777 109.108 -174.45 + 30 157.694 1444 1 0 -2.73632 109.104 -175.85 + 30 119.15 885 0 1 -2.90024 109.021 -204.45 + 30 94.1173 1444 0 0 -2.90902 109.017 -205.85 Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 5.34342 LIN +Particle energy: 5.14982 LIN +Particle: proton +Event: 31 +Number of tracker hits in this event: 24 + 31 137.991 1397 9 1 99.5718 80.8433 65.55 + 31 106.731 1303 9 0 99.5716 80.8434 64.15 + 31 115.979 1397 8 1 99.5631 80.8455 35.55 + 31 135.262 1303 8 0 99.5626 80.8454 34.15 + 31 126.979 1396 7 1 99.5493 80.841 5.55 + 31 101.469 1303 7 0 99.5499 80.8411 4.15 + 31 252.681 1397 6 1 99.5653 80.8436 -24.45 + 31 101.999 1303 6 0 99.5668 80.8447 -25.85 + 31 310.375 1397 5 1 99.602 80.8731 -54.45 + 31 114.954 1304 5 0 99.6041 80.8756 -55.85 + 31 316.017 1397 4 1 99.644 80.926 -84.45 + 31 158.135 1304 4 0 99.6454 80.9279 -85.85 + 31 129.325 1397 3 1 99.673 80.9715 -114.45 + 31 140.941 1304 3 0 99.6748 80.9744 -115.85 + 31 113.135 1397 2 1 99.716 81.0389 -144.45 + 31 117.577 1304 2 0 99.7168 81.0422 -145.85 + 31 114.627 1397 1 1 99.7345 81.1057 -174.45 + 31 413.109 1305 1 0 99.737 81.1083 -175.85 + 31 121.803 1398 0 1 99.7956 81.1628 -204.45 + 31 174.452 1305 0 0 99.7989 81.1668 -205.85 + 31 101.269 1304 1 0 99.6869 81.05 -176.028 + 31 149.198 1398 1 1 99.8128 80.5845 -174.85 + 31 39.525 1308 1 0 100.14 81.829 -175.85 + 31 91.6963 1306 1 0 99.7369 81.2502 -175.998 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 3.22383 LIN +Particle: proton +Event: 32 +Number of tracker hits in this event: 22 + 32 103.487 1306 10 1 81.2642 -51.0856 95.55 + 32 95.038 644 10 0 81.2627 -51.0866 94.15 + 32 152.539 1305 9 1 81.2314 -51.1044 65.55 + 32 123.682 644 9 0 81.2287 -51.106 64.15 + 32 107.866 1305 8 1 81.175 -51.1475 35.55 + 32 125.914 644 8 0 81.1703 -51.1493 34.15 + 32 106.059 1305 7 1 81.0725 -51.1941 5.55 + 32 234.715 644 7 0 81.0678 -51.1949 4.15 + 32 120.275 1304 6 1 80.9725 -51.2173 -24.45 + 32 112.533 644 6 0 80.9661 -51.2172 -25.85 + 32 98.253 1303 5 1 80.8298 -51.214 -54.45 + 32 166.037 644 5 0 80.8232 -51.2128 -55.85 + 32 104.364 1303 4 1 80.6868 -51.1864 -84.45 + 32 109.428 644 4 0 80.6797 -51.1834 -85.85 + 32 117.505 1302 3 1 80.5441 -51.1229 -114.45 + 32 127.803 644 3 0 80.5384 -51.1177 -115.85 + 32 97.6075 1301 2 1 80.4236 -51.0115 -144.45 + 32 95.576 645 2 0 80.4183 -51.0058 -145.85 + 32 108.384 1301 1 1 80.308 -50.8853 -174.45 + 32 95.8466 645 1 0 80.3032 -50.8797 -175.85 + 32 110.86 1300 0 1 80.2034 -50.7629 -204.45 + 32 115.979 646 0 0 80.1987 -50.757 -205.85 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 6.12545 LIN +Particle: proton +Event: 33 +Number of tracker hits in this event: 26 + 33 109.006 887 10 1 -2.56387 -93.0748 95.55 + 33 153.503 435 10 0 -2.56472 -93.0746 94.15 + 33 121.304 887 9 1 -2.58112 -93.0714 65.55 + 33 87.9242 435 9 0 -2.58106 -93.0704 64.15 + 33 114.464 887 8 1 -2.57751 -93.0496 35.55 + 33 197.97 435 8 0 -2.57649 -93.0482 34.15 + 33 110.665 887 7 1 -2.55782 -93.0245 5.55 + 33 123.378 435 7 0 -2.55726 -93.0219 4.15 + 33 119.738 887 6 1 -2.54206 -92.9687 -24.45 + 33 114.922 435 6 0 -2.54187 -92.9658 -25.85 + 33 100.233 887 5 1 -2.53877 -92.904 -54.45 + 33 155.663 436 5 0 -2.53818 -92.9014 -55.85 + 33 131.349 887 4 1 -2.52164 -92.8496 -84.45 + 33 134.905 436 4 0 -2.51985 -92.8475 -85.85 + 33 117.135 887 3 1 -2.48329 -92.8074 -114.45 + 33 123.472 436 3 0 -2.4818 -92.805 -115.85 + 33 176.534 887 2 1 -2.45178 -92.7643 -144.45 + 33 103.323 436 2 0 -2.45157 -92.7629 -145.85 + 33 121.668 888 1 1 -2.44802 -92.7334 -174.45 + 33 220.127 437 1 0 -2.44772 -92.7325 -175.85 + 33 85.9738 888 0 1 -2.43828 -92.7167 -204.45 + 33 116.017 437 0 0 -2.43793 -92.7167 -205.85 + 33 165.074 1010 0 1 22.0514 -97.4978 -204.85 + 33 407.096 383 0 0 18.1093 -103.386 -206.025 + 33 1.58445 388 2 0 36.4003 -102.446 -146.25 + 33 68.0002 485 0 0 -29.2396 -82.9647 -206.25 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 9.03514 LIN +Particle: proton +Event: 34 +Number of tracker hits in this event: 27 + 34 117.65 949 11 1 9.8972 -36.3518 125.55 + 34 139.077 718 11 0 9.89691 -36.3524 124.15 + 34 143.303 949 10 1 9.89542 -36.3682 95.55 + 34 235.425 718 10 0 9.89585 -36.3688 94.15 + 34 110.351 949 9 1 9.9018 -36.3771 65.55 + 34 123.301 718 9 0 9.90192 -36.3774 64.15 + 34 120.938 949 8 1 9.90821 -36.3815 35.55 + 34 140.522 718 8 0 9.90876 -36.3825 34.15 + 34 109.944 949 7 1 9.91483 -36.4064 5.55 + 34 105.247 718 7 0 9.9152 -36.4071 4.15 + 34 140.414 949 6 1 9.92211 -36.4203 -24.45 + 34 109.422 718 6 0 9.92122 -36.4209 -25.85 + 34 139.732 949 5 1 9.90085 -36.4322 -54.45 + 34 107.677 718 5 0 9.89995 -36.4336 -55.85 + 34 132.065 949 4 1 9.88257 -36.4627 -84.45 + 34 95.8209 717 4 0 9.88142 -36.4635 -85.85 + 34 107.163 949 3 1 9.85956 -36.4788 -114.45 + 34 177.091 717 3 0 9.85789 -36.4786 -115.85 + 34 118.788 948 2 1 9.82657 -36.4782 -144.45 + 34 257.73 717 2 0 9.82468 -36.477 -145.85 + 34 125.369 948 1 1 9.78824 -36.4498 -174.45 + 34 117.23 718 1 0 9.78825 -36.4483 -175.85 + 34 104.807 948 0 1 9.78787 -36.417 -204.45 + 34 141.851 718 0 0 9.7881 -36.4153 -205.85 + 34 65.9337 948 10 1 9.85 -36.3667 95.1925 + 34 36.6499 720 10 0 8.40044 -35.8636 94.15 + 34 210.157 721 10 0 8.37599 -35.85 94.0685 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 6.92043 LIN +Particle: proton +Event: 35 +Number of tracker hits in this event: 28 + 35 104.542 453 10 1 -89.3881 26.432 95.55 + 35 118.089 1031 10 0 -89.3872 26.4317 94.15 + 35 138.029 453 9 1 -89.3691 26.4273 65.55 + 35 103.363 1031 9 0 -89.3682 26.4275 64.15 + 35 184.649 453 8 1 -89.3518 26.4337 35.55 + 35 137.217 1031 8 0 -89.3495 26.435 34.15 + 35 99.1583 453 7 1 -89.2995 26.4595 5.55 + 35 148.099 1032 7 0 -89.2978 26.461 4.15 + 35 123.57 453 6 1 -89.2603 26.492 -24.45 + 35 113.468 1032 6 0 -89.2596 26.4934 -25.85 + 35 141.079 454 5 1 -89.2425 26.5239 -54.45 + 35 118.426 1032 5 0 -89.2409 26.5255 -55.85 + 35 107.028 454 4 1 -89.2085 26.5553 -84.45 + 35 242.335 1032 4 0 -89.2069 26.5565 -85.85 + 35 157.738 454 3 1 -89.1725 26.5786 -114.45 + 35 115.036 1032 3 0 -89.1714 26.5798 -115.85 + 35 120.104 454 2 1 -89.1538 26.6038 -144.45 + 35 107.18 1032 2 0 -89.1539 26.6057 -145.85 + 35 106.607 454 1 1 -89.1576 26.6504 -174.45 + 35 280.185 1033 1 0 -89.1579 26.6529 -175.85 + 35 222.202 454 0 1 -89.1632 26.7075 -204.45 + 35 229.353 1033 0 0 -89.1625 26.7099 -205.85 + 35 90.0214 453 0 1 -89.25 26.7668 -204.519 + 35 152.709 452 0 1 -89.45 27.0104 -204.616 + 35 273.996 451 0 1 -89.65 27.1487 -204.678 + 35 142.94 450 0 1 -89.85 27.1534 -204.753 + 35 193.703 449 0 1 -90.15 27.1267 -204.821 + 35 33.4685 448 0 1 -90.35 27.2124 -204.741 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 2.41191 LIN Particle: proton Event: 36 -Number of tracker hits in this event: 23 - 36 135.624 1527 8 1 125.678 69.8673 35.55 - 36 177.264 1249 8 0 125.678 69.8667 34.15 - 36 101.332 1527 7 1 125.68 69.8534 5.55 - 36 118.172 1249 7 0 125.68 69.8521 4.15 - 36 329.654 1527 6 1 125.674 69.8262 -24.45 - 36 112.556 1248 6 0 125.674 69.8252 -25.85 - 36 112.379 1527 5 1 125.663 69.8077 -54.45 - 36 104.258 1248 5 0 125.663 69.8069 -55.85 - 36 107.468 1527 4 1 125.647 69.7886 -84.45 - 36 183.04 1248 4 0 125.647 69.7876 -85.85 - 36 111.076 1527 3 1 125.658 69.7653 -114.45 - 36 127.251 1248 3 0 125.658 69.7645 -115.85 - 36 116.101 1527 2 1 125.662 69.7467 -144.45 - 36 97.6145 1248 2 0 125.662 69.7451 -145.85 - 36 111.26 1527 1 1 125.654 69.7153 -174.45 - 36 116.08 1248 1 0 125.652 69.7121 -175.85 - 36 95.2119 1527 0 1 125.618 69.6585 -204.45 - 36 102.601 1248 0 0 125.617 69.6559 -205.85 - 36 46.6515 1528 6 1 125.75 69.8011 -24.7722 - 36 101.16 1247 6 0 127.142 69.534 -25.85 - 36 145.693 1246 6 0 127.264 69.45 -26.1705 - 36 25.0414 1126 6 0 134.553 45.2882 -26.25 - 36 36.4452 1245 6 0 124.758 69.25 -25.8947 -Number of digits in this event: 7 +Number of tracker hits in this event: 78 + 36 171.125 412 7 1 -97.6978 -111.995 5.55 + 36 118.812 340 7 0 -97.6958 -111.995 4.15 + 36 150.226 412 6 1 -97.6544 -111.992 -24.45 + 36 117.132 340 6 0 -97.6519 -111.994 -25.85 + 36 167.182 412 5 1 -97.6017 -112.052 -54.45 + 36 97.5296 340 5 0 -97.5985 -112.055 -55.85 + 36 23.371 241 7 0 -117.387 -131.794 3.75 + 36 13.5599 330 12 1 -114.123 -112.925 155.15 + 36 5.52846 329 12 1 -114.15 -112.928 155.538 + 36 108.12 435 13 0 -159.816 -93.0452 183.75 + 36 150.907 436 13 0 -160.051 -92.95 183.894 + 36 17.3005 437 13 0 -160.548 -92.75 184.131 + 36 50.3641 86 13 1 -162.786 -91.8284 185.15 + 36 71.994 85 13 1 -162.95 -91.7557 185.191 + 36 40.8139 84 13 1 -163.15 -91.604 185.169 + 36 26.89 458 13 0 -166.565 -88.3634 184.15 + 36 64.2761 459 13 0 -166.62 -88.2499 184.142 + 36 72.8568 62 13 1 -167.664 -84.9571 185.15 + 36 168.629 61 13 1 -167.75 -84.7765 185.187 + 36 0.633845 517 13 0 -172.876 -76.4547 184.15 + 36 50.5678 518 13 0 -172.878 -76.45 184.149 + 36 67.526 519 13 0 -172.945 -76.25 184.092 + 36 56.0662 520 13 0 -172.969 -76.05 184.04 + 36 55.6679 521 13 0 -173.003 -75.85 183.944 + 36 34.9045 522 13 0 -173.041 -75.65 183.844 + 36 19.8126 182 5 0 -90.5496 -143.72 -56.25 + 36 248.288 181 5 0 -90.5351 -143.75 -56.2148 + 36 44.6513 180 5 0 -90.4725 -143.95 -55.8603 + 36 176.248 448 5 1 -90.3594 -144.776 -54.8488 + 36 113.883 413 5 0 -93.1835 -97.5114 -56.25 + 36 19.1652 403 4 1 -99.5364 -114.612 -84.45 + 36 488.654 402 4 1 -99.55 -114.574 -84.499 + 36 214.606 401 4 1 -99.75 -114.258 -84.838 + 36 26.0266 334 4 0 -100.471 -113.225 -85.85 + 36 103.488 335 4 0 -100.526 -113.15 -85.9177 + 36 130.149 336 4 0 -100.666 -112.95 -86.0549 + 36 73.9209 337 4 0 -100.794 -112.75 -86.1711 + 36 56.2845 338 4 0 -100.906 -112.55 -86.223 + 36 10.3548 982 4 0 -155.304 16.6237 -86.25 + 36 110.361 983 4 0 -155.301 16.65 -86.2194 + 36 154.903 984 4 0 -155.228 16.8501 -86.0267 + 36 23.4359 985 4 0 -155.172 17.05 -85.8886 + 36 208.175 127 4 1 -154.702 18.6658 -84.8499 + 36 1015.61 128 4 1 -154.55 18.9624 -84.7655 + 36 89.816 129 4 1 -154.35 17.782 -84.579 + 36 294.054 130 4 1 -154.15 17.7224 -84.6366 + 36 52.504 400 4 1 -100.062 -115.508 -84.45 + 36 49.6922 399 4 1 -100.15 -115.692 -84.4668 + 36 321.87 398 4 1 -100.357 -116.254 -84.45 + 36 256.11 397 4 1 -100.55 -116.919 -84.5533 + 36 235.594 396 4 1 -100.75 -117.471 -84.6533 + 36 30.6142 395 4 1 -100.95 -117.958 -84.8258 + 36 2.87647 297 4 0 -102.178 -120.739 -85.8502 + 36 57.4568 296 4 0 -102.183 -120.75 -85.8545 + 36 106.405 295 4 0 -102.273 -120.95 -85.9258 + 36 77.9322 294 4 0 -102.364 -121.15 -85.9933 + 36 56.8304 293 4 0 -102.452 -121.35 -86.0533 + 36 94.2417 292 4 0 -102.55 -121.55 -86.1218 + 36 49.0684 291 4 0 -102.651 -121.75 -86.1951 + 36 55.5107 315 4 0 -99.3874 -116.978 -85.85 + 36 89.3792 314 4 0 -99.354 -117.15 -86.0179 + 36 94.1693 454 3 1 -89.2237 -132.27 -114.45 + 36 48.7282 453 3 1 -89.25 -132.188 -114.718 + 36 120.003 242 3 0 -89.3747 -131.746 -115.85 + 36 21.4698 308 4 0 -98.0599 -118.35 -86.1118 + 36 121.414 307 4 0 -97.9919 -118.55 -86.2038 + 36 197.273 306 4 0 -97.941 -118.75 -86.1247 + 36 13.8522 413 4 1 -97.5466 -112.105 -84.45 + 36 122.129 412 4 1 -97.55 -112.104 -84.487 + 36 114.291 340 4 0 -97.6746 -112.054 -85.85 + 36 117.398 399 3 1 -100.29 -111.024 -114.45 + 36 118.129 345 3 0 -100.419 -110.97 -115.85 + 36 341.276 385 2 1 -103.05 -109.862 -144.45 + 36 105.267 351 2 0 -103.179 -109.807 -145.85 + 36 155.23 371 1 1 -105.813 -108.707 -174.45 + 36 145.61 357 1 0 -105.941 -108.651 -175.85 + 36 95.7948 357 0 1 -108.582 -107.501 -204.45 + 36 150.019 363 0 0 -108.708 -107.444 -205.85 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 8.5808 LIN +Particle energy: 4.48709 LIN Particle: proton Event: 37 -Number of tracker hits in this event: 22 - 37 109.688 1229 10 1 65.9813 -77.6568 95.55 - 37 174.472 511 10 0 65.9815 -77.6562 94.15 - 37 109.205 1229 9 1 65.9839 -77.6423 65.55 - 37 93.7217 512 9 0 65.9842 -77.6426 64.15 - 37 239.2 1229 8 1 65.9906 -77.6492 35.55 - 37 118.128 512 8 0 65.991 -77.6487 34.15 - 37 122.12 1229 7 1 66.0031 -77.6373 5.55 - 37 128.814 512 7 0 66.0042 -77.6375 4.15 - 37 98.3917 1229 6 1 66.0267 -77.6381 -24.45 - 37 109.645 512 6 0 66.0269 -77.6385 -25.85 - 37 113.833 1229 5 1 66.0332 -77.6463 -54.45 - 37 93.8937 512 5 0 66.0341 -77.6464 -55.85 - 37 97.2385 1230 4 1 66.053 -77.6489 -84.45 - 37 243.306 512 4 0 66.0542 -77.6483 -85.85 - 37 196.148 1230 3 1 66.0724 -77.6402 -114.45 - 37 105.295 512 3 0 66.0732 -77.6396 -115.85 - 37 108.515 1230 2 1 66.0916 -77.6238 -144.45 - 37 265.728 512 2 0 66.0922 -77.6234 -145.85 - 37 108.416 1230 1 1 66.1016 -77.6161 -174.45 - 37 116.976 512 1 0 66.1025 -77.6151 -175.85 - 37 133.027 1230 0 1 66.1227 -77.5955 -204.45 - 37 115.273 512 0 0 66.124 -77.5953 -205.85 -Number of digits in this event: 9 +Number of tracker hits in this event: 24 + 37 120.28 717 11 1 -36.6213 53.3983 125.55 + 37 123.091 1166 11 0 -36.6213 53.3982 124.15 + 37 285.064 717 10 1 -36.6204 53.3949 95.55 + 37 153.371 1166 10 0 -36.6204 53.3932 94.15 + 37 120.009 717 9 1 -36.6247 53.35 65.55 + 37 111.662 1166 9 0 -36.6239 53.3498 64.15 + 37 137.34 717 8 1 -36.6085 53.3476 35.55 + 37 98.9508 1166 8 0 -36.607 53.347 34.15 + 37 115.378 717 7 1 -36.5696 53.333 5.55 + 37 103.798 1166 7 0 -36.5672 53.3331 4.15 + 37 118.9 717 6 1 -36.5206 53.334 -24.45 + 37 108.869 1166 6 0 -36.5164 53.335 -25.85 + 37 137.286 718 5 1 -36.4353 53.3511 -54.45 + 37 122.92 1166 5 0 -36.4312 53.3524 -55.85 + 37 99.53 718 4 1 -36.3494 53.379 -84.45 + 37 97.6852 1166 4 0 -36.344 53.3792 -85.85 + 37 122.273 719 3 1 -36.2354 53.3812 -114.45 + 37 88.3134 1166 3 0 -36.231 53.3814 -115.85 + 37 113.017 719 2 1 -36.1463 53.3835 -144.45 + 37 124.167 1166 2 0 -36.1423 53.3823 -145.85 + 37 154.366 719 1 1 -36.0592 53.3566 -174.45 + 37 284.362 1166 1 0 -36.0548 53.3531 -175.85 + 37 110.26 720 0 1 -35.9596 53.278 -204.45 + 37 81.7814 1166 0 0 -35.9546 53.2731 -205.85 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 8.73627 LIN +Particle energy: 5.38885 LIN Particle: proton Event: 38 Number of tracker hits in this event: 20 - 38 136.599 443 9 1 -91.5293 74.9126 65.55 - 38 168.852 1274 9 0 -91.5291 74.9126 64.15 - 38 144.615 443 8 1 -91.5246 74.9094 35.55 - 38 199.01 1274 8 0 -91.5237 74.9095 34.15 - 38 136.587 443 7 1 -91.5045 74.9066 5.55 - 38 147.84 1274 7 0 -91.5033 74.9059 4.15 - 38 124.416 443 6 1 -91.4784 74.8927 -24.45 - 38 136.378 1274 6 0 -91.4772 74.8923 -25.85 - 38 113.136 443 5 1 -91.4567 74.8836 -54.45 - 38 97.7827 1274 5 0 -91.4562 74.883 -55.85 - 38 120.061 443 4 1 -91.4472 74.8689 -84.45 - 38 129.252 1274 4 0 -91.4466 74.8683 -85.85 - 38 155.1 443 3 1 -91.4354 74.8547 -114.45 - 38 137.418 1274 3 0 -91.4351 74.8536 -115.85 - 38 153.958 443 2 1 -91.4288 74.8303 -144.45 - 38 109.47 1273 2 0 -91.4282 74.8295 -145.85 - 38 121.948 443 1 1 -91.4188 74.8122 -174.45 - 38 133.669 1273 1 0 -91.4198 74.8115 -175.85 - 38 82.1838 443 0 1 -91.4382 74.794 -204.45 - 38 118.913 1273 0 0 -91.4396 74.7934 -205.85 -Number of digits in this event: 16 + 38 132.312 1520 9 1 124.24 7.58888 65.55 + 38 211.906 937 9 0 124.239 7.58941 64.15 + 38 131.264 1520 8 1 124.233 7.60227 35.55 + 38 91.8551 937 8 0 124.233 7.60087 34.15 + 38 111.198 1520 7 1 124.23 7.57697 5.55 + 38 137.331 937 7 0 124.231 7.57573 4.15 + 38 109.563 1520 6 1 124.245 7.54397 -24.45 + 38 93.8187 937 6 0 124.244 7.54357 -25.85 + 38 100.999 1520 5 1 124.231 7.53035 -54.45 + 38 108.951 937 5 0 124.231 7.53069 -55.85 + 38 303.942 1520 4 1 124.229 7.53539 -84.45 + 38 122.137 937 4 0 124.23 7.53579 -85.85 + 38 92.3928 1520 3 1 124.275 7.62556 -114.45 + 38 104.988 937 3 0 124.277 7.63072 -115.85 + 38 104.237 1520 2 1 124.32 7.73095 -144.45 + 38 112.786 938 2 0 124.323 7.73424 -145.85 + 38 200.269 1521 1 1 124.374 7.79688 -174.45 + 38 315.469 938 1 0 124.377 7.80005 -175.85 + 38 102.56 1521 0 1 124.434 7.85953 -204.45 + 38 98.0092 939 0 0 124.438 7.86249 -205.85 +Number of digits in this event: 9 Using G4ParticleGun... -Particle energy: 6.31797 LIN +Particle energy: 9.1541 LIN Particle: proton Event: 39 -Number of tracker hits in this event: 30 - 39 122.57 900 11 1 0.0745049 -58.9798 125.55 - 39 223.23 605 11 0 0.0745999 -58.9793 124.15 - 39 166.397 900 10 1 0.0758815 -58.9694 95.55 - 39 116.149 605 10 0 0.0772343 -58.9696 94.15 - 39 164.081 900 9 1 0.102678 -58.9708 65.55 - 39 103.868 605 9 0 0.104957 -58.9706 64.15 - 39 111.012 900 8 1 0.149451 -58.9651 35.55 - 39 167.071 605 8 0 0.150586 -58.9646 34.15 - 39 162.642 900 7 1 0.17296 -58.9517 5.55 - 39 119.857 605 7 0 0.174904 -58.9508 4.15 - 39 126.15 900 6 1 0.217835 -58.9301 -24.45 - 39 133.546 605 6 0 0.219031 -58.9288 -25.85 - 39 105.044 900 5 1 0.241896 -58.898 -54.45 - 39 115.175 605 5 0 0.241898 -58.8962 -55.85 - 39 127.274 900 4 1 0.242992 -58.8548 -84.45 - 39 197.354 605 4 0 0.243354 -58.8566 -85.85 - 39 135.789 901 3 1 0.256404 -58.8908 -114.45 - 39 113.388 605 3 0 0.2566 -58.8932 -115.85 - 39 108.117 901 2 1 0.259552 -58.9453 -144.45 - 39 116.954 605 2 0 0.259374 -58.9475 -145.85 - 39 134.187 901 1 1 0.259494 -58.9936 -174.45 - 39 139.397 605 1 0 0.260207 -58.9947 -175.85 - 39 127.595 901 0 1 0.274438 -59.0209 -204.45 - 39 112.023 605 0 0 0.276704 -59.0216 -205.85 - 39 21.9597 927 2 1 5.62959 -90.3136 -144.805 - 39 56.0961 779 0 1 -24.2463 -26.2218 -204.607 - 39 203.751 1127 0 1 45.5446 -101.42 -204.618 - 39 248.068 397 8 0 -30.7979 -100.585 33.75 - 39 13.0459 398 8 0 -30.9531 -100.55 33.7882 - 39 308.796 893 11 1 -1.36362 -59.8633 125.15 -Number of digits in this event: 20 +Number of tracker hits in this event: 21 + 39 139.468 338 9 1 -112.397 -65.3288 65.55 + 39 128.635 573 9 0 -112.397 -65.329 64.15 + 39 111.421 338 8 1 -112.397 -65.3322 35.55 + 39 111.727 573 8 0 -112.396 -65.3316 34.15 + 39 116.752 338 7 1 -112.381 -65.321 5.55 + 39 128.191 573 7 0 -112.379 -65.3219 4.15 + 39 119.975 338 6 1 -112.351 -65.3428 -24.45 + 39 111.092 573 6 0 -112.349 -65.3438 -25.85 + 39 109.358 339 5 1 -112.307 -65.365 -54.45 + 39 128.121 573 5 0 -112.305 -65.3658 -55.85 + 39 121.975 339 4 1 -112.261 -65.3845 -84.45 + 39 328.933 573 4 0 -112.259 -65.3853 -85.85 + 39 102.405 339 3 1 -112.211 -65.4059 -114.45 + 39 134.409 573 3 0 -112.208 -65.407 -115.85 + 39 112.346 340 2 1 -112.148 -65.4325 -144.45 + 39 118.305 573 2 0 -112.145 -65.4338 -145.85 + 39 126.246 340 1 1 -112.074 -65.4586 -174.45 + 39 107.599 572 1 0 -112.07 -65.4603 -175.85 + 39 92.8951 340 0 1 -111.995 -65.4934 -204.45 + 39 166.361 572 0 0 -111.991 -65.4953 -205.85 + 39 155.19 574 4 0 -112.457 -65.2498 -86.1139 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 6.6838 LIN +Particle energy: 8.6932 LIN Particle: proton Event: 40 Number of tracker hits in this event: 24 - 40 160.884 1472 9 1 114.562 70.4751 65.55 - 40 130.23 1252 9 0 114.562 70.4749 64.15 - 40 129.508 1472 8 1 114.565 70.4734 35.55 - 40 116.753 1252 8 0 114.564 70.4734 34.15 - 40 110.076 1471 7 1 114.538 70.4755 5.55 - 40 119.734 1252 7 0 114.536 70.4758 4.15 - 40 174.822 1471 6 1 114.503 70.483 -24.45 - 40 104.787 1252 6 0 114.502 70.4828 -25.85 - 40 134.651 1471 5 1 114.489 70.4814 -54.45 - 40 144.616 1252 5 0 114.488 70.4797 -55.85 - 40 109.277 1471 4 1 114.468 70.4443 -84.45 - 40 114.578 1251 4 0 114.465 70.4433 -85.85 - 40 109.57 1471 3 1 114.416 70.423 -114.45 - 40 187.417 1251 3 0 114.414 70.4206 -115.85 - 40 103.113 1471 2 1 114.371 70.375 -144.45 - 40 149.103 1251 2 0 114.371 70.3717 -145.85 - 40 117.459 1471 1 1 114.356 70.3015 -174.45 - 40 96.9338 1251 1 0 114.357 70.2977 -175.85 - 40 100.187 1471 0 1 114.365 70.2206 -204.45 - 40 119.076 1250 0 0 114.366 70.217 -205.85 - 40 79.292 1472 5 1 114.55 70.4981 -54.5818 - 40 50.5539 1473 5 1 114.75 70.5153 -54.7844 - 40 122.283 1251 5 0 116.065 70.4499 -55.9749 - 40 101.51 1592 4 1 138.75 65.7236 -84.5635 -Number of digits in this event: 10 + 40 99.707 889 11 0 -83.366 -2.21274 124.15 + 40 118.161 483 10 1 -83.3634 -2.2107 95.55 + 40 133.115 889 10 0 -83.3634 -2.20981 94.15 + 40 161.085 483 9 1 -83.3652 -2.18988 65.55 + 40 105.036 889 9 0 -83.3653 -2.18857 64.15 + 40 142.498 483 8 1 -83.3692 -2.15677 35.55 + 40 166.171 889 8 0 -83.3696 -2.15564 34.15 + 40 223.358 483 7 1 -83.3779 -2.13312 5.55 + 40 165.756 889 7 0 -83.3775 -2.13207 4.15 + 40 111.687 483 6 1 -83.372 -2.11434 -24.45 + 40 115.048 889 6 0 -83.3715 -2.11266 -25.85 + 40 187.529 483 5 1 -83.3616 -2.08044 -54.45 + 40 115.368 889 5 0 -83.3618 -2.07756 -55.85 + 40 124.438 483 4 1 -83.3649 -2.01646 -84.45 + 40 103.216 890 4 0 -83.3648 -2.01455 -85.85 + 40 120.052 483 3 1 -83.3644 -1.97502 -114.45 + 40 126.71 890 3 0 -83.3641 -1.97253 -115.85 + 40 105.684 483 2 1 -83.3575 -1.91762 -144.45 + 40 95.2543 890 2 0 -83.3572 -1.91442 -145.85 + 40 119.274 483 1 1 -83.3511 -1.85118 -174.45 + 40 172.16 891 1 0 -83.3512 -1.84809 -175.85 + 40 103.551 483 0 1 -83.3526 -1.78216 -204.45 + 40 138.14 891 0 0 -83.353 -1.77907 -205.85 + 40 201.385 484 7 1 -83.25 -1.96413 5.26012 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 5.8958 LIN +Particle energy: 8.41023 LIN Particle: proton Event: 41 -Number of tracker hits in this event: 20 - 41 91.2937 728 7 1 -34.3108 142.919 5.55 - 41 119.41 1613 7 0 -34.3109 142.919 4.15 - 41 166.051 728 6 1 -34.3218 142.932 -24.45 - 41 99.2113 1613 6 0 -34.321 142.932 -25.85 - 41 143.852 728 5 1 -34.3022 142.921 -54.45 - 41 111.275 1613 5 0 -34.3028 142.92 -55.85 - 41 115.608 728 4 1 -34.3114 142.89 -84.45 - 41 133.597 1613 4 0 -34.3129 142.888 -85.85 - 41 99.4975 728 3 1 -34.3461 142.855 -114.45 - 41 153.371 1613 3 0 -34.347 142.852 -115.85 - 41 113.312 728 2 1 -34.3664 142.789 -144.45 - 41 100.19 1613 2 0 -34.3664 142.786 -145.85 - 41 193.303 728 1 1 -34.3638 142.728 -174.45 - 41 132.517 1612 1 0 -34.3636 142.726 -175.85 - 41 138.316 728 0 1 -34.3635 142.689 -204.45 - 41 125.385 1612 0 0 -34.3633 142.688 -205.85 - 41 39.0936 1292 2 0 6.05201 78.65 -146.214 - 41 82.0677 727 1 1 -34.45 142.722 -174.686 - 41 8.85179 726 1 1 -34.65 142.663 -174.833 - 41 426.251 1609 1 0 -35.3754 142.04 -175.85 -Number of digits in this event: 13 -Using G4ParticleGun... -Particle energy: 8.92776 LIN -Particle: proton -Event: 42 -Number of tracker hits in this event: 17 - 42 97.5821 1601 7 1 140.352 -46.8693 5.55 - 42 116.657 665 7 0 140.352 -46.8692 4.15 - 42 115.023 1601 6 1 140.35 -46.866 -24.45 - 42 188.981 665 6 0 140.351 -46.8654 -25.85 - 42 144.236 1601 5 1 140.353 -46.8512 -54.45 - 42 135.302 666 5 0 140.353 -46.8487 -55.85 - 42 36.4106 1600 4 1 140.35 -46.7916 -84.45 - 42 53.862 1601 4 1 140.35 -46.7912 -84.6365 - 42 109.579 666 4 0 140.35 -46.789 -85.85 - 42 121.429 1601 3 1 140.356 -46.7338 -114.45 - 42 105 666 3 0 140.356 -46.7307 -115.85 - 42 129.705 1601 2 1 140.355 -46.6627 -144.45 - 42 149.465 666 2 0 140.355 -46.6592 -145.85 - 42 88.9125 1601 1 1 140.354 -46.5869 -174.45 - 42 105.127 667 1 0 140.354 -46.5847 -175.85 - 42 114.366 1601 0 1 140.356 -46.5393 -204.45 - 42 124.454 667 0 0 140.356 -46.5369 -205.85 -Number of digits in this event: 8 -Using G4ParticleGun... -Particle energy: 8.08561 LIN -Particle: proton -Event: 43 -Number of tracker hits in this event: 58 - 43 138.319 737 10 1 -32.4703 104.381 95.55 - 43 172.347 1421 10 0 -32.4709 104.382 94.15 - 43 170.144 737 9 1 -32.4839 104.381 65.55 - 43 83.2449 1421 9 0 -32.4856 104.381 64.15 - 43 192.763 737 8 1 -32.5226 104.37 35.55 - 43 95.8093 1421 8 0 -32.5237 104.37 34.15 - 43 97.8878 737 7 1 -32.5452 104.372 5.55 - 43 113.04 1421 7 0 -32.546 104.371 4.15 - 43 115.113 737 6 1 -32.5628 104.355 -24.45 - 43 111.728 1421 6 0 -32.5644 104.354 -25.85 - 43 113.822 737 5 1 -32.5991 104.332 -54.45 - 43 120.919 1420 5 0 -32.6008 104.331 -55.85 - 43 111.453 737 4 1 -32.6332 104.305 -84.45 - 43 112.748 1420 4 0 -32.6348 104.303 -85.85 - 43 137.939 736 3 1 -32.6641 104.269 -114.45 - 43 146.157 1420 3 0 -32.6656 104.268 -115.85 - 43 114.399 736 2 1 -32.6973 104.238 -144.45 - 43 123.267 1420 2 0 -32.6981 104.237 -145.85 - 43 120.21 736 1 1 -32.7163 104.204 -174.45 - 43 115.326 1420 1 0 -32.7171 104.202 -175.85 - 43 116.325 736 0 1 -32.7328 104.161 -204.45 - 43 110.725 1420 0 0 -32.7337 104.159 -205.85 - 43 247.848 1269 0 0 -19.5211 74.0135 -206.167 - 43 915.261 1396 0 0 -8.18021 99.5375 -206.25 - 43 17.0004 866 0 1 -6.65663 99.248 -204.85 - 43 432.401 867 0 1 -6.65 99.2468 -204.844 - 43 545.536 868 0 1 -6.45 99.2093 -204.66 - 43 52.1753 869 0 1 -6.25 99.1741 -204.476 - 43 733.41 1366 1 0 26.1015 93.4137 -176.25 - 43 313.849 1365 1 0 26.4592 93.35 -175.938 - 43 364.902 1038 1 1 27.7016 93.1331 -174.85 - 43 358.96 1039 1 1 27.85 93.1072 -174.72 - 43 282.852 1040 1 1 28.05 93.0737 -174.544 - 43 1210.15 1363 2 0 58.6438 92.7864 -146.25 - 43 259.105 1200 2 1 60.1542 92.7683 -144.85 - 43 587.793 1201 2 1 60.25 92.767 -144.761 - 43 497.404 1202 2 1 60.45 92.7645 -144.576 - 43 1232.3 1365 3 0 90.8332 93.2195 -116.25 - 43 40.7352 1360 3 1 92.3347 93.177 -114.85 - 43 508.054 1361 3 1 92.35 93.1763 -114.836 - 43 515.06 1362 3 1 92.55 93.1672 -114.65 - 43 30.6122 1363 3 1 92.75 93.1568 -114.465 - 43 1094.55 1371 4 0 123.191 94.4116 -86.25 - 43 91.4006 1522 4 1 124.729 94.4533 -84.85 - 43 562.322 1523 4 1 124.75 94.4538 -84.8306 - 43 607.268 1524 4 1 124.95 94.4585 -84.6503 - 43 65.1093 1525 4 1 125.15 94.4632 -84.4725 - 43 1370.87 1375 5 0 153.953 95.3322 -56.25 - 43 402.182 1676 5 1 155.402 95.3638 -54.85 - 43 734.765 1677 5 1 155.55 95.3666 -54.7076 - 43 211.516 1678 5 1 155.75 95.3738 -54.5153 - 43 173.943 1648 1 0 -53.1466 149.75 -176.077 - 43 85.7173 736 8 1 -32.65 104.498 35.3819 - 43 149.059 1425 8 0 -33.562 105.169 34.15 - 43 83.158 643 7 1 -51.4366 120.167 5.55 - 43 27.1485 642 7 1 -51.45 120.202 5.46964 - 43 36.8863 1501 7 0 -51.425 120.363 4.15 - 43 76.7185 1500 7 0 -51.3947 120.35 3.99661 -Number of digits in this event: 37 -Using G4ParticleGun... -Particle energy: 6.20409 LIN -Particle: proton -Event: 44 -Number of tracker hits in this event: 32 - 44 105.119 386 8 1 -102.799 89.3759 35.55 - 44 131.109 1346 8 0 -102.8 89.3764 34.15 - 44 105.533 386 7 1 -102.817 89.3889 5.55 - 44 137.421 1346 7 0 -102.818 89.3884 4.15 - 44 241.426 386 6 1 -102.83 89.3738 -24.45 - 44 223.605 1346 6 0 -102.83 89.3737 -25.85 - 44 157.666 386 5 1 -102.825 89.3742 -54.45 - 44 93.9838 1346 5 0 -102.825 89.374 -55.85 - 44 96.3497 386 4 1 -102.833 89.3678 -84.45 - 44 91.3661 1346 4 0 -102.834 89.3687 -85.85 - 44 134.334 386 3 1 -102.855 89.3851 -114.45 - 44 108.915 1346 3 0 -102.856 89.3851 -115.85 - 44 147.655 386 2 1 -102.89 89.3788 -144.45 - 44 122.952 1346 2 0 -102.89 89.3783 -145.85 - 44 124.252 386 1 1 -102.904 89.3696 -174.45 - 44 96.8144 1346 1 0 -102.903 89.3688 -175.85 - 44 128.091 386 0 1 -102.879 89.3603 -204.45 - 44 144.053 1346 0 0 -102.877 89.3584 -205.85 - 44 115.031 387 5 1 -102.75 89.0058 -54.5804 - 44 12.7007 388 5 1 -102.55 88.7372 -54.8169 - 44 19.4139 1338 5 0 -101.871 87.6954 -55.85 - 44 104.637 1337 5 0 -101.844 87.65 -55.896 - 44 67.1422 1336 5 0 -101.731 87.45 -56.1152 - 44 103.877 482 4 1 -83.4945 49.7277 -84.4503 - 44 86.9628 483 4 1 -83.45 49.5188 -84.6555 - 44 63.0744 1141 4 0 -83.3485 48.4134 -85.85 - 44 91.2742 1140 4 0 -83.3489 48.25 -86.0539 - 44 2.12813 1139 4 0 -83.3158 48.05 -86.2445 - 44 48.197 1404 4 0 66.7087 101.084 -86.25 - 44 121.555 1405 4 0 66.8005 101.15 -86.233 - 44 51.1908 1406 4 0 67.0556 101.35 -86.191 - 44 32.8416 1407 4 0 67.1283 101.55 -86.2274 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 4.47996 LIN -Particle: proton -Event: 45 -Number of tracker hits in this event: 26 - 45 150.164 760 11 1 -27.8669 -48.3064 125.55 - 45 112.767 658 11 0 -27.8658 -48.3059 124.15 - 45 155.417 761 10 1 -27.8457 -48.2902 95.55 - 45 115.86 658 10 0 -27.8428 -48.2875 94.15 - 45 175.448 761 9 1 -27.7827 -48.2315 65.55 - 45 174.286 659 9 0 -27.7793 -48.2281 64.15 - 45 113.202 761 8 1 -27.7129 -48.1593 35.55 - 45 100.472 659 8 0 -27.7107 -48.1573 34.15 - 45 105.051 761 7 1 -27.6697 -48.1166 5.55 - 45 119.777 659 7 0 -27.6675 -48.1146 4.15 - 45 129.103 762 6 1 -27.623 -48.0749 -24.45 - 45 171.498 659 6 0 -27.6193 -48.0724 -25.85 - 45 108.158 762 5 1 -27.5479 -48.0217 -54.45 - 45 113.717 660 5 0 -27.5468 -48.0188 -55.85 - 45 105.725 762 4 1 -27.5281 -47.9672 -84.45 - 45 210.282 660 4 0 -27.5251 -47.967 -85.85 - 45 104.537 762 3 1 -27.4653 -47.96 -114.45 - 45 115.165 660 3 0 -27.4622 -47.9591 -115.85 - 45 111.742 763 2 1 -27.3993 -47.9402 -144.45 - 45 92.719 660 2 0 -27.3952 -47.9409 -145.85 - 45 96.5564 763 1 1 -27.3198 -47.9555 -174.45 - 45 226.096 660 1 0 -27.3159 -47.9556 -175.85 - 45 183.315 764 0 1 -27.232 -47.9559 -204.45 - 45 232.986 660 0 0 -27.2289 -47.9566 -205.85 - 45 20.8764 1387 4 1 97.5939 -58.6481 -84.5531 - 45 464.755 661 1 0 -27.5875 -47.8498 -176.097 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 5.2221 LIN -Particle: proton -Event: 46 -Number of tracker hits in this event: 25 - 46 105.241 1208 11 1 61.6998 -39.7897 125.55 - 46 106.918 701 11 0 61.6984 -39.7882 124.15 - 46 124.987 1208 10 1 61.6658 -39.7635 95.55 - 46 97.4062 701 10 0 61.6665 -39.762 94.15 - 46 129.089 1208 9 1 61.6822 -39.7328 65.55 - 46 155.932 701 9 0 61.6827 -39.7306 64.15 - 46 101.322 1208 8 1 61.6916 -39.6886 35.55 - 46 110.564 701 8 0 61.6918 -39.6865 34.15 - 46 84.814 1208 7 1 61.7019 -39.6421 5.55 - 46 160.755 702 7 0 61.7013 -39.6386 4.15 - 46 147.05 1208 6 1 61.6845 -39.5673 -24.45 - 46 142.259 702 6 0 61.6826 -39.5628 -25.85 - 46 107.064 1207 5 1 61.6439 -39.4649 -54.45 - 46 109.8 702 5 0 61.6426 -39.4596 -55.85 - 46 101.059 1207 4 1 61.6181 -39.3515 -84.45 - 46 116.625 703 4 0 61.6167 -39.3452 -85.85 - 46 284.205 1207 3 1 61.5867 -39.2145 -114.45 - 46 139.69 704 3 0 61.5853 -39.2069 -115.85 - 46 182.337 1207 2 1 61.5595 -39.0509 -144.45 - 46 93.9584 705 2 0 61.557 -39.0438 -145.85 - 46 200.545 1207 1 1 61.5087 -38.9025 -174.45 - 46 182.199 705 1 0 61.5058 -38.8953 -175.85 - 46 108.928 1206 0 1 61.4472 -38.7408 -204.45 - 46 106.766 706 0 0 61.4453 -38.7313 -205.85 - 46 211.462 1074 2 0 165.093 35.0369 -145.893 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 6.6314 LIN -Particle: proton -Event: 47 -Number of tracker hits in this event: 51 - 47 129.368 804 11 1 -19.0972 43.62 125.55 - 47 148.426 1117 11 0 -19.0973 43.6206 124.15 - 47 103.776 804 10 1 -19.0993 43.6288 95.55 - 47 131.04 1117 10 0 -19.0993 43.6304 94.15 - 47 171.186 804 9 1 -19.0996 43.6662 65.55 - 47 81.4924 1118 9 0 -19.1004 43.6678 64.15 - 47 126.953 804 8 1 -19.1186 43.6992 35.55 - 47 154.742 1118 8 0 -19.1189 43.7009 34.15 - 47 108.798 804 7 1 -19.1236 43.7383 5.55 - 47 107.456 1118 7 0 -19.1249 43.7405 4.15 - 47 127.292 804 6 1 -19.1489 43.7892 -24.45 - 47 110.259 1118 6 0 -19.1497 43.7924 -25.85 - 47 132.771 804 5 1 -19.1668 43.8544 -54.45 - 47 119.187 1119 5 0 -19.1679 43.8565 -55.85 - 47 188.356 804 4 1 -19.1896 43.9041 -84.45 - 47 190.968 1119 4 0 -19.1912 43.9072 -85.85 - 47 124.119 804 3 1 -19.2242 43.9687 -114.45 - 47 146.935 1119 3 0 -19.2266 43.9718 -115.85 - 47 94.5583 803 2 1 -19.2712 44.034 -144.45 - 47 88.3206 1119 2 0 -19.2731 44.0373 -145.85 - 47 123.679 803 1 1 -19.3111 44.1017 -174.45 - 47 164.799 1120 1 0 -19.3124 44.1046 -175.85 - 47 148.765 803 0 1 -19.3361 44.1581 -204.45 - 47 102.583 1120 0 0 -19.3376 44.16 -205.85 - 47 459.495 1186 0 0 89.4368 57.3838 -206.25 - 47 135.701 1187 0 0 89.7783 57.45 -206.146 - 47 130.878 1218 0 0 -22.9453 63.8117 -206.25 - 47 44.116 1219 0 0 -23.0474 63.8501 -205.989 - 47 72.1814 781 0 1 -23.7253 64.4619 -204.85 - 47 88.6035 780 0 1 -23.85 64.5894 -204.672 - 47 17.389 779 0 1 -24.05 64.7711 -204.464 - 47 124.011 1187 1 0 -64.3783 57.5579 -176.25 - 47 45.071 1186 1 0 -64.6888 57.45 -175.975 - 47 59.6423 573 1 1 -65.349 56.9278 -174.85 - 47 127.273 572 1 1 -65.4501 56.8706 -174.748 - 47 118.226 571 1 1 -65.65 56.6117 -174.707 - 47 22.0408 1174 1 0 -66.3272 54.9203 -175.85 - 47 294.819 1173 1 0 -66.3583 54.8497 -175.903 - 47 118.45 1172 1 0 -66.41 54.6498 -175.937 - 47 101.593 1171 1 0 -66.6106 54.45 -175.892 - 47 4.10103 560 1 1 -68.0359 53.6297 -174.85 - 47 81.7055 559 1 1 -68.0503 53.6211 -174.838 - 47 357.696 558 1 1 -68.25 53.6635 -174.727 - 47 31.3545 557 1 1 -68.4501 53.8702 -174.73 - 47 89.4839 700 10 1 -39.8627 125.685 95.15 - 47 2.63404 871 8 0 -111.68 -5.85 34.0661 - 47 3.83921 339 8 1 -112.344 -5.44288 35.15 - 47 122.452 338 8 1 -112.35 -5.44014 35.1587 - 47 314.705 337 8 1 -112.55 -5.53521 35.3552 - 47 9.76179 1120 4 0 -19.2291 44.05 -86.2359 - 47 143.382 1426 4 0 -47.6241 105.486 -86.25 -Number of digits in this event: 29 -Using G4ParticleGun... -Particle energy: 8.79835 LIN -Particle: proton -Event: 48 -Number of tracker hits in this event: 23 - 48 97.6999 293 9 1 -121.365 41.7794 65.55 - 48 170.016 1108 9 0 -121.362 41.7774 64.15 - 48 150.045 294 8 1 -121.29 41.7397 35.55 - 48 105.758 1108 8 0 -121.286 41.7379 34.15 - 48 125.731 294 7 1 -121.212 41.7048 5.55 - 48 107.05 1108 7 0 -121.208 41.7023 4.15 - 48 126.943 295 6 1 -121.13 41.6513 -24.45 - 48 118.685 1107 6 0 -121.126 41.6491 -25.85 - 48 148.877 295 5 1 -121.032 41.6154 -54.45 - 48 114.008 1107 5 0 -121.027 41.6139 -55.85 - 48 143.721 296 4 1 -120.921 41.5819 -84.45 - 48 102.995 1107 4 0 -120.916 41.5808 -85.85 - 48 106.352 296 3 1 -120.815 41.5601 -114.45 - 48 148.173 1107 3 0 -120.809 41.559 -115.85 - 48 107.717 297 2 1 -120.691 41.5359 -144.45 - 48 106.653 1107 2 0 -120.685 41.5356 -145.85 - 48 93.0964 297 1 1 -120.562 41.5293 -174.45 - 48 146.498 1107 1 0 -120.557 41.5281 -175.85 - 48 131.714 298 0 1 -120.446 41.5031 -204.45 - 48 121.892 1107 0 0 -120.441 41.5021 -205.85 - 48 83.4976 1107 9 0 -121.5 41.65 63.8505 - 48 137.899 1174 9 0 -138.872 54.8832 63.75 - 48 184.625 1175 9 0 -138.75 55.0502 63.9204 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 8.83197 LIN -Particle: proton -Event: 49 -Number of tracker hits in this event: 18 - 49 98.5044 204 8 1 -139.173 -32.8193 35.55 - 49 116.549 736 8 0 -139.172 -32.8191 34.15 - 49 116.257 204 7 1 -139.164 -32.8169 5.55 - 49 100.56 736 7 0 -139.164 -32.8175 4.15 - 49 114.092 205 6 1 -139.148 -32.825 -24.45 - 49 128.253 736 6 0 -139.148 -32.8253 -25.85 - 49 121.92 204 5 1 -139.155 -32.8326 -54.45 - 49 117.014 736 5 0 -139.155 -32.834 -55.85 - 49 106.97 204 4 1 -139.153 -32.8648 -84.45 - 49 128.22 735 4 0 -139.153 -32.8657 -85.85 - 49 123.673 205 3 1 -139.143 -32.8836 -114.45 - 49 441.092 735 3 0 -139.142 -32.8836 -115.85 - 49 111.95 205 2 1 -139.126 -32.8847 -144.45 - 49 130.083 735 2 0 -139.125 -32.8853 -145.85 - 49 146.752 205 1 1 -139.11 -32.8934 -174.45 - 49 111.849 735 1 0 -139.109 -32.8932 -175.85 - 49 102.153 205 0 1 -139.1 -32.8866 -204.45 - 49 138.914 735 0 0 -139.099 -32.8861 -205.85 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 8.53588 LIN -Particle: proton -Event: 50 -Number of tracker hits in this event: 30 - 50 107.521 1063 11 1 32.8272 -33.6068 125.55 - 50 115.363 732 11 0 32.8268 -33.6074 124.15 - 50 123.171 1063 10 1 32.817 -33.6216 95.55 - 50 147.945 732 10 0 32.8169 -33.6226 94.15 - 50 110.304 1063 9 1 32.8156 -33.6406 65.55 - 50 187.777 732 9 0 32.816 -33.6414 64.15 - 50 108.116 1063 8 1 32.8277 -33.6577 35.55 - 50 120.255 731 8 0 32.8281 -33.6583 34.15 - 50 105.244 1063 7 1 32.8388 -33.6703 5.55 - 50 133.94 731 7 0 32.8391 -33.6707 4.15 - 50 109.965 1063 6 1 32.8421 -33.6762 -24.45 - 50 162.428 731 6 0 32.8418 -33.6756 -25.85 - 50 99.0704 1063 5 1 32.8348 -33.6564 -54.45 - 50 138.068 731 5 0 32.8341 -33.6558 -55.85 - 50 94.7492 1063 4 1 32.8221 -33.6424 -84.45 - 50 97.3992 732 4 0 32.8229 -33.6419 -85.85 - 50 131.717 1063 3 1 32.8417 -33.6324 -114.45 - 50 129.793 732 3 0 32.8425 -33.6325 -115.85 - 50 113.97 1064 2 1 32.8531 -33.6317 -144.45 - 50 217.362 732 2 0 32.8536 -33.6317 -145.85 - 50 137.273 1064 1 1 32.8627 -33.6324 -174.45 - 50 197.355 732 1 0 32.8631 -33.6324 -175.85 - 50 163.587 1064 0 1 32.8718 -33.6351 -204.45 - 50 222.539 732 0 0 32.8731 -33.635 -205.85 - 50 55.1113 1024 0 0 88.6814 25.05 -205.984 - 50 68.4237 1355 0 1 91.15 24.735 -204.642 - 50 3.62895 842 0 0 10.4588 -11.65 -206.209 - 50 128.151 843 0 0 9.95507 -11.45 -206.124 - 50 2.17009 1375 8 1 95.1626 0.05 35.4614 - 50 13.2974 1374 8 1 95.0061 -0.691071 35.4742 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 9.02497 LIN -Particle: proton -Event: 51 -Number of tracker hits in this event: 32 - 51 126.832 928 10 1 5.69844 -112.727 95.55 - 51 106.173 337 10 0 5.6982 -112.728 94.15 - 51 220.299 928 9 1 5.69606 -112.751 65.55 - 51 103.594 336 9 0 5.69543 -112.752 64.15 - 51 134.647 928 8 1 5.6808 -112.769 35.55 - 51 87.3766 336 8 0 5.67893 -112.77 34.15 - 51 165.738 927 7 1 5.63816 -112.801 5.55 - 51 109.289 336 7 0 5.63655 -112.802 4.15 - 51 148.836 927 6 1 5.60248 -112.838 -24.45 - 51 101.828 336 6 0 5.60064 -112.839 -25.85 - 51 96.6623 927 5 1 5.56397 -112.866 -54.45 - 51 106.458 336 5 0 5.5631 -112.866 -55.85 - 51 135.805 927 4 1 5.54526 -112.869 -84.45 - 51 117.629 336 4 0 5.54457 -112.87 -85.85 - 51 141.668 927 3 1 5.52996 -112.89 -114.45 - 51 105.242 336 3 0 5.52934 -112.891 -115.85 - 51 138.853 927 2 1 5.51525 -112.908 -144.45 - 51 210.451 336 2 0 5.51497 -112.909 -145.85 - 51 115.945 927 1 1 5.50985 -112.93 -174.45 - 51 106.844 336 1 0 5.50948 -112.931 -175.85 - 51 126.173 927 0 1 5.50128 -112.95 -204.45 - 51 133.367 335 0 0 5.50082 -112.951 -205.85 - 51 71.5801 929 9 1 5.85 -112.843 65.2862 - 51 57.578 334 9 0 7.91152 -113.314 64.15 - 51 213.797 333 9 0 8.08645 -113.35 64.0686 - 51 183.673 323 9 0 73.2655 -115.427 63.75 - 51 8.35442 1265 9 1 73.058 -115.416 65.15 - 51 145.773 1264 9 1 73.05 -115.411 65.189 - 51 39.6183 1263 9 1 72.7605 -115.642 65.5499 - 51 81.1374 1262 9 1 72.65 -115.591 65.4675 - 51 285.549 1261 9 1 72.45 -115.373 65.3725 - 51 240.817 1260 9 1 72.2497 -115.083 65.507 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 7.97691 LIN -Particle: proton -Event: 52 -Number of tracker hits in this event: 24 - 52 120.383 1091 11 1 38.3462 38.5909 125.55 - 52 139.798 1092 11 0 38.3467 38.5902 124.15 - 52 94.9592 1091 10 1 38.3595 38.5768 95.55 - 52 96.432 1092 10 0 38.3602 38.5751 94.15 - 52 119.751 1091 9 1 38.3746 38.5426 65.55 - 52 140.81 1092 9 0 38.3756 38.541 64.15 - 52 115.385 1091 8 1 38.3972 38.5068 35.55 - 52 104.158 1092 8 0 38.398 38.5047 34.15 - 52 111.655 1091 7 1 38.4186 38.4585 5.55 - 52 108.585 1092 7 0 38.4199 38.456 4.15 - 52 109.418 1091 6 1 38.4454 38.4043 -24.45 - 52 111.951 1091 6 0 38.4452 38.4007 -25.85 - 52 98.0289 1091 5 1 38.4427 38.3225 -54.45 - 52 137.35 1091 5 0 38.4426 38.3194 -55.85 - 52 101.678 1091 4 1 38.4442 38.2583 -84.45 - 52 120.098 1091 4 0 38.4443 38.2553 -85.85 - 52 111.49 1091 3 1 38.4487 38.194 -114.45 - 52 108.33 1090 3 0 38.4486 38.1913 -115.85 - 52 111.588 1091 2 1 38.4439 38.1367 -144.45 - 52 100.495 1090 2 0 38.4445 38.1342 -145.85 - 52 132.866 1092 1 1 38.4549 38.0863 -174.45 - 52 128.15 1090 1 0 38.4552 38.0835 -175.85 - 52 105.19 1092 0 1 38.4574 38.0263 -204.45 - 52 163.569 1089 0 0 38.4568 38.0232 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 1.37183 LIN -Particle: proton -Event: 53 -Number of tracker hits in this event: 39 - 53 113.15 605 11 1 -58.8695 54.508 125.55 - 53 106.258 1172 11 0 -58.8688 54.5084 124.15 - 53 136.327 606 10 1 -58.8459 54.5212 95.55 - 53 110.685 1172 10 0 -58.8494 54.519 94.15 - 53 119.686 605 9 1 -58.9273 54.4737 65.55 - 53 226.674 1172 9 0 -58.9279 54.4735 64.15 - 53 132.966 605 8 1 -58.9447 54.4742 35.55 - 53 99.435 1172 8 0 -58.9397 54.4805 34.15 - 53 160.279 606 7 1 -58.8456 54.5962 5.55 - 53 157.511 1172 7 0 -58.845 54.6035 4.15 - 53 135.91 606 6 1 -58.8335 54.762 -24.45 - 53 107.859 1173 6 0 -58.8342 54.7712 -25.85 - 53 225.22 605 5 1 -58.8578 54.9509 -54.45 - 53 122.061 1174 5 0 -58.8611 54.9582 -55.85 - 53 154.163 605 4 1 -58.9268 55.1096 -84.45 - 53 144.607 1175 4 0 -58.9236 55.1144 -85.85 - 53 150.49 605 3 1 -58.8645 55.2405 -114.45 - 53 118.453 1175 3 0 -58.8597 55.2475 -115.85 - 53 159.672 606 2 1 -58.7569 55.3845 -144.45 - 53 126.063 1176 2 0 -58.7501 55.3917 -145.85 - 53 143.125 607 1 1 -58.6106 55.5405 -174.45 - 53 127.621 1177 1 0 -58.6057 55.5483 -175.85 - 53 117.771 607 0 1 -58.516 55.725 -204.45 - 53 123.843 1178 0 0 -58.517 55.7379 -205.85 - 53 15.5529 1302 3 0 -100.104 80.4553 -116.25 - 53 131.364 1301 3 0 -100.104 80.45 -116.19 - 53 165.437 394 3 1 -101.179 80.5338 -114.85 - 53 151.396 393 3 1 -101.35 80.5334 -114.578 - 53 44.4819 392 3 1 -101.657 80.8543 -114.45 - 53 74.4149 395 3 1 -101.15 81.1038 -114.619 - 53 94.8924 396 3 1 -100.95 81.1586 -114.659 - 53 193.21 1307 3 0 -99.9038 81.4845 -115.85 - 53 201.844 1306 3 0 -99.8985 81.45 -115.962 - 53 35.718 1423 3 0 -98.53 104.898 -116.25 - 53 130.389 1424 3 0 -98.5213 104.95 -116.196 - 53 112.256 408 3 1 -98.5217 105.569 -114.85 - 53 218.526 1246 4 0 -59.0994 69.3883 -86.25 - 53 33.355 1247 4 0 -59.0749 69.45 -86.1499 - 53 70.8207 1222 4 0 -85.2343 64.6168 -86.2499 +Number of tracker hits in this event: 49 + 41 147.89 900 11 1 0.18639 42.5583 125.55 + 41 190.468 1112 11 0 0.186681 42.5577 124.15 + 41 155.27 900 10 1 0.193019 42.5451 95.55 + 41 137.802 1112 10 0 0.192398 42.5443 94.15 + 41 110.436 900 9 1 0.178469 42.5293 65.55 + 41 97.5541 1112 9 0 0.178173 42.5285 64.15 + 41 110.138 900 8 1 0.170528 42.5107 35.55 + 41 86.0514 1112 8 0 0.171027 42.5097 34.15 + 41 171.545 900 7 1 0.181816 42.4908 5.55 + 41 98.429 1112 7 0 0.183157 42.4897 4.15 + 41 112.52 900 6 1 0.209251 42.4687 -24.45 + 41 208.95 1112 6 0 0.210336 42.4666 -25.85 + 41 131.436 900 5 1 0.237714 42.4217 -54.45 + 41 146.194 1111 5 0 0.237673 42.4196 -55.85 + 41 136.332 900 4 1 0.232978 42.3776 -84.45 + 41 95.3915 1111 4 0 0.232003 42.3752 -85.85 + 41 152.207 900 3 1 0.212906 42.3288 -114.45 + 41 97.7407 1111 3 0 0.211548 42.3275 -115.85 + 41 117.769 900 2 1 0.182158 42.2984 -144.45 + 41 126.135 1111 2 0 0.181389 42.2971 -145.85 + 41 136.851 900 1 1 0.16709 42.271 -174.45 + 41 158.068 1111 1 0 0.165567 42.2714 -175.85 + 41 193.5 900 0 1 0.133038 42.2767 -204.45 + 41 125.311 1111 0 0 0.131647 42.2772 -205.85 + 41 230.075 901 10 1 0.349314 42.3756 95.55 + 41 17.8218 1102 10 0 0.579866 40.5047 94.1496 + 41 73.8731 1101 10 0 0.58947 40.45 94.1126 + 41 84.8325 1100 10 0 0.63559 40.2494 93.9568 + 41 6.9284 1099 10 0 0.691898 40.05 93.7656 + 41 15.1905 932 9 1 6.62962 11.5442 65.5497 + 41 113.335 933 9 1 6.65 11.536 65.5225 + 41 77.6072 934 9 1 6.85013 11.5113 65.3052 + 41 75.6785 956 9 0 7.84546 11.3092 64.1498 + 41 339.308 955 9 0 8.03912 11.25 63.9846 + 41 149.312 954 9 0 9.00379 11.0499 63.8179 + 41 164.879 953 9 0 9.42086 10.85 63.8919 + 41 127.701 952 9 0 9.82102 10.65 63.8244 + 41 190.617 951 9 0 10.2775 10.45 63.8989 + 41 172.999 950 9 0 10.7959 10.25 63.874 + 41 73.4496 949 9 0 11.3904 10.05 63.8325 + 41 114 948 9 0 11.56 9.85 63.8317 + 41 240.893 947 9 0 11.7445 9.64975 63.8324 + 41 246.027 963 9 1 12.7485 9.50964 65.15 + 41 67.1343 964 9 1 12.85 9.23144 65.2524 + 41 71.2103 945 9 0 12.7437 9.17653 64.15 + 41 173.005 946 9 0 12.7993 9.25 64.0924 + 41 24.1106 983 9 1 16.65 9.38602 65.2096 + 41 70.945 1410 10 1 102.179 -37.7643 95.55 + 41 136.23 1411 10 1 102.35 -37.8364 95.4808 Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 9.38732 LIN +Particle energy: 1.15433 LIN +Particle: proton +Event: 42 +Number of tracker hits in this event: 25 + 42 124.231 1092 11 1 38.6419 -12.3508 125.55 + 42 142.409 838 11 0 38.6437 -12.3593 124.15 + 42 98.7626 1093 10 1 38.6703 -12.5308 95.55 + 42 222.859 837 10 0 38.6761 -12.5354 94.15 + 42 235.026 1093 9 1 38.7947 -12.6244 65.55 + 42 149.483 837 9 0 38.797 -12.6241 64.15 + 42 144.024 1094 8 1 38.8571 -12.5926 35.55 + 42 133.802 837 8 0 38.8579 -12.5865 34.15 + 42 135.524 1094 7 1 38.8823 -12.4709 5.55 + 42 216.512 837 7 0 38.8826 -12.4652 4.15 + 42 170.439 1094 6 1 38.8963 -12.3709 -24.45 + 42 173.834 838 6 0 38.8969 -12.3658 -25.85 + 42 106.14 1094 5 1 38.9272 -12.2851 -54.45 + 42 129.221 838 5 0 38.9271 -12.2835 -55.85 + 42 117.637 1094 4 1 38.9224 -12.2482 -84.45 + 42 109.136 839 4 0 38.9213 -12.2447 -85.85 + 42 151.305 1094 3 1 38.9026 -12.1729 -114.45 + 42 113.094 839 3 0 38.9001 -12.1656 -115.85 + 42 146.274 1094 2 1 38.8745 -12.0214 -144.45 + 42 115.628 840 2 0 38.8748 -12.0155 -145.85 + 42 176.55 1094 1 1 38.8804 -11.9027 -174.45 + 42 232.424 840 1 0 38.8853 -11.9 -175.85 + 42 110.16 1094 0 1 38.9732 -11.828 -204.45 + 42 146.27 841 0 0 38.9827 -11.8253 -205.85 + 42 3.74586 838 10 0 38.7416 -12.45 93.7537 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 4.38824 LIN +Particle: proton +Event: 43 +Number of tracker hits in this event: 18 + 43 132.426 773 8 1 -25.4423 142.49 35.55 + 43 139.999 1611 8 0 -25.4425 142.49 34.15 + 43 124.06 773 7 1 -25.445 142.493 5.55 + 43 123.578 1611 7 0 -25.4446 142.493 4.15 + 43 122.341 773 6 1 -25.4357 142.481 -24.45 + 43 165.297 1611 6 0 -25.4346 142.48 -25.85 + 43 194.15 773 5 1 -25.4136 142.473 -54.45 + 43 190.072 1611 5 0 -25.414 142.472 -55.85 + 43 119.641 773 4 1 -25.4212 142.46 -84.45 + 43 90.7953 1611 4 0 -25.4216 142.46 -85.85 + 43 161.593 773 3 1 -25.4179 142.453 -114.45 + 43 179.852 1611 3 0 -25.421 142.453 -115.85 + 43 115.372 772 2 1 -25.4883 142.445 -144.45 + 43 120.75 1611 2 0 -25.4933 142.446 -145.85 + 43 146.169 772 1 1 -25.599 142.463 -174.45 + 43 116.764 1611 1 0 -25.603 142.465 -175.85 + 43 118.178 771 0 1 -25.6872 142.514 -204.45 + 43 204.299 1611 0 0 -25.6912 142.516 -205.85 +Number of digits in this event: 14 +Using G4ParticleGun... +Particle energy: 6.4619 LIN +Particle: proton +Event: 44 +Number of tracker hits in this event: 26 + 44 129.742 779 8 1 -24.2408 138.667 35.55 + 44 126.43 1592 8 0 -24.2401 138.667 34.15 + 44 114.033 779 7 1 -24.2261 138.653 5.55 + 44 185.154 1592 7 0 -24.227 138.653 4.15 + 44 110.44 779 6 1 -24.246 138.654 -24.45 + 44 113.837 1592 6 0 -24.2457 138.656 -25.85 + 44 190.348 779 5 1 -24.2393 138.7 -54.45 + 44 318.03 1592 5 0 -24.2395 138.702 -55.85 + 44 100.361 779 4 1 -24.2469 138.731 -84.45 + 44 105.719 1592 4 0 -24.2478 138.732 -85.85 + 44 113.1 778 3 1 -24.2579 138.753 -114.45 + 44 124.459 1593 3 0 -24.2607 138.754 -115.85 + 44 153.876 778 2 1 -24.3126 138.78 -144.45 + 44 195.568 1593 2 0 -24.3146 138.781 -145.85 + 44 111.416 778 1 1 -24.3579 138.797 -174.45 + 44 103.153 1593 1 0 -24.361 138.798 -175.85 + 44 105.592 778 0 1 -24.425 138.811 -204.45 + 44 111.49 1593 0 0 -24.4283 138.813 -205.85 + 44 14.6323 780 5 1 -24.0499 138.738 -54.8077 + 44 336.986 1538 5 0 20.6278 127.835 -56.2499 + 44 25.0341 1003 5 1 20.6626 127.922 -54.85 + 44 156.068 1002 5 1 20.65 127.922 -54.7327 + 44 75.9008 1001 5 1 20.4499 127.715 -54.5538 + 44 214.937 1000 5 1 20.25 127.699 -54.4771 + 44 40.7915 1537 5 0 19.7819 127.75 -55.8764 + 44 196.982 1593 7 0 -24.1669 138.75 4.06028 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 3.04011 LIN +Particle: proton +Event: 45 +Number of tracker hits in this event: 34 + 45 104.483 967 10 1 13.506 -100.612 95.55 + 45 96.8235 397 10 0 13.5058 -100.61 94.15 + 45 113.632 967 9 1 13.5064 -100.578 65.55 + 45 122.124 397 9 0 13.5055 -100.575 64.15 + 45 186.103 967 8 1 13.4907 -100.505 35.55 + 45 99.6579 398 8 0 13.4909 -100.5 34.15 + 45 99.8505 967 7 1 13.5 -100.399 5.55 + 45 82.0695 398 7 0 13.5019 -100.392 4.15 + 45 169.554 967 6 1 13.5345 -100.257 -24.45 + 45 139.667 399 6 0 13.5361 -100.246 -25.85 + 45 138.163 967 5 1 13.5644 -100.031 -54.45 + 45 255.743 400 5 0 13.5677 -100.019 -55.85 + 45 112.464 967 4 1 13.6305 -99.7792 -84.45 + 45 144.813 401 4 0 13.6354 -99.768 -85.85 + 45 125.219 968 3 1 13.7395 -99.5375 -114.45 + 45 138.218 403 3 0 13.7446 -99.5234 -115.85 + 45 80.4436 968 2 1 13.8402 -99.2416 -144.45 + 45 115.771 404 2 0 13.8443 -99.2279 -145.85 + 45 107.777 969 1 1 13.9198 -98.9451 -174.45 + 45 149.615 406 1 0 13.9233 -98.9327 -175.85 + 45 110.534 969 0 1 13.9821 -98.6744 -204.45 + 45 101.666 407 0 0 13.9848 -98.6632 -205.85 + 45 113.092 399 5 0 13.7705 -100.15 -56.0293 + 45 100.526 966 8 1 13.45 -100.76 35.4929 + 45 79.6933 965 8 1 13.25 -100.535 35.474 + 45 87.9645 964 8 1 13.05 -100.318 35.3948 + 45 93.941 963 8 1 12.85 -100.078 35.4038 + 45 67.5919 962 8 1 12.65 -99.8645 35.3912 + 45 87.3753 961 8 1 12.45 -99.7351 35.3559 + 45 99.732 960 8 1 12.25 -99.5622 35.3472 + 45 50.0915 959 8 1 12.05 -99.3777 35.1859 + 45 92.9266 408 8 0 11.2993 -98.456 34.15 + 45 77.744 409 8 0 11.2026 -98.35 34.0588 + 45 104.432 410 8 0 11.084 -98.15 33.877 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 4.09435 LIN +Particle: proton +Event: 46 +Number of tracker hits in this event: 33 + 46 206.421 1028 11 1 25.8186 -24.5556 125.55 + 46 95.8049 777 11 0 25.8181 -24.5561 124.15 + 46 192.817 1028 10 1 25.8089 -24.5692 95.55 + 46 607.724 777 10 0 25.8085 -24.5702 94.15 + 46 89.4405 1028 9 1 25.7914 -24.5953 65.55 + 46 96.04 777 9 0 25.7905 -24.5976 64.15 + 46 146.01 1028 8 1 25.7661 -24.6453 35.55 + 46 215.673 777 8 0 25.7645 -24.6493 34.15 + 46 159.059 776 8 0 25.7642 -24.65 33.9165 + 46 98.9625 1028 7 1 25.7256 -24.7371 5.55 + 46 121.298 776 7 0 25.7243 -24.7408 4.15 + 46 129.306 1028 6 1 25.6996 -24.8165 -24.45 + 46 117.711 776 6 0 25.6971 -24.8196 -25.85 + 46 96.193 1027 5 1 25.6438 -24.8835 -54.45 + 46 109.466 775 5 0 25.6416 -24.8865 -55.85 + 46 101.482 1027 4 1 25.6026 -24.95 -84.45 + 46 106.112 775 4 0 25.602 -24.9534 -85.85 + 46 317.911 1027 3 1 25.5936 -25.011 -114.45 + 46 98.6033 775 3 0 25.5924 -25.0145 -115.85 + 46 95.7759 1027 2 1 25.5694 -25.0909 -144.45 + 46 104.972 774 2 0 25.5687 -25.0948 -145.85 + 46 263.6 1027 1 1 25.5631 -25.1712 -174.45 + 46 86.0794 774 1 0 25.5659 -25.176 -175.85 + 46 102.643 1027 0 1 25.6242 -25.277 -204.45 + 46 140.867 773 0 0 25.6271 -25.282 -205.85 + 46 93.5082 1028 1 1 25.65 -24.7797 -174.605 + 46 13.8254 1029 1 1 25.8504 -24.6968 -174.815 + 46 13.6844 778 1 0 26.7147 -24.2634 -175.85 + 46 111.732 779 1 0 26.7406 -24.25 -175.881 + 46 78.0063 780 1 0 27.0172 -24.05 -176.01 + 46 233.798 1038 1 1 27.7691 -23.7867 -174.85 + 46 154.449 1039 1 1 27.85 -23.7136 -174.741 + 46 160.403 778 8 0 25.7474 -24.45 34.0763 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 2.10417 LIN +Particle: proton +Event: 47 +Number of tracker hits in this event: 24 + 47 107.587 513 11 0 33.4095 -77.4034 124.067 + 47 117.207 1066 10 1 33.3917 -77.4118 95.55 + 47 137.321 513 10 0 33.3901 -77.409 94.15 + 47 157.13 1066 9 1 33.3629 -77.3475 65.55 + 47 127.659 513 9 0 33.3619 -77.3459 64.15 + 47 105.476 1066 8 1 33.3289 -77.3147 35.55 + 47 149.866 513 8 0 33.3274 -77.3143 34.15 + 47 112.155 1066 7 1 33.2975 -77.3137 5.55 + 47 86.6784 513 7 0 33.2956 -77.3128 4.15 + 47 112.3 1066 6 1 33.2531 -77.2877 -24.45 + 47 91.0926 513 6 0 33.2479 -77.2876 -25.85 + 47 236.543 1065 5 1 33.1371 -77.2856 -54.45 + 47 123.323 513 5 0 33.1343 -77.2836 -55.85 + 47 105.462 1065 4 1 33.0618 -77.2548 -84.45 + 47 95.5112 513 4 0 33.0592 -77.2516 -85.85 + 47 118.365 1064 3 1 32.9999 -77.1861 -114.45 + 47 121.151 514 3 0 32.9984 -77.1794 -115.85 + 47 109.862 1064 2 1 32.9525 -77.0464 -144.45 + 47 115.087 515 2 0 32.9519 -77.0409 -145.85 + 47 160.892 1064 1 1 32.9388 -76.9222 -174.45 + 47 103.237 515 1 0 32.9383 -76.917 -175.85 + 47 166.027 1064 0 1 32.9285 -76.802 -204.45 + 47 112.013 516 0 0 32.9282 -76.7981 -205.85 + 47 168.948 1063 1 1 32.85 -76.8956 -174.55 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 5.49347 LIN +Particle: proton +Event: 48 +Number of tracker hits in this event: 27 + 48 124.862 883 11 1 -3.33588 -66.3861 125.55 + 48 113.517 568 11 0 -3.33704 -66.385 124.15 + 48 117.048 883 10 1 -3.3607 -66.3585 95.55 + 48 144.368 568 10 0 -3.36224 -66.357 94.15 + 48 93.0522 883 9 1 -3.39543 -66.3309 65.55 + 48 123.117 568 9 0 -3.39758 -66.3297 64.15 + 48 106.263 883 8 1 -3.44369 -66.3109 35.55 + 48 119.304 568 8 0 -3.44518 -66.3108 34.15 + 48 107.961 882 7 1 -3.47342 -66.3069 5.55 + 48 155.13 568 7 0 -3.47661 -66.3056 4.15 + 48 100.361 882 6 1 -3.54057 -66.2794 -24.45 + 48 138.838 568 6 0 -3.54336 -66.2783 -25.85 + 48 153.442 882 5 1 -3.59925 -66.2541 -54.45 + 48 130.695 568 5 0 -3.60204 -66.2526 -55.85 + 48 117.833 881 4 1 -3.65934 -66.2248 -84.45 + 48 108.699 569 4 0 -3.66408 -66.2232 -85.85 + 48 105.843 881 3 1 -3.76214 -66.1874 -114.45 + 48 105.241 569 3 0 -3.76588 -66.1869 -115.85 + 48 94.9418 881 2 1 -3.8294 -66.18 -144.45 + 48 141.338 569 2 0 -3.8316 -66.1779 -145.85 + 48 115.741 880 1 1 -3.87139 -66.1285 -174.45 + 48 101.271 569 1 0 -3.873 -66.1271 -175.85 + 48 155.478 880 0 1 -3.90454 -66.1038 -204.45 + 48 190.123 569 0 0 -3.9062 -66.1013 -205.85 + 48 113.242 662 0 0 18.2542 -47.5195 -206.25 + 48 6.09975 663 0 0 18.2546 -47.45 -206.235 + 48 75.239 743 0 0 -45.2265 -31.2794 -206.25 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 3.58437 LIN +Particle: proton +Event: 49 +Number of tracker hits in this event: 19 + 49 92.4629 392 8 1 -101.659 101.654 35.55 + 49 94.6611 1407 8 0 -101.659 101.654 34.15 + 49 215.204 392 7 1 -101.654 101.648 5.55 + 49 259.398 1407 7 0 -101.654 101.648 4.15 + 49 107.374 392 6 1 -101.645 101.649 -24.45 + 49 263.693 1407 6 0 -101.644 101.649 -25.85 + 49 117.462 392 5 1 -101.606 101.652 -54.45 + 49 123.844 1407 5 0 -101.601 101.653 -55.85 + 49 122.295 393 4 1 -101.499 101.661 -84.45 + 49 126.208 1407 4 0 -101.494 101.66 -85.85 + 49 105.62 393 3 1 -101.393 101.621 -114.45 + 49 110.606 1407 3 0 -101.385 101.619 -115.85 + 49 117.633 394 2 1 -101.229 101.592 -144.45 + 49 155.41 1407 2 0 -101.222 101.589 -145.85 + 49 97.0571 395 1 1 -101.076 101.534 -174.45 + 49 128.794 1406 1 0 -101.069 101.529 -175.85 + 49 84.1444 396 0 1 -100.941 101.432 -204.45 + 49 193.897 1406 0 0 -100.935 101.428 -205.85 + 49 64.3329 1406 6 0 -101.744 101.55 -25.933 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 2.61762 LIN +Particle: proton +Event: 50 +Number of tracker hits in this event: 31 + 50 116.59 735 8 1 -32.9899 -134.743 35.55 + 50 104.421 227 8 0 -32.9898 -134.742 34.15 + 50 151.99 735 7 1 -32.9881 -134.728 5.55 + 50 223.435 227 7 0 -32.9902 -134.73 4.15 + 50 125.179 735 6 1 -33.033 -134.765 -24.45 + 50 102.117 226 6 0 -33.0326 -134.767 -25.85 + 50 154.772 735 5 1 -33.0223 -134.801 -54.45 + 50 223.1 226 5 0 -33.0199 -134.802 -55.85 + 50 118.769 735 4 1 -32.968 -134.822 -84.45 + 50 118.992 226 4 0 -32.9685 -134.826 -85.85 + 50 123.87 735 3 1 -32.9754 -134.901 -114.45 + 50 105.628 226 3 0 -32.9722 -134.903 -115.85 + 50 115.088 735 2 1 -32.9073 -134.946 -144.45 + 50 77.3585 226 2 0 -32.9044 -134.949 -145.85 + 50 29.5546 225 2 0 -32.9037 -134.95 -146.161 + 50 126.829 735 1 1 -32.8537 -135.011 -174.45 + 50 114.631 225 1 0 -32.8503 -135.017 -175.85 + 50 175.905 736 0 1 -32.7722 -135.124 -204.45 + 50 106.746 225 0 0 -32.7695 -135.129 -205.85 + 50 38.2936 734 3 1 -33.1418 -134.94 -114.45 + 50 327.549 733 3 1 -33.25 -134.899 -114.525 + 50 195.077 732 3 1 -33.4504 -134.766 -114.682 + 50 35.2449 731 3 1 -33.65 -134.632 -114.804 + 50 32.5763 237 3 0 -35.1041 -132.655 -115.85 + 50 97.6394 238 3 0 -35.1354 -132.55 -115.862 + 50 56.7107 723 3 1 -35.3387 -129.157 -114.85 + 50 88.6839 260 3 0 -35.3269 -128.114 -115.85 + 50 127.234 261 3 0 -35.3572 -127.95 -115.987 + 50 50.4088 262 3 0 -35.3887 -127.75 -115.91 + 50 81.2449 726 3 1 -34.8261 -127.778 -114.85 + 50 140.751 96 5 0 -46.7208 -160.765 -56.25 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 4.68329 LIN +Particle: proton +Event: 51 +Number of tracker hits in this event: 23 + 51 98.479 865 10 1 -6.99161 -96.8913 95.55 + 51 106.214 416 10 0 -6.99267 -96.8912 94.15 + 51 173.456 865 9 1 -7.01136 -96.8891 65.55 + 51 123.24 416 9 0 -7.01331 -96.8894 64.15 + 51 97.6074 865 8 1 -7.0415 -96.8985 35.55 + 51 243.899 416 8 0 -7.04421 -96.8987 34.15 + 51 137.078 864 7 1 -7.10479 -96.9049 5.55 + 51 112.687 416 7 0 -7.10586 -96.9036 4.15 + 51 228.743 864 6 1 -7.12438 -96.8764 -24.45 + 51 247.361 416 6 0 -7.12545 -96.8736 -25.85 + 51 109.589 864 5 1 -7.15199 -96.813 -54.45 + 51 181.189 416 5 0 -7.15166 -96.8099 -55.85 + 51 219.446 864 4 1 -7.14508 -96.7412 -84.45 + 51 128.694 417 4 0 -7.14628 -96.7368 -85.85 + 51 124.977 864 3 1 -7.17276 -96.6529 -114.45 + 51 96.1969 417 3 0 -7.17479 -96.6515 -115.85 + 51 119.286 864 2 1 -7.21981 -96.6234 -144.45 + 51 154.568 417 2 0 -7.22151 -96.622 -145.85 + 51 104.409 863 1 1 -7.25381 -96.5983 -174.45 + 51 108.702 417 1 0 -7.25606 -96.5998 -175.85 + 51 139.119 863 0 1 -7.29949 -96.63 -204.45 + 51 121.739 417 0 0 -7.30275 -96.6298 -205.85 + 51 147.695 864 0 1 -7.24942 -96.6545 -204.723 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 7.01173 LIN +Particle: proton +Event: 52 +Number of tracker hits in this event: 22 + 52 162.869 1508 9 1 121.846 55.3078 65.55 + 52 398.482 1176 9 0 121.846 55.3093 64.15 + 52 141.782 1508 8 1 121.852 55.3418 35.55 + 52 97.5611 1176 8 0 121.852 55.3429 34.15 + 52 302.711 1508 7 1 121.845 55.368 5.55 + 52 157.133 1176 7 0 121.845 55.3696 4.15 + 52 109.675 1508 6 1 121.831 55.4034 -24.45 + 52 104.042 1176 6 0 121.831 55.4039 -25.85 + 52 116.574 1508 5 1 121.831 55.4124 -54.45 + 52 135.154 1176 5 0 121.83 55.4129 -55.85 + 52 117.329 1508 4 1 121.801 55.4236 -84.45 + 52 132.948 1176 4 0 121.8 55.4251 -85.85 + 52 215.377 1508 3 1 121.766 55.4565 -114.45 + 52 109.529 1177 3 0 121.764 55.4578 -115.85 + 52 148.358 1507 2 1 121.718 55.4857 -144.45 + 52 108.688 1177 2 0 121.715 55.4878 -145.85 + 52 110.851 1507 1 1 121.649 55.5323 -174.45 + 52 136.692 1177 1 0 121.646 55.5346 -175.85 + 52 132.671 1507 0 1 121.577 55.5793 -204.45 + 52 98.1417 1177 0 0 121.573 55.5824 -205.85 + 52 216.719 1508 2 1 121.75 55.5051 -144.839 + 52 55.6242 1175 9 0 121.834 55.25 63.9878 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 7.32702 LIN +Particle: proton +Event: 53 +Number of tracker hits in this event: 25 + 53 96.2248 629 11 1 -54.2135 -8.07612 125.55 + 53 207.149 859 11 0 -54.2128 -8.07537 124.15 + 53 101.694 629 10 1 -54.1973 -8.06087 95.55 + 53 106.551 859 10 0 -54.1962 -8.06001 94.15 + 53 197.471 629 9 1 -54.1666 -8.04209 65.55 + 53 122.368 860 9 0 -54.1657 -8.04062 64.15 + 53 140.042 629 8 1 -54.1465 -8.01347 35.55 + 53 102.486 860 8 0 -54.1454 -8.01213 34.15 + 53 107.412 629 7 1 -54.1213 -7.98712 5.55 + 53 96.6823 860 7 0 -54.1208 -7.98657 4.15 + 53 147.575 629 6 1 -54.1112 -7.97323 -24.45 + 53 128.413 860 6 0 -54.1109 -7.97144 -25.85 + 53 109.205 629 5 1 -54.1029 -7.93492 -54.45 + 53 111.077 860 5 0 -54.1013 -7.93279 -55.85 + 53 129.513 629 4 1 -54.069 -7.88943 -84.45 + 53 117.202 860 4 0 -54.0672 -7.88652 -85.85 + 53 123.886 630 3 1 -54.0331 -7.82631 -114.45 + 53 109.893 861 3 0 -54.0314 -7.82351 -115.85 + 53 111.945 630 2 1 -54.0035 -7.76823 -144.45 + 53 91.0632 861 2 0 -54.0006 -7.76617 -145.85 + 53 114.199 630 1 1 -53.9417 -7.72197 -174.45 + 53 107.773 861 1 0 -53.9386 -7.71943 -175.85 + 53 105.677 630 0 1 -53.875 -7.666 -204.45 + 53 107.694 861 0 0 -53.8718 -7.66342 -205.85 + 53 290.759 803 6 0 -65.6164 -19.4217 -26.25 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 8.61111 LIN Particle: proton Event: 54 Number of tracker hits in this event: 22 - 54 108.678 1018 10 1 23.7908 93.4126 95.55 - 54 95.2031 1366 10 0 23.7914 93.4124 94.15 - 54 138.506 1018 9 1 23.8023 93.4088 65.55 - 54 129.153 1366 9 0 23.8021 93.4084 64.15 - 54 98.335 1018 8 1 23.7965 93.3976 35.55 - 54 110.759 1366 8 0 23.7958 93.3974 34.15 - 54 98.4667 1018 7 1 23.781 93.3928 5.55 - 54 119.15 1366 7 0 23.78 93.3925 4.15 - 54 142.804 1018 6 1 23.7565 93.3859 -24.45 - 54 101.479 1366 6 0 23.7554 93.386 -25.85 - 54 135.741 1018 5 1 23.733 93.3879 -54.45 - 54 152.25 1366 5 0 23.7325 93.3882 -55.85 - 54 361.222 1018 4 1 23.7229 93.3977 -84.45 - 54 167.67 1366 4 0 23.7227 93.3981 -85.85 - 54 138.945 1018 3 1 23.7178 93.4042 -114.45 - 54 139.225 1366 3 0 23.7171 93.4049 -115.85 - 54 103.185 1018 2 1 23.7034 93.4228 -144.45 - 54 108.075 1366 2 0 23.7021 93.4231 -145.85 - 54 96.7957 1018 1 1 23.6774 93.4283 -174.45 - 54 139.178 1366 1 0 23.6762 93.4283 -175.85 - 54 144.161 1017 0 1 23.6483 93.4288 -204.45 - 54 247.972 1366 0 0 23.6469 93.4291 -205.85 -Number of digits in this event: 13 -Using G4ParticleGun... -Particle energy: 6.07101 LIN -Particle: proton -Event: 55 -Number of tracker hits in this event: 23 - 55 273.575 1563 9 1 132.884 22.7294 65.55 - 55 145.313 1013 9 0 132.883 22.7309 64.15 - 55 115.273 1563 8 1 132.857 22.7684 35.55 - 55 113.422 1013 8 0 132.856 22.771 34.15 - 55 195.458 1563 7 1 132.825 22.8237 5.55 - 55 147.034 1013 7 0 132.822 22.8259 4.15 - 55 142.611 1563 6 1 132.757 22.8655 -24.45 - 55 98.2486 1014 6 0 132.755 22.8673 -25.85 - 55 189.681 1562 5 1 132.698 22.9068 -54.45 - 55 94.5285 1014 5 0 132.694 22.9084 -55.85 - 55 135.419 1562 4 1 132.612 22.9404 -84.45 - 55 92.6351 1014 4 0 132.608 22.9422 -85.85 - 55 140.401 1561 3 1 132.508 22.9704 -114.45 - 55 122.609 1014 3 0 132.503 22.9714 -115.85 - 55 93.7891 1561 2 1 132.399 22.9935 -144.45 - 55 105.208 1014 2 0 132.394 22.9937 -145.85 - 55 92.1463 1560 1 1 132.289 22.9967 -174.45 - 55 301.085 1014 1 0 132.285 22.9967 -175.85 - 55 113.558 1560 0 1 132.185 23.009 -204.45 - 55 116.141 1014 0 0 132.18 23.0103 -205.85 - 55 32.7281 925 3 1 5.16047 -24.2133 -114.469 - 55 105.183 1004 0 0 132.119 20.8927 -205.85 - 55 116.445 1003 0 0 132.116 20.8497 -205.868 -Number of digits in this event: 13 -Using G4ParticleGun... -Particle energy: 7.1322 LIN -Particle: proton -Event: 56 -Number of tracker hits in this event: 24 - 56 105.339 987 11 1 17.5647 -74.6594 125.55 - 56 110.564 526 11 0 17.564 -74.6598 124.15 - 56 99.7933 987 10 1 17.5498 -74.6659 95.55 - 56 118.899 526 10 0 17.5483 -74.6651 94.15 - 56 99.7812 987 9 1 17.5102 -74.6527 65.55 - 56 123.598 526 9 0 17.5092 -74.652 64.15 - 56 106.884 987 8 1 17.4901 -74.6343 35.55 - 56 119.511 527 8 0 17.489 -74.6346 34.15 - 56 190.403 987 7 1 17.4664 -74.648 5.55 - 56 112.833 527 7 0 17.4647 -74.6486 4.15 - 56 109.953 986 6 1 17.4322 -74.6625 -24.45 - 56 118.951 526 6 0 17.4298 -74.6637 -25.85 - 56 108.557 986 5 1 17.3861 -74.6913 -54.45 - 56 106.933 526 5 0 17.3844 -74.6917 -55.85 - 56 200.477 986 4 1 17.3466 -74.6984 -84.45 - 56 114.629 526 4 0 17.3454 -74.6985 -85.85 - 56 119.402 986 3 1 17.3236 -74.6978 -114.45 - 56 99.5 526 3 0 17.3218 -74.6996 -115.85 - 56 126.363 986 2 1 17.2886 -74.7365 -144.45 - 56 100.946 526 2 0 17.2872 -74.7392 -145.85 - 56 164.965 986 1 1 17.2593 -74.7977 -174.45 - 56 160.428 526 1 0 17.2577 -74.8002 -175.85 - 56 103.416 985 0 1 17.2268 -74.8522 -204.45 - 56 139.931 525 0 0 17.2261 -74.8556 -205.85 -Number of digits in this event: 8 -Using G4ParticleGun... -Particle energy: 7.42633 LIN -Particle: proton -Event: 57 -Number of tracker hits in this event: 19 - 57 121.558 933 8 1 6.69748 143.909 35.55 - 57 200.367 1618 8 0 6.69761 143.908 34.15 - 57 128.754 933 7 1 6.70228 143.896 5.55 - 57 147.243 1618 7 0 6.70218 143.896 4.15 - 57 108.916 933 6 1 6.70125 143.896 -24.45 - 57 116.583 1618 6 0 6.70106 143.896 -25.85 - 57 95.42 933 5 1 6.69817 143.891 -54.45 - 57 106.922 1618 5 0 6.69774 143.893 -55.85 - 57 133.039 933 4 1 6.68681 143.929 -84.45 - 57 109.805 1618 4 0 6.6852 143.931 -85.85 - 57 109.239 933 3 1 6.65132 143.971 -114.45 - 57 160.57 1619 3 0 6.64932 143.973 -115.85 - 57 122.417 932 2 1 6.61074 144.003 -144.45 - 57 151.972 1619 2 0 6.60847 144.004 -145.85 - 57 112.614 932 1 1 6.56344 144.031 -174.45 - 57 118.914 1619 1 0 6.56292 144.032 -175.85 - 57 165.903 932 0 1 6.55335 144.064 -204.45 - 57 130.708 1619 0 0 6.55296 144.066 -205.85 - 57 45.5913 881 0 1 -3.76298 142.655 -204.45 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 1.01713 LIN -Particle: proton -Event: 58 -Number of tracker hits in this event: 24 - 58 138.011 1078 11 1 35.6512 3.311 125.55 - 58 129.69 916 11 0 35.6532 3.30973 124.15 - 58 143.407 1078 10 1 35.7013 3.28758 95.55 - 58 127.693 916 10 0 35.7071 3.28787 94.15 - 58 183.975 1078 9 1 35.8298 3.28605 65.55 - 58 125.205 916 9 0 35.832 3.28537 64.15 - 58 113.137 1079 8 1 35.8776 3.28624 35.55 - 58 117.203 916 8 0 35.882 3.28376 34.15 - 58 110.609 1079 7 1 35.9881 3.23176 5.55 - 58 139.917 915 7 0 35.9973 3.22315 4.15 - 58 123.236 1080 6 1 36.1923 3.02702 -24.45 - 58 198.483 914 6 0 36.2018 3.0178 -25.85 - 58 98.757 1081 5 1 36.3906 2.80702 -54.45 - 58 180.743 913 5 0 36.4004 2.79764 -55.85 - 58 151.151 1082 4 1 36.6171 2.60728 -84.45 - 58 188.426 912 4 0 36.6264 2.59983 -85.85 - 58 132.783 1083 3 1 36.793 2.42444 -114.45 - 58 138.364 911 3 0 36.8041 2.41522 -115.85 - 58 209.967 1084 2 1 37.015 2.23314 -144.45 - 58 115.442 910 2 0 37.0237 2.22349 -145.85 - 58 206.34 1085 1 1 37.1808 2.04529 -174.45 - 58 121.982 909 1 0 37.1891 2.03788 -175.85 - 58 122.78 1086 0 1 37.3693 1.87224 -204.45 - 58 103.883 909 0 0 37.3806 1.86364 -205.85 -Number of digits in this event: 21 -Using G4ParticleGun... -Particle energy: 3.97222 LIN -Particle: proton -Event: 59 -Number of tracker hits in this event: 28 - 59 95.0277 935 10 1 7.1663 -89.1964 95.55 - 59 101.331 454 10 0 7.16531 -89.1958 94.15 - 59 103.158 935 9 1 7.14534 -89.1936 65.55 - 59 153.542 454 9 0 7.14473 -89.1929 64.15 - 59 103.443 935 8 1 7.12958 -89.18 35.55 - 59 123.757 454 8 0 7.131 -89.1803 34.15 - 59 176.135 935 7 1 7.1614 -89.1938 5.55 - 59 95.1979 454 7 0 7.16268 -89.1948 4.15 - 59 122.464 935 6 1 7.19192 -89.2128 -24.45 - 59 175.229 454 6 0 7.19274 -89.2138 -25.85 - 59 104.781 935 5 1 7.21071 -89.2334 -54.45 - 59 125.313 454 5 0 7.21218 -89.2339 -55.85 - 59 107.376 935 4 1 7.24094 -89.2414 -84.45 - 59 126.461 454 4 0 7.24235 -89.2418 -85.85 - 59 166.706 936 3 1 7.2752 -89.2536 -114.45 - 59 109.66 453 3 0 7.27568 -89.2537 -115.85 - 59 92.323 936 2 1 7.28358 -89.2535 -144.45 - 59 130.12 453 2 0 7.28462 -89.2536 -145.85 - 59 106.831 936 1 1 7.29922 -89.2585 -174.45 - 59 132.732 453 1 0 7.30156 -89.2598 -175.85 - 59 115.247 936 0 1 7.34793 -89.2829 -204.45 - 59 127.384 453 0 0 7.35163 -89.2825 -205.85 - 59 103.396 1741 10 1 168.35 44.0011 95.2316 - 59 127.369 965 7 0 137.509 13.0529 3.75 - 59 134.033 966 7 0 137.283 13.25 3.89148 - 59 215.673 967 7 0 137.143 13.4508 3.96863 - 59 183.395 936 4 1 7.25 -89.232 -84.5229 - 59 160.37 455 4 0 7.41005 -89.0021 -85.85 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 1.25686 LIN -Particle: proton -Event: 60 -Number of tracker hits in this event: 29 - 60 158.678 574 10 1 -65.1978 -65.3781 95.55 - 60 136.918 573 10 0 -65.1945 -65.3757 94.15 - 60 120.125 574 9 1 -65.1459 -65.3206 65.55 - 60 429.73 573 9 0 -65.1478 -65.3228 64.15 - 60 191.466 574 8 1 -65.2112 -65.3647 35.55 - 60 144.299 573 8 0 -65.2119 -65.3657 34.15 - 60 115.671 574 7 1 -65.233 -65.3977 5.55 - 60 304.056 573 7 0 -65.2334 -65.3975 4.15 - 60 111.64 574 6 1 -65.2399 -65.4167 -24.45 - 60 128.293 573 6 0 -65.2447 -65.42 -25.85 - 60 147.513 573 5 1 -65.3386 -65.5043 -54.45 - 60 172.44 572 5 0 -65.3425 -65.5074 -55.85 - 60 142.205 573 4 1 -65.4052 -65.5716 -84.45 - 60 124.282 572 4 0 -65.4141 -65.5712 -85.85 - 60 231.109 572 3 1 -65.5959 -65.5596 -114.45 - 60 100.804 572 3 0 -65.6126 -65.5587 -115.85 - 60 126.084 570 2 1 -65.9742 -65.5445 -144.45 - 60 139.718 572 2 0 -65.995 -65.5424 -145.85 - 60 144.795 568 1 1 -66.4277 -65.4978 -174.45 - 60 124.518 572 1 0 -66.4505 -65.5014 -175.85 - 60 128.404 565 0 1 -66.9215 -65.5797 -204.45 - 60 143.984 572 0 0 -66.9455 -65.5867 -205.85 - 60 98.0378 576 3 0 -65.5372 -64.8013 -115.85 - 60 81.0041 577 3 0 -65.4668 -64.65 -116.046 - 60 390.846 578 3 0 -65.2658 -64.4499 -116.055 - 60 233.474 579 3 1 -64.0766 -63.1989 -114.85 - 60 24.6259 578 3 1 -64.2503 -63.0409 -114.638 - 60 173.966 580 3 1 -64.05 -63.091 -114.48 - 60 161.113 574 9 0 -65.2742 -65.25 63.891 -Number of digits in this event: 24 -Using G4ParticleGun... -Particle energy: 6.50604 LIN -Particle: proton -Event: 61 -Number of tracker hits in this event: 25 - 61 133.136 1043 11 1 28.7812 -71.6086 125.55 - 61 136.906 542 11 0 28.7819 -71.6084 124.15 - 61 100.737 1043 10 1 28.7976 -71.6049 95.55 - 61 143.739 542 10 0 28.798 -71.6047 94.15 - 61 92.2069 1043 9 1 28.8047 -71.6013 65.55 - 61 119.871 542 9 0 28.8052 -71.601 64.15 - 61 91.4075 1043 8 1 28.8141 -71.5919 35.55 - 61 186.204 542 8 0 28.8158 -71.5905 34.15 - 61 138.902 1043 7 1 28.842 -71.5577 5.55 - 61 119.853 542 7 0 28.844 -71.5557 4.15 - 61 101.587 1044 6 1 28.8856 -71.5195 -24.45 - 61 137.155 542 6 0 28.8874 -71.5177 -25.85 - 61 112.606 1044 5 1 28.9176 -71.4863 -54.45 - 61 139.62 542 5 0 28.9202 -71.4848 -55.85 - 61 113.249 1044 4 1 28.977 -71.4592 -84.45 - 61 155.276 542 4 0 28.9797 -71.4575 -85.85 - 61 103.744 1044 3 1 29.0348 -71.4264 -114.45 - 61 106.541 543 3 0 29.0366 -71.4255 -115.85 - 61 111.499 1045 2 1 29.0736 -71.4122 -144.45 - 61 106.486 543 2 0 29.0754 -71.4121 -145.85 - 61 110.429 1045 1 1 29.1123 -71.409 -174.45 - 61 114.058 543 1 0 29.1137 -71.4098 -175.85 - 61 215.02 1045 0 1 29.1439 -71.4206 -204.45 - 61 105.28 543 0 0 29.1458 -71.4219 -205.85 - 61 166.949 246 10 0 11.7353 -130.86 93.75 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 6.36449 LIN -Particle: proton -Event: 62 -Number of tracker hits in this event: 23 - 62 142.64 345 10 1 -111.017 -24.584 95.55 - 62 93.6462 777 10 0 -111.016 -24.5844 94.15 - 62 127.027 345 9 1 -111.001 -24.5937 65.55 - 62 107.61 777 9 0 -111.001 -24.5932 64.15 - 62 91.1523 345 8 1 -110.984 -24.5807 35.55 - 62 101.28 777 8 0 -110.983 -24.5797 34.15 - 62 202.183 345 7 1 -110.969 -24.5575 5.55 - 62 129.169 777 7 0 -110.967 -24.557 4.15 - 62 137.352 346 6 1 -110.93 -24.5474 -24.45 - 62 138.575 777 6 0 -110.928 -24.5472 -25.85 - 62 137.218 346 5 1 -110.876 -24.5387 -54.45 - 62 157.171 777 5 0 -110.874 -24.5377 -55.85 - 62 108.458 346 4 1 -110.829 -24.5146 -84.45 - 62 126.135 777 4 0 -110.828 -24.513 -85.85 - 62 102.371 346 3 1 -110.819 -24.4796 -114.45 - 62 114.308 777 3 0 -110.818 -24.4781 -115.85 - 62 89.4331 346 2 1 -110.814 -24.4482 -144.45 - 62 127.735 778 2 0 -110.813 -24.4485 -145.85 - 62 542.082 346 1 1 -110.801 -24.4544 -174.45 - 62 113.008 777 1 0 -110.799 -24.4545 -175.85 - 62 120.683 346 0 1 -110.76 -24.4555 -204.45 - 62 128.077 777 0 0 -110.758 -24.4555 -205.85 - 62 12.5688 345 1 1 -110.95 -24.3547 -174.669 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 4.4291 LIN -Particle: proton -Event: 63 -Number of tracker hits in this event: 36 - 63 102.885 1231 9 1 66.2629 -104.279 65.55 - 63 110.716 379 9 0 66.2642 -104.279 64.15 - 63 103.489 1231 8 1 66.2951 -104.266 35.55 - 63 108.685 379 8 0 66.2961 -104.265 34.15 - 63 129.513 1231 7 1 66.3239 -104.243 5.55 - 63 121.448 379 7 0 66.326 -104.242 4.15 - 63 134.425 1231 6 1 66.3657 -104.218 -24.45 - 63 112.391 379 6 0 66.3659 -104.216 -25.85 - 63 96.941 1231 5 1 66.3658 -104.19 -54.45 - 63 138.76 379 5 0 66.3662 -104.188 -55.85 - 63 119.645 1231 4 1 66.3818 -104.157 -84.45 - 63 118.742 379 4 0 66.3826 -104.154 -85.85 - 63 133.857 1231 3 1 66.3981 -104.102 -114.45 - 63 118.657 380 3 0 66.3998 -104.099 -115.85 - 63 119.201 1231 2 1 66.4329 -104.033 -144.45 - 63 98.7442 380 2 0 66.436 -104.03 -145.85 - 63 109.036 1232 1 1 66.4935 -103.981 -174.45 - 63 120.277 380 1 0 66.4956 -103.977 -175.85 - 63 157.391 1232 0 1 66.5375 -103.894 -204.45 - 63 122.445 381 0 0 66.5405 -103.889 -205.85 - 63 121.872 844 1 0 -15.1826 -11.2077 -176.221 - 63 4.67311 418 2 0 -32.7146 -96.4085 -146.25 - 63 9.4192 727 2 1 -34.45 -96.981 -144.634 - 63 29.4954 1128 5 1 45.6589 98.318 -54.45 - 63 362.966 1127 5 1 45.65 98.3084 -54.4996 - 63 214.211 1126 5 1 45.4498 98.2515 -54.652 - 63 281.068 1125 5 1 45.2494 97.9988 -54.7598 - 63 27.5482 1124 5 1 45.05 97.9513 -54.7715 - 63 47.4808 1394 5 0 45.5644 99.0716 -55.85 - 63 210.366 1395 5 0 45.5606 99.15 -55.8705 - 63 46.285 1387 5 0 45.7022 97.6273 -55.85 - 63 73.5077 1386 5 0 45.6229 97.55 -56.0182 - 63 5.27374 1233 5 0 61.5425 66.6617 -56.2499 - 63 121.029 1232 5 0 61.5476 66.6497 -56.2417 - 63 65.8641 1231 5 0 61.5502 66.45 -56.1816 - 63 95.7512 1421 5 0 26.2799 104.402 -56.25 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 7.92913 LIN -Particle: proton -Event: 64 -Number of tracker hits in this event: 32 - 64 133.834 374 9 1 -105.292 -61.4184 65.55 - 64 124.586 593 9 0 -105.291 -61.4187 64.15 - 64 139.248 374 8 1 -105.277 -61.4292 35.55 - 64 147.558 593 8 0 -105.277 -61.4301 34.15 - 64 116.785 374 7 1 -105.271 -61.4449 5.55 - 64 116.304 593 7 0 -105.271 -61.4451 4.15 - 64 152.329 374 6 1 -105.261 -61.4503 -24.45 - 64 110.367 592 6 0 -105.261 -61.4502 -25.85 - 64 127.382 374 5 1 -105.246 -61.452 -54.45 - 64 157.877 592 5 0 -105.246 -61.4526 -55.85 - 64 108.577 374 4 1 -105.245 -61.4646 -84.45 - 64 156.065 592 4 0 -105.246 -61.4645 -85.85 - 64 103.18 374 3 1 -105.262 -61.4625 -114.45 - 64 183.629 592 3 0 -105.263 -61.4606 -115.85 - 64 118.382 374 2 1 -105.268 -61.4209 -144.45 - 64 113.088 593 2 0 -105.268 -61.4185 -145.85 - 64 136.43 374 1 1 -105.278 -61.369 -174.45 - 64 121.11 593 1 0 -105.278 -61.3664 -175.85 - 64 214.7 374 0 1 -105.287 -61.3166 -204.45 - 64 121.685 593 0 0 -105.287 -61.3135 -205.85 - 64 48.5874 458 1 1 -88.3599 -81.17 -174.683 - 64 242.788 1236 10 0 -65.2905 67.4046 93.75 - 64 261.276 575 10 1 -64.8729 67.3564 95.1501 - 64 144.046 576 10 1 -64.85 67.7074 95.4769 - 64 314.934 1245 10 0 -64.2873 69.0849 94.15 - 64 494.2 1244 10 0 -64.1683 69.0499 93.9095 - 64 17.1385 577 10 1 -64.4537 69.5761 95.15 - 64 101.61 578 10 1 -64.45 69.5911 95.1688 - 64 59.2419 1237 10 0 -65.1859 67.45 93.7995 - 64 124.194 984 3 1 17.0174 12.4216 -114.574 - 64 22.8222 200 2 0 -62.14 -140.043 -145.976 - 64 35.6046 703 3 1 -39.2823 -147.672 -114.705 -Number of digits in this event: 23 -Using G4ParticleGun... -Particle energy: 3.66752 LIN -Particle: proton -Event: 65 -Number of tracker hits in this event: 25 - 65 93.659 951 11 1 10.3439 -7.39772 125.55 - 65 126.79 863 11 0 10.3422 -7.39698 124.15 - 65 101.813 951 10 1 10.3081 -7.37985 95.55 - 65 100.652 863 10 0 10.306 -7.37862 94.15 - 65 135.899 951 9 1 10.2577 -7.35298 65.55 - 65 111.916 863 9 0 10.2543 -7.3498 64.15 - 65 278.467 950 8 1 10.1856 -7.28858 35.55 - 65 109.514 863 8 0 10.1815 -7.28511 34.15 - 65 128.418 950 7 1 10.1012 -7.21083 5.55 - 65 119.307 864 7 0 10.0988 -7.20575 4.15 - 65 132.514 949 6 1 10.0407 -7.09952 -24.45 - 65 130.56 864 6 0 10.0385 -7.09472 -25.85 - 65 122.438 949 5 1 9.9885 -6.99452 -54.45 - 65 101.582 865 5 0 9.98551 -6.98834 -55.85 - 65 112.786 949 4 1 9.92668 -6.86134 -84.45 - 65 111.183 865 4 0 9.92149 -6.85467 -85.85 - 65 151.089 948 3 1 9.81622 -6.72224 -114.45 - 65 121.395 866 3 0 9.8113 -6.71518 -115.85 - 65 116.497 948 2 1 9.70311 -6.56791 -144.45 - 65 87.1935 867 2 0 9.69851 -6.56049 -145.85 - 65 143.347 947 1 1 9.59819 -6.4119 -174.45 - 65 149.444 868 1 0 9.5917 -6.40422 -175.85 - 65 103.957 947 0 1 9.46106 -6.24656 -204.45 - 65 130.344 869 0 0 9.45463 -6.24042 -205.85 - 65 166.239 949 3 1 9.85 -6.72933 -114.749 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 4.87876 LIN -Particle: proton -Event: 66 -Number of tracker hits in this event: 18 - 66 109.748 1481 8 1 116.415 -75.8614 35.55 - 66 126.595 520 8 0 116.414 -75.8621 34.15 - 66 197.93 1481 7 1 116.383 -75.8705 5.55 - 66 108.895 520 7 0 116.382 -75.871 4.15 - 66 133.275 1481 6 1 116.364 -75.8828 -24.45 - 66 140.405 520 6 0 116.363 -75.884 -25.85 - 66 96.8321 1480 5 1 116.343 -75.913 -54.45 - 66 134.112 520 5 0 116.343 -75.9139 -55.85 - 66 143.861 1480 4 1 116.344 -75.9277 -84.45 - 66 135.81 520 4 0 116.344 -75.9284 -85.85 - 66 138.347 1481 3 1 116.351 -75.9433 -114.45 - 66 100.786 520 3 0 116.35 -75.9445 -115.85 - 66 126.397 1480 2 1 116.34 -75.9716 -144.45 - 66 103.917 520 2 0 116.34 -75.9735 -145.85 - 66 148.473 1480 1 1 116.338 -76.0042 -174.45 - 66 157.538 520 1 0 116.338 -76.007 -175.85 - 66 109.484 1480 0 1 116.347 -76.061 -204.45 - 66 90.1618 519 0 0 116.347 -76.0652 -205.85 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 7.51322 LIN -Particle: proton -Event: 67 -Number of tracker hits in this event: 24 - 67 274.662 1112 11 1 42.5281 59.0914 125.55 - 67 109.885 1195 11 0 42.5293 59.0913 124.15 - 67 114.444 1112 10 1 42.5542 59.0895 95.55 - 67 114.952 1195 10 0 42.5546 59.0882 94.15 - 67 119.287 1112 9 1 42.5622 59.0595 65.55 - 67 116.689 1195 9 0 42.5617 59.0588 64.15 - 67 97.1048 1112 8 1 42.5525 59.0449 35.55 - 67 108.918 1194 8 0 42.5513 59.0449 34.15 - 67 103.305 1112 7 1 42.5285 59.0445 5.55 - 67 114.513 1194 7 0 42.5272 59.0457 4.15 - 67 128.885 1112 6 1 42.4997 59.0672 -24.45 - 67 102.482 1195 6 0 42.4975 59.0687 -25.85 - 67 142.333 1112 5 1 42.4527 59.0997 -54.45 - 67 118.893 1195 5 0 42.4515 59.102 -55.85 - 67 91.5533 1111 4 1 42.4319 59.1527 -84.45 - 67 111.703 1195 4 0 42.4308 59.1552 -85.85 - 67 124.521 1111 3 1 42.41 59.2079 -114.45 - 67 114.966 1195 3 0 42.4098 59.2097 -115.85 - 67 171.626 1111 2 1 42.409 59.2446 -144.45 - 67 91.4275 1195 2 0 42.4086 59.2466 -145.85 - 67 133.898 1111 1 1 42.4033 59.2846 -174.45 - 67 122.014 1196 1 0 42.4021 59.2871 -175.85 - 67 110.531 1111 0 1 42.3767 59.3375 -204.45 - 67 148.374 1196 0 0 42.3759 59.3405 -205.85 + 54 95.3931 505 10 0 86.0799 -78.9668 94.0983 + 54 119.71 1330 9 1 86.079 -78.9685 65.55 + 54 118.435 505 9 0 86.0793 -78.9688 64.15 + 54 108.923 1330 8 1 86.0847 -78.9728 35.55 + 54 137.122 505 8 0 86.0836 -78.9733 34.15 + 54 120.294 1330 7 1 86.057 -78.9804 5.55 + 54 264.897 505 7 0 86.0551 -78.9805 4.15 + 54 116.778 1329 6 1 86.0181 -78.9837 -24.45 + 54 107.527 505 6 0 86.0156 -78.9845 -25.85 + 54 108.57 1329 5 1 85.9635 -79.001 -54.45 + 54 101.43 505 5 0 85.9614 -79.0011 -55.85 + 54 157.608 1329 4 1 85.9155 -79.0043 -84.45 + 54 122.728 505 4 0 85.9118 -79.0036 -85.85 + 54 101.047 1328 3 1 85.8363 -78.9862 -114.45 + 54 118.302 505 3 0 85.8317 -78.9845 -115.85 + 54 120.451 1328 2 1 85.7357 -78.9531 -144.45 + 54 100.162 505 2 0 85.7308 -78.9514 -145.85 + 54 95.5409 1327 1 1 85.6273 -78.9197 -174.45 + 54 123.86 505 1 0 85.6241 -78.916 -175.85 + 54 101.414 1327 0 1 85.5571 -78.8408 -204.45 + 54 177.65 506 0 0 85.5558 -78.8368 -205.85 + 54 111.229 1329 7 1 85.907 -79.2606 5.15 Number of digits in this event: 9 Using G4ParticleGun... -Particle energy: 3.74686 LIN +Particle energy: 4.64617 LIN Particle: proton -Event: 68 -Number of tracker hits in this event: 36 - 68 113.1 1194 11 1 58.8878 -16.6009 125.55 - 68 128.542 817 11 0 58.8881 -16.5995 124.15 - 68 105.832 1194 10 1 58.8961 -16.5813 95.55 - 68 107.013 817 10 0 58.8949 -16.5803 94.15 - 68 111.484 1194 9 1 58.8698 -16.5605 65.55 - 68 257.557 817 9 0 58.8681 -16.5597 64.15 - 68 123.982 1193 8 1 58.8382 -16.5472 35.55 - 68 290.642 817 8 0 58.8354 -16.5472 34.15 - 68 157.511 1193 7 1 58.7775 -16.5531 5.55 - 68 93.9965 817 7 0 58.7747 -16.5538 4.15 - 68 210.803 1193 6 1 58.7255 -16.5535 -24.45 - 68 227.343 817 6 0 58.7242 -16.5543 -25.85 - 68 116.159 1193 5 1 58.6947 -16.5641 -54.45 - 68 140.758 817 5 0 58.6943 -16.5665 -55.85 - 68 126.7 1193 4 1 58.6836 -16.6111 -84.45 - 68 100.281 817 4 0 58.6788 -16.6144 -85.85 - 68 103.238 1192 3 1 58.5746 -16.6807 -114.45 - 68 325.832 816 3 0 58.568 -16.6833 -115.85 - 68 188.47 1191 2 1 58.4358 -16.7371 -144.45 - 68 138.35 816 2 0 58.4311 -16.7407 -145.85 - 68 101.479 1191 1 1 58.3338 -16.8116 -174.45 - 68 197.823 816 1 0 58.3292 -16.8133 -175.85 - 68 112.08 1190 0 1 58.2338 -16.8516 -204.45 - 68 112.25 815 0 0 58.228 -16.8559 -205.85 - 68 479.124 725 0 1 -34.85 -23.13 -204.825 - 68 138.87 424 6 0 128.172 -95.1545 -26.25 - 68 28.4934 425 6 0 128.238 -95.15 -26.1253 - 68 36.3264 1270 0 1 74.2407 -30.2733 -204.817 - 68 20.0389 1783 7 1 176.779 -26.0156 5.42172 - 68 109.027 840 3 1 -11.85 95.6619 -114.743 - 68 72.0722 1194 6 1 58.85 -16.6937 -24.7166 - 68 78.0896 813 6 0 60.1869 -17.3166 -25.85 - 68 9.7714 1219 6 1 64.0227 -18.7591 -24.85 - 68 96.5412 1220 6 1 64.05 -18.7712 -24.8333 - 68 73.8511 1221 6 1 64.25 -18.8245 -24.5996 - 68 36.9791 1222 6 1 64.45 -18.8562 -24.5375 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 9.78406 LIN -Particle: proton -Event: 69 -Number of tracker hits in this event: 28 - 69 167.556 573 10 1 -65.3561 -77.5981 95.55 - 69 193.399 512 10 0 -65.3558 -77.5979 94.15 - 69 321.142 573 9 1 -65.3495 -77.5935 65.55 - 69 108.123 512 9 0 -65.3499 -77.5942 64.15 - 69 104.264 573 8 1 -65.3587 -77.6069 35.55 - 69 142.885 512 8 0 -65.3593 -77.607 34.15 - 69 122.482 573 7 1 -65.3714 -77.6077 5.55 - 69 157.642 512 7 0 -65.3723 -77.6076 4.15 - 69 157.394 573 6 1 -65.3911 -77.6045 -24.45 - 69 146.877 512 6 0 -65.3919 -77.6035 -25.85 - 69 98.0134 573 5 1 -65.4105 -77.5848 -54.45 - 69 110.714 512 5 0 -65.411 -77.5839 -55.85 - 69 103.882 573 4 1 -65.4226 -77.5629 -84.45 - 69 214.818 512 4 0 -65.4232 -77.5615 -85.85 - 69 217.422 573 3 1 -65.4337 -77.5343 -114.45 - 69 237.889 512 3 0 -65.4339 -77.5326 -115.85 - 69 130.236 573 2 1 -65.4374 -77.4972 -144.45 - 69 105.639 512 2 0 -65.437 -77.4942 -145.85 - 69 107.174 573 1 1 -65.4293 -77.4335 -174.45 - 69 123.232 513 1 0 -65.4289 -77.4312 -175.85 - 69 113.277 573 0 1 -65.4188 -77.3873 -204.45 - 69 108.457 513 0 0 -65.4182 -77.3847 -205.85 - 69 83.6586 572 0 1 -65.45 -77.392 -204.453 - 69 94.5822 571 0 1 -65.65 -77.3765 -204.615 - 69 113.563 514 0 0 -65.7195 -77.069 -205.85 - 69 147.374 494 0 0 -71.3926 -81.1792 -206.25 - 69 236.655 495 0 0 -71.2009 -81.05 -206.002 - 69 102.124 511 8 0 -65.3798 -77.65 33.994 +Event: 55 +Number of tracker hits in this event: 26 + 55 143.469 699 11 1 -40.1908 39.562 125.55 + 55 283.637 1097 11 0 -40.1912 39.5631 124.15 + 55 129.742 699 10 1 -40.2068 39.5788 95.55 + 55 98.7188 1097 10 0 -40.2086 39.578 94.15 + 55 287.852 699 9 1 -40.2424 39.566 65.55 + 55 161.448 1097 9 0 -40.2429 39.5639 64.15 + 55 143.032 698 8 1 -40.2609 39.5195 35.55 + 55 93.6868 1097 8 0 -40.2602 39.5172 34.15 + 55 103.485 699 7 1 -40.2419 39.4713 5.55 + 55 135.83 1097 7 0 -40.2401 39.4693 4.15 + 55 108.601 699 6 1 -40.209 39.4256 -24.45 + 55 134.843 1096 6 0 -40.2089 39.423 -25.85 + 55 191.418 699 5 1 -40.2065 39.3684 -54.45 + 55 106.102 1096 5 0 -40.2095 39.3663 -55.85 + 55 145.592 698 4 1 -40.2725 39.3182 -84.45 + 55 91.5936 1096 4 0 -40.2759 39.3168 -85.85 + 55 126.341 698 3 1 -40.3542 39.2959 -114.45 + 55 90.1656 1096 3 0 -40.3602 39.2953 -115.85 + 55 151.564 697 2 1 -40.4758 39.282 -144.45 + 55 104.605 1096 2 0 -40.4809 39.2818 -145.85 + 55 105.256 697 1 1 -40.5831 39.2758 -174.45 + 55 135.253 1096 1 0 -40.5884 39.2751 -175.85 + 55 88.5934 696 0 1 -40.7028 39.2601 -204.45 + 55 240.777 1096 0 0 -40.7082 39.2589 -205.85 + 55 137.091 699 4 1 -40.25 39.3735 -84.5307 + 55 81.7469 1098 11 0 -40.1784 39.6503 124.098 Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 1.42024 LIN +Particle energy: 2.59771 LIN Particle: proton -Event: 70 -Number of tracker hits in this event: 30 - 70 111.589 1106 9 1 41.3368 -123.766 65.55 - 70 190.415 281 9 0 41.3336 -123.769 64.15 - 70 108.15 1106 8 1 41.26 -123.808 35.55 - 70 180.887 281 8 0 41.2545 -123.807 34.15 - 70 97.9353 1105 7 1 41.1384 -123.84 5.55 - 70 122.916 281 7 0 41.1324 -123.845 4.15 - 70 120.799 1104 6 1 41.0222 -123.967 -24.45 - 70 135.147 280 6 0 41.0142 -123.973 -25.85 - 70 128.593 1104 5 1 40.8566 -124.086 -54.45 - 70 185.977 280 5 0 40.8505 -124.093 -55.85 - 70 121.134 1103 4 1 40.7278 -124.25 -84.45 - 70 114.166 279 4 0 40.724 -124.26 -85.85 - 70 123.068 1103 3 1 40.6585 -124.447 -114.45 - 70 118.181 278 3 0 40.655 -124.457 -115.85 - 70 108.241 1102 2 1 40.5889 -124.649 -144.45 - 70 215.411 277 2 0 40.583 -124.656 -145.85 - 70 116.595 1102 1 1 40.4553 -124.788 -174.45 - 70 112.361 276 1 0 40.4456 -124.799 -175.85 - 70 297.948 1100 0 1 40.2407 -125.035 -204.45 - 70 126.497 275 0 0 40.233 -125.049 -205.85 - 70 96.3527 1101 0 1 40.25 -125.139 -204.507 - 70 52.9681 281 5 0 40.8471 -123.95 -56.1129 - 70 62.8556 348 5 0 40.6534 -110.383 -56.2495 - 70 54.0856 349 5 0 40.6554 -110.35 -56.1629 - 70 35.875 369 5 0 39.9062 -106.343 -56.25 - 70 147.801 368 5 0 39.9316 -106.35 -56.1812 - 70 106.944 282 9 0 41.5096 -123.75 63.9334 - 70 233.31 382 9 0 47.2336 -103.683 63.75 - 70 268.579 381 9 0 47.1509 -103.75 63.8439 - 70 265.828 383 9 0 46.6442 -103.55 64.1348 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 4.21854 LIN -Particle: proton -Event: 71 -Number of tracker hits in this event: 36 - 71 99.0274 430 10 1 -94.1291 -53.9296 95.55 - 71 116.586 630 10 0 -94.1296 -53.93 94.15 - 71 141.346 430 9 1 -94.1403 -53.9384 65.55 - 71 157.944 630 9 0 -94.1413 -53.9365 64.15 - 71 142.606 429 8 1 -94.168 -53.9035 35.55 - 71 107.396 630 8 0 -94.1687 -53.9005 34.15 - 71 122.749 429 7 1 -94.1851 -53.8377 5.55 - 71 243.282 631 7 0 -94.1838 -53.8348 4.15 - 71 196.644 429 6 1 -94.1529 -53.7746 -24.45 - 71 108.497 631 6 0 -94.1517 -53.7715 -25.85 - 71 121.788 430 5 1 -94.1316 -53.7036 -54.45 - 71 106.242 631 5 0 -94.132 -53.6998 -55.85 - 71 251.981 430 4 1 -94.137 -53.6239 -84.45 - 71 119.127 632 4 0 -94.1384 -53.6202 -85.85 - 71 195.818 429 3 1 -94.1717 -53.5516 -114.45 - 71 109.593 632 3 0 -94.1742 -53.5474 -115.85 - 71 255.85 429 2 1 -94.2261 -53.4649 -144.45 - 71 147.255 632 2 0 -94.2285 -53.4589 -145.85 - 71 94.4372 429 1 1 -94.2804 -53.3327 -174.45 - 71 150.58 633 1 0 -94.282 -53.3258 -175.85 - 71 128.935 429 0 1 -94.3154 -53.183 -204.45 - 71 119.475 634 0 0 -94.3164 -53.1766 -205.85 - 71 78.8957 633 2 0 -94.2944 -53.4499 -145.906 - 71 41.6388 431 2 1 -93.8734 -53.5773 -144.85 - 71 145.359 631 4 0 -93.7396 -53.7843 -85.85 - 71 5.25686 630 4 0 -93.5914 -53.85 -86.2379 - 71 28.3807 384 4 0 -75.18 -103.26 -86.25 - 71 79.9977 383 4 0 -75.1631 -103.35 -86.1974 - 71 78.3363 382 4 0 -75.1324 -103.55 -86.0627 - 71 79.4645 381 4 0 -75.0215 -103.751 -85.9985 - 71 93.896 380 4 0 -74.9514 -103.95 -85.958 - 71 30.0005 379 4 0 -74.9719 -104.151 -85.8906 - 71 35.5798 525 4 1 -75.0392 -105.56 -84.85 - 71 132.286 524 4 1 -75.05 -105.691 -84.7979 - 71 3.35778 366 4 0 -75.78 -106.8 -85.85 - 71 389.144 518 4 1 -76.3472 -107.309 -84.8498 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 5.37014 LIN -Particle: proton -Event: 72 -Number of tracker hits in this event: 25 - 72 101.534 803 11 1 -19.4382 2.79136 125.55 - 72 108.19 913 11 0 -19.4376 2.79051 124.15 - 72 137.347 803 10 1 -19.4207 2.77754 95.55 - 72 112.622 913 10 0 -19.4192 2.77626 94.15 - 72 126.127 803 9 1 -19.3849 2.74903 65.55 - 72 122.326 913 9 0 -19.3844 2.74747 64.15 - 72 115.647 803 8 1 -19.3694 2.71625 35.55 - 72 124.493 913 8 0 -19.3658 2.71288 34.15 - 72 106.384 803 7 1 -19.2907 2.64366 5.55 - 72 137.089 912 7 0 -19.2871 2.63936 4.15 - 72 147.93 804 6 1 -19.2131 2.54611 -24.45 - 72 127.196 912 6 0 -19.2093 2.54237 -25.85 - 72 141.803 804 5 1 -19.1268 2.47 -54.45 - 72 106.094 912 5 0 -19.1214 2.46649 -55.85 - 72 97.2929 805 4 1 -19.0095 2.39534 -84.45 - 72 122.98 911 4 0 -19.004 2.39166 -85.85 - 72 101.976 805 3 1 -18.8921 2.32231 -114.45 - 72 103.26 911 3 0 -18.8869 2.31841 -115.85 - 72 109.066 806 2 1 -18.7768 2.24127 -144.45 - 72 185.605 910 2 0 -18.7711 2.23957 -145.85 - 72 125.732 806 1 1 -18.6584 2.20453 -174.45 - 72 160.066 910 1 0 -18.6533 2.20451 -175.85 - 72 113.9 807 0 1 -18.5503 2.20392 -204.45 - 72 108.567 910 0 0 -18.5453 2.2047 -205.85 - 72 190.526 479 2 0 -3.83847 -84.146 -146.25 +Event: 56 +Number of tracker hits in this event: 27 + 56 249.346 718 11 0 75.4017 -36.2817 124.15 + 56 125.781 1276 10 1 75.4082 -36.2722 95.55 + 56 144.833 718 10 0 75.409 -36.2727 94.15 + 56 105.505 1276 9 1 75.434 -36.2976 65.55 + 56 116.329 718 9 0 75.4353 -36.2991 64.15 + 56 119.253 1277 8 1 75.4628 -36.3356 35.55 + 56 174.766 718 8 0 75.4625 -36.338 34.15 + 56 119.592 1277 7 1 75.454 -36.3872 5.55 + 56 111.001 718 7 0 75.4546 -36.3875 4.15 + 56 110.8 1277 6 1 75.4627 -36.3939 -24.45 + 56 530.966 718 6 0 75.4677 -36.3926 -25.85 + 56 105.418 1277 5 1 75.5705 -36.3636 -54.45 + 56 193.766 718 5 0 75.575 -36.3598 -55.85 + 56 128.715 1278 4 1 75.6797 -36.2725 -84.45 + 56 102.119 718 4 0 75.6845 -36.269 -85.85 + 56 164.658 1278 3 1 75.7811 -36.1973 -114.45 + 56 87.9408 719 3 0 75.7865 -36.1948 -115.85 + 56 113.179 1279 2 1 75.8901 -36.1529 -144.45 + 56 160.843 719 2 0 75.8985 -36.1506 -145.85 + 56 92.468 1280 1 1 76.0616 -36.1082 -174.45 + 56 90.5591 719 1 0 76.0702 -36.1066 -175.85 + 56 254.856 1281 0 1 76.2546 -36.0743 -204.45 + 56 148.808 719 0 0 76.2642 -36.0693 -205.85 + 56 13.3832 1280 0 1 76.2435 -36.0659 -204.45 + 56 136.407 1282 0 1 76.451 -36.3796 -204.54 + 56 147.249 1279 3 1 75.85 -36.2021 -114.612 + 56 28.8478 719 6 0 75.1756 -36.25 -26.0385 Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 5.87645 LIN +Particle energy: 5.07988 LIN +Particle: proton +Event: 57 +Number of tracker hits in this event: 43 + 57 186.241 995 10 0 -115.063 19.2252 94.15 + 57 108.232 325 9 1 -115.079 19.2121 65.55 + 57 90.1904 995 9 0 -115.078 19.209 64.15 + 57 121.398 325 8 1 -115.076 19.1408 35.55 + 57 132.163 995 8 0 -115.076 19.1382 34.15 + 57 167.713 325 7 1 -115.074 19.0884 5.55 + 57 104.61 995 7 0 -115.074 19.0864 4.15 + 57 104.192 325 6 1 -115.077 19.0429 -24.45 + 57 159.854 994 6 0 -115.077 19.041 -25.85 + 57 100.879 325 5 1 -115.072 19.0033 -54.45 + 57 98.5421 994 5 0 -115.071 19.0001 -55.85 + 57 118.302 325 4 1 -115.037 18.9339 -84.45 + 57 144.046 994 4 0 -115.036 18.9293 -85.85 + 57 127.011 325 3 1 -115.012 18.8338 -114.45 + 57 121.995 993 3 0 -115.01 18.8288 -115.85 + 57 146.222 325 2 1 -114.986 18.7244 -144.45 + 57 109.152 993 2 0 -114.985 18.7193 -145.85 + 57 109.542 325 1 1 -114.965 18.6154 -174.45 + 57 108.787 992 1 0 -114.966 18.6091 -175.85 + 57 112.592 325 0 1 -114.986 18.4819 -204.45 + 57 108.466 992 0 0 -114.986 18.4757 -205.85 + 57 56.4337 996 10 0 -115.027 19.25 93.9532 + 57 55.4848 352 9 1 -109.734 23.597 65.55 + 57 56.4841 351 9 1 -109.75 23.6223 65.39 + 57 42.9063 1018 9 0 -109.938 23.8231 64.15 + 57 53.6428 1019 9 0 -109.96 23.85 63.992 + 57 219.305 330 8 1 -114.122 29.4966 35.55 + 57 23.1072 329 8 1 -114.15 29.6203 35.1752 + 57 89.0699 1049 8 0 -114.216 29.965 34.15 + 57 74.9007 1050 8 0 -114.241 30.05 33.8788 + 57 135.204 318 7 1 -116.388 36.4105 5.54954 + 57 43.0029 1087 7 0 -116.6 37.5709 4.15 + 57 96.4044 1088 7 0 -116.617 37.65 4.05163 + 57 19.705 1089 7 0 -116.65 37.8502 3.79899 + 57 60.9144 1304 7 0 -124.235 80.9162 3.75 + 57 81.3286 1305 7 0 -124.253 81.05 3.88342 + 57 54.0192 1306 7 0 -124.255 81.25 4.0271 + 57 2.15552 1307 7 0 -124.247 81.45 4.14482 + 57 184.551 279 7 1 -124.274 83.0959 5.15 + 57 34.7678 1325 8 0 -107.101 85.2409 33.7504 + 57 97.4876 1326 8 0 -107.06 85.25 33.8266 + 57 9.57585 368 8 1 -106.363 85.5454 35.1503 + 57 135.715 369 8 1 -106.35 85.5512 35.1726 +Number of digits in this event: 14 +Using G4ParticleGun... +Particle energy: 4.27501 LIN +Particle: proton +Event: 58 +Number of tracker hits in this event: 29 + 58 117.82 1288 10 1 77.719 -58.336 95.55 + 58 131.044 608 10 0 77.719 -58.3357 94.15 + 58 107.225 1288 9 1 77.715 -58.3341 65.55 + 58 111.701 608 9 0 77.7139 -58.3354 64.15 + 58 117.7 1288 8 1 77.6755 -58.3703 35.55 + 58 185.778 608 8 0 77.6727 -58.3725 34.15 + 58 97.9434 1287 7 1 77.6144 -58.4069 5.55 + 58 111.178 608 7 0 77.6105 -58.4102 4.15 + 58 107.369 1287 6 1 77.5211 -58.4707 -24.45 + 58 156.329 607 6 0 77.5173 -58.4723 -25.85 + 58 121.178 1286 5 1 77.4409 -58.5049 -54.45 + 58 121.376 607 5 0 77.4368 -58.5081 -55.85 + 58 102.732 1286 4 1 77.3526 -58.5732 -84.45 + 58 98.1393 607 4 0 77.3482 -58.5755 -85.85 + 58 126.289 1286 3 1 77.2621 -58.6203 -114.45 + 58 155.742 607 3 0 77.256 -58.623 -115.85 + 58 134.924 1285 2 1 77.1272 -58.6797 -144.45 + 58 129.333 606 2 0 77.1198 -58.683 -145.85 + 58 105.078 1284 1 1 76.9531 -58.751 -174.45 + 58 104.405 606 1 0 76.9457 -58.7554 -175.85 + 58 104.156 1283 0 1 76.7966 -58.8484 -204.45 + 58 193.459 605 0 0 76.7902 -58.8518 -205.85 + 58 56.7809 134 2 1 -153.15 -52.5497 -144.533 + 58 197.76 1287 8 1 77.65 -58.3432 35.5255 + 58 4.69346 605 8 0 78.0255 -59.0382 34.15 + 58 78.2388 604 8 0 78.0297 -59.05 34.1384 + 58 28.5709 1289 8 1 77.8797 -59.8323 35.15 + 58 80.9073 633 8 0 77.0716 -53.3771 34.15 + 58 60.3558 1286 8 1 77.4106 -52.9903 35.15 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 9.05813 LIN +Particle: proton +Event: 59 +Number of tracker hits in this event: 30 + 59 151.368 642 9 1 -51.5621 -120.954 65.55 + 59 106.624 295 9 0 -51.5619 -120.952 64.15 + 59 179.451 642 8 1 -51.5568 -120.928 35.55 + 59 98.5319 296 8 0 -51.5562 -120.927 34.15 + 59 115.338 642 7 1 -51.5433 -120.891 5.55 + 59 146.53 296 7 0 -51.5431 -120.89 4.15 + 59 192.971 642 6 1 -51.5426 -120.861 -24.45 + 59 162.715 296 6 0 -51.5426 -120.859 -25.85 + 59 203.36 642 5 1 -51.5412 -120.818 -54.45 + 59 87.2867 296 5 0 -51.5419 -120.816 -55.85 + 59 149.753 642 4 1 -51.5579 -120.771 -84.45 + 59 114.417 296 4 0 -51.5601 -120.769 -85.85 + 59 156.609 642 3 1 -51.6055 -120.743 -114.45 + 59 235.1 297 3 0 -51.6074 -120.742 -115.85 + 59 105.528 642 2 1 -51.647 -120.712 -144.45 + 59 106.485 297 2 0 -51.6489 -120.711 -145.85 + 59 103.752 641 1 1 -51.69 -120.695 -174.45 + 59 167.134 297 1 0 -51.6916 -120.695 -175.85 + 59 128.407 641 0 1 -51.7257 -120.685 -204.45 + 59 119.846 297 0 0 -51.7271 -120.684 -205.85 + 59 5.63713 220 3 0 55.9409 -135.976 -116.25 + 59 4.28471 479 3 0 -82.3101 -84.0633 -116.25 + 59 203.792 480 3 0 -82.2985 -84.0499 -116.243 + 59 104.622 481 3 0 -82.0397 -83.8499 -115.88 + 59 125.367 482 3 0 -81.8612 -83.6498 -115.908 + 59 123.443 483 3 0 -81.8011 -83.4499 -115.911 + 59 101.195 296 3 0 -51.6157 -120.75 -116.076 + 59 110.614 641 6 1 -51.65 -120.827 -24.6093 + 59 255.482 640 6 1 -51.85 -120.665 -24.7223 + 59 166.374 639 6 1 -52.05 -120.581 -24.481 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 7.0763 LIN +Particle: proton +Event: 60 +Number of tracker hits in this event: 28 + 60 111.024 193 8 1 -141.49 -7.12522 35.55 + 60 130.049 864 8 0 -141.489 -7.1247 34.15 + 60 112.323 193 7 1 -141.468 -7.11836 5.55 + 60 149.177 864 7 0 -141.466 -7.117 4.15 + 60 109.643 193 6 1 -141.416 -7.09152 -24.45 + 60 137.012 864 6 0 -141.412 -7.09061 -25.85 + 60 250.321 194 5 1 -141.341 -7.07276 -54.45 + 60 116.901 864 5 0 -141.338 -7.07107 -55.85 + 60 90.6448 194 4 1 -141.278 -7.03009 -84.45 + 60 118.871 865 4 0 -141.275 -7.02804 -85.85 + 60 96.2967 194 3 1 -141.209 -6.98314 -114.45 + 60 103.246 865 3 0 -141.207 -6.98113 -115.85 + 60 136.724 194 2 1 -141.166 -6.93618 -144.45 + 60 100.599 865 2 0 -141.164 -6.93435 -145.85 + 60 131.081 195 1 1 -141.128 -6.89243 -174.45 + 60 108.249 865 1 0 -141.127 -6.89004 -175.85 + 60 211.275 195 0 1 -141.093 -6.84218 -204.45 + 60 125.544 866 0 0 -141.091 -6.83891 -205.85 + 60 274.273 894 0 0 -126.792 -1.08525 -206.25 + 60 229.306 194 1 1 -141.15 -6.8857 -174.493 + 60 55.9256 663 4 0 -101.611 -47.4103 -86.25 + 60 147.082 662 4 0 -101.537 -47.45 -86.1529 + 60 116.197 661 4 0 -101.633 -47.65 -86.1555 + 60 10.3577 660 4 0 -101.729 -47.8504 -86.2458 + 60 14.1988 55 4 0 -163.676 -169.092 -86.2498 + 60 82.9041 54 4 0 -163.695 -169.15 -86.2205 + 60 49.0472 53 4 0 -163.662 -169.35 -86.1906 + 60 28.4967 193 5 1 -141.35 -7.09919 -54.6401 +Number of digits in this event: 14 +Using G4ParticleGun... +Particle energy: 4.27191 LIN +Particle: proton +Event: 61 +Number of tracker hits in this event: 56 + 61 101.791 1517 9 1 123.555 -24.1356 65.55 + 61 114.172 779 9 0 123.557 -24.1356 64.15 + 61 120.004 1517 8 1 123.593 -24.1327 35.55 + 61 101.056 779 8 0 123.596 -24.132 34.15 + 61 175.757 1517 7 1 123.647 -24.117 5.55 + 61 135.137 779 7 0 123.651 -24.1164 4.15 + 61 110.46 1517 6 1 123.729 -24.1038 -24.45 + 61 113.812 779 6 0 123.733 -24.1036 -25.85 + 61 110.856 1518 5 1 123.802 -24.0953 -54.45 + 61 103.968 779 5 0 123.804 -24.0971 -55.85 + 61 158.115 1518 4 1 123.851 -24.1297 -84.45 + 61 100.684 779 4 0 123.852 -24.1314 -85.85 + 61 133.663 1518 3 1 123.877 -24.1652 -114.45 + 61 109.293 779 3 0 123.879 -24.1686 -115.85 + 61 118.923 1518 2 1 123.929 -24.2492 -144.45 + 61 119.874 778 2 0 123.933 -24.2523 -145.85 + 61 418.646 1519 1 1 124.019 -24.3208 -174.45 + 61 192.275 778 1 0 124.024 -24.3236 -175.85 + 61 314.135 1519 0 1 124.122 -24.3758 -204.45 + 61 122.216 778 0 0 124.129 -24.3793 -205.85 + 61 72.8648 979 6 0 -126.86 15.865 -25.8561 + 61 13.6667 918 0 0 105.221 3.8076 -206.25 + 61 57.494 919 0 0 105.223 3.85 -206.234 + 61 47.5027 920 0 0 105.234 4.05 -206.166 + 61 53.2733 921 0 0 105.247 4.2502 -206.103 + 61 63.0425 922 0 0 105.263 4.45 -206.045 + 61 85.3727 923 0 0 105.278 4.65 -205.99 + 61 96.1905 924 0 0 105.299 4.85 -205.932 + 61 30.2359 925 0 0 105.325 5.05 -205.873 + 61 295.607 1428 0 1 105.819 8.31804 -204.85 + 61 222.808 1429 0 1 105.95 9.10303 -204.62 + 61 30.0452 1590 1 0 123.217 138.25 -176.25 + 61 134.671 1591 1 0 123.23 138.35 -176.228 + 61 52.4713 1592 1 0 123.252 138.55 -176.186 + 61 56.1601 1593 1 0 123.272 138.75 -176.147 + 61 45.7248 1594 1 0 123.292 138.95 -176.107 + 61 57.3851 1595 1 0 123.309 139.15 -176.065 + 61 55.5519 1596 1 0 123.337 139.35 -176.016 + 61 55.5643 1597 1 0 123.366 139.551 -175.966 + 61 65.0509 1598 1 0 123.393 139.75 -175.922 + 61 47.1779 1599 1 0 123.421 139.95 -175.879 + 61 508.506 1520 1 1 124.15 145.289 -174.688 + 61 178.481 1521 1 1 124.35 146.463 -174.466 + 61 454.475 777 0 0 123.475 -24.6422 -205.85 + 61 93.6814 776 0 0 122.421 -24.65 -205.997 + 61 87.717 775 0 0 122.363 -24.8506 -206.06 + 61 46.7946 699 0 0 115.761 -40.0501 -206.25 + 61 332.617 700 0 0 115.691 -40.05 -206.217 + 61 9.34644 701 0 0 115.579 -39.8499 -205.964 + 61 72.9573 830 1 0 163.263 -13.9389 -176.25 + 61 117.717 831 1 0 163.326 -13.85 -176.186 + 61 62.5313 726 1 0 94.2774 -34.7264 -176.25 + 61 123.933 1519 2 1 123.95 -24.2098 -144.492 + 61 392.885 1520 2 1 124.15 -23.9783 -144.552 + 61 79.2182 1519 3 1 123.95 -24.2051 -114.713 + 61 298.763 1520 3 1 124.15 -24.3025 -114.712 +Number of digits in this event: 23 +Using G4ParticleGun... +Particle energy: 4.31829 LIN +Particle: proton +Event: 62 +Number of tracker hits in this event: 20 + 62 151.219 485 9 1 -82.9363 -87.1062 65.55 + 62 101.743 464 9 0 -82.9352 -87.1073 64.15 + 62 110.769 485 8 1 -82.9176 -87.1236 35.55 + 62 102.776 464 8 0 -82.9168 -87.1238 34.15 + 62 117.741 485 7 1 -82.9033 -87.1364 5.55 + 62 174.4 464 7 0 -82.9048 -87.1393 4.15 + 62 98.1705 485 6 1 -82.9384 -87.1963 -24.45 + 62 216.211 464 6 0 -82.9404 -87.1988 -25.85 + 62 152.863 485 5 1 -82.9834 -87.246 -54.45 + 62 115.761 464 5 0 -82.9861 -87.2484 -55.85 + 62 122.87 485 4 1 -83.041 -87.2904 -84.45 + 62 129.645 463 4 0 -83.0429 -87.2921 -85.85 + 62 107.757 484 3 1 -83.0816 -87.3247 -114.45 + 62 120.959 463 3 0 -83.0848 -87.3268 -115.85 + 62 135.357 484 2 1 -83.1496 -87.3732 -144.45 + 62 122.884 463 2 0 -83.1531 -87.3771 -145.85 + 62 123.38 484 1 1 -83.2214 -87.4546 -174.45 + 62 119.449 462 1 0 -83.2227 -87.4602 -175.85 + 62 101.758 483 0 1 -83.2623 -87.5833 -204.45 + 62 140.323 462 0 0 -83.2638 -87.5893 -205.85 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 7.44296 LIN +Particle: proton +Event: 63 +Number of tracker hits in this event: 38 + 63 103.773 1212 8 1 62.5955 -129.11 35.55 + 63 171.493 255 8 0 62.5948 -129.11 34.15 + 63 292.837 1212 7 1 62.5829 -129.102 5.55 + 63 132.37 255 7 0 62.5833 -129.102 4.15 + 63 127.44 1212 6 1 62.5891 -129.093 -24.45 + 63 116.028 255 6 0 62.59 -129.093 -25.85 + 63 145.367 1212 5 1 62.6067 -129.079 -54.45 + 63 130.234 255 5 0 62.6071 -129.077 -55.85 + 63 184.358 1212 4 1 62.6132 -129.044 -84.45 + 63 117.272 255 4 0 62.6138 -129.042 -85.85 + 63 126.977 1212 3 1 62.6259 -129.001 -114.45 + 63 126.873 255 3 0 62.6267 -129 -115.85 + 63 93.1845 1212 2 1 62.6414 -128.982 -144.45 + 63 120.179 255 2 0 62.6417 -128.98 -145.85 + 63 123.732 1212 1 1 62.6475 -128.951 -174.45 + 63 35.2786 255 1 0 62.6479 -128.95 -175.85 + 63 81.9423 256 1 0 62.6479 -128.95 -175.995 + 63 97.2186 1213 0 1 62.6553 -128.94 -204.45 + 63 98.1939 256 0 0 62.6564 -128.939 -205.85 + 63 35.093 155 1 0 -8.78312 -148.95 -176.111 + 63 219.761 1661 10 1 152.397 -58.3725 95.5066 + 63 4414.97 1221 1 0 -17.3094 64.3418 -175.862 + 63 61.9426 1220 1 0 -17.3218 64.2499 -175.893 + 63 63.1525 1219 1 0 -17.2724 64.05 -175.928 + 63 47.8127 1218 1 0 -17.2709 63.85 -175.919 + 63 103.478 1217 1 0 -17.272 63.6497 -175.896 + 63 53.2616 811 1 1 -17.7697 62.0042 -174.849 + 63 99.4745 810 1 1 -17.85 61.8556 -174.793 + 63 634.042 809 1 1 -18.05 61.644 -174.764 + 63 105.328 808 1 1 -18.25 61.0234 -174.531 + 63 0.0498685 1213 7 1 62.65 -128.838 5.15022 + 63 55.8419 259 7 0 62.7627 -128.278 4.15 + 63 68.6953 260 7 0 62.7919 -128.15 3.95607 + 63 107.918 1202 6 1 60.528 -112.86 -24.45 + 63 110.634 338 6 0 60.4095 -112.48 -25.8504 + 63 19.5741 339 6 0 60.385 -112.35 -26.1778 + 63 237.06 399 6 0 49.995 -100.24 -26.25 + 63 236.143 400 6 0 50.0617 -100.15 -26.0798 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 3.83598 LIN +Particle: proton +Event: 64 +Number of tracker hits in this event: 30 + 64 103.324 1126 11 1 45.3179 -18.8632 125.55 + 64 207.536 805 11 0 45.319 -18.8645 124.15 + 64 144.698 1126 10 1 45.3405 -18.8913 95.55 + 64 104.071 805 10 0 45.3429 -18.895 94.15 + 64 96.9778 1126 9 1 45.3955 -18.9702 65.55 + 64 145.548 805 9 0 45.398 -18.9735 64.15 + 64 146.074 1126 8 1 45.4478 -19.0411 35.55 + 64 167.099 805 8 0 45.4485 -19.0444 34.15 + 64 236.421 1127 7 1 45.4596 -19.1067 5.55 + 64 103.567 804 7 0 45.4539 -19.1014 4.15 + 64 106.236 1126 6 1 45.341 -19.0028 -24.45 + 64 129.513 805 6 0 45.3351 -18.9967 -25.85 + 64 291.775 1125 5 1 45.2226 -18.8696 -54.45 + 64 183.511 805 5 0 45.2176 -18.8635 -55.85 + 64 99.7129 1125 4 1 45.1152 -18.7395 -84.45 + 64 110.465 806 4 0 45.1107 -18.7333 -85.85 + 64 136.341 1124 3 1 45.0216 -18.6025 -114.45 + 64 94.168 807 3 0 45.0171 -18.5953 -115.85 + 64 253.047 1124 2 1 44.9237 -18.4566 -144.45 + 64 19.2285 807 2 0 44.9163 -18.4503 -145.85 + 64 139.129 808 2 0 44.9159 -18.45 -145.915 + 64 140.95 1123 1 1 44.7689 -18.3176 -174.45 + 64 163.979 808 1 0 44.7624 -18.3109 -175.85 + 64 258.274 1122 0 1 44.6279 -18.1705 -204.45 + 64 117.257 809 0 0 44.6193 -18.1627 -205.85 + 64 58.5411 810 5 0 44.59 -17.8665 -55.85 + 64 94.5864 811 5 0 44.5767 -17.85 -55.8784 + 64 79.4592 812 5 0 44.4202 -17.65 -56.0562 + 64 93.5138 813 5 0 44.3249 -17.45 -56.1761 + 64 299.967 814 5 0 44.2848 -17.25 -56.139 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 5.98896 LIN +Particle: proton +Event: 65 +Number of tracker hits in this event: 28 + 65 105.266 732 11 1 -33.614 60.4779 125.55 + 65 126.171 1202 11 0 -33.6149 60.4778 124.15 + 65 98.2802 732 10 1 -33.6345 60.4761 95.55 + 65 126.353 1202 10 0 -33.6342 60.4753 94.15 + 65 123.853 732 9 1 -33.63 60.4646 65.55 + 65 145.667 1202 9 0 -33.6285 60.4636 64.15 + 65 126.879 732 8 1 -33.6034 60.4429 35.55 + 65 126.578 1201 8 0 -33.6033 60.4408 34.15 + 65 118.27 732 7 1 -33.6023 60.39 5.55 + 65 112.446 1201 7 0 -33.6021 60.3878 4.15 + 65 126.764 732 6 1 -33.5967 60.3474 -24.45 + 65 162.327 1201 6 0 -33.5958 60.3464 -25.85 + 65 121.779 732 5 1 -33.5818 60.3226 -54.45 + 65 107.655 1201 5 0 -33.5809 60.3217 -55.85 + 65 122.721 732 4 1 -33.5581 60.3044 -84.45 + 65 103.798 1201 4 0 -33.5579 60.3031 -85.85 + 65 167.23 732 3 1 -33.5506 60.2751 -114.45 + 65 307.548 1201 3 0 -33.551 60.2735 -115.85 + 65 95.6458 732 2 1 -33.56 60.2434 -144.45 + 65 93.2267 1200 2 0 -33.5596 60.2424 -145.85 + 65 105.677 732 1 1 -33.5539 60.2253 -174.45 + 65 108.754 1200 1 0 -33.5535 60.2256 -175.85 + 65 132.868 732 0 1 -33.5399 60.2306 -204.45 + 65 118.561 1200 0 0 -33.5407 60.2307 -205.85 + 65 14.3698 424 4 1 -95.2 87.1791 -84.6272 + 65 69.2676 51 8 0 -143.09 -169.75 33.7949 + 65 120.625 183 8 1 -143.508 -170.329 35.15 + 65 2.43313 1200 3 0 -33.5234 60.25 -116.196 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 7.19047 LIN +Particle: proton +Event: 66 +Number of tracker hits in this event: 22 + 66 122.485 1547 9 1 129.626 -32.7917 65.55 + 66 191.96 736 9 0 129.624 -32.7915 64.15 + 66 221.768 1547 8 1 129.591 -32.7899 35.55 + 66 88.5509 736 8 0 129.589 -32.7908 34.15 + 66 104.226 1546 7 1 129.536 -32.8122 5.55 + 66 164.294 736 7 0 129.533 -32.8127 4.15 + 66 106.19 1546 6 1 129.488 -32.8199 -24.45 + 66 132.004 736 6 0 129.486 -32.8199 -25.85 + 66 245.79 1546 5 1 129.449 -32.8267 -54.45 + 66 91.9062 736 5 0 129.448 -32.8261 -55.85 + 66 109.525 1546 4 1 129.414 -32.8194 -84.45 + 66 142.467 736 4 0 129.413 -32.8192 -85.85 + 66 107.229 1546 3 1 129.395 -32.8133 -114.45 + 66 131.356 736 3 0 129.395 -32.8126 -115.85 + 66 133.786 1546 2 1 129.39 -32.7965 -144.45 + 66 92.05 736 2 0 129.39 -32.7962 -145.85 + 66 221.311 1546 1 1 129.395 -32.7874 -174.45 + 66 186.2 736 1 0 129.396 -32.7868 -175.85 + 66 192.517 1546 0 1 129.408 -32.7705 -204.45 + 66 109.297 736 0 0 129.407 -32.7708 -205.85 + 66 150.573 1547 0 1 129.55 -32.6623 -204.658 + 66 246.255 1548 0 1 129.75 -32.6592 -204.663 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 1.46797 LIN +Particle: proton +Event: 67 +Number of tracker hits in this event: 25 + 67 94.91 1175 10 1 55.0692 -66.0813 95.55 + 67 110.524 569 10 0 55.0641 -66.0854 94.15 + 67 130.4 1174 9 1 54.9656 -66.1712 65.55 + 67 115.696 569 9 0 54.9576 -66.1774 64.15 + 67 120.289 1173 8 1 54.7907 -66.2953 35.55 + 67 113.808 568 8 0 54.7838 -66.3014 34.15 + 67 111.551 1172 7 1 54.6131 -66.404 5.55 + 67 105.093 568 7 0 54.6041 -66.4113 4.15 + 67 144.867 1171 6 1 54.4168 -66.5577 -24.45 + 67 122.241 567 6 0 54.408 -66.5666 -25.85 + 67 107.751 1170 5 1 54.248 -66.7625 -54.45 + 67 302.589 566 5 0 54.2378 -66.7741 -55.85 + 67 159.432 1169 4 1 54.0188 -67.0246 -84.45 + 67 137.248 565 4 0 54.0105 -67.0389 -85.85 + 67 124.516 1169 3 1 53.8589 -67.3538 -114.45 + 67 120.226 563 3 0 53.8496 -67.3689 -115.85 + 67 114.031 1168 2 1 53.657 -67.686 -144.45 + 67 157.089 561 2 0 53.6482 -67.6941 -145.85 + 67 116.936 1167 1 1 53.4619 -67.861 -174.45 + 67 102.648 560 1 0 53.4504 -67.8706 -175.85 + 67 112.726 1165 0 1 53.2133 -68.0757 -204.45 + 67 134.326 559 0 0 53.2026 -68.0806 -205.85 + 67 309.589 567 5 0 54.2007 -66.65 -56.0308 + 67 91.9024 290 8 0 116.862 -122.08 33.75 + 67 212.084 289 8 0 116.945 -122.15 33.8109 +Number of digits in this event: 16 +Using G4ParticleGun... +Particle energy: 7.42584 LIN +Particle: proton +Event: 68 +Number of tracker hits in this event: 17 + 68 120.713 1177 7 1 55.473 -137.292 5.55 + 68 136.978 214 7 0 55.4729 -137.292 4.15 + 68 268.193 1177 6 1 55.472 -137.295 -24.45 + 68 230.636 214 6 0 55.4725 -137.295 -25.85 + 68 162.602 1177 5 1 55.478 -137.306 -54.45 + 68 197.57 214 5 0 55.4788 -137.306 -55.85 + 68 137.286 1177 4 1 55.4951 -137.324 -84.45 + 68 216.719 214 4 0 55.4961 -137.325 -85.85 + 68 136.473 1177 3 1 55.5146 -137.35 -114.45 + 68 110.143 213 3 0 55.5145 -137.351 -115.85 + 68 109.271 1177 2 1 55.5133 -137.374 -144.45 + 68 109.103 213 2 0 55.513 -137.375 -145.85 + 68 146.553 1177 1 1 55.5057 -137.397 -174.45 + 68 160.48 213 1 0 55.5058 -137.399 -175.85 + 68 186.091 1177 0 1 55.5092 -137.423 -204.45 + 68 94.1573 213 0 0 55.5091 -137.424 -205.85 + 68 255.023 1176 6 1 55.45 -137.304 -24.742 +Number of digits in this event: 14 +Using G4ParticleGun... +Particle energy: 7.87667 LIN +Particle: proton +Event: 69 +Number of tracker hits in this event: 20 + 69 134.543 1507 9 1 121.68 44.9212 65.55 + 69 110.745 1124 9 0 121.68 44.9212 64.15 + 69 138.234 1507 8 1 121.682 44.9211 35.55 + 69 156.233 1124 8 0 121.682 44.9219 34.15 + 69 188.988 1507 7 1 121.68 44.9354 5.55 + 69 169.636 1124 7 0 121.68 44.9364 4.15 + 69 115.353 1507 6 1 121.695 44.957 -24.45 + 69 139.316 1124 6 0 121.696 44.9587 -25.85 + 69 144.007 1507 5 1 121.705 44.9934 -54.45 + 69 92.1432 1124 5 0 121.705 44.995 -55.85 + 69 156.195 1507 4 1 121.715 45.0271 -84.45 + 69 91.7309 1124 4 0 121.715 45.029 -85.85 + 69 162.467 1507 3 1 121.719 45.0652 -114.45 + 69 102.941 1125 3 0 121.719 45.0658 -115.85 + 69 98.9246 1507 2 1 121.708 45.0754 -144.45 + 69 119.943 1125 2 0 121.706 45.0758 -145.85 + 69 97.3427 1507 1 1 121.665 45.0792 -174.45 + 69 95.6127 1125 1 0 121.663 45.0798 -175.85 + 69 135.454 1507 0 1 121.63 45.091 -204.45 + 69 104.119 1125 0 0 121.629 45.0911 -205.85 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 7.83795 LIN +Particle: proton +Event: 70 +Number of tracker hits in this event: 23 + 70 114.379 986 10 1 17.3813 99.3355 95.55 + 70 155.908 1395 10 0 17.38 99.3346 94.15 + 70 173.624 986 9 1 17.3541 99.3186 65.55 + 70 115.423 1395 9 0 17.3521 99.3173 64.15 + 70 147.558 986 8 1 17.3097 99.2906 35.55 + 70 103.035 1395 8 0 17.3067 99.2893 34.15 + 70 114.997 985 7 1 17.2436 99.2656 5.55 + 70 131.147 1395 7 0 17.2402 99.2644 4.15 + 70 113.992 985 6 1 17.1579 99.2164 -24.45 + 70 102.658 1395 6 0 17.1549 99.2137 -25.85 + 70 109.851 985 5 1 17.0927 99.1577 -54.45 + 70 101.989 1395 5 0 17.0896 99.1546 -55.85 + 70 190.694 984 4 1 17.0289 99.0943 -84.45 + 70 139.735 1394 4 0 17.0254 99.0911 -85.85 + 70 141.525 984 3 1 16.9571 99.0239 -114.45 + 70 166.669 1394 3 0 16.9544 99.0199 -115.85 + 70 106.069 984 2 1 16.9009 98.9377 -144.45 + 70 125.841 1393 2 0 16.8979 98.9335 -145.85 + 70 364.687 983 1 1 16.836 98.8474 -174.45 + 70 126.441 1393 1 0 16.8321 98.8431 -175.85 + 70 113.324 983 0 1 16.7532 98.754 -204.45 + 70 14.383 1393 0 0 16.749 98.7502 -205.85 + 70 232.864 1392 0 0 16.7488 98.75 -205.914 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 8.89843 LIN +Particle: proton +Event: 71 +Number of tracker hits in this event: 16 + 71 122.022 758 7 1 -28.4341 143.642 5.55 + 71 125.717 1617 7 0 -28.433 143.642 4.15 + 71 126.899 758 6 1 -28.4091 143.645 -24.45 + 71 106.257 1617 6 0 -28.408 143.644 -25.85 + 71 101.429 758 5 1 -28.386 143.637 -54.45 + 71 100.721 1617 5 0 -28.3858 143.637 -55.85 + 71 129.534 758 4 1 -28.3813 143.643 -84.45 + 71 106.411 1617 4 0 -28.3809 143.643 -85.85 + 71 142.459 758 3 1 -28.3728 143.645 -114.45 + 71 103.8 1617 3 0 -28.3727 143.645 -115.85 + 71 99.82 758 2 1 -28.3708 143.639 -144.45 + 71 146.087 1617 2 0 -28.3711 143.637 -145.85 + 71 128.818 758 1 1 -28.3783 143.606 -174.45 + 71 139.474 1617 1 0 -28.3781 143.605 -175.85 + 71 119.997 758 0 1 -28.3747 143.587 -204.45 + 71 281.76 1617 0 0 -28.3736 143.586 -205.85 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 4.52037 LIN +Particle: proton +Event: 72 +Number of tracker hits in this event: 22 + 72 122.806 411 9 1 -97.9172 -77.0353 65.55 + 72 140.891 515 9 0 -97.9153 -77.0349 64.15 + 72 157.006 411 8 1 -97.8676 -77.0253 35.55 + 72 152.939 515 8 0 -97.8659 -77.0259 34.15 + 72 106.328 411 7 1 -97.8387 -77.0372 5.55 + 72 171.654 515 7 0 -97.8368 -77.0372 4.15 + 72 91.6966 411 6 1 -97.7932 -77.0334 -24.45 + 72 123.746 515 6 0 -97.7913 -77.0339 -25.85 + 72 89.7443 411 5 1 -97.7522 -77.0445 -54.45 + 72 104.646 515 5 0 -97.7496 -77.0461 -55.85 + 72 110.164 412 4 1 -97.6951 -77.0803 -84.45 + 72 96.9524 514 4 0 -97.6916 -77.0823 -85.85 + 72 162.84 412 3 1 -97.605 -77.1414 -114.45 + 72 172.679 514 3 0 -97.6027 -77.1442 -115.85 + 72 151.554 412 2 1 -97.5569 -77.2059 -144.45 + 72 96.871 514 2 0 -97.5549 -77.2098 -145.85 + 72 111.507 413 1 1 -97.5159 -77.2867 -174.45 + 72 97.5682 513 1 0 -97.5133 -77.2925 -175.85 + 72 110.51 413 0 1 -97.4615 -77.4156 -204.45 + 72 106.612 513 0 0 -97.4587 -77.4235 -205.85 + 72 6.72789 16 0 1 -176.75 -95.3127 -204.45 + 72 236.974 412 8 1 -97.75 -77.0195 35.5475 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 5.35138 LIN Particle: proton Event: 73 -Number of tracker hits in this event: 26 - 73 287.321 624 11 1 -55.2384 22.0202 125.55 - 73 149.837 1009 11 0 -55.2378 22.0208 124.15 - 73 144.168 624 10 1 -55.2251 22.0341 95.55 - 73 164.15 1009 10 0 -55.2238 22.0329 94.15 - 73 234.837 624 9 1 -55.201 22.0037 65.55 - 73 133.095 1009 9 0 -55.1995 22.0026 64.15 - 73 174.706 624 8 1 -55.1669 21.9826 35.55 - 73 101.513 1009 8 0 -55.1648 21.9809 34.15 - 73 370.823 624 7 1 -55.1287 21.9426 5.55 - 73 130.138 1009 7 0 -55.1277 21.9405 4.15 - 73 142.448 624 6 1 -55.1071 21.8977 -24.45 - 73 157.729 1009 6 0 -55.1071 21.896 -25.85 - 73 97.9122 624 5 1 -55.1102 21.8633 -54.45 - 73 105.975 1009 5 0 -55.1089 21.8603 -55.85 - 73 133.229 624 4 1 -55.083 21.7973 -84.45 - 73 107.002 1008 4 0 -55.0825 21.7933 -85.85 - 73 103.684 624 3 1 -55.075 21.7165 -114.45 - 73 106.19 1008 3 0 -55.0743 21.7126 -115.85 - 73 106.172 624 2 1 -55.0565 21.6351 -144.45 - 73 134.924 1007 2 0 -55.0559 21.6327 -145.85 - 73 100.211 625 1 1 -55.0485 21.5824 -174.45 - 73 137.601 1007 1 0 -55.0479 21.5806 -175.85 - 73 86.4681 625 0 1 -55.0373 21.5422 -204.45 - 73 105.752 1007 0 0 -55.0378 21.5398 -205.85 - 73 11.2763 1008 1 0 -55.0136 21.65 -176.239 - 73 162.918 1219 1 0 -60.0487 63.9073 -176.25 -Number of digits in this event: 16 +Number of tracker hits in this event: 183 + 73 130.09 684 11 1 -43.1176 9.61756 125.55 + 73 165.842 947 11 0 -43.1173 9.61836 124.15 + 73 108.213 684 10 1 -43.1148 9.63551 95.55 + 73 178.08 947 10 0 -43.1148 9.63549 94.15 + 73 122.641 684 9 1 -43.1206 9.63427 65.55 + 73 119.401 947 9 0 -43.121 9.63448 64.15 + 73 212.577 684 8 1 -43.1291 9.63347 35.55 + 73 191.448 947 8 0 -43.1295 9.63366 34.15 + 73 101.783 684 7 1 -43.1361 9.63874 5.55 + 73 170.867 947 7 0 -43.1365 9.63896 4.15 + 73 130.637 684 6 1 -43.1466 9.63519 -24.45 + 73 99.2115 947 6 0 -43.1471 9.63423 -25.85 + 73 123.433 684 5 1 -43.1574 9.61823 -54.45 + 73 116.376 947 5 0 -43.158 9.61854 -55.85 + 73 111.378 684 4 1 -43.1736 9.62577 -84.45 + 73 119.239 947 4 0 -43.1765 9.62835 -85.85 + 73 47.0857 651 1 1 -49.65 -76.3163 -174.645 + 73 348.16 1346 2 0 -0.928824 89.3531 -146.026 + 73 58.3705 756 2 1 -28.727 77.037 -144.672 + 73 1196.73 867 4 0 -13.3793 -6.56736 -86.25 + 73 2363.41 866 4 0 -13.2274 -6.65 -86.1078 + 73 274.86 840 4 1 -11.8802 -7.37178 -84.85 + 73 2167.35 841 4 1 -11.85 -7.38798 -84.8219 + 73 2384.83 842 4 1 -11.65 -7.50205 -84.6357 + 73 197.011 843 4 1 -11.45 -7.62009 -84.4624 + 73 2777.4 1201 4 0 -52.8876 60.2618 -86.25 + 73 3989.15 1202 4 0 -52.9208 60.45 -86.1489 + 73 5492.31 1203 4 0 -52.9466 60.65 -86.0269 + 73 1162.77 712 4 0 -42.826 -37.6207 -86.25 + 73 3726.33 711 4 0 -42.8258 -37.65 -86.2327 + 73 18448.7 938 4 0 1.95916 7.82537 -86.25 + 73 746.188 1060 4 0 -14.4558 32.1743 -86.25 + 73 2344.99 1061 4 0 -14.3589 32.25 -86.156 + 73 383.388 1062 4 0 -14.1179 32.45 -85.8934 + 73 1823.63 834 4 1 -13.2104 33.2515 -84.85 + 73 2550.64 835 4 1 -13.05 33.3927 -84.6714 + 73 313.532 836 4 1 -12.85 33.5635 -84.469 + 73 2193.75 792 4 0 30.8914 -21.5574 -86.25 + 73 8361.76 791 4 0 31.115 -21.65 -86.1659 + 73 1321.87 682 3 1 -43.4609 9.39222 -114.45 + 73 1326.37 681 3 1 -43.65 9.21897 -114.657 + 73 1130.55 940 3 0 -44.719 8.21085 -115.85 + 73 1344.04 939 3 0 -44.8894 8.05 -116.04 + 73 685.199 547 2 1 -70.5902 -16.7407 -144.45 + 73 2654.73 546 2 1 -70.65 -16.7786 -144.512 + 73 1416.2 545 2 1 -70.85 -16.9066 -144.746 + 73 6234.53 812 2 0 -71.7408 -17.511 -145.85 + 73 1015.92 811 2 0 -71.9728 -17.65 -146.138 + 73 536.034 680 3 1 -43.85 9.72493 -114.488 + 73 566.048 679 3 1 -44.05 9.75812 -114.574 + 73 591.556 678 3 1 -44.25 9.79049 -114.66 + 73 712.225 677 3 1 -44.45 9.82289 -114.745 + 73 140.847 676 3 1 -44.65 9.85359 -114.829 + 73 916.48 950 3 0 -47.0434 10.2081 -115.85 + 73 2198.9 951 3 0 -47.3261 10.25 -115.971 + 73 1027.52 327 2 1 -114.575 21.9943 -144.45 + 73 991.389 326 2 1 -114.75 22.0233 -144.587 + 73 719.789 325 2 1 -114.95 22.0588 -144.741 + 73 3139.55 1011 2 0 -116.332 22.3171 -145.85 + 73 1552.17 685 3 1 -42.938 9.32503 -114.45 + 73 1685.05 686 3 1 -42.85 9.20856 -114.531 + 73 825.832 687 3 1 -42.65 8.94606 -114.712 + 73 224.841 936 3 0 -41.3591 7.3041 -115.85 + 73 841.19 935 3 0 -41.3166 7.25 -115.888 + 73 861.035 934 3 0 -41.1573 7.05 -116.026 + 73 655.997 933 3 0 -41.0018 6.85 -116.162 + 73 239.984 858 2 1 -8.28077 -34.8941 -144.45 + 73 1583.49 859 2 1 -8.25 -34.9304 -144.472 + 73 1605.24 860 2 1 -8.05 -35.1701 -144.614 + 73 1372.68 861 2 1 -7.85 -35.4124 -144.75 + 73 757.411 712 2 0 -6.08058 -37.5442 -145.85 + 73 1587.16 711 2 0 -5.99291 -37.65 -145.904 + 73 1819.55 710 2 0 -5.83907 -37.85 -146.007 + 73 1956.11 709 2 0 -5.68346 -38.05 -146.117 + 73 410.816 708 2 0 -5.52661 -38.25 -146.23 + 73 3523.24 683 3 1 -43.2942 9.95283 -114.45 + 73 1070.45 958 3 0 -43.6326 11.6601 -115.85 + 73 1284.32 959 3 0 -43.6694 11.85 -116.006 + 73 629.478 960 3 0 -43.7097 12.05 -116.175 + 73 512.843 819 4 0 -75.4809 -16.0834 -86.25 + 73 635.977 818 4 0 -75.6896 -16.25 -86.0693 + 73 7.24862 817 4 0 -75.9426 -16.45 -85.852 + 73 361.243 514 4 1 -77.1069 -17.3663 -84.85 + 73 572.415 513 4 1 -77.25 -17.479 -84.7268 + 73 385.609 512 4 1 -77.45 -17.6361 -84.555 + 73 753.144 678 5 0 -112.495 -44.2646 -56.25 + 73 710.466 677 5 0 -112.739 -44.45 -56.053 + 73 407.731 329 5 1 -114.219 -45.574 -54.85 + 73 604.7 328 5 1 -114.35 -45.6737 -54.7432 + 73 400.895 327 5 1 -114.55 -45.8253 -54.5812 + 73 624.57 543 6 0 -150.084 -71.279 -26.25 + 73 648.609 542 6 0 -150.323 -71.45 -26.0595 + 73 384.679 141 6 1 -151.825 -72.537 -24.85 + 73 622.461 140 6 1 -151.95 -72.6278 -24.7492 + 73 503.255 139 6 1 -152.15 -72.7727 -24.5891 + 73 145.375 954 3 0 -43.4523 10.9452 -115.85 + 73 226.11 955 3 0 -43.47 11.05 -115.986 + 73 4.21437 956 3 0 -43.504 11.25 -116.247 + 73 447.075 664 2 1 -47.1622 32.775 -144.45 + 73 4.50475 1068 2 0 -47.3648 33.8459 -145.85 + 73 197.049 1069 2 0 -47.3655 33.85 -145.855 + 73 118.73 1070 2 0 -47.4032 34.05 -146.116 + 73 449.703 642 1 1 -51.5815 55.9163 -174.45 + 73 12.6361 641 1 1 -51.65 56.2175 -174.84 + 73 61.1742 1184 1 0 -51.8279 56.9965 -175.85 + 73 361.312 1185 1 0 -51.8401 57.05 -175.919 + 73 69.8696 1186 1 0 -51.8855 57.25 -176.179 + 73 444.22 616 0 1 -56.8198 79.0326 -204.45 + 73 628.255 615 0 1 -56.85 79.166 -204.624 + 73 294.96 1300 0 0 -57.0601 80.1044 -205.85 + 73 287.499 1301 0 0 -57.0927 80.25 -206.04 + 73 345.812 1182 1 0 -51.1041 56.5801 -175.85 + 73 40.365 659 4 1 -48.0688 -26.204 -84.85 + 73 88.2842 854 14 0 -12.0325 -9.1928 213.75 + 73 115.412 1050 14 1 30.25 64.3882 215.474 + 73 45.6764 964 3 0 -42.02 13.0197 -115.85 + 73 296.771 965 3 0 -42.0091 13.05 -115.865 + 73 339.453 966 3 0 -41.9368 13.25 -115.964 + 73 424.694 967 3 0 -41.8637 13.45 -116.063 + 73 268.988 968 3 0 -41.7906 13.65 -116.161 + 73 646.627 798 2 1 -20.3681 71.9136 -144.45 + 73 839.444 799 2 1 -20.25 72.3153 -144.658 + 73 58.7316 1272 2 0 -19.6081 74.6117 -145.85 + 73 426.644 1273 2 0 -19.5975 74.65 -145.87 + 73 397.916 1274 2 0 -19.5419 74.85 -145.973 + 73 415.997 1275 2 0 -19.4862 75.05 -146.078 + 73 243.51 1276 2 0 -19.4294 75.25 -146.181 + 73 825.23 879 1 1 -4.16925 129.036 -174.45 + 73 972.634 880 1 1 -4.05 129.387 -174.616 + 73 298.998 1559 1 0 -3.13139 131.994 -175.85 + 73 362.862 1560 1 0 -3.07634 132.15 -175.924 + 73 475.023 1561 1 0 -3.00539 132.35 -176.019 + 73 371.185 1562 1 0 -2.93438 132.55 -176.115 + 73 153.268 1563 1 0 -2.86386 132.75 -176.212 + 73 649.55 947 3 0 -44.0225 9.57928 -115.85 + 73 238.042 610 2 1 -57.9648 7.97536 -144.45 + 73 366.067 609 2 1 -58.05 7.96418 -144.612 + 73 329.623 939 2 0 -58.6977 7.86605 -145.85 + 73 396.854 938 2 0 -58.8023 7.85 -146.05 + 73 32.4002 532 1 1 -73.6401 5.54893 -174.45 + 73 635.234 531 1 1 -73.65 5.54731 -174.468 + 73 10.6951 530 1 1 -73.85 5.51435 -174.84 + 73 811.346 926 1 0 -74.3865 5.41616 -175.85 + 73 453.089 452 0 1 -89.4919 2.84108 -204.45 + 73 247.419 451 0 1 -89.65 2.82541 -204.716 + 73 807.036 913 0 0 -90.3186 2.75124 -205.85 + 73 23.9354 943 3 0 -43.8528 8.70288 -115.85 + 73 295.995 942 3 0 -43.8863 8.65 -115.941 + 73 134.251 627 2 1 -54.4565 -7.85181 -144.45 + 73 94.6173 856 2 0 -54.9789 -8.67999 -145.85 + 73 68.5564 855 2 0 -55.0861 -8.85 -146.137 + 73 52.1411 571 1 1 -65.7823 -25.68 -174.45 + 73 65.7508 570 1 1 -65.85 -25.7847 -174.629 + 73 65.9015 767 1 0 -66.3098 -26.501 -175.85 + 73 57.9953 766 1 0 -66.4055 -26.65 -176.104 + 73 44.0114 514 0 1 -77.1911 -43.3703 -204.45 + 73 121.809 513 0 1 -77.25 -43.4639 -204.607 + 73 49.6302 679 0 0 -77.7183 -44.209 -205.85 + 73 114.668 678 0 0 -77.744 -44.25 -205.918 + 73 84.0177 684 3 1 -43.0873 9.49161 -114.45 + 73 225.208 941 3 0 -42.2328 8.45 -116.032 + 73 120.66 765 2 1 -26.9183 -10.265 -144.45 + 73 221.185 766 2 1 -26.85 -10.3488 -144.578 + 73 122.173 844 2 0 -26.1699 -11.1698 -145.85 + 73 218.284 843 2 0 -26.1034 -11.25 -145.974 + 73 205.181 846 1 1 -10.7747 -29.4786 -174.45 + 73 182.065 847 1 1 -10.65 -29.6277 -174.672 + 73 47.8407 748 1 0 -9.98542 -30.4185 -175.85 + 73 274.971 747 1 0 -9.95893 -30.45 -175.897 + 73 45.3794 746 1 0 -9.79097 -30.65 -176.195 + 73 184.713 929 0 1 5.96716 -49.3851 -204.45 + 73 517.313 930 0 1 6.05 -49.4847 -204.599 + 73 147.918 648 0 0 6.74862 -50.3295 -205.85 + 73 199.965 647 0 0 6.84831 -50.45 -206.028 + 73 53.2708 931 0 1 6.25 -49.6119 -204.795 + 73 217.555 948 7 0 -43.1374 9.65 3.99861 + 73 83.1587 674 6 1 -45.2454 17.6756 -24.45 + 73 63.7418 675 6 1 -45.05 17.6004 -24.6973 + 73 26.1045 986 6 0 -44.4423 17.2724 -25.8501 + 73 100.022 985 6 0 -44.3917 17.25 -25.9501 + 73 112.678 762 5 1 -27.5349 6.79866 -54.4508 + 73 95.1129 935 5 0 -28.024 7.17272 -55.8501 + 73 62.6403 936 5 0 -28.1083 7.25 -56.1163 +Number of digits in this event: 143 Using G4ParticleGun... -Particle energy: 5.54568 LIN +Particle energy: 1.47443 LIN Particle: proton Event: 74 -Number of tracker hits in this event: 36 - 74 145.737 315 9 1 -117.021 23.4188 65.55 - 74 92.128 1016 9 0 -117.02 23.4175 64.15 - 74 145.854 315 8 1 -117.005 23.3882 35.55 - 74 112.308 1016 8 0 -117.005 23.3867 34.15 - 74 137.125 315 7 1 -117.004 23.3497 5.55 - 74 105.096 1016 7 0 -117.003 23.3475 4.15 - 74 169.19 315 6 1 -116.986 23.3061 -24.45 - 74 226.784 1016 6 0 -116.985 23.3046 -25.85 - 74 108.541 315 5 1 -116.965 23.2709 -54.45 - 74 125.021 1016 5 0 -116.964 23.2691 -55.85 - 74 92.0993 316 4 1 -116.949 23.2282 -84.45 - 74 113.725 1015 4 0 -116.949 23.2263 -85.85 - 74 103.576 316 3 1 -116.94 23.1814 -114.45 - 74 119.12 1015 3 0 -116.938 23.1787 -115.85 - 74 101.937 316 2 1 -116.895 23.1234 -144.45 - 74 124.767 1015 2 0 -116.894 23.1202 -145.85 - 74 183.501 316 1 1 -116.859 23.0535 -174.45 - 74 68.9194 1015 1 0 -116.857 23.0505 -175.85 - 74 45.8254 1014 1 0 -116.857 23.05 -176.072 - 74 146.673 316 0 1 -116.82 22.9834 -204.45 - 74 107.94 1014 0 0 -116.817 22.9808 -205.85 - 74 130.421 1017 6 0 -116.95 23.45 -26.1873 - 74 138.976 1018 6 0 -116.918 23.6501 -26.1068 - 74 282.297 1017 9 0 -116.488 23.4961 64.15 - 74 30.301 348 8 1 -110.507 25.7543 35.55 - 74 114.293 347 8 1 -110.55 25.6657 35.4789 - 74 54.0059 346 8 1 -110.75 25.3567 35.2808 - 74 163.285 1022 8 0 -111.809 24.6338 34.15 - 74 184.834 1021 8 0 -112.021 24.4499 33.8815 - 74 20.5058 686 8 0 -78.7453 -42.8184 33.75 - 74 79.8254 685 8 0 -78.7128 -42.85 33.7668 - 74 71.8563 684 8 0 -78.693 -43.05 33.8574 - 74 92.6699 683 8 0 -78.6618 -43.25 33.9166 - 74 114.494 682 8 0 -78.776 -43.45 34.0003 - 74 97.4678 681 8 0 -78.7821 -43.65 33.9856 - 74 199.929 680 8 0 -78.7497 -43.85 34.0072 -Number of digits in this event: 16 +Number of tracker hits in this event: 30 + 74 118.395 1012 10 1 22.6482 85.0207 95.55 + 74 112.826 1324 10 0 22.6473 85.0194 94.15 + 74 117.077 1012 9 1 22.6259 84.9991 65.55 + 74 106.502 1324 9 0 22.625 84.997 64.15 + 74 128.53 1012 8 1 22.6019 84.9507 35.55 + 74 119.721 1324 8 0 22.6028 84.949 34.15 + 74 101.686 1012 7 1 22.6331 84.9114 5.55 + 74 151.094 1324 7 0 22.6361 84.9061 4.15 + 74 135.488 1013 6 1 22.6982 84.7975 -24.45 + 74 105.396 1323 6 0 22.7012 84.7931 -25.85 + 74 106.206 1013 5 1 22.7514 84.7124 -54.45 + 74 162.805 1323 5 0 22.7499 84.708 -55.85 + 74 115.057 1013 4 1 22.7143 84.6185 -84.45 + 74 115.543 1322 4 0 22.7084 84.6164 -85.85 + 74 208.928 1012 3 1 22.5987 84.5533 -114.45 + 74 147.041 1322 3 0 22.5907 84.5486 -115.85 + 74 184.645 1011 2 1 22.4375 84.4522 -144.45 + 74 116.774 1321 2 0 22.4265 84.4426 -145.85 + 74 143.624 1010 1 1 22.2092 84.2293 -174.45 + 74 170.909 1320 1 0 22.1979 84.215 -175.85 + 74 189.335 1009 0 1 21.9669 83.9051 -204.45 + 74 106.588 1319 0 0 21.9575 83.8902 -205.85 + 74 94.094 1012 2 1 22.4504 84.2292 -144.485 + 74 68.0069 1013 2 1 22.65 84.2526 -144.761 + 74 1.37767 1014 2 1 22.85 84.2187 -144.847 + 74 278.858 1326 2 0 26.0362 85.3926 -145.85 + 74 94.0074 1325 2 0 26.4248 85.25 -145.906 + 74 20.6613 1324 2 0 26.4295 85.05 -145.87 + 74 105.385 1034 2 1 26.8685 82.5567 -144.85 + 74 206.102 1307 2 0 26.9561 81.4805 -145.85 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 3.62502 LIN +Particle energy: 1.06406 LIN Particle: proton Event: 75 Number of tracker hits in this event: 29 - 75 123.116 855 11 1 -8.92018 73.0336 125.55 - 75 99.9673 1264 11 0 -8.92053 73.0333 124.15 - 75 97.5486 855 10 1 -8.92394 73.0304 95.55 - 75 119.117 1264 10 0 -8.92604 73.0301 94.15 - 75 104.946 855 9 1 -8.96552 73.0159 65.55 - 75 111.788 1264 9 0 -8.97044 73.0164 64.15 - 75 95.1628 854 8 1 -9.07152 73.0147 35.55 - 75 112.562 1264 8 0 -9.07632 73.0141 34.15 - 75 326.396 854 7 1 -9.17816 73.0016 5.55 - 75 216.085 1264 7 0 -9.18278 73.0002 4.15 - 75 110.925 853 6 1 -9.28605 72.973 -24.45 - 75 97.1695 1264 6 0 -9.29073 72.9723 -25.85 - 75 112.348 853 5 1 -9.39154 72.9553 -54.45 - 75 153.601 1264 5 0 -9.39776 72.9547 -55.85 - 75 102.924 852 4 1 -9.52643 72.9437 -84.45 - 75 354.641 1264 4 0 -9.53157 72.9431 -85.85 - 75 103.718 852 3 1 -9.63455 72.9336 -114.45 - 75 142.362 1264 3 0 -9.63823 72.9347 -115.85 - 75 94.9458 851 2 1 -9.72226 72.9531 -144.45 - 75 91.3971 1264 2 0 -9.72751 72.955 -145.85 - 75 117.411 851 1 1 -9.83986 72.9874 -174.45 - 75 114.223 1264 1 0 -9.84578 72.9876 -175.85 - 75 92.2048 850 0 1 -9.97119 72.9906 -204.45 - 75 128.155 1264 0 0 -9.97746 72.991 -205.85 - 75 61.5215 1263 4 0 -9.4914 72.85 -86.0217 - 75 21.3921 855 7 1 -9.05 72.896 5.22788 - 75 146.948 1205 7 0 -5.74905 61.214 3.75 - 75 235.744 1204 7 0 -5.82925 61.05 3.94867 - 75 247.734 1203 7 0 -5.91138 60.85 3.95132 -Number of digits in this event: 11 + 75 123.958 607 10 1 -58.61 -83.0486 95.55 + 75 133.398 484 10 0 -58.6075 -83.0532 94.15 + 75 142.372 607 9 1 -58.5388 -83.1318 65.55 + 75 135.323 484 9 0 -58.5336 -83.1343 64.15 + 75 127.459 608 8 1 -58.4159 -83.1747 35.55 + 75 129.881 484 8 0 -58.4107 -83.1776 34.15 + 75 145.693 608 7 1 -58.3097 -83.2467 5.55 + 75 110.311 484 7 0 -58.302 -83.2489 4.15 + 75 142.355 609 6 1 -58.1404 -83.2812 -24.45 + 75 122.731 483 6 0 -58.1306 -83.2812 -25.85 + 75 141.879 610 5 1 -57.9253 -83.2804 -54.45 + 75 208.424 483 5 0 -57.9043 -83.2701 -55.85 + 75 136.813 612 4 1 -57.4697 -83.0785 -84.45 + 75 205.682 484 4 0 -57.4434 -83.0646 -85.85 + 75 135.717 615 3 1 -56.8944 -82.7711 -114.45 + 75 123.778 486 3 0 -56.8644 -82.7569 -115.85 + 75 116.817 618 2 1 -56.2546 -82.447 -144.45 + 75 82.7134 619 2 1 -56.25 -82.4455 -144.643 + 75 141.589 488 2 0 -56.2211 -82.4357 -145.85 + 75 131.133 622 1 1 -55.5286 -82.1785 -174.45 + 75 111.209 489 1 0 -55.5031 -82.1643 -175.85 + 75 114.759 625 0 1 -54.9993 -81.9145 -204.45 + 75 117.116 490 0 0 -54.971 -81.9059 -205.85 + 75 116.744 484 5 0 -57.8168 -83.25 -56.0554 + 75 183.548 481 5 0 -58.2569 -83.7358 -55.85 + 75 111.56 482 5 0 -58.132 -83.65 -56.1026 + 75 15.271 608 9 1 -58.45 -83.1109 65.1899 + 75 127.447 486 9 0 -58.1474 -82.8149 64.15 + 75 129.854 487 9 0 -58.1087 -82.65 64.067 +Number of digits in this event: 21 Using G4ParticleGun... -Particle energy: 1.33516 LIN +Particle energy: 5.81868 LIN Particle: proton Event: 76 -Number of tracker hits in this event: 20 - 76 107.372 366 9 1 -106.933 79.1917 65.55 - 76 126.202 1295 9 0 -106.937 79.1894 64.15 - 76 241.208 365 8 1 -107.012 79.1302 35.55 - 76 126.335 1295 8 0 -107.021 79.1289 34.15 - 76 117.971 364 7 1 -107.212 79.1163 5.55 - 76 89.8391 1295 7 0 -107.224 79.117 4.15 - 76 104.486 363 6 1 -107.468 79.1221 -24.45 - 76 121.435 1295 6 0 -107.478 79.1216 -25.85 - 76 234.118 362 5 1 -107.705 79.1216 -54.45 - 76 133.107 1295 5 0 -107.713 79.124 -55.85 - 76 170.345 361 4 1 -107.873 79.184 -84.45 - 76 99.3961 1295 4 0 -107.883 79.1897 -85.85 - 76 118.055 360 3 1 -108.077 79.2892 -114.45 - 76 182.308 1296 3 0 -108.086 79.293 -115.85 - 76 135.532 359 2 1 -108.268 79.4194 -144.45 - 76 138.211 1296 2 0 -108.283 79.4234 -145.85 - 76 147.798 357 1 1 -108.571 79.5332 -174.45 - 76 105.002 1297 1 0 -108.586 79.5356 -175.85 - 76 132.337 356 0 1 -108.879 79.5778 -204.45 - 76 117.585 1297 0 0 -108.888 79.5795 -205.85 -Number of digits in this event: 16 +Number of tracker hits in this event: 24 + 76 149.066 498 11 0 -20.9066 -80.2636 124.15 + 76 149.108 795 10 1 -20.9084 -80.2636 95.55 + 76 101.339 498 10 0 -20.9066 -80.2626 94.15 + 76 112.868 795 9 1 -20.8648 -80.2409 65.55 + 76 130.283 499 9 0 -20.8626 -80.2396 64.15 + 76 134.712 796 8 1 -20.8197 -80.2153 35.55 + 76 137 499 8 0 -20.8171 -80.2148 34.15 + 76 110.225 796 7 1 -20.759 -80.21 5.55 + 76 148.463 499 7 0 -20.7572 -80.2109 4.15 + 76 130.452 796 6 1 -20.7209 -80.2221 -24.45 + 76 85.9334 499 6 0 -20.7196 -80.2232 -25.85 + 76 118.062 796 5 1 -20.6882 -80.2418 -54.45 + 76 140.397 499 5 0 -20.6864 -80.2416 -55.85 + 76 127.915 797 4 1 -20.6481 -80.239 -84.45 + 76 197.661 499 4 0 -20.6472 -80.2397 -85.85 + 76 130.328 797 3 1 -20.6256 -80.2529 -114.45 + 76 136.278 498 3 0 -20.6245 -80.2543 -115.85 + 76 145.288 797 2 1 -20.6034 -80.2887 -144.45 + 76 150.2 498 2 0 -20.603 -80.2895 -145.85 + 76 104.079 797 1 1 -20.595 -80.3066 -174.45 + 76 108.973 498 1 0 -20.5945 -80.3069 -175.85 + 76 132.835 797 0 1 -20.5849 -80.3177 -204.45 + 76 114.658 498 0 0 -20.5845 -80.3179 -205.85 + 76 177.796 499 3 0 -20.6181 -80.2496 -116.225 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 8.49276 LIN +Particle energy: 3.16818 LIN Particle: proton Event: 77 -Number of tracker hits in this event: 48 - 77 345.695 1024 9 1 25.0375 -131.217 65.55 - 77 108.675 244 9 0 25.0378 -131.219 64.15 - 77 100.378 1024 8 1 25.0451 -131.254 35.55 - 77 139.931 244 8 0 25.0454 -131.257 34.15 - 77 102.494 1024 7 1 25.0479 -131.317 5.55 - 77 112.884 244 7 0 25.0479 -131.321 4.15 - 77 101.856 1024 6 1 25.0477 -131.408 -24.45 - 77 115.909 243 6 0 25.0485 -131.412 -25.85 - 77 103.85 1025 5 1 25.0676 -131.488 -54.45 - 77 227.391 243 5 0 25.0683 -131.492 -55.85 - 77 107.48 1025 4 1 25.0821 -131.571 -84.45 - 77 116.214 242 4 0 25.0832 -131.575 -85.85 - 77 112.502 1025 3 1 25.1069 -131.667 -114.45 - 77 99.4331 242 3 0 25.1076 -131.672 -115.85 - 77 128.714 1025 2 1 25.1234 -131.772 -144.45 - 77 243.272 241 2 0 25.1238 -131.777 -145.85 - 77 114.58 1025 1 1 25.1335 -131.87 -174.45 - 77 93.8 241 1 0 25.1349 -131.874 -175.85 - 77 104.47 1025 0 1 25.1611 -131.957 -204.45 - 77 167.186 240 0 0 25.1622 -131.962 -205.85 - 77 100.205 1025 7 1 25.129 -131.257 5.55 - 77 75.4923 1026 7 1 25.25 -131.377 5.51263 - 77 48.4639 1027 7 1 25.45 -131.49 5.46065 - 77 70.2534 1028 7 1 25.65 -131.608 5.4289 - 77 80.9893 1029 7 1 25.85 -131.779 5.41618 - 77 77.4658 1030 7 1 26.0501 -131.941 5.35839 - 77 60.425 1031 7 1 26.25 -132.071 5.33483 - 77 49.8874 1032 7 1 26.4501 -132.202 5.30854 - 77 75.2538 1033 7 1 26.6505 -132.328 5.28337 - 77 95.5714 1034 7 1 26.8502 -132.435 5.23857 - 77 98.3083 1035 7 1 27.05 -132.599 5.17043 - 77 60.5567 1036 7 1 27.25 -132.87 5.17242 - 77 132.241 225 7 0 29.4981 -134.964 4.14972 - 77 112.195 224 7 0 29.6311 -135.15 4.04953 - 77 57.2567 223 7 0 29.6196 -135.35 3.99772 - 77 110.165 222 7 0 29.5775 -135.55 3.96545 - 77 195.836 221 7 0 29.6012 -135.75 3.91494 - 77 93.7011 220 7 0 29.7301 -135.95 3.97186 - 77 98.9919 219 7 0 29.9346 -136.15 3.99987 - 77 70.4421 218 7 0 30.2179 -136.35 4.03884 - 77 47.6211 1059 7 1 31.9769 -138.096 5.15 - 77 142.891 1060 7 1 32.05 -138.15 5.19408 - 77 76.3633 1061 7 1 32.2503 -138.242 5.33634 - 77 146.619 1062 7 1 32.45 -138.317 5.52556 - 77 87.5348 1063 7 1 32.6502 -138.372 5.39998 - 77 34.4224 205 7 0 29.7671 -139.144 4.14992 - 77 311.689 204 7 0 29.7518 -139.15 4.143 - 77 27.2325 1025 9 1 25.05 -131.207 65.3731 -Number of digits in this event: 12 +Number of tracker hits in this event: 22 + 77 174.252 1511 9 1 122.436 -56.2668 65.55 + 77 137.852 618 9 0 122.437 -56.2669 64.15 + 77 140.966 1511 8 1 122.45 -56.2655 35.55 + 77 96.2458 618 8 0 122.449 -56.2653 34.15 + 77 105.322 1511 7 1 122.426 -56.2556 5.55 + 77 80.3914 618 7 0 122.427 -56.251 4.15 + 77 14.4672 619 7 0 122.427 -56.25 3.82796 + 77 140.079 1511 6 1 122.447 -56.154 -24.45 + 77 119.225 619 6 0 122.449 -56.1508 -25.85 + 77 100.181 1511 5 1 122.473 -56.0881 -54.45 + 77 133.524 619 5 0 122.473 -56.0822 -55.85 + 77 96.3255 1511 4 1 122.463 -55.9572 -84.45 + 77 151.267 620 4 0 122.464 -55.9507 -85.85 + 77 112.965 1511 3 1 122.48 -55.8205 -114.45 + 77 101.493 621 3 0 122.483 -55.8143 -115.85 + 77 28.1059 1511 2 1 122.55 -55.691 -144.45 + 77 148.868 1512 2 1 122.55 -55.6907 -144.568 + 77 121.275 621 2 0 122.553 -55.6866 -145.85 + 77 94.8031 1512 1 1 122.637 -55.5936 -174.45 + 77 114.327 622 1 0 122.64 -55.5893 -175.85 + 77 103.097 1512 0 1 122.693 -55.5051 -204.45 + 77 88.0244 622 0 0 122.696 -55.5007 -205.85 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 1.20025 LIN +Particle energy: 3.59878 LIN Particle: proton Event: 78 -Number of tracker hits in this event: 162 - 78 137.136 904 11 1 0.867259 65.8382 125.55 - 78 119.273 1228 11 0 0.865542 65.8384 124.15 - 78 116.87 903 10 1 0.843738 65.8476 95.55 - 78 180.801 1228 10 0 0.844746 65.8485 94.15 - 78 178.701 904 9 1 0.864269 65.8989 65.55 - 78 134.915 1229 9 0 0.861932 65.8998 64.15 - 78 119.954 903 8 1 0.829596 65.9212 35.55 - 78 213.854 1229 8 0 0.830908 65.918 34.15 - 78 119.36 903 7 1 0.842779 65.8361 5.55 - 78 144.886 1228 7 0 0.848726 65.8312 4.15 - 78 236.43 904 6 1 0.976763 65.7448 -24.45 - 78 127.263 1228 6 0 0.981622 65.7392 -25.85 - 78 114.616 905 5 1 1.08016 65.621 -54.45 - 78 140.828 1227 5 0 1.08545 65.6184 -55.85 - 78 125.171 905 4 1 1.20753 65.578 -84.45 - 78 245.483 1227 4 0 1.21273 65.5727 -85.85 - 78 124.021 906 3 1 1.34127 65.4424 -114.45 - 78 126.346 1226 3 0 1.34358 65.4347 -115.85 - 78 106.009 906 2 1 1.40801 65.2655 -144.45 - 78 163.895 1226 2 0 1.41497 65.2556 -145.85 - 78 143.482 907 1 1 1.56814 65.0343 -174.45 - 78 152.36 1224 1 0 1.5771 65.0221 -175.85 - 78 129.927 908 0 1 1.759 64.7847 -204.45 - 78 133.868 1223 0 0 1.76532 64.772 -205.85 - 78 68.9177 963 0 0 -24.6756 12.812 -206.25 - 78 77.7058 962 0 0 -24.7493 12.65 -206.108 - 78 65.4001 961 0 0 -24.8396 12.4499 -205.931 - 78 119.971 773 0 1 -25.397 11.2324 -204.85 - 78 241.912 772 0 1 -25.45 11.1187 -204.749 - 78 50.4353 760 1 0 -34.7753 -27.9373 -176.25 - 78 90.7313 759 1 0 -34.8013 -28.05 -176.168 - 78 100.984 758 1 0 -34.8457 -28.25 -176.026 - 78 20.954 757 1 0 -34.8911 -28.45 -175.883 - 78 81.5409 724 1 1 -35.2231 -29.8734 -174.85 - 78 229.264 723 1 1 -35.25 -29.9864 -174.768 - 78 60.1463 539 2 0 -47.1454 -72.0734 -146.25 - 78 89.8054 538 2 0 -47.1941 -72.25 -146.129 - 78 55.7957 537 2 0 -47.2494 -72.45 -145.994 - 78 2.82405 536 2 0 -47.3056 -72.6501 -145.859 - 78 158.318 661 2 1 -47.734 -74.156 -144.85 - 78 74.5991 660 2 1 -47.85 -74.5511 -144.582 - 78 71.9858 339 3 0 -58.241 -112.185 -116.25 - 78 101.742 338 3 0 -58.2851 -112.35 -116.125 - 78 67.1921 337 3 0 -58.3373 -112.55 -115.979 - 78 258.035 606 3 1 -58.7453 -114.149 -114.85 - 78 182.395 605 3 1 -58.8503 -114.557 -114.57 - 78 18.4782 105 4 0 -55.2775 -159.082 -86.2499 - 78 55.2618 104 4 0 -55.2718 -159.15 -86.206 - 78 52.835 103 4 0 -55.2584 -159.351 -86.0786 - 78 43.7672 102 4 0 -55.2453 -159.55 -85.9482 - 78 321.821 624 4 1 -55.1362 -161.266 -84.85 - 78 9.09595 937 0 0 -26.0951 7.65 -206.133 - 78 165.225 311 3 1 -117.913 -130.123 -114.749 - 78 282.571 310 3 1 -117.95 -130.148 -114.72 - 78 192.444 309 3 1 -118.15 -130.271 -114.592 - 78 35.4017 308 3 1 -118.35 -130.431 -114.478 - 78 213.752 312 3 1 -117.749 -129.941 -114.501 - 78 16.0319 256 4 1 -128.782 -132.484 -84.85 - 78 113.144 209 4 0 -120.806 -138.163 -86.2499 - 78 10.0789 294 4 1 -121.334 -138.282 -84.85 - 78 133.014 293 4 1 -121.35 -138.287 -84.8156 - 78 27.1379 900 0 0 -32.1306 0.25 -205.922 - 78 296.329 738 0 1 -32.3703 0.170253 -204.85 - 78 70.6006 1050 0 0 -32.2255 30.1054 -206.25 - 78 61.937 1049 0 0 -32.3805 30.05 -206.063 - 78 39.6382 733 0 1 -33.3745 29.6312 -204.85 - 78 104.55 732 0 1 -33.4501 29.5995 -204.76 - 78 32.4706 731 0 1 -33.65 29.5141 -204.531 - 78 51.5876 910 1 0 -39.0989 2.17246 -176.25 - 78 79.6068 909 1 0 -39.1199 2.05 -176.125 - 78 27.5555 908 1 0 -39.1565 1.85 -175.905 - 78 181.692 702 1 1 -39.5129 0.83153 -174.85 - 78 26.5468 701 1 1 -39.65 0.482585 -174.509 - 78 109.712 843 2 0 -42.1853 -11.2561 -146.25 - 78 129.48 689 2 1 -42.2073 -11.7505 -144.85 - 78 53.2904 781 3 0 -45.3699 -23.753 -116.25 - 78 56.5793 780 3 0 -45.4005 -23.85 -116.035 - 78 216.576 672 3 1 -45.4785 -24.4457 -114.85 - 78 221.78 739 4 0 -30.3237 -32.0598 -86.25 - 78 135.388 753 4 1 -29.4444 -32.491 -84.85 - 78 31.057 754 4 1 -29.2499 -32.6173 -84.5487 - 78 189.121 702 5 0 2.41866 -39.4659 -56.2499 - 78 65.8925 920 5 1 4.05481 -39.7178 -54.85 - 78 81.4202 921 5 1 4.25 -39.7478 -54.6747 - 78 20.8933 922 5 1 4.45055 -39.7904 -54.4984 - 78 124.771 740 6 0 14.7603 -32.0112 -26.25 - 78 47.7898 978 6 1 15.7393 -31.4124 -24.85 - 78 93.7774 979 6 1 15.85 -31.3514 -24.7197 - 78 148.861 981 6 1 16.3014 -31.4017 -24.45 - 78 2.99587 742 6 0 16.7418 -31.6477 -25.85 - 78 103.133 741 6 0 16.746 -31.65 -25.8623 - 78 144.266 967 5 1 13.5983 -32.956 -54.45 - 78 92.4433 966 5 1 13.45 -32.7621 -54.7161 - 78 112.218 742 5 0 12.2901 -31.5938 -55.85 - 78 125.891 743 5 0 12.0849 -31.45 -56.0873 - 78 280.643 730 0 1 -33.9456 29.392 -204.45 - 78 101.316 729 0 1 -34.05 29.3879 -204.677 - 78 127.026 1046 0 0 -34.6436 29.3299 -205.85 - 78 26.1189 1045 0 0 -34.7859 29.25 -206.242 - 78 214.29 941 0 0 -20.3557 8.40176 -206.25 - 78 67.7285 801 0 1 -19.7127 8.13908 -204.85 - 78 92.9601 802 0 1 -19.65 8.0768 -204.694 - 78 277.722 803 0 1 -19.45 8.02535 -204.549 - 78 6.03225 612 1 0 -33.9663 -57.6244 -176.25 - 78 67.8542 611 1 0 -33.9695 -57.65 -176.235 - 78 87.536 610 1 0 -34.0468 -57.85 -176.067 - 78 42.5512 609 1 0 -34.2117 -58.0501 -175.87 - 78 70.2993 722 1 1 -35.45 -59.2956 -174.671 - 78 76.5699 721 1 1 -35.65 -59.4315 -174.552 - 78 225.348 720 1 1 -35.8983 -59.6319 -174.45 - 78 7.40046 719 1 1 -36.0501 -59.3533 -174.832 - 78 45.3115 607 1 0 -36.9061 -58.535 -175.85 - 78 131.189 608 1 0 -37.0293 -58.45 -175.93 - 78 4.24234 959 1 0 -50.0814 12.039 -176.25 - 78 49.3506 960 1 0 -50.0843 12.05 -176.242 - 78 54.5595 961 1 0 -50.0881 12.2501 -176.17 - 78 95.6075 962 1 0 -50.0685 12.4503 -176.131 - 78 62.0594 963 1 0 -50.0964 12.6501 -176.138 - 78 21.355 964 1 0 -50.1743 12.85 -176.186 - 78 132.857 1078 0 0 -85.5256 35.85 -205.88 - 78 248.08 1079 0 0 -85.4055 35.85 -206.031 - 78 2.32525 807 0 0 -34.4039 -18.6381 -205.85 - 78 91.4902 806 0 0 -34.4076 -18.65 -205.861 - 78 73.228 805 0 0 -34.4867 -18.85 -206.049 - 78 11.9575 804 0 0 -34.574 -19.0505 -206.223 - 78 120.789 1036 0 1 27.307 35.6851 -204.85 - 78 196.65 1062 1 0 30.5295 32.5318 -176.25 - 78 119.977 1053 1 1 30.6836 32.4219 -174.85 - 78 117.306 1043 2 0 37.8038 28.8457 -146.25 - 78 120.678 1090 2 1 38.1575 28.6513 -144.85 - 78 21.0309 970 3 0 50.1924 14.0834 -116.25 - 78 209.487 969 3 0 50.2193 14.05 -116.184 - 78 158.807 1153 3 1 50.6676 13.3645 -114.85 - 78 55.1951 842 4 0 58.9166 -11.5267 -86.2497 - 78 89.9208 841 4 0 58.9588 -11.65 -86.1033 - 78 8.49453 840 4 0 59.0295 -11.8501 -85.8714 - 78 194.087 1196 4 1 59.3417 -12.7196 -84.85 - 78 21.3606 1197 4 1 59.45 -13.094 -84.5039 - 78 80.4562 707 5 0 62.0983 -38.4555 -56.25 - 78 72.5467 706 5 0 62.1238 -38.6501 -56.0305 - 78 78.778 1210 5 1 62.2241 -39.7342 -54.8499 - 78 88.0576 1211 5 1 62.25 -39.922 -54.6415 - 78 164.388 704 6 0 92.026 -39.2385 -26.25 - 78 37.9285 1366 6 1 93.4619 -39.2915 -24.85 - 78 77.8211 1367 6 1 93.55 -39.2976 -24.7594 - 78 58.0474 1368 6 1 93.75 -39.3165 -24.5595 - 78 78.3403 1371 6 1 94.3997 -39.5014 -24.45 - 78 82.5038 1372 6 1 94.5502 -39.5147 -24.5757 - 78 43.2258 1373 6 1 94.75 -39.5447 -24.7494 - 78 153.415 700 6 0 96.1448 -39.8775 -25.85 - 78 24.3134 1520 5 1 124.311 -55.5095 -54.4502 - 78 143.23 1521 5 1 124.35 -55.5821 -54.5094 - 78 89.7138 1522 5 1 124.55 -55.8978 -54.7696 - 78 64.3581 614 5 0 125.709 -57.0965 -55.85 - 78 126.859 613 5 0 125.855 -57.25 -55.9924 - 78 20.5033 612 5 0 126.072 -57.45 -56.2067 - 78 190.9 446 5 0 178.942 -90.8542 -56.2498 - 78 140.46 445 5 0 179.23 -90.95 -55.9921 - 78 8.0671 1164 0 0 23.8016 53.0397 -206.25 - 78 49.326 1165 0 0 23.7938 53.0501 -206.241 - 78 35.0128 1087 0 1 37.5408 25.0916 -204.85 - 78 114.277 1225 2 0 1.46461 65.25 -146.097 -Number of digits in this event: 64 +Number of tracker hits in this event: 23 + 78 113.047 1075 10 1 35.0917 94.5423 95.55 + 78 144.58 1371 10 0 35.0947 94.5416 94.15 + 78 105.119 1075 9 1 35.1613 94.5241 65.55 + 78 137.093 1371 9 0 35.1625 94.5233 64.15 + 78 339.935 1075 8 1 35.1792 94.5074 35.55 + 78 104.378 1371 8 0 35.1789 94.5074 34.15 + 78 98.5136 1075 7 1 35.1734 94.5087 5.55 + 78 114.79 1371 7 0 35.1714 94.509 4.15 + 78 134.413 1075 6 1 35.1356 94.518 -24.45 + 78 116.3 1371 6 0 35.1325 94.5199 -25.85 + 78 120.104 1075 5 1 35.0679 94.5576 -54.45 + 78 111.363 1372 5 0 35.064 94.5606 -55.85 + 78 120.058 1074 4 1 34.9799 94.6163 -84.45 + 78 101.491 1372 4 0 34.9744 94.6201 -85.85 + 78 125.329 1074 3 1 34.8676 94.6951 -114.45 + 78 219.966 1372 3 0 34.8608 94.6985 -115.85 + 78 255.082 1073 2 1 34.721 94.7742 -144.45 + 78 113.116 1373 2 0 34.7127 94.7771 -145.85 + 78 108.087 1072 1 1 34.5439 94.8361 -174.45 + 78 121.88 1373 1 0 34.5378 94.8387 -175.85 + 78 145.163 1071 0 1 34.4132 94.8855 -204.45 + 78 106.318 1373 0 0 34.4063 94.8863 -205.85 + 78 116.375 1371 3 0 34.8504 94.55 -116.061 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 2.18207 LIN +Particle energy: 3.34017 LIN Particle: proton Event: 79 Number of tracker hits in this event: 24 - 79 158.388 932 9 1 6.46136 -118.871 65.55 - 79 103.492 306 9 0 6.45961 -118.871 64.15 - 79 392.684 931 8 1 6.42288 -118.881 35.55 - 79 123.626 306 8 0 6.42666 -118.882 34.15 - 79 99.7547 932 7 1 6.50794 -118.91 5.55 - 79 167.581 306 7 0 6.51199 -118.909 4.15 - 79 103.052 932 6 1 6.60309 -118.88 -24.45 - 79 135.61 306 6 0 6.60799 -118.878 -25.85 - 79 116.622 933 5 1 6.71008 -118.851 -54.45 - 79 131.177 306 5 0 6.71295 -118.848 -55.85 - 79 142.16 933 4 1 6.77048 -118.804 -84.45 - 79 129.711 306 4 0 6.77543 -118.799 -85.85 - 79 172.416 934 3 1 6.8709 -118.71 -114.45 - 79 182.962 307 3 0 6.8802 -118.706 -115.85 - 79 167.902 935 2 1 7.07331 -118.619 -144.45 - 79 289.214 307 2 0 7.08295 -118.614 -145.85 - 79 137.947 936 1 1 7.26989 -118.497 -174.45 - 79 116.08 308 1 0 7.27847 -118.49 -175.85 - 79 119.434 937 0 1 7.45889 -118.343 -204.45 - 79 127.765 309 0 0 7.46847 -118.338 -205.85 - 79 45.8341 997 0 0 153.762 19.5178 -206.167 - 79 0.00655 500 1 1 -80.05 -53.0304 -174.673 - 79 54.1419 633 1 0 -79.1188 -53.3418 -175.85 - 79 58.6501 308 2 0 7.06855 -118.55 -146.165 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 3.51954 LIN -Particle: proton -Event: 80 -Number of tracker hits in this event: 39 - 80 116.909 447 10 1 -90.6992 -13.6389 95.55 - 80 148.848 832 10 0 -90.7023 -13.6364 94.15 - 80 132.696 446 9 1 -90.7709 -13.5849 65.55 - 80 111.162 832 9 0 -90.7705 -13.5826 64.15 - 80 112.147 446 8 1 -90.759 -13.5384 35.55 - 80 119.185 832 8 0 -90.7589 -13.536 34.15 - 80 97.7688 447 7 1 -90.7497 -13.4841 5.55 - 80 37.4384 446 7 1 -90.75 -13.484 5.29102 - 80 91.2538 832 7 0 -90.7511 -13.4833 4.15 - 80 110.174 446 6 1 -90.7792 -13.4673 -24.45 - 80 152.303 832 6 0 -90.7788 -13.4648 -25.85 - 80 97.0186 446 5 1 -90.7657 -13.4168 -54.45 - 80 101.961 833 5 0 -90.7665 -13.4142 -55.85 - 80 111.7 446 4 1 -90.789 -13.3648 -84.45 - 80 104.103 833 4 0 -90.7883 -13.3626 -85.85 - 80 108.911 446 3 1 -90.7755 -13.3212 -114.45 - 80 108.159 833 3 0 -90.7768 -13.3201 -115.85 - 80 128.705 446 2 1 -90.806 -13.2766 -144.45 - 80 109.837 833 2 0 -90.8071 -13.2759 -145.85 - 80 110.264 446 1 1 -90.834 -13.2647 -174.45 - 80 108.484 833 1 0 -90.8348 -13.2639 -175.85 - 80 190.089 446 0 1 -90.8438 -13.2472 -204.45 - 80 117.058 834 0 0 -90.8452 -13.2483 -205.85 - 80 61.2457 447 5 1 -90.6968 -13.3664 -54.45 - 80 55.6126 448 5 1 -90.55 -13.3058 -54.4745 - 80 49.7076 449 5 1 -90.3494 -13.2118 -54.5066 - 80 174.546 450 5 1 -90.05 -13.0925 -54.533 - 80 238.531 451 5 1 -89.8499 -13.6027 -54.7154 - 80 105.267 452 5 1 -89.65 -13.9292 -54.7786 - 80 30.3974 453 5 1 -89.45 -14.1662 -54.8282 - 80 35.8084 809 5 0 -85.9651 -18.1485 -55.85 - 80 67.1614 808 5 0 -85.8699 -18.2504 -55.8919 - 80 77.6588 807 5 0 -85.6681 -18.45 -55.9369 - 80 142.391 806 5 0 -85.4706 -18.65 -55.9689 - 80 72.9407 805 5 0 -85.249 -18.85 -56.0913 - 80 131.684 705 5 0 -36.924 -39.0275 -56.2499 - 80 37.7025 706 5 0 -36.7899 -38.85 -55.9163 - 80 240.097 716 5 1 -36.737 -38.3799 -54.8499 - 80 14.2467 717 5 1 -36.6152 -38.0012 -54.4502 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 9.75528 LIN -Particle: proton -Event: 81 -Number of tracker hits in this event: 22 - 81 111.605 498 10 1 -80.2579 27.9278 95.55 - 81 105.229 1039 10 0 -80.2586 27.9278 94.15 - 81 152.973 498 9 1 -80.2737 27.9284 65.55 - 81 123.052 1039 9 0 -80.2741 27.9292 64.15 - 81 91.0456 498 8 1 -80.2834 27.946 35.55 - 81 187.041 1039 8 0 -80.2836 27.9473 34.15 - 81 101.903 498 7 1 -80.2846 27.9743 5.55 - 81 100.925 1039 7 0 -80.2844 27.975 4.15 - 81 141.728 498 6 1 -80.2785 27.9915 -24.45 - 81 113.25 1039 6 0 -80.2782 27.9916 -25.85 - 81 103.557 498 5 1 -80.2667 27.9928 -54.45 - 81 145.119 1039 5 0 -80.2659 27.9931 -55.85 - 81 113.74 499 4 1 -80.2493 28.0007 -84.45 - 81 120.249 1039 4 0 -80.2486 28.001 -85.85 - 81 136.749 499 3 1 -80.2347 28.0082 -114.45 - 81 135.742 1039 3 0 -80.2339 28.0084 -115.85 - 81 195.156 499 2 1 -80.2194 28.0133 -144.45 - 81 86.8393 1039 2 0 -80.2195 28.0132 -145.85 - 81 160.581 499 1 1 -80.2188 28.0135 -174.45 - 81 114.991 1039 1 0 -80.219 28.0132 -175.85 - 81 130.273 499 0 1 -80.2191 28.0049 -204.45 - 81 109.067 1039 0 0 -80.2189 28.0052 -205.85 -Number of digits in this event: 12 -Using G4ParticleGun... -Particle energy: 9.63452 LIN -Particle: proton -Event: 82 -Number of tracker hits in this event: 20 - 82 121.763 1072 9 1 34.5717 130.158 65.55 - 82 94.7397 1550 9 0 34.5718 130.159 64.15 - 82 279.265 1072 8 1 34.5745 130.173 35.55 - 82 114.288 1550 8 0 34.5744 130.174 34.15 - 82 107.021 1072 7 1 34.5718 130.194 5.55 - 82 201.826 1550 7 0 34.5719 130.195 4.15 - 82 100.486 1072 6 1 34.5751 130.221 -24.45 - 82 103.173 1550 6 0 34.5751 130.222 -25.85 - 82 136.654 1072 5 1 34.5737 130.24 -54.45 - 82 132.572 1550 5 0 34.5731 130.241 -55.85 - 82 168.619 1072 4 1 34.5626 130.269 -84.45 - 82 110.066 1550 4 0 34.5622 130.269 -85.85 - 82 108.376 1072 3 1 34.5564 130.278 -114.45 - 82 118.419 1550 3 0 34.5555 130.278 -115.85 - 82 123.141 1072 2 1 34.5389 130.267 -144.45 - 82 120.411 1550 2 0 34.5392 130.264 -145.85 - 82 101.706 1072 1 1 34.5453 130.203 -174.45 - 82 129.615 1550 1 0 34.5461 130.199 -175.85 - 82 100.312 1072 0 1 34.5632 130.137 -204.45 - 82 117.352 1549 0 0 34.5627 130.134 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 9.57135 LIN -Particle: proton -Event: 83 -Number of tracker hits in this event: 12 - 83 91.5493 576 10 1 -64.7922 89.9495 95.55 - 83 152.939 1349 10 0 -64.7918 89.9498 94.15 - 83 109.895 576 9 1 -64.7795 89.9567 65.55 - 83 116.904 1349 9 0 -64.7786 89.9572 64.15 - 83 138.995 576 8 1 -64.7595 89.9685 35.55 - 83 124.34 1349 8 0 -64.7584 89.9691 34.15 - 83 127.675 576 7 1 -64.7349 89.9776 5.55 - 83 117.908 1349 7 0 -64.7344 89.9786 4.15 - 83 106.058 576 6 1 -64.7241 90.0002 -24.45 - 83 115.62 1349 6 0 -64.7233 90.0012 -25.85 - 83 151.695 576 5 1 -64.7088 90.0208 -54.45 - 83 102.076 1349 5 0 -64.7077 90.0221 -55.85 -Number of digits in this event: 6 -Using G4ParticleGun... -Particle energy: 4.56258 LIN -Particle: proton -Event: 84 -Number of tracker hits in this event: 67 - 84 154.525 719 9 1 -36.1695 -125.359 65.55 - 84 115.278 273 9 0 -36.1707 -125.359 64.15 - 84 132.315 719 8 1 -36.1997 -125.358 35.55 - 84 93.7006 273 8 0 -36.204 -125.357 34.15 - 84 244.394 718 7 1 -36.2968 -125.344 5.55 - 84 116.964 274 7 0 -36.3028 -125.343 4.15 - 84 93.3949 718 6 1 -36.4291 -125.322 -24.45 - 84 99.2962 274 6 0 -36.4356 -125.321 -25.85 - 84 158.775 717 5 1 -36.5702 -125.283 -54.45 - 84 152.441 274 5 0 -36.5771 -125.283 -55.85 - 84 152.567 716 4 1 -36.7172 -125.276 -84.45 - 84 143.613 274 4 0 -36.7236 -125.275 -85.85 - 84 311.697 716 3 1 -36.8487 -125.27 -114.45 - 84 49.4994 715 3 1 -36.85 -125.27 -114.722 - 84 157.383 274 3 0 -36.8553 -125.27 -115.85 - 84 105.673 715 2 1 -36.9843 -125.287 -144.45 - 84 88.0904 274 2 0 -36.991 -125.287 -145.85 - 84 101.201 714 1 1 -37.1239 -125.294 -174.45 - 84 124.717 274 1 0 -37.1307 -125.294 -175.85 - 84 192.793 713 0 1 -37.2765 -125.3 -204.45 - 84 210.063 274 0 0 -37.2822 -125.3 -205.85 - 84 51.9618 1316 10 1 83.2637 40.1121 95.15 - 84 67.0745 1317 10 1 83.4503 40.3728 95.5233 - 84 46.4202 602 3 1 -59.6423 -162.684 -114.85 - 84 11.0223 83 0 0 -118 -163.523 -206.25 - 84 58.3545 82 0 0 -117.998 -163.55 -206.228 - 84 70.2124 81 0 0 -117.979 -163.75 -206.075 - 84 24.436 80 0 0 -117.947 -163.95 -205.908 - 84 97.2638 311 0 1 -117.775 -165.209 -204.85 - 84 173.28 312 0 1 -117.75 -165.517 -204.608 - 84 118.781 32 1 0 -97.0759 -173.649 -176.25 - 84 13.8894 31 1 0 -96.8319 -173.75 -175.914 - 84 73.2816 420 1 1 -96.1185 -174.124 -174.85 - 84 38.688 421 1 1 -95.95 -174.191 -174.59 - 84 70.7532 144 2 0 -90.2436 -151.342 -146.25 - 84 4.76742 145 2 0 -90.0499 -151.051 -145.857 - 84 109.736 453 2 1 -89.3724 -150.357 -144.85 - 84 44.0295 454 2 1 -89.2499 -150.173 -144.573 - 84 55.3015 313 0 0 -134.656 -117.48 -206.25 - 84 106.5 314 0 0 -134.79 -117.35 -206.094 - 84 14.04 315 0 0 -135.027 -117.15 -205.88 - 84 28.5945 219 0 1 -136.299 -116.04 -204.85 - 84 115.405 218 0 1 -136.35 -115.994 -204.807 - 84 81.6975 217 0 1 -136.55 -115.822 -204.65 - 84 55.7107 216 0 1 -136.75 -115.686 -204.518 - 84 37.7694 191 1 0 -125.765 -141.884 -176.25 - 84 82.1165 190 1 0 -125.74 -141.95 -176.179 - 84 62.8908 189 1 0 -125.674 -142.15 -175.983 - 84 103.638 273 1 1 -125.393 -143.03 -174.849 - 84 89.3439 274 1 1 -125.35 -143.15 -174.679 - 84 117.627 272 1 1 -125.55 -143.566 -174.505 - 84 97.4176 271 1 1 -125.75 -143.647 -174.549 - 84 101.965 270 1 1 -125.95 -143.75 -174.596 - 84 63.5207 269 1 1 -126.15 -143.842 -174.651 - 84 45.9243 268 1 1 -126.351 -143.861 -174.716 - 84 111.402 267 1 1 -126.55 -143.837 -174.79 - 84 87.6426 186 1 0 -129.732 -142.838 -175.85 - 84 189.539 187 1 0 -130.008 -142.75 -175.953 - 84 141.414 182 1 0 -125.823 -143.695 -175.85 - 84 7.84465 181 1 0 -125.995 -143.836 -175.85 - 84 20.6517 168 1 0 -126.005 -146.47 -175.85 - 84 83.4711 863 1 0 -70.4114 -7.25382 -176.182 - 84 184.854 714 0 1 -37.25 -125.309 -204.686 - 84 55.6083 628 4 0 4.53262 -54.4047 -86.25 - 84 30.2838 627 4 0 4.53898 -54.45 -86.1901 - 84 79.8397 703 4 0 17.3989 -39.4068 -86.25 - 84 28.67 783 4 0 -47.0547 -23.3798 -86.25 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 8.38629 LIN -Particle: proton -Event: 85 -Number of tracker hits in this event: 26 - 85 139.933 1007 10 1 21.4563 105.332 95.55 - 85 133.978 1425 10 0 21.4561 105.332 94.15 - 85 103.019 1007 9 1 21.4554 105.331 65.55 - 85 126.698 1425 9 0 21.4548 105.33 64.15 - 85 126.377 1006 8 1 21.4463 105.316 35.55 - 85 95.8752 1425 8 0 21.4467 105.314 34.15 - 85 111.338 1007 7 1 21.4555 105.277 5.55 - 85 145.678 1425 7 0 21.456 105.275 4.15 - 85 90.9801 1007 6 1 21.4633 105.23 -24.45 - 85 166.043 1425 6 0 21.4634 105.228 -25.85 - 85 123.515 1007 5 1 21.4666 105.199 -54.45 - 85 112.517 1425 5 0 21.4668 105.197 -55.85 - 85 270.283 1007 4 1 21.4675 105.158 -84.45 - 85 107.982 1425 4 0 21.4678 105.157 -85.85 - 85 225.414 1007 3 1 21.4718 105.142 -114.45 - 85 161.006 1424 3 0 21.4729 105.142 -115.85 - 85 94.8991 1007 2 1 21.4955 105.136 -144.45 - 85 100.187 1424 2 0 21.4966 105.137 -145.85 - 85 94.906 1007 1 1 21.5187 105.141 -174.45 - 85 199.911 1424 1 0 21.5206 105.141 -175.85 - 85 368.312 1007 0 1 21.5595 105.147 -204.45 - 85 105.574 1424 0 0 21.5604 105.147 -205.85 - 85 13.7702 994 1 1 18.9908 105.399 -174.85 - 85 10.2337 1426 1 0 17.3576 105.449 -175.85 - 85 63.3691 981 1 1 16.2928 105.919 -174.85 - 85 124.091 1426 9 0 21.4437 105.35 63.8619 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 1.32721 LIN -Particle: proton -Event: 86 -Number of tracker hits in this event: 28 - 86 189.185 944 11 1 8.9914 -69.822 125.55 - 86 150.742 551 11 0 8.99134 -69.8227 124.15 - 86 155.463 944 10 1 8.98776 -69.8144 95.55 - 86 156.787 551 10 0 8.98441 -69.8162 94.15 - 86 279.694 944 9 1 8.92074 -69.8718 65.55 - 86 103.073 550 9 0 8.92055 -69.8756 64.15 - 86 125.586 944 8 1 8.9238 -69.9514 35.55 - 86 144.237 550 8 0 8.92728 -69.9522 34.15 - 86 124.286 944 7 1 8.98656 -69.9442 5.55 - 86 121.135 550 7 0 8.99038 -69.9406 4.15 - 86 131.964 945 6 1 9.06321 -69.8644 -24.45 - 86 138.803 550 6 0 9.06796 -69.8619 -25.85 - 86 136.588 945 5 1 9.16487 -69.8038 -54.45 - 86 125.067 551 5 0 9.1673 -69.8024 -55.85 - 86 148.327 945 4 1 9.22618 -69.7704 -84.45 - 86 123.584 551 4 0 9.23311 -69.7712 -85.85 - 86 107.987 946 3 1 9.37619 -69.7816 -114.45 - 86 115.494 551 3 0 9.38335 -69.7755 -115.85 - 86 218.284 947 2 1 9.51852 -69.6498 -144.45 - 86 108.734 552 2 0 9.52484 -69.6413 -145.85 - 86 219.033 948 1 1 9.65155 -69.4491 -174.45 - 86 107.478 553 1 0 9.65633 -69.4395 -175.85 - 86 129.561 948 0 1 9.76051 -69.2388 -204.45 - 86 255.612 554 0 0 9.76576 -69.2269 -205.85 - 86 14.6675 550 11 0 9.1018 -69.8501 123.77 - 86 160.855 511 11 0 82.4467 -77.6605 123.75 - 86 142.577 512 11 0 82.5408 -77.65 123.853 - 86 347.207 1315 11 1 83.1315 -77.7769 125.15 -Number of digits in this event: 23 -Using G4ParticleGun... -Particle energy: 1.83412 LIN -Particle: proton -Event: 87 -Number of tracker hits in this event: 44 - 87 107.807 1001 11 1 20.3494 74.6661 125.55 - 87 136.455 1273 11 0 20.3492 74.6645 124.15 - 87 116.18 1001 10 1 20.3357 74.6403 95.55 - 87 112.025 1272 10 0 20.3378 74.6412 94.15 - 87 222.962 1001 9 1 20.3947 74.6459 65.55 - 87 115.296 1272 9 0 20.3968 74.6494 64.15 - 87 221.259 1273 9 0 20.3972 74.65 63.9264 - 87 104.854 1001 8 1 20.4489 74.7256 35.55 - 87 195.043 1273 8 0 20.4482 74.7278 34.15 - 87 201.921 1001 7 1 20.4368 74.7762 5.55 - 87 215.733 1273 7 0 20.4403 74.7798 4.15 - 87 163.755 1002 6 1 20.5162 74.8482 -24.45 - 87 157.192 1273 6 0 20.5185 74.849 -25.85 - 87 106.578 1002 5 1 20.5708 74.8687 -54.45 - 87 151.353 1274 5 0 20.574 74.8682 -55.85 - 87 126.635 1002 4 1 20.6455 74.8473 -84.45 - 87 108.538 1273 4 0 20.6495 74.8469 -85.85 - 87 136.832 1003 3 1 20.7206 74.8281 -114.45 - 87 110.527 1273 3 0 20.7262 74.8276 -115.85 - 87 102.21 1003 2 1 20.8245 74.8171 -144.45 - 87 623.916 1273 2 0 20.8302 74.8136 -145.85 - 87 102.794 1004 1 1 20.9322 74.7576 -174.45 - 87 100.641 1273 1 0 20.9374 74.7531 -175.85 - 87 112.563 1004 0 1 21.0344 74.639 -204.45 - 87 114.505 1272 0 0 21.0398 74.6326 -205.85 - 87 36.9878 1074 4 1 35.0344 88.2365 -84.85 - 87 95.9739 1273 0 0 21.0357 74.65 -205.909 - 87 134.934 1005 0 1 21.0623 75.0767 -204.85 - 87 81.4284 1274 2 0 21.1551 74.8503 -146.066 - 87 169.537 1001 5 1 20.4075 74.8734 -54.4503 - 87 28.8636 1272 5 0 20.591 74.4953 -55.85 - 87 55.2503 1271 5 0 20.6426 74.4498 -55.8945 - 87 1.82533 1016 5 1 23.4469 68.3254 -54.85 - 87 1.39987 1017 5 1 23.45 68.3213 -54.8491 - 87 8.38597 1236 5 0 24.9482 67.2695 -55.85 - 87 51.2029 1235 5 0 24.9588 67.25 -55.8634 - 87 206.772 1023 5 1 24.7374 64.994 -54.8499 - 87 6.78297 1000 9 1 20.25 74.7104 65.1774 - 87 148.05 1240 9 0 7.46664 68.0563 63.75 - 87 97.5872 936 9 1 7.37243 68.4642 65.15 - 87 103.768 935 9 1 7.25 68.4948 65.4474 - 87 256.834 934 9 1 7.05 68.6808 65.5091 - 87 151.048 933 9 1 6.85 68.4014 65.3334 - 87 153.853 932 9 1 6.65 68.186 65.3471 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 1.53316 LIN -Particle: proton -Event: 88 -Number of tracker hits in this event: 26 - 88 116.986 321 9 1 -115.752 -46.6217 65.55 - 88 143.835 667 9 0 -115.757 -46.6224 64.15 - 88 134.455 321 8 1 -115.864 -46.6306 35.55 - 88 114.572 667 8 0 -115.87 -46.6283 34.15 - 88 146.978 320 7 1 -115.972 -46.5934 5.55 - 88 154.025 667 7 0 -115.977 -46.5908 4.15 - 88 145.644 320 6 1 -116.089 -46.5314 -24.45 - 88 174.99 667 6 0 -116.093 -46.5267 -25.85 - 88 128.891 319 5 1 -116.183 -46.431 -54.45 - 88 149.844 668 5 0 -116.186 -46.4313 -55.85 - 88 139.717 319 4 1 -116.257 -46.4264 -84.45 - 88 161.681 668 4 0 -116.259 -46.427 -85.85 - 88 94.1716 319 3 1 -116.295 -46.4288 -114.45 - 88 103.157 668 3 0 -116.295 -46.4319 -115.85 - 88 107.243 319 2 1 -116.294 -46.4813 -144.45 - 88 128.776 667 2 0 -116.29 -46.4851 -145.85 - 88 119.444 319 1 1 -116.203 -46.5712 -174.45 - 88 111.363 667 1 0 -116.199 -46.5718 -175.85 - 88 161.709 320 0 1 -116.114 -46.5794 -204.45 - 88 238.511 667 0 0 -116.108 -46.5794 -205.85 - 88 73.0059 668 0 0 -116.242 -46.45 -205.983 - 88 130.512 669 0 0 -116.151 -46.25 -205.95 - 88 0.241147 670 0 0 -116.145 -46.05 -205.851 - 88 148.374 677 0 0 -115.619 -44.5197 -205.85 - 88 139.737 678 0 0 -115.525 -44.45 -205.981 - 88 141.058 327 6 1 -114.644 -46.9789 -24.8499 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 6.6348 LIN -Particle: proton -Event: 89 -Number of tracker hits in this event: 30 - 89 135.94 1224 10 1 64.916 86.4553 95.55 - 89 186.366 1332 10 0 64.9164 86.4559 94.15 - 89 128.703 1224 9 1 64.9231 86.4664 65.55 - 89 109.287 1332 9 0 64.9248 86.4668 64.15 - 89 97.9059 1224 8 1 64.9603 86.473 35.55 - 89 116.544 1332 8 0 64.9632 86.4731 34.15 - 89 143.153 1224 7 1 65.0236 86.4769 5.55 - 89 166.076 1332 7 0 65.0257 86.4758 4.15 - 89 129.431 1225 6 1 65.0677 86.4527 -24.45 - 89 98.3279 1332 6 0 65.0688 86.4509 -25.85 - 89 130.983 1225 5 1 65.0883 86.4248 -54.45 - 89 158.555 1331 5 0 65.0895 86.4235 -55.85 - 89 128.423 1225 4 1 65.1101 86.3949 -84.45 - 89 102.534 1331 4 0 65.1107 86.394 -85.85 - 89 95.7884 1225 3 1 65.1194 86.3735 -114.45 - 89 123.912 1331 3 0 65.1211 86.3721 -115.85 - 89 134.839 1225 2 1 65.1547 86.3461 -144.45 - 89 118.258 1331 2 0 65.1559 86.3453 -145.85 - 89 141.049 1225 1 1 65.1825 86.3316 -174.45 - 89 98.9519 1331 1 0 65.1842 86.33 -175.85 - 89 106.531 1225 0 1 65.2189 86.2968 -204.45 - 89 122.79 1331 0 0 65.2208 86.2942 -205.85 - 89 71.5913 1331 6 0 65.0693 86.4497 -26.0919 - 89 195.361 1218 6 0 71.8759 63.8073 -26.25 - 89 10.9086 1217 6 0 71.8792 63.65 -25.8965 - 89 173.724 1259 6 1 71.8925 63.2492 -24.85 - 89 110.415 1260 6 1 72.0502 63.2321 -24.5465 - 89 38.1947 1261 6 1 72.2501 63.5159 -24.7805 - 89 50.1052 1219 6 0 72.8344 63.9999 -25.8509 - 89 101.467 1220 6 0 72.8753 64.0501 -25.9879 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 5.4072 LIN -Particle: proton -Event: 90 -Number of tracker hits in this event: 27 - 90 126.056 1343 10 1 88.7255 70.1882 95.55 - 90 113.291 1250 10 0 88.7261 70.1891 94.15 - 90 110.891 1343 9 1 88.7402 70.2075 65.55 - 90 164.995 1250 9 0 88.7409 70.2099 64.15 - 90 272.447 1343 8 1 88.7616 70.2564 35.55 - 90 114.168 1251 8 0 88.7628 70.2588 34.15 - 90 127.14 1343 7 1 88.7876 70.3103 5.55 - 90 107.66 1251 7 0 88.7895 70.3128 4.15 - 90 128.271 1343 6 1 88.8289 70.3652 -24.45 - 90 110.689 1251 6 0 88.8313 70.3677 -25.85 - 90 103.39 1344 5 1 88.8743 70.4161 -54.45 - 90 104.166 1251 5 0 88.8757 70.4177 -55.85 - 90 232.627 1344 4 1 88.9044 70.447 -84.45 - 90 123.957 1251 4 0 88.9054 70.4482 -85.85 - 90 112.84 1344 3 1 88.9304 70.4703 -114.45 - 90 99.3798 1252 3 0 88.9309 70.4719 -115.85 - 90 101.806 1344 2 1 88.938 70.5087 -144.45 - 90 264.804 1252 2 0 88.9386 70.5104 -145.85 - 90 128.782 1344 1 1 88.9499 70.5462 -174.45 - 90 109.314 1252 1 0 88.951 70.5478 -175.85 - 90 104.456 1344 0 1 88.9778 70.5764 -204.45 - 90 113.748 1252 0 0 88.9812 70.5778 -205.85 - 90 60.9937 1255 4 0 88.8669 71.115 -85.85 - 90 68.4339 1338 4 1 87.6711 71.4424 -84.85 - 90 72.7663 1344 8 1 88.85 70.2609 35.2562 - 90 105.297 1345 8 1 89.05 70.2817 35.3433 - 90 200.761 1346 8 1 89.2507 70.3075 35.4075 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 4.50373 LIN -Particle: proton -Event: 91 -Number of tracker hits in this event: 24 - 91 91.9834 1175 10 1 55.0937 95.8494 95.55 - 91 185.337 1378 10 0 55.0954 95.8514 94.15 - 91 151.785 1175 9 1 55.1365 95.8949 65.55 - 91 111.899 1378 9 0 55.14 95.897 64.15 - 91 320.399 1175 8 1 55.2149 95.9395 35.55 - 91 108.924 1378 8 0 55.2186 95.9405 34.15 - 91 108.235 1176 7 1 55.299 95.9643 5.55 - 91 102.2 1379 7 0 55.3037 95.9658 4.15 - 91 166.73 1176 6 1 55.397 95.9972 -24.45 - 91 104.526 1379 6 0 55.4004 95.9998 -25.85 - 91 148.363 1177 5 1 55.4573 96.0502 -54.45 - 91 118.894 1379 5 0 55.4619 96.0524 -55.85 - 91 123.39 1177 4 1 55.5483 96.0926 -84.45 - 91 259.847 1379 4 0 55.5538 96.0956 -85.85 - 91 83.9546 1178 3 1 55.6608 96.1617 -114.45 - 91 116.562 1380 3 0 55.6655 96.1636 -115.85 - 91 203.016 1178 2 1 55.7624 96.2081 -144.45 - 91 114.702 1380 2 0 55.7688 96.2105 -145.85 - 91 114.427 1179 1 1 55.8994 96.2561 -174.45 - 91 138.811 1380 1 0 55.9094 96.2592 -175.85 - 91 104.178 1180 0 1 56.1204 96.3219 -204.45 - 91 118.099 1380 0 0 56.1297 96.3234 -205.85 - 91 182.804 1176 5 1 55.45 96.0544 -54.4667 - 91 128.291 1175 5 1 55.25 96.1665 -54.5058 -Number of digits in this event: 13 -Using G4ParticleGun... -Particle energy: 8.93868 LIN -Particle: proton -Event: 92 -Number of tracker hits in this event: 29 - 92 146.066 1488 9 1 117.793 49.4791 65.55 - 92 134.839 1147 9 0 117.793 49.479 64.15 - 92 128.987 1488 8 1 117.788 49.4795 35.55 - 92 116.138 1147 8 0 117.788 49.4793 34.15 - 92 143.22 1488 7 1 117.779 49.477 5.55 - 92 164.4 1147 7 0 117.779 49.4772 4.15 - 92 113.891 1488 6 1 117.766 49.4805 -24.45 - 92 228.461 1147 6 0 117.766 49.48 -25.85 - 92 107.859 1488 5 1 117.766 49.4737 -54.45 - 92 136.255 1147 5 0 117.766 49.473 -55.85 - 92 219.298 1488 4 1 117.77 49.4595 -84.45 - 92 182.601 1147 4 0 117.77 49.4584 -85.85 - 92 166.623 1488 3 1 117.762 49.435 -114.45 - 92 98.4823 1146 3 0 117.762 49.4333 -115.85 - 92 92.7371 1487 2 1 117.749 49.3984 -144.45 - 92 107.18 1146 2 0 117.748 49.3972 -145.85 - 92 112.364 1487 1 1 117.722 49.3739 -174.45 - 92 164.007 1146 1 0 117.721 49.3721 -175.85 - 92 104.642 1487 0 1 117.702 49.3331 -204.45 - 92 146.349 1146 0 0 117.702 49.3286 -205.85 - 92 361.218 1538 3 1 127.868 51.4143 -114.45 - 92 187.129 1537 3 1 127.75 51.8763 -114.622 - 92 23.5685 1175 3 0 127.328 55.1533 -115.85 - 92 112.506 1176 3 0 127.311 55.2502 -115.889 - 92 61.7334 1177 3 0 127.269 55.45 -115.981 - 92 69.4671 1178 3 0 127.232 55.65 -116.071 - 92 65.3682 1179 3 0 127.177 55.85 -116.142 - 92 74.2073 1180 3 0 127.133 56.05 -116.2 - 92 5.11516 1181 3 0 127.092 56.2501 -116.247 -Number of digits in this event: 16 -Using G4ParticleGun... -Particle energy: 1.15071 LIN -Particle: proton -Event: 93 -Number of tracker hits in this event: 27 - 93 107.452 1142 11 1 48.5347 35.9961 125.55 - 93 121.025 1079 11 0 48.5414 35.9937 124.15 - 93 120.777 1143 10 1 48.6684 35.948 95.55 - 93 229.952 1079 10 0 48.6784 35.9411 94.15 - 93 109.85 1144 9 1 48.8824 35.8081 65.55 - 93 124.103 1078 9 0 48.8959 35.8013 64.15 - 93 113.42 1145 8 1 49.1547 35.658 35.55 - 93 218.529 1077 8 0 49.1669 35.6468 34.15 - 93 106.651 1147 7 1 49.4533 35.4104 5.55 - 93 143.361 1076 7 0 49.4587 35.3969 4.15 - 93 182.43 1147 6 1 49.5855 35.099 -24.45 - 93 210.015 1075 6 0 49.5882 35.0877 -25.85 - 93 118.694 1147 5 1 49.645 34.8509 -54.45 - 93 163.359 1073 5 0 49.6461 34.8314 -55.85 - 93 121.959 1148 4 1 49.6617 34.4254 -84.45 - 93 127.92 1071 4 0 49.667 34.4047 -85.85 - 93 124.543 1148 3 1 49.7808 33.9952 -114.45 - 93 125.885 1069 3 0 49.7874 33.9771 -115.85 - 93 117.808 1149 2 1 49.9328 33.6147 -144.45 - 93 117.781 1067 2 0 49.9306 33.5976 -145.85 - 93 134.621 1149 1 1 49.888 33.2492 -174.45 - 93 154.455 1065 1 0 49.8871 33.2304 -175.85 - 93 113.532 1149 0 1 49.8823 32.8511 -204.45 - 93 165.098 1063 0 0 49.8844 32.8319 -205.85 - 93 28.7058 1083 0 1 36.7482 77.1073 -204.85 - 93 175.359 1084 0 1 36.85 77.185 -204.756 - 93 0.0193901 408 8 1 -98.55 30.0641 35.525 -Number of digits in this event: 20 -Using G4ParticleGun... -Particle energy: 6.2554 LIN -Particle: proton -Event: 94 -Number of tracker hits in this event: 15 - 94 112.042 871 7 0 149.808 -5.79922 4.15 - 94 87.8105 1648 6 1 149.81 -5.80604 -24.45 - 94 250.855 871 6 0 149.809 -5.80587 -25.85 - 94 147.786 1648 5 1 149.799 -5.8077 -54.45 - 94 135.549 871 5 0 149.799 -5.80864 -55.85 - 94 296.859 1648 4 1 149.798 -5.83015 -84.45 - 94 108.698 871 4 0 149.799 -5.83094 -85.85 - 94 134.766 1648 3 1 149.806 -5.84326 -114.45 - 94 120.917 871 3 0 149.806 -5.84397 -115.85 - 94 255.906 1648 2 1 149.821 -5.86056 -144.45 - 94 129.063 870 2 0 149.821 -5.86169 -145.85 - 94 105.062 1648 1 1 149.825 -5.88725 -174.45 - 94 118.242 870 1 0 149.823 -5.89005 -175.85 - 94 101.451 1648 0 1 149.79 -5.94356 -204.45 - 94 120.205 870 0 0 149.791 -5.94596 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 8.64205 LIN -Particle: proton -Event: 95 -Number of tracker hits in this event: 18 - 95 124.568 530 8 1 -74.0276 -121.764 35.55 - 95 115.989 291 8 0 -74.0278 -121.764 34.15 - 95 118.456 530 7 1 -74.031 -121.769 5.55 - 95 94.7376 291 7 0 -74.0312 -121.77 4.15 - 95 119.748 530 6 1 -74.0402 -121.783 -24.45 - 95 155.999 291 6 0 -74.0404 -121.783 -25.85 - 95 106.939 530 5 1 -74.0459 -121.788 -54.45 - 95 278.386 291 5 0 -74.046 -121.788 -55.85 - 95 110.036 530 4 1 -74.0489 -121.78 -84.45 - 95 135.03 291 4 0 -74.0487 -121.781 -85.85 - 95 131.396 530 3 1 -74.0414 -121.783 -114.45 - 95 121.186 291 3 0 -74.0399 -121.783 -115.85 - 95 116.191 530 2 1 -74.0077 -121.787 -144.45 - 95 352.185 291 2 0 -74.0061 -121.787 -145.85 - 95 116.577 530 1 1 -73.9723 -121.79 -174.45 - 95 112.784 291 1 0 -73.97 -121.79 -175.85 - 95 119.808 530 0 1 -73.9242 -121.78 -204.45 - 95 108.161 291 0 0 -73.9228 -121.781 -205.85 -Number of digits in this event: 8 -Using G4ParticleGun... -Particle energy: 2.48152 LIN -Particle: proton -Event: 96 -Number of tracker hits in this event: 23 - 96 119.509 487 10 1 -82.6434 52.73 95.55 - 96 145.814 1163 10 0 -82.6431 52.7327 94.15 - 96 131.833 487 9 1 -82.6441 52.7864 65.55 - 96 122.129 1163 9 0 -82.6496 52.79 64.15 - 96 174.671 486 8 1 -82.7404 52.849 35.55 - 96 239.385 1164 8 0 -82.747 52.851 34.15 - 96 142.826 485 7 1 -82.8811 52.8925 5.55 - 96 100.439 1164 7 0 -82.8884 52.8938 4.15 - 96 103.317 485 6 1 -83.048 52.9294 -24.45 - 96 100.69 1164 6 0 -83.0539 52.9279 -25.85 - 96 198.031 484 5 1 -83.1702 52.9053 -54.45 - 96 128.417 1164 5 0 -83.1771 52.906 -55.85 - 96 209.915 483 4 1 -83.3137 52.9167 -84.45 - 96 160.399 1164 4 0 -83.3221 52.9173 -85.85 - 96 111.898 482 3 1 -83.4898 52.9255 -114.45 - 96 104.346 1164 3 0 -83.499 52.9227 -115.85 - 96 131.808 481 2 1 -83.6907 52.8685 -144.45 - 96 125.988 1164 2 0 -83.6969 52.8638 -145.85 - 96 135.823 481 1 1 -83.826 52.7762 -174.45 - 96 101.974 1163 1 0 -83.829 52.7708 -175.85 - 96 115.828 480 0 1 -83.8812 52.6619 -204.45 - 96 116.249 1163 0 0 -83.8841 52.6577 -205.85 - 96 5.03682 1163 8 0 -82.7081 52.85 33.8381 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 3.18053 LIN -Particle: proton -Event: 97 -Number of tracker hits in this event: 42 - 97 129.929 731 11 0 -75.5566 -33.7617 124.15 - 97 101.474 522 10 1 -75.5528 -33.7594 95.55 - 97 140.227 731 10 0 -75.5533 -33.7585 94.15 - 97 154.19 522 9 1 -75.5553 -33.7355 65.55 - 97 126.597 731 9 0 -75.5555 -33.7316 64.15 - 97 127.935 522 8 1 -75.556 -33.6612 35.55 - 97 103.421 731 8 0 -75.5578 -33.6584 34.15 - 97 95.9747 522 7 1 -75.5965 -33.6039 5.55 - 97 108.524 732 7 0 -75.5986 -33.6003 4.15 - 97 125.16 522 6 1 -75.6357 -33.5225 -24.45 - 97 97.5973 732 6 0 -75.6375 -33.519 -25.85 - 97 112.559 521 5 1 -75.6689 -33.4481 -54.45 - 97 148.337 733 5 0 -75.6722 -33.4426 -55.85 - 97 95.2717 521 4 1 -75.7236 -33.3271 -84.45 - 97 113.394 733 4 0 -75.7268 -33.3235 -85.85 - 97 90.817 521 3 1 -75.7945 -33.2446 -114.45 - 97 111.123 734 3 0 -75.7988 -33.2408 -115.85 - 97 116.902 520 2 1 -75.8887 -33.1704 -144.45 - 97 137.928 734 2 0 -75.8912 -33.1656 -145.85 - 97 195.661 520 1 1 -75.9424 -33.0739 -174.45 - 97 120.956 734 1 0 -75.9449 -33.0715 -175.85 - 97 112.536 520 0 1 -75.9936 -33.0208 -204.45 - 97 131.685 735 0 0 -76.0009 -33.021 -205.85 - 97 73.4092 1072 6 1 34.5969 45.5118 -24.4933 - 97 19.0213 442 5 0 -74.9873 -91.6308 -55.9352 - 97 18.6803 810 0 1 -17.8574 -20.0083 -204.85 - 97 19.3508 1003 7 1 20.85 -17.839 5.43893 - 97 4.24902 309 1 0 -45.7774 -118.325 -176.25 - 97 57.5748 308 1 0 -45.7733 -118.35 -176.243 - 97 54.4866 307 1 0 -45.733 -118.55 -176.195 - 97 67.5099 306 1 0 -45.6691 -118.75 -176.153 - 97 62.6989 305 1 0 -45.5819 -118.95 -176.122 - 97 63.0055 304 1 0 -45.5022 -119.15 -176.096 - 97 75.5362 303 1 0 -45.4013 -119.35 -176.08 - 97 59.4491 302 1 0 -45.297 -119.55 -176.048 - 97 90.7109 301 1 0 -45.2089 -119.75 -175.972 - 97 4.58291 300 1 0 -45.1381 -119.95 -175.86 - 97 319.22 675 1 1 -44.9945 -121.261 -174.85 - 97 94.7053 674 1 1 -45.0502 -122.015 -174.499 - 97 22.049 673 1 1 -45.25 -122.265 -174.474 - 97 18.6113 910 1 0 -103.128 2.06035 -176.25 - 97 30.781 895 1 0 -104.339 -0.857356 -176.25 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 8.58644 LIN -Particle: proton -Event: 98 -Number of tracker hits in this event: 14 - 98 96.8112 899 6 1 -0.0528385 3.31554 -24.45 - 98 98.8426 916 6 0 -0.053655 3.31472 -25.85 - 98 131.36 899 5 1 -0.0725474 3.29833 -54.45 - 98 103.474 916 5 0 -0.0733774 3.29769 -55.85 - 98 107.772 899 4 1 -0.0888329 3.28759 -84.45 - 98 140.954 916 4 0 -0.0903768 3.28746 -85.85 - 98 95.9261 899 3 1 -0.12316 3.28202 -114.45 - 98 100.369 916 3 0 -0.124905 3.28226 -115.85 - 98 144.257 899 2 1 -0.162171 3.28843 -144.45 - 98 129.857 916 2 0 -0.163277 3.28909 -145.85 - 98 124.805 899 1 1 -0.184923 3.30271 -174.45 - 98 105.557 916 1 0 -0.186672 3.30237 -175.85 - 98 106.045 899 0 1 -0.220354 3.29578 -204.45 - 98 126.104 916 0 0 -0.221908 3.29613 -205.85 + 79 102.496 1248 11 1 69.7857 27.9699 125.55 + 79 108.089 1039 11 0 69.7844 27.9683 124.15 + 79 103.877 1248 10 1 69.7494 27.9363 95.55 + 79 111.295 1039 10 0 69.7456 27.9363 94.15 + 79 107.465 1248 9 1 69.6641 27.9446 65.55 + 79 128.758 1039 9 0 69.6597 27.9442 64.15 + 79 96.9192 1247 8 1 69.5685 27.9306 35.55 + 79 123.925 1039 8 0 69.5631 27.9311 34.15 + 79 108.959 1246 7 1 69.4467 27.9472 5.55 + 79 98.678 1039 7 0 69.4427 27.9473 4.15 + 79 119.23 1246 6 1 69.3741 27.955 -24.45 + 79 161.313 1039 6 0 69.3726 27.9544 -25.85 + 79 154.32 1246 5 1 69.3493 27.9468 -54.45 + 79 111.231 1039 5 0 69.3479 27.9434 -55.85 + 79 198.475 1246 4 1 69.3167 27.8716 -84.45 + 79 103.752 1039 4 0 69.3139 27.8684 -85.85 + 79 103.457 1246 3 1 69.2645 27.8003 -114.45 + 79 110.662 1038 3 0 69.2621 27.7982 -115.85 + 79 106.866 1245 2 1 69.2163 27.7676 -144.45 + 79 96.1999 1038 2 0 69.2141 27.767 -145.85 + 79 107.079 1245 1 1 69.1661 27.7461 -174.45 + 79 114.631 1038 1 0 69.1628 27.7455 -175.85 + 79 101.206 1245 0 1 69.0957 27.7381 -204.45 + 79 124.698 1038 0 0 69.0916 27.7347 -205.85 Number of digits in this event: 7 Using G4ParticleGun... -Particle energy: 1.69444 LIN +Particle energy: 1.40613 LIN +Particle: proton +Event: 80 +Number of tracker hits in this event: 34 + 80 92.8807 816 11 1 -16.8191 44.2635 125.55 + 80 125.013 1121 11 0 -16.8219 44.2656 124.15 + 80 99.9112 815 10 1 -16.9064 44.3225 95.55 + 80 352.943 1121 10 0 -16.9116 44.3278 94.15 + 80 216.084 815 9 1 -16.9874 44.4214 65.55 + 80 145.177 1121 9 0 -16.9937 44.4228 64.15 + 80 153.35 814 8 1 -17.1115 44.447 35.55 + 80 160.014 1121 8 0 -17.1211 44.4496 34.15 + 80 54.2536 1122 8 0 -17.1225 44.45 33.9473 + 80 186.132 813 7 1 -17.3024 44.5021 5.55 + 80 110.157 1122 7 0 -17.3071 44.5037 4.15 + 80 149.984 813 6 1 -17.4209 44.5334 -24.45 + 80 196.065 1122 6 0 -17.4226 44.5337 -25.85 + 80 136.089 812 5 1 -17.4579 44.5388 -54.45 + 80 142.247 1122 5 0 -17.4591 44.5452 -55.85 + 80 115.956 812 4 1 -17.482 44.6888 -84.45 + 80 123.555 1123 4 0 -17.4843 44.695 -85.85 + 80 123.03 812 3 1 -17.5124 44.8355 -114.45 + 80 131.34 1123 3 0 -17.5195 44.8417 -115.85 + 80 420.203 811 2 1 -17.6636 44.9628 -144.45 + 80 257.892 1124 2 0 -17.6676 44.9673 -145.85 + 80 140.709 811 1 1 -17.7557 45.0471 -174.45 + 80 166.344 1124 1 0 -17.7603 45.0495 -175.85 + 80 44.087 1125 1 0 -17.7611 45.05 -176.115 + 80 112.644 811 0 1 -17.8347 45.0932 -204.45 + 80 109.178 1125 0 0 -17.8395 45.0947 -205.85 + 80 94.0783 1130 2 0 -18.4295 46.0813 -145.85 + 80 23.6253 1131 2 0 -18.3846 46.2502 -145.9 + 80 130.035 810 2 1 -18.004 47.3848 -144.85 + 80 15.0851 1119 7 0 -17.6996 43.8785 4.15 + 80 100.819 1118 7 0 -17.7053 43.85 4.1087 + 80 37.8071 1117 7 0 -17.7184 43.65 3.81557 + 80 36.9304 283 8 0 -92.4773 -123.536 33.7502 + 80 21.0771 282 8 0 -92.4729 -123.55 33.7558 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 8.11043 LIN +Particle: proton +Event: 81 +Number of tracker hits in this event: 172 + 81 140.22 210 8 1 -137.956 -1.3421 35.55 + 81 105.043 893 8 0 -137.957 -1.34019 34.15 + 81 128.987 210 7 1 -137.965 -1.30011 5.55 + 81 137.936 893 7 0 -137.966 -1.29822 4.15 + 81 459.414 210 6 1 -137.974 -1.25793 -24.45 + 81 124.281 895 6 0 -138.06 -1.03771 -25.85 + 81 101.71 199 5 1 -140.324 4.77008 -54.45 + 81 31.526 198 5 1 -140.35 4.83371 -54.7703 + 81 3.6408 924 5 0 -140.436 5.04747 -55.85 + 81 142.102 925 5 0 -140.437 5.05 -55.8628 + 81 101.556 187 4 1 -142.725 10.703 -84.45 + 81 14.1264 186 4 1 -142.75 10.7666 -84.7772 + 81 114.406 954 4 0 -142.832 10.9748 -85.85 + 81 1.96303 955 4 0 -142.862 11.05 -86.2374 + 81 140.534 175 3 1 -145.023 16.5197 -114.45 + 81 134.117 983 3 0 -145.128 16.7922 -115.85 + 81 38.5751 984 3 0 -145.15 16.85 -116.147 + 81 107.116 164 2 1 -147.261 22.36 -144.45 + 81 41.9872 1012 2 0 -147.364 22.6285 -145.85 + 81 90.0098 1013 2 0 -147.372 22.65 -145.962 + 81 146.801 153 1 1 -149.469 28.116 -174.45 + 81 88.4531 1041 1 0 -149.57 28.388 -175.85 + 81 20.1615 1042 1 0 -149.593 28.45 -176.169 + 81 118.48 142 0 1 -151.637 33.9596 -204.45 + 81 49.633 1070 0 0 -151.746 34.2242 -205.85 + 81 85.7432 1071 0 0 -151.756 34.25 -205.986 + 81 110.588 886 6 0 -137.685 -2.72401 -25.85 + 81 142.208 885 6 0 -137.66 -2.85 -25.9428 + 81 164.494 884 6 0 -137.621 -3.05 -26.0904 + 81 11.5387 883 6 0 -137.581 -3.25 -26.2372 + 81 152.378 251 5 1 -129.777 -41.7516 -54.45 + 81 411.108 252 5 1 -129.75 -41.9083 -54.5703 + 81 127.511 682 5 0 -129.445 -43.525 -55.85 + 81 306.633 681 5 0 -129.421 -43.65 -55.9493 + 81 191.974 680 5 0 -129.38 -43.85 -56.1118 + 81 0.81132 293 4 1 -121.35 -79.2833 -84.45 + 81 476.712 294 4 1 -121.35 -79.2835 -84.4501 + 81 133.221 494 4 0 -120.996 -81.0978 -85.85 + 81 198.401 493 4 0 -120.965 -81.25 -85.9673 + 81 162.732 492 4 0 -120.926 -81.45 -86.1273 + 81 549.477 324 3 1 -115.201 -116.045 -114.45 + 81 56.3972 311 3 0 -115.186 -117.891 -115.85 + 81 224.187 310 3 0 -115.187 -117.95 -115.894 + 81 211.964 309 3 0 -115.192 -118.15 -116.043 + 81 131.628 308 3 0 -115.199 -118.35 -116.194 + 81 669.572 317 2 1 -116.624 -154.301 -144.45 + 81 94.4969 121 2 0 -116.834 -155.885 -145.85 + 81 298.105 120 2 0 -116.843 -155.95 -145.907 + 81 375.852 119 2 0 -116.871 -156.15 -146.084 + 81 167.396 896 6 0 -137.655 -0.85 -25.8842 + 81 122.215 253 5 1 -129.511 9.58456 -54.45 + 81 107.364 950 5 0 -129.118 10.0841 -55.85 + 81 120.589 295 4 1 -121.074 20.2709 -84.45 + 81 76.4994 1003 4 0 -120.687 20.7661 -85.85 + 81 72.0041 1004 4 0 -120.622 20.85 -86.0871 + 81 55.8344 336 3 1 -112.797 30.8715 -114.45 + 81 71.9076 337 3 1 -112.75 30.9314 -114.622 + 81 80.1786 1056 3 0 -112.414 31.36 -115.85 + 81 48.8545 1057 3 0 -112.343 31.45 -116.108 + 81 52.5059 377 2 1 -104.601 41.3459 -144.45 + 81 67.9252 378 2 1 -104.55 41.4117 -144.638 + 81 15.6158 1108 2 0 -104.218 41.8375 -145.85 + 81 121.951 1109 2 0 -104.209 41.85 -145.886 + 81 28.0794 418 1 1 -96.3818 51.8872 -174.45 + 81 104.603 419 1 1 -96.35 51.9288 -174.566 + 81 46.6157 1161 1 0 -95.996 52.3908 -175.85 + 81 237.197 1162 1 0 -95.9506 52.45 -176.015 + 81 50.2864 459 0 1 -88.0849 62.6669 -204.45 + 81 67.413 460 0 1 -88.05 62.7137 -204.579 + 81 52.8064 1215 0 0 -87.7047 63.177 -205.85 + 81 53.7921 1216 0 0 -87.6503 63.25 -206.05 + 81 20.655 435 1 1 -93.1248 4.36393 -174.567 + 81 7.65512 598 3 1 -60.45 86.442 -114.618 + 81 317.397 819 13 0 105.241 -16.0905 183.75 + 81 18.9184 892 2 1 -1.48501 68.7058 -144.556 + 81 59.7363 1510 1 0 72.4814 122.15 -175.989 + 81 95.0644 1398 0 0 -166.429 99.8859 -206.25 + 81 377.747 1399 0 0 -166.626 99.95 -206.2 + 81 300.124 1400 0 0 -167.226 100.15 -206.044 + 81 80.0124 1401 0 0 -167.824 100.35 -205.89 + 81 56.9682 41 0 1 -171.883 101.735 -204.85 + 81 99.5637 40 0 1 -171.95 101.758 -204.833 + 81 215.139 39 0 1 -172.15 101.826 -204.782 + 81 111.579 38 0 1 -172.35 101.894 -204.731 + 81 101.925 37 0 1 -172.55 101.962 -204.681 + 81 102.961 36 0 1 -172.75 102.03 -204.629 + 81 133.17 35 0 1 -172.95 102.098 -204.579 + 81 124.468 34 0 1 -173.15 102.165 -204.53 + 81 58.3921 33 0 1 -173.35 102.233 -204.478 + 81 515.568 1265 0 0 -99.7052 73.1625 -206.25 + 81 245.799 396 0 1 -100.802 73.1745 -204.85 + 81 266.694 395 0 1 -100.95 73.1762 -204.662 + 81 445.651 1265 1 0 -123.122 73.0587 -176.25 + 81 228.052 279 1 1 -124.219 73.0564 -174.85 + 81 330.019 278 1 1 -124.35 73.0563 -174.683 + 81 553.872 1268 2 0 -146.985 73.8117 -146.25 + 81 85.3873 160 2 1 -148.104 73.8613 -144.85 + 81 292.419 159 2 1 -148.15 73.8636 -144.792 + 81 117.681 158 2 1 -148.35 73.8729 -144.543 + 81 785.689 1271 3 0 -169.957 74.3915 -116.25 + 81 219.638 45 3 1 -171.02 74.4183 -114.85 + 81 374.383 44 3 1 -171.15 74.4216 -114.678 + 81 55.1512 882 6 0 -138.626 -3.48284 -25.85 + 81 83.7919 881 6 0 -138.675 -3.65 -25.9312 + 81 148.381 880 6 0 -138.733 -3.85 -26.0277 + 81 72.8527 879 6 0 -138.791 -4.05 -26.1234 + 81 16.5564 878 6 0 -138.848 -4.25 -26.2203 + 81 28.3204 122 5 1 -155.731 -61.8336 -54.45 + 81 278.059 121 5 1 -155.75 -61.8925 -54.4805 + 81 30.7823 120 5 1 -155.95 -62.5267 -54.8092 + 81 32.1866 577 5 0 -156.61 -64.5848 -55.85 + 81 90.3652 576 5 0 -156.631 -64.65 -55.883 + 81 71.9824 575 5 0 -156.697 -64.85 -55.9838 + 81 103.63 574 5 0 -156.762 -65.05 -56.0847 + 81 47.2458 573 5 0 -156.827 -65.25 -56.1845 + 81 6.99299 23 4 1 -175.543 -122.334 -84.45 + 81 162.654 22 4 1 -175.55 -122.349 -84.4568 + 81 164.659 21 4 1 -175.75 -122.768 -84.6392 + 81 56.6023 20 4 1 -175.95 -123.182 -84.8177 + 81 1.3181 273 4 0 -177.105 -125.546 -85.85 + 81 80.0411 272 4 0 -177.106 -125.55 -85.8517 + 81 207.884 271 4 0 -177.204 -125.75 -85.9393 + 81 87.1952 270 4 0 -177.301 -125.95 -86.0264 + 81 81.5469 269 4 0 -177.397 -126.15 -86.1137 + 81 45.6714 268 4 0 -177.493 -126.35 -86.1998 + 81 96.8248 894 6 0 -138.169 -1.10953 -25.85 + 81 133.866 183 5 1 -143.37 2.79413 -54.45 + 81 121.632 914 5 0 -143.626 2.9871 -55.85 + 81 109.207 156 4 1 -148.854 6.96165 -84.45 + 81 132.732 935 4 0 -149.119 7.15617 -85.85 + 81 32.1831 128 3 1 -154.523 11.1178 -114.45 + 81 77.924 127 3 1 -154.55 11.1358 -114.588 + 81 124.738 956 3 0 -154.792 11.2991 -115.85 + 81 67.3178 99 2 1 -160.293 15.0184 -144.45 + 81 53.7036 98 2 1 -160.35 15.0556 -144.733 + 81 165.805 975 2 0 -160.576 15.2027 -145.85 + 81 9.07814 976 2 0 -160.649 15.25 -146.209 + 81 133.584 69 1 1 -166.347 19.0098 -174.45 + 81 165.894 68 1 1 -166.35 19.0116 -174.463 + 81 98.7439 995 1 0 -166.62 19.1968 -175.85 + 81 0.633533 996 1 0 -166.697 19.25 -176.248 + 81 156.218 1015 0 0 -172.486 23.1875 -205.85 + 81 35.2339 999 1 0 -165.998 19.9806 -175.85 + 81 167.437 1000 1 0 -165.937 20.05 -175.96 + 81 43.9387 156 0 1 -148.837 39.7019 -204.45 + 81 184.057 157 0 1 -148.75 39.6558 -204.595 + 81 19.7042 1096 0 0 -147.827 39.2653 -205.85 + 81 142.449 1095 0 0 -147.784 39.2499 -205.905 + 81 224.988 1043 0 0 -124.055 28.8394 -206.25 + 81 32.0277 1042 0 0 -123.789 28.65 -205.917 + 81 8.18782 285 0 1 -122.955 28.0358 -204.85 + 81 108.001 286 0 1 -122.95 28.0322 -204.844 + 81 38.8846 287 0 1 -122.75 27.8914 -204.582 + 81 205.724 158 0 1 -148.55 39.6257 -204.53 + 81 147.481 159 0 1 -148.35 39.4549 -204.474 + 81 108.283 892 6 0 -137.981 -1.51944 -25.85 + 81 98.5045 209 5 1 -138.167 -8.43477 -54.45 + 81 81.6079 856 5 0 -138.173 -8.77659 -55.85 + 81 28.1879 855 5 0 -138.174 -8.85 -56.1507 + 81 97.1852 209 4 1 -138.288 -15.7602 -84.45 + 81 112.222 819 4 0 -138.294 -16.1003 -85.85 + 81 100.742 208 3 1 -138.396 -23.0487 -114.45 + 81 59.9393 783 3 0 -138.397 -23.3875 -115.85 + 81 47.2298 782 3 0 -138.398 -23.45 -116.109 + 81 127.013 208 2 1 -138.437 -30.3035 -144.45 + 81 5.70204 747 2 0 -138.438 -30.643 -145.85 + 81 170.097 746 2 0 -138.438 -30.65 -145.879 + 81 124.967 208 1 1 -138.468 -37.5662 -174.45 + 81 128.102 710 1 0 -138.468 -37.9053 -175.85 + 81 129.193 208 0 1 -138.466 -44.8424 -204.45 + 81 57.941 674 0 0 -138.465 -45.1822 -205.85 + 81 31.04 673 0 0 -138.464 -45.25 -206.129 +Number of digits in this event: 76 +Using G4ParticleGun... +Particle energy: 4.40231 LIN +Particle: proton +Event: 82 +Number of tracker hits in this event: 21 + 82 114.461 189 7 1 -142.325 -35.3223 5.55 + 82 213.512 723 7 0 -142.324 -35.3238 4.15 + 82 223.822 189 6 1 -142.301 -35.3473 -24.45 + 82 102.613 723 6 0 -142.3 -35.3482 -25.85 + 82 225.937 189 5 1 -142.275 -35.3697 -54.45 + 82 110.024 723 5 0 -142.273 -35.3702 -55.85 + 82 128.71 189 4 1 -142.229 -35.3811 -84.45 + 82 239.718 723 4 0 -142.228 -35.3805 -85.85 + 82 96.7739 189 3 1 -142.212 -35.369 -114.45 + 82 103.108 723 3 0 -142.211 -35.3696 -115.85 + 82 114.575 189 2 1 -142.201 -35.3829 -144.45 + 82 134.365 723 2 0 -142.199 -35.3836 -145.85 + 82 134.983 189 1 1 -142.167 -35.3934 -174.45 + 82 98.3241 723 1 0 -142.166 -35.3935 -175.85 + 82 131.392 190 0 1 -142.134 -35.3944 -204.45 + 82 115.379 723 0 0 -142.133 -35.395 -205.85 + 82 311.774 702 3 0 -128.542 -39.5244 -116.25 + 82 145.319 724 4 0 -142.045 -35.25 -86.1831 + 82 65.8216 722 7 0 -142.197 -35.45 3.83074 + 82 67.5259 684 7 0 -89.291 -43.0684 3.75007 + 82 112.344 685 7 0 -89.2529 -43.0497 3.8452 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 7.69675 LIN +Particle: proton +Event: 83 +Number of tracker hits in this event: 24 + 83 98.745 724 10 1 -35.098 84.0155 95.55 + 83 219.238 1319 10 0 -35.0977 84.0162 94.15 + 83 119.281 724 9 1 -35.094 84.0277 65.55 + 83 121.869 1319 9 0 -35.0936 84.0281 64.15 + 83 102.197 724 8 1 -35.0825 84.0393 35.55 + 83 293.142 1319 8 0 -35.0823 84.0408 34.15 + 83 103.77 724 7 1 -35.0724 84.071 5.55 + 83 95.6249 1320 7 0 -35.0728 84.0732 4.15 + 83 115.24 724 6 1 -35.0806 84.1184 -24.45 + 83 105.278 1320 6 0 -35.0811 84.1191 -25.85 + 83 105.855 724 5 1 -35.0913 84.1355 -54.45 + 83 101.457 1320 5 0 -35.0922 84.1358 -55.85 + 83 131.155 724 4 1 -35.1092 84.1425 -84.45 + 83 110.208 1320 4 0 -35.1103 84.1418 -85.85 + 83 101.869 724 3 1 -35.1323 84.1298 -114.45 + 83 94.5662 1320 3 0 -35.1324 84.1299 -115.85 + 83 114.251 724 2 1 -35.1404 84.1314 -144.45 + 83 101.07 1320 2 0 -35.1403 84.1311 -145.85 + 83 128.047 724 1 1 -35.1352 84.1247 -174.45 + 83 140.381 1320 1 0 -35.135 84.1249 -175.85 + 83 122.721 724 0 1 -35.1341 84.1313 -204.45 + 83 100.452 1320 0 0 -35.134 84.1316 -205.85 + 83 9.5663 1320 8 0 -35.1087 84.05 33.8909 + 83 48.2176 1419 8 0 -25.6896 104.106 33.75 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 1.68086 LIN +Particle: proton +Event: 84 +Number of tracker hits in this event: 31 + 84 108.589 500 11 1 -79.9595 1.13813 125.55 + 84 157.903 905 11 0 -79.9564 1.14236 124.15 + 84 145.296 500 10 1 -79.9077 1.23358 95.55 + 84 115.424 905 10 0 -79.9069 1.23585 94.15 + 84 102.212 500 9 1 -79.8995 1.27599 65.55 + 84 113.641 906 9 0 -79.902 1.27772 64.15 + 84 104.331 500 8 1 -79.9516 1.32011 35.55 + 84 148.036 906 8 0 -79.9601 1.32111 34.15 + 84 109.969 499 7 1 -80.1383 1.34986 5.55 + 84 142.422 906 7 0 -80.1468 1.35203 4.15 + 84 128.594 498 6 1 -80.3316 1.39363 -24.45 + 84 164.264 906 6 0 -80.3438 1.39933 -25.85 + 84 153.18 497 5 1 -80.6011 1.49993 -54.45 + 84 105.256 907 5 0 -80.6144 1.50578 -55.85 + 84 112.039 495 4 1 -80.883 1.64174 -84.45 + 84 122.643 908 4 0 -80.8921 1.65386 -85.85 + 84 130.614 494 3 1 -81.0704 1.89544 -114.45 + 84 183.623 909 3 0 -81.0797 1.90663 -115.85 + 84 309.15 493 2 1 -81.265 2.1212 -144.45 + 84 142.797 910 2 0 -81.2763 2.1333 -145.85 + 84 112.956 492 1 1 -81.4997 2.37803 -174.45 + 84 132.923 911 1 0 -81.5103 2.3932 -175.85 + 84 170.616 491 0 1 -81.7277 2.71815 -204.45 + 84 120.828 913 0 0 -81.7385 2.73546 -205.85 + 84 133.372 1161 10 0 -131.287 52.3112 93.75 + 84 54.1843 964 12 0 -69.059 12.9021 153.75 + 84 56.6504 965 12 0 -69.0155 13.0501 153.847 + 84 82.0688 966 12 0 -69.0693 13.25 153.895 + 84 58.1952 967 12 0 -69.1565 13.45 153.959 + 84 122.451 968 12 0 -69.1214 13.65 153.955 + 84 271.152 969 12 0 -68.9554 13.8501 153.85 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 8.30493 LIN +Particle: proton +Event: 85 +Number of tracker hits in this event: 24 + 85 117.563 857 11 1 -8.49145 78.094 125.55 + 85 109.463 1290 11 0 -8.49248 78.0946 124.15 + 85 120.439 857 10 1 -8.51292 78.106 95.55 + 85 211.683 1290 10 0 -8.51343 78.1053 94.15 + 85 121.222 857 9 1 -8.52377 78.0961 65.55 + 85 123.418 1290 9 0 -8.5253 78.0954 64.15 + 85 96.8862 857 8 1 -8.55879 78.0742 35.55 + 85 110.784 1290 8 0 -8.55944 78.0738 34.15 + 85 116.971 857 7 1 -8.57009 78.0657 5.55 + 85 103.682 1290 7 0 -8.57127 78.0649 4.15 + 85 97.9969 857 6 1 -8.5947 78.0467 -24.45 + 85 98.0877 1289 6 0 -8.59136 78.0468 -25.85 + 85 183.512 857 5 1 -8.52495 78.0504 -54.45 + 85 106.261 1290 5 0 -8.52229 78.0503 -55.85 + 85 107.902 857 4 1 -8.46566 78.0451 -84.45 + 85 106.379 1289 4 0 -8.46211 78.045 -85.85 + 85 232.276 858 3 1 -8.38867 78.0442 -114.45 + 85 91.9769 1289 3 0 -8.38389 78.0432 -115.85 + 85 181.85 858 2 1 -8.28918 78.0272 -144.45 + 85 123.473 1289 2 0 -8.28437 78.026 -145.85 + 85 112.214 859 1 1 -8.18699 78.0031 -174.45 + 85 119.556 1289 1 0 -8.18138 78.0017 -175.85 + 85 105.281 859 0 1 -8.066 77.9778 -204.45 + 85 110.589 1289 0 0 -8.06075 77.9764 -205.85 +Number of digits in this event: 9 +Using G4ParticleGun... +Particle energy: 8.49225 LIN +Particle: proton +Event: 86 +Number of tracker hits in this event: 29 + 86 150.27 1607 7 1 141.607 -44.7302 5.55 + 86 113.973 676 7 0 141.607 -44.7296 4.15 + 86 152.349 1607 6 1 141.609 -44.7185 -24.45 + 86 106.874 676 6 0 141.61 -44.7173 -25.85 + 86 171.269 1607 5 1 141.63 -44.6913 -54.45 + 86 145.937 676 5 0 141.631 -44.6913 -55.85 + 86 120.672 1607 4 1 141.646 -44.6932 -84.45 + 86 151.92 676 4 0 141.646 -44.6932 -85.85 + 86 198.126 1607 3 1 141.655 -44.6905 -114.45 + 86 134.415 676 3 0 141.655 -44.6909 -115.85 + 86 119.059 1607 2 1 141.663 -44.6969 -144.45 + 86 140.381 676 2 0 141.664 -44.6969 -145.85 + 86 149.221 1607 1 1 141.683 -44.6951 -174.45 + 86 345.12 676 1 0 141.683 -44.6945 -175.85 + 86 108.764 1607 0 1 141.693 -44.6831 -204.45 + 86 150.809 676 0 0 141.694 -44.6827 -205.85 + 86 23.4611 1605 6 1 141.211 -44.6726 -24.45 + 86 81.3385 1604 6 1 141.15 -44.6537 -24.4931 + 86 64.7597 1603 6 1 140.95 -44.5915 -24.6512 + 86 45.4712 1602 6 1 140.75 -44.5483 -24.7435 + 86 57.6752 1601 6 1 140.55 -44.5445 -24.7642 + 86 27.6915 1600 6 1 140.35 -44.5782 -24.8174 + 86 29.8083 682 6 0 136.48 -43.4813 -25.85 + 86 213.385 683 6 0 136.4 -43.45 -25.878 + 86 10.1619 684 6 0 135.849 -43.25 -26.2225 + 86 460.29 778 6 0 95.3667 -24.4432 -26.25 + 86 294.387 777 6 0 94.8344 -24.45 -25.999 + 86 160.307 776 6 0 94.6849 -24.6502 -26.0099 + 86 68.6166 779 6 0 95.1773 -24.2498 -26.0275 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 5.37502 LIN +Particle: proton +Event: 87 +Number of tracker hits in this event: 17 + 87 125.497 1628 7 1 145.889 -19.7445 5.55 + 87 134.545 801 7 0 145.888 -19.7453 4.15 + 87 99.3396 1628 6 1 145.879 -19.7608 -24.45 + 87 119.93 801 6 0 145.879 -19.7616 -25.85 + 87 101.892 1628 5 1 145.874 -19.7785 -54.45 + 87 118.101 801 5 0 145.875 -19.7785 -55.85 + 87 160.4 1628 4 1 145.899 -19.7733 -84.45 + 87 110.065 801 4 0 145.899 -19.7722 -85.85 + 87 125.952 1628 3 1 145.897 -19.7544 -114.45 + 87 206.388 801 3 0 145.896 -19.7533 -115.85 + 87 187.031 1628 2 1 145.875 -19.7306 -144.45 + 87 148.935 801 2 0 145.874 -19.729 -145.85 + 87 264.748 1628 1 1 145.85 -19.6963 -174.45 + 87 271.981 801 1 0 145.849 -19.695 -175.85 + 87 158.137 1628 0 1 145.82 -19.6599 -204.45 + 87 116.919 801 0 0 145.818 -19.6587 -205.85 + 87 194.282 800 1 0 145.101 -19.85 -175.982 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 1.66256 LIN +Particle: proton +Event: 88 +Number of tracker hits in this event: 35 + 88 110.198 538 11 1 -72.2925 13.7701 125.55 + 88 95.552 968 11 0 -72.2933 13.7759 124.15 + 88 115.463 538 10 1 -72.3058 13.879 95.55 + 88 106.183 969 10 0 -72.3067 13.8858 94.15 + 88 355.311 538 9 1 -72.3211 14.0281 65.55 + 88 142.161 969 9 0 -72.3226 14.0375 64.15 + 88 113.261 538 8 1 -72.3568 14.224 35.55 + 88 303.643 970 8 0 -72.3611 14.2288 34.15 + 88 132.535 537 7 1 -72.4509 14.3228 5.55 + 88 131.412 971 7 0 -72.4556 14.324 4.15 + 88 123.52 537 6 1 -72.5468 14.3466 -24.45 + 88 103.451 971 6 0 -72.5488 14.3515 -25.85 + 88 120.649 537 5 1 -72.5858 14.4509 -54.45 + 88 96.7391 972 5 0 -72.5848 14.4622 -55.85 + 88 101.498 537 4 1 -72.5562 14.6987 -84.45 + 88 419.376 973 4 0 -72.5541 14.7131 -85.85 + 88 145.522 537 3 1 -72.5021 15.0076 -114.45 + 88 198.585 974 3 0 -72.5029 15.0193 -115.85 + 88 123.48 537 2 1 -72.5096 15.2588 -144.45 + 88 123.412 976 2 0 -72.5102 15.268 -145.85 + 88 101.473 537 1 1 -72.5261 15.4469 -174.45 + 88 199.29 977 1 0 -72.5287 15.4548 -175.85 + 88 114.758 537 0 1 -72.5703 15.6076 -204.45 + 88 124.074 977 0 0 -72.5684 15.6183 -205.85 + 88 90.1386 976 1 0 -72.5321 15.45 -175.957 + 88 85.2823 972 4 0 -72.6981 14.65 -86.1986 + 88 19.059 859 6 0 -75.3027 -8.21017 -26.25 + 88 78.2408 858 6 0 -75.3128 -8.25 -26.211 + 88 145.944 857 6 0 -75.3481 -8.45 -26.095 + 88 21.7971 856 6 0 -75.2524 -8.65 -26.224 + 88 161.826 1298 6 0 10.6401 79.794 -26.25 + 88 225.338 1299 6 0 10.661 79.8502 -26.2352 + 88 12.4404 954 6 1 10.9948 79.7675 -24.85 + 88 50.0411 969 8 0 -72.6609 14.05 33.7942 + 88 69.1164 980 8 0 -84.0843 16.146 33.75 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 4.45016 LIN +Particle: proton +Event: 89 +Number of tracker hits in this event: 21 + 89 146.981 1466 9 1 113.485 -60.1904 65.55 + 89 114.642 599 9 0 113.486 -60.1895 64.15 + 89 128.115 1466 8 1 113.502 -60.1774 35.55 + 89 119.591 599 8 0 113.502 -60.1763 34.15 + 89 147.007 1466 7 1 113.508 -60.1539 5.55 + 89 213.576 599 7 0 113.508 -60.153 4.15 + 89 129.613 1466 6 1 113.525 -60.1298 -24.45 + 89 120.705 599 6 0 113.525 -60.1287 -25.85 + 89 242.549 1466 5 1 113.529 -60.1023 -54.45 + 89 114.547 599 5 0 113.528 -60.1015 -55.85 + 89 99.0165 1466 4 1 113.513 -60.0849 -84.45 + 89 111.172 599 4 0 113.51 -60.0831 -85.85 + 89 115.329 1466 3 1 113.447 -60.0506 -114.45 + 89 108.676 600 3 0 113.444 -60.0493 -115.85 + 89 112.397 1466 2 1 113.374 -60.0278 -144.45 + 89 104.758 600 2 0 113.371 -60.0272 -145.85 + 89 289.444 1465 1 1 113.311 -60.0176 -174.45 + 89 101.55 600 1 0 113.308 -60.0176 -175.85 + 89 108.123 1465 0 1 113.257 -60.0198 -204.45 + 89 102.995 600 0 0 113.254 -60.0205 -205.85 + 89 163.462 1467 7 1 113.55 -60.1626 5.32134 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 5.96728 LIN +Particle: proton +Event: 90 +Number of tracker hits in this event: 22 + 90 167.474 1458 9 1 111.902 64.5244 65.55 + 90 153.722 1222 9 0 111.904 64.5231 64.15 + 90 92.0569 1458 8 1 111.931 64.4955 35.55 + 90 100.294 1222 8 0 111.933 64.4941 34.15 + 90 158.832 1459 7 1 111.967 64.4688 5.55 + 90 401.603 1222 7 0 111.968 64.4669 4.15 + 90 131.024 1459 6 1 111.984 64.4343 -24.45 + 90 106.114 1221 6 0 111.985 64.4325 -25.85 + 90 98.2836 1459 5 1 112.004 64.3992 -54.45 + 90 113.578 1221 5 0 112.004 64.3982 -55.85 + 90 106.625 1459 4 1 111.999 64.3738 -84.45 + 90 120.419 1221 4 0 111.998 64.3727 -85.85 + 90 136.419 1459 3 1 111.984 64.353 -114.45 + 90 148.239 1221 3 0 111.984 64.3524 -115.85 + 90 109.632 1459 2 1 111.986 64.3384 -144.45 + 90 122.034 1221 2 0 111.985 64.338 -145.85 + 90 254.27 1459 1 1 111.965 64.325 -174.45 + 90 104.484 1221 1 0 111.964 64.3237 -175.85 + 90 128.248 1458 0 1 111.944 64.2991 -204.45 + 90 92.3323 1221 0 0 111.944 64.2988 -205.85 + 90 202.625 1458 1 1 111.95 64.3221 -174.651 + 90 262.985 1221 7 0 111.983 64.45 4.02007 +Number of digits in this event: 14 +Using G4ParticleGun... +Particle energy: 7.67384 LIN +Particle: proton +Event: 91 +Number of tracker hits in this event: 22 + 91 274.478 540 10 1 -71.9368 -57.9337 95.55 + 91 131.028 610 10 0 -71.938 -57.933 94.15 + 91 103.273 540 9 1 -71.9583 -57.919 65.55 + 91 126.676 610 9 0 -71.9585 -57.9184 64.15 + 91 125.912 540 8 1 -71.9613 -57.9051 35.55 + 91 102.051 610 8 0 -71.9624 -57.9023 34.15 + 91 119.719 540 7 1 -71.9872 -57.8437 5.55 + 91 126.245 611 7 0 -71.9883 -57.8411 4.15 + 91 129.001 540 6 1 -72.0115 -57.7882 -24.45 + 91 104.616 611 6 0 -72.0131 -57.7859 -25.85 + 91 92.6761 540 5 1 -72.0438 -57.7417 -54.45 + 91 122.058 611 5 0 -72.0448 -57.7392 -55.85 + 91 276.808 539 4 1 -72.0642 -57.6858 -84.45 + 91 126.332 611 4 0 -72.0652 -57.683 -85.85 + 91 125.658 539 3 1 -72.087 -57.6254 -114.45 + 91 165.541 612 3 0 -72.0883 -57.6232 -115.85 + 91 204.738 539 2 1 -72.1089 -57.5772 -144.45 + 91 89.7308 612 2 0 -72.111 -57.5757 -145.85 + 91 100.681 539 1 1 -72.156 -57.54 -174.45 + 91 434.152 612 1 0 -72.1596 -57.5375 -175.85 + 91 134.316 539 0 1 -72.2339 -57.4876 -204.45 + 91 133.817 612 0 0 -72.237 -57.4859 -205.85 +Number of digits in this event: 16 +Using G4ParticleGun... +Particle energy: 9.19236 LIN +Particle: proton +Event: 92 +Number of tracker hits in this event: 33 + 92 260.45 603 10 1 -59.2578 -75.1418 95.55 + 92 130.411 524 10 0 -59.2579 -75.1413 94.15 + 92 231.346 603 9 1 -59.2605 -75.1281 65.55 + 92 131.512 524 9 0 -59.2602 -75.1272 64.15 + 92 119.203 603 8 1 -59.2543 -75.107 35.55 + 92 95.7217 524 8 0 -59.2537 -75.1062 34.15 + 92 156.628 604 7 1 -59.2459 -75.0898 5.55 + 92 136.173 524 7 0 -59.247 -75.0882 4.15 + 92 100.63 603 6 1 -59.269 -75.0562 -24.45 + 92 148.513 524 6 0 -59.2703 -75.0552 -25.85 + 92 103.08 603 5 1 -59.2981 -75.0315 -54.45 + 92 333.142 525 5 0 -59.2996 -75.0296 -55.85 + 92 165.349 603 4 1 -59.3298 -74.9941 -84.45 + 92 111.906 525 4 0 -59.3303 -74.9929 -85.85 + 92 116.981 603 3 1 -59.3394 -74.9651 -114.45 + 92 151.503 525 3 0 -59.3396 -74.9634 -115.85 + 92 117.818 603 2 1 -59.3442 -74.9307 -144.45 + 92 99.1743 525 2 0 -59.3444 -74.9286 -145.85 + 92 143.149 603 1 1 -59.3449 -74.8918 -174.45 + 92 125.711 525 1 0 -59.3466 -74.8902 -175.85 + 92 173.139 603 0 1 -59.3815 -74.8543 -204.45 + 92 111.225 525 0 0 -59.3841 -74.8534 -205.85 + 92 53.3574 526 10 0 -59.5468 -74.703 94.15 + 92 57.2036 527 10 0 -59.5821 -74.65 93.9821 + 92 246.625 551 9 1 -69.6507 -66.4405 65.55 + 92 40.0439 550 9 1 -69.85 -66.5477 65.2499 + 92 171.241 566 9 0 -71.0501 -66.8152 64.15 + 92 753.764 565 9 0 -71.1929 -66.85 64.0351 + 92 8.75592 567 9 0 -73.2845 -66.65 64.1371 + 92 11.1387 521 9 1 -75.6782 -65.1677 65.15 + 92 114.813 577 9 0 -78.8707 -64.5427 64.1499 + 92 140.162 578 9 0 -79.1783 -64.45 64.0981 + 92 103.974 579 9 0 -79.6271 -64.25 63.9696 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 1.84197 LIN +Particle: proton +Event: 93 +Number of tracker hits in this event: 29 + 93 113.597 1130 11 1 46.0742 -32.3407 125.55 + 93 339.446 738 11 0 46.0742 -32.3386 124.15 + 93 101.443 1130 10 1 46.0699 -32.2921 95.55 + 93 137.618 738 10 0 46.0638 -32.2907 94.15 + 93 100.822 1129 9 1 45.9392 -32.2598 65.55 + 93 130.056 738 9 0 45.9338 -32.2591 64.15 + 93 124.066 1128 8 1 45.8277 -32.2439 35.55 + 93 192.671 739 8 0 45.8205 -32.2358 34.15 + 93 117.158 1128 7 1 45.6798 -32.0671 5.55 + 93 166.829 739 7 0 45.6685 -32.0548 4.15 + 93 176.339 1126 6 1 45.4455 -31.7928 -24.45 + 93 122.467 741 6 0 45.4335 -31.7752 -25.85 + 93 139.248 1125 5 1 45.1824 -31.4215 -54.45 + 93 107.06 743 5 0 45.1718 -31.3999 -55.85 + 93 355.043 1124 4 1 44.9543 -30.9701 -84.45 + 93 163.404 745 4 0 44.9437 -30.9476 -85.85 + 93 116.091 1123 3 1 44.7168 -30.4951 -114.45 + 93 104.791 747 3 0 44.7044 -30.4735 -115.85 + 93 86.602 1122 2 1 44.4588 -30.0338 -144.45 + 93 163.482 750 2 0 44.4484 -30.0113 -145.85 + 93 154.706 1121 1 1 44.2631 -29.5125 -174.45 + 93 114.256 752 1 0 44.2534 -29.4905 -175.85 + 93 163.887 1120 0 1 44.063 -29.0377 -204.45 + 93 108.913 755 0 0 44.0544 -29.0178 -205.85 + 93 151.754 742 4 0 45.2908 -31.4564 -85.85 + 93 93.3647 558 4 0 86.6017 -68.394 -86.25 + 93 141.927 557 4 0 86.605 -68.45 -86.1895 + 93 219.703 556 4 0 86.4444 -68.65 -86.0552 + 93 125.04 555 4 0 86.4865 -68.85 -86.0267 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 3.26671 LIN +Particle: proton +Event: 94 +Number of tracker hits in this event: 228 + 94 102.947 510 11 0 31.8834 -77.9551 124.123 + 94 112.771 1059 10 1 31.8884 -77.9554 95.55 + 94 92.7202 510 10 0 31.8877 -77.957 94.15 + 94 87.0249 1059 9 1 31.88 -77.9885 65.55 + 94 146.625 510 9 0 31.8782 -77.9892 64.15 + 94 116.884 1058 8 1 31.8374 -78.002 35.55 + 94 113.613 510 8 0 31.834 -78.0037 34.15 + 94 138.47 1058 7 1 31.7523 -78.0306 5.55 + 94 142.185 510 7 0 31.7487 -78.0324 4.15 + 94 133.377 1058 6 1 31.6798 -78.0683 -24.45 + 94 116.05 509 6 0 31.6772 -78.0689 -25.85 + 94 238.897 1057 5 1 31.6216 -78.0826 -54.45 + 94 112.655 509 5 0 31.6186 -78.0838 -55.85 + 94 146.854 1057 4 1 31.556 -78.1087 -84.45 + 94 117.782 509 4 0 31.552 -78.1092 -85.85 + 94 157.008 1057 3 1 31.4721 -78.1202 -114.45 + 94 103.204 509 3 0 31.4679 -78.1228 -115.85 + 94 127.369 1056 2 1 31.3862 -78.1775 -144.45 + 94 116.945 509 2 0 31.3824 -78.1809 -145.85 + 94 123.627 1056 1 1 31.2972 -78.2543 -174.45 + 94 95.2974 508 1 0 31.2942 -78.2612 -175.85 + 94 232.375 1055 0 1 31.2346 -78.3967 -204.45 + 94 279.095 508 0 0 31.2314 -78.404 -205.85 + 94 0.467889 279 0 0 51.9802 -124.15 -206.148 + 94 5.45537 1101 0 1 40.25 -99.8876 -204.467 + 94 5.59537 1266 9 0 18.9723 73.3552 63.75 + 94 135.196 280 4 0 168.028 -124.073 -86.1641 + 94 64.0155 657 0 1 -48.534 -49.8592 -204.45 + 94 110.826 1054 0 1 30.9664 -78.4427 -204.85 + 94 113.728 511 1 0 30.794 -77.8012 -176.25 + 94 158.87 1053 1 1 30.7825 -77.7697 -174.85 + 94 157.254 516 2 0 29.4133 -76.7259 -146.25 + 94 131.723 1046 2 1 29.3456 -76.6837 -144.85 + 94 100.61 517 3 0 27.6916 -76.5241 -116.25 + 94 104.824 1037 3 1 27.6176 -76.5178 -114.85 + 94 315.105 498 4 0 34.0829 -80.3287 -86.25 + 94 41.7544 1071 4 1 34.4188 -80.5279 -84.85 + 94 66.6446 1072 4 1 34.45 -80.5464 -84.7214 + 94 126.686 482 5 0 43.268 -83.6093 -56.25 + 94 5.89272 481 5 0 43.3864 -83.65 -55.8694 + 94 147.722 1118 5 1 43.7128 -83.7534 -54.85 + 94 258.342 469 6 0 53.0132 -86.0812 -26.2497 + 94 210.894 1167 6 1 53.4657 -86.2016 -24.8499 + 94 116.743 458 7 0 64.0903 -88.267 3.75016 + 94 40.8095 1222 7 1 64.6005 -88.3755 5.15 + 94 69.7054 1223 7 1 64.65 -88.386 5.28658 + 94 115.742 445 8 0 74.678 -91.0172 33.7508 + 94 50.9516 1275 8 1 75.1845 -91.1475 35.1509 + 94 82.9607 1276 8 1 75.25 -91.164 35.3293 + 94 206.928 425 9 0 84.9381 -94.9948 63.75 + 94 22.9479 1326 9 1 85.4301 -95.168 65.15 + 94 138.783 1327 9 1 85.45 -95.175 65.2064 + 94 101.239 406 10 0 95.0796 -98.8635 93.7503 + 94 148.253 1377 10 1 95.553 -99.0481 95.1501 + 94 17.0792 383 11 0 104.093 -103.54 123.75 + 94 85.3398 382 11 0 104.111 -103.55 123.811 + 94 54.2508 1421 11 1 104.503 -103.765 125.151 + 94 86.3821 1422 11 1 104.55 -103.79 125.312 + 94 131.107 362 12 0 113.977 -107.668 153.75 + 94 139.386 1471 12 1 114.422 -107.843 155.15 + 94 4.69991 351 13 0 121.826 -109.949 183.75 + 94 116.761 350 13 0 121.828 -109.95 183.758 + 94 143.415 1510 13 1 122.162 -110.155 185.15 + 94 122.633 331 14 0 131.566 -113.889 213.75 + 94 88.4957 1559 14 1 132.033 -114.072 215.15 + 94 10.3736 1560 14 1 132.15 -114.117 215.512 + 94 144.561 366 13 0 124.226 -106.837 183.75 + 94 44.8926 1522 13 1 124.69 -106.679 185.15 + 94 68.9856 1523 13 1 124.75 -106.649 185.355 + 94 42.6178 405 14 0 141.456 -98.9989 213.75 + 94 64.6994 406 14 0 141.553 -98.95 213.918 + 94 30.9751 1608 14 1 141.91 -98.6558 215.15 + 94 84.2935 1609 14 1 141.95 -98.6278 215.272 + 94 280.249 359 13 0 133.703 -108.22 183.75 + 94 159.946 1570 13 1 134.274 -108.348 185.15 + 94 28.8083 1571 13 1 134.35 -108.408 185.402 + 94 139.427 303 14 0 127.806 -119.395 213.75 + 94 17.2286 1533 14 1 126.792 -119.878 215.15 + 94 231.72 1532 14 1 126.75 -119.898 215.208 + 94 231.418 1531 14 1 126.55 -119.937 215.459 + 94 1.99437 1530 14 1 126.345 -119.89 215.55 + 94 32.6118 300 14 0 127.18 -120.115 214.15 + 94 172.857 299 14 0 127.238 -120.15 214.059 + 94 194.252 358 13 0 133.868 -108.35 183.97 + 94 107.291 357 13 0 134.135 -108.55 183.988 + 94 200.692 340 11 0 77.9758 -112.004 123.75 + 94 142.565 339 11 0 77.8346 -112.151 123.891 + 94 10.0723 338 11 0 77.6386 -112.35 124.124 + 94 86.5233 1285 11 1 77.1458 -112.97 125.15 + 94 147.833 1284 11 1 77.0499 -113.135 125.448 + 94 77.5553 341 11 0 76.9561 -111.95 123.921 + 94 59.0026 342 11 0 77.0546 -111.75 123.951 + 94 63.8328 343 11 0 77.1116 -111.55 123.988 + 94 49.5413 344 11 0 77.1494 -111.35 124.08 + 94 248.594 1287 11 1 77.5449 -110.986 125.15 + 94 141.801 402 11 0 118.269 -99.7237 123.75 + 94 149.694 401 11 0 118.385 -99.75 124.01 + 94 123.501 1492 11 1 118.652 -99.7507 125.15 + 94 170.268 1493 11 1 118.778 -99.6615 125.55 + 94 121.791 403 11 0 119.017 -99.55 124.014 + 94 178.665 1555 13 1 131.273 -105.961 185.15 + 94 47.9555 1556 13 1 131.35 -105.99 185.439 + 94 41.5242 1554 13 1 131.15 -105.902 185.506 + 94 140.806 1168 6 1 53.65 -86.1489 -24.6295 + 94 39.5321 1009 8 1 21.9943 -70.1194 35.15 + 94 62.3456 1010 8 1 22.05 -70.0806 35.3899 + 94 99.7453 582 3 0 46.6644 -63.5239 -116.25 + 94 181.165 543 3 0 2.71232 -71.378 -116.25 + 94 132.155 561 3 0 26.9628 -67.7662 -116.25 + 94 0.683308 562 3 0 26.8101 -67.65 -115.854 + 94 121.002 1032 3 1 26.4749 -67.5222 -114.85 + 94 129.836 514 0 0 31.6044 -77.0965 -206.25 + 94 156.662 1058 0 1 31.7067 -77.0617 -204.85 + 94 114.412 521 1 0 33.328 -75.7702 -176.25 + 94 93.7922 1066 1 1 33.4299 -75.7422 -174.849 + 94 12.8013 1067 1 1 33.45 -75.7355 -174.495 + 94 136.448 551 2 0 37.8041 -69.7199 -146.25 + 94 23.5424 552 2 0 37.8532 -69.65 -145.932 + 94 51.2545 1089 2 1 38.029 -69.4246 -144.85 + 94 74.3172 1090 2 1 38.0502 -69.3986 -144.718 + 94 165.424 571 3 0 37.248 -65.7673 -116.25 + 94 113.252 1085 3 1 37.2009 -65.5568 -114.85 + 94 11.8762 676 4 0 30.8595 -44.6809 -86.25 + 94 133.935 677 4 0 30.8494 -44.65 -86.2082 + 94 19.8625 678 4 0 30.7724 -44.45 -85.9276 + 94 13.8277 1052 4 1 30.4674 -43.7022 -84.8496 + 94 121.005 1051 4 1 30.45 -43.6616 -84.7899 + 94 140.6 590 5 0 7.21466 -61.8784 -56.25 + 94 101.259 589 5 0 6.98933 -62.05 -55.9557 + 94 3.55063 931 5 1 6.25807 -62.6311 -54.85 + 94 210.658 930 5 1 6.24972 -62.638 -54.8371 + 94 5.05547 929 5 1 6.04969 -62.7927 -54.4607 + 94 100.498 479 6 0 10.0631 -84.054 -26.25 + 94 35.2289 478 6 0 10.126 -84.25 -25.9537 + 94 99.2497 951 6 1 10.3551 -84.8017 -24.8496 + 94 24.238 952 6 1 10.45 -84.991 -24.5426 + 94 158.477 521 7 0 14.1913 -75.8486 3.75 + 94 271.933 971 7 1 14.2874 -75.3292 5.15 + 94 92.7395 973 7 1 14.7728 -75.3657 5.54976 + 94 96.6182 974 7 1 14.8501 -75.3261 5.2181 + 94 129.834 524 7 0 15.1235 -75.137 4.15 + 94 144.905 1017 6 1 23.4588 -73.8336 -24.45 + 94 92.2151 526 6 0 23.5752 -74.6635 -25.85 + 94 74.3397 525 6 0 23.5845 -74.85 -26.0856 + 94 5.61455 524 6 0 23.6472 -75.0501 -26.2366 + 94 57.9279 117 6 0 73.3197 -156.673 -26.25 + 94 72.231 116 6 0 73.3871 -156.75 -26.2057 + 94 129.278 115 6 0 73.5624 -156.95 -26.1223 + 94 396.35 114 6 0 73.7628 -157.15 -26.0734 + 94 195.416 113 6 0 74.0012 -157.35 -26.0237 + 94 84.9502 808 6 1 -18.25 -78.1117 -24.5271 + 94 38.7598 822 6 1 -15.65 -75.1859 -24.4815 + 94 92.5865 807 6 1 -18.45 -78.2165 -24.4535 + 94 131.351 1088 3 1 37.7796 -65.2413 -114.451 + 94 78.6838 570 3 0 37.9643 -65.85 -116.019 + 94 6.7784 569 3 0 38.0093 -66.05 -116.233 + 94 199.817 1106 2 1 41.3485 -95.3853 -144.45 + 94 101.667 436 2 0 41.0942 -92.9461 -145.85 + 94 131.011 437 2 0 41.0756 -92.75 -145.875 + 94 316.225 50 2 0 44.2089 -170.037 -146.25 + 94 55.8825 49 2 0 44.2615 -170.15 -146.169 + 94 178.512 505 0 0 31.1177 -79.0335 -206.25 + 94 208.283 498 1 0 34.4687 -80.4066 -176.25 + 94 63.053 1072 1 1 34.627 -80.4874 -174.85 + 94 112.312 1073 1 1 34.65 -80.4995 -174.65 + 94 120.122 489 2 0 40.4193 -82.2263 -146.25 + 94 117.115 1103 2 1 40.7219 -82.3131 -144.85 + 94 218.668 467 3 0 47.1402 -86.5086 -116.25 + 94 28.2484 1136 3 1 47.4293 -86.7146 -114.85 + 94 88.2335 1137 3 1 47.45 -86.7295 -114.748 + 94 114.438 457 4 0 51.7751 -88.6096 -86.2496 + 94 131.769 1159 4 1 51.9734 -88.7097 -84.85 + 94 153.9 434 5 0 57.7745 -93.2884 -56.25 + 94 1.49583 433 5 0 57.8522 -93.35 -55.862 + 94 174.935 1190 5 1 58.0521 -93.5112 -54.85 + 94 80.7611 377 6 0 60.3363 -104.653 -26.25 + 94 57.6758 376 6 0 60.3515 -104.75 -26.0077 + 94 124.724 1202 6 1 60.4571 -105.257 -24.85 + 94 90.4458 324 7 0 64.2129 -115.248 3.75045 + 94 29.89 323 7 0 64.2444 -115.35 4.03326 + 94 223.497 1221 7 1 64.3494 -115.781 5.15 + 94 71.2233 274 8 0 76.3606 -125.274 33.7507 + 94 56.7548 273 8 0 76.4591 -125.35 33.9784 + 94 162.761 1284 8 1 76.9666 -125.706 35.15 + 94 62.578 1285 8 1 77.05 -125.763 35.3466 + 94 91.1782 245 9 0 87.5999 -131.102 63.7502 + 94 52.3604 244 9 0 87.6888 -131.15 63.9839 + 94 78.0197 1340 9 1 88.1474 -131.41 65.15 + 94 40.5243 1341 9 1 88.2501 -131.469 65.4229 + 94 60.8713 144 10 0 94.2051 -151.236 93.7503 + 94 79.2295 143 10 0 94.241 -151.35 93.9158 + 94 55.8657 1371 10 1 94.5082 -152.142 95.15 + 94 102.314 1372 10 1 94.55 -152.261 95.3372 + 94 36.6801 33 11 0 101.012 -173.477 123.75 + 94 104.293 32 11 0 101.035 -173.55 123.849 + 94 22.2624 31 11 0 101.099 -173.75 124.118 + 94 232.216 1406 11 1 101.353 -174.473 125.15 + 94 210.503 1407 11 1 101.55 -174.796 125.487 + 94 204.002 1408 11 1 101.75 -174.859 125.339 + 94 90.8154 1220 7 1 64.25 -115.8 5.42841 + 94 72.3565 391 6 0 63.2094 -101.877 -26.2498 + 94 42.9632 390 6 0 63.2568 -101.95 -25.977 + 94 198.162 1217 6 1 63.4656 -102.29 -24.85 + 94 100.668 1378 12 1 95.8137 -132.955 155.15 + 94 191.501 356 9 0 57.2938 -108.777 63.75 + 94 31.3463 355 9 0 57.5703 -108.95 64.0869 + 94 17.0877 1197 9 1 59.5596 -109.751 65.15 + 94 55.3589 1198 9 1 59.65 -109.781 65.1914 + 94 51.115 1199 9 1 59.85 -109.82 65.2545 + 94 63.8283 1200 9 1 60.0505 -109.834 65.3017 + 94 77.7589 1201 9 1 60.25 -109.822 65.3518 + 94 170.56 1202 9 1 60.45 -109.742 65.5013 + 94 196.282 1203 9 1 60.65 -109.745 65.5313 + 94 134.683 1204 9 1 60.8504 -109.808 65.4532 + 94 211.417 1205 9 1 61.05 -109.896 65.3913 + 94 18.5803 345 9 0 60.2874 -111.129 64.15 + 94 277.85 344 9 0 60.2738 -111.15 64.0919 + 94 90.2718 393 9 0 42.0459 -101.501 63.7523 + 94 210.816 392 9 0 42.0459 -101.55 63.9774 + 94 129.355 1109 9 1 41.9925 -101.707 65.15 + 94 44.0902 229 10 0 42.9627 -134.239 93.75 + 94 99.4575 228 10 0 42.955 -134.35 93.8596 + 94 15.0898 227 10 0 42.9499 -134.55 94.104 + 94 120.321 1115 10 1 43.1078 -135.208 95.1501 + 94 67.8693 1663 4 0 -70.2184 152.766 -85.9055 + 94 41.0305 482 10 1 -83.4629 -157.731 95.194 + 94 219.996 506 3 0 32.0587 -78.6792 -115.85 + 94 105.841 1056 5 1 31.45 -77.7512 -54.5603 +Number of digits in this event: 96 +Using G4ParticleGun... +Particle energy: 3.76777 LIN +Particle: proton +Event: 95 +Number of tracker hits in this event: 29 + 95 96.4429 1081 11 1 36.265 -69.1899 125.55 + 95 121.897 554 11 0 36.264 -69.1901 124.15 + 95 133.922 1080 10 1 36.246 -69.1959 95.55 + 95 114.47 554 10 0 36.2467 -69.1959 94.15 + 95 87.5995 1081 9 1 36.2666 -69.2034 65.55 + 95 176.427 554 9 0 36.2677 -69.2051 64.15 + 95 84.926 1081 8 1 36.2905 -69.2368 35.55 + 95 97.8218 554 8 0 36.2905 -69.2381 34.15 + 95 173.023 1081 7 1 36.2927 -69.2723 5.55 + 95 116.299 553 7 0 36.2929 -69.2751 4.15 + 95 254.895 1081 6 1 36.2952 -69.333 -24.45 + 95 126.014 553 6 0 36.2952 -69.3379 -25.85 + 95 194.479 1081 5 1 36.2964 -69.4363 -54.45 + 95 321.181 553 5 0 36.2963 -69.4421 -55.85 + 95 107.546 1081 4 1 36.29 -69.5631 -84.45 + 95 98.6177 552 4 0 36.2923 -69.5681 -85.85 + 95 123.528 1081 3 1 36.3375 -69.6725 -114.45 + 95 84.4785 551 3 0 36.3424 -69.6772 -115.85 + 95 189.486 1081 2 1 36.4381 -69.7697 -144.45 + 95 118.006 551 2 0 36.4423 -69.773 -145.85 + 95 195.987 1082 1 1 36.5249 -69.8428 -174.45 + 95 98.7435 551 1 0 36.5289 -69.8444 -175.85 + 95 108.448 1082 0 1 36.6166 -69.8816 -204.45 + 95 131.212 550 0 0 36.6204 -69.8849 -205.85 + 95 200.688 1082 2 1 36.45 -69.7576 -144.491 + 95 381.432 1080 7 1 36.2499 -69.2356 5.38708 + 95 153.919 552 7 0 35.7879 -69.6174 4.15 + 95 156.88 627 7 0 15.9968 -54.5133 3.75 + 95 187.854 628 7 0 15.9675 -54.45 3.79797 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 9.83183 LIN +Particle: proton +Event: 96 +Number of tracker hits in this event: 22 + 96 135.924 1316 10 1 83.4296 55.48 95.55 + 96 107.215 1177 10 0 83.4303 55.4795 94.15 + 96 104.848 1316 9 1 83.4475 55.4676 65.55 + 96 234.688 1177 9 0 83.4476 55.4667 64.15 + 96 130.56 1317 8 1 83.4522 55.4479 35.55 + 96 106.065 1176 8 0 83.4518 55.447 34.15 + 96 106.185 1316 7 1 83.4457 55.4257 5.55 + 96 129.163 1176 7 0 83.4457 55.4231 4.15 + 96 96.5301 1316 6 1 83.4424 55.3699 -24.45 + 96 112.097 1176 6 0 83.4428 55.3681 -25.85 + 96 110.811 1316 5 1 83.4487 55.3313 -54.45 + 96 110.128 1176 5 0 83.4495 55.3289 -55.85 + 96 137.513 1317 4 1 83.4624 55.278 -84.45 + 96 128.271 1176 4 0 83.4625 55.2754 -85.85 + 96 103.554 1317 3 1 83.4671 55.2203 -114.45 + 96 113.455 1175 3 0 83.4674 55.2173 -115.85 + 96 103.752 1317 2 1 83.4777 55.1557 -144.45 + 96 108.515 1175 2 0 83.4779 55.1525 -145.85 + 96 101.69 1317 1 1 83.4808 55.0898 -174.45 + 96 143.454 1175 1 0 83.4814 55.0874 -175.85 + 96 92.194 1317 0 1 83.4964 55.0391 -204.45 + 96 192.75 1174 0 0 83.4973 55.0366 -205.85 +Number of digits in this event: 9 +Using G4ParticleGun... +Particle energy: 4.81338 LIN +Particle: proton +Event: 97 +Number of tracker hits in this event: 27 + 97 97.0104 1035 11 1 27.0988 65.8536 125.55 + 97 159.444 1229 11 0 27.1 65.8542 124.15 + 97 123.263 1035 10 1 27.1236 65.8713 95.55 + 97 106.745 1229 10 0 27.1241 65.8738 94.15 + 97 95.9051 1035 9 1 27.1363 65.9289 65.55 + 97 175.168 1229 9 0 27.1389 65.9303 64.15 + 97 90.7585 1035 8 1 27.1885 65.9603 35.55 + 97 110.255 1229 8 0 27.1911 65.9619 34.15 + 97 114.706 1035 7 1 27.2464 65.9897 5.55 + 97 97.8706 1229 7 0 27.2482 65.9933 4.15 + 97 119.532 1036 6 1 27.2883 66.0672 -24.45 + 97 135.415 1230 6 0 27.2911 66.0712 -25.85 + 97 245.015 1036 5 1 27.3476 66.155 -54.45 + 97 104.032 1230 5 0 27.3504 66.1589 -55.85 + 97 108.166 1036 4 1 27.4073 66.2359 -84.45 + 97 136.772 1230 4 0 27.4097 66.2379 -85.85 + 97 117.102 1037 3 1 27.46 66.2806 -114.45 + 97 119.902 1231 3 0 27.4632 66.2819 -115.85 + 97 97.1083 1037 2 1 27.5302 66.3051 -144.45 + 97 112.402 1231 2 0 27.5337 66.3056 -145.85 + 97 100.008 1037 1 1 27.6069 66.3189 -174.45 + 97 95.7124 1231 1 0 27.6106 66.3288 -175.85 + 97 182.942 1038 0 1 27.686 66.5321 -204.45 + 97 115.873 1232 0 0 27.6905 66.5409 -205.85 + 97 178.163 1035 5 1 27.25 66.3009 -54.7266 + 97 230.438 1228 9 0 27.1456 65.85 63.9715 + 97 223.234 1032 9 1 26.5157 65.6907 65.1502 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 6.4123 LIN +Particle: proton +Event: 98 +Number of tracker hits in this event: 20 + 98 247.009 344 9 1 -111.28 -67.5616 65.55 + 98 126.165 562 9 0 -111.28 -67.5626 64.15 + 98 115.119 344 8 1 -111.298 -67.583 35.55 + 98 100.021 562 8 0 -111.299 -67.5838 34.15 + 98 118.301 344 7 1 -111.312 -67.6054 5.55 + 98 84.8925 562 7 0 -111.314 -67.6067 4.15 + 98 109.128 343 6 1 -111.351 -67.6314 -24.45 + 98 95.9232 562 6 0 -111.352 -67.633 -25.85 + 98 117.407 343 5 1 -111.373 -67.6612 -54.45 + 98 114.003 561 5 0 -111.373 -67.6634 -55.85 + 98 103.119 343 4 1 -111.379 -67.7112 -84.45 + 98 223.298 561 4 0 -111.382 -67.7131 -85.85 + 98 122.16 343 3 1 -111.43 -67.7444 -114.45 + 98 105.118 561 3 0 -111.43 -67.7468 -115.85 + 98 90.7585 343 2 1 -111.44 -67.7991 -144.45 + 98 113.846 561 2 0 -111.439 -67.8009 -145.85 + 98 104.946 343 1 1 -111.432 -67.8349 -174.45 + 98 121.865 561 1 0 -111.43 -67.8369 -175.85 + 98 109.71 343 0 1 -111.392 -67.8767 -204.45 + 98 165.507 560 0 0 -111.39 -67.8798 -205.85 +Number of digits in this event: 7 +Using G4ParticleGun... +Particle energy: 4.67711 LIN Particle: proton Event: 99 -Number of tracker hits in this event: 24 - 99 192.861 680 11 1 -44.0364 15.1594 125.55 - 99 109.349 975 11 0 -44.0377 15.1566 124.15 - 99 96.2762 679 10 1 -44.056 15.1028 95.55 - 99 479.217 975 10 0 -44.0568 15.0987 94.15 - 99 117.078 679 9 1 -44.0765 15.0256 65.55 - 99 124.399 974 9 0 -44.0749 15.0248 64.15 - 99 112.705 680 8 1 -44.0468 15.0153 35.55 - 99 109.834 974 8 0 -44.0397 15.0158 34.15 - 99 116.356 680 7 1 -43.9039 15.0336 5.55 - 99 132.872 974 7 0 -43.8991 15.0343 4.15 - 99 110.443 681 6 1 -43.8048 15.0461 -24.45 - 99 110.205 974 6 0 -43.8013 15.0472 -25.85 - 99 119.799 681 5 1 -43.7154 15.0819 -54.45 - 99 109.969 975 5 0 -43.7108 15.0829 -55.85 - 99 111.042 682 4 1 -43.6143 15.1078 -84.45 - 99 135.84 975 4 0 -43.6087 15.1103 -85.85 - 99 106.051 682 3 1 -43.5092 15.1711 -114.45 - 99 148.472 975 3 0 -43.5039 15.1721 -115.85 - 99 146.999 683 2 1 -43.3796 15.1807 -144.45 - 99 103.518 975 2 0 -43.3731 15.1793 -145.85 - 99 132.939 684 1 1 -43.2326 15.1475 -174.45 - 99 111.423 975 1 0 -43.2258 15.147 -175.85 - 99 119.66 684 0 1 -43.0896 15.1223 -204.45 - 99 153.423 975 0 0 -43.083 15.1247 -205.85 -Number of digits in this event: 10 +Number of tracker hits in this event: 28 + 99 211.202 875 11 1 -4.91839 71.067 125.55 + 99 131.766 1255 11 0 -4.91764 71.0717 124.15 + 99 154.198 875 10 1 -4.90143 71.1677 95.55 + 99 145.819 1255 10 0 -4.89992 71.1729 94.15 + 99 145.556 875 9 1 -4.86953 71.2845 65.55 + 99 102.658 1256 9 0 -4.86688 71.2908 64.15 + 99 233.837 876 8 1 -4.80752 71.4171 35.55 + 99 188.859 1256 8 0 -4.80168 71.4222 34.15 + 99 159.233 876 7 1 -4.67508 71.5242 5.55 + 99 112.837 1257 7 0 -4.66867 71.5301 4.15 + 99 115.098 877 6 1 -4.53437 71.6537 -24.45 + 99 107.78 1258 6 0 -4.52805 71.6593 -25.85 + 99 188.703 878 5 1 -4.39495 71.7801 -54.45 + 99 104.212 1258 5 0 -4.38897 71.7876 -55.85 + 99 151.948 878 4 1 -4.27064 71.9465 -84.45 + 99 115.73 1259 4 0 -4.26696 71.9534 -85.85 + 99 86.4912 879 3 1 -4.18919 72.0961 -114.45 + 99 137.272 1260 3 0 -4.18559 72.1024 -115.85 + 99 97.6595 879 2 1 -4.10724 72.2239 -144.45 + 99 111.022 1260 2 0 -4.10326 72.2294 -145.85 + 99 172.062 880 1 1 -4.0286 72.3403 -174.45 + 99 152.549 1261 1 0 -4.02521 72.3468 -175.85 + 99 122.057 880 0 1 -3.95732 72.4822 -204.45 + 99 112.658 1262 0 0 -3.95301 72.4894 -205.85 + 99 32.2746 858 10 0 -2.67262 -8.35332 93.75 + 99 63.7607 857 10 0 -2.64044 -8.45 93.7735 + 99 189.823 856 10 0 -2.6034 -8.65 93.8026 + 99 234.151 886 10 1 -2.67211 -8.82075 95.1501 +Number of digits in this event: 17 Run terminated. Run Summary Number of events processed : 100 - User=1.530000s Real=1.929012s Sys=0.010000s + User=1.340000s Real=1.465762s Sys=0.020000s End of Run 0 /gun/particle gamma /gun/energy 1 GeV @@ -4813,3736 +5004,4110 @@ Cannot set FirstId as its value was already used. done Using G4ParticleGun... -Particle energy: 8.85188 LIN +Particle energy: 7.20945 LIN Particle: gamma Event: 0 -Number of tracker hits in this event: 1 - 0 43.6905 853 10 1 -9.25 127.161 95.4743 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 9.03067 LIN -Particle: gamma -Event: 1 -Number of tracker hits in this event: 21 - 1 227.658 1311 4 1 82.2892 -47.5946 -84.45 - 1 228.92 662 4 0 82.2889 -47.5944 -85.85 - 1 306.815 1311 3 1 82.2789 -47.5931 -114.45 - 1 253.053 662 3 0 82.2786 -47.5944 -115.85 - 1 256.908 1311 2 1 82.2687 -47.6217 -144.45 - 1 246.187 662 2 0 82.2677 -47.6228 -145.85 - 1 332.071 1310 1 1 82.2407 -47.6468 -174.45 - 1 145.262 662 1 0 82.2398 -47.6485 -175.85 - 1 228.116 1310 0 1 82.214 -47.6855 -204.45 - 1 136.279 661 0 0 82.2123 -47.6872 -205.85 - 1 15.9287 575 2 0 -35.1106 -64.9791 -146.25 - 1 3.19967 574 2 0 -35.4675 -65.0502 -145.853 - 1 41.2669 726 2 1 -34.7565 -65.8011 -144.85 - 1 5.36382 576 2 0 -34.3678 -64.7194 -145.85 - 1 87.9452 727 2 1 -34.5664 -60.6093 -144.85 - 1 195.318 661 1 0 82.2286 -47.694 -175.85 - 1 110.686 660 0 0 82.2125 -47.9028 -205.85 - 1 24.601 1380 0 1 96.2354 8.39284 -204.85 - 1 139.883 900 0 0 95.9472 0.05 -206.171 - 1 122.924 901 0 0 95.9367 0.250268 -206.068 - 1 217.422 792 0 0 81.0914 -21.562 -206.25 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 4.23269 LIN -Particle: gamma -Event: 2 Number of tracker hits in this event: 0 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 9.04881 LIN +Particle energy: 1.56246 LIN +Particle: gamma +Event: 1 +Number of tracker hits in this event: 118 + 1 653.181 314 7 1 -117.167 -72.1406 5.55 + 1 312.243 539 7 0 -117.167 -72.1409 4.15 + 1 110.438 314 6 1 -117.164 -72.1297 -24.45 + 1 238.72 539 6 0 -117.141 -72.0878 -25.85 + 1 105.605 316 5 1 -116.764 -71.2279 -54.45 + 1 194.056 544 5 0 -116.737 -71.1664 -55.85 + 1 395.968 319 4 1 -116.229 -69.9355 -84.45 + 1 102.232 550 4 0 -116.178 -69.8535 -85.85 + 1 282.119 551 4 0 -116.176 -69.85 -85.9103 + 1 251.235 325 3 1 -115.137 -68.1205 -114.45 + 1 230.039 560 3 0 -115.098 -68.0338 -115.85 + 1 174.589 329 2 1 -114.32 -66.3099 -144.45 + 1 175.314 569 2 0 -114.261 -66.2451 -145.85 + 1 147.396 334 1 1 -113.208 -65.0012 -174.45 + 1 104.83 575 1 0 -113.177 -64.9529 -175.85 + 1 137.922 338 0 1 -112.517 -63.8946 -204.45 + 1 103.068 581 0 0 -112.517 -63.8362 -205.85 + 1 849.936 317 3 1 -116.574 -71.6905 -114.45 + 1 128.943 541 3 0 -116.525 -71.6935 -115.85 + 1 335.562 324 2 1 -115.332 -71.5238 -144.45 + 1 357.418 543 2 0 -115.326 -71.437 -145.85 + 1 125.945 325 1 1 -115.002 -69.4469 -174.45 + 1 106.632 553 1 0 -115.102 -69.298 -175.85 + 1 153.121 313 0 1 -117.417 -66.2854 -204.451 + 1 151.142 569 0 0 -117.543 -66.1727 -205.85 + 1 111.982 318 3 1 -116.55 -72.1168 -114.76 + 1 110.765 542 3 0 -116.675 -71.6371 -115.85 + 1 358.91 302 2 1 -119.594 -68.4007 -144.45 + 1 85.5276 558 2 0 -120.003 -68.277 -145.85 + 1 39.4256 559 2 0 -120.079 -68.25 -146.119 + 1 63.8162 264 1 1 -127.24 -65.1903 -174.45 + 1 91.287 263 1 1 -127.35 -65.0793 -174.615 + 1 18.9955 578 1 0 -128.172 -64.2906 -175.85 + 1 145.995 579 1 0 -128.214 -64.25 -175.915 + 1 6.82672 580 1 0 -128.4 -64.0498 -176.231 + 1 10.4737 172 0 1 -145.717 -45.3565 -204.45 + 1 127.646 171 0 1 -145.75 -45.3122 -204.475 + 1 197.28 170 0 1 -145.95 -45.0582 -204.6 + 1 104.743 169 0 1 -146.15 -44.8317 -204.68 + 1 115.349 168 0 1 -146.35 -44.6082 -204.761 + 1 4.14271 167 0 1 -146.55 -44.3749 -204.845 + 1 36.0529 694 0 0 -149.165 -41.1404 -205.85 + 1 69.6035 695 0 0 -149.241 -41.05 -205.879 + 1 122.392 696 0 0 -149.402 -40.85 -205.944 + 1 93.3215 697 0 0 -149.54 -40.65 -206.001 + 1 78.955 698 0 0 -149.689 -40.4499 -206.064 + 1 69.9332 699 0 0 -149.842 -40.25 -206.123 + 1 85.9563 700 0 0 -150 -40.0498 -206.192 + 1 92.0382 681 0 0 -147.217 -43.7998 -205.85 + 1 86.4692 682 0 0 -147.406 -43.65 -206.054 + 1 88.6384 683 0 0 -147.508 -43.45 -206.229 + 1 49.4597 994 0 0 -160.221 18.872 -206.25 + 1 41.1757 995 0 0 -160.271 19.05 -206.164 + 1 64.0687 996 0 0 -160.292 19.25 -206.074 + 1 24.9653 997 0 0 -160.304 19.45 -205.917 + 1 227.916 99 0 1 -160.325 20.7209 -204.85 + 1 61.1366 684 0 0 -147.583 -43.25 -206.036 + 1 70.127 160 0 1 -148.103 -42.1671 -204.85 + 1 460.862 159 0 1 -148.15 -42.0232 -204.725 + 1 59.2746 301 2 1 -119.75 -68.4969 -144.558 + 1 173.842 1019 1 1 23.85 -151.701 -174.574 + 1 106.681 315 6 1 -117.136 -72.0984 -24.45 + 1 120.075 315 5 1 -117.023 -71.6115 -54.45 + 1 135.62 542 5 0 -116.994 -71.573 -55.85 + 1 124.404 546 4 0 -116.257 -70.7189 -85.85 + 1 14.0123 548 3 0 -114.911 -70.2505 -115.85 + 1 102.119 549 3 0 -114.909 -70.25 -115.888 + 1 111.543 331 2 1 -113.84 -70.0094 -144.45 + 1 92.2121 550 2 0 -113.734 -69.9903 -145.85 + 1 126.155 342 1 1 -111.621 -69.6023 -174.45 + 1 125.694 552 1 0 -111.506 -69.5651 -175.85 + 1 144.635 354 0 1 -109.211 -68.5663 -204.45 + 1 141.85 557 0 0 -109.246 -68.5839 -205.85 + 1 67.713 573 4 0 -146.832 -65.3218 -86.2496 + 1 208.285 574 4 0 -146.95 -65.25 -86.2227 + 1 67.4178 1107 4 1 41.45 72.0289 -84.5886 + 1 73.0239 318 4 1 -116.35 -70.6596 -84.6347 + 1 25.7547 549 4 0 -116.519 -70.0833 -85.85 + 1 28.1388 552 4 0 -116.668 -69.6499 -86.2022 + 1 213.095 789 4 0 -144.972 -22.1732 -86.25 + 1 54.5058 788 4 0 -145.333 -22.25 -85.9238 + 1 63.2802 166 4 1 -146.777 -23.4463 -84.85 + 1 70.1708 165 4 1 -146.95 -23.5127 -84.8351 + 1 116.42 164 4 1 -147.15 -23.6231 -84.8215 + 1 452.131 163 4 1 -147.35 -23.8745 -84.7605 + 1 9.65943 1392 4 0 -147.884 98.55 -86.2268 + 1 139.879 173 4 1 -145.525 119.868 -84.85 + 1 2.52321 1510 4 0 -139.769 122.23 -85.85 + 1 48.4514 246 4 1 -130.948 121.445 -84.85 + 1 57.6543 315 0 1 -117.02 -71.8273 -204.736 + 1 139.877 541 0 0 -117.021 -71.8177 -205.85 + 1 127.866 540 0 0 -117.03 -71.9914 -205.85 + 1 266.251 314 2 1 -117.307 -72.6874 -144.45 + 1 88.476 313 2 1 -117.35 -72.5079 -144.606 + 1 2.65651 542 2 0 -117.753 -71.4563 -145.85 + 1 65.1113 544 2 0 -117.85 -71.25 -146.07 + 1 22.7265 206 1 1 -138.807 -44.6978 -174.45 + 1 85.6375 207 1 1 -138.75 -44.6469 -174.48 + 1 96.5894 208 1 1 -138.55 -44.4714 -174.59 + 1 104.785 209 1 1 -138.35 -44.3147 -174.721 + 1 58.4415 210 1 1 -138.15 -44.1531 -174.793 + 1 236.622 691 1 0 -136.104 -41.756 -175.85 + 1 347.749 692 1 0 -135.979 -41.65 -175.908 + 1 81.4995 693 1 0 -135.49 -41.45 -175.887 + 1 16.0688 247 1 1 -130.612 -40.6386 -174.85 + 1 52.4517 248 1 1 -130.549 -40.6253 -174.842 + 1 383.072 249 1 1 -130.35 -40.5586 -174.84 + 1 659.735 250 1 1 -130.15 -40.4174 -174.812 + 1 51.0739 254 1 1 -129.221 -41.2436 -174.85 + 1 21.2062 251 1 1 -129.95 -40.2007 -174.712 + 1 107.991 536 2 0 -117.361 -72.7663 -145.85 + 1 144.506 287 1 1 -122.744 -68.9526 -174.45 + 1 6.21079 557 1 0 -122.76 -68.4529 -175.85 + 1 174.324 558 1 0 -122.76 -68.45 -175.859 + 1 107.461 287 0 1 -122.654 -60.333 -204.45 + 1 48.6725 288 0 1 -122.55 -60.1291 -204.708 + 1 153.221 604 0 0 -122.015 -59.2342 -205.85 + 1 50.3662 605 0 0 -121.932 -59.05 -206.117 +Number of digits in this event: 50 +Using G4ParticleGun... +Particle energy: 6.12618 LIN +Particle: gamma +Event: 2 +Number of tracker hits in this event: 68 + 2 265.978 1168 6 1 53.6791 -74.3004 -24.45 + 2 254.689 528 6 0 53.6821 -74.3064 -25.85 + 2 289.887 1168 5 1 53.73 -74.4063 -54.45 + 2 268.557 528 5 0 53.7356 -74.4124 -55.85 + 2 294.92 1168 4 1 53.8372 -74.5408 -84.45 + 2 162.007 527 4 0 53.8397 -74.5474 -85.85 + 2 331.616 1169 3 1 53.8932 -74.6554 -114.45 + 2 249.863 526 3 0 53.8998 -74.6521 -115.85 + 2 120.196 1169 2 1 54.036 -74.5813 -144.45 + 2 159.283 527 2 0 54.0524 -74.5748 -145.85 + 2 115.631 1171 1 1 54.3629 -74.457 -174.45 + 2 302.831 528 1 0 54.3734 -74.4483 -175.85 + 2 134.083 1172 0 1 54.5723 -74.2607 -204.45 + 2 445.515 529 0 0 54.5791 -74.2477 -205.85 + 2 15.8752 682 2 0 74.7584 -43.65 -146.132 + 2 18.107 681 2 0 74.7585 -43.65 -146.13 + 2 124.363 1167 2 1 53.6056 -75.1081 -144.45 + 2 114.285 524 2 0 53.5779 -75.2105 -145.85 + 2 122.698 1167 1 1 53.5875 -77.4635 -174.45 + 2 227.646 511 1 0 53.6159 -77.6547 -175.85 + 2 129.885 1171 0 1 54.3429 -81.8599 -204.45 + 2 112.003 489 0 0 54.3654 -82.1191 -205.85 + 2 26.086 510 0 0 37.1738 -78.0325 -206.25 + 2 217.719 509 0 0 37.1678 -78.05 -206.211 + 2 183.832 1087 0 1 37.4774 -78.2098 -204.85 + 2 91.7323 525 3 0 53.8168 -74.85 -115.907 + 2 99.4609 1161 2 1 52.3758 -79.0104 -144.45 + 2 27.225 1160 2 1 52.25 -78.9492 -144.759 + 2 73.2455 506 2 0 51.8077 -78.7123 -145.85 + 2 43.8758 507 2 0 51.7095 -78.65 -146.104 + 2 16.5205 1107 1 1 41.4888 -71.0754 -174.45 + 2 159.174 1106 1 1 41.45 -71.0793 -174.498 + 2 45.4046 1105 1 1 41.25 -71.0929 -174.754 + 2 197.224 544 1 0 40.3847 -71.1702 -175.851 + 2 22.2974 1000 0 1 20.097 -73.62 -204.45 + 2 113.542 999 0 1 20.05 -73.6434 -204.519 + 2 11.5305 998 0 1 19.85 -73.7279 -204.801 + 2 183.418 530 0 0 19.1253 -73.9686 -205.85 + 2 4.23906 807 0 0 -13.0005 -18.4583 -206.25 + 2 216.03 871 0 0 -20.918 -5.6839 -206.25 + 2 65.1733 543 1 0 40.1251 -71.25 -176.196 + 2 101.365 830 1 0 68.1966 -13.9526 -176.25 + 2 182.58 528 4 0 53.68 -74.2509 -85.85 + 2 129.816 1168 3 1 53.7073 -74.2471 -114.45 + 2 202.451 529 3 0 53.7096 -74.2475 -115.85 + 2 210.466 1168 2 1 53.7521 -74.2555 -144.45 + 2 110.235 528 2 0 53.7561 -74.2543 -145.85 + 2 115.398 1169 1 1 53.851 -74.2247 -174.45 + 2 127.09 529 1 0 53.8545 -74.2221 -175.85 + 2 191.498 1169 0 1 53.9264 -74.1724 -204.45 + 2 45.8496 1669 2 1 153.95 -154.326 -144.513 + 2 1.60818 129 5 1 -154.187 82.3675 -54.85 + 2 94.7013 1595 10 0 -67.348 139.158 93.75 + 2 10.0237 559 10 1 -68.2339 139.859 95.1502 + 2 106.397 558 10 1 -68.25 139.867 95.1765 + 2 96.9107 557 10 1 -68.45 139.981 95.431 + 2 39.0976 556 10 1 -68.65 140.162 95.2733 + 2 102.067 1603 10 0 -68.6852 140.85 94.15 + 2 104.687 1604 10 0 -68.6709 140.95 93.9901 + 2 33.8361 1167 5 1 53.65 -74.3263 -54.4728 + 2 78.6528 1169 5 1 53.85 -74.2699 -54.4959 + 2 70.9351 1170 5 1 54.0501 -74.3149 -54.46 + 2 65.4031 1171 5 1 54.25 -74.3883 -54.6036 + 2 86.6145 1172 5 1 54.45 -74.3892 -54.6435 + 2 29.8889 1173 5 1 54.65 -74.2915 -54.8021 + 2 206.999 522 5 0 56.5378 -75.5341 -55.85 + 2 176.652 523 5 0 56.8018 -75.45 -55.9588 + 2 260.844 547 6 0 52.2474 -70.6349 -26.25 +Number of digits in this event: 35 +Using G4ParticleGun... +Particle energy: 5.9622 LIN Particle: gamma Event: 3 -Number of tracker hits in this event: 1 - 3 50.7426 1365 13 1 93.1559 58.7348 185.15 +Number of tracker hits in this event: 0 Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 6.72545 LIN +Particle energy: 5.50517 LIN Particle: gamma Event: 4 -Number of tracker hits in this event: 32 - 4 352.468 326 7 1 -114.88 80.6066 5.55 - 4 280.846 1302 7 0 -114.88 80.6073 4.15 - 4 214.585 326 6 1 -114.896 80.6243 -24.45 - 4 236.874 1302 6 0 -114.898 80.6256 -25.85 - 4 152.178 326 5 1 -114.929 80.6568 -54.45 - 4 114.576 1303 5 0 -114.929 80.6572 -55.85 - 4 138.445 326 4 1 -114.909 80.6707 -84.45 - 4 149.953 1303 4 0 -114.907 80.6749 -85.85 - 4 111.359 326 3 1 -114.854 80.7675 -114.45 - 4 121.878 1303 3 0 -114.851 80.773 -115.85 - 4 120.463 326 2 1 -114.785 80.8811 -144.45 - 4 104.351 1304 2 0 -114.784 80.885 -145.85 - 4 162.653 326 1 1 -114.754 80.9633 -174.45 - 4 112.269 1304 1 0 -114.753 80.9707 -175.85 - 4 120.607 327 0 1 -114.729 81.1275 -204.45 - 4 113.344 1305 0 0 -114.727 81.1358 -205.85 - 4 11.8667 325 5 1 -114.95 80.7294 -54.7974 - 4 189.98 1304 5 0 -115.454 80.9319 -55.8501 - 4 337.782 316 5 1 -116.766 81.8924 -54.85 - 4 32.0965 315 5 1 -116.95 82.0417 -54.711 - 4 172.282 327 5 1 -114.723 80.6283 -54.45 - 4 129.507 1302 5 0 -114.715 80.6278 -55.85 - 4 122.152 327 4 1 -114.554 80.6198 -84.45 - 4 221.949 1302 4 0 -114.549 80.6174 -85.85 - 4 167.763 328 3 1 -114.437 80.5669 -114.45 - 4 124.469 1302 3 0 -114.432 80.566 -115.85 - 4 181.662 329 2 1 -114.345 80.556 -144.45 - 4 102.136 1302 2 0 -114.345 80.5604 -145.85 - 4 118.446 329 1 1 -114.33 80.6735 -174.45 - 4 107.925 1303 1 0 -114.328 80.6838 -175.85 - 4 152.918 329 0 1 -114.203 80.7679 -204.45 - 4 119.765 1303 0 0 -114.26 80.7556 -205.85 -Number of digits in this event: 25 +Number of tracker hits in this event: 55 + 4 225.783 1125 10 1 45.124 -63.517 95.55 + 4 227.326 582 10 0 45.1249 -63.5168 94.15 + 4 382.119 1125 9 1 45.1435 -63.509 65.55 + 4 257.609 582 9 0 45.1418 -63.51 64.15 + 4 218.323 1125 8 1 45.0778 -63.5251 35.55 + 4 299.35 582 8 0 45.0733 -63.5224 34.15 + 4 112.349 1124 7 1 44.9732 -63.4887 5.55 + 4 225.249 582 7 0 44.9683 -63.4892 4.15 + 4 121.441 1124 6 1 44.8878 -63.4795 -24.45 + 4 151.974 582 6 0 44.8849 -63.4723 -25.85 + 4 134.612 1123 5 1 44.8316 -63.3434 -54.45 + 4 296.325 583 5 0 44.8278 -63.3333 -55.85 + 4 106.369 1123 4 1 44.7242 -63.1278 -84.45 + 4 122.027 584 4 0 44.7186 -63.1152 -85.85 + 4 104.751 1122 3 1 44.6096 -62.8338 -114.45 + 4 114.983 586 3 0 44.605 -62.8215 -115.85 + 4 258.411 1122 2 1 44.5106 -62.5789 -144.45 + 4 119.754 587 2 0 44.5072 -62.5679 -145.85 + 4 455.822 1121 1 1 44.4224 -62.36 -174.45 + 4 115.346 588 1 0 44.4233 -62.3518 -175.85 + 4 115.316 1121 0 1 44.4403 -62.1813 -204.45 + 4 257.151 589 0 0 44.4441 -62.1786 -205.85 + 4 159.393 948 6 0 111.132 9.71923 -26.25 + 4 218.671 557 0 0 72.834 -68.6174 -206.25 + 4 30.5071 556 0 0 72.8607 -68.6501 -206.206 + 4 16.8257 743 3 0 161.106 -31.4074 -116.25 + 4 26.1094 461 3 0 80.0238 -87.7774 -116.25 + 4 51.4944 101 3 0 13.4963 -159.75 -116.25 + 4 462.036 584 1 0 44.2682 -63.0935 -175.85 + 4 7.0073 1117 0 1 43.4519 -62.1494 -204.45 + 4 94.5841 1116 0 1 43.45 -62.1484 -204.478 + 4 30.7839 1723 8 0 -61.3641 164.775 33.75 + 4 134.562 1123 0 1 44.6753 -62.9752 -204.45 + 4 280.452 585 0 0 44.6824 -63.0252 -205.85 + 4 21.1035 583 1 0 44.3693 -63.25 -176.114 + 4 124.16 1125 7 1 45.0814 -63.4421 5.55 + 4 242.918 583 7 0 45.0815 -63.4401 4.15 + 4 464.927 1125 6 1 45.0972 -63.4018 -24.45 + 4 95.5378 583 6 0 45.0969 -63.4007 -25.85 + 4 126.252 1125 5 1 45.0892 -63.3983 -54.45 + 4 119.306 1124 4 1 45.0022 -63.413 -84.45 + 4 110.894 583 4 0 44.9966 -63.4142 -85.85 + 4 119.674 1124 3 1 44.8833 -63.4536 -114.45 + 4 135.231 583 3 0 44.8684 -63.4424 -115.85 + 4 107.123 584 2 0 44.5409 -63.2066 -145.85 + 4 144.883 585 1 0 44.2818 -62.9809 -175.85 + 4 122.067 1119 0 1 44.0342 -62.9922 -204.45 + 4 89.5541 1702 1 1 160.55 119.098 -174.587 + 4 74.3418 1126 9 1 45.25 -63.3987 65.3769 + 4 44.4112 1127 9 1 45.45 -63.2761 65.2356 + 4 34.3007 586 9 0 48.1679 -62.7388 64.15 + 4 159.785 587 9 0 48.3146 -62.6498 64.1056 + 4 213.807 588 9 0 48.6496 -62.45 64.1364 + 4 82.3095 589 9 0 49.1256 -62.25 64.0289 + 4 13.564 590 9 0 49.1026 -62.05 63.7885 +Number of digits in this event: 31 Using G4ParticleGun... -Particle energy: 1.30866 LIN +Particle energy: 4.13085 LIN Particle: gamma Event: 5 -Number of tracker hits in this event: 49 - 5 226.433 464 9 1 -87.1713 9.70512 65.55 - 5 249.639 948 9 0 -87.1677 9.70249 64.15 - 5 285.184 464 8 1 -87.0989 9.63548 35.55 - 5 226.344 947 8 0 -87.1012 9.63705 34.15 - 5 104.204 464 7 1 -87.1583 9.62807 5.55 - 5 139.799 947 7 0 -87.1664 9.62016 4.15 - 5 134.415 463 6 1 -87.3216 9.47928 -24.45 - 5 130.038 947 6 0 -87.3353 9.47587 -25.85 - 5 122.238 461 5 1 -87.6656 9.38893 -54.45 - 5 107.689 946 5 0 -87.6827 9.38059 -55.85 - 5 122.755 460 4 1 -88.0242 9.21614 -84.45 - 5 173.743 945 4 0 -88.0343 9.22553 -85.85 - 5 122.182 459 3 1 -88.2155 9.42028 -114.45 - 5 119.833 946 3 0 -88.2255 9.41354 -115.85 - 5 6.13046 458 2 1 -88.4393 9.27621 -144.45 - 5 130.838 457 2 1 -88.45 9.27596 -144.47 - 5 138.946 946 2 0 -89.1405 9.3256 -145.85 - 5 170.671 378 1 1 -104.356 11.132 -174.451 - 5 117.652 957 1 0 -104.782 11.4767 -175.85 - 5 167.166 338 0 1 -112.363 20.667 -204.45 - 5 96.4289 1003 0 0 -112.707 20.8102 -205.85 - 5 96.2585 707 10 0 18.3833 -38.5459 93.75 - 5 111.29 463 7 1 -87.3185 9.30257 5.55 - 5 122.458 946 7 0 -87.3439 9.28496 4.15 - 5 113.646 460 6 1 -87.8805 8.89994 -24.45 - 5 216.398 944 6 0 -87.9053 8.87419 -25.85 - 5 114.254 458 5 1 -88.4343 8.18843 -54.45 - 5 180.032 940 5 0 -88.4508 8.16937 -55.85 - 5 233.934 455 4 1 -88.8774 7.76748 -84.45 - 5 147.1 938 4 0 -88.9045 7.73953 -85.85 - 5 134.976 452 3 1 -89.4661 6.85713 -114.45 - 5 107.386 933 3 0 -89.5124 6.79748 -115.85 - 5 185.347 448 2 1 -90.4247 5.67144 -144.45 - 5 118.712 927 2 0 -90.46 5.60364 -145.85 - 5 121.497 444 1 1 -91.2307 4.36126 -174.45 - 5 145.718 921 1 0 -91.2998 4.28058 -175.85 - 5 112.495 437 0 1 -92.6694 2.61611 -204.45 - 5 105.647 912 0 0 -92.7428 2.52464 -205.85 - 5 18.8696 456 4 1 -88.85 7.65571 -84.8023 - 5 325.291 932 4 0 -88.3071 6.62626 -85.85 - 5 172.429 931 4 0 -88.099 6.44977 -85.9464 - 5 270.427 441 0 1 -91.7615 5.06948 -204.45 - 5 152.748 924 0 0 -91.754 4.97665 -205.85 - 5 124.354 925 0 0 -91.8583 5.11602 -205.85 - 5 169.385 905 0 0 -96.3698 1.06472 -206.25 - 5 32.5968 906 0 0 -96.2275 1.25056 -205.877 - 5 56.6135 422 0 1 -95.6483 3.1713 -204.85 - 5 19.1875 423 0 1 -95.55 3.24183 -204.812 - 5 148.351 915 0 0 -95.5254 3.14447 -205.85 -Number of digits in this event: 32 +Number of tracker hits in this event: 42 + 5 395.169 644 8 1 -51.0976 -98.8391 35.55 + 5 234.327 406 8 0 -51.102 -98.8169 34.15 + 5 295.198 644 7 1 -51.2152 -98.3527 5.55 + 5 176.334 408 7 0 -51.2306 -98.3607 4.15 + 5 100.466 642 6 1 -51.6473 -98.4306 -24.45 + 5 173.255 408 6 0 -51.6487 -98.4074 -25.85 + 5 184.232 641 5 1 -51.7102 -98.0705 -54.45 + 5 191.476 410 5 0 -51.6517 -98.0544 -55.85 + 5 187.936 648 4 1 -50.4092 -97.8476 -84.45 + 5 97.2119 411 4 0 -50.3695 -97.8529 -85.85 + 5 291.349 651 3 1 -49.7297 -98.05 -114.45 + 5 108.979 410 3 0 -49.9291 -98.0114 -115.85 + 5 138.604 629 2 1 -54.0871 -96.4 -144.45 + 5 132.476 419 2 0 -54.086 -96.2884 -145.85 + 5 140.475 631 1 1 -53.7376 -94.0012 -174.45 + 5 111.767 431 1 0 -53.7237 -93.8523 -175.85 + 5 292.889 642 0 1 -51.5731 -90.7981 -204.45 + 5 112.705 446 0 0 -51.7316 -90.8401 -205.85 + 5 118.81 406 7 0 -51.0948 -98.8812 4.15 + 5 129.028 644 6 1 -51.0638 -98.9006 -24.45 + 5 131.39 406 6 0 -51.0612 -98.9034 -25.85 + 5 131.932 645 5 1 -51.0022 -98.9514 -54.45 + 5 104.893 405 5 0 -51.0001 -98.9531 -55.85 + 5 90.4235 645 4 1 -50.9584 -98.9869 -84.45 + 5 202.426 405 4 0 -50.9576 -98.9897 -85.85 + 5 110.937 645 3 1 -50.9423 -99.046 -114.45 + 5 134.26 405 3 0 -50.9446 -99.0543 -115.85 + 5 132.804 645 2 1 -50.9982 -99.2275 -144.45 + 5 105.198 404 2 0 -51.0022 -99.2364 -145.85 + 5 338.753 644 1 1 -51.0845 -99.4247 -174.45 + 5 340.609 403 1 0 -51.0884 -99.4355 -175.85 + 5 118.572 644 0 1 -51.1692 -99.6505 -204.45 + 5 112.289 402 0 0 -51.1745 -99.6623 -205.85 + 5 107.689 1591 4 1 138.35 -95.7716 -84.6321 + 5 108.373 398 0 0 -51.4549 -100.439 -205.85 + 5 231.09 641 0 1 -51.8251 -100.754 -204.45 + 5 103.594 397 0 0 -51.8976 -100.677 -205.85 + 5 3.64025 640 0 1 -51.85 -100.787 -204.647 + 5 285.476 396 0 0 -51.8643 -100.926 -205.85 + 5 131.167 594 0 1 -61.05 -94.5507 -204.523 + 5 6.08253 808 1 1 -18.3305 -65.9957 -174.45 + 5 53.4005 570 1 0 -18.5869 -65.8787 -175.85 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 2.25677 LIN +Particle energy: 6.66863 LIN Particle: gamma Event: 6 -Number of tracker hits in this event: 1 - 6 113.037 1523 12 0 53.7015 124.75 153.973 -Number of digits in this event: 2 +Number of tracker hits in this event: 3 + 6 232.728 1323 1 1 84.6935 -168.467 -174.45 + 6 257.957 1112 1 1 42.4703 11.3251 -174.85 + 6 24.9119 1055 4 1 31.1364 -55.2382 -84.85 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 2.0944 LIN +Particle energy: 2.16095 LIN Particle: gamma Event: 7 -Number of tracker hits in this event: 67 - 7 240.582 599 6 1 -60.0749 -32.7512 -24.45 - 7 434.71 736 6 0 -60.0714 -32.7522 -25.85 - 7 127.538 600 5 1 -60.0171 -32.7969 -54.45 - 7 241.043 736 5 0 -60.0088 -32.791 -55.85 - 7 322.694 601 4 1 -59.8179 -32.7001 -84.45 - 7 155.006 736 4 0 -59.8102 -32.6968 -85.85 - 7 140.977 601 3 1 -59.6533 -32.6816 -114.45 - 7 153.536 736 3 0 -59.6523 -32.6831 -115.85 - 7 113.196 602 2 1 -59.5752 -32.7624 -144.45 - 7 506.383 736 2 0 -59.5541 -32.8136 -145.85 - 7 148.087 604 1 1 -59.1296 -33.9063 -174.45 - 7 108.727 730 1 0 -59.1116 -33.9572 -175.85 - 7 119.203 606 0 1 -58.6809 -35.0087 -204.45 - 7 394.972 724 0 0 -58.648 -35.0635 -205.85 - 7 53.5492 758 7 0 10.8449 -28.4019 3.75 - 7 143.775 757 7 0 10.7034 -28.4505 3.80674 - 7 142.139 756 7 0 10.7274 -28.6502 3.88129 - 7 340.493 734 2 0 -82.3077 -33.0605 -146.25 - 7 57.9912 735 2 0 -82.2909 -33.05 -145.875 - 7 0.848787 294 4 0 -88.0712 -121.15 -86.0051 - 7 115.437 739 4 0 -59.2617 -32.2185 -85.85 - 7 59.4678 801 4 0 -73.923 -19.7131 -86.25 - 7 95.4786 802 4 0 -74.1128 -19.65 -86.1744 - 7 93.9407 563 0 0 -55.7924 -67.25 -206.16 - 7 244.924 562 0 0 -55.8093 -67.45 -206.086 - 7 18.4931 898 6 0 -21.3548 -0.287449 -26.25 - 7 73.3289 899 6 0 -21.3394 -0.25 -26.1831 - 7 116.702 900 6 0 -21.3985 0.05 -25.9901 - 7 38.296 901 6 0 -21.5016 0.250081 -25.8913 - 7 142.754 790 6 1 -21.9041 2.324 -24.85 - 7 57.2381 791 6 1 -21.8499 2.6713 -24.7586 - 7 20.5302 918 6 0 -21.584 3.78768 -25.85 - 7 64.8508 919 6 0 -21.5737 3.85004 -25.8991 - 7 140.059 920 6 0 -21.5258 4.05 -25.9738 - 7 82.1826 921 6 0 -21.5387 4.25 -26.1508 - 7 119.613 809 1 1 -18.0528 11.3713 -174.45 - 7 115.868 957 1 0 -18.3039 11.5772 -175.85 - 7 77.2462 600 4 1 -59.9906 -32.4693 -84.45 - 7 167.598 599 4 1 -60.05 -32.4931 -84.7183 - 7 262.478 737 4 0 -60.3777 -32.619 -85.85 - 7 164.93 554 3 1 -69.2327 -39.0676 -114.45 - 7 119.946 705 3 0 -69.1269 -38.9281 -115.85 - 7 371.02 680 3 0 -51.8395 -44.0005 -116.25 - 7 111.249 679 3 0 -51.107 -44.05 -115.928 - 7 1.69462 678 3 0 -50.7673 -44.25 -115.851 - 7 80.0214 657 3 1 -48.5067 -45.6183 -114.85 - 7 402.649 658 3 1 -48.4499 -45.6507 -114.826 - 7 110.185 659 3 1 -48.25 -46.4452 -114.77 - 7 60.9443 665 3 0 -47.5346 -46.9393 -115.85 - 7 245.645 663 3 1 -47.345 -48.7007 -114.85 - 7 26.1297 681 3 0 -51.6338 -43.85 -115.929 - 7 174.879 640 3 1 -51.8698 -43.3128 -114.85 - 7 207.66 639 3 1 -52.0501 -43.2684 -114.601 - 7 104.161 599 5 1 -60.091 -32.6565 -54.45 - 7 132.81 599 3 1 -60.2315 -32.6094 -114.45 - 7 163.271 737 3 0 -60.2333 -32.6141 -115.85 - 7 111.042 598 2 1 -60.2634 -32.718 -144.45 - 7 128.143 598 1 1 -60.3104 -32.777 -174.45 - 7 198.854 736 1 0 -60.312 -32.7807 -175.85 - 7 161.969 598 0 1 -60.3494 -32.8322 -204.45 - 7 145.785 736 0 0 -60.3545 -32.8371 -205.85 - 7 11.9443 899 1 0 -56.2869 -0.25 -176.212 - 7 158.445 493 2 1 -81.3579 -55.3153 -144.85 - 7 158.457 492 2 1 -81.45 -55.2831 -144.471 - 7 132.156 742 3 0 -59.2564 -31.5398 -115.85 - 7 202.034 717 4 0 -60.1046 -36.614 -86.25 - 7 100.623 716 4 0 -60.082 -36.65 -86.1984 -Number of digits in this event: 37 +Number of tracker hits in this event: 128 + 7 329.879 745 10 1 -31.0397 56.5239 95.55 + 7 235.68 1182 10 0 -31.0364 56.5226 94.15 + 7 230.84 745 9 1 -30.9474 56.4677 65.55 + 7 231.464 1182 9 0 -30.9446 56.4657 64.15 + 7 280.656 745 8 1 -30.8797 56.4514 35.55 + 7 223.892 1182 8 0 -30.8892 56.4549 34.15 + 7 252.006 744 7 1 -31.1037 56.5357 5.55 + 7 472.08 1182 7 0 -31.1137 56.5359 4.15 + 7 120.607 743 6 1 -31.3194 56.5682 -24.45 + 7 262.026 1182 6 0 -31.3341 56.5723 -25.85 + 7 175.445 742 5 1 -31.6153 56.6754 -54.45 + 7 129.63 1183 5 0 -31.6348 56.6741 -55.85 + 7 127.86 740 4 1 -32.0387 56.644 -84.45 + 7 274.658 1182 4 0 -32.0595 56.6379 -85.85 + 7 113.853 737 3 1 -32.4901 56.5203 -114.45 + 7 119.952 1182 3 0 -32.517 56.5305 -115.85 + 7 112.405 734 2 1 -33.0658 56.7288 -144.45 + 7 332.487 1183 2 0 -33.0955 56.7302 -145.85 + 7 229.329 731 1 1 -33.6902 56.7394 -174.45 + 7 309.937 1183 1 0 -33.7162 56.7343 -175.85 + 7 120.99 729 0 1 -34.2159 56.6373 -204.45 + 7 107.282 1182 0 0 -34.235 56.6119 -205.85 + 7 34.6595 195 0 1 -140.95 -77.818 -204.702 + 7 23.4272 133 1 1 -153.35 63.5017 -174.567 + 7 271.676 735 2 1 -32.9466 56.7109 -144.45 + 7 481.183 1182 1 0 -33.7026 56.5537 -175.85 + 7 131.117 726 0 1 -34.7741 57.5316 -204.45 + 7 272.935 1187 0 0 -34.8087 57.555 -205.85 + 7 124.955 1182 2 0 -32.9731 56.65 -145.951 + 7 103.798 1184 2 0 -33.0823 56.8578 -145.85 + 7 114.555 765 1 1 -26.9032 60.9459 -174.45 + 7 80.7621 1207 1 0 -26.9208 61.5718 -175.85 + 7 58.653 1208 1 0 -26.9149 61.65 -176.019 + 7 110.144 758 0 1 -28.2552 66.4322 -204.45 + 7 53.126 757 0 1 -28.45 66.4052 -204.729 + 7 54.691 1228 0 0 -29.4603 65.7528 -205.85 + 7 288.413 1227 0 0 -29.6067 65.6497 -205.955 + 7 195.777 733 1 1 -33.3683 56.8569 -174.45 + 7 100.961 734 1 1 -33.25 56.7986 -174.769 + 7 44.5681 810 0 1 -17.9044 53.9019 -204.45 + 7 143.093 811 0 1 -17.8497 53.9132 -204.563 + 7 173.446 1170 0 0 -17.1121 54.087 -205.85 + 7 5.57237 1190 1 0 -32.4197 58.2343 -175.85 + 7 103.1 1191 1 0 -32.4084 58.2506 -175.867 + 7 127.511 1192 1 0 -32.2981 58.4501 -176.03 + 7 16.5835 1193 1 0 -32.1871 58.6504 -176.2 + 7 57.8427 800 0 1 -19.9785 96.7017 -204.45 + 7 58.618 801 0 1 -19.85 96.7127 -204.641 + 7 155.077 1381 0 0 -18.8459 96.4199 -205.85 + 7 29.6563 1385 0 0 -19.1586 97.1892 -205.85 + 7 393.633 1183 4 0 -32.0641 56.65 -86.0544 + 7 317.949 745 7 1 -31.0499 56.5366 5.41961 + 7 358.339 746 7 1 -30.85 56.5997 5.36752 + 7 83.595 1181 7 0 -30.6299 56.3999 4.15 + 7 135.599 744 9 1 -31.0783 56.5476 65.55 + 7 122.428 747 6 1 -30.5913 56.5007 -24.45 + 7 274.989 748 5 1 -30.4128 56.5844 -54.45 + 7 108.456 1182 5 0 -30.4052 56.588 -55.85 + 7 130.447 748 4 1 -30.2571 56.6345 -84.45 + 7 98.3563 750 3 1 -30.0011 56.4495 -114.45 + 7 112.821 1181 3 0 -29.9924 56.4438 -115.85 + 7 167.386 751 2 1 -29.8329 56.3071 -144.45 + 7 136.508 1181 2 0 -29.8289 56.3033 -145.85 + 7 228.776 751 1 1 -29.7753 56.2278 -174.45 + 7 105.493 1181 1 0 -29.8145 56.2713 -175.85 + 7 108.546 744 0 1 -31.1705 57.46 -204.45 + 7 56.7602 1431 0 0 -33.9063 106.35 -205.954 + 7 22.0253 1171 1 0 -28.5953 54.2923 -175.85 + 7 204.022 1181 6 0 -30.6225 56.45 -26.0585 + 7 120.863 748 6 1 -30.3522 55.8707 -24.45 + 7 183.907 1179 6 0 -30.4109 55.9996 -25.85 + 7 92.7386 741 5 1 -31.65 59.1112 -54.5802 + 7 123.309 1195 5 0 -31.8605 59.2145 -55.8502 + 7 118.041 716 4 1 -36.7411 61.7663 -84.45 + 7 199.866 1209 4 0 -37.0212 61.9712 -85.85 + 7 395.155 678 3 1 -44.3518 65.8912 -114.45 + 7 133.039 1229 3 0 -44.3412 65.929 -115.85 + 7 109.882 682 2 1 -43.5913 67.6379 -144.45 + 7 116.436 1235 2 0 -43.6114 67.2214 -145.85 + 7 125.839 706 1 1 -38.7523 57.912 -174.45 + 7 113.728 1188 1 0 -38.5489 57.8111 -175.85 + 7 116.031 733 0 1 -33.2955 56.0374 -204.45 + 7 50.1808 732 0 1 -33.45 55.9775 -204.724 + 7 29.4732 1178 0 0 -34.0425 55.6724 -205.85 + 7 86.6339 1177 0 0 -34.0894 55.65 -205.937 + 7 119.423 1110 0 0 -34.9028 42.0795 -206.25 + 7 134.985 727 0 1 -34.6244 42.1013 -204.85 + 7 109.584 1118 1 0 -37.6237 43.6945 -176.25 + 7 52.8028 712 1 1 -37.6256 43.8095 -174.85 + 7 88.3292 711 1 1 -37.65 43.788 -174.671 + 7 51.252 1208 2 0 -50.8536 61.7143 -146.25 + 7 100.446 1209 2 0 -50.9004 61.85 -146.136 + 7 82.6052 1210 2 0 -50.9083 62.0511 -146.092 + 7 62.2821 1211 2 0 -50.8741 62.25 -146.023 + 7 111.407 647 2 1 -50.5332 63.1234 -144.85 + 7 20.7316 840 5 1 -12.0294 -16.2142 -54.45 + 7 198.955 839 5 1 -12.05 -16.2071 -54.4852 + 7 188.089 679 2 1 -44.05 67.6585 -144.809 + 7 111.98 734 6 1 -33.1071 55.3426 -24.45 + 7 1.68808 733 6 1 -33.25 55.4 -24.8354 + 7 87.4641 1177 6 0 -33.5746 55.5831 -25.8504 + 7 35.1923 1178 6 0 -33.6596 55.65 -26.1191 + 7 67.9819 689 5 1 -42.1292 62.7167 -54.4501 + 7 78.3588 688 5 1 -42.2503 62.6463 -54.6268 + 7 1.17641 687 5 1 -42.4503 62.5613 -54.8466 + 7 28.9098 1211 5 0 -43.4633 62.2702 -55.85 + 7 129.407 1210 5 0 -43.5279 62.25 -55.9163 + 7 24.6143 552 4 1 -69.4932 54.2913 -84.45 + 7 100.849 553 4 1 -69.4499 54.287 -84.5435 + 7 110.518 1171 4 0 -68.8298 54.2731 -85.85 + 7 116.452 563 3 1 -67.4083 71.5152 -114.451 + 7 130.847 1253 3 0 -67.2918 70.8228 -115.85 + 7 3.15778 1252 3 0 -67.2549 70.65 -116.236 + 7 212.14 1284 3 0 -57.1112 76.8825 -116.25 + 7 266.771 617 3 1 -56.554 77.1971 -114.85 + 7 121.335 616 3 1 -56.65 77.2145 -114.788 + 7 51.067 255 2 1 -128.95 40.2955 -144.733 + 7 225.796 1098 2 0 -130.932 39.7849 -145.85 + 7 59.2153 63 1 1 -167.53 33.9933 -174.45 + 7 116.575 62 1 1 -167.55 34.0449 -174.506 + 7 39.6539 1076 1 0 -167.795 35.3557 -175.85 + 7 53.2662 1077 1 0 -167.852 35.45 -175.888 + 7 122.851 56 1 1 -168.93 36.1939 -174.85 + 7 37.8899 55 1 1 -168.95 36.2028 -174.789 + 7 57.6638 57 1 1 -168.75 36.13 -174.822 + 7 18.815 1081 1 0 -168.635 36.2671 -175.85 + 7 37.2008 1080 1 0 -168.637 36.25 -175.875 + 7 109.399 51 1 1 -169.852 36.961 -174.85 +Number of digits in this event: 60 Using G4ParticleGun... -Particle energy: 5.74954 LIN +Particle energy: 6.60262 LIN Particle: gamma Event: 8 +Number of tracker hits in this event: 8 + 8 269.813 1003 2 1 20.761 -35.9398 -144.45 + 8 280.446 720 2 0 20.7609 -35.9401 -145.85 + 8 280.502 1003 1 1 20.7615 -35.9391 -174.45 + 8 215.04 720 1 0 20.7625 -35.9409 -175.85 + 8 242.201 1003 0 1 20.7744 -35.9773 -204.45 + 8 262.081 720 0 0 20.7762 -35.9787 -205.85 + 8 40.2613 922 0 0 38.267 4.45 -206.039 + 8 243.176 967 10 1 13.601 -25.3227 95.15 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 4.28145 LIN +Particle: gamma +Event: 9 +Number of tracker hits in this event: 6 + 9 409.437 1304 0 1 80.8676 -52.1175 -204.45 + 9 255.959 639 0 0 80.8649 -52.1178 -205.85 + 9 197.746 782 5 0 89.9719 -23.6286 -56.25 + 9 193.024 597 2 0 155.406 -60.5354 -146.25 + 9 112.672 1303 0 1 80.85 -51.8525 -204.498 + 9 190.286 1302 0 1 80.65 -51.9309 -204.566 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 2.17893 LIN +Particle: gamma +Event: 10 +Number of tracker hits in this event: 12 + 10 231.382 1459 3 1 112.019 -99.7535 -114.45 + 10 278.56 401 3 0 112.019 -99.7554 -115.85 + 10 272.524 1459 2 1 112.009 -99.7812 -144.45 + 10 237.634 401 2 0 112.008 -99.7781 -145.85 + 10 252.59 1459 1 1 111.983 -99.7335 -174.45 + 10 113.451 402 1 0 111.987 -99.7276 -175.85 + 10 115.66 1459 0 1 112.024 -99.605 -204.45 + 10 129.986 402 0 0 112.024 -99.5988 -205.85 + 10 163.619 400 1 0 112.046 -99.9878 -175.85 + 10 463.886 1458 0 1 111.914 -100.222 -204.45 + 10 187.847 399 0 0 111.92 -100.225 -205.85 + 10 233.926 400 0 0 111.435 -100.03 -205.85 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 6.51842 LIN +Particle: gamma +Event: 11 +Number of tracker hits in this event: 13 + 11 262.416 856 2 1 -8.70468 -70.422 -144.45 + 11 276.313 548 2 0 -8.70437 -70.4227 -145.85 + 11 248.064 856 1 1 -8.70063 -70.4598 -174.45 + 11 126.571 547 1 0 -8.70074 -70.4651 -175.85 + 11 122.213 856 0 1 -8.7005 -70.5586 -204.45 + 11 240.522 547 0 0 -8.704 -70.5644 -205.85 + 11 49.4594 549 2 0 116.593 -70.0997 -146.25 + 11 101.859 1491 2 1 118.402 -70.7571 -144.85 + 11 212.663 1492 2 1 118.55 -70.9071 -144.704 + 11 186.88 548 1 0 -8.69768 -70.4403 -175.85 + 11 170.199 857 0 1 -8.63822 -70.4659 -204.45 + 11 43.4246 548 0 0 -8.65229 -70.4304 -205.85 + 11 265.8 550 0 0 -8.25617 -70.05 -206.038 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 4.43581 LIN +Particle: gamma +Event: 12 +Number of tracker hits in this event: 139 + 12 248.528 709 9 1 -38.1975 21.9306 65.55 + 12 226.364 1009 9 0 -38.1995 21.9318 64.15 + 12 295.348 709 8 1 -38.2387 21.9608 35.55 + 12 256.482 1009 8 0 -38.2391 21.9628 34.15 + 12 237.364 709 7 1 -38.2339 22.0046 5.55 + 12 242.176 1009 7 0 -38.2351 22.0075 4.15 + 12 111.758 709 6 1 -38.2469 22.0784 -24.45 + 12 129.054 1010 6 0 -38.2437 22.0827 -25.85 + 12 159.929 709 5 1 -38.1803 22.1747 -54.45 + 12 102.152 1010 5 0 -38.1834 22.1811 -55.85 + 12 401.486 709 4 1 -38.2403 22.3048 -84.45 + 12 212.04 1011 4 0 -38.2482 22.3119 -85.85 + 12 112.189 708 3 1 -38.3966 22.4653 -114.45 + 12 137.101 1012 3 0 -38.4052 22.4723 -115.85 + 12 103.413 707 2 1 -38.5843 22.6059 -144.45 + 12 149.301 1012 2 0 -38.5935 22.6142 -145.85 + 12 189.935 706 1 1 -38.7823 22.7908 -174.45 + 12 130.185 1013 1 0 -38.7902 22.8051 -175.85 + 12 187.718 705 0 1 -38.948 23.1115 -204.45 + 12 166.349 1015 0 0 -38.9542 23.1211 -205.85 + 12 94.8322 1012 1 0 -39.3546 22.6376 -175.85 + 12 167.329 845 1 1 -11.0106 57.1765 -174.85 + 12 197.437 1010 4 0 -38.1345 22.1786 -85.85 + 12 366.549 710 3 1 -37.9171 21.5198 -114.45 + 12 138.754 1007 3 0 -37.9005 21.4769 -115.85 + 12 132.858 712 2 1 -37.5209 20.6669 -144.45 + 12 182.401 1002 2 0 -37.5422 20.6381 -145.85 + 12 383.425 710 1 1 -37.935 19.7781 -174.45 + 12 113.361 998 1 0 -37.9637 19.7052 -175.85 + 12 317.748 706 0 1 -38.661 17.952 -204.45 + 12 103.81 989 0 0 -38.711 17.9353 -205.85 + 12 153.012 992 0 0 -38.796 18.4949 -205.85 + 12 107.38 1045 0 0 -31.7894 29.0781 -206.25 + 12 43.0428 1046 0 0 -31.733 29.2501 -205.962 + 12 67.8688 749 0 1 -30.2024 29.5053 -204.85 + 12 68.2956 750 0 1 -30.05 29.6029 -204.718 + 12 57.1087 751 0 1 -29.85 29.6078 -204.554 + 12 50.3891 752 0 1 -29.65 29.6454 -204.501 + 12 338.111 753 0 1 -29.45 29.6981 -204.505 + 12 254.774 754 0 1 -29.2499 29.6772 -204.455 + 12 129.599 711 1 1 -37.85 19.7175 -174.793 + 12 115.446 705 3 1 -38.992 25.2286 -114.45 + 12 142.679 1025 3 0 -39.1842 25.2033 -115.85 + 12 54.3089 684 2 1 -43.1086 25.0724 -144.45 + 12 113.081 685 2 1 -43.0498 25.1174 -144.613 + 12 170.935 1027 2 0 -42.4177 25.5204 -145.85 + 12 16.666 1028 2 0 -42.2476 25.65 -146.178 + 12 32.708 760 1 1 -27.8697 37.774 -174.45 + 12 132.551 761 1 1 -27.85 37.8413 -174.581 + 12 140.652 1092 1 0 -27.605 38.4795 -175.85 + 12 5.44625 1093 1 0 -27.5313 38.6505 -176.23 + 12 200.12 790 0 1 -21.9542 49.0659 -204.45 + 12 113.463 1148 0 0 -21.8842 49.6549 -205.85 + 12 147.706 707 0 1 -38.5258 22.1803 -204.45 + 12 132.005 704 0 1 -39.0501 22.3673 -204.638 + 12 114.438 703 0 1 -39.25 22.4244 -204.653 + 12 44.172 702 0 1 -39.45 22.4886 -204.666 + 12 46.1665 701 0 1 -39.6505 22.4787 -204.687 + 12 60.8472 700 0 1 -39.85 22.5061 -204.693 + 12 60.3981 699 0 1 -40.05 22.5077 -204.704 + 12 79.3102 698 0 1 -40.25 22.5046 -204.772 + 12 15.5362 697 0 1 -40.4502 22.5509 -204.824 + 12 290.537 1016 0 0 -43.0261 23.25 -205.903 + 12 75.7567 661 0 1 -47.7219 22.2723 -204.85 + 12 103.606 660 0 1 -47.85 22.2293 -204.823 + 12 49.06 659 0 1 -48.05 22.0724 -204.62 + 12 212.698 1388 4 1 97.75 67.1756 -84.8477 + 12 44.992 1389 4 1 97.9501 67.222 -84.7113 + 12 134.871 1010 0 0 -38.9758 22.1723 -205.85 + 12 138.589 710 6 1 -38.0089 21.9604 -24.45 + 12 142.874 1009 6 0 -38.007 21.9629 -25.85 + 12 130.907 710 5 1 -37.9774 22.0166 -54.45 + 12 257.154 1009 5 0 -37.9771 22.0179 -55.85 + 12 102.544 710 4 1 -37.977 22.0281 -84.45 + 12 135.178 1009 4 0 -37.9795 22.0293 -85.85 + 12 150.775 1009 3 0 -38.0168 22.0412 -115.85 + 12 196.128 710 2 1 -37.951 21.9548 -144.45 + 12 401.491 1009 2 0 -37.9456 21.9527 -145.85 + 12 101.062 1009 1 0 -37.8138 21.8958 -175.85 + 12 127.274 712 0 1 -37.5771 21.9524 -204.45 + 12 110.206 1009 0 0 -37.5797 21.9728 -205.85 + 12 14.8735 1008 2 0 -37.935 21.8499 -146.228 + 12 194.292 987 4 0 -21.5666 17.5264 -86.25 + 12 0.654405 840 3 0 -13.4869 -12.0481 -116.25 + 12 145.921 839 3 0 -13.4855 -12.05 -116.248 + 12 65.5811 838 3 0 -13.3378 -12.25 -115.986 + 12 19.0475 841 3 1 -11.6999 -13.2006 -114.85 + 12 128.642 842 3 1 -11.6498 -13.2287 -114.817 + 12 68.7998 843 3 1 -11.45 -13.2732 -114.701 + 12 64.4045 844 3 1 -11.2495 -13.3464 -114.608 + 12 60.7781 845 3 1 -11.0495 -13.3876 -114.528 + 12 16.4098 979 4 1 15.85 145.301 -84.7443 + 12 22.5765 711 2 1 -37.8496 21.8751 -144.761 + 12 138.06 1007 2 0 -37.2251 21.6378 -145.85 + 12 20.7664 803 1 1 -19.4142 15.26 -174.45 + 12 107.117 802 1 1 -19.4503 15.274 -174.519 + 12 13.2375 801 1 1 -19.65 15.357 -174.823 + 12 171.328 978 1 0 -20.596 15.6875 -175.85 + 12 32.6273 1071 1 0 -27.6267 34.4097 -176.25 + 12 106.304 1072 1 0 -27.5706 34.45 -176.15 + 12 37.3415 766 1 1 -26.7727 34.6602 -174.85 + 12 176.437 767 1 1 -26.65 34.6829 -174.716 + 12 74.2937 768 1 1 -26.4498 34.6482 -174.621 + 12 54.6848 1075 1 0 -26.6161 35.111 -175.85 + 12 102.865 1074 1 0 -26.6799 35.0499 -175.951 + 12 118.044 1073 1 0 -26.8333 34.8495 -176.162 + 12 251.7 713 0 1 -37.3152 22.1174 -204.45 + 12 98.9451 1006 0 0 -37.2845 21.416 -205.85 + 12 16.8475 1005 0 0 -37.2472 21.2498 -206.204 + 12 70.1994 714 0 1 -37.25 22.1307 -204.568 + 12 101.511 715 0 1 -37.05 22.0174 -204.684 + 12 76.619 716 0 1 -36.85 21.8854 -204.729 + 12 84.6132 717 0 1 -36.6499 21.6969 -204.769 + 12 79.9276 718 0 1 -36.45 21.485 -204.774 + 12 96.5275 719 0 1 -36.25 21.3214 -204.804 + 12 25.0336 1004 0 0 -34.5409 20.8893 -205.85 + 12 159.178 1003 0 0 -34.4535 20.85 -205.911 + 12 115.466 1002 0 0 -33.9657 20.65 -206.07 + 12 34.7468 1001 0 0 -33.6301 20.4498 -206.185 + 12 47.8279 821 0 0 -5.04379 -15.7646 -206.25 + 12 70.3232 820 0 0 -4.96689 -15.85 -206.127 + 12 269.502 874 0 1 -5.14133 -16.7413 -204.85 + 12 113.831 873 0 1 -5.25009 -17.301 -204.627 + 12 78.3629 872 0 1 -5.45 -17.4135 -204.748 + 12 180.736 814 0 0 -7.43507 -17.2213 -205.85 + 12 177.272 815 0 0 -7.46962 -17.05 -205.998 + 12 198.915 691 4 1 -41.8029 18.6144 -84.45 + 12 114.687 989 4 0 -41.5092 17.988 -85.8507 + 12 11.9963 988 4 0 -41.4245 17.85 -86.203 + 12 9.96812 713 3 1 -37.4291 11.1895 -114.45 + 12 127.299 712 3 1 -37.45 11.1696 -114.477 + 12 146.346 951 3 0 -37.9733 10.4423 -115.85 + 12 16.4348 950 3 0 -38.0945 10.25 -116.205 + 12 72.9353 632 2 1 -53.5564 -12.6124 -144.45 + 12 128.885 633 2 1 -53.45 -12.4763 -144.59 + 12 72.7635 840 2 0 -52.4423 -11.9237 -145.85 + 12 195.498 841 2 0 -52.2865 -11.85 -146.058 + 12 494.791 939 2 0 -25.94 7.97006 -146.25 + 12 16.5523 940 2 0 -26.0068 8.05 -146.152 +Number of digits in this event: 67 +Using G4ParticleGun... +Particle energy: 6.60252 LIN +Particle: gamma +Event: 13 +Number of tracker hits in this event: 36 + 13 276.417 1021 3 1 24.3845 -132.356 -114.45 + 13 262.751 238 3 0 24.3853 -132.354 -115.85 + 13 357.2 1021 2 1 24.4038 -132.32 -144.45 + 13 232.625 239 2 0 24.4041 -132.315 -145.85 + 13 541.432 1021 1 1 24.411 -132.201 -174.45 + 13 483.772 239 1 0 24.406 -132.197 -175.85 + 13 269.291 1021 0 1 24.3042 -132.118 -204.45 + 13 157.643 240 0 0 24.2976 -132.115 -205.85 + 13 1.2851 1060 0 1 32.2463 -131.067 -204.45 + 13 100.599 1061 0 1 32.25 -131.068 -204.455 + 13 99.5468 1062 0 1 32.45 -131.118 -204.659 + 13 29.1629 1063 0 1 32.6504 -131.179 -204.803 + 13 6.36068 243 0 0 33.9848 -131.544 -205.85 + 13 259.037 242 0 0 34.0073 -131.55 -205.868 + 13 82.4444 215 0 0 31.7511 -137.107 -206.25 + 13 100.554 214 0 0 31.5261 -137.15 -206.079 + 13 46.5388 1048 0 1 29.8198 -137.324 -204.85 + 13 60.6144 1047 0 1 29.65 -137.331 -204.746 + 13 54.949 1046 0 1 29.45 -137.332 -204.63 + 13 231.662 1045 0 1 29.2498 -137.307 -204.545 + 13 118.819 1043 0 1 28.7955 -137.151 -204.45 + 13 154.298 1044 0 1 28.85 -137.265 -204.641 + 13 58.7099 198 0 0 30.2951 -140.405 -205.85 + 13 202.94 197 0 0 30.3043 -140.55 -205.879 + 13 59.95 196 0 0 30.327 -140.75 -205.886 + 13 326.017 218 0 0 29.7971 -136.488 -205.85 + 13 274.795 217 0 0 30.4603 -136.55 -206.22 + 13 157.451 240 1 0 24.2206 -132.118 -175.85 + 13 111.362 1013 0 1 22.7259 -129.37 -204.45 + 13 8.38802 251 0 0 22.9185 -129.94 -205.85 + 13 133.219 250 0 0 22.9227 -129.95 -205.875 + 13 110.401 239 0 0 24.3846 -132.308 -205.85 + 13 67.1162 1102 0 1 40.45 -176.766 -204.804 + 13 61.3157 1022 2 1 24.4501 -132.309 -144.667 + 13 47.4937 241 2 0 24.9165 -131.831 -145.85 + 13 79.8952 242 2 0 24.9353 -131.75 -145.99 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 5.8461 LIN +Particle: gamma +Event: 14 +Number of tracker hits in this event: 37 + 14 250.834 448 7 1 -90.4188 -74.4567 5.55 + 14 123.396 527 7 0 -90.4122 -74.4501 4.15 + 14 184.965 528 7 0 -90.4121 -74.45 4.12112 + 14 231.711 449 6 1 -90.2712 -74.3156 -24.45 + 14 293.029 528 6 0 -90.2635 -74.3069 -25.85 + 14 122.352 450 4 1 -89.9127 -73.9631 -84.45 + 14 132.57 530 4 0 -89.9014 -73.9556 -85.85 + 14 142.488 451 3 1 -89.6738 -73.8026 -114.45 + 14 112.546 531 3 0 -89.663 -73.7928 -115.85 + 14 135.163 453 2 1 -89.4404 -73.5899 -144.45 + 14 112.841 532 2 0 -89.4309 -73.5789 -145.85 + 14 314.032 454 1 1 -89.2308 -73.3519 -174.45 + 14 127.106 533 1 0 -89.2202 -73.3396 -175.85 + 14 120.424 455 0 1 -89.0099 -73.0797 -204.45 + 14 99.8426 534 0 0 -89.0008 -73.0678 -205.85 + 14 265.541 528 1 0 -88.0728 -74.417 -175.85 + 14 223.792 448 6 1 -90.3501 -74.404 -24.5276 + 14 33.6899 527 6 0 -90.9936 -74.6302 -25.85 + 14 116.146 526 6 0 -91.049 -74.6501 -25.9624 + 14 98.1089 448 5 1 -90.4076 -74.4531 -54.45 + 14 106.517 527 5 0 -90.402 -74.4515 -55.85 + 14 131.866 449 4 1 -90.2867 -74.424 -84.45 + 14 109.778 528 4 0 -90.2831 -74.4213 -85.85 + 14 161.669 449 3 1 -90.2653 -74.358 -114.45 + 14 122.009 528 3 0 -90.2508 -74.3364 -115.85 + 14 127.997 450 2 1 -89.9042 -73.861 -144.45 + 14 244.455 531 2 0 -89.8747 -73.8254 -145.85 + 14 155.758 535 1 0 -89.2095 -73.0173 -175.85 + 14 121.077 456 0 1 -88.6632 -72.258 -204.45 + 14 117.296 539 0 0 -88.6428 -72.2446 -205.85 + 14 36.6518 530 2 0 -89.9118 -73.8501 -145.989 + 14 216.042 450 0 1 -89.8707 -73.6014 -204.45 + 14 140.799 532 0 0 -90.542 -73.6488 -205.85 + 14 187.174 531 0 0 -90.554 -73.65 -205.875 + 14 12.7087 451 0 1 -89.8453 -73.6048 -204.45 + 14 28.6095 335 0 1 -112.95 -74.1342 -204.501 + 14 138.467 604 0 1 -59.148 -104.158 -204.45 +Number of digits in this event: 28 +Using G4ParticleGun... +Particle energy: 9.65738 LIN +Particle: gamma +Event: 15 +Number of tracker hits in this event: 12 + 15 368.304 1211 3 1 62.2879 -102.619 -114.45 + 15 342.857 387 3 0 62.2881 -102.619 -115.85 + 15 283.587 1211 2 1 62.2954 -102.617 -144.45 + 15 246.126 387 2 0 62.295 -102.616 -145.85 + 15 140.42 1211 1 1 62.2876 -102.591 -174.45 + 15 227.907 387 1 0 62.2872 -102.589 -175.85 + 15 104.953 1211 0 1 62.2808 -102.555 -204.45 + 15 110.361 387 0 0 62.2827 -102.551 -205.85 + 15 13.9955 388 0 0 62.2832 -102.55 -206.214 + 15 109.992 1210 1 1 62.2016 -102.711 -174.45 + 15 141.477 1209 0 1 61.9941 -102.787 -204.45 + 15 110.157 386 0 0 61.981 -102.792 -205.85 +Number of digits in this event: 9 +Using G4ParticleGun... +Particle energy: 1.31484 LIN +Particle: gamma +Event: 16 +Number of tracker hits in this event: 15 + 16 310.893 944 3 1 8.9559 -14.9359 -114.45 + 16 240.15 825 3 0 8.9535 -14.9377 -115.85 + 16 129.979 944 2 1 8.9209 -14.9882 -144.45 + 16 178.418 825 2 0 8.92136 -14.9935 -145.85 + 16 140.586 944 1 1 8.97594 -15.1115 -174.45 + 16 106.825 824 1 0 8.97349 -15.1257 -175.85 + 16 117.39 944 0 1 8.9505 -15.4386 -204.45 + 16 229.321 823 0 0 8.95451 -15.4378 -205.85 + 16 144.416 826 2 0 8.84526 -14.85 -146.208 + 16 100.994 945 2 1 9.08075 -14.7228 -144.45 + 16 231.548 947 1 1 9.45511 -14.5213 -174.45 + 16 122.996 827 1 0 9.45565 -14.509 -175.85 + 16 154.404 946 0 1 9.44075 -14.2442 -204.45 + 16 202.79 829 0 0 9.45006 -14.2345 -205.85 + 16 103.423 947 0 1 9.45 -14.2772 -204.617 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 6.57529 LIN +Particle: gamma +Event: 17 +Number of tracker hits in this event: 1 + 17 167.703 984 1 1 16.9803 103.122 -174.85 +Number of digits in this event: 4 +Using G4ParticleGun... +Particle energy: 3.31465 LIN +Particle: gamma +Event: 18 +Number of tracker hits in this event: 1 + 18 72.7161 1785 10 0 -2.32954 177.265 93.75 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 3.32925 LIN +Particle: gamma +Event: 19 +Number of tracker hits in this event: 122 + 19 279.709 1007 9 1 21.5861 -29.3662 65.55 + 19 300.136 753 9 0 21.5864 -29.3651 64.15 + 19 239.724 1007 8 1 21.5823 -29.3484 35.55 + 19 121.676 753 8 0 21.5858 -29.3464 34.15 + 19 428.277 1008 7 1 21.6644 -29.3393 5.55 + 19 163.601 753 7 0 21.6673 -29.3503 4.15 + 19 144.71 1008 6 1 21.7531 -29.5582 -24.45 + 19 86.3017 752 6 0 21.7684 -29.566 -25.85 + 19 104.727 1010 5 1 22.1116 -29.7095 -54.45 + 19 96.6893 751 5 0 22.1434 -29.7131 -55.85 + 19 122.965 1013 4 1 22.8388 -29.7843 -84.45 + 19 164.725 751 4 0 22.8558 -29.7703 -85.85 + 19 114.266 1015 3 1 23.1747 -29.5097 -114.45 + 19 111.998 752 3 0 23.196 -29.5212 -115.85 + 19 207.041 1017 2 1 23.6394 -29.8857 -144.45 + 19 104.929 750 2 0 23.6566 -29.9438 -145.85 + 19 130.182 1020 1 1 24.051 -31.1688 -174.45 + 19 128.63 744 1 0 24.0607 -31.2101 -175.85 + 19 102.656 1021 0 1 24.3374 -31.9623 -204.45 + 19 129.692 740 0 0 24.3626 -31.9924 -205.85 + 19 10.469 1396 2 1 99.4332 -149.174 -144.85 + 19 0.359816 212 8 1 -137.55 2.14108 35.3369 + 19 275.365 1019 1 1 24.0313 -31.1367 -174.45 + 19 315.407 746 1 0 23.5878 -30.7042 -175.85 + 19 82.5786 747 1 0 23.5374 -30.65 -176.005 + 19 14.7199 964 0 1 12.8784 -17.9866 -204.45 + 19 117.449 963 0 1 12.85 -17.9613 -204.473 + 19 71.3209 962 0 1 12.6497 -17.7725 -204.643 + 19 47.1108 961 0 1 12.45 -17.6031 -204.79 + 19 15.3923 817 0 0 11.0054 -16.474 -205.85 + 19 291.651 818 0 0 10.9753 -16.4499 -205.873 + 19 92.9604 819 0 0 10.7251 -16.25 -206.07 + 19 33.0576 829 1 1 -14.2093 -78.1607 -174.85 + 19 86.1601 994 0 1 18.9793 -20.3218 -204.45 + 19 22.5622 995 0 1 19.05 -20.1802 -204.75 + 19 96.3596 802 0 0 19.4015 -19.6102 -205.85 + 19 42.9604 803 0 0 19.5078 -19.45 -206.159 + 19 119.296 1018 2 1 23.65 -29.8797 -144.612 + 19 218.763 1007 2 1 21.6152 -29.1241 -144.45 + 19 242.988 754 2 0 21.4576 -29.1384 -145.85 + 19 94.4449 990 1 1 18.1304 -29.0379 -174.45 + 19 293.233 754 1 0 18.034 -29.0675 -175.85 + 19 117.408 979 0 1 15.9242 -30.0949 -204.45 + 19 133.055 749 0 0 15.7141 -30.1605 -205.85 + 19 121.495 1008 1 1 21.6887 -29.0574 -174.45 + 19 119.142 1008 0 1 21.7926 -28.9887 -204.45 + 19 150.83 755 0 0 21.7997 -28.9864 -205.85 + 19 210.193 755 8 0 21.4596 -29.0394 34.15 + 19 153.53 762 7 0 21.6222 -27.6378 4.15 + 19 121.314 1002 6 1 20.6197 -26.8315 -24.45 + 19 228.264 766 6 0 20.5327 -26.7216 -25.85 + 19 193.444 994 5 1 18.9297 -24.0892 -54.4502 + 19 116.955 780 5 0 18.8155 -24.0246 -55.85 + 19 108.668 983 4 1 16.6765 -22.6704 -84.45 + 19 10.759 982 4 1 16.65 -22.6428 -84.7944 + 19 113.748 787 4 0 16.5713 -22.561 -85.8501 + 19 125.724 970 3 1 14.1097 -20.4053 -114.45 + 19 106.406 798 3 0 14.049 -20.3494 -115.85 + 19 200.314 964 2 1 12.8502 -19.1398 -144.45 + 19 109.085 963 2 1 12.85 -19.1397 -144.454 + 19 170.601 804 2 0 12.7848 -19.1123 -145.85 + 19 153.771 957 1 1 11.5058 -18.5569 -174.45 + 19 146.949 807 1 0 11.3743 -18.5418 -175.85 + 19 112.824 948 0 1 9.75939 -18.7593 -204.451 + 19 106.71 806 0 0 9.68108 -18.7632 -205.85 + 19 307.693 602 3 0 -82.1124 -59.5868 -116.25 + 19 58.116 864 3 0 -70.9269 -7.05 -116.019 + 19 78.3964 754 8 0 21.5411 -29.1313 33.8739 + 19 90.4169 1004 7 1 20.9236 -28.3401 5.55 + 19 26.7172 1005 7 1 21.05 -28.3525 5.25181 + 19 47.7527 758 7 0 21.5293 -28.4383 4.14953 + 19 84.9012 757 7 0 21.5877 -28.45 4.01668 + 19 31.0438 1072 6 1 34.5974 -30.8361 -24.45 + 19 218.722 1073 6 1 34.6501 -30.8542 -24.5548 + 19 149.188 745 6 0 35.3253 -31.0235 -25.8501 + 19 201.552 744 6 0 35.4265 -31.05 -26.0391 + 19 169.037 1152 5 1 50.4751 -35.9608 -54.4501 + 19 48.8658 716 5 0 50.5201 -36.7535 -55.85 + 19 94.1388 715 5 0 50.5239 -36.8504 -55.9966 + 19 60.3168 1181 4 1 56.2788 -59.0981 -84.45 + 19 172.234 1182 4 1 56.45 -59.049 -84.5581 + 19 94.7607 1183 4 1 56.65 -58.9925 -84.6751 + 19 33.156 1184 4 1 56.85 -58.9569 -84.7848 + 19 138.304 607 4 0 58.76 -58.597 -85.85 + 19 143.105 608 4 0 59.1911 -58.45 -86.0396 + 19 21.8616 609 4 0 59.6165 -58.25 -86.2193 + 19 241.642 1470 3 1 114.211 -31.8832 -114.45 + 19 69.4123 1471 3 1 114.35 -32.6475 -114.812 + 19 47.415 1472 3 1 114.55 -32.7041 -114.788 + 19 73.4861 1473 3 1 114.75 -32.7376 -114.725 + 19 47.8371 1474 3 1 114.95 -32.8095 -114.678 + 19 61.1257 1475 3 1 115.15 -32.8706 -114.695 + 19 53.7969 1476 3 1 115.35 -32.9374 -114.72 + 19 51.0183 1477 3 1 115.55 -33.0351 -114.728 + 19 64.3671 1478 3 1 115.75 -33.1186 -114.727 + 19 68.9442 1479 3 1 115.95 -33.1584 -114.694 + 19 40.8827 1480 3 1 116.15 -33.0058 -114.54 + 19 1.33563 1492 4 1 118.55 70.5191 -84.703 + 19 361.365 754 7 0 21.8081 -29.0507 4.14962 + 19 108.094 1007 6 1 21.5172 -31.0495 -24.45 + 19 119.839 998 5 1 19.7199 -30.8628 -54.45 + 19 54.364 997 5 1 19.65 -30.8136 -54.7221 + 19 118.801 747 5 0 19.3474 -30.6098 -55.85 + 19 88.513 957 4 1 11.5028 -26.471 -84.4503 + 19 56.7368 956 4 1 11.45 -26.4193 -84.6694 + 19 115.55 769 4 0 11.1363 -26.1281 -85.85 + 19 25.1723 770 4 0 11.0526 -26.05 -86.167 + 19 302.52 917 3 1 3.52668 -19.5505 -114.45 + 19 127.192 804 3 0 3.38145 -19.1954 -115.85 + 19 201.971 902 2 1 0.547454 -11.3027 -144.45 + 19 39.719 845 2 0 0.313721 -10.8916 -145.85 + 19 80.4781 846 2 0 0.288866 -10.8499 -145.998 + 19 194.123 876 1 1 -4.8083 -3.37845 -174.45 + 19 4.01608 885 1 0 -4.93063 -2.85227 -175.852 + 19 154.369 886 1 0 -4.93118 -2.85 -175.858 + 19 141.744 866 0 1 -6.6761 7.09415 -204.45 + 19 50.7435 936 0 0 -6.81395 7.409 -205.85 + 19 58.2419 937 0 0 -6.83039 7.45 -206.028 + 19 192.276 1718 6 0 -38.285 163.854 -26.25 + 19 127.54 805 4 0 13.9718 -18.9531 -86.2499 + 19 149.687 971 4 1 14.2559 -18.717 -84.8497 + 19 69.3328 755 7 0 21.9801 -29.0499 3.80326 +Number of digits in this event: 53 +Using G4ParticleGun... +Particle energy: 4.78486 LIN +Particle: gamma +Event: 20 +Number of tracker hits in this event: 101 + 20 485.46 1443 10 1 108.842 9.77381 95.55 + 20 327.39 948 10 0 108.813 9.76046 94.15 + 20 122.458 1440 9 1 108.261 9.43697 65.55 + 20 134.157 946 9 0 108.322 9.38072 64.15 + 20 109.006 1446 8 1 109.425 8.16182 35.55 + 20 111.856 940 8 0 109.453 8.14215 34.15 + 20 109.998 1448 7 1 109.751 7.73545 5.55 + 20 28.3059 938 7 0 109.845 7.65327 4.15 + 20 113.941 937 7 0 109.849 7.65 4.09139 + 20 122.148 1458 6 1 111.851 5.94748 -24.45 + 20 152.98 928 6 0 111.995 5.84427 -25.85 + 20 133.928 1474 5 1 115.077 3.80616 -54.45 + 20 111.699 918 5 0 115.135 3.68457 -55.85 + 20 1.8106 917 5 0 115.151 3.65 -56.2448 + 20 173.947 1479 4 1 116.087 1.34842 -84.45 + 20 211.894 905 4 0 116.12 1.19834 -85.85 + 20 199.711 1483 3 1 116.876 -1.88031 -114.45 + 20 249.071 889 3 0 116.885 -2.11892 -115.85 + 20 124.241 1484 2 1 117.057 -7.10529 -144.45 + 20 121.22 863 2 0 117.081 -7.36267 -145.85 + 20 86.4652 1489 1 1 118.145 -12.83 -174.45 + 20 13.4249 1490 1 1 118.15 -12.8841 -174.792 + 20 117.227 834 1 0 118.17 -13.0578 -175.85 + 20 186.335 1493 0 1 118.941 -17.5921 -204.45 + 20 97.114 811 0 0 118.967 -17.6657 -205.85 + 20 192.673 890 3 0 116.963 -2.04984 -116.13 + 20 59.483 1486 2 1 117.482 -32.8313 -144.85 + 20 243.696 1478 4 1 115.95 1.29663 -84.4941 + 20 1.96313 1345 1 1 89.25 2.96701 -174.469 + 20 424.004 1344 1 1 89.05 2.92996 -174.582 + 20 27.0064 1613 2 1 142.768 13.1301 -144.45 + 20 79.3277 1612 2 1 142.75 13.1584 -144.572 + 20 56.5455 967 2 0 142.556 13.5784 -145.85 + 20 48.5185 968 2 0 142.535 13.65 -146.06 + 20 131.739 1443 9 1 108.836 9.75658 65.55 + 20 149.807 948 9 0 108.836 9.75564 64.15 + 20 167.556 1443 8 1 108.845 9.73519 35.55 + 20 121.221 948 8 0 108.847 9.73541 34.15 + 20 169.096 1443 7 1 108.885 9.74176 5.55 + 20 140.554 948 7 0 108.888 9.74142 4.15 + 20 310.74 1443 6 1 108.949 9.72742 -24.45 + 20 249.383 948 6 0 108.951 9.72961 -25.85 + 20 122.596 1444 5 1 108.98 9.76363 -54.45 + 20 162.748 948 5 0 108.981 9.76581 -55.85 + 20 409.842 1444 4 1 109.003 9.81161 -84.45 + 20 449.747 948 4 0 109.006 9.81541 -85.85 + 20 301.52 1444 3 1 109.041 9.89806 -114.45 + 20 135.308 949 3 0 109.054 9.90016 -115.85 + 20 120.004 1445 2 1 109.306 9.96499 -144.45 + 20 121.388 949 2 0 109.32 9.96386 -145.85 + 20 115.226 1447 1 1 109.573 9.93701 -174.45 + 20 310.963 949 1 0 109.59 9.93091 -175.85 + 20 140.321 1448 0 1 109.939 9.80037 -204.45 + 20 175.911 948 0 0 109.954 9.79948 -205.85 + 20 123.791 1443 3 1 108.824 9.6571 -114.45 + 20 142.515 948 3 0 108.823 9.65258 -115.85 + 20 417.166 1443 2 1 108.821 9.56037 -144.45 + 20 119.669 947 2 0 108.821 9.55984 -145.85 + 20 362.424 1443 1 1 108.802 9.5673 -174.45 + 20 128.672 947 1 0 108.8 9.5616 -175.85 + 20 99.972 1443 0 1 108.777 9.42172 -204.45 + 20 111.886 946 0 0 108.771 9.41838 -205.85 + 20 163.888 990 3 0 55.4081 18.2481 -116.25 + 20 22.7655 991 3 0 55.4023 18.25 -116.195 + 20 65.1287 1442 2 1 108.75 9.4858 -144.766 + 20 211.986 940 2 0 108.931 8.12349 -145.85 + 20 29.9136 939 2 0 108.841 8.05 -145.949 + 20 117.94 950 3 0 108.974 10.2021 -115.85 + 20 120.632 1446 2 1 109.472 10.5479 -144.45 + 20 99.7879 952 2 0 109.493 10.5481 -145.85 + 20 150.114 1448 1 1 109.919 10.5451 -174.45 + 20 119.216 952 1 0 109.935 10.5415 -175.85 + 20 144.617 1450 0 1 110.229 10.4408 -204.45 + 20 97.0747 952 0 0 110.232 10.4524 -205.85 + 20 41.1225 288 3 0 61.8081 -122.35 -116.047 + 20 20.3868 949 4 0 109.045 9.8501 -86.2204 + 20 310.649 1330 4 0 144.648 86.0712 -86.25 + 20 161.897 859 3 0 142.685 -8.18957 -115.85 + 20 89.4217 951 3 0 172.822 10.3746 -116.25 + 20 12.936 952 3 0 172.904 10.45 -115.893 + 20 171.865 1764 3 1 173.038 10.6523 -114.85 + 20 20.2269 1442 6 1 108.75 9.75221 -24.788 + 20 408.085 1370 5 1 94.2773 8.17444 -54.45 + 20 590.659 1371 5 1 94.35 7.16942 -54.819 + 20 121.468 1372 5 1 94.55 5.19356 -54.8219 + 20 3.80044 903 5 0 95.6124 0.667464 -55.85 + 20 46.1076 902 5 0 95.6166 0.649948 -55.854 + 20 54.1438 901 5 0 95.6479 0.45 -55.9175 + 20 76.5869 900 5 0 95.6638 0.25 -55.9734 + 20 48.1322 899 5 0 95.7327 -0.05 -56.0573 + 20 42.5751 898 5 0 95.7965 -0.250126 -56.1046 + 20 47.9938 897 5 0 95.8671 -0.450312 -56.1392 + 20 75.2452 896 5 0 95.9373 -0.65 -56.1742 + 20 28.438 895 5 0 96.0144 -0.85 -56.2234 + 20 20.6932 1588 4 1 137.908 -116.379 -84.45 + 20 131.966 1589 4 1 137.95 -116.303 -84.4997 + 20 53.7451 1590 4 1 138.15 -115.838 -84.7364 + 20 55.6154 328 4 0 138.47 -114.495 -85.85 + 20 84.893 329 4 0 138.507 -114.35 -85.9605 + 20 50.9516 330 4 0 138.55 -114.15 -86.144 + 20 55.0299 1444 10 1 108.95 9.88993 95.2711 +Number of digits in this event: 55 +Using G4ParticleGun... +Particle energy: 5.38853 LIN +Particle: gamma +Event: 21 +Number of tracker hits in this event: 19 + 21 261.43 956 4 1 11.3168 -110.982 -84.45 + 21 320.259 345 4 0 11.3215 -110.978 -85.85 + 21 243.918 956 3 1 11.3903 -110.894 -114.45 + 21 257.578 346 3 0 11.3857 -110.886 -115.85 + 21 299.725 956 2 1 11.3085 -110.742 -144.45 + 21 140.808 347 2 0 11.3008 -110.741 -145.85 + 21 208.69 955 1 1 11.1552 -110.728 -174.45 + 21 127.308 347 1 0 11.1461 -110.722 -175.85 + 21 173.308 954 0 1 10.9573 -110.6 -204.45 + 21 132.152 347 0 0 10.9798 -110.6 -205.85 + 21 166.871 345 3 0 11.3209 -110.997 -115.85 + 21 138.973 345 2 0 11.343 -111.046 -145.85 + 21 118.312 956 1 1 11.3993 -111.052 -174.45 + 21 124.797 345 1 0 11.4024 -111.053 -175.85 + 21 345.541 957 0 1 11.4669 -111.089 -204.45 + 21 298.171 345 0 0 11.4712 -111.09 -205.85 + 21 305.052 580 3 0 -88.2377 -63.8719 -116.25 + 21 109.58 581 3 0 -88.1613 -63.8498 -115.919 + 21 117.79 346 0 0 11.5539 -110.915 -205.85 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 7.78423 LIN +Particle: gamma +Event: 22 +Number of tracker hits in this event: 3 + 22 21.1806 688 9 1 -42.45 -29.6215 65.3777 + 22 38.0084 738 11 0 -8.17367 -32.323 123.75 + 22 59.1053 687 9 1 -42.4501 -29.5817 65.5049 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 6.65899 LIN +Particle: gamma +Event: 23 +Number of tracker hits in this event: 75 + 23 430.078 1253 8 1 70.7826 -20.005 35.55 + 23 215.133 800 8 0 70.7825 -20.0054 34.15 + 23 267.511 1253 7 1 70.7791 -20.0089 5.55 + 23 245.84 800 7 0 70.7796 -20.0087 4.15 + 23 242.803 1253 6 1 70.7851 -20.0028 -24.45 + 23 376.358 800 6 0 70.7853 -20.0017 -25.85 + 23 122.406 1253 5 1 70.7881 -19.9775 -54.45 + 23 125.229 800 5 0 70.7885 -19.9756 -55.85 + 23 100.976 1253 4 1 70.7955 -19.9353 -84.45 + 23 105.741 800 4 0 70.7988 -19.9318 -85.85 + 23 120.134 1254 3 1 70.8666 -19.8609 -114.45 + 23 38.6616 800 3 0 70.871 -19.8511 -115.85 + 23 162.557 801 3 0 70.8715 -19.85 -116.005 + 23 141.193 1254 2 1 70.9353 -19.6327 -144.45 + 23 112.712 802 2 0 70.9424 -19.6266 -145.85 + 23 121.897 1255 1 1 71.1136 -19.518 -174.45 + 23 131.09 802 1 0 71.115 -19.5201 -175.85 + 23 95.0956 1255 0 1 71.1075 -19.5932 -204.45 + 23 120.57 802 0 0 71.1045 -19.6005 -205.85 + 23 85.5255 965 7 1 13.1262 -44.0897 5.15 + 23 131.981 1252 5 1 70.5763 -19.7306 -54.45 + 23 104.798 801 5 0 70.5689 -19.7245 -55.85 + 23 117.978 1251 4 1 70.4416 -19.5972 -84.45 + 23 114.416 802 4 0 70.4287 -19.5923 -85.85 + 23 129.597 1250 3 1 70.1519 -19.5028 -114.45 + 23 116.349 802 3 0 70.1489 -19.5037 -115.85 + 23 118.308 1250 2 1 70.123 -19.5097 -144.45 + 23 123.189 803 2 0 70.111 -19.4478 -145.85 + 23 123.622 1250 1 1 70.171 -17.7302 -174.45 + 23 134.124 811 1 0 70.1899 -17.6807 -175.85 + 23 137.547 1253 0 1 70.6936 -16.3629 -204.45 + 23 2.16801 818 0 0 70.7201 -16.2506 -205.85 + 23 161.933 819 0 0 70.7202 -16.25 -205.857 + 23 199.498 1252 6 1 70.6051 -19.9335 -24.5316 + 23 127.37 799 6 0 70.5493 -20.103 -25.8508 + 23 150.821 1222 5 1 64.5744 -23.3948 -54.45 + 23 18.5714 780 5 0 64.1935 -24.0193 -55.8501 + 23 203.745 779 5 0 64.1772 -24.0501 -55.9185 + 23 116.746 1183 4 1 56.7939 -34.9844 -84.45 + 23 36.3918 727 4 0 56.9299 -34.4924 -85.85 + 23 92.9648 728 4 0 56.9573 -34.45 -85.9691 + 23 177.682 1260 3 1 72.0761 -16.474 -114.45 + 23 23.7306 822 3 0 72.8323 -15.5027 -115.85 + 23 107.996 823 3 0 72.8721 -15.45 -115.918 + 23 26.7101 824 3 0 73.0572 -15.25 -116.17 + 23 91.155 1375 2 1 95.2361 3.25399 -144.45 + 23 63.1591 1376 2 1 95.35 3.2521 -144.497 + 23 62.8051 1377 2 1 95.55 3.23946 -144.553 + 23 110.729 1378 2 1 95.75 3.19383 -144.595 + 23 87.2601 1379 2 1 95.9504 3.16822 -144.596 + 23 81.4029 1380 2 1 96.15 3.1129 -144.58 + 23 56.4618 1381 2 1 96.35 3.03471 -144.589 + 23 64.9053 1382 2 1 96.55 2.93429 -144.548 + 23 57.6091 1383 2 1 96.75 2.78275 -144.488 + 23 123.678 801 6 0 70.6488 -19.8165 -25.85 + 23 233.822 1241 5 1 68.4055 -20.3257 -54.45 + 23 111.261 799 5 0 68.4216 -20.1384 -55.8504 + 23 116.68 1230 4 1 66.1656 -18.7066 -84.45 + 23 75.7176 809 4 0 66.3811 -18.1548 -85.85 + 23 59.6902 810 4 0 66.4047 -18.05 -86.0618 + 23 21.5025 1383 4 0 65.8368 96.876 -86.25 + 23 51.0387 1384 4 0 65.8351 96.95 -86.2296 + 23 61.3196 1385 4 0 65.8416 97.15 -86.168 + 23 67.0275 1386 4 0 65.8699 97.35 -86.13 + 23 293.866 1387 4 0 65.8887 97.55 -86.0975 + 23 236.158 1388 4 0 65.8896 97.751 -86.0712 + 23 61.9718 1389 4 0 65.823 97.95 -86.0417 + 23 61.1359 1390 4 0 65.754 98.15 -85.9851 + 23 22.0042 1391 4 0 65.6817 98.35 -85.8948 + 23 527.029 1224 4 1 65.0074 100.405 -84.85 + 23 238.395 1223 4 1 64.85 100.735 -84.6683 + 23 13.9865 1222 4 1 64.6499 100.885 -84.4651 + 23 167.312 794 5 0 67.3149 -21.089 -55.8501 + 23 166.002 793 5 0 67.1802 -21.25 -55.8889 + 23 239.316 1252 8 1 70.65 -19.9689 35.5407 +Number of digits in this event: 38 +Using G4ParticleGun... +Particle energy: 1.84063 LIN +Particle: gamma +Event: 24 +Number of tracker hits in this event: 6 + 24 101.127 1443 4 1 108.828 58.9039 -84.85 + 24 153.258 1444 4 1 108.95 59.0574 -84.8054 + 24 92.4177 1404 2 1 101.037 -54.0472 -144.45 + 24 216.151 1460 0 1 112.29 67.3791 -204.85 + 24 114.22 1270 1 1 74.25 -5.60795 -174.647 + 24 30.1291 1271 1 1 74.25 -5.60422 -174.599 +Number of digits in this event: 5 +Using G4ParticleGun... +Particle energy: 5.51033 LIN +Particle: gamma +Event: 25 +Number of tracker hits in this event: 82 + 25 271.162 485 7 1 -82.9171 -91.2245 5.55 + 25 301.863 444 7 0 -82.9099 -91.2341 4.15 + 25 188.832 486 6 1 -82.7161 -91.4606 -24.45 + 25 130.241 443 6 0 -82.7223 -91.4733 -25.85 + 25 266.578 485 5 1 -83.0098 -91.6361 -54.45 + 25 102.363 442 5 0 -83.019 -91.6506 -55.85 + 25 145.585 484 4 1 -83.1965 -91.9213 -84.45 + 25 147.144 441 4 0 -83.1798 -91.9346 -85.85 + 25 120.314 486 3 1 -82.7779 -92.0141 -114.45 + 25 129.867 440 3 0 -82.7904 -91.9922 -115.85 + 25 235.45 484 2 1 -83.2498 -91.5466 -144.45 + 25 129.068 443 2 0 -83.2111 -91.4028 -145.85 + 25 159.599 488 1 1 -82.4253 -88.4624 -174.45 + 25 35.6015 458 1 0 -82.4256 -88.2699 -175.85 + 25 50.5314 459 1 0 -82.426 -88.25 -175.995 + 25 70.0617 488 0 1 -82.2598 -84.5691 -204.45 + 25 395.896 489 0 1 -82.25 -84.5358 -204.706 + 25 122.581 478 0 0 -82.2082 -84.3906 -205.85 + 25 30.5683 483 2 1 -83.25 -91.5066 -144.805 + 25 138.431 446 2 0 -84.4293 -90.8586 -145.85 + 25 78.6917 447 2 0 -84.5781 -90.75 -145.943 + 25 67.2835 448 2 0 -84.647 -90.55 -146.008 + 25 286.703 449 2 0 -84.6981 -90.3499 -146.045 + 25 24.1127 450 2 0 -84.8276 -90.05 -145.926 + 25 102.185 453 2 0 -82.9902 -89.443 -145.85 + 25 43.5824 505 2 1 -78.9772 -87.7391 -144.85 + 25 331.727 506 2 1 -78.85 -87.6882 -144.759 + 25 121.69 496 0 1 -80.8084 -86.4941 -204.45 + 25 143.757 469 0 0 -80.7325 -86.2102 -205.85 + 25 80.0862 495 0 1 -80.85 -86.4311 -204.78 + 25 37.8602 458 0 0 -82.2613 -88.3735 -205.85 + 25 254.411 457 0 0 -82.2913 -88.45 -205.881 + 25 149.94 485 6 1 -82.9106 -91.2286 -24.45 + 25 101.352 444 6 0 -82.9099 -91.2275 -25.85 + 25 109.116 444 5 0 -82.8937 -91.2013 -55.85 + 25 116.642 485 4 1 -82.8996 -91.2091 -84.45 + 25 147.341 444 4 0 -82.8998 -91.2073 -85.85 + 25 165.771 485 3 1 -82.9069 -91.1698 -114.45 + 25 160.974 444 3 0 -82.9057 -91.1727 -115.85 + 25 301.44 485 2 1 -82.8834 -91.2271 -144.45 + 25 293.285 444 2 0 -82.8836 -91.2313 -145.85 + 25 230.665 485 1 1 -82.8912 -91.3182 -174.45 + 25 132.673 444 1 0 -82.8913 -91.3206 -175.85 + 25 144.371 485 0 1 -82.8999 -91.3556 -204.45 + 25 139.104 443 0 0 -82.8996 -91.358 -205.85 + 25 70.2795 9 10 0 -137.411 -178.309 94.15 + 25 57.7577 513 6 0 97.925 -77.2767 -26.25 + 25 107.931 514 6 0 97.9738 -77.2499 -26.0863 + 25 261.774 1390 6 1 98.1672 -76.0759 -24.85 + 25 60.0992 1389 6 1 98.15 -75.3243 -24.5063 + 25 57.6789 1388 6 1 97.95 -75.1952 -24.6008 + 25 56.4204 1387 6 1 97.75 -75.1226 -24.6812 + 25 205.174 1386 6 1 97.5499 -75.0726 -24.7105 + 25 54.1518 1385 6 1 97.3499 -74.9773 -24.7654 + 25 49.4559 1384 6 1 97.15 -74.9672 -24.7629 + 25 81.0003 1383 6 1 96.9494 -74.9918 -24.7576 + 25 200.505 1382 6 1 96.7496 -74.9529 -24.7334 + 25 169.043 1381 6 1 96.55 -74.853 -24.678 + 25 271.14 1380 6 1 96.35 -74.8908 -24.7127 + 25 74.2558 1379 6 1 96.1494 -74.8734 -24.7858 + 25 254.305 526 6 0 96.2285 -74.8277 -25.85 + 25 48.423 527 6 0 96.3938 -74.65 -25.8913 + 25 79.3818 286 1 1 -122.878 -93.8644 -174.85 + 25 120.207 285 1 1 -122.95 -93.8873 -174.746 + 25 67.0228 816 0 1 -16.6605 -49.3891 -204.45 + 25 44.2959 817 0 1 -16.65 -49.398 -204.47 + 25 110.126 435 4 0 -107.277 -93.126 -86.25 + 25 124.478 405 0 0 -93.9564 -99.0288 -206.25 + 25 139.583 445 2 0 -82.8533 -91.1359 -145.85 + 25 347.323 489 1 1 -82.198 -90.9896 -174.45 + 25 544.096 445 1 0 -82.1701 -90.9996 -175.85 + 25 149.302 492 0 1 -81.6203 -91.087 -204.45 + 25 160.377 445 0 0 -81.6038 -91.0657 -205.85 + 25 194.661 437 1 0 -82.1172 -92.5971 -175.85 + 25 119.786 497 0 1 -80.5909 -94.2193 -204.45 + 25 166.614 429 0 0 -80.538 -94.2643 -205.85 + 25 41.3921 1284 3 0 -176.186 76.9622 -116.25 + 25 79.0398 9 3 1 -178.15 81.1588 -114.516 + 25 108.199 610 2 0 -14.0229 -58.001 -146.25 + 25 57.2587 611 2 0 -13.8283 -57.8497 -146.197 + 25 55.7299 1151 2 0 69.141 50.3353 -146.25 + 25 52.0149 1152 2 0 69.2497 50.45 -146.191 +Number of digits in this event: 47 +Using G4ParticleGun... +Particle energy: 6.63752 LIN +Particle: gamma +Event: 26 Number of tracker hits in this event: 0 Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 5.44298 LIN -Particle: gamma -Event: 9 -Number of tracker hits in this event: 0 -Number of digits in this event: 0 -Using G4ParticleGun... -Particle energy: 3.18605 LIN -Particle: gamma -Event: 10 -Number of tracker hits in this event: 19 - 10 245.244 1297 3 1 79.56 35.8215 -114.45 - 10 230.601 1078 3 0 79.5606 35.8197 -115.85 - 10 291.18 1297 2 1 79.567 35.7844 -144.45 - 10 251.829 1078 2 0 79.5641 35.7894 -145.85 - 10 280.854 1297 1 1 79.4998 35.9208 -174.45 - 10 266.286 1079 1 0 79.4927 35.9211 -175.85 - 10 354.973 1296 0 1 79.38 35.9803 -204.45 - 10 196.888 1079 0 0 79.3748 35.987 -205.85 - 10 86.3335 157 8 0 49.9908 -148.631 33.75 - 10 32.6614 156 8 0 49.9541 -148.75 33.9952 - 10 28.2396 1080 1 0 79.4524 36.05 -176.145 - 10 208.523 1297 0 1 79.5569 35.9911 -204.45 - 10 122.872 1080 0 0 79.5216 36.1346 -205.85 - 10 119.616 1076 1 0 79.5569 35.2978 -175.85 - 10 112.84 1074 0 0 79.3676 34.8577 -205.85 - 10 69.0729 1428 1 1 105.75 99.9263 -174.729 - 10 59.6604 1221 1 1 64.3439 176.01 -174.85 - 10 300.925 1220 1 1 64.2499 176.635 -174.577 - 10 197.152 1075 0 0 79.433 35.1515 -205.85 -Number of digits in this event: 16 -Using G4ParticleGun... -Particle energy: 8.12958 LIN -Particle: gamma -Event: 11 -Number of tracker hits in this event: 1 - 11 134.381 12 6 0 -171.714 -177.55 -25.9971 -Number of digits in this event: 4 -Using G4ParticleGun... -Particle energy: 9.68154 LIN -Particle: gamma -Event: 12 -Number of tracker hits in this event: 44 - 12 169.425 911 8 1 2.44199 -40.1222 35.55 - 12 256.334 699 8 0 2.44151 -40.1217 34.15 - 12 99.4437 911 7 1 2.43 -40.1054 5.55 - 12 166.665 699 7 0 2.42919 -40.104 4.15 - 12 127.678 911 6 1 2.41481 -40.0725 -24.45 - 12 153.954 699 6 0 2.41459 -40.0711 -25.85 - 12 140.186 911 5 1 2.41103 -40.0431 -54.45 - 12 104.365 700 5 0 2.4117 -40.0415 -55.85 - 12 186.58 911 4 1 2.42521 -40.0105 -84.45 - 12 145.07 700 4 0 2.42692 -40.009 -85.85 - 12 137.879 912 3 1 2.45697 -39.9796 -114.45 - 12 117.593 700 3 0 2.45875 -39.9781 -115.85 - 12 95.1264 912 2 1 2.49355 -39.9469 -144.45 - 12 122.251 700 2 0 2.49559 -39.9459 -145.85 - 12 162.3 912 1 1 2.53903 -39.9231 -174.45 - 12 123.605 700 1 0 2.54048 -39.9213 -175.85 - 12 115.803 912 0 1 2.56664 -39.8819 -204.45 - 12 113.942 700 0 0 2.56761 -39.8796 -205.85 - 12 89.0936 1687 7 0 173.021 157.557 3.75 - 12 234.192 1688 7 0 173.101 157.75 4.02506 - 12 162.211 1229 4 1 65.9144 132.15 -84.85 - 12 41.3964 1228 4 1 65.85 132.301 -84.7356 - 12 31.3014 1064 3 1 32.9895 36.6757 -114.85 - 12 114.413 1065 3 1 33.05 36.7725 -114.733 - 12 88.2482 1066 3 1 33.25 36.9435 -114.557 - 12 287.504 1067 3 1 33.45 37.0149 -114.491 - 12 77.7226 912 8 1 2.45 -40.1186 35.3321 - 12 151.637 917 7 1 3.46265 -39.6962 5.55 - 12 130.665 701 7 0 3.53469 -39.6944 4.15 - 12 122.788 925 6 1 5.11474 -39.6996 -24.45 - 12 140.402 701 6 0 5.16769 -39.7035 -25.85 - 12 38.3261 930 5 1 6.2477 -39.7889 -54.45 - 12 71.4929 931 5 1 6.25 -39.7876 -54.5823 - 12 104.231 701 5 0 6.28232 -39.7743 -55.85 - 12 138.047 935 4 1 7.17877 -39.355 -84.45 - 12 146.822 703 4 0 7.20524 -39.3746 -85.85 - 12 151.458 939 3 1 7.93582 -40.0593 -114.45 - 12 106.475 699 3 0 8.04557 -40.0766 -115.85 - 12 144.364 950 2 1 10.1942 -40.263 -144.451 - 12 117.004 698 2 0 10.2056 -40.2636 -145.85 - 12 143.254 951 1 1 10.3614 -40.3685 -174.45 - 12 119.157 698 1 0 10.3428 -40.3531 -175.85 - 12 122.036 950 0 1 10.1304 -39.81 -204.45 - 12 152.154 701 0 0 10.139 -39.8127 -205.85 -Number of digits in this event: 29 -Using G4ParticleGun... -Particle energy: 3.62138 LIN -Particle: gamma -Event: 13 -Number of tracker hits in this event: 76 - 13 243.805 1368 8 1 93.7644 -92.2452 35.55 - 13 469.28 439 8 0 93.7626 -92.2374 34.15 - 13 100.109 1367 7 1 93.7311 -92.0723 5.55 - 13 107.053 440 7 0 93.7343 -92.0703 4.15 - 13 322.687 1368 6 1 93.8137 -92.0073 -24.45 - 13 156.283 440 6 0 93.8125 -92.0043 -25.85 - 13 183.241 1368 5 1 93.7807 -91.9401 -54.45 - 13 120.769 441 5 0 93.7853 -91.9306 -55.85 - 13 100.603 1368 4 1 93.917 -91.7434 -84.45 - 13 107.416 442 4 0 93.9162 -91.7452 -85.85 - 13 195.114 1368 3 1 93.9149 -91.7865 -114.45 - 13 131.832 441 3 0 93.9088 -91.7964 -115.85 - 13 143.353 1368 2 1 93.7732 -92.0419 -144.45 - 13 380.493 440 2 0 93.761 -92.0587 -145.85 - 13 133.251 1366 1 1 93.4992 -92.4172 -174.45 - 13 96.2509 438 1 0 93.4858 -92.4403 -175.85 - 13 142.802 1365 0 1 93.1859 -92.8949 -204.45 - 13 195.23 436 0 0 93.185 -92.9279 -205.85 - 13 3.27017 257 3 0 93.411 -128.55 -115.965 - 13 302.345 1365 3 1 93.2467 -128.759 -114.85 - 13 40.4542 444 1 0 146.212 -91.35 -175.871 - 13 123.045 64 1 0 68.9254 -167.186 -176.25 - 13 134.288 65 1 0 68.8315 -167.15 -176.054 - 13 131.455 1368 7 1 93.8633 -92.2201 5.55 - 13 106.471 439 7 0 93.8625 -92.2211 4.15 - 13 275.02 439 6 0 93.8201 -92.2407 -25.85 - 13 124.647 1367 5 1 93.6951 -92.2217 -54.45 - 13 106.601 439 5 0 93.6898 -92.2166 -55.85 - 13 134.609 1367 4 1 93.5603 -92.1127 -84.45 - 13 129.6 440 4 0 93.5443 -92.1123 -85.85 - 13 138.922 440 3 0 93.2132 -92.1188 -115.85 - 13 107.409 1364 2 1 93.0638 -92.109 -144.45 - 13 105.816 1363 1 1 92.939 -92.1386 -174.45 - 13 129.929 440 1 0 92.9329 -92.1465 -175.85 - 13 119.93 1363 0 1 92.791 -92.313 -204.45 - 13 118.07 439 0 0 92.7942 -92.3158 -205.85 - 13 61.527 1317 0 1 83.6004 -117.666 -204.85 - 13 190.999 1168 0 1 53.8151 109.066 -204.85 - 13 199.747 438 6 0 93.7571 -92.3505 -26.2049 - 13 220.14 1367 8 1 93.75 -92.2528 35.5238 - 13 1.42431 1290 7 1 78.0555 -91.2235 5.54999 - 13 53.8542 1289 7 1 78.05 -91.224 5.54871 - 13 48.0794 1288 7 1 77.8499 -91.2346 5.50308 - 13 96.7335 1287 7 1 77.65 -91.2516 5.48443 - 13 46.9773 1286 7 1 77.4497 -91.2779 5.48957 - 13 114.387 1285 7 1 77.25 -91.3116 5.50038 - 13 55.955 1284 7 1 77.05 -91.3516 5.50838 - 13 25.0573 1282 7 1 76.511 -91.4746 5.55 - 13 75.7455 1281 7 1 76.45 -91.4139 5.52943 - 13 84.8892 1280 7 1 76.2497 -91.1777 5.49111 - 13 250.006 1279 7 1 76.05 -90.9091 5.46454 - 13 72.3843 1278 7 1 75.85 -90.544 5.41501 - 13 74.2158 1277 7 1 75.65 -90.3651 5.33775 - 13 57.2036 1276 7 1 75.45 -90.2887 5.3056 - 13 38.1435 1275 7 1 75.2495 -90.1972 5.29553 - 13 60.8469 1274 7 1 74.9441 -90.0497 5.25754 - 13 175.226 1273 7 1 74.8486 -89.9984 5.23342 - 13 65.8501 1272 7 1 74.65 -89.9055 5.2086 - 13 62.1285 454 7 0 72.0988 -89.1307 4.14988 - 13 194.115 455 7 0 71.8932 -89.05 4.04696 - 13 93.5986 614 7 0 33.6305 -57.2201 3.75 - 13 51.0964 615 7 0 33.6682 -57.0497 3.94934 - 13 133.785 1068 7 1 33.7865 -56.5169 5.15031 - 13 6.03648 722 8 0 55.6589 -35.4603 33.75 - 13 112.21 723 8 0 55.6732 -35.45 33.7614 - 13 6.76742 724 8 0 55.9635 -35.25 33.7746 - 13 341.221 748 8 0 110.276 -30.4186 33.75 - 13 246.556 747 8 0 110.398 -30.4501 33.8169 - 13 277.478 441 8 0 93.4988 -91.896 34.1499 - 13 2.71538 442 8 0 93.4233 -91.75 33.7625 - 13 284.024 1333 7 1 86.6584 -75.9699 5.54977 - 13 26.8321 523 7 0 86.977 -75.2774 4.15 - 13 133.486 524 7 0 86.9997 -75.25 4.07127 - 13 137.597 578 7 0 107.826 -64.3157 3.75 - 13 57.4831 1439 7 1 108.112 -64.293 5.15 - 13 61.8105 1440 7 1 108.15 -64.2791 5.33421 -Number of digits in this event: 38 -Using G4ParticleGun... -Particle energy: 5.25947 LIN -Particle: gamma -Event: 14 -Number of tracker hits in this event: 4 - 14 78.8126 767 7 0 88.4176 -26.6133 3.75 - 14 78.0172 766 7 0 88.4 -26.65 3.80919 - 14 166.392 765 7 0 88.4488 -26.85 3.93818 - 14 375.808 1344 7 1 88.9819 -28.1194 5.15 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 3.63465 LIN -Particle: gamma -Event: 15 -Number of tracker hits in this event: 3 - 15 151.14 485 1 0 -73.8429 -82.9643 -176.25 - 15 75.4729 824 1 0 -70.5391 -15.1719 -176.25 - 15 42.429 994 1 0 -63.6263 18.9326 -176.25 -Number of digits in this event: 2 -Using G4ParticleGun... -Particle energy: 8.10582 LIN -Particle: gamma -Event: 16 -Number of tracker hits in this event: 16 - 16 726.489 749 1 1 -30.1722 10.6334 -174.45 - 16 325.918 952 1 0 -30.1721 10.6354 -175.85 - 16 269.343 749 0 1 -30.163 10.6928 -204.45 - 16 124.046 953 0 0 -30.1622 10.6981 -205.85 - 16 65.5374 1010 5 1 22.05 81.9315 -54.7009 - 16 3.26175 1010 4 1 22.2455 13.624 -84.45 - 16 79.1264 1011 4 1 22.25 13.634 -84.4574 - 16 65.7791 1012 4 1 22.451 13.7677 -84.6443 - 16 44.1249 1013 4 1 22.65 13.7312 -84.7457 - 16 74.3219 966 4 0 23.7033 13.4068 -85.85 - 16 79.9073 967 4 0 23.8661 13.45 -85.9466 - 16 86.8151 968 4 0 23.9922 13.65 -86.0043 - 16 152.558 969 4 0 24.1693 13.85 -86.1061 - 16 121.249 952 0 0 -30.2161 10.6359 -205.85 - 16 118.382 38 2 1 -172.35 -83.4147 -144.59 - 16 189.206 748 1 1 -30.2503 10.5416 -174.632 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 6.05853 LIN -Particle: gamma -Event: 17 -Number of tracker hits in this event: 8 - 17 235.137 430 1 1 -94.0315 -92.5083 -174.45 - 17 309.005 438 1 0 -94.0432 -92.5189 -175.85 - 17 120.64 429 0 1 -94.2658 -92.7366 -204.45 - 17 112.233 436 0 0 -94.2827 -92.7537 -205.85 - 17 31.6772 157 1 1 -148.75 -47.6508 -174.74 - 17 393.707 430 0 1 -94.0514 -92.5162 -204.45 - 17 347.247 438 0 0 -94.0534 -92.5154 -205.85 - 17 107.917 437 0 0 -93.9495 -92.6463 -205.85 -Number of digits in this event: 7 -Using G4ParticleGun... -Particle energy: 2.16264 LIN -Particle: gamma -Event: 18 -Number of tracker hits in this event: 34 - 18 228.444 759 4 1 -28.0964 -135.152 -84.45 - 18 339.087 224 4 0 -28.091 -135.159 -85.85 - 18 296.042 759 3 1 -28.0901 -135.275 -114.45 - 18 141.553 224 3 0 -28.0943 -135.283 -115.85 - 18 164.129 759 2 1 -28.1245 -135.489 -144.45 - 18 171.8 223 2 0 -28.1215 -135.48 -145.85 - 18 202.894 759 1 1 -28.1295 -135.297 -174.45 - 18 154.158 224 1 0 -28.1158 -135.285 -175.85 - 18 113.806 761 0 1 -27.8019 -135.038 -204.45 - 18 121.345 225 0 0 -27.8215 -135.007 -205.85 - 18 47.9052 213 3 0 -28.0723 -137.406 -115.85 - 18 42.7687 212 3 0 -28.0744 -137.55 -115.927 - 18 43.377 766 3 1 -26.7607 -138.95 -114.85 - 18 84.0657 767 3 1 -26.65 -139.045 -114.774 - 18 66.6454 768 3 1 -26.45 -139.217 -114.657 - 18 75.4319 769 3 1 -26.25 -139.356 -114.555 - 18 28.1896 770 3 1 -26.05 -139.481 -114.459 - 18 86.0682 771 3 1 -25.8498 -139.506 -114.489 - 18 60.3049 772 3 1 -25.65 -139.397 -114.59 - 18 63.2211 773 3 1 -25.45 -139.302 -114.694 - 18 57.5846 774 3 1 -25.25 -139.176 -114.792 - 18 101.75 210 3 0 -23.7332 -138.127 -115.85 - 18 88.429 211 3 0 -23.4853 -137.95 -116.072 - 18 109.573 259 4 0 2.9338 -128.31 -86.25 - 18 255.53 258 4 0 3.08577 -128.35 -86.1187 - 18 162.057 757 3 1 -28.6029 -135.528 -114.45 - 18 31.9691 223 3 0 -28.5889 -135.548 -115.85 - 18 76.214 222 3 0 -28.5877 -135.55 -115.972 - 18 136.733 758 2 1 -28.2909 -135.966 -144.45 - 18 127.287 220 2 0 -28.2565 -135.99 -145.85 - 18 101.329 762 1 1 -27.5925 -136.339 -174.45 - 18 161.94 219 1 0 -27.5547 -136.32 -175.85 - 18 122.621 767 0 1 -26.6383 -135.948 -204.45 - 18 114.819 221 0 0 -26.5903 -135.909 -205.85 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 7.62789 LIN -Particle: gamma -Event: 19 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 -Using G4ParticleGun... -Particle energy: 7.25839 LIN -Particle: gamma -Event: 20 -Number of tracker hits in this event: 52 - 20 274.831 616 8 1 -56.8354 69.1257 35.5495 - 20 254.27 1245 8 0 -56.8747 69.1367 34.15 - 20 144.03 610 7 1 -57.8971 69.1185 5.55 - 20 262.997 1245 7 0 -57.8972 69.1817 4.15 - 20 152.581 610 6 1 -57.9833 70.373 -24.45 - 20 108.928 1251 6 0 -58.0333 70.3379 -25.85 - 20 111.437 607 5 1 -58.6381 69.6289 -54.4501 - 20 39.1737 606 5 1 -58.65 69.5963 -54.7204 - 20 9.53945 1247 5 0 -58.6951 69.4542 -55.85 - 20 104.01 1246 5 0 -58.6964 69.4499 -55.8838 - 20 228.791 602 4 1 -59.6145 65.8954 -84.45 - 20 52.8787 1229 4 0 -59.6796 65.854 -85.85 - 20 71.7727 1228 4 0 -59.6862 65.85 -85.9911 - 20 121.072 594 3 1 -61.0943 65.2812 -114.45 - 20 130.05 1228 3 0 -61.2635 65.7118 -115.85 - 20 71.9086 573 2 1 -65.3217 74.662 -144.45 - 20 60.701 574 2 1 -65.25 74.7152 -144.666 - 20 122.798 1274 2 0 -64.8497 74.9801 -145.851 - 20 12.5871 1275 2 0 -64.7427 75.05 -146.198 - 20 72.8541 614 1 1 -57.1199 79.8792 -174.45 - 20 163.487 615 1 1 -57.05 79.8964 -174.694 - 20 164.858 1299 1 0 -56.7347 79.9892 -175.85 - 20 142.167 654 0 1 -49.1939 81.6485 -204.45 - 20 189.608 1307 0 0 -48.9246 81.5511 -205.85 - 20 123.536 616 7 1 -56.8325 69.1231 5.55 - 20 149.759 616 6 1 -56.8212 69.1268 -24.45 - 20 117.641 1245 6 0 -56.8199 69.1271 -25.85 - 20 180.743 616 5 1 -56.7887 69.1319 -54.45 - 20 133.462 1245 5 0 -56.7881 69.1315 -55.85 - 20 153.718 616 4 1 -56.7769 69.1302 -84.45 - 20 109.891 1245 4 0 -56.7804 69.132 -85.85 - 20 216.886 615 3 1 -56.8604 69.1535 -114.45 - 20 131.363 1245 3 0 -56.8626 69.1552 -115.85 - 20 108.698 615 2 1 -56.9154 69.1796 -144.45 - 20 114.672 1245 2 0 -56.9166 69.1831 -145.85 - 20 192.948 1246 1 0 -56.9464 69.2619 -175.85 - 20 113.257 615 0 1 -57.008 69.3461 -204.45 - 20 292.571 1246 0 0 -57.0092 69.3494 -205.85 - 20 274.12 1225 4 1 65.1058 56.5735 -84.85 - 20 214.94 616 1 1 -56.7448 69.1011 -174.45 - 20 139.954 1245 1 0 -56.715 69.0728 -175.85 - 20 110.503 619 0 1 -56.1288 68.2468 -204.45 - 20 108.394 1240 0 0 -56.0914 68.2052 -205.85 - 20 115.276 1244 1 0 -56.7597 69.05 -175.872 - 20 251.456 623 0 1 -55.402 68.5495 -204.45 - 20 163.906 1242 0 0 -55.3241 68.4934 -205.85 - 20 86.0198 622 0 1 -55.45 68.7672 -204.737 - 20 52.5755 682 2 0 -179.116 -43.4645 -146.25 - 20 26.5932 7 2 1 -178.75 -42.4068 -144.814 - 20 171.365 681 2 0 -179.228 -43.65 -145.95 - 20 9.85159 1230 7 0 -100.872 66.0776 3.75 - 20 56.2008 1229 7 0 -100.866 66.05 4.04757 -Number of digits in this event: 30 -Using G4ParticleGun... -Particle energy: 6.85723 LIN -Particle: gamma -Event: 21 -Number of tracker hits in this event: 3 - 21 216.775 897 0 1 -0.545654 -140.702 -204.45 - 21 222.168 197 0 0 -0.544776 -140.703 -205.85 - 21 73.9154 128 0 0 7.32503 -154.377 -206.25 -Number of digits in this event: 4 -Using G4ParticleGun... -Particle energy: 7.13549 LIN -Particle: gamma -Event: 22 -Number of tracker hits in this event: 62 - 22 253.589 1283 6 1 76.6514 87.0613 -24.45 - 22 379.857 1335 6 0 76.6536 87.0603 -25.85 - 22 228.767 1283 5 1 76.7074 87.0495 -54.45 - 22 261.626 1334 5 0 76.7132 87.0471 -55.85 - 22 274.425 1283 4 1 76.837 86.9697 -84.45 - 22 652.724 1334 4 0 76.8479 86.9655 -85.85 - 22 115.255 1285 3 1 77.07 86.8704 -114.45 - 22 289.779 1334 3 0 77.0828 86.8547 -115.85 - 22 177.186 1286 2 1 77.3463 86.5509 -144.45 - 22 100.931 1332 2 0 77.3666 86.5219 -145.85 - 22 185.303 1288 1 1 77.7552 85.9062 -174.45 - 22 114.243 1329 1 0 77.7785 85.8693 -175.85 - 22 224.74 1290 0 1 78.2432 85.098 -204.45 - 22 164.561 1325 0 0 78.2674 85.0759 -205.85 - 22 32.8272 1020 2 0 177.705 24.0941 -146.25 - 22 21.5537 1019 2 0 177.724 24.0498 -146.222 - 22 140.993 1781 0 0 143.85 176.368 -206.25 - 22 70.2132 1782 0 0 143.863 176.55 -205.947 - 22 75.0497 1783 0 0 143.858 176.75 -205.967 - 22 394.941 1784 0 0 143.817 176.95 -206.01 - 22 300.077 1332 1 0 77.868 86.4946 -175.85 - 22 17.7451 1333 1 0 77.7946 86.65 -175.88 - 22 319.721 1291 0 1 78.2825 85.7359 -204.45 - 22 62.3591 1324 0 0 77.9179 84.9521 -205.85 - 22 90.4434 1323 0 0 77.8669 84.849 -205.991 - 22 8.2728 1322 0 0 77.7498 84.6497 -206.221 - 22 122.396 1328 0 0 78.303 85.728 -205.85 - 22 276.714 1284 4 1 76.85 86.9724 -84.8286 - 22 384.69 1284 2 1 76.9614 86.9269 -144.45 - 22 319.445 1334 2 0 76.9851 86.9102 -145.85 - 22 116.151 1287 1 1 77.5111 86.59 -174.45 - 22 158.765 1332 0 0 78.3939 86.5074 -205.85 - 22 116.387 1286 1 1 77.2632 87.0159 -174.45 - 22 114.454 1334 1 0 77.2712 87.0065 -175.85 - 22 104.92 1287 0 1 77.4984 86.8715 -204.45 - 22 117.482 1333 0 0 77.4858 86.8132 -205.85 - 22 139.872 1283 3 1 76.7808 86.9788 -114.45 - 22 100.755 1335 2 0 76.8749 87.0522 -145.85 - 22 125.017 1284 1 1 76.9001 87.1186 -174.45 - 22 156.715 1335 1 0 76.9021 87.121 -175.85 - 22 457.211 1284 0 1 76.94 87.186 -204.45 - 22 354.619 1335 0 0 76.9434 87.1908 -205.85 - 22 117.41 1334 0 0 77.0056 87.0468 -205.85 - 22 150.373 1285 0 1 77.05 86.8868 -204.795 - 22 309.082 1282 4 1 76.6481 87.0328 -84.4502 - 22 130.165 1281 3 1 76.4066 87.0035 -114.45 - 22 245.476 1335 3 0 76.3922 87.1463 -115.85 - 22 46.0988 1279 2 1 75.8599 89.4843 -144.45 - 22 214.977 1278 2 1 75.85 89.5081 -144.647 - 22 128.163 1348 2 0 75.7807 89.6519 -145.85 - 22 4.02971 1270 1 1 74.0526 93.4174 -174.451 - 22 166.297 1269 1 1 74.05 93.4206 -174.47 - 22 172.496 1367 1 0 73.8655 93.6569 -175.85 - 22 103.559 1249 0 1 69.9324 98.7473 -204.45 - 22 21.8247 1248 0 1 69.8499 98.7862 -204.809 - 22 144.086 1393 0 0 69.6222 98.8976 -205.85 - 22 266.218 1280 3 1 76.2089 87.0617 -114.45 - 22 108.696 1336 2 0 75.727 87.2635 -145.85 - 22 102.034 1277 1 1 75.6309 87.3146 -174.45 - 22 106.985 1336 1 0 75.6315 87.3245 -175.85 - 22 124.164 1278 0 1 75.7118 87.5615 -204.45 - 22 104.242 1337 0 0 75.7338 87.5833 -205.85 -Number of digits in this event: 39 -Using G4ParticleGun... -Particle energy: 3.9765 LIN -Particle: gamma -Event: 23 -Number of tracker hits in this event: 88 - 23 311.302 1264 10 1 72.8698 4.53816 95.55 - 23 238.868 922 10 0 72.8702 4.54159 94.15 - 23 109.858 1264 9 1 72.8794 4.62086 65.55 - 23 275.203 922 9 0 72.8775 4.61294 64.15 - 23 262.784 1263 8 1 72.8338 4.48092 35.55 - 23 145.467 922 8 0 72.8236 4.46803 34.15 - 23 492.074 1262 7 1 72.5827 4.21113 5.55 - 23 273.707 920 7 0 72.5729 4.20601 4.15 - 23 264.82 1261 6 1 72.3355 4.10673 -24.45 - 23 99.1842 920 6 0 72.3097 4.10308 -25.85 - 23 122.117 1258 5 1 71.7663 4.04197 -54.45 - 23 213.725 919 5 0 71.7422 4.03812 -55.85 - 23 192.851 1255 4 1 71.2016 3.93846 -84.45 - 23 114.743 919 4 0 71.1732 3.93494 -85.85 - 23 147.14 1252 3 1 70.5802 3.87775 -114.45 - 23 132.947 919 3 0 70.5555 3.86858 -115.85 - 23 121.689 1249 2 1 70.027 3.65641 -144.45 - 23 103.946 918 2 0 69.9972 3.65402 -145.85 - 23 108.501 1246 1 1 69.3631 3.58987 -174.45 - 23 301.714 917 1 0 69.3377 3.58424 -175.85 - 23 115.876 1243 0 1 68.8046 3.45158 -204.45 - 23 558.249 916 0 0 68.7797 3.44039 -205.85 - 23 30.9789 1229 0 1 65.85 20.9421 -204.72 - 23 15.4237 920 5 0 71.8689 4.05 -56.1899 - 23 20.5383 1165 5 0 48.5579 53.2066 -56.2499 - 23 105.087 1166 5 0 48.5275 53.25 -56.2065 - 23 68.3443 1167 5 0 48.4524 53.45 -56.0009 - 23 280.495 1140 5 1 48.2402 53.7273 -54.85 - 23 113.919 1141 5 1 48.2501 53.9674 -54.557 - 23 98.9823 1139 5 1 48.05 54.2161 -54.7523 - 23 80.0631 1169 5 0 47.3686 53.9769 -55.85 - 23 237.469 1168 5 0 47.2585 53.85 -55.8823 - 23 107.399 1261 7 1 72.45 4.04789 5.3352 - 23 74.8327 913 7 0 71.2352 2.82019 4.15 - 23 103.88 912 7 0 71.0776 2.65 4.03282 - 23 117.548 911 7 0 70.8156 2.45 4.03393 - 23 137.329 910 7 0 70.407 2.25 3.96398 - 23 83.9187 909 7 0 70.0321 2.05 3.892 - 23 65.0801 908 7 0 69.7718 1.85 3.95461 - 23 111.526 907 7 0 69.5855 1.64977 4.01403 - 23 84.5399 906 7 0 69.3508 1.45 3.93784 - 23 125.667 921 7 0 72.697 4.31502 4.15 - 23 125.33 1271 6 1 74.3732 6.29278 -24.45 - 23 2.35584 1272 6 1 74.4501 6.51251 -24.8381 - 23 110.807 934 6 0 74.6391 6.91995 -25.85 - 23 42.6552 1316 5 1 83.3901 13.9137 -54.4502 - 23 95.0654 1317 5 1 83.4501 13.8112 -54.549 - 23 58.822 1318 5 1 83.6501 13.6808 -54.7257 - 23 84.1445 965 5 0 84.9288 13.1621 -55.8503 - 23 138.146 964 5 0 85.1911 13.0499 -56.0847 - 23 111.008 963 5 0 85.4893 12.85 -56.1835 - 23 50.2244 1381 0 1 96.5125 12.8693 -204.45 - 23 122.94 1263 9 1 72.7919 4.46629 65.55 - 23 163.11 921 8 0 72.7037 4.35287 34.15 - 23 129.903 1263 7 1 72.6964 4.20573 5.55 - 23 175.097 1263 6 1 72.6836 4.04453 -24.45 - 23 112.683 919 6 0 72.6829 4.03386 -25.85 - 23 123.104 1263 5 1 72.6574 3.81524 -54.45 - 23 112.683 918 5 0 72.655 3.80526 -55.85 - 23 116.298 1262 4 1 72.6205 3.60291 -84.45 - 23 94.4776 917 4 0 72.6218 3.59552 -85.85 - 23 106.306 1263 3 1 72.6616 3.4476 -114.45 - 23 192.696 916 3 0 72.661 3.44038 -115.85 - 23 168.809 1263 2 1 72.6548 3.30594 -144.45 - 23 131.199 916 2 0 72.6529 3.30507 -145.85 - 23 127.855 1262 1 1 72.6264 3.27753 -174.45 - 23 163.281 916 1 0 72.6375 3.28127 -175.85 - 23 210.161 1264 0 1 72.9464 3.3435 -204.45 - 23 188.298 915 1 0 72.6327 3.21664 -176.118 - 23 205.533 1266 0 1 73.2999 3.24682 -204.45 - 23 72.062 896 1 0 95.7403 -0.686723 -176.25 - 23 53.5586 1265 0 1 73.2139 3.31322 -204.45 - 23 77.4846 1267 0 1 73.45 3.10251 -204.773 - 23 40.3007 1268 0 1 73.65 2.95441 -204.805 - 23 104.562 1269 0 1 73.85 2.86021 -204.788 - 23 74.4473 1270 0 1 74.05 2.78647 -204.762 - 23 101.43 1271 0 1 74.2505 2.64874 -204.693 - 23 103.398 1272 0 1 74.45 2.62577 -204.583 - 23 123.028 1273 0 1 74.6644 2.73 -204.45 - 23 88.5646 917 0 0 73.0253 3.45 -206.144 - 23 210.308 918 0 0 72.9212 3.65 -206.194 - 23 98.0395 919 0 0 72.6933 3.85 -206.125 - 23 7.71625 1261 0 1 72.4483 3.16002 -204.45 - 23 99.6977 1262 0 1 72.45 3.16034 -204.479 - 23 118.088 915 0 0 72.5261 3.17417 -205.85 - 23 110.666 993 10 0 72.0078 18.7098 93.7512 - 23 93.7441 994 10 0 71.9235 18.8502 93.9084 - 23 312.139 995 10 0 71.771 19.0505 93.9475 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 8.06743 LIN -Particle: gamma -Event: 24 -Number of tracker hits in this event: 140 - 24 203.451 1214 9 1 62.9038 -31.0949 65.55 - 24 352.999 744 9 0 62.9063 -31.0913 64.15 - 24 361.092 1214 8 1 62.9519 -31.0155 35.55 - 24 150.105 745 8 0 62.9473 -31.0104 34.15 - 24 180.484 1213 7 1 62.8472 -30.907 5.55 - 24 268.483 745 7 0 62.8455 -30.9064 4.15 - 24 112.936 1213 6 1 62.8125 -30.8908 -24.45 - 24 222.063 745 6 0 62.8116 -30.8888 -25.85 - 24 238.589 1213 5 1 62.7759 -30.8366 -54.45 - 24 160.157 746 5 0 62.7758 -30.8237 -55.85 - 24 142.876 1213 4 1 62.7681 -30.5399 -84.45 - 24 118.653 747 4 0 62.7722 -30.5258 -85.85 - 24 255.788 1214 3 1 62.8649 -30.2398 -114.45 - 24 269.422 749 3 0 62.8606 -30.2212 -115.85 - 24 215.95 1213 2 1 62.8051 -29.8293 -144.45 - 24 126.594 751 2 0 62.8136 -29.7261 -145.85 - 24 426.795 1214 1 1 62.9969 -27.6327 -174.45 - 24 223.173 762 1 0 62.9983 -27.5236 -175.85 - 24 136.386 1215 0 1 63.0525 -25.2754 -204.45 - 24 114.526 774 0 0 63.0524 -25.1585 -205.85 - 24 92.5333 1214 2 1 62.85 -29.8063 -144.458 - 24 172.913 1215 2 1 63.0502 -29.6838 -144.476 - 24 34.1243 1206 1 1 61.3043 -28.4005 -174.45 - 24 214.866 1205 1 1 61.25 -28.4265 -174.52 - 24 39.7884 1204 1 1 61.05 -28.3911 -174.638 - 24 19.838 1209 1 1 61.8796 -29.3854 -174.45 - 24 76.5469 1208 1 1 61.85 -29.3831 -174.531 - 24 101.377 754 1 0 61.3714 -29.1401 -175.85 - 24 47.9627 755 1 0 61.2813 -29.05 -176.128 - 24 27.4408 1134 0 1 46.9153 -11.9541 -204.45 - 24 73.4591 1133 0 1 46.8499 -11.9791 -204.526 - 24 43.0157 1132 0 1 46.65 -12.0012 -204.715 - 24 26.0371 841 0 0 46.053 -11.6748 -205.85 - 24 108.543 842 0 0 46.0397 -11.65 -205.913 - 24 26.2973 843 0 0 45.9386 -11.45 -206.176 - 24 488.887 1214 6 1 62.9027 -30.9094 -24.4501 - 24 71.6757 1215 6 1 63.0501 -30.9775 -24.5656 - 24 40.0955 1216 6 1 63.2504 -31.0538 -24.7298 - 24 19.7786 743 6 0 64.6155 -31.4404 -25.85 - 24 187.598 742 6 0 64.6474 -31.45 -25.8744 - 24 159.191 1412 5 1 102.749 -46.2138 -54.45 - 24 117.46 671 5 0 102.37 -45.8344 -55.85 - 24 110.72 1362 4 1 92.5778 -41.1317 -84.4501 - 24 75.7887 691 4 0 92.6745 -41.6723 -85.85 - 24 150.449 690 4 0 92.6491 -41.8502 -86.0362 - 24 284.153 759 4 0 99.569 -28.1454 -86.25 - 24 14.6466 746 6 0 63.3451 -30.85 -26.1952 - 24 34.7595 1240 5 1 68.2461 -25.3513 -54.45 - 24 161.3 1241 5 1 68.25 -25.427 -54.4955 - 24 84.4591 1093 3 0 -91.2297 38.6711 -116.25 - 24 205.36 1092 3 0 -91.4171 38.65 -116.113 - 24 54.3564 746 4 0 62.9375 -30.7548 -86.1739 - 24 71.6126 1219 3 1 63.9164 -30.5946 -114.45 - 24 64.8003 1220 3 1 64.0502 -30.6042 -114.707 - 24 187.025 747 3 0 64.6664 -30.5856 -115.85 - 24 108.89 1299 2 1 80.0007 -28.8356 -144.45 - 24 134.022 757 2 0 80.1175 -28.579 -145.85 - 24 131.284 1312 1 1 82.5112 -23.346 -174.45 - 24 108.854 785 1 0 82.4249 -23.0364 -175.85 - 24 102.747 1295 0 1 79.1791 -16.8486 -204.45 - 24 109.35 816 0 0 79.262 -16.7597 -205.85 - 24 110.441 746 3 0 63.0338 -30.6541 -115.85 - 24 258.022 1217 2 1 63.6099 -30.8984 -144.45 - 24 145.264 745 2 0 63.6377 -30.9441 -145.85 - 24 137.701 1220 1 1 64.161 -31.7889 -174.45 - 24 89.3759 741 1 0 64.1573 -31.841 -175.85 - 24 69.276 740 1 0 64.1565 -31.85 -176.089 - 24 267.968 1219 0 1 63.9857 -32.8616 -204.45 - 24 102.375 735 0 0 63.9532 -32.9154 -205.85 - 24 171.885 1220 0 1 64.05 -32.7988 -204.707 - 24 265.395 740 0 0 63.9736 -31.8982 -205.85 - 24 37.7845 607 0 0 39.4441 -58.5833 -206.25 - 24 91.5039 606 0 0 39.4414 -58.65 -206.225 - 24 162.041 605 0 0 39.447 -58.85 -206.202 - 24 111.299 604 0 0 39.5521 -59.05 -206.161 - 24 110.67 744 8 0 62.9262 -31.0659 34.15 - 24 120.099 1214 7 1 62.9351 -31.0427 5.55 - 24 102.775 744 6 0 62.983 -31.0566 -25.85 - 24 137.455 1215 5 1 63.0952 -31.0467 -54.45 - 24 388.391 745 5 0 63.1003 -31.0479 -55.85 - 24 180.271 1215 4 1 63.1678 -31.0382 -84.45 - 24 118.708 745 4 0 63.1653 -31.034 -85.85 - 24 129.939 1215 3 1 63.1936 -30.9374 -114.45 - 24 113.44 745 3 0 63.1952 -30.9517 -115.85 - 24 109.002 1216 2 1 63.2807 -31.1363 -144.45 - 24 256.994 744 2 0 63.2847 -31.1429 -145.85 - 24 131.313 1216 1 1 63.3366 -31.2451 -174.45 - 24 367.625 744 1 0 63.3786 -31.2334 -175.85 - 24 101.58 1221 0 1 64.3254 -30.8933 -204.45 - 24 245.299 745 0 0 64.3724 -30.86 -205.85 - 24 36.2032 1215 1 1 63.0752 -31.5354 -174.45 - 24 257.2 733 1 0 62.2815 -33.3759 -175.85 - 24 89.1394 732 1 0 62.2456 -33.45 -175.903 - 24 1.5817 744 5 0 63.3992 -31.05 -56.2488 - 24 319.14 1216 4 1 63.2779 -31.0869 -84.45 - 24 332.465 744 4 0 63.2854 -31.0872 -85.85 - 24 132.204 1216 3 1 63.4453 -31.1182 -114.45 - 24 288.366 744 3 0 63.4527 -31.121 -115.85 - 24 110.893 1218 1 1 63.7772 -31.1991 -174.45 - 24 173.608 744 0 0 64.0083 -31.1595 -205.85 - 24 13.6117 1229 0 1 66.0247 -31.1016 -204.45 - 24 142.725 1230 0 1 66.0503 -31.1149 -204.493 - 24 109.734 743 0 0 66.6156 -31.4151 -205.85 - 24 30.6218 669 0 0 83.6417 -46.05 -206.076 - 24 154.613 1217 3 1 63.5469 -31.1805 -114.45 - 24 118.921 1220 2 1 64.0887 -31.4367 -144.45 - 24 119.814 743 2 0 64.1195 -31.4367 -145.85 - 24 144.976 1223 1 1 64.7484 -31.4489 -174.45 - 24 136.135 742 1 0 64.7744 -31.4564 -175.85 - 24 201.413 1226 0 1 65.3309 -31.6135 -204.45 - 24 131.511 742 0 0 65.3734 -31.6278 -205.85 - 24 163.225 423 0 0 83.4598 -95.35 -206.17 - 24 170.761 422 0 0 83.3328 -95.55 -205.949 - 24 66.5581 1227 0 1 65.45 -31.5272 -204.688 - 24 108.566 741 0 0 66.267 -31.85 -205.914 - 24 186.131 1214 4 1 62.9711 -30.9989 -84.4508 - 24 27.8541 742 4 0 63.1866 -31.6041 -85.8501 - 24 80.9185 741 4 0 63.2024 -31.65 -85.9499 - 24 43.5486 965 4 0 68.1242 13.0819 -86.25 - 24 55.1916 966 4 0 68.1399 13.25 -86.1799 - 24 119.08 967 4 0 68.14 13.45 -86.0833 - 24 129.421 968 4 0 68.0435 13.65 -85.9618 - 24 1.72568 969 4 0 67.8539 13.85 -85.8522 - 24 0.113336 1230 4 1 66.0528 15.736 -84.85 - 24 73.6875 1229 4 1 66.05 15.7389 -84.8484 - 24 85.8242 1228 4 1 65.849 15.9148 -84.7105 - 24 59.2543 1227 4 1 65.65 16.05 -84.5545 - 24 71.0955 1226 4 1 65.4279 16.1787 -84.45 - 24 50.5939 1225 4 1 65.25 16.1518 -84.5049 - 24 72.9648 1224 4 1 65.0497 16.0968 -84.6002 - 24 385.497 1223 4 1 64.85 15.9546 -84.6598 - 24 120.303 1222 4 1 64.65 15.5261 -84.7114 - 24 53.1913 985 4 0 64.6902 17.1168 -85.85 - 24 95.7329 986 4 0 64.6797 17.25 -85.9279 - 24 255.999 987 4 0 64.6428 17.4507 -85.9467 - 24 131.84 988 4 0 64.7655 17.65 -86.0504 - 24 87.4082 743 4 0 63.2922 -31.25 -85.9394 - 24 131.619 1213 3 1 62.85 -32.9028 -114.522 - 24 11.3288 1212 3 1 62.65 -32.9263 -114.808 - 24 166.819 735 3 0 61.7953 -33.0146 -115.85 -Number of digits in this event: 71 -Using G4ParticleGun... -Particle energy: 9.92202 LIN -Particle: gamma -Event: 25 -Number of tracker hits in this event: 2 - 25 175.04 765 7 1 -27.0381 36.116 5.15 - 25 59.483 492 6 1 -81.5952 172.205 -24.45 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 5.77902 LIN -Particle: gamma -Event: 26 -Number of tracker hits in this event: 60 - 26 215.836 1329 5 1 85.8595 79.0859 -54.45 - 26 244.257 1295 5 0 85.8707 79.1087 -55.8502 - 26 218.641 1336 1 1 87.3081 78.84 -174.45 - 26 284.671 1293 1 0 87.2887 78.8084 -175.85 - 26 116.834 1335 0 1 87.227 78.4813 -204.45 - 26 179.892 1292 0 0 87.1701 78.4696 -205.85 - 26 28.6095 1569 0 0 84.6002 133.95 -206.054 - 26 37.0091 1337 1 1 87.45 78.8056 -174.763 - 26 198.782 1395 0 1 99.1853 73.7571 -204.45 - 26 227.893 1394 0 1 99.15 73.6334 -204.563 - 26 77.9673 1260 0 0 98.4965 72.1993 -205.85 - 26 150.294 1259 0 0 98.4227 72.0499 -205.987 - 26 338.813 1258 0 0 98.3359 71.85 -206.178 - 26 139.576 1257 0 0 98.321 71.65 -206.025 - 26 194.136 1328 4 1 85.7671 79.1206 -84.45 - 26 127.561 1295 4 0 85.7637 79.1245 -85.85 - 26 118.82 1328 3 1 85.6871 79.1999 -114.45 - 26 107.891 1295 3 0 85.6811 79.2061 -115.85 - 26 412.177 1327 2 1 85.5671 79.3264 -144.45 - 26 123.385 1296 2 0 85.5627 79.3332 -145.85 - 26 133.429 1327 1 1 85.4726 79.4653 -174.45 - 26 403.5 1297 1 0 85.4696 79.4726 -175.85 - 26 109.983 1326 0 1 85.4169 79.6107 -204.45 - 26 114.327 1297 0 0 85.4134 79.6157 -205.85 - 26 68.6145 1326 2 1 85.45 79.173 -144.636 - 26 149.987 1294 2 0 84.7266 79.016 -145.85 - 26 89.6745 1280 2 0 82.1202 76.179 -146.25 - 26 44.8896 1281 2 0 82.2638 76.25 -146.004 - 26 40.009 1312 2 1 82.5617 76.3727 -144.849 - 26 77.1743 1313 2 1 82.65 76.3895 -144.692 - 26 18.3445 1634 1 1 146.95 166.314 -174.452 - 26 57.4599 1635 1 1 147.15 166.575 -174.523 - 26 41.3294 1593 3 0 79.1444 138.75 -115.976 - 26 107.521 1295 2 0 85.6353 79.209 -145.85 - 26 112.965 1335 1 1 87.0515 80.6335 -174.45 - 26 15.2892 1302 1 0 87.2658 80.4555 -175.85 - 26 95.0761 1301 1 0 87.2762 80.45 -175.909 - 26 83.4412 1359 0 1 92.1466 77.4684 -204.45 - 26 92.522 1360 0 1 92.15 77.465 -204.494 - 26 173.993 1286 0 0 92.2158 77.3709 -205.85 - 26 112.604 1349 0 0 75.5784 89.8647 -206.25 - 26 0.200763 1275 0 1 75.0504 90.6821 -204.85 - 26 155.645 1274 0 1 75.05 90.6827 -204.849 - 26 120.455 1350 1 0 61.6765 90.1719 -176.248 - 26 116.876 1206 1 1 61.3255 90.3781 -174.85 - 26 17.9755 1205 1 1 61.25 90.4181 -174.526 - 26 83.4237 1265 2 0 54.6239 73.2041 -146.25 - 26 68.7087 1264 2 0 54.5763 73.0498 -146.051 - 26 10.2196 1172 2 1 54.4545 72.37 -144.85 - 26 266.415 1171 2 1 54.45 72.3517 -144.817 - 26 88.351 1256 2 0 54.1957 71.3981 -145.851 - 26 40.9523 1255 2 0 54.1232 71.25 -146.084 - 26 107.948 1305 0 0 81.354 81.2434 -206.25 - 26 130.803 1306 0 0 81.1684 81.25 -205.988 - 26 20.9876 1303 0 1 80.6824 81.5599 -204.849 - 26 100.589 1302 0 1 80.65 81.5805 -204.773 - 26 94.9326 1301 0 1 80.426 81.6567 -204.45 - 26 91.3044 1300 0 1 80.25 81.6445 -204.625 - 26 138.577 1309 0 0 80.4711 81.8709 -205.85 - 26 705.649 1308 0 0 80.6172 81.8496 -206.046 -Number of digits in this event: 26 -Using G4ParticleGun... -Particle energy: 7.17703 LIN +Particle energy: 6.13857 LIN Particle: gamma Event: 27 -Number of tracker hits in this event: 1 - 27 165.599 460 3 1 -88.0048 -97.9766 -114.45 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 1.17763 LIN -Particle: gamma -Event: 28 Number of tracker hits in this event: 0 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 4.65997 LIN +Particle energy: 5.40092 LIN +Particle: gamma +Event: 28 +Number of tracker hits in this event: 25 + 28 619.247 656 3 1 -48.6607 12.5923 -114.45 + 28 611.894 962 3 0 -48.6613 12.5913 -115.85 + 28 285.795 656 2 1 -48.6873 12.5662 -144.45 + 28 317.869 962 2 0 -48.687 12.5658 -145.85 + 28 253.87 656 1 1 -48.6809 12.563 -174.45 + 28 248.945 962 1 0 -48.6846 12.5652 -175.85 + 28 121.286 656 0 1 -48.766 12.6128 -204.45 + 28 106.439 962 0 0 -48.7693 12.6165 -205.85 + 28 115.606 655 0 1 -48.8594 12.3646 -204.45 + 28 138.649 961 0 0 -48.8601 12.3613 -205.85 + 28 107.885 655 2 1 -48.9077 12.3875 -144.45 + 28 245.57 961 2 0 -48.9249 12.3703 -145.85 + 28 131.244 655 1 1 -48.9314 12.0835 -174.45 + 28 177.923 959 1 0 -48.9029 12.0026 -175.85 + 28 111.156 659 0 1 -48.2185 10.5885 -204.45 + 28 156.388 952 0 0 -48.1524 10.4897 -205.85 + 28 106.787 657 2 1 -48.5607 12.4933 -144.45 + 28 107.938 654 1 1 -49.2366 10.0037 -174.45 + 28 28.9374 653 1 1 -49.25 9.97707 -174.763 + 28 97.4566 949 1 0 -49.2967 9.87972 -175.85 + 28 15.1971 948 1 0 -49.3109 9.85 -176.18 + 28 166.985 647 0 1 -50.6149 7.06956 -204.45 + 28 96.5594 933 0 0 -50.5574 6.84227 -205.85 + 28 104.505 941 0 0 -49.9791 8.44535 -205.85 + 28 139.591 942 0 0 -49.9747 8.45 -205.856 +Number of digits in this event: 16 +Using G4ParticleGun... +Particle energy: 3.45635 LIN Particle: gamma Event: 29 -Number of tracker hits in this event: 2 - 29 201.464 195 1 1 -140.95 61.1107 -174.582 - 29 5.88735 211 1 1 -137.95 61.4603 -174.755 -Number of digits in this event: 2 +Number of tracker hits in this event: 67 + 29 114.122 387 10 1 -102.627 47.1695 95.55 + 29 195.566 1135 10 0 -102.626 47.1703 94.15 + 29 136.349 387 9 1 -102.6 47.184 65.55 + 29 300.332 1135 9 0 -102.598 47.1852 64.15 + 29 100.382 387 8 1 -102.555 47.214 35.55 + 29 126.64 1135 8 0 -102.552 47.2165 34.15 + 29 130.092 388 7 1 -102.494 47.275 5.55 + 29 121.225 1136 7 0 -102.491 47.2794 4.15 + 29 112.706 388 6 1 -102.435 47.3616 -24.45 + 29 124.837 1136 6 0 -102.43 47.3684 -25.85 + 29 111.415 389 5 1 -102.342 47.503 -54.45 + 29 192.932 1137 5 0 -102.338 47.511 -55.85 + 29 118.318 389 4 1 -102.263 47.6886 -84.45 + 29 109.978 1138 4 0 -102.258 47.6971 -85.85 + 29 112.778 389 3 1 -102.164 47.8735 -114.45 + 29 159.632 1139 3 0 -102.157 47.8836 -115.85 + 29 179.019 390 2 1 -102.007 48.0981 -144.45 + 29 158.382 1140 2 0 -102 48.1077 -145.85 + 29 364.095 391 1 1 -101.869 48.3038 -174.45 + 29 561.583 1141 1 0 -101.862 48.3132 -175.85 + 29 123.184 392 0 1 -101.705 48.4929 -204.45 + 29 127.293 1142 0 0 -101.691 48.5027 -205.85 + 29 21.0794 1341 3 1 88.3921 -54.769 -114.45 + 29 30.0849 390 1 1 -102.059 48.3197 -174.45 + 29 66.7543 389 1 1 -102.15 48.3728 -174.465 + 29 65.1915 388 1 1 -102.35 48.5048 -174.502 + 29 71.9488 387 1 1 -102.55 48.6444 -174.56 + 29 58.9049 386 1 1 -102.75 48.7774 -174.649 + 29 78.3083 385 1 1 -102.95 48.8765 -174.736 + 29 14.9174 384 1 1 -103.15 48.9755 -174.827 + 29 79.7537 1149 1 0 -105.022 49.9308 -175.85 + 29 121.838 1150 1 0 -105.249 50.05 -175.969 + 29 115.191 1151 1 0 -105.637 50.25 -176.146 + 29 52.1703 35 0 1 -173.05 82.0911 -204.45 + 29 85.3651 34 0 1 -173.15 82.003 -204.611 + 29 120.835 1306 0 0 -173.666 81.416 -205.851 + 29 88.7696 1305 0 0 -173.796 81.2497 -206.132 + 29 33.1962 1187 0 0 -179.226 57.5623 -206.249 + 29 71.9643 1186 0 0 -179.212 57.45 -206.138 + 29 59.2994 1185 0 0 -179.273 57.25 -205.974 + 29 342.15 1184 0 0 -179.3 57.05 -205.962 + 29 150.882 1183 0 0 -179.28 56.8499 -206.059 + 29 67.194 1182 0 0 -179.222 56.65 -206.097 + 29 133.854 1181 0 0 -179.129 56.4492 -206.177 + 29 12.8387 3 0 1 -179.353 56.7601 -204.85 + 29 236.49 4 0 1 -179.35 56.7332 -204.821 + 29 26.4433 5 0 1 -179.15 56.6942 -204.786 + 29 352.382 405 0 1 -99.1236 49.3675 -204.45 + 29 131.322 1145 0 0 -98.8641 49.2465 -205.85 + 29 119.789 381 0 1 -103.781 57.1023 -204.85 + 29 190.038 1199 1 0 -132.954 59.9502 -176.25 + 29 6.47692 228 1 1 -134.525 59.4864 -174.85 + 29 224.772 227 1 1 -134.55 59.4789 -174.822 + 29 67.9927 226 1 1 -134.75 59.4991 -174.578 + 29 89.3391 225 1 1 -134.968 59.5396 -174.45 + 29 56.7906 224 1 1 -135.15 59.5973 -174.6 + 29 52.551 223 1 1 -135.35 59.5819 -174.669 + 29 52.2447 222 1 1 -135.55 59.5554 -174.749 + 29 98.9123 221 1 1 -135.75 59.5914 -174.786 + 29 34.6413 220 1 1 -135.95 59.6441 -174.822 + 29 127.859 1200 1 0 -138.369 60.1785 -175.85 + 29 120.966 1201 1 0 -138.661 60.25 -176.077 + 29 66.1149 1202 1 0 -138.903 60.45 -176.132 + 29 71.233 1203 1 0 -139.06 60.65 -176.091 + 29 59.483 1746 3 0 6.23238 169.55 -116.15 + 29 94.9223 404 0 1 -99.15 49.1032 -204.509 + 29 21.423 1140 1 0 -102.111 48.25 -176.057 +Number of digits in this event: 30 Using G4ParticleGun... -Particle energy: 3.68285 LIN +Particle energy: 6.89498 LIN Particle: gamma Event: 30 -Number of tracker hits in this event: 10 - 30 14.7825 1211 8 0 58.5705 62.25 33.8867 - 30 80.3078 986 0 0 41.4949 17.25 -206.009 - 30 5.33054 987 0 0 41.5166 17.4503 -205.863 - 30 66.8742 1107 0 1 41.5086 18.8584 -204.85 - 30 82.6232 1108 0 1 41.65 18.9807 -204.738 - 30 117.327 1109 0 1 41.85 19.1503 -204.631 - 30 90.625 1110 0 1 42.0504 19.2375 -204.581 - 30 63.1264 1111 0 1 42.25 19.2594 -204.535 - 30 91.0087 1112 0 1 42.4508 19.2905 -204.509 - 30 401.617 1113 0 1 42.65 19.2962 -204.471 -Number of digits in this event: 5 +Number of tracker hits in this event: 1 + 30 107.729 1336 2 1 87.3793 -122.857 -144.45 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 2.78597 LIN +Particle energy: 2.95657 LIN Particle: gamma Event: 31 -Number of tracker hits in this event: 4 - 31 21.8549 1631 6 0 -61.9179 146.474 -26.25 - 31 86.5031 1632 6 0 -61.9064 146.55 -26.1451 - 31 30.9229 803 2 0 -61.8994 -19.25 -146.218 - 31 309.798 591 2 1 -61.767 -20.0256 -144.85 -Number of digits in this event: 3 +Number of tracker hits in this event: 30 + 31 303.219 672 8 1 -45.4842 -136.693 35.55 + 31 318.146 217 8 0 -45.4806 -136.694 34.15 + 31 263.831 673 7 1 -45.4052 -136.715 5.55 + 31 306.222 217 7 0 -45.4073 -136.714 4.15 + 31 161.753 673 6 1 -45.4444 -136.702 -24.45 + 31 319.015 217 6 0 -45.4471 -136.7 -25.85 + 31 219.407 672 5 1 -45.524 -136.672 -54.45 + 31 136.377 217 5 0 -45.5266 -136.67 -55.85 + 31 135.381 672 4 1 -45.5993 -136.623 -84.45 + 31 101.909 217 4 0 -45.6021 -136.621 -85.85 + 31 105.104 671 3 1 -45.6629 -136.591 -114.45 + 31 125.685 217 3 0 -45.6621 -136.595 -115.85 + 31 157.476 672 2 1 -45.648 -136.672 -144.45 + 31 240.47 217 2 0 -45.6451 -136.678 -145.85 + 31 124.65 672 1 1 -45.584 -136.787 -174.45 + 31 113.525 216 1 0 -45.578 -136.791 -175.85 + 31 426.25 673 0 1 -45.4456 -136.875 -204.45 + 31 235.071 216 0 0 -45.4569 -136.875 -205.85 + 31 71.1584 210 0 0 -45.422 -138.017 -205.85 + 31 127.251 209 0 0 -45.4171 -138.15 -206.039 + 31 141.116 672 6 1 -45.5055 -136.689 -24.45 + 31 136.081 216 5 0 -45.5143 -136.875 -55.85 + 31 100.374 673 4 1 -45.4201 -136.921 -84.45 + 31 93.7047 216 4 0 -45.4132 -136.914 -85.85 + 31 118.24 673 3 1 -45.2571 -136.765 -114.45 + 31 129.106 216 3 0 -45.2541 -136.759 -115.85 + 31 218.45 674 2 1 -45.1821 -136.61 -144.45 + 31 114.072 675 1 1 -44.9738 -136.649 -174.45 + 31 178.479 217 1 0 -44.9559 -136.659 -175.85 + 31 286.117 677 0 1 -44.59 -136.855 -204.45 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 1.21108 LIN +Particle energy: 5.16577 LIN Particle: gamma Event: 32 Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 6.39497 LIN +Particle energy: 1.34562 LIN Particle: gamma Event: 33 -Number of tracker hits in this event: 85 - 33 292.114 1515 7 1 123.244 9.24661 5.55 - 33 224.679 945 7 0 123.243 9.24629 4.15 - 33 159.75 1515 6 1 123.236 9.24103 -24.45 - 33 262.528 945 6 0 123.238 9.24007 -25.85 - 33 118.807 1515 5 1 123.291 9.2218 -54.45 - 33 130.702 945 5 0 123.292 9.22183 -55.85 - 33 146.951 1515 4 1 123.334 9.22317 -84.45 - 33 222.156 945 4 0 123.335 9.22259 -85.85 - 33 155.7 1515 3 1 123.344 9.20733 -114.45 - 33 114.402 945 3 0 123.346 9.208 -115.85 - 33 557.484 1516 2 1 123.389 9.21936 -144.45 - 33 247.048 945 2 0 123.39 9.21931 -145.85 - 33 476.802 1516 1 1 123.405 9.22129 -174.45 - 33 129.644 945 1 0 123.406 9.22233 -175.85 - 33 336.348 1516 0 1 123.42 9.24064 -204.45 - 33 204.211 945 0 0 123.42 9.23925 -205.85 - 33 44.2121 1517 1 1 123.55 8.98561 -174.736 - 33 72.4681 940 1 0 123.976 8.23981 -175.851 - 33 38.7555 939 1 0 124.036 8.05 -176.112 - 33 87.3215 1508 0 1 121.781 -12.2353 -204.45 - 33 152.257 1509 0 1 121.95 -12.445 -204.67 - 33 41.5812 832 0 0 122.671 -13.5294 -205.85 - 33 128.338 831 0 0 122.733 -13.65 -205.967 - 33 6.88403 830 0 0 122.809 -13.85 -206.229 - 33 152.686 946 1 0 123.292 9.27784 -175.85 - 33 122.284 1524 0 1 125.088 10.6469 -204.45 - 33 239.47 952 0 0 125.054 10.5466 -205.85 - 33 68.2713 1514 3 1 123.15 9.14097 -114.478 - 33 40.9379 1513 3 1 122.95 9.12675 -114.516 - 33 66.1406 1512 3 1 122.75 9.10843 -114.492 - 33 112.801 947 2 0 123.651 9.469 -145.85 - 33 3.8641 1549 1 1 130.14 14.711 -174.45 - 33 138.473 1550 1 1 130.15 14.7262 -174.464 - 33 99.5941 1551 1 1 130.35 15.0353 -174.733 - 33 22.44 985 1 0 132.055 17.1861 -175.85 - 33 126.901 986 1 0 132.108 17.25 -175.875 - 33 129.548 987 1 0 132.264 17.45 -175.926 - 33 85.11 988 1 0 132.477 17.65 -175.986 - 33 61.2781 989 1 0 132.726 17.8503 -176.049 - 33 55.0219 990 1 0 132.872 18.05 -176.052 - 33 68.6512 991 1 0 132.974 18.2508 -176.077 - 33 67.6226 992 1 0 133.058 18.45 -176.117 - 33 57.4152 993 1 0 133.139 18.65 -176.158 - 33 251.025 994 1 0 133.227 18.85 -176.165 - 33 89.2324 995 1 0 133.297 19.05 -176.119 - 33 89.152 996 1 0 133.407 19.25 -176.067 - 33 91.701 997 1 0 133.583 19.45 -176.015 - 33 13.0415 998 1 0 133.797 19.65 -175.875 - 33 42.5329 1574 1 1 135.02 20.5103 -174.85 - 33 122.876 1575 1 1 135.15 20.5991 -174.738 - 33 84.0252 1576 1 1 135.351 20.7745 -174.603 - 33 63.4437 1577 1 1 135.55 20.9086 -174.589 - 33 83.1013 1578 1 1 135.75 21.0176 -174.56 - 33 68.6375 1579 1 1 135.95 21.158 -174.603 - 33 60.377 1580 1 1 136.15 21.2902 -174.603 - 33 118.744 1581 1 1 136.35 21.4201 -174.614 - 33 73.8868 1582 1 1 136.55 21.6542 -174.746 - 33 62.528 1022 1 0 138.166 24.4518 -175.85 - 33 145.256 1023 1 0 138.285 24.65 -175.89 - 33 57.3368 1607 1 1 141.611 25.4312 -174.85 - 33 4.99432 1608 1 1 141.75 25.4165 -174.819 - 33 359.895 1030 1 0 141.815 26.1409 -175.85 - 33 116.255 1003 1 0 135.746 20.8064 -175.85 - 33 20.5839 1004 1 0 135.799 20.8501 -176.019 - 33 397.357 1561 1 1 132.391 18.262 -174.85 - 33 119.319 947 1 0 123.453 9.56175 -175.85 - 33 101.868 1515 0 1 123.309 9.69118 -204.45 - 33 125.966 948 0 0 123.337 9.66865 -205.85 - 33 111.772 1513 6 1 122.843 9.17269 -24.45 - 33 114.049 1511 5 1 122.42 9.53431 -54.45 - 33 139.394 947 5 0 122.402 9.54009 -55.85 - 33 136.084 1509 4 1 121.954 9.73444 -84.45 - 33 127.104 948 4 0 121.964 9.73586 -85.85 - 33 159.213 1510 3 1 122.181 9.75233 -114.45 - 33 102.17 949 3 0 122.235 9.96943 -115.85 - 33 38.9933 1515 2 1 123.344 14.3341 -144.45 - 33 143.025 972 2 0 123.406 14.543 -145.85 - 33 118.17 1522 1 1 124.567 18.718 -174.45 - 33 110.992 1527 0 1 125.673 23.054 -204.45 - 33 158.431 1015 0 0 125.578 23.1875 -205.85 - 33 148.171 387 5 0 -125.381 -102.637 -56.25 - 33 30.099 279 5 1 -124.217 -102.684 -54.85 - 33 270.917 280 5 1 -124.15 -102.691 -54.7792 - 33 196.488 281 5 1 -123.95 -102.816 -54.5226 - 33 27.7851 1503 0 1 120.792 11.0929 -204.45 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 6.81033 LIN -Particle: gamma -Event: 34 -Number of tracker hits in this event: 99 - 34 235.357 692 9 1 -41.6247 -127.531 65.55 - 34 221.505 263 9 0 -41.5944 -127.534 64.1497 - 34 113.142 695 8 1 -40.9572 -127.759 35.55 - 34 101.737 261 8 0 -40.875 -127.783 34.1496 - 34 354.496 707 7 1 -38.6176 -128.165 5.55 - 34 134.813 259 7 0 -38.4437 -128.173 4.15 - 34 142.917 725 6 1 -34.9843 -128.612 -24.45 - 34 115.444 257 6 0 -34.8699 -128.629 -25.8503 - 34 120.589 739 5 1 -32.2325 -129.032 -54.45 - 34 123.225 256 5 0 -32.2321 -128.93 -55.8503 - 34 181.323 739 4 1 -32.1127 -126.831 -84.4501 - 34 169.449 267 4 0 -32.0407 -126.731 -85.85 - 34 104.296 747 3 1 -30.4793 -124.498 -114.45 - 34 136.559 278 3 0 -30.4204 -124.412 -115.85 - 34 92.3284 754 2 1 -29.1595 -122.631 -144.451 - 34 102.284 287 2 0 -29.1034 -122.566 -145.85 - 34 9.98919 288 2 0 -29.0873 -122.55 -146.216 - 34 133.325 763 1 1 -27.3591 -121.527 -174.45 - 34 112.508 293 1 0 -27.3874 -121.542 -175.85 - 34 124.222 757 0 1 -28.5784 -122.276 -204.45 - 34 108.077 289 0 0 -28.6817 -122.319 -205.85 - 34 20.4851 353 0 0 -90.5356 -109.405 -206.25 - 34 29.2397 354 0 0 -90.5348 -109.35 -206.245 - 34 76.1274 670 0 0 -70.7343 -45.9872 -206.25 - 34 250.231 671 0 0 -70.7129 -45.85 -206.189 - 34 308.372 763 3 1 -27.327 -132.994 -114.45 - 34 110.332 236 3 0 -27.2647 -132.878 -115.85 - 34 142.905 757 2 1 -28.5506 -123.435 -144.45 - 34 65.5654 282 2 0 -28.8383 -123.688 -145.851 - 34 35.4663 281 2 0 -28.8975 -123.75 -146.126 - 34 103.633 725 1 1 -34.9218 -128.286 -174.45 - 34 14.2473 726 1 1 -34.85 -128.19 -174.802 - 34 8.79226 260 1 0 -34.6008 -127.96 -175.85 - 34 98.0081 261 1 0 -34.5934 -127.95 -175.888 - 34 73.1487 780 0 1 -24.0046 -116.65 -204.45 - 34 68.2751 781 0 1 -23.8497 -116.723 -204.555 - 34 55.0306 782 0 1 -23.65 -116.832 -204.729 - 34 116.179 316 0 0 -22.6793 -116.934 -205.85 - 34 147.749 315 0 0 -22.5704 -116.95 -205.961 - 34 129.486 235 3 0 -27.1931 -133.031 -115.85 - 34 146.287 780 2 1 -24.0389 -134.08 -144.45 - 34 122.145 234 2 0 -23.8757 -133.294 -145.85 - 34 240.424 235 2 0 -23.8443 -133.15 -146.09 - 34 13.6154 779 1 1 -24.2242 -116.382 -174.45 - 34 333.922 778 1 1 -24.25 -116.327 -174.469 - 34 37.8174 777 1 1 -24.45 -115.799 -174.791 - 34 5.2485 326 1 0 -24.6414 -114.764 -175.85 - 34 80.3354 327 1 0 -24.6442 -114.75 -175.864 - 34 77.1278 328 1 0 -24.6597 -114.55 -176.061 - 34 162.929 816 1 0 -60.5342 -16.8255 -176.25 - 34 43.2246 655 1 0 -46.4865 -48.9639 -176.25 - 34 104.965 308 1 0 -30.3998 -118.462 -176.25 - 34 38.7092 730 11 1 -34.0162 6.32668 125.15 - 34 303.293 765 0 1 -26.9262 -81.9595 -204.45 - 34 287.458 766 0 1 -26.85 -82.0591 -204.562 - 34 71.0147 491 0 0 -25.898 -81.7572 -205.85 - 34 67.6409 492 0 0 -25.8137 -81.65 -206.026 - 34 135.221 692 8 1 -41.6335 -127.54 35.55 - 34 156.608 263 8 0 -41.6335 -127.54 34.15 - 34 124.114 692 7 1 -41.632 -127.557 5.55 - 34 155.903 262 7 0 -41.6325 -127.557 4.15 - 34 296.274 691 6 1 -41.6519 -127.567 -24.45 - 34 131.581 262 6 0 -41.6531 -127.565 -25.85 - 34 207.758 691 5 1 -41.6734 -127.544 -54.45 - 34 135.138 263 5 0 -41.6746 -127.544 -55.85 - 34 120.735 691 4 1 -41.6945 -127.556 -84.45 - 34 101.406 262 4 0 -41.6963 -127.555 -85.85 - 34 169.074 691 3 1 -41.7419 -127.509 -114.45 - 34 92.9725 263 3 0 -41.744 -127.508 -115.85 - 34 719.996 691 2 1 -41.7816 -127.497 -144.45 - 34 474.49 263 2 0 -41.7815 -127.496 -145.85 - 34 433.759 691 1 1 -41.7752 -127.487 -174.45 - 34 382.379 263 1 0 -41.7727 -127.487 -175.85 - 34 113.504 691 0 1 -41.7208 -127.488 -204.45 - 34 118.76 263 0 0 -41.7192 -127.491 -205.85 - 34 359.899 264 1 0 -41.3446 -127.35 -176.067 - 34 8.45078 754 0 1 -29.2348 -126.168 -204.45 - 34 135.269 753 0 1 -29.25 -126.159 -204.476 - 34 76.4642 274 0 0 -29.7971 -125.306 -205.85 - 34 43.0112 275 0 0 -29.8953 -125.15 -206.123 - 34 258.487 692 5 1 -41.65 -127.453 -54.5448 - 34 230.65 259 6 0 -41.9342 -128.151 -25.85 - 34 69.8841 293 6 0 -62.5472 -121.384 -26.2498 - 34 96.3741 294 6 0 -62.5926 -121.35 -26.1898 - 34 84.085 581 6 1 -63.6669 -121.368 -24.85 - 34 87.5492 580 6 1 -63.85 -121.349 -24.7317 - 34 101.324 579 6 1 -64.0502 -121.264 -24.6916 - 34 95.4289 578 6 1 -64.25 -121.407 -24.6797 - 34 187.255 577 6 1 -64.45 -121.327 -24.663 - 34 181.47 687 1 1 -42.4834 -127.186 -174.451 - 34 146.819 694 0 1 -41.152 -128.109 -204.45 - 34 12.411 260 0 0 -41.1635 -127.954 -205.85 - 34 105.013 261 0 0 -41.1638 -127.95 -205.888 - 34 428.365 262 1 0 -44.1789 -127.55 -176.037 - 34 118.666 186 1 0 -58.6898 -142.902 -176.25 - 34 120.615 262 2 0 -41.7477 -127.582 -145.85 - 34 126.775 690 0 1 -41.9338 -127.707 -204.45 - 34 132.103 262 0 0 -41.9452 -127.716 -205.85 - 34 120.025 155 4 0 -21.7165 -149.018 -86.25 -Number of digits in this event: 52 -Using G4ParticleGun... -Particle energy: 7.60081 LIN -Particle: gamma -Event: 35 -Number of tracker hits in this event: 10 - 35 205.85 731 2 1 -33.6669 26.4676 -144.47 - 35 251.98 1032 2 0 -33.6669 26.4677 -145.85 - 35 142.074 731 1 1 -33.6663 26.4715 -174.45 - 35 350.346 1032 1 0 -33.6657 26.4719 -175.85 - 35 138.389 731 0 1 -33.6581 26.4814 -204.45 - 35 167.225 1032 0 0 -33.6549 26.4824 -205.85 - 35 164.687 733 1 1 -33.375 26.5134 -174.45 - 35 244.544 735 0 1 -32.9129 26.4353 -204.45 - 35 151.546 1031 0 0 -32.9041 26.4315 -205.85 - 35 59.483 1405 10 0 135.217 101.29 94.15 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 9.90264 LIN -Particle: gamma -Event: 36 -Number of tracker hits in this event: 91 - 36 272.971 1387 8 1 97.7408 42.3673 35.55 - 36 235.249 1111 8 0 97.7408 42.367 34.15 - 36 315.33 1387 7 1 97.7407 42.3609 5.55 - 36 206.765 1111 7 0 97.7418 42.3589 4.15 - 36 219.213 1388 6 1 97.767 42.3211 -24.45 - 36 357.725 1111 6 0 97.7707 42.3191 -25.85 - 36 383.599 1388 5 1 97.8458 42.2738 -54.45 - 36 268.934 1111 5 0 97.8504 42.2712 -55.85 - 36 547.69 1388 4 1 97.9497 42.2189 -84.45 - 36 108.406 1389 4 1 97.95 42.2189 -84.4993 - 36 339.735 1110 4 0 97.9593 42.2171 -85.85 - 36 76.9861 1389 3 1 98.1483 42.1627 -114.45 - 36 41.3482 1390 3 1 98.15 42.1624 -114.681 - 36 269.029 1110 3 0 98.1584 42.1608 -115.85 - 36 115.473 1391 2 1 98.3604 42.1202 -144.45 - 36 258.572 1110 2 0 98.3747 42.117 -145.85 - 36 134.138 1392 1 1 98.6544 42.0643 -174.45 - 36 130.175 1110 1 0 98.664 42.0658 -175.85 - 36 334.881 1393 0 1 98.8574 42.0939 -204.45 - 36 151.433 1110 0 0 98.8649 42.0909 -205.85 - 36 24.198 1106 0 0 107.959 41.3207 -206.25 - 36 101.424 1110 7 0 97.7601 42.0719 4.15 - 36 119.18 1109 7 0 97.7588 42.05 4.01143 - 36 20.4047 991 7 0 161.219 18.3522 3.75 - 36 568.238 1388 7 1 97.7505 42.3584 5.40975 - 36 298.193 1388 3 1 97.8748 42.1324 -114.45 - 36 329.714 1388 2 1 97.8743 42.0597 -144.45 - 36 220.552 1388 1 1 97.9114 42.0174 -174.45 - 36 165.334 1109 1 0 97.9144 42.0156 -175.85 - 36 96.8694 1389 0 1 97.972 41.9738 -204.45 - 36 148.418 1109 0 0 97.973 41.9707 -205.85 - 36 116.992 1108 3 0 97.9624 41.7874 -115.85 - 36 103.923 1074 2 0 100.903 34.85 -145.924 - 36 35.9542 258 2 0 -177.864 -128.35 -146.068 - 36 132.688 1176 2 0 138.384 55.3738 -146.25 - 36 146.068 1594 2 1 139.029 55.3039 -144.85 - 36 121.284 1387 3 1 97.75 42.001 -114.495 - 36 111.309 1386 3 1 97.55 41.7482 -114.602 - 36 333.118 1385 3 1 97.3494 41.4013 -114.774 - 36 59.4477 1384 3 1 97.1492 41.289 -114.705 - 36 81.0277 1383 3 1 96.95 41.1693 -114.61 - 36 54.4472 1382 3 1 96.75 41.0383 -114.482 - 36 56.8866 1204 4 0 82.8645 60.9676 -86.25 - 36 84.0851 1205 4 0 82.8088 61.05 -86.1352 - 36 111.485 1312 4 1 82.4919 61.6614 -84.85 - 36 87.7715 1334 5 0 96.2619 87.0022 -56.25 - 36 50.7415 1335 5 0 96.2901 87.0501 -56.1954 - 36 174.197 1385 5 1 97.2401 86.8228 -54.85 - 36 109.477 1386 5 1 97.3501 86.7908 -54.6631 - 36 55.3096 1384 5 1 97.15 86.7767 -54.6904 - 36 62.4779 1383 5 1 96.95 86.7442 -54.742 - 36 54.6852 1382 5 1 96.75 86.7201 -54.7493 - 36 52.8336 1381 5 1 96.55 86.7143 -54.7068 - 36 72.0828 1380 5 1 96.3498 86.7371 -54.6476 - 36 25.2013 1379 5 1 96.15 86.7011 -54.5389 - 36 2.28952 1103 3 0 98.2417 40.6519 -115.85 - 36 125.093 1102 3 0 98.2444 40.65 -115.852 - 36 245.182 1391 3 1 98.3609 40.818 -114.85 - 36 125.572 1111 4 0 97.8644 42.2935 -85.85 - 36 80.7745 1392 3 1 98.5664 44.1149 -114.45 - 36 6.10799 1120 3 0 98.4585 44.2478 -115.85 - 36 105.421 1121 3 0 98.4568 44.25 -115.873 - 36 128.406 1381 2 1 96.4775 46.506 -144.45 - 36 49.7404 1133 2 0 96.5826 46.8175 -145.85 - 36 103.688 1134 2 0 96.5961 46.85 -145.996 - 36 134.874 1396 1 1 99.4266 53.0831 -174.45 - 36 85.8608 1166 1 0 99.2758 53.3804 -175.85 - 36 16.908 1167 1 0 99.2455 53.45 -176.188 - 36 183.465 1385 0 1 97.2159 58.6478 -204.45 - 36 180.67 1194 0 0 96.9941 58.9861 -205.85 - 36 85.0144 1195 0 0 96.9501 59.05 -206.119 - 36 291.078 1387 4 1 97.75 42.4618 -84.5603 - 36 2.74135 1387 2 1 97.7493 39.4497 -144.45 - 36 231.52 1096 2 0 97.8367 39.3691 -145.85 - 36 110.439 1397 1 1 99.692 38.0193 -174.45 - 36 130.982 1089 1 0 99.6701 37.8799 -175.85 - 36 39.2207 1088 1 0 99.6631 37.85 -176.165 - 36 213.487 1075 0 0 98.8482 35.0659 -205.85 - 36 152.788 1108 1 0 97.9605 41.827 -175.85 - 36 110.644 1076 0 0 98.6314 35.339 -205.85 - 36 15.1259 706 2 1 -38.65 -155.114 -144.769 - 36 59.5537 705 2 1 -38.8502 -155.393 -144.648 - 36 50.2611 704 2 1 -39.0501 -155.506 -144.565 - 36 288.62 703 2 1 -39.2502 -155.594 -144.503 - 36 184.991 702 2 1 -39.4501 -155.829 -144.475 - 36 94.8349 113 2 0 -39.2901 -157.399 -145.85 - 36 41.8769 112 2 0 -39.1584 -157.55 -146.109 - 36 124.359 220 2 0 -22.8326 -136.138 -146.25 - 36 162.736 221 2 0 -22.9091 -135.95 -146.019 - 36 230.09 784 2 1 -23.2006 -136.1 -144.85 - 36 92.679 783 2 1 -23.25 -136.106 -144.636 -Number of digits in this event: 46 -Using G4ParticleGun... -Particle energy: 7.15238 LIN -Particle: gamma -Event: 37 Number of tracker hits in this event: 0 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 8.50933 LIN +Particle energy: 9.38554 LIN Particle: gamma -Event: 38 -Number of tracker hits in this event: 14 - 38 330.375 1250 2 1 70.0868 16.066 -144.45 - 38 310.133 980 2 0 70.0879 16.0644 -145.85 - 38 259.802 1250 1 1 70.0978 16.0263 -174.45 - 38 197.708 979 1 0 70.1009 16.0247 -175.85 - 38 241.635 1250 0 1 70.1635 15.9871 -204.45 - 38 124.023 979 0 0 70.1689 15.9848 -205.85 - 38 35.9394 375 4 0 -132.884 -104.95 -86.2075 - 38 68.6448 374 4 0 -133.128 -105.15 -85.9979 - 38 104.114 232 4 1 -133.559 -105.051 -84.85 - 38 140.751 233 4 1 -133.55 -105.126 -84.7268 - 38 252.174 979 2 0 70.1604 16.05 -146.076 - 38 136.62 980 1 0 70.1302 16.099 -175.85 - 38 115.574 980 0 0 70.2075 16.1712 -205.85 - 38 65.6756 978 1 0 69.9269 15.8494 -176.172 -Number of digits in this event: 12 +Event: 34 +Number of tracker hits in this event: 9 + 34 447.522 767 12 0 97.0527 -26.6367 153.75 + 34 60.9358 768 12 0 98.1612 -26.4497 153.842 + 34 62.313 769 12 0 98.2167 -26.25 153.919 + 34 132.162 770 12 0 98.2017 -26.05 153.891 + 34 118.7 771 12 0 98.1562 -25.85 153.897 + 34 106.142 772 12 0 98.0957 -25.65 153.956 + 34 212.307 773 12 0 98.0729 -25.45 153.993 + 34 191.494 658 10 0 -51.4036 -48.4006 93.75 + 34 25.2847 645 10 1 -51.0429 -47.6615 95.15 +Number of digits in this event: 6 Using G4ParticleGun... -Particle energy: 9.8134 LIN +Particle energy: 5.14727 LIN Particle: gamma -Event: 39 -Number of tracker hits in this event: 96 - 39 128.355 340 7 1 -111.956 15.7724 5.54966 - 39 113.399 341 7 1 -111.95 15.7672 5.49483 - 39 100.672 977 7 0 -111.784 15.634 4.15 - 39 76.5102 356 6 1 -108.771 12.5987 -24.45 - 39 38.9467 357 6 1 -108.75 12.5697 -24.7069 - 39 262.93 961 6 0 -108.665 12.4413 -25.8507 - 39 151.731 368 5 1 -106.451 9.47321 -54.4501 - 39 65.2246 946 5 0 -106.336 9.28247 -55.8505 - 39 70.0038 945 5 0 -106.316 9.25 -56.0841 - 39 177.736 383 4 1 -103.509 5.54841 -84.45 - 39 126.306 927 4 0 -103.352 5.48542 -85.85 - 39 105.923 398 3 1 -100.445 3.97592 -114.45 - 39 87.8708 918 3 0 -100.174 3.71217 -115.851 - 39 17.549 917 3 0 -100.112 3.65 -116.179 - 39 95.4827 425 2 1 -95.0873 -1.7614 -144.45 - 39 135.138 889 2 0 -94.9018 -2.06889 -145.85 - 39 63.076 442 1 1 -91.5779 -8.53181 -174.452 - 39 64.334 443 1 1 -91.55 -8.58403 -174.679 - 39 12.5887 856 1 0 -91.3981 -8.84168 -175.85 - 39 102.854 855 1 0 -91.393 -8.85 -175.888 - 39 104.956 462 0 1 -87.6312 -14.7543 -204.45 - 39 112.598 824 0 0 -87.4596 -15.0514 -205.85 - 39 115.705 978 7 0 -111.971 15.7953 4.15 - 39 115.287 340 6 1 -111.97 15.7979 -24.45 - 39 141.59 978 6 0 -111.971 15.7984 -25.85 - 39 157.267 340 5 1 -111.981 15.812 -54.45 - 39 121.172 978 5 0 -111.982 15.8123 -55.85 - 39 118.637 340 4 1 -112.001 15.8154 -84.45 - 39 198.331 978 4 0 -112.004 15.8143 -85.85 - 39 183.496 340 3 1 -112.044 15.7938 -114.45 - 39 401.732 978 3 0 -112.048 15.7947 -115.85 - 39 365.13 340 2 1 -112.123 15.8157 -144.45 - 39 125.138 978 2 0 -112.128 15.816 -145.85 - 39 401.146 339 1 1 -112.24 15.8233 -174.45 - 39 559.79 978 1 0 -112.245 15.8256 -175.85 - 39 578.719 339 0 1 -112.34 15.8604 -204.45 - 39 244.055 979 0 0 -112.343 15.8599 -205.85 - 39 98.9232 1023 3 1 24.65 -12.9413 -114.571 - 39 5.33349 341 2 1 -111.95 15.9413 -144.829 - 39 43.0952 980 2 0 -111.51 16.2102 -145.85 - 39 173.026 981 2 0 -111.454 16.25 -145.979 - 39 93.9042 379 1 1 -104.305 31.922 -174.45 - 39 34.9095 380 1 1 -104.15 31.9893 -174.769 - 39 99.3162 1060 1 0 -103.592 32.182 -175.85 - 39 20.8538 1061 1 0 -103.439 32.25 -176.17 - 39 16.7118 458 0 1 -88.2831 39.3521 -204.45 - 39 92.0586 459 0 1 -88.2499 39.3586 -204.52 - 39 5.109 460 0 1 -88.05 39.3374 -204.831 - 39 93.503 1096 0 0 -87.235 39.2609 -205.852 - 39 24.3245 1095 0 0 -86.9903 39.25 -206.163 - 39 140.365 979 2 0 -112.179 15.8751 -145.85 - 39 122.354 334 1 1 -113.158 16.1962 -174.45 - 39 215.553 980 1 0 -113.245 16.1691 -175.85 - 39 229.245 331 0 1 -113.826 16.7065 -204.45 - 39 128.403 984 0 0 -113.787 16.9257 -205.85 - 39 1230.1 340 1 1 -112.137 15.7483 -174.45 - 39 109.902 977 0 0 -112.232 15.6407 -205.85 - 39 102.246 978 0 0 -112.179 15.7346 -205.85 - 39 111.599 989 0 0 -132.472 17.9622 -206.25 - 39 205.59 234 0 1 -133.225 18.5422 -204.85 - 39 52.7613 481 0 1 -83.85 -20.6113 -204.63 - 39 491.398 979 1 0 -112.086 15.8524 -175.85 - 39 146.939 340 0 1 -112.143 15.9747 -204.45 - 39 11.6055 522 3 1 -75.65 140.242 -114.726 - 39 152.124 476 0 1 -84.85 21.656 -204.526 - 39 123.073 977 1 0 -112.008 15.6243 -175.85 - 39 183.13 346 0 1 -110.816 11.2725 -204.45 - 39 8.52276 955 0 0 -110.723 11.058 -205.85 - 39 99.6304 954 0 0 -110.72 11.05 -205.901 - 39 140.359 345 0 1 -111.019 16.6635 -204.45 - 39 96.6437 983 0 0 -110.86 16.7452 -205.85 - 39 114.192 336 0 1 -112.819 20.7181 -204.45 - 39 157.91 1005 0 0 -112.705 21.0559 -205.85 - 39 277.257 353 0 1 -109.489 17.0904 -204.45 - 39 104.009 985 0 0 -109.158 17.0911 -205.85 - 39 0.711345 979 3 0 -111.974 15.85 -116.247 - 39 12.1835 364 3 0 -68.2785 -107.31 -116.25 - 39 206.662 363 3 0 -68.2799 -107.35 -116.232 - 39 200.332 362 3 0 -68.178 -107.55 -116.188 - 39 103.272 342 2 1 -111.635 15.2798 -144.45 - 39 202.684 974 2 0 -111.862 15.0412 -145.85 - 39 182.561 320 1 1 -116.142 9.11743 -174.451 - 39 193.167 319 1 1 -116.15 9.09073 -174.52 - 39 109.095 942 1 0 -116.233 8.52047 -175.85 - 39 82.5212 941 1 0 -116.242 8.45 -176.008 - 39 172.046 312 0 1 -117.635 -3.42613 -204.45 - 39 57.0099 313 0 1 -117.55 -3.78273 -204.723 - 39 68.1421 872 0 0 -117.142 -5.45278 -205.85 - 39 72.6395 871 0 0 -117.09 -5.65 -205.978 - 39 115.215 870 0 0 -117.041 -5.85 -206.099 - 39 57.6161 869 0 0 -117.001 -6.05017 -206.212 - 39 31.9188 1107 1 0 -114.762 41.5462 -176.25 - 39 86.677 1108 1 0 -114.741 41.6503 -176.223 - 39 138.622 321 1 1 -115.95 8.91129 -174.787 - 39 36.137 947 1 0 -115.553 9.64613 -175.85 - 39 233.837 948 1 0 -115.55 9.65008 -175.855 -Number of digits in this event: 45 -Using G4ParticleGun... -Particle energy: 4.81373 LIN -Particle: gamma -Event: 40 -Number of tracker hits in this event: 1 - 40 32.2368 1538 0 0 -89.4006 127.773 -206.25 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 8.30549 LIN -Particle: gamma -Event: 41 -Number of tracker hits in this event: 10 - 41 249.699 1229 2 1 65.9987 -22.6076 -144.45 - 41 293.539 787 2 0 66.0024 -22.6148 -145.85 - 41 166.892 1230 1 1 66.0742 -22.7779 -174.45 - 41 144.8 786 1 0 66.0796 -22.786 -175.85 - 41 123.643 1230 0 1 66.1785 -22.9534 -204.45 - 41 106.92 785 0 0 66.1741 -22.9556 -205.85 - 41 118.171 1229 1 1 65.974 -22.5924 -174.45 - 41 326.606 787 1 0 65.9735 -22.5915 -175.85 - 41 111.809 1229 0 1 65.9653 -22.5706 -204.45 - 41 268.795 787 0 0 65.9639 -22.5689 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 5.60795 LIN -Particle: gamma -Event: 42 -Number of tracker hits in this event: 52 - 42 210.756 1571 7 1 134.465 -0.182506 5.55 - 42 301.501 899 7 0 134.466 -0.185407 4.15 - 42 331.129 1571 6 1 134.498 -0.252259 -24.45 - 42 112.946 898 6 0 134.505 -0.251405 -25.85 - 42 98.0654 1572 5 1 134.644 -0.233858 -54.45 - 42 205.003 899 5 0 134.648 -0.233539 -55.85 - 42 383.985 1572 4 1 134.679 -0.255763 -84.45 - 42 474.484 898 4 0 134.674 -0.276048 -85.85 - 42 448.384 1571 3 1 134.496 -0.698658 -114.45 - 42 108.742 896 3 0 134.486 -0.738843 -115.85 - 42 115.765 1570 2 1 134.308 -1.5906 -144.45 - 42 155.338 892 2 0 134.326 -1.6064 -145.85 - 42 184.605 1572 1 1 134.579 -2.0288 -174.45 - 42 160.052 889 1 0 134.57 -2.0845 -175.85 - 42 107.855 1572 0 1 134.721 -3.16706 -204.45 - 42 139.258 884 0 0 134.794 -3.2116 -205.85 - 42 3.18989 1317 0 1 83.4967 99.6685 -204.85 - 42 80.5847 1307 11 1 81.5263 -69.3295 125.15 - 42 127.971 462 4 0 -49.7469 -87.45 -86.0736 - 42 597.69 1572 3 1 134.622 -0.586515 -114.45 - 42 263.58 1573 3 1 134.75 -0.694886 -114.798 - 42 235.882 898 3 0 134.618 -0.340252 -115.85 - 42 156.239 1573 1 1 134.819 0.40851 -174.45 - 42 230.631 901 1 0 134.831 0.434052 -175.85 - 42 120.198 1574 0 1 135.121 0.955699 -204.45 - 42 159.924 904 0 0 135.166 0.928738 -205.85 - 42 117.333 899 3 0 134.587 -0.206418 -115.85 - 42 113.686 1575 2 1 135.264 0.0676651 -144.45 - 42 102.832 900 2 0 135.309 0.0791917 -145.85 - 42 127.212 1580 1 1 136.233 0.336572 -174.45 - 42 116.58 1584 0 1 137.073 0.541679 -204.45 - 42 132.985 902 0 0 137.106 0.571103 -205.85 - 42 164.167 899 6 0 134.467 -0.197592 -25.85 - 42 275.74 1571 5 1 134.484 -0.282271 -54.45 - 42 129.416 898 5 0 134.483 -0.283884 -55.85 - 42 133.693 1571 4 1 134.465 -0.321446 -84.45 - 42 204.963 1571 2 1 134.41 -0.344346 -144.45 - 42 154.291 898 2 0 134.409 -0.345587 -145.85 - 42 537.26 1571 1 1 134.405 -0.368349 -174.45 - 42 405.122 898 1 0 134.403 -0.370431 -175.85 - 42 145.652 1571 0 1 134.37 -0.417013 -204.45 - 42 289.119 898 0 0 134.367 -0.418971 -205.85 - 42 162.355 1570 1 1 134.35 -0.387304 -174.703 - 42 2.63128 1054 2 1 30.9496 -5.47884 -144.85 - 42 213.468 1570 0 1 134.305 -0.317874 -204.45 - 42 210.167 897 0 0 134.517 -0.45492 -205.85 - 42 204.658 536 6 0 132.699 -72.8264 -26.25 - 42 116.651 1577 0 1 135.566 0.724448 -204.45 - 42 96.4015 903 0 0 135.662 0.687326 -205.85 - 42 114.054 1563 0 1 132.905 -1.56027 -204.45 - 42 108.298 891 0 0 132.823 -1.68974 -205.85 - 42 195.264 548 1 0 -164.663 -70.25 -175.981 -Number of digits in this event: 38 -Using G4ParticleGun... -Particle energy: 5.95935 LIN -Particle: gamma -Event: 43 -Number of tracker hits in this event: 16 - 43 301.067 1314 2 1 82.9179 33.5457 -144.45 - 43 233.612 1067 2 0 82.9172 33.5456 -145.85 - 43 165.613 1314 1 1 82.9088 33.5445 -174.45 - 43 116.095 1067 1 0 82.91 33.5425 -175.85 - 43 236.097 1314 0 1 82.9328 33.5075 -204.45 - 43 135.031 1067 0 0 82.9353 33.507 -205.85 - 43 132.379 1315 1 1 83.0813 33.321 -174.45 - 43 146.373 1066 1 0 83.0756 33.3107 -175.85 - 43 137.971 1065 0 0 82.94 33.1299 -205.85 - 43 95.4426 330 2 0 68.7143 -113.95 -145.969 - 43 148.917 1401 0 0 46.3114 100.442 -206.25 - 43 50.9016 1132 0 1 46.5884 100.453 -204.85 - 43 91.104 1133 0 1 46.6501 100.404 -204.688 - 43 33.5861 1134 0 1 46.85 100.421 -204.495 - 43 93.3079 1126 1 1 45.3943 -28.4772 -174.45 - 43 173.228 1127 1 1 45.45 -28.5234 -174.589 -Number of digits in this event: 11 -Using G4ParticleGun... -Particle energy: 6.5938 LIN -Particle: gamma -Event: 44 -Number of tracker hits in this event: 53 - 44 261.294 869 5 1 -6.15032 -33.0753 -54.45 - 44 347.935 734 5 0 -6.17551 -33.0697 -55.85 - 44 568.347 865 4 1 -6.95247 -32.8185 -84.45 - 44 133.446 736 4 0 -7.00505 -32.8056 -85.85 - 44 108.339 859 3 1 -8.11481 -32.4037 -114.45 - 44 117.165 738 3 0 -8.18993 -32.3962 -115.85 - 44 126.111 851 2 1 -9.77954 -32.1798 -144.45 - 44 208.329 739 2 0 -9.86758 -32.1716 -145.85 - 44 117.792 841 1 1 -11.7953 -31.865 -174.45 - 44 141.942 740 1 0 -11.8523 -31.8856 -175.85 - 44 112.383 835 0 1 -13.0003 -32.2531 -204.45 - 44 131.561 738 0 0 -13.029 -32.2639 -205.85 - 44 6.15079 866 4 1 -6.84995 -32.9387 -84.6445 - 44 239.382 869 0 1 -6.05959 -33.3424 -204.45 - 44 586.448 870 0 1 -6.05 -33.3353 -204.471 - 44 94.8152 735 0 0 -5.27825 -32.8891 -205.85 - 44 282.863 736 0 0 -5.20538 -32.85 -205.974 - 44 172.801 869 4 1 -6.1381 -33.1057 -84.45 - 44 185.403 734 4 0 -6.13777 -33.1068 -85.85 - 44 124.354 869 3 1 -6.13082 -33.1294 -114.45 - 44 116.334 734 3 0 -6.12797 -33.13 -115.85 - 44 143.615 869 2 1 -6.07047 -33.1407 -144.45 - 44 127.541 734 2 0 -6.06668 -33.1395 -145.85 - 44 121.532 870 1 1 -5.97992 -33.1131 -174.45 - 44 129.288 734 1 0 -5.97474 -33.1111 -175.85 - 44 496.553 734 0 0 -5.86932 -33.0716 -205.85 - 44 41.4193 1036 0 1 27.25 -66.3466 -204.842 - 44 98.8278 199 0 0 92.7899 -140.268 -206.25 - 44 288.554 198 0 0 92.9988 -140.35 -206.096 - 44 59.4796 1367 0 1 93.56 -140.868 -204.85 - 44 49.1781 1366 0 1 93.55 -140.902 -204.761 - 44 298.972 194 0 0 93.0483 -141.253 -205.85 - 44 63.2345 141 9 1 -151.75 -115.343 65.3484 - 44 356.25 200 0 0 93.1728 -140.04 -206.25 - 44 119.923 665 4 1 -46.9244 -8.25399 -84.4502 - 44 148.875 849 3 1 -10.2172 -37.1833 -114.45 - 44 54.8168 657 4 0 -59.5315 -48.6031 -86.25 - 44 214.407 751 4 0 -90.2825 -29.8079 -86.2499 - 44 9.6919 1111 4 0 23.9394 42.25 -86.1554 - 44 32.8299 696 4 0 24.0893 -40.7691 -86.25 - 44 13.1218 387 4 0 132.904 -102.586 -86.25 - 44 21.5226 768 0 0 -11.7018 -26.3627 -205.85 - 44 19.8823 838 0 1 -12.4335 -25.0994 -204.85 - 44 52.7135 837 0 1 -12.45 -25.0798 -204.843 - 44 110.345 775 0 0 -12.2301 -24.877 -205.85 - 44 175.227 417 3 0 149.337 -96.5506 -116.25 - 44 102.712 463 10 0 -102.924 -87.3971 93.7501 - 44 108.829 464 10 0 -103.209 -87.25 93.9111 - 44 25.5595 465 10 0 -103.53 -87.0498 94.0746 - 44 240.109 382 10 1 -103.72 -86.6748 95.1507 - 44 180.835 381 10 1 -103.75 -86.6953 95.2649 - 44 250.51 459 10 0 -103.853 -88.0699 94.15 - 44 273.792 458 10 0 -104.027 -88.25 93.9325 -Number of digits in this event: 31 -Using G4ParticleGun... -Particle energy: 8.57298 LIN -Particle: gamma -Event: 45 -Number of tracker hits in this event: 7 - 45 87.2357 1180 6 1 56.0965 -28.1574 -24.4504 - 45 83.3278 1179 6 1 56.0499 -28.1772 -24.541 - 45 112.562 1409 5 1 102.008 10.3796 -54.85 - 45 0.292594 1031 6 0 102.69 26.2804 -26.25 - 45 180.279 915 6 0 125.844 3.22446 -26.25 - 45 86.8005 916 6 0 125.853 3.25007 -26.1074 - 45 350.88 948 5 0 102.237 9.841 -55.85 +Event: 35 +Number of tracker hits in this event: 9 + 35 111.789 445 4 1 -90.95 -41.4117 -84.8026 + 35 82.4786 444 4 1 -91.15 -41.2883 -84.5186 + 35 57.7229 598 2 0 4.09539 -60.2985 -146.25 + 35 198.814 752 3 1 -29.5986 140.137 -114.85 + 35 116.347 751 3 1 -29.65 139.928 -114.476 + 35 44.8267 750 3 1 -29.85 140.094 -114.47 + 35 10.7563 1748 1 0 122.978 169.75 -176.041 + 35 153.852 1749 1 0 123.064 169.95 -175.995 + 35 80.3567 1750 1 0 123.019 170.15 -176.073 Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 1.49659 LIN +Particle energy: 9.01643 LIN +Particle: gamma +Event: 36 +Number of tracker hits in this event: 93 + 36 339.244 927 8 1 5.55881 -25.9667 35.55 + 36 252.325 770 8 0 5.55701 -25.9648 34.15 + 36 110.477 927 7 1 5.52472 -25.9264 5.55 + 36 134.374 770 7 0 5.52366 -25.9245 4.15 + 36 124.815 927 6 1 5.49945 -25.8867 -24.45 + 36 122.326 770 6 0 5.49958 -25.886 -25.85 + 36 116.043 927 5 1 5.50264 -25.8763 -54.45 + 36 139.996 770 5 0 5.50273 -25.8747 -55.85 + 36 132.076 927 4 1 5.50944 -25.836 -84.45 + 36 179.047 771 4 0 5.51094 -25.834 -85.85 + 36 419.412 927 3 1 5.54872 -25.7891 -114.45 + 36 624.981 771 3 0 5.55068 -25.7869 -115.85 + 36 656.115 927 2 1 5.58176 -25.7435 -144.45 + 36 341.74 771 2 0 5.5835 -25.7413 -145.85 + 36 181.038 927 1 1 5.6194 -25.6889 -174.45 + 36 137.591 771 1 0 5.62086 -25.6859 -175.85 + 36 114.21 928 0 1 5.65487 -25.621 -204.45 + 36 226.73 772 0 0 5.65726 -25.6176 -205.85 + 36 29.0903 1057 0 1 31.4604 -3.43195 -204.85 + 36 124.286 1041 1 0 70.1783 28.25 -175.97 + 36 4.41879 1243 1 1 68.7834 27.9533 -174.85 + 36 70.4615 1036 1 0 68.8254 27.3984 -175.85 + 36 116.41 1244 1 1 68.904 27.9451 -174.85 + 36 34.2883 1058 0 1 31.65 -3.24591 -204.471 + 36 226.721 928 1 1 5.65 -25.6685 -174.587 + 36 112.436 923 2 1 4.82896 -26.064 -144.45 + 36 205.753 769 2 0 4.78679 -26.0794 -145.85 + 36 5.603 919 1 1 3.8509 -26.4781 -174.45 + 36 104.16 918 1 1 3.85 -26.4787 -174.475 + 36 108.935 767 1 0 3.80261 -26.5082 -175.85 + 36 123.019 913 0 1 2.68542 -27.119 -204.45 + 36 174.226 764 0 0 2.67576 -27.1489 -205.85 + 36 225.99 772 2 0 5.59521 -25.5119 -145.85 + 36 120.336 777 1 0 5.8752 -24.5587 -175.85 + 36 87.9018 930 0 1 6.08226 -25.5885 -204.45 + 36 28.6162 771 0 0 6.19414 -25.65 -206.144 + 36 156.333 788 1 1 -22.4411 2.50237 -174.45 + 36 124.144 787 1 1 -22.4501 2.5033 -174.474 + 36 118.74 1211 4 1 62.39 76.4495 -84.85 + 36 269.182 776 2 0 4.56954 -24.8254 -145.85 + 36 16.6504 777 2 0 4.44265 -24.65 -145.997 + 36 102.866 770 3 0 5.38847 -25.8501 -116.085 + 36 179.233 770 2 0 5.40019 -25.8783 -145.85 + 36 104.677 920 1 1 4.13371 -28.5568 -174.45 + 36 203.219 756 1 0 4.04445 -28.7151 -175.85 + 36 138 905 0 1 1.22577 -31.6275 -204.45 + 36 126.97 740 0 0 1.16651 -31.967 -205.851 + 36 25.4439 739 0 0 1.14924 -32.05 -206.186 + 36 297.169 593 0 0 -19.8852 -61.3476 -206.25 + 36 253.278 924 1 1 4.87819 -25.8278 -174.45 + 36 110.071 770 1 0 4.78243 -25.85 -175.869 + 36 120.862 914 0 1 2.94822 -26.5012 -204.45 + 36 115.29 767 0 0 2.87998 -26.5472 -205.85 + 36 13.3885 923 1 1 4.85 -25.5977 -174.837 + 36 110.247 786 1 0 1.28058 -22.7064 -175.85 + 36 42.489 787 1 0 1.20108 -22.6499 -175.904 + 36 286.794 928 7 1 5.69067 -25.6292 5.55 + 36 136.097 772 7 0 5.68424 -25.5913 4.15 + 36 103.357 926 6 1 5.42392 -24.6975 -24.45 + 36 81.5701 776 6 0 5.4138 -24.6588 -25.85 + 36 48.4108 777 6 0 5.41163 -24.65 -26.1345 + 36 108.617 926 5 1 5.26134 -23.9957 -54.45 + 36 121.375 780 5 0 5.22851 -23.9959 -55.85 + 36 167.363 922 4 1 4.45774 -24.1643 -84.45 + 36 111.644 779 4 0 4.43582 -24.1607 -85.85 + 36 129.902 919 3 1 4.01241 -24.1617 -114.45 + 36 203.868 779 3 0 3.98179 -24.2257 -115.85 + 36 130.575 915 2 1 3.11423 -25.4099 -144.45 + 36 101.285 909 1 1 2.04426 -28.6555 -174.45 + 36 211.683 757 1 0 2.02193 -28.634 -175.85 + 36 93.3861 907 0 1 1.49215 -28.2686 -204.45 + 36 208.775 759 0 0 1.38331 -28.1601 -205.85 + 36 134.595 778 3 0 3.97179 -24.25 -116.159 + 36 15.5569 985 2 1 17.202 127.089 -144.45 + 36 94.5995 986 2 1 17.2501 127.043 -144.48 + 36 173.164 987 2 1 17.45 126.82 -144.58 + 36 109.591 1528 2 0 17.7476 125.948 -145.85 + 36 33.7104 1527 2 0 17.7711 125.75 -146.135 + 36 21.1011 1282 2 0 21.589 76.4864 -146.25 + 36 180.596 1281 2 0 21.5953 76.4498 -146.2 + 36 92.804 1280 2 0 21.6626 76.25 -146.053 + 36 3.27127 1010 2 1 22.2446 76.526 -144.85 + 36 102.812 1011 2 1 22.25 76.533 -144.834 + 36 107.278 1012 2 1 22.45 76.5648 -144.644 + 36 195.506 1013 2 1 22.65 76.7688 -144.587 + 36 171.132 1285 2 0 22.9587 77.2016 -145.85 + 36 155.477 1016 2 1 23.3625 77.403 -144.85 + 36 245.294 238 3 1 -132.459 -7.05633 -114.45 + 36 223.77 871 3 0 -132.427 -5.82268 -115.85 + 36 147.296 1071 0 0 -35.9906 34.3921 -206.25 + 36 32.8287 716 0 1 -36.7668 34.3687 -204.85 + 36 255.944 715 0 1 -36.85 34.3849 -204.784 + 36 250.89 714 0 1 -37.05 34.4576 -204.547 +Number of digits in this event: 55 +Using G4ParticleGun... +Particle energy: 5.62349 LIN +Particle: gamma +Event: 37 +Number of tracker hits in this event: 42 + 37 306.111 588 6 1 -62.4475 103.239 -24.45 + 37 388.69 1415 6 0 -62.45 103.236 -25.85 + 37 133.376 587 5 1 -62.497 103.166 -54.45 + 37 259.147 1415 5 0 -62.4949 103.176 -55.85 + 37 268.115 587 4 1 -62.4639 103.454 -84.45 + 37 103.014 1416 4 0 -62.4559 103.427 -85.85 + 37 114.591 589 3 1 -62.0876 102.969 -114.45 + 37 119.788 1413 3 0 -62.054 102.906 -115.85 + 37 235.059 592 2 1 -61.4745 101.483 -144.45 + 37 119.859 1406 2 0 -61.4501 101.435 -145.85 + 37 112.046 594 1 1 -61.0736 100.697 -174.45 + 37 105.396 1402 1 0 -61.0637 100.573 -175.85 + 37 38.0061 1401 1 0 -61.0614 100.55 -176.105 + 37 167.332 596 0 1 -60.731 97.8967 -204.45 + 37 153.119 1387 0 0 -60.6977 97.727 -205.851 + 37 95.8499 1388 0 0 -60.7103 97.75 -206.103 + 37 59.1819 597 0 1 -60.6493 97.758 -204.476 + 37 269.796 598 0 1 -60.45 97.6933 -204.544 + 37 47.2082 599 0 1 -60.2496 97.6954 -204.563 + 37 63.8335 600 0 1 -60.0493 97.6584 -204.625 + 37 183.652 601 0 1 -59.85 97.6131 -204.627 + 37 82.8624 602 0 1 -59.65 97.5716 -204.664 + 37 88.445 603 0 1 -59.4499 97.4845 -204.676 + 37 99.6668 604 0 1 -59.2491 97.3901 -204.743 + 37 101.282 605 0 1 -59.05 97.1818 -204.763 + 37 135.056 606 0 1 -58.85 96.9557 -204.73 + 37 70.7249 607 0 1 -58.65 96.9672 -204.769 + 37 30.3296 608 0 1 -58.45 96.9213 -204.806 + 37 390.077 1382 0 0 -56.7832 96.6607 -205.85 + 37 162.981 1218 4 0 -9.71402 63.8248 -86.25 + 37 71.5355 556 7 1 -68.6972 -91.6839 5.55 + 37 129.716 588 5 1 -62.4342 103.246 -54.45 + 37 120.63 1415 4 0 -62.4534 103.266 -85.85 + 37 147.484 588 3 1 -62.4357 103.254 -114.45 + 37 117.99 1415 3 0 -62.4363 103.252 -115.85 + 37 129.129 588 2 1 -62.3781 103.204 -144.45 + 37 149.908 1415 2 0 -62.3823 103.184 -145.85 + 37 118.424 588 1 1 -62.4482 102.795 -174.45 + 37 129.288 1413 1 0 -62.4413 102.791 -175.85 + 37 112.838 587 0 1 -62.5457 102.624 -204.45 + 37 137.197 1412 0 0 -62.5866 102.643 -205.85 + 37 122.24 587 6 1 -62.45 103.237 -24.8435 +Number of digits in this event: 24 +Using G4ParticleGun... +Particle energy: 2.44643 LIN +Particle: gamma +Event: 38 +Number of tracker hits in this event: 33 + 38 315.18 1275 4 1 75.1051 120.472 -84.45 + 38 226.65 1501 4 0 75.085 120.488 -85.85 + 38 296.266 1274 3 1 74.9005 120.613 -114.45 + 38 122.863 1502 3 0 74.8711 120.619 -115.85 + 38 135.062 1270 2 1 74.2113 120.721 -144.45 + 38 206.97 1502 2 0 74.1416 120.73 -145.85 + 38 378.371 1264 1 1 72.8825 121.014 -174.451 + 38 412.663 1504 1 0 72.8654 120.976 -175.85 + 38 104.132 1262 0 1 72.4775 120.602 -204.45 + 38 357 1501 0 0 72.5066 120.544 -205.85 + 38 187.356 1263 1 1 72.85 121.008 -174.727 + 38 114.48 1245 0 1 69.0785 120.793 -204.45 + 38 125.823 1505 0 0 69.1027 121.217 -205.85 + 38 122.477 1264 0 1 73.007 120.296 -204.45 + 38 109.128 1502 0 0 72.9688 120.55 -205.875 + 38 81.6106 1398 0 0 73.2458 99.9428 -206.25 + 38 76.5746 1397 0 0 73.2728 99.75 -206.112 + 38 79.1752 1396 0 0 73.3769 99.5499 -206.006 + 38 109.368 1269 0 1 73.9228 99.1806 -204.85 + 38 10.0689 1270 0 1 74.05 99.0539 -204.49 + 38 170.617 1704 3 1 160.95 99.7375 -114.753 + 38 10.142 1273 3 1 74.8499 120.725 -114.468 + 38 130.613 1275 3 1 75.1261 120.491 -114.45 + 38 119.04 1501 3 0 75.1236 120.494 -115.85 + 38 112.325 1275 2 1 75.0862 120.561 -144.45 + 38 126.473 1274 1 1 74.9425 120.673 -174.45 + 38 105.187 1502 1 0 74.9342 120.68 -175.85 + 38 106.295 1273 0 1 74.7783 120.823 -204.45 + 38 190.074 1503 0 0 74.7696 120.828 -205.85 + 38 65.5789 1526 0 0 79.8181 125.397 -206.25 + 38 241.43 1299 0 1 79.9399 126.199 -204.85 + 38 211.759 1340 0 0 103.686 88.25 -206.119 + 38 22.6829 1408 0 1 101.75 27.663 -204.503 +Number of digits in this event: 21 +Using G4ParticleGun... +Particle energy: 1.58942 LIN +Particle: gamma +Event: 39 +Number of tracker hits in this event: 32 + 39 139.965 916 7 1 3.43031 81.0662 5.55 + 39 65.3154 1309 7 0 3.02158 81.8907 4.15 + 39 73.7559 1310 7 0 2.95201 82.05 3.95807 + 39 29.3764 1311 7 0 2.90302 82.25 3.80349 + 39 52.2626 1781 7 0 44.4163 176.35 3.93251 + 39 107.713 917 7 1 3.5095 81.0421 5.55 + 39 116.431 1304 7 0 3.51003 81.0419 4.15 + 39 125.523 917 6 1 3.50923 81.0466 -24.45 + 39 105.977 1304 6 0 3.50681 81.0459 -25.85 + 39 115.532 916 5 1 3.43867 81.0253 -54.45 + 39 121.109 1304 5 0 3.44786 81.0263 -55.85 + 39 126.672 917 4 1 3.62682 81.0578 -84.45 + 39 100.469 1305 4 0 3.6455 81.0647 -85.85 + 39 106.537 919 3 1 4.02906 81.2375 -114.45 + 39 145.414 1305 3 0 4.05094 81.2389 -115.85 + 39 181.252 922 2 1 4.51637 81.2674 -144.45 + 39 117.174 1306 2 0 4.53997 81.2737 -145.85 + 39 169.429 925 1 1 5.07494 81.3884 -174.45 + 39 284.646 1306 1 0 5.09311 81.3939 -175.85 + 39 147.916 927 0 1 5.46968 81.5012 -204.45 + 39 364.772 1307 0 0 5.47444 81.4997 -205.85 + 39 456.438 629 3 1 -54.0916 -26.346 -114.85 + 39 4.87211 1157 3 0 -21.926 51.65 -116.226 + 39 126.414 787 3 1 -22.4784 51.4643 -114.85 + 39 257.241 920 1 1 4.16871 81.0779 -174.45 + 39 139.874 1305 1 0 4.08263 81.0961 -175.85 + 39 179.521 907 0 1 1.58546 81.7496 -204.45 + 39 47.5625 937 0 1 7.62581 86.5718 -204.45 + 39 113.637 938 0 1 7.65001 86.6604 -204.596 + 39 81.3864 1336 0 0 7.89173 87.3409 -205.85 + 39 62.8906 1337 0 0 7.94287 87.45 -206.05 + 39 162.946 1109 1 0 73.5435 41.85 -176.147 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 4.60539 LIN +Particle: gamma +Event: 40 +Number of tracker hits in this event: 7 + 40 416.685 441 4 1 -91.8421 70.2213 -84.85 + 40 6.16796 442 4 1 -91.75 70.2496 -84.4749 + 40 94.3398 440 4 1 -91.95 70.0732 -84.8395 + 40 21.1214 1245 4 0 -92.4639 69.0947 -85.85 + 40 204.337 1244 4 0 -92.4884 69.05 -85.8957 + 40 220.214 1243 4 0 -92.7778 68.85 -86.1855 + 40 11.2955 74 7 1 -165.15 17.0924 5.51997 +Number of digits in this event: 5 +Using G4ParticleGun... +Particle energy: 4.52854 LIN +Particle: gamma +Event: 41 +Number of tracker hits in this event: 141 + 41 240.324 802 10 1 -19.5086 0.992681 95.55 + 41 223.119 904 10 0 -19.5091 0.989032 94.15 + 41 753.46 802 9 1 -19.5196 0.908178 65.55 + 41 347.388 904 9 0 -19.5224 0.90055 64.15 + 41 114.955 802 8 1 -19.5813 0.74633 35.55 + 41 89.9581 903 8 0 -19.5849 0.736818 34.15 + 41 241.394 801 7 1 -19.6537 0.547519 5.55 + 41 127.125 902 7 0 -19.659 0.53701 4.15 + 41 152.286 801 6 1 -19.7666 0.326985 -24.45 + 41 111.323 901 6 0 -19.7726 0.319248 -25.85 + 41 123.895 800 5 1 -19.8943 0.17594 -54.45 + 41 113.541 900 5 0 -19.8995 0.168947 -55.85 + 41 106.245 799 3 1 -20.1893 -0.22183 -114.45 + 41 135.74 899 3 0 -20.1959 -0.228884 -115.85 + 41 160.147 798 2 1 -20.3418 -0.36777 -144.45 + 41 118.887 898 2 0 -20.3489 -0.375472 -145.85 + 41 120.832 797 1 1 -20.5003 -0.531488 -174.45 + 41 111.706 897 1 0 -20.5077 -0.533327 -175.85 + 41 116.122 796 0 1 -20.6653 -0.567649 -204.45 + 41 158.457 897 0 0 -20.674 -0.57608 -205.85 + 41 101.592 899 2 0 -20.1179 -0.108809 -145.85 + 41 311.523 905 9 0 -19.6524 1.22206 64.15 + 41 126.929 800 8 1 -19.978 1.51634 35.55 + 41 192.836 907 8 0 -19.9716 1.54499 34.15 + 41 123.683 912 7 0 -19.7396 2.4992 4.15 + 41 150.694 802 6 1 -19.6323 2.95725 -24.45 + 41 127.696 914 6 0 -19.6093 2.97586 -25.85 + 41 125.521 805 5 1 -18.9969 3.32422 -54.45 + 41 149.327 916 5 0 -18.9673 3.3554 -55.85 + 41 184.349 809 4 1 -18.2299 3.99161 -84.45 + 41 108.976 919 4 0 -18.194 4.00936 -85.85 + 41 114.593 813 3 1 -17.3215 4.37582 -114.45 + 41 196.355 921 3 0 -17.3076 4.39434 -115.85 + 41 86.2563 815 2 1 -17.0119 4.87022 -144.45 + 41 71.2817 814 2 1 -17.05 4.87178 -144.683 + 41 108.71 924 2 0 -17.2634 4.86745 -145.85 + 41 132.895 790 1 1 -21.9917 4.92058 -174.45 + 41 122.297 923 1 0 -22.1119 4.77225 -175.85 + 41 251.755 777 0 1 -24.5098 1.8332 -204.45 + 41 130.085 907 0 0 -24.6583 1.63246 -205.85 + 41 139.994 926 2 0 -16.1794 5.25983 -145.85 + 41 55.7883 758 2 0 -45.1011 -28.2866 -146.25 + 41 116.928 757 2 0 -45.1563 -28.45 -146.169 + 41 182.954 756 2 0 -45.5023 -28.65 -146.14 + 41 182.079 755 2 0 -45.8887 -28.85 -146.145 + 41 63.2168 666 2 1 -46.7645 -28.3266 -144.85 + 41 73.658 665 2 1 -46.8501 -28.3186 -144.791 + 41 196.14 664 2 1 -47.05 -28.374 -144.767 + 41 179.563 663 2 1 -47.2501 -28.1145 -144.726 + 41 103.288 1065 3 1 33.05 -99.4576 -114.81 + 41 11.7733 1140 0 1 48.05 21.4338 -204.823 + 41 83.0977 811 3 1 -17.7115 4.50978 -114.45 + 41 44.9291 812 3 1 -17.65 4.48342 -114.718 + 41 146.341 826 2 1 -14.8089 4.16233 -144.45 + 41 146.776 920 2 0 -14.7149 4.08148 -145.85 + 41 194.344 853 1 1 -9.36867 5.17036 -174.45 + 41 58.9819 854 1 1 -9.25 4.96743 -174.723 + 41 107.668 919 1 0 -8.87904 4.03505 -175.85 + 41 100.555 918 1 0 -8.81104 3.85 -176.089 + 41 230.248 915 0 1 3.151 -17.7298 -204.45 + 41 26.037 803 0 0 2.98741 -19.393 -205.85 + 41 102.415 802 0 0 2.9714 -19.45 -205.925 + 41 0.767415 801 0 0 2.96191 -19.65 -206.249 + 41 114.752 793 7 1 -21.3455 -5.30847 5.55 + 41 145.898 869 7 0 -21.0771 -6.13888 4.15 + 41 69.3203 868 7 0 -21.0342 -6.25 3.96578 + 41 82.3491 803 9 1 -19.4499 1.33027 65.5213 + 41 216.586 904 4 0 -19.5454 0.873721 -85.9644 + 41 116.276 802 3 1 -19.5708 0.942709 -114.45 + 41 233.951 904 3 0 -19.6209 0.935904 -115.85 + 41 175.586 796 2 1 -20.7239 0.676883 -144.45 + 41 357.605 903 2 0 -20.8045 0.672087 -145.85 + 41 170.549 788 1 1 -22.3541 0.597481 -174.45 + 41 243.248 902 1 0 -22.4632 0.588555 -175.85 + 41 127.833 900 0 0 -24.6258 0.129709 -205.85 + 41 147.839 797 3 1 -20.622 -0.784358 -114.45 + 41 86.9115 796 3 1 -20.65 -0.787476 -114.597 + 41 117.313 896 3 0 -20.898 -0.833377 -115.85 + 41 75.047 771 2 1 -25.7862 -1.39863 -144.45 + 41 313.234 770 2 1 -25.85 -1.37887 -144.643 + 41 112.301 893 2 0 -26.2694 -1.30658 -145.85 + 41 144.284 708 1 1 -38.4249 1.48846 -174.45 + 41 73.8419 908 1 0 -38.3849 1.80695 -175.85 + 41 52.86 909 1 0 -38.3677 1.85 -176.107 + 41 87.1806 723 0 1 -35.4127 8.67135 -204.45 + 41 83.7224 724 0 1 -35.25 8.73248 -204.588 + 41 45.9421 725 0 1 -35.0498 8.7925 -204.73 + 41 192.498 945 0 0 -33.8544 9.0961 -205.85 + 41 46.7803 946 0 0 -33.4643 9.25 -206.179 + 41 178.102 722 0 1 -35.45 8.62099 -204.501 + 41 340.229 941 0 0 -34.9435 8.25866 -205.85 + 41 65.4825 940 0 0 -34.8457 8.25 -205.996 + 41 365.954 734 0 1 -33.2474 9.01083 -204.85 + 41 59.7432 726 0 1 -34.776 8.31976 -204.85 + 41 118.732 727 0 1 -34.5946 7.67657 -204.85 + 41 99.3248 707 1 1 -38.4501 1.55525 -174.666 + 41 190.615 911 1 0 -39.0025 2.31843 -175.85 + 41 22.5889 828 8 1 -14.444 1.27035 35.55 + 41 81.4656 827 8 1 -14.45 1.26634 35.4538 + 41 101.255 905 8 0 -14.5072 1.1769 34.15 + 41 162.003 825 7 1 -14.8964 -2.7077 5.55 + 41 128.156 886 7 0 -14.8657 -2.77214 4.15 + 41 104.07 834 6 1 -13.1488 -3.44494 -24.45 + 41 97.3997 883 6 0 -13.0908 -3.37395 -25.85 + 41 52.3037 846 5 1 -10.7339 -3.53787 -54.45 + 41 69.6433 847 5 1 -10.65 -3.56118 -54.633 + 41 53.0323 886 5 0 -10.1304 -2.76154 -55.85 + 41 67.3418 887 5 0 -10.0797 -2.64986 -55.9872 + 41 105.473 866 4 1 -6.68797 0.572801 -84.45 + 41 294.985 865 4 1 -6.85 0.630931 -84.6127 + 41 52.66 881 5 0 -10.1426 -3.81041 -55.8514 + 41 76.1365 880 5 0 -10.059 -3.85014 -56.0462 + 41 75.9717 912 4 1 2.47536 -6.91421 -84.45 + 41 72.82 913 4 1 2.65014 -6.91551 -84.7025 + 41 147.741 866 4 0 3.43318 -6.82787 -85.85 + 41 183.702 1011 3 1 22.3004 -3.77229 -114.45 + 41 89.4178 1012 3 1 22.45 -3.69863 -114.609 + 41 170.124 883 3 0 23.338 -3.40865 -115.85 + 41 232.219 807 8 1 -18.4893 -1.29635 35.55 + 41 90.1389 893 8 0 -18.3803 -1.42271 34.15 + 41 42.0278 892 8 0 -18.3562 -1.45 33.8556 + 41 130.974 818 7 1 -16.4042 -4.03865 5.54991 + 41 128.208 879 7 0 -16.2156 -4.18669 4.15 + 41 149.058 837 6 1 -12.6443 -6.78166 -24.45 + 41 126.474 865 6 0 -12.4006 -6.85392 -25.8504 + 41 116.769 861 5 1 -7.66756 -9.16579 -54.45 + 41 193.467 862 5 1 -7.65 -9.19707 -54.7653 + 41 147.321 853 5 0 -7.57216 -9.3152 -55.8506 + 41 148.172 871 4 1 -5.8297 -15.5537 -84.4511 + 41 119.881 821 4 0 -5.80434 -15.6939 -85.85 + 41 99.3293 871 3 1 -5.71709 -17.2361 -114.45 + 41 131.909 814 3 0 -5.66445 -17.211 -115.85 + 41 159.988 875 2 1 -4.97169 -17.1851 -144.45 + 41 61.1548 816 2 0 -5.21998 -16.6824 -145.85 + 41 92.5554 817 2 0 -5.23702 -16.6498 -145.942 + 41 115.583 848 1 1 -10.3593 -6.95674 -174.45 + 41 121.616 866 1 0 -10.5422 -6.81203 -175.851 + 41 110.805 824 0 1 -15.2324 -4.68989 -204.45 + 41 111.807 878 0 0 -15.1408 -4.43633 -205.85 + 41 126.73 863 5 1 -7.45 -9.45675 -54.5347 + 41 117.17 864 5 1 -7.25 -9.49766 -54.5175 +Number of digits in this event: 72 +Using G4ParticleGun... +Particle energy: 6.42406 LIN +Particle: gamma +Event: 42 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 9.27547 LIN +Particle: gamma +Event: 43 +Number of tracker hits in this event: 88 + 43 270.127 1198 10 1 59.8458 88.3006 95.55 + 43 405.909 1341 10 0 59.8456 88.3012 94.15 + 43 109.789 1198 9 1 59.8472 88.3092 65.55 + 43 107.286 1341 9 0 59.8472 88.3119 64.15 + 43 270.856 1199 8 1 59.8742 88.3889 35.55 + 43 346.01 1341 8 0 59.8744 88.3951 34.15 + 43 244.618 1199 7 1 59.8824 88.5276 5.55 + 43 180.967 1342 7 0 59.8825 88.5261 4.15 + 43 132.827 1199 6 1 59.8889 88.5048 -24.45 + 43 124.845 1342 6 0 59.8922 88.4999 -25.85 + 43 101.288 1199 5 1 59.9545 88.3684 -54.45 + 43 240.14 1341 5 0 59.9607 88.3593 -55.85 + 43 125.293 1200 4 1 60.0761 88.165 -84.45 + 43 503.18 1340 4 0 60.0881 88.1617 -85.85 + 43 116.377 1201 3 1 60.3135 88.0998 -114.45 + 43 97.5945 1340 3 0 60.3261 88.0587 -115.85 + 43 27.7972 1339 3 0 60.3287 88.05 -116.141 + 43 107.112 1202 2 1 60.5619 87.2103 -144.45 + 43 109.875 1335 2 0 60.5768 87.1723 -145.85 + 43 147.981 1204 1 1 60.8783 86.415 -174.45 + 43 107.789 1331 1 0 60.8932 86.3804 -175.85 + 43 142.947 1205 0 1 61.2179 85.701 -204.45 + 43 225.247 1328 0 0 61.2389 85.6627 -205.85 + 43 41.3209 1111 0 1 42.409 116.348 -204.85 + 43 341.664 1341 4 0 60.0295 88.25 -86.0922 + 43 268.207 1202 1 1 60.6012 87.647 -174.45 + 43 194.121 1337 1 0 60.522 87.49 -175.85 + 43 15.6037 1336 1 0 60.5057 87.4499 -176.191 + 43 124.739 1196 0 1 59.3658 84.0266 -204.45 + 43 106.789 1319 0 0 59.3925 83.9295 -205.85 + 43 117.534 1204 0 1 61.05 87.1012 -204.544 + 43 152.747 1335 0 0 61.0032 87.1188 -205.85 + 43 221.341 1199 4 1 59.9648 88.48 -84.45 + 43 252.51 1198 4 1 59.85 88.6378 -84.6792 + 43 37.9276 1348 4 0 59.0221 89.7647 -85.85 + 43 172.579 1349 4 0 58.9629 89.85 -85.9378 + 43 114.371 1119 3 1 43.8683 109.002 -114.45 + 43 198.242 1118 3 1 43.85 108.673 -114.549 + 43 160.233 1117 3 1 43.6498 108.184 -114.637 + 43 104.635 1116 3 1 43.4499 107.73 -114.648 + 43 122.868 1115 3 1 43.25 107.409 -114.646 + 43 179.885 1114 3 1 43.0492 107.076 -114.629 + 43 123.556 1113 3 1 42.85 106.672 -114.6 + 43 292.718 1112 3 1 42.65 106.221 -114.619 + 43 100.579 1371 4 0 52.8439 94.5179 -86.25 + 43 49.1264 1164 4 1 53.0028 94.0247 -84.85 + 43 55.2677 1165 4 1 53.05 93.9637 -84.6571 + 43 36.4488 1192 3 1 58.5927 88.5245 -114.45 + 43 102.983 1193 3 1 58.65 88.5731 -114.556 + 43 355.467 1345 3 0 59.2679 89.1213 -115.851 + 43 19.9416 1346 3 0 59.4327 89.25 -116.193 + 43 7.31503 1242 2 1 68.6368 98.0078 -144.45 + 43 131.032 1243 2 1 68.65 98.0117 -144.489 + 43 116.785 1390 2 0 69.2598 98.2251 -145.85 + 43 96.6213 1333 1 1 86.6638 100.893 -174.45 + 43 39.7696 1334 1 1 86.85 100.931 -174.735 + 43 135.713 1405 1 0 87.5221 101.198 -175.85 + 43 305.168 1484 0 1 117.121 102.548 -204.45 + 43 41.045 1483 0 1 116.95 102.662 -204.718 + 43 65.9797 1416 0 0 116.773 103.43 -205.85 + 43 78.3069 1417 0 0 116.748 103.55 -206.041 + 43 194.652 1418 0 0 116.767 103.75 -206.227 + 43 36.157 1419 0 0 116.716 103.95 -206.208 + 43 29.8956 1520 3 0 168.408 124.33 -116.25 + 43 179.186 1521 3 0 168.514 124.35 -116.209 + 43 62.4557 1522 3 0 168.901 124.55 -116.044 + 43 114.038 1523 3 0 168.994 124.75 -115.972 + 43 222.866 1524 3 0 169.08 124.95 -115.959 + 43 92.9933 1525 3 0 169.369 125.15 -116.051 + 43 279.173 1526 3 0 169.604 125.35 -115.991 + 43 133.316 1199 9 1 59.8599 88.2408 65.55 + 43 126.69 1340 9 0 59.8602 88.2419 64.15 + 43 103.742 1341 7 0 59.8736 88.2919 4.15 + 43 104.791 1198 6 1 59.8149 88.2918 -24.45 + 43 125.766 1341 6 0 59.8115 88.2947 -25.85 + 43 130.259 1198 5 1 59.757 88.3703 -54.45 + 43 136.658 1197 4 1 59.5593 88.2624 -84.45 + 43 184.884 1196 3 1 59.2813 87.6078 -114.45 + 43 106.954 1337 3 0 59.2474 87.5942 -115.85 + 43 144.341 1192 2 1 58.508 87.3552 -144.45 + 43 319.017 1336 2 0 58.4595 87.3387 -145.85 + 43 97.5894 1187 1 1 57.5055 86.9431 -174.45 + 43 115.777 1334 1 0 57.4622 86.9353 -175.85 + 43 112.788 1182 0 1 56.6413 86.8315 -204.45 + 43 153.932 1333 0 0 56.6181 86.8281 -205.85 + 43 65.6075 1337 2 0 58.4946 87.45 -145.899 + 43 9.67584 790 6 1 -21.85 96.508 -24.7646 + 43 320.499 1246 4 1 69.3804 27.9047 -84.45 +Number of digits in this event: 49 +Using G4ParticleGun... +Particle energy: 8.15968 LIN +Particle: gamma +Event: 44 +Number of tracker hits in this event: 57 + 44 293.704 362 8 1 -107.701 -88.1142 35.55 + 44 232.44 459 8 0 -107.699 -88.1151 34.15 + 44 252.645 362 7 1 -107.628 -88.1356 5.55 + 44 255.667 459 7 0 -107.624 -88.1408 4.15 + 44 239.23 362 6 1 -107.571 -88.2416 -24.45 + 44 383.6 459 6 0 -107.57 -88.2422 -25.85 + 44 244.791 362 5 1 -107.554 -88.2567 -54.45 + 44 136.26 458 5 0 -107.552 -88.2563 -55.85 + 44 179.051 363 4 1 -107.506 -88.2436 -84.45 + 44 145.5 459 4 0 -107.502 -88.2433 -85.85 + 44 112.119 363 3 1 -107.425 -88.2368 -114.45 + 44 137.569 459 3 0 -107.419 -88.2359 -115.85 + 44 140.58 364 2 1 -107.259 -88.1993 -144.45 + 44 229.969 459 2 0 -107.252 -88.2017 -145.85 + 44 119.841 365 1 1 -107.123 -88.2575 -174.45 + 44 344.408 458 1 0 -107.118 -88.2574 -175.85 + 44 117.961 365 0 1 -107.019 -88.2539 -204.45 + 44 151.711 458 0 0 -107.012 -88.2575 -205.85 + 44 240.704 285 1 0 -105.686 -123.12 -176.25 + 44 26.997 1299 0 0 -78.3588 79.85 -205.935 + 44 3.59711 1300 0 0 -78.3433 80.05 -205.861 + 44 128.697 508 0 1 -78.3976 81.5881 -204.85 + 44 132.565 507 0 1 -78.45 81.9963 -204.728 + 44 73.2753 1314 0 0 -79.3325 82.9282 -205.85 + 44 75.8038 1315 0 0 -79.4073 83.05 -205.923 + 44 99.1616 1316 0 0 -79.4859 83.25 -205.928 + 44 20.9496 1317 0 0 -79.4397 83.45 -205.862 + 44 195.388 495 0 1 -80.906 88.7276 -204.85 + 44 176.87 494 0 1 -81.05 88.8534 -204.533 + 44 171.089 361 8 1 -107.75 -88.1559 35.4725 + 44 171.177 459 5 0 -107.644 -88.0552 -55.85 + 44 104.79 362 4 1 -107.606 -88.0092 -84.45 + 44 108.312 460 4 0 -107.605 -88.0074 -85.85 + 44 93.8886 362 3 1 -107.577 -87.9652 -114.45 + 44 225.264 460 3 0 -107.575 -87.9629 -115.85 + 44 229.466 363 2 1 -107.533 -87.9162 -144.45 + 44 272.272 460 2 0 -107.53 -87.9126 -145.85 + 44 552.683 363 1 1 -107.477 -87.8469 -174.45 + 44 256.842 461 1 0 -107.475 -87.8429 -175.85 + 44 119.373 363 0 1 -107.529 -87.764 -204.45 + 44 145.134 461 0 0 -107.513 -87.7502 -205.85 + 44 109.635 1580 4 0 -43.6269 136.176 -86.25 + 44 68.2038 369 0 1 -106.189 -89.1866 -204.45 + 44 48.3734 370 0 1 -106.15 -89.2463 -204.714 + 44 110.732 453 0 0 -105.666 -89.3915 -205.85 + 44 343.976 460 1 0 -107.517 -87.8817 -175.85 + 44 123.894 360 0 1 -108.012 -88.85 -204.45 + 44 99.88 455 0 0 -108.037 -88.9857 -205.85 + 44 108.696 362 2 1 -107.55 -88.0347 -144.45 + 44 151.738 361 1 1 -107.801 -87.9361 -174.45 + 44 112.3 361 0 1 -107.895 -88.1193 -204.45 + 44 146.889 459 0 0 -107.909 -88.1256 -205.85 + 44 136.592 459 1 0 -107.879 -88.05 -176.044 + 44 67.3073 456 1 0 -107.379 -88.8303 -175.85 + 44 41.9512 455 1 0 -107.378 -88.85 -176.094 + 44 160.068 364 0 1 -107.273 -90.8602 -204.45 + 44 128.167 445 0 0 -107.206 -91.0159 -205.85 +Number of digits in this event: 37 +Using G4ParticleGun... +Particle energy: 6.0609 LIN +Particle: gamma +Event: 45 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 4.03278 LIN Particle: gamma Event: 46 -Number of tracker hits in this event: 1 - 46 2.22271 632 0 0 178.482 -53.5691 -206.25 -Number of digits in this event: 1 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 5.93428 LIN +Particle energy: 3.44151 LIN Particle: gamma Event: 47 -Number of tracker hits in this event: 13 - 47 227.174 234 4 1 -133.269 41.0631 -84.45 - 47 251.904 1105 4 0 -133.269 41.0645 -85.85 - 47 526.257 234 3 1 -133.267 41.0942 -114.45 - 47 299.214 1105 3 0 -133.268 41.0957 -115.85 - 47 502.519 234 2 1 -133.299 41.1265 -144.45 - 47 216.436 1105 2 0 -133.298 41.1299 -145.85 - 47 333.55 234 1 1 -133.277 41.1983 -174.45 - 47 136.426 1105 1 0 -133.274 41.2032 -175.85 - 47 442.594 234 0 1 -133.214 41.291 -204.45 - 47 231.679 1106 0 0 -133.208 41.2955 -205.85 - 47 127.245 1106 1 0 -133.278 41.2842 -175.85 - 47 44.8871 1104 3 0 -133.243 41.05 -115.867 - 47 295.079 231 3 1 -133.818 39.5318 -114.85 -Number of digits in this event: 14 +Number of tracker hits in this event: 63 + 47 391.916 698 9 1 -40.3641 -21.7907 65.55 + 47 306.833 791 9 0 -40.3646 -21.7904 64.15 + 47 178.565 698 8 1 -40.3864 -21.7722 35.55 + 47 131.794 791 8 0 -40.3875 -21.7732 34.15 + 47 112.645 698 7 1 -40.4142 -21.7806 5.55 + 47 137.301 791 7 0 -40.4133 -21.78 4.15 + 47 108.707 698 6 1 -40.395 -21.7606 -24.45 + 47 118.419 791 6 0 -40.3929 -21.7639 -25.85 + 47 170.711 698 5 1 -40.3534 -21.8456 -54.45 + 47 263.116 791 5 0 -40.3509 -21.8472 -55.85 + 47 154.173 698 4 1 -40.3101 -21.8749 -84.45 + 47 98.0434 790 4 0 -40.3075 -21.8749 -85.85 + 47 320.999 698 3 1 -40.2593 -21.8632 -114.45 + 47 117.684 790 3 0 -40.2562 -21.8577 -115.85 + 47 262.938 699 2 1 -40.1698 -21.7423 -144.45 + 47 95.7204 791 2 0 -40.1646 -21.7353 -145.85 + 47 246.824 699 1 1 -40.0647 -21.6097 -174.45 + 47 138.31 792 1 0 -40.0643 -21.6027 -175.85 + 47 102.475 699 0 1 -40.0617 -21.4815 -204.45 + 47 125.398 792 0 0 -40.0704 -21.4723 -205.85 + 47 50.0189 1075 1 1 35.1563 -15.4343 -174.85 + 47 2.65706 790 5 0 -40.3406 -21.85 -56.098 + 47 292.706 699 5 1 -40.25 -21.8891 -54.4865 + 47 191.758 700 5 1 -40.05 -22.0405 -54.539 + 47 250.803 701 5 1 -39.85 -22.1607 -54.4803 + 47 167.544 702 5 1 -39.65 -22.2711 -54.4744 + 47 294.601 703 5 1 -39.4498 -22.0175 -54.5717 + 47 381.488 789 2 0 -40.1988 -22.1363 -145.85 + 47 104.964 788 1 0 -40.2001 -22.2954 -175.85 + 47 142.362 700 0 1 -39.9644 -22.5937 -204.45 + 47 117.28 787 0 0 -39.9623 -22.6055 -205.85 + 47 19.6518 788 0 0 -39.7616 -22.2692 -205.85 + 47 312.315 789 0 0 -39.7597 -22.25 -205.91 + 47 112.339 700 1 1 -39.8852 -22.156 -174.45 + 47 112.857 789 1 0 -39.7869 -22.1532 -175.85 + 47 168.752 711 0 1 -37.8365 -22.0719 -204.45 + 47 17.464 697 9 1 -40.45 -21.8159 65.5288 + 47 107.15 697 8 1 -40.4712 -21.9848 35.55 + 47 153.195 790 8 0 -40.4841 -21.9943 34.15 + 47 124.705 696 7 1 -40.7614 -22.1636 5.55 + 47 183.521 789 7 0 -40.7744 -22.1708 4.15 + 47 116.343 695 6 1 -41.0154 -22.288 -24.45 + 47 204.637 788 6 0 -41.0305 -22.2902 -25.85 + 47 137.449 693 5 1 -41.3368 -22.3233 -54.45 + 47 165.808 788 5 0 -41.3547 -22.3304 -55.85 + 47 88.9968 691 4 1 -41.7316 -22.4868 -84.45 + 47 230.534 787 4 0 -41.7532 -22.4837 -85.85 + 47 92.5812 689 3 1 -42.1961 -22.4187 -114.45 + 47 152.841 788 3 0 -42.2207 -22.419 -115.85 + 47 164.627 686 2 1 -42.693 -22.5072 -144.45 + 47 198.449 787 2 0 -42.7497 -22.4844 -145.85 + 47 175.018 680 1 1 -43.9088 -22.0179 -174.45 + 47 154.355 790 1 0 -43.9703 -21.9887 -175.85 + 47 112.344 674 0 1 -45.2344 -21.4508 -204.45 + 47 31.3893 673 0 1 -45.25 -21.4456 -204.734 + 47 101.677 793 0 0 -45.3122 -21.4244 -205.85 + 47 39.3521 1713 11 1 162.908 64.0516 125.15 + 47 178.053 682 0 1 -43.6286 -22.4131 -204.45 + 47 33.4084 786 0 0 -43.5763 -22.8032 -205.85 + 47 73.8468 785 0 0 -43.5687 -22.8502 -205.984 + 47 63.0355 683 0 1 -43.45 -22.2111 -204.627 + 47 79.1751 790 0 0 -43.163 -21.9054 -205.85 + 47 25.825 791 0 0 -43.1051 -21.85 -206.14 +Number of digits in this event: 37 Using G4ParticleGun... -Particle energy: 4.0111 LIN +Particle energy: 5.18845 LIN Particle: gamma Event: 48 -Number of tracker hits in this event: 166 - 48 263.099 868 9 1 -6.39473 103.767 65.55 - 48 213.046 1418 9 0 -6.39502 103.767 64.15 - 48 262.499 868 8 1 -6.39404 103.778 35.55 - 48 115.926 1418 8 0 -6.39124 103.777 34.15 - 48 503.934 868 7 1 -6.32153 103.761 5.55 - 48 116.866 1418 7 0 -6.31763 103.76 4.15 - 48 167.856 869 6 1 -6.24059 103.729 -24.45 - 48 210.528 1417 6 0 -6.24067 103.728 -25.85 - 48 101.997 869 5 1 -6.24693 103.693 -54.45 - 48 186.274 1417 5 0 -6.24991 103.689 -55.85 - 48 133.962 868 4 1 -6.3114 103.608 -84.45 - 48 117.451 1417 4 0 -6.31286 103.603 -85.85 - 48 96.2911 868 3 1 -6.34046 103.53 -114.45 - 48 107.724 1416 3 0 -6.34173 103.527 -115.85 - 48 155.717 868 2 1 -6.36408 103.46 -144.45 - 48 128.623 1416 2 0 -6.37123 103.461 -145.85 - 48 124.831 867 1 1 -6.50389 103.51 -174.45 - 48 115.823 1416 1 0 -6.51183 103.516 -175.85 - 48 189.898 866 0 1 -6.68949 103.652 -204.45 - 48 117.002 1417 0 0 -6.69485 103.657 -205.85 - 48 59.8718 1054 1 0 44.8547 31.05 -176.036 - 48 18.1334 1053 1 0 44.9928 30.85 -175.888 - 48 4.01391 1126 1 1 45.4465 29.7253 -174.85 - 48 134.49 1127 1 1 45.4501 29.7162 -174.841 - 48 79.1002 1128 1 1 45.7424 29.3564 -174.45 - 48 22.6326 1129 1 1 45.85 29.1708 -174.752 - 48 64.0837 1041 1 0 45.6737 28.3998 -175.85 - 48 113.539 1040 1 0 45.6846 28.25 -176.026 - 48 251.367 1092 1 0 50.7024 38.5018 -176.25 - 48 215.638 1093 1 0 50.9875 38.6502 -176.162 - 48 66.721 1418 5 0 -6.25533 103.75 -56.1509 - 48 341.671 1417 8 0 -6.36762 103.696 34.15 - 48 203.401 1417 7 0 -6.43668 103.595 4.15 - 48 107.487 867 6 1 -6.58901 103.476 -24.45 - 48 180.467 1416 6 0 -6.599 103.467 -25.85 - 48 145.247 866 5 1 -6.83756 103.301 -54.45 - 48 127.398 1415 5 0 -6.84926 103.298 -55.85 - 48 116.236 864 4 1 -7.07255 103.232 -84.45 - 48 248.598 1415 4 0 -7.07985 103.226 -85.85 - 48 268.893 864 3 1 -7.19633 103.129 -114.45 - 48 131.736 1414 3 0 -7.19677 103.127 -115.85 - 48 176.2 864 2 1 -7.21828 103.086 -144.45 - 48 118.164 1414 2 0 -7.21938 103.082 -145.85 - 48 115.932 863 1 1 -7.27366 102.995 -174.45 - 48 112.041 1414 1 0 -7.27683 102.987 -175.85 - 48 219.22 863 0 1 -7.32502 102.829 -204.45 - 48 110.178 1413 0 0 -7.33024 102.821 -205.85 - 48 229.684 862 1 1 -7.52489 102.895 -174.45 - 48 144.729 1413 1 0 -7.55085 102.894 -175.851 - 48 85.7992 861 0 1 -7.83003 102.636 -204.45 - 48 161.869 860 0 1 -7.85 102.63 -204.577 - 48 127.112 1412 0 0 -8.04868 102.592 -205.85 - 48 137.449 1417 1 0 -7.40772 103.55 -175.9 - 48 21.4072 859 0 1 -8.13573 120.608 -204.45 - 48 62.2902 862 0 1 -7.65 120.555 -204.64 - 48 58.5808 864 0 1 -7.25 120.585 -204.781 - 48 497.632 1505 0 0 -4.92346 121.263 -205.85 - 48 215.396 1506 0 0 -4.63167 121.35 -205.986 - 48 61.24 905 0 1 1.06111 121.267 -204.85 - 48 45.6403 906 0 1 1.25 121.261 -204.808 - 48 48.0058 907 0 1 1.45018 121.249 -204.801 - 48 117.923 908 0 1 1.65024 121.217 -204.783 - 48 201.349 909 0 1 1.85 121.188 -204.757 - 48 47.9782 910 0 1 2.05 121.12 -204.712 - 48 71.6581 911 0 1 2.25 121.077 -204.669 - 48 53.2536 912 0 1 2.45023 121.056 -204.6 - 48 14.0218 913 0 1 2.65 121.018 -204.488 - 48 35.729 1542 1 1 128.55 36.9009 -174.493 - 48 92.6145 865 3 1 -7.05 103.011 -114.506 - 48 139.358 1415 3 0 -6.82333 103.184 -115.85 - 48 105.613 885 2 1 -2.99422 106.897 -144.45 - 48 27.3833 884 2 1 -3.05 106.878 -144.758 - 48 133.486 1434 2 0 -2.87207 107.062 -145.85 - 48 3.64707 1435 2 0 -2.80972 107.15 -146.236 - 48 79.4309 908 1 1 1.6508 114.85 -174.45 - 48 52.8427 909 1 1 1.85036 114.772 -174.573 - 48 59.349 910 1 1 2.05 114.701 -174.704 - 48 4.84955 911 1 1 2.25 114.648 -174.838 - 48 284.474 1470 1 0 4.10869 114.301 -175.85 - 48 130.267 1469 1 0 4.65326 114.15 -176.083 - 48 129.399 1145 1 0 156.782 49.2133 -176.25 - 48 102.567 1144 1 0 157.07 49.05 -176.131 - 48 76.741 1143 1 0 157.375 48.85 -175.97 - 48 62.5324 1696 1 1 159.37 47.7778 -174.85 - 48 100.257 1697 1 1 159.551 47.6865 -174.724 - 48 29.321 1698 1 1 159.75 47.5846 -174.527 - 48 189.713 1699 1 1 159.985 47.2436 -174.45 - 48 0.125749 1700 1 1 160.15 47.1276 -174.849 - 48 44.1301 1134 1 0 160.42 46.8956 -175.85 - 48 89.9409 1133 1 0 160.443 46.85 -176.019 - 48 72.7989 1640 0 1 148.163 30.5429 -204.451 - 48 56.5583 1641 0 1 148.35 30.6323 -204.613 - 48 55.9553 1642 0 1 148.55 30.7035 -204.722 - 48 27.9527 1643 0 1 148.75 30.7133 -204.799 - 48 268.227 1055 0 0 150.387 31.2095 -205.85 - 48 65.9372 1056 0 0 150.485 31.25 -205.93 - 48 47.2572 1413 3 0 -7.21715 102.775 -115.85 - 48 70.1425 1412 3 0 -7.23402 102.75 -116.011 - 48 122.776 848 2 1 -10.4223 98.2426 -144.45 - 48 83.606 1388 2 0 -10.3722 97.851 -145.85 - 48 12.4387 1387 2 0 -10.3561 97.7499 -146.202 - 48 109.031 856 1 1 -8.72676 89.4371 -174.45 - 48 108.588 1346 1 0 -8.53666 89.4011 -175.85 - 48 23.8328 876 0 1 -4.69721 87.7179 -204.45 - 48 106.122 877 0 1 -4.64984 87.7061 -204.519 - 48 2.74714 878 0 1 -4.44984 87.6361 -204.829 - 48 167.043 1336 0 0 -3.79993 87.3439 -205.85 - 48 39.7178 1335 0 0 -3.57851 87.25 -206.192 - 48 177.137 827 6 1 -14.5744 104.102 -24.45 - 48 140.827 887 5 1 -2.49588 92.5307 -54.4504 - 48 11.1888 886 5 1 -2.65 92.2851 -54.8112 - 48 147.819 1356 5 0 -3.1038 91.5314 -55.85 - 48 60.7708 1355 5 0 -3.21587 91.35 -56.1004 - 48 31.3306 827 4 1 -14.6051 69.6284 -84.45 - 48 155.436 826 4 1 -14.65 69.5574 -84.5207 - 48 78.712 1241 4 0 -15.364 68.4144 -85.8502 - 48 76.0972 1240 4 0 -15.468 68.2499 -86.043 - 48 133.973 772 3 1 -25.5278 42.6927 -114.45 - 48 78.2327 1112 3 0 -25.7496 42.4873 -115.85 - 48 38.4939 1111 3 0 -25.7811 42.45 -116.093 - 48 5.29216 750 2 1 -30.0374 35.2656 -144.45 - 48 551.363 749 2 1 -30.05 35.2334 -144.457 - 48 184.227 748 2 1 -30.25 34.6738 -144.501 - 48 353.345 747 2 1 -30.45 34.163 -144.504 - 48 144.045 746 2 1 -30.65 33.6588 -144.537 - 48 423.579 745 2 1 -30.8501 33.3233 -144.627 - 48 27.5683 1058 2 0 -31.4781 31.7401 -145.85 - 48 62.5201 1057 2 0 -31.5121 31.6499 -145.925 - 48 61.0144 1056 2 0 -31.5756 31.45 -146.072 - 48 26.7054 1055 2 0 -31.6203 31.25 -146.203 - 48 31.7588 525 2 0 -70.4188 -74.9054 -146.25 - 48 60.761 524 2 0 -70.4891 -75.05 -146.191 - 48 99.2158 523 2 0 -70.5634 -75.2503 -146.093 - 48 110.506 522 2 0 -70.6203 -75.4502 -145.979 - 48 4.35723 521 2 0 -70.6703 -75.65 -145.864 - 48 114.381 543 2 1 -71.4368 -77.6233 -144.85 - 48 209.74 542 2 1 -71.45 -77.6586 -144.831 - 48 117.006 544 2 1 -71.25 -78.413 -144.607 - 48 63.9206 545 2 1 -71.05 -78.5964 -144.718 - 48 83.9049 546 2 1 -70.85 -78.7213 -144.786 - 48 0.245894 498 2 0 -68.3793 -80.4496 -145.85 - 48 111.468 497 2 0 -68.3788 -80.45 -145.85 - 48 318.737 496 2 0 -68.0188 -80.65 -145.975 - 48 68.8229 495 2 0 -67.4124 -80.85 -146.225 - 48 49.9063 321 2 0 -54.0368 -115.9 -146.25 - 48 49.3405 261 2 0 -61.6295 -127.854 -146.25 - 48 202.216 1067 2 0 -30.3564 33.5356 -145.851 - 48 45.2259 1066 2 0 -30.3115 33.4499 -146.172 - 48 135.981 1416 7 0 -6.52991 103.492 4.15 - 48 34.9079 859 6 1 -8.08408 100.354 -24.45 - 48 119.802 860 6 1 -8.05 100.256 -24.5377 - 48 1.15383 1394 6 0 -7.53515 98.9535 -25.85 - 48 88.0056 1393 6 0 -7.53369 98.95 -25.8536 - 48 63.5319 1392 6 0 -7.45044 98.75 -26.0845 - 48 50.3062 916 5 1 3.30888 69.7714 -54.45 - 48 150.006 917 5 1 3.45009 69.7033 -54.56 - 48 19.9823 918 5 1 3.65 69.6022 -54.7847 - 48 149.257 1245 5 0 4.42 69.2282 -55.85 - 48 28.8445 1244 5 0 4.6649 69.05 -56.1621 - 48 81.4768 1057 4 1 31.5392 51.2742 -84.45 - 48 86.7641 1058 4 1 31.65 51.3575 -84.636 - 48 100.567 1157 4 0 32.2624 51.5041 -85.85 - 48 21.6694 1156 4 0 32.4844 51.45 -86.1978 - 48 7.69121 1152 4 0 32.383 50.6283 -85.85 - 48 76.0064 1200 2 1 60.05 27.7068 -144.514 - 48 359.351 1201 2 1 60.25 27.6233 -144.616 -Number of digits in this event: 61 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 3.97563 LIN +Particle energy: 4.29503 LIN Particle: gamma Event: 49 -Number of tracker hits in this event: 8 - 49 258.887 1117 2 1 43.5623 104.057 -144.45 - 49 250.932 1419 2 0 43.5615 104.057 -145.85 - 49 240.228 1117 1 1 43.5412 104.087 -174.45 - 49 159.412 1419 1 0 43.5386 104.087 -175.85 - 49 228.965 1117 0 1 43.4935 104.092 -204.45 - 49 130.179 1419 0 0 43.4876 104.095 -205.85 - 49 111.516 1420 1 0 43.5705 104.157 -175.85 - 49 144.621 1420 0 0 43.5917 104.345 -205.85 -Number of digits in this event: 9 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 9.49849 LIN +Particle energy: 9.85039 LIN Particle: gamma Event: 50 -Number of tracker hits in this event: 10 - 50 283.628 925 2 0 41.8995 5.19384 -145.881 - 50 340.786 1109 1 1 41.8977 5.20679 -174.45 - 50 550.937 925 1 0 41.8966 5.20696 -175.85 - 50 267.207 1109 0 1 41.8718 5.20819 -204.45 - 50 255.014 925 0 0 41.8688 5.20805 -205.85 - 50 157.283 1130 2 0 -177.371 46.2263 -146.25 - 50 325.148 1131 2 0 -178.442 46.25 -145.911 - 50 10.1347 634 0 0 69.5703 -53.0626 -206.25 - 50 56.4547 635 0 0 69.6 -53.05 -206.238 - 50 42.6489 1435 12 1 107.166 18.3019 155.15 -Number of digits in this event: 10 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 6.44085 LIN +Particle energy: 5.39409 LIN Particle: gamma Event: 51 -Number of tracker hits in this event: 2 - 51 51.5393 1336 1 0 95.2296 87.25 -176.142 - 51 127.988 659 12 1 -48.05 22.7416 155.219 -Number of digits in this event: 3 +Number of tracker hits in this event: 50 + 51 101.746 977 9 0 123.695 15.4591 63.934 + 51 269.096 1517 8 1 123.605 14.8101 35.55 + 51 110.655 974 8 0 123.442 14.9977 34.15 + 51 15.0853 1490 7 1 118.176 16.859 5.55 + 51 117.375 1489 7 1 118.15 16.8283 5.50058 + 51 54.6737 980 7 0 117.598 16.1565 4.15 + 51 112.642 979 7 0 117.526 16.05 3.97395 + 51 20.9081 652 7 0 88.1112 -49.5878 3.75 + 51 61.8328 651 7 0 88.0835 -49.65 3.79729 + 51 83.4597 650 7 0 88.0155 -49.85 3.90545 + 51 48.2939 649 7 0 87.9207 -50.05 4.02422 + 51 64.6685 1337 7 1 87.4876 -51.1925 5.15 + 51 390.13 1336 7 1 87.45 -51.3475 5.26441 + 51 67.4477 641 7 0 87.2188 -51.7784 4.15 + 51 38.572 640 7 0 87.1197 -51.85 3.8748 + 51 50.5233 444 7 0 77.3798 -91.2514 3.75004 + 51 87.9326 443 7 0 77.4213 -91.35 3.88987 + 51 65.7265 1289 7 1 77.939 -91.8685 5.15 + 51 85.0366 1290 7 1 78.05 -91.9629 5.26713 + 51 102.403 1291 7 1 78.25 -92.156 5.35232 + 51 106.64 1292 7 1 78.45 -92.3966 5.38722 + 51 111.718 1293 7 1 78.65 -92.7333 5.41131 + 51 59.7617 1294 7 1 78.85 -93.1672 5.38482 + 51 85.5679 1295 7 1 79.05 -93.1828 5.29658 + 51 4.68485 1296 7 1 79.25 -93.0708 5.16018 + 51 48.1455 441 7 0 80.5266 -91.8966 4.15 + 51 189.011 442 7 0 80.6189 -91.75 4.10987 + 51 159.379 1304 7 1 80.9115 -90.1701 5.15007 + 51 253.101 1305 7 1 81.0501 -89.8134 5.2343 + 51 132.823 450 7 0 81.2356 -89.8767 4.15 + 51 142.245 977 8 0 123.695 15.452 34.15 + 51 111.882 1517 7 1 123.7 15.4155 5.55 + 51 111.103 976 7 0 123.698 15.4131 4.15 + 51 147.589 1517 6 1 123.669 15.3568 -24.45 + 51 98.4572 976 6 0 123.666 15.3538 -25.85 + 51 363.699 1517 5 1 123.622 15.289 -54.45 + 51 124.163 976 5 0 123.62 15.288 -55.85 + 51 205.334 1517 4 1 123.582 15.2646 -84.45 + 51 150.263 976 4 0 123.592 15.2738 -85.85 + 51 137.776 1517 3 1 123.743 15.5886 -114.45 + 51 139.643 977 3 0 123.756 15.5589 -115.85 + 51 117.754 1518 2 1 123.903 14.8444 -144.45 + 51 117.651 974 2 0 123.943 14.856 -145.85 + 51 227.249 1525 1 1 125.175 14.642 -174.45 + 51 124.256 973 1 0 125.229 14.6891 -175.85 + 51 99.9103 1530 0 1 126.183 15.3465 -204.45 + 51 112.54 976 0 0 126.274 15.3781 -205.85 + 51 234.444 1145 2 1 49.1203 32.6713 -144.45 + 51 146.522 1144 2 1 49.05 32.6651 -144.524 + 51 106.362 860 8 1 -7.88994 11.4961 35.15 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 3.83537 LIN +Particle energy: 3.15572 LIN Particle: gamma Event: 52 -Number of tracker hits in this event: 8 - 52 243.246 1228 1 1 65.8309 117.154 -174.45 - 52 342.796 1485 1 0 65.8277 117.154 -175.85 - 52 307.454 1228 0 1 65.7409 117.144 -204.45 - 52 247.864 1484 0 0 65.7343 117.143 -205.85 - 52 24.3106 1252 1 0 107.684 70.45 -175.852 - 52 8.07496 1444 1 1 109.135 71.4597 -174.85 - 52 180.7 1445 1 1 109.15 71.4653 -174.841 - 52 33.2674 1250 1 0 109.764 70.1931 -175.85 -Number of digits in this event: 7 +Number of tracker hits in this event: 164 + 52 544.425 545 10 1 -70.9906 -50.2148 95.55 + 52 432.545 649 10 0 -70.99 -50.2189 94.15 + 52 110.177 545 9 1 -70.965 -50.3087 65.55 + 52 256.592 648 9 0 -70.9558 -50.3382 64.15 + 52 106.876 546 8 1 -70.7697 -50.9368 35.55 + 52 129.144 645 8 0 -70.7635 -50.97 34.15 + 52 113.347 546 7 1 -70.6519 -51.6387 5.55 + 52 164.953 641 7 0 -70.6464 -51.6726 4.15 + 52 113.088 547 6 1 -70.5456 -52.3654 -24.45 + 52 110.58 638 6 0 -70.5377 -52.4017 -25.85 + 52 125.734 548 5 1 -70.3724 -53.1338 -54.45 + 52 264.745 634 5 0 -70.3618 -53.1718 -55.85 + 52 119.794 549 4 1 -70.1424 -53.9548 -84.45 + 52 140.73 630 4 0 -70.1358 -53.9922 -85.85 + 52 109.129 550 3 1 -69.9953 -54.7667 -114.45 + 52 126.601 626 3 0 -69.9866 -54.8026 -115.85 + 52 124.729 551 2 1 -69.8076 -55.5291 -144.45 + 52 125.73 622 2 0 -69.8014 -55.5667 -145.85 + 52 136.003 552 1 1 -69.6496 -56.3504 -174.45 + 52 257.036 618 1 0 -69.648 -56.3822 -175.85 + 52 466.181 552 0 1 -69.6031 -57.0628 -204.45 + 52 140.367 614 0 0 -69.6004 -57.0964 -205.85 + 52 227.345 613 0 0 -69.1946 -57.2853 -205.85 + 52 89.0027 724 0 1 -35.25 -54.5336 -204.808 + 52 125.884 735 0 0 -123.5 -33.05 -206.229 + 52 14.0778 736 0 0 -123.901 -32.85 -206.025 + 52 240.065 548 4 1 -70.3102 -53.7693 -84.45 + 52 24.9314 637 4 0 -69.9622 -52.5057 -85.85 + 52 100.854 638 4 0 -69.9405 -52.45 -85.922 + 52 15.2131 639 4 0 -69.8238 -52.25 -86.1926 + 52 85.7914 717 4 0 -66.0233 -36.4892 -86.2497 + 52 44.8954 718 4 0 -66.0139 -36.45 -85.9865 + 52 156.087 572 4 1 -65.6491 -35.9784 -84.85 + 52 3.50594 573 4 1 -65.45 -35.9317 -84.4585 + 52 221.948 546 9 1 -70.8012 -50.4628 65.55 + 52 123.39 647 9 0 -70.7552 -50.4903 64.15 + 52 130.683 550 8 1 -69.8885 -51.1296 35.55 + 52 146.614 644 8 0 -69.827 -51.1518 34.15 + 52 108.907 557 7 1 -68.4874 -51.5272 5.55 + 52 270.744 642 7 0 -68.4155 -51.5458 4.15 + 52 103.306 565 6 1 -66.9901 -51.7728 -24.45 + 52 361.013 641 6 0 -66.9161 -51.769 -25.85 + 52 222.361 574 5 1 -65.0633 -51.4378 -54.45 + 52 2.90825 575 5 1 -65.05 -51.444 -54.8398 + 52 165.122 642 5 0 -65.014 -51.4647 -55.85 + 52 115.814 581 4 1 -63.796 -52.0242 -84.45 + 52 116.812 640 4 0 -63.7656 -51.9686 -85.85 + 52 187.55 584 3 1 -63.1179 -50.8866 -114.45 + 52 103.107 646 3 0 -63.1045 -50.8406 -115.85 + 52 132.471 585 2 1 -62.9213 -49.5915 -144.45 + 52 180.292 652 2 0 -62.9175 -49.5689 -145.85 + 52 196.652 587 1 1 -62.5392 -49.0898 -174.45 + 52 173.591 655 1 0 -62.5165 -49.0126 -175.85 + 52 118.202 590 0 1 -61.9051 -47.6295 -204.45 + 52 234.821 662 0 0 -61.8541 -47.5807 -205.85 + 52 44.4828 638 3 0 -64.276 -52.3069 -115.85 + 52 49.6869 577 3 1 -64.6182 -55.1615 -114.85 + 52 89.6458 576 3 1 -64.65 -55.2036 -114.827 + 52 295.068 567 4 1 -66.4935 -55.6747 -84.45 + 52 112.591 620 4 0 -66.6301 -55.9292 -85.85 + 52 211.306 549 3 1 -70.1859 -61.5895 -114.45 + 52 75.5761 593 3 0 -69.7705 -61.3102 -115.85 + 52 47.0716 594 3 0 -69.6885 -61.25 -116.109 + 52 50.3745 602 2 1 -59.5207 -53.4159 -144.45 + 52 94.9224 603 2 1 -59.45 -53.3632 -144.572 + 52 82.2295 636 2 0 -58.6019 -52.7651 -145.85 + 52 61.4694 637 2 0 -58.4517 -52.65 -146.085 + 52 64.1548 707 1 1 -38.5247 -38.7535 -174.45 + 52 47.3988 708 1 1 -38.45 -38.6899 -174.668 + 52 117.214 708 1 0 -38.0922 -38.4366 -175.851 + 52 42.8614 761 0 1 -27.7097 -32.3183 -204.45 + 52 102.019 762 0 1 -27.6498 -32.2933 -204.569 + 52 175.693 740 0 0 -27.09 -32.0483 -205.85 + 52 121.467 622 4 0 -66.3942 -55.6369 -85.8504 + 52 109.217 579 3 1 -64.1751 -55.2334 -114.45 + 52 60.9699 623 3 0 -64.0015 -55.4177 -115.85 + 52 50.4691 622 3 0 -63.9764 -55.45 -116.072 + 52 151.41 595 2 1 -60.9669 -58.8127 -144.45 + 52 115.398 606 2 0 -60.7366 -58.8174 -145.85 + 52 89.9484 617 1 1 -56.5282 -59.065 -174.45 + 52 117.259 605 1 0 -56.381 -59.0168 -175.85 + 52 42.6208 637 0 1 -52.5177 -58.1492 -204.45 + 52 73.2413 638 0 1 -52.45 -58.1246 -204.587 + 52 91.597 610 0 0 -51.7878 -57.905 -205.85 + 52 32.6176 611 0 0 -51.6361 -57.85 -206.154 + 52 112.793 648 10 0 -71.0168 -50.2564 94.15 + 52 126.71 538 9 1 -72.3208 -51.5539 65.55 + 52 99.7307 642 9 0 -72.6043 -51.6313 64.1497 + 52 24.4668 641 9 0 -72.6706 -51.65 63.8113 + 52 64.1489 510 8 1 -78.0178 -53.6308 35.5498 + 52 78.891 509 8 1 -78.05 -53.6017 35.3197 + 52 32.2061 632 8 0 -78.2424 -53.4574 34.1499 + 52 129.082 633 8 0 -78.2526 -53.45 34.0889 + 52 53.9914 485 7 1 -82.9983 -49.8701 5.55 + 52 158.944 484 7 1 -83.05 -49.8516 5.39032 + 52 120.892 651 7 0 -83.4549 -49.7207 4.15 + 52 246.305 434 6 1 -93.2178 -47.0527 -24.4501 + 52 112.192 666 6 0 -93.4301 -46.8468 -25.85 + 52 135.149 409 5 1 -98.2358 -41.8172 -54.4503 + 52 128.741 691 5 0 -98.3551 -41.8087 -55.85 + 52 44.9854 399 4 1 -100.3 -40.934 -84.45 + 52 79.5109 398 4 1 -100.35 -40.9005 -84.601 + 52 118.597 697 4 0 -100.748 -40.5871 -85.85 + 52 92.6675 347 3 1 -110.641 -33.3337 -114.45 + 52 27.6349 346 3 1 -110.75 -33.278 -114.769 + 52 139.302 734 3 0 -111.09 -33.1088 -115.85 + 52 11.1708 735 3 0 -111.203 -33.05 -116.222 + 52 66.604 303 2 1 -119.493 -28.496 -144.45 + 52 75.5729 302 2 1 -119.55 -28.4658 -144.604 + 52 246.713 759 2 0 -120.023 -28.244 -145.85 + 52 3.35243 252 1 1 -129.745 -23.9419 -174.451 + 52 114.121 251 1 1 -129.75 -23.9427 -174.465 + 52 88.3072 780 1 0 -130.272 -24.0337 -175.85 + 52 48.5628 779 1 0 -130.377 -24.05 -176.11 + 52 288.268 187 0 1 -142.611 -25.1991 -204.45 + 52 121.678 773 0 0 -142.878 -25.3256 -205.85 + 52 57.7318 775 0 0 -143.655 -25.0487 -205.85 + 52 83.4452 774 0 0 -143.771 -25.05 -206.027 + 52 141.901 662 6 0 -92.6356 -47.4822 -25.85 + 52 13.3646 661 6 0 -92.376 -47.6504 -26.2192 + 52 111.376 630 9 0 -81.1615 -53.9263 63.7503 + 52 243.405 494 9 1 -81.0632 -54.0528 65.15 + 52 217.943 495 9 1 -81.05 -53.9541 65.4542 + 52 36.9729 618 9 0 -81.3184 -56.3205 64.15 + 52 52.9778 617 9 0 -81.3345 -56.4501 64.088 + 52 61.2439 616 9 0 -81.3995 -56.6503 64.0017 + 52 81.8539 615 9 0 -81.5053 -56.8502 63.984 + 52 16.5309 486 9 1 -82.7999 -57.6565 65.1502 + 52 142.427 485 9 1 -82.85 -57.6781 65.1837 + 52 52.4966 484 9 1 -83.05 -57.6696 65.4153 + 52 328.106 544 10 1 -71.05 -50.1937 95.3879 + 52 123.684 649 9 0 -70.8362 -50.2386 64.15 + 52 159.94 547 8 1 -70.5882 -50.5486 35.55 + 52 98.0719 647 8 0 -70.5754 -50.5616 34.15 + 52 112.775 548 7 1 -70.3216 -50.8136 5.55 + 52 127.77 645 7 0 -70.3219 -50.8576 4.15 + 52 119.981 548 6 1 -70.3277 -51.7368 -24.45 + 52 127.531 537 5 1 -72.5848 -52.8922 -54.45 + 52 143.652 542 4 1 -71.5809 -57.0528 -84.45 + 52 53.857 614 4 0 -71.6271 -57.2323 -85.8501 + 52 56.4939 613 4 0 -71.6306 -57.25 -85.9974 + 52 163.101 540 3 1 -72.0364 -60.7975 -114.45 + 52 114.987 595 3 0 -71.8194 -60.9758 -115.85 + 52 80.2327 561 2 1 -67.7285 -64.4112 -144.45 + 52 40.6018 562 2 1 -67.65 -64.4246 -144.726 + 52 105.436 577 2 0 -67.3104 -64.4938 -145.85 + 52 71.7484 606 1 1 -58.712 -66.8857 -174.451 + 52 88.6634 607 1 1 -58.65 -66.8946 -174.657 + 52 314.631 565 1 0 -58.2757 -66.9517 -175.85 + 52 3.48014 655 0 1 -48.8521 -68.16 -204.451 + 52 95.0957 656 0 1 -48.85 -68.1616 -204.468 + 52 144.736 558 0 0 -48.7005 -68.2698 -205.85 + 52 48.611 623 2 0 -70.3599 -55.3252 -146.171 + 52 226.028 548 1 1 -70.3473 -56.2207 -174.45 + 52 142.006 546 0 1 -70.8058 -56.977 -204.45 + 52 114.466 615 0 0 -70.8287 -57.0075 -205.85 + 52 2.8805 593 0 0 74.8344 -61.45 -205.981 + 52 33.8141 424 1 0 -114.545 -95.2714 -176.25 + 52 108.058 620 1 0 -70.3914 -56.0295 -175.85 + 52 120.636 550 0 1 -69.936 -56.6583 -204.45 + 52 124.037 616 0 0 -69.9063 -56.6887 -205.85 + 52 4.61275 620 9 0 -76.7416 -55.9851 64.15 + 52 30.83 510 9 1 -77.996 -58.6952 65.15 + 52 25.2781 604 9 0 -78.7768 -59.1248 64.15 +Number of digits in this event: 68 Using G4ParticleGun... -Particle energy: 6.37508 LIN +Particle energy: 8.43524 LIN Particle: gamma Event: 53 Number of tracker hits in this event: 0 -Number of digits in this event: 3 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 5.14405 LIN +Particle energy: 6.17464 LIN Particle: gamma Event: 54 Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 3.36433 LIN +Particle energy: 6.66185 LIN Particle: gamma Event: 55 Number of tracker hits in this event: 3 - 55 276.566 924 0 1 4.92331 127.438 -204.45 - 55 258.648 1536 0 0 4.91872 127.483 -205.85 - 55 306.637 1537 0 0 4.90064 127.55 -206.209 -Number of digits in this event: 5 + 55 50.5931 1727 9 0 35.7333 165.653 63.75 + 55 8.92926 93 0 1 -161.55 79.8031 -204.634 + 55 59.483 212 4 0 14.8625 -137.55 -86.1188 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 1.58986 LIN +Particle energy: 9.87412 LIN Particle: gamma Event: 56 -Number of tracker hits in this event: 25 - 56 300.16 1317 5 1 83.5267 -93.6391 -54.45 - 56 259.06 432 5 0 83.5254 -93.6402 -55.85 - 56 292.406 1317 4 1 83.4882 -93.6697 -84.45 - 56 297.43 432 4 0 83.4843 -93.6722 -85.85 - 56 123.33 1316 3 1 83.387 -93.7333 -114.45 - 56 131.182 432 3 0 83.4006 -93.721 -115.85 - 56 128.775 1318 2 1 83.7093 -93.496 -144.45 - 56 136.536 433 2 0 83.7338 -93.4669 -145.85 - 56 107.105 1320 1 1 84.1432 -92.8948 -174.45 - 56 239.239 436 1 0 84.1477 -92.8396 -175.85 - 56 91.179 1320 0 1 84.2245 -91.6805 -204.45 - 56 108.348 442 0 0 84.2062 -91.6365 -205.85 - 56 86.9872 1140 0 1 48.25 -121.732 -204.847 - 56 386.032 1702 1 1 160.601 -156.155 -174.45 - 56 132.207 250 9 0 167.863 -130.107 63.75 - 56 89.2219 249 9 0 167.891 -130.15 63.9859 - 56 114.157 1313 3 1 82.6924 -94.269 -114.45 - 56 128.496 429 3 0 82.5618 -94.3288 -115.85 - 56 130.221 1299 2 1 79.9757 -95.648 -144.45 - 56 146.2 421 2 0 79.8197 -95.8772 -145.85 - 56 234.548 1282 1 1 76.5299 -99.9613 -174.45 - 56 107.472 399 1 0 76.5227 -100.156 -175.85 - 56 143.516 1288 0 1 77.7284 -104.993 -204.45 - 56 126.958 374 0 0 77.8516 -105.257 -205.85 - 56 75.1 1332 2 1 86.5621 7.93456 -144.85 -Number of digits in this event: 21 +Number of tracker hits in this event: 1 + 56 4.83448 1753 6 0 -16.3366 170.926 -26.2498 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 1.64868 LIN +Particle energy: 8.29066 LIN Particle: gamma Event: 57 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 143 + 57 243.584 756 10 1 -28.7569 16.2268 95.55 + 57 274.221 980 10 0 -28.7575 16.2223 94.15 + 57 284.588 756 9 1 -28.7462 16.122 65.55 + 57 96.2398 980 9 0 -28.7483 16.1169 64.15 + 57 651.224 756 8 1 -28.7949 16.0499 35.55 + 57 120.261 979 8 0 -28.7691 16.0452 34.15 + 57 192.11 759 7 1 -28.1797 15.7655 5.55 + 57 114.946 978 7 0 -28.1443 15.7592 4.15 + 57 113.492 763 6 1 -27.4167 15.5958 -24.45 + 57 268.686 977 6 0 -27.4079 15.5781 -25.85 + 57 122.531 764 5 1 -27.0984 15.1057 -54.45 + 57 132.438 975 5 0 -27.0797 15.1176 -55.85 + 57 66.5374 766 4 1 -26.6736 15.4643 -84.45 + 57 65.28 767 4 1 -26.65 15.4593 -84.6125 + 57 383.549 976 4 0 -26.4697 15.427 -85.85 + 57 46.9979 788 3 1 -22.2728 14.4619 -114.45 + 57 123.105 789 3 1 -22.25 14.455 -114.599 + 57 137.259 971 3 0 -22.0497 14.3938 -115.85 + 57 137.692 814 2 1 -17.2446 12.8959 -144.45 + 57 215.245 963 2 0 -16.9752 12.7679 -145.85 + 57 39.8058 844 1 1 -11.088 10.2735 -174.45 + 57 124.102 845 1 1 -11.05 10.2646 -174.587 + 57 124.001 950 1 0 -10.7035 10.1816 -175.85 + 57 123.736 886 0 1 -2.77488 8.13847 -204.45 + 57 122.593 939 0 0 -2.35875 8.01926 -205.85 + 57 9.35906 793 4 1 -21.45 -4.85117 -84.5723 + 57 28.6095 874 0 0 -24.627 -5.25 -205.998 + 57 9.99536 980 7 0 -28.5114 16.2384 4.14973 + 57 299.814 981 7 0 -28.51 16.25 4.13166 + 57 444.106 755 6 1 -28.9057 15.6625 -24.4505 + 57 156.067 979 6 0 -28.9947 15.8989 -25.85 + 57 110.428 751 5 1 -29.8371 22.6365 -54.45 + 57 12.1143 1011 5 0 -29.75 22.2652 -55.85 + 57 139.776 1010 5 0 -29.746 22.25 -55.9087 + 57 46.7226 785 4 1 -22.8966 13.864 -84.4504 + 57 200.357 786 4 1 -22.85 13.8035 -84.553 + 57 131.683 965 4 0 -22.192 13.2257 -85.85 + 57 71.2607 870 3 1 -5.89991 1.87744 -114.45 + 57 61.9845 871 3 1 -5.85 1.82837 -114.701 + 57 114.884 907 3 0 -5.56441 1.57166 -115.85 + 57 12.0562 906 3 0 -5.48763 1.45 -116.216 + 57 48.8169 897 2 1 -0.512731 -9.23187 -144.45 + 57 59.9723 898 2 1 -0.45 -9.26086 -144.632 + 57 135.79 851 2 0 0.0634464 -9.65265 -145.85 + 57 24.5295 850 2 0 0.336502 -9.85 -146.191 + 57 70.9793 1051 1 1 30.3965 -23.4513 -174.45 + 57 62.9474 1050 1 1 30.25 -23.5049 -174.6 + 57 87.8488 1049 1 1 30.05 -23.4721 -174.699 + 57 22.0862 1048 1 1 29.8497 -23.3938 -174.824 + 57 117.396 788 1 0 28.4431 -22.3575 -175.85 + 57 85.8286 789 1 0 28.2713 -22.2499 -176.107 + 57 137.438 756 5 1 -28.768 15.6188 -54.45 + 57 119.939 977 5 0 -28.7474 15.6058 -55.85 + 57 85.4758 758 4 1 -28.2601 15.3243 -84.45 + 57 26.5116 759 4 1 -28.25 15.3167 -84.7908 + 57 162.428 763 3 1 -27.4214 14.6422 -114.45 + 57 111.765 972 3 0 -27.3761 14.6075 -115.85 + 57 107.99 768 2 1 -26.4058 13.9465 -144.45 + 57 116.65 969 2 0 -26.3663 13.8981 -145.85 + 57 108.384 772 1 1 -25.5879 12.9093 -174.45 + 57 136.414 964 1 0 -25.5708 12.8784 -175.85 + 57 105.445 774 0 1 -25.2091 12.2187 -204.45 + 57 115.513 960 0 0 -25.1957 12.1876 -205.85 + 57 6.08096 757 9 1 -28.65 16.1407 65.1694 + 57 199.403 979 9 0 -27.2804 15.8762 64.1499 + 57 159.364 980 8 0 -28.6872 16.0687 34.1499 + 57 125.268 761 7 1 -27.7835 16.0582 5.55 + 57 145.274 976 7 0 -27.5418 15.4249 4.15 + 57 4.74334 975 7 0 -27.4148 15.25 3.7655 + 57 84.9315 822 6 1 -15.5335 -1.84301 -24.4502 + 57 100.1 823 6 1 -15.45 -1.95629 -24.5804 + 57 86.1937 885 6 0 -14.6162 -2.85703 -25.8506 + 57 61.4928 884 6 0 -14.4688 -3.05 -26.0755 + 57 12.0846 916 5 1 3.42946 -31.5059 -54.45 + 57 235.453 917 5 1 3.45 -31.5377 -54.4746 + 57 114.589 918 5 1 3.65 -31.7791 -54.637 + 57 75.7489 919 5 1 3.85 -31.9814 -54.7434 + 57 48.9771 920 5 1 4.05 -32.1866 -54.8007 + 57 49.6457 726 5 0 6.95263 -34.7105 -55.85 + 57 94.7513 725 5 0 7.12122 -34.85 -55.9024 + 57 138.471 724 5 0 7.41639 -35.0501 -55.976 + 57 146.445 723 5 0 7.7961 -35.25 -56.0322 + 57 97.8227 722 5 0 8.23125 -35.45 -56.0739 + 57 71.1209 721 5 0 8.50939 -35.6506 -56.1232 + 57 79.1594 720 5 0 8.75499 -35.85 -56.154 + 57 118.974 719 5 0 8.98795 -36.05 -56.1613 + 57 357.512 718 5 0 9.26521 -36.25 -56.1751 + 57 95.8941 717 5 0 9.59898 -36.45 -56.1458 + 57 58.989 716 5 0 9.86043 -36.65 -56.1283 + 57 92.5876 715 5 0 10.0586 -36.85 -56.0447 + 57 98.4926 714 5 0 10.2522 -37.05 -55.9429 + 57 125.045 713 5 0 10.5446 -37.25 -55.8977 + 57 127.279 712 5 0 11.0344 -37.4502 -55.9752 + 57 34.1028 711 5 0 11.3856 -37.65 -56.1736 + 57 13.8022 1287 4 1 77.4683 -76.7024 -84.45 + 57 75.3178 1286 4 1 77.4496 -76.6931 -84.4707 + 57 61.3271 1285 4 1 77.2499 -76.5365 -84.6445 + 57 321.84 1284 4 1 77.05 -76.4345 -84.6911 + 57 21.831 1283 4 1 76.85 -75.5996 -84.8261 + 57 271.536 532 4 0 74.667 -73.6378 -85.85 + 57 247.635 533 4 0 74.4323 -73.45 -86.0057 + 57 297.562 981 8 0 -28.6132 16.3377 34.15 + 57 139.133 765 7 1 -26.9585 21.8009 5.54988 + 57 35.2263 1008 7 0 -27.0489 21.6609 4.14958 + 57 57.7987 1007 7 0 -27.0582 21.65 4.01688 + 57 106.879 748 6 1 -30.4334 19.0778 -24.45 + 57 18.438 747 6 1 -30.45 19.0043 -24.7964 + 57 135.531 993 6 0 -30.5313 18.7468 -25.85 + 57 2.59818 992 6 0 -30.554 18.65 -26.2361 + 57 194.678 746 5 1 -30.7558 12.9019 -54.45 + 57 63.3605 961 5 0 -31.1135 12.3531 -55.8505 + 57 77.3354 960 5 0 -31.1752 12.2499 -56.102 + 57 33.4678 706 4 1 -38.7305 -3.58319 -84.45 + 57 63.1954 707 4 1 -38.6492 -3.64973 -84.4938 + 57 85.0013 708 4 1 -38.45 -3.79448 -84.6096 + 57 181.288 709 4 1 -38.25 -3.93123 -84.7212 + 57 41.3615 710 4 1 -38.05 -4.05038 -84.8074 + 57 0.190353 872 4 0 -35.4902 -5.64935 -85.85 + 57 202.296 871 4 0 -35.4891 -5.65 -85.8504 + 57 145.332 870 4 0 -35.1158 -5.85 -86.0087 + 57 46.1454 869 4 0 -34.6679 -6.05 -86.1903 + 57 134.068 981 9 0 -28.7904 16.2609 64.15 + 57 142.168 755 7 1 -28.8817 16.2714 5.55 + 57 125.15 981 6 0 -28.9483 16.2698 -25.85 + 57 117.136 755 5 1 -28.9494 16.3439 -54.45 + 57 132.763 981 5 0 -28.9489 16.3472 -55.85 + 57 109.373 755 4 1 -28.9316 16.4571 -84.45 + 57 35.9561 981 4 0 -29.0686 16.2872 -85.85 + 57 69.8653 980 4 0 -29.0841 16.25 -86.0198 + 57 226.862 755 0 1 -28.8725 16.7387 -204.45 + 57 279.568 983 0 0 -28.8705 16.7444 -205.85 + 57 270.121 754 2 1 -29.2275 16.2088 -144.45 + 57 207.223 980 2 0 -29.2373 16.198 -145.85 + 57 113.541 752 1 1 -29.5183 15.8402 -174.45 + 57 117.789 978 1 0 -29.4832 15.7511 -175.85 + 57 110.179 757 0 1 -28.6074 13.8474 -204.45 + 57 148.539 968 0 0 -28.4892 13.7914 -205.85 + 57 159.418 753 1 1 -29.298 16.2517 -174.45 + 57 133.281 981 1 0 -29.3066 16.2575 -175.85 + 57 132.113 752 0 1 -29.495 16.412 -204.45 + 57 112.655 981 0 0 -29.5014 16.4192 -205.85 + 57 234.547 887 2 0 -10.2708 -2.53738 -146.25 + 57 185.974 753 2 1 -29.25 16.1932 -144.671 +Number of digits in this event: 65 Using G4ParticleGun... -Particle energy: 8.71407 LIN +Particle energy: 7.79799 LIN Particle: gamma Event: 58 -Number of tracker hits in this event: 25 - 58 223.533 315 2 1 -116.968 59.3027 -144.45 - 58 226.468 1196 2 0 -116.969 59.3004 -145.85 - 58 925.175 315 1 1 -117.012 59.2319 -174.45 - 58 107.855 1195 1 0 -117.013 59.2282 -175.85 - 58 116.915 315 0 1 -117.023 59.1504 -204.45 - 58 252.151 1195 0 0 -117.023 59.1464 -205.85 - 58 64.0587 316 1 1 -116.95 59.2917 -174.78 - 58 177.349 1225 1 0 -134.721 65.0786 -176.249 - 58 455.524 223 1 1 -135.509 65.3632 -174.85 - 58 386.171 1196 1 0 -116.964 59.3157 -175.85 - 58 269.015 316 0 1 -116.919 59.279 -204.45 - 58 231.845 1196 0 0 -116.918 59.2792 -205.85 - 58 80.3709 1198 1 0 -117.313 59.7732 -175.85 - 58 62.2678 1199 1 0 -117.386 59.85 -176.049 - 58 49.9433 1519 1 0 -117.015 123.985 -176.25 - 58 75.8607 1520 1 0 -116.977 124.15 -176.165 - 58 113.827 1521 1 0 -117.002 124.35 -176.041 - 58 309.222 308 1 1 -118.416 125.945 -174.85 - 58 197.439 307 1 1 -118.55 126.017 -174.72 - 58 186.424 1522 1 0 -117.074 124.55 -175.956 - 58 15.045 1523 1 0 -117.182 124.75 -175.922 - 58 4.4586 319 1 1 -116.203 120.501 -174.85 - 58 166.451 1495 1 0 -116.504 119.316 -175.85 - 58 55.2615 317 1 1 -116.62 119.723 -174.85 - 58 233.813 314 0 1 -117.306 59.1702 -204.45 -Number of digits in this event: 18 +Number of tracker hits in this event: 0 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 7.99808 LIN +Particle energy: 2.75508 LIN Particle: gamma Event: 59 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 18 + 59 276.532 984 3 1 16.9664 128.253 -114.45 + 59 355.547 1540 3 0 16.9669 128.244 -115.85 + 59 266.588 984 2 1 16.9494 128.081 -144.45 + 59 109.696 1539 2 0 16.9442 128.083 -145.85 + 59 224.527 983 1 1 16.824 128.102 -174.45 + 59 130.499 1539 1 0 16.8176 128.101 -175.85 + 59 137.494 983 0 1 16.6837 128.057 -204.45 + 59 186.532 1539 0 0 16.6758 128.051 -205.85 + 59 35.8346 13 2 0 -97.6441 -177.35 -146.157 + 59 104.087 12 2 0 -97.7473 -177.55 -146.106 + 59 265.37 985 3 1 17.05 128.151 -114.745 + 59 13.7768 1533 3 0 18.5305 126.829 -115.85 + 59 58.2186 996 3 1 19.2513 125.504 -114.85 + 59 144.408 1540 2 0 16.8899 128.268 -145.85 + 59 399.879 1540 1 0 16.7369 128.32 -175.85 + 59 110.01 982 0 1 16.6204 128.354 -204.45 + 59 139.577 1540 0 0 16.6182 128.348 -205.85 + 59 95.0336 983 2 1 16.85 128.295 -144.785 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 6.20521 LIN +Particle energy: 5.9164 LIN Particle: gamma Event: 60 Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 6.00925 LIN +Particle energy: 2.37517 LIN Particle: gamma Event: 61 -Number of tracker hits in this event: 2 - 61 188.539 605 1 0 -53.4255 -58.9375 -176.25 - 61 5.53826 169 3 0 -164.963 -146.163 -116.25 -Number of digits in this event: 4 +Number of tracker hits in this event: 75 + 61 247.793 1096 6 1 39.3521 -3.78067 -24.45 + 61 243.759 881 6 0 39.3557 -3.77682 -25.85 + 61 104.976 1096 5 1 39.4217 -3.70047 -54.45 + 61 231.246 881 5 0 39.42 -3.69145 -55.85 + 61 124.988 1096 4 1 39.3821 -3.50615 -84.45 + 61 392.098 882 4 0 39.3761 -3.49043 -85.85 + 61 110.168 1095 3 1 39.2436 -3.15697 -114.45 + 61 144.438 884 3 0 39.2354 -3.13721 -115.85 + 61 134.886 1095 2 1 39.0795 -2.74061 -144.45 + 61 104.069 886 2 0 39.0731 -2.71876 -145.85 + 61 127.326 1094 1 1 38.933 -2.2466 -174.45 + 61 114.569 889 1 0 38.9233 -2.22534 -175.85 + 61 109.744 1093 0 1 38.7244 -1.81702 -204.45 + 61 147.792 891 0 0 38.7135 -1.79483 -205.85 + 61 48.6305 965 3 0 40.5892 13.1498 -116.25 + 61 117.53 966 3 0 40.5666 13.25 -116.115 + 61 167.888 967 3 0 40.8109 13.45 -115.869 + 61 82.2478 968 3 0 41.0665 13.65 -115.894 + 61 14.1311 969 3 0 41.1889 13.85 -115.881 + 61 34.7212 1111 3 1 42.4022 14.6303 -114.85 + 61 224.428 1112 3 1 42.45 14.7159 -114.809 + 61 37.6121 1113 3 1 42.6501 14.8334 -114.604 + 61 18.6915 1010 0 0 37.0269 22.1001 -206.25 + 61 82.6305 1011 0 0 37.0063 22.25 -206.025 + 61 33.4218 1083 0 1 36.7922 22.6854 -204.85 + 61 281.74 1016 0 0 37.0499 23.2976 -205.85 + 61 23.9841 1015 0 0 37.0954 23.25 -206.057 + 61 222.815 1098 1 1 39.7963 -3.4779 -174.45 + 61 330.445 883 1 0 39.9469 -3.38837 -175.85 + 61 141.411 1115 0 1 43.0832 -0.962634 -204.45 + 61 111.67 895 0 0 43.2468 -0.982758 -205.85 + 61 288.291 882 1 0 39.7787 -3.54025 -175.85 + 61 101.336 1097 0 1 39.5325 -4.21891 -204.45 + 61 149.345 878 0 0 39.51 -4.28537 -205.85 + 61 4.63031 1087 1 1 37.5198 -1.46091 -174.85 + 61 92.9684 914 1 0 33.9616 2.97681 -175.85 + 61 228.612 915 1 0 33.7938 3.05 -175.975 + 61 123.68 916 1 0 33.8117 3.25 -176.094 + 61 124.032 884 1 0 40.3778 -3.24983 -175.935 + 61 112.713 1098 5 1 39.7013 -3.74425 -54.45 + 61 477.715 1099 4 1 39.9643 -3.71536 -84.45 + 61 167.406 881 4 0 39.979 -3.72627 -85.85 + 61 106.224 1101 3 1 40.2886 -3.934 -114.45 + 61 110.142 880 3 0 40.2907 -3.9285 -115.85 + 61 174.502 1101 2 1 40.3176 -3.8659 -144.45 + 61 107.33 880 2 0 40.3228 -3.8637 -145.85 + 61 112.86 1101 1 1 40.4239 -3.73164 -174.45 + 61 156.597 881 1 0 40.4048 -3.71264 -175.85 + 61 108.721 1099 0 1 39.9516 -3.26497 -204.45 + 61 120.665 884 0 0 39.9377 -3.24696 -205.85 + 61 65.9605 993 0 1 18.6955 -15.7495 -204.85 + 61 54.8596 1018 3 1 23.7579 -34.6416 -114.85 + 61 128.219 889 4 0 35.7542 -2.10933 -85.85 + 61 179.74 890 4 0 35.6323 -2.04993 -85.9707 + 61 107.894 1091 3 1 38.3211 -2.9829 -114.45 + 61 160.768 885 3 0 38.2916 -2.977 -115.85 + 61 131.965 1089 2 1 37.8707 -3.00392 -144.45 + 61 138.815 885 2 0 37.8581 -3.02748 -145.85 + 61 107.593 1083 1 1 36.7244 -4.37079 -174.45 + 61 222.81 1082 1 1 36.65 -4.44011 -174.818 + 61 348.009 876 1 0 36.4195 -4.66397 -175.85 + 61 100.104 1052 0 1 30.5185 -10.9647 -204.45 + 61 30.9474 1051 0 1 30.45 -11.0146 -204.736 + 61 25.3284 844 0 0 30.1639 -11.2352 -205.85 + 61 91.6967 843 0 0 30.1457 -11.25 -205.921 + 61 9.6919 66 3 1 -166.869 136.453 -114.45 + 61 141.113 1107 3 1 41.5785 -2.67972 -114.45 + 61 88.4298 887 3 0 41.4799 -2.49489 -115.85 + 61 19.8684 888 3 0 41.456 -2.44999 -116.19 + 61 154.433 1097 2 1 39.5243 1.26013 -144.45 + 61 153.385 907 2 0 39.391 1.48848 -145.851 + 61 58.6559 930 1 0 36.368 6.22309 -175.85 + 61 49.792 931 1 0 36.3399 6.25 -176.064 + 61 120.983 1062 0 1 32.5423 9.90065 -204.45 + 61 109.16 950 0 0 32.2502 10.1301 -205.85 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 7.33948 LIN +Particle energy: 8.71244 LIN Particle: gamma Event: 62 -Number of tracker hits in this event: 4 - 62 31.9409 1554 5 0 84.0936 131.024 -55.85 - 62 482.94 1322 5 1 84.4549 130.078 -54.45 - 62 339.397 888 0 0 70.1882 -2.36153 -206.25 - 62 62.7532 1171 0 1 54.25 2.26105 -204.796 -Number of digits in this event: 4 +Number of tracker hits in this event: 61 + 62 295.423 1278 6 1 75.8434 74.9496 -24.45 + 62 231.283 1274 6 0 75.8444 74.9498 -25.85 + 62 359.595 1279 5 1 75.8701 74.9546 -54.45 + 62 294.864 1274 5 0 75.8709 74.9546 -55.85 + 62 265.152 1279 4 1 75.8857 74.9616 -84.45 + 62 256.471 1274 4 0 75.8886 74.963 -85.85 + 62 142.6 1279 3 1 75.9449 74.9935 -114.45 + 62 231.092 1274 3 0 75.9478 74.9927 -115.85 + 62 105.535 1279 2 1 75.9946 74.9717 -144.45 + 62 227.741 1274 2 0 76.0005 74.9684 -145.85 + 62 105.187 1280 1 1 76.1292 74.9 -174.45 + 62 381.123 1274 1 0 76.1336 74.8931 -175.85 + 62 221.64 1280 0 1 76.2293 74.7599 -204.45 + 62 122.809 1273 0 0 76.2366 74.751 -205.85 + 62 108.229 1311 1 1 82.4331 104.499 -174.85 + 62 141.795 1281 0 1 76.2501 74.8042 -204.616 + 62 274.884 1275 0 0 76.8778 75.1674 -205.85 + 62 41.9604 1276 0 0 77.0531 75.25 -206.194 + 62 138.611 1279 0 1 75.9298 74.9982 -204.45 + 62 158.086 1274 0 0 75.932 74.9841 -205.85 + 62 8.83042 1282 0 1 76.45 74.8415 -204.821 + 62 211.741 1271 0 0 77.4251 74.3644 -205.85 + 62 47.0621 1270 0 0 77.6611 74.25 -206.137 + 62 245.705 1278 3 1 75.8236 74.9604 -114.45 + 62 164.191 1278 2 1 75.8 75.001 -144.45 + 62 141.182 1278 1 1 75.7958 75.0107 -174.45 + 62 143.744 1278 0 1 75.6831 75.0937 -204.45 + 62 146.559 1116 0 1 43.45 -49.9797 -204.787 + 62 69.0845 658 0 0 43.605 -48.4325 -205.85 + 62 80.9839 1117 0 1 43.5137 -47.0727 -204.85 + 62 48.4886 196 6 0 11.9067 -140.75 -26.0553 + 62 136.623 1733 7 0 67.9532 166.75 3.76906 + 62 154.083 1734 7 0 67.8554 166.95 3.94547 + 62 132.478 1273 4 0 76.2812 74.7511 -85.85 + 62 112.915 1323 3 1 84.6668 70.2317 -114.45 + 62 1.62833 1324 3 1 84.85 70.2114 -114.845 + 62 117.499 1250 3 0 85.0624 70.1468 -115.85 + 62 111.944 1339 2 1 87.85 66.3731 -144.45 + 62 139.551 1228 2 0 88.0816 65.8465 -145.85 + 62 183.903 1322 3 1 84.639 70.3087 -114.45 + 62 8.05779 1259 3 0 84.996 72.0245 -115.85 + 62 24.1649 1260 3 0 85.0027 72.0501 -115.862 + 62 21.6743 1310 3 1 82.0961 72.4183 -114.85 + 62 273.499 1309 3 1 82.05 72.4293 -114.84 + 62 3.4453 1265 3 0 84.2932 73.05 -115.895 + 62 112.102 1286 0 1 77.423 76.3173 -204.45 + 62 48.9269 1285 0 1 77.25 76.4791 -204.745 + 62 24.3897 1284 0 0 76.6078 77.0109 -205.85 + 62 107.53 1285 0 0 76.5577 77.05 -205.94 + 62 49.1306 1286 0 0 76.0748 77.25 -205.994 + 62 89.2897 1275 5 0 75.8968 75.05 -56.0793 + 62 99.1327 1278 5 1 75.84 74.9605 -54.45 + 62 77.8444 1277 5 1 75.6498 75.0995 -54.6141 + 62 89.7945 1277 5 0 75.3594 75.5058 -55.85 + 62 166.97 1278 5 0 75.2506 75.6501 -56.1309 + 62 88.2597 1618 5 0 45.5375 143.808 -56.2499 + 62 74.8182 1619 5 0 45.5184 143.95 -56.1351 + 62 218.585 1620 5 0 45.4275 144.15 -56.1236 + 62 108.405 1621 5 0 45.248 144.35 -56.007 + 62 208.827 1279 5 0 75.2719 75.85 -56.2214 + 62 86.7896 1280 5 0 75.1885 76.05 -56.0507 +Number of digits in this event: 33 Using G4ParticleGun... -Particle energy: 4.76952 LIN +Particle energy: 8.20626 LIN Particle: gamma Event: 63 -Number of tracker hits in this event: 12 - 63 79.5836 433 0 0 -52.2006 -93.4737 -206.25 - 63 69.2902 434 0 0 -52.0194 -93.35 -206.046 - 63 97.905 646 0 1 -50.7367 -92.678 -204.85 - 63 168.555 647 0 1 -50.65 -92.6326 -204.761 - 63 127.637 648 0 1 -50.45 -92.509 -204.541 - 63 72.688 645 0 1 -50.8503 -92.9061 -204.717 - 63 104.673 644 0 1 -51.0504 -92.9652 -204.727 - 63 45.9715 420 0 0 -51.2033 -96.015 -205.85 - 63 10.0889 419 0 0 -51.2458 -96.1502 -205.853 - 63 35.2212 605 0 1 -58.944 -103.392 -204.85 - 63 295.983 384 0 0 -60.7649 -103.177 -205.85 - 63 66.4504 385 0 0 -60.8404 -103.15 -205.921 -Number of digits in this event: 5 +Number of tracker hits in this event: 52 + 63 286.142 851 7 1 -9.71691 -83.0878 5.55 + 63 247.431 484 7 0 -9.71666 -83.0877 4.15 + 63 224.602 851 6 1 -9.71427 -83.0894 -24.45 + 63 251.213 484 6 0 -9.71524 -83.0916 -25.85 + 63 236.562 851 5 1 -9.7345 -83.1353 -54.45 + 63 240.894 484 5 0 -9.73458 -83.1363 -55.85 + 63 250.867 851 4 1 -9.73145 -83.1603 -84.45 + 63 250.01 484 4 0 -9.73171 -83.1617 -85.85 + 63 139.155 851 3 1 -9.73299 -83.1891 -114.45 + 63 133.36 484 3 0 -9.73017 -83.1913 -115.85 + 63 106.749 851 2 1 -9.66981 -83.2336 -144.45 + 63 110.056 484 2 0 -9.66789 -83.2341 -145.85 + 63 126.528 852 1 1 -9.63184 -83.2459 -174.45 + 63 131.396 484 1 0 -9.6319 -83.2456 -175.85 + 63 332.284 852 0 1 -9.63331 -83.2365 -204.45 + 63 132.458 484 0 0 -9.63184 -83.2354 -205.85 + 63 15.6616 1601 13 0 63.6411 140.35 183.794 + 63 39.0905 610 0 1 -57.851 -98.7618 -204.85 + 63 68.8203 852 5 1 -9.65 -83.1525 -54.5949 + 63 110.455 853 5 1 -9.45 -83.1875 -54.6007 + 63 179.896 483 5 0 -9.02346 -83.4097 -55.8503 + 63 229.457 501 5 0 -48.3303 -79.6565 -56.2492 + 63 220.698 850 3 1 -9.88281 -83.0302 -114.45 + 63 117.322 485 3 0 -9.88545 -83.0408 -115.85 + 63 109.58 850 2 1 -9.92183 -83.2483 -144.45 + 63 135.897 483 2 0 -9.91867 -83.2554 -145.85 + 63 142.615 851 1 1 -9.84802 -83.4556 -174.45 + 63 112.783 482 1 0 -9.83718 -83.4581 -175.85 + 63 141.402 482 0 0 -9.58506 -83.5332 -205.85 + 63 484.75 850 4 1 -9.85039 -83.4032 -84.5158 + 63 282.304 849 3 1 -10.1275 -83.1523 -114.45 + 63 7.70974 497 3 0 -10.0256 -80.4864 -115.85 + 63 68.6747 498 3 0 -10.0257 -80.45 -115.87 + 63 122.717 499 3 0 -10.0375 -80.25 -115.979 + 63 115.433 500 3 0 -10.0223 -80.0495 -116.053 + 63 32.068 481 3 0 -9.99296 -83.8009 -115.85 + 63 91.5769 480 3 0 -9.9944 -83.85 -115.971 + 63 215.943 846 2 1 -10.7547 -95.0413 -144.45 + 63 104.691 422 2 0 -10.8062 -95.596 -145.85 + 63 122.489 836 1 1 -12.6969 -105.671 -174.45 + 63 108.848 371 1 0 -12.62 -105.82 -175.85 + 63 107.511 845 0 1 -10.893 -109.325 -204.45 + 63 116.583 354 0 0 -10.9542 -109.267 -205.85 + 63 84.9154 349 0 0 1.60342 -110.292 -206.25 + 63 27.9265 350 0 0 1.73347 -110.15 -205.961 + 63 107.502 909 0 1 2.01437 -109.781 -204.85 + 63 179.684 910 0 1 2.05 -109.747 -204.761 + 63 52.513 912 0 1 2.55232 -109.516 -204.45 + 63 72.6915 911 0 1 2.44982 -109.321 -204.509 + 63 75.1822 908 0 1 1.85 -108.759 -204.733 + 63 95.8694 907 0 1 1.64975 -108.619 -204.692 + 63 99.2071 906 0 1 1.44997 -108.397 -204.585 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 2.76953 LIN +Particle energy: 6.41099 LIN Particle: gamma Event: 64 -Number of tracker hits in this event: 52 - 64 331.678 945 5 1 9.05778 13.8012 -54.45 - 64 280.187 968 5 0 9.05232 13.8009 -55.85 - 64 118.102 944 4 1 8.94387 13.8403 -84.45 - 64 137.854 968 4 0 8.94217 13.8352 -85.85 - 64 207.631 944 3 1 8.95047 13.7566 -114.45 - 64 143.685 968 3 0 8.94447 13.7504 -115.85 - 64 110.372 943 2 1 8.75399 13.6422 -144.45 - 64 202.811 967 2 0 8.74265 13.6412 -145.85 - 64 102.101 942 1 1 8.49487 13.5967 -174.45 - 64 333.252 967 1 0 8.48814 13.5987 -175.85 - 64 127.784 941 0 1 8.35994 13.6558 -204.45 - 64 130.664 968 0 0 8.36297 13.6649 -205.85 - 64 97.4867 945 3 1 9.07558 13.6072 -114.45 - 64 248.917 946 3 1 9.25 13.367 -114.525 - 64 69.8379 947 3 1 9.45 13.1258 -114.569 - 64 109.874 948 3 1 9.65 12.9148 -114.621 - 64 97.3684 949 3 1 9.85 12.6747 -114.692 - 64 93.95 950 3 1 10.05 12.4556 -114.755 - 64 92.2317 951 3 1 10.25 12.2228 -114.798 - 64 16.7365 952 3 1 10.45 11.9643 -114.814 - 64 136.051 955 3 0 12.0648 11.1888 -115.85 - 64 90.848 954 3 0 12.3212 11.05 -116.044 - 64 59.7688 1105 2 1 41.1089 -13.0787 -144.45 - 64 103.094 1104 2 1 41.0499 -13.2128 -144.602 - 64 64.5314 824 2 0 40.1693 -15.0527 -145.85 - 64 75.8049 823 2 0 40.0709 -15.25 -145.98 - 64 72.2263 822 2 0 39.9968 -15.45 -146.096 - 64 46.1236 821 2 0 39.9364 -15.65 -146.201 - 64 87.5822 517 2 0 19.5882 -76.5621 -146.25 - 64 83.2845 518 2 0 19.7528 -76.4499 -146.037 - 64 87.7106 1005 2 1 21.0609 -75.6743 -144.85 - 64 71.3174 1006 2 1 21.25 -75.538 -144.682 - 64 55.1756 1007 2 1 21.45 -75.4496 -144.613 - 64 58.6977 1008 2 1 21.6505 -75.3653 -144.544 - 64 91.6664 1009 2 1 21.85 -75.2676 -144.478 - 64 46.8094 1010 2 1 22.05 -75.1649 -144.743 - 64 44.9508 524 2 0 22.9726 -75.1859 -145.85 - 64 72.597 523 2 0 23.0579 -75.25 -145.985 - 64 51.4216 522 2 0 23.0709 -75.45 -146.148 - 64 27.9399 132 2 0 29.7247 -153.665 -146.25 - 64 266.504 131 2 0 29.751 -153.75 -146.204 - 64 42.3948 1035 2 1 27.1626 -154.895 -144.85 - 64 329.11 1034 2 1 27.05 -154.903 -144.79 - 64 89.6006 1033 2 1 26.85 -154.77 -144.738 - 64 197.713 945 4 1 9.20161 13.6194 -84.45 - 64 110.13 967 4 0 9.2054 13.6109 -85.85 - 64 100.81 967 3 0 9.28088 13.4688 -115.85 - 64 51.2009 946 2 1 9.4488 13.5542 -144.45 - 64 58.9211 947 2 1 9.45 13.5538 -144.605 - 64 127.547 948 1 1 9.68916 13.5088 -174.45 - 64 124.392 949 0 1 10.0056 13.377 -204.45 - 64 117.323 966 0 0 10.0188 13.3735 -205.85 -Number of digits in this event: 18 +Number of tracker hits in this event: 152 + 64 267.077 611 10 1 -57.6779 93.9323 95.55 + 64 222.353 1368 10 0 -57.6778 93.9334 94.15 + 64 311.271 611 9 1 -57.6761 93.9588 65.55 + 64 120.773 1369 9 0 -57.6767 93.9573 64.15 + 64 101.379 611 8 1 -57.6948 93.9306 35.55 + 64 381.345 1368 8 0 -57.6959 93.9267 34.15 + 64 220.383 611 7 1 -57.7113 93.8448 5.55 + 64 396.326 1368 7 0 -57.7122 93.8384 4.15 + 64 727.36 611 6 1 -57.7328 93.7042 -24.45 + 64 453.432 1367 6 0 -57.7374 93.699 -25.85 + 64 228.617 611 5 1 -57.8288 93.5856 -54.45 + 64 302.925 1367 5 0 -57.8315 93.6038 -55.85 + 64 131.095 610 4 1 -57.8787 93.9389 -84.45 + 64 141.55 1368 4 0 -57.8806 93.9449 -85.85 + 64 206.325 610 3 1 -57.9254 94.1037 -114.45 + 64 102.778 1369 3 0 -57.927 94.1018 -115.85 + 64 352.04 610 2 1 -57.9378 94.0071 -144.45 + 64 260.377 1369 2 0 -57.9303 94.0029 -145.85 + 64 590.628 611 1 1 -57.7326 93.8741 -174.45 + 64 515.655 1368 1 0 -57.7263 93.8631 -175.85 + 64 112.292 612 0 1 -57.5754 93.6589 -204.45 + 64 97.5626 1367 0 0 -57.5976 93.673 -205.85 + 64 100.401 1674 10 0 -24.7673 155.002 93.75 + 64 1.56118 774 10 1 -25.05 153.566 95.4438 + 64 182.379 1369 4 0 -57.8952 93.9501 -86.1413 + 64 36.2063 1401 4 0 -46.5509 100.429 -85.85 + 64 169.164 671 4 1 -45.7189 100.161 -84.85 + 64 34.1653 612 1 1 -57.5989 93.3461 -174.45 + 64 221.268 1369 1 0 -57.7649 93.95 -176.029 + 64 69.1171 1476 1 0 -110.687 115.452 -176.25 + 64 137.771 1477 1 0 -110.775 115.55 -176.137 + 64 214.54 346 1 1 -110.83 115.471 -174.85 + 64 129.549 611 2 1 -57.7374 93.1981 -144.606 + 64 240.485 1365 2 0 -57.7379 93.1933 -145.85 + 64 332.009 1364 1 0 -57.7757 93.0493 -175.85 + 64 274.881 611 0 1 -57.8153 92.917 -204.45 + 64 152.832 1363 0 0 -57.8123 92.9094 -205.85 + 64 152.13 1541 3 1 128.35 86.6301 -114.648 + 64 94.0257 1540 3 1 128.35 86.7107 -114.467 + 64 108.071 1364 0 0 -57.6658 93.0871 -205.85 + 64 139.895 1367 7 0 -57.61 93.75 3.87998 + 64 32.4532 1369 7 0 -58.1669 94.1289 4.15 + 64 153.576 1370 7 0 -58.2068 94.15 4.04897 + 64 98.0164 1315 7 0 -104.967 83.0583 3.75008 + 64 388.575 1314 7 0 -104.977 83.05 3.76089 + 64 7.60446 1291 7 0 -106.873 78.2714 3.75 + 64 77.4588 1290 7 0 -106.864 78.25 3.77041 + 64 19.2826 1120 7 0 -45.2207 44.0857 3.75007 + 64 186.111 1119 7 0 -45.1711 44.05 3.77216 + 64 176.598 1038 7 0 -43.0657 27.7629 3.75 + 64 520.217 1313 7 0 -105.123 82.85 3.90023 + 64 112.62 1368 9 0 -57.7 93.9287 64.15 + 64 105.236 612 8 1 -57.622 93.9394 35.55 + 64 173.826 612 7 1 -57.6399 93.8973 5.55 + 64 104.068 613 6 1 -57.4342 94.2176 -24.45 + 64 110.562 1370 6 0 -57.4274 94.2827 -25.85 + 64 99.0562 613 5 1 -57.3282 95.6212 -54.45 + 64 140.948 1377 5 0 -57.3142 95.6979 -55.85 + 64 102.431 615 4 1 -57.003 97.2635 -84.45 + 64 30.1289 1385 4 0 -57.003 97.3443 -85.85 + 64 143.267 1386 4 0 -57.0029 97.35 -85.9476 + 64 123.349 615 3 1 -56.8887 98.9056 -114.45 + 64 101.185 1394 3 0 -56.8816 98.9787 -115.85 + 64 131.966 615 2 1 -56.8546 100.351 -144.45 + 64 124.149 1401 2 0 -56.878 100.391 -145.85 + 64 153.626 613 1 1 -57.3743 101.206 -174.45 + 64 126.445 1405 1 0 -57.4344 101.29 -175.85 + 64 252.275 606 0 1 -58.7524 103.057 -204.45 + 64 104.549 1414 0 0 -58.8315 103.113 -205.85 + 64 127.985 1661 0 0 -57.0785 152.38 -206.25 + 64 389.09 1368 6 0 -57.8024 93.8123 -25.85 + 64 149.079 607 5 1 -58.5904 92.1036 -54.45 + 64 118.735 1359 5 0 -58.6816 92.0498 -55.85 + 64 122.282 597 4 1 -60.6169 90.965 -84.45 + 64 143.259 1353 4 0 -60.7082 90.9077 -85.85 + 64 159.507 587 3 1 -62.6167 89.9518 -114.45 + 64 20.4783 586 3 1 -62.65 90.0249 -114.791 + 64 129.492 1350 3 0 -62.7427 90.2558 -115.85 + 64 158.513 586 2 1 -62.7929 95.931 -144.45 + 64 116.996 1378 2 0 -62.6445 95.8019 -145.85 + 64 184.277 604 1 1 -59.0718 93.19 -174.45 + 64 154.954 1361 1 0 -59.4389 92.5066 -175.85 + 64 53.438 456 0 1 -88.7563 99.588 -204.45 + 64 496.066 457 0 1 -88.6499 99.5111 -204.527 + 64 99.9744 625 5 1 -54.8646 89.6166 -54.45 + 64 183.955 1348 5 0 -55.031 89.6523 -55.85 + 64 13.3561 1347 5 0 -55.0909 89.65 -56.2132 + 64 120.545 604 4 1 -59.1279 88.5539 -84.45 + 64 131.491 1341 4 0 -59.5165 88.3966 -85.8501 + 64 198.397 565 3 1 -67.0353 85.3592 -114.45 + 64 94.3339 564 3 1 -67.05 85.3431 -114.499 + 64 15.4229 1324 3 0 -67.5039 84.8694 -115.85 + 64 114.551 1323 3 0 -67.5225 84.85 -115.903 + 64 43.0201 517 2 1 -76.6042 73.0113 -144.45 + 64 88.0091 516 2 1 -76.65 72.9475 -144.552 + 64 134.707 1260 2 0 -77.232 72.2257 -145.85 + 64 35.0291 450 1 1 -90.0032 61.2785 -174.45 + 64 13.1257 449 1 1 -90.15 61.0535 -174.807 + 64 18.3518 1201 1 0 -90.5955 60.2912 -175.85 + 64 159.224 1200 1 0 -90.6191 60.25 -175.904 + 64 35.0432 1199 1 0 -90.7372 60.05 -176.155 + 64 149.867 366 0 1 -106.835 38.4188 -204.45 + 64 12.8097 1087 0 0 -107.341 37.4706 -205.85 + 64 122.723 1086 0 0 -107.354 37.45 -205.882 + 64 18.5341 1085 0 0 -107.475 37.2497 -206.191 + 64 76.7107 566 3 1 -66.85 85.0714 -114.739 + 64 89.8515 1322 3 0 -66.5181 84.5681 -115.85 + 64 73.5413 1321 3 0 -66.4261 84.45 -116.093 + 64 131.143 612 5 1 -57.6346 93.7693 -54.45 + 64 209.41 1368 5 0 -57.6445 93.7686 -55.85 + 64 198.177 611 4 1 -57.8201 93.7373 -84.45 + 64 222.333 1367 4 0 -57.8414 93.7405 -85.85 + 64 174.331 608 3 1 -58.2611 93.7657 -114.45 + 64 198.728 1368 3 0 -58.282 93.7776 -115.85 + 64 117.67 606 2 1 -58.6872 94.065 -144.45 + 64 105.914 603 1 1 -59.346 94.3867 -174.45 + 64 138.11 1371 1 0 -59.4126 94.4197 -175.85 + 64 226.215 596 0 1 -60.6905 95.0996 -204.45 + 64 149.949 1375 0 0 -60.7291 95.2058 -205.85 + 64 105.892 1377 0 0 -60.3866 95.5686 -205.851 + 64 14.8451 1378 0 0 -60.3209 95.7502 -206.2 + 64 119.668 612 4 1 -57.5523 93.7014 -84.45 + 64 184.408 612 3 1 -57.4558 93.72 -114.45 + 64 250.566 1367 3 0 -57.4566 93.7179 -115.85 + 64 100.528 612 2 1 -57.5015 93.7341 -144.45 + 64 113.088 1368 2 0 -57.5202 93.7527 -145.85 + 64 218.977 610 1 1 -57.9108 94.0573 -174.45 + 64 159.17 609 0 1 -58.2334 94.4661 -204.45 + 64 142.205 1371 0 0 -58.2541 94.4862 -205.85 + 64 58.0143 351 6 0 129.748 -109.75 -26.1169 + 64 119.368 1663 1 0 -144.819 152.75 -176.015 + 64 46.8288 1664 1 0 -144.548 152.95 -175.917 + 64 94.8466 186 1 1 -142.887 155.296 -174.85 + 64 44.7817 1680 1 0 -141.793 156.336 -175.85 + 64 243.279 1681 1 0 -141.771 156.35 -175.881 + 64 121.127 1682 1 0 -141.476 156.55 -176.06 + 64 156.934 1474 5 0 149.392 115.097 -56.25 + 64 110.81 1475 5 0 149.997 115.15 -56.0308 + 64 214.374 1655 5 1 151.196 114.313 -54.85 + 64 40.4286 1654 5 1 151.15 114.269 -54.5895 + 64 140.954 609 1 1 -58.0501 94.0841 -174.718 + 64 114.303 613 3 1 -57.45 93.7414 -114.489 + 64 240.213 614 1 1 -57.1587 93.8561 -174.45 + 64 4.71153 1367 1 0 -57.2756 93.75 -176.233 + 64 86.4641 1360 0 0 -58.8994 92.2652 -205.85 + 64 156.317 604 0 1 -59.0697 96.6489 -204.451 + 64 228.922 1382 0 0 -59.0268 96.7216 -205.85 + 64 2.48489 1383 0 0 -59.0092 96.75 -206.244 + 64 28.6095 730 0 1 -33.962 82.7305 -204.85 + 64 179.043 612 6 1 -57.6394 93.8266 -24.4504 + 64 134.298 610 6 1 -57.85 93.5114 -24.4788 + 64 139.871 609 6 1 -58.0502 93.6023 -24.5155 +Number of digits in this event: 92 Using G4ParticleGun... -Particle energy: 8.04026 LIN +Particle energy: 3.10854 LIN Particle: gamma Event: 65 -Number of tracker hits in this event: 2 - 65 101.696 335 1 0 124.83 -113.05 -176.25 - 65 71.2555 336 1 0 125.1 -112.95 -175.955 -Number of digits in this event: 2 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 9.04634 LIN +Particle energy: 9.195 LIN Particle: gamma Event: 66 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 76 + 66 267.95 1368 8 1 93.8365 -77.861 35.55 + 66 207.966 510 8 0 93.8367 -77.8611 34.15 + 66 148.411 1368 7 1 93.8382 -77.8587 5.55 + 66 351.529 510 7 0 93.8383 -77.8577 4.15 + 66 166.545 1368 6 1 93.8408 -77.8349 -24.45 + 66 150.479 511 6 0 93.8401 -77.834 -25.85 + 66 245.45 1368 5 1 93.8237 -77.8188 -54.45 + 66 116.109 511 5 0 93.8226 -77.8185 -55.85 + 66 198.713 1368 4 1 93.7964 -77.8148 -84.45 + 66 115.821 511 4 0 93.7947 -77.8133 -85.85 + 66 134.644 1368 3 1 93.7562 -77.7872 -114.45 + 66 101.936 511 3 0 93.7542 -77.7853 -115.85 + 66 106.214 1367 2 1 93.7051 -77.7455 -144.45 + 66 126.597 511 2 0 93.7027 -77.7424 -145.85 + 66 347.885 1367 1 1 93.6575 -77.6725 -174.45 + 66 347.722 511 1 0 93.6569 -77.6679 -175.85 + 66 446.333 1367 0 1 93.6489 -77.5731 -204.45 + 66 474.69 512 0 0 93.6538 -77.5699 -205.85 + 66 33.7069 911 6 1 2.40732 123.838 -24.85 + 66 7.10747 903 6 1 0.85 115.674 -24.5795 + 66 184.188 910 6 1 2.24999 124.229 -24.47 + 66 89.9046 909 6 1 2.05 124.231 -24.5311 + 66 411.824 626 2 0 58.5122 -54.8008 -146.25 + 66 91.701 1368 0 1 93.75 -77.0555 -204.64 + 66 96.7734 515 0 0 94.393 -76.8713 -205.85 + 66 82.6609 516 0 0 94.4776 -76.85 -205.992 + 66 46.2231 1366 0 1 93.3731 -76.8126 -204.45 + 66 156.219 1365 0 1 93.35 -76.821 -204.634 + 66 65.9114 514 0 0 92.5657 -77.1228 -205.85 + 66 74.4598 513 0 0 92.4582 -77.2502 -206.029 + 66 219.968 511 0 0 92.2412 -77.65 -206.221 + 66 6.53422 510 0 0 92.1845 -77.85 -206.245 + 66 74.9197 449 0 0 94.3788 -90.2911 -206.25 + 66 71.3874 448 0 0 94.4383 -90.35 -206.205 + 66 11.2693 1467 6 0 127.589 113.55 -25.9766 + 66 122.825 1468 6 0 127.563 113.75 -25.89 + 66 354.61 511 7 0 94.0666 -77.85 3.90234 + 66 131.843 1369 7 1 93.9744 -77.844 5.55 + 66 119.307 1363 6 1 92.9033 -74.8653 -24.45 + 66 100.415 526 6 0 93.0573 -74.797 -25.85 + 66 172.877 1376 5 1 95.454 -73.6774 -54.45 + 66 20.6981 532 5 0 95.5417 -73.4652 -55.85 + 66 85.9632 533 5 0 95.5477 -73.45 -55.9498 + 66 121.041 1384 4 1 97.1011 -69.0236 -84.45 + 66 136.886 555 4 0 97.1255 -68.9643 -85.8504 + 66 115.79 1385 3 1 97.2117 -66.7823 -114.45 + 66 103.743 567 3 0 97.3597 -66.613 -115.85 + 66 70.993 1401 2 1 100.485 -62.8859 -144.451 + 66 131.531 1402 2 1 100.55 -62.828 -144.672 + 66 82.0576 587 2 0 100.935 -62.5118 -145.85 + 66 100.915 588 2 0 101.011 -62.45 -146.084 + 66 124.439 1449 1 1 110.112 -56.1752 -174.45 + 66 170.536 1450 1 1 110.15 -56.1465 -174.563 + 66 159.37 621 1 0 110.588 -55.8289 -175.85 + 66 82.4283 1505 0 1 121.276 -48.2556 -204.45 + 66 57.4483 1506 0 1 121.35 -48.1856 -204.665 + 66 16.5271 660 0 0 121.718 -47.8606 -205.85 + 66 218.82 661 0 0 121.73 -47.85 -205.89 + 66 154.483 616 1 0 110.893 -56.6606 -175.85 + 66 37.2591 290 1 0 104.478 -122.024 -176.25 + 66 74.6192 289 1 0 104.566 -122.15 -176.23 + 66 8.3898 1343 1 1 88.65 -29.6283 -174.55 + 66 46.4072 1385 4 1 97.15 -69.0012 -84.8018 + 66 119.697 553 4 0 98.7425 -69.3808 -85.85 + 66 212.609 1388 4 1 97.8316 -68.097 -84.85 + 66 21.6233 1364 6 1 93.1163 -74.8968 -24.45 + 66 118.381 1365 6 1 93.15 -74.8657 -24.533 + 66 100.824 525 6 0 93.756 -74.8796 -25.85 + 66 89.2948 1367 7 1 93.75 -77.8509 5.43931 + 66 91.9791 514 7 0 93.4391 -77.088 4.14985 + 66 214.26 515 7 0 93.4216 -77.05 4.09696 + 66 114.498 516 7 0 93.3573 -76.8497 3.83595 + 66 9.04623 517 7 0 90.472 -76.6202 3.75 + 66 97.3145 1341 7 1 88.4389 -79.0484 5.15 + 66 141.69 1340 7 1 88.2498 -79.2949 5.26617 + 66 104.168 1339 7 1 88.05 -79.4664 5.36868 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 5.71232 LIN +Particle energy: 4.78395 LIN Particle: gamma Event: 67 -Number of tracker hits in this event: 50 - 67 256.598 690 6 1 -41.9726 -52.11 -24.45 - 67 362.235 639 6 0 -41.9755 -52.1108 -25.85 - 67 118.909 689 5 1 -42.0576 -52.1706 -54.45 - 67 340.254 639 5 0 -42.0631 -52.1733 -55.85 - 67 129.473 689 4 1 -42.1769 -52.1949 -84.45 - 67 240.117 639 4 0 -42.1817 -52.1955 -85.85 - 67 100.101 688 3 1 -42.2619 -52.2071 -114.45 - 67 236.006 639 3 0 -42.2678 -52.2026 -115.85 - 67 139.413 688 2 1 -42.379 -52.1137 -144.45 - 67 380.928 639 2 0 -42.3831 -52.107 -145.85 - 67 110.541 687 1 1 -42.4716 -51.9823 -174.45 - 67 126.612 640 1 0 -42.4759 -51.9833 -175.85 - 67 179.276 687 0 1 -42.5792 -52.0208 -204.45 - 67 114.958 640 0 0 -42.6083 -51.9955 -205.85 - 67 149.73 1676 7 0 13.3871 155.35 3.83781 - 67 13.3878 640 6 0 -41.9387 -52.05 -26.2218 - 67 68.6175 704 5 1 -39.2143 -46.4912 -54.45 - 67 28.2878 703 5 1 -39.25 -46.4476 -54.7411 - 67 95.8487 668 5 0 -39.3908 -46.2838 -55.85 - 67 50.1685 669 5 0 -39.4229 -46.25 -56.0849 - 67 130.775 681 4 1 -43.7561 -41.7708 -84.45 - 67 141.377 690 4 0 -43.8789 -41.8849 -85.85 - 67 249.672 670 3 1 -45.8922 -44.9661 -114.45 - 67 7.82956 674 3 0 -46.1906 -45.2458 -115.85 - 67 96.8496 673 3 0 -46.195 -45.25 -115.871 - 67 131.652 644 2 1 -51.0526 -51.135 -144.45 - 67 95.803 641 2 0 -51.3701 -51.7238 -145.85 - 67 34.995 640 2 0 -51.4388 -51.85 -146.154 - 67 469.603 611 1 1 -57.6715 -63.5782 -174.45 - 67 29.3885 610 1 1 -57.85 -63.7693 -174.766 - 67 113.104 576 1 0 -58.3445 -64.6607 -175.85 - 67 75.82 575 1 0 -58.4421 -64.85 -176.074 - 67 122.898 549 0 1 -70.1142 -89.3539 -204.45 - 67 38.4441 548 0 1 -70.25 -89.668 -204.759 - 67 61.247 446 0 0 -70.7069 -90.7914 -205.85 - 67 82.2066 445 0 0 -70.7663 -90.95 -205.999 - 67 21.8672 444 0 0 -70.8428 -91.15 -206.183 - 67 214.893 669 3 1 -46.05 -44.884 -114.52 - 67 135.64 690 5 1 -41.8686 -52.1302 -54.45 - 67 205.966 691 4 1 -41.7566 -52.1678 -84.45 - 67 124.4 692 3 1 -41.6422 -52.1406 -114.45 - 67 161.49 692 2 1 -41.6177 -52.156 -144.45 - 67 130.624 692 1 1 -41.5245 -52.124 -174.45 - 67 139.925 639 1 0 -41.5211 -52.1215 -175.85 - 67 133.938 693 0 1 -41.4451 -52.0669 -204.45 - 67 100.327 639 0 0 -41.4457 -52.0649 -205.85 - 67 20.8936 1032 0 0 -36.1345 26.45 -206.095 - 67 48.6165 1033 0 0 -36.1259 26.65 -205.872 - 67 385.068 719 0 1 -36.0945 27.6011 -204.85 - 67 191.362 720 0 1 -36.05 27.7477 -204.714 -Number of digits in this event: 29 +Number of tracker hits in this event: 104 + 67 210.645 1462 8 1 112.718 -52.9205 35.55 + 67 309.35 635 8 0 112.717 -52.9202 34.15 + 67 328.482 1462 7 1 112.72 -52.9179 5.55 + 67 301.912 635 7 0 112.721 -52.9198 4.15 + 67 369.636 1463 6 1 112.766 -52.9508 -24.45 + 67 129.797 635 6 0 112.766 -52.9524 -25.85 + 67 120.069 1463 5 1 112.757 -52.977 -54.45 + 67 114.288 635 5 0 112.757 -52.976 -55.85 + 67 110.504 1463 4 1 112.757 -52.9465 -84.45 + 67 148.916 635 4 0 112.752 -52.9418 -85.85 + 67 133.687 1462 3 1 112.663 -52.8437 -114.45 + 67 109.146 636 3 0 112.663 -52.8401 -115.85 + 67 177.179 1462 2 1 112.66 -52.7764 -144.45 + 67 347.453 636 2 0 112.661 -52.7716 -145.85 + 67 120.966 1462 1 1 112.701 -52.6895 -174.45 + 67 195.884 636 1 0 112.706 -52.6869 -175.85 + 67 522.638 1463 0 1 112.803 -52.6368 -204.45 + 67 224.695 637 0 0 112.799 -52.6398 -205.85 + 67 52.5227 1055 9 0 120.376 31.2355 63.7502 + 67 256.263 1056 9 0 120.33 31.25 63.877 + 67 141.898 775 0 1 -24.8615 -86.7992 -204.45 + 67 85.2075 774 0 1 -25.05 -86.9625 -204.708 + 67 36.6213 462 0 0 -26.007 -87.5931 -205.85 + 67 203.454 461 0 0 -26.0207 -87.6501 -205.942 + 67 30.8304 446 14 0 -12.9047 -90.75 213.824 + 67 59.7841 1263 12 1 72.65 -29.4103 155.441 + 67 174.822 834 14 1 -13.1696 -90.6186 215.15 + 67 79.6005 833 14 1 -13.25 -90.7556 215.429 + 67 96.9291 638 0 0 112.898 -52.3531 -205.85 + 67 130.934 636 0 0 112.799 -52.6578 -205.85 + 67 255.862 641 0 0 112.907 -51.7759 -205.85 + 67 114.911 642 0 0 112.91 -51.6497 -205.99 + 67 7.31899 643 0 0 112.792 -51.45 -206.236 + 67 159.061 708 0 0 113.116 -38.3811 -206.25 + 67 94.0929 635 2 0 112.456 -52.85 -145.944 + 67 27.409 1557 0 1 131.616 -130.618 -204.85 + 67 4.63027 25 4 0 134.93 -175.109 -86.25 + 67 77.9369 24 4 0 134.931 -175.15 -86.1418 + 67 25.0897 23 4 0 134.86 -175.35 -85.9334 + 67 477.132 1572 4 1 134.646 -175.965 -84.85 + 67 111.898 1573 4 1 134.75 -176.278 -84.4796 + 67 141.11 1558 0 1 131.75 -130.657 -204.599 + 67 99.2809 1559 0 1 131.95 -130.687 -204.568 + 67 293.835 90 5 0 125.318 -162.026 -56.25 + 67 65.5793 1464 6 1 112.95 -52.7332 -24.5724 + 67 328.907 1465 6 1 113.15 -52.613 -24.5046 + 67 82.6432 1466 6 1 113.35 -52.4055 -24.819 + 67 259.527 1463 7 1 112.75 -52.9959 5.16442 + 67 286.025 634 8 0 112.722 -53.05 33.9883 + 67 101.886 636 7 0 112.757 -52.8007 4.15 + 67 152.234 636 6 0 112.764 -52.7136 -25.85 + 67 109.769 1462 5 1 112.658 -52.5681 -54.4506 + 67 125.81 637 5 0 112.611 -52.544 -55.85 + 67 160.572 1456 4 1 111.396 -52.1727 -84.45 + 67 110.781 639 4 0 111.432 -52.1643 -85.85 + 67 184.826 1460 3 1 112.338 -52.1896 -114.45 + 67 106.877 638 3 0 112.34 -52.3966 -115.85 + 67 12.5449 637 3 0 112.34 -52.45 -116.204 + 67 28.4503 1461 2 1 112.545 -56.6355 -144.45 + 67 160.329 615 2 0 112.618 -56.9175 -145.85 + 67 132.102 1468 1 1 113.929 -62.4397 -174.45 + 67 250.726 1469 1 1 113.95 -62.4735 -174.731 + 67 115.291 587 1 0 114.038 -62.5948 -175.85 + 67 139.799 1480 0 1 116.208 -65.4567 -204.45 + 67 123.42 572 0 0 116.228 -65.6137 -205.85 + 67 17.3405 571 0 0 116.235 -65.65 -206.18 + 67 290.841 466 3 0 166.513 -86.7592 -116.25 + 67 64.7498 465 3 0 166.62 -86.85 -115.995 + 67 155.079 467 3 0 166.775 -86.65 -115.941 + 67 119.538 1470 1 1 114.15 -62.409 -174.662 + 67 212.231 1471 1 1 114.35 -62.4511 -174.666 + 67 176.339 588 1 0 114.644 -62.3797 -175.85 + 67 487.211 1460 1 1 112.346 -51.9059 -174.45 + 67 362.76 640 1 0 112.343 -51.9003 -175.85 + 67 105.86 1460 0 1 112.284 -51.8164 -204.45 + 67 105.767 1461 1 1 112.35 -51.8941 -174.466 + 67 66.8927 639 1 0 113.057 -52.05 -176.034 + 67 48.7317 638 1 0 113.064 -52.25 -175.94 + 67 0.377022 637 1 0 113.073 -52.45 -175.851 + 67 111.205 1465 1 1 113.198 -55.0429 -174.85 + 67 8.96084 1464 1 1 113.15 -55.4287 -174.829 + 67 70.7311 614 1 0 112.681 -57.0778 -175.85 + 67 72.4629 613 1 0 112.657 -57.25 -175.964 + 67 77.2356 612 1 0 112.601 -57.45 -176.053 + 67 78.2975 611 1 0 112.498 -57.65 -176.033 + 67 99.8781 610 1 0 112.322 -57.85 -175.996 + 67 200.064 609 1 0 112.253 -58.05 -175.962 + 67 59.9828 1459 1 1 112.098 -58.1172 -174.85 + 67 245.221 1452 0 1 110.662 -51.1121 -204.451 + 67 169.341 644 0 0 110.58 -51.0744 -205.85 + 67 25.3948 645 0 0 110.564 -51.05 -206.176 + 67 198.677 726 0 0 106.66 -34.7945 -206.25 + 67 39.1478 1436 0 1 107.462 -34.9277 -204.85 + 67 103.899 1437 0 1 107.55 -34.9314 -204.699 + 67 96.8433 1438 0 1 107.75 -34.9901 -204.493 + 67 111.573 1439 0 1 107.95 -34.8913 -204.578 + 67 110.936 1440 0 1 108.15 -34.7477 -204.762 + 67 82.1764 1441 0 1 108.35 -34.4867 -204.768 + 67 96.924 1442 0 1 108.55 -34.3637 -204.759 + 67 32.0803 1443 0 1 108.75 -34.3615 -204.832 + 67 100.86 725 0 0 109.743 -35.0088 -205.85 + 67 9.44896 1451 0 1 110.539 -35.6404 -204.85 + 67 103.64 723 0 0 110.377 -35.4064 -205.85 + 67 11.1814 1444 0 1 109.115 -37.7371 -204.85 +Number of digits in this event: 49 Using G4ParticleGun... -Particle energy: 8.23258 LIN +Particle energy: 8.59556 LIN Particle: gamma Event: 68 -Number of tracker hits in this event: 125 - 68 291.282 855 9 1 -8.86604 -4.10136 65.55 - 68 218.18 879 9 0 -8.8654 -4.10149 64.15 - 68 133.558 856 8 1 -8.84843 -4.10702 35.55 - 68 235.741 879 8 0 -8.84804 -4.1078 34.15 - 68 217.282 856 7 1 -8.83844 -4.12044 5.55 - 68 221.539 879 7 0 -8.83771 -4.11925 4.15 - 68 111.565 856 6 1 -8.82378 -4.09759 -24.45 - 68 257.878 879 6 0 -8.82203 -4.0971 -25.85 - 68 124.922 856 5 1 -8.78602 -4.08671 -54.45 - 68 109.395 879 5 0 -8.7833 -4.08356 -55.85 - 68 116.638 856 4 1 -8.72573 -4.02334 -84.45 - 68 136.387 880 4 0 -8.72488 -4.02037 -85.85 - 68 152.282 856 3 1 -8.71302 -3.96307 -114.45 - 68 125.577 880 3 0 -8.71262 -3.95918 -115.85 - 68 267.71 856 2 1 -8.70385 -3.87678 -144.45 - 68 459.075 880 2 0 -8.70396 -3.8724 -145.85 - 68 132.987 856 1 1 -8.70882 -3.79015 -174.45 - 68 152.965 881 1 0 -8.70953 -3.7867 -175.85 - 68 366.872 856 0 1 -8.72855 -3.71827 -204.45 - 68 153.333 881 0 0 -8.73033 -3.71622 -205.85 - 68 116.306 462 0 0 -24.0123 -87.5948 -206.25 - 68 105.487 463 0 0 -23.9986 -87.45 -206.043 - 68 129.104 464 0 0 -24.005 -87.25 -206.114 - 68 92.3248 857 2 1 -8.64984 -3.88968 -144.552 - 68 142.649 885 1 1 -3.01129 -2.69393 -174.45 - 68 114.577 886 1 0 -2.70685 -2.68774 -175.85 - 68 121.315 918 0 1 3.80433 -2.79504 -204.45 - 68 119.011 884 0 0 3.76961 -3.12715 -205.85 - 68 67.2293 670 0 0 -16.5146 -45.8719 -206.25 - 68 60.905 669 0 0 -16.5503 -46.05 -206.192 - 68 299.535 857 1 1 -8.57186 -3.94936 -174.45 - 68 267.602 880 1 0 -8.56253 -3.95509 -175.85 - 68 136.14 858 0 1 -8.32571 -4.10398 -204.45 - 68 204.466 879 0 0 -8.30967 -4.11807 -205.85 - 68 36.3371 858 1 1 -8.4451 -4.1504 -174.45 - 68 101.37 857 0 1 -8.45 -2.37727 -204.512 - 68 12.1818 888 0 0 -8.74728 -2.25489 -205.85 - 68 291.426 889 0 0 -8.75981 -2.25 -205.9 - 68 89.1029 890 0 0 -8.78688 -2.04994 -205.997 - 68 122.723 879 1 0 -8.46595 -4.15085 -175.85 - 68 122.656 878 0 0 -8.76086 -4.3841 -205.85 - 68 137.966 855 8 1 -8.88543 -4.12947 35.55 - 68 454.32 855 7 1 -8.96309 -4.10666 5.55 - 68 117.958 854 6 1 -9.07801 -4.09168 -24.45 - 68 307.281 853 5 1 -9.29722 -4.25705 -54.45 - 68 150.212 878 5 0 -9.30241 -4.26085 -55.85 - 68 105.711 853 4 1 -9.39007 -4.29877 -84.45 - 68 111.557 878 4 0 -9.38914 -4.30129 -85.85 - 68 132.885 853 3 1 -9.38817 -4.37491 -114.45 - 68 105.803 878 3 0 -9.38065 -4.37722 -115.85 - 68 95.8846 854 2 1 -9.17787 -4.46126 -144.45 - 68 137.148 877 2 0 -9.17876 -4.49771 -145.85 - 68 428.914 854 1 1 -9.17212 -5.34781 -174.45 - 68 131.846 873 1 0 -9.15989 -5.3939 -175.85 - 68 110.44 868 0 0 -8.76287 -6.30074 -205.85 - 68 54.838 1076 1 1 35.25 -108.169 -174.767 - 68 65.825 923 3 0 14.5534 4.67826 -116.25 - 68 128.388 922 3 0 14.6816 4.65 -116.061 - 68 39.4486 969 3 1 13.8981 4.51046 -114.85 - 68 56.7399 968 3 1 13.85 4.4815 -114.803 - 68 158.381 916 3 0 15.6167 3.43804 -115.85 - 68 48.8644 977 3 1 15.4746 3.33526 -114.85 - 68 199.192 976 3 1 15.45 3.3093 -114.752 - 68 43.1991 852 2 1 -9.46946 -4.4365 -144.45 - 68 58.5294 853 2 1 -9.45 -4.45132 -144.609 - 68 126.041 876 2 0 -9.50529 -4.66224 -145.85 - 68 28.5318 837 1 1 -12.5778 -9.9522 -174.45 - 68 84.4851 836 1 1 -12.65 -9.98362 -174.499 - 68 128.882 835 1 1 -12.85 -10.0926 -174.627 - 68 58.0103 834 1 1 -13.05 -10.1958 -174.755 - 68 92.4255 844 1 0 -15.0476 -11.1036 -175.85 - 68 118.516 843 1 0 -15.3256 -11.2503 -175.983 - 68 88.1626 842 1 0 -15.5848 -11.45 -176.117 - 68 22.2426 666 1 0 -90.8278 -46.8249 -176.25 - 68 96.7265 665 1 0 -90.8761 -46.85 -176.187 - 68 80.511 664 1 0 -91.0607 -47.0504 -175.991 - 68 16.0611 663 1 0 -91.1924 -47.2507 -175.87 - 68 96.1201 439 1 1 -92.1865 -48.5853 -174.85 - 68 120.962 438 1 1 -92.35 -48.8211 -174.675 - 68 2.4952 437 1 1 -92.55 -49.0919 -174.454 - 68 219.943 436 1 1 -92.8335 -49.2971 -174.45 - 68 47.8504 647 1 0 -93.1114 -50.5493 -175.85 - 68 71.0716 646 1 0 -93.1098 -50.65 -175.982 - 68 4.61036 645 1 0 -93.1271 -50.85 -176.239 - 68 143.435 774 0 1 -25.0798 -25.0343 -204.45 - 68 254.492 775 0 1 -25.0495 -24.997 -204.464 - 68 131.655 880 7 0 -9.07081 -4.0245 4.15 - 68 97.39 851 6 1 -9.66826 -0.49608 -24.4502 - 68 150.811 899 6 0 -9.93606 -0.161233 -25.85 - 68 38.8001 822 5 1 -15.4648 6.90411 -54.45 - 68 209.541 823 5 1 -15.45 6.86483 -54.5855 - 68 12.6735 932 5 0 -15.1957 6.46693 -55.85 - 68 98.1205 931 5 0 -15.1845 6.45 -55.9023 - 68 85.3708 857 4 1 -8.52997 -2.11204 -84.45 - 68 75.9419 858 4 1 -8.45 -2.30691 -84.6425 - 68 85.7647 883 4 0 -7.96507 -3.25472 -85.85 - 68 53.418 882 4 0 -7.86094 -3.45 -86.1093 - 68 122.021 926 3 1 5.30852 -22.7808 -114.45 - 68 16.0424 785 3 0 5.70354 -23.0467 -115.85 - 68 106.77 784 3 0 5.71108 -23.05 -115.875 - 68 113.565 890 3 0 2.70295 -2.02614 -116.25 - 68 60.5724 891 3 0 2.66116 -1.84997 -116.104 - 68 211.062 892 3 0 2.7299 -1.65 -116.027 - 68 0.919157 904 3 1 1.05 9.89363 -114.615 - 68 351.437 878 7 0 -8.78613 -4.43126 4.14979 - 68 183.904 877 7 0 -8.77749 -4.45006 4.0657 - 68 69.8507 899 6 1 -0.224753 -12.9284 -24.45 - 68 56.2268 900 6 1 0.0500297 -12.8687 -24.6841 - 68 129.103 838 6 0 0.493795 -12.4271 -25.8501 - 68 122.629 949 6 0 12.0845 9.8945 -26.25 - 68 24.2695 959 6 1 12.0447 9.81919 -24.85 - 68 285.503 960 6 1 12.05 9.81121 -24.7512 - 68 132.635 961 6 1 12.25 9.76845 -24.5671 - 68 4.17231 962 6 1 12.45 9.95882 -24.6867 - 68 119.885 950 6 0 11.5386 10.0544 -25.85 - 68 202.172 1044 6 0 -16.7112 28.8534 -26.25 - 68 363.813 1045 6 0 -16.8739 29.05 -25.9899 - 68 12.8757 857 7 1 -8.65 -4.13651 5.18099 - 68 149.905 853 1 1 -9.25 -4.34912 -174.751 - 68 211.864 878 1 0 -9.31535 -4.30089 -175.85 - 68 148.564 843 0 1 -11.3313 -2.41771 -204.45 - 68 146.297 887 0 0 -11.3411 -2.54849 -205.851 - 68 120.046 846 0 1 -10.6949 -3.08676 -204.45 - 68 33.9456 885 0 0 -10.7152 -2.8724 -205.85 - 68 68.2884 886 0 0 -10.7169 -2.85 -205.991 -Number of digits in this event: 64 +Number of tracker hits in this event: 12 + 68 104.019 400 4 0 -52.9203 -99.9868 -86.25 + 68 21.6404 399 4 0 -52.9053 -100.15 -85.9262 + 68 110.902 637 4 1 -52.5197 -100.402 -84.85 + 68 96.8778 638 4 1 -52.4497 -100.437 -84.6654 + 68 124.915 636 4 1 -52.65 -100.418 -84.5681 + 68 79.3729 635 4 1 -52.85 -100.31 -84.5425 + 68 69.0939 634 4 1 -53.05 -100.203 -84.4863 + 68 68.6717 633 4 1 -53.25 -100.224 -84.5915 + 68 105.755 632 4 1 -53.45 -100.236 -84.7194 + 68 222.726 395 4 0 -55.3956 -101.058 -85.85 + 68 37.8969 394 4 0 -55.5667 -101.15 -85.9202 + 68 206.163 396 4 0 -55.6378 -100.95 -86.0975 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 8.65394 LIN +Particle energy: 2.17392 LIN Particle: gamma Event: 69 -Number of tracker hits in this event: 61 - 69 214.402 1250 11 1 70.1636 11.2581 125.55 - 69 155.449 956 11 0 70.1546 11.2509 124.15 - 69 57.2948 955 11 0 70.1534 11.25 123.957 - 69 166.07 1249 10 1 69.9984 11.1077 95.55 - 69 124.736 955 10 0 69.9757 11.1072 94.15 - 69 122.179 1247 9 1 69.4706 11.0909 65.55 - 69 225.553 955 9 0 69.4513 11.1 64.15 - 69 132.077 1245 8 1 69.1131 11.2954 35.55 - 69 164.049 956 8 0 69.0929 11.2894 34.15 - 69 123.015 1243 7 1 68.6853 11.0418 5.55 - 69 99.5412 954 7 0 68.6945 11.0124 4.15 - 69 208.015 1244 6 1 68.9682 10.4931 -24.45 - 69 107.856 952 6 0 68.9652 10.4871 -25.85 - 69 174.006 1244 5 1 68.9118 10.3005 -54.45 - 69 107.94 951 5 0 68.8825 10.2773 -55.85 - 69 100.321 1240 4 1 68.177 9.72431 -84.45 - 69 113.09 948 4 0 68.1299 9.69335 -85.85 - 69 112.373 1235 3 1 67.242 9.00957 -114.45 - 69 119.009 944 3 0 67.2315 8.98162 -115.85 - 69 147.217 1234 2 1 66.973 8.38671 -144.45 - 69 107.478 941 2 0 66.9553 8.35372 -145.85 - 69 204.263 1232 1 1 66.6048 7.55614 -174.45 - 69 164.808 937 1 0 66.5272 7.52343 -175.85 - 69 61.7895 1225 0 1 65.0668 6.97603 -204.45 - 69 53.0985 1224 0 1 65.05 6.96973 -204.669 - 69 128.663 934 0 0 64.9539 6.92602 -205.85 - 69 293.484 1171 1 1 54.3245 13.5576 -174.45 - 69 262.416 981 2 1 16.2546 -81.231 -144.45 - 69 118.596 980 2 1 16.25 -81.1476 -144.744 - 69 138.304 196 5 0 9.50616 -140.945 -56.25 - 69 153.355 197 5 0 9.4119 -140.75 -56.1076 - 69 48.2925 198 5 0 9.37532 -140.55 -56.1724 - 69 100.072 307 5 0 43.499 -118.673 -56.25 - 69 59.5345 1116 5 1 43.4124 -118.409 -54.8499 - 69 185.326 1117 5 1 43.45 -118.397 -54.6683 - 69 269.827 1250 10 1 70.2403 11.2983 95.55 - 69 116.25 956 10 0 70.2483 11.3019 94.15 - 69 139.088 1251 9 1 70.4169 11.3799 65.55 - 69 127.961 956 9 0 70.4194 11.3929 64.15 - 69 117.796 1252 8 1 70.4524 11.6474 35.55 - 69 123.954 958 8 0 70.4596 11.6632 34.15 - 69 119.41 1252 7 1 70.597 11.9803 5.55 - 69 143.996 959 7 0 70.6037 11.997 4.15 - 69 156.181 1253 6 1 70.7315 12.3317 -24.45 - 69 123.177 961 6 0 70.7351 12.327 -25.85 - 69 104.483 1253 5 1 70.7985 12.2443 -54.45 - 69 122.591 960 5 0 70.8082 12.2367 -55.85 - 69 145.498 1254 4 1 71 12.1036 -84.45 - 69 107.188 960 4 0 71.0018 12.0914 -85.85 - 69 108.019 1254 3 1 71.0289 11.8177 -114.45 - 69 105.739 958 3 0 71.0344 11.8 -115.85 - 69 147.161 1255 2 1 71.1302 11.4505 -144.45 - 69 130.391 956 2 0 71.1339 11.424 -145.85 - 69 186.907 1255 1 1 71.1844 10.9052 -174.45 - 69 147.152 954 1 0 71.1725 10.9037 -175.85 - 69 133.123 1254 0 1 70.9185 10.893 -204.45 - 69 172.305 954 0 0 70.9134 10.8852 -205.85 - 69 217.586 1260 0 1 72.0568 12.9083 -204.45 - 69 253.612 964 0 0 72.0535 12.9155 -205.85 - 69 161.084 1252 9 1 70.45 11.371 65.4859 - 69 220.504 1253 9 1 70.65 11.3004 65.3808 -Number of digits in this event: 42 +Number of tracker hits in this event: 76 + 69 231.23 753 8 1 -29.3985 37.0872 35.55 + 69 219.364 1085 8 0 -29.3971 37.0835 34.15 + 69 247.187 753 7 1 -29.3334 37.0083 5.55 + 69 227.566 1084 7 0 -29.3276 37.0153 4.15 + 69 130.9 753 6 1 -29.265 37.1811 -24.45 + 69 118.232 1085 6 0 -29.271 37.1822 -25.85 + 69 213.509 753 5 1 -29.297 37.2242 -54.45 + 69 272.637 1085 5 0 -29.3017 37.209 -55.85 + 69 118.55 753 4 1 -29.391 36.8727 -84.45 + 69 171.234 1084 4 0 -29.4011 36.8659 -85.85 + 69 269.317 752 3 1 -29.5509 36.7375 -114.45 + 69 129.219 1083 3 0 -29.5331 36.7212 -115.85 + 69 319.304 754 2 1 -29.1906 36.4334 -144.45 + 69 145.032 1081 2 0 -29.1837 36.416 -145.85 + 69 142.2 754 1 1 -29.0958 36.1298 -174.45 + 69 97.9867 1080 1 0 -29.0817 36.1184 -175.85 + 69 93.1534 754 0 1 -29.1937 35.9901 -204.45 + 69 136.042 1079 0 0 -29.2011 35.9758 -205.85 + 69 86.5317 1582 2 0 62.4877 136.573 -146.25 + 69 79.6595 1583 2 0 62.6149 136.75 -146.011 + 69 38.7453 1216 2 1 63.386 137.932 -144.85 + 69 495.979 1217 2 1 63.4502 137.999 -144.763 + 69 67.8016 1086 2 0 -29.3276 37.3103 -145.85 + 69 217.222 1087 2 0 -29.3548 37.4502 -146.063 + 69 146.388 739 1 1 -32.0969 59.1081 -174.45 + 69 57.6097 1199 1 0 -32.4655 60.0277 -175.85 + 69 159.264 1200 1 0 -32.4752 60.0502 -175.884 + 69 38.1779 1201 1 0 -32.5575 60.25 -176.188 + 69 54.0073 1529 1 0 -79.5919 126.002 -176.25 + 69 75.6852 1530 1 0 -79.7025 126.15 -176.168 + 69 77.0643 1531 1 0 -79.8517 126.35 -176.063 + 69 100.371 1532 1 0 -80.0144 126.55 -175.966 + 69 44.5843 493 1 1 -81.4087 128.73 -174.85 + 69 89.5538 492 1 1 -81.45 128.793 -174.817 + 69 208.476 491 1 1 -81.65 129.1 -174.653 + 69 15.4847 490 1 1 -81.8501 129.445 -174.467 + 69 238.94 1565 2 0 -96.9758 133.247 -146.249 + 69 6.58325 411 2 1 -97.9254 133.363 -144.85 + 69 103.084 410 2 1 -97.95 133.366 -144.814 + 69 24.1923 409 2 1 -98.1501 133.391 -144.521 + 69 98.0999 1536 3 0 -110.142 127.472 -116.25 + 69 5.57981 1535 3 0 -110.315 127.35 -115.865 + 69 53.9967 347 3 1 -110.683 127.02 -114.849 + 69 71.9536 346 3 1 -110.75 126.947 -114.688 + 69 38.3171 1643 4 0 -109.861 148.879 -86.2499 + 69 93.1485 1644 4 0 -109.863 148.95 -86.1531 + 69 111.123 350 4 1 -109.953 149.584 -84.8497 + 69 62.9932 351 4 1 -109.95 149.675 -84.6504 + 69 115.142 1654 5 0 -113.189 151.048 -56.25 + 69 135.375 333 5 1 -113.394 151.147 -54.8498 + 69 133.386 752 6 1 -29.4617 37.0199 -24.45 + 69 158.325 1084 6 0 -29.4678 37.0254 -25.85 + 69 125 752 5 1 -29.5663 37.1263 -54.45 + 69 109.996 751 4 1 -29.7506 37.2946 -84.45 + 69 111.398 1086 4 0 -29.7619 37.2988 -85.85 + 69 116.572 750 3 1 -29.9966 37.394 -114.45 + 69 112.976 1086 3 0 -30.0088 37.3972 -115.85 + 69 128.6 749 2 1 -30.2379 37.4582 -144.45 + 69 140.698 747 1 1 -30.6048 37.5761 -174.45 + 69 87.2443 1087 1 0 -30.6234 37.5781 -175.85 + 69 170.54 745 0 1 -30.9985 37.6356 -204.45 + 69 153.122 1087 0 0 -31.0217 37.6462 -205.85 + 69 79.2695 996 1 0 1.85113 19.3445 -176.25 + 69 168.185 746 0 1 -30.8075 37.7647 -204.45 + 69 27.4763 1089 0 0 -31.093 38.029 -205.85 + 69 92.351 1090 0 0 -31.1195 38.05 -205.935 + 69 30.6218 1181 0 0 -78.8843 56.25 -206.024 + 69 121.794 1088 0 0 -30.6398 37.6742 -205.85 + 69 43.6754 753 3 1 -29.4032 36.9541 -114.45 + 69 56.9309 1087 3 0 -30.0571 37.5548 -115.85 + 69 56.6098 1088 3 0 -30.1354 37.65 -116.054 + 69 126.896 691 2 1 -41.7622 49.5971 -144.45 + 69 208.199 692 2 1 -41.65 49.9746 -144.526 + 69 46.3767 693 2 1 -41.45 50.1231 -144.662 + 69 3.75129 1146 2 0 -39.9881 49.2542 -145.85 + 69 329.939 1145 2 0 -39.9816 49.25 -145.855 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 6.37601 LIN +Particle energy: 1.93919 LIN Particle: gamma Event: 70 Number of tracker hits in this event: 0 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 1.58567 LIN +Particle energy: 4.36266 LIN Particle: gamma Event: 71 -Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of tracker hits in this event: 55 + 71 238.99 1422 7 1 104.589 79.6207 5.55 + 71 186.735 1297 7 0 104.591 79.6199 4.15 + 71 252.293 1422 6 1 104.64 79.5953 -24.45 + 71 250.178 1297 6 0 104.637 79.598 -25.85 + 71 192.661 1421 5 1 104.54 79.6766 -54.45 + 71 115.812 1298 5 0 104.539 79.6818 -55.85 + 71 112.312 1421 4 1 104.513 79.7697 -84.45 + 71 142.929 1298 4 0 104.515 79.7739 -85.85 + 71 547.502 1422 3 1 104.552 79.8792 -114.45 + 71 120.885 1299 3 0 104.546 79.8864 -115.85 + 71 361.607 1421 2 1 104.445 80.0454 -144.45 + 71 103.618 1300 2 0 104.426 80.0594 -145.85 + 71 369.862 1419 1 1 104.041 80.3861 -174.45 + 71 133.556 1301 1 0 104.014 80.4075 -175.85 + 71 129.869 1416 0 1 103.499 80.6591 -204.45 + 71 385.5 1303 0 0 103.449 80.6619 -205.85 + 71 133.563 1761 0 1 172.457 53.2383 -204.85 + 71 269.618 1422 0 1 104.724 80.3664 -204.45 + 71 103.385 1421 0 1 104.55 80.4878 -204.842 + 71 263.367 1304 0 0 104.086 80.8537 -205.85 + 71 98.8237 1370 0 0 111.327 94.1684 -206.25 + 71 159.867 1369 0 0 111.44 94.15 -206.113 + 71 233.066 1368 0 0 111.396 93.95 -205.991 + 71 113.904 1298 0 0 104.25 79.8095 -205.85 + 71 121.649 1422 5 1 104.698 79.4853 -54.45 + 71 156.03 1297 5 0 104.697 79.4816 -55.85 + 71 125.838 1422 4 1 104.68 79.4009 -84.45 + 71 293.423 1296 4 0 104.676 79.3984 -85.85 + 71 367.357 1296 3 0 104.594 79.3391 -115.85 + 71 265.642 1296 2 0 104.462 79.3685 -145.85 + 71 270.486 1296 1 0 104.085 79.2839 -175.85 + 71 115.796 1418 0 1 103.783 78.7893 -204.45 + 71 150.444 1293 0 0 103.782 78.775 -205.85 + 71 114.122 822 1 0 132.799 -15.4777 -176.25 + 71 167.172 823 1 0 132.607 -15.45 -176.11 + 71 143.466 1421 1 1 104.384 79.2685 -174.45 + 71 130.366 1294 0 0 104.383 79.0278 -205.85 + 71 67.5452 1295 3 0 104.544 79.25 -115.982 + 71 133.155 1412 2 1 102.656 77.1416 -144.45 + 71 115.8 1284 2 0 102.421 77.0086 -145.85 + 71 62.4201 1393 1 1 98.7804 74.5397 -174.45 + 71 50.8343 1392 1 1 98.75 74.4692 -174.693 + 71 37.0574 1270 1 0 98.6115 74.0828 -175.85 + 71 91.6325 1269 1 0 98.604 74.05 -175.948 + 71 9.3332 1385 0 1 97.1526 63.9894 -204.45 + 71 114.238 1384 0 1 97.15 63.9792 -204.482 + 71 123.808 1217 0 0 97.0477 63.549 -205.85 + 71 19.9458 1216 0 0 97.0237 63.45 -206.184 + 71 191.404 1420 1 1 104.35 79.0968 -174.459 + 71 123.523 1418 1 1 103.95 79.2631 -174.671 + 71 83.4508 1417 1 1 103.75 79.4381 -174.705 + 71 76.7347 1416 1 1 103.55 79.5361 -174.683 + 71 580.798 1415 1 1 103.35 79.6706 -174.584 + 71 58.116 1203 0 0 106.525 60.8278 -205.85 + 71 36.563 1295 1 0 104.078 79.2157 -175.85 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 5.0813 LIN +Particle energy: 2.60515 LIN Particle: gamma Event: 72 -Number of tracker hits in this event: 38 - 72 263.568 1525 6 1 125.159 -5.78609 -24.45 - 72 560.428 871 6 0 125.16 -5.78729 -25.85 - 72 150.694 1525 5 1 125.206 -5.82618 -54.45 - 72 361.224 871 5 0 125.211 -5.82177 -55.85 - 72 179.371 1525 4 1 125.314 -5.74339 -84.45 - 72 121.836 871 4 0 125.312 -5.73658 -85.85 - 72 116.032 1525 3 1 125.255 -5.60096 -114.45 - 72 143.502 872 3 0 125.25 -5.58167 -115.85 - 72 115.452 1524 2 1 125.132 -5.17144 -144.45 - 72 131.405 874 2 0 125.119 -5.13815 -145.85 - 72 163.921 1523 1 1 124.808 -4.47396 -174.45 - 72 163.031 878 1 0 124.783 -4.43748 -175.85 - 72 143.158 1520 0 1 124.261 -3.72819 -204.45 - 72 148.294 881 0 0 124.226 -3.69699 -205.85 - 72 67.7547 1635 0 1 147.15 -25.2909 -204.632 - 72 82.4165 1636 0 1 147.35 -25.2137 -204.671 - 72 231.117 1524 5 1 125.132 -5.81719 -54.45 - 72 100.03 1524 4 1 125.024 -5.86464 -84.45 - 72 125.334 870 4 0 125.019 -5.86727 -85.85 - 72 150.982 1523 3 1 124.913 -5.92632 -114.45 - 72 114.124 870 3 0 124.908 -5.9299 -115.85 - 72 169.785 1523 2 1 124.793 -6.00163 -144.45 - 72 130.418 870 2 0 124.788 -6.00701 -145.85 - 72 360.38 1522 1 1 124.673 -6.11652 -174.45 - 72 481.273 869 1 0 124.67 -6.12256 -175.85 - 72 108.892 1522 0 1 124.591 -6.2619 -204.45 - 72 254.836 868 0 0 124.59 -6.26449 -205.85 - 72 14.9158 678 7 0 161.897 -44.3343 3.75 - 72 236.379 1709 10 1 162.027 -85.4595 95.55 - 72 32.5628 569 1 1 -66.05 85.0399 -174.819 - 72 210.064 568 1 1 -66.25 85.0617 -174.713 - 72 171.901 567 1 1 -66.45 85.1271 -174.539 - 72 4.04796 869 0 0 124.594 -6.25 -206.24 - 72 35.4268 950 0 0 131.275 10.054 -206.25 - 72 213.052 949 0 0 131.321 10.05 -206.177 - 72 174.458 1521 0 1 124.385 -6.24509 -204.45 - 72 143.974 1518 0 1 123.906 -6.99492 -204.45 - 72 119.73 864 0 0 123.882 -7.08292 -205.85 -Number of digits in this event: 28 +Number of tracker hits in this event: 59 + 72 283.859 507 8 1 -78.5603 -43.9728 35.55 + 72 267.369 680 8 0 -78.5528 -43.9805 34.15 + 72 122.286 508 7 1 -78.4219 -44.1326 5.55 + 72 218.934 679 7 0 -78.4213 -44.1351 4.15 + 72 267.189 508 6 1 -78.3816 -44.1947 -24.45 + 72 100.578 679 6 0 -78.3886 -44.2036 -25.85 + 72 127.827 507 5 1 -78.5109 -44.3952 -54.45 + 72 255.265 678 5 0 -78.5117 -44.4041 -55.85 + 72 206.359 507 4 1 -78.5556 -44.5815 -84.45 + 72 260.542 677 4 0 -78.5645 -44.5942 -85.85 + 72 186.399 506 3 1 -78.7534 -44.807 -114.45 + 72 121.568 676 3 0 -78.7494 -44.8139 -115.85 + 72 161.3 506 2 1 -78.6571 -44.9193 -144.45 + 72 114.601 675 2 0 -78.6646 -44.9209 -145.85 + 72 124.003 506 1 1 -78.8019 -44.9899 -174.45 + 72 119.732 675 1 0 -78.8128 -45.0006 -175.85 + 72 71.0907 504 0 1 -79.2448 -45.2309 -204.45 + 72 68.931 503 0 1 -79.25 -45.2327 -204.653 + 72 108.328 674 0 0 -79.282 -45.2428 -205.85 + 72 29.7289 143 1 1 -151.35 -162.307 -174.643 + 72 101.034 507 7 1 -78.525 -44.097 5.55 + 72 139.475 507 6 1 -78.4793 -44.2675 -24.45 + 72 128.881 678 6 0 -78.4755 -44.2745 -25.85 + 72 117.105 508 5 1 -78.3966 -44.422 -54.45 + 72 160.796 508 4 1 -78.2833 -44.4705 -84.45 + 72 121.498 509 3 1 -78.0841 -44.5633 -114.45 + 72 99.8631 677 3 0 -78.0742 -44.5685 -115.85 + 72 104.968 510 2 1 -77.8767 -44.6566 -144.45 + 72 117.609 677 2 0 -77.8052 -44.6419 -145.85 + 72 133.733 519 1 1 -76.2357 -43.9904 -174.45 + 72 138.869 680 1 0 -76.207 -43.9483 -175.851 + 72 173.228 521 0 1 -75.6582 -42.9403 -204.45 + 72 112.067 685 0 0 -75.6452 -42.9818 -205.85 + 72 107.442 455 8 0 -108.399 -88.9449 33.75 + 72 234.704 511 1 1 -77.7168 -44.7221 -174.45 + 72 297.451 676 1 0 -77.7094 -44.7245 -175.85 + 72 284.794 512 0 1 -77.5725 -44.7657 -204.45 + 72 153.456 676 0 0 -77.5602 -44.7636 -205.85 + 72 118.903 675 0 0 -77.4502 -44.9572 -205.85 + 72 92.6964 506 6 1 -78.6502 -44.0449 -24.5094 + 72 75.0498 505 6 1 -78.85 -44.0707 -24.6953 + 72 168.435 681 6 0 -80.0538 -43.7913 -25.8502 + 72 23.2829 682 6 0 -80.4695 -43.65 -26.1796 + 72 76.2633 677 6 0 -78.1868 -44.5389 -25.85 + 72 61.2127 676 6 0 -78.1327 -44.65 -26.1127 + 72 131.635 556 5 1 -68.7743 -61.2726 -54.45 + 72 20.0228 557 5 1 -68.6499 -61.3773 -54.7799 + 72 257.236 593 5 0 -68.1037 -61.4265 -55.85 + 72 51.8321 657 4 1 -48.6181 -64.2264 -84.45 + 72 57.3311 658 4 1 -48.45 -64.157 -84.4716 + 72 56.716 659 4 1 -48.25 -64.0235 -84.4755 + 72 64.139 660 4 1 -48.05 -63.8731 -84.477 + 72 99.8553 661 4 1 -47.85 -63.7064 -84.5875 + 72 81.2603 585 4 0 -47.0211 -62.8756 -85.85 + 72 93.067 586 4 0 -46.9916 -62.85 -85.9028 + 72 151.479 592 5 0 -69.9386 -61.6277 -55.85 + 72 217.821 594 5 0 -70.454 -61.25 -56.0246 + 72 146.05 543 5 0 -15.5881 -71.408 -56.25 + 72 6.38688 697 6 0 -79.7107 -40.65 -26.0237 +Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 6.50262 LIN +Particle energy: 3.18863 LIN Particle: gamma Event: 73 -Number of tracker hits in this event: 15 - 73 284.739 1181 2 1 56.4484 119.34 -144.45 - 73 346.144 1495 2 0 56.4487 119.339 -145.85 - 73 272.418 1181 1 1 56.4475 119.299 -174.45 - 73 121.175 1495 1 0 56.4464 119.297 -175.85 - 73 259.09 1181 0 1 56.4134 119.252 -204.45 - 73 103.644 1495 0 0 56.4119 119.251 -205.85 - 73 35.8188 461 13 0 -114.307 -87.7131 183.75 - 73 37.3377 462 13 0 -114.422 -87.6499 183.782 - 73 119.876 903 1 0 65.2687 0.85 -176.071 - 73 250.828 1259 0 1 71.8813 -4.95479 -204.45 - 73 30.945 1260 0 1 72.05 -4.61739 -204.75 - 73 73.4098 878 0 0 72.4175 -4.30005 -205.85 - 73 64.9765 879 0 0 72.5119 -4.25 -206.062 - 73 97.3952 1496 1 0 56.4384 119.394 -175.85 - 73 111.363 1496 0 0 56.3992 119.447 -205.85 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 7.61413 LIN -Particle: gamma -Event: 74 Number of tracker hits in this event: 0 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 5.75092 LIN -Particle: gamma -Event: 75 -Number of tracker hits in this event: 79 - 75 334.091 1430 10 1 106.323 -40.0189 95.55 - 75 206.698 700 10 0 106.323 -40.0175 94.15 - 75 214.472 1430 9 1 106.33 -39.9967 65.55 - 75 224.144 700 9 0 106.332 -39.9972 64.15 - 75 252.189 1430 8 1 106.345 -40.0058 35.55 - 75 342.252 700 8 0 106.342 -40.0056 34.15 - 75 356.904 1430 7 1 106.303 -40.0022 5.55 - 75 126.957 700 7 0 106.314 -40.0058 4.15 - 75 147.663 1431 6 1 106.52 -40.0824 -24.45 - 75 95.8576 699 6 0 106.525 -40.0852 -25.85 - 75 110.52 1432 5 1 106.631 -40.1419 -54.45 - 75 112.152 699 5 0 106.635 -40.1443 -55.85 - 75 359.426 1432 4 1 106.719 -40.1878 -84.45 - 75 130.846 699 4 0 106.723 -40.1928 -85.85 - 75 584.017 1433 3 1 106.787 -40.2832 -114.45 - 75 109.778 698 3 0 106.788 -40.29 -115.85 - 75 708.465 1433 2 1 106.824 -40.3813 -144.45 - 75 110.144 698 2 0 106.823 -40.3899 -145.85 - 75 308.075 1433 1 1 106.813 -40.5763 -174.45 - 75 366.142 697 1 0 106.813 -40.5814 -175.85 - 75 289.737 1433 0 1 106.836 -40.6796 -204.45 - 75 169.38 696 0 0 106.825 -40.6892 -205.85 - 75 93.6681 1433 4 1 106.75 -40.2842 -84.7299 - 75 531.802 1430 5 1 106.253 -40.013 -54.45 - 75 119.411 700 5 0 106.261 -39.9384 -55.85 - 75 151.846 1430 4 1 106.335 -38.2258 -84.45 - 75 120.133 709 4 0 106.323 -38.1512 -85.85 - 75 24.5173 1430 3 1 106.154 -36.602 -114.45 - 75 71.4523 1429 3 1 106.15 -36.596 -114.577 - 75 178.508 717 3 0 106.112 -36.545 -115.85 - 75 113.118 1426 2 1 105.369 -35.3858 -144.45 - 75 143.545 723 2 0 105.304 -35.3518 -145.85 - 75 27.3635 1420 1 1 104.152 -34.5702 -174.45 - 75 125.531 1419 1 1 104.15 -34.5689 -174.481 - 75 116.826 727 1 0 104.056 -34.5155 -175.85 - 75 41.3929 1410 0 1 102.162 -33.4715 -204.45 - 75 92.2682 1409 0 1 102.15 -33.4851 -204.61 - 75 156.582 732 0 0 102.083 -33.5886 -205.85 - 75 293.667 698 5 0 106.334 -40.4224 -55.85 - 75 60.8015 1429 5 1 106.15 -39.948 -54.6642 - 75 328.453 702 5 0 105.793 -39.6364 -55.85 - 75 46.3465 1385 4 1 97.1835 -36.3441 -84.45 - 75 102.092 1384 4 1 97.15 -36.3094 -84.5648 - 75 33.7049 720 4 0 96.7139 -35.8964 -85.85 - 75 87.67 721 4 0 96.6683 -35.8497 -85.9779 - 75 109.184 1342 3 1 88.5546 -28.8199 -114.45 - 75 111.671 754 3 0 88.8862 -29.0687 -115.85 - 75 85.1863 1349 2 1 90.05 -39.19 -144.54 - 75 134.906 704 2 0 89.5521 -39.1335 -145.85 - 75 124.882 1313 1 1 82.7186 -34.357 -174.451 - 75 4.96434 735 1 0 82.781 -32.8702 -175.85 - 75 109.213 736 1 0 82.7834 -32.8499 -175.868 - 75 77.4551 737 1 0 82.814 -32.65 -176.087 - 75 114.848 701 7 0 106.269 -39.7818 4.15 - 75 106.16 1430 6 1 106.328 -39.6357 -24.45 - 75 103.227 702 6 0 106.334 -39.6283 -25.85 - 75 162.113 1431 5 1 106.455 -39.4903 -54.45 - 75 107.22 703 4 0 106.626 -39.4311 -85.85 - 75 111.782 703 3 0 106.779 -39.3488 -115.85 - 75 400.668 703 2 0 106.916 -39.2694 -145.85 - 75 119.61 704 1 0 106.923 -39.2209 -175.85 - 75 370.349 704 0 0 106.907 -39.112 -205.85 - 75 140.305 1434 3 1 106.95 -39.348 -114.614 - 75 32.7632 1435 3 1 107.15 -39.3973 -114.792 - 75 61.5881 707 3 0 107.759 -38.5499 -115.85 - 75 17.4831 708 3 0 107.838 -38.45 -115.86 - 75 17.8013 1436 3 1 107.361 -38.0002 -114.85 - 75 93.8168 710 3 0 108.047 -37.9431 -115.85 - 75 9.51846 1444 3 1 109.144 -37.3915 -114.85 - 75 41.7672 1445 3 1 109.15 -37.3876 -114.842 - 75 120.575 1439 1 1 107.983 -40.9048 -174.45 - 75 162.11 695 1 0 107.976 -40.8714 -175.85 - 75 124.267 1440 0 1 108.254 -39.4772 -204.45 - 75 12.4109 705 0 0 108.549 -39.05 -206.194 - 75 107.886 1426 1 1 105.41 -40.6322 -174.45 - 75 115.906 1422 0 1 104.632 -40.4373 -204.45 - 75 134.614 697 0 0 104.426 -40.4812 -205.85 - 75 31.1938 1122 1 0 22.1553 44.45 -176.164 - 75 145.639 1333 4 0 12.6064 86.6503 -86.25 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 6.30625 LIN -Particle: gamma -Event: 76 -Number of tracker hits in this event: 14 - 76 99.617 1134 3 1 46.8502 18.9404 -114.45 - 76 137.455 1133 3 1 46.85 18.9405 -114.547 - 76 213.916 994 3 0 46.8468 18.9426 -115.85 - 76 207.689 1133 2 1 46.7855 18.9932 -144.45 - 76 224.961 994 2 0 46.7809 18.9955 -145.85 - 76 335.811 1133 1 1 46.6803 19.0321 -174.45 - 76 299.333 994 1 0 46.6773 19.0337 -175.85 - 76 116.394 1132 0 1 46.6171 19.0855 -204.45 - 76 138.887 995 0 0 46.6139 19.0862 -205.85 - 76 158.228 562 0 1 -67.5572 49.2867 -204.45 - 76 186.247 563 0 1 -67.4498 49.4817 -204.532 - 76 18.6637 1062 0 1 32.65 11.9326 -204.676 - 76 96.5015 1133 0 1 46.8246 19.0326 -204.45 - 76 104.058 994 0 0 46.8199 19.0312 -205.85 -Number of digits in this event: 10 -Using G4ParticleGun... -Particle energy: 5.19531 LIN -Particle: gamma -Event: 77 -Number of tracker hits in this event: 2 - 77 236.927 901 2 0 -17.3888 0.391365 -146.25 - 77 139.477 902 2 0 -17.4381 0.45 -146.183 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 4.01832 LIN -Particle: gamma -Event: 78 -Number of tracker hits in this event: 10 - 78 250.133 590 1 1 -61.9773 136.165 -174.45 - 78 237.966 1580 1 0 -61.9809 136.161 -175.85 - 78 98.1404 589 0 1 -62.0794 136.056 -204.45 - 78 112.416 1579 0 0 -62.0514 136.05 -205.85 - 78 35.8204 1670 6 0 -144.536 154.152 -26.25 - 78 193.351 1669 6 0 -144.626 154.15 -26.0894 - 78 23.5337 748 1 0 -56.0103 -30.25 -176.047 - 78 69.679 727 1 0 -56.632 -34.45 -175.94 - 78 132.81 590 0 1 -61.9874 136.166 -204.45 - 78 216.14 1580 0 0 -61.9786 136.157 -205.85 -Number of digits in this event: 8 -Using G4ParticleGun... -Particle energy: 6.97015 LIN -Particle: gamma -Event: 79 -Number of tracker hits in this event: 46 - 79 264.834 234 4 1 -133.169 45.9658 -84.45 - 79 274.033 1129 4 0 -133.171 45.9649 -85.85 - 79 112.169 234 3 1 -133.199 45.9518 -114.45 - 79 333.75 1129 3 0 -133.199 45.9515 -115.85 - 79 98.2136 234 2 1 -133.213 45.9441 -144.45 - 79 142.837 1129 2 0 -133.215 45.9439 -145.85 - 79 135.492 234 1 1 -133.265 45.9433 -174.45 - 79 153.108 1129 1 0 -133.27 45.9427 -175.85 - 79 99.2271 233 0 1 -133.372 45.9207 -204.45 - 79 109.528 1129 0 0 -133.38 45.9186 -205.85 - 79 97.0696 231 3 1 -133.879 46.3215 -114.45 - 79 150.201 1131 3 0 -133.911 46.3387 -115.85 - 79 154.494 227 2 1 -134.569 46.6877 -144.45 - 79 100.73 1133 2 0 -134.597 46.699 -145.85 - 79 116.772 224 1 1 -135.175 46.9311 -174.45 - 79 120.564 1134 1 0 -135.206 46.9418 -175.85 - 79 113.618 221 0 1 -135.839 47.1562 -204.45 - 79 114.446 1135 0 0 -135.87 47.1682 -205.85 - 79 35.0804 264 2 0 11.6712 -127.15 -146.098 - 79 64.9308 263 2 0 11.8417 -127.35 -145.982 - 79 21.2316 262 2 0 11.9505 -127.55 -145.888 - 79 254.999 962 2 1 12.4807 -129.109 -144.85 - 79 423.766 961 2 1 12.4499 -129.752 -144.554 - 79 179.509 960 2 1 12.25 -130.434 -144.473 - 79 126.497 959 2 1 12.05 -130.675 -144.512 - 79 124.626 958 2 1 11.8498 -130.887 -144.641 - 79 50.9121 241 2 0 15.7006 -131.868 -145.85 - 79 93.2545 240 2 0 15.7849 -131.95 -145.907 - 79 100.679 239 2 0 15.9444 -132.15 -146.032 - 79 74.7426 238 2 0 16.1295 -132.35 -146.026 - 79 2.10198 237 2 0 16.265 -132.55 -145.853 - 79 47.9401 982 2 1 16.4512 -133.29 -144.849 - 79 123.685 981 2 1 16.45 -133.344 -144.77 - 79 5.07197 980 2 1 16.25 -133.488 -144.471 - 79 19.9872 1200 1 0 -111.354 60.21 -176.25 - 79 71.4195 1201 1 0 -111.311 60.25 -176.212 - 79 66.3957 1202 1 0 -111.157 60.45 -176.017 - 79 22.2667 1203 1 0 -111.086 60.6508 -175.904 - 79 141.495 347 1 1 -110.551 62.1189 -174.85 - 79 162.351 348 1 1 -110.55 62.1232 -174.846 - 79 79.9312 346 1 1 -110.75 62.684 -174.577 - 79 22.1354 345 1 1 -110.95 62.6828 -174.799 - 79 21.9884 1210 1 0 -111.991 62.0988 -175.85 - 79 97.2421 1209 1 0 -112.045 62.05 -175.919 - 79 84.6805 1208 1 0 -112.193 61.8499 -176.122 - 79 80.7736 1207 1 0 -112.202 61.65 -176.235 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 2.89431 LIN -Particle: gamma -Event: 80 -Number of tracker hits in this event: 25 - 80 196.836 1048 6 1 29.7605 -8.13429 -24.5165 - 80 351.53 859 6 0 29.7613 -8.13462 -25.85 - 80 346.675 1048 5 1 29.766 -8.12272 -54.45 - 80 230.477 859 5 0 29.7689 -8.12738 -55.85 - 80 268.854 1048 4 1 29.8207 -8.25073 -84.45 - 80 143.509 858 4 0 29.8216 -8.25905 -85.85 - 80 249.095 1049 3 1 29.8535 -8.45231 -114.45 - 80 182.395 857 3 0 29.8507 -8.46207 -115.85 - 80 270.795 1048 2 1 29.7982 -8.65308 -144.45 - 80 125.604 856 2 0 29.7982 -8.66602 -145.85 - 80 125.1 1048 1 1 29.7989 -8.94615 -174.45 - 80 110.434 855 1 0 29.797 -8.94987 -175.85 - 80 305.69 1048 0 1 29.7735 -9.02611 -204.45 - 80 208.62 855 0 0 29.7829 -9.02552 -205.85 - 80 122.524 854 0 0 29.6762 -9.08211 -205.85 - 80 116.689 1049 0 1 29.9007 -9.24465 -204.45 - 80 141.313 856 0 0 30.1721 -8.80262 -205.85 - 80 111.711 859 4 0 29.8104 -8.12454 -85.85 - 80 133.553 859 3 0 29.8492 -8.24019 -115.85 - 80 140.419 857 2 0 29.8302 -8.46501 -145.85 - 80 167.025 1049 1 1 29.8948 -8.68939 -174.45 - 80 114.971 857 1 0 29.9367 -8.6499 -175.85 - 80 352.125 1055 0 1 31.1369 -8.04971 -204.45 - 80 177.088 860 0 0 31.3471 -7.95902 -205.85 - 80 164.669 860 5 0 29.6188 -7.9403 -55.85 -Number of digits in this event: 23 -Using G4ParticleGun... -Particle energy: 7.28091 LIN -Particle: gamma -Event: 81 -Number of tracker hits in this event: 207 - 81 257.714 661 9 1 -47.8377 85.9399 65.55 - 81 250.517 1329 9 0 -47.8408 85.9366 64.15 - 81 229.791 660 8 1 -47.9114 85.8696 35.55 - 81 283.234 1329 8 0 -47.915 85.8638 34.15 - 81 480.95 660 7 1 -47.9808 85.7435 5.55 - 81 115.248 1328 7 0 -47.9865 85.7375 4.15 - 81 127.257 659 6 1 -48.1102 85.6113 -24.45 - 81 123.813 1327 6 0 -48.1172 85.6044 -25.85 - 81 129.853 658 5 1 -48.2526 85.4495 -54.45 - 81 107.935 1326 5 0 -48.255 85.4416 -55.85 - 81 104.923 658 4 1 -48.3099 85.2749 -84.45 - 81 125.92 1326 4 0 -48.3178 85.2613 -85.85 - 81 161.453 657 3 1 -48.4869 84.9339 -114.45 - 81 54.2601 1319 3 0 -48.5438 83.9535 -115.85 - 81 67.0223 1318 3 0 -48.5587 83.85 -115.985 - 81 35.978 1317 3 0 -48.6033 83.65 -116.21 - 81 95.7119 614 2 1 -57.1647 57.8161 -144.45 - 81 137.271 1186 2 0 -57.2536 57.3996 -145.85 - 81 123.621 583 1 1 -63.2803 50.4919 -174.45 - 81 107.284 1155 1 0 -63.4662 51.1056 -175.85 - 81 4.49198 1156 1 0 -63.5259 51.25 -176.221 - 81 61.5195 544 0 1 -71.1706 63.8258 -204.45 - 81 127.199 543 0 1 -71.25 63.9397 -204.505 - 81 101.712 542 0 1 -71.45 64.2573 -204.684 - 81 68.5798 1234 0 0 -72.6797 66.8814 -205.85 - 81 131.74 1235 0 0 -72.7655 67.0503 -205.923 - 81 89.4102 1236 0 0 -72.879 67.25 -205.998 - 81 173.324 658 6 0 -112.867 -48.3641 -26.25 - 81 120.48 657 6 0 -112.722 -48.4501 -26.1746 - 81 19.9275 1750 1 0 -121.555 170.15 -176.169 - 81 122.574 661 7 1 -47.85 86.2398 5.31193 - 81 38.2215 1340 7 0 -46.5566 88.1066 4.15 - 81 69.8871 1341 7 0 -46.4555 88.25 4.07177 - 81 69.7902 1342 7 0 -46.3279 88.4501 3.98952 - 81 61.5085 1343 7 0 -46.1985 88.65 3.89725 - 81 156.038 1344 7 0 -46.0504 88.85 3.82343 - 81 74.5189 1345 7 0 -45.8872 89.05 3.77859 - 81 8.81262 1576 5 0 -71.6471 135.527 -56.2499 - 81 53.3781 1577 5 0 -71.6569 135.55 -56.2368 - 81 70.8745 1578 5 0 -71.6708 135.75 -56.1688 - 81 45.4282 1579 5 0 -71.7232 135.95 -56.1031 - 81 75.2861 1580 5 0 -71.7441 136.15 -56.0905 - 81 57.3174 1581 5 0 -71.6466 136.35 -56.0928 - 81 67.7014 1582 5 0 -71.5533 136.55 -56.0864 - 81 72.8409 1583 5 0 -71.5144 136.75 -56.0609 - 81 67.3882 1584 5 0 -71.4329 136.95 -56.0677 - 81 90.6187 1585 5 0 -71.4513 137.15 -56.0327 - 81 14.4725 1586 5 0 -71.5565 137.35 -56.1953 - 81 16.3269 1618 5 0 -49.3233 143.781 -56.25 - 81 219.419 1617 5 0 -49.3118 143.75 -56.22 - 81 113.621 1616 5 0 -49.1987 143.55 -55.9274 - 81 112.966 661 8 1 -47.8451 85.9556 35.55 - 81 159.403 1329 7 0 -47.8521 85.9761 4.15 - 81 281.105 661 6 1 -47.8114 86.0239 -24.45 - 81 379.607 1329 6 0 -47.8095 86.0262 -25.85 - 81 109.251 661 5 1 -47.773 86.0718 -54.45 - 81 97.3775 1330 5 0 -47.7724 86.0736 -55.85 - 81 406.607 661 4 1 -47.7588 86.1187 -84.45 - 81 257.143 1330 4 0 -47.7578 86.1209 -85.85 - 81 315.228 661 3 1 -47.7333 86.1695 -114.45 - 81 125.36 1330 3 0 -47.7293 86.173 -115.85 - 81 396.861 661 2 1 -47.6535 86.2537 -144.45 - 81 101.96 1331 2 0 -47.6495 86.2551 -145.85 - 81 325.4 662 1 1 -47.5723 86.2892 -174.45 - 81 149.392 1331 1 0 -47.5669 86.2948 -175.85 - 81 194.371 662 0 1 -47.4512 86.4042 -204.45 - 81 132.954 663 0 1 -47.45 86.405 -204.722 - 81 167.776 1331 0 0 -47.4449 86.4081 -205.85 - 81 58.116 1058 4 1 31.65 -52.5932 -84.7031 - 81 315.353 1046 4 0 69.5795 29.3622 -86.25 - 81 9.17729 1215 4 1 63.0785 28.1904 -84.85 - 81 55.2444 1214 4 1 63.05 28.1865 -84.8415 - 81 75.7499 1213 4 1 62.85 28.1283 -84.7526 - 81 51.978 1212 4 1 62.65 28.0588 -84.6649 - 81 67.3686 1211 4 1 62.45 28.0668 -84.6403 - 81 49.4529 1210 4 1 62.25 28.1233 -84.6932 - 81 80.3865 1209 4 1 62.05 28.1536 -84.7012 - 81 74.5239 1208 4 1 61.85 28.1163 -84.662 - 81 63.6128 1207 4 1 61.65 28.1951 -84.5696 - 81 134.162 1206 4 1 61.45 28.3565 -84.5286 - 81 85.3538 1205 4 1 61.2498 28.6337 -84.6395 - 81 78.2618 1043 4 0 59.7993 28.6882 -85.85 - 81 210.023 1044 4 0 59.6587 28.8506 -86.0133 - 81 23.0767 1203 4 1 60.8094 28.6526 -84.85 - 81 532.163 1204 4 1 60.8502 28.6099 -84.7727 - 81 46.5418 1768 6 0 -150.479 173.95 -26.2034 - 81 225.002 746 1 0 -77.2315 -30.7939 -176.25 - 81 111.537 745 1 0 -76.6415 -30.8501 -176.2 - 81 30.9789 947 0 1 9.65 160.361 -204.524 - 81 103.705 1177 0 1 55.6231 179.942 -204.45 - 81 130.931 1178 0 1 55.65 180.02 -204.551 - 81 2.7694 1130 0 1 46.25 168.941 -204.815 - 81 147.721 661 0 1 -47.7576 86.3062 -204.45 - 81 342.722 1330 0 0 -47.5753 86.1446 -205.85 - 81 18.8019 1327 1 0 -47.2646 85.4885 -175.85 - 81 105.721 1326 1 0 -47.2448 85.4497 -175.912 - 81 44.0461 683 3 1 -43.3157 86.8195 -114.45 - 81 128.102 684 3 1 -43.25 86.8516 -114.611 - 81 118.064 1335 3 0 -42.806 87.1106 -115.85 - 81 160.53 735 2 1 -33.0417 93.7152 -144.45 - 81 85.8082 1369 2 0 -32.4114 94.0611 -145.85 - 81 56.5062 1370 2 0 -32.3045 94.15 -146.121 - 81 45.2163 794 1 1 -21.1478 104.861 -174.45 - 81 100.046 795 1 1 -21.05 104.883 -174.522 - 81 62.4492 796 1 1 -20.85 104.928 -174.67 - 81 13.0187 797 1 1 -20.6499 104.971 -174.818 - 81 57.1944 1425 1 0 -19.2534 105.314 -175.85 - 81 117.611 1426 1 0 -19.1055 105.35 -175.96 - 81 49.3362 991 0 1 18.3295 110.25 -204.45 - 81 112.612 992 0 1 18.4502 110.321 -204.538 - 81 133.072 993 0 1 18.65 110.438 -204.663 - 81 59.0712 994 0 1 18.85 110.594 -204.765 - 81 37.4451 1458 0 0 20.5118 111.902 -205.85 - 81 156.488 1459 0 0 20.5704 111.95 -205.888 - 81 157.126 1460 0 0 20.7853 112.15 -206.027 - 81 87.0983 1461 0 0 21.0559 112.35 -206.181 - 81 20.2324 1545 0 0 61.8632 129.336 -206.25 - 81 113.278 1546 0 0 61.9269 129.35 -206.193 - 81 32.5383 1214 0 1 62.9655 129.731 -204.85 - 81 299.588 1215 0 1 63.05 129.748 -204.773 - 81 119.335 1216 0 1 63.25 129.794 -204.635 - 81 280.023 1217 0 1 63.45 129.797 -204.533 - 81 90.2504 1219 0 1 63.9268 129.758 -204.45 - 81 53.029 1220 0 1 64.0503 129.592 -204.706 - 81 35.1095 1542 0 0 65.4784 128.637 -205.85 - 81 85.0039 1541 0 0 65.5966 128.55 -205.922 - 81 53.8178 1540 0 0 65.7431 128.35 -206.06 - 81 57.2146 1539 0 0 65.818 128.15 -206.115 - 81 66.4224 1538 0 0 65.9006 127.95 -206.177 - 81 188.133 1543 0 0 63.6018 128.77 -205.85 - 81 157.786 1329 4 0 -47.7875 86.0137 -85.85 - 81 298.406 660 3 1 -47.8604 86.0017 -114.45 - 81 350.025 1329 3 0 -47.8645 86.0032 -115.85 - 81 377.577 660 2 1 -47.9148 86.0699 -144.45 - 81 383.047 1330 2 0 -47.9329 86.0838 -145.85 - 81 114.681 658 1 1 -48.2921 86.4525 -174.45 - 81 111.621 1332 1 0 -48.3199 86.4663 -175.85 - 81 118.396 655 0 1 -48.8735 86.6979 -204.45 - 81 117.721 1333 0 0 -48.9038 86.6958 -205.85 - 81 59.9702 545 1 0 29.4393 -70.85 -176.002 - 81 52.5338 1380 0 0 -71.7299 96.2204 -206.25 - 81 89.0336 1381 0 0 -71.7968 96.35 -206.142 - 81 54.8008 1382 0 0 -71.8955 96.55 -206.008 - 81 28.3868 1383 0 0 -72.0039 96.75 -205.899 - 81 44.0065 536 0 1 -72.8351 98.509 -204.85 - 81 251.821 535 0 1 -72.8504 98.541 -204.83 - 81 90.9177 534 0 1 -73.05 98.9413 -204.596 - 81 81.9376 531 0 1 -73.7662 99.6382 -204.45 - 81 25.9895 530 0 1 -73.8501 99.5816 -204.763 - 81 109.076 1396 0 0 -74.0953 99.4623 -205.85 - 81 333.368 1329 2 0 -47.9734 86.05 -145.953 - 81 129.642 1330 6 0 -47.8602 86.0991 -25.85 - 81 83.0836 649 5 1 -50.0641 86.8637 -54.45 - 81 34.543 650 5 1 -50.05 86.9213 -54.7239 - 81 123.187 1335 5 0 -50.0205 87.1635 -55.85 - 81 129.719 652 4 1 -49.6014 91.7597 -84.45 - 81 116.506 1357 4 0 -49.7119 91.724 -85.8502 - 81 71.5946 633 3 1 -53.2966 88.9938 -114.45 - 81 49.9063 634 3 1 -53.25 88.9376 -114.712 - 81 129.812 1343 3 0 -53.0842 88.6726 -115.85 - 81 143.737 1342 3 0 -53.0695 88.65 -115.946 - 81 117.132 678 2 1 -44.3984 84.0579 -144.45 - 81 6.86925 679 2 1 -44.25 84.1363 -144.837 - 81 216.132 1321 2 0 -43.8724 84.3412 -145.85 - 81 366.58 715 1 1 -36.9772 88.0357 -174.45 - 81 15.3349 1342 1 0 -37.0101 88.6355 -175.85 - 81 114.849 1343 1 0 -37.0113 88.6502 -175.884 - 81 57.8324 711 0 1 -37.7624 100.316 -204.45 - 81 177.394 712 0 1 -37.65 100.413 -204.614 - 81 39.7623 1404 0 0 -36.7223 101.088 -205.85 - 81 124.102 1405 0 0 -36.6412 101.15 -205.961 - 81 174.03 1340 1 0 -37.5973 88.2401 -175.85 - 81 203.551 1320 2 0 -43.7731 84.25 -146.104 - 81 173.242 652 3 1 -49.5633 94.4924 -114.45 - 81 100.067 660 6 1 -47.8542 85.9892 -24.45 - 81 27.3873 666 5 1 -46.8394 86.3137 -54.45 - 81 70.3336 665 5 1 -46.85 86.3228 -54.5923 - 81 131.088 1331 5 0 -46.9414 86.3956 -55.85 - 81 159.358 656 4 1 -48.6632 87.8594 -84.45 - 81 135.668 1339 4 0 -48.8111 87.9788 -85.85 - 81 186.247 638 3 1 -52.3342 90.3824 -114.45 - 81 101.132 1351 3 0 -52.3984 90.4189 -115.85 - 81 205.351 632 2 1 -53.5567 91.1231 -144.45 - 81 318.751 1355 2 0 -53.5415 91.176 -145.85 - 81 114.194 632 1 1 -53.4539 92.7686 -174.45 - 81 267.979 1363 1 0 -53.4889 92.863 -175.85 - 81 118.576 629 0 1 -54.1581 95.3066 -204.45 - 81 116.768 1376 0 0 -54.163 95.382 -205.85 - 81 74.8589 1470 0 0 -49.0335 114.226 -206.25 - 81 62.626 1471 0 0 -48.996 114.35 -206.059 - 81 378.762 654 0 1 -49.151 114.449 -204.85 - 81 3.55228 653 0 1 -49.25 114.669 -204.843 - 81 19.9363 1476 0 0 -50.6251 115.517 -205.85 - 81 168.09 1477 0 0 -50.6658 115.55 -205.885 - 81 296.289 643 0 1 -51.2521 114.73 -204.85 - 81 183.396 1310 1 0 -46.5958 82.2464 -176.25 - 81 280.339 636 2 1 -52.7593 92.1876 -144.85 - 81 160.448 685 2 1 -42.9331 84.9453 -144.45 - 81 171.004 1324 2 0 -42.7606 84.994 -145.85 - 81 138.119 700 1 1 -39.9332 84.9617 -174.45 - 81 246.897 1324 1 0 -39.7557 84.9148 -175.85 - 81 117.634 719 0 1 -36.193 84.7964 -204.45 - 81 109.489 1323 0 0 -36.1751 84.7819 -205.85 - 81 119.27 1758 4 0 116.723 171.75 -86.0354 - 81 225.592 582 0 1 -63.6294 93.0524 -204.45 - 81 45.2771 581 0 1 -63.65 92.8786 -204.565 - 81 100.916 1329 1 0 -47.6375 86.0236 -175.85 -Number of digits in this event: 87 -Using G4ParticleGun... -Particle energy: 5.43498 LIN -Particle: gamma -Event: 82 -Number of tracker hits in this event: 58 - 82 231.107 613 8 1 -57.4066 24.2391 35.55 - 82 230.377 1020 8 0 -57.4031 24.2382 34.15 - 82 223.215 613 7 1 -57.3307 24.215 5.55 - 82 255.733 1020 7 0 -57.3234 24.2133 4.15 - 82 190.35 614 6 1 -57.1603 24.1934 -24.45 - 82 132.062 1020 6 0 -57.154 24.1948 -25.85 - 82 107.515 615 5 1 -57.0265 24.2235 -54.45 - 82 107.527 1020 5 0 -57.0231 24.2192 -55.85 - 82 94.2225 615 4 1 -56.9587 24.1002 -84.45 - 82 124.093 1020 4 0 -56.9518 24.099 -85.85 - 82 127.645 616 3 1 -56.8106 24.0709 -114.45 - 82 210.387 1020 3 0 -56.8049 24.0692 -115.85 - 82 134.552 616 2 1 -56.669 24.0375 -144.45 - 82 133.389 1019 2 0 -56.6628 24.0366 -145.85 - 82 108.061 617 1 1 -56.5426 24.0328 -174.45 - 82 163.336 1019 1 0 -56.5348 24.0307 -175.85 - 82 134.546 618 0 1 -56.3269 24.0029 -204.45 - 82 157.141 1019 0 0 -56.3179 24.0032 -205.85 - 82 26.8984 695 1 0 -20.0859 -40.9659 -176.25 - 82 246.719 694 1 0 -20.0554 -41.0501 -176.135 - 82 61.6836 693 1 0 -19.8806 -41.25 -176.002 - 82 195.21 803 1 1 -19.4118 -41.8666 -174.85 - 82 86.1575 802 1 1 -19.4501 -41.9366 -174.795 - 82 40.7701 938 3 0 -45.8843 7.79301 -116.25 - 82 76.7579 939 3 0 -45.7782 7.85 -116.182 - 82 71.8158 940 3 0 -45.5536 8.05 -115.999 - 82 7.16983 681 3 1 -43.6795 10.0174 -114.85 - 82 540.18 682 3 1 -43.65 10.0363 -114.833 - 82 139.627 683 3 1 -43.45 10.1547 -114.631 - 82 116.113 1039 3 0 -60.548 27.9731 -116.25 - 82 266.736 1040 3 0 -60.579 28.05 -116.049 - 82 124.031 617 2 1 -56.6373 24.1012 -144.45 - 82 109.238 1018 2 0 -56.3505 23.85 -145.911 - 82 27.3966 645 1 1 -51.0354 16.9801 -174.45 - 82 174.32 644 1 1 -51.05 17.0159 -174.53 - 82 158.584 988 1 0 -51.26 17.7232 -175.85 - 82 74.1887 989 1 0 -51.2872 17.85 -176.104 - 82 174.528 638 0 1 -52.3565 32.6579 -204.45 - 82 2.39426 1065 0 0 -52.3373 33.2469 -205.85 - 82 101.715 1066 0 0 -52.3372 33.2501 -205.858 - 82 117.184 613 6 1 -57.3738 24.2503 -24.45 - 82 120.006 1021 6 0 -57.3729 24.2524 -25.85 - 82 116.645 613 5 1 -57.3514 24.2906 -54.45 - 82 104.783 1021 5 0 -57.3519 24.2916 -55.85 - 82 138.786 613 4 1 -57.3521 24.3091 -84.45 - 82 113.848 1021 4 0 -57.3522 24.3109 -85.85 - 82 156.113 613 3 1 -57.3575 24.3512 -114.45 - 82 155.932 1021 3 0 -57.358 24.3497 -115.85 - 82 125.536 613 2 1 -57.3757 24.3215 -144.45 - 82 112.339 1021 2 0 -57.3737 24.3206 -145.85 - 82 102.002 613 1 1 -57.3268 24.293 -174.45 - 82 113.139 1021 1 0 -57.328 24.2916 -175.85 - 82 141.673 613 0 1 -57.3533 24.2773 -204.45 - 82 122.537 1021 0 0 -57.3519 24.2802 -205.85 - 82 47.3394 1067 1 0 -8.7821 33.45 -176.213 - 82 171.802 999 2 0 -22.5492 19.9386 -146.25 - 82 157.063 1794 5 0 35.412 179.109 -56.25 - 82 113.566 1685 5 0 -48.6964 157.321 -56.25 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 8.161 LIN -Particle: gamma -Event: 83 -Number of tracker hits in this event: 61 - 83 268.092 611 5 1 -57.7784 69.9508 -54.45 - 83 243.133 1249 5 0 -57.7737 69.9481 -55.85 - 83 223.074 611 4 1 -57.6746 69.9104 -84.45 - 83 243.364 1249 4 0 -57.6666 69.916 -85.85 - 83 169.621 612 3 1 -57.4824 70.0055 -114.45 - 83 268.934 1249 3 0 -57.4726 70.0129 -115.85 - 83 195.476 613 2 1 -57.3064 70.1667 -144.45 - 83 102.222 1250 2 0 -57.3092 70.1686 -145.85 - 83 225.522 613 1 1 -57.3341 70.1855 -174.45 - 83 106.163 1250 1 0 -57.3113 70.1827 -175.85 - 83 96.03 615 0 1 -56.8519 70.1546 -204.45 - 83 89.4029 616 0 1 -56.85 70.1536 -204.549 - 83 140.761 1250 0 0 -56.8223 70.1392 -205.85 - 83 33.6672 1003 0 0 -79.8705 20.85 -205.912 - 83 209.589 495 0 1 -80.8721 18.9983 -204.85 - 83 120.244 494 0 1 -81.05 18.6544 -204.625 - 83 191.286 496 0 1 -80.85 17.8295 -204.614 - 83 93.7929 497 0 1 -80.65 17.5693 -204.712 - 83 9.66108 498 0 1 -80.4494 17.3722 -204.833 - 83 75.5628 978 0 0 -78.4934 15.7076 -205.85 - 83 153.666 977 0 0 -78.4321 15.65 -205.876 - 83 67.7209 976 0 0 -78.2538 15.4499 -205.889 - 83 71.7497 975 0 0 -78.0611 15.25 -205.898 - 83 56.0539 974 0 0 -77.8927 15.05 -205.886 - 83 91.9522 521 0 1 -75.8014 11.9641 -204.85 - 83 92.2774 522 0 1 -75.65 11.7349 -204.765 - 83 164.169 523 0 1 -75.45 11.489 -204.639 - 83 74.8874 524 0 1 -75.1075 11.2319 -204.45 - 83 12.3782 954 0 0 -76.2858 10.8687 -205.85 - 83 97.869 953 0 0 -76.3109 10.85 -205.879 - 83 104.457 952 0 0 -76.5664 10.6498 -206.069 - 83 10.1413 714 0 1 -37.2315 116 -204.85 - 83 274.12 612 2 1 -57.5032 69.8886 -144.45 - 83 344.571 1249 2 0 -57.4977 69.8815 -145.85 - 83 39.4207 614 1 1 -57.25 69.7731 -174.709 - 83 120.603 1248 1 0 -57.2174 69.7088 -175.85 - 83 195.645 618 0 1 -56.3957 68.0134 -204.45 - 83 165.076 1239 0 0 -56.3783 67.9351 -205.85 - 83 113.38 1238 0 0 -56.3524 67.8499 -206.064 - 83 49.5157 608 1 1 -58.2745 69.5388 -174.45 - 83 205.888 609 1 1 -58.25 69.5481 -174.655 - 83 118.551 1247 1 0 -58.0961 69.5904 -175.85 - 83 14.4306 628 0 1 -54.2593 70.1776 -204.45 - 83 90.064 629 0 1 -54.25 70.172 -204.497 - 83 224.459 1249 0 0 -53.9577 70.0083 -205.85 - 83 37.4833 13 9 1 -177.413 -89.6958 65.15 - 83 40.6035 454 9 0 -176.918 -89.1419 64.15 - 83 40.4887 316 6 0 -100.556 -116.752 -26.25 - 83 2.76532 385 6 1 -102.985 -114.448 -24.85 - 83 67.1212 834 0 0 -82.7458 -13.05 -206.08 - 83 13.8006 1308 14 1 81.65 14.1912 215.187 - 83 9.28364 1663 2 0 -52.5105 152.93 -146.25 - 83 345.51 1664 2 0 -52.5003 152.95 -146.241 - 83 227.943 610 3 1 -57.8717 69.9882 -114.45 - 83 129.692 610 2 1 -57.9461 69.9855 -144.45 - 83 105.074 1249 1 0 -58.0564 70.0057 -175.85 - 83 121.173 609 0 1 -58.1547 69.9999 -204.45 - 83 23.8428 526 2 1 -74.7301 115.469 -144.85 - 83 73.1079 482 0 1 -83.5415 66.1943 -204.85 - 83 66.2895 481 0 1 -83.65 66.187 -204.733 - 83 6.01892 1102 9 0 -65.2853 40.5343 63.75 -Number of digits in this event: 28 -Using G4ParticleGun... -Particle energy: 5.71116 LIN -Particle: gamma -Event: 84 -Number of tracker hits in this event: 79 - 84 226.796 1205 9 1 61.2095 -33.6979 65.55 - 84 273.255 731 9 0 61.2084 -33.6978 64.15 - 84 423.681 1205 8 1 61.1879 -33.6913 35.55 - 84 215.442 731 8 0 61.1871 -33.69 34.15 - 84 327.857 1205 7 1 61.1699 -33.6621 5.55 - 84 242.532 731 7 0 61.169 -33.6629 4.15 - 84 571.916 1205 6 1 61.1606 -33.6774 -24.45 - 84 257.797 731 6 0 61.1595 -33.6781 -25.85 - 84 380.62 1205 5 1 61.1402 -33.6928 -54.45 - 84 364.041 731 5 0 61.1412 -33.6937 -55.85 - 84 122.191 1205 4 1 61.1544 -33.7155 -84.45 - 84 239.399 731 4 0 61.1561 -33.7162 -85.85 - 84 107.252 1205 3 1 61.1919 -33.7227 -114.45 - 84 130.596 731 3 0 61.1927 -33.7242 -115.85 - 84 234.836 1205 2 1 61.1977 -33.7792 -144.45 - 84 300.739 731 2 0 61.2002 -33.7785 -145.85 - 84 357.127 1206 1 1 61.2659 -33.7502 -174.45 - 84 370.352 731 1 0 61.2673 -33.7438 -175.85 - 84 233.977 1206 0 1 61.2869 -33.6032 -204.45 - 84 103.858 732 0 0 61.2895 -33.6002 -205.85 - 84 7.11038 818 1 0 71.3592 -16.45 -176.045 - 84 450.222 1204 4 1 60.9677 -34.0155 -84.45 - 84 366.027 730 4 0 60.9476 -34.0357 -85.85 - 84 143.36 1202 3 1 60.6163 -34.3866 -114.45 - 84 136.046 728 3 0 60.6062 -34.4048 -115.85 - 84 256.297 1202 2 1 60.4575 -34.7827 -144.45 - 84 132.837 726 2 0 60.4505 -34.8029 -145.85 - 84 139.413 1201 1 1 60.3233 -35.314 -174.45 - 84 138.317 723 1 0 60.3169 -35.3108 -175.85 - 84 139.252 1200 0 1 60.2264 -35.2047 -204.45 - 84 234.231 724 0 0 60.2266 -35.1922 -205.85 - 84 13.0718 1258 0 0 55.948 71.8437 -206.25 - 84 68.8166 1259 0 0 55.9485 71.85 -206.235 - 84 4.9359 460 1 0 129.813 -88.0454 -176.25 - 84 190.068 459 1 0 129.808 -88.05 -176.235 - 84 87.8476 1545 1 1 129.329 -87.767 -174.85 - 84 61.5893 1544 1 1 129.15 -87.6751 -174.696 - 84 253.904 1543 1 1 128.95 -87.6578 -174.641 - 84 127.834 1542 1 1 128.75 -87.6571 -174.622 - 84 312.367 1200 1 1 60.1014 -35.1957 -174.451 - 84 356.84 724 1 0 60.0089 -35.1717 -175.85 - 84 109.335 1189 0 1 58.0231 -35.3876 -204.45 - 84 231.765 723 0 0 57.9084 -35.3282 -205.85 - 84 107.076 1188 0 1 57.7731 -36.4056 -204.45 - 84 170.446 716 0 0 57.5929 -36.6918 -205.85 - 84 196.423 732 6 0 61.154 -33.6332 -25.8502 - 84 93.7188 1204 5 1 61.0273 -33.4272 -54.45 - 84 109.872 732 5 0 61.1051 -33.4524 -55.85 - 84 104.545 1213 4 1 62.6876 -33.848 -84.45 - 84 17.1309 1226 3 1 65.4458 -35.6419 -114.45 - 84 144.101 1227 3 1 65.45 -35.6551 -114.536 - 84 154.049 720 3 0 65.5245 -35.8554 -115.85 - 84 100.31 1239 2 1 67.9346 -40.1078 -144.45 - 84 57.9481 699 2 0 68.0606 -40.2338 -145.85 - 84 63.8537 698 2 0 68.0825 -40.25 -146.043 - 84 127.606 1257 1 1 71.6111 -43.5085 -174.45 - 84 5.37584 1258 1 1 71.65 -43.4629 -174.83 - 84 116.916 683 1 0 71.7556 -43.3328 -175.852 - 84 125.502 1278 0 1 75.6914 -40.5915 -204.45 - 84 119.42 697 0 0 75.8758 -40.5836 -205.85 - 84 17.1207 566 1 0 17.2815 -66.6633 -176.25 - 84 107.219 1204 3 1 60.9905 -33.8984 -114.45 - 84 128.561 730 3 0 60.9936 -33.9034 -115.85 - 84 109.062 730 2 0 61.0694 -33.9569 -145.85 - 84 305.739 1205 1 1 61.1624 -33.8513 -174.45 - 84 159.048 731 0 0 61.2762 -33.8004 -205.85 - 84 363.028 1202 1 1 60.5746 -33.3764 -174.45 - 84 94.705 730 1 0 60.0651 -33.85 -176.027 - 84 32.6973 1152 0 1 50.4817 -40.5522 -204.45 - 84 102.063 1151 0 1 50.45 -40.6072 -204.546 - 84 113.91 693 0 0 50.128 -41.2664 -205.85 - 84 11.5143 692 0 0 50.0551 -41.45 -206.21 - 84 91.6803 1203 1 1 60.65 -33.4861 -174.531 - 84 116.75 1204 1 1 60.85 -33.5614 -174.581 - 84 130.104 735 1 0 60.1337 -33.0466 -175.851 - 84 117.726 1155 0 1 51.0764 -29.2082 -204.45 - 84 208.292 1154 0 1 51.05 -29.1879 -204.502 - 84 118.16 756 0 0 50.3832 -28.7468 -205.85 - 84 360.938 757 0 0 50.1909 -28.65 -206.195 -Number of digits in this event: 48 -Using G4ParticleGun... -Particle energy: 7.71046 LIN -Particle: gamma -Event: 85 -Number of tracker hits in this event: 85 - 85 373.651 1022 7 1 24.5492 -22.6643 5.55 - 85 375.786 786 7 0 24.5448 -22.6661 4.15 - 85 113.944 1021 6 1 24.4158 -22.7004 -24.45 - 85 116.11 786 6 0 24.4082 -22.7037 -25.85 - 85 372.897 1021 5 1 24.2635 -22.7807 -54.45 - 85 222.46 786 5 0 24.259 -22.7868 -55.85 - 85 101.376 1020 4 1 24.1608 -22.9055 -84.45 - 85 137.999 785 4 0 24.1533 -22.9063 -85.85 - 85 87.4274 1019 3 1 23.9984 -22.924 -114.45 - 85 132.344 785 3 0 23.9777 -22.9167 -115.85 - 85 409.935 1017 2 1 23.5633 -22.7875 -144.45 - 85 480.217 786 2 0 23.5425 -22.7864 -145.85 - 85 103.975 1015 1 1 23.1192 -22.7742 -174.45 - 85 573.383 786 1 0 23.0946 -22.7754 -175.85 - 85 114.538 1012 0 1 22.6189 -22.8097 -204.45 - 85 431.149 786 0 0 22.597 -22.813 -205.85 - 85 141.637 784 2 0 23.3041 -23.1774 -145.85 - 85 59.7674 783 2 0 23.249 -23.25 -146.073 - 85 116.404 989 1 1 17.9964 -34.5053 -174.45 - 85 50.9433 988 1 1 17.85 -34.2644 -174.713 - 85 19.4106 733 1 0 16.9524 -33.3016 -175.85 - 85 85.6713 734 1 0 16.9013 -33.2495 -175.912 - 85 69.9733 735 1 0 16.7029 -33.05 -176.116 - 85 245.298 787 2 0 23.6774 -22.4982 -145.85 - 85 53.3961 1012 1 1 22.5288 -22.539 -174.45 - 85 83.9286 1013 1 1 22.65 -22.5627 -174.614 - 85 413.355 787 1 0 23.5745 -22.6013 -175.85 - 85 117.32 1155 0 1 51.0782 -24.4285 -204.45 - 85 139.235 777 0 0 51.286 -24.5135 -205.85 - 85 2.80535 776 0 0 51.3467 -24.6501 -206.242 - 85 162.306 1020 5 1 24.1922 -22.8042 -54.4504 - 85 468.293 1021 1 1 24.3396 -22.7285 -174.45 - 85 393.88 1027 0 1 25.5849 -18.7194 -204.45 - 85 113.662 807 0 0 25.6614 -18.5748 -205.85 - 85 108.587 791 0 0 25.5407 -21.7812 -205.85 - 85 79.4775 1029 2 0 53.0522 25.855 -146.25 - 85 300.827 1166 2 1 53.3286 26.3277 -144.85 - 85 154.597 1165 2 1 53.25 26.7849 -144.596 - 85 126.37 1037 2 0 53.4281 27.5138 -145.85 - 85 130.277 1038 2 0 53.475 27.65 -146.04 - 85 12.2728 1023 7 1 24.6831 -22.6527 5.55 - 85 77.5491 1021 7 1 24.45 -22.5073 5.46785 - 85 207.921 1020 7 1 24.2493 -22.3591 5.39224 - 85 59.4661 1019 7 1 24.0498 -22.2268 5.27076 - 85 27.8824 793 7 0 23.4856 -21.3181 4.15 - 85 102.918 794 7 0 23.4606 -21.25 4.06919 - 85 63.5826 795 7 0 23.4019 -21.05 3.87121 - 85 133.178 903 7 0 15.1208 0.787405 3.75 - 85 24.8214 980 7 1 16.1903 0.562698 5.15007 - 85 80.6409 981 7 1 16.2501 0.55993 5.20129 - 85 78.856 982 7 1 16.4502 0.530535 5.40827 - 85 75.4998 983 7 1 16.65 0.414065 5.39212 - 85 75.6727 984 7 1 16.85 0.37835 5.39822 - 85 49.4529 985 7 1 17.05 0.359564 5.32521 - 85 387.407 986 7 1 17.25 0.286613 5.37397 - 85 217.107 987 7 1 17.4501 0.294743 5.49333 - 85 6.02817 799 7 0 25.0725 -20.25 4.13334 - 85 1.00185 797 7 0 23.9387 -20.45 4.0299 - 85 117.089 1022 6 1 24.4985 -22.6265 -24.45 - 85 144.174 787 6 0 24.4949 -22.6271 -25.85 - 85 141.38 1021 4 1 24.3708 -22.7146 -84.45 - 85 133.087 786 4 0 24.3691 -22.7155 -85.85 - 85 305.711 1021 3 1 24.3323 -22.7308 -114.45 - 85 376.823 786 3 0 24.3294 -22.7326 -115.85 - 85 216.166 1021 2 1 24.2687 -22.7765 -144.45 - 85 164.313 1020 1 1 24.2441 -22.7859 -174.45 - 85 170.359 1021 0 1 24.2735 -22.81 -204.45 - 85 50.8078 730 1 0 -113.741 -33.8539 -176.25 - 85 30.2344 327 1 1 -114.694 -33.605 -174.85 - 85 15.7488 326 1 1 -114.75 -33.6028 -174.825 - 85 142.099 729 1 0 -116.041 -34.1463 -175.85 - 85 127.851 728 1 0 -116.068 -34.25 -176.044 - 85 186.477 1043 1 1 28.7269 88.7208 -174.45 - 85 46.6064 1044 1 1 28.85 88.5756 -174.59 - 85 49.9245 1023 2 1 24.65 -23.0932 -144.495 - 85 115.324 1020 2 1 24.2023 -22.6435 -144.45 - 85 95.8799 1019 1 1 23.9646 -22.7237 -174.45 - 85 254.324 1018 0 1 23.7986 -22.8419 -204.45 - 85 127.864 785 0 0 23.7898 -22.86 -205.85 - 85 192.01 961 6 0 38.3679 12.2513 -26.2497 - 85 14.7649 962 6 0 38.6681 12.45 -25.8766 - 85 211.795 1098 6 1 39.7795 13.7735 -24.85 - 85 147.903 1097 6 1 39.65 14.2317 -24.5507 - 85 81.4525 1096 6 1 39.45 14.3137 -24.8127 - 85 317.683 974 6 0 38.5204 14.9944 -25.8504 -Number of digits in this event: 45 -Using G4ParticleGun... -Particle energy: 4.28613 LIN -Particle: gamma -Event: 86 -Number of tracker hits in this event: 13 - 86 242.957 766 1 1 -26.7511 2.78666 -174.45 - 86 270.025 913 1 0 -26.7507 2.78834 -175.85 - 86 263.674 766 0 1 -26.7319 2.82528 -204.45 - 86 221.123 913 0 0 -26.7298 2.82834 -205.85 - 86 116.401 64 1 0 61.6229 -167.15 -176.12 - 86 423.978 1207 1 1 61.6473 -167.352 -174.85 - 86 64.8411 227 3 0 -38.7441 -134.55 -116.163 - 86 71.8904 226 3 0 -38.7725 -134.75 -115.992 - 86 94.955 225 3 0 -38.7908 -134.95 -116.059 - 86 128.309 224 3 0 -39.0116 -135.15 -116.131 - 86 84.8305 223 3 0 -39.2315 -135.35 -116.004 - 86 83.808 704 3 1 -39.1041 -135.251 -114.85 - 86 165.521 705 3 1 -39.0498 -135.369 -114.77 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 9.82201 LIN -Particle: gamma -Event: 87 -Number of tracker hits in this event: 17 - 87 281.371 1128 4 1 45.7221 17.8005 -84.45 - 87 305.933 988 4 0 45.7216 17.8009 -85.85 - 87 245.562 1128 3 1 45.7079 17.809 -114.45 - 87 154.983 988 3 0 45.7068 17.8093 -115.85 - 87 199.457 1128 2 1 45.6865 17.8217 -144.45 - 87 300.731 988 2 0 45.6864 17.8216 -145.85 - 87 292.187 1128 1 1 45.6864 17.823 -174.45 - 87 109.463 988 1 0 45.6865 17.8229 -175.85 - 87 103.384 1128 0 1 45.6875 17.8177 -204.45 - 87 464.272 988 0 0 45.6883 17.8156 -205.85 - 87 19.905 541 2 0 93.3888 -71.85 -146.01 - 87 239.567 1127 0 1 45.6091 17.8282 -204.45 - 87 141.176 989 3 0 45.7374 17.886 -115.85 - 87 120.313 989 2 0 45.7398 18.0178 -145.85 - 87 140.358 990 1 0 45.7887 18.1735 -175.85 - 87 112.076 1129 0 1 45.8591 18.315 -204.45 - 87 173.088 991 0 0 45.8594 18.3235 -205.85 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 8.6983 LIN -Particle: gamma -Event: 88 -Number of tracker hits in this event: 5 - 88 276.578 731 5 0 -40.0719 -33.7529 -56.25 - 88 59.6632 730 5 0 -40.1093 -33.85 -56.0877 - 88 201.731 1121 4 1 44.4008 105.741 -84.85 - 88 95.1422 1170 4 0 86.7306 54.25 -85.9109 - 88 6.6576 258 5 1 -128.35 20.9986 -54.7109 -Number of digits in this event: 4 -Using G4ParticleGun... -Particle energy: 1.28617 LIN -Particle: gamma -Event: 89 -Number of tracker hits in this event: 2 - 89 318.394 845 0 1 -10.9569 85.3205 -204.45 - 89 399.31 1326 0 0 -10.9549 85.3204 -205.85 -Number of digits in this event: 6 -Using G4ParticleGun... -Particle energy: 6.54125 LIN -Particle: gamma -Event: 90 -Number of tracker hits in this event: 1 - 90 45.5748 1380 1 0 -172.745 96.1649 -176.25 -Number of digits in this event: 3 -Using G4ParticleGun... -Particle energy: 8.35916 LIN -Particle: gamma -Event: 91 -Number of tracker hits in this event: 3 - 91 15.4153 51 1 1 -169.846 -160.171 -174.85 - 91 2.46385 1072 12 1 34.45 -156.704 155.375 - 91 63.8967 245 7 1 -131.121 55.6417 5.15 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 2.36136 LIN +Particle energy: 8.31341 LIN +Particle: gamma +Event: 74 +Number of tracker hits in this event: 5 + 74 245.807 1235 0 1 67.2404 57.4836 -204.45 + 74 314.048 1187 0 0 67.2424 57.4781 -205.85 + 74 189.793 781 12 1 -23.7323 -151.932 155.15 + 74 24.3464 330 4 1 -113.986 -36.5784 -84.85 + 74 43.494 915 13 0 14.5831 3.15761 183.75 +Number of digits in this event: 4 +Using G4ParticleGun... +Particle energy: 3.46775 LIN +Particle: gamma +Event: 75 +Number of tracker hits in this event: 42 + 75 219.439 520 7 1 -76.0367 53.6598 5.55 + 75 246.767 1168 7 0 -76.0358 53.6598 4.15 + 75 273.836 520 6 1 -76.0163 53.642 -24.45 + 75 217.865 1167 6 0 -76.0169 53.6381 -25.85 + 75 105.776 520 5 1 -76.0318 53.5451 -54.45 + 75 126.283 1167 5 0 -76.0302 53.5379 -55.85 + 75 177.618 520 4 1 -75.9896 53.396 -84.45 + 75 108.036 1166 4 0 -75.9896 53.3908 -85.85 + 75 182.844 520 3 1 -75.9822 53.2614 -114.45 + 75 113.934 1166 3 0 -75.9831 53.2536 -115.85 + 75 140.844 520 2 1 -76.013 53.0861 -144.45 + 75 112.839 1165 2 0 -76.017 53.0798 -145.85 + 75 99.6157 519 1 1 -76.1149 52.9581 -174.45 + 75 295.384 1164 1 0 -76.122 52.9542 -175.85 + 75 100.591 518 0 1 -76.2874 52.8967 -204.45 + 75 604.32 1164 0 0 -76.2999 52.8963 -205.85 + 75 117.123 908 4 0 -146.098 1.76649 -86.25 + 75 259.939 520 1 1 -75.9823 52.9993 -174.45 + 75 124.36 1165 1 0 -76.0463 53.0653 -175.85 + 75 113.579 511 0 1 -77.8307 54.4879 -204.45 + 75 123.647 1171 0 0 -77.8852 54.4497 -205.85 + 75 52.4397 323 1 0 -171.432 -115.35 -176.006 + 75 129.081 522 0 1 -75.6029 53.0297 -204.45 + 75 383.549 772 2 1 -25.4565 -26.4325 -144.85 + 75 31.8503 866 2 0 -14.7983 -6.70062 -146.25 + 75 119.709 519 6 1 -76.1164 53.615 -24.45 + 75 142.692 521 5 1 -75.8175 53.7066 -54.45 + 75 157.663 1168 5 0 -75.8045 53.712 -55.85 + 75 103.515 522 4 1 -75.4964 53.8173 -84.45 + 75 98.5783 1168 4 0 -75.4851 53.8108 -85.85 + 75 273.225 524 3 1 -75.2252 53.7075 -114.45 + 75 136.484 1168 3 0 -75.1917 53.7017 -115.85 + 75 99.4327 528 2 1 -74.3184 53.5123 -144.45 + 75 116.819 1167 2 0 -74.3017 53.5052 -145.85 + 75 138.584 530 1 1 -73.9709 53.3524 -174.45 + 75 123.514 1166 1 0 -73.9553 53.3556 -175.85 + 75 103.115 532 0 1 -73.591 53.3337 -204.45 + 75 127.486 1166 0 0 -73.5792 53.3337 -205.85 + 75 4.22117 1224 3 0 -115.003 64.85 -116.024 + 75 94.1656 325 3 1 -115.051 65.8638 -114.85 + 75 13.9059 324 3 1 -115.15 65.9227 -114.819 + 75 209.041 1228 3 0 -115.728 65.8113 -115.85 +Number of digits in this event: 26 +Using G4ParticleGun... +Particle energy: 3.17307 LIN +Particle: gamma +Event: 76 +Number of tracker hits in this event: 70 + 76 302.787 1119 11 1 43.8746 -51.9087 125.55 + 76 265.704 640 11 0 43.8753 -51.9094 124.15 + 76 257.783 1119 10 1 43.8992 -51.9199 95.55 + 76 115.482 640 10 0 43.9003 -51.9201 94.15 + 76 256.349 1119 9 1 43.9316 -51.9267 65.55 + 76 165.536 640 9 0 43.9345 -51.9309 64.15 + 76 174.743 1119 8 1 44.0044 -52.0109 35.55 + 76 158.056 640 8 0 44.0103 -52.0127 34.15 + 76 124.518 1120 7 1 44.132 -52.0484 5.55 + 76 104.108 640 7 0 44.1352 -52.0489 4.15 + 76 117.06 1120 6 1 44.1949 -52.0721 -24.45 + 76 106.563 639 6 0 44.1922 -52.0727 -25.85 + 76 123.436 1120 5 1 44.13 -52.0947 -54.45 + 76 100.444 639 5 0 44.1267 -52.0845 -55.85 + 76 127.34 1120 4 1 44.0529 -51.8628 -84.45 + 76 24.382 640 4 0 44.0552 -51.851 -85.85 + 76 121.595 641 4 0 44.0554 -51.85 -85.9714 + 76 114.603 1120 3 1 44.0937 -51.5974 -114.45 + 76 175.671 642 3 0 44.1015 -51.5917 -115.85 + 76 116.574 1120 2 1 44.21 -51.3684 -144.45 + 76 119.308 643 2 0 44.2029 -51.3622 -145.85 + 76 208.201 1120 1 1 44.0713 -51.2399 -174.45 + 76 115.462 644 1 0 44.0674 -51.234 -175.85 + 76 121.748 1119 0 1 43.9898 -51.1648 -204.45 + 76 124.976 644 0 0 43.9707 -51.154 -205.85 + 76 105.849 641 3 0 44.172 -51.6501 -116.165 + 76 6.97448 640 3 0 44.3236 -51.85 -116.227 + 76 126.746 639 9 0 43.8144 -52.1486 64.15 + 76 81.4888 638 9 0 43.9554 -52.25 63.8758 + 76 228.015 496 9 0 30.7582 -80.6732 63.751 + 76 157.294 497 9 0 30.3377 -80.65 63.8554 + 76 52.2968 498 9 0 30.1375 -80.45 63.7985 + 76 85.485 46 9 0 16.6313 -170.874 63.75 + 76 195.648 45 9 0 16.5361 -170.95 63.8087 + 76 320.958 635 10 0 43.9847 -52.8637 94.15 + 76 143.551 1120 9 1 44.0736 -55.419 65.55 + 76 76.863 622 9 0 44.0732 -55.6262 64.15 + 76 76.692 621 9 0 44.0736 -55.65 63.9881 + 76 217.299 1120 8 1 44.1292 -59.783 35.55 + 76 224.337 600 8 0 44.119 -59.9475 34.15 + 76 109.364 1119 7 1 43.9128 -63.3236 5.55 + 76 108.005 582 7 0 43.9353 -63.5482 4.15 + 76 100.654 1122 6 1 44.475 -68.075 -24.45 + 76 103.407 558 6 0 44.4307 -68.2962 -25.85 + 76 255.552 1115 5 1 43.1318 -72.7539 -54.45 + 76 128.477 536 5 0 43.0155 -72.7906 -55.85 + 76 9.65378 1103 4 1 40.6607 -74.7949 -84.4501 + 76 133.996 1102 4 1 40.6498 -74.797 -84.4738 + 76 202.41 525 4 0 40.0647 -74.8776 -85.85 + 76 110.804 1031 3 1 26.3256 -77.3627 -114.45 + 76 37.0014 1030 3 1 26.25 -77.3425 -114.755 + 76 46.1559 513 3 0 25.9617 -77.2683 -115.85 + 76 62.1963 514 3 0 25.9086 -77.25 -116.031 + 76 129.163 988 2 1 17.7324 -71.0496 -144.45 + 76 14.1341 987 2 1 17.6498 -71.0135 -144.789 + 76 138.259 545 2 0 17.3883 -70.9248 -145.85 + 76 74.5457 934 1 1 6.87808 -68.0878 -174.45 + 76 112.443 933 1 1 6.84994 -68.1733 -174.633 + 76 14.3405 556 1 0 6.59607 -68.8263 -175.85 + 76 118.433 555 1 0 6.58648 -68.85 -175.892 + 76 43.4265 924 0 1 4.9452 -83.1808 -204.45 + 76 121.869 925 0 1 5.05 -83.0918 -204.556 + 76 135.713 926 0 1 5.25 -82.888 -204.741 + 76 75.3887 927 0 1 5.45 -82.5616 -204.802 + 76 77.3249 528 0 0 9.12764 -74.438 -205.85 + 76 62.6883 529 0 0 9.22588 -74.2499 -205.914 + 76 58.7457 530 0 0 9.33959 -74.05 -205.973 + 76 202.448 531 0 0 9.45876 -73.8498 -206.066 + 76 50.6893 532 0 0 9.58132 -73.65 -206.177 + 76 69.0355 599 8 0 44.1346 -60.0506 33.8624 +Number of digits in this event: 33 +Using G4ParticleGun... +Particle energy: 1.74636 LIN +Particle: gamma +Event: 77 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 6.75527 LIN +Particle: gamma +Event: 78 +Number of tracker hits in this event: 2 + 78 93.8384 246 2 1 -130.856 -47.6499 -144.45 + 78 351.962 247 2 1 -130.75 -47.5975 -144.648 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 4.42891 LIN +Particle: gamma +Event: 79 +Number of tracker hits in this event: 32 + 79 440.583 1253 6 1 70.7493 -119.736 -24.45 + 79 219.764 302 6 0 70.7562 -119.747 -25.85 + 79 542.096 1254 5 1 70.8673 -119.967 -54.45 + 79 333.377 300 5 0 70.887 -119.973 -55.85 + 79 107.147 1256 4 1 71.3204 -120.1 -84.45 + 79 100.911 300 4 0 71.3323 -120.107 -85.85 + 79 116.34 1257 3 1 71.5518 -120.253 -114.45 + 79 223.944 299 3 0 71.5628 -120.242 -115.85 + 79 130.821 1258 2 1 71.838 -120.031 -144.45 + 79 300.705 300 2 0 71.8139 -120.05 -145.85 + 79 93.423 1257 1 1 71.5112 -120.502 -174.45 + 79 101.095 298 1 0 71.489 -120.531 -175.85 + 79 213.636 1254 0 1 71.0135 -121.051 -204.45 + 79 124.323 295 0 0 70.9822 -121.082 -205.85 + 79 129.072 912 11 0 11.3299 2.5863 123.75 + 79 139.946 301 6 0 71.2722 -119.915 -25.85 + 79 164.82 1253 5 1 70.7778 -119.722 -54.45 + 79 203.252 302 5 0 70.7795 -119.723 -55.85 + 79 130.279 1253 4 1 70.8078 -119.745 -84.45 + 79 126.25 302 4 0 70.808 -119.747 -85.85 + 79 104.791 1253 3 1 70.8068 -119.787 -114.45 + 79 186.832 301 3 0 70.8055 -119.787 -115.85 + 79 103.956 1253 2 1 70.7896 -119.808 -144.45 + 79 373.427 301 2 0 70.7893 -119.811 -145.85 + 79 116.312 1253 1 1 70.7752 -119.874 -174.45 + 79 235.098 301 1 0 70.7741 -119.878 -175.85 + 79 117.595 1253 0 1 70.7486 -119.948 -204.45 + 79 127.801 300 0 0 70.7514 -119.952 -205.85 + 79 152.365 679 0 0 61.2088 -44.25 -206.181 + 79 83.3391 303 5 0 71.0033 -119.55 -55.981 + 79 31.7032 304 5 0 71.027 -119.35 -55.879 + 79 50.1259 301 5 0 70.5127 -119.939 -55.85 +Number of digits in this event: 23 +Using G4ParticleGun... +Particle energy: 9.93433 LIN +Particle: gamma +Event: 80 +Number of tracker hits in this event: 29 + 80 229.922 1513 5 1 122.859 -76.0159 -54.45 + 80 259.78 520 5 0 122.832 -75.9496 -55.85 + 80 135.031 1511 4 1 122.4 -74.5624 -84.45 + 80 140.714 527 4 0 122.384 -74.489 -85.85 + 80 128.271 1509 3 1 122.076 -72.8342 -114.45 + 80 111.298 536 3 0 122.051 -72.7875 -115.85 + 80 125.038 1507 2 1 121.552 -71.9221 -144.45 + 80 123.325 540 2 0 121.574 -71.8924 -145.85 + 80 107.406 1510 1 1 122.31 -71.3197 -174.45 + 80 139.639 543 1 0 122.308 -71.2737 -175.85 + 80 94.4894 1511 0 1 122.503 -70.3344 -204.45 + 80 101.38 548 0 0 122.487 -70.3015 -205.85 + 80 144.204 1513 4 1 122.861 -76.0181 -84.45 + 80 111.817 520 4 0 122.862 -76.017 -85.85 + 80 119.291 1513 3 1 122.869 -75.997 -114.45 + 80 170.665 520 3 0 122.869 -75.9962 -115.85 + 80 92.4312 1513 2 1 122.863 -75.9791 -144.45 + 80 204.4 520 2 0 122.863 -75.9781 -145.85 + 80 124.109 1513 1 1 122.856 -75.9587 -174.45 + 80 138.103 520 1 0 122.856 -75.9572 -175.85 + 80 110.057 1513 0 1 122.839 -75.921 -204.45 + 80 154.054 520 0 0 122.838 -75.9191 -205.85 + 80 119.624 1180 1 1 56.0715 -159.78 -174.85 + 80 157.605 652 2 0 76.2735 -49.5433 -146.25 + 80 157.853 284 0 0 48.2185 -123.15 -206.161 + 80 16.9318 1398 6 1 99.95 -147.692 -24.6111 + 80 126.93 519 5 0 122.851 -76.05 -55.9662 + 80 121.226 1351 0 1 90.55 -29.4998 -204.667 + 80 266.251 1350 0 1 90.35 -29.3544 -204.54 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 9.32089 LIN +Particle: gamma +Event: 81 +Number of tracker hits in this event: 23 + 81 246.678 1003 5 1 20.7719 -58.8857 -54.45 + 81 288.813 605 5 0 20.7721 -58.8857 -55.85 + 81 296.596 1003 4 1 20.7783 -58.8836 -84.45 + 81 217.964 605 4 0 20.7776 -58.8836 -85.85 + 81 259.028 1003 3 1 20.7605 -58.8861 -114.45 + 81 334.736 605 3 0 20.7593 -58.8933 -115.85 + 81 513.759 1003 2 1 20.745 -59.0329 -144.45 + 81 538.491 605 2 0 20.7465 -59.0394 -145.85 + 81 354.822 1003 1 1 20.7813 -59.1751 -174.45 + 81 141.971 604 1 0 20.7828 -59.184 -175.85 + 81 718.095 1003 0 1 20.8049 -59.3617 -204.45 + 81 463.443 603 0 0 20.8016 -59.373 -205.85 + 81 177.917 846 1 0 60.7319 -10.6897 -176.25 + 81 137.959 847 1 0 60.7622 -10.65 -176.173 + 81 123.851 999 1 1 19.8864 -59.3047 -174.45 + 81 127.389 603 1 0 19.849 -59.3445 -175.85 + 81 117.065 995 0 1 19.1565 -60.2285 -204.45 + 81 163.822 598 0 0 19.1125 -60.2514 -205.85 + 81 237.973 605 1 0 20.8007 -58.8711 -175.85 + 81 239.19 605 0 0 20.8401 -58.8536 -205.85 + 81 86.8676 1248 4 0 76.573 69.65 -85.8645 + 81 253.8 1042 8 0 -67.4983 28.5828 33.75 + 81 18.4825 1195 3 1 59.05 37.7961 -114.541 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 3.92886 LIN +Particle: gamma +Event: 82 +Number of tracker hits in this event: 1 + 82 363.174 1276 7 0 116.833 75.2725 3.75 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 6.96273 LIN +Particle: gamma +Event: 83 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 7.05151 LIN +Particle: gamma +Event: 84 +Number of tracker hits in this event: 43 + 84 211.345 772 7 1 -25.5022 8.84969 5.55 + 84 120.283 944 7 0 -25.5052 8.85126 4.15 + 84 391.886 772 6 1 -25.5604 8.88218 -24.45 + 84 141.831 944 6 0 -25.5623 8.88523 -25.85 + 84 387.125 772 5 1 -25.573 8.91624 -54.45 + 84 195.285 944 5 0 -25.5673 8.92249 -55.85 + 84 248.2 772 4 1 -25.4522 9.0948 -84.45 + 84 24.1372 773 4 1 -25.45 9.09604 -84.7622 + 84 281.222 945 4 0 -25.4423 9.09927 -85.85 + 84 183.091 774 3 1 -25.2016 9.21324 -114.45 + 84 318.93 945 3 0 -25.1917 9.22212 -115.85 + 84 172.872 775 2 1 -24.9945 9.4025 -144.45 + 84 142.048 946 2 0 -24.9997 9.40707 -145.85 + 84 156.847 774 1 1 -25.0696 9.52954 -174.45 + 84 108.507 947 1 0 -25.0674 9.53476 -175.85 + 84 108.064 775 0 1 -24.9311 9.58754 -204.45 + 84 103.818 947 0 0 -24.9136 9.58602 -205.85 + 84 209.83 291 7 1 -121.917 38.088 5.15 + 84 94.1029 290 7 1 -121.95 38.0908 5.22287 + 84 7.46825 944 4 0 -25.4876 9.05 -86.0974 + 84 198.824 771 5 1 -25.8371 9.77427 -54.85 + 84 244.695 943 7 0 -25.5017 8.8486 4.15 + 84 165.284 943 6 0 -25.4883 8.83754 -25.85 + 84 113.66 943 5 0 -25.4994 8.82931 -55.85 + 84 108.935 943 4 0 -25.5318 8.76431 -85.85 + 84 246.523 772 3 1 -25.5965 8.64653 -114.45 + 84 137.239 942 3 0 -25.5984 8.63917 -115.85 + 84 133.212 772 2 1 -25.6419 8.48305 -144.45 + 84 221.515 942 2 0 -25.6447 8.47789 -145.85 + 84 145.53 771 1 1 -25.7087 8.37082 -174.45 + 84 138.051 941 1 0 -25.7086 8.36834 -175.85 + 84 240.308 771 0 1 -25.72 8.33384 -204.45 + 84 279.121 941 0 0 -25.7208 8.3339 -205.85 + 84 111.007 69 10 1 -166.16 -94.4136 95.15 + 84 26.2627 70 10 1 -166.15 -94.3723 95.207 + 84 73.2988 986 0 0 -32.4192 17.2898 -206.25 + 84 58.241 987 0 0 -32.4709 17.45 -206.038 + 84 39.5037 738 0 1 -32.286 18.2501 -204.85 + 84 81.283 739 0 1 -32.25 18.3273 -204.705 + 84 232.953 302 5 0 81.6633 -119.707 -56.25 + 84 94.746 301 5 0 81.6861 -119.75 -56.2324 + 84 117.353 773 5 1 -25.4499 8.8464 -54.7616 + 84 8.44798 40 5 0 -90.329 -171.95 -56.2221 +Number of digits in this event: 28 +Using G4ParticleGun... +Particle energy: 7.70676 LIN +Particle: gamma +Event: 85 +Number of tracker hits in this event: 49 + 85 144.024 1174 6 1 54.8502 114.194 -24.45 + 85 75.199 1173 6 1 54.85 114.194 -24.5549 + 85 236.971 1470 6 0 54.8466 114.196 -25.85 + 85 237.984 1173 5 1 54.7714 114.239 -54.45 + 85 468.815 1470 5 0 54.7693 114.239 -55.85 + 85 353.288 1173 4 1 54.7196 114.253 -84.45 + 85 570.847 1470 4 0 54.7171 114.25 -85.85 + 85 123.755 1173 3 1 54.6552 114.186 -114.45 + 85 125.919 1470 3 0 54.6533 114.184 -115.85 + 85 135.563 1172 2 1 54.6067 114.163 -144.45 + 85 165.032 1470 2 0 54.6024 114.161 -145.85 + 85 122.579 1172 1 1 54.5253 114.13 -174.45 + 85 271.735 1469 1 0 54.523 114.127 -175.85 + 85 139.549 1172 0 1 54.4716 114.081 -204.45 + 85 187.755 1469 0 0 54.4724 114.078 -205.85 + 85 175.976 1468 0 0 54.4901 113.937 -206.119 + 85 176.671 1174 4 1 54.85 114.267 -84.7894 + 85 136.185 1212 3 1 62.5126 114.714 -114.45 + 85 15.0645 1213 3 1 62.6502 114.825 -114.813 + 85 177.413 1475 3 0 63.1212 115.152 -115.85 + 85 36.0151 1364 2 1 93.0639 118.79 -144.45 + 85 102.738 1365 2 1 93.15 118.814 -144.567 + 85 10.6192 1366 2 1 93.35 118.867 -144.82 + 85 161.85 1494 2 0 94.1637 119.075 -145.85 + 85 133.92 1491 4 0 111.808 118.5 -86.2499 + 85 41.8883 1492 4 0 112.153 118.55 -85.9602 + 85 78.7034 1467 4 1 113.567 119.013 -84.85 + 85 111.433 1468 4 1 113.751 119.057 -84.6843 + 85 1.91203 1469 4 1 113.95 119.066 -84.4559 + 85 12.9093 1577 5 0 111.425 135.721 -56.25 + 85 116.5 1578 5 0 111.42 135.751 -56.2013 + 85 256.588 1455 5 1 111.25 136.276 -54.85 + 85 125.8 1581 5 0 111.71 136.412 -55.85 + 85 129.176 1174 5 1 54.8854 114.22 -54.45 + 85 119.435 1174 3 1 55.0058 114.149 -114.45 + 85 127.705 1469 3 0 55.0085 114.146 -115.85 + 85 116.196 1175 2 1 55.065 114.087 -144.45 + 85 333.994 1469 2 0 55.0678 114.083 -145.85 + 85 113.233 1175 1 1 55.1292 114 -174.45 + 85 97.754 1175 0 1 55.2354 113.942 -204.45 + 85 32.4381 1172 5 1 54.6499 114.344 -54.7681 + 85 77.6689 1474 5 0 53.3443 115.016 -55.85 + 85 67.1993 1475 5 0 53.234 115.15 -55.9895 + 85 64.0547 1476 5 0 53.1801 115.35 -56.0896 + 85 51.7121 1477 5 0 53.2061 115.55 -56.1072 + 85 76.1062 1478 5 0 53.2726 115.75 -56.1517 + 85 16.9035 1479 5 0 53.4361 115.95 -56.2079 + 85 289.064 1584 5 0 71.8081 136.995 -56.25 + 85 208.978 1583 5 0 71.7699 136.95 -56.1253 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 8.93379 LIN +Particle: gamma +Event: 86 +Number of tracker hits in this event: 1 + 86 73.2377 850 11 0 98.1043 -10.05 123.853 +Number of digits in this event: 1 +Using G4ParticleGun... +Particle energy: 8.93201 LIN +Particle: gamma +Event: 87 +Number of tracker hits in this event: 13 + 87 70.5041 1379 0 0 -121.145 96.052 -206.25 + 87 99.386 1380 0 0 -121.128 96.15 -206.11 + 87 45.7319 289 0 1 -122.174 96.9659 -204.85 + 87 20.6083 1394 0 0 -124.065 99.1289 -205.85 + 87 119.671 1395 0 0 -124.079 99.1509 -205.863 + 87 20.3324 1396 0 0 -124.349 99.35 -205.868 + 87 13.6 265 0 1 -127.118 99.3861 -204.85 + 87 4.48353 1403 0 0 -131.266 100.821 -205.85 + 87 228.577 234 0 1 -133.197 100.767 -204.85 + 87 69.0899 233 0 1 -133.35 100.824 -204.639 + 87 197.043 1370 4 0 36.4738 94.1863 -86.25 + 87 103.549 1331 8 1 86.3697 -50.3832 35.15 + 87 333.284 1511 8 1 122.494 12.2281 35.15 +Number of digits in this event: 5 +Using G4ParticleGun... +Particle energy: 3.3326 LIN +Particle: gamma +Event: 88 +Number of tracker hits in this event: 1 + 88 172.777 681 7 1 -43.6851 -97.5373 5.15 +Number of digits in this event: 4 +Using G4ParticleGun... +Particle energy: 1.83117 LIN +Particle: gamma +Event: 89 +Number of tracker hits in this event: 25 + 89 83.5256 1208 1 0 26.2122 61.7516 -176.25 + 89 74.7902 1209 1 0 26.084 61.85 -175.961 + 89 182.302 1027 1 1 25.5585 62.7333 -174.85 + 89 91.4611 1026 1 1 25.45 62.9977 -174.578 + 89 22.4325 1028 1 1 25.65 63.2368 -174.783 + 89 43.8847 1216 1 0 26.4586 63.3896 -175.85 + 89 89.5627 1217 1 0 26.5391 63.45 -175.942 + 89 77.8561 1218 1 0 26.6248 63.65 -176.16 + 89 38.4698 1219 1 0 26.7388 63.85 -176.223 + 89 51.7267 1494 0 0 57.6704 119.051 -205.85 + 89 147.535 1493 0 0 57.7961 118.95 -206.04 + 89 242.526 1193 1 1 58.7908 150.924 -174.85 + 89 31.7139 1032 0 0 89.3582 26.6301 -206.25 + 89 110.627 1346 0 1 89.2726 25.8994 -204.85 + 89 27.2488 989 1 0 60.5628 17.8781 -176.25 + 89 197.496 988 1 0 60.4815 17.85 -176.18 + 89 45.8776 1195 1 1 59.0687 17.522 -174.85 + 89 61.7756 1194 1 1 59.0499 17.5158 -174.829 + 89 54.9818 1192 1 1 58.65 17.5237 -174.592 + 89 374.921 1191 1 1 58.45 17.5278 -174.522 + 89 13.7464 1190 1 1 58.2216 17.4606 -174.45 + 89 28.9535 977 1 0 58.1384 15.5168 -175.85 + 89 91.5851 976 1 0 58.1187 15.45 -175.908 + 89 137.98 975 1 0 58.0621 15.2496 -176.016 + 89 90.7897 1055 1 0 14.0023 31.1377 -176.25 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 5.6538 LIN +Particle: gamma +Event: 90 +Number of tracker hits in this event: 20 + 90 355.017 1202 1 1 60.4631 54.3505 -174.45 + 90 271.151 1171 1 0 60.4658 54.3504 -175.85 + 90 279.185 1202 0 1 60.548 54.3492 -204.45 + 90 330.895 1171 0 0 60.539 54.3396 -205.85 + 90 81.6416 1297 9 0 11.7728 79.5932 63.7501 + 90 42.5087 1298 9 0 11.5405 79.65 63.8192 + 90 297.917 1287 9 0 -20.6223 77.6021 63.7502 + 90 96.0435 611 9 0 154.429 -57.7064 63.75 + 90 47.7166 838 4 1 -12.2514 -43.6285 -84.85 + 90 25.2927 150 8 0 103.914 -150.091 33.75 + 90 57.4955 149 8 0 103.901 -150.15 33.7693 + 90 127.694 148 8 0 103.853 -150.35 33.816 + 90 99.6404 147 8 0 103.561 -150.55 33.7897 + 90 233.8 146 8 0 103.647 -150.75 33.8533 + 90 202.319 145 8 0 104.068 -150.95 33.9672 + 90 14.735 1249 4 1 70.014 17.2244 -84.85 + 90 140.473 1189 13 1 57.85 -9.76119 185.482 + 90 36.3485 1207 0 0 45.1666 61.65 -206.134 + 90 96.0381 264 3 0 153.719 -127.15 -116.031 + 90 91.8208 1688 3 1 157.826 -126.279 -114.85 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 8.44894 LIN +Particle: gamma +Event: 91 +Number of tracker hits in this event: 8 + 91 317.091 859 2 1 -8.09523 94.1584 -144.45 + 91 332.711 1370 2 0 -8.09502 94.1584 -145.85 + 91 171.598 859 1 1 -8.08803 94.1622 -174.45 + 91 282.141 1370 1 0 -8.08875 94.1618 -175.85 + 91 382.72 859 0 1 -8.10412 94.1564 -204.45 + 91 319 1370 0 0 -8.10413 94.1552 -205.85 + 91 150.13 860 1 1 -7.92463 94.1882 -174.45 + 91 139.307 1546 10 1 129.488 0.587333 95.55 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 9.19721 LIN Particle: gamma Event: 92 Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 5.31017 LIN +Particle energy: 5.25414 LIN Particle: gamma Event: 93 -Number of tracker hits in this event: 86 - 93 270.973 1206 8 1 61.3649 -55.4769 35.55 - 93 295.666 622 8 0 61.3653 -55.477 34.15 - 93 292.436 1206 7 1 61.3683 -55.4755 5.55 - 93 229.739 622 7 0 61.3704 -55.4742 4.15 - 93 275.249 1206 6 1 61.4117 -55.4332 -24.45 - 93 183.403 623 6 0 61.4161 -55.4297 -25.85 - 93 137.427 1207 5 1 61.5227 -55.3514 -54.45 - 93 120.961 623 5 0 61.5298 -55.3421 -55.85 - 93 136.217 1208 4 1 61.6572 -55.1832 -84.45 - 93 101.161 624 4 0 61.6488 -55.1795 -85.85 - 93 126.935 1207 3 1 61.4548 -55.1334 -114.45 - 93 135.979 624 3 0 61.4481 -55.1371 -115.85 - 93 111.919 1206 2 1 61.355 -55.1909 -144.45 - 93 167.73 624 2 0 61.3406 -55.1882 -145.85 - 93 110.367 1205 1 1 61.0744 -55.0875 -174.45 - 93 270.064 624 1 0 61.0731 -55.0735 -175.85 - 93 115.33 1205 0 1 61.0696 -54.8124 -204.45 - 93 146.948 626 0 0 61.0671 -54.7974 -205.85 - 93 109.326 1207 7 1 61.45 -55.5494 5.24033 - 93 194.081 633 7 0 60.7902 -53.356 4.14998 - 93 113.716 621 6 0 61.2993 -55.6729 -25.85 - 93 130.826 1205 5 1 61.2414 -55.7341 -54.45 - 93 129.022 621 5 0 61.2365 -55.7386 -55.85 - 93 144.025 1205 4 1 61.1444 -55.8158 -84.45 - 93 180.722 621 4 0 61.1376 -55.8159 -85.85 - 93 139.757 1204 3 1 60.9636 -55.8014 -114.45 - 93 118.363 621 3 0 60.9549 -55.8029 -115.85 - 93 175.763 1203 2 1 60.7835 -55.8409 -144.45 - 93 146.199 621 2 0 60.7775 -55.843 -145.85 - 93 147.983 1203 1 1 60.679 -55.891 -174.45 - 93 116.577 620 1 0 60.6775 -55.8959 -175.85 - 93 117.051 1203 0 1 60.6513 -55.9905 -204.45 - 93 100.711 620 0 0 60.6504 -55.9965 -205.85 - 93 22.1738 856 0 0 58.2297 -8.85 -205.921 - 93 4.11728 1189 0 1 57.856 -8.26769 -204.85 - 93 179.298 1188 0 1 57.85 -8.25936 -204.837 - 93 279.14 1021 10 0 90.05 24.3852 93.7789 - 93 127.646 1005 0 1 21.25 -43.5091 -204.71 - 93 165.339 997 0 1 19.65 -54.4633 -204.825 - 93 128.938 998 0 1 19.65 -54.1575 -204.707 - 93 105.476 518 1 0 68.2866 -76.422 -176.25 - 93 11.7129 517 1 0 68.262 -76.45 -176.181 - 93 311.51 1206 3 1 61.3293 -55.5544 -114.451 - 93 242.081 622 3 0 61.2862 -55.5885 -115.85 - 93 136.555 1202 2 1 60.6207 -56.1593 -144.45 - 93 125.236 619 2 0 60.5624 -56.1103 -145.85 - 93 122.973 1196 1 1 59.2719 -55.1988 -174.45 - 93 140.621 1195 0 1 59.1976 -54.6978 -204.451 - 93 129.039 627 0 0 59.2134 -54.64 -205.85 - 93 142.203 1209 2 1 62.0023 -55.4707 -144.45 - 93 158.028 623 2 0 62.0309 -55.3576 -145.85 - 93 113.98 1210 1 1 62.2496 -52.8933 -174.45 - 93 104.895 635 1 0 62.1289 -52.9264 -175.851 - 93 117.96 1197 0 1 59.6278 -53.2225 -204.45 - 93 253.723 634 0 0 59.491 -53.2185 -205.85 - 93 18.5858 618 3 0 61.3719 -56.4181 -115.85 - 93 208.401 617 3 0 61.3734 -56.45 -115.866 - 93 246.129 1206 4 1 61.3284 -55.9879 -84.45 - 93 133.737 620 4 0 61.2695 -55.9731 -85.85 - 93 123.544 1195 3 1 59.2102 -55.2295 -114.45 - 93 51.7297 1196 3 1 59.2501 -55.1337 -114.692 - 93 52.9981 626 3 0 59.4468 -54.7068 -115.85 - 93 61.4087 627 3 0 59.4767 -54.65 -116.032 - 93 61.3888 1229 2 1 65.9404 -45.7186 -144.45 - 93 64.4078 1230 2 1 66.05 -45.6656 -144.638 - 93 112.698 673 2 0 66.7894 -45.3607 -145.85 - 93 86.0673 619 4 0 61.1879 -56.05 -85.9141 - 93 146.632 1194 3 1 58.892 -57.4226 -114.45 - 93 104.769 612 3 0 59.1085 -57.5524 -115.85 - 93 171.939 1217 2 1 63.5777 -60.1176 -144.45 - 93 55.8934 1218 2 1 63.65 -60.0782 -144.671 - 93 202.497 601 2 0 64.0791 -59.83 -145.851 - 93 15.522 1269 1 1 74.019 -54.2642 -174.45 - 93 120.188 1270 1 1 74.0501 -54.242 -174.503 - 93 324.889 1271 1 1 74.25 -54.1031 -174.832 - 93 66.1897 631 1 0 74.8569 -53.7094 -175.85 - 93 97.3785 632 1 0 74.9464 -53.65 -175.996 - 93 31.6267 1364 0 1 93.096 -40.9533 -204.45 - 93 72.731 1365 0 1 93.1502 -40.9289 -204.51 - 93 36.5519 1366 0 1 93.3503 -40.8401 -204.731 - 93 205.1 698 0 0 94.3137 -40.4049 -205.85 - 93 163.645 1193 3 1 58.85 -57.4105 -114.509 - 93 10.304 1192 3 1 58.6492 -57.3149 -114.825 - 93 80.4949 613 3 0 58.0639 -57.3492 -115.85 - 93 226.776 614 3 0 58.0353 -57.25 -115.96 - 93 117.724 615 3 0 58.1424 -57.05 -115.931 -Number of digits in this event: 53 +Number of tracker hits in this event: 59 + 93 253.02 792 5 1 -21.4956 -4.59007 -54.45 + 93 299.29 877 5 0 -21.4958 -4.58821 -55.85 + 93 286.911 792 4 1 -21.5182 -4.53801 -84.45 + 93 128.758 879 4 0 -21.8523 -4.18689 -85.85 + 93 107.264 755 3 1 -28.8555 2.62042 -114.45 + 93 79.2962 915 3 0 -29.2619 3.15883 -115.85 + 93 53.5755 916 3 0 -29.3226 3.25 -116.075 + 93 2.42514 722 2 1 -35.6495 15.755 -144.45 + 93 126.507 721 2 1 -35.65 15.7569 -144.459 + 93 186.832 980 2 0 -35.7324 16.082 -145.85 + 93 136.184 713 1 1 -37.3885 22.8009 -174.45 + 93 115.895 1013 1 0 -37.3196 22.7131 -175.85 + 93 105.738 714 0 1 -37.1571 21.1831 -204.45 + 93 141.272 1004 0 0 -37.286 20.9523 -205.85 + 93 271.795 877 4 0 -21.4791 -4.57455 -85.9861 + 93 319.31 794 3 1 -21.1533 -4.84397 -114.45 + 93 240.018 875 3 0 -21.1433 -4.85337 -115.85 + 93 202.546 795 2 1 -20.9774 -5.05869 -144.45 + 93 95.8846 874 2 0 -20.9678 -5.05483 -145.85 + 93 224.129 796 1 1 -20.7918 -4.9803 -174.45 + 93 110.839 875 1 0 -20.79 -4.97963 -175.85 + 93 120.909 796 0 1 -20.7624 -4.97706 -204.45 + 93 134.967 875 0 0 -20.7703 -4.98043 -205.85 + 93 297.86 795 1 1 -20.8505 -4.9191 -174.47 + 93 176.546 794 1 1 -21.0503 -4.9386 -174.502 + 93 60.4407 880 1 0 -21.6447 -3.95413 -175.85 + 93 87.8648 881 1 0 -21.6844 -3.84981 -176.009 + 93 18.7698 1534 1 0 -49.0878 127.086 -176.25 + 93 94.3231 1535 1 0 -49.1109 127.15 -176.234 + 93 153.107 1536 1 0 -49.2467 127.35 -176.098 + 93 21.679 1537 1 0 -49.2332 127.55 -175.875 + 93 116.635 655 1 1 -49.0347 128.643 -174.85 + 93 45.729 1552 1 0 -48.5977 130.656 -175.85 + 93 206.09 1553 1 0 -48.5634 130.75 -175.931 + 93 62.8066 664 1 1 -47.2032 130.129 -174.85 + 93 156.869 876 3 0 -21.1033 -4.77518 -115.85 + 93 143.866 787 2 1 -22.548 -5.55946 -144.45 + 93 72.5922 871 2 0 -22.7797 -5.81153 -145.85 + 93 111.3 870 2 0 -22.8144 -5.85 -146.061 + 93 135.209 764 1 1 -27.1565 -11.2037 -174.45 + 93 110.767 844 1 0 -27.4579 -11.1902 -175.851 + 93 93.7384 731 0 1 -33.7733 -10.7555 -204.45 + 93 56.3209 730 0 1 -33.8501 -10.7257 -204.77 + 93 138.402 847 0 0 -34.1041 -10.6324 -205.85 + 93 3.47525 263 0 0 -61.6154 -127.35 -206.081 + 93 167.439 793 3 1 -21.3004 -4.91226 -114.45 + 93 105.016 780 2 1 -23.9025 -6.60177 -144.45 + 93 21.6398 779 2 1 -24.05 -6.59973 -144.798 + 93 113.19 867 2 0 -24.4961 -6.59286 -145.85 + 93 105.801 718 1 1 -36.4008 -5.8703 -174.45 + 93 186.943 717 1 1 -36.45 -5.8607 -174.588 + 93 113.893 871 1 0 -36.8932 -5.75853 -175.85 + 93 102.724 664 0 1 -47.1079 -3.66846 -204.45 + 93 21.7215 663 0 1 -47.25 -3.61265 -204.79 + 93 17.9359 882 0 0 -47.7325 -3.45996 -205.85 + 93 101.871 883 0 0 -47.7629 -3.45 -205.918 + 93 241.333 797 0 1 -20.5301 -5.73622 -204.484 + 93 284.465 871 0 0 -20.5181 -5.74912 -205.85 + 93 38.1982 110 7 0 -75.8513 -158.04 3.75 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 8.90944 LIN +Particle energy: 6.09573 LIN Particle: gamma Event: 94 -Number of tracker hits in this event: 118 - 94 225.488 1105 9 1 41.0771 112.602 65.55 - 94 238.841 1462 9 0 41.0767 112.604 64.15 - 94 303.524 1105 8 1 41.0787 112.618 35.55 - 94 295.275 1462 8 0 41.0826 112.623 34.15 - 94 305.882 1105 7 1 41.1226 112.735 5.55 - 94 389.294 1462 7 0 41.1199 112.736 4.15 - 94 236.363 1105 6 1 41.0805 112.788 -24.45 - 94 234.562 1463 6 0 41.0709 112.794 -25.85 - 94 116.275 1104 5 1 40.9047 112.927 -54.45 - 94 235.117 1463 5 0 40.8971 112.931 -55.85 - 94 384.049 1103 4 1 40.7763 113.014 -84.45 - 94 378.194 1464 4 0 40.7687 113.01 -85.85 - 94 242.127 1103 3 1 40.67 112.919 -114.45 - 94 162.739 1463 3 0 40.6751 112.917 -115.85 - 94 217.715 1103 2 1 40.7487 112.873 -144.45 - 94 385.239 1463 2 0 40.7514 112.876 -145.85 - 94 454.902 1104 1 1 40.8549 112.963 -174.45 - 94 156.048 1464 1 0 40.8521 112.969 -175.85 - 94 358.922 1103 0 1 40.761 113.142 -204.45 - 94 114.214 1464 0 0 40.7614 113.137 -205.85 - 94 51.6185 1102 3 1 40.6041 113.234 -114.45 - 94 604.824 1104 3 1 40.85 113.61 -114.805 - 94 463.661 1472 3 0 41.5374 114.575 -115.85 - 94 383.925 1473 3 0 41.6626 114.75 -116.037 - 94 11.5885 1474 3 0 41.7713 114.95 -116.224 - 94 30.2765 1768 3 0 54.8115 173.885 -116.25 - 94 160.255 1769 3 0 54.7948 173.95 -116.171 - 94 49.4211 1770 3 0 54.678 174.15 -115.937 - 94 70.2298 1169 3 1 53.9487 175.33 -114.85 - 94 119.654 1168 3 1 53.8497 175.497 -114.697 - 94 106.195 1167 3 1 53.65 175.784 -114.535 - 94 27.204 1166 3 1 53.45 176.027 -114.474 - 94 44.0376 1165 3 1 53.1624 176.178 -114.45 - 94 147.714 1164 3 1 53.05 176.22 -114.573 - 94 28.5263 1163 3 1 52.8499 176.313 -114.783 - 94 114.833 1785 3 0 51.5848 177.18 -115.85 - 94 21.0527 1786 3 0 51.3286 177.35 -116.174 - 94 29.2511 1456 3 0 -10.0304 111.481 -116.25 - 94 42.816 1416 4 0 45.1655 103.413 -86.25 - 94 69.5881 1464 5 0 40.8106 112.95 -56.17 - 94 18.9426 1463 7 0 40.987 112.75 3.79459 - 94 408.217 1105 5 1 41.1027 112.717 -54.45 - 94 346.26 1462 5 0 41.089 112.728 -55.85 - 94 293.4 1453 3 0 40.8694 110.802 -115.85 - 94 102.853 1089 2 1 37.9329 109.933 -144.45 - 94 206.472 1447 2 0 37.9608 109.601 -145.85 - 94 51.9885 1446 2 0 37.9666 109.55 -146.068 - 94 128.583 1093 1 1 38.757 103.718 -174.45 - 94 96.8927 1416 1 0 38.9234 103.419 -175.85 - 94 38.1808 1415 1 0 38.9604 103.35 -176.179 - 94 114.879 1112 0 1 42.4872 97.5677 -204.45 - 94 74.1825 1385 0 0 42.4464 97.2149 -205.85 - 94 37.979 1384 0 0 42.4401 97.15 -206.107 - 94 207.303 1064 0 1 33.0143 107.973 -204.45 - 94 133.203 1102 4 1 40.6196 113.001 -84.45 - 94 95.6778 1113 3 1 42.7059 112.386 -114.45 - 94 119.641 1460 3 0 42.6527 112.254 -115.85 - 94 105.255 1106 2 1 41.4324 109.814 -144.45 - 94 106.171 1096 1 1 39.3308 106.177 -174.45 - 94 26.9725 1429 1 0 39.1437 105.963 -175.85 - 94 90.7242 1428 1 0 39.1325 105.95 -175.933 - 94 172.218 1073 0 1 34.7663 101.495 -204.45 - 94 152.228 1405 0 0 34.463 101.242 -205.85 - 94 36.2146 1624 8 0 65.8071 145.094 33.75 - 94 106.633 1625 8 0 65.8411 145.15 33.8244 - 94 28.116 1626 8 0 65.9674 145.35 34.0876 - 94 7.08381 1234 8 1 67.026 146.343 35.15 - 94 128.382 1235 8 1 67.0502 146.368 35.1772 - 94 65.6235 1236 8 1 67.25 146.57 35.4739 - 94 78.3624 1237 8 1 67.5154 146.761 35.55 - 94 408.689 1238 8 1 67.65 146.69 35.5033 - 94 134.571 1462 6 0 41.0855 112.6 -25.85 - 94 696.996 1105 4 1 41.0792 112.573 -84.45 - 94 565.965 1462 4 0 41.0777 112.575 -85.85 - 94 686.709 1462 3 0 41.0405 112.632 -115.85 - 94 257.871 1104 2 1 40.9711 112.721 -144.45 - 94 87.5055 1462 2 0 40.9736 112.746 -145.85 - 94 213.448 1465 1 0 41.033 113.283 -175.85 - 94 415.413 1104 0 1 41.0113 113.764 -204.45 - 94 304.574 1468 0 0 41.0115 113.789 -205.85 - 94 208.087 1115 0 1 43.1561 118.378 -204.85 - 94 61.9938 863 0 0 -72.4541 -7.33642 -206.25 - 94 177.68 864 0 0 -72.3998 -7.25 -206.208 - 94 275.393 896 3 0 127.952 -0.691493 -116.25 - 94 102.809 1105 1 1 41.05 113.245 -174.748 - 94 205.565 1104 4 1 41.05 112.583 -84.6633 - 94 331.887 1105 3 1 41.0698 112.575 -114.45 - 94 104.826 1105 2 1 41.2265 112.33 -144.45 - 94 129.814 1460 2 0 41.2315 112.312 -145.85 - 94 102.732 1106 1 1 41.3748 111.9 -174.45 - 94 127.4 1458 1 0 41.3836 111.886 -175.85 - 94 112.33 1107 0 1 41.5825 111.617 -204.45 - 94 102.689 1457 0 0 41.5918 111.593 -205.85 - 94 132.577 1109 2 1 41.8672 112.828 -144.45 - 94 57.3168 1120 1 1 44.242 112.115 -174.45 - 94 63.0199 1121 1 1 44.25 112.11 -174.648 - 94 100.801 1459 1 0 44.3064 112.087 -175.85 - 94 123.298 1127 0 1 45.588 111.522 -204.45 - 94 129.025 1456 0 0 45.6925 111.489 -205.85 - 94 2.67699 1702 0 1 160.55 125.887 -204.849 - 94 20.8276 1529 0 0 161.194 126.147 -205.85 - 94 100.394 1530 0 0 161.215 126.15 -205.868 - 94 13.9682 1706 0 1 161.512 126.424 -204.85 - 94 222.559 1466 0 0 40.8686 113.505 -205.85 - 94 28.6125 1684 3 0 14.7926 157.028 -116.25 - 94 52.4393 1119 3 1 43.9969 110.791 -114.45 - 94 49.8162 1120 3 1 44.05 110.791 -114.652 - 94 1.41816 1165 2 1 53.2472 112.2 -144.45 - 94 158.609 1166 2 1 53.25 112.201 -144.459 - 94 117.446 1461 2 0 53.705 112.424 -145.85 - 94 4.94287 1211 1 1 62.4359 116.123 -174.45 - 94 140.88 1212 1 1 62.45 116.129 -174.478 - 94 82.9948 1481 1 0 63.0941 116.506 -175.85 - 94 74.4215 1482 1 0 63.1753 116.55 -176.022 - 94 25.4586 1283 0 1 76.8135 123.606 -204.45 - 94 128.888 1284 0 1 76.85 123.631 -204.53 - 94 109.499 1519 0 0 77.4199 124.064 -205.85 - 94 38.6051 1520 0 0 77.5225 124.15 -206.109 -Number of digits in this event: 58 -Using G4ParticleGun... -Particle energy: 4.48049 LIN -Particle: gamma -Event: 95 Number of tracker hits in this event: 1 - 95 220.769 145 3 0 -67.7283 -150.953 -116.25 + 94 247.278 484 1 1 -83.0508 83.0009 -174.85 Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 2.26806 LIN +Particle energy: 2.12344 LIN +Particle: gamma +Event: 95 +Number of tracker hits in this event: 84 + 95 265.445 772 8 1 -25.4756 -122.433 35.55 + 95 321.096 288 8 0 -25.4743 -122.432 34.15 + 95 127.317 773 7 1 -25.4456 -122.421 5.55 + 95 128.932 288 7 0 -25.4549 -122.417 4.15 + 95 156.949 772 6 1 -25.5918 -122.254 -24.45 + 95 376.619 289 6 0 -25.6088 -122.264 -25.85 + 95 136.33 770 5 1 -25.9791 -122.344 -54.45 + 95 323.219 289 5 0 -26.0042 -122.344 -55.85 + 95 123.025 767 4 1 -26.5065 -122.358 -84.45 + 95 126.712 288 4 0 -26.5916 -122.353 -85.85 + 95 94.698 758 3 1 -28.2952 -122.426 -114.45 + 95 246.313 288 3 0 -28.387 -122.453 -115.85 + 95 143.639 748 2 1 -30.3152 -123.008 -144.45 + 95 126.611 285 2 0 -30.3872 -123.032 -145.85 + 95 116.37 740 1 1 -31.9229 -123.655 -174.45 + 95 252.845 282 1 0 -31.9798 -123.7 -175.85 + 95 85.3347 734 0 1 -33.2317 -124.443 -204.45 + 95 229.344 733 0 1 -33.25 -124.454 -204.776 + 95 180.504 278 0 0 -33.3076 -124.488 -205.85 + 95 59.483 283 2 0 24.5418 -123.55 -146.199 + 95 56.6886 1775 6 1 175.279 -27.2678 -24.45 + 95 93.2079 958 1 0 -78.4324 11.7495 -176.25 + 95 115.834 959 1 0 -78.4151 11.8502 -176.093 + 95 75.8746 509 1 1 -78.1413 12.6174 -174.85 + 95 131.941 510 1 1 -78.05 12.7491 -174.662 + 95 7.72736 511 1 1 -77.8498 12.9276 -174.467 + 95 151.789 512 1 1 -77.5909 13.2114 -174.45 + 95 1.98487 956 1 0 -76.0921 11.2542 -175.85 + 95 94.1858 955 1 0 -76.0885 11.25 -175.853 + 95 55.4435 954 1 0 -75.991 11.05 -175.979 + 95 109.464 953 1 0 -75.9377 10.85 -176.034 + 95 207.498 952 1 0 -75.8204 10.65 -176.013 + 95 54.6097 532 1 1 -73.5133 12.7313 -174.85 + 95 159.474 533 1 1 -73.45 12.7989 -174.792 + 95 0.552177 534 1 1 -73.25 13.0937 -174.451 + 95 287.451 773 6 1 -25.4022 -122.411 -24.45 + 95 101.42 288 6 0 -25.4135 -122.426 -25.85 + 95 120.622 772 5 1 -25.5537 -122.781 -54.45 + 95 130.874 286 5 0 -25.5598 -122.797 -55.85 + 95 171.524 772 4 1 -25.6247 -123.134 -84.45 + 95 142.243 285 4 0 -25.6266 -123.136 -85.85 + 95 134.634 771 3 1 -25.6928 -123.137 -114.45 + 95 115.381 285 3 0 -25.6918 -123.141 -115.85 + 95 131.113 772 2 1 -25.6239 -123.258 -144.45 + 95 236.71 284 2 0 -25.6152 -123.288 -145.85 + 95 104.254 773 1 1 -25.4014 -124.073 -174.45 + 95 120.93 280 1 0 -25.3963 -124.106 -175.85 + 95 139.668 773 0 1 -25.2718 -124.806 -204.45 + 95 167.413 276 0 0 -25.2871 -124.865 -205.85 + 95 129.142 764 5 1 -27.1544 -120.471 -54.45 + 95 114.476 298 5 0 -27.2995 -120.388 -55.85 + 95 161.226 749 4 1 -30.0841 -118.813 -84.45 + 95 192.678 307 4 0 -30.2467 -118.724 -85.85 + 95 79.382 732 3 1 -33.624 -116.965 -114.45 + 95 44.061 731 3 1 -33.65 -116.926 -114.716 + 95 125.588 317 3 0 -33.764 -116.743 -115.85 + 95 119.777 715 2 1 -36.8915 -111.841 -144.45 + 95 118.942 340 2 0 -37.227 -112.088 -145.85 + 95 12.6726 339 2 0 -37.314 -112.15 -146.21 + 95 14.484 679 1 1 -44.2221 -116.711 -174.451 + 95 91.5626 678 1 1 -44.25 -116.717 -174.532 + 95 152.724 316 1 0 -44.706 -116.82 -175.85 + 95 3.46671 627 0 1 -54.6397 -118.699 -204.45 + 95 195.236 626 0 1 -54.65 -118.699 -204.462 + 95 235.696 625 0 1 -54.8501 -118.705 -204.705 + 95 258.657 307 0 0 -55.8954 -118.678 -205.851 + 95 44.1218 344 0 0 -35.0857 -111.173 -206.25 + 95 17.036 716 2 1 -36.7146 -111.83 -144.45 + 95 98.2849 717 2 1 -36.6498 -111.835 -144.453 + 95 78.4215 718 2 1 -36.45 -111.863 -144.509 + 95 109.68 772 7 1 -25.5733 -122.354 5.55 + 95 156.858 289 7 0 -25.5915 -122.349 4.15 + 95 195.403 770 6 1 -25.9348 -122.299 -24.45 + 95 134.846 769 5 1 -26.0938 -122.289 -54.45 + 95 113.794 768 4 1 -26.2803 -122.321 -84.45 + 95 121.424 289 4 0 -26.2865 -122.33 -85.85 + 95 118.141 768 3 1 -26.2644 -122.477 -114.45 + 95 112.899 768 2 1 -26.4088 -123.18 -144.45 + 95 121.781 769 1 1 -26.1531 -123.574 -174.45 + 95 140.67 772 0 1 -25.5116 -124.035 -204.45 + 95 103.883 280 0 0 -25.4668 -124.047 -205.85 + 95 225.633 761 0 1 -27.731 -122.624 -204.45 + 95 237.687 287 0 0 -27.7456 -122.703 -205.85 + 95 11.3911 288 5 0 -26.1606 -122.405 -55.85 +Number of digits in this event: 50 +Using G4ParticleGun... +Particle energy: 1.6472 LIN Particle: gamma Event: 96 -Number of tracker hits in this event: 5 - 96 9.06682 704 0 0 -129.87 -39.05 -205.962 - 96 26.5568 705 0 0 -129.849 -39.05 -205.901 - 96 248.004 253 0 1 -129.403 -38.3896 -204.85 - 96 191.575 252 0 1 -129.55 -38.4126 -204.687 - 96 9.85741 14 0 1 -177.35 -117.992 -204.837 -Number of digits in this event: 4 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 3.04704 LIN +Particle energy: 3.83831 LIN Particle: gamma Event: 97 -Number of tracker hits in this event: 127 - 97 273.163 630 9 1 -53.9527 -47.4857 65.55 - 97 239.016 662 9 0 -53.9485 -47.4819 64.15 - 97 385.893 630 8 1 -53.8631 -47.3979 35.55 - 97 96.7633 663 8 0 -53.8586 -47.3985 34.15 - 97 308.845 630 7 1 -53.8629 -47.4033 5.55 - 97 169.832 663 7 0 -53.9042 -47.402 4.15 - 97 166.345 626 6 1 -54.7815 -47.4376 -24.45 - 97 124.021 663 6 0 -54.8134 -47.4463 -25.85 - 97 94.83 622 5 1 -55.6183 -47.6502 -54.45 - 97 117.871 662 5 0 -55.6396 -47.6382 -55.85 - 97 162.117 619 4 1 -56.1979 -47.338 -84.45 - 97 133.401 663 4 0 -56.2269 -47.304 -85.85 - 97 6.23502 616 3 1 -56.8496 -46.4891 -114.45 - 97 114.499 615 3 1 -56.85 -46.4886 -114.466 - 97 122.861 668 3 0 -56.8878 -46.4414 -115.85 - 97 79.4781 612 2 1 -57.6467 -45.4428 -144.45 - 97 41.8542 611 2 1 -57.65 -45.4385 -144.683 - 97 114.302 673 2 0 -57.6667 -45.4167 -145.85 - 97 154.4 610 1 1 -58.007 -44.9392 -174.45 - 97 88.6252 675 1 0 -58.0378 -44.8659 -175.85 - 97 34.8991 676 1 0 -58.0446 -44.85 -176.156 - 97 118.758 606 0 1 -58.7491 -43.5709 -204.45 - 97 119.559 682 0 0 -58.7582 -43.5127 -205.85 - 97 56.6725 631 4 1 -53.8224 -47.5411 -84.45 - 97 238.55 630 4 1 -53.85 -47.5928 -84.6265 - 97 92.3103 660 4 0 -54.2448 -47.9736 -85.85 - 97 41.9004 659 4 0 -54.3151 -48.0501 -86.0848 - 97 133.741 587 3 1 -62.5783 -59.0014 -114.45 - 97 180.994 603 3 0 -63.4949 -59.2702 -115.85 - 97 77.2421 649 3 0 -93.594 -50.1687 -116.249 - 97 203.273 650 3 0 -93.6983 -50.05 -116.206 - 97 172.76 586 3 1 -62.7216 -58.9179 -114.45 - 97 101.995 585 3 1 -62.85 -58.9405 -114.553 - 97 493.219 634 2 1 -53.2126 -47.3854 -144.45 - 97 128.202 661 2 0 -52.9297 -47.7175 -145.85 - 97 54.6816 598 2 0 -42.1975 -60.4277 -146.25 - 97 50.1201 597 2 0 -42.236 -60.45 -146.047 - 97 92.4252 687 2 1 -42.4873 -60.3756 -144.85 - 97 342.773 663 2 0 -53.1969 -47.3816 -145.85 - 97 158.151 636 1 1 -52.7535 -47.338 -174.45 - 97 129.125 663 1 0 -52.7428 -47.3578 -175.85 - 97 337.098 638 0 1 -52.2989 -47.7483 -204.45 - 97 115.505 661 0 0 -52.3035 -47.7202 -205.85 - 97 401.842 635 1 1 -52.9835 -47.3862 -174.45 - 97 453.277 634 1 1 -53.05 -47.4445 -174.501 - 97 10.7074 598 1 0 -48.0536 -60.4271 -175.85 - 97 106.817 597 1 0 -48.0402 -60.4502 -175.853 - 97 216.391 596 1 0 -48.1036 -60.6501 -175.959 - 97 1.25424 633 3 1 -53.2593 -46.9116 -114.842 - 97 233.492 665 3 0 -53.2579 -46.921 -115.85 - 97 55.3057 633 2 1 -53.25 -47.2833 -144.6 - 97 118.364 661 1 0 -53.0536 -47.6936 -175.85 - 97 170.484 641 0 1 -51.8406 -47.0633 -204.45 - 97 193.82 664 0 0 -51.8015 -47.0699 -205.85 - 97 226.919 665 0 0 -51.7996 -47.05 -206.032 - 97 56.5129 633 1 1 -53.25 -47.6041 -174.654 - 97 96.3223 632 1 1 -53.45 -47.5739 -174.682 - 97 20.3337 631 1 1 -53.65 -47.3415 -174.799 - 97 452.997 667 1 0 -55.0811 -46.5956 -175.85 - 97 117.638 666 2 0 -53.1197 -46.7721 -145.85 - 97 174.308 669 0 0 -52.3949 -46.0785 -205.85 - 97 78.8543 666 1 0 -53.1491 -46.8205 -175.85 - 97 76.8483 665 1 0 -53.1943 -46.85 -176.045 - 97 134.521 596 0 1 -60.686 -49.1908 -204.45 - 97 77.3944 595 0 1 -60.8503 -49.1894 -204.599 - 97 36.6676 594 0 1 -61.05 -49.1877 -204.777 - 97 152.273 654 0 0 -62.2879 -49.1471 -205.85 - 97 116.281 696 0 0 -72.0237 -40.7836 -206.25 - 97 22.4141 697 0 0 -71.9301 -40.6499 -205.914 - 97 83.8923 538 0 1 -72.3804 -39.7181 -204.85 - 97 37.664 537 0 1 -72.45 -39.6215 -204.587 - 97 164.414 622 0 1 -55.4742 -45.5438 -204.45 - 97 116.856 672 0 0 -55.9541 -45.5441 -205.85 - 97 166.775 634 10 0 -38.5249 -53.2177 93.75 - 97 185.542 633 10 0 -38.5441 -53.25 93.9056 - 97 128.181 662 8 0 -54.0098 -47.5815 34.15 - 97 128.144 661 7 0 -54.0193 -47.7781 4.15 - 97 110.105 629 6 1 -54.0638 -47.7902 -24.45 - 97 116.656 661 6 0 -54.0693 -47.7937 -25.85 - 97 165.065 629 5 1 -54.1652 -48.0196 -54.45 - 97 99.5151 658 5 0 -54.1901 -48.2607 -55.85 - 97 84.1392 627 4 1 -54.4658 -53.1688 -84.4501 - 97 42.7782 628 4 1 -54.45 -53.1913 -84.6902 - 97 91.7464 633 4 0 -54.4198 -53.3736 -85.8502 - 97 126.159 635 3 1 -53.0257 -58.0212 -114.45 - 97 138.318 610 3 0 -52.6938 -58.0335 -115.851 - 97 166.319 670 2 1 -46.0053 -57.4077 -144.45 - 97 211.34 616 2 0 -45.7682 -56.7983 -145.85 - 97 11.9303 617 2 0 -45.6975 -56.65 -146.209 - 97 150.328 711 1 1 -37.7975 -45.6472 -174.45 - 97 72.7273 677 1 0 -37.5445 -44.6398 -175.85 - 97 56.3282 678 1 0 -37.4775 -44.45 -176.109 - 97 257.152 861 1 0 10.7302 -7.84324 -176.25 - 97 41.2576 862 1 0 11.13 -7.65 -175.939 - 97 48.6503 964 1 1 12.8855 -6.84914 -174.85 - 97 71.4427 965 1 1 13.05 -6.79353 -174.754 - 97 132.72 966 1 1 13.25 -6.73688 -174.662 - 97 69.9048 967 1 1 13.45 -6.68008 -174.572 - 97 16.3293 968 1 1 13.65 -6.61674 -174.478 - 97 74.0356 873 2 0 -3.88219 -5.44753 -146.25 - 97 71.417 872 2 0 -4.09125 -5.45 -145.975 - 97 19.1502 874 2 1 -5.22348 -5.77232 -144.85 - 97 97.0847 873 2 1 -5.25 -5.7782 -144.827 - 97 49.1155 872 2 1 -5.45 -5.79679 -144.661 - 97 40.1329 871 2 1 -5.65052 -5.83032 -144.523 - 97 25.0173 870 2 1 -5.98978 -5.78485 -144.45 - 97 237.818 869 2 1 -6.0502 -5.72239 -144.466 - 97 657.697 868 2 1 -6.2503 -5.46947 -144.493 - 97 106.288 867 2 1 -6.45004 -4.36777 -144.531 - 97 86.7082 866 2 1 -6.65 -4.5304 -144.469 - 97 394.427 865 2 1 -6.85 -4.57278 -144.526 - 97 309.553 669 2 1 -46.1188 -57.4573 -144.45 - 97 9.64986 611 2 0 -46.1742 -57.8404 -145.85 - 97 163.769 610 2 0 -46.174 -57.85 -145.884 - 97 115.399 680 1 1 -43.952 -71.7291 -174.45 - 97 158.259 538 1 0 -43.9599 -72.2768 -175.851 - 97 229.66 667 0 1 -46.645 -79.0534 -204.45 - 97 201.041 666 0 1 -46.6501 -79.0554 -204.46 - 97 0.259858 665 0 1 -46.85 -79.1447 -204.847 - 97 167.958 503 0 0 -47.426 -79.3541 -205.85 - 97 221.65 668 0 1 -46.4499 -79.1668 -204.473 - 97 124.61 633 0 1 -53.2565 -50.0304 -204.45 - 97 121.266 634 0 1 -53.25 -50.0411 -204.487 - 97 60.5342 648 0 0 -52.977 -50.4125 -205.85 - 97 79.0931 647 0 0 -52.9494 -50.4502 -206.001 - 97 23.0384 691 2 0 -21.4375 -41.7709 -146.25 - 97 229.656 649 0 0 -53.3366 -50.2071 -205.85 -Number of digits in this event: 62 +Number of tracker hits in this event: 10 + 97 275.613 1099 2 1 39.8683 75.7727 -144.45 + 97 225.168 1278 2 0 39.869 75.7736 -145.85 + 97 130.605 1099 1 1 39.8805 75.7834 -174.45 + 97 120.832 1278 1 0 39.8733 75.7935 -175.85 + 97 114.876 1098 0 1 39.7569 75.9362 -204.45 + 97 134.183 1279 0 0 39.7645 75.9605 -205.85 + 97 367.05 1093 1 1 38.7934 75.3014 -174.45 + 97 123.553 1275 1 0 38.6154 75.2241 -175.85 + 97 145.017 1073 0 1 34.7459 73.8539 -204.45 + 97 115.587 1268 0 0 34.5097 73.7599 -205.85 +Number of digits in this event: 9 Using G4ParticleGun... -Particle energy: 9.2297 LIN +Particle energy: 8.05781 LIN Particle: gamma Event: 98 Number of tracker hits in this event: 3 - 98 29.7328 1211 1 0 21.0938 62.392 -176.25 - 98 114.659 1212 1 0 21.0725 62.45 -176.201 - 98 151.843 1213 1 0 20.953 62.65 -175.939 -Number of digits in this event: 4 + 98 109.448 1768 2 1 173.762 -9.50984 -144.85 + 98 112.942 1717 0 1 163.688 -5.17359 -204.85 + 98 199.562 1716 0 1 163.55 -5.20024 -204.497 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 5.97372 LIN +Particle energy: 9.18809 LIN Particle: gamma Event: 99 -Number of tracker hits in this event: 123 - 99 206.155 722 11 1 -35.6483 -49.8228 125.55 - 99 300.949 651 11 0 -35.6479 -49.8232 124.15 - 99 277.976 721 10 1 -35.656 -49.8413 95.55 - 99 273.966 651 10 0 -35.6549 -49.837 94.15 - 99 145.118 722 9 1 -35.6459 -49.7364 65.55 - 99 234.366 651 9 0 -35.6455 -49.7279 64.15 - 99 131.385 722 8 1 -35.6412 -49.5392 35.55 - 99 114.899 652 8 0 -35.6389 -49.5304 34.15 - 99 123.778 722 7 1 -35.5885 -49.3541 5.55 - 99 173.792 653 7 0 -35.5858 -49.3446 4.15 - 99 103.753 722 6 1 -35.5051 -49.1636 -24.45 - 99 120.026 654 6 0 -35.5021 -49.1504 -25.85 - 99 319.838 723 5 1 -35.4442 -48.8867 -54.45 - 99 190.222 655 5 0 -35.4347 -48.8796 -55.85 - 99 298.939 724 4 1 -35.2224 -48.7491 -84.45 - 99 134.37 656 4 0 -35.2156 -48.7391 -85.85 - 99 137.114 724 3 1 -35.0735 -48.5278 -114.45 - 99 143.483 657 3 0 -35.0633 -48.5214 -115.85 - 99 107.903 725 2 1 -34.8521 -48.4139 -144.45 - 99 10.2764 726 2 1 -34.85 -48.4098 -144.82 - 99 272.347 658 2 0 -34.8448 -48.3996 -145.85 - 99 132.293 726 1 1 -34.7057 -48.1043 -174.45 - 99 113.243 659 1 0 -34.7074 -48.0936 -175.85 - 99 125.197 726 0 1 -34.7415 -47.9032 -204.45 - 99 136.242 660 0 0 -34.7457 -47.9036 -205.85 - 99 97.3225 725 4 1 -35.0187 -48.4764 -84.45 - 99 115.514 659 4 0 -35.5377 -48.0679 -85.8505 - 99 106.834 660 4 0 -35.6783 -48.05 -85.9635 - 99 260.271 719 4 1 -36.0726 -47.9255 -84.85 - 99 15.0851 720 4 1 -36.05 -47.9368 -84.7698 - 99 225.897 722 5 1 -35.45 -48.951 -54.5652 - 99 354.895 722 3 1 -35.5163 -49.9361 -114.45 - 99 16.9097 721 3 1 -35.65 -49.9106 -114.486 - 99 137.903 721 9 1 -35.7079 -49.826 65.55 - 99 386.784 721 8 1 -35.7875 -49.8073 35.55 - 99 295.848 651 8 0 -35.7921 -49.805 34.15 - 99 262.836 720 7 1 -35.8973 -49.7483 5.55 - 99 167.089 651 7 0 -35.9004 -49.7448 4.15 - 99 147.539 720 6 1 -35.962 -49.6856 -24.45 - 99 107.418 651 6 0 -35.9664 -49.6833 -25.85 - 99 108.227 719 5 1 -36.0565 -49.6401 -54.45 - 99 129.753 652 5 0 -36.0619 -49.6378 -55.85 - 99 111.708 652 4 0 -36.1721 -49.5869 -85.85 - 99 153.248 718 3 1 -36.269 -49.5578 -114.45 - 99 128.658 652 3 0 -36.2766 -49.5577 -115.85 - 99 144.167 718 2 1 -36.4281 -49.5599 -144.45 - 99 137.671 652 2 0 -36.4382 -49.56 -145.85 - 99 24.2296 717 1 1 -36.6492 -49.56 -174.45 - 99 175.729 716 1 1 -36.65 -49.56 -174.536 - 99 130.793 652 1 0 -36.6618 -49.5592 -175.85 - 99 114.056 715 0 1 -36.9164 -49.5399 -204.45 - 99 155.27 652 0 0 -36.9317 -49.5395 -205.85 - 99 96.6905 626 1 1 -54.7888 -71.2948 -174.45 - 99 304.838 717 0 1 -36.4945 -49.3455 -204.45 - 99 214.964 653 0 0 -36.5041 -49.3432 -205.85 - 99 83.8708 762 3 1 -27.6386 -19.7181 -114.85 - 99 231.269 761 3 1 -27.65 -19.7859 -114.456 - 99 131.011 654 8 0 -35.3056 -49.193 34.15 - 99 38.9824 655 8 0 -35.2056 -49.05 33.862 - 99 18.6037 845 7 1 -10.8644 -33.1313 5.55 - 99 115.665 846 7 1 -10.85 -33.1418 5.52128 - 99 66.8158 732 7 0 -10.6838 -33.565 4.15 - 99 75.1629 731 7 0 -10.679 -33.65 3.95432 - 99 392.606 692 7 0 -26.5447 -41.5776 3.75 - 99 32.9927 691 7 0 -27.6061 -41.6502 4.12102 - 99 61.1734 756 7 1 -28.7343 -42.7104 5.15 - 99 82.5522 755 7 1 -28.8506 -42.7715 5.23806 - 99 63.486 754 7 1 -29.05 -42.8979 5.35777 - 99 263.263 1098 6 1 39.65 -29.1001 -24.4765 - 99 63.9569 1099 6 1 39.85 -29.0744 -24.736 - 99 189.218 754 6 0 40.9121 -29.1013 -25.8501 - 99 7.29685 755 6 0 40.9591 -29.05 -26.2109 - 99 121.068 654 7 0 -35.8678 -49.1233 4.15 - 99 300.582 730 6 1 -33.968 -53.1325 -24.45 - 99 65.4316 631 6 0 -34.0413 -53.7752 -25.8502 - 99 68.0851 630 6 0 -34.0507 -53.85 -26.0033 - 99 123.279 1364 6 0 17.0718 93.0307 -26.2498 - 99 69.0102 1365 6 0 17.185 93.15 -26.2447 - 99 92.4201 572 8 0 -154.572 -65.5305 33.75 - 99 18.5868 573 8 0 -155.035 -65.4498 34.1229 - 99 8.38864 125 8 1 -154.966 -63.5846 35.15 - 99 34.8413 586 8 0 -154.915 -62.8412 34.15 - 99 166.982 585 8 0 -154.862 -62.85 34.1276 - 99 6.77887 729 6 1 -34.05 -53.2565 -24.5396 - 99 229.307 650 5 0 -35.5925 -49.8848 -55.85 - 99 128.769 723 4 1 -35.4236 -50.9481 -84.45 - 99 144.323 644 4 0 -35.4322 -51.0904 -85.85 - 99 99.1723 723 3 1 -35.3573 -53.2511 -114.45 - 99 121.152 633 3 0 -35.26 -53.3672 -115.85 - 99 138.95 734 2 1 -33.1701 -51.7029 -144.45 - 99 360.94 641 2 0 -33.1763 -51.6617 -145.85 - 99 16.4755 642 2 0 -33.1789 -51.65 -146.175 - 99 109.792 733 1 1 -33.3402 -50.1613 -174.45 - 99 88.5708 649 1 0 -33.311 -50.0609 -175.85 - 99 61.8974 650 1 0 -33.3081 -50.05 -175.996 - 99 169.727 736 0 1 -32.6536 -48.5147 -204.45 - 99 19.7734 657 0 0 -32.6751 -48.4544 -205.85 - 99 84.6604 658 0 0 -32.6765 -48.45 -205.944 - 99 97.4192 718 4 1 -36.3252 -51.4056 -84.45 - 99 124.557 643 4 0 -36.3102 -51.3713 -85.85 - 99 138.754 719 3 1 -36.0592 -50.2468 -114.45 - 99 131.51 649 3 0 -36.1917 -50.1612 -115.85 - 99 284.828 707 2 1 -38.577 -48.2326 -144.45 - 99 113.773 718 1 1 -36.3682 -48.8688 -174.45 - 99 90.699 655 1 0 -36.1376 -49.0296 -175.85 - 99 43.8945 654 1 0 -36.1034 -49.05 -176.066 - 99 156.493 743 0 1 -31.3748 -52.924 -204.45 - 99 104.273 634 0 0 -31.21 -53.1289 -205.85 - 99 157.225 640 0 0 -31.76 -52.0277 -205.85 - 99 42.9548 641 0 0 -31.7362 -51.85 -205.919 - 99 65.3539 740 0 1 -31.9696 -50.9615 -204.85 - 99 139.791 739 0 1 -32.05 -50.8879 -204.683 - 99 265.369 738 0 1 -32.2501 -50.9186 -204.738 - 99 87.9197 1491 12 1 118.35 1.32687 155.373 - 99 231.038 1490 12 1 118.35 1.19295 155.524 - 99 152.602 699 0 1 -40.2232 -57.5825 -204.45 - 99 30.1709 618 0 0 -39.7458 -56.3057 -205.85 - 99 95.3645 619 0 0 -39.7265 -56.25 -205.924 - 99 8.32429 620 0 0 -39.687 -56.05 -206.226 - 99 211.643 693 0 0 -63.8054 -41.282 -206.25 - 99 76.5905 692 0 0 -64.1996 -41.45 -205.964 - 99 133.724 567 0 1 -66.4623 -40.7451 -204.85 - 99 291.981 566 0 1 -66.6501 -40.7146 -204.821 -Number of digits in this event: 71 +Number of tracker hits in this event: 80 + 99 258.967 928 8 1 5.8284 97.5664 35.55 + 99 274.387 1387 8 0 5.82029 97.5788 34.15 + 99 140.578 927 7 1 5.61669 97.9261 5.55 + 99 137.035 1389 7 0 5.60294 97.9653 4.15 + 99 108.985 925 6 1 5.15227 98.7612 -24.45 + 99 104.965 1393 6 0 5.12268 98.81 -25.8501 + 99 161.893 922 5 1 4.63917 99.8714 -54.45 + 99 121.645 1399 5 0 4.46449 99.9608 -55.85 + 99 113.404 901 4 1 0.392456 102.013 -84.45 + 99 176.278 1409 4 0 0.124334 102.116 -85.85 + 99 154.01 872 3 1 -5.51843 103.946 -114.45 + 99 98.9332 1419 3 0 -5.74721 103.962 -115.85 + 99 147.221 847 2 1 -10.4509 104.212 -144.45 + 99 127.599 1420 2 0 -10.6714 104.186 -145.85 + 99 122.949 823 1 1 -15.2517 103.579 -174.45 + 99 60.8097 1417 1 0 -15.5709 103.728 -175.85 + 99 64.6877 1418 1 0 -15.6173 103.75 -176.053 + 99 223.932 790 0 1 -21.94 107.167 -204.45 + 99 137.9 1436 0 0 -22.2879 107.46 -205.85 + 99 141.708 1410 4 0 0.130076 102.15 -85.8883 + 99 14.7062 903 4 1 0.720507 101.917 -84.45 + 99 7.14156 1421 4 0 1.17248 104.35 -85.9072 + 99 207.4 928 7 1 5.83014 97.5594 5.55 + 99 128.704 1387 7 0 5.83171 97.5598 4.15 + 99 120.605 929 6 1 5.86697 97.5695 -24.45 + 99 218.9 1387 6 0 5.86947 97.5703 -25.85 + 99 166.276 929 5 1 5.92515 97.5838 -54.45 + 99 116.048 1387 5 0 5.92808 97.5847 -55.85 + 99 374.83 929 4 1 5.98734 97.6016 -84.45 + 99 350.589 1387 4 0 5.99134 97.6025 -85.85 + 99 90.2662 930 3 1 6.07525 97.6175 -114.45 + 99 109.222 1387 3 0 6.07956 97.6182 -115.85 + 99 121.363 930 2 1 6.16997 97.6303 -144.45 + 99 103.443 1387 2 0 6.17485 97.6296 -145.85 + 99 127.314 931 1 1 6.27338 97.6191 -174.45 + 99 126.907 1387 1 0 6.27677 97.6174 -175.85 + 99 111.214 931 0 1 6.34724 97.5779 -204.45 + 99 122.022 1387 0 0 6.35119 97.5747 -205.85 + 99 97.784 954 11 1 10.8952 74.4007 125.15 + 99 162.207 1355 0 0 1.8002 91.2823 -206.25 + 99 22.2017 904 0 1 0.899655 91.3764 -204.85 + 99 237.634 903 0 1 0.85 91.3841 -204.769 + 99 114.759 932 3 1 6.49081 97.886 -114.45 + 99 159.428 1388 3 0 6.65626 97.9256 -115.85 + 99 105.884 950 2 1 10.1282 98.2875 -144.45 + 99 117.119 1391 2 0 10.3562 98.4449 -145.85 + 99 21.9144 977 1 1 15.6342 100.986 -174.45 + 99 116.502 978 1 1 15.6501 100.99 -174.526 + 99 213.831 1404 1 0 15.9562 101.072 -175.85 + 99 115.55 1015 0 1 23.056 103.467 -204.45 + 99 122.124 1417 0 0 23.525 103.554 -205.85 + 99 113.158 924 3 1 5.00599 97.4644 -114.45 + 99 99.2593 1386 3 0 4.95485 97.4763 -115.85 + 99 127.521 918 2 1 3.78116 97.8641 -144.45 + 99 233.971 1388 2 0 3.60965 97.9165 -145.85 + 99 103.985 898 1 1 -0.298551 99.0559 -174.45 + 99 106.471 1394 1 0 -0.398447 99.0381 -175.851 + 99 156.918 891 0 1 -1.80011 98.6132 -204.451 + 99 128.855 1392 0 0 -1.80347 98.581 -205.85 + 99 61.7958 1386 6 0 5.77893 97.55 -26.1983 + 99 103.297 74 4 1 -165.308 -167.365 -84.4503 + 99 244.642 73 4 1 -165.35 -167.35 -84.6518 + 99 160.771 72 4 1 -165.55 -167.21 -84.7464 + 99 41.0004 61 4 0 -169.465 -167.75 -86.0396 + 99 136.052 928 6 1 5.844 97.5662 -24.45 + 99 210.46 1388 6 0 5.75656 97.8008 -25.85 + 99 78.7308 932 5 1 6.6002 104.59 -54.45 + 99 98.8021 933 5 1 6.65 104.744 -54.6087 + 99 90.3137 1427 5 0 7.38695 105.561 -55.85 + 99 52.3531 1428 5 0 7.52338 105.75 -56.1206 + 99 16.6568 1713 5 0 27.069 162.904 -56.2498 + 99 84.9414 1714 5 0 27.0813 162.95 -56.2026 + 99 64.1605 1715 5 0 27.2176 163.15 -56 + 99 207.075 1043 5 1 28.7032 164.36 -54.85 + 99 137.507 1044 5 1 28.8501 164.493 -54.7322 + 99 223.76 1045 5 1 29.05 164.779 -54.5322 + 99 7.6301 1046 5 1 29.2582 165.089 -54.45 + 99 51.6306 1725 5 0 28.817 165.309 -55.85 + 99 84.9676 1726 5 0 28.7586 165.35 -55.9781 + 99 22.7375 1727 5 0 28.6352 165.55 -56.1921 +Number of digits in this event: 44 Run terminated. Run Summary Number of events processed : 100 - User=19.720000s Real=19.957187s Sys=0.010000s + User=18.600000s Real=18.614186s Sys=0.010000s End of Run 1 /gun/particle e- /gun/energy 1 GeV @@ -8611,8444 +9176,9014 @@ Cannot set FirstId as its value was already used. done Using G4ParticleGun... -Particle energy: 3.83713 LIN +Particle energy: 2.62671 LIN Particle: e- Event: 0 -Number of tracker hits in this event: 58 - 0 132.844 1053 11 1 30.723 49.7892 125.55 - 0 112.945 1148 11 0 30.7288 49.7889 124.15 - 0 112.668 1053 10 1 30.8478 49.7816 95.55 - 0 156.405 1148 10 0 30.8521 49.782 94.15 - 0 158.785 1054 9 1 30.9313 49.7975 65.55 - 0 111.944 1148 9 0 30.9373 49.7993 64.15 - 0 137.839 1055 8 1 31.0598 49.8348 35.55 - 0 216.713 1148 8 0 31.0674 49.8354 34.15 - 0 101.539 1055 7 1 31.2203 49.8525 5.55 - 0 117.16 1149 7 0 31.223 49.8516 4.15 - 0 112.656 1056 6 1 31.2673 49.8236 -24.45 - 0 116.132 1148 6 0 31.2698 49.8174 -25.85 - 0 188.431 1056 5 1 31.3252 49.6863 -54.45 - 0 258.209 1148 5 0 31.3276 49.6803 -55.85 - 0 106.31 1056 4 1 31.3637 49.5501 -84.45 - 0 129.621 1147 4 0 31.3636 49.542 -85.85 - 0 161.272 1056 3 1 31.3415 49.4286 -114.45 - 0 179.08 1146 3 0 31.3656 49.4309 -115.85 - 0 211.447 1059 2 1 31.861 49.3992 -144.45 - 0 268.256 1146 2 0 31.8852 49.3934 -145.85 - 0 112.57 1061 1 1 32.3084 49.3185 -174.45 - 0 99.06 1146 1 0 32.2924 49.3248 -175.85 - 0 421.553 1059 0 1 31.9446 49.4942 -204.45 - 0 112.259 1147 0 0 31.9048 49.5122 -205.85 - 0 275.818 1057 2 1 31.4556 49.2269 -144.45 - 0 250.633 1145 2 0 31.4597 49.2262 -145.85 - 0 98.3753 1057 1 1 31.5373 49.1481 -174.45 - 0 99.3791 1145 1 0 31.5635 49.1422 -175.85 - 0 204.698 1144 0 0 32.0379 48.9227 -205.85 - 0 137.198 1008 0 1 21.8337 42.9394 -204.45 - 0 208.903 1059 1 1 31.9665 46.792 -174.45 - 0 100.016 1133 1 0 31.997 46.7034 -175.85 - 0 14.897 1063 0 1 32.665 44.7029 -204.45 - 0 252.341 1062 0 1 32.65 44.6938 -204.479 - 0 132.822 1120 0 0 31.9552 44.2495 -205.85 - 0 106.719 1584 13 0 -52.8552 137.049 183.75 - 0 180.749 1585 13 0 -52.9006 137.15 183.946 - 0 64.2757 630 13 1 -53.9561 137.451 185.15 - 0 263.757 629 13 1 -54.05 137.449 185.27 - 0 97.125 1086 0 1 37.2519 42.9352 -204.692 - 0 21.4539 1112 0 0 37.7489 42.4839 -205.85 - 0 118.762 1111 0 0 37.7876 42.45 -205.934 - 0 183.088 1115 0 0 37.4916 43.1978 -205.85 - 0 41.5506 1116 0 0 37.502 43.25 -206.046 - 0 15.5889 904 2 0 2.90335 0.868743 -146.25 - 0 29.9061 598 2 0 31.3343 -60.4032 -146.25 - 0 235.562 1056 2 1 31.384 49.4502 -144.45 - 0 145.507 1143 1 0 31.9353 48.8139 -175.85 - 0 120.543 1143 0 0 31.8686 48.6564 -205.85 - 0 172.513 909 12 0 -127.187 1.86644 153.75 - 0 180.741 910 12 0 -127.081 2.05 153.906 - 0 117.028 1147 2 0 31.409 49.4683 -145.85 - 0 95.9504 1060 1 1 32.1965 49.7101 -174.45 - 0 146.046 1148 1 0 32.2229 49.691 -175.85 - 0 109.992 1146 0 0 32.5822 49.3369 -205.85 - 0 2.85045 1754 9 1 171.005 -38.5198 65.15 - 0 165.836 1149 4 0 31.3664 49.9201 -85.85 - 0 170.097 1150 4 0 31.265 50.05 -86.0646 -Number of digits in this event: 33 +Number of tracker hits in this event: 36 + 0 240.65 545 10 1 -71.0033 46.792 95.55 + 0 119.02 1133 10 0 -71.0032 46.7946 94.15 + 0 121.713 545 9 1 -71.0167 46.8348 65.55 + 0 126.517 1133 9 0 -71.0157 46.8349 64.15 + 0 106.993 545 8 1 -70.9919 46.8324 35.55 + 0 172.393 1133 8 0 -70.9922 46.8333 34.15 + 0 113.571 545 7 1 -70.9913 46.8527 5.55 + 0 127.283 1134 7 0 -70.9711 46.8644 4.15 + 0 133.2 547 6 1 -70.5625 47.0958 -24.45 + 0 114.748 1135 6 0 -70.5429 47.1051 -25.85 + 0 106.103 549 5 1 -70.1133 47.2925 -54.45 + 0 99.223 1136 5 0 -70.0883 47.2995 -55.85 + 0 121.912 552 4 1 -69.5799 47.4585 -84.45 + 0 263.231 1137 4 0 -69.5525 47.471 -85.85 + 0 136.977 555 3 1 -68.9623 47.7407 -114.45 + 0 137.297 1138 3 0 -68.9312 47.7521 -115.85 + 0 113.196 558 2 1 -68.3071 47.9859 -144.45 + 0 151.526 1139 2 0 -68.2766 48.0008 -145.85 + 0 121.306 561 1 1 -67.6689 48.323 -174.45 + 0 129.654 1141 1 0 -67.6471 48.3464 -175.85 + 0 104.723 564 0 1 -67.1986 48.8296 -204.45 + 0 176.606 1143 0 0 -67.1767 48.841 -205.85 + 0 66.9022 180 4 1 -144.052 -43.1715 -84.85 + 0 157.073 179 4 1 -144.15 -43.3322 -84.6287 + 0 58.116 358 0 1 -108.55 42.5472 -204.566 + 0 30.7666 1746 7 1 169.35 -125.929 5.2968 + 0 4.14008 316 3 1 -116.801 12.0205 -114.85 + 0 9.38298 1136 6 0 -71.1459 47.263 -25.85 + 0 355.086 1183 6 0 -1.29615 56.68 -26.25 + 0 239.816 1182 6 0 -1.13521 56.65 -26.1727 + 0 244.516 545 0 1 -70.9657 47.2924 -204.45 + 0 245.443 1136 0 0 -70.9717 47.2929 -205.85 + 0 86.7609 702 1 1 -39.45 44.7327 -174.53 + 0 53.4584 703 1 1 -39.45 44.7438 -174.464 + 0 21.0529 1648 0 0 -43.9636 149.75 -205.982 + 0 18.1471 1137 0 0 -70.855 47.45 -206.189 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 5.66307 LIN +Particle energy: 2.39134 LIN Particle: e- Event: 1 -Number of tracker hits in this event: 37 - 1 117.551 1232 10 1 66.6379 -70.3665 95.55 - 1 150.92 548 10 0 66.6395 -70.3663 94.15 - 1 153.565 1233 9 1 66.6735 -70.3614 65.55 - 1 108.138 548 9 0 66.6767 -70.3623 64.15 - 1 123.012 1233 8 1 66.7342 -70.3748 35.55 - 1 98.2333 548 8 0 66.7373 -70.3743 34.15 - 1 371.093 1233 7 1 66.8029 -70.3669 5.55 - 1 190.342 548 7 0 66.8069 -70.3675 4.15 - 1 176.508 1234 6 1 66.8878 -70.3844 -24.45 - 1 133.075 548 6 0 66.8909 -70.3863 -25.85 - 1 154.634 1234 5 1 66.9576 -70.4155 -54.45 - 1 114.135 548 5 0 66.9587 -70.4195 -55.85 - 1 152.71 1234 4 1 66.9895 -70.5108 -84.45 - 1 138.16 547 4 0 66.9926 -70.5178 -85.85 - 1 102.61 1235 3 1 67.051 -70.6645 -114.45 - 1 129.146 546 3 0 67.0547 -70.6729 -115.85 - 1 210.816 1235 2 1 67.1425 -70.8434 -144.45 - 1 99.7727 545 2 0 67.1443 -70.8529 -145.85 - 1 148.931 1235 1 1 67.1752 -71.0549 -174.45 - 1 145.862 544 1 0 67.176 -71.0619 -175.85 - 1 159.624 1235 0 1 67.1986 -71.2032 -204.45 - 1 149.647 544 0 0 67.1998 -71.2103 -205.85 - 1 80.4948 1233 6 1 66.85 -70.4415 -24.782 - 1 95.8271 489 0 0 74.6275 -82.0641 -206.25 - 1 51.2671 488 0 0 74.7527 -82.25 -205.958 - 1 183.396 1277 0 1 75.497 -83.298 -204.85 - 1 70.3674 1278 0 1 75.6501 -83.5221 -204.632 - 1 129.565 599 1 0 64.3125 -60.2189 -176.25 - 1 26.423 600 1 0 64.211 -60.05 -175.939 - 1 111.811 1222 1 1 64.4607 -59.6443 -174.85 - 1 156.303 1221 1 1 64.4176 -59.6086 -174.45 - 1 117.435 601 1 0 64.5965 -59.7843 -175.85 - 1 115.173 1232 0 1 66.6178 -70.3272 -204.638 - 1 333.096 548 0 0 66.6186 -70.3478 -205.85 - 1 54.6943 381 0 0 118.494 -103.917 -206.25 - 1 66.9428 1652 2 1 150.581 -29.9133 -144.85 - 1 76.4678 465 0 0 94.3783 -86.8845 -206.25 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 1.47997 LIN -Particle: e- -Event: 2 -Number of tracker hits in this event: 67 - 2 216.049 650 10 1 -49.8706 81.9123 95.55 - 2 131.955 1309 10 0 -49.8698 81.9145 94.15 - 2 102.641 651 9 1 -49.844 81.944 65.55 - 2 113.404 1309 9 0 -49.8372 81.9437 64.15 - 2 135.335 651 8 1 -49.7035 81.9359 35.55 - 2 246.095 1309 8 0 -49.6907 81.9464 34.15 - 2 130.735 652 7 1 -49.4676 82.059 5.55 - 2 115.257 1310 7 0 -49.4703 82.072 4.15 - 2 102.302 652 6 1 -49.4573 82.3401 -24.45 - 2 146.733 1311 6 0 -49.4619 82.3603 -25.85 - 2 116.167 652 5 1 -49.5829 82.7514 -54.45 - 2 118.262 1313 5 0 -49.5879 82.7608 -55.85 - 2 206.434 651 4 1 -49.7042 82.9018 -84.45 - 2 299.303 1314 4 0 -49.7177 82.899 -85.85 - 2 108.534 650 3 1 -50.0059 82.8493 -114.45 - 2 109.366 1313 3 0 -50.0246 82.8332 -115.85 - 2 123.413 648 2 1 -50.4271 82.4793 -144.45 - 2 92.3277 1312 2 0 -50.4266 82.4549 -145.85 - 2 36.5052 1311 2 0 -50.4263 82.45 -146.128 - 2 122.772 648 1 1 -50.3989 81.947 -174.45 - 2 122.873 1309 1 0 -50.4049 81.9092 -175.85 - 2 133.147 647 0 1 -50.5623 81.2051 -204.45 - 2 418.691 1305 0 0 -50.5499 81.164 -205.85 - 2 135.936 1304 0 0 -50.4976 81.0499 -206.225 - 2 243.135 652 4 1 -49.6005 83.1277 -84.4502 - 2 221.096 1039 2 1 27.85 -13.0581 -144.768 - 2 108.873 1040 2 1 28.05 -13.2108 -144.781 - 2 143.154 653 3 1 -49.45 78.7244 -114.471 - 2 54.087 923 4 1 4.65 60.0859 -84.8302 - 2 50.8492 921 4 1 4.45 60.5683 -84.5447 - 2 131.997 924 4 1 4.85 60.0154 -84.7569 - 2 118.616 1315 4 0 -49.6811 83.0615 -85.85 - 2 2.064 651 3 1 -49.6512 83.1891 -114.45 - 2 119.459 652 3 1 -49.65 83.1953 -114.461 - 2 40.4363 1318 3 0 -49.463 83.7888 -115.85 - 2 71.5542 1319 3 0 -49.4498 83.85 -115.997 - 2 70.4546 672 2 1 -45.5452 92.7781 -144.45 - 2 72.3879 671 2 1 -45.65 92.8641 -144.634 - 2 67.8774 1366 2 0 -46.1919 93.4465 -145.85 - 2 65.7013 1367 2 0 -46.2757 93.5504 -146.04 - 2 88.5312 616 1 1 -56.7564 109.451 -174.45 - 2 68.6439 617 1 1 -56.65 109.224 -174.695 - 2 1.78107 1440 1 0 -56.1096 108.156 -175.85 - 2 76.676 1439 1 0 -56.1067 108.15 -175.856 - 2 59.291 1438 1 0 -56.0382 107.95 -176.077 - 2 238.15 643 0 1 -51.4069 81.7569 -204.45 - 2 22.1005 1300 0 0 -51.0616 80.0957 -205.85 - 2 76.3215 1299 0 0 -51.0525 80.05 -205.891 - 2 76.994 1298 0 0 -51.0158 79.85 -206.058 - 2 9.11634 1297 0 0 -50.9936 79.6497 -206.232 - 2 4.74898 615 1 1 -56.85 109.382 -174.585 - 2 39.944 1453 1 0 -55.1886 110.75 -175.899 - 2 1.81902 620 3 0 91.0442 -55.85 -116.163 - 2 101.301 1179 3 0 -55.9426 55.9967 -116.25 - 2 205.697 1178 3 0 -55.9678 55.8499 -115.962 - 2 167.753 617 3 1 -56.4563 55.6541 -114.85 - 2 67.4178 1165 0 0 -13.5611 53.1586 -205.85 - 2 27.4511 1338 1 0 -67.1807 87.7727 -176.25 - 2 309.753 1339 1 0 -67.2106 87.85 -176.209 - 2 101.011 561 1 1 -67.6613 87.8405 -174.85 - 2 92.8138 654 1 1 -49.0806 82.046 -174.45 - 2 136.037 1310 1 0 -48.9924 82.0847 -175.85 - 2 109.756 662 0 1 -47.5585 81.8809 -204.45 - 2 11.7269 663 0 1 -47.45 81.8351 -204.797 - 2 121.04 1308 0 0 -47.1227 81.6961 -205.85 - 2 48.6289 1307 0 0 -47.0288 81.65 -206.14 - 2 247.152 1311 10 0 -50.7724 82.3058 94.1499 -Number of digits in this event: 26 -Using G4ParticleGun... -Particle energy: 5.59668 LIN -Particle: e- -Event: 3 -Number of tracker hits in this event: 117 - 3 153.939 1219 11 1 63.9034 40.1488 125.55 - 3 114.169 1100 11 0 63.9044 40.1488 124.15 - 3 127.616 1219 10 1 63.924 40.1504 95.55 - 3 132.791 1100 10 0 63.926 40.1501 94.15 - 3 205.06 1219 9 1 63.9655 40.1427 65.55 - 3 122.987 1100 9 0 63.9685 40.1417 64.15 - 3 112.887 1219 8 1 64.0343 40.1223 35.55 - 3 188.58 1100 8 0 64.039 40.1215 34.15 - 3 205.132 1220 7 1 64.1334 40.104 5.55 - 3 230.757 1100 7 0 64.1378 40.1032 4.15 - 3 111.979 1220 6 1 64.2305 40.0902 -24.45 - 3 132.979 1100 6 0 64.2339 40.0899 -25.85 - 3 393.181 1221 5 1 64.3008 40.0864 -54.45 - 3 157.433 1100 5 0 64.3043 40.0874 -55.85 - 3 179.02 1221 4 1 64.3763 40.1125 -84.45 - 3 132.834 1100 4 0 64.3795 40.1163 -85.85 - 3 137.005 1221 3 1 64.4468 40.1972 -114.45 - 3 131.273 1100 3 0 64.4485 40.2021 -115.85 - 3 137.012 1222 2 1 64.4963 40.3054 -144.45 - 3 146.56 1101 2 0 64.4975 40.3104 -145.85 - 3 110.315 1222 1 1 64.5227 40.4129 -174.45 - 3 129.74 1101 1 0 64.5261 40.4159 -175.85 - 3 164.929 1222 0 1 64.6006 40.4856 -204.45 - 3 115.659 1102 0 0 64.5955 40.4843 -205.85 - 3 35.4001 1165 3 1 53.25 134.104 -114.59 - 3 6.91123 1220 5 1 64.25 40.0025 -54.8199 - 3 124.503 1098 5 0 64.0975 39.8457 -55.8505 - 3 106.095 1201 4 1 60.328 36.9952 -84.45 - 3 16.9416 1200 4 1 60.25 36.867 -84.8093 - 3 20.9546 1082 4 0 59.8743 36.481 -85.85 - 3 99.8504 1081 4 0 59.8456 36.45 -85.9322 - 3 132.749 1167 3 1 53.6103 27.7362 -114.45 - 3 137.194 1034 3 0 53.4445 26.9964 -115.85 - 3 37.3416 1033 3 0 53.4178 26.85 -116.126 - 3 47.4138 1154 2 1 50.9238 12.6954 -144.45 - 3 157.348 1153 2 1 50.85 12.5685 -144.557 - 3 21.6771 1152 2 1 50.65 12.2057 -144.81 - 3 39.1559 953 2 0 49.7866 10.7616 -145.85 - 3 90.2857 952 2 0 49.7208 10.65 -145.932 - 3 94.8967 951 2 0 49.6029 10.45 -146.072 - 3 29.2974 950 2 0 49.5103 10.25 -146.208 - 3 271.787 1070 1 1 34.089 -27.0187 -174.45 - 3 39.0523 1071 1 1 34.25 -27.924 -174.778 - 3 54.9201 748 1 0 34.531 -30.2687 -175.85 - 3 50.7478 747 1 0 34.552 -30.45 -175.924 - 3 62.0871 746 1 0 34.5761 -30.65 -175.984 - 3 66.8181 745 1 0 34.5947 -30.85 -176.025 - 3 60.2873 744 1 0 34.6088 -31.05 -176.08 - 3 54.5292 743 1 0 34.6148 -31.2502 -176.135 - 3 51.2383 742 1 0 34.6284 -31.45 -176.199 - 3 145.823 346 1 0 25.7103 -110.764 -176.25 - 3 49.2279 1021 1 1 24.3909 -110.939 -174.85 - 3 117.201 1020 1 1 24.25 -110.95 -174.694 - 3 216.349 204 2 0 111.19 -139.153 -146.25 - 3 509.378 203 2 0 111.977 -139.35 -146.157 - 3 53.9613 202 2 0 113.08 -139.55 -145.935 - 3 67.1642 1478 2 1 115.908 -140.878 -144.85 - 3 79.625 1479 2 1 115.95 -140.902 -144.829 - 3 65.1518 1480 2 1 116.15 -141.008 -144.744 - 3 49.1438 1481 2 1 116.35 -141.046 -144.717 - 3 60.9574 1482 2 1 116.55 -141.09 -144.692 - 3 54.5859 1483 2 1 116.75 -141.154 -144.697 - 3 76.3475 1484 2 1 116.95 -141.206 -144.746 - 3 58.1778 1485 2 1 117.15 -141.247 -144.706 - 3 56.3228 1486 2 1 117.351 -141.306 -144.668 - 3 51.8921 1487 2 1 117.55 -141.334 -144.614 - 3 64.6693 1488 2 1 117.75 -141.366 -144.56 - 3 108.564 1489 2 1 117.951 -141.393 -144.508 - 3 177.928 1490 2 1 118.15 -141.25 -144.557 - 3 152.842 1491 2 1 118.35 -141.071 -144.564 - 3 151.043 280 4 0 118.599 -124.15 -86.0972 - 3 11.7705 954 2 0 49.5009 11.05 -146.108 - 3 16.292 1002 5 0 52.8587 20.4631 -56.25 - 3 179.455 1001 5 0 52.8518 20.45 -56.2302 - 3 234.351 1000 5 0 52.5877 20.25 -56.0494 - 3 24.724 1156 5 1 51.3161 20.2351 -54.85 - 3 112.373 1155 5 1 51.25 20.2312 -54.7761 - 3 108 1154 5 1 51.0499 20.327 -54.6737 - 3 88.9276 999 5 0 50.729 19.8975 -55.8501 - 3 19.3672 1159 5 1 52.0362 20.0395 -54.85 - 3 246.2 1160 5 1 52.05 20.0296 -54.7994 - 3 111.538 1099 5 0 64.3153 40.0467 -55.85 - 3 129.767 1222 4 1 64.459 39.3291 -84.45 - 3 54.548 1098 4 0 64.5288 39.7928 -85.8501 - 3 52.7957 1099 4 0 64.5379 39.85 -86.0252 - 3 132.009 1228 3 1 65.654 47.8768 -114.45 - 3 124.863 1138 3 0 65.8408 47.6844 -115.85 - 3 101.198 1259 2 1 71.8705 46.3214 -144.45 - 3 56.3343 1260 2 1 72.05 46.2464 -144.682 - 3 58.0917 1129 2 0 72.8783 45.8962 -145.85 - 3 97.6148 1128 2 0 72.9866 45.85 -146.006 - 3 15.5926 1350 1 1 90.3306 37.5773 -174.451 - 3 110.155 1351 1 1 90.35 37.57 -174.478 - 3 36.3914 1352 1 1 90.55 37.4934 -174.767 - 3 134.039 1085 1 0 91.3075 37.1991 -175.85 - 3 137.481 1447 0 1 109.683 29.5895 -204.45 - 3 97.5912 1044 0 0 109.706 28.9459 -205.85 - 3 160.697 1043 0 0 109.706 28.85 -206.082 - 3 111.239 987 0 0 138.198 17.5955 -206.25 - 3 171.413 988 0 0 138.185 17.65 -206.055 - 3 3.89533 806 3 0 14.5579 -18.8406 -116.25 - 3 188.229 805 3 0 14.5545 -18.85 -116.243 - 3 343.534 971 1 1 14.4012 99.3446 -174.85 - 3 47.7563 1293 2 0 -98.8261 78.85 -146.208 - 3 50.1657 970 1 1 14.25 99.4838 -174.509 - 3 311.062 1219 7 1 63.966 40.2264 5.28711 - 3 106.042 1098 7 0 64.1566 39.775 4.15 - 3 18.2331 1097 7 0 64.1766 39.65 3.83825 - 3 92.4531 1232 4 0 47.5863 66.4636 -85.85 - 3 81.3186 1093 7 0 65.6879 38.7333 4.15 - 3 87.6842 1092 7 0 65.8092 38.6499 4.0644 - 3 37.4459 1091 7 0 66.0455 38.4498 3.87937 - 3 54.8569 1099 7 0 63.8694 40.05 3.87537 - 3 245.69 1219 0 1 63.8938 40.267 -204.45 - 3 197.847 1100 0 0 63.8976 40.242 -205.85 - 3 37.8874 1101 0 0 63.8897 40.2517 -205.85 - 3 27.2284 1515 0 1 123.15 119.547 -204.696 -Number of digits in this event: 47 -Using G4ParticleGun... -Particle energy: 1.80406 LIN -Particle: e- -Event: 4 -Number of tracker hits in this event: 72 - 4 230.429 1295 9 1 79.2189 -89.1981 65.55 - 4 87.2198 454 9 0 79.2201 -89.1984 64.15 - 4 215.755 1295 8 1 79.2362 -89.1936 35.55 - 4 224.136 454 8 0 79.2351 -89.192 34.15 - 4 105.698 1295 7 1 79.2078 -89.1728 5.55 - 4 182.72 454 7 0 79.2045 -89.1691 4.15 - 4 122.851 1295 6 1 79.1144 -89.0878 -24.45 - 4 126.106 454 6 0 79.1076 -89.0797 -25.85 - 4 118.668 1294 5 1 78.9689 -88.9072 -54.45 - 4 161.812 455 5 0 78.9573 -88.897 -55.85 - 4 341.018 1293 4 1 78.7296 -88.6942 -84.45 - 4 284.841 456 4 0 78.7196 -88.6816 -85.85 - 4 183.604 1292 3 1 78.4963 -88.4186 -114.45 - 4 130.082 458 3 0 78.4865 -88.4071 -115.85 - 4 135.204 1291 2 1 78.2775 -88.1793 -144.45 - 4 365.39 459 2 0 78.2607 -88.1673 -145.85 - 4 272.918 1289 1 1 77.9179 -87.9235 -174.45 - 4 123.362 460 1 0 77.9072 -87.9082 -175.85 - 4 114.388 1288 0 1 77.6868 -87.5636 -204.45 - 4 119.491 462 0 0 77.6732 -87.5425 -205.85 - 4 62.2008 32 9 0 -150.924 -173.604 63.7501 - 4 121.672 33 9 0 -150.919 -173.55 63.8874 - 4 198.226 34 9 0 -150.839 -173.35 63.8243 - 4 36.2413 1109 3 0 -19.9966 41.85 -116.077 - 4 100.661 455 4 0 78.8196 -88.9269 -85.85 - 4 157.08 1293 3 1 78.679 -90.4364 -114.45 - 4 171.894 447 3 0 78.8141 -90.5518 -115.85 - 4 146.384 1309 2 1 81.9664 -92.0827 -144.45 - 4 0.691996 1310 2 1 82.05 -92.1329 -144.848 - 4 125.568 439 2 0 82.2604 -92.2529 -145.85 - 4 391.352 1339 1 1 87.9069 -95.195 -174.45 - 4 153.31 424 1 0 88.1738 -95.2954 -175.85 - 4 206.673 1365 0 1 93.1676 -97.7706 -204.45 - 4 125.407 413 0 0 93.2416 -97.5343 -205.85 - 4 132.621 1295 3 1 79.1398 -88.4224 -114.45 - 4 167.711 457 3 0 79.1934 -88.5518 -115.85 - 4 10.1563 1313 2 1 82.6628 -89.4033 -144.45 - 4 182.509 1312 2 1 82.65 -89.4139 -144.481 - 4 1.35321 450 2 0 82.0559 -90.0478 -145.85 - 4 235.915 449 2 0 81.9702 -90.1501 -146.038 - 4 261.531 1243 1 1 68.7992 -105.334 -174.45 - 4 84.759 366 1 0 68.8709 -106.769 -175.85 - 4 78.5297 365 1 0 68.8955 -106.95 -176.045 - 4 10.7692 364 1 0 68.9201 -107.15 -176.223 - 4 57.7315 1270 0 1 74.1237 -143.059 -204.45 - 4 80.7604 1269 0 1 74.05 -143.019 -204.548 - 4 58.8552 1268 0 1 73.85 -142.967 -204.762 - 4 208.491 189 0 0 72.1791 -142.349 -205.85 - 4 14.9985 188 0 0 71.7174 -142.35 -206.227 - 4 74.0302 177 0 0 59.9838 -144.716 -206.25 - 4 72.4261 1244 1 1 68.8503 -105.497 -174.689 - 4 42.9296 1298 2 1 79.8091 -86.9348 -144.793 - 4 261.772 465 2 0 79.8273 -86.8782 -145.85 - 4 118.37 1304 1 1 80.8882 -85.795 -174.45 - 4 128.575 471 1 0 80.8844 -85.7697 -175.851 - 4 146.964 1303 0 1 80.6768 -85.1658 -204.45 - 4 99.4943 1302 0 1 80.65 -85.1565 -204.645 - 4 92.024 474 0 0 80.479 -85.1147 -205.85 - 4 140.787 106 9 0 -85.4032 -158.95 63.8553 - 4 79.2384 1308 1 1 81.7525 -84.9838 -174.451 - 4 43.0169 1307 1 1 81.65 -84.8376 -174.69 - 4 52.2611 479 1 0 81.1332 -84.1195 -175.85 - 4 119.717 480 1 0 81.0835 -84.05 -175.96 - 4 172.282 1228 0 1 65.7819 -67.483 -204.45 - 4 62.3945 568 0 0 65.3302 -66.371 -205.85 - 4 188.853 569 0 0 65.2807 -66.25 -206.007 - 4 181.689 570 0 0 65.1582 -66.05 -206.042 - 4 103.055 1294 9 1 79.05 -89.3904 65.3514 - 4 0.255491 1293 9 1 78.85 -89.6002 65.1507 - 4 26.4788 447 9 0 77.8893 -90.6672 64.15 - 4 97.5785 446 9 0 77.815 -90.7508 64.0792 - 4 81.5037 445 9 0 77.6602 -90.95 63.925 -Number of digits in this event: 41 -Using G4ParticleGun... -Particle energy: 9.21545 LIN -Particle: e- -Event: 5 -Number of tracker hits in this event: 201 - 5 146.506 757 11 1 -28.5675 -46.7544 125.55 - 5 200.14 666 11 0 -28.567 -46.7545 124.15 - 5 167.75 757 10 1 -28.5581 -46.7562 95.55 - 5 105.345 666 10 0 -28.5578 -46.756 94.15 - 5 325.282 757 9 1 -28.5512 -46.7542 65.55 - 5 415.167 666 9 0 -28.5509 -46.7549 64.15 - 5 134.897 757 8 1 -28.5468 -46.765 35.55 - 5 151.096 666 8 0 -28.5459 -46.7657 34.15 - 5 394.54 757 7 1 -28.5208 -46.7773 5.55 - 5 368.198 666 7 0 -28.5218 -46.7788 4.15 - 5 512.82 757 6 1 -28.5403 -46.815 -24.45 - 5 418.376 666 6 0 -28.5406 -46.8161 -25.85 - 5 439.315 757 5 1 -28.5509 -46.8443 -54.45 - 5 406.408 666 5 0 -28.5532 -46.8443 -55.85 - 5 125.067 757 4 1 -28.5982 -46.8456 -84.45 - 5 235.284 666 4 0 -28.6012 -46.8458 -85.85 - 5 97.6504 756 3 1 -28.6582 -46.854 -114.45 - 5 397.018 665 3 0 -28.663 -46.8669 -115.85 - 5 128.858 756 2 1 -28.8127 -47.2349 -144.45 - 5 200.828 664 2 0 -28.7755 -47.2324 -145.85 - 5 335.063 760 1 1 -28.0064 -47.104 -174.45 - 5 43.9318 664 1 0 -27.9397 -47.055 -175.85 - 5 330.893 665 1 0 -27.9327 -47.05 -175.993 - 5 124.658 767 0 1 -26.566 -45.9458 -204.45 - 5 97.5815 670 0 0 -26.5169 -45.8962 -205.85 - 5 159.447 755 2 1 -28.85 -47.2605 -144.5 - 5 72.9355 754 2 1 -29.05 -47.2363 -144.554 - 5 354.146 753 2 1 -29.25 -47.1464 -144.507 - 5 264.882 756 1 1 -28.8337 -46.8912 -174.45 - 5 362.562 755 0 1 -28.929 -46.9104 -204.45 - 5 493.574 665 0 0 -28.9345 -46.9123 -205.85 - 5 60.1958 745 3 0 39.4316 -30.9271 -116.25 - 5 217.675 746 3 0 39.5743 -30.85 -115.976 - 5 354.737 758 6 1 -28.3307 -46.6426 -24.45 - 5 116.418 667 6 0 -28.3341 -46.6351 -25.85 - 5 128.384 668 5 0 -28.4665 -46.4115 -55.85 - 5 249.767 756 4 1 -28.797 -45.914 -84.45 - 5 144.717 670 4 0 -28.8209 -45.8682 -85.85 - 5 120.737 753 3 1 -29.3634 -44.9882 -114.45 - 5 112.397 675 3 0 -29.3938 -44.9438 -115.85 - 5 112.271 750 2 1 -29.9595 -43.9486 -144.45 - 5 158.79 680 2 0 -29.9803 -43.8862 -145.85 - 5 113.012 748 1 1 -30.3416 -42.5966 -174.45 - 5 144.338 687 1 0 -30.3455 -42.5307 -175.85 - 5 107.258 748 0 1 -30.385 -41.1381 -204.45 - 5 131.066 695 0 0 -30.3862 -41.048 -205.85 - 5 230.156 758 5 1 -28.3712 -46.7058 -54.45 - 5 148.285 758 4 1 -28.3888 -46.6515 -84.45 - 5 130.126 759 3 1 -28.2053 -46.6332 -114.45 - 5 163.564 667 3 0 -28.1994 -46.6323 -115.85 - 5 118.083 759 2 1 -28.0709 -46.6028 -144.45 - 5 121.699 667 2 0 -28.0655 -46.5997 -145.85 - 5 109.107 667 1 0 -27.9744 -46.5523 -175.85 - 5 176.077 760 0 1 -27.9524 -46.6661 -204.45 - 5 110.405 666 0 0 -27.9449 -46.6716 -205.85 - 5 188.73 667 0 0 -26.3382 -46.6431 -205.85 - 5 222.341 668 0 0 -26.0606 -46.45 -205.874 - 5 83.06 759 0 1 -28.05 -46.6467 -204.555 - 5 71.7916 758 0 1 -28.25 -46.5952 -204.681 - 5 91.099 757 0 1 -28.4502 -46.5283 -204.721 - 5 292.212 756 0 1 -28.6502 -46.7314 -204.692 - 5 300.82 1524 2 1 124.95 -20.5868 -144.638 - 5 9.76595 235 3 1 -132.998 -138.806 -114.45 - 5 99.2033 236 3 1 -132.758 -139.024 -114.45 - 5 126.04 205 3 0 -132.952 -139.009 -115.85 - 5 152.109 211 3 0 -100.969 -137.937 -116.25 - 5 102.197 397 3 1 -100.589 -137.596 -114.85 - 5 129.846 398 3 1 -100.55 -137.573 -114.717 - 5 275.561 399 3 1 -100.35 -137.674 -114.548 - 5 70.266 758 3 1 -28.25 -46.611 -114.769 - 5 375.026 663 3 0 -31.3516 -47.3826 -115.85 - 5 358.083 664 3 0 -31.9933 -47.2499 -115.895 - 5 49.0606 1094 1 1 38.9364 -50.0391 -174.85 - 5 44.2135 1095 1 1 39.05 -50.0401 -174.708 - 5 119.955 1020 2 1 24.0518 -126.179 -144.85 - 5 452.239 665 5 0 -28.5478 -46.8555 -55.85 - 5 142.762 664 4 0 -28.7534 -47.0786 -85.85 - 5 151.886 755 3 1 -28.8576 -47.1023 -114.45 - 5 105.791 755 1 1 -28.9389 -47.4318 -174.45 - 5 137.323 663 1 0 -28.9412 -47.4258 -175.85 - 5 164.954 663 0 0 -28.9315 -47.2673 -205.85 - 5 140.365 595 1 0 -32.3497 -61.0276 -176.25 - 5 72.0855 596 1 0 -32.4648 -60.8496 -176.085 - 5 59.4769 597 1 0 -32.5639 -60.65 -176.077 - 5 73.422 598 1 0 -32.5944 -60.45 -176.138 - 5 98.5885 1064 5 0 -37.6952 32.912 -56.2497 - 5 76.2306 1065 5 0 -37.7077 33.05 -56.1991 - 5 86.1844 1066 5 0 -37.7186 33.25 -56.0259 - 5 4.64731 1067 5 0 -37.6798 33.45 -55.8646 - 5 133.341 713 5 1 -37.3718 34.803 -54.8496 - 5 153.627 714 5 1 -37.2499 35.2799 -54.6479 - 5 120.743 715 5 1 -37.05 35.501 -54.5593 - 5 165.547 1074 5 0 -36.561 35.0374 -55.8503 - 5 61.3939 1073 5 0 -36.2362 34.85 -56.1866 - 5 219.253 822 5 0 -57.3341 -15.533 -56.25 - 5 47.6373 613 5 1 -57.4289 -14.7264 -54.85 - 5 78.0352 612 5 1 -57.45 -14.6786 -54.8283 - 5 118.756 768 4 1 -26.3421 -50.4312 -84.4506 - 5 10.728 647 4 0 -26.2466 -50.6438 -85.8502 - 5 194.044 646 4 0 -26.2439 -50.65 -85.8908 - 5 109.718 779 3 1 -24.0605 -55.2614 -114.45 - 5 10.8177 780 3 1 -24.05 -55.3197 -114.792 - 5 129.173 622 3 0 -24.0142 -55.4992 -115.85 - 5 98.9128 784 2 1 -23.1321 -60.5206 -144.45 - 5 112.178 597 2 0 -23.4256 -60.5576 -145.851 - 5 50.5785 759 1 1 -28.1416 -62.5697 -174.45 - 5 70.6531 758 1 1 -28.25 -62.6165 -174.566 - 5 43.3662 757 1 1 -28.45 -62.6928 -174.745 - 5 27.5488 583 1 0 -29.818 -63.3959 -175.85 - 5 130.347 582 1 0 -29.9121 -63.45 -175.919 - 5 94.6404 581 1 0 -30.2258 -63.6501 -176.086 - 5 42.4484 580 1 0 -30.5081 -63.85 -176.204 - 5 114.156 746 8 1 -30.7987 -46.1906 35.55 - 5 32.8651 745 8 1 -30.85 -46.1998 35.27 - 5 125.077 669 8 0 -31.0587 -46.2079 34.1495 - 5 53.553 715 7 1 -37.023 -47.437 5.55 - 5 52.3164 714 7 1 -37.05 -47.4434 5.31411 - 5 66.1802 663 7 0 -37.1836 -47.4497 4.15 - 5 44.3008 662 7 0 -37.2078 -47.45 3.91449 - 5 176.836 700 6 1 -39.9294 -47.6968 -24.45 - 5 122.845 661 6 0 -40.0526 -47.7576 -25.85 - 5 117.208 689 5 1 -42.0967 -48.6681 -54.45 - 5 116.622 657 5 0 -42.0599 -48.5882 -55.85 - 5 168.477 693 4 1 -41.2828 -47.0938 -84.45 - 5 89.8722 663 4 0 -41.1458 -47.25 -85.925 - 5 114.442 711 3 1 -37.7938 -50.8671 -114.45 - 5 60.2547 644 3 0 -37.6686 -51.1813 -115.85 - 5 33.1204 643 3 0 -37.6579 -51.25 -116.118 - 5 13.8562 714 2 1 -37.0744 -57.0472 -144.45 - 5 166.347 715 2 1 -37.05 -57.0573 -144.501 - 5 8.04422 716 2 1 -36.8498 -57.1327 -144.825 - 5 197.29 613 2 0 -36.038 -57.3618 -145.85 - 5 3.66566 829 1 1 -14.2383 -59.1311 -174.45 - 5 75.9731 828 1 1 -14.25 -59.134 -174.462 - 5 189.972 827 1 1 -14.45 -59.1936 -174.716 - 5 68.5792 602 1 0 -15.5755 -59.5811 -175.85 - 5 146.225 601 1 0 -15.7467 -59.65 -175.968 - 5 32.5975 448 1 0 -71.5355 -90.4563 -176.25 - 5 123.467 447 1 0 -71.5889 -90.55 -176.163 - 5 39.3762 446 1 0 -71.7417 -90.75 -175.951 - 5 3.80963 537 1 1 -72.6394 -91.3697 -174.85 - 5 228.939 536 1 1 -72.65 -91.3771 -174.838 - 5 65.5342 535 1 1 -72.85 -91.7289 -174.586 - 5 259.412 548 1 1 -70.45 -91.8597 -174.659 - 5 55.4221 604 1 0 -13.0726 -59.1899 -175.85 - 5 68.3297 603 1 0 -12.9662 -59.2501 -176.023 - 5 141.82 749 8 1 -30.1154 -48.274 35.55 - 5 84.9174 658 8 0 -29.8537 -48.2728 34.1498 - 5 8.19237 659 8 0 -29.7656 -48.25 33.7909 - 5 124.404 806 7 1 -18.8437 -46.9522 5.55 - 5 113.384 805 7 1 -18.85 -47.0227 5.46523 - 5 15.8925 655 7 0 -19.4437 -49.0201 4.15 - 5 57.1799 654 7 0 -19.4521 -49.05 4.13164 - 5 59.8741 653 7 0 -19.4897 -49.25 4.01588 - 5 58.3598 652 7 0 -19.4894 -49.4502 3.9285 - 5 5.17805 651 7 0 -19.4239 -49.65 3.76508 - 5 71.348 758 10 1 -28.4498 -46.7748 95.3592 - 5 159.649 759 10 1 -28.25 -46.6957 95.3772 - 5 247.93 760 10 1 -28.05 -46.4433 95.5004 - 5 122.105 765 5 1 -26.9644 -47.654 -54.45 - 5 132.303 661 5 0 -26.8306 -47.6877 -55.85 - 5 117.911 777 4 1 -24.5469 -47.9846 -84.4505 - 5 131.738 660 4 0 -24.438 -48.0242 -85.85 - 5 150.877 789 3 1 -22.1765 -48.2912 -114.45 - 5 115.274 658 3 0 -22.055 -48.268 -115.85 - 5 329.694 803 2 1 -19.4292 -47.6992 -144.45 - 5 135.869 661 2 0 -19.2212 -47.6979 -145.85 - 5 15.0284 656 1 0 -14.501 -48.6537 -175.85 - 5 206.009 657 1 0 -14.4957 -48.65 -175.906 - 5 95.7849 843 0 1 -11.267 -47.0928 -204.45 - 5 12.2839 844 0 1 -11.25 -47.0947 -204.798 - 5 113.895 664 0 0 -11.1836 -47.0842 -205.85 - 5 52.8317 163 7 0 144.839 -147.419 3.75 - 5 70.0695 162 7 0 144.908 -147.55 3.83585 - 5 37.6431 161 7 0 144.883 -147.75 4.03515 - 5 72.5843 1621 7 1 144.496 -148.634 5.15008 - 5 64.9112 1620 7 1 144.349 -148.745 5.32909 - 5 74.4088 1619 7 1 144.15 -148.808 5.41038 - 5 97.4914 1618 7 1 143.95 -148.899 5.45249 - 5 173.962 156 7 0 144.305 -148.787 4.14955 - 5 13.8977 804 2 1 -19.2497 -47.4851 -144.832 - 5 225.063 665 2 0 -18.6844 -46.9305 -145.85 - 5 51.9342 663 6 0 -28.5006 -47.3976 -25.8507 - 5 84.3341 662 6 0 -28.5021 -47.45 -25.9648 - 5 104.429 754 5 1 -29.137 -65.912 -54.45 - 5 184.458 567 5 0 -29.0008 -66.497 -55.85 - 5 232.327 761 4 1 -27.6657 -76.0136 -84.4505 - 5 78.8855 516 4 0 -27.7044 -76.7062 -85.8504 - 5 32.6804 515 4 0 -27.7227 -76.85 -86.1107 - 5 176.612 734 3 1 -33.0924 -91.0598 -114.45 - 5 41.6556 733 3 1 -33.25 -91.2205 -114.728 - 5 27.4249 441 3 0 -33.9774 -91.9073 -115.85 - 5 73.8678 440 3 0 -34.023 -91.9505 -115.916 - 5 56.1123 439 3 0 -34.1374 -92.15 -116.106 - 5 59.9051 644 2 1 -51.1585 -125.752 -144.45 - 5 93.5556 643 2 1 -51.2501 -125.843 -144.566 - 5 19.5033 642 2 1 -51.45 -126.017 -144.786 - 5 25.6365 268 2 0 -52.208 -126.513 -145.85 - 5 79.1862 267 2 0 -52.2642 -126.55 -145.922 - 5 39.3102 266 2 0 -52.4894 -126.75 -146.173 - 5 38.6547 506 2 1 -78.7566 -140.457 -144.45 -Number of digits in this event: 96 -Using G4ParticleGun... -Particle energy: 6.70048 LIN -Particle: e- -Event: 6 -Number of tracker hits in this event: 41 - 6 103.63 480 10 1 -84.0408 52.8654 95.55 - 6 199.463 1164 10 0 -84.0413 52.8652 94.15 - 6 140.641 480 9 1 -84.0484 52.8616 65.55 - 6 163.86 1164 9 0 -84.0488 52.8624 64.15 - 6 153.484 479 8 1 -84.058 52.8758 35.55 - 6 165.26 1164 8 0 -84.0576 52.8772 34.15 - 6 112.027 480 7 1 -84.0471 52.9097 5.55 - 6 191.947 1164 7 0 -84.0457 52.9096 4.15 - 6 125.185 480 6 1 -84.005 52.9085 -24.45 - 6 134.061 1164 6 0 -84.0043 52.9065 -25.85 - 6 131.876 480 5 1 -83.992 52.8663 -54.45 - 6 127.195 1164 5 0 -83.9897 52.864 -55.85 - 6 101.377 480 4 1 -83.9355 52.8103 -84.45 - 6 132.252 1163 4 0 -83.9319 52.8047 -85.85 - 6 108.954 480 3 1 -83.8654 52.6924 -114.45 - 6 114.143 1163 3 0 -83.8627 52.6849 -115.85 - 6 103.47 481 2 1 -83.8141 52.5304 -144.45 - 6 114.973 1162 2 0 -83.8108 52.5242 -145.85 - 6 134.099 481 1 1 -83.742 52.3982 -174.45 - 6 218.732 1161 1 0 -83.7357 52.3933 -175.85 - 6 108.15 482 0 1 -83.6015 52.2925 -204.45 - 6 131.753 1161 0 0 -83.5957 52.2846 -205.85 - 6 65.0347 1039 1 1 27.8988 80.6117 -174.85 - 6 66.3569 1403 1 0 -130.529 100.774 -176.249 - 6 89.2603 1402 1 0 -130.656 100.75 -176.05 - 6 15.0238 244 1 1 -131.325 100.455 -174.85 - 6 105.008 243 1 1 -131.35 100.44 -174.805 - 6 284.351 242 1 1 -131.55 100.33 -174.568 - 6 81.33 241 1 1 -131.75 100.223 -174.49 - 6 63.9289 240 1 1 -131.95 100.192 -174.593 - 6 79.9702 239 1 1 -132.15 100.191 -174.69 - 6 119.015 1399 1 0 -132.669 100.073 -175.85 - 6 96.8933 1398 1 0 -132.992 99.95 -175.881 - 6 62.193 1397 1 0 -133.173 99.7496 -175.916 - 6 149.509 1396 1 0 -133.185 99.5498 -175.947 - 6 71.6556 1395 1 0 -133.221 99.35 -176.078 - 6 38.3384 1166 1 0 -88.0572 53.2828 -176.25 - 6 84.1814 1165 1 0 -88.0627 53.25 -176.215 - 6 287.738 1164 1 0 -88.1673 53.05 -176.134 - 6 157.338 30 3 0 -165.222 -173.95 -116.038 - 6 132.001 543 12 0 -32.8104 -71.3835 153.75 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 5.14104 LIN -Particle: e- -Event: 7 -Number of tracker hits in this event: 41 - 7 412.745 1429 8 1 105.96 92.2508 35.55 - 7 102.684 1360 8 0 105.96 92.2499 34.15 - 7 143.946 1429 7 1 105.954 92.2339 5.55 - 7 208.538 1360 7 0 105.958 92.2284 4.15 - 7 284.087 1429 6 1 106.027 92.118 -24.45 - 7 102.764 1359 6 0 106.029 92.1135 -25.85 - 7 206.265 1429 5 1 106.078 92.0275 -54.45 - 7 218.504 1359 5 0 106.079 92.0248 -55.85 - 7 148.783 1429 4 1 106.119 91.9666 -84.45 - 7 107.143 1359 4 0 106.121 91.9625 -85.85 - 7 129.563 1430 3 1 106.161 91.8792 -114.45 - 7 111.698 1358 3 0 106.21 91.8754 -115.85 - 7 210.201 1433 2 1 106.931 90.4863 -144.45 - 7 81.9897 1434 2 1 106.95 90.5008 -144.645 - 7 148.585 1352 2 0 107.061 90.5748 -145.85 - 7 108.678 1450 1 1 110.158 91.377 -174.45 - 7 171.762 1355 1 0 110.468 91.2943 -175.85 - 7 51.6822 1482 0 1 116.611 90.7591 -204.45 - 7 177.942 1481 0 1 116.55 90.9004 -204.529 - 7 43.545 1480 0 1 116.35 91.3293 -204.787 - 7 39.4033 1364 0 0 115.487 93.0254 -205.85 - 7 78.2091 1365 0 0 115.424 93.15 -205.926 - 7 66.4631 1366 0 0 115.324 93.35 -206.043 - 7 51.3896 1367 0 0 115.228 93.55 -206.157 - 7 44.2042 557 9 1 -68.65 75.8514 65.235 - 7 64.3218 1764 0 0 125.633 172.95 -206.243 - 7 183.159 790 3 1 -21.8991 54.6804 -114.85 - 7 271.835 1430 1 1 106.225 91.601 -174.45 - 7 236.411 1357 1 0 106.23 91.6241 -175.85 - 7 130.101 1430 0 1 106.301 92.1603 -204.45 - 7 132.138 1359 0 0 106.292 92.1467 -205.85 - 7 242.235 788 3 0 39.766 -22.25 -116.242 - 7 71.3869 787 3 0 39.881 -22.4501 -115.98 - 7 631.778 1431 0 1 106.456 92.1726 -204.45 - 7 112.93 1360 0 0 106.446 92.2052 -205.85 - 7 79.1068 1432 0 1 106.55 92.5161 -204.757 - 7 192.011 1368 0 0 106.708 93.763 -205.85 - 7 201.419 1369 0 0 106.999 93.9502 -205.941 - 7 194.074 1428 7 1 105.95 92.233 5.4834 - 7 350.28 1428 8 1 105.95 92.0848 35.519 - 7 150.295 1430 8 1 106.15 91.7802 35.4645 -Number of digits in this event: 26 -Using G4ParticleGun... -Particle energy: 6.25662 LIN -Particle: e- -Event: 8 -Number of tracker hits in this event: 44 - 8 119.479 616 11 1 -56.7359 9.50999 125.55 - 8 280.517 947 11 0 -56.7365 9.50899 124.15 - 8 153.7 616 10 1 -56.7474 9.48922 95.55 - 8 92.7938 947 10 0 -56.7465 9.48738 94.15 - 8 98.2414 616 9 1 -56.7294 9.45021 65.55 - 8 216.871 946 9 0 -56.7278 9.44936 64.15 - 8 354.115 616 8 1 -56.6928 9.42986 35.55 - 8 122.741 946 8 0 -56.6888 9.42912 34.15 - 8 126.93 617 7 1 -56.6113 9.41492 5.55 - 8 108.097 946 7 0 -56.6063 9.41309 4.15 - 8 300.788 617 6 1 -56.5068 9.36979 -24.45 - 8 456.9 946 6 0 -56.5033 9.36774 -25.85 - 8 106.976 618 5 1 -56.4398 9.3267 -54.45 - 8 139.384 946 5 0 -56.4376 9.32547 -55.85 - 8 147.983 618 4 1 -56.3987 9.30146 -84.45 - 8 134.414 946 4 0 -56.3994 9.29793 -85.85 - 8 130.335 618 3 1 -56.4173 9.22739 -114.45 - 8 162.743 945 3 0 -56.4173 9.22362 -115.85 - 8 142.018 618 2 1 -56.4235 9.14786 -144.45 - 8 110.098 945 2 0 -56.4227 9.14252 -145.85 - 8 142.107 618 1 1 -56.4122 9.04256 -174.45 - 8 294.892 944 1 0 -56.4112 9.03756 -175.85 - 8 103.384 618 0 1 -56.396 8.9361 -204.45 - 8 140.116 944 0 0 -56.3956 8.93075 -205.85 - 8 18.0696 839 1 0 -100.58 -12.1163 -176.25 - 8 218.313 840 1 0 -100.593 -12.05 -176.136 - 8 39.3439 998 3 0 -77.8237 19.8029 -116.25 - 8 227.462 999 3 0 -77.8721 19.8501 -116.185 - 8 44.4212 1000 3 0 -77.8431 20.05 -116.062 - 8 126.009 647 0 1 -50.6244 8.35218 -204.45 - 8 50.7544 939 0 0 -50.5725 7.88631 -205.85 - 8 151.931 938 0 0 -50.5731 7.84997 -205.96 - 8 106.015 945 1 0 -56.3243 9.1083 -175.85 - 8 13.4996 609 0 1 -58.2256 9.17528 -204.451 - 8 106.595 608 0 1 -58.2501 9.15803 -204.497 - 8 171.3 942 0 0 -59.0767 8.61323 -205.85 - 8 127.599 596 0 1 -60.7298 8.49701 -204.85 - 8 91.1656 618 6 1 -56.3403 9.51755 -24.45 - 8 418.5 945 6 0 -57.9852 9.25 -25.8894 - 8 185.234 944 6 0 -58.2455 9.05 -25.9306 - 8 278.224 943 6 0 -58.6028 8.84994 -25.9129 - 8 37.4701 942 6 0 -58.804 8.64989 -25.8891 - 8 134.658 578 9 1 -64.3793 -0.355722 65.55 - 8 116.782 946 11 0 -56.7155 9.44999 123.976 -Number of digits in this event: 29 -Using G4ParticleGun... -Particle energy: 7.91753 LIN -Particle: e- -Event: 9 -Number of tracker hits in this event: 80 - 9 103.562 1297 10 1 79.5706 59.4762 95.55 - 9 103.072 1197 10 0 79.5702 59.4759 94.15 - 9 178.03 1297 9 1 79.568 59.4647 65.55 - 9 118.481 1197 9 0 79.5677 59.4631 64.15 - 9 140.633 1297 8 1 79.5624 59.427 35.55 - 9 175.09 1196 8 0 79.5627 59.4251 34.15 - 9 118.313 1297 7 1 79.574 59.3839 5.55 - 9 229.83 1196 7 0 79.5749 59.3831 4.15 - 9 107.59 1297 6 1 79.6033 59.3677 -24.45 - 9 130.99 1196 6 0 79.6033 59.3676 -25.85 - 9 347.074 1297 5 1 79.6011 59.3652 -54.45 - 9 666.614 1196 5 0 79.6011 59.3645 -55.85 - 9 363.25 1297 4 1 79.6077 59.3599 -84.45 - 9 403.756 1196 4 0 79.6063 59.3592 -85.85 - 9 116.416 1297 3 1 79.5757 59.3444 -114.45 - 9 124.336 1196 3 0 79.5739 59.3439 -115.85 - 9 290.025 1297 2 1 79.5324 59.334 -144.45 - 9 106.298 1196 2 0 79.5302 59.3325 -145.85 - 9 186.406 1297 1 1 79.4829 59.3095 -174.45 - 9 294.936 1196 1 0 79.4801 59.3088 -175.85 - 9 588.419 1296 0 1 79.4267 59.2983 -204.45 - 9 125.46 1196 0 0 79.4234 59.2984 -205.85 - 9 172.901 1299 3 1 79.9092 58.5251 -114.45 - 9 9.4518 1192 3 0 79.9012 58.452 -115.85 - 9 92.2574 1191 3 0 79.901 58.45 -115.888 - 9 142.509 1298 2 1 79.7205 56.9319 -144.45 - 9 143.271 1183 2 0 79.6114 56.7509 -145.85 - 9 126.951 1285 1 1 77.2005 53.0152 -174.45 - 9 43.4622 1164 1 0 77.0189 52.8662 -175.85 - 9 56.9733 1163 1 0 76.999 52.85 -176.005 - 9 96.5255 1266 0 1 73.2896 49.6421 -204.45 - 9 22.3286 1265 0 1 73.25 49.6023 -204.772 - 9 64.8444 1147 0 0 73.111 49.4696 -205.85 - 9 56.1424 1146 0 0 73.0904 49.45 -206.009 - 9 130.676 1294 3 1 79.0227 59.5717 -114.451 - 9 139.344 1197 3 0 78.9658 59.5883 -115.85 - 9 100.393 1287 2 1 77.5496 59.2398 -144.45 - 9 119.872 1195 2 0 77.5504 59.1659 -145.85 - 9 115.114 1287 1 1 77.518 57.735 -174.45 - 9 106.338 1188 1 0 77.4668 57.6986 -175.85 - 9 328.104 1282 0 1 76.5373 57.1315 -204.45 - 9 62.6787 1185 0 0 76.5861 57.0616 -205.851 - 9 75.4955 1184 0 0 76.5958 57.05 -206.032 - 9 227.71 1294 1 1 78.8943 59.4413 -174.45 - 9 105.882 1307 0 1 81.6054 58.9231 -204.45 - 9 112.941 1194 0 0 81.6603 58.9626 -205.85 - 9 140.438 1295 1 1 79.05 59.4548 -174.606 - 9 167.087 1197 1 0 80.0462 59.5464 -175.85 - 9 109.301 1411 0 1 102.4 61.5939 -204.45 - 9 220.316 1412 0 1 102.55 61.6061 -204.646 - 9 140.603 1208 0 0 103.476 61.6676 -205.85 - 9 97.9588 426 1 1 -94.75 113.609 -174.68 - 9 183.447 425 1 1 -94.95 113.674 -174.659 - 9 108.693 1296 4 1 79.3645 59.2348 -84.45 - 9 259.284 1195 4 0 79.3612 59.2271 -85.85 - 9 150.225 1296 3 1 79.2949 59.0596 -114.45 - 9 111.851 1195 3 0 79.2949 59.0558 -115.85 - 9 118.397 1296 2 1 79.3139 59.0066 -144.45 - 9 110.399 1194 2 0 79.3204 59.0001 -145.85 - 9 109.309 1296 1 1 79.4373 58.832 -174.45 - 9 116.5 1193 1 0 79.4334 58.8216 -175.85 - 9 140.908 1192 0 0 79.3543 58.5416 -205.85 - 9 24.7366 1209 0 0 79.5331 61.9544 -205.85 - 9 32.5338 1210 0 0 79.5412 62.05 -205.859 - 9 122.841 1298 0 1 79.744 66.7158 -204.85 - 9 113.04 1299 0 1 79.85 66.7912 -204.538 - 9 195.067 1300 0 1 80.05 66.8777 -204.49 - 9 3.81328 1297 0 1 79.45 58.3835 -204.455 - 9 167.206 1300 4 1 80.0542 59.1878 -84.4501 - 9 173.329 1194 4 0 80.1916 59.0381 -85.85 - 9 130.276 1314 3 1 83.0209 55.0502 -114.45 - 9 183.533 1172 3 0 83.0482 54.6108 -115.85 - 9 106.861 1317 2 1 83.4889 46.488 -144.45 - 9 136.848 1131 2 0 83.504 46.3129 -145.85 - 9 139.61 1321 1 1 84.2797 43.1148 -174.45 - 9 167.799 1113 1 0 84.2871 42.83 -175.85 - 9 123.312 1323 0 1 84.7428 36.3564 -204.45 - 9 152.622 1081 0 0 84.8436 36.2885 -205.85 - 9 8.47789 1096 3 0 76.5919 39.2552 -116.25 - 9 141.583 1095 3 0 76.5933 39.25 -116.233 -Number of digits in this event: 46 -Using G4ParticleGun... -Particle energy: 2.24649 LIN -Particle: e- -Event: 10 -Number of tracker hits in this event: 127 - 10 170.433 449 9 1 -90.1689 27.0931 65.55 - 10 128.475 1035 9 0 -90.175 27.0953 64.15 - 10 100.457 449 8 1 -90.2899 27.1452 35.55 - 10 368.639 1035 8 0 -90.2962 27.1412 34.15 - 10 102.543 448 7 1 -90.4075 27.0539 5.55 - 10 272.691 1035 7 0 -90.4135 27.0521 4.15 - 10 113.968 448 6 1 -90.5315 27.0266 -24.45 - 10 373.006 1034 6 0 -90.5343 27.0169 -25.85 - 10 101.511 447 5 1 -90.5861 26.8201 -54.45 - 10 200.184 1033 5 0 -90.5929 26.8138 -55.85 - 10 114.94 447 4 1 -90.7438 26.6795 -84.45 - 10 174.897 1033 4 0 -90.7541 26.6732 -85.85 - 10 123.183 445 3 1 -90.9745 26.5328 -114.45 - 10 205.981 1032 3 0 -90.9837 26.5232 -115.85 - 10 172.889 444 2 1 -91.1539 26.3537 -144.45 - 10 200.282 1031 2 0 -91.1686 26.3467 -145.85 - 10 249.429 443 1 1 -91.4492 26.2193 -174.45 - 10 142.802 1030 1 0 -91.4627 26.215 -175.85 - 10 109.168 442 0 1 -91.7358 26.123 -204.45 - 10 140.106 1030 0 0 -91.75 26.1106 -205.85 - 10 97.0712 1034 5 0 -90.5672 26.85 -56.1251 - 10 29.8715 1034 8 0 -90.478 27.0498 33.9046 - 10 62.8649 1035 10 0 -90.0499 27.116 93.8134 - 10 38.9707 1036 10 0 -90.1501 27.2726 93.768 - 10 383.407 449 7 1 -90.3106 27.2377 5.55 - 10 49.0547 1034 7 0 -89.9292 27.05 3.93106 - 10 35.182 485 6 1 -83.036 23.3294 -24.45 - 10 88.4373 484 6 1 -83.05 23.3289 -24.5386 - 10 121.484 1016 6 0 -83.2505 23.3406 -25.85 - 10 115.803 465 5 1 -86.9724 23.8562 -54.45 - 10 102.432 1018 5 0 -87.1271 23.7448 -55.85 - 10 104.582 454 4 1 -89.0885 21.7726 -84.45 - 10 118.15 1008 4 0 -89.2499 21.8434 -85.8511 - 10 190.266 440 3 1 -92.0493 21.5978 -114.45 - 10 70.9183 1006 3 0 -92.115 21.3036 -115.85 - 10 37.5665 1005 3 0 -92.1189 21.25 -116.091 - 10 120.656 440 2 1 -92.0119 14.779 -144.45 - 10 32.893 969 2 0 -92.1841 13.9218 -145.85 - 10 80.6637 968 2 0 -92.1954 13.85 -145.956 - 10 10.0716 967 2 0 -92.2241 13.65 -146.218 - 10 302.354 421 1 1 -95.8322 -7.69152 -174.45 - 10 40.0326 845 1 0 -95.5707 -10.8728 -175.85 - 10 55.6873 844 1 0 -95.5536 -11.05 -175.924 - 10 59.5661 843 1 0 -95.5265 -11.25 -176.01 - 10 60.1504 842 1 0 -95.5103 -11.45 -176.126 - 10 10.5949 841 1 0 -95.498 -11.65 -176.235 - 10 206.53 435 0 1 -93.0178 -64.9819 -204.45 - 10 127.61 572 0 0 -92.9374 -65.5493 -205.85 - 10 52.4529 571 0 0 -92.9287 -65.65 -206.129 - 10 2.74812 432 0 0 -105.041 -93.7373 -206.249 - 10 74.5783 431 0 0 -105.049 -93.75 -206.24 - 10 78.374 430 0 0 -105.165 -93.95 -206.092 - 10 37.193 429 0 0 -105.286 -94.15 -205.93 - 10 397.978 371 0 1 -105.768 -95.2255 -204.85 - 10 136.699 400 1 0 -120.146 -100.021 -176.25 - 10 234.758 296 1 1 -120.752 -100.422 -174.85 - 10 9.64311 295 1 1 -120.95 -100.49 -174.483 - 10 54.9292 405 1 0 -121.317 -99.048 -175.85 - 10 52.7727 406 1 0 -121.356 -98.95 -175.999 - 10 44.8585 407 1 0 -121.396 -98.75 -176.119 - 10 34.5961 372 0 0 -99.6647 -105.646 -206.25 - 10 240.8 371 0 0 -99.7161 -105.751 -206.204 - 10 22.9289 370 0 0 -99.8007 -105.95 -206.103 - 10 167.775 403 0 1 -99.5245 -105.625 -204.85 - 10 172.677 404 0 1 -99.3499 -105.77 -204.747 - 10 133.019 254 0 1 -129.273 15.4851 -204.45 - 10 40.5071 974 0 0 -129.087 14.8681 -205.85 - 10 112.953 973 0 0 -129.083 14.85 -205.88 - 10 181.451 1033 7 0 -89.6901 26.8328 4.15 - 10 187.563 632 6 1 -53.5429 16.6735 -24.4502 - 10 57.5383 633 6 1 -53.45 16.7526 -24.6718 - 10 53.0267 980 6 0 -52.8459 16.1182 -25.85 - 10 125.179 979 6 0 -52.7432 16.05 -25.9653 - 10 75.883 978 6 0 -52.4459 15.85 -26.1298 - 10 107.625 811 6 0 -7.01819 -17.7874 -26.2498 - 10 209.437 810 6 0 -6.95536 -17.85 -26.1858 - 10 209.269 809 6 0 -6.60689 -18.05 -25.9774 - 10 220.58 808 6 0 -6.79851 -18.25 -26.2382 - 10 4.93826 631 6 1 -53.65 16.6721 -24.8264 - 10 77.5551 982 6 0 -54.1612 16.585 -25.85 - 10 82.186 983 6 0 -54.2084 16.6501 -26.0567 - 10 118.688 452 6 1 -89.6494 26.9622 -24.45 - 10 139.813 457 5 1 -88.6069 26.2413 -54.45 - 10 134.249 1030 5 0 -88.5998 26.2267 -55.85 - 10 203.158 458 4 1 -88.3731 25.8686 -84.45 - 10 125.982 1028 4 0 -88.4679 25.7635 -85.85 - 10 135.589 449 3 1 -90.2635 23.6455 -114.45 - 10 142.764 1017 3 0 -90.2812 23.5192 -115.85 - 10 116.488 449 2 1 -90.276 21.0088 -144.45 - 10 102.252 1004 2 0 -90.2431 20.967 -145.85 - 10 145.8 449 1 1 -90.1696 20.3375 -174.45 - 10 96.2821 1001 1 0 -90.2174 20.3536 -175.851 - 10 90.4671 447 0 1 -90.739 20.9788 -204.45 - 10 107.51 1004 0 0 -90.6505 20.8867 -205.85 - 10 60.5851 991 1 0 -90.1663 18.3829 -175.85 - 10 109.822 1029 4 0 -88.4069 26.0079 -85.85 - 10 10.697 1030 4 0 -88.4149 26.05 -86.2145 - 10 254.91 454 3 1 -89.1195 29.4576 -114.451 - 10 120.796 1046 3 0 -89.128 29.3937 -115.85 - 10 95.8583 454 2 1 -89.1355 28.1241 -144.45 - 10 47.6382 455 2 1 -89.05 28.0838 -144.747 - 10 168.051 1039 2 0 -88.7492 27.9418 -145.85 - 10 173.797 495 1 1 -81.0463 23.974 -174.45 - 10 125.629 1020 1 0 -80.7407 24.1481 -175.85 - 10 249.025 523 0 1 -75.447 27.3986 -204.45 - 10 79.7467 1038 0 0 -75.2568 27.7736 -205.85 - 10 37.1197 1039 0 0 -75.2106 27.85 -206.134 - 10 69.8678 524 0 1 -75.25 27.2237 -204.735 - 10 376.925 1035 0 0 -74.2112 27.1246 -205.85 - 10 62.5096 450 1 1 -90.05 24.2948 -174.55 - 10 71.1169 451 1 1 -89.85 24.3268 -174.628 - 10 45.9769 452 1 1 -89.6497 24.3463 -174.619 - 10 49.0072 453 1 1 -89.4495 24.3423 -174.604 - 10 54.3447 454 1 1 -89.25 24.3374 -174.606 - 10 60.5456 455 1 1 -89.0492 24.3419 -174.624 - 10 66.0772 456 1 1 -88.8497 24.3363 -174.647 - 10 60.6029 457 1 1 -88.65 24.3285 -174.69 - 10 41.403 458 1 1 -88.45 24.3359 -174.749 - 10 86.7135 459 1 1 -88.2498 24.3624 -174.797 - 10 51.5709 460 1 1 -88.0498 24.4205 -174.829 - 10 44.6995 1025 1 0 -84.5433 25.2158 -175.85 - 10 236.104 1026 1 0 -84.3926 25.25 -175.891 - 10 7.30757 712 0 1 -37.6371 22.6754 -204.45 - 10 107.813 711 0 1 -37.65 22.6637 -204.47 - 10 18.538 710 0 1 -37.85 22.4866 -204.816 - 10 21.3551 1010 0 0 -38.511 22.0728 -205.85 - 10 103.09 1009 0 0 -38.5538 22.05 -205.915 -Number of digits in this event: 50 -Using G4ParticleGun... -Particle energy: 4.47622 LIN -Particle: e- -Event: 11 -Number of tracker hits in this event: 24 - 11 194.317 1411 7 1 102.53 106.399 5.55 - 11 146.041 1431 7 0 102.531 106.399 4.15 - 11 262.75 1411 6 1 102.548 106.402 -24.45 - 11 199.818 1431 6 0 102.548 106.403 -25.85 - 11 132.31 1411 5 1 102.532 106.429 -54.45 - 11 101.011 1431 5 0 102.534 106.432 -55.85 - 11 128.492 1412 4 1 102.579 106.51 -84.45 - 11 149.537 1431 4 0 102.578 106.523 -85.85 - 11 286.047 1412 3 1 102.558 106.75 -114.45 - 11 110.798 1433 3 0 102.545 106.755 -115.85 - 11 121.388 1410 2 1 102.216 106.827 -144.45 - 11 298.164 1433 2 0 102.199 106.817 -145.85 - 11 255.037 1408 1 1 101.799 106.533 -174.45 - 11 105.242 1431 1 0 101.767 106.512 -175.85 - 11 110.718 1405 0 1 101.191 106.051 -204.45 - 11 176.905 1430 0 0 101.247 106.172 -205.85 - 11 328.491 1333 12 0 -58.4153 86.7184 153.75 - 11 44.5246 1502 6 0 9.01892 120.686 -26.2499 - 11 282.005 1503 6 0 8.95282 120.75 -26.1468 - 11 106.703 1412 6 1 102.55 106.403 -24.6391 - 11 129.449 1434 6 0 102.019 107.077 -25.85 - 11 74.3107 1410 7 1 102.35 106.465 5.47031 - 11 159.688 1409 7 1 102.15 106.526 5.48577 - 11 206.58 1408 7 1 101.95 106.697 5.43854 -Number of digits in this event: 19 -Using G4ParticleGun... -Particle energy: 5.51204 LIN -Particle: e- -Event: 12 -Number of tracker hits in this event: 82 - 12 143.821 447 10 1 -90.6731 -29.6773 95.55 - 12 104.535 751 10 0 -90.6741 -29.6782 94.15 - 12 119.321 447 9 1 -90.6938 -29.6924 65.55 - 12 234.02 751 9 0 -90.6946 -29.6937 64.15 - 12 436.318 447 8 1 -90.7119 -29.7321 35.55 - 12 299.711 751 8 0 -90.7131 -29.7313 34.15 - 12 127.164 447 7 1 -90.741 -29.7112 5.55 - 12 107.255 751 7 0 -90.7411 -29.7109 4.15 - 12 133.388 447 6 1 -90.7301 -29.6744 -24.45 - 12 192.324 751 6 0 -90.7301 -29.6723 -25.85 - 12 265.391 447 5 1 -90.724 -29.6398 -54.45 - 12 100.801 752 5 0 -90.7255 -29.639 -55.85 - 12 429.716 446 4 1 -90.7631 -29.6184 -84.45 - 12 134.397 752 4 0 -90.7638 -29.6134 -85.85 - 12 136.417 446 3 1 -90.7735 -29.5118 -114.45 - 12 399.225 752 3 0 -90.7731 -29.5092 -115.85 - 12 161.046 446 2 1 -90.7667 -29.4565 -144.45 - 12 138.813 752 2 0 -90.7678 -29.4531 -145.85 - 12 113.436 446 1 1 -90.7883 -29.3979 -174.45 - 12 138.278 753 1 0 -90.7897 -29.3963 -175.85 - 12 192.234 446 0 1 -90.8164 -29.3643 -204.45 - 12 153.658 753 0 0 -90.8167 -29.3618 -205.85 - 12 12.1108 760 0 0 -69.4569 -28.0427 -206.25 - 12 106.323 759 0 0 -69.4728 -28.05 -206.231 - 12 1.77683 1136 0 0 14.0461 47.2892 -206.25 - 12 136.049 371 1 1 -105.873 -12.9273 -174.85 - 12 29.0232 99 6 1 -160.161 -55.9931 -24.85 - 12 136.792 753 3 0 -90.7981 -29.4499 -115.889 - 12 50.9483 721 0 0 -107.269 -35.7121 -206.25 - 12 100.513 722 0 0 -107.326 -35.6499 -206.141 - 12 303.693 723 0 0 -107.381 -35.45 -206.183 - 12 346.884 446 7 1 -90.7989 -30.5118 5.55 - 12 124.432 747 7 0 -90.8149 -30.5409 4.15 - 12 193.101 444 6 1 -91.2194 -31.2069 -24.45 - 12 100.534 743 6 0 -91.202 -31.2532 -25.85 - 12 195.144 738 5 0 -90.7392 -32.2687 -55.85 - 12 281.381 731 4 0 -90.9602 -33.7053 -85.85 - 12 182.318 442 3 1 -91.7343 -35.545 -114.45 - 12 114.645 722 3 0 -91.7272 -35.5856 -115.85 - 12 116.629 442 2 1 -91.6856 -36.5581 -144.45 - 12 57.4853 717 2 0 -91.6916 -36.6372 -145.85 - 12 43.2954 716 2 0 -91.6928 -36.65 -146.08 - 12 121.981 441 1 1 -91.7949 -38.3142 -174.45 - 12 109.399 708 1 0 -91.8121 -38.3827 -175.85 - 12 113.526 439 0 1 -92.3134 -39.916 -204.45 - 12 57.2851 700 0 0 -92.3555 -40.032 -205.85 - 12 41.4964 699 0 0 -92.3623 -40.05 -206.068 - 12 67.4178 441 4 1 -91.75 -34.2833 -84.6808 - 12 119.625 448 3 1 -90.5174 -37.1915 -114.45 - 12 109.76 713 3 0 -90.5089 -37.3768 -115.85 - 12 107.285 449 2 1 -90.1714 -40.5306 -144.45 - 12 154.247 696 2 0 -90.1926 -40.7022 -145.85 - 12 86.6319 455 1 1 -88.9126 -44.5967 -174.451 - 12 30.0824 456 1 1 -88.85 -44.6563 -174.751 - 12 130.343 675 1 0 -88.6188 -44.9115 -175.85 - 12 149.956 489 0 1 -82.1564 -51.847 -204.45 - 12 175.561 638 0 0 -81.8238 -52.3171 -205.85 - 12 116.227 750 8 0 -90.7049 -29.9758 34.1497 - 12 149.242 728 7 0 -90.7309 -34.3578 4.15 - 12 94.8792 457 6 1 -88.4972 -36.1447 -24.4502 - 12 61.5111 458 6 1 -88.4499 -36.1952 -24.6797 - 12 132.12 717 6 0 -88.2428 -36.4595 -25.85 - 12 130.33 493 5 1 -81.4121 -43.1496 -54.45 - 12 145.825 682 5 0 -80.9254 -43.4952 -55.8508 - 12 84.2672 541 4 1 -71.7436 -50.1386 -84.45 - 12 90.3541 542 4 1 -71.65 -50.253 -84.5851 - 12 69.8137 643 4 0 -70.8531 -51.2941 -85.8504 - 12 69.0644 642 4 0 -70.721 -51.45 -86.0504 - 12 103.573 642 3 1 -51.5981 -73.8327 -114.451 - 12 93.7406 529 3 0 -51.3116 -74.1789 -115.85 - 12 30.0794 528 3 0 -51.2513 -74.25 -116.142 - 12 67.0424 671 2 1 -45.7342 -81.0601 -144.45 - 12 51.319 672 2 1 -45.65 -81.1515 -144.692 - 12 355.585 491 2 0 -45.1362 -81.6671 -145.85 - 12 0.242355 490 2 0 -44.9444 -81.85 -146.248 - 12 121.499 744 1 1 -31.1999 -95.1958 -174.45 - 12 106.612 427 1 0 -31.2547 -94.6723 -175.85 - 12 22.7752 428 1 0 -31.2648 -94.55 -176.185 - 12 80.4221 742 0 1 -31.6314 -84.9069 -204.45 - 12 84.947 743 0 1 -31.45 -84.8441 -204.647 - 12 6.14128 477 0 0 -30.4899 -84.4578 -205.85 - 12 116.115 478 0 0 -30.471 -84.45 -205.874 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 5.73369 LIN -Particle: e- -Event: 13 -Number of tracker hits in this event: 72 - 13 131.841 543 10 1 -71.3698 -73.8142 95.55 - 13 271.289 531 10 0 -71.3696 -73.8144 94.15 - 13 112.563 543 9 1 -71.3637 -73.8147 65.55 - 13 130.068 531 9 0 -71.3634 -73.8172 64.15 - 13 122.415 543 8 1 -71.3625 -73.8718 35.55 - 13 161.66 530 8 0 -71.3614 -73.8763 34.15 - 13 108.351 543 7 1 -71.3462 -73.9704 5.55 - 13 129.165 530 7 0 -71.3454 -73.9774 4.15 - 13 186.632 543 6 1 -71.3283 -74.1144 -24.45 - 13 111.668 529 6 0 -71.3294 -74.1185 -25.85 - 13 123.263 543 5 1 -71.3571 -74.2072 -54.45 - 13 118.115 529 5 0 -71.3545 -74.2032 -55.85 - 13 118.217 543 4 1 -71.3485 -74.0734 -84.45 - 13 148.878 529 4 0 -71.3409 -74.0765 -85.85 - 13 123.493 544 3 1 -71.1949 -74.1563 -114.45 - 13 238.17 529 3 0 -71.1844 -74.1651 -115.85 - 13 99.7823 545 2 1 -70.9853 -74.3198 -144.45 - 13 119.984 528 2 0 -70.9733 -74.3312 -145.85 - 13 113.582 546 1 1 -70.7222 -74.5636 -174.45 - 13 254.459 527 1 0 -70.7062 -74.5624 -175.85 - 13 199.283 548 0 1 -70.3639 -74.5224 -204.45 - 13 169.197 527 0 0 -70.3512 -74.526 -205.85 - 13 63.0969 565 2 0 5.53163 -66.85 -146.05 - 13 133.686 927 2 1 5.51366 -92.3346 -144.85 - 13 178.325 547 0 1 -70.45 -74.4188 -204.676 - 13 66.2242 546 0 1 -70.6501 -74.361 -204.714 - 13 278.989 543 2 1 -71.3421 -74.4595 -144.45 - 13 304.42 527 2 0 -71.3469 -74.4715 -145.85 - 13 694.301 543 1 1 -71.3172 -74.6732 -174.45 - 13 142.809 526 1 0 -71.3228 -74.6891 -175.85 - 13 385.591 543 0 1 -71.3478 -74.8215 -204.45 - 13 309.327 525 0 0 -71.3321 -74.8507 -205.85 - 13 33.3632 544 1 1 -71.25 -74.7751 -174.562 - 13 11.5436 522 1 0 -71.9156 -75.45 -175.998 - 13 121.095 526 0 0 -71.2736 -74.7407 -205.85 - 13 25.2152 782 0 0 -106.693 -23.65 -206.249 - 13 49.626 871 1 1 -5.85 127.68 -174.715 - 13 67.6783 872 1 1 -5.65 127.951 -174.645 - 13 167.291 545 1 1 -71.0094 -74.359 -174.651 - 13 460.559 528 1 0 -71.0072 -74.3619 -175.85 - 13 241.389 545 0 1 -70.9528 -74.4306 -204.45 - 13 236.892 528 0 0 -70.9444 -74.4334 -205.85 - 13 272.892 542 3 1 -71.4859 -73.9634 -114.45 - 13 295.238 530 3 0 -71.4626 -74.0048 -115.85 - 13 161.903 549 2 1 -70.131 -74.8905 -144.45 - 13 128.675 525 2 0 -69.8531 -74.9655 -145.85 - 13 119.905 580 1 1 -63.917 -76.6692 -174.45 - 13 13.8976 581 1 1 -63.85 -76.7243 -174.839 - 13 179.618 515 1 0 -63.6577 -76.8553 -175.85 - 13 131.054 610 0 1 -58.0023 -79.9911 -204.45 - 13 123.496 499 0 0 -57.6707 -80.1259 -205.85 - 13 294.078 418 1 1 -96.3991 -26.2453 -174.45 - 13 8.55328 443 4 0 -33.9456 -91.3765 -86.25 - 13 118.829 734 4 1 -33.108 -90.563 -84.8498 - 13 9.81354 514 1 0 -63.5947 -77.05 -176.214 - 13 242.284 1105 1 0 -63.9473 41.1729 -176.25 - 13 235.264 1106 1 0 -63.9621 41.2501 -176.217 - 13 87.6072 542 2 1 -71.5544 -73.9866 -144.45 - 13 132.746 530 2 0 -71.5492 -74.0059 -145.85 - 13 237.332 542 0 1 -71.5135 -74.8905 -204.45 - 13 39.7451 730 0 0 -48.8396 -33.9725 -206.25 - 13 72.4126 731 0 0 -48.7604 -33.85 -206.193 - 13 103.404 732 0 0 -48.71 -33.65 -206.018 - 13 286.616 662 0 1 -47.6101 -33.156 -204.85 - 13 7.11017 544 0 1 -71.2346 -74.6531 -204.45 - 13 226.277 536 0 0 -72.8661 -72.8086 -205.85 - 13 5.354 468 0 1 -86.4281 -73.2164 -204.85 - 13 32.6741 467 0 1 -86.45 -73.2176 -204.847 - 13 111.407 538 0 0 -88.6917 -72.4153 -205.85 - 13 7.62403 539 0 0 -89.0905 -72.25 -205.855 - 13 67.5149 444 0 1 -91.3031 -70.9581 -204.85 - 13 185.834 443 0 1 -91.35 -70.9288 -204.843 -Number of digits in this event: 45 -Using G4ParticleGun... -Particle energy: 8.37319 LIN -Particle: e- -Event: 14 -Number of tracker hits in this event: 111 - 14 151.879 1031 10 1 26.3872 -99.1446 95.55 - 14 104.165 405 10 0 26.3868 -99.1441 94.15 - 14 101.957 1031 9 1 26.3747 -99.1347 65.55 - 14 153.366 405 9 0 26.3741 -99.134 64.15 - 14 109.469 1031 8 1 26.3648 -99.1198 35.55 - 14 154.484 405 8 0 26.3644 -99.1193 34.15 - 14 117.088 1031 7 1 26.3494 -99.1046 5.55 - 14 126.896 405 7 0 26.3495 -99.1028 4.15 - 14 138.479 1031 6 1 26.3583 -99.0649 -24.45 - 14 133.153 405 6 0 26.3648 -99.065 -25.85 - 14 388.09 1032 5 1 26.4857 -99.0595 -54.45 - 14 476.172 405 5 0 26.4957 -99.0581 -55.85 - 14 117.72 1033 4 1 26.6947 -99.0158 -84.45 - 14 683.118 405 4 0 26.706 -99.0131 -85.85 - 14 164.759 1034 3 1 26.9321 -98.9801 -114.45 - 14 598.202 405 3 0 26.9391 -98.9808 -115.85 - 14 106.092 1035 2 1 27.0985 -98.9952 -144.45 - 14 410.997 405 2 0 27.1102 -98.9932 -145.85 - 14 188.673 1036 1 1 27.3553 -98.9666 -174.45 - 14 264.617 405 1 0 27.3623 -98.963 -175.85 - 14 246.837 1037 0 1 27.4904 -98.8864 -204.45 - 14 277.035 406 0 0 27.4958 -98.8847 -205.85 - 14 53.3469 568 0 0 7.87406 -66.45 -205.942 - 14 74.9859 941 0 1 8.4247 -65.3507 -204.85 - 14 270.84 1435 7 1 107.201 -52.4311 5.15 - 14 3.86021 1436 7 1 107.35 -52.3577 5.5473 - 14 116.315 1030 4 1 26.1358 -98.9863 -84.4511 - 14 256 406 4 0 25.9438 -98.8165 -85.851 - 14 257.864 1010 3 1 22.2423 -94.58 -114.45 - 14 197.526 429 3 0 22.0471 -94.2961 -115.85 - 14 105.631 994 2 1 18.8791 -89.0624 -144.45 - 14 9.20912 993 2 1 18.85 -89.0407 -144.816 - 14 176.583 455 2 0 18.7759 -88.9773 -145.85 - 14 178.898 990 1 1 18.1936 -86.7123 -174.45 - 14 25.5384 425 3 0 21.89 -95.1198 -115.85 - 14 98.0632 424 3 0 21.8697 -95.15 -115.949 - 14 117.647 971 2 1 14.3684 -106.24 -144.45 - 14 77.4026 372 2 0 14.2001 -105.669 -145.85 - 14 39.2352 373 2 0 14.1742 -105.55 -146.11 - 14 48.9343 953 1 1 10.6911 -94.0454 -174.45 - 14 76.8911 952 1 1 10.65 -94.0981 -174.632 - 14 100.565 429 1 0 10.3144 -94.2121 -175.85 - 14 33.5496 329 1 0 -27.3486 -114.302 -176.25 - 14 98.3365 328 1 0 -27.433 -114.35 -176.185 - 14 96.9376 327 1 0 -27.6226 -114.55 -175.988 - 14 8.25099 326 1 0 -27.7536 -114.75 -175.866 - 14 139.619 757 1 1 -28.5914 -116.789 -174.85 - 14 512.225 756 1 1 -28.65 -116.963 -174.759 - 14 118.862 403 5 0 26.6219 -99.361 -55.85 - 14 161.202 1044 4 1 28.9418 -105.972 -84.45 - 14 28.9014 1045 4 1 29.05 -106.196 -84.7701 - 14 90.8171 365 4 0 29.4295 -106.973 -85.85 - 14 67.1198 364 4 0 29.5018 -107.15 -86.0778 - 14 83.5672 1096 3 1 39.3521 -128.967 -114.45 - 14 26.3569 1095 3 1 39.25 -129.046 -114.757 - 14 45.5167 254 3 0 38.7728 -129.319 -115.85 - 14 133.583 253 3 0 38.7134 -129.35 -115.984 - 14 68.9718 943 2 1 8.84243 -134.404 -144.45 - 14 77.3214 942 2 1 8.64986 -134.572 -144.562 - 14 118.489 941 2 1 8.45 -134.757 -144.666 - 14 78.0623 940 2 1 8.25 -134.953 -144.759 - 14 206.533 217 2 0 5.82231 -136.565 -145.85 - 14 147.208 216 2 0 5.50286 -136.75 -146.005 - 14 131.345 718 1 1 -36.2964 -156.173 -174.45 - 14 103.204 120 1 0 -36.2071 -156.145 -175.85 - 14 179.509 143 2 0 -27.101 -151.502 -146.25 - 14 233.683 763 2 1 -27.3284 -151.123 -144.85 - 14 247.704 762 2 1 -27.45 -151.213 -144.679 - 14 77.1151 761 2 1 -27.65 -151.41 -144.557 - 14 99.0382 231 2 0 7.75028 -133.852 -145.85 - 14 27.0099 1212 5 1 62.45 -52.0921 -54.6313 - 14 12.2918 232 2 0 7.44308 -133.75 -146.21 - 14 53.8985 368 2 0 -19.1787 -106.47 -146.25 - 14 83.2738 369 2 0 -19.2042 -106.35 -146.08 - 14 131.861 807 2 1 -18.6399 -105.315 -144.85 - 14 84.4426 806 2 1 -18.65 -104.975 -144.628 - 14 270.67 1031 5 1 26.3561 -99.0529 -54.45 - 14 138.544 1040 4 1 28.0612 -98.9749 -84.4503 - 14 152.382 1053 3 1 30.6728 -97.3596 -114.45 - 14 134.084 414 3 0 30.9833 -97.2493 -115.85 - 14 93.0177 1089 2 1 37.8771 -95.4045 -144.45 - 14 45.1946 1090 2 1 38.05 -95.2545 -144.728 - 14 139.349 427 2 0 38.7332 -94.6517 -145.85 - 14 83.6013 428 2 0 38.849 -94.55 -146.04 - 14 12.0543 1185 1 1 57.227 -79.0532 -174.45 - 14 142.105 1186 1 1 57.25 -79.0277 -174.494 - 14 76.2449 509 1 0 57.9235 -78.1871 -175.85 - 14 87.4447 510 1 0 58.0331 -78.0499 -176.071 - 14 75.2209 1260 0 1 72.166 -60.1521 -204.45 - 14 57.7255 1261 0 1 72.25 -60.0255 -204.72 - 14 41.94 602 0 0 72.5914 -59.5068 -205.85 - 14 90.0701 603 0 0 72.6295 -59.4498 -205.973 - 14 355.596 1031 4 1 26.4167 -99.0759 -84.45 - 14 395.287 1031 3 1 26.4286 -99.1297 -114.45 - 14 135.865 1032 2 1 26.5571 -99.1238 -144.45 - 14 128.586 1033 1 1 26.6889 -99.155 -174.45 - 14 399.021 1032 0 1 26.5747 -99.0457 -204.45 - 14 125.82 405 0 0 26.585 -99.0247 -205.85 - 14 235.169 1031 2 1 26.3504 -99.0044 -144.45 - 14 143.728 1031 1 1 26.3132 -98.8721 -174.45 - 14 119.951 406 1 0 26.3096 -98.8696 -175.85 - 14 134.373 1030 0 1 26.2437 -98.8368 -204.45 - 14 179.24 318 0 0 -16.6749 -116.393 -206.25 - 14 139.876 319 0 0 -16.6258 -116.35 -206.096 - 14 133.76 404 2 0 26.4408 -99.3181 -145.85 - 14 113.286 1032 1 1 26.5351 -99.4264 -174.45 - 14 112.064 403 1 0 26.5401 -99.4192 -175.85 - 14 117.987 404 0 0 26.5755 -99.2247 -205.85 - 14 162.942 412 2 0 -54.55 -97.5833 -146.25 - 14 227.438 413 2 0 -54.6038 -97.55 -145.976 - 14 112.281 404 4 0 26.2931 -99.15 -86.2249 -Number of digits in this event: 56 -Using G4ParticleGun... -Particle energy: 7.54604 LIN -Particle: e- -Event: 15 -Number of tracker hits in this event: 51 - 15 138.727 1368 10 1 93.7796 34.2097 95.55 - 15 169.989 1070 10 0 93.7797 34.2096 94.15 - 15 120.43 1368 9 1 93.7827 34.2003 65.55 - 15 116.315 1070 9 0 93.7813 34.1988 64.15 - 15 132.212 1367 8 1 93.7492 34.1694 35.55 - 15 126.54 1070 8 0 93.7475 34.1684 34.15 - 15 131.292 1367 7 1 93.7124 34.1438 5.55 - 15 131.104 1070 7 0 93.7116 34.1429 4.15 - 15 101.637 1367 6 1 93.6886 34.125 -24.45 - 15 96.1834 1070 6 0 93.6879 34.1237 -25.85 - 15 264.26 1367 5 1 93.6684 34.0963 -54.45 - 15 104.119 1070 5 0 93.6679 34.0956 -55.85 - 15 133.12 1367 4 1 93.6514 34.0857 -84.45 - 15 123.618 1070 4 0 93.6538 34.0841 -85.85 - 15 111.633 1367 3 1 93.7104 34.0457 -114.45 - 15 121.37 1069 3 0 93.7127 34.0448 -115.85 - 15 133.499 1368 2 1 93.7591 34.021 -144.45 - 15 121.784 1069 2 0 93.7607 34.0198 -145.85 - 15 149.111 1368 1 1 93.7857 33.9962 -174.45 - 15 290.068 1069 1 0 93.7869 33.9973 -175.85 - 15 281.098 1368 0 1 93.8185 34.0182 -204.45 - 15 119.82 1069 0 0 93.8185 34.0183 -205.85 - 15 246.94 1369 0 1 93.95 33.7012 -204.536 - 15 3.66479 1216 2 0 98.8968 63.438 -146.25 - 15 75.8275 1217 2 0 98.8992 63.45 -146.238 - 15 55.7443 1218 2 0 98.8723 63.6502 -146.069 - 15 53.1227 1219 2 0 98.7818 63.85 -145.998 - 15 25.8867 1220 2 0 98.6733 64.05 -145.916 - 15 145.662 1387 2 1 97.6922 64.9651 -144.85 - 15 282.279 1386 2 1 97.55 65.1196 -144.715 - 15 28.6188 1231 2 0 97.8966 66.4301 -145.85 - 15 72.7081 1232 2 0 97.9022 66.45 -145.934 - 15 72.5352 1233 2 0 97.8171 66.65 -146.075 - 15 63.5657 1234 2 0 97.6817 66.85 -146.111 - 15 218.738 1366 1 1 93.5439 34.0334 -174.45 - 15 118.18 1366 0 1 93.4376 31.3923 -204.451 - 15 79.5041 1054 0 0 93.2913 30.94 -205.85 - 15 38.7767 1053 0 0 93.2604 30.85 -206.13 - 15 13.6151 1367 1 1 93.5512 34.0694 -174.45 - 15 143.378 1071 1 0 93.2712 34.3783 -175.85 - 15 11.3025 1326 0 1 85.2592 38.6402 -204.45 - 15 112.388 1325 0 1 85.25 38.6485 -204.479 - 15 117.838 1095 0 0 84.7693 39.0755 -205.85 - 15 224.709 1072 1 0 93.2642 34.4501 -175.948 - 15 93.6503 1107 0 0 100.052 41.45 -206.102 - 15 59.483 701 4 1 -39.65 144.592 -84.5714 - 15 3.71952 1524 4 0 -6.12535 125.139 -86.2499 - 15 261.997 1525 4 0 -6.12173 125.15 -86.2371 - 15 52.7949 871 4 1 -5.82619 124.61 -84.85 - 15 82.2585 1523 4 0 -5.43356 124.818 -85.85 - 15 106.257 1367 10 1 93.7499 34.2098 95.5419 -Number of digits in this event: 25 -Using G4ParticleGun... -Particle energy: 1.71811 LIN -Particle: e- -Event: 16 -Number of tracker hits in this event: 59 - 16 217.096 603 10 0 -100.645 -59.279 94.1098 - 16 187.125 397 9 1 -100.641 -59.276 65.55 - 16 119.857 603 9 0 -100.644 -59.2769 64.15 - 16 110.918 397 8 1 -100.719 -59.2893 35.55 - 16 119.372 603 8 0 -100.725 -59.2882 34.15 - 16 122.787 396 7 1 -100.871 -59.2586 5.55 - 16 188.195 603 7 0 -100.875 -59.2552 4.15 - 16 365.97 395 6 1 -101.007 -59.1832 -24.45 - 16 397.853 604 6 0 -100.993 -59.1714 -25.85 - 16 306.967 397 5 1 -100.702 -58.9593 -54.45 - 16 111.946 605 5 0 -100.684 -58.9477 -55.85 - 16 109.013 399 4 1 -100.295 -58.7526 -84.45 - 16 114.446 606 4 0 -100.27 -58.7401 -85.85 - 16 90.7034 401 3 1 -99.7828 -58.4804 -114.45 - 16 0.883287 607 3 0 -99.7919 -58.4501 -115.85 - 16 113.509 608 3 0 -99.7919 -58.45 -115.855 - 16 126.836 400 2 1 -99.9617 -57.8143 -144.45 - 16 231.575 611 2 0 -99.9591 -57.7845 -145.85 - 16 110.45 401 1 1 -99.9298 -57.15 -174.45 - 16 103.59 614 1 0 -99.9269 -57.1258 -175.85 - 16 150.348 401 0 1 -99.8702 -56.6512 -204.45 - 16 117.541 616 0 0 -99.8579 -56.6582 -205.85 - 16 76.5146 617 0 0 -99.8651 -56.6499 -206.049 - 16 166.349 393 5 1 -101.358 -59.1354 -54.45 - 16 159.918 604 5 0 -101.366 -59.1559 -55.85 - 16 117.964 393 4 1 -101.464 -59.5259 -84.45 - 16 120.773 602 4 0 -101.489 -59.5376 -85.85 - 16 207.085 390 3 1 -102.034 -59.7974 -114.45 - 16 100.329 601 3 0 -102.065 -59.8031 -115.85 - 16 122.579 387 2 1 -102.675 -59.9039 -144.45 - 16 123.38 600 2 0 -102.712 -59.9705 -145.85 - 16 101.366 383 1 1 -103.439 -61.2762 -174.45 - 16 89.1367 593 1 0 -103.458 -61.2771 -175.85 - 16 154.118 381 0 1 -103.894 -61.1916 -204.45 - 16 164.233 594 0 0 -103.899 -61.1857 -205.85 - 16 59.6892 603 5 0 -100.641 -59.25 -55.993 - 16 112.316 403 4 1 -99.4954 -59.4216 -84.45 - 16 165.363 603 4 0 -99.4421 -59.4275 -85.85 - 16 389.464 409 3 1 -98.3453 -59.4824 -114.45 - 16 172.529 602 3 0 -98.2757 -59.4758 -115.85 - 16 111.629 417 2 1 -96.7268 -59.3133 -144.45 - 16 143.911 603 2 0 -96.6249 -59.2718 -145.85 - 16 91.5054 428 1 1 -94.3623 -58.2626 -174.45 - 16 104.854 429 1 1 -94.35 -58.2622 -174.62 - 16 13.915 608 1 0 -94.2684 -58.2506 -175.85 - 16 105.493 609 1 0 -94.2643 -58.25 -175.912 - 16 189.583 438 0 1 -92.5393 -57.7435 -204.45 - 16 113.737 611 0 0 -92.5165 -57.8351 -205.85 - 16 50.5705 610 0 0 -92.5161 -57.85 -206.044 - 16 304.82 410 3 1 -98.15 -59.4673 -114.721 - 16 183.805 605 0 0 -93.4602 -59.007 -205.85 - 16 67.8749 580 6 0 -106.548 -63.8601 -26.25 - 16 39.7969 581 6 0 -106.623 -63.85 -26 - 16 151.346 366 6 1 -106.854 -63.2381 -24.8499 - 16 87.5779 365 6 1 -106.953 -63.0001 -24.45 - 16 43.8891 364 6 1 -107.151 -63.0191 -24.7966 - 16 411.889 584 6 0 -113.134 -63.1544 -25.85 - 16 52.3398 583 6 0 -113.32 -63.25 -25.9601 - 16 83.4155 604 10 0 -100.748 -59.25 93.7897 -Number of digits in this event: 28 -Using G4ParticleGun... -Particle energy: 5.31586 LIN -Particle: e- -Event: 17 -Number of tracker hits in this event: 80 - 17 126.24 798 9 1 -20.4249 -126.255 65.55 - 17 116.279 269 9 0 -20.4244 -126.256 64.15 - 17 136.103 798 8 1 -20.4132 -126.263 35.55 - 17 184.576 269 8 0 -20.4116 -126.264 34.15 - 17 208.631 798 7 1 -20.3786 -126.293 5.55 - 17 93.9669 269 7 0 -20.3772 -126.294 4.15 - 17 100.234 798 6 1 -20.3695 -126.301 -24.45 - 17 166.051 269 6 0 -20.3724 -126.3 -25.85 - 17 120.361 798 5 1 -20.4401 -126.269 -54.45 - 17 321.055 269 5 0 -20.4597 -126.259 -55.85 - 17 99.3872 795 4 1 -20.9477 -126.051 -84.45 - 17 111.09 270 4 0 -20.9818 -126.049 -85.85 - 17 133.065 792 3 1 -21.6018 -125.921 -114.45 - 17 138.63 271 3 0 -21.6348 -125.923 -115.85 - 17 149.311 788 2 1 -22.3569 -126.098 -144.45 - 17 159.391 270 2 0 -22.3797 -126.076 -145.85 - 17 122.826 785 1 1 -22.8968 -125.705 -174.45 - 17 239.604 272 1 0 -22.8935 -125.699 -175.85 - 17 143.743 785 0 1 -22.905 -125.617 -204.45 - 17 137.615 272 0 0 -22.9261 -125.585 -205.85 - 17 111.002 297 4 0 -50.2127 -120.641 -86.25 - 17 109.884 298 4 0 -50.4676 -120.55 -86.057 - 17 141.034 647 4 1 -50.4604 -119.27 -84.8499 - 17 355.816 646 4 1 -50.65 -119.07 -84.5937 - 17 299.922 788 1 1 -22.3846 -125.747 -174.45 - 17 120.681 270 1 0 -22.307 -126.079 -175.85 - 17 168.657 269 1 0 -22.2873 -126.15 -176.157 - 17 63.6125 796 0 1 -20.7063 -132.627 -204.45 - 17 56.1356 797 0 1 -20.65 -132.682 -204.681 - 17 121.085 235 0 0 -20.3527 -132.969 -205.85 - 17 102.478 800 0 1 -19.9855 -127.369 -204.45 - 17 94.6791 263 0 0 -20.0636 -127.472 -205.85 - 17 51.8195 313 5 0 -8.31481 -117.366 -56.2499 - 17 14.7497 314 5 0 -8.25764 -117.35 -56.2374 - 17 119.867 796 2 1 -20.8454 -126.199 -144.45 - 17 108.675 795 2 1 -20.85 -126.206 -144.478 - 17 18.2369 268 2 0 -21.0546 -126.531 -145.85 - 17 113.948 267 2 0 -21.0667 -126.55 -145.946 - 17 84.1231 791 1 1 -21.7355 -138.697 -174.45 - 17 112.427 792 1 1 -21.65 -138.944 -174.62 - 17 71.7763 198 1 0 -21.0794 -140.385 -175.85 - 17 66.7048 197 1 0 -20.9975 -140.55 -176.03 - 17 89.5674 871 0 1 -5.8383 -154.046 -204.45 - 17 142.369 872 0 1 -5.65 -154.016 -204.644 - 17 51.0894 133 0 0 -5.03343 -153.434 -205.85 - 17 73.0275 134 0 0 -4.97722 -153.35 -206.028 - 17 56.7556 168 0 0 -6.81875 -146.388 -206.25 - 17 66.7051 169 0 0 -6.90454 -146.35 -206.043 - 17 55.4027 865 0 1 -7.00765 -145.83 -204.85 - 17 63.3396 864 0 1 -7.05 -145.769 -204.67 - 17 122.059 186 0 0 7.46889 -142.95 -205.94 - 17 77.5542 187 0 0 7.77138 -142.75 -205.893 - 17 135.316 269 2 0 -20.8527 -126.203 -145.85 - 17 133.646 795 1 1 -21.0445 -126.208 -174.45 - 17 118.613 794 0 1 -21.0945 -126.472 -204.45 - 17 128.511 268 0 0 -21.0931 -126.479 -205.85 - 17 4.93965 1541 2 1 128.472 91.0193 -144.45 - 17 213.883 797 1 1 -20.5823 -126.495 -174.45 - 17 46.2528 796 1 1 -20.6501 -126.482 -174.726 - 17 223.389 268 1 0 -20.9717 -126.406 -175.851 - 17 95.0744 754 0 1 -29.1959 -123.868 -204.45 - 17 95.5113 282 0 0 -29.3468 -123.612 -205.85 - 17 19.7345 283 0 0 -29.3747 -123.55 -206.178 - 17 48.4036 226 11 1 -134.834 -41.9809 125.15 - 17 35.7941 225 11 1 -134.95 -41.9058 125.179 - 17 114.695 690 11 0 -136.066 -41.9997 124.15 - 17 116.758 799 0 1 -20.0765 -124.918 -204.45 - 17 169.156 276 0 0 -20.0226 -124.905 -205.85 - 17 59.0646 134 1 0 -35.1719 -153.217 -176.25 - 17 83.1605 1675 12 1 155.35 35.2245 155.346 - 17 105.617 531 4 0 -34.2749 -73.6611 -86.25 - 17 51.3207 532 4 0 -34.1884 -73.65 -86.2331 - 17 96.4034 836 4 0 46.9228 -12.7392 -86.25 - 17 63.6732 1499 2 1 120.054 -149.15 -144.45 - 17 21.423 112 9 0 -10.8337 -157.729 63.75 - 17 169 111 9 0 -10.8236 -157.75 63.7684 - 17 88.6373 110 9 0 -10.7179 -157.95 63.9287 - 17 111.994 847 9 1 -10.6112 -158.286 65.15 - 17 596.802 54 10 0 -61.3025 -169.21 93.7502 - 17 59.8586 53 10 0 -61.8606 -169.35 94.0988 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 9.92447 LIN -Particle: e- -Event: 18 -Number of tracker hits in this event: 116 - 18 111.238 1278 11 1 75.8092 -18.5008 125.55 - 18 116.108 807 11 0 75.8102 -18.5014 124.15 - 18 154.273 1278 10 1 75.8336 -18.514 95.55 - 18 140.338 807 10 0 75.8339 -18.5147 94.15 - 18 266.2 1278 9 1 75.842 -18.5267 65.55 - 18 102.437 807 9 0 75.8411 -18.5275 64.15 - 18 115.257 1278 8 1 75.8269 -18.5423 35.55 - 18 116.817 807 8 0 75.8253 -18.5424 34.15 - 18 144.948 1278 7 1 75.7963 -18.5427 5.55 - 18 533.235 807 7 0 75.7959 -18.5424 4.15 - 18 116.814 1278 6 1 75.7847 -18.533 -24.45 - 18 123.791 807 6 0 75.7834 -18.5339 -25.85 - 18 166.676 1278 5 1 75.7552 -18.5571 -54.45 - 18 107.645 807 5 0 75.7556 -18.5571 -55.85 - 18 377.445 1278 4 1 75.7604 -18.5567 -84.45 - 18 377.142 807 4 0 75.7623 -18.5566 -85.85 - 18 489.327 1278 3 1 75.7934 -18.5567 -114.45 - 18 368.237 807 3 0 75.7956 -18.557 -115.85 - 18 529.337 1278 2 1 75.8401 -18.5564 -144.45 - 18 661.533 807 2 0 75.8419 -18.5586 -145.85 - 18 553.669 1279 1 1 75.8858 -18.6123 -174.45 - 18 810.654 807 1 0 75.8892 -18.6147 -175.85 - 18 387.102 1279 0 1 75.9565 -18.6593 -204.45 - 18 237.912 806 0 0 75.9596 -18.6632 -205.85 - 18 100.163 714 1 0 86.3042 -37.1643 -176.25 - 18 136.755 808 2 0 75.7585 -18.45 -146.207 - 18 418.771 1279 2 1 75.85 -18.4272 -144.713 - 18 13.7035 810 2 0 76.0785 -17.8647 -145.85 - 18 225.069 811 2 0 76.0844 -17.85 -145.88 - 18 488.164 1278 1 1 75.7654 -18.3595 -174.45 - 18 109.656 808 1 0 75.7979 -18.3995 -175.85 - 18 118.1 1283 0 1 76.7206 -19.2106 -204.45 - 18 125.708 803 0 0 76.8041 -19.2815 -205.85 - 18 176.978 1696 7 1 159.506 66.4931 5.54989 - 18 46.3432 1231 7 0 159.233 66.402 4.15 - 18 199.2 1232 7 0 159.245 66.4501 4.09028 - 18 117.647 1253 8 0 163.666 70.7163 33.75 - 18 105.135 1717 8 1 163.669 70.8527 35.1502 - 18 143.265 1229 9 0 162.392 65.9459 63.75 - 18 111.258 1705 9 1 161.229 66.0857 65.15 - 18 22.7601 1704 9 1 161.15 66.1116 65.3842 - 18 39.6702 55 7 0 50.0888 -168.95 3.95018 - 18 214.729 1148 7 1 49.7617 -169.175 5.15004 - 18 152.362 919 11 1 3.97302 -84.0015 125.15 - 18 35.7284 1189 5 0 20.1992 57.9546 -56.25 - 18 6.60661 1340 5 0 -6.81644 88.0524 -56.25 - 18 197.756 1339 5 0 -6.81615 88.05 -56.2378 - 18 197.126 1284 2 1 76.8921 -20.3454 -144.45 - 18 135.147 798 2 0 76.9205 -20.427 -145.85 - 18 5.50614 797 2 0 76.9284 -20.45 -146.231 - 18 163.924 1288 1 1 77.7486 -22.3688 -174.45 - 18 226.518 787 1 0 77.7586 -22.4741 -175.85 - 18 289.404 1287 0 1 77.5419 -24.6699 -204.45 - 18 126.277 776 0 0 77.4879 -24.7787 -205.85 - 18 19.0005 778 0 0 77.1478 -24.2657 -205.85 - 18 198.923 779 0 0 77.1317 -24.2498 -205.89 - 18 335.305 1286 0 1 77.4499 -24.6745 -204.623 - 18 109.182 773 0 0 77.3244 -25.3927 -205.85 - 18 463.671 772 0 0 77.4057 -25.4501 -206.097 - 18 18.7453 795 1 0 77.2222 -20.9919 -175.85 - 18 14.4966 808 7 0 75.9827 -18.4493 3.78789 - 18 112.132 1399 6 1 100.024 -5.75979 -24.45 - 18 164.429 1400 6 1 100.15 -5.41629 -24.5826 - 18 106.646 1401 6 1 100.35 -4.98634 -24.7683 - 18 19.1745 1402 6 1 100.55 -4.76922 -24.8213 - 18 143.562 889 6 0 102.11 -2.23186 -25.8502 - 18 51.091 890 6 0 102.293 -2.05 -25.9794 - 18 89.3203 943 7 0 -22.107 8.74704 3.75 - 18 33.2163 661 7 1 -47.8402 -19.9491 5.54989 - 18 90.2721 660 7 1 -47.8501 -19.9053 5.52119 - 18 296.172 1278 0 1 75.7843 -18.3992 -204.45 - 18 104.122 808 0 0 75.8052 -18.4142 -205.85 - 18 307.928 807 0 0 75.6778 -18.5868 -205.85 - 18 64.702 1009 4 0 54.9289 21.85 -85.9673 - 18 333.801 1277 1 1 75.65 -18.5785 -174.469 - 18 390.339 1280 1 1 76.2118 -18.6004 -174.45 - 18 102.159 1281 0 1 76.4293 -18.5298 -204.45 - 18 214.755 1280 0 1 76.1678 -18.74 -204.45 - 18 91.1559 575 10 0 57.7339 -64.8601 93.75 - 18 42.1021 576 10 0 57.7995 -64.85 93.9322 - 18 23.3102 809 0 0 76.2371 -18.0704 -205.85 - 18 106.348 810 0 0 76.2382 -18.05 -205.913 - 18 5.36099 783 0 0 59.4017 -23.25 -206.247 - 18 109.176 784 0 0 59.4031 -23.25 -206.229 - 18 71.7802 805 0 0 75.8573 -18.85 -205.93 - 18 4.48735 1399 2 0 -22.103 99.95 -146.219 - 18 135.546 1400 2 0 -22.2046 100.15 -146.004 - 18 135.163 843 8 0 88.2294 -11.4217 33.7505 - 18 41.3663 812 1 0 75.4024 -17.4909 -175.85 - 18 58.1587 813 1 0 75.3876 -17.45 -176.037 - 18 198.55 1261 0 1 72.4248 -10.7006 -204.45 - 18 158.538 849 0 0 72.4851 -10.1633 -205.85 - 18 28.03 850 0 0 72.4992 -10.05 -206.136 - 18 138.433 1271 3 1 74.3011 -17.2556 -114.45 - 18 147.679 814 3 0 74.2136 -17.2015 -115.85 - 18 356.076 1262 2 1 72.5111 -16.1657 -144.45 - 18 21.5995 819 2 0 72.3556 -16.0565 -145.85 - 18 110.283 820 2 0 72.3461 -16.05 -145.935 - 18 123.164 1245 1 1 69.1948 -13.6993 -174.45 - 18 197.082 832 1 0 69.0412 -13.5264 -175.85 - 18 97.4912 1228 0 1 65.8199 -9.58964 -204.45 - 18 110.331 853 0 0 65.6994 -9.38626 -205.85 - 18 64.1265 806 4 0 75.6407 -18.6502 -86.0007 - 18 12.1125 1277 4 1 75.65 -18.4776 -84.811 - 18 122.353 808 4 0 75.3112 -18.3691 -85.85 - 18 157.418 1232 3 1 66.6485 -15.3876 -114.45 - 18 163.503 824 3 0 66.2269 -15.2494 -115.85 - 18 147.771 1183 2 1 56.842 -12.3339 -144.45 - 18 142.047 839 2 0 56.4971 -12.178 -145.85 - 18 43.7829 1147 1 1 49.5059 -8.99405 -174.45 - 18 85.3313 1146 1 1 49.45 -8.95393 -174.596 - 18 148.663 857 1 0 48.9856 -8.63045 -175.85 - 18 174.293 1087 0 1 37.6442 -1.63434 -204.45 - 18 103.716 895 0 0 37.1481 -1.00037 -205.85 - 18 27.1465 896 0 0 37.03 -0.85 -206.172 - 18 0.801633 510 0 0 -89.3256 -77.85 -206.039 -Number of digits in this event: 64 -Using G4ParticleGun... -Particle energy: 7.49721 LIN -Particle: e- -Event: 19 -Number of tracker hits in this event: 140 - 19 186.479 873 11 1 -5.43454 -5.95091 125.55 - 19 124.953 870 11 0 -5.43485 -5.95174 124.15 - 19 173.909 873 10 1 -5.43687 -5.96611 95.55 - 19 100.413 870 10 0 -5.43602 -5.96694 94.15 - 19 733.251 873 9 1 -5.41931 -5.98303 65.55 - 19 477.471 870 9 0 -5.41786 -5.98395 64.15 - 19 369.973 873 8 1 -5.38614 -5.9989 35.55 - 19 120.487 870 8 0 -5.38582 -5.99931 34.15 - 19 108.451 873 7 1 -5.37646 -6.01643 5.55 - 19 118.402 870 7 0 -5.37472 -6.01851 4.15 - 19 122.228 873 6 1 -5.33817 -6.06226 -24.45 - 19 153.399 869 6 0 -5.33604 -6.06417 -25.85 - 19 156.24 873 5 1 -5.29267 -6.10165 -54.45 - 19 112.767 869 5 0 -5.28785 -6.10526 -55.85 - 19 117.021 874 4 1 -5.20845 -6.17638 -84.45 - 19 116.019 869 4 0 -5.2035 -6.17857 -85.85 - 19 110.893 874 3 1 -5.10666 -6.24305 -114.45 - 19 104.139 869 3 0 -5.10109 -6.24612 -115.85 - 19 121.112 875 2 1 -4.97534 -6.29468 -144.45 - 19 96.5602 868 2 0 -4.9737 -6.30157 -145.85 - 19 113.341 875 1 1 -4.94873 -6.42837 -174.45 - 19 111.619 868 1 0 -4.95106 -6.44108 -175.85 - 19 155.845 875 0 1 -4.99888 -6.69924 -204.45 - 19 133.415 866 0 0 -5.00002 -6.71016 -205.85 - 19 15.2765 1037 2 1 27.6153 34.4868 -144.85 - 19 273.206 1038 2 1 27.65 34.502 -144.789 - 19 338.341 874 0 1 -5.08733 -6.28039 -204.45 - 19 259.224 868 0 0 -5.08848 -6.28688 -205.85 - 19 355.64 486 3 1 -82.738 -32.206 -114.45 - 19 7.46275 876 8 0 -6.12789 -4.7321 34.15 - 19 6.87337 838 8 1 -12.3552 -4.68092 35.15 - 19 38.9619 881 8 0 -13.3671 -3.80666 34.15 - 19 12.1043 828 8 1 -14.2581 -4.84456 35.15 - 19 27.977 871 8 0 -15.4139 -5.76596 34.15 - 19 106.086 872 8 0 -5.35577 -5.57168 34.15 - 19 111.657 880 7 1 -4.04463 -5.60106 5.55 - 19 234.092 872 7 0 -4.06151 -5.63781 4.15 - 19 46.0629 879 6 1 -4.2355 -6.43523 -24.4501 - 19 79.7709 878 6 1 -4.25 -6.4332 -24.6143 - 19 122.354 868 6 0 -4.37478 -6.4343 -25.85 - 19 91.9825 862 5 1 -7.52052 -6.70522 -54.45 - 19 165.819 865 5 0 -7.37236 -6.86805 -55.8501 - 19 12.8449 867 6 0 -4.4015 -6.45 -26.2298 - 19 170.414 824 6 0 2.77802 -15.1104 -26.25 - 19 59.483 516 7 0 96.5416 -76.65 4.01182 - 19 86.8173 872 9 1 -5.45002 -5.96889 65.2951 - 19 187.031 852 8 1 -9.63148 -4.27524 35.55 - 19 115.367 878 8 0 -9.29837 -4.3173 34.15 - 19 119.113 891 7 1 -1.80921 -5.55614 5.55 - 19 143.688 934 6 1 6.87571 -4.57236 -24.4502 - 19 118.797 877 6 0 7.33225 -4.47839 -25.85 - 19 143.446 986 5 1 17.2746 -2.33318 -54.45 - 19 92.9066 890 5 0 17.7445 -1.9456 -55.8503 - 19 11.7369 891 5 0 17.8559 -1.85 -56.1987 - 19 194.281 1036 4 1 27.3455 5.60186 -84.4505 - 19 19.6692 1037 4 1 27.45 5.66063 -84.7624 - 19 184.54 928 4 0 27.8099 5.80055 -85.85 - 19 3.23516 929 4 0 27.9299 5.85 -86.2359 - 19 17.1686 1081 3 1 36.4367 9.78128 -114.45 - 19 106.397 1082 3 1 36.45 9.78338 -114.492 - 19 118.183 949 3 0 36.8953 9.85335 -115.85 - 19 115.503 1132 2 1 46.5422 11.1479 -144.45 - 19 46.1764 1133 2 1 46.65 11.1958 -144.716 - 19 105.683 956 2 0 47.1106 11.3962 -145.85 - 19 25.8757 957 2 0 47.2395 11.45 -146.159 - 19 120.674 1194 1 1 58.8553 16.7969 -174.45 - 19 1.97207 1195 1 1 59.05 16.8428 -174.844 - 19 135.312 984 1 0 59.5816 16.9509 -175.85 - 19 102.535 1281 0 1 76.2982 22.1825 -204.45 - 19 35.0151 1282 0 1 76.45 22.2242 -204.725 - 19 155.647 1012 0 0 77.0655 22.4514 -205.85 - 19 244.912 1035 4 1 27.25 5.43902 -84.5649 - 19 19.9034 927 4 0 27.7317 5.47392 -85.85 - 19 107.017 926 4 0 27.7494 5.45 -85.8716 - 19 119.224 871 8 1 -5.68869 -6.16109 35.55 - 19 103.611 869 8 0 -5.70127 -6.17138 34.15 - 19 144.242 870 7 1 -5.97916 -6.27382 5.55 - 19 121.495 868 7 0 -5.99324 -6.29291 4.14949 - 19 122.902 868 6 1 -6.25147 -6.83688 -24.45 - 19 116.082 865 6 0 -6.27963 -6.96988 -25.85 - 19 121.245 866 5 1 -6.81709 -10.0621 -54.45 - 19 117.232 849 5 0 -6.84247 -10.1371 -55.85 - 19 59.1362 860 4 1 -7.8655 -11.6477 -84.4502 - 19 142.642 861 4 1 -7.85 -11.5719 -84.5313 - 19 40.101 848 4 0 -8.2421 -10.3513 -85.85 - 19 111.819 849 4 0 -8.29304 -10.2494 -85.9599 - 19 3.38828 850 4 0 -8.34361 -10.05 -86.2376 - 19 81.8225 841 3 1 -11.7536 10.2299 -114.45 - 19 45.7376 840 3 1 -11.85 10.0705 -114.712 - 19 34.2595 948 3 0 -12.6602 9.67977 -115.851 - 19 96.7347 947 3 0 -12.7493 9.65 -115.95 - 19 99.1664 946 3 0 -12.9613 9.45 -116.077 - 19 63.2714 945 3 0 -13.257 9.25 -116.165 - 19 1.81612 586 3 0 -30.1046 -62.8441 -116.25 - 19 79.9922 585 3 0 -30.1047 -62.8501 -116.241 - 19 123.964 584 3 0 -30.0885 -63.05 -116.075 - 19 122.059 750 3 1 -30.0366 -63.4036 -114.85 - 19 125.605 749 3 1 -30.0501 -63.4172 -114.672 - 19 55.3601 751 3 1 -29.85 -63.8097 -114.735 - 19 56.0075 571 3 0 -25.703 -65.8017 -115.85 - 19 82.0143 570 3 0 -25.5401 -65.85 -115.881 - 19 36.4719 781 3 1 -23.7632 -66.1524 -114.85 - 19 131.267 782 3 1 -23.65 -66.1479 -114.76 - 19 157.893 783 3 1 -23.45 -66.3519 -114.5 - 19 73.6309 784 3 1 -23.25 -66.6096 -114.638 - 19 128.591 785 3 1 -23.05 -66.7092 -114.626 - 19 8.52454 561 3 0 -25.3758 -67.7479 -115.85 - 19 14.5198 760 3 1 -28.0128 -67.86 -114.85 - 19 262.575 759 3 1 -28.0502 -67.8544 -114.828 - 19 154.732 870 4 1 -5.87343 -8.71518 -84.45 - 19 270.441 871 4 1 -5.85 -8.71925 -84.617 - 19 224.757 860 2 1 -7.90087 -8.26617 -144.45 - 19 99.6638 859 2 0 -7.83219 -8.14181 -145.85 - 19 129.342 871 1 1 -5.65964 -5.58164 -174.45 - 19 31.3381 870 1 0 -5.72315 -6.01418 -175.85 - 19 65.3521 869 1 0 -5.73196 -6.05 -175.974 - 19 305.654 853 0 1 -9.28955 -14.3566 -204.45 - 19 76.0958 852 0 1 -9.45 -14.8386 -204.762 - 19 1.37369 815 0 0 -9.80683 -17.0436 -205.85 - 19 59.7393 814 0 0 -9.80787 -17.05 -205.853 - 19 65.413 813 0 0 -9.84223 -17.25 -205.969 - 19 76.9071 812 0 0 -9.87135 -17.45 -206.095 - 19 174.744 858 2 0 -7.88429 -8.3529 -145.851 - 19 116.764 862 1 1 -7.48057 -8.99824 -174.451 - 19 279.314 854 1 0 -7.56111 -9.10922 -175.85 - 19 130.947 850 0 1 -9.91739 -11.2997 -204.45 - 19 129.82 843 0 0 -10.0998 -11.3145 -205.85 - 19 11.6312 873 9 0 -5.36565 -5.27248 64.15 - 19 142.349 874 9 0 -5.36356 -5.25 64.1051 - 19 147.657 846 8 1 -10.6904 3.8511 35.55 - 19 70.7446 915 8 0 -11.0196 3.16478 34.15 - 19 61.976 914 8 0 -11.0794 3.05 33.9231 - 19 147.75 776 7 1 -24.7779 -16.7548 5.55 - 19 5.36262 777 7 1 -24.65 -16.7413 5.17425 - 19 114.143 817 7 0 -24.1776 -16.5729 4.15 - 19 349.394 818 7 0 -23.9754 -16.4499 3.8614 - 19 85.1566 819 7 0 -23.3312 -16.2499 3.8685 - 19 70.1918 820 7 0 -23.0606 -16.05 3.83115 - 19 119.311 821 7 0 -22.9542 -15.8497 3.84083 - 19 245.597 785 7 1 -22.9036 -16.2357 5.15 +Number of tracker hits in this event: 128 + 1 0.975929 1395 9 0 -92.6089 99.2932 63.753 + 1 222.78 437 8 1 -92.6084 99.2924 35.55 + 1 188.736 1395 8 0 -92.6079 99.2941 34.15 + 1 774.915 437 7 1 -92.6006 99.3255 5.55 + 1 482.149 1395 7 0 -92.6023 99.321 4.15 + 1 123.109 437 6 1 -92.6322 99.2164 -24.45 + 1 509.203 1395 6 0 -92.6306 99.209 -25.85 + 1 307.995 437 5 1 -92.596 99.0626 -54.45 + 1 238.962 1394 5 0 -92.5965 99.057 -55.85 + 1 112.439 437 4 1 -92.6091 98.9449 -84.45 + 1 127.206 1393 4 0 -92.6102 98.9379 -85.85 + 1 123.991 437 3 1 -92.6214 98.8066 -114.45 + 1 253.787 1393 3 0 -92.6234 98.8021 -115.85 + 1 136.228 437 2 1 -92.667 98.6984 -144.45 + 1 104.761 1392 2 0 -92.6691 98.6973 -145.85 + 1 230.753 437 1 1 -92.703 98.6541 -174.45 + 1 123.69 1392 1 0 -92.7015 98.651 -175.85 + 1 173.079 437 0 1 -92.6295 98.6053 -204.45 + 1 103.966 1392 0 0 -92.6191 98.6071 -205.85 + 1 161.834 403 2 1 -99.4247 140.81 -144.85 + 1 79.5321 404 2 1 -99.3499 140.862 -144.574 + 1 154.333 314 5 1 -117.194 -113.376 -54.85 + 1 153.207 138 1 0 41.2241 -152.389 -175.85 + 1 103.326 313 5 1 -117.35 -113.556 -54.5323 + 1 138.431 312 5 1 -117.55 -113.528 -54.5977 + 1 113.054 311 5 1 -117.75 -113.481 -54.5448 + 1 110.526 315 5 1 -117.15 -113.463 -54.7026 + 1 153.835 904 2 0 153.404 1.05 -146.151 + 1 7.89026 1327 1 1 85.45 -97.8113 -174.709 + 1 169.446 903 2 0 153.965 0.849925 -146.002 + 1 161.393 1681 2 1 156.368 -0.120111 -144.85 + 1 199.895 1682 2 1 156.55 -0.335674 -144.833 + 1 128.472 438 1 1 -92.55 98.5656 -174.572 + 1 171.61 436 5 1 -92.7505 99.5607 -54.7129 + 1 31.5601 435 5 1 -92.95 99.8002 -54.8375 + 1 31.9976 1425 5 0 -96.2768 105.233 -55.85 + 1 61.8527 1426 5 0 -96.3326 105.35 -55.8717 + 1 52.0288 1427 5 0 -96.457 105.55 -55.9306 + 1 86.1497 1428 5 0 -96.5762 105.75 -55.9678 + 1 129.381 1429 5 0 -96.7142 105.95 -56.0057 + 1 101.824 1430 5 0 -96.9885 106.15 -56.1028 + 1 93.4681 1431 5 0 -97.2834 106.35 -56.1928 + 1 109.569 438 5 1 -92.55 99.2296 -54.4528 + 1 63.0671 1395 5 0 -92.2652 99.1642 -55.85 + 1 90.946 460 4 1 -87.9971 97.0977 -84.45 + 1 64.1466 461 4 1 -87.8497 97.3229 -84.6872 + 1 14.0592 1390 4 0 -87.2795 98.3098 -85.8501 + 1 128.448 1391 4 0 -87.2555 98.35 -85.8974 + 1 42.5413 1392 4 0 -87.1243 98.55 -86.1372 + 1 83.4261 545 3 1 -70.8772 122.978 -114.45 + 1 17.1491 546 3 1 -70.85 123.11 -114.784 + 1 73.369 1517 3 0 -70.7741 123.61 -115.85 + 1 97.2752 1518 3 0 -70.7559 123.75 -116.119 + 1 62.4018 553 2 1 -69.4026 140.402 -144.45 + 1 110.121 554 2 1 -69.25 140.487 -144.604 + 1 7.21122 1606 2 0 -68.1176 141.532 -145.85 + 1 140.121 1607 2 0 -68.0976 141.55 -145.871 + 1 36.0677 1608 2 0 -67.8504 141.75 -146.149 + 1 73.0653 712 1 1 -37.5772 156.844 -174.45 + 1 33.9262 713 1 1 -37.45 156.848 -174.721 + 1 120.122 1684 1 0 -37.3455 156.98 -175.85 + 1 36.6642 753 0 1 -29.3847 162.457 -204.45 + 1 280.743 752 0 1 -29.45 162.447 -204.49 + 1 12.8743 1750 0 0 -29.3201 170.278 -205.85 + 1 89.7115 1751 0 0 -29.3229 170.35 -205.862 + 1 162.037 1752 0 0 -29.4498 170.55 -205.952 + 1 219.89 439 6 1 -92.168 99.2042 -24.45 + 1 128.246 440 5 1 -91.9837 98.8238 -54.45 + 1 197.658 1393 5 0 -91.9701 98.7899 -55.85 + 1 111.549 442 4 1 -91.6867 98.0586 -84.45 + 1 139.302 1389 4 0 -91.6643 98.021 -85.85 + 1 102.75 444 3 1 -91.1935 97.2436 -114.45 + 1 123.168 1385 3 0 -91.1751 97.1973 -115.85 + 1 106.056 446 2 1 -90.7975 96.2027 -144.45 + 1 71.8336 1380 2 0 -90.796 96.1578 -145.85 + 1 46.0871 1379 2 0 -90.7957 96.15 -146.093 + 1 119.366 447 1 1 -90.6989 95.1818 -174.45 + 1 101.677 1374 1 0 -90.7006 95.127 -175.85 + 1 110.069 447 0 1 -90.5921 93.9255 -204.45 + 1 112.145 1368 0 0 -90.5914 93.8658 -205.85 + 1 69.683 450 4 0 154.5 -89.85 -86.0565 + 1 110.642 1674 4 1 154.961 -90.1501 -84.7134 + 1 48.0246 1673 4 1 154.95 -90.1711 -84.6794 + 1 135.755 440 6 1 -92.15 99.2119 -24.5958 + 1 187.454 438 6 1 -92.3503 99.3686 -24.519 + 1 108.543 434 6 1 -93.2808 99.334 -24.4501 + 1 109.575 432 5 1 -93.7323 98.09 -54.45 + 1 189.704 1390 5 0 -93.4278 98.1991 -55.8506 + 1 14.1402 463 4 1 -87.2808 100.548 -84.45 + 1 127.527 464 4 1 -87.25 100.581 -84.4895 + 1 46.4243 465 4 1 -87.05 100.797 -84.7583 + 1 50.6826 1407 4 0 -86.3065 101.67 -85.85 + 1 85.3477 1408 4 0 -86.2383 101.75 -85.9478 + 1 31.8575 1409 4 0 -86.0644 101.95 -86.1702 + 1 148.155 587 3 1 -62.6041 128.956 -114.45 + 1 344.014 588 3 1 -62.45 129.022 -114.529 + 1 105.272 589 3 1 -62.25 129.138 -114.662 + 1 3.19176 1552 3 0 -60.8027 130.741 -115.85 + 1 92.9173 1553 3 0 -60.7952 130.75 -115.856 + 1 132.494 1554 3 0 -60.6498 130.95 -116.049 + 1 104.984 1549 3 0 -9.05816 130.089 -116.25 + 1 93.1879 1548 3 0 -8.79845 129.95 -116.094 + 1 48.9769 1547 3 0 -8.59093 129.75 -115.957 + 1 392.978 860 3 1 -8.01118 128.725 -114.849 + 1 248.978 861 3 1 -7.84996 128.525 -114.688 + 1 119.164 862 3 1 -7.65 128.395 -114.587 + 1 216.961 863 3 1 -7.44955 128.273 -114.549 + 1 24.3229 864 3 1 -7.24833 128.133 -114.45 + 1 120.157 859 3 1 -8.05014 128.92 -114.521 + 1 166.45 1542 3 0 -7.26996 128.72 -115.85 + 1 53.4935 1543 3 0 -7.39798 128.75 -115.994 + 1 118.905 586 3 1 -62.6739 128.899 -114.45 + 1 246.738 610 0 1 -57.9873 107.357 -204.45 + 1 4.44716 611 0 1 -57.85 107.369 -204.833 + 1 342.048 1437 0 0 -57.5205 107.6 -205.85 + 1 10.2382 1438 0 0 -57.3929 107.75 -206.207 + 1 264.314 1436 0 0 -57.5283 107.513 -205.85 + 1 307.103 1393 7 0 -91.8609 98.8963 4.15 + 1 270.1 1394 7 0 -91.0446 98.95 3.84065 + 1 98.5808 445 7 1 -90.9996 99.3634 5.15 + 1 71.7794 446 7 1 -90.95 99.3823 5.24044 + 1 90.9814 447 7 1 -90.75 99.4327 5.21119 + 1 17.7528 448 7 1 -90.5488 99.3588 5.1723 + 1 166.875 1402 7 0 -89.2064 100.589 4.15 + 1 61.7763 1401 7 0 -89.0173 100.55 3.97332 + 1 24.7417 1411 7 0 -91.4585 102.507 4.15 + 1 8.85221 439 7 1 -92.2698 107.31 5.15 + 1 121.291 1458 7 0 -91.8208 111.785 4.15 Number of digits in this event: 58 Using G4ParticleGun... -Particle energy: 4.77438 LIN +Particle energy: 4.70285 LIN Particle: e- -Event: 20 -Number of tracker hits in this event: 39 - 20 130.068 1201 11 1 60.3037 46.1857 125.55 - 20 116.263 1130 11 0 60.2951 46.1834 124.15 - 20 164.508 1200 10 1 60.1188 46.1265 95.55 - 20 115.473 1130 10 0 60.1291 46.1336 94.15 - 20 139.248 1201 9 1 60.3763 46.3081 65.55 - 20 149.845 1131 9 0 60.3944 46.3258 64.15 - 20 133.213 1203 8 1 60.7693 46.6885 35.55 - 20 192.305 1133 8 0 60.7737 46.6875 34.15 - 20 210.557 1204 7 1 61.0314 46.6119 5.55 - 20 122.866 1132 7 0 61.0271 46.6158 4.15 - 20 118.247 1204 6 1 61.0486 46.6358 -24.45 - 20 137.732 1132 6 0 61.0284 46.6455 -25.85 - 20 192.706 1202 5 1 60.6421 46.8549 -54.45 - 20 144.779 1134 5 0 60.6068 46.8669 -55.85 - 20 44.8744 1199 4 1 59.8639 47.113 -84.45 - 20 82.4777 1198 4 1 59.85 47.1087 -84.6157 - 20 149.401 1135 4 0 59.7426 47.0764 -85.85 - 20 112.657 1181 3 1 56.2918 47.0029 -114.45 - 20 128.265 1134 3 0 56.1742 46.9357 -115.85 - 20 241.772 1167 2 1 53.5044 45.7146 -144.45 - 20 125.695 1128 2 0 53.4163 45.7124 -145.85 - 20 161.277 1159 1 1 51.8522 46.0719 -174.45 - 20 104.58 1129 1 0 51.8725 46.0241 -175.85 - 20 109.119 1160 0 1 52.0768 44.6113 -204.45 - 20 151.677 1121 0 0 52.1885 44.4332 -205.85 - 20 151.93 1174 0 1 55.0306 46.8671 -204.451 - 20 183.289 1132 0 0 54.5534 46.5979 -205.85 - 20 110.463 1175 0 1 55.0502 46.9165 -204.45 - 20 142.759 1133 0 0 55.3749 46.7033 -205.85 - 20 56.478 1204 5 1 60.9752 46.5827 -54.45 - 20 124.897 1203 5 1 60.8498 46.5753 -54.585 - 20 172.417 1129 5 0 59.1367 45.9571 -55.85 - 20 452.69 1128 5 0 58.818 45.85 -56.0125 - 20 164.332 1195 0 1 59.236 46.2599 -204.45 - 20 81.4581 1196 0 1 59.25 46.241 -204.549 - 20 244.785 1130 0 0 59.343 46.2192 -205.85 - 20 286.871 1057 0 0 142.686 31.6409 -206.25 - 20 9.50871 1056 0 0 143.318 31.45 -206.208 - 20 121.701 193 2 0 10.1167 -141.35 -146.204 -Number of digits in this event: 30 +Event: 2 +Number of tracker hits in this event: 89 + 2 136.227 377 9 1 -104.587 -56.3107 65.55 + 2 129.319 618 9 0 -104.589 -56.3108 64.15 + 2 102.346 377 8 1 -104.679 -56.2724 35.55 + 2 129.898 618 8 0 -104.694 -56.2676 34.15 + 2 104.963 375 7 1 -104.977 -56.1755 5.55 + 2 153.483 619 7 0 -104.987 -56.1759 4.15 + 2 411.064 374 6 1 -105.195 -56.2196 -24.45 + 2 111.606 619 6 0 -105.209 -56.2204 -25.85 + 2 310.88 373 5 1 -105.484 -56.2235 -54.45 + 2 135.138 619 5 0 -105.498 -56.2292 -55.85 + 2 104.172 372 4 1 -105.721 -56.3548 -84.45 + 2 372.43 618 4 0 -105.738 -56.3574 -85.85 + 2 280.978 370 3 1 -106.07 -56.397 -114.45 + 2 336.698 618 3 0 -106.102 -56.3898 -115.85 + 2 97.6469 367 2 1 -106.671 -56.3802 -144.45 + 2 427.84 618 2 0 -106.698 -56.3711 -145.85 + 2 146.37 364 1 1 -107.283 -56.1479 -174.45 + 2 103.063 619 1 0 -107.311 -56.1379 -175.85 + 2 103.291 361 0 1 -107.849 -55.8775 -204.45 + 2 114.879 620 0 0 -107.886 -55.8696 -205.85 + 2 22.1519 617 6 0 -105.173 -56.6247 -25.85 + 2 212.214 616 6 0 -105.174 -56.6503 -25.9345 + 2 118.52 598 6 0 -104.211 -60.2951 -26.25 + 2 54.0828 877 6 0 -67.4957 -4.51824 -26.25 + 2 112.331 618 6 0 -105.128 -56.3835 -25.85 + 2 128.227 380 5 1 -104.126 -60.8578 -54.4503 + 2 109.972 595 5 0 -104.015 -60.9315 -55.8508 + 2 120.111 392 4 1 -101.661 -63.1305 -84.45 + 2 19.4016 583 4 0 -101.848 -63.4324 -85.85 + 2 177.322 582 4 0 -101.859 -63.45 -85.9306 + 2 120.3 544 3 0 -106.08 -71.0523 -115.85 + 2 157.465 386 2 1 -102.883 -77.5619 -144.45 + 2 163.806 511 2 0 -102.634 -77.6563 -145.85 + 2 214.923 413 1 1 -97.4881 -79.5983 -174.45 + 2 497.262 412 1 1 -97.55 -79.7746 -174.622 + 2 32.8579 493 1 0 -98.3665 -81.3558 -175.85 + 2 63.0356 492 1 0 -98.4143 -81.4502 -175.921 + 2 86.4127 491 1 0 -98.5144 -81.65 -176.061 + 2 21.1515 490 1 0 -98.6242 -81.8516 -176.204 + 2 188.595 279 0 1 -124.208 -120.753 -204.45 + 2 19.7079 287 0 0 -124.421 -122.683 -205.85 + 2 68.7984 286 0 0 -124.427 -122.75 -205.896 + 2 75.7752 285 0 0 -124.42 -122.95 -206.039 + 2 43.6637 284 0 0 -124.404 -123.15 -206.18 + 2 121.534 114 0 0 -142.084 -157.222 -206.25 + 2 24.0845 113 0 0 -142.36 -157.35 -205.939 + 2 147.841 184 0 1 -143.3 -157.697 -204.85 + 2 118.758 183 0 1 -143.35 -157.714 -204.812 + 2 125.036 182 0 1 -143.55 -157.794 -204.679 + 2 171.283 181 0 1 -143.75 -157.895 -204.566 + 2 192.573 180 0 1 -143.95 -157.973 -204.462 + 2 373.751 179 0 1 -144.15 -157.698 -204.527 + 2 210.337 178 0 1 -144.35 -157.334 -204.563 + 2 377.809 177 0 1 -144.55 -156.961 -204.588 + 2 59.414 125 0 0 -143.177 -155.085 -205.85 + 2 75.0442 126 0 0 -143.1 -154.95 -205.987 + 2 527.095 127 0 0 -143.049 -154.75 -206.071 + 2 31.4321 128 0 0 -142.952 -154.55 -206.146 + 2 215.623 176 0 1 -144.75 -156.743 -204.637 + 2 67.4178 353 2 1 -109.408 -153.367 -144.85 + 2 370.045 377 4 1 -104.716 -56.3103 -84.45 + 2 262.729 377 3 1 -104.66 -56.1515 -114.45 + 2 124.386 619 3 0 -104.642 -56.1575 -115.85 + 2 349.334 379 2 1 -104.25 -56.2867 -144.45 + 2 127.425 382 1 1 -103.642 -56.4453 -174.45 + 2 295.626 618 1 0 -103.618 -56.4476 -175.85 + 2 140.52 385 0 1 -103.094 -56.4812 -204.45 + 2 363.988 617 0 0 -103.063 -56.4789 -205.85 + 2 100.481 103 0 0 -63.5346 -159.435 -206.25 + 2 218.952 104 0 0 -63.4891 -159.35 -206.128 + 2 218.216 617 2 0 -104.256 -56.45 -145.891 + 2 325.992 375 1 1 -104.968 -58.4862 -174.45 + 2 36.4131 606 1 0 -105.074 -58.8148 -175.85 + 2 81.9869 605 1 0 -105.083 -58.85 -175.997 + 2 117.723 367 0 1 -106.596 -64.5798 -204.45 + 2 196.86 576 0 0 -106.718 -64.6644 -205.85 + 2 133.874 619 2 0 -104.287 -56.2485 -145.85 + 2 172.427 625 1 0 -105.235 -54.9768 -175.85 + 2 22.124 356 0 1 -108.94 -52.8694 -204.45 + 2 151.763 355 0 1 -108.95 -52.8598 -204.545 + 2 30.6648 636 0 0 -109.14 -52.6683 -205.851 + 2 96.8028 637 0 0 -109.157 -52.65 -205.964 + 2 131.567 377 2 1 -104.61 -56.3268 -144.45 + 2 170.243 378 1 1 -104.524 -56.3383 -174.45 + 2 251.901 378 0 1 -104.448 -56.4887 -204.45 + 2 127.194 350 11 1 -110.053 -67.3282 125.55 + 2 190.505 616 0 0 -104.636 -56.6501 -206.016 + 2 133.478 622 0 0 -104.273 -55.6078 -205.85 + 2 56.4009 623 0 0 -104.265 -55.45 -206.104 +Number of digits in this event: 55 Using G4ParticleGun... -Particle energy: 6.97818 LIN +Particle energy: 6.79543 LIN Particle: e- -Event: 21 -Number of tracker hits in this event: 131 - 21 156.731 958 11 1 11.7688 21.994 125.55 - 21 158.621 1009 11 0 11.7687 21.994 124.15 - 21 117.006 958 10 1 11.7615 21.9943 95.55 - 21 218.694 1009 10 0 11.7625 21.9926 94.15 - 21 204.34 958 9 1 11.7807 21.9558 65.55 - 21 139.907 1009 9 0 11.7821 21.9539 64.15 - 21 113.354 958 8 1 11.8079 21.912 35.55 - 21 132.305 1009 8 0 11.8095 21.9101 34.15 - 21 137.117 958 7 1 11.8448 21.872 5.55 - 21 117.322 1009 7 0 11.8475 21.8701 4.15 - 21 665.831 959 6 1 11.9071 21.83 -24.45 - 21 241.911 1008 6 0 11.9086 21.83 -25.85 - 21 357.046 959 5 1 11.9408 21.8289 -54.45 - 21 378.179 1008 5 0 11.9434 21.8299 -55.85 - 21 244.412 959 4 1 11.993 21.8537 -84.45 - 21 377.477 1009 4 0 11.996 21.8556 -85.85 - 21 102.469 960 3 1 12.0555 21.8925 -114.45 - 21 230.957 1009 3 0 12.0589 21.8934 -115.85 - 21 132.61 960 2 1 12.1288 21.908 -144.45 - 21 115.841 1009 2 0 12.132 21.909 -145.85 - 21 204.458 960 1 1 12.2003 21.9277 -174.45 - 21 140.529 1009 1 0 12.2044 21.9284 -175.85 - 21 163.772 961 0 1 12.2816 21.9426 -204.45 - 21 192.058 1009 0 0 12.2848 21.9434 -205.85 - 21 187.311 1009 6 0 11.8936 21.85 -26.1749 - 21 23.7679 1414 6 0 -10.7258 103.108 -26.25 - 21 217.305 1415 6 0 -10.716 103.15 -26.2142 - 21 157.779 1067 7 0 20.7111 33.5433 3.75 - 21 88.2879 1068 7 0 20.711 33.6501 3.91766 - 21 43.3416 996 7 1 19.3716 34.284 5.15006 - 21 64.2538 995 7 1 19.25 34.293 5.22123 - 21 74.6936 994 7 1 19.05 34.3068 5.29738 - 21 63.6351 993 7 1 18.85 34.4169 5.32945 - 21 60.4083 992 7 1 18.65 34.5104 5.38686 - 21 23.2447 991 7 1 18.45 34.4956 5.49508 - 21 210.379 968 4 1 13.6698 18.9785 -84.45 - 21 10.2903 969 4 1 13.85 19.3369 -84.8134 - 21 69.5686 1000 4 0 15.023 20.1265 -85.85 - 21 83.1651 1001 4 0 15.1644 20.25 -85.9973 - 21 458.83 1138 4 0 -105.531 47.7118 -86.25 - 21 35.4418 338 4 1 -112.404 50.915 -84.85 - 21 73.25 337 4 1 -112.55 50.9778 -84.8372 - 21 88.2165 336 4 1 -112.75 51.0568 -84.8097 - 21 231.749 335 4 1 -112.95 51.1444 -84.7197 - 21 61.849 334 4 1 -113.15 51.395 -84.5522 - 21 66.0134 999 5 0 6.14412 20.0287 -56.25 - 21 63.0885 998 5 0 6.18468 19.8499 -56.1057 - 21 103.108 997 5 0 6.13735 19.6497 -56.0699 - 21 56.7246 996 5 0 6.03542 19.45 -56.1146 - 21 78.4126 995 5 0 6.07832 19.25 -56.1408 - 21 8.8994 994 5 0 6.0827 19.05 -56.2389 - 21 108.942 410 5 0 -45.5518 -98.0529 -56.25 - 21 157.965 409 5 0 -45.5811 -98.15 -56.1332 - 21 123.704 408 5 0 -45.4516 -98.35 -56.158 - 21 119.916 1010 5 0 11.9238 22.1336 -55.85 - 21 138.046 954 4 1 10.9887 21.8847 -84.4502 - 21 110.679 963 3 1 12.6551 23.6026 -114.45 - 21 148.975 1018 3 0 12.7651 23.7384 -115.85 - 21 108.862 970 2 1 14.1854 26.8363 -144.45 - 21 25.5919 971 2 1 14.2501 26.8253 -144.754 - 21 128.319 1033 2 0 14.4724 26.7762 -145.85 - 21 105.8 999 1 1 19.9885 25.2618 -174.45 - 21 13.4769 1000 1 1 20.05 25.258 -174.8 - 21 120.585 1025 1 0 20.2469 25.2325 -175.85 - 21 11.5438 1030 0 1 26.2377 24.1225 -204.45 - 21 110.33 1031 0 1 26.2504 24.1198 -204.48 - 21 128.284 1019 0 0 26.7481 24.0034 -205.851 - 21 146.43 960 6 1 12.0501 21.8485 -24.4837 - 21 96.913 961 6 1 12.25 21.8459 -24.6727 - 21 50.789 1012 6 0 13.2045 22.6124 -25.8502 - 21 172.156 1013 6 0 13.2684 22.6501 -25.9023 - 21 175.521 1014 6 0 13.5694 22.85 -26.0916 - 21 48.7789 1207 6 0 90.15 61.4964 -26.1959 - 21 169.727 1208 6 0 90.2143 61.65 -26.1534 - 21 126.868 957 5 1 11.6327 21.9972 -54.45 - 21 185.089 1009 5 0 11.636 22.0082 -55.85 - 21 143.574 958 4 1 11.657 22.2319 -84.45 - 21 134.39 957 4 1 11.65 22.2282 -84.8032 - 21 140.566 1010 4 0 11.6292 22.2145 -85.85 - 21 139.095 954 3 1 11.0463 21.9347 -114.45 - 21 107.489 951 2 1 10.3352 22.8493 -144.45 - 21 123.08 1014 2 0 10.2926 22.8717 -145.85 - 21 375.184 946 1 1 9.33414 23.4938 -174.45 - 21 53.3342 1017 1 0 9.27752 23.4547 -175.85 - 21 80.6402 1016 1 0 9.27086 23.45 -176.006 - 21 131.914 936 0 1 7.40057 22.758 -204.45 - 21 112.768 1013 0 0 7.32996 22.7682 -205.85 - 21 290.052 949 1 1 9.96138 21.0833 -174.45 - 21 342.889 1005 1 0 9.95866 21.0816 -175.85 - 21 102.497 962 0 1 12.6417 21.7948 -204.45 - 21 169.781 1008 0 0 12.5335 21.8042 -205.85 - 21 113.218 949 0 1 10.0324 22.2518 -204.45 - 21 352.086 1011 0 0 9.99497 22.3195 -205.85 - 21 106.36 946 4 1 9.27471 16.2802 -84.45 - 21 43.7543 947 4 1 9.45 16.2054 -84.7285 - 21 106.155 978 4 0 10.1564 15.7997 -85.85 - 21 42.8539 977 4 0 10.3307 15.65 -86.1378 - 21 75.7768 1066 3 1 33.2982 -4.36004 -114.45 - 21 51.0556 1067 3 1 33.45 -4.38976 -114.674 - 21 123.27 879 3 0 34.1362 -4.24583 -115.85 - 21 70.1407 934 3 0 59.0808 7.03213 -116.25 - 21 42.5641 935 3 0 59.0945 7.05003 -115.97 - 21 103.366 1196 3 1 59.3088 7.20972 -114.85 - 21 18.2029 1197 3 1 59.45 7.2987 -114.51 - 21 162.31 961 4 1 12.2999 21.7638 -84.45 - 21 46.0595 982 3 1 16.6441 26.6895 -114.45 - 21 57.1517 983 3 1 16.65 26.6522 -114.604 - 21 201.941 1031 3 0 16.7405 26.3968 -115.85 - 21 169.528 997 2 1 19.502 21.2239 -144.45 - 21 73.762 998 2 1 19.65 21.1096 -144.649 - 21 95.0575 1001 2 0 20.5514 20.3773 -145.85 - 21 84.5009 1000 2 0 20.7055 20.2499 -146.065 - 21 7.4814 1090 1 1 38.2436 5.24281 -174.45 - 21 110.503 1091 1 1 38.25 5.24652 -174.483 - 21 120.589 927 1 0 38.618 5.47713 -175.85 - 21 113.647 1128 0 1 45.7726 8.71524 -204.45 - 21 206.131 942 0 0 45.6682 8.52624 -205.85 - 21 270.857 1329 0 1 85.85 53.6825 -204.698 - 21 235.795 1150 4 0 -29.2124 50.1551 -86.25 - 21 95.9859 1011 4 0 11.5041 22.3328 -85.85 - 21 264.15 945 3 1 9.11637 22.811 -114.45 - 21 31.9255 944 3 1 9.04991 22.827 -114.752 - 21 125.308 1014 3 0 8.79048 22.89 -115.85 - 21 102.961 911 2 1 2.43503 23.7258 -144.45 - 21 132.728 1019 2 0 2.05558 23.8541 -145.85 - 21 147.523 869 1 1 -6.05993 26.6648 -174.45 - 21 128.79 1035 1 0 -6.64658 27.1113 -175.85 - 21 114.032 809 0 1 -18.0572 36.9256 -204.45 - 21 23.5495 808 0 1 -18.2502 37.0678 -204.804 - 21 131.162 1087 0 0 -18.8317 37.4706 -205.85 - 21 115.115 946 3 1 9.25003 22.8488 -114.812 -Number of digits in this event: 66 -Using G4ParticleGun... -Particle energy: 2.08022 LIN -Particle: e- -Event: 22 -Number of tracker hits in this event: 24 - 22 104.2 301 9 1 -119.752 -24.2931 65.55 - 22 159.898 778 9 0 -119.754 -24.2891 64.15 - 22 124.009 301 8 1 -119.829 -24.2057 35.55 - 22 111.361 779 8 0 -119.827 -24.1988 34.15 - 22 149.404 301 7 1 -119.763 -24.0753 5.55 - 22 126.816 779 7 0 -119.759 -24.0673 4.15 - 22 134.924 302 6 1 -119.676 -23.9001 -24.45 - 22 116.055 781 6 0 -119.698 -23.8164 -25.8504 - 22 115.734 298 5 1 -120.375 -21.8564 -54.4501 - 22 195.164 791 5 0 -120.405 -21.6962 -55.85 - 22 14.1409 792 5 0 -120.413 -21.65 -56.2227 - 22 114.896 295 4 1 -121.062 -18.2367 -84.4502 - 22 132.454 810 4 0 -120.751 -18.0369 -85.85 - 22 141.039 325 3 1 -115.017 -13.9935 -114.45 - 22 133.761 830 3 0 -114.825 -13.9671 -115.85 - 22 101.946 348 2 1 -110.489 -13.5604 -144.45 - 22 101.177 832 2 0 -110.143 -13.4665 -145.85 - 22 35.9429 833 2 0 -110.08 -13.45 -146.114 - 22 152.721 383 1 1 -103.444 -11.4393 -174.45 - 22 87.5888 384 1 1 -103.35 -11.4521 -174.603 - 22 151.313 842 1 0 -102.563 -11.5464 -175.851 - 22 97.7146 478 0 1 -84.4364 -13.3864 -204.45 - 22 40.041 479 0 1 -84.25 -13.4061 -204.742 - 22 248.132 832 0 0 -83.5174 -13.4921 -205.85 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 2.77345 LIN -Particle: e- -Event: 23 -Number of tracker hits in this event: 35 - 23 104.563 379 8 1 -104.187 94.081 35.55 - 23 156.955 1369 8 0 -104.187 94.0834 34.15 - 23 145.497 379 7 1 -104.184 94.1451 5.55 - 23 170.811 1369 7 0 -104.184 94.1459 4.15 - 23 120.221 379 6 1 -104.173 94.1574 -24.45 - 23 114.247 1370 6 0 -104.174 94.155 -25.85 - 23 102.579 379 5 1 -104.186 94.0958 -54.4503 - 23 146.222 1370 5 0 -104.295 94.179 -55.85 - 23 216.978 366 4 1 -106.849 96.916 -84.45 - 23 103.692 1384 4 0 -106.784 97.1037 -85.85 - 23 21.6787 1385 4 0 -106.757 97.15 -86.174 - 23 112.507 378 3 1 -104.393 100.453 -114.45 - 23 136.198 1402 3 0 -104.425 100.623 -115.85 - 23 165.632 374 2 1 -105.314 103.979 -144.45 - 23 107.652 1419 2 0 -105.386 104.083 -145.85 - 23 42.3764 371 1 1 -105.76 106.547 -174.45 - 23 66.7015 372 1 1 -105.75 106.58 -174.61 - 23 156.588 1433 1 0 -105.697 106.839 -175.851 - 23 179.372 371 0 1 -105.818 112.025 -204.45 - 23 12.5302 372 0 1 -105.75 112.033 -204.809 - 23 129.348 1459 0 0 -105.572 112.022 -205.85 - 23 119.623 367 4 1 -106.75 96.6938 -84.6122 - 23 116.705 368 4 1 -106.55 96.4691 -84.6819 - 23 387.973 1375 4 0 -106.177 95.3341 -85.8501 - 23 109.127 1007 0 0 -97.5934 21.4749 -206.249 - 23 90.2136 1008 0 0 -97.642 21.6507 -206.132 - 23 87.7439 1009 0 0 -97.7373 21.85 -206.011 - 23 32.7501 1010 0 0 -97.7589 22.0502 -205.887 - 23 73.8511 402 0 1 -99.5891 24.5302 -204.85 - 23 227.419 401 0 1 -99.75 24.5643 -204.694 - 23 142.066 400 0 1 -99.95 24.5345 -204.481 - 23 302.856 1368 6 0 -105.692 93.9082 -25.85 - 23 53.9691 1367 6 0 -106.113 93.7499 -25.9329 - 23 107.115 366 6 1 -106.8 92.9596 -24.85 - 23 216.6 367 6 1 -106.75 92.7974 -24.7272 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 8.9583 LIN -Particle: e- -Event: 24 -Number of tracker hits in this event: 60 - 24 124 927 11 1 5.4816 -19.6337 125.55 - 24 126.481 802 11 0 5.48086 -19.6331 124.15 - 24 116.627 927 10 1 5.46735 -19.6211 95.55 - 24 145.297 802 10 0 5.46805 -19.6204 94.15 - 24 131.241 927 9 1 5.48818 -19.6062 65.55 - 24 113.778 802 9 0 5.48822 -19.6043 64.15 - 24 354.942 927 8 1 5.48945 -19.5684 35.55 - 24 116.938 802 8 0 5.48919 -19.5658 34.15 - 24 108.836 927 7 1 5.48441 -19.5126 5.55 - 24 139.213 802 7 0 5.4849 -19.5107 4.15 - 24 130.817 927 6 1 5.49419 -19.473 -24.45 - 24 174.122 802 6 0 5.49435 -19.4711 -25.85 - 24 97.2854 927 5 1 5.505 -19.4297 -54.45 - 24 157.147 803 5 0 5.50549 -19.427 -55.85 - 24 224.191 927 4 1 5.51367 -19.3723 -84.45 - 24 115.034 803 4 0 5.51469 -19.3702 -85.85 - 24 116.982 927 3 1 5.53728 -19.3352 -114.45 - 24 158.624 803 3 0 5.53902 -19.3341 -115.85 - 24 107.802 927 2 1 5.57115 -19.2877 -144.45 - 24 158.247 803 2 0 5.57347 -19.285 -145.85 - 24 481.722 927 1 1 5.61293 -19.235 -174.45 - 24 254.204 804 1 0 5.61459 -19.2328 -175.85 - 24 257.965 927 0 1 5.64426 -19.1813 -204.45 - 24 579.836 804 0 0 5.64533 -19.1779 -205.85 - 24 20.6199 992 11 0 -40.407 18.564 123.75 - 24 38.3889 673 0 1 -45.358 -61.5361 -204.85 - 24 127.917 960 1 1 12.0884 -7.88088 -174.45 - 24 92.4043 959 1 1 12.05 -7.86397 -174.513 - 24 80.3311 958 1 1 11.8499 -7.8421 -174.646 - 24 223.79 957 1 1 11.65 -7.74813 -174.654 - 24 55.0485 865 1 0 11.1004 -6.91607 -175.85 - 24 347.785 866 1 0 11.073 -6.85 -175.899 - 24 208.051 466 0 0 -5.61969 -86.65 -206.204 - 24 103.038 467 0 0 -5.48195 -86.65 -206.218 - 24 149.739 928 0 1 5.65358 -19.2516 -204.451 - 24 114.969 806 1 0 5.85762 -18.7845 -175.85 - 24 0.208826 807 1 0 5.93523 -18.6499 -176.249 - 24 19.9543 953 0 1 10.8077 -9.26372 -204.45 - 24 129.754 954 0 1 10.85 -9.22914 -204.51 - 24 8.47852 955 0 1 11.05 -9.10466 -204.836 - 24 121.081 856 0 0 11.7171 -8.80671 -205.85 - 24 101.512 805 1 0 5.66613 -19.05 -175.954 - 24 133.806 824 0 0 5.92526 -15.0898 -205.85 - 24 217.565 1444 2 0 -21.5986 108.965 -146.25 - 24 122.674 1258 1 0 -10.2667 71.8225 -176.25 - 24 343.542 850 1 1 -10.0454 71.449 -174.85 - 24 228.435 851 1 1 -9.85 71.3394 -174.576 - 24 290.581 852 1 1 -9.6493 71.323 -174.578 - 24 37.3682 983 8 0 -106.816 16.7567 33.75 - 24 278.275 365 8 1 -106.97 16.5674 35.15 - 24 117.156 984 8 0 -106.759 16.9103 34.15 - 24 21.5898 928 8 1 5.65 -19.6876 35.2264 - 24 136.44 801 8 0 6.6592 -19.7747 34.15 - 24 78.8905 1056 7 1 31.286 -7.18132 5.55 - 24 121.673 1055 7 1 31.25 -7.00811 5.35284 - 24 109.121 866 7 0 29.3228 -6.77791 4.15 - 24 47.031 867 7 0 28.9864 -6.64981 3.89872 - 24 216.714 926 0 1 5.4149 -19.1407 -204.45 - 24 134.641 727 10 0 7.9129 -34.4514 93.75 - 24 33.8471 725 10 0 7.58128 -34.85 93.8706 -Number of digits in this event: 37 -Using G4ParticleGun... -Particle energy: 8.29978 LIN -Particle: e- -Event: 25 -Number of tracker hits in this event: 22 - 25 108.593 1163 7 1 52.839 136.388 5.55 - 25 157.2 1581 7 0 52.8393 136.389 4.15 - 25 112.447 1163 6 1 52.8452 136.404 -24.45 - 25 333.612 1581 6 0 52.846 136.404 -25.85 - 25 121.765 1164 5 1 52.8554 136.405 -54.45 - 25 98.6706 1581 5 0 52.8561 136.404 -55.85 - 25 115.063 1164 4 1 52.8738 136.372 -84.45 - 25 104.802 1581 4 0 52.8747 136.371 -85.85 - 25 331.231 1164 3 1 52.8924 136.348 -114.45 - 25 184.872 1580 3 0 52.894 136.345 -115.85 - 25 112.896 1164 2 1 52.9232 136.294 -144.45 - 25 138.388 1580 2 0 52.9242 136.29 -145.85 - 25 120.177 1164 1 1 52.9386 136.207 -174.45 - 25 137.56 1580 1 0 52.9384 136.198 -175.85 - 25 148.876 1164 0 1 52.9364 136.022 -204.45 - 25 115.949 1579 0 0 52.9349 136.011 -205.85 - 25 2.87593 915 4 1 3.14222 132.412 -84.85 - 25 136.324 1490 7 0 107.27 118.194 3.75 - 25 14.4387 1560 4 0 -0.766312 132.348 -85.85 - 25 35.2266 895 4 1 -0.983555 131.512 -84.85 - 25 125.417 1772 1 0 73.1351 174.55 -176.169 - 25 221.289 1163 3 1 52.85 136.536 -114.679 -Number of digits in this event: 14 -Using G4ParticleGun... -Particle energy: 5.70204 LIN -Particle: e- -Event: 26 -Number of tracker hits in this event: 113 - 26 105.607 605 10 1 -58.9907 95.1989 95.55 - 26 94.3978 1375 10 0 -58.9911 95.1973 94.15 - 26 104.994 605 9 1 -58.9964 95.1668 65.55 - 26 130.763 1375 9 0 -58.9975 95.1645 64.15 - 26 142.39 605 8 1 -59.0211 95.1189 35.55 - 26 268.343 1374 8 0 -59.0222 95.1181 34.15 - 26 109.495 605 7 1 -59.0313 95.105 5.55 - 26 124.448 1374 7 0 -59.0323 95.1052 4.15 - 26 159.258 604 6 1 -59.0539 95.1034 -24.45 - 26 121.548 1374 6 0 -59.0554 95.1033 -25.85 - 26 106.145 604 5 1 -59.0825 95.1144 -54.45 - 26 158.53 1374 5 0 -59.0821 95.1161 -55.85 - 26 525.764 604 4 1 -59.0737 95.1583 -84.45 - 26 138.753 1375 4 0 -59.0727 95.1616 -85.85 - 26 336.716 605 3 1 -59.0462 95.2338 -114.45 - 26 958.564 1375 3 0 -59.0437 95.2405 -115.85 - 26 134.306 605 2 1 -58.9974 95.3735 -144.45 - 26 172.395 1376 2 0 -58.9946 95.3806 -145.85 - 26 114.03 605 1 1 -58.9277 95.5279 -174.45 - 26 110.388 1376 1 0 -58.925 95.5379 -175.85 - 26 172.83 605 0 1 -58.8636 95.7467 -204.45 - 26 137.915 1378 0 0 -58.8571 95.7589 -205.85 - 26 0.214592 606 0 1 -58.85 95.8297 -204.849 - 26 322.046 1381 0 0 -58.4521 96.4737 -205.85 - 26 111.789 606 2 1 -58.7803 95.2129 -144.45 - 26 110.453 1375 2 0 -58.7645 95.2144 -145.85 - 26 139.394 607 1 1 -58.4675 95.2407 -174.45 - 26 123.901 1375 1 0 -58.4695 95.2371 -175.85 - 26 127.577 607 0 1 -58.5034 95.1395 -204.45 - 26 137.092 1374 0 0 -58.4944 95.1246 -205.85 - 26 265.233 608 1 1 -58.45 95.2723 -174.583 - 26 250.429 1379 1 0 -57.8565 95.9969 -175.85 - 26 212.074 1301 1 0 -61.875 80.2719 -176.25 - 26 4.17562 1300 1 0 -61.8272 80.25 -176.232 - 26 127.968 598 2 1 -60.3557 93.4153 -144.45 - 26 114.62 1365 2 0 -60.4728 93.2909 -145.85 - 26 126.852 585 1 1 -62.9813 90.3952 -174.45 - 26 125.533 1349 1 0 -63.0417 90.0314 -175.85 - 26 152.342 577 0 1 -64.5021 83.3623 -204.45 - 26 110.262 1314 0 0 -64.4487 82.9918 -205.85 - 26 71.371 476 3 1 -84.6906 -7.25272 -114.85 - 26 69.8472 604 2 1 -59.05 95.3103 -144.659 - 26 215.714 1361 2 0 -61.9376 92.5075 -145.85 - 26 101.399 1360 2 0 -62.0859 92.3496 -145.978 - 26 146.435 1362 2 0 -62.5467 92.55 -145.989 - 26 61.444 589 2 1 -62.1926 92.2789 -144.85 - 26 48.1585 1359 2 0 -63.8464 92.0419 -145.85 - 26 102.371 583 2 1 -63.3224 89.1273 -144.85 - 26 82.092 1345 2 0 -60.7008 89.1306 -145.85 - 26 278.719 1374 4 0 -59.0842 95.0577 -85.85 - 26 112.702 606 3 1 -58.7398 94.9197 -114.45 - 26 113.106 1373 3 0 -58.7101 94.9237 -115.85 - 26 103.586 608 2 1 -58.3095 94.5956 -144.45 - 26 249.621 1371 2 0 -58.3193 94.5064 -145.85 - 26 128.573 1361 1 0 -58.2963 92.4031 -175.85 - 26 116.43 616 0 1 -56.7908 89.7541 -204.45 - 26 128.954 1347 0 0 -56.7429 89.5841 -205.85 - 26 533.453 604 3 1 -59.0953 94.7946 -114.45 - 26 205.676 1372 3 0 -59.1035 94.7455 -115.85 - 26 210.324 603 2 1 -59.308 93.754 -144.45 - 26 107.799 1367 2 0 -59.3291 93.7437 -145.85 - 26 181.82 602 1 1 -59.591 93.374 -174.45 - 26 102.31 1365 1 0 -59.5923 93.3414 -175.85 - 26 222.782 602 0 1 -59.5819 92.6449 -204.45 - 26 142.043 1362 0 0 -59.6186 92.5829 -205.85 - 26 103.924 1363 0 0 -59.4465 92.7833 -205.851 - 26 191.039 1064 7 1 32.871 138.16 5.15 - 26 25.4717 602 2 1 -59.45 94.5943 -144.78 - 26 154.765 568 1 1 -66.3874 92.7404 -174.45 - 26 107.26 1363 1 0 -66.4192 92.7669 -175.85 - 26 97.5839 567 0 1 -66.5616 93.37 -204.451 - 26 4.20073 566 0 1 -66.65 93.4741 -204.833 - 26 119.241 1368 0 0 -66.9064 93.8011 -205.85 - 26 1.22588 1369 0 0 -67.0024 93.95 -206.243 - 26 125.198 1374 3 0 -59.0927 95.15 -116.209 - 26 93.5096 623 2 1 -55.3542 92.4505 -144.45 - 26 19.2148 624 2 1 -55.2499 92.3162 -144.796 - 26 134.859 1358 2 0 -54.9106 91.95 -145.878 - 26 15.4595 648 1 1 -50.3875 86.5471 -174.45 - 26 65.474 647 1 1 -50.4502 86.5225 -174.491 - 26 69.6962 646 1 1 -50.6501 86.4436 -174.614 - 26 53.7238 645 1 1 -50.85 86.3785 -174.746 - 26 161.363 1328 1 0 -52.8613 85.7737 -175.85 - 26 118.853 1327 1 0 -53.3174 85.65 -176.048 - 26 148.212 351 0 1 -109.903 76.4555 -204.45 - 26 107.146 1277 0 0 -109.556 75.5765 -205.85 - 26 109.096 1276 0 0 -109.491 75.45 -206.028 - 26 154.622 610 2 1 -58.0262 94.8599 -144.45 - 26 113.716 1373 2 0 -58.085 94.851 -145.85 - 26 63.4151 600 1 1 -59.9915 94.9689 -174.45 - 26 52.4262 599 1 1 -60.05 94.9409 -174.657 - 26 118.667 1373 1 0 -60.4055 94.8074 -175.85 - 26 155.264 551 0 1 -69.697 91.609 -204.45 - 26 428.914 1356 0 0 -70.1064 91.4962 -205.85 - 26 77.7503 449 1 1 -90.35 -4.81143 -174.832 - 26 192.911 429 1 1 -94.2119 -5.57315 -174.45 - 26 85.8737 1357 0 0 -70.3397 91.55 -206.111 - 26 13.1765 1324 0 0 -121.53 84.8843 -206.25 - 26 274.02 291 0 1 -121.825 84.9351 -204.85 - 26 21.7852 603 3 1 -59.2667 94.9268 -114.45 - 26 173.379 1376 3 0 -57.6741 95.35 -115.853 - 26 74.1542 1109 3 0 1.71962 42.0093 -116.25 - 26 36.9883 1108 3 0 1.88536 41.85 -116.201 - 26 62.5704 714 3 0 9.23545 -37.1659 -116.25 - 26 84.5389 713 3 0 9.1269 -37.25 -116.113 - 26 72.9345 712 3 0 9.04904 -37.45 -115.964 - 26 53.71 940 3 1 8.14359 -38.2765 -114.85 - 26 85.662 939 3 1 8.05 -38.3667 -114.774 - 26 62.376 938 3 1 7.85 -38.5006 -114.589 - 26 251.402 937 3 1 7.65 -38.5441 -114.546 - 26 172.415 936 3 1 7.45 -39.1098 -114.635 - 26 26.5389 935 3 1 7.24982 -38.8819 -114.783 - 26 137.99 709 3 0 8.53639 -38.1412 -115.85 -Number of digits in this event: 57 -Using G4ParticleGun... -Particle energy: 5.91754 LIN -Particle: e- -Event: 27 -Number of tracker hits in this event: 55 - 27 190.202 1407 8 0 104.794 101.747 34.143 - 27 302.119 1423 7 1 104.793 101.744 5.55 - 27 144.935 1407 7 0 104.791 101.744 4.15 - 27 125.814 1423 6 1 104.756 101.725 -24.45 - 27 194.805 1407 6 0 104.755 101.724 -25.85 - 27 112.844 1422 5 1 104.733 101.707 -54.45 - 27 138.9 1407 5 0 104.731 101.705 -55.85 - 27 113.719 1422 4 1 104.685 101.656 -84.45 - 27 109.469 1407 4 0 104.683 101.653 -85.85 - 27 116.248 1422 3 1 104.649 101.601 -114.45 - 27 210.891 1407 3 0 104.649 101.599 -115.85 - 27 222.749 1422 2 1 104.651 101.557 -144.45 - 27 342.555 1407 2 0 104.649 101.558 -145.85 - 27 131.679 1422 1 1 104.61 101.569 -174.45 - 27 373.277 1407 1 0 104.61 101.567 -175.85 - 27 159.13 1422 0 1 104.595 101.535 -204.45 - 27 128.711 1406 0 0 104.594 101.532 -205.85 - 27 5.6258 1438 7 1 107.75 -0.347814 5.46151 - 27 5.21431 851 7 0 149.653 -9.65 3.83405 - 27 48.6429 863 7 0 150.11 -7.45 3.97367 - 27 75.6996 1446 4 0 94.1265 109.475 -86.2496 - 27 193.315 1447 4 0 94.0121 109.55 -86.0815 - 27 59.848 1448 4 0 93.5878 109.75 -86.1986 - 27 20.783 1491 4 0 37.6621 118.55 -86.1809 - 27 43.1667 1424 7 1 104.95 101.752 5.40831 - 27 76.4996 1422 7 1 104.75 101.606 5.18935 - 27 208.022 1409 7 0 104.212 102.019 4.14988 - 27 218.453 1423 1 1 104.833 101.652 -174.45 - 27 98.6604 1434 0 1 107.124 99.8762 -204.45 - 27 127.402 1396 0 0 107.009 99.51 -205.851 - 27 197.189 1423 0 1 104.838 101.625 -204.45 - 27 214.511 1407 0 0 104.838 101.624 -205.85 - 27 95.3282 578 2 0 145.197 -64.414 -146.25 - 27 214.89 1423 2 1 104.812 101.743 -144.45 - 27 176.975 1322 1 1 84.6207 100.36 -174.45 - 27 12.0694 1409 1 0 84.6997 102.123 -175.85 - 27 123.937 1410 1 0 84.7013 102.15 -175.87 - 27 111.435 1411 1 0 84.6679 102.35 -176.042 - 27 13.9535 1412 1 0 84.6033 102.55 -176.216 - 27 119.698 1579 1 0 64.6005 136.062 -176.25 - 27 9.87618 1580 1 0 64.3417 136.15 -175.862 - 27 210.393 1212 1 1 62.6123 137.741 -174.85 - 27 25.5711 1211 1 1 62.45 138.027 -174.502 - 27 47.4631 1451 0 0 77.3979 110.415 -206.25 - 27 9.2165 1412 2 0 104.992 102.724 -145.85 - 27 95.898 1413 2 0 104.998 102.75 -145.887 - 27 32.0446 1414 2 0 105.038 102.95 -146.152 - 27 163.084 1449 1 1 110.118 123.468 -174.45 - 27 68.8254 1522 1 0 110.111 124.606 -175.85 - 27 96.1214 1523 1 0 110.101 124.75 -176.019 - 27 8.72835 1524 1 0 110.078 124.95 -176.231 - 27 162.599 1433 0 1 106.9 152.747 -204.45 - 27 38.2737 1432 0 1 106.75 153.017 -204.754 - 27 99.8919 1668 0 0 106.4 153.762 -205.85 - 27 84.1863 1669 0 0 106.331 153.95 -206.111 +Event: 3 +Number of tracker hits in this event: 49 + 3 116.706 471 10 1 -85.8412 -45.833 95.55 + 3 127.413 671 10 0 -85.8419 -45.833 94.15 + 3 122.23 470 9 1 -85.859 -45.8326 65.55 + 3 130.541 671 9 0 -85.8595 -45.8323 64.15 + 3 240.198 470 8 1 -85.8682 -45.8313 35.55 + 3 166.259 671 8 0 -85.868 -45.8317 34.15 + 3 126.582 470 7 1 -85.855 -45.8578 5.55 + 3 186.473 670 7 0 -85.8558 -45.8587 4.15 + 3 120.254 470 6 1 -85.872 -45.8782 -24.45 + 3 126.161 670 6 0 -85.8699 -45.8793 -25.85 + 3 110.002 471 5 1 -85.8248 -45.9018 -54.45 + 3 156.883 670 5 0 -85.823 -45.9053 -55.85 + 3 228.952 471 4 1 -85.786 -45.9799 -84.45 + 3 238.794 670 4 0 -85.784 -45.9831 -85.85 + 3 238.521 471 3 1 -85.746 -46.0493 -114.45 + 3 128.521 669 3 0 -85.7474 -46.053 -115.85 + 3 140.823 471 2 1 -85.7787 -46.1345 -144.45 + 3 127.169 669 2 0 -85.7819 -46.1377 -145.85 + 3 11.2582 471 1 1 -85.8498 -46.2092 -174.45 + 3 98.1485 470 1 1 -85.85 -46.2092 -174.505 + 3 146.08 669 1 0 -85.8548 -46.2109 -175.85 + 3 141.958 470 0 1 -85.9578 -46.2482 -204.45 + 3 114.371 668 0 0 -85.9626 -46.2509 -205.85 + 3 46.6353 363 0 1 -107.539 -76.1907 -204.45 + 3 44.3786 449 2 1 -90.1769 -17.8865 -144.85 + 3 117.038 668 3 0 -85.6511 -46.344 -115.85 + 3 229.38 472 2 1 -85.4988 -47.4692 -144.45 + 3 130.029 663 2 0 -85.7011 -47.3622 -145.85 + 3 132.438 448 1 1 -90.4524 -45.4702 -174.45 + 3 23.9914 447 1 1 -90.55 -45.3847 -174.789 + 3 68.4604 674 1 0 -90.8451 -45.1152 -175.85 + 3 36.3788 675 1 0 -90.9168 -45.05 -176.107 + 3 86.6753 404 0 1 -99.2675 -37.266 -204.45 + 3 55.3855 403 0 1 -99.35 -37.1355 -204.711 + 3 110.256 717 0 0 -99.6763 -36.6012 -205.85 + 3 74.5915 718 0 0 -99.7762 -36.45 -206.19 + 3 86.0669 470 3 1 -85.957 -45.9864 -114.45 + 3 175.843 670 3 0 -85.5316 -46.0403 -115.85 + 3 160.235 471 8 1 -85.85 -45.8204 35.5476 + 3 37.1751 472 8 1 -85.65 -45.5951 35.1746 + 3 23.331 683 8 0 -83.8371 -43.2835 34.1498 + 3 102.375 684 8 0 -83.8056 -43.2496 34.1303 + 3 227.466 685 8 0 -83.7551 -43.0499 34.0425 + 3 60.8064 661 8 0 -72.2786 -47.7519 33.75 + 3 142.918 660 8 0 -72.2107 -47.85 33.8906 + 3 74.9526 539 8 1 -72.1449 -49.0889 35.15 + 3 73.3482 538 8 1 -72.25 -49.2052 35.2314 + 3 99.2659 652 8 0 -71.7492 -49.5952 34.15 + 3 58.8019 651 8 0 -71.7571 -49.65 34.0729 Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 2.83972 LIN +Particle energy: 7.6643 LIN Particle: e- -Event: 28 -Number of tracker hits in this event: 72 - 28 106.195 540 10 1 -71.9231 54.2133 95.55 - 28 229.88 1170 10 0 -71.923 54.2128 94.15 - 28 176.859 540 9 1 -71.9021 54.2149 65.55 - 28 91.7626 1170 9 0 -71.9025 54.2124 64.15 - 28 110.996 540 8 1 -71.916 54.1521 35.55 - 28 127.643 1170 8 0 -71.9184 54.1503 34.15 - 28 405.361 540 7 1 -71.9682 54.113 5.55 - 28 342.381 1170 7 0 -71.9709 54.1115 4.15 - 28 151.836 540 6 1 -72.0257 54.0742 -24.45 - 28 288.709 1170 6 0 -72.0283 54.0723 -25.85 - 28 101.568 539 5 1 -72.0821 54.0431 -54.45 - 28 101.519 1169 5 0 -72.0872 54.0407 -55.85 - 28 142.355 539 4 1 -72.1927 53.9975 -84.45 - 28 271.871 1169 4 0 -72.1994 53.9987 -85.85 - 28 114.018 538 3 1 -72.3414 54.0322 -114.45 - 28 112.42 1169 3 0 -72.3487 54.0348 -115.85 - 28 149.274 537 2 1 -72.5001 54.0934 -144.45 - 28 194.436 1170 2 0 -72.5056 54.1013 -145.85 - 28 417.233 537 1 1 -72.6224 54.27 -174.45 - 28 157.559 1171 1 0 -72.631 54.2791 -175.85 - 28 136.477 536 0 1 -72.8182 54.4841 -204.45 - 28 302.389 1172 0 0 -72.8249 54.4994 -205.85 - 28 111.108 1170 1 0 -72.3336 54.0557 -175.85 - 28 222.451 560 0 1 -67.9332 56.7167 -204.45 - 28 152.9 1184 0 0 -67.7127 56.9843 -205.85 - 28 17.7093 1185 0 0 -67.6563 57.05 -206.195 - 28 106.221 1169 1 0 -72.51 53.8727 -175.85 - 28 132.137 544 0 1 -71.24 52.8939 -204.45 - 28 109.338 1163 0 0 -71.1239 52.8291 -205.85 - 28 20.6035 704 0 1 -39.1775 77.538 -204.45 - 28 264.314 703 0 1 -39.25 77.5577 -204.499 - 28 72.7788 702 0 1 -39.4503 77.5466 -204.65 - 28 125.66 701 0 1 -39.65 77.5404 -204.723 - 28 7.53857 700 0 1 -39.85 77.3821 -204.845 - 28 96.5192 1276 0 0 -42.3663 75.3628 -205.85 - 28 259.351 1275 0 0 -42.4521 75.25 -205.986 - 28 34.3117 1164 6 0 -72.7578 52.9395 -25.8506 - 28 96.6762 1163 6 0 -72.8165 52.8494 -25.8892 - 28 170.647 1162 6 0 -72.8358 52.65 -25.9024 - 28 219.875 1161 6 0 -72.6936 52.4498 -25.8848 - 28 121.626 544 6 1 -71.0559 53.3126 -24.4509 - 28 125.58 1165 6 0 -71.106 53.2219 -25.85 - 28 106.365 534 5 1 -73.0659 51.4563 -54.45 - 28 115.527 1157 5 0 -73.2133 51.5143 -55.85 - 28 163.159 515 4 1 -76.8714 52.9008 -84.45 - 28 49.4375 1164 4 0 -77.0919 53.0308 -85.85 - 28 55.3427 1165 4 0 -77.1234 53.05 -86.0391 - 28 82.891 489 3 1 -82.218 55.7484 -114.45 - 28 40.415 488 3 1 -82.25 55.7632 -114.695 - 28 102.22 1178 3 0 -82.3933 55.8251 -115.85 - 28 124.919 472 2 1 -85.4899 57.8199 -144.45 - 28 167.507 1188 2 0 -85.6521 57.7946 -145.851 - 28 161.263 456 1 1 -88.7964 57.5753 -174.45 - 28 6.49647 1189 1 0 -88.685 58.0398 -175.85 - 28 193.274 1190 1 0 -88.6824 58.05 -175.88 - 28 130.36 466 0 1 -86.8462 68.2282 -204.45 - 28 69.3491 1244 0 0 -86.7694 68.9303 -205.85 - 28 41.3052 1245 0 0 -86.752 69.05 -206.091 - 28 14.3319 498 2 1 -80.4348 60.0769 -144.45 - 28 123.39 537 6 1 -72.5413 54.2142 -24.45 - 28 110.589 533 5 1 -73.3821 54.5456 -54.45 - 28 112.393 1172 5 0 -73.4213 54.5662 -55.85 - 28 123.099 530 4 1 -73.9614 55.1429 -84.45 - 28 134.429 1174 4 0 -73.9742 55.0352 -85.85 - 28 97.4283 529 3 1 -74.2279 52.7616 -114.45 - 28 129.955 1163 3 0 -74.0951 52.7273 -115.85 - 28 126.584 545 2 1 -70.9671 51.5707 -144.45 - 28 138.565 1157 2 0 -70.9006 51.5913 -145.85 - 28 113.711 552 1 1 -69.5766 52.0687 -174.45 - 28 168.236 1160 1 0 -69.6507 52.0991 -175.85 - 28 136.639 549 0 1 -70.1786 53.0369 -204.45 - 28 104.567 1166 0 0 -70.0994 53.3582 -205.85 -Number of digits in this event: 41 +Event: 4 +Number of tracker hits in this event: 76 + 4 306.21 969 10 1 13.8597 103.796 95.55 + 4 175.491 1418 10 0 13.8609 103.796 94.15 + 4 234.036 969 9 1 13.8874 103.784 65.55 + 4 146.769 1418 9 0 13.8888 103.783 64.15 + 4 112.341 969 8 1 13.9189 103.768 35.55 + 4 103.279 1418 8 0 13.9214 103.766 34.15 + 4 97.6109 969 7 1 13.9715 103.734 5.55 + 4 141.77 1417 7 0 13.9745 103.733 4.15 + 4 294.028 969 6 1 14.0458 103.72 -24.45 + 4 110.219 1417 6 0 14.0496 103.719 -25.85 + 4 115.537 970 5 1 14.1228 103.703 -54.45 + 4 117.042 1417 5 0 14.1259 103.701 -55.85 + 4 125.55 970 4 1 14.1895 103.675 -84.45 + 4 111.242 1417 4 0 14.194 103.672 -85.85 + 4 386.015 971 3 1 14.2871 103.625 -114.45 + 4 152.174 1417 3 0 14.2919 103.623 -115.85 + 4 100.417 971 2 1 14.3904 103.586 -144.45 + 4 131.34 1417 2 0 14.3958 103.585 -145.85 + 4 430.81 972 1 1 14.51 103.572 -174.45 + 4 272.411 1417 1 0 14.5161 103.573 -175.85 + 4 337.026 972 0 1 14.6444 103.577 -204.45 + 4 255.776 1417 0 0 14.6452 103.573 -205.85 + 4 57.7506 656 11 0 -179.159 -48.7098 123.75 + 4 70.0845 91 11 1 -161.95 -41.391 125.317 + 4 169.879 655 11 0 -179.26 -48.85 124.014 + 4 58.3872 1056 9 0 68.0612 31.4272 63.75 + 4 77.2244 1057 9 0 68.0591 31.45 63.8018 + 4 181.258 941 14 1 8.29355 -158.699 215.15 + 4 129.06 1416 1 0 14.513 103.536 -175.85 + 4 32.8955 1356 0 0 -79.56 91.55 -206.008 + 4 89.0271 1108 1 0 -177.28 41.85 -175.861 + 4 36.9094 967 0 1 13.4856 104.681 -204.45 + 4 89.1146 966 0 1 13.45 104.647 -204.579 + 4 113.164 1420 0 0 13.0871 104.288 -205.85 + 4 60.965 368 5 0 94.2585 -106.35 -56.1168 + 4 5.00904 367 5 0 94.3467 -106.55 -55.9129 + 4 45.301 1496 0 0 -15.2486 119.447 -206.25 + 4 68.1916 1497 0 0 -15.2728 119.55 -206.12 + 4 58.7761 1498 0 0 -15.3056 119.75 -206.062 + 4 70.1338 1499 0 0 -15.396 119.95 -206.085 + 4 75.5997 972 3 1 14.45 103.883 -114.763 + 4 149.822 973 3 1 14.6501 103.937 -114.711 + 4 44.3624 974 3 1 14.85 103.904 -114.565 + 4 139.94 970 6 1 14.091 103.75 -24.45 + 4 420.183 971 6 1 14.2505 103.755 -24.5164 + 4 104.142 972 6 1 14.45 103.776 -24.5302 + 4 120.663 973 6 1 14.65 103.779 -24.5864 + 4 65.3806 974 6 1 14.85 104.092 -24.7072 + 4 286.001 1427 6 0 13.3726 105.57 -25.85 + 4 136.447 1428 6 0 12.7843 105.75 -25.9446 + 4 59.3178 1429 6 0 12.5478 105.95 -26.161 + 4 192.691 1195 9 0 158.421 59.1594 63.75 + 4 61.9216 1194 9 0 158.382 59.05 63.8922 + 4 167.674 1423 9 0 14.1983 104.936 64.15 + 4 84.7527 1424 9 0 14.2038 104.95 64.1388 + 4 300.907 969 3 1 13.8516 103.846 -114.45 + 4 180.615 1419 3 0 14.163 104.124 -115.85 + 4 82.6436 1420 3 0 14.1954 104.15 -115.99 + 4 185.737 994 2 1 18.9794 107.097 -144.45 + 4 35.8029 1441 2 0 18.8003 108.462 -145.85 + 4 300.602 1442 2 0 18.7847 108.55 -145.94 + 4 34.2201 1443 2 0 18.7724 108.75 -146.144 + 4 216.678 1002 1 1 20.5989 137.973 -174.45 + 4 7.287 1589 1 0 20.7835 138.146 -175.85 + 4 104.215 1590 1 0 20.7883 138.15 -175.88 + 4 84.3252 1019 0 1 23.9674 140.211 -204.45 + 4 50.9187 1020 0 1 24.0501 140.408 -204.724 + 4 71.1931 1603 0 0 24.348 140.866 -205.85 + 4 41.5969 1604 0 0 24.419 140.95 -206.11 + 4 0.646247 968 3 1 13.8493 103.846 -114.45 + 4 144.004 981 2 1 16.3135 108.199 -144.451 + 4 152.177 1440 2 0 16.4689 108.283 -145.85 + 4 65.0872 1001 1 1 20.418 109.716 -174.45 + 4 262.172 1448 1 0 20.7135 109.859 -175.85 + 4 122.745 1036 0 1 27.3782 112.749 -204.45 + 4 235.308 1463 0 0 27.4682 112.837 -205.85 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 4.56371 LIN +Particle energy: 2.25641 LIN Particle: e- -Event: 29 -Number of tracker hits in this event: 105 - 29 155.013 685 11 1 -43.0358 -1.07623 125.55 - 29 117.139 894 11 0 -43.0371 -1.07512 124.15 - 29 132.374 684 10 1 -43.0594 -1.05523 95.55 - 29 140.479 894 10 0 -43.0516 -1.05529 94.15 - 29 391.491 685 9 1 -42.9169 -1.08343 65.55 - 29 250.326 894 9 0 -42.9155 -1.08499 64.15 - 29 97.6477 686 8 1 -42.8475 -1.1341 35.55 - 29 443.044 894 8 0 -42.8264 -1.14004 34.15 - 29 218.445 688 7 1 -42.3237 -1.2548 5.55 - 29 117.036 893 7 0 -42.305 -1.25568 4.15 - 29 139.88 690 6 1 -41.9264 -1.29383 -24.45 - 29 157.738 893 6 0 -41.8996 -1.30169 -25.85 - 29 123.242 693 5 1 -41.3804 -1.40803 -54.45 - 29 121.764 893 5 0 -41.3498 -1.38909 -55.85 - 29 124.759 696 4 1 -40.7537 -1.03449 -84.45 - 29 288.324 895 4 0 -40.7313 -1.01068 -85.85 - 29 81.4443 698 3 1 -40.2549 -0.535022 -114.45 - 29 48.1416 699 3 1 -40.25 -0.530151 -114.67 - 29 140.589 897 3 0 -40.2192 -0.50285 -115.85 - 29 27.0816 701 2 1 -39.6527 0.273222 -144.45 - 29 89.8189 702 2 1 -39.65 0.274491 -144.55 - 29 121.664 901 2 0 -39.616 0.294407 -145.85 - 29 139.806 705 1 1 -38.8802 0.741438 -174.45 - 29 109.74 903 1 0 -38.8386 0.76668 -175.85 - 29 107.955 710 0 1 -37.9621 1.2217 -204.45 - 29 115.836 905 0 0 -37.9009 1.23901 -205.85 - 29 2.27588 1273 0 0 -45.5405 74.85 -205.916 - 29 18.6221 689 7 1 -42.25 -1.19381 5.50946 - 29 384.116 685 8 1 -42.85 -1.13495 35.4903 - 29 100.269 685 7 1 -42.8908 -1.02467 5.55 - 29 187.741 895 7 0 -42.8892 -1.02148 4.15 - 29 196.875 685 6 1 -42.8559 -0.95154 -24.45 - 29 144.39 895 6 0 -42.8525 -0.956383 -25.85 - 29 97.1268 686 5 1 -42.8129 -1.01084 -54.45 - 29 108.436 895 5 0 -42.8235 -1.02547 -55.85 - 29 119.024 684 4 1 -43.1206 -1.22062 -84.45 - 29 300.462 894 4 0 -43.1648 -1.2312 -85.85 - 29 179.557 679 3 1 -44.0796 -1.43798 -114.45 - 29 103.644 893 3 0 -44.1078 -1.43601 -115.85 - 29 152.141 676 2 1 -44.8478 -1.41778 -144.45 - 29 114.38 893 2 0 -44.8538 -1.42695 -145.85 - 29 106.411 674 1 1 -45.1435 -1.58409 -174.45 - 29 115.773 892 1 0 -45.1758 -1.56955 -175.85 - 29 0.339091 671 0 1 -45.8499 -1.30745 -204.45 - 29 139.674 670 0 1 -45.85 -1.30743 -204.452 - 29 162.632 893 0 0 -45.9085 -1.29513 -205.85 - 29 337.503 686 4 1 -42.7772 -0.935514 -84.45 - 29 178.525 686 3 1 -42.7126 -0.995096 -114.45 - 29 154.58 895 3 0 -42.7086 -0.99773 -115.85 - 29 156.769 687 2 1 -42.6441 -1.04875 -144.45 - 29 172.699 894 2 0 -42.6391 -1.0522 -145.85 - 29 211.963 687 1 1 -42.5279 -1.12331 -174.45 - 29 242.759 894 1 0 -42.524 -1.12493 -175.85 - 29 112.67 688 0 1 -42.441 -1.16705 -204.45 - 29 111.142 894 0 0 -42.44 -1.16098 -205.85 - 29 1.78593 688 1 1 -42.45 -1.14459 -174.84 - 29 12.5106 723 0 1 -35.4257 -2.4302 -204.45 - 29 102.983 722 0 1 -35.45 -2.42464 -204.506 - 29 667.43 888 0 0 -36.0577 -2.32074 -205.85 - 29 333.008 896 4 0 -42.7336 -0.759741 -85.85 - 29 124.804 690 3 1 -41.9097 2.18651 -114.45 - 29 167.388 911 3 0 -41.8763 2.33862 -115.85 - 29 145.196 694 2 1 -41.1016 5.26787 -144.45 - 29 150.748 926 2 0 -41.0253 5.3895 -145.85 - 29 118.859 703 1 1 -39.4277 8.01288 -174.45 - 29 112.525 940 1 0 -39.3844 8.13748 -175.85 - 29 117.637 707 0 1 -38.5407 10.7959 -204.45 - 29 99.9281 954 0 0 -38.5111 10.9279 -205.85 - 29 75.2039 685 4 1 -42.8501 -0.962167 -84.6132 - 29 172.415 839 4 0 -14.3587 -12.1247 -86.25 - 29 218.392 895 9 0 -43.0153 -1.04829 64.15 - 29 148.546 895 8 0 -42.9882 -0.999291 34.15 - 29 141.165 684 7 1 -43.0596 -0.838819 5.55 - 29 99.4471 896 7 0 -43.0612 -0.832791 4.15 - 29 158.096 684 6 1 -43.0665 -0.680413 -24.45 - 29 133.645 896 6 0 -43.0768 -0.678139 -25.85 - 29 376.72 684 5 1 -43.2289 -0.602544 -54.45 - 29 114.577 897 5 0 -43.2396 -0.608867 -55.85 - 29 135.839 682 4 1 -43.4775 -0.748332 -84.45 - 29 122.978 681 3 1 -43.7019 -1.07428 -114.45 - 29 158.02 894 3 0 -43.7236 -1.09543 -115.85 - 29 211.133 679 2 1 -44.197 -1.54365 -144.45 - 29 160.369 892 2 0 -44.2206 -1.56305 -145.85 - 29 124.197 676 1 1 -44.6806 -1.98884 -174.45 - 29 101.619 890 1 0 -44.6612 -2.0112 -175.85 - 29 103.39 679 0 1 -44.2294 -2.36378 -204.45 - 29 150.698 887 0 0 -44.1527 -2.4501 -206.2 - 29 24.6763 685 5 1 -43.05 -0.684098 -54.7943 - 29 45.1296 892 5 0 -42.2276 -1.56635 -55.85 - 29 67.0045 891 5 0 -42.1599 -1.65 -55.9845 - 29 391.15 890 5 0 -42.1071 -1.85006 -56.0246 - 29 308.49 685 2 1 -43.0178 -1.10145 -144.45 - 29 42.6365 895 2 0 -43.0673 -1.05 -146.069 - 29 50.0086 683 1 1 -43.2923 1.0401 -174.45 - 29 105.929 684 1 1 -43.25 1.02752 -174.606 - 29 192.061 905 1 0 -42.6105 1.15545 -175.85 - 29 7.48872 1012 0 0 -16.8374 22.45 -205.91 - 29 156.859 1013 0 0 -16.5326 22.65 -205.934 - 29 108.707 891 2 0 -42.6959 -1.65 -145.922 - 29 76.1491 725 1 1 -35.0138 -12.3645 -174.45 - 29 46.1179 726 1 1 -34.85 -12.3854 -174.702 - 29 101.436 837 1 0 -34.1488 -12.4823 -175.85 - 29 132.706 805 0 1 -18.9839 -10.6557 -204.45 - 29 61.9556 850 0 0 -18.7215 -9.92962 -205.85 - 29 75.2952 851 0 0 -18.6919 -9.85 -205.988 -Number of digits in this event: 59 +Event: 5 +Number of tracker hits in this event: 142 + 5 152.77 606 11 1 -58.6523 33.0334 125.55 + 5 140.868 1064 11 0 -58.6499 33.0359 124.15 + 5 345.777 607 10 1 -58.5617 33.0627 95.55 + 5 121.477 1065 10 0 -58.5458 33.0649 94.15 + 5 116.515 609 9 1 -58.1972 33.1052 65.55 + 5 521.645 1065 9 0 -58.186 33.1181 64.15 + 5 234.106 609 8 1 -58.0775 33.3689 35.55 + 5 126.792 1066 8 0 -58.0844 33.364 34.15 + 5 114.057 609 7 1 -58.2332 33.2308 5.55 + 5 119.041 1065 7 0 -58.2047 33.2409 4.15 + 5 107.888 612 6 1 -57.6079 33.4076 -24.45 + 5 176.483 1066 6 0 -57.59 33.4074 -25.85 + 5 135.288 613 5 1 -57.3609 33.4204 -54.45 + 5 128.865 1067 5 0 -57.3338 33.4576 -55.85 + 5 44.688 617 4 1 -56.4601 34.1011 -84.45 + 5 65.4662 618 4 1 -56.45 34.1046 -84.6209 + 5 123.521 1070 4 0 -56.3742 34.1274 -85.85 + 5 114.37 626 3 1 -54.8009 34.8429 -114.45 + 5 116.576 1074 3 0 -54.7261 34.8795 -115.85 + 5 102.904 634 2 1 -53.1111 35.712 -144.45 + 5 95.9602 1078 2 0 -53.0245 35.7334 -145.85 + 5 133.147 643 1 1 -51.3542 36.2281 -174.45 + 5 8.02865 1080 1 0 -51.26 36.2498 -175.85 + 5 147.643 1081 1 0 -51.2591 36.25 -175.864 + 5 163.388 653 0 1 -49.2913 36.6831 -204.45 + 5 93.6822 1083 0 0 -49.1996 36.6962 -205.85 + 5 380.73 629 1 1 -54.0898 34.0885 -174.45 + 5 250.031 1070 1 0 -53.9823 34.1729 -175.85 + 5 138.508 640 0 1 -51.9207 34.1062 -204.451 + 5 306.917 1068 0 0 -51.6907 33.78 -205.85 + 5 14.9647 632 0 1 -53.6315 33.9982 -204.45 + 5 130.429 631 0 1 -53.65 33.993 -204.503 + 5 377.377 1071 0 0 -53.4979 34.326 -205.85 + 5 188.453 1070 0 0 -53.3864 34.2499 -206.086 + 5 362.66 604 1 1 -59.0921 33.8499 -174.45 + 5 330.916 1069 1 0 -59.0997 33.8599 -175.85 + 5 109.804 603 0 1 -59.355 34.0397 -204.45 + 5 162.565 604 0 1 -59.1528 33.9635 -204.45 + 5 124.312 1069 0 0 -59.1735 33.9675 -205.85 + 5 94.0247 606 10 1 -58.6676 33.148 95.55 + 5 128.737 1064 10 0 -58.5578 32.9065 94.15 + 5 42.5699 1063 10 0 -58.5486 32.85 93.8636 + 5 61.8703 598 9 1 -60.412 22.2707 65.55 + 5 120.466 597 9 1 -60.45 22.086 65.4102 + 5 8.67915 1003 9 0 -60.8379 20.6766 64.1499 + 5 67.2235 1002 9 0 -60.8462 20.65 64.1287 + 5 66.6878 1001 9 0 -60.9153 20.45 63.9687 + 5 137.419 1000 9 0 -60.9771 20.25 63.8124 + 5 62.1314 529 8 1 -74.0934 -19.6098 35.55 + 5 78.7688 528 8 1 -74.25 -19.6384 35.3758 + 5 0.206012 527 8 1 -74.45 -19.6435 35.1506 + 5 225.565 802 8 0 -75.3057 -19.5795 34.1499 + 5 75.4329 419 7 1 -96.2816 -19.9541 5.55 + 5 88.9462 418 7 1 -96.3501 -19.8504 5.39936 + 5 0.16707 805 7 0 -97.0351 -18.8507 4.15 + 5 132.724 806 7 0 -97.0356 -18.85 4.14913 + 5 30.9598 807 7 0 -97.1946 -18.65 3.84073 + 5 134.958 362 6 1 -107.734 -2.92246 -24.45 + 5 98.1021 361 6 1 -107.75 -2.91102 -24.571 + 5 116.801 886 6 0 -107.92 -2.74049 -25.85 + 5 104.993 330 5 1 -114.097 2.11076 -54.45 + 5 27.7448 329 5 1 -114.15 2.06855 -54.7847 + 5 148.922 909 5 0 -114.369 2.00668 -55.85 + 5 180.41 262 4 1 -127.62 5.11776 -84.4504 + 5 56.6242 921 4 0 -127.698 4.36256 -85.85 + 5 72.0486 920 4 0 -127.708 4.25 -86.037 + 5 19.0363 266 3 1 -126.899 -16.338 -114.45 + 5 96.9306 265 3 1 -126.95 -16.3816 -114.507 + 5 44.8194 264 3 1 -127.15 -16.5969 -114.763 + 5 46.6045 809 3 0 -128.117 -18.1062 -115.85 + 5 75.8516 808 3 0 -128.201 -18.25 -115.955 + 5 59.5339 807 3 0 -128.315 -18.4508 -116.064 + 5 62.6665 806 3 0 -128.42 -18.6511 -116.156 + 5 0.862965 805 3 0 -128.555 -18.8501 -116.248 + 5 67.3527 1060 10 0 -58.1253 32.1674 94.15 + 5 79.4834 1059 10 0 -58.0725 32.05 94.0004 + 5 287.503 606 9 1 -58.7363 33.1735 65.55 + 5 161.478 605 8 1 -58.8754 33.1045 35.55 + 5 131.53 1065 8 0 -58.9076 33.1167 34.15 + 5 130.885 602 7 1 -59.5607 33.933 5.55 + 5 207.471 1069 7 0 -59.6092 33.9823 4.15 + 5 156.552 597 6 1 -60.616 35.0347 -24.45 + 5 123.522 1074 6 0 -60.6614 35.0363 -25.85 + 5 102.256 592 5 1 -61.5231 35.0537 -54.45 + 5 160.409 1075 5 0 -61.567 35.0543 -55.85 + 5 113.307 587 4 1 -62.4526 35.0217 -84.45 + 5 237.069 1074 4 0 -62.4656 35.0251 -85.85 + 5 136.467 587 3 1 -62.5563 35.1665 -114.45 + 5 116.101 1075 3 0 -62.5726 35.1198 -115.85 + 5 157.419 585 2 1 -62.8884 34.2169 -144.45 + 5 114.756 1070 2 0 -62.9096 34.1698 -145.85 + 5 120.995 583 1 1 -63.3076 33.21 -174.45 + 5 111.932 1065 1 0 -63.375 33.1818 -175.85 + 5 102.484 576 0 1 -64.8124 32.5953 -204.45 + 5 107.211 1062 0 0 -64.9488 32.5555 -205.85 + 5 126.05 1067 8 0 -58.044 33.6271 34.15 + 5 192.168 616 7 1 -56.7922 33.9021 5.55 + 5 102.571 1068 7 0 -56.7527 33.85 4.05251 + 5 183.482 620 6 1 -55.9423 32.8021 -24.45 + 5 105.968 1063 6 0 -55.9842 32.8118 -25.85 + 5 157.495 615 5 1 -56.8967 33.2834 -54.45 + 5 149.605 1066 5 0 -56.8959 33.3084 -55.85 + 5 137.175 616 4 1 -56.7861 33.6682 -84.45 + 5 348.607 1068 4 0 -56.7593 33.7118 -85.85 + 5 117.323 616 3 1 -56.7065 34.787 -114.45 + 5 112.272 1073 3 0 -56.7574 34.8161 -115.85 + 5 50.4077 609 2 1 -58.2414 35.4231 -144.45 + 5 71.4802 608 2 1 -58.25 35.428 -144.582 + 5 209.706 1077 2 0 -58.3291 35.4813 -145.851 + 5 49.1579 600 1 1 -60.0366 36.6603 -174.45 + 5 49.8169 599 1 1 -60.0501 36.6654 -174.624 + 5 99.1505 1083 1 0 -60.1419 36.6987 -175.85 + 5 156.824 590 0 1 -61.8962 37.1867 -204.45 + 5 117.866 1086 0 0 -61.9407 37.3095 -205.85 + 5 12.407 592 0 1 -61.543 37.6219 -204.45 + 5 0.69625 1090 0 0 -61.6772 38.2488 -205.85 + 5 107.822 1091 0 0 -61.6774 38.25 -205.852 + 5 35.532 1092 0 0 -61.5817 38.4502 -206.104 + 5 66.2954 1065 5 0 -56.8991 33.25 -55.9338 + 5 75.4211 619 5 1 -56.1347 34.2712 -54.85 + 5 68.8169 618 6 1 -56.2961 33.7362 -24.4501 + 5 67.6603 617 6 1 -56.4505 33.7302 -24.6229 + 5 0.0523363 616 6 1 -56.65 33.7087 -24.8496 + 5 110.013 1067 6 0 -57.4587 33.506 -25.85 + 5 36.2919 517 5 1 -76.5516 25.5298 -54.45 + 5 67.9263 516 5 1 -76.6509 25.5381 -54.549 + 5 115.071 515 5 1 -76.85 25.5652 -54.6944 + 5 127.251 1027 5 0 -78.1666 25.5708 -55.85 + 5 142.22 995 5 0 -116.67 19.1046 -56.25 + 5 281.845 994 5 0 -116.739 19.0497 -56.1484 + 5 187.297 993 5 0 -117.13 18.85 -56.0333 + 5 118.353 996 5 0 -118.448 19.2506 -56.2254 + 5 161.197 1511 5 0 -16.7664 122.366 -56.2499 + 5 92.5361 619 6 1 -56.1573 33.7571 -24.45 + 5 57.8999 1070 6 0 -55.1326 34.1894 -25.85 + 5 120.111 1071 6 0 -55.0089 34.25 -26.007 + 5 121.794 1343 6 0 -68.2899 88.7768 -26.2495 + 5 172.232 557 6 1 -68.5096 88.85 -24.85 + 5 141.632 1277 7 0 -80.0503 75.5606 3.75 + 5 46.8034 1276 7 0 -80.1936 75.45 4.03629 + 5 101.566 495 7 1 -80.8526 75.1532 5.15 + 5 30.4221 494 7 1 -81.05 75.0793 5.4386 +Number of digits in this event: 65 Using G4ParticleGun... -Particle energy: 7.75572 LIN +Particle energy: 1.99146 LIN Particle: e- -Event: 30 -Number of tracker hits in this event: 42 - 30 58.2414 934 11 0 84.1263 6.98495 123.992 - 30 214.043 1320 10 1 84.1237 6.98673 95.55 - 30 150.389 934 10 0 84.1236 6.98707 94.15 - 30 187.749 1320 9 1 84.1262 6.99344 65.55 - 30 126.657 934 9 0 84.1271 6.99415 64.15 - 30 102.891 1320 8 1 84.1471 7.00739 35.55 - 30 102.064 934 8 0 84.1481 7.00801 34.15 - 30 124.919 1320 7 1 84.1669 7.02222 5.55 - 30 218.622 934 7 0 84.1691 7.022 4.15 - 30 176.547 1320 6 1 84.2153 7.01905 -24.45 - 30 95.8355 934 6 0 84.2173 7.01802 -25.85 - 30 98.9562 1321 5 1 84.2553 6.99711 -54.45 - 30 169.091 934 5 0 84.2588 6.99609 -55.85 - 30 129.978 1321 4 1 84.3303 6.97324 -84.45 - 30 101.897 934 4 0 84.3329 6.97257 -85.85 - 30 223.197 1321 3 1 84.3856 6.96006 -114.45 - 30 212.965 934 3 0 84.3887 6.95804 -115.85 - 30 51.7313 1321 2 1 84.4496 6.9171 -144.45 - 30 74.4652 1322 2 1 84.45 6.91674 -144.62 - 30 117.151 934 2 0 84.4529 6.91422 -145.85 - 30 198.887 1322 1 1 84.5232 6.85345 -174.45 - 30 279.811 934 1 0 84.5275 6.85113 -175.85 - 30 114.354 1322 0 1 84.6185 6.80535 -204.45 - 30 111.786 933 0 0 84.6245 6.80382 -205.85 - 30 59.9656 753 1 1 -29.25 -137.176 -174.733 - 30 83.6308 1321 6 1 84.25 7.05332 -24.5371 - 30 287.255 1322 6 1 84.4502 7.22641 -24.6036 - 30 313.863 931 6 0 84.7953 6.28161 -25.8502 - 30 24.0636 930 6 0 84.812 6.24984 -25.8983 - 30 24.7435 1323 6 1 84.65 7.38748 -24.7836 - 30 231.069 939 6 0 84.7211 7.9527 -25.8503 - 30 10.7796 1320 3 1 84.2454 7.05308 -114.45 - 30 101.768 1334 2 1 86.9009 6.67508 -144.451 - 30 107.535 933 2 0 87.1294 6.68039 -145.85 - 30 37.4679 1354 1 1 91.1306 7.0607 -174.45 - 30 61.4184 1355 1 1 91.15 7.04858 -174.615 - 30 142.529 1372 0 1 94.5713 4.68991 -204.45 - 30 40.3215 1371 0 1 94.55 4.66966 -204.706 - 30 99.9936 922 0 0 94.4616 4.56355 -205.85 - 30 178.163 1321 9 1 84.2501 6.90262 65.4812 - 30 50.6442 1029 10 0 74.0909 25.976 93.75 - 30 33.8034 1030 10 0 74.1554 26.05 93.7824 -Number of digits in this event: 21 +Event: 6 +Number of tracker hits in this event: 33 + 6 129.801 1271 10 1 74.3597 48.6647 95.55 + 6 192.064 1143 10 0 74.3584 48.6648 94.15 + 6 112.591 1271 9 1 74.3336 48.6713 65.55 + 6 104.359 1143 9 0 74.3331 48.6693 64.15 + 6 126.338 1271 8 1 74.3159 48.6364 35.55 + 6 112.207 1142 8 0 74.2943 48.6291 34.15 + 6 122.693 1269 7 1 73.8604 48.7087 5.55 + 6 232.283 1143 7 0 73.8369 48.7407 4.15 + 6 106.882 1266 6 1 73.3481 49.023 -24.45 + 6 265.926 1144 6 0 73.3214 49.0009 -25.85 + 6 120.419 1265 5 1 73.0628 48.4342 -54.45 + 6 125.19 1141 5 0 73.0737 48.4021 -55.85 + 6 155.369 1267 4 1 73.4502 47.6995 -84.45 + 6 133.42 1138 4 0 73.471 47.6943 -85.85 + 6 120.101 1270 3 1 74.0714 47.5844 -114.45 + 6 127.389 1137 3 0 74.031 47.5191 -115.85 + 6 106.724 1266 2 1 73.3597 46.2676 -144.45 + 6 135.107 1130 2 0 73.3166 46.2109 -145.85 + 6 102.396 1261 1 1 72.3433 44.9926 -174.45 + 6 113.053 1124 1 0 72.2838 44.9517 -175.85 + 6 149.041 1253 0 1 70.7579 44.1499 -204.45 + 6 104.718 1120 0 0 70.6924 44.0801 -205.85 + 6 62.8565 1210 7 0 31.4497 62.1485 3.75 + 6 163.235 1209 7 0 31.3987 62.05 3.9171 + 6 37.3268 1208 7 0 31.3184 61.85 4.10871 + 6 326.967 1052 7 1 30.5942 59.5294 5.15 + 6 241.736 1051 7 1 30.45 59.2709 5.38547 + 6 70.2135 1657 12 0 -25.088 151.634 153.75 + 6 49.0582 788 12 1 -22.45 143.528 155.392 + 6 22.2343 1605 12 0 -17.8714 141.35 153.957 + 6 213.231 1658 12 0 -25.1313 151.75 154.018 + 6 57.646 1082 0 1 36.6177 45.5212 -204.85 + 6 15.1725 516 4 0 89.1602 -76.65 -85.9404 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 9.3503 LIN +Particle energy: 2.7999 LIN Particle: e- -Event: 31 -Number of tracker hits in this event: 97 - 31 119.425 1525 8 1 125.344 -64.1923 35.55 - 31 125.665 579 8 0 125.344 -64.1922 34.15 - 31 93.3669 1525 7 1 125.347 -64.19 5.55 - 31 146.109 579 7 0 125.348 -64.1895 4.15 - 31 137.582 1526 6 1 125.359 -64.1819 -24.45 - 31 121.956 579 6 0 125.359 -64.1807 -25.85 - 31 121.861 1526 5 1 125.357 -64.1577 -54.45 - 31 111.059 579 5 0 125.356 -64.1564 -55.85 - 31 238.203 1526 4 1 125.354 -64.1348 -84.45 - 31 181.961 579 4 0 125.354 -64.1331 -85.85 - 31 509.611 1526 3 1 125.372 -64.0955 -114.45 - 31 510.564 579 3 0 125.373 -64.0931 -115.85 - 31 562.185 1526 2 1 125.391 -64.0425 -144.45 - 31 262.734 580 2 0 125.393 -64.0402 -145.85 - 31 402.438 1526 1 1 125.424 -63.9953 -174.45 - 31 467.819 580 1 0 125.426 -63.9929 -175.85 - 31 486.32 1526 0 1 125.456 -63.9416 -204.45 - 31 127.148 580 0 0 125.457 -63.9378 -205.85 - 31 292.555 1736 1 1 167.441 49.2309 -174.45 - 31 131.114 583 0 0 125.434 -63.3616 -205.85 - 31 139.602 579 0 0 125.447 -64.1647 -205.85 - 31 161.716 514 3 0 100.968 -77.1233 -116.25 - 31 49.8409 586 2 0 125.678 -62.7583 -145.85 - 31 85.0555 587 2 0 125.685 -62.6496 -145.973 - 31 5.75851 588 2 0 125.705 -62.4499 -146.24 - 31 257.415 1543 1 1 128.835 -42.2029 -174.45 - 31 131.315 691 1 0 128.768 -41.7721 -175.85 - 31 188.954 1542 0 1 128.592 -36.6528 -204.45 - 31 657.751 1541 0 1 128.55 -36.5552 -204.556 - 31 107.797 1544 1 1 128.95 -42.2479 -174.643 - 31 157.716 1545 1 1 129.15 -42.2534 -174.778 - 31 9.12432 680 1 0 129.48 -44.007 -175.85 - 31 106.845 1556 1 1 131.388 -45.5241 -174.85 - 31 209.488 1525 2 1 125.326 -64.0676 -144.45 - 31 132.104 1496 1 1 119.484 -62.3945 -174.45 - 31 109.558 588 1 0 119.054 -62.2956 -175.85 - 31 151.907 1445 0 1 109.29 -59.5536 -204.45 - 31 120.882 604 0 0 108.825 -59.2135 -205.85 - 31 59.6907 581 4 0 125.545 -63.717 -85.85 - 31 49.3296 582 4 0 125.569 -63.65 -86.0511 - 31 37.4046 1548 3 1 129.842 -52.2621 -114.45 - 31 48.5865 1547 3 1 129.75 -52.2769 -114.501 - 31 89.6421 1546 3 1 129.55 -52.2904 -114.595 - 31 58.4457 1545 3 1 129.35 -52.2968 -114.716 - 31 4.20214 1544 3 1 129.15 -52.2978 -114.841 - 31 282.547 638 3 0 127.533 -52.3455 -115.85 - 31 65.4929 1408 2 1 101.845 -35.7893 -144.45 - 31 156.398 1409 2 1 101.95 -35.9584 -144.601 - 31 98.3079 1410 2 1 102.15 -36.372 -144.793 - 31 57.8213 709 2 0 103.911 -38.1132 -145.85 - 31 73.6032 708 2 0 104.018 -38.2502 -145.953 - 31 49.997 707 2 0 104.114 -38.45 -146.119 - 31 162.912 637 3 0 127.232 -52.45 -116.004 - 31 125.691 636 3 0 127.03 -52.65 -116.054 - 31 108.004 1523 4 1 124.919 -63.8329 -84.45 - 31 105.698 1522 4 1 124.75 -64.1426 -84.5179 - 31 52.173 580 4 0 125.514 -64.0498 -86.1099 - 31 145.046 578 2 0 125.413 -64.4058 -145.85 - 31 204.117 1527 1 1 125.67 -65.1165 -174.45 - 31 129.532 574 1 0 125.67 -65.13 -175.85 - 31 128.388 1527 0 1 125.688 -65.3968 -204.45 - 31 100.281 573 0 0 125.69 -65.3996 -205.85 - 31 420.877 575 2 0 126.173 -64.9085 -145.85 - 31 280.133 1527 2 1 125.655 -64.3585 -144.45 - 31 139.942 1528 2 1 125.75 -64.5364 -144.459 - 31 80.5629 567 2 0 125.121 -66.544 -145.85 - 31 8.74122 566 2 0 125.064 -66.65 -145.876 - 31 267.727 1523 2 1 124.942 -66.7968 -144.85 - 31 161.847 1524 2 1 124.95 -66.8032 -144.743 - 31 146.329 578 3 0 125.365 -64.3009 -115.85 - 31 134.21 1522 2 1 124.67 -67.0655 -144.45 - 31 141.599 564 2 0 124.691 -67.1296 -145.85 - 31 143.063 1524 1 1 125.05 -68.5521 -174.45 - 31 83.9925 557 1 0 125.151 -68.633 -175.851 - 31 30.4873 556 1 0 125.171 -68.65 -176.132 - 31 164.215 1534 0 1 127.061 -70.432 -204.45 - 31 106.136 547 0 0 127.096 -70.531 -205.85 - 31 10.9555 782 3 0 -57.9781 -23.65 -116.173 - 31 99.5601 612 3 1 -57.5995 -23.0768 -114.85 - 31 187.613 785 3 0 -56.7414 -23.0052 -115.85 - 31 55.1841 786 3 0 -56.6081 -22.85 -115.887 - 31 103.911 1525 3 1 125.35 -64.1684 -114.514 - 31 139.846 1507 2 1 121.671 -63.2574 -144.45 - 31 31.7503 583 2 0 121.375 -63.4344 -145.85 - 31 87.0295 582 2 0 121.347 -63.45 -145.976 - 31 138.969 1470 1 1 114.346 -65.8243 -174.45 - 31 170.802 569 1 0 113.953 -66.1269 -175.85 - 31 66.4533 1425 0 1 105.216 -72.6592 -204.45 - 31 91.2971 1424 0 1 105.15 -72.6793 -204.582 - 31 139.193 535 0 0 104.47 -72.8539 -205.85 - 31 108.312 579 2 0 125.479 -64.1028 -145.85 - 31 174.376 1564 1 1 133.016 -67.2817 -174.45 - 31 4.30256 1565 1 1 133.15 -67.3497 -174.836 - 31 146.602 562 1 0 133.502 -67.5202 -175.85 - 31 92.4435 1613 0 1 142.831 -71.2229 -204.45 - 31 25.7742 1614 0 1 142.95 -71.3469 -204.804 - 31 115.469 541 0 0 143.322 -71.7244 -205.85 -Number of digits in this event: 56 +Event: 7 +Number of tracker hits in this event: 48 + 7 162.404 1154 9 1 51.0327 124.874 65.55 + 7 123.013 1523 9 0 51.0333 124.872 64.15 + 7 135.772 1154 8 1 51.0323 124.825 35.55 + 7 111.905 1523 8 0 51.0327 124.819 34.15 + 7 107.519 1154 7 1 51.0444 124.691 5.55 + 7 114.403 1522 7 0 51.0502 124.683 4.15 + 7 139.704 1155 6 1 51.176 124.514 -24.45 + 7 141.85 1521 6 0 51.1794 124.508 -25.85 + 7 124.139 1156 5 1 51.2636 124.381 -54.45 + 7 113.088 1521 5 0 51.2635 124.374 -55.85 + 7 154.074 1156 4 1 51.2666 124.224 -84.45 + 7 111.155 1520 4 0 51.2679 124.218 -85.85 + 7 116.931 1156 3 1 51.2786 124.114 -114.45 + 7 94.8192 1519 3 0 51.2802 124.111 -115.85 + 7 123.28 1156 2 1 51.3087 124.042 -144.45 + 7 149.21 1519 2 0 51.312 124.037 -145.85 + 7 148.774 1156 1 1 51.3806 123.944 -174.45 + 7 139.871 1518 1 0 51.3827 123.94 -175.85 + 7 175.854 1156 0 1 51.4393 123.879 -204.45 + 7 115.208 1518 0 0 51.4368 123.88 -205.85 + 7 149.699 1153 1 1 50.815 124.556 -174.45 + 7 237.465 1524 1 0 50.7289 125.144 -175.85 + 7 114.399 1525 1 0 50.728 125.15 -175.863 + 7 4.31762 1526 1 0 50.7006 125.35 -176.221 + 7 156.403 1154 1 1 50.85 124.52 -174.503 + 7 36.1914 1523 1 0 51.0026 124.915 -175.85 + 7 25.7123 1166 0 1 53.273 133.111 -204.45 + 7 229.914 1165 0 1 53.25 133.138 -204.511 + 7 218.375 1567 0 0 52.5942 133.553 -205.851 + 7 105.292 1566 0 0 52.372 133.55 -206.202 + 7 8.70062 1785 0 0 -26.6107 177.202 -206.25 + 7 12.861 1516 9 0 50.1034 123.368 64.1497 + 7 38.6873 1515 9 0 50.0924 123.35 64.1342 + 7 82.8193 1143 9 1 48.8203 122.507 65.15 + 7 35.4103 1142 9 1 48.6489 122.428 65.1927 + 7 36.5809 1507 9 0 47.1885 121.616 64.1498 + 7 125.258 1506 9 0 47.078 121.55 64.0813 + 7 38.8323 1505 9 0 46.7548 121.35 63.8163 + 7 33.9032 1219 9 0 5.73074 63.935 63.75 + 7 54.7766 1218 9 0 5.72728 63.8499 63.7674 + 7 67.8514 1217 9 0 5.72957 63.6499 63.806 + 7 67.6421 1216 9 0 5.68792 63.45 63.8139 + 7 15.0606 860 9 0 2.15976 -7.9979 63.7501 + 7 129.618 859 9 0 2.17262 -8.05 63.7817 + 7 72.2466 858 9 0 2.30438 -8.25003 63.9783 + 7 3.2254 912 9 1 2.64712 -7.63198 65.15 + 7 267.27 913 9 1 2.65 -7.62697 65.1587 + 7 36.4795 903 9 1 0.85 52.5688 65.3706 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 2.68784 LIN +Particle energy: 8.32972 LIN Particle: e- -Event: 32 -Number of tracker hits in this event: 47 - 32 121.653 1254 7 1 70.9107 129.384 5.55 - 32 120.674 1546 7 0 70.912 129.386 4.15 - 32 156.286 1254 6 1 70.9423 129.417 -24.45 - 32 115.039 1546 6 0 70.9427 129.42 -25.85 - 32 415.583 1254 5 1 70.9591 129.473 -54.45 - 32 146.407 1546 5 0 70.9587 129.471 -55.85 - 32 204.894 1254 4 1 70.9637 129.439 -84.45 - 32 103.185 1546 4 0 70.9836 129.454 -85.85 - 32 168.681 1256 3 1 71.3383 129.82 -114.45 - 32 242.24 1548 3 0 71.3744 129.821 -115.85 - 32 232.927 1260 2 1 72.1268 130.076 -144.45 - 32 128.116 1549 2 0 72.1461 130.107 -145.85 - 32 114.232 1261 1 1 72.3815 130.807 -174.45 - 32 109.386 1553 1 0 72.4777 130.842 -175.85 - 32 33.1713 1270 0 1 74.2341 131.544 -204.45 - 32 105.892 1271 0 1 74.25 131.533 -204.538 - 32 79.4106 1556 0 0 74.532 131.383 -205.85 - 32 188.087 1555 0 0 74.5986 131.35 -206.143 - 32 237.555 1258 1 1 71.8057 130.303 -174.451 - 32 93.7801 1551 1 0 71.9664 130.352 -175.85 - 32 218.184 1276 0 1 75.2738 131.236 -204.45 - 32 61.0908 1277 0 1 75.4503 131.245 -204.571 - 32 106.803 1278 0 1 75.65 131.265 -204.698 - 32 6.77701 1279 0 1 75.8503 131.358 -204.84 - 32 160.252 1560 0 0 77.35 132.157 -205.85 - 32 141.908 1561 0 0 77.6827 132.35 -206.143 - 32 220.356 1550 1 0 71.8732 130.326 -175.851 - 32 227.88 1268 0 1 73.7029 132.096 -204.45 - 32 182.881 1267 0 1 73.65 132.018 -204.635 - 32 7.69392 1244 0 1 69.0331 123.687 -204.45 - 32 106.629 1245 0 1 69.05 123.691 -204.495 - 32 141.314 1518 0 0 69.5949 123.805 -205.85 - 32 72.5355 1540 5 0 70.8954 128.281 -55.85 - 32 62.9506 1539 5 0 70.882 128.15 -55.9953 - 32 46.9463 1538 5 0 70.9008 127.95 -56.1686 - 32 47.6935 1270 5 0 3.46125 74.2037 -56.2499 - 32 164.739 1271 5 0 3.28137 74.25 -56.198 - 32 79.3307 1272 5 0 2.97194 74.4501 -56.028 - 32 33.3246 1273 5 0 2.77189 74.65 -55.8954 - 32 91.7977 905 5 1 1.0971 76.3943 -54.85 - 32 222.941 904 5 1 1.04984 76.4454 -54.8256 - 32 94.9454 903 5 1 0.85 76.5459 -54.806 - 32 11.8106 902 5 1 0.649656 76.734 -54.8375 - 32 37.7382 1297 5 0 0.0959535 79.4967 -55.85 - 32 99.2252 1298 5 0 0.05 79.6752 -55.9501 - 32 102.347 1299 5 0 0.149562 79.85 -56.0178 - 32 187.629 1300 5 0 0.24132 80.05 -56.0601 -Number of digits in this event: 24 +Event: 8 +Number of tracker hits in this event: 156 + 8 135.425 673 11 1 -45.3981 55.2858 125.55 + 8 103.111 1176 11 0 -45.3982 55.2851 124.15 + 8 389.184 673 10 1 -45.4008 55.2724 95.55 + 8 254.947 1176 10 0 -45.4006 55.2725 94.15 + 8 663.587 673 9 1 -45.3923 55.2772 65.55 + 8 183.659 1176 9 0 -45.3929 55.2765 64.15 + 8 128.743 673 8 1 -45.4052 55.2643 35.55 + 8 124.434 1176 8 0 -45.4043 55.2651 34.15 + 8 234.255 673 7 1 -45.3885 55.281 5.55 + 8 236.004 1176 7 0 -45.389 55.2812 4.15 + 8 97.9379 673 6 1 -45.3899 55.258 -24.45 + 8 101.393 1176 6 0 -45.3896 55.2577 -25.85 + 8 135.143 673 5 1 -45.3848 55.2516 -54.45 + 8 137.45 1176 5 0 -45.3846 55.2506 -55.85 + 8 113.97 673 4 1 -45.3907 55.2287 -84.45 + 8 97.062 1175 4 0 -45.3902 55.2285 -85.85 + 8 121.28 673 3 1 -45.379 55.2236 -114.45 + 8 121.945 1175 3 0 -45.3788 55.2243 -115.85 + 8 602.128 673 2 1 -45.3729 55.2391 -144.45 + 8 129.369 1175 2 0 -45.3733 55.2386 -145.85 + 8 361.416 673 1 1 -45.3896 55.2248 -174.45 + 8 522.128 1175 1 0 -45.3919 55.2226 -175.85 + 8 286.853 673 0 1 -45.4343 55.1696 -204.45 + 8 261.254 1175 0 0 -45.4371 55.1657 -205.85 + 8 273.593 1127 11 1 45.5699 99.8581 125.15 + 8 13.7431 1128 11 1 45.65 99.8657 125.549 + 8 143.072 1299 1 0 -53.1831 79.85 -176.01 + 8 149.567 1076 0 0 -157.602 35.3148 -206.25 + 8 391.114 116 0 1 -156.911 36.1532 -204.85 + 8 109.099 117 0 1 -156.75 36.3548 -204.654 + 8 397.501 1076 6 0 -110.068 35.3352 -26.2495 + 8 84.0683 1075 6 0 -110.325 35.25 -25.9895 + 8 95.4663 342 6 1 -111.707 35.4073 -24.85 + 8 368.052 341 6 1 -111.75 35.4134 -24.8069 + 8 273.602 672 0 1 -45.6421 54.311 -204.45 + 8 234.102 1171 0 0 -45.5747 54.3176 -205.85 + 8 538.056 1176 2 0 -45.3334 55.3428 -145.85 + 8 231.21 678 1 1 -44.3747 56.3131 -174.45 + 8 102.673 1180 1 0 -44.3159 56.2437 -175.85 + 8 151.661 684 0 1 -43.0925 54.69 -204.45 + 8 39.5777 1173 0 0 -43.084 54.6545 -205.85 + 8 114.411 1172 0 0 -43.0829 54.65 -206.023 + 8 99.6531 672 1 1 -45.6264 55.8405 -174.45 + 8 163.118 1179 1 0 -45.6219 55.8545 -175.85 + 8 134.839 1180 0 0 -45.5433 56.1116 -205.85 + 8 3.97669 1178 1 0 -45.3378 55.7168 -175.85 + 8 42.2213 688 1 1 -42.45 67.7191 -174.567 + 8 290.714 1182 1 0 -44.3525 56.4547 -175.85 + 8 286.764 682 0 1 -43.4964 58.2963 -204.45 + 8 63.2137 1191 0 0 -43.4011 58.4282 -205.851 + 8 116.686 1192 0 0 -43.3867 58.45 -206.066 + 8 134.643 682 1 1 -43.6131 58.504 -174.45 + 8 135.596 1193 1 0 -43.3278 58.6646 -175.85 + 8 119.619 716 0 1 -36.6752 60.4111 -204.45 + 8 58.6736 717 0 1 -36.65 60.4353 -204.667 + 8 131.252 1202 0 0 -36.5302 60.5678 -205.85 + 8 15.0405 1203 0 0 -36.5072 60.65 -206.221 + 8 167.148 1148 0 0 -28.1774 49.7251 -206.25 + 8 101.161 668 6 1 -46.3219 67.3924 -24.45 + 8 118.175 1239 6 0 -46.3877 67.941 -25.85 + 8 38.5386 1240 6 0 -46.439 68.05 -26.1461 + 8 26.6132 1422 6 0 -45.1294 104.687 -26.25 + 8 87.0634 1423 6 0 -45.1023 104.75 -26.178 + 8 130.534 675 6 1 -44.9879 105.053 -24.85 + 8 99.7099 1118 7 0 -75.6696 43.8142 3.75008 + 8 9.2967 1482 7 0 -67.9381 116.55 3.75 + 8 346.655 1481 7 0 -67.9605 116.55 3.77602 + 8 68.3252 1324 5 0 -54.9666 84.85 -55.9371 + 8 196.171 672 9 1 -45.4501 55.2246 65.185 + 8 280.277 1175 9 0 -45.6964 55.0644 64.15 + 8 91.252 1174 9 0 -45.7207 55.05 64.0543 + 8 26.2903 634 8 1 -53.0706 48.9499 35.5496 + 8 160.386 635 8 1 -53.05 48.9991 35.4754 + 8 69.8324 1151 8 0 -52.1136 50.2793 34.1499 + 8 102.393 1152 8 0 -51.9896 50.45 34.0138 + 8 101.922 1153 8 0 -51.796 50.6501 33.9007 + 8 75.0448 1154 8 0 -51.5594 50.85 33.8517 + 8 114.55 1155 8 0 -51.381 51.05 33.8603 + 8 73.723 1156 8 0 -51.2337 51.2503 33.8454 + 8 28.9516 1157 8 0 -51.0971 51.45 33.7881 + 8 119.532 1177 9 0 -45.779 55.5056 64.15 + 8 96.8845 621 8 1 -55.7532 62.483 35.5499 + 8 37.502 620 8 1 -55.85 62.7307 35.2431 + 8 98.5591 1217 8 0 -56.0711 63.5127 34.1497 + 8 69.5552 1218 8 0 -56.1221 63.6502 33.9359 + 8 5.22575 581 7 1 -63.8396 85.5529 5.55 + 8 109.402 580 7 1 -63.85 85.5555 5.5344 + 8 23.3708 579 7 1 -64.05 85.6434 5.22171 + 8 166.839 1329 7 0 -64.8172 85.9116 4.14934 + 8 6.3646 1330 7 0 -65.1555 86.05 3.76738 + 8 224.538 404 6 1 -99.1627 98.4018 -24.45 + 8 122.12 403 6 1 -99.3501 98.2713 -24.8005 + 8 4.96472 1378 6 0 -98.2062 95.9492 -25.85 + 8 0.404914 401 6 1 -99.8267 94.9279 -24.8499 + 8 2.64618 1382 6 0 -102 96.7038 -25.85 + 8 36.6949 387 6 1 -102.677 98.054 -24.85 + 8 99.3491 964 0 0 -66.0521 13.05 -206.023 + 8 173.747 675 1 1 -44.9479 56.3402 -174.45 + 8 125.116 679 0 1 -44.1738 58.4586 -204.45 + 8 205.736 1193 0 0 -44.1553 58.65 -205.869 + 8 21.8629 1185 1 0 -44.3452 57.1792 -175.85 + 8 94.5252 1186 1 0 -44.3029 57.25 -175.927 + 8 17.2069 1187 1 0 -44.2613 57.4507 -176.197 + 8 104.043 675 8 1 -44.9939 54.7487 35.55 + 8 133.447 1173 8 0 -44.9882 54.7108 34.15 + 8 163.241 675 7 1 -44.8941 53.682 5.55 + 8 105.822 1167 7 0 -44.8833 53.5894 4.15 + 8 146.947 677 6 1 -44.5951 51.6218 -24.45 + 8 102.333 1156 6 0 -44.5782 51.4486 -25.85 + 8 389.063 678 5 1 -44.3188 47.9288 -54.45 + 8 19.2575 1138 5 0 -44.2178 47.6628 -55.85 + 8 103.762 1137 5 0 -44.213 47.65 -55.9175 + 8 121.826 690 4 1 -42.0017 42.1079 -84.45 + 8 59.7115 1109 4 0 -41.8935 41.885 -85.85 + 8 105.412 1108 4 0 -41.8762 41.85 -86.0706 + 8 125.176 701 3 1 -39.7151 37.3286 -114.45 + 8 78.5893 1085 3 0 -39.6641 37.0862 -115.85 + 8 77.4184 1084 3 0 -39.6561 37.05 -116.063 + 8 139.686 707 2 1 -38.5146 32.5568 -144.45 + 8 119.341 1061 2 0 -38.4304 32.3852 -145.85 + 8 173.089 716 1 1 -36.8425 28.8219 -174.45 + 8 127.437 1042 1 0 -36.79 28.6076 -175.85 + 8 149.59 722 0 1 -35.5307 24.5386 -204.45 + 8 89.4088 1021 0 0 -35.3899 24.2968 -205.85 + 8 39.9249 1020 0 0 -35.3629 24.25 -206.12 + 8 34.4283 677 5 1 -44.45 48.1254 -54.7548 + 8 182.732 1141 5 0 -45.0306 48.3021 -55.8507 + 8 337.032 1140 5 0 -45.3235 48.25 -55.952 + 8 58.2944 667 5 1 -46.5674 47.8451 -54.85 + 8 199.81 666 5 1 -46.65 47.7976 -54.7987 + 8 153.36 1175 10 0 -45.4982 55.1436 94.15 + 8 98.8486 653 9 1 -49.351 51.8654 65.5498 + 8 19.4644 652 9 1 -49.45 51.9318 65.2222 + 8 91.4893 1160 9 0 -49.803 52.1807 64.1495 + 8 105.671 1161 9 0 -49.879 52.25 63.9244 + 8 221.638 617 8 1 -56.6492 62.9398 35.55 + 8 22.5555 1219 8 0 -56.1374 63.9983 34.15 + 8 75.3258 1220 8 0 -56.116 64.05 34.0912 + 8 90.5555 1221 8 0 -56.0353 64.25 33.9196 + 8 11.2217 1222 8 0 -55.9388 64.45 33.7604 + 8 89.5074 688 7 1 -42.4253 97.6308 5.55 + 8 112.928 689 7 1 -42.25 97.856 5.40406 + 8 29.4774 690 7 1 -42.0497 98.1524 5.19203 + 8 63.2555 1397 7 0 -40.8589 99.6174 4.14995 + 8 99.0654 1398 7 0 -40.7678 99.7503 4.06684 + 8 82.6532 1399 7 0 -40.6281 99.9504 3.92961 + 8 3.2099 1400 7 0 -40.4477 100.15 3.75741 + 8 42.8095 1668 7 0 50.6817 153.877 3.75 + 8 102.575 1669 7 0 50.8192 153.95 3.8081 + 8 52.6366 1670 7 0 50.9786 154.15 3.94088 + 8 51.377 1671 7 0 51.0607 154.35 4.04154 + 8 237.449 1159 7 1 51.9129 156.188 5.15006 + 8 67.4305 1160 7 1 52.05 156.453 5.3726 + 8 42.9099 1554 8 0 92.3867 131.051 33.7502 + 8 91.2802 1553 8 0 92.5102 130.95 33.8171 + 8 76.5372 1552 8 0 92.6507 130.75 33.7827 +Number of digits in this event: 68 Using G4ParticleGun... -Particle energy: 3.34822 LIN +Particle energy: 4.743 LIN Particle: e- -Event: 33 -Number of tracker hits in this event: 157 - 33 118.829 910 11 1 2.1603 -59.0103 125.55 - 33 118.26 605 11 0 2.15957 -59.0148 124.15 - 33 131.737 910 10 1 2.14997 -59.0993 95.55 - 33 132.553 604 10 0 2.14937 -59.1055 94.15 - 33 104.419 910 9 1 2.12358 -59.2423 65.55 - 33 0.525676 604 9 0 2.12373 -59.25 64.15 - 33 174.998 603 9 0 2.12373 -59.25 64.1488 - 33 120.177 910 8 1 2.13061 -59.4078 35.55 - 33 110.442 603 8 0 2.13055 -59.4118 34.15 - 33 132.045 910 7 1 2.12564 -59.4943 5.55 - 33 128.894 602 7 0 2.12687 -59.5014 4.15 - 33 370.521 910 6 1 2.14412 -59.6475 -24.45 - 33 714.165 601 6 0 2.1266 -59.656 -25.85 - 33 193.609 908 5 1 1.75815 -59.8288 -54.45 - 33 309.03 601 5 0 1.74001 -59.8401 -55.85 - 33 293.205 906 4 1 1.38288 -60.0803 -84.45 - 33 407.285 599 4 0 1.38192 -60.0968 -85.85 - 33 111.256 906 3 1 1.37488 -60.4579 -114.45 - 33 359.25 597 3 0 1.38115 -60.49 -115.85 - 33 108.188 907 2 1 1.4923 -61.1778 -144.45 - 33 120.492 594 2 0 1.49552 -61.208 -145.85 - 33 108.272 907 1 1 1.58238 -61.9185 -174.45 - 33 111.31 590 1 0 1.5974 -61.9644 -175.85 - 33 335.405 909 0 1 1.90206 -62.9278 -204.45 - 33 154.43 585 0 0 1.94784 -62.9849 -205.85 - 33 420.306 910 5 1 2.18284 -59.8767 -54.45 - 33 557.917 600 5 0 2.17893 -59.8935 -55.85 - 33 254.564 910 4 1 2.10112 -60.209 -84.45 - 33 282.775 909 3 1 1.95812 -60.8309 -114.45 - 33 223.823 595 3 0 1.96598 -60.8758 -115.85 - 33 118.486 910 2 1 2.16327 -61.7523 -144.45 - 33 54.3367 591 2 0 2.18858 -61.8376 -145.85 - 33 48.9023 590 2 0 2.19228 -61.85 -146.051 - 33 124.799 913 1 1 2.74292 -63.4298 -174.45 - 33 233.523 582 1 0 2.8438 -63.56 -175.85 - 33 22.8133 925 0 1 5.24195 -65.5077 -204.45 - 33 103.504 926 0 1 5.25 -65.5115 -204.535 - 33 131.805 572 0 0 5.3709 -65.5677 -205.85 - 33 77.313 873 3 0 -170.984 -5.38047 -116.25 - 33 218.138 644 1 0 7.67958 -51.1318 -176.25 - 33 559.303 909 5 1 2.05 -59.6542 -54.5827 - 33 82.2593 907 5 1 1.65 -59.4649 -54.7451 - 33 37.047 906 5 1 1.45 -59.3959 -54.803 - 33 64.8092 605 5 0 0.253668 -58.9286 -55.85 - 33 55.9886 606 5 0 0.158051 -58.85 -55.9191 - 33 22.5118 607 5 0 0.0710798 -58.65 -55.9138 - 33 60.8894 608 5 0 -0.0588154 -58.45 -55.9116 - 33 156.75 609 5 0 -0.070827 -58.2499 -55.8976 - 33 27.3785 610 5 0 -0.150023 -58.05 -56.0241 - 33 127.667 483 5 0 12.3299 -83.2816 -56.2497 - 33 234.303 482 5 0 12.2757 -83.45 -55.9776 - 33 115.127 909 2 1 1.99226 -60.8977 -144.45 - 33 301.439 595 2 0 1.99493 -60.9149 -145.85 - 33 424.978 909 1 1 2.02745 -61.2959 -174.45 - 33 575.359 593 1 0 2.02476 -61.3174 -175.85 - 33 162.778 910 0 1 2.05 -61.8333 -204.495 - 33 3.89643 588 0 0 2.68182 -62.4419 -205.85 - 33 110.534 587 0 0 2.69051 -62.4502 -205.869 - 33 46.5907 1330 3 1 86.0586 -104.663 -114.85 - 33 20.43 686 0 1 -42.65 -162.44 -204.58 - 33 74.9613 532 5 1 -73.45 10.5159 -54.5832 - 33 160.14 1008 1 1 21.7079 -55.4115 -174.85 - 33 127.076 589 0 0 2.10017 -62.1214 -205.85 - 33 150.298 906 0 1 1.28871 -61.6909 -204.45 - 33 285.202 591 0 0 1.4449 -61.7574 -205.85 - 33 66.3125 1767 3 0 -81.933 173.586 -116.25 - 33 224.792 1768 3 0 -82.0885 173.75 -116.197 - 33 147.713 905 0 1 1.24989 -61.7294 -204.749 - 33 130.845 904 0 1 1.05 -61.7242 -204.593 - 33 110.537 1007 0 1 21.483 -43.4301 -204.85 - 33 43.2968 1008 0 1 21.6503 -43.307 -204.579 - 33 1.5409 798 1 0 -3.06889 -20.4138 -176.25 - 33 121.92 1115 0 1 43.05 -154.714 -204.739 - 33 93.6276 594 1 0 2.13508 -61.1294 -175.85 - 33 261.4 595 1 0 2.08006 -61.05 -176.041 - 33 79.3281 596 1 0 2.14343 -60.85 -176.178 - 33 136.901 921 4 1 4.30861 -60.3672 -84.4502 - 33 393.282 601 4 0 4.72239 -59.7935 -85.8502 - 33 40.1128 602 4 0 4.8127 -59.6499 -86.1723 - 33 60.1432 985 3 1 17.1668 -45.3137 -114.45 - 33 70.1177 986 3 1 17.25 -45.2773 -114.63 - 33 176.787 675 3 0 17.8927 -45.0331 -115.85 - 33 107.76 1066 2 1 33.2962 -39.9962 -144.45 - 33 25.8725 1067 2 1 33.45 -39.8153 -144.751 - 33 75.4429 703 2 0 34.0228 -39.3036 -145.85 - 33 91.8285 704 2 0 34.0759 -39.25 -145.964 - 33 91.7321 1129 1 1 45.9767 -26.509 -174.45 - 33 76.5494 1128 1 1 45.85 -26.4802 -174.712 - 33 13.3498 1127 1 1 45.65 -26.3148 -174.834 - 33 38.5716 779 1 0 44.2962 -24.1558 -175.85 - 33 77.3683 780 1 0 44.2192 -24.0497 -175.885 - 33 82.9432 781 1 0 44.0696 -23.85 -175.945 - 33 252.264 782 1 0 44.0879 -23.65 -175.997 - 33 176.377 783 1 0 44.2483 -23.45 -176.104 - 33 95.913 1130 1 1 46.0503 -26.4957 -174.526 - 33 118.011 769 1 0 46.8157 -26.1108 -175.85 - 33 86.6202 770 1 0 46.9673 -26.05 -176.07 - 33 42.246 1232 0 1 66.5772 -17.0073 -204.45 - 33 86.2355 1233 0 1 66.65 -16.9698 -204.55 - 33 10.4807 1234 0 1 66.85 -16.9045 -204.81 - 33 127.052 817 0 0 67.5851 -16.6044 -205.85 - 33 36.3795 1029 4 0 -6.36092 25.8816 -86.25 - 33 107.808 1030 4 0 -6.39818 26.05 -86.2189 - 33 503.526 793 4 0 -16.2396 -21.4002 -86.2496 - 33 26.2084 792 4 0 -16.2379 -21.45 -86.211 - 33 80.7732 794 4 0 -15.465 -21.25 -86.0628 - 33 11.5907 1148 1 1 49.65 -24.8141 -174.463 - 33 153.485 944 4 1 8.96699 -53.9683 -84.4503 - 33 28.9299 636 4 0 9.00527 -52.7201 -85.85 - 33 85.1544 637 4 0 9.00909 -52.65 -85.9276 - 33 30.6213 638 4 0 9.01295 -52.45 -86.1658 - 33 90.5782 948 3 1 9.73671 -30.9518 -114.45 - 33 295.504 949 3 1 9.85 -30.8668 -114.639 - 33 42.775 748 3 0 10.634 -30.2915 -115.85 - 33 177.326 749 3 0 10.6905 -30.2499 -115.938 - 33 2.08217 1039 2 1 28.0401 -13.9628 -144.45 - 33 63.5984 1040 2 1 28.0502 -13.964 -144.453 - 33 59.6834 1041 2 1 28.2514 -13.9806 -144.523 - 33 60.3881 1042 2 1 28.45 -13.9927 -144.6 - 33 75.2874 1043 2 1 28.65 -14.0144 -144.676 - 33 62.8571 1044 2 1 28.8502 -14.0489 -144.759 - 33 7.35756 1045 2 1 29.05 -14.0915 -144.838 - 33 84.3388 827 2 0 31.6115 -14.5903 -145.85 - 33 175.029 826 2 0 31.9125 -14.6501 -145.972 - 33 42.4399 1334 1 1 86.8964 -22.8713 -174.45 - 33 70.8304 1335 1 1 87.05 -22.909 -174.494 - 33 61.1748 1336 1 1 87.25 -22.9618 -174.556 - 33 67.6844 1337 1 1 87.4501 -23.0058 -174.606 - 33 54.7513 1338 1 1 87.65 -23.0505 -174.648 - 33 156.623 1339 1 1 87.8502 -23.0931 -174.703 - 33 13.233 1340 1 1 88.05 -23.1147 -174.824 - 33 231.493 909 6 1 1.99568 -59.7113 -24.45 - 33 103.558 602 5 0 1.92389 -59.491 -55.85 - 33 104.375 909 4 1 1.8831 -59.7134 -84.45 - 33 120.683 911 3 1 2.34581 -60.1718 -114.45 - 33 106.854 599 3 0 2.35886 -60.2044 -115.85 - 33 105.955 912 2 1 2.63776 -60.7833 -144.45 - 33 249.915 910 1 1 2.19994 -63.7968 -174.45 - 33 153.393 581 1 0 2.34643 -63.686 -175.851 - 33 166.242 942 0 1 8.47889 -64.1124 -204.45 - 33 53.8141 943 0 1 8.65 -64.1124 -204.692 - 33 289.413 579 0 0 9.64596 -64.136 -205.85 - 33 231.517 913 2 1 2.65 -60.8043 -144.655 - 33 143.665 914 2 1 2.85007 -61.0346 -144.494 - 33 118.742 925 4 1 5.08889 -59.8365 -84.45 - 33 112.996 600 4 0 5.21128 -59.9619 -85.85 - 33 131.559 935 3 1 7.1547 -62.6713 -114.45 - 33 110.513 585 3 0 7.24906 -62.8601 -115.85 - 33 176.947 945 2 1 9.15402 -66.8811 -144.45 - 33 20.7575 565 2 0 9.26447 -67.0422 -145.85 - 33 116.609 564 2 0 9.26993 -67.05 -145.916 - 33 122.798 960 1 1 12.1555 -69.9318 -174.45 - 33 131.072 550 1 0 12.2953 -70.0175 -175.85 - 33 123.541 976 0 1 15.2842 -71.6146 -204.45 - 33 63.0604 541 0 0 15.438 -71.8211 -205.85 - 33 47.8296 540 0 0 15.4606 -71.85 -206.053 - 33 0.339669 958 1 1 11.7296 -70.7867 -174.45 -Number of digits in this event: 70 +Event: 9 +Number of tracker hits in this event: 56 + 9 135.648 664 10 1 -47.1434 82.814 95.55 + 9 123.687 1313 10 0 -47.1444 82.8127 94.15 + 9 149.635 664 9 1 -47.1714 82.7797 65.55 + 9 97.4388 1313 9 0 -47.173 82.7816 64.15 + 9 206.203 664 8 1 -47.2017 82.8314 35.55 + 9 137.873 1313 8 0 -47.2013 82.8341 34.15 + 9 135.479 664 7 1 -47.1836 82.8848 5.55 + 9 101.15 1314 7 0 -47.1833 82.8867 4.15 + 9 105.739 664 6 1 -47.1742 82.9282 -24.45 + 9 128.901 1314 6 0 -47.1719 82.931 -25.85 + 9 125.251 664 5 1 -47.1305 82.9953 -54.45 + 9 148.653 1314 5 0 -47.1207 82.996 -55.85 + 9 127.738 665 4 1 -46.9172 83.0102 -84.45 + 9 154.552 1314 4 0 -46.9133 83.0174 -85.85 + 9 174.36 666 3 1 -46.8325 83.1711 -114.45 + 9 112.437 1315 3 0 -46.8261 83.1837 -115.85 + 9 115.772 666 2 1 -46.667 83.453 -144.45 + 9 117.6 1317 2 0 -46.6604 83.4624 -145.85 + 9 113.102 667 1 1 -46.5127 83.664 -174.45 + 9 130.522 1318 1 0 -46.4751 83.6845 -175.85 + 9 133.347 671 0 1 -45.7038 84.1098 -204.45 + 9 121.601 1320 0 0 -45.6657 84.1367 -205.85 + 9 7.73711 1626 5 1 145.437 27.7139 -54.85 + 9 178.184 1627 5 1 145.55 27.6695 -54.7567 + 9 229.178 668 1 1 -46.3762 83.39 -174.45 + 9 162.146 1317 1 0 -46.3216 83.4571 -175.85 + 9 149.136 1316 1 0 -46.2915 83.45 -176.189 + 9 41.9324 687 0 1 -42.5375 80.2085 -204.45 + 9 63.8033 688 0 1 -42.4498 80.1744 -204.535 + 9 72.1548 689 0 1 -42.2498 80.0854 -204.71 + 9 4.53731 690 0 1 -42.05 80.0314 -204.838 + 9 49.5257 1298 0 0 -40.5624 79.6932 -205.85 + 9 146.399 1297 0 0 -40.4019 79.6499 -205.946 + 9 125.88 1197 7 1 59.5185 -41.1296 5.54998 + 9 189.709 1198 7 1 59.65 -41.0077 5.39038 + 9 10.733 697 0 1 -40.4584 81.8351 -204.45 + 9 135.501 698 0 1 -40.45 81.8306 -204.485 + 9 29.1922 1308 0 0 -40.1106 81.6618 -205.85 + 9 86.6671 1307 0 0 -40.089 81.65 -205.945 + 9 17.4749 1309 0 0 -40.8631 81.9124 -205.85 + 9 87.3702 663 8 1 -47.2502 82.8942 35.4307 + 9 63.9065 1318 8 0 -48.1455 83.6994 34.15 + 9 96.6869 1319 8 0 -48.3059 83.85 33.9891 + 9 37.1829 1320 8 0 -48.5572 84.05 33.8161 + 9 28.6735 1683 8 0 -122.339 156.87 33.7501 + 9 122.521 1684 8 0 -122.399 156.95 33.8151 + 9 199.694 1685 8 0 -122.514 157.15 33.9737 + 9 14.9922 1686 8 0 -122.565 157.35 34.1237 + 9 222.679 287 8 1 -122.685 159.497 35.15 + 9 111.422 286 8 1 -122.75 159.763 35.2027 + 9 31.401 285 8 1 -122.95 160.039 35.167 + 9 27.1616 1708 8 0 -124.698 161.864 34.15 + 9 80.1379 1709 8 0 -124.796 161.95 34.101 + 9 122.869 1710 8 0 -124.928 162.15 33.9998 + 9 97.1875 1711 8 0 -125.046 162.35 33.8966 + 9 59.9379 361 0 1 -107.75 164.994 -204.588 +Number of digits in this event: 30 Using G4ParticleGun... -Particle energy: 9.02237 LIN +Particle energy: 1.8481 LIN Particle: e- -Event: 34 -Number of tracker hits in this event: 118 - 34 130.456 649 10 1 -50.1763 -72.7281 95.55 - 34 190.323 536 10 0 -50.1751 -72.7271 94.15 - 34 122.351 649 9 1 -50.1524 -72.7055 65.55 - 34 110.837 536 9 0 -50.1512 -72.7041 64.15 - 34 127.3 649 8 1 -50.128 -72.6771 35.55 - 34 122.861 536 8 0 -50.1302 -72.6688 34.15 - 34 127.86 649 7 1 -50.156 -72.5141 5.55 - 34 134.8 537 7 0 -50.1661 -72.4991 4.15 - 34 129.449 648 6 1 -50.3601 -72.2108 -24.45 - 34 232.948 539 6 0 -50.3651 -72.1971 -25.85 - 34 135.115 647 5 1 -50.5226 -71.9267 -54.45 - 34 115.682 540 5 0 -50.5375 -71.914 -55.85 - 34 120.276 646 4 1 -50.8323 -71.6555 -84.45 - 34 132.852 542 4 0 -50.8473 -71.6418 -85.85 - 34 104.102 644 3 1 -51.1729 -71.3891 -114.45 - 34 222.821 543 3 0 -51.197 -71.3804 -115.85 - 34 110.795 641 2 1 -51.7447 -71.1524 -144.45 - 34 93.954 544 2 0 -51.7618 -71.1391 -145.85 - 34 142.084 639 1 1 -52.0943 -70.9161 -174.45 - 34 145.635 545 1 0 -52.1203 -70.8879 -175.85 - 34 113.752 636 0 1 -52.7058 -70.3399 -204.45 - 34 268.44 548 0 0 -52.7396 -70.3201 -205.85 - 34 385.112 645 3 1 -51.0499 -71.3848 -114.497 - 34 429.623 646 3 1 -50.85 -71.3794 -114.741 - 34 128.033 539 3 0 -49.9419 -72.2345 -115.85 - 34 115.441 538 3 0 -49.9184 -72.2501 -115.876 - 34 109.029 537 3 0 -49.7095 -72.45 -116.066 - 34 81.9851 536 3 0 -49.6867 -72.65 -116.133 - 34 222.927 535 3 0 -49.6123 -72.85 -116.095 - 34 304.189 534 3 0 -49.5821 -73.0505 -116.079 - 34 1004.47 647 3 1 -50.5911 -72.0556 -114.45 - 34 94.9355 639 2 1 -52.0842 -73.3525 -144.45 - 34 105.011 533 2 0 -52.1731 -73.3962 -145.85 - 34 127.187 632 1 1 -53.5344 -73.911 -174.45 - 34 29.1122 530 1 0 -53.6255 -74.041 -175.85 - 34 102.425 529 1 0 -53.632 -74.05 -175.953 - 34 37.5032 624 0 1 -55.2323 -76.655 -204.45 - 34 94.4767 623 0 1 -55.25 -76.6788 -204.559 - 34 101.012 515 0 0 -55.4522 -76.9741 -205.85 - 34 12.808 514 0 0 -55.501 -77.0501 -206.191 - 34 26.9257 542 3 0 -50.5122 -71.4857 -115.85 - 34 125.746 651 2 1 -49.7244 -60.5897 -144.45 - 34 49.0266 598 2 0 -49.7174 -60.2682 -145.85 - 34 81.2941 599 2 0 -49.7179 -60.25 -145.938 - 34 120.317 659 1 1 -48.1699 -53.4372 -174.45 - 34 56.062 658 1 1 -48.2501 -53.4279 -174.802 - 34 118.804 633 1 0 -48.4951 -53.3855 -175.85 - 34 88.0927 622 0 1 -55.4707 -57.5197 -204.45 - 34 23.0828 621 0 1 -55.65 -57.5647 -204.747 - 34 103.286 611 0 0 -56.2111 -57.7847 -205.85 - 34 25.5325 610 0 0 -56.3646 -57.85 -206.167 - 34 8.3898 704 0 1 -39.05 -60.9595 -204.479 - 34 237.199 649 6 1 -50.0941 -72.7294 -24.45 - 34 305.973 536 6 0 -50.096 -72.7316 -25.85 - 34 124.797 649 5 1 -50.1302 -72.7748 -54.45 - 34 155.318 536 5 0 -50.1313 -72.7785 -55.85 - 34 202.586 649 4 1 -50.1806 -72.8671 -84.45 - 34 117.392 535 4 0 -50.1845 -72.8694 -85.85 - 34 119.873 648 3 1 -50.2632 -72.9167 -114.45 - 34 126.453 648 2 1 -50.3294 -73.0035 -144.45 - 34 386.002 535 2 0 -50.331 -73.0033 -145.85 - 34 176.983 648 1 1 -50.3731 -73.0133 -174.45 - 34 108.411 535 1 0 -50.3799 -73.0127 -175.85 - 34 132.459 647 0 1 -50.5207 -72.996 -204.45 - 34 132.583 535 0 0 -50.5243 -72.9941 -205.85 - 34 41.5799 652 1 1 -49.6302 -100.07 -174.45 - 34 101.93 651 1 1 -49.65 -100.028 -174.475 - 34 5.00575 1053 2 0 -141.941 30.7492 -146.25 - 34 31.5289 268 9 1 -126.547 -159.766 65.15 - 34 138.662 1054 2 0 -142.036 30.8507 -146.147 - 34 81.3468 1055 2 0 -142.222 31.05 -146.086 - 34 17.7829 187 2 1 -142.709 31.7257 -144.85 - 34 64.4989 186 2 1 -142.75 31.7449 -144.775 - 34 79.9979 185 2 1 -142.95 31.8031 -144.585 - 34 89.9068 184 2 1 -143.15 31.8449 -144.492 - 34 62.113 183 2 1 -143.35 31.8686 -144.688 - 34 183.074 1060 2 0 -144.152 32.0917 -145.85 - 34 247.87 1059 2 0 -144.318 32.0499 -146.09 - 34 9.13577 1061 2 0 -144.939 32.25 -145.874 - 34 77.1371 178 2 1 -144.406 33.2445 -144.85 - 34 15.1353 1072 2 0 -144.725 34.6238 -145.85 - 34 122.278 1073 2 0 -144.73 34.65 -145.879 - 34 85.1297 1074 2 0 -144.568 34.8504 -146.127 - 34 92.3753 1134 2 0 -159.577 46.9193 -146.25 - 34 135.554 1133 2 0 -159.48 46.85 -146.149 - 34 108.539 650 5 1 -49.9706 -73.1062 -54.45 - 34 271.917 534 5 0 -49.9812 -73.1312 -55.85 - 34 141.717 532 4 0 -50.1523 -73.5293 -85.85 - 34 126.352 649 3 1 -50.132 -73.5241 -114.45 - 34 128.627 532 3 0 -50.1201 -73.5806 -115.85 - 34 163.163 650 2 1 -50.039 -74.7271 -144.45 - 34 105.798 526 2 0 -50.0789 -74.7562 -145.85 - 34 165.533 645 1 1 -50.8737 -75.3285 -174.45 - 34 115.467 523 1 0 -50.8833 -75.3677 -175.85 - 34 134.48 643 0 1 -51.3605 -76.0531 -204.45 - 34 125.073 519 0 0 -51.4062 -76.0972 -205.85 - 34 47.2194 642 0 1 -51.6008 -75.9723 -204.45 - 34 269.247 645 0 1 -50.9713 -76.1964 -204.45 - 34 46.353 520 0 0 -50.426 -75.8786 -205.85 - 34 69.0917 521 0 0 -50.3607 -75.85 -205.99 - 34 40.8414 631 0 1 -53.7674 -71.0374 -204.85 - 34 166.74 630 0 1 -53.85 -71.1374 -204.732 - 34 221.27 629 0 1 -54.05 -71.3947 -204.575 - 34 121.974 628 0 1 -54.25 -71.7404 -204.523 - 34 44.0523 627 0 1 -54.45 -72.0575 -204.517 - 34 41.3467 530 0 1 -73.85 -59.8187 -204.601 - 34 116.156 518 0 0 -51.0079 -76.2612 -205.85 - 34 115.889 644 2 1 -51.1729 -74.8449 -144.45 - 34 21.0553 523 2 0 -51.2565 -75.4055 -145.85 - 34 130.137 522 2 0 -51.2748 -75.45 -145.927 - 34 32.3355 521 2 0 -51.4349 -75.6501 -146.152 - 34 30.0712 1051 13 0 -20.791 30.2718 183.75 - 34 87.2001 1050 13 0 -20.7696 30.25 183.857 - 34 87.7612 800 13 1 -20.0211 29.7175 185.15 - 34 58.9684 801 13 1 -19.85 29.6259 185.382 - 34 440.269 650 0 1 -49.9559 -72.3998 -204.45 - 34 419.605 538 0 0 -49.9476 -72.3923 -205.85 - 34 20.7166 664 0 1 -47.126 -65.9561 -204.85 -Number of digits in this event: 57 -Using G4ParticleGun... -Particle energy: 6.50351 LIN -Particle: e- -Event: 35 -Number of tracker hits in this event: 71 - 35 152.948 841 11 1 -11.693 6.01547 125.55 - 35 125.425 929 11 0 -11.6942 6.01684 124.15 - 35 155.596 841 10 1 -11.7203 6.04984 95.55 - 35 97.0909 930 10 0 -11.7204 6.05214 94.15 - 35 139.797 841 9 1 -11.7207 6.09543 65.55 - 35 132.292 930 9 0 -11.7202 6.09727 64.15 - 35 129.481 841 8 1 -11.7065 6.13424 35.55 - 35 218.291 930 8 0 -11.7062 6.13674 34.15 - 35 108.791 841 7 1 -11.6989 6.19905 5.55 - 35 142.351 930 7 0 -11.6984 6.20444 4.15 - 35 154.548 841 6 1 -11.6906 6.31274 -24.45 - 35 137.304 931 6 0 -11.6901 6.31866 -25.85 - 35 399.952 841 5 1 -11.6796 6.44171 -54.45 - 35 498.909 931 5 0 -11.6806 6.44813 -55.85 - 35 419.839 841 4 1 -11.6951 6.59737 -84.45 - 35 223.224 932 4 0 -11.696 6.60519 -85.85 - 35 191.525 841 3 1 -11.7126 6.76291 -114.45 - 35 278.157 933 3 0 -11.7123 6.76829 -115.85 - 35 104.236 841 2 1 -11.7146 6.86908 -144.45 - 35 242.39 934 2 0 -11.714 6.87618 -145.85 - 35 412.23 841 1 1 -11.7045 7.02298 -174.45 - 35 341.98 934 1 0 -11.7072 7.03208 -175.85 - 35 124.426 841 0 1 -11.7627 7.21036 -204.45 - 35 126.736 935 0 0 -11.7659 7.21679 -205.85 - 35 138.052 511 4 1 -77.65 42.9427 -84.7621 - 35 87.1907 842 1 1 -11.65 6.94767 -174.777 - 35 57.3055 933 1 0 -11.4578 6.70289 -175.852 - 35 206.672 932 1 0 -11.4132 6.64995 -176.083 - 35 129.066 870 0 1 -5.99187 1.24434 -204.45 - 35 160.308 903 0 0 -5.52939 0.819594 -205.85 - 35 229.9 857 0 1 -8.62245 8.97275 -204.45 - 35 131.496 947 0 0 -8.04009 9.45971 -205.85 - 35 100.351 1144 8 0 89.8001 48.9683 33.75 - 35 187.499 1145 8 0 89.7873 49.05 33.8443 - 35 277.714 931 4 0 -11.8202 6.43967 -85.85 - 35 308.405 839 3 1 -12.2072 6.40974 -114.45 - 35 121.997 931 3 0 -12.2284 6.41103 -115.85 - 35 117.687 836 2 1 -12.6614 6.44753 -144.45 - 35 121.609 932 2 0 -12.6828 6.45083 -145.85 - 35 144.776 834 1 1 -13.1195 6.51379 -174.45 - 35 183.389 831 0 1 -13.7063 6.64932 -204.45 - 35 102.233 932 0 0 -13.7294 6.64183 -205.85 - 35 17.6456 612 3 1 -57.45 -16.2914 -114.631 - 35 36.4563 604 4 1 -59.2092 -36.2009 -84.85 - 35 32.3623 1190 0 0 -34.0253 58.1583 -206.25 - 35 68.4552 1191 0 0 -34.0628 58.2502 -206.227 - 35 59.2721 1192 0 0 -34.1401 58.45 -206.203 - 35 61.6385 1193 0 0 -34.2007 58.65 -206.194 - 35 62.5545 1194 0 0 -34.2547 58.8501 -206.187 - 35 44.1445 1195 0 0 -34.2684 59.05 -206.207 - 35 48.3257 1196 0 0 -34.2732 59.25 -206.223 - 35 7.92009 1197 0 0 -34.2819 59.45 -206.245 - 35 85.2885 843 1 1 -11.4497 6.29189 -174.595 - 35 47.4845 844 1 1 -11.25 6.27606 -174.734 - 35 16.1017 929 1 0 -9.70173 5.86351 -175.85 - 35 187.697 928 1 0 -9.65572 5.85 -175.885 - 35 34.2414 1046 0 1 29.3767 -5.18763 -204.45 - 35 56.2691 1047 0 1 29.4506 -5.19503 -204.518 - 35 59.2343 1048 0 1 29.6502 -5.20523 -204.701 - 35 34.5011 873 0 0 30.5385 -5.42308 -205.85 - 35 125.661 872 0 0 30.6292 -5.45 -205.96 - 35 351.97 840 3 1 -11.9392 6.70848 -114.45 - 35 116.303 839 2 1 -12.1659 6.82003 -144.45 - 35 144.484 933 2 0 -12.1773 6.82593 -145.85 - 35 105.378 838 1 1 -12.3835 6.93092 -174.45 - 35 267.063 837 0 1 -12.6083 6.83599 -204.45 - 35 143.801 933 0 0 -12.6305 6.83443 -205.85 - 35 71.8241 934 0 0 -12.4679 6.89383 -205.85 - 35 56.1806 923 3 0 -11.9676 4.84083 -115.85 - 35 70.5021 922 3 0 -11.9095 4.64974 -115.998 - 35 7.68986 921 3 0 -11.827 4.4498 -116.227 -Number of digits in this event: 42 -Using G4ParticleGun... -Particle energy: 3.01102 LIN -Particle: e- -Event: 36 -Number of tracker hits in this event: 26 - 36 191.681 915 9 1 3.17582 134.275 65.55 - 36 132.697 1570 9 0 3.17635 134.274 64.15 - 36 122.233 915 8 1 3.18354 134.256 35.55 - 36 198.093 1570 8 0 3.18389 134.257 34.15 - 36 107.719 915 7 1 3.19292 134.271 5.55 - 36 127.803 1570 7 0 3.19567 134.27 4.15 - 36 155.543 916 6 1 3.2567 134.247 -24.45 - 36 148.762 1570 6 0 3.25789 134.248 -25.85 - 36 128.706 916 5 1 3.28479 134.27 -54.45 - 36 177.321 1570 5 0 3.29015 134.274 -55.85 - 36 108.564 916 4 1 3.39095 134.344 -84.45 - 36 143.138 1570 4 0 3.3956 134.348 -85.85 - 36 188.978 917 3 1 3.49664 134.435 -114.45 - 36 121.85 1571 3 0 3.50262 134.443 -115.85 - 36 103.127 917 2 1 3.61666 134.616 -144.45 - 36 104.894 1572 2 0 3.62185 134.626 -145.85 - 36 240.472 918 1 1 3.73216 134.806 -174.45 - 36 122.262 1573 1 0 3.73664 134.814 -175.85 - 36 111.683 918 0 1 3.82795 135 -204.45 - 36 378.359 1574 0 0 3.83377 135.01 -205.85 - 36 33.1589 1289 0 0 -63.7486 77.9829 -206.25 - 36 85.3302 921 0 1 4.27069 134.602 -204.85 - 36 17.3405 1566 0 0 6.13697 133.417 -205.85 - 36 104.816 918 2 1 3.70513 134.464 -144.45 - 36 38.4452 919 2 1 3.85 134.626 -144.749 - 36 102.453 1574 2 0 4.33319 134.992 -145.85 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 1.83972 LIN -Particle: e- -Event: 37 -Number of tracker hits in this event: 74 - 37 128.446 969 11 1 13.8704 -38.1861 125.55 - 37 98.3574 709 11 0 13.8718 -38.1906 124.15 - 37 133.571 969 10 1 13.902 -38.2905 95.55 - 37 109.832 708 10 0 13.9053 -38.2954 94.15 - 37 182.625 969 9 1 13.9806 -38.4058 65.55 - 37 113.411 708 9 0 13.9825 -38.4054 64.15 - 37 149.354 969 8 1 14.0232 -38.3931 35.55 - 37 121.117 708 8 0 14.0249 -38.397 34.15 - 37 109.688 970 7 1 14.0655 -38.4956 5.55 - 37 105.726 707 7 0 14.069 -38.4976 4.15 - 37 130.142 970 6 1 14.1458 -38.5286 -24.45 - 37 156.569 707 6 0 14.1536 -38.5319 -25.85 - 37 142.13 971 5 1 14.3169 -38.5852 -54.45 - 37 112.858 707 5 0 14.3255 -38.5626 -55.85 - 37 125.539 972 4 1 14.6024 -38.0713 -84.45 - 37 116.326 710 4 0 14.606 -38.045 -85.85 - 37 463.935 973 3 1 14.7612 -37.4888 -114.45 - 37 113.693 713 3 0 14.7842 -37.439 -115.85 - 37 91.0127 976 2 1 15.3425 -36.2719 -144.45 - 37 123.878 719 2 0 15.3981 -36.2024 -145.85 - 37 101.709 982 1 1 16.5041 -34.9599 -174.45 - 37 49.3382 725 1 0 16.5729 -34.8641 -175.85 - 37 44.4784 726 1 0 16.5828 -34.85 -176.055 - 37 253.431 989 0 1 17.878 -32.8039 -204.45 - 37 113.694 736 0 0 17.9484 -32.7495 -205.85 - 37 95.0524 1244 6 0 83.0566 68.8687 -26.25 - 37 194.764 974 3 1 14.85 -37.6755 -114.527 - 37 111.016 975 3 1 15.05 -38.2149 -114.468 - 37 84.5376 976 3 1 15.25 -38.1932 -114.579 - 37 190.247 977 3 1 15.45 -38.2069 -114.807 - 37 47.2507 709 3 0 17.2534 -38.1799 -115.85 - 37 84.4948 708 3 0 17.3267 -38.25 -115.904 - 37 175.294 985 3 1 17.1475 -38.0636 -114.85 - 37 82.8344 977 1 1 15.538 -38.9681 -174.737 - 37 276.435 705 1 0 15.6554 -39.0285 -175.85 - 37 4.53841 998 0 1 19.8335 -39.3979 -204.45 - 37 53.1481 999 0 1 19.8503 -39.4021 -204.459 - 37 97.3895 1000 0 1 20.05 -39.4523 -204.557 - 37 59.0872 1001 0 1 20.25 -39.5366 -204.601 - 37 52.3863 1002 0 1 20.4502 -39.5766 -204.641 - 37 50.4436 1003 0 1 20.65 -39.5956 -204.654 - 37 49.1629 1004 0 1 20.8504 -39.6469 -204.605 - 37 71.8515 1005 0 1 21.05 -39.6656 -204.521 - 37 230.76 1006 0 1 21.25 -39.7071 -204.463 - 37 102.733 1007 0 1 21.45 -39.682 -204.57 - 37 97.9467 699 0 0 22.2194 -40.0969 -205.85 - 37 60.1314 698 0 0 22.377 -40.25 -206.094 - 37 179.842 602 0 0 18.2277 -59.4935 -206.25 - 37 31.1715 601 0 0 17.9379 -59.65 -205.895 - 37 16.6961 992 0 1 18.6245 -61.1584 -204.85 - 37 49.6711 591 0 0 18.4316 -61.7734 -205.85 - 37 251.319 590 0 0 18.4104 -61.8502 -205.925 - 37 170.085 982 0 1 16.6207 -34.0083 -204.45 - 37 34.8411 981 0 1 16.45 -33.9078 -204.786 - 37 146.217 732 0 0 15.8739 -33.5664 -205.85 - 37 171.614 738 0 0 23.2106 -32.3456 -206.25 - 37 55.9742 737 0 0 23.4474 -32.4503 -205.99 - 37 87.9579 1021 0 1 24.2748 -32.7508 -204.85 - 37 84.3943 1022 0 1 24.45 -32.7765 -204.593 - 37 17.2611 983 0 1 16.6531 -33.928 -204.45 - 37 276.76 977 0 1 15.5288 -38.8557 -204.45 - 37 309.74 706 0 0 15.66 -38.8242 -205.85 - 37 112.25 578 0 0 40.4587 -64.3994 -206.25 - 37 122.711 577 0 0 40.4831 -64.4501 -206.221 - 37 88.7768 576 0 0 40.6315 -64.65 -206.155 - 37 187.27 575 0 0 40.8511 -64.85 -206.136 - 37 187.141 574 0 0 41.1982 -65.05 -205.944 - 37 4.114 1115 0 1 43.2342 -65.4893 -204.85 - 37 77.2565 1116 0 1 43.25 -65.4918 -204.839 - 37 82.3325 1117 0 1 43.4501 -65.5126 -204.585 - 37 138.222 1118 0 1 43.65 -65.3646 -204.543 - 37 154.689 579 0 0 43.5198 -64.25 -206.072 - 37 38.7831 1205 1 1 61.05 -38.4525 -174.646 - 37 191.1 707 9 0 13.4847 -38.5753 64.15 -Number of digits in this event: 31 -Using G4ParticleGun... -Particle energy: 7.35696 LIN -Particle: e- -Event: 38 -Number of tracker hits in this event: 53 - 38 102.818 246 8 0 -65.0768 -130.756 34.15 - 38 341.124 574 7 1 -65.0785 -130.762 5.55 - 38 102.857 246 7 0 -65.0795 -130.763 4.15 - 38 374.334 574 6 1 -65.103 -130.783 -24.45 - 38 120.845 246 6 0 -65.1041 -130.785 -25.85 - 38 122.111 574 5 1 -65.1265 -130.825 -54.45 - 38 133.303 246 5 0 -65.1284 -130.827 -55.85 - 38 126.215 574 4 1 -65.1643 -130.881 -84.45 - 38 161.97 246 4 0 -65.1661 -130.884 -85.85 - 38 105.685 574 3 1 -65.2016 -130.944 -114.45 - 38 163.242 246 3 0 -65.2042 -130.949 -115.85 - 38 7.74703 245 3 0 -65.2049 -130.95 -116.217 - 38 107.981 573 2 1 -65.2665 -131.047 -144.45 - 38 305.724 245 2 0 -65.2748 -131.058 -145.85 - 38 124.282 573 1 1 -65.4344 -131.257 -174.45 - 38 160.361 244 1 0 -65.4405 -131.268 -175.85 - 38 121.528 572 0 1 -65.5335 -131.499 -204.45 - 38 114.129 243 0 0 -65.5345 -131.517 -205.85 - 38 136.434 253 4 0 -61.4543 -129.508 -86.25 - 38 128.411 571 0 0 -126.175 -65.669 -206.25 - 38 60.4914 572 0 0 -126.163 -65.65 -206.224 - 38 140.645 245 4 0 -65.1374 -130.95 -85.9426 - 38 92.3395 244 4 0 -65.178 -131.15 -86.0201 - 38 27.9707 575 6 1 -65.05 -130.818 -24.7657 - 38 205.146 245 6 0 -64.9174 -130.962 -25.8501 - 38 120.885 593 5 1 -61.4183 -136.482 -54.4501 - 38 97.82 218 5 0 -61.1726 -136.466 -55.8503 - 38 229.987 618 4 1 -56.4265 -136.309 -84.45 - 38 9.96368 219 4 0 -56.3047 -136.154 -85.8503 - 38 89.0888 220 4 0 -56.3014 -136.15 -85.8872 - 38 113.014 642 3 1 -51.4602 -134.209 -114.45 - 38 122.514 229 3 0 -51.7225 -134.159 -115.851 - 38 42.7689 617 2 1 -56.6048 -133.187 -144.45 - 38 105.367 616 2 1 -56.65 -133.151 -144.56 - 38 54.9955 236 2 0 -57.1598 -132.791 -145.85 - 38 76.0981 237 2 0 -57.217 -132.75 -146 - 38 175.434 565 1 1 -66.9844 -124.82 -174.45 - 38 141.588 276 1 0 -67.2491 -124.785 -175.85 - 38 150.944 536 0 1 -72.7569 -124.019 -204.45 - 38 131.455 281 0 0 -73.0171 -123.892 -205.85 - 38 60.8034 251 6 0 -65.1031 -129.854 -25.85 - 38 92.3058 252 6 0 -65.09 -129.75 -26.0146 - 38 47.1693 575 5 1 -64.9078 -108.695 -54.45 - 38 101.538 576 5 1 -64.8498 -108.632 -54.5853 - 38 100.968 361 5 0 -64.4006 -107.92 -55.85 - 38 41.6332 362 5 0 -64.3046 -107.75 -56.1132 - 38 210.206 622 4 1 -55.6116 -92.3987 -84.45 - 38 134.671 441 4 0 -54.8434 -91.8468 -85.85 - 38 184.003 356 4 0 -24.7171 -108.796 -86.25 - 38 34.8752 355 4 0 -24.5996 -108.95 -86.1537 - 38 123.018 623 4 1 -55.4498 -92.263 -84.75 - 38 412.769 812 3 1 -17.621 6.52303 -114.45 - 38 217.659 811 3 1 -17.6501 6.48531 -114.578 -Number of digits in this event: 32 -Using G4ParticleGun... -Particle energy: 2.32287 LIN -Particle: e- -Event: 39 -Number of tracker hits in this event: 54 - 39 132.058 1406 8 1 101.409 -101.444 35.55 - 39 104.617 393 8 0 101.408 -101.449 34.15 - 39 140.687 1406 7 1 101.358 -101.577 5.55 - 39 115.299 392 7 0 101.352 -101.581 4.15 - 39 138.315 1405 6 1 101.226 -101.647 -24.45 - 39 118.801 392 6 0 101.226 -101.652 -25.85 - 39 128.901 1405 5 1 101.224 -101.733 -54.45 - 39 133.592 392 5 0 101.225 -101.741 -55.85 - 39 104.359 1405 4 1 101.244 -101.881 -84.45 - 39 128.987 391 4 0 101.249 -101.901 -85.85 - 39 126.683 1405 3 1 101.345 -102.347 -114.45 - 39 133.485 388 3 0 101.342 -102.388 -115.85 - 39 215.489 1406 2 1 101.395 -103.204 -144.45 - 39 149.487 384 2 0 101.383 -103.254 -145.85 - 39 102.558 1404 1 1 101.044 -104.298 -174.45 - 39 115.534 379 1 0 101.028 -104.321 -175.85 - 39 137.978 1402 0 1 100.655 -104.8 -204.45 - 39 342.842 376 0 0 100.634 -104.8 -205.85 - 39 331.848 1406 4 1 101.413 -101.553 -84.45 - 39 100.378 392 4 0 101.389 -101.555 -85.85 - 39 121.981 1403 3 1 100.83 -101.761 -114.45 - 39 128.688 391 3 0 100.784 -101.774 -115.85 - 39 109.531 1399 2 1 99.9945 -102.173 -144.45 - 39 99.9971 389 2 0 99.93 -102.218 -145.85 - 39 320.502 1392 1 1 98.6201 -103.014 -174.45 - 39 116.813 385 1 0 98.5141 -103.088 -175.85 - 39 149.53 1381 0 1 96.4328 -104.655 -204.45 - 39 157.757 564 3 0 31.6249 -67.204 -116.25 - 39 133.015 393 4 0 101.413 -101.547 -85.85 - 39 141.813 1406 3 1 101.407 -101.432 -114.45 - 39 129.615 393 3 0 101.407 -101.426 -115.85 - 39 144.197 394 2 0 101.431 -101.277 -145.85 - 39 119.742 1407 1 1 101.557 -101.111 -174.45 - 39 110.046 395 1 0 101.562 -101.096 -175.85 - 39 140.468 1407 0 1 101.684 -100.79 -204.45 - 39 132.067 396 0 0 101.687 -100.778 -205.85 - 39 40.9296 1222 1 1 64.5142 -120.33 -174.45 - 39 63.9624 1223 1 1 64.65 -120.323 -174.552 - 39 53.9408 1224 1 1 64.85 -120.406 -174.678 - 39 58.9893 1225 1 1 65.0502 -120.402 -174.754 - 39 73.9632 1226 1 1 65.25 -120.409 -174.765 - 39 52.1905 1227 1 1 65.4503 -120.476 -174.773 - 39 68.4601 1228 1 1 65.65 -120.501 -174.789 - 39 62.4101 292 1 0 66.7845 -121.644 -175.85 - 39 150.468 291 1 0 66.8405 -121.75 -175.936 - 39 153.944 290 1 0 67.0059 -121.95 -176.115 - 39 144.809 289 1 0 67.142 -122.15 -176.132 - 39 264.918 1405 0 1 101.302 -101.191 -204.45 - 39 35.8743 399 0 0 101.234 -100.231 -205.85 - 39 86.7676 400 0 0 101.225 -100.15 -205.968 - 39 6.30366 401 0 0 101.223 -99.95 -206.24 - 39 26.5895 1406 0 1 101.35 -101.358 -204.774 - 39 1.22699 392 0 0 101.57 -101.748 -205.85 - 39 247.764 391 0 0 101.571 -101.75 -205.857 -Number of digits in this event: 32 -Using G4ParticleGun... -Particle energy: 5.16164 LIN -Particle: e- -Event: 40 -Number of tracker hits in this event: 39 - 40 148.09 1353 10 1 90.8522 46.951 95.55 - 40 140.459 1134 10 0 90.8493 46.9541 94.15 - 40 111.637 1352 9 1 90.7361 47.0068 65.55 - 40 141.276 1134 9 0 90.7305 47.0075 64.15 - 40 123.213 1352 8 1 90.6075 47.0205 35.55 - 40 110.027 1134 8 0 90.602 47.0228 34.15 - 40 271.751 1351 7 1 90.4865 47.0687 5.55 - 40 150.734 1135 7 0 90.4766 47.0737 4.15 - 40 155.272 1350 6 1 90.2662 47.1864 -24.45 - 40 131.603 1135 6 0 90.2518 47.1798 -25.85 - 40 93.7957 1349 5 1 89.8832 47.2458 -54.45 - 40 47.063 1367 4 1 93.7211 43.2023 -84.45 - 40 151.764 1368 4 1 93.75 43.1799 -84.6022 - 40 122.231 1114 4 0 93.9788 43.0037 -85.85 - 40 136.232 1395 3 1 99.1533 39.0332 -114.45 - 40 157.381 1093 3 0 99.3742 38.8405 -115.85 - 40 114.174 1419 2 1 104.02 34.9443 -144.45 - 40 140.15 1074 2 0 104.188 34.9617 -145.85 - 40 104.453 1437 1 1 107.698 35.4503 -174.45 - 40 141.602 1438 1 1 107.75 35.4989 -174.746 - 40 269.351 1078 1 0 107.983 35.7235 -175.85 - 40 27.9129 1471 0 1 114.538 42.034 -204.45 - 40 87.2397 1472 0 1 114.55 42.0438 -204.559 - 40 107.874 1110 0 0 114.702 42.1667 -205.85 - 40 40.3423 1079 1 0 108.065 35.85 -176.165 - 40 7.07576 1072 1 0 109.372 34.5817 -175.85 - 40 78.2044 1441 1 1 108.515 34.2098 -174.85 - 40 136.038 1345 1 1 89.0572 47.6754 -174.45 - 40 85.4618 1344 1 1 89.05 47.6729 -174.558 - 40 216.62 1138 1 0 88.9644 47.6542 -175.851 - 40 124.182 1336 0 1 87.2723 47.2753 -204.45 - 40 250.545 1136 0 0 87.2074 47.3082 -205.85 - 40 140.253 1343 0 1 88.8408 47.7149 -204.45 - 40 109.029 1138 0 0 88.8337 47.7174 -205.85 - 40 47.5549 1713 7 0 -45.5651 162.835 3.75 - 40 33.3176 1352 7 1 90.5502 46.8068 5.23403 - 40 494.951 1131 7 0 91.9631 46.3558 4.15 - 40 176.904 1132 7 0 92.762 46.45 3.86943 - 40 258.524 1130 7 0 93.5324 46.25 3.85183 -Number of digits in this event: 25 -Using G4ParticleGun... -Particle energy: 6.87728 LIN -Particle: e- -Event: 41 -Number of tracker hits in this event: 26 - 41 121.843 1190 7 1 58.2271 136.942 5.55 - 41 166.268 1583 7 0 58.2257 136.943 4.15 - 41 102.873 1190 6 1 58.1973 136.982 -24.45 - 41 185.19 1584 6 0 58.1957 136.983 -25.85 - 41 143.259 1190 5 1 58.163 137.007 -54.45 - 41 120.624 1584 5 0 58.1598 137.007 -55.85 - 41 118.486 1190 4 1 58.0929 137.021 -84.45 - 41 93.8983 1584 4 0 58.0891 137.022 -85.85 - 41 122.687 1189 3 1 58.0062 137.053 -114.45 - 41 160.46 1584 3 0 58.0028 137.055 -115.85 - 41 196.889 1189 2 1 57.9298 137.096 -144.45 - 41 115.584 1584 2 0 57.925 137.098 -145.85 - 41 102.278 1188 1 1 57.8302 137.14 -174.45 - 41 157.737 1584 1 0 57.8264 137.143 -175.85 - 41 95.3721 1188 0 1 57.7456 137.205 -204.45 - 41 125.241 1585 0 0 57.7398 137.206 -205.85 - 41 58.116 1572 0 0 83.1713 134.708 -205.85 - 41 46.5912 1280 0 1 76.1322 135.407 -204.45 - 41 216.814 1279 0 1 76.05 135.394 -204.493 - 41 30.0749 1191 7 1 58.25 136.954 5.2546 - 41 257.654 1586 7 0 58.8649 137.385 4.15 - 41 97.0596 1585 7 0 59.4534 137.35 3.82149 - 41 67.5103 1584 7 0 59.6573 137.15 3.98406 - 41 58.5198 1582 7 0 59.8115 136.75 4.03866 - 41 92.7014 1581 7 0 59.8723 136.55 3.97931 - 41 23.7105 1580 7 0 59.8852 136.35 3.82403 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 3.05515 LIN -Particle: e- -Event: 42 -Number of tracker hits in this event: 27 - 42 125.662 504 10 1 -79.2211 -65.9447 95.55 - 42 156.24 570 10 0 -79.2226 -65.9443 94.15 - 42 135.458 503 9 1 -79.2566 -65.9257 65.55 - 42 111.178 570 9 0 -79.2578 -65.9228 64.15 - 42 198.016 503 8 1 -79.2829 -65.8626 35.55 - 42 119.565 570 8 0 -79.2863 -65.8584 34.15 - 42 118.762 503 7 1 -79.3639 -65.7796 5.55 - 42 145.908 571 7 0 -79.3686 -65.7772 4.15 - 42 102.858 502 6 1 -79.4691 -65.7201 -24.45 - 42 135.589 571 6 0 -79.4748 -65.7142 -25.85 - 42 167.956 502 5 1 -79.6015 -65.5841 -54.45 - 42 124.315 572 5 0 -79.6098 -65.5706 -55.85 - 42 103.064 501 4 1 -79.7915 -65.3093 -84.45 - 42 163.212 573 4 0 -79.8566 -65.2704 -85.85 - 42 129.48 491 3 1 -81.7934 -64.3564 -114.45 - 42 119.694 578 3 0 -81.7434 -64.2939 -115.85 - 42 23.1522 496 2 1 -80.6686 -62.6443 -144.45 - 42 123.84 497 2 1 -80.65 -62.643 -144.56 - 42 380.707 587 2 0 -80.4435 -62.6039 -145.85 - 42 169.507 521 1 1 -75.7853 -60.5672 -174.45 - 42 167.569 596 1 0 -75.5406 -60.7645 -175.851 - 42 9.84239 547 0 1 -70.4651 -64.244 -204.45 - 42 126.795 548 0 1 -70.45 -64.2375 -204.477 - 42 6.14179 549 0 1 -70.25 -64.1559 -204.829 - 42 115.209 580 0 0 -69.6667 -63.914 -205.85 - 42 35.7515 581 0 0 -69.5023 -63.85 -206.141 - 42 243.501 586 2 0 -80.0451 -62.65 -146.031 +Event: 10 +Number of tracker hits in this event: 41 + 10 151.651 1203 10 1 60.8344 -67.9842 95.55 + 10 125.035 560 10 0 60.8388 -67.9861 94.15 + 10 119.03 1204 9 1 60.8973 -67.9901 65.55 + 10 151.662 560 9 0 60.8996 -67.9938 64.15 + 10 120.408 1204 8 1 60.9464 -68.0857 35.55 + 10 262.872 559 8 0 60.9498 -68.0908 34.15 + 10 117.218 1204 7 1 61.0321 -68.1618 5.55 + 10 189.371 559 7 0 61.0366 -68.1614 4.15 + 10 232.703 1205 6 1 61.1306 -68.1527 -24.45 + 10 142.352 559 6 0 61.1333 -68.1519 -25.85 + 10 98.2878 1205 5 1 61.1614 -68.1116 -54.45 + 10 38.7134 559 5 0 61.1772 -68.2403 -55.85 + 10 209.974 558 5 0 61.1807 -68.25 -55.9689 + 10 57.722 1208 4 1 61.7863 -70.0298 -84.45 + 10 90.2799 1207 4 1 61.65 -69.9909 -84.6257 + 10 170.819 553 4 0 60.558 -69.4475 -85.8504 + 10 13.2627 554 4 0 60.1855 -69.25 -86.2177 + 10 294.176 1064 3 1 32.9827 -53.0005 -114.45 + 10 14.4596 640 3 0 32.4867 -51.8721 -115.85 + 10 75.8552 641 3 0 32.4759 -51.8496 -115.878 + 10 38.6447 642 3 0 32.3844 -51.65 -116.127 + 10 109.277 1028 2 1 25.8251 -26.9136 -144.45 + 10 132.887 1027 2 1 25.65 -26.7019 -144.62 + 10 17.2098 1026 2 1 25.45 -26.4763 -144.813 + 10 64.1962 774 2 0 24.3181 -25.2309 -145.85 + 10 91.988 775 2 0 24.1471 -25.05 -146.004 + 10 31.901 776 2 0 23.9869 -24.85 -146.179 + 10 69.8394 902 1 1 0.572254 0.747189 -174.45 + 10 43.361 901 1 1 0.45 0.771241 -174.689 + 10 175.6 903 1 0 -0.110363 0.814481 -175.85 + 10 35.3674 838 0 1 -12.4086 0.858265 -204.45 + 10 61.4574 837 0 1 -12.4501 0.867006 -204.499 + 10 93.6453 836 0 1 -12.65 0.921743 -204.69 + 10 3.1754 835 0 1 -12.85 0.967296 -204.842 + 10 170.908 906 0 0 -14.2278 1.29443 -205.85 + 10 139.633 1063 3 1 32.85 -52.604 -114.635 + 10 58.8364 1062 3 1 32.65 -52.3918 -114.767 + 10 77.2308 631 3 0 32.1539 -53.688 -115.85 + 10 177.145 632 3 0 32.0547 -53.65 -115.891 + 10 274.137 1065 3 1 33.0501 -52.6883 -114.617 + 10 13.9498 558 8 0 60.867 -68.2503 33.7997 Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 1.55955 LIN +Particle energy: 6.16662 LIN Particle: e- -Event: 43 -Number of tracker hits in this event: 153 - 43 147.418 1557 9 1 131.559 -24.298 65.55 - 43 114.157 778 9 0 131.563 -24.2924 64.15 - 43 545.947 1557 8 1 131.612 -24.181 35.55 - 43 450.531 779 8 0 131.618 -24.1749 34.15 - 43 116.583 1558 7 1 131.757 -24.047 5.55 - 43 287.207 780 7 0 131.764 -24.0435 4.15 - 43 103.873 1558 6 1 131.902 -23.9466 -24.45 - 43 128.987 780 6 0 131.906 -23.9489 -25.85 - 43 169.215 1559 5 1 131.971 -23.96 -54.45 - 43 220.478 780 5 0 131.962 -23.9455 -55.85 - 43 328.983 1558 4 1 131.794 -23.6465 -84.45 - 43 452.778 781 4 0 131.781 -23.6508 -85.85 - 43 120.085 1556 3 1 131.543 -23.71 -114.45 - 43 234.953 781 3 0 131.53 -23.7262 -115.85 - 43 116.172 1555 2 1 131.287 -24.0743 -144.45 - 43 170.252 779 2 0 131.273 -24.152 -145.85 - 43 352.628 1554 1 1 131.13 -25.7154 -174.45 - 43 127.601 771 1 0 131.16 -25.8167 -175.85 - 43 114.948 1561 0 1 132.426 -27.8209 -204.45 - 43 124.797 760 0 0 132.456 -27.8693 -205.85 - 43 70.9522 776 1 0 131.431 -24.8404 -175.85 - 43 132.172 775 1 0 131.478 -24.85 -176.006 - 43 138.287 1603 0 1 140.766 -25.99 -204.45 - 43 19.267 769 0 0 141.264 -26.2378 -205.85 - 43 117.401 768 0 0 141.288 -26.25 -205.921 - 43 18.4442 629 0 0 148.395 -54.1837 -206.25 - 43 74.8026 628 0 0 148.412 -54.2501 -206.197 - 43 53.2935 627 0 0 148.454 -54.4505 -205.968 - 43 181.692 1640 0 1 148.217 -55.7187 -204.85 - 43 267.165 1639 0 1 148.15 -55.962 -204.698 - 43 76.0122 1641 0 1 148.35 -57.0317 -204.689 - 43 171.565 1642 0 1 148.55 -57.1689 -204.703 - 43 1.0153 1643 0 1 148.75 -57.5468 -204.844 - 43 55.9685 611 0 0 149.132 -57.7697 -205.85 - 43 102.998 610 0 0 149.222 -57.85 -205.988 - 43 39.4889 609 0 0 149.319 -58.05 -206.145 - 43 92.9373 549 0 0 129.842 -70.0813 -206.25 - 43 108.712 550 0 0 129.665 -70.05 -206.115 - 43 294.675 551 0 0 129.533 -69.85 -206.13 - 43 19.0326 552 0 0 129.61 -69.65 -205.984 - 43 33.5555 1553 1 1 130.95 -24.7141 -174.757 - 43 109.098 777 1 0 130.92 -24.5646 -175.85 - 43 59.483 480 4 0 -24.602 -84.05 -85.9795 - 43 425.435 782 4 0 131.775 -23.6498 -85.9975 - 43 203.983 778 8 0 131.919 -24.3005 34.15 - 43 466.409 1557 4 1 131.585 -23.7146 -84.45 - 43 113.488 1560 3 1 132.262 -23.7328 -114.45 - 43 143.833 1557 2 1 131.641 -22.3293 -144.45 - 43 230.807 789 2 0 131.678 -22.1961 -145.85 - 43 137.578 1560 1 1 132.199 -19.4315 -174.45 - 43 125.202 803 1 0 132.221 -19.4148 -175.85 - 43 121.799 1563 0 1 132.867 -19.2612 -204.45 - 43 191.57 804 0 0 132.799 -19.1524 -205.85 - 43 136.586 1558 3 1 131.78 -23.9548 -114.45 - 43 123.518 780 3 0 131.74 -23.9109 -115.85 - 43 163.913 1553 2 1 130.78 -22.9955 -144.45 - 43 157.493 1552 2 1 130.75 -22.9979 -144.753 - 43 116.787 785 2 0 130.623 -22.9885 -145.85 - 43 140.681 1538 1 1 127.929 -22.6829 -174.45 - 43 261.331 787 1 0 127.92 -22.6471 -175.85 - 43 108.127 1540 0 1 128.285 -21.7291 -204.45 - 43 159.16 791 0 0 128.075 -21.8368 -205.85 - 43 95.1397 790 0 0 128.054 -21.85 -206.004 - 43 292.619 1537 0 1 127.702 -22.0217 -204.45 - 43 29.0796 1538 0 1 127.75 -21.9731 -204.738 - 43 157.202 1536 0 1 127.55 -21.8003 -204.844 - 43 1.86726 793 0 0 127.243 -21.2532 -205.85 - 43 188.182 794 0 0 127.241 -21.25 -205.856 - 43 0.682499 795 0 0 127.146 -21.05 -206.247 - 43 74.6792 1551 2 1 130.55 -22.957 -144.509 - 43 129.355 1556 7 1 131.469 -24.1444 5.55 - 43 249.998 779 7 0 131.451 -24.1578 4.15 - 43 129.251 1553 6 1 130.857 -24.3656 -24.45 - 43 121.163 778 6 0 130.824 -24.3711 -25.85 - 43 247.392 1549 5 1 130.138 -24.3562 -54.45 - 43 197.673 778 5 0 130.121 -24.3434 -55.85 - 43 143.484 1548 4 1 129.872 -23.6829 -84.45 - 43 267.681 1553 3 1 130.844 -22.2261 -114.45 - 43 111.896 789 3 0 130.899 -22.1378 -115.85 - 43 155.692 1559 2 1 132.044 -20.2875 -144.45 - 43 139.68 799 2 0 132.127 -20.2152 -145.85 - 43 21.293 1568 1 1 133.94 -18.7654 -174.45 - 43 90.109 1569 1 1 133.95 -18.7617 -174.55 - 43 134.604 806 1 0 134.084 -18.7134 -175.85 - 43 122.831 1584 0 1 137.006 -17.6007 -204.45 - 43 112.673 812 0 0 137.161 -17.5223 -205.85 - 43 321.565 783 3 0 129.725 -23.272 -115.85 - 43 20.7881 534 5 0 117.282 -73.2015 -56.2497 - 43 299.977 533 5 0 117.269 -73.25 -56.202 - 43 273.495 1557 7 1 131.682 -24.0477 5.55 - 43 379.93 1554 6 1 130.96 -25.3908 -24.45 - 43 16.2391 773 6 0 130.991 -25.4477 -25.8503 - 43 212.868 772 6 0 130.992 -25.45 -25.9133 - 43 128.747 1557 5 1 131.669 -26.7309 -54.45 - 43 329.686 766 5 0 131.71 -26.7229 -55.8501 - 43 157.33 1560 4 1 132.294 -27.0124 -84.4501 - 43 135.781 765 4 0 132.119 -26.961 -85.85 - 43 132.834 1538 3 1 127.921 -24.8158 -114.45 - 43 168.223 775 3 0 127.593 -24.9903 -115.85 - 43 140.747 1496 2 1 119.457 -27.909 -144.45 - 43 1.10893 1495 2 1 119.35 -27.9796 -144.846 - 43 103.062 759 2 0 119.091 -28.1556 -145.851 - 43 172.294 1458 1 1 111.862 -33.7169 -174.45 - 43 36.5212 729 1 0 111.699 -34.2056 -175.851 - 43 77.8104 728 1 0 111.686 -34.25 -175.976 - 43 114.389 1443 0 1 108.789 -43.9422 -204.45 - 43 104.595 679 0 0 108.704 -44.194 -205.85 - 43 37.345 678 0 0 108.685 -44.25 -206.113 - 43 77.9575 1147 8 1 49.65 -70.4418 35.1942 - 43 54.8958 1566 6 1 133.524 -25.9086 -24.45 - 43 94.8442 1567 6 1 133.55 -25.8977 -24.5344 - 43 25.6549 771 6 0 133.88 -25.6645 -25.8504 - 43 144.173 1613 5 1 142.816 -19.1428 -54.4501 - 43 70.4496 803 5 0 143.18 -19.4169 -55.85 - 43 47.0743 802 5 0 143.24 -19.4501 -56.0726 - 43 138.111 1658 4 1 151.896 -27.0953 -84.4506 - 43 116.598 764 4 0 151.54 -27.2138 -85.85 - 43 97.1892 763 4 0 151.47 -27.25 -86.1309 - 43 213.631 1623 3 1 144.879 -29.8369 -114.45 - 43 84.7939 752 3 0 144.571 -29.6137 -115.85 - 43 142.787 1627 2 1 145.721 -19.4207 -144.45 - 43 206.077 1626 2 1 145.55 -19.0123 -144.643 - 43 53.9826 813 2 0 144.675 -17.3896 -145.85 - 43 62.4682 814 2 0 144.597 -17.2497 -145.958 - 43 178.223 815 2 0 144.472 -17.0499 -146.082 - 43 166.227 816 2 0 144.293 -16.85 -146.136 - 43 90.9904 817 2 0 144.04 -16.65 -146.127 - 43 102.917 818 2 0 143.817 -16.45 -146.006 - 43 55.989 819 2 0 143.574 -16.25 -145.902 - 43 138.739 1614 2 1 143.027 -13.8677 -144.85 - 43 22.646 740 0 0 120.623 -32.0141 -205.85 - 43 124.415 1554 7 1 131.075 -23.457 5.55 - 43 190.277 783 7 0 131.015 -23.4472 4.15 - 43 145.783 1548 6 1 129.786 -22.6839 -24.45 - 43 127.667 787 6 0 129.783 -22.5657 -25.85 - 43 109.565 799 5 0 130.03 -20.084 -55.85 - 43 223.527 1547 4 1 129.645 -19.2485 -84.4506 - 43 125.419 803 4 0 129.65 -19.2706 -85.8503 - 43 144.642 1550 3 1 130.293 -18.9162 -114.45 - 43 122.21 806 3 0 130.396 -18.7995 -115.85 - 43 193.482 1561 2 1 132.38 -15.5316 -144.45 - 43 119.527 822 2 0 132.371 -15.477 -145.85 - 43 113.223 1558 1 1 131.901 -14.4986 -174.45 - 43 134.542 828 1 0 131.704 -14.4326 -175.85 - 43 53.817 834 0 0 127.286 -13.0811 -205.85 - 43 72.8342 835 0 0 127.263 -13.05 -206.014 - 43 70.1836 794 6 0 131.442 -21.1881 -25.8502 - 43 38.8424 795 6 0 131.513 -21.05 -25.9088 - 43 117.737 1561 6 1 132.474 -18.8874 -24.85 - 43 460.652 1562 6 1 132.55 -18.6439 -24.7113 - 43 117.341 1563 6 1 132.75 -17.5857 -24.4577 - 43 100.408 817 6 0 132.104 -16.5156 -25.8504 - 43 67.8273 818 6 0 132.059 -16.45 -26.0605 -Number of digits in this event: 87 +Event: 11 +Number of tracker hits in this event: 109 + 11 155.286 962 11 1 12.6212 -17.5577 125.55 + 11 119.885 812 11 0 12.6224 -17.5577 124.15 + 11 115.611 962 10 1 12.6433 -17.558 95.55 + 11 109.164 812 10 0 12.6432 -17.5593 94.15 + 11 388.922 962 9 1 12.6402 -17.5737 65.55 + 11 406.118 812 9 0 12.6405 -17.5716 64.15 + 11 108.494 962 8 1 12.6406 -17.5389 35.55 + 11 278.239 812 8 0 12.6383 -17.5379 34.15 + 11 204.642 962 7 1 12.592 -17.5397 5.55 + 11 98.5975 812 7 0 12.5883 -17.5427 4.15 + 11 294.497 962 6 1 12.5034 -17.6025 -24.45 + 11 110.762 812 6 0 12.5001 -17.607 -25.85 + 11 338.463 961 5 1 12.4099 -17.6903 -54.45 + 11 128.326 811 5 0 12.3974 -17.6836 -55.85 + 11 111.117 960 4 1 12.1311 -17.5377 -84.45 + 11 115.421 812 4 0 12.12 -17.5265 -85.85 + 11 112.969 959 3 1 11.9035 -17.308 -114.45 + 11 132.635 813 3 0 11.8872 -17.2954 -115.85 + 11 100.929 957 2 1 11.5546 -17.0471 -144.45 + 11 217.649 815 2 0 11.5328 -17.0397 -145.85 + 11 519.68 955 1 1 11.0713 -16.9052 -174.45 + 11 364.151 815 1 0 11.0479 -16.8995 -175.85 + 11 208.03 952 0 1 10.5582 -16.7523 -204.45 + 11 310.614 816 0 0 10.5336 -16.7421 -205.85 + 11 150.933 814 0 0 10.7984 -17.1263 -205.85 + 11 141.089 951 0 1 10.3198 -16.8565 -204.45 + 11 85.3055 815 0 0 10.373 -17.0195 -205.85 + 11 236.65 179 0 0 85.6307 -144.173 -206.25 + 11 101.702 1329 0 1 86.0037 -144.232 -204.85 + 11 77.16 1330 0 1 86.05 -144.261 -204.838 + 11 100.357 957 0 1 11.5257 -17.7277 -204.45 + 11 90.8877 811 0 0 11.571 -17.7732 -205.85 + 11 207.098 94 1 1 -161.15 71.8933 -174.567 + 11 177.316 1261 1 0 -160.461 72.401 -175.85 + 11 365.408 963 8 1 12.6504 -17.5394 35.5318 + 11 110.401 992 7 1 18.5513 -18.2348 5.54952 + 11 194.775 809 7 0 18.4108 -18.1177 4.14938 + 11 119.865 971 6 1 14.4042 -16.0291 -24.45 + 11 160.44 822 6 0 13.9794 -15.5787 -25.85 + 11 71.1391 939 6 0 -6.76193 7.9186 -26.25 + 11 44.3395 940 6 0 -6.81589 8.05 -26.0223 + 11 102.109 864 6 1 -7.09682 8.32203 -24.85 + 11 73.6623 863 6 1 -7.2505 8.3963 -24.4977 + 11 49.1683 862 6 1 -7.45028 8.46551 -24.5679 + 11 92.5582 861 6 1 -7.65 8.51479 -24.6421 + 11 28.5088 860 6 1 -7.85 8.54562 -24.7793 + 11 271.778 946 6 0 -9.31532 9.33288 -25.85 + 11 206.42 865 6 0 -30.3673 -6.96428 -26.25 + 11 203.71 866 6 0 -30.443 -6.85 -26.0749 + 11 100.216 828 6 0 15.4802 -14.2722 -26.25 + 11 250.809 829 6 0 15.4912 -14.2499 -26.1663 + 11 13.0296 813 8 0 13.2524 -17.45 33.7748 + 11 4.16225 1035 8 0 50.3042 27.2458 33.75 + 11 71.8908 1036 8 0 50.3112 27.25 33.7577 + 11 240.077 963 1 1 12.7295 -17.2784 -174.45 + 11 242.454 813 1 0 12.7296 -17.2784 -175.85 + 11 120.388 963 0 1 12.7216 -17.2827 -204.45 + 11 147.878 813 0 0 12.7221 -17.2818 -205.85 + 11 34.1688 547 7 0 11.1585 -70.5378 3.75 + 11 134.012 965 0 1 13.191 -16.878 -204.45 + 11 130.031 962 1 1 12.5647 -17.341 -174.45 + 11 72.5883 812 1 0 12.7977 -17.5806 -175.85 + 11 37.2147 811 1 0 12.8732 -17.65 -176.162 + 11 210.439 1013 0 1 22.7306 -21.8602 -204.45 + 11 379.448 787 0 0 22.6149 -22.4768 -205.85 + 11 19.6082 786 0 0 22.5957 -22.65 -206.169 + 11 105.744 1522 2 1 124.55 -162.646 -144.626 + 11 143.522 805 8 0 12.8104 -18.9885 34.15 + 11 99.863 798 7 0 12.5243 -20.3278 4.15 + 11 326.759 801 6 0 12.4112 -19.7525 -25.85 + 11 37.9854 954 5 1 10.8589 -17.4774 -54.4501 + 11 87.382 953 5 1 10.85 -17.4758 -54.5783 + 11 109.589 812 5 0 10.7576 -17.4617 -55.8501 + 11 135.373 944 4 1 8.92064 -17.3287 -84.45 + 11 112.324 813 4 0 8.79458 -17.4046 -85.85 + 11 126.765 932 3 1 6.6246 -19.1711 -114.45 + 11 129.53 804 3 0 6.56428 -19.2174 -115.85 + 11 233.907 927 2 1 5.60267 -20.1967 -144.45 + 11 126.237 798 2 0 5.49377 -20.3361 -145.85 + 11 107.093 916 1 1 3.32064 -23.0484 -174.45 + 11 134.948 784 1 0 3.1571 -23.1626 -175.851 + 11 109.501 899 0 1 -0.224303 -25.4109 -204.45 + 11 57.8413 898 0 1 -0.25 -25.433 -204.605 + 11 55.2201 772 0 0 -0.463663 -25.6159 -205.85 + 11 49.6602 771 0 0 -0.502291 -25.65 -206.072 + 11 136.673 965 8 1 13.0567 -18.1272 35.55 + 11 110.911 809 8 0 13.0687 -18.1708 34.15 + 11 112.081 966 7 1 13.3406 -19.0845 5.55 + 11 153.452 804 7 0 13.3268 -19.1168 4.15 + 11 177.531 964 6 1 13.0277 -19.6322 -24.45 + 11 140.979 797 5 0 12.3915 -20.4918 -55.85 + 11 116.484 955 4 1 11.1765 -20.33 -84.45 + 11 176.833 798 4 0 11.0561 -20.3542 -85.85 + 11 96.0433 943 3 1 8.68972 -20.9079 -114.45 + 11 15.3928 942 3 1 8.65 -20.918 -114.782 + 11 182.074 795 3 0 8.52091 -20.9452 -115.85 + 11 139.468 925 2 1 5.10434 -21.562 -144.45 + 11 37.0006 926 2 1 5.25 -21.7116 -144.741 + 11 82.6037 787 2 0 5.94609 -22.4901 -145.85 + 11 62.4038 786 2 0 6.09676 -22.65 -146.093 + 11 171.216 1000 1 1 20.1887 -38.3518 -174.45 + 11 29.3088 705 1 0 20.1803 -39.0316 -175.85 + 11 228.14 704 1 0 20.1775 -39.05 -175.878 + 11 64.5837 703 1 0 20.1325 -39.2501 -176.138 + 11 131.176 934 0 1 6.90696 -59.1894 -204.45 + 11 47.9723 935 0 1 7.05 -59.1019 -204.679 + 11 42.3242 606 0 0 7.93614 -58.6879 -205.85 + 11 69.4082 607 0 0 8.01874 -58.65 -205.991 + 11 56.6851 1001 1 1 20.25 -38.4547 -174.71 +Number of digits in this event: 56 Using G4ParticleGun... -Particle energy: 2.58189 LIN +Particle energy: 4.78118 LIN Particle: e- -Event: 44 -Number of tracker hits in this event: 95 - 44 161.76 673 11 1 -45.3872 16.7155 125.55 - 44 112.242 983 11 0 -45.3866 16.7148 124.15 - 44 226.594 673 10 1 -45.3851 16.6995 95.55 - 44 131.246 983 10 0 -45.3874 16.6942 94.15 - 44 101.956 673 9 1 -45.4326 16.5832 65.55 - 44 122.415 982 9 0 -45.4375 16.5749 64.15 - 44 97.7171 672 8 1 -45.5381 16.3965 35.55 - 44 294.95 981 8 0 -45.5448 16.384 34.15 - 44 183.131 671 7 1 -45.6918 16.119 5.55 - 44 111.487 980 7 0 -45.6986 16.1111 4.15 - 44 122.507 671 6 1 -45.8446 15.9423 -24.45 - 44 108.092 979 6 0 -45.8571 15.9369 -25.85 - 44 177.775 669 5 1 -46.1051 15.8208 -54.45 - 44 123.518 978 5 0 -46.119 15.8144 -55.85 - 44 120.191 668 4 1 -46.4004 15.6892 -84.45 - 44 110.615 978 4 0 -46.4106 15.6804 -85.85 - 44 127.538 667 3 1 -46.6026 15.5025 -114.45 - 44 144.063 977 3 0 -46.6106 15.507 -115.85 - 44 117.4 666 2 1 -46.7684 15.5911 -144.45 - 44 214.455 977 2 0 -46.7723 15.5928 -145.85 - 44 111.294 665 1 1 -46.8706 15.6332 -174.45 - 44 120.741 977 1 0 -46.8874 15.6289 -175.85 - 44 273.7 664 0 1 -47.2396 15.5421 -204.45 - 44 118.021 977 0 0 -47.2546 15.5387 -205.85 - 44 92.0438 1076 7 0 -148.785 35.3799 3.75 - 44 83.4551 1075 7 0 -148.895 35.2499 3.95778 - 44 15.4066 1074 7 0 -148.988 35.0498 4.11797 - 44 33.4429 150 7 1 -150.098 33.8635 5.15028 - 44 277.703 149 7 1 -150.15 33.8001 5.20475 - 44 67.1212 1108 8 0 -151.634 41.6532 33.75 - 44 81.0047 1158 3 1 51.65 3.27687 -114.825 - 44 192.191 1159 3 1 51.85 3.33012 -114.721 - 44 109.824 1668 7 0 -56.6304 153.822 3.75 - 44 72.0626 786 0 0 -93.0411 -22.7214 -205.94 - 44 103.191 436 0 1 -92.8563 -22.6216 -204.849 - 44 264.947 437 0 1 -92.75 -22.597 -204.655 - 44 87.6282 438 0 1 -92.5498 -22.6528 -204.524 - 44 132.503 434 0 1 -93.1906 -23.1121 -204.85 - 44 270.439 435 0 1 -93.15 -23.2698 -204.547 - 44 156.188 778 0 0 -92.9759 -24.278 -205.85 - 44 47.6939 779 0 0 -92.9092 -24.2491 -206.103 - 44 90.5318 780 0 0 -92.9215 -24.05 -206.206 - 44 145.615 663 1 1 -47.2631 15.0971 -174.45 - 44 243.235 975 1 0 -47.2562 15.0849 -175.85 - 44 102.791 665 0 1 -47.0158 15.1311 -204.45 - 44 313.856 975 0 0 -46.894 15.144 -205.85 - 44 10.7545 1199 10 0 110.239 59.8816 93.75 - 44 18.6403 1198 10 0 110.255 59.85 93.7667 - 44 59.2102 664 1 1 -47.25 15.096 -174.616 - 44 116.07 974 1 0 -47.1851 15.028 -175.85 - 44 100.881 672 0 1 -45.5264 13.8256 -204.45 - 44 115.088 968 0 0 -45.7852 13.758 -205.85 - 44 346.22 668 1 1 -46.4307 15.1342 -174.45 - 44 280.499 976 1 0 -46.4161 15.268 -175.85 - 44 37.8993 981 0 0 -47.0938 16.4411 -205.85 - 44 95.0691 982 0 0 -47.0953 16.45 -205.989 - 44 101.092 670 0 1 -45.9246 15.2351 -204.45 - 44 264.218 672 6 1 -45.5968 16.2729 -24.45 - 44 343.679 981 6 0 -45.5942 16.3161 -25.85 - 44 110.944 672 5 1 -45.6128 17.2909 -54.45 - 44 117.107 986 5 0 -45.6002 17.3745 -55.85 - 44 139.076 674 4 1 -45.1649 19.1484 -84.45 - 44 43.316 995 4 0 -45.14 19.2412 -85.85 - 44 67.4797 996 4 0 -45.1372 19.25 -85.9828 - 44 105.144 677 3 1 -44.4652 21.2628 -114.45 - 44 90.6475 1006 3 0 -44.4535 21.3723 -115.85 - 44 94.6736 679 2 1 -44.1731 23.695 -144.45 - 44 112.833 1018 2 0 -44.2105 23.7969 -145.85 - 44 121.52 675 1 1 -44.9707 25.6861 -174.45 - 44 114.053 1028 1 0 -45.0879 25.7448 -175.85 - 44 125.191 661 0 1 -47.7404 26.6301 -204.45 - 44 112.51 1033 0 0 -47.8694 26.7632 -205.85 - 44 123.394 676 5 1 -44.6785 17.0368 -54.45 - 44 121.362 985 5 0 -44.6635 17.0974 -55.85 - 44 126.156 678 4 1 -44.3756 18.0525 -84.45 - 44 123.47 990 4 0 -44.3531 18.1214 -85.85 - 44 143.422 681 3 1 -43.7918 19.5447 -114.45 - 44 114.043 998 3 0 -43.8502 19.6977 -115.85 - 44 127.504 674 2 1 -45.2149 22.8904 -144.45 - 44 125.751 1015 2 0 -45.2402 23.0701 -145.85 - 44 118.221 670 1 1 -45.9999 26.6122 -174.45 - 44 155.063 1034 1 0 -46.0372 26.8603 -175.85 - 44 132.553 660 0 1 -47.9489 31.7092 -204.45 - 44 43.4989 1059 0 0 -48.0241 32.0129 -205.85 - 44 78.9005 1060 0 0 -48.032 32.0502 -206.021 - 44 29.6798 672 9 1 -45.5403 16.6849 65.55 - 44 48.7931 671 9 1 -45.65 16.6586 65.5163 - 44 63.3353 670 9 1 -45.85 16.5757 65.4855 - 44 93.1298 669 9 1 -46.05 16.4924 65.4043 - 44 105.73 978 9 0 -46.318 15.7599 64.15 - 44 123.85 977 9 0 -46.327 15.65 63.9465 - 44 4.3708 976 9 0 -46.2748 15.4498 63.7527 - 44 206.116 672 11 1 -45.4502 16.7224 125.259 - 44 206.437 989 11 0 -45.0059 18.0322 124.15 - 44 40.7826 990 11 0 -44.9891 18.05 124.124 -Number of digits in this event: 46 +Event: 12 +Number of tracker hits in this event: 133 + 12 114.835 992 8 1 18.5334 141.477 35.55 + 12 122.762 1606 8 0 18.5341 141.476 34.15 + 12 133.506 992 7 1 18.5425 141.459 5.55 + 12 227.697 1606 7 0 18.5445 141.459 4.15 + 12 168.238 992 6 1 18.5847 141.45 -24.45 + 12 125.385 1606 6 0 18.5875 141.45 -25.85 + 12 117.235 992 5 1 18.633 141.447 -54.45 + 12 124.189 1606 5 0 18.6367 141.444 -55.85 + 12 425.748 993 4 1 18.6944 141.384 -84.45 + 12 354.953 1606 4 0 18.6981 141.39 -85.85 + 12 529.398 993 3 1 18.7778 141.513 -114.45 + 12 525.573 1606 3 0 18.7874 141.524 -115.85 + 12 111.887 994 2 1 18.9694 141.775 -144.45 + 12 254.482 1608 2 0 18.9765 141.787 -145.85 + 12 189.668 995 1 1 19.1185 142.032 -174.45 + 12 107.431 1609 1 0 19.1277 142.047 -175.85 + 12 151.063 996 0 1 19.3343 142.368 -204.45 + 12 131.503 1611 0 0 19.3401 142.382 -205.85 + 12 29.1425 1609 0 0 13.254 142.14 -206.25 + 12 109.091 1610 0 0 13.2424 142.15 -206.162 + 12 187.258 967 0 1 13.5803 144.209 -204.85 + 12 354.552 997 0 1 19.45 142.331 -204.459 + 12 91.6741 998 0 1 19.65 142.398 -204.668 + 12 493.682 992 3 1 18.65 141.288 -114.733 + 12 124.963 1603 3 0 17.5865 140.787 -115.85 + 12 180.922 1604 3 0 17.4486 140.95 -116.04 + 12 95.9707 998 2 1 19.8045 141.383 -144.45 + 12 11.9303 999 2 1 19.85 141.386 -144.81 + 12 410.154 1606 2 0 19.979 141.401 -145.85 + 12 142.351 1011 1 1 22.3354 143.815 -174.45 + 12 100.297 1619 1 0 22.3207 144.023 -175.85 + 12 110.569 1645 0 0 19.0542 149.291 -205.85 + 12 132.68 1021 0 1 24.3885 144.526 -204.45 + 12 161.132 1621 0 0 24.2989 144.43 -205.851 + 12 103.189 1022 0 1 24.45 144.586 -204.46 + 12 143.858 1623 0 0 24.8098 144.884 -205.85 + 12 12.3868 1624 0 0 24.8937 144.95 -206.2 + 12 217.934 1605 3 0 18.7335 141.325 -115.85 + 12 340.044 992 2 1 18.6344 140.168 -144.45 + 12 102.909 1599 2 0 18.5254 140.063 -145.85 + 12 179.427 980 1 1 16.0929 138.333 -174.45 + 12 43.179 979 1 1 16.05 138.332 -174.666 + 12 131.741 1590 1 0 15.8252 138.326 -175.85 + 12 116.261 952 0 1 10.5719 138.264 -204.45 + 12 123.146 1591 0 0 10.2354 138.439 -205.85 + 12 374.441 995 3 1 19.124 140.545 -114.45 + 12 99.1573 1602 3 0 19.169 140.623 -115.85 + 12 59.1198 1002 2 1 20.6165 141.585 -144.45 + 12 65.4016 1003 2 1 20.65 141.618 -144.654 + 12 112.674 1028 1 1 25.7027 147.179 -174.45 + 12 3.2531 1636 1 0 26.1163 147.547 -175.85 + 12 108.109 1637 1 0 26.1196 147.55 -175.861 + 12 16.4973 1076 0 1 35.2703 155.004 -204.45 + 12 131.056 1580 2 0 -40.6048 136.345 -146.25 + 12 52.8004 1579 2 0 -40.718 136.15 -146.011 + 12 182.33 694 2 1 -41.208 136.82 -144.85 + 12 195.91 695 2 1 -41.05 136.618 -144.631 + 12 19.7548 1601 3 0 19.0132 140.358 -115.85 + 12 194.689 1600 3 0 19.0084 140.35 -115.916 + 12 115.616 984 2 1 16.9339 136.987 -144.45 + 12 38.4064 1583 2 0 16.9247 136.774 -145.85 + 12 64.4364 1582 2 0 16.9239 136.75 -146.006 + 12 233.515 982 1 1 16.4699 132.496 -174.451 + 12 52.5038 981 1 1 16.45 132.431 -174.789 + 12 98.983 1560 1 0 16.3769 132.227 -175.85 + 12 1.68692 1559 1 0 16.3469 132.15 -176.242 + 12 126.735 969 0 1 13.9336 126.302 -204.45 + 12 4.99845 1530 0 0 13.8001 126.152 -205.85 + 12 159.646 1529 0 0 13.7977 126.15 -205.873 + 12 82.1599 1586 0 0 20.9254 137.507 -206.25 + 12 54.9304 1599 3 0 18.2661 140.15 -116.092 + 12 134.188 1011 2 1 22.403 118.382 -144.45 + 12 34.9132 1495 2 0 22.0882 119.328 -145.85 + 12 183.171 1496 2 0 22.0766 119.35 -145.884 + 12 376.565 991 3 1 18.2708 142.006 -114.45 + 12 106.854 1609 3 0 18.2219 142.057 -115.85 + 12 106.655 986 2 1 17.3333 143.077 -144.45 + 12 123.056 1614 2 0 17.2826 143.101 -145.85 + 12 152.259 1618 1 0 16.1785 143.75 -175.85 + 12 153.366 975 0 1 15.0841 143.893 -204.45 + 12 126.343 1618 0 0 15.0396 143.877 -205.85 + 12 159.123 1610 3 0 18.3624 142.163 -115.85 + 12 125.12 1000 2 1 20.1732 144.707 -144.45 + 12 109.286 1623 2 0 20.4173 144.812 -145.85 + 12 105.061 1024 1 1 24.9897 147.14 -174.45 + 12 18.8193 1025 1 1 25.05 147.142 -174.772 + 12 121.815 1635 1 0 25.2488 147.151 -175.85 + 12 156.578 1048 0 1 29.7647 147.765 -204.45 + 12 15.7804 1636 0 0 29.9682 147.367 -205.851 + 12 112.177 1635 0 0 29.9768 147.35 -205.915 + 12 196.443 15 2 1 -176.95 70.0757 -144.789 + 12 17.8795 10 2 1 -177.95 75.9359 -144.717 + 12 74.5239 16 2 1 -176.95 70.0316 -144.763 + 12 0.765587 1014 2 1 23.0466 126.418 -144.45 + 12 92.5674 1015 2 1 23.05 126.419 -144.453 + 12 59.8423 1016 2 1 23.25 126.445 -144.609 + 12 222.005 1017 2 1 23.4502 126.47 -144.731 + 12 57.8217 1018 2 1 23.65 126.422 -144.796 + 12 137.8 1529 2 0 25.8461 126.101 -145.85 + 12 14.0315 1058 2 1 31.815 126.358 -144.85 + 12 46.6181 1059 2 1 31.8502 126.361 -144.847 + 12 33.2213 1060 2 1 32.05 126.438 -144.84 + 12 281.207 1538 2 0 35.8969 127.764 -145.85 + 12 82.1579 1539 2 0 36.5648 127.95 -146.108 + 12 660.277 992 1 1 18.5552 141.497 -174.45 + 12 251.836 1606 1 0 18.568 141.494 -175.85 + 12 112.801 994 0 1 18.88 141.398 -204.45 + 12 456.649 1606 0 0 18.8816 141.411 -205.85 + 12 382.521 992 0 1 18.6341 141.447 -204.45 + 12 123.193 1605 0 0 18.5763 141.308 -205.85 + 12 121.512 1607 2 0 18.5145 141.561 -145.85 + 12 205.093 1607 1 0 18.4789 141.702 -175.85 + 12 96.1313 991 0 1 18.3403 141.746 -204.45 + 12 126.911 1607 0 0 18.3368 141.741 -205.85 + 12 76.2621 1259 1 0 -100.556 71.9531 -176.25 + 12 56.7323 1258 1 0 -100.701 71.85 -176.117 + 12 56.3022 991 2 1 18.45 141.499 -144.685 + 12 132.531 920 1 1 4.20391 146.77 -174.45 + 12 427.428 921 1 1 4.25 146.761 -174.465 + 12 157.093 922 1 1 4.45 146.652 -174.561 + 12 8.46209 1607 3 0 18.4472 141.55 -115.855 + 12 35.7775 987 3 1 17.5258 142.496 -114.85 + 12 64.1544 1608 3 0 16.7139 141.897 -115.85 + 12 107.038 990 2 1 18.2199 141.456 -144.45 + 12 111.564 985 1 1 17.1385 140.992 -174.45 + 12 107.654 1604 1 0 17.0676 140.962 -175.85 + 12 143.245 978 0 1 15.764 140.499 -204.45 + 12 110.764 1601 0 0 15.7293 140.516 -205.85 + 12 68.9735 1304 8 0 6.60048 80.9218 33.75 + 12 82.1852 1303 8 0 6.58519 80.85 33.9651 + 12 146.178 934 8 1 6.89213 80.2538 35.15 + 12 187.179 933 8 1 6.85 80.0057 35.2166 + 12 277.003 1605 2 0 18.2045 141.35 -145.916 +Number of digits in this event: 69 Using G4ParticleGun... -Particle energy: 3.45659 LIN +Particle energy: 1.79187 LIN Particle: e- -Event: 45 -Number of tracker hits in this event: 70 - 45 115.5 964 11 1 12.9843 -47.2067 125.55 - 45 175.239 664 11 0 12.9853 -47.2083 124.15 - 45 111.404 964 10 1 13.0061 -47.2509 95.55 - 45 130.358 663 10 0 13.005 -47.2539 94.15 - 45 107.972 964 9 1 12.9791 -47.3211 65.55 - 45 133.817 663 9 0 12.9806 -47.3249 64.15 - 45 162.173 964 8 1 13.019 -47.4058 35.55 - 45 124.653 663 8 0 13.0186 -47.4083 34.15 - 45 120.932 964 7 1 12.9995 -47.4574 5.55 - 45 162.404 662 7 0 13.0002 -47.4607 4.15 - 45 138.594 964 6 1 13.0254 -47.5254 -24.45 - 45 242.534 662 6 0 13.0279 -47.5296 -25.85 - 45 117.367 965 5 1 13.0757 -47.6176 -54.45 - 45 127.646 662 5 0 13.0757 -47.6233 -55.85 - 45 392.701 965 4 1 13.0763 -47.7406 -84.45 - 45 166.641 661 4 0 13.0746 -47.7453 -85.85 - 45 127.315 964 3 1 13.0322 -47.8382 -114.45 - 45 412.515 661 3 0 13.0291 -47.8419 -115.85 - 45 107.071 964 2 1 12.9783 -47.9191 -144.45 - 45 134.17 660 2 0 12.9759 -47.9227 -145.85 - 45 136.257 964 1 1 12.9395 -47.9994 -174.45 - 45 289.232 660 1 0 12.9391 -48.0023 -175.85 - 45 149.554 964 0 1 12.9421 -48.0632 -204.45 - 45 195.638 659 0 0 12.9397 -48.0635 -205.85 - 45 0.715003 804 4 0 9.13315 -19.0527 -86.2495 - 45 82.7931 805 4 0 9.13273 -19.05 -86.2467 - 45 61.7003 806 4 0 9.13251 -18.8491 -86.024 - 45 55.68 807 4 0 9.17131 -18.65 -86.109 - 45 397.643 929 4 0 71.0502 5.94229 -86.2499 - 45 130.751 576 3 0 24.725 -64.6534 -116.249 - 45 135.201 1024 3 1 24.9946 -65.2389 -114.85 - 45 219.363 1025 3 1 25.05 -65.3613 -114.611 - 45 158.743 552 4 0 56.3149 -69.5103 -86.25 - 45 63.3816 1192 4 1 58.52 -68.9647 -84.8499 - 45 131.667 1193 4 1 58.65 -68.9621 -84.7015 - 45 9.88254 867 2 0 -167.269 -6.58025 -146.25 - 45 81.2458 868 2 0 -167.69 -6.44995 -146.012 - 45 31.8769 70 2 1 -166.006 -5.9589 -144.85 - 45 179.535 71 2 1 -165.95 -5.947 -144.817 - 45 116.123 965 1 1 13.1852 -47.8177 -174.45 - 45 126.798 661 1 0 12.9801 -47.787 -175.85 - 45 179.409 937 0 1 7.56684 -46.0962 -204.45 - 45 4.11313 936 0 1 7.44996 -45.9819 -204.845 - 45 124.051 671 0 0 7.08066 -45.7834 -205.85 - 45 113.022 662 4 0 13.1468 -47.4884 -85.85 - 45 429.113 965 3 1 13.1426 -47.7969 -114.45 - 45 142.545 961 2 1 12.2944 -48.2275 -144.45 - 45 101.194 658 2 0 12.2472 -48.2866 -145.85 - 45 148.972 956 1 1 11.305 -49.5288 -174.45 - 45 211.992 652 1 0 11.2588 -49.6145 -175.85 - 45 47.8833 951 0 1 10.256 -51.3366 -204.45 - 45 90.6829 950 0 1 10.25 -51.3444 -204.598 - 45 108.528 643 0 0 10.2018 -51.4149 -205.85 - 45 300.074 666 3 0 12.9969 -46.7747 -115.85 - 45 130.177 663 4 0 13.2868 -47.425 -85.85 - 45 175.923 981 3 1 16.295 -46.7082 -114.45 - 45 149.313 667 3 0 16.6161 -46.6334 -115.85 - 45 139.203 1020 2 1 24.0802 -44.1861 -144.45 - 45 115.315 679 2 0 24.6247 -44.0803 -145.851 - 45 35.4932 1077 1 1 35.6109 -44.0375 -174.451 - 45 91.2269 1078 1 1 35.65 -44.0368 -174.568 - 45 356.145 680 1 0 36.0575 -44.0038 -175.85 - 45 218.858 1122 0 1 44.4518 -43.6319 -204.45 - 45 119.307 683 0 0 44.7139 -43.3618 -205.85 - 45 117.842 1121 0 1 44.4499 -43.6254 -204.458 - 45 154.767 965 6 1 13.1184 -47.2537 -24.45 - 45 83.3704 966 6 1 13.25 -46.9804 -24.6301 - 45 91.9775 668 6 0 13.6342 -46.413 -25.8501 - 45 1.79194 667 6 0 13.6049 -46.45 -26.2441 - 45 433.884 747 6 0 47.5602 -30.617 -26.2497 +Event: 13 +Number of tracker hits in this event: 27 + 13 122.389 432 7 1 -93.5725 114.531 5.55 + 13 120.557 1471 7 0 -93.5725 114.53 4.15 + 13 122.574 432 6 1 -93.5761 114.527 -24.45 + 13 101.912 1471 6 0 -93.5721 114.524 -25.85 + 13 125.604 433 5 1 -93.4821 114.478 -54.45 + 13 137.308 1471 5 0 -93.4744 114.476 -55.85 + 13 242.125 434 4 1 -93.3133 114.431 -84.45 + 13 172.312 1471 4 0 -93.3022 114.424 -85.85 + 13 362.322 435 3 1 -93.081 114.283 -114.45 + 13 557.17 1470 3 0 -93.0704 114.275 -115.85 + 13 125.696 436 2 1 -92.8462 114.114 -144.45 + 13 204.272 1469 2 0 -92.8342 114.105 -145.85 + 13 102.071 437 1 1 -92.5837 113.896 -174.45 + 13 131.71 1468 1 0 -92.575 113.89 -175.85 + 13 235.607 438 0 1 -92.3701 113.76 -204.45 + 13 125.738 1468 0 0 -92.3634 113.756 -205.85 + 13 70.0407 1711 7 1 162.35 100.704 5.4188 + 13 196.268 1259 3 0 -75.9766 72.0126 -116.25 + 13 62.2143 524 3 1 -75.2419 72.1729 -114.849 + 13 105.818 1258 3 0 -74.5749 71.8499 -115.993 + 13 89.2546 1257 3 0 -74.5324 71.6497 -116.133 + 13 134.244 1256 3 0 -74.5782 71.45 -116.008 + 13 34.6931 525 3 1 -74.8661 71.687 -114.85 + 13 162.271 526 3 1 -74.85 71.7218 -114.826 + 13 109.74 1469 3 0 -93.1406 114.15 -116.238 + 13 24.5289 434 3 1 -93.15 114.207 -114.514 + 13 73.4276 433 4 1 -93.35 114.46 -84.7776 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 9.35064 LIN +Particle: e- +Event: 14 +Number of tracker hits in this event: 80 + 14 110.092 225 7 1 -134.959 -61.4807 5.55 + 14 140.544 592 7 0 -134.959 -61.4809 4.15 + 14 122.192 225 6 1 -134.96 -61.4868 -24.45 + 14 119.934 592 6 0 -134.961 -61.4889 -25.85 + 14 133.008 225 5 1 -134.99 -61.5416 -54.45 + 14 127.612 592 5 0 -134.994 -61.5423 -55.85 + 14 263.391 225 4 1 -135.085 -61.5919 -84.45 + 14 335.407 592 4 0 -135.096 -61.5984 -85.85 + 14 228.403 224 3 1 -135.332 -61.7718 -114.45 + 14 161.161 591 3 0 -135.346 -61.7865 -115.85 + 14 141.686 229 2 1 -134.263 -61.885 -144.45 + 14 453.015 592 2 0 -134.136 -61.6235 -145.85 + 14 186.3 242 1 1 -131.642 -56.309 -174.45 + 14 49.9063 243 1 1 -131.55 -56.2137 -174.729 + 14 234.111 621 1 0 -131.182 -55.8182 -175.85 + 14 99.5325 293 0 1 -121.48 -44.9795 -204.45 + 14 130.648 677 0 0 -121.547 -44.6002 -205.85 + 14 124.762 593 3 0 -135.209 -61.3944 -115.85 + 14 131.16 220 2 1 -136.033 -61.9422 -144.45 + 14 110.878 590 2 0 -136.07 -61.9503 -145.85 + 14 112.706 216 1 1 -136.79 -62.1648 -174.45 + 14 121.963 589 1 0 -136.816 -62.2055 -175.85 + 14 117.579 212 0 1 -137.688 -63.2 -204.45 + 14 138.5 584 0 0 -137.742 -63.2239 -205.85 + 14 234.253 226 3 1 -134.828 -61.8814 -114.45 + 14 390.485 592 3 0 -134.834 -61.5511 -115.851 + 14 24.0129 230 2 1 -133.965 -54.5029 -144.45 + 14 86.9441 231 2 1 -133.95 -54.4858 -144.528 + 14 118.042 629 2 0 -133.699 -54.1712 -145.85 + 14 43.2935 255 1 1 -128.967 -46.9225 -174.45 + 14 64.2221 256 1 1 -128.95 -46.8935 -174.624 + 14 50.039 666 1 0 -128.816 -46.684 -175.85 + 14 42.8143 667 1 0 -128.796 -46.65 -176.045 + 14 103.906 269 0 1 -126.218 -42.2996 -204.45 + 14 116.687 689 0 0 -126.337 -42.1305 -205.85 + 14 89.233 227 3 1 -134.75 -61.8154 -114.55 + 14 152.26 594 3 0 -134.345 -61.1959 -115.85 + 14 292.637 504 3 0 -32.5575 -79.094 -116.25 + 14 6.27418 503 3 0 -31.9698 -79.2504 -115.862 + 14 50.9739 751 3 1 -29.8112 -80.5199 -114.85 + 14 72.5999 752 3 1 -29.65 -80.5905 -114.824 + 14 1.45119 753 3 1 -29.4498 -80.671 -114.85 + 14 40.4783 271 3 0 46.1381 -125.811 -115.85 + 14 12.3293 1162 3 1 52.6002 -129.959 -114.85 + 14 64.8976 1163 3 1 52.65 -129.989 -114.833 + 14 77.2084 1164 3 1 52.85 -130.091 -114.725 + 14 99.0883 1165 3 1 53.05 -130.168 -114.568 + 14 279.898 225 3 1 -134.97 -61.5318 -114.45 + 14 271.708 225 2 1 -135.008 -61.5274 -144.45 + 14 229.18 225 1 1 -135.049 -61.5425 -174.45 + 14 264.169 592 1 0 -135.047 -61.5459 -175.85 + 14 195.378 225 0 1 -135.025 -61.611 -204.45 + 14 274.358 592 0 0 -135.024 -61.6144 -205.85 + 14 53.6943 1285 1 0 -83.2775 77.1385 -176.25 + 14 95.1452 1383 1 0 -55.2577 96.8436 -176.25 + 14 133.218 1382 1 0 -55.2694 96.75 -176.121 + 14 42.958 535 9 1 -72.9862 68.9231 65.55 + 14 404.744 534 9 1 -73.05 68.8917 65.4372 + 14 3.28294 920 8 0 -135.159 4.17713 33.75 + 14 96.323 224 8 1 -135.204 3.95519 35.1504 + 14 70.7886 223 8 1 -135.35 3.88207 35.2526 + 14 15.9475 925 8 0 -135.434 5.07138 34.15 + 14 3.71561 225 8 1 -135.07 6.40177 35.15 + 14 172.67 930 8 0 -134.778 6.17282 34.1496 + 14 72.8351 375 1 0 -157.757 -105.06 -176.25 + 14 79.7155 374 1 0 -157.72 -105.15 -176.027 + 14 40.2606 111 1 1 -157.878 -105.671 -174.85 + 14 133.66 110 1 1 -157.95 -105.819 -174.789 + 14 51.0106 109 1 1 -158.15 -106.137 -174.82 + 14 151.701 368 1 0 -159.054 -106.49 -175.85 + 14 58.162 369 1 0 -159.355 -106.35 -175.929 + 14 120.124 102 1 1 -159.704 -105.578 -174.85 + 14 140.603 101 1 1 -159.75 -105.557 -174.763 + 14 4.10753 654 3 1 -49.25 -136.396 -114.564 + 14 67.293 572 0 0 -156.742 -65.5538 -206.25 + 14 224.307 573 0 0 -156.768 -65.45 -206.185 + 14 107.324 375 0 1 -105.09 -52.5824 -204.85 + 14 69.2338 376 0 1 -104.95 -52.8308 -204.71 + 14 240.218 810 1 1 -17.909 -89.2432 -174.45 + 14 111.943 811 1 1 -17.85 -89.0699 -174.674 +Number of digits in this event: 40 +Using G4ParticleGun... +Particle energy: 1.84689 LIN +Particle: e- +Event: 15 +Number of tracker hits in this event: 96 + 15 134.578 1121 8 1 44.3844 133.277 35.55 + 15 103.701 1565 8 0 44.3866 133.277 34.15 + 15 140.247 1121 7 1 44.4241 133.236 5.55 + 15 138.647 1565 7 0 44.426 133.235 4.15 + 15 153.152 1122 6 1 44.4512 133.195 -24.45 + 15 123.078 1565 6 0 44.4494 133.198 -25.85 + 15 116.174 1121 5 1 44.403 133.269 -54.45 + 15 264.378 1565 5 0 44.4007 133.279 -55.85 + 15 524.261 1121 4 1 44.3605 133.491 -84.45 + 15 262.53 1566 4 0 44.3581 133.496 -85.85 + 15 622.284 1121 3 1 44.3298 133.611 -114.45 + 15 264.142 1568 3 0 44.6032 133.827 -115.85 + 15 119.657 1161 2 1 52.2751 139.676 -144.45 + 15 102.288 1597 2 0 52.5261 139.617 -145.85 + 15 251.675 1180 1 1 56.1579 139.584 -174.45 + 15 20.9188 1179 1 1 56.05 139.89 -174.792 + 15 59.3713 1603 1 0 55.702 140.856 -175.85 + 15 77.7026 1604 1 0 55.6691 140.95 -175.952 + 15 45.6795 1605 1 0 55.5889 141.15 -176.17 + 15 119.032 1108 0 1 41.7585 168.536 -204.452 + 15 56.7777 1745 0 0 41.7748 169.247 -205.85 + 15 51.6178 1746 0 0 41.7683 169.35 -206.061 + 15 43.9292 1165 0 1 53.1181 143.806 -204.45 + 15 118.958 1166 0 1 53.25 143.835 -204.522 + 15 245.767 1167 0 1 53.45 143.862 -204.57 + 15 269.007 1567 3 0 44.2853 133.605 -115.85 + 15 250.075 1115 2 1 43.1201 133.124 -144.45 + 15 130.144 1565 2 0 42.9126 133.154 -145.85 + 15 116.836 1091 1 1 38.3712 133.696 -174.45 + 15 122.442 1567 1 0 38.2786 133.7 -175.85 + 15 95.1727 1083 0 1 36.7047 133.784 -204.45 + 15 105.523 1568 0 0 36.566 133.768 -205.85 + 15 101.461 1122 2 1 44.4791 133.81 -144.45 + 15 149.255 1568 2 0 44.4834 133.826 -145.85 + 15 243.668 1122 1 1 44.5799 134.15 -174.45 + 15 114.691 1570 1 0 44.5659 134.187 -175.85 + 15 112.866 1121 0 1 44.3042 134.915 -204.45 + 15 115.562 1574 0 0 44.2873 134.954 -205.85 + 15 233.014 1121 1 1 44.45 134.221 -174.623 + 15 301.408 1471 0 0 35.6375 114.389 -206.25 + 15 87.9623 1472 0 0 35.3288 114.55 -206.157 + 15 265.417 1122 5 1 44.5016 133.169 -54.45 + 15 128.063 1564 5 0 44.5465 133.005 -55.85 + 15 107.5 1127 4 1 45.6272 129.749 -84.45 + 15 131.347 1546 4 0 45.3006 129.547 -85.85 + 15 13.1493 1096 3 1 39.4237 124.933 -114.45 + 15 115.51 1097 3 1 39.4502 124.902 -114.48 + 15 62.5297 1098 3 1 39.65 124.644 -114.727 + 15 52.0491 1514 3 0 40.581 123.066 -115.85 + 15 59.1223 1513 3 0 40.6445 122.95 -115.929 + 15 65.7835 1512 3 0 40.746 122.75 -116.06 + 15 41.4177 1511 3 0 40.8519 122.55 -116.187 + 15 355.023 1191 2 1 58.2799 67.7353 -144.45 + 15 338.42 1192 2 1 58.45 67.3949 -144.748 + 15 47.3081 1231 2 0 59.0694 66.336 -145.85 + 15 83.6852 1230 2 0 59.1199 66.25 -145.936 + 15 58.6504 1229 2 0 59.2406 66.05 -146.115 + 15 126.303 1313 1 1 82.6714 34.7328 -174.45 + 15 4.77841 1070 1 0 82.8606 34.0589 -175.85 + 15 119.091 1069 1 0 82.8632 34.05 -175.868 + 15 127.98 1325 0 1 85.1291 21.225 -204.45 + 15 6.56976 999 0 0 84.974 19.8764 -205.85 + 15 91.3142 998 0 0 84.9717 19.85 -205.877 + 15 55.0658 997 0 0 84.9626 19.65 -206.114 + 15 66.2479 1193 2 1 58.6501 67.5372 -144.776 + 15 124.223 1117 2 1 43.5866 134.865 -144.45 + 15 84.6148 1573 2 0 43.5896 134.938 -145.85 + 15 89.6782 1574 2 0 43.5905 134.95 -146.087 + 15 97.1064 1118 1 1 43.8017 136.643 -174.45 + 15 163.874 1583 1 0 43.7354 136.801 -175.85 + 15 271.413 1111 0 1 42.4054 139.971 -204.45 + 15 46.5877 1599 0 0 42.3462 140.134 -205.85 + 15 76.9837 1600 0 0 42.3407 140.15 -205.987 + 15 143.836 1241 0 1 68.25 159.481 -204.791 + 15 64.2732 1510 0 0 53.3291 122.24 -206.25 + 15 90.1882 1511 0 0 53.4937 122.35 -206.151 + 15 74.4658 1512 0 0 53.6015 122.55 -206.098 + 15 255.595 1513 0 0 53.6993 122.75 -206.037 + 15 16.5542 1199 0 1 59.8554 122.089 -204.85 + 15 0.592209 1482 0 0 69.4207 116.552 -205.85 + 15 7.62979 1481 0 0 69.4238 116.55 -205.85 + 15 188.693 1267 0 1 73.5097 112.192 -204.85 + 15 210.496 1456 0 0 73.4822 111.382 -205.85 + 15 164.124 1455 0 0 73.4792 111.35 -205.907 + 15 116.14 1112 0 1 42.45 139.94 -204.48 + 15 97.3844 1113 0 1 42.65 139.792 -204.568 + 15 197.126 1114 0 1 42.85 139.728 -204.588 + 15 115.882 1557 1 0 52.7178 131.723 -176.25 + 15 308.287 1165 1 1 53.1005 131.791 -174.85 + 15 483.658 1164 1 1 53.0498 131.7 -174.497 + 15 102.349 1163 1 1 52.85 131.69 -174.613 + 15 166.72 1110 0 1 42.2176 137.177 -204.45 + 15 439.802 1585 0 0 42.2415 137.264 -205.85 + 15 72.7089 1392 5 0 24.8873 98.75 -56.2441 + 15 174.474 1393 5 0 24.79 98.75 -56.0525 + 15 306.015 1586 0 0 42.2244 137.35 -205.973 Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 6.39597 LIN +Particle energy: 3.05263 LIN +Particle: e- +Event: 16 +Number of tracker hits in this event: 26 + 16 188.992 464 9 1 -87.0705 -87.8227 65.55 + 16 105.505 461 9 0 -87.0715 -87.8216 64.15 + 16 150.712 464 8 1 -87.0808 -87.7955 35.55 + 16 131.131 461 8 0 -87.0798 -87.7953 34.15 + 16 116.638 464 7 1 -87.0532 -87.8319 5.55 + 16 171.304 461 7 0 -87.042 -87.8359 4.15 + 16 100.193 466 6 1 -86.7715 -87.8631 -24.45 + 16 109.9 460 6 0 -86.7598 -87.8889 -25.85 + 16 114.381 467 5 1 -86.463 -88.352 -54.45 + 16 137.316 458 5 0 -86.4504 -88.3778 -55.85 + 16 112.662 469 4 1 -86.2485 -88.8415 -84.45 + 16 182.925 456 4 0 -86.2038 -88.8029 -85.85 + 16 118.934 473 3 1 -85.3138 -87.8523 -114.45 + 16 112.22 461 3 0 -85.3011 -87.807 -115.85 + 16 118.605 474 2 1 -85.193 -86.9655 -144.45 + 16 152.464 465 2 0 -85.1477 -86.9533 -145.85 + 16 115.063 478 1 1 -84.3107 -86.4158 -174.452 + 16 114.922 468 1 0 -84.2845 -86.3477 -175.85 + 16 174.025 482 0 1 -83.5141 -85.3739 -204.45 + 16 138.921 473 0 0 -83.5641 -85.285 -205.85 + 16 129.317 478 0 1 -84.2908 -91.1913 -204.45 + 16 141.731 441 0 0 -84.4284 -91.7579 -205.85 + 16 9.59653 440 0 0 -84.4817 -91.95 -206.208 + 16 337.361 465 0 1 -86.9399 -87.264 -204.45 + 16 346.336 463 0 0 -86.9411 -87.2626 -205.85 + 16 145.365 730 2 1 -33.9747 25.8447 -144.85 +Number of digits in this event: 16 +Using G4ParticleGun... +Particle energy: 4.661 LIN +Particle: e- +Event: 17 +Number of tracker hits in this event: 107 + 17 125.605 1136 11 1 47.4069 -2.50165 125.55 + 17 140.889 887 11 0 47.4063 -2.50288 124.15 + 17 118.458 1136 10 1 47.3985 -2.52312 95.55 + 17 116.942 887 10 0 47.4026 -2.51961 94.15 + 17 130.796 1137 9 1 47.4822 -2.45182 65.55 + 17 147.58 888 9 0 47.4864 -2.44877 64.15 + 17 169.433 1137 8 1 47.5712 -2.38576 35.55 + 17 113.782 888 8 0 47.5766 -2.38535 34.15 + 17 257.337 1138 7 1 47.6835 -2.37661 5.55 + 17 122.068 888 7 0 47.6882 -2.3776 4.15 + 17 426.886 1138 6 1 47.7801 -2.39968 -24.45 + 17 140.291 888 6 0 47.7825 -2.40117 -25.85 + 17 105.056 1138 5 1 47.8243 -2.43535 -54.45 + 17 126.26 888 5 0 47.8268 -2.43777 -55.85 + 17 236.847 1139 4 1 47.8798 -2.48288 -84.45 + 17 171.477 887 4 0 47.882 -2.48556 -85.85 + 17 258.549 1139 3 1 47.9325 -2.54101 -114.45 + 17 131.986 887 3 0 47.9327 -2.54408 -115.85 + 17 123.95 1139 2 1 47.9381 -2.60835 -144.45 + 17 105.461 887 2 0 47.9403 -2.61108 -145.85 + 17 235.937 1139 1 1 47.9922 -2.66268 -174.45 + 17 93.4069 886 1 0 47.9936 -2.66683 -175.85 + 17 97.9015 1139 0 1 48.0219 -2.75585 -204.45 + 17 173.694 886 0 0 48.0218 -2.75859 -205.85 + 17 114.422 1140 3 1 48.05 -2.40798 -114.56 + 17 102.473 890 3 0 48.1068 -2.03567 -115.85 + 17 109.675 887 9 0 47.4868 -2.45 64.0171 + 17 19.047 713 9 0 80.9733 -37.4137 63.75 + 17 87.9441 712 9 0 81.0393 -37.45 63.7936 + 17 145.196 711 9 0 81.2235 -37.6502 63.9385 + 17 144.255 710 9 0 81.2976 -37.85 63.9812 + 17 109.189 709 9 0 81.3667 -38.05 63.9595 + 17 68.1233 708 9 0 81.3954 -38.25 63.9661 + 17 300.911 707 9 0 81.4133 -38.4501 63.8894 + 17 264.325 1137 7 1 47.6484 -2.3084 5.54975 + 17 121.594 889 7 0 47.6536 -2.19164 4.15 + 17 124.628 901 6 0 47.7542 0.344481 -25.85 + 17 101.26 1142 5 1 48.4705 3.06583 -54.45 + 17 141.038 916 5 0 48.5449 3.27651 -55.8502 + 17 122.394 1147 4 1 49.4568 7.48337 -84.4501 + 17 123.31 938 4 0 49.4731 7.75568 -85.85 + 17 127.255 1149 3 1 50.0115 13.8159 -114.45 + 17 127.105 971 3 0 50.0735 14.2648 -115.85 + 17 303.338 1157 2 1 51.6168 24.2056 -144.45 + 17 115.339 1023 2 0 51.5505 24.6678 -145.85 + 17 114.002 1151 1 1 50.252 34.7348 -174.45 + 17 301.348 1076 1 0 50.2414 35.3163 -175.85 + 17 17.5764 1077 1 0 50.2392 35.45 -176.18 + 17 111.529 1150 0 1 50.2103 46.5713 -204.45 + 17 113.178 1135 0 0 50.3122 47.0699 -205.85 + 17 4.65562 1315 0 0 89.4142 83.2371 -206.25 + 17 215.649 1316 0 0 89.4318 83.25 -206.242 + 17 83.1918 1317 0 0 89.7955 83.4501 -206.123 + 17 7.80322 1318 0 0 90.15 83.8225 -206.073 + 17 50.2424 1319 0 0 90.1638 83.85 -206.074 + 17 64.5619 1320 0 0 90.2857 84.0502 -206.071 + 17 60.9689 1321 0 0 90.4351 84.2506 -206.097 + 17 65.2274 1322 0 0 90.5638 84.45 -206.114 + 17 74.1414 1323 0 0 90.6802 84.651 -206.103 + 17 56.083 1324 0 0 90.777 84.85 -206.085 + 17 94.233 1325 0 0 90.8628 85.0502 -206.071 + 17 65.8506 1326 0 0 91.018 85.25 -206.059 + 17 83.3351 1327 0 0 91.2307 85.45 -206.107 + 17 71.5195 1328 0 0 91.4184 85.65 -206.166 + 17 116.851 1329 0 0 91.5753 85.85 -206.231 + 17 47.8575 1448 0 0 131.791 109.843 -206.25 + 17 93.1652 1447 0 0 131.917 109.75 -206.18 + 17 71.6954 1446 0 0 132.103 109.549 -206.099 + 17 72.7037 1445 0 0 132.274 109.35 -206.061 + 17 62.2807 1444 0 0 132.451 109.15 -206.045 + 17 46.6542 1443 0 0 132.596 108.95 -205.924 + 17 38.5915 1566 0 1 133.494 107.278 -204.85 + 17 69.2786 1567 0 1 133.55 107.184 -204.801 + 17 16.8744 1568 0 1 133.75 106.986 -204.834 + 17 38.6383 1420 0 0 136.629 104.283 -205.85 + 17 138.207 1589 0 1 138.022 100.39 -204.85 + 17 132.58 1588 0 1 137.95 100.003 -204.693 + 17 119.153 131 2 0 4.65454 -153.909 -146.25 + 17 182.493 130 2 0 4.6792 -153.95 -146.23 + 17 17.4506 941 6 0 56.3445 8.28125 -25.85 + 17 60.5226 1178 6 1 55.7338 9.15232 -24.85 + 17 2.20086 917 6 0 56.0636 3.48893 -25.85 + 17 66.4969 1181 6 1 56.373 2.67635 -24.85 + 17 65.6474 906 6 0 58.1627 1.2769 -25.85 + 17 68.7755 896 7 0 47.3568 -0.810699 4.15 + 17 98.1361 897 7 0 47.3251 -0.649963 3.99122 + 17 2.91843 898 7 0 47.3343 -0.45 3.75978 + 17 7.85991 1160 6 1 52.2191 19.5935 -24.45 + 17 62.5598 1161 6 1 52.25 19.6117 -24.4672 + 17 97.5722 1162 6 1 52.45 19.7092 -24.5664 + 17 81.0804 1163 6 1 52.65 19.7904 -24.6294 + 17 196.601 1164 6 1 52.85 19.857 -24.6871 + 17 81.9453 1165 6 1 53.05 19.9159 -24.7525 + 17 20.8807 1166 6 1 53.25 19.9932 -24.8198 + 17 47.4531 1003 6 0 55.3013 20.7859 -25.85 + 17 308.503 1004 6 0 55.4419 20.85 -25.9396 + 17 27.9101 1468 5 1 113.814 -4.94276 -54.45 + 17 103.164 1467 5 1 113.75 -4.98856 -54.5246 + 17 87.9086 1466 5 1 113.549 -5.01855 -54.6296 + 17 69.3781 1465 5 1 113.35 -4.98272 -54.5856 + 17 131.725 1464 5 1 113.15 -4.98375 -54.4516 + 17 81.3389 1463 5 1 112.95 -4.76385 -54.6162 + 17 188.179 877 5 0 111.113 -4.5498 -55.85 + 17 41.5243 876 5 0 110.692 -4.65 -56.1503 + 17 296.759 1137 0 1 47.5411 -2.44985 -204.45 + 17 118.136 888 0 0 47.56 -2.44122 -205.85 + 17 151.327 887 0 0 47.5371 -2.46803 -205.85 +Number of digits in this event: 42 +Using G4ParticleGun... +Particle energy: 6.83612 LIN +Particle: e- +Event: 18 +Number of tracker hits in this event: 47 + 18 320.319 217 7 1 -136.716 -58.1165 5.55 + 18 111.443 609 7 0 -136.716 -58.1154 4.15 + 18 262.064 217 6 1 -136.72 -58.0911 -24.45 + 18 157.528 609 6 0 -136.721 -58.0909 -25.85 + 18 129.886 217 5 1 -136.744 -58.0889 -54.45 + 18 182.075 609 5 0 -136.745 -58.0895 -55.85 + 18 128.697 216 4 1 -136.773 -58.1001 -84.45 + 18 116.504 609 4 0 -136.775 -58.0993 -85.85 + 18 116.354 216 3 1 -136.804 -58.0873 -114.45 + 18 186.781 609 3 0 -136.806 -58.0862 -115.85 + 18 133.924 216 2 1 -136.848 -58.0672 -144.45 + 18 127.739 609 2 0 -136.849 -58.0647 -145.85 + 18 117.025 216 1 1 -136.886 -58.0091 -174.45 + 18 110.355 610 1 0 -136.887 -58.007 -175.85 + 18 106.275 216 0 1 -136.909 -57.964 -204.45 + 18 135.099 610 0 0 -136.909 -57.9618 -205.85 + 18 12.5396 405 6 0 -155.808 -98.9842 -25.85 + 18 78.3686 610 5 0 -136.565 -58.05 -55.9612 + 18 155.317 219 5 1 -136.188 -57.8069 -54.8497 + 18 23.7722 1115 2 0 -156.006 43.206 -146.25 + 18 95.7326 1116 2 0 -156.011 43.2501 -146.149 + 18 132.307 120 2 1 -156.104 43.8954 -144.85 + 18 22.187 1290 3 0 -153.046 78.1757 -116.25 + 18 70.249 1291 3 0 -153.041 78.25 -116.188 + 18 68.713 1292 3 0 -153.026 78.45 -116.03 + 18 74.6877 135 3 1 -152.985 79.5984 -114.85 + 18 105.191 136 3 1 -152.95 79.7537 -114.688 + 18 5.91621 1136 4 0 -166.568 47.2663 -86.2499 + 18 106.4 1135 4 0 -166.575 47.25 -86.2353 + 18 109.144 1134 4 0 -166.654 47.0499 -86.0288 + 18 260.439 67 4 1 -166.659 46.2083 -84.8499 + 18 491.818 66 4 1 -166.75 45.6462 -84.4558 + 18 260.878 65 4 1 -166.95 45.4831 -84.646 + 18 138.22 64 4 1 -167.15 45.2041 -84.7909 + 18 73.7622 63 4 1 -167.35 44.9235 -84.8416 + 18 95.0693 62 4 1 -167.55 44.7962 -84.7967 + 18 97.1411 61 4 1 -167.75 44.6293 -84.7497 + 18 33.0861 1114 4 0 -168.529 42.9503 -85.85 + 18 55.2097 1113 4 0 -168.568 42.85 -85.8999 + 18 42.5612 1112 4 0 -168.622 42.65 -85.9075 + 18 26.4709 58 4 1 -168.547 40.8381 -84.85 + 18 123.695 1093 4 0 -167.547 38.7916 -85.85 + 18 88.2306 1092 4 0 -167.442 38.65 -85.9184 + 18 16.6011 1091 4 0 -167.336 38.449 -85.8824 + 18 14.0884 1303 6 0 -105.913 80.65 -25.9849 + 18 86.6516 1121 4 0 -168.159 44.376 -85.85 + 18 142.079 1120 4 0 -168.18 44.25 -85.9255 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 9.49285 LIN +Particle: e- +Event: 19 +Number of tracker hits in this event: 94 + 19 163.169 826 11 1 -14.7859 -40.2658 125.55 + 19 173.542 698 11 0 -14.7866 -40.2663 124.15 + 19 185.152 826 10 1 -14.8013 -40.2748 95.55 + 19 99.7208 698 10 0 -14.8017 -40.2747 94.15 + 19 104.875 826 9 1 -14.8118 -40.2721 65.55 + 19 125.496 698 9 0 -14.8124 -40.272 64.15 + 19 118.965 826 8 1 -14.8224 -40.2677 35.55 + 19 108.318 698 8 0 -14.8231 -40.2679 34.15 + 19 275.398 826 7 1 -14.8353 -40.2743 5.55 + 19 126.464 698 7 0 -14.836 -40.2741 4.15 + 19 186.679 826 6 1 -14.8421 -40.2714 -24.45 + 19 127.252 698 6 0 -14.8423 -40.2714 -25.85 + 19 208.699 826 5 1 -14.849 -40.2666 -54.45 + 19 228.18 698 5 0 -14.8478 -40.2653 -55.85 + 19 115.319 826 4 1 -14.8257 -40.2349 -84.45 + 19 134.207 699 4 0 -14.8248 -40.2307 -85.85 + 19 253.622 826 3 1 -14.8108 -40.1323 -114.45 + 19 238.62 699 3 0 -14.8095 -40.1315 -115.85 + 19 103.906 826 2 1 -14.7833 -40.1126 -144.45 + 19 99.9394 699 2 0 -14.7801 -40.1121 -145.85 + 19 111.665 826 1 1 -14.7272 -40.1141 -174.45 + 19 295.576 699 1 0 -14.7255 -40.113 -175.85 + 19 157.937 826 0 1 -14.7779 -40.0883 -204.45 + 19 528.026 699 0 0 -14.778 -40.0852 -205.85 + 19 8.03157 507 0 0 32.9127 -78.5811 -206.25 + 19 284.376 506 0 0 32.9762 -78.65 -206.121 + 19 254.243 1070 0 1 34.0936 -79.2561 -204.85 + 19 17.7229 1069 0 1 34.05 -79.1784 -204.78 + 19 41.8195 700 0 0 -14.7536 -40.05 -206.047 + 19 228.941 827 0 1 -14.6333 -40.1556 -204.45 + 19 33.7744 673 2 1 -45.3132 -132.748 -144.45 + 19 324.86 825 5 1 -14.85 -40.2663 -54.7355 + 19 155.026 697 5 0 -14.657 -40.4621 -55.85 + 19 124.518 839 4 1 -12.1653 -47.0051 -84.4501 + 19 54.6197 659 4 0 -12.2168 -48.1417 -85.85 + 19 139.727 658 4 0 -12.2186 -48.25 -85.9841 + 19 18.9743 657 4 0 -12.2302 -48.4501 -86.2121 + 19 86.1521 829 3 1 -14.0737 -76.549 -114.45 + 19 233.315 830 3 1 -14.05 -76.6497 -114.58 + 19 17.67 510 3 0 -13.728 -77.9927 -115.85 + 19 74.6071 509 3 0 -13.7149 -78.05 -115.902 + 19 264.898 508 3 0 -13.6781 -78.2504 -116.098 + 19 56.7678 856 2 1 -8.82579 -103.28 -144.45 + 19 150.642 855 2 1 -8.85016 -103.34 -144.57 + 19 27.4675 380 2 0 -8.93258 -104.076 -145.85 + 19 106.101 379 2 0 -8.93331 -104.15 -145.981 + 19 39.2593 817 1 1 -16.564 -122.886 -174.45 + 19 145.957 816 1 1 -16.65 -122.926 -174.546 + 19 34.9255 815 1 1 -16.8502 -123.016 -174.753 + 19 98.8085 283 1 0 -17.8159 -123.458 -175.85 + 19 160.91 282 1 0 -18.0104 -123.55 -176.102 + 19 41.522 705 0 1 -38.9872 -129.403 -204.45 + 19 102.943 704 0 1 -39.0501 -129.45 -204.547 + 19 63.3897 703 0 1 -39.2502 -129.632 -204.753 + 19 24.7267 248 0 0 -40.1773 -130.511 -205.85 + 19 119.013 247 0 0 -40.2189 -130.55 -205.9 + 19 48.5256 246 0 0 -40.4484 -130.75 -206.144 + 19 2.00466 33 0 0 -82.7096 -173.545 -206.25 + 19 145.54 32 0 0 -82.7128 -173.55 -206.247 + 19 119.306 31 0 0 -82.9311 -173.75 -206.042 + 19 28.805 475 0 1 -84.9871 -175.055 -204.85 + 19 133.502 474 0 1 -85.05 -175.129 -204.806 + 19 54.5371 473 0 1 -85.25 -175.46 -204.629 + 19 62.204 472 0 1 -85.45 -175.535 -204.553 + 19 43.7211 471 0 1 -85.65 -175.57 -204.504 + 19 82.4686 470 0 1 -85.9768 -175.575 -204.45 + 19 202.55 469 0 1 -86.05 -175.571 -204.561 + 19 166.869 468 0 1 -86.25 -175.829 -204.677 + 19 269.441 467 0 1 -86.45 -176.263 -204.538 + 19 69.4807 63 0 0 -126.967 -167.55 -206.218 + 19 5.54972 62 0 0 -127.055 -167.55 -206.205 + 19 99.1656 823 4 1 -15.4074 -40.2445 -84.45 + 19 113.326 698 4 0 -15.4126 -40.2573 -85.85 + 19 79.3203 824 3 1 -15.1235 -40.4952 -114.45 + 19 35.2909 825 3 1 -15.05 -40.4422 -114.72 + 19 35.3642 698 3 0 -14.7738 -40.2688 -115.85 + 19 51.4359 858 2 1 -8.32569 -35.9181 -144.45 + 19 191.297 859 2 1 -8.25 -35.9391 -144.608 + 19 137.515 719 2 0 -7.59142 -36.0781 -145.85 + 19 183.738 937 1 1 7.63832 -39.4408 -174.45 + 19 116.226 938 1 1 7.65 -39.4449 -174.457 + 19 75.7668 939 1 1 7.85 -39.5077 -174.58 + 19 80.5594 940 1 1 8.05 -39.5643 -174.712 + 19 10.7273 941 1 1 8.25066 -39.6202 -174.837 + 19 130.849 698 1 0 10.3108 -40.2502 -176.091 + 19 20.262 1236 0 1 67.4223 -58.6136 -204.45 + 19 116.348 1237 0 1 67.45 -58.6501 -204.477 + 19 138.146 1238 0 1 67.65 -58.9089 -204.666 + 19 286.929 598 0 0 68.9655 -60.3024 -205.85 + 19 95.2976 597 0 0 69.0975 -60.4504 -205.961 + 19 71.7561 596 0 0 69.2536 -60.65 -206.087 + 19 16.8392 595 0 0 69.408 -60.8501 -206.216 + 19 121.094 703 1 0 7.80857 -39.2927 -175.85 + 19 15.8724 699 7 0 -14.627 -40.2214 4.15 +Number of digits in this event: 42 +Using G4ParticleGun... +Particle energy: 1.55523 LIN +Particle: e- +Event: 20 +Number of tracker hits in this event: 36 + 20 106.677 496 10 1 -80.7327 30.7048 95.55 + 20 102.109 1053 10 0 -80.7338 30.7025 94.15 + 20 183.231 496 9 1 -80.7334 30.6195 65.55 + 20 156.959 1052 9 0 -80.7352 30.6139 64.15 + 20 128.14 496 8 1 -80.7827 30.4951 35.55 + 20 130.594 1052 8 0 -80.7806 30.491 34.15 + 20 200.652 496 7 1 -80.7489 30.4184 5.55 + 20 113.198 1051 7 0 -80.7552 30.4139 4.15 + 20 99.4756 495 6 1 -80.891 30.3152 -24.45 + 20 125.013 1051 6 0 -80.8954 30.3077 -25.85 + 20 132.925 495 5 1 -80.9909 30.1523 -54.45 + 20 119.826 1050 5 0 -80.9943 30.1452 -55.85 + 20 109.896 494 4 1 -81.0758 29.9909 -84.45 + 20 151.062 1049 4 0 -81.0758 29.9788 -85.85 + 20 107.47 494 3 1 -81.0551 29.7383 -114.45 + 20 103.254 1048 3 0 -81.0452 29.728 -115.85 + 20 119.13 496 2 1 -80.8336 29.5064 -144.45 + 20 177.787 1047 2 0 -80.8177 29.4921 -145.85 + 20 133.156 497 1 1 -80.4703 29.2151 -174.45 + 20 139.41 1045 1 0 -80.4565 29.2141 -175.85 + 20 304.385 499 0 1 -80.1684 29.1868 -204.45 + 20 112.85 1045 0 0 -80.152 29.1933 -205.85 + 20 26.2611 1043 0 0 -80.252 28.6808 -205.85 + 20 294.978 1042 0 0 -80.2531 28.65 -205.929 + 20 128.055 493 1 1 -81.45 29.7174 -174.45 + 20 196.62 1049 1 0 -81.2248 29.957 -175.85 + 20 50.0235 526 0 1 -74.7511 35.4324 -204.45 + 20 92.4125 527 0 1 -74.65 35.4033 -204.544 + 20 72.8333 528 0 1 -74.45 35.3543 -204.714 + 20 98.4854 1075 0 0 -73.0877 35.0966 -205.85 + 20 156.195 1074 0 0 -72.8894 35.05 -206.028 + 20 112.004 492 1 1 -81.4832 29.706 -174.45 + 20 123.606 1048 1 0 -81.5996 29.6781 -175.85 + 20 20.741 481 0 1 -83.835 29.0165 -204.45 + 20 170.256 480 0 1 -83.85 29.0365 -204.506 + 20 209.347 1047 0 0 -84.2004 29.4746 -205.85 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 3.73174 LIN +Particle: e- +Event: 21 +Number of tracker hits in this event: 105 + 21 115.645 1200 10 1 60.053 62.3182 95.55 + 21 357.694 1211 10 0 60.0546 62.317 94.15 + 21 139.02 1200 9 1 60.1142 62.3021 65.55 + 21 215.988 1211 9 0 60.1175 62.3018 64.15 + 21 142.132 1200 8 1 60.1841 62.3055 35.55 + 21 93.3063 1211 8 0 60.1848 62.303 34.15 + 21 137.28 1200 7 1 60.1996 62.2451 5.55 + 21 253.101 1210 7 0 60.2018 62.2407 4.15 + 21 138.767 1201 6 1 60.2542 62.1648 -24.45 + 21 263.767 1210 6 0 60.2589 62.1608 -25.85 + 21 118.599 1201 5 1 60.3479 62.0809 -54.45 + 21 109.219 1210 5 0 60.3533 62.0746 -55.85 + 21 228.722 1202 4 1 60.4692 61.9557 -84.45 + 21 139.332 1209 4 0 60.476 61.9484 -85.85 + 21 111.449 1202 3 1 60.6214 61.7918 -114.45 + 21 122.861 1208 3 0 60.6264 61.7838 -115.85 + 21 138.885 1203 2 1 60.7326 61.6023 -144.45 + 21 105.773 1207 2 0 60.7361 61.5961 -145.85 + 21 128.397 1203 1 1 60.8038 61.4463 -174.45 + 21 332.636 1206 1 0 60.8077 61.4415 -175.85 + 21 159.977 1204 0 1 60.8885 61.3441 -204.45 + 21 334.997 1206 0 0 60.8922 61.3411 -205.85 + 21 144.185 1204 1 1 60.8503 61.4258 -174.496 + 21 56.3958 1205 1 1 61.05 61.3958 -174.707 + 21 314.569 1205 0 1 61.1001 61.1244 -204.45 + 21 385.576 1205 0 0 61.1127 61.1065 -205.85 + 21 487.044 1201 7 1 60.2514 62.2847 5.54872 + 21 40.6769 1209 6 1 61.9072 61.1996 -24.45 + 21 88.2736 1208 6 1 61.85 61.1143 -24.5776 + 21 178.169 1201 6 0 61.2871 60.332 -25.85 + 21 106.83 1200 6 0 61.2206 60.25 -26.0068 + 21 50.0113 1135 5 1 47.1452 48.2231 -54.45 + 21 111.999 1134 5 1 47.0498 48.1159 -54.5679 + 21 47.4913 1133 5 1 46.85 47.8277 -54.7578 + 21 11.667 1132 5 0 45.2728 46.4655 -55.85 + 21 99.7457 1131 5 0 45.2553 46.45 -55.8622 + 21 96.0394 1130 5 0 45.0386 46.2499 -56.0105 + 21 93.6917 1129 5 0 44.8509 46.0498 -56.1466 + 21 46.9041 917 5 0 -13.506 3.55115 -56.25 + 21 78.2326 918 5 0 -13.6223 3.65004 -56.1391 + 21 72.1302 919 5 0 -13.6983 3.85055 -55.9928 + 21 222.445 834 5 1 -13.2447 5.46733 -54.8498 + 21 16.2913 835 5 1 -13.05 6.10444 -54.4741 + 21 256.427 1211 7 0 60.2495 62.2829 4.15 + 21 149.454 1200 6 1 60.1169 62.1108 -24.45 + 21 185.485 1207 5 1 61.5451 62.8167 -54.45 + 21 137.112 1214 5 0 61.5799 62.8748 -55.8502 + 21 167.775 1212 4 1 62.5223 64.4347 -84.45 + 21 114.695 1222 4 0 62.3032 64.5834 -85.85 + 21 313.35 1195 3 1 59.1109 66.6677 -114.45 + 21 117.457 1234 3 0 59.0475 66.9013 -115.85 + 21 146.398 1188 2 1 57.7263 71.8715 -144.451 + 21 17.6602 1260 2 0 57.5079 72.2394 -145.85 + 21 106.938 1261 2 0 57.5019 72.25 -145.89 + 21 20.4521 1544 0 0 55.2775 128.95 -205.928 + 21 139.811 1173 0 1 54.8049 129.284 -204.85 + 21 94.0468 1174 0 1 54.85 129.385 -204.738 + 21 152.955 1198 6 1 59.8095 61.8932 -24.45 + 21 96.0204 1209 6 0 59.7521 61.877 -25.85 + 21 148.518 1192 5 1 58.5229 61.3356 -54.45 + 21 117.434 1206 5 0 58.5234 61.2956 -55.85 + 21 233.71 1193 4 1 58.7543 60.8253 -84.45 + 21 141.349 1203 4 0 58.8512 60.801 -85.85 + 21 113.415 1204 3 1 60.87 60.6219 -114.45 + 21 107.169 1202 3 0 60.9719 60.603 -115.85 + 21 65.4963 1215 2 1 63.2171 60.1332 -144.45 + 21 38.3134 1216 2 1 63.25 60.1321 -144.698 + 21 105.311 1200 2 0 63.4068 60.1149 -145.85 + 21 120.604 1236 1 1 67.2532 59.7144 -174.45 + 21 205.501 1198 1 0 67.5173 59.7474 -175.85 + 21 113.462 1265 0 1 73.0823 60.7057 -204.45 + 21 28.6645 1203 0 0 73.2897 60.8406 -205.85 + 21 121.835 1204 0 0 73.3054 60.85 -205.957 + 21 28.5288 1193 3 1 58.7924 -45.0123 -114.45 + 21 165.991 1194 3 1 58.85 -45.0091 -114.515 + 21 39.7747 1212 7 0 60.6654 62.6143 4.14946 + 21 84.5452 1213 7 0 60.7083 62.65 4.00924 + 21 101.797 1245 6 1 69.0924 69.8683 -24.4501 + 21 31.8363 1246 6 1 69.2501 69.9777 -24.7608 + 21 135.209 1251 6 0 69.7674 70.288 -25.85 + 21 126.063 1309 5 1 81.9379 76.4104 -54.45 + 21 1.51268 1310 5 1 82.05 76.2126 -54.8419 + 21 39.6147 1278 5 0 82.3201 75.6977 -55.85 + 21 114.351 1277 5 0 82.3439 75.6498 -55.9441 + 21 12.8643 331 3 0 -28.3199 -113.75 -116.148 + 21 262.838 1168 9 1 53.7473 61.118 65.55 + 21 165.124 1207 9 0 53.9787 61.4512 64.1495 + 21 23.1835 1381 9 0 63.0435 96.501 63.7505 + 21 99.4561 1382 9 0 63.0419 96.55 63.805 + 21 86.2992 1383 9 0 63.0427 96.7508 63.9897 + 21 340.298 1214 9 1 63.029 98.1436 65.15 + 21 162.873 1213 9 1 62.85 99.2176 65.3775 + 21 109.679 1212 9 1 62.65 99.619 65.269 + 21 35.3626 1211 9 1 62.45 99.8762 65.1823 + 21 40.6595 1409 9 0 60.553 102.027 64.15 + 21 78.5821 1410 9 0 60.4682 102.15 64.0716 + 21 76.6562 1411 9 0 60.2931 102.35 63.9829 + 21 44.1251 1412 9 0 60.1957 102.55 63.8582 + 21 85.9634 1513 9 0 35.275 122.878 63.75 + 21 98.4965 1512 9 0 35.2388 122.75 64.0242 + 21 265.331 1073 9 1 34.6859 121.858 65.15 + 21 189.832 1072 9 1 34.65 121.783 65.2427 + 21 67.96 1071 9 1 34.3799 121.466 65.55 + 21 138.468 1074 9 1 34.8503 121.393 65.368 + 21 399.729 1075 9 1 35.05 121.12 65.4286 +Number of digits in this event: 51 +Using G4ParticleGun... +Particle energy: 9.41687 LIN +Particle: e- +Event: 22 +Number of tracker hits in this event: 98 + 22 159.867 970 9 1 14.1359 -118.409 65.55 + 22 131.407 308 9 0 14.1359 -118.41 64.15 + 22 168.965 970 8 1 14.1337 -118.421 35.55 + 22 102.386 308 8 0 14.135 -118.422 34.15 + 22 133.37 970 7 1 14.1586 -118.455 5.55 + 22 128.995 308 7 0 14.1595 -118.458 4.15 + 22 101.471 970 6 1 14.1728 -118.5 -24.45 + 22 117.354 308 6 0 14.1747 -118.502 -25.85 + 22 398.534 970 5 1 14.2093 -118.539 -54.45 + 22 251.513 308 5 0 14.2095 -118.54 -55.85 + 22 122.919 970 4 1 14.2146 -118.574 -84.45 + 22 113.887 307 4 0 14.2153 -118.575 -85.85 + 22 110.594 970 3 1 14.2281 -118.594 -114.45 + 22 129.334 307 3 0 14.227 -118.593 -115.85 + 22 225.975 970 2 1 14.2063 -118.577 -144.45 + 22 172.254 307 2 0 14.2064 -118.577 -145.85 + 22 135.368 970 1 1 14.2041 -118.581 -174.45 + 22 139.634 307 1 0 14.2055 -118.581 -175.85 + 22 248.453 970 0 1 14.2327 -118.569 -204.45 + 22 105.469 307 0 0 14.2351 -118.569 -205.85 + 22 8.1146 1335 3 1 87.0926 -69.7837 -114.85 + 22 8.60943 1071 3 0 121.331 34.4312 -116.25 + 22 21.7934 1072 3 0 121.335 34.45 -116.245 + 22 210.448 1268 6 1 73.6889 -86.6318 -24.45 + 22 289.892 1267 6 1 73.65 -86.8879 -24.8247 + 22 183.369 969 8 1 14.05 -118.372 35.4982 + 22 22.7073 230 3 1 -133.95 -55.6153 -114.806 + 22 322.514 229 3 1 -134.15 -55.5427 -114.634 + 22 59.4043 309 5 0 14.1346 -118.182 -55.85 + 22 84.3126 310 5 0 14.1456 -118.15 -56.0192 + 22 90.8268 987 4 1 17.5742 -112.052 -84.45 + 22 147.628 339 4 0 17.2218 -112.217 -85.8501 + 22 97.1864 938 3 1 7.81101 -117.986 -114.45 + 22 45.843 937 3 1 7.65 -118.035 -114.694 + 22 122.249 309 3 0 6.7856 -118.266 -115.85 + 22 47.2291 826 2 1 -14.7693 -122.365 -144.451 + 22 96.1934 825 2 1 -14.85 -122.26 -144.579 + 22 114.871 292 2 0 -15.2077 -121.671 -145.85 + 22 39.1625 293 2 0 -15.2756 -121.55 -146.123 + 22 46.5758 783 1 1 -23.3261 -109.092 -174.45 + 22 62.9001 782 1 1 -23.45 -109.065 -174.527 + 22 89.3592 781 1 1 -23.65 -109.014 -174.649 + 22 19.5483 780 1 1 -23.85 -108.973 -174.806 + 22 163.502 357 1 0 -24.9857 -108.697 -175.85 + 22 6.1549 358 1 0 -25.4341 -108.55 -176.243 + 22 52.9039 612 0 1 -57.5082 -92.2663 -204.45 + 22 80.3731 613 0 1 -57.4499 -92.2065 -204.613 + 22 56.9794 441 0 0 -56.6076 -91.9371 -205.85 + 22 217.474 440 0 0 -56.4393 -91.95 -205.989 + 22 28.9558 971 4 1 14.4476 -119.174 -84.4502 + 22 97.2375 972 4 1 14.45 -119.175 -84.5865 + 22 106.34 304 4 0 14.4734 -119.178 -85.85 + 22 165.602 973 3 1 14.8353 -119.159 -114.45 + 22 7.25244 974 3 1 14.85 -119.16 -114.834 + 22 133.672 304 3 0 14.8873 -119.16 -115.85 + 22 77.747 979 2 1 16.0243 -118.867 -144.45 + 22 43.6487 980 2 1 16.05 -118.867 -144.707 + 22 276.444 306 2 0 16.172 -118.861 -145.85 + 22 329.009 995 1 1 19.1526 -118.803 -174.45 + 22 57.9267 996 1 1 19.25 -118.706 -174.716 + 22 147.314 309 1 0 19.6895 -118.311 -175.85 + 22 93.8421 1056 0 1 31.2654 -109.675 -204.45 + 22 104.831 1057 0 1 31.45 -109.442 -204.644 + 22 75.5724 361 0 0 32.6041 -107.866 -205.85 + 22 204.539 362 0 0 32.6934 -107.75 -205.938 + 22 86.977 363 0 0 32.842 -107.55 -206.093 + 22 1.0048 364 0 0 32.9763 -107.35 -206.247 + 22 85.9328 705 0 0 64.9087 -39.0156 -206.25 + 22 196.299 706 0 0 64.9694 -38.85 -206.185 + 22 222.238 707 0 0 65.0428 -38.65 -206.105 + 22 170.567 708 0 0 65.1247 -38.45 -206.028 + 22 204.84 709 0 0 65.2091 -38.2496 -205.95 + 22 147.726 710 0 0 65.2986 -38.05 -205.876 + 22 267.552 1232 0 1 66.4648 -35.4619 -204.85 + 22 280.259 1233 0 1 66.65 -34.9846 -204.646 + 22 113.991 1226 0 1 65.4441 -34.8017 -204.45 + 22 67.7215 1225 0 1 65.25 -35.054 -204.633 + 22 70.5131 1224 0 1 65.0499 -35.2114 -204.756 + 22 33.5953 1223 0 1 64.8495 -35.3324 -204.831 + 22 96.2775 715 0 0 61.7503 -36.8872 -205.85 + 22 131.139 714 0 0 61.4565 -37.05 -205.915 + 22 93.1016 713 0 0 61.1624 -37.2504 -205.959 + 22 107.874 712 0 0 60.9179 -37.45 -205.969 + 22 104.983 711 0 0 60.6641 -37.65 -205.986 + 22 24.5251 718 0 0 67.1604 -36.3781 -205.85 + 22 57.4296 1234 0 1 66.8897 -36.4276 -204.85 + 22 25.3226 634 0 0 47.5292 -53.1319 -206.25 + 22 1.01468 635 0 0 47.4976 -53.0499 -206.249 + 22 90.5048 898 0 0 56.797 -0.415235 -206.249 + 22 117.176 305 1 0 19.2182 -119.026 -175.85 + 22 95.3787 1001 0 1 20.4299 -122.394 -204.45 + 22 46.9869 1002 0 1 20.45 -122.338 -204.67 + 22 62.1838 290 0 0 20.5668 -122.012 -205.85 + 22 88.6239 291 0 0 20.5847 -121.95 -206.063 + 22 217.971 304 1 0 19.2324 -119.15 -175.882 + 22 163.126 1003 0 1 20.7856 -126.549 -204.45 + 22 117.54 265 0 0 20.6301 -127.007 -205.85 + 22 117.014 305 2 0 16.1169 -118.95 -146.057 +Number of digits in this event: 41 +Using G4ParticleGun... +Particle energy: 1.98199 LIN +Particle: e- +Event: 23 +Number of tracker hits in this event: 26 + 23 158.265 730 9 1 -34.0458 -113.381 65.55 + 23 113.671 333 9 0 -34.0413 -113.382 64.15 + 23 137.862 730 8 1 -33.9513 -113.381 35.55 + 23 110.697 333 8 0 -33.9487 -113.378 34.15 + 23 112.686 730 7 1 -33.9045 -113.329 5.55 + 23 131.422 334 7 0 -33.8998 -113.329 4.15 + 23 127.818 731 6 1 -33.813 -113.311 -24.45 + 23 130.387 334 6 0 -33.8049 -113.308 -25.85 + 23 141.759 732 5 1 -33.6447 -113.236 -54.45 + 23 127.169 334 5 0 -33.6381 -113.235 -55.85 + 23 145.578 732 4 1 -33.5136 -113.208 -84.45 + 23 119.062 334 4 0 -33.5108 -113.201 -85.85 + 23 109.706 732 3 1 -33.4641 -113.02 -114.45 + 23 376.397 335 3 0 -33.4496 -113.008 -115.85 + 23 164.156 734 2 1 -33.1605 -112.765 -144.45 + 23 135.848 337 2 0 -33.1418 -112.746 -145.85 + 23 140.736 736 1 1 -32.7575 -112.328 -174.45 + 23 115.515 339 1 0 -32.73 -112.307 -175.85 + 23 117.512 739 0 1 -32.1843 -111.943 -204.45 + 23 151.365 341 0 0 -32.158 -111.925 -205.85 + 23 99.7486 340 0 0 -32.1534 -111.95 -205.998 + 23 129.054 336 3 0 -33.4841 -112.95 -115.985 + 23 93.9253 441 3 0 -64.5924 -91.8919 -116.25 + 23 96.2751 442 3 0 -64.7943 -91.75 -116.003 + 23 17.7431 573 3 1 -65.4075 -91.2442 -114.85 + 23 86.9293 572 3 1 -65.45 -91.2124 -114.776 +Number of digits in this event: 16 +Using G4ParticleGun... +Particle energy: 3.67281 LIN +Particle: e- +Event: 24 +Number of tracker hits in this event: 41 + 24 117.291 1548 8 1 129.856 -43.9329 35.55 + 24 270.233 680 8 0 129.854 -43.9343 34.15 + 24 115.947 1548 7 1 129.816 -43.9602 5.55 + 24 111.289 680 7 0 129.816 -43.962 4.15 + 24 196.849 1548 6 1 129.81 -44.0002 -24.45 + 24 189.703 680 6 0 129.812 -44.0056 -25.85 + 24 140.458 1548 5 1 129.849 -44.1022 -54.45 + 24 267.3 679 5 0 129.869 -44.1082 -55.85 + 24 132.029 1550 4 1 130.314 -44.2592 -84.45 + 24 130.411 678 4 0 130.333 -44.2729 -85.85 + 24 189.456 1553 3 1 130.759 -44.4762 -114.45 + 24 103.063 677 3 0 130.783 -44.4756 -115.85 + 24 105.057 1555 2 1 131.263 -44.4721 -144.45 + 24 46.438 677 2 0 131.273 -44.4525 -145.85 + 24 85.232 678 2 0 131.275 -44.45 -146.037 + 24 206.159 1556 1 1 131.486 -44.0403 -174.45 + 24 132.121 680 1 0 131.499 -44.0426 -175.85 + 24 119.758 1557 0 1 131.728 -44.0526 -204.45 + 24 134.396 679 0 0 131.734 -44.0653 -205.85 + 24 153.144 678 3 0 130.54 -44.4393 -115.85 + 24 31.7665 1547 5 1 129.75 -44.0223 -54.736 + 24 80.337 678 5 0 129.759 -44.25 -56.0229 + 24 128.722 1545 4 1 129.202 -51.1897 -84.45 + 24 142.303 643 4 0 129.29 -51.3846 -85.85 + 24 165.638 1549 3 1 130.056 -51.492 -114.45 + 24 99.0952 640 3 0 130.379 -51.9586 -115.85 + 24 32.3817 639 3 0 130.44 -52.0501 -116.129 + 24 82.0058 1586 2 1 137.516 -61.0959 -144.45 + 24 30.8285 1587 2 1 137.55 -61.2211 -144.757 + 24 133.181 591 2 0 137.689 -61.6524 -145.85 + 24 34.0153 1601 1 1 140.481 -70.9836 -174.45 + 24 96.651 1602 1 1 140.55 -71.0865 -174.475 + 24 111.291 1603 1 1 140.75 -71.4182 -174.622 + 24 54.3914 1604 1 1 140.95 -71.6765 -174.763 + 24 28.8139 532 1 0 142.726 -73.5515 -175.85 + 24 67.8049 531 1 0 142.792 -73.65 -175.902 + 24 99.4908 530 1 0 142.907 -73.85 -176.007 + 24 68.0511 529 1 0 143.042 -74.05 -176.124 + 24 223.065 1706 0 1 161.495 -108.842 -204.45 + 24 102.107 1550 3 1 130.15 -51.5687 -114.657 + 24 3.21397 681 8 0 129.887 -43.8499 34.1458 +Number of digits in this event: 19 +Using G4ParticleGun... +Particle energy: 2.01909 LIN +Particle: e- +Event: 25 +Number of tracker hits in this event: 54 + 25 139.112 1484 9 1 117.135 -19.8861 65.55 + 25 114.066 800 9 0 117.133 -19.8822 64.15 + 25 133.474 1484 8 1 117.134 -19.8044 35.55 + 25 112.875 801 8 0 117.131 -19.7974 34.15 + 25 90.1862 1484 7 1 117.073 -19.66 5.55 + 25 133.548 801 7 0 117.072 -19.6537 4.15 + 25 120.639 1484 6 1 117.053 -19.5234 -24.45 + 25 116.017 802 6 0 117.049 -19.5149 -25.85 + 25 170.383 1484 5 1 116.954 -19.3656 -54.45 + 25 119.651 803 5 0 116.946 -19.3652 -55.85 + 25 419.057 1483 4 1 116.767 -19.3234 -84.45 + 25 179.014 803 4 0 116.752 -19.3258 -85.85 + 25 119.055 1481 3 1 116.444 -19.3966 -114.45 + 25 147.532 803 3 0 116.429 -19.4032 -115.85 + 25 256.696 1479 2 1 116.126 -19.551 -144.45 + 25 173.938 802 2 0 116.116 -19.5511 -145.85 + 25 160.125 1479 1 1 115.974 -19.5911 -174.45 + 25 110.274 802 1 0 115.968 -19.5992 -175.85 + 25 97.1052 1478 0 1 115.797 -19.8119 -204.45 + 25 145.662 801 0 0 115.773 -19.8389 -205.85 + 25 5.34139 585 0 0 84.5365 -62.85 -206.08 + 25 187.499 1484 4 1 117.034 -19.2659 -84.45 + 25 154.049 808 4 0 116.778 -18.4281 -85.85 + 25 9.4403 809 4 0 116.776 -18.25 -86.216 + 25 416.824 326 3 0 68.9701 -114.872 -116.25 + 25 47.2844 325 3 0 68.8103 -114.95 -116.135 + 25 242.302 1482 5 1 116.682 -19.4578 -54.4513 + 25 245.756 802 5 0 116.712 -19.4577 -55.85 + 25 86.1823 810 4 0 116.738 -17.861 -85.85 + 25 28.6106 811 4 0 116.693 -17.85 -86.12 + 25 97.0538 1462 3 1 112.664 -17.0291 -114.45 + 25 148.543 816 3 0 112.779 -16.8022 -115.85 + 25 100.583 837 2 0 116.152 -12.4774 -145.85 + 25 149.676 1482 1 1 116.75 -15.9863 -174.45 + 25 135.969 820 1 0 116.679 -15.9321 -175.85 + 25 16.2335 1476 0 1 115.524 -14.0972 -204.45 + 25 110.83 1477 0 1 115.55 -14.0896 -204.496 + 25 10.6869 830 0 0 116.365 -13.8581 -205.85 + 25 139.538 831 0 0 116.393 -13.85 -205.897 + 25 130.084 802 4 0 117.008 -19.4577 -85.85 + 25 29.1052 1494 3 1 119.144 -20.5068 -114.45 + 25 75.3888 1495 3 1 119.15 -20.5109 -114.538 + 25 110.603 797 3 0 119.234 -20.579 -115.85 + 25 134.294 1506 2 1 121.468 -21.8674 -144.45 + 25 107.358 790 2 0 121.556 -21.9472 -145.85 + 25 119.579 1518 1 1 123.806 -23.9208 -174.45 + 25 170.832 777 1 0 124.244 -24.471 -175.85 + 25 201.354 1567 0 1 133.583 -36.1009 -204.45 + 25 167.141 717 0 0 134.004 -36.5124 -205.85 + 25 149.709 719 10 0 93.6949 -36.0528 93.75 + 25 48.5 718 10 0 93.3747 -36.2501 94.0908 + 25 246.695 1364 10 1 92.9966 -37.9337 95.1502 + 25 143.585 1363 10 1 92.95 -38.1756 95.3099 + 25 206.082 1365 10 1 93.1502 -38.2757 95.2953 +Number of digits in this event: 32 +Using G4ParticleGun... +Particle energy: 3.95041 LIN +Particle: e- +Event: 26 +Number of tracker hits in this event: 111 + 26 119.362 847 11 1 -10.5331 17.1811 125.55 + 26 163.858 985 11 0 -10.5316 17.1826 124.15 + 26 149.622 847 10 1 -10.496 17.2165 95.55 + 26 123.22 985 10 0 -10.4898 17.2186 94.15 + 26 119.848 848 9 1 -10.3642 17.2738 65.55 + 26 116.006 986 9 0 -10.358 17.2768 64.15 + 26 118.851 849 8 1 -10.2258 17.3333 35.55 + 26 100.433 986 8 0 -10.2187 17.3353 34.15 + 26 105.703 849 7 1 -10.0674 17.3735 5.55 + 26 168.111 986 7 0 -10.0607 17.3766 4.15 + 26 351.976 850 6 1 -9.9183 17.4308 -24.45 + 26 129.785 986 6 0 -9.91117 17.4345 -25.85 + 26 255.586 851 5 1 -9.76412 17.4912 -54.45 + 26 370.62 987 5 0 -9.76113 17.501 -55.85 + 26 316.857 851 4 1 -9.69037 17.7066 -84.45 + 26 102.376 988 4 0 -9.68748 17.715 -85.85 + 26 421.358 851 3 1 -9.65914 17.892 -114.45 + 26 122.67 989 3 0 -9.65191 17.9047 -115.85 + 26 146.866 852 2 1 -9.49374 18.1674 -144.45 + 26 309.749 990 2 0 -9.47986 18.1754 -145.85 + 26 327.471 854 1 1 -9.22489 18.3575 -174.45 + 26 202.672 991 1 0 -9.21656 18.3763 -175.85 + 26 136.067 855 0 1 -9.03417 18.7594 -204.45 + 26 157.81 993 0 0 -9.03793 18.7699 -205.85 + 26 28.4758 858 1 1 -8.2686 17.9739 -174.85 + 26 38.7924 859 1 1 -8.25 17.9706 -174.839 + 26 153.625 1158 2 1 51.7254 -95.9059 -144.85 + 26 380.251 854 4 1 -9.12094 17.6233 -84.45 + 26 116.533 987 4 0 -9.14554 17.6131 -85.85 + 26 245.413 988 3 0 -9.73264 17.6663 -115.85 + 26 205.946 847 2 1 -10.5436 17.6534 -144.45 + 26 119.365 988 2 0 -10.5599 17.6716 -145.85 + 26 117.233 845 1 1 -11.0369 17.9911 -174.45 + 26 160.597 989 1 0 -10.9456 17.9829 -175.85 + 26 107.187 854 0 1 -9.07342 17.8398 -204.45 + 26 119.383 988 0 0 -8.95367 17.8208 -205.85 + 26 9.32285 666 1 0 -82.4058 -46.65 -176.217 + 26 71.4798 846 2 1 -10.65 17.8515 -144.622 + 26 87.627 989 2 0 -10.8479 18.0031 -145.85 + 26 100.924 986 4 0 -9.19951 17.34 -85.8504 + 26 102.214 856 3 1 -8.69232 17.673 -114.45 + 26 23.9441 856 2 1 -8.65236 18.7476 -144.45 + 26 86.2888 857 2 1 -8.64999 18.7516 -144.543 + 26 115.499 993 2 0 -8.6178 18.8025 -145.85 + 26 229.281 860 1 1 -7.88449 19.7684 -174.45 + 26 374.348 998 1 0 -7.87785 19.7938 -175.85 + 26 116.656 860 0 1 -8.04364 20.2403 -204.451 + 26 109.448 1001 0 0 -7.95673 20.2718 -205.85 + 26 15.3998 982 6 0 -10.2602 16.4861 -25.8501 + 26 115.903 981 6 0 -10.2749 16.45 -25.9029 + 26 8.39836 980 6 0 -10.4514 16.25 -26.2141 + 26 50.9542 651 6 0 -33.7018 -49.6785 -26.25 + 26 57.5641 650 6 0 -33.7403 -49.85 -26.1584 + 26 109.185 649 6 0 -33.8482 -50.05 -26.0594 + 26 1.78922 648 6 0 -33.9984 -50.25 -25.8566 + 26 157.63 727 6 1 -34.4998 -50.993 -24.85 + 26 92.9872 726 6 1 -34.65 -51.2088 -24.5878 + 26 160.722 725 6 1 -34.85 -51.5028 -24.5329 + 26 17.4304 638 6 0 -35.4588 -52.4241 -25.8501 + 26 88.3667 637 6 0 -35.4729 -52.45 -25.8846 + 26 81.4341 636 6 0 -35.5538 -52.65 -26.0221 + 26 128.742 635 6 0 -35.7227 -52.8501 -26.0995 + 26 42.4933 996 6 0 -9.26426 19.431 -25.8503 + 26 143.816 997 6 0 -9.26092 19.45 -25.8622 + 26 540.362 848 7 1 -10.4273 17.1348 5.55 + 26 41.0715 987 7 0 -10.4001 17.45 3.9155 + 26 99.1965 854 6 1 -9.13097 23.2938 -24.4504 + 26 8.72291 855 6 1 -9.04991 23.3571 -24.8089 + 26 103.767 1017 6 0 -8.80809 23.5774 -25.8502 + 26 20.787 1018 6 0 -8.72024 23.65 -26.1928 + 26 107.274 892 5 1 -1.59007 29.4956 -54.45 + 26 9.02662 891 5 1 -1.65 29.5534 -54.8097 + 26 122.104 1048 5 0 -1.82891 29.7763 -55.85 + 26 4.58502 1049 5 0 -1.89195 29.85 -56.236 + 26 40.4146 868 4 1 -6.27266 34.4896 -84.45 + 26 100.79 869 4 1 -6.25 34.5251 -84.5474 + 26 64.4218 1074 4 0 -5.88917 34.9795 -85.85 + 26 50.2284 1075 4 0 -5.82532 35.05 -86.0768 + 26 80.4153 915 3 1 3.1023 40.8682 -114.45 + 26 80.6888 916 3 1 3.25 40.9268 -114.597 + 26 32.6385 917 3 1 3.45007 40.9891 -114.781 + 26 147.662 1106 3 0 4.68095 41.3676 -115.85 + 26 150.289 1046 2 1 29.344 46.237 -144.45 + 26 41.5391 1134 2 0 29.5528 46.9769 -145.85 + 26 81.5504 1135 2 0 29.5652 47.05 -145.986 + 26 42.3329 1071 1 1 34.3598 62.5789 -174.45 + 26 122.007 1070 1 1 34.25 62.5118 -174.577 + 26 27.073 1069 1 1 34.0498 62.4058 -174.778 + 26 4.89913 1209 1 0 33.1308 61.8582 -175.85 + 26 116.824 1208 1 0 33.1177 61.85 -175.867 + 26 145.156 979 0 1 16.0183 60.8226 -204.45 + 26 522.216 978 0 1 15.85 60.4104 -204.624 + 26 6.33085 977 0 1 15.65 60.28 -204.84 + 26 101.056 1203 0 0 13.693 60.759 -205.85 + 26 149.591 1204 0 0 13.4656 60.85 -205.973 + 26 11.0282 1090 2 1 38.2056 75.9688 -144.85 + 26 100.194 985 7 0 -10.4298 17.112 4.15 + 26 126.325 848 6 1 -10.4237 16.9743 -24.45 + 26 200.715 984 6 0 -10.3721 16.9794 -25.85 + 26 129.687 853 5 1 -9.43485 17.0067 -54.45 + 26 113.794 984 5 0 -9.42828 17.0082 -55.85 + 26 359.725 985 4 0 -9.18637 17.1211 -85.85 + 26 97.1827 985 3 0 -9.88076 17.0681 -115.85 + 26 99.8313 845 2 1 -10.8866 18.0762 -144.45 + 26 327.779 835 1 1 -13.0175 20.1703 -174.45 + 26 249.521 834 1 1 -13.0501 20.4124 -174.501 + 26 146.876 833 1 1 -13.25 20.9605 -174.763 + 26 61.4672 1014 1 0 -13.8628 22.9283 -175.85 + 26 68.7611 1015 1 0 -13.9151 23.05 -175.935 + 26 111.711 1016 1 0 -14.0296 23.25 -176.065 + 26 91.8009 1017 1 0 -14.3213 23.45 -176.187 +Number of digits in this event: 45 +Using G4ParticleGun... +Particle energy: 9.11324 LIN +Particle: e- +Event: 27 +Number of tracker hits in this event: 38 + 27 128.707 276 9 1 -124.8 -49.1265 65.55 + 27 119.816 654 9 0 -124.8 -49.1269 64.15 + 27 128.771 276 8 1 -124.817 -49.1355 35.55 + 27 184.415 654 8 0 -124.815 -49.1338 34.15 + 27 121.747 276 7 1 -124.779 -49.1015 5.55 + 27 119.194 654 7 0 -124.776 -49.1 4.15 + 27 134.28 277 6 1 -124.711 -49.07 -24.45 + 27 148.671 654 6 0 -124.709 -49.0683 -25.85 + 27 126.67 277 5 1 -124.651 -49.0382 -54.45 + 27 110.206 655 5 0 -124.647 -49.035 -55.85 + 27 126.793 277 4 1 -124.558 -48.9686 -84.45 + 27 204.993 655 4 0 -124.554 -48.9642 -85.85 + 27 102.026 278 3 1 -124.475 -48.8733 -114.45 + 27 105.45 655 3 0 -124.471 -48.8676 -115.85 + 27 169.814 278 2 1 -124.379 -48.7554 -144.45 + 27 128.447 656 2 0 -124.378 -48.747 -145.85 + 27 431.142 278 1 1 -124.367 -48.5543 -174.45 + 27 119.249 657 1 0 -124.364 -48.545 -175.85 + 27 136.459 279 0 1 -124.296 -48.3332 -204.45 + 27 340.818 658 0 0 -124.292 -48.3199 -205.85 + 27 293.449 656 1 0 -124.553 -48.8427 -175.85 + 27 122.892 277 0 1 -124.72 -48.5792 -204.45 + 27 172.183 657 0 0 -124.701 -48.5722 -205.85 + 27 10.7472 669 1 1 -46.05 -62.0458 -174.702 + 27 121.349 278 0 1 -124.411 -48.7955 -204.45 + 27 116.426 656 0 0 -124.406 -48.7888 -205.85 + 27 49.1339 655 0 0 -121.231 -48.867 -205.85 + 27 4.31755 353 0 1 -109.521 -42.1826 -204.85 + 27 11.9429 693 0 0 -109.763 -41.2817 -205.85 + 27 285.336 694 0 0 -109.78 -41.25 -205.867 + 27 155.364 534 9 0 -160.849 -73.1685 63.75 + 27 228.484 533 9 0 -160.981 -73.25 63.8837 + 27 12.113 99 9 1 -160.191 -73.2118 65.15 + 27 83.3652 100 9 1 -160.15 -73.2007 65.192 + 27 50.5933 101 9 1 -159.95 -73.1477 65.4058 + 27 115.666 102 9 1 -159.73 -73.1375 65.55 + 27 59.116 103 9 1 -159.55 -73.2521 65.3396 + 27 49.0442 104 9 1 -159.35 -73.2299 65.2589 +Number of digits in this event: 23 +Using G4ParticleGun... +Particle energy: 4.33156 LIN +Particle: e- +Event: 28 +Number of tracker hits in this event: 161 + 28 126.166 852 11 1 -9.59697 -26.4889 125.55 + 28 148.102 767 11 0 -9.59832 -26.4877 124.15 + 28 226.463 852 10 1 -9.609 -26.4658 95.55 + 28 102.869 767 10 0 -9.60283 -26.4696 94.15 + 28 121.357 852 9 1 -9.49601 -26.5575 65.55 + 28 261.841 767 9 0 -9.49256 -26.5625 64.15 + 28 209.421 853 8 1 -9.42573 -26.6647 35.55 + 28 332.282 766 8 0 -9.42204 -26.671 34.15 + 28 274.625 853 7 1 -9.35475 -26.8087 5.55 + 28 347.251 766 7 0 -9.34934 -26.813 4.15 + 28 158.762 854 6 1 -9.2315 -26.8882 -24.45 + 28 126.607 765 6 0 -9.22722 -26.8937 -25.85 + 28 295.387 854 5 1 -9.13781 -27.0024 -54.45 + 28 107.065 765 5 0 -9.13141 -27.0081 -55.85 + 28 118.342 855 4 1 -9.02374 -27.1196 -84.45 + 28 132.706 764 4 0 -9.01467 -27.125 -85.85 + 28 112.021 856 3 1 -8.81735 -27.2297 -114.45 + 28 140.63 764 3 0 -8.81093 -27.2363 -115.85 + 28 94.78 856 2 1 -8.67147 -27.3702 -144.45 + 28 155.124 763 2 0 -8.66664 -27.3792 -145.85 + 28 142.207 857 1 1 -8.56896 -27.5443 -174.45 + 28 136.329 762 1 0 -8.56923 -27.5485 -175.85 + 28 328.188 857 0 1 -8.58521 -27.6271 -204.45 + 28 161.536 762 0 0 -8.58468 -27.6309 -205.85 + 28 315.16 1039 0 1 27.9473 8.54208 -204.45 + 28 120.963 792 0 1 -21.45 23.6357 -204.596 + 28 101.594 793 0 1 -21.4499 23.8902 -204.548 + 28 607.812 858 0 1 -8.44997 -27.7387 -204.542 + 28 123.462 859 0 1 -8.24998 -27.724 -204.736 + 28 195.245 760 0 0 -8.29235 -27.9469 -205.85 + 28 107.797 761 0 0 -8.30652 -27.85 -206.002 + 28 25.9152 753 0 0 -7.75268 -29.38 -205.85 + 28 103.523 752 0 0 -7.72997 -29.45 -205.889 + 28 75.3027 751 0 0 -7.73666 -29.65 -206.113 + 28 49.3578 750 0 0 -7.54025 -29.85 -206.066 + 28 67.9531 749 0 0 -7.48396 -30.05 -206.077 + 28 62.8208 748 0 0 -7.42202 -30.25 -206.069 + 28 66.0253 747 0 0 -7.48733 -30.4502 -206.092 + 28 68.111 746 0 0 -7.53049 -30.65 -206.175 + 28 4.62762 745 0 0 -7.57906 -30.85 -206.246 + 28 214.82 343 0 0 20.0438 -111.367 -206.25 + 28 75.4973 344 0 0 20.0537 -111.35 -206.228 + 28 163.364 847 4 0 -7.38715 -10.6398 -86.25 + 28 219.457 846 4 0 -7.40282 -10.65 -85.9768 + 28 298.023 852 7 1 -9.47049 -26.0686 5.54996 + 28 10.8973 851 7 1 -9.65004 -26.0312 5.1941 + 28 130.398 770 7 0 -10.1836 -25.923 4.15 + 28 45.622 779 6 1 -24.1544 -23.175 -24.45 + 28 90.3685 778 6 1 -24.25 -23.1864 -24.6055 + 28 125.231 784 6 0 -24.9929 -23.2191 -25.85 + 28 38.2706 682 5 1 -43.6221 -23.8882 -54.45 + 28 118.183 681 5 1 -43.65 -23.8951 -54.5004 + 28 314.633 779 5 0 -44.3354 -24.1046 -55.85 + 28 118.893 765 7 0 -9.46113 -26.9648 4.15 + 28 95.9557 855 6 1 -8.93007 -27.2171 -24.45 + 28 297.517 763 6 0 -8.9016 -27.2849 -25.85 + 28 134.92 858 5 1 -8.364 -28.6176 -54.45 + 28 162.975 756 5 0 -8.33529 -28.7458 -55.85 + 28 30.4443 861 4 1 -7.65388 -31.4157 -84.45 + 28 91.9 862 4 1 -7.65 -31.424 -84.552 + 28 123.838 742 4 0 -7.59998 -31.5372 -85.85 + 28 91.4583 868 3 1 -6.39883 -33.9838 -114.45 + 28 120.388 729 3 0 -6.37641 -34.1836 -115.85 + 28 118.256 871 2 1 -5.8164 -38.3398 -144.45 + 28 60.9387 707 2 0 -5.67295 -38.6064 -145.85 + 28 39.1494 706 2 0 -5.64663 -38.65 -146.08 + 28 143.32 888 1 1 -2.28203 -44.2871 -174.45 + 28 117.902 676 1 0 -2.17593 -44.65 -175.85 + 28 139.31 897 0 1 -0.473614 -53.8011 -204.451 + 28 29.5523 629 0 0 -0.639196 -54.2375 -205.85 + 28 127.2 628 0 0 -0.644051 -54.25 -205.89 + 28 70.6176 762 6 0 -8.76507 -27.45 -26.0359 + 28 75.5593 855 0 1 -8.87614 -27.5938 -204.45 + 28 25.5927 772 0 0 -9.13745 -25.5339 -205.85 + 28 131.223 773 0 0 -9.14425 -25.45 -205.902 + 28 35.0317 774 0 0 -9.11315 -25.2489 -205.955 + 28 321.037 860 0 1 -8.04421 -27.1776 -204.45 + 28 298.908 651 2 1 -49.65 111.021 -144.826 + 28 81.6809 764 0 0 -8.43492 -27.0648 -205.85 + 28 43.7864 765 0 0 -8.51786 -27.05 -206.12 + 28 1081.68 851 9 1 -9.67137 -26.4407 65.55 + 28 322.694 768 9 0 -9.67979 -26.4364 64.15 + 28 162.099 850 8 1 -9.86147 -26.3061 35.55 + 28 110.802 851 8 1 -9.85 -26.2956 35.4568 + 28 108.41 769 8 0 -9.76943 -26.1722 34.15 + 28 121.306 782 7 0 -9.22458 -23.6055 4.15 + 28 26.8072 879 6 1 -4.11767 -15.8478 -24.45 + 28 172.893 880 6 1 -4.05 -15.833 -24.5384 + 28 5.99804 881 6 1 -3.84993 -15.7922 -24.8317 + 28 203.556 822 6 0 -3.2008 -15.6095 -25.85 + 28 112.364 989 5 1 17.8713 -8.47892 -54.45 + 28 85.8078 856 5 0 17.7098 -8.79441 -55.8502 + 28 34.1002 855 5 0 17.7033 -8.85 -56.1518 + 28 136.56 986 4 1 17.388 -12.0508 -84.45 + 28 75.7623 842 4 0 17.3638 -11.6105 -85.8501 + 28 128.414 997 3 1 19.4754 -1.91711 -114.451 + 28 11.9513 998 3 1 19.6501 -1.75333 -114.8 + 28 140.521 894 3 0 20.3055 -1.2413 -115.85 + 28 124.819 1079 2 1 35.9677 10.4145 -144.45 + 28 35.4015 1080 2 1 36.05 10.1932 -144.75 + 28 51.5773 946 2 0 36.3894 9.38028 -145.85 + 28 71.261 945 2 0 36.444 9.25 -146.003 + 28 19.1008 944 2 0 36.5296 9.05 -146.206 + 28 70.7988 1158 1 1 51.7017 -27.0404 -174.45 + 28 79.4944 1159 1 1 51.85 -27.2001 -174.531 + 28 72.4769 1160 1 1 52.05 -27.4762 -174.511 + 28 55.1274 1161 1 1 52.25 -27.6089 -174.483 + 28 82.8322 1162 1 1 52.45 -27.6599 -174.518 + 28 85.903 1163 1 1 52.65 -27.787 -174.539 + 28 76.5549 1164 1 1 52.85 -27.9912 -174.651 + 28 92.4544 1165 1 1 53.0501 -28.0077 -174.716 + 28 71.0084 1166 1 1 53.2501 -28.041 -174.804 + 28 134.396 1167 1 1 53.45 -28.068 -174.768 + 28 73.1929 1168 1 1 53.65 -27.8816 -174.653 + 28 121.268 1169 1 1 53.85 -27.7989 -174.69 + 28 201.54 1170 1 1 54.0502 -27.6619 -174.701 + 28 1.51725 758 9 0 -10.4091 -28.4462 64.15 + 28 100.88 757 9 0 -10.4121 -28.4501 64.1459 + 28 110.405 756 9 0 -10.4677 -28.65 64.0245 + 28 98.8708 844 9 1 -11.1707 -28.6631 65.15 + 28 224.318 845 9 1 -11.0498 -28.552 65.3475 + 28 43.9955 850 9 1 -9.85049 -27.7311 65.5183 + 28 121.883 767 8 0 -9.8686 -26.4966 34.15 + 28 157.597 849 7 1 -10.2043 -26.7122 5.55 + 28 192.233 847 6 1 -10.5821 -26.6832 -24.45 + 28 139.911 766 6 0 -10.6086 -26.6648 -25.85 + 28 161.55 844 5 1 -11.1234 -26.2666 -54.45 + 28 108.768 768 5 0 -11.153 -26.2598 -55.85 + 28 120.833 841 4 1 -11.7384 -26.1205 -84.45 + 28 230.589 769 4 0 -11.7679 -26.1122 -85.85 + 28 121.16 838 3 1 -12.4096 -25.9183 -114.45 + 28 190.327 770 3 0 -12.4438 -25.9154 -115.85 + 28 121.645 835 2 1 -12.9958 -25.5752 -144.45 + 28 108.955 772 2 0 -13.0528 -25.5783 -145.85 + 28 101.764 829 1 1 -14.1466 -25.5507 -174.45 + 28 125.872 772 1 0 -14.0533 -25.6272 -175.85 + 28 5.65319 771 1 0 -14.0268 -25.65 -176.224 + 28 128.832 839 0 1 -12.0801 -27.506 -204.45 + 28 170.777 827 0 1 -14.5301 -25.6667 -204.451 + 28 133.905 771 0 0 -14.4208 -25.8055 -205.85 + 28 36.2066 770 0 0 -14.4321 -25.85 -206.116 + 28 110.461 828 0 1 -14.45 -25.5384 -204.58 + 28 13.1044 775 0 0 -13.9774 -24.8717 -205.85 + 28 135.556 776 0 0 -13.9622 -24.85 -205.891 + 28 200.708 834 1 1 -13.2161 -25.6863 -174.45 + 28 72.6074 835 1 1 -13.0499 -25.7219 -174.671 + 28 155.505 770 1 0 -12.7348 -26.0147 -175.85 + 28 91.756 769 1 0 -12.7139 -26.05 -175.962 + 28 36.3755 863 0 1 -7.28816 -30.4036 -204.45 + 28 180.154 864 0 1 -7.25 -30.4173 -204.467 + 28 89.873 865 0 1 -7.04954 -30.5051 -204.528 + 28 84.6339 866 0 1 -6.84948 -30.5985 -204.566 + 28 308.343 867 0 1 -6.65 -30.7139 -204.629 + 28 69.3977 868 0 1 -6.44972 -30.821 -204.703 + 28 127.271 869 0 1 -6.25 -30.909 -204.78 + 28 16.7671 870 0 1 -6.05 -31.0007 -204.836 + 28 2.17735 736 0 0 -2.80566 -32.8411 -205.85 + 28 241.908 735 0 0 -2.7898 -32.85 -205.855 + 28 101.324 734 0 0 -2.36252 -33.0501 -206.037 + 28 139.117 733 0 0 -6.32722 -33.2595 -205.85 + 28 55.3361 732 0 0 -6.10112 -33.45 -206.146 +Number of digits in this event: 79 +Using G4ParticleGun... +Particle energy: 1.67275 LIN +Particle: e- +Event: 29 +Number of tracker hits in this event: 73 + 29 112.267 1371 10 1 94.4593 7.48827 95.55 + 29 130.057 937 10 0 94.4592 7.48533 94.15 + 29 88.1845 1371 9 1 94.4649 7.43814 65.55 + 29 121.685 936 9 0 94.4599 7.43728 64.15 + 29 133.109 1371 8 1 94.3935 7.39775 35.55 + 29 132.037 936 8 0 94.3981 7.39454 34.15 + 29 129.389 1371 7 1 94.4724 7.34723 5.55 + 29 107.83 936 7 0 94.4735 7.34634 4.15 + 29 212.581 1371 6 1 94.4812 7.33627 -24.45 + 29 133.933 936 6 0 94.4829 7.34068 -25.85 + 29 104.382 1371 5 1 94.5212 7.40921 -54.45 + 29 312.996 936 5 0 94.5342 7.40732 -55.85 + 29 128.35 1373 4 1 94.7795 7.35049 -84.45 + 29 225.962 936 4 0 94.7943 7.35412 -85.85 + 29 274.317 1374 3 1 95.1147 7.45137 -114.45 + 29 111.095 937 3 0 95.1285 7.45432 -115.85 + 29 230.05 1376 2 1 95.4196 7.50527 -144.45 + 29 112.52 937 2 0 95.4356 7.50202 -145.85 + 29 132.837 1378 1 1 95.7862 7.44179 -174.45 + 29 102.172 936 1 0 95.8065 7.44127 -175.85 + 29 100.277 1380 0 1 96.2407 7.44437 -204.45 + 29 117.354 936 0 0 96.2657 7.44508 -205.85 + 29 4.25802 1361 3 1 92.5455 -180.15 -114.526 + 29 59.0298 1362 3 1 92.55 -180.144 -114.526 + 29 251.226 1377 1 1 95.75 7.4071 -174.591 + 29 192.424 1375 3 1 95.1501 7.49461 -114.617 + 29 10.5832 1372 6 1 94.5777 7.21369 -24.45 + 29 35.1036 934 6 0 94.5436 6.9017 -25.85 + 29 118.95 933 6 0 94.5295 6.84993 -25.996 + 29 2.74315 932 6 0 94.5245 6.65 -26.247 + 29 249.334 1372 5 1 94.734 7.2869 -54.45 + 29 120.802 1373 5 1 94.7506 7.29995 -54.4908 + 29 20.3594 1374 5 1 94.95 7.47086 -54.8057 + 29 63.7635 940 5 0 95.69 8.14213 -55.85 + 29 101.942 941 5 0 95.7908 8.25 -56.0264 + 29 351.915 1447 4 1 109.582 24.6266 -84.45 + 29 100.814 1021 4 0 109.785 24.4216 -85.85 + 29 206.325 1504 3 1 121.104 20.8735 -114.45 + 29 12.4569 1013 3 0 120.732 22.8109 -115.85 + 29 72.0148 1014 3 0 120.72 22.8512 -115.883 + 29 87.4664 1015 3 0 120.638 23.05 -116.028 + 29 94.2369 1185 3 0 95.147 57.1019 -116.25 + 29 60.7663 1186 3 0 95.0931 57.25 -116.082 + 29 20 1187 3 0 95.0415 57.45 -115.899 + 29 554.69 1372 3 1 94.6718 58.8745 -114.85 + 29 38.4682 1371 3 1 94.55 60.5421 -114.457 + 29 47.7137 1370 3 1 94.3499 60.7657 -114.497 + 29 81.275 1369 3 1 94.1497 60.8159 -114.606 + 29 75.6176 1368 3 1 93.95 60.8048 -114.737 + 29 453.66 1209 3 0 92.9952 61.8794 -115.85 + 29 68.9987 1357 3 1 91.6989 60.9846 -114.85 + 29 136.776 1356 3 1 91.5498 60.8587 -114.733 + 29 224.948 1355 3 1 91.35 61.0117 -114.578 + 29 62.4536 1367 3 1 93.75 60.761 -114.826 + 29 23.1122 1193 3 0 90.2187 58.7535 -115.85 + 29 90.6285 1346 3 1 89.4447 56.7561 -114.85 + 29 24.0519 1178 3 0 88.8521 55.818 -115.85 + 29 11.1968 1347 3 1 89.6411 54.9811 -114.85 + 29 121.176 1348 3 1 89.65 54.9741 -114.841 + 29 87.7082 1349 3 1 89.8501 54.8811 -114.538 + 29 221.143 1350 3 1 90.15 54.8684 -114.52 + 29 226.494 1545 1 0 74.6211 129.224 -176.25 + 29 24.5287 935 5 0 94.7724 7.25 -56.1875 + 29 111.648 1376 4 1 95.4277 6.68568 -84.4506 + 29 111.403 933 4 0 95.4166 6.68051 -85.8502 + 29 117.094 934 3 0 95.1975 6.86278 -115.85 + 29 118.128 941 2 0 95.4327 8.26124 -145.85 + 29 26.7876 940 2 0 95.438 8.25 -146.156 + 29 132.856 1379 1 1 96.0793 7.16863 -174.45 + 29 54.8499 935 1 0 96.0908 7.06147 -175.85 + 29 73.9767 934 1 0 96.0922 7.05 -176.019 + 29 124.221 1379 0 1 96.1044 5.2856 -204.45 + 29 185.262 925 0 0 96.0693 5.19935 -205.85 +Number of digits in this event: 31 +Using G4ParticleGun... +Particle energy: 4.05005 LIN +Particle: e- +Event: 30 +Number of tracker hits in this event: 58 + 30 154.411 1241 10 1 68.3152 -57.4825 95.55 + 30 143.495 612 10 0 68.3151 -57.4834 94.15 + 30 134.32 1241 9 1 68.3099 -57.5049 65.55 + 30 95.7482 612 9 0 68.3097 -57.5034 64.15 + 30 184.605 1241 8 1 68.3027 -57.4502 35.55 + 30 96.9964 613 8 0 68.3001 -57.4499 34.15 + 30 146.333 1241 7 1 68.2644 -57.4238 5.55 + 30 196.538 613 7 0 68.2677 -57.4232 4.15 + 30 157.441 1241 6 1 68.3353 -57.4342 -24.45 + 30 132.203 613 6 0 68.3286 -57.4264 -25.85 + 30 194.183 1240 5 1 68.2447 -57.1785 -54.45 + 30 144.936 614 5 0 68.2318 -57.1643 -55.85 + 30 119.602 1239 4 1 68.0048 -56.8975 -84.45 + 30 91.4639 615 4 0 68.042 -56.9037 -85.85 + 30 214.804 1242 3 1 68.6023 -56.5416 -114.45 + 30 135.253 617 3 0 68.6931 -56.4977 -115.85 + 30 74.6751 1251 2 1 70.4308 -55.8448 -144.45 + 30 46.4565 1252 2 1 70.45 -55.833 -144.66 + 30 160.34 621 2 0 70.5495 -55.7572 -145.85 + 30 189.278 1264 1 1 72.9042 -53.564 -174.45 + 30 96.2775 632 1 0 73.0223 -53.5641 -175.85 + 30 135.028 1274 0 1 74.9765 -54.2494 -204.45 + 30 121.744 628 0 0 75.0995 -54.4083 -205.85 + 30 16.9355 627 0 0 75.1313 -54.45 -206.202 + 30 84.5714 615 3 0 67.8093 -57.013 -115.85 + 30 78.7378 614 3 0 67.7612 -57.05 -116.055 + 30 264.747 613 3 0 67.7409 -57.25 -116.115 + 30 188.64 582 5 0 124.342 -63.5872 -56.25 + 30 12.4596 1526 5 1 125.524 -63.4313 -54.85 + 30 177.202 1527 5 1 125.55 -63.4318 -54.8114 + 30 64.9154 1528 5 1 125.75 -63.5575 -54.6524 + 30 81.7325 1529 5 1 125.95 -63.5461 -54.6439 + 30 381.442 1530 5 1 126.15 -63.4977 -54.6215 + 30 84.1573 1234 0 1 67.0239 -55.7331 -204.45 + 30 39.6461 1233 0 1 66.85 -55.6515 -204.737 + 30 4.80139 623 0 0 66.1783 -55.2564 -205.85 + 30 123.785 624 0 0 66.1665 -55.25 -205.869 + 30 199.691 669 0 0 38.5207 -46.1933 -206.25 + 30 14.8233 1078 0 1 35.7021 -45.8192 -204.85 + 30 59.537 1077 0 1 35.65 -45.8113 -204.829 + 30 105.494 1076 0 1 35.45 -45.7976 -204.724 + 30 21.0153 1075 0 1 35.25 -45.6518 -204.474 + 30 237.007 1239 0 1 67.927 -57.2833 -204.45 + 30 327.935 613 0 0 68.2466 -57.4192 -205.85 + 30 56.5012 1019 9 1 23.9088 41.8161 65.15 + 30 245.316 1240 8 1 68.25 -57.4524 35.3745 + 30 226.392 1240 1 1 68.1446 -57.9646 -174.45 + 30 228.16 610 1 0 68.1324 -57.9674 -175.85 + 30 105.975 1238 0 1 67.8381 -58.0054 -204.45 + 30 332.868 610 0 0 67.8231 -58.0017 -205.85 + 30 100.037 1240 0 1 68.1166 -58.0424 -204.45 + 30 2.55456 251 0 0 3.46371 -129.75 -206.098 + 30 8.38719 911 0 1 2.27063 -130.607 -204.85 + 30 101.42 910 0 1 2.25 -130.622 -204.828 + 30 174.367 248 0 0 1.19754 -130.392 -205.85 + 30 109.251 249 0 0 0.859104 -130.35 -205.977 + 30 227.893 250 0 0 0.726498 -130.15 -205.979 + 30 205.767 655 0 0 37.0846 -48.8744 -206.25 +Number of digits in this event: 32 +Using G4ParticleGun... +Particle energy: 5.93957 LIN +Particle: e- +Event: 31 +Number of tracker hits in this event: 120 + 31 92.3452 1163 11 1 52.7649 1.26095 125.55 + 31 113.091 906 11 0 52.7635 1.25987 124.15 + 31 113.247 1163 10 1 52.739 1.23843 95.55 + 31 373.088 905 10 0 52.7366 1.23634 94.15 + 31 244.462 1163 9 1 52.6875 1.1928 65.55 + 31 250.745 905 9 0 52.6853 1.19306 64.15 + 31 111.222 1162 8 1 52.6399 1.19702 35.55 + 31 169.768 905 8 0 52.6368 1.19686 34.15 + 31 249.115 1162 7 1 52.5818 1.19353 5.55 + 31 133.167 905 7 0 52.5801 1.19415 4.15 + 31 134.315 1162 6 1 52.5483 1.20123 -24.45 + 31 118.408 905 6 0 52.5479 1.20206 -25.85 + 31 367.901 1162 5 1 52.5396 1.22259 -54.45 + 31 124.845 905 5 0 52.5388 1.22366 -55.85 + 31 144.419 1162 4 1 52.5259 1.24319 -84.45 + 31 142.741 905 4 0 52.5249 1.2435 -85.85 + 31 127.841 1162 3 1 52.507 1.25018 -114.45 + 31 117.009 906 3 0 52.5073 1.25034 -115.85 + 31 150.378 1162 2 1 52.5152 1.26048 -144.45 + 31 133.298 906 2 0 52.5166 1.25981 -145.85 + 31 114.877 1162 1 1 52.5477 1.2538 -174.45 + 31 111.932 906 1 0 52.5494 1.25244 -175.85 + 31 118.979 1162 0 1 52.5825 1.22577 -204.45 + 31 244.926 905 0 0 52.5861 1.2211 -205.85 + 31 121.828 690 0 0 110.996 -41.85 -206.145 + 31 88.3669 1161 5 1 52.45 1.3611 -54.7401 + 31 140.704 1164 8 1 52.933 1.61797 35.55 + 31 48.4822 906 8 0 52.8874 1.30254 34.15 + 31 244.811 1153 7 1 50.8374 -6.02951 5.54999 + 31 148.827 1152 7 1 50.65 -6.65497 5.50393 + 31 182.579 1151 7 1 50.45 -7.15073 5.44969 + 31 172.405 1150 7 1 50.25 -7.64178 5.37416 + 31 243.07 1149 7 1 50.05 -8.02807 5.28921 + 31 40.5811 1148 7 1 49.85 -8.40948 5.19192 + 31 7.16004 842 7 0 47.8796 -11.6144 4.15 + 31 138.109 841 7 0 47.8576 -11.6502 4.13861 + 31 68.0042 840 7 0 47.7289 -11.85 4.07442 + 31 167.336 839 7 0 47.5876 -12.05 4.01566 + 31 64.543 838 7 0 47.4313 -12.2504 3.95891 + 31 82.0627 837 7 0 47.2805 -12.45 3.90596 + 31 80.9172 836 7 0 47.1032 -12.6501 3.83351 + 31 22.2049 835 7 0 46.9284 -12.85 3.76264 + 31 4.33494 756 6 1 -28.8239 -109.373 -24.45 + 31 49.4271 755 6 1 -28.8501 -109.366 -24.4588 + 31 86.0703 754 6 1 -29.05 -109.325 -24.5188 + 31 54.3286 753 6 1 -29.25 -109.303 -24.5907 + 31 103.197 752 6 1 -29.4504 -109.293 -24.6412 + 31 77.9113 751 6 1 -29.65 -109.289 -24.6766 + 31 60.4972 750 6 1 -29.8503 -109.289 -24.7143 + 31 159.476 749 6 1 -30.05 -109.296 -24.7521 + 31 184.565 748 6 1 -30.25 -109.308 -24.782 + 31 43.8331 747 6 1 -30.4508 -109.322 -24.8208 + 31 246.103 351 6 0 -34.2207 -109.821 -25.85 + 31 205.624 350 6 0 -35.0424 -109.95 -26.0357 + 31 78.4304 349 6 0 -35.4835 -110.15 -26.1214 + 31 95.5491 348 6 0 -35.803 -110.35 -26.1687 + 31 84.4621 308 5 1 -118.438 -170.165 -54.45 + 31 99.6153 307 5 1 -118.55 -170.43 -54.6501 + 31 51.1731 43 5 0 -119.533 -171.457 -55.8502 + 31 203.793 42 5 0 -119.631 -171.55 -55.9569 + 31 27.1814 41 5 0 -119.83 -171.75 -56.1962 + 31 82.403 361 6 0 -30.5559 -107.872 -25.8501 + 31 60.3835 356 6 0 -29.6476 -108.878 -25.85 + 31 153.046 1160 0 1 52.1129 0.768444 -204.45 + 31 147.197 1159 0 1 52.05 0.780876 -204.545 + 31 8.29907 1158 0 1 51.85 0.824514 -204.823 + 31 235.381 938 0 0 11.3688 7.77784 -206.25 + 31 11.2349 951 0 1 10.2755 7.01486 -204.85 + 31 121.806 950 0 1 10.2496 6.99215 -204.811 + 31 4.06696 949 0 1 10.05 6.84923 -204.463 + 31 131.312 939 0 0 11.1069 7.85 -206.095 + 31 64.4794 947 0 1 9.59632 7.68673 -204.85 + 31 75.6839 946 0 1 9.45 7.58067 -204.724 + 31 77.7805 945 0 1 9.24994 7.49042 -204.559 + 31 87.0717 944 0 1 9.05 7.40234 -204.536 + 31 77.3574 943 0 1 8.85 7.44475 -204.706 + 31 31.4334 946 0 0 9.08127 9.3817 -205.85 + 31 493.284 947 0 0 9.1112 9.45 -205.887 + 31 14.5035 937 0 0 7.91123 7.49197 -205.85 + 31 128.541 902 0 0 52.0882 0.598781 -205.85 + 31 86.7861 901 0 0 52.2265 0.45 -206.161 + 31 118.424 736 0 0 113.19 -32.7469 -206.25 + 31 59.1788 737 0 0 113.057 -32.65 -205.973 + 31 106.737 1464 0 1 113.117 -31.6988 -204.85 + 31 112.615 748 0 0 112.227 -30.3807 -205.85 + 31 80.5188 1150 9 1 50.1537 -1.47495 65.55 + 31 133.352 1151 9 1 50.25 -1.52149 65.3095 + 31 134.444 892 9 0 50.6914 -1.56769 64.1497 + 31 76.3884 1219 8 1 63.899 -3.59098 35.5498 + 31 74.3204 1220 8 1 64.05 -3.75336 35.3888 + 31 81.803 1221 8 1 64.2506 -3.89857 35.2532 + 31 109.255 876 8 0 65.4547 -4.68589 34.15 + 31 29.4854 875 8 0 65.7174 -4.85 33.853 + 31 16.7696 1315 7 1 83.0765 -23.0594 5.55 + 31 104.306 1314 7 1 83.05 -23.0893 5.51461 + 31 27.4063 1313 7 1 82.85 -23.3095 5.22588 + 31 42.7068 779 7 0 82.0319 -24.1525 4.15 + 31 125.576 778 7 0 81.926 -24.25 4.01963 + 31 245.039 1188 6 1 57.8062 -33.9226 -24.45 + 31 256.136 1189 6 1 57.85 -33.8696 -24.4888 + 31 60.5127 1190 6 1 58.05 -33.5719 -24.7328 + 31 50.5918 740 6 0 58.6962 -31.9851 -25.85 + 31 60.1861 741 6 0 58.7426 -31.85 -25.9495 + 31 98.9046 742 6 0 58.8086 -31.65 -26.0055 + 31 97.9044 743 6 0 58.9313 -31.45 -25.9684 + 31 72.7088 744 6 0 59.1505 -31.25 -26.0016 + 31 53.0049 745 6 0 59.2357 -31.05 -26.0513 + 31 60.3784 746 6 0 59.2632 -30.8499 -26.1201 + 31 117.217 747 6 0 59.276 -30.6496 -26.1619 + 31 125.603 748 6 0 59.0993 -30.45 -26.1347 + 31 94.9737 1187 6 1 57.6499 -30.3676 -24.6532 + 31 11.3707 1186 6 1 57.4499 -30.4086 -24.4738 + 31 40.6614 906 10 0 52.7523 1.25 93.9035 + 31 142.647 1180 9 1 56.0605 1.60474 65.5498 + 31 42.426 1181 9 1 56.25 1.62524 65.2108 + 31 15.9324 914 9 0 56.9548 3.00306 64.15 + 31 75.7116 915 9 0 56.9862 3.05 64.0842 + 31 108.26 916 9 0 57.1554 3.25 63.9588 + 31 48.4974 917 9 0 57.2133 3.45 63.8352 + 31 8.3898 1175 9 1 55.119 1.47827 65.55 +Number of digits in this event: 47 +Using G4ParticleGun... +Particle energy: 2.80419 LIN +Particle: e- +Event: 32 +Number of tracker hits in this event: 66 + 32 113.673 529 9 1 -74.1584 96.744 65.55 + 32 108.481 1382 9 0 -74.1584 96.7404 64.15 + 32 118.386 529 8 1 -74.1568 96.6695 35.55 + 32 92.0578 1382 8 0 -74.1567 96.6681 34.15 + 32 152.966 529 7 1 -74.1544 96.6361 5.55 + 32 129.173 1382 7 0 -74.1566 96.6341 4.15 + 32 329.193 529 6 1 -74.1968 96.5768 -24.45 + 32 173.793 1382 6 0 -74.1955 96.5756 -25.85 + 32 438.772 529 5 1 -74.1683 96.5488 -54.45 + 32 262.208 1381 5 0 -74.1694 96.546 -55.85 + 32 240.817 529 4 1 -74.207 96.4976 -84.45 + 32 112.684 1381 4 0 -74.2091 96.4961 -85.85 + 32 112.738 528 3 1 -74.2596 96.4637 -114.45 + 32 121.487 1381 3 0 -74.2624 96.4627 -115.85 + 32 542.233 528 2 1 -74.3091 96.4384 -144.45 + 32 279.865 1381 2 0 -74.3108 96.4379 -145.85 + 32 211.108 528 1 1 -74.3249 96.4189 -174.45 + 32 130.55 1381 1 0 -74.3248 96.4203 -175.85 + 32 334.974 528 0 1 -74.3274 96.4522 -204.45 + 32 428.341 1381 0 0 -74.3264 96.4552 -205.85 + 32 3.33026 868 4 1 -6.3639 112.258 -84.45 + 32 142.749 547 1 1 -70.5997 94.421 -174.45 + 32 171.509 1370 1 0 -70.6281 94.3452 -175.85 + 32 120.976 548 0 1 -70.3329 92.1734 -204.45 + 32 123.899 1360 0 0 -70.0819 92.1626 -205.85 + 32 235.99 1382 2 0 -74.4486 96.5825 -145.85 + 32 112.239 523 1 1 -75.4133 99.2404 -174.45 + 32 143.947 1395 1 0 -75.3706 99.3088 -175.85 + 32 0.992154 511 0 1 -77.846 102.943 -204.45 + 32 122.906 510 0 1 -77.8501 102.947 -204.456 + 32 20.3523 509 0 1 -78.0501 103.207 -204.798 + 32 32.7977 1420 0 0 -78.4263 104.245 -205.85 + 32 80.7931 1421 0 0 -78.4631 104.35 -205.957 + 32 85.5296 1422 0 0 -78.5436 104.55 -206.183 + 32 116.278 309 0 1 -118.15 79.7715 -204.807 + 32 7.22687 529 2 1 -74.25 96.5355 -144.831 + 32 153.066 1384 2 0 -73.5315 97.0061 -145.85 + 32 47.0919 1698 2 0 -35.8326 159.807 -146.25 + 32 67.2864 1699 2 0 -35.7916 159.95 -146.22 + 32 1.07154 1700 2 0 -35.7408 160.15 -146.249 + 32 124.145 1381 6 0 -74.2007 96.5499 -26.0771 + 32 63.102 1376 6 0 -74.0003 95.4492 -25.85 + 32 66.4132 1375 6 0 -73.9523 95.35 -26.088 + 32 112.227 1379 4 0 -74.0433 96.0064 -85.85 + 32 2.73916 1453 4 0 -81.4452 110.944 -86.25 + 32 99.9689 1454 4 0 -81.4485 110.95 -86.2396 + 32 109.949 1455 4 0 -81.532 111.15 -85.9798 + 32 3.80771 1456 4 0 -81.3537 111.35 -85.8543 + 32 52.5308 506 4 1 -78.7996 113.163 -84.85 + 32 143.249 507 4 1 -78.65 113.227 -84.8237 + 32 58.2397 508 4 1 -78.45 112.894 -84.7372 + 32 107.709 509 4 1 -78.25 112.845 -84.6597 + 32 28.5879 853 6 0 -103.056 -9.25 -26.0611 + 32 165.038 854 6 0 -103.05 -9.25 -25.9969 + 32 110.081 533 3 1 -73.3729 94.3717 -114.45 + 32 126.304 1370 3 0 -73.2874 94.2962 -115.85 + 32 136.609 542 2 1 -71.5368 93.056 -144.45 + 32 136.815 1363 2 0 -71.4107 92.9113 -145.85 + 32 101.336 555 1 1 -68.8905 89.7455 -174.45 + 32 26.9345 1347 1 0 -68.8518 89.4761 -175.85 + 32 94.1518 1346 1 0 -68.8476 89.4499 -175.984 + 32 126.342 561 0 1 -67.792 83.7839 -204.45 + 32 127.343 1316 0 0 -67.7355 83.3749 -205.85 + 32 30.6218 1301 0 0 -63.1592 80.3619 -206.25 + 32 54.666 1382 5 0 -74.1163 96.7227 -55.85 + 32 68.3901 1383 5 0 -74.1089 96.75 -56.0593 +Number of digits in this event: 33 +Using G4ParticleGun... +Particle energy: 6.1199 LIN +Particle: e- +Event: 33 +Number of tracker hits in this event: 161 + 33 124.601 1370 10 1 94.2466 6.37481 95.55 + 33 103.624 931 10 0 94.2454 6.37513 94.15 + 33 390.206 1370 9 1 94.2226 6.38994 65.55 + 33 424.026 931 9 0 94.2207 6.39172 64.15 + 33 238.847 1370 8 1 94.1836 6.42592 35.55 + 33 247.366 931 8 0 94.1802 6.42638 34.15 + 33 392.834 1369 7 1 94.1107 6.44766 5.55 + 33 190.691 931 7 0 94.1105 6.44955 4.15 + 33 315.917 932 7 0 94.1105 6.45 3.82327 + 33 106.762 1369 6 1 94.0966 6.49596 -24.45 + 33 208.814 932 6 0 94.0918 6.49768 -25.85 + 33 110.911 1369 5 1 93.9737 6.53206 -54.45 + 33 294.604 932 5 0 93.9671 6.53172 -55.85 + 33 258.864 1368 4 1 93.8247 6.52938 -84.45 + 33 179.124 932 4 0 93.8168 6.53284 -85.85 + 33 267.5 1367 3 1 93.6694 6.5933 -114.45 + 33 129.356 932 3 0 93.6592 6.59811 -115.85 + 33 107.805 1366 2 1 93.4596 6.68665 -144.45 + 33 134.419 933 2 0 93.4492 6.69181 -145.85 + 33 161.165 1365 1 1 93.2396 6.78933 -174.45 + 33 176.122 933 1 0 93.2289 6.79853 -175.85 + 33 380.522 1364 0 1 92.9561 6.99698 -204.45 + 33 121.694 934 0 0 92.9458 7.0227 -205.85 + 33 144.657 1069 1 0 101.958 33.8882 -176.25 + 33 102.511 999 1 1 19.9825 27.8627 -174.45 + 33 168.377 1000 1 1 20.05 27.8186 -174.542 + 33 0.682523 175 4 0 10.9859 -145.033 -86.25 + 33 226.178 1367 1 1 93.605 6.3066 -174.45 + 33 235.616 931 1 0 93.572 6.30951 -175.85 + 33 127.077 931 0 0 92.9893 6.25717 -205.85 + 33 129.548 1366 0 1 93.5131 6.01946 -204.45 + 33 157.034 929 0 0 93.5076 6.022 -205.85 + 33 85.1223 1556 9 1 131.389 -56.5052 65.15 + 33 44.1578 173 2 0 128.439 -145.35 -146.082 + 33 141.247 932 8 0 94.1854 6.49232 34.15 + 33 226.731 1368 7 1 93.9159 6.60405 5.55 + 33 167.805 1367 6 1 93.7127 7.09488 -24.45 + 33 138.941 935 6 0 93.6976 7.11235 -25.85 + 33 111.223 1366 5 1 93.414 7.46718 -54.45 + 33 134.9 937 5 0 93.4128 7.49848 -55.85 + 33 126.406 1366 4 1 93.3541 8.09998 -84.45 + 33 206.646 940 4 0 93.3427 8.16851 -85.85 + 33 197.393 1365 3 1 93.1578 9.62125 -114.45 + 33 189.612 1364 3 1 93.15 9.65185 -114.826 + 33 115.216 948 3 0 93.1298 9.7374 -115.85 + 33 2.98515 1362 2 1 92.5506 12.119 -144.45 + 33 123.942 1361 2 1 92.55 12.1202 -144.465 + 33 78.0304 960 2 0 92.4973 12.2289 -145.85 + 33 34.4082 961 2 0 92.4861 12.25 -146.13 + 33 171.709 1354 1 1 91.0533 14.3985 -174.45 + 33 154.33 971 1 0 91.043 14.4342 -175.85 + 33 298.012 1355 0 1 91.1933 15.2701 -204.45 + 33 116.573 976 0 0 91.1448 15.2956 -205.85 + 33 69.2579 874 1 0 75.5518 -5.13863 -176.25 + 33 120.84 873 1 0 75.4098 -5.25 -176.04 + 33 84.5615 1268 1 1 73.8381 -6.23659 -174.85 + 33 117.501 1267 1 1 73.65 -6.36187 -174.716 + 33 208.909 1266 1 1 73.45 -6.48287 -174.595 + 33 145.147 1265 1 1 73.25 -6.70993 -174.456 + 33 296.106 1264 1 1 73.0498 -6.81448 -174.554 + 33 42.5351 1263 1 1 72.85 -6.85588 -174.713 + 33 186.689 863 1 0 71.9252 -7.34354 -175.85 + 33 238.548 735 1 0 29.5456 -32.885 -176.25 + 33 110.724 734 1 0 29.3577 -33.05 -176.067 + 33 170.537 733 1 0 29.2606 -33.25 -175.899 + 33 30.998 1041 1 1 28.4351 -32.6652 -174.85 + 33 4.45632 736 1 0 27.5148 -32.7066 -175.85 + 33 15.1685 1027 1 1 25.6015 -33.4614 -174.85 + 33 217.794 980 0 0 91.7628 16.0803 -205.85 + 33 145.022 981 0 0 91.8959 16.25 -206.177 + 33 207.509 1470 2 1 114.15 13.8146 -144.528 + 33 132.841 1363 3 1 92.95 8.88146 -114.694 + 33 51.5703 944 3 0 92.0241 8.88738 -115.851 + 33 110.289 943 3 0 91.8915 8.85 -115.989 + 33 68.0141 942 3 0 91.6793 8.64978 -115.974 + 33 7.77332 941 3 0 91.685 8.44987 -115.863 + 33 98.0249 928 14 1 5.8267 64.6908 215.15 + 33 54.8407 927 14 1 5.65 64.852 215.377 + 33 520.86 926 14 1 5.45 64.8699 215.426 + 33 184.609 1370 7 1 94.15 6.51214 5.40973 + 33 27.8941 1396 6 1 99.5438 4.80539 -24.45 + 33 75.1721 1397 6 1 99.55 4.80281 -24.5603 + 33 122.816 923 6 0 99.7024 4.77049 -25.8508 + 33 112.565 1413 5 1 102.879 3.78389 -54.45 + 33 123.326 918 5 0 102.998 3.723 -55.85 + 33 187.975 1427 4 1 105.632 2.48214 -84.45 + 33 213.427 913 4 0 105.807 2.65418 -85.85 + 33 94.468 1440 3 1 108.249 6.1091 -114.45 + 33 233.936 930 3 0 108.43 6.24039 -115.85 + 33 97.1834 931 3 0 108.443 6.25001 -115.949 + 33 102.759 1459 2 1 112.107 9.11083 -144.45 + 33 12.9944 1460 2 1 112.15 9.19973 -144.815 + 33 221.679 947 2 0 112.262 9.45611 -145.85 + 33 124.394 1482 1 1 116.61 17.1579 -174.45 + 33 153.257 987 1 0 116.916 17.5659 -175.85 + 33 28.4996 988 1 0 116.993 17.65 -176.163 + 33 165.925 1521 0 1 124.398 25.0504 -204.45 + 33 139.42 1025 0 0 124.861 25.2088 -205.85 + 33 101.129 1026 0 0 124.935 25.2501 -206.121 + 33 42.4549 934 7 0 94.575 7.01828 4.14981 + 33 89.0279 935 7 0 94.6209 7.05 4.00558 + 33 87.0244 1425 6 1 105.216 11.5345 -24.45 + 33 73.6291 1426 6 1 105.35 11.6541 -24.6118 + 33 26.2737 1427 6 1 105.55 11.7851 -24.7736 + 33 30.5059 963 6 0 106.746 12.7985 -25.8502 + 33 86.331 964 6 0 106.804 12.8503 -25.9009 + 33 99.7663 965 6 0 106.981 13.05 -26.0636 + 33 392.213 1302 6 0 115.692 80.4811 -26.25 + 33 47.5801 1470 6 1 114.282 81.1403 -24.8499 + 33 53.2629 1469 6 1 114.15 81.1982 -24.7653 + 33 35.6024 1307 6 0 112.374 81.6224 -25.8501 + 33 131.265 1308 6 0 112.279 81.6501 -25.9135 + 33 140.015 1309 6 0 111.968 81.85 -26.0294 + 33 160.155 1239 6 0 -76.1491 67.9983 -26.25 + 33 24.0641 1238 6 0 -76.5434 67.8499 -25.8969 + 33 596.666 517 6 1 -76.6134 66.3253 -24.85 + 33 59.118 518 6 1 -76.45 65.5962 -24.4772 + 33 110.294 1369 8 1 94.1332 6.43529 35.55 + 33 121.999 1368 6 1 93.907 6.57556 -24.45 + 33 116.76 1368 5 1 93.7823 6.5615 -54.45 + 33 243.762 931 4 0 93.8834 6.45 -85.8757 + 33 160.485 1365 2 1 93.3192 6.15906 -144.45 + 33 112.88 930 2 0 93.306 6.1407 -145.85 + 33 120.268 1364 1 1 93.0421 5.76311 -174.45 + 33 100.049 928 1 0 93.0379 5.73912 -175.85 + 33 110.867 925 0 0 92.9646 5.12631 -205.85 + 33 46.3266 1504 1 1 121.1 14.9106 -174.45 + 33 77.3433 1384 6 1 97.0227 5.2928 -24.45 + 33 8.25092 1415 6 1 103.15 11.5994 -24.5012 + 33 234.322 1417 6 1 103.65 11.9862 -24.45 + 33 155.257 925 6 0 97.1418 5.19224 -25.85 + 33 94.1273 1401 5 1 100.495 2.91448 -54.4501 + 33 105.664 914 5 0 100.506 3.00412 -55.8502 + 33 78.3691 1402 4 1 100.683 5.74956 -84.4502 + 33 66.418 1403 4 1 100.75 5.84772 -84.6787 + 33 144.244 1460 3 1 112.284 14.4899 -114.451 + 33 168.767 969 3 0 111.911 14.0495 -115.85 + 33 5.4907 1426 2 1 105.37 8.00608 -144.45 + 33 91.1959 1425 2 1 105.35 8.0224 -144.467 + 33 120.373 1424 2 1 105.15 8.20703 -144.65 + 33 58.7678 946 2 0 104.077 9.33819 -145.85 + 33 54.7168 948 2 0 103.791 9.65 -146.191 + 33 47.0781 1098 1 0 71.9031 39.7695 -175.85 + 33 142.451 1099 1 0 71.7809 39.85 -175.956 + 33 40.7088 1100 1 0 71.541 40.05 -176.16 + 33 182.879 1236 1 0 2.83901 67.3696 -176.25 + 33 100.431 907 1 1 1.62793 67.1365 -174.85 + 33 81.3339 906 1 1 1.44983 67.135 -174.643 + 33 9.36146 905 1 1 1.24974 67.1411 -174.479 + 33 86.1752 1214 2 0 34.7309 62.9256 -146.25 + 33 62.2757 1213 2 0 34.9969 62.8499 -146 + 33 0.634101 1077 2 1 35.6488 62.3524 -144.85 + 33 115.083 1078 2 1 35.65 62.3515 -144.848 + 33 87.3099 831 8 0 10.3098 -13.7178 33.7501 + 33 259.952 708 8 0 19.3195 -38.4208 33.75 + 33 7.68764 707 8 0 20.1065 -38.45 34.1308 + 33 421.259 1000 8 1 20.1322 -39.8242 35.1504 + 33 46.3728 700 8 0 20.2293 -39.996 34.1499 + 33 76.8154 699 8 0 20.19 -40.05 34.0843 + 33 143.195 998 8 1 19.6554 -40.9918 35.15 + 33 15.5251 997 8 1 19.6499 -41.0043 35.1633 +Number of digits in this event: 84 +Using G4ParticleGun... +Particle energy: 2.52886 LIN +Particle: e- +Event: 34 +Number of tracker hits in this event: 49 + 34 108.196 778 10 1 -24.3189 -81.6433 95.55 + 34 129.536 492 10 0 -24.3172 -81.6418 94.15 + 34 137.44 778 9 1 -24.2735 -81.6143 65.55 + 34 276.077 492 9 0 -24.2667 -81.6156 64.15 + 34 145.646 779 8 1 -24.1364 -81.6214 35.55 + 34 109.123 492 8 0 -24.1269 -81.6209 34.15 + 34 140.4 780 7 1 -23.9566 -81.589 5.55 + 34 115.903 492 7 0 -23.9484 -81.5843 4.15 + 34 129.036 781 6 1 -23.7886 -81.4283 -24.45 + 34 114.872 493 6 0 -23.7854 -81.4426 -25.85 + 34 565.668 781 5 1 -23.6829 -81.7857 -54.45 + 34 169.053 491 5 0 -23.667 -81.8058 -55.85 + 34 99.202 783 4 1 -23.3365 -82.2065 -84.45 + 34 101.117 489 4 0 -23.3361 -82.2226 -85.85 + 34 154.135 783 3 1 -23.3623 -82.5368 -114.45 + 34 197.967 487 3 0 -23.363 -82.5464 -115.85 + 34 271.959 783 2 1 -23.3676 -82.7638 -144.45 + 34 121.964 486 2 0 -23.3767 -82.7567 -145.85 + 34 109.394 782 1 1 -23.5476 -82.648 -174.45 + 34 98.0853 487 1 0 -23.5645 -82.6473 -175.85 + 34 158.225 780 0 1 -23.9012 -82.6622 -204.45 + 34 234.069 487 0 0 -23.9143 -82.6249 -205.85 + 34 69.7965 783 0 1 -23.2626 -83.1508 -204.85 + 34 85.2332 784 0 1 -23.25 -83.1688 -204.833 + 34 288.276 492 5 0 -23.7239 -81.5897 -55.85 + 34 238.799 782 4 1 -23.5718 -81.6438 -84.45 + 34 120.049 492 4 0 -23.5518 -81.6476 -85.85 + 34 112.438 784 3 1 -23.1103 -81.7041 -114.45 + 34 124.265 491 3 0 -23.0992 -81.7075 -115.85 + 34 104.778 785 2 1 -22.8886 -81.7845 -144.45 + 34 178.18 491 2 0 -22.8786 -81.7897 -145.85 + 34 157.149 787 1 1 -22.6303 -81.8873 -174.45 + 34 104.46 490 1 0 -22.6163 -81.8991 -175.85 + 34 108.352 788 0 1 -22.2869 -82.2023 -204.45 + 34 108.723 489 0 0 -22.2647 -82.2097 -205.85 + 34 184.262 777 4 1 -24.5977 -82.7426 -84.45 + 34 119.316 486 4 0 -24.6273 -82.8074 -85.85 + 34 121.987 773 3 1 -25.2997 -84.1421 -114.45 + 34 141.374 479 3 0 -25.3566 -84.2073 -115.85 + 34 132.741 768 2 1 -26.3338 -85.6831 -144.45 + 34 112.237 471 2 0 -26.3991 -85.7247 -145.85 + 34 112.285 761 1 1 -27.7899 -86.4915 -174.45 + 34 180.73 467 1 0 -27.8967 -86.5263 -175.85 + 34 110.471 749 0 1 -30.1884 -87.9465 -204.45 + 34 117.357 460 0 0 -30.4037 -87.9941 -205.85 + 34 68.5071 724 0 1 -35.05 -44.7893 -204.83 + 34 160.108 725 0 1 -35.05 -44.6353 -204.597 + 34 295.071 628 5 0 -94.4764 -54.3442 -56.25 + 34 153.71 627 5 0 -94.7352 -54.45 -56.0459 +Number of digits in this event: 31 +Using G4ParticleGun... +Particle energy: 4.89095 LIN +Particle: e- +Event: 35 +Number of tracker hits in this event: 127 + 35 129.405 679 9 1 -44.1585 122.767 65.55 + 35 174.222 1513 9 0 -44.0783 122.754 64.15 + 35 1.88146 1512 9 0 -44.0557 122.75 63.7569 + 35 113.589 688 8 1 -42.4254 122.372 35.55 + 35 113.613 1511 8 0 -42.3459 122.375 34.15 + 35 150.946 697 7 1 -40.538 122.509 5.55 + 35 233.17 1511 7 0 -40.463 122.529 4.15 + 35 182.89 705 6 1 -38.9355 122.696 -24.45 + 35 149.493 1512 6 0 -38.8989 122.651 -25.85 + 35 374.032 679 7 1 -44.1503 122.763 5.55 + 35 379.027 1513 7 0 -44.1549 122.761 4.15 + 35 349.047 678 6 1 -44.2567 122.907 -24.45 + 35 127.934 1513 6 0 -44.2608 122.917 -25.85 + 35 396.872 678 5 1 -44.3354 123.131 -54.45 + 35 115.043 1514 5 0 -44.34 123.14 -55.85 + 35 101.182 678 4 1 -44.4401 123.336 -84.45 + 35 142.905 1515 4 0 -44.4459 123.344 -85.85 + 35 107.688 677 3 1 -44.5785 123.507 -114.45 + 35 114.454 1516 3 0 -44.5822 123.515 -115.85 + 35 501.844 676 2 1 -44.6716 123.684 -144.45 + 35 233.756 1517 2 0 -44.6744 123.688 -145.85 + 35 132.128 676 1 1 -44.7241 123.758 -174.45 + 35 165.749 1518 1 0 -44.7285 123.767 -175.85 + 35 519.4 676 0 1 -44.8168 123.944 -204.45 + 35 120.49 1519 0 0 -44.8301 123.954 -205.85 + 35 4.24056 1688 4 0 -71.4019 157.87 -86.25 + 35 40.0446 1516 4 0 -44.4265 123.35 -86.1838 + 35 21.2533 1781 4 0 -0.106309 176.51 -86.25 + 35 62.9738 1782 4 0 -0.0854213 176.55 -86.1975 + 35 29.1293 1784 4 0 -0.0501127 176.985 -86.0936 + 35 96.5826 1783 4 0 -0.0993249 176.95 -86.0975 + 35 213.25 1520 0 0 -44.713 124.294 -205.85 + 35 117.778 677 0 1 -44.65 124.021 -204.649 + 35 3.62504 1510 0 0 -44.2716 122.17 -205.85 + 35 55.7126 1509 0 0 -44.2678 122.15 -205.863 + 35 48.5685 1508 0 0 -44.2524 121.95 -206.007 + 35 89.6782 1507 0 0 -44.2266 121.75 -206.14 + 35 143.564 1506 0 0 -44.276 121.55 -206.229 + 35 232.773 1516 2 0 -44.7214 123.48 -145.85 + 35 51.4343 1515 2 0 -44.5258 123.35 -146.205 + 35 64.6661 1190 2 0 -25.9584 58.1988 -146.25 + 35 265.827 657 1 1 -48.5161 119.811 -174.45 + 35 115.452 1499 1 0 -48.4352 119.965 -175.85 + 35 241.058 663 0 1 -47.4209 122.033 -204.45 + 35 288.334 662 0 1 -47.45 121.94 -204.764 + 35 71.5829 658 1 1 -48.45 119.859 -174.551 + 35 46.95 1501 7 0 -43.7466 120.44 4.15 + 35 2.8857 1500 7 0 -43.7027 120.35 4.14513 + 35 12.0725 684 7 1 -43.0619 118.108 5.15005 + 35 261.956 685 7 1 -43.05 118.074 5.17751 + 35 41.1894 686 7 1 -42.85 117.958 5.20069 + 35 115.384 1514 6 0 -44.2759 123.011 -25.85 + 35 123.18 1515 5 0 -44.4002 123.298 -55.85 + 35 116.252 677 4 1 -44.5588 123.69 -84.45 + 35 147.838 1517 4 0 -44.5703 123.708 -85.85 + 35 380.177 676 3 1 -44.8103 124.075 -114.45 + 35 581.19 1519 3 0 -44.8289 124.087 -115.85 + 35 146.746 673 2 1 -45.2559 124.327 -144.45 + 35 239.313 1520 2 0 -45.2735 124.339 -145.85 + 35 29.9472 672 1 1 -45.6484 124.572 -174.45 + 35 600.711 671 1 1 -45.65 124.572 -174.567 + 35 155.802 1522 1 0 -45.6705 124.572 -175.85 + 35 218.918 669 0 1 -46.1579 124.602 -204.45 + 35 357.797 1522 0 0 -46.1593 124.608 -205.85 + 35 170.367 670 0 1 -45.9661 122.882 -204.85 + 35 79.0243 670 1 1 -45.85 125.08 -174.705 + 35 46.0884 1537 1 0 -44.742 127.587 -175.85 + 35 73.9588 1538 1 0 -44.6657 127.75 -175.937 + 35 56.9609 1539 1 0 -44.5748 127.95 -176.035 + 35 59.7767 1540 1 0 -44.4994 128.15 -176.077 + 35 46.5037 1541 1 0 -44.4448 128.35 -176.136 + 35 32.0525 1657 1 0 -33.4509 151.611 -176.25 + 35 82.1314 1656 1 0 -33.4582 151.55 -176.174 + 35 59.7891 1655 1 0 -33.511 151.35 -175.947 + 35 146.211 1654 1 0 -33.5551 151.15 -175.901 + 35 5.89378 1653 1 0 -33.3505 150.95 -176.241 + 35 9.6919 1660 1 0 -34.6872 152.273 -176.25 + 35 307.67 672 0 1 -45.5364 125.176 -204.45 + 35 354.71 671 0 1 -45.65 125.272 -204.585 + 35 12.5283 668 0 1 -46.2501 125.912 -204.833 + 35 60.73 1535 0 0 -48.4066 127.231 -205.85 + 35 357.922 1536 0 0 -48.6108 127.35 -205.954 + 35 32.0322 1537 0 0 -49.3618 127.55 -206.198 + 35 207.808 1571 0 0 -62.1514 134.531 -206.25 + 35 37.5389 1570 0 0 -62.1491 134.35 -205.946 + 35 55.4557 592 0 1 -61.5089 134.395 -204.85 + 35 171.24 593 0 1 -61.45 134.426 -204.75 + 35 26.2976 1575 0 0 -61.7919 135.171 -205.85 + 35 304.597 1526 0 0 -45.5775 125.418 -205.85 + 35 115.868 669 2 1 -46.1152 124.931 -144.45 + 35 143.331 1524 2 0 -46.1012 125.006 -145.85 + 35 128.326 1535 1 0 -45.712 127.295 -175.85 + 35 101.366 1554 0 0 -45.7524 131.103 -205.85 + 35 22.0636 1555 0 0 -45.7612 131.15 -206.186 + 35 135.908 666 2 1 -46.8131 123.375 -144.45 + 35 373.975 656 1 1 -48.8003 124.176 -174.45 + 35 114.951 1520 1 0 -48.814 124.275 -175.851 + 35 130.1 651 0 1 -49.706 127.919 -204.45 + 35 139.683 1539 0 0 -49.8997 127.991 -205.85 + 35 126.163 679 5 1 -44.1701 122.79 -54.45 + 35 84.8168 1512 5 0 -44.0644 122.586 -55.85 + 35 176.743 1511 5 0 -44.04 122.55 -56.056 + 35 87.3718 703 4 1 -39.3839 116.758 -84.45 + 35 110.666 704 4 1 -39.2497 116.869 -84.5782 + 35 14.2491 705 4 1 -39.0499 117.057 -84.8079 + 35 124.456 1488 4 0 -38.2552 117.828 -85.85 + 35 127.817 1489 4 0 -38.1307 117.95 -86.0133 + 35 2.24026 850 3 1 -9.85323 142.245 -114.45 + 35 63.9246 851 3 1 -9.85 142.247 -114.452 + 35 115.719 852 3 1 -9.64968 142.371 -114.615 + 35 47.137 853 3 1 -9.44969 142.496 -114.769 + 35 70.3957 1616 3 0 -8.05578 143.419 -115.851 + 35 157.122 1617 3 0 -7.87585 143.55 -115.986 + 35 42.3847 1618 3 0 -7.64019 143.75 -116.167 + 35 165.316 1717 3 0 36.7197 163.735 -116.25 + 35 65.6948 1086 3 1 37.3672 163.297 -114.85 + 35 46.9915 1087 3 1 37.45 163.192 -114.602 + 35 29.7344 1788 4 0 29.6723 177.874 -86.25 + 35 146.605 1789 4 0 29.6525 177.951 -86.1857 + 35 158.94 1790 4 0 29.5947 178.15 -86.0539 + 35 3.6568 1791 4 0 29.6684 178.35 -85.8525 + 35 256.284 1048 4 1 29.7495 178.874 -84.85 + 35 2.63056 601 4 1 -59.8441 118.806 -84.4502 + 35 113.528 600 4 1 -59.85 118.806 -84.4594 + 35 136.741 599 4 1 -60.0502 118.828 -84.7199 + 35 114.919 1494 4 0 -60.7365 119.092 -85.85 + 35 64.4225 1495 4 0 -60.9471 119.15 -86.1022 +Number of digits in this event: 62 +Using G4ParticleGun... +Particle energy: 3.35034 LIN +Particle: e- +Event: 36 +Number of tracker hits in this event: 81 + 36 120.836 1289 10 1 77.9939 37.7406 95.55 + 36 143.156 1088 10 0 77.9928 37.7416 94.15 + 36 151.687 1289 9 1 77.9875 37.7625 65.55 + 36 113.33 1088 9 0 77.9898 37.7636 64.15 + 36 181.061 1289 8 1 78.0198 37.7761 35.55 + 36 125.728 1088 8 0 78.0223 37.774 34.15 + 36 117.477 1290 7 1 78.0747 37.7292 5.55 + 36 102.777 1088 7 0 78.0742 37.724 4.15 + 36 119.164 1290 6 1 78.0517 37.6155 -24.45 + 36 243.835 1087 6 0 78.0504 37.611 -25.85 + 36 423.405 1289 5 1 78.0172 37.5092 -54.45 + 36 450.321 1087 5 0 78.0136 37.5018 -55.85 + 36 436.759 1289 4 1 77.9525 37.3823 -84.45 + 36 134.524 1086 4 0 77.949 37.3778 -85.85 + 36 236.933 1289 3 1 77.8863 37.2911 -114.45 + 36 374.486 1086 3 0 77.8862 37.2853 -115.85 + 36 311.814 1289 2 1 77.877 37.1691 -144.45 + 36 115.381 1085 2 0 77.8759 37.1645 -145.85 + 36 112.543 1289 1 1 77.8606 37.0602 -174.45 + 36 115.792 1085 1 0 77.8615 37.0584 -175.85 + 36 118.712 1289 0 1 77.8757 37.0298 -204.45 + 36 287.496 1084 0 0 77.8745 37.0316 -205.85 + 36 73.2368 1130 0 0 65.1796 46.0555 -206.25 + 36 42.8305 1129 0 0 65.1936 46.05 -206.177 + 36 143.405 1226 0 1 65.3901 46.458 -204.85 + 36 99.2484 1227 0 1 65.45 46.5276 -204.654 + 36 319.711 1084 2 0 77.9834 36.9412 -145.85 + 36 602.523 1301 1 1 80.3656 32.2982 -174.45 + 36 155.527 1058 1 0 80.3601 31.7107 -175.85 + 36 71.0602 1057 1 0 80.3592 31.65 -175.99 + 36 141.841 1301 0 1 80.3314 19.6225 -204.45 + 36 0.64454 1302 0 1 80.4501 19.4666 -204.848 + 36 29.2651 995 0 0 80.7428 19.0916 -205.85 + 36 90.5199 994 0 0 80.7745 19.05 -205.962 + 36 8.68111 804 1 0 176.868 -19.212 -176.25 + 36 75.4329 1300 1 1 80.2499 32.7608 -174.549 + 36 63.7717 1299 1 1 80.05 32.8879 -174.586 + 36 137.87 1298 1 1 79.85 32.8451 -174.587 + 36 151.584 1297 1 1 79.65 32.797 -174.618 + 36 144.761 1296 1 1 79.45 32.698 -174.569 + 36 201 1302 1 1 80.45 32.4883 -174.486 + 36 218.818 1288 2 1 77.7176 36.9472 -144.45 + 36 82.0432 1290 2 1 78.0501 37.349 -144.768 + 36 91.5487 1291 2 1 78.25 37.4589 -144.743 + 36 83.9206 1292 2 1 78.45 37.6213 -144.686 + 36 67.407 1293 2 1 78.65 37.7867 -144.564 + 36 42.7846 1086 5 0 78.0202 37.45 -56.2054 + 36 40.0674 1290 9 1 78.0505 37.7959 65.2207 + 36 189.061 1091 9 0 81.009 38.4059 64.1499 + 36 124.302 1092 9 0 81.0816 38.45 64.1154 + 36 246.226 1093 9 0 81.4235 38.65 64.1035 + 36 89.0432 1094 9 0 81.7989 38.8501 64.0537 + 36 349.278 1095 9 0 81.8885 39.05 64.0117 + 36 111.726 1088 4 0 77.8791 37.7145 -85.85 + 36 123.898 1286 3 1 77.3837 38.3174 -114.45 + 36 145.956 1091 3 0 77.3639 38.3405 -115.85 + 36 246.98 1284 2 1 76.967 38.7881 -144.45 + 36 111.956 1093 2 0 76.9577 38.803 -145.85 + 36 114.079 1284 1 1 76.9627 39.0802 -174.45 + 36 109.708 1095 1 0 76.9319 39.1032 -175.85 + 36 138.413 1281 0 1 76.2865 39.6191 -204.45 + 36 126.017 1097 0 0 76.2629 39.5975 -205.85 + 36 140.708 928 1 0 95.0098 5.85 -175.903 + 36 65.8003 1283 2 1 76.85 38.7219 -144.587 + 36 85.9842 1282 2 1 76.65 38.6066 -144.733 + 36 132.517 1088 2 0 75.3279 37.8492 -145.85 + 36 103.36 1087 4 0 77.9438 37.5006 -85.85 + 36 119.641 1286 1 1 77.3169 36.5454 -174.45 + 36 106.589 1082 1 0 77.3038 36.5353 -175.85 + 36 116.201 1285 0 1 77.0527 36.3146 -204.45 + 36 60.7623 1284 0 1 77.05 36.3143 -204.664 + 36 123.545 1081 0 0 77.0344 36.3108 -205.85 + 36 145.718 1312 2 1 82.4829 39.7554 -144.45 + 36 162.874 1099 2 0 82.4868 39.972 -145.85 + 36 251.882 1310 1 1 82.1688 43.4817 -174.45 + 36 128.372 1119 1 0 82.1845 43.9232 -175.85 + 36 71.7828 1313 0 1 82.8273 52.6468 -204.45 + 36 88.4475 1314 0 1 82.85 52.6868 -204.599 + 36 111.961 1164 0 0 83.0194 52.9152 -205.85 + 36 112.139 1100 2 0 82.5955 40.05 -146.064 + 36 129.633 1101 2 0 82.9074 40.2503 -146.072 +Number of digits in this event: 44 +Using G4ParticleGun... +Particle energy: 7.08403 LIN +Particle: e- +Event: 37 +Number of tracker hits in this event: 31 + 37 201.087 347 10 1 -110.583 -12.8046 95.55 + 37 105.789 836 10 0 -110.583 -12.8057 94.15 + 37 117.118 347 9 1 -110.578 -12.8234 65.55 + 37 122.568 836 9 0 -110.578 -12.8246 64.15 + 37 136.735 347 8 1 -110.581 -12.8432 35.55 + 37 141.145 836 8 0 -110.583 -12.8445 34.15 + 37 144.859 347 7 1 -110.613 -12.8752 5.55 + 37 115.444 835 7 0 -110.615 -12.876 4.15 + 37 117.429 347 6 1 -110.658 -12.8895 -24.45 + 37 102.977 835 6 0 -110.66 -12.8889 -25.85 + 37 134.899 347 5 1 -110.713 -12.8755 -54.45 + 37 104.632 835 5 0 -110.716 -12.8739 -55.85 + 37 98.7804 346 4 1 -110.774 -12.8402 -84.45 + 37 104.646 836 4 0 -110.777 -12.8384 -85.85 + 37 141.93 346 3 1 -110.826 -12.8005 -114.45 + 37 111.08 836 3 0 -110.827 -12.7991 -115.85 + 37 124.349 346 2 1 -110.853 -12.7735 -144.45 + 37 119.562 836 2 0 -110.853 -12.7724 -145.85 + 37 120.207 346 1 1 -110.848 -12.7488 -174.45 + 37 101.875 836 1 0 -110.847 -12.7468 -175.85 + 37 171.134 346 0 1 -110.823 -12.7046 -204.45 + 37 113.391 836 0 0 -110.822 -12.7024 -205.85 + 37 96.8695 937 3 0 -102.283 7.57433 -116.25 + 37 7.5315 938 3 0 -102.141 7.65002 -116.23 + 37 25.6189 939 3 0 -76.7512 7.90561 -116.25 + 37 42.8545 772 3 0 -165.668 -25.6257 -116.25 + 37 86.8575 835 10 0 -110.896 -12.9785 94.15 + 37 100.967 834 10 0 -111.059 -13.05 93.9377 + 37 9.35904 741 10 0 -135.605 -31.8272 93.7501 + 37 346.42 740 10 0 -135.592 -31.8501 93.7648 + 37 116.822 739 10 0 -134.996 -32.05 93.9285 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 2.78746 LIN +Particle: e- +Event: 38 +Number of tracker hits in this event: 18 + 38 262.957 236 7 1 -132.865 68.5623 5.55 + 38 141.614 1242 7 0 -132.863 68.5644 4.15 + 38 167.198 236 6 1 -132.829 68.6196 -24.45 + 38 222.618 1242 6 0 -132.827 68.6241 -25.85 + 38 152.837 236 5 1 -132.784 68.7053 -54.45 + 38 118.214 1243 5 0 -132.781 68.713 -55.85 + 38 117.507 237 4 1 -132.718 68.8814 -84.45 + 38 101.798 1244 4 0 -132.717 68.8885 -85.85 + 38 120.448 237 3 1 -132.687 69.0237 -114.45 + 38 161.132 1244 3 0 -132.687 69.0276 -115.85 + 38 120.583 237 2 1 -132.685 69.1019 -144.45 + 38 111.224 1245 2 0 -132.686 69.1063 -145.85 + 38 126.145 237 1 1 -132.671 69.1971 -174.45 + 38 117.172 1245 1 0 -132.669 69.1994 -175.85 + 38 119.169 237 0 1 -132.616 69.2485 -204.45 + 38 238.871 1246 0 0 -132.614 69.2558 -205.85 + 38 256.178 237 5 1 -132.75 68.7082 -54.4775 + 38 62.8373 238 5 1 -132.55 68.6595 -54.5278 +Number of digits in this event: 13 +Using G4ParticleGun... +Particle energy: 5.02703 LIN +Particle: e- +Event: 39 +Number of tracker hits in this event: 52 + 39 121.096 678 10 1 -44.3943 103.791 95.55 + 39 159.1 1418 10 0 -44.3936 103.793 94.15 + 39 210.699 678 9 1 -44.3865 103.834 65.55 + 39 155.363 1418 9 0 -44.3876 103.837 64.15 + 39 147.525 678 8 1 -44.4058 103.883 35.55 + 39 125.079 1418 8 0 -44.4065 103.885 34.15 + 39 136.15 678 7 1 -44.4162 103.934 5.55 + 39 177.447 1418 7 0 -44.4166 103.936 4.15 + 39 263.022 678 6 1 -44.4196 103.981 -24.45 + 39 164.846 1419 6 0 -44.418 103.981 -25.85 + 39 144.321 678 5 1 -44.381 103.984 -54.45 + 39 118.454 1419 5 0 -44.3803 103.984 -55.85 + 39 128.492 678 4 1 -44.3747 103.978 -84.45 + 39 115.19 1419 4 0 -44.3752 103.979 -85.85 + 39 164.629 678 3 1 -44.38 104.003 -114.45 + 39 110.988 1419 3 0 -44.3747 104.005 -115.85 + 39 126.413 678 2 1 -44.2666 104.028 -144.45 + 39 134.728 1419 2 0 -44.2558 104.03 -145.85 + 39 240.469 680 1 1 -44.0381 104.068 -174.45 + 39 106.98 1419 1 0 -44.0303 104.062 -175.85 + 39 121.262 680 0 1 -43.9027 103.984 -204.45 + 39 104.429 1419 0 0 -43.8967 103.97 -205.85 + 39 191.524 751 11 1 -29.6975 39.7583 125.15 + 39 83.8501 1421 6 0 -44.1396 104.47 -25.85 + 39 40.8457 1422 6 0 -44.0953 104.55 -26.1558 + 39 88.0718 698 5 1 -40.3989 111.695 -54.45 + 39 75.7303 699 5 1 -40.25 111.773 -54.6381 + 39 119.913 1460 5 0 -39.4458 112.217 -55.85 + 39 22.1054 1461 5 0 -39.1825 112.35 -56.1942 + 39 91.195 818 4 1 -16.3142 123.406 -84.4501 + 39 127.295 819 4 1 -16.25 123.524 -84.5878 + 39 37.13 1522 4 0 -15.6209 124.662 -85.8501 + 39 211.793 1523 4 0 -15.5729 124.75 -85.9497 + 39 91.4192 919 3 1 3.99552 140.152 -114.45 + 39 66.8489 920 3 1 4.05004 140.292 -114.708 + 39 110.622 1604 3 0 4.3657 140.976 -115.85 + 39 41.2066 1605 3 0 4.4817 141.15 -116.146 + 39 69.9697 986 2 1 17.3051 157.717 -144.45 + 39 56.583 985 2 1 17.2499 157.757 -144.63 + 39 148.572 1690 2 0 16.679 158.247 -145.85 + 39 32.5298 1691 2 0 16.5436 158.35 -146.129 + 39 36.5028 918 1 1 3.75215 166.406 -174.45 + 39 71.2679 917 1 1 3.65 166.377 -174.479 + 39 49.4087 916 1 1 3.45 166.297 -174.546 + 39 57.7702 915 1 1 3.25 166.221 -174.617 + 39 136.609 914 1 1 3.05 166.112 -174.727 + 39 4.27547 913 1 1 2.85 165.989 -174.843 + 39 68.7284 1724 1 0 1.51484 164.998 -175.85 + 39 143.398 1723 1 0 1.44286 164.95 -175.905 + 39 96.597 812 0 1 -17.5081 153.342 -204.45 + 39 29.5919 811 0 1 -17.65 153.34 -204.764 + 39 266.974 1666 0 0 -18.4684 153.428 -205.85 +Number of digits in this event: 25 +Using G4ParticleGun... +Particle energy: 5.45843 LIN +Particle: e- +Event: 40 +Number of tracker hits in this event: 26 + 40 160.428 1430 9 1 106.154 62.631 65.55 + 40 219.41 1212 9 0 106.154 62.6319 64.15 + 40 119.681 1430 8 1 106.155 62.653 35.55 + 40 131.621 1213 8 0 106.157 62.6539 34.15 + 40 117.335 1430 7 1 106.198 62.6414 5.55 + 40 123.072 1212 7 0 106.201 62.6407 4.15 + 40 123.602 1430 6 1 106.254 62.6254 -24.45 + 40 118.964 1212 6 0 106.256 62.6248 -25.85 + 40 193.842 1430 5 1 106.286 62.6161 -54.45 + 40 112.879 1212 5 0 106.288 62.6192 -55.85 + 40 114.198 1430 4 1 106.316 62.6864 -84.45 + 40 104.226 1213 4 0 106.32 62.6884 -85.85 + 40 97.2919 1431 3 1 106.398 62.7306 -114.45 + 40 141.238 1213 3 0 106.403 62.7315 -115.85 + 40 167.036 1431 2 1 106.5 62.7436 -144.45 + 40 229.143 1213 2 0 106.505 62.7432 -145.85 + 40 118.256 1432 1 1 106.595 62.7281 -174.45 + 40 125.514 1213 1 0 106.6 62.7272 -175.85 + 40 160.824 1432 0 1 106.703 62.7098 -204.45 + 40 127.63 1213 0 0 106.709 62.7127 -205.85 + 40 134.767 1758 0 1 171.912 91.3184 -204.45 + 40 199.825 1685 8 0 10.6411 157.325 33.75 + 40 215.45 1431 0 1 106.424 62.8243 -204.45 + 40 50.2091 1216 0 0 107.163 63.4008 -205.85 + 40 77.8397 1217 0 0 107.242 63.45 -206.001 + 40 110.974 1212 0 0 106.627 62.65 -205.894 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 6.5302 LIN +Particle: e- +Event: 41 +Number of tracker hits in this event: 156 + 41 140.791 851 11 1 -9.80097 54.3415 125.55 + 41 121.246 1171 11 0 -9.80046 54.3407 124.15 + 41 192.684 851 10 1 -9.78704 54.3211 95.55 + 41 252.375 1171 10 0 -9.7863 54.319 94.15 + 41 139.422 851 9 1 -9.78746 54.2684 65.55 + 41 171.07 1171 9 0 -9.78774 54.2658 64.15 + 41 112.282 851 8 1 -9.79784 54.2141 35.55 + 41 172.037 1170 8 0 -9.79784 54.2115 34.15 + 41 185.232 851 7 1 -9.81288 54.1364 5.55 + 41 130.642 1170 7 0 -9.81584 54.1338 4.15 + 41 114.875 850 6 1 -9.87722 54.0927 -24.45 + 41 441.296 1170 6 0 -9.87156 54.0985 -25.85 + 41 505.587 851 5 1 -9.69206 54.2175 -54.45 + 41 379.716 1170 5 0 -9.68272 54.2253 -55.85 + 41 152.529 852 4 1 -9.48172 54.3527 -84.45 + 41 506.67 1171 4 0 -9.474 54.3615 -85.85 + 41 310.45 853 3 1 -9.32551 54.5465 -114.45 + 41 138.262 1172 3 0 -9.32076 54.5556 -115.85 + 41 109.568 854 2 1 -9.23747 54.7166 -144.45 + 41 120.761 1173 2 0 -9.23913 54.7192 -145.85 + 41 132.394 853 1 1 -9.26798 54.6574 -174.45 + 41 120.077 1172 1 0 -9.25441 54.6232 -175.85 + 41 137.051 855 0 1 -8.97154 53.8601 -204.45 + 41 134.174 1169 0 0 -8.95176 53.8522 -205.85 + 41 115.031 1170 4 0 -9.32806 54.25 -86.0541 + 41 147.141 1169 4 0 -9.14026 54.05 -85.9628 + 41 135.615 1168 4 0 -9.13894 53.85 -85.9007 + 41 174.451 1171 6 0 -9.94922 54.2501 -25.9502 + 41 50.6478 1171 8 0 -9.75705 54.25 33.8413 + 41 8.07313 880 7 1 -3.88298 61.1488 5.55 + 41 112.465 881 7 1 -3.85 61.1433 5.49781 + 41 17.5432 882 7 1 -3.65 61.0989 5.20376 + 41 169.287 1204 7 0 -2.90888 60.9513 4.14982 + 41 19.7807 1004 6 1 20.9988 55.0167 -24.45 + 41 134.165 1005 6 1 21.05 55.0721 -24.4659 + 41 87.1083 1006 6 1 21.25 55.2986 -24.5159 + 41 117.544 1007 6 1 21.45 55.5274 -24.54 + 41 94.5573 1008 6 1 21.65 55.7538 -24.5483 + 41 86.7176 1009 6 1 21.85 56.0188 -24.5329 + 41 25.5335 1010 6 1 22.05 56.2799 -24.4737 + 41 70.0697 941 7 0 47.1625 8.41858 3.75 + 41 71.4439 940 7 0 47.2605 8.25 3.85051 + 41 71.5436 939 7 0 47.3949 8.05 3.98559 + 41 6.77253 938 7 0 47.5454 7.84976 4.13944 + 41 101.593 1142 7 1 48.4845 6.57773 5.15 + 41 189.678 1143 7 1 48.65 6.33208 5.31467 + 41 13.0897 1144 7 1 48.8501 6.01242 5.52369 + 41 120.554 1145 7 1 49.1196 5.70693 5.54977 + 41 125.998 926 7 0 48.9164 5.44709 4.1497 + 41 4.27287 1116 6 1 43.2678 -2.63075 -24.45 + 41 91.5785 1115 6 1 43.25 -2.61643 -24.4585 + 41 59.3955 1114 6 1 43.05 -2.48922 -24.5293 + 41 74.9046 1113 6 1 42.85 -2.38383 -24.5274 + 41 65.6351 1112 6 1 42.65 -2.27825 -24.5508 + 41 72.6138 1111 6 1 42.4497 -2.13811 -24.6163 + 41 70.6864 1110 6 1 42.25 -1.96262 -24.6974 + 41 113.254 1109 6 1 42.0499 -1.76448 -24.7953 + 41 25.3636 1108 6 1 41.8496 -1.3699 -24.833 + 41 22.8787 905 6 0 40.1291 1.19479 -25.85 + 41 54.9497 906 6 0 40.0926 1.25 -25.875 + 41 71.4682 907 6 0 39.9832 1.45 -25.9793 + 41 98.436 908 6 0 39.8155 1.65 -26.0811 + 41 108.947 909 6 0 39.6623 1.85 -26.182 + 41 3.85294 916 6 0 68.0701 3.37904 -25.85 + 41 92.5632 759 8 0 173.574 -28.05 33.7519 + 41 222.345 758 8 0 174.129 -28.25 33.9657 + 41 85.9949 1012 6 1 22.5269 56.3219 -24.45 + 41 73.4357 1168 5 0 -9.78782 53.7266 -55.85 + 41 32.5176 1167 5 0 -9.78334 53.65 -56.1284 + 41 174.567 879 4 1 -4.05635 49.9877 -84.4502 + 41 24.1894 880 4 1 -4.05 49.9996 -84.5992 + 41 305.657 1150 4 0 -4.66492 50.1452 -85.85 + 41 46.484 1231 4 0 17.3657 66.3362 -86.25 + 41 91.5032 1232 4 0 17.447 66.45 -86.1387 + 41 86.2045 987 4 1 17.5296 66.8878 -84.85 + 41 78.3094 988 4 1 17.65 67.0596 -84.6621 + 41 209.902 989 4 1 17.8504 67.1469 -84.6278 + 41 119.214 990 4 1 18.0502 67.5428 -84.495 + 41 1.29365 991 4 1 18.2501 67.7787 -84.4514 + 41 366.578 1149 4 0 -4.73222 50.05 -86.0355 + 41 146.525 878 4 1 -4.25 49.9516 -84.5998 + 41 57.9339 1151 4 0 -3.94125 50.25 -85.8751 + 41 127.562 884 4 1 -3.12588 52.19 -84.8499 + 41 364.714 850 4 1 -9.97902 54.7527 -84.45 + 41 51.8062 849 4 1 -10.05 54.6571 -84.8487 + 41 125.623 823 3 1 -15.2996 47.7177 -114.45 + 41 138.33 1136 3 0 -15.6942 47.4227 -115.85 + 41 130.677 782 2 1 -23.5576 42.8121 -144.45 + 41 14.9016 781 2 1 -23.65 42.7503 -144.804 + 41 330.739 1112 2 0 -23.8999 42.5715 -145.85 + 41 106.14 753 1 1 -29.3627 35.0553 -174.45 + 41 451.437 1074 1 0 -29.3184 34.993 -175.85 + 41 107.78 751 0 1 -29.7968 34.8631 -204.45 + 41 230.664 1074 0 0 -29.7068 34.8839 -205.85 + 41 86.9773 1073 1 0 -28.9675 34.85 -176.063 + 41 110.441 1113 2 0 -23.947 42.65 -145.943 + 41 273.872 851 6 1 -9.74821 54.1266 -24.45 + 41 471.664 850 3 1 -9.99751 54.6559 -114.45 + 41 121.665 1173 3 0 -10.0067 54.6565 -115.85 + 41 153.475 849 2 1 -10.2061 54.6235 -144.45 + 41 208.331 1172 2 0 -10.2134 54.6313 -145.85 + 41 118.397 848 1 1 -10.3876 54.7153 -174.45 + 41 128.208 1173 1 0 -10.4146 54.7371 -175.85 + 41 111.51 845 0 1 -10.9878 55.3461 -204.45 + 41 103.718 1176 0 0 -11.0121 55.3731 -205.85 + 41 96.9036 1158 3 0 -11.3277 51.8136 -115.85 + 41 152.667 1157 3 0 -11.4155 51.65 -115.921 + 41 80.264 1156 3 0 -11.3449 51.45 -116.111 + 41 186.079 1052 3 0 -12.6193 30.5297 -116.25 + 41 62.2692 1053 3 0 -12.7032 30.6502 -116.134 + 41 395.32 850 5 1 -9.91754 52.0426 -54.451 + 41 113.071 1159 5 0 -9.90418 51.969 -55.8503 + 41 136.863 911 3 1 2.26542 46.2744 -114.45 + 41 5.32074 1131 3 0 2.22059 46.4461 -115.85 + 41 143.308 1132 3 0 2.21952 46.45 -115.88 + 41 162.068 906 2 1 1.30158 49.5357 -144.45 + 41 25.7176 907 2 1 1.45 49.3291 -144.776 + 41 89.5319 1141 2 0 1.90135 48.4174 -145.85 + 41 74.9311 1140 2 0 2.00107 48.25 -146.069 + 41 55.98 985 1 1 17.121 24.7242 -174.45 + 41 126.073 984 1 1 17.05 24.5662 -174.511 + 41 113.058 983 1 1 16.8499 24.2261 -174.705 + 41 60.5403 996 1 0 14.9416 19.3621 -175.85 + 41 54.0596 995 1 0 14.8953 19.2499 -175.883 + 41 58.7982 994 1 0 14.813 19.0497 -175.882 + 41 49.0884 993 1 0 14.729 18.85 -175.891 + 41 50.0675 965 1 1 13.1161 17.0322 -174.85 + 41 83.1839 964 1 1 13.05 16.9583 -174.806 + 41 149.125 963 1 1 12.85 16.7424 -174.615 + 41 69.931 962 1 1 12.65 16.3427 -174.466 + 41 52.1089 961 1 1 12.45 16.1775 -174.556 + 41 78.3739 960 1 1 12.25 16.109 -174.663 + 41 93.0121 959 1 1 12.05 16.0557 -174.653 + 41 573.638 958 1 1 11.85 15.9347 -174.684 + 41 72.2879 957 1 1 11.65 15.7621 -174.628 + 41 211.661 851 2 1 -9.69002 46.6674 -144.45 + 41 393.846 1132 2 0 -9.55567 46.6438 -145.85 + 41 110.584 867 1 1 -6.54824 46.0449 -174.45 + 41 150.98 1129 1 0 -6.28324 45.9962 -175.85 + 41 20.8884 896 0 1 -0.666313 44.9791 -204.45 + 41 111.155 897 0 1 -0.65 44.9786 -204.553 + 41 194.913 1124 0 0 -0.43358 44.9834 -205.85 + 41 191.837 850 2 1 -9.96783 46.8273 -144.451 + 41 2.30501 1133 2 0 -9.9621 46.6518 -145.85 + 41 81.1433 1131 2 0 -10.0534 46.4499 -146.104 + 41 196.829 941 9 1 8.26306 55.2955 65.55 + 41 20.0834 942 9 1 8.45 55.11 65.2158 + 41 93.9125 1170 9 0 9.13731 54.25 63.995 + 41 60.4223 1007 8 1 21.5852 33.0541 35.55 + 41 257.397 1008 8 1 21.6502 32.9767 35.3362 + 41 140.569 1062 8 0 21.9744 32.6089 34.1495 + 41 4.56109 1061 8 0 21.8486 32.4495 33.7565 + 41 22.582 1035 8 0 -0.80964 27.2333 33.75 + 41 115.468 1036 8 0 -0.77653 27.25 33.7685 + 41 102.924 1037 8 0 -0.375996 27.45 33.8323 + 41 27.8145 1038 8 0 -0.350804 27.6501 33.7912 +Number of digits in this event: 68 +Using G4ParticleGun... +Particle energy: 8.89717 LIN +Particle: e- +Event: 42 +Number of tracker hits in this event: 46 + 42 151.619 273 7 1 -125.424 -81.0962 5.55 + 42 104.235 494 7 0 -125.424 -81.0964 4.15 + 42 124.754 273 6 1 -125.421 -81.0984 -24.45 + 42 249.234 494 6 0 -125.42 -81.0991 -25.85 + 42 157.312 273 5 1 -125.394 -81.1055 -54.45 + 42 92.8618 494 5 0 -125.393 -81.1056 -55.85 + 42 179.701 273 4 1 -125.384 -81.1079 -84.45 + 42 103.805 494 4 0 -125.383 -81.1074 -85.85 + 42 100.696 273 3 1 -125.376 -81.0965 -114.45 + 42 120.915 494 3 0 -125.376 -81.0961 -115.85 + 42 133.716 273 2 1 -125.385 -81.0832 -144.45 + 42 129.873 494 2 0 -125.386 -81.0794 -145.85 + 42 192.506 273 1 1 -125.397 -81.0115 -174.45 + 42 132.135 495 1 0 -125.398 -81.0072 -175.85 + 42 111.175 273 0 1 -125.402 -80.9284 -204.45 + 42 141.634 495 0 0 -125.402 -80.9239 -205.85 + 42 95.5082 274 2 1 -125.35 -81.2268 -144.537 + 42 420.246 275 2 1 -125.15 -81.2302 -144.591 + 42 99.9837 490 2 0 -123.01 -81.9352 -145.85 + 42 3.16115 850 0 1 -9.86125 -67.3905 -204.45 + 42 77.1961 851 0 1 -9.85 -67.3894 -204.459 + 42 50.7679 852 0 1 -9.64976 -67.3822 -204.691 + 42 46.0911 853 0 1 -9.45 -67.3297 -204.798 + 42 27.4212 854 0 1 -9.25 -67.293 -204.831 + 42 184.668 564 0 0 -6.69343 -67.1843 -205.85 + 42 203.007 309 5 1 -118.297 -88.5175 -54.4501 + 42 53.0593 310 5 1 -118.15 -88.64 -54.7802 + 42 101.059 453 5 0 -117.943 -89.2629 -55.85 + 42 58.8122 452 5 0 -117.913 -89.45 -56.1524 + 42 38.3103 287 4 1 -122.745 -107.593 -84.4501 + 42 60.5332 286 4 1 -122.75 -107.618 -84.6029 + 42 82.2319 361 4 0 -122.803 -107.855 -85.85 + 42 21.0257 360 4 0 -122.89 -107.95 -86.1984 + 42 130.926 212 3 1 -137.741 -121.55 -114.45 + 42 33.4492 295 3 0 -137.555 -120.993 -115.85 + 42 119.899 296 3 0 -137.55 -120.95 -115.966 + 42 6.84336 36 3 0 -79.7462 -172.927 -116.25 + 42 98.5602 35 3 0 -79.7338 -172.95 -116.235 + 42 86.3784 34 3 0 -79.6614 -173.15 -116.025 + 42 19.5769 33 3 0 -79.6867 -173.35 -115.885 + 42 24.2867 498 3 1 -80.4126 -174.49 -114.85 + 42 298.997 497 3 1 -80.45 -174.525 -114.8 + 42 219.758 496 3 1 -80.65 -174.724 -114.494 + 42 152.972 27 3 0 -79.7543 -174.667 -115.85 + 42 234.78 26 3 0 -79.9477 -174.75 -116.06 + 42 130.137 458 5 0 -117.962 -88.3722 -55.85 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 3.91176 LIN +Particle: e- +Event: 43 +Number of tracker hits in this event: 50 + 43 119.619 1458 8 1 111.764 -79.3792 35.55 + 43 128.345 503 8 0 111.764 -79.3774 34.15 + 43 127.979 1457 7 1 111.749 -79.3471 5.55 + 43 104.959 503 7 0 111.748 -79.3469 4.15 + 43 127.023 1457 6 1 111.729 -79.3438 -24.45 + 43 107.253 503 6 0 111.726 -79.3462 -25.85 + 43 113.609 1457 5 1 111.677 -79.4042 -54.45 + 43 100.187 503 5 0 111.674 -79.4071 -55.85 + 43 156.485 1457 4 1 111.611 -79.4628 -84.45 + 43 272.009 502 4 0 111.608 -79.466 -85.85 + 43 118.99 1456 3 1 111.54 -79.5304 -114.45 + 43 108.735 502 3 0 111.539 -79.5335 -115.85 + 43 106.882 1456 2 1 111.514 -79.5934 -144.45 + 43 117.175 502 2 0 111.514 -79.5947 -145.85 + 43 125.678 1456 1 1 111.503 -79.6144 -174.45 + 43 134.257 502 1 0 111.504 -79.6165 -175.85 + 43 89.0415 1456 0 1 111.521 -79.6671 -204.45 + 43 121.507 501 0 0 111.521 -79.6721 -205.85 + 43 2.70617 1456 4 1 111.55 -79.4827 -84.8407 + 43 3.3212 611 4 0 78.3593 -57.654 -86.25 + 43 84.8303 612 4 0 78.3552 -57.6499 -86.2436 + 43 75.4063 613 4 0 78.3378 -57.4496 -86.1758 + 43 72.631 614 4 0 78.3704 -57.25 -86.1375 + 43 78.7273 870 4 0 110.961 -6.02829 -86.2499 + 43 93.0712 873 4 0 125.231 -5.44285 -86.25 + 43 268.34 1457 2 1 111.722 -79.1893 -144.45 + 43 318.698 504 2 0 111.707 -79.2066 -145.85 + 43 148.396 1457 1 1 111.648 -79.5627 -174.45 + 43 170.752 501 1 0 111.563 -79.6809 -175.85 + 43 100.428 1447 0 1 109.657 -82.1569 -204.45 + 43 118.153 489 0 0 109.562 -82.2025 -205.851 + 43 31.7633 1047 1 1 29.5981 15.1759 -174.85 + 43 33.6487 1046 1 1 29.45 15.3879 -174.798 + 43 186.527 983 1 0 28.1535 16.7021 -175.85 + 43 205.556 984 1 0 28.0115 16.8502 -176.008 + 43 6.51079 1457 1 0 2.37977 111.742 -176.25 + 43 2.37687 1458 1 0 2.37732 111.75 -176.249 + 43 365.876 1458 2 1 111.75 -79.2099 -144.772 + 43 132.117 1452 1 1 110.712 -78.6057 -174.45 + 43 103.099 508 1 0 110.625 -78.3196 -175.85 + 43 12.1378 509 1 0 110.605 -78.25 -176.195 + 43 144.494 1444 0 1 108.981 -72.7056 -204.45 + 43 119.795 537 0 0 108.92 -72.5091 -205.851 + 43 95.7995 1443 0 1 108.95 -72.7406 -204.452 + 43 1.92472 1459 2 1 111.95 -79.2435 -144.847 + 43 19.1685 1476 2 1 115.494 -79.4015 -144.85 + 43 80.9546 1477 2 1 115.55 -79.4075 -144.813 + 43 95.275 1478 2 1 115.75 -79.4088 -144.716 + 43 44.8664 1479 2 1 115.95 -79.3595 -144.524 + 43 7.89992 664 2 0 66.0943 -47.1574 -146.25 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 9.55174 LIN +Particle: e- +Event: 44 +Number of tracker hits in this event: 122 + 44 117.744 1281 10 1 76.4406 86.5735 95.55 + 44 205.173 1332 10 0 76.44 86.5736 94.15 + 44 109.955 1281 9 1 76.4269 86.5788 65.55 + 44 152.453 1332 9 0 76.4256 86.5796 64.15 + 44 184.648 1281 8 1 76.3955 86.5941 35.55 + 44 110.686 1332 8 0 76.3935 86.5955 34.15 + 44 125.717 1281 7 1 76.353 86.6238 5.55 + 44 109.954 1332 7 0 76.3509 86.6256 4.15 + 44 424.615 1281 6 1 76.3064 86.6669 -24.45 + 44 391.251 1333 6 0 76.3045 86.6696 -25.85 + 44 96.2123 1281 5 1 76.2657 86.7187 -54.45 + 44 418.297 1333 5 0 76.2654 86.7214 -55.85 + 44 102.526 1281 4 1 76.2604 86.779 -84.45 + 44 290.643 1333 4 0 76.2607 86.7827 -85.85 + 44 502.36 1281 3 1 76.2602 86.8598 -114.45 + 44 615.675 1334 3 0 76.2604 86.8639 -115.85 + 44 537.852 1281 2 1 76.2686 86.9503 -144.45 + 44 746.279 1334 2 0 76.269 86.9542 -145.85 + 44 633.438 1281 1 1 76.2775 87.034 -174.45 + 44 128.514 1334 1 0 76.2791 87.0371 -175.85 + 44 355.078 1281 0 1 76.3137 87.0989 -204.45 + 44 244.255 1335 0 0 76.3176 87.1011 -205.85 + 44 101.673 1291 2 1 78.2619 89.2556 -144.45 + 44 222.293 1346 2 0 78.2859 89.2629 -145.85 + 44 107.794 1291 1 1 78.2659 89.8082 -174.45 + 44 161.183 1348 1 0 78.244 89.6539 -175.85 + 44 99.8013 1347 1 0 78.2435 89.6499 -175.885 + 44 138.553 1295 0 1 79.1691 89.0599 -204.45 + 44 135.778 1345 0 0 79.2822 89.1769 -205.85 + 44 95.0062 1333 3 0 74.6579 86.6947 -115.85 + 44 139.593 1332 3 0 74.5179 86.65 -115.946 + 44 216.367 1350 3 0 50.9946 90.259 -116.25 + 44 69.9623 1330 3 0 76.4677 86.1469 -115.85 + 44 73.2994 1329 3 0 76.4949 86.0499 -116.037 + 44 122.43 1288 2 1 77.8372 72.8896 -144.45 + 44 123.936 1289 2 1 77.85 72.8841 -144.472 + 44 53.6106 1264 2 0 78.5002 72.9848 -145.85 + 44 82.3435 1265 2 0 78.6068 73.05 -146.046 + 44 59.8096 1266 2 0 78.815 73.25 -146.19 + 44 92.7879 1267 2 0 78.9678 73.45 -146.168 + 44 73.261 1268 2 0 79.1996 73.6503 -146.149 + 44 124.556 1480 2 0 110.86 116.245 -146.25 + 44 218.776 1454 2 1 110.961 116.12 -144.85 + 44 395.276 1453 2 1 110.95 115.941 -144.627 + 44 4.72472 1493 2 0 107.7 118.943 -146.25 + 44 551.307 1494 2 0 107.701 118.95 -146.239 + 44 100.734 1263 2 0 77.3785 72.7266 -145.851 + 44 31.3684 1262 2 0 77.3177 72.65 -146.202 + 44 862.497 1280 2 1 76.2354 86.8961 -144.452 + 44 297.091 1279 1 1 75.9547 88.7474 -174.45 + 44 193.568 1344 1 0 75.8203 88.9945 -175.85 + 44 205.463 1345 1 0 75.7767 89.05 -176.212 + 44 228.024 1261 0 1 72.2698 93.4244 -204.45 + 44 204.323 1260 0 1 72.25 93.3929 -204.614 + 44 127.441 1364 0 0 72.1212 93.1386 -205.85 + 44 291.117 1282 1 1 76.6457 86.7586 -174.45 + 44 144.236 1283 1 1 76.65 86.7528 -174.792 + 44 185.087 1333 1 0 76.6611 86.7334 -175.85 + 44 140.297 1284 0 1 76.9098 86.1356 -204.45 + 44 234.506 1330 0 0 76.9211 86.1673 -205.85 + 44 215.317 1283 0 1 76.7468 86.6992 -204.45 + 44 262.557 1333 0 0 76.7912 86.7276 -205.85 + 44 119.936 1297 1 1 79.5579 86.6527 -174.45 + 44 172.042 1331 1 0 79.6134 86.4167 -175.85 + 44 144.714 1302 0 1 80.5881 81.7752 -204.45 + 44 170.053 1308 0 0 80.7019 81.7565 -205.85 + 44 207.203 1340 2 0 75.9119 88.1538 -145.85 + 44 226.646 1190 2 0 39.9663 58.1663 -146.25 + 44 338.403 1330 1 0 76.3954 86.1128 -175.851 + 44 74.8316 1278 0 1 75.798 85.9625 -204.45 + 44 46.2843 1279 0 1 75.8501 85.9549 -204.671 + 44 213.709 1329 0 0 76.1156 85.9176 -205.85 + 44 194.969 1380 1 0 113.956 96.2403 -176.25 + 44 69.6649 1379 1 0 114.087 96.15 -175.999 + 44 302.511 1280 3 1 76.2084 86.8453 -114.45 + 44 106.875 1284 2 1 76.9632 87.3567 -144.451 + 44 130.1 1336 2 0 76.9784 87.3653 -145.85 + 44 38.6787 1284 1 1 76.8525 86.8103 -174.45 + 44 363.965 1332 1 0 76.7925 86.5529 -175.85 + 44 221.505 1277 0 1 75.5321 81.9231 -204.45 + 44 178.535 1307 0 0 75.7281 81.6167 -205.85 + 44 129.065 1335 1 0 76.3035 87.1736 -175.85 + 44 258.527 1280 1 1 76.25 87.068 -174.546 + 44 30.3844 1506 1 0 35.6604 121.443 -176.25 + 44 214.508 1332 2 0 76.2626 86.5587 -145.85 + 44 281.169 1285 1 1 77.2211 84.7818 -174.45 + 44 130.216 1323 1 0 77.1959 84.7624 -175.85 + 44 2.43741 1280 0 1 76.25 83.7629 -204.844 + 44 159.014 1317 0 0 76.1968 83.5707 -205.85 + 44 205.65 1332 6 0 76.324 86.6178 -25.85 + 44 212.432 1280 5 1 76.2126 86.6014 -54.45 + 44 111.772 1332 5 0 76.2269 86.6126 -55.85 + 44 138.084 1282 4 1 76.5133 86.8209 -84.45 + 44 177.972 1284 3 1 76.9548 87.0082 -114.45 + 44 107.323 1295 2 1 79.1843 86.7662 -144.45 + 44 111.504 1333 2 0 79.2714 86.7239 -145.85 + 44 129.5 1304 1 1 80.9859 85.9951 -174.45 + 44 118.477 1329 1 0 81.0103 85.9571 -175.85 + 44 213.958 1308 0 1 81.698 85.0867 -204.45 + 44 171.318 1325 0 0 82.0886 85.1972 -205.85 + 44 116.606 1279 4 1 75.9286 86.9456 -84.45 + 44 165.636 1334 4 0 75.9313 86.9852 -85.85 + 44 262.907 1279 3 1 75.9572 87.8622 -114.45 + 44 141.252 1339 3 0 75.9763 87.9011 -115.85 + 44 142.899 1343 2 0 76.3507 88.7831 -145.85 + 44 118.245 1282 0 1 76.5966 90.4075 -204.45 + 44 122.628 1351 0 0 76.5907 90.4414 -205.85 + 44 90.4938 1152 2 0 128.954 50.65 -146.013 + 44 241.761 1151 2 0 129.156 50.45 -146.194 + 44 21.6658 1353 3 0 76.4695 90.8928 -115.85 + 44 183.729 1354 3 0 76.4862 90.95 -115.867 + 44 185.653 1355 3 0 76.5405 91.1505 -115.903 + 44 170.422 1356 3 0 76.6152 91.35 -116.006 + 44 98.9128 1279 2 1 75.9497 87.7045 -144.45 + 44 130.579 1338 2 0 76.1815 87.7124 -145.85 + 44 109.706 1311 1 1 82.3537 89.9373 -174.45 + 44 124.928 1352 1 0 82.5318 90.555 -175.85 + 44 46.4699 1328 0 1 85.7687 104.274 -204.45 + 44 76.1641 1329 0 1 85.85 104.354 -204.631 + 44 23.1485 1423 0 0 86.3564 104.915 -205.85 + 44 124.404 1424 0 0 86.3856 104.95 -205.928 + 44 287.714 935 3 0 -169.489 7.12746 -116.25 +Number of digits in this event: 84 +Using G4ParticleGun... +Particle energy: 9.24781 LIN +Particle: e- +Event: 45 +Number of tracker hits in this event: 81 + 45 128.161 770 10 1 -25.9771 110.543 95.55 + 45 88.7346 1451 10 0 -25.9772 110.543 94.15 + 45 125.539 770 9 1 -25.9793 110.55 65.55 + 45 130.92 1452 9 0 -25.9793 110.55 64.15 + 45 131.19 770 8 1 -25.9796 110.55 35.55 + 45 115.689 1451 8 0 -25.9796 110.549 34.15 + 45 129.434 770 7 1 -25.9826 110.528 5.55 + 45 143.007 1451 7 0 -25.9833 110.527 4.15 + 45 135.953 770 6 1 -25.9935 110.501 -24.45 + 45 141.866 1451 6 0 -25.9944 110.5 -25.85 + 45 121.972 770 5 1 -26.0154 110.481 -54.45 + 45 154.586 1451 5 0 -26.0166 110.48 -55.85 + 45 112.939 770 4 1 -26.0415 110.453 -84.45 + 45 113.304 1451 4 0 -26.0427 110.452 -85.85 + 45 136.265 769 3 1 -26.0658 110.429 -114.45 + 45 318.421 1451 3 0 -26.0676 110.429 -115.85 + 45 104.333 769 2 1 -26.1032 110.42 -144.45 + 45 222.796 1451 2 0 -26.1072 110.416 -145.85 + 45 189.013 769 1 1 -26.1888 110.333 -174.45 + 45 128.903 1450 1 0 -26.194 110.33 -175.85 + 45 179.27 768 0 1 -26.3004 110.262 -204.45 + 45 122.198 1450 0 0 -26.3057 110.26 -205.85 + 45 395.812 768 1 1 -26.2502 110.276 -174.538 + 45 56.7794 1447 1 0 -26.8249 109.65 -175.85 + 45 86.0417 1446 1 0 -26.8999 109.55 -176.002 + 45 6.37507 1445 1 0 -27.0094 109.35 -176.231 + 45 94.9871 769 5 1 -26.05 110.445 -54.4987 + 45 121.59 1447 5 0 -26.7619 109.746 -55.85 + 45 143.407 654 4 1 -49.2358 100.756 -84.45 + 45 42.5591 655 4 1 -49.05 100.332 -84.7444 + 45 92.4068 1394 4 0 -47.6888 99.0004 -85.8502 + 45 85.8744 1393 4 0 -47.6293 98.95 -85.8985 + 45 68.4806 1392 4 0 -47.3934 98.7499 -86.1079 + 45 128.446 1281 4 0 -20.838 76.2898 -86.25 + 45 86.2961 793 4 1 -21.3381 76.3545 -84.8499 + 45 47.423 792 4 1 -21.45 76.4246 -84.5997 + 45 131.908 1470 4 1 114.15 -100.613 -84.5939 + 45 242.431 770 3 1 -26.0264 110.415 -114.45 + 45 105.862 774 2 1 -25.067 111.207 -144.45 + 45 107.372 1455 2 0 -25.061 111.23 -145.85 + 45 100.227 1464 1 0 -26.4638 112.958 -175.851 + 45 111.096 730 0 1 -33.8663 117.934 -204.45 + 45 61.4198 729 0 1 -34.05 117.896 -204.589 + 45 55.8227 728 0 1 -34.25 117.842 -204.739 + 45 165.605 1485 0 0 -35.6367 117.307 -205.85 + 45 83.3576 1484 0 0 -35.9805 117.15 -206.111 + 45 211.377 789 1 1 -22.1255 111.3 -174.45 + 45 96.0297 1456 1 0 -22.1583 111.539 -175.85 + 45 3.05264 767 0 1 -26.4619 112.784 -204.45 + 45 363.662 769 0 1 -26.25 112.802 -204.559 + 45 50.7749 770 0 1 -26.05 112.781 -204.659 + 45 50.7318 771 0 1 -25.85 112.772 -204.74 + 45 27.9441 772 0 1 -25.65 112.76 -204.819 + 45 241.263 1461 0 0 -22.934 112.423 -205.85 + 45 113.265 1388 0 0 -8.52567 97.8568 -206.25 + 45 18.5383 1387 0 0 -8.71425 97.7499 -205.901 + 45 102.159 854 0 1 -9.16951 97.5884 -204.85 + 45 64.0852 853 0 1 -9.25 97.7112 -204.502 + 45 102.984 852 0 1 -9.45 97.8798 -204.497 + 45 537.396 851 0 1 -9.65 98.1487 -204.616 + 45 65.0324 850 0 1 -9.85 99.8174 -204.706 + 45 13.0887 790 1 1 -22.05 111.252 -174.793 + 45 119.409 1455 1 0 -21.9298 111.255 -175.85 + 45 114.956 806 0 1 -18.6926 112.012 -204.45 + 45 14.7504 807 0 1 -18.65 112.014 -204.79 + 45 157.71 1459 0 0 -18.5473 112.019 -205.85 + 45 157.157 771 2 1 -25.7481 110.004 -144.45 + 45 281.132 1449 2 0 -25.6995 110.01 -145.85 + 45 140.653 779 1 1 -24.24 109.9 -174.45 + 45 132.542 1448 1 0 -24.1255 109.813 -175.85 + 45 113.577 792 0 1 -21.513 108.068 -204.45 + 45 124.506 1439 0 0 -21.3917 108.013 -205.85 + 45 224.558 814 0 1 -17.2439 100.486 -204.85 + 45 34.2032 815 0 1 -17.05 100.483 -204.618 + 45 3.95212 1450 2 0 -25.9044 110.15 -146.241 + 45 57.5141 1457 0 0 -26.5928 111.607 -205.85 + 45 79.9333 1458 0 0 -26.6549 111.75 -206.007 + 45 43.0479 923 1 0 160.863 4.85 -175.922 + 45 93.4096 1702 1 1 160.603 4.51008 -174.85 + 45 144.122 920 1 0 160.464 4.13128 -175.85 + 45 166.97 1451 0 0 -26.0722 110.38 -205.851 +Number of digits in this event: 40 +Using G4ParticleGun... +Particle energy: 8.54395 LIN Particle: e- Event: 46 Number of tracker hits in this event: 88 - 46 98.1399 1428 10 1 105.814 36.6566 95.55 - 46 107.52 1083 10 0 105.814 36.6548 94.15 - 46 237.365 1428 9 1 105.833 36.614 65.55 - 46 113.38 1082 9 0 105.832 36.6121 64.15 - 46 356.532 1428 8 1 105.819 36.5697 35.55 - 46 157.511 1082 8 0 105.818 36.5677 34.15 - 46 116.851 1428 7 1 105.8 36.5191 5.55 - 46 131.058 1082 7 0 105.799 36.5162 4.15 - 46 98.2453 1428 6 1 105.77 36.451 -24.45 - 46 149.226 1081 6 0 105.771 36.4473 -25.85 - 46 113.961 1428 5 1 105.796 36.3728 -54.45 - 46 113.576 1081 5 0 105.799 36.3705 -55.85 - 46 101.443 1428 4 1 105.856 36.3321 -84.45 - 46 189.16 1081 4 0 105.855 36.3309 -85.85 - 46 108.576 1428 3 1 105.834 36.3167 -114.45 - 46 110.707 1081 3 0 105.834 36.309 -115.85 - 46 198.532 1428 2 1 105.833 36.1456 -144.45 - 46 409.65 1080 2 0 105.828 36.1358 -145.85 - 46 297.36 1427 1 1 105.741 35.9325 -174.45 - 46 107.604 1079 1 0 105.737 35.9231 -175.85 - 46 108.275 1427 0 1 105.67 35.73 -204.45 - 46 127.915 1078 0 0 105.663 35.7188 -205.85 - 46 301.394 1427 3 1 105.71 36.1347 -114.45 - 46 354.772 1080 3 0 105.705 36.1355 -115.85 - 46 109.376 1427 2 1 105.599 36.1589 -144.45 - 46 305.075 1426 1 1 105.379 36.1403 -174.45 - 46 240.312 1080 1 0 105.365 36.1422 -175.85 - 46 144.207 1424 0 1 105.075 36.168 -204.45 - 46 150.873 1080 0 0 105.065 36.1702 -205.85 - 46 309.255 1078 1 0 105.7 35.833 -175.85 - 46 34.198 1452 0 1 110.609 32.6073 -204.45 - 46 95.6541 1451 0 1 110.55 32.6375 -204.569 - 46 315.08 1065 0 0 109.955 33.1099 -205.85 - 46 192.231 1077 1 0 106.019 35.6499 -175.857 - 46 4.70735 1503 0 1 120.943 18.1454 -204.45 - 46 127.582 1504 0 1 120.95 18.1317 -204.463 - 46 52.4642 1505 0 1 121.15 17.8804 -204.698 - 46 156.877 985 0 0 122.449 17.2238 -205.85 - 46 9.06921 984 0 0 122.664 17.05 -206.219 - 46 124.441 1426 2 1 105.351 36.2783 -144.45 - 46 127.848 1081 2 0 105.358 36.2685 -145.85 - 46 155.053 1422 0 1 104.638 36.3118 -204.45 - 46 109.399 1081 0 0 104.586 36.3104 -205.85 - 46 157.022 1427 9 1 105.75 36.5879 65.287 - 46 46.5413 1080 8 0 106.099 36.1089 34.15 - 46 107.183 1079 8 0 106.131 36.05 34.0029 - 46 54.1907 1458 7 1 111.819 26.6218 5.54977 - 46 75.4259 1459 7 1 111.95 26.5785 5.48194 - 46 107.558 1460 7 1 112.15 26.517 5.39284 - 46 52.2655 1461 7 1 112.35 26.4533 5.31024 - 46 48.6932 1462 7 1 112.55 26.3916 5.2346 - 46 13.789 1463 7 1 112.75 26.344 5.16412 - 46 37.8901 1027 7 0 116.01 25.4878 4.15 - 46 184.817 1026 7 0 116.153 25.45 4.10235 - 46 161.807 1025 7 0 116.753 25.25 3.92316 - 46 123.235 1024 7 0 117.226 25.0499 3.82374 - 46 9.49368 1023 7 0 117.658 24.85 3.7539 - 46 244.116 1427 8 1 105.75 36.498 35.3155 - 46 73.0689 1426 8 1 105.55 36.4721 35.3207 - 46 127.004 1083 8 0 105.379 36.6842 34.1496 - 46 124.398 1380 7 1 96.2644 36.9971 5.55 - 46 112.647 1084 7 0 95.952 36.9663 4.1497 - 46 38.2243 1350 6 1 90.289 35.6559 -24.45 - 46 120.148 1351 6 1 90.3501 35.5513 -24.5315 - 46 0.829233 1352 6 1 90.55 35.22 -24.8455 - 46 10.3579 1071 6 0 91.1878 34.2874 -25.85 - 46 102.206 1070 6 0 91.2132 34.25 -25.8877 - 46 115.639 1069 6 0 91.3305 34.05 -26.086 - 46 135.393 1468 5 1 113.763 0.424608 -54.45 - 46 8.13211 895 5 0 114.359 -1.03738 -55.85 - 46 92.8507 894 5 0 114.364 -1.05031 -55.8631 - 46 65.595 893 5 0 114.429 -1.25062 -56.0747 - 46 164.487 1495 4 1 119.299 -22.1304 -84.4502 - 46 67.7218 1494 4 1 119.15 -22.1029 -84.6574 - 46 10.8963 1493 4 1 118.95 -22.0409 -84.8367 - 46 71.8951 794 4 0 117.561 -21.1855 -85.85 - 46 141.377 795 4 0 117.391 -21.05 -85.9855 - 46 116.766 796 4 0 117.073 -20.85 -86.1132 - 46 42.301 797 4 0 116.809 -20.6498 -86.183 - 46 174.62 513 3 1 -77.25 106.477 -114.535 - 46 73.5205 1496 4 1 119.35 -21.8392 -84.5785 - 46 130.435 1497 4 1 119.55 -21.8026 -84.6881 - 46 147.671 784 4 0 120.586 -23.0547 -85.8501 - 46 65.3239 681 4 0 124.777 -43.709 -86.25 - 46 112.671 680 4 0 124.7 -43.85 -86.0933 - 46 114.46 1517 4 1 123.744 -45.0674 -84.85 - 46 81.8003 1516 4 1 123.55 -45.3235 -84.6595 - 46 156.396 1515 4 1 123.35 -45.3938 -84.5033 -Number of digits in this event: 42 + 46 122.77 1199 11 1 59.8529 38.6847 125.55 + 46 159.73 1093 11 0 59.8526 38.6839 124.15 + 46 143.4 1198 10 1 59.8432 38.6691 95.55 + 46 100.753 1093 10 0 59.8432 38.6696 94.15 + 46 110.1 1198 9 1 59.843 38.674 65.55 + 46 133.504 1093 9 0 59.8429 38.6742 64.15 + 46 222.98 1198 8 1 59.8422 38.684 35.55 + 46 108.35 1093 8 0 59.8428 38.6833 34.15 + 46 151.458 1199 7 1 59.8529 38.6712 5.55 + 46 210.336 1093 7 0 59.8539 38.6716 4.15 + 46 123.774 1199 6 1 59.8679 38.6819 -24.45 + 46 322.497 1093 6 0 59.868 38.6825 -25.85 + 46 266.353 1199 5 1 59.8697 38.6962 -54.45 + 46 368.738 1093 5 0 59.8697 38.6957 -55.85 + 46 244.463 1199 4 1 59.8687 38.6793 -84.45 + 46 362.033 1093 4 0 59.8674 38.6782 -85.85 + 46 424.015 1198 3 1 59.8454 38.6601 -114.45 + 46 362.374 1093 3 0 59.8437 38.6584 -115.85 + 46 109.355 1198 2 1 59.8119 38.625 -144.45 + 46 119.362 1092 2 0 59.8107 38.6237 -145.85 + 46 174.213 1198 1 1 59.7859 38.6071 -174.45 + 46 105.164 1092 1 0 59.7839 38.6063 -175.85 + 46 248.04 1198 0 1 59.7429 38.5823 -204.45 + 46 210.176 1092 0 0 59.7407 38.5822 -205.85 + 46 9.0846 570 8 0 92.3917 -65.9132 33.75 + 46 122.686 1637 4 0 13.5255 147.717 -86.25 + 46 146.607 1638 4 0 13.5108 147.75 -86.1447 + 46 110.97 1094 6 0 59.1422 38.85 -25.8941 + 46 91.3065 1253 5 1 70.65 100.827 -54.5183 + 46 232.661 1198 6 1 59.8396 38.6744 -24.45 + 46 116.638 1196 3 1 59.2928 38.4726 -114.45 + 46 264.285 1091 3 0 59.255 38.4311 -115.85 + 46 105.212 1192 2 1 58.485 37.5932 -144.45 + 46 118.661 1087 2 0 58.4563 37.5482 -145.85 + 46 121.992 1189 1 1 58.0411 36.7873 -174.45 + 46 103.923 1083 1 0 57.9898 36.7539 -175.85 + 46 139.454 1183 0 1 56.7632 36.0915 -204.45 + 46 135.454 1080 0 0 56.7086 36.0732 -205.85 + 46 1.32963 1606 4 1 141.35 87.6266 -84.6651 + 46 177.874 851 1 1 -9.73528 91.9053 -174.45 + 46 113.964 1092 6 0 59.8317 38.6463 -25.85 + 46 234.403 1198 5 1 59.7284 38.0131 -54.45 + 46 173.083 1089 5 0 59.7233 38.001 -55.85 + 46 170.469 1198 4 1 59.6516 37.7361 -84.45 + 46 116.78 1088 4 0 59.6603 37.7067 -85.85 + 46 125.722 1084 3 0 59.7531 37.014 -115.85 + 46 114.336 1200 2 1 60.1921 36.0731 -144.45 + 46 136.058 1079 2 0 60.2225 36.0334 -145.85 + 46 107.085 1203 1 1 60.8403 35.2402 -174.45 + 46 126.626 1075 1 0 60.8747 35.2249 -175.85 + 46 162.352 1207 0 1 61.5666 35.0415 -204.45 + 46 115.725 1074 0 0 61.6664 34.9545 -205.85 + 46 186.451 1197 8 1 59.65 38.5692 35.4695 + 46 132.822 1091 8 0 58.9441 38.4068 34.15 + 46 158.188 1125 7 1 45.2179 37.8611 5.55 + 46 71.465 1124 7 1 45.0499 38.259 5.26984 + 46 36.4987 1098 7 0 43.6377 39.7481 4.14998 + 46 100.974 1099 7 0 43.5664 39.85 4.05924 + 46 64.8034 1100 7 0 43.4302 40.05 3.87621 + 46 41.6721 1592 7 0 13.3656 138.594 3.75 + 46 92.6337 1593 7 0 13.3314 138.75 3.79526 + 46 113.844 1594 7 0 13.2867 138.95 3.84946 + 46 246.365 1595 7 0 13.3111 139.15 3.90122 + 46 112.295 1596 7 0 13.3553 139.35 3.9717 + 46 459.071 1597 7 0 13.3479 139.55 3.96499 + 46 193.112 1598 7 0 13.0381 139.75 4.10005 + 46 70.6554 956 6 1 11.3105 10.3779 -24.45 + 46 70.8296 955 6 1 11.25 10.3912 -24.4685 + 46 110.066 1197 3 1 59.65 38.5842 -114.687 + 46 18.6423 1131 2 1 46.2641 40.2503 -144.45 + 46 84.8371 1130 2 1 46.25 40.2291 -144.515 + 46 109.328 1098 2 0 45.9541 39.7632 -145.851 + 46 21.1179 1097 2 0 45.8858 39.65 -146.197 + 46 168.781 1098 1 1 39.8389 31.3335 -174.45 + 46 63.9665 1051 1 0 39.4092 30.3862 -175.85 + 46 69.2991 1050 1 0 39.3431 30.25 -176.05 + 46 112.221 1050 0 1 30.183 10.0005 -204.45 + 46 59.2143 946 0 0 30.0384 9.32548 -205.85 + 46 71.2947 945 0 0 30.0276 9.25 -206.023 + 46 58.1354 849 2 1 -10.05 3.57813 -144.552 + 46 97.26 850 2 1 -10.05 3.62192 -144.458 + 46 174.855 1195 2 1 59.175 36.5308 -144.451 + 46 105.844 1082 2 0 59.1637 36.4866 -145.85 + 46 122.693 1192 1 1 58.6364 35.5922 -174.45 + 46 7.28589 1193 1 1 58.65 35.5653 -174.807 + 46 240.259 1077 1 0 58.6868 35.4915 -175.851 + 46 32.4779 1066 0 0 59.7861 33.2568 -205.85 + 46 90.3459 1065 0 0 59.785 33.25 -205.955 +Number of digits in this event: 46 Using G4ParticleGun... -Particle energy: 7.94116 LIN +Particle energy: 2.1183 LIN Particle: e- Event: 47 -Number of tracker hits in this event: 60 - 47 141.897 1552 8 1 130.711 48.5592 35.55 - 47 105.802 1142 8 0 130.711 48.5585 34.15 - 47 113.643 1552 7 1 130.702 48.5433 5.55 - 47 124.353 1142 7 0 130.702 48.5422 4.15 - 47 106.06 1552 6 1 130.688 48.5207 -24.45 - 47 119.218 1142 6 0 130.688 48.519 -25.85 - 47 125.403 1552 5 1 130.673 48.4799 -54.45 - 47 107.361 1142 5 0 130.674 48.4788 -55.85 - 47 318.521 1552 4 1 130.682 48.4553 -84.45 - 47 130.351 1142 4 0 130.681 48.457 -85.85 - 47 426.828 1552 3 1 130.678 48.4902 -114.45 - 47 309.203 1142 3 0 130.679 48.4928 -115.85 - 47 112.489 1552 2 1 130.685 48.5443 -144.45 - 47 103.414 1142 2 0 130.684 48.5462 -145.85 - 47 460.076 1552 1 1 130.663 48.5849 -174.45 - 47 97.2341 1142 1 0 130.664 48.5872 -175.85 - 47 123.688 1552 0 1 130.675 48.6377 -204.45 - 47 263.955 1143 0 0 130.699 48.6753 -205.85 - 47 157.213 1142 0 0 130.675 48.6394 -205.986 - 47 209.042 1742 7 1 168.556 -167.047 5.15 - 47 64.6757 834 1 0 130.991 -13.1389 -176.25 - 47 47.7755 1368 1 0 47.7832 93.8685 -176.25 - 47 149.06 1141 4 0 130.642 48.3384 -85.8508 - 47 99.7348 1589 3 1 137.987 42.9449 -114.45 - 47 3.10362 1588 3 1 137.95 43.0331 -114.841 - 47 30.8552 1115 3 0 137.819 43.2278 -115.85 - 47 152.223 1116 3 0 137.788 43.25 -116.004 - 47 104.372 1114 3 0 114.237 42.8901 -116.25 - 47 18.5326 1113 3 0 114.03 42.85 -115.916 - 47 29.5779 1465 3 1 113.228 42.3612 -114.849 - 47 113.402 1464 3 1 113.15 42.2965 -114.775 - 47 68.923 1463 3 1 112.95 42.2127 -114.641 - 47 196.653 1462 3 1 112.75 42.1233 -114.521 - 47 71.8563 1549 2 1 130.142 49.8227 -144.45 - 47 50.7469 1550 2 1 130.15 49.8289 -144.705 - 47 149.863 1149 2 0 130.185 49.8664 -145.85 - 47 131.594 1554 1 1 131.084 50.6796 -174.451 - 47 145.506 1152 1 0 131.12 50.6207 -175.85 - 47 236.49 1558 0 1 131.799 48.9165 -204.45 - 47 1.86486 1307 3 0 116.705 81.6156 -116.25 - 47 141.88 1308 3 0 116.691 81.6501 -116.147 - 47 186.825 1151 1 0 116.734 50.3419 -176.25 - 47 466.69 1474 1 1 115.113 49.4111 -174.85 - 47 99.8966 1475 1 1 115.15 49.2687 -174.463 - 47 25.3292 1553 3 1 130.75 48.408 -114.753 - 47 119.057 1141 3 0 131.08 48.3579 -115.85 - 47 81.9788 1592 2 1 138.567 46.3852 -144.45 - 47 38.4408 1593 2 1 138.75 46.3193 -144.754 - 47 98.5819 1130 2 0 139.369 46.1016 -145.851 - 47 37.5324 1129 2 0 139.533 46.05 -146.144 - 47 48.1402 1676 1 1 155.493 41.5128 -174.45 - 47 73.9199 1677 1 1 155.55 41.4904 -174.486 - 47 72.2285 1678 1 1 155.75 41.4195 -174.614 - 47 39.7144 1679 1 1 155.95 41.3435 -174.756 - 47 168.6 1103 1 0 157.375 40.7918 -175.85 - 47 82.8728 1102 1 0 157.693 40.65 -176.11 - 47 272.939 1141 1 0 130.718 48.3882 -175.85 - 47 121.784 1135 0 0 131.898 47.2378 -205.85 - 47 92.9062 1551 1 1 130.55 48.3867 -174.745 - 47 196.726 1550 1 1 130.35 48.4365 -174.752 -Number of digits in this event: 28 +Number of tracker hits in this event: 85 + 47 101.721 626 11 1 -54.7451 -56.5555 125.55 + 47 116.313 617 11 0 -54.7451 -56.5531 124.15 + 47 110.875 626 10 1 -54.7607 -56.4999 95.55 + 47 117.941 617 10 0 -54.7592 -56.4991 94.15 + 47 128.787 626 9 1 -54.7418 -56.4815 65.55 + 47 138.917 617 9 0 -54.741 -56.4776 64.15 + 47 95.3634 626 8 1 -54.7373 -56.4112 35.55 + 47 109.824 618 8 0 -54.7412 -56.4059 34.15 + 47 414.971 626 7 1 -54.8469 -56.2838 5.55 + 47 391.67 618 7 0 -54.85 -56.2704 4.15 + 47 118.94 625 6 1 -54.9261 -56.0426 -24.45 + 47 127.729 619 6 0 -55.0425 -56.0648 -25.8504 + 47 151.57 614 5 1 -57.1632 -56.3072 -54.4517 + 47 421.715 619 5 0 -57.1427 -56.2425 -55.85 + 47 139.77 614 4 1 -57.1415 -54.9332 -84.45 + 47 113.547 626 4 0 -57.2299 -54.7087 -85.85 + 47 20.7002 627 4 0 -57.2472 -54.65 -86.1952 + 47 126.962 607 3 1 -58.4652 -50.0554 -114.45 + 47 111.24 653 3 0 -58.5319 -49.421 -115.85 + 47 16.6606 654 3 0 -58.5523 -49.25 -116.216 + 47 169.476 599 2 1 -60.1367 -35.9186 -144.45 + 47 71.5837 723 2 0 -60.1483 -35.3485 -145.85 + 47 36.3109 724 2 0 -60.1525 -35.25 -146.11 + 47 366.479 593 1 1 -61.3678 -24.5548 -174.45 + 47 66.7299 782 1 0 -61.5477 -23.5794 -175.85 + 47 72.7785 783 1 0 -61.5726 -23.45 -176.037 + 47 222.99 578 0 1 -64.3376 -4.39835 -204.45 + 47 27.5439 886 0 0 -64.4242 -2.71734 -205.85 + 47 70.397 887 0 0 -64.4276 -2.65 -205.906 + 47 87.3192 888 0 0 -64.4359 -2.45 -206.069 + 47 15.9743 889 0 0 -64.4407 -2.24948 -206.229 + 47 160.042 809 0 0 -93.7642 -18.1866 -206.25 + 47 61.1038 808 0 0 -93.7882 -18.25 -206.172 + 47 41.4239 780 1 0 -61.0633 -23.9154 -175.85 + 47 67.779 781 1 0 -61.0537 -23.85 -176.011 + 47 1.57494 634 3 0 -56.86 -53.05 -115.857 + 47 261.891 626 6 1 -54.7022 -56.0461 -24.45 + 47 211.587 620 6 0 -54.6873 -56.0051 -25.85 + 47 156.851 628 5 1 -54.3419 -55.2196 -54.45 + 47 129.408 624 5 0 -54.3372 -55.1655 -55.85 + 47 117.47 629 4 1 -54.2499 -54.0691 -84.45 + 47 185.665 630 4 0 -54.2488 -54.0202 -85.85 + 47 134.932 629 3 1 -54.221 -53.0917 -114.45 + 47 114.712 635 3 0 -54.2276 -53.0347 -115.85 + 47 229.919 628 2 1 -54.374 -51.9407 -144.45 + 47 112.254 640 2 0 -54.3753 -51.8956 -145.85 + 47 108.37 628 1 1 -54.4198 -50.9631 -174.45 + 47 152.125 645 1 0 -54.4309 -50.9246 -175.85 + 47 114.222 626 0 1 -54.6941 -50.1274 -204.45 + 47 148.599 649 0 0 -54.6672 -50.0913 -205.85 + 47 135.932 625 5 1 -54.9761 -55.5469 -54.45 + 47 113.478 622 5 0 -54.9806 -55.5064 -55.85 + 47 124.147 626 4 1 -54.7318 -55.2765 -84.45 + 47 135.751 624 4 0 -54.7462 -55.2202 -85.85 + 47 149.328 625 3 1 -54.9655 -54.5515 -114.45 + 47 266.349 627 3 0 -54.8754 -54.579 -115.851 + 47 131.452 634 2 1 -53.1738 -55.584 -144.45 + 47 143.366 621 2 0 -53.1753 -55.6736 -145.85 + 47 144.286 632 1 1 -53.4847 -57.6533 -174.45 + 47 161.458 611 1 0 -53.4874 -57.7485 -175.85 + 47 45.2405 633 0 1 -53.4405 -59.995 -204.45 + 47 131.616 632 0 1 -53.45 -60.0167 -204.601 + 47 106.198 599 0 0 -53.5391 -60.1897 -205.851 + 47 5.18572 276 0 1 -124.95 -46.2704 -204.77 + 47 54.2973 275 0 1 -124.95 -46.3043 -204.8 + 47 121.248 911 2 0 -111.052 2.25 -146.168 + 47 67.4178 923 1 0 -116.256 4.65 -175.974 + 47 302.906 626 5 1 -54.6815 -56.2104 -54.45 + 47 158.982 617 4 1 -56.518 -55.7079 -84.4502 + 47 140.957 622 4 0 -56.5856 -55.6262 -85.8502 + 47 13.0675 606 3 1 -58.8426 -54.6147 -114.45 + 47 89.65 605 3 1 -58.8501 -54.6145 -114.497 + 47 256.134 623 4 1 -55.3038 -55.8725 -84.45 + 47 149.156 621 4 0 -55.3151 -55.8422 -85.85 + 47 113.354 622 3 1 -55.5044 -55.4801 -114.45 + 47 73.6291 622 3 0 -55.4537 -55.4544 -115.85 + 47 46.6629 623 3 0 -55.444 -55.45 -116.087 + 47 71.2156 627 2 1 -54.4927 -55.2761 -144.45 + 47 105.525 623 2 0 -54.1796 -55.2963 -145.85 + 47 83.3117 660 1 1 -47.9867 -54.598 -174.45 + 47 192.433 659 1 1 -48.0501 -54.7028 -174.675 + 47 93.1806 623 1 0 -48.4562 -55.3271 -175.85 + 47 59.536 622 1 0 -48.5373 -55.45 -176.074 + 47 94.4134 594 0 1 -61.1281 -72.0652 -204.45 + 47 107.64 540 0 0 -61.0963 -71.9777 -205.85 +Number of digits in this event: 40 Using G4ParticleGun... -Particle energy: 1.33559 LIN +Particle energy: 9.8524 LIN Particle: e- Event: 48 -Number of tracker hits in this event: 120 - 48 94.9735 1032 11 1 26.4669 77.8846 125.433 - 48 109.426 1289 11 0 26.4671 77.8853 124.15 - 48 353.504 1032 10 1 26.4725 77.9004 95.55 - 48 242.541 1289 10 0 26.4715 77.8893 94.15 - 48 223.571 1032 9 1 26.4761 77.667 65.55 - 48 154.587 1288 9 0 26.4827 77.6576 64.15 - 48 152.77 1032 8 1 26.5901 77.4822 35.55 - 48 122.819 1287 8 0 26.5992 77.4773 34.15 - 48 125.064 1033 7 1 26.7547 77.3598 5.55 - 48 160.6 1286 7 0 26.7584 77.3536 4.15 - 48 146.778 1033 6 1 26.8087 77.2329 -24.45 - 48 170.281 1285 6 0 26.8094 77.2331 -25.85 - 48 474.57 1033 5 1 26.7969 77.1928 -54.45 - 48 120.138 1285 5 0 26.7974 77.1743 -55.85 - 48 315.676 1033 4 1 26.8306 76.793 -84.45 - 48 108.252 1283 4 0 26.8445 76.7699 -85.85 - 48 131.84 1035 3 1 27.1465 76.3081 -114.45 - 48 125.14 1281 3 0 27.1635 76.2872 -115.85 - 48 127.436 1037 2 1 27.5149 75.8409 -144.45 - 48 94.6607 1278 2 0 27.546 75.8123 -145.85 - 48 114.336 1040 1 1 28.2251 75.2088 -174.45 - 48 120.325 1275 1 0 28.2545 75.1788 -175.85 - 48 403.01 1043 0 1 28.8222 74.5722 -204.45 - 48 132.735 1272 0 0 28.8301 74.537 -205.85 - 48 253.983 1127 2 1 45.5945 72.7461 -144.45 - 48 93.1883 1033 8 1 26.65 77.437 35.4376 - 48 75.0478 1292 8 0 27.4207 78.4881 34.15 - 48 97.7631 1293 8 0 27.6051 78.65 34.0327 - 48 81.039 1294 8 0 27.9087 78.8503 33.9735 - 48 73.0464 1295 8 0 28.1884 79.05 33.9284 - 48 274.689 1296 8 0 28.3801 79.25 33.9112 - 48 163.481 1297 8 0 28.6089 79.45 33.9863 - 48 166.708 1298 8 0 29.0239 79.65 34.0981 - 48 12.915 784 8 0 8.10608 -23.2042 33.75 - 48 58.9158 783 8 0 8.09099 -23.25 33.7674 - 48 67.9428 782 8 0 8.08438 -23.4501 33.8302 - 48 138.69 781 8 0 8.09316 -23.65 33.9455 - 48 8.56395 780 8 0 8.24272 -23.8501 33.7584 - 48 15.1266 1290 8 0 27.309 78.05 34.1195 - 48 24.1226 506 9 0 35.7606 -78.65 64.0614 - 48 193.494 507 9 0 35.7441 -78.65 64.1299 - 48 257.814 1031 8 1 26.3042 77.6716 35.55 - 48 279.022 1288 8 0 26.3179 77.6873 34.15 - 48 134.571 1032 7 1 26.5687 77.9611 5.55 - 48 290.716 1289 7 0 26.5706 77.9829 4.15 - 48 230.238 1032 6 1 26.596 78.5417 -24.45 - 48 113.898 1292 6 0 26.6039 78.5912 -25.85 - 48 145.393 1298 5 0 26.8273 79.743 -55.85 - 48 169.664 1036 4 1 27.4205 81.3599 -84.45 - 48 134.736 1306 4 0 27.4687 81.4161 -85.85 - 48 135.325 1041 3 1 28.399 82.5806 -114.45 - 48 123.568 1312 3 0 28.4055 82.6229 -115.85 - 48 110.241 1041 2 1 28.433 83.425 -144.45 - 48 125.037 1316 2 0 28.4309 83.432 -145.85 - 48 148.852 1041 1 1 28.3725 83.5252 -174.45 - 48 340.326 1317 1 0 28.4039 83.4695 -175.85 - 48 112.867 1312 0 0 28.7698 82.6121 -205.85 - 48 336.016 1042 1 1 28.45 83.5357 -174.807 - 48 99.6496 1313 1 0 28.156 82.781 -175.85 - 48 4.32981 1041 0 1 28.2949 83.4561 -204.45 - 48 69.2004 686 1 1 -42.65 24.7834 -174.782 - 48 120.645 1031 7 1 26.2901 77.8989 5.55 - 48 105.434 1290 6 0 26.604 78.0625 -25.85 - 48 162.141 1289 5 0 26.8252 77.898 -55.85 - 48 138.723 1290 4 0 26.7738 78.1884 -85.85 - 48 116.668 1034 3 1 26.8672 78.8437 -114.45 - 48 155.829 1294 3 0 26.9019 78.8685 -115.85 - 48 106.896 1038 2 1 27.6752 79.3903 -144.45 - 48 129.345 1296 2 0 27.7238 79.4115 -145.85 - 48 141.629 1298 1 0 28.4161 79.7346 -175.85 - 48 58.1312 1028 0 1 25.6881 77.3259 -204.45 - 48 82.8239 1029 0 1 25.8508 77.3536 -204.638 - 48 170.819 1287 0 0 26.8673 77.591 -205.85 - 48 94.5316 1288 0 0 27.1113 77.65 -206.143 - 48 100.878 1297 1 0 28.421 79.65 -176.164 - 48 90.4966 1293 3 0 26.9092 78.85 -116.221 - 48 203.251 1038 9 1 27.7035 79.1314 65.55 - 48 142.862 1296 9 0 27.8095 79.306 64.1493 - 48 159.528 1044 8 1 28.9507 82.7292 35.55 - 48 97.6588 1317 8 0 28.8686 83.4892 34.15 - 48 56.4405 1318 8 0 28.8309 83.65 33.8924 - 48 139.802 989 7 1 17.9748 108.412 5.55 - 48 104.666 988 7 1 17.85 108.643 5.36919 - 48 18.934 987 7 1 17.65 108.899 5.19231 - 48 63.4007 1449 7 0 16.6184 110.005 4.15 - 48 75.4664 1450 7 0 16.4799 110.15 4.00269 - 48 73.6326 1451 7 0 16.3219 110.35 3.86353 - 48 25.0962 1452 7 0 16.2024 110.55 3.78574 - 48 42.3503 844 6 1 -11.1079 164.756 -24.45 - 48 70.6796 843 6 1 -11.2502 164.768 -24.5594 - 48 35.1043 842 6 1 -11.45 164.759 -24.7702 - 48 168.709 1722 6 0 -12.6559 164.732 -25.85 - 48 174.882 681 5 1 -43.8209 154.339 -54.45 - 48 30.5976 682 5 1 -43.6499 154.784 -54.7672 - 48 108.413 1678 5 0 -43.2876 155.763 -55.85 - 48 63.9007 1679 5 0 -43.2412 155.95 -56.0672 - 48 34.5407 1754 5 0 -55.9018 170.991 -56.2494 - 48 170.336 1753 5 0 -56.0035 170.95 -56.1595 - 48 26.8033 1752 5 0 -56.3193 170.75 -55.9007 - 48 123.201 613 5 1 -57.3215 169.903 -54.8488 - 48 33.0415 612 5 1 -57.45 169.606 -54.7985 - 48 89.4663 1742 5 0 -57.4934 168.656 -55.85 - 48 89.4531 1741 5 0 -57.4695 168.55 -55.9923 - 48 278.343 1740 5 0 -57.3443 168.35 -56.2236 - 48 133.865 617 5 1 -56.579 168.323 -54.85 - 48 178.035 1616 7 0 -87.9048 143.514 3.75 - 48 74.6086 1615 7 0 -87.8279 143.35 4.1047 - 48 46.8894 1031 10 1 26.45 78.1569 95.2627 - 48 323.016 1296 10 0 26.4933 79.2693 94.15 - 48 65.381 1297 10 0 26.4939 79.45 93.9663 - 48 18.5321 1298 10 0 26.503 79.65 93.7865 - 48 142.719 1461 9 0 26.2728 112.421 64.15 - 48 75.4869 1494 9 0 88.5703 119.082 63.75 - 48 164.35 1495 9 0 88.8357 119.15 63.8708 - 48 86.0978 1352 9 1 90.5703 120.091 65.1502 - 48 74.3745 1353 9 1 90.75 120.237 65.2914 - 48 67.8175 1354 9 1 90.9503 120.335 65.3615 - 48 160.929 1355 9 1 91.1501 120.41 65.4189 - 48 56.089 1356 9 1 91.35 120.487 65.4668 - 48 121.507 1357 9 1 91.55 120.526 65.5362 -Number of digits in this event: 64 +Number of tracker hits in this event: 124 + 48 171.509 834 11 1 -13.0775 74.3941 125.55 + 48 140.465 1271 11 0 -13.0775 74.3937 124.15 + 48 149.886 834 10 1 -13.0773 74.3828 95.55 + 48 117.838 1271 10 0 -13.077 74.3827 94.15 + 48 117.512 834 9 1 -13.0674 74.3775 65.55 + 48 116.556 1271 9 0 -13.067 74.378 64.15 + 48 240.912 834 8 1 -13.0541 74.3856 35.55 + 48 92.6104 1271 8 0 -13.0543 74.3861 34.15 + 48 126.149 834 7 1 -13.0584 74.3967 5.55 + 48 123.614 1271 7 0 -13.0603 74.3973 4.15 + 48 490.216 834 6 1 -13.0982 74.4111 -24.45 + 48 421.489 1271 6 0 -13.0992 74.4111 -25.85 + 48 196.876 834 5 1 -13.1221 74.4106 -54.45 + 48 108.775 1271 5 0 -13.1229 74.4108 -55.85 + 48 186.097 834 4 1 -13.1407 74.4182 -84.45 + 48 135.517 1271 4 0 -13.1419 74.4186 -85.85 + 48 412.869 834 3 1 -13.1595 74.4269 -114.45 + 48 372.371 1271 3 0 -13.1597 74.4274 -115.85 + 48 572.209 834 2 1 -13.1599 74.4343 -144.45 + 48 232.245 1271 2 0 -13.1596 74.4341 -145.85 + 48 428.745 834 1 1 -13.1563 74.4276 -174.45 + 48 126.999 1271 1 0 -13.1578 74.4256 -175.85 + 48 140.428 834 0 1 -13.1894 74.388 -204.45 + 48 118.251 1271 0 0 -13.1911 74.3868 -205.85 + 48 222.399 816 7 1 -16.7931 -179.179 5.15 + 48 134.229 881 4 1 -3.80215 -27.0225 -84.45 + 48 138.7 1321 12 1 84.3416 -104.379 155.55 + 48 118.932 1320 12 1 84.25 -104.344 155.509 + 48 64.1842 1397 0 0 30.5891 99.55 -206.245 + 48 156.917 1272 2 0 -13.2196 74.4865 -145.85 + 48 503.583 1277 1 0 -13.1429 75.468 -175.85 + 48 98.0914 836 0 1 -12.7048 76.783 -204.45 + 48 378.174 1283 0 0 -12.7659 76.7099 -205.85 + 48 256.322 835 1 1 -13.0236 73.9535 -174.45 + 48 114.158 1269 1 0 -12.9925 73.9066 -175.85 + 48 124.496 839 0 1 -12.2277 73.05 -204.45 + 48 117.749 1264 0 0 -12.179 72.9947 -205.85 + 48 157.865 1272 3 0 -13.1921 74.5984 -115.85 + 48 393.409 1275 2 0 -13.0944 75.1574 -145.85 + 48 252.717 836 1 1 -12.7128 75.2629 -174.45 + 48 195.885 1275 1 0 -12.7567 75.1769 -175.85 + 48 129.151 830 0 1 -13.9835 73.3049 -204.45 + 48 125.151 1265 0 0 -13.9136 73.2174 -205.85 + 48 103.045 826 1 1 -14.7369 74.8166 -174.85 + 48 160.075 843 1 1 -11.2977 75.6421 -174.45 + 48 156.675 1278 1 0 -11.2444 75.651 -175.85 + 48 124.321 845 0 1 -11.0075 76.4543 -204.45 + 48 154.54 1282 0 0 -11.0365 76.594 -205.85 + 48 418.51 1276 1 0 -13.0607 75.39 -175.85 + 48 120.685 828 0 1 -14.3726 75.8902 -204.45 + 48 130.335 1279 0 0 -14.4299 75.8832 -205.85 + 48 169.521 1274 2 0 -13.1381 75.05 -146.075 + 48 121.572 825 2 1 -14.9516 71.961 -144.45 + 48 187.534 1259 2 0 -14.815 71.9285 -145.85 + 48 121.998 839 1 1 -12.1887 71.1513 -174.45 + 48 118.184 1255 1 0 -12.3498 71.1678 -175.85 + 48 248.215 824 0 1 -15.1049 71.9334 -204.45 + 48 159.404 1260 0 0 -14.9752 72.1158 -205.85 + 48 11.521 320 3 1 -116.109 104.246 -114.85 + 48 164.27 823 5 1 -15.3788 75.5637 -54.45 + 48 25.008 1277 5 0 -15.3914 75.6473 -55.85 + 48 100.107 1278 5 0 -15.3919 75.65 -55.8995 + 48 100.716 824 4 1 -15.0588 77.1188 -84.45 + 48 183.323 825 4 1 -15.05 77.1488 -84.6848 + 48 107.022 1286 4 0 -15.0004 77.2873 -85.85 + 48 126.748 831 3 1 -13.7289 80.5355 -114.45 + 48 28.8964 832 3 1 -13.65 80.4819 -114.75 + 48 66.7971 1301 3 0 -13.3725 80.2849 -115.85 + 48 487.675 1300 3 0 -13.3247 80.25 -116.049 + 48 14.5479 865 2 1 -6.86453 75.358 -144.45 + 48 100.63 866 2 1 -6.85 75.3563 -144.514 + 48 135.164 1276 2 0 -6.58351 75.3996 -145.85 + 48 76.6621 914 1 1 2.94522 78.7817 -174.45 + 48 75.7695 915 1 1 3.05 78.8585 -174.693 + 48 46.0909 1295 1 0 3.53835 79.1968 -175.85 + 48 79.344 1296 1 0 3.61139 79.25 -176.024 + 48 164.4 977 0 1 15.5335 86.9814 -204.45 + 48 116.628 1337 0 0 15.8742 87.5312 -205.85 + 48 23.1805 1338 0 0 15.952 87.65 -206.157 + 48 13.6644 742 3 1 -31.45 82.5655 -114.711 + 48 33.6819 1231 3 0 -23.0527 66.4252 -116.25 + 48 80.2803 883 3 0 18.8561 -3.40699 -116.25 + 48 51.3344 882 3 0 18.8793 -3.45027 -116.224 + 48 158.509 1329 3 0 14.6414 86.0079 -116.25 + 48 127.339 832 5 1 -13.4921 72.9667 -54.4502 + 48 161.117 1263 5 0 -13.5668 72.8145 -55.85 + 48 136.233 1246 4 0 -14.9357 69.4323 -85.85 + 48 224.12 823 3 1 -15.3337 68.2033 -114.45 + 48 72.3069 1240 3 0 -15.5267 68.0868 -115.85 + 48 57.7405 1239 3 0 -15.5476 68.05 -116.08 + 48 1.19399 813 2 1 -17.2552 63.6835 -144.45 + 48 86.444 814 2 1 -17.2497 63.6821 -144.456 + 48 68.1427 815 2 1 -17.0499 63.6246 -144.679 + 48 61.7148 1216 2 0 -16.0596 63.2989 -145.85 + 48 180.282 1215 2 0 -15.9397 63.2499 -145.994 + 48 148.303 916 1 1 3.42822 42.5547 -174.45 + 48 105.558 1113 1 0 3.27783 42.6766 -175.85 + 48 172.875 911 0 1 2.34503 48.2659 -204.45 + 48 259.172 910 0 1 2.25 48.7865 -204.58 + 48 0.0465341 909 0 1 2.05 49.5919 -204.85 + 48 24.6244 1159 0 0 1.28353 51.9692 -205.85 + 48 54.6839 1160 0 0 1.2604 52.05 -205.884 + 48 70.5891 1161 0 0 1.20463 52.2501 -205.961 + 48 137.433 1162 0 0 1.14469 52.4503 -206.042 + 48 70.6063 1163 0 0 1.07122 52.65 -206.126 + 48 39.9797 1164 0 0 1.00368 52.85 -206.21 + 48 398.568 1420 0 0 -46.2389 104.262 -206.25 + 48 7.12462 658 0 1 -48.4253 103.986 -204.85 + 48 44.0634 657 0 1 -48.4503 103.982 -204.833 + 48 94.4457 656 0 1 -48.65 103.958 -204.735 + 48 75.2797 655 0 1 -48.8505 103.942 -204.577 + 48 112.071 654 0 1 -49.05 104.139 -204.549 + 48 81.2812 653 0 1 -49.25 103.979 -204.667 + 48 100.358 652 0 1 -49.4504 103.932 -204.65 + 48 109.095 651 0 1 -49.65 103.727 -204.616 + 48 113.068 650 0 1 -49.8501 103.409 -204.521 + 48 78.4538 649 0 1 -50.05 103.321 -204.491 + 48 92.4575 648 0 1 -50.25 103.302 -204.568 + 48 61.5099 647 0 1 -50.4501 103.293 -204.664 + 48 160.307 1417 0 0 -51.1164 103.56 -205.85 + 48 62.595 1418 0 0 -51.3766 103.75 -206.109 + 48 71.0313 1419 0 0 -51.4505 103.95 -206.11 + 48 212.53 1575 0 0 -86.8683 135.168 -206.25 + 48 288.141 1574 0 0 -87.3663 135.15 -206.11 +Number of digits in this event: 68 Using G4ParticleGun... -Particle energy: 1.63343 LIN +Particle energy: 8.45686 LIN Particle: e- Event: 49 -Number of tracker hits in this event: 134 - 49 234.791 1170 11 1 54.2182 25.1111 125.55 - 49 123.311 1025 11 0 54.2248 25.1132 124.15 - 49 134.469 1171 10 1 54.3608 25.1704 95.55 - 49 174.986 1025 10 0 54.3615 25.182 94.15 - 49 122.419 1171 9 1 54.3739 25.4136 65.55 - 49 115.044 1026 9 0 54.3711 25.4233 64.15 - 49 108.271 1171 8 1 54.2776 25.6394 35.55 - 49 103.25 1027 8 0 54.2791 25.6469 34.15 - 49 116.699 1171 7 1 54.2695 25.7654 5.55 - 49 141.744 1028 7 0 54.2692 25.7724 4.15 - 49 184.519 1171 6 1 54.2921 25.923 -24.45 - 49 119.373 1029 6 0 54.2879 25.939 -25.85 - 49 174.92 1170 5 1 54.2484 26.2173 -54.45 - 49 112.899 1030 5 0 54.237 26.2355 -55.85 - 49 114.543 1169 4 1 53.9387 26.6343 -84.45 - 49 156.008 1032 4 0 53.9039 26.6211 -85.85 - 49 124.816 1165 3 1 53.1111 26.2692 -114.45 - 49 148.804 1030 3 0 53.0533 26.1727 -115.85 - 49 154.594 1157 2 1 51.6105 24.3378 -144.45 - 49 114.015 1021 2 0 51.5127 24.3248 -145.85 - 49 145.707 1147 1 1 49.517 23.9814 -174.451 - 49 100.092 1019 1 0 49.4516 24.0132 -175.85 - 49 150.933 1145 0 1 49.088 21.7431 -204.45 - 49 139.721 1006 0 0 49.1295 21.349 -205.851 - 49 32.4877 1005 0 0 49.1469 21.25 -206.185 - 49 274.884 1137 0 1 47.5243 22.9885 -204.45 - 49 211.749 1014 0 0 47.4889 22.9021 -205.851 - 49 100.195 1158 1 1 51.7783 27.6527 -174.45 - 49 209.037 1038 1 0 51.7316 27.6605 -175.85 - 49 137.114 1152 0 1 50.6479 27.8682 -204.45 - 49 67.0542 1039 0 0 50.5909 27.8525 -205.85 - 49 83.5534 1038 0 0 50.5816 27.85 -206.078 - 49 123.969 1034 1 0 55.018 26.9839 -175.85 - 49 58.116 771 10 1 -25.65 -24.0775 95.2756 - 49 48.6669 775 10 1 -25.0199 -25.709 95.55 - 49 197.921 774 10 1 -25.05 -25.7558 95.4725 - 49 35.5271 773 10 1 -25.25 -25.8056 95.4778 - 49 230.589 1173 7 1 54.6601 25.2502 5.55 - 49 89.6324 1026 7 0 54.656 25.2512 4.15 - 49 25.7635 1025 7 0 54.6564 25.25 3.82183 - 49 13.2743 1173 6 1 54.6534 25.316 -24.4504 - 49 95.328 1172 6 1 54.65 25.3159 -24.4895 - 49 103.882 1026 6 0 54.5448 25.3069 -25.85 - 49 129.375 1162 5 1 52.6176 25.2707 -54.4502 - 49 110.105 1027 5 0 52.3429 25.4739 -55.85 - 49 109.725 1133 4 1 46.7444 29.0284 -84.45 - 49 1.72746 1132 4 1 46.6498 29.0796 -84.8434 - 49 76.8106 1045 4 0 46.3755 29.2122 -85.8503 - 49 46.0399 1046 4 0 46.3046 29.25 -86.1239 - 49 123.818 1096 3 1 39.4191 33.3581 -114.451 - 49 104.384 1067 3 0 39.0475 33.5981 -115.85 - 49 25.1441 1068 3 0 38.9661 33.65 -116.152 - 49 41.5712 1054 2 1 30.9177 36.8569 -144.45 - 49 110.639 1053 2 1 30.85 36.8914 -144.554 - 49 131.501 1086 2 0 30.0376 37.3052 -145.85 - 49 6.88055 951 1 1 10.2655 46.8987 -174.45 - 49 81.2058 950 1 1 10.25 46.9063 -174.465 - 49 160.893 949 1 1 10.05 47.0152 -174.668 - 49 105.562 1138 1 0 8.86131 47.7097 -175.85 - 49 63.8643 1139 1 0 8.60804 47.8503 -176.103 - 49 59.8937 803 0 1 -19.4057 63.3518 -204.45 - 49 185.537 802 0 1 -19.45 63.4618 -204.566 - 49 23.6072 1223 0 0 -19.8649 64.8038 -205.85 - 49 97.8343 1224 0 0 -19.8793 64.85 -205.894 - 49 93.3367 1225 0 0 -19.9482 65.05 -206.083 - 49 20.6355 1216 0 0 -19.7922 63.2698 -205.85 - 49 304.685 1215 0 0 -19.8127 63.25 -205.917 - 49 74.8622 1214 0 0 -20.4122 63.05 -206.146 - 49 78.2714 1213 0 0 -20.5536 62.8498 -206.132 - 49 10.4564 1212 0 0 -20.6131 62.65 -206.242 - 49 144.542 950 0 0 -9.11845 10.0685 -206.25 - 49 73.8183 949 0 0 -9.12156 10.0498 -205.935 - 49 148.857 849 0 1 -10.1428 10.054 -204.85 - 49 96.1509 1172 7 1 54.65 25.2461 5.49434 - 49 106.791 1024 7 0 54.3626 24.9375 4.14934 - 49 20.1576 1023 7 0 54.3002 24.85 3.82454 - 49 108.172 982 7 0 61.8138 16.5265 3.75 - 49 6.48434 983 7 0 62.0193 16.6501 4.11623 - 49 41.024 1212 7 1 62.6025 17.0751 5.15 - 49 120.992 1213 7 1 62.65 17.109 5.23217 - 49 26.5614 827 8 0 32.2045 -14.5692 33.75 - 49 51.4685 826 8 0 32.1532 -14.65 33.8045 - 49 135.974 825 8 0 32.0715 -14.85 33.8785 - 49 77.187 824 8 0 31.9321 -15.05 33.9441 - 49 104.25 823 8 0 31.7249 -15.2501 33.9542 - 49 192.667 822 8 0 31.3977 -15.45 34.0346 - 49 220.248 821 8 0 30.9503 -15.65 34.0587 - 49 12.3663 1039 8 1 27.8966 -15.6962 35.15 - 49 74.219 1038 8 1 27.8499 -15.6919 35.1729 - 49 92.4285 1037 8 1 27.65 -15.7806 35.2466 - 49 70.9824 1036 8 1 27.45 -15.9677 35.3231 - 49 180.5 1035 8 1 27.25 -16.2059 35.3721 - 49 119.757 1034 8 1 27.05 -16.6991 35.4726 - 49 110.201 1033 8 1 26.85 -17.0623 35.3671 - 49 30.7652 1032 8 1 26.65 -17.0654 35.2175 - 49 142.085 806 8 0 24.66 -18.673 34.15 - 49 266.304 803 8 0 26.9351 -19.2807 33.75 - 49 137.616 1171 11 1 54.25 25.1351 125.425 - 49 133.289 1026 11 0 54.6225 25.3489 124.15 - 49 135.257 1221 10 1 64.3109 32.355 95.55 - 49 110.877 1061 10 0 64.145 32.4202 94.15 - 49 148.345 1196 9 1 59.2661 33.0789 65.5498 - 49 47.8791 1070 9 0 59.4277 34.1757 64.15 - 49 112.841 1071 9 0 59.4377 34.25 64.0536 - 49 2.0044 1072 9 0 59.4626 34.45 63.7613 - 49 57.7667 1202 8 1 60.6068 52.8695 35.5499 - 49 72.1907 1201 8 1 60.4499 52.9379 35.428 - 49 49.7262 1200 8 1 60.25 53.0282 35.2555 - 49 189.401 1168 8 0 59.0034 53.6563 34.15 - 49 16.7496 1259 8 0 20.3932 72.0349 33.75 - 49 134.997 1260 8 0 20.4019 72.05 33.8027 - 49 17.0682 1261 8 0 20.4482 72.25 34.1097 - 49 190.78 1001 8 1 20.3872 74.3168 35.15 - 49 487.885 1002 8 1 20.45 74.7267 35.3908 - 49 122.409 1024 11 0 54.6324 25.0414 124.15 - 49 141.626 1203 10 1 60.7075 24.0094 95.55 - 49 57.5095 1024 10 0 60.7376 24.8801 94.15 - 49 67.2891 1195 9 1 59.0914 53.2448 65.55 - 49 123.81 1194 9 1 59.0499 53.3147 65.3259 - 49 6.17821 1168 9 0 58.7847 53.8377 64.15 - 49 115.993 1169 9 0 58.7787 53.85 64.1233 - 49 62.2064 1105 8 1 41.1354 60.3025 35.55 - 49 71.898 1104 8 1 41.05 60.3083 35.375 - 49 14.5555 1202 8 0 40.6556 60.6339 34.15 - 49 100.21 1203 8 0 40.6338 60.65 34.0806 - 49 99.1936 1089 7 1 38.0075 59.2516 5.55 - 49 80.6764 1088 7 1 37.85 59.4413 5.33988 - 49 103.188 1203 7 0 36.631 60.6602 4.15 - 49 124.284 1204 7 0 36.4255 60.85 3.97514 - 49 100.489 937 6 1 7.50321 75.3538 -24.45 - 49 22.8833 938 6 1 7.65 75.2405 -24.7682 - 49 102.7 1275 6 0 7.8308 75.2283 -25.8501 - 49 63.5976 1260 6 0 -50.2667 72.0555 -26.25 - 49 8.3898 1504 7 0 -39.6234 121.078 3.75 -Number of digits in this event: 52 +Number of tracker hits in this event: 30 + 49 180.085 1370 9 1 94.2223 86.5053 65.55 + 49 91.7826 1332 9 0 94.2231 86.5048 64.15 + 49 300.676 1370 8 1 94.24 86.4969 35.55 + 49 119.677 1332 8 0 94.242 86.4967 34.15 + 49 108.53 1370 7 1 94.2956 86.4987 5.55 + 49 132.183 1332 7 0 94.2981 86.4983 4.15 + 49 96.2622 1370 6 1 94.3479 86.4854 -24.45 + 49 113.25 1332 6 0 94.3507 86.4846 -25.85 + 49 94.3629 1371 5 1 94.407 86.4722 -54.45 + 49 163.279 1332 5 0 94.4091 86.4713 -55.85 + 49 458.145 1371 4 1 94.4526 86.4536 -84.45 + 49 289.891 1332 4 0 94.4552 86.4531 -85.85 + 49 150.271 1371 3 1 94.5076 86.4427 -114.45 + 49 109.137 1331 3 0 94.5105 86.442 -115.85 + 49 144.656 1372 2 1 94.5643 86.4268 -144.45 + 49 152.886 1331 2 0 94.5666 86.4263 -145.85 + 49 359.329 1372 1 1 94.6164 86.4176 -174.45 + 49 377.681 1331 1 0 94.6192 86.4172 -175.85 + 49 108.762 1372 0 1 94.6782 86.4061 -204.45 + 49 441.786 1331 0 0 94.6809 86.4045 -205.85 + 49 107.655 1373 0 1 94.8076 86.4263 -204.45 + 49 24.5031 1668 5 1 153.855 37.5248 -54.85 + 49 120.03 1669 5 1 153.95 37.4519 -54.5571 + 49 117.605 1369 0 1 93.9812 86.4315 -204.45 + 49 194.163 1332 0 0 93.9133 86.45 -205.959 + 49 48.3315 1334 4 0 94.6434 86.9061 -85.85 + 49 112.731 1333 4 0 94.755 86.8498 -85.9725 + 49 127.54 1372 4 1 94.55 86.332 -84.7736 + 49 267.469 878 4 0 171.231 -4.29476 -86.25 + 49 240.984 1523 0 1 124.774 98.9954 -204.85 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 1.70586 LIN +Particle energy: 9.28911 LIN Particle: e- Event: 50 -Number of tracker hits in this event: 43 - 50 111.581 574 10 1 -65.1854 56.9877 95.55 - 50 122.398 1184 10 0 -65.1824 56.9902 94.15 - 50 100.78 574 9 1 -65.1099 57.0248 65.55 - 50 171.944 1184 9 0 -65.1095 57.0235 64.15 - 50 392.136 574 8 1 -65.113 56.9839 35.55 - 50 97.2914 1184 8 0 -65.1141 56.9827 34.15 - 50 124.139 574 7 1 -65.1493 56.9572 5.55 - 50 107.229 1184 7 0 -65.1528 56.9496 4.15 - 50 142.648 574 6 1 -65.2142 56.7823 -24.45 - 50 242.337 1183 6 0 -65.2169 56.7736 -25.85 - 50 125.718 573 5 1 -65.2738 56.6085 -54.45 - 50 124.527 1182 5 0 -65.2665 56.6088 -55.85 - 50 114.619 574 4 1 -65.091 56.6076 -84.45 - 50 91.6713 1182 4 0 -65.0895 56.5923 -85.85 - 50 138.26 574 3 1 -65.0733 56.2913 -114.45 - 50 164.592 1180 3 0 -65.049 56.1738 -115.85 - 50 140.354 577 2 1 -64.6023 53.7772 -144.45 - 50 122.392 1168 2 0 -64.6288 53.7595 -145.85 - 50 157.759 574 1 1 -65.1257 53.462 -174.45 - 50 180.186 1166 1 0 -65.1674 53.4366 -175.85 - 50 199.015 569 0 1 -66.1254 52.7143 -204.45 - 50 92.2967 1163 0 0 -66.1986 52.6733 -205.85 - 50 279.916 573 3 1 -65.3752 56.3517 -114.45 - 50 246.389 1181 3 0 -65.331 56.3085 -115.85 - 50 137.833 578 2 1 -64.3159 55.4238 -144.45 - 50 104.708 1176 2 0 -64.3103 55.2981 -145.85 - 50 116.564 578 1 1 -64.4431 52.6932 -174.45 - 50 107.346 1162 1 0 -64.4043 52.595 -175.85 - 50 126.863 582 0 1 -63.4814 51.1113 -204.45 - 50 128.05 1155 0 0 -63.4922 51.1704 -205.85 - 50 124.407 572 2 1 -65.6345 56.3366 -144.45 - 50 102.466 1181 2 0 -65.6473 56.3217 -145.85 - 50 132.875 570 1 1 -65.9164 55.9545 -174.45 - 50 144.637 1179 1 0 -65.9412 55.9274 -175.85 - 50 246.49 568 0 1 -66.3394 55.3694 -204.45 - 50 188.371 1176 0 0 -66.3793 55.3417 -205.85 - 50 162.14 1173 0 0 -66.2237 54.8183 -205.85 - 50 78.6573 1172 0 0 -66.4971 54.65 -206.162 - 50 16.2391 925 0 0 -45.0512 5.1568 -206.25 - 50 135.714 538 0 0 -49.5891 -72.3546 -206.25 - 50 93.7613 1505 7 1 121.206 153.208 5.15 - 50 221.104 1504 7 1 121.15 153.148 5.28924 - 50 181.124 575 8 1 -65.0497 56.8881 35.3798 -Number of digits in this event: 31 -Using G4ParticleGun... -Particle energy: 4.50398 LIN -Particle: e- -Event: 51 -Number of tracker hits in this event: 36 - 51 126.564 1192 11 1 58.5957 23.1995 125.55 - 51 114.377 1015 11 0 58.5935 23.1998 124.15 - 51 174.254 1192 10 1 58.5515 23.2062 95.55 - 51 107.406 1015 10 0 58.5501 23.2054 94.15 - 51 141.259 1192 9 1 58.5185 23.1813 65.55 - 51 123.484 1015 9 0 58.5163 23.1813 64.15 - 51 145.81 1192 8 1 58.4735 23.181 35.55 - 51 149.722 1015 8 0 58.4714 23.1816 34.15 - 51 182.55 1191 7 1 58.4222 23.1879 5.55 - 51 119.692 1015 7 0 58.4213 23.1883 4.15 - 51 102.314 1191 6 1 58.4183 23.2032 -24.45 - 51 112.965 1015 6 0 58.4174 23.2046 -25.85 - 51 222.817 1191 5 1 58.4037 23.2391 -54.45 - 51 121.92 1015 5 0 58.4048 23.2418 -55.85 - 51 218.968 1191 4 1 58.4355 23.2906 -84.45 - 51 130.567 1016 4 0 58.4349 23.2931 -85.85 - 51 112.128 1191 3 1 58.4475 23.3548 -114.45 - 51 138.26 1016 3 0 58.4493 23.3564 -115.85 - 51 118.241 1192 2 1 58.4852 23.391 -144.45 - 51 142.724 1016 2 0 58.4842 23.3938 -145.85 - 51 118.777 1192 1 1 58.4658 23.4448 -174.45 - 51 244.002 1016 1 0 58.4646 23.4485 -175.85 - 51 120.716 1191 0 1 58.4408 23.5252 -204.45 - 51 141.564 1017 0 0 58.4392 23.5289 -205.85 - 51 48.3114 1039 5 0 60.9016 27.9449 -55.85 - 51 200.688 1040 5 0 60.9241 28.05 -55.8631 - 51 49.1833 1013 5 0 58.0335 22.6866 -55.8502 - 51 86.2905 1012 5 0 58.033 22.65 -55.9487 - 51 188.251 1191 8 1 58.4281 23.0857 35.5499 - 51 104.851 1012 8 0 57.9695 22.6145 34.15 - 51 25.9566 1011 8 0 57.8513 22.45 33.8046 - 51 109.261 1166 2 0 1.69009 53.2733 -146.25 - 51 67.6587 1587 1 1 137.657 23.0128 -174.45 - 51 105.088 1586 1 1 137.55 23.1554 -174.59 - 51 244.532 1585 1 1 137.35 23.4274 -174.611 - 51 214.787 1584 1 1 137.15 23.523 -174.476 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 5.59346 LIN -Particle: e- -Event: 52 -Number of tracker hits in this event: 90 - 52 126.828 949 8 1 10.0222 -136.379 35.55 - 52 122.903 218 8 0 10.0223 -136.379 34.15 - 52 116.919 949 7 1 10.0169 -136.383 5.55 - 52 125.164 218 7 0 10.0168 -136.382 4.15 - 52 121.186 949 6 1 10.003 -136.367 -24.45 - 52 142.453 218 6 0 10.0028 -136.368 -25.85 - 52 98.2421 949 5 1 10.0048 -136.405 -54.45 - 52 142.96 218 5 0 10.0009 -136.408 -55.85 - 52 712.167 949 4 1 9.91526 -136.462 -84.45 - 52 379.096 218 4 0 9.91436 -136.467 -85.85 - 52 121.655 949 3 1 9.89407 -136.581 -114.45 - 52 114.896 217 3 0 9.89602 -136.587 -115.85 - 52 475.243 949 2 1 9.93734 -136.725 -144.45 - 52 101.799 217 2 0 9.93727 -136.73 -145.85 - 52 264.563 949 1 1 9.94396 -136.833 -174.45 - 52 168.594 216 1 0 9.94492 -136.834 -175.85 - 52 580.478 949 0 1 9.96281 -136.854 -204.45 - 52 285.83 216 0 0 9.96572 -136.856 -205.85 - 52 78.1978 1 0 0 59.2239 -179.75 -205.926 - 52 10.318 2 0 0 59.395 -179.75 -205.86 - 52 31.0796 1202 0 1 60.588 -178.767 -204.85 - 52 92.6828 1203 0 1 60.65 -178.784 -204.815 - 52 98.9863 5 0 0 61.3503 -179.031 -205.85 - 52 59.7429 259 0 0 -8.4297 -128.243 -206.25 - 52 111.158 260 0 0 -8.58531 -128.15 -206.09 - 52 100.366 851 0 1 -9.66365 -127.312 -204.85 - 52 81.0325 850 0 1 -9.85042 -127.159 -204.636 - 52 164.316 264 1 0 -25.3793 -127.315 -176.25 - 52 6.24637 770 1 1 -26.0385 -127.387 -174.85 - 52 214.954 769 1 1 -26.05 -127.388 -174.825 - 52 156.075 274 2 0 -50.9216 -125.211 -146.25 - 52 30.9774 638 2 1 -52.439 -125.119 -144.85 - 52 162.516 637 2 1 -52.45 -125.118 -144.84 - 52 380.894 636 2 1 -52.65 -125.094 -144.648 - 52 402.429 635 2 1 -52.8501 -125.061 -144.464 - 52 325.406 292 2 0 -51.3227 -121.73 -145.85 - 52 44.3983 293 2 0 -51.2501 -121.55 -145.884 - 52 97.7504 642 2 1 -51.5758 -118.961 -144.85 - 52 70.3052 643 2 1 -51.45 -118.696 -144.733 - 52 183.632 644 2 1 -51.25 -118.704 -144.63 - 52 3.59968 599 2 1 -60.05 -25.1796 -144.647 - 52 322.244 950 0 1 10.05 -136.726 -204.636 - 52 126.102 964 3 1 12.8696 -137.328 -114.45 - 52 136.476 213 3 0 12.9597 -137.351 -115.85 - 52 123.684 973 2 1 14.7839 -138.011 -144.45 - 52 117.476 210 2 0 14.9117 -138.111 -145.85 - 52 18.2485 990 1 1 18.2431 -139.715 -174.45 - 52 111.382 991 1 1 18.25 -139.718 -174.496 - 52 184.708 201 1 0 18.4608 -139.805 -175.85 - 52 120.789 1015 0 1 23.0581 -141.573 -204.45 - 52 73.2695 192 0 0 23.2699 -141.731 -205.85 - 52 76.4905 191 0 0 23.295 -141.75 -206.017 - 52 220.552 975 1 1 15.0645 -140.14 -174.45 - 52 44.885 203 1 0 15.3804 -139.498 -175.85 - 52 78.2496 978 1 1 15.7749 -139.084 -174.85 - 52 51.9013 979 1 1 15.8502 -139.031 -174.572 - 52 129.743 211 2 0 19.739 -137.938 -146.25 - 52 56.5967 212 2 0 19.9917 -137.75 -145.924 - 52 184.873 1004 2 1 20.9886 -134.04 -144.85 - 52 372.131 1005 2 1 21.05 -133.793 -144.708 - 52 21.4911 241 2 0 21.6147 -131.836 -145.85 - 52 46.8813 998 2 1 19.6961 -128.339 -144.85 - 52 70.9511 997 2 1 19.65 -128.32 -144.828 - 52 99.3847 948 3 1 9.65549 -136.025 -114.45 - 52 228.859 220 3 0 9.66387 -135.988 -115.85 - 52 35.0357 224 2 0 9.9263 -135.152 -145.85 - 52 80.4238 225 2 0 9.9251 -135.15 -145.978 - 52 122.831 947 1 1 9.59574 -134.672 -174.45 - 52 140.141 227 1 0 9.59095 -134.63 -175.85 - 52 164 947 0 1 9.54652 -133.793 -204.45 - 52 161.044 232 0 0 9.53242 -133.747 -205.85 - 52 114.408 1134 11 1 46.8708 -65.5068 125.15 - 52 10.0898 556 12 0 55.7648 -68.8081 153.75 - 52 71.8369 555 12 0 55.8411 -68.85 153.958 - 52 77.8786 1182 12 1 56.6253 -69.0046 155.15 - 52 58.6128 1183 12 1 56.65 -69.0213 155.39 - 52 270.821 219 4 0 10.0526 -136.267 -85.85 - 52 292.738 950 3 1 10.2027 -136.066 -114.45 - 52 126.872 952 2 1 10.6337 -135.883 -144.45 - 52 175.591 221 2 0 10.6549 -135.873 -145.85 - 52 116.33 955 1 1 11.1226 -135.698 -174.45 - 52 155.875 222 1 0 11.1535 -135.68 -175.85 - 52 126.971 958 0 1 11.8046 -135.292 -204.45 - 52 109.755 224 0 0 11.8332 -135.271 -205.85 - 52 105.157 219 3 0 10.0906 -136.332 -115.85 - 52 132.975 218 2 0 10.0396 -136.509 -145.85 - 52 166.393 217 1 0 9.88782 -136.709 -175.85 - 52 117.668 948 0 1 9.72868 -136.925 -204.45 - 52 25.5668 135 0 0 18.014 -153.085 -206.25 - 52 145.282 134 0 0 17.9859 -153.15 -205.997 -Number of digits in this event: 49 -Using G4ParticleGun... -Particle energy: 4.66282 LIN -Particle: e- -Event: 53 -Number of tracker hits in this event: 64 - 53 100.585 1278 9 1 75.6555 -99.5002 65.55 - 53 158.594 403 9 0 75.6554 -99.4994 64.15 - 53 131.415 1278 8 1 75.6518 -99.4882 35.55 - 53 140.869 403 8 0 75.6514 -99.4895 34.15 - 53 281.45 1277 7 1 75.6291 -99.5214 5.55 - 53 116.604 403 7 0 75.627 -99.5228 4.15 - 53 105.257 1277 6 1 75.5792 -99.5547 -24.45 - 53 113.283 402 6 0 75.5747 -99.5566 -25.85 - 53 128.499 1277 5 1 75.4792 -99.6168 -54.45 - 53 115.922 402 5 0 75.4825 -99.6215 -55.85 - 53 272.397 1277 4 1 75.546 -99.6885 -84.45 - 53 281.115 402 4 0 75.5373 -99.692 -85.85 - 53 233.834 1276 3 1 75.3551 -99.7181 -114.45 - 53 126.817 402 3 0 75.3462 -99.721 -115.85 - 53 395.921 1275 2 1 75.1489 -99.7865 -144.45 - 53 117.821 401 2 0 75.1329 -99.7883 -145.85 - 53 99.223 1273 1 1 74.8 -99.8227 -174.45 - 53 180.705 401 1 0 74.7743 -99.8239 -175.85 - 53 104.203 1270 0 1 74.2396 -99.8402 -204.45 - 53 229.858 401 0 0 74.2162 -99.8461 -205.85 - 53 531.654 1273 0 1 74.7755 -99.6254 -204.45 - 53 87.7535 1272 0 1 74.65 -99.6067 -204.642 - 53 271.075 402 0 0 73.7588 -99.7275 -205.85 - 53 187.386 401 4 0 75.4805 -99.7896 -85.85 - 53 53.9589 1277 3 1 75.4641 -100.439 -114.45 - 53 8.9226 398 3 0 75.4396 -100.545 -115.851 - 53 112.792 397 3 0 75.4389 -100.55 -115.903 - 53 138.605 1278 2 1 75.7481 -101.517 -144.45 - 53 182.883 397 2 0 76.0398 -100.663 -145.85 - 53 54.789 398 2 0 76.0808 -100.55 -146.043 - 53 144.258 1293 1 1 78.764 -83.6729 -174.45 - 53 61.3076 483 1 0 78.6928 -83.3023 -175.85 - 53 43.2416 484 1 0 78.6821 -83.25 -176.092 - 53 131.739 1307 0 1 81.5971 -77.3173 -204.45 - 53 2.14407 1308 0 1 81.65 -77.2529 -204.84 - 53 137.37 514 0 0 81.8855 -77.1093 -205.85 - 53 30.2006 460 0 0 42.1692 -87.9568 -206.25 - 53 222.156 367 0 0 6.37389 -106.581 -206.25 - 53 36.6081 368 0 0 6.27882 -106.55 -206.158 - 53 73.7637 366 0 0 6.29467 -106.75 -206.097 - 53 59.483 398 5 0 162.559 -100.35 -56.1892 - 53 196.981 850 5 0 84.412 -9.92052 -56.25 - 53 48.4331 494 1 0 89.9837 -81.1659 -175.85 - 53 31.4904 612 3 1 -57.5018 76.5234 -114.85 - 53 242.921 1276 4 1 75.45 -99.7524 -84.5977 - 53 78.4168 1253 3 1 70.7431 -99.1315 -114.45 - 53 42.5673 1252 3 1 70.6499 -99.1267 -114.71 - 53 120.093 404 3 0 70.2196 -99.1736 -115.85 - 53 117.482 1206 2 1 61.4387 -100.966 -144.45 - 53 149.189 395 2 0 61.4053 -100.998 -145.851 - 53 95.4807 1204 1 1 60.9678 -101.149 -174.45 - 53 79.2392 1203 1 1 60.85 -101.226 -174.626 - 53 53.3201 391 1 0 60.1631 -101.904 -175.85 - 53 111.145 390 1 0 60.1215 -101.95 -175.929 - 53 1.49309 389 1 0 59.9754 -102.15 -176.243 - 53 121.264 1155 0 1 51.1761 -119.675 -204.45 - 53 8.64688 299 0 0 50.9389 -120.341 -205.85 - 53 117.213 298 0 0 50.9361 -120.35 -205.868 - 53 3.38826 297 0 0 50.8978 -120.55 -206.238 - 53 0.864243 893 1 0 3.27065 -1.25 -176 - 53 270.673 423 1 0 47.8442 -95.4771 -175.85 - 53 62.5282 1275 4 1 75.25 -99.6379 -84.6544 - 53 167.6 399 4 0 74.7049 -100.247 -85.85 - 53 47.8342 398 4 0 74.6654 -100.35 -86.0944 -Number of digits in this event: 31 -Using G4ParticleGun... -Particle energy: 4.11621 LIN -Particle: e- -Event: 54 -Number of tracker hits in this event: 110 - 54 146.125 941 11 1 8.29982 58.9375 125.55 - 54 154.987 1194 11 0 8.30047 58.9376 124.15 - 54 121.558 941 10 1 8.3217 58.9348 95.55 - 54 136.822 1194 10 0 8.32369 58.9335 94.15 - 54 141.15 941 9 1 8.36769 58.9112 65.55 - 54 174.209 1194 9 0 8.37061 58.9126 64.15 - 54 353.598 941 8 1 8.42431 58.9249 35.55 - 54 114.164 1194 8 0 8.42652 58.9263 34.15 - 54 109.758 942 7 1 8.48546 58.9581 5.55 - 54 291.384 1194 7 0 8.48591 58.9596 4.15 - 54 108.489 942 6 1 8.49244 59.0007 -24.45 - 54 150.326 1194 6 0 8.49398 59.0007 -25.85 - 54 172.669 942 5 1 8.52391 58.999 -54.45 - 54 121.911 1194 5 0 8.52322 59.0008 -55.85 - 54 261.459 942 4 1 8.50671 59.0392 -84.45 - 54 110.602 1194 4 0 8.50807 59.04 -85.85 - 54 112.915 942 3 1 8.52805 59.0651 -114.45 - 54 132.797 1195 3 0 8.53111 59.0671 -115.85 - 54 183.095 942 2 1 8.58692 59.1146 -144.45 - 54 173.249 1195 2 0 8.59066 59.1181 -145.85 - 54 163.566 943 1 1 8.6759 59.1952 -174.45 - 54 102.313 1195 1 0 8.68106 59.1978 -175.85 - 54 108.873 943 0 1 8.79401 59.2565 -204.45 - 54 148.119 1196 0 0 8.7963 59.2596 -205.85 - 54 122.372 942 8 1 8.45006 58.7727 35.4203 - 54 211.436 941 7 1 8.43459 58.871 5.54995 - 54 108.246 955 6 1 11.0638 60.0361 -24.45 - 54 116.339 1198 6 0 11.4344 59.8289 -25.85 - 54 119.979 1002 5 1 20.4715 56.5704 -54.45 - 54 7.77839 1003 5 1 20.65 56.6119 -54.8309 - 54 111.129 1183 5 0 21.142 56.6856 -55.85 - 54 99.4692 1088 4 1 37.6576 60.0959 -84.45 - 54 52.0538 1089 4 1 37.85 60.183 -84.7054 - 54 73.6622 1202 4 0 38.7371 60.5879 -85.85 - 54 87.3709 1203 4 0 38.8812 60.6501 -86.0307 - 54 64.5015 1212 3 1 62.5818 70.8983 -114.45 - 54 88.862 1213 3 1 62.6502 70.9297 -114.499 - 54 55.873 1214 3 1 62.8502 71.0295 -114.646 - 54 16.5791 1215 3 1 63.0504 71.1232 -114.8 - 54 58.6851 1258 3 0 64.4525 71.7825 -115.85 - 54 193.637 1259 3 0 64.5961 71.85 -115.951 - 54 0.598871 1260 3 0 65.0244 72.05 -116.249 - 54 154.673 1432 2 1 106.688 90.15 -144.459 - 54 78.3027 1352 2 0 106.752 90.6603 -145.85 - 54 30.843 1353 2 0 106.773 90.75 -146.139 - 54 50.6019 1553 0 1 130.825 107.295 -204.45 - 54 155.838 1552 0 1 130.75 107.396 -204.533 - 54 96.6316 1551 0 1 130.55 107.546 -204.644 - 54 107.889 1550 0 1 130.35 107.693 -204.74 - 54 7.63355 1549 0 1 130.15 107.952 -204.839 - 54 2.18651 1449 0 0 127.28 110.149 -205.85 - 54 69.8059 1450 0 0 127.279 110.15 -205.85 - 54 66.2896 1451 0 0 127.097 110.35 -205.973 - 54 63.4374 1452 0 0 126.972 110.55 -206.053 - 54 280.102 1453 0 0 126.847 110.75 -206.137 - 54 109.059 1454 0 0 126.462 110.95 -206.114 - 54 81.3304 1455 0 0 126.189 111.15 -205.99 - 54 55.0562 1456 0 0 125.951 111.35 -205.882 - 54 80.8635 1507 0 1 121.618 111.773 -204.85 - 54 65.2598 1506 0 1 121.55 111.781 -204.833 - 54 38.6366 1505 0 1 121.35 111.804 -204.828 - 54 59.0913 1504 0 1 121.15 111.841 -204.816 - 54 25.0891 1503 0 1 120.95 111.935 -204.819 - 54 7.6868 1471 0 0 119.336 114.529 -205.85 - 54 328.04 1472 0 0 119.323 114.55 -205.859 - 54 369.058 1473 0 0 119.123 114.751 -205.926 - 54 63.2791 1474 0 0 117.902 114.95 -205.991 - 54 137.386 1475 0 0 117.863 115.15 -206.018 - 54 65.0134 1476 0 0 117.877 115.35 -206.054 - 54 112.783 1477 0 0 117.862 115.55 -206.063 - 54 224.247 1447 0 0 144.333 109.552 -206.25 - 54 149.745 1528 0 1 125.77 111.65 -204.85 - 54 374.719 1263 4 0 120.531 72.7833 -86.25 - 54 3.0898 1524 4 1 125.139 75.0025 -84.85 - 54 56.6565 1525 4 1 125.15 75.0093 -84.8469 - 54 265.991 1526 4 1 125.35 75.1244 -84.808 - 54 89.9602 1527 4 1 125.55 75.3019 -84.7745 - 54 576.463 1528 4 1 125.75 75.5171 -84.7622 - 54 65.8454 1289 4 0 125.788 77.9622 -85.85 - 54 263.014 1290 4 0 125.78 78.05 -85.9302 - 54 85.5547 1291 4 0 125.743 78.25 -86.0904 - 54 2.80923 1280 4 0 116.276 76.0594 -86.2499 - 54 109.895 1279 4 0 116.272 76.05 -86.243 - 54 110.535 1278 4 0 116.056 75.85 -86.0744 - 54 420.32 1470 4 1 114.28 76.5024 -84.85 - 54 173.728 1471 4 1 114.35 76.9702 -84.7075 - 54 140.844 1195 7 0 8.2145 59.0887 4.15 - 54 302.002 919 6 1 4.04722 63.0954 -24.45 - 54 167.373 1215 6 0 3.81267 63.0701 -25.85 - 54 300.831 896 5 1 -0.818971 62.4359 -54.45 - 54 103.32 1212 5 0 -0.897707 62.5013 -55.85 - 54 48.2386 885 4 1 -2.85946 63.5862 -84.45 - 54 96.7128 886 4 1 -2.85 63.5863 -84.5626 - 54 93.228 1217 4 0 -2.74071 63.5951 -85.8501 - 54 302.964 899 3 1 -0.192849 64.1186 -114.45 - 54 159.422 1220 3 0 -0.130549 64.2347 -115.85 - 54 101.118 1221 3 0 -0.122036 64.25 -116.017 - 54 98.733 908 2 1 1.68163 67.6496 -144.45 - 54 90.3641 1238 2 0 1.58942 67.7563 -145.85 - 54 115.657 895 1 1 -0.939968 69.4543 -174.45 - 54 117.891 1246 1 0 -0.909686 69.3261 -175.85 - 54 118.546 897 0 1 -0.486607 66.7955 -204.45 - 54 114.841 1233 0 0 -0.375495 66.7347 -205.85 - 54 104.675 895 5 1 -0.869192 62.4248 -54.45 - 54 80.5166 1203 5 0 -1.05502 60.8275 -55.85 - 54 138.628 1202 5 0 -0.997708 60.6499 -56.0244 - 54 26.7018 1320 5 0 -37.06 84.2347 -56.2499 - 54 260.571 1321 5 0 -37.1024 84.25 -56.1988 - 54 83.9106 716 5 1 -36.8198 86.3538 -54.85 - 54 35.8673 715 5 1 -36.8501 86.4039 -54.8359 -Number of digits in this event: 43 -Using G4ParticleGun... -Particle energy: 6.61005 LIN -Particle: e- -Event: 55 -Number of tracker hits in this event: 113 - 55 122.997 543 11 1 -71.2749 -9.75484 125.55 - 55 133.769 851 11 0 -71.2752 -9.75416 124.15 - 55 142.377 543 10 1 -71.2766 -9.73126 95.55 - 55 101.809 851 10 0 -71.2767 -9.73143 94.15 - 55 161.904 543 9 1 -71.2788 -9.73661 65.55 - 55 142.854 851 9 0 -71.2798 -9.73765 64.15 - 55 145.579 543 8 1 -71.3087 -9.75674 35.55 - 55 274.74 851 8 0 -71.31 -9.75709 34.15 - 55 114.723 543 7 1 -71.3315 -9.76355 5.55 - 55 105.101 851 7 0 -71.3332 -9.76342 4.15 - 55 113.968 543 6 1 -71.3719 -9.75543 -24.45 - 55 106.196 851 6 0 -71.3721 -9.75536 -25.85 - 55 414.745 543 5 1 -71.3669 -9.75658 -54.45 - 55 354.487 851 5 0 -71.3646 -9.75559 -55.85 - 55 133.517 543 4 1 -71.3157 -9.74268 -84.45 - 55 110.896 851 4 0 -71.3129 -9.74466 -85.85 - 55 170.228 543 3 1 -71.2553 -9.7843 -114.45 - 55 386.389 851 3 0 -71.2528 -9.78449 -115.85 - 55 263.085 544 2 1 -71.2038 -9.77892 -144.45 - 55 132.477 851 2 0 -71.2027 -9.77711 -145.85 - 55 99.5409 544 1 1 -71.1846 -9.72165 -174.45 - 55 102.374 851 1 0 -71.1859 -9.71964 -175.85 - 55 132.155 544 0 1 -71.2113 -9.6737 -204.45 - 55 112.476 851 0 0 -71.2123 -9.67157 -205.85 - 55 267.591 558 0 1 -68.4166 -69.7645 -204.85 - 55 53.6541 744 0 1 -31.25 36.9389 -204.599 - 55 70.8723 544 3 1 -71.25 -10.9156 -114.844 - 55 150.518 545 4 1 -70.9142 -8.64888 -84.45 - 55 280.866 856 4 0 -70.9608 -8.67514 -85.85 - 55 109.324 541 3 1 -71.7808 -9.46029 -114.45 - 55 93.8494 852 3 0 -71.7425 -9.49947 -115.85 - 55 120.66 848 2 0 -71.0561 -10.397 -145.85 - 55 248.275 546 1 1 -70.762 -11.2688 -174.45 - 55 116.771 843 1 0 -70.8467 -11.3311 -175.85 - 55 126.82 536 0 1 -72.7141 -12.4804 -204.45 - 55 119.675 836 0 0 -73.1874 -12.6569 -205.85 - 55 264.018 760 0 0 -81.9133 -27.8528 -206.25 - 55 149.741 492 0 1 -81.6057 -28.5251 -204.85 - 55 36.7491 502 1 0 -80.1925 -79.5553 -176.25 - 55 93.813 501 1 0 -80.1927 -79.65 -176.205 - 55 60.8425 500 1 0 -80.1866 -79.85 -176.107 - 55 74.5303 499 1 0 -80.1686 -80.05 -176.009 - 55 31.5373 498 1 0 -80.1427 -80.2501 -175.881 - 55 50.5458 500 1 1 -80.0239 -81.9538 -174.85 - 55 176.147 499 1 1 -80.0504 -82.0992 -174.778 - 55 69.0139 498 1 1 -80.25 -82.5271 -174.581 - 55 78.1817 497 1 1 -80.45 -82.7088 -174.517 - 55 58.4195 496 1 1 -80.6701 -82.9202 -174.45 - 55 167.493 495 1 1 -80.85 -83.0247 -174.547 - 55 64.0026 494 1 1 -81.05 -83.1884 -174.699 - 55 133.048 479 1 0 -82.0567 -84.0587 -175.85 - 55 64.4432 418 0 1 -96.4158 -90.7282 -204.45 - 55 411.334 419 0 1 -96.35 -90.6411 -204.546 - 55 34.0924 420 0 1 -96.15 -90.3112 -204.559 - 55 276.361 449 0 0 -96.4779 -90.3035 -205.85 - 55 98.1767 448 0 0 -96.9219 -90.35 -206.016 - 55 334.425 447 0 0 -97.2187 -90.55 -205.928 - 55 52.8176 446 0 0 -97.2266 -90.7501 -206.007 - 55 287.547 857 4 0 -70.9626 -8.65 -86.0158 - 55 174.144 546 3 1 -70.6871 -7.72137 -114.45 - 55 65.1988 547 3 1 -70.65 -7.70005 -114.701 - 55 170.113 862 3 0 -70.4435 -7.62402 -115.85 - 55 129.704 577 2 1 -64.6164 -5.31986 -144.45 - 55 230.914 874 2 0 -64.178 -5.24072 -145.85 - 55 139.054 616 1 1 -56.6947 -3.10648 -174.45 - 55 108.112 883 1 0 -56.6137 -3.25921 -175.851 - 55 61.3741 620 0 1 -55.9002 -8.41326 -204.45 - 55 61.0289 621 0 1 -55.85 -8.414 -204.669 - 55 113.667 859 0 0 -55.4682 -8.22856 -205.85 - 55 122.982 863 3 0 -71.0722 -7.40641 -115.85 - 55 2.26815 491 2 1 -81.8424 0.883524 -144.45 - 55 102.723 490 2 1 -81.85 0.882261 -144.46 - 55 50.0371 489 2 1 -82.05 0.837725 -144.723 - 55 190.223 903 2 0 -83.0392 0.776769 -145.85 - 55 22.6974 904 2 0 -83.4782 0.850045 -146.195 - 55 114.767 323 1 1 -115.436 7.73974 -174.45 - 55 88.0707 322 1 1 -115.55 7.67315 -174.615 - 55 17.6711 936 1 0 -116.337 7.27203 -175.85 - 55 126.779 935 1 0 -116.379 7.25 -175.916 - 55 127.373 899 1 0 -145.728 -0.204356 -176.25 - 55 145.027 170 1 1 -145.984 0.160619 -174.85 - 55 148.87 168 1 1 -146.506 0.154993 -174.45 - 55 109.38 897 1 0 -146.367 -0.481658 -175.85 - 55 26.1686 896 1 0 -146.447 -0.65 -176.166 - 55 111.814 546 4 1 -70.6766 -10.0512 -84.45 - 55 123.825 849 4 0 -70.7121 -10.1087 -85.85 - 55 501.17 540 3 1 -71.945 -11.3222 -114.45 - 55 131.46 843 3 0 -72.3143 -11.4118 -115.85 - 55 143.986 501 2 1 -79.8471 -13.4111 -144.45 - 55 33.2088 833 2 0 -79.7457 -13.2665 -145.85 - 55 64.2073 834 2 0 -79.7369 -13.25 -145.995 - 55 99.8837 515 1 1 -76.9133 -11.8348 -174.45 - 55 41.668 516 1 1 -76.85 -11.7239 -174.701 - 55 51.2222 844 1 0 -76.4796 -11.1236 -175.85 - 55 121.501 845 1 0 -76.4272 -11.0499 -175.97 - 55 423.729 542 3 1 -71.512 -9.73077 -114.45 - 55 123.351 543 2 1 -71.2657 -9.58041 -144.45 - 55 109.858 852 2 0 -71.2412 -9.56195 -145.85 - 55 109.586 854 1 0 -70.6668 -9.15863 -175.85 - 55 124.503 549 0 1 -70.0632 -8.68726 -204.45 - 55 131.432 856 0 0 -70.039 -8.65888 -205.85 - 55 69.2004 326 3 0 52.2317 -114.897 -116.25 - 55 124.032 537 2 1 -72.5493 -10.0122 -144.45 - 55 119.063 850 2 0 -72.5734 -10.0171 -145.85 - 55 115.051 534 1 1 -73.1739 -10.0838 -174.45 - 55 109.502 849 1 0 -73.204 -10.0612 -175.85 - 55 102.726 531 0 1 -73.7201 -9.38529 -204.45 - 55 113.659 853 0 0 -73.7701 -9.37422 -205.85 - 55 130.003 420 3 1 -96.0054 34.9785 -114.85 - 55 310.41 853 3 0 -71.4411 -9.31724 -115.85 - 55 16.1289 324 0 1 -115.242 -37.4109 -204.85 - 55 3.02388 709 0 0 -115.485 -38.0638 -205.85 - 55 113.467 318 0 1 -116.502 -40.135 -204.85 -Number of digits in this event: 55 -Using G4ParticleGun... -Particle energy: 2.53468 LIN -Particle: e- -Event: 56 -Number of tracker hits in this event: 43 - 56 146.673 440 10 1 -92.0434 23.2299 95.55 - 56 207.588 1015 10 0 -92.046 23.2297 94.15 - 56 93.6526 440 9 1 -92.0908 23.2346 65.55 - 56 118.882 1015 9 0 -92.0944 23.2334 64.15 - 56 92.1917 439 8 1 -92.179 23.2165 35.55 - 56 142.192 1015 8 0 -92.1839 23.2155 34.15 - 56 110.188 439 7 1 -92.2822 23.1805 5.55 - 56 226.219 1015 7 0 -92.2901 23.1806 4.15 - 56 147.982 438 6 1 -92.4287 23.1957 -24.45 - 56 179.238 1015 6 0 -92.4309 23.1953 -25.85 - 56 120.269 438 5 1 -92.4697 23.1714 -54.45 - 56 127.166 1015 5 0 -92.4863 23.1542 -55.85 - 56 450.314 436 4 1 -92.8142 22.815 -84.45 - 56 390.328 1013 4 0 -92.8247 22.7977 -85.85 - 56 229.047 435 3 1 -93.0273 22.4418 -114.45 - 56 110.87 1011 3 0 -93.0144 22.4371 -115.85 - 56 88.6944 436 2 1 -92.7506 22.356 -144.45 - 56 19.791 437 2 1 -92.75 22.3544 -144.754 - 56 118.825 1011 2 0 -92.7476 22.3467 -145.85 - 56 120.772 437 1 1 -92.6715 22.1246 -174.45 - 56 115.95 1010 1 0 -92.6759 22.1183 -175.85 - 56 210.429 437 0 1 -92.7457 21.9659 -204.45 - 56 114.107 1009 0 0 -92.7475 21.9498 -205.85 - 56 187.068 920 1 1 4.05 110.3 -174.58 - 56 118.28 434 3 1 -93.2172 22.5295 -114.45 - 56 250.185 1012 3 0 -93.2117 22.527 -115.85 - 56 102.011 435 2 1 -93.0956 22.6297 -144.45 - 56 125.149 1012 2 0 -93.1131 22.5612 -145.85 - 56 419.268 433 1 1 -93.5389 20.9633 -174.45 - 56 105.67 1003 1 0 -93.5788 20.8477 -175.85 - 56 163.93 427 0 1 -94.654 18.5673 -204.45 - 56 134.322 991 0 0 -94.6716 18.4164 -205.85 - 56 115.75 429 2 1 -94.3393 22.9734 -144.45 - 56 106.037 1014 2 0 -94.3335 23.0064 -145.85 - 56 116.089 430 1 1 -94.0685 23.1062 -174.45 - 56 115.934 1015 1 0 -94.0456 23.1519 -175.85 - 56 112.68 433 0 1 -93.5349 23.938 -204.45 - 56 109.443 1019 0 0 -93.5429 23.9672 -205.85 - 56 211.45 772 7 0 -93.0405 -25.5555 3.75 - 56 226.847 429 0 1 -94.2162 85.0598 -204.85 - 56 2.2089 1315 0 0 -97.5456 83.25 -206.06 - 56 53.9009 1322 0 0 -66.3473 84.4851 -206.25 - 56 91.7448 430 0 1 -94.1499 85.2042 -204.753 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 9.75636 LIN -Particle: e- -Event: 57 -Number of tracker hits in this event: 56 - 57 107.98 1138 9 1 47.8301 -123.259 65.55 - 57 136.954 284 9 0 47.8298 -123.26 64.15 - 57 147.293 1138 8 1 47.8149 -123.277 35.55 - 57 115.453 284 8 0 47.8118 -123.278 34.15 - 57 164.593 1138 7 1 47.7653 -123.311 5.55 - 57 115.474 284 7 0 47.7612 -123.311 4.15 - 57 292.995 1138 6 1 47.6726 -123.309 -24.45 - 57 395.382 284 6 0 47.6695 -123.308 -25.85 - 57 128.496 1137 5 1 47.6094 -123.271 -54.45 - 57 263.04 284 5 0 47.6061 -123.268 -55.85 - 57 243.982 1137 4 1 47.5331 -123.216 -84.45 - 57 255.004 284 4 0 47.5317 -123.213 -85.85 - 57 103.219 1132 3 1 46.4628 -122.903 -114.45 - 57 21.9027 1131 3 1 46.45 -122.908 -114.762 - 57 100.515 286 3 0 46.4005 -122.92 -115.85 - 57 105.029 1124 2 1 44.9792 -123.654 -144.45 - 57 121.628 282 2 0 44.9947 -123.669 -145.85 - 57 342.179 1125 1 1 45.2089 -124.397 -174.45 - 57 97.5489 278 1 0 45.2414 -124.449 -175.85 - 57 136.834 1129 0 1 45.9511 -125.486 -204.451 - 57 123.213 273 0 0 45.9908 -125.485 -205.85 - 57 376.414 1124 1 1 45.05 -123.851 -174.548 - 57 240.305 1136 0 1 47.3296 -123.14 -204.45 - 57 240.965 285 0 0 47.3221 -123.138 -205.85 - 57 126.715 1138 5 1 47.7346 -123.248 -54.45 - 57 123.976 1137 3 1 47.5277 -123.312 -114.45 - 57 171.972 284 3 0 47.5239 -123.315 -115.85 - 57 140.186 1136 2 1 47.4449 -123.36 -144.45 - 57 106.246 283 2 0 47.4429 -123.364 -145.85 - 57 198.642 1136 1 1 47.3821 -123.432 -174.45 - 57 119.455 283 1 0 47.3727 -123.438 -175.85 - 57 125.947 1135 0 1 47.1286 -122.862 -204.45 - 57 250.647 287 0 0 47.0126 -122.683 -205.85 - 57 374.319 1139 6 1 47.85 -123.261 -24.5202 - 57 51.9441 1142 5 1 48.553 -122.594 -54.45 - 57 75.4656 1143 5 1 48.65 -122.634 -54.6021 - 57 146.081 285 5 0 49.449 -122.979 -55.85 - 57 53.0029 1237 4 1 67.5842 -131.065 -84.45 - 57 109.386 1238 4 1 67.65 -131.089 -84.5586 - 57 179.995 243 4 0 68.4365 -131.366 -85.85 - 57 60.1997 1331 3 1 86.3202 -137.49 -114.45 - 57 148.037 1332 3 1 86.45 -137.542 -114.623 - 57 48.3118 211 3 0 87.3072 -137.917 -115.85 - 57 116.79 210 3 0 87.378 -137.95 -115.951 - 57 216.065 1444 2 1 108.987 -147.747 -144.45 - 57 29.3753 1445 2 1 109.15 -147.877 -144.766 - 57 21.8732 159 2 0 109.726 -148.322 -145.85 - 57 152.546 158 2 0 109.762 -148.35 -145.919 - 57 67.9775 1522 1 1 124.656 -160.293 -174.45 - 57 115.922 1523 1 1 124.75 -160.402 -174.645 - 57 32.7047 95 1 0 125.37 -161.097 -175.85 - 57 150.63 94 1 0 125.419 -161.15 -175.942 - 57 87.9382 1594 0 1 139.066 -176.471 -204.45 - 57 42.7001 1595 0 1 139.15 -176.564 -204.727 - 57 8.79588 16 0 0 139.479 -176.939 -205.85 - 57 131.62 15 0 0 139.489 -176.95 -205.883 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 9.16633 LIN -Particle: e- -Event: 58 -Number of tracker hits in this event: 40 - 58 115.55 1480 8 1 116.203 -74.1594 35.55 - 58 108.932 529 8 0 116.204 -74.1581 34.15 - 58 85.0221 1480 7 1 116.213 -74.1267 5.55 - 58 96.3597 529 7 0 116.213 -74.125 4.15 - 58 113.543 1480 6 1 116.22 -74.0883 -24.45 - 58 116.167 529 6 0 116.219 -74.0866 -25.85 - 58 111.26 1480 5 1 116.208 -74.0519 -54.45 - 58 133.85 529 5 0 116.208 -74.0507 -55.85 - 58 132.02 1480 4 1 116.194 -74.027 -84.45 - 58 120.082 530 4 0 116.193 -74.0256 -85.85 - 58 322.284 1480 3 1 116.169 -73.9962 -114.45 - 58 331.113 530 3 0 116.168 -73.9946 -115.85 - 58 233.313 1479 2 1 116.136 -73.9627 -144.45 - 58 143.158 530 2 0 116.137 -73.9614 -145.85 - 58 111.746 1479 1 1 116.138 -73.9314 -174.45 - 58 267.437 530 1 0 116.139 -73.9288 -175.85 - 58 164.253 1480 0 1 116.164 -73.8794 -204.45 - 58 133.238 530 0 0 116.166 -73.8789 -205.85 - 58 282.314 507 1 0 29.1635 -78.4636 -176.25 - 58 44.239 508 1 0 29.5218 -78.45 -176.027 - 58 181.499 1050 1 1 30.1065 -79.0151 -174.85 - 58 172.767 1166 5 0 42.848 53.3479 -56.25 - 58 25.8472 1346 3 1 89.4137 74.3274 -114.45 - 58 183.332 1347 3 1 89.45 74.3365 -114.494 - 58 368.78 1165 5 0 42.924 53.25 -55.8825 - 58 83.4509 280 7 0 27.0766 -124.142 3.75 - 58 122.2 532 2 0 116.129 -73.6413 -145.85 - 58 175.837 1480 1 1 116.17 -73.424 -174.45 - 58 123.099 533 1 0 116.166 -73.4058 -175.85 - 58 145.412 1479 0 1 116.069 -72.9529 -204.45 - 58 128.427 535 0 0 116.062 -72.9185 -205.85 - 58 34.6917 1457 1 1 111.719 9.95846 -174.85 - 58 175.442 532 1 0 116.177 -73.45 -175.891 - 58 120.624 1480 2 1 116.199 -73.8075 -144.45 - 58 232.57 531 2 0 116.185 -73.8118 -145.85 - 58 104.786 1478 1 1 115.845 -73.9671 -174.45 - 58 117.604 1475 0 1 115.193 -74.5794 -204.45 - 58 152.998 527 0 0 115.165 -74.6129 -205.85 - 58 143.841 1052 0 1 30.65 -134.688 -204.726 - 58 63.7775 951 0 1 10.45 -4.39502 -204.494 -Number of digits in this event: 28 -Using G4ParticleGun... -Particle energy: 3.24479 LIN -Particle: e- -Event: 59 -Number of tracker hits in this event: 145 - 59 108.311 1242 9 1 68.5935 -103.428 65.55 - 59 114.508 383 9 0 68.5943 -103.429 64.15 - 59 153.155 1242 8 1 68.6 -103.445 35.55 - 59 203.456 383 8 0 68.5996 -103.445 34.15 - 59 136.272 1242 7 1 68.5765 -103.456 5.55 - 59 105.771 383 7 0 68.5789 -103.457 4.15 - 59 117.639 1242 6 1 68.6306 -103.471 -24.45 - 59 105.614 383 6 0 68.6392 -103.47 -25.85 - 59 129.609 1243 5 1 68.7756 -103.409 -54.45 - 59 207.345 383 5 0 68.7835 -103.392 -55.85 - 59 107.979 1244 4 1 68.9529 -103.066 -84.45 - 59 115.762 385 4 0 68.9612 -103.052 -85.85 - 59 169.384 1245 3 1 69.1438 -102.713 -114.45 - 59 131.592 387 3 0 69.1551 -102.698 -115.85 - 59 98.8098 1246 2 1 69.3849 -102.408 -144.45 - 59 144.496 388 2 0 69.3927 -102.398 -145.85 - 59 118.883 1247 1 1 69.5056 -102.228 -174.45 - 59 118.723 389 1 0 69.482 -102.222 -175.85 - 59 253.293 1244 0 1 69.034 -101.903 -204.45 - 59 621.943 391 0 0 69.0048 -101.895 -205.85 - 59 423.161 1248 0 1 69.7322 -101.897 -204.45 - 59 108.093 1249 0 1 69.85 -101.984 -204.551 - 59 561.174 389 0 0 70.2701 -102.254 -205.85 - 59 307.978 388 0 0 70.2058 -102.35 -206.065 - 59 164.967 348 0 0 58.2981 -110.387 -206.25 - 59 177.443 347 0 0 58.429 -110.55 -206.045 - 59 77.5937 346 0 0 58.4863 -110.75 -206.156 - 59 234.534 1242 4 1 68.5908 -103.405 -84.45 - 59 225.846 383 4 0 68.6111 -103.408 -85.85 - 59 281.254 1243 3 1 68.8475 -103.62 -114.45 - 59 237.809 382 3 0 68.8375 -103.635 -115.85 - 59 74.4174 1243 2 1 68.6622 -104.122 -144.45 - 59 245.467 1242 2 1 68.65 -104.125 -144.646 - 59 255.897 380 2 0 68.576 -104.134 -145.85 - 59 184.354 1234 1 1 66.9911 -104.595 -174.45 - 59 93.1846 377 1 0 66.9037 -104.634 -175.85 - 59 122.39 1225 0 1 65.0927 -105.318 -204.45 - 59 143.58 374 0 0 64.9983 -105.312 -205.85 - 59 173.784 377 0 0 71.405 -104.672 -206.25 - 59 11.0765 266 0 0 61.7112 -126.926 -206.25 - 59 6.39512 261 0 0 54.6279 -127.917 -206.25 - 59 6.71989 370 0 0 44.0955 -106.129 -206.25 - 59 136.697 1244 2 1 68.9175 -103.876 -144.45 - 59 132.333 381 2 0 68.9281 -103.894 -145.85 - 59 113.894 1245 1 1 69.1306 -104.272 -174.45 - 59 113.643 379 1 0 69.1248 -104.243 -175.85 - 59 118.631 1243 0 1 68.8481 -103.423 -204.451 - 59 139.559 383 0 0 68.8094 -103.363 -205.85 - 59 28.9171 384 0 0 68.8015 -103.35 -206.137 - 59 226.183 1246 0 1 69.3635 -104.597 -204.45 - 59 30.6218 345 0 0 83.6693 -111.072 -206.25 - 59 70.0801 378 0 0 69.4009 -104.55 -206.029 - 59 192.111 331 4 0 126.409 -113.908 -86.25 - 59 189.075 330 4 0 126.492 -113.95 -86.099 - 59 27.0199 1525 4 1 125.174 -112.749 -84.85 - 59 233.016 1242 5 1 68.5252 -103.47 -54.45 - 59 153.321 382 5 0 68.4279 -103.57 -55.85 - 59 160.386 1230 4 1 66.1473 -106.011 -84.4502 - 59 138.758 370 4 0 65.8956 -106.089 -85.85 - 59 132.071 1205 3 1 61.2498 -107.886 -114.45 - 59 168.91 361 3 0 61.0285 -107.78 -115.85 - 59 9.96473 362 3 0 60.9765 -107.75 -116.221 - 59 166.385 1187 2 1 57.4831 -104.623 -144.45 - 59 120.737 378 2 0 57.3833 -104.534 -145.851 - 59 108.547 1178 1 1 55.7649 -102.118 -174.45 - 59 57.625 390 1 0 55.5837 -101.971 -175.85 - 59 75.9881 391 1 0 55.5582 -101.95 -176.06 - 59 210.339 1161 0 1 52.4314 -99.422 -204.45 - 59 220.522 405 0 0 52.225 -99.0374 -205.85 - 59 96.1823 406 0 0 52.1627 -98.95 -206.222 - 59 34.2623 506 4 0 44.5743 -78.85 -86.2188 - 59 113.529 1119 4 1 43.956 -80.8494 -84.85 - 59 43.9103 1162 0 1 52.45 -99.3543 -204.72 - 59 205.941 404 0 0 53.6026 -99.3262 -205.85 - 59 181.726 403 0 0 53.7696 -99.3502 -206.045 - 59 112.479 402 0 0 53.8697 -99.5501 -206.213 - 59 230.443 456 0 0 70.7378 -88.7384 -206.25 - 59 46.4265 457 0 0 71.1858 -88.6499 -205.886 - 59 50.0569 1268 0 1 73.7345 -83.6237 -204.85 - 59 93.3606 1269 0 1 73.85 -83.4974 -204.826 - 59 156.125 1270 0 1 74.05 -83.5131 -204.767 - 59 321.842 1271 0 1 74.25 -83.757 -204.514 - 59 53.1605 1272 0 1 74.45 -83.9149 -204.566 - 59 116.343 210 0 0 76.7802 -138.017 -206.25 - 59 35.0085 1254 4 1 71.0419 -101.309 -84.45 - 59 111.868 1255 4 1 71.05 -101.309 -84.5611 - 59 146.752 393 4 0 71.0732 -101.354 -85.8508 - 59 105.441 1251 3 1 70.3084 -103.01 -114.45 - 59 169.033 385 3 0 70.3134 -103.04 -115.85 - 59 128.904 1250 2 1 70.2398 -102.096 -144.45 - 59 351.588 387 2 0 70.15 -102.55 -145.873 - 59 2.65693 1219 1 1 63.8541 -111.579 -174.45 - 59 184.159 1218 1 1 63.85 -111.575 -174.457 - 59 44.242 1217 1 1 63.6499 -111.416 -174.758 - 59 5.35171 346 1 0 62.8137 -110.756 -175.85 - 59 175.758 347 1 0 62.8055 -110.75 -175.861 - 59 8.28564 348 1 0 62.5646 -110.55 -176.211 - 59 10.3596 1124 0 1 45.0017 -95.7439 -204.45 - 59 95.307 1125 0 1 45.0503 -95.7515 -204.466 - 59 56.6969 1126 0 1 45.25 -95.7886 -204.528 - 59 68.1512 1127 0 1 45.45 -95.8303 -204.597 - 59 64.4102 1128 0 1 45.65 -95.8707 -204.658 - 59 107.48 1129 0 1 45.85 -95.9234 -204.698 - 59 53.2465 1130 0 1 46.05 -95.9944 -204.74 - 59 57.5805 1131 0 1 46.25 -96.0709 -204.785 - 59 45.7055 1132 0 1 46.4501 -96.1528 -204.828 - 59 570.9 408 0 0 52.8887 -98.4225 -205.85 - 59 344.697 407 0 0 53.2649 -98.5501 -205.889 - 59 80.7224 401 0 0 55.3883 -99.7502 -205.931 - 59 126.611 400 0 0 55.6707 -99.9501 -205.964 - 59 97.2762 399 0 0 56.0402 -100.15 -206.025 - 59 114.314 398 0 0 56.4095 -100.35 -206.061 - 59 121.883 397 0 0 56.7178 -100.55 -206.091 - 59 153.19 396 0 0 57.0699 -100.75 -206.102 - 59 137.785 395 0 0 57.4809 -100.95 -206.097 - 59 152.834 394 0 0 57.8415 -101.15 -206.116 - 59 239.917 393 0 0 58.2991 -101.35 -206.124 - 59 159.412 392 0 0 59.0696 -101.55 -206.095 - 59 269.122 390 0 0 60.1593 -101.95 -206.112 - 59 137.048 387 0 0 63.2388 -102.55 -205.909 - 59 4.25077 1254 0 1 71.038 -104.702 -204.85 - 59 156.323 1255 0 1 71.05 -104.705 -204.848 - 59 55.446 1256 0 1 71.25 -104.768 -204.815 - 59 67.8021 1257 0 1 71.45 -104.851 -204.747 - 59 70.0133 1258 0 1 71.65 -104.942 -204.671 - 59 60.3892 1259 0 1 71.85 -105.043 -204.603 - 59 82.4865 1260 0 1 72.05 -105.136 -204.571 - 59 63.1786 1261 0 1 72.2502 -105.292 -204.527 - 59 1.19157 1262 0 1 72.4504 -105.479 -204.452 - 59 4.75641 909 1 0 110.558 2.03148 -176.25 - 59 84.2248 910 1 0 110.564 2.05 -176.245 - 59 65.3324 911 1 0 110.643 2.25013 -176.186 - 59 67.8209 912 1 0 110.728 2.45 -176.144 - 59 57.218 913 1 0 110.818 2.65014 -176.104 - 59 55.8075 914 1 0 110.865 2.85107 -176.1 - 59 52.8792 915 1 0 110.92 3.05 -176.093 - 59 44.8579 916 1 0 110.978 3.25081 -176.077 - 59 47.1457 917 1 0 111.014 3.45 -176.087 - 59 95.4882 918 1 0 111.034 3.65023 -176.098 - 59 55.5054 919 1 0 111.037 3.85 -176.119 - 59 71.0802 920 1 0 111.063 4.05 -176.159 - 59 71.2938 921 1 0 111.167 4.25 -176.195 - 59 71.9627 922 1 0 111.364 4.45 -176.214 - 59 6.59002 923 1 0 111.598 4.65 -176.246 - 59 44.9776 379 2 0 68.7006 -104.15 -146.066 -Number of digits in this event: 67 -Using G4ParticleGun... -Particle energy: 8.23823 LIN -Particle: e- -Event: 60 -Number of tracker hits in this event: 130 - 60 143.507 521 11 1 -75.8339 26.598 125.55 - 60 117.63 1032 11 0 -75.8334 26.5979 124.15 - 60 224.757 521 10 1 -75.8273 26.5946 95.55 - 60 368.906 1032 10 0 -75.8258 26.5932 94.15 - 60 147.686 521 9 1 -75.7973 26.5676 65.55 - 60 166.032 1032 9 0 -75.7956 26.5676 64.15 - 60 184.92 521 8 1 -75.7594 26.5786 35.55 - 60 119.053 1032 8 0 -75.7575 26.5799 34.15 - 60 122.087 521 7 1 -75.7213 26.6113 5.55 - 60 112.935 1032 7 0 -75.7197 26.6111 4.15 - 60 137.674 521 6 1 -75.6786 26.6172 -24.45 - 60 145.649 1032 6 0 -75.6784 26.6146 -25.85 - 60 108.52 521 5 1 -75.6807 26.5899 -54.45 - 60 113.481 1032 5 0 -75.6798 26.5844 -55.85 - 60 131.066 521 4 1 -75.6528 26.4726 -84.45 - 60 118.935 1032 4 0 -75.6582 26.4763 -85.85 - 60 196.073 521 3 1 -75.7392 26.5335 -114.45 - 60 247.155 1032 3 0 -75.7433 26.5376 -115.85 - 60 894.315 521 2 1 -75.8458 26.6348 -144.45 - 60 229.657 1032 2 0 -75.8501 26.6428 -145.85 - 60 114.005 520 1 1 -75.953 26.8021 -174.45 - 60 391.236 1033 1 0 -75.9538 26.8062 -175.85 - 60 122.082 520 0 1 -75.9579 26.9483 -204.45 - 60 119.594 1034 0 0 -75.9477 26.9884 -205.85 - 60 325.251 522 1 1 -75.4816 26.6449 -174.45 - 60 113.661 525 0 1 -74.9562 27.088 -204.45 - 60 110.549 1035 0 0 -74.9287 27.0838 -205.85 - 60 102.289 1033 2 0 -75.6642 26.6639 -145.85 - 60 116.837 522 0 1 -75.5467 26.7831 -204.45 - 60 171.283 1033 0 0 -75.5427 26.7838 -205.85 - 60 4.33905 1211 0 0 -78.5956 62.4338 -206.25 - 60 76.1135 1212 0 0 -78.5965 62.45 -206.242 - 60 84.2051 1213 0 0 -78.5869 62.65 -206.086 - 60 46.1945 507 0 1 -78.6407 63.2394 -204.85 - 60 109.927 506 0 1 -78.65 63.2629 -204.8 - 60 369.995 968 4 0 35.6772 13.7346 -86.2494 - 60 68.9641 969 4 0 36.1685 13.85 -85.9044 - 60 58.116 1165 1 0 -134.736 53.2274 -176.25 - 60 192.175 1429 1 0 -166.813 106.077 -176.25 - 60 46.7318 1430 1 0 -166.819 106.15 -176.147 - 60 50.0053 981 2 0 -75.5031 16.3011 -146.25 - 60 120.826 980 2 0 -75.5652 16.25 -146.116 - 60 2.33636 979 2 0 -75.6344 16.05 -145.856 - 60 340.314 520 2 1 -75.9745 15.08 -144.85 - 60 60.5903 964 2 0 -74.3998 13.0143 -145.85 - 60 52.9411 532 2 1 -73.5291 10.2495 -144.85 - 60 12.9805 533 2 1 -73.4498 10.1818 -144.821 - 60 103.211 949 2 0 -73.0822 9.91421 -145.85 - 60 139.326 948 2 0 -73.0283 9.84995 -145.989 - 60 288.028 519 9 1 -76.1975 26.9279 65.55 - 60 126.723 1031 9 0 -76.1518 26.4466 64.15 - 60 156.49 528 8 1 -74.3383 15.4135 35.55 - 60 125.535 973 8 0 -74.1255 14.8197 34.1496 - 60 12.3828 553 7 1 -69.2706 2.69851 5.55 - 60 116.006 554 7 1 -69.25 2.68389 5.50478 - 60 133.92 910 7 0 -68.6617 2.22936 4.14985 - 60 4.37803 615 6 1 -56.8674 -6.89161 -24.45 - 60 87.3689 616 6 1 -56.8498 -6.89842 -24.4665 - 60 117.362 617 6 1 -56.65 -6.97306 -24.6501 - 60 6.84472 618 6 1 -56.45 -7.04449 -24.836 - 60 19.55 863 6 0 -55.3684 -7.42512 -25.8502 - 60 170.585 862 6 0 -55.2941 -7.45 -25.9188 - 60 7.98994 787 5 1 -22.4709 -17.7584 -54.4501 - 60 113.632 788 5 1 -22.45 -17.7461 -54.4625 - 60 120.985 789 5 1 -22.25 -17.6195 -54.5917 - 60 61.1201 790 5 1 -22.0494 -17.4856 -54.7254 - 60 2.86244 817 5 0 -20.5412 -16.4581 -55.85 - 60 116.673 818 5 0 -20.5295 -16.45 -55.8588 - 60 77.4513 819 5 0 -20.2323 -16.25 -56.0729 - 60 52.0632 990 4 1 18.0685 8.89098 -84.45 - 60 40.6673 989 4 1 18.05 8.91511 -84.6746 - 60 86.7902 945 4 0 17.893 9.14277 -85.85 - 60 17.6669 946 4 0 17.8502 9.25 -86.1727 - 60 276.016 979 3 1 16.0351 15.2059 -114.45 - 60 36.8348 980 3 1 16.05 15.2269 -114.693 - 60 226.305 400 0 1 -100.092 -55.2818 -204.45 - 60 162.512 399 0 1 -100.15 -54.965 -204.474 - 60 184.956 524 2 1 -75.05 -146.861 -144.658 - 60 9.40138 523 2 1 -75.25 -147.098 -144.795 - 60 27.8138 1752 0 1 170.643 -43.5378 -204.45 - 60 109.596 1751 0 1 170.55 -43.565 -204.524 - 60 173.959 1750 0 1 170.35 -43.8652 -204.625 - 60 50.8703 1749 0 1 170.15 -44.3572 -204.783 - 60 52.3941 672 0 0 170.277 -45.5268 -205.85 - 60 93.3562 671 0 0 170.295 -45.65 -205.987 - 60 261.487 814 5 0 -54.4736 -17.1066 -55.85 - 60 19.031 717 5 1 -36.607 8.84564 -54.85 - 60 56.0286 946 5 0 -35.632 9.25498 -55.85 - 60 95.4771 520 9 1 -76.05 27.1088 65.4181 - 60 28.0839 1043 9 0 -74.3965 28.7911 64.1499 - 60 139.899 1044 9 0 -74.3447 28.8501 64.1038 - 60 188.638 1045 9 0 -74.221 29.05 63.8568 - 60 161.827 1114 9 0 -78.7316 42.977 63.75 - 60 98.1871 1115 9 0 -79.1242 43.0501 64.0312 - 60 49.7943 1116 9 0 -79.3084 43.25 64.1205 - 60 9.56443 497 9 1 -80.631 47.1073 65.1501 - 60 28.1939 496 9 1 -80.65 47.1428 65.1602 - 60 47.198 1164 9 0 -88.419 52.899 64.15 - 60 21.9713 443 9 1 -91.5078 55.9978 65.15 - 60 107.51 442 9 1 -91.5507 56.05 65.1667 - 60 59.6565 441 9 1 -91.7501 56.1769 65.1897 - 60 363.642 1184 9 0 -93.852 56.8574 64.15 - 60 100.176 522 9 1 -75.5413 24.8222 65.5499 - 60 162.606 1023 9 0 -75.3939 24.752 64.1499 - 60 107.39 535 8 1 -73.0472 24.4369 35.55 - 60 125.967 1022 8 0 -72.9499 24.538 34.1495 - 60 153.367 543 7 1 -71.3015 24.4147 5.54941 - 60 114.306 1021 7 0 -71.6944 24.4031 4.15 - 60 91.4982 496 6 1 -80.7272 24.3137 -24.45 - 60 203.713 495 6 1 -80.85 24.5732 -24.616 - 60 83.3007 1033 6 0 -81.901 26.6502 -25.9136 - 60 73.5763 1034 6 0 -82.0018 26.8504 -26.0464 - 60 38.2659 1035 6 0 -82.0976 27.0501 -26.1749 - 60 287.059 390 5 1 -102.041 68.7058 -54.4503 - 60 12.9034 391 5 1 -101.95 69.2759 -54.8251 - 60 35.5595 1252 5 0 -101.672 70.5493 -55.8502 - 60 64.0344 1253 5 0 -101.651 70.65 -55.9332 - 60 49.4754 1254 5 0 -101.643 70.85 -56.1143 - 60 16.8161 423 4 1 -95.5171 84.98 -84.4503 - 60 184.393 422 4 1 -95.55 85.0024 -84.4893 - 60 40.3607 421 4 1 -95.75 85.1432 -84.744 - 60 281.345 1327 4 0 -96.6779 85.5834 -85.85 - 60 79.7639 1328 4 0 -96.8503 85.65 -85.9826 - 60 14.5618 343 3 1 -111.521 80.8442 -114.45 - 60 355.208 342 3 1 -111.55 80.8744 -114.469 - 60 2.60432 341 3 1 -111.75 80.4542 -114.848 - 60 52.4792 1294 3 0 -115.87 78.8993 -115.85 - 60 72.0539 318 3 1 -116.549 78.8638 -114.85 - 60 163.469 317 3 1 -116.55 78.8638 -114.849 - 60 93.32 1303 3 0 -111.859 80.6765 -115.85 -Number of digits in this event: 52 -Using G4ParticleGun... -Particle energy: 9.65725 LIN -Particle: e- -Event: 61 -Number of tracker hits in this event: 121 - 61 344.247 1289 10 1 78.0457 -43.8622 95.55 - 61 298.817 680 10 0 78.0452 -43.8622 94.15 - 61 133.741 1289 9 1 78.0369 -43.8638 65.55 - 61 150.225 680 9 0 78.0373 -43.8648 64.15 - 61 114.864 1289 8 1 78.0428 -43.8823 35.55 - 61 215.698 680 8 0 78.0429 -43.8836 34.15 - 61 253.326 1289 7 1 78.0434 -43.9095 5.55 - 61 263.958 680 7 0 78.0434 -43.9094 4.15 - 61 343.218 1289 6 1 78.0379 -43.9082 -24.45 - 61 132.375 680 6 0 78.0375 -43.9089 -25.85 - 61 265.451 1289 5 1 78.029 -43.9229 -54.45 - 61 217.934 680 5 0 78.0288 -43.9241 -55.85 - 61 132.443 1289 4 1 78.0281 -43.9473 -84.45 - 61 135.479 680 4 0 78.0286 -43.9481 -85.85 - 61 118.343 1289 3 1 78.0335 -43.9604 -114.45 - 61 108.772 680 3 0 78.0351 -43.9622 -115.85 - 61 166.236 1290 2 1 78.0646 -43.9999 -144.45 - 61 122.991 680 2 0 78.0657 -44.0027 -145.85 - 61 112.896 1290 1 1 78.0902 -44.0595 -174.45 - 61 128.062 679 1 0 78.0924 -44.0617 -175.85 - 61 120.644 1290 0 1 78.1346 -44.1122 -204.45 - 61 114.787 679 0 0 78.1365 -44.1143 -205.85 - 61 135.24 1289 2 1 78.0496 -43.8901 -144.52 - 61 114.682 1288 2 1 77.85 -43.7918 -144.844 - 61 39.1963 678 2 0 77.4517 -44.3706 -145.85 - 61 119.126 677 2 0 77.3815 -44.45 -145.97 - 61 124.956 676 2 0 77.2688 -44.65 -146.223 - 61 4.41298 112 2 0 72.6992 -157.734 -146.25 - 61 100.763 111 2 0 72.7041 -157.75 -146.241 - 61 142.406 110 2 0 72.7355 -157.95 -146.109 - 61 273.13 1264 2 1 73.0193 -158.294 -144.85 - 61 154.068 1263 2 1 72.85 -158.509 -144.537 - 61 326.435 506 1 0 141.48 -78.6874 -176.25 - 61 244.821 507 1 0 141.815 -78.6499 -175.945 - 61 51.4146 1290 5 1 78.05 -43.9185 -54.6577 - 61 112.069 1298 4 1 79.6594 -44.6917 -84.45 - 61 258.376 676 4 0 79.7788 -44.7759 -85.8504 - 61 106.612 1296 3 1 79.3601 -45.739 -114.45 - 61 175.269 672 3 0 79.3024 -45.5851 -115.85 - 61 118.69 686 2 0 77.5552 -42.7 -145.85 - 61 116.02 1264 1 1 72.9258 -39.7025 -174.45 - 61 43.9902 702 1 0 73.1094 -39.4594 -175.85 - 61 136.555 703 1 0 73.1166 -39.4499 -175.904 - 61 99.7321 1284 0 1 77.039 -35.1819 -204.45 - 61 115.384 724 0 0 76.8846 -35.2266 -205.85 - 61 112.288 679 5 0 77.856 -44.05 -55.9109 - 61 189.854 1290 10 1 78.05 -43.8622 95.2232 - 61 126.744 681 10 0 78.0519 -43.8469 94.15 - 61 259.609 1290 9 1 78.2239 -43.527 65.55 - 61 123.692 682 9 0 78.2072 -43.5237 64.15 - 61 239.368 1288 8 1 77.8423 -43.452 35.55 - 61 107.113 683 8 0 77.8439 -43.4331 34.15 - 61 121.375 685 7 0 77.9024 -43.0455 4.15 - 61 109.438 687 6 0 77.8703 -42.5055 -25.85 - 61 171.92 1285 5 1 77.0918 -41.2451 -54.45 - 61 105.321 694 5 0 77.0562 -41.187 -55.85 - 61 106.569 1280 4 1 76.1506 -39.9921 -84.45 - 61 131.725 700 4 0 76.1214 -39.9665 -85.85 - 61 113.348 1276 3 1 75.4323 -39.2624 -114.45 - 61 131.213 704 3 0 75.4014 -39.2167 -115.85 - 61 115.286 1273 2 1 74.7636 -38.2587 -144.45 - 61 117.813 709 2 0 74.7398 -38.2148 -145.85 - 61 126.19 1271 1 1 74.2677 -37.3755 -174.45 - 61 128.013 713 1 0 74.215 -37.3469 -175.85 - 61 148.009 1265 0 1 73.21 -36.7415 -204.45 - 61 171.844 716 0 0 73.175 -36.7242 -205.85 - 61 57.0759 684 7 0 77.8654 -43.0815 4.15 - 61 121.702 1292 6 1 78.6248 -38.3246 -24.4501 - 61 55.94 711 6 0 78.4235 -37.7597 -25.85 - 61 82.838 712 6 0 78.3891 -37.65 -26.0564 - 61 14.0153 1283 5 1 76.8231 -18.6896 -54.4505 - 61 263.696 1284 5 1 76.85 -18.6874 -54.4772 - 61 110.162 805 5 0 77.6797 -18.9315 -55.8501 - 61 7.75235 804 5 0 77.8507 -19.05 -56.2291 - 61 38.0807 1335 4 1 87.1808 -27.7624 -84.45 - 61 209.611 1334 4 1 87.05 -27.7613 -84.4988 - 61 71.2323 1333 4 1 86.8494 -27.728 -84.5788 - 61 65.5669 1332 4 1 86.6498 -27.6733 -84.6352 - 61 65.1061 1331 4 1 86.45 -27.6126 -84.6814 - 61 74.5739 1330 4 1 86.25 -27.5392 -84.7338 - 61 52.794 1329 4 1 86.0499 -27.4715 -84.8019 - 61 7.6767 1328 4 1 85.85 -27.4007 -84.8404 - 61 12.3746 771 4 0 83.0143 -25.68 -85.85 - 61 110.768 772 4 0 82.9681 -25.65 -85.8653 - 61 170.235 773 4 0 82.6537 -25.45 -85.9826 - 61 92.5085 774 4 0 82.3995 -25.2498 -86.0902 - 61 88.8154 775 4 0 82.1572 -25.05 -86.1552 - 61 39.3932 1147 4 0 73.0047 49.5318 -86.25 - 61 14.2595 1148 4 0 73.0496 49.6505 -86.2429 - 61 169.959 1272 0 1 74.5527 -43.1274 -204.45 - 61 46.8145 687 0 0 77.2425 -42.6175 -205.85 - 61 197.23 686 0 0 77.3722 -42.65 -205.924 - 61 274.546 685 0 0 77.8879 -42.85 -205.991 - 61 133.692 681 9 0 78.0784 -43.8307 64.15 - 61 165.606 1290 8 1 78.079 -43.9032 35.55 - 61 99.7163 1290 7 1 78.0615 -44.0254 5.55 - 61 118.71 679 6 0 77.9519 -44.2268 -25.85 - 61 151.336 1288 5 1 77.8266 -44.3513 -54.45 - 61 147.968 678 5 0 77.8186 -44.3616 -55.85 - 61 124.287 1288 4 1 77.6574 -44.5758 -84.45 - 61 227.53 677 4 0 77.6567 -44.58 -85.85 - 61 157.83 1287 3 1 77.6312 -44.6542 -114.45 - 61 114.813 676 3 0 77.6309 -44.6631 -115.85 - 61 107.853 1287 2 1 77.6173 -44.8406 -144.45 - 61 23.8422 675 2 0 77.6246 -44.85 -146.218 - 61 281.354 1288 1 1 77.7423 -45.0335 -174.45 - 61 132.798 675 1 0 77.7472 -45.0416 -175.85 - 61 168.145 1289 0 1 77.8501 -45.1882 -204.45 - 61 190.017 674 0 0 77.8525 -45.1983 -205.85 - 61 284.443 672 0 0 79.9686 -45.6121 -205.85 - 61 49.0222 671 0 0 80.106 -45.6501 -205.91 - 61 18.8895 617 2 0 86.1423 -56.6207 -146.249 - 61 100.236 616 2 0 86.1569 -56.65 -146.188 - 61 0.523539 615 2 0 86.303 -56.85 -145.852 - 61 148.125 1333 2 1 86.693 -57.1277 -144.85 - 61 86.4046 678 1 0 77.5184 -44.3457 -175.85 - 61 87.8202 1246 0 1 69.3215 -34.4906 -204.45 - 61 30.9841 1247 0 1 69.45 -34.476 -204.782 - 61 111.99 728 0 0 69.8568 -34.4249 -205.85 - 61 214.855 859 2 1 -8.05 -131.368 -144.708 - 61 116.649 857 2 1 -8.4668 -130.482 -144.45 -Number of digits in this event: 63 -Using G4ParticleGun... -Particle energy: 2.29142 LIN -Particle: e- -Event: 62 -Number of tracker hits in this event: 63 - 62 106.947 228 8 1 -134.404 -26.9213 35.55 - 62 101.801 765 8 0 -134.404 -26.9323 34.15 - 62 100.739 229 7 1 -134.282 -27.0863 5.55 - 62 181.859 764 7 0 -134.282 -27.0911 4.15 - 62 118.826 229 6 1 -134.276 -27.194 -24.45 - 62 130.864 764 6 0 -134.279 -27.2023 -25.85 - 62 231.969 229 5 1 -134.282 -27.3994 -54.45 - 62 185.443 763 5 0 -134.276 -27.4053 -55.85 - 62 120.675 230 4 1 -134.145 -27.5446 -84.45 - 62 111.203 762 4 0 -134.15 -27.5427 -85.85 - 62 126.208 229 3 1 -134.249 -27.4706 -114.45 - 62 112.175 762 3 0 -134.268 -27.4717 -115.85 - 62 214.769 227 2 1 -134.627 -27.4687 -144.45 - 62 176.267 762 2 0 -134.649 -27.4746 -145.85 - 62 142.71 225 1 1 -135.085 -27.5632 -174.45 - 62 119.32 762 1 0 -135.11 -27.5746 -175.85 - 62 239.005 223 0 1 -135.539 -27.8465 -204.45 - 62 613.885 760 0 0 -135.575 -27.8782 -205.85 - 62 455.921 222 0 1 -135.743 -27.7532 -204.45 - 62 178.916 221 0 1 -135.75 -27.7558 -204.567 - 62 312.062 761 0 0 -135.842 -27.8232 -205.85 - 62 71.6316 224 0 1 -135.35 -27.6306 -204.472 - 62 76.9316 225 0 1 -135.15 -27.7566 -204.5 - 62 173.191 226 0 1 -134.95 -27.7115 -204.546 - 62 59.5151 755 0 0 -134.448 -28.961 -205.85 - 62 419.871 754 0 0 -134.414 -29.05 -205.941 - 62 261.428 228 6 1 -134.432 -26.9326 -24.45 - 62 268.494 765 6 0 -134.431 -26.934 -25.85 - 62 425.398 228 5 1 -134.448 -26.9942 -54.45 - 62 137.061 765 5 0 -134.447 -26.9986 -55.85 - 62 237.908 228 4 1 -134.42 -27.1168 -84.45 - 62 106.588 764 4 0 -134.42 -27.1179 -85.85 - 62 92.2395 228 3 1 -134.409 -27.1352 -114.45 - 62 209.495 764 3 0 -134.409 -27.1424 -115.85 - 62 117.118 228 2 1 -134.408 -27.3799 -144.45 - 62 244.817 763 2 0 -134.409 -27.3928 -145.85 - 62 139.149 228 1 1 -134.418 -27.6612 -174.45 - 62 320.356 761 1 0 -134.416 -27.6744 -175.85 - 62 112.374 228 0 1 -134.396 -27.9425 -204.45 - 62 230.382 759 0 0 -134.364 -28.0501 -206.108 - 62 93.8455 764 5 0 -134.52 -27.0522 -55.85 - 62 127.233 229 4 1 -134.257 -26.7395 -84.45 - 62 143.5 766 4 0 -134.235 -26.7414 -85.85 - 62 565.788 231 3 1 -133.895 -26.8412 -114.45 - 62 250.344 766 3 0 -133.908 -26.8298 -115.85 - 62 241.626 231 2 1 -133.802 -26.4771 -144.45 - 62 124.915 767 2 0 -133.703 -26.4898 -145.85 - 62 105.142 242 1 1 -131.676 -26.781 -174.45 - 62 133.988 766 1 0 -131.605 -26.7901 -175.85 - 62 122.605 252 0 1 -129.706 -27.8918 -204.45 - 62 146.342 765 2 0 -133.795 -26.8956 -145.85 - 62 112.328 241 1 1 -131.871 -27.6915 -174.45 - 62 222.259 245 0 1 -131.062 -29.3952 -204.45 - 62 146.391 752 0 0 -131.042 -29.4674 -205.85 - 62 17.4298 765 0 0 -133.957 -26.9162 -205.85 - 62 147.01 765 3 0 -133.863 -26.8656 -115.851 - 62 166.322 235 2 1 -133.05 -27.3789 -144.45 - 62 121.593 234 1 1 -133.302 -28.4116 -174.45 - 62 146.805 758 1 0 -133.431 -28.386 -175.85 - 62 252.527 250 6 0 -152.361 -129.95 -26.073 - 62 39.8843 273 5 1 -125.449 -132.882 -54.45 - 62 33.8449 141 6 1 -151.895 -130.08 -24.8497 - 62 21.5088 257 6 0 -152.422 -128.725 -25.85 -Number of digits in this event: 44 -Using G4ParticleGun... -Particle energy: 8.22126 LIN -Particle: e- -Event: 63 -Number of tracker hits in this event: 28 - 63 179.353 168 7 1 -146.391 7.20867 5.55 - 63 98.3047 935 7 0 -146.391 7.21022 4.15 - 63 104.845 168 6 1 -146.392 7.24197 -24.45 - 63 131.067 935 6 0 -146.391 7.24475 -25.85 - 63 110.052 168 5 1 -146.385 7.30274 -54.45 - 63 147.066 936 5 0 -146.384 7.30582 -55.85 - 63 122.431 168 4 1 -146.37 7.36897 -84.45 - 63 152.633 936 4 0 -146.371 7.37259 -85.85 - 63 126.628 168 3 1 -146.37 7.44967 -114.45 - 63 175.779 937 3 0 -146.37 7.45362 -115.85 - 63 110.5 168 2 1 -146.377 7.53378 -144.45 - 63 102.931 937 2 0 -146.378 7.53773 -145.85 - 63 403.927 168 1 1 -146.387 7.6158 -174.45 - 63 415.377 937 1 0 -146.386 7.62036 -175.85 - 63 141.586 168 0 1 -146.374 7.71039 -204.45 - 63 153.558 938 0 0 -146.374 7.7152 -205.85 - 63 36.2088 936 1 0 -150.59 7.45 -176.212 - 63 106.443 1407 10 0 86.4223 101.55 94.0157 - 63 23.5047 1408 10 0 86.4717 101.75 94.104 - 63 131.436 1332 10 1 86.5413 102.059 95.1501 - 63 5.25465 292 0 0 -12.4965 -121.608 -206.25 - 63 174.161 291 0 0 -12.062 -121.75 -206.13 - 63 189.257 290 0 0 -11.8465 -121.95 -206.235 - 63 113.865 171 0 1 -145.78 5.72297 -204.45 - 63 122.767 927 0 0 -145.804 5.58589 -205.85 - 63 107.977 169 0 1 -146.279 7.57692 -204.45 - 63 103.664 937 0 0 -146.252 7.58257 -205.851 - 63 15.6511 938 1 0 -146.413 7.65622 -175.85 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 9.03588 LIN -Particle: e- -Event: 64 -Number of tracker hits in this event: 58 - 64 168.353 631 9 1 -53.684 111.935 65.55 - 64 109.101 1458 9 0 -53.6839 111.936 64.15 - 64 258.362 631 8 1 -53.6806 111.955 35.55 - 64 130.519 1459 8 0 -53.6803 111.956 34.15 - 64 236.599 631 7 1 -53.6786 111.978 5.55 - 64 148.111 1459 7 0 -53.6784 111.98 4.15 - 64 109.005 631 6 1 -53.6725 112.016 -24.45 - 64 107.286 1459 6 0 -53.6714 112.017 -25.85 - 64 107.88 632 5 1 -53.6443 112.039 -54.45 - 64 179.191 1459 5 0 -53.6453 112.04 -55.85 - 64 134.258 631 4 1 -53.668 112.042 -84.45 - 64 140.517 1459 4 0 -53.6691 112.044 -85.85 - 64 123.167 631 3 1 -53.6948 112.087 -114.45 - 64 283.292 1459 3 0 -53.695 112.089 -115.85 - 64 157.829 631 2 1 -53.7034 112.116 -144.45 - 64 96.5724 1459 2 0 -53.7018 112.117 -145.85 - 64 131.9 631 1 1 -53.6525 112.153 -174.45 - 64 222.372 1460 1 0 -53.6485 112.156 -175.85 - 64 138.925 632 0 1 -53.5524 112.22 -204.45 - 64 255.698 1460 0 0 -53.5514 112.219 -205.85 - 64 236.793 1256 4 1 71.25 134.816 -84.6273 - 64 96.666 561 3 1 -67.7951 108.839 -114.85 - 64 198.651 706 10 0 -19.6385 -38.6639 93.75 - 64 25.2468 707 10 0 -19.6366 -38.65 93.8147 - 64 122.095 705 10 0 -19.2947 -38.85 93.9366 - 64 37.0837 704 10 0 -19.2277 -39.05 93.8027 - 64 45.6056 987 0 1 17.4796 0.888495 -204.85 - 64 224.915 1019 0 1 23.8932 161.569 -204.45 - 64 243.941 632 3 1 -53.5489 112.063 -114.45 - 64 114.591 1458 3 0 -53.473 111.88 -115.85 - 64 165.479 640 2 1 -52.0057 107.499 -144.45 - 64 149.824 1435 2 0 -51.8502 107.33 -145.85 - 64 73.4926 655 1 1 -48.9645 103.688 -174.45 - 64 65.0502 656 1 1 -48.85 103.65 -174.676 - 64 115.27 1416 1 0 -48.2419 103.423 -175.85 - 64 5.28009 1415 1 0 -48.0465 103.35 -176.227 - 64 17.9803 732 0 1 -33.4862 97.3939 -204.45 - 64 102.722 733 0 1 -33.4497 97.3976 -204.488 - 64 57.1929 734 0 1 -33.25 97.4331 -204.698 - 64 89.9474 1387 0 0 -32.1123 97.7097 -205.85 - 64 142.112 1388 0 0 -31.9576 97.75 -206.005 - 64 19.0788 1387 1 0 -57.7193 97.7359 -176.25 - 64 116.459 1388 1 0 -57.7346 97.75 -176.204 - 64 76.5146 1389 1 0 -57.8641 97.95 -176.01 - 64 96.2624 1390 1 0 -57.8676 98.15 -176.024 - 64 236.397 605 1 1 -58.9989 98.9045 -174.85 - 64 74.3324 1397 1 0 -59.6267 99.6714 -175.85 - 64 164.744 633 2 1 -53.4486 112.144 -144.45 - 64 121.578 1460 2 0 -53.4401 112.152 -145.85 - 64 122.117 633 1 1 -53.3053 112.32 -174.45 - 64 101.472 634 0 1 -53.1265 112.603 -204.45 - 64 147.458 1462 0 0 -53.1184 112.616 -205.85 - 64 23.8955 676 4 0 -129.076 -44.7665 -86.2499 - 64 23.7142 675 4 0 -129.072 -44.8501 -86.218 - 64 17.0469 1457 7 0 -52.2978 111.569 4.15 - 64 71.3661 640 7 1 -51.8596 112.254 5.15 - 64 49.2356 641 7 1 -51.85 112.263 5.16896 - 64 107.378 1458 8 0 -53.6546 111.95 33.7767 -Number of digits in this event: 30 -Using G4ParticleGun... -Particle energy: 1.75364 LIN -Particle: e- -Event: 65 -Number of tracker hits in this event: 123 - 65 98.6028 706 10 1 -38.8175 -84.4678 95.55 - 65 141.947 477 10 0 -38.814 -84.4672 94.15 - 65 108.305 706 9 1 -38.7592 -84.4655 65.55 - 65 116.197 477 9 0 -38.7585 -84.4666 64.15 - 65 111.907 706 8 1 -38.7403 -84.4779 35.55 - 65 106.138 477 8 0 -38.7454 -84.4805 34.15 - 65 118.882 706 7 1 -38.8406 -84.5311 5.55 - 65 129.658 477 7 0 -38.8331 -84.5392 4.15 - 65 246.698 706 6 1 -38.6929 -84.7119 -24.45 - 65 109.231 476 6 0 -38.6864 -84.7267 -25.85 - 65 591.974 707 5 1 -38.537 -84.9958 -54.45 - 65 108.712 475 5 0 -38.5276 -85.0127 -55.85 - 65 142.379 708 4 1 -38.3234 -85.3411 -84.45 - 65 156.994 473 4 0 -38.3155 -85.3698 -85.85 - 65 319.945 709 3 1 -38.1446 -86.0215 -114.45 - 65 106.051 469 3 0 -38.1318 -86.0673 -115.85 - 65 135.875 710 2 1 -37.91 -87.0019 -144.45 - 65 6.68352 465 2 0 -37.9303 -87.0488 -145.85 - 65 127.783 464 2 0 -37.9308 -87.05 -145.885 - 65 142.912 708 1 1 -38.277 -88.0813 -174.45 - 65 130.574 459 1 0 -38.2788 -88.1285 -175.85 - 65 98.5841 707 0 1 -38.4829 -89.0367 -204.45 - 65 115.811 454 0 0 -38.4662 -89.0631 -205.85 - 65 221.78 713 0 1 -37.3379 -88.8768 -204.45 - 65 430.988 455 0 0 -37.3489 -88.9437 -205.85 - 65 30.9789 1019 0 1 24.05 -63.6567 -204.817 - 65 143.86 473 3 0 -37.9994 -85.4341 -115.85 - 65 76.0227 727 2 1 -34.4851 -73.9505 -144.45 - 65 36.337 728 2 1 -34.45 -73.9642 -144.697 - 65 165.934 530 2 0 -34.3089 -73.8937 -145.85 - 65 122.047 740 1 1 -32.0121 -73.6945 -174.45 - 65 26.8198 528 1 0 -31.8263 -74.3909 -175.85 - 65 160.377 527 1 0 -31.8124 -74.45 -175.953 - 65 251.219 820 0 1 -15.8931 -82.2758 -204.45 - 65 20.7247 485 0 0 -16.2412 -83.0078 -205.85 - 65 88.8146 484 0 0 -16.2515 -83.05 -205.929 - 65 123.976 472 0 0 -17.5382 -85.5338 -206.25 - 65 85.6283 815 0 1 -17.0464 -85.2835 -204.849 - 65 74.338 816 0 1 -16.8499 -85.296 -204.596 - 65 193.419 705 6 1 -38.8736 -84.5385 -24.45 - 65 236.74 477 6 0 -38.8507 -84.548 -25.85 - 65 250.178 708 5 1 -38.4496 -84.5535 -54.45 - 65 359.937 477 5 0 -38.374 -84.5619 -55.85 - 65 99.0435 715 4 1 -36.8735 -84.5313 -84.45 - 65 15.8667 716 4 1 -36.85 -84.5307 -84.8315 - 65 142.616 477 4 0 -36.7826 -84.5185 -85.85 - 65 128.435 725 3 1 -35.0065 -84.3378 -114.45 - 65 100.779 478 3 0 -34.861 -84.282 -115.85 - 65 95.8923 742 2 1 -31.5628 -83.1103 -144.45 - 65 111.27 484 2 0 -31.4807 -83.0816 -145.85 - 65 110.437 752 1 1 -29.5864 -81.9875 -174.45 - 65 105.275 490 1 0 -29.468 -81.995 -175.85 - 65 117.12 765 0 1 -27.004 -82.3801 -204.45 - 65 106.67 488 0 0 -26.9464 -82.3433 -205.85 - 65 42.9848 99 7 0 -140.619 -160.15 3.78834 - 65 100.538 709 5 1 -38.25 -84.1954 -54.7455 - 65 49.2007 487 5 0 -37.2785 -82.5735 -55.85 - 65 143.317 488 5 0 -37.2102 -82.45 -55.9656 - 65 374.799 351 5 0 25.1213 -109.837 -56.2497 - 65 115.138 719 5 1 -36.2225 -83.2744 -54.45 - 65 117.96 484 5 0 -36.0728 -83.212 -55.85 - 65 136.034 735 4 1 -32.9201 -81.9431 -84.45 - 65 116.954 490 4 0 -32.7568 -81.8831 -85.85 - 65 120.857 752 3 1 -29.5175 -80.7558 -114.45 - 65 112.186 496 3 0 -29.3513 -80.6708 -115.85 - 65 17.8511 497 3 0 -29.3107 -80.65 -116.192 - 65 118.107 770 2 1 -25.9379 -78.8976 -144.45 - 65 125.182 506 2 0 -25.7717 -78.8019 -145.85 - 65 31.0234 787 1 1 -22.4644 -76.9705 -174.45 - 65 130.961 788 1 1 -22.45 -76.9645 -174.562 - 65 133.358 515 1 0 -22.285 -76.8989 -175.85 - 65 111.89 806 0 1 -18.7066 -75.4763 -204.45 - 65 110.861 523 0 0 -18.5219 -75.3752 -205.85 - 65 127.419 705 9 1 -38.8696 -84.496 65.5499 - 65 38.1407 704 9 1 -39.05 -84.2637 65.2378 - 65 1.10198 483 9 0 -39.72 -83.2536 64.1498 - 65 86.4775 484 9 0 -39.7223 -83.25 64.1459 - 65 88.7191 485 9 0 -39.8361 -83.05 63.9471 - 65 46.3996 486 9 0 -39.9582 -82.85 63.8148 - 65 114.172 589 8 1 -62.1762 -45.0851 35.55 - 65 88.7318 675 8 0 -62.0896 -45.0418 34.1491 - 65 24.5005 674 8 0 -62.1009 -45.05 33.9729 - 65 19.8615 479 8 0 -53.523 -84.05 33.9988 - 65 108.589 478 8 0 -53.5171 -84.25 34.1005 - 65 152.44 703 4 1 -39.2763 -83.6697 -84.45 - 65 127.552 482 4 0 -39.2537 -83.619 -85.85 - 65 134.937 707 3 1 -38.5065 -82.6491 -114.45 - 65 108.638 487 3 0 -38.4544 -82.5778 -115.85 - 65 105.91 713 2 1 -37.3425 -81.1144 -144.45 - 65 122.642 495 2 0 -37.349 -81.0421 -145.85 - 65 131.576 713 1 1 -37.4159 -79.4982 -174.45 - 65 165.163 502 1 0 -37.4355 -79.5398 -175.85 - 65 108.275 711 0 1 -37.6637 -80.3608 -204.45 - 65 44.2978 498 0 0 -37.6926 -80.442 -205.85 - 65 96.4682 497 0 0 -37.6954 -80.45 -205.99 - 65 148.541 707 4 1 -38.4811 -83.9263 -84.45 - 65 174.689 480 4 0 -38.3823 -83.9003 -85.85 - 65 107.33 719 3 1 -36.1844 -83.6772 -114.45 - 65 103.945 482 3 0 -36.0742 -83.5831 -115.85 - 65 113.629 731 2 1 -33.7052 -81.6476 -144.45 - 65 116.163 493 2 0 -33.5491 -81.3611 -145.85 - 65 155.859 747 1 1 -30.5473 -75.6269 -174.45 - 65 138.504 524 1 0 -30.3428 -75.2282 -175.85 - 65 144.505 769 0 1 -26.1164 -66.7953 -204.45 - 65 0.0947429 569 0 0 -26.0002 -66.0502 -205.85 - 65 124.092 570 0 0 -26.0002 -66.05 -205.85 - 65 9.61928 571 0 0 -25.9608 -65.8499 -206.228 - 65 85.2837 483 4 0 -38.1108 -83.45 -85.9037 - 65 6.2331 765 3 1 -26.8603 -69.4402 -114.451 - 65 146.203 766 3 1 -26.8498 -69.4349 -114.475 - 65 40.0304 554 3 0 -26.3711 -69.092 -115.85 - 65 71.9463 555 3 0 -26.312 -69.05 -116.005 - 65 102.71 823 2 1 -15.4145 -60.8607 -144.45 - 65 121.803 596 2 0 -15.4324 -60.8238 -145.851 - 65 19.5331 820 1 1 -16.0206 -59.571 -174.45 - 65 93.5439 819 1 1 -16.0504 -59.5803 -174.519 - 65 316.61 601 1 0 -16.6376 -59.7403 -175.85 - 65 64.5312 750 0 1 -29.8881 -63.3482 -204.45 - 65 78.0936 749 0 1 -30.05 -63.4144 -204.621 - 65 11.1591 748 0 1 -30.2504 -63.5086 -204.825 - 65 1.74065 580 0 0 -31.309 -64.0472 -205.85 - 65 144.074 579 0 0 -31.3143 -64.05 -205.855 - 65 116.373 600 1 0 -16.6901 -59.85 -176.241 -Number of digits in this event: 52 -Using G4ParticleGun... -Particle energy: 9.2665 LIN -Particle: e- -Event: 66 -Number of tracker hits in this event: 57 - 66 126.353 440 8 1 -92.1466 104.12 35.55 - 66 122.4 1419 8 0 -92.1467 104.12 34.15 - 66 106.382 440 7 1 -92.148 104.121 5.55 - 66 132.945 1419 7 0 -92.1478 104.121 4.15 - 66 109.333 440 6 1 -92.1455 104.116 -24.45 - 66 114.977 1419 6 0 -92.145 104.114 -25.85 - 66 121.12 440 5 1 -92.1349 104.078 -54.45 - 66 116.174 1419 5 0 -92.1341 104.076 -55.85 - 66 137.228 440 4 1 -92.1194 104.043 -84.45 - 66 253.311 1419 4 0 -92.1182 104.041 -85.85 - 66 380.322 440 3 1 -92.097 104.004 -114.45 - 66 157.016 1419 3 0 -92.0959 104.003 -115.85 - 66 314.168 440 2 1 -92.0723 103.992 -144.45 - 66 112.129 1419 2 0 -92.0721 103.991 -145.85 - 66 632.855 440 1 1 -92.0718 103.957 -174.45 - 66 242.191 1419 1 0 -92.0746 103.961 -175.85 - 66 369.729 440 0 1 -92.1361 104.046 -204.45 - 66 260.04 1419 0 0 -92.1381 104.052 -205.85 - 66 213.441 1418 1 0 -92.0096 103.865 -175.85 - 66 118.292 446 0 1 -90.7714 101.766 -204.45 - 66 107.419 1407 0 0 -90.7594 101.658 -205.85 - 66 42.6507 441 2 1 -91.95 103.776 -144.758 - 66 19.5985 1413 2 0 -91.7014 102.794 -145.85 - 66 222.924 1412 2 0 -91.6888 102.75 -145.898 - 66 111.589 1411 2 0 -91.6335 102.55 -146.05 - 66 42.1411 1410 2 0 -91.6078 102.35 -146.172 - 66 32.1904 947 2 0 -99.4619 9.51403 -146.25 - 66 132.834 946 2 0 -99.5119 9.45 -146.191 - 66 89.2824 945 2 0 -99.6639 9.25 -146.033 - 66 14.7878 944 2 0 -99.7823 9.04979 -145.901 - 66 123.205 399 2 1 -100.221 7.6157 -144.85 - 66 151.75 398 2 1 -100.35 7.1622 -144.6 - 66 45.0067 397 2 1 -100.732 6.60371 -144.45 - 66 87.3381 396 2 1 -100.75 6.61862 -144.557 - 66 177.387 934 2 0 -100.98 6.90248 -145.85 - 66 107.726 1418 0 0 -92.1275 103.813 -205.85 - 66 41.6284 441 3 1 -91.9499 103.851 -114.715 - 66 22.9377 1415 3 0 -91.287 103.192 -115.85 - 66 134.407 1414 3 0 -91.2451 103.15 -115.92 - 66 15.6816 1413 3 0 -91.0725 102.95 -116.225 - 66 23.4983 514 2 1 -77.0806 85.0549 -144.45 - 66 88.3182 515 2 1 -77.05 85.0491 -144.516 - 66 111.531 1324 2 0 -76.5356 84.974 -145.85 - 66 302.381 557 1 1 -68.5635 82.3876 -174.45 - 66 34.939 1300 1 0 -68.0592 80.1666 -175.85 - 66 83.3881 1299 1 0 -68.0418 80.05 -175.932 - 66 95.8321 1298 1 0 -68.0055 79.85 -176.086 - 66 67.8704 655 0 1 -49.0241 43.1866 -204.45 - 66 107.143 656 0 1 -48.85 43.1135 -204.617 - 66 14.3123 657 0 1 -48.65 43.0284 -204.787 - 66 188.887 1113 0 0 -47.7237 42.7177 -205.85 - 66 100.555 1418 3 0 -92.0987 103.949 -115.85 - 66 64.4262 446 1 1 -90.926 101.747 -174.45 - 66 43.1054 445 1 1 -90.95 101.739 -174.698 - 66 121.608 1407 1 0 -91.0652 101.695 -175.85 - 66 111.973 433 0 1 -93.5055 100.806 -204.45 - 66 187.01 1403 0 0 -93.4666 100.78 -205.85 -Number of digits in this event: 27 -Using G4ParticleGun... -Particle energy: 3.60064 LIN -Particle: e- -Event: 67 -Number of tracker hits in this event: 99 - 67 173.188 396 8 1 -100.813 98.2714 35.55 - 67 171.604 1390 8 0 -100.813 98.2718 34.15 - 67 352.998 396 7 1 -100.817 98.2838 5.55 - 67 386.354 1390 7 0 -100.811 98.2809 4.15 - 67 114.192 397 6 1 -100.693 98.2169 -24.45 - 67 342.179 1390 6 0 -100.713 98.2419 -25.85 - 67 105.259 394 5 1 -101.164 98.6305 -54.45 - 67 129.667 1392 5 0 -101.214 98.6131 -55.85 - 67 100.513 390 4 1 -102.138 98.2549 -84.45 - 67 16.4525 389 4 1 -102.15 98.2546 -84.7791 - 67 153.139 1390 4 0 -102.192 98.2557 -85.85 - 67 133.065 385 3 1 -103.144 98.4341 -114.45 - 67 156.425 1391 3 0 -103.158 98.4513 -115.85 - 67 143.07 384 2 1 -103.176 98.5769 -144.45 - 67 186.84 1392 2 0 -103.142 98.6332 -145.85 - 67 123.893 388 1 1 -102.4 99.5549 -174.45 - 67 101.223 1397 1 0 -102.538 99.625 -175.85 - 67 130.376 373 0 1 -105.458 100.679 -204.45 - 67 165.588 1403 0 0 -105.534 100.844 -205.85 - 67 19.3379 379 2 1 -104.231 97.9051 -144.825 - 67 261.701 1388 2 0 -104.22 97.935 -145.851 - 67 250.62 1389 2 0 -104.219 97.95 -146.194 - 67 121.097 1386 2 0 -103.806 97.4713 -145.85 - 67 73.8381 1385 2 0 -103.488 97.35 -146.091 - 67 80.5933 1384 2 0 -103.322 97.1499 -146.099 - 67 83.6536 1383 2 0 -103.204 96.95 -146.134 - 67 110.675 1382 2 0 -103.056 96.75 -146.156 - 67 3.19469 1381 2 0 -102.808 96.5499 -146.248 - 67 311.943 398 2 1 -100.418 98.1248 -144.45 - 67 342.28 399 1 1 -100.343 98.1218 -174.45 - 67 250.774 1389 1 0 -100.334 98.1295 -175.85 - 67 126.281 400 0 1 -100.145 98.2949 -204.45 - 67 118.343 1390 0 0 -100.146 98.2788 -205.85 - 67 43.9149 1705 1 0 68.8296 161.247 -176.25 - 67 142.258 1706 1 0 68.8678 161.35 -176.14 - 67 493.712 1246 1 1 69.2719 161.849 -174.85 - 67 24.6285 1283 2 1 76.7147 56.1039 -144.85 - 67 37.528 1178 2 0 76.0848 55.8373 -145.85 - 67 93.6879 1279 2 1 75.9588 56.0131 -144.85 - 67 132.536 389 0 1 -102.294 98.3992 -204.45 - 67 111.774 1391 0 0 -102.381 98.4135 -205.85 - 67 15.8431 388 0 1 -102.35 98.3809 -204.771 - 67 12.629 1392 0 0 -102.453 98.7426 -205.85 - 67 546.264 1393 0 0 -102.455 98.75 -205.87 - 67 16.1741 1394 0 0 -102.719 98.95 -205.999 - 67 102.731 400 1 1 -100.15 97.6391 -174.535 - 67 74.8219 401 1 1 -99.95 97.504 -174.692 - 67 12.4929 402 1 1 -99.75 97.4002 -174.813 - 67 98.1345 1386 1 0 -98.268 97.3934 -175.85 - 67 39.3345 419 1 1 -96.268 97.8946 -174.85 - 67 123.22 420 1 1 -96.1499 97.8924 -174.788 - 67 80.0704 421 1 1 -95.95 97.7999 -174.702 - 67 135.682 422 1 1 -95.7495 97.7491 -174.635 - 67 264.217 423 1 1 -95.55 97.4841 -174.607 - 67 216.507 397 8 1 -100.75 98.2558 35.3641 - 67 105.719 398 6 1 -100.374 98.2768 -24.45 - 67 249.374 400 5 1 -100.075 97.6666 -54.45 - 67 105.221 1387 5 0 -100.04 97.6364 -55.85 - 67 128.913 404 4 1 -99.2646 97.0316 -84.45 - 67 168.567 1384 4 0 -99.2044 97.0208 -85.85 - 67 165.338 410 3 1 -97.9845 96.8855 -114.45 - 67 42.8301 411 3 1 -97.95 96.9086 -114.813 - 67 117.217 1384 3 0 -97.8489 96.9742 -115.85 - 67 104.621 426 2 1 -94.924 98.7909 -144.45 - 67 137.996 1393 2 0 -94.7557 98.8588 -145.85 - 67 95.9987 444 1 1 -91.3493 100.26 -174.45 - 67 33.5998 1400 1 0 -91.1718 100.342 -175.85 - 67 104.822 1401 1 0 -91.1548 100.35 -175.983 - 67 67.7313 462 0 1 -87.4856 102.077 -204.45 - 67 294.847 463 0 1 -87.45 102.085 -204.696 - 67 111.212 1409 0 0 -87.2862 102.125 -205.85 - 67 166.799 1381 3 0 -97.48 96.4457 -115.85 - 67 16.551 407 3 1 -98.6975 96.4473 -114.85 - 67 243.272 1641 1 0 -117.921 148.404 -176.25 - 67 80.2737 1642 1 0 -117.603 148.55 -176.081 - 67 31.025 1643 1 0 -117.474 148.75 -176.142 - 67 91.8463 399 6 1 -100.181 96.9978 -24.45 - 67 39.9278 400 6 1 -100.15 96.9915 -24.7093 - 67 124.724 1384 6 0 -100.007 96.9657 -25.85 - 67 110.432 417 5 1 -96.6888 96.1956 -54.4501 - 67 126.455 1379 5 0 -96.6155 96.0265 -55.85 - 67 178.99 425 4 1 -95.1313 92.3269 -84.45 - 67 211.961 1359 4 0 -95.0227 92.0868 -85.85 - 67 105.671 436 3 1 -92.8737 87.3964 -114.45 - 67 130.53 1336 3 0 -92.713 87.3209 -115.85 - 67 138.264 453 2 1 -89.4051 85.625 -144.45 - 67 120.186 1327 2 0 -89.3464 85.5528 -145.85 - 67 135.699 460 1 1 -88.0304 84.1626 -174.45 - 67 497.833 1319 1 0 -87.8892 84.0319 -175.85 - 67 195.068 477 0 1 -84.6408 81.5036 -204.45 - 67 249.299 1306 0 0 -84.4846 81.3106 -205.85 - 67 9.00729 478 0 1 -84.45 81.5457 -204.815 - 67 169.718 1309 0 0 -83.7163 81.8625 -205.85 - 67 149.879 1308 0 0 -83.3179 81.85 -206.005 - 67 0.669914 1318 1 0 -88.0887 83.85 -176.055 - 67 148.459 1360 4 0 -94.8098 92.15 -85.9543 - 67 120.602 1361 4 0 -94.9097 92.35 -85.9317 - 67 31.3395 431 4 1 -93.8026 92.6178 -84.8499 - 67 8.3898 1277 5 0 -94.0229 75.513 -56.25 -Number of digits in this event: 55 -Using G4ParticleGun... -Particle energy: 6.00409 LIN -Particle: e- -Event: 68 -Number of tracker hits in this event: 31 - 68 123.362 1252 9 1 70.6005 -93.9542 65.55 - 68 120.07 430 9 0 70.6004 -93.953 64.15 - 68 354.204 1252 8 1 70.6009 -93.9293 35.55 - 68 172.435 431 8 0 70.6009 -93.9282 34.15 - 68 267.221 1252 7 1 70.6022 -93.9034 5.55 - 68 155.377 431 7 0 70.6026 -93.9013 4.15 - 68 222.502 1252 6 1 70.6071 -93.856 -24.45 - 68 252.92 431 6 0 70.6083 -93.8532 -25.85 - 68 199.758 1252 5 1 70.6316 -93.7983 -54.45 - 68 122.112 431 5 0 70.6325 -93.7959 -55.85 - 68 107.006 1253 4 1 70.6579 -93.7496 -84.45 - 68 108.415 432 4 0 70.6583 -93.7479 -85.85 - 68 170.054 1253 3 1 70.6633 -93.7099 -114.45 - 68 126.669 432 3 0 70.6642 -93.7075 -115.85 - 68 195.369 1253 2 1 70.683 -93.6689 -144.45 - 68 103.034 432 2 0 70.6849 -93.669 -145.85 - 68 113.917 1253 1 1 70.7155 -93.6757 -174.45 - 68 164.67 432 1 0 70.7166 -93.6756 -175.85 - 68 344.387 1253 0 1 70.7479 -93.6714 -204.45 - 68 414.886 432 0 0 70.7509 -93.6742 -205.85 - 68 71.5059 560 6 0 59.0919 -68.0141 -26.25 - 68 77.5738 559 6 0 59.0685 -68.05 -26.1497 - 68 337.087 1196 6 1 59.3154 -68.1908 -24.8499 - 68 180.435 558 6 0 59.6579 -68.2704 -25.8501 - 68 119.814 1190 6 1 58.1602 -68.56 -24.85 - 68 8.55379 1189 6 1 58.05 -68.5492 -24.8252 - 68 73.813 557 6 0 57.6834 -68.5855 -25.8504 - 68 15.2534 1253 8 1 70.65 -93.8843 35.323 - 68 88.7502 1252 2 1 70.65 -93.7405 -144.587 - 68 108.779 433 2 0 69.6602 -93.4101 -145.85 - 68 71.806 434 2 0 69.3715 -93.35 -146.143 -Number of digits in this event: 20 -Using G4ParticleGun... -Particle energy: 5.43115 LIN -Particle: e- -Event: 69 -Number of tracker hits in this event: 65 - 69 198.311 1461 9 1 112.419 43.0018 65.55 - 69 124.726 1114 9 0 112.419 43.0015 64.15 - 69 114.556 1461 8 1 112.418 42.9908 35.55 - 69 112.709 1114 8 0 112.419 42.9906 34.15 - 69 184.107 1461 7 1 112.434 42.9887 5.55 - 69 115.403 1114 7 0 112.437 42.9828 4.15 - 69 111.348 1461 6 1 112.463 42.784 -24.45 - 69 198.042 1113 6 0 112.464 42.7688 -25.85 - 69 590.53 1461 5 1 112.442 42.4941 -54.45 - 69 121.819 1112 5 0 112.441 42.4804 -55.85 - 69 436.44 1461 4 1 112.365 42.1981 -84.45 - 69 151.29 1110 4 0 112.371 42.1876 -85.85 - 69 341.142 1461 3 1 112.529 41.9959 -114.45 - 69 100.975 1109 3 0 112.544 41.9962 -115.85 - 69 172.3 1463 2 1 112.848 41.9944 -144.45 - 69 127.272 1109 2 0 112.837 41.9763 -145.85 - 69 420.458 1462 1 1 112.682 41.5983 -174.45 - 69 125.221 1107 1 0 112.671 41.5798 -175.85 - 69 117.804 1461 0 1 112.376 41.4637 -204.45 - 69 152.946 1107 0 0 112.403 41.4798 -205.85 - 69 455.429 1463 0 1 112.846 41.2866 -204.45 - 69 334.342 1106 0 0 112.845 41.2768 -205.85 - 69 9.79946 1105 0 0 112.698 41.25 -206.21 - 69 219.6 1114 5 0 112.476 42.9671 -55.8504 - 69 129.854 1469 4 1 114.132 42.5207 -84.45 - 69 155.927 1112 4 0 114.137 42.6083 -85.8508 - 69 16.6363 1472 3 1 114.553 44.581 -114.45 - 69 125.61 1471 3 1 114.55 44.5756 -114.506 - 69 126.703 1122 3 0 114.487 44.5068 -115.85 - 69 151.122 1462 2 1 112.687 42.4441 -144.45 - 69 101.854 1112 2 0 112.766 42.4848 -145.85 - 69 115.789 1473 1 1 114.796 42.6699 -174.45 - 69 107.777 1112 1 0 114.706 42.5983 -175.85 - 69 47.0183 1460 0 1 112.293 40.6636 -204.45 - 69 127.516 1459 0 1 112.15 40.7545 -204.52 - 69 107.207 1104 0 0 111.712 40.8737 -205.85 - 69 83.1061 1084 0 0 84.7222 37.0064 -206.25 - 69 84.8917 1083 0 0 84.5654 36.85 -206.094 - 69 48.792 1082 0 0 84.3471 36.65 -205.953 - 69 176.687 1319 0 1 84.0437 34.9168 -204.85 - 69 51.594 1318 0 1 83.85 34.3059 -204.58 - 69 198.811 1317 0 1 83.647 34.2041 -204.45 - 69 126.471 1071 0 0 83 34.4249 -205.85 - 69 156.34 1070 0 0 82.7988 34.25 -206.025 - 69 109.651 1069 0 0 82.3663 34.05 -206.061 - 69 133.285 1038 0 0 91.5768 27.6685 -206.25 - 69 65.755 1039 0 0 91.7184 27.85 -206.195 - 69 5.95988 1224 0 0 131.789 64.85 -205.93 - 69 294.768 1561 0 1 132.471 65.5231 -204.85 - 69 200.938 1114 4 0 112.421 42.9231 -85.85 - 69 106.555 1113 3 0 112.428 42.8303 -115.85 - 69 141.039 1461 2 1 112.505 42.7771 -144.45 - 69 105.457 1113 2 0 112.513 42.7796 -145.85 - 69 123.576 1113 1 0 112.679 42.8333 -175.85 - 69 128.199 1114 0 0 112.909 42.9535 -205.85 - 69 8.007 1532 6 1 126.75 22.4799 -24.7577 - 69 161.032 1517 7 0 48.2005 123.621 3.75 - 69 103.094 1518 7 0 48.1164 123.75 4.1014 - 69 39.7762 1519 7 0 48.2605 123.95 4.13477 - 69 94.0309 1140 7 1 48.1213 127.012 5.15023 - 69 62.3506 1141 7 1 48.2501 127.084 5.25604 - 69 148.604 1528 7 0 49.6816 125.85 4.14984 - 69 221.231 1527 7 0 49.7094 125.75 4.04918 - 69 510.774 1461 1 1 112.55 42.7454 -174.53 - 69 50.2287 1460 1 1 112.35 41.981 -174.493 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 4.63005 LIN -Particle: e- -Event: 70 -Number of tracker hits in this event: 43 - 70 115.874 1383 10 1 96.8308 -54.2422 95.55 - 70 100.569 629 10 0 96.8314 -54.2423 94.15 - 70 132.475 1383 9 1 96.8449 -54.2512 65.55 - 70 149.684 628 9 0 96.8455 -54.2513 64.15 - 70 106.72 1383 8 1 96.8576 -54.2516 35.55 - 70 162.334 628 8 0 96.8576 -54.2523 34.15 - 70 184.974 1383 7 1 96.8541 -54.2596 5.55 - 70 141.664 628 7 0 96.8519 -54.2601 4.15 - 70 113.51 1383 6 1 96.8078 -54.2757 -24.45 - 70 108.663 628 6 0 96.8074 -54.2753 -25.85 - 70 129.069 1383 5 1 96.8036 -54.2628 -54.45 - 70 96.024 628 5 0 96.801 -54.2612 -55.85 - 70 127.71 1382 4 1 96.7464 -54.2232 -84.45 - 70 111.119 629 4 0 96.7413 -54.2215 -85.85 - 70 103.69 1382 3 1 96.6469 -54.1921 -114.45 - 70 115.735 629 3 0 96.6423 -54.1918 -115.85 - 70 126.441 1381 2 1 96.546 -54.1835 -144.45 - 70 126.25 629 2 0 96.544 -54.184 -145.85 - 70 124.466 1381 1 1 96.5143 -54.193 -174.45 - 70 151.425 629 1 0 96.5135 -54.1944 -175.85 - 70 180.439 1381 0 1 96.545 -54.2936 -204.45 - 70 143.679 628 0 0 96.5553 -54.2751 -205.85 - 70 145.423 1382 0 1 96.5501 -54.286 -204.715 - 70 139.863 489 8 0 101.245 -82.05 34.032 - 70 0.597366 680 14 0 62.5351 -43.852 213.75 - 70 74.0869 681 14 0 62.5333 -43.85 213.751 - 70 74.4458 682 14 0 62.3472 -43.6498 213.916 - 70 52.0275 683 14 0 62.2422 -43.4495 214.048 - 70 51.8998 1188 14 1 57.7821 -38.4981 215.15 - 70 71.0127 1187 14 1 57.65 -38.3577 215.22 - 70 263.418 1186 14 1 57.45 -38.2922 215.39 - 70 422.431 1185 14 1 57.25 -38.4193 215.538 - 70 242.289 1184 14 1 57.05 -38.7809 215.173 - 70 12.5272 435 1 0 44.768 -93.15 -175.97 - 70 32.035 366 2 0 164.28 -106.882 -146.25 - 70 100.701 898 2 1 -0.25 -45.9502 -144.56 - 70 11.1893 899 2 1 -0.249981 -45.9457 -144.493 - 70 124.527 627 7 0 96.6719 -54.45 4.12134 - 70 61.685 1339 6 1 87.8789 -60.9802 -24.4502 - 70 112.802 1340 6 1 88.0501 -60.8436 -24.6232 - 70 62.4523 1341 6 1 88.2501 -60.7774 -24.7658 - 70 156.3 596 6 0 89.758 -60.67 -25.8512 - 70 46.8235 595 6 0 90.3854 -60.85 -26.2051 -Number of digits in this event: 23 -Using G4ParticleGun... -Particle energy: 3.13931 LIN -Particle: e- -Event: 71 -Number of tracker hits in this event: 58 - 71 105.528 924 9 1 4.85577 117.494 65.55 - 71 106.204 1486 9 0 4.85722 117.495 64.15 - 71 136.918 924 8 1 4.8976 117.524 35.55 - 71 121.514 1486 8 0 4.90145 117.524 34.15 - 71 108.281 924 7 1 4.9766 117.521 5.55 - 71 116.384 1486 7 0 4.98132 117.519 4.15 - 71 270.323 925 6 1 5.07967 117.469 -24.45 - 71 299.939 1486 6 0 5.08406 117.469 -25.85 - 71 130.952 925 5 1 5.15916 117.472 -54.45 - 71 131.102 1486 5 0 5.16337 117.473 -55.85 - 71 131.795 926 4 1 5.25426 117.502 -84.45 - 71 123.233 1486 4 0 5.25896 117.505 -85.85 - 71 94.8286 926 3 1 5.35937 117.577 -114.45 - 71 118.585 1487 3 0 5.36582 117.583 -115.85 - 71 242.976 927 2 1 5.49297 117.685 -144.45 - 71 93.4706 1487 2 0 5.50021 117.689 -145.85 - 71 171.981 928 1 1 5.65591 117.766 -174.45 - 71 124.535 1488 1 0 5.66621 117.775 -175.85 - 71 131.586 929 0 1 5.86396 117.936 -204.45 - 71 124.199 1488 0 0 5.87396 117.947 -205.85 - 71 118.34 918 5 1 3.78571 119.663 -54.4502 - 71 90.5097 919 5 1 3.85 119.769 -54.6056 - 71 100.3 1502 5 0 4.26624 120.613 -55.8503 - 71 78.9699 1503 5 0 4.3329 120.75 -56.0625 - 71 88.3506 982 4 1 16.5387 138.661 -84.45 - 71 76.6792 981 4 1 16.45 138.796 -84.6701 - 71 301.707 1596 4 0 16.0367 139.39 -85.85 - 71 170.573 1597 4 0 15.8876 139.55 -86.1888 - 71 37.9658 904 3 1 0.981528 154.077 -114.45 - 71 57.8583 903 3 1 0.85 154.176 -114.504 - 71 81.3267 902 3 1 0.65 154.328 -114.61 - 71 107.934 901 3 1 0.45 154.47 -114.707 - 71 46.2115 900 3 1 0.25 154.59 -114.797 - 71 48.2202 1678 3 0 -1.81191 155.865 -115.85 - 71 139.04 1679 3 0 -1.9532 155.95 -115.928 - 71 41.0034 1680 3 0 -2.29164 156.15 -116.159 - 71 251.807 925 3 1 5.09442 117.565 -114.45 - 71 181.083 1488 3 0 5.28434 117.76 -115.85 - 71 127.656 947 2 1 9.54569 120.87 -144.45 - 71 118.889 1501 2 0 9.51755 120.53 -145.85 - 71 133.414 943 1 1 8.67554 114.23 -174.45 - 71 7.37831 942 1 1 8.65 114.299 -174.825 - 71 27.1289 1471 1 0 8.59298 114.531 -175.85 - 71 138.058 1472 1 0 8.58743 114.55 -175.936 - 71 173.132 936 0 1 7.40047 123.335 -204.45 - 71 307.921 1516 0 0 7.59966 123.368 -205.85 - 71 128.847 1486 3 0 5.0044 117.481 -115.85 - 71 209.957 1496 2 0 5.41602 119.521 -145.85 - 71 152.859 917 1 1 3.54114 123.226 -174.45 - 71 34.4262 918 1 1 3.65 123.652 -174.77 - 71 3.59364 1522 1 0 4.07152 124.743 -175.85 - 71 69.2745 1523 1 0 4.07448 124.75 -175.857 - 71 120.592 1524 1 0 4.14462 124.95 -176.015 - 71 51.7493 1525 1 0 4.19366 125.15 -176.176 - 71 105.819 923 0 1 4.70888 161.199 -204.45 - 71 24.0014 922 0 1 4.64985 161.128 -204.734 - 71 122.326 1704 0 0 4.40645 161.056 -205.85 - 71 130.59 934 0 1 6.85 162.209 -204.749 -Number of digits in this event: 33 -Using G4ParticleGun... -Particle energy: 7.74895 LIN -Particle: e- -Event: 72 -Number of tracker hits in this event: 215 - 72 134.341 758 11 1 -28.3336 17.6486 125.55 - 72 108.958 987 11 0 -28.3335 17.6492 124.15 - 72 161.315 758 10 1 -28.335 17.6654 95.55 - 72 115.52 988 10 0 -28.3348 17.6659 94.15 - 72 557.312 758 9 1 -28.3276 17.6724 65.55 - 72 375.67 988 9 0 -28.3264 17.6716 64.15 - 72 373.743 758 8 1 -28.3053 17.6535 35.55 - 72 282.929 988 8 0 -28.3039 17.6532 34.15 - 72 112.114 758 7 1 -28.2783 17.6491 5.55 - 72 234.316 987 7 0 -28.277 17.6488 4.15 - 72 122.056 758 6 1 -28.2518 17.6439 -24.45 - 72 147.368 987 6 0 -28.2504 17.641 -25.85 - 72 119.222 759 5 1 -28.2158 17.575 -54.45 - 72 370.341 987 5 0 -28.2144 17.572 -55.85 - 72 147.788 759 4 1 -28.1957 17.5117 -84.45 - 72 157.925 987 4 0 -28.195 17.5073 -85.85 - 72 402.799 759 3 1 -28.1846 17.4161 -114.45 - 72 348.252 986 3 0 -28.1818 17.4112 -115.85 - 72 90.2315 759 2 1 -28.1247 17.3129 -144.45 - 72 261.413 986 2 0 -28.1212 17.3093 -145.85 - 72 133.448 760 1 1 -28.05 17.2315 -174.45 - 72 320.278 985 1 0 -28.0464 17.2288 -175.85 - 72 137.408 760 0 1 -27.9746 17.1726 -204.45 - 72 170.662 985 0 0 -27.9709 17.1701 -205.85 - 72 28.3065 917 0 0 -25.9837 3.65 -206.075 - 72 72.6013 1289 2 0 -0.765779 77.9817 -146.249 - 72 84.0881 1288 2 0 -0.679075 77.8495 -146.056 - 72 2.76753 1287 2 0 -0.628011 77.65 -145.859 - 72 212.16 900 2 1 0.161541 76.7542 -144.85 - 72 225.912 901 2 1 0.250034 76.4756 -144.717 - 72 181.782 902 2 1 0.450485 75.934 -144.7 - 72 80.3927 903 2 1 0.65 76.0992 -144.649 - 72 245.919 904 2 1 0.85 76.1056 -144.747 - 72 167.385 981 4 0 -26.2312 16.2911 -85.85 - 72 225.625 986 5 0 -28.127 17.45 -56.0682 - 72 297.659 987 3 0 -28.1546 17.5648 -115.85 - 72 121.232 760 2 1 -27.9741 17.1431 -144.45 - 72 172.131 985 2 0 -28.0106 17.1202 -145.85 - 72 342.455 756 1 1 -28.8178 16.5718 -174.45 - 72 19.7983 755 1 1 -28.8501 16.501 -174.818 - 72 61.0853 981 1 0 -28.9393 16.2955 -175.85 - 72 162.547 980 1 0 -28.9663 16.25 -176.068 - 72 58.7633 733 0 1 -33.3108 10.8122 -204.45 - 72 68.7349 732 0 1 -33.4503 10.7601 -204.658 - 72 48.1149 952 0 0 -34.3224 10.4752 -205.85 - 72 173.005 951 0 0 -34.4098 10.45 -205.974 - 72 128.968 982 1 0 -28.766 16.5155 -175.85 - 72 118.947 763 0 1 -27.3415 15.6646 -204.45 - 72 86.5306 978 0 0 -27.2068 15.6539 -205.85 - 72 24.1956 977 0 0 -27.1739 15.65 -206.167 - 72 46.664 1124 1 0 -59.9672 45.023 -176.25 - 72 133.571 1125 1 0 -59.9913 45.05 -176.207 - 72 37.6431 591 1 1 -61.7225 46.1195 -174.85 - 72 107.064 590 1 1 -61.85 46.1655 -174.785 - 72 59.0639 589 1 1 -62.05 46.1549 -174.791 - 72 184.172 588 1 1 -62.25 46.1699 -174.788 - 72 157.539 587 1 1 -62.45 46.141 -174.611 - 72 121.985 748 0 1 -30.2847 8.7314 -204.45 - 72 216.147 942 0 0 -30.3914 8.53652 -205.85 - 72 113.325 758 2 1 -28.2724 17.4423 -144.45 - 72 177.783 758 1 1 -28.3663 17.1808 -174.45 - 72 160.823 757 0 1 -28.4952 17.0189 -204.45 - 72 137.708 984 0 0 -28.498 17.0157 -205.85 - 72 42.3067 736 7 1 -32.8035 17.8411 5.55 - 72 109.474 735 7 1 -32.85 17.8144 5.39336 - 72 71.1441 709 6 1 -38.2293 10.5677 -24.45 - 72 183.148 708 6 1 -38.25 10.534 -24.5374 - 72 127.006 950 6 0 -38.5409 10.2276 -25.85 - 72 50.1099 679 5 1 -44.0833 5.71417 -54.45 - 72 65.4505 678 5 1 -44.2506 5.65615 -54.5121 - 72 120.766 677 5 1 -44.45 5.60989 -54.5994 - 72 55.6384 676 5 1 -44.65 5.56887 -54.7011 - 72 11.8426 675 5 1 -44.85 5.51721 -54.8271 - 72 359.143 925 5 0 -46.3557 5.17964 -55.85 - 72 130.289 286 4 1 -122.816 5.55498 -84.4502 - 72 180.371 285 4 1 -122.95 5.29077 -84.5187 - 72 96.8837 284 4 1 -123.15 4.88139 -84.6936 - 72 16.3189 915 4 0 -124.709 3.06524 -85.8501 - 72 71.9736 914 4 0 -124.724 3.05 -85.8602 - 72 82.5533 913 4 0 -124.881 2.84968 -85.9812 - 72 79.5099 912 4 0 -124.978 2.64979 -86.0644 - 72 60.1293 911 4 0 -125.012 2.45 -86.1512 - 72 46.0333 910 4 0 -124.974 2.24881 -86.2236 - 72 87.3716 710 6 1 -38.05 10.5402 -24.5194 - 72 42.1478 711 6 1 -37.85 10.624 -24.7636 - 72 40.4079 958 6 0 -37.2388 11.7514 -25.85 - 72 107.074 959 6 0 -37.1932 11.85 -25.9461 - 72 35.0075 960 6 0 -37.0371 12.05 -26.1733 - 72 10.0428 815 5 1 -16.8858 20.5031 -54.45 - 72 69.1258 816 5 1 -16.8495 20.5073 -54.4568 - 72 95.5046 817 5 1 -16.6498 20.6201 -54.5519 - 72 89.8943 818 5 1 -16.45 20.7482 -54.5982 - 72 86.384 819 5 1 -16.25 20.6842 -54.7977 - 72 101.574 1001 5 0 -15.708 20.3819 -55.85 - 72 165.735 1000 5 0 -15.5439 20.25 -56.0692 - 72 129.321 987 8 0 -28.3267 17.6416 34.15 - 72 120.751 757 7 1 -28.5437 17.3337 5.54917 - 72 129.258 986 7 0 -28.5576 17.3531 4.14996 - 72 164.792 759 6 1 -28.2181 17.0849 -24.4501 - 72 219.492 984 6 0 -28.1265 17.025 -25.85 - 72 154.798 770 5 1 -26.0247 15.8785 -54.4506 - 72 112.335 980 5 0 -25.803 16.1414 -55.8501 - 72 83.1699 787 4 1 -22.5593 21.3389 -84.45 - 72 102.631 788 4 1 -22.4497 21.4662 -84.6457 - 72 106.77 1012 4 0 -21.7916 22.4546 -85.8501 - 72 49.4891 1013 4 0 -21.6493 22.6502 -86.1096 - 72 147.783 938 6 0 98.9381 7.67649 -26.25 - 72 88.4449 771 5 1 -25.8495 15.9716 -54.5183 - 72 32.9516 772 5 1 -25.6498 16.0724 -54.7526 - 72 0.139221 982 5 0 -24.7393 16.6493 -55.85 - 72 119.662 983 5 0 -24.7382 16.65 -55.8513 - 72 47.1221 984 5 0 -24.4578 16.85 -56.1454 - 72 7.74248 917 4 1 3.63739 37.3446 -84.45 - 72 110.382 918 4 1 3.65 37.3574 -84.4567 - 72 166.206 919 4 1 3.85 37.5716 -84.5711 - 72 149.603 920 4 1 4.05041 37.8235 -84.6828 - 72 47.3674 921 4 1 4.25 38.0801 -84.8074 - 72 10.9092 1101 4 0 6.28483 40.422 -85.85 - 72 64.9116 1102 4 0 6.30937 40.45 -85.8627 - 72 70.0423 1103 4 0 6.48611 40.6501 -85.9531 - 72 77.1191 1104 4 0 6.65154 40.85 -86.0449 - 72 55.1504 1105 4 0 6.80303 41.0501 -86.1548 - 72 141.057 1137 3 1 47.588 89.6051 -114.45 - 72 12.6993 1136 3 1 47.45 89.9915 -114.817 - 72 65.4786 1354 3 0 47.1101 90.9697 -115.85 - 72 90.8681 1355 3 0 47.0477 91.15 -116.04 - 72 1.34849 1356 3 0 46.9952 91.35 -116.245 - 72 154.418 1110 2 1 42.0668 120.088 -144.45 - 72 395.481 1503 2 0 42.6602 120.813 -145.85 - 72 146.634 1504 2 0 42.791 120.95 -146.07 - 72 45.3298 1650 2 0 45.6569 150.204 -146.25 - 72 94.7932 1651 2 0 45.5785 150.35 -146.13 - 72 51.6167 1652 2 0 45.5019 150.55 -145.994 - 72 393.788 1125 2 1 45.17 151.498 -144.85 - 72 11.733 1124 2 1 45.0345 151.719 -144.45 - 72 143.462 742 3 1 -31.5239 17.8993 -114.45 - 72 39.2833 985 3 0 -31.6567 17.25 -116.193 - 72 75.696 927 3 0 -47.5475 5.64254 -116.25 - 72 1.64206 1012 5 0 -33.9717 22.6346 -55.85 - 72 86.2556 1013 5 0 -33.9853 22.65 -56.0078 - 72 139.75 987 9 0 -28.3468 17.6473 64.15 - 72 113.486 756 8 1 -28.8145 17.2237 35.55 - 72 109.758 985 8 0 -28.8277 17.2042 34.15 - 72 110.037 754 7 1 -29.1102 16.7496 5.55 - 72 119.997 983 7 0 -29.1207 16.7299 4.15 - 72 178.644 753 6 1 -29.3745 16.3659 -24.45 - 72 120.1 981 6 0 -29.4197 16.2976 -25.85 - 72 89.723 749 5 1 -30.2127 14.8203 -54.45 - 72 158.37 973 5 0 -30.2585 14.7145 -55.85 - 72 116.835 744 4 1 -31.1234 12.4978 -84.45 - 72 105.773 961 4 0 -31.1547 12.3667 -85.85 - 72 193.935 741 3 1 -31.6594 9.60087 -114.45 - 72 154.296 947 3 0 -31.6897 9.48783 -115.85 - 72 169.923 738 2 1 -32.2879 7.2218 -144.45 - 72 209.753 935 2 0 -32.2623 7.14001 -145.85 - 72 121.429 741 1 1 -31.7735 5.43342 -174.45 - 72 193.376 926 1 0 -31.7736 5.32789 -175.85 - 72 95.8118 741 0 1 -31.7001 3.23226 -204.45 - 72 133.399 915 0 0 -31.6908 3.12996 -205.85 - 72 177.633 762 8 1 -27.5209 18.8112 35.55 - 72 41.7825 993 8 0 -27.5114 18.8456 34.15 - 72 77.8776 994 8 0 -27.5103 18.85 33.9743 - 72 134.801 760 7 1 -27.9542 19.3338 5.54908 - 72 102.958 996 7 0 -28.0005 19.4157 4.15 - 72 130.561 756 6 1 -28.7334 21.6156 -24.45 - 72 137.666 1008 6 0 -28.8438 21.7842 -25.85 - 72 133.541 744 5 1 -31.1046 25.1372 -54.4501 - 72 28.1009 1025 5 0 -31.2569 25.2408 -55.85 - 72 96.0784 1026 5 0 -31.2698 25.25 -55.9666 - 72 220.901 728 4 1 -34.3366 27.7187 -84.45 - 72 125.722 1039 4 0 -34.5473 27.9305 -85.85 - 72 279.027 706 3 1 -38.7775 32.3924 -114.45 - 72 38.2596 705 3 1 -38.8501 32.4519 -114.751 - 72 136.348 1063 3 0 -39.1082 32.667 -115.85 - 72 159.696 672 2 1 -45.486 38.1832 -144.45 - 72 116.128 1092 2 0 -45.7665 38.5311 -145.85 - 72 118.42 644 1 1 -51.1116 45.608 -174.45 - 72 79.906 1129 1 0 -51.3701 46.0009 -175.85 - 72 66.7415 1130 1 0 -51.4023 46.05 -176.025 - 72 176.665 617 0 1 -56.4747 53.8926 -204.45 - 72 121.51 1172 0 0 -56.6805 54.4774 -205.85 - 72 20.8862 995 9 0 -29.365 19.2243 64.15 - 72 248.205 996 9 0 -29.3981 19.25 64.1345 - 72 237.218 761 5 1 -27.7008 20.6534 -54.6505 - 72 13.0358 1004 5 0 -27.7713 21.0293 -55.85 - 72 306.261 1005 5 0 -27.7759 21.0501 -55.8964 - 72 15.6269 1006 5 0 -27.23 21.25 -56.2138 - 72 227.454 1285 5 0 -17.454 77.2294 -56.2496 - 72 25.6151 1286 5 0 -17.4727 77.2501 -56.2294 - 72 0.525931 733 5 1 -33.25 89.8652 -54.6144 - 72 22.3045 999 5 0 -28.2956 19.8894 -55.85 - 72 144.368 998 5 0 -28.3245 19.85 -55.9084 - 72 151.201 749 3 1 -30.1463 -60.9826 -114.45 - 72 38.3122 594 3 0 -30.0486 -61.0705 -115.85 - 72 91.8607 595 3 0 -29.9986 -61.05 -116.007 - 72 85.654 727 8 1 -34.5386 18.2574 35.5495 - 72 57.4343 728 8 1 -34.45 18.3048 35.2733 - 72 143.905 992 8 0 -34.0433 18.4571 34.15 - 72 23.3134 789 7 1 -22.2083 21.6417 5.55 - 72 170.865 788 7 1 -22.25 21.7322 5.49845 - 72 33.259 1017 7 0 -22.541 23.5442 4.15 - 72 66.8199 1018 7 0 -22.5528 23.65 4.07204 - 72 243.141 1019 7 0 -22.6121 23.85 3.90905 - 72 0.070583 1020 7 0 -22.6717 24.05 3.75025 - 72 203.001 752 6 1 -29.5149 60.2505 -24.45 - 72 43.7694 1199 6 0 -29.1612 59.883 -25.85 - 72 71.4765 1198 6 0 -29.1223 59.85 -26.0118 - 72 225.827 902 5 1 0.566979 63.2461 -54.45 - 72 9.08117 901 5 1 0.45 63.8624 -54.8303 - 72 5.35826 1227 5 0 -0.181888 65.6317 -55.85 - 72 80.123 1228 5 0 -0.188857 65.65 -55.8603 - 72 65.8857 1229 5 0 -0.270751 65.85 -56.0556 - 72 151.22 1248 5 0 -17.1936 69.7685 -56.2498 - 72 118.554 751 6 1 -29.6501 60.2785 -24.5993 - 72 241.976 863 1 0 -37.4889 -7.35041 -176.25 -Number of digits in this event: 101 -Using G4ParticleGun... -Particle energy: 2.68413 LIN -Particle: e- -Event: 73 -Number of tracker hits in this event: 153 - 73 116.588 889 11 1 -2.13092 55.0305 125.55 - 73 99.8286 1174 11 0 -2.13177 55.0316 124.15 - 73 150.507 889 10 1 -2.13756 55.0499 95.55 - 73 156.42 1175 10 0 -2.14057 55.0531 94.15 - 73 232.072 889 9 1 -2.22007 55.1289 65.55 - 73 439.092 1175 9 0 -2.22553 55.1322 64.15 - 73 151.943 888 8 1 -2.3233 55.1901 35.55 - 73 98.2266 1175 8 0 -2.32952 55.1936 34.15 - 73 120.743 888 7 1 -2.4408 55.2924 5.55 - 73 189.327 1176 7 0 -2.44772 55.2972 4.15 - 73 103.67 887 6 1 -2.58831 55.3874 -24.45 - 73 114.771 1176 6 0 -2.59712 55.3956 -25.85 - 73 127.634 886 5 1 -2.7771 55.5682 -54.45 - 73 375.636 1177 5 0 -2.7821 55.5805 -55.85 - 73 126.313 885 4 1 -2.87289 55.8306 -84.45 - 73 48.5831 1178 4 0 -2.87909 55.8481 -85.85 - 73 64.7553 1179 4 0 -2.87978 55.85 -86.0039 - 73 231.929 885 3 1 -2.97998 56.2035 -114.45 - 73 112.238 1180 3 0 -2.98439 56.221 -115.85 - 73 209.77 884 2 1 -3.07946 56.6076 -144.45 - 73 126.588 1182 2 0 -3.08367 56.625 -145.85 - 73 111.887 884 1 1 -3.17518 56.9755 -174.45 - 73 129.114 1184 1 0 -3.18169 56.9898 -175.85 - 73 413.259 883 0 1 -3.3312 57.2775 -204.45 - 73 135.201 1186 0 0 -3.34031 57.2925 -205.85 - 73 276.323 886 4 1 -2.80255 55.4707 -84.4505 - 73 266.007 1177 4 0 -2.79761 55.4618 -85.8503 - 73 141.713 888 3 1 -2.44773 54.7186 -114.45 - 73 113.319 1172 3 0 -2.15396 54.548 -115.85 - 73 102.29 924 2 1 4.92117 51.151 -144.45 - 73 210.482 1154 2 0 5.03501 51.0436 -145.85 - 73 275.016 937 1 1 7.54021 48.713 -174.45 - 73 268.213 1143 1 0 7.88372 48.7372 -175.851 - 73 103.343 972 0 1 14.4678 51.4097 -204.45 - 73 1.9273 1157 0 0 14.6669 51.6482 -205.85 - 73 200.833 1158 0 0 14.6686 51.65 -205.861 - 73 143.881 1178 3 0 -2.94157 55.689 -115.85 - 73 126.807 895 2 1 -1.00541 56.3118 -144.45 - 73 125.819 1180 2 0 -0.633253 56.1502 -145.85 - 73 149.896 949 1 1 9.88303 54.1033 -174.45 - 73 18.3404 950 1 1 10.05 53.9598 -174.794 - 73 189.97 1166 1 0 10.5679 53.4472 -175.85 - 73 3.18106 1165 1 0 10.7478 53.25 -176.235 - 73 257.582 1017 0 1 23.5032 38.7425 -204.45 - 73 59.3726 1082 0 0 23.8522 36.617 -205.85 - 73 66.3621 1081 0 0 23.8858 36.45 -205.956 - 73 78.1593 1080 0 0 23.9254 36.25 -206.087 - 73 13.2561 1079 0 0 23.9698 36.0499 -206.222 - 73 209.081 1178 0 0 -3.47663 55.7597 -205.85 - 73 89.8054 1177 0 0 -3.36065 55.4667 -205.85 - 73 103.698 887 8 1 -2.58705 55.0523 35.55 - 73 148.336 1174 8 0 -2.43654 54.9643 34.15 - 73 116.643 903 7 1 0.659497 52.649 5.55 - 73 92.8849 1163 7 0 0.760131 52.6826 4.15 - 73 128.062 915 6 1 3.06383 53.5906 -24.45 - 73 150.101 1168 6 0 3.06039 53.6677 -25.85 - 73 57.3968 929 5 1 5.9875 55.8133 -54.45 - 73 78.2175 930 5 1 6.05002 55.7789 -54.6288 - 73 10.5445 982 4 1 16.6298 53.2468 -84.4502 - 73 121.388 983 4 1 16.65 53.237 -84.4718 - 73 119.863 984 4 1 16.85 53.147 -84.6789 - 73 279.007 1163 4 0 17.978 52.6947 -85.85 - 73 229.338 1162 4 0 18.0928 52.65 -85.9683 - 73 95.1504 1121 3 1 44.305 44.8467 -114.45 - 73 74.6199 1122 3 1 44.45 44.7958 -114.606 - 73 19.8301 1123 3 1 44.6501 44.7311 -114.807 - 73 180.161 1121 3 0 45.7839 44.3687 -115.851 - 73 83.9516 1272 2 1 74.4537 38.5667 -144.45 - 73 82.6029 1273 2 1 74.65 38.516 -144.608 - 73 34.186 1274 2 1 74.85 38.4703 -144.766 - 73 208.206 1090 2 0 76.1361 38.1814 -145.85 - 73 52.4879 1449 1 1 110.049 33.4612 -174.45 - 73 95.8158 1450 1 1 110.15 33.4736 -174.568 - 73 12.0398 1451 1 1 110.35 33.466 -174.843 - 73 81.0511 1067 1 0 111.043 33.4533 -175.85 - 73 56.337 1066 1 0 111.216 33.45 -176.107 - 73 109.383 1550 0 1 130.245 31.8508 -204.45 - 73 94.9541 1551 0 1 130.35 31.7885 -204.522 - 73 63.1236 1552 0 1 130.55 31.6872 -204.659 - 73 36.0265 1553 0 1 130.75 31.6106 -204.799 - 73 18.9986 1055 0 0 132.285 31.0688 -205.85 - 73 197.291 1054 0 0 132.339 31.05 -205.887 - 73 40.7144 889 8 1 -2.07447 55.1101 35.5496 - 73 169.781 890 8 1 -2.05 55.0898 35.4224 - 73 89.5874 1173 8 0 -1.7687 54.85 34.0563 - 73 121.524 926 7 1 5.25263 49.7839 5.55 - 73 0.957444 1146 7 0 5.87464 49.251 4.15 - 73 145.682 1145 7 0 5.87578 49.25 4.14738 - 73 57.0023 994 6 1 18.9644 39.0529 -24.45 - 73 93.5441 995 6 1 19.05 39.0236 -24.6429 - 73 18.7584 1094 6 0 19.6229 38.8567 -25.85 - 73 146.45 1093 6 0 19.6461 38.8499 -25.8997 - 73 90.1359 1065 5 1 33.219 35.05 -54.45 - 73 84.9775 1066 5 1 33.25 35.0384 -54.5174 - 73 32.6831 1074 5 0 33.7441 34.8698 -55.8503 - 73 73.0118 1073 5 0 33.7931 34.85 -55.9821 - 73 78.0286 1118 4 1 43.7967 31.0592 -84.45 - 73 53.1815 1117 4 1 43.65 31.0363 -84.5138 - 73 85.2312 1116 4 1 43.4498 30.9967 -84.5996 - 73 59.2999 1115 4 1 43.2499 30.9495 -84.6779 - 73 65.5286 1114 4 1 43.0498 30.9013 -84.7475 - 73 38.7656 1113 4 1 42.8494 30.8444 -84.8134 - 73 54.2758 1049 4 0 39.5563 29.8914 -85.85 - 73 239.372 1048 4 0 39.4001 29.8499 -85.8989 - 73 121.66 1047 4 0 38.615 29.65 -86.1369 - 73 16.7048 1026 4 0 -78.2709 25.437 -86.25 - 73 275.96 1027 4 0 -78.3203 25.45 -86.2185 - 73 17.7857 493 4 1 -81.3991 25.981 -84.85 - 73 64.8452 492 4 1 -81.45 25.9883 -84.8289 - 73 59.201 491 4 1 -81.65 26.0164 -84.7479 - 73 49.827 490 4 1 -81.8502 26.0493 -84.6744 - 73 62.3902 489 4 1 -82.05 26.0759 -84.6111 - 73 71.0745 488 4 1 -82.2501 26.1157 -84.5438 - 73 10.9373 487 4 1 -82.4502 26.1448 -84.468 - 73 110.493 1057 5 0 -89.4506 31.4617 -56.2499 - 73 111.092 451 5 1 -89.684 31.7261 -54.8495 - 73 131.429 1053 6 0 -101.05 30.6615 -26.25 - 73 0.835477 393 6 1 -101.549 30.6429 -24.85 - 73 189.457 392 6 1 -101.55 30.6429 -24.8465 - 73 38.3016 1147 7 0 -115.581 49.5555 3.75 - 73 95.5428 1148 7 0 -115.64 49.65 3.8708 - 73 34.1974 1149 7 0 -115.753 49.85 4.07446 - 73 126.334 319 7 1 -116.226 51.0067 5.15007 - 73 63.218 318 7 1 -116.35 51.2973 5.42841 - 73 96.9552 1075 8 0 -130.371 35.1747 33.75 - 73 57.6232 1074 8 0 -130.487 35.05 33.9958 - 73 79.0081 245 8 1 -131.036 34.5045 35.1502 - 73 57.6155 244 8 1 -131.15 34.3975 35.398 - 73 60.4322 1011 9 0 -147.171 22.3169 63.75 - 73 95.3639 1010 9 0 -147.27 22.25 63.9117 - 73 22.8365 160 9 1 -148.105 21.6879 65.15 - 73 81.4891 159 9 1 -148.15 21.6588 65.2152 - 73 114.96 158 9 1 -148.35 21.5764 65.4221 - 73 180.429 973 10 0 -170.339 14.8157 93.75 - 73 28.9466 45 10 1 -171.115 14.5171 95.15 - 73 92.2997 44 10 1 -171.15 14.4859 95.2303 - 73 247.795 43 10 1 -171.35 14.3621 95.3689 - 73 87.4122 42 10 1 -171.55 13.664 95.3738 - 73 378.654 967 10 0 -172.711 13.5441 94.15 - 73 164.04 968 10 0 -173.033 13.65 93.8779 - 73 122.537 413 7 0 -84.2461 -97.35 3.87832 - 73 111.628 415 7 0 -84.0145 -97.15 3.83018 - 73 86.6738 1048 10 0 -137.723 29.7593 93.75 - 73 66.9367 1049 10 0 -137.634 29.85 93.9762 - 73 109.659 215 10 1 -137.132 30.0617 95.1502 - 73 101.833 216 10 1 -136.95 30.176 95.4887 - 73 74.3734 217 10 1 -136.75 30.2637 95.4471 - 73 53.8689 218 10 1 -136.55 30.4051 95.2681 - 73 37.7357 1053 10 0 -136.705 30.8027 94.1499 - 73 190.1 1054 10 0 -136.729 30.8501 94.0133 - 73 258.599 1141 10 0 -110.713 48.4073 93.75 - 73 426.261 157 9 1 -148.55 21.4308 65.5043 - 73 103.548 156 9 1 -148.75 20.896 65.2761 -Number of digits in this event: 59 -Using G4ParticleGun... -Particle energy: 6.02272 LIN -Particle: e- -Event: 74 -Number of tracker hits in this event: 97 - 74 139.289 666 10 1 -46.7503 -73.0725 95.55 - 74 133.011 534 10 0 -46.7486 -73.0726 94.15 - 74 119.902 666 9 1 -46.71 -73.072 65.55 - 74 103.585 534 9 0 -46.7086 -73.0724 64.15 - 74 106.856 666 8 1 -46.6838 -73.0879 35.55 - 74 167.258 534 8 0 -46.6846 -73.0888 34.15 - 74 348.485 666 7 1 -46.7028 -73.1062 5.55 - 74 111.136 534 7 0 -46.7029 -73.1067 4.15 - 74 112.038 666 6 1 -46.7094 -73.1145 -24.45 - 74 107.661 534 6 0 -46.7088 -73.1128 -25.85 - 74 131.615 666 5 1 -46.6919 -73.0712 -54.45 - 74 141.606 534 5 0 -46.6904 -73.0691 -55.85 - 74 337.365 666 4 1 -46.6624 -73.0297 -84.45 - 74 103.463 535 4 0 -46.6612 -73.0281 -85.85 - 74 472.598 667 3 1 -46.6312 -72.9869 -114.45 - 74 407.153 535 3 0 -46.6306 -72.9867 -115.85 - 74 664.465 667 2 1 -46.6118 -72.9927 -144.45 - 74 134.164 535 2 0 -46.6097 -72.9923 -145.85 - 74 132.895 667 1 1 -46.5531 -72.9808 -174.45 - 74 248.479 535 1 0 -46.5503 -72.9792 -175.85 - 74 122.456 667 0 1 -46.4978 -72.9421 -204.45 - 74 109.813 535 0 0 -46.4934 -72.9404 -205.85 - 74 151.324 787 0 1 -22.4817 -50.4675 -204.45 - 74 124.096 788 0 1 -22.45 -50.3597 -204.614 - 74 56.0845 786 0 1 -22.6501 -49.921 -204.798 - 74 35.1442 657 0 0 -23.2089 -48.5622 -205.85 - 74 96.0492 658 0 0 -23.1973 -48.4495 -205.865 - 74 241.506 659 0 0 -23.1695 -48.2499 -205.87 - 74 102.811 660 0 0 -23.2202 -48.05 -205.918 - 74 107.049 536 2 0 -46.5168 -72.7884 -145.85 - 74 345.186 668 1 1 -46.3414 -72.6743 -174.45 - 74 117.48 536 1 0 -46.3265 -72.6724 -175.85 - 74 168.133 670 0 1 -45.9881 -72.6619 -204.45 - 74 106.43 536 0 0 -45.9763 -72.668 -205.85 - 74 162.271 666 2 1 -46.8285 -73.1978 -144.45 - 74 466.548 534 2 0 -46.8267 -73.2169 -145.85 - 74 138.693 666 1 1 -46.7583 -73.5988 -174.45 - 74 143.523 532 1 0 -46.8074 -73.6116 -175.85 - 74 2.19995 660 0 1 -48.0493 -73.8257 -204.45 - 74 182.575 659 0 1 -48.05 -73.8255 -204.465 - 74 205.782 531 0 0 -48.1243 -73.8127 -205.85 - 74 184.295 506 0 0 -73.0931 -78.7113 -206.25 - 74 6.4962 505 0 0 -73.4123 -78.8502 -206.22 - 74 7.5917 405 0 0 -144.054 -99.1223 -206.25 - 74 45.6097 404 0 0 -144.056 -99.1502 -206.231 - 74 70.4743 403 0 0 -144.063 -99.3502 -206.117 - 74 38.9908 402 0 0 -144.078 -99.5502 -205.968 - 74 294.228 177 0 1 -144.731 -101.035 -204.85 - 74 154.554 176 0 1 -144.75 -101.081 -204.824 - 74 285.478 178 0 1 -144.549 -102.078 -204.657 - 74 40.4562 665 7 1 -46.85 -73.2143 5.21566 - 74 320.476 533 7 0 -48.2238 -73.4165 4.15 - 74 305.907 534 4 0 -46.7114 -73.2144 -85.85 - 74 328.432 666 3 1 -46.6932 -73.2558 -114.45 - 74 156.601 533 3 0 -46.6854 -73.2513 -115.85 - 74 248.829 668 0 1 -46.2963 -72.5076 -204.45 - 74 132.334 537 0 0 -46.2941 -72.4912 -205.85 - 74 157.493 907 13 1 1.4692 160.843 185.15 - 74 26.599 240 0 0 30.3904 -131.95 -206.189 - 74 73.0431 239 0 0 30.4907 -132.15 -206.031 - 74 105.839 238 0 0 30.4475 -132.35 -206.054 - 74 198.056 237 0 0 30.5313 -132.55 -206.037 - 74 93.7695 669 0 1 -46.1459 -72.8059 -204.45 - 74 27.3599 532 0 0 -45.6421 -73.59 -205.85 - 74 86.704 530 0 0 -45.4778 -73.85 -206.175 - 74 201.276 1554 3 1 130.95 -79.3341 -114.786 - 74 29.6916 576 0 0 -35.6073 -64.7012 -206.25 - 74 96.4324 577 0 0 -35.6125 -64.6497 -206.226 - 74 291.614 578 0 0 -35.4846 -64.45 -206.123 - 74 91.9197 579 0 0 -35.2583 -64.2499 -205.929 - 74 24.8609 730 0 1 -34.05 -61.1513 -204.735 - 74 89.642 529 0 0 -46.8436 -74.05 -205.939 - 74 34.0669 528 0 0 -46.8536 -74.25 -206.153 - 74 110.072 534 3 0 -46.7592 -73.169 -115.85 - 74 220.121 665 2 1 -46.981 -73.1165 -144.45 - 74 12.8511 656 1 1 -48.8438 -75.2189 -174.45 - 74 110.069 655 1 1 -48.85 -75.217 -174.495 - 74 165.856 524 1 0 -49.0351 -75.1765 -175.85 - 74 15.8358 635 0 1 -53.0443 -74.6157 -204.45 - 74 118.85 634 0 1 -53.0501 -74.6151 -204.508 - 74 163.758 527 0 0 -53.1751 -74.5975 -205.85 - 74 139.867 1404 6 0 34.2851 100.95 -26.1801 - 74 25.9412 443 2 0 -33.4901 -91.4975 -146.25 - 74 93.3916 442 2 0 -33.5194 -91.55 -146.179 - 74 14.7469 441 2 0 -33.5989 -91.7503 -145.883 - 74 206.692 730 2 1 -33.9196 -92.2853 -144.85 - 74 22.0572 144 3 0 3.29013 -151.273 -116.25 - 74 79.1789 143 3 0 3.33699 -151.35 -116.22 - 74 84.0118 142 3 0 3.48845 -151.55 -116.106 - 74 18.6189 141 3 0 3.60438 -151.75 -115.92 - 74 54.6325 922 3 1 4.50495 -152.633 -114.85 - 74 80.0625 923 3 1 4.65 -152.753 -114.769 - 74 69.3547 924 3 1 4.85 -152.94 -114.606 - 74 84.5261 925 3 1 5.06264 -153.136 -114.45 - 74 63.2998 926 3 1 5.25 -153.07 -114.717 - 74 181.706 136 3 0 6.2629 -152.835 -115.85 - 74 45.7223 535 8 0 -46.6829 -73.05 33.9981 -Number of digits in this event: 48 -Using G4ParticleGun... -Particle energy: 8.11457 LIN -Particle: e- -Event: 75 -Number of tracker hits in this event: 22 - 75 92.5016 1502 9 1 120.662 -19.5918 65.55 - 75 111.889 802 9 0 120.661 -19.5926 64.15 - 75 139.671 1502 8 1 120.643 -19.6071 35.55 - 75 162.318 802 8 0 120.642 -19.6079 34.15 - 75 279.316 1502 7 1 120.645 -19.6178 5.55 - 75 187.116 802 7 0 120.646 -19.6177 4.15 - 75 142.075 1502 6 1 120.651 -19.6135 -24.45 - 75 160.981 802 6 0 120.653 -19.6137 -25.85 - 75 122.757 1502 5 1 120.68 -19.6181 -54.45 - 75 114.348 802 5 0 120.682 -19.6173 -55.85 - 75 128.238 1502 4 1 120.71 -19.6079 -84.45 - 75 104.46 802 4 0 120.712 -19.6067 -85.85 - 75 106.555 1502 3 1 120.739 -19.5832 -114.45 - 75 149.511 802 3 0 120.741 -19.5814 -115.85 - 75 116.555 1503 2 1 120.768 -19.5453 -144.45 - 75 162 802 2 0 120.77 -19.5433 -145.85 - 75 141.504 1503 1 1 120.81 -19.4962 -174.45 - 75 240.919 802 1 0 120.818 -19.4953 -175.85 - 75 137.219 1504 0 1 120.983 -19.4785 -204.45 - 75 197.157 802 0 0 120.992 -19.4773 -205.85 - 75 152.879 1103 7 0 -141.799 40.7669 3.75 - 75 74.9669 1104 7 0 -142.017 40.85 3.79804 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 1.41879 LIN -Particle: e- -Event: 76 -Number of tracker hits in this event: 74 - 76 135.651 453 10 1 -89.4115 65.2135 95.55 - 76 130.455 1225 10 0 -89.4132 65.2066 94.15 - 76 106.563 452 9 1 -89.4946 65.0758 65.55 - 76 108.511 1225 9 0 -89.5006 65.0711 64.15 - 76 211.962 452 8 1 -89.6235 64.9554 35.55 - 76 117.195 1224 8 0 -89.6199 64.9444 34.15 - 76 117.385 452 7 1 -89.5558 64.7083 5.55 - 76 124.007 1223 7 0 -89.5503 64.6994 4.15 - 76 424.923 453 6 1 -89.4488 64.5054 -24.45 - 76 121.67 1222 6 0 -89.4482 64.4968 -25.85 - 76 138.313 452 5 1 -89.4523 64.327 -54.45 - 76 112.503 1221 5 0 -89.4562 64.3181 -55.85 - 76 116.302 452 4 1 -89.5528 64.1436 -84.45 - 76 112.377 1220 4 0 -89.5553 64.1335 -85.85 - 76 116.391 452 3 1 -89.6192 63.958 -114.45 - 76 96.3312 1219 3 0 -89.6245 63.9474 -115.85 - 76 233.159 451 2 1 -89.7662 63.7468 -144.45 - 76 156.65 1218 2 0 -89.767 63.7323 -145.85 - 76 202.853 451 1 1 -89.7963 63.4319 -174.45 - 76 129.12 1216 1 0 -89.7973 63.4046 -175.85 - 76 124.992 451 0 1 -89.7186 62.831 -204.45 - 76 105.068 1213 0 0 -89.7238 62.8075 -205.85 - 76 286.245 450 0 1 -89.8669 63.0985 -204.45 - 76 291.703 1215 0 0 -89.8716 63.0735 -205.85 - 76 104.507 1214 0 0 -89.9392 63.0286 -205.85 - 76 119.652 1219 2 0 -90.15 63.9208 -145.929 - 76 177.997 1223 6 0 -89.2833 64.8494 -25.85 - 76 104.382 1224 6 0 -89.2829 64.85 -25.8699 - 76 103.838 454 5 1 -89.1468 66.2721 -54.45 - 76 176.993 1231 5 0 -89.2052 66.4076 -55.85 - 76 171.512 451 4 1 -89.7887 68.4605 -84.45 - 76 118.747 1242 4 0 -89.9666 68.4737 -85.8504 - 76 77.1913 431 3 1 -93.9273 68.7895 -114.45 - 76 41.5681 430 3 1 -93.95 68.7676 -114.702 - 76 52.1933 1243 3 0 -94.0625 68.6643 -115.85 - 76 94.9429 1242 3 0 -94.0778 68.65 -116.008 - 76 139.789 415 2 1 -97.0789 66.0546 -144.45 - 76 156.291 1229 2 0 -97.1235 65.9484 -145.85 - 76 163.027 408 1 1 -98.5236 63.8329 -174.45 - 76 116.595 1219 1 0 -98.5115 63.9127 -175.85 - 76 139.947 407 0 1 -98.561 65.5738 -204.45 - 76 118.831 1227 0 0 -98.5759 65.5327 -205.85 - 76 145.244 451 5 1 -89.8085 65.0268 -54.45 - 76 106.322 1225 5 0 -89.8503 65.099 -55.85 - 76 190.786 447 4 1 -90.6069 66.4366 -84.45 - 76 106.53 1232 4 0 -90.6282 66.574 -85.85 - 76 151.91 444 3 1 -91.198 69.8744 -114.45 - 76 118.839 1249 3 0 -91.2081 70.0097 -115.851 - 76 15.08 443 2 1 -91.5415 72.0874 -144.45 - 76 103.82 442 2 1 -91.55 72.0885 -144.507 - 76 136.67 1260 2 0 -91.8327 72.0994 -145.85 - 76 182.957 410 1 1 -98.0129 71.9785 -174.45 - 76 126.593 1260 1 0 -98.0682 72.0712 -175.85 - 76 139.207 404 0 1 -99.1558 74.1826 -204.45 - 76 9.7732 405 0 1 -99.15 74.2012 -204.808 - 76 147.109 1271 0 0 -99.1186 74.2502 -205.85 - 76 62.1574 569 3 1 -66.1855 36.5834 -114.85 - 76 4.40639 1251 3 0 -90.8536 70.437 -115.85 - 76 143.824 1252 3 0 -90.8443 70.45 -115.877 - 76 27.8527 1390 3 0 -109.774 98.3312 -116.25 - 76 118.282 1391 3 0 -109.85 98.35 -116.163 - 76 0.622642 341 3 1 -111.949 99.253 -114.85 - 76 63.3149 340 3 1 -111.95 99.2537 -114.849 - 76 65.5155 339 3 1 -112.15 99.3402 -114.722 - 76 51.6065 338 3 1 -112.35 99.388 -114.655 - 76 63.8563 337 3 1 -112.55 99.4317 -114.594 - 76 106.517 336 3 1 -112.75 99.4915 -114.543 - 76 151.289 335 3 1 -112.95 99.5468 -114.473 - 76 1.07942 333 3 1 -113.353 99.8859 -114.45 - 76 130.041 334 3 1 -113.35 99.8891 -114.454 - 76 34.474 1407 3 0 -112.753 101.656 -115.851 - 76 71.2432 1408 3 0 -112.735 101.75 -115.916 - 76 81.4403 1409 3 0 -112.735 101.95 -116.022 - 76 34.3199 1410 3 0 -112.62 102.15 -116.207 -Number of digits in this event: 33 -Using G4ParticleGun... -Particle energy: 4.52283 LIN -Particle: e- -Event: 77 -Number of tracker hits in this event: 60 - 77 120.578 966 11 1 13.3812 -20.0201 125.55 - 77 129.548 800 11 0 13.3785 -20.0172 124.15 - 77 112.299 966 10 1 13.3221 -19.9499 95.55 - 77 185.142 800 10 0 13.3203 -19.9469 94.15 - 77 145.149 966 9 1 13.2852 -19.881 65.55 - 77 179.522 800 9 0 13.2818 -19.8775 64.15 - 77 223.918 965 8 1 13.2116 -19.8002 35.55 - 77 130.757 801 8 0 13.2064 -19.7966 34.15 - 77 131.813 965 7 1 13.1021 -19.7182 5.55 - 77 123.79 801 7 0 13.0978 -19.7165 4.15 - 77 415.119 964 6 1 13.0117 -19.686 -24.45 - 77 109.049 801 6 0 13.0078 -19.6837 -25.85 - 77 118.819 964 5 1 12.9325 -19.6308 -54.45 - 77 100.419 802 5 0 12.9279 -19.6298 -55.85 - 77 154.988 963 4 1 12.8314 -19.6155 -84.45 - 77 105.933 802 4 0 12.8271 -19.6157 -85.85 - 77 119.49 963 3 1 12.7443 -19.6117 -114.45 - 77 102.934 802 3 0 12.7427 -19.6137 -115.85 - 77 144.002 963 2 1 12.7078 -19.6553 -144.45 - 77 132.393 801 2 0 12.7049 -19.658 -145.85 - 77 47.1161 963 1 1 12.6509 -19.7165 -174.45 - 77 56.4232 962 1 1 12.65 -19.7169 -174.631 - 77 110.505 801 1 0 12.6442 -19.7194 -175.85 - 77 183.606 962 0 1 12.5159 -19.7757 -204.45 - 77 247.493 801 0 0 12.5098 -19.7805 -205.85 - 77 207.34 1580 8 0 107.966 136.177 33.75 - 77 14.0912 1579 8 0 107.964 136.15 34.1295 - 77 49.5817 1436 8 1 107.513 135.725 35.15 - 77 132.996 1530 1 1 126.15 -154.798 -174.59 - 77 52.805 1529 1 1 126.15 -154.694 -174.551 - 77 39.4524 640 2 0 -36.444 -52.0002 -146.25 - 77 68.2505 1628 1 0 -144.824 145.928 -176.25 - 77 41.0238 1629 1 0 -144.782 145.95 -175.972 - 77 115.647 177 1 1 -144.631 146.151 -174.85 - 77 108.958 1707 2 0 -177.477 161.612 -146.25 - 77 179.179 1708 2 0 -177.698 161.75 -146.018 - 77 7.26152 5 2 1 -179.135 162.023 -144.85 - 77 76.2169 4 2 1 -179.15 162.025 -144.838 - 77 65.7822 3 2 1 -179.35 162.014 -144.668 - 77 28.6144 2 2 1 -179.55 162.031 -144.504 - 77 4.06946 963 6 1 12.8499 -19.9508 -24.8462 - 77 145.714 795 6 0 8.97992 -20.9464 -25.85 - 77 297.887 796 6 0 8.88944 -20.85 -25.9586 - 77 5.50524 803 2 0 12.6465 -19.2591 -145.85 - 77 170.399 804 2 0 12.6373 -19.25 -146.108 - 77 231.709 963 0 1 12.6983 -19.2811 -204.484 - 77 89.6555 800 0 0 12.1626 -19.9762 -205.85 - 77 61.7792 799 0 0 12.1083 -20.05 -206.007 - 77 80.2563 748 0 0 8.30305 -30.3847 -206.25 - 77 34.9794 747 0 0 8.20847 -30.45 -205.951 - 77 65.4316 936 0 1 7.38357 -30.8087 -204.85 - 77 138.811 935 0 1 7.25 -30.8812 -204.699 - 77 43.32 934 0 1 7.05 -31.0043 -204.527 - 77 10.7088 1704 3 0 -114.584 160.95 -115.873 - 77 259.908 330 3 1 -114.138 161.833 -114.85 - 77 377.006 804 0 0 12.6958 -19.2488 -205.85 - 77 41.3355 702 11 0 85.4185 -39.5634 123.75 - 77 264.103 966 0 1 13.2742 -20.0228 -204.45 - 77 78.106 967 0 1 13.45 -19.8374 -204.691 - 77 30.6218 759 0 1 -28.1421 -22.7768 -204.85 -Number of digits in this event: 28 -Using G4ParticleGun... -Particle energy: 3.12412 LIN -Particle: e- -Event: 78 -Number of tracker hits in this event: 25 - 78 125.278 1154 8 1 51.0294 130.594 35.55 - 78 107.039 1552 8 0 51.035 130.592 34.15 - 78 258.976 1155 7 1 51.1498 130.535 5.55 - 78 123.162 1551 7 0 51.1544 130.531 4.15 - 78 116.146 1155 6 1 51.2412 130.468 -24.45 - 78 127.347 1551 6 0 51.2498 130.464 -25.85 - 78 161.466 1156 5 1 51.4277 130.382 -54.45 - 78 228.903 1551 5 0 51.4376 130.374 -55.85 - 78 128.508 1157 4 1 51.6407 130.212 -84.45 - 78 114.574 1550 4 0 51.6395 130.197 -85.85 - 78 109.715 1157 3 1 51.6421 129.866 -114.45 - 78 138.215 1548 3 0 51.6423 129.843 -115.85 - 78 97.1944 1158 2 1 51.6655 129.413 -144.45 - 78 107.497 1546 2 0 51.6614 129.388 -145.85 - 78 107.701 1157 1 1 51.554 128.849 -174.45 - 78 120.911 1543 1 0 51.5483 128.817 -175.85 - 78 113.81 1156 0 1 51.4026 128.202 -204.45 - 78 113.962 1540 0 0 51.3995 128.176 -205.85 - 78 66.9782 1375 1 0 164.994 95.2827 -176.25 - 78 110.459 1376 1 0 165.095 95.3502 -176.136 - 78 194.335 1377 1 0 164.938 95.55 -175.998 - 78 164.935 1378 1 0 164.698 95.75 -176.095 - 78 306.913 1223 1 1 64.7713 137.887 -174.45 - 78 36.0415 1224 1 1 64.85 137.956 -174.537 - 78 136.18 1156 7 1 51.25 130.59 5.3715 +Number of tracker hits in this event: 26 + 50 135.536 1453 10 1 110.918 32.985 95.4417 + 50 100.967 1064 10 0 110.918 32.985 94.15 + 50 131.717 1453 9 1 110.919 32.985 65.55 + 50 132.476 1064 9 0 110.919 32.986 64.15 + 50 179.863 1453 8 1 110.914 33.0072 35.55 + 50 170.267 1064 8 0 110.914 33.0074 34.15 + 50 145.985 1453 7 1 110.917 33.0094 5.55 + 50 119.443 1064 7 0 110.918 33.0101 4.15 + 50 153.734 1453 6 1 110.931 33.0262 -24.45 + 50 126.697 1064 6 0 110.933 33.0264 -25.85 + 50 109.834 1454 5 1 110.973 33.0344 -54.45 + 50 115.645 1064 5 0 110.974 33.0351 -55.85 + 50 106.889 1454 4 1 110.993 33.0511 -84.45 + 50 134.834 1065 4 0 110.992 33.0515 -85.85 + 50 120.669 1454 3 1 110.981 33.056 -114.45 + 50 109.17 1065 3 0 110.982 33.0548 -115.85 + 50 103.101 1454 2 1 110.991 33.0292 -144.45 + 50 111.298 1064 2 0 110.992 33.0266 -145.85 + 50 114.16 1454 1 1 110.997 32.9768 -174.45 + 50 129.541 1064 1 0 110.997 32.9746 -175.85 + 50 107.258 1454 0 1 111.011 32.9275 -204.45 + 50 133.476 1064 0 0 111.011 32.9255 -205.85 + 50 55.0677 824 0 0 35.9613 -15.1301 -206.25 + 50 41.4273 1528 3 1 125.75 104.244 -114.485 + 50 35.2793 1065 0 0 111.194 33.0813 -206.199 + 50 341.734 1453 3 1 110.916 33.1061 -114.45 Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 3.0867 LIN +Particle energy: 3.14647 LIN Particle: e- -Event: 79 -Number of tracker hits in this event: 195 - 79 125.583 755 11 1 -28.9089 75.041 125.55 - 79 128.617 1274 11 0 -28.9108 75.0403 124.15 - 79 138.689 755 10 1 -28.9497 75.0286 95.55 - 79 117.852 1274 10 0 -28.9499 75.0256 94.15 - 79 106.236 755 9 1 -28.9745 74.9734 65.55 - 79 107.508 1274 9 0 -28.9752 74.9728 64.15 - 79 115.355 755 8 1 -28.9913 74.9632 35.55 - 79 116.153 1274 8 0 -28.9891 74.9659 34.15 - 79 125.398 755 7 1 -28.9318 75.0246 5.55 - 79 111.806 1274 7 0 -28.9282 75.03 4.15 - 79 263.302 756 6 1 -28.8394 75.1418 -24.45 - 79 553.561 1275 6 0 -28.8388 75.1468 -25.85 - 79 122.55 764 5 1 -27.1586 76.0931 -54.45 - 79 104.025 1280 5 0 -27.3336 76.221 -55.85 - 79 35.6048 1281 5 0 -27.3663 76.25 -56.1142 - 79 85.1201 753 4 1 -29.4486 79.1697 -84.4504 - 79 106.204 752 4 1 -29.45 79.1702 -84.4754 - 79 132.585 1295 4 0 -29.5429 79.2038 -85.85 - 79 95.4314 743 3 1 -31.3841 79.3984 -114.45 - 79 29.4547 744 3 1 -31.2499 79.4415 -114.757 - 79 119.977 1298 3 0 -30.7296 79.6735 -115.85 - 79 64.5821 824 2 1 -15.1969 89.0913 -144.45 - 79 92.2451 825 2 1 -15.05 89.1288 -144.652 - 79 206.888 1346 2 0 -13.9833 89.3729 -145.85 - 79 61.1545 948 1 1 9.74261 88.0786 -174.45 - 79 159.878 947 1 1 9.65 88.1657 -174.697 - 79 121.896 1343 1 0 8.85838 88.6647 -175.85 - 79 10.3359 1344 1 0 8.63507 88.85 -176.226 - 79 2.26606 1738 1 0 -9.30197 167.936 -176.25 - 79 120.192 1739 1 0 -9.30196 167.95 -176.244 - 79 74.7749 1740 1 0 -9.307 168.15 -176.129 - 79 54.5011 1741 1 0 -9.30966 168.35 -175.995 - 79 127.287 853 1 1 -9.4317 169.156 -174.85 - 79 59.2394 852 1 1 -9.45 169.343 -174.608 - 79 55.8135 1789 2 0 -19.7368 177.96 -146.25 - 79 109.882 1788 2 0 -19.8047 177.95 -146.068 - 79 129.776 796 2 1 -20.6873 178.09 -144.85 - 79 104.878 733 0 1 -33.3092 -57.7045 -204.45 - 79 6.90043 732 0 1 -33.4501 -57.7281 -204.825 - 79 142.953 611 0 0 -33.5964 -57.6763 -205.85 - 79 33.6513 716 0 0 -29.383 -36.7391 -206.25 - 79 104.75 717 0 0 -29.3652 -36.65 -206.203 - 79 73.7112 718 0 0 -29.452 -36.4499 -206.188 - 79 220.639 719 0 0 -29.5253 -36.25 -206.15 - 79 64.9756 720 0 0 -29.6206 -36.05 -206.024 - 79 84.7491 1407 0 0 -62.9098 101.62 -206.25 - 79 110.241 1406 0 0 -62.9839 101.55 -206.218 - 79 37.21 759 5 1 -28.053 74.9858 -54.4502 - 79 236.444 760 5 1 -28.05 74.9856 -54.4686 - 79 101.339 1274 5 0 -27.8009 74.9616 -55.85 - 79 127.483 782 4 1 -23.5754 73.8332 -84.45 - 79 123.626 1268 4 0 -23.2349 73.7597 -85.85 - 79 129.599 821 3 1 -15.8095 72.6619 -114.45 - 79 292.104 1265 3 0 -15.5406 73.0912 -115.85 - 79 163.74 846 2 1 -10.8147 82.1833 -144.45 - 79 6.6083 1314 2 0 -10.8271 83.0419 -145.851 - 79 123.799 1315 2 0 -10.8271 83.05 -145.864 - 79 13.5373 1316 2 0 -10.8254 83.25 -146.207 - 79 107.396 850 1 1 -10.0414 98.8812 -174.45 - 79 106.281 849 1 1 -10.05 99.0582 -174.762 - 79 34.0045 1396 1 0 -10.2601 99.5262 -175.85 - 79 107.401 1397 1 0 -10.2704 99.5505 -175.906 - 79 18.4198 822 0 1 -15.6031 112.359 -204.45 - 79 119.083 821 0 1 -15.65 112.399 -204.478 - 79 107.557 820 0 1 -15.85 112.561 -204.615 - 79 71.3412 819 0 1 -16.05 112.734 -204.751 - 79 15.3067 1469 0 0 -17.7407 114.109 -205.85 - 79 123.633 1470 0 0 -17.7947 114.15 -205.885 - 79 91.6686 1471 0 0 -18.0231 114.35 -206.035 - 79 93.5681 1472 0 0 -18.217 114.55 -206.136 - 79 118.829 1408 1 0 -12.5148 101.801 -175.85 - 79 20.3394 1409 1 0 -12.7419 101.95 -175.912 - 79 216.343 837 1 1 -12.5297 101.34 -174.85 - 79 98.6327 836 1 1 -12.65 101.413 -174.718 - 79 225.3 1398 1 0 -10.0404 99.75 -176.004 - 79 357.906 755 6 1 -28.85 75.0964 -24.5502 - 79 197.119 1274 6 0 -29.1346 75.05 -25.9535 - 79 41.5439 731 5 1 -33.7756 74.2718 -54.45 - 79 203.674 730 5 1 -33.8504 74.2704 -54.5176 - 79 65.577 729 5 1 -34.05 74.2662 -54.7093 - 79 162.31 1270 5 0 -35.2589 74.2299 -55.8503 - 79 34.0291 585 4 1 -62.9694 67.8945 -84.4503 - 79 164.765 584 4 1 -63.05 67.9106 -84.5464 - 79 18.4286 583 4 1 -63.2501 67.9454 -84.7987 - 79 133.207 1240 4 0 -64.0858 68.0572 -85.8503 - 79 44.2248 458 3 1 -88.3963 70.9678 -114.451 - 79 173.438 457 3 1 -88.45 71.1015 -114.529 - 79 28.9951 1266 3 0 -89.2193 73.3689 -115.85 - 79 60.7056 1267 3 0 -89.2478 73.45 -115.896 - 79 64.3264 1268 3 0 -89.3223 73.65 -115.996 - 79 72.8027 1269 3 0 -89.4034 73.85 -116.074 - 79 73.4531 1270 3 0 -89.4735 74.05 -116.157 - 79 3.90358 1271 3 0 -89.5419 74.25 -116.246 - 79 224.999 353 2 1 -109.54 138.48 -144.45 - 79 102.409 352 2 1 -109.55 139.116 -144.792 - 79 48.0926 1620 2 0 -110.16 144.187 -145.85 - 79 56.3682 1621 2 0 -110.179 144.35 -145.884 - 79 67.0231 1622 2 0 -110.204 144.55 -145.934 - 79 55.8528 1623 2 0 -110.232 144.75 -145.981 - 79 61.0612 1624 2 0 -110.268 144.95 -146.027 - 79 61.1903 1625 2 0 -110.312 145.15 -146.07 - 79 61.2663 1626 2 0 -110.343 145.35 -146.106 - 79 60.1176 1627 2 0 -110.349 145.55 -146.131 - 79 60.4034 1628 2 0 -110.353 145.75 -146.154 - 79 53.3415 1629 2 0 -110.362 145.95 -146.181 - 79 30.4531 1630 2 0 -110.374 146.151 -146.219 - 79 129.627 1276 5 0 -27.7761 75.3135 -55.8501 - 79 35.8039 772 4 1 -25.5013 74.9548 -84.45 - 79 80.6787 773 4 1 -25.45 74.9458 -84.5701 - 79 100.216 1274 4 0 -24.9032 74.8738 -85.85 - 79 17.0253 1273 4 0 -24.7646 74.85 -86.192 - 79 35.2602 831 3 1 -13.7151 72.9225 -114.45 - 79 98.8168 832 3 1 -13.65 72.9361 -114.54 - 79 18.6079 833 3 1 -13.45 72.9732 -114.789 - 79 59.6131 982 2 1 16.5771 75.816 -144.45 - 79 96.8939 983 2 1 16.65 75.9073 -144.483 - 79 126.348 984 2 1 16.85 76.1745 -144.583 - 79 104.968 985 2 1 17.05 76.4409 -144.678 - 79 84.5339 986 2 1 17.25 76.6862 -144.772 - 79 10.378 1300 2 0 19.6636 80.2288 -145.85 - 79 63.141 1301 2 0 19.6779 80.25 -145.856 - 79 82.447 1302 2 0 19.8134 80.45 -145.918 - 79 78.0552 1303 2 0 19.956 80.65 -145.973 - 79 172.293 1304 2 0 20.078 80.85 -146.053 - 79 66.7944 1305 2 0 20.2043 81.05 -146.129 - 79 35.7327 1306 2 0 20.3506 81.25 -146.206 - 79 35.5636 1242 1 1 68.5353 138.759 -174.45 - 79 68.0347 1243 1 1 68.65 138.807 -174.5 - 79 57.6821 1244 1 1 68.85 138.881 -174.576 - 79 54.4093 1245 1 1 69.05 138.945 -174.637 - 79 53.702 1246 1 1 69.2513 138.998 -174.691 - 79 77.4379 1247 1 1 69.45 139.063 -174.742 - 79 47.914 1248 1 1 69.65 139.118 -174.783 - 79 36.011 1249 1 1 69.85 139.179 -174.821 - 79 109.614 1603 1 0 72.7835 140.764 -175.85 - 79 247.441 1604 1 0 73.1119 140.95 -175.992 - 79 21.5896 1605 1 0 73.5042 141.15 -176.215 - 79 5.5586 1556 0 1 131.366 172.017 -204.45 - 79 107.289 1555 0 1 131.35 172 -204.485 - 79 89.689 1755 0 0 131.314 171.302 -205.85 - 79 54.0297 1754 0 0 131.364 171.15 -206.119 - 79 81.4742 1620 0 0 136.353 144.304 -206.25 - 79 202.979 1619 0 0 136.323 144.15 -206.017 - 79 302.427 1570 0 1 134.332 143.688 -204.85 - 79 32.3903 1569 0 1 134.15 143.562 -204.803 - 79 44.1055 1560 0 1 132.15 172.757 -204.643 - 79 127.57 753 5 1 -29.3622 76.0651 -54.4504 - 79 7.9549 1279 5 0 -29.4694 75.8549 -55.85 - 79 112.486 1278 5 0 -29.4718 75.85 -55.883 - 79 117.432 742 4 1 -31.5588 72.1982 -84.45 - 79 90.5712 1259 4 0 -31.6449 71.9389 -85.85 - 79 234.83 732 3 1 -33.4745 66.2376 -114.45 - 79 73.1524 1228 3 0 -33.8075 65.7481 -115.85 - 79 36.0419 1227 3 0 -33.8737 65.65 -116.127 - 79 123.485 696 2 1 -40.6863 55.4865 -144.451 - 79 106.643 1174 2 0 -41.0753 54.9715 -145.85 - 79 15.8995 1173 2 0 -41.1672 54.85 -146.186 - 79 156.939 655 1 1 -48.9671 44.6491 -174.45 - 79 14.6805 654 1 1 -49.05 44.5514 -174.84 - 79 58.8442 1121 1 0 -49.2752 44.2775 -175.85 - 79 74.659 1120 1 0 -49.298 44.25 -175.956 - 79 167.669 625 0 1 -54.9909 37.2226 -204.45 - 79 3.19614 624 0 1 -55.05 37.0877 -204.83 - 79 63.6069 1083 0 0 -55.1974 36.7227 -205.85 - 79 63.53 1082 0 0 -55.2244 36.65 -206.051 - 79 59.2677 754 3 1 -29.0651 74.7489 -114.738 - 79 20.245 1275 3 0 -29.4036 75.206 -115.85 - 79 192.37 1276 3 0 -29.4205 75.25 -115.925 - 79 138.569 1291 3 0 -22.7325 78.3427 -116.25 - 79 222.61 1273 3 0 -29.0238 74.7336 -115.85 - 79 96.4057 761 2 1 -27.7122 73.6562 -144.451 - 79 38.6049 762 2 1 -27.65 73.713 -144.709 - 79 98.4804 1269 2 0 -27.3931 73.9512 -145.85 - 79 210.464 793 1 1 -21.4148 80.7865 -174.45 - 79 110.279 1306 1 0 -21.1467 81.2538 -175.85 - 79 74.6947 794 1 1 -21.25 80.7071 -174.636 - 79 129.835 1303 1 0 -20.6824 80.7854 -175.85 - 79 15.282 1312 1 0 0.356409 82.6335 -176.25 - 79 133.14 1313 1 0 0.364605 82.65 -176.192 - 79 153.958 901 1 1 0.406217 82.7696 -174.85 - 79 53.2711 1209 2 0 -5.2052 61.9514 -146.25 - 79 96.7133 1208 2 0 -5.24458 61.8498 -146.148 - 79 42.6626 1207 2 0 -5.2622 61.65 -145.957 - 79 51.058 874 2 1 -5.08694 59.8098 -144.85 - 79 195.195 875 2 1 -5.04988 59.6327 -144.713 - 79 93.0632 876 2 1 -4.85 59.1681 -144.543 - 79 96.7098 877 2 1 -4.64997 58.9647 -144.722 - 79 8.11442 1188 2 0 -4.50921 57.673 -145.85 - 79 97.2076 1187 2 0 -4.50964 57.65 -145.871 - 79 32.1563 1186 2 0 -4.44274 57.45 -146.129 - 79 21.0813 1281 2 0 -34.9865 76.4024 -146.25 - 79 111.515 1282 2 0 -35.0268 76.45 -146.211 - 79 150.041 1283 2 0 -35.3128 76.6502 -146.185 - 79 121.247 1284 2 0 -35.5253 76.85 -146.155 - 79 160.869 1210 2 0 -95.7341 62.1797 -146.25 -Number of digits in this event: 58 +Event: 51 +Number of tracker hits in this event: 114 + 51 100.286 353 10 1 -109.477 18.6689 95.55 + 51 144.902 993 10 0 -109.479 18.6689 94.15 + 51 102.943 353 9 1 -109.53 18.6678 65.55 + 51 106.049 993 9 0 -109.531 18.6668 64.15 + 51 126.712 352 8 1 -109.556 18.6439 35.55 + 51 150.016 992 8 0 -109.558 18.6411 34.15 + 51 119.196 352 7 1 -109.6 18.584 5.55 + 51 103.428 992 7 0 -109.603 18.58 4.15 + 51 394.301 352 6 1 -109.665 18.5071 -24.45 + 51 408.434 992 6 0 -109.667 18.5031 -25.85 + 51 209.983 351 5 1 -109.772 18.4145 -54.45 + 51 147.647 991 5 0 -109.771 18.3995 -55.85 + 51 110.894 352 4 1 -109.737 18.0233 -84.45 + 51 416.855 989 4 0 -109.748 18.0052 -85.85 + 51 111.058 350 3 1 -109.977 17.6262 -114.45 + 51 143.572 987 3 0 -109.98 17.608 -115.85 + 51 131.033 350 2 1 -110.037 17.2152 -144.45 + 51 237.499 985 2 0 -110.027 17.1988 -145.85 + 51 121.538 351 1 1 -109.807 16.8557 -174.45 + 51 119.291 984 1 0 -109.803 16.8518 -175.85 + 51 120.1 352 0 1 -109.665 16.7513 -204.45 + 51 111.144 983 0 0 -109.662 16.74 -205.85 + 51 193.071 1456 8 0 88.6485 111.35 33.7613 + 51 118.057 923 0 0 -75.1046 4.71048 -206.25 + 51 287.174 505 11 1 -79.05 -126.842 125.24 + 51 99.1749 504 11 1 -79.05 -126.86 125.455 + 51 112.206 349 5 1 -110.263 17.7578 -54.45 + 51 218.812 988 5 0 -110.226 17.6953 -55.85 + 51 112.81 353 4 1 -109.367 16.3973 -84.45 + 51 243.412 981 4 0 -109.324 16.3767 -85.85 + 51 128.156 361 3 1 -107.879 15.5355 -114.45 + 51 194.401 975 3 0 -107.81 15.2275 -115.85 + 51 124.263 369 2 1 -106.271 8.65898 -144.451 + 51 57.1252 942 2 0 -106.219 8.47096 -145.85 + 51 63.0724 941 2 0 -106.213 8.45 -146.007 + 51 126.318 376 1 1 -104.857 4.17194 -174.45 + 51 14.4473 920 1 0 -104.728 4.05589 -175.85 + 51 105.464 919 1 0 -104.722 4.04996 -175.919 + 51 139.044 390 0 1 -102.135 1.70923 -204.45 + 51 107.002 907 0 0 -101.959 1.51376 -205.85 + 51 151.641 359 5 1 -108.284 18.5557 -54.45 + 51 5.38761 992 5 0 -108.21 18.6486 -55.85 + 51 176.869 993 5 0 -108.209 18.65 -55.8711 + 51 94.6525 366 4 1 -106.766 20.1129 -84.45 + 51 149.605 1000 4 0 -106.745 20.073 -85.85 + 51 129.066 371 3 1 -105.805 19.3276 -114.45 + 51 36.9757 372 3 1 -105.75 19.3434 -114.761 + 51 160.101 996 3 0 -105.562 19.3685 -115.85 + 51 128.023 398 2 1 -100.536 19.7117 -144.45 + 51 147.316 998 2 0 -100.249 19.8138 -145.85 + 51 69.3306 426 1 1 -94.937 22.2209 -174.45 + 51 46.3544 425 1 1 -94.95 22.2513 -174.616 + 51 218.25 1012 1 0 -95.0584 22.467 -175.85 + 51 233.621 413 0 1 -97.4977 27.2897 -204.45 + 51 125.079 1037 0 0 -97.4739 27.5198 -205.85 + 51 206.219 412 0 1 -97.5501 27.4384 -204.573 + 51 134.594 994 5 0 -108.036 18.85 -55.9927 + 51 187.241 995 5 0 -107.647 19.05 -55.9374 + 51 63.8775 996 5 0 -107.357 19.2501 -56.2418 + 51 71.6179 997 5 0 -107.333 19.4502 -56.2379 + 51 89.9332 1425 5 0 -108.946 105.158 -56.2499 + 51 56.3259 1424 5 0 -108.894 105.15 -56.1505 + 51 4.65819 951 5 0 -63.5819 10.3406 -56.25 + 51 96.1434 252 5 0 28.7608 -129.625 -56.2498 + 51 199.987 908 6 0 -125.108 1.77599 -26.2498 + 51 27.9246 907 6 0 -125.067 1.64996 -26.1188 + 51 111.678 976 2 0 -105.645 15.3696 -145.85 + 51 172.752 977 2 0 -105.553 15.4501 -146.087 + 51 304.873 361 4 1 -107.903 16.3688 -84.45 + 51 32.4627 985 4 0 -107.457 17.1846 -85.85 + 51 145.753 986 4 0 -107.421 17.25 -85.9598 + 51 28.8425 409 3 1 -98.2502 39.1617 -114.45 + 51 80.5446 410 3 1 -98.15 39.1332 -114.545 + 51 60.8006 411 3 1 -97.9497 39.1059 -114.741 + 51 119.227 1094 3 0 -96.9643 38.9635 -115.85 + 51 23.1716 1093 3 0 -96.6551 38.85 -116.197 + 51 30.1585 597 2 1 -60.624 16.5829 -144.45 + 51 117.329 596 2 1 -60.65 16.5346 -144.509 + 51 74.8315 975 2 0 -61.6509 15.25 -145.905 + 51 80.24 974 2 0 -61.8131 15.05 -146.008 + 51 133.199 973 2 0 -62.0144 14.8499 -146.134 + 51 21.212 722 2 0 -86.4576 -35.6276 -146.25 + 51 78.2898 721 2 0 -86.4615 -35.65 -146.168 + 51 24.1441 470 2 1 -85.8898 -35.8563 -144.85 + 51 100.077 471 2 1 -85.85 -35.8717 -144.775 + 51 99.4231 472 2 1 -85.65 -35.9082 -144.493 + 51 18.5596 474 2 1 -85.2245 -35.9016 -144.45 + 51 90.4064 473 2 1 -85.2501 -35.8753 -144.478 + 51 75.9145 730 2 0 -86.3479 -34.0094 -145.85 + 51 85.2454 731 2 0 -86.4594 -33.85 -145.965 + 51 186.193 732 2 0 -86.678 -33.65 -146.027 + 51 16.7131 328 2 0 -128.606 -114.497 -146.25 + 51 83.5536 327 2 0 -128.621 -114.55 -146.228 + 51 316.445 326 2 0 -128.635 -114.75 -146.117 + 51 371.103 360 4 1 -107.95 16.364 -84.7697 + 51 97.6022 344 3 1 -111.296 15.773 -114.45 + 51 29.7737 343 3 1 -111.35 15.7831 -114.737 + 51 139.188 978 3 0 -111.577 15.7924 -115.85 + 51 91.2785 322 2 1 -115.614 13.7151 -144.45 + 51 34.913 321 2 1 -115.75 13.7329 -144.74 + 51 119.875 968 2 0 -116.315 13.7535 -145.85 + 51 58.1941 239 1 1 -132.274 15.1118 -174.451 + 51 57.257 238 1 1 -132.35 15.1401 -174.631 + 51 131.863 976 1 0 -132.859 15.295 -175.85 + 51 747.059 186 0 1 -142.931 17.3502 -204.45 + 51 22.1351 185 0 1 -142.95 19.5932 -204.829 + 51 15.0832 1011 0 0 -143.251 22.3806 -205.85 + 51 124.122 1012 0 0 -143.255 22.4502 -205.88 + 51 53.0947 1013 0 0 -143.265 22.6503 -205.961 + 51 49.5121 1014 0 0 -143.268 22.85 -205.999 + 51 61.8769 1015 0 0 -143.274 23.05 -206.045 + 51 61.758 1016 0 0 -143.285 23.2501 -206.143 + 51 13.5457 1017 0 0 -143.323 23.4501 -206.224 + 51 66.3986 983 4 0 -108.585 16.6929 -85.85 +Number of digits in this event: 50 Using G4ParticleGun... -Particle energy: 2.88454 LIN +Particle energy: 7.69205 LIN Particle: e- -Event: 80 -Number of tracker hits in this event: 156 - 80 159.374 692 11 1 -41.5669 -60.0124 125.55 - 80 124.225 600 11 0 -41.5695 -60.0147 124.15 - 80 107.183 692 10 1 -41.6127 -60.0539 95.55 - 80 116.805 599 10 0 -41.6149 -60.0561 94.15 - 80 127.642 691 9 1 -41.6573 -60.0917 65.55 - 80 100.967 599 9 0 -41.6601 -60.0946 64.15 - 80 373.085 691 8 1 -41.7142 -60.1496 35.55 - 80 393.566 599 8 0 -41.7155 -60.1534 34.15 - 80 325.103 691 7 1 -41.755 -60.2261 5.55 - 80 98.9316 599 7 0 -41.7555 -60.2304 4.15 - 80 173.273 691 6 1 -41.7588 -60.3242 -24.45 - 80 128.34 598 6 0 -41.7629 -60.3274 -25.85 - 80 117.891 691 5 1 -41.8436 -60.4013 -54.45 - 80 137.46 598 5 0 -41.8551 -60.4073 -55.85 - 80 103.394 689 4 1 -42.0931 -60.5354 -84.45 - 80 136.047 597 4 0 -42.0976 -60.5432 -85.85 - 80 121.762 689 3 1 -42.1785 -60.6803 -114.45 - 80 429.252 596 3 0 -42.1924 -60.6923 -115.85 - 80 136.896 687 2 1 -42.477 -60.9058 -144.45 - 80 121.215 595 2 0 -42.4929 -60.9144 -145.85 - 80 138.263 685 1 1 -42.8615 -61.0826 -174.45 - 80 113.765 594 1 0 -42.8761 -61.0683 -175.85 - 80 299.898 684 0 1 -43.1302 -60.793 -204.45 - 80 137.821 596 0 0 -43.1173 -60.7824 -205.85 - 80 49.8552 559 3 1 -68.1892 106.16 -114.85 - 80 40.0958 1361 9 1 92.35 -109.01 65.3222 - 80 21.9444 595 1 0 -42.8837 -60.9647 -176.214 - 80 7.69703 590 0 0 -43.0164 -62.0329 -205.85 - 80 147.046 589 0 0 -43.0125 -62.0501 -205.884 - 80 289.815 683 0 1 -43.25 -61.5699 -204.711 - 80 112.484 682 0 1 -43.45 -61.5236 -204.553 - 80 25.8513 695 0 1 -40.9357 -61.4125 -204.45 - 80 68.0949 694 0 1 -41.05 -61.3562 -204.5 - 80 81.9993 693 0 1 -41.25 -61.2702 -204.589 - 80 71.7917 692 0 1 -41.4503 -61.1855 -204.679 - 80 57.9317 691 0 1 -41.65 -61.1089 -204.777 - 80 33.7754 599 0 0 -43.2381 -60.0887 -205.85 - 80 144.886 600 0 0 -43.2984 -60.05 -205.894 - 80 21.4516 601 0 0 -43.6739 -59.85 -206.19 - 80 96.2379 740 0 0 -78.5203 -31.993 -206.25 - 80 76.9841 741 0 0 -78.6658 -31.85 -206.105 - 80 13.7316 742 0 0 -78.7642 -31.6499 -205.892 - 80 67.3347 505 0 1 -78.9899 -30.7361 -204.85 - 80 76.5017 504 0 1 -79.0501 -30.5774 -204.66 - 80 132.976 506 0 1 -78.8035 -30.5451 -204.45 - 80 144.219 507 0 1 -78.65 -30.1856 -204.576 - 80 99.4148 508 0 1 -78.45 -29.6536 -204.534 - 80 95.393 509 0 1 -78.2493 -29.4785 -204.634 - 80 53.8849 510 0 1 -78.05 -29.3675 -204.744 - 80 2.53191 511 0 1 -77.85 -29.2898 -204.845 - 80 130.548 758 0 0 -76.2708 -28.2894 -205.85 - 80 232.5 759 0 0 -76.167 -28.25 -205.92 - 80 278.118 760 0 0 -75.8996 -28.0499 -206.05 - 80 579.872 690 4 1 -41.9698 -60.4299 -84.45 - 80 60.1541 691 4 1 -41.85 -60.5146 -84.7264 - 80 149.489 596 4 0 -41.2547 -60.811 -85.8502 - 80 95.4218 595 4 0 -41.165 -60.85 -86.0073 - 80 89.9204 793 3 1 -21.3217 -66.9109 -114.45 - 80 166.031 794 3 1 -21.2499 -67.0901 -114.612 - 80 13.9758 557 3 0 -20.4442 -68.6179 -115.85 - 80 69.4571 556 3 0 -20.426 -68.65 -115.877 - 80 59.218 555 3 0 -20.345 -68.85 -116.039 - 80 34.239 554 3 0 -20.255 -69.05 -116.178 - 80 108.663 351 3 0 20.318 -109.84 -116.25 - 80 190.347 998 3 1 19.7951 -109.732 -114.85 - 80 94.7881 997 3 1 19.65 -109.738 -114.662 - 80 170.66 996 3 1 19.45 -109.646 -114.568 - 80 131.059 995 3 1 19.2498 -109.631 -114.464 - 80 158.235 354 3 0 19.3572 -109.268 -115.85 - 80 37.2243 1000 3 1 20.05 -109.147 -114.498 - 80 122.03 599 4 0 -42.1716 -60.2019 -85.8503 - 80 87.2762 683 3 1 -43.3254 -55.3343 -114.45 - 80 24.3762 682 3 1 -43.45 -55.2829 -114.761 - 80 54.5465 624 3 0 -43.8722 -55.0816 -115.85 - 80 78.0017 625 3 0 -43.9426 -55.05 -116.017 - 80 12.0054 618 2 1 -56.4265 -48.5069 -144.45 - 80 133.583 617 2 1 -56.4501 -48.5014 -144.484 - 80 29.1882 616 2 1 -56.65 -48.4448 -144.784 - 80 158.456 659 2 0 -57.4014 -48.2396 -145.85 - 80 84.7552 497 1 1 -80.5431 -38.6709 -174.45 - 80 133.906 496 1 1 -80.65 -38.6325 -174.559 - 80 63.4774 495 1 1 -80.8502 -38.5544 -174.747 - 80 69.4997 709 1 0 -82.0474 -38.1165 -175.85 - 80 114.367 710 1 0 -82.2219 -38.05 -176.012 - 80 94.6152 353 0 1 -109.463 -24.706 -204.45 - 80 206.194 352 0 1 -109.55 -24.3784 -204.594 - 80 25.3696 794 0 0 -109.612 -21.148 -205.85 - 80 43.722 795 0 0 -109.612 -21.05 -205.888 - 80 52.1987 796 0 0 -109.605 -20.85 -205.959 - 80 55.3329 797 0 0 -109.591 -20.6495 -206.018 - 80 70.8152 798 0 0 -109.575 -20.45 -206.071 - 80 43.6421 799 0 0 -109.562 -20.25 -206.121 - 80 75.5199 800 0 0 -109.552 -20.0497 -206.157 - 80 60.9127 801 0 0 -109.55 -19.85 -206.191 - 80 56.3505 802 0 0 -109.548 -19.65 -206.216 - 80 35.5736 803 0 0 -109.54 -19.45 -206.243 - 80 13.9971 771 1 0 -77.8055 -25.8198 -175.85 - 80 11.7 517 1 1 -76.4802 -22.1687 -174.85 - 80 54.5137 811 1 0 -74.731 -17.7509 -175.85 - 80 33.2025 812 1 0 -74.6404 -17.65 -175.868 - 80 48.4213 526 1 1 -74.6548 -11.9956 -174.85 - 80 313.427 527 1 1 -74.65 -11.8893 -174.806 - 80 52.2428 528 1 1 -74.45 -11.8133 -174.5 - 80 62.4584 657 2 0 -57.4857 -48.5321 -145.85 - 80 7.84074 606 2 1 -58.6555 -48.455 -144.85 - 80 85.9629 689 0 1 -42.1957 -60.2719 -204.45 - 80 99.938 597 0 0 -42.1962 -60.4619 -205.85 - 80 235.212 597 7 0 -41.8108 -60.5131 4.15 - 80 218.939 692 6 1 -41.6179 -61.0443 -24.45 - 80 177.523 595 6 0 -41.6384 -61.0341 -25.85 - 80 104.196 689 5 1 -42.1531 -60.7793 -54.45 - 80 107.273 596 5 0 -42.1493 -60.7622 -55.85 - 80 211.951 598 4 0 -42.014 -60.3952 -85.85 - 80 101.517 692 3 1 -41.6247 -60.1893 -114.45 - 80 120.914 600 3 0 -41.7052 -60.05 -115.85 - 80 116.578 682 2 1 -43.5442 -57.1111 -144.45 - 80 118.617 615 2 0 -43.6303 -56.9842 -145.85 - 80 157.534 673 1 1 -45.3743 -54.4038 -174.45 - 80 158.055 628 1 0 -45.4035 -54.3075 -175.85 - 80 156.519 669 0 1 -46.0739 -52.4109 -204.45 - 80 119.726 638 0 0 -46.0394 -52.3114 -205.85 - 80 94.517 694 7 1 -41.1873 -60.5013 5.55 - 80 113.2 696 6 1 -40.6922 -61.4234 -24.45 - 80 118.09 593 6 0 -40.6772 -61.3961 -25.85 - 80 123.255 697 5 1 -40.4537 -60.9304 -54.45 - 80 193.433 594 5 0 -40.5173 -61.1251 -55.85 - 80 151.17 573 4 0 -42.1182 -65.3089 -85.8501 - 80 71.9187 677 3 1 -44.6215 -66.7047 -114.45 - 80 30.2634 676 3 1 -44.6501 -66.7279 -114.747 - 80 100.995 566 3 0 -44.7878 -66.808 -115.85 - 80 37.3622 660 2 1 -48.031 -69.2975 -144.45 - 80 97.2661 659 2 1 -48.0501 -69.3269 -144.577 - 80 26.0118 552 2 0 -48.239 -69.6301 -145.85 - 80 85.7642 551 2 0 -48.2514 -69.65 -145.936 - 80 378.795 635 1 1 -52.8657 -76.1639 -174.45 - 80 149.916 519 1 0 -53.3257 -76.2387 -175.851 - 80 62.3766 518 1 0 -53.3976 -76.25 -176.074 - 80 87.9251 584 0 1 -63.135 -77.9012 -204.45 - 80 28.8025 583 0 1 -63.2501 -77.9604 -204.749 - 80 128.105 509 0 0 -63.6868 -78.1799 -205.85 - 80 21.3992 508 0 0 -63.832 -78.25 -206.196 - 80 120.698 634 1 1 -53.05 -76.1394 -174.701 - 80 66.8549 698 5 1 -40.4497 -60.9888 -54.7117 - 80 34.2976 586 5 0 -39.9915 -62.7702 -55.85 - 80 60.2441 585 5 0 -39.9778 -62.85 -55.89 - 80 54.4891 584 5 0 -40.0405 -63.0502 -55.9401 - 80 85.3252 583 5 0 -39.9831 -63.25 -55.9442 - 80 75.6358 582 5 0 -39.7851 -63.45 -55.9498 - 80 77.7793 581 5 0 -39.6467 -63.65 -56.0292 - 80 88.995 580 5 0 -39.4474 -63.85 -56.0092 - 80 66.3834 579 5 0 -39.2555 -64.05 -55.9811 - 80 68.345 578 5 0 -39.176 -64.25 -56.0132 - 80 64.0905 577 5 0 -39.1052 -64.4503 -56.0288 - 80 58.9582 576 5 0 -39.0167 -64.65 -56.1216 - 80 155.638 395 5 0 0.531921 -101.006 -56.25 - 80 406.314 394 5 0 0.518705 -101.15 -56.0968 -Number of digits in this event: 57 -Using G4ParticleGun... -Particle energy: 9.30328 LIN -Particle: e- -Event: 81 -Number of tracker hits in this event: 62 - 81 102.843 377 10 1 -104.66 33.1944 95.55 - 81 109.268 1065 10 0 -104.661 33.1937 94.15 - 81 126.694 377 9 1 -104.673 33.181 65.55 - 81 114.928 1065 9 0 -104.674 33.1799 64.15 - 81 110.4 377 8 1 -104.681 33.158 35.55 - 81 113.797 1065 8 0 -104.681 33.1571 34.15 - 81 109.338 377 7 1 -104.691 33.1392 5.55 - 81 126.487 1065 7 0 -104.691 33.1392 4.15 - 81 123.446 377 6 1 -104.697 33.1437 -24.45 - 81 131.475 1065 6 0 -104.697 33.1438 -25.85 - 81 123.536 377 5 1 -104.708 33.144 -54.45 - 81 129.512 1065 5 0 -104.709 33.1418 -55.85 - 81 356.21 377 4 1 -104.734 33.0966 -84.45 - 81 340.237 1065 4 0 -104.736 33.0937 -85.85 - 81 274.115 376 3 1 -104.768 33.0366 -114.45 - 81 133.407 1064 3 0 -104.77 33.0347 -115.85 - 81 472.324 376 2 1 -104.82 32.9949 -144.45 - 81 331.829 1064 2 0 -104.823 32.9937 -145.85 - 81 249.164 376 1 1 -104.888 32.9784 -174.45 - 81 105.722 1064 1 0 -104.892 32.9775 -175.85 - 81 302.099 375 0 1 -104.975 32.9673 -204.45 - 81 444.975 1064 0 0 -104.978 32.9656 -205.85 - 81 125.611 616 1 1 -56.7374 -39.3525 -174.45 - 81 93.4594 534 0 1 -73.25 -5.0339 -204.68 - 81 247.159 376 0 1 -104.948 32.94 -204.45 - 81 50.7293 78 7 0 -10.2413 -164.41 3.75101 - 81 102.905 77 7 0 -10.177 -164.55 3.88385 - 81 114.304 76 7 0 -10.1158 -164.75 4.0267 - 81 204.577 849 7 1 -10.0764 -166.363 5.15003 - 81 245.635 68 8 0 -9.27265 -166.5 33.75 - 81 167.843 851 8 1 -9.65251 -165.922 35.1501 - 81 103.744 852 8 1 -9.49857 -165.757 35.55 - 81 12.4315 1487 2 0 -50.6015 117.55 -146.211 - 81 182.27 1488 2 0 -50.5003 117.75 -146.052 - 81 159.631 1067 3 0 -104.929 33.6221 -115.85 - 81 118.116 373 2 1 -105.386 33.7013 -144.45 - 81 182.467 1068 2 0 -105.402 33.7023 -145.85 - 81 135.905 371 1 1 -105.761 33.5618 -174.45 - 81 255.156 1067 1 0 -105.791 33.5507 -175.85 - 81 121.151 368 0 1 -106.453 33.3512 -204.45 - 81 129.426 1066 0 0 -106.464 33.3128 -205.85 - 81 113.817 1068 3 0 -104.871 33.65 -116.049 - 81 107.313 381 3 1 -103.761 33.0905 -114.45 - 81 128.118 1065 3 0 -103.728 33.0808 -115.85 - 81 116.016 385 2 1 -103.084 32.8439 -144.45 - 81 93.3988 1063 2 0 -103.061 32.838 -145.85 - 81 129.201 387 1 1 -102.624 32.6327 -174.45 - 81 131.929 1062 1 0 -102.599 32.6057 -175.85 - 81 115.354 390 0 1 -102.08 32.0551 -204.45 - 81 127.013 1059 0 0 -102.049 32.0172 -205.85 - 81 133.442 1065 2 0 -104.781 33.1088 -145.85 - 81 132.239 1071 0 0 -105.1 34.3616 -205.85 - 81 2.33699 1535 0 0 -144.527 127.214 -206.25 - 81 96.1242 1546 0 0 -131.015 129.445 -206.25 - 81 123.059 373 1 1 -105.358 30.6966 -174.45 - 81 80.315 1052 1 0 -105.98 30.4836 -175.85 - 81 71.8353 1051 1 0 -106.081 30.45 -176.067 - 81 69.6448 297 0 1 -120.674 26.2483 -204.45 - 81 108.489 296 0 1 -120.75 26.0916 -204.62 - 81 32.4078 1024 0 0 -121.35 24.9283 -205.85 - 81 70.3682 1023 0 0 -121.39 24.85 -205.933 - 81 44.5837 1022 0 0 -121.489 24.65 -206.149 -Number of digits in this event: 36 -Using G4ParticleGun... -Particle energy: 1.60247 LIN -Particle: e- -Event: 82 -Number of tracker hits in this event: 113 - 82 107.58 1440 10 1 108.348 -39.9144 95.55 - 82 120.013 700 10 0 108.348 -39.9105 94.15 - 82 105.751 1440 9 1 108.343 -39.8279 65.55 - 82 106.744 701 9 0 108.344 -39.8215 64.15 - 82 143.473 1441 8 1 108.395 -39.7077 35.55 - 82 154.455 701 8 0 108.398 -39.704 34.15 - 82 140.317 1441 7 1 108.471 -39.6686 5.55 - 82 172.021 701 7 0 108.474 -39.669 4.15 - 82 134.917 1441 6 1 108.535 -39.6837 -24.45 - 82 329.281 701 6 0 108.537 -39.6937 -25.85 - 82 170.551 1442 5 1 108.601 -39.8961 -54.45 - 82 116.485 700 5 0 108.602 -39.9121 -55.85 - 82 23.5347 1441 4 1 108.55 -40.1806 -84.45 - 82 75.1328 1442 4 1 108.55 -40.1823 -84.5778 - 82 172.794 699 4 0 108.555 -40.1978 -85.85 - 82 110.565 1442 3 1 108.651 -40.5368 -114.45 - 82 107.215 697 3 0 108.607 -40.578 -115.85 - 82 111.256 1437 2 1 107.601 -41.65 -144.45 - 82 101.171 691 2 0 107.525 -41.8108 -145.85 - 82 12.2989 690 2 0 107.507 -41.8501 -146.192 - 82 104.632 1429 1 1 105.996 -44.977 -174.45 - 82 117.749 674 1 0 106.129 -45.1245 -175.85 - 82 115.062 1444 0 1 109.086 -48.388 -204.45 - 82 123.397 657 0 0 108.903 -48.5473 -205.85 - 82 218.63 1444 3 1 108.992 -39.8807 -114.45 - 82 260.774 700 3 0 109.057 -39.8699 -115.85 - 82 156.203 1450 2 1 110.32 -39.1321 -144.45 - 82 25.8382 1451 2 1 110.35 -39.1118 -144.759 - 82 185.561 705 2 0 110.451 -39.0293 -145.85 - 82 151.325 1464 1 1 113.061 -36.966 -174.45 - 82 185.945 716 1 0 113.227 -36.7439 -175.85 - 82 161.453 1484 0 1 117.089 -32.1031 -204.45 - 82 35.2783 1485 0 1 117.15 -32.0873 -204.764 - 82 166.004 740 0 0 117.377 -32.0484 -205.85 - 82 127.069 1445 2 1 109.266 -39.9956 -144.45 - 82 115.599 700 2 0 109.296 -39.9884 -145.85 - 82 120.334 1448 1 1 109.877 -39.8875 -174.45 - 82 123.284 700 1 0 109.911 -39.8824 -175.85 - 82 118.899 1452 0 1 110.608 -39.7749 -204.45 - 82 116.663 701 0 0 110.643 -39.7673 -205.85 - 82 165.951 1447 1 1 109.608 -39.5535 -174.45 - 82 380.96 696 1 0 110.367 -40.7078 -175.85 - 82 398.803 695 1 0 110.569 -40.85 -176.141 - 82 91.1367 694 1 0 110.644 -41.05 -176.203 - 82 4.03158 702 8 0 108.459 -39.65 33.7618 - 82 45.2915 1132 8 0 132.535 46.544 33.7502 - 82 71.8007 1133 8 0 132.511 46.65 33.7992 - 82 113.854 1134 8 0 132.443 46.85 33.8777 - 82 53.6212 1552 8 1 130.649 47.9845 35.15 - 82 55.1529 1551 8 1 130.55 48.1339 35.1874 - 82 43.3662 1144 8 0 130.295 48.9563 34.15 - 82 192.97 1145 8 0 130.258 49.05 34.059 - 82 23.0551 1146 8 0 129.76 49.25 34.108 - 82 304.069 1534 8 1 127.116 48.3627 35.15 - 82 91.781 1533 8 1 126.95 48.3626 35.2163 - 82 82.032 702 6 0 108.474 -39.5273 -25.85 - 82 29.3599 582 6 0 116.179 -63.6271 -26.2498 - 82 34.2116 684 6 0 130.604 -43.2321 -26.25 - 82 22.3922 626 6 0 91.921 -54.6827 -26.25 - 82 229.652 1441 9 1 108.399 -39.838 65.5498 - 82 243.562 700 9 0 108.87 -40.0158 64.15 - 82 38.0159 699 9 0 108.966 -40.0501 63.8802 - 82 158.574 1495 8 1 119.248 -44.1027 35.55 - 82 106.487 677 8 0 119.335 -44.4624 34.15 - 82 143.351 1502 7 1 120.607 -53.3023 5.55 - 82 12.4927 1503 7 1 120.75 -53.4438 5.18694 - 82 130.995 631 7 0 121.218 -53.7163 4.15 - 82 106.192 1569 6 1 134.089 -60.2102 -24.45 - 82 14.1002 1568 6 1 133.95 -60.1415 -24.8053 - 82 77.1256 600 6 0 133.421 -59.9022 -25.8504 - 82 69.1935 601 6 0 133.31 -59.85 -26.0649 - 82 83.265 707 6 0 118.465 -38.6385 -26.25 - 82 70.2576 708 6 0 118.535 -38.4497 -26.0285 - 82 3.75465 709 6 0 118.596 -38.2499 -25.8628 - 82 148.551 1493 6 1 118.867 -36.9606 -24.85 - 82 12.5535 868 7 0 -71.8534 -6.2574 3.75 - 82 51.1486 869 7 0 -71.8919 -6.25 3.75282 - 82 189.197 404 1 0 147.771 -99.207 -175.872 - 82 35.8223 1608 0 1 141.877 -102.894 -204.45 - 82 89.9059 1609 0 1 141.95 -102.956 -204.537 - 82 74.8255 1610 0 1 142.15 -103.184 -204.681 - 82 127.684 1611 0 1 142.35 -103.335 -204.71 - 82 72.8455 403 1 0 147.704 -99.3501 -176.015 - 82 122.951 1447 8 1 109.571 -41.4387 35.55 - 82 116.248 692 8 0 109.62 -41.511 34.15 - 82 142.538 1450 7 1 110.296 -42.8035 5.55 - 82 107.45 685 7 0 110.367 -42.8583 4.15 - 82 108.262 1458 6 1 111.854 -43.9813 -24.45 - 82 131.654 680 6 0 112.108 -43.9131 -25.85 - 82 126.365 1485 5 1 117.233 -42.5932 -54.45 - 82 98.8698 687 5 0 117.422 -42.5473 -55.85 - 82 115.629 1505 4 1 121.287 -41.4062 -84.4505 - 82 246.397 693 4 0 121.386 -41.3167 -85.85 - 82 196.967 1517 3 1 123.652 -39.4476 -114.45 - 82 178.328 703 3 0 123.739 -39.4168 -115.85 - 82 142.651 1527 2 1 125.625 -38.8724 -144.45 - 82 88.22 706 2 0 125.718 -38.8023 -145.85 - 82 254.506 1531 1 1 126.447 -38.0817 -174.45 - 82 261.242 710 1 0 126.512 -38.0346 -175.85 - 82 122.285 1539 0 1 127.976 -36.9063 -204.45 - 82 101.116 716 0 0 128.118 -36.8376 -205.85 - 82 17.799 747 1 0 116.678 -30.4758 -176.25 - 82 266.896 748 1 0 116.666 -30.45 -176.173 - 82 98.5258 1479 1 1 116.134 -30.4146 -174.85 - 82 39.801 1478 1 1 115.95 -30.4611 -174.529 - 82 79.6818 1540 0 1 128.15 -35.9966 -204.45 - 82 145.031 718 0 0 128.417 -36.379 -205.85 - 82 151.613 719 0 0 128.394 -36.2498 -206.223 - 82 1.02599 694 4 0 121.362 -41.2499 -86.2474 - 82 28.3894 949 4 0 71.929 10.0091 -86.25 - 82 38.4929 950 4 0 71.9338 10.05 -86.2209 - 82 76.0056 989 4 0 8.05831 18.0023 -86.25 - 82 122.518 1005 4 0 16.3294 21.2104 -86.25 -Number of digits in this event: 52 -Using G4ParticleGun... -Particle energy: 3.59461 LIN -Particle: e- -Event: 83 -Number of tracker hits in this event: 82 - 83 119.653 781 11 1 -23.7896 -66.4722 125.55 - 83 119.686 567 11 0 -23.7903 -66.4722 124.15 - 83 118.219 781 10 1 -23.7989 -66.4706 95.55 - 83 110.662 567 10 0 -23.7997 -66.4696 94.15 - 83 121.489 781 9 1 -23.833 -66.4599 65.55 - 83 125.862 567 9 0 -23.8366 -66.4592 64.15 - 83 129.085 780 8 1 -23.9062 -66.4492 35.55 - 83 252.787 568 8 0 -23.9114 -66.4462 34.15 - 83 121.61 780 7 1 -24.0212 -66.387 5.55 - 83 117.62 568 7 0 -24.0258 -66.3837 4.15 - 83 414.129 779 6 1 -24.1166 -66.3162 -24.45 - 83 127.959 568 6 0 -24.1189 -66.313 -25.85 - 83 151.421 779 5 1 -24.165 -66.2485 -54.45 - 83 106.024 569 5 0 -24.1664 -66.2465 -55.85 - 83 163.492 779 4 1 -24.1892 -66.2086 -84.45 - 83 151.814 569 4 0 -24.1897 -66.205 -85.85 - 83 105.499 779 3 1 -24.1947 -66.1268 -114.45 - 83 124.364 569 3 0 -24.197 -66.1217 -115.85 - 83 132.546 779 2 1 -24.2472 -66.0116 -144.45 - 83 124.035 570 2 0 -24.2455 -66.0039 -145.85 - 83 128.689 779 1 1 -24.215 -65.856 -174.45 - 83 118.25 570 1 0 -24.2085 -65.8556 -175.85 - 83 126.791 780 0 1 -24.0444 -65.8714 -204.45 - 83 198.073 570 0 0 -24.0258 -65.8785 -205.85 - 83 197.757 701 4 0 84.4013 -39.8425 -86.25 - 83 166.118 700 4 0 84.4138 -39.85 -86.1388 - 83 128.855 778 2 1 -24.25 -66.0112 -144.509 - 83 99.2107 161 2 0 -76.088 -147.779 -146.25 - 83 324.883 781 8 1 -23.8394 -66.4513 35.55 - 83 106.299 567 8 0 -23.8342 -66.4746 34.1498 - 83 274.835 781 7 1 -23.8032 -67.3991 5.55 - 83 104.985 563 7 0 -23.6672 -67.3518 4.15 - 83 118.859 792 6 1 -21.4827 -67.3463 -24.45 - 83 185.127 563 6 0 -21.7189 -67.4112 -25.85 - 83 115.271 770 5 1 -25.9698 -67.9599 -54.45 - 83 34.7181 769 5 1 -26.0501 -68.0503 -54.7301 - 83 48.5241 558 5 0 -26.4252 -68.4158 -55.8507 - 83 116.946 557 5 0 -26.4588 -68.45 -55.9433 - 83 110.651 712 4 1 -37.5302 -80.4697 -84.45 - 83 40.6749 711 4 1 -37.65 -80.5442 -84.7302 - 83 128.742 495 4 0 -38.1974 -80.8634 -85.8503 - 83 88.494 640 3 1 -52.0111 -87.1154 -114.45 - 83 405.578 639 3 1 -52.05 -87.1114 -114.62 - 83 127.457 465 3 0 -52.2087 -86.945 -115.85 - 83 13.0902 621 2 1 -55.822 -83.3033 -144.45 - 83 262.251 620 2 1 -55.85 -83.2708 -144.5 - 83 4.3945 619 2 1 -56.05 -83.0372 -144.84 - 83 60.2071 488 2 0 -56.6965 -82.3767 -145.85 - 83 92.0372 489 2 0 -56.8168 -82.25 -146.021 - 83 93.4171 514 1 1 -77.1028 -64.5441 -174.45 - 83 37.1652 513 1 1 -77.25 -64.5682 -174.719 - 83 142.079 576 1 0 -77.8531 -64.698 -175.85 - 83 182.965 433 0 1 -93.5327 -65.7545 -204.45 - 83 4.29489 573 0 0 -93.0044 -65.2564 -205.85 - 83 105.416 574 0 0 -92.9981 -65.25 -205.867 - 83 91.5979 579 7 0 -23.5641 -64.0778 4.14984 - 83 29.4991 580 7 0 -23.52 -64.05 3.87391 - 83 6.93099 800 6 1 -19.8568 -62.2415 -24.45 - 83 123.455 801 6 1 -19.85 -62.2454 -24.4824 - 83 129.921 588 6 0 -19.5412 -62.3962 -25.8502 - 83 12.9812 837 5 1 -12.4612 -64.8453 -54.45 - 83 148.145 838 5 1 -12.45 -64.8488 -54.4762 - 83 143.195 574 5 0 -11.8699 -65.0718 -55.85 - 83 172.574 896 4 1 -0.753319 -69.1665 -84.4504 - 83 17.5845 897 4 1 -0.65 -69.1584 -84.794 - 83 121.176 554 4 0 -0.343548 -69.1317 -85.85 - 83 106.155 935 3 1 7.12392 -68.9368 -114.45 - 83 78.4218 936 3 1 7.25 -69.2326 -114.735 - 83 27.2198 548 3 0 7.73673 -70.3877 -115.85 - 83 88.4407 547 3 0 7.76257 -70.45 -115.91 - 83 110.996 546 3 0 7.84598 -70.65 -116.096 - 83 237.784 990 2 1 18.075 -100.068 -144.45 - 83 51.5418 393 2 0 18.269 -101.447 -145.85 - 83 142.588 392 2 0 18.281 -101.55 -145.95 - 83 59.5677 391 2 0 18.2978 -101.75 -146.136 - 83 156.395 998 1 1 19.8118 -135.013 -174.45 - 83 227.548 219 1 0 19.6991 -136.168 -175.85 - 83 244.421 218 1 0 19.6806 -136.35 -176.067 - 83 88.8791 975 0 1 15.0661 -159.503 -204.45 - 83 58.5394 974 0 1 15.0498 -159.657 -204.647 - 83 60.4828 98 0 0 14.9096 -160.439 -205.85 - 83 88.8339 97 0 0 14.8879 -160.55 -206.023 -Number of digits in this event: 40 -Using G4ParticleGun... -Particle energy: 6.98696 LIN -Particle: e- -Event: 84 -Number of tracker hits in this event: 70 - 84 141.303 1322 10 1 84.5901 -22.9298 95.55 - 84 127.095 785 10 0 84.5912 -22.9309 94.15 - 84 124.795 1322 9 1 84.6105 -22.9512 65.55 - 84 138.848 785 9 0 84.6119 -22.952 64.15 - 84 141.827 1322 8 1 84.641 -22.9651 35.55 - 84 201.549 785 8 0 84.6416 -22.9654 34.15 - 84 116.428 1323 7 1 84.6572 -22.9662 5.55 - 84 113.892 785 7 0 84.6572 -22.9674 4.15 - 84 383.294 1323 6 1 84.6521 -22.9916 -24.45 - 84 405.824 785 6 0 84.6536 -22.9925 -25.85 - 84 126.087 1323 5 1 84.6818 -23.0011 -54.45 - 84 115.486 785 5 0 84.6829 -23.0018 -55.85 - 84 126.805 1323 4 1 84.7006 -23.0149 -84.45 - 84 113.147 785 4 0 84.7018 -23.0165 -85.85 - 84 118.392 1323 3 1 84.7243 -23.0507 -114.45 - 84 124.982 784 3 0 84.7253 -23.0517 -115.85 - 84 111.871 1323 2 1 84.7517 -23.0694 -144.45 - 84 135.096 784 2 0 84.7533 -23.0696 -145.85 - 84 185.678 1323 1 1 84.7856 -23.0724 -174.45 - 84 109.517 784 1 0 84.7899 -23.073 -175.85 - 84 152.325 1324 0 1 84.8804 -23.0866 -204.45 - 84 113.95 784 0 0 84.8835 -23.0891 -205.85 - 84 30.6364 723 1 0 -36.3871 -35.2528 -176.25 - 84 10.2817 711 1 1 -37.8293 -35.4744 -174.85 - 84 55.1913 710 1 1 -37.85 -35.4799 -174.829 - 84 102.524 709 1 1 -38.05 -35.4973 -174.753 - 84 64.152 708 1 1 -38.2501 -35.5176 -174.705 - 84 412.863 707 1 1 -38.45 -35.5318 -174.622 - 84 401.439 706 1 1 -38.65 -35.6207 -174.611 - 84 1.79809 1704 2 1 160.953 -99.9161 -144.45 - 84 230.688 1703 2 1 160.95 -99.913 -144.451 - 84 27.1701 703 9 0 106.132 -39.4187 63.7504 - 84 130.999 702 9 0 106.204 -39.4501 63.8011 - 84 71.9066 701 9 0 106.382 -39.65 64.0448 - 84 369.838 1428 9 1 105.81 -39.52 65.1501 - 84 13.0289 794 0 0 71.7852 -21.136 -206.25 - 84 238.845 1326 5 1 85.299 -22.4634 -54.45 - 84 131.215 788 5 0 85.3461 -22.4064 -55.85 - 84 120.753 1330 4 1 86.078 -21.1705 -84.45 - 84 154.428 794 4 0 86.1354 -21.0994 -85.85 - 84 120.034 1336 3 1 87.3893 -19.7581 -114.45 - 84 143.258 802 3 0 87.4977 -19.5918 -115.85 - 84 210.53 1348 2 1 89.7403 -16.0529 -144.45 - 84 89.2807 820 2 0 89.9575 -15.8865 -145.85 - 84 29.0996 821 2 0 90.0057 -15.85 -146.157 - 84 267.067 1372 1 1 94.587 -12.4336 -174.45 - 84 104.84 838 1 0 94.7848 -12.2888 -175.85 - 84 7.72062 839 1 0 94.8356 -12.25 -176.204 - 84 114.889 1393 0 1 98.909 -9.19185 -204.45 - 84 1.20689 1394 0 1 98.95 -9.18198 -204.846 - 84 188.044 854 0 0 99.0604 -9.16309 -205.85 - 84 59.9174 830 1 0 94.3721 -13.9102 -175.85 - 84 345.122 829 1 0 94.3519 -14.0501 -175.94 - 84 45.9894 828 1 0 94.4895 -14.25 -176.128 - 84 227.769 1347 2 1 89.6491 -16.0007 -144.82 - 84 47.6859 784 6 0 84.7139 -23.05 -26.0227 - 84 227.819 648 6 0 112.717 -50.2583 -26.2499 - 84 185.832 796 5 0 85.4109 -20.6589 -55.85 - 84 95.1044 1335 4 1 87.1347 -20.5329 -84.45 - 84 0.841258 797 4 0 87.1587 -20.4502 -85.85 - 84 124.926 798 4 0 87.1587 -20.45 -85.853 - 84 152.593 1338 3 1 87.702 -18.3502 -114.45 - 84 145.568 809 3 0 87.6397 -18.2226 -115.85 - 84 153.786 1329 2 1 85.9075 -15.6263 -144.45 - 84 90.2727 822 2 0 85.8621 -15.5224 -145.85 - 84 118.216 1321 1 1 84.4248 -12.7827 -174.45 - 84 104.227 837 1 0 84.4258 -12.6255 -175.85 - 84 186.848 1322 0 1 84.538 -9.69191 -204.45 - 84 148.284 852 0 0 84.4612 -9.52679 -205.85 - 84 136.737 706 4 0 45.1957 -38.749 -86.25 -Number of digits in this event: 42 -Using G4ParticleGun... -Particle energy: 4.68362 LIN -Particle: e- -Event: 85 -Number of tracker hits in this event: 72 - 85 138.007 1277 11 1 75.6315 20.5253 125.55 - 85 140.504 1002 11 0 75.6298 20.525 124.15 - 85 107.523 1277 10 1 75.5917 20.5216 95.55 - 85 257.554 1002 10 0 75.5882 20.5201 94.15 - 85 176.409 1277 9 1 75.5096 20.4835 65.55 - 85 117.401 1002 9 0 75.508 20.482 64.15 - 85 130.434 1277 8 1 75.4674 20.4511 35.55 - 85 158.715 1001 8 0 75.4663 20.4483 34.15 - 85 170.359 1276 7 1 75.4317 20.3909 5.55 - 85 120.267 1001 7 0 75.4314 20.3886 4.15 - 85 113.706 1276 6 1 75.4156 20.3488 -24.45 - 85 195.545 1001 6 0 75.4156 20.3503 -25.85 - 85 133.341 1276 5 1 75.4156 20.3673 -54.45 - 85 119.806 1001 5 0 75.4185 20.3672 -55.85 - 85 154.537 1277 4 1 75.487 20.3786 -84.45 - 85 220.646 1001 4 0 75.4921 20.3789 -85.85 - 85 112.592 1277 3 1 75.5871 20.3881 -114.45 - 85 296.853 1001 3 0 75.5945 20.3877 -115.85 - 85 107.802 1278 2 1 75.7355 20.3889 -144.45 - 85 121.606 1001 2 0 75.7438 20.3907 -145.85 - 85 177.499 1279 1 1 75.9074 20.4338 -174.45 - 85 177.586 1001 1 0 75.9177 20.4342 -175.85 - 85 202.21 1280 0 1 76.1317 20.4384 -204.45 - 85 122.396 1001 0 0 76.14 20.4408 -205.85 - 85 85.2282 1281 0 1 76.25 20.4405 -204.597 - 85 14.2694 1282 0 1 76.45 20.3301 -204.791 - 85 162.666 1000 0 0 77.1696 20.2133 -205.85 - 85 229.079 1276 4 1 75.3195 20.3372 -84.4503 - 85 15.4931 1275 4 1 75.25 20.5687 -84.8075 - 85 26.1505 1005 4 0 75.1042 21.2024 -85.85 - 85 138.351 1006 4 0 75.0924 21.25 -85.9287 - 85 8.09885 1007 4 0 75.0294 21.45 -86.2278 - 85 182.9 1243 3 1 68.6883 42.4365 -114.45 - 85 49.317 1116 3 0 68.9803 43.3444 -115.85 - 85 186.849 1117 3 0 69.0138 43.45 -116.01 - 85 139.949 1269 2 1 73.9203 62.8222 -144.45 - 85 42.7437 1219 2 0 73.854 63.9451 -145.85 - 85 105.282 1220 2 0 73.8479 64.05 -145.977 - 85 8.0137 1221 2 0 73.8323 64.25 -146.223 - 85 236.174 1258 1 1 71.8219 87.8909 -174.45 - 85 10.3201 1257 1 1 71.65 88.3959 -174.825 - 85 37.1973 1348 1 0 71.337 89.7195 -175.85 - 85 80.892 1349 1 0 71.3102 89.85 -175.955 - 85 31.1514 1350 1 0 71.2339 90.15 -176.194 - 85 27.824 1203 0 1 60.6699 129.563 -204.45 - 85 129.941 1202 0 1 60.65 129.632 -204.536 - 85 70.2418 1552 0 0 60.2052 130.621 -205.85 - 85 96.9155 1553 0 0 60.1382 130.75 -206.045 - 85 141.298 1000 4 0 75.425 20.2466 -85.8505 - 85 121.349 1287 3 1 77.5809 18.749 -114.45 - 85 6.29627 1288 3 1 77.65 18.7488 -114.823 - 85 164.995 993 3 0 77.8411 18.7408 -115.85 - 85 79.942 1317 2 1 83.55 18.3886 -144.45 - 85 75.857 1318 2 1 83.65 18.4217 -144.719 - 85 273.457 992 2 0 84.0313 18.5131 -145.85 - 85 120.798 1354 1 1 90.9759 21.3636 -174.45 - 85 3.93842 1355 1 1 91.1503 21.4839 -174.828 - 85 1.03847 1008 1 0 91.516 21.8483 -175.85 - 85 101.448 1009 1 0 91.5177 21.85 -175.855 - 85 77.6646 1418 0 1 103.809 35.3377 -204.45 - 85 67.5472 1419 0 1 103.95 35.508 -204.575 - 85 92.3043 1420 0 1 104.15 35.731 -204.728 - 85 70.1876 1421 0 1 104.35 35.9384 -204.817 - 85 36.4773 1094 0 0 107.256 38.9607 -205.85 - 85 76.7339 1095 0 0 107.344 39.05 -205.879 - 85 76.9175 1096 0 0 107.531 39.25 -205.944 - 85 75.236 1097 0 0 107.726 39.4502 -206.022 - 85 98.5393 1098 0 0 107.865 39.65 -206.073 - 85 65.3365 1099 0 0 108.024 39.85 -206.145 - 85 61.1498 991 2 0 84.4818 18.45 -146.113 - 85 2.88821 974 2 0 144.984 15.0486 -146.25 - 85 0.23513 975 2 0 144.991 15.0501 -146.249 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 5.83505 LIN -Particle: e- -Event: 86 -Number of tracker hits in this event: 62 - 86 114.518 615 11 1 -57.0069 7.58618 125.55 - 86 140.418 937 11 0 -57.0074 7.58515 124.15 - 86 110.144 614 10 1 -57.066 7.53477 95.55 - 86 117.277 937 10 0 -57.0699 7.53278 94.15 - 86 151.942 614 9 1 -57.1492 7.4904 65.55 - 86 109.497 937 9 0 -57.1529 7.48799 64.15 - 86 131.55 614 8 1 -57.2296 7.45345 35.55 - 86 145.971 937 8 0 -57.2339 7.45116 34.15 - 86 128.908 613 7 1 -57.3155 7.40242 5.55 - 86 104.532 936 7 0 -57.3202 7.39963 4.15 - 86 157.446 613 6 1 -57.4127 7.3414 -24.45 - 86 194.654 936 6 0 -57.414 7.34036 -25.85 - 86 137.224 613 5 1 -57.4346 7.32242 -54.45 - 86 157.722 936 5 0 -57.4363 7.32087 -55.85 - 86 106.281 612 4 1 -57.4739 7.29117 -84.45 - 86 102.581 936 4 0 -57.4743 7.28796 -85.85 - 86 130.137 612 3 1 -57.483 7.22172 -114.45 - 86 141.808 935 3 0 -57.4835 7.21616 -115.85 - 86 138.339 612 2 1 -57.493 7.09958 -144.45 - 86 205.363 935 2 0 -57.4931 7.0937 -145.85 - 86 726.361 612 1 1 -57.4898 6.97027 -174.45 - 86 410.147 934 1 0 -57.4902 6.96362 -175.85 - 86 264.51 612 0 1 -57.4953 6.82902 -204.45 - 86 105.251 933 0 0 -57.4978 6.81952 -205.85 - 86 22.2009 609 0 1 -58.0835 2.23614 -204.85 - 86 18.7074 917 0 0 -59.0073 3.62084 -205.85 - 86 296.796 918 0 0 -59.0327 3.65002 -205.878 - 86 109.527 848 0 0 -23.474 -10.448 -206.25 - 86 5.24047 847 0 0 -23.4533 -10.45 -206.236 - 86 93.3977 574 0 1 -65.2201 4.9945 -204.45 - 86 33.0925 575 0 1 -65.05 4.98035 -204.756 - 86 252.432 925 0 0 -64.423 5.08138 -205.85 - 86 256.995 936 1 0 -57.5331 7.27751 -175.85 - 86 187.516 963 0 0 -57.2337 12.7727 -205.85 - 86 118.391 964 0 0 -57.1382 12.8507 -206.142 - 86 136.788 929 1 0 -58 6.04698 -175.85 - 86 162.733 928 1 0 -58.1104 5.85 -176.099 - 86 111.82 618 0 1 -56.2738 3.83709 -204.45 - 86 22.5477 619 0 1 -56.25 3.84416 -204.752 - 86 176.833 613 1 1 -57.45 6.90094 -174.542 - 86 114.974 927 1 0 -57.0606 5.6497 -176.124 - 86 199.941 663 0 1 -47.2507 -23.4888 -204.45 - 86 57.1162 662 0 1 -47.45 -23.8041 -204.777 - 86 2.74715 777 0 0 -47.8736 -24.6405 -205.851 - 86 87.6496 776 0 0 -47.8785 -24.65 -205.863 - 86 113.328 775 0 0 -47.9526 -24.8502 -206.091 - 86 1.60626 702 0 0 -43.5533 -39.4523 -206.25 - 86 125.023 703 0 0 -43.5502 -39.45 -206.244 - 86 44.3921 704 0 0 -43.425 -39.2497 -205.918 - 86 58.3691 684 0 1 -43.0729 -37.8607 -204.85 - 86 99.396 685 0 1 -43.05 -37.766 -204.786 - 86 33.4603 686 0 1 -42.85 -37.585 -204.5 - 86 129.251 771 0 0 -46.6137 -25.7248 -205.85 - 86 243.526 770 0 0 -46.588 -25.85 -205.937 - 86 113.798 769 0 0 -46.5312 -26.05 -206.118 - 86 30.9789 914 0 0 -64.2518 2.85 -206.127 - 86 6.15892 578 4 1 -64.3781 13.9566 -84.85 - 86 51.0227 586 4 1 -62.684 21.9074 -84.45 - 86 113.792 610 1 1 -57.9149 7.25299 -174.45 - 86 42.4114 935 1 0 -58.0818 7.25 -176.175 - 86 134.59 587 0 1 -62.6159 4.83153 -204.45 - 86 273.493 615 5 1 -56.9703 7.57409 -54.45 -Number of digits in this event: 30 -Using G4ParticleGun... -Particle energy: 9.56104 LIN -Particle: e- -Event: 87 +Event: 52 Number of tracker hits in this event: 55 - 87 127.535 749 9 1 -30.061 118.926 65.55 - 87 229.033 1493 9 0 -30.0616 118.926 64.15 - 87 133.608 749 8 1 -30.0754 118.917 35.55 - 87 140.268 1493 8 0 -30.075 118.918 34.15 - 87 109.042 749 7 1 -30.0659 118.931 5.55 - 87 104.102 1493 7 0 -30.0659 118.932 4.15 - 87 222.58 749 6 1 -30.0685 118.939 -24.45 - 87 108.071 1493 6 0 -30.0687 118.939 -25.85 - 87 109.27 749 5 1 -30.0654 118.954 -54.45 - 87 132.29 1494 5 0 -30.0635 118.956 -55.85 - 87 102.433 750 4 1 -30.0297 118.994 -84.45 - 87 111.708 1494 4 0 -30.0261 118.996 -85.85 - 87 153.977 750 3 1 -29.9559 119.027 -114.45 - 87 149.79 1494 3 0 -29.9526 119.028 -115.85 - 87 231.192 750 2 1 -29.8804 119.06 -144.45 - 87 440.666 1494 2 0 -29.8761 119.062 -145.85 - 87 144.711 751 1 1 -29.7873 119.1 -174.45 - 87 137.35 1494 1 0 -29.7882 119.099 -175.85 - 87 125.33 751 0 1 -29.816 119.062 -204.45 - 87 334.021 1494 0 0 -29.8167 119.064 -205.85 - 87 95.5582 751 3 1 -29.85 118.972 -114.524 - 87 55.4194 752 3 1 -29.65 118.84 -114.734 - 87 57.1203 1490 3 0 -28.8853 118.229 -115.85 - 87 114.572 1489 3 0 -28.7806 118.15 -115.988 - 87 7.291 1488 3 0 -28.5913 117.95 -116.234 - 87 15.0387 903 2 1 0.841016 92.6547 -144.45 - 87 175.417 904 2 1 0.850072 92.6298 -144.482 - 87 29.1867 1356 2 0 1.01343 91.4332 -145.85 - 87 165.418 1355 2 0 1.0222 91.3499 -145.941 - 87 7.37733 1354 2 0 1.02379 91.15 -146.24 - 87 76.7678 1237 2 0 -7.87932 67.6341 -146.249 - 87 68.5117 1236 2 0 -7.82582 67.45 -146.137 - 87 3.29744 1235 2 0 -7.7861 67.25 -146.247 - 87 91.5257 1227 3 0 -41.3542 65.5892 -116.25 - 87 82.7837 1226 3 0 -41.4384 65.4497 -116.183 - 87 106.301 1749 1 0 7.0283 170.046 -176.25 - 87 274.876 749 3 1 -30.0523 118.94 -114.45 - 87 314.192 1493 3 0 -30.0492 118.941 -115.85 - 87 131.103 749 1 1 -30.0849 119.17 -174.45 - 87 192.578 1495 1 0 -30.0835 119.155 -175.85 - 87 155.166 750 0 1 -30.0388 119.009 -204.45 - 87 75.0554 1493 0 0 -29.9443 118.95 -206.124 - 87 53.2076 1495 2 0 -29.9818 119.15 -145.957 - 87 207.107 1468 3 0 -5.14073 113.758 -116.25 - 87 62.9254 1467 3 0 -5.12218 113.75 -116.213 - 87 122.941 749 2 1 -30.0794 118.81 -144.45 - 87 140.027 1493 2 0 -30.0669 118.805 -145.85 - 87 243.827 750 1 1 -29.8741 118.679 -174.45 - 87 175.565 1492 1 0 -29.8586 118.667 -175.85 - 87 130.446 752 0 1 -29.467 118.346 -204.45 - 87 128.805 1490 0 0 -29.4535 118.335 -205.85 - 87 91.8745 1493 1 0 -30.3137 118.827 -175.85 - 87 339.355 1644 1 0 -41.4992 148.981 -176.25 - 87 455.072 696 1 1 -40.8071 149.008 -174.849 - 87 13.1516 1645 1 0 -41.2927 149.15 -175.875 + 52 126.402 968 11 1 13.6586 80.543 125.55 + 52 136.625 1302 11 0 13.6548 80.5444 124.15 + 52 115.457 967 10 1 13.6101 80.5219 95.55 + 52 140.424 1302 10 0 13.6115 80.519 94.15 + 52 121.436 967 9 1 13.5883 80.4743 65.55 + 52 240.686 1302 9 0 13.5912 80.4646 64.15 + 52 137.377 967 8 1 13.6239 80.2014 35.55 + 52 112.738 1300 8 0 13.6285 80.1769 34.15 + 52 250.697 968 7 1 13.6738 79.6877 5.55 + 52 72.2782 1298 7 0 13.6716 79.657 4.15 + 52 22.0704 1297 7 0 13.6711 79.65 3.83343 + 52 111.196 967 6 1 13.626 78.9995 -24.45 + 52 102.866 1294 6 0 13.6309 78.9706 -25.85 + 52 125.758 968 5 1 13.7229 78.3935 -54.45 + 52 114.682 1291 5 0 13.7422 78.4002 -55.85 + 52 116.923 970 4 1 14.2145 78.5833 -84.45 + 52 124.043 1292 4 0 14.0211 78.5816 -85.8502 + 52 120.945 954 3 1 10.9736 76.5994 -114.45 + 52 105.333 1282 3 0 10.6048 76.4778 -115.85 + 52 41.0402 1281 3 0 10.5365 76.45 -116.107 + 52 96.4809 914 2 1 2.94497 73.0793 -144.45 + 52 23.0055 913 2 1 2.85 73.0122 -144.774 + 52 137.17 1263 2 0 2.54374 72.784 -145.85 + 52 64.2022 874 1 1 -5.20847 67.004 -174.451 + 52 40.2745 873 1 1 -5.25002 66.9418 -174.702 + 52 31.0967 1233 1 0 -5.46302 66.6776 -175.85 + 52 108.597 1232 1 0 -5.48562 66.65 -175.97 + 52 135.154 841 0 1 -11.7432 59.7399 -204.45 + 52 3.04747 840 0 1 -11.85 59.6943 -204.835 + 52 141.07 1197 0 0 -12.1217 59.5549 -205.85 + 52 59.483 917 2 1 3.45 72.9827 -144.738 + 52 21.5532 1583 2 1 136.75 141.171 -144.719 + 52 6.32956 1584 2 1 136.95 141.266 -144.462 + 52 10.1436 1535 9 0 -7.44865 127.334 63.75 + 52 165.396 1536 9 0 -7.45597 127.35 63.765 + 52 154.557 1299 4 0 13.3145 79.928 -85.9678 + 52 319.283 965 3 1 13.244 81.479 -114.45 + 52 109.584 966 3 1 13.25 81.4773 -114.474 + 52 102.851 1306 3 0 13.5109 81.3932 -115.85 + 52 55.8364 1007 2 1 21.5096 81.6062 -144.45 + 52 95.1659 1008 2 1 21.65 81.6039 -144.602 + 52 235.03 1308 2 0 22.572 81.7771 -145.85 + 52 110.507 1124 1 1 45.0479 86.5996 -174.45 + 52 103.895 1331 1 0 45.1721 86.4019 -175.85 + 52 34.9943 1694 0 0 97.1323 158.968 -206.25 + 52 1.54176 1302 2 0 13.6531 80.5377 -146.247 + 52 102.191 968 1 1 13.6539 80.5407 -174.45 + 52 217.163 1302 1 0 13.6521 80.5419 -175.85 + 52 483.971 967 0 1 13.614 80.571 -204.45 + 52 373.602 1302 0 0 13.6128 80.5697 -205.85 + 52 59.8833 1718 11 1 163.765 179.342 125.15 + 52 126.652 1793 11 0 164.701 178.898 124.15 + 52 24.9573 1070 0 0 63.3804 34.196 -206.25 + 52 115.115 967 1 1 13.5972 80.5673 -174.45 + 52 77.738 968 0 1 13.65 80.4649 -204.763 +Number of digits in this event: 24 +Using G4ParticleGun... +Particle energy: 7.23581 LIN +Particle: e- +Event: 53 +Number of tracker hits in this event: 232 + 53 114.629 772 11 1 -25.4895 -63.9876 125.55 + 53 205.43 580 11 0 -25.4899 -63.9873 124.15 + 53 119.098 772 10 1 -25.5106 -63.9636 95.55 + 53 96.4152 580 10 0 -25.5159 -63.9603 94.15 + 53 365.203 772 9 1 -25.6227 -63.8914 65.55 + 53 347.784 580 9 0 -25.6256 -63.8847 64.15 + 53 360.706 771 8 1 -25.6985 -63.7533 35.55 + 53 106.01 581 8 0 -25.7034 -63.7439 34.15 + 53 239.191 771 7 1 -25.8071 -63.5445 5.55 + 53 134.111 582 7 0 -25.8123 -63.5321 4.15 + 53 264.571 770 6 1 -25.9256 -63.2826 -24.45 + 53 125.391 583 6 0 -25.9319 -63.2732 -25.85 + 53 155.436 769 5 1 -26.0623 -63.0724 -54.45 + 53 308.351 584 5 0 -26.0658 -63.0611 -55.85 + 53 263.809 769 4 1 -26.1304 -62.8288 -84.45 + 53 105.086 586 4 0 -26.1309 -62.8203 -85.85 + 53 104.132 769 3 1 -26.1291 -62.6406 -114.45 + 53 163.524 587 3 0 -26.1258 -62.6365 -115.85 + 53 97.9439 769 2 1 -26.0599 -62.5542 -144.45 + 53 399.266 587 2 0 -26.0636 -62.5394 -145.85 + 53 236.218 770 1 1 -26.0282 -62.1173 -174.45 + 53 155.774 589 1 0 -26.0378 -62.0959 -175.85 + 53 122.307 769 0 1 -26.1576 -61.7092 -204.45 + 53 139.974 591 0 0 -26.173 -61.7003 -205.85 + 53 9.38002 651 8 0 27.7323 -49.8314 33.75 + 53 105.321 1511 5 0 7.57277 122.392 -56.25 + 53 154.925 770 4 1 -26.05 -62.8838 -84.7859 + 53 22.4611 771 4 1 -25.8498 -62.9644 -84.8377 + 53 665.62 580 4 0 -24.0429 -63.9667 -85.85 + 53 206.563 579 4 0 -23.5011 -64.05 -86.1208 + 53 138.043 767 0 1 -26.45 -62.208 -204.601 + 53 177.357 768 0 1 -26.4498 -62.2099 -204.652 + 53 80.0904 467 5 0 -58.7525 -86.5032 -56.25 + 53 26.753 365 5 0 -66.2065 -107.014 -56.25 + 53 501.233 580 8 0 -25.5384 -63.9113 34.15 + 53 5.53572 788 7 1 -22.2517 -67.8247 5.55 + 53 108.458 789 7 1 -22.25 -67.829 5.53193 + 53 124.08 559 7 0 -22.1223 -68.1393 4.15 + 53 188.15 806 6 1 -18.8408 -74.09 -24.45 + 53 89.2059 528 6 0 -18.8969 -74.4081 -25.85 + 53 78.9165 527 6 0 -18.9048 -74.45 -26.0282 + 53 252.685 792 5 1 -21.5072 -81.1553 -54.4503 + 53 152.23 494 5 0 -21.494 -81.1502 -55.8502 + 53 27.1696 794 4 1 -21.0709 -82.5296 -84.45 + 53 93.7715 795 4 1 -21.05 -82.5418 -84.5566 + 53 114.445 486 4 0 -20.7467 -82.6996 -85.85 + 53 106.224 821 3 1 -15.7715 -86.8886 -114.45 + 53 125.908 465 3 0 -15.8467 -86.9684 -115.85 + 53 170.712 818 2 1 -16.4036 -89.7008 -144.45 + 53 85.3061 448 2 0 -15.9939 -90.3848 -145.85 + 53 28.4213 447 2 0 -15.9468 -90.55 -146.157 + 53 36.3291 847 1 1 -10.5414 -104.914 -174.45 + 53 73.95 848 1 1 -10.45 -104.933 -174.553 + 53 61.7086 849 1 1 -10.25 -104.923 -174.728 + 53 105.412 377 1 0 -9.10022 -104.607 -175.85 + 53 117.873 378 1 0 -8.88211 -104.55 -176.061 + 53 95.6418 1018 0 1 23.7866 -100.142 -204.45 + 53 164.17 399 0 0 23.4372 -100.284 -205.85 + 53 8.52921 819 2 1 -16.2499 -89.8064 -144.814 + 53 86.9385 450 2 0 -15.7476 -89.8891 -145.85 + 53 22.9556 451 2 0 -15.5953 -89.8498 -146.191 + 53 70.9319 793 5 1 -21.45 -81.1109 -54.7448 + 53 229.974 711 0 0 -2.91523 -37.8224 -206.25 + 53 88.2276 712 0 0 -2.69439 -37.6497 -206.142 + 53 108.122 713 0 0 -2.52596 -37.4497 -206.055 + 53 107.796 714 0 0 -2.42129 -37.25 -206.022 + 53 79.0081 715 0 0 -2.16074 -37.05 -206.034 + 53 107.922 716 0 0 -2.06714 -36.85 -206.045 + 53 252.529 717 0 0 -2.00294 -36.6497 -206.018 + 53 153.353 718 0 0 -1.68512 -36.45 -205.855 + 53 203.399 878 0 1 -4.35985 -37.0528 -204.85 + 53 27.7996 563 0 0 -52.6369 -67.2721 -206.25 + 53 185.182 564 0 0 -52.6846 -67.2499 -206.21 + 53 108.701 584 4 0 -25.9001 -63.1954 -85.85 + 53 366.132 771 6 1 -25.8179 -63.8052 -24.4514 + 53 237.81 581 6 0 -25.8137 -63.8216 -25.85 + 53 143.403 771 5 1 -25.8109 -64.426 -54.45 + 53 125.252 577 5 0 -25.8247 -64.5052 -55.85 + 53 122.647 568 4 0 -25.8824 -66.3095 -85.85 + 53 126.225 777 3 1 -24.647 -68.4714 -114.45 + 53 114.556 557 3 0 -24.5315 -68.5109 -115.85 + 53 97.2155 787 2 1 -22.5441 -69.5744 -144.45 + 53 126.821 552 2 0 -22.4671 -69.6041 -145.85 + 53 111.596 796 1 1 -20.8062 -70.2686 -174.45 + 53 179.297 548 1 0 -20.7935 -70.2543 -175.85 + 53 81.6864 549 1 0 -20.7895 -70.25 -176.22 + 53 104.255 798 0 1 -20.3361 -70.0839 -204.45 + 53 210.145 550 0 0 -20.2728 -69.9983 -205.85 + 53 122.367 770 5 1 -25.9997 -63.6998 -54.45 + 53 460.612 581 5 0 -26.0061 -63.7086 -55.85 + 53 0.604144 768 4 1 -26.25 -63.9914 -84.847 + 53 195.718 764 3 1 -27.1793 -64.2183 -114.45 + 53 134.887 578 3 0 -27.2359 -64.267 -115.85 + 53 270.076 758 2 1 -28.3876 -65.3303 -144.45 + 53 104.843 573 2 0 -28.435 -65.3728 -145.85 + 53 107.886 753 1 1 -29.3853 -66.1781 -174.45 + 53 163.473 569 1 0 -29.4641 -66.1167 -175.851 + 53 107.107 747 0 1 -30.6321 -64.5605 -204.45 + 53 28.0137 746 0 1 -30.65 -64.5182 -204.751 + 53 97.9009 578 0 0 -30.7155 -64.3632 -205.85 + 53 195.068 1768 9 1 173.75 -87.7195 65.2762 + 53 17.5493 1769 9 1 173.95 -87.66 65.1883 + 53 55.3771 463 9 0 174.103 -87.3397 64.15 + 53 79.1649 1773 9 1 174.86 -88.0649 65.15 + 53 180.55 1774 9 1 174.95 -88.0384 65.2097 + 53 271.773 763 3 1 -27.25 -64.0693 -114.646 + 53 132.417 762 3 1 -27.45 -63.7084 -114.83 + 53 30.8276 756 1 1 -28.7002 -64.8985 -174.45 + 53 3.21909 757 1 1 -28.65 -64.9466 -174.83 + 53 137.986 574 1 0 -28.4109 -65.2092 -175.85 + 53 38.1246 573 1 0 -28.3636 -65.25 -175.956 + 53 87.2127 575 1 0 -28.1547 -65.05 -176.145 + 53 89.4234 576 1 0 -28.0093 -64.85 -176.166 + 53 96.3997 482 1 0 -17.9023 -83.4678 -176.25 + 53 90.0842 483 1 0 -17.7578 -83.45 -176.103 + 53 36.5603 552 1 0 -24.0473 -69.4536 -176.25 + 53 7.90953 543 1 0 -59.4824 -71.2586 -176.25 + 53 93.5233 544 1 0 -59.4874 -71.25 -176.24 + 53 88.5438 579 7 0 -25.8191 -64.0647 4.15 + 53 110.615 580 6 0 -25.7643 -63.9675 -25.85 + 53 377.682 772 5 1 -25.6092 -63.9853 -54.45 + 53 370.292 580 5 0 -25.6061 -63.9834 -55.85 + 53 372.754 772 4 1 -25.5522 -63.9685 -84.45 + 53 257.863 771 3 1 -25.7424 -63.7622 -114.45 + 53 345.883 581 3 0 -25.7418 -63.7519 -115.85 + 53 511.3 771 2 1 -25.7057 -63.6137 -144.45 + 53 111.684 582 2 0 -25.7223 -63.5978 -145.85 + 53 107.134 583 1 0 -25.9966 -63.3757 -175.85 + 53 268.301 770 0 1 -25.9904 -64.2281 -204.45 + 53 160.233 579 0 0 -25.9764 -64.2271 -205.85 + 53 258.302 516 0 1 -76.65 -110.756 -204.731 + 53 140.321 785 0 1 -22.9754 -63.4112 -204.45 + 53 106.819 582 0 0 -23.0725 -63.519 -205.85 + 53 53.022 784 0 1 -23.0502 -63.3933 -204.456 + 53 63.7349 783 0 1 -23.25 -63.3863 -204.565 + 53 70.5501 782 0 1 -23.45 -63.375 -204.651 + 53 100.145 781 0 1 -23.65 -63.3532 -204.737 + 53 1.07098 780 0 1 -23.85 -63.3443 -204.848 + 53 205.897 583 0 0 -25.7236 -63.2924 -205.85 + 53 226.666 584 0 0 -26.25 -63.2499 -206.124 + 53 39.0404 192 0 0 -60.6552 -141.644 -206.25 + 53 85.9341 191 0 0 -60.7267 -141.75 -206.236 + 53 72.2072 190 0 0 -60.9437 -141.95 -206.142 + 53 50.284 189 0 0 -61.1167 -142.151 -206.147 + 53 110.973 188 0 0 -61.1812 -142.35 -206.213 + 53 143.08 772 8 1 -25.5328 -63.8915 35.55 + 53 113.211 772 7 1 -25.5777 -63.8814 5.55 + 53 141.197 580 7 0 -25.591 -63.895 4.15 + 53 153.324 579 6 0 -26.0156 -64.0841 -25.85 + 53 137.785 767 5 1 -26.5454 -64.2497 -54.45 + 53 112.144 579 5 0 -26.5717 -64.2497 -55.85 + 53 168.076 764 4 1 -27.0998 -64.2423 -84.45 + 53 120.008 761 3 1 -27.7254 -63.782 -114.45 + 53 123.625 585 2 0 -28.295 -63.0047 -145.85 + 53 123.174 758 1 1 -28.4498 -62.5518 -174.45 + 53 105.773 587 1 0 -28.4244 -62.577 -175.85 + 53 79.5953 762 0 1 -27.6251 -62.88 -204.451 + 53 33.8852 761 0 1 -27.65 -62.8542 -204.746 + 53 117.514 586 0 0 -27.7451 -62.7538 -205.85 + 53 256.727 753 0 1 -29.3757 -61.2669 -204.451 + 53 201.16 593 0 0 -29.4377 -61.2566 -205.85 + 53 169.432 594 0 0 -29.4027 -61.2225 -205.85 + 53 124.222 763 4 1 -27.3349 -64.1857 -84.4501 + 53 61.4482 765 4 1 -27.0493 -64.572 -84.6066 + 53 65.4993 766 4 1 -26.8498 -64.5823 -84.5605 + 53 92.047 767 4 1 -26.6499 -64.5926 -84.6142 + 53 47.3451 577 4 0 -26.0487 -64.4871 -85.85 + 53 112.395 578 4 0 -25.9591 -64.45 -86.0039 + 53 38.4881 590 4 0 12.3752 -62.0278 -86.2495 + 53 89.9616 589 4 0 12.3867 -62.05 -86.2257 + 53 365.036 582 4 0 -25.6134 -63.5978 -85.85 + 53 192.114 583 3 0 -25.7272 -63.3679 -115.85 + 53 141.785 770 2 1 -26.0257 -63.122 -144.45 + 53 182.477 584 2 0 -26.0332 -63.1015 -145.85 + 53 122.92 769 1 1 -26.1662 -62.6921 -174.45 + 53 114.296 586 1 0 -26.1689 -62.6655 -175.85 + 53 118.094 589 0 0 -26.259 -62.101 -205.85 + 53 343.646 772 3 1 -25.5646 -63.4297 -114.45 + 53 117.684 584 3 0 -25.3975 -63.1982 -115.85 + 53 152.598 776 2 1 -24.7738 -57.9819 -144.45 + 53 112.966 613 2 0 -24.5455 -57.4024 -145.85 + 53 7.03636 614 2 0 -24.4705 -57.25 -146.219 + 53 131.025 812 1 1 -17.6489 -45.4292 -174.45 + 53 66.9838 813 1 1 -17.45 -45.376 -174.644 + 53 65.0355 814 1 1 -17.25 -45.3364 -174.825 + 53 88.5079 674 1 0 -15.9094 -45.0985 -175.85 + 53 83.9671 675 1 0 -15.6192 -45.05 -176.086 + 53 113.582 1006 0 1 21.3513 -40.0864 -204.45 + 53 73.309 701 0 0 21.3357 -39.7098 -205.85 + 53 99.5479 702 0 0 21.3351 -39.6499 -206.027 + 53 100.324 580 3 0 -25.5158 -63.8501 -116.081 + 53 141.359 777 2 1 -24.5335 -62.7478 -144.45 + 53 24.2647 808 1 1 -18.2611 -58.8425 -174.45 + 53 144.929 809 1 1 -18.25 -58.8406 -174.489 + 53 156.476 606 1 0 -17.8672 -58.7578 -175.851 + 53 66.9541 850 0 1 -9.93758 -57.4161 -204.45 + 53 70.8643 851 0 1 -9.84992 -57.4203 -204.696 + 53 142.553 613 0 0 -9.45117 -57.4278 -205.85 + 53 105.446 778 3 1 -24.3637 -62.3599 -114.45 + 53 139.398 588 3 0 -24.2584 -62.3016 -115.85 + 53 104.257 790 2 1 -22.0484 -61.3623 -144.45 + 53 111.457 593 2 0 -21.942 -61.336 -145.85 + 53 328.925 804 1 1 -19.1142 -59.9715 -174.45 + 53 34.3167 600 1 0 -19.0574 -59.8568 -175.85 + 53 206.691 601 1 0 -19.0543 -59.85 -175.931 + 53 112.008 808 0 1 -18.4339 -58.1537 -204.45 + 53 141.962 609 0 0 -18.4089 -58.1057 -205.85 + 53 246.367 823 0 1 -15.3977 -50.0436 -204.45 + 53 5.89152 669 0 0 -15.5656 -46.0698 -205.85 + 53 73.1282 670 0 0 -15.5668 -46.0499 -205.857 + 53 69.0153 671 0 0 -15.5751 -45.8496 -205.935 + 53 65.106 672 0 0 -15.5794 -45.65 -206.018 + 53 58.005 673 0 0 -15.5826 -45.45 -206.105 + 53 29.5577 674 0 0 -15.5659 -45.25 -206.201 + 53 6.32523 803 1 1 -19.25 -60.2323 -174.839 + 53 41.219 599 1 0 -20.8626 -60.1939 -175.85 + 53 40.3396 786 1 1 -22.7349 -59.4318 -174.85 + 53 126.585 785 1 1 -22.8501 -59.3785 -174.81 + 53 221.732 784 1 1 -23.05 -59.4289 -174.549 + 53 62.9981 772 2 1 -25.65 -63.9979 -144.608 + 53 146.901 579 2 0 -25.532 -64.1912 -145.85 + 53 83.2175 578 2 0 -25.5169 -64.25 -146.184 + 53 105.645 774 1 1 -25.0652 -68.8674 -174.45 + 53 120.606 557 1 0 -25.0355 -68.625 -175.85 + 53 262.849 775 0 1 -24.8583 -63.1729 -204.45 + 53 12.7187 592 0 0 -25.0102 -61.4918 -205.85 + 53 21.0973 595 0 0 -25.0747 -61.05 -206.182 + 53 174.583 751 1 1 -29.818 -69.4711 -174.45 + 53 236.222 723 0 1 -35.3261 -85.4906 -204.45 + 53 65.71 463 0 0 -34.9703 -87.2677 -205.85 + 53 81.9299 462 0 0 -34.9297 -87.45 -206 + 53 33.2937 461 0 0 -34.8679 -87.6503 -206.17 +Number of digits in this event: 106 +Using G4ParticleGun... +Particle energy: 8.48611 LIN +Particle: e- +Event: 54 +Number of tracker hits in this event: 17 + 54 115.032 474 7 1 -85.191 121.63 5.55 + 54 133.19 1507 7 0 -85.1905 121.63 4.15 + 54 108.389 474 6 1 -85.1825 121.638 -24.45 + 54 193.659 1507 6 0 -85.1801 121.639 -25.85 + 54 136.813 474 5 1 -85.1292 121.647 -54.45 + 54 136.22 1507 5 0 -85.1256 121.646 -55.85 + 54 110.043 475 4 1 -85.0498 121.632 -84.45 + 54 141.532 1507 4 0 -85.0453 121.631 -85.85 + 54 212.414 475 3 1 -84.9546 121.611 -114.45 + 54 201.447 1507 3 0 -84.9503 121.61 -115.85 + 54 106.842 475 2 1 -84.8617 121.584 -144.45 + 54 328.103 1507 2 0 -84.8562 121.583 -145.85 + 54 110.451 476 1 1 -84.7425 121.568 -174.45 + 54 111.086 1507 1 0 -84.7377 121.567 -175.85 + 54 318.611 477 0 1 -84.6401 121.555 -204.45 + 54 124.106 1507 0 0 -84.6353 121.555 -205.85 + 54 0.339658 347 0 1 -110.55 158.462 -204.669 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 5.81965 LIN +Particle: e- +Event: 55 +Number of tracker hits in this event: 103 + 55 229.221 651 11 1 -49.7312 -47.1293 125.55 + 55 123.828 664 11 0 -49.7294 -47.1292 124.15 + 55 216.273 651 10 1 -49.6987 -47.1348 95.55 + 55 246.662 664 10 0 -49.6992 -47.1346 94.15 + 55 123.109 651 9 1 -49.7041 -47.1259 65.55 + 55 104.987 664 9 0 -49.7026 -47.1251 64.15 + 55 136.587 651 8 1 -49.6705 -47.1172 35.55 + 55 207.362 664 8 0 -49.6695 -47.1171 34.15 + 55 129.595 651 7 1 -49.6536 -47.1257 5.55 + 55 107.693 664 7 0 -49.652 -47.1292 4.15 + 55 203.611 652 6 1 -49.5989 -47.195 -24.45 + 55 110.552 664 6 0 -49.593 -47.1985 -25.85 + 55 112.442 652 5 1 -49.4657 -47.262 -54.45 + 55 158.944 663 5 0 -49.4518 -47.2618 -55.85 + 55 143.798 654 4 1 -49.1645 -47.3008 -84.45 + 55 143.228 663 4 0 -49.1499 -47.2973 -85.85 + 55 129.808 656 3 1 -48.8493 -47.2062 -114.45 + 55 186.956 664 3 0 -48.84 -47.203 -115.85 + 55 258.563 656 2 1 -48.6706 -47.1185 -144.45 + 55 414.945 664 2 0 -48.6676 -47.1145 -145.85 + 55 117.184 657 1 1 -48.5891 -47.0162 -174.45 + 55 114.512 665 1 0 -48.5889 -47.0025 -175.85 + 55 138.783 657 0 1 -48.5865 -46.711 -204.45 + 55 128.684 666 0 0 -48.5791 -46.6997 -205.85 + 55 132.676 651 6 1 -49.65 -47.057 -24.6654 + 55 124.875 674 6 0 -49.7511 -45.2374 -25.8512 + 55 56.1845 675 6 0 -49.7519 -45.05 -25.9766 + 55 65.3269 676 6 0 -49.7229 -44.85 -25.9551 + 55 55.3803 677 6 0 -49.6379 -44.6491 -25.9502 + 55 17.6757 678 6 0 -49.5699 -44.45 -25.8835 + 55 36.434 654 6 1 -49.1081 -42.4779 -24.85 + 55 103.47 655 6 1 -49.05 -42.3748 -24.7515 + 55 481.348 651 1 1 -49.7068 -47.3773 -174.45 + 55 335.123 663 1 0 -49.7085 -47.3788 -175.85 + 55 269.396 651 0 1 -49.7296 -47.4069 -204.45 + 55 102.971 663 0 0 -49.7302 -47.4085 -205.85 + 55 134.287 654 0 1 -49.1202 -47.6791 -204.45 + 55 321.937 661 0 0 -49.1733 -47.7273 -205.85 + 55 132.59 1121 4 1 44.25 -81.6982 -84.7253 + 55 200.759 651 5 1 -49.65 -47.1244 -54.7315 + 55 9.35494 649 8 1 -50.2173 -46.3957 35.15 + 55 96.0412 670 8 0 -51.5614 -45.9031 34.15 + 55 87.8905 664 4 0 -49.5228 -47.1058 -85.85 + 55 101.7 617 3 1 -56.4583 -48.9618 -114.45 + 55 32.584 616 3 1 -56.65 -48.9093 -114.743 + 55 334.47 656 3 0 -57.4941 -48.7164 -115.85 + 55 98.5119 657 3 0 -57.7491 -48.65 -116.068 + 55 156.75 297 2 1 -120.662 -31.5998 -144.45 + 55 156.19 745 2 0 -120.946 -31.0108 -145.85 + 55 148.461 836 2 0 -139.981 -12.7896 -146.25 + 55 175.721 198 2 1 -140.395 -13.1361 -144.85 + 55 136.334 197 2 1 -140.55 -13.4182 -144.665 + 55 298.747 196 2 1 -140.75 -13.4986 -144.837 + 55 272.459 651 2 1 -49.723 -47.0994 -144.45 + 55 136.223 652 1 1 -49.5091 -47.266 -174.45 + 55 127.115 653 0 1 -49.37 -47.5131 -204.45 + 55 123.203 662 0 0 -49.3554 -47.5194 -205.85 + 55 112.607 664 1 0 -49.699 -47.0729 -175.85 + 55 109.255 665 0 0 -49.7472 -47.049 -205.85 + 55 41.5497 826 0 0 10.546 -14.85 -206.166 + 55 100.877 827 0 0 10.8269 -14.65 -205.974 + 55 0.30494 669 11 0 -49.0288 -46.2464 124.15 + 55 22.5873 665 11 1 -47.014 -44.1725 125.15 + 55 23.8938 680 11 0 -46.4199 -44.0489 124.15 + 55 106.069 679 11 0 -46.3846 -44.0501 124.118 + 55 194.857 652 10 1 -49.65 -47.2442 95.5223 + 55 66.4066 653 10 1 -49.45 -47.6414 95.2067 + 55 60.2943 646 10 0 -46.4075 -50.6681 94.1498 + 55 202.899 645 10 0 -46.2127 -50.85 94.0874 + 55 278.072 644 10 0 -45.9698 -51.0502 93.9676 + 55 53.9069 643 10 0 -45.7154 -51.25 93.8106 + 55 0.723781 591 10 0 -11.7913 -61.6534 93.75 + 55 73.8823 592 10 0 -11.7931 -61.65 93.7536 + 55 104.265 593 10 0 -11.8807 -61.45 93.9886 + 55 4.47966 594 10 0 -11.957 -61.25 94.1395 + 55 139.97 836 10 1 -12.7058 -58.9781 95.1503 + 55 101.772 835 10 1 -12.85 -58.6946 95.3147 + 55 86.1934 834 10 1 -13.05 -58.405 95.4811 + 55 238.541 826 10 1 -14.65 -58.7121 95.2476 + 55 121.893 1539 8 0 -126.416 127.95 33.9249 + 55 21.47 655 10 0 -49.119 -48.9751 94.15 + 55 80.4753 654 10 0 -49.1007 -49.0502 94.098 + 55 261.166 653 10 0 -49.0527 -49.25 93.9746 + 55 72.0484 652 10 0 -48.9631 -49.45 93.8771 + 55 103.353 651 10 0 -48.8439 -49.65 93.8054 + 55 99.3981 689 9 1 -42.2233 -50.612 65.55 + 55 135.995 690 9 1 -42.05 -50.8266 65.3216 + 55 36.5479 639 9 0 -40.9491 -52.1525 64.15 + 55 105.849 638 9 0 -40.8689 -52.25 64.0457 + 55 26.9842 637 9 0 -40.699 -52.45 63.8113 + 55 78.4834 449 9 0 -32.7978 -90.2745 63.75 + 55 77.0483 448 9 0 -32.8909 -90.35 63.8585 + 55 138.224 447 9 0 -32.9727 -90.55 64.0399 + 55 98.0147 746 9 1 -30.813 -90.6822 65.1502 + 55 193.682 444 9 0 -29.9391 -91.1797 64.15 + 55 318.965 866 8 1 -6.70691 -81.5474 35.5499 + 55 39.0371 867 8 1 -6.65 -81.6117 35.5009 + 55 86.8828 492 8 0 -6.35525 -81.6141 34.15 + 55 139.813 491 8 0 -6.23148 -81.65 33.9912 + 55 28.0503 490 8 0 -5.97849 -81.8502 33.7846 + 55 87.5184 865 8 1 -6.85 -81.5213 35.338 + 55 56.9968 494 8 0 -8.07729 -81.1351 34.1498 + 55 69.9485 495 8 0 -8.18883 -81.05 33.982 +Number of digits in this event: 53 +Using G4ParticleGun... +Particle energy: 1.43244 LIN +Particle: e- +Event: 56 +Number of tracker hits in this event: 31 + 56 155.461 867 10 1 -6.62475 97.0651 95.55 + 56 105.786 1384 10 0 -6.62224 97.0652 94.15 + 56 129.228 867 9 1 -6.59441 97.0454 65.55 + 56 177.89 1384 9 0 -6.59625 97.0496 64.15 + 56 132.554 866 8 1 -6.65125 97.1062 35.55 + 56 114.456 1384 8 0 -6.64636 97.1048 34.15 + 56 332.945 867 7 1 -6.53019 97.0567 5.55 + 56 105.823 1384 7 0 -6.52395 97.0494 4.15 + 56 120.672 868 6 1 -6.39766 96.9248 -24.45 + 56 121.23 1383 6 0 -6.39458 96.9145 -25.85 + 56 221.292 868 5 1 -6.34681 96.7058 -54.45 + 56 104.657 1382 5 0 -6.34107 96.696 -55.85 + 56 221.226 869 4 1 -6.23568 96.4916 -84.45 + 56 114.113 1381 4 0 -6.23387 96.4918 -85.85 + 56 108.113 869 3 1 -6.20902 96.4937 -114.45 + 56 172.987 1381 3 0 -6.20298 96.5004 -115.85 + 56 221.304 869 2 1 -6.09721 96.6373 -144.45 + 56 113.752 1382 2 0 -6.09644 96.6417 -145.85 + 56 132.403 869 1 1 -6.0694 96.7335 -174.45 + 56 133.105 1382 1 0 -6.0604 96.7229 -175.85 + 56 119.704 870 0 1 -5.93773 96.4744 -204.45 + 56 164.315 1381 0 0 -5.93876 96.4525 -205.85 + 56 36.8355 1431 0 0 -16.563 106.406 -205.85 + 56 210.738 868 4 1 -6.25 96.4823 -84.4719 + 56 3.67614 867 5 1 -6.45 96.8856 -54.834 + 56 161.557 1386 5 0 -6.60654 97.4664 -55.8502 + 56 35.2128 1278 5 0 8.4574 75.6507 -56.2498 + 56 230.219 1277 5 0 8.43588 75.6499 -56.226 + 56 30.2619 866 7 1 -6.65 97.0765 5.33616 + 56 302.223 1383 7 0 -6.45237 96.8563 4.15 + 56 126.586 1377 5 0 -8.14269 95.6551 -55.85 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 7.70833 LIN +Particle: e- +Event: 57 +Number of tracker hits in this event: 124 + 57 96.9015 783 10 1 -23.3681 95.6207 95.55 + 57 154.399 1377 10 0 -23.3679 95.6207 94.15 + 57 124.508 783 9 1 -23.3605 95.6202 65.55 + 57 94.5894 1377 9 0 -23.3605 95.6199 64.15 + 57 116.712 783 8 1 -23.3628 95.6117 35.55 + 57 106.46 1377 8 0 -23.3631 95.6109 34.15 + 57 105.269 783 7 1 -23.3677 95.5941 5.55 + 57 113.091 1377 7 0 -23.3675 95.5929 4.15 + 57 185.414 783 6 1 -23.3675 95.5635 -24.45 + 57 140.678 1377 6 0 -23.367 95.5619 -25.85 + 57 113.735 783 5 1 -23.3547 95.5316 -54.45 + 57 337.469 1376 5 0 -23.3547 95.5304 -55.85 + 57 385.928 783 4 1 -23.3559 95.5031 -84.45 + 57 512.636 1376 4 0 -23.3552 95.5028 -85.85 + 57 182.298 783 3 1 -23.3423 95.4956 -114.45 + 57 150.673 1376 3 0 -23.3422 95.4948 -115.85 + 57 141.672 783 2 1 -23.3388 95.4688 -144.45 + 57 113.657 1376 2 0 -23.3385 95.4679 -145.85 + 57 440.609 783 1 1 -23.3319 95.4491 -174.45 + 57 352.664 1376 1 0 -23.332 95.4464 -175.85 + 57 313.549 783 0 1 -23.3359 95.3953 -204.45 + 57 375.254 1376 0 0 -23.3361 95.3929 -205.85 + 57 44.0964 77 3 1 -164.634 169.896 -114.45 + 57 80.8301 76 3 1 -164.75 169.897 -114.53 + 57 181.819 75 3 1 -164.95 169.971 -114.641 + 57 295.454 74 3 1 -165.15 170.039 -114.617 + 57 130.628 1755 3 0 -164.27 171.294 -115.85 + 57 114.831 1756 3 0 -164.132 171.35 -115.987 + 57 157.333 784 0 1 -23.1502 95.407 -204.45 + 57 88.6271 1377 3 0 -23.5579 95.6331 -115.851 + 57 84.5665 753 2 1 -29.4042 100.953 -144.45 + 57 121.289 752 2 1 -29.4501 100.936 -144.527 + 57 192.622 1402 2 0 -30.1109 100.723 -145.85 + 57 58.1873 1238 2 0 -55.0972 67.8096 -146.249 + 57 76.1204 1237 2 0 -55.1318 67.65 -146.063 + 57 183.487 625 2 1 -54.9538 66.5261 -144.85 + 57 436.775 626 2 1 -54.85 66.087 -144.472 + 57 171.171 1275 3 0 -12.8668 75.1341 -116.25 + 57 1.77862 841 3 1 -11.6554 75.4936 -114.85 + 57 100.421 842 3 1 -11.6497 75.4955 -114.842 + 57 77.3287 843 3 1 -11.45 75.5079 -114.632 + 57 14.2933 844 3 1 -11.2499 75.4551 -114.466 + 57 115.621 796 3 1 -20.7897 94.2892 -114.45 + 57 81.7047 1371 3 0 -20.8111 94.4768 -115.85 + 57 2.27723 792 2 1 -21.4515 100.225 -144.45 + 57 115.014 793 2 1 -21.4499 100.229 -144.457 + 57 7.78005 1404 2 0 -21.1672 101.133 -145.85 + 57 81.9767 1405 2 0 -21.1621 101.15 -145.876 + 57 28.9843 1406 2 0 -21.1076 101.35 -146.166 + 57 168.021 825 1 1 -14.9103 119.766 -174.45 + 57 53.2321 826 1 1 -14.8498 119.846 -174.647 + 57 15.1197 1500 1 0 -14.5423 120.327 -175.85 + 57 112.263 1501 1 0 -14.5272 120.35 -175.908 + 57 32.5224 855 0 1 -8.87006 131.079 -204.45 + 57 73.4455 856 0 1 -8.85 131.106 -204.575 + 57 134.424 1556 0 0 -8.62467 131.419 -205.85 + 57 13.8611 787 3 1 -22.6394 94.5241 -114.45 + 57 127.17 786 3 1 -22.65 94.5159 -114.479 + 57 107.593 1369 3 0 -23.1416 94.1413 -115.85 + 57 17.8634 736 2 1 -32.8379 85.5126 -144.45 + 57 130.982 735 2 1 -32.85 85.5124 -144.506 + 57 144.896 1327 2 0 -33.1393 85.4829 -145.85 + 57 11.5489 705 1 1 -39.0442 85.6688 -174.45 + 57 137.446 704 1 1 -39.0501 85.6646 -174.47 + 57 134.98 1325 1 0 -39.8771 85.2263 -175.85 + 57 66.7887 571 0 1 -65.7065 73.4739 -204.45 + 57 58.98 572 0 1 -65.65 73.4748 -204.597 + 57 417.807 1267 0 0 -65.1326 73.5838 -205.85 + 57 373.463 663 0 1 -47.3783 89.7849 -204.45 + 57 30.5357 662 0 1 -47.45 89.7987 -204.747 + 57 118.561 1348 0 0 -47.742 89.8191 -205.85 + 57 84.7223 1055 0 0 93.2104 31.25 -206.248 + 57 123.208 1350 0 0 -47.532 90.1939 -205.85 + 57 118.542 1358 1 0 -131.663 91.9161 -176.25 + 57 115.963 782 4 1 -23.4635 95.4627 -84.45 + 57 143.088 774 3 1 -25.1687 95.1295 -114.451 + 57 376.064 1374 3 0 -25.2837 95.1404 -115.85 + 57 324.594 757 2 1 -28.5825 95.176 -144.45 + 57 10.0563 756 2 1 -28.65 95.1864 -144.813 + 57 158.579 1375 2 0 -28.8473 95.2232 -145.85 + 57 303.091 731 1 1 -33.7709 96.7 -174.45 + 57 115.844 1383 1 0 -33.9744 96.8742 -175.85 + 57 141.959 709 0 1 -38.0647 100.173 -204.45 + 57 139.403 1402 0 0 -38.1561 100.608 -205.85 + 57 115.832 1493 0 0 -41.5673 118.784 -206.25 + 57 3.36832 1494 0 0 -41.5405 118.95 -205.869 + 57 39.5956 692 0 1 -41.4728 119.304 -204.85 + 57 88.7416 693 0 1 -41.45 119.359 -204.706 + 57 114.49 694 0 1 -41.1207 119.709 -204.45 + 57 114.76 1498 0 0 -41.2109 119.81 -205.85 + 57 199.499 245 10 1 -131.072 54.6883 95.15 + 57 124.797 766 2 1 -26.7889 95.3396 -144.45 + 57 98.4038 765 2 1 -26.85 95.2741 -144.809 + 57 270.952 1374 2 0 -27.0564 95.0921 -145.85 + 57 89.6103 1354 1 0 -33.8877 91.0097 -175.85 + 57 41.0949 1353 1 0 -33.9142 90.95 -176.113 + 57 160.27 722 0 1 -35.5431 83.8034 -204.45 + 57 5.00508 1315 0 0 -35.7845 83.0613 -205.85 + 57 160.434 1314 0 0 -35.7883 83.05 -205.871 + 57 105.949 1377 2 0 -27.1234 95.6035 -145.85 + 57 122.815 733 1 1 -33.3966 99.845 -174.45 + 57 105.97 1397 1 0 -33.0001 99.7188 -175.85 + 57 31.4334 780 0 1 -23.8967 95.9908 -204.45 + 57 83.0111 781 0 1 -23.85 95.9889 -204.562 + 57 68.4761 1379 0 0 -23.3268 95.9665 -205.85 + 57 65.4978 1378 0 0 -23.2435 95.95 -206.09 + 57 140.371 780 2 1 -23.8758 95.0262 -144.45 + 57 103.477 777 1 1 -24.5643 94.6388 -174.45 + 57 116.677 1372 1 0 -24.6146 94.669 -175.85 + 57 167.123 772 0 1 -25.6066 95.6571 -204.45 + 57 123.297 1377 0 0 -25.6612 95.663 -205.85 + 57 105.997 785 4 1 -23.0006 95.6916 -84.45 + 57 97.745 1378 4 0 -22.9459 95.7541 -85.85 + 57 112.23 788 3 1 -22.3135 97.283 -114.451 + 57 209.636 1386 3 0 -22.2579 97.4376 -115.85 + 57 126.846 794 2 1 -21.0882 100.051 -144.45 + 57 211.02 1400 2 0 -20.9604 100.216 -145.85 + 57 149.339 808 1 1 -18.4053 103.876 -174.45 + 57 55.8185 1419 1 0 -18.3512 104.118 -175.851 + 57 78.2727 1420 1 0 -18.3446 104.15 -176.033 + 57 494.645 814 0 1 -17.1894 109.004 -204.45 + 57 123.373 1445 0 0 -17.2373 109.288 -205.85 + 57 18.987 1446 0 0 -17.24 109.35 -206.148 + 57 121.86 813 0 1 -17.25 108.938 -204.608 +Number of digits in this event: 59 +Using G4ParticleGun... +Particle energy: 3.07355 LIN +Particle: e- +Event: 58 +Number of tracker hits in this event: 68 + 58 147.701 1383 10 1 96.9223 41.2863 95.55 + 58 122.401 1106 10 0 96.9258 41.2863 94.15 + 58 120.719 1384 9 1 96.9966 41.2779 65.55 + 58 113.89 1106 9 0 97.0001 41.2748 64.15 + 58 120.382 1384 8 1 97.0772 41.2025 35.55 + 58 118.397 1105 8 0 97.0783 41.2003 34.15 + 58 229.265 1384 7 1 97.094 41.1515 5.55 + 58 116.6 1105 7 0 97.0921 41.1512 4.15 + 58 155.427 1384 6 1 97.048 41.1509 -24.45 + 58 174.145 1105 6 0 97.0454 41.1483 -25.85 + 58 112.524 1384 5 1 96.9919 41.0925 -54.45 + 58 165.562 1105 5 0 96.9945 41.0911 -55.85 + 58 130.915 1384 4 1 97.0581 41.0524 -84.45 + 58 111.327 1104 4 0 97.0597 41.0497 -85.85 + 58 174.207 1384 3 1 97.091 41.0031 -114.45 + 58 219.752 1104 3 0 97.1047 41.0072 -115.85 + 58 170.49 1386 2 1 97.4006 41.1013 -144.45 + 58 113.228 1105 2 0 97.4007 41.1163 -145.85 + 58 117.959 1386 1 1 97.4506 41.4362 -174.45 + 58 127.964 1107 1 0 97.4444 41.4706 -175.85 + 58 119.487 1386 0 1 97.4697 42.2118 -204.45 + 58 234.532 1110 0 0 97.4932 42.2253 -205.85 + 58 308.838 1385 0 1 97.1752 42.0922 -204.45 + 58 31.0804 1384 0 1 97.1238 42.2647 -204.45 + 58 198.399 1106 0 0 97.6218 41.446 -205.85 + 58 59.483 1758 2 1 171.75 -92.0166 -144.53 + 58 51.3162 1127 3 0 103.119 45.4923 -116.25 + 58 254.956 1126 3 0 103.162 45.4498 -116.182 + 58 238.186 1382 0 1 96.5868 40.783 -204.45 + 58 330.452 1103 0 0 96.5878 40.7614 -205.85 + 58 106.967 1008 14 0 -29.6215 21.7047 213.75 + 58 80.4175 1007 14 0 -29.614 21.65 213.903 + 58 309.91 1387 1 1 97.5872 40.6774 -174.45 + 58 367.613 1103 1 0 97.5531 40.6779 -175.85 + 58 102.585 1383 0 1 96.8191 40.6835 -204.45 + 58 111.741 1399 0 1 100.115 41.6607 -204.45 + 58 121.632 1107 0 0 100.187 41.5991 -205.85 + 58 130.984 1104 7 0 96.8384 40.9161 4.15 + 58 3.32287 1103 7 0 96.756 40.8499 3.77678 + 58 82.0424 1355 6 1 91.2506 35.3583 -24.45 + 58 136.556 1354 6 1 91.1499 35.5545 -24.5409 + 58 132.714 1353 6 1 90.95 35.9035 -24.7089 + 58 0.193341 1090 6 0 90.05 38.2489 -25.9222 + 58 70.1047 1091 6 0 90.0495 38.25 -25.9227 + 58 139.322 1092 6 0 89.9588 38.4502 -26.025 + 58 57.4973 1093 6 0 89.8615 38.6502 -26.1468 + 58 153.519 1250 5 1 70.1445 80.8466 -54.4507 + 58 7.07585 1309 5 0 69.938 82.0322 -55.85 + 58 68.6199 1310 5 0 69.9352 82.0501 -55.8715 + 58 95.8641 1311 5 0 69.8766 82.25 -56.0682 + 58 7.86538 1312 5 0 69.8554 82.45 -56.2382 + 58 30.8371 1797 9 0 90.1728 179.642 63.75 + 58 58.9694 1796 9 0 90.2346 179.55 63.7786 + 58 84.0853 1795 9 0 90.3731 179.35 63.8279 + 58 66.7915 1794 9 0 90.5501 179.15 63.8281 + 58 44.8809 1793 9 0 90.6455 178.95 63.854 + 58 120.802 1792 9 0 90.6956 178.75 63.8844 + 58 71.5828 1791 9 0 90.6963 178.55 63.9233 + 58 62.6461 1790 9 0 90.6369 178.35 63.9805 + 58 141.493 1789 9 0 90.5283 178.15 64.0957 + 58 14.6956 1349 9 1 89.8799 177.419 65.1502 + 58 97.1407 1348 9 1 89.85 177.393 65.2015 + 58 146.971 1106 7 0 97.1357 41.3855 4.15 + 58 60.0092 1107 7 0 97.1659 41.45 3.93747 + 58 93.9442 1434 6 1 107.135 56.374 -24.45 + 58 17.5513 1433 6 1 106.95 56.3098 -24.7833 + 58 100.852 1181 6 0 106.639 56.4023 -25.85 + 58 4.73121 1182 6 0 106.524 56.45 -26.2228 Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 3.9507 LIN +Particle energy: 9.82464 LIN Particle: e- -Event: 88 -Number of tracker hits in this event: 79 - 88 115.945 784 11 1 -23.1653 -66.9302 125.55 - 88 108.4 565 11 0 -23.1673 -66.9297 124.15 - 88 122.931 784 10 1 -23.2093 -66.933 95.55 - 88 107.225 565 10 0 -23.2121 -66.9318 94.15 - 88 110.103 783 9 1 -23.2706 -66.9136 65.55 - 88 107.471 565 9 0 -23.2721 -66.9107 64.15 - 88 186.259 783 8 1 -23.299 -66.8512 35.55 - 88 74.2517 565 8 0 -23.304 -66.8502 34.15 - 88 50.597 566 8 0 -23.3049 -66.85 33.897 - 88 118.162 783 7 1 -23.394 -66.8231 5.55 - 88 135.104 566 7 0 -23.3968 -66.825 4.15 - 88 93.8898 782 6 1 -23.4542 -66.8773 -24.45 - 88 184.784 565 6 0 -23.4573 -66.8809 -25.85 - 88 105.017 782 5 1 -23.5083 -66.946 -54.45 - 88 113.627 565 5 0 -23.5097 -66.9488 -55.85 - 88 134.13 782 4 1 -23.5364 -67.0112 -84.45 - 88 142.556 565 4 0 -23.5372 -67.0259 -85.85 - 88 357.795 782 3 1 -23.5375 -67.3293 -114.45 - 88 120.407 563 3 0 -23.5384 -67.3419 -115.85 - 88 271.107 783 2 1 -23.4078 -67.6057 -144.45 - 88 200.358 562 2 0 -23.4041 -67.6185 -145.85 - 88 319.576 783 1 1 -23.357 -67.8612 -174.45 - 88 124.194 560 1 0 -23.3572 -67.8734 -175.85 - 88 107.923 783 0 1 -23.3517 -68.127 -204.45 - 88 129.252 559 0 0 -23.3499 -68.1416 -205.85 - 88 117.628 1217 7 0 137.523 63.45 3.95357 - 88 74.3117 1216 7 0 137.627 63.45 4.06056 - 88 23.4258 835 6 1 -13.0222 7.64116 -24.4501 - 88 131.844 834 6 1 -13.0503 7.60947 -24.5036 - 88 100.029 833 6 1 -13.2501 7.62079 -24.7285 - 88 230.024 945 6 0 -14.4421 9.2068 -25.8502 - 88 123.174 946 6 0 -14.463 9.25015 -25.9223 - 88 16.3061 561 2 0 -23.3274 -67.65 -146.183 - 88 43.9022 848 1 1 -10.429 -62.2079 -174.45 - 88 311.23 847 1 1 -10.4535 -62.0313 -174.45 - 88 55.3586 846 1 1 -10.65 -62.1494 -174.466 - 88 521.629 564 3 0 -23.4547 -67.1388 -115.85 - 88 121.384 786 2 1 -22.7919 -69.8733 -144.45 - 88 88.5669 549 2 0 -23.0137 -70.2235 -145.85 - 88 503.25 548 2 0 -23.0315 -70.25 -145.951 - 88 112.71 784 2 1 -23.2342 -67.0648 -144.45 - 88 121.739 564 2 0 -23.2137 -67.0618 -145.85 - 88 110.199 786 1 1 -22.7169 -67.0243 -174.45 - 88 143.625 565 1 0 -22.6575 -67.0102 -175.85 - 88 95.4237 793 0 1 -21.3847 -66.6161 -204.45 - 88 124.861 567 0 0 -21.2946 -66.6308 -205.85 - 88 120.836 783 6 1 -23.45 -66.8798 -24.5341 - 88 46.5519 566 6 0 -23.2668 -66.85 -26.0773 - 88 79.9337 784 8 1 -23.2499 -66.8402 35.5155 - 88 50.2734 164 3 0 56.2379 -147.263 -116.25 - 88 199.929 1465 1 0 5.7977 113.15 -176.24 - 88 243.221 1466 1 0 5.88219 113.35 -176.111 - 88 256.033 1464 1 0 6.50598 113.15 -176.186 - 88 254.012 784 3 1 -23.1694 -66.8799 -114.45 - 88 20.9534 805 2 1 -19.0162 -69.1502 -144.45 - 88 95.0984 804 2 1 -19.05 -69.1662 -144.522 - 88 117.69 552 2 0 -19.5524 -69.4696 -145.85 - 88 68.3515 744 1 1 -31.0843 -77.0645 -174.45 - 88 90.2586 743 1 1 -31.2506 -77.1329 -174.594 - 88 31.2735 742 1 1 -31.45 -77.2292 -174.781 - 88 33.8328 511 1 0 -32.4447 -77.8006 -175.85 - 88 134.097 510 1 0 -32.5288 -77.85 -175.936 - 88 30.8422 500 0 1 -80.0035 -96.4699 -204.45 - 88 160.062 499 0 1 -80.0502 -96.5479 -204.539 - 88 2.31821 412 0 0 -80.815 -97.7435 -205.85 - 88 120.667 411 0 0 -80.8195 -97.75 -205.857 - 88 71.3229 410 0 0 -80.9465 -97.95 -206.06 - 88 16.9531 628 1 0 -44.6462 -54.2952 -176.25 - 88 87.43 629 1 0 -44.6522 -54.25 -176.214 - 88 54.7398 630 1 0 -44.701 -54.0498 -175.993 - 88 139.408 679 1 1 -44.1812 -53.6494 -174.85 - 88 22.2366 565 3 0 -23.1675 -67.0401 -115.85 - 88 20.0484 682 1 1 -43.6122 -70.7281 -174.45 - 88 105.16 681 1 1 -43.65 -70.7447 -174.522 - 88 124.417 544 1 0 -44.4678 -71.0725 -175.85 - 88 16.2325 595 0 1 -61.0111 -77.9173 -204.45 - 88 119.074 594 0 1 -61.05 -77.9277 -204.512 - 88 15.1749 593 0 1 -61.25 -77.9669 -204.803 - 88 114.602 509 0 0 -61.9878 -78.095 -205.85 -Number of digits in this event: 36 +Event: 59 +Number of tracker hits in this event: 49 + 59 108.581 725 9 1 -34.9282 119.226 65.55 + 59 128.098 1495 9 0 -34.9291 119.226 64.15 + 59 102.064 725 8 1 -34.9486 119.218 35.55 + 59 249.342 1495 8 0 -34.9492 119.217 34.15 + 59 270.021 725 7 1 -34.9623 119.201 5.55 + 59 107.227 1495 7 0 -34.9631 119.199 4.15 + 59 118.154 725 6 1 -34.9827 119.167 -24.45 + 59 138.277 1495 6 0 -34.9847 119.166 -25.85 + 59 136.802 725 5 1 -35.0257 119.143 -54.45 + 59 144.834 1494 5 0 -35.0266 119.142 -55.85 + 59 129.025 725 4 1 -35.0448 119.129 -84.45 + 59 161.417 1494 4 0 -35.0458 119.129 -85.85 + 59 107.056 724 3 1 -35.0649 119.122 -114.45 + 59 118.187 1494 3 0 -35.065 119.122 -115.85 + 59 113.765 724 2 1 -35.0646 119.106 -144.45 + 59 231.404 1494 2 0 -35.0652 119.105 -145.85 + 59 399.751 724 1 1 -35.0763 119.072 -174.45 + 59 275.135 1494 1 0 -35.0765 119.07 -175.85 + 59 89.7633 724 0 1 -35.0782 119.036 -204.45 + 59 147.303 1494 0 0 -35.0785 119.033 -205.85 + 59 225.389 865 2 1 -6.90018 14.0314 -144.596 + 59 92.0532 864 2 1 -7.05 13.9301 -144.461 + 59 189.199 863 2 1 -7.25 14.0124 -144.526 + 59 21.8325 862 2 1 -7.45 13.9863 -144.614 + 59 81.278 866 2 1 -6.84482 13.8023 -144.45 + 59 114.501 867 2 1 -6.64982 13.8496 -144.565 + 59 114.212 868 2 1 -6.45 13.8261 -144.553 + 59 150.718 869 2 1 -6.25 13.8235 -144.48 + 59 103.492 870 2 1 -6.04984 13.9165 -144.51 + 59 14.2183 1131 6 0 -45.2671 46.45 -26.0982 + 59 17.2186 125 7 0 17.6469 -154.95 3.90403 + 59 3.90048 124 7 0 18.0013 -155.15 4.14173 + 59 226.867 994 7 1 18.8965 -156.001 5.15004 + 59 24.677 921 4 0 -72.8912 4.25337 -86.25 + 59 215.591 920 4 0 -72.8612 4.24998 -86.1949 + 59 94.8464 539 4 1 -72.168 4.01664 -84.85 + 59 225.676 540 4 1 -72.05 4.00556 -84.6887 + 59 141.053 909 4 1 1.89951 154.809 -84.85 + 59 148.593 910 4 1 2.05 154.812 -84.6177 + 59 407.083 1593 7 1 138.926 61.0305 5.54967 + 59 137.475 725 1 1 -35.05 119.042 -174.784 + 59 170.994 723 1 1 -35.25 118.859 -174.758 + 59 270.816 725 0 1 -34.9746 118.774 -204.45 + 59 142.78 1493 0 0 -34.9625 118.772 -205.85 + 59 121.034 1493 1 0 -34.7436 118.889 -175.85 + 59 218.282 759 0 1 -28.2023 114.504 -204.45 + 59 170.117 758 0 1 -28.25 114.454 -204.644 + 59 99.9258 1469 0 0 -28.5923 114.133 -205.85 + 59 139.154 724 7 1 -35.05 119.043 5.39763 +Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 7.38188 LIN +Particle energy: 1.62748 LIN Particle: e- -Event: 89 -Number of tracker hits in this event: 83 - 89 116.804 1068 10 1 33.7825 92.0631 95.55 - 89 117.023 1359 10 0 33.782 92.0635 94.15 - 89 158.962 1068 9 1 33.7692 92.0694 65.55 - 89 143.396 1359 9 0 33.77 92.0694 64.15 - 89 115.703 1068 8 1 33.7853 92.067 35.55 - 89 104.3 1359 8 0 33.785 92.0681 34.15 - 89 103.121 1068 7 1 33.7792 92.0912 5.55 - 89 179.396 1359 7 0 33.779 92.0929 4.15 - 89 176.722 1068 6 1 33.7786 92.1274 -24.45 - 89 117.453 1359 6 0 33.7781 92.1292 -25.85 - 89 111.105 1068 5 1 33.7699 92.1726 -54.45 - 89 126.105 1360 5 0 33.7699 92.1746 -55.85 - 89 395.359 1068 4 1 33.7744 92.222 -84.45 - 89 152.374 1360 4 0 33.7735 92.2249 -85.85 - 89 141.691 1068 3 1 33.7532 92.2815 -114.45 - 89 129.737 1360 3 0 33.7525 92.2836 -115.85 - 89 140.879 1068 2 1 33.7407 92.3235 -144.45 - 89 321.344 1360 2 0 33.7406 92.3261 -145.85 - 89 115.718 1068 1 1 33.7362 92.3783 -174.45 - 89 105.098 1361 1 0 33.7359 92.3822 -175.85 - 89 132.987 1068 0 1 33.7275 92.4646 -204.45 - 89 110.801 1361 0 0 33.7263 92.4696 -205.85 - 89 152.204 1569 0 1 133.964 19.2099 -204.45 - 89 142.634 995 0 0 134.078 19.0588 -205.85 - 89 51.4236 1711 5 0 148.468 162.441 -56.25 - 89 294.541 1359 4 0 33.757 92.1312 -85.85 - 89 239.007 1073 3 1 34.7986 93.0776 -114.45 - 89 119.684 1364 3 0 34.826 93.1278 -115.85 - 89 115.901 1076 2 1 35.392 94.1402 -144.45 - 89 105.531 1370 2 0 35.4252 94.2061 -145.85 - 89 118.031 1080 1 1 36.1974 95.5212 -174.45 - 89 174.964 1377 1 0 36.2476 95.5896 -175.85 - 89 154.776 1086 0 1 37.3778 96.9704 -204.45 - 89 212.668 1384 0 0 37.4297 97.0338 -205.85 - 89 42.4488 1082 3 1 36.602 92.6813 -114.45 - 89 84.629 1083 3 1 36.65 92.6902 -114.613 - 89 130.109 1362 3 0 37.0599 92.7346 -115.85 - 89 36.6027 1136 2 1 47.3812 94.4214 -144.45 - 89 91.1907 1137 2 1 47.45 94.4559 -144.57 - 89 205.853 1373 2 0 48.1082 94.7597 -145.85 - 89 21.7275 1230 1 1 66.2117 99.2235 -174.45 - 89 176.818 1231 1 1 66.25 99.2344 -174.522 - 89 131.184 1396 1 0 66.9438 99.4493 -175.85 - 89 208.146 1313 0 1 82.7217 104.985 -204.45 - 89 88.0124 1314 0 1 82.85 105.001 -204.565 - 89 41.2559 1315 0 1 83.05 105.033 -204.748 - 89 237.011 1425 0 0 84.2856 105.257 -205.85 - 89 110.313 1606 0 0 172.957 141.4 -206.25 - 89 131.614 1607 0 0 173.275 141.55 -206.179 - 89 775.692 1608 0 0 173.737 141.75 -206.081 - 89 346.951 1609 0 0 176.288 141.95 -205.909 - 89 60.9529 1374 2 0 48.1802 94.9503 -146.134 - 89 88.3322 1360 1 0 33.6983 92.1557 -175.85 - 89 40.9021 1060 0 1 32.1033 90.9871 -204.45 - 89 196.907 1059 0 1 32.05 91.0697 -204.483 - 89 283.204 1058 0 1 31.8497 91.5314 -204.617 - 89 65.1109 1371 0 0 31.8045 94.4216 -205.85 - 89 56.3968 1372 0 0 31.7863 94.5502 -205.902 - 89 136.268 1373 0 0 31.7224 94.75 -205.959 - 89 46.6515 1374 0 0 31.6549 94.9501 -206.015 - 89 53.3559 1375 0 0 31.568 95.1508 -206.044 - 89 54.1103 1376 0 0 31.557 95.35 -206.092 - 89 90.3127 1377 0 0 31.5685 95.55 -206.093 - 89 44.8193 1378 0 0 31.5847 95.75 -206.075 - 89 64.3621 1379 0 0 31.579 95.9506 -206.053 - 89 56.5233 1380 0 0 31.5592 96.15 -206.035 - 89 51.254 1381 0 0 31.5284 96.35 -206.013 - 89 62.1808 1382 0 0 31.4757 96.55 -205.967 - 89 58.1959 1383 0 0 31.4201 96.75 -205.929 - 89 50.954 1385 0 0 31.3481 97.15 -205.944 - 89 56.9204 1386 0 0 31.3182 97.35 -205.943 - 89 51.1446 1387 0 0 31.3073 97.55 -205.95 - 89 87.6072 1388 0 0 31.2871 97.7502 -205.982 - 89 80.1571 1389 0 0 31.2647 97.95 -206.015 - 89 62.8673 1390 0 0 31.2305 98.15 -206.044 - 89 61.4308 1391 0 0 31.1883 98.35 -206.052 - 89 46.5317 1392 0 0 31.1853 98.55 -206.044 - 89 63.4988 1393 0 0 31.1966 98.75 -206.052 - 89 49.6009 1394 0 0 31.1882 98.95 -206.096 - 89 56.5784 1395 0 0 31.1914 99.1506 -206.15 - 89 59.176 1396 0 0 31.2289 99.35 -206.17 - 89 61.4948 1397 0 0 31.2662 99.5505 -206.221 - 89 7.82319 1398 0 0 31.2584 99.7502 -206.244 -Number of digits in this event: 34 +Event: 60 +Number of tracker hits in this event: 75 + 60 112.995 796 9 1 -20.8294 125.681 65.55 + 60 150.538 1527 9 0 -20.8306 125.679 64.15 + 60 114.78 795 8 1 -20.854 125.624 35.55 + 60 104.973 1527 8 0 -20.8549 125.623 34.15 + 60 155.957 796 7 1 -20.8434 125.61 5.55 + 60 94.0991 1527 7 0 -20.8405 125.611 4.15 + 60 114.009 796 6 1 -20.7881 125.605 -24.45 + 60 130.719 1527 6 0 -20.7864 125.608 -25.85 + 60 146.782 796 5 1 -20.7397 125.671 -54.45 + 60 182.148 1527 5 0 -20.7312 125.677 -55.85 + 60 112.384 797 4 1 -20.5492 125.783 -84.45 + 60 258.57 1528 4 0 -20.5398 125.794 -85.85 + 60 252.678 798 3 1 -20.3635 126.035 -114.45 + 60 213.277 1529 3 0 -20.3488 126.045 -115.85 + 60 153.438 799 2 1 -20.0676 126.369 -144.45 + 60 101.083 1531 2 0 -20.0564 126.388 -145.85 + 60 111.265 801 1 1 -19.8082 126.759 -174.45 + 60 132.748 1533 1 0 -19.7961 126.769 -175.85 + 60 191.747 802 0 1 -19.5534 126.957 -204.45 + 60 132.541 1534 0 0 -19.5361 126.961 -205.85 + 60 57.8056 1463 8 0 57.4337 112.775 33.75 + 60 83.8131 1462 8 0 57.5379 112.75 34.0334 + 60 146.338 1184 8 1 56.973 115.343 35.1501 + 60 98.0651 800 2 1 -20.05 126.361 -144.479 + 60 121.98 1529 2 0 -19.6774 126.09 -145.85 + 60 153.805 839 1 1 -12.1134 120.501 -174.45 + 60 102.484 840 1 1 -12.05 120.452 -174.517 + 60 80.0067 841 1 1 -11.85 120.305 -174.7 + 60 273.135 1496 1 0 -10.2067 119.544 -175.85 + 60 39.121 1495 1 0 -9.7826 119.35 -176.158 + 60 1.06423 1306 1 0 51.2206 81.2519 -176.25 + 60 141.917 1305 1 0 51.2231 81.25 -176.247 + 60 55.176 1304 1 0 51.4185 81.0498 -176.004 + 60 78.276 1161 1 1 52.316 80.0662 -174.849 + 60 111.556 1162 1 1 52.45 79.9059 -174.67 + 60 73.3386 1179 2 0 48.2479 56.0008 -146.25 + 60 79.4695 1178 2 0 48.2045 55.85 -146.07 + 60 105.09 1139 2 1 47.9265 54.9331 -144.85 + 60 49.1125 1138 2 1 47.8499 54.7019 -144.56 + 60 9.82768 1141 2 1 48.4114 54.3961 -144.45 + 60 91.9567 1142 2 1 48.45 54.366 -144.46 + 60 95.642 1143 2 1 48.65 54.1647 -144.528 + 60 88.7244 1144 2 1 48.85 53.9579 -144.6 + 60 51.7732 1145 2 1 49.0501 53.7465 -144.685 + 60 78.0308 1146 2 1 49.25 53.5795 -144.763 + 60 14.9528 1147 2 1 49.4503 53.4155 -144.83 + 60 75.1142 1155 2 0 51.8512 51.088 -145.85 + 60 129.631 1154 2 0 51.8908 51.05 -145.867 + 60 79.2762 1153 2 0 52.1095 50.85 -145.947 + 60 178.048 1152 2 0 52.3368 50.65 -146.016 + 60 88.0382 1151 2 0 52.5542 50.45 -146.098 + 60 52.7132 1150 2 0 52.7124 50.2499 -146.175 + 60 123.946 1499 1 0 -12.2911 120.13 -175.85 + 60 121.758 805 2 1 -18.9644 120.885 -144.45 + 60 240.543 1503 2 0 -19.1045 120.787 -145.851 + 60 90.9087 779 1 1 -24.2328 118.5 -174.45 + 60 65.8819 778 1 1 -24.25 118.413 -174.643 + 60 70.9636 1488 1 0 -24.4009 117.856 -175.85 + 60 77.8899 1487 1 0 -24.4315 117.75 -176.07 + 60 135.869 757 0 1 -28.6025 104.692 -204.45 + 60 13.9356 1419 0 0 -28.8975 103.967 -205.85 + 60 107.221 1418 0 0 -28.9059 103.95 -205.882 + 60 8.52617 516 4 0 24.4387 -76.65 -86.2153 + 60 288.594 515 4 0 24.5023 -76.85 -86.0653 + 60 47.2761 1399 2 0 -19.983 100.081 -146.25 + 60 150.701 1398 2 0 -20.004 99.95 -146.161 + 60 22.3776 1315 3 0 -11.7811 83.0773 -116.25 + 60 575.229 1314 3 0 -11.7732 83.0498 -116.211 + 60 0.0378832 1313 3 0 -11.6782 82.85 -115.973 + 60 79.3038 780 1 1 -23.9998 118.621 -174.45 + 60 101.463 781 1 1 -23.85 118.876 -174.537 + 60 172.495 782 1 1 -23.6497 119.103 -174.623 + 60 2.09306 1500 1 0 -23.2489 120.344 -175.85 + 60 103.624 1501 1 0 -23.2471 120.35 -175.856 + 60 66.3466 1502 1 0 -23.3023 120.55 -176.092 +Number of digits in this event: 30 Using G4ParticleGun... -Particle energy: 8.08238 LIN +Particle energy: 5.03709 LIN Particle: e- -Event: 90 -Number of tracker hits in this event: 153 - 90 158.303 971 10 1 14.2815 108.577 95.55 - 90 158.214 1442 10 0 14.2811 108.579 94.15 - 90 127.87 971 9 1 14.2673 108.606 65.55 - 90 177.595 1442 9 0 14.2654 108.607 64.15 - 90 419.858 970 8 1 14.2328 108.63 35.55 - 90 362.457 1442 8 0 14.2304 108.632 34.15 - 90 232.753 970 7 1 14.1802 108.656 5.55 - 90 340.914 1442 7 0 14.1759 108.659 4.15 - 90 288.31 970 6 1 14.0861 108.71 -24.45 - 90 125.393 1442 6 0 14.0844 108.71 -25.85 - 90 123.842 970 5 1 14.0554 108.703 -54.45 - 90 112.166 1442 5 0 14.0567 108.702 -55.85 - 90 336.551 970 4 1 14.0742 108.689 -84.45 - 90 599.755 1442 4 0 14.0704 108.692 -85.85 - 90 225.725 969 3 1 14.0163 108.779 -114.45 - 90 204.833 1443 3 0 14.0139 108.785 -115.85 - 90 271.343 969 2 1 13.9521 108.897 -144.45 - 90 109.851 1443 2 0 13.9522 108.904 -145.85 - 90 292.053 969 1 1 13.9634 109.087 -174.45 - 90 111.208 1444 1 0 13.9609 109.095 -175.85 - 90 257.248 969 0 1 13.9013 109.237 -204.45 - 90 278.085 1445 0 0 13.8949 109.241 -205.85 - 90 43.378 970 0 1 14.05 109.174 -204.716 - 90 261.524 1443 0 0 14.6291 108.917 -205.851 - 90 94.332 1442 0 0 14.786 108.75 -206.093 - 90 73.5653 975 0 1 15.114 108.53 -204.85 - 90 178.091 974 0 1 15.05 108.534 -204.588 - 90 614.68 968 0 1 13.8498 109.233 -204.553 - 90 29.3339 1552 0 0 -8.56007 130.648 -206.25 - 90 115 1553 0 0 -8.60423 130.75 -206.184 - 90 21.2292 1554 0 0 -8.66459 130.95 -205.94 - 90 27.0487 855 0 1 -9.02382 131.386 -204.85 - 90 71.6816 854 0 1 -9.05 131.427 -204.747 - 90 315.624 1542 1 0 -16.0867 128.733 -176.25 - 90 146.951 819 1 1 -16.073 128.323 -174.85 - 90 257.927 820 1 1 -16.0499 128.231 -174.594 - 90 112.783 1539 1 0 -16.1844 128.115 -175.85 - 90 81.2233 1540 1 0 -16.3372 128.15 -176.002 - 90 97.0946 1541 1 0 -16.4504 128.35 -176.116 - 90 184.508 1570 1 0 -97.2042 134.32 -176.25 - 90 159.652 1543 1 0 -16.1135 128.75 -176.056 - 90 25.0826 1445 3 0 14.3145 109.313 -115.85 - 90 108.174 1446 3 0 14.3345 109.35 -115.931 - 90 82.9477 1496 2 0 18.8255 119.538 -145.85 - 90 7.00542 1069 3 1 33.9543 100.959 -114.85 - 90 124.701 1455 7 0 -0.491114 111.274 3.75 - 90 178.795 1442 3 0 14.0406 108.727 -115.85 - 90 126.36 1442 2 0 13.9621 108.732 -145.85 - 90 107.153 1442 1 0 13.8726 108.746 -175.85 - 90 149.308 1522 1 0 148.967 124.55 -176.098 - 90 33.1061 1683 2 0 -51.1831 156.95 -146.056 - 90 154.123 937 0 1 7.45 114.042 -204.811 - 90 18.4584 936 0 1 7.45 114.091 -204.694 - 90 133.482 1444 0 0 13.524 109.041 -205.85 - 90 236.394 970 3 1 14.086 109.069 -114.45 - 90 131.868 1444 3 0 14.0285 109.099 -115.85 - 90 116.669 964 2 1 12.9775 109.698 -144.45 - 90 220.686 1447 2 0 12.9237 109.725 -145.85 - 90 117.635 958 1 1 11.7142 110.366 -174.45 - 90 104.892 1451 1 0 11.671 110.417 -175.85 - 90 127.078 953 0 1 10.8119 111.511 -204.45 - 90 123.049 1457 0 0 10.7925 111.566 -205.85 - 90 163.197 1441 6 0 14.0833 108.546 -25.85 - 90 143.04 969 5 1 13.8819 108.435 -54.45 - 90 132.783 1441 5 0 13.8722 108.42 -55.85 - 90 131.002 968 4 1 13.6901 108.108 -84.45 - 90 159.347 1439 4 0 13.6835 108.098 -85.85 - 90 108.817 967 3 1 13.5354 107.886 -114.45 - 90 129.171 1438 3 0 13.5294 107.887 -115.85 - 90 107.581 966 2 1 13.4194 107.879 -144.45 - 90 164.126 1438 2 0 13.4126 107.866 -145.85 - 90 244.703 966 1 1 13.2717 107.58 -174.45 - 90 289.675 1437 1 0 13.2748 107.565 -175.85 - 90 103.64 966 0 1 13.342 107.27 -204.45 - 90 134.668 1435 0 0 13.3429 107.25 -205.85 - 90 59.757 1616 3 1 143.392 -28.1135 -114.45 - 90 115.929 1617 3 1 143.55 -28.1534 -114.577 - 90 115.148 758 3 0 144.164 -28.329 -115.85 - 90 28.8458 818 3 0 128.783 -16.2674 -116.25 - 90 139.797 819 3 0 128.755 -16.25 -116.213 - 90 77.0049 1537 3 1 127.739 -14.9131 -114.85 - 90 96.083 1538 3 1 127.75 -14.6728 -114.699 - 90 89.4397 1539 3 1 127.95 -14.4528 -114.688 - 90 72.9719 1540 3 1 128.15 -14.3283 -114.768 - 90 83.0113 1541 3 1 128.35 -14.1954 -114.831 - 90 0.46251 847 3 0 133.221 -10.4517 -115.85 - 90 63.5898 848 3 0 133.223 -10.45 -115.851 - 90 4.8934 1574 3 1 135.136 -11.4246 -114.85 - 90 95.3508 1575 3 1 135.15 -11.4319 -114.841 - 90 68.2882 1576 3 1 135.35 -11.6246 -114.769 - 90 150.759 1577 3 1 135.55 -11.712 -114.782 - 90 240.827 838 3 0 136.444 -12.3851 -115.85 - 90 20.5279 820 3 0 146.849 -15.8663 -115.85 - 90 6.662 835 3 0 129.194 -12.9435 -115.85 - 90 58.116 965 0 1 13.1661 107.352 -204.45 - 90 577.821 967 2 1 13.4524 107.874 -144.45 - 90 16.8803 1416 2 0 13.742 103.428 -145.85 - 90 123.851 1415 2 0 13.7482 103.349 -145.879 - 90 77.6876 1414 2 0 13.7671 103.15 -145.954 - 90 425.601 1413 2 0 13.8324 102.95 -145.995 - 90 85.1889 1412 2 0 13.9264 102.75 -146.036 - 90 69.8357 1411 2 0 14.1855 102.55 -146.119 - 90 5.32453 1410 2 0 14.4275 102.35 -146.238 - 90 33.089 775 2 0 65.1862 -24.9116 -146.25 - 90 71.0347 774 2 0 65.2091 -25.05 -146.197 - 90 51.3247 773 2 0 65.2616 -25.25 -146.103 - 90 105.17 772 2 0 65.377 -25.4506 -146.028 - 90 21.8967 771 2 0 65.5166 -25.65 -145.885 - 90 68.6967 1232 2 1 66.5554 -27.2039 -144.85 - 90 159.585 1233 2 1 66.65 -27.4158 -144.727 - 90 116.18 1234 2 1 66.85 -27.86 -144.454 - 90 124.498 1235 2 1 67.05 -28.1393 -144.669 - 90 165.531 1236 2 1 67.25 -28.4799 -144.76 - 90 61.7263 746 2 0 68.3066 -30.6704 -145.85 - 90 72.4468 745 2 0 68.3545 -30.85 -145.94 - 90 104.922 744 2 0 68.3849 -31.05 -146.064 - 90 109.385 743 2 0 68.439 -31.25 -146.164 - 90 40.7307 742 2 0 68.4822 -31.45 -146.235 - 90 16.1297 412 2 0 87.3596 -97.5799 -146.25 - 90 91.0119 413 2 0 87.3773 -97.5499 -146.214 - 90 88.5947 414 2 0 87.4495 -97.35 -146.013 - 90 237.789 415 2 0 87.4274 -97.15 -145.924 - 90 33.7289 1339 2 1 88.0154 -96.5952 -144.849 - 90 106.917 1340 2 1 88.0501 -96.553 -144.782 - 90 118.527 1341 2 1 88.25 -96.4296 -144.743 - 90 18.4938 1342 2 1 88.45 -96.401 -144.82 - 90 175.265 965 1 1 13.1977 107.541 -174.45 - 90 184.525 1436 1 0 13.2166 107.549 -175.85 - 90 137.769 1437 0 0 13.6716 107.664 -205.85 - 90 120.771 984 0 1 16.9972 106.798 -204.45 - 90 51.3763 1433 0 0 16.8313 106.755 -205.85 - 90 260.874 1432 0 0 16.8137 106.75 -205.993 - 90 14.5506 1441 8 0 14.1385 108.55 33.8133 - 90 105.386 960 7 1 12.2422 106.835 5.55 - 90 125.058 1432 7 0 12.1151 106.703 4.14994 - 90 63.7328 948 6 1 9.6878 104.347 -24.45 - 90 84.5969 947 6 1 9.65 104.363 -24.6734 - 90 131.858 1421 6 0 9.45186 104.441 -25.85 - 90 129.597 921 5 1 4.41041 106.34 -54.45 - 90 146.985 1431 5 0 4.09772 106.456 -55.8509 - 90 126.223 887 4 1 -2.47992 108.575 -84.45 - 90 142.57 846 3 1 -10.7164 110.842 -114.45 - 90 134.147 1453 3 0 -11.0199 110.779 -115.85 - 90 126.263 815 2 1 -16.8598 109.299 -144.45 - 90 39.5975 1446 2 0 -17.4461 109.524 -145.85 - 90 60.7289 751 1 1 -29.7594 114.055 -174.45 - 90 45.2338 750 1 1 -29.8502 114.04 -174.659 - 90 109.372 1468 1 0 -30.3025 113.94 -175.85 - 90 5.90862 696 0 1 -40.8413 111.757 -204.45 - 90 104.34 695 0 1 -40.85 111.757 -204.473 - 90 156.691 1458 0 0 -41.3779 111.763 -205.85 - 90 134.107 756 0 1 -28.6576 101.316 -204.45 - 90 15.7263 757 0 1 -28.65 101.322 -204.453 -Number of digits in this event: 75 +Event: 61 +Number of tracker hits in this event: 88 + 61 190.214 1306 10 1 81.3277 -39.01 95.55 + 61 126.681 705 10 0 81.3304 -39.0097 94.15 + 61 167.231 1306 9 1 81.3899 -38.9959 65.55 + 61 101.683 705 9 0 81.3933 -38.9953 64.15 + 61 141.714 1307 8 1 81.4519 -38.9887 35.55 + 61 392.525 705 8 0 81.4549 -38.9892 34.15 + 61 274.02 1307 7 1 81.5057 -38.9961 5.55 + 61 316.86 705 7 0 81.5054 -38.9955 4.15 + 61 110.477 1307 6 1 81.5002 -38.9877 -24.45 + 61 141.573 705 6 0 81.499 -38.9867 -25.85 + 61 115.015 1307 5 1 81.4755 -38.9379 -54.45 + 61 107.438 705 5 0 81.4743 -38.9386 -55.85 + 61 156.006 1307 4 1 81.4628 -38.9554 -84.45 + 61 132.507 705 4 0 81.4647 -38.9554 -85.85 + 61 176.283 1307 3 1 81.5 -38.9566 -114.45 + 61 157.238 705 3 0 81.502 -38.9551 -115.85 + 61 110.241 1307 2 1 81.5441 -38.9188 -144.45 + 61 102.632 705 2 0 81.5471 -38.9109 -145.85 + 61 535.566 1307 1 1 81.6221 -38.7485 -174.45 + 61 497.539 706 1 0 81.6281 -38.744 -175.85 + 61 234.455 1308 0 1 81.7589 -38.6443 -204.45 + 61 144.754 707 0 0 81.7717 -38.6367 -205.85 + 61 7.87762 1317 0 0 96.3802 83.4594 -206.25 + 61 113.022 1311 0 1 82.2731 -39.0668 -204.45 + 61 220.276 704 0 0 82.3109 -39.0756 -205.85 + 61 155.11 1314 0 1 82.8804 -39.5671 -204.45 + 61 36.4338 702 0 0 82.9378 -39.4582 -205.85 + 61 78.5492 703 0 0 82.9421 -39.45 -205.95 + 61 53.8675 708 3 0 84.0138 -38.2702 -115.85 + 61 125.685 709 3 0 84.1155 -38.25 -115.897 + 61 35.2524 1326 3 1 85.2581 -39.1255 -114.85 + 61 136.712 704 3 0 85.2842 -39.2219 -115.85 + 61 191.887 704 7 0 81.5077 -39.081 4.15 + 61 138.031 1308 6 1 81.7134 -39.4053 -24.4504 + 61 101.707 703 6 0 81.7784 -39.4035 -25.8501 + 61 111.402 1315 5 1 83.1232 -39.4314 -54.45 + 61 139.673 703 5 0 83.2416 -39.3046 -55.85 + 61 112.439 1327 4 1 85.5068 -37.1652 -84.45 + 61 94.8666 714 4 0 85.5353 -37.1302 -85.85 + 61 116.142 1330 3 1 86.1236 -36.5576 -114.45 + 61 193.57 718 3 0 86.21 -36.4371 -115.85 + 61 117.33 1338 2 1 87.7878 -33.9555 -144.45 + 61 112.336 730 2 0 88.0002 -34.0256 -145.85 + 61 13.298 1358 1 1 91.7878 -35.5505 -174.45 + 61 51.4785 1357 1 1 91.75 -35.5527 -174.459 + 61 65.4633 1356 1 1 91.5499 -35.5723 -174.495 + 61 39.8263 1355 1 1 91.35 -35.5988 -174.523 + 61 53.701 1354 1 1 91.15 -35.6103 -174.538 + 61 89.6732 1353 1 1 90.95 -35.6066 -174.541 + 61 68.9028 1352 1 1 90.75 -35.6125 -174.567 + 61 53.5488 1351 1 1 90.55 -35.6143 -174.602 + 61 53.5821 1350 1 1 90.3493 -35.5947 -174.649 + 61 60.4916 1349 1 1 90.05 -35.5573 -174.677 + 61 63.024 1348 1 1 89.85 -35.5225 -174.689 + 61 63.9311 1347 1 1 89.6498 -35.5184 -174.677 + 61 48.665 1346 1 1 89.45 -35.5147 -174.644 + 61 63.9958 1345 1 1 89.25 -35.5108 -174.608 + 61 58.9094 1344 1 1 89.0499 -35.496 -174.597 + 61 64.966 1343 1 1 88.85 -35.4752 -174.574 + 61 84.8688 1342 1 1 88.65 -35.492 -174.507 + 61 4.43732 1341 1 1 88.45 -35.5215 -174.454 + 61 126.242 458 3 0 92.2166 -88.2964 -116.25 + 61 56.0625 331 3 0 93.0854 -113.869 -116.25 + 61 70.8312 1306 7 1 81.45 -39.0639 5.47666 + 61 50.8927 1296 6 1 79.3954 -35.7988 -24.45 + 61 115.168 1295 6 1 79.25 -35.8387 -24.5793 + 61 51.97 1294 6 1 79.05 -35.8963 -24.7489 + 61 212.372 719 6 0 77.8591 -36.1162 -25.85 + 61 76.8586 1135 5 1 47.2444 -43.9771 -54.45 + 61 106.38 1136 5 1 47.25 -43.9894 -54.4599 + 61 111.331 1137 5 1 47.4501 -44.3441 -54.6791 + 61 84.1903 669 5 0 48.6078 -46.0751 -55.85 + 61 105.644 668 5 0 48.7515 -46.25 -55.9929 + 61 5.38146 667 5 0 48.9538 -46.45 -56.2371 + 61 42.0743 1304 4 1 80.8774 -73.5943 -84.45 + 61 111.265 1303 4 1 80.85 -73.6344 -84.5075 + 61 369.751 1302 4 1 80.65 -73.9548 -84.6826 + 61 64.9799 1301 4 1 80.4499 -74.2231 -84.7233 + 61 118.269 1300 4 1 80.25 -74.3192 -84.7556 + 61 92.0423 1299 4 1 80.05 -74.4571 -84.6749 + 61 124.966 1298 4 1 79.85 -74.4639 -84.6774 + 61 148.865 522 4 0 80.8113 -75.4524 -85.85 + 61 152.366 525 4 0 80.6506 -74.9115 -85.8504 + 61 232.169 1308 1 1 81.7563 -39.0993 -174.45 + 61 207.817 705 1 0 81.7793 -39.0335 -175.85 + 61 101.944 1315 0 1 83.1349 -38.1927 -204.45 + 61 148.623 709 0 0 83.1362 -38.1223 -205.85 + 61 183.036 704 1 0 81.7598 -39.1023 -175.85 +Number of digits in this event: 37 Using G4ParticleGun... -Particle energy: 1.27508 LIN +Particle energy: 9.41507 LIN Particle: e- -Event: 91 -Number of tracker hits in this event: 36 - 91 137.275 638 9 1 -52.3884 -120.326 65.55 - 91 118.054 299 9 0 -52.3855 -120.322 64.15 - 91 203.877 638 8 1 -52.3383 -120.282 35.5495 - 91 167.237 299 8 0 -52.366 -120.249 34.15 - 91 253.735 635 7 1 -52.873 -119.534 5.55 - 91 202.396 303 7 0 -52.8343 -119.543 4.15 - 91 119.88 639 6 1 -52.0739 -119.853 -24.45 - 91 124.103 301 6 0 -52.0148 -119.891 -25.8501 - 91 118.734 647 5 1 -50.5383 -120.715 -54.4502 - 91 166.21 296 5 0 -50.4728 -120.765 -55.8502 - 91 125.672 655 4 1 -49.0023 -121.637 -84.45 - 91 105.27 291 4 0 -48.8353 -121.81 -85.85 - 91 111.981 672 3 1 -45.5619 -125.403 -114.45 - 91 107.464 272 3 0 -45.423 -125.552 -115.85 - 91 101.63 685 2 1 -42.9262 -128.787 -144.45 - 91 124.637 256 2 0 -42.7925 -128.885 -145.85 - 91 91.6803 698 1 1 -40.4134 -131.148 -174.45 - 91 288.919 246 1 0 -40.2622 -130.925 -175.85 - 91 86.6707 716 0 1 -36.7446 -125.96 -204.45 - 91 100.45 717 0 1 -36.65 -125.94 -204.579 - 91 6.2518 718 0 1 -36.45 -125.898 -204.836 - 91 241.814 272 0 0 -35.6579 -125.736 -205.85 - 91 88.7664 271 0 0 -35.3597 -125.75 -206.076 - 91 276.568 639 1 1 -52.0523 -119.994 -174.45 - 91 318.966 300 1 0 -52.0453 -119.994 -175.85 - 91 130.64 640 0 1 -51.9325 -119.988 -204.45 - 91 120.854 300 0 0 -51.919 -119.994 -205.85 - 91 42.2989 938 5 0 46.4368 7.69851 -56.2496 - 91 253.556 937 5 0 46.5611 7.65 -56.1817 - 91 57.0507 1140 5 1 48.1215 7.23544 -54.85 - 91 76.5048 1141 5 1 48.25 7.21024 -54.7229 - 91 293.534 1142 5 1 48.4501 7.12961 -54.5154 - 91 91.7587 933 5 0 47.723 6.65819 -55.85 - 91 224.538 932 5 0 47.7063 6.64999 -55.8666 - 91 101.531 639 0 1 -52.1865 -119.918 -204.45 - 91 147.513 301 0 0 -52.1884 -119.922 -205.85 +Event: 62 +Number of tracker hits in this event: 70 + 62 866.397 995 11 1 19.1371 -53.906 125.55 + 62 178.253 630 11 0 19.1368 -53.9061 124.15 + 62 124.191 995 10 1 19.1316 -53.9078 95.55 + 62 175.031 630 10 0 19.1302 -53.9077 94.15 + 62 123.175 995 9 1 19.0968 -53.9051 65.55 + 62 97.4903 630 9 0 19.0953 -53.9054 64.15 + 62 111.599 995 8 1 19.0624 -53.9223 35.55 + 62 112.741 630 8 0 19.0608 -53.9241 34.15 + 62 123.682 994 7 1 19.0301 -53.9586 5.55 + 62 119.552 630 7 0 19.028 -53.9605 4.15 + 62 151.262 994 6 1 18.9903 -54.0019 -24.45 + 62 127.313 630 6 0 18.9899 -54.0023 -25.85 + 62 100.073 994 5 1 18.9845 -54.0144 -54.45 + 62 141.411 630 5 0 18.9845 -54.015 -55.85 + 62 245.879 994 4 1 18.9877 -54.0235 -84.45 + 62 216.996 630 4 0 18.987 -54.0256 -85.85 + 62 108.382 994 3 1 18.9717 -54.0726 -114.45 + 62 111.654 629 3 0 18.9706 -54.0753 -115.85 + 62 149.159 994 2 1 18.9488 -54.1268 -144.45 + 62 133.565 629 2 0 18.9482 -54.1303 -145.85 + 62 356.398 994 1 1 18.9437 -54.2012 -174.45 + 62 382.808 629 1 0 18.9435 -54.2056 -175.85 + 62 154.369 994 0 1 18.9454 -54.2998 -204.45 + 62 119.304 628 0 0 18.9459 -54.3043 -205.85 + 62 226.503 652 0 0 -36.8517 -49.65 -206.208 + 62 61.7247 653 0 0 -36.9094 -49.45 -206.049 + 62 254.473 995 0 1 19.0595 -54.0438 -204.45 + 62 103.729 630 0 0 19.0246 -54.0289 -205.85 + 62 113.779 627 0 0 19.236 -54.4836 -205.85 + 62 62.3143 629 4 0 19.0524 -54.05 -86.1274 + 62 158.176 1002 3 1 20.5063 -55.0644 -114.45 + 62 103.791 624 3 0 20.7013 -55.1093 -115.85 + 62 130.368 1020 2 1 24.0649 -56.3084 -144.45 + 62 115.44 618 2 0 24.2988 -56.2894 -145.85 + 62 109.531 1048 1 1 29.7434 -55.3908 -174.45 + 62 12.815 623 1 0 30.0466 -55.2551 -175.85 + 62 115.139 624 1 0 30.0579 -55.25 -175.904 + 62 173.23 1080 0 1 36.1503 -52.8557 -204.45 + 62 131.777 637 0 0 36.3249 -52.6305 -205.85 + 62 153.639 632 0 0 35.909 -53.5183 -205.85 + 62 35.4457 994 11 1 19.05 -53.7517 125.237 + 62 100.819 635 11 0 18.4835 -53.0007 124.15 + 62 24.8827 636 11 0 18.3771 -52.85 123.831 + 62 89.6614 961 10 1 12.372 -38.8589 95.5492 + 62 45.6474 960 10 1 12.25 -39.0863 95.2857 + 62 83.3166 700 10 0 11.7272 -39.9517 94.15 + 62 258.881 699 10 0 11.6717 -40.05 94.0313 + 62 86.3395 698 10 0 11.926 -40.25 93.8401 + 62 93.8835 697 10 0 12.122 -40.45 93.839 + 62 70.0388 696 10 0 12.391 -40.6501 93.8244 + 62 74.7884 626 10 0 46.1653 -54.8005 93.7506 + 62 127.473 627 10 0 45.9811 -54.6495 93.8638 + 62 346.614 628 10 0 45.7535 -54.45 93.9159 + 62 79.1918 629 10 0 45.412 -54.25 94.022 + 62 127.204 1124 10 1 44.9087 -52.9341 95.15 + 62 64.171 1125 10 1 45.05 -52.6876 95.3391 + 62 79.8463 1126 10 1 45.25 -52.6231 95.3866 + 62 112.189 1127 10 1 45.4502 -52.4919 95.497 + 62 46.0701 686 10 0 16.8138 -42.65 93.9242 + 62 92.4042 629 11 0 18.6089 -54.0604 124.149 + 62 23.119 836 10 1 -12.7836 -49.2948 95.55 + 62 70.8722 835 10 1 -12.85 -49.294 95.4931 + 62 65.3533 834 10 1 -13.05 -49.2628 95.3112 + 62 190.075 654 10 0 -14.4115 -49.1695 94.15 + 62 125.32 581 9 1 -63.7557 -44.7378 65.55 + 62 37.1447 685 9 0 -63.0468 -42.9729 64.15 + 62 58.7523 686 9 0 -62.9887 -42.8495 64.0716 + 62 72.3764 687 9 0 -62.9328 -42.65 63.9891 + 62 70.3845 688 9 0 -62.9388 -42.45 63.9151 + 62 99.4025 689 9 0 -63.031 -42.2497 63.8115 +Number of digits in this event: 32 +Using G4ParticleGun... +Particle energy: 1.34743 LIN +Particle: e- +Event: 63 +Number of tracker hits in this event: 31 + 63 127.316 1358 10 1 91.8091 -62.0058 95.55 + 63 95.8025 590 10 0 91.8069 -62.0092 94.15 + 63 234.996 1357 9 1 91.7433 -62.1115 65.55 + 63 116.988 589 9 0 91.7346 -62.1221 64.15 + 63 186.837 1357 8 1 91.5612 -62.36 35.55 + 63 132.792 588 8 0 91.5451 -62.368 34.15 + 63 110.491 1355 7 1 91.234 -62.5213 5.55 + 63 146.568 587 7 0 91.2156 -62.5253 4.15 + 63 119.217 1353 6 1 90.8347 -62.5888 -24.45 + 63 208.04 587 6 0 90.8139 -62.5858 -25.85 + 63 118.407 1351 5 1 90.3849 -62.532 -54.45 + 63 98.1443 587 5 0 90.3449 -62.5228 -55.85 + 63 163.68 1347 4 1 89.5428 -62.3618 -84.45 + 63 116.125 588 4 0 89.5151 -62.3487 -85.85 + 63 149.212 1344 3 1 89.0456 -62.0307 -114.45 + 63 167.127 590 3 0 89.0378 -62.0101 -115.85 + 63 109.884 1343 2 1 88.8042 -61.6011 -144.45 + 63 132.819 592 2 0 88.7708 -61.5637 -145.85 + 63 188.873 1340 1 1 88.0659 -60.7377 -174.45 + 63 133.211 596 1 0 88.037 -60.698 -175.85 + 63 120.795 1336 0 1 87.3927 -59.8912 -204.45 + 63 147.871 600 0 0 87.3475 -59.8676 -205.85 + 63 63.174 581 6 0 90.4181 -63.6874 -25.85 + 63 113.4 580 6 0 90.3086 -63.8501 -25.9883 + 63 82.0614 555 6 0 67.0556 -69.0238 -26.25 + 63 430.603 554 6 0 67.0583 -69.05 -26.1538 + 63 73.1193 285 0 1 -122.95 -119.183 -204.692 + 63 60.6228 286 0 1 -122.95 -119.119 -204.717 + 63 152.933 1451 3 1 110.432 54.5214 -114.85 + 63 57.7052 1163 3 0 109.928 52.7898 -115.85 + 63 57.5337 1450 3 1 110.298 52.567 -114.85 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 2.08918 LIN +Particle: e- +Event: 64 +Number of tracker hits in this event: 61 + 64 142.838 1364 10 0 70.0754 93.08 94.15 + 64 178.262 1250 9 1 70.0652 93.0683 65.55 + 64 115.869 1364 9 0 70.0593 93.0672 64.15 + 64 104.691 1249 8 1 69.93 93.0512 35.55 + 64 129.786 1364 8 0 69.9226 93.051 34.15 + 64 158.22 1248 7 1 69.7748 93.0421 5.55 + 64 101.465 1364 7 0 69.77 93.0399 4.15 + 64 97.3397 1248 6 1 69.659 92.994 -24.45 + 64 111.902 1364 6 0 69.6461 92.99 -25.85 + 64 104.702 1246 5 1 69.3719 92.9107 -54.45 + 64 142.537 1363 5 0 69.3548 92.9073 -55.85 + 64 293.045 1244 4 1 69.0094 92.8278 -84.45 + 64 207.986 1363 4 0 68.9914 92.8286 -85.85 + 64 124.701 1242 3 1 68.6344 92.8283 -114.45 + 64 91.6497 1363 3 0 68.6205 92.8273 -115.85 + 64 129.94 1241 2 1 68.3379 92.812 -144.45 + 64 133.462 1363 2 0 68.3244 92.8084 -145.85 + 64 27.1953 1240 1 1 68.0506 92.7554 -174.45 + 64 97.421 1239 1 1 68.05 92.7553 -174.551 + 64 117.375 1363 1 0 68.0425 92.7543 -175.85 + 64 188.989 1239 0 1 67.878 92.7218 -204.45 + 64 123.647 1362 0 0 67.8704 92.7227 -205.85 + 64 261.065 682 3 1 -43.4595 62.301 -114.45 + 64 161.833 681 3 1 -43.6502 62.2756 -114.557 + 64 27.5638 1362 4 0 68.8303 92.75 -86.1707 + 64 110.039 1229 3 1 65.9418 89.4584 -114.45 + 64 145.127 1347 3 0 65.8789 89.6173 -115.85 + 64 121.607 1230 2 1 66.0626 91.0201 -144.451 + 64 110.396 1353 2 0 66.1268 90.8494 -145.85 + 64 76.2389 1473 2 0 66.1071 114.756 -146.25 + 64 87.4332 1474 2 0 66.085 114.95 -146.056 + 64 19.9381 1475 2 0 66.0672 115.15 -145.9 + 64 311.832 1229 2 1 66.0363 116.35 -144.85 + 64 72.4046 1228 2 1 65.85 117.013 -144.551 + 64 35.9588 1227 2 1 65.65 117.018 -144.75 + 64 112.976 1483 2 0 64.7578 116.902 -145.851 + 64 60.1684 1183 1 1 56.7625 116.251 -174.45 + 64 117.384 1182 1 1 56.65 116.369 -174.511 + 64 128.182 1484 1 0 56.0262 117.029 -175.85 + 64 162.461 1516 1 0 37.9802 123.392 -176.25 + 64 4.08889 1517 1 0 37.7362 123.55 -175.859 + 64 155.719 1084 1 1 36.9634 124.661 -174.85 + 64 7.91983 1304 3 1 80.987 72.5591 -114.85 + 64 11.3513 1575 1 0 82.7892 135.15 -176.092 + 64 41.4715 1551 2 0 87.772 130.493 -146.25 + 64 134.529 1552 2 0 87.834 130.55 -146.093 + 64 42.7503 1553 2 0 87.9576 130.75 -145.931 + 64 307.944 1342 2 1 88.5181 131.617 -144.85 + 64 89.6626 1539 2 0 88.3447 128.041 -145.85 + 64 132.056 1538 2 0 88.3505 127.95 -145.895 + 64 64.831 1537 2 0 88.3869 127.75 -146.022 + 64 53.8287 1536 2 0 88.4742 127.55 -146.042 + 64 53.972 1535 2 0 88.4523 127.35 -146.016 + 64 51.1468 1534 2 0 88.3894 127.15 -146.046 + 64 88.0967 1533 2 0 88.3251 126.95 -146.027 + 64 17.3927 1532 2 0 88.206 126.75 -145.896 + 64 147.769 1337 2 1 87.6492 126.564 -144.85 + 64 164.02 1489 2 0 64.9036 118.129 -146.25 + 64 233.253 1488 2 0 64.7487 117.95 -145.961 + 64 4.15898 1487 2 0 64.7117 117.75 -145.946 + 64 46.5741 1467 10 0 96.2584 113.628 93.75 +Number of digits in this event: 28 +Using G4ParticleGun... +Particle energy: 8.88482 LIN +Particle: e- +Event: 65 +Number of tracker hits in this event: 80 + 65 154.196 736 10 1 -32.7237 -82.9777 95.55 + 65 100.658 485 10 0 -32.723 -82.9778 94.15 + 65 494.595 736 9 1 -32.715 -82.98 65.55 + 65 374.794 485 9 0 -32.7138 -82.9791 64.15 + 65 171.61 736 8 1 -32.6922 -82.9655 35.55 + 65 421.494 485 8 0 -32.6905 -82.9647 34.15 + 65 189.631 736 7 1 -32.6536 -82.9504 5.55 + 65 117.785 485 7 0 -32.6512 -82.9497 4.15 + 65 105.726 737 6 1 -32.6025 -82.9365 -24.45 + 65 113.24 485 6 0 -32.6006 -82.9355 -25.85 + 65 109.18 737 5 1 -32.5639 -82.9117 -54.45 + 65 185.785 485 5 0 -32.5623 -82.9098 -55.85 + 65 110.293 737 4 1 -32.5302 -82.8682 -84.45 + 65 131.681 485 4 0 -32.5294 -82.8664 -85.85 + 65 122.16 737 3 1 -32.5149 -82.8279 -114.45 + 65 136.598 486 3 0 -32.5149 -82.8263 -115.85 + 65 262.075 737 2 1 -32.4997 -82.7804 -144.45 + 65 267.084 486 2 0 -32.4986 -82.7788 -145.85 + 65 189.201 737 1 1 -32.4749 -82.7456 -174.45 + 65 224.032 486 1 0 -32.4735 -82.7447 -175.85 + 65 145.312 738 0 1 -32.4465 -82.729 -204.45 + 65 105.96 486 0 0 -32.4448 -82.7289 -205.85 + 65 173.692 378 1 0 86.131 -104.35 -176.151 + 65 24.0765 379 1 0 86.2744 -104.35 -176.117 + 65 44.373 476 1 0 -148.897 -84.6618 -176.25 + 65 89.2708 477 1 0 -149.035 -84.65 -176.111 + 65 152.752 152 1 1 -149.607 -84.8097 -174.85 + 65 149.169 463 2 0 -140.421 -87.3932 -146.25 + 65 39.141 203 2 1 -139.411 -87.0273 -144.85 + 65 91.2209 204 2 1 -139.35 -87.0006 -144.783 + 65 638.411 205 2 1 -139.15 -86.9808 -144.655 + 65 123.429 629 0 0 -24.2778 -54.25 -206.207 + 65 148.381 485 2 0 -32.438 -82.85 -145.886 + 65 139.875 740 1 1 -31.9534 -81.3569 -174.45 + 65 110.664 493 1 0 -32.1441 -81.3434 -175.85 + 65 115.297 712 0 1 -37.4764 -80.9865 -204.45 + 65 59.5185 495 0 0 -37.7372 -80.8685 -205.85 + 65 67.7654 496 0 0 -37.7721 -80.85 -206.027 + 65 158.449 734 8 1 -33.0597 -83.4628 35.55 + 65 187.963 482 8 0 -33.1155 -83.5117 34.15 + 65 142.248 730 7 1 -34.0018 -84.626 5.55 + 65 410.745 476 7 0 -34.105 -84.6886 4.15 + 65 121.671 719 6 1 -36.2213 -85.6846 -24.45 + 65 131.321 471 6 0 -36.3143 -85.7097 -25.85 + 65 181.531 708 5 1 -38.3206 -86.3189 -54.4503 + 65 133.6 468 5 0 -38.3988 -86.3255 -55.85 + 65 116.753 698 4 1 -40.3737 -86.3463 -84.45 + 65 618.131 468 4 0 -40.4503 -86.3625 -85.85 + 65 111.739 690 3 1 -41.96 -86.3864 -114.45 + 65 113 468 3 0 -42.0948 -86.4337 -115.85 + 65 120.904 676 2 1 -44.6998 -87.5649 -144.45 + 65 189.847 462 2 0 -44.8312 -87.5522 -145.85 + 65 217.015 663 1 1 -47.344 -87.0518 -174.45 + 65 123.115 465 1 0 -47.3797 -86.9349 -175.85 + 65 94.9833 661 0 1 -47.7322 -84.2472 -204.45 + 65 119.486 479 0 0 -47.6725 -84.1144 -205.85 + 65 54.6569 623 2 1 -55.3384 -147.025 -144.85 + 65 188.791 467 4 0 -40.4924 -86.45 -85.9879 + 65 178.8 484 8 0 -32.9559 -83.1364 34.15 + 65 98.0375 731 8 1 -33.7794 -83.5446 35.5496 + 65 101.728 483 8 0 -33.9037 -83.3871 34.15 + 65 137.922 720 7 1 -36.0077 -79.6951 5.55 + 65 157.266 503 7 0 -35.9693 -79.4311 4.15 + 65 149.24 725 6 1 -35.0364 -74.1963 -24.4505 + 65 110.589 530 6 0 -34.8927 -73.9233 -25.85 + 65 5.94136 531 6 0 -34.8532 -73.8498 -26.2222 + 65 67.8621 740 5 1 -31.8749 -68.263 -54.4502 + 65 62.112 741 5 1 -31.85 -68.2418 -54.6446 + 65 107.893 559 5 0 -31.6829 -68.1408 -55.85 + 65 180.088 760 4 1 -27.9791 -65.5573 -84.45 + 65 130.894 572 4 0 -27.8202 -65.5169 -85.85 + 65 105.069 778 3 1 -24.33 -64.7502 -114.45 + 65 109.775 576 3 0 -24.1804 -64.7211 -115.85 + 65 123.241 795 2 1 -20.9424 -64.3611 -144.45 + 65 51.8589 578 2 0 -20.7811 -64.4397 -145.85 + 65 100.02 577 2 0 -20.7621 -64.45 -146.009 + 65 145.616 811 1 1 -17.7204 -66.6987 -174.45 + 65 112.901 566 1 0 -17.7227 -66.6635 -175.851 + 65 162.511 807 0 1 -18.4653 -65.8409 -204.45 + 65 119.094 571 0 0 -18.6107 -65.7222 -205.85 +Number of digits in this event: 47 +Using G4ParticleGun... +Particle energy: 8.96168 LIN +Particle: e- +Event: 66 +Number of tracker hits in this event: 309 + 66 131.022 580 11 1 -63.9921 -11.3139 125.55 + 66 114.423 843 11 0 -63.9915 -11.3144 124.15 + 66 399.808 580 10 1 -63.9787 -11.3249 95.55 + 66 342.299 843 10 0 -63.9781 -11.3245 94.15 + 66 507.571 580 9 1 -63.9612 -11.3119 65.55 + 66 281.272 843 9 0 -63.9593 -11.3122 64.15 + 66 312.818 580 8 1 -63.9221 -11.3229 35.55 + 66 245.975 843 8 0 -63.9202 -11.3248 34.15 + 66 389.295 580 7 1 -63.9082 -11.3361 5.55 + 66 490.921 843 7 0 -63.9029 -11.341 4.15 + 66 301.69 581 6 1 -63.816 -11.4408 -24.45 + 66 853.038 843 6 0 -63.815 -11.4379 -25.85 + 66 414.703 581 5 1 -63.7821 -11.4051 -54.45 + 66 346.956 843 5 0 -63.7797 -11.4048 -55.85 + 66 266.461 581 4 1 -63.7248 -11.4039 -84.45 + 66 518.112 843 4 0 -63.7102 -11.3992 -85.85 + 66 536.496 583 3 1 -63.4288 -11.2603 -114.45 + 66 116.73 844 3 0 -63.4122 -11.2465 -115.85 + 66 216.038 584 2 1 -63.0856 -10.9359 -144.45 + 66 253.324 845 2 0 -63.0656 -10.9255 -145.85 + 66 33.5047 586 1 1 -62.6516 -10.7135 -174.45 + 66 88.3513 587 1 1 -62.65 -10.7132 -174.555 + 66 467.903 846 1 0 -62.631 -10.7087 -175.85 + 66 119.096 589 0 1 -62.1558 -10.6427 -204.45 + 66 219.506 847 0 0 -62.1221 -10.6493 -205.85 + 66 75.3794 846 0 0 -62.1184 -10.65 -206 + 66 60.6378 565 6 0 -120.732 -66.9068 -26.25 + 66 91.3596 299 6 1 -120.289 -67.8179 -24.8499 + 66 145.61 300 6 1 -120.15 -67.8641 -24.7779 + 66 28.9204 569 6 0 -120.613 -66.2377 -25.85 + 66 5.54819 295 6 1 -121.147 -65.148 -24.85 + 66 5.55256 580 6 0 -121.727 -63.8768 -25.85 + 66 34.6995 583 2 1 -63.3207 -10.9025 -144.45 + 66 257.54 585 2 1 -63.05 -11.0955 -144.597 + 66 313.579 842 5 0 -63.6772 -11.4643 -55.85 + 66 627.906 582 4 1 -63.6355 -11.5374 -84.45 + 66 410.201 842 4 0 -63.6426 -11.5306 -85.85 + 66 394.716 581 3 1 -63.818 -11.4257 -114.45 + 66 255.894 843 3 0 -63.8304 -11.4069 -115.85 + 66 253.583 580 2 1 -64.0157 -11.069 -144.45 + 66 356.077 582 1 1 -63.6067 -10.6769 -174.45 + 66 210.21 584 0 1 -63.2097 -10.5831 -204.45 + 66 274.257 1414 5 0 -162.546 102.978 -56.2499 + 66 54.9808 1415 5 0 -162.509 103.15 -55.9455 + 66 50.8022 88 5 1 -162.507 103.506 -54.85 + 66 411.587 842 3 0 -63.7123 -11.5963 -115.85 + 66 369.984 581 2 1 -63.839 -11.6657 -144.45 + 66 566.626 841 2 0 -63.8651 -11.6808 -145.85 + 66 126.416 578 1 1 -64.4296 -11.9301 -174.45 + 66 230.272 840 1 0 -64.4595 -11.9266 -175.85 + 66 125.64 575 0 1 -65.0125 -11.7682 -204.45 + 66 555.782 841 0 0 -65.0104 -11.762 -205.85 + 66 343.836 578 0 1 -64.3994 -12.381 -204.45 + 66 574.22 837 0 0 -64.3172 -12.4917 -205.85 + 66 143.617 841 3 0 -63.6959 -11.65 -116.142 + 66 249.899 840 0 0 -63.2678 -11.9972 -206.248 + 66 256.142 582 3 1 -63.6388 -11.5686 -114.45 + 66 148.177 582 2 1 -63.6101 -11.2934 -144.45 + 66 419.835 843 2 0 -63.6051 -11.2737 -145.85 + 66 119.768 583 0 1 -63.2609 -10.1417 -204.45 + 66 131.979 849 0 0 -63.2456 -10.1031 -205.85 + 66 32.9986 841 5 0 -63.5539 -11.6501 -56.2078 + 66 38.2617 606 5 0 -62.9181 -58.7534 -56.25 + 66 33.2847 605 5 0 -62.9255 -58.85 -56.2195 + 66 200.835 282 5 0 -70.1604 -123.644 -56.25 + 66 22.7136 281 5 0 -70.1611 -123.75 -56.1619 + 66 247.645 583 4 1 -63.45 -11.6414 -84.516 + 66 15.5647 584 4 1 -63.25 -11.7648 -84.7922 + 66 9.25802 839 4 0 -62.4559 -12.2357 -85.85 + 66 164.387 838 4 0 -62.432 -12.25 -85.882 + 66 5.91386 703 3 1 -39.2769 -22.9779 -114.45 + 66 86.6438 704 3 1 -39.25 -22.9758 -114.477 + 66 178.993 705 3 1 -39.0499 -22.9718 -114.675 + 66 224.053 785 3 0 -38.0314 -22.9556 -115.85 + 66 116.015 929 2 1 5.94604 -13.1179 -144.45 + 66 221.517 839 2 0 6.12456 -12.1973 -145.85 + 66 198.786 840 2 0 6.1537 -12.05 -146.018 + 66 12.6576 805 2 0 20.1207 -19.0215 -146.25 + 66 162.552 804 2 0 20.1218 -19.05 -146.221 + 66 59.036 803 2 0 20.1259 -19.25 -145.979 + 66 101.605 1003 2 1 20.6738 -19.3427 -144.85 + 66 83.1223 1004 2 1 20.85 -19.3668 -144.637 + 66 34.7291 1005 2 1 21.05 -19.3028 -144.5 + 66 95.4125 783 3 0 -38.8079 -23.4005 -115.85 + 66 165.861 841 4 0 -63.2229 -11.693 -85.85 + 66 262.439 611 3 1 -57.7736 -13.7037 -114.45 + 66 239.559 831 3 0 -57.6453 -13.7472 -115.85 + 66 6.93307 623 2 1 -55.4443 -15.4596 -144.45 + 66 152.007 622 2 1 -55.45 -15.465 -144.475 + 66 97.5921 621 2 1 -55.65 -15.8113 -144.744 + 66 33.2839 813 2 0 -56.569 -17.3276 -145.85 + 66 71.0823 812 2 0 -56.6444 -17.45 -145.94 + 66 141.678 811 2 0 -56.773 -17.65 -146.095 + 66 8.72335 507 1 1 -78.6405 -53.2067 -174.45 + 66 223.123 506 1 1 -78.65 -53.2407 -174.468 + 66 55.6213 617 1 0 -78.9921 -56.4718 -175.85 + 66 61.2345 616 1 0 -79.0046 -56.6503 -175.918 + 66 55.3786 615 1 0 -79.0327 -56.85 -175.994 + 66 61.4462 614 1 0 -79.082 -57.05 -176.086 + 66 27.4961 613 1 0 -79.1426 -57.25 -176.193 + 66 83.555 440 0 1 -91.9974 -106.322 -204.45 + 66 121.868 439 0 1 -92.15 -106.558 -204.535 + 66 126.522 438 0 1 -92.35 -106.881 -204.601 + 66 44.7282 437 0 1 -92.5502 -107.229 -204.763 + 66 33.2622 357 0 0 -93.0422 -108.643 -205.85 + 66 93.7022 356 0 0 -93.0762 -108.75 -205.936 + 66 46.2261 355 0 0 -93.1407 -108.951 -206.13 + 66 123.024 441 0 1 -91.95 -106.172 -204.461 + 66 46.5138 442 0 1 -91.7495 -106.311 -204.705 + 66 208.477 371 0 0 -92.105 -105.851 -205.85 + 66 106.265 627 1 0 -79.3021 -54.4967 -175.85 + 66 89.9292 626 1 0 -79.583 -54.65 -176.091 + 66 9.52148 625 1 0 -79.8283 -54.85 -176.227 + 66 635.832 580 4 1 -63.85 -12.001 -84.6139 + 66 163.634 585 0 1 -63.05 -11.7947 -204.471 + 66 77.1091 836 3 0 -63.2573 -12.6973 -115.85 + 66 73.5916 835 3 0 -63.2589 -12.85 -116.044 + 66 55.484 865 3 0 -76.789 -6.95935 -116.25 + 66 163.931 866 3 0 -76.8172 -6.85 -116.116 + 66 30.1776 514 3 1 -77.2233 -6.25121 -114.85 + 66 84.4339 513 3 1 -77.25 -6.22197 -114.768 + 66 52.9555 584 3 1 -63.25 -12.5497 -114.75 + 66 48.3006 832 3 0 -62.3449 -13.5243 -115.85 + 66 543.381 580 6 1 -63.8828 -11.3485 -24.45 + 66 653.264 580 5 1 -64.0322 -11.2954 -54.45 + 66 114.126 579 4 1 -64.1565 -11.3905 -84.45 + 66 280.722 578 3 1 -64.3622 -11.5869 -114.45 + 66 120.316 577 2 1 -64.4947 -11.9333 -144.45 + 66 121.192 577 1 1 -64.6051 -12.3751 -174.45 + 66 106.651 838 1 0 -64.6057 -12.3903 -175.85 + 66 110.707 577 0 1 -64.5853 -12.7278 -204.45 + 66 157.732 836 0 0 -64.5837 -12.7455 -205.85 + 66 72.0344 987 0 1 17.6338 -80.265 -204.45 + 66 84.6227 988 0 1 17.65 -80.1749 -204.576 + 66 292.335 989 0 1 17.85 -80.1116 -204.518 + 66 386.944 579 2 1 -64.2187 -11.4092 -144.45 + 66 235.219 580 1 1 -64.0364 -11.8383 -174.45 + 66 54.894 841 1 0 -64.0091 -11.8485 -175.85 + 66 674.378 582 0 1 -63.4639 -12.0057 -204.45 + 66 106.69 849 1 0 -63.544 -10.11 -175.85 + 66 157.737 854 0 0 -63.4803 -9.17392 -205.85 + 66 205.077 877 7 0 -80.8231 -4.57294 3.75 + 66 73.4746 488 7 1 -82.3041 -4.99644 5.15036 + 66 99.0434 487 7 1 -82.45 -5.10912 5.29574 + 66 62.4108 486 7 1 -82.6501 -5.20372 5.37284 + 66 58.9861 485 7 1 -82.85 -5.18938 5.47591 + 66 17.7157 484 7 1 -83.05 -5.18036 5.53195 + 66 156.936 483 7 1 -83.2603 -5.23969 5.54941 + 66 41.9863 873 7 0 -83.8743 -5.27444 4.15 + 66 111.526 874 7 0 -83.9444 -5.25 4.02701 + 66 244.599 581 1 1 -63.6809 -11.2691 -174.45 + 66 380.653 843 1 0 -63.702 -11.2517 -175.85 + 66 89.1133 844 1 0 -63.7038 -11.25 -175.975 + 66 132.872 579 0 1 -64.146 -10.873 -204.45 + 66 109.094 845 0 0 -64.2077 -10.9156 -205.85 + 66 90.7094 843 0 0 -63.6135 -11.4449 -205.85 + 66 9.19552 842 0 0 -63.613 -11.45 -206.214 + 66 112.225 844 5 0 -63.9384 -11.2462 -55.85 + 66 138.853 585 3 1 -62.9555 -11.399 -114.45 + 66 138.454 595 2 1 -60.9269 -9.96375 -144.45 + 66 131.288 850 2 0 -60.7715 -9.95748 -145.85 + 66 200.28 613 1 1 -57.4175 -10.5134 -174.45 + 66 93.6093 847 1 0 -57.2934 -10.6164 -175.85 + 66 106.123 625 0 1 -55.0453 -12.5256 -204.45 + 66 113.416 573 3 1 -65.3403 -10.8888 -114.45 + 66 112.605 845 3 0 -65.415 -10.8582 -115.85 + 66 9.14529 846 3 0 -65.434 -10.85 -116.213 + 66 118.096 565 2 1 -66.9694 -10.1731 -144.45 + 66 114.217 849 2 0 -67.0077 -10.2253 -145.85 + 66 131.75 562 1 1 -67.5489 -11.2899 -174.45 + 66 200.035 558 0 1 -68.371 -12.8809 -204.45 + 66 221.338 835 0 0 -68.372 -12.9853 -205.85 + 66 25.3282 796 4 0 -67.121 -20.7893 -86.2488 + 66 164.191 795 4 0 -67.1103 -20.8505 -86.1794 + 66 290.599 794 4 0 -67.0923 -21.05 -85.9788 + 66 82.6491 570 4 1 -65.962 -14.8657 -84.4502 + 66 46.6373 569 4 1 -66.0501 -15.0076 -84.6967 + 66 1.37222 822 4 0 -66.4064 -15.6477 -85.8502 + 66 154.279 821 4 0 -66.4077 -15.65 -85.8543 + 66 124.153 820 4 0 -66.5068 -15.8504 -86.1749 + 66 408.257 525 3 1 -74.8637 -35.6809 -114.45 + 66 515.246 524 3 1 -75.0505 -36.3755 -114.646 + 66 160.353 523 3 1 -75.25 -37.1646 -114.783 + 66 7.16611 685 3 0 -76.9584 -43.031 -115.85 + 66 58.7336 684 3 0 -76.9639 -43.05 -115.854 + 66 141.438 683 3 0 -77.0258 -43.2505 -115.893 + 66 65.799 682 3 0 -77.0962 -43.45 -115.932 + 66 57.3705 681 3 0 -77.166 -43.65 -115.973 + 66 73.8644 680 3 0 -77.2313 -43.8503 -116.02 + 66 62.5619 679 3 0 -77.2984 -44.05 -116.067 + 66 53.1326 678 3 0 -77.3751 -44.25 -116.113 + 66 93.9827 677 3 0 -77.4531 -44.45 -116.156 + 66 59.6882 676 3 0 -77.53 -44.65 -116.197 + 66 31.4004 675 3 0 -77.6056 -44.8503 -116.236 + 66 19.3928 526 3 1 -74.8296 -35.5656 -114.45 + 66 367.193 581 9 1 -63.8343 -11.2629 65.55 + 66 115.859 577 7 1 -64.6207 -10.4335 5.55 + 66 181.837 848 7 0 -64.67 -10.3962 4.15 + 66 133.778 571 6 1 -65.7241 -9.58038 -24.45 + 66 107.99 852 6 0 -65.875 -9.57856 -25.85 + 66 124.148 556 5 1 -68.6905 -9.55921 -54.4501 + 66 133.587 852 5 0 -68.8341 -9.48919 -55.85 + 66 159.113 542 4 1 -71.505 -8.0618 -84.45 + 66 152.151 859 4 0 -71.4602 -8.08777 -85.85 + 66 151.305 554 3 1 -69.1864 -7.61727 -114.45 + 66 116.407 862 3 0 -68.9263 -7.48978 -115.85 + 66 21.49 872 2 0 -63.4562 -5.62304 -145.85 + 66 197.179 871 2 0 -63.4354 -5.65012 -145.952 + 66 132.904 616 1 1 -56.7868 -14.4008 -174.45 + 66 93.053 824 1 0 -57.0397 -15.1212 -175.85 + 66 40.5264 823 1 0 -57.0926 -15.2501 -176.086 + 66 70.2527 559 0 1 -68.1294 -34.1566 -204.45 + 66 97.6279 557 0 1 -68.45 -34.5202 -204.602 + 66 96.4645 556 0 1 -68.65 -34.7418 -204.696 + 66 84.3647 555 0 1 -68.85 -34.9536 -204.786 + 66 64.4006 711 0 0 -71.5119 -37.68 -205.85 + 66 140.521 710 0 0 -71.6733 -37.85 -205.911 + 66 88.8175 709 0 0 -71.8698 -38.05 -205.979 + 66 82.6212 708 0 0 -72.0764 -38.25 -206.042 + 66 126.396 707 0 0 -72.3084 -38.45 -206.118 + 66 51.1573 706 0 0 -72.5747 -38.65 -206.205 + 66 18.7336 486 0 0 -125.15 -82.8238 -206.25 + 66 117.078 485 0 0 -125.147 -82.85 -206.18 + 66 41.7337 272 0 1 -125.66 -83.3127 -204.85 + 66 83.6527 271 0 1 -125.75 -83.3881 -204.699 + 66 227.847 34 2 1 -173.15 -103.489 -144.58 + 66 162.833 35 2 1 -173.15 -104.128 -144.649 + 66 24.3457 36 2 1 -172.95 -104.543 -144.805 + 66 108.061 371 2 0 -171.204 -105.801 -145.85 + 66 128.853 370 2 0 -170.993 -105.95 -145.968 + 66 46.4535 295 2 0 -178.509 -120.993 -146.25 + 66 250.9 294 2 0 -178.541 -121.15 -146.155 + 66 343.054 9 2 1 -178.167 -121.7 -144.85 + 66 134.93 503 1 1 -79.4304 -2.1283 -174.45 + 66 158.513 502 1 1 -79.45 -2.07085 -174.551 + 66 34.374 893 1 0 -79.258 -1.31052 -175.85 + 66 166.739 894 1 0 -79.2349 -1.25 -175.951 + 66 233.514 1086 1 0 -76.0223 37.2993 -176.249 + 66 265.213 1087 1 0 -76.0099 37.45 -175.987 + 66 166.805 520 1 1 -75.9747 38.0811 -174.85 + 66 104.466 517 1 1 -76.5092 38.2894 -174.45 + 66 86.7399 516 1 1 -76.6501 38.2003 -174.65 + 66 43.3844 1082 1 0 -127.761 36.6359 -176.25 + 66 107.501 1083 1 0 -127.793 36.6501 -176.173 + 66 34.9116 1084 1 0 -127.879 36.8501 -175.955 + 66 176.339 261 1 1 -127.897 36.4274 -174.85 + 66 160.836 262 1 1 -127.75 36.6356 -174.551 + 66 107.206 890 1 0 -79.5395 -1.99821 -175.85 + 66 172.967 490 0 1 -81.8924 0.378516 -204.45 + 66 99.8818 902 0 0 -82.1628 0.568103 -205.85 + 66 37.4871 497 1 1 -80.4766 -1.49934 -174.85 + 66 109.447 849 7 0 -64.6722 -10.25 3.88436 + 66 267.706 840 4 0 -63.9853 -11.958 -85.85 + 66 296.863 840 3 0 -63.8407 -12.0036 -115.85 + 66 121.974 842 1 0 -64.006 -11.5709 -175.85 + 66 114.268 581 0 1 -63.8225 -11.8374 -204.45 + 66 18.5328 580 3 1 -63.85 -11.9985 -114.839 + 66 77.0206 853 3 0 -63.5268 -9.27255 -115.85 + 66 82.201 854 3 0 -63.4904 -9.25 -115.859 + 66 119.251 576 2 1 -64.7688 -11.8377 -144.45 + 66 115.903 573 1 1 -65.2936 -11.4097 -174.45 + 66 132.384 571 0 1 -65.7991 -11.6877 -204.45 + 66 149.85 1094 3 0 -104.978 38.9784 -116.25 + 66 169.705 582 9 1 -63.5899 -10.9879 65.55 + 66 105.694 845 9 0 -63.5207 -10.975 64.15 + 66 137.499 590 8 1 -62.0174 -10.6891 35.55 + 66 126.938 846 8 0 -61.9394 -10.705 34.15 + 66 112.516 598 7 1 -60.4349 -11.0563 5.55 + 66 111.104 844 7 0 -60.3789 -11.0751 4.15 + 66 30.4741 603 6 1 -59.2548 -11.3697 -24.45 + 66 188.246 604 6 1 -59.25 -11.3648 -24.529 + 66 57.3282 613 5 1 -57.2689 -9.36665 -54.45 + 66 44.2221 614 5 1 -57.25 -9.35306 -54.6897 + 66 134.792 853 5 0 -57.153 -9.28271 -55.85 + 66 145.468 626 4 1 -54.7881 -7.52408 -84.45 + 66 108.074 863 4 0 -54.7663 -7.42496 -85.85 + 66 192.887 628 3 1 -54.3299 -5.17286 -114.45 + 66 150.464 875 3 0 -54.3236 -5.03233 -115.85 + 66 139.393 628 2 1 -54.35 -2.10958 -144.45 + 66 104.037 890 2 0 -54.3318 -1.95217 -145.85 + 66 145.648 630 1 1 -53.9049 1.25775 -174.45 + 66 132.237 906 1 0 -53.9087 1.36405 -175.85 + 66 181.163 629 0 1 -54.1291 3.11566 -204.45 + 66 419.156 915 0 0 -54.095 3.20329 -205.851 + 66 209.819 628 7 0 20.2036 -54.2871 3.75005 + 66 70.2602 629 7 0 20.2509 -54.25 3.87708 + 66 6.60114 631 1 1 -53.85 1.24813 -174.472 + 66 203.106 874 3 0 -54.2512 -5.05 -116.026 + 66 29.3933 991 3 0 -55.2516 18.3906 -116.25 + 66 124.698 992 3 0 -55.2514 18.45 -116.181 + 66 220.157 993 3 0 -55.3614 18.6502 -116.115 + 66 275.106 994 3 0 -55.7699 18.85 -116.058 + 66 259.277 635 0 1 -52.9086 -12.8839 -204.45 + 66 144.087 838 0 0 -53.0958 -12.45 -205.906 + 66 39.379 645 8 1 -51.0167 -17.0088 35.15 + 66 121.661 605 6 1 -58.9876 -11.4711 -24.4514 + 66 120.832 617 5 1 -56.6233 -10.5556 -54.4501 + 66 122.672 848 5 0 -56.2555 -10.3939 -55.85 + 66 104.099 652 4 1 -49.533 -6.87656 -84.45 + 66 120.413 865 4 0 -49.2084 -6.86819 -85.85 + 66 143.124 678 3 1 -44.3525 -5.70193 -114.45 + 66 8.33084 679 3 1 -44.2499 -5.80446 -114.838 + 66 59.0459 870 3 0 -44.0054 -6.0164 -115.85 + 66 70.3839 869 3 0 -43.9629 -6.05 -116.008 + 66 115.482 731 2 1 -33.8464 -12.4829 -144.45 + 66 84.6238 732 2 1 -33.65 -12.4854 -144.652 + 66 0.108596 733 2 1 -33.45 -12.4801 -144.849 + 66 122.256 837 2 0 -32.3342 -12.4734 -145.85 + 66 46.7793 838 2 0 -31.9885 -12.45 -146.151 +Number of digits in this event: 159 +Using G4ParticleGun... +Particle energy: 9.96168 LIN +Particle: e- +Event: 67 +Number of tracker hits in this event: 57 + 67 135.845 853 11 1 -9.27077 31.6662 125.55 + 67 170.305 1058 11 0 -9.27186 31.6664 124.15 + 67 136.612 853 10 1 -9.29167 31.6681 95.55 + 67 116.504 1058 10 0 -9.29386 31.6677 94.15 + 67 103.899 853 9 1 -9.33595 31.657 65.55 + 67 105.26 1058 9 0 -9.33925 31.6563 64.15 + 67 216.85 853 8 1 -9.40833 31.6481 35.55 + 67 97.6018 1057 8 0 -9.41191 31.6474 34.15 + 67 111.436 852 7 1 -9.48552 31.6288 5.55 + 67 107.242 1057 7 0 -9.48907 31.6281 4.15 + 67 175.189 852 6 1 -9.5605 31.6124 -24.45 + 67 125.458 1057 6 0 -9.56477 31.6125 -25.85 + 67 172.099 851 5 1 -9.65461 31.6126 -54.45 + 67 129.568 1057 5 0 -9.65903 31.6132 -55.85 + 67 276.805 851 4 1 -9.75622 31.6289 -84.45 + 67 143.523 1057 4 0 -9.76131 31.6288 -85.85 + 67 147.35 850 3 1 -9.86963 31.6265 -114.45 + 67 97.506 1057 3 0 -9.8745 31.626 -115.85 + 67 131.971 850 2 1 -9.97303 31.621 -144.45 + 67 94.7733 1057 2 0 -9.97759 31.6209 -145.85 + 67 136.624 849 1 1 -10.067 31.621 -174.45 + 67 266.998 1057 1 0 -10.0708 31.6204 -175.85 + 67 107.582 849 0 1 -10.1508 31.6089 -204.45 + 67 154.083 1057 0 0 -10.1555 31.6088 -205.85 + 67 72.3964 1072 1 0 -11.9068 34.4747 -176.25 + 67 115.769 848 1 1 -10.25 31.5683 -174.588 + 67 8.49104 784 0 1 -23.0582 32.9507 -204.45 + 67 146.724 785 0 1 -23.0499 32.9366 -204.468 + 67 137.305 1060 0 0 -22.342 32.1321 -205.85 + 67 105.597 1059 0 0 -22.2783 32.0498 -205.992 + 67 116.409 1061 0 0 -22.1989 32.25 -206.066 + 67 85.2844 1055 4 0 -9.612 31.1086 -85.85 + 67 182.784 1054 4 0 -9.60608 31.05 -85.9877 + 67 146.654 1053 4 0 -9.74132 30.85 -86.006 + 67 56.9106 850 4 1 -10.0238 32.4445 -84.85 + 67 48.9885 1062 4 0 -8.64263 32.5305 -85.85 + 67 102.038 852 5 1 -9.65 31.5907 -54.6238 + 67 28.0541 1046 5 0 -9.97412 29.3357 -55.85 + 67 57.8994 1045 5 0 -9.99457 29.25 -55.8834 + 67 281.393 845 5 1 -10.9098 25.1414 -54.85 + 67 361.309 844 5 1 -11.05 24.7913 -54.5788 + 67 188.123 403 1 1 -99.35 63.011 -174.454 + 67 131.727 402 1 1 -99.55 63.2307 -174.662 + 67 201.053 1221 1 0 -99.4972 64.2565 -175.85 + 67 77.392 479 1 0 -107.111 -84.1647 -176.25 + 67 240.961 478 1 0 -107.11 -84.2502 -176.242 + 67 9.36725 378 1 1 -104.384 -83.3495 -174.85 + 67 196.183 379 1 1 -104.35 -83.3449 -174.832 + 67 134.911 380 1 1 -104.15 -83.1521 -174.592 + 67 12.3189 946 0 1 9.29455 49.2587 -204.85 + 67 221.332 854 10 1 -9.25 31.7065 95.5257 + 67 96.3513 855 10 1 -9.05 31.8389 95.3782 + 67 115.84 856 10 1 -8.84965 31.9233 95.3812 + 67 48.929 857 10 1 -8.65 31.9134 95.2121 + 67 10.3154 1054 10 0 -8.53016 30.8667 94.1499 + 67 100.124 1053 10 0 -8.53152 30.85 94.1363 + 67 265.632 1052 10 0 -8.52633 30.65 94.0308 +Number of digits in this event: 32 +Using G4ParticleGun... +Particle energy: 5.06193 LIN +Particle: e- +Event: 68 +Number of tracker hits in this event: 116 + 68 429.783 1016 8 1 23.4146 -134.831 35.55 + 68 434.809 226 8 0 23.4141 -134.832 34.15 + 68 146.036 1016 7 1 23.4034 -134.861 5.55 + 68 94.7888 226 7 0 23.4025 -134.862 4.15 + 68 131.337 1016 6 1 23.381 -134.873 -24.45 + 68 139.049 226 6 0 23.3816 -134.873 -25.85 + 68 382.214 1016 5 1 23.4014 -134.877 -54.45 + 68 383.043 226 5 0 23.4035 -134.877 -55.85 + 68 106.229 1017 4 1 23.4554 -134.863 -84.45 + 68 165.492 226 4 0 23.4572 -134.86 -85.85 + 68 108.3 1017 3 1 23.4933 -134.803 -114.45 + 68 141.432 226 3 0 23.4974 -134.801 -115.85 + 68 108.923 1017 2 1 23.5729 -134.772 -144.45 + 68 116.79 226 2 0 23.575 -134.772 -145.85 + 68 342.356 1017 1 1 23.6051 -134.766 -174.45 + 68 416.203 226 1 0 23.6027 -134.767 -175.85 + 68 575.657 1017 0 1 23.5489 -134.839 -204.45 + 68 479.361 226 0 0 23.5445 -134.841 -205.85 + 68 380.314 224 0 0 23.5141 -135.231 -205.85 + 68 87.7447 1016 0 1 23.4499 -135.125 -204.586 + 68 106.918 225 0 0 23.3732 -135.068 -205.85 + 68 88.1381 223 0 0 23.116 -135.35 -206.108 + 68 24.4774 1020 0 1 24.1895 -136.894 -204.85 + 68 104.567 1021 0 1 24.25 -136.951 -204.831 + 68 369.154 1022 0 1 24.45 -137.074 -204.716 + 68 38.3905 1023 0 1 24.65 -137.109 -204.496 + 68 58.9215 1220 6 1 64.1474 -16.438 -24.85 + 68 158.148 1221 6 1 64.25 -16.382 -24.6537 + 68 253.184 1018 0 1 23.6937 -134.737 -204.451 + 68 130.15 227 0 0 23.7316 -134.716 -205.85 + 68 241.081 227 8 0 23.4549 -134.75 33.7767 + 68 86.5191 228 8 0 22.7298 -134.55 33.973 + 68 10.1765 969 7 1 13.8772 -127.844 5.55 + 68 69.1989 968 7 1 13.85 -127.837 5.52012 + 68 81.2585 967 7 1 13.65 -127.835 5.2889 + 68 261.447 258 7 0 11.8271 -128.391 4.15 + 68 11.5476 826 6 1 -14.6781 -109.035 -24.45 + 68 89.3476 827 6 1 -14.65 -109.014 -24.4617 + 68 54.7176 828 6 1 -14.45 -108.889 -24.4524 + 68 97.0264 829 6 1 -14.25 -108.844 -24.5499 + 68 77.5123 830 6 1 -14.0497 -108.83 -24.7838 + 68 145.366 355 6 0 -13.5437 -108.984 -25.85 + 68 7.12071 354 6 0 -13.4962 -109.15 -26.2346 + 68 61.0691 203 6 0 -2.14147 -139.496 -26.25 + 68 36.7058 78 6 0 21.4468 -164.43 -26.2499 + 68 5.11306 1018 7 1 23.652 -134.752 5.55 + 68 205.235 1017 7 1 23.65 -134.751 5.52636 + 68 137.021 227 7 0 23.5195 -134.642 4.15 + 68 74.3552 1005 6 1 21.0609 -132.105 -24.4501 + 68 23.8278 1004 6 1 21.05 -132.072 -24.7494 + 68 220.158 241 6 0 21.0183 -131.942 -25.85 + 68 103.529 999 5 1 20.0049 -128.901 -54.45 + 68 113.6 256 5 0 19.9232 -128.894 -55.85 + 68 52.8871 988 4 1 17.6597 -128.696 -84.45 + 68 52.7225 987 4 1 17.65 -128.678 -84.6792 + 68 178.996 257 4 0 17.5935 -128.593 -85.85 + 68 121.956 981 3 1 16.4216 -126.37 -114.45 + 68 12.8022 982 3 1 16.45 -126.31 -114.82 + 68 157.453 270 3 0 16.5285 -126.144 -115.85 + 68 128.691 988 2 1 17.7555 -122.137 -144.45 + 68 131.437 289 2 0 18.0042 -122.196 -145.85 + 68 41.7118 1019 1 1 23.9685 -123.148 -174.45 + 68 127.175 1020 1 1 24.05 -123.144 -174.561 + 68 0.52935 1021 1 1 24.25 -123.14 -174.845 + 68 152.568 285 1 0 24.9269 -123.143 -175.85 + 68 33.0876 1119 0 1 43.9569 -122.696 -204.45 + 68 85.3621 1120 0 1 44.05 -122.686 -204.539 + 68 112.707 1121 0 1 44.2505 -122.669 -204.732 + 68 203.506 287 0 0 45.4459 -122.601 -205.85 + 68 114.584 1012 7 1 22.4832 -134.235 5.55 + 68 186.092 229 7 0 22.432 -134.187 4.15 + 68 88.0784 1006 6 1 21.2968 -133.946 -24.45 + 68 112.999 230 6 0 21.2536 -133.968 -25.85 + 68 124.123 1001 5 1 20.4045 -134.383 -54.45 + 68 144.253 229 5 0 20.3155 -134.327 -55.85 + 68 180.258 992 4 1 18.5388 -133.523 -84.45 + 68 189.683 233 4 0 18.341 -133.514 -85.85 + 68 225.052 971 3 1 14.3278 -133.7 -114.45 + 68 122.035 232 3 0 14.161 -133.738 -115.85 + 68 91.6308 953 2 1 10.7422 -134.44 -144.45 + 68 178.461 228 2 0 10.5722 -134.496 -145.85 + 68 109.169 937 1 1 7.60606 -135.46 -174.45 + 68 152.965 222 1 0 7.55038 -135.556 -175.85 + 68 88.5157 933 0 1 6.73372 -137.688 -204.45 + 68 154.142 213 0 0 6.72797 -137.47 -205.85 + 68 132.405 228 5 0 20.3077 -134.35 -56.1781 + 68 129.852 230 7 0 22.4495 -134.15 4.01246 + 68 27.5975 1273 6 1 74.85 177.362 -24.7825 + 68 127.261 1015 4 1 23.1189 -135.794 -84.45 + 68 145.197 221 4 0 23.054 -135.821 -85.85 + 68 109.808 1006 3 1 21.4418 -136.513 -114.45 + 68 128.986 218 3 0 21.4362 -136.52 -115.85 + 68 127.913 1005 2 1 21.129 -136.662 -144.45 + 68 167.378 216 2 0 21.1018 -136.79 -145.85 + 68 248.549 1001 1 1 20.4346 -139.803 -174.45 + 68 147.964 201 1 0 20.3536 -139.889 -175.85 + 68 168.042 992 0 1 18.5866 -141.68 -204.45 + 68 114.221 192 0 0 18.6104 -141.664 -205.85 + 68 397.156 991 0 1 18.45 -141.667 -204.465 + 68 219.228 990 0 1 18.25 -141.661 -204.528 + 68 191.216 989 0 1 18.05 -141.565 -204.682 + 68 45.7747 197 0 0 19.2527 -140.627 -205.85 + 68 197.431 198 0 0 19.2499 -140.55 -205.925 + 68 107.791 1019 4 1 23.9782 -134.241 -84.45 + 68 120.295 229 4 0 23.8975 -134.16 -85.85 + 68 86.8187 230 4 0 23.8876 -134.15 -86.0264 + 68 14.1318 1012 3 1 22.4525 -132.077 -114.45 + 68 120.621 1011 3 1 22.45 -132.074 -114.49 + 68 81.6474 240 3 0 22.3656 -131.969 -115.85 + 68 65.2561 241 3 0 22.3504 -131.95 -116.095 + 68 99.0218 1002 2 1 20.5819 -129.904 -144.45 + 68 108.372 251 2 0 20.5072 -129.807 -145.85 + 68 100.126 994 1 1 18.9431 -127.73 -174.45 + 68 110.322 262 1 0 18.8844 -127.679 -175.85 + 68 103.858 988 0 1 17.836 -126.505 -204.45 + 68 116.629 268 0 0 17.7523 -126.422 -205.85 +Number of digits in this event: 61 +Using G4ParticleGun... +Particle energy: 7.48816 LIN +Particle: e- +Event: 69 +Number of tracker hits in this event: 66 + 69 120.606 932 10 1 6.58595 -103.375 95.55 + 69 139.717 383 10 0 6.58675 -103.376 94.15 + 69 124.398 932 9 1 6.60945 -103.375 65.55 + 69 94.2747 383 9 0 6.6095 -103.374 64.15 + 69 98.9133 932 8 1 6.63557 -103.337 35.55 + 69 103.704 384 8 0 6.6362 -103.335 34.15 + 69 188.887 932 7 1 6.64268 -103.293 5.55 + 69 122.035 384 7 0 6.64458 -103.292 4.15 + 69 116.134 933 6 1 6.69042 -103.252 -24.45 + 69 149.475 384 6 0 6.69202 -103.249 -25.85 + 69 140.095 933 5 1 6.72931 -103.188 -54.45 + 69 100.497 384 5 0 6.72912 -103.187 -55.85 + 69 134.243 933 4 1 6.74018 -103.163 -84.45 + 69 113.85 384 4 0 6.73967 -103.153 -85.85 + 69 187.003 933 3 1 6.74296 -102.948 -114.45 + 69 103.215 386 3 0 6.74727 -102.937 -115.85 + 69 139.602 933 2 1 6.84925 -102.697 -144.45 + 69 133.421 387 2 0 6.8504 -102.685 -145.85 + 69 99.1245 934 1 1 6.8885 -102.449 -174.45 + 69 118.806 388 1 0 6.89081 -102.438 -175.85 + 69 109.264 934 0 1 6.93307 -102.213 -204.45 + 69 105.367 389 0 0 6.93517 -102.193 -205.85 + 69 101.609 1229 1 1 65.85 -115.19 -174.841 + 69 211.851 932 6 1 6.59374 -103.531 -24.45 + 69 125.214 379 6 0 6.51206 -104.176 -25.8501 + 69 3.32151 378 6 0 6.47894 -104.35 -26.2354 + 69 24.4554 164 6 0 14.1633 -147.298 -26.25 + 69 111.947 163 6 0 14.1826 -147.35 -26.2001 + 69 178.388 972 6 1 14.4536 -147.665 -24.8498 + 69 97.7595 973 6 1 14.8279 -147.976 -24.45 + 69 59.8039 154 6 0 14.2402 -149.183 -25.8501 + 69 92.1309 153 6 0 14.1868 -149.35 -26.022 + 69 56.3155 152 6 0 14.1625 -149.55 -26.1716 + 69 286.357 2 6 0 42.827 -179.694 -26.25 + 69 99.6223 3 6 0 43.5044 -179.55 -25.9176 + 69 222.577 4 6 0 43.776 -179.35 -26.0202 + 69 64.2035 5 6 0 43.9721 -179.15 -26.1678 + 69 177.718 932 3 1 6.5671 -103.383 -114.45 + 69 141.681 383 3 0 6.21147 -103.356 -115.85 + 69 102.345 889 2 1 -2.07003 -104.824 -144.45 + 69 113.484 376 2 0 -2.21442 -104.805 -145.851 + 69 136.281 883 1 1 -3.36747 -105.674 -174.45 + 69 49.1679 375 1 0 -3.21689 -105.009 -175.85 + 69 86.8133 376 1 0 -3.20805 -104.95 -175.978 + 69 3.37972 887 0 1 -2.63245 -89.0149 -204.45 + 69 69.677 886 0 1 -2.65 -89.0174 -204.458 + 69 70.2375 885 0 1 -2.85 -89.0494 -204.553 + 69 74.8569 884 0 1 -3.05 -89.0625 -204.663 + 69 71.5588 883 0 1 -3.25 -89.081 -204.764 + 69 340.575 452 0 0 -5.70286 -89.5039 -205.85 + 69 4.07651 827 0 1 -14.65 -88.8913 -204.816 + 69 224.538 828 0 1 -14.4496 -88.9226 -204.607 + 69 11.2913 384 3 0 7.12973 -103.159 -115.85 + 69 104.896 385 3 0 7.14988 -103.15 -115.899 + 69 120.905 1011 2 1 22.3665 -97.0871 -144.45 + 69 102.511 1010 2 1 22.2499 -97.2142 -144.574 + 69 16.9043 405 2 0 21.6924 -99.0872 -145.85 + 69 65.7551 404 2 0 21.6745 -99.1502 -145.885 + 69 85.1388 403 2 0 21.6246 -99.3502 -145.991 + 69 93.5373 402 2 0 21.4471 -99.5501 -146.051 + 69 70.5043 401 2 0 21.2241 -99.75 -146.103 + 69 57.9089 400 2 0 21.1105 -99.9506 -146.127 + 69 67.7785 399 2 0 21.0471 -100.15 -146.015 + 69 43.248 398 2 0 21.1044 -100.35 -145.93 + 69 776.891 1012 2 1 22.45 -102.505 -144.814 + 69 160.253 1013 2 1 22.6502 -102.784 -144.682 +Number of digits in this event: 26 +Using G4ParticleGun... +Particle energy: 2.1223 LIN +Particle: e- +Event: 70 +Number of tracker hits in this event: 48 + 70 151.114 525 9 1 -75.0004 -100.599 65.55 + 70 120.167 397 9 0 -74.9998 -100.597 64.15 + 70 209 525 8 1 -74.9952 -100.562 35.55 + 70 190.025 397 8 0 -74.9861 -100.566 34.15 + 70 121.799 526 7 1 -74.7908 -100.628 5.55 + 70 188.836 397 7 0 -74.7795 -100.63 4.15 + 70 420.118 527 6 1 -74.561 -100.643 -24.45 + 70 192.006 397 6 0 -74.5452 -100.639 -25.85 + 70 118.363 529 5 1 -74.1993 -100.552 -54.45 + 70 179.864 397 5 0 -74.1809 -100.55 -55.85 + 70 34.7143 398 5 0 -74.1777 -100.55 -56.0967 + 70 229.843 531 4 1 -73.8109 -100.505 -84.45 + 70 143.67 398 4 0 -73.7898 -100.502 -85.85 + 70 160.888 533 3 1 -73.3338 -100.432 -114.45 + 70 138.085 398 3 0 -73.3115 -100.434 -115.85 + 70 106.563 535 2 1 -72.8583 -100.471 -144.45 + 70 152.382 398 2 0 -72.8344 -100.465 -145.85 + 70 261.657 538 1 1 -72.3339 -100.328 -174.45 + 70 341.329 399 1 0 -72.3139 -100.317 -175.85 + 70 125.792 540 0 1 -71.9001 -100.094 -204.45 + 70 218.404 400 0 0 -71.8732 -100.088 -205.85 + 70 14.875 119 3 1 -156.15 -24.2948 -114.547 + 70 62.2616 120 3 1 -156.15 -24.271 -114.513 + 70 116.809 539 1 1 -72.2498 -100.341 -174.745 + 70 225.008 398 6 0 -74.698 -100.55 -25.942 + 70 6.78848 526 6 1 -74.65 -100.554 -24.7953 + 70 67.8872 526 8 1 -74.85 -100.581 35.376 + 70 70.3009 399 8 0 -74.316 -100.3 34.15 + 70 61.2272 400 8 0 -74.2176 -100.15 33.9466 + 70 31.9189 401 8 0 -74.2708 -99.9499 33.8211 + 70 41.8297 981 8 0 -111.068 16.323 33.75 + 70 66.3842 982 8 0 -111.166 16.45 33.8393 + 70 108.645 983 8 0 -111.221 16.6502 33.9251 + 70 300.378 344 8 1 -111.235 17.0027 35.1503 + 70 99.9388 343 8 1 -111.35 16.9075 35.5242 + 70 49.3987 980 8 0 -111.06 16.0731 34.15 + 70 164.104 979 8 0 -111.013 16.0499 34.0069 + 70 54.5188 978 8 0 -110.806 15.8498 33.7778 + 70 237.431 525 2 1 -75.0309 -100.317 -144.45 + 70 247.027 399 2 0 -75.083 -100.33 -145.85 + 70 134.201 518 1 1 -76.3268 -101 -174.45 + 70 121.321 395 1 0 -76.4155 -101.089 -175.85 + 70 120.787 509 0 1 -78.2336 -102.977 -204.45 + 70 41.0386 508 0 1 -78.25 -102.992 -204.725 + 70 130.317 385 0 0 -78.3036 -103.058 -205.85 + 70 189.244 525 1 1 -74.9598 -100.145 -174.45 + 70 111.011 524 0 1 -75.0543 -100.74 -204.45 + 70 113.117 396 0 0 -75.0513 -100.781 -205.85 +Number of digits in this event: 32 +Using G4ParticleGun... +Particle energy: 8.62847 LIN +Particle: e- +Event: 71 +Number of tracker hits in this event: 194 + 71 141.939 835 11 1 -12.9828 -77.0888 125.55 + 71 169.168 514 11 0 -12.9828 -77.0881 124.15 + 71 150.271 835 10 1 -12.9798 -77.0686 95.55 + 71 155.441 514 10 0 -12.9801 -77.067 94.15 + 71 144.578 835 9 1 -12.9865 -77.0341 65.55 + 71 86.2196 515 9 0 -12.9858 -77.0355 64.15 + 71 104.193 835 8 1 -12.952 -77.0723 35.55 + 71 105.912 514 8 0 -12.9504 -77.0685 34.15 + 71 114.667 835 7 1 -12.9474 -77.0123 5.55 + 71 141.521 515 7 0 -12.9409 -77.0099 4.15 + 71 112.533 836 6 1 -12.8163 -76.9223 -24.45 + 71 380.931 515 6 0 -12.8066 -76.9135 -25.85 + 71 148.404 837 5 1 -12.616 -76.7278 -54.45 + 71 110.989 516 5 0 -12.6157 -76.7133 -55.85 + 71 365.155 837 4 1 -12.6301 -76.3991 -84.45 + 71 101.493 518 4 0 -12.6373 -76.3826 -85.85 + 71 474.996 836 3 1 -12.7798 -76.0147 -114.45 + 71 280.294 520 3 0 -12.7883 -75.9988 -115.85 + 71 471.405 835 2 1 -13.0191 -75.6452 -144.45 + 71 240.266 522 2 0 -13.0286 -75.624 -145.85 + 71 129.432 834 1 1 -13.2236 -75.1741 -174.45 + 71 129.237 524 1 0 -13.2285 -75.1448 -175.85 + 71 129.367 833 0 1 -13.3067 -74.5089 -204.45 + 71 126.149 527 0 0 -13.2899 -74.4663 -205.85 + 71 120.421 530 2 0 -12.8282 -74.0056 -145.85 + 71 179.261 844 1 1 -11.1779 -69.0631 -174.45 + 71 159.513 555 1 0 -11.3815 -69.016 -175.85 + 71 116.493 821 0 1 -15.7125 -68.1514 -204.45 + 71 153.323 560 0 0 -15.9658 -68.0498 -205.85 + 71 132.519 852 1 0 -5.58193 -9.65 -176.126 + 71 118.513 519 3 0 -12.693 -76.0829 -115.85 + 71 151.416 840 2 1 -12.0464 -75.7201 -144.45 + 71 122.974 839 2 1 -12.05 -75.7005 -144.829 + 71 224.424 838 1 1 -12.3538 -74.124 -174.45 + 71 175.658 530 1 0 -12.4307 -73.9596 -175.85 + 71 267.867 829 0 1 -14.1499 -71.0009 -204.45 + 71 89.5899 545 0 0 -14.2097 -70.8756 -205.85 + 71 40.944 546 0 0 -14.2193 -70.85 -206.119 + 71 54.1499 655 4 0 -37.4449 -49.05 -85.9102 + 71 223.414 334 3 0 -43.7295 -113.262 -116.25 + 71 448.29 674 3 1 -45.1507 -113.247 -114.849 + 71 152.528 673 3 1 -45.25 -113.247 -114.734 + 71 264.49 672 3 1 -45.4501 -113.224 -114.521 + 71 180.519 335 3 0 -44.6558 -112.977 -115.85 + 71 187.933 394 3 0 5.972 -101.315 -116.25 + 71 206.618 395 3 0 6.42347 -101.15 -116.124 + 71 120.902 396 3 0 6.43169 -100.95 -116.129 + 71 229.501 397 3 0 6.36559 -100.75 -116.191 + 71 217.827 513 4 0 -12.3769 -77.2746 -85.8504 + 71 105.816 856 3 1 -8.83154 -88.0026 -114.45 + 71 17.7991 458 3 0 -8.77286 -88.4285 -115.85 + 71 78.9642 457 3 0 -8.76914 -88.45 -115.919 + 71 130.42 863 2 1 -7.30878 -97.7453 -144.45 + 71 27.8442 409 2 0 -7.35003 -98.3116 -145.85 + 71 80.0986 408 2 0 -7.35238 -98.3501 -145.947 + 71 143.445 861 1 1 -7.65837 -109.983 -174.45 + 71 34.7803 348 1 0 -7.67452 -110.539 -175.85 + 71 108.519 347 1 0 -7.67492 -110.55 -175.877 + 71 114.411 860 0 1 -8.00292 -122.292 -204.45 + 71 109.536 287 0 0 -8.1528 -122.644 -205.85 + 71 0.885319 944 1 1 8.90996 -31.9292 -174.85 + 71 110.998 859 0 1 -8.05 -44.0377 -204.66 + 71 254.439 835 6 1 -12.9897 -76.9417 -24.45 + 71 273.435 836 5 1 -12.8408 -76.9667 -54.45 + 71 123.673 515 5 0 -12.8347 -76.9708 -55.85 + 71 128.119 836 4 1 -12.7137 -77.0477 -84.45 + 71 28.9841 515 4 0 -12.702 -77.0497 -85.85 + 71 81.0757 514 4 0 -12.701 -77.05 -85.9791 + 71 127.84 837 3 1 -12.5399 -77.1742 -114.45 + 71 121.587 514 3 0 -12.5374 -77.1709 -115.85 + 71 127.262 837 2 1 -12.4823 -77.1424 -144.45 + 71 439.892 514 2 0 -12.4799 -77.1136 -145.85 + 71 155.082 518 1 0 -12.4369 -76.4493 -175.85 + 71 153.173 837 0 1 -12.4944 -75.844 -204.45 + 71 224.654 521 0 0 -12.4488 -75.8401 -205.85 + 71 171.487 673 1 1 -45.2898 -21.8964 -174.85 + 71 275.944 513 2 0 -12.0717 -77.25 -146.05 + 71 184.047 512 2 0 -12.0202 -77.45 -145.986 + 71 27.44 191 12 1 -141.75 65.5048 155.462 + 71 112.792 514 5 0 -12.7778 -77.1113 -55.85 + 71 137.635 839 3 1 -12.2257 -77.414 -114.45 + 71 113.723 513 3 0 -12.226 -77.436 -115.85 + 71 113.119 511 2 0 -12.082 -77.7777 -145.85 + 71 479.926 840 1 1 -11.9322 -77.8362 -174.45 + 71 561.217 511 1 0 -11.9267 -77.7637 -175.85 + 71 139.566 841 0 1 -11.8383 -76.0777 -204.45 + 71 199.597 520 0 0 -11.7958 -75.9769 -205.85 + 71 72.4966 838 0 1 -12.25 -75.9031 -204.666 + 71 111.218 828 0 1 -14.336 -76.5491 -204.45 + 71 31.2901 519 0 0 -14.4579 -76.1008 -205.85 + 71 109.398 577 0 0 -22.5511 -64.5858 -206.25 + 71 103.962 785 0 1 -22.9461 -64.2859 -204.85 + 71 31.8781 784 0 1 -23.05 -64.2089 -204.559 + 71 17.0899 781 0 1 -23.8114 -63.5783 -204.45 + 71 58.4018 780 0 1 -23.85 -63.5704 -204.466 + 71 76.1408 779 0 1 -24.05 -63.5404 -204.551 + 71 49.4439 778 0 1 -24.25 -63.5334 -204.636 + 71 53.1238 777 0 1 -24.4506 -63.5284 -204.688 + 71 49.3514 776 0 1 -24.65 -63.5223 -204.699 + 71 67.1329 775 0 1 -24.85 -63.4905 -204.687 + 71 99.7211 774 0 1 -25.05 -63.466 -204.665 + 71 49.4673 773 0 1 -25.2501 -63.4581 -204.62 + 71 95.5199 772 0 1 -25.45 -63.4347 -204.594 + 71 91.0095 771 0 1 -25.65 -63.321 -204.563 + 71 52.185 770 0 1 -25.85 -63.0862 -204.535 + 71 66.9421 769 0 1 -26.1177 -62.7755 -204.45 + 71 83.457 768 0 1 -26.25 -62.569 -204.515 + 71 277.429 767 0 1 -26.45 -62.3337 -204.612 + 71 56.9427 766 0 1 -26.65 -61.8381 -204.808 + 71 9.52912 609 0 0 -29.0939 -58.1012 -205.85 + 71 57.9268 610 0 0 -29.1243 -58.05 -205.858 + 71 58.233 610 0 1 -57.8705 -31.7966 -204.85 + 71 12.7066 609 0 1 -58.05 -31.6955 -204.85 + 71 53.2379 752 0 0 -62.8805 -29.541 -205.85 + 71 1.69426 532 0 1 -73.6409 -29.7867 -204.85 + 71 3.59468 531 0 1 -73.65 -29.7875 -204.849 + 71 75.3495 737 0 0 -91.9846 -32.5307 -205.85 + 71 18.1415 414 0 1 -97.2702 -33.0856 -204.85 + 71 36.8129 413 0 1 -97.3509 -33.0785 -204.839 + 71 68.2694 412 0 1 -97.5501 -33.029 -204.802 + 71 61.653 411 0 1 -97.75 -32.9962 -204.705 + 71 63.2573 410 0 1 -97.95 -32.9606 -204.571 + 71 66.6878 409 0 1 -98.15 -32.8706 -204.498 + 71 69.8819 408 0 1 -98.35 -32.7757 -204.519 + 71 102.305 407 0 1 -98.5501 -32.6131 -204.534 + 71 79.1959 406 0 1 -98.75 -32.4355 -204.666 + 71 133.57 405 0 1 -98.95 -32.2904 -204.75 + 71 32.0877 744 0 0 -99.7073 -31.1143 -205.85 + 71 98.5063 745 0 0 -99.7467 -31.05 -205.913 + 71 108.255 845 0 1 -10.8952 -76.2988 -204.45 + 71 44.576 522 0 0 -11.2972 -75.6498 -206.115 + 71 53.3091 215 3 0 -90.2788 -137.036 -116.25 + 71 281.775 214 3 0 -90.4233 -137.15 -116.102 + 71 30.9815 445 3 1 -91.1268 -138.017 -114.85 + 71 130.774 444 3 1 -91.15 -138.048 -114.804 + 71 107.187 443 3 1 -91.3503 -138.235 -114.575 + 71 175.298 442 3 1 -91.5502 -138.546 -114.514 + 71 206.229 206 3 0 -92.0189 -138.851 -115.851 + 71 362.053 205 3 0 -92.1522 -138.95 -116.041 + 71 146.605 216 3 0 -130.375 -136.923 -116.25 + 71 206.475 217 3 0 -130.746 -136.75 -115.926 + 71 68.7058 218 3 0 -131.156 -136.55 -115.963 + 71 74.5618 219 3 0 -131.312 -136.35 -116.103 + 71 96.9622 690 3 0 -154.951 -41.9522 -116.249 + 71 259.852 689 3 0 -154.978 -42.05 -116.126 + 71 89.7742 311 3 0 -46.7709 -117.932 -116.25 + 71 59.9619 310 3 0 -46.6996 -117.95 -116.159 + 71 83.2714 312 3 0 -46.3581 -117.75 -115.906 + 71 0.17411 313 3 0 -46.255 -117.55 -115.85 + 71 290.217 671 3 1 -45.7823 -116.368 -114.849 + 71 106.933 675 3 1 -45.05 -116.027 -114.586 + 71 65.3607 320 3 0 -45.2221 -116.108 -115.85 + 71 111.336 319 3 0 -45.301 -116.15 -115.95 + 71 232.151 318 3 0 -45.4363 -116.35 -116.096 + 71 9.66477 143 1 1 -151.35 147.838 -174.624 + 71 108.58 142 1 1 -151.55 148.155 -174.564 + 71 97.6794 141 1 1 -151.75 148.266 -174.515 + 71 345.657 140 1 1 -151.95 148.267 -174.582 + 71 9.67629 353 2 1 -109.467 -20.7474 -144.45 + 71 150.006 838 3 1 -12.2625 -77.3839 -114.451 + 71 38.337 510 3 0 -11.9298 -77.9988 -115.85 + 71 68.6653 509 3 0 -11.8919 -78.0503 -115.986 + 71 25.3762 439 3 0 -1.48482 -92.3267 -116.25 + 71 229.165 438 3 0 -1.47457 -92.35 -116.22 + 71 167.075 895 3 1 -0.938889 -93.6358 -114.85 + 71 37.0248 628 1 0 -7.40673 -54.2938 -176.25 + 71 91.8067 629 1 0 -7.42775 -54.2499 -176.128 + 71 71.8248 711 6 0 14.3066 -37.85 -26.0249 + 71 212.96 835 0 1 -12.8991 -76.8539 -204.45 + 71 154.874 516 0 0 -12.9037 -76.8442 -205.85 + 71 95.9549 1528 12 0 35.1951 125.842 153.75 + 71 138.422 515 0 0 -12.9004 -76.8566 -205.85 + 71 137.832 515 2 0 -12.9831 -76.9414 -145.85 + 71 355.487 833 1 1 -13.4441 -77.6777 -174.45 + 71 64.948 832 1 1 -13.45 -77.6898 -174.781 + 71 169.259 830 0 1 -13.9057 -78.9166 -204.45 + 71 109.657 505 0 0 -13.9465 -79.0197 -205.851 + 71 57.7429 852 1 1 -9.48363 -81.4598 -174.45 + 71 166.124 853 1 1 -9.45 -81.4542 -174.6 + 71 18.5827 492 1 0 -9.14139 -81.4554 -175.85 + 71 97.9961 493 1 0 -9.12116 -81.45 -175.934 + 71 65.5409 612 1 0 12.1139 -57.5403 -176.25 + 71 75.7691 613 1 0 12.1936 -57.4499 -176.067 + 71 222.367 962 1 1 12.6177 -56.9519 -174.85 + 71 90.6975 963 1 1 12.65 -56.9163 -174.74 + 71 6.66275 617 1 0 12.4403 -56.6435 -175.85 + 71 101.821 616 1 0 12.4362 -56.6503 -175.877 + 71 62.2954 854 1 1 -9.25 -81.3107 -174.742 + 71 138.758 497 1 0 -8.27822 -80.6214 -175.85 + 71 12.8225 496 1 0 -8.12273 -80.65 -176.005 + 71 26.8475 742 1 0 -17.5809 -31.5234 -176.25 + 71 24.0386 767 1 0 -11.598 -26.6105 -176.25 + 71 141.394 766 1 0 -11.5558 -26.65 -176.225 + 71 266.257 765 1 0 -11.3767 -26.85 -176.011 +Number of digits in this event: 88 +Using G4ParticleGun... +Particle energy: 7.29713 LIN +Particle: e- +Event: 72 +Number of tracker hits in this event: 63 + 72 117.305 822 10 1 -15.5948 -109.597 95.55 + 72 107.672 352 10 0 -15.595 -109.599 94.15 + 72 111.023 822 9 1 -15.6079 -109.646 65.55 + 72 133.829 352 9 0 -15.6091 -109.648 64.15 + 72 108.421 822 8 1 -15.6391 -109.678 35.55 + 72 117.473 352 8 0 -15.6408 -109.678 34.15 + 72 113.069 821 7 1 -15.6742 -109.677 5.55 + 72 143.615 352 7 0 -15.6759 -109.677 4.15 + 72 141.685 821 6 1 -15.7077 -109.667 -24.45 + 72 109.129 352 6 0 -15.7071 -109.689 -25.85 + 72 102.671 821 5 1 -15.6774 -110.072 -54.45 + 72 123.689 350 5 0 -15.6699 -110.113 -55.85 + 72 365.802 822 4 1 -15.5858 -110.894 -84.45 + 72 95.1362 346 4 0 -15.5881 -110.936 -85.85 + 72 380.678 821 3 1 -15.6676 -111.809 -114.45 + 72 128.265 341 3 0 -15.6652 -111.842 -115.85 + 72 185.038 822 2 1 -15.6349 -112.451 -144.45 + 72 108.261 338 2 0 -15.6538 -112.496 -145.85 + 72 176.007 819 1 1 -16.0588 -113.389 -174.45 + 72 132.621 333 1 0 -16.0787 -113.436 -175.85 + 72 105.379 818 0 1 -16.4134 -114.436 -204.45 + 72 212.856 328 0 0 -16.3977 -114.512 -205.85 + 72 59.483 1013 4 1 22.85 -142.22 -84.8485 + 72 95.567 205 2 0 -43.6585 -139.007 -146.25 + 72 355.349 352 4 0 -15.6253 -109.647 -85.85 + 72 419.103 822 3 1 -15.6142 -110.238 -114.45 + 72 119.786 349 3 0 -15.6156 -110.226 -115.85 + 72 255.89 821 2 1 -15.8047 -110.209 -144.45 + 72 116.474 349 2 0 -15.6768 -110.325 -145.85 + 72 116.596 837 1 1 -12.4852 -112.09 -174.45 + 72 14.8663 838 1 1 -12.45 -112.18 -174.808 + 72 174.143 338 1 0 -12.3504 -112.434 -175.85 + 72 232.027 852 0 1 -9.53425 -120.658 -204.45 + 72 89.5523 853 0 1 -9.45 -120.67 -204.618 + 72 127.924 296 0 0 -8.79589 -120.835 -205.85 + 72 55.9117 851 0 1 -9.65 -120.484 -204.717 + 72 16.2562 301 0 0 -10.313 -119.784 -205.85 + 72 111.241 302 0 0 -10.3411 -119.75 -205.914 + 72 28.6339 303 0 0 -10.4137 -119.55 -206.192 + 72 140.929 772 1 1 -25.5129 -115.456 -174.85 + 72 174.656 351 3 0 -15.5135 -109.772 -115.85 + 72 416.855 352 3 0 -15.405 -109.75 -116.043 + 72 170.502 351 2 0 -15.7429 -109.833 -145.85 + 72 574.477 821 1 1 -15.7993 -109.731 -174.45 + 72 172.181 352 1 0 -15.801 -109.72 -175.85 + 72 164.761 821 0 1 -15.7789 -109.466 -204.45 + 72 191.097 353 0 0 -15.7758 -109.459 -205.85 + 72 72.8668 351 1 0 -15.8088 -109.75 -175.937 + 72 147.234 822 1 1 -15.5699 -109.989 -174.85 + 72 117.234 819 0 1 -16.0958 -110.089 -204.45 + 72 127.182 354 0 0 -16.5369 -109.35 -205.877 + 72 129.16 820 0 1 -16.0085 -110.146 -204.45 + 72 129.692 349 0 0 -16.0095 -110.16 -205.85 + 72 337.391 353 1 0 -15.6791 -109.371 -175.85 + 72 14.2434 354 1 0 -15.6537 -109.35 -176.197 + 72 114.033 838 0 1 -12.3971 -106.834 -204.45 + 72 69.4112 366 0 0 -12.3812 -106.925 -205.85 + 72 22.388 365 0 0 -12.3807 -106.95 -206.144 + 72 17.8119 1240 0 1 68.05 -107.302 -204.849 + 72 26.7668 384 0 0 70.2606 -103.208 -205.85 + 72 179.68 385 0 0 70.2708 -103.15 -205.884 + 72 127.283 814 0 1 -17.0618 -108.344 -204.45 + 72 95.0594 358 0 0 -17.2072 -108.391 -205.85 +Number of digits in this event: 35 +Using G4ParticleGun... +Particle energy: 9.49891 LIN +Particle: e- +Event: 73 +Number of tracker hits in this event: 100 + 73 130.881 1099 10 1 39.9202 99.3625 95.55 + 73 138.075 1396 10 0 39.9204 99.3625 94.15 + 73 124.487 1099 9 1 39.9247 99.3623 65.55 + 73 147.295 1396 9 0 39.9244 99.3627 64.15 + 73 122.219 1099 8 1 39.918 99.3708 35.55 + 73 141.199 1396 8 0 39.9189 99.3708 34.15 + 73 136.551 1099 7 1 39.9382 99.3674 5.55 + 73 113.01 1396 7 0 39.9396 99.3674 4.15 + 73 199.59 1099 6 1 39.972 99.368 -24.45 + 73 128.392 1396 6 0 39.9729 99.3676 -25.85 + 73 291.453 1099 5 1 39.998 99.3592 -54.45 + 73 163.235 1396 5 0 39.9998 99.3592 -55.85 + 73 576.624 1099 4 1 40.033 99.3569 -84.45 + 73 222.291 1396 4 0 40.0343 99.3562 -85.85 + 73 140.136 1100 3 1 40.0588 99.3423 -114.45 + 73 119.204 1395 3 0 40.0606 99.3406 -115.85 + 73 108.063 1100 2 1 40.0997 99.3062 -144.45 + 73 142.43 1395 2 0 40.1014 99.3051 -145.85 + 73 207.859 1100 1 1 40.1362 99.2824 -174.45 + 73 148.366 1395 1 0 40.1377 99.2818 -175.85 + 73 102.289 1100 0 1 40.1646 99.2656 -204.45 + 73 163.32 1395 0 0 40.1649 99.2655 -205.85 + 73 149.656 1168 5 1 53.65 122.933 -54.7745 + 73 58.8722 1167 5 1 53.65 122.922 -54.5571 + 73 113.279 1166 5 1 53.45 122.857 -54.6527 + 73 362.128 1165 5 1 53.25 122.739 -54.7147 + 73 86.3425 1164 5 1 53.0499 122.563 -54.7233 + 73 208.18 1457 3 0 -94.4614 111.69 -116.25 + 73 56.7539 1456 3 0 -94.7081 111.55 -115.973 + 73 77.5963 551 9 0 109.749 -69.65 63.8045 + 73 412.969 1100 4 1 40.0528 99.452 -84.45 + 73 163.031 1101 4 1 40.25 101.372 -84.6632 + 73 79.6596 1102 4 1 40.45 101.632 -84.7439 + 73 55.8843 1103 4 1 40.65 101.781 -84.8209 + 73 39.6537 1104 4 1 40.85 101.913 -84.8447 + 73 12.1243 1425 4 0 43.8957 105.326 -85.8501 + 73 68.8827 1426 4 0 43.9152 105.35 -85.8573 + 73 93.7094 1427 4 0 44.1089 105.55 -85.9163 + 73 58.7385 1428 4 0 44.2896 105.75 -85.9266 + 73 117.065 1429 4 0 44.3455 105.95 -85.9873 + 73 138.976 1236 4 0 63.8434 67.4192 -86.2496 + 73 95.5674 1235 4 0 63.8966 67.25 -86.0475 + 73 165.733 1234 4 0 64.0773 67.05 -85.8921 + 73 158.951 1140 4 0 81.3752 48.0937 -86.2493 + 73 78.0184 1100 6 1 40.05 99.3794 -24.4899 + 73 193.046 1080 2 1 36.1425 94.691 -144.45 + 73 171.812 1079 2 1 36.0499 94.7584 -144.574 + 73 2.25899 1078 2 1 35.85 94.8787 -144.84 + 73 182.587 1376 2 0 35.057 95.3524 -145.85 + 73 10.3047 1575 2 0 -38.7593 135.336 -146.25 + 73 117.871 1576 2 0 -38.7731 135.35 -146.238 + 73 87.8928 1577 2 0 -38.9703 135.55 -146.028 + 73 75.4363 700 2 1 -39.9058 136.705 -144.85 + 73 153.533 699 2 1 -40.05 136.86 -144.698 + 73 46.3501 698 2 1 -40.25 137.065 -144.536 + 73 127.306 1371 2 0 35.7513 94.4943 -145.85 + 73 101.997 1048 1 1 29.769 92.5152 -174.45 + 73 160.142 1049 1 1 29.85 92.7278 -174.586 + 73 24.5866 1386 1 0 33.3532 97.5079 -175.85 + 73 29.3006 1387 1 0 33.3846 97.55 -175.859 + 73 42.1012 1088 1 1 37.7572 100.185 -174.85 + 73 89.6233 1089 1 1 37.85 100.263 -174.784 + 73 76.1024 1090 1 1 38.0501 100.473 -174.601 + 73 75.3074 1091 1 1 38.25 100.599 -174.527 + 73 67.5002 1092 1 1 38.4501 100.705 -174.578 + 73 74.6163 1093 1 1 38.6501 100.761 -174.63 + 73 111.647 1094 1 1 38.8502 100.764 -174.69 + 73 529.516 1095 1 1 39.05 100.819 -174.532 + 73 55.8816 1096 1 1 39.2501 101.298 -174.671 + 73 75.5315 1399 4 0 40.2804 99.9638 -85.8503 + 73 56.8928 1400 4 0 40.2984 100.15 -86.0785 + 73 139.418 1394 5 0 39.9293 99.0379 -55.85 + 73 3.72225 1393 5 0 39.9182 98.95 -56.2451 + 73 88.079 1364 4 0 39.6072 93.0579 -85.8502 + 73 37.2552 1363 4 0 39.4992 92.95 -86.112 + 73 137.54 1050 3 1 30.0943 80.9264 -114.45 + 73 97.7388 1051 3 1 30.25 80.7301 -114.58 + 73 54.6956 1052 3 1 30.45 80.5095 -114.735 + 73 282.431 1295 3 0 31.7013 79.1474 -115.85 + 73 188.206 1294 3 0 31.7956 79.05 -115.934 + 73 120.987 1293 3 0 31.9711 78.85 -116.088 + 73 7.70308 1292 3 0 32.1147 78.6498 -116.235 + 73 40.7578 1191 2 1 58.4095 42.5028 -144.45 + 73 120.192 1192 2 1 58.45 42.4226 -144.563 + 73 63.539 1106 2 0 59.1107 41.3733 -145.85 + 73 89.9582 1105 2 0 59.1964 41.25 -146.001 + 73 97.8642 1271 1 1 74.4399 18.6431 -174.45 + 73 187.604 1270 1 1 74.2498 18.5469 -174.648 + 73 41.4103 1269 1 1 74.05 18.4744 -174.775 + 73 118.195 989 1 0 72.2353 17.9594 -175.85 + 73 178.199 988 1 0 71.9031 17.85 -176.032 + 73 44.3544 581 1 0 6.82234 -63.7156 -176.25 + 73 77.6514 580 1 0 6.81695 -63.8503 -176.17 + 73 67.1819 579 1 0 6.7853 -64.05 -176.018 + 73 14.7395 578 1 0 6.76818 -64.25 -175.887 + 73 7.83269 932 1 1 6.45197 -65.6185 -174.85 + 73 208.821 931 1 1 6.45 -65.6264 -174.844 + 73 16.8676 930 1 1 6.25 -66.2085 -174.486 + 73 95.1269 1309 5 0 54.8444 82.0077 -56.25 + 73 14.8592 1308 5 0 55.0116 81.85 -56.2185 +Number of digits in this event: 44 +Using G4ParticleGun... +Particle energy: 3.46222 LIN +Particle: e- +Event: 74 +Number of tracker hits in this event: 73 + 74 163.571 1453 9 1 110.931 -71.1175 65.55 + 74 250.78 544 9 0 110.927 -71.116 64.15 + 74 290.701 1453 8 1 110.857 -71.0945 35.55 + 74 106.135 544 8 0 110.854 -71.0955 34.15 + 74 138.668 1453 7 1 110.776 -71.1197 5.55 + 74 175.621 544 7 0 110.772 -71.1247 4.15 + 74 118.851 1452 6 1 110.698 -71.2327 -24.45 + 74 149.795 544 6 0 110.693 -71.2361 -25.85 + 74 140.407 1452 5 1 110.592 -71.3101 -54.45 + 74 121.058 543 5 0 110.587 -71.3145 -55.85 + 74 119.177 1451 4 1 110.511 -71.3909 -84.45 + 74 139.807 543 4 0 110.51 -71.3947 -85.85 + 74 107.985 1451 3 1 110.462 -71.4746 -114.45 + 74 158.272 542 3 0 110.464 -71.47 -115.85 + 74 122.432 1451 2 1 110.471 -71.434 -144.45 + 74 103.241 543 2 0 110.481 -71.4361 -145.85 + 74 99.5143 1452 1 1 110.638 -71.468 -174.45 + 74 131.179 542 1 0 110.64 -71.4639 -175.85 + 74 112.204 1452 0 1 110.645 -71.4003 -204.45 + 74 334.786 543 0 0 110.625 -71.3794 -205.85 + 74 94.0914 779 6 0 127.215 -24.0612 -26.2499 + 74 78.8159 1396 0 1 99.4534 -50.4045 -204.85 + 74 164.901 1395 0 1 99.35 -50.3936 -204.748 + 74 30.6603 544 0 0 110.602 -71.25 -205.981 + 74 13.7031 1551 1 1 130.55 -113.389 -174.729 + 74 35.5483 388 0 0 132.348 -102.39 -206.25 + 74 78.9977 387 0 0 132.445 -102.55 -206.024 + 74 61.9245 386 0 0 132.535 -102.75 -205.965 + 74 36.4246 385 0 0 132.525 -102.95 -205.889 + 74 35.4689 1565 0 1 133.33 -105.464 -204.85 + 74 133.801 1566 0 1 133.35 -105.497 -204.824 + 74 63.9327 1567 0 1 133.55 -105.659 -204.72 + 74 380.724 1568 0 1 133.75 -105.688 -204.748 + 74 37.717 1569 0 1 133.95 -105.783 -204.823 + 74 104.16 1452 8 1 110.75 -71.0304 35.4052 + 74 116.654 546 8 0 110.341 -70.7664 34.15 + 74 35.2082 1404 7 1 100.982 -65.9858 5.55 + 74 81.5618 1403 7 1 100.95 -65.9788 5.43195 + 74 150.476 570 7 0 100.624 -65.909 4.14986 + 74 92.9315 1361 6 1 92.4106 -66.7951 -24.45 + 74 4.30884 1360 6 1 92.35 -66.8007 -24.8324 + 74 111.878 566 6 0 92.1703 -66.8013 -25.85 + 74 90.7158 1337 5 1 87.5565 -67.3643 -54.45 + 74 83.4375 1336 5 1 87.45 -67.3314 -54.6477 + 74 253.254 564 5 0 86.8003 -67.07 -55.85 + 74 173.129 565 5 0 86.7509 -67.05 -55.9383 + 74 219.441 1253 4 1 70.798 -61.2776 -84.4507 + 74 148.875 594 4 0 70.5234 -61.1491 -85.85 + 74 81.692 547 8 0 110.83 -70.5474 34.1498 + 74 41.2162 548 8 0 110.821 -70.45 33.9084 + 74 93.4375 1448 7 1 109.916 -58.0412 5.55 + 74 36.6341 1449 7 1 109.95 -58.0509 5.28812 + 74 120.009 609 7 0 110.114 -58.1067 4.14966 + 74 70.2787 1478 6 1 115.803 -59.165 -24.45 + 74 168.438 1479 6 1 115.95 -59.1589 -24.4686 + 74 50.2165 1480 6 1 116.151 -59.1402 -24.4964 + 74 68.4818 1481 6 1 116.35 -59.0983 -24.517 + 74 58.921 1482 6 1 116.55 -59.0554 -24.5272 + 74 55.6022 1483 6 1 116.75 -59.0179 -24.532 + 74 53.4752 1484 6 1 116.95 -58.9801 -24.5616 + 74 60.0031 1485 6 1 117.15 -58.9476 -24.593 + 74 65.8556 1486 6 1 117.35 -58.917 -24.6235 + 74 87.9615 1487 6 1 117.55 -58.8898 -24.6627 + 74 147.86 1488 6 1 117.75 -58.87 -24.6966 + 74 95.0944 1489 6 1 117.95 -58.8634 -24.7263 + 74 56.035 1490 6 1 118.15 -58.8597 -24.7698 + 74 109.8 1491 6 1 118.35 -58.8545 -24.8164 + 74 286.195 602 6 0 121.405 -59.5278 -25.8502 + 74 44.43 1695 5 1 159.227 -66.6458 -54.4505 + 74 135.143 1696 5 1 159.35 -66.6873 -54.5471 + 74 65.2573 1697 5 1 159.55 -66.7352 -54.6746 + 74 62.4071 1698 5 1 159.75 -66.7891 -54.7907 + 74 89.2922 545 9 0 111.064 -71.0499 63.9965 +Number of digits in this event: 28 +Using G4ParticleGun... +Particle energy: 5.58533 LIN +Particle: e- +Event: 75 +Number of tracker hits in this event: 73 + 75 123.854 1099 11 1 39.8606 -61.7352 125.55 + 75 99.44 591 11 0 39.8601 -61.7377 124.15 + 75 125.331 1098 10 1 39.8485 -61.7877 95.55 + 75 133.295 591 10 0 39.8499 -61.7908 94.15 + 75 110.485 1099 9 1 39.8779 -61.8531 65.55 + 75 118.472 590 9 0 39.8807 -61.855 64.15 + 75 99.3265 1099 8 1 39.9338 -61.8962 35.55 + 75 140.738 590 8 0 39.9456 -61.8892 34.1499 + 75 121.136 1100 7 1 40.1607 -61.6671 5.55 + 75 129.626 592 7 0 40.2197 -61.4972 4.15 + 75 2.33176 1107 6 1 41.4502 -58.2707 -24.45 + 75 290.133 1106 6 1 41.45 -58.2693 -24.4571 + 75 134.323 610 6 0 41.4102 -57.9714 -25.85 + 75 137.113 1102 5 1 40.4958 -51.6692 -54.45 + 75 7.14344 1101 5 1 40.45 -51.5859 -54.837 + 75 117.495 643 5 0 40.3323 -51.3629 -55.85 + 75 12.9861 1083 4 1 36.6568 -45.0309 -84.45 + 75 130.966 1082 4 1 36.65 -45.0218 -84.4858 + 75 44.7451 676 4 0 36.4184 -44.6707 -85.85 + 75 141.486 677 4 0 36.4047 -44.65 -85.9312 + 75 66.2282 1058 3 1 31.6915 -37.3271 -114.45 + 75 64.6126 1057 3 1 31.65 -37.2847 -114.657 + 75 149.528 715 3 0 31.4198 -37.0381 -115.85 + 75 135.118 1028 2 1 25.7859 -30.78 -144.45 + 75 272.803 747 2 0 25.5375 -30.5691 -145.85 + 75 115.258 1003 1 1 20.7267 -25.8316 -174.45 + 75 117.094 772 1 0 20.5371 -25.6334 -175.85 + 75 150.096 981 0 1 16.3964 -21.3632 -204.45 + 75 101.234 794 0 0 16.3967 -21.1749 -205.85 + 75 162.048 748 2 0 25.2807 -30.4498 -146.145 + 75 90.9307 746 2 0 25.552 -30.65 -146.047 + 75 299.726 745 2 0 25.6445 -30.8501 -146.044 + 75 269.379 973 0 1 14.697 -14.1266 -204.45 + 75 116.616 592 6 0 40.8122 -61.4553 -25.9496 + 75 28.8937 593 6 0 40.8295 -61.45 -26.1295 + 75 56.3675 1113 5 1 42.7162 -60.8201 -54.45 + 75 77.3446 1114 5 1 42.85 -60.9196 -54.5766 + 75 43.9324 1115 5 1 43.05 -61.0959 -54.7513 + 75 434.91 589 5 0 44.6639 -62.1322 -55.85 + 75 240.74 588 5 0 44.8819 -62.25 -55.9816 + 75 38.9572 1198 5 1 59.7822 -61.7011 -54.85 + 75 64.5595 1197 5 1 59.65 -61.6592 -54.7883 + 75 206.235 1196 5 1 59.45 -61.6127 -54.6966 + 75 217.494 1195 5 1 59.2498 -61.6148 -54.6834 + 75 262.764 1194 5 1 59.05 -61.5507 -54.8128 + 75 35.6165 1193 5 1 58.8499 -61.2419 -54.7827 + 75 13.9779 598 5 0 58.3205 -60.2715 -55.85 + 75 281.126 599 5 0 58.3091 -60.25 -55.8761 + 75 174.464 600 5 0 58.3925 -60.05 -56.1397 + 75 5.10784 735 3 0 127.19 -33.05 -115.861 + 75 144.032 736 3 0 127.324 -32.8498 -116.025 + 75 70.886 1084 5 1 36.929 -62.7601 -54.4501 + 75 74.4809 1083 5 1 36.85 -62.6224 -54.6962 + 75 112.199 581 5 0 -20.7772 -63.6702 -56.2498 + 75 72.8179 580 5 0 -20.9796 -63.85 -56.0518 + 75 142.839 795 5 1 -20.9298 -65.1891 -54.85 + 75 141.302 796 5 1 -20.7445 -65.6147 -54.45 + 75 129.467 572 5 0 -20.7551 -65.5279 -55.85 + 75 272.408 1100 3 1 40.2267 -62.0778 -114.45 + 75 428.89 589 3 0 40.2287 -62.0793 -115.85 + 75 132.942 1101 2 1 40.2839 -62.1101 -144.45 + 75 236.587 589 2 0 40.289 -62.1093 -145.85 + 75 151.815 1101 1 1 40.3887 -62.096 -174.45 + 75 127.642 589 1 0 40.3902 -62.0904 -175.85 + 75 108.391 1101 0 1 40.4069 -62.0062 -204.45 + 75 106.151 590 0 0 40.4115 -62.0019 -205.85 + 75 141.801 1100 2 1 40.2449 -62.2161 -144.45 + 75 108.55 1100 1 1 40.2442 -62.4522 -174.45 + 75 116.383 587 1 0 40.2408 -62.4678 -175.85 + 75 156.864 1100 0 1 40.1703 -62.8017 -204.45 + 75 129.221 586 0 0 40.1645 -62.8152 -205.85 + 75 168.328 613 0 0 79.5984 -57.45 -206.169 + 75 8.90019 614 0 0 79.6697 -57.25 -206.146 +Number of digits in this event: 41 +Using G4ParticleGun... +Particle energy: 5.95254 LIN +Particle: e- +Event: 76 +Number of tracker hits in this event: 87 + 76 127.377 1260 9 1 72.0903 -100.516 65.55 + 76 167.433 398 9 0 72.0899 -100.516 64.15 + 76 111.717 1260 8 1 72.0791 -100.51 35.55 + 76 118.934 398 8 0 72.0776 -100.509 34.15 + 76 104.231 1259 7 1 72.0491 -100.495 5.55 + 76 116.146 398 7 0 72.048 -100.494 4.15 + 76 138.787 1259 6 1 72.0268 -100.463 -24.45 + 76 112.044 398 6 0 72.0241 -100.462 -25.85 + 76 192.635 1259 5 1 71.9617 -100.444 -54.45 + 76 140.014 398 5 0 71.9585 -100.444 -55.85 + 76 112.854 1259 4 1 71.8987 -100.422 -84.45 + 76 96.3373 398 4 0 71.8952 -100.423 -85.85 + 76 106.257 1258 3 1 71.8297 -100.439 -114.45 + 76 177.482 398 3 0 71.8272 -100.44 -115.85 + 76 325.312 1258 2 1 71.7794 -100.466 -144.45 + 76 164.743 398 2 0 71.776 -100.466 -145.85 + 76 122.329 1258 1 1 71.7055 -100.453 -174.45 + 76 101.609 398 1 0 71.7018 -100.453 -175.85 + 76 259.946 1257 0 1 71.6362 -100.434 -204.45 + 76 183.486 398 0 0 71.6347 -100.436 -205.85 + 76 132.578 829 3 1 -14.1287 124.759 -114.45 + 76 80.3947 1520 3 0 -13.9069 124.296 -115.85 + 76 119.384 1519 3 0 -13.8577 124.15 -115.987 + 76 79.7324 403 0 0 71.4672 -99.4979 -205.85 + 76 68.8385 404 0 0 71.4432 -99.35 -206.068 + 76 259.901 395 2 0 71.6772 -100.954 -145.851 + 76 6.99636 1220 1 1 64.0528 -111.834 -174.45 + 76 98.4559 1219 1 1 64.05 -111.841 -174.47 + 76 128.045 342 1 0 64.0614 -111.714 -175.85 + 76 35.6553 420 1 0 68.0157 -96.0096 -176.25 + 76 94.7931 421 1 0 67.9492 -95.9492 -176.105 + 76 50.5325 1235 1 1 67.1681 -95.0069 -174.85 + 76 83.3059 1234 1 1 67.0498 -94.8971 -174.71 + 76 44.3279 1233 1 1 66.85 -94.7261 -174.55 + 76 48.0017 394 2 0 71.6731 -101.15 -146.144 + 76 94.9709 397 2 0 71.9976 -100.55 -145.928 + 76 29.2755 1285 1 1 77.2149 -105.671 -174.45 + 76 91.2171 1286 1 1 77.25 -105.663 -174.563 + 76 232.942 372 1 0 77.8349 -105.661 -175.85 + 76 138.535 1381 0 1 96.5497 -97.9552 -204.45 + 76 90.4891 413 0 0 96.0932 -97.4334 -205.85 + 76 57.8902 414 0 0 96.0039 -97.35 -206.061 + 76 29.3424 1257 2 1 71.6499 -100.333 -144.749 + 76 201.887 400 2 0 71.36 -100.099 -145.85 + 76 206.246 1218 1 1 63.683 -91.7914 -174.45 + 76 9.126 447 1 0 63.6389 -90.5695 -175.85 + 76 74.2871 448 1 0 63.6387 -90.5499 -175.872 + 76 83.0541 449 1 0 63.6408 -90.35 -176.083 + 76 175.413 688 1 0 52.0163 -42.4133 -176.25 + 76 19.6294 689 1 0 51.7977 -42.25 -175.901 + 76 64.0974 1154 1 1 51.0061 -42.0122 -174.85 + 76 73.6083 1153 1 1 50.85 -41.9613 -174.635 + 76 130.94 751 2 0 57.4746 -29.8494 -146.25 + 76 91.7051 1188 2 1 57.7877 -29.5714 -144.85 + 76 54.8289 1189 2 1 57.85 -29.5205 -144.608 + 76 86.8812 736 3 0 44.089 -32.8464 -116.25 + 76 44.5412 735 3 0 44.0755 -32.8501 -116.224 + 76 0.884958 1117 3 1 43.4518 -32.7751 -114.85 + 76 95.9896 1116 3 1 43.4499 -32.7749 -114.845 + 76 92.0858 683 4 0 79.4805 -43.3872 -86.2498 + 76 278.401 682 4 0 79.7042 -43.45 -86.1849 + 76 210.466 681 4 0 80.0689 -43.65 -86.0229 + 76 124.519 680 4 0 80.3353 -43.85 -85.8798 + 76 61.2872 679 4 0 80.5553 -44.05 -85.9079 + 76 56.0124 1308 4 1 81.7666 -45.7308 -84.8494 + 76 78.8845 1309 4 1 81.85 -45.8633 -84.7964 + 76 12.6101 1310 4 1 82.0503 -45.8423 -84.8337 + 76 185.672 684 4 0 85.2411 -43.25 -85.86 + 76 88.6893 685 4 0 85.6157 -43.05 -85.9599 + 76 249.395 1327 4 1 85.5745 -42.9036 -84.8495 + 76 42.2938 1301 4 1 80.29 -41.3716 -84.85 + 76 1.57164 700 4 0 79.9747 -39.8549 -85.85 + 76 258.969 701 4 0 79.9744 -39.85 -85.8526 + 76 39.1706 1485 13 0 103.934 117.208 183.75 + 76 84.1152 295 7 0 95.1505 -121.035 3.75 + 76 121.916 294 7 0 95.2936 -121.15 3.86521 + 76 150.71 1379 7 1 95.9912 -121.873 5.1501 + 76 273.906 1380 7 1 96.233 -122.049 5.55 + 76 51.0597 1381 7 1 96.35 -121.738 5.16934 + 76 42.2002 314 7 0 98.8605 -117.278 4.14974 + 76 65.3247 315 7 0 98.9218 -117.149 4.10108 + 76 71.6276 316 7 0 99.004 -116.95 3.98521 + 76 12.89 317 7 0 99.0159 -116.75 3.76612 + 76 79.0377 467 7 0 96.5307 -86.49 3.7502 + 76 113.64 466 7 0 96.5185 -86.65 3.91222 + 76 135.679 465 7 0 96.3981 -86.8503 3.99557 + 76 253.072 464 7 0 96.544 -87.0502 4.03656 +Number of digits in this event: 35 +Using G4ParticleGun... +Particle energy: 2.26295 LIN +Particle: e- +Event: 77 +Number of tracker hits in this event: 35 + 77 119.747 165 7 1 -147.116 -25.3288 5.55 + 77 112.623 773 7 0 -147.116 -25.3317 4.15 + 77 102.083 165 6 1 -147.116 -25.3967 -24.45 + 77 140.181 773 6 0 -147.118 -25.4004 -25.85 + 77 152.778 165 5 1 -147.146 -25.4655 -54.45 + 77 104.686 772 5 0 -147.147 -25.4686 -55.85 + 77 115.479 165 4 1 -147.141 -25.529 -84.45 + 77 110.865 772 4 0 -147.143 -25.539 -85.85 + 77 122.417 164 3 1 -147.159 -25.846 -114.45 + 77 217.561 770 3 0 -147.158 -25.8746 -115.85 + 77 518.547 164 2 1 -147.242 -26.4866 -144.45 + 77 129.313 767 2 0 -147.236 -26.5155 -145.85 + 77 106.656 164 1 1 -147.232 -27.098 -174.45 + 77 115.456 764 1 0 -147.231 -27.1097 -175.85 + 77 200.979 164 0 1 -147.308 -27.4693 -204.45 + 77 110.659 762 0 0 -147.237 -27.5625 -205.85 + 77 12.2019 796 3 1 -20.6817 55.3419 -114.45 + 77 158.183 797 3 1 -20.65 55.3671 -114.469 + 77 222.316 798 3 1 -20.4499 55.4197 -114.589 + 77 50.566 799 3 1 -20.2499 55.3266 -114.503 + 77 400.47 165 3 1 -147.127 -25.6011 -114.45 + 77 233.25 772 3 0 -147.132 -25.6051 -115.85 + 77 129.258 771 2 0 -147.186 -25.7101 -145.85 + 77 174.509 166 1 1 -146.925 -25.9027 -174.45 + 77 113.075 770 1 0 -146.91 -25.9053 -175.85 + 77 213.296 167 0 1 -146.575 -25.9597 -204.45 + 77 225.244 770 0 0 -146.567 -25.9537 -205.85 + 77 74.2496 709 4 1 -38.25 62.5445 -84.6665 + 77 79.9207 725 1 1 -35.05 9.13455 -174.698 + 77 150.572 165 2 1 -147.125 -25.6202 -144.45 + 77 115.559 772 2 0 -147.15 -25.6208 -145.85 + 77 125.452 162 1 1 -147.645 -25.6082 -174.45 + 77 113.071 772 1 0 -147.678 -25.6165 -175.85 + 77 128.492 159 0 1 -148.226 -25.9709 -204.45 + 77 67.4178 669 2 0 -75.5791 -46.05 -146.222 Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 8.78608 LIN +Particle energy: 7.11829 LIN Particle: e- -Event: 92 -Number of tracker hits in this event: 33 - 92 97.2918 1515 8 1 123.248 -66.5618 35.55 - 92 133.426 567 8 0 123.248 -66.5614 34.15 - 92 200.901 1515 7 1 123.258 -66.5509 5.55 - 92 148.08 567 7 0 123.257 -66.5491 4.15 - 92 171.823 1515 6 1 123.248 -66.5121 -24.45 - 92 122.352 567 6 0 123.249 -66.5085 -25.85 - 92 107.486 1515 5 1 123.275 -66.4341 -54.45 - 92 146.571 568 5 0 123.277 -66.4312 -55.85 - 92 132.68 1515 4 1 123.316 -66.3692 -84.45 - 92 121.117 568 4 0 123.318 -66.3668 -85.85 - 92 122.286 1516 3 1 123.371 -66.3187 -114.45 - 92 128.825 568 3 0 123.374 -66.3166 -115.85 - 92 127.437 1516 2 1 123.44 -66.2731 -144.45 - 92 115.166 568 2 0 123.443 -66.2704 -145.85 - 92 144.169 1516 1 1 123.515 -66.2165 -174.45 - 92 122.725 569 1 0 123.518 -66.2141 -175.85 - 92 130.704 1517 0 1 123.569 -66.165 -204.45 - 92 176.943 569 0 0 123.571 -66.1623 -205.85 - 92 118.103 1521 4 1 124.423 -67.9432 -84.45 - 92 130.54 559 4 0 124.626 -68.156 -85.85 - 92 25.5351 1535 3 1 127.339 -74.6912 -114.45 - 92 107.998 1536 3 1 127.35 -74.6902 -114.538 - 92 115.476 526 3 0 127.563 -74.7104 -115.85 - 92 129.839 1564 2 1 133.016 -75.8628 -144.45 - 92 59.0409 519 2 0 133.31 -76.2026 -145.85 - 92 51.998 518 2 0 133.348 -76.25 -146.038 - 92 126.447 1601 1 1 140.365 -84.4477 -174.45 - 92 357.775 477 1 0 140.956 -84.6056 -175.85 - 92 32.2575 476 1 0 141.095 -84.65 -176.137 - 92 84.6663 1694 0 1 159.017 -88.381 -204.45 - 92 69.4127 1695 0 1 159.15 -88.4821 -204.724 - 92 27.374 456 0 0 159.544 -88.8319 -205.85 - 92 143.149 455 0 0 159.564 -88.8501 -205.908 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 6.21806 LIN -Particle: e- -Event: 93 -Number of tracker hits in this event: 43 - 93 143.177 1238 7 1 67.8467 -132.681 5.55 - 93 165.369 237 7 0 67.8457 -132.681 4.15 - 93 112.286 1238 6 1 67.8277 -132.682 -24.45 - 93 149.53 237 6 0 67.8275 -132.682 -25.85 - 93 100.298 1238 5 1 67.8182 -132.69 -54.45 - 93 124.956 237 5 0 67.8182 -132.691 -55.85 - 93 104.993 1238 4 1 67.8171 -132.714 -84.45 - 93 115.667 237 4 0 67.8178 -132.716 -85.85 - 93 225.327 1238 3 1 67.8314 -132.756 -114.45 - 93 111.431 236 3 0 67.8318 -132.758 -115.85 - 93 134.31 1238 2 1 67.8442 -132.803 -144.45 - 93 125.895 236 2 0 67.8443 -132.804 -145.85 - 93 687.943 1238 1 1 67.8485 -132.848 -174.45 - 93 158.805 236 1 0 67.8479 -132.849 -175.85 - 93 118.3 1238 0 1 67.8343 -132.875 -204.45 - 93 270.89 236 0 0 67.8336 -132.877 -205.85 - 93 118.824 955 12 1 11.25 -80.6823 155.435 - 93 279.197 1239 0 1 67.8799 -132.873 -204.45 - 93 152.21 237 0 0 67.8076 -132.75 -206.099 - 93 94.0909 235 0 0 68.0246 -133.003 -205.85 - 93 138.156 203 0 0 63.0271 -139.439 -206.25 - 93 29.583 1207 0 1 61.5255 -138.678 -204.85 - 93 78.4926 1206 0 1 61.45 -138.627 -204.801 - 93 99.2119 1205 0 1 61.25 -138.497 -204.623 - 93 35.5655 1204 0 1 61.05 -138.446 -204.51 - 93 15.2209 247 0 0 82.8054 -130.732 -206.25 - 93 136.145 246 0 0 82.8145 -130.75 -206.22 - 93 22.6573 245 0 0 82.943 -130.95 -206.212 - 93 119.025 118 0 0 90.3049 -156.499 -206.25 - 93 125.549 1239 1 1 67.8586 -132.832 -174.45 - 93 116.317 237 1 0 67.8744 -132.75 -175.945 - 93 113.636 1237 0 1 67.5433 -131.432 -204.45 - 93 128.498 244 0 0 67.3509 -131.27 -205.85 - 93 161.238 234 1 0 67.6202 -133.266 -175.85 - 93 29.1332 233 1 0 67.5662 -133.35 -176.197 - 93 7.93689 1221 0 1 64.2648 -139.689 -204.45 - 93 120.151 1220 0 1 64.25 -139.691 -204.482 - 93 197.816 201 0 0 63.5867 -139.818 -205.85 - 93 14.5002 240 5 0 68.063 -131.983 -55.85 - 93 112.822 241 5 0 68.0736 -131.95 -55.8994 - 93 10.1806 242 5 0 68.1951 -131.75 -56.2166 - 93 89.5946 236 7 0 67.8587 -132.75 4.10915 - 93 23.7171 1224 7 1 64.9204 -137.153 5.15 -Number of digits in this event: 22 -Using G4ParticleGun... -Particle energy: 9.0608 LIN -Particle: e- -Event: 94 -Number of tracker hits in this event: 80 - 94 117.675 1305 9 1 81.092 97.2374 65.55 - 94 204.09 1385 9 0 81.0911 97.2358 64.15 - 94 127.757 1305 8 1 81.0678 97.2025 35.55 - 94 125.281 1385 8 0 81.0662 97.2002 34.15 - 94 298.272 1304 7 1 81.0361 97.1565 5.55 - 94 100.572 1385 7 0 81.0357 97.1546 4.15 - 94 116.031 1304 6 1 81.027 97.1151 -24.45 - 94 131.726 1384 6 0 81.0271 97.1141 -25.85 - 94 178.424 1304 5 1 81.0332 97.0941 -54.45 - 94 159.887 1384 5 0 81.0332 97.094 -55.85 - 94 133.055 1304 4 1 81.0323 97.0915 -84.45 - 94 195.497 1384 4 0 81.0324 97.092 -85.85 - 94 367.194 1304 3 1 81.0405 97.1029 -114.45 - 94 331.974 1384 3 0 81.0405 97.1041 -115.85 - 94 328.803 1304 2 1 81.0369 97.1322 -144.45 - 94 293.247 1384 2 0 81.0377 97.1342 -145.85 - 94 109.251 1305 1 1 81.0522 97.1746 -174.45 - 94 91.5827 1385 1 0 81.054 97.1773 -175.85 - 94 114.823 1305 0 1 81.092 97.2298 -204.45 - 94 126.749 1385 0 0 81.0937 97.2325 -205.85 - 94 1.96982 1500 1 1 120.177 96.588 -174.85 - 94 196.964 1501 1 1 120.35 96.5929 -174.651 - 94 247.889 971 1 0 130.591 14.4421 -176.25 - 94 15.4405 703 1 0 96.7805 -39.3629 -176.25 - 94 157 1196 2 0 37.1533 59.3517 -146.25 - 94 89.6557 1195 2 0 37.1174 59.25 -146.133 - 94 125.095 1307 2 1 81.6315 97.2886 -144.45 - 94 131.828 1308 2 1 81.65 97.3332 -144.819 - 94 141.92 1386 2 0 81.6999 97.4581 -145.85 - 94 76.9347 1310 1 1 82.2149 100.537 -174.45 - 94 36.527 1311 1 1 82.25 100.58 -174.689 - 94 165.686 1403 1 0 82.4658 100.777 -175.85 - 94 110.919 1340 0 1 88.1524 107.169 -204.45 - 94 1.95849 1341 0 1 88.2502 107.236 -204.838 - 94 202.074 1436 0 0 88.5097 107.414 -205.85 - 94 158.927 1381 2 0 81.7816 96.5016 -145.85 - 94 118.161 1307 1 1 81.5451 94.7438 -174.45 - 94 129.711 1371 1 0 81.3217 94.5039 -175.85 - 94 358.227 1282 0 1 76.6025 89.8281 -204.45 - 94 156.36 1347 0 0 76.2709 89.5487 -205.85 - 94 63.0902 1281 0 1 76.4498 89.8115 -204.547 - 94 62.6516 1280 0 1 76.25 89.8604 -204.713 - 94 66.4738 1352 0 0 75.3188 90.5907 -205.85 - 94 109.726 1353 0 0 75.2216 90.75 -205.97 - 94 151.965 1354 0 0 75.243 90.95 -206.022 - 94 52.4727 1355 0 0 75.2528 91.1501 -206.1 - 94 171.813 1401 0 0 76.134 100.453 -206.25 - 94 51.5046 1400 0 0 76.1415 100.35 -205.905 - 94 279.486 1383 2 0 80.9117 96.9003 -145.85 - 94 163.35 1304 1 1 81.0127 95.7091 -174.451 - 94 232.198 1377 1 0 81.0081 95.6818 -175.85 - 94 98.9996 1304 0 1 80.8844 94.5763 -204.45 - 94 130.296 1371 0 0 80.8776 94.4998 -205.851 - 94 30.1059 1356 1 1 91.4531 100.526 -174.45 - 94 60.636 1355 1 1 91.35 100.466 -174.535 - 94 97.4459 1354 1 1 91.15 100.346 -174.699 - 94 56.3806 1397 1 0 89.5953 99.6074 -175.85 - 94 169.856 1396 1 0 89.4829 99.55 -175.939 - 94 110.506 1395 1 0 89.121 99.35 -176.158 - 94 42.2019 1113 0 1 42.7402 86.0428 -204.45 - 94 154.617 1112 0 1 42.65 85.9808 -204.555 - 94 21.0178 1111 0 1 42.45 85.8837 -204.799 - 94 96.8909 1327 0 0 41.5104 85.5162 -205.85 - 94 75.542 1326 0 0 41.3168 85.45 -206.093 - 94 1.22364 1186 1 0 17.5979 57.255 -176.25 - 94 230.945 1185 1 0 17.5934 57.2499 -176.245 - 94 75.6847 1184 1 0 17.4241 57.05 -176.095 - 94 112.785 1183 1 0 17.2232 56.85 -175.993 - 94 57.4787 1182 1 0 16.965 56.65 -175.934 - 94 27.6331 976 1 1 15.3357 55.616 -174.85 - 94 113.365 975 1 1 15.25 55.546 -174.795 - 94 104.924 974 1 1 15.05 55.3089 -174.676 - 94 166.109 973 1 1 14.85 55.059 -174.522 - 94 18.3757 972 1 1 14.65 54.8483 -174.775 - 94 11.1506 1173 1 0 14.4136 54.6676 -175.85 - 94 88.059 1172 1 0 14.4122 54.65 -175.896 - 94 116.286 1159 1 0 9.0662 51.9564 -176.25 - 94 253.058 943 1 1 8.79875 52.5769 -174.85 - 94 218.579 944 1 1 8.85 52.7317 -174.705 - 94 21.4601 942 1 1 8.65 53.4106 -174.598 +Event: 78 +Number of tracker hits in this event: 63 + 78 118.807 775 11 1 -24.8647 -70.9986 125.55 + 78 128.27 545 11 0 -24.8647 -70.9994 124.15 + 78 122.282 775 10 1 -24.8639 -71.0144 95.55 + 78 128.557 545 10 0 -24.8631 -71.0143 94.15 + 78 223.98 776 9 1 -24.8485 -71.0137 65.55 + 78 147.453 545 9 0 -24.8481 -71.014 64.15 + 78 122.037 776 8 1 -24.8357 -71.0232 35.55 + 78 147.063 545 8 0 -24.8356 -71.0233 34.15 + 78 182.37 776 7 1 -24.831 -71.0261 5.55 + 78 102.582 545 7 0 -24.8296 -71.027 4.15 + 78 140.09 776 6 1 -24.8054 -71.0495 -24.45 + 78 103.478 545 6 0 -24.8014 -71.0498 -25.85 + 78 118.425 776 5 1 -24.7234 -71.0294 -54.45 + 78 107.684 545 5 0 -24.7184 -71.0285 -55.85 + 78 141.265 777 4 1 -24.6338 -71.025 -84.45 + 78 116.092 545 4 0 -24.6291 -71.0316 -85.85 + 78 389.792 777 3 1 -24.5304 -71.1748 -114.45 + 78 505.574 544 3 0 -24.4583 -71.2023 -115.85 + 78 148.715 786 2 1 -22.8467 -71.8886 -144.45 + 78 182.242 540 2 0 -22.849 -71.9829 -145.85 + 78 120.909 787 1 1 -22.5733 -73.9771 -174.45 + 78 100.974 530 1 0 -22.5548 -74.0473 -175.85 + 78 113.186 529 1 0 -22.5542 -74.05 -175.906 + 78 378.851 788 0 1 -22.301 -75.3923 -204.45 + 78 131.366 523 0 0 -22.3204 -75.416 -205.85 + 78 177.504 779 2 1 -24.1241 -71.3337 -144.45 + 78 399.289 543 2 0 -24.1404 -71.367 -145.85 + 78 254.889 778 1 1 -24.4394 -72.1202 -174.45 + 78 108.808 539 1 0 -24.4454 -72.1974 -175.85 + 78 113.641 778 0 1 -24.429 -73.6987 -204.45 + 78 143.164 532 0 0 -24.3773 -73.5758 -205.85 + 78 15.7402 865 6 0 -36.8642 -7.05 -26.1662 + 78 238.451 778 2 1 -24.4215 -71.2853 -144.45 + 78 129.611 543 1 0 -24.3324 -71.266 -175.85 + 78 124.033 779 0 1 -24.2158 -71.2048 -204.45 + 78 135.684 544 0 0 -24.2117 -71.1978 -205.85 + 78 82.436 509 1 0 -16.1381 -78.2147 -176.25 + 78 214.824 776 4 1 -24.7588 -71.0898 -84.45 + 78 245.552 544 4 0 -24.7955 -71.1057 -85.85 + 78 203.098 772 3 1 -25.4951 -71.7798 -114.45 + 78 113.404 541 3 0 -25.5367 -71.731 -115.85 + 78 136.777 770 2 1 -25.9031 -70.864 -144.45 + 78 221.942 546 2 0 -25.9662 -70.7904 -145.85 + 78 123.068 763 1 1 -27.4162 -69.4118 -174.45 + 78 99.3435 553 1 0 -27.4672 -69.2976 -175.85 + 78 110.671 756 0 1 -28.753 -66.3396 -204.45 + 78 158.046 570 0 0 -28.6024 -66.0135 -205.85 + 78 112.46 775 3 1 -24.8806 -71.095 -114.45 + 78 120.604 775 2 1 -24.9779 -70.3354 -144.45 + 78 115.454 548 2 0 -24.9943 -70.2956 -145.85 + 78 119.231 772 1 1 -25.5389 -69.6371 -174.45 + 78 119.235 552 1 0 -25.6303 -69.6145 -175.85 + 78 105.392 762 0 1 -27.5435 -69.0035 -204.45 + 78 121.072 555 0 0 -27.6268 -68.9507 -205.85 + 78 139.657 776 2 1 -24.6655 -71.1315 -144.45 + 78 92.9512 777 2 1 -24.65 -71.1599 -144.714 + 78 129.405 777 1 1 -24.6089 -73.9358 -174.45 + 78 111.476 769 0 1 -26.0642 -75.0288 -204.45 + 78 88.3335 524 0 0 -26.0831 -75.1315 -205.85 + 78 258.739 333 2 1 -113.361 5.8316 -144.45 + 78 27.4485 780 2 1 -24.0496 -71.7549 -144.763 + 78 133.203 541 2 0 -23.1459 -71.823 -145.85 + 78 39.423 396 2 0 -41.2489 -100.75 -146.03 Number of digits in this event: 40 Using G4ParticleGun... -Particle energy: 4.50508 LIN +Particle energy: 1.36383 LIN Particle: e- -Event: 95 -Number of tracker hits in this event: 59 - 95 40.5221 978 10 1 15.6547 114.775 95.2978 - 95 99.354 1473 10 0 15.6547 114.775 94.15 - 95 205.099 977 9 1 15.6448 114.776 65.55 - 95 112.965 1473 9 0 15.6453 114.778 64.15 - 95 152.166 978 8 1 15.6552 114.824 35.55 - 95 118.897 1473 8 0 15.6554 114.826 34.15 - 95 121.755 978 7 1 15.6631 114.874 5.55 - 95 140.299 1473 7 0 15.6638 114.877 4.15 - 95 132.891 978 6 1 15.6794 114.933 -24.45 - 95 117.57 1473 6 0 15.6802 114.935 -25.85 - 95 106.2 978 5 1 15.6996 114.964 -54.45 - 95 84.9376 1474 5 0 15.7016 114.963 -55.85 - 95 106.469 978 4 1 15.7387 114.956 -84.45 - 95 109.718 1474 4 0 15.7405 114.955 -85.85 - 95 462.005 978 3 1 15.7778 114.944 -114.45 - 95 100.447 1473 3 0 15.7805 114.944 -115.85 - 95 337.725 978 2 1 15.8321 115.106 -144.45 - 95 241.701 1474 2 0 15.8622 115.123 -145.85 - 95 122.852 982 1 1 16.5775 115.47 -174.45 - 95 181.829 1476 1 0 16.6169 115.471 -175.85 - 95 232.027 986 0 1 17.4071 115.464 -204.45 - 95 116.815 1476 0 0 17.4425 115.488 -205.85 - 95 10.9784 538 1 1 -72.25 66.5159 -174.802 - 95 36.8974 586 9 1 -62.7412 123.209 65.15 - 95 189.417 585 9 1 -62.85 123.22 65.5019 - 95 19.569 1579 2 0 6.24897 136.047 -146.25 - 95 14.1844 1523 2 0 5.92309 124.881 -146.25 - 95 429.96 979 0 1 16.0208 115.389 -204.45 - 95 409.696 980 0 1 16.0501 115.5 -204.672 - 95 135.497 1479 0 0 16.1506 116.01 -205.85 - 95 19.507 1480 0 0 16.1699 116.15 -206.176 - 95 110.332 1477 0 0 16.6642 115.696 -205.85 - 95 110.425 1478 0 0 16.7841 115.75 -206.148 - 95 52.3696 327 0 1 -114.592 104.43 -204.85 - 95 48.3971 863 0 1 -7.43154 121.968 -204.45 - 95 114.255 1473 1 0 15.8459 114.927 -176.034 - 95 168.049 978 0 1 15.8375 114.933 -204.45 - 95 234.765 1473 0 0 15.8985 114.901 -205.85 - 95 95.4295 977 3 1 15.6169 115.257 -114.45 - 95 0.544671 979 3 1 15.85 115.789 -114.848 - 95 46.6021 1484 3 0 17.1853 117.041 -115.85 - 95 118.635 1485 3 0 17.2924 117.15 -115.938 - 95 88.5312 1486 3 0 17.4629 117.35 -116.081 - 95 65.4932 1487 3 0 17.69 117.55 -116.192 - 95 37.9092 562 3 1 -67.45 173.655 -114.559 - 95 66.6888 561 3 1 -67.65 173.601 -114.527 - 95 30.1075 1474 3 0 16.6173 115.144 -115.85 - 95 225.704 1475 3 0 16.6766 115.15 -115.893 - 95 149.984 974 2 1 15.0254 116.928 -144.45 - 95 152.44 1483 2 0 14.8 116.925 -145.85 - 95 133.761 945 1 1 9.23256 117.425 -174.45 - 95 134.119 1486 1 0 8.63985 117.464 -175.85 - 95 145.397 887 0 1 -2.48162 110.997 -204.45 - 95 37.661 1448 0 0 -2.97037 109.83 -205.85 - 95 109.85 1447 0 0 -3.00531 109.75 -205.944 - 95 139.889 1446 0 0 -3.09561 109.55 -206.189 - 95 13.4054 1214 0 0 -29.0348 62.9701 -206.25 - 95 134.941 1213 0 0 -29.0846 62.85 -206.171 - 95 124.641 1484 2 0 14.7416 116.95 -146.187 -Number of digits in this event: 29 +Event: 79 +Number of tracker hits in this event: 89 + 79 120.591 461 8 1 -87.7966 -115.897 35.55 + 79 129.308 321 8 0 -87.7951 -115.906 34.15 + 79 232.783 461 7 1 -87.7788 -116.094 5.55 + 79 253.595 320 7 0 -87.7744 -116.092 4.15 + 79 134.24 461 6 1 -87.6845 -116.049 -24.45 + 79 98.1703 320 6 0 -87.6803 -116.051 -25.85 + 79 113.607 462 5 1 -87.5718 -116.119 -54.45 + 79 232.762 320 5 0 -87.5647 -116.119 -55.85 + 79 123.525 463 4 1 -87.4253 -116.104 -84.45 + 79 167.09 320 4 0 -87.4223 -116.107 -85.85 + 79 257.881 463 3 1 -87.405 -116.152 -114.45 + 79 113.36 319 3 0 -87.4046 -116.151 -115.85 + 79 285.361 463 2 1 -87.3976 -116.161 -144.45 + 79 193.602 319 2 0 -87.3939 -116.158 -145.85 + 79 127.529 463 1 1 -87.3237 -116.098 -174.45 + 79 154.156 320 1 0 -87.3146 -116.092 -175.85 + 79 407.617 464 0 1 -87.1153 -115.915 -204.45 + 79 323.765 321 0 0 -87.1052 -115.911 -205.85 + 79 42.5269 322 0 0 -87.1844 -115.75 -206.094 + 79 14.0682 319 0 0 -86.7374 -116.342 -205.85 + 79 71.5448 318 0 0 -86.726 -116.35 -205.887 + 79 63.1545 317 0 0 -86.658 -116.55 -206.105 + 79 148.162 228 0 0 -81.4774 -134.431 -206.25 + 79 261.417 487 0 1 -82.5488 -134.722 -204.85 + 79 78.7703 486 0 1 -82.6501 -134.718 -204.691 + 79 21.152 600 1 0 -118.697 -59.9171 -176.25 + 79 92.855 601 1 0 -118.695 -59.85 -176.222 + 79 105.77 602 1 0 -118.618 -59.6499 -176.065 + 79 90.4331 603 1 0 -118.53 -59.45 -175.96 + 79 21.0519 604 1 0 -118.338 -59.25 -175.874 + 79 163.809 328 1 1 -114.537 -57.6632 -174.85 + 79 48.3277 329 1 1 -114.35 -57.6252 -174.837 + 79 6.4606 330 1 1 -114.15 -57.5827 -174.847 + 79 7.79027 616 1 0 -103.403 -56.6552 -175.85 + 79 131.669 617 1 0 -103.37 -56.65 -175.853 + 79 429 618 1 0 -103.06 -56.4497 -175.893 + 79 261.793 619 1 0 -102.208 -56.25 -176.122 + 79 329.221 620 1 0 -101.968 -56.0498 -176.154 + 79 61.0691 396 0 0 -97.5761 -100.83 -206.25 + 79 67.8786 397 0 0 -97.6287 -100.75 -206.177 + 79 74.5244 398 0 0 -97.7641 -100.55 -206.104 + 79 67.0272 399 0 0 -97.8705 -100.35 -206.107 + 79 56.5128 400 0 0 -97.9622 -100.15 -206.161 + 79 16.2878 391 0 0 -165.864 -101.755 -206.25 + 79 87.3169 392 0 0 -165.915 -101.75 -206.232 + 79 100.407 914 0 0 -114.415 2.8589 -206.25 + 79 5.32329 915 0 0 -114.3 3.05 -206.237 + 79 46.8705 1287 0 0 -123.873 77.4789 -206.25 + 79 219.139 1475 0 0 -148.26 115.242 -206.25 + 79 89.6317 319 5 0 -87.6938 -116.15 -56.2234 + 79 286.797 461 2 1 -87.713 -115.797 -144.45 + 79 429.29 321 2 0 -87.7223 -115.832 -145.85 + 79 221.374 461 1 1 -87.8259 -117.106 -174.45 + 79 110.872 314 1 0 -87.8324 -117.297 -175.851 + 79 12.2472 313 1 0 -87.8347 -117.35 -176.206 + 79 104.401 460 0 1 -87.8787 -121.665 -204.45 + 79 132.382 291 0 0 -87.8578 -121.791 -205.85 + 79 88.4672 317 1 0 -87.655 -116.705 -175.85 + 79 17.7427 316 1 0 -87.6475 -116.75 -176.188 + 79 114.891 465 0 1 -86.941 -120.727 -204.45 + 79 115.669 296 0 0 -86.9384 -120.836 -205.85 + 79 138.401 559 1 0 -123.577 -68.1761 -176.25 + 79 149.356 320 2 0 -87.9715 -115.95 -146.185 + 79 39.9517 460 7 1 -87.85 -116.109 5.29461 + 79 6.41914 431 6 1 -93.9447 -117.423 -24.45 + 79 95.8199 430 6 1 -93.95 -117.43 -24.475 + 79 120.878 311 6 0 -94.1546 -117.813 -25.85 + 79 99.3266 415 5 1 -97.0956 -126.402 -54.45 + 79 102.729 268 5 0 -96.9977 -126.39 -55.85 + 79 192.581 426 4 1 -94.9184 -125.05 -84.45 + 79 247.535 274 4 0 -94.5352 -125.256 -85.8503 + 79 106.709 460 3 1 -87.9801 -129.263 -114.45 + 79 44.7771 461 3 1 -87.85 -129.364 -114.793 + 79 24.9289 252 3 0 -87.4525 -129.718 -115.85 + 79 89.2794 251 3 0 -87.418 -129.75 -115.944 + 79 57.7597 519 2 1 -76.1801 -137.524 -144.45 + 79 51.862 520 2 1 -76.05 -137.51 -144.648 + 79 145.517 213 2 0 -75.3423 -137.392 -145.85 + 79 16.6421 214 2 0 -75.1457 -137.35 -146.182 + 79 17.3001 613 1 1 -57.2808 -132.505 -174.45 + 79 121.115 614 1 1 -57.25 -132.506 -174.515 + 79 176.456 237 1 0 -56.6215 -132.596 -175.85 + 79 112.282 703 0 1 -39.3305 -135.515 -204.45 + 79 117.021 702 0 1 -39.4501 -135.592 -204.609 + 79 45.4531 219 0 0 -40.3416 -136.277 -205.85 + 79 148.804 218 0 0 -40.4383 -136.35 -205.976 + 79 34.258 127 0 0 -82.2562 -154.565 -206.25 + 79 13.3075 128 0 0 -82.3368 -154.55 -206.219 + 79 419.687 213 0 0 -99.4591 -137.485 -206.25 +Number of digits in this event: 40 Using G4ParticleGun... -Particle energy: 9.40789 LIN +Particle energy: 4.59546 LIN Particle: e- -Event: 96 -Number of tracker hits in this event: 52 - 96 153.473 699 10 1 -40.2298 93.0663 95.55 - 96 119.785 1364 10 0 -40.23 93.0651 94.15 - 96 121.657 699 9 1 -40.2344 93.0411 65.55 - 96 103.928 1364 9 0 -40.233 93.0397 64.15 - 96 137.282 699 8 1 -40.2018 93.0099 35.55 - 96 259.257 1364 8 0 -40.2002 93.008 34.15 - 96 120.748 699 7 1 -40.1641 92.9734 5.55 - 96 125.78 1364 7 0 -40.1625 92.9708 4.15 - 96 133.942 699 6 1 -40.1277 92.916 -24.45 - 96 102.764 1363 6 0 -40.1257 92.9129 -25.85 - 96 162.696 699 5 1 -40.083 92.8495 -54.45 - 96 119.471 1363 5 0 -40.083 92.8456 -55.85 - 96 137.273 699 4 1 -40.0901 92.7662 -84.45 - 96 113.618 1363 4 0 -40.0901 92.7618 -85.85 - 96 128.806 699 3 1 -40.0847 92.6749 -114.45 - 96 133.765 1362 3 0 -40.085 92.669 -115.85 - 96 126.229 699 2 1 -40.0955 92.5435 -144.45 - 96 107.652 1361 2 0 -40.0946 92.5376 -145.85 - 96 183.769 699 1 1 -40.0732 92.421 -174.45 - 96 95.5409 1361 1 0 -40.0714 92.4151 -175.85 - 96 180.898 700 0 1 -40.0463 92.3019 -204.45 - 96 103.214 1360 0 0 -40.0435 92.2953 -205.85 - 96 110.541 1362 4 0 -40.1862 92.6707 -85.85 - 96 42.9937 1177 4 0 -50.9038 55.5597 -86.2499 - 96 97.5894 1176 4 0 -50.9204 55.45 -86.1398 - 96 50.8858 1175 4 0 -50.9222 55.25 -85.9662 - 96 393.628 646 4 1 -50.8051 53.8213 -84.85 - 96 73.3818 1204 5 0 -38.4842 60.9025 -56.2494 - 96 82.4077 1205 5 0 -38.3431 61.05 -56.0281 - 96 8.5572 1206 5 0 -38.261 61.25 -55.8679 - 96 165.93 709 5 1 -38.1519 62.7346 -54.8497 - 96 39.8579 645 4 1 -50.85 53.2627 -84.5316 - 96 289.783 700 2 1 -39.9389 92.5976 -144.45 - 96 459.374 1362 2 0 -39.9353 92.5958 -145.85 - 96 198.113 700 1 1 -39.8714 92.5623 -174.45 - 96 109.927 1362 1 0 -39.8667 92.5686 -175.85 - 96 113.076 701 0 1 -39.7849 92.7198 -204.45 - 96 110.985 1362 0 0 -39.7781 92.7264 -205.85 - 96 222.024 720 2 1 -36.0382 -18.1193 -144.85 - 96 21.7472 701 1 1 -39.85 92.2787 -174.784 - 96 92.473 1360 1 0 -39.8389 92.2694 -175.85 - 96 111.407 702 0 1 -39.5627 92.0163 -204.45 - 96 141.278 1359 0 0 -39.5518 92.007 -205.85 - 96 77.6885 1358 0 0 -39.5221 91.95 -205.984 - 96 165.986 1357 0 0 -39.5056 91.75 -206.033 - 96 142.984 1343 0 0 -20.9399 88.7853 -206.25 - 96 93.5832 799 0 1 -20.0866 88.7436 -204.85 - 96 73.1892 800 0 1 -20.05 88.7427 -204.762 - 96 226.619 1383 0 0 109.6 96.8527 -206.25 - 96 150.89 1384 0 0 109.702 96.9501 -206.227 - 96 405.417 1365 8 0 -40.8698 93.2362 34.1493 - 96 7.85184 1366 8 0 -41.2765 93.35 33.759 -Number of digits in this event: 29 +Event: 80 +Number of tracker hits in this event: 74 + 80 149.779 1053 11 1 30.7401 35.0161 125.55 + 80 119.789 1074 11 0 30.7333 35.0195 124.15 + 80 115.52 1052 10 1 30.5984 35.0749 95.55 + 80 219.05 1075 10 0 30.5941 35.0745 94.15 + 80 249.387 1052 9 1 30.5223 35.0818 65.55 + 80 121.575 1075 9 0 30.5239 35.0802 64.15 + 80 462.36 1052 8 1 30.5601 35.0131 35.55 + 80 259.573 1074 8 0 30.5629 35.0162 34.15 + 80 121.362 1052 7 1 30.6046 35.076 5.55 + 80 117.382 1075 7 0 30.6081 35.0718 4.15 + 80 135.054 1053 6 1 30.6926 34.9956 -24.45 + 80 145.004 1074 6 0 30.697 34.9891 -25.85 + 80 121.646 1053 5 1 30.8004 34.8695 -54.45 + 80 226.535 1074 5 0 30.804 34.8587 -55.85 + 80 158.356 1054 4 1 30.8951 34.6231 -84.45 + 80 265.163 1072 4 0 30.9046 34.616 -85.85 + 80 268.916 1055 3 1 31.0954 34.516 -114.45 + 80 107.556 1072 3 0 31.1114 34.5087 -115.85 + 80 150.439 1056 2 1 31.4189 34.3428 -144.45 + 80 228.88 1071 2 0 31.4374 34.3327 -145.85 + 80 262.473 1058 1 1 31.8273 34.1083 -174.45 + 80 188.942 1070 1 0 31.8485 34.1047 -175.85 + 80 197.108 1061 0 1 32.302 34.0291 -204.45 + 80 113.874 1069 0 0 32.3191 34.0316 -205.85 + 80 235.436 1155 8 1 51.1001 -113.189 35.15 + 80 79.9235 1154 8 1 51.05 -113.313 35.3837 + 80 46.6477 1066 0 0 32.3159 33.3568 -205.85 + 80 257.056 1065 0 0 32.3067 33.2499 -206.021 + 80 213.214 1064 0 0 32.2961 33.05 -206.158 + 80 67.7528 1063 0 0 32.2718 32.8499 -206.123 + 80 31.1461 1062 0 0 32.2839 32.65 -206.161 + 80 158.314 1053 8 1 30.65 35.0455 35.49 + 80 210.581 1051 9 1 30.45 34.9939 65.5215 + 80 426.718 1053 9 1 30.7923 34.9518 65.55 + 80 214.809 1074 9 0 30.7937 34.9494 64.15 + 80 116.248 1054 7 1 30.9268 34.834 5.55 + 80 119.873 1073 7 0 30.9314 34.831 4.15 + 80 192.934 1054 6 1 31.0238 34.769 -24.45 + 80 173.508 1073 6 0 31.0269 34.7647 -25.85 + 80 227.938 1055 5 1 31.098 34.6819 -54.45 + 80 123.682 1073 5 0 31.1003 34.6742 -55.85 + 80 152.047 1055 4 1 31.1396 34.5231 -84.45 + 80 130.661 1071 3 0 31.1941 34.4477 -115.85 + 80 277.445 1055 2 1 31.2436 34.379 -144.45 + 80 161.17 1055 1 1 31.2008 34.2745 -174.45 + 80 104.258 1071 1 0 31.1947 34.2697 -175.85 + 80 120.625 1055 0 1 31.0648 34.1595 -204.45 + 80 139.587 1070 0 0 31.0575 34.1556 -205.85 + 80 98.1413 1055 6 1 31.05 34.761 -24.5946 + 80 133.577 1075 8 0 30.6404 35.0753 34.15 + 80 128.021 1053 7 1 30.6612 35.2433 5.55 + 80 151.089 1076 7 0 30.66 35.2737 4.15 + 80 136.411 1052 6 1 30.6148 35.9056 -24.45 + 80 220.005 1079 6 0 30.6131 35.9256 -25.85 + 80 115.735 1052 5 1 30.6231 36.2874 -54.45 + 80 104.359 1081 5 0 30.6305 36.2886 -55.85 + 80 131.149 1053 4 1 30.847 36.3483 -84.45 + 80 132.86 1081 4 0 30.851 36.3567 -85.85 + 80 120.307 1054 3 1 30.9591 36.5677 -114.45 + 80 150.833 1082 3 0 30.9675 36.5616 -115.85 + 80 129.748 1082 2 0 31.2263 36.4614 -145.85 + 80 144.441 1081 1 0 31.7446 36.4259 -175.85 + 80 109.297 1060 0 1 32.2264 36.157 -204.45 + 80 124.492 1080 0 0 32.2463 36.1466 -205.85 + 80 29.0324 1081 8 0 30.9466 36.3524 34.15 + 80 90.2829 1082 8 0 30.943 36.45 34.095 + 80 107.921 1083 8 0 30.8511 36.65 33.9761 + 80 282.849 1052 1 1 30.5391 33.1284 -174.45 + 80 274.572 1065 1 0 30.5263 33.1275 -175.85 + 80 160.873 1051 0 1 30.3496 33.3171 -204.45 + 80 115.992 1050 0 1 30.1279 32.9361 -204.45 + 80 106.032 1051 1 1 30.4499 32.8333 -174.6 + 80 9.66058 1061 1 0 30.0572 32.2674 -175.851 + 80 105.408 1060 1 0 30.0482 32.25 -175.895 +Number of digits in this event: 54 Using G4ParticleGun... -Particle energy: 1.58757 LIN +Particle energy: 4.12631 LIN Particle: e- -Event: 97 -Number of tracker hits in this event: 69 - 97 130.464 878 10 1 -4.36059 98.0386 95.55 - 97 129.948 1389 10 0 -4.36618 98.0411 94.15 - 97 114.903 877 9 1 -4.49183 98.111 65.55 - 97 116.825 1389 9 0 -4.50475 98.1186 64.15 - 97 302.555 876 8 1 -4.7616 98.2674 35.55 - 97 147.186 1390 8 0 -4.77724 98.2722 34.15 - 97 133.095 874 7 1 -5.08335 98.3554 5.55 - 97 107.808 1391 7 0 -5.10018 98.3523 4.15 - 97 160.47 873 6 1 -5.43942 98.276 -24.45 - 97 110.172 1390 6 0 -5.45726 98.2736 -25.85 - 97 125.843 870 5 1 -5.86929 98.1853 -54.45 - 97 160.413 1390 5 0 -5.89099 98.1872 -55.85 - 97 224.819 868 4 1 -6.33623 98.2383 -84.45 - 97 185.538 1390 4 0 -6.35947 98.2427 -85.85 - 97 164.797 866 3 1 -6.83821 98.331 -114.45 - 97 124.094 1390 3 0 -6.86194 98.3357 -115.85 - 97 155.651 863 2 1 -7.34888 98.4234 -144.45 - 97 142.216 1391 2 0 -7.37553 98.4251 -145.85 - 97 131.372 860 1 1 -7.91107 98.4594 -174.45 - 97 111.108 1391 1 0 -7.93644 98.459 -175.85 - 97 261.01 858 0 1 -8.43648 98.4551 -204.45 - 97 145.673 1391 0 0 -8.46176 98.4542 -205.85 - 97 69.2399 859 0 1 -8.24986 98.4847 -204.477 - 97 223.266 860 0 1 -8.04972 98.504 -204.46 - 97 319.988 861 0 1 -7.84997 98.5191 -204.455 - 97 0.432079 875 8 1 -4.85 98.3383 35.1506 - 97 116.463 1397 8 0 -6.97323 99.5519 34.15 - 97 328.133 1398 8 0 -7.30886 99.75 34.0507 - 97 11.0136 1399 8 0 -8.0124 99.95 33.7667 - 97 69.9203 1164 8 0 -54.7554 53.0314 33.75 - 97 176.159 1163 8 0 -54.7948 52.85 33.8403 - 97 387.086 615 8 1 -56.954 52.8399 35.15 - 97 43.8438 616 8 1 -56.8499 52.7644 35.3028 - 97 311.662 870 3 1 -5.89832 98.9453 -114.45 - 97 119.784 1393 3 0 -6.20425 98.8679 -115.85 - 97 14.1716 829 2 1 -14.2305 97.4156 -144.45 - 97 97.9516 828 2 1 -14.25 97.4166 -144.494 - 97 143.948 1386 2 0 -14.8856 97.3873 -145.85 - 97 122.655 762 1 1 -27.5709 95.6887 -174.45 - 97 53.6726 761 1 1 -27.6502 95.6731 -174.687 - 97 193.931 1377 1 0 -28.0018 95.5897 -175.85 - 97 142.86 739 0 1 -32.1244 92.1038 -204.45 - 97 43.7746 740 0 1 -32.05 91.7599 -204.738 - 97 78.8815 1351 0 0 -31.7679 90.5482 -205.85 - 97 76.7775 1350 0 0 -31.7212 90.35 -206.035 - 97 67.3161 956 0 0 -2.08952 11.4007 -206.25 - 97 83.4002 955 0 0 -2.04057 11.2495 -206.206 - 97 77.8368 954 0 0 -1.96089 11.05 -206.139 - 97 56.6756 953 0 0 -1.82795 10.85 -206.028 - 97 92.2576 952 0 0 -1.71555 10.65 -205.955 - 97 53.2985 951 0 0 -1.6166 10.4497 -205.903 - 97 8.61742 950 0 0 -1.54357 10.2498 -205.859 - 97 31.443 898 0 1 -0.288852 6.85516 -204.85 - 97 438.625 899 0 1 -0.25 6.74805 -204.825 - 97 37.1554 900 0 1 0.138853 5.21665 -204.45 - 97 93.5992 901 0 1 0.25 5.17069 -204.541 - 97 96.6842 902 0 1 0.45009 5.12084 -204.716 - 97 24.9233 923 0 0 1.58999 4.68265 -205.85 - 97 118.008 922 0 0 1.66007 4.6499 -205.931 - 97 16.7575 947 0 0 -2.05528 9.65 -205.896 - 97 149.863 1394 3 0 -6.02635 99.0121 -115.85 - 97 9.90417 858 2 1 -8.44026 100.552 -144.45 - 97 137.192 857 2 1 -8.45008 100.556 -144.483 - 97 135.565 1403 2 0 -8.84703 100.755 -145.85 - 97 74.0682 820 1 1 -16.0238 104.644 -174.45 - 97 96.8234 819 1 1 -16.05 104.649 -174.564 - 97 145.587 1422 1 0 -16.3322 104.716 -175.85 - 97 111.27 791 0 1 -21.7678 106.154 -204.45 - 97 99.4707 1430 0 0 -22.0132 106.28 -205.851 -Number of digits in this event: 33 -Using G4ParticleGun... -Particle energy: 5.31208 LIN -Particle: e- -Event: 98 -Number of tracker hits in this event: 79 - 98 327.591 505 10 1 -78.9172 79.7264 95.55 - 98 100.882 1298 10 0 -78.9185 79.7281 94.15 - 98 131.693 505 9 1 -78.9476 79.7658 65.55 - 98 134.272 1298 9 0 -78.949 79.7664 64.15 - 98 322.21 505 8 1 -78.9793 79.7792 35.55 - 98 489.285 1298 8 0 -78.9792 79.7782 34.15 - 98 117.983 505 7 1 -78.9803 79.7627 5.55 - 98 121.183 1298 7 0 -78.9806 79.761 4.15 - 98 109.891 505 6 1 -78.987 79.7306 -24.45 - 98 132.91 1298 6 0 -78.9878 79.7284 -25.85 - 98 123.188 505 5 1 -79.0025 79.6891 -54.45 - 98 105.305 1298 5 0 -79.0058 79.6879 -55.85 - 98 111.957 504 4 1 -79.0735 79.6517 -84.45 - 98 125.44 1297 4 0 -79.0754 79.649 -85.85 - 98 153.084 504 3 1 -79.1171 79.5912 -114.45 - 98 254.818 1297 3 0 -79.1169 79.5853 -115.85 - 98 188.122 504 2 1 -79.1122 79.468 -144.45 - 98 203.956 1297 2 0 -79.1141 79.4627 -145.85 - 98 106.564 504 1 1 -79.1521 79.3593 -174.45 - 98 141.116 1296 1 0 -79.1552 79.357 -175.85 - 98 96.1474 504 0 1 -79.2234 79.3079 -204.45 - 98 124.384 1296 0 0 -79.2306 79.3048 -205.85 - 98 161.228 484 4 1 -83.1556 -38.0558 -84.85 - 98 78.7118 1788 14 1 177.75 -26.776 215.434 - 98 98.1994 778 1 1 -24.45 -38.5199 -174.563 - 98 131.878 779 1 1 -24.2498 -38.7141 -174.459 - 98 187.128 1539 5 0 43.2378 128.048 -56.25 - 98 68.7689 1540 5 0 43.3543 128.15 -56.2012 - 98 67.1672 505 3 1 -79.0122 79.6116 -114.45 - 98 79.484 1244 3 0 -74.7207 68.9471 -116.25 - 98 43.8665 1243 3 0 -74.7263 68.85 -116.013 - 98 122.653 528 3 1 -74.3215 68.5686 -114.85 - 98 58.4086 529 3 1 -74.25 68.5661 -114.555 - 98 153.663 509 7 1 -78.2404 79.3996 5.55 - 98 110.074 1296 7 0 -78.2491 79.3285 4.15 - 98 37.0677 507 6 1 -78.4592 77.8004 -24.45 - 98 58.1388 508 6 1 -78.45 77.7927 -24.5905 - 98 133.408 1288 6 0 -78.364 77.7398 -25.85 - 98 126.108 517 5 1 -76.5076 76.7151 -54.4507 - 98 105.962 1282 5 0 -76.5182 76.6358 -55.85 - 98 74.3731 516 4 1 -76.8461 75.42 -84.45 - 98 41.3747 515 4 1 -76.85 75.425 -84.6805 - 98 154.235 1277 4 0 -76.8659 75.4536 -85.85 - 98 157.206 512 3 1 -77.4914 76.5169 -114.45 - 98 119.257 1282 3 0 -77.6773 76.5107 -115.851 - 98 118.817 494 2 1 -81.0568 76.5679 -144.45 - 98 164.001 1281 2 0 -81.2456 76.4329 -145.85 - 98 150.446 474 1 1 -85.1623 74.3152 -174.45 - 98 112.282 1270 1 0 -85.417 74.1406 -175.85 - 98 184.158 448 0 1 -90.5352 70.9728 -204.45 - 98 107.871 1253 0 0 -90.5458 70.8045 -205.85 - 98 105.002 484 2 1 -83.1172 76.5777 -144.45 - 98 279.417 485 2 1 -83.0499 76.6128 -144.637 - 98 105.552 1283 2 0 -82.7846 76.6897 -145.85 - 98 112.46 493 1 1 -81.3302 75.6131 -174.45 - 98 159.293 1276 1 0 -81.4994 75.3045 -175.85 - 98 37.8327 1257 1 0 -83.5161 71.65 -175.974 - 98 14.391 1284 2 0 -82.4687 77.0407 -145.85 - 98 104.206 1285 2 0 -82.4499 77.05 -145.891 - 98 104.592 1395 2 0 -88.4305 99.1738 -146.25 - 98 56.3098 1396 2 0 -88.4379 99.35 -145.957 - 98 621.431 461 2 1 -87.8131 101.179 -144.85 - 98 50.415 460 2 1 -87.8502 101.818 -144.74 - 98 168 462 2 1 -87.65 101.974 -144.721 - 98 103.307 1125 9 0 -102.011 45.069 63.7501 - 98 132.378 1124 9 0 -102.026 45.05 63.7686 - 98 26.151 383 9 1 -103.477 45.2322 65.1503 - 98 54.5419 382 9 1 -103.55 45.2384 65.2022 - 98 70.5951 381 9 1 -103.75 45.3199 65.3009 - 98 132.983 380 9 1 -103.95 45.3616 65.3552 - 98 55.419 379 9 1 -104.15 45.3819 65.4126 - 98 129.89 378 9 1 -104.35 45.4318 65.4584 - 98 61.7731 1302 10 0 -79.8651 80.5856 94.15 - 98 214.464 1303 10 0 -80.0536 80.65 94.0075 - 98 45.3548 1222 10 0 -141.007 64.4982 93.75 - 98 235.637 1221 10 0 -141.065 64.4496 93.8504 - 98 33.1576 1220 10 0 -141.493 64.25 93.793 - 98 140.321 1203 10 0 -143.143 60.7383 93.75 - 98 42.1536 506 10 1 -78.85 79.7795 95.1827 +Event: 81 +Number of tracker hits in this event: 77 + 81 150.047 606 9 1 -58.653 111.998 65.55 + 81 131.03 1459 9 0 -58.6534 111.997 64.15 + 81 122.386 606 8 1 -58.6686 111.971 35.55 + 81 332.434 1459 8 0 -58.6683 111.971 34.15 + 81 149.944 606 7 1 -58.6596 111.962 5.55 + 81 136.339 1459 7 0 -58.6585 111.964 4.15 + 81 99.5751 607 6 1 -58.6385 112.014 -24.45 + 81 163.059 1459 6 0 -58.6356 112.016 -25.85 + 81 396.418 607 5 1 -58.5707 112.065 -54.45 + 81 423.95 1459 5 0 -58.565 112.067 -55.85 + 81 105.323 608 4 1 -58.4418 112.096 -84.45 + 81 132.675 1459 4 0 -58.4371 112.096 -85.85 + 81 141.426 608 3 1 -58.3472 112.087 -114.45 + 81 107.405 1459 3 0 -58.3414 112.088 -115.85 + 81 135.576 609 2 1 -58.2241 112.111 -144.45 + 81 304.439 1459 2 0 -58.216 112.115 -145.85 + 81 140.395 610 1 1 -58.0325 112.189 -174.45 + 81 115.473 1460 1 0 -58.0226 112.192 -175.85 + 81 164.117 611 0 1 -57.8191 112.269 -204.45 + 81 104.661 1460 0 0 -57.8102 112.273 -205.85 + 81 41.4827 416 11 1 -96.75 74.0299 125.319 + 81 156.314 1349 12 0 -80.4723 89.8671 153.75 + 81 83.2544 417 11 1 -96.75 73.964 125.532 + 81 15.6115 1408 2 0 10.1327 101.781 -146.25 + 81 376.949 1407 2 0 10.1504 101.749 -146.207 + 81 42.1038 201 4 1 -139.878 -17.5817 -84.85 + 81 38.6401 1334 12 0 -162.538 86.9351 153.75 + 81 214.524 1333 12 0 -162.542 86.85 153.806 + 81 168.161 606 4 1 -58.6545 112.559 -84.45 + 81 167.131 1462 4 0 -58.6681 112.595 -85.85 + 81 118.397 606 3 1 -58.8389 113.294 -114.45 + 81 42.7548 1465 3 0 -58.8548 113.344 -115.85 + 81 55.3971 1466 3 0 -58.8569 113.35 -116.026 + 81 147.042 604 2 1 -59.2447 114.304 -144.45 + 81 115.519 1470 2 0 -59.2581 114.337 -145.85 + 81 143.216 602 1 1 -59.553 115.016 -174.45 + 81 206.191 1474 1 0 -59.5708 115.046 -175.85 + 81 113.589 600 0 1 -59.9623 115.6 -204.45 + 81 171.907 1477 0 0 -60.007 115.615 -205.85 + 81 98.4107 682 0 1 -43.4654 88.9801 -204.45 + 81 77.0681 683 0 1 -43.45 89.0405 -204.494 + 81 5.70229 992 3 1 18.4808 105.385 -114.85 + 81 123.928 605 4 1 -58.8903 111.811 -84.45 + 81 176.585 1458 4 0 -58.9007 111.803 -85.85 + 81 96.253 605 3 1 -59.0371 111.822 -114.45 + 81 283.269 1458 3 0 -59.0138 111.859 -115.85 + 81 115.891 607 2 1 -58.6311 112.832 -144.45 + 81 113.426 1463 2 0 -58.6415 112.837 -145.85 + 81 98.4369 605 1 1 -58.8792 113.056 -174.45 + 81 138.705 1464 1 0 -58.8852 113.081 -175.85 + 81 120.415 606 0 1 -58.7569 113.423 -204.45 + 81 136.635 1466 0 0 -58.8212 113.428 -205.85 + 81 143.075 607 1 1 -58.6159 111.929 -174.45 + 81 103.267 606 1 1 -58.65 111.88 -174.546 + 81 228.675 1454 1 0 -59.4761 111.15 -175.85 + 81 6.43847 1453 1 0 -59.6986 110.95 -176.227 + 81 38.6906 506 0 1 -78.7829 104.191 -204.45 + 81 48.7541 507 0 1 -78.65 104.218 -204.499 + 81 76.6636 508 0 1 -78.4498 104.286 -204.591 + 81 30.3308 509 0 1 -78.25 104.382 -204.763 + 81 103.308 1424 0 0 -77.8148 105.006 -205.85 + 81 70.7908 1425 0 0 -77.771 105.15 -206.061 + 81 66.7064 1485 0 0 -54.3139 117.153 -206.25 + 81 102.542 1484 0 0 -54.3064 117.15 -206.245 + 81 30.6134 637 0 1 -52.5352 117.281 -204.85 + 81 90.1679 638 0 1 -52.45 117.254 -204.789 + 81 75.4078 639 0 1 -52.25 117.15 -204.611 + 81 384.643 640 0 1 -52.05 117.072 -204.463 + 81 103.204 1458 1 0 -58.6875 111.809 -175.85 + 81 148.332 598 0 1 -60.3904 109.525 -204.45 + 81 186.372 1446 0 0 -60.4383 109.495 -205.85 + 81 18.665 1465 1 0 -59.7504 113.332 -175.85 + 81 45.2326 1466 1 0 -59.7724 113.35 -175.857 + 81 2.23782 594 1 1 -61.1687 114.394 -174.85 + 81 6.67657 1469 1 0 -60.5477 113.99 -175.85 + 81 3.52725 598 1 1 -60.3434 113.357 -174.85 + 81 51.1095 1462 1 0 -60.238 112.734 -175.85 Number of digits in this event: 38 Using G4ParticleGun... -Particle energy: 3.63746 LIN +Particle energy: 7.57408 LIN +Particle: e- +Event: 82 +Number of tracker hits in this event: 76 + 82 118.585 704 8 1 -39.1207 138.629 35.55 + 82 113.146 1592 8 0 -39.1217 138.629 34.15 + 82 145.043 704 7 1 -39.1449 138.647 5.55 + 82 181.847 1592 7 0 -39.147 138.647 4.15 + 82 118.034 704 6 1 -39.1937 138.651 -24.45 + 82 139.435 1592 6 0 -39.1961 138.652 -25.85 + 82 332.6 704 5 1 -39.2444 138.663 -54.45 + 82 455.923 1592 5 0 -39.2472 138.663 -55.85 + 82 100.757 703 4 1 -39.2876 138.666 -84.45 + 82 116.95 1592 4 0 -39.2932 138.669 -85.85 + 82 104.751 703 3 1 -39.4181 138.733 -114.45 + 82 113.511 1592 3 0 -39.4294 138.74 -115.85 + 82 112.868 702 2 1 -39.6457 138.875 -144.45 + 82 111.628 1593 2 0 -39.652 138.886 -145.85 + 82 219.417 701 1 1 -39.7715 139.134 -174.45 + 82 137.628 1595 1 0 -39.7849 139.159 -175.85 + 82 118.542 699 0 1 -40.1934 139.566 -204.45 + 82 157.567 1597 0 0 -40.2735 139.625 -205.85 + 82 233.077 700 1 1 -39.923 137.813 -174.45 + 82 104.618 1588 1 0 -40.0811 137.8 -175.85 + 82 85.3654 684 0 1 -43.1587 137.812 -204.451 + 82 161.411 683 0 1 -43.25 137.743 -204.688 + 82 141.878 1585 0 0 -43.612 137.306 -205.85 + 82 15.0187 1589 1 0 -40.0742 138.137 -175.85 + 82 290.844 1590 1 0 -40.0781 138.15 -175.907 + 82 47.4139 687 0 1 -42.5754 137.582 -204.45 + 82 102.62 686 0 1 -42.65 137.624 -204.558 + 82 124.578 1591 0 0 -43.4434 138.364 -205.85 + 82 30.798 1592 0 0 -43.6807 138.55 -206.175 + 82 156.8 1601 0 0 -83.7311 140.384 -206.25 + 82 47.9955 1718 0 0 -146.453 163.859 -206.25 + 82 91.4929 1719 0 0 -146.515 163.95 -206.167 + 82 103.65 1720 0 0 -146.665 164.15 -206.019 + 82 257.258 167 0 1 -146.723 165.246 -204.85 + 82 95.0501 168 0 1 -146.55 165.739 -204.515 + 82 135.339 169 0 1 -146.35 165.911 -204.508 + 82 75.058 170 0 1 -146.15 165.924 -204.719 + 82 93.6287 1731 0 0 -145.436 166.543 -205.85 + 82 182.332 1732 0 0 -145.426 166.55 -205.869 + 82 11.9939 1004 0 1 20.85 29.8835 -204.6 + 82 122.196 705 4 1 -39.0305 138.151 -84.45 + 82 194.522 1589 4 0 -39.0497 138.103 -85.85 + 82 114.103 702 3 1 -39.4584 137.002 -114.45 + 82 124.987 1583 3 0 -39.5295 136.947 -115.85 + 82 158.563 694 2 1 -41.0532 137.087 -144.45 + 82 138.644 1584 2 0 -41.3786 137.014 -145.85 + 82 68.9175 659 1 1 -48.2113 135.563 -174.45 + 82 70.2335 658 1 1 -48.25 135.556 -174.577 + 82 141.735 1576 1 0 -48.6685 135.466 -175.85 + 82 9.68346 611 0 1 -57.8356 133.041 -204.45 + 82 97.1118 610 0 1 -57.8502 133.033 -204.49 + 82 146.388 1563 0 0 -58.5008 132.823 -205.85 + 82 67.6357 703 5 1 -39.3476 138.735 -54.45 + 82 191.183 702 5 1 -39.45 138.805 -54.668 + 82 165.313 1595 5 0 -40.0191 139.18 -55.8512 + 82 93.0725 634 4 1 -53.1629 148.946 -84.45 + 82 51.6933 633 4 1 -53.25 149.063 -84.6856 + 82 65.8207 1647 4 0 -53.6301 149.648 -85.8503 + 82 69.3502 1648 4 0 -53.688 149.75 -86.0795 + 82 112.974 621 3 1 -55.6544 155.841 -114.45 + 82 127.676 1680 3 0 -55.794 156.223 -115.85 + 82 126.871 594 2 1 -61.1676 163.913 -144.45 + 82 83.5664 1717 2 0 -61.2008 163.589 -145.85 + 82 74.644 1716 2 0 -61.2067 163.55 -146.002 + 82 22.4399 584 1 1 -63.2137 156.483 -174.45 + 82 95.3424 583 1 1 -63.25 156.486 -174.485 + 82 74.7034 582 1 1 -63.45 156.498 -174.681 + 82 183.518 1681 1 0 -64.7593 156.465 -175.85 + 82 99.8428 437 0 1 -92.5527 154.003 -204.45 + 82 78.7124 436 0 1 -92.7503 153.902 -204.593 + 82 41.515 435 0 1 -92.95 153.814 -204.756 + 82 117.172 1664 0 0 -94.3627 153.069 -205.85 + 82 92.9858 1663 0 0 -94.5874 152.95 -206.025 + 82 151.25 622 3 1 -55.6096 155.843 -114.45 + 82 16.6445 1672 3 0 -55.6706 154.592 -115.851 + 82 169.894 1671 3 0 -55.6781 154.55 -115.905 +Number of digits in this event: 34 +Using G4ParticleGun... +Particle energy: 3.18731 LIN +Particle: e- +Event: 83 +Number of tracker hits in this event: 27 + 83 122.477 229 8 1 -134.197 -37.6223 35.55 + 83 125.832 712 8 0 -134.197 -37.6211 34.15 + 83 136.513 229 7 1 -134.224 -37.6231 5.55 + 83 163.926 712 7 0 -134.227 -37.6258 4.15 + 83 194.298 229 6 1 -134.276 -37.6852 -24.45 + 83 112.489 711 6 0 -134.278 -37.69 -25.85 + 83 156.306 229 5 1 -134.315 -37.7874 -54.45 + 83 110.681 711 5 0 -134.318 -37.7883 -55.85 + 83 94.0652 228 4 1 -134.383 -37.8209 -84.45 + 83 185.028 711 4 0 -134.389 -37.8237 -85.85 + 83 239.999 228 3 1 -134.515 -37.896 -114.45 + 83 104.693 710 3 0 -134.512 -37.9035 -115.85 + 83 141.272 228 2 1 -134.44 -38.0479 -144.45 + 83 141.701 709 2 0 -134.438 -38.0537 -145.85 + 83 155.01 228 1 1 -134.381 -38.1726 -174.45 + 83 105.537 709 1 0 -134.377 -38.1794 -175.85 + 83 114.823 229 0 1 -134.293 -38.321 -204.45 + 83 135.554 708 0 0 -134.29 -38.3313 -205.85 + 83 357.489 713 2 0 -134.862 -37.3189 -145.85 + 83 56.2824 714 2 0 -134.882 -37.25 -145.946 + 83 146.927 229 1 1 -134.296 -37.5241 -174.584 + 83 107.818 712 1 0 -134.281 -37.5595 -175.851 + 83 251.381 231 0 1 -133.851 -38.8239 -204.45 + 83 117.144 706 0 0 -133.544 -38.7818 -205.85 + 83 147.163 232 0 1 -133.75 -38.8875 -204.561 + 83 98.7387 711 1 0 -134.026 -37.6953 -175.85 + 83 118.142 710 1 0 -133.883 -37.85 -176.173 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 2.46819 LIN +Particle: e- +Event: 84 +Number of tracker hits in this event: 93 + 84 121.145 194 8 1 -141.22 3.98137 35.55 + 84 142.515 919 8 0 -141.215 3.98293 34.15 + 84 214.61 195 7 1 -141.134 4.02636 5.55 + 84 108.437 919 7 0 -141.131 4.03367 4.15 + 84 256.02 195 6 1 -141.073 4.17071 -24.45 + 84 461.619 920 6 0 -141.05 4.22609 -25.85 + 84 135.207 198 5 1 -140.367 5.35759 -54.45 + 84 195.755 927 5 0 -140.359 5.49293 -55.85 + 84 111.292 198 4 1 -140.521 8.35401 -84.45 + 84 131.863 942 4 0 -140.505 8.51448 -85.85 + 84 120.106 199 3 1 -140.221 11.9245 -114.45 + 84 150.787 959 3 0 -140.273 11.9928 -115.85 + 84 251.673 194 2 1 -141.275 13.3568 -144.45 + 84 111.479 966 2 0 -141.312 13.426 -145.851 + 84 121.275 190 1 1 -141.984 14.8134 -174.45 + 84 108.983 973 1 0 -141.905 14.8098 -175.85 + 84 418.701 197 0 1 -140.667 14.6156 -204.45 + 84 56.155 972 0 0 -140.519 14.6464 -205.85 + 84 63.1672 973 0 0 -140.499 14.65 -206.03 + 84 137.683 198 0 1 -140.55 14.549 -204.574 + 84 82.6671 1643 14 1 148.75 -67.051 215.376 + 84 260.926 201 2 1 -139.841 15.1739 -144.45 + 84 233.491 200 2 1 -139.95 15.2642 -144.566 + 84 96.0696 199 2 1 -140.15 15.7285 -144.796 + 84 53.7972 992 2 0 -141.396 18.5285 -145.851 + 84 116.24 993 2 0 -141.45 18.65 -145.888 + 84 61.9633 994 2 0 -141.538 18.85 -145.927 + 84 98.484 995 2 0 -141.646 19.05 -145.975 + 84 94.4333 996 2 0 -141.801 19.2502 -146.014 + 84 99.3061 997 2 0 -142.024 19.4501 -145.964 + 84 71.0097 998 2 0 -142.299 19.65 -145.906 + 84 87.2396 999 2 0 -142.512 19.85 -145.99 + 84 93.0505 1000 2 0 -142.664 20.05 -146.012 + 84 53.998 1001 2 0 -142.747 20.25 -146.009 + 84 58.1853 1002 2 0 -142.772 20.45 -145.953 + 84 91.4608 1003 2 0 -142.838 20.6504 -145.936 + 84 52.3562 1004 2 0 -142.915 20.8501 -145.889 + 84 83.3566 1005 2 0 -142.916 21.05 -145.876 + 84 44.6032 1006 2 0 -142.976 21.2506 -145.894 + 84 31.4405 1007 2 0 -143.024 21.45 -145.894 + 84 46.2552 180 2 1 -144.062 21.8677 -144.85 + 84 144.978 179 2 1 -144.15 21.9018 -144.726 + 84 135.631 178 2 1 -144.35 21.7496 -144.502 + 84 129.648 177 2 1 -144.55 21.5121 -144.703 + 84 71.6934 176 2 1 -144.75 21.4259 -144.723 + 84 444.114 175 2 1 -144.95 21.3842 -144.724 + 84 97.9803 976 2 0 -139.76 15.2869 -145.85 + 84 112.514 206 1 1 -138.823 17.2049 -174.45 + 84 141.975 987 1 0 -138.821 17.4932 -175.85 + 84 9.15556 203 0 1 -139.352 23.1367 -204.451 + 84 159.08 204 0 1 -139.35 23.137 -204.487 + 84 119.508 1015 0 0 -139.244 23.1385 -205.85 + 84 143.393 196 5 1 -140.941 4.33071 -54.45 + 84 142.698 921 5 0 -140.951 4.34744 -55.85 + 84 139.258 194 4 1 -141.16 4.68623 -84.45 + 84 128.975 923 4 0 -141.171 4.69139 -85.85 + 84 128.011 193 3 1 -141.398 4.83258 -114.45 + 84 195.299 923 3 0 -141.403 4.83919 -115.85 + 84 114.096 193 2 1 -141.444 4.96442 -144.45 + 84 141.4 924 2 0 -141.514 4.92486 -145.85 + 84 101.804 186 1 1 -142.926 4.15463 -174.45 + 84 118.464 920 1 0 -142.97 4.09277 -175.85 + 84 464.645 181 0 1 -143.921 2.85959 -204.45 + 84 101.615 913 0 0 -143.964 2.79969 -205.85 + 84 45.8356 1010 1 0 -135.193 22.1192 -176.25 + 84 259.148 191 0 1 -141.837 5.99277 -204.45 + 84 47.5633 192 0 1 -141.75 6.04355 -204.723 + 84 119.478 931 0 0 -141.395 6.25303 -205.85 + 84 129.162 929 0 0 -141.857 5.97918 -205.85 + 84 65.4312 919 6 0 -141.227 4.04995 -26.0413 + 84 333.4 180 5 1 -144.004 0.589178 -54.45 + 84 230.404 901 5 0 -144.433 0.33183 -55.85 + 84 84.5299 124 4 1 -155.228 -2.42065 -84.4502 + 84 87.6448 123 4 1 -155.35 -2.3206 -84.6534 + 84 51.0383 891 4 0 -156.04 -1.7194 -85.85 + 84 85.9175 892 4 0 -156.125 -1.65 -85.9969 + 84 120.007 42 3 1 -171.561 10.5052 -114.45 + 84 146.509 954 3 0 -172.108 10.8583 -115.85 + 84 6.99801 1016 5 0 -144.225 23.4349 -56.25 + 84 123.751 1017 5 0 -144.235 23.45 -56.2262 + 84 50.7242 1018 5 0 -144.351 23.65 -55.9356 + 84 255.047 179 5 1 -144.226 24.9647 -54.85 + 84 13.3662 181 5 1 -143.95 25.6248 -54.7659 + 84 200.952 1036 5 0 -145.021 27.3198 -55.85 + 84 164.501 1257 1 0 -160.564 71.5598 -176.25 + 84 77.1766 1258 1 0 -160.626 71.65 -175.987 + 84 1.72494 1259 1 0 -160.751 71.85 -175.854 + 84 67.5153 85 1 1 -163.031 73.3266 -174.85 + 84 112.612 84 1 1 -163.15 73.3998 -174.705 + 84 110.274 83 1 1 -163.35 73.6052 -174.715 + 84 90.7408 82 1 1 -163.55 73.615 -174.62 + 84 164.604 81 1 1 -163.75 73.6663 -174.612 + 84 53.9774 67 0 1 -166.56 -63.9361 -204.85 +Number of digits in this event: 43 +Using G4ParticleGun... +Particle energy: 6.40687 LIN +Particle: e- +Event: 85 +Number of tracker hits in this event: 37 + 85 124.175 187 7 1 -142.627 41.4808 5.55 + 85 132.913 1107 7 0 -142.628 41.4803 4.15 + 85 146.196 187 6 1 -142.657 41.4664 -24.45 + 85 138.529 1107 6 0 -142.657 41.4655 -25.85 + 85 105.185 187 5 1 -142.663 41.4397 -54.45 + 85 142.882 1106 5 0 -142.665 41.4376 -55.85 + 85 370.516 187 4 1 -142.704 41.3944 -84.45 + 85 310.806 1106 4 0 -142.709 41.3917 -85.85 + 85 136.17 186 3 1 -142.803 41.329 -114.45 + 85 106.996 1106 3 0 -142.805 41.325 -115.85 + 85 96.2655 186 2 1 -142.826 41.2555 -144.45 + 85 141.704 1106 2 0 -142.825 41.2519 -145.85 + 85 121.455 186 1 1 -142.778 41.1753 -174.45 + 85 109.909 1105 1 0 -142.768 41.1699 -175.85 + 85 109.737 187 0 1 -142.578 41.0608 -204.45 + 85 114.847 1105 0 0 -142.57 41.0577 -205.85 + 85 7.59854 329 0 1 -114.326 -2.17263 -204.85 + 85 31.0256 167 3 1 -146.719 40.715 -114.45 + 85 171.891 166 3 1 -146.75 40.8102 -114.523 + 85 20.3329 1113 3 0 -147.533 42.7978 -115.85 + 85 121.24 1114 3 0 -147.553 42.85 -115.884 + 85 75.8176 1115 3 0 -147.633 43.0501 -116.027 + 85 20.4587 1116 3 0 -147.743 43.25 -116.206 + 85 61.5823 1236 3 0 -166.244 67.4156 -116.25 + 85 436.976 1237 3 0 -166.314 67.4501 -116.116 + 85 132.886 1238 3 0 -166.876 67.65 -116.067 + 85 85.9603 1107 4 0 -142.65 41.4545 -85.85 + 85 97.2525 185 3 1 -143.086 40.9275 -114.45 + 85 119.892 1104 3 0 -143.201 41.0189 -115.85 + 85 134.52 173 2 1 -145.456 42.8669 -144.45 + 85 125.134 1114 2 0 -145.543 42.9752 -145.85 + 85 164.859 164 1 1 -147.231 45.2155 -174.45 + 85 150.037 1126 1 0 -147.318 45.3061 -175.85 + 85 106.309 155 0 1 -148.962 47.0856 -204.45 + 85 171.768 1135 0 0 -149.067 47.1766 -205.85 + 85 3.67207 152 0 1 -149.55 47.3833 -204.665 + 85 69.9466 153 0 1 -149.55 47.3914 -204.756 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 3.33809 LIN +Particle: e- +Event: 86 +Number of tracker hits in this event: 75 + 86 107.916 505 10 1 -78.9518 -62.7243 95.55 + 86 124.234 586 10 0 -78.9538 -62.7276 94.15 + 86 101.672 505 9 1 -78.9958 -62.8027 65.55 + 86 125.428 586 9 0 -78.9947 -62.8085 64.15 + 86 142.074 505 8 1 -78.9693 -62.9137 35.55 + 86 137.97 585 8 0 -78.973 -62.9165 34.15 + 86 118.204 504 7 1 -79.0571 -62.9559 5.55 + 86 103.723 585 7 0 -79.0569 -62.9527 4.15 + 86 118.794 504 6 1 -79.0506 -62.8875 -24.45 + 86 143.798 585 6 0 -79.0502 -62.886 -25.85 + 86 337.517 505 5 1 -79.0385 -62.8488 -54.45 + 86 334.86 586 5 0 -79.0367 -62.8489 -55.85 + 86 285.434 505 4 1 -79.0165 -62.8216 -84.45 + 86 106.803 586 4 0 -79.0087 -62.8248 -85.85 + 86 120.971 506 3 1 -78.818 -62.8501 -114.45 + 86 108.608 585 3 0 -78.8164 -62.8542 -115.85 + 86 113.264 505 2 1 -78.8542 -62.9271 -144.45 + 86 30.9682 506 2 1 -78.85 -62.9347 -144.783 + 86 332.057 585 2 0 -78.8367 -62.9725 -145.85 + 86 126.409 509 1 1 -78.2011 -64.3622 -174.45 + 86 134.591 578 1 0 -78.2818 -64.4194 -175.85 + 86 158.735 499 0 1 -80.1488 -65.4869 -204.45 + 86 115.046 572 0 0 -80.2674 -65.5343 -205.85 + 86 223.667 403 0 1 -99.3963 -57.5578 -204.85 + 86 55.9969 402 0 1 -99.55 -57.4789 -204.545 + 86 9.52859 577 1 0 -78.2927 -64.45 -176.24 + 86 85.9178 506 1 0 -58.4059 -78.759 -176.25 + 86 428.835 506 1 1 -78.7848 -62.9879 -174.45 + 86 132.964 585 1 0 -78.7893 -62.9801 -175.85 + 86 197.264 505 0 1 -78.8841 -62.7892 -204.45 + 86 134.282 586 0 0 -78.8753 -62.7758 -205.85 + 86 349.23 506 0 1 -78.8499 -62.6939 -204.721 + 86 90.7099 507 1 1 -78.5824 -63.3294 -174.45 + 86 31.0943 580 1 0 -78.8605 -64.0312 -175.85 + 86 119.709 579 1 0 -78.8668 -64.05 -175.886 + 86 21.755 464 0 1 -87.0564 -79.318 -204.45 + 86 159.914 465 0 1 -87.05 -79.3581 -204.48 + 86 37.0768 495 0 0 -86.6497 -80.9587 -205.85 + 86 55.0963 494 0 0 -86.6303 -81.05 -205.919 + 86 71.5814 493 0 0 -86.6048 -81.25 -206.046 + 86 39.277 492 0 0 -86.5733 -81.45 -206.166 + 86 58.116 559 0 1 -68.2221 -65.7858 -204.45 + 86 395.499 504 5 1 -79.05 -62.8368 -54.8041 + 86 110.95 1030 2 0 -44.968 26.1513 -146.25 + 86 47.8016 1029 2 0 -45.0689 26.05 -146.153 + 86 91.5376 1154 2 0 -16.9876 50.9204 -146.25 + 86 54.3813 1258 2 0 1.47041 71.6991 -146.25 + 86 6.68882 227 3 1 -134.739 -43.0354 -114.45 + 86 123.404 226 3 1 -134.75 -43.049 -114.456 + 86 182.621 225 3 1 -134.95 -43.3665 -114.637 + 86 55.3362 673 3 0 -134.537 -45.3039 -115.85 + 86 93.4909 672 3 0 -134.489 -45.45 -115.967 + 86 141.705 503 4 1 -79.2768 -62.5617 -84.45 + 86 95.0287 587 4 0 -79.2753 -62.5371 -85.85 + 86 146.56 503 3 1 -79.3068 -62.04 -114.45 + 86 127.857 590 3 0 -79.2639 -61.939 -115.85 + 86 120.705 507 2 1 -78.5113 -59.799 -144.45 + 86 105.479 601 2 0 -78.5197 -59.707 -145.85 + 86 87.9607 608 1 0 -78.3366 -58.335 -175.85 + 86 41.3763 607 1 0 -78.2506 -58.4501 -176.148 + 86 176.571 555 0 1 -68.8698 -77.181 -204.45 + 86 36.5153 507 0 0 -69.3218 -78.5599 -205.85 + 86 94.6496 506 0 0 -69.3526 -78.6501 -205.946 + 86 32.3076 505 0 0 -69.3968 -78.8501 -206.168 + 86 45.087 594 4 0 -78.9177 -61.0839 -85.85 + 86 67.4315 595 4 0 -78.9083 -61.05 -85.9987 + 86 19.802 517 3 1 -76.4622 -54.6612 -114.45 + 86 118.639 518 3 1 -76.45 -54.6418 -114.512 + 86 99.4594 629 3 0 -76.159 -54.2491 -115.85 + 86 200.571 566 2 1 -66.7425 -46.5783 -144.45 + 86 75.9274 675 2 0 -66.5573 -45.0097 -145.85 + 86 71.523 676 2 0 -66.5193 -44.85 -145.981 + 86 75.5 677 2 0 -66.4554 -44.65 -146.107 + 86 26.1587 678 2 0 -66.3885 -44.45 -146.214 + 86 86.0323 1258 1 0 -93.0469 71.65 -175.858 +Number of digits in this event: 31 +Using G4ParticleGun... +Particle energy: 4.59569 LIN +Particle: e- +Event: 87 +Number of tracker hits in this event: 56 + 87 149.094 528 10 1 -74.3486 -78.5073 95.55 + 87 168.776 507 10 0 -74.3487 -78.5074 94.15 + 87 97.6527 528 9 1 -74.369 -78.5153 65.55 + 87 111.457 507 9 0 -74.3692 -78.5163 64.15 + 87 160.868 528 8 1 -74.3624 -78.546 35.55 + 87 96.4027 507 8 0 -74.3606 -78.5481 34.15 + 87 198.223 528 7 1 -74.3265 -78.583 5.55 + 87 589.552 507 7 0 -74.3254 -78.5831 4.15 + 87 122.966 528 6 1 -74.2983 -78.5875 -24.45 + 87 125.765 507 6 0 -74.2968 -78.5865 -25.85 + 87 117.816 528 5 1 -74.2637 -78.5589 -54.45 + 87 126.24 507 5 0 -74.2637 -78.5593 -55.85 + 87 110.351 528 4 1 -74.2623 -78.574 -84.45 + 87 121.817 507 4 0 -74.2631 -78.5735 -85.85 + 87 86.2188 528 3 1 -74.2768 -78.5581 -114.45 + 87 197.063 507 3 0 -74.2771 -78.5592 -115.85 + 87 123.043 528 2 1 -74.2813 -78.5913 -144.45 + 87 599.252 507 2 0 -74.2833 -78.5925 -145.85 + 87 234.507 528 1 1 -74.3196 -78.6207 -174.45 + 87 174.237 507 1 0 -74.3222 -78.6217 -175.85 + 87 146.646 528 0 1 -74.371 -78.651 -204.45 + 87 135.413 506 0 0 -74.373 -78.6516 -205.85 + 87 134.345 224 3 0 -63.4118 -135.309 -116.25 + 87 27.0857 532 9 0 -44.6127 -73.4771 63.75 + 87 429.688 1086 1 0 1.43915 37.3109 -176.25 + 87 0.25518 848 5 1 -10.3271 22.3095 -54.45 + 87 27.8002 188 7 0 -61.9834 -142.4 3.75 + 87 448.705 527 2 1 -74.4783 -78.5248 -144.45 + 87 412.495 526 1 1 -74.8257 -77.9089 -174.45 + 87 37.6055 525 1 1 -74.85 -77.8843 -174.843 + 87 212.079 511 1 0 -74.9166 -77.823 -175.85 + 87 225.573 517 0 1 -76.591 -76.071 -204.45 + 87 129.926 519 0 0 -76.6338 -76.0583 -205.85 + 87 80.7802 1068 1 0 -44.4772 33.65 -176.142 + 87 30.935 506 2 0 -74.4658 -78.65 -146.179 + 87 35.6908 503 1 0 -74.1696 -79.3145 -175.85 + 87 84.7101 504 1 0 -74.1547 -79.25 -175.956 + 87 70.5038 505 1 0 -74.1906 -79.05 -176.132 + 87 0.739211 506 1 0 -74.2185 -78.85 -176.248 + 87 3.25014 810 1 0 -101.674 -17.8601 -176.25 + 87 123.481 811 1 0 -101.682 -17.8499 -176.236 + 87 35.3226 812 1 0 -101.924 -17.65 -175.928 + 87 81.1551 387 1 1 -102.56 -16.5569 -174.85 + 87 186.237 386 1 1 -102.75 -16.3709 -174.749 + 87 42.2373 385 1 1 -102.95 -16.2245 -174.776 + 87 202.612 819 1 0 -104.695 -16.0783 -175.85 + 87 239.851 820 1 0 -104.8 -16.05 -176.01 + 87 160.073 539 1 0 -120.035 -72.0583 -176.25 + 87 266.514 509 1 0 -75.0379 -78.1425 -175.85 + 87 113.177 502 0 1 -79.542 -78.4047 -204.45 + 87 141.614 508 0 0 -79.7198 -78.3581 -205.85 + 87 453.801 494 0 0 -95.4395 -81.0932 -206.25 + 87 186.85 495 0 0 -95.773 -81.05 -206.082 + 87 43.9248 493 0 0 -96.0385 -81.25 -206.073 + 87 118.32 508 1 0 -74.9048 -78.2927 -175.85 + 87 137.618 513 0 0 -76.6638 -77.4388 -205.85 +Number of digits in this event: 36 +Using G4ParticleGun... +Particle energy: 4.50985 LIN +Particle: e- +Event: 88 +Number of tracker hits in this event: 98 + 88 142.341 626 9 1 -54.7738 -118.212 65.55 + 88 132.572 309 9 0 -54.774 -118.213 64.15 + 88 171.18 626 8 1 -54.7849 -118.22 35.55 + 88 243.789 309 8 0 -54.7837 -118.219 34.15 + 88 262.694 626 7 1 -54.7569 -118.21 5.55 + 88 176.701 309 7 0 -54.7531 -118.21 4.15 + 88 222.758 626 6 1 -54.6935 -118.203 -24.45 + 88 102.943 309 6 0 -54.6921 -118.203 -25.85 + 88 325.057 626 5 1 -54.6615 -118.211 -54.45 + 88 373.553 309 5 0 -54.6614 -118.211 -55.85 + 88 212.577 626 4 1 -54.6527 -118.214 -84.45 + 88 108.914 309 4 0 -54.6462 -118.221 -85.85 + 88 152.002 627 3 1 -54.5335 -118.356 -114.45 + 88 124.815 309 3 0 -54.5224 -118.34 -115.85 + 88 100.868 629 2 1 -54.2001 -118.065 -144.45 + 88 132.39 310 2 0 -54.1703 -118.054 -145.85 + 88 94.4832 632 1 1 -53.5531 -117.836 -174.45 + 88 125.17 311 1 0 -53.5283 -117.829 -175.85 + 88 129.884 634 0 1 -53.078 -117.696 -204.45 + 88 97.0179 312 0 0 -53.0529 -117.67 -205.85 + 88 83.2322 264 2 0 -50.3617 -127.225 -146.25 + 88 71.8485 263 2 0 -50.1804 -127.35 -146.006 + 88 15.9888 657 2 1 -48.4711 -127.751 -144.85 + 88 453.359 658 2 1 -48.45 -127.764 -144.833 + 88 77.5958 259 2 0 -48.2946 -128.231 -145.85 + 88 291.777 260 2 0 -48.3206 -128.15 -146.015 + 88 252.185 627 0 1 -54.6179 -118.219 -204.45 + 88 257.638 309 0 0 -54.6146 -118.216 -205.85 + 88 17.3777 627 5 1 -54.65 -118.213 -54.7792 + 88 94.7696 629 4 1 -54.1741 -118.63 -84.45 + 88 132.251 307 4 0 -54.0814 -118.74 -85.85 + 88 66.1553 306 4 0 -54.0741 -118.75 -85.9778 + 88 111.116 638 3 1 -52.3338 -120.19 -114.45 + 88 130.063 298 3 0 -52.2712 -120.477 -115.85 + 88 17.0987 297 3 0 -52.2566 -120.55 -116.204 + 88 145.162 643 2 1 -51.3652 -126.464 -144.45 + 88 141.625 267 2 0 -51.4045 -126.683 -145.85 + 88 36.1953 638 1 1 -52.2696 -130.698 -174.45 + 88 80.2874 639 1 1 -52.25 -130.715 -174.579 + 88 125.912 246 1 0 -52.0943 -130.893 -175.85 + 88 106.369 659 0 1 -48.1244 -134.932 -204.45 + 88 102.886 224 0 0 -47.9317 -135.164 -205.85 + 88 138.15 620 4 1 -55.9031 -118.655 -84.45 + 88 138.881 609 3 1 -58.1274 -119.729 -114.45 + 88 113.8 302 3 0 -58.1792 -119.725 -115.85 + 88 186.401 601 2 1 -59.8368 -120.098 -144.45 + 88 234.935 300 2 0 -59.7198 -120.087 -145.85 + 88 108.447 615 1 1 -56.9656 -119.94 -174.45 + 88 24.5683 616 1 1 -56.85 -119.96 -174.792 + 88 106.562 300 1 0 -56.4671 -120.026 -175.85 + 88 126.499 672 0 1 -45.5839 -120.465 -204.451 + 88 19.8042 673 0 1 -45.45 -120.51 -204.782 + 88 133.574 297 0 0 -45.0367 -120.64 -205.85 + 88 56.917 600 2 1 -59.85 -120.096 -144.535 + 88 45.2442 627 4 1 -54.5874 -118.166 -84.4501 + 88 117.737 308 4 0 -55.0333 -118.405 -85.85 + 88 5.87103 582 3 1 -63.4707 -122.332 -114.45 + 88 62.4469 583 3 1 -63.4499 -122.326 -114.466 + 88 95.243 584 3 1 -63.25 -122.28 -114.622 + 88 63.7269 585 3 1 -63.05 -122.222 -114.797 + 88 158.674 291 3 0 -61.8417 -121.918 -115.85 + 88 55.7078 736 2 1 -32.7622 -114.854 -144.45 + 88 73.5123 737 2 1 -32.65 -114.94 -144.576 + 88 23.7262 738 2 1 -32.45 -115.062 -144.781 + 88 99.48 321 2 0 -31.6006 -115.757 -145.85 + 88 79.4118 320 2 0 -31.4182 -115.95 -145.993 + 88 66.2009 319 2 0 -31.2452 -116.15 -146.029 + 88 98.3541 318 2 0 -31.0756 -116.35 -146.053 + 88 169.652 317 2 0 -30.8741 -116.55 -146.014 + 88 128.162 316 2 0 -30.6495 -116.75 -145.985 + 88 175.067 315 2 0 -30.4561 -116.95 -145.986 + 88 26.2701 314 2 0 -30.2449 -117.15 -145.913 + 88 489.111 755 2 1 -29.0339 -117.966 -144.85 + 88 209.03 756 2 1 -28.85 -118.03 -144.673 + 88 119.815 757 2 1 -28.65 -118.104 -144.531 + 88 62.047 754 2 1 -29.05 -117.896 -144.6 + 88 65.7183 753 2 1 -29.2501 -117.933 -144.606 + 88 97.4086 752 2 1 -29.45 -118.034 -144.71 + 88 98.8229 751 2 1 -29.65 -118.249 -144.726 + 88 19.6897 299 2 0 -29.9131 -120.265 -145.85 + 88 56.7775 298 2 0 -29.9088 -120.35 -145.89 + 88 14.9563 297 2 0 -29.8356 -120.55 -145.87 + 88 77.4185 758 2 1 -28.4051 -122.371 -144.85 + 88 67.1336 759 2 1 -28.2496 -122.492 -144.753 + 88 87.0048 760 2 1 -28.05 -122.513 -144.679 + 88 152.98 761 2 1 -27.8495 -122.452 -144.555 + 88 85.1505 285 2 0 -27.513 -122.963 -145.85 + 88 85.8338 284 2 0 -27.5882 -123.15 -145.912 + 88 262.028 283 2 0 -27.6339 -123.35 -145.952 + 88 68.2694 309 2 0 -31.1015 -118.332 -145.85 + 88 44.3792 308 2 0 -31.1386 -118.35 -145.891 + 88 171.373 301 2 0 -31.4047 -119.95 -145.968 + 88 365.282 856 1 1 -8.85 -169.024 -174.597 + 88 148.398 370 3 0 86.1139 -106.15 -116.185 + 88 586.672 857 1 1 -8.65 -169.521 -174.748 + 88 57.2704 38 1 0 -8.00849 -172.437 -175.85 + 88 106.453 37 1 0 -7.94492 -172.55 -176 + 88 204.032 625 7 1 -54.8501 -118.136 5.31788 +Number of digits in this event: 46 +Using G4ParticleGun... +Particle energy: 5.19429 LIN +Particle: e- +Event: 89 +Number of tracker hits in this event: 129 + 89 477.147 1596 8 1 139.538 10.9937 35.55 + 89 380.871 954 8 0 139.538 10.9931 34.15 + 89 176.911 1596 7 1 139.544 10.9877 5.55 + 89 340.418 954 7 0 139.546 10.988 4.15 + 89 203.518 1597 6 1 139.606 10.9912 -24.45 + 89 225.172 954 6 0 139.607 10.9919 -25.85 + 89 105.16 1597 5 1 139.617 11.0108 -54.45 + 89 161.087 954 5 0 139.617 11.0106 -55.85 + 89 151.825 1597 4 1 139.628 11.0053 -84.45 + 89 121.142 954 4 0 139.628 11.006 -85.85 + 89 358.017 1597 3 1 139.609 11.0148 -114.45 + 89 338.082 954 3 0 139.609 11.015 -115.85 + 89 107.839 1597 2 1 139.602 11.0183 -144.45 + 89 268.176 954 2 0 139.603 11.0169 -145.85 + 89 190.072 1597 1 1 139.613 10.9914 -174.45 + 89 117.646 954 1 0 139.613 10.988 -175.85 + 89 176.7 1597 0 1 139.601 10.9306 -204.45 + 89 123.889 954 0 0 139.602 10.9287 -205.85 + 89 116.507 1608 2 1 141.844 8.27563 -144.45 + 89 99.2602 939 2 0 141.792 7.92391 -145.85 + 89 15.9786 938 2 0 141.783 7.85 -146.193 + 89 121.439 1605 1 1 141.32 1.56401 -174.45 + 89 60.2566 903 1 0 141.024 0.728056 -175.85 + 89 111.117 902 1 0 140.996 0.649767 -175.973 + 89 175.816 1575 0 1 135.152 -18.0707 -204.45 + 89 163.206 806 0 0 135.227 -18.7325 -205.85 + 89 52.1281 805 0 0 135.246 -18.85 -206.102 + 89 115.177 1610 2 1 142.188 11.6393 -144.45 + 89 113.178 957 2 0 142.38 11.5976 -145.85 + 89 151.072 1635 1 1 147.191 10.3773 -174.45 + 89 186.783 950 1 0 147.428 10.1446 -175.85 + 89 48.4958 1658 0 1 151.909 4.07641 -204.45 + 89 55.3578 1659 0 1 151.95 4.04744 -204.644 + 89 118.679 918 0 0 152.216 3.84655 -205.85 + 89 271.005 953 5 0 139.567 10.85 -56.142 + 89 324.635 1597 7 1 139.55 11.0461 5.29817 + 89 154.586 1596 6 1 139.54 11.0622 -24.45 + 89 118.031 955 6 0 139.523 11.0728 -25.85 + 89 127.833 1595 5 1 139.199 11.3048 -54.45 + 89 116.334 956 5 0 139.177 11.3189 -55.85 + 89 111.053 1592 4 1 138.733 11.5858 -84.45 + 89 168.604 957 4 0 138.724 11.6049 -85.85 + 89 105.631 1591 3 1 138.52 11.9894 -114.45 + 89 112.17 959 3 0 138.505 12.0128 -115.85 + 89 104.717 1590 2 1 138.237 12.4993 -144.45 + 89 111.632 962 2 0 138.228 12.5302 -145.85 + 89 107.645 1589 1 1 138.073 13.1846 -174.45 + 89 257.639 965 1 0 138.066 13.2142 -175.85 + 89 119.677 1588 0 1 137.915 13.7735 -204.45 + 89 162.351 968 0 0 137.898 13.8065 -205.85 + 89 142.626 1612 5 1 142.581 10.0663 -54.45 + 89 30.7347 949 5 0 142.735 9.86878 -55.85 + 89 83.582 948 5 0 142.749 9.85 -55.9803 + 89 149.446 1626 4 1 145.487 5.59552 -84.45 + 89 137.812 926 4 0 145.284 5.37821 -85.8503 + 89 62.1809 1611 3 1 142.382 2.21984 -114.45 + 89 450.388 1610 3 1 142.35 2.20394 -114.522 + 89 46.2858 909 3 0 141.764 1.88147 -115.85 + 89 100.485 908 3 0 141.708 1.84993 -115.977 + 89 89.343 1545 2 1 129.243 -6.61267 -144.45 + 89 26.5176 1544 2 1 129.15 -6.67763 -144.75 + 89 136.372 865 2 0 128.78 -6.93945 -145.85 + 89 6.37301 1490 1 1 118.162 -15.5262 -174.45 + 89 87.1576 1489 1 1 118.15 -15.5318 -174.458 + 89 58.2463 1488 1 1 117.95 -15.6283 -174.591 + 89 93.3693 1487 1 1 117.749 -15.7299 -174.712 + 89 7.45725 1486 1 1 117.55 -15.8403 -174.834 + 89 50.1736 816 1 0 115.89 -16.795 -175.85 + 89 105.252 815 1 0 115.791 -16.85 -175.909 + 89 110.019 814 1 0 115.452 -17.05 -176.112 + 89 131.856 1196 0 1 59.287 -44.7053 -204.45 + 89 132.396 1197 0 1 59.4501 -44.316 -204.581 + 89 262.826 1198 0 1 59.65 -43.8657 -204.617 + 89 201.651 1199 0 1 59.85 -42.9875 -204.673 + 89 138.537 1200 0 1 60.0501 -42.448 -204.58 + 89 5.07619 1502 2 0 -109.473 120.55 -145.927 + 89 2.43558 1503 2 0 -109.664 120.75 -145.854 + 89 292.264 349 2 1 -110.267 122.226 -144.85 + 89 119.862 348 2 1 -110.35 122.346 -144.509 + 89 243.072 914 3 0 142.178 2.8994 -115.85 + 89 229.583 1690 0 1 158.33 -14.9414 -204.655 + 89 128.685 1691 0 1 158.35 -14.9617 -204.788 + 89 368.405 824 0 0 158.529 -15.1288 -205.85 + 89 116.002 1595 7 1 139.17 11.1078 5.54971 + 89 170.547 953 7 0 139.507 10.8392 4.15 + 89 114.635 1632 6 1 146.594 6.13174 -24.4501 + 89 110.98 928 6 0 146.876 5.77312 -25.85 + 89 275.047 1664 5 1 153.123 -0.790869 -54.45 + 89 38.7702 1665 5 1 153.15 -0.801198 -54.7065 + 89 118.031 895 5 0 153.285 -0.862665 -55.85 + 89 192.517 1680 4 1 156.191 -2.63861 -84.45 + 89 125.672 886 4 0 156.2 -2.7387 -85.85 + 89 187.107 1683 3 1 156.807 -3.58889 -114.45 + 89 119.357 883 3 0 157.054 -3.39064 -115.85 + 89 123.553 1685 2 1 157.342 0.711737 -144.45 + 89 1.13361 1686 2 1 157.35 0.71929 -144.845 + 89 115.573 903 2 0 157.408 0.726479 -145.85 + 89 125.059 1682 1 1 156.665 0.795411 -174.45 + 89 11.9807 907 1 0 156.643 1.62136 -175.85 + 89 206.529 908 1 0 156.643 1.65 -175.895 + 89 13.0071 909 1 0 156.648 1.85 -176.204 + 89 65.462 1016 0 0 159.048 23.293 -205.85 + 89 80.0721 1017 0 0 159.106 23.45 -205.959 + 89 75.5143 1018 0 0 159.163 23.6501 -206.089 + 89 2.68253 1019 0 0 159.25 23.85 -206.244 + 89 7.83437 1235 0 0 140.036 67.2318 -206.25 + 89 169.856 1236 0 0 140.01 67.25 -206.237 + 89 113.904 1237 0 0 139.718 67.45 -206.105 + 89 248.279 1238 0 0 139.376 67.65 -205.992 + 89 71.2145 1574 0 1 135.149 68.5988 -204.807 + 89 114.999 1573 0 1 134.95 68.664 -204.761 + 89 85.4947 1572 0 1 134.75 68.7323 -204.719 + 89 69.8389 1571 0 1 134.55 68.7906 -204.671 + 89 50.5194 1570 0 1 134.35 68.8493 -204.62 + 89 143.192 1569 0 1 134.15 68.9277 -204.571 + 89 164.64 1568 0 1 133.95 69.0351 -204.526 + 89 63.81 1567 0 1 133.75 69.1591 -204.528 + 89 149.246 1566 0 1 133.55 69.2705 -204.569 + 89 78.6837 1565 0 1 133.35 69.4413 -204.608 + 89 104.43 1564 0 1 133.15 69.6761 -204.623 + 89 143.029 1563 0 1 132.95 69.8795 -204.647 + 89 60.7807 1562 0 1 132.75 70.1501 -204.696 + 89 63.5272 1561 0 1 132.55 70.3143 -204.721 + 89 105.453 1560 0 1 132.35 70.481 -204.73 + 89 498.211 1559 0 1 132.15 70.6662 -204.743 + 89 122.192 1259 0 0 130.062 71.9232 -205.85 + 89 134.879 1260 0 0 129.681 72.05 -206.007 + 89 164.919 1558 0 1 131.95 70.8388 -204.606 + 89 354.178 1682 3 1 156.75 -3.64063 -114.496 +Number of digits in this event: 64 +Using G4ParticleGun... +Particle energy: 4.98122 LIN +Particle: e- +Event: 90 +Number of tracker hits in this event: 340 + 90 258.448 1295 11 1 79.1351 2.10733 125.55 + 90 125.8 910 11 0 79.1361 2.10893 124.15 + 90 133.201 1295 10 1 79.1637 2.1436 95.55 + 90 142.93 910 10 0 79.1661 2.14451 94.15 + 90 505.485 1295 9 1 79.2112 2.16086 65.55 + 90 376.56 910 9 0 79.2129 2.16087 64.15 + 90 349.451 1295 8 1 79.2449 2.16383 35.55 + 90 121.299 910 8 0 79.2467 2.16437 34.15 + 90 139.757 1296 7 1 79.2707 2.16212 5.55 + 90 376.083 910 7 0 79.279 2.16444 4.15 + 90 697.835 1296 6 1 79.437 2.21684 -24.45 + 90 684.283 910 6 0 79.4427 2.21998 -25.85 + 90 187.023 1297 5 1 79.5492 2.2852 -54.45 + 90 221.071 911 5 0 79.5505 2.28957 -55.85 + 90 559.586 1297 4 1 79.6043 2.37258 -84.45 + 90 434.243 911 4 0 79.6106 2.38232 -85.85 + 90 207.635 1298 3 1 79.7234 2.59606 -114.45 + 90 109.951 912 3 0 79.7272 2.60115 -115.85 + 90 489.868 1298 2 1 79.7935 2.69201 -144.45 + 90 255.104 913 2 0 79.7911 2.6993 -145.85 + 90 206.201 1298 1 1 79.7169 2.84843 -174.45 + 90 219.42 914 1 0 79.7141 2.85812 -175.85 + 90 104.284 1298 0 1 79.6556 3.06229 -204.45 + 90 233.405 915 0 0 79.6573 3.0742 -205.85 + 90 170.864 1436 0 1 107.35 25.4695 -204.563 + 90 66.1766 62 14 0 55.548 -167.571 213.75 + 90 84.8368 955 14 1 11.25 -143.834 215.427 + 90 60.5338 954 14 1 11.0499 -143.718 215.433 + 90 94.4956 1180 14 1 56.0636 -168.166 215.15 + 90 366.147 1181 14 1 56.2501 -168.135 215.323 + 90 96.4325 1182 14 1 56.45 -167.854 215.176 + 90 165.37 1183 14 1 56.6502 -167.762 215.322 + 90 3.27809 96 14 0 56.0504 -160.837 214.15 + 90 43.5446 917 1 0 79.5455 3.5569 -175.85 + 90 205.035 918 1 0 79.5646 3.65032 -175.923 + 90 202.418 1304 1 1 80.9307 2.67073 -174.85 + 90 133.204 948 3 0 84.4964 9.67769 -116.25 + 90 108.225 1321 3 1 84.3988 9.82886 -114.85 + 90 184.259 1295 5 1 79.2152 1.94688 -54.45 + 90 275.094 909 5 0 79.2187 1.91728 -55.85 + 90 155.653 1296 4 1 79.4015 1.3664 -84.45 + 90 121.162 906 4 0 79.4183 1.35975 -85.85 + 90 207.029 905 3 0 79.7014 1.17324 -115.85 + 90 11.5658 904 2 0 79.662 0.850952 -145.85 + 90 184.5 903 2 0 79.6623 0.85 -145.901 + 90 322.891 1299 1 1 79.8627 0.368211 -174.45 + 90 155.5 901 1 0 79.8696 0.320433 -175.85 + 90 281.436 1300 0 1 80.0656 -0.62479 -204.45 + 90 160.102 896 0 0 80.079 -0.718506 -205.85 + 90 95.5127 1000 3 1 20.25 -86.4827 -114.811 + 90 118.873 1302 1 1 80.49 0.93441 -174.45 + 90 63.5849 905 1 0 80.378 1.19593 -175.852 + 90 174.407 906 1 0 80.3554 1.25 -176.077 + 90 134.183 1281 0 1 76.3827 11.8356 -204.45 + 90 123.343 1282 0 1 76.4501 11.8563 -204.491 + 90 65.931 1283 0 1 76.65 11.9105 -204.618 + 90 26.4037 1284 0 1 76.85 11.9667 -204.769 + 90 17.3028 961 0 0 77.7419 12.4279 -205.85 + 90 155.501 962 0 0 77.7802 12.45 -205.898 + 90 596.733 1296 5 1 79.3875 2.142 -54.45 + 90 236.5 910 5 0 79.3926 2.14493 -55.85 + 90 241.21 910 4 0 79.4975 2.19244 -85.85 + 90 126.153 1297 3 1 79.6187 2.13425 -114.45 + 90 127.165 910 3 0 79.6284 2.13974 -115.85 + 90 157.451 911 2 0 79.8484 2.25972 -145.85 + 90 119.515 910 1 0 80.0139 2.05308 -175.85 + 90 204.095 909 0 0 80.2185 1.95923 -205.85 + 90 8.37054 43 3 1 -171.35 -53.9815 -114.569 + 90 148.521 1301 0 1 80.25 1.94175 -204.487 + 90 151.331 865 1 0 73.836 -6.91587 -176.25 + 90 117.361 1274 1 1 74.916 -6.91096 -174.85 + 90 55.0835 1275 1 1 75.0501 -6.93946 -174.569 + 90 123.474 1279 3 1 76.0034 4.63059 -114.45 + 90 228.229 923 3 0 75.7765 4.77708 -115.85 + 90 81.2186 1253 2 1 70.6611 7.44805 -144.45 + 90 109.122 1252 2 1 70.65 7.44516 -144.486 + 90 137.481 936 2 0 70.258 7.39503 -145.85 + 90 21.4225 1204 1 1 60.8938 5.77849 -174.45 + 90 113.754 1203 1 1 60.85 5.79073 -174.533 + 90 18.3536 929 1 0 60.1278 6.03925 -175.85 + 90 157.255 930 1 0 60.0961 6.05 -175.906 + 90 15.6299 1124 0 1 44.8801 12.2862 -204.45 + 90 106.995 1123 0 1 44.85 12.3237 -204.49 + 90 86.1825 1122 0 1 44.65 12.5883 -204.686 + 90 80.8473 971 0 0 43.3593 14.2546 -205.85 + 90 84.1586 972 0 0 43.2208 14.45 -206.01 + 90 106.66 973 0 0 43.0883 14.6503 -206.155 + 90 77.797 1069 0 0 19.1445 33.955 -206.25 + 90 79.4246 1068 0 0 18.9735 33.8497 -206.026 + 90 98.601 990 0 1 18.212 33.2574 -204.85 + 90 36.2181 989 0 1 18.05 33.22 -204.565 + 90 99.7045 986 0 1 17.3627 33.3507 -204.45 + 90 0.723682 985 0 1 17.25 33.2308 -204.45 + 90 243.124 887 2 1 -2.56821 -77.6251 -144.85 + 90 20.157 1298 4 1 79.6505 2.22297 -84.8029 + 90 56.5776 1370 3 1 94.2046 0.856444 -114.45 + 90 108.604 1371 3 1 94.35 0.870452 -114.639 + 90 90.6706 906 3 0 95.6107 1.25007 -116.067 + 90 99.4468 1048 3 0 135.686 29.707 -116.25 + 90 65.4448 1049 3 0 135.841 29.85 -116.043 + 90 35.5978 1583 3 1 136.869 31.4492 -114.85 + 90 84.0314 1584 3 1 136.95 31.5228 -114.777 + 90 92.4728 1585 3 1 137.15 31.6922 -114.596 + 90 123.804 1017 4 0 144.98 23.6489 -86.2496 + 90 105.416 1625 4 1 145.281 23.3736 -84.85 + 90 39.9369 1626 4 1 145.413 23.3121 -84.45 + 90 73.8633 1627 4 1 145.55 23.3295 -84.4886 + 90 96.3838 1628 4 1 145.75 23.3638 -84.5502 + 90 103.32 1629 4 1 145.95 23.4615 -84.6094 + 90 80.506 1630 4 1 146.15 23.714 -84.5962 + 90 71.0847 1631 4 1 146.35 23.9253 -84.5777 + 90 64.9027 1632 4 1 146.55 24.0632 -84.6016 + 90 71.7493 1633 4 1 146.75 24.2275 -84.6012 + 90 95.5379 1634 4 1 146.95 24.4199 -84.6448 + 90 70.388 1635 4 1 147.15 24.6804 -84.7443 + 90 46.2015 1034 4 0 149.061 26.9196 -85.85 + 90 257.518 1035 4 0 149.17 27.0501 -85.9113 + 90 226.287 1036 4 0 149.309 27.25 -85.9877 + 90 102.319 1037 4 0 149.535 27.4504 -86.0383 + 90 15.6313 904 3 0 95.172 0.958514 -115.85 + 90 148.83 933 6 0 92.7294 6.82151 -26.2498 + 90 7.8159 934 6 0 92.7717 6.85 -26.2272 + 90 16.3324 908 5 0 79.5829 1.85 -56.2063 + 90 75.2674 1324 4 1 84.9246 -7.03106 -84.4504 + 90 113.162 1325 4 1 85.05 -7.19774 -84.5936 + 90 9.44748 1326 4 1 85.25 -7.47196 -84.8247 + 90 60.5594 856 4 0 85.9989 -8.69188 -85.85 + 90 135.557 855 4 0 86.059 -8.85 -85.9536 + 90 94.8474 854 4 0 86.1287 -9.05 -86.0717 + 90 43.111 853 4 0 86.1886 -9.25047 -86.1773 + 90 116.998 1386 3 1 97.3612 -49.6859 -114.45 + 90 175.331 649 3 0 97.6965 -50.0602 -115.85 + 90 10.5162 405 3 0 91.5164 -99.1149 -116.25 + 90 77.7116 404 3 0 91.5066 -99.15 -116.224 + 90 65.8031 403 3 0 91.4396 -99.35 -116.052 + 90 244.309 1356 3 1 91.4193 -100.629 -114.849 + 90 133.606 1296 8 1 79.2655 2.14218 35.5496 + 90 145.019 911 8 0 79.8082 2.43284 34.1494 + 90 92.1356 912 8 0 79.8343 2.45 34.0769 + 90 128.752 1330 7 1 86.1535 8.1645 5.54968 + 90 190.085 943 7 0 85.8356 8.71626 4.15 + 90 12.7399 944 7 0 85.7289 8.85004 3.79101 + 90 46.1584 1282 6 1 76.5266 19.0397 -24.45 + 90 60.174 1281 6 1 76.45 18.9749 -24.6405 + 90 107.038 991 6 0 75.6799 18.3804 -25.8505 + 90 73.6897 990 6 0 75.5154 18.25 -26.0954 + 90 35.6941 1202 5 1 60.507 1.67475 -54.45 + 90 81.8136 1201 5 1 60.4499 1.63857 -54.6084 + 90 119.344 906 5 0 60.1962 1.428 -55.85 + 90 110.199 1371 7 1 94.4973 -65.1638 5.15 + 90 5.49912 989 6 0 74.8394 18.05 -26.2439 + 90 125.656 1299 4 1 80.0137 2.9636 -84.45 + 90 211.931 914 4 0 79.9497 3.00349 -85.85 + 90 397.973 1293 3 1 78.8429 3.71583 -114.45 + 90 115.424 918 3 0 78.7296 3.67376 -115.85 + 90 138.891 1281 2 1 76.3031 2.79061 -144.451 + 90 185.692 1272 1 1 74.4605 1.64243 -174.45 + 90 134.981 907 1 0 74.4984 1.51101 -175.85 + 90 91.863 1276 0 1 75.2569 -0.466104 -204.45 + 90 98.7959 1275 0 1 75.25 -0.470649 -204.573 + 90 108.104 897 0 0 75.1957 -0.496243 -205.85 + 90 256.384 1295 4 1 79.2347 2.49839 -84.45 + 90 344.598 912 4 0 79.2084 2.50159 -85.85 + 90 107.002 911 3 0 78.7499 2.41375 -115.85 + 90 115.92 1292 2 1 78.493 3.14684 -144.45 + 90 318.869 915 2 0 78.5085 3.17147 -145.85 + 90 121.316 1292 1 1 78.5326 4.05548 -174.45 + 90 154.855 920 1 0 78.438 4.16012 -175.85 + 90 135.08 932 0 0 76.3828 6.45288 -205.85 + 90 111.339 1292 3 1 78.4711 3.21291 -114.45 + 90 230.932 915 3 0 78.4674 3.2163 -115.85 + 90 117.698 1291 2 1 78.3315 3.25304 -144.45 + 90 115.069 1289 1 1 77.9713 3.32397 -174.45 + 90 99.7638 916 1 0 77.9494 3.32453 -175.85 + 90 114.837 1286 0 1 77.4353 3.15848 -204.45 + 90 248.217 1297 6 1 79.5492 2.1101 -24.4502 + 90 375.875 1298 6 1 79.65 2.08616 -24.7487 + 90 109.59 908 6 0 79.7972 1.78297 -25.8501 + 90 119.789 912 6 0 79.8076 2.47563 -25.8501 + 90 123.502 1338 5 1 87.6571 8.42615 -54.45 + 90 66.4164 943 5 0 88.0584 8.79934 -55.8502 + 90 63.397 944 5 0 88.1133 8.85005 -56.0414 + 90 158.799 1380 4 1 96.1635 16.2278 -84.45 + 90 200.183 983 4 0 96.5262 16.7455 -85.85 + 90 63.1516 984 4 0 96.5973 16.85 -86.1284 + 90 178.917 1417 3 1 103.66 27.4994 -114.45 + 90 222.717 1040 3 0 103.973 28.0591 -115.85 + 90 277.079 1452 2 1 110.64 39.2868 -144.45 + 90 70.8674 1099 2 0 110.99 39.9403 -145.85 + 90 69.2969 1100 2 0 111.054 40.05 -146.091 + 90 229.347 1493 1 1 118.869 52.6704 -174.45 + 90 58.526 1166 1 0 119.102 53.3433 -175.85 + 90 55.8995 1167 1 0 119.139 53.45 -176.074 + 90 45.5904 1518 0 1 123.906 66.9361 -204.45 + 90 101.959 1519 0 1 123.95 67.0241 -204.586 + 90 4.95782 1238 0 0 124.374 67.8402 -205.85 + 90 139.933 1239 0 0 124.379 67.85 -205.865 + 90 23.8666 1240 0 0 124.482 68.05 -206.178 + 90 121.144 1585 2 1 137.182 1.01112 -144.85 + 90 25.607 1453 2 1 110.75 39.3542 -144.614 + 90 208.51 1041 3 0 103.826 28.25 -115.977 + 90 153.287 1297 1 0 66.9645 79.5836 -176.25 + 90 158.876 1298 1 0 66.8183 79.6502 -176.02 + 90 235.494 1294 8 1 78.9997 2.43105 35.55 + 90 121.841 1292 7 1 78.465 2.48971 5.55 + 90 119.946 912 7 0 78.4499 2.48333 4.15 + 90 198.667 1290 6 1 78.245 2.35078 -24.45 + 90 325.66 911 6 0 78.2501 2.36302 -25.85 + 90 101.546 1291 5 1 78.3322 2.58185 -54.45 + 90 129.77 912 5 0 78.3139 2.56762 -55.85 + 90 102.539 1289 4 1 77.9779 2.15054 -84.45 + 90 162.288 1289 3 1 77.9417 1.80186 -114.45 + 90 163.036 908 3 0 77.9133 1.79594 -115.85 + 90 86.784 1286 2 1 77.2969 1.61866 -144.45 + 90 126.786 907 2 0 77.2614 1.60771 -145.85 + 90 117.061 1282 1 1 76.6285 1.334 -174.45 + 90 146.69 1278 0 1 75.8059 0.953471 -204.45 + 90 170.26 904 0 0 75.7753 0.927483 -205.85 + 90 232.414 1291 6 1 78.2506 2.34724 -24.6954 + 90 201.011 1292 6 1 78.4501 2.20112 -24.7069 + 90 155.881 1293 6 1 78.65 2.17722 -24.5558 + 90 8.25995 1296 9 1 79.25 1.76993 65.1711 + 90 60.39 904 9 0 79.6204 0.95495 64.15 + 90 76.4218 903 9 0 79.6565 0.85 64.0194 + 90 31.2561 902 9 0 79.7391 0.65 63.7671 + 90 37.7573 1385 8 1 97.3057 -22.1194 35.55 + 90 72.461 1386 8 1 97.3501 -22.1559 35.4004 + 90 147.988 789 8 0 97.2248 -22.1923 34.15 + 90 58.5659 880 8 0 51.9149 -3.8756 33.75 + 90 210.568 881 8 0 51.8403 -3.85 33.7963 + 90 33.3963 1150 8 1 50.1439 -3.35277 35.15 + 90 69.2516 1149 8 1 50.05 -3.35458 35.2452 + 90 57.712 1148 8 1 49.8499 -3.33209 35.4006 + 90 81.9088 1147 8 1 49.6497 -3.27405 35.4309 + 90 62.9487 1146 8 1 49.45 -3.06792 35.3727 + 90 74.2624 1145 8 1 49.25 -2.88588 35.3724 + 90 126.068 1144 8 1 49.0498 -2.7011 35.4222 + 90 6.35294 889 8 0 49.1692 -2.0654 34.15 + 90 91.4717 890 8 0 49.1761 -2.05 34.1254 + 90 32.2301 891 8 0 49.2893 -1.85 33.8554 + 90 176.76 913 8 0 79.0186 2.73321 34.15 + 90 103.496 1294 7 1 78.8725 3.1346 5.55 + 90 143.06 915 7 0 78.8525 3.12637 4.15 + 90 110.299 915 6 0 78.427 3.11703 -25.85 + 90 133.159 1290 5 1 78.0835 3.64886 -54.45 + 90 119.163 918 5 0 78.0239 3.66414 -55.85 + 90 136.696 1283 4 1 76.6853 3.90184 -84.45 + 90 122.367 919 4 0 76.6087 3.93117 -85.85 + 90 117.236 1275 3 1 75.1368 4.50099 -114.45 + 90 111.36 922 3 0 75.0587 4.47435 -115.85 + 90 101.054 1266 2 1 73.337 3.92103 -144.45 + 90 159.803 919 2 0 73.2924 3.86467 -145.85 + 90 5.12961 918 2 0 73.2796 3.85 -146.233 + 90 95.6546 1262 1 1 72.4998 2.89532 -174.45 + 90 125.223 913 1 0 72.4828 2.84827 -175.85 + 90 107.039 1259 0 1 71.8794 1.74189 -204.45 + 90 146.542 908 0 0 71.8625 1.73413 -205.85 + 90 93.8775 824 1 0 25.1292 -15.1726 -176.25 + 90 106.992 823 1 0 24.925 -15.25 -176.106 + 90 13.001 822 1 0 24.6742 -15.45 -175.859 + 90 74.6452 1018 1 1 23.7385 -16.7436 -174.85 + 90 144.95 1017 1 1 23.65 -16.8424 -174.77 + 90 2.46184 1295 2 1 79.2483 2.173 -144.45 + 90 77.7058 1296 2 1 79.25 2.17509 -144.454 + 90 132.269 1297 2 1 79.45 2.23335 -144.587 + 90 190.291 1299 2 1 79.85 2.3872 -144.7 + 90 90.8153 910 2 0 83.9906 2.19826 -145.85 + 90 191.536 1106 2 1 41.4037 -66.5543 -144.45 + 90 217.55 1105 2 1 41.2499 -66.8453 -144.767 + 90 160.295 909 8 0 78.8348 1.88318 34.149 + 90 88.7829 908 8 0 78.7929 1.85 33.9607 + 90 136.752 1257 7 1 71.6492 -3.0186 5.55 + 90 26.2 882 7 0 71.0058 -3.60627 4.14935 + 90 226.422 881 7 0 70.963 -3.65 4.05606 + 90 51.9101 1185 6 1 57.2316 -21.9749 -24.4502 + 90 196.31 1184 6 1 57.0495 -22.0545 -24.5791 + 90 73.418 1183 6 1 56.85 -22.1457 -24.711 + 90 274.899 785 6 0 55.4648 -22.8642 -25.85 + 90 34.3912 784 6 0 55.1299 -23.05 -26.1688 + 90 3.0271 1005 5 1 21.0576 -36.3168 -54.4501 + 90 86.2248 1004 5 1 21.05 -36.317 -54.463 + 90 22.5457 1003 5 1 20.85 -36.3001 -54.7802 + 90 168.594 719 5 0 20.2646 -36.2196 -55.8502 + 90 20.1339 919 4 1 3.99306 -35.1402 -84.45 + 90 183.405 920 4 1 4.05 -35.2021 -84.4689 + 90 67.9517 921 4 1 4.25035 -35.4054 -84.5182 + 90 69.9174 922 4 1 4.45 -35.5362 -84.5425 + 90 77.0776 923 4 1 4.65 -35.6877 -84.5603 + 90 73.8821 924 4 1 4.85039 -35.8503 -84.5783 + 90 107.888 925 4 1 5.05 -36.0419 -84.5439 + 90 54.167 926 4 1 5.25 -36.2262 -84.5071 + 90 46.0974 581 5 0 -61.8419 -63.8023 -56.25 + 90 82.4331 580 5 0 -61.9397 -63.85 -56.1812 + 90 108.244 579 5 0 -62.191 -64.05 -56.054 + 90 11.8479 592 5 1 -61.4759 -64.2359 -54.85 + 90 74.6163 593 5 1 -61.4493 -64.2365 -54.8164 + 90 49.1157 594 5 1 -61.25 -64.1983 -54.6576 + 90 58.8507 595 5 1 -61.0496 -64.1568 -54.6084 + 90 85.8711 596 5 1 -60.85 -64.1491 -54.6118 + 90 101.421 597 5 1 -60.6499 -64.4701 -54.582 + 90 28.2489 575 5 0 -60.4824 -65.0008 -55.8501 + 90 167.103 574 5 0 -60.4534 -65.0501 -55.9821 + 90 79.2493 573 5 0 -60.2765 -65.2501 -56.153 + 90 281.703 572 5 0 -60.1952 -65.4507 -56.1728 + 90 66.2735 571 5 0 -60.1921 -65.6504 -56.2082 + 90 72.4532 570 5 0 -60.1173 -65.8502 -56.1567 + 90 64.1531 569 5 0 -60.1085 -66.05 -56.1325 + 90 91.1406 568 5 0 -60.0601 -66.2504 -56.1635 + 90 189.122 567 5 0 -59.8422 -66.45 -56.1637 + 90 29.1549 566 5 0 -59.7816 -66.65 -55.9424 + 90 27.6471 579 5 1 -64.2106 -66.7511 -54.85 + 90 176.644 578 5 1 -64.25 -66.7555 -54.8416 + 90 128.178 1254 7 1 71.0228 -3.55375 5.55 + 90 93.3001 1215 6 1 63.1346 -4.71141 -24.45 + 90 23.6674 1214 6 1 63.05 -4.70247 -24.7547 + 90 138.635 876 6 0 62.7735 -4.69812 -25.85 + 90 109.372 1179 5 1 55.9228 -3.58419 -54.4501 + 90 27.0153 1178 5 1 55.8499 -3.48271 -54.7242 + 90 87.4116 884 5 0 55.5167 -3.10628 -55.85 + 90 175.464 885 5 0 55.4655 -3.05 -56.016 + 90 50.9886 1128 4 1 45.6972 7.81202 -84.45 + 90 59.7258 1127 4 1 45.65 7.84226 -84.6205 + 90 4.4407 939 4 0 45.2865 8.04706 -85.85 + 90 112.778 940 4 0 45.281 8.05 -85.8684 + 90 163.663 1084 3 1 36.8781 14.2085 -114.45 + 90 142.93 972 3 0 36.9102 14.5218 -115.85 + 90 15.8804 1096 2 1 39.4453 18.4547 -144.45 + 90 139.861 1097 2 1 39.45 18.468 -144.489 + 90 104.692 992 2 0 39.8394 18.5234 -145.85 + 90 107.253 1141 1 1 48.3263 18.8195 -174.45 + 90 167.776 1140 1 1 48.25 18.8383 -174.586 + 90 1.62386 1139 1 1 48.05 18.9201 -174.844 + 90 143.874 996 1 0 47.2343 19.2819 -175.85 + 90 3.2 997 1 0 46.8873 19.45 -176.243 + 90 3.50298 1006 0 1 21.2648 30.8873 -204.45 + 90 84.5285 1005 0 1 21.25 30.8957 -204.459 + 90 64.0923 1004 0 1 21.05 31.0022 -204.619 + 90 22.0701 1003 0 1 20.85 31.0659 -204.798 + 90 121.622 1056 0 0 19.6594 31.3525 -205.85 + 90 17.2467 1057 0 0 19.3271 31.4501 -206.192 +Number of digits in this event: 146 +Using G4ParticleGun... +Particle energy: 7.55669 LIN +Particle: e- +Event: 91 +Number of tracker hits in this event: 113 + 91 143.803 655 11 1 -48.9581 -59.3619 125.55 + 91 93.8174 603 11 0 -48.9595 -59.363 124.15 + 91 109.187 655 10 1 -48.9857 -59.3901 95.55 + 91 109.132 603 10 0 -48.9874 -59.3922 94.15 + 91 126.518 655 9 1 -49.0213 -59.4357 65.55 + 91 98.8402 603 9 0 -49.0239 -59.4385 64.15 + 91 112.364 654 8 1 -49.0801 -59.4927 35.55 + 91 125.962 602 8 0 -49.0814 -59.4961 34.15 + 91 123.865 654 7 1 -49.1046 -59.5676 5.55 + 91 157.258 602 7 0 -49.1061 -59.57 4.15 + 91 186.793 654 6 1 -49.1414 -59.6159 -24.45 + 91 118.639 602 6 0 -49.1416 -59.6176 -25.85 + 91 398.169 654 5 1 -49.1415 -59.6507 -54.45 + 91 430.146 601 5 0 -49.1416 -59.6506 -55.85 + 91 281.941 654 4 1 -49.1468 -59.6462 -84.45 + 91 367.956 601 4 0 -49.1461 -59.6512 -85.85 + 91 123.36 654 3 1 -49.1488 -59.72 -114.45 + 91 246.442 601 3 0 -49.1519 -59.7325 -115.85 + 91 332.651 654 2 1 -49.22 -60.003 -144.45 + 91 106.631 600 2 0 -49.2159 -60.012 -145.85 + 91 284.88 654 1 1 -49.1764 -60.1821 -174.45 + 91 385.965 599 1 0 -49.1755 -60.1814 -175.85 + 91 384.526 654 0 1 -49.1519 -60.146 -204.45 + 91 188.04 599 0 0 -49.1597 -60.141 -205.85 + 91 289.214 601 2 0 -49.3576 -59.6641 -145.85 + 91 131.579 638 1 1 -52.3702 -60.3689 -174.45 + 91 107.522 598 1 0 -52.4159 -60.3919 -175.85 + 91 111.84 635 0 1 -52.8644 -60.3953 -204.45 + 91 14.3671 636 0 1 -52.85 -60.3842 -204.803 + 91 127.078 598 0 0 -52.8061 -60.3523 -205.85 + 91 42.7393 653 2 1 -49.25 -59.7979 -144.703 + 91 26.3898 598 2 0 -49.5324 -60.3953 -145.85 + 91 104.314 597 2 0 -49.5544 -60.4501 -145.952 + 91 17.5124 382 2 0 -51.1488 -103.699 -146.25 + 91 96.3465 381 2 0 -51.1547 -103.75 -146.194 + 91 29.238 380 2 0 -51.1913 -103.95 -145.912 + 91 119.868 644 2 1 -51.1746 -104.774 -144.85 + 91 10.7703 645 2 1 -51.0499 -104.913 -144.491 + 91 18.2073 170 6 1 -146.019 -21.8913 -24.85 + 91 136.675 796 0 1 -20.85 -51.1601 -204.847 + 91 259.08 653 6 1 -49.2503 -59.591 -24.5757 + 91 281.789 756 5 0 16.3918 -28.85 -56.2135 + 91 146.43 653 3 1 -49.272 -59.65 -114.45 + 91 131.918 657 2 1 -48.6309 -59.7378 -144.45 + 91 437.515 656 1 1 -48.6558 -58.808 -174.45 + 91 202.099 606 1 0 -48.6684 -58.7463 -175.85 + 91 111.775 656 0 1 -48.8165 -57.465 -204.45 + 91 125.288 613 0 0 -48.8157 -57.3933 -205.85 + 91 159.344 652 3 1 -49.469 -59.3218 -114.45 + 91 123.089 604 3 0 -49.4266 -59.2422 -115.85 + 91 22.3434 658 2 1 -48.2574 -57.651 -144.45 + 91 92.2943 659 2 1 -48.25 -57.6482 -144.531 + 91 153.243 612 2 0 -48.1299 -57.5939 -145.85 + 91 169.775 673 1 1 -45.4281 -56.3167 -174.45 + 91 133.592 618 1 0 -45.2382 -56.2919 -175.851 + 91 115.501 695 0 1 -41.0389 -56.1381 -204.45 + 91 125.317 620 0 0 -40.8993 -55.9633 -205.85 + 91 32.0006 479 0 1 -84.05 -23.3289 -204.575 + 91 69.6851 480 0 1 -84.05 -23.287 -204.557 + 91 111.473 652 4 1 -49.4527 -59.6587 -84.45 + 91 167.353 648 3 1 -50.405 -60.2418 -114.45 + 91 110.532 598 3 0 -50.4411 -60.2857 -115.85 + 91 69.9155 637 2 1 -52.6322 -61.0142 -144.45 + 91 55.7224 636 2 1 -52.65 -61.0245 -144.659 + 91 122.532 594 2 0 -52.7547 -61.0852 -145.85 + 91 166.027 623 1 1 -55.2645 -62.438 -174.45 + 91 102.283 587 1 0 -55.4036 -62.5052 -175.85 + 91 137.37 609 0 1 -58.2193 -63.8959 -204.45 + 91 24.081 608 0 1 -58.25 -63.9125 -204.745 + 91 248.755 580 0 0 -58.3643 -63.9776 -205.85 + 91 132.149 655 3 1 -48.9986 -59.9164 -114.45 + 91 160.943 600 3 0 -48.9965 -59.923 -115.85 + 91 417.859 655 2 1 -48.9463 -60.0489 -144.45 + 91 357.35 599 2 0 -48.943 -60.0593 -145.85 + 91 149.923 597 1 0 -48.9933 -60.5136 -175.85 + 91 119.938 627 0 1 -54.5538 -60.8569 -204.45 + 91 139.843 596 0 0 -54.7468 -60.7167 -205.851 + 91 11.9827 592 1 0 -49.0359 -61.6199 -175.85 + 91 203.08 591 1 0 -49.0518 -61.65 -175.855 + 91 235.146 659 1 1 -48.0994 -63.0986 -174.45 + 91 71.2457 580 1 0 -47.9689 -63.918 -175.85 + 91 76.0897 579 1 0 -47.9533 -64.05 -176.059 + 91 130.892 658 0 1 -48.2822 -82.7317 -204.45 + 91 121.178 483 0 0 -48.6017 -83.3079 -205.85 + 91 20.7474 482 0 0 -48.6807 -83.4501 -206.158 + 91 613.17 655 1 1 -48.956 -60.1806 -174.45 + 91 24.7628 600 0 0 -49.0826 -60.0455 -205.85 + 91 9.44833 411 1 0 -49.7726 -97.9156 -176.25 + 91 84.256 410 1 0 -49.7726 -97.9506 -176.224 + 91 64.8339 409 1 0 -49.7945 -98.1502 -176.021 + 91 105.214 649 1 1 -50.1819 -99.3704 -174.85 + 91 131.693 648 1 1 -50.25 -99.6613 -174.673 + 91 172.54 647 1 1 -50.45 -100.091 -174.595 + 91 3.43824 128 5 0 -156.623 -154.35 -55.8997 + 91 256.179 601 1 0 -48.9704 -59.7637 -175.851 + 91 1.78992 602 1 0 -48.9716 -59.65 -176.244 + 91 125.297 648 0 0 -49.4031 -50.4438 -205.85 + 91 35.8083 653 1 1 -49.25 -60.0408 -174.806 + 91 151.951 600 1 0 -51.9182 -59.85 -176.06 + 91 30.1727 505 1 0 -143.098 -79.0201 -176.25 + 91 86.363 504 1 0 -143.162 -79.0501 -176.208 + 91 47.4882 503 1 0 -143.228 -79.25 -176.105 + 91 70.8343 502 1 0 -143.158 -79.45 -176.067 + 91 69.0968 501 1 0 -143.11 -79.65 -176.067 + 91 69.7678 500 1 0 -143.068 -79.85 -176.021 + 91 35.5121 499 1 0 -143.072 -80.05 -175.945 + 91 198.006 186 1 1 -142.896 -81.1494 -174.85 + 91 313.047 187 1 1 -142.75 -81.6097 -174.529 + 91 194.529 607 3 0 -48.5494 -58.539 -115.85 + 91 72.5623 602 5 0 -49.2197 -59.6497 -55.9195 + 91 76.2493 653 5 1 -49.3357 -59.4726 -54.85 + 91 259.432 653 0 1 -49.3135 -59.8183 -204.45 + 91 249.741 601 0 0 -49.32 -59.8097 -205.85 +Number of digits in this event: 62 +Using G4ParticleGun... +Particle energy: 2.26526 LIN +Particle: e- +Event: 92 +Number of tracker hits in this event: 162 + 92 127.755 1364 10 1 93.0734 49.0559 95.55 + 92 119.111 1144 10 0 93.0696 49.0428 94.15 + 92 118.795 1364 9 1 92.9711 48.7379 65.55 + 92 153.398 1143 9 0 92.9579 48.7347 64.15 + 92 124.336 1362 8 1 92.621 48.7371 35.55 + 92 116.456 1143 8 0 92.6097 48.7345 34.15 + 92 154.479 1360 7 1 92.3412 48.6091 5.55 + 92 133.009 1142 7 0 92.3444 48.6042 4.15 + 92 328.577 1361 6 1 92.4783 48.4271 -24.45 + 92 127.499 1142 6 0 92.4502 48.4836 -25.85 + 92 147.017 1357 5 1 91.7385 49.5877 -54.45 + 92 318.792 1148 5 0 91.7196 49.6666 -55.85 + 92 123.964 1356 4 1 91.4646 51.3743 -84.45 + 92 352.753 1157 4 0 91.469 51.4672 -85.85 + 92 123.139 1357 3 1 91.5841 53.3141 -114.45 + 92 128.775 1166 3 0 91.5929 53.3816 -115.85 + 92 191.426 1358 2 1 91.7975 54.8002 -144.45 + 92 275.387 1173 2 0 91.7513 54.807 -145.85 + 92 154.33 1352 1 1 90.726 54.9391 -174.45 + 92 111.56 1174 1 0 90.6679 54.9824 -175.85 + 92 69.471 1347 0 1 89.4602 55.8906 -204.45 + 92 35.6105 1346 0 1 89.45 55.9041 -204.701 + 92 117.588 1179 0 0 89.4029 55.9641 -205.85 + 92 183.018 1295 0 0 144.052 79.1697 -206.25 + 92 102.339 472 0 0 33.7598 -85.5837 -206.25 + 92 163.471 473 0 0 33.7237 -85.45 -206.062 + 92 103.116 1362 2 1 92.722 49.3218 -144.45 + 92 148.626 1361 2 1 92.55 49.2702 -144.783 + 92 117.198 1146 2 0 92.399 49.4089 -145.85 + 92 170.01 1147 2 0 92.3764 49.45 -146.065 + 92 608.585 1364 8 1 93.1157 49.2109 35.55 + 92 853.699 1145 8 0 93.1488 49.2198 34.15 + 92 157.003 1369 7 1 93.9841 49.4466 5.55 + 92 110.181 1146 7 0 93.9793 49.447 4.15 + 92 103.009 1368 6 1 93.8336 49.3752 -24.45 + 92 392.476 1146 6 0 93.7874 49.4021 -25.85 + 92 114.777 1363 5 1 92.9134 50.2253 -54.45 + 92 193.777 1151 5 0 92.8272 50.2895 -55.85 + 92 136.486 1354 4 1 90.9896 51.4807 -84.45 + 92 22.9953 1353 4 1 90.95 51.4843 -84.8027 + 92 117.051 1337 3 1 87.5594 52.0305 -114.45 + 92 231.452 1161 3 0 87.3096 52.2693 -115.85 + 92 127.964 1311 2 1 82.4184 56.9405 -144.45 + 92 118.571 1185 2 0 82.1007 57.0777 -145.85 + 92 80.197 1278 1 1 75.7167 60.1293 -174.45 + 92 49.3399 1277 1 1 75.65 60.1915 -174.69 + 92 259.211 1202 1 0 75.3188 60.5018 -175.85 + 92 222.6 1244 0 1 68.9549 68.9609 -204.45 + 92 176.386 1246 0 0 68.6412 69.3004 -205.85 + 92 271.729 470 1 0 -26.2688 -85.9148 -176.25 + 92 149.726 469 1 0 -26.2777 -86.05 -176.156 + 92 521.589 1331 2 1 86.2951 51.9769 -144.45 + 92 253.425 1159 2 0 86.2215 52.0269 -145.85 + 92 250.309 1331 1 1 86.3852 53.0774 -174.45 + 92 115.154 1164 1 0 86.3611 53.003 -175.85 + 92 135.301 1332 0 1 86.5718 50.4418 -204.45 + 92 31.0708 1333 0 1 86.65 50.5465 -204.802 + 92 100.618 1154 0 0 86.8937 50.8648 -205.85 + 92 381.028 1162 2 0 86.4359 52.4757 -145.85 + 92 60.439 1334 1 1 86.9504 61.1427 -174.45 + 92 74.1262 1335 1 1 87.05 61.2079 -174.633 + 92 1.19383 1207 1 0 87.5891 61.6479 -175.85 + 92 333.706 1208 1 0 87.5916 61.65 -175.856 + 92 143.353 1397 0 1 99.5775 73.4173 -204.45 + 92 18.6626 1398 0 1 99.7501 73.3819 -204.782 + 92 197.25 1266 0 0 100.325 73.3003 -205.85 + 92 365.43 1365 7 1 93.3016 49.7396 5.55 + 92 119.181 1148 7 0 93.3102 49.7571 4.15 + 92 645.802 1366 6 1 93.502 50.1548 -24.45 + 92 124.461 1150 6 0 93.5165 50.1939 -25.85 + 92 134.974 1367 5 1 93.7155 50.9351 -54.45 + 92 198.813 1154 5 0 93.7208 50.9754 -55.85 + 92 164.314 1367 4 1 93.7181 51.9011 -84.45 + 92 120.422 1159 4 0 93.7067 51.9216 -85.85 + 92 103.159 1366 3 1 93.5069 52.3435 -114.45 + 92 104.857 1366 2 1 93.4211 52.9182 -144.45 + 92 206.211 1164 2 0 93.4061 52.9621 -145.85 + 92 107.28 1363 1 1 92.932 53.8066 -174.45 + 92 116.181 1169 1 0 92.8921 53.8539 -175.85 + 92 221.542 1359 0 1 92.1166 54.853 -204.45 + 92 304.281 1174 0 0 92.052 54.9079 -205.85 + 92 217.061 1366 1 1 93.5108 53.4373 -174.45 + 92 115.83 1168 1 0 93.6048 53.702 -175.85 + 92 149.1 1377 0 1 95.6686 58.909 -204.45 + 92 112.34 1194 0 0 95.7439 59.0097 -205.85 + 92 4.8818 1195 0 0 95.7597 59.05 -206.235 + 92 55.0648 1367 1 1 93.5501 53.4933 -174.669 + 92 102.255 1167 1 0 93.8494 53.5518 -175.85 + 92 8.65929 1405 0 1 101.338 54.9958 -204.45 + 92 242.242 1406 0 1 101.35 54.9953 -204.475 + 92 98.8055 1092 0 0 109.262 38.6411 -206.25 + 92 29.4356 1091 0 0 109.204 38.45 -205.947 + 92 115.098 1445 0 1 109.175 38.0724 -204.85 + 92 120.987 1235 5 0 130.159 67.1596 -56.25 + 92 202.311 1236 5 0 130.07 67.25 -56.0638 + 92 13.4964 1161 4 0 95.1788 52.3428 -85.85 + 92 177.211 1080 2 0 85.2969 36.1957 -145.85 + 92 131.749 1144 7 0 93.3025 48.9372 4.15 + 92 207.094 1367 6 1 93.6097 48.7383 -24.45 + 92 108.278 1143 6 0 93.6382 48.714 -25.85 + 92 226.483 1370 5 1 94.2481 48.2532 -54.45 + 92 127.977 1140 5 0 94.2764 48.2276 -55.85 + 92 110.162 1373 4 1 94.8697 47.6954 -84.45 + 92 106.803 1138 4 0 94.8982 47.6729 -85.85 + 92 125.788 1376 3 1 95.5266 47.201 -114.45 + 92 114.446 1135 3 0 95.5372 47.1916 -115.85 + 92 169.746 1378 2 1 95.7578 47.0136 -144.45 + 92 116.875 1134 2 0 95.7799 47.0118 -145.85 + 92 112.367 1380 1 1 96.1648 46.9185 -174.45 + 92 199.621 1134 1 0 96.1724 46.9261 -175.85 + 92 160.325 1380 0 1 96.3312 47.0741 -204.45 + 92 120.13 1135 0 0 96.3503 47.0827 -205.85 + 92 129.337 1145 7 0 93.3295 49.1621 4.15 + 92 106.766 1375 4 1 95.2333 50.0386 -84.45 + 92 115.388 1149 4 0 95.3086 50.0323 -85.85 + 92 230.249 1383 3 1 96.9246 49.8331 -114.45 + 92 253.511 1148 3 0 97.0049 49.8265 -115.85 + 92 200.585 1392 2 1 98.6108 49.6185 -144.45 + 92 184.469 1401 1 1 100.407 49.4318 -174.45 + 92 115.917 1146 1 0 100.501 49.43 -175.85 + 92 131.833 1411 0 1 102.364 49.3745 -204.45 + 92 95.2257 1146 0 0 102.452 49.3862 -205.85 + 92 121.14 1364 5 1 93.0268 50.0066 -54.45 + 92 121.338 1150 5 0 92.9853 50.054 -55.85 + 92 118.292 1359 4 1 92.1441 50.7983 -84.45 + 92 120.999 1153 4 0 92.1573 50.8089 -85.8505 + 92 114.988 1360 3 1 92.3466 50.9133 -114.45 + 92 129.411 1154 3 0 92.3492 50.9657 -115.85 + 92 155.713 1360 1 1 92.2631 51.9077 -174.45 + 92 109.865 1159 1 0 92.3222 51.9232 -175.85 + 92 121.88 1367 0 1 93.6017 52.8827 -204.45 + 92 96.4092 1164 0 0 93.7087 52.9647 -205.85 + 92 184.773 1350 0 1 90.15 53.4421 -204.71 + 92 83.1767 1163 0 0 90.383 52.7141 -205.85 + 92 180.815 1162 0 0 90.4062 52.65 -205.956 + 92 171.795 1351 0 1 90.35 53.3959 -204.688 + 92 66.8187 1161 0 0 91.263 52.45 -206.081 + 92 293.309 1352 0 1 90.55 53.1517 -204.685 + 92 223.077 1353 0 1 90.75 52.638 -204.78 + 92 88.9041 1166 0 0 90.6992 53.45 -205.925 + 92 72.0869 1147 6 0 93.5811 49.5967 -25.85 + 92 91.5418 1148 6 0 93.5905 49.6501 -26.0713 + 92 139.406 1372 5 1 94.6773 56.6039 -54.45 + 92 157.821 1184 5 0 94.7023 56.8768 -55.8504 + 92 133.711 1378 4 1 95.8617 61.982 -84.45 + 92 118.063 1210 4 0 95.8795 62.1544 -85.85 + 92 167.402 1226 3 0 96.7275 65.3968 -115.85 + 92 107.245 1368 2 1 93.9031 64.9883 -144.45 + 92 27.7616 1367 2 1 93.75 64.9044 -144.76 + 92 131.26 1222 2 0 93.2051 64.5776 -145.85 + 92 315.6 1295 1 1 79.236 55.7342 -174.45 + 92 76.7974 1173 1 0 78.7961 54.7853 -175.85 + 92 94.1853 1172 1 0 78.7361 54.65 -176.045 + 92 72.4608 1245 0 1 69.108 36.4688 -204.45 + 92 86.0478 1077 0 0 68.5353 35.6309 -205.85 + 92 50.6549 1076 0 0 68.3883 35.45 -206.131 + 92 40.4515 843 0 0 49.0081 -11.3327 -206.25 + 92 69.8066 842 0 0 48.9685 -11.4501 -206.203 + 92 72.3144 841 0 0 48.9156 -11.65 -206.099 + 92 123.999 1143 0 1 48.8065 -11.7858 -204.85 + 92 239.264 1611 2 0 106.773 142.377 -146.25 + 92 53.2596 1610 2 0 106.812 142.35 -146.097 +Number of digits in this event: 93 +Using G4ParticleGun... +Particle energy: 2.19593 LIN +Particle: e- +Event: 93 +Number of tracker hits in this event: 114 + 93 112.203 714 10 1 -37.1935 -79.9458 95.55 + 93 123.229 500 10 0 -37.191 -79.942 94.15 + 93 120.77 714 9 1 -37.1286 -79.8613 65.55 + 93 129.306 500 9 0 -37.1303 -79.8549 64.15 + 93 103.599 714 8 1 -37.1623 -79.7183 35.55 + 93 338.649 501 8 0 -37.1642 -79.7136 34.15 + 93 195.427 714 7 1 -37.2142 -79.6084 5.55 + 93 122.161 502 7 0 -37.2201 -79.6035 4.15 + 93 106.974 713 6 1 -37.3463 -79.5134 -24.45 + 93 113.596 502 6 0 -37.3496 -79.51 -25.85 + 93 117.74 713 5 1 -37.413 -79.4338 -54.45 + 93 102.149 503 5 0 -37.4281 -79.4267 -55.85 + 93 94.9279 711 4 1 -37.7399 -79.2774 -84.45 + 93 130.98 503 4 0 -37.7537 -79.2723 -85.85 + 93 130.001 709 3 1 -38.0566 -79.1568 -114.45 + 93 102.217 504 3 0 -38.0724 -79.1459 -115.85 + 93 128.404 708 2 1 -38.3786 -78.8957 -144.45 + 93 131.58 505 2 0 -38.3898 -78.8745 -145.85 + 93 247.855 707 1 1 -38.6443 -78.4289 -174.45 + 93 158.836 508 1 0 -38.6594 -78.4091 -175.85 + 93 408.894 705 0 1 -38.9272 -78.018 -204.45 + 93 349.117 510 0 0 -38.9414 -78.0076 -205.85 + 93 66.1999 317 1 1 -116.735 -70.1464 -174.85 + 93 84.0497 704 0 1 -39.05 -77.7088 -204.733 + 93 132.774 516 0 0 -39.5046 -76.8026 -205.85 + 93 87.7908 517 0 0 -39.4638 -76.6499 -205.963 + 93 53.7261 700 0 1 -39.9964 -76.5049 -204.85 + 93 119.094 699 0 1 -40.05 -76.4939 -204.8 + 93 32.2726 701 0 1 -39.7867 -72.9332 -204.85 + 93 244.749 365 4 0 -61.0486 -107.056 -86.25 + 93 229.689 512 6 0 -85.6765 -77.6278 -26.25 + 93 34.5042 463 6 1 -87.3396 -77.7401 -24.85 + 93 62.7428 462 6 1 -87.45 -77.7598 -24.7571 + 93 76.5714 461 6 1 -87.65 -77.7949 -24.5986 + 93 50.2031 460 6 1 -87.85 -77.8813 -24.4803 + 93 67.1026 459 6 1 -88.05 -77.8552 -24.5078 + 93 89.7404 458 6 1 -88.2503 -77.6886 -24.5785 + 93 61.1174 457 6 1 -88.45 -77.588 -24.7021 + 93 34.1642 456 6 1 -88.65 -77.5487 -24.8078 + 93 65.4225 514 6 0 -95.2795 -77.1751 -25.85 + 93 65.0721 513 6 0 -95.4927 -77.25 -25.8689 + 93 45.4755 381 6 1 -103.773 -77.2292 -24.8499 + 93 44.1628 380 6 1 -103.95 -77.2486 -24.8273 + 93 53.4461 379 6 1 -104.15 -77.237 -24.8144 + 93 81.0602 378 6 1 -104.35 -77.2383 -24.747 + 93 122.081 377 6 1 -104.55 -77.194 -24.6606 + 93 196.748 376 6 1 -104.75 -77.1858 -24.5106 + 93 113.339 508 6 0 -104.547 -78.2724 -25.8501 + 93 101.038 507 6 0 -104.355 -78.45 -26.1025 + 93 13.4442 506 6 0 -104.317 -78.65 -26.2245 + 93 92.0921 709 1 1 -38.1703 -79.0235 -174.45 + 93 78.2328 708 1 1 -38.2501 -78.9531 -174.545 + 93 38.5449 511 1 0 -39.7742 -77.7042 -175.85 + 93 203.166 512 1 0 -39.8388 -77.65 -175.904 + 93 6.35899 513 1 0 -40.1362 -77.45 -176.23 + 93 125.265 597 0 1 -60.4881 -62.8839 -204.45 + 93 212.165 589 0 0 -60.8332 -62.2013 -205.85 + 93 54.6375 590 0 0 -60.8871 -62.05 -206.163 + 93 55.2757 725 0 0 -49.5812 -34.9762 -206.25 + 93 88.6182 726 0 0 -49.4746 -34.8493 -206.113 + 93 111.624 651 0 1 -49.6999 -34.5491 -204.85 + 93 51.9249 710 1 1 -38.05 -78.9944 -174.641 + 93 45.7519 506 1 0 -37.643 -78.6779 -175.85 + 93 102.03 507 1 0 -37.6033 -78.65 -175.966 + 93 43.3598 765 0 1 -26.9691 -69.0194 -204.45 + 93 75.6284 766 0 1 -26.85 -68.9442 -204.524 + 93 73.6537 767 0 1 -26.6496 -68.8212 -204.652 + 93 37.2615 768 0 1 -26.45 -68.7055 -204.778 + 93 23.4445 559 0 0 -25.013 -68.0817 -205.85 + 93 217.401 560 0 0 -24.9378 -68.05 -205.905 + 93 2.48004 638 0 0 13.2857 -52.255 -206.25 + 93 141.763 639 0 0 13.2932 -52.2499 -206.242 + 93 49.2695 640 0 0 13.6333 -52.05 -205.902 + 93 15.0149 973 0 1 14.8141 -51.3485 -204.85 + 93 66.1247 974 0 1 14.85 -51.3283 -204.818 + 93 45.7768 975 0 1 15.0501 -51.2287 -204.646 + 93 16.9372 976 0 1 15.25 -51.1544 -204.49 + 93 206.096 551 1 0 52.0707 -69.7312 -176.249 + 93 106.742 550 1 0 52.2803 -69.85 -176.08 + 93 10.7286 1167 1 1 53.6313 -70.9721 -174.85 + 93 88.3678 1168 1 1 53.65 -70.9884 -174.833 + 93 76.776 1169 1 1 53.8505 -71.1668 -174.66 + 93 32.3202 1170 1 1 54.05 -71.3193 -174.505 + 93 74.2616 447 2 0 61.6902 -90.6024 -146.25 + 93 85.0902 446 2 0 61.7418 -90.7501 -146.109 + 93 65.9878 445 2 0 61.7872 -90.95 -145.967 + 93 205.318 1208 2 1 61.6924 -92.5376 -144.85 + 93 184.323 1205 2 1 61.1133 -93.091 -144.45 + 93 76.8167 1206 2 1 61.25 -93.2459 -144.786 + 93 89.4554 436 2 0 62.9016 -92.8387 -145.85 + 93 85.8304 437 2 0 63.0712 -92.75 -145.961 + 93 84.8111 438 2 0 63.3532 -92.55 -146.012 + 93 155.873 439 2 0 63.546 -92.35 -146.08 + 93 35.4311 440 2 0 63.6379 -92.15 -146.155 + 93 283.424 711 1 1 -37.6848 -79.165 -174.45 + 93 233.849 504 1 0 -37.7034 -79.1208 -175.85 + 93 109.711 709 0 1 -38.0877 -78.1116 -204.45 + 93 185.723 509 0 0 -38.1184 -78.0583 -205.85 + 93 113.039 710 0 1 -37.8857 -79.1746 -204.45 + 93 112.41 504 0 0 -37.8907 -79.1789 -205.85 + 93 349.284 307 3 0 6.25634 -118.631 -116.25 + 93 210.814 219 0 0 -70.0019 -136.15 -206.113 + 93 122.637 715 5 1 -36.9592 -79.5759 -54.45 + 93 220.084 502 5 0 -36.8672 -79.5491 -55.85 + 93 141.202 713 4 1 -37.3022 -78.9492 -84.45 + 93 123.16 506 4 0 -37.3794 -78.7737 -85.85 + 93 164.083 706 3 1 -38.7734 -75.1573 -114.45 + 93 63.3753 524 3 0 -38.9191 -75.0614 -115.85 + 93 99.9002 525 3 0 -38.9355 -75.05 -116.016 + 93 105.407 693 2 1 -41.3284 -72.7413 -144.45 + 93 134.352 537 2 0 -41.428 -72.6165 -145.85 + 93 148.695 682 1 1 -43.5265 -70.2897 -174.45 + 93 34.3865 692 0 1 -41.6201 -62.1899 -204.45 + 93 56.8468 691 0 1 -41.65 -62.1837 -204.603 +Number of digits in this event: 42 +Using G4ParticleGun... +Particle energy: 4.41614 LIN +Particle: e- +Event: 94 +Number of tracker hits in this event: 65 + 94 184.853 1066 11 1 33.3388 70.4202 125.55 + 94 117.852 1251 11 0 33.3365 70.4205 124.15 + 94 105.034 1066 10 1 33.2952 70.427 95.55 + 94 137.225 1251 10 0 33.2927 70.4272 94.15 + 94 132.871 1065 9 1 33.231 70.4297 65.55 + 94 199.684 1251 9 0 33.2266 70.4314 64.15 + 94 163.141 1065 8 1 33.1254 70.4671 35.55 + 94 127.208 1252 8 0 33.1202 70.4686 34.15 + 94 129.046 1064 7 1 33.0222 70.5014 5.55 + 94 118.938 1252 7 0 33.0164 70.5036 4.15 + 94 261.873 1064 6 1 32.8963 70.5394 -24.45 + 94 124.044 1252 6 0 32.8915 70.5401 -25.85 + 94 131.573 1063 5 1 32.7884 70.5588 -54.45 + 94 112.356 1252 5 0 32.7839 70.5603 -55.85 + 94 126.162 1063 4 1 32.6961 70.5886 -84.45 + 94 123.319 1252 4 0 32.6913 70.5894 -85.85 + 94 701.846 1062 3 1 32.5927 70.606 -114.45 + 94 386.508 1252 3 0 32.5892 70.6071 -115.85 + 94 119.478 1062 2 1 32.5211 70.6252 -144.45 + 94 118.633 1252 2 0 32.5161 70.6279 -145.85 + 94 362.135 1061 1 1 32.4135 70.6804 -174.45 + 94 408.212 1253 1 0 32.4096 70.6847 -175.85 + 94 134.81 1061 0 1 32.3343 70.7704 -204.45 + 94 145.471 1253 0 0 32.3253 70.7744 -205.85 + 94 419.031 1252 1 0 32.4105 70.65 -176.031 + 94 249.057 1060 0 1 32.1811 71.0374 -204.45 + 94 111.305 1254 0 0 32.2614 71.0011 -205.85 + 94 27.2642 939 1 1 8.05 104.276 -174.844 + 94 114.919 1061 2 1 32.2739 70.3289 -144.45 + 94 208.349 1251 2 0 32.1934 70.3738 -145.85 + 94 118.748 1052 1 1 30.5417 71.0783 -174.45 + 94 191.366 1255 1 0 30.4652 71.2233 -175.85 + 94 41.224 1256 1 0 30.4518 71.25 -176.121 + 94 339.723 1043 0 1 28.7109 74.0143 -204.45 + 94 105.868 1271 0 0 28.6147 74.3021 -205.85 + 94 68.5467 1061 3 1 32.45 70.4981 -114.579 + 94 199.24 1060 2 1 32.1002 70.3292 -144.45 + 94 52.8038 1064 1 1 33.0316 70.8777 -174.45 + 94 190.084 1065 1 1 33.05 70.889 -174.654 + 94 150.613 1254 1 0 33.1566 70.9519 -175.85 + 94 136.901 1081 0 1 36.3318 73.0265 -204.45 + 94 189.207 1265 0 0 36.4593 73.1655 -205.85 + 94 21.0189 1310 1 0 71.444 82.2366 -176.25 + 94 132.106 1311 1 0 71.5097 82.25 -176.179 + 94 66.3909 1264 1 1 72.8786 82.6454 -174.85 + 94 83.8807 1265 1 1 73.05 82.6972 -174.693 + 94 20.8255 1266 1 1 73.25 82.7516 -174.508 + 94 152.158 1372 2 0 51.2106 94.5996 -146.25 + 94 35.1853 1373 2 0 50.9447 94.7501 -145.946 + 94 116.127 1150 2 1 50.2398 95.3595 -144.85 + 94 38.0193 1149 2 1 50.05 95.517 -144.559 + 94 104.314 1234 0 0 31.943 66.8675 -205.85 + 94 16.9748 1263 0 0 28.5879 72.8209 -206.25 + 94 226.283 1264 0 0 28.574 72.85 -206.195 + 94 238.36 1042 0 1 28.6004 73.2832 -204.85 + 94 61.0271 1394 1 0 33.2186 99.0012 -176.25 + 94 179.688 1395 1 0 33.297 99.1505 -176.111 + 94 231.768 1068 1 1 33.7178 100.016 -174.85 + 94 145.524 1067 1 1 33.65 100.043 -174.542 + 94 180.753 1066 1 1 33.45 100.285 -174.66 + 94 192.031 1044 0 1 28.85 73.3947 -204.621 + 94 137.129 1065 0 1 33.1544 70.1409 -204.45 + 94 29.6874 1064 0 1 33.05 69.8648 -204.777 + 94 64.0278 1243 0 0 32.609 68.7051 -205.85 + 94 105.161 1242 0 0 32.5889 68.65 -205.901 +Number of digits in this event: 40 +Using G4ParticleGun... +Particle energy: 7.22129 LIN +Particle: e- +Event: 95 +Number of tracker hits in this event: 136 + 95 125.088 1266 11 1 73.4025 22.9363 125.55 + 95 120.004 1014 11 0 73.4012 22.9369 124.15 + 95 119.978 1266 10 1 73.3683 22.9464 95.55 + 95 112.31 1014 10 0 73.3661 22.9471 94.15 + 95 127.532 1266 9 1 73.3198 22.9603 65.55 + 95 99.2673 1014 9 0 73.3172 22.9603 64.15 + 95 350.095 1266 8 1 73.2646 22.9545 35.55 + 95 128.744 1014 8 0 73.2627 22.9548 34.15 + 95 230.617 1265 7 1 73.228 22.9626 5.55 + 95 107.773 1014 7 0 73.2263 22.962 4.15 + 95 142.34 1265 6 1 73.1981 22.946 -24.45 + 95 125.727 1014 6 0 73.1967 22.9449 -25.85 + 95 616.791 1265 5 1 73.1653 22.921 -54.45 + 95 221.006 1014 5 0 73.1633 22.9191 -55.85 + 95 129.321 1265 4 1 73.1214 22.8873 -84.45 + 95 196.448 1014 4 0 73.1189 22.8851 -85.85 + 95 179.611 1265 3 1 73.0676 22.8429 -114.45 + 95 118.793 1013 3 0 73.0651 22.8419 -115.85 + 95 208.064 1264 2 1 73.0168 22.8225 -144.45 + 95 132.302 1013 2 0 73.014 22.8222 -145.85 + 95 406.198 1264 1 1 72.9723 22.8258 -174.45 + 95 339.561 1013 1 0 72.969 22.8267 -175.85 + 95 443.737 1264 0 1 72.8985 22.8449 -204.45 + 95 101.52 1013 0 0 72.8942 22.8469 -205.85 + 95 84.9436 1389 1 1 97.9593 -46.6966 -174.85 + 95 225.802 1388 1 1 97.95 -46.6261 -174.773 + 95 294.306 79 7 1 -164.275 14.1859 5.55 + 95 94.7756 1012 1 0 73.0171 22.65 -176.032 + 95 115.958 999 0 0 72.9401 19.9404 -205.85 + 95 164.184 865 8 0 -19.3692 -6.96715 33.75 + 95 90.2041 1011 0 0 72.9901 22.2813 -205.85 + 95 26.6761 1010 0 0 72.9962 22.25 -206.152 + 95 40.8748 1099 7 0 145.632 39.85 3.93331 + 95 10.8466 1098 7 0 145.656 39.85 4.11832 + 95 216.891 1625 7 1 145.305 39.7014 5.15 + 95 13.2403 1624 7 1 145.15 40.0658 5.53281 + 95 68.7033 1010 4 0 71.9368 22.1323 -85.8502 + 95 31.2162 1009 4 0 71.7936 22.05 -85.882 + 95 109.933 1251 4 1 70.3555 22.4828 -84.85 + 95 64.4524 1250 4 1 70.25 22.5065 -84.8107 + 95 21.6286 1012 4 0 69.7027 22.4766 -85.8501 + 95 4.64394 1253 4 1 70.8429 23.4463 -84.85 + 95 158.775 1254 4 1 70.8501 23.4573 -84.8407 + 95 55.747 1274 3 1 74.944 23.2084 -114.45 + 95 126.642 1273 3 1 74.85 23.1705 -114.493 + 95 66.0559 1272 3 1 74.65 23.0741 -114.573 + 95 78.8771 1271 3 1 74.4497 22.9477 -114.604 + 95 13.273 1270 3 1 74.25 22.8309 -114.488 + 95 222.067 1267 3 1 73.5638 22.6884 -114.45 + 95 145.894 1012 3 0 73.5948 22.561 -115.85 + 95 107.144 1269 2 1 74.009 19.8207 -144.45 + 95 0.649712 1270 2 1 74.05 19.7806 -144.846 + 95 183.361 998 2 0 74.1625 19.6865 -145.85 + 95 109.72 1286 1 1 77.3136 17.2622 -174.45 + 95 121.821 984 1 0 77.451 17.0481 -175.85 + 95 152.444 1301 0 1 80.3754 12.1577 -204.45 + 95 114.112 959 0 0 80.6111 11.9434 -205.85 + 95 80.4074 956 6 0 24.7661 11.4473 -26.25 + 95 159.547 1356 0 1 91.35 -23.1724 -204.785 + 95 240.138 1357 0 1 91.5502 -23.2308 -204.52 + 95 226.864 1036 6 0 59.9393 27.3491 -26.25 + 95 3.38211 1194 6 1 58.8598 27.3173 -24.85 + 95 77.7826 1193 6 1 58.85 27.3171 -24.8369 + 95 67.4433 1192 6 1 58.65 27.1691 -24.7061 + 95 48.6789 1191 6 1 58.45 27.0695 -24.6873 + 95 75.2198 1190 6 1 58.25 27.0006 -24.6845 + 95 62.1135 1189 6 1 58.05 26.9061 -24.731 + 95 103.744 1031 6 0 56.0379 26.4119 -25.85 + 95 11.2727 1032 6 0 55.7272 26.45 -25.8821 + 95 106.933 1173 6 1 54.8162 26.5729 -24.85 + 95 197.273 1172 6 1 54.6499 26.5564 -24.7426 + 95 63.8436 1171 6 1 54.45 26.4012 -24.6562 + 95 106.931 1170 6 1 54.25 26.3129 -24.6478 + 95 15.8923 1169 6 1 54.05 26.3977 -24.502 + 95 21.5023 1013 8 0 73.1912 22.6655 34.1499 + 95 111.2 1012 8 0 73.1863 22.65 34.0672 + 95 110.073 1246 7 1 69.3437 14.5642 5.54992 + 95 102.968 971 7 0 69.1029 14.4005 4.15 + 95 1.22152 1221 6 1 64.2514 14.1044 -24.45 + 95 160.595 1220 6 1 64.25 14.1073 -24.4516 + 95 95 1219 6 1 64.05 14.4755 -24.6421 + 95 28.3714 978 6 0 63.4185 15.7532 -25.85 + 95 84.2831 979 6 0 63.366 15.85 -25.9387 + 95 170.987 980 6 0 63.3 16.05 -26.0953 + 95 28.0818 981 6 0 63.2211 16.2506 -26.2117 + 95 28.5188 1401 6 0 -7.63349 100.492 -26.25 + 95 236.033 1402 6 0 -7.70517 100.55 -26.196 + 95 3.8036 856 6 1 -8.84172 100.712 -24.85 + 95 100.251 855 6 1 -8.85 100.712 -24.84 + 95 235.572 854 6 1 -9.05 100.664 -24.5946 + 95 235.885 853 6 1 -9.25003 100.601 -24.5663 + 95 38.6384 1002 8 0 75.6921 20.4726 34.15 + 95 212.378 1001 8 0 75.7422 20.45 34.1426 + 95 122.811 1012 2 0 73.6391 22.5992 -145.85 + 95 434.822 962 2 0 64.7569 12.5809 -146.25 + 95 118.354 1015 5 0 72.8833 23.1527 -55.85 + 95 237.69 1248 4 1 69.7136 26.2187 -84.45 + 95 13.9746 1031 4 0 69.4751 26.4407 -85.8503 + 95 88.1596 1032 4 0 69.464 26.45 -85.9131 + 95 86.1834 1226 3 1 65.4114 28.6 -114.45 + 95 65.9752 1227 3 1 65.45 28.5835 -114.608 + 95 85.8649 1042 3 0 65.686 28.4732 -115.85 + 95 43.7516 1041 3 0 65.7397 28.45 -116.125 + 95 40.6429 1262 2 1 72.5024 26.2858 -144.45 + 95 76.6458 1263 2 1 72.6501 26.2036 -144.52 + 95 80.8567 1265 2 1 73.0503 26.0007 -144.7 + 95 71.4551 1266 2 1 73.25 25.8741 -144.753 + 95 54.019 1267 2 1 73.45 25.7592 -144.796 + 95 153.071 1019 2 0 76.8119 24.0051 -145.85 + 95 133.83 1018 2 0 77.0985 23.85 -145.947 + 95 140.649 1017 2 0 77.4884 23.65 -146.068 + 95 57.3898 1521 1 1 124.362 5.88368 -174.45 + 95 67.4178 1518 1 1 123.95 5.81955 -174.604 + 95 6.18846 1247 4 1 69.65 26.3075 -84.6466 + 95 91.4688 1270 4 1 74.2147 21.1233 -84.45 + 95 75.2137 1005 4 0 74.2519 21.2331 -85.85 + 95 46.8353 1006 4 0 74.2572 21.25 -86.0695 + 95 110.718 1015 3 0 74.7119 23.1259 -115.85 + 95 140.347 1255 2 1 71.0818 24.464 -144.45 + 95 195.949 1022 2 0 71.057 24.6071 -145.85 + 95 67.3894 1255 1 1 71.0741 27.7503 -174.45 + 95 66.8215 1254 1 1 71.05 27.7558 -174.561 + 95 130.935 1036 1 0 70.7568 27.4341 -175.85 + 95 62.9768 1248 0 1 69.7616 16.2993 -204.45 + 95 142.272 1247 0 1 69.65 16.2016 -204.532 + 95 77.2952 1246 0 1 69.4496 16.1011 -204.629 + 95 73.9262 1245 0 1 69.25 15.9655 -204.745 + 95 83.7452 966 0 0 67.1866 13.4279 -205.85 + 95 97.5032 965 0 0 67.0427 13.25 -205.947 + 95 72.7958 964 0 0 66.9087 13.0499 -206.054 + 95 90.6071 963 0 0 66.8033 12.8494 -206.138 + 95 5.41816 962 0 0 66.673 12.65 -206.243 + 95 64.6086 727 0 0 12.8939 -34.5567 -206.25 + 95 63.4204 726 0 0 12.7383 -34.65 -206.148 + 95 60.5947 725 0 0 12.587 -34.85 -205.977 + 95 141.237 960 0 1 12.2216 -35.8147 -204.85 +Number of digits in this event: 54 +Using G4ParticleGun... +Particle energy: 8.01969 LIN +Particle: e- +Event: 96 +Number of tracker hits in this event: 53 + 96 137.642 1549 9 1 130 35.7337 65.55 + 96 137.56 1078 9 0 130 35.7336 64.15 + 96 108.199 1549 8 1 129.994 35.7365 35.55 + 96 101.547 1078 8 0 129.995 35.7384 34.15 + 96 152.71 1549 7 1 130.009 35.7774 5.55 + 96 106.096 1078 7 0 130.009 35.7785 4.15 + 96 138.01 1549 6 1 130.008 35.7999 -24.45 + 96 109.333 1078 6 0 130.009 35.8004 -25.85 + 96 115.131 1549 5 1 130.021 35.8077 -54.45 + 96 161.442 1078 5 0 130.02 35.8082 -55.85 + 96 265.549 1549 4 1 129.988 35.8182 -84.45 + 96 116.503 1078 4 0 129.984 35.818 -85.85 + 96 93.2607 1548 3 1 129.899 35.8118 -114.45 + 96 120.414 1078 3 0 129.895 35.8105 -115.85 + 96 123.421 1548 2 1 129.819 35.7902 -144.45 + 96 117.591 1078 2 0 129.815 35.791 -145.85 + 96 157.829 1547 1 1 129.736 35.8099 -174.45 + 96 378.765 1078 1 0 129.731 35.8091 -175.85 + 96 131.818 1547 0 1 129.635 35.7928 -204.45 + 96 255.635 1078 0 0 129.63 35.7913 -205.85 + 96 31.1758 1105 6 0 124.525 41.0799 -26.25 + 96 10.119 1520 6 1 124.244 39.8095 -24.85 + 96 257.55 1091 6 0 120.319 38.4264 -25.85 + 96 6.00281 1092 6 0 120.108 38.45 -25.9776 + 96 90.0904 1550 4 1 130.15 35.9207 -84.6154 + 96 84.5018 1551 4 1 130.35 35.8485 -84.6736 + 96 266.966 1552 4 1 130.55 35.7821 -84.651 + 96 637.957 1548 1 1 129.84 35.7714 -174.45 + 96 167.237 1548 0 1 129.891 35.7693 -204.45 + 96 139.139 1552 0 1 130.722 35.6067 -204.45 + 96 115.956 1077 0 0 130.752 35.6156 -205.85 + 96 205.325 1079 0 0 130.121 35.8773 -206.006 + 96 53.4083 1372 0 0 137.632 94.55 -206.193 + 96 51.5012 1373 0 0 137.586 94.7501 -205.896 + 96 183.232 1593 0 1 138.796 95.9505 -204.85 + 96 136.302 817 6 1 -16.45 -106.995 -24.789 + 96 10.7766 819 6 1 -16.25 -106.775 -24.7324 + 96 196.145 818 6 1 -16.4499 -107.216 -24.6633 + 96 49.3974 1554 0 1 131.104 18.4412 -204.85 + 96 353.863 1549 2 1 130.078 35.8747 -144.45 + 96 109.728 1079 2 0 130.07 35.8556 -145.85 + 96 107.295 1077 1 0 129.792 35.4979 -175.85 + 96 522.933 1542 0 1 128.664 35.0679 -204.45 + 96 579.63 1074 0 0 128.604 35.0461 -205.85 + 96 44.3454 1080 2 0 129.848 36.2164 -145.85 + 96 142.985 1081 2 0 129.826 36.25 -145.989 + 96 142.314 1525 1 1 125.256 42.2231 -174.45 + 96 118.746 1112 1 0 125 42.5902 -175.85 + 96 56.7984 1113 1 0 124.957 42.65 -176.093 + 96 77.9143 1500 0 1 120.17 49.2819 -204.45 + 96 110.919 1499 0 1 120.15 49.3139 -204.505 + 96 64.2341 1150 0 0 119.618 50.1268 -205.851 + 96 59.8605 1151 0 0 119.528 50.2501 -206.058 +Number of digits in this event: 29 +Using G4ParticleGun... +Particle energy: 4.70861 LIN +Particle: e- +Event: 97 +Number of tracker hits in this event: 29 + 97 104.078 710 10 1 -37.8921 107.307 95.55 + 97 194.719 1435 10 0 -37.8922 107.308 94.15 + 97 148.156 710 9 1 -37.8897 107.325 65.55 + 97 115.543 1435 9 0 -37.8893 107.326 64.15 + 97 139.835 710 8 1 -37.8783 107.347 35.55 + 97 194.748 1435 8 0 -37.8779 107.349 34.15 + 97 134.682 710 7 1 -37.872 107.383 5.55 + 97 115.779 1436 7 0 -37.8705 107.384 4.15 + 97 117.086 711 6 1 -37.8427 107.402 -24.45 + 97 201.117 1436 6 0 -37.8421 107.402 -25.85 + 97 119.092 711 5 1 -37.828 107.389 -54.45 + 97 128.851 1436 5 0 -37.8274 107.388 -55.85 + 97 130.12 711 4 1 -37.8078 107.362 -84.45 + 97 134.212 1436 4 0 -37.8063 107.36 -85.85 + 97 122.773 711 3 1 -37.7758 107.323 -114.45 + 97 97.1519 1435 3 0 -37.7752 107.317 -115.85 + 97 181.502 711 2 1 -37.7706 107.174 -144.45 + 97 120.354 1435 2 0 -37.773 107.165 -145.85 + 97 145.033 711 1 1 -37.816 106.986 -174.45 + 97 126.334 1434 1 0 -37.8205 106.977 -175.85 + 97 128.263 710 0 1 -37.9055 106.807 -204.45 + 97 166.21 1433 0 0 -37.9071 106.801 -205.85 + 97 49.8902 1165 0 0 -124.031 53.1731 -206.25 + 97 177.023 1166 0 0 -123.983 53.2502 -206.168 + 97 108.544 284 0 1 -123.254 54.2501 -204.85 + 97 66.2767 285 0 1 -123.15 54.2836 -204.837 + 97 241.321 1124 2 1 44.85 -45.9796 -144.845 + 97 58.6718 1417 7 0 -31.5183 103.569 3.75009 + 97 195.03 1416 7 0 -31.4951 103.55 3.81419 +Number of digits in this event: 20 +Using G4ParticleGun... +Particle energy: 7.61908 LIN +Particle: e- +Event: 98 +Number of tracker hits in this event: 90 + 98 109.686 671 11 1 -45.7632 58.0808 125.55 + 98 96.2205 1190 11 0 -45.7642 58.0811 124.15 + 98 150.984 671 10 1 -45.7921 58.087 95.55 + 98 139.884 1190 10 0 -45.7922 58.0875 94.15 + 98 117.649 671 9 1 -45.7891 58.0959 65.55 + 98 103.511 1190 9 0 -45.7886 58.0959 64.15 + 98 144.977 671 8 1 -45.7798 58.1046 35.55 + 98 282.486 1190 8 0 -45.7796 58.1059 34.15 + 98 113.787 671 7 1 -45.7776 58.132 5.55 + 98 240.828 1190 7 0 -45.7753 58.1335 4.15 + 98 224.323 671 6 1 -45.7277 58.163 -24.45 + 98 112.538 1190 6 0 -45.7261 58.1631 -25.85 + 98 124.473 671 5 1 -45.7239 58.1506 -54.45 + 98 142.974 1190 5 0 -45.708 58.1431 -55.85 + 98 146.348 673 4 1 -45.351 58.031 -84.45 + 98 3.43971 1189 4 0 -45.3402 58.0498 -85.85 + 98 108.247 1190 4 0 -45.3401 58.05 -85.8645 + 98 130.558 675 3 1 -44.9899 58.4502 -114.45 + 98 102.022 1192 3 0 -44.9862 58.4619 -115.85 + 98 158.676 675 2 1 -44.8945 58.6425 -144.45 + 98 101.201 1193 2 0 -44.9041 58.674 -145.85 + 98 309.689 673 1 1 -45.3965 59.3012 -174.45 + 98 96.2195 1196 1 0 -45.4283 59.3174 -175.85 + 98 129.997 669 0 1 -46.1746 59.712 -204.45 + 98 180.983 1198 0 0 -46.2658 59.7433 -205.85 + 98 80.9337 1209 1 0 -110.866 62.0096 -176.25 + 98 169.6 1203 1 0 -110.992 60.85 -176.216 + 98 22.2381 342 1 1 -111.722 61.6843 -174.85 + 98 76.5631 341 1 1 -111.75 61.6708 -174.817 + 98 109.255 340 1 1 -111.95 61.6832 -174.702 + 98 114.774 1208 1 0 -112.269 61.7625 -175.85 + 98 185.631 1207 1 0 -112.242 61.65 -176.032 + 98 336.524 676 1 1 -44.7099 58.2052 -174.45 + 98 419.957 1190 1 0 -44.7469 58.1663 -175.85 + 98 457.673 673 0 1 -45.3517 57.2395 -204.45 + 98 30.0788 1185 0 0 -45.4172 57.0623 -205.85 + 98 79.0358 1184 0 0 -45.422 57.05 -205.947 + 98 11.667 680 0 1 -43.856 58.2898 -204.45 + 98 218.655 681 0 1 -43.85 58.2911 -204.499 + 98 359.125 1191 0 0 -43.6827 58.3341 -205.85 + 98 246.889 672 2 1 -45.5414 58.2542 -144.45 + 98 364.7 1191 2 0 -45.5392 58.254 -145.85 + 98 411.769 672 1 1 -45.5007 58.269 -174.45 + 98 316.537 1191 1 0 -45.4932 58.2527 -175.85 + 98 118.679 1189 0 0 -45.3375 57.9087 -205.85 + 98 90.9025 1183 0 0 -45.5628 56.85 -205.852 + 98 29.3061 1182 0 0 -45.5474 56.65 -206.145 + 98 100.531 672 0 1 -45.4674 58.3343 -204.45 + 98 144.636 1273 3 0 -33.2707 74.6803 -116.25 + 98 175.15 1272 3 0 -33.1676 74.6499 -115.958 + 98 116.353 1236 5 0 -52.4499 67.25 -56.1883 + 98 222.722 1672 5 0 25.5364 154.55 -56.159 + 98 72.7271 1465 5 1 113.15 148.623 -54.7511 + 98 157.006 657 0 1 -48.4779 54.3279 -204.45 + 98 9.65628 658 0 1 -48.45 54.2368 -204.804 + 98 79.8518 1169 0 0 -48.3513 53.9379 -205.85 + 98 124.153 1168 0 0 -48.3204 53.85 -206.139 + 98 106.672 1188 1 0 -44.8258 57.6705 -175.85 + 98 113.026 1187 1 0 -44.8041 57.65 -175.895 + 98 82.8976 744 0 1 -31.1328 47.3104 -204.45 + 98 47.6395 745 0 1 -31.05 47.2852 -204.699 + 98 158.349 1135 0 0 -30.7015 47.1035 -205.85 + 98 101.187 674 1 1 -45.25 58.4956 -174.512 + 98 96.0016 675 1 1 -45.05 58.7342 -174.453 + 98 92.9258 677 1 1 -44.65 58.7636 -174.685 + 98 241.458 1194 1 0 -42.5352 58.9343 -175.85 + 98 193.53 1193 1 0 -41.9795 58.8496 -176.078 + 98 75.8014 1192 1 0 -41.9146 58.65 -175.998 + 98 116.833 693 1 1 -41.4308 57.8823 -174.85 + 98 215.513 656 4 1 -48.6589 60.6443 -84.4502 + 98 75.2192 1209 4 0 -48.9703 61.8895 -85.85 + 98 71.8357 1210 4 0 -49.0126 62.05 -86.0476 + 98 44.9611 1119 4 0 -86.8506 44.0119 -86.25 + 98 109.237 672 7 1 -45.6266 58.2467 5.54976 + 98 66.1465 684 6 1 -43.055 57.7576 -24.45 + 98 139.325 685 6 1 -43.05 57.759 -24.5859 + 98 131.792 1188 6 0 -43.0183 57.7607 -25.85 + 98 117.909 688 5 1 -42.292 57.5796 -54.45 + 98 115.024 1187 5 0 -42.496 57.5912 -55.85 + 98 10.0627 269 5 0 -60.2251 -126.332 -56.25 + 98 66.1128 268 5 0 -60.2264 -126.35 -56.2471 + 98 91.7724 267 5 0 -60.2309 -126.55 -56.225 + 98 76.1422 266 5 0 -60.2381 -126.75 -56.1874 + 98 102.734 265 5 0 -60.2414 -126.95 -56.1204 + 98 59.4855 264 5 0 -60.2497 -127.15 -56.0563 + 98 59.1563 263 5 0 -60.2623 -127.35 -55.9937 + 98 32.2058 262 5 0 -60.2853 -127.55 -55.897 + 98 244.109 597 5 1 -60.57 -130.49 -54.85 + 98 19.3479 695 4 1 -41.0291 57.2175 -84.45 + 98 95.7753 694 4 1 -41.05 57.2245 -84.4717 +Number of digits in this event: 39 +Using G4ParticleGun... +Particle energy: 4.52001 LIN Particle: e- Event: 99 -Number of tracker hits in this event: 109 - 99 96.8026 1426 10 1 105.427 -7.44557 95.55 - 99 173.39 863 10 0 105.427 -7.44808 94.15 - 99 148.03 1426 9 1 105.427 -7.49089 65.55 - 99 118.053 862 9 0 105.427 -7.49116 64.15 - 99 124.283 1426 8 1 105.453 -7.49231 35.55 - 99 118.019 862 8 0 105.452 -7.48943 34.15 - 99 188.359 1426 7 1 105.434 -7.41628 5.55 - 99 127.82 863 7 0 105.431 -7.41224 4.15 - 99 401.295 1426 6 1 105.353 -7.33837 -24.45 - 99 104.409 863 6 0 105.347 -7.33433 -25.85 - 99 190.941 1425 5 1 105.229 -7.25433 -54.45 - 99 197.584 864 5 0 105.221 -7.24865 -55.85 - 99 284.815 1424 4 1 105.032 -7.14753 -84.45 - 99 97.7573 864 4 0 105.027 -7.13968 -85.85 - 99 199.505 1423 3 1 104.926 -6.98136 -114.45 - 99 132.402 865 3 0 104.911 -6.97638 -115.85 - 99 113.676 1422 2 1 104.593 -6.87768 -144.45 - 99 153.268 865 2 0 104.571 -6.87661 -145.85 - 99 240.478 1419 1 1 104.13 -6.84529 -174.45 - 99 138.479 866 1 0 104.108 -6.8443 -175.85 - 99 101.161 1417 0 1 103.667 -6.78967 -204.45 - 99 118.829 866 0 0 103.643 -6.79065 -205.85 - 99 61.9296 1681 6 1 156.35 -93.1067 -24.7808 - 99 82.4307 1418 1 1 103.95 -6.69697 -174.678 - 99 19.9403 872 1 0 102.99 -5.47568 -175.85 - 99 87.3994 873 1 0 102.972 -5.44967 -175.873 - 99 99.4851 874 1 0 102.86 -5.25 -176.057 - 99 118.373 1331 0 1 86.3958 20.8375 -204.45 - 99 110.676 1006 0 0 86.232 21.311 -205.85 - 99 112.23 865 4 0 105.035 -6.9683 -85.85 - 99 127.471 1415 3 1 103.186 -3.42248 -114.45 - 99 117.17 884 3 0 103.04 -3.21878 -115.85 - 99 109.947 1395 2 1 99.297 1.2152 -144.45 - 99 114.656 907 2 0 99.4911 1.55142 -145.85 - 99 116.978 1400 1 1 100.302 0.486346 -174.45 - 99 23.6011 1399 1 1 100.15 0.299106 -174.769 - 99 118.36 897 1 0 99.5986 -0.461995 -175.85 - 99 44.8274 896 1 0 99.4776 -0.65 -176.105 - 99 34.2258 1348 0 1 89.7158 -16.7733 -204.45 - 99 103.863 1347 0 1 89.65 -16.8534 -204.555 - 99 18.8034 1346 0 1 89.45 -17.0572 -204.802 - 99 61.3597 810 0 0 88.5754 -17.9597 -205.85 - 99 118.618 809 0 0 88.4814 -18.05 -205.97 - 99 132.722 1425 4 1 105.15 -7.21403 -84.5641 - 99 0.573154 1426 4 1 105.35 -7.45349 -84.8493 - 99 79.4803 858 4 0 106.039 -8.30701 -85.8502 - 99 67.9239 857 4 0 106.144 -8.45005 -86.0014 - 99 64.8575 856 4 0 106.23 -8.65 -86.1473 - 99 174.197 583 4 0 90.65 -63.4014 -86.25 - 99 19.5072 584 4 0 90.249 -63.25 -85.8916 - 99 80.7379 1341 4 1 88.4443 -62.1691 -84.85 - 99 95.1108 1340 4 1 88.25 -62.0706 -84.7328 - 99 307.669 1339 4 1 88.05 -61.9566 -84.59 - 99 43.7753 1338 4 1 87.8497 -61.917 -84.4597 - 99 78.4728 1337 4 1 87.65 -61.9791 -84.5007 - 99 53.577 1336 4 1 87.45 -62.0254 -84.552 - 99 59.97 1335 4 1 87.25 -62.0079 -84.6471 - 99 44.1228 1334 4 1 87.0494 -61.9385 -84.7387 - 99 20.2527 596 4 0 86.3537 -60.6989 -85.85 - 99 83.0634 597 4 0 86.3342 -60.65 -85.8905 - 99 69.9564 598 4 0 86.2577 -60.45 -86.0898 - 99 46.2791 662 4 0 83.0963 -47.578 -86.2494 - 99 176.581 661 4 0 83.0708 -47.65 -86.1036 - 99 107.968 660 4 0 82.6788 -47.85 -85.9161 - 99 39.3537 1306 4 1 81.3095 -48.6665 -84.8499 - 99 254.341 1305 4 1 81.2499 -48.7011 -84.7531 - 99 61.057 867 6 0 105.553 -6.55805 -25.8508 - 99 78.0252 868 6 0 105.576 -6.45 -26.0146 - 99 408.088 920 6 0 79.3016 4.15472 -26.2499 - 99 122.091 862 6 0 105.611 -7.51592 -25.85 - 99 164.283 1457 5 1 111.622 -5.74019 -54.45 - 99 114.743 871 5 0 111.744 -5.72366 -55.85 - 99 123.913 1467 4 1 113.568 -5.00603 -84.45 - 99 54.1454 874 4 0 113.685 -5.21924 -85.8506 - 99 53.6028 873 4 0 113.705 -5.25 -86.0701 - 99 111.709 1479 3 1 115.962 -8.65545 -114.45 - 99 209.403 857 3 0 116.268 -8.61118 -115.85 - 99 127.528 1509 2 1 122.027 -6.35477 -144.45 - 99 124.078 867 2 0 122.386 -6.46216 -145.85 - 99 73.7702 1556 1 1 131.439 -8.65123 -174.45 - 99 72.5826 1557 1 1 131.55 -8.67806 -174.661 - 99 363.793 856 1 0 132.184 -8.69749 -175.85 - 99 95.4673 1619 0 1 144.025 -10.1453 -204.45 - 99 149.406 1620 0 1 144.15 -10.0898 -204.597 - 99 0.910067 1621 0 1 144.35 -9.99856 -204.848 - 99 128.909 852 0 0 145.158 -9.63438 -205.85 - 99 175.089 855 1 0 132.341 -8.85 -176.114 - 99 194.711 872 5 0 111.034 -5.60217 -55.85 - 99 59.7151 773 6 1 -25.2856 -53.1887 -24.85 - 99 190.316 1426 3 1 105.548 -7.59945 -114.45 - 99 122.688 1427 3 1 105.55 -7.59911 -114.46 - 99 252.926 862 3 0 105.733 -7.51265 -115.85 - 99 108.999 1442 2 1 108.626 -5.33631 -144.451 - 99 139.591 872 2 0 108.73 -5.55915 -145.85 - 99 119.22 1448 1 1 109.887 -10.8913 -174.45 - 99 170.963 843 1 0 110.095 -11.2701 -175.85 - 99 111.883 1466 0 1 113.473 -18.1076 -204.45 - 99 124.556 1467 0 1 113.55 -18.1938 -204.719 - 99 59.3394 807 0 0 113.89 -18.5818 -205.85 - 99 145.43 806 0 0 113.956 -18.65 -206.055 - 99 155.419 695 0 0 123.956 -40.9886 -206.25 - 99 133.912 1426 2 1 105.546 -7.72345 -144.45 - 99 144.891 861 2 0 105.551 -7.70867 -145.85 - 99 215.638 1427 1 1 105.581 -7.34691 -174.45 - 99 161.823 863 1 0 105.599 -7.33932 -175.85 - 99 100.9 1429 0 1 106.002 -7.21178 -204.45 - 99 167.843 864 0 0 106.01 -7.21803 -205.85 - 99 38.0455 544 2 0 119.693 -71.0849 -146.25 - 99 97.5777 543 2 0 119.73 -71.2501 -146.043 -Number of digits in this event: 47 +Number of tracker hits in this event: 73 + 99 104.234 1231 11 1 66.2709 6.22582 125.55 + 99 112.407 930 11 0 66.2715 6.22578 124.15 + 99 119.91 1231 10 1 66.2817 6.21652 95.55 + 99 122.359 930 10 0 66.283 6.2166 94.15 + 99 134.806 1231 9 1 66.3073 6.21818 65.55 + 99 119.338 930 9 0 66.3084 6.21876 64.15 + 99 103.958 1231 8 1 66.3313 6.23214 35.55 + 99 121.359 930 8 0 66.3286 6.23175 34.15 + 99 395.004 1231 7 1 66.2713 6.21885 5.55 + 99 287.547 930 7 0 66.2676 6.21812 4.15 + 99 117.375 1230 6 1 66.1871 6.20771 -24.45 + 99 148.984 930 6 0 66.1751 6.17397 -25.85 + 99 65.2339 1229 5 1 65.8841 5.63292 -54.4501 + 99 58.7651 1228 5 1 65.85 5.65204 -54.7202 + 99 97.2023 928 5 0 65.6913 5.73896 -55.85 + 99 137.127 1207 4 1 61.5275 7.90386 -84.45 + 99 159.53 940 4 0 61.2951 8.07288 -85.85 + 99 145.069 1183 3 1 56.7106 11.8878 -114.45 + 99 81.1377 959 3 0 56.5144 12.0315 -115.85 + 99 223.357 960 3 0 56.4893 12.05 -116.028 + 99 132.893 1163 2 1 52.7098 14.6556 -144.45 + 99 65.5753 973 2 0 52.5497 14.8259 -145.85 + 99 48.3725 974 2 0 52.5317 14.85 -146.045 + 99 49.331 1155 1 1 51.0784 18.6586 -174.45 + 99 73.1238 1154 1 1 51.05 18.6763 -174.585 + 99 111.949 993 1 0 50.8644 18.7406 -175.85 + 99 141.863 1142 0 1 48.6374 18.811 -204.45 + 99 122.235 992 0 0 48.4734 18.5404 -205.85 + 99 6.15112 991 0 0 48.4355 18.45 -206.247 + 99 5.43233 1038 1 0 -20.241 27.6695 -176.25 + 99 385.256 1037 1 0 -20.2389 27.6495 -176.238 + 99 184.832 1231 6 1 66.4475 5.35496 -24.45 + 99 130.884 924 6 0 65.9908 5.04475 -25.85 + 99 142.884 1182 5 1 56.5912 -0.657089 -54.45 + 99 37.2194 896 5 0 56.2229 -0.834086 -55.85 + 99 74.1596 895 5 0 56.188 -0.85 -55.9819 + 99 362.243 1141 4 1 48.3547 -4.38259 -84.4505 + 99 136.837 877 4 0 48.091 -4.56532 -85.8505 + 99 100.186 1113 3 1 42.8071 -8.73824 -114.45 + 99 11.6234 856 3 0 42.4844 -8.84639 -115.85 + 99 96.6226 855 3 0 42.4727 -8.85 -115.9 + 99 115.698 1079 2 1 35.9645 -10.7859 -144.45 + 99 126.989 845 2 0 35.7757 -10.9885 -145.85 + 99 114.186 1064 1 1 32.8976 -12.501 -174.451 + 99 117.066 837 1 0 32.754 -12.5123 -175.85 + 99 144.689 1049 0 1 29.9599 -12.6983 -204.45 + 99 161.6 836 0 0 29.7277 -12.7148 -205.85 + 99 91.038 929 7 0 66.2676 6.05 4.04317 + 99 27.8275 1220 6 1 64.1095 3.65681 -24.45 + 99 139.681 1219 6 1 64.05 3.70565 -24.5306 + 99 17.2309 1218 6 1 63.8497 3.8799 -24.7947 + 99 38.4666 922 6 0 63.0086 4.58959 -25.8501 + 99 102.243 923 6 0 62.9375 4.65 -25.9383 + 99 15.4798 1087 5 1 37.4842 27.4905 -54.4501 + 99 136.173 1086 5 1 37.4499 27.535 -54.4713 + 99 104.446 1085 5 1 37.25 27.8137 -54.598 + 99 77.0019 1084 5 1 37.05 28.1015 -54.7527 + 99 19.4552 1051 5 0 35.4036 30.3929 -55.8501 + 99 79.4096 1052 5 0 35.362 30.45 -55.8772 + 99 346.657 1053 5 0 35.2202 30.6503 -55.9804 + 99 257.219 1054 5 0 35.0825 30.85 -56.1079 + 99 1.46153 1055 5 0 34.9512 31.05 -56.2462 + 99 27.8228 937 4 1 7.50493 72.9429 -84.4505 + 99 65.375 936 4 1 7.44952 72.9606 -84.5089 + 99 69.0891 935 4 1 7.25 73.0309 -84.6922 + 99 16.5556 1267 4 0 5.81468 73.6209 -85.85 + 99 122.017 1268 4 0 5.75925 73.65 -85.8967 + 99 141.894 1269 4 0 5.45859 73.85 -86.0872 + 99 171.623 1270 4 0 5.2255 74.05 -86.1817 + 99 0.952055 1271 4 0 4.92401 74.25 -86.2493 + 99 45.9715 1278 6 0 36.3354 75.7735 -26.25 + 99 128.875 1025 6 0 27.4148 25.0883 -26.25 + 99 26.7737 1024 6 0 27.4045 25.05 -26.2376 +Number of digits in this event: 32 Run terminated. Run Summary Number of events processed : 100 - User=20.570000s Real=20.870871s Sys=0.020000s + User=20.410000s Real=20.436196s Sys=0.020000s End of Run 2 Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 19 of which, static: 0 -Dynamic pools deleted: 19 / Total memory freed: 0.18 MB +Dynamic pools deleted: 19 / Total memory freed: 0.19 MB ============================================================ diff --git a/examples/advanced/gorad/gorad.out b/examples/advanced/gorad/gorad.out index f2654a9b53..d6066a502b 100644 --- a/examples/advanced/gorad/gorad.out +++ b/examples/advanced/gorad/gorad.out @@ -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 diff --git a/examples/advanced/hadrontherapy/hadrontherapy.out b/examples/advanced/hadrontherapy/hadrontherapy.out index 4ff32a4d95..7053d7f994 100644 --- a/examples/advanced/hadrontherapy/hadrontherapy.out +++ b/examples/advanced/hadrontherapy/hadrontherapy.out @@ -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 ============================================================ diff --git a/examples/advanced/human_phantom/human_phantom.out b/examples/advanced/human_phantom/human_phantom.out index eacea6a5f9..d91565675f 100644 --- a/examples/advanced/human_phantom/human_phantom.out +++ b/examples/advanced/human_phantom/human_phantom.out @@ -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 diff --git a/examples/advanced/iort_therapy/iort_therapy.out b/examples/advanced/iort_therapy/iort_therapy.out index a07dd76298..fd7c99027c 100644 --- a/examples/advanced/iort_therapy/iort_therapy.out +++ b/examples/advanced/iort_therapy/iort_therapy.out @@ -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... diff --git a/examples/advanced/lAr_calorimeter/lAr_calorimeter.out b/examples/advanced/lAr_calorimeter/lAr_calorimeter.out index 140dc15f6e..7aed3ff674 100644 --- a/examples/advanced/lAr_calorimeter/lAr_calorimeter.out +++ b/examples/advanced/lAr_calorimeter/lAr_calorimeter.out @@ -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 diff --git a/examples/advanced/medical_linac/medical_linac.out b/examples/advanced/medical_linac/medical_linac.out index 174fd347aa..f6e5b8b781 100644 --- a/examples/advanced/medical_linac/medical_linac.out +++ b/examples/advanced/medical_linac/medical_linac.out @@ -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", diff --git a/examples/advanced/microbeam/History b/examples/advanced/microbeam/History index d20d4d5e5b..4248701e23 100644 --- a/examples/advanced/microbeam/History +++ b/examples/advanced/microbeam/History @@ -4,6 +4,8 @@ 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-01-03 S. Incerti (microbeam-V11-03-00) +- Added ntuple merging ## 2023-11-15 I. Hrivnacova (microbeam-V11-01-01) - Updated vis.mac: @@ -43,7 +45,7 @@ be used as a substitute for writing good git commit messages! 10 June 2021 - V. Ivanchenko - tag microbeam-V10-07-03 - an attempt to fix problems at nightly and some clean-up: - microbeam.cc - do not initialize run and number of threads, let + microbeam.cc - do not initialize run and number of threads, let these be done in microbeam.mac DetectorConstruction - use CLHEP::twopi; do not have fField pointer as the class member, instead use G4AutoDelete registration diff --git a/examples/advanced/microbeam/microbeam.out b/examples/advanced/microbeam/microbeam.out index 30e9eefc66..7852967a5c 100644 --- a/examples/advanced/microbeam/microbeam.out +++ b/examples/advanced/microbeam/microbeam.out @@ -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 @@ -319,6 +319,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo +All Ntuples have been created *** /run/numberOfThreads command is issued in sequential mode. Command is ignored. ==========> The phantom contains 53480 voxels @@ -355,7 +356,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 ======== @@ -807,9 +808,15 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV -##### Create analysis manager 0xc2bbb0 -Using analysis manager -All Ntuples have been created + +-------- 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 # 1 generated ===> Sorry, the incident alpha particle has missed the targeted cell ! diff --git a/examples/advanced/microbeam/plot.C b/examples/advanced/microbeam/plot.C index 26ae08d695..909d9d462d 100644 --- a/examples/advanced/microbeam/plot.C +++ b/examples/advanced/microbeam/plot.C @@ -2,7 +2,7 @@ // ------------------------------------------------------------------- // // ********************************************************************* -// To execute this macro under ROOT, +// 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 // This macro needs five files : dose.txt, stoppingPower.txt, range.txt, @@ -24,11 +24,11 @@ gROOT->SetStyle("Plain"); Double_t scale; -c1 = new TCanvas ("c1","",20,20,1200,900); +auto c1 = new TCanvas ("c1","",20,20,1200,900); c1->Divide(4,3); //********************* -// INTENSITY HISTOGRAMS +// INTENSITY HISTOGRAMS //********************* FILE * fp = fopen("phantom.dat","r"); @@ -51,7 +51,7 @@ TNtuple *ntupleYX = new TNtuple("CYTOPLASM","ntuple","Y:X:vox"); Int_t nlines=0; Int_t ncols=0; -while (1) +while (1) { if ( nlines == 0 ) ncols = fscanf(fp,"%f %f %f",&tmp,&tmp,&tmp); if ( nlines == 1 ) ncols = fscanf(fp,"%f %f %f",&voxelSizeX,&voxelSizeY,&voxelSizeZ); @@ -62,7 +62,7 @@ while (1) X= X*voxelSizeX; Y= Y*voxelSizeY; Z= Z*voxelSizeZ; - + if ( mat == 2 ) // noyau { if (den==1) h1->Fill( vox ); @@ -77,7 +77,7 @@ while (1) ntupleYX->Fill(Y,X,vox); } nlines++; - + } fclose(fp); @@ -92,7 +92,7 @@ c1->cd(1); h1->GetXaxis()->SetTitleOffset(1.4); h1->GetYaxis()->SetTitleOffset(1.4); h1->GetXaxis()->SetTitle("Voxel intensity (0-255)"); - h1->GetYaxis()->SetTitle("Number of events"); + h1->GetYaxis()->SetTitle("Number of events"); h1->SetLineColor(3); h1->SetFillColor(3); // green @@ -111,16 +111,16 @@ c1->cd(5); h2->GetXaxis()->SetTitleOffset(1.4); h2->GetYaxis()->SetTitleOffset(1.4); h2->GetXaxis()->SetTitle("Voxel intensity (0-255)"); - h2->GetYaxis()->SetTitle("Number of events"); + h2->GetYaxis()->SetTitle("Number of events"); h2->SetLineColor(2); h2->SetFillColor(2); // red - + h20->SetLineColor(5); h20->SetFillColor(5); // yellow (nucleoli) h20->Draw("same"); //************************* -// CUMULATED CELL INTENSITY +// CUMULATED CELL INTENSITY //************************* gStyle->SetOptStat(0000); @@ -165,11 +165,11 @@ c1->cd(3); // axe YX hist2->SetTitle("Nucleus intensity on transverse section"); // +//The two following lines are not needed when ntuple merging is active (default) +//system ("rm -rf microbeam.root"); +//system ("hadd -O microbeam.root microbeam_*.root"); -system ("rm -rf microbeam.root"); -system ("hadd -O microbeam.root microbeam_*.root"); - -TFile f("microbeam.root"); +TFile f("microbeam.root"); TNtuple* ntuple0; TNtuple* ntuple1; @@ -177,11 +177,11 @@ TNtuple* ntuple2; TNtuple* ntuple3; TNtuple* ntuple4; -ntuple0 = (TNtuple*)f.Get("ntuple0"); -ntuple1 = (TNtuple*)f.Get("ntuple1"); -ntuple2 = (TNtuple*)f.Get("ntuple2"); -ntuple3 = (TNtuple*)f.Get("ntuple3"); -ntuple4 = (TNtuple*)f.Get("ntuple4"); +ntuple0 = (TNtuple*)f.Get("ntuple0"); +ntuple1 = (TNtuple*)f.Get("ntuple1"); +ntuple2 = (TNtuple*)f.Get("ntuple2"); +ntuple3 = (TNtuple*)f.Get("ntuple3"); +ntuple4 = (TNtuple*)f.Get("ntuple4"); TH1F *h1bis = new TH1F("h1bis","Dose distribution in Nucleus",100,0.001,1.); TH1F *h10 = new TH1F("h10bis","Dose distribution in Cytoplasm",100,0.001,.2); @@ -226,7 +226,7 @@ c1->cd(6); //******************************** // STOPPING POWER AT CELL ENTRANCE //******************************** - + gStyle->SetOptStat(0000); gStyle->SetOptFit(); gStyle->SetPalette(1); @@ -234,8 +234,8 @@ gROOT->SetStyle("Plain"); Float_t d; -TH1F *h2bis = new TH1F("h2bis","Beam stopping power at cell entrance",200,0,300); - +TH1F *h2bis = new TH1F("h2bis","Beam stopping power at cell entrance",200,0,300); + c1->cd(9); ntuple0->Project("h2bis","sp"); scale = 1/h2bis->Integral(); @@ -263,10 +263,10 @@ c1->cd(9); Double_t Xc,Zc,X1,Y1,Z1,X2,Y2,Z2; // X position of target in World -Xc = -1295.59e3 - 955e3*sin(10*TMath::Pi()/180); +Xc = -1295.59e3 - 955e3*sin(10*TMath::Pi()/180); // Z position of target in World -Zc = -1327e3 + 955e3*cos(10*TMath::Pi()/180); +Zc = -1327e3 + 955e3*cos(10*TMath::Pi()/180); // Line alignment (cf MicrobeamEMField.cc) Xc = Xc + 5.24*cos(10*TMath::Pi()/180); @@ -278,7 +278,7 @@ ntuple2->SetBranchAddress("x",&x); ntuple2->SetBranchAddress("y",&y); ntuple2->SetBranchAddress("z",&z); Int_t nentries = (Int_t)ntuple2->GetEntries(); -for (Int_t i=0;iGetEntry(i); X1=x; @@ -288,16 +288,16 @@ for (Int_t i=0;iFill(Z2,Y2,X2); } - + c1->cd(10); ntupleR->Draw("X2:Z2","abs(X2)<50","surf3"); gPad->SetLogz(); //**************** -// ENERGY DEPOSITS +// ENERGY DEPOSITS //**************** gStyle->SetOptStat(0000); @@ -340,15 +340,15 @@ c1->cd(12); //******************************* // BEAM POSITION AT CELL ENTRANCE //******************************* - + gStyle->SetOptStat(0000); gStyle->SetOptFit(); gStyle->SetPalette(1); gROOT->SetStyle("Plain"); -TH1F *h77 = new TH1F("hx","h1",200,-10,10); -TH1F *h88 = new TH1F("hy","h1",200,-10,10); - +TH1F *h77 = new TH1F("hx","h1",200,-10,10); +TH1F *h88 = new TH1F("hy","h1",200,-10,10); + c1->cd(4); ntuple1->Project("hx","x"); scale = 1/h77->Integral(); diff --git a/examples/advanced/microbeam/src/ActionInitialization.cc b/examples/advanced/microbeam/src/ActionInitialization.cc index d915b4d37f..be2ad5d1b9 100644 --- a/examples/advanced/microbeam/src/ActionInitialization.cc +++ b/examples/advanced/microbeam/src/ActionInitialization.cc @@ -24,11 +24,11 @@ // ******************************************************************** // // This example is provided by the Geant4-DNA collaboration -// Any report or published results obtained using the Geant4-DNA software +// Any report or published results obtained using the Geant4-DNA software // shall cite the following Geant4-DNA collaboration publication: // Med. Phys. 37 (2010) 4692-4708 // The Geant4-DNA web site is available at http://geant4-dna.org -// +// // If you use this example, please cite the following publication: // Rad. Prot. Dos. 133 (2009) 2-11 @@ -48,16 +48,19 @@ ActionInitialization::~ActionInitialization() {} void ActionInitialization::BuildForMaster() const -{} +{ + // Needed for merging of analysis ROOT files + SetUserAction(new RunAction(fDetectorConstruction)); +} void ActionInitialization::Build() const { SetUserAction(new PrimaryGeneratorAction()); - + RunAction* runAction = new RunAction(fDetectorConstruction); SetUserAction(runAction); SetUserAction(new EventAction(runAction)); - + SetUserAction(new SteppingAction(runAction,fDetectorConstruction)); } diff --git a/examples/advanced/microbeam/src/RunAction.cc b/examples/advanced/microbeam/src/RunAction.cc index e39b4aad74..75c50f5510 100644 --- a/examples/advanced/microbeam/src/RunAction.cc +++ b/examples/advanced/microbeam/src/RunAction.cc @@ -24,11 +24,11 @@ // ******************************************************************** // // This example is provided by the Geant4-DNA collaboration -// Any report or published results obtained using the Geant4-DNA software +// Any report or published results obtained using the Geant4-DNA software // shall cite the following Geant4-DNA collaboration publication: // Med. Phys. 37 (2010) 4692-4708 // The Geant4-DNA web site is available at http://geant4-dna.org -// +// // If you use this example, please cite the following publication: // Rad. Prot. Dos. 133 (2009) 2-11 // @@ -38,37 +38,17 @@ #include "G4AnalysisManager.hh" #include "Randomize.hh" -RunAction::RunAction(const DetectorConstruction* det) +RunAction::RunAction(const DetectorConstruction* det) :fDetector(det) -{ - fSaveRndm = 0; +{ + fSaveRndm = 0; fDose3DDose = nullptr; fMapVoxels = nullptr; -} -RunAction::~RunAction() -{ - if (fDose3DDose) delete[] fDose3DDose; - if (fMapVoxels) delete[] fMapVoxels; -} - -void RunAction::BeginOfRunAction(const G4Run*) -{ - // Read phantom - Singleton - CellParameterisation* fMyCellParameterisation = CellParameterisation::Instance(); - - // Histograms - // Get/create analysis manager - G4cout << "##### Create analysis manager " << " " << this << G4endl; - - G4AnalysisManager* man = G4AnalysisManager::Instance(); - man->SetDefaultFileType("root"); - - G4cout << "Using " << man->GetType() << " analysis manager" << G4endl; - - // Open an output file - man->OpenFile("microbeam"); + auto man = G4AnalysisManager::Instance(); man->SetFirstNtupleId(1); + man->SetDefaultFileType("root"); + man->SetNtupleMerging(true); //Declare ntuples // @@ -121,24 +101,42 @@ void RunAction::BeginOfRunAction(const G4Run*) G4cout << "All Ntuples have been created " << G4endl; + +} + +RunAction::~RunAction() +{ + if (fDose3DDose) delete[] fDose3DDose; + if (fMapVoxels) delete[] fMapVoxels; +} + +void RunAction::BeginOfRunAction(const G4Run*) +{ + // Read phantom - Singleton + CellParameterisation* fMyCellParameterisation = CellParameterisation::Instance(); + + // Histograms + auto man = G4AnalysisManager::Instance(); + man->OpenFile("microbeam"); + // save Rndm status if (fSaveRndm > 0) - { + { CLHEP::HepRandom::showEngineStatus(); CLHEP::HepRandom::saveEngineStatus("beginOfRun.rndm"); } - + fNumEvent = 0; fNbOfHitsGas = 0; - + // ABSORBED DOSES INITIALIZATION fDoseN = 0; fDoseC = 0; - + fMassCytoplasm = fDetector->GetMassCytoplasm(); fMassNucleus = fDetector->GetMassNucleus(); fNbOfPixels = fDetector->GetNbOfPixelsInPhantom(); - + fMapVoxels = new G4ThreeVector[fNbOfPixels]; fDose3DDose = new G4double[fNbOfPixels]; @@ -150,18 +148,18 @@ void RunAction::BeginOfRunAction(const G4Run*) } void RunAction::EndOfRunAction(const G4Run* /*aRun*/) -{ +{ G4AnalysisManager* man = G4AnalysisManager::Instance(); - + // save Rndm status if (fSaveRndm == 1) - { + { CLHEP::HepRandom::showEngineStatus(); CLHEP::HepRandom::saveEngineStatus("endOfRun.rndm"); - } - - for (G4int i=0; i0) { G4ThreeVector v; @@ -173,11 +171,11 @@ void RunAction::EndOfRunAction(const G4Run* /*aRun*/) man->AddNtupleRow(5); } } - - G4cout << "-> Total number of particles detected by the gas detector : " << GetNbOfHitsGas() << G4endl; - G4cout << G4endl; - - //save histograms + + G4cout << "-> Total number of particles detected by the gas detector : " << GetNbOfHitsGas() << G4endl; + G4cout << G4endl; + + //save histograms man->Write(); man->CloseFile(); diff --git a/examples/advanced/microelectronics/microelectronics.out b/examples/advanced/microelectronics/microelectronics.out index 6d4f578043..89f0399ebd 100644 --- a/examples/advanced/microelectronics/microelectronics.out +++ b/examples/advanced/microelectronics/microelectronics.out @@ -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 @@ -34,23 +34,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", @@ -121,7 +122,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 ======== @@ -353,7 +354,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics -------------------------------------------------------------------------------- ### Run 0 starts. -##### Create analysis manager 0x189c620 +##### Create analysis manager 0x1318cd0 Using analysis manager ... set ntuple merging row mode : row-wise - done ... create file : microelectronics.root - done @@ -365,32 +366,31 @@ Si Reading TCS file Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si loaddata : Elastic/elsepa_elastic_cross_e_Si -Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.6.1/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat +Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.7/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat MicroElasticModel, Material 2 / 2 : G4_Si Si Reading TCS file Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si loaddata : Elastic/elsepa_elastic_cross_e_Si -Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.6.1/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat +Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.7/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat Run terminated. Run Summary Number of events processed : 10 - User=0.150000s Real=0.152436s Sys=0.000000s + User=0.260000s Real=0.277049s Sys=0.010000s ... write file : microelectronics.root - done ... close file : microelectronics.root - done ... clear all data - done Number and type of particles created outside region "Target" : -N e- : 3 _______________________ Number and type of particles created in region "Target" : -N e- : 3739 +N e- : 1710 Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x184d020 -UserPhysicsList deleted 0x1862f30 -UserActionInitialization deleted 0x1895b40 +UserDetectorConstruction deleted 0x12c96d0 +UserPhysicsList deleted 0x12dfa00 +UserActionInitialization deleted 0x13121f0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -408,12 +408,12 @@ 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 '17G4DynamicParticle', size : 0.024 MB -Pool ID '7G4Track', size : 0.0481 MB +Pool ID '17G4DynamicParticle', size : 0.0154 MB +Pool ID '7G4Track', size : 0.0308 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 0.086 MB +Dynamic pools deleted: 9 / Total memory freed: 0.06 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/advanced/nanobeam/nanobeam.out b/examples/advanced/nanobeam/nanobeam.out index a8d82cfc57..2df88d397c 100644 --- a/examples/advanced/nanobeam/nanobeam.out +++ b/examples/advanced/nanobeam/nanobeam.out @@ -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 ======== @@ -297,7 +297,7 @@ Index : 0 used in the geometry : Yes ================================================================== -##### Create analysis manager 0x5498f0 +##### Create analysis manager 0x16d4a70 Using analysis manager Ntuple-1 created Ntuple-2 created diff --git a/examples/advanced/purging_magnet/purging_magnet.out b/examples/advanced/purging_magnet/purging_magnet.out index 999a5fd13f..41eee5c6df 100644 --- a/examples/advanced/purging_magnet/purging_magnet.out +++ b/examples/advanced/purging_magnet/purging_magnet.out @@ -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", @@ -282,7 +283,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 ======== diff --git a/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out index 44ee651239..0e68c965b8 100644 --- a/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out +++ b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out @@ -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", @@ -190,7 +191,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 ======== @@ -851,6 +852,7 @@ CoulombScat: for pi- XStype:1 applyCuts: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 @@ -867,6 +869,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 @@ -906,7 +909,7 @@ Projection_index 0 Slice_index 0 Pixel_index 0 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000316s Sys=0.000000s + User=0.000000s Real=0.000314s Sys=0.000000s /gps/direction 1.000000 0.000000 0.000000 /gps/pos/centre -36.000000 -14.400000 0.000000 um /run/beamOn 20 @@ -936,7 +939,7 @@ Projection_index 0 Slice_index 0 Pixel_index 1 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003865s Sys=0.000000s + User=0.010000s Real=0.004088s Sys=0.000000s /gps/direction 1.000000 0.000000 0.000000 /gps/pos/centre -36.000000 0.000000 0.000000 um /run/beamOn 20 @@ -966,7 +969,7 @@ Projection_index 0 Slice_index 0 Pixel_index 2 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003374s Sys=0.000000s + User=0.000000s Real=0.003650s Sys=0.000000s /gps/direction 1.000000 0.000000 0.000000 /gps/pos/centre -36.000000 14.400000 0.000000 um /run/beamOn 20 @@ -996,7 +999,7 @@ Projection_index 0 Slice_index 0 Pixel_index 3 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003503s Sys=0.000000s + User=0.000000s Real=0.003772s Sys=0.000000s /gps/direction 1.000000 0.000000 0.000000 /gps/pos/centre -36.000000 28.800000 0.000000 um /run/beamOn 20 @@ -1026,7 +1029,7 @@ Projection_index 0 Slice_index 0 Pixel_index 4 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000049s Sys=0.000000s + User=0.000000s Real=0.000051s Sys=0.000000s /gps/direction 0.809017 0.587785 0.000000 /gps/pos/centre -12.196397 -44.459959 0.000000 um /run/beamOn 20 @@ -1056,7 +1059,7 @@ Projection_index 1 Slice_index 0 Pixel_index 0 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000047s Sys=0.000000s + User=0.000000s Real=0.000071s Sys=0.000000s /gps/direction 0.809017 0.587785 0.000000 /gps/pos/centre -20.660504 -32.810114 0.000000 um /run/beamOn 20 @@ -1086,7 +1089,7 @@ Projection_index 1 Slice_index 0 Pixel_index 1 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002626s Sys=0.000000s + User=0.010000s Real=0.002861s Sys=0.000000s /gps/direction 0.809017 0.587785 0.000000 /gps/pos/centre -29.124612 -21.160269 0.000000 um /run/beamOn 20 @@ -1116,7 +1119,7 @@ Projection_index 1 Slice_index 0 Pixel_index 2 Run terminated. Run Summary Number of events processed : 20 - User=0.010000s Real=0.004446s Sys=0.000000s + User=0.000000s Real=0.005856s Sys=0.000000s /gps/direction 0.809017 0.587785 0.000000 /gps/pos/centre -37.588719 -9.510424 0.000000 um /run/beamOn 20 @@ -1146,7 +1149,7 @@ Projection_index 1 Slice_index 0 Pixel_index 3 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002667s Sys=0.000000s + User=0.010000s Real=0.002635s Sys=0.000000s /gps/direction 0.809017 0.587785 0.000000 /gps/pos/centre -46.052827 2.139420 0.000000 um /run/beamOn 20 @@ -1176,7 +1179,7 @@ Projection_index 1 Slice_index 0 Pixel_index 4 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000047s Sys=0.000000s + User=0.000000s Real=0.000046s Sys=0.000000s /gps/direction 0.309017 0.951057 0.000000 /gps/pos/centre 16.265816 -43.137724 0.000000 um /run/beamOn 20 @@ -1206,7 +1209,7 @@ Projection_index 2 Slice_index 0 Pixel_index 0 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000043s Sys=0.000000s + User=0.000000s Real=0.000067s Sys=0.000000s /gps/direction 0.309017 0.951057 0.000000 /gps/pos/centre 2.570602 -38.687879 0.000000 um /run/beamOn 20 @@ -1236,7 +1239,7 @@ Projection_index 2 Slice_index 0 Pixel_index 1 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003503s Sys=0.000000s + User=0.000000s Real=0.003497s Sys=0.000000s /gps/direction 0.309017 0.951057 0.000000 /gps/pos/centre -11.124612 -34.238035 0.000000 um /run/beamOn 20 @@ -1266,7 +1269,7 @@ Projection_index 2 Slice_index 0 Pixel_index 2 Run terminated. Run Summary Number of events processed : 20 - User=0.010000s Real=0.003652s Sys=0.000000s + User=0.000000s Real=0.003669s Sys=0.000000s /gps/direction 0.309017 0.951057 0.000000 /gps/pos/centre -24.819826 -29.788190 0.000000 um /run/beamOn 20 @@ -1296,7 +1299,7 @@ Projection_index 2 Slice_index 0 Pixel_index 3 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003301s Sys=0.000000s + User=0.010000s Real=0.003359s Sys=0.000000s /gps/direction 0.309017 0.951057 0.000000 /gps/pos/centre -38.515039 -25.338345 0.000000 um /run/beamOn 20 @@ -1356,7 +1359,7 @@ Projection_index 3 Slice_index 0 Pixel_index 0 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000046s Sys=0.000000s + User=0.000000s Real=0.000047s Sys=0.000000s /gps/direction -0.309017 0.951057 0.000000 /gps/pos/centre 24.819826 -29.788190 0.000000 um /run/beamOn 20 @@ -1386,7 +1389,7 @@ Projection_index 3 Slice_index 0 Pixel_index 1 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003460s Sys=0.000000s + User=0.000000s Real=0.003508s Sys=0.000000s /gps/direction -0.309017 0.951057 0.000000 /gps/pos/centre 11.124612 -34.238035 0.000000 um /run/beamOn 20 @@ -1416,7 +1419,7 @@ Projection_index 3 Slice_index 0 Pixel_index 2 Run terminated. Run Summary Number of events processed : 20 - User=0.010000s Real=0.003591s Sys=0.000000s + User=0.010000s Real=0.003626s Sys=0.000000s /gps/direction -0.309017 0.951057 0.000000 /gps/pos/centre -2.570602 -38.687879 0.000000 um /run/beamOn 20 @@ -1446,7 +1449,7 @@ Projection_index 3 Slice_index 0 Pixel_index 3 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.003705s Sys=0.000000s + User=0.000000s Real=0.003805s Sys=0.000000s /gps/direction -0.309017 0.951057 0.000000 /gps/pos/centre -16.265816 -43.137724 0.000000 um /run/beamOn 20 @@ -1476,7 +1479,7 @@ Projection_index 3 Slice_index 0 Pixel_index 4 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000057s Sys=0.000000s + User=0.000000s Real=0.000047s Sys=0.000000s /gps/direction -0.809017 0.587785 0.000000 /gps/pos/centre 46.052827 2.139420 0.000000 um /run/beamOn 20 @@ -1506,7 +1509,7 @@ Projection_index 4 Slice_index 0 Pixel_index 0 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000072s Sys=0.000000s + User=0.000000s Real=0.000042s Sys=0.000000s /gps/direction -0.809017 0.587785 0.000000 /gps/pos/centre 37.588719 -9.510424 0.000000 um /run/beamOn 20 @@ -1536,7 +1539,7 @@ Projection_index 4 Slice_index 0 Pixel_index 1 Run terminated. Run Summary Number of events processed : 20 - User=0.010000s Real=0.002708s Sys=0.000000s + User=0.000000s Real=0.002712s Sys=0.000000s /gps/direction -0.809017 0.587785 0.000000 /gps/pos/centre 29.124612 -21.160269 0.000000 um /run/beamOn 20 @@ -1566,7 +1569,7 @@ Projection_index 4 Slice_index 0 Pixel_index 2 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.004665s Sys=0.000000s + User=0.010000s Real=0.004684s Sys=0.000000s /gps/direction -0.809017 0.587785 0.000000 /gps/pos/centre 20.660504 -32.810114 0.000000 um /run/beamOn 20 @@ -1596,7 +1599,7 @@ Projection_index 4 Slice_index 0 Pixel_index 3 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002657s Sys=0.000000s + User=0.000000s Real=0.002620s Sys=0.000000s /gps/direction -0.809017 0.587785 0.000000 /gps/pos/centre 12.196397 -44.459959 0.000000 um /run/beamOn 20 @@ -1626,7 +1629,7 @@ Projection_index 4 Slice_index 0 Pixel_index 4 Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000049s Sys=0.000000s + User=0.000000s Real=0.000045s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== diff --git a/examples/advanced/underground_physics/alpha.out b/examples/advanced/underground_physics/alpha.out index 19084d7e85..84677b9199 100644 --- a/examples/advanced/underground_physics/alpha.out +++ b/examples/advanced/underground_physics/alpha.out @@ -1,4 +1,4 @@ Evt Eprim Etot LXe LXeTime PMT PMTTime Seed1 Seed2 First Flags # MeV MeV hits ns hits ns hit -0 5.4860 5.0030 1187 0x1.8952f5d9640cp-14 5134 0x1.7ff10b7bebc43p+4 1 24797448 alpha electron other +0 5.4860 5.0030 1187 0x1.8952f5d9640cp-14 5134 0x1.7ff10b7bebc43p+4 1 6146440 alpha electron other diff --git a/examples/advanced/underground_physics/gamma_1000.out b/examples/advanced/underground_physics/gamma_1000.out index baf6eaf929..10fc808c6a 100644 --- a/examples/advanced/underground_physics/gamma_1000.out +++ b/examples/advanced/underground_physics/gamma_1000.out @@ -1,352 +1,352 @@ Evt Eprim Etot LXe LXeTime PMT PMTTime Seed1 Seed2 First Flags # MeV MeV hits ns hits ns hit -3 0.0600 0.0600 66 0x1.4f6fc8c708fa8p-15 54 0x1.382377b3d35bep+5 1 10105096 gamma gamma electron -5 0x1.eb851eb851eb9p-5 0x1.b116228134481p-6 24 0x1.30809e8074632p-15 22 0x1.384d91212ec7ap+5 1 10105096 gamma gamma electron -9 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 20 0x1.d734ca6f87d53p-14 28 0x1.d339b12d58062p+5 1 10105096 gamma gamma electron -14 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 59 0x1.6f517820463f2p-18 52 0x1.c93301b20aeb2p+5 1 10105096 gamma gamma electron -22 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.2b1cb06e9aef7p-10 57 0x1.7e73e500da077p+5 1 10105096 gamma gamma electron -28 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 27 0x1.b6dd046de66ebp-17 20 0x1.975e0d6280108p+5 1 10105096 gamma gamma electron -30 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.e223592ae219fp-18 47 0x1.541dc3e1ca937p+5 1 10105096 gamma gamma electron -35 0x1.eb851eb851eb9p-5 0x1.430bee4acbd65p-5 44 0x1.31b96ae605e99p-17 22 0x1.a23997fb7ecf1p+5 1 10105096 gamma gamma electron -37 0x1.eb851eb851eb9p-5 0x1.04e09015551aap-7 10 0x1.7a415f64c52cap-10 142 0x1.2c7defa5f2f7ep+5 1 10105096 gamma gamma electron -38 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.9f5f2b8c1b6a5p-10 63 0x1.7830090ea0548p+5 1 10105096 gamma gamma electron -39 0x1.eb851eb851eb9p-5 0x1.26c7554ecd418p-6 24 0x1.933d729fd3a4bp-16 19 0x1.6d9d1421c31c7p+5 1 10105096 gamma gamma electron -40 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 51 0x1.6f6c333c49d82p-18 59 0x1.5c624f30c7ddbp+5 1 10105096 gamma gamma electron -41 0x1.eb851eb851eb9p-5 0x1.76213bad5f9a4p-6 32 0x1.358ac3e8d8199p-13 22 0x1.f1c48b11c1639p+5 1 10105096 gamma gamma electron -45 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 49 0x1.6136c8fd827bcp-17 49 0x1.faa52ae8f918p+4 1 10105096 gamma gamma electron -46 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 57 0x1.0d11644ae2262p-17 52 0x1.7aa68cc12d7ddp+5 1 10105096 gamma gamma electron -56 0x1.eb851eb851eb9p-5 0x1.70043d2e74e38p-5 47 0x1.391aa76ba8dc8p-12 46 0x1.4c8a877fc026p+5 1 10105096 gamma gamma electron -59 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.c30e4fcba7009p-18 53 0x1.65ab6929030d3p+5 1 10105096 gamma gamma electron -62 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 13 0x1.a740ab8df6be4p-17 30 0x1.4f2328c2245cbp+5 1 10105096 gamma gamma electron -63 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 45 0x1.c14139b72af5dp-18 71 0x1.7a205e28924c8p+5 1 10105096 gamma gamma electron -64 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dd1p-6 33 0x1.ef90443cc0945p-17 25 0x1.6b4013dcf7776p+5 1 10105096 gamma gamma electron -66 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 43 0x1.b1167ff3043afp-18 90 0x1.71b051cff45b3p+5 1 10105096 gamma gamma electron -68 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 45 0x1.6ddd34bacdbaep-10 176 0x1.5ade2df69199ep+5 1 10105096 gamma gamma electron -69 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 58 0x1.1d9ef2d3effafp-17 54 0x1.2649fb40614c9p+5 1 10105096 gamma gamma electron -72 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 64 0x1.7660d4400a31ep-17 60 0x1.a1d13355242ebp+5 1 10105096 gamma gamma electron -74 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 65 0x1.9f6a202ac3fc3p-17 54 0x1.9477f1a640e2dp+5 1 10105096 gamma gamma electron -79 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 39 0x1.281a42ec441b1p-17 50 0x1.4f0e5f2347414p+5 1 10105096 gamma gamma electron -84 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.f209c584dedf7p-18 78 0x1.752f4e13563c2p+5 1 10105096 gamma gamma electron -85 0x1.eb851eb851eb9p-5 0x1.24da1e8343199p-6 17 0x1.f6384b9a04819p-18 18 0x1.6b953f0c3b735p+5 1 10105096 gamma gamma electron -87 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 32 0x1.10dd271fa9092p-17 37 0x1.a4bb7e56e2ee8p+5 1 10105096 gamma gamma electron -91 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 57 0x1.6b5c95595d762p-8 137 0x1.339ad044e7941p+5 1 10105096 gamma gamma electron -92 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 54 0x1.308afc89610e2p-15 61 0x1.a8727e6d3c881p+5 1 10105096 gamma gamma electron -93 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 58 0x1.206eee994eb57p-17 65 0x1.84c5d2fadd756p+5 1 10105096 gamma gamma electron -100 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 30 0x1.8d4fa61b3286cp-18 36 0x1.b73c177ae80f8p+5 1 10105096 gamma gamma electron -103 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 67 0x1.d83ff976b24a8p-17 45 0x1.c35800017baefp+5 1 10105096 gamma gamma electron -104 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 55 0x1.8753d7ebcdc13p-18 58 0x1.7778b1446794ep+5 1 10105096 gamma gamma electron -105 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 26 0x1.64f5b44c30d31p-16 25 0x1.50cc052da9fecp+5 1 10105096 gamma gamma electron -110 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.d6a1d9fec718bp-17 72 0x1.4a36d392169aep+5 1 10105096 gamma gamma electron -113 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 58 0x1.e6113cd4beeaep-18 61 0x1.393175f57858ap+5 1 10105096 gamma gamma electron -114 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 56 0x1.759f621d78334p-18 66 0x1.7b1c32ff81344p+5 1 10105096 gamma gamma electron -117 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 80 0x1.bf9a08ccf920bp-16 62 0x1.73545cf42d859p+5 1 10105096 gamma gamma electron -118 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 62 0x1.4777c0df7d3ddp-17 64 0x1.5e8a32bf79afbp+5 1 10105096 gamma gamma electron -119 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 62 0x1.3f590b0859761p-17 67 0x1.caa1fa2774bbep+5 1 10105096 gamma gamma electron -120 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 29 0x1.bc3feb4380406p-16 27 0x1.15de3354d6aabp+6 1 10105096 gamma gamma electron -121 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 57 0x1.74efb85768fa9p-18 43 0x1.52e6850a723ccp+5 1 10105096 gamma gamma electron -127 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 61 0x1.7280ad275d63bp-18 55 0x1.6a45bb2a846eep+5 1 10105096 gamma gamma electron -130 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 20 0x1.7bdc76d62ef39p-18 23 0x1.0a9ffb9d151ap+6 1 10105096 gamma gamma electron -131 0x1.eb851eb851eb9p-5 0x1.96973d49aa813p-7 12 0x1.2249f87f71516p-13 13 0x1.3a7cf6743ade9p+5 1 10105096 gamma gamma electron -137 0x1.eb851eb851eb9p-5 0x1.b11622813448p-6 30 0x1.c3eb0e1b14e7p-18 19 0x1.4e97266dcb701p+5 1 10105096 gamma gamma electron -140 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 64 0x1.b048d751382f6p-17 66 0x1.3c99fdee57062p+5 1 10105096 gamma gamma electron -141 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 53 0x1.6b7c0f64d1071p-18 72 0x1.59a50809c704fp+5 1 10105096 gamma gamma electron -142 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.600173cac3494p-16 67 0x1.45278d2bdf3f4p+5 1 10105096 gamma gamma electron -143 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 58 0x1.29254a9d03d43p-10 66 0x1.4a98939231021p+5 1 10105096 gamma gamma electron -145 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 49 0x1.993207a605485p-18 44 0x1.bc2f7468d4ca9p+5 1 10105096 gamma gamma electron -146 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 33 0x1.4784d715fe81fp-16 29 0x1.f77fbe9e87fe5p+5 1 10105096 gamma gamma electron -147 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 70 0x1.3633c6e26c8b5p-17 68 0x1.93cf93ccec301p+5 1 10105096 gamma gamma electron -149 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 55 0x1.aebe8055d04bfp-18 51 0x1.5a5476f7847f8p+5 1 10105096 gamma gamma electron -150 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 24 0x1.28a12e30040e2p-9 78 0x1.8f4b1d91f76a4p+5 1 10105096 gamma gamma electron -155 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 84 0x1.e8077ffd97e72p-17 38 0x1.762a58fe68d64p+5 1 10105096 gamma gamma electron -157 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 73 0x1.6b8da19688ab6p-16 53 0x1.c81bbb68a7d5ap+5 1 10105096 gamma gamma electron -158 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.21cfc7ab99e41p-17 74 0x1.5742994fefe32p+5 1 10105096 gamma gamma electron -160 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 20 0x1.d0e4d7140240ep-16 20 0x1.8f20d20efe804p+5 1 10105096 gamma gamma electron -163 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.176a9c2dfdc12p-17 51 0x1.6dcd493eab83fp+5 1 10105096 gamma gamma electron -165 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.78332bd35a5eep-17 74 0x1.3090b0f05f5d2p+5 1 10105096 gamma gamma electron -166 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.216878f586455p-8 67 0x1.8a2bc08bbb5bcp+5 1 10105096 gamma gamma electron -167 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 32 0x1.1ac7258623df8p-14 17 0x1.cb454c1b37fd9p+5 1 10105096 gamma gamma electron -168 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 36 0x1.2f15518948302p-16 23 0x1.6ccdc9086fc3dp+5 1 10105096 gamma gamma electron -172 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 53 0x1.3babc728b0914p-17 54 0x1.544fb1ab5edb1p+5 1 10105096 gamma gamma electron -173 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 69 0x1.81b0c4b44d976p-18 72 0x1.3acf5c6abfa2bp+5 1 10105096 gamma gamma electron -177 0x1.eb851eb851eb9p-5 0x1.d697c750f7292p-7 41 0x1.1956578dc32e8p-14 14 0x1.caf862e5affc7p+5 1 10105096 e- electron -178 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 62 0x1.10de584dd8643p-17 54 0x1.a430f7c5194ccp+5 1 10105096 gamma gamma electron -180 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 30 0x1.2559a354f302bp-16 30 0x1.4a469bf8698d9p+5 1 10105096 gamma gamma electron -185 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 87 0x1.a8a706469a48ap-13 55 0x1.8da62f68d69b4p+5 1 10105096 gamma gamma electron -187 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.14db8cd3fb143p-16 52 0x1.605e0cfa094fbp+5 1 10105096 gamma gamma electron -188 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.989fe1a69d8c7p-17 60 0x1.5772a35607f4p+5 1 10105096 gamma gamma electron -190 0x1.eb851eb851eb9p-5 0x1.47a8a09d99d97p-5 47 0x1.11e993153eec5p-17 29 0x1.4986f34272f7p+5 1 10105096 gamma gamma electron -191 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 44 0x1.e9fb73c5e604bp-18 44 0x1.28ed143d46f81p+5 1 10105096 gamma gamma electron -193 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 63 0x1.269b10df8aca8p-10 83 0x1.5615e62c6766cp+5 1 10105096 gamma gamma electron -194 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 46 0x1.6bdc492d20224p-17 57 0x1.290743872c0efp+5 1 10105096 gamma gamma electron -200 0x1.eb851eb851eb9p-5 0x1.b8928324e30e7p-7 16 0x1.6212fd8ceaa26p-13 14 0x1.6152cdaca65ap+5 1 10105096 gamma gamma electron -201 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 62 0x1.6378b69c1d103p-15 45 0x1.929c268da9c49p+5 1 10105096 gamma gamma electron -202 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.767460188e5c5p-17 48 0x1.38cd40c90c595p+5 1 10105096 gamma gamma electron -207 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 57 0x1.dde25219d77d2p-16 76 0x1.66fdd651e833cp+5 1 10105096 gamma gamma electron -209 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 61 0x1.782f71f3e159cp-18 59 0x1.6a07f828b43a3p+5 1 10105096 gamma gamma electron -213 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 24 0x1.9a55c18d54596p-18 32 0x1.87a23be0f001dp+5 1 10105096 gamma gamma electron -215 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 64 0x1.a3cfccc372cadp-18 40 0x1.7e919578e5672p+5 1 10105096 gamma gamma electron -219 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 71 0x1.73034606425f8p-9 59 0x1.75ed7b2bec846p+5 1 10105096 gamma gamma electron -221 0x1.eb851eb851eb9p-5 0x1.e39143d559ac8p-5 86 0x1.f1585774f741cp-17 60 0x1.522c5f7f87ca1p+5 1 10105096 gamma gamma electron -223 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.c47e65f9bd311p-18 55 0x1.70223357d5a47p+5 1 10105096 gamma gamma electron -227 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.c8ff156f56d58p-18 51 0x1.4c9095739cc29p+5 1 10105096 gamma gamma electron -228 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 66 0x1.752e8e7e2dcdep-18 45 0x1.56973c79428b2p+5 1 10105096 gamma gamma electron -229 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 62 0x1.86c514c701da5p-18 42 0x1.6d3b63fa4a2b3p+5 1 10105096 gamma gamma electron -231 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 20 0x1.580e46916bcdep-18 14 0x1.a11eccc9f8eabp+5 1 10105096 gamma gamma electron -232 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 53 0x1.85040d518d217p-16 73 0x1.7c96c3effa70dp+5 1 10105096 gamma gamma electron -234 0x1.eb851eb851eb9p-5 0x1.3fb5576541a33p-5 35 0x1.e2c7d7fb22da1p-17 27 0x1.1ec6ccd84b101p+5 1 10105096 gamma gamma electron -238 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 59 0x1.74412cfa225ecp-18 78 0x1.55b1a21274ef4p+5 1 10105096 gamma gamma electron -239 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 24 0x1.34ac09d70f518p-17 35 0x1.6b8a80ae08897p+5 1 10105096 gamma gamma electron -240 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 68 0x1.fec438aa91075p-16 71 0x1.5679d024f86b5p+5 1 10105096 gamma gamma electron -243 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 44 0x1.a7ab5b18e7df5p-16 56 0x1.8c17c15298183p+5 1 10105096 gamma gamma electron -244 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 57 0x1.74ff6dda25a38p-10 80 0x1.4a64e9e95526cp+5 1 10105096 gamma gamma electron -246 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 63 0x1.65990f9e6f56fp-16 61 0x1.9c481c715d49cp+5 1 10105096 gamma gamma electron -248 0x1.eb851eb851eb9p-5 0x1.b9f89da59fc2p-10 2 0x1.7a9334c03d7ep-18 4 0x1.0e34749060aecp+5 1 10105096 gamma gamma electron -253 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.9db1cd7ab5dc4p-15 53 0x1.b6a1ba424168cp+5 1 10105096 gamma gamma electron -255 0x1.eb851eb851eb9p-5 0x1.be85e22cb0623p-7 7 0x1.489eb481779acp-14 13 0x1.21333e76f1004p+6 1 10105096 gamma gamma electron -257 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 50 0x1.cf9782139b664p-18 58 0x1.5414071cfe461p+5 1 10105096 gamma gamma electron -258 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 28 0x1.c1ae4469bd3f6p-18 32 0x1.7b91c1dbf56bcp+5 1 10105096 gamma gamma electron -263 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.a58d64e798224p-10 144 0x1.846a416238439p+5 1 10105096 gamma gamma electron -265 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.685b3d65949f2p-18 65 0x1.7e41f87292123p+5 1 10105096 gamma gamma electron -268 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 53 0x1.61abd632b7617p-18 66 0x1.7813381c8bc69p+5 1 10105096 gamma gamma electron -271 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 37 0x1.ebc382d655d2dp-18 28 0x1.65fc61d4bd337p+5 1 10105096 gamma gamma electron -272 0x1.eb851eb851eb9p-5 0x1.b00e5024db81fp-6 23 0x1.4d643df5a0e95p-17 23 0x1.25cbc8833a6d2p+5 1 10105096 gamma gamma electron -273 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 36 0x1.7bd3ea0b4f8bap-18 25 0x1.09b9b9ae24915p+6 1 10105096 gamma gamma electron -275 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 25 0x1.218d9a7c16f58p-16 36 0x1.5e9b3b4c99c0bp+5 1 10105096 gamma gamma electron -280 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 66 0x1.0519bd975719dp-9 56 0x1.8cbe03aa9adb7p+5 1 10105096 gamma gamma electron -284 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 52 0x1.a918976875865p-18 79 0x1.2ba1aa3725a33p+5 1 10105096 gamma gamma electron -287 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 84 0x1.70e9873f629aap-14 47 0x1.7d646e3538837p+5 1 10105096 gamma gamma electron -291 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 64 0x1.98d552a0e3c64p-18 71 0x1.73b42532b5389p+5 1 10105096 gamma gamma electron -292 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.2867340876f87p-16 63 0x1.6cc4b9f894884p+5 1 10105096 gamma gamma electron -294 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 30 0x1.12de1a8c37dc1p-14 28 0x1.b68ff52e6a5d7p+5 1 10105096 gamma gamma electron -307 0x1.eb851eb851eb9p-5 0x1.9707ebddbd542p-6 51 0x1.0eeb3dcf787ap-17 29 0x1.83d5b70711a29p+5 1 10105096 gamma gamma electron -310 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 32 0x1.763b5a4aacd72p-13 25 0x1.4154c7358f11dp+5 1 10105096 gamma gamma electron -313 0x1.eb851eb851eb9p-5 0x1.b00e5024db81bp-6 24 0x1.d05392d74796fp-18 29 0x1.552e60a19edbp+5 1 10105096 gamma gamma electron -317 0x1.eb851eb851eb9p-5 0x1.1b8fa87f0faa9p-6 22 0x1.fd6c52134351bp-18 18 0x1.50df9784baf94p+5 1 10105096 gamma gamma electron -319 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 29 0x1.5765f78b1eff3p-18 29 0x1.54c54808ac68cp+5 1 10105096 gamma gamma electron -320 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 49 0x1.9cd33c385e69ap-18 60 0x1.6da50d94dec22p+5 1 10105096 gamma gamma electron -327 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 53 0x1.9f598dc173b05p-18 62 0x1.53ba4375ca1b5p+5 1 10105096 gamma gamma electron -329 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 42 0x1.ea525280765cdp-18 49 0x1.659e5164de99bp+5 1 10105096 gamma gamma electron -333 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 61 0x1.1870c876992f6p-17 46 0x1.0c43c0c92aa47p+5 1 10105096 gamma gamma electron -338 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 38 0x1.3a1c804acb768p-17 30 0x1.fa8ccad97f842p+4 1 10105096 gamma gamma electron -349 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 62 0x1.0006189fae3fep-16 41 0x1.abb66e5e59f59p+5 1 10105096 gamma gamma electron -351 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.c2159a37aa34dp-18 50 0x1.91414e165eb3cp+5 1 10105096 gamma gamma electron -353 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 55 0x1.6c171c5233edp-18 58 0x1.5a930e729b1a6p+5 1 10105096 gamma gamma electron -356 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.76115c21c6432p-18 66 0x1.9da15545c9aaap+5 1 10105096 gamma gamma electron -357 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.5855749eb73d8p-18 98 0x1.2c327a46dbdebp+5 1 10105096 gamma gamma electron -359 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 24 0x1.0adb23dcaa55cp-15 19 0x1.231b6ba63f437p+5 1 10105096 gamma gamma electron -362 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 83 0x1.f058762d6bee5p-18 56 0x1.ebb73a91d37fp+5 1 10105096 gamma gamma electron -364 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 57 0x1.3b9f0f9505781p-17 43 0x1.3a57116809b63p+5 1 10105096 gamma gamma electron -365 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 26 0x1.f10b6513bbc86p-18 31 0x1.5c32c1f5276b7p+5 1 10105096 gamma gamma electron -366 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 34 0x1.ae97682422f11p-18 22 0x1.63c2c9a50ca4fp+5 1 10105096 gamma gamma electron -371 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e9192fp-6 42 0x1.cd92313283cd4p-18 29 0x1.91bfac8fdb464p+5 1 10105096 gamma gamma electron -372 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 74 0x1.29127e2ffe247p-17 63 0x1.255df3ec36da5p+5 1 10105096 gamma gamma electron -373 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.83506b0bfdb8cp-18 49 0x1.b02ff0f43f029p+5 1 10105096 gamma gamma electron -374 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 37 0x1.6dc8e9d628685p-18 37 0x1.8bfe5a75361b4p+5 1 10105096 gamma gamma electron -375 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 51 0x1.a82230858bf1ap-18 77 0x1.61be32723fcbfp+5 1 10105096 gamma gamma electron -377 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 61 0x1.3d4a908077133p-16 77 0x1.c9f271b733e8cp+5 1 10105096 gamma gamma electron -378 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 21 0x1.cd36f102db6cp-18 20 0x1.4493b4f5512a7p+5 1 10105096 gamma gamma electron -380 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 73 0x1.94ef1334469dep-18 63 0x1.5609bf2103698p+5 1 10105096 gamma gamma electron -384 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 51 0x1.a97fd9a8d72e5p-18 53 0x1.6c1d3225445fdp+5 1 10105096 gamma gamma electron -385 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 48 0x1.93111bd03dab6p-17 57 0x1.450b239063797p+5 1 10105096 gamma gamma electron -388 0x1.eb851eb851eb9p-5 0x1.ae2659db83a0cp-6 42 0x1.9fefa0904d6cap-13 28 0x1.8015dde373a22p+5 1 10105096 gamma gamma electron -392 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 61 0x1.a1abbfd094b64p-18 61 0x1.8b44361b6b924p+5 1 10105096 gamma gamma electron -394 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 62 0x1.839f9b08b415ep-18 55 0x1.15779f8c4460bp+5 1 10105096 gamma gamma electron -396 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 27 0x1.61c521f9d042ap-18 33 0x1.79a3be99b9ff8p+5 1 10105096 gamma gamma electron -400 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.48e6915a52754p-15 57 0x1.4b4bd8c589716p+5 1 10105096 gamma gamma electron -402 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 42 0x1.7f69610ca5a44p-18 32 0x1.86ad9a7352f36p+5 1 10105096 gamma gamma electron -404 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.71796634a47b6p-18 31 0x1.2a04e25a274f8p+5 1 10105096 gamma gamma electron -405 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 72 0x1.42331287056c2p-15 57 0x1.b3ade5c19dc5ep+5 1 10105096 gamma gamma electron -406 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 49 0x1.64aabdbf87292p-8 128 0x1.7cdbda2a8381bp+5 1 10105096 gamma gamma electron -409 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 61 0x1.08524fd5f9c29p-17 60 0x1.8504a7567f51ap+5 1 10105096 gamma gamma electron -412 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.154a38889327p-15 60 0x1.1e045fc23565p+5 1 10105096 gamma gamma electron -418 0x1.eb851eb851eb9p-5 0x1.49e994d9b203bp-7 6 0x1.50da9395840a1p-17 11 0x1.9e566495e6309p+5 1 10105096 gamma gamma electron -422 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 52 0x1.054676fa67792p-17 56 0x1.86e9e8acbc08p+5 1 10105096 gamma gamma electron -424 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 44 0x1.80ab617337ef5p-18 63 0x1.b16d2d5d67187p+5 1 10105096 gamma gamma electron -425 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 58 0x1.51479ff824b78p-18 49 0x1.6684166b53bccp+5 1 10105096 gamma gamma electron -432 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 55 0x1.62dd808d02136p-18 77 0x1.96b640ba8ae18p+5 1 10105096 gamma gamma electron -433 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 39 0x1.06c9204575dc8p-13 32 0x1.755267de5d98p+5 1 10105096 gamma gamma electron -440 0x1.eb851eb851eb9p-5 0x1.29c4221f492f8p-6 37 0x1.1e569fd5d8cp-16 20 0x1.02b408d7e22fdp+5 1 10105096 e- electron -441 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 31 0x1.25777401382cap-14 31 0x1.beede7b805126p+5 1 10105096 gamma gamma electron -442 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.21b134521ee31p-17 63 0x1.2994b015cc1c1p+5 1 10105096 gamma gamma electron -444 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 64 0x1.836538e5c6367p-18 59 0x1.a58a6d0fd4003p+5 1 10105096 gamma gamma electron -445 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 34 0x1.a9b47caf272d9p-16 23 0x1.01b0c3eaddcdap+5 1 10105096 gamma gamma electron -447 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 22 0x1.b69521f1c013ep-17 22 0x1.786f51a292f98p+4 1 10105096 gamma gamma electron -449 0x1.eb851eb851eb9p-5 0x1.96ca31e652f23p-6 30 0x1.ef7edb909a706p-14 27 0x1.8801607431534p+5 1 10105096 e- electron -452 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.0779abea8e974p-17 42 0x1.3ea766218417ap+5 1 10105096 gamma gamma electron -456 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.2576e9b035ae4p-17 50 0x1.7b13c18537238p+5 1 10105096 gamma gamma electron -460 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 45 0x1.db4846c52041dp-15 66 0x1.9308ad87c02c4p+5 1 10105096 gamma gamma electron -469 0x1.eb851eb851eb9p-5 0x1.672ead9274e21p-5 42 0x1.6ef6b2a826084p-16 29 0x1.2d3d6b4007feep+5 1 10105096 gamma gamma electron -470 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 46 0x1.41d333a1f5f4bp-13 52 0x1.56056a3d54a96p+5 1 10105096 gamma gamma electron -472 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 38 0x1.a2357886fc044p-18 63 0x1.8b945a2b7fb83p+5 1 10105096 gamma gamma electron -473 0x1.eb851eb851eb9p-5 0x1.686437b7fd31ep-5 53 0x1.19589a4a1fce5p-15 47 0x1.a47cc240f5463p+5 1 10105096 gamma gamma electron -476 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 69 0x1.5971e6f9698f4p-17 51 0x1.8380da7333a62p+5 1 10105096 gamma gamma electron -482 0x1.eb851eb851eb9p-5 0x1.a34ca0c282c72p-6 26 0x1.d391d49bfb584p-17 29 0x1.b7e3d60a39748p+5 1 10105096 gamma gamma electron -485 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 19 0x1.3918e57e6f272p-16 29 0x1.5c3e79cef605bp+5 1 10105096 gamma gamma electron -490 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 28 0x1.608eab89740b3p-18 33 0x1.3ef251723dd77p+5 1 10105096 gamma gamma electron -491 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.16218a7b7ad1ap-17 45 0x1.62467e7ceea48p+5 1 10105096 gamma gamma electron -493 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 56 0x1.a05607b4bb2e9p-16 56 0x1.51ae3457ec80dp+5 1 10105096 gamma gamma electron -495 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 28 0x1.8a57dcba14c26p-18 24 0x1.6f8466c7fafdcp+5 1 10105096 gamma gamma electron -499 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 24 0x1.47c9b651a3fcp-10 33 0x1.d7cd062d1a1fbp+5 1 10105096 gamma gamma electron -500 0x1.eb851eb851eb9p-5 0x1.50aea3ecd9b2ap-5 42 0x1.09e38b7681b16p-9 114 0x1.63e16b6b2cb3dp+5 1 10105096 gamma gamma electron -508 0x1.eb851eb851eb9p-5 0x1.a34ca0c282c6fp-6 18 0x1.293c2bae957b9p-16 23 0x1.a8fc4c3fc5c14p+5 1 10105096 gamma gamma electron -510 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 50 0x1.4ff914b42058bp-18 45 0x1.a075174753f41p+5 1 10105096 gamma gamma electron -512 0x1.eb851eb851eb9p-5 0x1.d199d47307844p-6 43 0x1.f032962bc5c7ap-13 25 0x1.4fc95811ad83dp+5 1 10105096 e- electron -513 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 44 0x1.6d417ce63bb68p-18 61 0x1.62e043276f2dep+5 1 10105096 gamma gamma electron -516 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.eec5b4164f673p-18 49 0x1.a5ef31b8a264cp+5 1 10105096 gamma gamma electron -520 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 44 0x1.5aa6afed97465p-18 55 0x1.533214f4e13cp+5 1 10105096 gamma gamma electron -525 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.e6aefb3ddc456p-18 20 0x1.b3853c678ead1p+4 1 10105096 gamma gamma electron -527 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebdp-5 53 0x1.9b55da8cbe5a3p-15 58 0x1.670a95e22a60ap+5 1 10105096 gamma gamma electron -528 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 58 0x1.b4f75f73232b1p-17 54 0x1.c6a57f020b0a6p+5 1 10105096 gamma gamma electron -531 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 83 0x1.bab8dd326464dp-14 50 0x1.5f524c95c2612p+5 1 10105096 gamma gamma electron -534 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 42 0x1.5ef0727404c9dp-10 106 0x1.57d8706c490a6p+5 1 10105096 gamma gamma electron -535 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.5f8d95fc154c2p-18 58 0x1.a28ef20371015p+5 1 10105096 gamma gamma electron -536 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 25 0x1.f4731ad2ed3afp-17 25 0x1.612f38bd88c88p+5 1 10105096 gamma gamma electron -537 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.6f25345ec78f6p-18 66 0x1.57eb7e3aa72cep+5 1 10105096 gamma gamma electron -543 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.d38cf5868837p-10 156 0x1.6d061229d1cafp+5 1 10105096 gamma gamma electron -546 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 66 0x1.b4296520b03cp-18 53 0x1.88d24be2b223cp+5 1 10105096 gamma gamma electron -547 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 51 0x1.a05fc9b221b94p-18 80 0x1.5b00698d3949dp+5 1 10105096 gamma gamma electron -548 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 39 0x1.7b3cb982c33bbp-17 52 0x1.881b4df8307f4p+5 1 10105096 gamma gamma electron -549 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 35 0x1.53c6e6e7bda62p-17 65 0x1.006cf00723c7ap+5 1 10105096 gamma gamma electron -564 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.71786315c2605p-17 43 0x1.512f402a5f6d4p+5 1 10105096 gamma gamma electron -569 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 16 0x1.21f75efcf4705p-17 25 0x1.d4f96b552dc75p+5 1 10105096 gamma gamma electron -574 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 56 0x1.5f6e9eee3b002p-18 72 0x1.5f65ddb528aeap+5 1 10105096 gamma gamma electron -576 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 46 0x1.91eac9ff5cddbp-10 144 0x1.82172c0b3f161p+5 1 10105096 gamma gamma electron -577 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 38 0x1.6c277e1d8b51ap-9 141 0x1.79f1e26d49f51p+5 1 10105096 gamma gamma electron -579 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 64 0x1.611c3cb896cfcp-18 52 0x1.ab7d5f8269c83p+5 1 10105096 gamma gamma electron -580 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.8b4d0fbaa812dp-18 57 0x1.ce2fd9754d23ep+5 1 10105096 gamma gamma electron -590 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 47 0x1.b2eb48434e897p-18 64 0x1.62d9cb191512bp+5 1 10105096 gamma gamma electron -591 0x1.eb851eb851eb9p-5 0x1.be85e22cb0625p-7 16 0x1.93c41e7f53d7cp-16 14 0x1.5d45add0305ecp+5 1 10105096 gamma gamma electron -593 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 21 0x1.cfcf97d17ac2p-18 30 0x1.6d2cda9aa4c39p+5 1 10105096 gamma gamma electron -594 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.676c6c6be8f16p-18 51 0x1.8650e053f7b3cp+5 1 10105096 gamma gamma electron -595 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 55 0x1.aafaf594b5bfep-17 72 0x1.64d85373d959ep+5 1 10105096 gamma gamma electron -602 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 44 0x1.056b9e4d46b29p-15 32 0x1.4d447539e5cd7p+5 1 10105096 gamma gamma electron -605 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.591e5e71bf3c2p-18 66 0x1.72bebf5ae194bp+5 1 10105096 gamma gamma electron -614 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 60 0x1.e8de54142221cp-18 67 0x1.89beb37d6a15fp+5 1 10105096 gamma gamma electron -615 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 62 0x1.d5366f13599ep-16 59 0x1.5e814cd6fd8d6p+5 1 10105096 gamma gamma electron -624 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 60 0x1.82ed763459dddp-18 47 0x1.44a9f7bb4e4ffp+5 1 10105096 gamma gamma electron -625 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e9193p-6 26 0x1.9b5d01d7744bdp-18 23 0x1.87f063ad3540dp+5 1 10105096 gamma gamma electron -630 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 27 0x1.a00e1a0e988aap-18 27 0x1.787ad33ead2c3p+5 1 10105096 gamma gamma electron -632 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 33 0x1.30de8bc4d8fa5p-17 26 0x1.509f2a11f9c1bp+5 1 10105096 gamma gamma electron -633 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 34 0x1.967429f3c315dp-16 27 0x1.f1a9744585352p+5 1 10105096 gamma gamma electron -634 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 53 0x1.03cd11f1325cfp-17 52 0x1.75061570b13eap+5 1 10105096 gamma gamma electron -636 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.19d4031f6618ap-16 57 0x1.ba2fbcd0a2815p+5 1 10105096 gamma gamma electron -644 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.09e3c02fbcb1ap-9 69 0x1.ca907d13c1484p+5 1 10105096 gamma gamma electron -647 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 74 0x1.12fcbfd7edb4p-9 61 0x1.6120539d9757ap+5 1 10105096 gamma gamma electron -651 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 69 0x1.6abf2ffb36267p-18 59 0x1.14d366f1bf4d5p+5 1 10105096 gamma gamma electron -652 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.85f2dd3bafbe5p-18 26 0x1.00c67aa486dep+5 1 10105096 gamma gamma electron -661 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.381367c880524p-17 33 0x1.68f21f65b4cb5p+5 1 10105096 gamma gamma electron -662 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.1dec7fe361cd5p-17 50 0x1.c4c23fe4b1d1ep+5 1 10105096 gamma gamma electron -663 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 56 0x1.1b74f88069091p-16 62 0x1.52ba3e7b116bdp+5 1 10105096 gamma gamma electron -670 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 45 0x1.5888f11932c42p-18 62 0x1.5f7c966426b8dp+5 1 10105096 gamma gamma electron -675 0x1.eb851eb851eb9p-5 0x1.7300e3e2b079dp-7 24 0x1.30d251922abdep-15 10 0x1.4e95b4657a928p+5 1 10105096 e- electron -681 0x1.eb851eb851eb9p-5 0x1.3a140aa35f17dp-5 48 0x1.769b34c52a55ap-14 42 0x1.90ba914276c3ap+5 1 10105096 gamma gamma electron -684 0x1.eb851eb851eb9p-5 0x1.b8928324e30e3p-7 19 0x1.3f20ce11e71bfp-12 10 0x1.64a6ecd9bfdd1p+5 1 10105096 gamma gamma electron -688 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 76 0x1.9e7d2e252aa5dp-18 50 0x1.7657bc05eefabp+5 1 10105096 gamma gamma electron -689 0x1.eb851eb851eb9p-5 0x1.8acf8a81225b6p-6 55 0x1.43deda741e591p-17 22 0x1.2df562e88b70fp+5 1 10105096 gamma gamma electron -693 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 36 0x1.10fd55a0f2bbfp-16 21 0x1.53169f93d2323p+5 1 10105096 gamma gamma electron -696 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 67 0x1.88cd3e63ec9a6p-17 53 0x1.19757ef64aff2p+5 1 10105096 gamma gamma electron -701 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 54 0x1.7f789179dfb42p-10 154 0x1.840117b88aa42p+5 1 10105096 gamma gamma electron -705 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 71 0x1.f58d295ac9454p-10 162 0x1.6351c4f157011p+5 1 10105096 gamma gamma electron -707 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dc9p-6 25 0x1.bc0a20b7c59d4p-18 30 0x1.1a31eea76ba9fp+6 1 10105096 gamma gamma electron -709 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 33 0x1.32911b038c77fp-16 24 0x1.927a0ddd3b387p+5 1 10105096 gamma gamma electron -711 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.978923413b978p-18 59 0x1.7f5422c6441d3p+5 1 10105096 gamma gamma electron -714 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 49 0x1.887baf8a4f914p-18 65 0x1.65cbe95c53dc9p+5 1 10105096 gamma gamma electron -716 0x1.eb851eb851eb9p-5 0x1.07484ee2b3ae6p-5 41 0x1.8e38e6b561828p-17 32 0x1.d3850200b5666p+5 1 10105096 gamma gamma electron -717 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 44 0x1.49aecad4eceaap-17 26 0x1.8092c88c55641p+5 1 10105096 gamma gamma electron -721 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 22 0x1.85d03197dc11fp-17 31 0x1.985cbcaade145p+5 1 10105096 gamma gamma electron -725 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 65 0x1.b1c6945e8d18p-18 53 0x1.72f1131829a19p+5 1 10105096 gamma gamma electron -727 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.6bc24301e4b54p-10 84 0x1.5bd845e33be64p+5 1 10105096 gamma gamma electron -729 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcfp-6 28 0x1.4e6f52bc63392p-16 24 0x1.474933afc03a8p+5 1 10105096 gamma gamma electron -733 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebdp-5 75 0x1.f04fdd4e1bd5ap-18 58 0x1.1751ee4b33b93p+5 1 10105096 gamma gamma electron -737 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 70 0x1.aa5cdd1323dbap-17 49 0x1.3e19a95b76987p+5 1 10105096 gamma gamma electron -742 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 72 0x1.5689f74ab3808p-18 55 0x1.b8419cf58511cp+5 1 10105096 gamma gamma electron -743 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 49 0x1.156d5f7e37afbp-9 87 0x1.a48d39bdfaecdp+5 1 10105096 gamma gamma electron -744 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 26 0x1.69a0e049c8ad3p-17 32 0x1.2064391c8f683p+5 1 10105096 gamma gamma electron -749 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.731054925e3eap-17 32 0x1.37fb37eed17adp+5 1 10105096 gamma gamma electron -751 0x1.eb851eb851eb9p-5 0x1.33e67d739fee3p-6 37 0x1.99477c63a5b65p-11 18 0x1.6f4622557285ep+5 1 10105096 gamma gamma electron -753 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 70 0x1.95239af567d58p-16 56 0x1.77df45d88cfbep+5 1 10105096 gamma gamma electron -755 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 61 0x1.9ba440efc4b48p-18 64 0x1.7d0e7790b64dep+5 1 10105096 gamma gamma electron -756 0x1.eb851eb851eb9p-5 0x1.76deef0e4034ap-5 45 0x1.ba2c7360b90ecp-18 44 0x1.5a1a6a74763d7p+5 1 10105096 gamma gamma electron -758 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebep-5 65 0x1.68afd6b38a9a9p-10 72 0x1.3430cd0046c3dp+5 1 10105096 gamma gamma electron -759 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 48 0x1.7c76c397c9788p-17 54 0x1.4679888c7b01p+5 1 10105096 gamma gamma electron -760 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 29 0x1.9dd9e15212551p-10 80 0x1.6ef35e0f5462fp+5 1 10105096 gamma gamma electron -762 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 67 0x1.67fafcf79506ap-18 48 0x1.1eb169f29ad3dp+5 1 10105096 gamma gamma electron -764 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 60 0x1.ff2b130d13e34p-18 58 0x1.6e7cd6551991ap+5 1 10105096 gamma gamma electron -765 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 66 0x1.0ed2c4ee2933cp-17 48 0x1.33db64887f3d1p+5 1 10105096 gamma gamma electron -767 0x1.eb851eb851eb9p-5 0x1.be85e22cb0623p-7 16 0x1.576307331d9b9p-12 10 0x1.aaa68af20ba0ep+5 1 10105096 gamma gamma electron -768 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.57033f179327p-15 58 0x1.cabdb8605fa61p+5 1 10105096 gamma gamma electron -771 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.7c205f0d3c295p-18 63 0x1.379a52ecf1783p+5 1 10105096 gamma gamma electron -772 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 32 0x1.d67e393aa0332p-13 20 0x1.19e105fb856a8p+5 1 10105096 gamma gamma electron -773 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 52 0x1.848b22e21a9f9p-18 73 0x1.6cd5d510d5b91p+5 1 10105096 gamma gamma electron -774 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 65 0x1.6a31260bb6ap-17 59 0x1.a58a084c7f3edp+5 1 10105096 gamma gamma electron -776 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.aeeb1416ee71cp-18 72 0x1.5055fd83cf3b6p+5 1 10105096 gamma gamma electron -777 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 64 0x1.2b6b2eab33555p-17 46 0x1.a8511a812a6dfp+4 1 10105096 gamma gamma electron -780 0x1.eb851eb851eb9p-5 0x1.a113e15e5449p-6 22 0x1.6d10456674124p-18 26 0x1.aed4e549e5208p+5 1 10105096 gamma gamma electron -781 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dd1p-6 29 0x1.93c2323d091c9p-15 31 0x1.cbc7fffae232fp+5 1 10105096 gamma gamma electron -791 0x1.eb851eb851eb9p-5 0x1.baaeb29a46e9fp-5 50 0x1.06de761948a63p-13 43 0x1.c48224cb68f9p+5 1 10105096 e- electron -794 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 57 0x1.7d8f13fa149b4p-18 75 0x1.9db1145fc864cp+5 1 10105096 gamma gamma electron -798 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 39 0x1.5ba725b9f5768p-15 23 0x1.9cc4109cbeae6p+5 1 10105096 gamma gamma electron -803 0x1.eb851eb851eb9p-5 0x1.9600b0a947ddbp-5 61 0x1.adadc443e3ef7p-17 43 0x1.5071d2e2a550bp+5 1 10105096 gamma gamma electron -804 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 54 0x1.51e1d2e9183bfp-18 72 0x1.af142060a0c37p+5 1 10105096 gamma gamma electron -806 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 17 0x1.52d95d019a0c8p-18 34 0x1.547fb2e728dc3p+5 1 10105096 gamma gamma electron -810 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 31 0x1.0879ef5a4256ap-15 30 0x1.548be209f218cp+5 1 10105096 gamma gamma electron -813 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 37 0x1.cce023e99618p-18 22 0x1.327f50ef70b1dp+5 1 10105096 gamma gamma electron -818 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 25 0x1.5e1bb5d6fc63p-18 22 0x1.4d0f9c2dbd123p+5 1 10105096 gamma gamma electron -820 0x1.eb851eb851eb9p-5 0x1.b00e5024db818p-6 20 0x1.b661ebe12e0f8p-18 24 0x1.27170508c7165p+5 1 10105096 gamma gamma electron -824 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 63 0x1.7af36cf581a86p-10 64 0x1.5da18ab0268edp+5 1 10105096 gamma gamma electron -826 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 58 0x1.a1a0ef570edebp-18 53 0x1.499eda8cd213fp+5 1 10105096 gamma gamma electron -834 0x1.eb851eb851eb9p-5 0x1.b00e5024db81bp-6 27 0x1.06665ec7fcddbp-17 23 0x1.6ae39f17faf13p+5 1 10105096 gamma gamma electron -836 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 54 0x1.054414b4e85ccp-16 58 0x1.cafc2d53cfffp+5 1 10105096 gamma gamma electron -838 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 35 0x1.d92b3068f2d69p-18 23 0x1.abca2be727b6ap+5 1 10105096 gamma gamma electron -845 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.675af76b87e3p-16 66 0x1.9acefd9cc24cep+5 1 10105096 gamma gamma electron -846 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.f7d669faf48d9p-18 25 0x1.b7ee3cd38c2e1p+5 1 10105096 gamma gamma electron -851 0x1.eb851eb851eb9p-5 0x1.bda7037fb7192p-5 51 0x1.6ae547da56c1ap-11 46 0x1.752cc92234d24p+5 1 10105096 gamma gamma electron -852 0x1.eb851eb851eb9p-5 0x1.0d774c67b79f3p-6 22 0x1.d7b6d103e7ee8p-15 19 0x1.3da00ce9efcedp+5 1 10105096 gamma gamma electron -853 0x1.eb851eb851eb9p-5 0x1.2977ab57002b6p-5 46 0x1.b84a138108c62p-17 32 0x1.d1cebc4f0aa42p+5 1 10105096 e- electron -854 0x1.eb851eb851eb9p-5 0x1.4c08ed0e8bb43p-6 20 0x1.fa5c378759eb3p-17 22 0x1.890e4af578032p+5 1 10105096 gamma gamma electron -858 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 68 0x1.91322eddce0a2p-17 56 0x1.340e57a5e3972p+5 1 10105096 gamma gamma electron -864 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.021d9ba96e22fp-9 182 0x1.6851af4d80f67p+5 1 10105096 gamma gamma electron -865 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 47 0x1.a931899a5f2e3p-17 49 0x1.6204ed8eeda52p+5 1 10105096 gamma gamma electron -869 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 39 0x1.1df5df3de8079p-14 23 0x1.fab1cd918532p+4 1 10105096 gamma gamma electron -873 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.d02f33e38f543p-17 43 0x1.3364ca2ee2a92p+5 1 10105096 gamma gamma electron -875 0x1.eb851eb851eb9p-5 0x1.b00e5024db81dp-6 21 0x1.74132d0445e14p-16 37 0x1.ab170f515516ep+5 1 10105096 gamma gamma electron -876 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 33 0x1.c22b39593daa4p-14 29 0x1.8500ed7481809p+5 1 10105096 gamma gamma electron -877 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.82620e546e0a3p-18 55 0x1.1f4a6c11c907p+5 1 10105096 gamma gamma electron -880 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 49 0x1.60320483cc692p-18 65 0x1.385ec4dece9a2p+5 1 10105096 gamma gamma electron -882 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 38 0x1.b2230dffed7efp-14 35 0x1.8340ce2bbef22p+5 1 10105096 gamma gamma electron -884 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.c8c3ad17cc7e4p-9 108 0x1.75d748b209748p+5 1 10105096 gamma gamma electron -888 0x1.eb851eb851eb9p-5 0x1.b00e5024db819p-6 29 0x1.2ae8db33828fap-16 22 0x1.3b678e88506c8p+5 1 10105096 gamma gamma electron -889 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 65 0x1.3d842643e1fa5p-17 73 0x1.7190a6867237fp+5 1 10105096 gamma gamma electron -892 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 38 0x1.584c4c5b7661dp-17 30 0x1.a9070ff771bacp+5 1 10105096 gamma gamma electron -894 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 46 0x1.762024beb9a53p-18 25 0x1.9dff5ddad5908p+5 1 10105096 gamma gamma electron -896 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 71 0x1.7021babbf695bp-10 150 0x1.789cfa393bd57p+5 1 10105096 gamma gamma electron -900 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 57 0x1.4eb0ee06e8f92p-10 65 0x1.513318ef0a557p+5 1 10105096 gamma gamma electron -901 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 69 0x1.84c1de9c6d41ap-16 40 0x1.6bae3ce186d88p+5 1 10105096 gamma gamma electron -905 0x1.eb851eb851eb9p-5 0x1.4c08ed0e8bb4p-6 20 0x1.05e02c7e2917ep-14 13 0x1.d8696d73462aap+4 1 10105096 gamma gamma electron -906 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 29 0x1.053e9a448ee22p-16 27 0x1.849a5ac20e505p+5 1 10105096 gamma gamma electron -914 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 54 0x1.6e4c5cb9063b3p-18 52 0x1.adb736ab8e6b1p+5 1 10105096 gamma gamma electron -916 0x1.eb851eb851eb9p-5 0x1.b116228134481p-6 24 0x1.3d1b109a65ad8p-16 23 0x1.ceba7fc48a801p+4 1 10105096 gamma gamma electron -924 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 63 0x1.c342157c09c3fp-18 54 0x1.b3acf9443a438p+5 1 10105096 gamma gamma electron -925 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 49 0x1.889492c49bbe9p-10 66 0x1.7276e8a813c9ep+5 1 10105096 gamma gamma electron -936 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 65 0x1.5528b9f679c9ep-18 64 0x1.35bf18780e202p+5 1 10105096 gamma gamma electron -939 0x1.eb851eb851eb9p-5 0x1.b00e5024db81ap-6 31 0x1.e2d9cfe72c0ecp-18 34 0x1.b3b1bfca2a1c8p+5 1 10105096 gamma gamma electron -940 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dc9p-6 22 0x1.f7a59da339d71p-18 32 0x1.b6e4fc662956dp+5 1 10105096 gamma gamma electron -943 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.50e0aceec9001p-16 38 0x1.a47565c68602bp+5 1 10105096 gamma gamma electron -945 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 73 0x1.0860d33fb8b64p-9 61 0x1.681fb06e822cdp+5 1 10105096 gamma gamma electron -947 0x1.eb851eb851eb9p-5 0x1.595ae3212765cp-5 55 0x1.fe1a8b6156926p-14 53 0x1.43d31e8d617c4p+5 1 10105096 gamma gamma electron -948 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 56 0x1.2fd9ebc147137p-17 59 0x1.74490a084198ap+5 1 10105096 gamma gamma electron -951 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 40 0x1.96c09e2b6cd47p-15 28 0x1.3939893e1b2dep+5 1 10105096 gamma gamma electron -956 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 28 0x1.70369d5267893p-14 22 0x1.57478fb3b4986p+5 1 10105096 gamma gamma electron -960 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 25 0x1.b8fd790925441p-16 19 0x1.2a568e538d959p+5 1 10105096 gamma gamma electron -964 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 65 0x1.08ee424ff51a8p-16 52 0x1.5ffc36802d3f9p+5 1 10105096 gamma gamma electron -971 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.2276defb17185p-9 136 0x1.53f3e2ecc6a9bp+5 1 10105096 gamma gamma electron -975 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 28 0x1.1a0073a623a0ap-14 29 0x1.049260e548495p+5 1 10105096 gamma gamma electron -977 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 28 0x1.911facac923ap-17 26 0x1.5fe7f14078cddp+5 1 10105096 gamma gamma electron -978 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 40 0x1.1d83682805207p-14 27 0x1.66e991048f482p+5 1 10105096 gamma gamma electron -987 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.d55369d54e66ep-18 70 0x1.454f5d55a194p+5 1 10105096 gamma gamma electron -988 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 57 0x1.6d42b3c3dea26p-9 55 0x1.564cd822422b2p+5 1 10105096 gamma gamma electron -989 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 35 0x1.7b840858fcfe6p-18 34 0x1.6bf3ca6711d0ap+5 1 10105096 gamma gamma electron -990 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 67 0x1.5416b07a4e43fp-18 79 0x1.93a107e036677p+5 1 10105096 gamma gamma electron -997 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.95b95290f917bp-18 55 0x1.6bb87716aac0fp+5 1 10105096 gamma gamma electron -998 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 31 0x1.4d3443cade923p-17 23 0x1.84b8ff357913p+5 1 10105096 gamma gamma electron +3 0.0600 0.0600 66 0x1.4f6fc8c708fa8p-15 54 0x1.382377b3d35bep+5 1 32192904 gamma gamma electron +5 0x1.eb851eb851eb9p-5 0x1.b116228134481p-6 24 0x1.30809e8074632p-15 22 0x1.384d91212ec7ap+5 1 32192904 gamma gamma electron +9 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 20 0x1.d734ca6f87d53p-14 28 0x1.d339b12d58062p+5 1 32192904 gamma gamma electron +14 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 59 0x1.6f517820463f2p-18 52 0x1.c93301b20aeb2p+5 1 32192904 gamma gamma electron +22 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.2b1cb06e9aef7p-10 57 0x1.7e73e500da077p+5 1 32192904 gamma gamma electron +28 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 27 0x1.b6dd046de66ebp-17 20 0x1.975e0d6280108p+5 1 32192904 gamma gamma electron +30 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.e223592ae219fp-18 47 0x1.541dc3e1ca937p+5 1 32192904 gamma gamma electron +35 0x1.eb851eb851eb9p-5 0x1.430bee4acbd65p-5 44 0x1.31b96ae605e99p-17 22 0x1.a23997fb7ecf1p+5 1 32192904 gamma gamma electron +37 0x1.eb851eb851eb9p-5 0x1.04e09015551aap-7 10 0x1.7a415f64c52cap-10 142 0x1.2c7defa5f2f7ep+5 1 32192904 gamma gamma electron +38 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.9f5f2b8c1b6a5p-10 63 0x1.7830090ea0548p+5 1 32192904 gamma gamma electron +39 0x1.eb851eb851eb9p-5 0x1.26c7554ecd418p-6 24 0x1.933d729fd3a4bp-16 19 0x1.6d9d1421c31c7p+5 1 32192904 gamma gamma electron +40 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 51 0x1.6f6c333c49d82p-18 59 0x1.5c624f30c7ddbp+5 1 32192904 gamma gamma electron +41 0x1.eb851eb851eb9p-5 0x1.76213bad5f9a4p-6 32 0x1.358ac3e8d8199p-13 22 0x1.f1c48b11c1639p+5 1 32192904 gamma gamma electron +45 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 49 0x1.6136c8fd827bcp-17 49 0x1.faa52ae8f918p+4 1 32192904 gamma gamma electron +46 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 57 0x1.0d11644ae2262p-17 52 0x1.7aa68cc12d7ddp+5 1 32192904 gamma gamma electron +56 0x1.eb851eb851eb9p-5 0x1.70043d2e74e38p-5 47 0x1.391aa76ba8dc8p-12 46 0x1.4c8a877fc026p+5 1 32192904 gamma gamma electron +59 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.c30e4fcba7009p-18 53 0x1.65ab6929030d3p+5 1 32192904 gamma gamma electron +62 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 13 0x1.a740ab8df6be4p-17 30 0x1.4f2328c2245cbp+5 1 32192904 gamma gamma electron +63 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 45 0x1.c14139b72af5dp-18 71 0x1.7a205e28924c8p+5 1 32192904 gamma gamma electron +64 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dd1p-6 33 0x1.ef90443cc0945p-17 25 0x1.6b4013dcf7776p+5 1 32192904 gamma gamma electron +66 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 43 0x1.b1167ff3043afp-18 90 0x1.71b051cff45b3p+5 1 32192904 gamma gamma electron +68 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 45 0x1.6ddd34bacdbaep-10 176 0x1.5ade2df69199ep+5 1 32192904 gamma gamma electron +69 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 58 0x1.1d9ef2d3effafp-17 54 0x1.2649fb40614c9p+5 1 32192904 gamma gamma electron +72 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 64 0x1.7660d4400a31ep-17 60 0x1.a1d13355242ebp+5 1 32192904 gamma gamma electron +74 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 65 0x1.9f6a202ac3fc3p-17 54 0x1.9477f1a640e2dp+5 1 32192904 gamma gamma electron +79 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 39 0x1.281a42ec441b1p-17 50 0x1.4f0e5f2347414p+5 1 32192904 gamma gamma electron +84 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.f209c584dedf7p-18 78 0x1.752f4e13563c2p+5 1 32192904 gamma gamma electron +85 0x1.eb851eb851eb9p-5 0x1.24da1e8343199p-6 17 0x1.f6384b9a04819p-18 18 0x1.6b953f0c3b735p+5 1 32192904 gamma gamma electron +87 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 32 0x1.10dd271fa9092p-17 37 0x1.a4bb7e56e2ee8p+5 1 32192904 gamma gamma electron +91 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 57 0x1.6b5c95595d762p-8 137 0x1.339ad044e7941p+5 1 32192904 gamma gamma electron +92 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 54 0x1.308afc89610e2p-15 61 0x1.a8727e6d3c881p+5 1 32192904 gamma gamma electron +93 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 58 0x1.206eee994eb57p-17 65 0x1.84c5d2fadd756p+5 1 32192904 gamma gamma electron +100 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 30 0x1.8d4fa61b3286cp-18 36 0x1.b73c177ae80f8p+5 1 32192904 gamma gamma electron +103 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 67 0x1.d83ff976b24a8p-17 45 0x1.c35800017baefp+5 1 32192904 gamma gamma electron +104 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 55 0x1.8753d7ebcdc13p-18 58 0x1.7778b1446794ep+5 1 32192904 gamma gamma electron +105 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 26 0x1.64f5b44c30d31p-16 25 0x1.50cc052da9fecp+5 1 32192904 gamma gamma electron +110 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.d6a1d9fec718bp-17 72 0x1.4a36d392169aep+5 1 32192904 gamma gamma electron +113 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 58 0x1.e6113cd4beeaep-18 61 0x1.393175f57858ap+5 1 32192904 gamma gamma electron +114 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 56 0x1.759f621d78334p-18 66 0x1.7b1c32ff81344p+5 1 32192904 gamma gamma electron +117 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 80 0x1.bf9a08ccf920bp-16 62 0x1.73545cf42d859p+5 1 32192904 gamma gamma electron +118 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 62 0x1.4777c0df7d3ddp-17 64 0x1.5e8a32bf79afbp+5 1 32192904 gamma gamma electron +119 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 62 0x1.3f590b0859761p-17 67 0x1.caa1fa2774bbep+5 1 32192904 gamma gamma electron +120 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 29 0x1.bc3feb4380406p-16 27 0x1.15de3354d6aabp+6 1 32192904 gamma gamma electron +121 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 57 0x1.74efb85768fa9p-18 43 0x1.52e6850a723ccp+5 1 32192904 gamma gamma electron +127 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 61 0x1.7280ad275d63bp-18 55 0x1.6a45bb2a846eep+5 1 32192904 gamma gamma electron +130 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 20 0x1.7bdc76d62ef39p-18 23 0x1.0a9ffb9d151ap+6 1 32192904 gamma gamma electron +131 0x1.eb851eb851eb9p-5 0x1.96973d49aa813p-7 12 0x1.2249f87f71516p-13 13 0x1.3a7cf6743ade9p+5 1 32192904 gamma gamma electron +137 0x1.eb851eb851eb9p-5 0x1.b11622813448p-6 30 0x1.c3eb0e1b14e7p-18 19 0x1.4e97266dcb701p+5 1 32192904 gamma gamma electron +140 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 64 0x1.b048d751382f6p-17 66 0x1.3c99fdee57062p+5 1 32192904 gamma gamma electron +141 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 53 0x1.6b7c0f64d1071p-18 72 0x1.59a50809c704fp+5 1 32192904 gamma gamma electron +142 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.600173cac3494p-16 67 0x1.45278d2bdf3f4p+5 1 32192904 gamma gamma electron +143 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 58 0x1.29254a9d03d43p-10 66 0x1.4a98939231021p+5 1 32192904 gamma gamma electron +145 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 49 0x1.993207a605485p-18 44 0x1.bc2f7468d4ca9p+5 1 32192904 gamma gamma electron +146 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 33 0x1.4784d715fe81fp-16 29 0x1.f77fbe9e87fe5p+5 1 32192904 gamma gamma electron +147 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 70 0x1.3633c6e26c8b5p-17 68 0x1.93cf93ccec301p+5 1 32192904 gamma gamma electron +149 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 55 0x1.aebe8055d04bfp-18 51 0x1.5a5476f7847f8p+5 1 32192904 gamma gamma electron +150 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 24 0x1.28a12e30040e2p-9 78 0x1.8f4b1d91f76a4p+5 1 32192904 gamma gamma electron +155 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 84 0x1.e8077ffd97e72p-17 38 0x1.762a58fe68d64p+5 1 32192904 gamma gamma electron +157 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 73 0x1.6b8da19688ab6p-16 53 0x1.c81bbb68a7d5ap+5 1 32192904 gamma gamma electron +158 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.21cfc7ab99e41p-17 74 0x1.5742994fefe32p+5 1 32192904 gamma gamma electron +160 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 20 0x1.d0e4d7140240ep-16 20 0x1.8f20d20efe804p+5 1 32192904 gamma gamma electron +163 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.176a9c2dfdc12p-17 51 0x1.6dcd493eab83fp+5 1 32192904 gamma gamma electron +165 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.78332bd35a5eep-17 74 0x1.3090b0f05f5d2p+5 1 32192904 gamma gamma electron +166 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.216878f586455p-8 67 0x1.8a2bc08bbb5bcp+5 1 32192904 gamma gamma electron +167 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 32 0x1.1ac7258623df8p-14 17 0x1.cb454c1b37fd9p+5 1 32192904 gamma gamma electron +168 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 36 0x1.2f15518948302p-16 23 0x1.6ccdc9086fc3dp+5 1 32192904 gamma gamma electron +172 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 53 0x1.3babc728b0914p-17 54 0x1.544fb1ab5edb1p+5 1 32192904 gamma gamma electron +173 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 69 0x1.81b0c4b44d976p-18 72 0x1.3acf5c6abfa2bp+5 1 32192904 gamma gamma electron +177 0x1.eb851eb851eb9p-5 0x1.d697c750f7292p-7 41 0x1.1956578dc32e8p-14 14 0x1.caf862e5affc7p+5 1 32192904 e- electron +178 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 62 0x1.10de584dd8643p-17 54 0x1.a430f7c5194ccp+5 1 32192904 gamma gamma electron +180 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 30 0x1.2559a354f302bp-16 30 0x1.4a469bf8698d9p+5 1 32192904 gamma gamma electron +185 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 87 0x1.a8a706469a48ap-13 55 0x1.8da62f68d69b4p+5 1 32192904 gamma gamma electron +187 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.14db8cd3fb143p-16 52 0x1.605e0cfa094fbp+5 1 32192904 gamma gamma electron +188 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.989fe1a69d8c7p-17 60 0x1.5772a35607f4p+5 1 32192904 gamma gamma electron +190 0x1.eb851eb851eb9p-5 0x1.47a8a09d99d97p-5 47 0x1.11e993153eec5p-17 29 0x1.4986f34272f7p+5 1 32192904 gamma gamma electron +191 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 44 0x1.e9fb73c5e604bp-18 44 0x1.28ed143d46f81p+5 1 32192904 gamma gamma electron +193 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 63 0x1.269b10df8aca8p-10 83 0x1.5615e62c6766cp+5 1 32192904 gamma gamma electron +194 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 46 0x1.6bdc492d20224p-17 57 0x1.290743872c0efp+5 1 32192904 gamma gamma electron +200 0x1.eb851eb851eb9p-5 0x1.b8928324e30e7p-7 16 0x1.6212fd8ceaa26p-13 14 0x1.6152cdaca65ap+5 1 32192904 gamma gamma electron +201 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 62 0x1.6378b69c1d103p-15 45 0x1.929c268da9c49p+5 1 32192904 gamma gamma electron +202 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.767460188e5c5p-17 48 0x1.38cd40c90c595p+5 1 32192904 gamma gamma electron +207 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 57 0x1.dde25219d77d2p-16 76 0x1.66fdd651e833cp+5 1 32192904 gamma gamma electron +209 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 61 0x1.782f71f3e159cp-18 59 0x1.6a07f828b43a3p+5 1 32192904 gamma gamma electron +213 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 24 0x1.9a55c18d54596p-18 32 0x1.87a23be0f001dp+5 1 32192904 gamma gamma electron +215 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 64 0x1.a3cfccc372cadp-18 40 0x1.7e919578e5672p+5 1 32192904 gamma gamma electron +219 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 71 0x1.73034606425f8p-9 59 0x1.75ed7b2bec846p+5 1 32192904 gamma gamma electron +221 0x1.eb851eb851eb9p-5 0x1.e39143d559ac8p-5 86 0x1.f1585774f741cp-17 60 0x1.522c5f7f87ca1p+5 1 32192904 gamma gamma electron +223 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.c47e65f9bd311p-18 55 0x1.70223357d5a47p+5 1 32192904 gamma gamma electron +227 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.c8ff156f56d58p-18 51 0x1.4c9095739cc29p+5 1 32192904 gamma gamma electron +228 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 66 0x1.752e8e7e2dcdep-18 45 0x1.56973c79428b2p+5 1 32192904 gamma gamma electron +229 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 62 0x1.86c514c701da5p-18 42 0x1.6d3b63fa4a2b3p+5 1 32192904 gamma gamma electron +231 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 20 0x1.580e46916bcdep-18 14 0x1.a11eccc9f8eabp+5 1 32192904 gamma gamma electron +232 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 53 0x1.85040d518d217p-16 73 0x1.7c96c3effa70dp+5 1 32192904 gamma gamma electron +234 0x1.eb851eb851eb9p-5 0x1.3fb5576541a33p-5 35 0x1.e2c7d7fb22da1p-17 27 0x1.1ec6ccd84b101p+5 1 32192904 gamma gamma electron +238 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 59 0x1.74412cfa225ecp-18 78 0x1.55b1a21274ef4p+5 1 32192904 gamma gamma electron +239 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 24 0x1.34ac09d70f518p-17 35 0x1.6b8a80ae08897p+5 1 32192904 gamma gamma electron +240 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 68 0x1.fec438aa91075p-16 71 0x1.5679d024f86b5p+5 1 32192904 gamma gamma electron +243 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 44 0x1.a7ab5b18e7df5p-16 56 0x1.8c17c15298183p+5 1 32192904 gamma gamma electron +244 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 57 0x1.74ff6dda25a38p-10 80 0x1.4a64e9e95526cp+5 1 32192904 gamma gamma electron +246 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 63 0x1.65990f9e6f56fp-16 61 0x1.9c481c715d49cp+5 1 32192904 gamma gamma electron +248 0x1.eb851eb851eb9p-5 0x1.b9f89da59fc2p-10 2 0x1.7a9334c03d7ep-18 4 0x1.0e34749060aecp+5 1 32192904 gamma gamma electron +253 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.9db1cd7ab5dc4p-15 53 0x1.b6a1ba424168cp+5 1 32192904 gamma gamma electron +255 0x1.eb851eb851eb9p-5 0x1.be85e22cb0623p-7 7 0x1.489eb481779acp-14 13 0x1.21333e76f1004p+6 1 32192904 gamma gamma electron +257 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 50 0x1.cf9782139b664p-18 58 0x1.5414071cfe461p+5 1 32192904 gamma gamma electron +258 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 28 0x1.c1ae4469bd3f6p-18 32 0x1.7b91c1dbf56bcp+5 1 32192904 gamma gamma electron +263 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.a58d64e798224p-10 144 0x1.846a416238439p+5 1 32192904 gamma gamma electron +265 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.685b3d65949f2p-18 65 0x1.7e41f87292123p+5 1 32192904 gamma gamma electron +268 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 53 0x1.61abd632b7617p-18 66 0x1.7813381c8bc69p+5 1 32192904 gamma gamma electron +271 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 37 0x1.ebc382d655d2dp-18 28 0x1.65fc61d4bd337p+5 1 32192904 gamma gamma electron +272 0x1.eb851eb851eb9p-5 0x1.b00e5024db81fp-6 23 0x1.4d643df5a0e95p-17 23 0x1.25cbc8833a6d2p+5 1 32192904 gamma gamma electron +273 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 36 0x1.7bd3ea0b4f8bap-18 25 0x1.09b9b9ae24915p+6 1 32192904 gamma gamma electron +275 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcep-6 25 0x1.218d9a7c16f58p-16 36 0x1.5e9b3b4c99c0bp+5 1 32192904 gamma gamma electron +280 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 66 0x1.0519bd975719dp-9 56 0x1.8cbe03aa9adb7p+5 1 32192904 gamma gamma electron +284 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 52 0x1.a918976875865p-18 79 0x1.2ba1aa3725a33p+5 1 32192904 gamma gamma electron +287 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 84 0x1.70e9873f629aap-14 47 0x1.7d646e3538837p+5 1 32192904 gamma gamma electron +291 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 64 0x1.98d552a0e3c64p-18 71 0x1.73b42532b5389p+5 1 32192904 gamma gamma electron +292 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.2867340876f87p-16 63 0x1.6cc4b9f894884p+5 1 32192904 gamma gamma electron +294 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 30 0x1.12de1a8c37dc1p-14 28 0x1.b68ff52e6a5d7p+5 1 32192904 gamma gamma electron +307 0x1.eb851eb851eb9p-5 0x1.9707ebddbd542p-6 51 0x1.0eeb3dcf787ap-17 29 0x1.83d5b70711a29p+5 1 32192904 gamma gamma electron +310 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 32 0x1.763b5a4aacd72p-13 25 0x1.4154c7358f11dp+5 1 32192904 gamma gamma electron +313 0x1.eb851eb851eb9p-5 0x1.b00e5024db81bp-6 24 0x1.d05392d74796fp-18 29 0x1.552e60a19edbp+5 1 32192904 gamma gamma electron +317 0x1.eb851eb851eb9p-5 0x1.1b8fa87f0faa9p-6 22 0x1.fd6c52134351bp-18 18 0x1.50df9784baf94p+5 1 32192904 gamma gamma electron +319 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 29 0x1.5765f78b1eff3p-18 29 0x1.54c54808ac68cp+5 1 32192904 gamma gamma electron +320 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 49 0x1.9cd33c385e69ap-18 60 0x1.6da50d94dec22p+5 1 32192904 gamma gamma electron +327 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 53 0x1.9f598dc173b05p-18 62 0x1.53ba4375ca1b5p+5 1 32192904 gamma gamma electron +329 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 42 0x1.ea525280765cdp-18 49 0x1.659e5164de99bp+5 1 32192904 gamma gamma electron +333 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 61 0x1.1870c876992f6p-17 46 0x1.0c43c0c92aa47p+5 1 32192904 gamma gamma electron +338 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 38 0x1.3a1c804acb768p-17 30 0x1.fa8ccad97f842p+4 1 32192904 gamma gamma electron +349 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 62 0x1.0006189fae3fep-16 41 0x1.abb66e5e59f59p+5 1 32192904 gamma gamma electron +351 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.c2159a37aa34dp-18 50 0x1.91414e165eb3cp+5 1 32192904 gamma gamma electron +353 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 55 0x1.6c171c5233edp-18 58 0x1.5a930e729b1a6p+5 1 32192904 gamma gamma electron +356 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.76115c21c6432p-18 66 0x1.9da15545c9aaap+5 1 32192904 gamma gamma electron +357 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.5855749eb73d8p-18 98 0x1.2c327a46dbdebp+5 1 32192904 gamma gamma electron +359 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 24 0x1.0adb23dcaa55cp-15 19 0x1.231b6ba63f437p+5 1 32192904 gamma gamma electron +362 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 83 0x1.f058762d6bee5p-18 56 0x1.ebb73a91d37fp+5 1 32192904 gamma gamma electron +364 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 57 0x1.3b9f0f9505781p-17 43 0x1.3a57116809b63p+5 1 32192904 gamma gamma electron +365 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 26 0x1.f10b6513bbc86p-18 31 0x1.5c32c1f5276b7p+5 1 32192904 gamma gamma electron +366 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 34 0x1.ae97682422f11p-18 22 0x1.63c2c9a50ca4fp+5 1 32192904 gamma gamma electron +371 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e9192fp-6 42 0x1.cd92313283cd4p-18 29 0x1.91bfac8fdb464p+5 1 32192904 gamma gamma electron +372 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 74 0x1.29127e2ffe247p-17 63 0x1.255df3ec36da5p+5 1 32192904 gamma gamma electron +373 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.83506b0bfdb8cp-18 49 0x1.b02ff0f43f029p+5 1 32192904 gamma gamma electron +374 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 37 0x1.6dc8e9d628685p-18 37 0x1.8bfe5a75361b4p+5 1 32192904 gamma gamma electron +375 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 51 0x1.a82230858bf1ap-18 77 0x1.61be32723fcbfp+5 1 32192904 gamma gamma electron +377 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 61 0x1.3d4a908077133p-16 77 0x1.c9f271b733e8cp+5 1 32192904 gamma gamma electron +378 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 21 0x1.cd36f102db6cp-18 20 0x1.4493b4f5512a7p+5 1 32192904 gamma gamma electron +380 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 73 0x1.94ef1334469dep-18 63 0x1.5609bf2103698p+5 1 32192904 gamma gamma electron +384 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 51 0x1.a97fd9a8d72e5p-18 53 0x1.6c1d3225445fdp+5 1 32192904 gamma gamma electron +385 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 48 0x1.93111bd03dab6p-17 57 0x1.450b239063797p+5 1 32192904 gamma gamma electron +388 0x1.eb851eb851eb9p-5 0x1.ae2659db83a0cp-6 42 0x1.9fefa0904d6cap-13 28 0x1.8015dde373a22p+5 1 32192904 gamma gamma electron +392 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 61 0x1.a1abbfd094b64p-18 61 0x1.8b44361b6b924p+5 1 32192904 gamma gamma electron +394 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 62 0x1.839f9b08b415ep-18 55 0x1.15779f8c4460bp+5 1 32192904 gamma gamma electron +396 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 27 0x1.61c521f9d042ap-18 33 0x1.79a3be99b9ff8p+5 1 32192904 gamma gamma electron +400 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.48e6915a52754p-15 57 0x1.4b4bd8c589716p+5 1 32192904 gamma gamma electron +402 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 42 0x1.7f69610ca5a44p-18 32 0x1.86ad9a7352f36p+5 1 32192904 gamma gamma electron +404 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.71796634a47b6p-18 31 0x1.2a04e25a274f8p+5 1 32192904 gamma gamma electron +405 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 72 0x1.42331287056c2p-15 57 0x1.b3ade5c19dc5ep+5 1 32192904 gamma gamma electron +406 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 49 0x1.64aabdbf87292p-8 128 0x1.7cdbda2a8381bp+5 1 32192904 gamma gamma electron +409 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 61 0x1.08524fd5f9c29p-17 60 0x1.8504a7567f51ap+5 1 32192904 gamma gamma electron +412 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.154a38889327p-15 60 0x1.1e045fc23565p+5 1 32192904 gamma gamma electron +418 0x1.eb851eb851eb9p-5 0x1.49e994d9b203bp-7 6 0x1.50da9395840a1p-17 11 0x1.9e566495e6309p+5 1 32192904 gamma gamma electron +422 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 52 0x1.054676fa67792p-17 56 0x1.86e9e8acbc08p+5 1 32192904 gamma gamma electron +424 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 44 0x1.80ab617337ef5p-18 63 0x1.b16d2d5d67187p+5 1 32192904 gamma gamma electron +425 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 58 0x1.51479ff824b78p-18 49 0x1.6684166b53bccp+5 1 32192904 gamma gamma electron +432 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 55 0x1.62dd808d02136p-18 77 0x1.96b640ba8ae18p+5 1 32192904 gamma gamma electron +433 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 39 0x1.06c9204575dc8p-13 32 0x1.755267de5d98p+5 1 32192904 gamma gamma electron +440 0x1.eb851eb851eb9p-5 0x1.29c4221f492f8p-6 37 0x1.1e569fd5d8cp-16 20 0x1.02b408d7e22fdp+5 1 32192904 e- electron +441 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 31 0x1.25777401382cap-14 31 0x1.beede7b805126p+5 1 32192904 gamma gamma electron +442 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.21b134521ee31p-17 63 0x1.2994b015cc1c1p+5 1 32192904 gamma gamma electron +444 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 64 0x1.836538e5c6367p-18 59 0x1.a58a6d0fd4003p+5 1 32192904 gamma gamma electron +445 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 34 0x1.a9b47caf272d9p-16 23 0x1.01b0c3eaddcdap+5 1 32192904 gamma gamma electron +447 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 22 0x1.b69521f1c013ep-17 22 0x1.786f51a292f98p+4 1 32192904 gamma gamma electron +449 0x1.eb851eb851eb9p-5 0x1.96ca31e652f23p-6 30 0x1.ef7edb909a706p-14 27 0x1.8801607431534p+5 1 32192904 e- electron +452 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.0779abea8e974p-17 42 0x1.3ea766218417ap+5 1 32192904 gamma gamma electron +456 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 49 0x1.2576e9b035ae4p-17 50 0x1.7b13c18537238p+5 1 32192904 gamma gamma electron +460 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 45 0x1.db4846c52041dp-15 66 0x1.9308ad87c02c4p+5 1 32192904 gamma gamma electron +469 0x1.eb851eb851eb9p-5 0x1.672ead9274e21p-5 42 0x1.6ef6b2a826084p-16 29 0x1.2d3d6b4007feep+5 1 32192904 gamma gamma electron +470 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 46 0x1.41d333a1f5f4bp-13 52 0x1.56056a3d54a96p+5 1 32192904 gamma gamma electron +472 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 38 0x1.a2357886fc044p-18 63 0x1.8b945a2b7fb83p+5 1 32192904 gamma gamma electron +473 0x1.eb851eb851eb9p-5 0x1.686437b7fd31ep-5 53 0x1.19589a4a1fce5p-15 47 0x1.a47cc240f5463p+5 1 32192904 gamma gamma electron +476 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 69 0x1.5971e6f9698f4p-17 51 0x1.8380da7333a62p+5 1 32192904 gamma gamma electron +482 0x1.eb851eb851eb9p-5 0x1.a34ca0c282c72p-6 26 0x1.d391d49bfb584p-17 29 0x1.b7e3d60a39748p+5 1 32192904 gamma gamma electron +485 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 19 0x1.3918e57e6f272p-16 29 0x1.5c3e79cef605bp+5 1 32192904 gamma gamma electron +490 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 28 0x1.608eab89740b3p-18 33 0x1.3ef251723dd77p+5 1 32192904 gamma gamma electron +491 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 54 0x1.16218a7b7ad1ap-17 45 0x1.62467e7ceea48p+5 1 32192904 gamma gamma electron +493 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 56 0x1.a05607b4bb2e9p-16 56 0x1.51ae3457ec80dp+5 1 32192904 gamma gamma electron +495 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 28 0x1.8a57dcba14c26p-18 24 0x1.6f8466c7fafdcp+5 1 32192904 gamma gamma electron +499 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 24 0x1.47c9b651a3fcp-10 33 0x1.d7cd062d1a1fbp+5 1 32192904 gamma gamma electron +500 0x1.eb851eb851eb9p-5 0x1.50aea3ecd9b2ap-5 42 0x1.09e38b7681b16p-9 114 0x1.63e16b6b2cb3dp+5 1 32192904 gamma gamma electron +508 0x1.eb851eb851eb9p-5 0x1.a34ca0c282c6fp-6 18 0x1.293c2bae957b9p-16 23 0x1.a8fc4c3fc5c14p+5 1 32192904 gamma gamma electron +510 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 50 0x1.4ff914b42058bp-18 45 0x1.a075174753f41p+5 1 32192904 gamma gamma electron +512 0x1.eb851eb851eb9p-5 0x1.d199d47307844p-6 43 0x1.f032962bc5c7ap-13 25 0x1.4fc95811ad83dp+5 1 32192904 e- electron +513 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 44 0x1.6d417ce63bb68p-18 61 0x1.62e043276f2dep+5 1 32192904 gamma gamma electron +516 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.eec5b4164f673p-18 49 0x1.a5ef31b8a264cp+5 1 32192904 gamma gamma electron +520 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 44 0x1.5aa6afed97465p-18 55 0x1.533214f4e13cp+5 1 32192904 gamma gamma electron +525 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.e6aefb3ddc456p-18 20 0x1.b3853c678ead1p+4 1 32192904 gamma gamma electron +527 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebdp-5 53 0x1.9b55da8cbe5a3p-15 58 0x1.670a95e22a60ap+5 1 32192904 gamma gamma electron +528 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 58 0x1.b4f75f73232b1p-17 54 0x1.c6a57f020b0a6p+5 1 32192904 gamma gamma electron +531 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 83 0x1.bab8dd326464dp-14 50 0x1.5f524c95c2612p+5 1 32192904 gamma gamma electron +534 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 42 0x1.5ef0727404c9dp-10 106 0x1.57d8706c490a6p+5 1 32192904 gamma gamma electron +535 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.5f8d95fc154c2p-18 58 0x1.a28ef20371015p+5 1 32192904 gamma gamma electron +536 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 25 0x1.f4731ad2ed3afp-17 25 0x1.612f38bd88c88p+5 1 32192904 gamma gamma electron +537 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.6f25345ec78f6p-18 66 0x1.57eb7e3aa72cep+5 1 32192904 gamma gamma electron +543 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 51 0x1.d38cf5868837p-10 156 0x1.6d061229d1cafp+5 1 32192904 gamma gamma electron +546 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 66 0x1.b4296520b03cp-18 53 0x1.88d24be2b223cp+5 1 32192904 gamma gamma electron +547 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 51 0x1.a05fc9b221b94p-18 80 0x1.5b00698d3949dp+5 1 32192904 gamma gamma electron +548 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 39 0x1.7b3cb982c33bbp-17 52 0x1.881b4df8307f4p+5 1 32192904 gamma gamma electron +549 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 35 0x1.53c6e6e7bda62p-17 65 0x1.006cf00723c7ap+5 1 32192904 gamma gamma electron +564 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.71786315c2605p-17 43 0x1.512f402a5f6d4p+5 1 32192904 gamma gamma electron +569 0x1.eb851eb851eb9p-5 0x1.b00e5024db81cp-6 16 0x1.21f75efcf4705p-17 25 0x1.d4f96b552dc75p+5 1 32192904 gamma gamma electron +574 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 56 0x1.5f6e9eee3b002p-18 72 0x1.5f65ddb528aeap+5 1 32192904 gamma gamma electron +576 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 46 0x1.91eac9ff5cddbp-10 144 0x1.82172c0b3f161p+5 1 32192904 gamma gamma electron +577 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 38 0x1.6c277e1d8b51ap-9 141 0x1.79f1e26d49f51p+5 1 32192904 gamma gamma electron +579 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 64 0x1.611c3cb896cfcp-18 52 0x1.ab7d5f8269c83p+5 1 32192904 gamma gamma electron +580 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.8b4d0fbaa812dp-18 57 0x1.ce2fd9754d23ep+5 1 32192904 gamma gamma electron +590 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 47 0x1.b2eb48434e897p-18 64 0x1.62d9cb191512bp+5 1 32192904 gamma gamma electron +591 0x1.eb851eb851eb9p-5 0x1.be85e22cb0625p-7 16 0x1.93c41e7f53d7cp-16 14 0x1.5d45add0305ecp+5 1 32192904 gamma gamma electron +593 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 21 0x1.cfcf97d17ac2p-18 30 0x1.6d2cda9aa4c39p+5 1 32192904 gamma gamma electron +594 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.676c6c6be8f16p-18 51 0x1.8650e053f7b3cp+5 1 32192904 gamma gamma electron +595 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 55 0x1.aafaf594b5bfep-17 72 0x1.64d85373d959ep+5 1 32192904 gamma gamma electron +602 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 44 0x1.056b9e4d46b29p-15 32 0x1.4d447539e5cd7p+5 1 32192904 gamma gamma electron +605 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 52 0x1.591e5e71bf3c2p-18 66 0x1.72bebf5ae194bp+5 1 32192904 gamma gamma electron +614 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 60 0x1.e8de54142221cp-18 67 0x1.89beb37d6a15fp+5 1 32192904 gamma gamma electron +615 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 62 0x1.d5366f13599ep-16 59 0x1.5e814cd6fd8d6p+5 1 32192904 gamma gamma electron +624 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 60 0x1.82ed763459dddp-18 47 0x1.44a9f7bb4e4ffp+5 1 32192904 gamma gamma electron +625 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e9193p-6 26 0x1.9b5d01d7744bdp-18 23 0x1.87f063ad3540dp+5 1 32192904 gamma gamma electron +630 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 27 0x1.a00e1a0e988aap-18 27 0x1.787ad33ead2c3p+5 1 32192904 gamma gamma electron +632 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 33 0x1.30de8bc4d8fa5p-17 26 0x1.509f2a11f9c1bp+5 1 32192904 gamma gamma electron +633 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 34 0x1.967429f3c315dp-16 27 0x1.f1a9744585352p+5 1 32192904 gamma gamma electron +634 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 53 0x1.03cd11f1325cfp-17 52 0x1.75061570b13eap+5 1 32192904 gamma gamma electron +636 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.19d4031f6618ap-16 57 0x1.ba2fbcd0a2815p+5 1 32192904 gamma gamma electron +644 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.09e3c02fbcb1ap-9 69 0x1.ca907d13c1484p+5 1 32192904 gamma gamma electron +647 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 74 0x1.12fcbfd7edb4p-9 61 0x1.6120539d9757ap+5 1 32192904 gamma gamma electron +651 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 69 0x1.6abf2ffb36267p-18 59 0x1.14d366f1bf4d5p+5 1 32192904 gamma gamma electron +652 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.85f2dd3bafbe5p-18 26 0x1.00c67aa486dep+5 1 32192904 gamma gamma electron +661 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 27 0x1.381367c880524p-17 33 0x1.68f21f65b4cb5p+5 1 32192904 gamma gamma electron +662 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 60 0x1.1dec7fe361cd5p-17 50 0x1.c4c23fe4b1d1ep+5 1 32192904 gamma gamma electron +663 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 56 0x1.1b74f88069091p-16 62 0x1.52ba3e7b116bdp+5 1 32192904 gamma gamma electron +670 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 45 0x1.5888f11932c42p-18 62 0x1.5f7c966426b8dp+5 1 32192904 gamma gamma electron +675 0x1.eb851eb851eb9p-5 0x1.7300e3e2b079dp-7 24 0x1.30d251922abdep-15 10 0x1.4e95b4657a928p+5 1 32192904 e- electron +681 0x1.eb851eb851eb9p-5 0x1.3a140aa35f17dp-5 48 0x1.769b34c52a55ap-14 42 0x1.90ba914276c3ap+5 1 32192904 gamma gamma electron +684 0x1.eb851eb851eb9p-5 0x1.b8928324e30e3p-7 19 0x1.3f20ce11e71bfp-12 10 0x1.64a6ecd9bfdd1p+5 1 32192904 gamma gamma electron +688 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 76 0x1.9e7d2e252aa5dp-18 50 0x1.7657bc05eefabp+5 1 32192904 gamma gamma electron +689 0x1.eb851eb851eb9p-5 0x1.8acf8a81225b6p-6 55 0x1.43deda741e591p-17 22 0x1.2df562e88b70fp+5 1 32192904 gamma gamma electron +693 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 36 0x1.10fd55a0f2bbfp-16 21 0x1.53169f93d2323p+5 1 32192904 gamma gamma electron +696 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 67 0x1.88cd3e63ec9a6p-17 53 0x1.19757ef64aff2p+5 1 32192904 gamma gamma electron +701 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 54 0x1.7f789179dfb42p-10 154 0x1.840117b88aa42p+5 1 32192904 gamma gamma electron +705 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 71 0x1.f58d295ac9454p-10 162 0x1.6351c4f157011p+5 1 32192904 gamma gamma electron +707 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dc9p-6 25 0x1.bc0a20b7c59d4p-18 30 0x1.1a31eea76ba9fp+6 1 32192904 gamma gamma electron +709 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 33 0x1.32911b038c77fp-16 24 0x1.927a0ddd3b387p+5 1 32192904 gamma gamma electron +711 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 61 0x1.978923413b978p-18 59 0x1.7f5422c6441d3p+5 1 32192904 gamma gamma electron +714 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 49 0x1.887baf8a4f914p-18 65 0x1.65cbe95c53dc9p+5 1 32192904 gamma gamma electron +716 0x1.eb851eb851eb9p-5 0x1.07484ee2b3ae6p-5 41 0x1.8e38e6b561828p-17 32 0x1.d3850200b5666p+5 1 32192904 gamma gamma electron +717 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91931p-6 44 0x1.49aecad4eceaap-17 26 0x1.8092c88c55641p+5 1 32192904 gamma gamma electron +721 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 22 0x1.85d03197dc11fp-17 31 0x1.985cbcaade145p+5 1 32192904 gamma gamma electron +725 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 65 0x1.b1c6945e8d18p-18 53 0x1.72f1131829a19p+5 1 32192904 gamma gamma electron +727 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 55 0x1.6bc24301e4b54p-10 84 0x1.5bd845e33be64p+5 1 32192904 gamma gamma electron +729 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcfp-6 28 0x1.4e6f52bc63392p-16 24 0x1.474933afc03a8p+5 1 32192904 gamma gamma electron +733 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebdp-5 75 0x1.f04fdd4e1bd5ap-18 58 0x1.1751ee4b33b93p+5 1 32192904 gamma gamma electron +737 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 70 0x1.aa5cdd1323dbap-17 49 0x1.3e19a95b76987p+5 1 32192904 gamma gamma electron +742 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 72 0x1.5689f74ab3808p-18 55 0x1.b8419cf58511cp+5 1 32192904 gamma gamma electron +743 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 49 0x1.156d5f7e37afbp-9 87 0x1.a48d39bdfaecdp+5 1 32192904 gamma gamma electron +744 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcdp-6 26 0x1.69a0e049c8ad3p-17 32 0x1.2064391c8f683p+5 1 32192904 gamma gamma electron +749 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.731054925e3eap-17 32 0x1.37fb37eed17adp+5 1 32192904 gamma gamma electron +751 0x1.eb851eb851eb9p-5 0x1.33e67d739fee3p-6 37 0x1.99477c63a5b65p-11 18 0x1.6f4622557285ep+5 1 32192904 gamma gamma electron +753 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 70 0x1.95239af567d58p-16 56 0x1.77df45d88cfbep+5 1 32192904 gamma gamma electron +755 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 61 0x1.9ba440efc4b48p-18 64 0x1.7d0e7790b64dep+5 1 32192904 gamma gamma electron +756 0x1.eb851eb851eb9p-5 0x1.76deef0e4034ap-5 45 0x1.ba2c7360b90ecp-18 44 0x1.5a1a6a74763d7p+5 1 32192904 gamma gamma electron +758 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebep-5 65 0x1.68afd6b38a9a9p-10 72 0x1.3430cd0046c3dp+5 1 32192904 gamma gamma electron +759 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 48 0x1.7c76c397c9788p-17 54 0x1.4679888c7b01p+5 1 32192904 gamma gamma electron +760 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dcap-6 29 0x1.9dd9e15212551p-10 80 0x1.6ef35e0f5462fp+5 1 32192904 gamma gamma electron +762 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb5p-5 67 0x1.67fafcf79506ap-18 48 0x1.1eb169f29ad3dp+5 1 32192904 gamma gamma electron +764 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb6p-5 60 0x1.ff2b130d13e34p-18 58 0x1.6e7cd6551991ap+5 1 32192904 gamma gamma electron +765 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb3p-5 66 0x1.0ed2c4ee2933cp-17 48 0x1.33db64887f3d1p+5 1 32192904 gamma gamma electron +767 0x1.eb851eb851eb9p-5 0x1.be85e22cb0623p-7 16 0x1.576307331d9b9p-12 10 0x1.aaa68af20ba0ep+5 1 32192904 gamma gamma electron +768 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.57033f179327p-15 58 0x1.cabdb8605fa61p+5 1 32192904 gamma gamma electron +771 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 52 0x1.7c205f0d3c295p-18 63 0x1.379a52ecf1783p+5 1 32192904 gamma gamma electron +772 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 32 0x1.d67e393aa0332p-13 20 0x1.19e105fb856a8p+5 1 32192904 gamma gamma electron +773 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 52 0x1.848b22e21a9f9p-18 73 0x1.6cd5d510d5b91p+5 1 32192904 gamma gamma electron +774 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 65 0x1.6a31260bb6ap-17 59 0x1.a58a084c7f3edp+5 1 32192904 gamma gamma electron +776 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 47 0x1.aeeb1416ee71cp-18 72 0x1.5055fd83cf3b6p+5 1 32192904 gamma gamma electron +777 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 64 0x1.2b6b2eab33555p-17 46 0x1.a8511a812a6dfp+4 1 32192904 gamma gamma electron +780 0x1.eb851eb851eb9p-5 0x1.a113e15e5449p-6 22 0x1.6d10456674124p-18 26 0x1.aed4e549e5208p+5 1 32192904 gamma gamma electron +781 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dd1p-6 29 0x1.93c2323d091c9p-15 31 0x1.cbc7fffae232fp+5 1 32192904 gamma gamma electron +791 0x1.eb851eb851eb9p-5 0x1.baaeb29a46e9fp-5 50 0x1.06de761948a63p-13 43 0x1.c48224cb68f9p+5 1 32192904 e- electron +794 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 57 0x1.7d8f13fa149b4p-18 75 0x1.9db1145fc864cp+5 1 32192904 gamma gamma electron +798 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 39 0x1.5ba725b9f5768p-15 23 0x1.9cc4109cbeae6p+5 1 32192904 gamma gamma electron +803 0x1.eb851eb851eb9p-5 0x1.9600b0a947ddbp-5 61 0x1.adadc443e3ef7p-17 43 0x1.5071d2e2a550bp+5 1 32192904 gamma gamma electron +804 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 54 0x1.51e1d2e9183bfp-18 72 0x1.af142060a0c37p+5 1 32192904 gamma gamma electron +806 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 17 0x1.52d95d019a0c8p-18 34 0x1.547fb2e728dc3p+5 1 32192904 gamma gamma electron +810 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 31 0x1.0879ef5a4256ap-15 30 0x1.548be209f218cp+5 1 32192904 gamma gamma electron +813 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 37 0x1.cce023e99618p-18 22 0x1.327f50ef70b1dp+5 1 32192904 gamma gamma electron +818 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 25 0x1.5e1bb5d6fc63p-18 22 0x1.4d0f9c2dbd123p+5 1 32192904 gamma gamma electron +820 0x1.eb851eb851eb9p-5 0x1.b00e5024db818p-6 20 0x1.b661ebe12e0f8p-18 24 0x1.27170508c7165p+5 1 32192904 gamma gamma electron +824 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 63 0x1.7af36cf581a86p-10 64 0x1.5da18ab0268edp+5 1 32192904 gamma gamma electron +826 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 58 0x1.a1a0ef570edebp-18 53 0x1.499eda8cd213fp+5 1 32192904 gamma gamma electron +834 0x1.eb851eb851eb9p-5 0x1.b00e5024db81bp-6 27 0x1.06665ec7fcddbp-17 23 0x1.6ae39f17faf13p+5 1 32192904 gamma gamma electron +836 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 54 0x1.054414b4e85ccp-16 58 0x1.cafc2d53cfffp+5 1 32192904 gamma gamma electron +838 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 35 0x1.d92b3068f2d69p-18 23 0x1.abca2be727b6ap+5 1 32192904 gamma gamma electron +845 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 53 0x1.675af76b87e3p-16 66 0x1.9acefd9cc24cep+5 1 32192904 gamma gamma electron +846 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 32 0x1.f7d669faf48d9p-18 25 0x1.b7ee3cd38c2e1p+5 1 32192904 gamma gamma electron +851 0x1.eb851eb851eb9p-5 0x1.bda7037fb7192p-5 51 0x1.6ae547da56c1ap-11 46 0x1.752cc92234d24p+5 1 32192904 gamma gamma electron +852 0x1.eb851eb851eb9p-5 0x1.0d774c67b79f3p-6 22 0x1.d7b6d103e7ee8p-15 19 0x1.3da00ce9efcedp+5 1 32192904 gamma gamma electron +853 0x1.eb851eb851eb9p-5 0x1.2977ab57002b6p-5 46 0x1.b84a138108c62p-17 32 0x1.d1cebc4f0aa42p+5 1 32192904 e- electron +854 0x1.eb851eb851eb9p-5 0x1.4c08ed0e8bb43p-6 20 0x1.fa5c378759eb3p-17 22 0x1.890e4af578032p+5 1 32192904 gamma gamma electron +858 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 68 0x1.91322eddce0a2p-17 56 0x1.340e57a5e3972p+5 1 32192904 gamma gamma electron +864 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 70 0x1.021d9ba96e22fp-9 182 0x1.6851af4d80f67p+5 1 32192904 gamma gamma electron +865 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 47 0x1.a931899a5f2e3p-17 49 0x1.6204ed8eeda52p+5 1 32192904 gamma gamma electron +869 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91933p-6 39 0x1.1df5df3de8079p-14 23 0x1.fab1cd918532p+4 1 32192904 gamma gamma electron +873 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.d02f33e38f543p-17 43 0x1.3364ca2ee2a92p+5 1 32192904 gamma gamma electron +875 0x1.eb851eb851eb9p-5 0x1.b00e5024db81dp-6 21 0x1.74132d0445e14p-16 37 0x1.ab170f515516ep+5 1 32192904 gamma gamma electron +876 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 33 0x1.c22b39593daa4p-14 29 0x1.8500ed7481809p+5 1 32192904 gamma gamma electron +877 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 63 0x1.82620e546e0a3p-18 55 0x1.1f4a6c11c907p+5 1 32192904 gamma gamma electron +880 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebcp-5 49 0x1.60320483cc692p-18 65 0x1.385ec4dece9a2p+5 1 32192904 gamma gamma electron +882 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 38 0x1.b2230dffed7efp-14 35 0x1.8340ce2bbef22p+5 1 32192904 gamma gamma electron +884 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.c8c3ad17cc7e4p-9 108 0x1.75d748b209748p+5 1 32192904 gamma gamma electron +888 0x1.eb851eb851eb9p-5 0x1.b00e5024db819p-6 29 0x1.2ae8db33828fap-16 22 0x1.3b678e88506c8p+5 1 32192904 gamma gamma electron +889 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 65 0x1.3d842643e1fa5p-17 73 0x1.7190a6867237fp+5 1 32192904 gamma gamma electron +892 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 38 0x1.584c4c5b7661dp-17 30 0x1.a9070ff771bacp+5 1 32192904 gamma gamma electron +894 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dccp-6 46 0x1.762024beb9a53p-18 25 0x1.9dff5ddad5908p+5 1 32192904 gamma gamma electron +896 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 71 0x1.7021babbf695bp-10 150 0x1.789cfa393bd57p+5 1 32192904 gamma gamma electron +900 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 57 0x1.4eb0ee06e8f92p-10 65 0x1.513318ef0a557p+5 1 32192904 gamma gamma electron +901 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 69 0x1.84c1de9c6d41ap-16 40 0x1.6bae3ce186d88p+5 1 32192904 gamma gamma electron +905 0x1.eb851eb851eb9p-5 0x1.4c08ed0e8bb4p-6 20 0x1.05e02c7e2917ep-14 13 0x1.d8696d73462aap+4 1 32192904 gamma gamma electron +906 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 29 0x1.053e9a448ee22p-16 27 0x1.849a5ac20e505p+5 1 32192904 gamma gamma electron +914 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 54 0x1.6e4c5cb9063b3p-18 52 0x1.adb736ab8e6b1p+5 1 32192904 gamma gamma electron +916 0x1.eb851eb851eb9p-5 0x1.b116228134481p-6 24 0x1.3d1b109a65ad8p-16 23 0x1.ceba7fc48a801p+4 1 32192904 gamma gamma electron +924 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 63 0x1.c342157c09c3fp-18 54 0x1.b3acf9443a438p+5 1 32192904 gamma gamma electron +925 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 49 0x1.889492c49bbe9p-10 66 0x1.7276e8a813c9ep+5 1 32192904 gamma gamma electron +936 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb4p-5 65 0x1.5528b9f679c9ep-18 64 0x1.35bf18780e202p+5 1 32192904 gamma gamma electron +939 0x1.eb851eb851eb9p-5 0x1.b00e5024db81ap-6 31 0x1.e2d9cfe72c0ecp-18 34 0x1.b3b1bfca2a1c8p+5 1 32192904 gamma gamma electron +940 0x1.eb851eb851eb9p-5 0x1.f47f2ddd88dc9p-6 22 0x1.f7a59da339d71p-18 32 0x1.b6e4fc662956dp+5 1 32192904 gamma gamma electron +943 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebbp-5 53 0x1.50e0aceec9001p-16 38 0x1.a47565c68602bp+5 1 32192904 gamma gamma electron +945 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 73 0x1.0860d33fb8b64p-9 61 0x1.681fb06e822cdp+5 1 32192904 gamma gamma electron +947 0x1.eb851eb851eb9p-5 0x1.595ae3212765cp-5 55 0x1.fe1a8b6156926p-14 53 0x1.43d31e8d617c4p+5 1 32192904 gamma gamma electron +948 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 56 0x1.2fd9ebc147137p-17 59 0x1.74490a084198ap+5 1 32192904 gamma gamma electron +951 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 40 0x1.96c09e2b6cd47p-15 28 0x1.3939893e1b2dep+5 1 32192904 gamma gamma electron +956 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 28 0x1.70369d5267893p-14 22 0x1.57478fb3b4986p+5 1 32192904 gamma gamma electron +960 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 25 0x1.b8fd790925441p-16 19 0x1.2a568e538d959p+5 1 32192904 gamma gamma electron +964 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb9p-5 65 0x1.08ee424ff51a8p-16 52 0x1.5ffc36802d3f9p+5 1 32192904 gamma gamma electron +971 0x1.eb851eb851eb9p-5 0x1.eb851eb851ebap-5 54 0x1.2276defb17185p-9 136 0x1.53f3e2ecc6a9bp+5 1 32192904 gamma gamma electron +975 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91936p-6 28 0x1.1a0073a623a0ap-14 29 0x1.049260e548495p+5 1 32192904 gamma gamma electron +977 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91932p-6 28 0x1.911facac923ap-17 26 0x1.5fe7f14078cddp+5 1 32192904 gamma gamma electron +978 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91934p-6 40 0x1.1d83682805207p-14 27 0x1.66e991048f482p+5 1 32192904 gamma gamma electron +987 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 55 0x1.d55369d54e66ep-18 70 0x1.454f5d55a194p+5 1 32192904 gamma gamma electron +988 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb7p-5 57 0x1.6d42b3c3dea26p-9 55 0x1.564cd822422b2p+5 1 32192904 gamma gamma electron +989 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91935p-6 35 0x1.7b840858fcfe6p-18 34 0x1.6bf3ca6711d0ap+5 1 32192904 gamma gamma electron +990 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 67 0x1.5416b07a4e43fp-18 79 0x1.93a107e036677p+5 1 32192904 gamma gamma electron +997 0x1.eb851eb851eb9p-5 0x1.eb851eb851eb8p-5 58 0x1.95b95290f917bp-18 55 0x1.6bb87716aac0fp+5 1 32192904 gamma gamma electron +998 0x1.eb851eb851eb9p-5 0x1.ef1a6a0e91937p-6 31 0x1.4d3443cade923p-17 23 0x1.84b8ff357913p+5 1 32192904 gamma gamma electron diff --git a/examples/advanced/underground_physics/underground_physics-alpha.out b/examples/advanced/underground_physics/underground_physics-alpha.out index 3936397fa2..d0c7421998 100644 --- a/examples/advanced/underground_physics/underground_physics-alpha.out +++ b/examples/advanced/underground_physics/underground_physics-alpha.out @@ -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", @@ -158,7 +159,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 ======== @@ -467,6 +468,7 @@ Threshold for very long decay time at rest 1e+60 y ======================================================================= ====== 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 @@ -483,6 +485,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 @@ -809,10 +812,10 @@ WARNING: G4VisManager::IsValidView(): Attempt to draw when no graphics system Run terminated. Run Summary Number of events processed : 1 - User=0.650000s Real=0.701302s Sys=0.050000s + User=0.690000s Real=0.727930s Sys=0.040000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 18 of which, static: 0 -Dynamic pools deleted: 18 / Total memory freed: 28 MB +Dynamic pools deleted: 18 / Total memory freed: 38 MB ============================================================ diff --git a/examples/advanced/underground_physics/underground_physics.out b/examples/advanced/underground_physics/underground_physics.out index 9c4232fde5..b047aafae5 100644 --- a/examples/advanced/underground_physics/underground_physics.out +++ b/examples/advanced/underground_physics/underground_physics.out @@ -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 ======== @@ -440,6 +441,7 @@ Threshold for very long decay time at rest 1e+60 y ======================================================================= ====== 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 @@ -456,6 +458,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 diff --git a/examples/advanced/xray_SiliconPoreOptics/README.txt b/examples/advanced/xray_SiliconPoreOptics/README.txt index 042c310386..ea530cd8e1 100644 --- a/examples/advanced/xray_SiliconPoreOptics/README.txt +++ b/examples/advanced/xray_SiliconPoreOptics/README.txt @@ -131,5 +131,5 @@ References [1] Fioretti V et al. "The Geant4 mass model of the ATHENA Silicon Pore Optics and its effect on soft proton scattering", Space Telescopes and Instrumentation 2018: Ultraviolet to Gamma Ray. Vol. 10699. SPIE, 2018. - [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern.ch, 2003. + [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern, 2003. diff --git a/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out b/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out index e372ded19a..437aad774e 100644 --- a/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out +++ b/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out @@ -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", @@ -128,7 +129,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 ======== @@ -868,7 +869,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 5000 - User=14.480000s Real=15.402534s Sys=0.010000s + User=15.370000s Real=15.404159s Sys=0.000000s ... write file : output.root - done ... close file : output.root - done Graphics systems deleted. diff --git a/examples/advanced/xray_TESdetector/README.txt b/examples/advanced/xray_TESdetector/README.txt index 112a668dc7..434ac63b1d 100644 --- a/examples/advanced/xray_TESdetector/README.txt +++ b/examples/advanced/xray_TESdetector/README.txt @@ -169,4 +169,4 @@ References [1] S. Lotti, S. Molendi, C. Macculi, V. Fioretti, L. Piro et al., "Review of the Particle Background of the Athena X-IFU Instrument", The Astrophysical Journal, 2021. - [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern.ch, 2003. + [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern, 2003. diff --git a/examples/advanced/xray_TESdetector/xray_TESdetector.out b/examples/advanced/xray_TESdetector/xray_TESdetector.out index dbfc116d6e..d9cc426473 100644 --- a/examples/advanced/xray_TESdetector/xray_TESdetector.out +++ b/examples/advanced/xray_TESdetector/xray_TESdetector.out @@ -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", @@ -95,6 +96,7 @@ PhysicsList::AddPhysicsList: X - Defining SpacePhysics ---> Using G4EmStandard_SpacePhysics v. 11.03 Build a new geometry +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 ### HadronInelasticQBBC Construct Process: Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV @@ -127,7 +129,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 ======== @@ -210,7 +212,7 @@ Type of PIXE cross section for e+- Livermore SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay photonNuclear, electronNuclear, positronNuclear, muonNuclear - hadElastic, NeutronGeneralProc, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic hadElastic, hadElastic, hadElastic, hadElastic hadElastic, hadElastic, hadElastic, hadElastic hadElastic, hadElastic, hadElastic, hadElastic @@ -227,20 +229,21 @@ Type of PIXE cross section for e+- Livermore hadElastic, hadElastic, hadElastic, hadElastic hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic tInelastic, He3Inelastic, alphaInelastic, ionInelastic - protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic - kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic -anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic -anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic - xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic -anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic -anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic - anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic - B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic - anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic - xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic - xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic -anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic -anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic + nKiller, protonInelastic, neutronInelastic, nCapture + pi+Inelastic, pi-Inelastic, kaon+Inelastic, kaon-Inelastic + kaon0SInelastic, kaon0LInelastic,anti_protonInelastic,anti_neutronInelastic +anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic,anti_alphaInelastic + lambdaInelastic, sigma+Inelastic, sigma-Inelastic, xi0Inelastic + xi-Inelastic, omega-Inelastic,anti_lambdaInelastic,anti_sigma+Inelastic +anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic,anti_omega-Inelastic + D+Inelastic, D0Inelastic, D-Inelastic, anti_D0Inelastic + Ds+Inelastic, Ds-Inelastic, B+Inelastic, B0Inelastic + B-Inelastic, anti_B0Inelastic, Bs0Inelastic, anti_Bs0Inelastic + Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic, xi_c+Inelastic + xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic, xi_b0Inelastic + xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic,anti_xi_c+Inelastic +anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic,anti_xi_b0Inelastic +anti_xi_b-Inelastic,anti_omega_b-Inelastic ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -268,7 +271,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 ======== @@ -899,6 +902,20 @@ SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -1076,19 +1093,6 @@ SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -1142,6 +1146,7 @@ SingleCoulombScat: for pi- XStype:2 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 @@ -1158,6 +1163,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 @@ -1292,12 +1298,12 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 1000 - User=0.410000s Real=0.413646s Sys=0.000000s + User=0.370000s Real=0.368840s Sys=0.000000s ... write file : output.root - done ... close file : output.root - done Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.056 MB +Dynamic pools deleted: 11 / Total memory freed: 0.059 MB ============================================================ diff --git a/examples/advanced/xray_fluorescence/xray_fluorescence.out b/examples/advanced/xray_fluorescence/xray_fluorescence.out index b91e6bf884..8e8b0e75ba 100644 --- a/examples/advanced/xray_fluorescence/xray_fluorescence.out +++ b/examples/advanced/xray_fluorescence/xray_fluorescence.out @@ -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 @@ -2297,23 +2297,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", @@ -2431,7 +2432,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 ======== @@ -2989,7 +2990,7 @@ Created histos Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.001494s Sys=0.000000s + User=0.000000s Real=0.001464s Sys=0.000000s Going to save histograms ... write file : xrayfluo.root - done ... close file : xrayfluo.root - done @@ -3000,10 +3001,10 @@ Visualization Manager deleting... visManager deleted G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x23dc000 +UserDetectorConstruction deleted 0x1412ac0 XrayFluoDetectorConstruction deleted -UserPhysicsList deleted 0x245dbd0 -UserActionInitialization deleted 0x24b3cf0 +UserPhysicsList deleted 0x1494220 +UserActionInitialization deleted 0x14ea950 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/advanced/xray_telescope/xray_telescope.out b/examples/advanced/xray_telescope/xray_telescope.out index 763006ba2b..b23df2f586 100644 --- a/examples/advanced/xray_telescope/xray_telescope.out +++ b/examples/advanced/xray_telescope/xray_telescope.out @@ -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 @@ -46,7 +46,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 ======== @@ -394,7 +394,7 @@ Opening output file xraytel ... done Run terminated. Run Summary Number of events processed : 1000 - User=0.010000s Real=0.004784s Sys=0.000000s + User=0.010000s Real=0.005011s Sys=0.000000s ########################################## ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 diff --git a/examples/basic/B1/exampleB1.out b/examples/basic/B1/exampleB1.out index 128f5a3ceb..0926e7623a 100644 --- a/examples/basic/B1/exampleB1.out +++ b/examples/basic/B1/exampleB1.out @@ -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", @@ -98,6 +99,7 @@ Checking overlaps for volume Shape2:0 (G4Trd) ... OK! Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -125,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 ======== @@ -538,6 +540,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -688,6 +704,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -697,6 +716,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -718,19 +740,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -741,6 +750,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -751,6 +763,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -784,6 +799,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 @@ -800,6 +816,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 @@ -844,7 +861,7 @@ Max 2J for sampling of angular correlations 10 --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Cumulated dose per run, in scoring volume : 5.20411 nanoGy rms = 146.979 picoGy + Cumulated dose per run, in scoring volume : 4.94438 nanoGy rms = 145.983 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/basic/B2/B2a/exampleB2a.out b/examples/basic/B2/B2a/exampleB2a.out index 755444296f..c94c5e7d2e 100644 --- a/examples/basic/B2/B2a/exampleB2a.out +++ b/examples/basic/B2/B2a/exampleB2a.out @@ -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 @@ -30,23 +30,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", @@ -194,7 +195,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 ======== @@ -847,6 +848,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 @@ -863,6 +865,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 @@ -1071,9 +1074,9 @@ Max 2J for sampling of angular correlations 10 >>> Event: 95 0 hits stored in this event >>> Event: 96 - 0 hits stored in this event + 109 hits stored in this event >>> Event: 97 - 55 hits stored in this event + 0 hits stored in this event >>> Event: 98 0 hits stored in this event >>> Event: 99 @@ -1081,205 +1084,205 @@ Max 2J for sampling of angular correlations 10 ### Run 1 starts. --> Event 0 starts. >>> Event: 0 - 221 hits stored in this event + 78 hits stored in this event >>> Event: 1 - 207 hits stored in this event ->>> Event: 2 - 140 hits stored in this event ->>> Event: 3 - 144 hits stored in this event ->>> Event: 4 - 148 hits stored in this event ->>> Event: 5 - 57 hits stored in this event ->>> Event: 6 - 1763 hits stored in this event ->>> Event: 7 - 57 hits stored in this event ->>> Event: 8 - 69 hits stored in this event ->>> Event: 9 - 1213 hits stored in this event ->>> Event: 10 - 830 hits stored in this event ->>> Event: 11 - 63 hits stored in this event ->>> Event: 12 - 63 hits stored in this event ->>> Event: 13 - 181 hits stored in this event ->>> Event: 14 - 56 hits stored in this event ->>> Event: 15 - 135 hits stored in this event ->>> Event: 16 - 97 hits stored in this event ->>> Event: 17 - 82 hits stored in this event ->>> Event: 18 - 105 hits stored in this event ->>> Event: 19 - 77 hits stored in this event ->>> Event: 20 - 154 hits stored in this event ->>> Event: 21 - 1245 hits stored in this event ->>> Event: 22 - 72 hits stored in this event ->>> Event: 23 - 72 hits stored in this event ->>> Event: 24 - 141 hits stored in this event ->>> Event: 25 - 106 hits stored in this event ->>> Event: 26 - 89 hits stored in this event ->>> Event: 27 - 609 hits stored in this event ->>> Event: 28 - 87 hits stored in this event ->>> Event: 29 - 221 hits stored in this event ->>> Event: 30 - 1192 hits stored in this event ->>> Event: 31 - 66 hits stored in this event ->>> Event: 32 - 460 hits stored in this event ->>> Event: 33 - 46 hits stored in this event ->>> Event: 34 - 61 hits stored in this event ->>> Event: 35 - 63 hits stored in this event ->>> Event: 36 - 261 hits stored in this event ->>> Event: 37 - 201 hits stored in this event ->>> Event: 38 - 252 hits stored in this event ->>> Event: 39 - 209 hits stored in this event ->>> Event: 40 - 767 hits stored in this event ->>> Event: 41 - 51 hits stored in this event ->>> Event: 42 - 50 hits stored in this event ->>> Event: 43 - 90 hits stored in this event ->>> Event: 44 - 67 hits stored in this event ->>> Event: 45 - 124 hits stored in this event ->>> Event: 46 - 120 hits stored in this event ->>> Event: 47 84 hits stored in this event ->>> Event: 48 - 83 hits stored in this event ->>> Event: 49 - 105 hits stored in this event ->>> Event: 50 - 102 hits stored in this event ->>> Event: 51 - 47 hits stored in this event ->>> Event: 52 - 67 hits stored in this event ->>> Event: 53 - 110 hits stored in this event ->>> Event: 54 - 85 hits stored in this event ->>> Event: 55 - 70 hits stored in this event ->>> Event: 56 - 168 hits stored in this event ->>> Event: 57 - 299 hits stored in this event ->>> Event: 58 - 419 hits stored in this event ->>> Event: 59 - 81 hits stored in this event ->>> Event: 60 - 405 hits stored in this event ->>> Event: 61 - 81 hits stored in this event ->>> Event: 62 - 115 hits stored in this event ->>> Event: 63 - 71 hits stored in this event ->>> Event: 64 - 163 hits stored in this event ->>> Event: 65 - 81 hits stored in this event ->>> Event: 66 - 252 hits stored in this event ->>> Event: 67 - 77 hits stored in this event ->>> Event: 68 - 110 hits stored in this event ->>> Event: 69 - 178 hits stored in this event ->>> Event: 70 - 102 hits stored in this event ->>> Event: 71 - 133 hits stored in this event ->>> Event: 72 - 45 hits stored in this event ->>> Event: 73 - 125 hits stored in this event ->>> Event: 74 - 176 hits stored in this event ->>> Event: 75 - 149 hits stored in this event ->>> Event: 76 - 432 hits stored in this event ->>> Event: 77 - 109 hits stored in this event ->>> Event: 78 - 265 hits stored in this event ->>> Event: 79 - 90 hits stored in this event ->>> Event: 80 +>>> Event: 2 95 hits stored in this event ->>> Event: 81 - 105 hits stored in this event ->>> Event: 82 - 102 hits stored in this event ->>> Event: 83 +>>> Event: 3 + 78 hits stored in this event +>>> Event: 4 + 132 hits stored in this event +>>> Event: 5 + 84 hits stored in this event +>>> Event: 6 + 141 hits stored in this event +>>> Event: 7 + 138 hits stored in this event +>>> Event: 8 67 hits stored in this event ->>> Event: 84 - 137 hits stored in this event ->>> Event: 85 - 106 hits stored in this event ->>> Event: 86 - 133 hits stored in this event ->>> Event: 87 - 87 hits stored in this event ->>> Event: 88 - 124 hits stored in this event ->>> Event: 89 - 174 hits stored in this event ->>> Event: 90 - 66 hits stored in this event ->>> Event: 91 - 334 hits stored in this event ->>> Event: 92 - 148 hits stored in this event ->>> Event: 93 - 622 hits stored in this event ->>> Event: 94 - 91 hits stored in this event ->>> Event: 95 - 75 hits stored in this event ->>> Event: 96 - 75 hits stored in this event ->>> Event: 97 - 83 hits stored in this event ->>> Event: 98 +>>> Event: 9 + 68 hits stored in this event +>>> Event: 10 + 138 hits stored in this event +>>> Event: 11 + 99 hits stored in this event +>>> Event: 12 + 45986 hits stored in this event +>>> Event: 13 + 358 hits stored in this event +>>> Event: 14 + 55 hits stored in this event +>>> Event: 15 + 508 hits stored in this event +>>> Event: 16 + 95 hits stored in this event +>>> Event: 17 + 149 hits stored in this event +>>> Event: 18 98 hits stored in this event ->>> Event: 99 +>>> Event: 19 + 93 hits stored in this event +>>> Event: 20 + 109 hits stored in this event +>>> Event: 21 + 250 hits stored in this event +>>> Event: 22 + 95 hits stored in this event +>>> Event: 23 + 156 hits stored in this event +>>> Event: 24 + 107 hits stored in this event +>>> Event: 25 + 66 hits stored in this event +>>> Event: 26 + 50 hits stored in this event +>>> Event: 27 + 75 hits stored in this event +>>> Event: 28 + 79 hits stored in this event +>>> Event: 29 + 85 hits stored in this event +>>> Event: 30 + 72 hits stored in this event +>>> Event: 31 + 402 hits stored in this event +>>> Event: 32 + 1250 hits stored in this event +>>> Event: 33 + 1640 hits stored in this event +>>> Event: 34 + 183 hits stored in this event +>>> Event: 35 + 243 hits stored in this event +>>> Event: 36 + 56 hits stored in this event +>>> Event: 37 + 184 hits stored in this event +>>> Event: 38 + 75 hits stored in this event +>>> Event: 39 + 63 hits stored in this event +>>> Event: 40 + 83 hits stored in this event +>>> Event: 41 + 759 hits stored in this event +>>> Event: 42 + 105 hits stored in this event +>>> Event: 43 + 72 hits stored in this event +>>> Event: 44 + 185 hits stored in this event +>>> Event: 45 + 109 hits stored in this event +>>> Event: 46 + 67 hits stored in this event +>>> Event: 47 + 103 hits stored in this event +>>> Event: 48 + 88 hits stored in this event +>>> Event: 49 + 82 hits stored in this event +>>> Event: 50 + 75 hits stored in this event +>>> Event: 51 + 113 hits stored in this event +>>> Event: 52 + 831 hits stored in this event +>>> Event: 53 + 149 hits stored in this event +>>> Event: 54 + 113 hits stored in this event +>>> Event: 55 + 143 hits stored in this event +>>> Event: 56 + 113 hits stored in this event +>>> Event: 57 + 1327 hits stored in this event +>>> Event: 58 + 69 hits stored in this event +>>> Event: 59 + 124 hits stored in this event +>>> Event: 60 + 82 hits stored in this event +>>> Event: 61 57 hits stored in this event +>>> Event: 62 + 74 hits stored in this event +>>> Event: 63 + 961 hits stored in this event +>>> Event: 64 + 128 hits stored in this event +>>> Event: 65 + 139 hits stored in this event +>>> Event: 66 + 126 hits stored in this event +>>> Event: 67 + 421 hits stored in this event +>>> Event: 68 + 357 hits stored in this event +>>> Event: 69 + 290 hits stored in this event +>>> Event: 70 + 123 hits stored in this event +>>> Event: 71 + 63 hits stored in this event +>>> Event: 72 + 133 hits stored in this event +>>> Event: 73 + 1185 hits stored in this event +>>> Event: 74 + 70 hits stored in this event +>>> Event: 75 + 86 hits stored in this event +>>> Event: 76 + 55 hits stored in this event +>>> Event: 77 + 399 hits stored in this event +>>> Event: 78 + 240 hits stored in this event +>>> Event: 79 + 81 hits stored in this event +>>> Event: 80 + 187 hits stored in this event +>>> Event: 81 + 113 hits stored in this event +>>> Event: 82 + 66 hits stored in this event +>>> Event: 83 + 69 hits stored in this event +>>> Event: 84 + 90 hits stored in this event +>>> Event: 85 + 82 hits stored in this event +>>> Event: 86 + 93 hits stored in this event +>>> Event: 87 + 542 hits stored in this event +>>> Event: 88 + 93 hits stored in this event +>>> Event: 89 + 78 hits stored in this event +>>> Event: 90 + 123 hits stored in this event +>>> Event: 91 + 80 hits stored in this event +>>> Event: 92 + 1012 hits stored in this event +>>> Event: 93 + 61 hits stored in this event +>>> Event: 94 + 138 hits stored in this event +>>> Event: 95 + 87 hits stored in this event +>>> Event: 96 + 182 hits stored in this event +>>> Event: 97 + 97 hits stored in this event +>>> Event: 98 + 74 hits stored in this event +>>> Event: 99 + 182 hits stored in this event ### Run 2 starts. --> Event 0 starts. diff --git a/examples/basic/B2/B2b/exampleB2b.out b/examples/basic/B2/B2b/exampleB2b.out index ce40d42990..b302ed9fe3 100644 --- a/examples/basic/B2/B2b/exampleB2b.out +++ b/examples/basic/B2/B2b/exampleB2b.out @@ -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 @@ -30,23 +30,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", @@ -190,7 +191,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 ======== @@ -843,6 +844,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 @@ -859,6 +861,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 @@ -885,7 +888,7 @@ Max 2J for sampling of angular correlations 10 >>> Event: 4 0 hits stored in this event >>> Event: 5 - 57 hits stored in this event + 0 hits stored in this event >>> Event: 6 0 hits stored in this event >>> Event: 7 @@ -893,13 +896,13 @@ Max 2J for sampling of angular correlations 10 >>> Event: 8 0 hits stored in this event >>> Event: 9 - 0 hits stored in this event + 110 hits stored in this event >>> Event: 10 0 hits stored in this event >>> Event: 11 0 hits stored in this event >>> Event: 12 - 227 hits stored in this event + 0 hits stored in this event >>> Event: 13 0 hits stored in this event >>> Event: 14 @@ -909,35 +912,35 @@ Max 2J for sampling of angular correlations 10 >>> Event: 16 0 hits stored in this event >>> Event: 17 - 0 hits stored in this event + 27 hits stored in this event >>> Event: 18 0 hits stored in this event >>> Event: 19 - 36 hits stored in this event + 30 hits stored in this event >>> Event: 20 0 hits stored in this event >>> Event: 21 0 hits stored in this event >>> Event: 22 - 103 hits stored in this event + 48 hits stored in this event >>> Event: 23 - 0 hits stored in this event + 42 hits stored in this event >>> Event: 24 0 hits stored in this event >>> Event: 25 0 hits stored in this event >>> Event: 26 - 47 hits stored in this event + 355 hits stored in this event >>> Event: 27 - 0 hits stored in this event + 55 hits stored in this event >>> Event: 28 0 hits stored in this event >>> Event: 29 - 0 hits stored in this event + 9 hits stored in this event >>> Event: 30 0 hits stored in this event >>> Event: 31 - 87 hits stored in this event + 0 hits stored in this event >>> Event: 32 0 hits stored in this event >>> Event: 33 @@ -973,25 +976,25 @@ Max 2J for sampling of angular correlations 10 >>> Event: 48 0 hits stored in this event >>> Event: 49 - 1 hits stored in this event + 0 hits stored in this event >>> Event: 50 0 hits stored in this event >>> Event: 51 0 hits stored in this event >>> Event: 52 - 19 hits stored in this event + 0 hits stored in this event >>> Event: 53 0 hits stored in this event >>> Event: 54 0 hits stored in this event >>> Event: 55 - 34 hits stored in this event + 0 hits stored in this event >>> Event: 56 0 hits stored in this event >>> Event: 57 - 0 hits stored in this event + 93 hits stored in this event >>> Event: 58 - 34 hits stored in this event + 0 hits stored in this event >>> Event: 59 0 hits stored in this event >>> Event: 60 @@ -999,21 +1002,21 @@ Max 2J for sampling of angular correlations 10 >>> Event: 61 0 hits stored in this event >>> Event: 62 - 40 hits stored in this event + 0 hits stored in this event >>> Event: 63 0 hits stored in this event >>> Event: 64 - 0 hits stored in this event + 249 hits stored in this event >>> Event: 65 0 hits stored in this event >>> Event: 66 0 hits stored in this event >>> Event: 67 - 0 hits stored in this event + 51 hits stored in this event >>> Event: 68 - 40 hits stored in this event ->>> Event: 69 0 hits stored in this event +>>> Event: 69 + 3 hits stored in this event >>> Event: 70 0 hits stored in this event >>> Event: 71 @@ -1029,7 +1032,7 @@ Max 2J for sampling of angular correlations 10 >>> Event: 76 0 hits stored in this event >>> Event: 77 - 0 hits stored in this event + 116 hits stored in this event >>> Event: 78 0 hits stored in this event >>> Event: 79 @@ -1037,7 +1040,7 @@ Max 2J for sampling of angular correlations 10 >>> Event: 80 0 hits stored in this event >>> Event: 81 - 35 hits stored in this event + 51 hits stored in this event >>> Event: 82 0 hits stored in this event >>> Event: 83 @@ -1051,7 +1054,7 @@ Max 2J for sampling of angular correlations 10 >>> Event: 87 0 hits stored in this event >>> Event: 88 - 243 hits stored in this event + 0 hits stored in this event >>> Event: 89 0 hits stored in this event >>> Event: 90 @@ -1061,11 +1064,11 @@ Max 2J for sampling of angular correlations 10 >>> Event: 92 0 hits stored in this event >>> Event: 93 - 0 hits stored in this event + 94 hits stored in this event >>> Event: 94 - 0 hits stored in this event + 62 hits stored in this event >>> Event: 95 - 0 hits stored in this event + 40 hits stored in this event >>> Event: 96 0 hits stored in this event >>> Event: 97 @@ -1077,205 +1080,205 @@ Max 2J for sampling of angular correlations 10 ### Run 1 starts. --> Event 0 starts. >>> Event: 0 - 675 hits stored in this event + 172 hits stored in this event >>> Event: 1 - 71 hits stored in this event + 72 hits stored in this event >>> Event: 2 - 260 hits stored in this event + 72 hits stored in this event >>> Event: 3 - 74 hits stored in this event + 94 hits stored in this event >>> Event: 4 - 166 hits stored in this event + 130 hits stored in this event >>> Event: 5 - 147 hits stored in this event ->>> Event: 6 - 107 hits stored in this event ->>> Event: 7 - 93 hits stored in this event ->>> Event: 8 - 355 hits stored in this event ->>> Event: 9 - 69 hits stored in this event ->>> Event: 10 - 239 hits stored in this event ->>> Event: 11 - 147 hits stored in this event ->>> Event: 12 - 2046 hits stored in this event ->>> Event: 13 108 hits stored in this event ->>> Event: 14 - 136 hits stored in this event ->>> Event: 15 - 1918 hits stored in this event ->>> Event: 16 - 547 hits stored in this event ->>> Event: 17 - 200 hits stored in this event ->>> Event: 18 - 104 hits stored in this event ->>> Event: 19 - 175 hits stored in this event ->>> Event: 20 - 84 hits stored in this event ->>> Event: 21 - 147 hits stored in this event ->>> Event: 22 - 22561 hits stored in this event ->>> Event: 23 - 78 hits stored in this event ->>> Event: 24 - 90 hits stored in this event ->>> Event: 25 - 127 hits stored in this event ->>> Event: 26 - 920 hits stored in this event ->>> Event: 27 - 85 hits stored in this event ->>> Event: 28 - 61 hits stored in this event ->>> Event: 29 - 63 hits stored in this event ->>> Event: 30 - 58 hits stored in this event ->>> Event: 31 - 416 hits stored in this event ->>> Event: 32 - 125 hits stored in this event ->>> Event: 33 - 161 hits stored in this event ->>> Event: 34 - 94 hits stored in this event ->>> Event: 35 - 242 hits stored in this event ->>> Event: 36 - 126 hits stored in this event ->>> Event: 37 - 396 hits stored in this event ->>> Event: 38 - 164 hits stored in this event ->>> Event: 39 +>>> Event: 6 + 657 hits stored in this event +>>> Event: 7 119 hits stored in this event ->>> Event: 40 - 69 hits stored in this event ->>> Event: 41 - 73 hits stored in this event ->>> Event: 42 - 91 hits stored in this event ->>> Event: 43 - 98 hits stored in this event ->>> Event: 44 - 70 hits stored in this event ->>> Event: 45 - 105 hits stored in this event ->>> Event: 46 - 114 hits stored in this event ->>> Event: 47 - 118 hits stored in this event ->>> Event: 48 - 61 hits stored in this event ->>> Event: 49 - 162 hits stored in this event ->>> Event: 50 - 168 hits stored in this event ->>> Event: 51 - 121 hits stored in this event ->>> Event: 52 - 177 hits stored in this event ->>> Event: 53 - 322 hits stored in this event ->>> Event: 54 - 101 hits stored in this event ->>> Event: 55 - 1020 hits stored in this event ->>> Event: 56 - 596 hits stored in this event ->>> Event: 57 - 100 hits stored in this event ->>> Event: 58 - 2493 hits stored in this event ->>> Event: 59 - 79 hits stored in this event ->>> Event: 60 - 148 hits stored in this event ->>> Event: 61 - 79 hits stored in this event ->>> Event: 62 - 140 hits stored in this event ->>> Event: 63 - 224 hits stored in this event ->>> Event: 64 - 123 hits stored in this event ->>> Event: 65 - 81 hits stored in this event ->>> Event: 66 - 8635 hits stored in this event ->>> Event: 67 - 137 hits stored in this event ->>> Event: 68 - 73 hits stored in this event ->>> Event: 69 - 94 hits stored in this event ->>> Event: 70 - 64 hits stored in this event ->>> Event: 71 - 63 hits stored in this event ->>> Event: 72 - 320 hits stored in this event ->>> Event: 73 - 121 hits stored in this event ->>> Event: 74 - 89 hits stored in this event ->>> Event: 75 - 71 hits stored in this event ->>> Event: 76 - 62 hits stored in this event ->>> Event: 77 - 47 hits stored in this event ->>> Event: 78 - 69 hits stored in this event ->>> Event: 79 - 98 hits stored in this event ->>> Event: 80 - 153 hits stored in this event ->>> Event: 81 - 61 hits stored in this event ->>> Event: 82 - 192 hits stored in this event ->>> Event: 83 - 127 hits stored in this event ->>> Event: 84 - 258 hits stored in this event ->>> Event: 85 - 100 hits stored in this event ->>> Event: 86 - 217 hits stored in this event ->>> Event: 87 - 261 hits stored in this event ->>> Event: 88 +>>> Event: 8 97 hits stored in this event ->>> Event: 89 - 60 hits stored in this event ->>> Event: 90 - 83 hits stored in this event ->>> Event: 91 - 60 hits stored in this event ->>> Event: 92 +>>> Event: 9 + 79 hits stored in this event +>>> Event: 10 + 52 hits stored in this event +>>> Event: 11 + 84 hits stored in this event +>>> Event: 12 + 170 hits stored in this event +>>> Event: 13 + 66 hits stored in this event +>>> Event: 14 + 94 hits stored in this event +>>> Event: 15 + 85 hits stored in this event +>>> Event: 16 + 615 hits stored in this event +>>> Event: 17 + 1755 hits stored in this event +>>> Event: 18 + 134 hits stored in this event +>>> Event: 19 + 678 hits stored in this event +>>> Event: 20 + 82 hits stored in this event +>>> Event: 21 + 71 hits stored in this event +>>> Event: 22 + 101 hits stored in this event +>>> Event: 23 + 81 hits stored in this event +>>> Event: 24 + 86 hits stored in this event +>>> Event: 25 + 72 hits stored in this event +>>> Event: 26 + 261 hits stored in this event +>>> Event: 27 + 49 hits stored in this event +>>> Event: 28 + 744 hits stored in this event +>>> Event: 29 + 133 hits stored in this event +>>> Event: 30 + 73 hits stored in this event +>>> Event: 31 + 48 hits stored in this event +>>> Event: 32 + 147 hits stored in this event +>>> Event: 33 + 61 hits stored in this event +>>> Event: 34 + 73 hits stored in this event +>>> Event: 35 + 303 hits stored in this event +>>> Event: 36 + 127 hits stored in this event +>>> Event: 37 + 66 hits stored in this event +>>> Event: 38 + 97 hits stored in this event +>>> Event: 39 + 50 hits stored in this event +>>> Event: 40 + 126 hits stored in this event +>>> Event: 41 + 78 hits stored in this event +>>> Event: 42 + 573 hits stored in this event +>>> Event: 43 114 hits stored in this event ->>> Event: 93 - 279 hits stored in this event ->>> Event: 94 +>>> Event: 44 + 86 hits stored in this event +>>> Event: 45 + 2959 hits stored in this event +>>> Event: 46 + 92 hits stored in this event +>>> Event: 47 + 2545 hits stored in this event +>>> Event: 48 + 137 hits stored in this event +>>> Event: 49 + 10660 hits stored in this event +>>> Event: 50 + 118 hits stored in this event +>>> Event: 51 + 94 hits stored in this event +>>> Event: 52 + 50 hits stored in this event +>>> Event: 53 + 100 hits stored in this event +>>> Event: 54 + 49 hits stored in this event +>>> Event: 55 + 82 hits stored in this event +>>> Event: 56 + 53 hits stored in this event +>>> Event: 57 + 56 hits stored in this event +>>> Event: 58 + 94 hits stored in this event +>>> Event: 59 + 138 hits stored in this event +>>> Event: 60 + 89 hits stored in this event +>>> Event: 61 + 500 hits stored in this event +>>> Event: 62 + 130 hits stored in this event +>>> Event: 63 + 102 hits stored in this event +>>> Event: 64 + 475 hits stored in this event +>>> Event: 65 + 161 hits stored in this event +>>> Event: 66 + 76 hits stored in this event +>>> Event: 67 + 84 hits stored in this event +>>> Event: 68 + 80 hits stored in this event +>>> Event: 69 + 134 hits stored in this event +>>> Event: 70 + 201 hits stored in this event +>>> Event: 71 + 113 hits stored in this event +>>> Event: 72 + 114 hits stored in this event +>>> Event: 73 + 77 hits stored in this event +>>> Event: 74 + 83 hits stored in this event +>>> Event: 75 + 74 hits stored in this event +>>> Event: 76 + 98 hits stored in this event +>>> Event: 77 + 284 hits stored in this event +>>> Event: 78 + 210 hits stored in this event +>>> Event: 79 + 153 hits stored in this event +>>> Event: 80 69 hits stored in this event ->>> Event: 95 - 234 hits stored in this event ->>> Event: 96 - 119 hits stored in this event ->>> Event: 97 - 68 hits stored in this event ->>> Event: 98 - 576 hits stored in this event ->>> Event: 99 +>>> Event: 81 + 407 hits stored in this event +>>> Event: 82 + 87 hits stored in this event +>>> Event: 83 + 81 hits stored in this event +>>> Event: 84 + 86 hits stored in this event +>>> Event: 85 + 66 hits stored in this event +>>> Event: 86 + 533 hits stored in this event +>>> Event: 87 + 364 hits stored in this event +>>> Event: 88 67 hits stored in this event +>>> Event: 89 + 337 hits stored in this event +>>> Event: 90 + 63 hits stored in this event +>>> Event: 91 + 168 hits stored in this event +>>> Event: 92 + 1346 hits stored in this event +>>> Event: 93 + 335 hits stored in this event +>>> Event: 94 + 86 hits stored in this event +>>> Event: 95 + 145 hits stored in this event +>>> Event: 96 + 147 hits stored in this event +>>> Event: 97 + 457 hits stored in this event +>>> Event: 98 + 88 hits stored in this event +>>> Event: 99 + 604 hits stored in this event ### Run 2 starts. --> Event 0 starts. diff --git a/examples/basic/B3/B3a/exampleB3a.out b/examples/basic/B3/B3a/exampleB3a.out index 60dadea646..24ef338dd5 100644 --- a/examples/basic/B3/B3a/exampleB3a.out +++ b/examples/basic/B3/B3a/exampleB3a.out @@ -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 @@ -30,23 +30,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", @@ -267,7 +268,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 ======== diff --git a/examples/basic/B3/B3b/exampleB3b.out b/examples/basic/B3/B3b/exampleB3b.out index 5cb63c3f50..1c5ec8fff3 100644 --- a/examples/basic/B3/B3b/exampleB3b.out +++ b/examples/basic/B3/B3b/exampleB3b.out @@ -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", @@ -265,7 +266,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 ======== diff --git a/examples/basic/B4/B4a/exampleB4a.out b/examples/basic/B4/B4a/exampleB4a.out index 9e53ac6e57..1037fb00d6 100644 --- a/examples/basic/B4/B4a/exampleB4a.out +++ b/examples/basic/B4/B4a/exampleB4a.out @@ -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 @@ -30,23 +30,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", @@ -166,7 +167,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 ======== @@ -819,6 +820,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 @@ -835,6 +837,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 diff --git a/examples/basic/B4/B4b/exampleB4b.out b/examples/basic/B4/B4b/exampleB4b.out index ab1373fbac..e1886ed6de 100644 --- a/examples/basic/B4/B4b/exampleB4b.out +++ b/examples/basic/B4/B4b/exampleB4b.out @@ -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 @@ -30,23 +30,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", @@ -166,7 +167,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 ======== @@ -819,6 +820,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 @@ -835,6 +837,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 diff --git a/examples/basic/B4/B4c/exampleB4c.out b/examples/basic/B4/B4c/exampleB4c.out index 221cd538da..cb31d7c7aa 100644 --- a/examples/basic/B4/B4c/exampleB4c.out +++ b/examples/basic/B4/B4c/exampleB4c.out @@ -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 @@ -30,23 +30,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", @@ -166,7 +167,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 ======== @@ -819,6 +820,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 @@ -835,6 +837,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 diff --git a/examples/basic/B4/B4d/exampleB4d.out b/examples/basic/B4/B4d/exampleB4d.out index 0501ef9734..e8ce3dcb5d 100644 --- a/examples/basic/B4/B4d/exampleB4d.out +++ b/examples/basic/B4/B4d/exampleB4d.out @@ -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 @@ -30,23 +30,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", @@ -170,7 +171,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 ======== @@ -823,6 +824,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 @@ -839,6 +841,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 @@ -975,4 +978,4 @@ Using ... close file : B4.root - done Graphics systems deleted. Visualization Manager deleting... -### deleting chargedFilter 0x22c96d0 +### deleting chargedFilter 0x2037ed0 diff --git a/examples/basic/B5/exampleB5.out b/examples/basic/B5/exampleB5.out index f7ad7fba22..1fa1fe239c 100644 --- a/examples/basic/B5/exampleB5.out +++ b/examples/basic/B5/exampleB5.out @@ -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 @@ -30,23 +30,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", @@ -264,7 +265,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 ======== @@ -917,6 +918,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 @@ -933,6 +935,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 @@ -963,47 +966,102 @@ Setting was ignored. ... open analysis file : B5.root - done --> Event 0 starts. +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : GeomNav1002 + issued by : G4Navigator::ComputeStep() +Stuck Track: potential geometry or navigation problem. + Track stuck, not moving for 10 steps. + Current phys volume: 'worldPhysical' + - at position : (-93.4789867633268,-207.2957634844161,-995.6212528033448) + in direction: (0.8655763250546924,-0.3861385597592805,0.3188646079009742) + (local position: (-93.4789867633268,-207.2957634844161,-995.6212528033448)) + (local direction: (0.8655763250546924,-0.3861385597592805,0.3188646079009742)). + Previous phys volume: 'magneticPhysical' + + Likely geometry overlap - else navigation problem ! + *** Trying to get *unstuck* using a push - expanding step to 1e-07 (mm) ... Potential overlap in geometry ! + +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + + +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : GeomNav1002 + issued by : G4Navigator::ComputeStep() +Stuck Track: potential geometry or navigation problem. + Track stuck, not moving for 10 steps. + Current phys volume: 'worldPhysical' + - at position : (932.8773617475969,176.0352840373253,-360.1941531158485) + in direction: (-0.5535649138060351,-0.624529714538789,0.5509342264381619) + (local position: (932.8773617475969,176.0352840373253,-360.1941531158485)) + (local direction: (-0.5535649138060351,-0.624529714538789,0.5509342264381619)). + Previous phys volume: 'magneticPhysical' + + Likely geometry overlap - else navigation problem ! + *** Trying to get *unstuck* using a push - expanding step to 1e-07 (mm) ... Potential overlap in geometry ! + +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + + >>> Event 0 >>> Simulation truth : proton (0,0,100000) Hodoscope 1 has 1 hits. Hodoscope[7] 4.9870027260872 (nsec) Hodoscope 2 has 0 hits. -Drift Chamber 1 has 34 hits. - Layer[0] : time 6.6726483776791 (nsec) --- local (x,y) -2.6705359550686, -15.459053887043 - Layer[0] : time 6.6724364438581 (nsec) --- local (x,y) -13.23780862396, 11.700787877165 - Layer[0] : time 6.7007314325618 (nsec) --- local (x,y) 24.720678661792, 72.55430677598 - Layer[0] : time 6.6746364704571 (nsec) --- local (x,y) -10.985158643528, -17.637883173522 - Layer[0] : time 6.6730472863839 (nsec) --- local (x,y) -19.404032593972, 5.5189721151471 - Layer[0] : time 6.9266659511772 (nsec) --- local (x,y) -149.19886338227, -143.37147151472 - Layer[0] : time 6.6951975886854 (nsec) --- local (x,y) -17.297275092184, -63.322804528929 - Layer[0] : time 6.7888806014905 (nsec) --- local (x,y) -20.111069201463, -160.77906025403 - Layer[0] : time 6.8186033614811 (nsec) --- local (x,y) -127.37502671052, -85.362879162699 - Layer[1] : time 8.3419372615033 (nsec) --- local (x,y) -5.333207304657, -30.80213339434 - Layer[1] : time 8.3415176165109 (nsec) --- local (x,y) -26.390080633209, 23.326526720805 - Layer[1] : time 8.3979088565519 (nsec) --- local (x,y) 49.282198983599, 144.58714542264 - Layer[1] : time 8.3458876712761 (nsec) --- local (x,y) -21.859635320069, -35.069195575231 - Layer[1] : time 8.3427336052195 (nsec) --- local (x,y) -38.674938512136, 10.999108465643 - Layer[1] : time 8.8478629023622 (nsec) --- local (x,y) -297.99883911916, -284.63633515014 - Layer[1] : time 8.386805857812 (nsec) --- local (x,y) -34.337423499623, -126.06141072575 - Layer[1] : time 8.6326040391362 (nsec) --- local (x,y) -253.8389702616, -169.72121686915 - Layer[2] : time 10.011225033407 (nsec) --- local (x,y) -7.9895583548074, -46.135170752197 - Layer[2] : time 10.01059699837 (nsec) --- local (x,y) -39.544037574704, 34.927161466643 - Layer[2] : time 10.095073608334 (nsec) --- local (x,y) 73.847802219364, 216.5914881433 - Layer[2] : time 10.017158870351 (nsec) --- local (x,y) -32.826710887442, -52.611822916749 - Layer[2] : time 10.012419985026 (nsec) --- local (x,y) -57.933979074513, 16.521774456915 - Layer[2] : time 10.078298330381 (nsec) --- local (x,y) -51.053258778404, -188.60253371918 - Layer[2] : time 10.445921893215 (nsec) --- local (x,y) -379.99270754828, -253.28066013562 - Layer[3] : time 11.68050840347 (nsec) --- local (x,y) -10.59867545431, -61.432985754927 - Layer[3] : time 11.679674022053 (nsec) --- local (x,y) -52.678591797351, 46.519214687581 - Layer[3] : time 11.792239835867 (nsec) --- local (x,y) 98.406138266742, 288.60074937808 - Layer[3] : time 11.688484723609 (nsec) --- local (x,y) -43.987877415929, -70.495756737718 - Layer[3] : time 11.682103339256 (nsec) --- local (x,y) -77.161785801226, 22.07048213092 - Layer[3] : time 11.769767287603 (nsec) --- local (x,y) -67.679285182495, -251.10823955567 - Layer[4] : time 13.349791951588 (nsec) --- local (x,y) -13.180543771773, -76.736903095478 - Layer[4] : time 13.348747335519 (nsec) --- local (x,y) -65.785613619161, 58.094357305148 - Layer[4] : time 13.359795786022 (nsec) --- local (x,y) -55.032106933021, -88.327164570999 - Layer[4] : time 13.351788490141 (nsec) --- local (x,y) -96.391692877383, 27.659586459291 +Drift Chamber 1 has 51 hits. + Layer[0] : time 6.6726366536164 (nsec) --- local (x,y) -2.5592609162311, -15.366086931864 + Layer[0] : time 6.6724236928704 (nsec) --- local (x,y) -13.252741130967, 11.517593665723 + Layer[0] : time 6.7007926142258 (nsec) --- local (x,y) 24.733618278178, 72.678472549115 + Layer[0] : time 6.6746217962924 (nsec) --- local (x,y) -10.856958054228, -17.591801932068 + Layer[0] : time 6.6729939416766 (nsec) --- local (x,y) -19.13226167612, 4.9845075397205 + Layer[0] : time 6.6754097103601 (nsec) --- local (x,y) 26.242284041766, -24.357217147944 + Layer[0] : time 6.6750125458016 (nsec) --- local (x,y) 22.911172006558, -25.223685630669 + Layer[0] : time 6.9180917033336 (nsec) --- local (x,y) -142.241020449, -141.67661715218 + Layer[0] : time 6.6942245204157 (nsec) --- local (x,y) -17.726870306516, -60.833491175935 + Layer[0] : time 6.7004352472893 (nsec) --- local (x,y) -67.487247150994, -18.820472902512 + Layer[0] : time 6.6953690714901 (nsec) --- local (x,y) 71.247378280176, 21.920382333816 + Layer[1] : time 8.3419186330811 (nsec) --- local (x,y) -5.0758291542458, -30.66913938568 + Layer[1] : time 8.3414920793223 (nsec) --- local (x,y) -26.410372078996, 22.970922327271 + Layer[1] : time 8.3980366101286 (nsec) --- local (x,y) 49.313731138956, 144.84493571664 + Layer[1] : time 8.3458669056908 (nsec) --- local (x,y) -21.562673139778, -35.075001757106 + Layer[1] : time 8.3426244389661 (nsec) --- local (x,y) -38.115288490082, 9.9168301942411 + Layer[1] : time 8.3474498694801 (nsec) --- local (x,y) 52.420454193652, -48.466727546366 + Layer[1] : time 8.3466712304896 (nsec) --- local (x,y) 45.589572202984, -50.466836530195 + Layer[1] : time 8.8316328577637 (nsec) --- local (x,y) -283.61472272111, -282.73065609812 + Layer[1] : time 8.3848765916975 (nsec) --- local (x,y) -35.194284037678, -121.13036417112 + Layer[1] : time 8.3974696767814 (nsec) --- local (x,y) -134.75451128397, -37.830601986543 + Layer[1] : time 8.3872672377006 (nsec) --- local (x,y) 142.08622384053, 43.684495009609 + Layer[2] : time 10.01120046641 (nsec) --- local (x,y) -7.6036462676067, -45.968720085931 + Layer[2] : time 10.010556763973 (nsec) --- local (x,y) -39.539729594553, 34.408144178649 + Layer[2] : time 10.095292915606 (nsec) --- local (x,y) 73.895052126773, 217.03627609699 + Layer[2] : time 10.017126224372 (nsec) --- local (x,y) -32.279267292347, -52.671918180934 + Layer[2] : time 10.012256453752 (nsec) --- local (x,y) -57.104211515763, 14.872037581224 + Layer[2] : time 10.01934876643 (nsec) --- local (x,y) 79.541574624144, -70.570019485735 + Layer[2] : time 10.018398185961 (nsec) --- local (x,y) 68.340515654306, -76.048832065128 + Layer[2] : time 10.169779946179 (nsec) --- local (x,y) 87.275665508043, -76.534375555248 + Layer[2] : time 10.075587105815 (nsec) --- local (x,y) -52.627752362784, -181.57919947339 + Layer[2] : time 10.09460762109 (nsec) --- local (x,y) -202.25164001387, -56.827590434624 + Layer[2] : time 10.079014647828 (nsec) --- local (x,y) 212.61228754985, 65.414062061845 + Layer[3] : time 11.680478617544 (nsec) --- local (x,y) -10.134495089887, -61.231393302677 + Layer[3] : time 11.679618760077 (nsec) --- local (x,y) -52.646049823337, 45.836466065245 + Layer[3] : time 11.792560135288 (nsec) --- local (x,y) 98.450834098111, 289.25861006521 + Layer[3] : time 11.688388415213 (nsec) --- local (x,y) -43.027735964144, -70.272711541643 + Layer[3] : time 11.681890425067 (nsec) --- local (x,y) -76.100329932295, 19.858269607959 + Layer[3] : time 11.691242784977 (nsec) --- local (x,y) 106.75803275284, -92.52247950307 + Layer[3] : time 11.690084383572 (nsec) --- local (x,y) 90.894079412611, -101.56625210017 + Layer[3] : time 11.766287336562 (nsec) --- local (x,y) -70.102640466555, -241.98644995535 + Layer[3] : time 11.791908607627 (nsec) --- local (x,y) -270.13775244224, -75.710109890501 + Layer[3] : time 11.770687407826 (nsec) --- local (x,y) 282.94287471169, 87.253232699205 + Layer[4] : time 13.349768406156 (nsec) --- local (x,y) -12.771283564454, -76.589847137341 + Layer[4] : time 13.348677525801 (nsec) --- local (x,y) -65.776289109192, 57.194645543881 + Layer[4] : time 13.359657094717 (nsec) --- local (x,y) -53.847327735485, -87.88371633987 + Layer[4] : time 13.351517738492 (nsec) --- local (x,y) -95.065430554004, 24.760937847458 + Layer[4] : time 13.363134348319 (nsec) --- local (x,y) 133.64907128602, -114.85574398794 + Layer[4] : time 13.361875845908 (nsec) --- local (x,y) 113.76609958888, -127.41652908494 + Layer[4] : time 13.48928574668 (nsec) --- local (x,y) -338.13276988357, -94.791815345387 + Layer[4] : time 13.462382866226 (nsec) --- local (x,y) 353.30910692435, 109.12948864985 Drift Chamber 2 has 0 hits. -EM Calorimeter has 8 hits. Total Edep is 1330.2273843407 (MeV) +EM Calorimeter has 2 hits. Total Edep is 113.5754079415 (MeV) Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done @@ -1018,23 +1076,24 @@ Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) >>> Event 0 >>> Simulation truth : pi+ (-0,0,100000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867880803636 (nsec) -Hodoscope 2 has 1 hits. - Hodoscope[10] 42.694175410591 (nsec) + Hodoscope[7] 4.9867880803266 (nsec) +Hodoscope 2 has 2 hits. + Hodoscope[10] 42.694091772646 (nsec) + Hodoscope[8] 1194.171013159 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709548376126 (nsec) --- local (x,y) -0.0071790725864062, -0.0038273757010506 - Layer[1] : time 8.3387769383046 (nsec) --- local (x,y) -0.0051031539599598, -0.010969225352162 - Layer[2] : time 10.006599039029 (nsec) --- local (x,y) -0.00028456726016277, -0.01731055311623 - Layer[3] : time 11.674421139707 (nsec) --- local (x,y) 0.0050726299908207, -0.022155986908707 - Layer[4] : time 13.342243240272 (nsec) --- local (x,y) 0.0049844566799529, -0.025522293651726 + Layer[0] : time 6.6709548376711 (nsec) --- local (x,y) -1.7855180970739e-05, -0.0066806958858486 + Layer[1] : time 8.3387769383477 (nsec) --- local (x,y) -0.0020780827213064, -0.01369127142353 + Layer[2] : time 10.006599039009 (nsec) --- local (x,y) -0.0040734380670606, -0.020314750255114 + Layer[3] : time 11.674421139682 (nsec) --- local (x,y) -0.0048780329760614, -0.027149975660794 + Layer[4] : time 13.342243240534 (nsec) --- local (x,y) -0.0040944354430806, -0.037247128745577 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.366855222288 (nsec) --- local (x,y) -82.645324198456, -0.085299234844327 - Layer[1] : time 36.035589601877 (nsec) --- local (x,y) -99.185241586968, -0.091288252013046 - Layer[2] : time 37.704324382097 (nsec) --- local (x,y) -115.72879060121, -0.098989280762928 - Layer[3] : time 39.373059300523 (nsec) --- local (x,y) -132.27359247737, -0.10666883565576 - Layer[4] : time 41.041794225887 (nsec) --- local (x,y) -148.81845569564, -0.11630689283427 -EM Calorimeter has 2 hits. Total Edep is 235.12898420568 (MeV) -Hadron Calorimeter has 10 hits. Total Edep is 665.77128877414 (MeV) + Layer[0] : time 34.366776879256 (nsec) --- local (x,y) -82.676693311204, -0.23851695604083 + Layer[1] : time 36.035511007098 (nsec) --- local (x,y) -99.214316539426, -0.25873430339572 + Layer[2] : time 37.704245016514 (nsec) --- local (x,y) -115.75086607346, -0.27860943468121 + Layer[3] : time 39.372978587042 (nsec) --- local (x,y) -132.28343673211, -0.2966548687594 + Layer[4] : time 41.041712084258 (nsec) --- local (x,y) -148.81534162621, -0.31525981426462 +EM Calorimeter has 37 hits. Total Edep is 325.3675585304 (MeV) +Hadron Calorimeter has 11 hits. Total Edep is 3688.6928206236 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1048,23 +1107,24 @@ Hadron Calorimeter has 10 hits. Total Edep is 665.77128877414 (MeV) >>> Event 0 >>> Simulation truth : e+ (0,0,100000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867832235115 (nsec) -Hodoscope 2 has 1 hits. - Hodoscope[7] 43.207308999652 (nsec) + Hodoscope[7] 4.9867832233615 (nsec) +Hodoscope 2 has 2 hits. + Hodoscope[9] 43.185650990227 (nsec) + Hodoscope[2] 56.41132761603 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709483405378 (nsec) --- local (x,y) -0.017512808010046, 0.009342474979959 - Layer[1] : time 8.3387688167976 (nsec) --- local (x,y) -0.026040789110633, 0.00948498845382 - Layer[2] : time 10.006589293082 (nsec) --- local (x,y) -0.034674656898673, 0.01157907480862 - Layer[3] : time 11.67440976927 (nsec) --- local (x,y) -0.041605327146968, 0.0134260984674 - Layer[4] : time 13.342230245427 (nsec) --- local (x,y) -0.046419711274132, 0.017546717754449 + Layer[0] : time 6.6709483406689 (nsec) --- local (x,y) -0.019358876145209, 0.0090264471023918 + Layer[1] : time 8.3387688173217 (nsec) --- local (x,y) -0.032310558434413, 0.013769730883673 + Layer[2] : time 10.006589294188 (nsec) --- local (x,y) -0.047994566097847, 0.016893892812654 + Layer[3] : time 11.674409771229 (nsec) --- local (x,y) -0.065328026914659, 0.019351815075608 + Layer[4] : time 13.342230248314 (nsec) --- local (x,y) -0.082835327447769, 0.023084596559071 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.84733329015 (nsec) --- local (x,y) -236.78295462462, 0.054764096762511 - Layer[1] : time 36.522611213895 (nsec) --- local (x,y) -284.11882767231, 0.056274931719414 - Layer[2] : time 38.197889072743 (nsec) --- local (x,y) -331.45449430518, 0.057452780011912 - Layer[3] : time 39.873167342481 (nsec) --- local (x,y) -378.79146789877, 0.056928757942332 - Layer[4] : time 41.548446607831 (nsec) --- local (x,y) -426.13160814554, 0.05675663039572 -EM Calorimeter has 43 hits. Total Edep is 81212.116042201 (MeV) -Hadron Calorimeter has 9 hits. Total Edep is 70.382564827788 (MeV) + Layer[0] : time 34.848412225853 (nsec) --- local (x,y) -147.66846846347, 0.044721910849965 + Layer[1] : time 36.519134351702 (nsec) --- local (x,y) -177.17523775659, 0.048484035950686 + Layer[2] : time 38.18985699812 (nsec) --- local (x,y) -206.68465629019, 0.049219334393171 + Layer[3] : time 39.860579610521 (nsec) --- local (x,y) -236.1939017432, 0.048430132621253 + Layer[4] : time 41.531301903979 (nsec) --- local (x,y) -265.70152422043, 0.049301077478961 +EM Calorimeter has 50 hits. Total Edep is 89165.22858145 (MeV) +Hadron Calorimeter has 7 hits. Total Edep is 44.419047026592 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1076,32 +1136,25 @@ Hadron Calorimeter has 9 hits. Total Edep is 70.382564827788 (MeV) ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : proton (0,0,10000) +>>> Event 0 >>> Simulation truth : proton (-0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 5.008686251445 (nsec) + Hodoscope[7] 5.0086867064621 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 43.374889512312 (nsec) -Drift Chamber 1 has 12 hits. - Layer[0] : time 6.7002567368323 (nsec) --- local (x,y) 0.00090513619006177, 0.0072584627732603 - Layer[0] : time 6.7634185901601 (nsec) --- local (x,y) -68.828228049157, 81.966850468832 - Layer[1] : time 8.3754124269883 (nsec) --- local (x,y) 0.0036021827516564, -0.12584929092127 - Layer[1] : time 8.6557936515686 (nsec) --- local (x,y) 192.69466460455, -60.143672597421 - Layer[1] : time 8.5688189931863 (nsec) --- local (x,y) -249.78564489715, 87.191415180229 - Layer[2] : time 10.050570091236 (nsec) --- local (x,y) -0.032990376922309, -0.23347770392994 - Layer[2] : time 10.812111323928 (nsec) --- local (x,y) 565.78565143643, -170.22436068523 - Layer[2] : time 10.348805892686 (nsec) --- local (x,y) -368.5010901991, 127.47542836753 - Layer[3] : time 11.725727903802 (nsec) --- local (x,y) -0.073165322930585, -0.33907950299759 - Layer[3] : time 12.97563644318 (nsec) --- local (x,y) 944.72776536248, -253.24632099936 - Layer[3] : time 12.122864760899 (nsec) --- local (x,y) -390.68252917596, 272.67049985066 - Layer[4] : time 13.400885849731 (nsec) --- local (x,y) -0.12618184988731, -0.46661970620024 + Hodoscope[9] 43.375682174476 (nsec) +Drift Chamber 1 has 5 hits. + Layer[0] : time 6.7002527671023 (nsec) --- local (x,y) -0.13587495161626, -0.0062877337482647 + Layer[1] : time 8.3754025333314 (nsec) --- local (x,y) -0.13025794468916, 0.0033250589131769 + Layer[2] : time 10.050552442287 (nsec) --- local (x,y) -0.12260768796764, 0.029239824903414 + Layer[3] : time 11.725702459796 (nsec) --- local (x,y) -0.11175178514456, 0.058071647575324 + Layer[4] : time 13.400852584556 (nsec) --- local (x,y) -0.10061992230371, 0.070846489353449 Drift Chamber 2 has 5 hits. - Layer[0] : time 35.000660969838 (nsec) --- local (x,y) -149.91999461327, -2.504630298768 - Layer[1] : time 36.678798562723 (nsec) --- local (x,y) -179.7412092079, -2.7030898180139 - Layer[2] : time 38.356936118452 (nsec) --- local (x,y) -209.56173133487, -2.8904568352911 - Layer[3] : time 40.035070675334 (nsec) --- local (x,y) -239.36675639351, -3.0632606170676 - Layer[4] : time 41.713202215953 (nsec) --- local (x,y) -269.15592896918, -3.2208764037551 -EM Calorimeter has 4 hits. Total Edep is 214.12490829474 (MeV) -Hadron Calorimeter has 8 hits. Total Edep is 386.34376744746 (MeV) + Layer[0] : time 35.001711400702 (nsec) --- local (x,y) -147.9976191357, -0.60095355499609 + Layer[1] : time 36.679799622101 (nsec) --- local (x,y) -177.61407022099, -0.70341813258812 + Layer[2] : time 38.357886296553 (nsec) --- local (x,y) -207.22213151987, -0.80650199081318 + Layer[3] : time 40.035971890471 (nsec) --- local (x,y) -236.82422432394, -0.88793825046345 + Layer[4] : time 41.714050970675 (nsec) --- local (x,y) -266.392452332, -0.99692782935654 +EM Calorimeter has 36 hits. Total Edep is 2592.1306563415 (MeV) +Hadron Calorimeter has 9 hits. Total Edep is 320.24612255975 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1113,27 +1166,28 @@ Hadron Calorimeter has 8 hits. Total Edep is 386.34376744746 (MeV) ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : pi+ (-0,0,10000) +>>> Event 0 >>> Simulation truth : pi+ (0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9872690154676 (nsec) + Hodoscope[7] 4.9872689247262 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[10] 42.694160372826 (nsec) -Drift Chamber 1 has 7 hits. - Layer[0] : time 6.6715982803152 (nsec) --- local (x,y) -0.32004793957364, 0.10887412106599 - Layer[1] : time 8.3395813250071 (nsec) --- local (x,y) -0.38819795650112, 0.21658071769735 - Layer[1] : time 8.6247853466188 (nsec) --- local (x,y) -6.3149124040296, -52.385891717831 - Layer[1] : time 8.819303127126 (nsec) --- local (x,y) -36.970173492182, -53.690775948114 - Layer[2] : time 10.00756440898 (nsec) --- local (x,y) -0.46298747492659, 0.35799804466798 - Layer[3] : time 11.675547501186 (nsec) --- local (x,y) -0.53179553959907, 0.50635816389898 - Layer[4] : time 13.343530605265 (nsec) --- local (x,y) -0.63907113753077, 0.63779986425163 -Drift Chamber 2 has 5 hits. - Layer[0] : time 34.366123811111 (nsec) --- local (x,y) -83.345546218783, 3.5442660445726 - Layer[1] : time 36.035000098051 (nsec) --- local (x,y) -99.710157648691, 3.7105879582832 - Layer[2] : time 37.703877294273 (nsec) --- local (x,y) -116.08327351526, 3.855497742224 - Layer[3] : time 39.372756547723 (nsec) --- local (x,y) -132.47523154275, 3.9946980485264 - Layer[4] : time 41.041634880494 (nsec) --- local (x,y) -148.85879895926, 4.1261291907428 -EM Calorimeter has 35 hits. Total Edep is 314.99438635481 (MeV) -Hadron Calorimeter has 11 hits. Total Edep is 502.4299754728 (MeV) + Hodoscope[10] 42.698705833054 (nsec) +Drift Chamber 1 has 5 hits. + Layer[0] : time 6.6715981480746 (nsec) --- local (x,y) 0.029376313283663, -0.020834533554181 + Layer[1] : time 8.3395811417955 (nsec) --- local (x,y) 0.037033391475102, -0.045511304139313 + Layer[2] : time 10.007564143544 (nsec) --- local (x,y) 0.061192105410215, -0.084424414186866 + Layer[3] : time 11.675547150871 (nsec) --- local (x,y) 0.069375857282097, -0.12558557318929 + Layer[4] : time 13.343530168782 (nsec) --- local (x,y) 0.10380312250568, -0.17225937352059 +Drift Chamber 2 has 8 hits. + Layer[0] : time 34.370460519276 (nsec) --- local (x,y) -83.560632457973, -0.7186407089802 + Layer[1] : time 36.039378819134 (nsec) --- local (x,y) -100.30664145319, -0.77262892425304 + Layer[2] : time 37.708297908326 (nsec) --- local (x,y) -117.05975143308, -0.80067417706207 + Layer[2] : time 37.708492386891 (nsec) --- local (x,y) -117.06170544657, -0.80067699980941 + Layer[2] : time 37.708492386891 (nsec) --- local (x,y) -117.06170544657, -0.80067699980941 + Layer[2] : time 37.709399461269 (nsec) --- local (x,y) -117.06462826076, -0.82115577482435 + Layer[3] : time 39.377219425889 (nsec) --- local (x,y) -133.83457809977, -0.80813950266706 + Layer[4] : time 41.04614059924 (nsec) --- local (x,y) -150.60631128312, -0.80646220647121 +EM Calorimeter has 44 hits. Total Edep is 1723.3418465538 (MeV) +Hadron Calorimeter has 10 hits. Total Edep is 240.27742131812 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1147,23 +1201,23 @@ Hadron Calorimeter has 11 hits. Total Edep is 502.4299754728 (MeV) >>> Event 0 >>> Simulation truth : e+ (0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867832915113 (nsec) + Hodoscope[7] 4.98678323121 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 43.182267134868 (nsec) + Hodoscope[9] 43.183869108454 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709484988921 (nsec) --- local (x,y) -0.24166829035295, 0.27933696851971 - Layer[1] : time 8.3387691140537 (nsec) --- local (x,y) -0.42359773808473, 0.36472208735227 - Layer[2] : time 10.006589846451 (nsec) --- local (x,y) -0.67194756286824, 0.48522224408972 - Layer[3] : time 11.674410722048 (nsec) --- local (x,y) -0.98857536824181, 0.62082410864162 - Layer[4] : time 13.342231661012 (nsec) --- local (x,y) -1.3333941626328, 0.75948829349192 + Layer[0] : time 6.6709484346317 (nsec) --- local (x,y) -0.14217386111404, -0.047316802705884 + Layer[1] : time 8.3387690099969 (nsec) --- local (x,y) -0.26518382538989, -0.16537160927426 + Layer[2] : time 10.006589585769 (nsec) --- local (x,y) -0.39250118007495, -0.27946624746404 + Layer[3] : time 11.6744101461 (nsec) --- local (x,y) -0.50472711340697, -0.38898106393892 + Layer[4] : time 13.342230788082 (nsec) --- local (x,y) -0.62427999501804, -0.57436515878403 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.840913675404 (nsec) --- local (x,y) -170.94164034962, 2.5521353270068 - Layer[1] : time 36.51245476442 (nsec) --- local (x,y) -204.3575050637, 2.7396222618028 - Layer[2] : time 38.18400040141 (nsec) --- local (x,y) -237.79377338334, 2.9335258402149 - Layer[3] : time 39.855548385469 (nsec) --- local (x,y) -271.24068798247, 3.1083845530468 - Layer[4] : time 41.527098508335 (nsec) --- local (x,y) -304.69739047729, 3.2445847246182 -EM Calorimeter has 19 hits. Total Edep is 9550.3319157209 (MeV) -Hadron Calorimeter has 2 hits. Total Edep is 0.42847275266976 (MeV) + Layer[0] : time 34.8466427626 (nsec) --- local (x,y) -148.79806600068, -3.3916718800621 + Layer[1] : time 36.517358775138 (nsec) --- local (x,y) -178.27297790571, -3.5971878398049 + Layer[2] : time 38.18808023149 (nsec) --- local (x,y) -207.77566326045, -3.7953464850815 + Layer[3] : time 39.858800495981 (nsec) --- local (x,y) -237.27235047012, -3.9830759716131 + Layer[4] : time 41.529520371102 (nsec) --- local (x,y) -266.76710353599, -4.1628765184829 +EM Calorimeter has 19 hits. Total Edep is 9416.1041628716 (MeV) +Hadron Calorimeter has 2 hits. Total Edep is 3.1654860884909 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1177,22 +1231,22 @@ Hadron Calorimeter has 2 hits. Total Edep is 0.42847275266976 (MeV) >>> Event 0 >>> Simulation truth : proton (0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 6.8389890639894 (nsec) + Hodoscope[7] 6.8390026315943 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 59.432989551711 (nsec) + Hodoscope[9] 59.393436426839 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 9.1530069090469 (nsec) --- local (x,y) 0.89884682112627, 0.54195130305905 - Layer[1] : time 11.444977234845 (nsec) --- local (x,y) 2.4739301910603, 2.4425052417595 - Layer[2] : time 13.73724144504 (nsec) --- local (x,y) 3.9362117794298, 4.5635501979636 - Layer[3] : time 16.029661701383 (nsec) --- local (x,y) 5.3389051708188, 6.4161444490689 - Layer[4] : time 18.3222651363 (nsec) --- local (x,y) 6.829237031231, 8.1603036332532 + Layer[0] : time 9.1541754903679 (nsec) --- local (x,y) 0.27095213177322, -1.2184402633304 + Layer[1] : time 11.447208071485 (nsec) --- local (x,y) -0.10826159992832, -2.2114635642216 + Layer[2] : time 13.740438526141 (nsec) --- local (x,y) -0.43040483415631, -2.7542584939691 + Layer[3] : time 16.033860077037 (nsec) --- local (x,y) -1.00497218387, -3.318878828559 + Layer[4] : time 18.327468737817 (nsec) --- local (x,y) -1.6268934288897, -3.8553651977969 Drift Chamber 2 has 5 hits. - Layer[0] : time 47.949930298016 (nsec) --- local (x,y) -139.80057529208, 30.688192541466 - Layer[1] : time 50.250597533605 (nsec) --- local (x,y) -171.76619078017, 31.309787377698 - Layer[2] : time 52.551527880509 (nsec) --- local (x,y) -203.66950417852, 31.773622298429 - Layer[3] : time 54.852612296879 (nsec) --- local (x,y) -235.29763327304, 32.460029198979 - Layer[4] : time 57.153930294673 (nsec) --- local (x,y) -267.00271480398, 33.268076305466 -EM Calorimeter has 2 hits. Total Edep is 293.79235538608 (MeV) + Layer[0] : time 47.905725641583 (nsec) --- local (x,y) -166.81959190398, -4.6605838471215 + Layer[1] : time 50.207013935924 (nsec) --- local (x,y) -199.24051686529, -5.5460929271583 + Layer[2] : time 52.508642232301 (nsec) --- local (x,y) -232.17000637413, -6.5909961994183 + Layer[3] : time 54.810764392432 (nsec) --- local (x,y) -266.13938732869, -7.2134456720899 + Layer[4] : time 57.113237826721 (nsec) --- local (x,y) -300.50723278628, -7.8699264354678 +EM Calorimeter has 11 hits. Total Edep is 376.99717102329 (MeV) Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done @@ -1207,24 +1261,23 @@ Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) >>> Event 0 >>> Simulation truth : pi+ (-0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 5.0351370225138 (nsec) + Hodoscope[7] 5.0351353740523 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[11] 42.923817475424 (nsec) -Drift Chamber 1 has 6 hits. - Layer[0] : time 6.735728015664 (nsec) --- local (x,y) -1.4909615731774, 1.2668206101508 - Layer[0] : time 7.1073021001934 (nsec) --- local (x,y) -261.35436248895, -104.05822673063 - Layer[1] : time 8.4198281587345 (nsec) --- local (x,y) -1.2831550601073, 1.4399926146976 - Layer[2] : time 10.10393139574 (nsec) --- local (x,y) -1.0485307226267, 1.9968326909357 - Layer[3] : time 11.788037113066 (nsec) --- local (x,y) -0.74106245745952, 2.3639768040142 - Layer[4] : time 13.472355304418 (nsec) --- local (x,y) -6.4752551113746, 6.2594847259556 + Hodoscope[10] 43.10450799777 (nsec) +Drift Chamber 1 has 5 hits. + Layer[0] : time 6.735690737367 (nsec) --- local (x,y) 0.44597000593074, 1.5527481841072 + Layer[1] : time 8.4197460905033 (nsec) --- local (x,y) 0.52631429713044, 2.4028523669536 + Layer[2] : time 10.103805865224 (nsec) --- local (x,y) 0.49136705300862, 3.3387014850738 + Layer[3] : time 11.787871605074 (nsec) --- local (x,y) 0.35107586353062, 4.4845870063538 + Layer[4] : time 13.471941280845 (nsec) --- local (x,y) 0.26725969125807, 5.7445915199235 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.517744216466 (nsec) --- local (x,y) -105.36049830889, 77.128361996468 - Layer[1] : time 36.202242392485 (nsec) --- local (x,y) -113.84315382318, 82.74954887198 - Layer[2] : time 37.886768872726 (nsec) --- local (x,y) -122.71249477604, 88.40854361989 - Layer[3] : time 39.57128844929 (nsec) --- local (x,y) -131.55456448961, 93.85077254236 - Layer[4] : time 41.255809515182 (nsec) --- local (x,y) -140.59432969639, 98.924855561991 -EM Calorimeter has 26 hits. Total Edep is 575.94845363568 (MeV) -Hadron Calorimeter has 2 hits. Total Edep is 0.98105431188742 (MeV) + Layer[0] : time 34.695081260349 (nsec) --- local (x,y) -90.820937251422, 14.853743624206 + Layer[1] : time 36.380260902999 (nsec) --- local (x,y) -108.66462148555, 16.160680702893 + Layer[2] : time 38.065485431729 (nsec) --- local (x,y) -126.86055747639, 17.232162331677 + Layer[3] : time 39.750672480465 (nsec) --- local (x,y) -144.73576971104, 17.903379042641 + Layer[4] : time 41.435859742449 (nsec) --- local (x,y) -162.58753435034, 18.591709294401 +EM Calorimeter has 19 hits. Total Edep is 524.0351390465 (MeV) +Hadron Calorimeter has 2 hits. Total Edep is 33.610946341959 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1236,25 +1289,41 @@ Hadron Calorimeter has 2 hits. Total Edep is 0.98105431188742 (MeV) ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : e+ (0,0,1000) +>>> Event 0 >>> Simulation truth : e+ (-0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867841086296 (nsec) -Hodoscope 2 has 1 hits. - Hodoscope[6] 43.222349341485 (nsec) + Hodoscope[7] 4.9867851910449 (nsec) +Hodoscope 2 has 2 hits. + Hodoscope[9] 43.1959284035 (nsec) + Hodoscope[3] 55.863344937685 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709525588583 (nsec) --- local (x,y) -0.37200197006989, -1.2185808667414 - Layer[1] : time 8.3387762086296 (nsec) --- local (x,y) -0.66797875040762, -2.1031276906096 - Layer[2] : time 10.006598458527 (nsec) --- local (x,y) -1.038503122579, -2.6630111166457 - Layer[3] : time 11.674420768309 (nsec) --- local (x,y) -1.2463037475149, -3.3077867501564 - Layer[4] : time 13.342243790226 (nsec) --- local (x,y) -1.5485839154741, -4.073735941847 -Drift Chamber 2 has 5 hits. - Layer[0] : time 34.846041438692 (nsec) --- local (x,y) -288.73742489432, 0.66575472835713 - Layer[1] : time 36.524713177087 (nsec) --- local (x,y) -345.86314912681, 1.1718199330666 - Layer[2] : time 38.203346254475 (nsec) --- local (x,y) -402.88227120644, 2.0420228144162 - Layer[3] : time 39.881998754594 (nsec) --- local (x,y) -459.95455287458, 2.7857247742866 - Layer[4] : time 41.560442083082 (nsec) --- local (x,y) -516.47111315428, 3.5368247815612 -EM Calorimeter has 8 hits. Total Edep is 858.89767965536 (MeV) -Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) + Layer[0] : time 6.6709507802169 (nsec) --- local (x,y) 0.83614386306368, 0.50804108990218 + Layer[1] : time 8.3387716513926 (nsec) --- local (x,y) 1.0425515148999, 0.57106093464762 + Layer[2] : time 10.006592737818 (nsec) --- local (x,y) 1.301862286883, 0.76597661073365 + Layer[3] : time 11.674413839107 (nsec) --- local (x,y) 1.5957127130491, 0.87486154890364 + Layer[4] : time 13.342234852086 (nsec) --- local (x,y) 1.9018067613672, 0.90499982100671 +Drift Chamber 2 has 20 hits. + Layer[0] : time 34.857517933536 (nsec) --- local (x,y) -146.77689136171, -3.9975427453664 + Layer[1] : time 36.52843659296 (nsec) --- local (x,y) -177.25971310042, -4.6160502311994 + Layer[2] : time 38.199383979712 (nsec) --- local (x,y) -207.88763647803, -5.0132365391464 + Layer[2] : time 38.301401387339 (nsec) --- local (x,y) -208.29279883368, -5.6728981955734 + Layer[2] : time 38.302506323827 (nsec) --- local (x,y) -208.27958837967, -5.6351349152723 + Layer[2] : time 38.303630004115 (nsec) --- local (x,y) -208.28775573337, -5.6113103234309 + Layer[2] : time 38.304770141596 (nsec) --- local (x,y) -208.30228870797, -5.5810769515895 + Layer[2] : time 38.305910279076 (nsec) --- local (x,y) -208.34559235103, -5.5582734790365 + Layer[2] : time 38.307065721601 (nsec) --- local (x,y) -208.39406476561, -5.5527018304408 + Layer[2] : time 38.308225305615 (nsec) --- local (x,y) -208.44084263537, -5.5457438600881 + Layer[2] : time 38.312824635941 (nsec) --- local (x,y) -208.59479370909, -5.5201545968564 + Layer[2] : time 38.313872300051 (nsec) --- local (x,y) -208.60076983994, -5.4968142243163 + Layer[2] : time 38.314994243997 (nsec) --- local (x,y) -208.61958891599, -5.4749602822837 + Layer[2] : time 38.316119992174 (nsec) --- local (x,y) -208.64504557894, -5.5102514670512 + Layer[2] : time 38.317255313856 (nsec) --- local (x,y) -208.67998772205, -5.5405108020468 + Layer[2] : time 38.318426289873 (nsec) --- local (x,y) -208.71827195502, -5.5656454498052 + Layer[2] : time 38.319598470544 (nsec) --- local (x,y) -208.73513784036, -5.6038012666104 + Layer[2] : time 38.320770651216 (nsec) --- local (x,y) -208.74638991063, -5.5979062414439 + Layer[3] : time 39.870298934993 (nsec) --- local (x,y) -238.35871440417, -5.023939940129 + Layer[4] : time 41.541286843492 (nsec) --- local (x,y) -269.18671831098, -5.1829040514268 +EM Calorimeter has 7 hits. Total Edep is 957.3959812559 (MeV) +Hadron Calorimeter has 1 hits. Total Edep is 1.8084580647247 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done diff --git a/examples/extended/History b/examples/extended/History index 82d83874fa..6a23996f61 100644 --- a/examples/extended/History +++ b/examples/extended/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-16 Ben Morgan (exextended-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-06-10 Gabriele Cosmo (exextended-V11-02-01) - Updated GDML files to use short URL for schema validation. diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-csv.out b/examples/extended/analysis/AnaEx01/AnaEx01-csv.out index b041ead6c6..31a0774f13 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-csv.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-csv.out @@ -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 @@ -72,23 +72,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", @@ -188,7 +189,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 ======== @@ -841,6 +842,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 @@ -857,6 +859,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 @@ -947,20 +950,20 @@ LGap: mean = 32.6255 cm rms = 0 fm --------------------End of Run------------------------------ - mean Energy in Absorber : 188.855 MeV +- 49.5222 MeV - mean Energy in Gap : 46.6085 MeV +- 13.5408 MeV + mean Energy in Absorber : 188.669 MeV +- 48.7853 MeV + mean Energy in Gap : 46.259 MeV +- 13.3455 MeV - mean trackLength in Absorber : 46.6428 cm +- 12.2754 cm - mean trackLength in Gap : 23.6669 cm +- 6.92205 cm + mean trackLength in Absorber : 46.5752 cm +- 12.122 cm + mean trackLength in Gap : 23.4524 cm +- 6.81929 cm ------------------------------------------------------------ ----> print histograms statistic -EAbs: mean = 188.855 MeV rms = 49.5222 MeV -EGap: mean = 46.6085 MeV rms = 13.5408 MeV -LAbs: mean = 46.6428 cm rms = 12.2754 cm -LGap: mean = 23.6669 cm rms = 6.92205 cm +EAbs: mean = 188.669 MeV rms = 48.7853 MeV +EGap: mean = 46.259 MeV rms = 13.3455 MeV +LAbs: mean = 46.5752 cm rms = 12.122 cm +LGap: mean = 23.4524 cm rms = 6.81929 cm ... create file : ./histo/AnaEx01_h1_EAbs.csv - done ... create file : ./histo/AnaEx01_h1_EGap.csv - done ... create file : ./histo/AnaEx01_h1_LAbs.csv - done diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out b/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out index 0d06a2ba57..9c183e30dd 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out @@ -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 @@ -72,23 +72,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", @@ -188,7 +189,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 ======== @@ -841,6 +842,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 @@ -857,6 +859,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 @@ -931,20 +934,20 @@ LGap: mean = 32.6255 cm rms = 0 fm --------------------End of Run------------------------------ - mean Energy in Absorber : 188.855 MeV +- 49.5222 MeV - mean Energy in Gap : 46.6085 MeV +- 13.5408 MeV + mean Energy in Absorber : 188.669 MeV +- 48.7853 MeV + mean Energy in Gap : 46.259 MeV +- 13.3455 MeV - mean trackLength in Absorber : 46.6428 cm +- 12.2754 cm - mean trackLength in Gap : 23.6669 cm +- 6.92205 cm + mean trackLength in Absorber : 46.5752 cm +- 12.122 cm + mean trackLength in Gap : 23.4524 cm +- 6.81929 cm ------------------------------------------------------------ ----> print histograms statistic -EAbs: mean = 188.855 MeV rms = 49.5222 MeV -EGap: mean = 46.6085 MeV rms = 13.5408 MeV -LAbs: mean = 46.6428 cm rms = 12.2754 cm -LGap: mean = 23.6669 cm rms = 6.92205 cm +EAbs: mean = 188.669 MeV rms = 48.7853 MeV +EGap: mean = 46.259 MeV rms = 13.3455 MeV +LAbs: mean = 46.5752 cm rms = 12.122 cm +LGap: mean = 23.4524 cm rms = 6.81929 cm ... write file : AnaEx01.hdf5 - done ... close file : AnaEx01.hdf5 - done diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-root.out b/examples/extended/analysis/AnaEx01/AnaEx01-root.out index cde641c2bb..309a3144bb 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-root.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-root.out @@ -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 @@ -72,23 +72,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", @@ -188,7 +189,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 ======== @@ -841,6 +842,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 @@ -857,6 +859,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 @@ -934,20 +937,20 @@ LGap: mean = 32.6255 cm rms = 0 fm --------------------End of Run------------------------------ - mean Energy in Absorber : 188.855 MeV +- 49.5222 MeV - mean Energy in Gap : 46.6085 MeV +- 13.5408 MeV + mean Energy in Absorber : 188.669 MeV +- 48.7853 MeV + mean Energy in Gap : 46.259 MeV +- 13.3455 MeV - mean trackLength in Absorber : 46.6428 cm +- 12.2754 cm - mean trackLength in Gap : 23.6669 cm +- 6.92205 cm + mean trackLength in Absorber : 46.5752 cm +- 12.122 cm + mean trackLength in Gap : 23.4524 cm +- 6.81929 cm ------------------------------------------------------------ ----> print histograms statistic -EAbs: mean = 188.855 MeV rms = 49.5222 MeV -EGap: mean = 46.6085 MeV rms = 13.5408 MeV -LAbs: mean = 46.6428 cm rms = 12.2754 cm -LGap: mean = 23.6669 cm rms = 6.92205 cm +EAbs: mean = 188.669 MeV rms = 48.7853 MeV +EGap: mean = 46.259 MeV rms = 13.3455 MeV +LAbs: mean = 46.5752 cm rms = 12.122 cm +LGap: mean = 23.4524 cm rms = 6.81929 cm ... write file : AnaEx01.root - done ... close file : AnaEx01.root - done diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-xml.out b/examples/extended/analysis/AnaEx01/AnaEx01-xml.out index afb938d0de..d0387f9ae9 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-xml.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-xml.out @@ -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 @@ -72,23 +72,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", @@ -188,7 +189,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 ======== @@ -841,6 +842,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 @@ -857,6 +859,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 @@ -939,20 +942,20 @@ LGap: mean = 32.6255 cm rms = 0 fm --------------------End of Run------------------------------ - mean Energy in Absorber : 188.855 MeV +- 49.5222 MeV - mean Energy in Gap : 46.6085 MeV +- 13.5408 MeV + mean Energy in Absorber : 188.669 MeV +- 48.7853 MeV + mean Energy in Gap : 46.259 MeV +- 13.3455 MeV - mean trackLength in Absorber : 46.6428 cm +- 12.2754 cm - mean trackLength in Gap : 23.6669 cm +- 6.92205 cm + mean trackLength in Absorber : 46.5752 cm +- 12.122 cm + mean trackLength in Gap : 23.4524 cm +- 6.81929 cm ------------------------------------------------------------ ----> print histograms statistic -EAbs: mean = 188.855 MeV rms = 49.5222 MeV -EGap: mean = 46.6085 MeV rms = 13.5408 MeV -LAbs: mean = 46.6428 cm rms = 12.2754 cm -LGap: mean = 23.6669 cm rms = 6.92205 cm +EAbs: mean = 188.669 MeV rms = 48.7853 MeV +EGap: mean = 46.259 MeV rms = 13.3455 MeV +LAbs: mean = 46.5752 cm rms = 12.122 cm +LGap: mean = 23.4524 cm rms = 6.81929 cm ... write file : AnaEx01.xml - done ... write file : AnaEx01_nt_Ntuple1.xml - done ... write file : AnaEx01_nt_Ntuple2.xml - done diff --git a/examples/extended/analysis/AnaEx02/.README.txt b/examples/extended/analysis/AnaEx02/.README.txt index 2d12946611..db104f3343 100644 --- a/examples/extended/analysis/AnaEx02/.README.txt +++ b/examples/extended/analysis/AnaEx02/.README.txt @@ -13,7 +13,7 @@ This example shows the usage of histogram and tuple manipulations using ROOT system. Please install ROOT before building this example: - http://root.cern.ch + http://root.cern The example is an adaptation of examples/novice/N03. It describes a simple sampling calorimeter setup. diff --git a/examples/extended/analysis/AnaEx02/AnaEx02.out b/examples/extended/analysis/AnaEx02/AnaEx02.out index 1e6c2fcf2f..296506d646 100644 --- a/examples/extended/analysis/AnaEx02/AnaEx02.out +++ b/examples/extended/analysis/AnaEx02/AnaEx02.out @@ -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 @@ -71,23 +71,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", @@ -187,7 +188,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 ======== @@ -840,6 +841,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 @@ -856,6 +858,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 @@ -924,20 +927,20 @@ LGap: mean = 32.6255 cm rms = 0 fm --------------------End of Run------------------------------ - mean Energy in Absorber : 188.855 MeV +- 49.5222 MeV - mean Energy in Gap : 46.6085 MeV +- 13.5408 MeV + mean Energy in Absorber : 188.669 MeV +- 48.7853 MeV + mean Energy in Gap : 46.259 MeV +- 13.3455 MeV - mean trackLength in Absorber : 46.6428 cm +- 12.2754 cm - mean trackLength in Gap : 23.6669 cm +- 6.92205 cm + mean trackLength in Absorber : 46.5752 cm +- 12.122 cm + mean trackLength in Gap : 23.4524 cm +- 6.81929 cm ------------------------------------------------------------ ----> print histograms statistic -EAbs: mean = 188.855 MeV rms = 49.5222 MeV -EGap: mean = 46.6085 MeV rms = 13.5408 MeV -LAbs: mean = 46.6428 cm rms = 12.2754 cm -LGap: mean = 23.6669 cm rms = 6.92205 cm +EAbs: mean = 188.669 MeV rms = 48.7853 MeV +EGap: mean = 46.259 MeV rms = 13.3455 MeV +LAbs: mean = 46.5752 cm rms = 12.122 cm +LGap: mean = 23.4524 cm rms = 6.81929 cm ----> Histograms and ntuples are saved diff --git a/examples/extended/analysis/AnaEx02/README b/examples/extended/analysis/AnaEx02/README index 5971d91bd4..c78aa6f3a9 100644 --- a/examples/extended/analysis/AnaEx02/README +++ b/examples/extended/analysis/AnaEx02/README @@ -15,7 +15,7 @@ This example shows the usage of histogram and tuple manipulations using ROOT system. Please install ROOT before building this example: - http://root.cern.ch + http://root.cern The example is an adaptation of examples/novice/N03. It describes a simple sampling calorimeter setup. diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-csv.out b/examples/extended/analysis/AnaEx03/AnaEx03-csv.out index 165c8a347f..f6b86956c3 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-csv.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-csv.out @@ -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 @@ -64,23 +64,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", @@ -166,7 +167,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 ======== @@ -819,6 +820,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 @@ -835,6 +837,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 @@ -918,10 +921,10 @@ LAbs: mean = 13.2058 cm rms = 4.88221 mm ----> print histograms statistic -EAbs: mean = 275.367 MeV rms = 9.55541 MeV -EGap2: mean = 14.2057 MeV rms = 5.79917 MeV -LAbs: mean = 19.8712 cm rms = 7.5499 mm -LGap2: mean = 7.08008 cm rms = 2.93135 cm +EAbs: mean = 273.332 MeV rms = 8.75548 MeV +EGap2: mean = 14.9832 MeV rms = 4.18697 MeV +LAbs: mean = 19.5974 cm rms = 6.76993 mm +LGap2: mean = 7.4865 cm rms = 2.18857 cm ... close file : ./histo/e-_h1_EAbs.csv - done ... close file : ./histo/e-_h1_EAbs_v1.csv - done ... close file : ./histo/e-_h1_EAbs_v2.csv - done @@ -957,10 +960,10 @@ LGap2: mean = 7.08008 cm rms = 2.93135 cm ----> print histograms statistic -EAbs: mean = 214.274 MeV rms = 46.4144 MeV -EGap2: mean = 19.7045 MeV rms = 9.24047 MeV -LAbs: mean = 9.05957 cm rms = 2.3581 cm -LGap2: mean = 4.54428 cm rms = 1.38333 cm +EAbs: mean = 205.168 MeV rms = 42.1014 MeV +EGap2: mean = 18.2936 MeV rms = 7.11512 MeV +LAbs: mean = 8.71723 cm rms = 2.20834 cm +LGap2: mean = 4.43677 cm rms = 1.44086 cm ### Run 4 start. ---> Begin of event: 0 @@ -985,10 +988,10 @@ LGap2: mean = 4.54428 cm rms = 1.38333 cm ----> print histograms statistic -EAbs: mean = 187.097 MeV rms = 57.6177 MeV -EGap2: mean = 16.7878 MeV rms = 8.81072 MeV -LAbs: mean = 8.8331 cm rms = 2.6403 cm -LGap2: mean = 4.46388 cm rms = 1.5686 cm +EAbs: mean = 194.62 MeV rms = 44.3204 MeV +EGap2: mean = 15.8381 MeV rms = 5.63046 MeV +LAbs: mean = 9.57909 cm rms = 1.85301 cm +LGap2: mean = 4.86042 cm rms = 1.29463 cm ... close file : ./histo/proton_h1_EAbs.csv - done ... close file : ./histo/proton_h1_EAbs_v1.csv - done ... close file : ./histo/proton_h1_EGap2.csv - done diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out b/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out index a0b5864186..e5d41bccd2 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out @@ -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 @@ -64,23 +64,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", @@ -165,7 +166,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 ======== @@ -818,6 +819,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 @@ -834,6 +836,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 @@ -874,10 +877,10 @@ LAbs: mean = 13.2058 cm rms = 4.88221 mm ----> print histograms statistic -EAbs: mean = 275.367 MeV rms = 9.55541 MeV -EGap2: mean = 14.2057 MeV rms = 5.79917 MeV -LAbs: mean = 19.8712 cm rms = 7.5499 mm -LGap2: mean = 7.08008 cm rms = 2.93135 cm +EAbs: mean = 273.332 MeV rms = 8.75548 MeV +EGap2: mean = 14.9832 MeV rms = 4.18697 MeV +LAbs: mean = 19.5974 cm rms = 6.76993 mm +LGap2: mean = 7.4865 cm rms = 2.18857 cm ... close file : e-.hdf5 - done ... create file : proton.hdf5 - done ... open analysis file : proton.hdf5 - done @@ -888,10 +891,10 @@ LGap2: mean = 7.08008 cm rms = 2.93135 cm ----> print histograms statistic -EAbs: mean = 214.274 MeV rms = 46.4144 MeV -EGap2: mean = 19.7045 MeV rms = 9.24047 MeV -LAbs: mean = 9.05957 cm rms = 2.3581 cm -LGap2: mean = 4.54428 cm rms = 1.38333 cm +EAbs: mean = 205.168 MeV rms = 42.1014 MeV +EGap2: mean = 18.2936 MeV rms = 7.11512 MeV +LAbs: mean = 8.71723 cm rms = 2.20834 cm +LGap2: mean = 4.43677 cm rms = 1.44086 cm ### Run 4 start. ---> Begin of event: 0 @@ -899,10 +902,10 @@ LGap2: mean = 4.54428 cm rms = 1.38333 cm ----> print histograms statistic -EAbs: mean = 187.097 MeV rms = 57.6177 MeV -EGap2: mean = 16.7878 MeV rms = 8.81072 MeV -LAbs: mean = 8.8331 cm rms = 2.6403 cm -LGap2: mean = 4.46388 cm rms = 1.5686 cm +EAbs: mean = 194.62 MeV rms = 44.3204 MeV +EGap2: mean = 15.8381 MeV rms = 5.63046 MeV +LAbs: mean = 9.57909 cm rms = 1.85301 cm +LGap2: mean = 4.86042 cm rms = 1.29463 cm ... close file : proton.hdf5 - done Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-root.out b/examples/extended/analysis/AnaEx03/AnaEx03-root.out index a657a4e0cf..9f97591658 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-root.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-root.out @@ -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 @@ -64,23 +64,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", @@ -167,7 +168,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 ======== @@ -820,6 +821,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 @@ -836,6 +838,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 @@ -876,10 +879,10 @@ LAbs: mean = 13.2058 cm rms = 4.88221 mm ----> print histograms statistic -EAbs: mean = 275.367 MeV rms = 9.55541 MeV -EGap2: mean = 14.2057 MeV rms = 5.79917 MeV -LAbs: mean = 19.8712 cm rms = 7.5499 mm -LGap2: mean = 7.08008 cm rms = 2.93135 cm +EAbs: mean = 273.332 MeV rms = 8.75548 MeV +EGap2: mean = 14.9832 MeV rms = 4.18697 MeV +LAbs: mean = 19.5974 cm rms = 6.76993 mm +LGap2: mean = 7.4865 cm rms = 2.18857 cm ... close file : e-.root - done ... create file : proton.root - done ... open analysis file : proton.root - done @@ -891,10 +894,10 @@ LGap2: mean = 7.08008 cm rms = 2.93135 cm ----> print histograms statistic -EAbs: mean = 214.274 MeV rms = 46.4144 MeV -EGap2: mean = 19.7045 MeV rms = 9.24047 MeV -LAbs: mean = 9.05957 cm rms = 2.3581 cm -LGap2: mean = 4.54428 cm rms = 1.38333 cm +EAbs: mean = 205.168 MeV rms = 42.1014 MeV +EGap2: mean = 18.2936 MeV rms = 7.11512 MeV +LAbs: mean = 8.71723 cm rms = 2.20834 cm +LGap2: mean = 4.43677 cm rms = 1.44086 cm ### Run 4 start. ---> Begin of event: 0 @@ -902,10 +905,10 @@ LGap2: mean = 4.54428 cm rms = 1.38333 cm ----> print histograms statistic -EAbs: mean = 187.097 MeV rms = 57.6177 MeV -EGap2: mean = 16.7878 MeV rms = 8.81072 MeV -LAbs: mean = 8.8331 cm rms = 2.6403 cm -LGap2: mean = 4.46388 cm rms = 1.5686 cm +EAbs: mean = 194.62 MeV rms = 44.3204 MeV +EGap2: mean = 15.8381 MeV rms = 5.63046 MeV +LAbs: mean = 9.57909 cm rms = 1.85301 cm +LGap2: mean = 4.86042 cm rms = 1.29463 cm ... close file : proton.root - done Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-xml.out b/examples/extended/analysis/AnaEx03/AnaEx03-xml.out index 61a4e0bcd0..a679da6639 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-xml.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-xml.out @@ -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 @@ -64,23 +64,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", @@ -167,7 +168,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 ======== @@ -820,6 +821,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 @@ -836,6 +838,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 @@ -882,10 +885,10 @@ LAbs: mean = 13.2058 cm rms = 4.88221 mm ----> print histograms statistic -EAbs: mean = 275.367 MeV rms = 9.55541 MeV -EGap2: mean = 14.2057 MeV rms = 5.79917 MeV -LAbs: mean = 19.8712 cm rms = 7.5499 mm -LGap2: mean = 7.08008 cm rms = 2.93135 cm +EAbs: mean = 273.332 MeV rms = 8.75548 MeV +EGap2: mean = 14.9832 MeV rms = 4.18697 MeV +LAbs: mean = 19.5974 cm rms = 6.76993 mm +LGap2: mean = 7.4865 cm rms = 2.18857 cm ... close file : e-.xml - done ... close file : e-_nt_Ntuple1.xml - done ... close file : e-_nt_Ntuple2.xml - done @@ -902,10 +905,10 @@ LGap2: mean = 7.08008 cm rms = 2.93135 cm ----> print histograms statistic -EAbs: mean = 214.274 MeV rms = 46.4144 MeV -EGap2: mean = 19.7045 MeV rms = 9.24047 MeV -LAbs: mean = 9.05957 cm rms = 2.3581 cm -LGap2: mean = 4.54428 cm rms = 1.38333 cm +EAbs: mean = 205.168 MeV rms = 42.1014 MeV +EGap2: mean = 18.2936 MeV rms = 7.11512 MeV +LAbs: mean = 8.71723 cm rms = 2.20834 cm +LGap2: mean = 4.43677 cm rms = 1.44086 cm ### Run 4 start. ---> Begin of event: 0 @@ -915,10 +918,10 @@ LGap2: mean = 4.54428 cm rms = 1.38333 cm ----> print histograms statistic -EAbs: mean = 187.097 MeV rms = 57.6177 MeV -EGap2: mean = 16.7878 MeV rms = 8.81072 MeV -LAbs: mean = 8.8331 cm rms = 2.6403 cm -LGap2: mean = 4.46388 cm rms = 1.5686 cm +EAbs: mean = 194.62 MeV rms = 44.3204 MeV +EGap2: mean = 15.8381 MeV rms = 5.63046 MeV +LAbs: mean = 9.57909 cm rms = 1.85301 cm +LGap2: mean = 4.86042 cm rms = 1.29463 cm ... close file : proton.xml - done ... close file : proton_nt_Ntuple1.xml - done ... close file : proton_nt_Ntuple2.xml - done diff --git a/examples/extended/analysis/B1Con/exampleB01Con.out b/examples/extended/analysis/B1Con/exampleB01Con.out index 4a724d3594..373d46a154 100644 --- a/examples/extended/analysis/B1Con/exampleB01Con.out +++ b/examples/extended/analysis/B1Con/exampleB01Con.out @@ -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", @@ -99,6 +100,7 @@ Checking overlaps for volume Shape2:0 (G4Trd) ... OK! Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -126,7 +128,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 ======== @@ -539,6 +541,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -689,6 +705,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -698,6 +717,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -719,19 +741,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -742,6 +751,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -752,6 +764,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -785,6 +800,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 @@ -801,6 +817,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 @@ -823,13 +840,13 @@ G4ConvergenceTester Output Result of DOSE_TALLY R = 0.0862315 SHIFT = 1.72861e-13 VOV = 0.00854466 - FOM = 13448.3 + FOM = 6724.16 THE LARGEST SCORE = 5.54337e-13 and it happened at 366th event Affected Mean = 4.60558e-14 and its ratio to original is 1.01116 Affected VAR = 1.56695e-26 and its ratio to original is 1.01576 Affected R = 0.0859065 and its ratio to original is 0.99623 Affected SHIFT = 1.73445e-13 and its ratio to original is 1.00338 - Affected FOM = 13448.3 and its ratio to original is 1 + Affected FOM = 6724.16 and its ratio to original is 1 MEAN distribution is not RANDOM r follows 1/std::sqrt(N) r is monotonically decrease @@ -843,22 +860,22 @@ This result passes 5 / 8 Convergence Test. G4ConvergenceTester Output History of DOSE_TALLY i/16 till_ith mean var sd r vov fom shift e r2eff r2int - 1 62 3.17379e-14 1.29473e-26 1.13786e-13 0.451691 0.226367 490.137 2.0412e-13 0.142857 0.0952381 0.105548 - 2 124 3.30804e-14 1.06384e-26 1.03143e-13 0.278877 0.105732 1285.8 1.73258e-13 0.168 0.039619 0.0375311 - 3 187 3.94836e-14 1.26526e-26 1.12484e-13 0.207776 0.0559014 2316.38 1.69917e-13 0.191489 0.0224586 0.0204825 - 4 249 3.97276e-14 1.30204e-26 1.14107e-13 0.181656 0.0405982 3030.41 1.71002e-13 0.184 0.0177391 0.0151277 - 5 312 3.82407e-14 1.22829e-26 1.10828e-13 0.163814 0.0339478 3726.46 1.69776e-13 0.185304 0.0140465 0.0127029 - 6 374 3.89136e-14 1.2719e-26 1.12778e-13 0.149661 0.0287795 4464.59 1.742e-13 0.184 0.0118261 0.0105126 - 7 437 3.80559e-14 1.25301e-26 1.11938e-13 0.140546 0.0252541 5062.49 1.75552e-13 0.191781 0.00962166 0.0100864 - 8 499 4.16767e-14 1.38768e-26 1.178e-13 0.126406 0.019678 6258.43 1.74791e-13 0.202 0.00790099 0.00804549 - 9 562 4.17944e-14 1.4095e-26 1.18722e-13 0.119718 0.0172617 6977.18 1.75728e-13 0.198934 0.00715237 0.00715461 - 10 624 4.33469e-14 1.47176e-26 1.21316e-13 0.111949 0.0146904 7979.21 1.74757e-13 0.1968 0.00653008 0.00598243 - 11 687 4.40834e-14 1.50155e-26 1.22538e-13 0.105974 0.0130273 8904.31 1.74616e-13 0.196221 0.00595392 0.00526027 - 12 749 4.57566e-14 1.56694e-26 1.25178e-13 0.0998947 0.0112546 10021.1 1.73389e-13 0.198667 0.00537808 0.00458757 - 13 812 4.50245e-14 1.54897e-26 1.24458e-13 0.0969456 0.0105987 10640 1.74374e-13 0.195572 0.0050593 0.0043276 - 14 874 4.57357e-14 1.56286e-26 1.25015e-13 0.0924063 0.00966482 11711.1 1.7349e-13 0.2 0.00457143 0.00395773 - 15 937 4.56765e-14 1.55286e-26 1.24614e-13 0.0890783 0.0090895 12602.5 1.73294e-13 0.198294 0.00431025 0.00361624 - 16 999 4.55475e-14 1.54263e-26 1.24203e-13 0.0862315 0.00854466 13448.3 1.72861e-13 0.198 0.00405051 0.00337794 + 1 62 3.17379e-14 1.29473e-26 1.13786e-13 0.451691 0.226367 245.069 2.0412e-13 0.142857 0.0952381 0.105548 + 2 124 3.30804e-14 1.06384e-26 1.03143e-13 0.278877 0.105732 642.902 1.73258e-13 0.168 0.039619 0.0375311 + 3 187 3.94836e-14 1.26526e-26 1.12484e-13 0.207776 0.0559014 1158.19 1.69917e-13 0.191489 0.0224586 0.0204825 + 4 249 3.97276e-14 1.30204e-26 1.14107e-13 0.181656 0.0405982 1515.2 1.71002e-13 0.184 0.0177391 0.0151277 + 5 312 3.82407e-14 1.22829e-26 1.10828e-13 0.163814 0.0339478 1863.23 1.69776e-13 0.185304 0.0140465 0.0127029 + 6 374 3.89136e-14 1.2719e-26 1.12778e-13 0.149661 0.0287795 2232.3 1.742e-13 0.184 0.0118261 0.0105126 + 7 437 3.80559e-14 1.25301e-26 1.11938e-13 0.140546 0.0252541 2531.24 1.75552e-13 0.191781 0.00962166 0.0100864 + 8 499 4.16767e-14 1.38768e-26 1.178e-13 0.126406 0.019678 3129.22 1.74791e-13 0.202 0.00790099 0.00804549 + 9 562 4.17944e-14 1.4095e-26 1.18722e-13 0.119718 0.0172617 3488.59 1.75728e-13 0.198934 0.00715237 0.00715461 + 10 624 4.33469e-14 1.47176e-26 1.21316e-13 0.111949 0.0146904 3989.61 1.74757e-13 0.1968 0.00653008 0.00598243 + 11 687 4.40834e-14 1.50155e-26 1.22538e-13 0.105974 0.0130273 4452.16 1.74616e-13 0.196221 0.00595392 0.00526027 + 12 749 4.57566e-14 1.56694e-26 1.25178e-13 0.0998947 0.0112546 5010.54 1.73389e-13 0.198667 0.00537808 0.00458757 + 13 812 4.50245e-14 1.54897e-26 1.24458e-13 0.0969456 0.0105987 5320.02 1.74374e-13 0.195572 0.0050593 0.0043276 + 14 874 4.57357e-14 1.56286e-26 1.25015e-13 0.0924063 0.00966482 5855.54 1.7349e-13 0.2 0.00457143 0.00395773 + 15 937 4.56765e-14 1.55286e-26 1.24614e-13 0.0890783 0.0090895 6301.24 1.73294e-13 0.198294 0.00431025 0.00361624 + 16 999 4.55475e-14 1.54263e-26 1.24203e-13 0.0862315 0.00854466 6724.16 1.72861e-13 0.198 0.00405051 0.00337794 --------------------End of Global Run----------------------- The run consists of 1000 gamma of 6 MeV @@ -867,24 +884,24 @@ i/16 till_ith mean var sd r vov G4ConvergenceTester Output Result of DOSE_TALLY - EFFICIENCY = 0.636 - MEAN = 5.20411e-12 - VAR = 2.16243e-23 - SD = 4.6502e-12 - R = 0.0282569 - SHIFT = -1.44705e-13 - VOV = 0.000156343 - FOM = 9634.01 -THE LARGEST SCORE = 1.07852e-11 and it happened at 845th event - Affected Mean = 5.20969e-12 and its ratio to original is 1.00107 - Affected VAR = 2.16338e-23 and its ratio to original is 1.00044 - Affected R = 0.0282188 and its ratio to original is 0.99865 - Affected SHIFT = -1.48838e-13 and its ratio to original is 1.02856 - Affected FOM = 9634.01 and its ratio to original is 1 + EFFICIENCY = 0.61 + MEAN = 4.94438e-12 + VAR = 2.13323e-23 + SD = 4.61869e-12 + R = 0.0295398 + SHIFT = 1.06883e-13 + VOV = 0.000169442 + FOM = 9550.01 +THE LARGEST SCORE = 1.07261e-11 and it happened at 950th event + Affected Mean = 4.95015e-12 and its ratio to original is 1.00117 + Affected VAR = 2.13444e-23 and its ratio to original is 1.00057 + Affected R = 0.0294989 and its ratio to original is 0.998616 + Affected SHIFT = 1.02583e-13 and its ratio to original is 0.959775 + Affected FOM = 9550.01 and its ratio to original is 1 MEAN distribution is RANDOM r follows 1/std::sqrt(N) r is monotonically decrease -r is less than 0.1. r = 0.0282569 +r is less than 0.1. r = 0.0295398 VOV follows 1/std::sqrt(N) VOV is monotonically decrease FOM distribution is not RANDOM @@ -894,26 +911,26 @@ This result passes 6 / 8 Convergence Test. G4ConvergenceTester Output History of DOSE_TALLY i/16 till_ith mean var sd r vov fom shift e r2eff r2int - 1 62 5.17001e-12 1.96868e-23 4.43698e-12 0.108125 0.00444842 657.967 -1.46017e-13 0.666667 0.00793651 0.00356894 - 2 124 5.48568e-12 2.06461e-23 4.5438e-12 0.0740856 0.00199883 1401.49 -3.91429e-13 0.672 0.00390476 0.00154 - 3 187 5.64378e-12 2.10694e-23 4.59014e-12 0.0593168 0.00121232 2186.26 -5.25797e-13 0.68617 0.00243279 0.00106697 - 4 249 5.50828e-12 2.07921e-23 4.55983e-12 0.0523555 0.000898412 2806.28 -4.24174e-13 0.672 0.00195238 0.000777756 - 5 312 5.33403e-12 2.11269e-23 4.59641e-12 0.0487069 0.000604754 3242.47 -2.7013e-13 0.648562 0.00173122 0.000633561 - 6 374 5.39783e-12 2.11503e-23 4.59894e-12 0.043997 0.000520265 3973.84 -3.16177e-13 0.656 0.00139837 0.0005322 - 7 437 5.42308e-12 2.12921e-23 4.61434e-12 0.0406562 0.000436294 4653.75 -3.29925e-13 0.657534 0.00118912 0.000460034 - 8 499 5.27489e-12 2.15175e-23 4.6387e-12 0.0393276 0.000337048 4973.49 -1.89348e-13 0.642 0.00111526 0.000428305 - 9 562 5.22693e-12 2.14879e-23 4.6355e-12 0.0373763 0.000292163 5506.35 -1.50496e-13 0.637655 0.00100932 0.000385192 - 10 624 5.17297e-12 2.15077e-23 4.63764e-12 0.0358606 0.000252154 5981.67 -1.17855e-13 0.632 0.000931646 0.000352278 - 11 687 5.18432e-12 2.15591e-23 4.64318e-12 0.0341452 0.000230119 6597.76 -1.25421e-13 0.632267 0.000845362 0.00031884 - 12 749 5.28939e-12 2.15197e-23 4.63894e-12 0.0320245 0.000220186 7500.52 -2.22956e-13 0.644 0.00073706 0.000287142 - 13 812 5.21542e-12 2.15542e-23 4.64265e-12 0.0312199 0.000197387 7892.12 -1.53479e-13 0.635916 0.000704224 0.00026926 - 14 874 5.20525e-12 2.14738e-23 4.63399e-12 0.030096 0.000187892 8492.55 -1.42837e-13 0.637714 0.000649258 0.000255479 - 15 937 5.22623e-12 2.15556e-23 4.6428e-12 0.0290062 0.000172968 9142.74 -1.63337e-13 0.637527 0.000606143 0.000234317 - 16 999 5.20411e-12 2.16243e-23 4.6502e-12 0.0282569 0.000156343 9634.01 -1.44705e-13 0.636 0.000572327 0.000225328 + 1 62 4.45233e-12 2.00136e-23 4.47366e-12 0.126592 0.00555513 520.005 6.10343e-13 0.587302 0.011154 0.00461709 + 2 124 4.70979e-12 2.14073e-23 4.62681e-12 0.0878668 0.00156391 1079.37 3.15332e-13 0.568 0.00608451 0.0015743 + 3 187 5.04552e-12 2.17319e-23 4.66174e-12 0.0673851 0.000891632 1835.23 8.74033e-15 0.590426 0.00368986 0.000826733 + 4 249 5.1147e-12 2.16033e-23 4.64794e-12 0.0574738 0.000677301 2522.78 -5.43345e-14 0.6 0.00266667 0.000623358 + 5 312 5.01691e-12 2.12158e-23 4.60607e-12 0.0518945 0.000571301 3094.39 2.63397e-14 0.603834 0.00209612 0.000588323 + 6 374 4.9734e-12 2.13808e-23 4.62394e-12 0.0480113 0.00045469 3615.2 7.68061e-14 0.605333 0.00173862 0.000560315 + 7 437 5.00036e-12 2.16669e-23 4.65477e-12 0.0444795 0.000358603 4212.1 5.50795e-14 0.605023 0.00149048 0.000483429 + 8 499 5.12317e-12 2.14861e-23 4.63531e-12 0.0404627 0.00033282 5089.9 -6.70345e-14 0.616 0.00124675 0.000387201 + 9 562 5.09662e-12 2.15978e-23 4.64735e-12 0.0384299 0.000279788 5642.62 -4.50432e-14 0.611012 0.00113078 0.000343455 + 10 624 5.04725e-12 2.15547e-23 4.6427e-12 0.0367939 0.000254099 6155.55 1.68697e-16 0.6096 0.00102467 0.000326954 + 11 687 5.03741e-12 2.1526e-23 4.63961e-12 0.0351139 0.000232749 6758.65 1.37868e-14 0.609012 0.000933146 0.000298049 + 12 749 5.01635e-12 2.13055e-23 4.61579e-12 0.0335991 0.000227201 7381.82 3.63585e-14 0.613333 0.00084058 0.000286814 + 13 812 5.02263e-12 2.1448e-23 4.6312e-12 0.0323383 0.000200505 7968.64 2.89454e-14 0.611316 0.00078206 0.000262419 + 14 874 4.95133e-12 2.14422e-23 4.63057e-12 0.0316162 0.000188358 8336.82 9.41875e-14 0.603429 0.000751082 0.000247357 + 15 937 4.93725e-12 2.14216e-23 4.62835e-12 0.0306083 0.000177676 8894.88 1.1284e-13 0.604478 0.00069757 0.000238299 + 16 999 4.94438e-12 2.13323e-23 4.61869e-12 0.0295398 0.000169442 9550.01 1.06883e-13 0.61 0.000639344 0.000232383 --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Cumulated dose per run, in scoring volume : 5.20411 nanoGy rms = 146.979 picoGy + Cumulated dose per run, in scoring volume : 4.94438 nanoGy rms = 145.983 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/extended/biasing/B01/exampleB01.out b/examples/extended/biasing/B01/exampleB01.out index abc6f3feba..68ed695f17 100644 --- a/examples/extended/biasing/B01/exampleB01.out +++ b/examples/extended/biasing/B01/exampleB01.out @@ -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 @@ -130,7 +130,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,6 +783,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 @@ -799,6 +800,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 @@ -829,24 +831,24 @@ Max 2J for sampling of angular correlations 10 ============================================================= ============================================================= Volume | Tr.Entering | Population | Collisions | Coll*WGT | NumWGTedE | FluxWGTedE | Av.Tr.WGT | SL | SLW | SLW_v | SLWE | SLWE_v | - cell_00 | 38 | 132 | 38 | 38 | 0.0195807 | 2.2907 | 1 | 5887.6 | 5887.6 | 26929.1 | 13486.7 | 527.292 | - cell_01 | 153 | 176 | 528 | 528 | 0.0206121 | 4.58323 | 1 | 24923.5 | 24923.5 | 154872 | 114230 | 3192.24 | - cell_02 | 194 | 306 | 1397 | 698.5 | 0.0126136 | 2.78591 | 0.5 | 51975.5 | 25987.7 | 186162 | 72399.6 | 2348.17 | - cell_03 | 254 | 396 | 2232 | 558 | 0.00665346 | 1.92875 | 0.25 | 73299.7 | 18324.9 | 194161 | 35344.2 | 1291.84 | - cell_04 | 275 | 403 | 2747 | 343.375 | 0.00495462 | 1.41524 | 0.125 | 82413.9 | 10301.7 | 116333 | 14579.4 | 576.387 | - cell_05 | 278 | 390 | 2598 | 162.375 | 0.00285599 | 1.19123 | 0.0625 | 73414.1 | 4588.38 | 76703.2 | 5465.8 | 219.063 | - cell_06 | 282 | 420 | 2491 | 77.8438 | 0.00304019 | 1.25847 | 0.03125 | 73240.4 | 2288.76 | 36773.6 | 2880.35 | 111.799 | - cell_07 | 266 | 395 | 2499 | 39.0469 | 0.00352251 | 1.25171 | 0.015625 | 73379.7 | 1146.56 | 16647.4 | 1435.16 | 58.6406 | - cell_08 | 229 | 334 | 2263 | 17.6797 | 0.0032296 | 1.27901 | 0.0078125 | 67169.9 | 524.765 | 8421.69 | 671.181 | 27.1987 | - cell_09 | 203 | 307 | 1816 | 7.09375 | 0.00318909 | 1.38137 | 0.00390625 | 58857.8 | 229.913 | 4043.34 | 317.597 | 12.8946 | - cell_10 | 198 | 280 | 1772 | 3.46094 | 0.00259236 | 1.15025 | 0.00195312 | 54845 | 107.119 | 2092.22 | 123.214 | 5.42377 | - cell_11 | 192 | 278 | 1783 | 1.74121 | 0.00229474 | 0.847057 | 0.000976562 | 49172.1 | 48.0197 | 811.749 | 40.6754 | 1.86275 | - cell_12 | 153 | 230 | 1520 | 0.742188 | 0.00246858 | 0.916844 | 0.000488281 | 42084.6 | 20.5491 | 352.963 | 18.8403 | 0.871318 | - cell_13 | 115 | 169 | 975 | 0.238037 | 0.00341274 | 1.235 | 0.000244141 | 30944.6 | 7.55484 | 115.636 | 9.33021 | 0.394636 | - cell_14 | 88 | 143 | 868 | 0.105957 | 0.0045414 | 1.40224 | 0.00012207 | 27317.2 | 3.33462 | 44.1532 | 4.67593 | 0.200517 | - cell_15 | 78 | 131 | 760 | 0.0463867 | 0.00286164 | 1.11449 | 6.10352e-05 | 23461 | 1.43195 | 23.0511 | 1.59589 | 0.0659639 | - cell_16 | 75 | 101 | 618 | 0.0188599 | 0.00234611 | 1.24366 | 3.05176e-05 | 18928.1 | 0.577641 | 12.8038 | 0.71839 | 0.0300392 | - cell_17 | 60 | 90 | 618 | 0.00942993 | 0.00364854 | 1.1418 | 1.52588e-05 | 17680.8 | 0.269787 | 3.50852 | 0.308043 | 0.012801 | - cell_18 | 36 | 68 | 508 | 0.00387573 | 0.0025067 | 1.34519 | 7.62939e-06 | 14744.2 | 0.112489 | 2.4427 | 0.15132 | 0.00612312 | - cell_19 | 29 | 29 | 29 | 0.000221252 | 0.00873769 | 1.51082 | 7.62939e-06 | 5298.78 | 0.0404265 | 0.30787 | 0.0610771 | 0.00269008 | + cell_00 | 42 | 135 | 42 | 42 | 0.0317502 | 2.22962 | 1 | 7478.3 | 7478.3 | 20415.1 | 16673.8 | 648.186 | + cell_01 | 154 | 188 | 547 | 547 | 0.0180935 | 4.46368 | 1 | 23981 | 23981 | 168470 | 107043 | 3048.22 | + cell_02 | 178 | 290 | 1380 | 690 | 0.00993797 | 2.59424 | 0.5 | 48356.8 | 24178.4 | 206415 | 62724.5 | 2051.34 | + cell_03 | 230 | 364 | 2044 | 511 | 0.00539548 | 1.73602 | 0.25 | 64777.8 | 16194.4 | 191719 | 28113.9 | 1034.42 | + cell_04 | 261 | 384 | 2520 | 315 | 0.0043389 | 1.41988 | 0.125 | 76425.8 | 9553.23 | 123981 | 13564.4 | 537.941 | + cell_05 | 287 | 394 | 2665 | 166.562 | 0.00339648 | 1.22709 | 0.0625 | 75838.4 | 4739.9 | 68390.1 | 5816.27 | 232.286 | + cell_06 | 274 | 410 | 2389 | 74.6562 | 0.00330712 | 1.35555 | 0.03125 | 71575 | 2236.72 | 35159.1 | 3031.98 | 116.275 | + cell_07 | 259 | 379 | 2272 | 35.5 | 0.00356699 | 1.49924 | 0.015625 | 67788 | 1059.19 | 16515 | 1587.98 | 58.9087 | + cell_08 | 230 | 324 | 2060 | 16.0938 | 0.00330666 | 1.3122 | 0.0078125 | 62329.7 | 486.95 | 7745.85 | 638.977 | 25.6129 | + cell_09 | 215 | 313 | 2268 | 8.85938 | 0.00301604 | 1.09891 | 0.00390625 | 67467.2 | 263.544 | 4183.77 | 289.611 | 12.6184 | + cell_10 | 191 | 283 | 1684 | 3.28906 | 0.00284567 | 1.15712 | 0.00195312 | 51399.5 | 100.39 | 1751.63 | 116.162 | 4.98455 | + cell_11 | 172 | 244 | 1554 | 1.51758 | 0.00251439 | 1.01631 | 0.000976562 | 45004.7 | 43.9499 | 765.758 | 44.6665 | 1.92541 | + cell_12 | 138 | 214 | 1394 | 0.680664 | 0.00232762 | 0.928916 | 0.000488281 | 38447.6 | 18.7733 | 354.005 | 17.4388 | 0.823989 | + cell_13 | 105 | 156 | 942 | 0.22998 | 0.00315001 | 0.909085 | 0.000244141 | 28561.4 | 6.973 | 97.3846 | 6.33905 | 0.306763 | + cell_14 | 82 | 130 | 857 | 0.104614 | 0.00266049 | 1.03235 | 0.00012207 | 24637.7 | 3.00753 | 53.9848 | 3.10481 | 0.143626 | + cell_15 | 87 | 121 | 818 | 0.0499268 | 0.00202469 | 0.879023 | 6.10352e-05 | 25104.7 | 1.53227 | 29.8778 | 1.3469 | 0.0604932 | + cell_16 | 75 | 104 | 710 | 0.0216675 | 0.00185943 | 0.711885 | 3.05176e-05 | 19500.8 | 0.595117 | 11.2834 | 0.423655 | 0.0209807 | + cell_17 | 50 | 78 | 450 | 0.00686646 | 0.00110478 | 0.418069 | 1.52588e-05 | 12633.1 | 0.192766 | 4.80085 | 0.0805894 | 0.00530388 | + cell_18 | 22 | 42 | 313 | 0.002388 | 0.0016783 | 0.455892 | 7.62939e-06 | 7999.27 | 0.0610296 | 1.026 | 0.0278229 | 0.00172194 | + cell_19 | 14 | 14 | 14 | 0.000106812 | 0.00231549 | 0.617332 | 7.62939e-06 | 2181.43 | 0.016643 | 0.252348 | 0.0102742 | 0.000584309 | ============================================= diff --git a/examples/extended/biasing/B02/exampleB02.out b/examples/extended/biasing/B02/exampleB02.out index aa0cd12081..069f3be278 100644 --- a/examples/extended/biasing/B02/exampleB02.out +++ b/examples/extended/biasing/B02/exampleB02.out @@ -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 @@ -157,7 +157,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 ======== @@ -810,6 +810,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 @@ -826,6 +827,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 @@ -856,24 +858,24 @@ Max 2J for sampling of angular correlations 10 ============================================================= ============================================================= Volume | Tr.Entering | Population | Collisions | Coll*WGT | NumWGTedE | FluxWGTedE | Av.Tr.WGT | SL | SLW | SLW_v | SLWE | SLWE_v | - cell_00 | 45 | 138 | 0 | 0 | 0.0711905 | 2.35038 | 1 | 8722.33 | 8722.33 | 11062.9 | 20500.8 | 787.571 | - cell_01 | 149 | 176 | 528 | 528 | 0.0257084 | 4.29991 | 1 | 24433.9 | 24433.9 | 114467 | 105064 | 2942.77 | - cell_02 | 177 | 279 | 1398 | 699 | 0.00860137 | 2.8696 | 0.5 | 46758.3 | 23379.1 | 236144 | 67088.8 | 2031.16 | - cell_03 | 250 | 372 | 2046 | 511.5 | 0.00486618 | 1.97795 | 0.25 | 66599.2 | 16649.8 | 225947 | 32932.5 | 1099.5 | - cell_04 | 280 | 409 | 2356 | 294.5 | 0.00532227 | 1.92865 | 0.125 | 75079.3 | 9384.91 | 115811 | 18100.2 | 616.378 | - cell_05 | 290 | 439 | 2521 | 157.562 | 0.0045664 | 1.88574 | 0.0625 | 82665.5 | 5166.6 | 75715.1 | 9742.87 | 345.745 | - cell_06 | 309 | 464 | 2811 | 87.8438 | 0.00513174 | 1.63816 | 0.03125 | 88131.6 | 2754.11 | 32753.3 | 4511.68 | 168.081 | - cell_07 | 316 | 463 | 3014 | 47.0938 | 0.00369432 | 1.46053 | 0.015625 | 94355.6 | 1474.31 | 22117.5 | 2153.27 | 81.7091 | - cell_08 | 311 | 482 | 3048 | 23.8125 | 0.00362862 | 1.33254 | 0.0078125 | 92493.4 | 722.604 | 10580 | 962.898 | 38.3908 | - cell_09 | 341 | 481 | 3131 | 12.2305 | 0.0035491 | 1.15825 | 0.00390625 | 96337.2 | 376.317 | 5365.04 | 435.868 | 19.0411 | - cell_10 | 383 | 515 | 3666 | 7.16016 | 0.0025684 | 1.0129 | 0.00195312 | 101576 | 198.391 | 3382.9 | 200.951 | 8.68863 | - cell_11 | 335 | 486 | 3313 | 3.23535 | 0.00231612 | 0.909409 | 0.000976562 | 93081.3 | 90.8997 | 1569.48 | 82.665 | 3.63511 | - cell_12 | 286 | 407 | 2809 | 1.37158 | 0.00199429 | 0.987602 | 0.000488281 | 79172.3 | 38.6584 | 843.371 | 38.1791 | 1.68193 | - cell_13 | 268 | 393 | 2485 | 0.606689 | 0.00289541 | 1.13887 | 0.000244141 | 74448.9 | 18.176 | 311.05 | 20.7002 | 0.900617 | - cell_14 | 237 | 359 | 2166 | 0.264404 | 0.00314137 | 1.06267 | 0.00012207 | 64238 | 7.84155 | 119.06 | 8.33301 | 0.374011 | - cell_15 | 227 | 328 | 2008 | 0.122559 | 0.00366694 | 1.14995 | 6.10352e-05 | 61485.5 | 3.75278 | 50.2366 | 4.31551 | 0.184215 | - cell_16 | 230 | 328 | 2444 | 0.074585 | 0.0017261 | 0.890612 | 3.05176e-05 | 66535 | 2.03049 | 43.9721 | 1.80838 | 0.0759005 | - cell_17 | 192 | 280 | 1766 | 0.026947 | 0.00216571 | 1.07315 | 1.52588e-05 | 50670.9 | 0.773177 | 15.371 | 0.829734 | 0.0332893 | - cell_18 | 112 | 215 | 1274 | 0.00971985 | 0.00493986 | 1.50752 | 7.62939e-06 | 40415.4 | 0.308345 | 3.76845 | 0.464836 | 0.0186156 | - cell_19 | 96 | 96 | 0 | 0 | 0.0143739 | 1.75774 | 7.62939e-06 | 15313.9 | 0.116836 | 0.593004 | 0.205367 | 0.00852375 | + cell_00 | 45 | 137 | 0 | 0 | 0.192848 | 3.12656 | 1 | 9549.94 | 9549.94 | 5608.38 | 29858.5 | 1081.56 | + cell_01 | 144 | 178 | 388 | 388 | 0.0186455 | 5.07451 | 1 | 23641.7 | 23641.7 | 178648 | 119970 | 3330.99 | + cell_02 | 165 | 255 | 1504 | 752 | 0.0092135 | 2.5341 | 0.5 | 50775.8 | 25387.9 | 225157 | 64335.4 | 2074.49 | + cell_03 | 206 | 324 | 1859 | 464.75 | 0.00624517 | 1.92716 | 0.25 | 62866.9 | 15716.7 | 171366 | 30288.7 | 1070.21 | + cell_04 | 253 | 385 | 2051 | 256.375 | 0.00556523 | 1.64061 | 0.125 | 66537.4 | 8317.17 | 93132.5 | 13645.2 | 518.304 | + cell_05 | 303 | 443 | 2609 | 163.062 | 0.00370969 | 1.52672 | 0.0625 | 82318.1 | 5144.88 | 82717.1 | 7854.81 | 306.855 | + cell_06 | 312 | 464 | 3265 | 102.031 | 0.00350066 | 1.20523 | 0.03125 | 94242.9 | 2945.09 | 41148.9 | 3549.52 | 144.048 | + cell_07 | 316 | 458 | 3171 | 49.5469 | 0.00335235 | 1.17561 | 0.015625 | 91651.9 | 1432.06 | 20684.8 | 1683.54 | 69.3427 | + cell_08 | 308 | 421 | 2763 | 21.5859 | 0.00298094 | 1.22732 | 0.0078125 | 80097.8 | 625.764 | 10464.5 | 768.014 | 31.1941 | + cell_09 | 316 | 449 | 3053 | 11.9258 | 0.00327999 | 1.19199 | 0.00390625 | 87053.3 | 340.052 | 5140.98 | 405.34 | 16.8623 | + cell_10 | 331 | 454 | 2878 | 5.62109 | 0.00268567 | 1.14499 | 0.00195312 | 84451.7 | 164.945 | 2895.04 | 188.861 | 7.77513 | + cell_11 | 279 | 396 | 2820 | 2.75391 | 0.00236844 | 0.910882 | 0.000976562 | 76852.4 | 75.0512 | 1281.46 | 68.3628 | 3.03506 | + cell_12 | 224 | 311 | 2130 | 1.04004 | 0.00296345 | 1.04813 | 0.000488281 | 61214.1 | 29.8897 | 457.91 | 31.3283 | 1.35699 | + cell_13 | 181 | 279 | 1751 | 0.42749 | 0.0025909 | 1.07668 | 0.000244141 | 51200 | 12.5 | 219.751 | 13.4585 | 0.569352 | + cell_14 | 151 | 231 | 1327 | 0.161987 | 0.00225236 | 1.11343 | 0.00012207 | 40154.2 | 4.90163 | 101.406 | 5.45763 | 0.228402 | + cell_15 | 146 | 210 | 1315 | 0.0802612 | 0.00405225 | 1.17921 | 6.10352e-05 | 41655.5 | 2.54245 | 33.501 | 2.99809 | 0.135754 | + cell_16 | 161 | 225 | 1583 | 0.0483093 | 0.00233692 | 0.866892 | 3.05176e-05 | 44606.4 | 1.36128 | 24.0028 | 1.18008 | 0.0560926 | + cell_17 | 164 | 233 | 1495 | 0.0228119 | 0.0024936 | 0.850822 | 1.52588e-05 | 43364.6 | 0.661691 | 10.6231 | 0.562982 | 0.0264898 | + cell_18 | 96 | 174 | 1034 | 0.00788879 | 0.00238054 | 0.968888 | 7.62939e-06 | 29751.1 | 0.226983 | 4.4227 | 0.219921 | 0.0105284 | + cell_19 | 61 | 61 | 0 | 0 | 0.0168099 | 1.75455 | 7.62939e-06 | 9868.08 | 0.0752875 | 0.350991 | 0.132096 | 0.00590012 | ============================================= diff --git a/examples/extended/biasing/B03/exampleB03.out b/examples/extended/biasing/B03/exampleB03.out index 486b7c8bf4..0384360a3a 100644 --- a/examples/extended/biasing/B03/exampleB03.out +++ b/examples/extended/biasing/B03/exampleB03.out @@ -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 @@ -119,7 +119,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 ======== @@ -516,6 +516,7 @@ hIoni: for pi- XStype:3 SubType=2 ======================================================================= ====== 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 @@ -532,6 +533,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 @@ -560,7 +562,7 @@ Max 2J for sampling of angular correlations 10 *** G4Exception : GeomBias1001 issued by : G4ImportanceAlgorithm::Warning() Calculate() - ipre_over_ipost ! in [0.25, 4]. -ipre_over_ipost = 65536. +ipre_over_ipost = 512. *** This is just a warning message. *** -------- WWWW -------- G4Exception-END --------- WWWW ------- @@ -580,24 +582,24 @@ ipre_over_ipost = 65536. ============================================================= ============================================================= Volume | Tr.Entering | Population | Collisions | Coll*WGT | NumWGTedE | FluxWGTedE | Av.Tr.WGT | SL | SLW | SLW_v | SLWE | SLWE_v | - cell_00 | 42 | 141 | 0 | 0 | 0.0104532 | 2.34982 | 1 | 10204.9 | 10204.9 | 82658.9 | 23979.8 | 864.051 | - cell_01 | 161 | 190 | 413 | 413 | 0.00303776 | 3.91369 | 1 | 27119.6 | 27119.6 | 986178 | 106138 | 2995.77 | - cell_02 | 205 | 326 | 1024 | 512 | 0.00109319 | 2.43342 | 0.5 | 59086 | 29543 | 2.12129e+06 | 71890.6 | 2318.98 | - cell_03 | 349 | 514 | 1748 | 437 | 0.000621394 | 2.03757 | 0.25 | 97931.4 | 24482.9 | 2.68517e+06 | 49885.5 | 1668.55 | - cell_04 | 510 | 761 | 2930 | 366.25 | 0.000408781 | 1.57708 | 0.125 | 148742 | 18592.7 | 2.54973e+06 | 29322.2 | 1042.28 | - cell_05 | 718 | 1004 | 4098 | 256.125 | 0.000277148 | 1.21789 | 0.0625 | 206287 | 12892.9 | 2.16819e+06 | 15702.2 | 600.908 | - cell_06 | 996 | 1309 | 6026 | 188.312 | 0.000201551 | 0.95207 | 0.03125 | 284209 | 8881.53 | 1.71695e+06 | 8455.83 | 346.054 | - cell_07 | 1318 | 1750 | 7861 | 122.828 | 0.000134415 | 0.784211 | 0.015625 | 361926 | 5655.09 | 1.36128e+06 | 4434.79 | 182.977 | - cell_08 | 1634 | 2168 | 10052 | 78.5312 | 0.000121168 | 0.655882 | 0.0078125 | 457071 | 3570.87 | 816590 | 2342.07 | 98.9445 | - cell_09 | 1943 | 2657 | 12412 | 48.4844 | 9.04642e-05 | 0.5681 | 0.00390625 | 542031 | 2117.31 | 583035 | 1202.84 | 52.7438 | - cell_10 | 2173 | 2986 | 14399 | 28.123 | 8.21919e-05 | 0.515693 | 0.00195312 | 632049 | 1234.47 | 345148 | 636.609 | 28.3684 | - cell_11 | 2360 | 3257 | 15136 | 14.7812 | 7.18415e-05 | 0.501696 | 0.000976562 | 671276 | 655.543 | 207363 | 328.883 | 14.8972 | - cell_12 | 2486 | 3484 | 16328 | 7.97266 | 6.43865e-05 | 0.458096 | 0.000488281 | 711451 | 347.388 | 118634 | 159.137 | 7.6384 | - cell_13 | 2709 | 3746 | 17567 | 4.28882 | 7.33185e-05 | 0.431127 | 0.000244141 | 760777 | 185.737 | 54249.9 | 80.0761 | 3.97752 | - cell_14 | 3079 | 4172 | 19447 | 2.3739 | 6.54222e-05 | 0.41275 | 0.00012207 | 853003 | 104.126 | 33180.9 | 42.9782 | 2.17077 | - cell_15 | 3375 | 4629 | 21267 | 1.29803 | 6.46777e-05 | 0.407582 | 6.10352e-05 | 930773 | 56.8099 | 18318.3 | 23.1547 | 1.18479 | - cell_16 | 3443 | 4879 | 22743 | 0.694061 | 6.11005e-05 | 0.380441 | 3.05176e-05 | 983388 | 30.0106 | 9781.89 | 11.4173 | 0.597679 | - cell_17 | 3265 | 4738 | 22135 | 0.337753 | 5.67632e-05 | 0.367527 | 1.52588e-05 | 962355 | 14.6844 | 5042.81 | 5.3969 | 0.286246 | - cell_18 | 2330 | 4337 | 18105 | 0.13813 | 7.32719e-05 | 0.426365 | 7.62939e-06 | 793444 | 6.0535 | 1803.49 | 2.581 | 0.132145 | - cell_19 | 1924 | 1924 | 0 | 0 | 0.00011112 | 0.595209 | 7.62939e-06 | 312664 | 2.38543 | 606.246 | 1.41983 | 0.0673662 | + cell_00 | 47 | 143 | 0 | 0 | 0.00137041 | 1.97497 | 1 | 7755.86 | 7755.86 | 428046 | 15317.6 | 586.598 | + cell_01 | 160 | 183 | 379 | 379 | 0.00184002 | 4.41422 | 1 | 23844.3 | 23844.3 | 1.56345e+06 | 105254 | 2876.78 | + cell_02 | 191 | 303 | 947 | 473.5 | 0.000941386 | 2.53229 | 0.5 | 51994.1 | 25997.1 | 2.21572e+06 | 65832 | 2085.85 | + cell_03 | 328 | 476 | 1584 | 396 | 0.000686521 | 2.02561 | 0.25 | 86456.7 | 21614.2 | 2.16545e+06 | 43781.9 | 1486.63 | + cell_04 | 541 | 722 | 2919 | 364.875 | 0.000394946 | 1.52947 | 0.125 | 150749 | 18843.6 | 2.58864e+06 | 28820.7 | 1022.37 | + cell_05 | 786 | 1074 | 4467 | 279.188 | 0.000231547 | 1.28324 | 0.0625 | 215395 | 13462.2 | 2.73089e+06 | 17275.2 | 632.329 | + cell_06 | 1102 | 1454 | 6474 | 202.312 | 0.000222087 | 0.934631 | 0.03125 | 309455 | 9670.47 | 1.63748e+06 | 9038.32 | 363.662 | + cell_07 | 1466 | 1947 | 9080 | 141.875 | 0.000144583 | 0.710981 | 0.015625 | 413947 | 6467.92 | 1.34334e+06 | 4598.57 | 194.224 | + cell_08 | 1832 | 2408 | 11346 | 88.6406 | 0.000110497 | 0.625618 | 0.0078125 | 511599 | 3996.87 | 975929 | 2500.51 | 107.838 | + cell_09 | 2098 | 2911 | 13144 | 51.3438 | 0.000105493 | 0.60863 | 0.00390625 | 601873 | 2351.06 | 591136 | 1430.93 | 62.3608 | + cell_10 | 2408 | 3381 | 15500 | 30.2734 | 9.46581e-05 | 0.553921 | 0.00195312 | 681469 | 1330.99 | 348364 | 737.266 | 32.9755 | + cell_11 | 2792 | 3786 | 17977 | 17.5557 | 8.97159e-05 | 0.513202 | 0.000976562 | 799492 | 780.754 | 215042 | 400.684 | 19.2927 | + cell_12 | 3178 | 4371 | 20490 | 10.0049 | 7.06709e-05 | 0.451244 | 0.000488281 | 890649 | 434.887 | 136497 | 196.24 | 9.64637 | + cell_13 | 3412 | 4739 | 21881 | 5.34204 | 6.1558e-05 | 0.401855 | 0.000244141 | 948650 | 231.604 | 74411.5 | 93.0713 | 4.58063 | + cell_14 | 3672 | 5130 | 23908 | 2.91846 | 5.69602e-05 | 0.401918 | 0.00012207 | 1.0327e+06 | 126.061 | 43979.5 | 50.6664 | 2.50508 | + cell_15 | 4001 | 5499 | 26001 | 1.58698 | 5.72256e-05 | 0.365016 | 6.10352e-05 | 1.11505e+06 | 68.0574 | 21774.5 | 24.8421 | 1.24606 | + cell_16 | 4194 | 5853 | 27158 | 0.828796 | 5.47325e-05 | 0.381722 | 3.05176e-05 | 1.15911e+06 | 35.3732 | 12359.9 | 13.5027 | 0.676491 | + cell_17 | 4042 | 5835 | 26951 | 0.41124 | 5.40886e-05 | 0.368793 | 1.52588e-05 | 1.15796e+06 | 17.669 | 6146.95 | 6.5162 | 0.33248 | + cell_18 | 2846 | 5286 | 22219 | 0.169518 | 5.99581e-05 | 0.39329 | 7.62939e-06 | 957998 | 7.30894 | 2415.41 | 2.87454 | 0.144823 | + cell_19 | 2310 | 2310 | 0 | 0 | 8.95471e-05 | 0.563512 | 7.62939e-06 | 366521 | 2.79634 | 826.437 | 1.57577 | 0.0740051 | ============================================= diff --git a/examples/extended/biasing/GB01/History b/examples/extended/biasing/GB01/History index 1cede8e7e7..1d356da423 100644 --- a/examples/extended/biasing/GB01/History +++ b/examples/extended/biasing/GB01/History @@ -6,7 +6,7 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB01-V11-02-00) +## 2025-03-10 Igor Semeniouk (GB01-V11-03-00) - Remove unused WITH_GEANT4_UIVIS cmake option - Add vis.mac (copied from GB03) and enable detector visualization on startup - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. diff --git a/examples/extended/biasing/GB01/exampleGB01.cc b/examples/extended/biasing/GB01/exampleGB01.cc index 4cd979e75d..ffa4978267 100644 --- a/examples/extended/biasing/GB01/exampleGB01.cc +++ b/examples/extended/biasing/GB01/exampleGB01.cc @@ -93,17 +93,17 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes - GB01DetectorConstruction* detector = new GB01DetectorConstruction(biasingFlag); + auto detector = new GB01DetectorConstruction(biasingFlag); runManager->SetUserInitialization(detector); // -- Select a physics list: - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- and augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); biasingPhysics->Bias("gamma"); biasingPhysics->Bias("neutron"); biasingPhysics->Bias("kaon0L"); @@ -126,12 +126,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (!ui) // batch mode { diff --git a/examples/extended/biasing/GB01/exampleGB01.out b/examples/extended/biasing/GB01/exampleGB01.out index eeca92115e..e36b5ec8b8 100644 --- a/examples/extended/biasing/GB01/exampleGB01.out +++ b/examples/extended/biasing/GB01/exampleGB01.out @@ -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 @@ -42,23 +42,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", @@ -129,7 +130,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 ======== @@ -782,6 +783,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 @@ -798,6 +800,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 diff --git a/examples/extended/biasing/GB01/include/GB01ActionInitialization.hh b/examples/extended/biasing/GB01/include/GB01ActionInitialization.hh index d2b13fb907..3aed648081 100644 --- a/examples/extended/biasing/GB01/include/GB01ActionInitialization.hh +++ b/examples/extended/biasing/GB01/include/GB01ActionInitialization.hh @@ -39,10 +39,10 @@ class GB01ActionInitialization : public G4VUserActionInitialization { public: GB01ActionInitialization(); - virtual ~GB01ActionInitialization(); + ~GB01ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB01/include/GB01BOptrChangeCrossSection.hh b/examples/extended/biasing/GB01/include/GB01BOptrChangeCrossSection.hh index 574e324cd0..cb10c0cc00 100644 --- a/examples/extended/biasing/GB01/include/GB01BOptrChangeCrossSection.hh +++ b/examples/extended/biasing/GB01/include/GB01BOptrChangeCrossSection.hh @@ -58,29 +58,29 @@ class GB01BOptrChangeCrossSection : public G4VBiasingOperator // -- Constructor: takes the name of the particle type to bias: // ------------------------------------------------------------ GB01BOptrChangeCrossSection(G4String particleToBias, G4String name = "ChangeXS"); - virtual ~GB01BOptrChangeCrossSection(); + ~GB01BOptrChangeCrossSection() override; // -- method called at beginning of run: - virtual void StartRun(); + void StartRun() override; private: // ----------------------------- // -- Mandatory from base class: // ----------------------------- // -- This method returns the biasing operation that will bias the physics process occurence. - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track* track, - const G4BiasingProcessInterface* callingProcess); + const G4BiasingProcessInterface* callingProcess) override; // -- Methods not used: - virtual G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* + ProposeFinalStateBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } - virtual G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* + ProposeNonPhysicsBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } private: @@ -91,12 +91,12 @@ class GB01BOptrChangeCrossSection : public G4VBiasingOperator // -- This method is called to inform the operator that a proposed operation has been applied. // -- In the present case, it means that a physical interaction occured (interaction at // -- PostStepDoIt level): - virtual void OperationApplied(const G4BiasingProcessInterface* callingProcess, - G4BiasingAppliedCase biasingCase, - G4VBiasingOperation* occurenceOperationApplied, - G4double weightForOccurenceInteraction, - G4VBiasingOperation* finalStateOperationApplied, - const G4VParticleChange* particleChangeProduced); + void OperationApplied(const G4BiasingProcessInterface* callingProcess, + G4BiasingAppliedCase biasingCase, + G4VBiasingOperation* occurenceOperationApplied, + G4double weightForOccurenceInteraction, + G4VBiasingOperation* finalStateOperationApplied, + const G4VParticleChange* particleChangeProduced) override; private: // -- List of associations between processes and biasing operations: diff --git a/examples/extended/biasing/GB01/include/GB01BOptrMultiParticleChangeCrossSection.hh b/examples/extended/biasing/GB01/include/GB01BOptrMultiParticleChangeCrossSection.hh index 50525d3dd4..4627be14f1 100644 --- a/examples/extended/biasing/GB01/include/GB01BOptrMultiParticleChangeCrossSection.hh +++ b/examples/extended/biasing/GB01/include/GB01BOptrMultiParticleChangeCrossSection.hh @@ -54,7 +54,7 @@ class GB01BOptrMultiParticleChangeCrossSection : public G4VBiasingOperator { public: GB01BOptrMultiParticleChangeCrossSection(); - virtual ~GB01BOptrMultiParticleChangeCrossSection() {} + ~GB01BOptrMultiParticleChangeCrossSection() override = default; // --------------------------------- // -- Method specific to this class: @@ -69,19 +69,19 @@ class GB01BOptrMultiParticleChangeCrossSection : public G4VBiasingOperator // -- Mandatory from base class: // ----------------------------- // -- This method returns a biasing operation that will bias the physics process occurence: - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track* track, - const G4BiasingProcessInterface* callingProcess); + const G4BiasingProcessInterface* callingProcess) override; // -- Methods not used: - virtual G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* + ProposeFinalStateBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } - virtual G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* + ProposeNonPhysicsBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } private: @@ -92,16 +92,16 @@ class GB01BOptrMultiParticleChangeCrossSection : public G4VBiasingOperator // -- This method is called to inform the operator that a proposed operation has been applied. // -- In the present case, it means that a physical interaction occured (interaction at // -- PostStepDoIt level): - virtual void OperationApplied(const G4BiasingProcessInterface* callingProcess, - G4BiasingAppliedCase biasingCase, - G4VBiasingOperation* occurenceOperationApplied, - G4double weightForOccurenceInteraction, - G4VBiasingOperation* finalStateOperationApplied, - const G4VParticleChange* particleChangeProduced); + void OperationApplied(const G4BiasingProcessInterface* callingProcess, + G4BiasingAppliedCase biasingCase, + G4VBiasingOperation* occurenceOperationApplied, + G4double weightForOccurenceInteraction, + G4VBiasingOperation* finalStateOperationApplied, + const G4VParticleChange* particleChangeProduced) override; public: // -- Optionnal base class method. It is called at the time a tracking of a particle starts: - void StartTracking(const G4Track* track); + void StartTracking(const G4Track* track) override; private: // -- List of associations between particle types and biasing operators: diff --git a/examples/extended/biasing/GB01/include/GB01DetectorConstruction.hh b/examples/extended/biasing/GB01/include/GB01DetectorConstruction.hh index 1c5998f6fe..b58da87464 100644 --- a/examples/extended/biasing/GB01/include/GB01DetectorConstruction.hh +++ b/examples/extended/biasing/GB01/include/GB01DetectorConstruction.hh @@ -38,11 +38,11 @@ class GB01DetectorConstruction : public G4VUserDetectorConstruction { public: GB01DetectorConstruction(G4bool bf); - ~GB01DetectorConstruction(); + ~GB01DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; private: G4bool fBiasingFlag; diff --git a/examples/extended/biasing/GB01/include/GB01PrimaryGeneratorAction.hh b/examples/extended/biasing/GB01/include/GB01PrimaryGeneratorAction.hh index bbe551dad8..27439b706f 100644 --- a/examples/extended/biasing/GB01/include/GB01PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB01/include/GB01PrimaryGeneratorAction.hh @@ -40,9 +40,9 @@ class GB01PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB01PrimaryGeneratorAction(); - virtual ~GB01PrimaryGeneratorAction(); + ~GB01PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; // pointer a to G4 class diff --git a/examples/extended/biasing/GB01/src/GB01BOptrChangeCrossSection.cc b/examples/extended/biasing/GB01/src/GB01BOptrChangeCrossSection.cc index 11ca193e32..b4e9f96a4b 100644 --- a/examples/extended/biasing/GB01/src/GB01BOptrChangeCrossSection.cc +++ b/examples/extended/biasing/GB01/src/GB01BOptrChangeCrossSection.cc @@ -43,7 +43,7 @@ GB01BOptrChangeCrossSection::GB01BOptrChangeCrossSection(G4String particleName, { fParticleToBias = G4ParticleTable::GetParticleTable()->FindParticle(particleName); - if (fParticleToBias == 0) { + if (fParticleToBias == nullptr) { G4ExceptionDescription ed; ed << "Particle `" << particleName << "' not found !" << G4endl; G4Exception("GB01BOptrChangeCrossSection(...)", "exGB01.01", JustWarning, ed); @@ -54,9 +54,8 @@ GB01BOptrChangeCrossSection::GB01BOptrChangeCrossSection(G4String particleName, GB01BOptrChangeCrossSection::~GB01BOptrChangeCrossSection() { - for (std::map::iterator it = - fChangeCrossSectionOperations.begin(); - it != fChangeCrossSectionOperations.end(); it++) + for (auto it = fChangeCrossSectionOperations.begin(); it != fChangeCrossSectionOperations.end(); + it++) delete (*it).second; } @@ -97,7 +96,7 @@ G4VBiasingOperation* GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperati // ----------------------------------------------------- // -- Check if current particle type is the one to bias: // ----------------------------------------------------- - if (track->GetDefinition() != fParticleToBias) return 0; + if (track->GetDefinition() != fParticleToBias) return nullptr; // --------------------------------------------------------------------- // -- select and setup the biasing operation for current callingProcess: @@ -107,7 +106,7 @@ G4VBiasingOperation* GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperati // -- length. Nothing is done in this case (ie, let analog process to deal with the case) G4double analogInteractionLength = callingProcess->GetWrappedProcess()->GetCurrentInteractionLength(); - if (analogInteractionLength > DBL_MAX / 10.) return 0; + if (analogInteractionLength > DBL_MAX / 10.) return nullptr; // -- Analog cross-section is well-defined: G4double analogXS = 1. / analogInteractionLength; @@ -133,7 +132,7 @@ G4VBiasingOperation* GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperati // -- only on the first time the operation is proposed, or if the interaction // -- occured. If the interaction did not occur for the process in the previous, // -- we update the number of interaction length instead of resampling. - if (previousOperation == 0) { + if (previousOperation == nullptr) { operation->SetBiasedCrossSection(XStransformation * analogXS); operation->Sample(); } @@ -144,7 +143,7 @@ G4VBiasingOperation* GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperati ed << " Logic problem in operation handling !" << G4endl; G4Exception("GB01BOptrChangeCrossSection::ProposeOccurenceBiasingOperation(...)", "exGB01.02", JustWarning, ed); - return 0; + return nullptr; } if (operation->GetInteractionOccured()) { operation->SetBiasedCrossSection(XStransformation * analogXS); diff --git a/examples/extended/biasing/GB01/src/GB01BOptrMultiParticleChangeCrossSection.cc b/examples/extended/biasing/GB01/src/GB01BOptrMultiParticleChangeCrossSection.cc index dbd8e626ac..6ac1f43ef4 100644 --- a/examples/extended/biasing/GB01/src/GB01BOptrMultiParticleChangeCrossSection.cc +++ b/examples/extended/biasing/GB01/src/GB01BOptrMultiParticleChangeCrossSection.cc @@ -48,7 +48,7 @@ void GB01BOptrMultiParticleChangeCrossSection::AddParticle(G4String particleName const G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle(particleName); - if (particle == 0) { + if (particle == nullptr) { G4ExceptionDescription ed; ed << "Particle `" << particleName << "' not found !" << G4endl; G4Exception("GB01BOptrMultiParticleChangeCrossSection::AddParticle(...)", "exGB01.02", @@ -56,7 +56,7 @@ void GB01BOptrMultiParticleChangeCrossSection::AddParticle(G4String particleName return; } - GB01BOptrChangeCrossSection* optr = new GB01BOptrChangeCrossSection(particleName); + auto optr = new GB01BOptrChangeCrossSection(particleName); fParticlesToBias.push_back(particle); fBOptrForParticle[particle] = optr; } @@ -68,16 +68,16 @@ G4VBiasingOperation* GB01BOptrMultiParticleChangeCrossSection::ProposeOccurenceB { // -- examples of limitations imposed to apply the biasing: // -- limit application of biasing to primary particles only: - if (track->GetParentID() != 0) return 0; + if (track->GetParentID() != 0) return nullptr; // -- limit to at most 5 biased interactions: - if (fnInteractions > 4) return 0; + if (fnInteractions > 4) return nullptr; // -- and limit to a weight of at least 0.05: - if (track->GetWeight() < 0.05) return 0; + if (track->GetWeight() < 0.05) return nullptr; if (fCurrentOperator) return fCurrentOperator->GetProposedOccurenceBiasingOperation(track, callingProcess); else - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -86,9 +86,8 @@ void GB01BOptrMultiParticleChangeCrossSection::StartTracking(const G4Track* trac { // -- fetch the underneath biasing operator, if any, for the current particle type: const G4ParticleDefinition* definition = track->GetParticleDefinition(); - std::map::iterator it = - fBOptrForParticle.find(definition); - fCurrentOperator = 0; + auto it = fBOptrForParticle.find(definition); + fCurrentOperator = nullptr; if (it != fBOptrForParticle.end()) fCurrentOperator = (*it).second; // -- reset count for number of biased interactions: diff --git a/examples/extended/biasing/GB01/src/GB01DetectorConstruction.cc b/examples/extended/biasing/GB01/src/GB01DetectorConstruction.cc index 77d5958fbd..e4b2e676cf 100644 --- a/examples/extended/biasing/GB01/src/GB01DetectorConstruction.cc +++ b/examples/extended/biasing/GB01/src/GB01DetectorConstruction.cc @@ -43,11 +43,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB01DetectorConstruction::GB01DetectorConstruction(G4bool bf):fBiasingFlag(bf) {} +GB01DetectorConstruction::GB01DetectorConstruction(G4bool bf) : fBiasingFlag(bf) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB01DetectorConstruction::~GB01DetectorConstruction() {} +GB01DetectorConstruction::~GB01DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -58,17 +58,17 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number // ----------------------------------- // -- volume where biasing is applied: @@ -76,11 +76,11 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct() G4double halfZ = 10 * cm; G4VSolid* solidTest = new G4Box("test.solid", 1 * m, 1 * m, halfZ); - G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, // its solid - defaultMaterial, // its material - "test.logical"); // its name + auto logicTest = new G4LogicalVolume(solidTest, // its solid + defaultMaterial, // its material + "test.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // volume entrance at (0,0,0) logicTest, // its logical volume "test.phys", // its name @@ -93,19 +93,18 @@ G4VPhysicalVolume* GB01DetectorConstruction::Construct() void GB01DetectorConstruction::ConstructSDandField() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Fetch volume for biasing: G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical"); // ---------------------------------------------- // -- operator creation and attachment to volume: - // ---------------------------------------------- - GB01BOptrMultiParticleChangeCrossSection* testMany = - new GB01BOptrMultiParticleChangeCrossSection(); + // ---------------------------------------------- + auto testMany = new GB01BOptrMultiParticleChangeCrossSection(); testMany->AddParticle("gamma"); testMany->AddParticle("neutron"); testMany->AttachTo(logicTest); G4cout << " Attaching biasing operator " << testMany->GetName() << " to logical volume " - << logicTest->GetName() << G4endl; + << logicTest->GetName() << G4endl; } } diff --git a/examples/extended/biasing/GB02/History b/examples/extended/biasing/GB02/History index 4a1df15e3e..69ab68d036 100644 --- a/examples/extended/biasing/GB02/History +++ b/examples/extended/biasing/GB02/History @@ -6,7 +6,7 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB02-V11-02-00) +## 2025-03-10 Igor Semeniouk (GB02-V11-03-00) - Remove unused WITH_GEANT4_UIVIS cmake option - Add vis.mac (copied from GB03) and enable detector visualization on startup - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. diff --git a/examples/extended/biasing/GB02/exampleGB02.cc b/examples/extended/biasing/GB02/exampleGB02.cc index 0c13853be9..02b64df055 100644 --- a/examples/extended/biasing/GB02/exampleGB02.cc +++ b/examples/extended/biasing/GB02/exampleGB02.cc @@ -93,16 +93,16 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes - GB02DetectorConstruction* detector = new GB02DetectorConstruction(biasingFlag); + auto detector = new GB02DetectorConstruction(biasingFlag); runManager->SetUserInitialization(detector); // -- Select a physics list - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- And augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); biasingPhysics->Bias("gamma"); biasingPhysics->Bias("neutron"); physicsList->RegisterPhysics(biasingPhysics); @@ -123,12 +123,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (macro != "") // batch mode { diff --git a/examples/extended/biasing/GB02/exampleGB02.out b/examples/extended/biasing/GB02/exampleGB02.out index 76b9b595e7..9cebba1a46 100644 --- a/examples/extended/biasing/GB02/exampleGB02.out +++ b/examples/extended/biasing/GB02/exampleGB02.out @@ -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 @@ -42,23 +42,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", @@ -129,7 +130,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 ======== @@ -782,6 +783,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 @@ -798,6 +800,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 @@ -3495,18 +3498,135 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 0 1 0 0 500 test.phys initStep - 1 0 0 13.7 0.871 0 13.7 514 test.phys biasWrapper(hadElastic) - 2 15 -47.3 16 0.826 0.0456 49.7 563 test.phys biasWrapper(hadElastic) - 3 28.2 -59.9 0 0.826 0 24.3 588 World Transportation - 4 8.32e+03 -7.93e+03 -1e+04 0.826 0 1.52e+04 1.58e+04 OutOfWorld Transportation + 1 0 0 13.7 0 0 13.7 514 test.phys biasWrapper(neutronInelastic) ********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 +* G4Track Information: Particle = N14, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 13.7 0.129 0 0 0 test.phys initStep - 1 -0.000263 0.000832 13.7 0 0.129 0.00149 0.00149 test.phys ionIoni + 0 0 0 13.7 0.0143 0 0 0 test.phys initStep + 1 2.53e-05 8.7e-05 13.7 0 0.0143 0.000496 0.000496 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 13.7 0.219 0 0 0 test.phys initStep + 1 -54.5 22.7 63.8 0.218 0 77.4 77.4 test.phys compt + 2 -56.9 24 65.5 0.124 0 3.22 80.7 test.phys compt + 3 -49.5 -1.61 51.6 0.11 0 30.1 111 test.phys compt + 4 -46.9 -4.29 53.6 0.0777 0 4.29 115 test.phys compt + 5 -57.9 8.42 32.7 0.0704 0 26.8 142 test.phys compt + 6 -28.7 103 34.4 0.0704 0 98.9 241 test.phys Rayl + 7 -35.6 133 39.4 0.0554 0 31.2 272 test.phys compt + 8 -1.77 62.8 35.4 0.049 0 77.9 350 test.phys compt + 9 -88.3 48.6 161 0.0479 0 153 503 test.phys compt + 10 -86.5 54.7 200 0.0479 0 39.6 543 World Transportation + 11 366 1.58e+03 1e+04 0.0479 0 9.93e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -88.3 48.6 161 0.00106 0 0 0 test.phys initStep + 1 -88.3 48.6 161 0 0.00106 9.08e-05 9.08e-05 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -1.77 62.8 35.4 0.00639 0 0 0 test.phys initStep + 1 -1.77 62.8 35.4 0 0.00639 0.00164 0.00164 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -35.6 133 39.4 0.015 0 0 0 test.phys initStep + 1 -35.6 133 39.4 0 0.015 0.00726 0.00726 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -57.9 8.42 32.7 0.0073 0 0 0 test.phys initStep + 1 -57.9 8.42 32.7 0 0.0073 0.00206 0.00206 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -46.9 -4.29 53.6 0.0321 0 0 0 test.phys initStep + 1 -46.9 -4.3 53.6 0 0.0321 0.0277 0.0277 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -49.5 -1.61 51.6 0.0144 0 0 0 test.phys initStep + 1 -49.5 -1.61 51.6 0 0.0144 0.00674 0.00674 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -56.9 24 65.5 0.0935 0 0 0 test.phys initStep + 1 -56.9 24 65.6 0 0.0935 0.178 0.178 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -54.5 22.7 63.8 0.00113 0 0 0 test.phys initStep + 1 -54.5 22.7 63.8 0 0.00113 9.95e-05 9.95e-05 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 13.7 0.759 0 0 0 test.phys initStep + 1 -7.69 -27.4 70.8 0.639 0 63.8 63.8 test.phys biasWrapper(hadElastic) + 2 -110 101 81.7 0.591 0.0478 164 228 test.phys biasWrapper(hadElastic) + 3 -252 79.6 37.7 0.574 0.0166 151 379 test.phys biasWrapper(hadElastic) + 4 -288 91.7 43 0.463 0 37.9 416 test.phys biasWrapper(hadElastic) + 5 -262 73.2 81.6 0.354 0 49.8 466 test.phys biasWrapper(hadElastic) + 6 -351 62.6 0 0.354 0 121 587 World Transportation + 7 -1e+04 -1.1e+03 -8.92e+03 0.354 0 1.32e+04 1.38e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 16, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -262 73.2 81.6 0.109 0 0 0 test.phys initStep + 1 -262 73.2 81.6 0 0.109 0.00137 0.00137 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 15, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -288 91.7 43 0.111 0 0 0 test.phys initStep + 1 -288 91.7 43 0 0.111 0.00138 0.00138 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 14, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -7.69 -27.4 70.8 0.121 0 0 0 test.phys initStep + 1 -7.69 -27.4 70.8 0 0.121 0.00144 0.00144 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3525,17 +3645,9 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 0 1 0 0 500 test.phys initStep - 1 0 0 81.6 0.833 0 81.6 582 test.phys biasWrapper(hadElastic) - 2 -192 -223 0 0.833 0 305 886 World Transportation - 3 -8.6e+03 -1e+04 -3.58e+03 0.833 0 1.34e+04 1.43e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 81.6 0.167 0 0 0 test.phys initStep - 1 0.000565 0.000656 81.6 0 0.167 0.0017 0.0017 test.phys ionIoni + 1 0 0 91.6 0.931 0.0687 91.6 592 test.phys biasWrapper(hadElastic) + 2 37.3 -180 200 0.931 0 214 805 World Transportation + 3 2.07e+03 -1e+04 6.1e+03 0.931 0 1.16e+04 1.24e+04 OutOfWorld Transportation ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3554,1185 +3666,273 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 148 0 0 148 648 test.phys biasWrapper(neutronInelastic) + 1 0 0 160 0 0 160 660 test.phys biasWrapper(neutronInelastic) ********************************************************************************************************* -* G4Track Information: Particle = N13, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = C11, Track ID = 8, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 148 0.914 0 0 0 test.phys initStep - 1 0.000286 -0.00229 148 0 0.914 0.00243 0.00243 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 148 2 0 0 0 test.phys initStep - 1 -73 -27 177 1.4 0 82.9 82.9 test.phys compt - 2 -120 -19.8 200 1.4 0 53.4 136 World Transportation - 3 -1e+04 1.48e+03 5.05e+03 1.4 0 1.11e+04 1.12e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -73 -27 177 0.603 0 0 0 test.phys initStep - 1 -73.7 -28.2 177 0.234 0.37 1.99 1.99 test.phys eIoni - 2 -73.9 -28.6 177 0 0.234 0.801 2.79 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 148 28 0 0 0 test.phys initStep - 1 61.2 102 200 28 0 130 130 World Transportation - 2 5.97e+03 1e+04 5.22e+03 28 0 1.26e+04 1.27e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 148 58.5 0 0 0 test.phys initStep - 1 -20.9 -6.65 200 58.5 0 56.4 56.4 World Transportation - 2 -3.96e+03 -1.26e+03 1e+04 58.5 0 1.06e+04 1.07e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 120 99.7 0 120 620 test.phys biasWrapper(hadElastic) - 2 10.1 11.9 200 99.7 0 81.2 702 World Transportation - 3 1.26e+03 1.48e+03 1e+04 99.7 0 9.99e+03 1.07e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 0.283 0 0 0 test.phys initStep - 1 -0.00121 -0.00143 120 0 0.283 0.00199 0.00199 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 133 99.9 0 133 633 test.phys biasWrapper(hadElastic) - 2 -0.869 -9.3 200 99.9 0 67.7 701 World Transportation - 3 -128 -1.37e+03 1e+04 99.9 0 9.89e+03 1.06e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 133 0.145 0 0 0 test.phys initStep - 1 0.000126 0.00135 133 0 0.145 0.00158 0.00158 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 120 0 0 120 620 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = C12, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 0.534 0 0 0 test.phys initStep - 1 0.00128 -0.00105 120 0 0.534 0.00239 0.00239 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = deuteron, Track ID = 6, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 4.82 0 0 0 test.phys initStep - 1 -0.177 -0.0725 120 2.55 2.27 0.192 0.192 test.phys hIoni - 2 -0.273 -0.11 120 0 2.55 0.103 0.295 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 0.503 0 0 0 test.phys initStep - 1 18.3 1.34 115 0.363 0 19.1 19.1 test.phys compt - 2 75.8 -47.6 0 0.363 0 137 156 World Transportation - 3 5.09e+03 -4.32e+03 -1e+04 0.363 0 1.2e+04 1.21e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 18.3 1.34 115 0.14 0 0 0 test.phys initStep - 1 18.4 1.42 115 0 0.14 0.35 0.35 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 6.89 0 0 0 test.phys initStep - 1 47.9 86.5 200 6.89 0 127 127 World Transportation - 2 5.54e+03 1e+04 9.37e+03 6.89 0 1.46e+04 1.47e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 120 77 0 0 0 test.phys initStep - 1 13.3 20.5 200 77 0 83.7 83.7 World Transportation - 2 1.64e+03 2.53e+03 1e+04 77 0 1.02e+04 1.03e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 25.8 99.1 0 25.8 526 test.phys biasWrapper(hadElastic) - 2 36 -19.4 139 0 0 120 646 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = C12, Track ID = 10, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 1.21 0 0 0 test.phys initStep - 1 36 -19.4 139 0 1.21 0.00292 0.00292 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 9, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 0.395 0 0 0 test.phys initStep - 1 41.6 -8.47 200 0.395 0 62.3 62.3 World Transportation - 2 951 1.75e+03 1e+04 0.395 0 1e+04 1.01e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 8, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 1 0 0 0 test.phys initStep - 1 116 109 27.6 0.834 0 188 188 test.phys biasWrapper(hadElastic) - 2 80.5 127 40.2 0.799 0.0352 41.5 230 test.phys biasWrapper(hadElastic) - 3 60 135 83 0.798 0.00108 48.1 278 test.phys biasWrapper(hadElastic) - 4 54.6 139 96 0.762 0.0359 14.6 292 test.phys biasWrapper(hadElastic) - 5 40.8 129 111 0.744 0.018 22.4 315 test.phys biasWrapper(hadElastic) - 6 -179 -38.6 147 0.704 0.0405 278 593 test.phys biasWrapper(hadElastic) - 7 -224 -38.6 200 0.704 0 70.3 664 World Transportation - 8 -8.66e+03 -49.8 1e+04 0.704 0 1.29e+04 1.36e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 11, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 116 109 27.6 0.166 0 0 0 test.phys initStep - 1 116 109 27.6 0 0.166 0.00169 0.00169 test.phys ionIoni + 0 0 0 160 0.922 0 0 0 test.phys initStep + 1 0.000565 -0.00184 160 0 0.922 0.00254 0.00254 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 1.11 0 0 0 test.phys initStep - 1 361 99.1 16.8 0.278 0 367 367 test.phys compt - 2 347 96 0.472 0.205 0 21.9 389 test.phys compt - 3 347 96.4 -7.11e-15 0.205 0 0.615 390 World Transportation - 4 3.09e+03 8e+03 -1e+04 0.205 0 1.3e+04 1.34e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 347 96 0.472 0.0728 0 0 0 test.phys initStep - 1 347 96 0.462 0 0.0728 0.116 0.116 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 361 99.1 16.8 0.831 0 0 0 test.phys initStep - 1 363 99.7 16.5 0.475 0.356 2.41 2.41 test.phys eIoni - 2 364 99.7 16.8 0.363 0.106 0.711 3.13 test.phys eBrem - 3 364 100 16.9 0.0302 0.333 1.4 4.52 test.phys eIoni - 4 364 100 16.8 0 0.0302 0.0249 4.55 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 14, Parent ID = 12 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 364 99.7 16.8 0.00637 0 0 0 test.phys initStep - 1 364 99.2 16.8 0 0.000403 0.524 0.524 test.phys phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 14 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 364 99.2 16.8 0.00597 0 0 0 test.phys initStep - 1 364 99.2 16.8 0 0.00597 0.00146 0.00146 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 6, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 5.37 0 0 0 test.phys initStep - 1 36.1 -19.6 139 3.82 1.55 0.262 0.262 test.phys hIoni - 2 36.2 -19.8 139 2.19 1.63 0.2 0.462 test.phys hIoni - 3 36.3 -19.8 139 0.15 2.04 0.121 0.583 test.phys hIoni - 4 36.3 -19.8 139 0.00302 0.147 0.00313 0.586 test.phys hIoni - 5 36.3 -19.8 139 0 0.00302 0.00034 0.586 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 5.55 0 0 0 test.phys initStep - 1 199 103 200 5.55 0 213 213 World Transportation - 2 1e+04 7.48e+03 3.87e+03 5.55 0 1.28e+04 1.3e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 36 -19.4 139 71.9 0 0 0 test.phys initStep - 1 48.2 -55.8 200 71.9 0 72.1 72.1 World Transportation - 2 2.01e+03 -5.89e+03 1e+04 71.9 0 1.16e+04 1.16e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 25.8 0.9 0 0 0 test.phys initStep - 1 -0.0022 0.00119 25.8 0 0.9 0.00256 0.00256 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 122 0 0 122 622 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = alpha, Track ID = 9, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 7.45 0 0 0 test.phys initStep - 1 0.00709 -0.0938 122 0 7.45 0.0988 0.0988 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = alpha, Track ID = 8, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 6.29 0 0 0 test.phys initStep - 1 0.0746 0.00297 122 0 6.29 0.0756 0.0756 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = alpha, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 21.9 0 0 0 test.phys initStep - 1 -0.161 0.0283 122 15.4 6.42 0.267 0.267 test.phys ionIoni - 2 -0.28 0.0525 122 8.88 6.56 0.202 0.47 test.phys ionIoni - 3 -0.352 0.0652 122 0.878 8 0.125 0.595 test.phys ionIoni - 4 -0.357 0.0658 122 0 0.878 0.00786 0.603 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 0.491 0 0 0 test.phys initStep - 1 -12.2 10.4 52.1 0.183 0 71.7 71.7 test.phys compt - 2 -24.4 25.4 88.4 0.115 0 41.1 113 test.phys compt - 3 59.3 -35.8 64.6 0.106 0 106 219 test.phys compt - 4 85.8 -68.8 95.1 0.08 0 52.2 271 test.phys compt - 5 90.9 -62.2 84.2 0.0737 0 13.7 285 test.phys compt - 6 88.6 -60.9 82 0.0737 0 3.46 288 test.phys Rayl - 7 79.8 -56.6 82.7 0.0737 8.76e-06 9.78 298 test.phys compt - 8 35.1 -32.4 85.8 0.0578 0 50.9 349 test.phys compt - 9 89.5 -64.2 52.3 0.0534 0 71.3 420 test.phys compt - 10 109 -109 90.9 0.0479 0 62.6 483 test.phys compt - 11 121 -130 54.9 0.0478 0 43.2 526 test.phys compt - 12 126 -167 2.96 0 0.000403 64 590 test.phys phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 126 -167 2.96 0.0474 0 0 0 test.phys initStep - 1 126 -167 2.95 0 0.0474 0.055 0.055 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 121 -130 54.9 0.000132 0 0 0 test.phys initStep - 1 121 -130 54.9 0 0.000132 1e-05 1e-05 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 109 -109 90.9 0.00543 0 0 0 test.phys initStep - 1 109 -109 90.9 0 0.00543 0.00124 0.00124 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 89.5 -64.2 52.3 0.00439 0 0 0 test.phys initStep - 1 89.5 -64.2 52.3 0 0.00439 0.000864 0.000864 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 35.1 -32.4 85.8 0.0159 0 0 0 test.phys initStep - 1 35.1 -32.4 85.8 0 0.0159 0.00802 0.00802 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 90.9 -62.2 84.2 0.00635 0 0 0 test.phys initStep - 1 90.9 -62.2 84.2 0 0.00635 0.00162 0.00162 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 85.8 -68.8 95.1 0.0263 0 0 0 test.phys initStep - 1 85.8 -68.8 95.1 0 0.0263 0.0195 0.0195 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 59.3 -35.8 64.6 0.0088 0 0 0 test.phys initStep - 1 59.3 -35.8 64.6 0 0.0088 0.00285 0.00285 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -24.4 25.4 88.4 0.0676 0 0 0 test.phys initStep - 1 -24.4 25.4 88.4 0 0.0676 0.102 0.102 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -12.2 10.4 52.1 0.308 0 0 0 test.phys initStep - 1 -12.2 10.4 51.5 0 0.308 1.19 1.19 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 12.8 0 0 0 test.phys initStep - 1 -26.1 140 91.9 0 0 145 145 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = C13, Track ID = 23, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -26.1 140 91.9 1.62 0 0 0 test.phys initStep - 1 -26.1 140 91.9 0 1.62 0.00338 0.00338 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 22, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -26.1 140 91.9 0.0598 0 0 0 test.phys initStep - 1 -18.2 154 66.5 0.0504 0 30.3 30.3 test.phys compt - 2 -16.5 156 71.8 0.0448 0 5.73 36 test.phys compt - 3 21 147 48.3 0.0392 0 45.1 81.2 test.phys compt - 4 -93.4 308 45.4 0 0.000403 198 279 test.phys phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 22 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -93.4 308 45.4 0.0388 0 0 0 test.phys initStep - 1 -93.4 308 45.4 0 0.0388 0.0387 0.0387 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 26, Parent ID = 22 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 21 147 48.3 0.00562 0 0 0 test.phys initStep - 1 21 147 48.3 0 0.00562 0.00131 0.00131 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 25, Parent ID = 22 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -16.5 156 71.8 0.00561 0 0 0 test.phys initStep - 1 -16.5 156 71.8 0 0.00561 0.00131 0.00131 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 24, Parent ID = 22 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.2 154 66.5 0.00939 0 0 0 test.phys initStep - 1 -18.2 154 66.5 0 0.00939 0.00319 0.00319 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 21, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -26.1 140 91.9 1.07 0 0 0 test.phys initStep - 1 42.3 204 200 1.07 0 143 143 World Transportation - 2 6.25e+03 6.06e+03 1e+04 1.07 0 1.3e+04 1.31e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 20, Parent ID = 5 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -26.1 140 91.9 2.4 0 0 0 test.phys initStep - 1 -26.2 140 92 0.461 1.94 0.134 0.134 test.phys hIoni - 2 -26.2 140 92 0 0.461 0.0111 0.145 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 15.6 0 0 0 test.phys initStep - 1 -0.209 -0.416 123 13.3 2.31 0.924 0.924 test.phys hIoni - 2 -0.373 -0.746 123 11.4 1.93 0.733 1.66 test.phys hIoni - 3 -0.514 -1.01 124 9.52 1.88 0.592 2.25 test.phys hIoni - 4 -0.614 -1.22 124 7.76 1.76 0.471 2.72 test.phys hIoni - 5 -0.695 -1.4 125 6.19 1.57 0.373 3.09 test.phys hIoni - 6 -0.767 -1.54 125 4.63 1.55 0.298 3.39 test.phys hIoni - 7 -0.821 -1.65 125 3.07 1.57 0.232 3.62 test.phys hIoni - 8 -0.855 -1.72 125 1.3 1.77 0.168 3.79 test.phys hIoni - 9 -0.862 -1.75 125 0.0144 1.28 0.0531 3.84 test.phys hIoni - 10 -0.861 -1.75 125 0 0.0144 0.000719 3.85 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 122 15.8 0 0 0 test.phys initStep - 1 53.9 67.7 200 15.8 0 117 117 World Transportation - 2 6.82e+03 8.56e+03 1e+04 15.8 0 1.46e+04 1.47e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 177 0 0 177 677 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = C12, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 177 0.533 0 0 0 test.phys initStep - 1 -0.00164 0.000932 177 0 0.533 0.00239 0.00239 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 177 0.088 0 0 0 test.phys initStep - 1 18.6 102 122 0.087 0 118 118 test.phys compt - 2 -28.1 288 0 0.087 0 227 345 World Transportation - 3 -2.47e+03 1e+04 -6.38e+03 0.087 0 1.19e+04 1.22e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 18.6 102 122 0.00105 0 0 0 test.phys initStep - 1 18.6 102 122 0 0.00105 8.9e-05 8.9e-05 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 177 1.07 0 0 0 test.phys initStep - 1 0.00942 -0.0241 177 0 1.07 0.0391 0.0391 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 177 26.6 0 0 0 test.phys initStep - 1 22.1 28.3 200 26.6 0 42.7 42.7 World Transportation - 2 7.81e+03 1e+04 8.36e+03 26.6 0 1.51e+04 1.51e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 177 59.1 0 0 0 test.phys initStep - 1 -3.8 -12.2 198 59.1 0.027 24.9 24.9 test.phys biasWrapper(hadElastic) - 2 -4.16 -13 200 59.1 0 1.9 26.8 World Transportation - 3 -2.13e+03 -4.71e+03 1e+04 59.1 0 1.11e+04 1.11e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 106 100 0.014 106 606 test.phys biasWrapper(hadElastic) - 2 0.975 1.49 147 0 0 41.5 647 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = C12, Track ID = 8, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 3.79 0 0 0 test.phys initStep - 1 0.977 1.49 147 0 3.79 0.00517 0.00517 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 0.256 0 0 0 test.phys initStep - 1 -0.106 -66.9 0 0.256 0 162 162 World Transportation - 2 -73.4 -4.71e+03 -1e+04 0.256 0 1.1e+04 1.12e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 2.8 0 0 0 test.phys initStep - 1 -190 66.4 200 2.8 0 208 208 World Transportation - 2 -1e+04 3.4e+03 2.9e+03 2.8 0 1.07e+04 1.09e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 14.6 0 0 0 test.phys initStep - 1 -179 -22.5 0 14.6 0 234 234 World Transportation - 2 -1e+04 -1.33e+03 -8.03e+03 14.6 0 1.28e+04 1.3e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 16.8 0 0 0 test.phys initStep - 1 1.29 1.65 148 14.6 2.27 1.03 1.03 test.phys hIoni - 2 1.54 1.78 149 12.4 2.14 0.834 1.87 test.phys hIoni - 3 1.77 1.89 150 10.5 1.98 0.666 2.53 test.phys hIoni - 4 1.96 1.97 150 8.66 1.8 0.53 3.06 test.phys hIoni - 5 2.13 1.97 151 6.96 1.7 0.422 3.49 test.phys hIoni - 6 2.29 1.88 151 5.34 1.62 0.334 3.82 test.phys hIoni - 7 2.4 1.8 151 3.78 1.56 0.261 4.08 test.phys hIoni - 8 2.48 1.75 151 2.09 1.69 0.198 4.28 test.phys hIoni - 9 2.54 1.72 151 0.0544 2.04 0.114 4.39 test.phys hIoni - 10 2.54 1.72 151 0 0.0544 0.00153 4.39 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.975 1.49 147 49.1 0 0 0 test.phys initStep - 1 -1.21 -50.8 200 49.1 0 74.2 74.2 World Transportation - 2 -408 -9.79e+03 1e+04 49.1 0 1.38e+04 1.39e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -500 100 0 0 0 World initStep - 1 0 0 0 100 0 500 500 test.phys Transportation - 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) - 3 0 0 200 100 0 200 700 World Transportation - 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 108 0 0 108 608 test.phys biasWrapper(neutronInelastic) - -********************************************************************************************************* -* G4Track Information: Particle = B10, Track ID = 9, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 12.1 0 0 0 test.phys initStep - 1 -0.000869 -0.00578 108 0 12.1 0.0239 0.0239 test.phys ionIoni - -********************************************************************************************************* -* G4Track Information: Particle = deuteron, Track ID = 8, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 2.44 0 0 0 test.phys initStep - 1 0.0127 0.0353 108 0 2.44 0.0964 0.0964 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 0.123 0 0 0 test.phys initStep - 1 35 -71.3 136 0.0979 0 84.1 84.1 test.phys compt - 2 56.4 -57.1 141 0.0953 0 26.2 110 test.phys compt - 3 143 36.4 104 0.0934 0 133 243 test.phys compt - 4 147 46.7 97 0.0698 0 13.4 256 test.phys compt - 5 150 18.7 148 0.0659 0 58.1 314 test.phys compt - 6 169 26.3 170 0.0532 0 30.5 345 test.phys compt - 7 115 39.1 137 0.0462 0 64.9 410 test.phys compt - 8 116 27.8 142 0.0442 0 12.4 422 test.phys compt - 9 161 11.2 157 0.0378 0 50.3 472 test.phys compt - 10 69.7 82.2 102 0.0331 0 128 600 test.phys compt - 11 112 25.4 115 0 0.000403 72.1 673 test.phys phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 20, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 112 25.4 115 0.0327 0 0 0 test.phys initStep - 1 112 25.4 115 0 0.0327 0.0286 0.0286 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 69.7 82.2 102 0.00473 0 0 0 test.phys initStep - 1 69.7 82.2 102 0 0.00473 0.000979 0.000979 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 161 11.2 157 0.00636 0 0 0 test.phys initStep - 1 161 11.2 157 0 0.00636 0.00162 0.00162 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 116 27.8 142 0.00204 0 0 0 test.phys initStep - 1 116 27.8 142 0 0.00204 0.000245 0.000245 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 115 39.1 137 0.00699 0 0 0 test.phys initStep - 1 115 39.1 137 0 0.00699 0.00191 0.00191 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 169 26.3 170 0.0127 0 0 0 test.phys initStep - 1 169 26.3 170 0 0.0127 0.0054 0.0054 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 150 18.7 148 0.00393 0 0 0 test.phys initStep - 1 150 18.7 148 0 0.00393 0.000716 0.000716 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 147 46.7 97 0.0236 0 0 0 test.phys initStep - 1 147 46.7 96.9 0 0.0236 0.0161 0.0161 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 143 36.4 104 0.00185 0 0 0 test.phys initStep - 1 143 36.4 104 0 0.00185 0.000211 0.000211 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 56.4 -57.1 141 0.0026 0 0 0 test.phys initStep - 1 56.4 -57.1 141 0 0.0026 0.000362 0.000362 test.phys eIoni + 0 0 0 160 0.822 0 0 0 test.phys initStep + 1 -194 222 178 0.607 0 295 295 test.phys compt + 2 -256 571 45 0.328 0 378 673 test.phys compt + 3 -188 591 0 0.328 0 83.6 757 World Transportation + 4 1e+04 3.73e+03 -6.81e+03 0.328 0 1.26e+04 1.34e+04 OutOfWorld Transportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 10, Parent ID = 7 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 35 -71.3 136 0.0247 0 0 0 test.phys initStep - 1 35 -71.3 136 0 0.0247 0.0175 0.0175 test.phys eIoni + 0 -256 571 45 0.279 0 0 0 test.phys initStep + 1 -256 571 45 0.0214 0.258 1.05 1.05 test.phys eIoni + 2 -256 571 45 0 0.0214 0.0136 1.06 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 7 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 3.81 0 0 0 test.phys initStep - 1 -91.4 234 110 2.74 0 251 251 test.phys compt - 2 -194 382 70.5 0 0 184 436 test.phys conv + 0 -194 222 178 0.215 0 0 0 test.phys initStep + 1 -194 222 178 0 0.215 0.701 0.701 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 23, Parent ID = 6 +* G4Track Information: Particle = proton, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -194 382 70.5 1.59 0 0 0 test.phys initStep - 1 -197 383 72 1.13 0.464 3.73 3.73 test.phys eIoni - 2 -197 385 70 0.805 0.326 2.95 6.68 test.phys eIoni - 3 -198 385 68.2 0.537 0.268 2.38 9.06 test.phys eIoni - 4 -198 386 68.3 0.295 0.242 1.85 10.9 test.phys eIoni - 5 -197 386 68.6 0.0179 0.277 1.11 12 test.phys eIoni - 6 -197 386 68.6 0 0.0179 0.00899 12 test.phys eIoni - 7 -197 386 68.6 0 0 0 12 test.phys annihil + 0 0 0 160 4.54 0 0 0 test.phys initStep + 1 0.22 0.0439 160 3.01 1.53 0.228 0.228 test.phys hIoni + 2 0.377 0.0796 160 1.17 1.84 0.166 0.394 test.phys hIoni + 3 0.421 0.0875 160 0.0256 1.14 0.045 0.439 test.phys hIoni + 4 0.421 0.0877 160 0.00336 0.0223 0.000995 0.44 test.phys hIoni + 5 0.422 0.0877 160 0 0.00336 0.000359 0.44 test.phys hIoni ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 25, Parent ID = 23 +* G4Track Information: Particle = neutron, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -197 386 68.6 0.511 0 0 0 test.phys initStep - 1 -213 358 67.7 0.219 0 32.1 32.1 test.phys compt - 2 -169 367 153 0.193 0 96.1 128 test.phys compt - 3 -155 324 200 0.193 0 65.2 193 World Transportation - 4 2.75e+03 -8.46e+03 1e+04 0.193 0 1.35e+04 1.37e+04 OutOfWorld Transportation + 0 0 0 160 12.1 0 0 0 test.phys initStep + 1 -106 -10.9 161 0 0 107 107 test.phys biasWrapper(neutronInelastic) ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 25 +* G4Track Information: Particle = C13, Track ID = 14, Parent ID = 5 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -169 367 153 0.0263 0 0 0 test.phys initStep - 1 -169 367 153 0 0.0263 0.0195 0.0195 test.phys eIoni + 0 -106 -10.9 161 0.967 0 0 0 test.phys initStep + 1 -106 -10.9 161 0 0.967 0.00292 0.00292 test.phys ionIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 26, Parent ID = 25 +* G4Track Information: Particle = gamma, Track ID = 13, Parent ID = 5 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -213 358 67.7 0.292 0 0 0 test.phys initStep - 1 -213 358 67.5 0 0.292 1.11 1.11 test.phys eIoni + 0 -106 -10.9 161 0.263 0 0 0 test.phys initStep + 1 -95 19 200 0.263 0 50.5 50.5 World Transportation + 2 2.75e+03 7.5e+03 1e+04 0.263 0 1.27e+04 1.27e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 24, Parent ID = 23 +* G4Track Information: Particle = neutron, Track ID = 12, Parent ID = 5 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -197 386 68.6 0.511 0 0 0 test.phys initStep - 1 -133 500 72.1 0.435 0 131 131 test.phys compt - 2 -113 651 0 0.435 0 168 299 World Transportation - 3 1.08e+03 1e+04 -4.48e+03 0.435 0 1.04e+04 1.07e+04 OutOfWorld Transportation + 0 -106 -10.9 161 1.53 0 0 0 test.phys initStep + 1 -179 2.48 0 1.53 0 177 177 World Transportation + 2 -4.72e+03 832 -1e+04 1.53 0 1.1e+04 1.12e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 28, Parent ID = 24 +* G4Track Information: Particle = proton, Track ID = 11, Parent ID = 5 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -133 500 72.1 0.0764 0 0 0 test.phys initStep - 1 -133 500 72.1 0 0.0764 0.126 0.126 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -194 382 70.5 0.119 0 0 0 test.phys initStep - 1 -195 382 70.4 0 0.119 0.268 0.268 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 6 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -91.4 234 110 1.07 0 0 0 test.phys initStep - 1 -91.1 236 111 0.725 0.349 2.84 2.84 test.phys eIoni - 2 -90.9 238 112 0.286 0.439 2.22 5.06 test.phys eIoni - 3 -90.4 238 112 0 0.286 1.09 6.15 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 5, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 7 0 0 0 test.phys initStep - 1 -0.133 -0.273 108 5.42 1.57 0.335 0.335 test.phys hIoni - 2 -0.234 -0.491 108 3.8 1.63 0.264 0.6 test.phys hIoni - 3 -0.308 -0.656 108 2.22 1.58 0.199 0.799 test.phys hIoni - 4 -0.356 -0.754 108 0.205 2.01 0.123 0.921 test.phys hIoni - 5 -0.357 -0.757 108 0 0.205 0.00418 0.926 test.phys hIoni + 0 -106 -10.9 161 1.71 0 0 0 test.phys initStep + 1 -106 -10.8 161 0.0355 1.68 0.0833 0.0833 test.phys hIoni + 2 -106 -10.8 161 0.00422 0.0312 0.00119 0.0845 test.phys hIoni + 3 -106 -10.8 161 0 0.00422 0.000402 0.0849 test.phys hIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 16.8 0 0 0 test.phys initStep - 1 37.3 -16.1 0 16.8 0 115 115 World Transportation - 2 3.49e+03 -1.5e+03 -1e+04 16.8 0 1.07e+04 1.08e+04 OutOfWorld Transportation + 0 0 0 160 15.4 0 0 0 test.phys initStep + 1 -19.3 -12.5 200 15.4 0 46 46 World Transportation + 2 -4.77e+03 -3.09e+03 1e+04 15.4 0 1.13e+04 1.14e+04 OutOfWorld Transportation ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 108 20 0 0 0 test.phys initStep - 1 -1.31 41.2 111 19.7 0 41.4 41.4 test.phys biasWrapper(hadElastic) - 2 -260 499 123 0 0 526 568 test.phys biasWrapper(neutronInelastic) + 0 0 0 160 35 0 0 0 test.phys initStep + 1 7.17 10 173 0 0 18.1 18.1 test.phys biasWrapper(neutronInelastic) ********************************************************************************************************* -* G4Track Information: Particle = C14, Track ID = 34, Parent ID = 3 +* G4Track Information: Particle = alpha, Track ID = 20, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 499 123 3.3 0 0 0 test.phys initStep - 1 -260 499 123 0 3.3 0.00492 0.00492 test.phys ionIoni + 0 7.17 10 173 6.23 0 0 0 test.phys initStep + 1 7.2 10.1 173 0 6.23 0.0745 0.0745 test.phys ionIoni ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 33, Parent ID = 3 +* G4Track Information: Particle = alpha, Track ID = 19, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 499 123 0.708 0 0 0 test.phys initStep - 1 -172 483 95.9 0.291 0 93.7 93.7 test.phys compt - 2 -188 393 110 0.153 0 92 186 test.phys compt - 3 -282 498 1.35 0.0967 0 177 363 test.phys compt - 4 -197 341 80 0.0948 0 195 558 test.phys compt - 5 -154 295 149 0.0696 0 93.6 652 test.phys compt - 6 -187 312 121 0.0577 0 46.7 698 test.phys compt - 7 -184 321 151 0.0572 0 31.9 730 test.phys compt - 8 -192 334 176 0.0508 0 28.7 759 test.phys compt - 9 -161 285 200 0.0508 0 62.6 822 World Transportation - 10 6.47e+03 -1e+04 5.32e+03 0.0508 0 1.33e+04 1.41e+04 OutOfWorld Transportation + 0 7.17 10 173 1.77 0 0 0 test.phys initStep + 1 7.17 10 173 0 1.77 0.0141 0.0141 test.phys ionIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 42, Parent ID = 33 +* G4Track Information: Particle = alpha, Track ID = 18, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -192 334 176 0.00646 0 0 0 test.phys initStep - 1 -192 334 176 0 0.00646 0.00167 0.00167 test.phys eIoni + 0 7.17 10 173 8.25 0 0 0 test.phys initStep + 1 7.16 9.99 174 0.529 7.72 0.115 0.115 test.phys ionIoni + 2 7.15 9.98 174 0 0.529 0.00578 0.12 test.phys ionIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 41, Parent ID = 33 +* G4Track Information: Particle = triton, Track ID = 17, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -184 321 151 0.000471 0 0 0 test.phys initStep - 1 -184 321 151 0 0.000471 3.11e-05 3.11e-05 test.phys eIoni + 0 7.17 10 173 5.16 0 0 0 test.phys initStep + 1 7.27 10.1 173 2.36 2.8 0.178 0.178 test.phys hIoni + 2 7.31 10.2 174 0 2.36 0.0728 0.251 test.phys hIoni + 3 7.31 10.2 174 0 0 0 0.251 test.phys Decay ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 40, Parent ID = 33 +* G4Track Information: Particle = gamma, Track ID = 16, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -187 312 121 0.0119 0 0 0 test.phys initStep - 1 -187 312 121 0 0.0119 0.00483 0.00483 test.phys eIoni + 0 7.17 10 173 0.187 0 0 0 test.phys initStep + 1 55.8 -4.43 156 0.167 0 53.7 53.7 test.phys compt + 2 82.2 -71.2 116 0.148 0 82.2 136 test.phys compt + 3 5.05 -292 136 0.131 0 234 370 test.phys compt + 4 -116 -331 88.3 0.124 0 136 507 test.phys compt + 5 -140 -327 90.7 0.113 0 24.8 531 test.phys compt + 6 -207 -324 22.3 0.112 0 95.3 627 test.phys compt + 7 -224 -332 0 0.112 0 29.4 656 World Transportation + 8 -7.94e+03 -4.07e+03 -1e+04 0.112 0 1.32e+04 1.38e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 39, Parent ID = 33 +* G4Track Information: Particle = e-, Track ID = 26, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -154 295 149 0.0252 0 0 0 test.phys initStep - 1 -154 295 149 0 0.0252 0.0181 0.0181 test.phys eIoni + 0 -207 -324 22.3 0.0014 0 0 0 test.phys initStep + 1 -207 -324 22.3 0 0.0014 0.000137 0.000137 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 38, Parent ID = 33 +* G4Track Information: Particle = e-, Track ID = 25, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -197 341 80 0.00188 0 0 0 test.phys initStep - 1 -197 341 80 0 0.00188 0.000216 0.000216 test.phys eIoni + 0 -140 -327 90.7 0.0105 0 0 0 test.phys initStep + 1 -140 -327 90.7 0 0.0105 0.00384 0.00384 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 37, Parent ID = 33 +* G4Track Information: Particle = e-, Track ID = 24, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -282 498 1.35 0.0565 0 0 0 test.phys initStep - 1 -282 498 1.33 0 0.0565 0.0749 0.0749 test.phys eIoni + 0 -116 -331 88.3 0.00672 0 0 0 test.phys initStep + 1 -116 -331 88.3 0 0.00672 0.00179 0.00179 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 36, Parent ID = 33 +* G4Track Information: Particle = e-, Track ID = 23, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -188 393 110 0.137 0 0 0 test.phys initStep - 1 -188 393 111 0 0.137 0.34 0.34 test.phys eIoni + 0 5.05 -292 136 0.0177 0 0 0 test.phys initStep + 1 5.05 -292 136 0 0.0177 0.0097 0.0097 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 35, Parent ID = 33 +* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -172 483 95.9 0.417 0 0 0 test.phys initStep - 1 -171 483 95.6 0.0419 0.375 1.56 1.56 test.phys eIoni - 2 -171 483 95.6 0 0.0419 0.0443 1.61 test.phys eIoni + 0 82.2 -71.2 116 0.0187 0 0 0 test.phys initStep + 1 82.2 -71.2 116 0 0.0187 0.0107 0.0107 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 32, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 16 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 499 123 1.39 0 0 0 test.phys initStep - 1 -295 445 153 1.21 0 71 71 test.phys compt - 2 -496 233 200 1.21 0 296 367 World Transportation - 3 -1e+04 -9.77e+03 2.44e+03 1.21 0 1.4e+04 1.43e+04 OutOfWorld Transportation + 0 55.8 -4.43 156 0.0202 0 0 0 test.phys initStep + 1 55.8 -4.42 156 0 0.0202 0.0122 0.0122 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 43, Parent ID = 32 +* G4Track Information: Particle = gamma, Track ID = 15, Parent ID = 3 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -295 445 153 0.176 0 0 0 test.phys initStep - 1 -295 445 153 0 0.176 0.509 0.509 test.phys eIoni + 0 7.17 10 173 2.02 0 0 0 test.phys initStep + 1 -61.4 -22.9 196 0.361 0 79.4 79.4 test.phys compt + 2 -69.1 -12.3 174 0.344 0 26 105 test.phys compt + 3 -74.4 9.17 37.2 0.245 0 138 244 test.phys compt + 4 -128 26.1 17.9 0.236 0 59.1 303 test.phys compt + 5 -233 68.4 25.5 0.183 0 114 416 test.phys compt + 6 -263 44.5 0 0.183 0 46 462 World Transportation + 7 -1e+04 -7.76e+03 -8.33e+03 0.183 0 1.5e+04 1.55e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 31, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 31, Parent ID = 15 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 499 123 4.25 0 0 0 test.phys initStep - 1 -260 500 123 0.919 0 0.194 0.194 test.phys compt - 2 -275 500 156 0.325 0 36.3 36.4 test.phys compt - 3 -523 358 43.3 0.261 0 307 344 test.phys compt - 4 -533 357 13.1 0.143 0 31.8 375 test.phys compt - 5 -542 362 26.6 0.0944 0 17 392 test.phys compt - 6 -512 321 0 0.0944 0 57 449 World Transportation - 7 7.1e+03 -1e+04 -6.76e+03 0.0944 0 1.45e+04 1.49e+04 OutOfWorld Transportation + 0 -233 68.4 25.5 0.0531 0 0 0 test.phys initStep + 1 -233 68.4 25.5 0 0.0531 0.0672 0.0672 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 48, Parent ID = 31 +* G4Track Information: Particle = e-, Track ID = 30, Parent ID = 15 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -542 362 26.6 0.049 0 0 0 test.phys initStep - 1 -542 362 26.6 0 0.049 0.0583 0.0583 test.phys eIoni + 0 -128 26.1 17.9 0.0092 0 0 0 test.phys initStep + 1 -128 26.1 17.9 0 0.0092 0.00308 0.00308 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 47, Parent ID = 31 +* G4Track Information: Particle = e-, Track ID = 29, Parent ID = 15 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -533 357 13.1 0.118 0 0 0 test.phys initStep - 1 -533 357 12.9 0 0.118 0.264 0.264 test.phys eIoni + 0 -74.4 9.17 37.2 0.0987 0 0 0 test.phys initStep + 1 -74.3 9.17 37.1 0 0.0987 0.195 0.195 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 46, Parent ID = 31 +* G4Track Information: Particle = e-, Track ID = 28, Parent ID = 15 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -523 358 43.3 0.0639 0 0 0 test.phys initStep - 1 -523 358 43.3 0 0.0639 0.0925 0.0925 test.phys eIoni + 0 -69.1 -12.3 174 0.0176 0 0 0 test.phys initStep + 1 -69.1 -12.3 174 0 0.0176 0.00959 0.00959 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 45, Parent ID = 31 +* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 15 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -275 500 156 0.594 0 0 0 test.phys initStep - 1 -275 500 158 0.149 0.446 1.97 1.97 test.phys eIoni - 2 -275 500 158 0 0.149 0.387 2.36 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 44, Parent ID = 31 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 500 123 3.34 0 0 0 test.phys initStep - 1 -267 501 123 2.61 0.721 6.57 6.57 test.phys eIoni - 2 -271 502 121 1.74 0.873 5.39 12 test.phys eIoni - 3 -273 502 121 1.11 0.233 2.1 14.1 test.phys eIoni - 4 -275 503 119 0.729 0.379 2.89 17 test.phys eIoni - 5 -275 504 118 0.431 0.298 2.23 19.2 test.phys eIoni - 6 -275 503 117 0.123 0.308 1.6 20.8 test.phys eIoni - 7 -275 503 117 0 0.123 0.285 21.1 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 49, Parent ID = 44 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -273 502 121 0.399 0 0 0 test.phys initStep - 1 -274 502 121 0.0604 0.339 1.51 1.51 test.phys eIoni - 2 -274 502 121 0 0.0604 0.0841 1.6 test.phys eIoni - -********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 30, Parent ID = 3 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -260 499 123 10.7 0 0 0 test.phys initStep - 1 -260 499 123 8.87 1.78 0.542 0.542 test.phys hIoni - 2 -259 499 123 7.19 1.68 0.434 0.976 test.phys hIoni - 3 -259 499 124 5.58 1.61 0.345 1.32 test.phys hIoni - 4 -259 499 124 3.98 1.6 0.271 1.59 test.phys hIoni - 5 -259 499 124 2.25 1.73 0.206 1.8 test.phys hIoni - 6 -259 499 124 0.274 1.98 0.125 1.92 test.phys hIoni - 7 -259 499 124 0.01 0.264 0.00573 1.93 test.phys hIoni - 8 -259 499 124 0 0.01 0.000606 1.93 test.phys hIoni - -********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 29, Parent ID = 3 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.31 41.2 111 0.334 0 0 0 test.phys initStep - 1 -1.31 41.2 111 0 0.334 0.00207 0.00207 test.phys ionIoni + 0 -61.4 -22.9 196 1.66 0 0 0 test.phys initStep + 1 -63.5 -25.3 197 1.34 0.326 3.51 3.51 test.phys msc + 2 -63.8 -28.4 197 0.942 0.395 3.28 6.79 test.phys eIoni + 3 -64.3 -30.4 198 0.589 0.353 2.61 9.4 test.phys eIoni + 4 -63.9 -31.3 197 0.31 0.279 1.96 11.4 test.phys eIoni + 5 -63.9 -31.9 197 0.0594 0.25 1.2 12.6 test.phys eIoni + 6 -63.9 -31.9 197 0 0.0594 0.0816 12.6 test.phys eIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -4751,109 +3951,1024 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 0 100 0 0 500 test.phys initStep - 1 0 0 17.6 0 0 17.6 518 test.phys biasWrapper(neutronInelastic) + 1 0 0 147 0 0 147 647 test.phys biasWrapper(neutronInelastic) ********************************************************************************************************* -* G4Track Information: Particle = B11, Track ID = 9, Parent ID = 2 +* G4Track Information: Particle = C12, Track ID = 9, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 5.19 0 0 0 test.phys initStep - 1 -0.00731 -0.00359 17.6 0 5.19 0.00874 0.00874 test.phys ionIoni + 0 0 0 147 4.34 0 0 0 test.phys initStep + 1 0.000536 -0.00376 147 0 4.34 0.00578 0.00578 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 8, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 0.18 0 0 0 test.phys initStep - 1 -4.82 2.59 19 0.137 0 5.65 5.65 test.phys compt - 2 77.2 171 64.5 0.113 0 193 199 test.phys compt - 3 133 145 200 0.113 0 149 347 World Transportation - 4 4.14e+03 -1.72e+03 1e+04 0.113 0 1.08e+04 1.11e+04 OutOfWorld Transportation + 0 0 0 147 0.128 0 0 0 test.phys initStep + 1 8.56 -5.61 163 0.124 0 19.2 19.2 test.phys compt + 2 31.7 -4.85 182 0.0886 0 29.6 48.8 test.phys compt + 3 -2.93 -86.6 117 0.0754 0 110 158 test.phys compt + 4 18.6 -86.5 106 0.0754 0 24.3 183 test.phys Rayl + 5 106 -79.8 66.9 0.0695 0 95.8 279 test.phys compt + 6 107 -82.8 0 0.0695 0 66.9 345 World Transportation + 7 293 -539 -1e+04 0.0695 0 1e+04 1.04e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 8 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 106 -79.8 66.9 0.00592 0 0 0 test.phys initStep + 1 106 -79.8 66.9 0 0.00592 0.00144 0.00144 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 8 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2.93 -86.6 117 0.0132 0 0 0 test.phys initStep + 1 -2.93 -86.6 117 0 0.0132 0.0058 0.0058 test.phys eIoni ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 11, Parent ID = 8 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 77.2 171 64.5 0.0235 0 0 0 test.phys initStep - 1 77.2 171 64.5 0 0.0235 0.016 0.016 test.phys eIoni + 0 31.7 -4.85 182 0.035 0 0 0 test.phys initStep + 1 31.7 -4.84 182 0 0.035 0.0322 0.0322 test.phys eIoni ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 10, Parent ID = 8 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -4.82 2.59 19 0.0435 0 0 0 test.phys initStep - 1 -4.84 2.58 19 0 0.0435 0.0474 0.0474 test.phys eIoni + 0 8.56 -5.61 163 0.00407 0 0 0 test.phys initStep + 1 8.56 -5.61 163 0 0.00407 0.000759 0.000759 test.phys eIoni ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 +* G4Track Information: Particle = neutron, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 1.87 0 0 0 test.phys initStep - 1 8.93 69 3.55e-15 1.87 0 71.7 71.7 World Transportation - 2 1.29e+03 1e+04 -2.53e+03 1.87 0 1.03e+04 1.04e+04 OutOfWorld Transportation + 0 0 0 147 1.03 0 0 0 test.phys initStep + 1 -31.4 -37.4 170 0.786 0 53.9 53.9 test.phys biasWrapper(hadElastic) + 2 55.3 51.6 0 0.786 0 210 264 World Transportation + 3 5.17e+03 5.3e+03 -1e+04 0.786 0 1.24e+04 1.27e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = N14, Track ID = 14, Parent ID = 7 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 2.47 0 0 0 test.phys initStep - 1 0.0388 -0.132 17.5 0.592 1.88 0.138 0.138 test.phys hIoni - 2 0.0428 -0.147 17.5 0.0178 0.575 0.0159 0.154 test.phys hIoni - 3 0.0428 -0.147 17.5 0 0.0178 0.000803 0.155 test.phys hIoni + 0 -31.4 -37.4 170 0.244 0 0 0 test.phys initStep + 1 -31.4 -37.4 170 0 0.244 0.00192 0.00192 test.phys ionIoni ********************************************************************************************************* -* G4Track Information: Particle = proton, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 9.16 0 0 0 test.phys initStep - 1 -0.173 0.00869 18 7.45 1.71 0.451 0.451 test.phys hIoni - 2 -0.32 0.0159 18.3 5.83 1.62 0.358 0.808 test.phys hIoni - 3 -0.438 0.0174 18.6 4.21 1.63 0.282 1.09 test.phys hIoni - 4 -0.532 0.0197 18.8 2.59 1.61 0.215 1.31 test.phys hIoni - 5 -0.598 0.0216 18.9 0.724 1.87 0.145 1.45 test.phys hIoni - 6 -0.608 0.0191 18.9 0 0.724 0.0214 1.47 test.phys hIoni + 0 0 0 147 1.44 0 0 0 test.phys initStep + 1 -7.57 -22.1 147 1.03 0 23.3 23.3 test.phys compt + 2 -5.34 -36.3 151 0.796 0 15 38.3 test.phys compt + 3 -37.3 -111 185 0.201 0 87.6 126 test.phys compt + 4 -4.9 -35.9 189 0.185 0 81.4 207 test.phys compt + 5 -1.81 -31.4 193 0.182 0 7.05 214 test.phys compt + 6 8.54 -21.1 200 0.182 0 16.2 231 World Transportation + 7 1e+04 9.98e+03 6.96e+03 0.182 0 1.57e+04 1.59e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 6 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 14.7 0 0 0 test.phys initStep - 1 408 82.1 200 14.7 0 454 454 World Transportation - 2 1e+04 2.01e+03 4.49e+03 14.7 0 1.07e+04 1.11e+04 OutOfWorld Transportation + 0 -1.81 -31.4 193 0.00264 0 0 0 test.phys initStep + 1 -1.81 -31.4 193 0 0.00264 0.000372 0.000372 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -4.9 -35.9 189 0.0156 0 0 0 test.phys initStep + 1 -4.9 -35.9 189 0 0.0156 0.00772 0.00772 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -37.3 -111 185 0.596 0 0 0 test.phys initStep + 1 -37.8 -112 186 0.347 0.249 1.97 1.97 test.phys eIoni + 2 -37.9 -112 186 0 0.347 1.34 3.32 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -5.34 -36.3 151 0.235 0 0 0 test.phys initStep + 1 -5 -36.6 151 0 0.235 0.806 0.806 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -7.57 -22.1 147 0.406 0 0 0 test.phys initStep + 1 -8.33 -22.5 147 0.14 0.267 1.53 1.53 test.phys eIoni + 2 -8.39 -22.6 147 0 0.14 0.35 1.88 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 147 5.39 0 0 0 test.phys initStep + 1 -62.7 -151 0 5.39 0 220 220 World Transportation + 2 -4.16e+03 -1e+04 -9.61e+03 5.39 0 1.44e+04 1.46e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 147 8.47 0 0 0 test.phys initStep + 1 -0.18 0.149 147 6.97 1.5 0.412 0.412 test.phys hIoni + 2 -0.337 0.262 146 5.36 1.61 0.334 0.746 test.phys hIoni + 3 -0.461 0.35 146 3.73 1.62 0.262 1.01 test.phys hIoni + 4 -0.557 0.419 146 2.08 1.65 0.196 1.2 test.phys hIoni + 5 -0.61 0.46 146 0.0545 2.03 0.113 1.32 test.phys hIoni + 6 -0.611 0.46 146 0.00382 0.0507 0.00153 1.32 test.phys hIoni + 7 -0.611 0.46 146 0 0.00382 0.000383 1.32 test.phys hIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 17.6 38 0 0 0 test.phys initStep - 1 136 145 148 37.5 0 238 238 test.phys biasWrapper(hadElastic) - 2 150 150 156 37 0 17.1 255 test.phys biasWrapper(hadElastic) - 3 469 194 200 37 0 325 580 World Transportation - 4 1e+04 1.51e+03 1.51e+03 37 0 9.71e+03 1.03e+04 OutOfWorld Transportation + 0 0 0 147 66.7 0 0 0 test.phys initStep + 1 9.55 34.2 200 66.7 0 63.9 63.9 World Transportation + 2 1.77e+03 6.35e+03 1e+04 66.7 0 1.18e+04 1.19e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 13, Parent ID = 3 +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 150 150 156 0.457 0 0 0 test.phys initStep - 1 150 150 156 0 0.457 0.00221 0.00221 test.phys ionIoni + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation ********************************************************************************************************* -* G4Track Information: Particle = N14, Track ID = 12, Parent ID = 3 +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 136 145 148 0.475 0 0 0 test.phys initStep - 1 136 145 148 0 0.475 0.00223 0.00223 test.phys ionIoni + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 178 99.8 0 178 678 test.phys biasWrapper(hadElastic) + 2 -3.71 -0.1 200 99.8 0 22.6 700 World Transportation + 3 -1.63e+03 -44.2 1e+04 99.8 0 9.93e+03 1.06e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 178 0.205 0 0 0 test.phys initStep + 1 0.00166 4.49e-05 178 0 0.205 0.00183 0.00183 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 79.5 0 0 79.5 579 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = alpha, Track ID = 9, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 3.96 0 0 0 test.phys initStep + 1 -0.0272 0.0187 79.4 0 3.96 0.038 0.038 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = alpha, Track ID = 8, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 3.28 0 0 0 test.phys initStep + 1 0.0239 0.0107 79.5 0 3.28 0.0293 0.0293 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = alpha, Track ID = 7, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 12.1 0 0 0 test.phys initStep + 1 -0.00496 0.113 79.6 4.96 7.17 0.168 0.168 test.phys ionIoni + 2 -0.0063 0.148 79.6 0 4.96 0.0527 0.221 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 0.959 0 0 0 test.phys initStep + 1 -8.32 -3.2 78.3 0.482 0 8.99 8.99 test.phys compt + 2 -102 77.8 70.5 0.386 0 124 133 test.phys compt + 3 -118 180 29.7 0.349 0 111 244 test.phys compt + 4 -105 214 3.55e-15 0.349 0 47.5 291 World Transportation + 5 3.53e+03 1e+04 -8.34e+03 0.349 0 1.34e+04 1.37e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -118 180 29.7 0.0364 0 0 0 test.phys initStep + 1 -118 180 29.7 0 0.0364 0.0346 0.0346 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -102 77.8 70.5 0.0967 0 0 0 test.phys initStep + 1 -102 77.8 70.5 0 0.0967 0.189 0.189 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 6 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -8.32 -3.2 78.3 0.477 0 0 0 test.phys initStep + 1 -9.02 -4.07 78.2 0.248 0.229 1.71 1.71 test.phys eIoni + 2 -9.1 -4.31 78.5 0 0.248 0.876 2.59 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 5, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 13.4 0 0 0 test.phys initStep + 1 0.0213 -0.647 79.8 11.3 2.04 0.737 0.737 test.phys hIoni + 2 0.046 -1.15 80.1 9.47 1.87 0.588 1.32 test.phys hIoni + 3 0.054 -1.56 80.3 7.75 1.71 0.468 1.79 test.phys hIoni + 4 0.0523 -1.88 80.5 6.04 1.72 0.373 2.17 test.phys hIoni + 5 0.0452 -2.12 80.7 4.5 1.53 0.291 2.46 test.phys hIoni + 6 0.0384 -2.31 80.8 2.95 1.56 0.227 2.68 test.phys hIoni + 7 0.0336 -2.45 80.9 1.15 1.8 0.163 2.85 test.phys hIoni + 8 0.0329 -2.49 80.9 0.0295 1.12 0.044 2.89 test.phys hIoni + 9 0.0329 -2.49 80.9 0 0.0295 0.00108 2.89 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 15.3 0 0 0 test.phys initStep + 1 272 -172 77.5 15.1 0 322 322 test.phys biasWrapper(hadElastic) + 2 677 -255 0 15.1 0 421 743 World Transportation + 3 1e+04 -2.16e+03 -1.78e+03 15.1 0 9.68e+03 1.04e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 13, Parent ID = 4 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 272 -172 77.5 0.176 0 0 0 test.phys initStep + 1 272 -172 77.5 0 0.176 0.00174 0.00174 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 79.5 31.2 0 0 0 test.phys initStep + 1 -107 -83.9 200 31.2 0 181 181 World Transportation + 2 -8.77e+03 -6.9e+03 1e+04 31.2 0 1.48e+04 1.49e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 196 99.4 0 196 696 test.phys biasWrapper(hadElastic) + 2 -0.446 1.02 200 99.4 0 4.01 700 World Transportation + 3 -1.14e+03 2.6e+03 1e+04 99.4 0 1.02e+04 1.09e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 196 0.598 0 0 0 test.phys initStep + 1 0.000912 -0.00209 196 0 0.598 0.00235 0.00235 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 5.68 99.8 0 5.68 506 test.phys biasWrapper(hadElastic) + 2 -4.26 -5.38 51.8 99.4 0 46.6 552 test.phys biasWrapper(hadElastic) + 3 5.32 3.62 200 99.4 0 149 701 World Transportation + 4 639 598 1e+04 99.4 0 9.84e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -4.26 -5.38 51.8 0.418 0 0 0 test.phys initStep + 1 -4.26 -5.38 51.8 0 0.418 0.00216 0.00216 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 5.68 0.165 0 0 0 test.phys initStep + 1 0.000922 0.00116 5.68 0 0.165 0.00169 0.00169 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 103 0 0 103 603 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = C13, Track ID = 6, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 103 3.25 0 0 0 test.phys initStep + 1 0.00218 0.00372 103 0 3.25 0.00474 0.00474 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 5, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 103 0.189 0 0 0 test.phys initStep + 1 -4.24 11.2 112 0.169 0.0198 14.9 14.9 test.phys biasWrapper(hadElastic) + 2 0.793 34.5 96.2 0.152 0.0166 28.6 43.5 test.phys biasWrapper(hadElastic) + 3 0.366 35.7 97.1 0.129 0.0237 1.52 45 test.phys biasWrapper(hadElastic) + 4 5.02 36.8 96.4 0.113 0.0155 4.84 49.9 test.phys biasWrapper(hadElastic) + 5 4.68 36.4 85.9 0.0849 0.0282 10.5 60.3 test.phys biasWrapper(hadElastic) + 6 3.53 27.8 166 0.0719 0.013 80.1 140 test.phys biasWrapper(hadElastic) + 7 37.7 34 162 0.0597 0.0122 34.9 175 test.phys biasWrapper(hadElastic) + 8 16 -42.8 103 0.0569 0.00284 98.9 274 test.phys biasWrapper(hadElastic) + 9 -36 -57.1 70.4 0.0497 0.00725 63.1 337 test.phys biasWrapper(hadElastic) + 10 -28.8 -83.4 67.5 0.049 0.000654 27.4 365 test.phys biasWrapper(hadElastic) + 11 -13.7 -101 63.1 0.0488 0.000248 23.9 389 test.phys biasWrapper(hadElastic) + 12 -5.21 -119 57.3 0.045 0.00371 20.6 409 test.phys biasWrapper(hadElastic) + 13 31.9 -135 83.2 0.0414 0.00363 47.8 457 test.phys biasWrapper(hadElastic) + 14 33.2 -130 92.3 0.037 0.00443 10.4 468 test.phys biasWrapper(hadElastic) + 15 33.1 -130 92.4 0.0324 0.00454 0.111 468 test.phys biasWrapper(hadElastic) + 16 40.4 -98.3 121 0.025 0.00745 43.1 511 test.phys biasWrapper(hadElastic) + 17 42.4 -101 116 0.0195 0.0055 5.55 516 test.phys biasWrapper(hadElastic) + 18 -13.5 2.78 143 0.0148 0.00473 121 637 test.phys biasWrapper(hadElastic) + 19 2.55 -21.9 148 0.0133 0.00146 29.8 667 test.phys biasWrapper(hadElastic) + 20 9.93 -21.5 141 0.0101 0.00324 9.64 677 test.phys biasWrapper(hadElastic) + 21 -1.24 -17.2 149 0.00957 0.000487 14.1 691 test.phys biasWrapper(hadElastic) + 22 -21.4 -34.2 172 0.00898 0.000594 35.1 726 test.phys biasWrapper(hadElastic) + 23 -57.3 -59.1 161 0.0071 0.00188 45.2 771 test.phys biasWrapper(hadElastic) + 24 -51.5 -28.2 200 0.0071 0 50.4 821 World Transportation + 25 1.39e+03 7.66e+03 1e+04 0.0071 0 1.25e+04 1.34e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 103 1.32 0 0 0 test.phys initStep + 1 142 91.7 0 1.32 0 198 198 World Transportation + 2 1e+04 6.45e+03 -7.16e+03 1.32 0 1.37e+04 1.39e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 103 87.7 0 0 0 test.phys initStep + 1 -4.29 -8.09 114 78 9.36 14.3 14.3 test.phys hadElastic + 2 -9.39 -13.7 126 68.7 9.35 14 28.2 test.phys hIoni + 3 -13.4 -18.2 135 60.9 7.81 11.2 39.4 test.phys hIoni + 4 -16.7 -21.8 143 53.5 7.39 9.01 48.4 test.phys hIoni + 5 -19.3 -24.8 149 47.4 6.06 7.17 55.6 test.phys hIoni + 6 -21.5 -27.6 153 42.1 5.35 5.81 61.4 test.phys hIoni + 7 -23.2 -29.8 157 36.8 5.24 4.71 66.1 test.phys hIoni + 8 -24.6 -31.6 160 32 4.85 3.74 69.8 test.phys hIoni + 9 -25.7 -33 162 28 3.99 2.93 72.8 test.phys hIoni + 10 -26.6 -34.1 164 24.7 3.31 2.34 75.1 test.phys hIoni + 11 -27.3 -35 166 21.4 3.25 1.9 77 test.phys hIoni + 12 -27.8 -35.7 167 18.6 2.8 1.51 78.5 test.phys hIoni + 13 -28.3 -36.2 168 16.1 2.58 1.21 79.7 test.phys hIoni + 14 -28.6 -36.6 169 13.7 2.32 0.962 80.7 test.phys hIoni + 15 -28.9 -37 170 11.7 2.08 0.766 81.5 test.phys hIoni + 16 -29.1 -37.2 170 9.73 1.93 0.611 82.1 test.phys hIoni + 17 -29.3 -37.4 170 8.06 1.67 0.484 82.6 test.phys hIoni + 18 -29.4 -37.6 171 6.49 1.58 0.39 82.9 test.phys hIoni + 19 -29.5 -37.7 171 4.88 1.6 0.311 83.3 test.phys hIoni + 20 -29.6 -37.8 171 3.23 1.65 0.242 83.5 test.phys hIoni + 21 -29.7 -37.8 171 1.49 1.74 0.175 83.7 test.phys hIoni + 22 -29.7 -37.9 171 0 1.49 0.0664 83.7 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 7, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -4.29 -8.09 114 0.264 0 0 0 test.phys initStep + 1 -4.29 -8.09 114 0 0.264 0.00196 0.00196 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 111 0 0 111 611 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = C12, Track ID = 8, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 3.16 0 0 0 test.phys initStep + 1 0.000396 -0.00404 111 0 3.16 0.00453 0.00453 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 0.119 0 0 0 test.phys initStep + 1 -61.2 -101 200 0.119 0 148 148 World Transportation + 2 -6.04e+03 -1e+04 8.85e+03 0.119 0 1.44e+04 1.46e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 6, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 0.262 0 0 0 test.phys initStep + 1 33.5 36.8 0 0.262 0 122 122 World Transportation + 2 3.04e+03 3.34e+03 -1e+04 0.262 0 1.1e+04 1.11e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 0.567 0 0 0 test.phys initStep + 1 35.1 -12.4 60.7 0.528 0 62.9 62.9 test.phys compt + 2 71.4 -0.727 0 0.528 0 71.7 135 World Transportation + 3 6.06e+03 1.93e+03 -1e+04 0.528 0 1.18e+04 1.19e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 5 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 35.1 -12.4 60.7 0.0392 0 0 0 test.phys initStep + 1 35.1 -12.4 60.7 0 0.0392 0.0395 0.0395 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 2.46 0 0 0 test.phys initStep + 1 -0.0244 -0.0767 112 0.505 1.95 0.137 0.137 test.phys hIoni + 2 -0.0256 -0.0836 112 0.00703 0.498 0.0126 0.15 test.phys hIoni + 3 -0.0256 -0.0837 112 0 0.00703 0.000519 0.151 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 111 80.9 0 0 0 test.phys initStep + 1 -3.89 59.5 176 0 0 88 88 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = Be8, Track ID = 14, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -3.89 59.5 176 2.5 0 0 0 test.phys initStep + 1 -3.89 59.5 176 0 2.5 0.00599 0.00599 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = alpha, Track ID = 13, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -3.89 59.5 176 9.17 0 0 0 test.phys initStep + 1 -3.8 59.5 176 1.86 7.3 0.13 0.13 test.phys ionIoni + 2 -3.79 59.6 176 0 1.86 0.0149 0.145 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 12, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -3.89 59.5 176 2.47 0 0 0 test.phys initStep + 1 -15.7 77.4 182 2.41 0.0605 22.3 22.3 test.phys biasWrapper(hadElastic) + 2 -64.9 274 134 1.87 0 208 230 test.phys biasWrapper(hadElastic) + 3 -123 156 200 1.87 0 147 377 World Transportation + 4 -5.15e+03 -1e+04 5.88e+03 1.87 0 1.27e+04 1.3e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 15, Parent ID = 12 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -64.9 274 134 0.543 0 0 0 test.phys initStep + 1 -64.9 274 134 0 0.543 0.0023 0.0023 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 11, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -3.89 59.5 176 14.1 0 0 0 test.phys initStep + 1 9.57 31.3 173 14.1 0.0297 31.3 31.3 test.phys biasWrapper(hadElastic) + 2 17.5 15.4 169 13.7 0 18.5 49.7 test.phys biasWrapper(hadElastic) + 3 132 -50.5 162 12.8 0 132 182 test.phys biasWrapper(hadElastic) + 4 145 -395 180 12.3 0 345 527 test.phys biasWrapper(hadElastic) + 5 -60 -630 162 12.1 0 312 839 test.phys biasWrapper(hadElastic) + 6 -93.2 -644 160 12 0 36.3 876 test.phys biasWrapper(hadElastic) + 7 -96 -645 159 11.8 0 3.35 879 test.phys biasWrapper(hadElastic) + 8 -96.5 -645 159 0 0 0.46 879 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = C13, Track ID = 26, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.5 -645 159 1.19 0 0 0 test.phys initStep + 1 -96.5 -645 159 0 1.19 0.00308 0.00308 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 25, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.5 -645 159 0.0854 0 0 0 test.phys initStep + 1 -179 -590 199 0.0654 0 107 107 test.phys compt + 2 -165 -631 180 0.0613 0 47 154 test.phys compt + 3 -98.1 -629 86.1 0.0565 0 116 270 test.phys compt + 4 -96.2 -627 86.4 0.055 0 3.19 273 test.phys compt + 5 -53.6 -609 66 0 0.000403 50.5 323 test.phys phot + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 31, Parent ID = 25 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -53.6 -609 66 0.0546 0 0 0 test.phys initStep + 1 -53.6 -609 65.9 0 0.0546 0.0705 0.0705 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 30, Parent ID = 25 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.2 -627 86.4 0.0015 0 0 0 test.phys initStep + 1 -96.2 -627 86.4 0 0.0015 0.000151 0.000151 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 29, Parent ID = 25 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -98.1 -629 86.1 0.00477 0 0 0 test.phys initStep + 1 -98.1 -629 86.1 0 0.00477 0.000994 0.000994 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 28, Parent ID = 25 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -165 -631 180 0.00411 0 0 0 test.phys initStep + 1 -165 -631 180 0 0.00411 0.000772 0.000772 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 25 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -179 -590 199 0.02 0 0 0 test.phys initStep + 1 -179 -590 199 0 0.02 0.012 0.012 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 24, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.5 -645 159 0.219 0 0 0 test.phys initStep + 1 -115 -646 153 0.133 0 18.9 18.9 test.phys compt + 2 -6.57 -590 59.3 0.12 0 154 173 test.phys compt + 3 9.72 -515 45.1 0.0851 0 78.7 251 test.phys compt + 4 26.7 -613 0 0.0851 0 109 360 World Transportation + 5 1.66e+03 -1e+04 -4.32e+03 0.0851 0 1.05e+04 1.08e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 34, Parent ID = 24 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 9.72 -515 45.1 0.0352 0 0 0 test.phys initStep + 1 9.72 -515 45.1 0 0.0352 0.0326 0.0326 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 33, Parent ID = 24 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -6.57 -590 59.3 0.0123 0 0 0 test.phys initStep + 1 -6.56 -590 59.3 0 0.0123 0.00511 0.00511 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 32, Parent ID = 24 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -115 -646 153 0.0861 0 0 0 test.phys initStep + 1 -115 -646 153 0 0.0861 0.155 0.155 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 23, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.5 -645 159 0.481 0 0 0 test.phys initStep + 1 -45.5 -701 200 0.481 0 86.1 86.1 World Transportation + 2 8.47e+03 -1e+04 7.1e+03 0.481 0 1.44e+04 1.45e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 22, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96.5 -645 159 2.27 0 0 0 test.phys initStep + 1 -96.5 -645 159 0.288 1.98 0.126 0.126 test.phys hIoni + 2 -96.5 -645 159 0 0.288 0.00608 0.132 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 21, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -96 -645 159 0.184 0 0 0 test.phys initStep + 1 -96 -645 159 0 0.184 0.00177 0.00177 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 20, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -93.2 -644 160 0.122 0 0 0 test.phys initStep + 1 -93.2 -644 160 0 0.122 0.00145 0.00145 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 19, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -60 -630 162 0.167 0 0 0 test.phys initStep + 1 -60 -630 162 0 0.167 0.00169 0.00169 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 18, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 145 -395 180 0.508 0 0 0 test.phys initStep + 1 145 -395 180 0 0.508 0.00226 0.00226 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 17, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 132 -50.5 162 0.905 0 0 0 test.phys initStep + 1 132 -50.5 162 0 0.905 0.00257 0.00257 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 16, Parent ID = 11 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 17.5 15.4 169 0.37 0 0 0 test.phys initStep + 1 17.5 15.4 169 0 0.37 0.0021 0.0021 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 10, Parent ID = 3 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -3.89 59.5 176 32.7 0 0 0 test.phys initStep + 1 -5.97 59.3 178 28.7 4.03 3.05 3.05 test.phys hIoni + 2 -7.6 59.2 180 24.9 3.82 2.44 5.5 test.phys hIoni + 3 -8.89 59.1 182 21.8 3.11 1.92 7.42 test.phys hIoni + 4 -9.93 59.1 183 18.9 2.88 1.55 8.97 test.phys hIoni + 5 -10.7 59 184 16.3 2.59 1.23 10.2 test.phys hIoni + 6 -11.4 58.9 185 14.1 2.23 0.984 11.2 test.phys hIoni + 7 -11.9 58.9 185 12 2.11 0.792 12 test.phys hIoni + 8 -12.3 58.8 186 10.1 1.87 0.632 12.6 test.phys hIoni + 9 -12.6 58.8 186 8.28 1.82 0.507 13.1 test.phys hIoni + 10 -12.9 58.7 186 6.63 1.65 0.401 13.5 test.phys hIoni + 11 -13.1 58.7 186 5.03 1.6 0.318 13.8 test.phys hIoni + 12 -13.3 58.7 187 3.44 1.58 0.248 14.1 test.phys hIoni + 13 -13.4 58.6 187 1.75 1.7 0.184 14.3 test.phys hIoni + 14 -13.5 58.6 187 0.0422 1.7 0.0859 14.4 test.phys hIoni + 15 -13.5 58.6 187 0.00268 0.0395 0.00132 14.4 test.phys hIoni + 16 -13.5 58.6 187 0 0.00268 0.00032 14.4 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 127 99.9 0 127 627 test.phys biasWrapper(hadElastic) + 2 -3.62 8.91 200 99.9 0 73.8 701 World Transportation + 3 -488 1.2e+03 1e+04 99.9 0 9.88e+03 1.06e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 127 0.129 0 0 0 test.phys initStep + 1 0.000471 -0.00116 127 0 0.129 0.00149 0.00149 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 -500 100 0 0 0 World initStep + 1 0 0 0 100 0 500 500 test.phys Transportation + 2 0 0 0 100 0 0 500 test.phys biasWrapper(0) + 3 0 0 200 100 0 200 700 World Transportation + 4 0 0 1e+04 100 0 9.8e+03 1.05e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 0 100 0 0 500 test.phys initStep + 1 0 0 32.6 0 0 32.6 533 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = Be10, Track ID = 11, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 12.3 0 0 0 test.phys initStep + 1 0.00174 0.00542 32.6 0 12.3 0.0354 0.0354 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 10, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 0.0717 0 0 0 test.phys initStep + 1 -3.46 68.8 7.11e-15 0.0717 0 76.2 76.2 World Transportation + 2 -503 1e+04 -4.71e+03 0.0717 0 1.1e+04 1.11e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 9, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 0.697 0 0 0 test.phys initStep + 1 -85.5 64 7.11e-15 0.697 0 112 112 World Transportation + 2 -1e+04 7.49e+03 -3.78e+03 0.697 0 1.3e+04 1.31e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 8, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 1.25 0 0 0 test.phys initStep + 1 -9.3 -10 7.11e-15 1.25 0 35.4 35.4 World Transportation + 2 -2.86e+03 -3.08e+03 -1e+04 1.25 0 1.08e+04 1.09e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 7, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 3.42 0 0 0 test.phys initStep + 1 -305 -201 169 2.57 0 390 390 test.phys biasWrapper(hadElastic) + 2 -184 -80 78 0 0 194 583 test.phys biasWrapper(neutronInelastic) + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 16, Parent ID = 7 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -184 -80 78 0.482 0 0 0 test.phys initStep + 1 -184 -80 78 0 0.482 0.00223 0.00223 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 15, Parent ID = 7 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -184 -80 78 0.407 0 0 0 test.phys initStep + 1 207 -132 97.5 0.213 0 395 395 test.phys compt + 2 204 -60.2 0 0.213 0 121 517 World Transportation + 3 -170 7.34e+03 -1e+04 0.213 0 1.24e+04 1.3e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 15 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 207 -132 97.5 0.194 0 0 0 test.phys initStep + 1 208 -132 97.6 0 0.194 0.597 0.597 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 14, Parent ID = 7 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -184 -80 78 0.528 0 0 0 test.phys initStep + 1 -279 119 23.6 0.396 0 227 227 test.phys compt + 2 -235 358 98.1 0.3 0 254 481 test.phys compt + 3 -203 485 0 0.3 0 164 645 World Transportation + 4 2.17e+03 1e+04 -7.33e+03 0.3 0 1.22e+04 1.29e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 14 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -235 358 98.1 0.0959 0 0 0 test.phys initStep + 1 -235 358 98.2 0 0.0959 0.186 0.186 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 14 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -279 119 23.6 0.131 0 0 0 test.phys initStep + 1 -279 119 23.5 0 0.131 0.316 0.316 test.phys eIoni + +********************************************************************************************************* +* G4Track Information: Particle = neutron, Track ID = 13, Parent ID = 7 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -184 -80 78 1.07 0 0 0 test.phys initStep + 1 -266 -149 200 1.07 0 162 162 World Transportation + 2 -6.89e+03 -5.66e+03 1e+04 1.07 0 1.3e+04 1.32e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = N14, Track ID = 12, Parent ID = 7 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -305 -201 169 0.85 0 0 0 test.phys initStep + 1 -305 -201 169 0 0.85 0.00253 0.00253 test.phys ionIoni + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 3.65 0 0 0 test.phys initStep + 1 3.68 55.4 7.11e-15 3.65 0 64.4 64.4 World Transportation + 2 664 1e+04 -5.85e+03 3.65 0 1.16e+04 1.16e+04 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 5, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 6.77 0 0 0 test.phys initStep + 1 -0.132 0.291 32.6 5.17 1.6 0.325 0.325 test.phys hIoni + 2 -0.247 0.514 32.5 3.52 1.65 0.254 0.579 test.phys hIoni + 3 -0.323 0.684 32.5 1.83 1.69 0.188 0.766 test.phys hIoni + 4 -0.357 0.769 32.5 0.00853 1.82 0.0927 0.859 test.phys hIoni + 5 -0.357 0.769 32.5 0 0.00853 0.000572 0.86 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 13.1 0 0 0 test.phys initStep + 1 0.18 -0.168 31.9 11.2 2 0.719 0.719 test.phys hIoni + 2 0.316 -0.308 31.4 9.14 2.01 0.575 1.29 test.phys hIoni + 3 0.434 -0.414 31 7.43 1.71 0.449 1.74 test.phys hIoni + 4 0.537 -0.507 30.6 5.85 1.58 0.357 2.1 test.phys hIoni + 5 0.609 -0.58 30.4 4.27 1.58 0.283 2.38 test.phys hIoni + 6 0.66 -0.635 30.2 2.62 1.65 0.218 2.6 test.phys hIoni + 7 0.699 -0.674 30 0.73 1.89 0.146 2.75 test.phys hIoni + 8 0.703 -0.68 30 0.00413 0.726 0.0217 2.77 test.phys hIoni + 9 0.703 -0.68 30 0 0.00413 0.000398 2.77 test.phys hIoni + +********************************************************************************************************* +* G4Track Information: Particle = proton, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 0 0 32.6 19 0 0 0 test.phys initStep + 1 0.387 -0.566 33.6 16.3 2.65 1.24 1.24 test.phys hIoni + 2 0.701 -1 34.5 14 2.36 0.988 2.23 test.phys hIoni + 3 0.952 -1.35 35.1 11.8 2.18 0.785 3.02 test.phys hIoni + 4 1.16 -1.63 35.6 9.89 1.9 0.62 3.64 test.phys hIoni + 5 1.33 -1.85 36.1 8.22 1.67 0.494 4.13 test.phys hIoni + 6 1.46 -2.03 36.4 6.56 1.66 0.398 4.53 test.phys hIoni + 7 1.56 -2.17 36.6 5 1.56 0.315 4.84 test.phys hIoni + 8 1.65 -2.28 36.9 3.39 1.62 0.247 5.09 test.phys hIoni + 9 1.72 -2.35 37 1.69 1.7 0.182 5.27 test.phys hIoni + 10 1.74 -2.39 37.1 0 1.69 0.0813 5.35 test.phys hIoni Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB02/include/GB02ActionInitialization.hh b/examples/extended/biasing/GB02/include/GB02ActionInitialization.hh index f02a964651..fec8471c69 100644 --- a/examples/extended/biasing/GB02/include/GB02ActionInitialization.hh +++ b/examples/extended/biasing/GB02/include/GB02ActionInitialization.hh @@ -39,10 +39,10 @@ class GB02ActionInitialization : public G4VUserActionInitialization { public: GB02ActionInitialization(); - virtual ~GB02ActionInitialization(); + ~GB02ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB02/include/GB02BOptrMultiParticleForceCollision.hh b/examples/extended/biasing/GB02/include/GB02BOptrMultiParticleForceCollision.hh index 67bd261088..7584f162d9 100644 --- a/examples/extended/biasing/GB02/include/GB02BOptrMultiParticleForceCollision.hh +++ b/examples/extended/biasing/GB02/include/GB02BOptrMultiParticleForceCollision.hh @@ -39,7 +39,7 @@ class GB02BOptrMultiParticleForceCollision : public G4VBiasingOperator { public: GB02BOptrMultiParticleForceCollision(); - virtual ~GB02BOptrMultiParticleForceCollision() {} + ~GB02BOptrMultiParticleForceCollision() override = default; // -------------------------- // -- Specific to this class: @@ -51,13 +51,13 @@ class GB02BOptrMultiParticleForceCollision : public G4VBiasingOperator // ----------------------------- // -- Mandatory from base class: // ----------------------------- - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track* track, const G4BiasingProcessInterface* callingProcess) final; - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track* track, const G4BiasingProcessInterface* callingProcess) final; - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track* track, const G4BiasingProcessInterface* callingProcess) final; @@ -80,7 +80,7 @@ class GB02BOptrMultiParticleForceCollision : public G4VBiasingOperator void ExitBiasing(const G4Track*, const G4BiasingProcessInterface*) final; public: - virtual void StartTracking(const G4Track* track) final; + void StartTracking(const G4Track* track) final; private: std::map fBOptrForParticle; diff --git a/examples/extended/biasing/GB02/include/GB02DetectorConstruction.hh b/examples/extended/biasing/GB02/include/GB02DetectorConstruction.hh index 5caddcff66..7fda75279e 100644 --- a/examples/extended/biasing/GB02/include/GB02DetectorConstruction.hh +++ b/examples/extended/biasing/GB02/include/GB02DetectorConstruction.hh @@ -38,11 +38,11 @@ class GB02DetectorConstruction : public G4VUserDetectorConstruction { public: GB02DetectorConstruction(G4bool bf); - ~GB02DetectorConstruction(); + ~GB02DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; private: G4bool fBiasingFlag; diff --git a/examples/extended/biasing/GB02/include/GB02PrimaryGeneratorAction.hh b/examples/extended/biasing/GB02/include/GB02PrimaryGeneratorAction.hh index 0e47e66a10..be69e7f185 100644 --- a/examples/extended/biasing/GB02/include/GB02PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB02/include/GB02PrimaryGeneratorAction.hh @@ -40,9 +40,9 @@ class GB02PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB02PrimaryGeneratorAction(); - virtual ~GB02PrimaryGeneratorAction(); + ~GB02PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; // pointer a to G4 class diff --git a/examples/extended/biasing/GB02/src/GB02BOptrMultiParticleForceCollision.cc b/examples/extended/biasing/GB02/src/GB02BOptrMultiParticleForceCollision.cc index a8a10f3e98..1e7e588827 100644 --- a/examples/extended/biasing/GB02/src/GB02BOptrMultiParticleForceCollision.cc +++ b/examples/extended/biasing/GB02/src/GB02BOptrMultiParticleForceCollision.cc @@ -46,7 +46,7 @@ void GB02BOptrMultiParticleForceCollision::AddParticle(G4String particleName) const G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle(particleName); - if (particle == 0) { + if (particle == nullptr) { G4ExceptionDescription ed; ed << "Particle `" << particleName << "' not found !" << G4endl; G4Exception("GB02BOptrMultiParticleForceCollision::AddParticle(...)", "exGB02.01", JustWarning, @@ -54,8 +54,7 @@ void GB02BOptrMultiParticleForceCollision::AddParticle(G4String particleName) return; } - G4BOptrForceCollision* optr = - new G4BOptrForceCollision(particleName, "ForceCollisionFor" + particleName); + auto optr = new G4BOptrForceCollision(particleName, "ForceCollisionFor" + particleName); fParticlesToBias.push_back(particle); fBOptrForParticle[particle] = optr; } @@ -68,7 +67,7 @@ G4VBiasingOperation* GB02BOptrMultiParticleForceCollision::ProposeOccurenceBiasi if (fCurrentOperator) return fCurrentOperator->GetProposedOccurenceBiasingOperation(track, callingProcess); else - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -79,7 +78,7 @@ G4VBiasingOperation* GB02BOptrMultiParticleForceCollision::ProposeNonPhysicsBias if (fCurrentOperator) return fCurrentOperator->GetProposedNonPhysicsBiasingOperation(track, callingProcess); else - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -90,7 +89,7 @@ G4VBiasingOperation* GB02BOptrMultiParticleForceCollision::ProposeFinalStateBias if (fCurrentOperator) return fCurrentOperator->GetProposedFinalStateBiasingOperation(track, callingProcess); else - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -98,9 +97,8 @@ G4VBiasingOperation* GB02BOptrMultiParticleForceCollision::ProposeFinalStateBias void GB02BOptrMultiParticleForceCollision::StartTracking(const G4Track* track) { const G4ParticleDefinition* definition = track->GetParticleDefinition(); - std::map::iterator it = - fBOptrForParticle.find(definition); - fCurrentOperator = 0; + auto it = fBOptrForParticle.find(definition); + fCurrentOperator = nullptr; if (it != fBOptrForParticle.end()) fCurrentOperator = (*it).second; } diff --git a/examples/extended/biasing/GB02/src/GB02DetectorConstruction.cc b/examples/extended/biasing/GB02/src/GB02DetectorConstruction.cc index da68de9ca8..01c6994e09 100644 --- a/examples/extended/biasing/GB02/src/GB02DetectorConstruction.cc +++ b/examples/extended/biasing/GB02/src/GB02DetectorConstruction.cc @@ -40,11 +40,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB02DetectorConstruction::GB02DetectorConstruction(G4bool bf):fBiasingFlag(bf) {} +GB02DetectorConstruction::GB02DetectorConstruction(G4bool bf) : fBiasingFlag(bf) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB02DetectorConstruction::~GB02DetectorConstruction() {} +GB02DetectorConstruction::~GB02DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -55,17 +55,17 @@ G4VPhysicalVolume* GB02DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number // ----------------------------------- // -- volume where biasing is applied: @@ -73,11 +73,11 @@ G4VPhysicalVolume* GB02DetectorConstruction::Construct() G4double halfZ = 10 * cm; G4VSolid* solidTest = new G4Box("test.solid", 1 * m, 1 * m, halfZ); - G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, // its solid - defaultMaterial, // its material - "test.logical"); // its name + auto logicTest = new G4LogicalVolume(solidTest, // its solid + defaultMaterial, // its material + "test.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // volume entrance at (0,0,0) logicTest, // its logical volume "test.phys", // its name @@ -92,19 +92,19 @@ G4VPhysicalVolume* GB02DetectorConstruction::Construct() void GB02DetectorConstruction::ConstructSDandField() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Fetch volume for biasing: G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical"); // ---------------------------------------------- // -- operator creation and attachment to volume: // ---------------------------------------------- - GB02BOptrMultiParticleForceCollision* testMany = new GB02BOptrMultiParticleForceCollision(); + auto testMany = new GB02BOptrMultiParticleForceCollision(); testMany->AddParticle("gamma"); testMany->AddParticle("neutron"); testMany->AttachTo(logicTest); G4cout << " Attaching biasing operator " << testMany->GetName() << " to logical volume " - << logicTest->GetName() << G4endl; + << logicTest->GetName() << G4endl; } } diff --git a/examples/extended/biasing/GB03/History b/examples/extended/biasing/GB03/History index fa6a656fd2..b8a70e64ae 100644 --- a/examples/extended/biasing/GB03/History +++ b/examples/extended/biasing/GB03/History @@ -6,11 +6,11 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB03-V11-02-00) +## 2025-03-10 Igor Semeniouk (GB03-V11-03-01) - Remove unused WITH_GEANT4_UIVIS cmake option - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. -## 2025-01-30 Igor Semeniouk +## 2025-01-30 Igor Semeniouk (GB03-V11-03-00) - The option -b (bising on/off) - Default splitting probability set to 0.2 - Instantiate G4GenericBiasingPhysics only if biasing selected diff --git a/examples/extended/biasing/GB03/exampleGB03.cc b/examples/extended/biasing/GB03/exampleGB03.cc index be9b9a8549..95e5579cd1 100644 --- a/examples/extended/biasing/GB03/exampleGB03.cc +++ b/examples/extended/biasing/GB03/exampleGB03.cc @@ -50,10 +50,9 @@ void PrintUsage() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - int main(int argc, char** argv) { - // Evaluate arguments + // Evaluate arguments // if (argc > 5) { PrintUsage(); @@ -89,7 +88,7 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes G4VUserDetectorConstruction* detector = new GB03DetectorConstruction(biasingFlag); @@ -119,7 +118,7 @@ int main(int argc, char** argv) // Visualization manager // - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; visManager->Initialize(); // Initialize G4 kernel @@ -128,7 +127,7 @@ int main(int argc, char** argv) // Get the pointer to the User Interface manager // - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (ui) // Define UI session for interactive mode { diff --git a/examples/extended/biasing/GB03/exampleGB03.out b/examples/extended/biasing/GB03/exampleGB03.out index 7fa20bb3bf..dad5e8026e 100644 --- a/examples/extended/biasing/GB03/exampleGB03.out +++ b/examples/extended/biasing/GB03/exampleGB03.out @@ -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 @@ -33,23 +33,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", @@ -138,7 +139,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,6 +792,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 @@ -807,6 +809,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 @@ -882,7 +885,7 @@ GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and prob Run terminated. Run Summary Number of events processed : 10 - User=0.050000s Real=0.063554s Sys=0.000000s + User=0.060000s Real=0.060830s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -945,14 +948,14 @@ GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and prob Run terminated. Run Summary Number of events processed : 10 - User=0.020000s Real=0.020078s Sys=0.000000s + User=0.020000s Real=0.026905s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0xbe8c40 -UserPhysicsList deleted 0xbe9750 -UserActionInitialization deleted 0xda4940 +UserDetectorConstruction deleted 0x80b2f0 +UserPhysicsList deleted 0x80be00 +UserActionInitialization deleted 0x9c7e10 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/biasing/GB03/include/GB03ActionInitialization.hh b/examples/extended/biasing/GB03/include/GB03ActionInitialization.hh index 6929749602..d624705300 100644 --- a/examples/extended/biasing/GB03/include/GB03ActionInitialization.hh +++ b/examples/extended/biasing/GB03/include/GB03ActionInitialization.hh @@ -37,10 +37,10 @@ class GB03ActionInitialization : public G4VUserActionInitialization { public: GB03ActionInitialization(); - virtual ~GB03ActionInitialization(); + ~GB03ActionInitialization() override; - virtual void Build() const; - virtual void BuildForMaster() const; + void Build() const override; + void BuildForMaster() const override; }; #endif diff --git a/examples/extended/biasing/GB03/include/GB03BOptnSplitOrKillOnBoundary.hh b/examples/extended/biasing/GB03/include/GB03BOptnSplitOrKillOnBoundary.hh index 35235df536..b6973006b6 100644 --- a/examples/extended/biasing/GB03/include/GB03BOptnSplitOrKillOnBoundary.hh +++ b/examples/extended/biasing/GB03/include/GB03BOptnSplitOrKillOnBoundary.hh @@ -42,22 +42,23 @@ class GB03BOptnSplitOrKillOnBoundary : public G4VBiasingOperation // -- Constructor : GB03BOptnSplitOrKillOnBoundary(G4String name); // -- destructor: - virtual ~GB03BOptnSplitOrKillOnBoundary(); + ~GB03BOptnSplitOrKillOnBoundary() override; public: // ---------------------------------------------- // -- Methods from G4VBiasingOperation interface: // ---------------------------------------------- // -- Unused: - virtual const G4VBiasingInteractionLaw* - ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, G4ForceCondition&) + const G4VBiasingInteractionLaw* + ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, + G4ForceCondition&) override { - return 0; + return nullptr; } - virtual G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, - const G4Track*, const G4Step*, G4bool&) + G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, const G4Track*, + const G4Step*, G4bool&) override { - return 0; + return nullptr; } // -- Used methods ("non-physics biasing methods"): @@ -65,11 +66,11 @@ class GB03BOptnSplitOrKillOnBoundary : public G4VBiasingOperation // -- Method to return the distance or the condition under which // -- requesting the biasing. The "condition" flag will be indeed // -- used to apply the operation on the geometry boundary. - virtual G4double DistanceToApplyOperation(const G4Track*, G4double, - G4ForceCondition* condition); + G4double DistanceToApplyOperation(const G4Track*, G4double, + G4ForceCondition* condition) override; // -- Method the generate the final state, ie, either the final states // -- corresponding to the splitting or killing cases: - virtual G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*); + G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) override; // -- Specific to this example: // ---------------------------- diff --git a/examples/extended/biasing/GB03/include/GB03BOptrGeometryBasedBiasing.hh b/examples/extended/biasing/GB03/include/GB03BOptrGeometryBasedBiasing.hh index 62fdd65926..aa68fb1ef8 100644 --- a/examples/extended/biasing/GB03/include/GB03BOptrGeometryBasedBiasing.hh +++ b/examples/extended/biasing/GB03/include/GB03BOptrGeometryBasedBiasing.hh @@ -41,7 +41,7 @@ class GB03BOptrGeometryBasedBiasing : public G4VBiasingOperator { public: GB03BOptrGeometryBasedBiasing(); - virtual ~GB03BOptrGeometryBasedBiasing(); + ~GB03BOptrGeometryBasedBiasing() override; public: // ------------------------------ @@ -55,28 +55,28 @@ class GB03BOptrGeometryBasedBiasing : public G4VBiasingOperator // ------------------------- // Optional from base class: // ------------------------- - void StartRun(); + void StartRun() override; private: // -------------------------- // Mandatory from base class: // -------------------------- // Used for splitting/killing: - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track* track, - const G4BiasingProcessInterface* callingProcess); + const G4BiasingProcessInterface* callingProcess) override; // Not used here: - virtual G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } // Not used here: - virtual G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track*, - const G4BiasingProcessInterface*) + G4VBiasingOperation* + ProposeFinalStateBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) override { - return 0; + return nullptr; } private: diff --git a/examples/extended/biasing/GB03/include/GB03DetectorConstruction.hh b/examples/extended/biasing/GB03/include/GB03DetectorConstruction.hh index 537ce3fedf..79de6c8b3a 100644 --- a/examples/extended/biasing/GB03/include/GB03DetectorConstruction.hh +++ b/examples/extended/biasing/GB03/include/GB03DetectorConstruction.hh @@ -44,10 +44,10 @@ class GB03DetectorConstruction : public G4VUserDetectorConstruction { public: GB03DetectorConstruction(G4bool bf); - virtual ~GB03DetectorConstruction(); + ~GB03DetectorConstruction() override; - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; void PrintCalorParameters() const; void SetAbsorberMaterial(G4String materialChoice); diff --git a/examples/extended/biasing/GB03/include/GB03DetectorMessenger.hh b/examples/extended/biasing/GB03/include/GB03DetectorMessenger.hh index 92182cabc8..e7574944e5 100644 --- a/examples/extended/biasing/GB03/include/GB03DetectorMessenger.hh +++ b/examples/extended/biasing/GB03/include/GB03DetectorMessenger.hh @@ -42,10 +42,10 @@ class GB03DetectorMessenger : public G4UImessenger { public: GB03DetectorMessenger(GB03DetectorConstruction*); - virtual ~GB03DetectorMessenger(); + ~GB03DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); - virtual G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand*, G4String) override; + G4String GetCurrentValue(G4UIcommand* command) override; private: GB03DetectorConstruction* fDetector; diff --git a/examples/extended/biasing/GB03/include/GB03PrimaryGeneratorAction.hh b/examples/extended/biasing/GB03/include/GB03PrimaryGeneratorAction.hh index 702808e907..f04ab5c928 100644 --- a/examples/extended/biasing/GB03/include/GB03PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB03/include/GB03PrimaryGeneratorAction.hh @@ -40,9 +40,9 @@ class GB03PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB03PrimaryGeneratorAction(); - virtual ~GB03PrimaryGeneratorAction(); + ~GB03PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; diff --git a/examples/extended/biasing/GB03/src/GB03ActionInitialization.cc b/examples/extended/biasing/GB03/src/GB03ActionInitialization.cc index 8268a95993..8e4c372c5b 100644 --- a/examples/extended/biasing/GB03/src/GB03ActionInitialization.cc +++ b/examples/extended/biasing/GB03/src/GB03ActionInitialization.cc @@ -33,11 +33,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB03ActionInitialization::GB03ActionInitialization() {} +GB03ActionInitialization::GB03ActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB03ActionInitialization::~GB03ActionInitialization() {} +GB03ActionInitialization::~GB03ActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/biasing/GB03/src/GB03BOptnSplitOrKillOnBoundary.cc b/examples/extended/biasing/GB03/src/GB03BOptnSplitOrKillOnBoundary.cc index 9920015e2b..27a4e6f8a1 100644 --- a/examples/extended/biasing/GB03/src/GB03BOptnSplitOrKillOnBoundary.cc +++ b/examples/extended/biasing/GB03/src/GB03BOptnSplitOrKillOnBoundary.cc @@ -39,7 +39,7 @@ GB03BOptnSplitOrKillOnBoundary::GB03BOptnSplitOrKillOnBoundary(G4String name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB03BOptnSplitOrKillOnBoundary::~GB03BOptnSplitOrKillOnBoundary() {} +GB03BOptnSplitOrKillOnBoundary::~GB03BOptnSplitOrKillOnBoundary() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -97,7 +97,7 @@ G4VParticleChange* GB03BOptnSplitOrKillOnBoundary::GenerateBiasingFinalState(con // splitting by a factor N: fParticleChange.SetNumberOfSecondaries(fSplittingFactor - 1); for (G4int iSplit = 1; iSplit < fSplittingFactor; iSplit++) { - G4Track* clone = new G4Track(*track); + auto clone = new G4Track(*track); clone->SetWeight(weightOfTrack); fParticleChange.AddSecondary(clone); } diff --git a/examples/extended/biasing/GB03/src/GB03DetectorConstruction.cc b/examples/extended/biasing/GB03/src/GB03DetectorConstruction.cc index 20d2a79648..65ae85c5ea 100644 --- a/examples/extended/biasing/GB03/src/GB03DetectorConstruction.cc +++ b/examples/extended/biasing/GB03/src/GB03DetectorConstruction.cc @@ -60,20 +60,20 @@ GB03DetectorConstruction::GB03DetectorConstruction(G4bool bf) fTotalThickness(2.0 * m), fLayerThickness(0.), fConstructed(false), - fWorldMaterial(0), - fAbsorberMaterial(0), - fGapMaterial(0), - fLayerSolid(0), - fGapSolid(0), - fWorldLogical(0), - fCalorLogical(0), - fLayerLogical(0), - fGapLogical(0), - fWorldPhysical(0), - fCalorPhysical(0), - fLayerPhysical(0), - fGapPhysical(0), - fDetectorMessenger(0), + fWorldMaterial(nullptr), + fAbsorberMaterial(nullptr), + fGapMaterial(nullptr), + fLayerSolid(nullptr), + fGapSolid(nullptr), + fWorldLogical(nullptr), + fCalorLogical(nullptr), + fLayerLogical(nullptr), + fGapLogical(nullptr), + fWorldPhysical(nullptr), + fCalorPhysical(nullptr), + fLayerPhysical(nullptr), + fGapPhysical(nullptr), + fDetectorMessenger(nullptr), fVerboseLevel(1), fBiasingFlag(bf) { @@ -112,7 +112,7 @@ void GB03DetectorConstruction::ConstructSDandField() if (!fConstructedSDandField) { fConstructedSDandField = true; SetupDetectors(); - if(fBiasingFlag) { + if (fBiasingFlag) { SetupBiasing(); } } @@ -136,25 +136,25 @@ void GB03DetectorConstruction::DefineMaterials() // a = 1.01 * g / mole; - G4Element* H = new G4Element(name = "Hydrogen", symbol = "H", z = 1., a); + auto H = new G4Element(name = "Hydrogen", symbol = "H", z = 1., a); a = 12.01 * g / mole; - G4Element* C = new G4Element(name = "Carbon", symbol = "C", z = 6., a); + auto C = new G4Element(name = "Carbon", symbol = "C", z = 6., a); a = 14.01 * g / mole; - G4Element* N = new G4Element(name = "Nitrogen", symbol = "N", z = 7., a); + auto N = new G4Element(name = "Nitrogen", symbol = "N", z = 7., a); a = 16.00 * g / mole; - G4Element* O = new G4Element(name = "Oxygen", symbol = "O", z = 8., a); + auto O = new G4Element(name = "Oxygen", symbol = "O", z = 8., a); // // define an Element from isotopes, by relative abundance // - G4Isotope* U5 = new G4Isotope(name = "U235", iz = 92, n = 235, a = 235.01 * g / mole); - G4Isotope* U8 = new G4Isotope(name = "U238", iz = 92, n = 238, a = 238.03 * g / mole); + auto U5 = new G4Isotope(name = "U235", iz = 92, n = 235, a = 235.01 * g / mole); + auto U8 = new G4Isotope(name = "U238", iz = 92, n = 238, a = 238.03 * g / mole); - G4Element* U = new G4Element(name = "enriched Uranium", symbol = "U", ncomponents = 2); + auto U = new G4Element(name = "enriched Uranium", symbol = "U", ncomponents = 2); U->AddIsotope(U5, abundance = 90. * perCent); U->AddIsotope(U8, abundance = 10. * perCent); @@ -174,19 +174,19 @@ void GB03DetectorConstruction::DefineMaterials() density = 11.35 * g / cm3; a = 207.19 * g / mole; - G4Material* Pb = new G4Material(name = "Lead", z = 82., a, density); + auto Pb = new G4Material(name = "Lead", z = 82., a, density); // // define a material from elements. case 1: chemical molecule // density = 1.000 * g / cm3; - G4Material* H2O = new G4Material(name = "Water", density, ncomponents = 2); + auto H2O = new G4Material(name = "Water", density, ncomponents = 2); H2O->AddElement(H, natoms = 2); H2O->AddElement(O, natoms = 1); density = 1.032 * g / cm3; - G4Material* Sci = new G4Material(name = "Scintillator", density, ncomponents = 2); + auto Sci = new G4Material(name = "Scintillator", density, ncomponents = 2); Sci->AddElement(C, natoms = 9); Sci->AddElement(H, natoms = 10); @@ -195,7 +195,7 @@ void GB03DetectorConstruction::DefineMaterials() // density = 1.290 * mg / cm3; - G4Material* Air = new G4Material(name = "Air", density, ncomponents = 2); + auto Air = new G4Material(name = "Air", density, ncomponents = 2); Air->AddElement(N, fractionmass = 0.7); Air->AddElement(O, fractionmass = 0.3); @@ -206,8 +206,8 @@ void GB03DetectorConstruction::DefineMaterials() density = universe_mean_density; pressure = 3.e-18 * pascal; temperature = 2.73 * kelvin; - G4Material* Vacuum = new G4Material(name = "Galactic", z = 1., a = 1.01 * g / mole, density, - kStateGas, temperature, pressure); + auto Vacuum = new G4Material(name = "Galactic", z = 1., a = 1.01 * g / mole, density, kStateGas, + temperature, pressure); if (GetVerboseLevel() > 1) { G4cout << *(G4Material::GetMaterialTable()) << G4endl; @@ -228,14 +228,15 @@ void GB03DetectorConstruction::SetupGeometry() // G4VSolid* worldSolid = new G4Box("World", 2. * m, 2. * m, fTotalThickness * 2.); fWorldLogical = new G4LogicalVolume(worldSolid, fWorldMaterial, "World"); - fWorldPhysical = new G4PVPlacement(0, G4ThreeVector(), fWorldLogical, "World", 0, false, 0); + fWorldPhysical = + new G4PVPlacement(nullptr, G4ThreeVector(), fWorldLogical, "World", nullptr, false, 0); // // Calorimeter // G4VSolid* calorSolid = new G4Box("Calor", 0.5 * m, 0.5 * m, fTotalThickness / 2.); fCalorLogical = new G4LogicalVolume(calorSolid, fAbsorberMaterial, fCalName); - fCalorPhysical = new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), fCalorLogical, fCalName, + fCalorPhysical = new G4PVPlacement(nullptr, G4ThreeVector(0., 0., 0.), fCalorLogical, fCalName, fWorldLogical, false, 0); // @@ -251,14 +252,14 @@ void GB03DetectorConstruction::SetupGeometry() // fGapSolid = new G4Box("Gap", 0.5 * m, 0.5 * m, fLayerThickness / 4.); fGapLogical = new G4LogicalVolume(fGapSolid, fGapMaterial, fCalName + "_Gap"); - fGapPhysical = new G4PVPlacement(0, G4ThreeVector(0., 0., fLayerThickness / 4.), fGapLogical, - fCalName + "_gap", fLayerLogical, false, 0); + fGapPhysical = new G4PVPlacement(nullptr, G4ThreeVector(0., 0., fLayerThickness / 4.), + fGapLogical, fCalName + "_gap", fLayerLogical, false, 0); // // Visualization attributes // fWorldLogical->SetVisAttributes(G4VisAttributes::GetInvisible()); - G4VisAttributes* simpleBoxVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); + auto simpleBoxVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); simpleBoxVisAtt->SetVisibility(true); fCalorLogical->SetVisAttributes(simpleBoxVisAtt); fLayerLogical->SetVisAttributes(simpleBoxVisAtt); @@ -272,8 +273,8 @@ void GB03DetectorConstruction::SetupDetectors() G4SDManager::GetSDMpointer()->SetVerboseLevel(1); G4String filterName; - G4SDNeutralFilter* neutralFilter = new G4SDNeutralFilter(filterName = "neutralFilter"); - G4SDChargedFilter* chargedFilter = new G4SDChargedFilter(filterName = "chargedFilter"); + auto neutralFilter = new G4SDNeutralFilter(filterName = "neutralFilter"); + auto chargedFilter = new G4SDChargedFilter(filterName = "chargedFilter"); for (G4int j = 0; j < 2; j++) { // Loop counter j = 0 : absorber @@ -285,7 +286,7 @@ void GB03DetectorConstruction::SetupDetectors() else { detName += "_gap"; } - G4MultiFunctionalDetector* det = new G4MultiFunctionalDetector(detName); + auto det = new G4MultiFunctionalDetector(detName); G4SDManager::GetSDMpointer()->AddNewDetector(det); // The second argument in each primitive means the "level" of geometrical // hierarchy, the copy number of that level is used as the key of the @@ -318,7 +319,7 @@ void GB03DetectorConstruction::SetupDetectors() void GB03DetectorConstruction::SetupBiasing() { - GB03BOptrGeometryBasedBiasing* biasingOperator = new GB03BOptrGeometryBasedBiasing(); + auto biasingOperator = new GB03BOptrGeometryBasedBiasing(); biasingOperator->AttachTo(fLayerLogical); } diff --git a/examples/extended/biasing/GB04/History b/examples/extended/biasing/GB04/History index 1e684310e5..782d0fbea5 100644 --- a/examples/extended/biasing/GB04/History +++ b/examples/extended/biasing/GB04/History @@ -6,7 +6,7 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB04-V11-02-00) +## 2025-03-10 Igor Semeniouk (GB04-V11-03-00) - Remove unused WITH_GEANT4_UIVIS cmake option - Add vis.mac (copied from GB03) and enable detector visualization on startup - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. diff --git a/examples/extended/biasing/GB04/exampleGB04.cc b/examples/extended/biasing/GB04/exampleGB04.cc index b654fbafb8..03bb0e5f57 100644 --- a/examples/extended/biasing/GB04/exampleGB04.cc +++ b/examples/extended/biasing/GB04/exampleGB04.cc @@ -93,16 +93,16 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes - GB04DetectorConstruction* detector = new GB04DetectorConstruction(biasingFlag); + auto detector = new GB04DetectorConstruction(biasingFlag); runManager->SetUserInitialization(detector); // -- Select a physics list - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- And augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); // -- Create list of physics processes to be biased: only brem. in this case: std::vector processToBias; processToBias.push_back("eBrem"); @@ -128,12 +128,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (!ui) // batch mode { diff --git a/examples/extended/biasing/GB04/exampleGB04.out b/examples/extended/biasing/GB04/exampleGB04.out index d59012b72e..85144b608b 100644 --- a/examples/extended/biasing/GB04/exampleGB04.out +++ b/examples/extended/biasing/GB04/exampleGB04.out @@ -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 @@ -42,23 +42,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", @@ -129,7 +130,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 ======== @@ -782,6 +783,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 @@ -798,6 +800,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 @@ -1257,7 +1260,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.000000s Real=0.001548s Sys=0.000000s + User=0.000000s Real=0.001606s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -2343,7 +2346,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.010000s Real=0.002733s Sys=0.000000s + User=0.010000s Real=0.002431s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -3756,14 +3759,14 @@ 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.000000s Real=0.003232s Sys=0.000000s + User=0.000000s Real=0.003164s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:2) -UserDetectorConstruction deleted 0x9228d0 -UserPhysicsList deleted 0x922c50 -UserActionInitialization deleted 0xadddc0 +UserDetectorConstruction deleted 0xa59f80 +UserPhysicsList deleted 0xa5a300 +UserActionInitialization deleted 0xc16290 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/biasing/GB04/include/GB04ActionInitialization.hh b/examples/extended/biasing/GB04/include/GB04ActionInitialization.hh index 9afb83e831..afd4f4eb07 100644 --- a/examples/extended/biasing/GB04/include/GB04ActionInitialization.hh +++ b/examples/extended/biasing/GB04/include/GB04ActionInitialization.hh @@ -39,10 +39,10 @@ class GB04ActionInitialization : public G4VUserActionInitialization { public: GB04ActionInitialization(); - virtual ~GB04ActionInitialization(); + ~GB04ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB04/include/GB04BOptnBremSplitting.hh b/examples/extended/biasing/GB04/include/GB04BOptnBremSplitting.hh index 106150feee..271974eff4 100644 --- a/examples/extended/biasing/GB04/include/GB04BOptnBremSplitting.hh +++ b/examples/extended/biasing/GB04/include/GB04BOptnBremSplitting.hh @@ -50,31 +50,32 @@ class GB04BOptnBremSplitting : public G4VBiasingOperation // -- Constructor : GB04BOptnBremSplitting(G4String name); // -- destructor: - virtual ~GB04BOptnBremSplitting(); + ~GB04BOptnBremSplitting() override; public: // ---------------------------------------------- // -- Methods from G4VBiasingOperation interface: // ---------------------------------------------- // -- Unused: - virtual const G4VBiasingInteractionLaw* - ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, G4ForceCondition&) + const G4VBiasingInteractionLaw* + ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, + G4ForceCondition&) override { - return 0; + return nullptr; } // --Used: - virtual G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, - const G4Track*, const G4Step*, G4bool&); + G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, const G4Track*, + const G4Step*, G4bool&) override; // -- Unsued: - virtual G4double DistanceToApplyOperation(const G4Track*, G4double, G4ForceCondition*) + G4double DistanceToApplyOperation(const G4Track*, G4double, G4ForceCondition*) override { return DBL_MAX; } - virtual G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) + G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) override { - return 0; + return nullptr; } public: diff --git a/examples/extended/biasing/GB04/include/GB04BOptrBremSplitting.hh b/examples/extended/biasing/GB04/include/GB04BOptrBremSplitting.hh index 4b806467e4..3e66372039 100644 --- a/examples/extended/biasing/GB04/include/GB04BOptrBremSplitting.hh +++ b/examples/extended/biasing/GB04/include/GB04BOptrBremSplitting.hh @@ -37,38 +37,37 @@ class GB04BOptrBremSplitting : public G4VBiasingOperator { public: GB04BOptrBremSplitting(); - virtual ~GB04BOptrBremSplitting() {} + ~GB04BOptrBremSplitting() override = default; public: // ------------------------- // Optional from base class: // ------------------------- // -- Call at run start: - virtual void StartRun(); + void StartRun() override; // -- Call at each track starting: - virtual void StartTracking(const G4Track* track); + void StartTracking(const G4Track* track) override; private: // ----------------------------- // -- Mandatory from base class: // ----------------------------- // -- Unused: - virtual G4VBiasingOperation* - ProposeNonPhysicsBiasingOperation(const G4Track* /* track */, - const G4BiasingProcessInterface* /* callingProcess */) + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation( + const G4Track* /* track */, const G4BiasingProcessInterface* /* callingProcess */) override { - return 0; + return nullptr; } - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track* /* track */, - const G4BiasingProcessInterface* /* callingProcess */) + const G4BiasingProcessInterface* /* callingProcess */) override { - return 0; + return nullptr; } // -- Used: - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track* track, - const G4BiasingProcessInterface* callingProcess); + const G4BiasingProcessInterface* callingProcess) override; private: // -- Avoid compiler complaining for (wrong) method shadowing, diff --git a/examples/extended/biasing/GB04/include/GB04DetectorConstruction.hh b/examples/extended/biasing/GB04/include/GB04DetectorConstruction.hh index 0702230313..d9ae54fedc 100644 --- a/examples/extended/biasing/GB04/include/GB04DetectorConstruction.hh +++ b/examples/extended/biasing/GB04/include/GB04DetectorConstruction.hh @@ -39,11 +39,12 @@ class GB04DetectorConstruction : public G4VUserDetectorConstruction { public: GB04DetectorConstruction(G4bool bf); - ~GB04DetectorConstruction(); + ~GB04DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + private: G4bool fBiasingFlag; }; diff --git a/examples/extended/biasing/GB04/include/GB04PrimaryGeneratorAction.hh b/examples/extended/biasing/GB04/include/GB04PrimaryGeneratorAction.hh index 5b0ba296b7..0db800b6ef 100644 --- a/examples/extended/biasing/GB04/include/GB04PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB04/include/GB04PrimaryGeneratorAction.hh @@ -41,9 +41,9 @@ class GB04PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB04PrimaryGeneratorAction(); - virtual ~GB04PrimaryGeneratorAction(); + ~GB04PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; // pointer a to G4 class diff --git a/examples/extended/biasing/GB04/src/GB04BOptnBremSplitting.cc b/examples/extended/biasing/GB04/src/GB04BOptnBremSplitting.cc index 0573369573..a497a63352 100644 --- a/examples/extended/biasing/GB04/src/GB04BOptnBremSplitting.cc +++ b/examples/extended/biasing/GB04/src/GB04BOptnBremSplitting.cc @@ -40,7 +40,7 @@ GB04BOptnBremSplitting::GB04BOptnBremSplitting(G4String name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB04BOptnBremSplitting::~GB04BOptnBremSplitting() {} +GB04BOptnBremSplitting::~GB04BOptnBremSplitting() = default; G4VParticleChange* GB04BOptnBremSplitting::ApplyFinalStateBiasing(const G4BiasingProcessInterface* callingProcess, @@ -73,7 +73,7 @@ GB04BOptnBremSplitting::ApplyFinalStateBiasing(const G4BiasingProcessInterface* // -- We called the brem. process above. Its concrete particle change is indeed // -- a "G4ParticleChangeForLoss" object. We cast this particle change to access // -- methods of the concrete G4ParticleChangeForLoss type: - G4ParticleChangeForLoss* actualParticleChange = (G4ParticleChangeForLoss*)processFinalState; + auto actualParticleChange = (G4ParticleChangeForLoss*)processFinalState; fParticleChange.Initialize(*track); diff --git a/examples/extended/biasing/GB04/src/GB04BOptrBremSplitting.cc b/examples/extended/biasing/GB04/src/GB04BOptrBremSplitting.cc index 9411b2711c..2340fc48ae 100644 --- a/examples/extended/biasing/GB04/src/GB04BOptrBremSplitting.cc +++ b/examples/extended/biasing/GB04/src/GB04BOptrBremSplitting.cc @@ -95,10 +95,10 @@ G4VBiasingOperation* GB04BOptrBremSplitting::ProposeFinalStateBiasingOperation( { // -- Check if biasing of primary particle only is requested. If so, and // -- if particle is not a primary one, don't ask for biasing: - if (fBiasPrimaryOnly && (track->GetParentID() != 0)) return 0; + if (fBiasPrimaryOnly && (track->GetParentID() != 0)) return nullptr; // -- Check if brem. splitting should be applied only once to the track, // -- and if so, and if brem. splitting already occured, don't ask for biasing: - if (fBiasOnlyOnce && (fNInteractions > 0)) return 0; + if (fBiasOnlyOnce && (fNInteractions > 0)) return nullptr; // -- Count the number of times the brem. splitting is applied: fNInteractions++; diff --git a/examples/extended/biasing/GB04/src/GB04DetectorConstruction.cc b/examples/extended/biasing/GB04/src/GB04DetectorConstruction.cc index 1f29d19830..c339420121 100644 --- a/examples/extended/biasing/GB04/src/GB04DetectorConstruction.cc +++ b/examples/extended/biasing/GB04/src/GB04DetectorConstruction.cc @@ -44,11 +44,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB04DetectorConstruction::GB04DetectorConstruction(G4bool bf):fBiasingFlag(bf) {} +GB04DetectorConstruction::GB04DetectorConstruction(G4bool bf) : fBiasingFlag(bf) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB04DetectorConstruction::~GB04DetectorConstruction() {} +GB04DetectorConstruction::~GB04DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -59,17 +59,17 @@ G4VPhysicalVolume* GB04DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number // ----------------------------------- // -- volume where biasing is applied: @@ -77,11 +77,11 @@ G4VPhysicalVolume* GB04DetectorConstruction::Construct() G4double halfZ = 5 * mm; G4VSolid* solidTest = new G4Box("test.solid", 1 * m, 1 * m, halfZ); - G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, // its solid - defaultMaterial, // its material - "test.logical"); // its name + auto logicTest = new G4LogicalVolume(solidTest, // its solid + defaultMaterial, // its material + "test.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // volume entrance at (0,0,0) logicTest, // its logical volume "test.phys", // its name @@ -96,17 +96,17 @@ G4VPhysicalVolume* GB04DetectorConstruction::Construct() void GB04DetectorConstruction::ConstructSDandField() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Fetch volume for biasing: G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical"); // ---------------------------------------------- // -- operator creation and attachment to volume: // ---------------------------------------------- - GB04BOptrBremSplitting* bremSplittingOperator = new GB04BOptrBremSplitting(); + auto bremSplittingOperator = new GB04BOptrBremSplitting(); bremSplittingOperator->AttachTo(logicTest); G4cout << " Attaching biasing operator " << bremSplittingOperator->GetName() - << " to logical volume " << logicTest->GetName() << G4endl; + << " to logical volume " << logicTest->GetName() << G4endl; } } diff --git a/examples/extended/biasing/GB04/src/GB04PrimaryGeneratorAction.cc b/examples/extended/biasing/GB04/src/GB04PrimaryGeneratorAction.cc index 43df0e0e6e..5e8eac9cc6 100644 --- a/examples/extended/biasing/GB04/src/GB04PrimaryGeneratorAction.cc +++ b/examples/extended/biasing/GB04/src/GB04PrimaryGeneratorAction.cc @@ -39,7 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... GB04PrimaryGeneratorAction::GB04PrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), fParticleGun(0) + : G4VUserPrimaryGeneratorAction(), fParticleGun(nullptr) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); diff --git a/examples/extended/biasing/GB05/History b/examples/extended/biasing/GB05/History index dc6451b67e..d038f7e5c3 100644 --- a/examples/extended/biasing/GB05/History +++ b/examples/extended/biasing/GB05/History @@ -6,7 +6,11 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB05-V11-02-00) +## 2025-03-14 Igor Semeniouk (GB05-V11-03-01) +- The explicit call of base class constructor +in GB05DetectorConstruction removed + +## 2025-03-10 Igor Semeniouk (GB05-V11-03-00) - Remove unused WITH_GEANT4_UIVIS cmake option - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. diff --git a/examples/extended/biasing/GB05/exampleGB05.cc b/examples/extended/biasing/GB05/exampleGB05.cc index 00c60e1f72..c7dc9d1b8a 100644 --- a/examples/extended/biasing/GB05/exampleGB05.cc +++ b/examples/extended/biasing/GB05/exampleGB05.cc @@ -92,16 +92,16 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes - GB05DetectorConstruction* detector = new GB05DetectorConstruction(biasingFlag); + auto detector = new GB05DetectorConstruction(biasingFlag); runManager->SetUserInitialization(detector); // -- Select a physics list: - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- and augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); biasingPhysics->BeVerbose(); biasingPhysics->Bias("neutron"); physicsList->RegisterPhysics(biasingPhysics); @@ -122,12 +122,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (!ui) // batch mode { diff --git a/examples/extended/biasing/GB05/exampleGB05.out b/examples/extended/biasing/GB05/exampleGB05.out index 63e714dd66..7e1381fa87 100644 --- a/examples/extended/biasing/GB05/exampleGB05.out +++ b/examples/extended/biasing/GB05/exampleGB05.out @@ -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 @@ -44,23 +44,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 ======== @@ -784,6 +785,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 @@ -800,6 +802,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 @@ -840,1335 +843,1557 @@ Max 2J for sampling of angular correlations 10 neutron, kinetic energy (MeV) = 2.92357, position (cm) = (-153.424,49.4274,200), weight = 0.015625 neutron, kinetic energy (MeV) = 1.45902e-06, position (cm) = (-118.714,-5.44267,200), weight = 2.38419e-07 neutron, kinetic energy (MeV) = 13.2472, position (cm) = (-113.093,8.46028,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 8.55483, position (cm) = (-226.909,116.991,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 0.713145, position (cm) = (-197.98,99.7128,200), weight = 1.86265e-09 - neutron, kinetic energy (MeV) = 0.502118, position (cm) = (-204.388,115.126,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 3.84934, position (cm) = (-183.219,125.204,200), weight = 1.86265e-09 - neutron, kinetic energy (MeV) = 1.49397, position (cm) = (-161.575,80.9582,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 4.19423, position (cm) = (-175.026,95.7023,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.0710192, position (cm) = (-173.82,92.13,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.201873, position (cm) = (-169.189,97.7882,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 2.75214, position (cm) = (-169.135,97.835,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.0819125, position (cm) = (-170.339,110.245,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 6.29512, position (cm) = (-172.952,95.5957,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 3.45773, position (cm) = (-173.378,89.1198,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 1.0742, position (cm) = (-175.953,79.4319,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 6.84564, position (cm) = (-150.549,55.9288,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 5.90147, position (cm) = (-152.484,77.9961,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 23.7297, position (cm) = (-106.172,-56.9445,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 23.7297, position (cm) = (-106.172,-56.9445,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 23.7297, position (cm) = (-106.172,-56.9445,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.200372, position (cm) = (-94.9753,-22.0048,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-109.357,-32.0302,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.432599, position (cm) = (-104.131,-34.5328,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.149822, position (cm) = (-93.0154,-14.251,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 5.23608, position (cm) = (-78.5617,3.01466,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 3.0447, position (cm) = (73.4786,118.026,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 5.41199, position (cm) = (45.2471,130.435,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.141538, position (cm) = (25.7409,153.125,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 6.82844, position (cm) = (27.8876,152.228,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 6.82844, position (cm) = (27.8876,152.228,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 20.7032, position (cm) = (16.1133,136.373,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.141067, position (cm) = (90.3915,114.297,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 28.9865, position (cm) = (66.2504,129.693,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 28.9865, position (cm) = (66.2504,129.693,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 28.9865, position (cm) = (66.2504,129.693,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.0745659, position (cm) = (13.444,80.878,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 1.35736, position (cm) = (-12.3037,62.1327,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 1.46194, position (cm) = (-12.1903,61.9742,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 2.60951, position (cm) = (-12.3222,62.0475,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 27.3397, position (cm) = (-20.3374,61.3396,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.0605458, position (cm) = (-16.755,55.1915,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 3.29027, position (cm) = (-18.6592,55.77,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 7.20229, position (cm) = (-20.3259,55.7185,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 29.0408, position (cm) = (-18.2824,54.6687,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 0.000690264, position (cm) = (-54.0428,83.4104,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 28.7668, position (cm) = (-31.9426,64.8606,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 29.3263, position (cm) = (-32.5569,64.7007,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 1.61319, position (cm) = (-36.2047,64.1224,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 15.071, position (cm) = (-30.6832,57.3003,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.0925493, position (cm) = (-32.2192,60.2916,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 1.93659, position (cm) = (-30.8293,57.7323,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.739776, position (cm) = (-29.2342,56.1004,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.152782, position (cm) = (-27.6985,59.0369,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.109124, position (cm) = (-27.0257,84.2614,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.0228697, position (cm) = (-47.3945,42.2948,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 37.5899, position (cm) = (-76.3227,75.5085,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 36.3798, position (cm) = (-25.5304,71.3502,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 5.97193, position (cm) = (-37.6445,73.8445,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.157783, position (cm) = (-48.1122,48.8751,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 36.9419, position (cm) = (-27.5092,58.3269,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.3603, position (cm) = (-27.9993,56.5109,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.17058, position (cm) = (-30.8393,50.0627,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 5.28743, position (cm) = (-32.6259,58.7699,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.79107, position (cm) = (-39.6696,58.0809,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 7.71107, position (cm) = (-40.6059,-61.3098,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 2.00747, position (cm) = (-22.3354,-11.8869,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 31.5188, position (cm) = (-86.3734,55.1966,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 31.5188, position (cm) = (-86.3734,55.1966,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 31.2079, position (cm) = (-86.1272,54.6854,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.531715, position (cm) = (-71.1651,64.0365,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.99524e-06, position (cm) = (-86.6135,58.2858,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.21718, position (cm) = (-78.3684,51.8057,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.43675, position (cm) = (-84.6989,63.0464,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 1.07319, position (cm) = (-91.2697,59.9967,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 0.000432558, position (cm) = (-80.3293,60.1386,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 31.7207, position (cm) = (-87.0481,68.4786,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 31.7125, position (cm) = (-86.0763,65.4304,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.100453, position (cm) = (-46.9292,65.6154,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 60.2035, position (cm) = (22.8962,-2.87315,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 60.2035, position (cm) = (22.8962,-2.87315,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 99.5015, position (cm) = (-2.1033,13.057,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 2.46189, position (cm) = (1.73424,14.6248,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.30156, position (cm) = (-8.20926,-4.29827,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 62.2119, position (cm) = (-4.19464,-0.121002,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 2.91067, position (cm) = (-28.1452,48.8932,200), weight = 0.00195312 - e-, kinetic energy (MeV) = 0.0226535, position (cm) = (-65.7535,36.3368,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.853046, position (cm) = (-61.0543,31.7685,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.151944, position (cm) = (-65.0179,32.4668,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 63.8883, position (cm) = (-62.1336,31.3634,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.26284, position (cm) = (-59.7714,24.4273,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.135203, position (cm) = (-71.5062,24.5125,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 52.3775, position (cm) = (-67.5662,27.2989,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 61.0358, position (cm) = (-56.7353,39.7137,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 1.77969, position (cm) = (-30.0965,38.3229,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 18.142, position (cm) = (-28.2016,34.9589,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 0.537123, position (cm) = (-25.9211,86.5188,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 3.00544, position (cm) = (-15.686,82.1797,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 17.0539, position (cm) = (-13.9517,29.7933,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 17.9009, position (cm) = (-12.5217,28.3754,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.068331, position (cm) = (-32.8957,19.7489,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 0.709574, position (cm) = (-31.0965,38.5166,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 17.774, position (cm) = (-26.4357,23.6387,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 1.46765, position (cm) = (-47.1027,29.1925,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.242509, position (cm) = (-60.0822,38.8344,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 4.22793, position (cm) = (-55.8896,31.1648,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.0985635, position (cm) = (-59.6858,40.8163,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.309178, position (cm) = (-45.8319,61.4122,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 3.52305, position (cm) = (-64.7589,38.3027,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 7.19533, position (cm) = (-61.0821,39.6143,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 21.9552, position (cm) = (-60.9343,40.7741,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 21.9434, position (cm) = (-60.9926,40.7562,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 21.9552, position (cm) = (-60.9343,40.7741,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 27.2695, position (cm) = (-45.7447,36.0695,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 1.76768, position (cm) = (-124.738,-75.593,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 1.09586, position (cm) = (-148.164,-44.4821,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 21.1275, position (cm) = (-141.404,-43.1704,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 20.0334, position (cm) = (-134.196,-48.4048,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 21.4175, position (cm) = (-131.681,-48.0892,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.196859, position (cm) = (-136.366,-48.6656,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 1.12222, position (cm) = (-136.803,-50.3063,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 0.00661615, position (cm) = (-125.67,-49.59,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 7.45286, position (cm) = (-134.808,-48.4929,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-137.366,-77.0367,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 2.28104, position (cm) = (-146.632,-64.2609,200), weight = 1.86265e-09 - neutron, kinetic energy (MeV) = 0.000224854, position (cm) = (-140.065,-70.063,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.859813, position (cm) = (-140.967,-65.8665,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.231904, position (cm) = (-159.725,-54.6493,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 7.44195, position (cm) = (-176.172,-68.1045,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 21.9498, position (cm) = (-152.696,-90.7515,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 18.4595, position (cm) = (-151.439,-88.5262,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.0711754, position (cm) = (-139.885,-51.8914,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.168379, position (cm) = (-151.88,-55.8226,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 0.00703821, position (cm) = (-123.899,-43.6343,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.293841, position (cm) = (-58.339,-37.1309,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 1.62927e-06, position (cm) = (-87.1705,-57.2981,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 15.7937, position (cm) = (-125.224,-23.4548,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.253185, position (cm) = (-128.296,-26.1879,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.676439, position (cm) = (-135.068,-49.8312,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.104527, position (cm) = (-126.722,-12.9113,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.0974046, position (cm) = (-134.327,-26.7749,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.353795, position (cm) = (-144.38,-33.5399,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.0953335, position (cm) = (-157.917,-33.3208,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.174829, position (cm) = (-164.259,-58.751,200), weight = 3.72529e-09 - e-, kinetic energy (MeV) = 1.3204, position (cm) = (-150.14,-54.8448,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 15.8566, position (cm) = (-126.233,-21.9736,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 35.2457, position (cm) = (-135.916,-22.2258,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 2.67024, position (cm) = (-134.357,-18.2314,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.29379, position (cm) = (-136.345,-24.4726,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 35.3581, position (cm) = (-128.023,-12.1855,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 2.00424, position (cm) = (-127.905,-12.8217,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 19.5794, position (cm) = (-130.097,-9.26406,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.11414, position (cm) = (-140.395,2.18331,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 4.45056, position (cm) = (-140.892,2.07073,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 15.5737, position (cm) = (-140.495,2.19551,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 21.0871, position (cm) = (-141.886,2.17514,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 21.4216, position (cm) = (-142.056,7.68644,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 1.87234, position (cm) = (-172.451,-15.4821,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 2.93606, position (cm) = (-188.048,-20.9017,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0841346, position (cm) = (-161.353,-62.3326,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.0673685, position (cm) = (-69.6779,5.93543,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 21.29, position (cm) = (97.6454,-56.4045,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 43.3327, position (cm) = (64.4478,-15.8359,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 43.0444, position (cm) = (62.0579,-15.3109,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 43.0444, position (cm) = (62.0579,-15.3109,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 43.2826, position (cm) = (51.0607,5.83709,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.69867, position (cm) = (53.2429,-26.9765,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 71.0905, position (cm) = (50.336,-39.6399,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 71.9355, position (cm) = (48.8059,-25.8824,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 54.501, position (cm) = (103.738,-37.5982,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 95.373, position (cm) = (100.55,-33.2418,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 96.3058, position (cm) = (102.54,-31.9045,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 96.918, position (cm) = (102.4,-33.3742,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 11.6982, position (cm) = (85.6142,-24.2604,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.206375, position (cm) = (84.7069,-33.47,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 9.13302, position (cm) = (100.576,-43.7052,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 9.41089, position (cm) = (103.043,-49.2367,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 9.41089, position (cm) = (103.043,-49.2367,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 9.41089, position (cm) = (103.043,-49.2367,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.807155, position (cm) = (89.7085,-36.2608,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 47.2482, position (cm) = (96.7777,-27.8362,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 96.4962, position (cm) = (93.8305,-18.9387,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.724283, position (cm) = (64.5049,-26.4506,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 0.00770364, position (cm) = (70.5584,-16.9213,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 33.1677, position (cm) = (88.0422,-41.6221,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 70.089, position (cm) = (40.8905,-94.3645,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 70.089, position (cm) = (40.8905,-94.3645,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 70.089, position (cm) = (40.8905,-94.3645,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 95.652, position (cm) = (47.25,-105.095,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 95.652, position (cm) = (47.25,-105.095,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 2.10025, position (cm) = (31.28,-58.0807,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 96.0436, position (cm) = (45.3966,-109.638,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.216975, position (cm) = (78.309,-68.3967,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.0988364, position (cm) = (59.1603,-74.2263,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 97.4258, position (cm) = (72.3933,-79.2889,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 89.5585, position (cm) = (77.9074,-83.5167,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 97.0962, position (cm) = (81.0059,-88.4178,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 97.0962, position (cm) = (81.0059,-88.4178,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.18717, position (cm) = (3.31515,14.3658,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.121601, position (cm) = (-8.47094,15.7192,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.67935, position (cm) = (-12.0165,6.03554,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 1.00127, position (cm) = (-10.2423,10.6959,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.101877, position (cm) = (-48.8431,54.5751,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.197826, position (cm) = (-50.4581,52.7021,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 4.50966, position (cm) = (-41.513,65.7318,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 5.35862, position (cm) = (-37.9757,55.5798,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 33.7653, position (cm) = (-45.3235,71.4266,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 5.09904, position (cm) = (52.2348,31.8024,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 0.833183, position (cm) = (49.4741,43.3071,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 2.33903, position (cm) = (53.5325,46.8826,200), weight = 0.015625 - gamma, kinetic energy (MeV) = 0.15404, position (cm) = (-0.849144,31.4341,200), weight = 0.0625 - gamma, kinetic energy (MeV) = 0.0761746, position (cm) = (122.764,-41.536,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 0.274037, position (cm) = (123.562,-44.6198,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 1.00687, position (cm) = (118.112,-33.6427,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 10.8971, position (cm) = (112.058,-36.8002,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.0559923, position (cm) = (123.209,-55.8094,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.695788, position (cm) = (123.971,-49.5659,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 4.57083, position (cm) = (121.426,-45.314,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 1.69375, position (cm) = (118.938,-67.9676,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.484104, position (cm) = (31.8344,9.41761,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.414914, position (cm) = (30.0653,-15.6999,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 2.3735, position (cm) = (27.7533,4.64952,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.000485804, position (cm) = (71.1353,-19.9126,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 2.34176, position (cm) = (68.8316,0.24618,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.120988, position (cm) = (94.7337,3.08393,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.348284, position (cm) = (70.1861,2.8419,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 11.952, position (cm) = (92.5929,-9.45704,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 21.2281, position (cm) = (22.9745,-9.03717,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.256451, position (cm) = (20.4058,-11.7889,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 21.2281, position (cm) = (22.9745,-9.03717,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 21.3819, position (cm) = (21.0721,-8.96938,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 14.3465, position (cm) = (8.6556,-27.6639,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.0782774, position (cm) = (12.0093,-33.8068,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 6.03103, position (cm) = (23.9176,-37.3665,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 3.96834e-06, position (cm) = (15.0776,-27.6266,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.324332, position (cm) = (-28.7588,-93.3361,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 0.223962, position (cm) = (-78.1962,-18.3081,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 7.60081, position (cm) = (-78.0876,-28.3579,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 5.00202, position (cm) = (-73.3806,-15.6754,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.145689, position (cm) = (-74.7013,-26.6556,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.78129, position (cm) = (-83.0344,-25.6361,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.84718, position (cm) = (-75.304,-26.4624,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.00277762, position (cm) = (-101.899,2.82028,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 1.01531, position (cm) = (-115.533,13.1823,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.217076, position (cm) = (-115.356,3.16802,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.224591, position (cm) = (-85.7397,-6.80566,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.209764, position (cm) = (-101.487,8.6713,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.0761422, position (cm) = (-99.6575,13.8085,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 3.71226, position (cm) = (-91.609,-2.00375,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 50.6205, position (cm) = (-96.3267,-13.9123,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.192028, position (cm) = (-95.5772,-10.8339,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.293194, position (cm) = (-70.2218,-13.7159,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 50.627, position (cm) = (-97.0087,-14.1766,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 50.627, position (cm) = (-97.0087,-14.1766,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 50.5426, position (cm) = (-97.9649,-14.3862,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 50.1162, position (cm) = (-101.61,-17.3542,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.609041, position (cm) = (-104.027,-7.74996,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.279637, position (cm) = (-92.998,-16.7381,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.000899374, position (cm) = (-98.4531,-5.50224,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-108.064,-31.9405,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.118942, position (cm) = (-95.2877,13.8417,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 14.0308, position (cm) = (-89.9782,16.3654,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.570411, position (cm) = (-94.0905,15.8876,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 3.38535, position (cm) = (-92.6489,16.066,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.301281, position (cm) = (-83.99,41.1439,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.299824, position (cm) = (-87.7556,13.2411,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 14.0308, position (cm) = (-89.9782,16.3654,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 19.8048, position (cm) = (-85.4023,-13.0224,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 19.5933, position (cm) = (-84.8575,-12.2598,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 3.28761, position (cm) = (-102.734,-15.5592,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 2.9611e-07, position (cm) = (-87.1001,-8.16942,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 1.35277, position (cm) = (-101.306,16.8183,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 4.66009, position (cm) = (-109.392,10.2914,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.115898, position (cm) = (-106.304,22.9908,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.225774, position (cm) = (-131.169,5.63916,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.305716, position (cm) = (-127.896,1.54239,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.887476, position (cm) = (-143.933,-5.45305,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 11.3862, position (cm) = (-128.231,7.93056,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 11.3862, position (cm) = (-128.231,7.93056,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 50.9813, position (cm) = (-106.286,14.6247,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 51.7842, position (cm) = (-92.8088,19.4341,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 51.6382, position (cm) = (-92.3271,19.6288,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.106635, position (cm) = (-104.681,-1.75021,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 47.8461, position (cm) = (-112.794,-40.2282,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 8.73996, position (cm) = (-81.7179,35.9906,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 90.9802, position (cm) = (46.361,18.3053,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 1.15531, position (cm) = (45.22,31.8022,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 18.6536, position (cm) = (49.0867,-20.8309,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.139945, position (cm) = (63.22,-23.1948,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.134718, position (cm) = (73.9813,-20.9981,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.104204, position (cm) = (54.7601,-26.652,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 4.96886, position (cm) = (47.5556,-18.1648,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.124257, position (cm) = (40.7287,-29.9737,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.51319, position (cm) = (29.9564,-44.0246,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.31372, position (cm) = (66.19,-41.2755,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.499463, position (cm) = (41.1224,-7.20237,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.73629, position (cm) = (47.2738,-21.633,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 71.6323, position (cm) = (68.8806,-40.9765,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0740432, position (cm) = (68.1889,-37.0916,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 2.29391, position (cm) = (67.9095,-39.1419,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 3.42334, position (cm) = (68.3384,-36.885,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 6.59704, position (cm) = (68.1455,-37.4989,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 27.7969, position (cm) = (68.6381,-39.5303,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 71.5162, position (cm) = (75.0207,-48.9457,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.250701, position (cm) = (65.5711,-42.8166,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 3.08853, position (cm) = (70.3834,-47.625,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 3.57303, position (cm) = (73.4725,-46.6984,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.10918, position (cm) = (72.3363,-57.1125,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 0.00290217, position (cm) = (76.7844,-59.7354,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.522777, position (cm) = (55.3474,8.9362,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.933034, position (cm) = (57.5273,-9.7015,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.00397464, position (cm) = (69.7083,20.1778,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 3.44951, position (cm) = (45.8112,11.044,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 3.13433, position (cm) = (-25.4417,55.8736,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 53.3781, position (cm) = (-38.5874,54.1442,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 98.2636, position (cm) = (-28.5981,54.1586,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 98.2323, position (cm) = (-28.7884,54.5383,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 98.1429, position (cm) = (-28.0521,55.9521,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.153959, position (cm) = (-20.2863,60.4755,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 98.3163, position (cm) = (-27.6864,55.321,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 98.3163, position (cm) = (-27.6864,55.321,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 98.3163, position (cm) = (-27.6864,55.321,200), weight = 0.000244141 - e-, kinetic energy (MeV) = 1.95929, position (cm) = (-3.40635,50.0514,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.2222, position (cm) = (28.585,66.9356,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 56.1403, position (cm) = (39.4775,49.0619,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 55.247, position (cm) = (39.4688,35.4376,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.080891, position (cm) = (57.1729,52.1002,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 70.4519, position (cm) = (49.9152,43.1806,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 69.8183, position (cm) = (49.3132,43.7315,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 98.1854, position (cm) = (2.95795,47.9371,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 98.1854, position (cm) = (2.95795,47.9371,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 4.54611, position (cm) = (56.0614,15.3049,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 7.04624, position (cm) = (-85.1196,139.024,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 6.65293, position (cm) = (-86.5017,139.169,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.0792991, position (cm) = (-55.153,-10.6653,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 58.5415, position (cm) = (-55.5611,-15.3706,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.19064, position (cm) = (-58.4315,-8.65142,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 46.7412, position (cm) = (-56.4392,-14.2463,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 58.5415, position (cm) = (-55.5611,-15.3706,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 58.5415, position (cm) = (-55.5611,-15.3706,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 58.6546, position (cm) = (-61.3185,-21.4805,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 58.3349, position (cm) = (-56.608,-16.7693,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 58.2989, position (cm) = (-56.9288,-16.5357,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 2.10496, position (cm) = (5.05645,28.0177,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 1.42305, position (cm) = (1.80989,24.0824,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 85.3199, position (cm) = (-39.6122,20.0225,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 85.3199, position (cm) = (-39.6122,20.0225,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.000129509, position (cm) = (-57.8296,4.93763,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 3.58764, position (cm) = (-63.2301,11.1434,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.503623, position (cm) = (-62.5824,15.5355,200), weight = 6.10352e-05 - e-, kinetic energy (MeV) = 2.63031, position (cm) = (-60.77,14.7142,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 47.7389, position (cm) = (-75.3715,7.73303,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 47.8878, position (cm) = (-73.6015,9.04715,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 33.5945, position (cm) = (-72.0434,9.66201,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 47.8878, position (cm) = (-73.6015,9.04715,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 47.8878, position (cm) = (-73.6015,9.04715,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 85.8303, position (cm) = (-32.5105,15.7444,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.0603814, position (cm) = (-7.43731,-3.72367,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 22.8361, position (cm) = (-15.7573,2.07137,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 22.2078, position (cm) = (-26.4505,5.92821,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.74319, position (cm) = (-1.80915,23.1785,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.303518, position (cm) = (-4.15549,4.52925,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 16.8484, position (cm) = (0.406374,4.02157,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 16.8484, position (cm) = (0.406374,4.02157,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 2.40426, position (cm) = (-3.72125,5.07823,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 16.8484, position (cm) = (0.406374,4.02157,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 16.8484, position (cm) = (0.406374,4.02157,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 2.22308, position (cm) = (-25.9936,25.835,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.00505889, position (cm) = (-14.5527,32.8576,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 86.1638, position (cm) = (-4.00438,31.0532,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.0906956, position (cm) = (14.8958,5.19992,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 7.16498, position (cm) = (14.4861,4.90283,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 12.8428, position (cm) = (15.3097,4.90888,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.388125, position (cm) = (17.1864,5.94373,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.54995, position (cm) = (13.9282,5.49722,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 9.3453, position (cm) = (13.2273,4.52967,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 11.4151, position (cm) = (7.8323,66.2696,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 11.4151, position (cm) = (7.8323,66.2696,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 5.28089, position (cm) = (35.636,21.3102,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 6.1205, position (cm) = (16.796,95.7163,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.381582, position (cm) = (18.3543,117.406,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.390952, position (cm) = (17.7236,115.198,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.14288, position (cm) = (15.7477,117.338,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.53072, position (cm) = (17.7546,117.665,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.27152, position (cm) = (19.6749,113.876,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 6.96279, position (cm) = (15.1306,116.882,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.877938, position (cm) = (49.4919,120.359,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 3.23825, position (cm) = (50.154,124.841,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 59.3735, position (cm) = (7.35363,104.726,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.130338, position (cm) = (42.3634,109.762,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 2.48808e-05, position (cm) = (59.4103,112.843,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 59.3454, position (cm) = (20.8619,140.073,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 59.3454, position (cm) = (20.8619,140.073,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 59.3454, position (cm) = (20.8619,140.073,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 59.3454, position (cm) = (20.8619,140.073,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 1.54681, position (cm) = (43.5957,64.6383,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 28.968, position (cm) = (40.6911,166.449,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.62674, position (cm) = (45.5417,138.082,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.105606, position (cm) = (50.2991,129.349,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.0309958, position (cm) = (37.5928,122.326,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.619796, position (cm) = (50.5527,127.209,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 28.7136, position (cm) = (45.2746,124.341,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 28.7136, position (cm) = (45.2746,124.341,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 28.5687, position (cm) = (43.8905,125.054,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.41838, position (cm) = (47.1286,123.555,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 4.44234, position (cm) = (44.4393,124.171,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 0.560364, position (cm) = (33.3945,129.197,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 5.24036, position (cm) = (38.5512,130.431,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 3.30051, position (cm) = (37.5208,126.698,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 20.3353, position (cm) = (40.8936,126.372,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 27.9339, position (cm) = (45.6915,122.989,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.000648601, position (cm) = (39.9192,139.926,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 4.22025, position (cm) = (40.4401,126.501,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 29.5632, position (cm) = (39.1556,147.078,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.109029, position (cm) = (46.9588,125.672,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 1.41035, position (cm) = (40.4197,137.496,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 6.31793, position (cm) = (36.5593,123.514,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 2.28718, position (cm) = (83.1026,157.856,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 1.82902, position (cm) = (33.6645,147.567,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 1.21263, position (cm) = (34.2748,137.271,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 4.50063, position (cm) = (27.6004,131.126,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 2.31282, position (cm) = (28.4946,132.571,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 29.7391, position (cm) = (34.0772,143.365,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 10.0826, position (cm) = (31.2568,129.393,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.105874, position (cm) = (26.8139,8.61687,200), weight = 0.0625 - neutron, kinetic energy (MeV) = 4.68495, position (cm) = (46.6507,-42.8126,200), weight = 0.03125 - gamma, kinetic energy (MeV) = 8.22596, position (cm) = (182.945,150.476,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 6.89952, position (cm) = (88.5998,238.269,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 58.3748, position (cm) = (290.305,178.508,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 58.3748, position (cm) = (290.305,178.508,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 58.3748, position (cm) = (290.305,178.508,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 1.66049, position (cm) = (293.273,171.87,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 42.6965, position (cm) = (289.553,177.895,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.399398, position (cm) = (285.136,221.282,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 28.9577, position (cm) = (291.662,230.27,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 58.9102, position (cm) = (300.562,241.494,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 58.9235, position (cm) = (301.292,243.374,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 58.9235, position (cm) = (301.292,243.374,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 58.9235, position (cm) = (301.292,243.374,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 58.9235, position (cm) = (301.292,243.374,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 2.01342, position (cm) = (302.395,243.729,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 58.5291, position (cm) = (300.363,237.813,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 27.5107, position (cm) = (294.259,179.179,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 26.9988, position (cm) = (293.089,180.588,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 27.5107, position (cm) = (294.259,179.179,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 27.5107, position (cm) = (294.259,179.179,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 2.30703, position (cm) = (229.823,200.958,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 1.15478, position (cm) = (212.83,203.985,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 2.41092e-07, position (cm) = (191.181,214.703,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.0837917, position (cm) = (210.039,190.989,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 0.647802, position (cm) = (213.189,191.229,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.290493, position (cm) = (209.995,188.312,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.12888, position (cm) = (190.118,195.767,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 34.6165, position (cm) = (194.879,169.45,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 34.6165, position (cm) = (194.879,169.45,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 1.65477, position (cm) = (206.711,171.639,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 34.2261, position (cm) = (208.717,188.178,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.418964, position (cm) = (220.259,180.08,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.245129, position (cm) = (209.122,177.145,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 1.57633, position (cm) = (208.527,174.904,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 1.82217, position (cm) = (209.945,177.02,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 2.43017, position (cm) = (207.011,173.974,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 18.9644, position (cm) = (238.217,192.979,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 18.9644, position (cm) = (238.217,192.979,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 18.8621, position (cm) = (237.489,191.103,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 34.818, position (cm) = (213.402,191.449,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 35.0083, position (cm) = (211.864,189.035,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 34.4509, position (cm) = (208.862,185.259,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.740294, position (cm) = (209.512,196.282,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.286145, position (cm) = (201.023,190.243,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 26.521, position (cm) = (169.848,176.375,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 25.4057, position (cm) = (173.892,176.509,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.148766, position (cm) = (208.361,238.214,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.164545, position (cm) = (192.878,242.018,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 2.04281, position (cm) = (231.895,272.859,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.153803, position (cm) = (201.801,289.423,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 66.8577, position (cm) = (200.726,251.416,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 6.33343, position (cm) = (136.648,135.135,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 1.57546e-05, position (cm) = (96.9788,93.6574,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.0416645, position (cm) = (58.1438,150.604,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 4.0822, position (cm) = (38.8927,162.705,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0955646, position (cm) = (41.1324,21.9946,200), weight = 0.25 - neutron, kinetic energy (MeV) = 0.000362231, position (cm) = (-125.661,83.1055,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 20.8508, position (cm) = (-124.497,93.1347,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 20.8508, position (cm) = (-124.497,93.1347,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.0011265, position (cm) = (-129.315,114.144,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0749173, position (cm) = (-122.498,106.228,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.57763, position (cm) = (-105.742,78.3144,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 5.85472, position (cm) = (-100.803,120.996,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 7.08078, position (cm) = (-131.262,90.2562,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0787516, position (cm) = (-141.636,94.5442,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 1.75739, position (cm) = (-129.436,88.1875,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 3.54464, position (cm) = (-130.876,89.4966,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 4.54183, position (cm) = (-132.724,88.512,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 1.50216, position (cm) = (-129.291,66.6253,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.340524, position (cm) = (-133.45,77.9115,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.00510887, position (cm) = (-75.9433,89.2988,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.394796, position (cm) = (-112.434,88.8079,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.734185, position (cm) = (-37.1069,28.9599,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 57.2291, position (cm) = (-33.8781,39.1021,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 54.3768, position (cm) = (-39.401,39.9735,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 57.0434, position (cm) = (-20.013,24.5871,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 57.5408, position (cm) = (-12.5417,30.7649,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 57.5408, position (cm) = (-12.5417,30.7649,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 2.11352, position (cm) = (-13.6945,33.6827,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 40.2173, position (cm) = (-13.6826,29.9844,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.0895594, position (cm) = (-7.28343,20.294,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 5.69115, position (cm) = (-7.76294,41.0143,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 9.17238, position (cm) = (-14.593,34.4698,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 9.17238, position (cm) = (-14.593,34.4698,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 9.17238, position (cm) = (-14.593,34.4698,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.36967, position (cm) = (7.1114,26.5613,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 15.6088, position (cm) = (-0.422066,-9.78277,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 1.37766, position (cm) = (-3.68047,-5.53228,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 26.1592, position (cm) = (5.06431,-2.03512,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0839745, position (cm) = (0.811094,-5.96773,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.499437, position (cm) = (-8.14588,-19.6005,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 3.13734, position (cm) = (4.19803,-7.93245,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 6.32106, position (cm) = (2.8925,-3.71319,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 25.6151, position (cm) = (6.01016,-5.64689,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 20.1644, position (cm) = (21.3392,5.95991,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 25.816, position (cm) = (4.38513,-9.58749,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.10225, position (cm) = (48.0396,31.9419,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.16566, position (cm) = (-24.1339,47.2479,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.0237373, position (cm) = (25.9663,4.46884,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0990453, position (cm) = (11.3698,7.92608,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 4.30738, position (cm) = (33.2336,5.0389,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.0148416, position (cm) = (41.6638,-1.34368,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.350788, position (cm) = (29.8672,1.06328,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.66374, position (cm) = (51.6879,4.72461,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.223003, position (cm) = (45.7077,17.661,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 14.8133, position (cm) = (44.3317,1.98982,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.04504, position (cm) = (18.7803,8.08516,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.259142, position (cm) = (23.8492,17.8165,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 2.38445, position (cm) = (31.5044,6.96988,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 7.0897, position (cm) = (23.5228,46.8445,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.315074, position (cm) = (27.4576,45.9217,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 14.0851, position (cm) = (32.6332,11.8179,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.610254, position (cm) = (11.4629,17.3772,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 7.78732, position (cm) = (16.8836,29.4543,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.392591, position (cm) = (22.5967,7.66316,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.46532, position (cm) = (26.1949,23.7166,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 1.90495, position (cm) = (12.2323,32.2481,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.00168026, position (cm) = (14.0796,34.2052,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.121275, position (cm) = (13.0167,12.1432,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 35.0443, position (cm) = (19.1373,25.4757,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 56.3379, position (cm) = (20.8643,27.5532,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 55.9681, position (cm) = (20.5275,25.4525,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 54.6407, position (cm) = (20.288,25.1956,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 56.3379, position (cm) = (20.8643,27.5532,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.140848, position (cm) = (16.2086,27.7583,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 0.00530781, position (cm) = (16.372,28.9169,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 1.2249, position (cm) = (15.2515,32.3419,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 1.37304, position (cm) = (19.4003,26.201,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 55.7289, position (cm) = (22.073,19.0753,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 55.7289, position (cm) = (22.073,19.0753,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 54.9512, position (cm) = (29.2771,22.4469,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 55.4554, position (cm) = (30.4158,23.5497,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.467964, position (cm) = (36.3495,34.9983,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.292225, position (cm) = (-13.1205,-17.7133,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 41.5677, position (cm) = (-19.5077,-9.69213,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 42.7254, position (cm) = (2.60401,-9.86793,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.157297, position (cm) = (28.0093,47.0442,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.118887, position (cm) = (12.7174,36.1881,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.111473, position (cm) = (66.3656,20.6645,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 2.86567, position (cm) = (55.7161,26.4122,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 2.86567, position (cm) = (55.7161,26.4122,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.325713, position (cm) = (47.1647,20.8122,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.179542, position (cm) = (45.4329,22.4029,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.00330305, position (cm) = (48.3402,30.6155,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.139583, position (cm) = (40.3344,20.8827,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.61263, position (cm) = (8.14907,-16.5572,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.701063, position (cm) = (-68.0226,-69.0191,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 11.218, position (cm) = (-77.0648,-69.7993,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 83.6209, position (cm) = (-64.9132,-70.0983,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 3.72645, position (cm) = (-79.8603,-53.1145,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 30.5781, position (cm) = (-96.5702,-51.4532,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 15.0873, position (cm) = (-87.6808,-57.6029,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 1.54997, position (cm) = (-79.0561,-67.8357,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 4.74516, position (cm) = (-94.7053,-33.5539,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.85058, position (cm) = (-65.7517,-88.0494,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 85.8942, position (cm) = (-54.8363,-139.579,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 85.6039, position (cm) = (-51.9799,-138.081,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 86.0032, position (cm) = (-51.1021,-136.919,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 85.9957, position (cm) = (-51.5661,-136.941,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 2.08117, position (cm) = (-167.98,-53.5044,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.688778, position (cm) = (-194.205,-64.1698,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 39.2389, position (cm) = (-174.336,-71.3106,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 39.2389, position (cm) = (-174.336,-71.3106,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.124265, position (cm) = (-165.198,-73.5326,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.525657, position (cm) = (-180.292,-81.8381,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 3.15853, position (cm) = (-170.443,-67.1403,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 44.9486, position (cm) = (-172.335,-75.0789,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 4.38057, position (cm) = (-10.9924,-108.331,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.713293, position (cm) = (16.4716,-124.892,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 33.1132, position (cm) = (-20.4731,-163.569,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.217504, position (cm) = (-11.1007,-146.225,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 6.04525e-07, position (cm) = (-14.1596,-159.28,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.0584644, position (cm) = (-38.1112,-111.372,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.194475, position (cm) = (-54.397,-125.141,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.21039e-06, position (cm) = (-26.3991,-103.545,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.855829, position (cm) = (-21.9782,-101.172,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 1.82315, position (cm) = (-25.5509,-89.046,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.766541, position (cm) = (-28.8964,-98.8165,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.963125, position (cm) = (-16.3882,-91.5308,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 36.7846, position (cm) = (-92.0554,-78.393,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.136554, position (cm) = (-87.3511,-86.3448,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 1.52652, position (cm) = (-83.8397,-90.8844,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 3.80583, position (cm) = (-89.379,-88.5912,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 36.4841, position (cm) = (-91.9121,-78.1985,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 36.7846, position (cm) = (-92.0554,-78.393,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.0973716, position (cm) = (-83.2298,-75.9638,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 8.01823, position (cm) = (-85.5969,-101.776,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 8.6522, position (cm) = (-78.8304,-109.193,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 8.23963, position (cm) = (-70.1166,-102.163,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 8.39868, position (cm) = (-70.1654,-104.025,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.260015, position (cm) = (-68.2416,-106.665,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 1.84279, position (cm) = (-53.9232,-135.554,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.14605, position (cm) = (-87.05,-98.6944,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.318391, position (cm) = (-120.823,-108.876,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 2.84741, position (cm) = (-76.1605,-91.7076,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 18.0882, position (cm) = (-66.3946,-90.7537,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 18.0882, position (cm) = (-66.3946,-90.7537,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 22.1709, position (cm) = (-96.0239,-75.7227,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 20.7899, position (cm) = (-96.0259,-75.73,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.205773, position (cm) = (-60.6266,-108.792,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 2.45469, position (cm) = (-74.5642,-89.1087,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 4.06225, position (cm) = (-73.6233,-95.462,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 4.06225, position (cm) = (-73.6233,-95.462,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 84.0402, position (cm) = (-92.3611,-117.643,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.343378, position (cm) = (-69.4289,-115.877,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 0.878136, position (cm) = (-70.8805,-112.591,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 1.30224, position (cm) = (-70.7659,-116.364,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-74.4109,-107.33,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.1805, position (cm) = (-79.5993,-106.732,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 9.77551, position (cm) = (-71.1896,-115.696,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.0791344, position (cm) = (-36.9924,-103.666,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.142402, position (cm) = (-109.227,-127.974,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.552261, position (cm) = (-108.158,-126.327,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.843131, position (cm) = (-109.443,-127.602,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 7.70223, position (cm) = (-108.903,-127.258,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.294131, position (cm) = (-135.691,-113.343,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 3.42799, position (cm) = (13.716,-104.14,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 90.6959, position (cm) = (-67.8797,-63.9641,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 8.40397, position (cm) = (-30.9808,-23.6448,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 8.87151, position (cm) = (8.51987,10.522,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 12.6235, position (cm) = (-5.96819,3.42886,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 12.6235, position (cm) = (-5.96819,3.42886,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 3.85858e-07, position (cm) = (-18.2066,24.2456,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 5.50391, position (cm) = (-9.30239,10.4568,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 12.3738, position (cm) = (-2.94357,14.5369,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 1.72491, position (cm) = (-13.3254,5.32117,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.175489, position (cm) = (-14.0995,11.6926,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 12.3738, position (cm) = (-2.94357,14.5369,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 12.2791, position (cm) = (-3.37663,14.9353,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 1.45054, position (cm) = (-13.7028,-1.07652,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 0.00018775, position (cm) = (-16.3346,32.3109,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 12.6235, position (cm) = (-5.96819,3.42886,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 1.69337, position (cm) = (3.20488,-39.1529,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.00449966, position (cm) = (-97.1299,-18.9521,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.302751, position (cm) = (-56.2981,-56.7799,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 11.4292, position (cm) = (-41.212,-34.8307,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.101657, position (cm) = (18.9951,-31.0019,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 54.2548, position (cm) = (20.0754,-41.0184,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.0933683, position (cm) = (19.0626,-40.1326,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.154614, position (cm) = (22.1683,-37.6065,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 1.73239, position (cm) = (22.2726,-39.5482,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 2.00483, position (cm) = (3.04214,-27.361,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.122189, position (cm) = (23.0418,-42.5603,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 4.99812, position (cm) = (21.1851,-38.4708,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 54.2548, position (cm) = (20.0754,-41.0184,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 2.6413, position (cm) = (43.3059,-49.2761,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 2.90502, position (cm) = (38.8423,-48.2654,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 2.20259, position (cm) = (24.8775,-35.1929,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 2.59546, position (cm) = (49.3563,-45.7886,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.312829, position (cm) = (41.6147,-30.4536,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 3.43281, position (cm) = (45.7675,-57.7073,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 4.35217, position (cm) = (45.0809,-54.8268,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 9.3159, position (cm) = (56.4111,-47.9897,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 98.9713, position (cm) = (54.9652,-50.6534,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 6.16162, position (cm) = (54.3442,-50.7581,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 6.79058, position (cm) = (54.4238,-52.4234,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 9.45007, position (cm) = (55.0417,-50.6115,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.785389, position (cm) = (57.0925,-49.2727,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 26.9546, position (cm) = (31.7997,-44.2017,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 26.4885, position (cm) = (35.613,-43.1088,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.294318, position (cm) = (31.6847,-41.7341,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 15.663, position (cm) = (37.5976,-46.2828,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 27.0572, position (cm) = (31.4413,-44.1494,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.125951, position (cm) = (56.9089,-56.1619,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.486678, position (cm) = (45.5124,-75.8026,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.909303, position (cm) = (27.2865,-59.9617,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 52.7266, position (cm) = (30.0706,-47.8548,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 52.7266, position (cm) = (30.0706,-47.8548,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 1.19848, position (cm) = (20.541,48.7225,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.12165, position (cm) = (19.849,48.7522,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 1.24501e-05, position (cm) = (20.572,55.895,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 9.49712, position (cm) = (22.23,55.2691,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 21.7269, position (cm) = (8.09064,62.3731,200), weight = 0.015625 - gamma, kinetic energy (MeV) = 0.234007, position (cm) = (7.62173,57.4485,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 6.44447, position (cm) = (11.8096,61.9015,200), weight = 0.015625 - gamma, kinetic energy (MeV) = 3.64907, position (cm) = (22.2047,14.5743,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 44.7113, position (cm) = (56.5802,16.4575,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 44.1737, position (cm) = (56.6105,22.1087,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 44.3433, position (cm) = (49.383,27.8608,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.541775, position (cm) = (-21.6911,-5.62332,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 56.5873, position (cm) = (-11.9498,-12.4231,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 4.96589, position (cm) = (82.1612,-17.9364,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.173668, position (cm) = (64.3989,-45.7961,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.0877974, position (cm) = (56.0216,-64.6389,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.767479, position (cm) = (54.0049,-58.5867,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 9.96688, position (cm) = (64.6851,-46.5574,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 1.43718, position (cm) = (49.548,-31.8883,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.159886, position (cm) = (58.1448,-7.81693,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 1.42184, position (cm) = (65.9601,-6.24036,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.144219, position (cm) = (59.431,-24.4645,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 1.67532, position (cm) = (59.7067,-6.56551,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.468885, position (cm) = (49.93,2.75352,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 1.73862, position (cm) = (53.7769,-3.73113,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.432801, position (cm) = (51.5005,-1.32679,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 12.5398, position (cm) = (47.9967,-14.211,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 2.4935, position (cm) = (52.4386,-16.8075,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.780138, position (cm) = (44.1101,-21.7785,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 1.58424, position (cm) = (44.0882,-21.4563,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.527147, position (cm) = (48.1259,-12.282,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 8.02441, position (cm) = (55.6061,-9.81835,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 7.43782, position (cm) = (55.4885,-10.3363,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 2.69239, position (cm) = (62.9672,-26.3459,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 22.7423, position (cm) = (64.0533,-33.6014,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 21.8293, position (cm) = (46.2089,-46.0349,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 21.8293, position (cm) = (46.2089,-46.0349,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0852589, position (cm) = (66.1678,-45.3536,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 1.55206e-06, position (cm) = (8.36276,-10.9919,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.6544e-05, position (cm) = (21.1414,-11.7591,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.750644, position (cm) = (-32.8102,-53.452,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 4.21685, position (cm) = (31.294,-14.5943,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 5.68182, position (cm) = (110.688,-92.3689,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 0.177158, position (cm) = (130.604,-82.2505,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 12.5692, position (cm) = (110.324,-98.2822,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 12.6273, position (cm) = (110.456,-98.1693,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.136508, position (cm) = (96.7941,-110.731,200), weight = 7.45058e-09 - e-, kinetic energy (MeV) = 1.04213, position (cm) = (111.212,-100.76,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.0321351, position (cm) = (111.202,-100.731,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 0.00094982, position (cm) = (111.849,-97.202,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 5.68155, position (cm) = (109.675,-98.0399,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.420489, position (cm) = (99.84,-116.414,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.0928342, position (cm) = (110.78,-80.3097,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.106378, position (cm) = (97.3902,-89.1442,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 2.24021, position (cm) = (80.1691,-85.9486,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 3.13215, position (cm) = (74.3689,-89.5376,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.093556, position (cm) = (58.7296,-66.2207,200), weight = 1.86265e-09 - neutron, kinetic energy (MeV) = 0.269087, position (cm) = (79.7545,-78.4178,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 2.25777, position (cm) = (73.5642,-87.7363,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 2.63658, position (cm) = (78.1924,-88.7739,200), weight = 9.31323e-10 - gamma, kinetic energy (MeV) = 5.60481, position (cm) = (80.2287,-96.5474,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 0.179937, position (cm) = (75.1724,-88.1201,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 1.92431, position (cm) = (58.3253,-97.366,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 1.92431, position (cm) = (58.3253,-97.366,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.0848961, position (cm) = (108.352,-97.1167,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 8.09459, position (cm) = (120.85,-142.657,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 13.589, position (cm) = (120.049,-149.769,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 13.589, position (cm) = (120.049,-149.769,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 2.99874, position (cm) = (113.97,-142.86,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 13.589, position (cm) = (120.049,-149.769,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 13.589, position (cm) = (120.049,-149.769,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.117637, position (cm) = (101.244,-78.7099,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.161148, position (cm) = (101.154,-111.51,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 2.81791, position (cm) = (116.821,-105.03,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.499709, position (cm) = (99.531,-89.2079,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 90.3308, position (cm) = (-18.6903,32.259,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 67.9334, position (cm) = (-30.8321,35.8663,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 1.19665, position (cm) = (-27.1705,34.691,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 59.3328, position (cm) = (-33.8433,41.3357,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 96.8119, position (cm) = (-12.532,39.9624,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.3568, position (cm) = (-19.2063,28.3439,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 1.49866, position (cm) = (-23.2126,-0.172742,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 98.7037, position (cm) = (-18.5705,40.8474,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 98.7037, position (cm) = (-18.5705,40.8474,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 98.7666, position (cm) = (-16.3991,39.4533,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 2.87444, position (cm) = (-15.0133,37.6506,200), weight = 3.05176e-05 - proton, kinetic energy (MeV) = 59.7659, position (cm) = (-14.6706,37.8122,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 98.617, position (cm) = (-15.1003,37.9745,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 32.2249, position (cm) = (-19.8069,46.7969,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 45.073, position (cm) = (-10.3776,76.5001,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 7.32594, position (cm) = (-11.4169,63.5228,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 45.073, position (cm) = (-10.3776,76.5001,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 0.58921, position (cm) = (-40.8152,8.70908,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 0.26338, position (cm) = (-45.5727,17.71,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.234333, position (cm) = (-22.3442,15.7647,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 92.0083, position (cm) = (-53.469,5.38147,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.0654131, position (cm) = (29.4477,11.623,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 63.2829, position (cm) = (-2.09394,14.2972,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 64.4549, position (cm) = (-3.96343,19.8711,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 68.3753, position (cm) = (-17.4805,22.4722,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.150897, position (cm) = (-10.8177,21.4158,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 29.4787, position (cm) = (-18.2358,23.9662,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 29.2773, position (cm) = (-16.797,24.0075,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 68.5607, position (cm) = (-11.6887,21.748,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 68.6106, position (cm) = (-11.843,21.7984,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 2.03594, position (cm) = (4.99922,28.1162,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 19.8604, position (cm) = (5.78826,35.0014,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 19.855, position (cm) = (5.77149,34.7612,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 19.855, position (cm) = (5.77149,34.7612,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 19.855, position (cm) = (5.77149,34.7612,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 19.8604, position (cm) = (5.78826,35.0014,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 3.98679e-07, position (cm) = (-6.11538,34.6675,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 98.7696, position (cm) = (-13.0537,35.6538,200), weight = 0.015625 - gamma, kinetic energy (MeV) = 3.80291, position (cm) = (38.7491,93.5916,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.91637, position (cm) = (47.3048,98.5338,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 10.6536, position (cm) = (40.1359,95.2164,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.76779, position (cm) = (29.8334,63.1945,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 1.42553, position (cm) = (61.1476,114.499,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.508833, position (cm) = (34.9347,47.6769,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.33851, position (cm) = (28.319,68.0431,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 1.41431, position (cm) = (49.1933,33.3069,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.170038, position (cm) = (40.9217,48.617,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.661541, position (cm) = (44.4855,47.1803,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 11.6902, position (cm) = (31.0307,55.1312,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 11.6902, position (cm) = (31.0307,55.1312,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 4.97269, position (cm) = (20.0731,53.0534,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 11.6902, position (cm) = (31.0307,55.1312,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.711527, position (cm) = (37.3496,53.1111,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.382311, position (cm) = (43.8749,52.5762,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 10.736, position (cm) = (27.0237,69.0737,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 3.52835, position (cm) = (38.9867,51.9068,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.0922936, position (cm) = (40.9503,42.2323,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 39.2901, position (cm) = (33.9353,43.5102,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.217667, position (cm) = (38.416,49.3537,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.531907, position (cm) = (44.2147,46.5263,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 12.928, position (cm) = (147.772,-15.899,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 7.17355, position (cm) = (128.852,3.7319,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 1.80966, position (cm) = (137.032,-7.33292,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 2.08268e-05, position (cm) = (157.718,31.2788,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 2.86538, position (cm) = (107.262,0.447564,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 10.6623, position (cm) = (-40.8456,39.1716,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 10.6623, position (cm) = (-40.8456,39.1716,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 5.68827, position (cm) = (-30.0902,-13.1376,200), weight = 0.0625 - gamma, kinetic energy (MeV) = 6.1334, position (cm) = (-49.6753,-2.16709,200), weight = 0.03125 - neutron, kinetic energy (MeV) = 73.8776, position (cm) = (-111.033,98.3732,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.428048, position (cm) = (-118.013,116.132,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 1.29842, position (cm) = (-131.957,99.9376,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 21.7587, position (cm) = (-164.2,108.019,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.294017, position (cm) = (-138.619,95.7165,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.45848, position (cm) = (-144.391,104.141,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 1.40786, position (cm) = (-150.6,101.63,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 73.3069, position (cm) = (-123.307,84.2854,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 73.4284, position (cm) = (-123.376,83.3609,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.413594, position (cm) = (-123.057,78.9424,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 5.68041, position (cm) = (-125.285,81.6514,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.146874, position (cm) = (-153.807,116.684,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 3.23835e-06, position (cm) = (-141.905,106.217,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 72.8539, position (cm) = (-103.98,57.226,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 70.7727, position (cm) = (-99.6011,70.145,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 70.7727, position (cm) = (-99.6011,70.145,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.239681, position (cm) = (-91.8904,59.7251,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 42.6206, position (cm) = (-79.0063,88.0514,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 43.3473, position (cm) = (-79.7953,90.2588,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 43.3473, position (cm) = (-79.7953,90.2588,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 3.37809, position (cm) = (-86.9843,80.0125,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.167509, position (cm) = (-52.0441,42.8662,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 73.4372, position (cm) = (-102.757,78.5822,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 73.4372, position (cm) = (-102.757,78.5822,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 73.6424, position (cm) = (-106.68,76.569,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 73.6424, position (cm) = (-106.68,76.569,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 73.4972, position (cm) = (-106.621,75.663,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 73.6424, position (cm) = (-106.68,76.569,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 73.4838, position (cm) = (-106.524,76.6498,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 4.4049, position (cm) = (-114.617,62.4791,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 16.7157, position (cm) = (-107.623,65.0997,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 72.2317, position (cm) = (-98.3741,77.3279,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 72.3422, position (cm) = (-110.836,82.1573,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 5.29657e-05, position (cm) = (-107.984,94.9197,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.317865, position (cm) = (-34.6026,58.4066,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.50364, position (cm) = (9.22799,-14.5563,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 10.6823, position (cm) = (-2.85268,17.1351,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.0997843, position (cm) = (-11.5112,16.433,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 0.00102938, position (cm) = (8.38503,18.989,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 69.6897, position (cm) = (-9.56759,27.4073,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 69.6897, position (cm) = (-9.56759,27.4073,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 69.6897, position (cm) = (-9.56759,27.4073,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 38.2944, position (cm) = (-41.3431,-18.918,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.419522, position (cm) = (-23.2515,12.3168,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.317869, position (cm) = (-41.938,-22.2812,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.395615, position (cm) = (-29.5788,-0.508266,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.110391, position (cm) = (-29.6437,-1.78995,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.113132, position (cm) = (-29.4028,-1.88434,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.0934129, position (cm) = (-50.0944,-31.1048,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 1.27359, position (cm) = (-1.53364,-17.96,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 37.5814, position (cm) = (-39.6627,-25.2793,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 53.4305, position (cm) = (-93.4247,22.4052,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 1.8751e-07, position (cm) = (-152.165,-60.3165,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 19.3499, position (cm) = (11.4227,71.2132,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 19.3499, position (cm) = (11.4227,71.2132,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.120824, position (cm) = (-3.16874,60.3664,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.159971, position (cm) = (-10.7803,26.3055,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.0710439, position (cm) = (-23.5771,61.1138,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.217366, position (cm) = (-27.944,64.3449,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.00258313, position (cm) = (-7.22207,47.4258,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.0019411, position (cm) = (-36.7227,62.2154,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 18.587, position (cm) = (-9.91477,29.8464,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.174306, position (cm) = (-16.4562,39.0961,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.709692, position (cm) = (-11.0066,36.2484,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.176279, position (cm) = (-26.0135,30.3223,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 4.86115, position (cm) = (-21.7535,32.9465,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.12213, position (cm) = (-41.138,27.407,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.258749, position (cm) = (-19.0197,28.382,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.25196, position (cm) = (-21.0775,27.8836,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0708396, position (cm) = (-24.2423,35.8261,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 7.41859, position (cm) = (-24.3504,29.8974,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.952328, position (cm) = (-31.779,27.2659,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 2.90237, position (cm) = (-34.1963,34.6449,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.130213, position (cm) = (-33.9435,30.2629,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 2.20764, position (cm) = (-30.1562,27.6114,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 13.9589, position (cm) = (-13.4762,43.2976,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 9.96534e-05, position (cm) = (37.6596,35.602,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.0806714, position (cm) = (2.60457,31.82,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 18.587, position (cm) = (-9.91477,29.8464,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.81174, position (cm) = (-2.36038,25.6441,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 2.81174, position (cm) = (-2.36038,25.6441,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.179327, position (cm) = (-39.609,26.6657,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 19.408, position (cm) = (-1.64645,55.378,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 19.408, position (cm) = (-1.64645,55.378,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 19.408, position (cm) = (-1.64645,55.378,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.154701, position (cm) = (-3.43019,-29.5241,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.442314, position (cm) = (14.4071,21.4861,200), weight = 0.00195312 - e-, kinetic energy (MeV) = 0.858691, position (cm) = (11.6959,14.3701,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 4.22187, position (cm) = (-17.522,15.0491,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 62.7391, position (cm) = (-33.3977,-28.844,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 61.8464, position (cm) = (-45.4704,-33.4506,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 62.0591, position (cm) = (-45.3043,-34.5526,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 1.09428, position (cm) = (-10.1624,-1.71376,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.578129, position (cm) = (-22.8551,4.24679,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 40.2814, position (cm) = (-9.93875,0.377381,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 40.2814, position (cm) = (-9.93875,0.377381,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.272789, position (cm) = (14.7958,28.6962,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 3.40404, position (cm) = (-194.477,15.9882,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 3.40404, position (cm) = (-194.477,15.9882,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 11.133, position (cm) = (-196.293,-5.94697,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.232401, position (cm) = (-223.238,31.0738,200), weight = 0.00012207 - e-, kinetic energy (MeV) = 1.23972, position (cm) = (-215.019,31.1445,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0310319, position (cm) = (-215.036,31.1322,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 15.2317, position (cm) = (-45.5638,41.6039,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.141624, position (cm) = (-119.29,-18.8551,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.10619, position (cm) = (-127.71,-8.99811,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.0144683, position (cm) = (-133.475,-45.155,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 2.36555, position (cm) = (-155.45,-20.9495,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 28.9163, position (cm) = (-172.992,-25.2686,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0776714, position (cm) = (-171.653,-29.6635,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 3.55884, position (cm) = (-172.773,-28.5775,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.214609, position (cm) = (-168.738,-28.7552,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 1.165, position (cm) = (-168.796,-26.4702,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.7171, position (cm) = (-168.37,-27.1662,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 29.1172, position (cm) = (-171.861,-27.4976,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 29.1655, position (cm) = (-172.264,-27.9834,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 29.1655, position (cm) = (-172.264,-27.9834,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 52.3598, position (cm) = (-138.701,-27.2917,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 34.3675, position (cm) = (-135.48,-24.0817,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 34.3675, position (cm) = (-135.48,-24.0817,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 34.4297, position (cm) = (-135.275,-23.9101,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.137068, position (cm) = (-129.216,-16.8357,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 47.5878, position (cm) = (-130.972,-23.8419,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 86.0813, position (cm) = (-155.85,23.372,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 4.01409, position (cm) = (-157.365,21.8436,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 62.3915, position (cm) = (-158.653,30.9506,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 62.2187, position (cm) = (-157.91,30.1811,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 62.3915, position (cm) = (-158.653,30.9506,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 62.3915, position (cm) = (-158.653,30.9506,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.508659, position (cm) = (-146.596,18.9658,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 5.90584, position (cm) = (-143.493,23.882,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 86.1403, position (cm) = (-154.91,24.1523,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.803219, position (cm) = (10.4827,-23.02,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 1.8161, position (cm) = (5.22028,-3.89245,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 0.102537, position (cm) = (19.465,-7.18076,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 17.0676, position (cm) = (-73.1279,-73.0338,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 16.8856, position (cm) = (-75.0222,-71.4379,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.704694, position (cm) = (-59.6968,-79.1251,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 2.37624, position (cm) = (-103.252,2.37105,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 30.528, position (cm) = (-107.399,19.0344,200), weight = 3.72529e-09 - neutron, kinetic energy (MeV) = 30.528, position (cm) = (-107.399,19.0344,200), weight = 3.72529e-09 - gamma, kinetic energy (MeV) = 0.0767543, position (cm) = (-65.8784,-6.94514,200), weight = 1.86265e-09 - gamma, kinetic energy (MeV) = 0.328636, position (cm) = (-110.41,13.8432,200), weight = 2.32831e-10 - gamma, kinetic energy (MeV) = 0.159947, position (cm) = (-108.962,24.0692,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 0.670217, position (cm) = (-115.927,28.3348,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 1.72852, position (cm) = (-104.297,28.66,200), weight = 2.32831e-10 - gamma, kinetic energy (MeV) = 0.0857616, position (cm) = (-66.9192,28.6682,200), weight = 2.32831e-10 - neutron, kinetic energy (MeV) = 7.54967, position (cm) = (-107.957,29.4554,200), weight = 2.32831e-10 - gamma, kinetic energy (MeV) = 3.74031, position (cm) = (-117.181,25.5612,200), weight = 2.32831e-10 - neutron, kinetic energy (MeV) = 6.2129, position (cm) = (-102.462,44.1897,200), weight = 2.32831e-10 - gamma, kinetic energy (MeV) = 0.954561, position (cm) = (-105.309,25.5747,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 4.09295, position (cm) = (-100.78,27.7094,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 0.337424, position (cm) = (-102.017,23.4189,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 0.000430319, position (cm) = (-94.005,24.7085,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 30.3138, position (cm) = (-102.01,9.10777,200), weight = 2.32831e-10 - neutron, kinetic energy (MeV) = 30.3138, position (cm) = (-102.01,9.10777,200), weight = 2.32831e-10 - gamma, kinetic energy (MeV) = 0.365748, position (cm) = (-98.9386,10.6462,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 5.52246, position (cm) = (-93.5317,0.366332,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 5.53589, position (cm) = (-93.4706,10.5962,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 0.130147, position (cm) = (-97.0878,24.1618,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 0.15748, position (cm) = (-97.6211,22.5649,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 2.27966, position (cm) = (-97.3691,22.9171,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 0.863315, position (cm) = (-96.2024,22.2741,200), weight = 4.65661e-10 - gamma, kinetic energy (MeV) = 0.0717177, position (cm) = (-95.4561,17.0954,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 3.50089, position (cm) = (-98.7627,12.3012,200), weight = 4.65661e-10 - neutron, kinetic energy (MeV) = 30.3069, position (cm) = (-97.0466,11.0354,200), weight = 9.31323e-10 - neutron, kinetic energy (MeV) = 9.95771, position (cm) = (-97.6432,1.70603,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.0856638, position (cm) = (-109.596,16.6365,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.863177, position (cm) = (-109.971,18.0264,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 2.54778, position (cm) = (-107.581,21.7553,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 4.99527, position (cm) = (-105.928,23.249,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 8.64394, position (cm) = (-101.373,8.63545,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 35.349, position (cm) = (-63.4054,-75.3492,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 35.256, position (cm) = (-62.5477,-76.1344,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 35.256, position (cm) = (-62.5477,-76.1344,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 35.6324, position (cm) = (-53.7501,-72.8045,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 35.6324, position (cm) = (-53.7501,-72.8045,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 31.4863, position (cm) = (-82.5821,-28.2926,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.248768, position (cm) = (-82.0576,-28.5087,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.282832, position (cm) = (-82.1532,-28.271,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.310522, position (cm) = (-83.0725,-25.7198,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 2.35675, position (cm) = (-82.317,-28.5759,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.234287, position (cm) = (-80.4625,-34.8194,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 2.50106, position (cm) = (-78.7519,-44.3408,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 1.85172, position (cm) = (-57.88,-44.2179,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 15.0219, position (cm) = (-74.2249,-41.8767,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 1.84527, position (cm) = (-34.7496,-55.0842,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 55.0578, position (cm) = (81.3926,-35.7432,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 54.9049, position (cm) = (82.0006,-31.9823,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.825022, position (cm) = (92.6493,-34.5793,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.91642, position (cm) = (94.4913,-44.6547,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 0.668921, position (cm) = (94.4664,-63.6018,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 3.656, position (cm) = (87.6185,-40.6196,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 1.34806, position (cm) = (62.5663,-26.3715,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 55.0273, position (cm) = (84.7431,-40.8435,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 55.0258, position (cm) = (84.5951,-41.2257,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 6.92112, position (cm) = (83.9274,-6.77323,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 55.6879, position (cm) = (68.1019,-34.0505,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.360709, position (cm) = (27.3876,-113.387,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 0.685815, position (cm) = (-3.93487,25.5872,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 1.03691, position (cm) = (-83.0015,12.3854,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 0.330051, position (cm) = (-59.6775,12.5835,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.343632, position (cm) = (-90.1526,10.3327,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.12026, position (cm) = (-94.5448,24.3829,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.142048, position (cm) = (-99.0252,12.6103,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 2.08887, position (cm) = (-87.9744,41.0865,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 3.03406, position (cm) = (-93.614,18.5591,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 10.7546, position (cm) = (-103.451,20.6547,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 9.83495, position (cm) = (-103.242,17.315,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 2.62589, position (cm) = (-89.4304,-20.1847,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.133043, position (cm) = (-78.9295,-75.9954,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.16166, position (cm) = (-61.1182,-79.9057,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 0.582175, position (cm) = (28.5368,-152.998,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 1.07759, position (cm) = (25.1875,-151.027,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.193399, position (cm) = (21.3569,-153.386,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 40.0104, position (cm) = (12.1105,-157.183,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 40.0104, position (cm) = (12.1105,-157.183,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.314864, position (cm) = (1.52954,-173.147,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.145655, position (cm) = (12.4796,-168.98,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 4.41791, position (cm) = (-4.8916,-172.051,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.165719, position (cm) = (4.11052,-164.522,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.272761, position (cm) = (11.0877,-149.984,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.547225, position (cm) = (-19.6103,-150.799,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 30.4072, position (cm) = (4.109,-168.813,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 38.1276, position (cm) = (-21.0125,-147.343,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.02682, position (cm) = (-28.1254,-164.944,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 15.2514, position (cm) = (-15.2233,-155.203,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 40.9463, position (cm) = (-12.6042,-156.244,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.243112, position (cm) = (-12.5184,-157.088,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0395383, position (cm) = (-12.3586,-157.958,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.171326, position (cm) = (-15.1802,-156.279,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 15.5511, position (cm) = (-11.2758,-156.148,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 3.37133, position (cm) = (-10.3435,-170.89,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 1.51564, position (cm) = (-100.241,-143.793,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 2.66607, position (cm) = (-113.64,-122.327,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.142376, position (cm) = (-126.497,-138.008,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.277645, position (cm) = (-124.604,-123.746,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.0773901, position (cm) = (-115.06,-127.545,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.00159848, position (cm) = (-126.027,-131.048,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.241519, position (cm) = (-130.644,-131.132,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.0208738, position (cm) = (-123.742,-126.96,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.0683501, position (cm) = (-116.284,-125.663,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 1.94074, position (cm) = (-120.959,-121.16,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 3.90074, position (cm) = (-130.125,-134.498,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 6.35565, position (cm) = (-138.866,-134.28,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 5.14886, position (cm) = (-139.732,-128.534,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 7.31129, position (cm) = (-138.915,-124.329,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 31.652, position (cm) = (-124.11,-128.871,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.153554, position (cm) = (-104.159,-155.345,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.314985, position (cm) = (-107.453,-148.582,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.547638, position (cm) = (-97.9416,-155.827,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 27.8101, position (cm) = (-110.784,-146.611,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 27.8101, position (cm) = (-110.784,-146.611,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 27.8101, position (cm) = (-110.784,-146.611,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.165777, position (cm) = (-128.14,-206.708,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 6.31821e-06, position (cm) = (-126.12,-192.759,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.89732, position (cm) = (-101.39,-93.6126,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 20.6475, position (cm) = (-82.7084,-78.9172,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.316803, position (cm) = (-61.4908,-26.3543,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.127246, position (cm) = (-94.5831,-22.6566,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 0.88565, position (cm) = (-107.651,-34.7978,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 2.24887, position (cm) = (-111.14,-30.0414,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 21.8789, position (cm) = (-93.4616,-19.0783,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 22.0518, position (cm) = (-93.5578,-23.4232,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 10.2147, position (cm) = (-47.7394,-13.9655,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 10.2147, position (cm) = (-47.7394,-13.9655,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.62354, position (cm) = (-36.6608,-19.1013,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 11.9943, position (cm) = (-8.86895,-70.0946,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 11.9943, position (cm) = (-8.86895,-70.0946,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.202858, position (cm) = (-2.20418,-72.7696,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 8.38506, position (cm) = (-4.44176,-64.5966,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.403228, position (cm) = (-50.7963,-56.6522,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 3.38044, position (cm) = (17.3099,-33.298,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.255482, position (cm) = (-8.49832,-28.5141,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.0866679, position (cm) = (12.1996,-53.2977,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.880669, position (cm) = (38.7898,-42.0323,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 1.46335, position (cm) = (34.4445,-37.772,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 1.85199, position (cm) = (26.1279,-47.8839,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 37.3235, position (cm) = (29.971,-38.2634,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.33221, position (cm) = (48.8408,-38.5135,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.219472, position (cm) = (112.625,-140.863,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.160358, position (cm) = (124.278,-134.008,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.262502, position (cm) = (123.077,-116.031,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 7.07418, position (cm) = (110.449,-121.542,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.422051, position (cm) = (61.1787,-143.956,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.382083, position (cm) = (120.063,-116.061,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.565083, position (cm) = (84.2324,-153.937,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.224075, position (cm) = (64.045,-133.802,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.243412, position (cm) = (112.775,-115.306,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 63.7292, position (cm) = (136.921,-106.355,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0203546, position (cm) = (118.799,-106.815,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.000102801, position (cm) = (123.101,-108.99,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.83858, position (cm) = (87.922,-94.6141,200), weight = 1.90735e-06 - e-, kinetic energy (MeV) = 1.2795, position (cm) = (87.9554,-94.4714,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (129.375,-126.657,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.313478, position (cm) = (161.52,-189.533,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 16.8476, position (cm) = (142.324,-196.812,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.231356, position (cm) = (148.638,-208.339,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.259005, position (cm) = (163.329,-236.313,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 47.5165, position (cm) = (147.708,-209.893,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 70.005, position (cm) = (147.682,-212.732,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 3.39425, position (cm) = (124.384,-181.732,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 3.39425, position (cm) = (124.384,-181.732,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 2.85842, position (cm) = (128.076,-178.551,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.583795, position (cm) = (126.892,-137.164,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.000960625, position (cm) = (101.89,-146.291,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.125311, position (cm) = (124.11,-159.688,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.415819, position (cm) = (92.4507,-128.008,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.64095, position (cm) = (93.7947,-102.285,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 0.0165823, position (cm) = (82.8233,-87.7027,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 3.08065, position (cm) = (8.93653,-25.0363,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 16.7772, position (cm) = (24.4725,-8.34723,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 3.13425, position (cm) = (-27.8578,33.4394,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 0.218218, position (cm) = (-10.9114,-6.19174,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.425505, position (cm) = (21.9381,28.9072,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 1.50892, position (cm) = (-37.9691,40.2705,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.440443, position (cm) = (-4.77091,58.6715,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 4.80604, position (cm) = (-19.5093,45.5782,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.0889399, position (cm) = (1.24557,-7.4976,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 1.20745, position (cm) = (-1.26686,16.7379,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 99.7426, position (cm) = (-11.3433,-0.846821,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 99.6337, position (cm) = (-11.9257,0.407001,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 97.9478, position (cm) = (-29.5573,-6.88061,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 3.96378e-06, position (cm) = (-8.65291,0.0570853,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.725998, position (cm) = (6.95706,-7.33016,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.173927, position (cm) = (-24.7353,1.25735,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.219236, position (cm) = (-5.94639,0.639034,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 99.0835, position (cm) = (-3.79813,-12.9704,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 99.0835, position (cm) = (-3.79813,-12.9704,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 3.35313, position (cm) = (-2.93924,-8.22281,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 33.3586, position (cm) = (-7.81072,-7.12695,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 89.3465, position (cm) = (-17.4615,-3.53285,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 98.8187, position (cm) = (-27.674,32.1351,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 0.00315209, position (cm) = (-31.7844,35.3722,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 3.85981, position (cm) = (-21.2104,31.0134,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 32.3103, position (cm) = (-29.3571,31.087,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 89.0097, position (cm) = (55.8975,37.1918,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 89.7888, position (cm) = (60.105,37.0543,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0812816, position (cm) = (59.6934,41.8853,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.563267, position (cm) = (53.8232,37.3109,200), weight = 0.00012207 - e-, kinetic energy (MeV) = 0.895811, position (cm) = (53.7304,37.7812,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 57.7935, position (cm) = (57.5402,39.1098,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 89.7559, position (cm) = (27.2745,28.8471,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 1.18603, position (cm) = (57.569,39.3093,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.884534, position (cm) = (42.9805,28.9083,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.532578, position (cm) = (8.05394,34.773,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 4.82806, position (cm) = (42.9717,29.0084,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 41.7167, position (cm) = (42.9569,28.9707,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 89.9441, position (cm) = (42.9468,29.0019,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 37.4877, position (cm) = (4.61394,21.3798,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 4.82012, position (cm) = (64.5136,18.7565,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 15.9673, position (cm) = (132.51,30.3651,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 16.0903, position (cm) = (134.337,32.8263,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 16.0903, position (cm) = (134.337,32.8263,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.0846895, position (cm) = (135.942,29.6076,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 3.13779, position (cm) = (123.404,-14.2866,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 16.0903, position (cm) = (134.337,32.8263,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 14.4889, position (cm) = (134.098,31.5158,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 16.0903, position (cm) = (134.337,32.8263,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 2.42182, position (cm) = (132.301,34.5814,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.161638, position (cm) = (106.421,21.6336,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 3.00747, position (cm) = (87.7623,13.8733,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 4.72846, position (cm) = (68.2084,1.75791,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 0.616725, position (cm) = (78.6282,2.57401,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 2.06243, position (cm) = (73.59,0.421974,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.0725126, position (cm) = (64.3676,14.1372,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 1.55573, position (cm) = (72.8627,4.48905,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.378195, position (cm) = (150.52,-2.32672,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 3.78569, position (cm) = (66.3826,33.6378,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.365661, position (cm) = (70.0222,11.5728,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.622606, position (cm) = (46.0208,21.0938,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 1.99734, position (cm) = (96.7765,20.6663,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 20.6232, position (cm) = (95.4933,37.4741,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 40.88, position (cm) = (93.0233,43.701,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 40.683, position (cm) = (96.0045,45.1123,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.223322, position (cm) = (92.3537,42.9618,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.153029, position (cm) = (93.7283,48.4711,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (84.4934,48.5906,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 7.08485, position (cm) = (92.6305,42.5358,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.978411, position (cm) = (74.1082,25.7042,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 1.71768, position (cm) = (72.5523,32.5707,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.171112, position (cm) = (78.1872,33.1285,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.98677, position (cm) = (89.0324,34.2025,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 2.98677, position (cm) = (89.0324,34.2025,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 1.46672, position (cm) = (71.8542,39.7849,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.0679978, position (cm) = (73.3903,22.1293,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 43.7832, position (cm) = (77.3401,42.0274,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 43.7832, position (cm) = (77.3401,42.0274,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 2.02292e-07, position (cm) = (-79.4744,-14.6217,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 2.95446, position (cm) = (-52.5541,-15.2048,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.109353, position (cm) = (-92.6165,19.5474,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 0.669243, position (cm) = (-84.1978,13.8894,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 26.9298, position (cm) = (-97.1727,18.8718,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.45872, position (cm) = (-40.6519,-10.2135,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 3.02496, position (cm) = (-34.9799,11.3496,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 3.13783, position (cm) = (-42.2844,-2.60279,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 73.829, position (cm) = (-70.2359,-1.69098,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 73.8573, position (cm) = (-66.4741,0.895979,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.0687278, position (cm) = (-59.6681,-8.763,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.974498, position (cm) = (-61.0516,-3.7816,200), weight = 0.000976562 - e-, kinetic energy (MeV) = 2.61545, position (cm) = (-61.435,-3.75815,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 7.8457, position (cm) = (-53.6225,-10.1673,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 4.12145, position (cm) = (-39.0051,0.423314,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 66.3731, position (cm) = (-45.2094,-19.0375,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 6.25921, position (cm) = (-41.6912,-3.41407,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 27.5768, position (cm) = (-41.8298,-2.97383,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 2.80623, position (cm) = (-64.913,11.4599,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.322702, position (cm) = (-68.6338,-1.49963,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 2.96766, position (cm) = (-53.7226,-11.7046,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.0694319, position (cm) = (-45.5078,-21.7695,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 1.33454, position (cm) = (-58.3313,-15.354,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.173852, position (cm) = (-78.1462,-12.8758,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 26.8857, position (cm) = (-53.4557,-13.4095,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 1.57972, position (cm) = (-80.4032,19.5267,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 1.6026, position (cm) = (-57.8168,4.48982,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 6.10903, position (cm) = (-57.3656,5.04694,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.148269, position (cm) = (-58.9665,11.0217,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.95666, position (cm) = (-58.6858,-3.85645,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 8.05588, position (cm) = (-58.8879,-7.31166,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 72.8288, position (cm) = (-62.1551,-0.1211,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.171087, position (cm) = (-58.2303,-5.44731,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.25515, position (cm) = (-59.8007,10.8638,200), weight = 0.000244141 - proton, kinetic energy (MeV) = 37.2386, position (cm) = (-62.1005,-0.571592,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 1.34136, position (cm) = (-37.9844,-0.857776,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 35.5712, position (cm) = (-52.7271,-6.06248,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 35.5712, position (cm) = (-52.7271,-6.06248,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 72.6099, position (cm) = (-53.6089,-5.8286,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 4.70883, position (cm) = (-26.6559,-72.2259,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 4.54872, position (cm) = (-8.90862,-69.9466,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 7.04872, position (cm) = (5.81396,-51.6679,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.76968, position (cm) = (22.479,-19.2912,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 4.96922, position (cm) = (22.1861,-132.806,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.174901, position (cm) = (12.6134,-121.778,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 8.02424, position (cm) = (33.1127,-141.146,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 8.02424, position (cm) = (33.1127,-141.146,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 17.0706, position (cm) = (33.4638,-133.402,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 18.1305, position (cm) = (26.0175,-129.859,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 18.1305, position (cm) = (26.0175,-129.859,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 0.147753, position (cm) = (15.9223,-123.282,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.243837, position (cm) = (13.3742,-133.376,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 12.4965, position (cm) = (7.08721,-136.945,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 2.56741, position (cm) = (13.1245,-134.883,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 2.74756, position (cm) = (14.9491,-143.393,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 1.50883, position (cm) = (18.7165,-128.008,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.531968, position (cm) = (2.64385,-118.039,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 0.037458, position (cm) = (12.3698,-152.271,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 1.46349, position (cm) = (-15.3997,-123.525,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 2.45708, position (cm) = (19.9071,-134.739,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 4.23788, position (cm) = (-38.8296,-85.6006,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 0.00018288, position (cm) = (-12.4834,-102.548,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 7.93389, position (cm) = (-4.67791,-56.7691,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 32.8873, position (cm) = (-0.87875,-54.3943,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 47.2151, position (cm) = (105.713,-56.3311,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 47.8247, position (cm) = (105.225,-55.8533,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.152888, position (cm) = (78.8452,-49.8529,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.266443, position (cm) = (96.6991,-50.9602,200), weight = 0.00195312 - gamma, kinetic energy (MeV) = 0.195092, position (cm) = (94.2818,-48.7304,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 20.6979, position (cm) = (96.9267,-50.4702,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 8.89514, position (cm) = (79.6847,-55.8723,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 72.7189, position (cm) = (88.5585,-57.68,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.410198, position (cm) = (94.9441,-74.2613,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 1.68713, position (cm) = (72.883,-73.0756,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 2.85917e-07, position (cm) = (68.1368,-47.464,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 1.84709, position (cm) = (80.8122,-75.5474,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.0616901, position (cm) = (90.0172,-52.2049,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.469927, position (cm) = (96.1535,-57.4874,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.607152, position (cm) = (94.1837,-73.1383,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.0788421, position (cm) = (83.9016,-72.6414,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 45.1094, position (cm) = (43.5781,-68.595,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 45.6043, position (cm) = (43.4764,-68.6996,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 61.8922, position (cm) = (54.9077,-78.2758,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 61.8922, position (cm) = (54.9077,-78.2758,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 61.9997, position (cm) = (50.6201,-76.0286,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 62.6016, position (cm) = (43.9054,-56.1261,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 2.05327, position (cm) = (25.0294,-59.4293,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 38.759, position (cm) = (42.1766,-27.0542,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 54.8518, position (cm) = (35.1618,-37.2438,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 4.04974e-05, position (cm) = (54.0499,-41.5216,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 0.0161439, position (cm) = (105.553,-30.3283,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 51.6596, position (cm) = (109.367,5.45964,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.169976, position (cm) = (83.2804,15.974,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 5.92954, position (cm) = (102.624,-9.28929,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 0.0919083, position (cm) = (101.461,-15.8172,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.45167, position (cm) = (97.4336,36.0346,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.203987, position (cm) = (101.849,43.5906,200), weight = 0.00390625 - neutron, kinetic energy (MeV) = 52.0292, position (cm) = (104.363,-3.39468,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 50.7062, position (cm) = (108.336,-2.61856,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 52.1468, position (cm) = (113.353,2.74536,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 49.4768, position (cm) = (112.682,-2.66351,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 50.1671, position (cm) = (112.782,-3.05846,200), weight = 0.000488281 - gamma, kinetic energy (MeV) = 0.107721, position (cm) = (111.257,-6.01908,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 51.9558, position (cm) = (109.969,2.93492,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 2.41738, position (cm) = (33.6543,-11.7626,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.390429, position (cm) = (45.2636,-20.5561,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 1.1679, position (cm) = (7.66795,-50.574,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.44108, position (cm) = (18.1285,-32.3465,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 4.67157, position (cm) = (19.6533,-32.977,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 0.574613, position (cm) = (-1.15101,-52.1864,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 39.9971, position (cm) = (20.4781,-34.0841,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 8.09653, position (cm) = (23.7426,-35.0084,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 39.9971, position (cm) = (20.4781,-34.0841,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 39.9971, position (cm) = (20.4781,-34.0841,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 37.0863, position (cm) = (7.7256,-30.9745,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 6.83283, position (cm) = (-22.0699,-7.63796,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.11657, position (cm) = (-47.3028,9.2476,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 32.1463, position (cm) = (-24.9043,-15.5821,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 31.1767, position (cm) = (-23.5122,2.61477,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 31.2328, position (cm) = (-21.4235,2.58846,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 31.6364, position (cm) = (-21.9041,1.85571,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 6.32784, position (cm) = (2.15222,-37.5739,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 31.9387, position (cm) = (-62.3815,-48.0231,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.101557, position (cm) = (-57.1611,-41.6742,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.74764, position (cm) = (-53.9619,-38.1655,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.10604, position (cm) = (-54.835,-38.1586,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.79289, position (cm) = (-46.1105,-39.2768,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 99.7629, position (cm) = (0.855667,-24.8281,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 2.10442, position (cm) = (9.08207,-37.4579,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.672676, position (cm) = (17.2028,-18.1176,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 74.8994, position (cm) = (20.5951,-17.9639,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 98.7736, position (cm) = (16.1676,-21.9251,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 97.8674, position (cm) = (16.4254,-20.7284,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 1.15687, position (cm) = (14.2245,-14.0757,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 14.9222, position (cm) = (31.9352,-5.12465,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 14.9222, position (cm) = (31.9352,-5.12465,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 96.726, position (cm) = (-2.231,-24.886,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.0341888, position (cm) = (-0.29309,-4.70972,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 2.95426, position (cm) = (-2.48106,-8.78742,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.858474, position (cm) = (-67.9038,31.4332,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 3.79706e-06, position (cm) = (-24.57,-21.0304,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.153748, position (cm) = (-40.7153,-22.5317,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 1.15096, position (cm) = (-42.0292,-25.5716,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.438078, position (cm) = (-44.0925,-13.6817,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 5.08846, position (cm) = (-41.784,-26.0448,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 7.73345, position (cm) = (-25.2252,-32.2806,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 23.5931, position (cm) = (-42.2402,-16.5829,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 8.28765, position (cm) = (-30.681,-20.7195,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.744001, position (cm) = (-54.2761,-25.4678,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.207876, position (cm) = (-55.4994,-20.7259,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 3.52356, position (cm) = (-32.3836,-16.985,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.197556, position (cm) = (-60.9304,-12.3422,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 24.421, position (cm) = (-48.1634,-6.85779,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.410985, position (cm) = (-46.9043,-7.1262,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.351692, position (cm) = (-46.1226,-6.7574,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 10.6234, position (cm) = (-47.5383,-6.18687,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 24.2871, position (cm) = (-48.4077,-5.96642,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 24.2871, position (cm) = (-48.4077,-5.96642,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 23.5133, position (cm) = (-47.8461,-6.6088,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.274386, position (cm) = (-45.3297,-23.2387,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.276742, position (cm) = (-28.7722,-18.9194,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 2.04427, position (cm) = (-24.3316,-16.4504,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.17135, position (cm) = (-29.8031,-2.5694,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 1.00506, position (cm) = (16.4415,-17.4098,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 77.9722, position (cm) = (0.682503,-26.9573,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 99.8141, position (cm) = (5.96067,-21.0314,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 99.8141, position (cm) = (5.96067,-21.0314,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.180917, position (cm) = (11.5663,-27.13,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 41.6036, position (cm) = (5.90451,-26.4109,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 99.2986, position (cm) = (4.91527,-13.6806,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 55.3149, position (cm) = (37.9627,-129.416,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 55.3149, position (cm) = (37.9627,-129.416,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 3.96163, position (cm) = (67.2721,-154.914,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 6.58207, position (cm) = (67.6242,-154.611,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 5.38592, position (cm) = (86.3655,-157.061,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.631451, position (cm) = (5.30709,17.7351,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.196567, position (cm) = (48.6812,0.904795,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 10.6285, position (cm) = (-37.2281,63.3794,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 24.5248, position (cm) = (-16.3144,-62.6748,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 19.7711, position (cm) = (-16.301,-58.813,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.0711884, position (cm) = (-17.5933,-63.1635,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.457848, position (cm) = (-16.5755,-58.0115,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.13277, position (cm) = (-15.8569,-68.5492,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 24.5248, position (cm) = (-16.3144,-62.6748,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.160664, position (cm) = (-14.0083,-64.4851,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.284494, position (cm) = (-46,-65.6098,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 2.51522, position (cm) = (-55.4749,-30.6307,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.475828, position (cm) = (-49.496,-44.8794,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.000146269, position (cm) = (-34.2458,-68.3891,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.0798059, position (cm) = (-38.4393,-44.2539,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 92.2482, position (cm) = (-36.2573,-54.7815,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 99.0371, position (cm) = (-38.8647,-51.8503,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 99.0371, position (cm) = (-38.8647,-51.8503,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 61.8518, position (cm) = (-23.1751,-44.2269,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 61.8518, position (cm) = (-23.1751,-44.2269,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 7.71191, position (cm) = (10.9627,-59.7189,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.97432, position (cm) = (39.1188,-88.3436,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 8.09312, position (cm) = (3.09426,-40.6749,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 6.44469, position (cm) = (2.37331,-42.4738,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.667359, position (cm) = (9.45928,-47.098,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 61.6264, position (cm) = (8.45238,-46.3682,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 60.8735, position (cm) = (-4.64438,-51.6643,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 60.8735, position (cm) = (-4.64438,-51.6643,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 61.1161, position (cm) = (13.34,-60.9556,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 99.7618, position (cm) = (8.18994,-24.6283,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.842019, position (cm) = (-24.676,-32.2424,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.28426, position (cm) = (-11.5401,-44.4158,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.815545, position (cm) = (-27.337,-40.8709,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 4.3998, position (cm) = (-23.624,-43.9083,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.420401, position (cm) = (-24.8416,-28.8722,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 54.9918, position (cm) = (-12.3235,-47.1066,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 98.2974, position (cm) = (-11.7057,-47.7195,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-47.3716,-89.3605,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 63.0974, position (cm) = (-47.72,-91.6788,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.417015, position (cm) = (-27.0338,-84.9729,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 47.2167, position (cm) = (-47.5765,-92.8284,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.794921, position (cm) = (-49.2795,-85.0939,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.494539, position (cm) = (-48.4154,-81.3346,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 1.95645, position (cm) = (-65.3744,-93.0362,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 4.91339, position (cm) = (-71.384,-92.5101,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.36613, position (cm) = (-70.9932,-91.3659,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.403776, position (cm) = (-68.1794,-83.9099,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.000679914, position (cm) = (-78.2596,-75.3454,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 3.89707, position (cm) = (-56.0662,-89.6995,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.104137, position (cm) = (-74.3791,-94.6302,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.802688, position (cm) = (-81.7008,-65.5157,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.619969, position (cm) = (-75.403,-102.638,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.181267, position (cm) = (-84.9138,-102.059,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.788366, position (cm) = (-87.7967,-87.7768,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 11.9906, position (cm) = (-78.4333,-78.1758,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 12.1441, position (cm) = (-78.4352,-78.1753,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 3.61967, position (cm) = (-77.2294,-180.341,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.37551, position (cm) = (-55.8313,-191.764,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.37513, position (cm) = (-70.2744,-176.862,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.82923, position (cm) = (-80.8006,-189.97,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 6.74891e-05, position (cm) = (-82.1768,-192.557,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.0789, position (cm) = (-67.5526,-196.353,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 62.3812, position (cm) = (-73.4956,-184.022,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 63.0706, position (cm) = (-76.2612,-186.151,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 63.1728, position (cm) = (-84.5561,-206.518,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.9993, position (cm) = (-72.6694,-185.957,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.406099, position (cm) = (-66.9698,-199.342,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 36.1062, position (cm) = (-76.0023,-187.259,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 62.2886, position (cm) = (-74.0979,-198.938,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.48124, position (cm) = (-70.7933,-174.915,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 63.2938, position (cm) = (-71.1883,-182.848,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.000128144, position (cm) = (-53.4758,-84.6452,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 61.7113, position (cm) = (-49.6503,-87.0893,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 79.2787, position (cm) = (-19.5974,-35.9175,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 98.2953, position (cm) = (-17.2283,-57.9841,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.09595, position (cm) = (-1.83837,-25.7763,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 42.9906, position (cm) = (-1.14806,-27.1536,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 19.6869, position (cm) = (18.5978,2.80849,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.742815, position (cm) = (9.94118,-0.842657,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 55.4035, position (cm) = (-1.674,-12.9263,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 7.71003, position (cm) = (5.08222,-25.6995,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.0735921, position (cm) = (4.89024,-26.751,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 3.19351, position (cm) = (10.5711,-23.1696,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.9481, position (cm) = (-0.621826,-17.8518,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.76784, position (cm) = (-0.855122,-18.4198,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 8.42796, position (cm) = (15.9082,-28.4023,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 7.85737, position (cm) = (0.8416,-17.2058,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.110821, position (cm) = (-11.5523,-4.00899,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 1.16777, position (cm) = (-5.00145,-12.2648,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.280315, position (cm) = (7.4468,-21.4973,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.320855, position (cm) = (5.0682,-23.2596,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 1.08846, position (cm) = (6.08198,-18.7251,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.10158, position (cm) = (10.2364,-21.2998,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.39621, position (cm) = (6.81126,-19.115,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 35.7373, position (cm) = (5.02679,-20.5199,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.222276, position (cm) = (-5.17178,-43.3946,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.141395, position (cm) = (2.52612,-33.3497,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 1.89833, position (cm) = (-0.22261,-36.1975,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 3.4492, position (cm) = (3.08107,-32.3887,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 34.1983, position (cm) = (3.74753,-31.9762,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 9.03559, position (cm) = (-23.6363,-49.9295,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 9.36169, position (cm) = (-21.6533,-51.1689,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.103123, position (cm) = (-19.8924,-56.8507,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.10265, position (cm) = (-25.9362,-51.1136,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.0565673, position (cm) = (-25.6442,-60.4968,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 4.75908e-05, position (cm) = (-26.1286,-51.5396,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.41962e-07, position (cm) = (-14.3738,-72.4243,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.974099, position (cm) = (-4.75579,-55.189,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.77915, position (cm) = (-20.9687,13.3504,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.4402, position (cm) = (-20.792,13.0572,200), weight = 4.76837e-07 + e-, kinetic energy (MeV) = 2.17726, position (cm) = (-20.5885,13.058,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 11.0614, position (cm) = (-22.6274,7.04299,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 0.900228, position (cm) = (-35.608,5.47405,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 11.0614, position (cm) = (-22.6274,7.04299,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 11.0614, position (cm) = (-22.6274,7.04299,200), weight = 5.96046e-08 + gamma, kinetic energy (MeV) = 0.420488, position (cm) = (-53.5276,10.5412,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 3.01894, position (cm) = (-64.8076,-28.2364,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 51.8114, position (cm) = (53.9983,-16.7398,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 4.12274, position (cm) = (46.7055,-31.2886,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.259338, position (cm) = (45.1307,-30.7532,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.91346, position (cm) = (46.1816,-31.4553,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.106679, position (cm) = (58.465,10.1096,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.338079, position (cm) = (67.7575,-1.69084,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 2.50353, position (cm) = (50.1424,-20.2004,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.05237, position (cm) = (60.1343,-14.3282,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.320694, position (cm) = (32.0892,-18.099,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 20.0461, position (cm) = (44.0129,8.88212,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.0794619, position (cm) = (48.4627,-12.0359,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 1.87694, position (cm) = (-112.645,-54.7098,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.207334, position (cm) = (-51.3488,-90.4879,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 9.79149, position (cm) = (-46.9329,-105.38,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.79149, position (cm) = (-46.9329,-105.38,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.58394, position (cm) = (-62.2563,-124.273,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 6.16059, position (cm) = (-47.9928,-110.272,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 3.43662, position (cm) = (-91.6509,-63.3214,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.33731, position (cm) = (-87.2474,-103.28,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.41373, position (cm) = (-88.9227,-65.0412,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.439663, position (cm) = (-89.8672,-129.202,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 29.3234, position (cm) = (-85.0306,-124.73,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 29.2333, position (cm) = (-85.0188,-124.648,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 29.9448, position (cm) = (-80.4542,-125.708,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 29.9448, position (cm) = (-80.4542,-125.708,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 29.9712, position (cm) = (-71.2622,-158.425,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 29.9712, position (cm) = (-71.2622,-158.425,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.144647, position (cm) = (-71.7818,-160.813,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 29.0635, position (cm) = (-73.2821,-149.854,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 28.2541, position (cm) = (-76.5727,-128.682,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.153253, position (cm) = (-81.2377,-145.629,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 8.99395e-05, position (cm) = (-63.8438,-137.555,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.116426, position (cm) = (-68.7888,-156.407,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.417568, position (cm) = (-63.4253,-173.215,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.245602, position (cm) = (-64.2099,-145.136,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.118221, position (cm) = (-65.8325,-166.766,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.00232825, position (cm) = (-51.1065,-166.237,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 23.9029, position (cm) = (-90.2295,-121.487,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.0101, position (cm) = (-51.8059,-103.818,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 4.32789, position (cm) = (-126.11,-68.2367,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 6.8918e-08, position (cm) = (-67.4682,-60.0576,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 2.18859, position (cm) = (-81.398,-78.9147,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 4.77606, position (cm) = (-77.8155,-103.46,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.298918, position (cm) = (-42.2728,-71.6967,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 1.01367, position (cm) = (-148.229,-67.992,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 4.60073, position (cm) = (-126.415,-88.2959,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.476778, position (cm) = (-131.464,-77.748,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 7.10201, position (cm) = (-113.282,-67.9945,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.957996, position (cm) = (-115.014,-70.0051,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.0613113, position (cm) = (-103.901,-81.3968,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 2.23817, position (cm) = (-99.2103,-76.4352,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.188086, position (cm) = (-102.349,-94.5133,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.159421, position (cm) = (-124.075,-84.851,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 3.25613, position (cm) = (-130.989,-93.0481,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.28251, position (cm) = (-118.023,-96.9207,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.136147, position (cm) = (-31.0136,-76.89,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.654621, position (cm) = (-67.4142,-127.839,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.352078, position (cm) = (-55.3734,-123.408,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.59331, position (cm) = (-63.2893,-129.673,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.013403, position (cm) = (-127.495,-89.4716,200), weight = 2.38419e-07 + e+, kinetic energy (MeV) = 1.35759, position (cm) = (-79.7629,-76.9165,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 2.3278e-05, position (cm) = (-64.2073,-65.8522,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.134469, position (cm) = (-85.7933,-91.8556,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 5.73183, position (cm) = (-122.727,-0.417034,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 2.42855, position (cm) = (-97.4258,-5.26322,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 6.6993e-07, position (cm) = (-23.7849,-10.7251,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.182609, position (cm) = (-49.0137,-15.1361,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.250888, position (cm) = (-41.1962,-16.4728,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.0827199, position (cm) = (-43.2912,-21.7636,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.256743, position (cm) = (-43.4197,-25.5354,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.5619, position (cm) = (-38.353,-13.7435,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.10273e-05, position (cm) = (-29.7257,-27.3596,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 5.71807, position (cm) = (-41.4828,-7.93888,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.6878e-05, position (cm) = (-44.3513,6.79815,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 1.88732e-05, position (cm) = (-83.4778,-7.70505,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 57.3303, position (cm) = (-65.8223,5.37167,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 57.4413, position (cm) = (-67.2898,5.02499,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.26382e-05, position (cm) = (32.7871,-73.3993,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 1.82984, position (cm) = (53.7779,-132.715,200), weight = 9.31323e-10 + neutron, kinetic energy (MeV) = 7.67408, position (cm) = (43.516,-125.773,200), weight = 9.31323e-10 + gamma, kinetic energy (MeV) = 0.0871215, position (cm) = (38.6115,-126.89,200), weight = 9.31323e-10 + neutron, kinetic energy (MeV) = 1.79838, position (cm) = (39.8115,-133.377,200), weight = 9.31323e-10 + gamma, kinetic energy (MeV) = 4.45107, position (cm) = (36.9616,-128.377,200), weight = 9.31323e-10 + neutron, kinetic energy (MeV) = 9.86045, position (cm) = (38.6671,-130.476,200), weight = 4.65661e-10 + neutron, kinetic energy (MeV) = 9.76209, position (cm) = (40.4006,-130.425,200), weight = 4.65661e-10 + neutron, kinetic energy (MeV) = 1.97198, position (cm) = (38.9815,-133.313,200), weight = 9.31323e-10 + neutron, kinetic energy (MeV) = 0.439955, position (cm) = (39.1897,-131.578,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 0.485097, position (cm) = (42.523,-118.684,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 0.371562, position (cm) = (36.7945,-126.325,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 0.0726308, position (cm) = (20.2033,-120.973,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 3.79891, position (cm) = (27.8267,-124.392,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 0.328908, position (cm) = (28.2388,-122.916,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 0.380329, position (cm) = (5.43124,-38.8498,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.198441, position (cm) = (-112.547,14.7507,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 5.73638, position (cm) = (-37.4816,12.7935,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.818491, position (cm) = (-43.4016,-19.8839,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.244353, position (cm) = (-39.9707,19.1285,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.95518, position (cm) = (-39.8966,6.6124,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.7625, position (cm) = (-51.6838,11.5736,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 41.9596, position (cm) = (-35.2612,10.3922,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 41.8536, position (cm) = (-35.9193,10.9321,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 7.37908, position (cm) = (-101.269,-5.40582,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 6.08282, position (cm) = (-86.0316,1.68796,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.0823319, position (cm) = (-113.852,133.532,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.0337508, position (cm) = (-101.501,130.701,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 8.71213, position (cm) = (-106.865,97.2213,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.0499285, position (cm) = (-102.196,103.912,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.3792, position (cm) = (-106.856,97.2005,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.96634, position (cm) = (-106.866,97.211,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 4.1752, position (cm) = (-106.855,97.219,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 54.7826, position (cm) = (-96.971,74.4638,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 54.7826, position (cm) = (-96.971,74.4638,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 54.7826, position (cm) = (-96.971,74.4638,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.73451, position (cm) = (-113.978,79.4747,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 55.473, position (cm) = (-130.914,60.5193,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.1847, position (cm) = (-137.59,57.0484,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 6.03214, position (cm) = (-130.823,59.6016,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.125791, position (cm) = (-84.9376,-25.0275,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 30.8965, position (cm) = (-149.532,4.89612,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 1.66191, position (cm) = (-137.587,65.2674,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 1.6503, position (cm) = (-41.4291,-78.2546,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 99.9543, position (cm) = (13.4353,9.61483,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 99.9543, position (cm) = (13.4353,9.61483,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 99.9543, position (cm) = (13.4353,9.61483,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.153622, position (cm) = (11.5038,8.89833,200), weight = 0.00390625 + e-, kinetic energy (MeV) = 4.02337, position (cm) = (19.4126,13.6497,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 91.1944, position (cm) = (13.1979,9.49626,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 99.789, position (cm) = (13.6747,9.72326,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.498801, position (cm) = (21.1913,-0.16087,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.967087, position (cm) = (24.7097,25.5386,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.485666, position (cm) = (6.76049,-92.1081,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.62582, position (cm) = (-16.3415,-114.236,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.253609, position (cm) = (0.366658,-85.5826,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.0922664, position (cm) = (21.5845,-102.086,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.391633, position (cm) = (-5.35341,-92.6605,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.163083, position (cm) = (-14.2338,-85.6342,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 23.9987, position (cm) = (7.48837,-105.813,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 24.0132, position (cm) = (6.27066,-109.401,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 24.2561, position (cm) = (9.44299,-106.586,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 24.2561, position (cm) = (9.44299,-106.586,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 55.6432, position (cm) = (-33.9398,-90.2253,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 55.6432, position (cm) = (-33.9398,-90.2253,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 3.00467, position (cm) = (-48.8861,-45.3149,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 1.94283, position (cm) = (-29.5491,-69.9584,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 1.39839, position (cm) = (-29.6881,-72.7408,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.0924072, position (cm) = (-27.5835,-100.542,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 2.78223, position (cm) = (-39.5622,-76.3841,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.193763, position (cm) = (-37.9788,-99.6768,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 26.3549, position (cm) = (-24.6446,-89.3856,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.00613267, position (cm) = (3.30605,-93.2204,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.69044, position (cm) = (-10.1446,-72.7073,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 39.3636, position (cm) = (-104.772,-37.9377,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 39.3636, position (cm) = (-104.772,-37.9377,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 40.5822, position (cm) = (-111.062,-42.578,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 40.5822, position (cm) = (-111.062,-42.578,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 40.4101, position (cm) = (-117.402,-40.9598,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 40.4101, position (cm) = (-117.402,-40.9598,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 56.3067, position (cm) = (-171.187,-73.1948,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 2.33736, position (cm) = (-119.118,-34.7038,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.1151, position (cm) = (-201.936,-82.0146,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 54.2346, position (cm) = (-185.646,-82.1796,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 54.2531, position (cm) = (-185.731,-82.1923,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 53.9928, position (cm) = (-134.117,-119.232,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 54.0526, position (cm) = (-133.046,-115.429,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.170546, position (cm) = (-57.2519,-31.6899,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 1.10924, position (cm) = (-60.3772,-23.478,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.769427, position (cm) = (-62.787,-31.5034,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.316595, position (cm) = (-48.0393,-40.1059,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 6.50486, position (cm) = (-57.0602,-37.4044,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 7.53933, position (cm) = (-48.5063,-34.4577,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 26.0656, position (cm) = (-62.7127,-32.6721,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.26717, position (cm) = (-59.1885,-4.68747,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 22.1078, position (cm) = (-60.6638,-21.5187,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.262826, position (cm) = (-66.2828,-20.1913,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 4.52617, position (cm) = (-64.4053,-15.6272,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 6.45189, position (cm) = (-64.1472,-15.1489,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 27.5388, position (cm) = (-64.5727,-14.9307,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 2.12234, position (cm) = (-64.267,-19.4218,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 24.4167, position (cm) = (-64.2242,-17.0351,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 9.50583e-07, position (cm) = (-38.9726,-33.8747,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.0965596, position (cm) = (-78.7322,-69.1679,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.335359, position (cm) = (-86.0137,-68.9772,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.346554, position (cm) = (-78.415,-70.708,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.639351, position (cm) = (-71.4323,-59.853,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 40.498, position (cm) = (-82.4633,-71.1694,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 3.27003, position (cm) = (-72.1453,-72.8379,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 39.3602, position (cm) = (-75.2922,-72.2984,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.454537, position (cm) = (-70.1442,-70.3595,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 2.09583, position (cm) = (-76.3045,-67.995,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.000430828, position (cm) = (-88.0825,-63.3775,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 3.32204, position (cm) = (-110.773,-62.6484,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 37.6058, position (cm) = (-105.636,-44.0936,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 37.6058, position (cm) = (-105.636,-44.0936,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 57.6514, position (cm) = (-73.6412,-73.6692,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 57.7477, position (cm) = (-72.5299,-72.9601,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 58.1971, position (cm) = (-78.5992,-74.7789,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 58.1617, position (cm) = (-79.1732,-75.6631,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 58.1971, position (cm) = (-78.5992,-74.7789,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 57.6895, position (cm) = (-97.1353,-91.6901,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 3.07841, position (cm) = (-102.834,-97.3361,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.36705, position (cm) = (-76.5176,-67.4309,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 27.948, position (cm) = (20.3769,-10.4724,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.26259, position (cm) = (44.7014,-37.0836,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 26.0152, position (cm) = (94.9824,-112.714,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 26.1255, position (cm) = (94.2343,-112.417,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 4.69025, position (cm) = (107.795,-95.9309,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 4.69025, position (cm) = (107.795,-95.9309,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.101684, position (cm) = (110.516,-95.2953,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 3.20975, position (cm) = (109.559,-89.322,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 1.49797, position (cm) = (74.3178,-51.7611,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 98.6829, position (cm) = (21.783,-45.6349,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.129576, position (cm) = (17.5413,-23.0392,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.0705914, position (cm) = (18.9902,-36.7619,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 67.0105, position (cm) = (8.15485,-59.0631,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 67.0069, position (cm) = (7.49429,-62.4937,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.0234049, position (cm) = (6.45226,-49.4783,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.20472, position (cm) = (3.17638,-54.2388,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 28.162, position (cm) = (6.81608,-59.7633,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 98.6741, position (cm) = (14.857,-53.4567,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 3.71267e-06, position (cm) = (15.3962,-23.5463,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 98.6499, position (cm) = (14.3276,-52.607,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.558613, position (cm) = (-72.3203,-124.619,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.19862, position (cm) = (-44.3202,-83.9343,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.00012661, position (cm) = (-62.2741,-82.7867,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.11839, position (cm) = (-52.9812,-75.0113,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 4.39537, position (cm) = (-67.5389,-75.2948,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 43.5219, position (cm) = (-45.0444,-76.149,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.871797, position (cm) = (-45.2234,-61.0645,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 7.18949, position (cm) = (-45.3849,-61.1901,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 41.7532, position (cm) = (-48.3,-60.9,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 41.7532, position (cm) = (-48.3,-60.9,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 42.4019, position (cm) = (-45.9656,-60.893,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.113852, position (cm) = (-40.9881,-74.1115,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 16.1454, position (cm) = (-38.0224,-64.006,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.0538633, position (cm) = (-77.2248,-88.1887,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.277426, position (cm) = (-74.6525,-82.6832,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.146913, position (cm) = (-73.2931,-82.0849,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 28.2468, position (cm) = (-74.6813,-87.1252,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 26.7453, position (cm) = (-59.5066,-76.5237,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 41.2642, position (cm) = (-74.0644,-87.7838,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.105046, position (cm) = (-53.6729,-101.326,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 43.4594, position (cm) = (-67.1215,-82.3259,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.0849473, position (cm) = (-49.2645,-75.2592,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.89766, position (cm) = (-56.1241,-44.7039,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.76456, position (cm) = (-25.4061,-84.6702,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 2.48746, position (cm) = (-30.385,-71.0251,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 8.10287, position (cm) = (-37.9007,-86.4831,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.277514, position (cm) = (-37.3872,-74.1136,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.69368, position (cm) = (-19.5811,-74.9033,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 14.7907, position (cm) = (-33.8714,-89.6078,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.296337, position (cm) = (-53.1036,-4.14698,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.217221, position (cm) = (38.9854,-29.3059,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.732058, position (cm) = (52.6739,-32.3968,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.60523, position (cm) = (52.7163,-32.2718,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.61358, position (cm) = (15.878,-39.0158,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 7.58018, position (cm) = (-5.53894,-54.7268,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.1677, position (cm) = (121.424,-23.6671,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.975399, position (cm) = (126.394,-44.2988,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 58.6105, position (cm) = (160.496,-45.3439,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.426279, position (cm) = (87.8587,-9.75221,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.176804, position (cm) = (128.33,-12.4813,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.180449, position (cm) = (104.752,-18.4037,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 30.9659, position (cm) = (97.1448,-16.7969,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 41.6894, position (cm) = (106.129,-17.026,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.0799942, position (cm) = (6.2018,49.7634,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.636959, position (cm) = (98.0943,0.94261,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 10.0955, position (cm) = (127.845,2.01854,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.336905, position (cm) = (125.921,20.7512,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.0966814, position (cm) = (161.556,13.0652,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 2.98229, position (cm) = (186.753,-5.36013,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 2.16675, position (cm) = (165.211,3.14944,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.617951, position (cm) = (173.769,11.6086,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.777184, position (cm) = (176.719,8.31622,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.0573507, position (cm) = (168.805,30.0328,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 13.5632, position (cm) = (175.252,19.5083,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 3.49509, position (cm) = (167.645,53.42,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.1688, position (cm) = (148.271,101.102,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.250542, position (cm) = (154.707,111.343,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.896793, position (cm) = (145.496,29.2344,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 13.1442, position (cm) = (136.18,78.7276,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 12.0948, position (cm) = (143.681,66.6149,200), weight = 1.49012e-08 + gamma, kinetic energy (MeV) = 10.0797, position (cm) = (149.265,83.1884,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 0.529755, position (cm) = (177.808,67.0516,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 0.606142, position (cm) = (186.78,67.3106,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 2.98386, position (cm) = (159.331,92.7943,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 52.1818, position (cm) = (155.677,59.7356,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.389497, position (cm) = (157.784,58.5534,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (161.707,77.3067,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 6.69408, position (cm) = (188.984,103.723,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 5.51862e-05, position (cm) = (136.891,6.16155,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 51.437, position (cm) = (159.721,27.9032,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 52.0672, position (cm) = (166.649,31.3568,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 52.0672, position (cm) = (166.649,31.3568,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 52.0635, position (cm) = (166.791,31.3611,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.269346, position (cm) = (230.567,-2.25327,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.518441, position (cm) = (137.337,7.33483,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.660363, position (cm) = (127.766,1.85546,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.36266, position (cm) = (126.418,-2.56156,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 31.1434, position (cm) = (125.949,27.6125,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 33.384, position (cm) = (147.42,30.3638,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 33.384, position (cm) = (147.42,30.3638,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.291401, position (cm) = (170.208,-4.51281,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 9.05824, position (cm) = (9.2402,-67.8285,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.05824, position (cm) = (9.2402,-67.8285,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.158243, position (cm) = (9.57362,-65.888,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 3.23079, position (cm) = (10.0725,-72.7833,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.209281, position (cm) = (-14.1042,4.53671,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 2.33887, position (cm) = (11.4947,-66.7259,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.354247, position (cm) = (-3.45003,-90.579,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 3.73541, position (cm) = (-35.4679,-75.2206,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.105571, position (cm) = (-33.1509,-109.137,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-22.559,-106.763,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 10.6239, position (cm) = (-21.9673,-107.435,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 17.5551, position (cm) = (66.7075,-95.5533,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 17.5091, position (cm) = (67.2523,-95.9646,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 17.5091, position (cm) = (67.2523,-95.9646,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 17.5551, position (cm) = (66.7075,-95.5533,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.816317, position (cm) = (75.1286,-75.1468,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.382, position (cm) = (116.437,-99.1095,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 98.6549, position (cm) = (48.2856,-58.9507,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 97.2722, position (cm) = (51.5586,-53.935,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 98.7047, position (cm) = (48.0551,-59.1309,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.096819, position (cm) = (72.7084,-60.21,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.284996, position (cm) = (61.6898,-60.5683,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.0865663, position (cm) = (64.0924,-64.9231,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 12.743, position (cm) = (49.8373,-55.5956,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 98.7047, position (cm) = (48.0551,-59.1309,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.701009, position (cm) = (53.874,-66.318,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.802451, position (cm) = (41.1671,-51.6425,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.83284, position (cm) = (52.2528,-60.3255,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.235934, position (cm) = (65.1883,-56.7051,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 2.37449, position (cm) = (76.6913,-52.9485,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 25.7003, position (cm) = (81.7659,-55.7813,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 2.13989, position (cm) = (75.3106,-66.2606,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 3.90353, position (cm) = (57.8064,-107.68,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.344201, position (cm) = (67.5336,-119.978,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.10436, position (cm) = (70.7423,-121.427,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.489543, position (cm) = (69.5743,-119.52,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 7.61693, position (cm) = (71.3551,-124.033,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 7.70884, position (cm) = (72.1528,-118.051,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.0776723, position (cm) = (71.4671,-133.758,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 4.9733, position (cm) = (63.896,-128.671,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 7.49543, position (cm) = (67.6907,-52.7159,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 72.294, position (cm) = (45.4977,-66.6601,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.0495094, position (cm) = (47.4628,-72.8033,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.68244, position (cm) = (46.3995,-64.6844,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 4.34943, position (cm) = (97.2926,-68.689,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 2.75508, position (cm) = (113.023,-75.5568,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 2.27468, position (cm) = (65.7185,-30.2464,200), weight = 2.98023e-08 + neutron, kinetic energy (MeV) = 1.86672, position (cm) = (84.5111,-47.5269,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 2.13003, position (cm) = (84.7086,-46.2205,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 5.91776, position (cm) = (91.9127,-53.0975,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 0.996549, position (cm) = (75.623,-49.3572,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 11.0546, position (cm) = (81.1724,-39.4067,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 5.20517e-06, position (cm) = (84.7312,-82.0418,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.0768814, position (cm) = (96.601,-75.0027,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 1.00415, position (cm) = (80.0139,-82.7681,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.332897, position (cm) = (89.4368,-43.2415,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 3.11713, position (cm) = (90.5184,-69.5339,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.0542512, position (cm) = (84.7906,-77.8804,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 5.60409, position (cm) = (93.3349,-46.4769,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 23.8647, position (cm) = (106.701,-65.9085,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 23.8647, position (cm) = (106.701,-65.9085,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 23.5993, position (cm) = (98.8958,-64.3138,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 23.5058, position (cm) = (98.6957,-64.328,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 23.7465, position (cm) = (101.581,-70.6826,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 23.7465, position (cm) = (101.581,-70.6826,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.466715, position (cm) = (85.8394,-72.7496,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.000222067, position (cm) = (66.0223,-56.0414,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 4.18582e-06, position (cm) = (70.0283,-49.2408,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 2.92977, position (cm) = (94.6637,-71.4105,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.315763, position (cm) = (82.9484,-64.4366,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.44129, position (cm) = (87.8229,-82.756,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 23.7696, position (cm) = (110.521,-55.1566,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.13894, position (cm) = (131.183,-60.7133,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.41354, position (cm) = (125.459,-67.2207,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.19442, position (cm) = (92.3494,-63.9267,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 23.5942, position (cm) = (95.3728,-61.0835,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 3.02968, position (cm) = (96.092,-60.1052,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 23.3879, position (cm) = (96.5425,-60.2169,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.142834, position (cm) = (47.0324,-21.685,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.111101, position (cm) = (64.6301,-54.7383,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.67148, position (cm) = (45.4098,-47.49,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.106149, position (cm) = (80.3915,-78.3988,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.524477, position (cm) = (79.1238,-76.4718,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.29841, position (cm) = (84.1347,-74.6963,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.218294, position (cm) = (110.337,-94.8621,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.364106, position (cm) = (86.409,-100.616,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.204233, position (cm) = (104.957,-86.1518,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.771431, position (cm) = (87.1824,-103.829,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 76.5551, position (cm) = (114.084,-103.246,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 76.6704, position (cm) = (113.923,-103.192,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 6.55205e-06, position (cm) = (107.593,-114.123,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.104537, position (cm) = (116.106,-103.902,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.65003, position (cm) = (104.01,-113.758,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.9114, position (cm) = (101.429,-123.835,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 4.16522, position (cm) = (105.767,-117.212,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 4.16522, position (cm) = (105.767,-117.212,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 11.4603, position (cm) = (104.957,-112.346,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.638742, position (cm) = (100.13,-29.3284,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 38.6797, position (cm) = (92.3141,8.93568,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.55744, position (cm) = (90.3781,8.91669,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 6.55573, position (cm) = (89.5267,3.26269,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 10.0425, position (cm) = (90.6598,5.30629,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 38.7185, position (cm) = (93.9211,3.28961,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 38.5021, position (cm) = (94.9201,3.86669,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 37.6498, position (cm) = (90.1915,-0.208449,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 38.7185, position (cm) = (93.9211,3.28961,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.632038, position (cm) = (91.5813,-19.8458,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.35135, position (cm) = (86.6278,3.30724,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 5.87134, position (cm) = (91.3338,32.5898,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 33.0052, position (cm) = (96.0479,-24.6362,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.310705, position (cm) = (95.2118,-46.378,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 7.07328, position (cm) = (94.7238,-48.3239,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 34.1059, position (cm) = (107.732,-48.8509,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 38.9288, position (cm) = (89.0423,12.9623,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 93.3641, position (cm) = (39.6553,-25.3247,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 92.6188, position (cm) = (40.5006,-25.3682,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 93.0909, position (cm) = (40.1156,-25.3253,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 47.5344, position (cm) = (53.2118,-53.653,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.11672, position (cm) = (46.4697,-47.6917,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 40.3246, position (cm) = (31.4384,-43.9082,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 98.6607, position (cm) = (54.2453,-50.0346,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 62.5681, position (cm) = (64.6723,-39.0203,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.157136, position (cm) = (88.9386,-34.569,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 38.603, position (cm) = (96.8714,-62.992,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.139736, position (cm) = (94.6397,-62.792,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.588795, position (cm) = (104.928,-60.4938,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.160147, position (cm) = (93.2964,-50.1911,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.40621, position (cm) = (83.2758,-52.2769,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 74.1208, position (cm) = (28.312,-45.99,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 74.1208, position (cm) = (28.312,-45.99,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.22063, position (cm) = (31.0856,-37.7584,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.0060735, position (cm) = (37.3935,-52.1709,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 11.2731, position (cm) = (32.1759,-56.8481,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 11.2731, position (cm) = (32.1759,-56.8481,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 11.2731, position (cm) = (32.1759,-56.8481,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 11.2731, position (cm) = (32.1759,-56.8481,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.912861, position (cm) = (29.671,-61.3466,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 3.69128, position (cm) = (31.8716,-55.0645,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.185622, position (cm) = (36.4917,-59.4631,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 11.2026, position (cm) = (31.3981,-56.0304,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 74.421, position (cm) = (26.4532,-49.2315,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.615892, position (cm) = (25.996,-35.0791,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 73.7677, position (cm) = (31.917,-50.8017,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 73.7677, position (cm) = (31.917,-50.8017,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.00213669, position (cm) = (33.1875,-55.5573,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.6724e-07, position (cm) = (18.5576,-61.6719,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 91.7658, position (cm) = (57.1694,-35.3867,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 2.92904, position (cm) = (81.6831,-21.6418,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 1.09545, position (cm) = (52.8854,-53.7135,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 77.7473, position (cm) = (40.5636,-49.8176,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 77.4522, position (cm) = (39.6322,-49.4279,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 76.2107, position (cm) = (64.5588,-44.485,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.0755234, position (cm) = (65.8712,-33.271,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.0277, position (cm) = (59.4049,-40.4677,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 2.04613, position (cm) = (61.0006,-44.9141,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 26.6037, position (cm) = (61.7764,-37.3298,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 76.2243, position (cm) = (64.6698,-44.1749,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 76.2243, position (cm) = (64.6698,-44.1749,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 98.8697, position (cm) = (61.0681,-38.1627,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.0787973, position (cm) = (-10.0441,-81.1287,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 14.5734, position (cm) = (23.307,-78.3513,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.99522, position (cm) = (11.1395,-72.7674,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.0162822, position (cm) = (2.57027,-73.1172,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 3.78003, position (cm) = (16.9443,-22.4012,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 7.90231, position (cm) = (-21.7337,2.97873,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 56.5728, position (cm) = (27.6005,-78.4237,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 56.5728, position (cm) = (27.6005,-78.4237,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 56.5728, position (cm) = (27.6005,-78.4237,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 56.5728, position (cm) = (27.6005,-78.4237,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.224774, position (cm) = (25.3836,-62.5491,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 15.9998, position (cm) = (21.2,-67.9052,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 55.6397, position (cm) = (27.4849,-76.9486,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 27.5982, position (cm) = (-51.9184,27.9137,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 3.2393, position (cm) = (-53.4588,32.4542,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 9.21891, position (cm) = (-53.4672,32.3504,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 9.95135, position (cm) = (-52.8179,29.1314,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.512054, position (cm) = (-49.2183,29.7842,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 6.95511, position (cm) = (-53.1765,27.5963,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 27.5982, position (cm) = (-51.9184,27.9137,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.190341, position (cm) = (-56.0901,22.8855,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.820549, position (cm) = (-49.1954,29.0611,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.436667, position (cm) = (-45.0054,28.5496,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 28.4404, position (cm) = (-47.9274,27.2835,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 28.4404, position (cm) = (-47.9274,27.2835,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 0.599872, position (cm) = (-53.4403,36.3025,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 83.4875, position (cm) = (-74.3895,47.8317,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 6.97996, position (cm) = (-8.83195,-5.31139,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 1.37295, position (cm) = (53.5028,-20.0451,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 0.189426, position (cm) = (11.8558,0.883902,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 1.84847, position (cm) = (9.10392,14.7646,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 0.259764, position (cm) = (13.5828,12.2135,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 10.4592, position (cm) = (13.0547,15.4519,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 27.0498, position (cm) = (3.52704,-49.9305,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 2.18947, position (cm) = (-3.99226,-52.4424,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 26.851, position (cm) = (7.99181,-57.7769,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.325363, position (cm) = (-10.074,-40.2934,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 63.5236, position (cm) = (-40.772,-23.4859,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 63.3461, position (cm) = (-41.5929,-23.5013,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 37.557, position (cm) = (-16.8529,26.7929,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 37.557, position (cm) = (-16.8529,26.7929,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 37.8738, position (cm) = (-13.6875,32.5142,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.282221, position (cm) = (-22.9139,2.82245,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 9.69302e-05, position (cm) = (-26.2738,4.7761,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.306948, position (cm) = (-31.2504,3.70267,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.180004, position (cm) = (-13.7805,3.50658,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.118771, position (cm) = (-14.3639,24.0718,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.309875, position (cm) = (-21.473,36.6423,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 1.69091, position (cm) = (-19.0654,25.9974,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.256581, position (cm) = (-14.4314,33.2729,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.404276, position (cm) = (-13.5863,38.709,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 5.11699, position (cm) = (-17.9311,30.3005,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.10174, position (cm) = (-17.5287,34.741,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.167498, position (cm) = (-40.4697,29.0511,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.668821, position (cm) = (-22.5414,36.1868,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.129819, position (cm) = (-16.7141,4.82453,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 36.4777, position (cm) = (-23.0163,-3.76286,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 1.22625, position (cm) = (-28.1339,-17.4133,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 27.6086, position (cm) = (-114.074,-63.2277,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 27.6086, position (cm) = (-114.074,-63.2277,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 1.56748, position (cm) = (-105.34,-55.7992,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 1.22082, position (cm) = (-99.0868,-46.5592,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 3.97319, position (cm) = (-91.366,-53.3679,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 6.06185e-05, position (cm) = (-94.0301,-69.1331,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 2.70155, position (cm) = (-99.6594,-70.3567,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 2.70121, position (cm) = (-105.6,-31.9297,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.254353, position (cm) = (-106.617,-55.7091,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 98.0273, position (cm) = (-82.3389,35.6256,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 98.0273, position (cm) = (-82.3389,35.6256,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 98.3308, position (cm) = (-84.8089,28.5381,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 8.96553e-06, position (cm) = (-63.9131,38.1471,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 0.217079, position (cm) = (-86.192,37.9569,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 7.15296, position (cm) = (23.6534,30.2978,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 0.164202, position (cm) = (25.4773,-29.7748,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.0647479, position (cm) = (16.4374,-31.3876,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.84735, position (cm) = (10.7553,4.89474,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 6.00184, position (cm) = (38.9969,-16.2226,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 99.3394, position (cm) = (50.2864,-33.4752,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 99.3852, position (cm) = (50.1625,-32.0963,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 99.3264, position (cm) = (49.4136,-32.1215,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.57793, position (cm) = (48.8503,-28.1982,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 75.8962, position (cm) = (47.0406,-27.541,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.320581, position (cm) = (45.5494,-33.39,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.775127, position (cm) = (33.6644,-33.3356,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 99.7666, position (cm) = (35.3126,-15.7609,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 6.20139, position (cm) = (13.3917,-10.7032,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 98.4031, position (cm) = (-0.89143,2.26293,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 2.62884, position (cm) = (-6.92385,40.8317,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 2.05735, position (cm) = (-6.74511,-11.1151,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 49.8564, position (cm) = (9.25935,-0.689933,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.221776, position (cm) = (21.0789,-55.0238,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.385939, position (cm) = (18.1936,-53.3684,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 2.33196, position (cm) = (22.1361,-58.7557,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 30.7831, position (cm) = (21.7812,-57.0161,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 30.7555, position (cm) = (18.61,-55.9574,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 0.500498, position (cm) = (-12.8467,-59.0956,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.332068, position (cm) = (0.0154968,-45.4376,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 22.9457, position (cm) = (29.069,-94.5744,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 23.8297, position (cm) = (26.4886,-94.5081,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.120641, position (cm) = (27.1371,-98.0194,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 1.67294, position (cm) = (26.0697,-93.5609,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 2.85186, position (cm) = (25.2508,-93.7074,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 23.7564, position (cm) = (26.4604,-94.4836,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.395524, position (cm) = (13.3761,-88.7428,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 1.843, position (cm) = (9.54912,-71.2466,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 3.04576, position (cm) = (16.4831,-71.0114,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.149107, position (cm) = (85.4423,-163.314,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 3.88095, position (cm) = (94.5824,-157.805,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 1.17347, position (cm) = (101.038,-160.789,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.169756, position (cm) = (114.056,-155.157,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.710179, position (cm) = (101.811,-149.484,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00821855, position (cm) = (40.4283,-153.716,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.210941, position (cm) = (1.96284,-95.2656,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.0197335, position (cm) = (-41.6158,-90.2848,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 68.503, position (cm) = (16.8071,-164.246,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 68.503, position (cm) = (16.8071,-164.246,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 68.503, position (cm) = (16.8071,-164.246,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 68.503, position (cm) = (16.8071,-164.246,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 7.39629, position (cm) = (36.9201,-156.066,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 2.74892, position (cm) = (61.2358,-174.206,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.361421, position (cm) = (85.0256,-188.29,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 2.34514, position (cm) = (78.0618,-197.239,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 5.0141, position (cm) = (72.561,-194.81,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 6.80274, position (cm) = (70.8151,-196.197,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 1.917, position (cm) = (42.9422,-180.086,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.0835456, position (cm) = (33.7598,-169.343,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.394536, position (cm) = (37.7694,-169.167,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.24118, position (cm) = (29.2418,-162.172,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.133548, position (cm) = (19.1759,-182.243,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 13.8218, position (cm) = (29.1817,-175.933,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.986789, position (cm) = (31.557,-174.646,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 3.4885, position (cm) = (29.1366,-174.19,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 56.6292, position (cm) = (27.7841,-217.395,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 72.5207, position (cm) = (28.5176,-205.177,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 35.2456, position (cm) = (14.003,-222.09,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.41256, position (cm) = (-11.5058,-216.067,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.92144, position (cm) = (36.0949,-217.27,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 0.189075, position (cm) = (13.3553,-199.083,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 35.0673, position (cm) = (-0.963212,-232.556,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 3.00298e-06, position (cm) = (8.87908,-235.403,200), weight = 5.96046e-08 + gamma, kinetic energy (MeV) = 1.42995, position (cm) = (-2.74966,-249.956,200), weight = 5.96046e-08 + gamma, kinetic energy (MeV) = 0.0899382, position (cm) = (-21.7048,-221.881,200), weight = 2.98023e-08 + neutron, kinetic energy (MeV) = 12.1909, position (cm) = (-18.0921,-216.403,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 0.715852, position (cm) = (-9.76246,-240.048,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 1.34434, position (cm) = (-8.71352,-284.076,200), weight = 1.49012e-08 + neutron, kinetic energy (MeV) = 3.88786, position (cm) = (-7.58776,-269.398,200), weight = 1.49012e-08 + gamma, kinetic energy (MeV) = 0.769854, position (cm) = (8.38271,-260.538,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 1.13277, position (cm) = (3.32922,-262.461,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 6.26255, position (cm) = (10.6787,-216.101,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.146135, position (cm) = (19.9745,-211.51,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 3.04292, position (cm) = (57.7824,-177.575,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 12.2991, position (cm) = (45.9536,-183.739,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 3.30766, position (cm) = (54.8,-173.045,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 3.12462, position (cm) = (-9.31243,-125.814,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 3.12462, position (cm) = (-9.31243,-125.814,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 6.26337, position (cm) = (-9.67756,-122.549,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.909, position (cm) = (17.0618,-66.3634,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 96.6565, position (cm) = (12.3484,-72.2235,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 43.083, position (cm) = (24.543,-68.2053,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.15883, position (cm) = (26.5589,-45.6346,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.75448, position (cm) = (18.3024,-29.3701,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 51.2803, position (cm) = (6.32927,-57.5184,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 86.8052, position (cm) = (4.04429,-42.5936,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.01301, position (cm) = (23.0762,-50.1561,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.139216, position (cm) = (6.98765,-32.0937,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 24.0345, position (cm) = (16.0251,-25.3114,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 98.5121, position (cm) = (28.7751,-60.7609,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 98.5513, position (cm) = (26.5862,-64.9245,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 98.5513, position (cm) = (26.5862,-64.9245,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.736223, position (cm) = (56.1197,-58.1474,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.500788, position (cm) = (54.9287,-66.2671,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 96.9579, position (cm) = (29.089,-51.3397,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 96.9579, position (cm) = (29.089,-51.3397,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 49.1436, position (cm) = (34.3307,-68.2736,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.216023, position (cm) = (32.1249,-81.5203,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.97072, position (cm) = (30.2042,-70.107,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.56159, position (cm) = (32.8754,-78.2232,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 3.71021, position (cm) = (40.4044,-86.1612,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 98.7197, position (cm) = (29.6688,-59.2607,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 2.10534, position (cm) = (38.9206,-84.4485,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (38.4037,-87.2515,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.239827, position (cm) = (37.9419,-87.3138,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 29.2835, position (cm) = (49.4718,-94.1293,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 77.3406, position (cm) = (41.8322,-86.9119,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 77.3406, position (cm) = (41.8322,-86.9119,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.192006, position (cm) = (36.8056,-67.3659,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.167599, position (cm) = (37.3252,-79.146,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.162761, position (cm) = (43.9181,-84.8098,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 98.8354, position (cm) = (25.3942,-55.888,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 10.4048, position (cm) = (-8.07821,-74.0219,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 10.4048, position (cm) = (-8.07821,-74.0219,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 2.92305, position (cm) = (2.72447,-77.1395,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 5.80378e-06, position (cm) = (46.3866,-92.9816,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 2.53288, position (cm) = (-0.563853,-78.942,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.281671, position (cm) = (-1.09377,-80.34,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.193476, position (cm) = (27.8396,-57.0805,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.08637, position (cm) = (27.6836,-53.5223,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.580408, position (cm) = (50.8798,-46.7889,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 4.54337, position (cm) = (37.2001,0.864352,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.379064, position (cm) = (17.7256,-42.0172,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 15.6945, position (cm) = (31.6729,-13.1443,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.8461, position (cm) = (45.6913,-22.7797,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.580731, position (cm) = (39.076,-18.7546,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.624939, position (cm) = (48.0547,-28.3796,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 7.92082, position (cm) = (40.0088,-19.895,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 15.6945, position (cm) = (31.6729,-13.1443,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.151911, position (cm) = (24.4607,-9.44025,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 1.52178, position (cm) = (22.3819,-20.5765,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 8.53319, position (cm) = (11.7105,-20.1465,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 8.53319, position (cm) = (11.7105,-20.1465,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 8.53319, position (cm) = (11.7105,-20.1465,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 0.278232, position (cm) = (16.2386,-16.8653,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 1.5647, position (cm) = (15.6062,-15.4043,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 2.93658, position (cm) = (16.6678,-16.4827,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 2.66992, position (cm) = (14.6743,-9.2175,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 12.8974, position (cm) = (34.2667,-15.7154,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.367053, position (cm) = (23.4336,-13.7292,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.186035, position (cm) = (27.5382,-15.3945,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.751169, position (cm) = (32.3559,-18.5719,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 3.53031, position (cm) = (29.5409,-18.0208,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 5.49901, position (cm) = (28.9082,-16.8174,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.230077, position (cm) = (38.1655,-16.6692,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.0779714, position (cm) = (46.1641,-17.3797,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 98.5488, position (cm) = (27.5653,-55.9728,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 98.8354, position (cm) = (25.3942,-55.888,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.68822, position (cm) = (23.1437,-46.1341,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 2.69625, position (cm) = (23.2284,-48.5652,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.192372, position (cm) = (0.618349,-92.5221,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 2.58619, position (cm) = (26.1493,-34.0865,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.239354, position (cm) = (22.546,-59.5522,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 58.8937, position (cm) = (37.1966,-64.806,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 59.9051, position (cm) = (32.0606,-66.8247,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 59.9868, position (cm) = (32.0889,-66.8365,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 1.06064, position (cm) = (7.49023,-56.0003,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.52204, position (cm) = (6.04355,-63.4431,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.84954e-06, position (cm) = (37.2164,-87.8815,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.000184698, position (cm) = (-26.8434,-45.913,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.27906, position (cm) = (0.368303,-49.457,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.945187, position (cm) = (12.4309,-44.0853,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.890892, position (cm) = (-0.395255,-19.2321,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.34712, position (cm) = (-0.363455,-44.0826,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.72401, position (cm) = (12.6995,-49.3923,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 8.08499, position (cm) = (0.932686,-46.3114,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 8.08499, position (cm) = (0.932686,-46.3114,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.0931344, position (cm) = (1.9411,-33.2904,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.58147, position (cm) = (0.647076,-124.183,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 26.0153, position (cm) = (-14.5832,-117.165,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 14.8313, position (cm) = (-9.94679,-151.127,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 29.9465, position (cm) = (-12.5636,-149.239,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 0.0192845, position (cm) = (-9.46895,-102.933,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.14248, position (cm) = (8.90151,-112.391,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.6833, position (cm) = (10.2041,-115.182,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 2.26927, position (cm) = (10.344,-115.409,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.0281464, position (cm) = (51.5061,-56.1667,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 65.101, position (cm) = (103.59,-95.3408,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 65.3229, position (cm) = (106.503,-93.5707,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.807783, position (cm) = (34.4747,-59.4862,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 51.5548, position (cm) = (112.506,-71.6963,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.92724, position (cm) = (161.434,-52.8352,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.0721534, position (cm) = (101.112,-83.7378,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.13388, position (cm) = (86.0047,-68.6547,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.80503, position (cm) = (95.4905,-63.4902,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.42723, position (cm) = (121.98,-56.9122,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.5919, position (cm) = (110.796,-77.9317,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 5.36358, position (cm) = (114.931,-80.5988,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.83255, position (cm) = (24.2613,-46.046,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.98882, position (cm) = (64.4895,-30.0904,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 13.8391, position (cm) = (50.4875,-49.3109,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 3.30857, position (cm) = (68.4931,-54.8024,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 11.0786, position (cm) = (67.2903,-47.32,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 11.0786, position (cm) = (67.2903,-47.32,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.876602, position (cm) = (46.598,-37.7296,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.213083, position (cm) = (48.6589,-31.9071,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 3.80541, position (cm) = (50.6739,-40.368,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.00204565, position (cm) = (24.0408,-7.40758,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 1.46058, position (cm) = (21.2938,-20.1165,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.188971, position (cm) = (24.3562,-14.9913,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 11.1804, position (cm) = (26.8595,-24.23,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 3.12362, position (cm) = (33.8511,-45.3753,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.91578, position (cm) = (18.2449,-37.0765,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 2.6871, position (cm) = (25.1856,-35.1496,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.0533121, position (cm) = (58.4145,-42.6523,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.124629, position (cm) = (69.7555,-73.2897,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 6.66192, position (cm) = (103.222,-50.376,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.139685, position (cm) = (72.2697,-65.9301,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.301763, position (cm) = (31.5918,-57.9018,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 9.36031, position (cm) = (95.4497,-49.1004,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.36031, position (cm) = (95.4497,-49.1004,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.40578, position (cm) = (99.6947,-52.8785,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 9.40578, position (cm) = (99.6947,-52.8785,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.127098, position (cm) = (100.961,-52.7078,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 3.77948, position (cm) = (98.6258,-51.3048,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 3.95192, position (cm) = (100.158,-52.4805,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.221088, position (cm) = (122.541,-108.652,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 57.7687, position (cm) = (91.256,-65.251,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.66473, position (cm) = (87.3972,-48.0596,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 3.43905, position (cm) = (86.1655,-53.8334,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 26.446, position (cm) = (88.8763,-47.5523,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 59.3083, position (cm) = (77.7011,-57.72,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 59.1792, position (cm) = (77.8317,-59.1918,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.07779, position (cm) = (-20.7971,-173.612,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 58.4912, position (cm) = (-46.7949,-60.3049,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 59.281, position (cm) = (-34.9465,-36.3867,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 99.8836, position (cm) = (-0.120585,-3.65074,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 0.00544376, position (cm) = (19.3806,36.9401,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.21267, position (cm) = (-30.0895,6.58962,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 2.56066, position (cm) = (-26.4561,2.11976,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.112473, position (cm) = (-26.1583,2.63842,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 33.4331, position (cm) = (-27.5223,3.03978,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.230758, position (cm) = (-20.9549,4.97876,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.762787, position (cm) = (-43.0991,5.26821,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.20481, position (cm) = (-35.0728,9.73362,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 35.7138, position (cm) = (-22.9882,1.65456,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 34.1209, position (cm) = (-24.0015,0.842986,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 34.3581, position (cm) = (-23.8814,0.762094,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 34.3581, position (cm) = (-23.8814,0.762094,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 38.1381, position (cm) = (-28.6935,7.51878,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.136637, position (cm) = (-27.1803,3.76924,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.699203, position (cm) = (-16.6075,-0.0324288,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.83217, position (cm) = (-37.3586,6.53066,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.500443, position (cm) = (-27.6865,-4.67319,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.20387, position (cm) = (-36.0952,16.8143,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.028467, position (cm) = (-40.4336,22.7308,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.26503, position (cm) = (-24.3707,1.36773,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 7.33487, position (cm) = (-19.2184,-6.86876,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.678157, position (cm) = (-35.8672,24.1574,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 4.96323, position (cm) = (11.81,-14.5096,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 2.99087, position (cm) = (-3.14669,-3.96636,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 19.1009, position (cm) = (-10.6194,-9.68737,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 19.1009, position (cm) = (-10.6194,-9.68737,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.254837, position (cm) = (-11.6768,-20.8199,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.67589, position (cm) = (-6.18636,-9.93334,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 3.17099, position (cm) = (-19.3762,-11.3062,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 48.6556, position (cm) = (-5.06875,4.25756,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 47.5857, position (cm) = (-40.4031,-30.4678,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 48.0853, position (cm) = (-48.0865,-29.7197,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.251284, position (cm) = (-10.3164,-86.7171,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.18584, position (cm) = (-10.0767,-88.3224,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.6386, position (cm) = (-11.6027,-86.9797,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.293207, position (cm) = (-10.8749,-97.9511,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 61.8458, position (cm) = (-11.0389,-90.855,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.43479, position (cm) = (-8.49618,-90.465,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 10.0805, position (cm) = (-11.5832,-89.9616,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 18.7608, position (cm) = (-8.9807,-88.9863,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 60.9369, position (cm) = (-10.162,-89.2455,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.10395, position (cm) = (-9.27517,-47.5189,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 4.74731, position (cm) = (-21.0927,-59.529,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 12.2909, position (cm) = (-14.8409,-56.698,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.140944, position (cm) = (-39.5956,-61.8457,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.0673729, position (cm) = (12.5505,-61.2156,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 9.37799, position (cm) = (8.1039,-61.4954,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.36619, position (cm) = (-44.7498,-69.4604,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.0654595, position (cm) = (-35.8751,-83.3528,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.42306, position (cm) = (-39.8151,-77.1105,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.0935912, position (cm) = (-28.88,-80.3854,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 8.99949, position (cm) = (-36.8193,-70.2089,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 12.0674, position (cm) = (-38.0029,-70.8747,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 98.6415, position (cm) = (-16.1705,-35.7183,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 2.22851, position (cm) = (-21.3875,-40.5984,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 98.955, position (cm) = (-14.756,-37.2047,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 98.8636, position (cm) = (-16.5676,-39.8228,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.205005, position (cm) = (-20.0528,-135.934,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.213476, position (cm) = (-20.0202,-137.755,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 3.57138, position (cm) = (-19.3728,-137.2,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 24.0349, position (cm) = (-17.2444,-134.615,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 8.92492, position (cm) = (-5.06736,-129.93,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.134291, position (cm) = (-14.3758,-121.254,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 1.47473e-07, position (cm) = (-23.4702,-134.542,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 11.1394, position (cm) = (-43.9823,-151.245,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 1.36495, position (cm) = (-22.0173,-153.917,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.80949, position (cm) = (-31.4025,-153.316,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.501911, position (cm) = (-25.6838,-130.781,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 4.0644, position (cm) = (-27.5591,-131.481,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-37.7794,-140.015,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.213323, position (cm) = (-36.7353,-149.062,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.0908856, position (cm) = (-25.4517,-130.67,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 2.94281, position (cm) = (-26.4911,-130.946,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 4.03224, position (cm) = (-26.3596,-131.982,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 1.12411, position (cm) = (-20.9545,-141.812,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 1.18948, position (cm) = (-17.529,-138.037,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.0609097, position (cm) = (-13.1414,-110.264,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 7.45982, position (cm) = (1.85602,-156.186,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.23941, position (cm) = (23.5297,-82.3662,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.0121646, position (cm) = (-7.31432,-113.708,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.143578, position (cm) = (4.24265,-119.169,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.220548, position (cm) = (-21.0616,-77.4387,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 17.2865, position (cm) = (-15.965,-132.549,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.260856, position (cm) = (-11.4088,-128.877,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 2.36924, position (cm) = (-25.2342,-132.635,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 17.5687, position (cm) = (-17.7965,-134.085,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 3.60745, position (cm) = (-18.1735,-132.533,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.339326, position (cm) = (-19.9561,-134.202,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 5.94845, position (cm) = (-19.9217,-134.147,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.651293, position (cm) = (-31.0419,-94.0626,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.169647, position (cm) = (11.0889,-118.337,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.0581329, position (cm) = (18.9979,-115.623,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 7.44282, position (cm) = (-0.725428,-109.911,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 12.1537, position (cm) = (18.2027,-103.876,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 12.1537, position (cm) = (18.2027,-103.876,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 7.02235, position (cm) = (10.5928,-107.723,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 1.13516, position (cm) = (2.5686,-119.572,200), weight = 5.96046e-08 + gamma, kinetic energy (MeV) = 2.33135, position (cm) = (12.8594,-14.2734,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.90718, position (cm) = (13.1343,-14.2125,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 7.44054, position (cm) = (13.0998,-14.3695,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 61.5294, position (cm) = (-13.7507,-21.0099,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 75.9616, position (cm) = (-13.8649,-18.4768,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.0716405, position (cm) = (-15.4938,-27.5002,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 72.931, position (cm) = (-12.6019,-28.0435,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.438019, position (cm) = (-22.8033,-42.0822,200), weight = 3.05176e-05 + e-, kinetic energy (MeV) = 0.919347, position (cm) = (-22.7108,-41.9325,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 1.87166, position (cm) = (-11.8646,-38.843,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 19.9499, position (cm) = (-27.4426,-42.8191,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 4.84514, position (cm) = (-26.0596,-43.1287,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 19.9101, position (cm) = (-29.6612,-39.1731,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.31137, position (cm) = (-46.116,-45.2164,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 10.2196, position (cm) = (-50.9298,-48.0347,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 10.2196, position (cm) = (-50.9298,-48.0347,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 10.2196, position (cm) = (-50.9298,-48.0347,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 9.02648, position (cm) = (-35.138,-40.5775,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.838713, position (cm) = (-30.8549,-47.4444,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 4.1685, position (cm) = (-26.7739,-40.542,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.19271e-07, position (cm) = (-2.28337,-33.7031,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.748403, position (cm) = (20.9875,-27.1051,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 1.88, position (cm) = (33.2252,-26.8569,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 4.40565, position (cm) = (-22.3059,-48.218,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.0138917, position (cm) = (-21.6963,-54.6795,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 4.19247, position (cm) = (-46.6011,-47.6446,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 19.7221, position (cm) = (-18.4229,-47.5841,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 20.1395, position (cm) = (-24.7584,-42.7515,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 2.20753e-06, position (cm) = (-10.3778,-33.4524,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 97.6169, position (cm) = (-5.80916,-52.6073,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 79.8215, position (cm) = (6.52002,-56.0781,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 79.8215, position (cm) = (6.52002,-56.0781,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 90.5084, position (cm) = (2.28112,-51.7534,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 90.5084, position (cm) = (2.28112,-51.7534,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 90.5212, position (cm) = (1.59768,-52.8405,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 90.329, position (cm) = (0.79631,-53.5499,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 90.329, position (cm) = (0.79631,-53.5499,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 82.1432, position (cm) = (-41.8265,-48.5458,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.0861035, position (cm) = (-9.79949,-28.0272,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.384678, position (cm) = (-16.0026,-13.4813,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.000118303, position (cm) = (16.2936,0.859474,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.399102, position (cm) = (-9.0989,-7.41573,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.0139818, position (cm) = (-11.6387,-1.11371,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.70153, position (cm) = (-11.3915,0.855041,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 3.23074, position (cm) = (-35.3223,21.7111,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 98.3731, position (cm) = (-3.74388,-52.6207,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 98.2166, position (cm) = (-3.37286,-52.8397,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 98.3731, position (cm) = (-3.74388,-52.6207,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 1.05775, position (cm) = (-21.3062,-53.5324,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.0721604, position (cm) = (8.70029,-47.5577,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.548567, position (cm) = (11.8448,-39.4926,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 69.4416, position (cm) = (-5.72036,-53.3064,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 69.4416, position (cm) = (-5.72036,-53.3064,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 97.8511, position (cm) = (-1.95498,-52.5029,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 97.8511, position (cm) = (-1.95498,-52.5029,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 97.5826, position (cm) = (-3.96449,-52.6073,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 2.19532, position (cm) = (-15.9869,-36.7141,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.48575, position (cm) = (-14.0369,-53.4701,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 79.3131, position (cm) = (-4.20159,-44.9351,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 79.2917, position (cm) = (-4.46598,-43.6205,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 79.4546, position (cm) = (-4.36185,-43.6321,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 4.70813, position (cm) = (-84.0047,-87.4654,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.294246, position (cm) = (-39.64,-53.8078,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 71.8894, position (cm) = (137.088,-122.501,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 71.8894, position (cm) = (137.088,-122.501,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 71.6782, position (cm) = (119.608,-116.844,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 71.1946, position (cm) = (123.132,-145.604,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.154182, position (cm) = (131.834,-101.78,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 59.5387, position (cm) = (134.051,-76.2674,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.164059, position (cm) = (106.629,-101.334,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 30.1928, position (cm) = (138.208,-101.576,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.576068, position (cm) = (132.521,-87.8121,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 16.4491, position (cm) = (145.399,-93.644,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.157094, position (cm) = (126.617,-86.6721,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 60.0293, position (cm) = (110.627,-92.5126,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.613387, position (cm) = (117.872,-91.0182,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.96995, position (cm) = (121.64,-90.8131,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 39.2643, position (cm) = (120.372,-87.7474,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.444302, position (cm) = (119.708,-73.575,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.203089, position (cm) = (110.391,-129.242,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 1.02702, position (cm) = (105.701,-101.548,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.193239, position (cm) = (101.54,-118.383,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 13.4735, position (cm) = (100.762,-118.113,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 13.4403, position (cm) = (99.659,-119.223,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 1.1872, position (cm) = (98.0329,-113.656,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 4.93572, position (cm) = (105.66,-113.121,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 33.4384, position (cm) = (116.987,-114.328,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.935007, position (cm) = (24.2064,-104.821,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.390768, position (cm) = (21.0087,-94.11,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.26916, position (cm) = (25.7842,-102.164,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 31.0482, position (cm) = (57.4988,-116.776,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 31.4194, position (cm) = (57.0604,-117.833,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.18145, position (cm) = (68.8896,-107.388,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 26.7965, position (cm) = (61.9186,-114.805,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.271723, position (cm) = (64.588,-108.79,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.296509, position (cm) = (64.0786,-108.664,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 4.0724, position (cm) = (64.5124,-108.74,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 6.83787, position (cm) = (63.2503,-110.071,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.304841, position (cm) = (49.9387,-95.8065,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.441056, position (cm) = (28.6033,-81.9027,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 84.997, position (cm) = (82.9592,-96.1175,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 84.997, position (cm) = (82.9592,-96.1175,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 85.4788, position (cm) = (94.2543,-107.204,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 85.3139, position (cm) = (95.464,-108.008,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 85.3139, position (cm) = (95.464,-108.008,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 85.1485, position (cm) = (85.6271,-102.607,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.0621231, position (cm) = (85.4112,-84.6535,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.153153, position (cm) = (97.5905,-80.8155,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.589567, position (cm) = (77.6056,-100.637,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.93676, position (cm) = (80.9041,-105.609,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.32866, position (cm) = (63.6045,-42.0897,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 0.852575, position (cm) = (-34.3992,-2.70753,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.758514, position (cm) = (-40.2557,-3.84222,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 2.80828, position (cm) = (-63.7633,-2.78695,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 36.8935, position (cm) = (-72.2909,1.58573,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 2.21637, position (cm) = (24.27,24.5265,200), weight = 0.125 + gamma, kinetic energy (MeV) = 1.22259, position (cm) = (-118.23,-27.5193,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 0.195971, position (cm) = (-180.67,-113.808,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 9.234, position (cm) = (-206.94,-113.645,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.191252, position (cm) = (-204.738,-111.163,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 9.32753, position (cm) = (-211.492,-116.694,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.324196, position (cm) = (-192.029,-94.3641,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 10.539, position (cm) = (-183.859,-122.35,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 10.539, position (cm) = (-183.859,-122.35,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.10379, position (cm) = (-159.708,-80.8543,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 6.92023e-06, position (cm) = (-169.564,-112.662,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 54.494, position (cm) = (-213.765,-119.001,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 18.2295, position (cm) = (-4.05318,-26.559,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 3.18126, position (cm) = (0.373425,-16.3282,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 74.1713, position (cm) = (82.2941,66.272,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.751083, position (cm) = (76.3716,65.6831,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.951288, position (cm) = (78.2357,84.0441,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 4.81971, position (cm) = (85.7086,47.9608,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 74.6327, position (cm) = (75.8712,65.4854,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 74.0489, position (cm) = (74.7799,58.2494,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 7.9011, position (cm) = (21.0894,69.4344,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 7.9011, position (cm) = (21.0894,69.4344,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.365641, position (cm) = (-27.8222,-60.6675,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 4.17782, position (cm) = (-44.4349,-57.4255,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 3.93138, position (cm) = (-38.1943,-64.7502,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.000135215, position (cm) = (30.9655,-7.22122,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 59.1961, position (cm) = (10.7771,-27.8095,200), weight = 0.125 + neutron, kinetic energy (MeV) = 59.1961, position (cm) = (10.7771,-27.8095,200), weight = 0.125 + neutron, kinetic energy (MeV) = 1.39578e-05, position (cm) = (-125.645,47.1025,200), weight = 7.45058e-09 + gamma, kinetic energy (MeV) = 0.483332, position (cm) = (-166.335,56.8308,200), weight = 1.49012e-08 + gamma, kinetic energy (MeV) = 1.45758, position (cm) = (-148.788,43.8582,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 2.01652, position (cm) = (-58.99,4.31361,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.21703, position (cm) = (-137.502,11.8038,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.297186, position (cm) = (-148.446,20.2774,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 3.32332, position (cm) = (-142.206,25.0839,200), weight = 5.96046e-08 + gamma, kinetic energy (MeV) = 3.86298, position (cm) = (-128.603,55.823,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 2.73367, position (cm) = (-105.073,-2.83095,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 1.71916, position (cm) = (-104.546,-2.05731,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 23.4276, position (cm) = (-118.938,30.0182,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 23.4065, position (cm) = (-112.15,17.4807,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.769746, position (cm) = (-92.3486,-3.5546,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.158247, position (cm) = (-81.0505,-1.64784,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 1.73217, position (cm) = (-112.98,20.839,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.09962, position (cm) = (-98.5738,29.2335,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.20529, position (cm) = (-101.219,0.0810056,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.565771, position (cm) = (-93.8246,0.667007,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.250154, position (cm) = (-117.261,2.85423,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 2.29841, position (cm) = (-135.986,-19.4811,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.0802609, position (cm) = (-117.111,17.811,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 1.83702e-05, position (cm) = (-112.017,-18.8803,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 12.1071, position (cm) = (-36.7323,28.0355,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 6.36126, position (cm) = (4.27353,44.6099,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 6.43171, position (cm) = (6.2245,44.9733,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.314485, position (cm) = (21.495,-15.3029,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 1.49957, position (cm) = (18.3517,-20.6362,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 3.84975, position (cm) = (21.5946,-22.9552,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.826724, position (cm) = (31.5664,1.46588,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.840412, position (cm) = (25.4119,-44.6552,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.469221, position (cm) = (31.356,-61.4085,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 29.9417, position (cm) = (44.1691,-72.8541,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 29.9417, position (cm) = (44.1691,-72.8541,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.18847, position (cm) = (47.8876,-75.9715,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 24.5405, position (cm) = (51.8288,-68.0421,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 29.3196, position (cm) = (41.6457,-68.3394,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.01071, position (cm) = (46.5976,-51.1458,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.112522, position (cm) = (57.7751,-48.8093,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.508105, position (cm) = (54.5673,-67.6442,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 16.9122, position (cm) = (59.8278,-60.8007,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.0822563, position (cm) = (32.3076,-49.5873,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.0982222, position (cm) = (22.2617,-40.6874,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 7.52658, position (cm) = (31.2833,-50.7935,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 7.52658, position (cm) = (31.2833,-50.7935,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.31294, position (cm) = (29.7469,-50.1759,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 3.95268, position (cm) = (30.7938,-50.6739,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 3.6806, position (cm) = (92.779,-48.0222,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.983381, position (cm) = (60.0615,-62.6224,200), weight = 9.53674e-07 + e-, kinetic energy (MeV) = 0.361264, position (cm) = (61.6831,-64.0436,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.676353, position (cm) = (56.126,-64.3085,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.09147, position (cm) = (49.6727,-77.987,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.467147, position (cm) = (34.9705,-84.632,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.610245, position (cm) = (60.0263,-75.5553,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.324795, position (cm) = (60.9068,-71.1462,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.163056, position (cm) = (56.8017,-63.9524,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.3266, position (cm) = (47.63,-67.1658,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.227238, position (cm) = (67.9323,-64.082,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (66.434,-66.7268,200), weight = 9.53674e-07 + e-, kinetic energy (MeV) = 0.548518, position (cm) = (67.0018,-66.4875,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 0.885389, position (cm) = (79.3297,-35.5677,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 2.55411, position (cm) = (80.5162,8.05974,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 6.49714, position (cm) = (52.4056,-87.464,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.0749852, position (cm) = (52.0702,-85.3387,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.690727, position (cm) = (3.58665,-103.236,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.32777, position (cm) = (98.1765,-61.5105,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.341802, position (cm) = (91.8372,-52.16,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.0814734, position (cm) = (89.1912,-44.3032,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.506485, position (cm) = (96.6473,-45.1934,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 3.33221, position (cm) = (91.8611,-50.3321,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 11.9858, position (cm) = (88.6158,-43.493,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.95056e-05, position (cm) = (68.683,-52.9782,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.00486884, position (cm) = (63.9795,-47.2538,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.093205, position (cm) = (57.5575,-48.8156,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 1.86583, position (cm) = (26.2846,-14.6964,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.18429, position (cm) = (50.3756,-13.6823,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.47253, position (cm) = (-109.122,36.039,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.177641, position (cm) = (58.4644,-8.85877,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 2.65129, position (cm) = (48.732,7.95403,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.078586, position (cm) = (32.627,-3.29454,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.232589, position (cm) = (39.4734,0.618985,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 0.00280198, position (cm) = (59.8479,2.99285,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 0.215748, position (cm) = (150.132,-126.152,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.113651, position (cm) = (141.42,-117.596,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.63919, position (cm) = (154.687,-131.014,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 7.14626e-06, position (cm) = (117.649,-92.8881,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.265117, position (cm) = (112.912,-69.5175,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.118509, position (cm) = (115.85,-60.8666,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.117662, position (cm) = (130.622,-65.9486,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.623623, position (cm) = (121.277,-67.6208,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.188096, position (cm) = (149.891,-62.1388,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.339259, position (cm) = (197.474,-30.2988,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.600995, position (cm) = (202.564,-31.9386,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 50.034, position (cm) = (139.473,-59.6917,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.410128, position (cm) = (124.476,-63.9721,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.1082, position (cm) = (110.59,-67.1362,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.00456, position (cm) = (119.34,-74.7691,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.71745e-06, position (cm) = (104.298,-75.9042,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 8.14239, position (cm) = (101.317,-60.7398,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 8.14239, position (cm) = (101.317,-60.7398,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.233632, position (cm) = (119.091,-100.533,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 2.17508, position (cm) = (117.045,-99.1603,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 20.8462, position (cm) = (119.541,-88.9326,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.80881, position (cm) = (117.173,-88.1466,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 20.8338, position (cm) = (118.652,-87.971,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 20.8338, position (cm) = (118.652,-87.971,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 20.8338, position (cm) = (118.652,-87.971,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.0598465, position (cm) = (118.49,-92.3276,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.965359, position (cm) = (119.593,-88.9419,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 48.6736, position (cm) = (113.619,-51.3396,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 48.6736, position (cm) = (113.619,-51.3396,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 51.2329, position (cm) = (183.416,-96.2263,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 51.7999, position (cm) = (157.929,-88.1089,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 51.9368, position (cm) = (164.637,-91.6791,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 51.981, position (cm) = (161.635,-93.7678,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 52.0837, position (cm) = (160.742,-93.9789,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 52.0837, position (cm) = (160.742,-93.9789,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 12.6174, position (cm) = (160.643,-93.0534,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 12.6174, position (cm) = (160.643,-93.0534,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 1.43203, position (cm) = (160.292,-105.066,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (114.703,-60.3454,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.184722, position (cm) = (143.376,-87.9602,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 43.5929, position (cm) = (138.459,-91.8811,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 17.3817, position (cm) = (138.891,-86.6023,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.494821, position (cm) = (126.422,-72.3088,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.113703, position (cm) = (127.756,-77.1766,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 1.31182, position (cm) = (131.044,-71.6263,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.00116655, position (cm) = (108.804,-83.6714,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.183216, position (cm) = (48.6215,-19.3477,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 85.0277, position (cm) = (54.0929,-25.8649,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 85.0277, position (cm) = (54.0929,-25.8649,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.363705, position (cm) = (-24.2112,101.214,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.256944, position (cm) = (-166.75,-50.264,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.00117326, position (cm) = (-196.149,-35.0167,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 1.75209, position (cm) = (-189.977,-34.4659,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 1.16136e-07, position (cm) = (-167.136,-66.1439,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.435359, position (cm) = (-197.401,-33.2868,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.00182499, position (cm) = (-205.157,-36.14,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 5.448, position (cm) = (-220.13,-23.3908,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 6.38837, position (cm) = (-222.813,-24.5442,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 5.96969, position (cm) = (-201.874,17.4132,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 91.6763, position (cm) = (-224.564,-53.9489,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 91.6763, position (cm) = (-224.564,-53.9489,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.14202, position (cm) = (-154.54,-29.7269,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.0708893, position (cm) = (-178.317,-24.6161,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 1.56561e-06, position (cm) = (-143.826,-20.4481,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.189016, position (cm) = (-164.091,-29.2519,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.09479, position (cm) = (-223.694,6.93126,200), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.170524, position (cm) = (-187.001,-19.5717,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.0187916, position (cm) = (-162.46,-6.55303,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 9.38974, position (cm) = (-141.698,-16.8428,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.488734, position (cm) = (-156.382,-12.4076,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 10.6819, position (cm) = (-159.347,-14.0804,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.00116946, position (cm) = (-147.605,-24.521,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.07526, position (cm) = (-101.667,-16.1493,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.602891, position (cm) = (-176.671,-3.99727,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 3.61644, position (cm) = (-255.668,-108.189,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.113194, position (cm) = (-251.974,-93.6684,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.720961, position (cm) = (-240.701,-77.0529,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 6.12609, position (cm) = (-252.931,-99.4663,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 2.08739, position (cm) = (-240.259,-94.1261,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 10.6653, position (cm) = (-272.216,-100.554,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.235418, position (cm) = (-251.697,-55.8852,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 6.90265, position (cm) = (-257.036,-54.5108,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 3.14492, position (cm) = (-265.56,-51.7113,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.94273e-05, position (cm) = (-239.862,-25.4273,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.108624, position (cm) = (-241.704,-60.8246,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.114077, position (cm) = (-231.95,-53.9029,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.254757, position (cm) = (-243.859,-56.9168,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 3.31733, position (cm) = (-245.126,-61.7569,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.76967, position (cm) = (-239.762,-56.7286,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.11241, position (cm) = (-243.627,-58.6408,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 53.5513, position (cm) = (-255.032,-59.0969,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.0830201, position (cm) = (-241.451,-54.4599,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.130643, position (cm) = (-241.489,-60.1341,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.733131, position (cm) = (-240.089,-60.6039,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 3.98784, position (cm) = (-250.107,-65.1902,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 41.8271, position (cm) = (-230.869,-48.2969,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 2.03193, position (cm) = (-250.087,-74.9926,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 3.8184, position (cm) = (-244.796,-71.2968,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.153994, position (cm) = (-245.288,-66.7499,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 2.7225, position (cm) = (-236.793,-59.7445,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 67.7669, position (cm) = (-189.716,-86.5348,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.54098, position (cm) = (-180.874,-76.0905,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.16629, position (cm) = (-184.313,-83.9674,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.256423, position (cm) = (-196.104,-116.556,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.00229391, position (cm) = (-196.557,-63.0305,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 1.16543, position (cm) = (-184.596,-58.8266,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.114962, position (cm) = (-173.965,-75.7818,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 38.9147, position (cm) = (-227.699,-96.7,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 68.4157, position (cm) = (-185.734,-82.7459,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.280668, position (cm) = (-204.112,-65.2459,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.762884, position (cm) = (-207.437,-72.5539,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.248097, position (cm) = (-207.159,-72.6198,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 8.43988, position (cm) = (-200.531,-68.3497,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 68.2594, position (cm) = (-186.412,-83.1213,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 68.4157, position (cm) = (-185.734,-82.7459,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.143447, position (cm) = (-191.247,-90.5623,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.00384, position (cm) = (-190.156,-87.8842,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.80984, position (cm) = (-194.638,-87.1724,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 68.4157, position (cm) = (-185.734,-82.7459,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 68.4157, position (cm) = (-185.734,-82.7459,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 2.51663, position (cm) = (-157.534,-36.1435,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 4.78351, position (cm) = (-158.202,-36.53,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 7.67535, position (cm) = (-158.08,-30.7012,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 7.67535, position (cm) = (-158.08,-30.7012,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.818606, position (cm) = (-256.832,-35.0645,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.365167, position (cm) = (-222.613,-61.2353,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 0.103718, position (cm) = (-191.349,-65.2,200), weight = 0.0625 + neutron, kinetic energy (MeV) = 16.8105, position (cm) = (-233.718,-72.8846,200), weight = 0.0625 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-146.462,-46.662,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 0.00047378, position (cm) = (-219.335,-67.7318,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 1.1678, position (cm) = (-172.184,-28.6935,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 59.549, position (cm) = (-199.365,-49.7592,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 1.93846e-05, position (cm) = (45.9762,7.45845,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.21785e-05, position (cm) = (31.4404,-4.44042,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.974491, position (cm) = (41.2409,19.8117,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.20875, position (cm) = (83.1332,11.2211,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 10.5895, position (cm) = (90.2171,17.0804,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 10.1266, position (cm) = (95.0663,21.895,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 7.3116e-06, position (cm) = (141.657,54.9812,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 0.0730425, position (cm) = (97.1191,23.7203,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 0.0495515, position (cm) = (97.6912,18.9182,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 1.31784, position (cm) = (62.6957,3.44611,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.0708371, position (cm) = (41.2115,-3.61954,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 11.6213, position (cm) = (71.7077,5.0483,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 6.15549, position (cm) = (73.8869,1.49452,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 9.87743, position (cm) = (63.2554,13.3879,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 9.97642, position (cm) = (63.2961,13.4105,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.339066, position (cm) = (39.5767,25.0922,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 3.93564, position (cm) = (45.3303,15.6174,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.151398, position (cm) = (27.3861,30.5164,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.150259, position (cm) = (55.3139,9.05204,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.20868, position (cm) = (24.7696,28.8598,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 38.1151, position (cm) = (61.2904,28.8049,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 2.50541, position (cm) = (65.4645,30.0618,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 4.07945, position (cm) = (48.2882,22.015,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 7.34237, position (cm) = (45.0737,32.5465,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.62506, position (cm) = (31.8522,25.6317,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.409159, position (cm) = (49.8297,28.6709,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 13.1527, position (cm) = (55.3516,28.6396,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 13.1527, position (cm) = (55.3516,28.6396,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.0013265, position (cm) = (74.0971,31.6946,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.157475, position (cm) = (52.6727,36.4055,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.467533, position (cm) = (59.4984,32.703,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.873851, position (cm) = (72.6056,42.3818,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 5.48701, position (cm) = (36.5535,43.4571,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.118446, position (cm) = (27.8887,28.2432,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.15077, position (cm) = (26.5392,41.4418,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 32.1052, position (cm) = (-55.0378,-57.8864,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 32.7741, position (cm) = (-51.375,-59.601,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.755901, position (cm) = (-39.694,-28.2908,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 4.48091, position (cm) = (-46.1952,-45.8321,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 4.30237, position (cm) = (-37.2763,-43.4534,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.146406, position (cm) = (-42.9012,-59.7183,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 30.9512, position (cm) = (-52.2858,-42.337,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 17.808, position (cm) = (-50.1114,-20.9064,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 32.1228, position (cm) = (-11.8075,-25.061,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 32.1228, position (cm) = (-11.8075,-25.061,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.181077, position (cm) = (-20.4595,-20.9351,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.199337, position (cm) = (17.0808,-21.3307,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 31.9895, position (cm) = (-11.969,-24.4382,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.378807, position (cm) = (-29.0533,-31.3251,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 31.5632, position (cm) = (-13.8223,-25.6057,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 32.2406, position (cm) = (-21.4099,-31.4165,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.164247, position (cm) = (-20.1983,-51.1095,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.0563794, position (cm) = (3.91341,-60.7894,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.09806, position (cm) = (21.5148,-57.7603,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.167618, position (cm) = (11.3911,-91.2418,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.58835, position (cm) = (-0.643217,-67.0332,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.266274, position (cm) = (12.1388,-54.1385,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 2.14677, position (cm) = (7.62921,-73.5153,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 13.3795, position (cm) = (12.8279,-142.008,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.972649, position (cm) = (18.1915,-132.491,200), weight = 2.98023e-08 + neutron, kinetic energy (MeV) = 3.62672, position (cm) = (29.936,-117.309,200), weight = 1.49012e-08 + neutron, kinetic energy (MeV) = 4.87524, position (cm) = (28.1725,-117.519,200), weight = 1.49012e-08 + gamma, kinetic energy (MeV) = 0.15246, position (cm) = (27.4556,-137.686,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 13.3795, position (cm) = (12.8279,-142.008,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 13.3795, position (cm) = (12.8279,-142.008,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 0.00338253, position (cm) = (16.5747,-108.842,200), weight = 3.72529e-09 + gamma, kinetic energy (MeV) = 2.41418, position (cm) = (9.96279,-134.189,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 0.0341414, position (cm) = (9.02712,-137.101,200), weight = 1.49012e-08 + neutron, kinetic energy (MeV) = 0.00076375, position (cm) = (-1.80467,-104.762,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.76066, position (cm) = (-13.5997,-75.5908,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.31228, position (cm) = (-63.8538,-121.215,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.69125, position (cm) = (-12.0852,-102.6,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 6.24603, position (cm) = (-40.4358,-77.4919,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 0.223358, position (cm) = (11.1575,-110.2,200), weight = 4.76837e-07 + gamma, kinetic energy (MeV) = 0.310606, position (cm) = (-34.0963,-104.112,200), weight = 4.76837e-07 + neutron, kinetic energy (MeV) = 0.0295289, position (cm) = (-1.44772,-111.61,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 0.317986, position (cm) = (-1.82577,-90.6445,200), weight = 2.98023e-08 + neutron, kinetic energy (MeV) = 0.000116643, position (cm) = (29.532,-128.195,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 1.5846, position (cm) = (2.76297,-122.612,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 0.218329, position (cm) = (-15.0671,-130.062,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 0.203989, position (cm) = (2.26879,-123.741,200), weight = 2.98023e-08 + gamma, kinetic energy (MeV) = 0.188481, position (cm) = (12.2821,-129.693,200), weight = 1.49012e-08 + gamma, kinetic energy (MeV) = 2.05577, position (cm) = (6.88482,-129.933,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 4.32841e-07, position (cm) = (5.24906,-127.119,200), weight = 1.86265e-09 + neutron, kinetic energy (MeV) = 2.26233, position (cm) = (3.37493,-133.452,200), weight = 1.86265e-09 + gamma, kinetic energy (MeV) = 1.34926, position (cm) = (-12.9344,-85.6208,200), weight = 3.72529e-09 + neutron, kinetic energy (MeV) = 4.45532e-06, position (cm) = (13.6345,-101.843,200), weight = 7.45058e-09 + neutron, kinetic energy (MeV) = 0.150632, position (cm) = (-4.27042,-70.1734,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.186833, position (cm) = (9.21927,-90.7033,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 4.55435, position (cm) = (-5.48327,-74.0023,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 63.5858, position (cm) = (-29.7474,-16.9818,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.0751506, position (cm) = (-28.0265,-10.1359,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 5.88117, position (cm) = (-26.6897,-14.7869,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 37.3501, position (cm) = (-33.3109,-15.0881,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 37.3501, position (cm) = (-33.3109,-15.0881,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 2.70859, position (cm) = (-45.525,48.0377,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 3.03752, position (cm) = (-109.094,53.0126,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 71.4868, position (cm) = (-109.206,71.0541,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 70.4616, position (cm) = (-114.92,66.8815,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 70.4814, position (cm) = (-113.952,66.863,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 71.165, position (cm) = (-107.602,71.1429,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 93.8542, position (cm) = (-113.362,96.9529,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.52809, position (cm) = (-111.918,100.682,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.91148, position (cm) = (-123.799,90.1203,200), weight = 6.10352e-05 + proton, kinetic energy (MeV) = 35.8064, position (cm) = (-111.931,95.3461,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.06381, position (cm) = (-87.9631,75.141,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 94.279, position (cm) = (-108.466,96.7925,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.000108954, position (cm) = (-101.777,74.3458,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 94.3184, position (cm) = (-103.75,74.854,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 8.71671e-05, position (cm) = (-117.913,112.42,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 3.53248, position (cm) = (-124.301,90.6042,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 63.7562, position (cm) = (-127.796,90.6528,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 63.7562, position (cm) = (-127.796,90.6528,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.442124, position (cm) = (-112.651,76.9003,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 27.7893, position (cm) = (-116.464,75.9996,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 27.7893, position (cm) = (-116.464,75.9996,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.0685936, position (cm) = (-111.776,94.0777,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 1.77659, position (cm) = (-105.713,76.6522,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.0060296, position (cm) = (-109.124,84.4555,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.233173, position (cm) = (-113.414,74.5374,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 8.85856, position (cm) = (-127.474,95.7563,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.865902, position (cm) = (-162.37,85.5671,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 40.2675, position (cm) = (-165.436,86.9699,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 40.2675, position (cm) = (-165.436,86.9699,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 94.9049, position (cm) = (-170.784,83.1123,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.632789, position (cm) = (-142.387,81.9909,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.109038, position (cm) = (-141.126,76.463,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 3.13281, position (cm) = (-139.053,74.2525,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 8.64445, position (cm) = (-153.43,87.3983,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 4.16958, position (cm) = (-155.742,97.3754,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 94.9049, position (cm) = (-170.784,83.1123,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.292985, position (cm) = (-150.641,78.1019,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.00899519, position (cm) = (-166.831,78.4139,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 4.77928, position (cm) = (-166.383,77.8763,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.272525, position (cm) = (-152.329,84.5723,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 51.1939, position (cm) = (-160.605,80.8369,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 51.1939, position (cm) = (-160.605,80.8369,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 0.0150189, position (cm) = (-85.9177,87.8657,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 30.9505, position (cm) = (-106.378,86.3514,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 3.11648, position (cm) = (-107.512,80.0897,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 4.88619, position (cm) = (-98.2879,103.085,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 29.7929, position (cm) = (-93.2043,85.0064,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.993153, position (cm) = (-58.2966,56.0992,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.108035, position (cm) = (-135.292,127.209,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 5.39739, position (cm) = (-78.7656,64.7826,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 0.000217396, position (cm) = (-104.046,74.5184,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 3.19493, position (cm) = (-113.918,95.9855,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 3.19493, position (cm) = (-113.918,95.9855,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.199662, position (cm) = (68.7177,113.776,200), weight = 0.00012207 Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB05/include/GB05ActionInitialization.hh b/examples/extended/biasing/GB05/include/GB05ActionInitialization.hh index 31db666412..c3c6d3f51e 100644 --- a/examples/extended/biasing/GB05/include/GB05ActionInitialization.hh +++ b/examples/extended/biasing/GB05/include/GB05ActionInitialization.hh @@ -39,10 +39,10 @@ class GB05ActionInitialization : public G4VUserActionInitialization { public: GB05ActionInitialization(); - virtual ~GB05ActionInitialization(); + ~GB05ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB05/include/GB05BOptnSplitAndKillByCrossSection.hh b/examples/extended/biasing/GB05/include/GB05BOptnSplitAndKillByCrossSection.hh index c30b56f8a9..a7a26e408b 100644 --- a/examples/extended/biasing/GB05/include/GB05BOptnSplitAndKillByCrossSection.hh +++ b/examples/extended/biasing/GB05/include/GB05BOptnSplitAndKillByCrossSection.hh @@ -40,22 +40,22 @@ class GB05BOptnSplitAndKillByCrossSection : public G4VBiasingOperation // -- Constructor : GB05BOptnSplitAndKillByCrossSection(G4String name); // -- destructor: - virtual ~GB05BOptnSplitAndKillByCrossSection(); + ~GB05BOptnSplitAndKillByCrossSection() override; public: // ---------------------------------------------- // -- Methods from G4VBiasingOperation interface: // ---------------------------------------------- // -- Unused: - virtual const G4VBiasingInteractionLaw* + const G4VBiasingInteractionLaw* ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, G4ForceCondition&) final { - return 0; + return nullptr; } - virtual G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, - const G4Track*, const G4Step*, G4bool&) final + G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, const G4Track*, + const G4Step*, G4bool&) final { - return 0; + return nullptr; } // -- Used methods ("non-physics biasing methods"): @@ -65,11 +65,10 @@ class GB05BOptnSplitAndKillByCrossSection : public G4VBiasingOperation // -- Here this distance will be sampled according the exponential // -- interaction law, using the interaction length passed to the // -- method SetInteractionLength(G4double) below. - virtual G4double DistanceToApplyOperation(const G4Track*, G4double, - G4ForceCondition* condition) final; + G4double DistanceToApplyOperation(const G4Track*, G4double, G4ForceCondition* condition) final; // -- Method the generate the final state, which is made of the primary // -- with half of its original weight, and a clone of it. - virtual G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) final; + G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) final; // -- Specific to this example: // ---------------------------- diff --git a/examples/extended/biasing/GB05/include/GB05BOptrSplitAndKillByCrossSection.hh b/examples/extended/biasing/GB05/include/GB05BOptrSplitAndKillByCrossSection.hh index 32025b6da7..a075a4da68 100644 --- a/examples/extended/biasing/GB05/include/GB05BOptrSplitAndKillByCrossSection.hh +++ b/examples/extended/biasing/GB05/include/GB05BOptrSplitAndKillByCrossSection.hh @@ -61,33 +61,33 @@ class GB05BOptrSplitAndKillByCrossSection : public G4VBiasingOperator // ------------------------------------------------------------ GB05BOptrSplitAndKillByCrossSection(G4String particleToBias, G4String name = "SplitAndKillByXS"); - virtual ~GB05BOptrSplitAndKillByCrossSection(); + ~GB05BOptrSplitAndKillByCrossSection() override; // -- method called at beginning of run: - virtual void StartRun(); + void StartRun() override; private: // ----------------------------- // -- Mandatory from base class: // ----------------------------- // -- Not used: - virtual G4VBiasingOperation* - ProposeOccurenceBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { - return 0; + return nullptr; } // -- Not used: - virtual G4VBiasingOperation* - ProposeFinalStateBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { - return 0; + return nullptr; } // -- Used method : it will return the biasing operation that will split particles // -- with a probabilty depending on the total absorption cross-section. - virtual G4VBiasingOperation* - ProposeNonPhysicsBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final; + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final; // --------------------------------------- // -- Method specific to this application: diff --git a/examples/extended/biasing/GB05/include/GB05DetectorConstruction.hh b/examples/extended/biasing/GB05/include/GB05DetectorConstruction.hh index 92344f9ef3..4872946bf7 100644 --- a/examples/extended/biasing/GB05/include/GB05DetectorConstruction.hh +++ b/examples/extended/biasing/GB05/include/GB05DetectorConstruction.hh @@ -41,11 +41,11 @@ class GB05DetectorConstruction : public G4VUserDetectorConstruction { public: GB05DetectorConstruction(G4bool bf); - ~GB05DetectorConstruction(); + ~GB05DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; private: G4bool fBiasingFlag; diff --git a/examples/extended/biasing/GB05/include/GB05PrimaryGeneratorAction.hh b/examples/extended/biasing/GB05/include/GB05PrimaryGeneratorAction.hh index 61796e3643..1def12431d 100644 --- a/examples/extended/biasing/GB05/include/GB05PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB05/include/GB05PrimaryGeneratorAction.hh @@ -41,9 +41,9 @@ class GB05PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB05PrimaryGeneratorAction(); - virtual ~GB05PrimaryGeneratorAction(); + ~GB05PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; diff --git a/examples/extended/biasing/GB05/include/GB05SD.hh b/examples/extended/biasing/GB05/include/GB05SD.hh index 0d3e2f8115..358af5dbfc 100644 --- a/examples/extended/biasing/GB05/include/GB05SD.hh +++ b/examples/extended/biasing/GB05/include/GB05SD.hh @@ -36,10 +36,10 @@ class GB05SD : public G4VSensitiveDetector { public: GB05SD(G4String name); - virtual ~GB05SD() {} + ~GB05SD() override = default; - virtual void Initialize(G4HCofThisEvent*) {} - virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist); + void Initialize(G4HCofThisEvent*) override {} + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/biasing/GB05/src/GB05BOptnSplitAndKillByCrossSection.cc b/examples/extended/biasing/GB05/src/GB05BOptnSplitAndKillByCrossSection.cc index 54a9b61982..47ffe132af 100644 --- a/examples/extended/biasing/GB05/src/GB05BOptnSplitAndKillByCrossSection.cc +++ b/examples/extended/biasing/GB05/src/GB05BOptnSplitAndKillByCrossSection.cc @@ -39,7 +39,7 @@ GB05BOptnSplitAndKillByCrossSection::GB05BOptnSplitAndKillByCrossSection(G4Strin //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB05BOptnSplitAndKillByCrossSection::~GB05BOptnSplitAndKillByCrossSection() {} +GB05BOptnSplitAndKillByCrossSection::~GB05BOptnSplitAndKillByCrossSection() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -87,7 +87,7 @@ GB05BOptnSplitAndKillByCrossSection::GenerateBiasingFinalState(const G4Track* tr // Now make clones of this track (this is the actual splitting): // we will then have the primary and clone of it, hence the // splitting by a factor 2: - G4Track* clone = new G4Track(*track); + auto clone = new G4Track(*track); clone->SetWeight(weightOfTrack); fParticleChange.AddSecondary(clone); // -- Below's call added for safety & illustration : inform particle change to not diff --git a/examples/extended/biasing/GB05/src/GB05BOptrSplitAndKillByCrossSection.cc b/examples/extended/biasing/GB05/src/GB05BOptrSplitAndKillByCrossSection.cc index d5202aebf3..2f0f57a302 100644 --- a/examples/extended/biasing/GB05/src/GB05BOptrSplitAndKillByCrossSection.cc +++ b/examples/extended/biasing/GB05/src/GB05BOptrSplitAndKillByCrossSection.cc @@ -44,7 +44,7 @@ GB05BOptrSplitAndKillByCrossSection::GB05BOptrSplitAndKillByCrossSection(G4Strin { fParticleToBias = G4ParticleTable::GetParticleTable()->FindParticle(particleName); - if (fParticleToBias == 0) { + if (fParticleToBias == nullptr) { G4ExceptionDescription ed; ed << "Particle `" << particleName << "' not found !" << G4endl; G4Exception("GB05BOptrSplitAndKillByCrossSection(...)", "exGB05.01", JustWarning, ed); @@ -120,7 +120,7 @@ G4VBiasingOperation* GB05BOptrSplitAndKillByCrossSection::ProposeNonPhysicsBiasi // ----------------------------------------------------- // -- Check if current particle type is the one to bias: // ----------------------------------------------------- - if (track->GetDefinition() != fParticleToBias) return 0; + if (track->GetDefinition() != fParticleToBias) return nullptr; // -------------------------------------------------------------------- // -- Compute the total cross-section for the physics processes @@ -134,7 +134,7 @@ G4VBiasingOperation* GB05BOptrSplitAndKillByCrossSection::ProposeNonPhysicsBiasi G4double interactionLength = fProcesses[i]->GetCurrentInteractionLength(); if (interactionLength < DBL_MAX / 10.) totalCrossSection += 1. / interactionLength; } - if (totalCrossSection < DBL_MIN) return 0; + if (totalCrossSection < DBL_MIN) return nullptr; G4double totalInteractionLength = 1. / totalCrossSection; diff --git a/examples/extended/biasing/GB05/src/GB05DetectorConstruction.cc b/examples/extended/biasing/GB05/src/GB05DetectorConstruction.cc index 18e61537c2..a4bc2fc341 100644 --- a/examples/extended/biasing/GB05/src/GB05DetectorConstruction.cc +++ b/examples/extended/biasing/GB05/src/GB05DetectorConstruction.cc @@ -43,13 +43,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB05DetectorConstruction::GB05DetectorConstruction(G4bool bf) : - G4VUserDetectorConstruction(), - fBiasingFlag(bf) {} +GB05DetectorConstruction::GB05DetectorConstruction(G4bool bf) : fBiasingFlag(bf) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB05DetectorConstruction::~GB05DetectorConstruction() {} +GB05DetectorConstruction::~GB05DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -62,17 +60,17 @@ G4VPhysicalVolume* GB05DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number // ----------------------------------- // -- volume where biasing is applied: @@ -81,11 +79,11 @@ G4VPhysicalVolume* GB05DetectorConstruction::Construct() G4double halfZ = 1.0 * m; G4VSolid* solidShield = new G4Box("shield.solid", halfXY, halfXY, halfZ); - G4LogicalVolume* logicShield = new G4LogicalVolume(solidShield, // its solid - defaultMaterial, // its material - "shield.logical"); // its name + auto logicShield = new G4LogicalVolume(solidShield, // its solid + defaultMaterial, // its material + "shield.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // volume entrance at (0,0,0) logicShield, // its logical volume "shield.phys", // its name @@ -99,11 +97,11 @@ G4VPhysicalVolume* GB05DetectorConstruction::Construct() G4double halfz = 1 * cm; G4VSolid* solidMeasurement = new G4Box("meas.solid", halfXY, halfXY, halfz); - G4LogicalVolume* logicMeasurement = new G4LogicalVolume(solidMeasurement, // its solid - worldMaterial, // its material - "meas.logical"); // its name + auto logicMeasurement = new G4LogicalVolume(solidMeasurement, // its solid + worldMaterial, // its material + "meas.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, 2 * halfZ + halfz), // volume entrance at (0,0,0) logicMeasurement, // its logical volume "meas.phys", // its name @@ -116,15 +114,14 @@ G4VPhysicalVolume* GB05DetectorConstruction::Construct() void GB05DetectorConstruction::ConstructSDandField() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Fetch volume for biasing: G4LogicalVolume* logicShield = G4LogicalVolumeStore::GetInstance()->GetVolume("shield.logical"); // ------------------------------------------------------------- // -- operator creation, configuration and attachment to volume: // ------------------------------------------------------------- - GB05BOptrSplitAndKillByCrossSection* biasingOperator = - new GB05BOptrSplitAndKillByCrossSection("neutron"); + auto biasingOperator = new GB05BOptrSplitAndKillByCrossSection("neutron"); // -- Now, we declare to our biasing operator all the processes we // -- their disapperance effect on neutrons to be counterbalanced // -- by the splitting by cross-section : @@ -135,7 +132,7 @@ void GB05DetectorConstruction::ConstructSDandField() biasingOperator->AttachTo(logicShield); G4cout << " Attaching biasing operator " << biasingOperator->GetName() << " to logical volume " - << biasingOperator->GetName() << G4endl; + << biasingOperator->GetName() << G4endl; } // ------------------------------------------------------------------------------------ // -- Attach a sensitive detector to print information on particles exiting the shield: diff --git a/examples/extended/biasing/GB06/History b/examples/extended/biasing/GB06/History index e5bca71396..e27a1d4c6a 100644 --- a/examples/extended/biasing/GB06/History +++ b/examples/extended/biasing/GB06/History @@ -6,11 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB06-V11-02-01) +## 2025-03-10 Igor Semeniouk (GB06-V11-03-01) - Remove unused WITH_GEANT4_UIVIS cmake option - Propagate biasing on/off to parallel world construction to initialization of biasing classes only if biasing requested. -## 2025-02-04 Igor Semeniouk +## 2025-02-04 Igor Semeniouk (GB06-V11-03-00) - Add check shred data was nullptr, fix crash when biasing off ## 2024-07-10 Gabriele Cosmo (GB06-V11-02-00) diff --git a/examples/extended/biasing/GB06/exampleGB06.cc b/examples/extended/biasing/GB06/exampleGB06.cc index 6d15e27d92..b10146a3f0 100644 --- a/examples/extended/biasing/GB06/exampleGB06.cc +++ b/examples/extended/biasing/GB06/exampleGB06.cc @@ -94,24 +94,23 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes // -- Create geometry: - GB06DetectorConstruction* detector = new GB06DetectorConstruction(); + auto detector = new GB06DetectorConstruction(); // -- Create parallel world: - GB06ParallelWorldForSlices* parallelWorld = - new GB06ParallelWorldForSlices("parallelWorldForSlices",biasingFlag); + auto parallelWorld = new GB06ParallelWorldForSlices("parallelWorldForSlices", biasingFlag); // -- and "augment" detector geometry with the parallelWorld one: detector->RegisterParallelWorld(parallelWorld); runManager->SetUserInitialization(detector); // -- Select a physics list: - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- and augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); biasingPhysics->BeVerbose(); // -- We use only the "non physics biasing" functionnality (ie, the ones which don't // -- alter physics processes behavior), and hence we equipe the physics list @@ -138,12 +137,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (macro != "") // batch mode { diff --git a/examples/extended/biasing/GB06/exampleGB06.out b/examples/extended/biasing/GB06/exampleGB06.out index 0e43fa212f..95f607f12e 100644 --- a/examples/extended/biasing/GB06/exampleGB06.out +++ b/examples/extended/biasing/GB06/exampleGB06.out @@ -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 @@ -44,23 +44,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 ======== @@ -784,6 +785,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 @@ -800,6 +802,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 @@ -813,219 +816,591 @@ Store e- internal conversion data 1 Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= - gamma, kinetic energy (MeV) = 1.09502, position (cm) = (147.467,-31.839,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.126685, position (cm) = (139.658,-50.7588,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.434637, position (cm) = (99.9916,-90.6384,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 7.69334, position (cm) = (97.0416,-45.6703,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 2.04743, position (cm) = (50.9338,-122.043,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.43863, position (cm) = (35.5194,-116.541,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.537634, position (cm) = (30.1257,-97.3379,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.22306, position (cm) = (91.1506,-105.465,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.14868e-11, position (cm) = (78.8056,-105.585,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.23476, position (cm) = (72.7165,-14.7043,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 4.75694, position (cm) = (107.009,-36.5505,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (44.5702,-79.7431,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 93.0747, position (cm) = (137.923,-134.964,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.05205, position (cm) = (145.937,-120.432,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.28512, position (cm) = (130.918,-118.11,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 93.1972, position (cm) = (138.464,-126.028,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 93.1229, position (cm) = (133.78,-122.619,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.180179, position (cm) = (-71.6136,108.901,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 59.86, position (cm) = (-75.5206,47.2728,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 60.6938, position (cm) = (-77.6203,48.8412,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 56.2222, position (cm) = (-67.3229,49.4911,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 56.7742, position (cm) = (-66.8757,59.3684,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.000335408, position (cm) = (-36.0701,47.6119,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.100926, position (cm) = (-29.1797,-26.5709,500), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.123492, position (cm) = (-27.8087,-56.4021,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 54.2166, position (cm) = (6.24843,134.176,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.39697, position (cm) = (33.8062,128.104,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0548874, position (cm) = (35.3694,145.607,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 73.2112, position (cm) = (16.143,35.4331,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 73.2652, position (cm) = (16.7077,42.5432,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 74.1756, position (cm) = (25.6628,31.2594,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.18534e-06, position (cm) = (28.2368,68.7555,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.86941, position (cm) = (-5.12685,49.5692,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 6.64385e-07, position (cm) = (-86.7167,110.406,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 38.4599, position (cm) = (-100.933,112.588,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 40.3016, position (cm) = (-108.007,112.012,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.448702, position (cm) = (-133.612,83.0411,500), weight = 3.8147e-06 - e-, kinetic energy (MeV) = 0.30782, position (cm) = (-134.938,83.379,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 1.40037e-08, position (cm) = (-128.131,89.3775,500), weight = 1.90735e-06 - e+, kinetic energy (MeV) = 4.94843, position (cm) = (-123.397,99.7552,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 28.8361, position (cm) = (-122.837,108.008,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.404097, position (cm) = (-115.449,47.753,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.161524, position (cm) = (-113.926,44.3206,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.131534, position (cm) = (-85.1486,48.798,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.230586, position (cm) = (-70.0023,49.6035,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.122988, position (cm) = (-114.848,97.6621,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.215138, position (cm) = (-99.2048,92.0075,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.205, position (cm) = (-109.82,77.0491,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.962874, position (cm) = (-58.7358,34.0292,500), weight = 1.90735e-06 - e-, kinetic energy (MeV) = 0.24182, position (cm) = (-58.53,34.0052,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 5.68685, position (cm) = (-34.0752,41.4963,500), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.132359, position (cm) = (-55.1466,80.8958,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.274981, position (cm) = (-53.3311,84.8958,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.532914, position (cm) = (-53.8373,82.378,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.370107, position (cm) = (-52.2987,82.6206,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.100168, position (cm) = (-63.2093,76.8237,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.067417, position (cm) = (-55.395,75.5321,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 23.757, position (cm) = (-53.535,81.9344,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 36.9633, position (cm) = (-65.8532,111.188,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 4.10674, position (cm) = (-33.2546,-46.3415,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.915395, position (cm) = (-18.928,-33.7441,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.90178, position (cm) = (-35.7346,-147.163,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.506067, position (cm) = (103.379,2.60492,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.95416, position (cm) = (83.6871,-4.99126,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.159083, position (cm) = (95.0576,-5.79646,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 58.8516, position (cm) = (75.5496,-5.93089,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 11.6083, position (cm) = (120.654,-22.6546,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.786861, position (cm) = (56.7646,1.91269,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.65096, position (cm) = (66.8814,4.81882,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.9548, position (cm) = (62.0358,18.3358,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.13567, position (cm) = (17.4638,-14.3419,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.328763, position (cm) = (24.9619,-1.01941,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.120294, position (cm) = (21.2041,3.42926,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.61617, position (cm) = (25.0272,-1.08753,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 1.47024, position (cm) = (14.6392,-21.1283,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.173105, position (cm) = (36.6678,-14.9044,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0983332, position (cm) = (81.847,95.4974,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.307358, position (cm) = (62.0991,37.5363,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 2.66178, position (cm) = (58.5454,27.4856,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.156418, position (cm) = (63.3434,48.9616,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.15809, position (cm) = (80.5988,46.0426,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.655133, position (cm) = (122.878,-40.1955,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.22188, position (cm) = (119.515,41.9651,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.975994, position (cm) = (124.126,10.9047,500), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 3.65759, position (cm) = (145.751,86.4064,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.426012, position (cm) = (14.7759,64.2349,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 23.8288, position (cm) = (22.246,59.6847,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 31.0567, position (cm) = (-3.28801,43.5816,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.52682, position (cm) = (112.648,91.3005,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.9028, position (cm) = (103.836,109.522,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.24223, position (cm) = (110.933,126.732,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.66432, position (cm) = (31.9794,111.926,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.293187, position (cm) = (53.9995,137.265,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 1.14835, position (cm) = (56.6169,141.028,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 6.31489, position (cm) = (52.712,136.274,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.370883, position (cm) = (49.9287,127.515,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 4.21153e-08, position (cm) = (57.0364,119.102,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 4.92594e-09, position (cm) = (-21.0078,71.049,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.342811, position (cm) = (-8.88535,64.194,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0606917, position (cm) = (-13.1361,67.6888,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.78419, position (cm) = (-22.4636,76.6937,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.201428, position (cm) = (-8.55637,77.5398,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.70524e-05, position (cm) = (-0.639192,68.064,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 80.2827, position (cm) = (-0.256444,71.5475,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 45.0842, position (cm) = (-125.626,25.6729,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.44798, position (cm) = (-136.952,29.384,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 11.5362, position (cm) = (-124.919,42.0606,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.4135, position (cm) = (-112.75,4.90037,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 2.27756e-06, position (cm) = (50.9078,42.6824,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (40.4125,9.72462,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0015349, position (cm) = (53.1365,29.6834,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.07172e-08, position (cm) = (-2.91896,43.3988,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 57.929, position (cm) = (28.0823,58.9284,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.230863, position (cm) = (6.69721,32.7728,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0524041, position (cm) = (45.8216,33.0338,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0475983, position (cm) = (29.336,45.8854,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.22306, position (cm) = (53.9779,76.1442,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 8.29914e-12, position (cm) = (121.971,95.8528,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0946482, position (cm) = (96.7538,57.483,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.30158, position (cm) = (65.9043,-32.95,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 8.36898, position (cm) = (78.4975,2.96954,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.86229, position (cm) = (49.1449,-39.1022,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.135043, position (cm) = (62.9696,-34.8863,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.56306, position (cm) = (75.4514,-44.5026,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.20967, position (cm) = (-99.8994,-113.549,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 1.3067e-06, position (cm) = (99.6574,29.602,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.3692, position (cm) = (11.2467,-5.78843,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (30.9177,-9.44884,500), weight = 1.90735e-06 - e-, kinetic energy (MeV) = 1.20607, position (cm) = (31.404,-9.86557,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 53.1096, position (cm) = (-30.7519,16.2972,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 85.4141, position (cm) = (2.08973,-5.70147,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 55.194, position (cm) = (16.2648,8.36772,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.136409, position (cm) = (19.1444,15.5256,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0387073, position (cm) = (10.0348,29.5931,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 7.46395, position (cm) = (7.36045,29.9096,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.244939, position (cm) = (31.2987,-23.9491,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.42633, position (cm) = (28.5809,-33.5188,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 9.43391e-07, position (cm) = (59.1346,-7.88684,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 5.06134, position (cm) = (28.9667,-13.6964,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.22304, position (cm) = (-74.3975,-53.5742,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.48952, position (cm) = (-116.323,-22.8278,500), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 55.2356, position (cm) = (9.19979,29.9046,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 72.0371, position (cm) = (2.83054,39.067,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 8.27201e-06, position (cm) = (52.0014,-82.1916,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 47.8528, position (cm) = (35.131,-95.8216,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.80651, position (cm) = (44.6801,-97.7987,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.998673, position (cm) = (36.9258,-95.1619,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.24569, position (cm) = (40.4067,-95.7219,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 1.36747, position (cm) = (38.2284,-95.9637,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.40059, position (cm) = (14.9048,-77.7393,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0795527, position (cm) = (67.4261,-81.5942,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.16799, position (cm) = (48.6718,-70.7147,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.55962, position (cm) = (37.8278,-45.4959,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 79.6899, position (cm) = (25.0873,-24.2823,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.80808, position (cm) = (33.6491,-2.49413,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.140523, position (cm) = (56.4723,-2.46272,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 18.2786, position (cm) = (15.4257,-17.6483,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.33785, position (cm) = (10.187,-12.5278,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.95348, position (cm) = (25.6927,-20.6121,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.305141, position (cm) = (12.9713,-25.2335,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 3.40718, position (cm) = (24.5376,-19.4769,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 51.8912, position (cm) = (38.9238,-44.5933,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.22306, position (cm) = (20.8033,-69.4041,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 79.9762, position (cm) = (43.4163,-67.4137,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 80.2588, position (cm) = (46.941,-67.1751,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.457515, position (cm) = (74.3273,-25.4875,500), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 1.69292, position (cm) = (47.0936,-29.0517,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.72153, position (cm) = (36.0501,-34.9639,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.808045, position (cm) = (55.2092,-33.3705,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.53198, position (cm) = (29.5024,-29.125,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0944265, position (cm) = (57.1817,-14.4036,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.494713, position (cm) = (21.1416,-22.7658,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 62.7196, position (cm) = (-2.76909,-97.9895,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 62.637, position (cm) = (0.447228,-90.3148,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 82.0601, position (cm) = (-25.0925,-44.7502,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.61752e-09, position (cm) = (37.2113,-71.2521,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.136413, position (cm) = (1.48542,-80.8561,500), weight = 1.90735e-06 - e-, kinetic energy (MeV) = 3.01557, position (cm) = (22.444,-76.4834,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 24.42, position (cm) = (9.32234,-83.4308,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 37.9341, position (cm) = (44.137,-87.3179,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 62.1055, position (cm) = (16.9594,-22.5906,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 44.165, position (cm) = (23.8089,-22.7707,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 1.09679e-07, position (cm) = (93.8354,-57.2645,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 62.9332, position (cm) = (142.036,-32.7164,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 5.59042, position (cm) = (115.203,-42.1912,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 95.8865, position (cm) = (146.168,13.9139,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 4.0804e-07, position (cm) = (117.313,68.7509,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.183174, position (cm) = (110.622,32.4886,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 30.5663, position (cm) = (129.576,48.4688,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 71.908, position (cm) = (145.679,100.019,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 3.00149, position (cm) = (142.903,96.7744,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 34.6754, position (cm) = (146.19,95.8311,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.31405, position (cm) = (59.2753,-44.8602,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.03904, position (cm) = (5.96405,-67.8947,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.397363, position (cm) = (-12.7078,-60.4934,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 4.32879, position (cm) = (7.29216,-62.9019,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.33424, position (cm) = (-13.4182,-106.818,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 1.4316, position (cm) = (-1.86265,-109.327,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.0874268, position (cm) = (-5.81363,-129.99,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.274518, position (cm) = (-9.82715,-119.082,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.399848, position (cm) = (-8.93913,-107.915,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.30775, position (cm) = (-11.8263,-108.372,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 9.67258, position (cm) = (-6.27392,-104.423,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 36.352, position (cm) = (-14.415,-98.7489,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.0676715, position (cm) = (67.6776,-108.452,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.277201, position (cm) = (80.4739,-97.5751,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.639091, position (cm) = (84.0111,-96.4072,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 0.843, position (cm) = (63.224,-117.495,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 2.23179, position (cm) = (47.9872,-126.189,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 63.0037, position (cm) = (72.2825,-114.791,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.137023, position (cm) = (73.6319,-134.895,500), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 2.24115, position (cm) = (81.2144,-137.32,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 6.45925, position (cm) = (70.516,-141.644,500), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 5.64864, position (cm) = (71.5617,-133.501,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.97948, position (cm) = (-126.396,117.251,500), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.283507, position (cm) = (-133.568,-13.9776,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00865659, position (cm) = (-119.474,51.9369,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 37.2811, position (cm) = (-100.947,38.5521,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.22306, position (cm) = (-137.807,-3.83764,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.51386, position (cm) = (-135.083,-35.8661,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.700777, position (cm) = (-102.61,-49.4327,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 9.45321, position (cm) = (-123.42,-44.8985,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.44619e-09, position (cm) = (-93.2576,66.2077,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.37416, position (cm) = (-81.2218,73.3187,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 6.54738e-06, position (cm) = (-93.3851,59.3176,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.6893, position (cm) = (-79.9638,50.1742,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.2787, position (cm) = (-83.4135,35.6113,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 94.8443, position (cm) = (-91.402,8.24101,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.414508, position (cm) = (-100.737,-27.5084,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.159693, position (cm) = (-91.4525,-7.64523,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.0101, position (cm) = (-83.3919,9.93402,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.05249, position (cm) = (-80.2433,5.2288,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.327371, position (cm) = (-79.6171,5.42984,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 58.1545, position (cm) = (-81.2336,2.05086,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.816594, position (cm) = (-89.4793,93.8871,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.548731, position (cm) = (-117.65,92.7709,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.084913, position (cm) = (-77.021,45.8476,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.13428e-05, position (cm) = (-86.3453,44.7634,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.47233, position (cm) = (-65.3656,48.972,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.00961, position (cm) = (-86.3278,18.156,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.79386, position (cm) = (-57.2101,7.11725,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 65.3086, position (cm) = (-51.0611,17.3895,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 64.5273, position (cm) = (-91.2206,-4.52334,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.207225, position (cm) = (-97.2142,4.97084,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 84.9885, position (cm) = (-112.078,-8.40594,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.338031, position (cm) = (-128.302,11.9489,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 79.9567, position (cm) = (-108.726,-29.589,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.80112, position (cm) = (-135.282,43.8323,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.06173, position (cm) = (-145.362,35.0411,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.23548, position (cm) = (-134.837,29.0382,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 31.6701, position (cm) = (-132.898,43.2754,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.06391e-05, position (cm) = (14.0355,-19.7986,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.267804, position (cm) = (-17.7656,-18.8171,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.96502, position (cm) = (-4.28032,-0.762805,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.989, position (cm) = (6.40815,2.11367,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.839143, position (cm) = (-79.0693,-62.4701,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.153, position (cm) = (-95.4509,-47.457,500), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.173963, position (cm) = (99.1469,-63.3806,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.319872, position (cm) = (53.4552,-79.5092,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.1903, position (cm) = (87.8666,-28.3963,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.000128186, position (cm) = (56.2211,-47.7445,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.2734, position (cm) = (-111.596,21.8162,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.476337, position (cm) = (-122.894,33.8083,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.162069, position (cm) = (-87.5482,45.0117,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.7321e-06, position (cm) = (-139.438,33.7343,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.77652e-07, position (cm) = (-122.047,-9.16167,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 94.8504, position (cm) = (0.694928,29.714,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0994612, position (cm) = (-6.54373,29.3649,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.177776, position (cm) = (-2.17753,29.9989,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.23674, position (cm) = (1.18873,27.4265,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 9.12225, position (cm) = (3.92954,23.5663,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 60.7336, position (cm) = (-1.98399,31.2951,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.00531, position (cm) = (0.0071979,18.2672,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.00092876, position (cm) = (35.4212,24.4034,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.98254e-07, position (cm) = (41.8912,61.2037,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.19801, position (cm) = (47.6994,31.6274,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00318013, position (cm) = (81.5581,40.0377,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.823402, position (cm) = (-7.02089,17.282,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.7902, position (cm) = (-24.4107,27.8746,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.09948, position (cm) = (45.8696,32.6902,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.17024, position (cm) = (-1.68545,29.3294,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.46459, position (cm) = (-0.312673,37.9307,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 7.68524, position (cm) = (2.64614,22.3337,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.282511, position (cm) = (1.76318,40.3872,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0806801, position (cm) = (3.10716,21.7096,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0295623, position (cm) = (-5.19864,22.7423,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.56896, position (cm) = (-2.49599,23.7861,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.110216, position (cm) = (-8.26638,62.649,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.8718, position (cm) = (-12.1009,60.4612,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.27334, position (cm) = (-34.0534,35.7738,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 7.19927, position (cm) = (-16.4211,38.5931,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.70302, position (cm) = (-10.654,19.8383,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 86.6229, position (cm) = (-82.0042,91.7345,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 29.0319, position (cm) = (-17.0005,70.9839,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.6797, position (cm) = (-73.2305,69.1117,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.6797, position (cm) = (-72.3684,62.1053,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.105059, position (cm) = (-69.0493,71.8247,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.70682, position (cm) = (-67.0335,75.1347,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 15.9677, position (cm) = (-72.1324,78.4612,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 57.4827, position (cm) = (-70.499,79.2225,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.8237, position (cm) = (-74.0568,80.5067,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.27336, position (cm) = (-66.3595,75.6743,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00425513, position (cm) = (-43.0693,94.3166,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.234389, position (cm) = (-35.8149,86.6366,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00186162, position (cm) = (-54.6497,74.0875,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.24269, position (cm) = (-56.7315,62.6879,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.587244, position (cm) = (-92.6573,-25.3907,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.180137, position (cm) = (-54.2956,-93.936,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.348062, position (cm) = (-60.6102,-94.5374,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.329132, position (cm) = (-8.74049,-2.02764,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.107826, position (cm) = (-33.4403,-3.60833,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 7.75344e-11, position (cm) = (-41.5407,-12.4527,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.50908e-09, position (cm) = (-14.4388,-13.6328,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.781649, position (cm) = (-48.306,-12.6138,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.16307, position (cm) = (-13.637,-34.1959,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.088224, position (cm) = (-48.4175,-4.07993,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.121533, position (cm) = (-100.932,34.6535,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.4945, position (cm) = (-110.219,21.378,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.309235, position (cm) = (-120.382,35.7719,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.118061, position (cm) = (-133.491,43.1321,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.5343, position (cm) = (-25.1862,-8.15575,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.24078, position (cm) = (-54.7764,-24.4709,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.382197, position (cm) = (-28.5953,12.9154,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.934, position (cm) = (-13.3428,40.0237,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 34.1086, position (cm) = (-34.0342,-26.0729,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.347871, position (cm) = (-47.417,-30.603,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.701128, position (cm) = (-17.8981,-42.7992,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.1097, position (cm) = (-35.0005,-34.176,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.37993, position (cm) = (-14.3799,-16.7476,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 7.03456, position (cm) = (-33.7105,-34.7082,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.9825, position (cm) = (-30.208,-25.775,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.16048e-06, position (cm) = (-34.7462,-24.9595,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0761406, position (cm) = (-3.14586,-86.3233,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.57073, position (cm) = (-14.6513,-88.3352,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 9.78559, position (cm) = (-94.4041,-33.4273,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.736516, position (cm) = (-92.4511,-21.0838,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.175664, position (cm) = (-86.5927,-14.8414,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.77249, position (cm) = (-123.449,-22.5685,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 72.8254, position (cm) = (-106.266,-25.5049,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.214785, position (cm) = (-104.987,-20.6888,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.23863, position (cm) = (-104.439,-39.3807,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.331381, position (cm) = (-107.248,-25.6852,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.236212, position (cm) = (-89.4788,13.0995,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.35697, position (cm) = (-116.124,-16.1254,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 93.7541, position (cm) = (-149.703,-2.48059,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.96778, position (cm) = (-120.29,-3.35331,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 60.8846, position (cm) = (-144.003,21.2528,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.479585, position (cm) = (-88.2507,34.9957,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0556224, position (cm) = (-89.8048,25.8226,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.104075, position (cm) = (-114.882,55.8345,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.40594, position (cm) = (-84.2696,56.1438,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0456535, position (cm) = (-102.777,-38.9687,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.25429, position (cm) = (-136.575,-65.6381,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.293441, position (cm) = (-106.194,-46.9,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.462686, position (cm) = (-93.8801,-51.4795,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.135201, position (cm) = (-102.478,-89.9806,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 47.4349, position (cm) = (-109.974,-56.5826,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 90.2535, position (cm) = (-102.03,-40.887,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.352413, position (cm) = (-95.2243,-43.2909,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.90181, position (cm) = (-114.01,-37.2007,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 27.7065, position (cm) = (-114.504,-32.7584,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.143774, position (cm) = (-51.7022,42.1057,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.01659, position (cm) = (-50.1694,50.7762,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 58.228, position (cm) = (-66.5687,49.4903,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 11.2618, position (cm) = (-74.6171,-55.4913,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 89.4885, position (cm) = (-96.4523,-6.25848,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.92184, position (cm) = (-62.7693,-90.258,500), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 37.0436, position (cm) = (-138.231,-29.3715,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 58.6415, position (cm) = (-105.849,-44.1295,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 58.7698, position (cm) = (-94.3608,-41.6213,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.38516, position (cm) = (-125,-92.099,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.60044, position (cm) = (-129.351,-102.871,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 7.65782e-07, position (cm) = (-115.241,-116.231,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.71777, position (cm) = (-120.96,-99.8444,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.18809, position (cm) = (-126.169,-95.7495,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 40.1056, position (cm) = (-119.738,-109.016,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.723497, position (cm) = (-54.4376,-91.0665,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.276893, position (cm) = (9.74955,-83.5261,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.38818, position (cm) = (-43.1641,-64.6471,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.19121, position (cm) = (-31.1111,-62.1302,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.239852, position (cm) = (4.58433,-43.3652,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.57257, position (cm) = (-72.5911,-91.8255,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.302825, position (cm) = (-63.3683,-62.4662,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.17327, position (cm) = (-52.5514,-70.1722,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 48.6012, position (cm) = (-59.7943,-82.4225,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 44.9725, position (cm) = (0.696615,-13.192,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 45.5437, position (cm) = (-9.5767,-30.0288,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.472136, position (cm) = (3.75429,-84.5464,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.536653, position (cm) = (6.70289,-75.2535,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.10021, position (cm) = (-5.90714,-78.504,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0809405, position (cm) = (-9.61061,-76.9476,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.304433, position (cm) = (-8.54518,-77.2101,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 74.3785, position (cm) = (-38.5894,-23.0265,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 8.25279, position (cm) = (-102.435,-111.88,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 76.4031, position (cm) = (-149.999,-102.509,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.87823e-07, position (cm) = (-131.341,-108.154,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 8.6494, position (cm) = (-148.1,-101.901,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 59.0902, position (cm) = (82.7638,8.06802,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.649164, position (cm) = (85.9821,14.8541,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 10.5817, position (cm) = (53.8465,-9.8246,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.269953, position (cm) = (51.5067,-3.76706,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.65495, position (cm) = (30.5955,15.3996,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.13084, position (cm) = (44.0077,-13.7633,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.14779, position (cm) = (40.4214,-13.1571,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 60.2151, position (cm) = (74.5826,38.6124,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 59.8846, position (cm) = (71.1451,46.8903,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.242462, position (cm) = (89.8702,24.4584,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.167136, position (cm) = (57.3692,30.7765,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.206963, position (cm) = (4.27046,33.0825,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.18902, position (cm) = (0.911918,44.0494,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.514392, position (cm) = (39.8012,85.6363,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.418669, position (cm) = (40.3205,96.3323,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.2821, position (cm) = (1.47511,67.0196,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 54.8624, position (cm) = (-11.4062,82.8684,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.184779, position (cm) = (-15.8512,81.4814,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.245856, position (cm) = (-14.7671,79.336,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.34188, position (cm) = (-14.9141,76.7244,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 22.6977, position (cm) = (-14.5126,79.9859,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.549545, position (cm) = (-55.436,73.6719,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.15618, position (cm) = (-42.6071,50.1523,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.67867, position (cm) = (38.0922,68.399,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.693155, position (cm) = (28.9422,55.8561,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.322653, position (cm) = (7.77301,50.69,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.110527, position (cm) = (6.59216,41.9223,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.440025, position (cm) = (-1.59635,147.252,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0473844, position (cm) = (-1.67146,123.613,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 13.3262, position (cm) = (16.6792,142.623,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 17.3226, position (cm) = (-2.38578,51.2916,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.1051, position (cm) = (-70.2023,35.4016,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.44469, position (cm) = (-65.607,134.639,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.801004, position (cm) = (-102.06,53.8673,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.114059, position (cm) = (-64.3033,115.955,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 57.9641, position (cm) = (-60.0084,112.245,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.442611, position (cm) = (-105.514,102.851,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 59.5623, position (cm) = (-56.9157,86.2564,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.11595, position (cm) = (-76.992,98.1954,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 59.4869, position (cm) = (-83.1767,114.79,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.44465, position (cm) = (-67.9742,77.5951,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.774796, position (cm) = (-31.399,117.834,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.046791, position (cm) = (-26.6353,129.971,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.84858, position (cm) = (-40.0017,127.176,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.59958, position (cm) = (-25.7238,139.681,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.000308049, position (cm) = (-46.8845,116.12,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.112876, position (cm) = (-52.0602,102.524,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.319363, position (cm) = (-42.3726,141.657,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.97847, position (cm) = (-52.8117,139.935,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.94872, position (cm) = (-50.5232,126.029,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 86.0991, position (cm) = (-32.6153,127.057,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.168497, position (cm) = (93.2742,142.16,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.8364, position (cm) = (107.006,125.077,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 8.34958, position (cm) = (124.5,128.493,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.709078, position (cm) = (100.696,131.57,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 38.3368, position (cm) = (75.9242,123.267,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.16753, position (cm) = (135.792,125.977,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.72746, position (cm) = (105.037,129.396,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.522506, position (cm) = (118.123,123.914,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 25.1873, position (cm) = (102.41,135.453,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.193911, position (cm) = (0.907598,89.4539,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.271579, position (cm) = (92.1951,118.821,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 37.232, position (cm) = (90.5321,141.917,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.5917e-09, position (cm) = (2.5604,-38.3686,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.654094, position (cm) = (26.8525,-61.2284,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.451668, position (cm) = (36.7669,-62.9242,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.225473, position (cm) = (32.4227,-58.3031,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.85097, position (cm) = (34.6567,-64.1306,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 28.3524, position (cm) = (28.7596,-64.3672,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 19.3825, position (cm) = (5.53824,-40.9798,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.50819, position (cm) = (27.8433,-59.5356,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0126767, position (cm) = (18.359,-71.6239,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00180654, position (cm) = (-21.5239,-92.2195,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.123654, position (cm) = (-34.0939,-83.2175,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 54.3148, position (cm) = (-18.1428,-76.0226,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 53.7856, position (cm) = (-9.56248,-77.5123,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0621989, position (cm) = (-18.0388,-97.2488,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.99128, position (cm) = (-21.4724,-87.7731,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.08802, position (cm) = (-7.9438,-89.457,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 60.0279, position (cm) = (-18.7575,-100.401,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.70113, position (cm) = (-29.6464,-68.7626,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.471388, position (cm) = (8.48544,-85.3051,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.14509, position (cm) = (18.6889,-81.3454,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.442993, position (cm) = (42.5973,-50.92,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 72.9173, position (cm) = (23.3298,-112.822,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.59729, position (cm) = (-1.34291,-103.717,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 16.4623, position (cm) = (4.14413,-64.8572,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 74.0517, position (cm) = (2.68446,-95.9387,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.624507, position (cm) = (-26.2968,-122.079,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.548585, position (cm) = (-3.01261,-130.729,500), weight = 3.8147e-06 + anti_nu_e, kinetic energy (MeV) = 0.439499, position (cm) = (45.2137,99.6389,500), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 58.6184, position (cm) = (46.9253,103.665,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 74.5845, position (cm) = (28.3822,115.122,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0494387, position (cm) = (53.2619,91.5549,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.25054, position (cm) = (49.1621,91.3645,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 38.5992, position (cm) = (48.5206,90.5773,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.8527, position (cm) = (53.8269,88.522,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 8.91924, position (cm) = (61.0871,107.304,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 40.6296, position (cm) = (61.5115,116.142,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 21.4464, position (cm) = (26.9816,104.411,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0983136, position (cm) = (103.135,64.4897,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.53891, position (cm) = (96.0165,-0.794733,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.38044, position (cm) = (81.987,24.4499,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.03358, position (cm) = (54.3498,80.8602,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 74.5007, position (cm) = (104.9,90.1463,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 66.2869, position (cm) = (81.1928,83.7976,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (80.4562,73.9633,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 33.3091, position (cm) = (79.5831,76.1981,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.2939, position (cm) = (81.6407,85.6207,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.82583, position (cm) = (110.555,69.259,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.13193, position (cm) = (95.089,-75.777,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.589189, position (cm) = (101.061,-81.2065,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.814896, position (cm) = (108.033,-62.4771,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.23775, position (cm) = (-44.6423,11.2014,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 47.9954, position (cm) = (-80.0563,-81.6551,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 90.4845, position (cm) = (-94.0792,-63.4396,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.2545, position (cm) = (-51.4035,-35.979,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 50.6692, position (cm) = (-85.4842,-38.5238,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.36249, position (cm) = (-77.9079,23.7215,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 51.2169, position (cm) = (-65.268,18.054,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.226974, position (cm) = (-72.9819,20.7818,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.22304, position (cm) = (-16.9926,6.74144,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 67.0315, position (cm) = (-3.8977,20.3267,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 66.9678, position (cm) = (-4.07291,18.4571,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 80.0454, position (cm) = (-3.11318,98.3254,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0973109, position (cm) = (-23.3781,79.4382,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.55592, position (cm) = (-20.2854,75.6283,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.3951, position (cm) = (-21.9014,77.4307,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.600333, position (cm) = (-26.3538,72.6476,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00160685, position (cm) = (-26.8164,72.7948,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0627311, position (cm) = (-22.8901,53.2021,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0805407, position (cm) = (-4.07851,53.8357,500), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.0214185, position (cm) = (-115.352,-15.1609,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.85412, position (cm) = (-98.698,-9.55601,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 1.8067, position (cm) = (106.134,-98.1537,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.118045, position (cm) = (71.9571,-106.533,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.4139, position (cm) = (94.7473,-74.5903,500), weight = 7.62939e-06 + gamma, kinetic energy (MeV) = 0.224814, position (cm) = (102.121,-112.633,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.12646, position (cm) = (117.648,-103.777,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0804225, position (cm) = (108.057,-106.277,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.76991, position (cm) = (112.221,17.4945,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.11303, position (cm) = (30.4956,-98.4411,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 35.0318, position (cm) = (-6.96963,62.368,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.10831e-08, position (cm) = (-9.8954,40.5569,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.27506, position (cm) = (-16.6435,32.6563,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.000203462, position (cm) = (14.5608,104.542,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.100734, position (cm) = (2.84148,106.586,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.72595, position (cm) = (-19.4101,4.64545,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0794707, position (cm) = (-48.1751,20.5085,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.216791, position (cm) = (-43.9468,34.7726,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 38.3194, position (cm) = (-7.61017,9.98386,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 36.9709, position (cm) = (-2.83994,8.36233,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.1315, position (cm) = (-0.742102,-6.01844,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 98.2359, position (cm) = (-4.84678,-7.33589,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.81852, position (cm) = (2.29829,-8.81128,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 65.1304, position (cm) = (1.47755,-8.55412,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.743964, position (cm) = (5.00493,-19.5136,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.9838, position (cm) = (7.95582,-17.8151,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.35676, position (cm) = (36.0126,22.1652,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 93.1252, position (cm) = (56.799,31.1953,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.9493, position (cm) = (42.3216,36.7823,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 61.5623, position (cm) = (-1.77624,-9.43813,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 61.5623, position (cm) = (-1.77624,-9.43813,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.184651, position (cm) = (-4.97734,-15.9481,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.06742, position (cm) = (8.05297,-11.2413,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.17359, position (cm) = (10.7878,-18.2753,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 69.8769, position (cm) = (-3.32618,-30.3955,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.9531, position (cm) = (-12.1531,-14.5948,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.199371, position (cm) = (-44.0712,-3.03593,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.429918, position (cm) = (-12.5951,-15.0358,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.581657, position (cm) = (-6.81376,-6.20345,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0010422, position (cm) = (-2.70488,-19.7156,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 76.0773, position (cm) = (-8.77704,-14.1959,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.01919, position (cm) = (22.9896,9.69003,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.95998e-05, position (cm) = (24.4361,0.67032,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.202543, position (cm) = (24.2168,14.3413,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 33.7358, position (cm) = (20.9032,-0.971391,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 12.6215, position (cm) = (27.0793,26.7039,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 69.0025, position (cm) = (25.752,26.0212,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.830186, position (cm) = (-9.62778,22.6899,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0794222, position (cm) = (-15.6336,17.8115,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0106717, position (cm) = (-9.02933,12.8055,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.19225, position (cm) = (-30.0134,-15.8202,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.5697, position (cm) = (-17.1189,-6.03608,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.36546, position (cm) = (-42.3894,-41.3307,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 24.4554, position (cm) = (-41.3962,3.59316,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.1796, position (cm) = (-29.0355,-21.2876,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 95.469, position (cm) = (-30.1158,-18.7554,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 94.3046, position (cm) = (-42.9001,-17.0118,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.70253, position (cm) = (-57.7539,-8.8448,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.355898, position (cm) = (-38.4462,-56.8221,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.746376, position (cm) = (-38.4519,-50.575,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.662509, position (cm) = (-32.0209,-43.2024,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 6.81372, position (cm) = (-53.2165,-38.6808,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0938687, position (cm) = (-34.5082,-57.0967,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.1398, position (cm) = (-24.0795,-41.8088,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.43781, position (cm) = (-16.7419,-45.8973,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.222536, position (cm) = (-1.85251,-40.9259,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.204466, position (cm) = (14.0633,-60.6063,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.303377, position (cm) = (-4.98013,-70.4229,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.8248, position (cm) = (-10.5195,-68.4259,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.302922, position (cm) = (-51.4662,-50.0564,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00112667, position (cm) = (-51.297,-52.9443,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.151067, position (cm) = (-50.704,-40.1285,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.20707, position (cm) = (-49.4117,-46.2818,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 11.9271, position (cm) = (-51.48,-45.5156,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.47572, position (cm) = (-17.5017,2.04356,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 79.0424, position (cm) = (-2.16706,-10.4345,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 98.7257, position (cm) = (-12.2972,-14.7702,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 98.7257, position (cm) = (-12.2972,-14.7702,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.163902, position (cm) = (34.7881,-49.3673,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.11583, position (cm) = (-21.7467,-29.4885,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.481037, position (cm) = (-29.5881,27.1529,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 7.97833, position (cm) = (-12.7969,-17.7149,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.14071, position (cm) = (21.8116,-35.2184,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 8.361, position (cm) = (13.9549,-10.8732,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.79058, position (cm) = (9.49998,-40.0148,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 9.08929, position (cm) = (27.5258,-38.3523,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 99.2612, position (cm) = (4.58728,-40.731,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.95462e-09, position (cm) = (37.5565,-8.92144,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 40.9039, position (cm) = (0.894953,-38.7672,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.356972, position (cm) = (6.08934,-35.7258,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 45.2132, position (cm) = (10.1831,-54.7609,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.177261, position (cm) = (10.004,-40.147,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.00502, position (cm) = (2.47727,-46.0708,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0904946, position (cm) = (3.82357,-29.7908,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 11.3364, position (cm) = (1.6025,-31.9801,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 98.866, position (cm) = (8.0034,-34.6216,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.472229, position (cm) = (44.3027,14.2491,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 4.24308e-07, position (cm) = (40.5575,34.8241,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.86449e-05, position (cm) = (35.7082,16.6629,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.272093, position (cm) = (26.2164,11.3858,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.151309, position (cm) = (32.402,14.7803,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.302935, position (cm) = (26.5546,8.78418,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.255945, position (cm) = (68.8992,20.708,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.44764, position (cm) = (31.6074,8.58881,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.534957, position (cm) = (15.8114,-32.3471,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0844025, position (cm) = (-24.2415,-23.7489,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.9027e-06, position (cm) = (73.5842,51.1456,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.288857, position (cm) = (22.9441,39.0772,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.117172, position (cm) = (60.4456,-1.02545,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.331222, position (cm) = (62.0765,4.12034,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 17.9625, position (cm) = (101.565,43.6025,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.5051, position (cm) = (80.1449,60.5424,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.62659e-07, position (cm) = (78.6066,51.5733,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 66.6291, position (cm) = (81.7093,62.6738,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 66.6171, position (cm) = (80.5685,70.1732,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.242916, position (cm) = (92.9006,84.4337,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 14.9837, position (cm) = (53.0992,47.8189,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.767509, position (cm) = (54.1471,39.3467,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0902534, position (cm) = (71.1951,57.4689,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 6.20876e-07, position (cm) = (61.8757,44.1815,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.35854e-08, position (cm) = (6.06759,29.3656,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.30069, position (cm) = (46.9661,43.4328,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.6787, position (cm) = (37.8426,41.7941,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0523447, position (cm) = (1.37947,93.0204,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.663897, position (cm) = (58.325,77.281,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.4201, position (cm) = (87.5217,80.4265,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 25.3744, position (cm) = (85.8095,67.0345,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 65.4165, position (cm) = (-77.8144,-109.915,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.43228, position (cm) = (-43.6035,-93.6624,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.22277e-10, position (cm) = (-90.595,-104.253,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 30.3279, position (cm) = (-73.8613,-125.176,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.7292, position (cm) = (-71.7227,-114.029,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0680256, position (cm) = (-29.8361,25.7604,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.0615, position (cm) = (4.05056,38.2644,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.21955e-06, position (cm) = (-22.5397,39.4792,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.08967e-09, position (cm) = (-36.6397,45.9133,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00131318, position (cm) = (-8.54229,64.5253,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.8406, position (cm) = (-12.2432,51.1843,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.2996, position (cm) = (-12.6577,60.7688,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 73.8537, position (cm) = (-5.58826,64.1961,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.498391, position (cm) = (-109.756,40.9835,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.22306, position (cm) = (-98.9932,58.0104,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.13368, position (cm) = (-134.126,22.9814,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.3294, position (cm) = (-137.849,23.2794,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 43.9743, position (cm) = (-134.819,23.0698,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.276063, position (cm) = (-124.14,39.3018,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.765806, position (cm) = (-120.352,18.8362,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.06893, position (cm) = (-128.811,56.9945,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.473321, position (cm) = (-27.2591,80.1998,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 5.4528, position (cm) = (-73.7714,105.266,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 1.71459, position (cm) = (-67.383,-21.2184,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 6.65382, position (cm) = (-71.0426,-54.6769,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.8368, position (cm) = (-49.8906,-26.7408,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.71093, position (cm) = (-62.9193,-41.4494,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.94318, position (cm) = (-107.599,-13.1498,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0584527, position (cm) = (63.7465,-32.1578,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 9.92369, position (cm) = (17.7533,-75.0556,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0919133, position (cm) = (15.5949,-109.849,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.22306, position (cm) = (24.4463,110.796,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.87389, position (cm) = (34.4501,89.871,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.202898, position (cm) = (17.5608,96.1561,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.32986, position (cm) = (-7.95902,116.706,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 48.2784, position (cm) = (12.4951,87.3616,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.0763, position (cm) = (-71.8827,27.5819,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.2496, position (cm) = (-61.109,34.6512,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.348371, position (cm) = (-52.9176,41.0738,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 30.4306, position (cm) = (-47.9976,47.0226,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 72.6577, position (cm) = (-41.6036,50.0893,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.02869, position (cm) = (-30.2464,-21.1801,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 27.0664, position (cm) = (-35.4498,43.9017,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 46.3092, position (cm) = (-28.8258,41.3287,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0294545, position (cm) = (-73.6107,34.5012,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.25101e-09, position (cm) = (-38.3563,35.7676,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.5887, position (cm) = (-54.8277,28.3612,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.379329, position (cm) = (-49.8321,75.6611,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 79.3967, position (cm) = (-50.2337,30.6965,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 96.5609, position (cm) = (-52.6014,34.9194,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.343092, position (cm) = (-23.2968,52.0064,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.35971, position (cm) = (-43.072,43.1383,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 14.9629, position (cm) = (-34.4772,41.7176,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.6602, position (cm) = (-25.3223,36.771,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.10365, position (cm) = (-55.1676,41.1904,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.759888, position (cm) = (-45.7246,35.1585,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.163103, position (cm) = (-63.6378,37.9754,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.094086, position (cm) = (-66.4494,43.1023,500), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 81.3959, position (cm) = (-14.8733,3.64954,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.106268, position (cm) = (-23.3504,13.8557,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 7.76902e-09, position (cm) = (-20.2766,-1.15559,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 82.9186, position (cm) = (-70.2195,25.7989,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 82.7312, position (cm) = (-68.4876,13.5263,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.04921e-09, position (cm) = (-42.4083,39.074,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.398282, position (cm) = (-15.2304,33.7297,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.25408, position (cm) = (-36.0855,23.2053,500), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 3.06392, position (cm) = (-63.4917,47.8582,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 9.64523, position (cm) = (-51.3247,5.30035,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 4.76426, position (cm) = (-60.7839,87.5602,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 67.6943, position (cm) = (-52.7365,84.0288,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.608994, position (cm) = (-26.7744,97.3008,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 84.1594, position (cm) = (-58.1083,79.4694,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 28.1855, position (cm) = (-54.4264,87.9421,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.112617, position (cm) = (-52.3703,74.9214,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 71.8324, position (cm) = (-57.748,74.1064,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.21496, position (cm) = (-89.174,-67.231,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.8871, position (cm) = (-118.32,-79.2913,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 79.6038, position (cm) = (-139.402,-39.6167,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.499108, position (cm) = (-114.349,-65.1376,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.972141, position (cm) = (-128.864,-62.6629,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 25.9995, position (cm) = (-125.354,-42.5392,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.323127, position (cm) = (-91.2092,-12.7295,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 9.5066, position (cm) = (-116.372,-15.6017,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 77.3276, position (cm) = (-108.276,-25.3382,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0818849, position (cm) = (-124.087,-56.5122,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.436625, position (cm) = (-120.166,-71.1976,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 87.9936, position (cm) = (-115.493,-53.0743,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.13959, position (cm) = (32.1545,-1.7005,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 48.0516, position (cm) = (-14.611,10.7004,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 46.0177, position (cm) = (-13.4088,25.4997,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.49031, position (cm) = (-32.4798,8.0776,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.68061, position (cm) = (-25.3413,-14.7408,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.77313, position (cm) = (-24.2757,-12.11,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 87.1741, position (cm) = (-18.3631,-19.1871,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.11975, position (cm) = (-16.155,6.86846,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 81.433, position (cm) = (-47.2574,15.9608,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.73826, position (cm) = (-44.6334,50.7187,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.10931, position (cm) = (-66.4027,54.3097,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 66.2159, position (cm) = (-61.4936,53.205,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.859, position (cm) = (-57.6065,-11.3621,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.4026, position (cm) = (-57.594,-11.3591,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.331837, position (cm) = (-45.154,-5.61338,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.04143, position (cm) = (-52.8839,-5.67205,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.307033, position (cm) = (-50.7438,2.13243,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.33027, position (cm) = (-47.4696,2.39763,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.154594, position (cm) = (-18.7868,-40.9359,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 71.493, position (cm) = (13.0017,66.7297,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 8.91921e-08, position (cm) = (30.8224,54.6626,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 5.77249, position (cm) = (5.97654,38.1412,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0530582, position (cm) = (88.2179,-25.2649,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.129264, position (cm) = (96.4509,-25.4525,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 8.01023, position (cm) = (91.3211,-34.5818,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 45.6917, position (cm) = (91.7577,-32.1762,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 4.22835e-09, position (cm) = (66.6624,-54.5114,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.685893, position (cm) = (66.9001,-40.7551,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.0971, position (cm) = (63.7888,-26.8494,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.3254, position (cm) = (77.8989,-39.0592,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.3254, position (cm) = (77.8989,-39.0592,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.4872, position (cm) = (110.611,-26.6634,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 75.1116, position (cm) = (109.576,-25.0876,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.77652, position (cm) = (38.3516,-7.90256,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 94.7089, position (cm) = (0.864678,-61.3217,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.10393, position (cm) = (9.77956,-73.3523,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.00917247, position (cm) = (5.30861,-66.9503,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 5.11423, position (cm) = (8.81867,-79.5232,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 63.7753, position (cm) = (3.07449,-64.8015,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 97.3686, position (cm) = (-1.90034,-58.0973,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.0789748, position (cm) = (3.13702,-56.6802,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.100738, position (cm) = (17.7177,-53.699,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 1.18757, position (cm) = (6.21964,-58.4979,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (11.5732,-58.8705,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.245952, position (cm) = (6.67524,-56.9301,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.56899, position (cm) = (6.99886,-56.8265,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.80315, position (cm) = (6.61517,-57.4508,500), weight = 1.90735e-06 + e-, kinetic energy (MeV) = 1.37967, position (cm) = (6.30897,-60.8936,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.417145, position (cm) = (-7.41177,-16.453,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 3.63451, position (cm) = (-12.6589,-17.2547,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.22306, position (cm) = (15.0066,-42.6133,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.520104, position (cm) = (7.75374,-22.4939,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.3216, position (cm) = (48.3581,103.449,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 2.71535, position (cm) = (106.086,101.667,500), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 3.48008, position (cm) = (108.587,90.4655,500), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.794029, position (cm) = (49.0346,115.691,500), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.391443, position (cm) = (23.7745,95.8012,500), weight = 1.90735e-06 Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB06/include/GB06ActionInitialization.hh b/examples/extended/biasing/GB06/include/GB06ActionInitialization.hh index 3ddc04d82d..9b7157b49d 100644 --- a/examples/extended/biasing/GB06/include/GB06ActionInitialization.hh +++ b/examples/extended/biasing/GB06/include/GB06ActionInitialization.hh @@ -39,10 +39,10 @@ class GB06ActionInitialization : public G4VUserActionInitialization { public: GB06ActionInitialization(); - virtual ~GB06ActionInitialization(); + ~GB06ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB06/include/GB06BOptnSplitAndKillByImportance.hh b/examples/extended/biasing/GB06/include/GB06BOptnSplitAndKillByImportance.hh index 463081e933..360cd6f168 100644 --- a/examples/extended/biasing/GB06/include/GB06BOptnSplitAndKillByImportance.hh +++ b/examples/extended/biasing/GB06/include/GB06BOptnSplitAndKillByImportance.hh @@ -43,22 +43,22 @@ class GB06BOptnSplitAndKillByImportance : public G4VBiasingOperation // -- Constructor : GB06BOptnSplitAndKillByImportance(G4String name); // -- destructor: - virtual ~GB06BOptnSplitAndKillByImportance(); + ~GB06BOptnSplitAndKillByImportance() override; public: // ---------------------------------------------- // -- Methods from G4VBiasingOperation interface: // ---------------------------------------------- // -- Unused: - virtual const G4VBiasingInteractionLaw* + const G4VBiasingInteractionLaw* ProvideOccurenceBiasingInteractionLaw(const G4BiasingProcessInterface*, G4ForceCondition&) final { - return 0; + return nullptr; } - virtual G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, - const G4Track*, const G4Step*, G4bool&) final + G4VParticleChange* ApplyFinalStateBiasing(const G4BiasingProcessInterface*, const G4Track*, + const G4Step*, G4bool&) final { - return 0; + return nullptr; } // -- Used methods ("non-physics biasing methods"): @@ -67,13 +67,12 @@ class GB06BOptnSplitAndKillByImportance : public G4VBiasingOperation // -- requesting the biasing. // -- Here we use the condition "forced" and the distance returned // -- is "dummy" (DBL_MAX). - virtual G4double DistanceToApplyOperation(const G4Track*, G4double, - G4ForceCondition* condition) final; + G4double DistanceToApplyOperation(const G4Track*, G4double, G4ForceCondition* condition) final; // -- Method the generate the final state, which is: // -- - made of the primary with half of its original weight, and a clone of it in // -- case of splitting // -- - the primary with increased weight or the primary killed, in case of killing - virtual G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) final; + G4VParticleChange* GenerateBiasingFinalState(const G4Track*, const G4Step*) final; // -- Specific to this example: // ---------------------------- diff --git a/examples/extended/biasing/GB06/include/GB06BOptrSplitAndKillByImportance.hh b/examples/extended/biasing/GB06/include/GB06BOptrSplitAndKillByImportance.hh index 08b19cfdf4..33edb8f2c9 100644 --- a/examples/extended/biasing/GB06/include/GB06BOptrSplitAndKillByImportance.hh +++ b/examples/extended/biasing/GB06/include/GB06BOptrSplitAndKillByImportance.hh @@ -63,33 +63,33 @@ class GB06BOptrSplitAndKillByImportance : public G4VBiasingOperator // ------------------------------------------------------------ GB06BOptrSplitAndKillByImportance(G4String particleToBias, G4String name = "SplitAndKillByImportance"); - virtual ~GB06BOptrSplitAndKillByImportance(); + ~GB06BOptrSplitAndKillByImportance() override; // -- method called at beginning of run: - virtual void StartRun(); + void StartRun() override; private: // ----------------------------- // -- Mandatory from base class: // ----------------------------- // -- Not used: - virtual G4VBiasingOperation* - ProposeOccurenceBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { - return 0; + return nullptr; } // -- Not used: - virtual G4VBiasingOperation* - ProposeFinalStateBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { - return 0; + return nullptr; } // -- Used method : it will return the biasing operation that will split particles // -- with a probabilty depending on the total absorption cross-section. - virtual G4VBiasingOperation* - ProposeNonPhysicsBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final; + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final; // --------------------------------------- // -- Method specific to this application: diff --git a/examples/extended/biasing/GB06/include/GB06DetectorConstruction.hh b/examples/extended/biasing/GB06/include/GB06DetectorConstruction.hh index 629ed2b4d2..066eedade5 100644 --- a/examples/extended/biasing/GB06/include/GB06DetectorConstruction.hh +++ b/examples/extended/biasing/GB06/include/GB06DetectorConstruction.hh @@ -38,10 +38,10 @@ class GB06DetectorConstruction : public G4VUserDetectorConstruction { public: GB06DetectorConstruction(); - ~GB06DetectorConstruction(); + ~GB06DetectorConstruction() override; - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; private: G4LogicalVolume* logicMeasurement = nullptr; diff --git a/examples/extended/biasing/GB06/include/GB06ParallelWorldForSlices.hh b/examples/extended/biasing/GB06/include/GB06ParallelWorldForSlices.hh index 46323e98a6..70d2a31e2b 100644 --- a/examples/extended/biasing/GB06/include/GB06ParallelWorldForSlices.hh +++ b/examples/extended/biasing/GB06/include/GB06ParallelWorldForSlices.hh @@ -39,17 +39,16 @@ class G4PVReplica; class GB06ParallelWorldForSlices : public G4VUserParallelWorld { public: - GB06ParallelWorldForSlices(G4String worldName,G4bool bf); - ~GB06ParallelWorldForSlices(); + GB06ParallelWorldForSlices(G4String worldName, G4bool bf); + ~GB06ParallelWorldForSlices() override; private: - virtual void Construct(); - virtual void ConstructSD(); + void Construct() override; + void ConstructSD() override; G4LogicalVolume* sliceLogical = nullptr; G4PVReplica* slicePhysical = nullptr; G4bool fBiasingFlag; - }; #endif diff --git a/examples/extended/biasing/GB06/include/GB06PrimaryGeneratorAction.hh b/examples/extended/biasing/GB06/include/GB06PrimaryGeneratorAction.hh index 0a3c95ccac..7bddbabac0 100644 --- a/examples/extended/biasing/GB06/include/GB06PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB06/include/GB06PrimaryGeneratorAction.hh @@ -40,9 +40,9 @@ class GB06PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB06PrimaryGeneratorAction(); - virtual ~GB06PrimaryGeneratorAction(); + ~GB06PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; diff --git a/examples/extended/biasing/GB06/include/GB06SD.hh b/examples/extended/biasing/GB06/include/GB06SD.hh index 1d85e7b09a..249f99201b 100644 --- a/examples/extended/biasing/GB06/include/GB06SD.hh +++ b/examples/extended/biasing/GB06/include/GB06SD.hh @@ -37,10 +37,10 @@ class GB06SD : public G4VSensitiveDetector { public: GB06SD(G4String name); - virtual ~GB06SD() {} + ~GB06SD() override = default; - virtual void Initialize(G4HCofThisEvent*) {} - virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist); + void Initialize(G4HCofThisEvent*) override {} + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/biasing/GB06/src/GB06BOptnSplitAndKillByImportance.cc b/examples/extended/biasing/GB06/src/GB06BOptnSplitAndKillByImportance.cc index f6a9f716b0..92a30e8f82 100644 --- a/examples/extended/biasing/GB06/src/GB06BOptnSplitAndKillByImportance.cc +++ b/examples/extended/biasing/GB06/src/GB06BOptnSplitAndKillByImportance.cc @@ -47,7 +47,7 @@ GB06BOptnSplitAndKillByImportance::GB06BOptnSplitAndKillByImportance(G4String na //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB06BOptnSplitAndKillByImportance::~GB06BOptnSplitAndKillByImportance() {} +GB06BOptnSplitAndKillByImportance::~GB06BOptnSplitAndKillByImportance() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -148,7 +148,7 @@ GB06BOptnSplitAndKillByImportance::GenerateBiasingFinalState(const G4Track* trac // Now we clone this track (this is the actual splitting): // we will then have the primary and clone of it, hence the // splitting by a factor 2: - G4Track* clone = new G4Track(*track); + auto clone = new G4Track(*track); clone->SetWeight(weightOfTrack); fParticleChange.AddSecondary(clone); // -- Below's call added for safety & illustration : inform particle change to not diff --git a/examples/extended/biasing/GB06/src/GB06BOptrSplitAndKillByImportance.cc b/examples/extended/biasing/GB06/src/GB06BOptrSplitAndKillByImportance.cc index 70a9783344..2f89c9c603 100644 --- a/examples/extended/biasing/GB06/src/GB06BOptrSplitAndKillByImportance.cc +++ b/examples/extended/biasing/GB06/src/GB06BOptrSplitAndKillByImportance.cc @@ -50,7 +50,7 @@ GB06BOptrSplitAndKillByImportance::GB06BOptrSplitAndKillByImportance(G4String pa { fParticleToBias = G4ParticleTable::GetParticleTable()->FindParticle(particleName); - if (fParticleToBias == 0) { + if (fParticleToBias == nullptr) { G4ExceptionDescription ed; ed << "Particle `" << particleName << "' not found !" << G4endl; G4Exception("GB06BOptrSplitAndKillByImportance(...)", "exGB06.01", JustWarning, ed); @@ -95,7 +95,7 @@ G4VBiasingOperation* GB06BOptrSplitAndKillByImportance::ProposeNonPhysicsBiasing const G4Track* track, const G4BiasingProcessInterface* /*callingProcess*/) { // -- Check if current particle type is the one to bias: - if (track->GetDefinition() != fParticleToBias) return 0; + if (track->GetDefinition() != fParticleToBias) return nullptr; // -- if so, request biasing: return fSplitAndKillByImportance; diff --git a/examples/extended/biasing/GB06/src/GB06DetectorConstruction.cc b/examples/extended/biasing/GB06/src/GB06DetectorConstruction.cc index 04ba562104..0379c0b7d9 100644 --- a/examples/extended/biasing/GB06/src/GB06DetectorConstruction.cc +++ b/examples/extended/biasing/GB06/src/GB06DetectorConstruction.cc @@ -44,7 +44,7 @@ GB06DetectorConstruction::GB06DetectorConstruction() : G4VUserDetectorConstructi //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB06DetectorConstruction::~GB06DetectorConstruction() {} +GB06DetectorConstruction::~GB06DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -55,17 +55,17 @@ G4VPhysicalVolume* GB06DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World.solid", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World.logical"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World.logical"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(nullptr, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World.physical", // its name - nullptr, // its mother volume - false, // no bool. operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World.physical", // its name + nullptr, // its mother volume + false, // no bool. operation + 0); // copy number // ---------------------------------------------------- // -- volume of shield, made of concrete, in one block: @@ -74,9 +74,9 @@ G4VPhysicalVolume* GB06DetectorConstruction::Construct() G4double halfZ = 2.5 * m; G4VSolid* solidShield = new G4Box("shield.solid", halfXY, halfXY, halfZ); - G4LogicalVolume* logicTest = new G4LogicalVolume(solidShield, // its solid - concreteMaterial, // its material - "shield.logical"); // its name + auto logicTest = new G4LogicalVolume(solidShield, // its solid + concreteMaterial, // its material + "shield.logical"); // its name new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // volume entrance is set at (0,0,0) diff --git a/examples/extended/biasing/GB06/src/GB06ParallelWorldForSlices.cc b/examples/extended/biasing/GB06/src/GB06ParallelWorldForSlices.cc index e53d09489c..8a477d9771 100644 --- a/examples/extended/biasing/GB06/src/GB06ParallelWorldForSlices.cc +++ b/examples/extended/biasing/GB06/src/GB06ParallelWorldForSlices.cc @@ -42,10 +42,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB06ParallelWorldForSlices::GB06ParallelWorldForSlices(G4String worldName, - G4bool bf) : - G4VUserParallelWorld(worldName), - fBiasingFlag(bf) {} +GB06ParallelWorldForSlices::GB06ParallelWorldForSlices(G4String worldName, G4bool bf) + : G4VUserParallelWorld(worldName), fBiasingFlag(bf) +{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -95,10 +94,9 @@ void GB06ParallelWorldForSlices::Construct() auto shieldSolid = (G4Box*)shieldLogical->GetSolid(); // -- we now re-create a logical volume for the mother volume of the slices: - G4LogicalVolume* motherForSlicesLogical = - new G4LogicalVolume(shieldSolid, // its solid - nullptr, // no material - "motherForSlices.logical"); // its name + auto motherForSlicesLogical = new G4LogicalVolume(shieldSolid, // its solid + nullptr, // no material + "motherForSlices.logical"); // its name // -- 2) new logical volume of same shape than the shield and place inside the slices: // ----------------------------------------------------------------------------- @@ -107,8 +105,8 @@ void GB06ParallelWorldForSlices::Construct() const G4int nSlices(20); // -- the solid for slices: G4double halfSliceZ = shieldSolid->GetZHalfLength() / nSlices; - G4Box* sliceSolid = new G4Box("slice.solid", shieldSolid->GetXHalfLength(), - shieldSolid->GetYHalfLength(), halfSliceZ); + auto sliceSolid = new G4Box("slice.solid", shieldSolid->GetXHalfLength(), + shieldSolid->GetYHalfLength(), halfSliceZ); // -- the logical volume for slices: sliceLogical = new G4LogicalVolume(sliceSolid, // its solid @@ -151,7 +149,7 @@ void GB06ParallelWorldForSlices::Construct() void GB06ParallelWorldForSlices::ConstructSD() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Create the biasing operator: auto biasingOperator = new GB06BOptrSplitAndKillByImportance("neutron", "parallelOptr"); // -- Tell it it is active for this parallel geometry, passing the world diff --git a/examples/extended/biasing/GB07/History b/examples/extended/biasing/GB07/History index af30c1c06b..058fab5766 100644 --- a/examples/extended/biasing/GB07/History +++ b/examples/extended/biasing/GB07/History @@ -6,7 +6,11 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-10 Igor Semeniouk (GB07-V11-02-00) +## 2025-03-14 Igor Semeniouk (GB07-V11-03-01) +- The explicit call of base class constructor +in GB07DetectorConstruction removed + +## 2025-03-10 Igor Semeniouk (GB07-V11-03-00) - Use tag format GB07-Vxx-yy-zz for consistency with other examples - Remove unused WITH_GEANT4_UIVIS cmake option - Propagate biasing on/off to detector construction to initialization of biasing classes only if biasing requested. diff --git a/examples/extended/biasing/GB07/exampleGB07.cc b/examples/extended/biasing/GB07/exampleGB07.cc index 4c8f6d3dc1..f38223be5b 100644 --- a/examples/extended/biasing/GB07/exampleGB07.cc +++ b/examples/extended/biasing/GB07/exampleGB07.cc @@ -93,16 +93,16 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); runManager->SetNumberOfThreads(4); - G4bool biasingFlag = ( onOffBiasing == "on"); + G4bool biasingFlag = (onOffBiasing == "on"); // -- Set mandatory initialization classes - GB07DetectorConstruction* detector = new GB07DetectorConstruction(biasingFlag); + auto detector = new GB07DetectorConstruction(biasingFlag); runManager->SetUserInitialization(detector); // -- Select a physics list - FTFP_BERT* physicsList = new FTFP_BERT; + auto physicsList = new FTFP_BERT; if (biasingFlag) { // -- And augment it with biasing facilities: - G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics(); + auto biasingPhysics = new G4GenericBiasingPhysics(); // -- Specify the processes that will be under biasing: // ---- Decide to apply the technique to hadronic inelastic interactions: std::vector piPlusProcessesToBias, piMinusProcessesToBias, protonProcessesToBias, @@ -154,12 +154,12 @@ int main(int argc, char** argv) runManager->Initialize(); // Initialize visualization - G4VisManager* visManager = new G4VisExecutive; + auto visManager = new G4VisExecutive; // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. visManager->Initialize(); // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); if (macro != "") // batch mode { diff --git a/examples/extended/biasing/GB07/exampleGB07.out b/examples/extended/biasing/GB07/exampleGB07.out index 006a2b5498..2a7001729e 100644 --- a/examples/extended/biasing/GB07/exampleGB07.out +++ b/examples/extended/biasing/GB07/exampleGB07.out @@ -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 @@ -42,23 +42,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", @@ -129,7 +130,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 ======== @@ -782,6 +783,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 @@ -798,6 +800,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 @@ -811,334 +814,452 @@ Store e- internal conversion data 1 Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= - gamma, kinetic energy (MeV) = 0.694069, position (cm) = (34.4008,-21.5861,200), weight = 1 - gamma, kinetic energy (MeV) = 9.48074, position (cm) = (25.3969,4.64563,200), weight = 4 - gamma, kinetic energy (MeV) = 0.0788658, position (cm) = (20.6858,19.0519,200), weight = 4 - gamma, kinetic energy (MeV) = 0.436171, position (cm) = (21.5921,13.8446,200), weight = 4 - gamma, kinetic energy (MeV) = 0.258067, position (cm) = (18.8964,15.4004,200), weight = 4 - gamma, kinetic energy (MeV) = 16.108, position (cm) = (82.2927,-19.6689,200), weight = 9 - gamma, kinetic energy (MeV) = 0.519969, position (cm) = (14.1058,-2.44328,200), weight = 9 - pi-, kinetic energy (MeV) = 304.172, position (cm) = (-31.5302,-5.46054,200), weight = 3 - anti_nu_mu, kinetic energy (MeV) = 50.5966, position (cm) = (76.0785,68.8926,200), weight = 1 - neutron, kinetic energy (MeV) = 0.749751, position (cm) = (15.9306,22.028,200), weight = 2 - neutron, kinetic energy (MeV) = 619.069, position (cm) = (-25.082,24.023,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 44.0221, position (cm) = (-20.6216,-36.9787,200), weight = 1 - gamma, kinetic energy (MeV) = 1.8076, position (cm) = (-2.0616,-54.4433,200), weight = 1 - gamma, kinetic energy (MeV) = 2.15337, position (cm) = (32.7785,-46.0574,200), weight = 1 - nu_e, kinetic energy (MeV) = 42.4703, position (cm) = (25.014,24.5609,200), weight = 4 - neutron, kinetic energy (MeV) = 77.7029, position (cm) = (-94.6356,-55.1377,200), weight = 2 - proton, kinetic energy (MeV) = 2883.3, position (cm) = (4.39271,6.90448,200), weight = 1 - gamma, kinetic energy (MeV) = 4.68897, position (cm) = (-0.443994,-6.22525,200), weight = 2 - neutron, kinetic energy (MeV) = 40.9823, position (cm) = (-11.5714,11.5014,200), weight = 2 - gamma, kinetic energy (MeV) = 5.2947, position (cm) = (-51.9946,-32.0045,200), weight = 1 - proton, kinetic energy (MeV) = 1307.2, position (cm) = (-11.3834,-7.49994,200), weight = 1 - proton, kinetic energy (MeV) = 5484.6, position (cm) = (0.0546726,-4.61794,200), weight = 1 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (45.5163,51.1067,200), weight = 4 - gamma, kinetic energy (MeV) = 0.083145, position (cm) = (-32.8456,6.92618,200), weight = 1 - e-, kinetic energy (MeV) = 41.0605, position (cm) = (-36.361,18.9656,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0788295, position (cm) = (-35.9681,18.7917,200), weight = 1 - gamma, kinetic energy (MeV) = 2.27492, position (cm) = (-36.4079,18.9166,200), weight = 1 - gamma, kinetic energy (MeV) = 8.64532, position (cm) = (-36.5155,18.8298,200), weight = 1 - gamma, kinetic energy (MeV) = 0.514099, position (cm) = (-36.7638,18.733,200), weight = 1 - gamma, kinetic energy (MeV) = 0.715793, position (cm) = (-36.8594,18.6645,200), weight = 1 - gamma, kinetic energy (MeV) = 3.00401, position (cm) = (-36.7398,18.7283,200), weight = 1 - gamma, kinetic energy (MeV) = 40.5776, position (cm) = (-36.6909,18.8571,200), weight = 1 - gamma, kinetic energy (MeV) = 6.60039, position (cm) = (-36.4399,18.7464,200), weight = 1 - gamma, kinetic energy (MeV) = 67.9861, position (cm) = (-36.2445,18.9576,200), weight = 1 - gamma, kinetic energy (MeV) = 1.10165, position (cm) = (-36.2464,18.8817,200), weight = 1 - gamma, kinetic energy (MeV) = 2.22834, position (cm) = (-36.1923,18.7003,200), weight = 1 - gamma, kinetic energy (MeV) = 0.405908, position (cm) = (-35.6717,23.6772,200), weight = 1 - gamma, kinetic energy (MeV) = 23.8499, position (cm) = (-36.6863,18.3933,200), weight = 1 - gamma, kinetic energy (MeV) = 4.49083, position (cm) = (-36.6255,18.6123,200), weight = 1 - gamma, kinetic energy (MeV) = 4.2906, position (cm) = (-36.4217,18.9969,200), weight = 1 - gamma, kinetic energy (MeV) = 0.150069, position (cm) = (-26.7494,19.4853,200), weight = 1 - gamma, kinetic energy (MeV) = 0.12603, position (cm) = (43.5693,8.7172,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0466708, position (cm) = (34.0161,-19.0798,200), weight = 1 - gamma, kinetic energy (MeV) = 0.772994, position (cm) = (30.2169,-2.01998,200), weight = 3 - gamma, kinetic energy (MeV) = 5.53413, position (cm) = (45.8769,-30.9477,200), weight = 1 - gamma, kinetic energy (MeV) = 0.382177, position (cm) = (70.8816,-28.9376,200), weight = 1 - e-, kinetic energy (MeV) = 5.45269, position (cm) = (56.9319,-36.6937,200), weight = 1 - gamma, kinetic energy (MeV) = 2.21246, position (cm) = (45.1131,-30.4869,200), weight = 1 - gamma, kinetic energy (MeV) = 3.15683, position (cm) = (38.8301,-28.4973,200), weight = 1 - gamma, kinetic energy (MeV) = 0.29815, position (cm) = (53.8412,-30.0036,200), weight = 1 - gamma, kinetic energy (MeV) = 0.185339, position (cm) = (36.7895,-32.1976,200), weight = 1 - e+, kinetic energy (MeV) = 19.3786, position (cm) = (43.2575,-26.5335,200), weight = 1 - gamma, kinetic energy (MeV) = 1.62374, position (cm) = (43.15,-26.414,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0510156, position (cm) = (43.9597,-27.0101,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0907158, position (cm) = (43.1117,-26.8057,200), weight = 1 - gamma, kinetic energy (MeV) = 0.541706, position (cm) = (42.3428,-26.2075,200), weight = 1 - gamma, kinetic energy (MeV) = 7.93901, position (cm) = (42.4012,-26.2085,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0856565, position (cm) = (38.0076,-24.4331,200), weight = 1 - e-, kinetic energy (MeV) = 22.303, position (cm) = (42.5563,-24.9006,200), weight = 1 - e-, kinetic energy (MeV) = 0.225107, position (cm) = (42.5214,-24.892,200), weight = 1 - gamma, kinetic energy (MeV) = 1.64312, position (cm) = (42.4533,-25.0623,200), weight = 1 - gamma, kinetic energy (MeV) = 10.5327, position (cm) = (42.6767,-25.6452,200), weight = 1 - gamma, kinetic energy (MeV) = 15.6113, position (cm) = (42.76,-25.8744,200), weight = 1 - gamma, kinetic energy (MeV) = 2.04866, position (cm) = (20.4125,-28.9225,200), weight = 1 - gamma, kinetic energy (MeV) = 8.13432, position (cm) = (75.2476,-18.5611,200), weight = 1 - gamma, kinetic energy (MeV) = 0.710017, position (cm) = (94.5009,-25.5329,200), weight = 1 - gamma, kinetic energy (MeV) = 0.376074, position (cm) = (28.2789,47.1879,200), weight = 2 - gamma, kinetic energy (MeV) = 3.5077, position (cm) = (25.7693,8.60278,200), weight = 2 - gamma, kinetic energy (MeV) = 0.352988, position (cm) = (44.6456,26.821,200), weight = 2 - neutron, kinetic energy (MeV) = 76.1667, position (cm) = (71.8451,-51.0508,200), weight = 2 - neutron, kinetic energy (MeV) = 78.1542, position (cm) = (24.0305,-45.0763,200), weight = 2 - gamma, kinetic energy (MeV) = 1.02866, position (cm) = (-5.22881,-30.6642,200), weight = 1 - pi+, kinetic energy (MeV) = 39.7119, position (cm) = (-10.9483,-35.6717,200), weight = 2 - proton, kinetic energy (MeV) = 95.6982, position (cm) = (-22.2669,-33.0361,200), weight = 3 - proton, kinetic energy (MeV) = 413.03, position (cm) = (-13.9224,-34.5222,200), weight = 1 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (11.9714,22.3158,200), weight = 4 - proton, kinetic energy (MeV) = 4657.12, position (cm) = (8.16266,-1.82101,200), weight = 1 - pi-, kinetic energy (MeV) = 372.732, position (cm) = (3.65801,2.39058,200), weight = 1 - gamma, kinetic energy (MeV) = 3.50117, position (cm) = (-12.2858,21.1432,200), weight = 3 - gamma, kinetic energy (MeV) = 0.550162, position (cm) = (-22.1069,19.5,200), weight = 3 - gamma, kinetic energy (MeV) = 0.259837, position (cm) = (-9.09973,-39.8882,200), weight = 1 - gamma, kinetic energy (MeV) = 0.433109, position (cm) = (-10.5524,-26.1948,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 38.8449, position (cm) = (-49.5519,-62.2614,200), weight = 1 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-25.8621,-59.4608,200), weight = 1 - nu_e, kinetic energy (MeV) = 10.1752, position (cm) = (-12.2,-64.9465,200), weight = 1 - neutron, kinetic energy (MeV) = 339.401, position (cm) = (-14.6502,-0.0306077,200), weight = 1 - neutron, kinetic energy (MeV) = 127.91, position (cm) = (-4.12645,32.829,200), weight = 1 - neutron, kinetic energy (MeV) = 760.237, position (cm) = (36.6901,-70.4871,200), weight = 1 - proton, kinetic energy (MeV) = 4304.23, position (cm) = (-5.71901,-0.291693,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 35.9681, position (cm) = (82.2853,7.54156,200), weight = 5 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-61.5565,92.5278,200), weight = 2 - gamma, kinetic energy (MeV) = 28.0679, position (cm) = (-38.7571,-8.40989,200), weight = 2 - neutron, kinetic energy (MeV) = 17.3613, position (cm) = (41.9778,45.8379,200), weight = 6 - gamma, kinetic energy (MeV) = 0.45574, position (cm) = (82.1563,-70.6566,200), weight = 24 - nu_e, kinetic energy (MeV) = 45.6966, position (cm) = (23.3,15.2269,200), weight = 2 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-21.8065,-4.17229,200), weight = 2 - neutron, kinetic energy (MeV) = 530.584, position (cm) = (11.1644,1.88426,200), weight = 1 - pi+, kinetic energy (MeV) = 576.309, position (cm) = (11.3015,-5.41061,200), weight = 2 - gamma, kinetic energy (MeV) = 0.152004, position (cm) = (10.9464,-6.6661,200), weight = 2 - gamma, kinetic energy (MeV) = 0.0489759, position (cm) = (2.95018,18.4391,200), weight = 3 - neutron, kinetic energy (MeV) = 2.73421, position (cm) = (13.5602,-0.764941,200), weight = 2 - anti_nu_mu, kinetic energy (MeV) = 47.1884, position (cm) = (-10.6514,6.54938,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 52.282, position (cm) = (3.85688,-40.2701,200), weight = 1 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-43.2348,-21.2569,200), weight = 1 - neutron, kinetic energy (MeV) = 449.367, position (cm) = (7.89804,-4.29368,200), weight = 1 - neutron, kinetic energy (MeV) = 10.6419, position (cm) = (10.1455,-13.0074,200), weight = 4 - neutron, kinetic energy (MeV) = 41.4116, position (cm) = (14.2221,-3.77059,200), weight = 2 - gamma, kinetic energy (MeV) = 0.101402, position (cm) = (12.2032,-6.49479,200), weight = 2 - proton, kinetic energy (MeV) = 47.8584, position (cm) = (12.0161,-7.09681,200), weight = 2 - proton, kinetic energy (MeV) = 82.6893, position (cm) = (12.1831,-6.91943,200), weight = 1 - pi+, kinetic energy (MeV) = 169.226, position (cm) = (-4.11165,-27.7729,200), weight = 10 - gamma, kinetic energy (MeV) = 2.14629, position (cm) = (6.27334,-20.6599,200), weight = 10 - pi-, kinetic energy (MeV) = 214.825, position (cm) = (14.4448,-16.7784,200), weight = 5 - nu_e, kinetic energy (MeV) = 42.4114, position (cm) = (32.4751,62.7234,200), weight = 2 - gamma, kinetic energy (MeV) = 0.120059, position (cm) = (44.5691,-57.2035,200), weight = 18 - neutron, kinetic energy (MeV) = 142.244, position (cm) = (44.7386,-66.573,200), weight = 6 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (15.4922,-15.7329,200), weight = 5 - gamma, kinetic energy (MeV) = 0.709127, position (cm) = (9.48101,-41.9786,200), weight = 2 - gamma, kinetic energy (MeV) = 10.5678, position (cm) = (6.12588,-25.1315,200), weight = 2 - gamma, kinetic energy (MeV) = 3.1868, position (cm) = (-5.27261,-15.3389,200), weight = 2 - e+, kinetic energy (MeV) = 60.1829, position (cm) = (-3.79644,9.00697,200), weight = 3 - gamma, kinetic energy (MeV) = 0.402662, position (cm) = (-3.79862,8.9865,200), weight = 3 - gamma, kinetic energy (MeV) = 103.558, position (cm) = (-3.72057,8.89786,200), weight = 3 - gamma, kinetic energy (MeV) = 0.0567476, position (cm) = (-3.74074,8.95028,200), weight = 3 - gamma, kinetic energy (MeV) = 2.49912, position (cm) = (-3.73134,8.95149,200), weight = 3 - gamma, kinetic energy (MeV) = 0.474127, position (cm) = (1.68606,10.841,200), weight = 3 - gamma, kinetic energy (MeV) = 8.89991, position (cm) = (-3.60617,8.88675,200), weight = 3 - gamma, kinetic energy (MeV) = 30.7225, position (cm) = (-3.69598,8.9215,200), weight = 3 - gamma, kinetic energy (MeV) = 0.0853741, position (cm) = (-7.32066,7.41772,200), weight = 3 - gamma, kinetic energy (MeV) = 0.0948006, position (cm) = (-3.5567,6.83866,200), weight = 3 - e+, kinetic energy (MeV) = 27.2132, position (cm) = (-2.71391,9.50542,200), weight = 3 - gamma, kinetic energy (MeV) = 0.196614, position (cm) = (3.25112,19.5849,200), weight = 3 - gamma, kinetic energy (MeV) = 15.1607, position (cm) = (-2.43906,9.1778,200), weight = 3 - gamma, kinetic energy (MeV) = 6.92262, position (cm) = (-15.3567,3.72709,200), weight = 2 - gamma, kinetic energy (MeV) = 83.2131, position (cm) = (-23.0947,3.70657,200), weight = 2 - neutron, kinetic energy (MeV) = 65.1946, position (cm) = (4.03277,13.3783,200), weight = 2 - neutron, kinetic energy (MeV) = 72.5074, position (cm) = (56.6858,-38.5169,200), weight = 2 - neutron, kinetic energy (MeV) = 135.71, position (cm) = (94.1091,-82.7043,200), weight = 2 - pi+, kinetic energy (MeV) = 733.948, position (cm) = (18.2404,22.8867,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0680743, position (cm) = (22.8867,-3.69671,200), weight = 3 - pi+, kinetic energy (MeV) = 372.216, position (cm) = (-2.73563,23.0613,200), weight = 1 - neutron, kinetic energy (MeV) = 132.157, position (cm) = (31.8164,-10.1265,200), weight = 3 - neutron, kinetic energy (MeV) = 155.95, position (cm) = (34.1056,-2.88425,200), weight = 1 - nu_e, kinetic energy (MeV) = 37.3686, position (cm) = (-70.7808,1.44273,200), weight = 1 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-77.7475,-81.2831,200), weight = 1 - neutron, kinetic energy (MeV) = 53.6103, position (cm) = (32.7019,-0.030935,200), weight = 5 - gamma, kinetic energy (MeV) = 0.254262, position (cm) = (30.9252,3.19453,200), weight = 10 - gamma, kinetic energy (MeV) = 1.92706, position (cm) = (21.7915,-4.15401,200), weight = 5 - gamma, kinetic energy (MeV) = 0.511962, position (cm) = (6.0975,6.46716,200), weight = 1 - gamma, kinetic energy (MeV) = 1.29043, position (cm) = (-7.54677,6.34099,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (11.7745,5.1202,200), weight = 1 - gamma, kinetic energy (MeV) = 0.499067, position (cm) = (11.0063,-0.263768,200), weight = 1 - gamma, kinetic energy (MeV) = 3.29684, position (cm) = (9.46484,3.26903,200), weight = 1 - gamma, kinetic energy (MeV) = 20.9876, position (cm) = (11.8276,-10.5079,200), weight = 1 - gamma, kinetic energy (MeV) = 4.13174, position (cm) = (7.66133,-2.76504,200), weight = 1 - e-, kinetic energy (MeV) = 43.4387, position (cm) = (0.0344856,-2.58231,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0904818, position (cm) = (0.0298677,-2.56789,200), weight = 1 - gamma, kinetic energy (MeV) = 2.24137, position (cm) = (-0.0101242,-2.57849,200), weight = 1 - gamma, kinetic energy (MeV) = 0.179677, position (cm) = (-0.148192,-2.40358,200), weight = 1 - gamma, kinetic energy (MeV) = 0.4252, position (cm) = (0.34824,-2.34836,200), weight = 1 - gamma, kinetic energy (MeV) = 0.30149, position (cm) = (-0.0865095,-2.50841,200), weight = 1 - gamma, kinetic energy (MeV) = 3.91896, position (cm) = (-0.432898,-2.68383,200), weight = 1 - gamma, kinetic energy (MeV) = 5.91678, position (cm) = (-0.28124,-2.40428,200), weight = 1 - gamma, kinetic energy (MeV) = 1.30837, position (cm) = (-2.12248,-0.230458,200), weight = 1 - e-, kinetic energy (MeV) = 17.986, position (cm) = (-0.572862,-0.70965,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0877672, position (cm) = (-0.535896,-0.574004,200), weight = 1 - gamma, kinetic energy (MeV) = 7.26125, position (cm) = (-0.570306,-0.343184,200), weight = 1 - gamma, kinetic energy (MeV) = 108.092, position (cm) = (-0.615535,-0.458619,200), weight = 1 - gamma, kinetic energy (MeV) = 0.152732, position (cm) = (2.97737,-6.82442,200), weight = 1 - gamma, kinetic energy (MeV) = 0.834126, position (cm) = (10.4484,-4.55842,200), weight = 1 - gamma, kinetic energy (MeV) = 24.8589, position (cm) = (-18.9749,-3.94368,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-17.28,-5.41257,200), weight = 1 - gamma, kinetic energy (MeV) = 0.230361, position (cm) = (-17,-6.91672,200), weight = 1 - gamma, kinetic energy (MeV) = 0.877947, position (cm) = (19.2834,12.4355,200), weight = 1 - gamma, kinetic energy (MeV) = 1.02363, position (cm) = (-7.63574,-2.65468,200), weight = 1 - gamma, kinetic energy (MeV) = 7.09082, position (cm) = (-40.8001,-6.30311,200), weight = 1 - gamma, kinetic energy (MeV) = 0.348032, position (cm) = (-1.73092,2.39655,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0676828, position (cm) = (4.03439,0.74617,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0700364, position (cm) = (4.90876,-14.8212,200), weight = 1 - gamma, kinetic energy (MeV) = 5.01455, position (cm) = (-9.68141,17.7394,200), weight = 1 - gamma, kinetic energy (MeV) = 0.622735, position (cm) = (12.8593,0.800951,200), weight = 1 - gamma, kinetic energy (MeV) = 9.81961, position (cm) = (-29.2498,17.3667,200), weight = 1 - gamma, kinetic energy (MeV) = 25.4611, position (cm) = (3.75716,4.4254,200), weight = 1 - gamma, kinetic energy (MeV) = 0.200058, position (cm) = (-8.16153,47.5553,200), weight = 1 - gamma, kinetic energy (MeV) = 0.146646, position (cm) = (-0.0975487,-7.3734,200), weight = 1 - gamma, kinetic energy (MeV) = 0.349786, position (cm) = (9.72537,-18.5115,200), weight = 1 - gamma, kinetic energy (MeV) = 0.933205, position (cm) = (-14.7805,-17.1766,200), weight = 1 - gamma, kinetic energy (MeV) = 1.74359, position (cm) = (-17.6875,2.51013,200), weight = 1 - gamma, kinetic energy (MeV) = 0.090318, position (cm) = (-0.745964,7.97082,200), weight = 1 - gamma, kinetic energy (MeV) = 0.127048, position (cm) = (-6.96349,-6.9567,200), weight = 1 - gamma, kinetic energy (MeV) = 0.600971, position (cm) = (-7.69388,10.3735,200), weight = 1 - gamma, kinetic energy (MeV) = 0.191508, position (cm) = (-14.6907,8.61172,200), weight = 1 - gamma, kinetic energy (MeV) = 15.2553, position (cm) = (-1.02129,1.16194,200), weight = 1 - gamma, kinetic energy (MeV) = 16.7436, position (cm) = (-2.48816,-7.85689,200), weight = 1 - gamma, kinetic energy (MeV) = 10.2275, position (cm) = (1.59295,29.2936,200), weight = 1 - gamma, kinetic energy (MeV) = 1.68385, position (cm) = (0.902251,5.08464,200), weight = 1 - gamma, kinetic energy (MeV) = 0.739632, position (cm) = (-1.5647,1.1046,200), weight = 1 - gamma, kinetic energy (MeV) = 30.2196, position (cm) = (-13.313,11.0983,200), weight = 1 - gamma, kinetic energy (MeV) = 0.225604, position (cm) = (-3.36186,-27.9414,200), weight = 1 - gamma, kinetic energy (MeV) = 0.585064, position (cm) = (13.1664,-26.9034,200), weight = 1 - gamma, kinetic energy (MeV) = 8.14885, position (cm) = (27.8874,-8.10383,200), weight = 1 - gamma, kinetic energy (MeV) = 2.24634, position (cm) = (6.04563,-21.7506,200), weight = 1 - gamma, kinetic energy (MeV) = 1.45896, position (cm) = (-15.9499,-9.16261,200), weight = 1 - gamma, kinetic energy (MeV) = 0.184993, position (cm) = (33.3764,3.82331,200), weight = 1 - gamma, kinetic energy (MeV) = 2.24836, position (cm) = (0.106692,-2.09841,200), weight = 1 - gamma, kinetic energy (MeV) = 0.396683, position (cm) = (-1.15031,8.3475,200), weight = 1 - gamma, kinetic energy (MeV) = 5.68717, position (cm) = (0.837373,0.678606,200), weight = 1 - gamma, kinetic energy (MeV) = 0.434117, position (cm) = (-5.29599,-10.6462,200), weight = 1 - gamma, kinetic energy (MeV) = 4.06063, position (cm) = (-8.93938,-7.59033,200), weight = 1 - gamma, kinetic energy (MeV) = 15.8443, position (cm) = (0.691995,1.0674,200), weight = 1 - gamma, kinetic energy (MeV) = 86.4698, position (cm) = (-7.56501,3.05786,200), weight = 1 - gamma, kinetic energy (MeV) = 0.42212, position (cm) = (3.98562,42.1025,200), weight = 1 - gamma, kinetic energy (MeV) = 2.89182, position (cm) = (-1.07815,5.66661,200), weight = 1 - gamma, kinetic energy (MeV) = 5.04292, position (cm) = (-4.00865,-2.2839,200), weight = 1 - gamma, kinetic energy (MeV) = 0.106106, position (cm) = (1.27893,-2.88386,200), weight = 1 - gamma, kinetic energy (MeV) = 5.67818, position (cm) = (-3.62348,1.75768,200), weight = 1 - gamma, kinetic energy (MeV) = 23.2148, position (cm) = (-2.54038,0.055168,200), weight = 1 - gamma, kinetic energy (MeV) = 5.44541, position (cm) = (-3.27027,0.0518832,200), weight = 3 - gamma, kinetic energy (MeV) = 1.0366, position (cm) = (-1.89364,-1.16926,200), weight = 1 - gamma, kinetic energy (MeV) = 0.138635, position (cm) = (-1.0386,-0.233466,200), weight = 1 - gamma, kinetic energy (MeV) = 0.214295, position (cm) = (-2.07547,-0.486069,200), weight = 1 - gamma, kinetic energy (MeV) = 2.57683, position (cm) = (-4.12263,2.26316,200), weight = 1 - gamma, kinetic energy (MeV) = 9.43997, position (cm) = (-3.15077,-0.659405,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0580582, position (cm) = (-0.0692049,-0.5456,200), weight = 1 - gamma, kinetic energy (MeV) = 0.570765, position (cm) = (-1.73444,-3.64619,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0954364, position (cm) = (0.944669,-2.54114,200), weight = 1 - gamma, kinetic energy (MeV) = 0.311522, position (cm) = (-2.72142,-1.98893,200), weight = 1 - gamma, kinetic energy (MeV) = 11.574, position (cm) = (2.69207,-5.28609,200), weight = 1 - gamma, kinetic energy (MeV) = 0.280641, position (cm) = (-22.7684,10.0885,200), weight = 1 - gamma, kinetic energy (MeV) = 29.2069, position (cm) = (-0.324857,1.4135,200), weight = 1 - gamma, kinetic energy (MeV) = 0.4702, position (cm) = (11.3574,12.212,200), weight = 1 - gamma, kinetic energy (MeV) = 17.3976, position (cm) = (-6.1609,18.851,200), weight = 1 - gamma, kinetic energy (MeV) = 0.181213, position (cm) = (-2.31233,23.7411,200), weight = 1 - gamma, kinetic energy (MeV) = 0.485857, position (cm) = (-4.87783,21.2332,200), weight = 1 - gamma, kinetic energy (MeV) = 10.7952, position (cm) = (-19.4948,2.45937,200), weight = 1 - gamma, kinetic energy (MeV) = 2.33194, position (cm) = (-17.7606,5.44481,200), weight = 1 - gamma, kinetic energy (MeV) = 10.0824, position (cm) = (33.2087,19.3623,200), weight = 1 - gamma, kinetic energy (MeV) = 28.3299, position (cm) = (-11.1491,-21.8201,200), weight = 1 - gamma, kinetic energy (MeV) = 0.323296, position (cm) = (-11.2195,-4.48374,200), weight = 1 - gamma, kinetic energy (MeV) = 0.7635, position (cm) = (-7.68315,-7.4313,200), weight = 1 - gamma, kinetic energy (MeV) = 0.108842, position (cm) = (0.661082,-0.236564,200), weight = 1 - gamma, kinetic energy (MeV) = 8.90813, position (cm) = (-1.46297,1.81667,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0938948, position (cm) = (-27.6147,-11.8325,200), weight = 1 - gamma, kinetic energy (MeV) = 17.6608, position (cm) = (-8.19993,6.82519,200), weight = 1 - gamma, kinetic energy (MeV) = 5.73758, position (cm) = (-19.8834,-1.07654,200), weight = 1 - gamma, kinetic energy (MeV) = 0.156545, position (cm) = (-14.9422,17.5873,200), weight = 1 - gamma, kinetic energy (MeV) = 4.01442, position (cm) = (8.20621,-29.1635,200), weight = 1 - gamma, kinetic energy (MeV) = 0.157491, position (cm) = (8.02436,7.60638,200), weight = 1 - e+, kinetic energy (MeV) = 6.48865, position (cm) = (27.8156,8.68029,200), weight = 1 - gamma, kinetic energy (MeV) = 34.8067, position (cm) = (-0.0640671,-3.2356,200), weight = 1 - gamma, kinetic energy (MeV) = 5.94713, position (cm) = (10.8618,-29.03,200), weight = 1 - gamma, kinetic energy (MeV) = 0.953182, position (cm) = (-8.09974,-8.73321,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0955021, position (cm) = (0.697743,-3.64948,200), weight = 1 - gamma, kinetic energy (MeV) = 0.445514, position (cm) = (11.1003,-2.68348,200), weight = 1 - gamma, kinetic energy (MeV) = 0.372289, position (cm) = (5.35002,-2.6925,200), weight = 1 - gamma, kinetic energy (MeV) = 0.233039, position (cm) = (-0.442679,-3.85139,200), weight = 1 - gamma, kinetic energy (MeV) = 8.76116, position (cm) = (25.1702,7.1073,200), weight = 1 - gamma, kinetic energy (MeV) = 6.45575, position (cm) = (1.11757,17.3211,200), weight = 1 - gamma, kinetic energy (MeV) = 2.94857, position (cm) = (2.69449,7.74928,200), weight = 1 - gamma, kinetic energy (MeV) = 0.269994, position (cm) = (5.14234,8.25424,200), weight = 1 - gamma, kinetic energy (MeV) = 2.4719, position (cm) = (-6.31637,3.40216,200), weight = 1 - gamma, kinetic energy (MeV) = 0.403765, position (cm) = (9.57253,7.84421,200), weight = 1 - gamma, kinetic energy (MeV) = 3.73792, position (cm) = (3.1626,-4.06012,200), weight = 1 - gamma, kinetic energy (MeV) = 0.141011, position (cm) = (18.0503,-21.2256,200), weight = 1 - gamma, kinetic energy (MeV) = 2.71268, position (cm) = (39.3296,-17.9754,200), weight = 1 - gamma, kinetic energy (MeV) = 0.236122, position (cm) = (-16.9098,8.93905,200), weight = 1 - gamma, kinetic energy (MeV) = 0.107521, position (cm) = (3.07752,-1.871,200), weight = 1 - gamma, kinetic energy (MeV) = 0.291746, position (cm) = (-10.2419,6.50153,200), weight = 1 - gamma, kinetic energy (MeV) = 0.619086, position (cm) = (-12.9746,6.27307,200), weight = 1 - gamma, kinetic energy (MeV) = 8.62753, position (cm) = (8.51414,-0.778452,200), weight = 1 - gamma, kinetic energy (MeV) = 14.1157, position (cm) = (-1.00078,4.53043,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-0.461375,6.14143,200), weight = 1 - gamma, kinetic energy (MeV) = 0.820566, position (cm) = (-6.33607,8.214,200), weight = 1 - gamma, kinetic energy (MeV) = 6.0861, position (cm) = (-1.80876,1.20806,200), weight = 1 - gamma, kinetic energy (MeV) = 2.0838, position (cm) = (3.56734,6.85166,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0548273, position (cm) = (0.382691,3.64026,200), weight = 1 - gamma, kinetic energy (MeV) = 0.393611, position (cm) = (4.57657,2.48452,200), weight = 1 - gamma, kinetic energy (MeV) = 28.3398, position (cm) = (1.86953,3.39242,200), weight = 1 - e-, kinetic energy (MeV) = 2.12659, position (cm) = (1.2281,4.01947,200), weight = 1 - gamma, kinetic energy (MeV) = 0.109158, position (cm) = (-0.497695,5.34764,200), weight = 1 - gamma, kinetic energy (MeV) = 14.9598, position (cm) = (44.3795,27.5681,200), weight = 1 - gamma, kinetic energy (MeV) = 16.4575, position (cm) = (6.78387,-3.51506,200), weight = 1 - gamma, kinetic energy (MeV) = 0.509788, position (cm) = (3.98124,-1.81921,200), weight = 1 - gamma, kinetic energy (MeV) = 9.10863, position (cm) = (1.48306,-2.10815,200), weight = 1 - gamma, kinetic energy (MeV) = 5.61037, position (cm) = (-0.0406825,-3.39588,200), weight = 1 - gamma, kinetic energy (MeV) = 10.1081, position (cm) = (1.80597,-0.243325,200), weight = 1 - gamma, kinetic energy (MeV) = 0.52965, position (cm) = (1.59805,-1.03646,200), weight = 1 - gamma, kinetic energy (MeV) = 10.7733, position (cm) = (2.24702,-2.50157,200), weight = 1 - gamma, kinetic energy (MeV) = 2.72289, position (cm) = (2.86638,-2.50147,200), weight = 1 - gamma, kinetic energy (MeV) = 7.05638, position (cm) = (2.2067,-1.11518,200), weight = 1 - e-, kinetic energy (MeV) = 1.00539, position (cm) = (2.20838,-1.10972,200), weight = 1 - gamma, kinetic energy (MeV) = 2.35985, position (cm) = (7.2286,3.79774,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (2.82722,2.61923,200), weight = 1 - gamma, kinetic energy (MeV) = 0.407648, position (cm) = (-9.37988,1.78874,200), weight = 1 - gamma, kinetic energy (MeV) = 2.03484, position (cm) = (2.60643,-0.0509488,200), weight = 1 - gamma, kinetic energy (MeV) = 45.8298, position (cm) = (0.0570515,0.200859,200), weight = 1 - e-, kinetic energy (MeV) = 27.4738, position (cm) = (-0.254261,0.336307,200), weight = 1 - gamma, kinetic energy (MeV) = 37.3492, position (cm) = (-0.247863,0.333143,200), weight = 1 - e-, kinetic energy (MeV) = 1.25966, position (cm) = (-0.352265,-0.0179216,200), weight = 1 - gamma, kinetic energy (MeV) = 4.07461, position (cm) = (-0.264911,0.0623473,200), weight = 1 - gamma, kinetic energy (MeV) = 15.9889, position (cm) = (-2.04732,-3.15852,200), weight = 1 - gamma, kinetic energy (MeV) = 18.6992, position (cm) = (-1.42885,-2.82266,200), weight = 1 - gamma, kinetic energy (MeV) = 0.596714, position (cm) = (-1.47959,0.0280556,200), weight = 1 - gamma, kinetic energy (MeV) = 1.05792, position (cm) = (-1.36713,-3.65365,200), weight = 1 - gamma, kinetic energy (MeV) = 0.436229, position (cm) = (-0.671768,0.396106,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-3.68513,-2.40028,200), weight = 1 - gamma, kinetic energy (MeV) = 0.178638, position (cm) = (0.124486,-0.970646,200), weight = 1 - gamma, kinetic energy (MeV) = 47.8642, position (cm) = (-0.21038,-0.743442,200), weight = 1 - gamma, kinetic energy (MeV) = 15.6404, position (cm) = (-0.11041,-0.783247,200), weight = 1 - gamma, kinetic energy (MeV) = 0.995629, position (cm) = (-18.352,-6.20353,200), weight = 1 - gamma, kinetic energy (MeV) = 1.07291, position (cm) = (0.421155,0.741603,200), weight = 1 - gamma, kinetic energy (MeV) = 0.643145, position (cm) = (-1.39106,-8.18028,200), weight = 1 - gamma, kinetic energy (MeV) = 5.08369, position (cm) = (0.617956,-0.28057,200), weight = 1 - gamma, kinetic energy (MeV) = 41.7478, position (cm) = (0.629264,-0.47101,200), weight = 1 - gamma, kinetic energy (MeV) = 3.16308, position (cm) = (4.95567,-3.09868,200), weight = 1 - gamma, kinetic energy (MeV) = 7.17633, position (cm) = (4.88009,4.85292,200), weight = 1 - gamma, kinetic energy (MeV) = 7.67581, position (cm) = (-4.65561,-18.2846,200), weight = 1 - e+, kinetic energy (MeV) = 9.9365, position (cm) = (-1.49786,-0.282515,200), weight = 1 - gamma, kinetic energy (MeV) = 12.648, position (cm) = (-1.95363,-0.644144,200), weight = 1 - gamma, kinetic energy (MeV) = 2.33525, position (cm) = (-1.23888,-1.06107,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0799317, position (cm) = (-0.421967,-2.01469,200), weight = 1 - gamma, kinetic energy (MeV) = 99.0771, position (cm) = (-1.15413,-0.894375,200), weight = 1 - gamma, kinetic energy (MeV) = 3.95046, position (cm) = (-9.16666,-10.0789,200), weight = 1 - gamma, kinetic energy (MeV) = 4.91875, position (cm) = (-12.8952,0.670168,200), weight = 1 - gamma, kinetic energy (MeV) = 14.8025, position (cm) = (-7.79409,-10.0721,200), weight = 1 - gamma, kinetic energy (MeV) = 2.16811, position (cm) = (10.6837,-6.84237,200), weight = 1 - gamma, kinetic energy (MeV) = 3.00028, position (cm) = (1.66125,1.21495,200), weight = 1 - e-, kinetic energy (MeV) = 12.3421, position (cm) = (-0.240666,1.14998,200), weight = 1 - gamma, kinetic energy (MeV) = 0.126216, position (cm) = (-4.11572,3.37401,200), weight = 1 + nu_e, kinetic energy (MeV) = 22.7994, position (cm) = (-61.9191,-1.78741,200), weight = 3 + anti_nu_mu, kinetic energy (MeV) = 30.4613, position (cm) = (-12.3215,31.1346,200), weight = 3 + gamma, kinetic energy (MeV) = 18.409, position (cm) = (-10.5531,-14.8293,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0843609, position (cm) = (0.172612,-15.0302,200), weight = 1 + nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (14.217,-14.6771,200), weight = 1 + pi+, kinetic energy (MeV) = 104.339, position (cm) = (-9.66742,-2.85005,200), weight = 3 + gamma, kinetic energy (MeV) = 0.739468, position (cm) = (-3.08899,21.2302,200), weight = 6 + gamma, kinetic energy (MeV) = 1.95029, position (cm) = (4.51848,8.45219,200), weight = 6 + gamma, kinetic energy (MeV) = 0.801268, position (cm) = (6.9579,7.54853,200), weight = 6 + e-, kinetic energy (MeV) = 0.958686, position (cm) = (6.76995,7.44733,200), weight = 6 + gamma, kinetic energy (MeV) = 0.726507, position (cm) = (8.10909,8.36611,200), weight = 6 + gamma, kinetic energy (MeV) = 0.0904909, position (cm) = (12.4292,3.06922,200), weight = 6 + gamma, kinetic energy (MeV) = 5.65705, position (cm) = (7.12435,3.60389,200), weight = 6 + gamma, kinetic energy (MeV) = 0.210729, position (cm) = (-0.218751,5.1988,200), weight = 6 + e-, kinetic energy (MeV) = 3.99864, position (cm) = (3.68469,6.94845,200), weight = 6 + gamma, kinetic energy (MeV) = 10.3603, position (cm) = (3.67979,6.94718,200), weight = 6 + gamma, kinetic energy (MeV) = 0.179478, position (cm) = (3.78232,6.69543,200), weight = 6 + gamma, kinetic energy (MeV) = 22.5576, position (cm) = (3.45197,6.83169,200), weight = 6 + gamma, kinetic energy (MeV) = 0.143017, position (cm) = (8.53501,5.72452,200), weight = 6 + e+, kinetic energy (MeV) = 5.64636, position (cm) = (4.19589,7.55969,200), weight = 6 + gamma, kinetic energy (MeV) = 4.38032, position (cm) = (4.1274,6.69676,200), weight = 6 + gamma, kinetic energy (MeV) = 2.65842, position (cm) = (3.05044,9.51346,200), weight = 6 + gamma, kinetic energy (MeV) = 0.440422, position (cm) = (6.10851,7.94738,200), weight = 6 + gamma, kinetic energy (MeV) = 0.284352, position (cm) = (0.929776,17.434,200), weight = 6 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (5.55293,7.09232,200), weight = 6 + gamma, kinetic energy (MeV) = 2.18318, position (cm) = (6.60746,8.25603,200), weight = 6 + gamma, kinetic energy (MeV) = 0.0898962, position (cm) = (6.49876,14.4565,200), weight = 6 + gamma, kinetic energy (MeV) = 0.132628, position (cm) = (20.2407,9.9243,200), weight = 6 + gamma, kinetic energy (MeV) = 11.9059, position (cm) = (4.72144,7.01376,200), weight = 6 + gamma, kinetic energy (MeV) = 40.5124, position (cm) = (15.4071,-9.71403,200), weight = 2 + gamma, kinetic energy (MeV) = 0.0525674, position (cm) = (17.6736,-6.38169,200), weight = 2 + gamma, kinetic energy (MeV) = 2.13985, position (cm) = (15.0999,-7.58968,200), weight = 2 + gamma, kinetic energy (MeV) = 3.94744, position (cm) = (14.4538,-7.26193,200), weight = 2 + gamma, kinetic energy (MeV) = 0.337904, position (cm) = (16.438,-9.75227,200), weight = 2 + gamma, kinetic energy (MeV) = 0.0611373, position (cm) = (13.8716,-9.1705,200), weight = 2 + gamma, kinetic energy (MeV) = 13.1429, position (cm) = (13.4645,-4.70675,200), weight = 2 + gamma, kinetic energy (MeV) = 0.661529, position (cm) = (13.1155,-4.89162,200), weight = 2 + gamma, kinetic energy (MeV) = 0.231996, position (cm) = (3.71002,-15.1008,200), weight = 2 + gamma, kinetic energy (MeV) = 3.24261, position (cm) = (12.5366,-4.80105,200), weight = 2 + gamma, kinetic energy (MeV) = 0.477077, position (cm) = (12.047,-6.72398,200), weight = 2 + gamma, kinetic energy (MeV) = 7.76276, position (cm) = (12.3257,-4.35498,200), weight = 2 + gamma, kinetic energy (MeV) = 0.322589, position (cm) = (12.0491,-3.25243,200), weight = 2 + gamma, kinetic energy (MeV) = 3.37735, position (cm) = (11.539,-3.5958,200), weight = 2 + gamma, kinetic energy (MeV) = 0.857018, position (cm) = (11.6398,-3.56241,200), weight = 2 + gamma, kinetic energy (MeV) = 0.70286, position (cm) = (11.5517,-0.508583,200), weight = 2 + e+, kinetic energy (MeV) = 7.52559, position (cm) = (12.4556,1.14667,200), weight = 2 + gamma, kinetic energy (MeV) = 0.112717, position (cm) = (12.2934,1.01474,200), weight = 2 + e-, kinetic energy (MeV) = 7.5014, position (cm) = (12.9445,0.521674,200), weight = 2 + e-, kinetic energy (MeV) = 0.42684, position (cm) = (12.962,0.519221,200), weight = 2 + gamma, kinetic energy (MeV) = 0.0606765, position (cm) = (11.6001,0.896876,200), weight = 2 + gamma, kinetic energy (MeV) = 6.18818, position (cm) = (12.4802,-2.57309,200), weight = 2 + gamma, kinetic energy (MeV) = 0.933305, position (cm) = (12.3709,-6.14485,200), weight = 2 + gamma, kinetic energy (MeV) = 7.26115, position (cm) = (22.277,0.381773,200), weight = 2 + gamma, kinetic energy (MeV) = 0.45441, position (cm) = (11.1181,-5.39027,200), weight = 2 + gamma, kinetic energy (MeV) = 0.173748, position (cm) = (6.71785,-2.40763,200), weight = 2 + gamma, kinetic energy (MeV) = 16.7705, position (cm) = (12.0932,-3.37388,200), weight = 2 + gamma, kinetic energy (MeV) = 4.56006, position (cm) = (11.5068,-3.37208,200), weight = 2 + gamma, kinetic energy (MeV) = 0.500285, position (cm) = (9.03844,-7.15531,200), weight = 2 + gamma, kinetic energy (MeV) = 0.152741, position (cm) = (6.00052,-2.32463,200), weight = 2 + gamma, kinetic energy (MeV) = 22.7778, position (cm) = (10.3784,-5.00263,200), weight = 2 + gamma, kinetic energy (MeV) = 29.78, position (cm) = (10.0517,-3.42717,200), weight = 2 + neutron, kinetic energy (MeV) = 31.1923, position (cm) = (24.7903,10.1036,200), weight = 8 + pi-, kinetic energy (MeV) = 2805.4, position (cm) = (-3.74938,-3.04431,200), weight = 1 + neutron, kinetic energy (MeV) = 0.3362, position (cm) = (14.1301,-8.04848,200), weight = 1 + neutron, kinetic energy (MeV) = 0.388043, position (cm) = (36.306,-15.6655,200), weight = 2 + anti_nu_mu, kinetic energy (MeV) = 35.4052, position (cm) = (-2.69754,11.0289,200), weight = 2 + neutron, kinetic energy (MeV) = 6446.6, position (cm) = (0.163271,-4.93544,200), weight = 1 + nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-94.041,60.6535,200), weight = 4 + gamma, kinetic energy (MeV) = 8.89824, position (cm) = (-8.02309,-26.3097,200), weight = 12 + gamma, kinetic energy (MeV) = 0.0602763, position (cm) = (-7.53471,-25.1377,200), weight = 12 + gamma, kinetic energy (MeV) = 0.884786, position (cm) = (18.6745,8.17798,200), weight = 1 + gamma, kinetic energy (MeV) = 2.27085, position (cm) = (9.21364,-6.73432,200), weight = 1 + gamma, kinetic energy (MeV) = 0.332702, position (cm) = (1.68989,-5.76561,200), weight = 1 + gamma, kinetic energy (MeV) = 98.7875, position (cm) = (1.09872,-6.72828,200), weight = 1 + gamma, kinetic energy (MeV) = 11.399, position (cm) = (3.61268,-9.31486,200), weight = 1 + gamma, kinetic energy (MeV) = 0.239038, position (cm) = (4.68047,-7.87593,200), weight = 1 + gamma, kinetic energy (MeV) = 4.22528, position (cm) = (-3.96612,-2.22784,200), weight = 1 + gamma, kinetic energy (MeV) = 22.6729, position (cm) = (-5.26753,-2.44978,200), weight = 1 + gamma, kinetic energy (MeV) = 0.273343, position (cm) = (-5.04504,-2.83441,200), weight = 1 + e-, kinetic energy (MeV) = 4.79281, position (cm) = (-5.45713,-2.10854,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0929913, position (cm) = (-5.45201,-2.11804,200), weight = 1 + gamma, kinetic energy (MeV) = 0.948496, position (cm) = (-0.0712861,-5.09182,200), weight = 1 + gamma, kinetic energy (MeV) = 21.6259, position (cm) = (2.61861,-2.9658,200), weight = 1 + gamma, kinetic energy (MeV) = 8.05863, position (cm) = (6.29912,2.78761,200), weight = 1 + gamma, kinetic energy (MeV) = 1.51059, position (cm) = (-0.775791,24.1728,200), weight = 1 + gamma, kinetic energy (MeV) = 1.12478, position (cm) = (-14.3562,-26.0813,200), weight = 1 + gamma, kinetic energy (MeV) = 1.08926, position (cm) = (3.1997,-10.7721,200), weight = 1 + gamma, kinetic energy (MeV) = 1.28749, position (cm) = (3.71733,-10.9029,200), weight = 1 + gamma, kinetic energy (MeV) = 60.4605, position (cm) = (0.25844,-5.14599,200), weight = 1 + neutron, kinetic energy (MeV) = 0.000333233, position (cm) = (8.98904,-35.0553,200), weight = 2 + neutron, kinetic energy (MeV) = 78.2471, position (cm) = (2.01619,3.39184,200), weight = 2 + e+, kinetic energy (MeV) = 517.943, position (cm) = (2.7448,13.2789,200), weight = 1 + gamma, kinetic energy (MeV) = 1.81335, position (cm) = (2.74504,13.2791,200), weight = 1 + gamma, kinetic energy (MeV) = 1.03496, position (cm) = (2.74379,13.2784,200), weight = 1 + gamma, kinetic energy (MeV) = 0.33946, position (cm) = (2.74153,13.2821,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0823477, position (cm) = (4.34635,11.5616,200), weight = 1 + gamma, kinetic energy (MeV) = 24.638, position (cm) = (2.74131,13.285,200), weight = 1 + gamma, kinetic energy (MeV) = 12.1177, position (cm) = (2.74412,13.1999,200), weight = 1 + e-, kinetic energy (MeV) = 43.8986, position (cm) = (2.73417,12.4218,200), weight = 1 + gamma, kinetic energy (MeV) = 5.91433, position (cm) = (2.73672,12.4077,200), weight = 1 + gamma, kinetic energy (MeV) = 2.04208, position (cm) = (2.72543,12.4425,200), weight = 1 + gamma, kinetic energy (MeV) = 1.16395, position (cm) = (2.86968,12.6479,200), weight = 1 + gamma, kinetic energy (MeV) = 0.259736, position (cm) = (3.04174,12.7543,200), weight = 1 + neutron, kinetic energy (MeV) = 1894.08, position (cm) = (5.45831,-5.91116,200), weight = 1 + gamma, kinetic energy (MeV) = 0.300313, position (cm) = (38.0358,89.6417,200), weight = 4 + gamma, kinetic energy (MeV) = 0.57907, position (cm) = (57.4047,95.5233,200), weight = 2 + gamma, kinetic energy (MeV) = 0.82661, position (cm) = (6.83248,-4.3954,200), weight = 4 + gamma, kinetic energy (MeV) = 12.4711, position (cm) = (-5.66299,5.62342,200), weight = 4 + gamma, kinetic energy (MeV) = 30.2384, position (cm) = (-15.8054,7.60337,200), weight = 4 + gamma, kinetic energy (MeV) = 5.70756, position (cm) = (-10.2609,7.62989,200), weight = 4 + gamma, kinetic energy (MeV) = 0.220301, position (cm) = (-13.8986,24.2503,200), weight = 4 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-7.01818,12.8284,200), weight = 4 + gamma, kinetic energy (MeV) = 0.157996, position (cm) = (-6.73532,12.5395,200), weight = 4 + gamma, kinetic energy (MeV) = 0.0969321, position (cm) = (-6.33928,13.9662,200), weight = 4 + gamma, kinetic energy (MeV) = 5.52839, position (cm) = (0.367942,-9.07963,200), weight = 4 + gamma, kinetic energy (MeV) = 0.117128, position (cm) = (9.2639,-13.5052,200), weight = 4 + gamma, kinetic energy (MeV) = 13.1902, position (cm) = (-8.76198,9.7236,200), weight = 4 + gamma, kinetic energy (MeV) = 0.937472, position (cm) = (-6.85096,15.2755,200), weight = 4 + gamma, kinetic energy (MeV) = 5.3013, position (cm) = (-9.27212,9.40134,200), weight = 4 + gamma, kinetic energy (MeV) = 0.573731, position (cm) = (0.719467,-4.85387,200), weight = 4 + gamma, kinetic energy (MeV) = 35.1789, position (cm) = (-10.3716,9.41088,200), weight = 4 + gamma, kinetic energy (MeV) = 0.0765449, position (cm) = (-12.5319,9.24167,200), weight = 4 + e-, kinetic energy (MeV) = 47.2114, position (cm) = (-9.58658,9.11763,200), weight = 4 + gamma, kinetic energy (MeV) = 6.9045, position (cm) = (-10.0563,9.49409,200), weight = 4 + e+, kinetic energy (MeV) = 25.1349, position (cm) = (-11.072,9.65901,200), weight = 4 + gamma, kinetic energy (MeV) = 0.852597, position (cm) = (-11.0721,9.65927,200), weight = 4 + gamma, kinetic energy (MeV) = 0.139075, position (cm) = (-11.0911,9.65797,200), weight = 4 + gamma, kinetic energy (MeV) = 0.352115, position (cm) = (-11.0202,9.60729,200), weight = 4 + gamma, kinetic energy (MeV) = 0.272654, position (cm) = (-11.0038,9.57446,200), weight = 4 + e-, kinetic energy (MeV) = 13.0114, position (cm) = (-9.79204,9.92506,200), weight = 4 + e-, kinetic energy (MeV) = 0.863602, position (cm) = (-9.91929,9.94207,200), weight = 4 + gamma, kinetic energy (MeV) = 3.74136, position (cm) = (-9.7357,9.90898,200), weight = 4 + gamma, kinetic energy (MeV) = 0.887427, position (cm) = (-9.9231,9.96515,200), weight = 4 + gamma, kinetic energy (MeV) = 1.56226, position (cm) = (-9.82852,10.0392,200), weight = 4 + gamma, kinetic energy (MeV) = 5.49068, position (cm) = (5.05204,-3.89083,200), weight = 12 + nu_e, kinetic energy (MeV) = 24.2596, position (cm) = (40.4828,-2.66403,200), weight = 1 + anti_nu_mu, kinetic energy (MeV) = 40.7043, position (cm) = (-70.6285,-0.475735,200), weight = 1 + nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (22.1108,-26.2763,200), weight = 1 + anti_nu_mu, kinetic energy (MeV) = 50.704, position (cm) = (-36.0534,52.4468,200), weight = 3 + gamma, kinetic energy (MeV) = 2.71197, position (cm) = (-33.1849,-21.9718,200), weight = 3 + neutron, kinetic energy (MeV) = 479.401, position (cm) = (23.5934,-12.5139,200), weight = 1 + gamma, kinetic energy (MeV) = 0.364594, position (cm) = (-9.5181,13.6816,200), weight = 9 + neutron, kinetic energy (MeV) = 19.4589, position (cm) = (-5.57633,2.27627,200), weight = 9 + gamma, kinetic energy (MeV) = 1078.79, position (cm) = (3.57749,1.52699,200), weight = 1 + e+, kinetic energy (MeV) = 67.3437, position (cm) = (1.89194,-0.670212,200), weight = 3 + gamma, kinetic energy (MeV) = 2.00659, position (cm) = (1.89576,-0.661018,200), weight = 3 + gamma, kinetic energy (MeV) = 18.7938, position (cm) = (1.9122,-0.692543,200), weight = 3 + gamma, kinetic energy (MeV) = 5.94723, position (cm) = (1.88353,-0.702992,200), weight = 3 + gamma, kinetic energy (MeV) = 35.0411, position (cm) = (1.91711,-0.712983,200), weight = 3 + gamma, kinetic energy (MeV) = 1.15378, position (cm) = (1.91261,-0.739406,200), weight = 3 + gamma, kinetic energy (MeV) = 0.146859, position (cm) = (1.93145,-0.735478,200), weight = 3 + gamma, kinetic energy (MeV) = 0.3075, position (cm) = (9.37817,5.51954,200), weight = 3 + gamma, kinetic energy (MeV) = 0.100418, position (cm) = (1.42339,-1.65325,200), weight = 3 + gamma, kinetic energy (MeV) = 0.0916279, position (cm) = (1.94625,-0.64327,200), weight = 3 + e+, kinetic energy (MeV) = 4.2529, position (cm) = (2.15852,0.0721037,200), weight = 3 + gamma, kinetic energy (MeV) = 19.7373, position (cm) = (2.15449,0.0738046,200), weight = 3 + gamma, kinetic energy (MeV) = 18.4825, position (cm) = (2.08279,0.0118115,200), weight = 3 + gamma, kinetic energy (MeV) = 0.288868, position (cm) = (2.16165,-0.140328,200), weight = 3 + gamma, kinetic energy (MeV) = 0.708854, position (cm) = (1.95059,-0.160349,200), weight = 3 + gamma, kinetic energy (MeV) = 3.27493, position (cm) = (2.13242,-0.13192,200), weight = 3 + gamma, kinetic energy (MeV) = 2.53324, position (cm) = (2.16754,-0.195932,200), weight = 3 + e-, kinetic energy (MeV) = 5.70504, position (cm) = (1.55912,-1.79699,200), weight = 3 + gamma, kinetic energy (MeV) = 76.1137, position (cm) = (1.77431,-1.49917,200), weight = 3 + gamma, kinetic energy (MeV) = 0.672309, position (cm) = (2.21622,-1.96393,200), weight = 3 + gamma, kinetic energy (MeV) = 1.07092, position (cm) = (1.80519,-1.46042,200), weight = 3 + gamma, kinetic energy (MeV) = 0.443371, position (cm) = (6.26976,0.837265,200), weight = 3 + e+, kinetic energy (MeV) = 20.8922, position (cm) = (2.27223,-0.429157,200), weight = 3 + gamma, kinetic energy (MeV) = 4.10142, position (cm) = (2.34287,-0.56338,200), weight = 3 + gamma, kinetic energy (MeV) = 0.346005, position (cm) = (2.25379,-0.665046,200), weight = 3 + gamma, kinetic energy (MeV) = 0.490375, position (cm) = (2.18172,-0.694288,200), weight = 3 + gamma, kinetic energy (MeV) = 24.0233, position (cm) = (2.1869,-0.779829,200), weight = 3 + e-, kinetic energy (MeV) = 48.6034, position (cm) = (1.35736,-0.720125,200), weight = 3 + gamma, kinetic energy (MeV) = 0.8837, position (cm) = (1.35685,-0.720341,200), weight = 3 + gamma, kinetic energy (MeV) = 2.62559, position (cm) = (1.6625,-0.611268,200), weight = 3 + gamma, kinetic energy (MeV) = 4.74482, position (cm) = (1.87881,-2.25052,200), weight = 3 + gamma, kinetic energy (MeV) = 0.161481, position (cm) = (-1.05194,-1.19964,200), weight = 3 + gamma, kinetic energy (MeV) = 0.0788618, position (cm) = (0.548553,-2.52554,200), weight = 3 + e+, kinetic energy (MeV) = 9.09688, position (cm) = (-11.5517,4.36698,200), weight = 3 + e-, kinetic energy (MeV) = 3.882, position (cm) = (-11.4793,4.35126,200), weight = 3 + gamma, kinetic energy (MeV) = 5.31831, position (cm) = (-11.6363,3.42061,200), weight = 3 + gamma, kinetic energy (MeV) = 3.12604, position (cm) = (-11.6077,3.10973,200), weight = 3 + gamma, kinetic energy (MeV) = 0.398054, position (cm) = (-9.7349,1.72333,200), weight = 3 + gamma, kinetic energy (MeV) = 105.686, position (cm) = (-9.56227,1.50917,200), weight = 3 + e+, kinetic energy (MeV) = 2.30138, position (cm) = (-9.2468,0.93466,200), weight = 3 + e-, kinetic energy (MeV) = 1.64843, position (cm) = (-9.24413,0.939558,200), weight = 3 + gamma, kinetic energy (MeV) = 0.050299, position (cm) = (-9.24995,0.926912,200), weight = 3 + gamma, kinetic energy (MeV) = 0.0393552, position (cm) = (-7.65619,2.44101,200), weight = 3 + gamma, kinetic energy (MeV) = 20.3588, position (cm) = (-9.71566,1.63868,200), weight = 3 + e-, kinetic energy (MeV) = 255.754, position (cm) = (-11.7794,1.60338,200), weight = 3 + gamma, kinetic energy (MeV) = 0.175291, position (cm) = (-11.7794,1.60342,200), weight = 3 + gamma, kinetic energy (MeV) = 0.3605, position (cm) = (-11.8027,1.53556,200), weight = 3 + gamma, kinetic energy (MeV) = 0.806198, position (cm) = (-11.2399,2.3866,200), weight = 3 + gamma, kinetic energy (MeV) = 1.83516, position (cm) = (-11.7199,1.61546,200), weight = 3 + gamma, kinetic energy (MeV) = 1.19084, position (cm) = (-11.6582,1.59813,200), weight = 3 + gamma, kinetic energy (MeV) = 0.130739, position (cm) = (-12.1892,5.83438,200), weight = 3 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-14.289,6.43189,200), weight = 3 + gamma, kinetic energy (MeV) = 0.0677444, position (cm) = (-0.525351,-0.397861,200), weight = 3 + gamma, kinetic energy (MeV) = 2.08312, position (cm) = (-11.6304,1.48376,200), weight = 3 + gamma, kinetic energy (MeV) = 12.6056, position (cm) = (-10.7062,1.62021,200), weight = 3 + neutron, kinetic energy (MeV) = 39.0194, position (cm) = (11.9357,19.0613,200), weight = 6 + neutron, kinetic energy (MeV) = 35.7125, position (cm) = (-5.21376,1.77673,200), weight = 16 + neutron, kinetic energy (MeV) = 147.894, position (cm) = (-2.35362,2.64307,200), weight = 8 + anti_nu_mu, kinetic energy (MeV) = 38.9025, position (cm) = (42.0735,15.1571,200), weight = 1 + gamma, kinetic energy (MeV) = 4.60261, position (cm) = (-81.0094,53.5891,200), weight = 2 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-64.3544,47.9928,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0967654, position (cm) = (-67.184,51.3298,200), weight = 1 + gamma, kinetic energy (MeV) = 0.088108, position (cm) = (-67.052,51.1119,200), weight = 1 + gamma, kinetic energy (MeV) = 0.165856, position (cm) = (-68.1847,49.9222,200), weight = 1 + gamma, kinetic energy (MeV) = 0.442104, position (cm) = (-66.8423,48.6124,200), weight = 1 + gamma, kinetic energy (MeV) = 0.114063, position (cm) = (-65.7115,53.6294,200), weight = 1 + gamma, kinetic energy (MeV) = 0.272081, position (cm) = (-70.3749,52.9063,200), weight = 1 + gamma, kinetic energy (MeV) = 0.324904, position (cm) = (-68.2178,44.9242,200), weight = 1 + neutron, kinetic energy (MeV) = 3.19886e-06, position (cm) = (-56.8438,39.5322,200), weight = 3 + proton, kinetic energy (MeV) = 260.68, position (cm) = (-86.2103,50.5165,200), weight = 1 + gamma, kinetic energy (MeV) = 27.0688, position (cm) = (6.55566,-71.8254,200), weight = 4 + gamma, kinetic energy (MeV) = 0.108038, position (cm) = (-2.58908,-3.15823,200), weight = 2 + neutron, kinetic energy (MeV) = 0.0897232, position (cm) = (1.56112,-21.6423,200), weight = 2 + neutron, kinetic energy (MeV) = 70.7751, position (cm) = (3.57447,-23.7426,200), weight = 2 + gamma, kinetic energy (MeV) = 0.181419, position (cm) = (16.2042,-12.1746,200), weight = 2 + neutron, kinetic energy (MeV) = 27.3891, position (cm) = (-5.11197,-13.2312,200), weight = 1 + neutron, kinetic energy (MeV) = 3.31591, position (cm) = (6.26245,-10.8949,200), weight = 1 + proton, kinetic energy (MeV) = 3008.18, position (cm) = (-4.24363,-11.3128,200), weight = 1 + gamma, kinetic energy (MeV) = 17.136, position (cm) = (8.94618,8.00461,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0583284, position (cm) = (4.54572,17.8332,200), weight = 3 + gamma, kinetic energy (MeV) = 767.888, position (cm) = (0.482118,3.18541,200), weight = 1 + neutron, kinetic energy (MeV) = 6396.25, position (cm) = (1.06353,2.0407,200), weight = 1 + proton, kinetic energy (MeV) = 7580.9, position (cm) = (-7.58876,1.27713,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-13.1319,-8.37498,200), weight = 3 + gamma, kinetic energy (MeV) = 0.152657, position (cm) = (-8.52301,-3.86482,200), weight = 3 + gamma, kinetic energy (MeV) = 0.387653, position (cm) = (-12.6902,-3.8303,200), weight = 3 + gamma, kinetic energy (MeV) = 0.332969, position (cm) = (-11.381,-9.13047,200), weight = 3 + gamma, kinetic energy (MeV) = 1.49036, position (cm) = (-13.8568,-2.17252,200), weight = 3 + gamma, kinetic energy (MeV) = 0.137564, position (cm) = (-10.584,-2.7726,200), weight = 3 + gamma, kinetic energy (MeV) = 2.89436, position (cm) = (-4.42278,-7.69357,200), weight = 3 + neutron, kinetic energy (MeV) = 212.99, position (cm) = (-25.6816,43.1231,200), weight = 4 + pi+, kinetic energy (MeV) = 240.16, position (cm) = (-8.45339,-30.1034,200), weight = 1 + gamma, kinetic energy (MeV) = 0.158253, position (cm) = (19.3368,16.3462,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0849332, position (cm) = (10.1954,28.5026,200), weight = 1 + gamma, kinetic energy (MeV) = 2.55587, position (cm) = (16.9795,14.9596,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0836862, position (cm) = (17.0593,13.8132,200), weight = 1 + gamma, kinetic energy (MeV) = 0.215151, position (cm) = (15.431,5.33967,200), weight = 3 + e+, kinetic energy (MeV) = 58.1614, position (cm) = (13.4392,8.07134,200), weight = 1 + gamma, kinetic energy (MeV) = 0.201646, position (cm) = (13.4472,8.06849,200), weight = 1 + gamma, kinetic energy (MeV) = 2.56824, position (cm) = (13.4575,8.01298,200), weight = 1 + gamma, kinetic energy (MeV) = 0.370188, position (cm) = (13.6717,8.01314,200), weight = 1 + gamma, kinetic energy (MeV) = 72.3885, position (cm) = (13.8016,8.41022,200), weight = 1 + gamma, kinetic energy (MeV) = 7.38546, position (cm) = (13.8155,8.62333,200), weight = 1 + gamma, kinetic energy (MeV) = 0.451165, position (cm) = (13.7318,6.55,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (13.3907,11.9096,200), weight = 1 + gamma, kinetic energy (MeV) = 13.1478, position (cm) = (13.6507,4.27244,200), weight = 1 + gamma, kinetic energy (MeV) = 16.0646, position (cm) = (-11.987,24.8272,200), weight = 3 + gamma, kinetic energy (MeV) = 3.27481, position (cm) = (-2.89908,21.5681,200), weight = 3 + gamma, kinetic energy (MeV) = 0.360857, position (cm) = (-3.22699,18.5795,200), weight = 3 + gamma, kinetic energy (MeV) = 21.3161, position (cm) = (-8.29856,18.6279,200), weight = 3 + neutron, kinetic energy (MeV) = 33.7182, position (cm) = (11.0419,9.126,200), weight = 24 + proton, kinetic energy (MeV) = 435.85, position (cm) = (22.5209,10.5389,200), weight = 8 + e+, kinetic energy (MeV) = 89.3053, position (cm) = (21.0915,-14.7229,200), weight = 1 + gamma, kinetic energy (MeV) = 1.85831, position (cm) = (21.0907,-14.7226,200), weight = 1 + gamma, kinetic energy (MeV) = 0.324453, position (cm) = (21.2043,-13.2514,200), weight = 1 + gamma, kinetic energy (MeV) = 1.05772, position (cm) = (20.7907,-14.5308,200), weight = 1 + e-, kinetic energy (MeV) = 5.13133, position (cm) = (21.3403,-14.4517,200), weight = 1 + gamma, kinetic energy (MeV) = 0.024659, position (cm) = (21.1886,-14.4356,200), weight = 1 + gamma, kinetic energy (MeV) = 1.25362, position (cm) = (21.6463,-14.748,200), weight = 1 + e-, kinetic energy (MeV) = 108.529, position (cm) = (20.6405,-14.2453,200), weight = 1 + gamma, kinetic energy (MeV) = 7.21593, position (cm) = (20.6404,-14.2459,200), weight = 1 + gamma, kinetic energy (MeV) = 9.56484, position (cm) = (20.6408,-14.2454,200), weight = 1 + gamma, kinetic energy (MeV) = 0.96623, position (cm) = (20.6414,-14.2403,200), weight = 1 + gamma, kinetic energy (MeV) = 1.58823, position (cm) = (20.4533,-13.4092,200), weight = 1 + gamma, kinetic energy (MeV) = 1.47282, position (cm) = (20.6438,-14.4624,200), weight = 1 + gamma, kinetic energy (MeV) = 9.15392, position (cm) = (20.7832,-14.4298,200), weight = 1 + gamma, kinetic energy (MeV) = 0.577142, position (cm) = (18.4797,-9.43022,200), weight = 1 + gamma, kinetic energy (MeV) = 6.20319, position (cm) = (20.7288,-14.173,200), weight = 1 + gamma, kinetic energy (MeV) = 1.27898, position (cm) = (20.5999,-14.1057,200), weight = 1 + gamma, kinetic energy (MeV) = 1.58057, position (cm) = (24.2008,-25.7696,200), weight = 1 + e-, kinetic energy (MeV) = 4.2015, position (cm) = (20.5653,-13.9172,200), weight = 1 + e+, kinetic energy (MeV) = 1.53548, position (cm) = (21.6346,-3.82985,200), weight = 1 + gamma, kinetic energy (MeV) = 0.343914, position (cm) = (21.909,-3.64943,200), weight = 1 + gamma, kinetic energy (MeV) = 0.686696, position (cm) = (21.5672,-3.92232,200), weight = 1 + gamma, kinetic energy (MeV) = 8.99367, position (cm) = (21.1194,-4.38284,200), weight = 1 + gamma, kinetic energy (MeV) = 0.465178, position (cm) = (33.9158,-13.4689,200), weight = 1 + gamma, kinetic energy (MeV) = 11.7916, position (cm) = (19.874,-8.97045,200), weight = 1 + gamma, kinetic energy (MeV) = 0.252883, position (cm) = (22.9965,-7.55091,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0502704, position (cm) = (20.2357,-9.84429,200), weight = 1 + gamma, kinetic energy (MeV) = 9.87663, position (cm) = (17.0285,-9.39369,200), weight = 1 + gamma, kinetic energy (MeV) = 0.197501, position (cm) = (16.4505,-9.77385,200), weight = 1 + gamma, kinetic energy (MeV) = 0.75745, position (cm) = (18.6793,-8.77233,200), weight = 1 + gamma, kinetic energy (MeV) = 0.138429, position (cm) = (19.2762,-11.7731,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0820261, position (cm) = (20.6073,-16.4941,200), weight = 1 + gamma, kinetic energy (MeV) = 3.07478, position (cm) = (22.6499,-15.7222,200), weight = 1 + gamma, kinetic energy (MeV) = 0.164762, position (cm) = (21.866,-11.1558,200), weight = 1 + e-, kinetic energy (MeV) = 13.2466, position (cm) = (21.5441,-9.10277,200), weight = 1 + gamma, kinetic energy (MeV) = 0.652481, position (cm) = (21.5547,-9.13456,200), weight = 1 + gamma, kinetic energy (MeV) = 0.298021, position (cm) = (19.6888,-10.912,200), weight = 1 + gamma, kinetic energy (MeV) = 0.487183, position (cm) = (17.9291,-6.38798,200), weight = 1 + gamma, kinetic energy (MeV) = 1.04916, position (cm) = (19.0728,-7.39508,200), weight = 1 + gamma, kinetic energy (MeV) = 20.6844, position (cm) = (20.1039,-10.2301,200), weight = 1 + gamma, kinetic energy (MeV) = 0.190091, position (cm) = (15.4662,-5.99246,200), weight = 1 + gamma, kinetic energy (MeV) = 1.07134, position (cm) = (21.3207,-8.37067,200), weight = 1 + pi+, kinetic energy (MeV) = 1123.97, position (cm) = (22.8294,16.7296,200), weight = 1 + pi+, kinetic energy (MeV) = 1449.35, position (cm) = (15.0407,-7.26339,200), weight = 1 + gamma, kinetic energy (MeV) = 0.129124, position (cm) = (-13.9598,16.2836,200), weight = 6 + gamma, kinetic energy (MeV) = 0.106709, position (cm) = (-23.6057,24.6652,200), weight = 6 + neutron, kinetic energy (MeV) = 3.39651, position (cm) = (-22.8658,26.0286,200), weight = 2 + gamma, kinetic energy (MeV) = 0.548829, position (cm) = (-11.921,-40.5757,200), weight = 2 + gamma, kinetic energy (MeV) = 0.763526, position (cm) = (12.1168,-16.8819,200), weight = 2 + gamma, kinetic energy (MeV) = 0.0642914, position (cm) = (23.1349,-7.05814,200), weight = 2 + gamma, kinetic energy (MeV) = 3.39491, position (cm) = (11.9797,-26.7327,200), weight = 2 + gamma, kinetic energy (MeV) = 3.01742, position (cm) = (10.1962,-25.2377,200), weight = 2 + gamma, kinetic energy (MeV) = 37.4632, position (cm) = (10.3646,-20.2155,200), weight = 2 + gamma, kinetic energy (MeV) = 3.51872, position (cm) = (7.48518,-24.2696,200), weight = 2 + gamma, kinetic energy (MeV) = 9.50143, position (cm) = (15.0508,-17.2805,200), weight = 2 + gamma, kinetic energy (MeV) = 11.8851, position (cm) = (15.3294,-19.3551,200), weight = 2 + gamma, kinetic energy (MeV) = 6.8087, position (cm) = (13.0004,-26.0097,200), weight = 2 + gamma, kinetic energy (MeV) = 5.36502, position (cm) = (3.16798,-20.1187,200), weight = 2 + gamma, kinetic energy (MeV) = 3.48619, position (cm) = (24.4181,-36.6848,200), weight = 6 + gamma, kinetic energy (MeV) = 0.311177, position (cm) = (1.57845,-16.4587,200), weight = 2 + gamma, kinetic energy (MeV) = 0.166223, position (cm) = (9.26049,-16.9157,200), weight = 6 + gamma, kinetic energy (MeV) = 10.4518, position (cm) = (8.22751,-14.9104,200), weight = 6 + gamma, kinetic energy (MeV) = 0.106678, position (cm) = (7.92634,-14.5159,200), weight = 6 + gamma, kinetic energy (MeV) = 0.566373, position (cm) = (28.4152,-20.2538,200), weight = 6 + proton, kinetic energy (MeV) = 681.378, position (cm) = (26.289,17.0081,200), weight = 5 + gamma, kinetic energy (MeV) = 1.92093, position (cm) = (41.9025,-3.10099,200), weight = 1 + gamma, kinetic energy (MeV) = 0.222193, position (cm) = (9.35872,2.4603,200), weight = 1 + gamma, kinetic energy (MeV) = 45.7587, position (cm) = (1.88828,1.02397,200), weight = 1 + gamma, kinetic energy (MeV) = 77.7472, position (cm) = (-4.98428,-4.32893,200), weight = 1 + gamma, kinetic energy (MeV) = 0.399392, position (cm) = (18.0174,-1.90324,200), weight = 3 + gamma, kinetic energy (MeV) = 3.17971, position (cm) = (14.0399,20.7134,200), weight = 1 + gamma, kinetic energy (MeV) = 1.8483, position (cm) = (-4.93039,-2.6909,200), weight = 1 + gamma, kinetic energy (MeV) = 0.111335, position (cm) = (9.53842,-1.13726,200), weight = 1 + gamma, kinetic energy (MeV) = 0.744621, position (cm) = (18.5114,-4.58142,200), weight = 1 + gamma, kinetic energy (MeV) = 11.9573, position (cm) = (16.2477,-7.11929,200), weight = 1 + gamma, kinetic energy (MeV) = 4.53621, position (cm) = (20.735,2.39021,200), weight = 1 + gamma, kinetic energy (MeV) = 12.359, position (cm) = (20.0095,4.48023,200), weight = 1 + gamma, kinetic energy (MeV) = 0.704064, position (cm) = (-9.61749,11.4656,200), weight = 1 + gamma, kinetic energy (MeV) = 10.3046, position (cm) = (-11.8784,1.49947,200), weight = 1 + gamma, kinetic energy (MeV) = 1.18656, position (cm) = (-1.73347,16.3235,200), weight = 1 + gamma, kinetic energy (MeV) = 0.365105, position (cm) = (2.90133,2.14661,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0711294, position (cm) = (-7.49458,-18.9488,200), weight = 1 + gamma, kinetic energy (MeV) = 0.169951, position (cm) = (18.1136,7.84546,200), weight = 1 + gamma, kinetic energy (MeV) = 2.10664, position (cm) = (4.8964,-7.01153,200), weight = 1 + gamma, kinetic energy (MeV) = 1.21922, position (cm) = (-4.46417,2.49425,200), weight = 1 + gamma, kinetic energy (MeV) = 0.169878, position (cm) = (-2.53603,0.245241,200), weight = 1 + gamma, kinetic energy (MeV) = 0.320075, position (cm) = (1.87562,-8.05247,200), weight = 1 + gamma, kinetic energy (MeV) = 1.15721, position (cm) = (-2.75214,-1.65461,200), weight = 1 + e-, kinetic energy (MeV) = 3.24898, position (cm) = (-3.49679,-2.76541,200), weight = 1 + gamma, kinetic energy (MeV) = 0.052727, position (cm) = (-3.63663,-2.5864,200), weight = 1 + gamma, kinetic energy (MeV) = 7.0021, position (cm) = (-5.2337,-1.82551,200), weight = 1 + gamma, kinetic energy (MeV) = 1.11878, position (cm) = (-4.58622,-2.1235,200), weight = 1 + gamma, kinetic energy (MeV) = 21.4101, position (cm) = (-1.01445,0.542335,200), weight = 1 + gamma, kinetic energy (MeV) = 14.2529, position (cm) = (-0.338629,0.986625,200), weight = 1 + gamma, kinetic energy (MeV) = 1.48858, position (cm) = (13.5284,10.1531,200), weight = 1 + gamma, kinetic energy (MeV) = 0.798069, position (cm) = (-10.4645,14.7317,200), weight = 1 + gamma, kinetic energy (MeV) = 0.584314, position (cm) = (0.966776,0.168354,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0796886, position (cm) = (4.27864,5.72282,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0818546, position (cm) = (-14.0829,-9.29563,200), weight = 1 + gamma, kinetic energy (MeV) = 12.5578, position (cm) = (-42.0925,-16.4345,200), weight = 1 + gamma, kinetic energy (MeV) = 16.0359, position (cm) = (3.14566,-4.27364,200), weight = 1 + gamma, kinetic energy (MeV) = 7.12537, position (cm) = (-0.555096,8.21714,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0837874, position (cm) = (3.56891,-4.58571,200), weight = 1 + gamma, kinetic energy (MeV) = 2.39443, position (cm) = (-4.77286,0.989401,200), weight = 1 + gamma, kinetic energy (MeV) = 96.5633, position (cm) = (3.7565,-3.80042,200), weight = 1 + gamma, kinetic energy (MeV) = 0.862354, position (cm) = (-1.11775,-2.45635,200), weight = 1 + gamma, kinetic energy (MeV) = 13.1223, position (cm) = (0.786803,-1.51501,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0523544, position (cm) = (2.38157,-4.20451,200), weight = 1 + gamma, kinetic energy (MeV) = 35.5863, position (cm) = (2.77289,-3.38273,200), weight = 1 + gamma, kinetic energy (MeV) = 23.1721, position (cm) = (-14.5442,-3.81,200), weight = 1 + gamma, kinetic energy (MeV) = 1.54929, position (cm) = (0.656762,-1.6986,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0833799, position (cm) = (-3.01164,-3.50145,200), weight = 1 + gamma, kinetic energy (MeV) = 0.115541, position (cm) = (0.213637,13.9247,200), weight = 1 + gamma, kinetic energy (MeV) = 0.171476, position (cm) = (-7.99156,-5.71055,200), weight = 1 + gamma, kinetic energy (MeV) = 5.34349, position (cm) = (-3.44165,-4.07166,200), weight = 1 + gamma, kinetic energy (MeV) = 3.79004, position (cm) = (-15.2732,-22.6969,200), weight = 1 + gamma, kinetic energy (MeV) = 11.923, position (cm) = (-23.6377,16.6614,200), weight = 1 + gamma, kinetic energy (MeV) = 0.441789, position (cm) = (-6.54354,38.7413,200), weight = 1 + gamma, kinetic energy (MeV) = 0.313168, position (cm) = (24.9817,-34.8252,200), weight = 1 + gamma, kinetic energy (MeV) = 0.522475, position (cm) = (-23.1393,-39.4231,200), weight = 1 + gamma, kinetic energy (MeV) = 18.2917, position (cm) = (-8.49806,-0.546122,200), weight = 1 + gamma, kinetic energy (MeV) = 0.103997, position (cm) = (-7.98733,24.8793,200), weight = 1 + gamma, kinetic energy (MeV) = 2.01231, position (cm) = (21.5205,1.70444,200), weight = 1 + gamma, kinetic energy (MeV) = 1.39161, position (cm) = (-2.04554,-0.41959,200), weight = 1 + e-, kinetic energy (MeV) = 9.21581, position (cm) = (-1.61808,1.06273,200), weight = 1 + gamma, kinetic energy (MeV) = 0.622312, position (cm) = (0.0187561,1.7958,200), weight = 1 + gamma, kinetic energy (MeV) = 2.53925, position (cm) = (-1.30033,1.18459,200), weight = 1 + gamma, kinetic energy (MeV) = 14.4174, position (cm) = (-3.06764,-0.484528,200), weight = 1 + gamma, kinetic energy (MeV) = 4.36198, position (cm) = (-0.502356,24.6341,200), weight = 1 + gamma, kinetic energy (MeV) = 12.2742, position (cm) = (14.8743,-21.447,200), weight = 1 + gamma, kinetic energy (MeV) = 7.03333, position (cm) = (-0.488154,-5.32486,200), weight = 1 + gamma, kinetic energy (MeV) = 0.127058, position (cm) = (-9.66775,-7.63512,200), weight = 1 + gamma, kinetic energy (MeV) = 0.275819, position (cm) = (-11.9728,-5.24692,200), weight = 1 + gamma, kinetic energy (MeV) = 6.3351, position (cm) = (3.30495,-5.62091,200), weight = 1 + gamma, kinetic energy (MeV) = 0.489276, position (cm) = (3.3626,-10.9031,200), weight = 1 + gamma, kinetic energy (MeV) = 0.459781, position (cm) = (-1.10723,-3.04429,200), weight = 1 + gamma, kinetic energy (MeV) = 57.1055, position (cm) = (0.0330011,-0.652246,200), weight = 1 + gamma, kinetic energy (MeV) = 4.80653, position (cm) = (-26.7906,-2.39505,200), weight = 1 + gamma, kinetic energy (MeV) = 12.3441, position (cm) = (13.8574,4.81575,200), weight = 1 + gamma, kinetic energy (MeV) = 0.548204, position (cm) = (54.4925,-20.5004,200), weight = 1 + gamma, kinetic energy (MeV) = 0.112443, position (cm) = (4.79808,3.54705,200), weight = 1 + gamma, kinetic energy (MeV) = 8.18972, position (cm) = (-5.4119,1.32039,200), weight = 1 + gamma, kinetic energy (MeV) = 3.05205, position (cm) = (-11.738,-19.2652,200), weight = 1 + gamma, kinetic energy (MeV) = 0.369797, position (cm) = (-15.6622,3.87826,200), weight = 1 + gamma, kinetic energy (MeV) = 2.96651, position (cm) = (1.19584,-9.54121,200), weight = 1 + gamma, kinetic energy (MeV) = 6.10087, position (cm) = (2.30384,-15.1967,200), weight = 1 + gamma, kinetic energy (MeV) = 0.417335, position (cm) = (1.87659,-16.5324,200), weight = 1 + gamma, kinetic energy (MeV) = 0.211088, position (cm) = (-6.25582,-8.82596,200), weight = 1 + gamma, kinetic energy (MeV) = 10.0407, position (cm) = (-10.937,-2.7981,200), weight = 1 + gamma, kinetic energy (MeV) = 0.123082, position (cm) = (-20.3345,-30.0558,200), weight = 1 + gamma, kinetic energy (MeV) = 2.11826, position (cm) = (-2.86057,5.5677,200), weight = 1 + gamma, kinetic energy (MeV) = 0.153103, position (cm) = (-6.21782,3.48151,200), weight = 1 + gamma, kinetic energy (MeV) = 9.93226, position (cm) = (-6.99428,1.3224,200), weight = 1 + gamma, kinetic energy (MeV) = 0.274111, position (cm) = (-20.9513,-10.7311,200), weight = 1 + gamma, kinetic energy (MeV) = 1.51491, position (cm) = (16.47,-9.21163,200), weight = 1 + gamma, kinetic energy (MeV) = 0.831109, position (cm) = (-13.3944,-6.32553,200), weight = 1 + gamma, kinetic energy (MeV) = 26.3566, position (cm) = (1.09205,-6.40554,200), weight = 1 + gamma, kinetic energy (MeV) = 0.231795, position (cm) = (-7.11244,2.1514,200), weight = 1 + gamma, kinetic energy (MeV) = 5.28496, position (cm) = (-4.84157,1.29494,200), weight = 1 + gamma, kinetic energy (MeV) = 1.64374, position (cm) = (-3.88838,-0.982661,200), weight = 1 + gamma, kinetic energy (MeV) = 0.117671, position (cm) = (-4.69421,8.38982,200), weight = 1 + gamma, kinetic energy (MeV) = 0.114449, position (cm) = (-3.73879,0.271525,200), weight = 1 + gamma, kinetic energy (MeV) = 1.9349, position (cm) = (-8.86346,13.1873,200), weight = 1 + gamma, kinetic energy (MeV) = 17.4432, position (cm) = (3.08125,6.35369,200), weight = 1 + gamma, kinetic energy (MeV) = 3.92203, position (cm) = (-11.6259,-14.9344,200), weight = 1 + gamma, kinetic energy (MeV) = 8.01148, position (cm) = (3.69662,8.56226,200), weight = 1 + gamma, kinetic energy (MeV) = 0.351135, position (cm) = (7.91489,-22.1118,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0826982, position (cm) = (-9.46833,-2.28962,200), weight = 1 + gamma, kinetic energy (MeV) = 1.61475, position (cm) = (13.4706,8.58829,200), weight = 1 + gamma, kinetic energy (MeV) = 0.194858, position (cm) = (-23.4668,23.592,200), weight = 1 + gamma, kinetic energy (MeV) = 1.47952, position (cm) = (-30.992,-23.2258,200), weight = 1 + gamma, kinetic energy (MeV) = 0.164256, position (cm) = (7.4618,3.08425,200), weight = 1 + gamma, kinetic energy (MeV) = 2.2165, position (cm) = (-5.87994,-2.18564,200), weight = 1 + gamma, kinetic energy (MeV) = 2.64835, position (cm) = (3.37561,-13.7684,200), weight = 1 + gamma, kinetic energy (MeV) = 2.85499, position (cm) = (-26.012,6.10238,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0684078, position (cm) = (12.2551,26.4039,200), weight = 1 + gamma, kinetic energy (MeV) = 13.3916, position (cm) = (-12.8918,-23.9875,200), weight = 1 + gamma, kinetic energy (MeV) = 0.319831, position (cm) = (6.29211,6.18966,200), weight = 1 + gamma, kinetic energy (MeV) = 10.1029, position (cm) = (14.2208,-8.71031,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0977335, position (cm) = (-0.0105556,-29.5179,200), weight = 1 + gamma, kinetic energy (MeV) = 0.140763, position (cm) = (-11.8844,-4.09647,200), weight = 1 + gamma, kinetic energy (MeV) = 3.56358, position (cm) = (13.6401,9.9945,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0984508, position (cm) = (3.72071,-3.51922,200), weight = 1 + gamma, kinetic energy (MeV) = 15.2459, position (cm) = (4.06322,-4.43932,200), weight = 1 + gamma, kinetic energy (MeV) = 0.747972, position (cm) = (-6.18218,16.9982,200), weight = 1 + gamma, kinetic energy (MeV) = 0.116544, position (cm) = (-29.9998,12.0169,200), weight = 1 + gamma, kinetic energy (MeV) = 0.898005, position (cm) = (-3.80589,1.39961,200), weight = 1 + gamma, kinetic energy (MeV) = 3.95688, position (cm) = (-1.19075,0.0768775,200), weight = 1 + gamma, kinetic energy (MeV) = 2.79162, position (cm) = (-19.35,7.42945,200), weight = 1 + gamma, kinetic energy (MeV) = 0.10057, position (cm) = (-2.40695,-46.2565,200), weight = 1 + gamma, kinetic energy (MeV) = 0.330582, position (cm) = (0.00742366,-0.452671,200), weight = 1 Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB07/include/GB07ActionInitialization.hh b/examples/extended/biasing/GB07/include/GB07ActionInitialization.hh index 52313a9661..776176478e 100644 --- a/examples/extended/biasing/GB07/include/GB07ActionInitialization.hh +++ b/examples/extended/biasing/GB07/include/GB07ActionInitialization.hh @@ -39,10 +39,10 @@ class GB07ActionInitialization : public G4VUserActionInitialization { public: GB07ActionInitialization(); - virtual ~GB07ActionInitialization(); + ~GB07ActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/biasing/GB07/include/GB07BOptrLeadingParticle.hh b/examples/extended/biasing/GB07/include/GB07BOptrLeadingParticle.hh index ffc46ab2cd..db1f926120 100644 --- a/examples/extended/biasing/GB07/include/GB07BOptrLeadingParticle.hh +++ b/examples/extended/biasing/GB07/include/GB07BOptrLeadingParticle.hh @@ -39,27 +39,27 @@ class GB07BOptrLeadingParticle : public G4VBiasingOperator { public: GB07BOptrLeadingParticle(G4String operatorName = "LeadingParticleBiasingOperator"); - virtual ~GB07BOptrLeadingParticle(); + ~GB07BOptrLeadingParticle() override; private: // ----------------------------- // -- Mandatory from base class: // ----------------------------- // -- Unsused: - virtual G4VBiasingOperation* - ProposeNonPhysicsBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeNonPhysicsBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { return nullptr; } // -- Unused: - virtual G4VBiasingOperation* - ProposeOccurenceBiasingOperation(const G4Track*, const G4BiasingProcessInterface*) final + G4VBiasingOperation* ProposeOccurenceBiasingOperation(const G4Track*, + const G4BiasingProcessInterface*) final { return nullptr; } // -- Used: // -- Will return the biasing operation at the final state generation stage - virtual G4VBiasingOperation* + G4VBiasingOperation* ProposeFinalStateBiasingOperation(const G4Track* track, const G4BiasingProcessInterface* callingProcess) final; @@ -67,8 +67,8 @@ class GB07BOptrLeadingParticle : public G4VBiasingOperator // ------------------------------------ // -- Optional methods from base class: // ------------------------------------ - virtual void StartRun() final; - virtual void StartTracking(const G4Track* track) final; + void StartRun() final; + void StartTracking(const G4Track* track) final; private: // -- The leading particle biasing operation that will actually diff --git a/examples/extended/biasing/GB07/include/GB07DetectorConstruction.hh b/examples/extended/biasing/GB07/include/GB07DetectorConstruction.hh index 251d7b4ab3..02a92503fc 100644 --- a/examples/extended/biasing/GB07/include/GB07DetectorConstruction.hh +++ b/examples/extended/biasing/GB07/include/GB07DetectorConstruction.hh @@ -38,11 +38,11 @@ class GB07DetectorConstruction : public G4VUserDetectorConstruction { public: GB07DetectorConstruction(G4bool bf); - ~GB07DetectorConstruction(); + ~GB07DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; private: G4bool fBiasingFlag; diff --git a/examples/extended/biasing/GB07/include/GB07PrimaryGeneratorAction.hh b/examples/extended/biasing/GB07/include/GB07PrimaryGeneratorAction.hh index a865ba7407..3aea04d52a 100644 --- a/examples/extended/biasing/GB07/include/GB07PrimaryGeneratorAction.hh +++ b/examples/extended/biasing/GB07/include/GB07PrimaryGeneratorAction.hh @@ -40,9 +40,9 @@ class GB07PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: GB07PrimaryGeneratorAction(); - virtual ~GB07PrimaryGeneratorAction(); + ~GB07PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; private: G4ParticleGun* fParticleGun; // pointer a to G4 class diff --git a/examples/extended/biasing/GB07/include/GB07SD.hh b/examples/extended/biasing/GB07/include/GB07SD.hh index 38ae07297f..74b482b883 100644 --- a/examples/extended/biasing/GB07/include/GB07SD.hh +++ b/examples/extended/biasing/GB07/include/GB07SD.hh @@ -37,10 +37,10 @@ class GB07SD : public G4VSensitiveDetector { public: GB07SD(G4String name); - virtual ~GB07SD(); //// {} + ~GB07SD() override; //// {} - virtual void Initialize(G4HCofThisEvent*) {} - virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist); + void Initialize(G4HCofThisEvent*) override {} + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/biasing/GB07/src/GB07DetectorConstruction.cc b/examples/extended/biasing/GB07/src/GB07DetectorConstruction.cc index 2ef564e522..9082c8f535 100644 --- a/examples/extended/biasing/GB07/src/GB07DetectorConstruction.cc +++ b/examples/extended/biasing/GB07/src/GB07DetectorConstruction.cc @@ -42,13 +42,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB07DetectorConstruction::GB07DetectorConstruction(G4bool bf) : - G4VUserDetectorConstruction(), - fBiasingFlag(bf) {} +GB07DetectorConstruction::GB07DetectorConstruction(G4bool bf) : fBiasingFlag(bf) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GB07DetectorConstruction::~GB07DetectorConstruction() {} +GB07DetectorConstruction::~GB07DetectorConstruction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -59,17 +57,17 @@ G4VPhysicalVolume* GB07DetectorConstruction::Construct() G4VSolid* solidWorld = new G4Box("World", 10 * m, 10 * m, 10 * m); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, // its solid - worldMaterial, // its material - "World"); // its name + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + worldMaterial, // its material + "World"); // its name - G4PVPlacement* physiWorld = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - logicWorld, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + auto physiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number // ----------------------------------- // -- volume where biasing is applied: @@ -77,11 +75,11 @@ G4VPhysicalVolume* GB07DetectorConstruction::Construct() G4double halfZ = 1 * m; G4VSolid* solidTest = new G4Box("test.solid", 1 * m, 1 * m, halfZ); - G4LogicalVolume* logicTest = new G4LogicalVolume(solidTest, // its solid - defaultMaterial, // its material - "test.logical"); // its name + auto logicTest = new G4LogicalVolume(solidTest, // its solid + defaultMaterial, // its material + "test.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, halfZ), // put entrance at (0,0,0) logicTest, // its logical volume "test.physical", // its name @@ -94,11 +92,11 @@ G4VPhysicalVolume* GB07DetectorConstruction::Construct() // ------------------------------------------------------------ G4double halfZtally = 0.5 * mm; G4VSolid* solidTally = new G4Box("tally.solid", 1 * m, 1 * m, halfZtally); - G4LogicalVolume* logicTally = new G4LogicalVolume(solidTally, // its solid - worldMaterial, // its material - "tally.logical"); // its name + auto logicTally = new G4LogicalVolume(solidTally, // its solid + worldMaterial, // its material + "tally.logical"); // its name - new G4PVPlacement(0, // no rotation + new G4PVPlacement(nullptr, // no rotation G4ThreeVector(0, 0, 2 * halfZ + halfZtally), // put next to test.phys logicTally, // its logical volume "tally.physical", // its name @@ -113,17 +111,17 @@ G4VPhysicalVolume* GB07DetectorConstruction::Construct() void GB07DetectorConstruction::ConstructSDandField() { - if(fBiasingFlag) { + if (fBiasingFlag) { // -- Fetch volume for biasing: G4LogicalVolume* logicTest = G4LogicalVolumeStore::GetInstance()->GetVolume("test.logical"); // ---------------------------------------------- // -- operator creation and attachment to volume: // ---------------------------------------------- - GB07BOptrLeadingParticle* testMany = new GB07BOptrLeadingParticle(); + auto testMany = new GB07BOptrLeadingParticle(); testMany->AttachTo(logicTest); G4cout << " Attaching biasing operator " << testMany->GetName() << " to logical volume " - << logicTest->GetName() << G4endl; + << logicTest->GetName() << G4endl; } // --------------------------------------------------------------------------------- // -- Attach sensitive detector to print information on particle exiting the shield: diff --git a/examples/extended/biasing/GB07/src/GB07SD.cc b/examples/extended/biasing/GB07/src/GB07SD.cc index 83ed7d4d84..16e373cd8a 100644 --- a/examples/extended/biasing/GB07/src/GB07SD.cc +++ b/examples/extended/biasing/GB07/src/GB07SD.cc @@ -53,4 +53,4 @@ G4bool GB07SD::ProcessHits(G4Step* step, G4TouchableHistory*) return true; } -GB07SD::~GB07SD() {} +GB07SD::~GB07SD() = default; diff --git a/examples/extended/biasing/History b/examples/extended/biasing/History index 4d519ae0a4..b50a6aeb62 100644 --- a/examples/extended/biasing/History +++ b/examples/extended/biasing/History @@ -4,6 +4,10 @@ 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-03-14 Igor Semeniouk (exbiasing-V11-03-00) +- The clang-tidy, clang-format applied on code of all GBXX examples ## 2024-03-20 L.G. Sarmiento (exbiasing-V11-02-00) - Fixed broken link from "Further information:" diff --git a/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out b/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out index c12b804393..e7a0cb6b67 100644 --- a/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out +++ b/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out @@ -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", @@ -87,6 +88,7 @@ End of Run User Vis Actions: none Some /vis commands (optionally) take a string to specify colour. "/vis/list" to see available colours. +### G4VEnergyLossProcess::SetLossFluctuations has no effect and will be removed for the next major release G4AdjointPhysicsList::SetCuts:CutLength : 1 mm G4AdjointPhysicsList::SetCuts:CutLength : 10 um /adjoint/DefineExtSourceOnExtSurfaceOfAVolume Shielding @@ -132,7 +134,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 ======== @@ -426,7 +428,7 @@ nb event 195000 Run terminated. Run Summary Number of events processed : 200000 - User=34.810000s Real=34.912663s Sys=0.050000s + User=36.570000s Real=36.717281s Sys=0.080000s Results of reverse/adjoint simulation! normalised edep [MeV] = 0.00163827 error[MeV] = 1.70862e-05 diff --git a/examples/extended/common/common.out b/examples/extended/common/common.out index 52f749bfdb..7d31145e75 100644 --- a/examples/extended/common/common.out +++ b/examples/extended/common/common.out @@ -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", @@ -127,13 +128,13 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000180s Sys=0.000000s + User=0.000000s Real=0.000177s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1bd3e70 -UserPhysicsList deleted 0x1e34cd0 +UserDetectorConstruction deleted 0x1e38090 +UserPhysicsList deleted 0x2098e70 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/electromagnetic/TestEm0/TestEm0.out b/examples/extended/electromagnetic/TestEm0/TestEm0.out index 83e736197f..ed485efa8b 100644 --- a/examples/extended/electromagnetic/TestEm0/TestEm0.out +++ b/examples/extended/electromagnetic/TestEm0/TestEm0.out @@ -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 @@ -59,7 +59,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 ======== @@ -159,7 +159,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000270s Sys=0.000000s + User=0.000000s Real=0.000281s Sys=0.000000s Material: Water density: 1.000 g/cm3 RadL: 36.092 cm Nucl.Int.Length: 75.356 cm Imean: 78.000 eV temperature: 293.15 K pressure: 1.00 atm @@ -228,7 +228,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000141s Sys=0.000000s + User=0.000000s Real=0.000150s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.012 MB diff --git a/examples/extended/electromagnetic/TestEm1/TestEm1.out b/examples/extended/electromagnetic/TestEm1/TestEm1.out index 00353ab08d..d8e184fe18 100644 --- a/examples/extended/electromagnetic/TestEm1/TestEm1.out +++ b/examples/extended/electromagnetic/TestEm1/TestEm1.out @@ -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 @@ -77,7 +77,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 ======== @@ -159,7 +159,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 ======== @@ -636,7 +636,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 2000 - User=0.710000s Real=0.714576s Sys=0.000000s + User=0.750000s Real=0.750252s Sys=0.000000s ======================== run summary ====================== @@ -708,7 +708,7 @@ N=17 V[N]={1176734187215063284, 2107189873979932999, 1691597703571750464, 162858 Run terminated. Run Summary Number of events processed : 2000 - User=0.040000s Real=0.032608s Sys=0.000000s + User=0.030000s Real=0.035679s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm10/TestEm10.out b/examples/extended/electromagnetic/TestEm10/TestEm10.out index bfd5c0084f..e40a408125 100644 --- a/examples/extended/electromagnetic/TestEm10/TestEm10.out +++ b/examples/extended/electromagnetic/TestEm10/TestEm10.out @@ -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 @@ -68,7 +68,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 ======== @@ -218,10 +218,10 @@ Lorentz Factor XTR photon number 8.085e+04 3.154 9.283e+04 3.154 -total time for build X-ray TR energy loss tables = 0.18 s +total time for build X-ray TR energy loss tables = 0.2 s Build angle for energy distribution according the current radiator -total time for build X-ray TR angle for energy loss tables = 0.76 s +total time for build X-ray TR angle for energy loss tables = 0.78 s msc: for e+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -311,7 +311,7 @@ Lorentz Factor XTR photon number total time for build X-ray TR energy loss tables = 0.18 s Build angle for energy distribution according the current radiator -total time for build X-ray TR angle for energy loss tables = 0.76 s +total time for build X-ray TR angle for energy loss tables = 0.77 s msc: for proton SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -635,7 +635,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.110000s Real=0.114984s Sys=0.000000s + User=0.170000s Real=0.169243s Sys=0.000000s ================== run summary ===================== End of Run TotNbofEvents = 1000 Mean energy deposit in absorber = 0.0479535 +-0.0189569 MeV diff --git a/examples/extended/electromagnetic/TestEm11/TestEm11.out b/examples/extended/electromagnetic/TestEm11/TestEm11.out index e8e7b6df08..fcd63fdae5 100644 --- a/examples/extended/electromagnetic/TestEm11/TestEm11.out +++ b/examples/extended/electromagnetic/TestEm11/TestEm11.out @@ -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 @@ -99,7 +99,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 ======== @@ -549,7 +549,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20000 - User=0.510000s Real=0.505610s Sys=0.000000s + User=0.560000s Real=0.561909s Sys=0.000000s ======================== run summary ===================== diff --git a/examples/extended/electromagnetic/TestEm12/TestEm12.out b/examples/extended/electromagnetic/TestEm12/TestEm12.out index 1442170f3e..927e0421bb 100644 --- a/examples/extended/electromagnetic/TestEm12/TestEm12.out +++ b/examples/extended/electromagnetic/TestEm12/TestEm12.out @@ -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 @@ -92,7 +92,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 ======== @@ -545,7 +545,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.480000s Real=0.480787s Sys=0.000000s + User=0.540000s Real=0.542943s Sys=0.000000s ======================== run summary ===================== diff --git a/examples/extended/electromagnetic/TestEm13/History b/examples/extended/electromagnetic/TestEm13/History index 3a9be524e9..8dbf58df99 100644 --- a/examples/extended/electromagnetic/TestEm13/History +++ b/examples/extended/electromagnetic/TestEm13/History @@ -4,6 +4,9 @@ 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-03-04 Michel Maire (testem13-V11-03-00) +- PhysListEmStandard::ContructProcess() : add G4RayleighScattering + ## 2024-04-17 Michel Maire (testem13-V11-02-00) - Readme: document macros diff --git a/examples/extended/electromagnetic/TestEm13/TestEm13.out b/examples/extended/electromagnetic/TestEm13/TestEm13.out index 6e679c64b6..4ef72178d6 100644 --- a/examples/extended/electromagnetic/TestEm13/TestEm13.out +++ b/examples/extended/electromagnetic/TestEm13/TestEm13.out @@ -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 @@ -46,7 +46,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 ======== @@ -189,24 +189,24 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000000 - User=1.120000s Real=1.126357s Sys=0.000000s + User=1.290000s Real=1.288257s Sys=0.000000s ======================== run summary ====================== The run is: 1000000 gamma of 100 keV through 1 cm of Water (density: 1 g/cm3 ) - Process calls frequency ---> Transportation = 848096 compt = 149476 phot = 2428 + Process calls frequency ---> Rayl = 4955 Transportation = 844405 compt = 148239 phot = 2401 - Nb of incident particles unaltered after 1 cm of Water : 848096 over 1000000 incident particles. Ratio = 84.81 % - ---> CrossSection per volume: 0.16476 cm^-1 CrossSection per mass: 16.476 mm2/g + Nb of incident particles unaltered after 1 cm of Water : 844405 over 1000000 incident particles. Ratio = 84.441 % + ---> CrossSection per volume: 0.16912 cm^-1 CrossSection per mass: 16.912 mm2/g Verification from G4EmCalculator: - compt= 16.23 mm2/g phot= 268.53 um2/mg total= 16.499 mm2/g - Expected ratio of transmitted particles= 84.791 % + Rayl= 534.01 um2/mg compt= 16.23 mm2/g phot= 268.53 um2/mg total= 17.033 mm2/g + Expected ratio of transmitted particles= 84.339 % --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1086040262, 1913236415 + Current couple of seeds = 772734458, 1459207632 ---------------------------------------- # /gun/particle e- @@ -241,7 +241,7 @@ Index : 0 used in the geometry : Yes --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1086040262, 1913236415 + Current couple of seeds = 772734458, 1459207632 ---------------------------------------- --> Event 0 starts. --> Event 100000 starts. @@ -256,16 +256,16 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=1.210000s Real=1.207784s Sys=0.000000s + User=1.310000s Real=1.313090s Sys=0.000000s ======================== run summary ====================== The run is: 1000000 e- of 100 MeV through 1 cm of Water (density: 1 g/cm3 ) - Process calls frequency ---> Transportation = 538247 eBrem = 281308 eIoni = 180445 + Process calls frequency ---> Transportation = 538457 eBrem = 281214 eIoni = 180329 - Nb of incident particles unaltered after 1 cm of Water : 538247 over 1000000 incident particles. Ratio = 53.825 % - ---> CrossSection per volume: 0.61944 cm^-1 CrossSection per mass: 61.944 mm2/g + Nb of incident particles unaltered after 1 cm of Water : 538457 over 1000000 incident particles. Ratio = 53.846 % + ---> CrossSection per volume: 0.61905 cm^-1 CrossSection per mass: 61.905 mm2/g Verification from G4EmCalculator: eBrem= 37.79 mm2/g eIoni= 24.204 mm2/g total= 61.994 mm2/g @@ -273,13 +273,13 @@ Run Summary --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1537749914, 1160203484 + Current couple of seeds = 1901640664, 2019519510 ---------------------------------------- G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0x162e660 -UserPhysicsList deleted 0x18e0f80 -UserActionInitialization deleted 0x1a61fa0 +UserDetectorConstruction deleted 0xf5ce50 +UserPhysicsList deleted 0x1210630 +UserActionInitialization deleted 0x1391ec0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc index 67bce13507..d33a56834b 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc @@ -84,7 +84,7 @@ void PhysListEmStandard::ConstructProcess() G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { - ////pmanager->AddDiscreteProcess(new G4RayleighScattering); + pmanager->AddDiscreteProcess(new G4RayleighScattering); pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); G4ComptonScattering* compt = new G4ComptonScattering; compt->SetEmModel(new G4KleinNishinaModel()); diff --git a/examples/extended/electromagnetic/TestEm14/History b/examples/extended/electromagnetic/TestEm14/History index 9cdc2a9439..7bcda38b99 100644 --- a/examples/extended/electromagnetic/TestEm14/History +++ b/examples/extended/electromagnetic/TestEm14/History @@ -4,6 +4,9 @@ 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-03-04 Michel Maire (testem14-V11-03-00) +- PhysListEmStandard::ContructProcess() : add G4RayleighScattering + ## 2024-04-17 Michel Maire (testem14-V11-02-00) - Readme: document macros diff --git a/examples/extended/electromagnetic/TestEm14/TestEm14.out b/examples/extended/electromagnetic/TestEm14/TestEm14.out index e289f96241..24d9003044 100644 --- a/examples/extended/electromagnetic/TestEm14/TestEm14.out +++ b/examples/extended/electromagnetic/TestEm14/TestEm14.out @@ -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 @@ -46,7 +46,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 ======== @@ -189,26 +189,26 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000000 - User=1.780000s Real=1.794547s Sys=0.000000s + User=2.130000s Real=2.126872s Sys=0.000000s ======================== run summary ====================== The run is: 1000000 gamma of 100 keV through 100 m of Water (density: 1 g/cm3 ) - Process calls frequency ---> compt = 983651 phot = 16349 + Process calls frequency ---> Rayl = 31729 compt = 952523 phot = 15748 - MeanFreePath: 6.0662 cm +- 6.0666 cm massic: 6.0662 g/cm2 - CrossSection: 0.16485 cm^-1 massic: 16.485 mm2/g + MeanFreePath: 5.8773 cm +- 5.8715 cm massic: 5.8773 g/cm2 + CrossSection: 0.17014 cm^-1 massic: 17.014 mm2/g - mean energy of charged secondaries: 15.197 keV - ---> mass_energy_transfer coef: 2.5052 mm2/g + mean energy of charged secondaries: 14.711 keV + ---> mass_energy_transfer coef: 2.503 mm2/g Verification : crossSections from G4EmCalculator - compt= 16.23 mm2/g phot= 268.53 um2/mg total= 16.499 mm2/g + Rayl= 534.01 um2/mg compt= 16.23 mm2/g phot= 268.53 um2/mg total= 17.033 mm2/g --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1063437675, 1656850928 + Current couple of seeds = 1155111439, 149055422 ---------------------------------------- # /gun/particle e- @@ -244,7 +244,7 @@ Index : 0 used in the geometry : Yes --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1063437675, 1656850928 + Current couple of seeds = 1155111439, 149055422 ---------------------------------------- --> Event 0 starts. --> Event 100000 starts. @@ -259,32 +259,32 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=1.640000s Real=1.634469s Sys=0.000000s + User=1.920000s Real=1.923403s Sys=0.000000s ======================== run summary ====================== The run is: 1000000 e- of 100 MeV through 100 m of Water (density: 1 g/cm3 ) - Process calls frequency ---> eBrem = 609756 eIoni = 390244 + Process calls frequency ---> eBrem = 609990 eIoni = 390010 - MeanFreePath: 1.6136 cm +- 1.614 cm massic: 1.6136 g/cm2 - CrossSection: 0.61974 cm^-1 massic: 61.974 mm2/g + MeanFreePath: 1.6123 cm +- 1.6124 cm massic: 1.6123 g/cm2 + CrossSection: 0.62023 cm^-1 massic: 62.023 mm2/g - mean energy of charged secondaries: 744.57 keV - ---> mass_energy_transfer coef: 461.44 um2/mg + mean energy of charged secondaries: 743.47 keV + ---> mass_energy_transfer coef: 461.13 um2/mg Verification : crossSections from G4EmCalculator eBrem= 37.79 mm2/g eIoni= 24.204 mm2/g total= 61.994 mm2/g --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1492903586, 1751099484 + Current couple of seeds = 484143605, 1973228044 ---------------------------------------- G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0xb2a660 -UserPhysicsList deleted 0xddf790 -UserActionInitialization deleted 0xf609d0 +UserDetectorConstruction deleted 0xd08270 +UserPhysicsList deleted 0xfbde40 +UserActionInitialization deleted 0x113f8f0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc index 0274b5ca08..7f9329bba0 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc @@ -84,7 +84,7 @@ void PhysListEmStandard::ConstructProcess() G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { - ////pmanager->AddDiscreteProcess(new G4RayleighScattering); + pmanager->AddDiscreteProcess(new G4RayleighScattering); pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); G4ComptonScattering* compt = new G4ComptonScattering; compt->SetEmModel(new G4KleinNishinaModel()); diff --git a/examples/extended/electromagnetic/TestEm15/.README.txt b/examples/extended/electromagnetic/TestEm15/.README.txt index feb941de8a..ecdc170b04 100644 --- a/examples/extended/electromagnetic/TestEm15/.README.txt +++ b/examples/extended/electromagnetic/TestEm15/.README.txt @@ -7,12 +7,13 @@ How to compute and plot the final state of: - Multiple Scattering - Gamma Conversion + considered as an isolated processes, see \link TestEm15_s4 PHYSICS \endlink . For Multiple Scattering, the method is exposed below. For Gamma Conversion, when G4BetheHeitler5DModel Model is used, -see \link ExampleTestEm15_GC README.gamma \endlink for Histograms and UI commands description. +see \link ExampleTestEm15_GC \endlink for Histograms and UI commands description. \section TestEm15_s1 GEOMETRY DEFINITION @@ -146,7 +147,6 @@ Idle> exit The example of Gamma Conversion macro: - gamma.mac - gamma to e+ e- - - gamma2mumu.mac gamma to mu+ mu- \subpage ExampleTestEm15_GC @@ -154,12 +154,11 @@ Idle> exit \section TestEm15_gc_s0 Gamma Conversion macros: - gamma.mac - tests of the 5D gamma -> e+ e- conversion model G4BetheHeitler5DModel - - gamma2mumu.mac - tests of the 5D gamma -> mu+ mu- conversion model G4BetheHeitler5DModel All discrete processes are inactivated (see macro), so Gamma Conversion is 'forced'. -\section TestEm15_gc_s1 HISTOGRAMS +\section TestEm15_gc_s1 HISTOGRAMS for gamma conversion - 10 : Open Angle (rad)* E gamma (MeV). @@ -242,15 +241,4 @@ The perimeter values: - false - (default) atomic electron screening - true - conversion on isolated particles -\subsection TestEm15_gc_s3 One more command for G4GammaConversionToMuons - -To enable gamma to mu+ mu- conversion use command: - -\verbatim -/process/em/max5DMuPairEnergy emax5D units -\endverbatim -The conversion disabled by default, emax5D set to 0.0 - -__The model tested for the energies about the threshold up to PeV range__. - */ diff --git a/examples/extended/electromagnetic/TestEm15/CMakeLists.txt b/examples/extended/electromagnetic/TestEm15/CMakeLists.txt index 9b661557cd..b07640a2da 100644 --- a/examples/extended/electromagnetic/TestEm15/CMakeLists.txt +++ b/examples/extended/electromagnetic/TestEm15/CMakeLists.txt @@ -40,8 +40,7 @@ target_link_libraries(TestEm15 ${Geant4_LIBRARIES} ) # relies on these scripts being in the current working directory. # set(TestEm15_SCRIPTS - gamma.mac gamma2mumu.mac - electron.mac muon.mac proton.mac + gamma.mac electron.mac muon.mac proton.mac TestEm15.in TestEm15.out vis.mac ) diff --git a/examples/extended/electromagnetic/TestEm15/History b/examples/extended/electromagnetic/TestEm15/History index b09118a95d..4bf89264f0 100644 --- a/examples/extended/electromagnetic/TestEm15/History +++ b/examples/extended/electromagnetic/TestEm15/History @@ -4,6 +4,11 @@ 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-04-15 Igor Semeniouk (testem15-V11-03-00) + - update gamma.mac to use emstandard_opt4 + - merge README and README.gamma, .README.txt updated + - gamma2mumu.mac, README.gamma removed + ## 2024-04-16 Michel Maire (testem15-V11-02-00) - SteppingAction.cc: remove a TABS diff --git a/examples/extended/electromagnetic/TestEm15/README b/examples/extended/electromagnetic/TestEm15/README index 79740051c5..5449035932 100644 --- a/examples/extended/electromagnetic/TestEm15/README +++ b/examples/extended/electromagnetic/TestEm15/README @@ -14,8 +14,7 @@ For Multiple Scattering, the method is exposed below. - For Gamma Conversion, when G4BetheHeitler5DModel Model is used, - see README.gamma for Histograms and UI commands description. + For Gamma Conversion, when G4BetheHeitler5DModel Model is used. 1- GEOMETRY DEFINITION @@ -132,4 +131,74 @@ The example of Gamma Conversion macro: gamma.mac - gamma to e+ e- - gamma2mumu.mac gamma to mu+ mu- + +9 - HISTOGRAMS for gamma conversion + + 10 # Open Angle (rad)* E gamma (MeV) +The most probable value of the e+ e- pair opening angle multiplied by the +photon energy is 1.6 rad*MeV and 338 rad*MeV in case mu+ mu- pair. +See: Olsen, Phys. Rev. 131 (1963) 406. +See also: Fig. 7 of arXiv:1802.08253 and Fig. 6 arXiv:1910.12501. + + 11 # Log10 ( recoil momentum) +The distribution of the recoil momentum is described by +Jost, Phys. Rev. 80 (1950) 189 (no form factor). +See also Fig. 2 of Astroparticle Physics 88 (2017) 60. + + 12 # Phi recoil + 13 # Phi positron + For linearly polarized incident photons, the distributions should show + a sinusoidal shape with period 180°, for non polarized incident photons, + the distribution of azimuthal angles should be flat. + + + 14 # Asymmetry 2 * cos(phi_+ + phi_-) +For a photon propagating along x, polarized along y, +the average value of ( 2.0 * cos(phi_+ + phi_-) ), +provides a measurement of the polarization asymmetry, A. +Eq. (12) of Nucl. Instrum. Meth. A 729 (2013) 765 +The azimuthal angle of the event defined as the bisector angle +of the azimuthal angles of the positron and of the electron, +(phi_+ + phi_-)/2, +provides the optimal measurement of the asymmetry +Astroparticle Physics 88 (2017) 30. + +For high-energy photons (E >> 20 MeV), the asymptotic expression for A +can be used for comparison. +Boldyshev, Yad. Fiz. 14 (1971) 1027, Sov.J.Nucl.Phys. 14 (1972) 576. +See also eq. (13) of arXiv:1802.08253 +Example : A ~ 0.17 at 100 GeV. + + 15 # E plus / E gamma +x_+ = E plus / E gamma has a more-or-less flat spectrum that extends +almost from 0. to 1. +See Fig. 16 page 261 of "The Quantum Theory of Radiation", W. Heitler, +3rd edition, 1954. + + 16 # Phi of Gamma Polarization +The phi of polarization vector after transformation into reference system + defined by gamma direction (z) , gamma polarization (x). + +10 - UI COMMANDS + +There are two commands to control G4BetheHeitler5DModel: + +/process/gconv/conversionType itype +/process/gconv/onIsolated bool + +The command: +/process/gconv/conversionType + +Allow to force conversion on nuclear or electron +The parameter values +0 - (default) both triplet and nuclear conversion in proportion triplet/nuclear 1/Z +1 - force nuclear conversion +2 - force triplet + +The command: +/process/gconv/onIsolated + +Allow simulate conversion on isolated particles without screening +The perimeter values: +false - (default) atomic electron screening +true - conversion on isolated particles diff --git a/examples/extended/electromagnetic/TestEm15/README.gamma b/examples/extended/electromagnetic/TestEm15/README.gamma deleted file mode 100644 index 9b8c22fa64..0000000000 --- a/examples/extended/electromagnetic/TestEm15/README.gamma +++ /dev/null @@ -1,89 +0,0 @@ -TestEm15 : gamma.mac gamma2mumu.mac - - - gamma.mac - - tests of the 5D gamma -> e+ e- conversion model G4BetheHeitler5DModel - - gamma2mumu.mac - - tests of the 5D gamma -> mu+ mu- conversion model G4BetheHeitler5DModel - -All discrete processes are inactivated (see macro), -so Gamma Conversion is 'forced'. - -Histograms : - - 10 # Open Angle (rad)* E gamma (MeV) -The most probable value of the e+ e- pair opening angle multiplied by the -photon energy is 1.6 rad*MeV and 338 rad*MeV in case mu+ mu- pair. -See: Olsen, Phys. Rev. 131 (1963) 406. -See also: Fig. 7 of arXiv:1802.08253 and Fig. 6 arXiv:1910.12501. - - 11 # Log10 ( recoil momentum) -The distribution of the recoil momentum is described by -Jost, Phys. Rev. 80 (1950) 189 (no form factor). -See also Fig. 2 of Astroparticle Physics 88 (2017) 60. - - 12 # Phi recoil - 13 # Phi positron - For linearly polarized incident photons, the distributions should show - a sinusoidal shape with period 180°, for non polarized incident photons, - the distribution of azimuthal angles should be flat. - - - 14 # Asymmetry 2 * cos(phi_+ + phi_-) -For a photon propagating along x, polarized along y, -the average value of ( 2.0 * cos(phi_+ + phi_-) ), -provides a measurement of the polarization asymmetry, A. -Eq. (12) of Nucl. Instrum. Meth. A 729 (2013) 765 -The azimuthal angle of the event defined as the bisector angle -of the azimuthal angles of the positron and of the electron, -(phi_+ + phi_-)/2, -provides the optimal measurement of the asymmetry -Astroparticle Physics 88 (2017) 30. - -For high-energy photons (E >> 20 MeV), the asymptotic expression for A -can be used for comparison. -Boldyshev, Yad. Fiz. 14 (1971) 1027, Sov.J.Nucl.Phys. 14 (1972) 576. -See also eq. (13) of arXiv:1802.08253 -Example : A ~ 0.17 at 100 GeV. - - 15 # E plus / E gamma -x_+ = E plus / E gamma has a more-or-less flat spectrum that extends -almost from 0. to 1. -See Fig. 16 page 261 of "The Quantum Theory of Radiation", W. Heitler, -3rd edition, 1954. - - 16 # Phi of Gamma Polarization -The phi of polarization vector after transformation into reference system - defined by gamma direction (z) , gamma polarization (x). - -UI commands: - -There are two commands to control G4BetheHeitler5DModel: - -/process/gconv/conversionType itype -/process/gconv/onIsolated bool - -The command: -/process/gconv/conversionType - -Allow to force conversion on nuclear or electron -The parameter values -0 - (default) both triplet and nuclear conversion in proportion triplet/nuclear 1/Z -1 - force nuclear conversion -2 - force triplet - -The command: -/process/gconv/onIsolated - -Allow simulate conversion on isolated particles without screening -The perimeter values: -false - (default) atomic electron screening -true - conversion on isolated particles - -One more command for G4GammaConversionToMuons. - -To enable gamma to mu+ mu- conversion use command: - -/process/em/max5DMuPairEnergy emax5D units -The conversion disabled by default, emax5D set to 0.0 - -The model tested for the energies about the threshold up to PeV range. diff --git a/examples/extended/electromagnetic/TestEm15/TestEm15.out b/examples/extended/electromagnetic/TestEm15/TestEm15.out index 5ed0dd7907..b391a4ee4c 100644 --- a/examples/extended/electromagnetic/TestEm15/TestEm15.out +++ b/examples/extended/electromagnetic/TestEm15/TestEm15.out @@ -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 @@ -257,7 +257,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 ======== @@ -569,7 +569,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.020000s Real=0.021718s Sys=0.000000s + User=0.030000s Real=0.026824s Sys=0.000000s The run consists of 10000 e- of 5 MeV through 100 m of Water (density: 1 g/cm3 ) @@ -641,7 +641,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.027519s Sys=0.000000s + User=0.030000s Real=0.031065s Sys=0.000000s The run consists of 10000 e- of 100 keV through 100 m of Water (density: 1 g/cm3 ) @@ -670,8 +670,8 @@ N=17 V[N]={310976880687426508, 1713548588833330960, 1561521303267605489, 5885692 --------------------------------------- G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0xdf3fe0 -UserPhysicsList deleted 0xe37880 +UserDetectorConstruction deleted 0x15a45a0 +UserPhysicsList deleted 0x15e7c20 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/electromagnetic/TestEm15/gamma.mac b/examples/extended/electromagnetic/TestEm15/gamma.mac index 335a75ce06..53fac1b892 100644 --- a/examples/extended/electromagnetic/TestEm15/gamma.mac +++ b/examples/extended/electromagnetic/TestEm15/gamma.mac @@ -7,16 +7,19 @@ # /testem/det/setMat Aluminium # -/testem/phys/addPhysics emstandard5D +/testem/phys/addPhysics emstandard_opt4 +/process/em/UseGeneralProcess false # /run/initialize # /run/setCut 1 mm # +/process/list /process/inactivate phot /process/inactivate compt /process/inactivate Rayl -/process/inactivate GammaToMuPair +# +/process/dump Electromagnetic gamma # # direction 1 0 0 /gun/particle gamma diff --git a/examples/extended/electromagnetic/TestEm15/gamma2mumu.mac b/examples/extended/electromagnetic/TestEm15/gamma2mumu.mac deleted file mode 100644 index d94e9ec9cc..0000000000 --- a/examples/extended/electromagnetic/TestEm15/gamma2mumu.mac +++ /dev/null @@ -1,61 +0,0 @@ -# -# Macro file for "TestEm15.cc" -# (can be run in batch, without graphic) -# -/control/verbose 2 -/run/verbose 2 -# -/testem/det/setMat Aluminium -/testem/det/setSize 4000 m -# -/testem/phys/addPhysics emstandard5D -# activete 5d model for gamma -> mu+ mu+ and seet high E limit -/process/em/verbose 1 -/process/em/max5DMuPairEnergy 1 TeV -# -/run/initialize -# -/run/setCut 1 mm -# -/process/inactivate phot -/process/inactivate compt -/process/inactivate Rayl -/process/inactivate conv -# -# direction 1 0 0 -/gun/particle gamma -/gun/energy 800 GeV -/gun/polarization 0.0 1.0 0.0 -# -/analysis/setFileName gamma2mumu -# -# msc -# -#/analysis/setActivation true -#/analysis/verbose 4 -#/analysis/h1/set 1 100 0 1000 um #true step length -#/analysis/h1/set 2 100 0 1000 um #geom step length -#/analysis/h1/set 3 100 0 1.1 none #ratio geom/true -#/analysis/h1/set 4 100 0 500 um #lateral radius -#/analysis/h1/set 5 100 0 +25 deg #psi_space angle -#/analysis/h1/set 6 100 -50 +50 deg #theta_plane angle -#/analysis/h1/set 7 90 -180 +180 deg #phi-position angle -#/analysis/h1/set 8 90 -180 +180 deg #phi-direction angle -#/analysis/h1/set 9 100 -1 +1 none #phi correlation -# -# conv -# -/control/alias pi 3.141592653589793 -# -/analysis/h1/set 10 100 0.0 1000.0 MeV # Open Angle (rad)* E gamma (MeV) -/analysis/h1/set 11 100 -2.0 4.0 none # Log10 ( recoil momentum) -/analysis/h1/set 12 100 -{pi} {pi} none # Phi recoil -/analysis/h1/set 13 100 -{pi} {pi} none # Phi positron -/analysis/h1/set 14 100 -2.0 2.0 none # Asymmentry 2 * cos(phi_+ + phi_-) -/analysis/h1/set 15 100 0.0 1.0 none # E plus / E gamma -/analysis/h1/set 16 100 -{pi} {pi} none # Phi of Gamma Polarization -# -###/tracking/verbose 2 -###/run/beamOn 1 -# -/run/beamOn 100000 diff --git a/examples/extended/electromagnetic/TestEm16/TestEm16.out b/examples/extended/electromagnetic/TestEm16/TestEm16.out index e345c7c834..be0244f62b 100644 --- a/examples/extended/electromagnetic/TestEm16/TestEm16.out +++ b/examples/extended/electromagnetic/TestEm16/TestEm16.out @@ -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 @@ -128,7 +128,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 ======== @@ -337,7 +337,7 @@ G4SynchrotronRadiation::GetRandomEnergySR : Run terminated. Run Summary Number of events processed : 100 - User=0.100000s Real=0.098979s Sys=0.000000s + User=0.120000s Real=0.124169s Sys=0.000000s Summary for synchrotron radiation : Number of photons = 64566 Emean = 20.42 +/- 0.1465 keV diff --git a/examples/extended/electromagnetic/TestEm17/TestEm17.out b/examples/extended/electromagnetic/TestEm17/TestEm17.out index 5c51556610..9dcb0112f7 100644 --- a/examples/extended/electromagnetic/TestEm17/TestEm17.out +++ b/examples/extended/electromagnetic/TestEm17/TestEm17.out @@ -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 @@ -171,7 +171,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 ======== @@ -635,7 +635,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.670000s Real=0.675375s Sys=0.010000s + User=0.760000s Real=0.759853s Sys=0.000000s The run consists of 10000 mu+ of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) @@ -691,7 +691,7 @@ N=17 V[N]={882454084924701664, 2270259229220857311, 818577390581940897, 14266040 Run terminated. Run Summary Number of events processed : 10000 - User=0.610000s Real=0.612530s Sys=0.000000s + User=0.690000s Real=0.683477s Sys=0.000000s The run consists of 10000 pi+ of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) @@ -746,7 +746,7 @@ N=17 V[N]={2103257823577124208, 469380737387581810, 386042433805554138, 18024306 Run terminated. Run Summary Number of events processed : 10000 - User=0.570000s Real=0.575665s Sys=0.000000s + User=0.610000s Real=0.614610s Sys=0.000000s The run consists of 10000 proton of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) @@ -755,8 +755,8 @@ Run Summary # G4 kernel has come to Quit state. Deleting G4Run (id:2) -UserDetectorConstruction deleted 0x1a21ca0 -UserPhysicsList deleted 0x1a60b18 +UserDetectorConstruction deleted 0x23c6260 +UserPhysicsList deleted 0x2404eb8 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/electromagnetic/TestEm18/History b/examples/extended/electromagnetic/TestEm18/History index 8c6fb26259..9ec70ed1f7 100644 --- a/examples/extended/electromagnetic/TestEm18/History +++ b/examples/extended/electromagnetic/TestEm18/History @@ -4,6 +4,9 @@ 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-03-04 Michel Maire (testem18-V11-03-00) +- PhysListEmStandard::ContructProcess() : add G4RayleighScattering + ## 2023-05-17 Michel Maire (testem18-V11-01-00) - revision of all headers - ~StakingAction() : delete StackingMessenger* diff --git a/examples/extended/electromagnetic/TestEm18/TestEm18.out b/examples/extended/electromagnetic/TestEm18/TestEm18.out index a3215df6c0..c26c714728 100644 --- a/examples/extended/electromagnetic/TestEm18/TestEm18.out +++ b/examples/extended/electromagnetic/TestEm18/TestEm18.out @@ -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 @@ -46,7 +46,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 ======== @@ -131,7 +131,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 ======== @@ -221,7 +221,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.290000s Real=0.290754s Sys=0.000000s + User=0.330000s Real=0.327317s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc index a9acf5ff62..f58902e856 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc @@ -89,7 +89,7 @@ void PhysListEmStandard::ConstructProcess() G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { - ////list->RegisterProcess(new G4RayleighScattering, particle); + list->RegisterProcess(new G4RayleighScattering, particle); list->RegisterProcess(new G4PhotoElectricEffect, particle); G4ComptonScattering* compt = new G4ComptonScattering; compt->SetEmModel(new G4KleinNishinaModel()); diff --git a/examples/extended/electromagnetic/TestEm2/History b/examples/extended/electromagnetic/TestEm2/History index 133734ce5b..a2972f02a1 100644 --- a/examples/extended/electromagnetic/TestEm2/History +++ b/examples/extended/electromagnetic/TestEm2/History @@ -4,6 +4,11 @@ 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-05-27 V.Ivanchenko (testem2-V11-03-00) +- ActionInitialisation, DetectorConstruction, + RunAction - removed memory leak at exit, + instantiate field messenger differently. + ## 2024-04-03 Michel Maire (testem2-V11-02-00) - Readme: document stepMax.mac diff --git a/examples/extended/electromagnetic/TestEm2/TestEm2.out b/examples/extended/electromagnetic/TestEm2/TestEm2.out index 99e046a9c2..b41e425856 100644 --- a/examples/extended/electromagnetic/TestEm2/TestEm2.out +++ b/examples/extended/electromagnetic/TestEm2/TestEm2.out @@ -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 @@ -60,7 +60,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 ======== @@ -166,7 +166,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 ======== @@ -595,6 +595,10 @@ Index : 0 used in the geometry : Yes mixmax state, file version 1.0 N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008233404568, 2262190991329242458, 2266470399991071809, 1976726662926872232, 245458862506414172, 1955974201201518530, 2155248512522080758, 604170912935414061, 1116171330120743511, 1861018313684488333, 1296715403254578286, 1549011045957234151, 370819759640195970, 2230139271784837643} counter= 17sumtot= 1977567618660788324 --------------------------------------- +... set ntuple merging row mode : row-wise - done +... create file : testem2.root - done +... open analysis file : testem2.root - done +... open analysis file : testem2.root - done ----> Histogram file is opened in testem2.root. --> Event 0 starts. @@ -605,7 +609,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100 - User=1.140000s Real=1.144151s Sys=0.000000s + User=1.170000s Real=1.169567s Sys=0.010000s LOGITUDINAL PROFILE CUMULATIVE LOGITUDINAL PROFILE bin Mean rms bin Mean rms diff --git a/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh index a1e88ccac8..bb3bc6c4ed 100644 --- a/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh @@ -32,6 +32,7 @@ #include "G4VUserActionInitialization.hh" class DetectorConstruction; +class PrimaryGeneratorAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -39,13 +40,14 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - ~ActionInitialization() override = default; + ~ActionInitialization() override; void Build() const override; void BuildForMaster() const override; private: DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fKin = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh index 392727ff3b..acc80e8499 100644 --- a/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh @@ -33,12 +33,12 @@ #ifndef DetectorConstruction_h #define DetectorConstruction_h 1 -#include "G4Cache.hh" #include "G4Material.hh" #include "G4ThreeVector.hh" #include "G4VPhysicalVolume.hh" #include "G4VUserDetectorConstruction.hh" #include "globals.hh" +#include "G4Threading.hh" class G4Tubs; class G4LogicalVolume; @@ -57,8 +57,8 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: void SetMaterial(const G4String&); - void SetLBining(G4ThreeVector); - void SetRBining(G4ThreeVector); + void SetLBining(const G4ThreeVector&); + void SetRBining(const G4ThreeVector&); G4VPhysicalVolume* Construct() override; @@ -96,7 +96,9 @@ class DetectorConstruction : public G4VUserDetectorConstruction DetectorMessenger* fDetectorMessenger = nullptr; // pointer to the Messenger - G4Cache fFieldMessenger = nullptr; + // global field manager + static G4ThreadLocal G4GlobalMagFieldMessenger* fMagFieldMessenger; + }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/Run.hh b/examples/extended/electromagnetic/TestEm2/include/Run.hh index 3a663fd7fe..381d71970e 100644 --- a/examples/extended/electromagnetic/TestEm2/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm2/include/Run.hh @@ -34,9 +34,8 @@ #define Run_h 1 #include "DetectorConstruction.hh" - -#include "G4AnalysisManager.hh" #include "G4Run.hh" +#include "G4AnalysisManager.hh" #include typedef std::vector MyVector; diff --git a/examples/extended/electromagnetic/TestEm2/include/RunAction.hh b/examples/extended/electromagnetic/TestEm2/include/RunAction.hh index 2927b33c54..a6fdb6a986 100644 --- a/examples/extended/electromagnetic/TestEm2/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/RunAction.hh @@ -33,9 +33,9 @@ #ifndef RunAction_h #define RunAction_h 1 -#include "G4AnalysisManager.hh" -#include "G4ThreeVector.hh" #include "G4UserRunAction.hh" +#include "G4ThreeVector.hh" +#include "G4AnalysisManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc index fbbefccc22..7fd444bbcc 100644 --- a/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc @@ -32,10 +32,24 @@ #include "RunAction.hh" #include "SteppingAction.hh" #include "TrackingAction.hh" +#include "G4Threading.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ActionInitialization::ActionInitialization(DetectorConstruction* det) : fDetector(det) {} +ActionInitialization::ActionInitialization(DetectorConstruction* det) + : fDetector(det) +{ + if (G4Threading::IsMultithreadedApplication()) { + fKin = new PrimaryGeneratorAction(fDetector); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ActionInitialization::~ActionInitialization() +{ + delete fKin; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -54,7 +68,7 @@ void ActionInitialization::Build() const void ActionInitialization::BuildForMaster() const { - SetUserAction(new RunAction(fDetector, new PrimaryGeneratorAction(fDetector))); + SetUserAction(new RunAction(fDetector, fKin)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc index 215b4b613b..254d3283de 100644 --- a/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc @@ -32,9 +32,7 @@ #include "DetectorConstruction.hh" #include "DetectorMessenger.hh" - #include "G4AutoDelete.hh" -#include "G4GeometryManager.hh" #include "G4GlobalMagFieldMessenger.hh" #include "G4LogicalVolume.hh" #include "G4LogicalVolumeStore.hh" @@ -49,6 +47,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4ThreadLocal +G4GlobalMagFieldMessenger* DetectorConstruction::fMagFieldMessenger = nullptr; + DetectorConstruction::DetectorConstruction() { DefineMaterials(); @@ -116,7 +117,7 @@ void DetectorConstruction::UpdateParameters() fDRlength = fDRradl * Radl; fEcalLength = fNLtot * fDLlength; fEcalRadius = fNRtot * fDRlength; - if (fSolidEcal) { + if (nullptr != fSolidEcal) { fSolidEcal->SetOuterRadius(fEcalRadius); fSolidEcal->SetZHalfLength(0.5 * fEcalLength); } @@ -130,7 +131,7 @@ G4VPhysicalVolume* DetectorConstruction::Construct() // // Ecal // - if (!fPhysiEcal) { + if (nullptr == fPhysiEcal) { fSolidEcal = new G4Tubs("Ecal", 0., fEcalRadius, 0.5 * fEcalLength, 0., 360 * deg); fLogicEcal = new G4LogicalVolume(fSolidEcal, fMaterial, "Ecal", 0, 0, 0); fPhysiEcal = new G4PVPlacement(0, G4ThreeVector(), fLogicEcal, "Ecal", 0, false, 0); @@ -154,7 +155,7 @@ void DetectorConstruction::SetMaterial(const G4String& materialChoice) if (pttoMaterial && fMaterial != pttoMaterial) { fMaterial = pttoMaterial; - if (fLogicEcal) { + if (nullptr != fLogicEcal) { fLogicEcal->SetMaterial(fMaterial); } G4RunManager::GetRunManager()->PhysicsHasBeenModified(); @@ -163,7 +164,7 @@ void DetectorConstruction::SetMaterial(const G4String& materialChoice) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetLBining(G4ThreeVector Value) +void DetectorConstruction::SetLBining(const G4ThreeVector& Value) { fNLtot = (G4int)Value(0); if (fNLtot > kMaxBin) { @@ -177,7 +178,7 @@ void DetectorConstruction::SetLBining(G4ThreeVector Value) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetRBining(G4ThreeVector Value) +void DetectorConstruction::SetRBining(const G4ThreeVector& Value) { fNRtot = (G4int)Value(0); if (fNRtot > kMaxBin) { @@ -193,16 +194,16 @@ void DetectorConstruction::SetRBining(G4ThreeVector Value) void DetectorConstruction::ConstructSDandField() { - if (fFieldMessenger.Get() == nullptr) { - // Create global magnetic field messenger. - // Uniform magnetic field is then created automatically if - // the field value is not zero. - G4ThreeVector fieldValue = G4ThreeVector(); - G4GlobalMagFieldMessenger* msg = new G4GlobalMagFieldMessenger(fieldValue); - // msg->SetVerboseLevel(1); - G4AutoDelete::Register(msg); - fFieldMessenger.Put(msg); - } + // Create global magnetic field + // Create global magnetic field messenger. + // Uniform magnetic field is then created automatically if + // the field value is not zero. + G4ThreeVector fieldValue = G4ThreeVector(); + fMagFieldMessenger = new G4GlobalMagFieldMessenger(fieldValue); + fMagFieldMessenger->SetVerboseLevel(1); + + // Register the field messenger for deleting + G4AutoDelete::Register(fMagFieldMessenger); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/src/RunAction.cc b/examples/extended/electromagnetic/TestEm2/src/RunAction.cc index fd5d11e2ec..36b6b3a86a 100644 --- a/examples/extended/electromagnetic/TestEm2/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/RunAction.cc @@ -53,6 +53,7 @@ RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) : f // The choice of analysis technology is done via selection of a namespace fAnalysisManager = G4AnalysisManager::Instance(); fAnalysisManager->SetDefaultFileType("root"); + fAnalysisManager->SetVerboseLevel(1); // Set the default file name "testem2" // which can be then redefine in a macro via UI command @@ -70,12 +71,8 @@ RunAction::~RunAction() void RunAction::BookHisto() { - // Get analysis manager - fAnalysisManager = G4AnalysisManager::Instance(); - // Open an output file fAnalysisManager->OpenFile(); - fAnalysisManager->SetVerboseLevel(1); // Creating histograms // diff --git a/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out b/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out index 7b938ab03b..dfcc5f2896 100644 --- a/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out +++ b/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out @@ -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 @@ -99,7 +99,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 ======== diff --git a/examples/extended/electromagnetic/TestEm3/TestEm3.out b/examples/extended/electromagnetic/TestEm3/TestEm3.out index 9271b463b0..217b235eee 100644 --- a/examples/extended/electromagnetic/TestEm3/TestEm3.out +++ b/examples/extended/electromagnetic/TestEm3/TestEm3.out @@ -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 @@ -108,7 +108,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 ======== @@ -550,7 +550,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.690000s Real=0.691042s Sys=0.000000s + User=0.770000s Real=0.776283s Sys=0.000000s ------------------------------------------------------------ material Edep RMS sqrt(E0(GeV))*rmsE/Emean total tracklen @@ -625,7 +625,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.590000s Real=0.590957s Sys=0.000000s + User=0.640000s Real=0.639217s Sys=0.000000s ------------------------------------------------------------ material Edep RMS sqrt(E0(GeV))*rmsE/Emean total tracklen diff --git a/examples/extended/electromagnetic/TestEm4/History b/examples/extended/electromagnetic/TestEm4/History index 913561d7b2..f44ea0f6a9 100644 --- a/examples/extended/electromagnetic/TestEm4/History +++ b/examples/extended/electromagnetic/TestEm4/History @@ -4,6 +4,9 @@ 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-03-04 Michel Maire (testem4-V11-03-00) +- PhysicsList::ContructProcess() : add G4RayleighScattering + ## 2024-04-22 Vladimir Ivantchenko (testem4-V11-02-01) - PhysicsLists - fixed annoyng warnings on decay table, removed obsolete methods. diff --git a/examples/extended/electromagnetic/TestEm4/TestEm4.out b/examples/extended/electromagnetic/TestEm4/TestEm4.out index 3fa99c545e..25355b0852 100644 --- a/examples/extended/electromagnetic/TestEm4/TestEm4.out +++ b/examples/extended/electromagnetic/TestEm4/TestEm4.out @@ -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 @@ -64,7 +64,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 ======== @@ -111,6 +111,12 @@ Type of nuclear form-factor 1 Screening factor 1 ======================================================================= +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 7 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 62 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + phot: for gamma SubType=12 BuildTable=0 LambdaPrime table from 200 keV to 100 TeV in 61 bins ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -214,24 +220,24 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 100000 - User=0.350000s Real=0.344177s Sys=0.000000s + User=0.440000s Real=0.438394s Sys=0.000000s --------------------End of Global Run------------------------ The run consists of 100000 gamma of 9 MeV in a volume of C6F6 - Energy deposit per event: mean = 921.134 keV rms = 2.34106 MeV + Energy deposit per event: mean = 925.061 keV rms = 2.34694 MeV ------------------------------------------------------------ --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 417036897, 829731305 + Current couple of seeds = 427142008, 238030671 ---------------------------------------- ... write file : testem4.root - done ... close file : testem4.root - done G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x168da50 -UserPhysicsList deleted 0x168ec60 -UserActionInitialization deleted 0x16f26c0 +UserDetectorConstruction deleted 0x22a3100 +UserPhysicsList deleted 0x22a4310 +UserActionInitialization deleted 0x2308790 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -249,12 +255,12 @@ 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 '17G4DynamicParticle', size : 0.00288 MB -Pool ID '7G4Track', size : 0.00577 MB +Pool ID '17G4DynamicParticle', size : 0.00385 MB +Pool ID '7G4Track', size : 0.00673 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 0.021 MB +Dynamic pools deleted: 9 / Total memory freed: 0.023 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc index 7b56b9edf4..4ae4bc674e 100644 --- a/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc @@ -43,6 +43,7 @@ #include "G4PhotoElectricEffect.hh" #include "G4PhysicsListHelper.hh" #include "G4ProcessManager.hh" +#include "G4RayleighScattering.hh" #include "G4SystemOfUnits.hh" #include "G4eBremsstrahlung.hh" #include "G4eIonisation.hh" @@ -81,6 +82,7 @@ void PhysicsList::ConstructProcess() G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { + ph->RegisterProcess(new G4RayleighScattering, particle); ph->RegisterProcess(new G4PhotoElectricEffect, particle); ph->RegisterProcess(new G4ComptonScattering, particle); ph->RegisterProcess(new G4GammaConversion, particle); diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out b/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out index 6b37a865af..d7c6df84a4 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out @@ -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 @@ -105,7 +105,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000268s Sys=0.000000s + User=0.000000s Real=0.000331s Sys=0.000000s ======================== run summary ====================== @@ -185,7 +185,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 6 - User=0.000000s Real=0.000031s Sys=0.000000s + User=0.000000s Real=0.000045s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out b/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out index 458d70b549..ee23f8dbea 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out @@ -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 @@ -78,7 +78,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 ======== @@ -239,7 +239,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=32.600000s Real=32.648936s Sys=0.010000s + User=35.380000s Real=35.465336s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5.out b/examples/extended/electromagnetic/TestEm5/TestEm5.out index 0af2635c44..ac03d073bc 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5.out @@ -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 @@ -94,7 +94,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 ======== @@ -518,7 +518,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=0.400000s Real=0.400880s Sys=0.000000s + User=0.490000s Real=0.489714s Sys=0.000000s ======================== run summary ====================== @@ -618,7 +618,7 @@ N=17 V[N]={910941890323901813, 1015746291667433571, 1849782191790666821, 2179466 Run terminated. Run Summary Number of events processed : 50000 - User=0.300000s Real=0.294913s Sys=0.000000s + User=0.390000s Real=0.391249s Sys=0.000000s ======================== run summary ====================== @@ -723,7 +723,7 @@ N=17 V[N]={1900512211198940772, 1890227061717900871, 2082969366185794521, 717329 Run terminated. Run Summary Number of events processed : 50000 - User=0.820000s Real=0.822345s Sys=0.000000s + User=0.940000s Real=0.985252s Sys=0.000000s ======================== run summary ====================== @@ -834,7 +834,7 @@ N=17 V[N]={721215474158146395, 563948681617651029, 983967623568370346, 107031027 Run terminated. Run Summary Number of events processed : 50000 - User=0.220000s Real=0.228394s Sys=0.000000s + User=0.220000s Real=0.289550s Sys=0.000000s ======================== run summary ====================== @@ -946,7 +946,7 @@ N=17 V[N]={586188805523696918, 1131603525368056635, 2135194985283342976, 1988102 Run terminated. Run Summary Number of events processed : 50000 - User=3.820000s Real=3.843700s Sys=0.000000s + User=4.340000s Real=4.374063s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm6/TestEm6.out b/examples/extended/electromagnetic/TestEm6/TestEm6.out index 048adaea85..ae0ac347b5 100644 --- a/examples/extended/electromagnetic/TestEm6/TestEm6.out +++ b/examples/extended/electromagnetic/TestEm6/TestEm6.out @@ -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 @@ -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 ======== @@ -276,7 +276,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000450s Sys=0.000000s + User=0.000000s Real=0.000560s Sys=0.000000s ### RunAction::EndOfRunAction Number of process calls ---> GammaToMuPair : 5 @@ -395,7 +395,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000266s Sys=0.000000s + User=0.000000s Real=0.000405s Sys=0.000000s ### RunAction::EndOfRunAction Number of process calls ---> AnnihiToMuPair : 2 ee2hadr : 3 @@ -419,8 +419,8 @@ Run Summary # G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0x7e04a0 -UserPhysicsList deleted 0x819ae0 +UserDetectorConstruction deleted 0x2440b50 +UserPhysicsList deleted 0x247a190 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/electromagnetic/TestEm7/TestEm7.out b/examples/extended/electromagnetic/TestEm7/TestEm7.out index 66bad19781..1a6415e03f 100644 --- a/examples/extended/electromagnetic/TestEm7/TestEm7.out +++ b/examples/extended/electromagnetic/TestEm7/TestEm7.out @@ -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 @@ -167,7 +167,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 ======== @@ -592,7 +592,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=2.750000s Real=2.750484s Sys=0.000000s + User=2.990000s Real=3.000320s Sys=0.000000s The run consists of 10000 proton of 160 MeV through 20 cm of G4_WATER (density: 1 g/cm3 ) @@ -652,7 +652,7 @@ N=17 V[N]={1928752482960533917, 1537011110587309912, 992093420709832135, 4758505 Run terminated. Run Summary Number of events processed : 1000 - User=0.960000s Real=0.967156s Sys=0.000000s + User=1.070000s Real=1.071273s Sys=0.000000s The run consists of 1000 C12 of 3.5 GeV through 20 cm of G4_WATER (density: 1 g/cm3 ) @@ -723,7 +723,7 @@ N=17 V[N]={1914085016406179854, 1941870692113417104, 952751528242321116, 1425379 Run terminated. Run Summary Number of events processed : 1000 - User=0.480000s Real=0.476969s Sys=0.000000s + User=0.510000s Real=0.520219s Sys=0.000000s The run consists of 1000 kaon+ of 100 MeV through 20 cm of G4_Cu (density: 8.96 g/cm3 ) @@ -788,7 +788,7 @@ N=17 V[N]={802904847557501977, 1304012642077385197, 468862643498481156, 11809500 Run terminated. Run Summary Number of events processed : 100 - User=0.000000s Real=0.000201s Sys=0.000000s + User=0.000000s Real=0.000279s Sys=0.000000s The run consists of 100 alpha of 265 eV through 20 cm of TechVacuum (density: 0.01 mg/cm3) @@ -851,7 +851,7 @@ N=17 V[N]={1821026208194177978, 862958539362113243, 292898641549640933, 31117047 Run terminated. Run Summary Number of events processed : 100 - User=0.000000s Real=0.004303s Sys=0.000000s + User=0.010000s Real=0.004600s Sys=0.000000s The run consists of 100 alpha of 100 MeV through 20 cm of G4_WATER (density: 1 g/cm3 ) @@ -923,7 +923,7 @@ N=17 V[N]={989157427584633894, 2087952271038465535, 425056854451477234, 81706072 Run terminated. Run Summary Number of events processed : 10 - User=3.200000s Real=3.232881s Sys=0.040000s + User=3.510000s Real=3.552839s Sys=0.030000s The run consists of 10 Xe131 of 1.217 GeV through 20 cm of G4_Si (density: 2.33 g/cm3 ) @@ -1001,7 +1001,7 @@ N=17 V[N]={1169934708488790920, 195642384756332438, 661694816270983648, 84154454 Run terminated. Run Summary Number of events processed : 1000 - User=0.250000s Real=0.252789s Sys=0.000000s + User=0.310000s Real=0.306250s Sys=0.000000s The run consists of 1000 proton of 160 MeV through 20 cm of Water_1.05 (density: 1.05 g/cm3 ) diff --git a/examples/extended/electromagnetic/TestEm8/TestEm8.out b/examples/extended/electromagnetic/TestEm8/TestEm8.out index 5d9248bf20..1104a350ec 100644 --- a/examples/extended/electromagnetic/TestEm8/TestEm8.out +++ b/examples/extended/electromagnetic/TestEm8/TestEm8.out @@ -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 @@ -555,7 +555,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.010000s Real=0.009101s Sys=0.000000s + User=0.010000s Real=0.015762s Sys=0.000000s RunAction: End of run actions are started 1 Nevt= 1000 Edep= 0.0166294 ==================================================== Beam Particle: proton diff --git a/examples/extended/electromagnetic/TestEm9/TestEm9.out b/examples/extended/electromagnetic/TestEm9/TestEm9.out index 4b5d15383d..66ce5fb48d 100644 --- a/examples/extended/electromagnetic/TestEm9/TestEm9.out +++ b/examples/extended/electromagnetic/TestEm9/TestEm9.out @@ -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 @@ -74,7 +74,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 ======== @@ -605,7 +605,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.330000s Real=0.332817s Sys=0.000000s + User=0.340000s Real=0.340165s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 0 ================================================================= @@ -715,7 +715,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.520000s Real=0.517086s Sys=0.000000s + User=0.520000s Real=0.512789s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 1 ================================================================= @@ -838,7 +838,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.220000s Real=0.225123s Sys=0.000000s + User=0.250000s Real=0.242976s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 2 ================================================================= @@ -961,7 +961,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.250000s Real=0.243922s Sys=0.000000s + User=0.240000s Real=0.242505s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 3 ================================================================= diff --git a/examples/extended/errorpropagation/errProp/errProp.out b/examples/extended/errorpropagation/errProp/errProp.out index 5cc162c7ab..e0a139bac3 100644 --- a/examples/extended/errorpropagation/errProp/errProp.out +++ b/examples/extended/errorpropagation/errProp/errProp.out @@ -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 @@ -18,7 +18,7 @@ WWW : http://geant4.org/ ************************************************************** - creating G4RunManagerKernel 0x193b450 + creating G4RunManagerKernel 0x1670ff0 G4ChordFinder: stepperDriverId: 2 The materials defined are : @@ -94,15 +94,15 @@ G4Transportation: Current values for thresholds related to the killing of loop Important Energy = 250 ( above this tracks are given multiple chances ) Extra Trials = 10 'important' tracks, i.e. those above 'important' energy G4Transportation constructor> set fShortStepOptimisation to false -0x1bf30b0G4ErrorPhysicsList:: particle process manager e+ = 0x1bf7a00 -0x1bf2f10G4ErrorPhysicsList:: particle process manager e- = 0x1bf84e0 -0x1bf2d70G4ErrorPhysicsList:: particle process manager gamma = 0x1bf8690 -0x1bf4430G4ErrorPhysicsList:: particle process manager geantino = 0x1bfbac0 -0x1bf3290G4ErrorPhysicsList:: particle process manager mu+ = 0x1bfbd10 -0x1bf35e0G4ErrorPhysicsList:: particle process manager mu- = 0x1bfbf60 -0x1bf39c0G4ErrorPhysicsList:: particle process manager pi+ = 0x1bf7520 -0x1bf3de0G4ErrorPhysicsList:: particle process manager pi- = 0x1bfc090 -0x1bf4200G4ErrorPhysicsList:: particle process manager proton = 0x1bfc2e0 +0x1929680G4ErrorPhysicsList:: particle process manager e+ = 0x192dfd0 +0x19294e0G4ErrorPhysicsList:: particle process manager e- = 0x192eab0 +0x1929340G4ErrorPhysicsList:: particle process manager gamma = 0x192ec60 +0x192aa00G4ErrorPhysicsList:: particle process manager geantino = 0x192daf0 +0x1929860G4ErrorPhysicsList:: particle process manager mu+ = 0x1931ff0 +0x1929bb0G4ErrorPhysicsList:: particle process manager mu- = 0x19321c0 +0x1929f90G4ErrorPhysicsList:: particle process manager pi+ = 0x1932410 +0x192a3b0G4ErrorPhysicsList:: particle process manager pi- = 0x1932660 +0x192a7d0G4ErrorPhysicsList:: particle process manager proton = 0x19328b0 physicsList->CheckParticleList() start. physicsList->setCut() start. G4ChordFinder: stepperDriverId: 2 @@ -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 ======== diff --git a/examples/extended/eventgenerator/exgps/.README.txt b/examples/extended/eventgenerator/exgps/.README.txt index d85cdfb94d..23c3bfa6b8 100644 --- a/examples/extended/eventgenerator/exgps/.README.txt +++ b/examples/extended/eventgenerator/exgps/.README.txt @@ -41,27 +41,29 @@ This example implements an histo manager which creates histograms and ntuples using Geant4 analysis tools. - The output file contains 6 histograms and one ntuple: + The output file can contain the following histograms and one ntuple: - histo1D 1: energy spectrum. - histo1D 2: vertex: radial distribution dN/dv. - histo1D 3: angular distribution: cos(theta). - histo1D 4: angular distribution: phi. - histo2D 1: vertex position in the X-Y plane. - histo2D 2: vertex position in the X-Z plane. - histo2D 3: vertex position in the Y-Z plane. - histo2D 4: angular distribution: phi-cos(theta). - histo2D 5: angular distribution: of phi-theta. + - histo1D 1: energy spectrum. + - histo1D 2: vertex: radial distribution dN/dv. + - histo1D 3: angular distribution: cos(theta). + - histo1D 4: angular distribution: phi. + + - histo2D 1: vertex position in the X-Y plane. + - histo2D 2: vertex position in the X-Z plane. + - histo2D 3: vertex position in the Y-Z plane. + - histo2D 4: angular distribution: phi-cos(theta). + - histo2D 5: angular distribution: of phi-theta. In the ntuple the following data are recorded for each incident particle: - Particle ID - Incident Position (x,y,z); - Incident Angle (theta,phi); - Particle weight; + - Particle ID + - Kinetic energy (Ekin); + - Incident Position (x,y,z); + - Incident Angle (theta,phi); + - Particle weight; The histograms are managed by G4AnalysisManager class and its Messenger. - The histos can be individually activated with the command : + The histos, not activated by default, can be individually activated with the command : \verbatim /analysis/h1/set id nbBins valMin valMax unit \endverbatim @@ -81,6 +83,7 @@ - execute exgps in 'batch' mode from macro files \verbatim % exgps exgps.in + % exgps exgps_MT.in # larger number of events \endverbatim - execute exgps in 'interactive mode' with visualization @@ -95,7 +98,108 @@ \section exgps_s7 FURTHER EXAMPLES of MACRO FILES There are a number of mac files in the ./macros subdirectory, to show the - various features of GPS. - Please see macros/README file for further informations. + various features of GPS. + + - test01.mac : point source, isotropic radiation, monoenergetic + + - test02.mac : square plane source, cosine-law radiation, linear energy + + - test03.mac : rectangular plane source, isotropic radiation, power-law energy + + - test04.mac : circular plane source, cosine-law radiation, exponential energy + + - test05.mac : elliptical plane source, isotropic radiation, bremsstrahlung energy + + - test06.mac : spherical surface source, isotropic radiation, black-body energy + + - test07.mac : cylindrical surface source, cosine-law radiation, Cosmic diffuse energy + + - test08.mac : elliptical surface source, isotropic radiation, linear energy + + - test09.mac : parallepiped surface source, isotropic radiation, linear energy + + - test10.mac : spherical volume source, isotropic radiation, linear energy + + - test11.mac : cylindrical volume source, isotropic radiation, power-law energy + + - test12.mac : elliptical volume source, isotropic radiation, power-law energy + + - test13.mac : parallelepiped volume source, cosine-law radiation, exponential energy + + - test14.mac : rotated circular plane source, isotropic radiation, exponential energy + + - test15.mac : rotated surface cylinder source, isotropic radiation, bremsstrahlung energy + + - test16.mac : rotated parallelepiped volume source, isotropic radiation, bremsstrahlung energy + + - test17.mac : confined spherical volume source, isotropic radiation, exponential energy + + - test18.mac : square plane source, cosine-law radiation, user-defined energy histogram + + - test19.mac : square plane source, cosine-law radiation, arbitrary point-wise energy function + with linear interpolation. + + - test20.mac : square plane source, cosine-law radiation, arbitrary point-wise energy function + with logarithmic interpolation. + + - test21.mac : square plane source, cosine-law radiation, arbitrary point-wise energy function + with exponential interpolation. + + - test22.mac : square plane source, cosine-law radiation, arbitrary point-wise energy function + with spline interpolation. + + - test23.mac : square plane source with x and y biasing, user-defined theta and phi + distributions, user-defined EPN energy distribution. + + - test24.mac : spherical volume source with z biasing, isotropic radiation with theta and phi + biasing, arbitrary point-wise energy function with linear interpolation. + + - test25.mac : spherical volume source, isotropic radiation with theta and phi biasing, + user-defined energy histogram. + + - test26.mac : square plane source, cosine-law radiation with lower and upper theta and phi + limits, linear energy with biasing. + + - test27.mac : square plane source, user-defined theta, arbitrary point-wise energy function + with linear interpolation. + + - test28.mac : particle=ion, square plane source, isotropic radiation, monoenergetic energy. + + - test29.mac : plane source of type annulus, cosine-law radiation, exponential energy + + - test30.mac : rotated 1d beam source, Gaussian beam energy. + + - test31.mac : two-beam incidence, i.e. multiple sources with relative intensities. + + - test32.mac : Sphere volume source, with biasing in theta and phi + Isotropic directional distribution with theta and phi biasing. + + - test33.mac : Focused angular distribution. + + - test34.mac : Two simultaneous sources, both fired at the same time. + + - test35.mac : automatic biasing of the energy distribution sampling, original in power-law. + + - test36.mac : automatic biasing of the energy distribution sampling, original in arbitrary + data points. + + - test37.mac : automatic biasing of the energy distribution sampling, original in exponential + form. + + - test38.mac : arbitrary energy distribution, defined using the ascii input file: spectrum.dat + + All these test macros can be run via the runall.csh script and the resulting ROOT + files can be then analysed with the 'plotall.py' macro, calling internally + 'plotfiles.py': + +\verbatim +% ./macros/runall.csh +% python3 macros/plotall.py +\endverbatim + + In addition, the examples of ROOT macros plotHisto.C and plottest35.C are also available. + + More information is available at: + https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/GettingStarted/generalParticleSource.html */ diff --git a/examples/extended/eventgenerator/exgps/CMakeLists.txt b/examples/extended/eventgenerator/exgps/CMakeLists.txt index 222cfd2f83..2316335145 100644 --- a/examples/extended/eventgenerator/exgps/CMakeLists.txt +++ b/examples/extended/eventgenerator/exgps/CMakeLists.txt @@ -39,10 +39,18 @@ target_link_libraries(exgps ${Geant4_LIBRARIES} ) # build exgps. This is so that we can run the executable directly because it # relies on these scripts being in the current working directory. # + set(exgps_SCRIPTS - exgps_batch.in exgps.in exgps_MT.in macros/spectrum.dat plotHisto.C vis.mac + exgps.in exgps_MT.in vis.mac macros/spectrum.dat + macros/plotall.py macros/plotfiles.py macros/plotHisto.C macros/plottest35.C + macros/runall.csh ) +# add test macros +foreach(_i 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 32 33 34 35 36 37 38) + list(APPEND exgps_SCRIPTS "macros/test${_i}.mac") +endforeach() + foreach(_script ${exgps_SCRIPTS}) configure_file( ${PROJECT_SOURCE_DIR}/${_script} diff --git a/examples/extended/eventgenerator/exgps/History b/examples/extended/eventgenerator/exgps/History index 69f433689c..980b30423d 100644 --- a/examples/extended/eventgenerator/exgps/History +++ b/examples/extended/eventgenerator/exgps/History @@ -5,6 +5,21 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2025-06-17 I. Hrivnacova (exgps-V11-03-00) +- HistoManager: activated set ntuple merging +- Removed exgps_batch.in (identical with exgps.in) +- Fixed python and ROOT test macros (tested with python 3.13.3 and root 6.36.00) + - plotHisto.C moved to macros + - removed plottest35.py and plotit.csh + - Excluded not working tests (needed further investigation): + Excluded from the run script (runall.csh): + - test23 - hangs + - test27 - exception (by G4SPSEneDistribution::LinearInterpolation) + Excluded from the analysis script (plotall.py): + - test36 - hangs +- CMake: Added copying all macros and run script into the build area +- Updated README + ## 2023-03-11 Ben Morgan (exgps-V11-02-00) - Move CTests definitions to tests/ctests_examples diff --git a/examples/extended/eventgenerator/exgps/README b/examples/extended/eventgenerator/exgps/README index 40e27051ac..f4ee787ca0 100644 --- a/examples/extended/eventgenerator/exgps/README +++ b/examples/extended/eventgenerator/exgps/README @@ -39,12 +39,13 @@ This example implements an histo manager which creates histograms and ntuples using Geant4 analysis tools. - The output file contains 6 histograms and one ntuple: + The output file can contain the following histograms and one ntuple: histo1D 1: energy spectrum. histo1D 2: vertex: radial distribution dN/dv. histo1D 3: angular distribution: cos(theta). - histo1D 4: angular distribution: phi. + histo1D 4: angular distribution: phi. + histo2D 1: vertex position in the X-Y plane. histo2D 2: vertex position in the X-Z plane. histo2D 3: vertex position in the Y-Z plane. @@ -54,12 +55,13 @@ In the ntuple the following data are recorded for each incident particle: Particle ID + Kinetic energy (Ekin); Incident Position (x,y,z); Incident Angle (theta,phi); Particle weight; The histograms are managed by G4AnalysisManager class and its Messenger. - The histos can be individually activated with the command : + The histos, not activated by default, can be individually activated with the command : /analysis/h1/set id nbBins valMin valMax unit where unit is the desired unit for the histo (MeV or keV, deg or mrad, etc..) @@ -74,6 +76,7 @@ - execute exgps in 'batch' mode from macro files % exgps exgps.in + % exgps exgps_MT.in # larger number of events - execute exgps in 'interactive mode' with visualization % exgps @@ -88,5 +91,11 @@ various features of GPS. Please see README file there for further informations. + All test macros can be run via the 'runall.csh' script and the resulting ROOT + files can be then analysed with the 'plotall.py' macro, calling internally + 'plotfiles.py': + % ./macros/runall.csh + % python3 macros/plotall.py + In addition, the examples of ROOT macros plotHisto.C and plottest35.C are also available. diff --git a/examples/extended/eventgenerator/exgps/exgps_batch.in b/examples/extended/eventgenerator/exgps/exgps_batch.in deleted file mode 100644 index 4d555890bc..0000000000 --- a/examples/extended/eventgenerator/exgps/exgps_batch.in +++ /dev/null @@ -1,42 +0,0 @@ -# focused beam -# -/run/initialize -# -/gps/verbose 0 -/gps/particle geantino -# -# the incident surface is in the y-z plane -/gps/pos/type Plane -/gps/pos/rot1 0 1 0 -/gps/pos/rot2 0 0 1 -# -# the incident surface is a disc of 10 cm -/gps/pos/shape Circle -/gps/pos/centre -10. 0. 0. cm -/gps/pos/radius 10. cm - -# set the focusing point, default is (0, 0, 0) -/gps/ang/type focused -/gps/ang/focuspoint 10 -5 0 cm -# -# the beam energy is in gaussian profile centered at 400 MeV -/gps/ene/type Gauss -/gps/ene/mono 400 MeV -/gps/ene/sigma 50 MeV - -# -# commands below are independent of gps -# -/analysis/setFileName exgps -/analysis/h1/set 1 100 200 800 MeV -/analysis/h2/setX 2 100 -10 10 cm #y-z -/analysis/h2/setY 2 100 -10 10 cm #y-z -# -/run/printProgress 10000 -# -#/tracking/verbose 1 -# -#/control/execute vis.mac -# -/run/beamOn 100000 - diff --git a/examples/extended/eventgenerator/exgps/exgps_batch.out b/examples/extended/eventgenerator/exgps/exgps_batch.out index 80a0348d1a..60ab8b3491 100644 --- a/examples/extended/eventgenerator/exgps/exgps_batch.out +++ b/examples/extended/eventgenerator/exgps/exgps_batch.out @@ -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 @@ -20,6 +20,15 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** ### 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 ------- + ... set ntuple merging row mode : row-wise - done ... create file : exgps.root - done ... open analysis file : exgps.root - done diff --git a/examples/extended/eventgenerator/exgps/macros/README b/examples/extended/eventgenerator/exgps/macros/README index 7ec7b5dff9..c3b9628f5e 100644 --- a/examples/extended/eventgenerator/exgps/macros/README +++ b/examples/extended/eventgenerator/exgps/macros/README @@ -1,5 +1,6 @@ -More info on http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides - /ForApplicationDeveloper/html/ch02s07.html +More info on +https://geant4-userdoc.web.cern.ch/UsersGuides/ForApplicationDeveloper/html/GettingStarted/generalParticleSource.html + --------------------------------------------------------------------------- test01.mac diff --git a/examples/extended/eventgenerator/exgps/macros/plotHisto.C b/examples/extended/eventgenerator/exgps/macros/plotHisto.C new file mode 100644 index 0000000000..44947c229e --- /dev/null +++ b/examples/extended/eventgenerator/exgps/macros/plotHisto.C @@ -0,0 +1,34 @@ +// Simple ROOT macro to plot histograms from test02. +// Only active histograms are processed. + +{ + gROOT->Reset(); + + // Draw histos filled by Geant4 simulation + // + TFile f = TFile("test02.root"); + auto c1 = new TCanvas("test02", "test02", 200, 10, 1200, 700); + c1->Divide(4,2); + + auto dir = (TDirectory*)f.Get("histo"); + + auto hist1 = (TH1D*)dir->Get("h1.1"); + c1->cd(1); + hist1->Draw("HIST"); + + auto hist3 = (TH1D*)dir->Get("h1.3"); + c1->cd(2); + hist3->Draw("HIST"); + + auto hist4 = (TH1D*)dir->Get("h1.4"); + c1->cd(3); + hist4->Draw("HIST"); + + auto hist5 = (TH2D*)dir->Get("h2.1"); + c1->cd(5); + hist5->Draw("HIST"); + + auto hist8 = (TH2D*)dir->Get("h2.4"); + c1->cd(6); + hist8->Draw("HIST"); +} diff --git a/examples/extended/eventgenerator/exgps/macros/plotall.py b/examples/extended/eventgenerator/exgps/macros/plotall.py index b0f0ee738e..abf9caa0f2 100755 --- a/examples/extended/eventgenerator/exgps/macros/plotall.py +++ b/examples/extended/eventgenerator/exgps/macros/plotall.py @@ -1,11 +1,18 @@ -#!/usr/bin/python +#!/usr/bin/env python from plotfiles import * for i in range (1,35): - plot_1_file("test"+str(i)) + if i == 23 or i == 27: + ## skip analysis of problematic macros + continue + filename = 'test' + if i < 10: + filename = 'test0'; + plot_1_file(filename + str(i)) plot_1_file('test38') -for i in range (35,38): - plot_2_files("test"+str(i)) +for i in [35, 37]: + ## skip test36 output producing an error + plot_2_files('test' + str(i)) diff --git a/examples/extended/eventgenerator/exgps/macros/plotfiles.py b/examples/extended/eventgenerator/exgps/macros/plotfiles.py index a94ef4a9b0..1cf81e49a2 100755 --- a/examples/extended/eventgenerator/exgps/macros/plotfiles.py +++ b/examples/extended/eventgenerator/exgps/macros/plotfiles.py @@ -1,88 +1,88 @@ -#!/usr/bin/python +#!/usr/bin/env python -from ROOT import * +import ROOT from array import array def plot_1_file (file): - gROOT.Reset() - input_file_1=TFile(file+'.root','READ') - h1 = input_file_1.Get("histo/1") - h2 = input_file_1.Get("histo/2") - h3 = input_file_1.Get("histo/3") - h4 = input_file_1.Get("histo/4") - h5 = input_file_1.Get("histo/5") - h6 = input_file_1.Get("histo/6") + ROOT.gROOT.Reset() + ROOT.gROOT.SetBatch(True) - c1 = TCanvas('c1', file, 200, 10, 700, 900) - c1.Divide(2,3) + input_file_1=ROOT.TFile(file+'.root','READ') + h11 = input_file_1.Get('histo/h1.1') + h12 = input_file_1.Get('histo/h1.2') + h13 = input_file_1.Get('histo/h1.3') + h14 = input_file_1.Get('histo/h1.4') + h21 = input_file_1.Get('histo/h2.1') + h22 = input_file_1.Get('histo/h2.2') + h23 = input_file_1.Get('histo/h2.3') + h24 = input_file_1.Get('histo/h2.4') + + c1 = ROOT.TCanvas('c1', file+'.h1', 200, 10, 1200, 700) + c1.Divide(4,2) + histos1 = [h11, h12, h13, h14] + pad = 1 + for h1 in histos1: + if h1: + c1.cd(pad) + h1.Draw() + pad = pad + 1 + + histos2 = [h21, h22, h23, h24] + pad = 5 + for h2 in histos2: + if h2: + c1.cd(pad) + h2.Draw() + pad = pad + 1 + c1.Print(file+'.png') - c1.cd(1) - h1.Draw() - c1.cd(2) - h2.Draw() - c1.cd(3) - h3.Draw() - c1.cd(4) - h4.Draw() - c1.cd(5) - h5.Draw() - c1.cd(6) - h6.Draw() - c1.Update() - c1.Print("./"+file+".png") - input_file_1.Close() -# h_gam.SetLineColor(2) - def plot_2_files (file): - gROOT.Reset() + ROOT.gROOT.Reset() + ROOT.gROOT.SetBatch(True) - input_file_1=TFile(file+'a.root','READ') - input_file_2=TFile(file+'b.root','READ') + input_file_1=ROOT.TFile(file+"a.root",'READ') + input_file_2=ROOT.TFile(file+"b.root",'READ') -#input_file_1.cd() -#h_1_1 = input_file_1.Get("h16") + input_file_1.cd() + h_1_1 = input_file_1.Get('histo/h1.1') - c1 = TCanvas('c1', file, 200, 10, 700, 500) - c1.SetGridx() - c1.SetGridy() - c1.SetLogx() - c1.SetLogy() + c1 = ROOT.TCanvas('c1', file, 200, 10, 700, 500) + c1.SetGridx() + c1.SetGridy() + c1.SetLogx() + c1.SetLogy() -# histogram for energy spectra - n = 41 - bin = array( 'f' ) - - for i in range( n ): - bin.append(pow(10,(-2+0.1*i))) -# - h_1 = TH1F('unbiased','Source Spectrum',40,bin) - h_2 = TH1F('biased','Source Spectrum',40,bin) + #histogram for energy spectra + n = 41 + bin = array( 'f' ) -# - input_file_1.cd() -# get the tuple t1 - t1 = input_file_1.Get('ntuple/MyTuple') - print t1 - for i in range(t1.GetEntries()): - t1.GetEntry(i) - h_1.Fill(t1.Ekin,t1.weight) - - input_file_2.cd() -# get the tuple t1 - t2 = input_file_2.Get('ntuple/MyTuple') - for i in range(t2.GetEntries()): - t2.GetEntry(i) - h_2.Fill(t2.Ekin,t2.weight) - - h_2.SetLineStyle(kDashed); - h_2.SetLineColor(kBlue); - h_2.Draw(); - h_1.Draw("same") ; - c1.Update() - c1.Print("./"+file+".png") - - input_file_1.Close() - input_file_2.Close() + for i in range( n ): + bin.append(pow(10,(-2+0.1*i))) + + h_1 = ROOT.TH1F('unbiased','Source Spectrum',40,bin) + h_2 = ROOT.TH1F('biased','Source Spectrum',40,bin) + + input_file_1.cd() + #get the tuple t1 + t1 = input_file_1.Get('ntuple/101') + for i in range(t1.GetEntries()): + t1.GetEntry(i) + h_1.Fill(t1.Ekin,t1.weight) + + input_file_2.cd() + # get the tuple t1 + t2 = input_file_2.Get('ntuple/101') + for i in range(t2.GetEntries()): + t2.GetEntry(i) + h_2.Fill(t2.Ekin,t2.weight) + + h_2.Draw(); + h_1.Draw("same") ; + c1.Update() + c1.Print(file+".png") + + input_file_1.Close() + input_file_2.Close() diff --git a/examples/extended/eventgenerator/exgps/macros/plotit.csh b/examples/extended/eventgenerator/exgps/macros/plotit.csh deleted file mode 100755 index bdac760c09..0000000000 --- a/examples/extended/eventgenerator/exgps/macros/plotit.csh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/csh -f - -foreach i (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) - cat plot.kumac.template | sed s/'FILE'/$i/g >! temp.kumac - paw -b temp.kumac -end diff --git a/examples/extended/eventgenerator/exgps/macros/plottest35.C b/examples/extended/eventgenerator/exgps/macros/plottest35.C index ef665580c0..f6b1c98905 100644 --- a/examples/extended/eventgenerator/exgps/macros/plottest35.C +++ b/examples/extended/eventgenerator/exgps/macros/plottest35.C @@ -23,22 +23,22 @@ input_file_1->ls(); // get the tuple t1 double energy, weight; - TTree *t1 = (TTree *) input_file_1->Get("MyTuple"); - t1->SetBranchAddress("Energy", &energy); - t1->SetBranchAddress("Weight", &weight); + TTree *t1 = (TTree *) input_file_1->Get("ntuple/101"); + t1->SetBranchAddress("Ekin", &energy); + t1->SetBranchAddress("weight", &weight); cout <GetEntries() << endl; for (int i = 0; i < t1->GetEntries(); i++) { - t1.GetEntry(i); + t1->GetEntry(i); // cout << energy << " " << weight << endl; h_1->Fill(energy,weight); } input_file_2->cd(); - TTree *t2 = (TTree *) input_file_2->Get("MyTuple"); - t2->SetBranchAddress("Energy", &energy); - t2->SetBranchAddress("Weight", &weight); + TTree *t2 = (TTree *) input_file_2->Get("ntuple/101"); + t2->SetBranchAddress("Ekin", &energy); + t2->SetBranchAddress("weight", &weight); cout <GetEntries() << endl; for (int i = 0; i < t1->GetEntries(); i++) { - t2.GetEntry(i); + t2->GetEntry(i); h_2->Fill(energy,weight); } // h_2->SetFillColor(kRed); @@ -47,7 +47,7 @@ h_2->Draw(); h_1->Draw("same") ; c1->Update(); - c1->Print("./test35.png"); + c1->Print("test35.png"); input_file_1->Close(); input_file_2->Close(); diff --git a/examples/extended/eventgenerator/exgps/macros/plottest35.py b/examples/extended/eventgenerator/exgps/macros/plottest35.py deleted file mode 100755 index bd67dff1c6..0000000000 --- a/examples/extended/eventgenerator/exgps/macros/plottest35.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/python - -from ROOT import * -from array import array - -gROOT.Reset() - -input_file_1=TFile('test35a.root','READ') -input_file_2=TFile('test35b.root','READ') - -#input_file_1.cd() -#h_1_1 = input_file_1.Get("h16") - -c1 = TCanvas('c1', 'test35', 200, 10, 700, 500) -c1.SetGridx() -c1.SetGridy() -c1.SetLogx() -c1.SetLogy() - -# histogram for energy spectra -n = 41 -bin = array( 'f' ) - -for i in range( n ): - bin.append(pow(10,(-2+0.1*i))) -# -h_1 = TH1F('unbiased','Source Spectrum',40,bin) -h_2 = TH1F('biased','Source Spectrum',40,bin) - -# -input_file_1.cd() -# get the tuple t1 -t1 = gROOT.FindObject('MyTuple') -for i in range(t1.GetEntries()): - t1.GetEntry(i) - h_1.Fill(t1.Energy,t1.Weight) - -input_file_2.cd() -# get the tuple t1 -t1 = gROOT.FindObject("MyTuple") -for i in range(t1.GetEntries()): - t1.GetEntry(i) - h_2.Fill(t1.Energy,t1.Weight) - -h_2.SetLineStyle(kDashed); -h_2.SetLineColor(kBlue); -h_2.Draw(); -h_1.Draw("same") ; -c1.Update() -c1.Print("./test35.png") - -input_file_1.Close() -input_file_2.Close() - - - - diff --git a/examples/extended/eventgenerator/exgps/macros/runall.csh b/examples/extended/eventgenerator/exgps/macros/runall.csh index eace817057..7149c6b88f 100755 --- a/examples/extended/eventgenerator/exgps/macros/runall.csh +++ b/examples/extended/eventgenerator/exgps/macros/runall.csh @@ -1,5 +1,9 @@ #!/bin/csh -f -foreach i (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38) - ./exgps test$i.g4mac +#foreach i (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38) +# skipping test23 that hangs + +foreach i (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38) + echo "... processing test$i.mac" + ./exgps macros/test$i.mac >& test$i.log end diff --git a/examples/extended/eventgenerator/exgps/macros/test11.mac b/examples/extended/eventgenerator/exgps/macros/test11.mac index d04f2a4cb0..6aea1854cf 100644 --- a/examples/extended/eventgenerator/exgps/macros/test11.mac +++ b/examples/extended/eventgenerator/exgps/macros/test11.mac @@ -18,7 +18,7 @@ /gps/ene/type Pow /gps/ene/min 2. MeV /gps/ene/max 10. MeV -/gps/alpha -2. +/gps/ene/alpha -2. # commands below are independent of gps # diff --git a/examples/extended/eventgenerator/exgps/macros/test13.mac b/examples/extended/eventgenerator/exgps/macros/test13.mac index a768e1c933..0befa8155c 100644 --- a/examples/extended/eventgenerator/exgps/macros/test13.mac +++ b/examples/extended/eventgenerator/exgps/macros/test13.mac @@ -27,7 +27,7 @@ # commands below are independent of gps # -/analysis/setFileName test10 +/analysis/setFileName test13 /analysis/h1/set 1 100 1 15 MeV /analysis/h2/set 4 120 0 360 deg none linear 100 -1 1 none none linear # diff --git a/examples/extended/eventgenerator/exgps/macros/test35.mac b/examples/extended/eventgenerator/exgps/macros/test35.mac index 25efc48882..fa0df2dd34 100644 --- a/examples/extended/eventgenerator/exgps/macros/test35.mac +++ b/examples/extended/eventgenerator/exgps/macros/test35.mac @@ -28,6 +28,7 @@ /analysis/h2/set 1 100 -8 8 cm none linear 100 -8 8 cm none linear #x-y /analysis/h2/set 2 100 -8 8 cm none linear 100 -8 8 cm none linear #y-z /analysis/h2/set 4 120 0 360 deg none linear 100 -1 1 none none linear +/analysis/ntuple/setActivation 1 true # ###/control/execute vis.mac # diff --git a/examples/extended/eventgenerator/exgps/macros/test36.mac b/examples/extended/eventgenerator/exgps/macros/test36.mac index 9119a82afb..c62cc863aa 100644 --- a/examples/extended/eventgenerator/exgps/macros/test36.mac +++ b/examples/extended/eventgenerator/exgps/macros/test36.mac @@ -26,6 +26,7 @@ /analysis/h2/set 1 100 -8 8 cm none linear 100 -8 8 cm none linear #x-y /analysis/h2/set 2 100 -8 8 cm none linear 100 -8 8 cm none linear #y-z /analysis/h2/set 4 120 0 360 deg none linear 100 -1 1 none none linear +/analysis/ntuple/setActivation 1 true # ###/control/execute vis.mac # diff --git a/examples/extended/eventgenerator/exgps/macros/test37.mac b/examples/extended/eventgenerator/exgps/macros/test37.mac index fa96827687..ffacfa4e59 100644 --- a/examples/extended/eventgenerator/exgps/macros/test37.mac +++ b/examples/extended/eventgenerator/exgps/macros/test37.mac @@ -27,6 +27,7 @@ /analysis/h2/set 1 100 -8 8 cm none linear 100 -8 8 cm none linear #x-y /analysis/h2/set 2 100 -8 8 cm none linear 100 -8 8 cm none linear #y-z /analysis/h2/set 4 120 0 360 deg none linear 100 -1 1 none none linear +/analysis/ntuple/setActivation 1 true # ###/control/execute vis.mac # diff --git a/examples/extended/eventgenerator/exgps/plotHisto.C b/examples/extended/eventgenerator/exgps/plotHisto.C deleted file mode 100644 index 8f9d9b5b6b..0000000000 --- a/examples/extended/eventgenerator/exgps/plotHisto.C +++ /dev/null @@ -1,34 +0,0 @@ -{ - gROOT->Reset(); - - // Draw histos filled by Geant4 simulation - // - TFile f = TFile("test02.root"); - TCanvas* c1 = new TCanvas("c1", " "); - - TDirectory* dir = f.Get("histo"); - - TH1D* hist1 = (TH1D*)dir->Get("h1.1"); - hist1->Draw("HIST"); -/* - TH1D* hist2 = (TH1D*)dir->Get("h1.2"); - hist2->Draw("HIST"); -*/ - TH1D* hist3 = (TH1D*)dir->Get("h1.3"); - hist3->Draw("HIST"); - - TH1D* hist4 = (TH1D*)dir->Get("h1.4"); - hist4->Draw("HIST"); - - TH2D* hist5 = (TH2D*)dir->Get("h2.1"); - hist5->Draw("HIST"); -/* - TH2D* hist6 = (TH2D*)dir->Get("h2.2"); - hist6->Draw("HIST"); - - TH2D* hist7 = (TH2D*)dir->Get("h2.3"); - hist7->Draw("HIST"); -*/ - TH2D* hist8 = (TH2D*)dir->Get("h2.4"); - hist8->Draw("HIST"); -} diff --git a/examples/extended/eventgenerator/exgps/src/HistoManager.cc b/examples/extended/eventgenerator/exgps/src/HistoManager.cc index 6164f58810..f4d205b4ec 100644 --- a/examples/extended/eventgenerator/exgps/src/HistoManager.cc +++ b/examples/extended/eventgenerator/exgps/src/HistoManager.cc @@ -56,6 +56,7 @@ void HistoManager::Book() G4AnalysisManager* analysis = G4AnalysisManager::Instance(); analysis->SetDefaultFileType("root"); + analysis->SetNtupleMerging(true); analysis->SetFileName(fFileName); analysis->SetVerboseLevel(1); analysis->SetActivation(true); // enable inactivation of histos, nTuples diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run1.out b/examples/extended/eventgenerator/particleGun/particleGun_run1.out index 67be449369..221c77473e 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run1.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run1.out @@ -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 @@ -67,7 +67,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000225s Sys=0.000000s + User=0.000000s Real=0.000321s Sys=0.000000s # /tracking/verbose 0 /run/beamOn 5 @@ -87,7 +87,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000017s Sys=0.000000s + User=0.000000s Real=0.000036s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.015 MB diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run2.out b/examples/extended/eventgenerator/particleGun/particleGun_run2.out index 1bd6f57b25..035fe9a2bb 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run2.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run2.out @@ -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 @@ -49,7 +49,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.120000s Real=0.117243s Sys=0.000000s + User=0.100000s Real=0.103417s Sys=0.000000s ... write file : run2.root - done ... close file : run2.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run3.out b/examples/extended/eventgenerator/particleGun/particleGun_run3.out index a4635d485f..828c78bf8a 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run3.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run3.out @@ -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 @@ -50,7 +50,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.120000s Real=0.131096s Sys=0.000000s + User=0.180000s Real=0.181322s Sys=0.000000s ... write file : run3.root - done ... close file : run3.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run4.out b/examples/extended/eventgenerator/particleGun/particleGun_run4.out index 710d72c4f9..8fbdefe238 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run4.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run4.out @@ -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 @@ -65,7 +65,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=1.470000s Real=1.491672s Sys=0.000000s + User=1.750000s Real=1.756383s Sys=0.000000s ... write file : run4.root - done ... close file : run4.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/pythia/decayer6/include/EDecayType.hh b/examples/extended/eventgenerator/pythia/decayer6/include/EDecayType.hh index 830b7f1ac6..1deaab98f6 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/include/EDecayType.hh +++ b/examples/extended/eventgenerator/pythia/decayer6/include/EDecayType.hh @@ -33,8 +33,8 @@ /// Enum of decay mode types /// /// According to EDecayType enum in TPythia6Decayer class in Root: -/// http://root.cern.ch/ -/// see http://root.cern.ch/root/License.html +/// http://root.cern/ +/// see http://root.cern/root/License.html /// ---------------------------------------------------------------------------- enum EDecayType diff --git a/examples/extended/eventgenerator/pythia/decayer6/include/G4Pythia6Decayer.hh b/examples/extended/eventgenerator/pythia/decayer6/include/G4Pythia6Decayer.hh index 7024d3fb0d..9dd99b3568 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/include/G4Pythia6Decayer.hh +++ b/examples/extended/eventgenerator/pythia/decayer6/include/G4Pythia6Decayer.hh @@ -46,8 +46,8 @@ class G4DecayProducts; /// /// Implements the G4VExtDecayer abstract class using the Pythia6 interface. /// According to TPythia6Decayer class in Root: -/// http://root.cern.ch/ -/// see http://root.cern.ch/root/License.html +/// http://root.cern/ +/// see http://root.cern/root/License.html class G4Pythia6Decayer : public G4VExtDecayer { diff --git a/examples/extended/eventgenerator/pythia/decayer6/include/Pythia6.hh b/examples/extended/eventgenerator/pythia/decayer6/include/Pythia6.hh index 08f7c30f0e..e77e0e2123 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/include/Pythia6.hh +++ b/examples/extended/eventgenerator/pythia/decayer6/include/Pythia6.hh @@ -163,8 +163,8 @@ typedef std::vector ParticleVector; /// According to TPythia6 class from Root: /// (The TPythia6 class is an interface class to F77 routines in Pythia6 // /// CERNLIB event generators, written by T.Sjostrand.) -/// http://root.cern.ch/ -/// see http://root.cern.ch/root/License.html +/// http://root.cern/ +/// see http://root.cern/root/License.html /// /// The complete Pythia6 documentation can be found at: /// http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html diff --git a/examples/extended/eventgenerator/pythia/decayer6/src/G4Pythia6Decayer.cc b/examples/extended/eventgenerator/pythia/decayer6/src/G4Pythia6Decayer.cc index 78b0f14e07..a170031c80 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/src/G4Pythia6Decayer.cc +++ b/examples/extended/eventgenerator/pythia/decayer6/src/G4Pythia6Decayer.cc @@ -29,8 +29,8 @@ // ---------------------------------------------------------------------------- // According to TPythia6Decayer class in Root: -// http://root.cern.ch/ -// see http://root.cern.ch/root/License.html +// http://root.cern/ +// see http://root.cern/root/License.html // ---------------------------------------------------------------------------- #include "G4Pythia6Decayer.hh" diff --git a/examples/extended/eventgenerator/pythia/decayer6/src/Pythia6.cc b/examples/extended/eventgenerator/pythia/decayer6/src/Pythia6.cc index 66eaa7a8f6..caa4820573 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/src/Pythia6.cc +++ b/examples/extended/eventgenerator/pythia/decayer6/src/Pythia6.cc @@ -31,8 +31,8 @@ // According to TPythia6 class from Root: // (The TPythia6 class is an interface class to F77 routines in Pythia6 // // CERNLIB event generators, written by T.Sjostrand.) -// http://root.cern.ch/ -// see http://root.cern.ch/root/License.html +// http://root.cern/ +// see http://root.cern/root/License.html // // The complete Pythia6 documentation can be found at: // http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html diff --git a/examples/extended/eventgenerator/pythia/decayer6/src/pythia6_common_address.c b/examples/extended/eventgenerator/pythia/decayer6/src/pythia6_common_address.c index 530769bfa3..2427badf74 100644 --- a/examples/extended/eventgenerator/pythia/decayer6/src/pythia6_common_address.c +++ b/examples/extended/eventgenerator/pythia/decayer6/src/pythia6_common_address.c @@ -26,8 +26,8 @@ // // According to pythia6_common_address.c provided in Root // Pythia6 distribution: -// http://root.cern.ch/ -// see http://root.cern.ch/root/License.html +// http://root.cern/ +// see http://root.cern/root/License.html // ---------------------------------------------------------------------------- #include diff --git a/examples/extended/eventgenerator/pythia/py8decayer/.README.txt b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt index 57606bc6e5..98c3b089d0 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/.README.txt +++ b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt @@ -29,33 +29,35 @@ ## Installation of Pythia8: - NOTE: As of December 2023, pythia8.3.10 is the most current version, - thus it is used in this example. + NOTE: As of May 2025, pythia8.3.15 is the most current version, + thus it is used in this example. + In general, this example is expected to work with any reasonably modern + pythia8.x.y revision. In the future, please check updates at Pythia8 site: https://pythia.org - 1. cd path/to/your/pythia8/area - 2. Download desired version of Pythia8 and un-tar it, e.g. \verbatim -wget https://pythia.org/download/pythia83/pythia8310.tgz -tar xzf pythia8310.tgz +wget https://pythia.org/download/pythia83/pythia8315.tgz +tar xzf pythia8315.tgz \endverbatim - 3. Build/install Pythia8 \verbatim -cd pythia8310 +cd pythia8315 export CXX=\`which g++\` ./configure --prefix=$PWD --cxx=$CXX make \endverbatim - NOTE: By default, Pythia8 (as of 8.3.10) builds with C++11 standards. + NOTE: By default, Pythia8 (as of 8.3.15) builds with C++11 standards. If one wants to turn to e.g. C++17 standard, one needs to override flags via --cxx-common argument to configure script. Alternatively, one can setup CXX_COMMON environment variable. As of pythia8310, the default flags are the following: - -O2 -std=c++11 -pedantic -W -Wall -Wshadow -pthread + -O2 -std=c++11 -pedantic -W -Wall -Wshadow -fPIC -pthread Please note use of -pthread which was not among default flags in earlier - relesaes of Pythia8. + releases of Pythia8. Example of specifying C++17 standards by overriding the default flags via use of --cxx_common argument to configure script: \verbatim @@ -203,7 +205,7 @@ export Pythia8_ROOT=$PWD It appears that Geant4 sets (at least) masses of quarks as listed in PDG. For details on default settings for the quark masses in Pythia8 please refer to the Pythia8 manual: - https://pythia.org/manuals/pythia8309/Welcome.html + https://pythia.org/manuals/pythia8315/Welcome.html See Particles and Decays section, Particle Data subsection. Beyond quarks/diquarks some differences in mass central values or width have also diff --git a/examples/extended/eventgenerator/pythia/py8decayer/History b/examples/extended/eventgenerator/pythia/py8decayer/History index 1d2d63772a..1ea670dcfa 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/History +++ b/examples/extended/eventgenerator/pythia/py8decayer/History @@ -4,6 +4,10 @@ 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! +## 2024-05-30 Julia Yarba (p8decayer-V11-03-00) +- Test vs Pythia8.3.15 which is the latest as of May 2025 +- Update documentation README and .README.txt + ## 2024-03-26 Ben Morgan (p8decayer-V11-02-01) - Use new FindPythia8 module and imported target diff --git a/examples/extended/eventgenerator/pythia/py8decayer/README b/examples/extended/eventgenerator/pythia/py8decayer/README index 5a863d5e89..e8dd667931 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/README +++ b/examples/extended/eventgenerator/pythia/py8decayer/README @@ -30,29 +30,31 @@ Installation of Pythia8: - NOTE: As of December 2023, pythia8.3.10 is the most current version, + NOTE: As of May 2025, pythia8.3.15 is the most current version, thus it is used in this example. + In general, this example is expected to work with any reasonably modern + pythia8.x.y revision. In the future, please check updates at Pythia8 site: https://pythia.org 1. cd path/to/your/pythia8/area 2. Download desired version of Pythia8 and un-tar it, e.g. - wget https://pythia.org/download/pythia83/pythia8310.tgz - tar xzf pythia8310.tgz + wget https://pythia.org/download/pythia83/pythia8315.tgz + tar xzf pythia8315.tgz 3. Build/install Pythia8 - cd pythia8310 + cd pythia8315 export CXX=\`which g++\` ./configure --prefix=$PWD --cxx=$CXX make - NOTE: By default, Pythia8 (as of 8.3.10) builds with C++11 standards. - If one wants to turn to e.g. C++17 standard, one needs to override flags - via --cxx-common argument to configure script. + NOTE: By default, Pythia8 (as of 8.3.15) builds with C++11 standards. + If one wants to turn to e.g., C++17 standard (or later), one needs + to override flags via --cxx-common argument to configure script. Alternatively, one can setup CXX_COMMON environment variable. - As of pythia8310, the default flags are the following: - -O2 -std=c++11 -pedantic -W -Wall -Wshadow -pthread + As of pythia8315, the default flags are the following: + -O2 -std=c++11 -pedantic -W -Wall -Wshadow -fPIC -pthread Please note use of -pthread which was not among default flags in earlier - relesaes of Pythia8. + releases of Pythia8. Example of specifying C++17 standards by overriding the default flags via use of --cxx_common argument to configure script: ./configure --prefix=$PWD --cxx=$CXX \ @@ -194,7 +196,7 @@ It appears that Geant4 sets (at least) masses of quarks as listed in PDG. For details on default settings for the quark masses in Pythia8 please refer to the Pythia8 manual: - https://pythia.org/manuals/pythia8310/Welcome.html + https://pythia.org/manuals/pythia8315/Welcome.html See Particles and Decays section, Particle Data subsection. Beyond quarks/diquarks some differences in mass central values or width have also diff --git a/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out b/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out index 8ae1261995..ff1b3d59ae 100644 --- a/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out +++ b/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out @@ -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 @@ -50,7 +50,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.170000s Real=0.175981s Sys=0.000000s + User=0.200000s Real=0.199559s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.013 MB diff --git a/examples/extended/exoticphysics/channeling/ch0/channeling-ch0.out b/examples/extended/exoticphysics/channeling/ch0/channeling-ch0.out index 353410002b..060e2f3889 100644 --- a/examples/extended/exoticphysics/channeling/ch0/channeling-ch0.out +++ b/examples/extended/exoticphysics/channeling/ch0/channeling-ch0.out @@ -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", @@ -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 ======== @@ -785,6 +786,7 @@ CoulombScat: for pi- XStype:2 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 @@ -801,6 +803,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 @@ -1849,12 +1852,12 @@ Using Run terminated. Run Summary Number of events processed : 1000 - User=30.640000s Real=30.758128s Sys=0.040000s + User=32.640000s Real=32.713153s Sys=0.000000s ... write file : ExExCh.root - done ... close file : ExExCh.root - done Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 1 -Dynamic pools deleted: 13 / Total memory freed: 0.059 MB +Dynamic pools deleted: 13 / Total memory freed: 0.058 MB ============================================================ diff --git a/examples/extended/exoticphysics/channeling/ch1/channeling-ch1.out b/examples/extended/exoticphysics/channeling/ch1/channeling-ch1.out index 902d593d1b..6084fec5d8 100644 --- a/examples/extended/exoticphysics/channeling/ch1/channeling-ch1.out +++ b/examples/extended/exoticphysics/channeling/ch1/channeling-ch1.out @@ -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 @@ -30,23 +30,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", @@ -143,7 +144,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 ======== @@ -796,6 +797,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 @@ -812,6 +814,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 @@ -929,4 +932,4 @@ Max 2J for sampling of angular correlations 10 Graphics systems deleted. Visualization Manager deleting... Execution terminated -User=30.130000s Real=30.304792s Sys=0.030000s +User=31.210000s Real=31.469592s Sys=0.050000s diff --git a/examples/extended/exoticphysics/channeling/ch2/channeling-ch2.out b/examples/extended/exoticphysics/channeling/ch2/channeling-ch2.out index 6a1884ab8a..e035a8aa13 100644 --- a/examples/extended/exoticphysics/channeling/ch2/channeling-ch2.out +++ b/examples/extended/exoticphysics/channeling/ch2/channeling-ch2.out @@ -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 @@ -30,23 +30,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", @@ -156,7 +157,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 ======== @@ -809,6 +810,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 @@ -825,6 +827,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 @@ -942,4 +945,4 @@ Max 2J for sampling of angular correlations 10 Graphics systems deleted. Visualization Manager deleting... Execution terminated -User=31.770000s Real=32.584054s Sys=0.030000s +User=33.020000s Real=33.266887s Sys=0.030000s diff --git a/examples/extended/exoticphysics/channeling/ch3/channeling-ch3.out b/examples/extended/exoticphysics/channeling/ch3/channeling-ch3.out index 722f3955c1..f6228ece70 100644 --- a/examples/extended/exoticphysics/channeling/ch3/channeling-ch3.out +++ b/examples/extended/exoticphysics/channeling/ch3/channeling-ch3.out @@ -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 @@ -30,23 +30,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", @@ -143,7 +144,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 ======== @@ -796,6 +797,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 @@ -812,6 +814,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 @@ -929,4 +932,4 @@ Max 2J for sampling of angular correlations 10 Graphics systems deleted. Visualization Manager deleting... Execution terminated -User=63.470000s Real=73.165926s Sys=0.130000s +User=65.330000s Real=74.053430s Sys=0.140000s diff --git a/examples/extended/exoticphysics/dmparticle/dmparticle.out b/examples/extended/exoticphysics/dmparticle/dmparticle.out index 547e7bc953..484988f48b 100644 --- a/examples/extended/exoticphysics/dmparticle/dmparticle.out +++ b/examples/extended/exoticphysics/dmparticle/dmparticle.out @@ -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 @@ -30,23 +30,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", @@ -134,7 +135,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 ======== @@ -1125,7 +1126,7 @@ Event = 0 z0 = -779.999 Primary direction = (0,0,1) Run terminated. Run Summary Number of events processed : 100 - User=0.430000s Real=0.432010s Sys=0.000000s + User=0.440000s Real=0.441228s Sys=0.010000s RunAction: End of run actions are started 1 Nevt= 100 Edep= 4107.57 ==================================================== Beam Particle: proton diff --git a/examples/extended/exoticphysics/monopole/monopole.out b/examples/extended/exoticphysics/monopole/monopole.out index d4e7384db4..d6dfb4cb1f 100644 --- a/examples/extended/exoticphysics/monopole/monopole.out +++ b/examples/extended/exoticphysics/monopole/monopole.out @@ -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 @@ -108,7 +108,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 ======== @@ -762,6 +762,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 @@ -778,6 +779,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 diff --git a/examples/extended/exoticphysics/saxs/saxs-slits.out b/examples/extended/exoticphysics/saxs/saxs-slits.out index c9a4234016..d680de0899 100644 --- a/examples/extended/exoticphysics/saxs/saxs-slits.out +++ b/examples/extended/exoticphysics/saxs/saxs-slits.out @@ -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 @@ -67,7 +67,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 ======== @@ -559,7 +559,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 1000000 - User=6.280000s Real=7.415078s Sys=0.000000s + User=6.720000s Real=7.966910s Sys=0.000000s --------------------End of Global Run----------------------- The run had 1000000 events... write file : output.root - done @@ -569,4 +569,4 @@ Number of memory pools allocated: 12 of which, static: 0 Dynamic pools deleted: 12 / Total memory freed: 0.025 MB ============================================================ Execution completed -User=7.180000s Real=8.840125s Sys=0.040000s +User=7.650000s Real=9.657424s Sys=0.040000s diff --git a/examples/extended/exoticphysics/saxs/saxs.out b/examples/extended/exoticphysics/saxs/saxs.out index 61c4ad9f11..c07ba3ce0b 100644 --- a/examples/extended/exoticphysics/saxs/saxs.out +++ b/examples/extended/exoticphysics/saxs/saxs.out @@ -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 @@ -58,7 +58,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 ======== @@ -542,7 +542,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 1000000 - User=9.250000s Real=9.293958s Sys=0.030000s + User=9.500000s Real=9.555803s Sys=0.040000s --------------------End of Global Run----------------------- The run had 1000000 events... write file : output.root - done @@ -552,4 +552,4 @@ Number of memory pools allocated: 12 of which, static: 0 Dynamic pools deleted: 12 / Total memory freed: 0.023 MB ============================================================ Execution completed -User=10.120000s Real=10.552401s Sys=0.070000s +User=10.420000s Real=10.803021s Sys=0.110000s diff --git a/examples/extended/exoticphysics/ucn/ExUCN.out b/examples/extended/exoticphysics/ucn/ExUCN.out index aab06e792e..5ca295903c 100644 --- a/examples/extended/exoticphysics/ucn/ExUCN.out +++ b/examples/extended/exoticphysics/ucn/ExUCN.out @@ -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 @@ -54,23 +54,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", @@ -1509,7 +1510,7 @@ Terminate current event processing. Run terminated. Run Summary Number of events processed : 1 - User=0.010000s Real=0.016488s Sys=0.010000s + User=0.010000s Real=0.018133s Sys=0.000000s Sum NoMT: 0 Sum NoMRT: 0 Sum NoMRCondition: 0 diff --git a/examples/extended/field/BlineTracer/BlineTracer.out b/examples/extended/field/BlineTracer/BlineTracer.out index 7aabe4a65f..e08205feea 100644 --- a/examples/extended/field/BlineTracer/BlineTracer.out +++ b/examples/extended/field/BlineTracer/BlineTracer.out @@ -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 diff --git a/examples/extended/field/field01/field01.out b/examples/extended/field/field01/field01.out index e4ab1cc308..ec89cf5a20 100644 --- a/examples/extended/field/field01/field01.out +++ b/examples/extended/field/field01/field01.out @@ -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 @@ -207,7 +207,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.001096s Sys=0.000000s + User=0.000000s Real=0.000765s Sys=0.000000s # /gun/energy 250.0 MeV /run/beamOn 1 @@ -292,7 +292,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000547s Sys=0.000000s + User=0.000000s Real=0.000406s Sys=0.000000s # /gun/energy 200.0 MeV /run/beamOn 1 @@ -377,7 +377,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000519s Sys=0.000000s + User=0.000000s Real=0.000417s Sys=0.000000s # /gun/energy 100.0 MeV /run/beamOn 1 @@ -462,7 +462,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000717s Sys=0.000000s + User=0.000000s Real=0.000544s Sys=0.000000s # /gun/energy 50.0 MeV /run/beamOn 1 @@ -547,7 +547,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000895s Sys=0.000000s + User=0.000000s Real=0.000700s Sys=0.000000s # # Change the value of the B-field # @@ -601,7 +601,7 @@ Step# X Y Z Direction x dir y dir Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000311s Sys=0.000000s + User=0.000000s Real=0.000248s Sys=0.000000s # /gun/energy 500.0 MeV /tracking/verbose 0 @@ -633,7 +633,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.010670s Sys=0.000000s + User=0.010000s Real=0.009012s Sys=0.000000s # # Test commands defined in this example /control/verbose 2 @@ -696,7 +696,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.002713s Sys=0.000000s + User=0.000000s Real=0.002792s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 Dynamic pools deleted: 12 / Total memory freed: 0.27 MB diff --git a/examples/extended/field/field02/field02.out b/examples/extended/field/field02/field02.out index bc86724425..8dc3876325 100644 --- a/examples/extended/field/field02/field02.out +++ b/examples/extended/field/field02/field02.out @@ -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 @@ -227,23 +227,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", @@ -340,7 +341,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 ======== @@ -993,6 +994,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 @@ -1009,6 +1011,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 @@ -5560,7 +5563,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Run terminated. Run Summary Number of events processed : 100 - User=0.020000s Real=0.025766s Sys=0.010000s + User=0.010000s Real=0.020648s Sys=0.010000s # # Test commands defined in this example /control/verbose 2 @@ -5727,7 +5730,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000748s Sys=0.000000s + User=0.000000s Real=0.000646s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== diff --git a/examples/extended/field/field03/field03.out b/examples/extended/field/field03/field03.out index a0ea245f2f..0ce370e2ee 100644 --- a/examples/extended/field/field03/field03.out +++ b/examples/extended/field/field03/field03.out @@ -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 @@ -240,23 +240,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", @@ -345,7 +346,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 ======== @@ -998,6 +999,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 @@ -1014,6 +1016,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 @@ -1075,7 +1078,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000622s Sys=0.000000s + User=0.000000s Real=0.000700s Sys=0.000000s # /tracking/verbose 0 /run/printProgress 50 @@ -1098,7 +1101,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.006189s Sys=0.000000s + User=0.010000s Real=0.005724s Sys=0.000000s # /field03/setField 0. 0. 1.0 kG G4ChordFinder: stepperDriverId: 2 @@ -1121,7 +1124,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001479s Sys=0.000000s + User=0.000000s Real=0.001344s Sys=0.000000s # /tracking/verbose 1 /field03/setField 3.3 0 0 tesla @@ -1165,7 +1168,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000159s Sys=0.000000s + User=0.000000s Real=0.000139s Sys=0.000000s # # Test commands defined in this example /control/verbose 2 @@ -1223,7 +1226,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.240000s Real=0.249968s Sys=0.000000s + User=0.230000s Real=0.233946s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== diff --git a/examples/extended/field/field04/field04.out b/examples/extended/field/field04/field04.out index b20b233325..f8876efc4a 100644 --- a/examples/extended/field/field04/field04.out +++ b/examples/extended/field/field04/field04.out @@ -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,23 +38,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", @@ -248,7 +249,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 ======== @@ -912,6 +913,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 @@ -928,6 +930,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 @@ -10998,7 +11001,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng 2669 -21.508078 cm 19.707951 cm 77.724853 cm 45.014014 MeV4.9322449e-17 meV 1 mm 2.6716173 m CaptureMgnt StepLimiter 2670 -21.41786 cm 19.742111 cm 77.751192 cm 45.014014 MeV4.9322449e-17 meV 1 mm 2.6726173 m CaptureMgnt StepLimiter 2671 -21.327432 cm 19.775712 cm 77.777531 cm 45.014014 MeV4.9322449e-17 meV 1 mm 2.6736173 m CaptureMgnt StepLimiter - 2672 -21.236797 cm 19.80875 cm 77.803871 cm 45.014014 MeV4.9322449e-17 meV 1 mm 2.6746173 m CaptureMgnt StepLim + 2672 -21 ============================================================================================ ================= lines above cut to keep file within limits =============================== ============================================================================================ diff --git a/examples/extended/field/field05/field05.out b/examples/extended/field/field05/field05.out index dc53933f56..239dd2eb7a 100644 --- a/examples/extended/field/field05/field05.out +++ b/examples/extended/field/field05/field05.out @@ -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 @@ -41,23 +41,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", diff --git a/examples/extended/field/field06/field06.out b/examples/extended/field/field06/field06.out index 0d1053c8e5..18b27a9b10 100644 --- a/examples/extended/field/field06/field06.out +++ b/examples/extended/field/field06/field06.out @@ -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 @@ -53,23 +53,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", @@ -1288,7 +1289,7 @@ Terminate current event processing. Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.005176s Sys=0.000000s + User=0.000000s Real=0.005982s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/examples/extended/g3tog4/clGeometry/clGeometry.out b/examples/extended/g3tog4/clGeometry/clGeometry.out index 1e1557405b..5e624a0a4a 100644 --- a/examples/extended/g3tog4/clGeometry/clGeometry.out +++ b/examples/extended/g3tog4/clGeometry/clGeometry.out @@ -14,7 +14,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 @@ -34,23 +34,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", @@ -180,7 +181,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 ======== @@ -833,6 +834,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 @@ -849,6 +851,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 @@ -921,7 +924,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000265s Sys=0.000000s + User=0.000000s Real=0.000266s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -951,7 +954,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000020s Sys=0.000000s + User=0.000000s Real=0.000026s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -981,7 +984,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000020s Sys=0.000000s + User=0.000000s Real=0.000023s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1011,7 +1014,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000024s Sys=0.000000s + User=0.000000s Real=0.000017s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1101,7 +1104,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000017s Sys=0.000000s + User=0.000000s Real=0.000019s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1131,14 +1134,14 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000016s Sys=0.000000s + User=0.000000s Real=0.000029s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:7) -UserDetectorConstruction deleted 0xc36e00 -UserPhysicsList deleted 0xc380a0 -UserActionInitialization deleted 0xdf2df0 +UserDetectorConstruction deleted 0xf3c4b0 +UserPhysicsList deleted 0xf3d750 +UserActionInitialization deleted 0x10f92c0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/geometry/transforms/batch.out b/examples/extended/geometry/transforms/batch.out index bcaecad523..91393e4bc7 100644 --- a/examples/extended/geometry/transforms/batch.out +++ b/examples/extended/geometry/transforms/batch.out @@ -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 diff --git a/examples/extended/geometry/vecGeomNavigation/History b/examples/extended/geometry/vecGeomNavigation/History index 323724766d..d0c320a161 100644 --- a/examples/extended/geometry/vecGeomNavigation/History +++ b/examples/extended/geometry/vecGeomNavigation/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-21 S. Johnson (VecGeomNavigation-V11-02-00) +## 2025-03-21 S. Johnson (VecGeomNavigation-V11-03-01) - Use G4cout for VecGeom logger output ## 2023-11-10 I. Hrivnacova (VecGeomNavigation-V11-01-01) diff --git a/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out b/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out index a38a4dbcfb..1abb4d60cd 100644 --- a/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out +++ b/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out @@ -18,7 +18,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 @@ -47,13 +47,14 @@ Enabled Check mode in G4Navigator G4ChordFinder: stepperDriverId: 2 *** SETTING MAGNETIC FIELD in Z direction : fieldValue = 2 tesla *** -*** Conversion of G4 -> VecGeom finished (0.00283541 s) *** -*** Closing VecGeom geometry finished (0.00034433 s) *** -*** Setup of syncing lookup structure finished (2.354e-05 s) *** +*** Conversion of G4 -> VecGeom finished (0.0020306 s) *** +*** Closing VecGeom geometry finished (0.000303452 s) *** +*** Setup of syncing lookup structure finished (2.3729e-05 s) *** TG4VecGeomNavigator created and registered to G4TransportationManager Uncontained capacity for Svt_log: 8.83002e+07 units Uncontained capacity for Dch_log: 8.26239e+08 units -*** Setup of VecGeom navigators finished (30.2389 s) *** +Uncontained capacity for Dch_log: 8.26239e+08 units +*** Setup of VecGeom navigators finished (31.7823 s) *** 3 hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval @@ -94,7 +95,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 ======== @@ -747,6 +748,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 @@ -763,6 +765,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 @@ -2747,7 +2750,7 @@ Step# X (mm) Y (mm) Z (mm) Ek (MeV) dE (MeV) Step(mm) Track(mm) S Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.015555s Sys=0.000000s + User=0.000000s Real=0.008561s Sys=0.000000s /tracking/verbose 0 /run/beamOn 10 @@ -2797,7 +2800,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.030000s Real=0.031718s Sys=0.000000s + User=0.040000s Real=0.032823s Sys=0.000000s ================================================================= Final random number = 0.56769521327478 diff --git a/examples/extended/hadronic/FissionFragment/FissionFragment.out b/examples/extended/hadronic/FissionFragment/FissionFragment.out index e1a0ba2a7d..bae319c761 100644 --- a/examples/extended/hadronic/FissionFragment/FissionFragment.out +++ b/examples/extended/hadronic/FissionFragment/FissionFragment.out @@ -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 @@ -393,23 +393,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", @@ -480,7 +481,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 ======== @@ -914,8 +915,6 @@ NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron/n data directory is /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic -NeutronHP: /Capture file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_37_Argon -NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_39_Argon Fission fragment production is now activated in HP package for Z = 92, A = 235 As currently modeled this option precludes production of delayed neutrons from fission fragments. Fission fragment production is now activated in HP package for Z = 92, A = 238 @@ -1171,7 +1170,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 @@ -1235,6 +1234,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 @@ -1251,6 +1251,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 diff --git a/examples/extended/hadronic/FlukaCern/History b/examples/extended/hadronic/FlukaCern/History index 433a14d7ad..3e0f3e2634 100644 --- a/examples/extended/hadronic/FlukaCern/History +++ b/examples/extended/hadronic/FlukaCern/History @@ -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-03-21 Gabrielle Hugo (FlukaCern-V11-02-02) +## 2025-03-21 Gabrielle Hugo (FlukaCern-V11-03-02) - Ensure compatibility with FLUKA v4-5.0: make the link time resolution of COMMON blocks (declared as external structs in the C++ source) compatible with the new FLUKA version. diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out index b685999608..6ae6e7912c 100644 --- a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out @@ -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 diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out index b25531aa44..6591b57652 100644 --- a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out @@ -13,12 +13,13 @@ IsIonProjectile: false ================================================================================ INCL++ WARNING -INCL++/G4ExcitationHandler could not use its own level-density parameter for fission +INCL++/G4ExcitationHandler uses its own level-density parameter for fission ================================================================================ Collision 0 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C======================================================================= ====== 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 @@ -35,6 +36,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 @@ -49,7 +51,7 @@ Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= - --> #secondaries=43 impactParameter[fm]=2.20708 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + --> #secondaries=42 impactParameter[fm]=2.20708 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 List of produced secondaries: j=0 pi0 p=(-278.058,-54.2447,249604249604) MeV j=1 pi+ p=(230.03,220.461,171304171305) MeV @@ -90,61 +92,58 @@ Max 2J for sampling of angular correlations 10 j=36 anti_proton p=(-816.5,-1044.45,300607300612) MeV j=37 pi0 p=(11.3286,-190.312,2085820859.3) MeV j=38 proton p=(-249.193,60.3146,80839.980845.8) MeV - j=39 alpha p=(-404.531,272.749,-743.5963832.01) MeV - j=40 deuteron p=(-125.646,-8.36222,305.6321904.52) MeV - j=41 neutron p=(-6.70431,-28.4088,129.241948.862) MeV - j=42 proton p=(293.93,-432.029,279.9491109.85) MeV + j=39 alpha p=(278.46,-577.735,-401.9663803.45) MeV + j=40 deuteron p=(43.2712,82.6642,-294.4411900.87) MeV + j=41 deuteron p=(-564.683,299.02,667.6342090.92) MeV Collision 1 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=22 impactParameter[fm]=1.85456 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + --> #secondaries=25 impactParameter[fm]=3.23918 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 Collision 2 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=43 impactParameter[fm]=2.09533 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 + --> #secondaries=36 impactParameter[fm]=3.11083 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 Collision 3 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=30 impactParameter[fm]=3.35024 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + --> #secondaries=53 impactParameter[fm]=2.49991 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 Collision 4 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=31 impactParameter[fm]=1.3321 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 + --> #secondaries=38 impactParameter[fm]=3.05785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 Collision 5 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=25 impactParameter[fm]=2.75879 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + --> #secondaries=43 impactParameter[fm]=2.50065 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 Collision 6 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=20 impactParameter[fm]=2.08175 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + --> #secondaries=31 impactParameter[fm]=3.02647 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 Collision 7 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=59 impactParameter[fm]=2.2439 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + --> #secondaries=45 impactParameter[fm]=2.71126 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 Collision 8 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=42 impactParameter[fm]=1.50589 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 + --> #secondaries=38 impactParameter[fm]=2.74992 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 Collision 9 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C - --> #secondaries=57 impactParameter[fm]=0.911544 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=4 + --> #secondaries=41 impactParameter[fm]=2.80333 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 ======================================================== Number of events 10 -Average (per event) number of He3 0.5 -Average (per event) number of alpha 0.4 -Average (per event) number of anti_lambda 0.1 -Average (per event) number of anti_neutron 0.4 -Average (per event) number of anti_proton 0.5 -Average (per event) number of anti_sigma0 0.1 -Average (per event) number of deuteron 0.7 -Average (per event) number of eta 0.7 -Average (per event) number of eta_prime 0.8 -Average (per event) number of gamma 0.1 -Average (per event) number of kaon+ 0.6 -Average (per event) number of kaon- 0.5 -Average (per event) number of kaon0L 0.5 -Average (per event) number of kaon0S 0.6 -Average (per event) number of lambda 0.1 -Average (per event) number of neutron 3.7 -Average (per event) number of pi+ 6.8 -Average (per event) number of pi- 6.7 -Average (per event) number of pi0 8.2 -Average (per event) number of proton 4.6 -Average (per event) number of sigma- 0.1 -Average (per event) number of sigma0 0.2 -Average (per event) number of triton 0.3 +Average (per event) number of He3 0.4 +Average (per event) number of alpha 0.7 +Average (per event) number of anti_lambda 0.2 +Average (per event) number of anti_neutron 0.2 +Average (per event) number of anti_proton 0.2 +Average (per event) number of deuteron 0.8 +Average (per event) number of eta 1.2 +Average (per event) number of eta_prime 1.1 +Average (per event) number of gamma 0.2 +Average (per event) number of kaon+ 1.3 +Average (per event) number of kaon- 0.7 +Average (per event) number of kaon0L 0.8 +Average (per event) number of kaon0S 1.4 +Average (per event) number of lambda 0.4 +Average (per event) number of neutron 3 +Average (per event) number of pi+ 7 +Average (per event) number of pi- 7.2 +Average (per event) number of pi0 8.6 +Average (per event) number of proton 3.2 +Average (per event) number of sigma+ 0.2 +Average (per event) number of triton 0.4 ======================================================== ### All histograms saved to all_secondaries.root ### All histograms saved to all_secondaries.hist - Final random number = 0.548214 + Final random number = 0.290975 -Processed 10 events (collisions) in 2.253800e-02 seconds. Average: 2.2538 ms / event. +Processed 10 events (collisions) in 3.334900e-02 seconds. Average: 3.3349 ms / event. === End of test === diff --git a/examples/extended/hadronic/Hadr00/hadr00.out b/examples/extended/hadronic/Hadr00/hadr00.out index bce4320246..761a286464 100644 --- a/examples/extended/hadronic/Hadr00/hadr00.out +++ b/examples/extended/hadronic/Hadr00/hadr00.out @@ -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 @@ -95,7 +95,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 ======== @@ -782,6 +782,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 @@ -798,6 +799,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 @@ -837,7 +839,7 @@ EventAction: Event # 0 started Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.007642s Sys=0.000000s + User=0.010000s Real=0.026834s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started ### Fill Cross Sections for proton off Al diff --git a/examples/extended/hadronic/Hadr01/hadr01.out b/examples/extended/hadronic/Hadr01/hadr01.out index 094a92cd2e..dd9dd5dcc0 100644 --- a/examples/extended/hadronic/Hadr01/hadr01.out +++ b/examples/extended/hadronic/Hadr01/hadr01.out @@ -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 @@ -151,7 +151,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 ======== @@ -613,7 +613,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics ### Run 0 starts. ### Run 0 start -Initialisation time: User=0.310000s Real=0.367647s Sys=0.010000s +Initialisation time: User=0.310000s Real=0.514446s Sys=0.000000s EventAction: Event #0 started EventAction: Event #10 started EventAction: Event #20 started @@ -627,8 +627,8 @@ EventAction: Event #90 started Run terminated. Run Summary Number of events processed : 100 - User=0.030000s Real=0.021907s Sys=0.000000s -RunAction::EndOfRunAction: User=0.030000s Real=0.021949s Sys=0.000000s + User=0.020000s Real=0.026883s Sys=0.000000s +RunAction::EndOfRunAction: User=0.020000s Real=0.026933s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started ======================================================== @@ -660,8 +660,8 @@ Average number of pion leak 0 # G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1a38ef0 -UserPhysicsList deleted 0x1a5c158 +UserDetectorConstruction deleted 0x8c95a0 +UserPhysicsList deleted 0x8ec808 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/hadronic/Hadr02/hadr02.out b/examples/extended/hadronic/Hadr02/hadr02.out index 24445608ea..72302758e6 100644 --- a/examples/extended/hadronic/Hadr02/hadr02.out +++ b/examples/extended/hadronic/Hadr02/hadr02.out @@ -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 @@ -30,23 +30,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", @@ -126,6 +127,7 @@ Some /vis commands (optionally) take a string to specify colour. Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 /run/setCut 1 km /gun/particle ion /gun/ion 16 32 @@ -160,7 +162,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 ======== @@ -573,6 +575,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -723,6 +739,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -732,6 +751,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -753,19 +775,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -776,6 +785,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -786,6 +798,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -819,6 +834,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 @@ -835,6 +851,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 @@ -883,33 +900,33 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.070000s Real=0.174204s Sys=0.000000s + User=0.050000s Real=0.065153s Sys=0.000000s RunAction: End of run action is starting HistoManager: End of run actions are started ======================================================== Beam particle S32 Beam Energy(GeV) 200 Number of events 100 -Average energy deposit (GeV) 6.793 RMS(GeV) 4.358 -Average number of steps 59.14 -Average number of gamma 0.57 +Average energy deposit (GeV) 7.299 RMS(GeV) 4.148 +Average number of steps 63.65 +Average number of gamma 0.43 Average number of e- 0 Average number of e+ 0 -Average number of neutrons 10.23 -Average number of protons 10.02 +Average number of neutrons 10.96 +Average number of protons 10.89 Average number of antiprotons 0 -Average number of pi+ & pi- 6.84 -Average number of pi0 3.96 +Average number of pi+ & pi- 6.95 +Average number of pi0 3.77 Average number of kaons 0.04 Average number of muons 0 -Average number of deuterons+tritons 2.62 -Average number of He3+alpha 1.81 -Average number of ions 0.46 +Average number of deuterons+tritons 2.37 +Average number of He3+alpha 1.37 +Average number of ions 0.39 ======================================================== Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 -Dynamic pools deleted: 12 / Total memory freed: 0.09 MB +Dynamic pools deleted: 12 / Total memory freed: 0.091 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr03/Hadr03.cc b/examples/extended/hadronic/Hadr03/Hadr03.cc index c338f9a966..ca06897d89 100644 --- a/examples/extended/hadronic/Hadr03/Hadr03.cc +++ b/examples/extended/hadronic/Hadr03/Hadr03.cc @@ -78,7 +78,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(true); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/hadronic/Hadr03/History b/examples/extended/hadronic/Hadr03/History index c017729c41..31aa84c20f 100644 --- a/examples/extended/hadronic/Hadr03/History +++ b/examples/extended/hadronic/Hadr03/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (exhadr03-V11-03-00) +- Hadr03.cc - SetUseNRESP71Model(true) + ## 2024-03-08 Michel Maire (exhadr03-V11-02-01) - PrimaryGeneratorAction - added tiny shift of position of the particle gun from the world volume boundary. This fix removes diff --git a/examples/extended/hadronic/Hadr03/hadr03.out b/examples/extended/hadronic/Hadr03/hadr03.out index 94ed0fe5f4..63057843d0 100644 --- a/examples/extended/hadronic/Hadr03/hadr03.out +++ b/examples/extended/hadronic/Hadr03/hadr03.out @@ -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 @@ -57,7 +57,7 @@ Command is ignored. Do not adjust final state 1 Produce fission fragments 1 Use WendtFissionModel 0 - Use NRESP71Model 0 + Use NRESP71Model 1 Use DBRC 0 PHP use Poisson 0 PHP check 1 @@ -218,7 +218,7 @@ Command is ignored. 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 @@ -279,6 +279,7 @@ Command is ignored. ======================================================================= ====== 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 @@ -295,6 +296,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 @@ -340,17 +342,17 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.050000s Real=0.051463s Sys=0.000000s + User=0.050000s Real=0.049370s Sys=0.000000s The run is 10000 proton of 10 MeV through 10 m of Molybdenum98 (density: 10.28 g/cm3 ) Process calls frequency: - hadElastic= 8135 protonInelastic= 1865 + hadElastic= 8120 protonInelastic= 1880 - MeanFreePath: 4.9528 cm +- 4.9326 cm massic: 50.915 g/cm2 - CrossSection: 0.20191 cm^-1 massic: 1.9641 mm2/g - crossSection per atom: 3.1931 barn + MeanFreePath: 4.9903 cm +- 4.9635 cm massic: 51.301 g/cm2 + CrossSection: 0.20039 cm^-1 massic: 1.9493 mm2/g + crossSection per atom: 3.1691 barn Verification: crossSections from G4HadronicProcessStore @@ -360,37 +362,37 @@ Run Summary List of nuclear reactions: - proton + Mo98 --> N gamma or e- + Tc99: 21 Q = 6.4903 MeV - proton + Mo98 --> N gamma or e- + Tc99[142.684]: 3 Q = 6.3448 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98: 1695 Q = -2.4768 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[138.590]: 106 Q = -2.6182 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[90.770]: 15 Q = -2.5661 MeV - proton + Mo98 --> N gamma or e- + proton + Mo98: 24 Q = -7.5247 meV - proton + Mo98 --> N gamma or e- + proton + Mo98[734.750]: 1 Q = -734.75 keV - proton + Mo98 --> proton + Mo98: 8135 Q = -0.0056849 meV + proton + Mo98 --> N gamma or e- + Tc99: 13 Q = 6.491 MeV + proton + Mo98 --> N gamma or e- + Tc99[142.684]: 2 Q = 6.3518 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98: 1708 Q = -2.4771 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[138.590]: 128 Q = -2.6179 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[90.770]: 9 Q = -2.5656 MeV + proton + Mo98 --> N gamma or e- + proton + Mo98: 15 Q = 0.54075 meV + proton + Mo98 --> N gamma or e- + proton + Mo98[734.750]: 5 Q = -734.75 keV + proton + Mo98 --> proton + Mo98: 8120 Q = -0.0056987 meV number of gamma or e- (ic): N = 1 --> 12 List of generated particles: - Mo98: 8159 Emean = 32.88 keV ( 518.57 meV --> 403.53 keV) - Mo98[734.750]: 1 Emean = 213.75 keV ( 213.75 keV --> 213.75 keV) - Tc98: 1695 Emean = 119.51 keV ( 14.009 keV --> 303.68 keV) - Tc98[138.590]: 106 Emean = 124.94 keV ( 10.339 keV --> 298.32 keV) - Tc98[90.770]: 15 Emean = 136.39 keV ( 39.975 keV --> 236.45 keV) - Tc99: 21 Emean = 103.33 keV ( 89.385 keV --> 118.5 keV) - Tc99[142.684]: 3 Emean = 98.445 keV ( 96.511 keV --> 99.576 keV) - e-: 618 Emean = 58.96 keV ( 18.479 keV --> 1.0243 MeV) - gamma: 10203 Emean = 1.0555 MeV ( 1.9795 keV --> 12.578 MeV) - neutron: 1816 Emean = 1.7069 MeV ( 20.947 keV --> 7.1849 MeV) - proton: 25 Emean = 6.4261 MeV ( 3.8223 MeV --> 8.9363 MeV) + Mo98: 8135 Emean = 33.123 keV ( 1.527 eV --> 397.27 keV) + Mo98[734.750]: 5 Emean = 114.87 keV ( 21.433 keV --> 215.66 keV) + Tc98: 1708 Emean = 118.22 keV ( 17.125 keV --> 276.68 keV) + Tc98[138.590]: 128 Emean = 126.96 keV ( 23.481 keV --> 259.65 keV) + Tc98[90.770]: 9 Emean = 104.35 keV ( 31.97 keV --> 188.37 keV) + Tc99: 13 Emean = 107.39 keV ( 92.122 keV --> 118.5 keV) + Tc99[142.684]: 2 Emean = 103.36 keV ( 97.242 keV --> 109.48 keV) + e-: 682 Emean = 62.704 keV ( 18.487 keV --> 1.0243 MeV) + gamma: 10055 Emean = 1.0656 MeV ( 3.4119 keV --> 10.787 MeV) + neutron: 1845 Emean = 1.7232 MeV ( 19.298 keV --> 7.1051 MeV) + proton: 20 Emean = 7.1773 MeV ( 4.3642 MeV --> 9.0435 MeV) - Momentum balance: Pmean = 50.271 eV ( 0.00080125 meV --> 3.9649 keV) + Momentum balance: Pmean = 54.244 eV ( 0.002461 meV --> 3.2747 keV) ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1093877387788901833, 371147560395594651, 2010310641773795863, 707006126048023309, 1283752845460136263, 2136901667507396667, 1732726348304668616, 162871380996529247, 1617401799312215591, 701469719018658424, 1409313085569743966, 2272540614347028566, 2055787017028499992, 370409348396242833, 1696783569287438066, 1282169188348987666, 1030594570725304792} counter= 13sumtot= 1182475787385920786 +N=17 V[N]={908227007396948181, 1720771358049332421, 2227873285104074339, 345701894591028024, 866093422604108136, 567583627094808421, 961947697454908808, 750023208248768897, 1459128747913359293, 412733079020239577, 185706477041526521, 639736288902292327, 879790779891937794, 2202234093630983411, 1055450509529291002, 290007266799256309, 2123872506005804216} counter= 5sumtot= 1455980184782810020 --------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 diff --git a/examples/extended/hadronic/Hadr04/Hadr04.cc b/examples/extended/hadronic/Hadr04/Hadr04.cc index 595dfbe1a1..bb57c0e630 100644 --- a/examples/extended/hadronic/Hadr04/Hadr04.cc +++ b/examples/extended/hadronic/Hadr04/Hadr04.cc @@ -84,7 +84,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // get the pointer to the User Interface manager G4UImanager* UImanager = G4UImanager::GetUIpointer(); diff --git a/examples/extended/hadronic/Hadr04/History b/examples/extended/hadronic/Hadr04/History index 8b4c5fd02f..1a6e2f4bc8 100644 --- a/examples/extended/hadronic/Hadr04/History +++ b/examples/extended/hadronic/Hadr04/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (exhadr04-V11-03-00) +- Hadr04.cc - SetUseNRESP71Model(true) + ## 2024-03-07 Michel Maire (exhadr04-V11-02-00) - update Readme diff --git a/examples/extended/hadronic/Hadr04/hadr04.out b/examples/extended/hadronic/Hadr04/hadr04.out index a75a7f7550..d909cb01f4 100644 --- a/examples/extended/hadronic/Hadr04/hadr04.out +++ b/examples/extended/hadronic/Hadr04/hadr04.out @@ -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 @@ -56,22 +56,15 @@ physicsList->setCut() start. /run/printProgress 100 /run/beamOn 1000 -Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements are registered. -Element TS_H_of_Water, internal thermal scattering id 0 -Element TS_D_of_Heavy_Water, internal thermal scattering id 1 -Element TS_C_of_Graphite, internal thermal scattering id 2 - - Neutron HP Thermal Scattering: Following material-element pairs or elements are registered. Element TS_H_of_Water, internal thermal scattering id 0 Element TS_D_of_Heavy_Water, internal thermal scattering id 1 Element TS_C_of_Graphite, internal thermal scattering id 2 - -Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements are registered. -Element TS_H_of_Water, internal thermal scattering id 0 -Element TS_D_of_Heavy_Water, internal thermal scattering id 1 -Element TS_C_of_Graphite, internal thermal scattering id 2 +##T## Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements are registered for 3 materials. + Element TS_H_of_Water, internal thermal scattering id 0 + Element TS_D_of_Heavy_Water, internal thermal scattering id 1 + Element TS_C_of_Graphite, internal thermal scattering id 2 ==================================================================== @@ -104,7 +97,7 @@ Element TS_C_of_Graphite, internal thermal scattering id 2 Do not adjust final state 1 Produce fission fragments 0 Use WendtFissionModel 0 - Use NRESP71Model 0 + Use NRESP71Model 1 Use DBRC 0 PHP use Poisson 0 PHP check 1 @@ -166,7 +159,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000 - User=4.970000s Real=7.828092s Sys=0.000000s + User=5.090000s Real=5.146329s Sys=0.000000s The run is 1000 neutron of 2 MeV through 50 cm of Water_ts (density: 1 g/cm3 ) @@ -192,9 +185,9 @@ Run Summary ---------------------------------------- G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x24aa660 -UserPhysicsList deleted 0x2750320 -UserActionInitialization deleted 0x28bf420 +UserDetectorConstruction deleted 0x5efe50 +UserPhysicsList deleted 0x8969d0 +UserActionInitialization deleted 0xa05ad0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/hadronic/Hadr05/Hadr05.cc b/examples/extended/hadronic/Hadr05/Hadr05.cc index 66b2bcfa0c..052e52401d 100644 --- a/examples/extended/hadronic/Hadr05/Hadr05.cc +++ b/examples/extended/hadronic/Hadr05/Hadr05.cc @@ -80,7 +80,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/hadronic/Hadr05/History b/examples/extended/hadronic/Hadr05/History index 3e3f5acce4..500ac99b03 100644 --- a/examples/extended/hadronic/Hadr05/History +++ b/examples/extended/hadronic/Hadr05/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (exhadr05-V11-03-00) +- Hadr05.cc - SetUseNRESP71Model(true) + ## 2024-03-07 Michel Maire (exhadr05-V11-02-00) - PrimaryGeneratorAction - added tiny shift of position of the particle gun from the world volume boundary. This fix removes diff --git a/examples/extended/hadronic/Hadr05/hadr05.out b/examples/extended/hadronic/Hadr05/hadr05.out index 8b45c773a0..ce04cf3fc8 100644 --- a/examples/extended/hadronic/Hadr05/hadr05.out +++ b/examples/extended/hadronic/Hadr05/hadr05.out @@ -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 @@ -118,35 +118,35 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=37.160000s Real=41.384977s Sys=0.000000s + User=40.020000s Real=44.532008s Sys=0.040000s ---> The run is 1000 proton of 5 GeV through calorimeter Process calls frequency : - Decay= 4702 He3Inelastic= 2 NoProcess= 4161571 - RadioactiveDecay= 60695 Rayl= 216312 Transportation= 3587283 - alphaInelastic= 2 annihil= 59239 compt= 2606906 - conv= 55764 dInelastic= 111 eBrem= 388259 - eIoni= 6107634 hBertiniCaptureAtRest= 701 hIoni= 1444229 - hadElastic= 4613038 ionIoni= 4236995 kaon+Inelastic= 17 - kaon-Inelastic= 1 kaon0LInelastic= 8 kaon0SInelastic= 2 - lambdaInelastic= 6 msc= 260164 muBrems= 1 - muIoni= 11338 muMinusCaptureAtRest= 7 nCapture= 52681 - neutronInelastic= 91801 phot= 840688 photonNuclear= 205 - pi+Inelastic= 1127 pi-Inelastic= 906 protonInelastic= 4160 - tInelastic= 6 + Decay= 4475 He3Inelastic= 1 NoProcess= 4159176 + RadioactiveDecay= 60253 Rayl= 215626 Transportation= 3580315 + alphaInelastic= 1 annihil= 59207 compt= 2601735 + conv= 55807 dInelastic= 110 eBrem= 389491 + eIoni= 6104021 hBertiniCaptureAtRest= 667 hIoni= 1438682 + hadElastic= 4612176 ionElastic= 1 ionIoni= 4233993 + kaon+Inelastic= 7 kaon0LInelastic= 7 kaon0SInelastic= 2 + lambdaInelastic= 7 msc= 258734 muIoni= 10330 + muMinusCaptureAtRest= 8 nCapture= 52491 neutronInelastic= 91547 + phot= 840648 photonNuclear= 205 pi+Inelastic= 1125 + pi-Inelastic= 961 protonInelastic= 4244 sigma-Inelastic= 1 + tInelastic= 10 ------------------------------------------------------------ material Edep rmsE sqrt(E0(GeV))*rmsE/Edep total tracklen - 1 Iron 4.0209 GeV 268.5 MeV 14.93 +- 0.472 % 2.165 m +- 42.1 cm - 2 Scintillator 113.89 MeV 34.28 MeV 67.31 +- 2.13 % 22.62 cm +- 6.38 cm + 1 Iron 4.0362 GeV 276.7 MeV 15.33 +- 0.485 % 2.18 m +- 45.1 cm + 2 Scintillator 113.91 MeV 32.66 MeV 64.1 +- 2.03 % 22.9 cm +- 6.94 cm - Total energy deposited = 4.135 GeV +- 271.8 MeV - Leakage : primary = 0 eV secondaries = 203.9 MeV ---> total = 203.9 MeV +- 159.7 MeV - Total energy released : Edep + Eleak = 4.339 GeV +- 179.7 MeV + Total energy deposited = 4.15 GeV +- 278.3 MeV + Leakage : primary = 0 eV secondaries = 192.3 MeV ---> total = 192.3 MeV +- 160.9 MeV + Total energy released : Edep + Eleak = 4.342 GeV +- 186.1 MeV ------------------------------------------------------------ ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.29 MB +Dynamic pools deleted: 11 / Total memory freed: 0.31 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr06/Hadr06.cc b/examples/extended/hadronic/Hadr06/Hadr06.cc index 6936007964..f5a7c1d92c 100644 --- a/examples/extended/hadronic/Hadr06/Hadr06.cc +++ b/examples/extended/hadronic/Hadr06/Hadr06.cc @@ -81,7 +81,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/hadronic/Hadr06/History b/examples/extended/hadronic/Hadr06/History index 053435b6f3..2d77a644b4 100644 --- a/examples/extended/hadronic/Hadr06/History +++ b/examples/extended/hadronic/Hadr06/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (exhadr06-V11-03-00) +- Hadr06.cc - SetUseNRESP71Model(true) + ## 2024-03-20 Michel Maire (exhadr06-V11-02-00) - RadioactiveDecayPhysics.cc: add Triton - apply coding rules. document hadr06.in diff --git a/examples/extended/hadronic/Hadr06/hadr06.out b/examples/extended/hadronic/Hadr06/hadr06.out index fe7321767e..36ec33e63d 100644 --- a/examples/extended/hadronic/Hadr06/hadr06.out +++ b/examples/extended/hadronic/Hadr06/hadr06.out @@ -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 @@ -75,7 +75,7 @@ Threshold for very long decay time at rest 1 y Do not adjust final state 1 Produce fission fragments 0 Use WendtFissionModel 0 - Use NRESP71Model 0 + Use NRESP71Model 1 Use DBRC 0 PHP use Poisson 0 PHP check 1 @@ -253,7 +253,7 @@ Threshold for very long decay time at rest 1 y 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 @@ -316,6 +316,7 @@ Threshold for very long decay time at rest 1 y ======================================================================= ====== 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 @@ -332,6 +333,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 @@ -383,49 +385,50 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=3.910000s Real=4.560082s Sys=0.000000s + User=4.020000s Real=4.057436s Sys=0.000000s The run is 10000 neutron of 14.1 MeV through 30 cm of Li7 (density: 1.85 g/cm3 ) Process calls frequency : - NoProcess= 195627 RadioactiveDecay= 200 Rayl= 9108 - Transportation= 46700 annihil= 227 compt= 171805 - conv= 229 eIoni= 262242 hIoni= 150 - hadElastic= 180029 ionIoni= 282274 msc= 33 - nCapture= 25 neutronInelastic= 16461 phot= 3347 + Decay= 2 NoProcess= 196283 RadioactiveDecay= 186 + Rayl= 9007 Transportation= 46954 annihil= 215 + compt= 172342 conv= 216 eIoni= 262502 + hIoni= 135 hadElastic= 180601 ionIoni= 282819 + msc= 17 nCapture= 27 neutronInelastic= 16570 + phot= 3325 photonNuclear= 2 + Mean energy deposit per event = 8.7662 MeV rms = 3.8145 MeV + Mean energy leakage per event = 2.7837 MeV rms = 3.253 MeV - Mean energy deposit per event = 8.7993 MeV rms = 3.7853 MeV - Mean energy leakage per event = 2.7493 MeV rms = 3.2017 MeV - - Mean energy total per event = 11.549 MeV rms = 3.2429 MeV + Mean energy total per event = 11.55 MeV rms = 3.2719 MeV List of particles at creation : - Be8[3030.000]: 25 Emean = 6.6286 keV ( 964.96 eV --> 12.112 keV) mean life = 0 ps - He6: 150 Emean = 1.2829 MeV ( 923.59 keV --> 1.3372 MeV) mean life = 1.1638 s - Li6: 150 Emean = 767.5 eV ( 4.9811 eV --> 1.3963 keV) stable - Li7: 195477 Emean = 332.93 keV ( 0.81997 meV --> 6.2103 MeV) stable - Li8: 25 Emean = 2.1764 keV ( 72.83 eV --> 25.449 keV) mean life = 1.2117 s - alpha: 331 Emean = 1.2119 MeV ( 34.992 keV --> 3.5799 MeV) stable - anti_nu_e: 175 Emean = 2.6933 MeV ( 414.59 keV --> 11.501 MeV) stable - deuteron: 150 Emean = 428.64 keV ( 308.95 keV --> 446.7 keV) stable - e+: 229 Emean = 1.8284 MeV ( 72.445 keV --> 3.587 MeV) stable - e-: 170755 Emean = 129.07 keV ( 100.01 eV --> 12.04 MeV) stable - gamma: 15947 Emean = 2.4396 MeV ( 213 keV --> 4.628 MeV) stable - neutron: 17174 Emean = 3.4143 MeV ( 1.297 keV --> 13.631 MeV) mean life = 14.67 min + Be8[3030.000]: 27 Emean = 6.2413 keV ( 1.6934 keV --> 11.484 keV) mean life = 0 ps + He6: 132 Emean = 1.2759 MeV ( 941 keV --> 1.3372 MeV) mean life = 1.1638 s + Li6: 132 Emean = 808.56 eV ( 3.7548 eV --> 1.3944 keV) stable + Li7: 196151 Emean = 330.16 keV ( 0.62886 meV --> 6.2064 MeV) stable + Li8: 27 Emean = 239.87 eV ( 12.618 eV --> 485.41 eV ) mean life = 1.2117 s + alpha: 373 Emean = 1.2345 MeV ( 46.409 keV --> 4.4738 MeV) stable + anti_nu_e: 159 Emean = 2.665 MeV ( 364 keV --> 10.193 MeV) stable + deuteron: 132 Emean = 426.29 keV ( 314.75 keV --> 446.7 keV) stable + e+: 216 Emean = 1.7077 MeV ( 72.445 keV --> 3.587 MeV) stable + e-: 171304 Emean = 128.67 keV ( 100.04 eV --> 11.205 MeV) stable + gamma: 16020 Emean = 2.4205 MeV ( 294.75 keV --> 4.628 MeV) stable + neutron: 17326 Emean = 3.4274 MeV ( 439.11 eV --> 13.638 MeV) mean life = 14.67 min + triton: 2 Emean = 1.2161 MeV ( 1.2059 MeV --> 1.2264 MeV) mean life = 17.774 y List of particles emerging from the absorber : - anti_nu_e: 175 Emean = 2.6933 MeV ( 414.59 keV --> 11.501 MeV) Eleak/event = 47.134 keV - e+: 2 Emean = 2.6564 MeV ( 2.2154 MeV --> 3.0974 MeV) Eleak/event = 531.28 eV - e-: 114 Emean = 1.9 MeV ( 32.499 keV --> 4.2602 MeV) Eleak/event = 21.66 keV - gamma: 12371 Emean = 1.341 MeV ( 11.627 keV --> 4.628 MeV) Eleak/event = 1.659 MeV - neutron: 10688 Emean = 955.23 keV ( 11.651 meV --> 14.1 MeV) Eleak/event = 1.021 MeV + anti_nu_e: 159 Emean = 2.665 MeV ( 364 keV --> 10.193 MeV) Eleak/event = 42.373 keV + e+: 1 Emean = 2.1604 MeV ( 2.1604 MeV --> 2.1604 MeV) Eleak/event = 216.04 eV + e-: 110 Emean = 1.8862 MeV ( 52.565 keV --> 7.1043 MeV) Eleak/event = 20.748 keV + gamma: 12477 Emean = 1.3244 MeV ( 11.928 keV --> 4.628 MeV) Eleak/event = 1.6524 MeV + neutron: 10729 Emean = 995.36 keV ( 16.982 meV --> 14.1 MeV) Eleak/event = 1.0679 MeV --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1000568292, 1259049177 + Current couple of seeds = 1425445611, 217571473 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.072 MB +Dynamic pools deleted: 11 / Total memory freed: 0.062 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr07/Hadr07.cc b/examples/extended/hadronic/Hadr07/Hadr07.cc index 8b4dd91537..e9d074907d 100644 --- a/examples/extended/hadronic/Hadr07/Hadr07.cc +++ b/examples/extended/hadronic/Hadr07/Hadr07.cc @@ -80,7 +80,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/hadronic/Hadr07/History b/examples/extended/hadronic/Hadr07/History index a0658689d8..ed25dcc6fe 100644 --- a/examples/extended/hadronic/Hadr07/History +++ b/examples/extended/hadronic/Hadr07/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (exhadr07-V11-03-00) +- Hadr07.cc - SetUseNRESP71Model(true) + ## 2024-03-20 Michel Maire (exhadr07-V11-02-00) - RadioactiveDecayPhysics.cc: add Triton - apply coding rules: HistoManager.cc, Run.cc, TrackingAction.cc, diff --git a/examples/extended/hadronic/Hadr07/hadr07.out b/examples/extended/hadronic/Hadr07/hadr07.out index e2849b77ba..74a74a7be1 100644 --- a/examples/extended/hadronic/Hadr07/hadr07.out +++ b/examples/extended/hadronic/Hadr07/hadr07.out @@ -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 @@ -89,7 +89,7 @@ NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use Do not adjust final state 1 Produce fission fragments 0 Use WendtFissionModel 0 - Use NRESP71Model 0 + Use NRESP71Model 1 Use DBRC 0 PHP use Poisson 0 PHP check 1 @@ -99,8 +99,6 @@ NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron/n data directory is /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic -NeutronHP: /Capture file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_37_Argon -NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_39_Argon ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) @@ -255,7 +253,7 @@ NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use 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 @@ -316,6 +314,7 @@ NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use ======================================================================= ====== 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 @@ -332,6 +331,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 @@ -383,7 +383,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=2.490000s Real=3.345023s Sys=0.000000s + User=2.580000s Real=2.919731s Sys=0.000000s ======================== run summary ===================== @@ -391,45 +391,45 @@ Run Summary 1 30 cm of Li7 (density: 1.85 g/cm3 ) Process calls frequency : - Decay= 1 NoProcess= 99748 RadioactiveDecay= 144 - Rayl= 1520 Transportation= 58744 annihil= 136 - compt= 52720 conv= 139 eBrem= 732 - eIoni= 108133 hIoni= 144 hadElastic= 86318 - ionIoni= 172207 msc= 60 nCapture= 1 - neutronInelastic= 14276 phot= 807 photonNuclear= 1 + Decay= 1 NoProcess= 99649 RadioactiveDecay= 141 + Rayl= 1503 Transportation= 58680 annihil= 133 + compt= 52172 conv= 136 eBrem= 728 + eIoni= 107286 hIoni= 141 hadElastic= 86227 + ionIoni= 171906 msc= 58 nCapture= 1 + neutronInelastic= 14258 phot= 806 photonNuclear= 1 - Edep in absorber 1 = 6.92 MeV (2.36 keV-->14.1 MeV) - Energy leakage = 4.69 MeV (367 eV -->16.1 MeV) + Edep in absorber 1 = 6.9 MeV (2.36 keV-->15.5 MeV) + Energy leakage = 4.69 MeV (367 eV -->14.6 MeV) Energy total = 11.6 MeV (793 keV-->30.1 MeV) List of created particles in absorber 1: - Be8[3030.000]: 1 Emean = 5.8 keV ( 5.8 keV --> 5.8 keV) mean life = 0 ps - He6: 142 Emean = 1.28 MeV ( 939 keV --> 1.34 MeV) mean life = 1.16 s - Li6: 142 Emean = 834 eV ( 13 eV --> 1.4 keV) stable - Li7: 99606 Emean = 561 keV ( 294 meV --> 6.21 MeV) stable - Li8: 1 Emean = 7.66 keV ( 7.66 keV --> 7.66 keV) mean life = 1.21 s - alpha: 269 Emean = 1.25 MeV ( 40.6 keV --> 4.21 MeV) stable - anti_nu_e: 143 Emean = 1.99 MeV ( 400 keV --> 9.54 MeV) stable - deuteron: 142 Emean = 428 keV ( 314 keV --> 447 keV) stable - e+: 139 Emean = 1.87 MeV ( 35 keV --> 3.54 MeV) stable - e-: 53407 Emean = 247 keV ( 100 eV --> 4.39 MeV) stable - gamma: 14272 Emean = 2.52 MeV ( 1.52 keV --> 4.63 MeV) stable - neutron: 14980 Emean = 3.7 MeV ( 3.26 keV --> 13.6 MeV) mean life = 14.7 min + Be8[3030.000]: 1 Emean = 7.08 keV ( 7.08 keV --> 7.08 keV) mean life = 0 ps + He6: 139 Emean = 1.28 MeV ( 939 keV --> 1.34 MeV) mean life = 1.16 s + Li6: 139 Emean = 830 eV ( 13 eV --> 1.4 keV) stable + Li7: 99510 Emean = 561 keV ( 294 meV --> 6.21 MeV) stable + Li8: 1 Emean = 8.55 keV ( 8.55 keV --> 8.55 keV) mean life = 1.21 s + alpha: 264 Emean = 1.27 MeV ( 40.6 keV --> 4.21 MeV) stable + anti_nu_e: 140 Emean = 1.99 MeV ( 400 keV --> 7.89 MeV) stable + deuteron: 139 Emean = 427 keV ( 314 keV --> 447 keV) stable + e+: 136 Emean = 1.86 MeV ( 60 keV --> 3.54 MeV) stable + e-: 52879 Emean = 248 keV ( 100 eV --> 5.08 MeV) stable + gamma: 14254 Emean = 2.52 MeV ( 1.52 keV --> 4.63 MeV) stable + neutron: 14955 Emean = 3.69 MeV ( 3.26 keV --> 13.6 MeV) mean life = 14.7 min triton: 1 Emean = 1.23 MeV ( 1.23 MeV --> 1.23 MeV) mean life = 17.8 y List of particles emerging from absorbers : - anti_nu_e: 143 Emean = 1.99 MeV ( 400 keV --> 9.54 MeV) + anti_nu_e: 140 Emean = 1.99 MeV ( 400 keV --> 7.89 MeV) e+: 3 Emean = 2.03 MeV ( 881 keV --> 2.85 MeV) - e-: 195 Emean = 1.7 MeV ( 49.9 keV --> 4.24 MeV) - gamma: 13325 Emean = 1.71 MeV ( 4.43 keV --> 4.63 MeV) - neutron: 10703 Emean = 2.19 MeV ( 2.87 eV --> 14.1 MeV) + e-: 187 Emean = 1.71 MeV ( 49.9 keV --> 4.24 MeV) + gamma: 13311 Emean = 1.72 MeV ( 4.43 keV --> 4.63 MeV) + neutron: 10696 Emean = 2.19 MeV ( 2.87 eV --> 14.1 MeV) - Nb of events with primary absorbed = 88 %, transmit = 6.2 %, reflected = 6.2 % + Nb of events with primary absorbed = 87 %, transmit = 6.2 %, reflected = 6.3 % --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1978923364, 1390006364 + Current couple of seeds = 640386647, 929293907 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 diff --git a/examples/extended/hadronic/Hadr08/hadr08.out b/examples/extended/hadronic/Hadr08/hadr08.out index 4f99892a54..f8afb060dd 100644 --- a/examples/extended/hadronic/Hadr08/hadr08.out +++ b/examples/extended/hadronic/Hadr08/hadr08.out @@ -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 @@ -29,7 +29,7 @@ DetectorConstruction.... ================================================================================ INCL++ WARNING -INCL++/G4ExcitationHandler could not use its own level-density parameter for fission +INCL++/G4ExcitationHandler uses its own level-density parameter for fission ================================================================================ @@ -67,7 +67,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 ======== @@ -720,6 +720,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 @@ -736,6 +737,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 @@ -786,8 +788,8 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=2.600000s Real=5.020905s Sys=0.000000s + User=2.780000s Real=6.317869s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.1 MB +Dynamic pools deleted: 11 / Total memory freed: 0.14 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr09/hadr09.out b/examples/extended/hadronic/Hadr09/hadr09.out index 6ba6058cd0..ebfe1610bc 100644 --- a/examples/extended/hadronic/Hadr09/hadr09.out +++ b/examples/extended/hadronic/Hadr09/hadr09.out @@ -10,17 +10,18 @@ IsIonProjectile: false =================================================== - Initial seed = 1745424323 + Initial seed = 1750480776 ================================================================================ INCL++ WARNING -INCL++/G4ExcitationHandler could not use its own level-density parameter for fission +INCL++/G4ExcitationHandler uses its own level-density parameter for fission ================================================================================ - Collision 0 projectile=kaon0S Ekin[MeV]=21027.6 direction=(0.272729,0.0914885,0.957731) material=G4_Si======================================================================= + Collision 0 projectile=B- Ekin[MeV]=27217.8 direction=(0.0244311,0.868505,0.495079) material=G4_He======================================================================= ====== 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 @@ -37,6 +38,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 @@ -51,2208 +53,2288 @@ Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= - --> #secondaries=12 impactParameter[fm]=3.37121 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + --> #secondaries=9 impactParameter[fm]=0.461502 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 List of produced secondaries: - j=0 kaon0L p=(1969.74,424.506,6564.936885.2) MeV - j=1 pi0 p=(382.755,85.9562,2115.792156.08) MeV - j=2 pi0 p=(-233.989,149.821,777.49836.604) MeV - j=3 pi- p=(985.424,459.687,2817.353023.13) MeV - j=4 pi0 p=(1645.22,298.609,5901.256135.05) MeV - j=5 pi+ p=(682.861,269.553,2131.412258.61) MeV - j=6 He3 p=(-377.041,-408.046,727.8852953.9) MeV - j=7 O16 p=(407.387,655.149,-189.43214916.3) MeV - j=8 alpha p=(257.75,74.5867,-157.6263740.35) MeV - j=9 alpha p=(170.757,-33.5434,-43.68823731.69) MeV - j=10 neutron p=(-22.4921,-7.09115,-36.1124940.555) MeV - j=11 gamma p=(0.595116,-0.407867,0.5689430.918812) MeV - Collision 1 projectile=anti_omega_b- Ekin[MeV]=13540.5 direction=(0.95683,0.170804,0.235163) material=G4_Al - --> #secondaries=16 impactParameter[fm]=3.83592 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 2 projectile=anti_omega- Ekin[MeV]=24942 direction=(0.363865,0.79275,0.489029) material=G4_Cu - --> #secondaries=26 impactParameter[fm]=4.19459 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 3 projectile=deuteron Ekin[MeV]=15062.2 direction=(0.551861,0.691509,0.466116) material=G4_C - --> #secondaries=10 impactParameter[fm]=3.23161 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 4 projectile=D0 Ekin[MeV]=1721.94 direction=(0.464316,0.42032,0.779578) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=1.96695 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 5 projectile=D+ Ekin[MeV]=19387.4 direction=(0.437309,0.337618,0.833532) material=G4_Be - --> #secondaries=13 impactParameter[fm]=2.12385 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 6 projectile=anti_xi0 Ekin[MeV]=8499.94 direction=(0.586483,0.170989,0.791707) material=G4_Si - --> #secondaries=21 impactParameter[fm]=1.866 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 7 projectile=anti_xi_b- Ekin[MeV]=10944.1 direction=(0.727059,0.635215,0.260551) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.388224 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 8 projectile=anti_sigma- Ekin[MeV]=23912.1 direction=(0.164842,0.93674,0.308779) material=G4_Si - --> #secondaries=11 impactParameter[fm]=3.52932 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 9 projectile=anti_hypertriton Ekin[MeV]=22687.4 direction=(0.23826,0.239699,0.941157) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=5.11184 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 10 projectile=anti_Bs0 Ekin[MeV]=2791.41 direction=(0.722556,0.367922,0.585275) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=5.76554 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 11 projectile=B+ Ekin[MeV]=13739.4 direction=(0.813954,0.562189,0.146364) material=G4_W - --> #secondaries=22 impactParameter[fm]=5.73469 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 12 projectile=B+ Ekin[MeV]=7904.01 direction=(0.892133,0.280515,0.354133) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=0.758692 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=2 - Collision 13 projectile=Ds- Ekin[MeV]=11838.6 direction=(0.840107,0.0859831,0.535562) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=3.50046 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 14 projectile=B0 Ekin[MeV]=9535.09 direction=(0.62542,0.778401,0.0542291) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=3.60652 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 15 projectile=xi- Ekin[MeV]=10960.1 direction=(0.454692,0.877545,0.152216) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=4.19205 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 16 projectile=anti_triton Ekin[MeV]=4295.72 direction=(0.200675,0.940521,0.274135) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.98163 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 17 projectile=hypertriton Ekin[MeV]=18036 direction=(0.731493,0.127036,0.66991) material=G4_Pb - --> #secondaries=160 impactParameter[fm]=3.01787 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=187 #NNcollisions=7 - Collision 18 projectile=pi+ Ekin[MeV]=7421.48 direction=(0.572524,0.147556,0.806501) material=G4_W - --> #secondaries=70 impactParameter[fm]=3.26982 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=2 - Collision 19 projectile=anti_hyperH4 Ekin[MeV]=24143.9 direction=(0.0318224,0.785763,0.617709) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=6.03144 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 20 projectile=pi- Ekin[MeV]=10283.4 direction=(0.958189,0.256182,0.127457) material=G4_C - --> #secondaries=13 impactParameter[fm]=1.4131 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 21 projectile=hyperHe5 Ekin[MeV]=24506.7 direction=(0.147082,0.07811,0.986035) material=G4_He - --> #secondaries=5 impactParameter[fm]=3.73542 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 22 projectile=lambda_c+ Ekin[MeV]=18900.8 direction=(0.313206,0.795583,0.518603) material=G4_Si - --> #secondaries=26 impactParameter[fm]=1.00832 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 23 projectile=kaon+ Ekin[MeV]=12805.4 direction=(0.927007,0.292384,0.234882) material=G4_Be - --> #secondaries=12 impactParameter[fm]=1.73495 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 24 projectile=anti_lambda_b Ekin[MeV]=23140.9 direction=(0.400828,0.22348,0.888478) material=G4_Cu - --> #secondaries=38 impactParameter[fm]=3.55616 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 25 projectile=Bc+ Ekin[MeV]=3697.18 direction=(0.0284395,0.300073,0.953492) material=G4_C - --> #secondaries=5 impactParameter[fm]=2.31337 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 26 projectile=xi_b0 Ekin[MeV]=7427.78 direction=(0.286673,0.204485,0.935951) material=G4_C - --> #secondaries=12 impactParameter[fm]=1.41083 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 27 projectile=hypertriton Ekin[MeV]=14179.5 direction=(0.84765,0.13325,0.51355) material=G4_W - --> #secondaries=136 impactParameter[fm]=2.35939 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=165 #NNcollisions=5 - Collision 28 projectile=anti_lambda Ekin[MeV]=14690.9 direction=(0.755024,0.449831,0.477066) material=G4_He - --> #secondaries=10 impactParameter[fm]=1.1114 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 29 projectile=Bc- Ekin[MeV]=25167.5 direction=(0.6614,0.538231,0.522358) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=4.46406 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 30 projectile=anti_B0 Ekin[MeV]=26853.6 direction=(0.731938,0.483254,0.480346) material=G4_W - --> #secondaries=47 impactParameter[fm]=2.09176 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 31 projectile=anti_xi_c+ Ekin[MeV]=10945.5 direction=(0.903081,0.132027,0.408673) material=G4_Pb - --> #secondaries=16 impactParameter[fm]=7.50036 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 32 projectile=anti_D0 Ekin[MeV]=28365.7 direction=(0.602902,0.194963,0.773627) material=G4_Be - --> #secondaries=19 impactParameter[fm]=1.94241 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 33 projectile=xi0 Ekin[MeV]=7832.59 direction=(0.0451983,0.463353,0.88502) material=G4_Si - --> #secondaries=24 impactParameter[fm]=1.2642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 34 projectile=anti_proton Ekin[MeV]=12223.2 direction=(0.29724,0.727079,0.618874) material=G4_Ar - --> #secondaries=18 impactParameter[fm]=4.47197 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 35 projectile=D- Ekin[MeV]=7774.7 direction=(0.473043,0.171193,0.864247) material=G4_Al - --> #secondaries=14 impactParameter[fm]=3.83449 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 36 projectile=Bs0 Ekin[MeV]=29785.4 direction=(0.355277,0.640811,0.680543) material=G4_Pb - --> #secondaries=60 impactParameter[fm]=2.27313 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 37 projectile=anti_lambda_b Ekin[MeV]=27733.9 direction=(0.265863,0.591269,0.761392) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=2.99088 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 38 projectile=anti_omega_c0 Ekin[MeV]=19415.7 direction=(0.770881,0.394233,0.500322) material=G4_Pb - --> #secondaries=29 impactParameter[fm]=7.40695 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 39 projectile=anti_alpha Ekin[MeV]=6969.51 direction=(0.229232,0.775905,0.587727) material=G4_He - --> #secondaries=18 impactParameter[fm]=0.488101 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 40 projectile=anti_omega_b- Ekin[MeV]=24002.6 direction=(0.570785,0.647838,0.50449) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=2.66924 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 41 projectile=lambda_c+ Ekin[MeV]=8462.46 direction=(0.170219,0.486657,0.856849) material=G4_Al - --> #secondaries=20 impactParameter[fm]=3.11447 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 42 projectile=B- Ekin[MeV]=11308.1 direction=(0.652101,0.755151,0.0671692) material=G4_Pb - --> #secondaries=15 impactParameter[fm]=7.00418 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 43 projectile=lambda_b Ekin[MeV]=20163.6 direction=(0.156594,0.970312,0.18432) material=G4_H - --> #secondaries=2 impactParameter[fm]=2.21304 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 44 projectile=hyperHe5 Ekin[MeV]=3710.39 direction=(0.183829,0.97826,0.0959949) material=G4_H - --> #secondaries=3 impactParameter[fm]=3.44679 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 45 projectile=B0 Ekin[MeV]=28687.3 direction=(0.700199,0.234358,0.674387) material=G4_W - --> #secondaries=16 impactParameter[fm]=7.21924 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 46 projectile=xi_c+ Ekin[MeV]=2254.91 direction=(0.549805,0.541889,0.635666) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.146 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=0 - Collision 47 projectile=lambda Ekin[MeV]=24455.6 direction=(0.523141,0.703108,0.481624) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.572618 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 48 projectile=anti_xi- Ekin[MeV]=19411.4 direction=(0.991552,0.100059,0.0825347) material=G4_Ar - --> #secondaries=28 impactParameter[fm]=3.64462 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 49 projectile=D0 Ekin[MeV]=6036.33 direction=(0.792618,0.423467,0.438672) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.12732 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 50 projectile=anti_hypertriton Ekin[MeV]=23999.2 direction=(0.883377,0.00969461,0.468563) material=G4_Be - --> #secondaries=20 impactParameter[fm]=2.25314 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 51 projectile=hypertriton Ekin[MeV]=19993.4 direction=(0.586716,0.4346,0.683291) material=G4_Cu - --> #secondaries=40 impactParameter[fm]=5.02127 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=58 #NNcollisions=6 - Collision 52 projectile=D+ Ekin[MeV]=21065.7 direction=(0.668678,0.252871,0.699232) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.43215 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 53 projectile=anti_sigma+ Ekin[MeV]=29342.7 direction=(0.613998,0.525856,0.588627) material=G4_Al - --> #secondaries=15 impactParameter[fm]=2.54282 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 54 projectile=kaon+ Ekin[MeV]=1783.35 direction=(0.705847,0.200899,0.679279) material=G4_Fe - --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 55 projectile=He3 Ekin[MeV]=27262.4 direction=(0.479765,0.118187,0.8694) material=G4_Be - --> #secondaries=23 impactParameter[fm]=1.24528 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=7 - Collision 56 projectile=hyperHe5 Ekin[MeV]=3144.54 direction=(0.0350671,0.67147,0.740202) material=G4_Ar - --> #secondaries=28 impactParameter[fm]=3.57338 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=0 - Collision 57 projectile=kaon0L Ekin[MeV]=23770.9 direction=(0.631447,0.756977,0.168112) material=G4_Fe - --> #secondaries=18 impactParameter[fm]=4.72621 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 58 projectile=anti_hyperalpha Ekin[MeV]=21658.3 direction=(0.120795,0.985476,0.119357) material=G4_H - --> #secondaries=10 impactParameter[fm]=0.734607 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 59 projectile=anti_lambda Ekin[MeV]=2742.67 direction=(0.611577,0.519582,0.596665) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=2.0257 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 60 projectile=anti_hyperH4 Ekin[MeV]=13503.2 direction=(0.107937,0.180654,0.977606) material=G4_Pb - --> #secondaries=122 impactParameter[fm]=4.41426 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=4 - Collision 61 projectile=anti_hyperHe5 Ekin[MeV]=16062 direction=(0.547933,0.451619,0.704138) material=G4_Fe - --> #secondaries=62 impactParameter[fm]=0.268689 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=7 - Collision 62 projectile=anti_hyperH4 Ekin[MeV]=14588.9 direction=(0.0771352,0.622631,0.778704) material=G4_Cu - --> #secondaries=64 impactParameter[fm]=0.77626 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=4 - Collision 63 projectile=kaon- Ekin[MeV]=22633.5 direction=(0.380072,0.218503,0.898778) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=1.74473 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=0 - Collision 64 projectile=anti_xi0 Ekin[MeV]=10610 direction=(0.761276,0.38043,0.525101) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.716466 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 65 projectile=anti_omega_c0 Ekin[MeV]=4008.66 direction=(0.717383,0.671432,0.185854) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.598219 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 66 projectile=Bc+ Ekin[MeV]=13133 direction=(0.768746,0.615194,0.174832) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.39126 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 67 projectile=sigma- Ekin[MeV]=15312.5 direction=(0.270535,0.957425,0.100736) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.52158 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 68 projectile=anti_B0 Ekin[MeV]=5850.91 direction=(0.781179,0.461342,0.420621) material=G4_C - --> #secondaries=6 impactParameter[fm]=2.32429 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 69 projectile=hypertriton Ekin[MeV]=2800.8 direction=(0.920952,0.132412,0.36649) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.829212 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 70 projectile=anti_sigma- Ekin[MeV]=1440.43 direction=(0.170139,0.856174,0.487872) material=G4_C - --> #secondaries=13 impactParameter[fm]=3.42206 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 71 projectile=kaon0S Ekin[MeV]=19910.7 direction=(0.701118,0.661969,0.265012) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=3.10604 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 72 projectile=D- Ekin[MeV]=9671.14 direction=(0.709764,0.695275,0.113263) material=G4_Be - --> #secondaries=9 impactParameter[fm]=0.659173 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 73 projectile=anti_triton Ekin[MeV]=14443 direction=(0.141258,0.859738,0.490813) material=G4_Fe - --> #secondaries=59 impactParameter[fm]=0.528242 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=4 - Collision 74 projectile=anti_Bs0 Ekin[MeV]=24078.8 direction=(0.147704,0.263885,0.953178) material=G4_Al - --> #secondaries=13 impactParameter[fm]=2.29741 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 75 projectile=Bc+ Ekin[MeV]=23560.7 direction=(0.592755,0.398219,0.700045) material=G4_W - --> #secondaries=12 impactParameter[fm]=5.93373 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 76 projectile=lambda Ekin[MeV]=4221.29 direction=(0.260861,0.686545,0.678681) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=3.4491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 77 projectile=anti_omega_b- Ekin[MeV]=25793.8 direction=(0.570408,0.55045,0.609623) material=G4_Cu - --> #secondaries=24 impactParameter[fm]=3.91306 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 78 projectile=anti_lambda Ekin[MeV]=29397.2 direction=(0.501503,0.422444,0.755008) material=G4_Fe - --> #secondaries=34 impactParameter[fm]=3.28141 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 79 projectile=sigma- Ekin[MeV]=5399.39 direction=(0.171229,0.627916,0.759212) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.63255 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 80 projectile=pi- Ekin[MeV]=4713.45 direction=(0.783885,0.370631,0.498154) material=G4_Si - --> #secondaries=10 impactParameter[fm]=2.39484 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 81 projectile=neutron Ekin[MeV]=15041.3 direction=(0.307,0.695634,0.649495) material=G4_Pb - --> #secondaries=89 impactParameter[fm]=3.71334 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 82 projectile=deuteron Ekin[MeV]=17266.5 direction=(0.696564,0.174251,0.696013) material=G4_Pb - --> #secondaries=73 impactParameter[fm]=4.81882 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=4 - Collision 83 projectile=anti_He3 Ekin[MeV]=21316.9 direction=(0.0273624,0.815938,0.577492) material=G4_C - --> #secondaries=14 impactParameter[fm]=3.46639 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 84 projectile=anti_deuteron Ekin[MeV]=7660.49 direction=(0.42208,0.390887,0.817958) material=G4_W - --> #secondaries=49 impactParameter[fm]=5.69213 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=186 #NNcollisions=2 - Collision 85 projectile=anti_hyperH4 Ekin[MeV]=19151.2 direction=(0.224258,0.148278,0.963183) material=G4_Fe - --> #secondaries=64 impactParameter[fm]=1.022 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=5 - Collision 86 projectile=anti_sigma+ Ekin[MeV]=19246.1 direction=(0.963185,0.0597716,0.262112) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.73053 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 87 projectile=B0 Ekin[MeV]=20537.6 direction=(0.651709,0.295573,0.698507) material=G4_Be - --> #secondaries=5 impactParameter[fm]=2.48452 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 88 projectile=sigma- Ekin[MeV]=3563.46 direction=(0.36618,0.60734,0.705018) material=G4_W - --> #secondaries=18 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 89 projectile=anti_proton Ekin[MeV]=27685.9 direction=(0.0704142,0.705067,0.705636) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.51505 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 90 projectile=hyperalpha Ekin[MeV]=3726.01 direction=(0.222824,0.868997,0.441807) material=G4_Pb - --> #secondaries=84 impactParameter[fm]=7.18469 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=190 #NNcollisions=1 - Collision 91 projectile=anti_doublehyperH4 Ekin[MeV]=14581.5 direction=(0.243839,0.29099,0.925131) material=G4_Si - --> #secondaries=35 impactParameter[fm]=3.3748 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=3 - Collision 92 projectile=triton Ekin[MeV]=12003.2 direction=(0.664836,0.745618,0.045242) material=G4_Si - --> #secondaries=23 impactParameter[fm]=1.31065 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 93 projectile=anti_omega_c0 Ekin[MeV]=10799.7 direction=(0.549822,0.374547,0.746599) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.04693 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 94 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=22982 direction=(0.307195,0.161288,0.937879) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.10017 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 95 projectile=anti_Bs0 Ekin[MeV]=25644.2 direction=(0.371456,0.383664,0.845471) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=5.32919 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 96 projectile=anti_hypertriton Ekin[MeV]=12103 direction=(0.548739,0.566449,0.614834) material=G4_Fe - --> #secondaries=25 impactParameter[fm]=5.69726 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=3 - Collision 97 projectile=sigma+ Ekin[MeV]=21181.1 direction=(0.365455,0.732377,0.574514) material=G4_Fe - --> #secondaries=8 impactParameter[fm]=4.20041 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 98 projectile=D- Ekin[MeV]=21970.8 direction=(0.73865,0.436542,0.513641) material=G4_Be - --> #secondaries=6 impactParameter[fm]=3.56832 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 99 projectile=doublehyperH4 Ekin[MeV]=27684 direction=(0.43474,0.879789,0.192279) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.91185 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 100 projectile=anti_doublehyperH4 Ekin[MeV]=9874.39 direction=(0.485857,0.0297992,0.87353) material=G4_Fe - --> #secondaries=42 impactParameter[fm]=4.95677 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=56 #NNcollisions=3 - List of produced secondaries: - j=0 pi0 p=(511.793,86.1324,1476.61570.96) MeV - j=1 pi0 p=(359.241,-40.3849,237.308453.011) MeV - j=2 pi0 p=(-69.6033,-133.948,-396.917445.588) MeV - j=3 anti_lambda p=(1782.36,3.65961,3192.113822.45) MeV - j=4 pi+ p=(985.725,710.797,1186.741704.32) MeV - j=5 pi- p=(477.018,-341.935,848.7291041.29) MeV - j=6 pi+ p=(49.6365,74.2667,-40.5612170.6) MeV - j=7 pi0 p=(84.8594,5.93055,37.1907163.823) MeV - j=8 anti_proton p=(1313.27,218.982,923.7921872.53) MeV - j=9 proton p=(-85.929,-152.938,-169.278969.424) MeV - j=10 neutron p=(82.1255,114.249,232.132977.991) MeV - j=11 proton p=(-349.104,-106.626,-119.0661013.79) MeV - j=12 pi0 p=(289.713,250.695,501.659645.494) MeV - j=13 kaon0S p=(204.83,-218.865,476.499751.351) MeV - j=14 pi0 p=(316.224,119.832,772.507854.016) MeV - j=15 pi- p=(203.053,-367.749,74.3702448.866) MeV - j=16 pi+ p=(65.9901,-160.251,456.672508.001) MeV - j=17 neutron p=(-81.0993,171.05,1062.531430.94) MeV - j=18 proton p=(590.679,150.433,-191.7911135.2) MeV - j=19 neutron p=(90.5345,-86.9792,34.0953948.529) MeV - j=20 proton p=(-124.426,-43.2219,215.013971.563) MeV - j=21 neutron p=(165.55,76.5931,257.186991.06) MeV - j=22 proton p=(131.613,18.067,16.8694947.78) MeV - j=23 proton p=(165.629,194.058,11.118972.404) MeV - j=24 Na22[583.050] p=(-870.689,-124.759,515.86720508) MeV - j=25 alpha p=(89.4079,118.838,-170.7383734.25) MeV - j=26 triton p=(-128.395,-56.1345,-237.5432822.43) MeV - j=27 neutron p=(118.795,6.05638,-49.2272948.343) MeV - j=28 neutron p=(-78.9027,-135.055,191.617971.579) MeV - j=29 triton p=(128.555,82.6073,178.3382818.72) MeV - j=30 proton p=(-9.13741,-115.04,141.7955.903) MeV - j=31 neutron p=(59.6063,42.8049,-92.5714946.962) MeV - j=32 neutron p=(-41.6634,97.4365,-37.1862946.253) MeV - j=33 proton p=(54.0962,-128.039,40.5398949.378) MeV - j=34 neutron p=(18.6185,98.1327,66.7488947.214) MeV - j=35 deuteron p=(20.4997,76.4565,-73.76421878.73) MeV - j=36 neutron p=(-5.01528,-10.1853,107.298945.74) MeV - j=37 proton p=(2.95995,-21.494,-20.7989938.753) MeV - j=38 neutron p=(-22.7333,-75.096,19.1784943.031) MeV - j=39 gamma p=(-1.73428,0.0898747,-2.16132.77254) MeV - j=40 gamma p=(-0.843329,-0.266989,1.362211.62423) MeV - j=41 gamma p=(0.0210457,0.0466151,-0.04985960.0714274) MeV - Collision 101 projectile=anti_xi_c0 Ekin[MeV]=3396.25 direction=(0.532361,0.519363,0.668471) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.44078 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 102 projectile=neutron Ekin[MeV]=13650.4 direction=(0.826343,0.561917,0.0374986) material=G4_Ar - --> #secondaries=24 impactParameter[fm]=1.69692 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 - Collision 103 projectile=neutron Ekin[MeV]=3042.69 direction=(0.230738,0.282986,0.930956) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 104 projectile=triton Ekin[MeV]=3824.86 direction=(0.765479,0.358704,0.534203) material=G4_Si - --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 105 projectile=sigma+ Ekin[MeV]=27682 direction=(0.168351,0.832883,0.527222) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.28624 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 106 projectile=Ds+ Ekin[MeV]=18064.4 direction=(0.0412374,0.992775,0.112682) material=G4_He - --> #secondaries=10 impactParameter[fm]=0.28499 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 107 projectile=anti_hyperalpha Ekin[MeV]=18802.2 direction=(0.448366,0.844713,0.292281) material=G4_C - --> #secondaries=21 impactParameter[fm]=2.55372 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 108 projectile=anti_He3 Ekin[MeV]=5002.34 direction=(0.507841,0.538306,0.672551) material=G4_Fe - --> #secondaries=26 impactParameter[fm]=5.17516 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 109 projectile=B+ Ekin[MeV]=9948.59 direction=(0.758791,0.65068,0.029184) material=G4_W - --> #secondaries=33 impactParameter[fm]=6.77005 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 110 projectile=Ds- Ekin[MeV]=4083.54 direction=(0.505758,0.680462,0.530264) material=G4_Pb - --> #secondaries=59 impactParameter[fm]=3.76797 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=200 #NNcollisions=1 - Collision 111 projectile=kaon+ Ekin[MeV]=22177.9 direction=(0.49787,0.307413,0.810939) material=G4_Be - --> #secondaries=15 impactParameter[fm]=0.676357 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 112 projectile=D- Ekin[MeV]=17718.3 direction=(0.615005,0.67958,0.399923) material=G4_Si - --> #secondaries=20 impactParameter[fm]=1.57105 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 113 projectile=deuteron Ekin[MeV]=21376.4 direction=(0.646943,0.710817,0.276053) material=G4_He - --> #secondaries=9 impactParameter[fm]=0.972717 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 114 projectile=Ds- Ekin[MeV]=21300.5 direction=(0.497628,0.423889,0.756759) material=G4_Fe - --> #secondaries=7 impactParameter[fm]=3.16627 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 115 projectile=triton Ekin[MeV]=12935.7 direction=(0.636019,0.548813,0.542479) material=G4_H - --> #secondaries=6 impactParameter[fm]=2.43014 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 116 projectile=kaon0L Ekin[MeV]=16489.8 direction=(0.78447,0.00535084,0.620143) material=G4_Cu - --> #secondaries=35 impactParameter[fm]=2.53546 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=59 #NNcollisions=4 - Collision 117 projectile=xi_b- Ekin[MeV]=15481.9 direction=(0.839419,0.539384,0.0666337) material=G4_He - --> #secondaries=7 impactParameter[fm]=1.78311 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 118 projectile=xi0 Ekin[MeV]=28891.1 direction=(0.391331,0.920244,0.00348356) material=G4_Al - --> #secondaries=28 impactParameter[fm]=1.42425 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 119 projectile=proton Ekin[MeV]=25552.1 direction=(0.575856,0.642354,0.505738) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=3.47109 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 120 projectile=hypertriton Ekin[MeV]=10203.1 direction=(0.869478,0.0797904,0.487485) material=G4_Be - --> #secondaries=19 impactParameter[fm]=3.93873 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 121 projectile=Bc- Ekin[MeV]=10747.3 direction=(0.512205,0.687668,0.514547) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=2.33942 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 122 projectile=anti_hypertriton Ekin[MeV]=26718 direction=(0.629435,0.641106,0.439084) material=G4_He - --> #secondaries=15 impactParameter[fm]=0.614348 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 123 projectile=anti_omega_b- Ekin[MeV]=22429.2 direction=(0.965631,0.258351,0.0285016) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.377226 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 124 projectile=D- Ekin[MeV]=18135.6 direction=(0.553826,0.80469,0.213895) material=G4_Be - --> #secondaries=15 impactParameter[fm]=1.68149 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 125 projectile=anti_neutron Ekin[MeV]=24878.9 direction=(0.306804,0.149221,0.940002) material=G4_W - --> #secondaries=31 impactParameter[fm]=6.76301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 126 projectile=anti_xi_c+ Ekin[MeV]=10449.6 direction=(0.0211288,0.999255,0.0323047) material=G4_Cu - --> #secondaries=28 impactParameter[fm]=2.07358 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 127 projectile=lambda Ekin[MeV]=3188.79 direction=(0.161352,0.539549,0.826349) material=G4_Fe - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 128 projectile=triton Ekin[MeV]=23227.5 direction=(0.645222,0.136402,0.75172) material=G4_Si - --> #secondaries=29 impactParameter[fm]=1.34588 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=7 - Collision 129 projectile=B0 Ekin[MeV]=10341 direction=(0.80215,0.0141574,0.596954) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=1.99174 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 130 projectile=anti_xi0 Ekin[MeV]=12725.2 direction=(0.212918,0.861918,0.460177) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.92771 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 131 projectile=anti_xi0 Ekin[MeV]=7392.25 direction=(0.992004,0.0483582,0.116574) material=G4_Be - --> #secondaries=11 impactParameter[fm]=1.49713 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 132 projectile=hyperalpha Ekin[MeV]=4984.56 direction=(0.617245,0.753839,0.225246) material=G4_Al - --> #secondaries=7 impactParameter[fm]=5.14031 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 133 projectile=doublehyperdoubleneutron Ekin[MeV]=3418.82 direction=(0.637588,0.627268,0.447232) material=G4_Si - --> #secondaries=24 impactParameter[fm]=2.13167 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=18 #NNcollisions=1 - Collision 134 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=26342.2 direction=(0.351795,0.776476,0.522805) material=G4_W - --> #secondaries=154 impactParameter[fm]=3.62695 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=4 - Collision 135 projectile=pi+ Ekin[MeV]=14268.4 direction=(0.75028,0.558297,0.354097) material=G4_Cu - --> #secondaries=19 impactParameter[fm]=4.145 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 136 projectile=D0 Ekin[MeV]=2803.05 direction=(0.383139,0.914866,0.127379) material=G4_W - --> #secondaries=23 impactParameter[fm]=4.02717 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=0 - Collision 137 projectile=lambda_b Ekin[MeV]=19001.8 direction=(0.704124,0.301237,0.643013) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=3.38299 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 138 projectile=omega_c0 Ekin[MeV]=14904.9 direction=(0.704751,0.434389,0.560921) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.17999 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 139 projectile=anti_omega_c0 Ekin[MeV]=13723 direction=(0.0600218,0.771744,0.633095) material=G4_Be - --> #secondaries=9 impactParameter[fm]=0.721281 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 140 projectile=anti_hypertriton Ekin[MeV]=19494.9 direction=(0.394945,0.543715,0.740536) material=G4_W - --> #secondaries=146 impactParameter[fm]=3.87413 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 - Collision 141 projectile=B- Ekin[MeV]=19911.4 direction=(0.582466,0.772405,0.253227) material=G4_Pb - --> #secondaries=19 impactParameter[fm]=4.71695 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 142 projectile=lambda Ekin[MeV]=20341.1 direction=(0.238233,0.755152,0.610729) material=G4_W - --> #secondaries=63 impactParameter[fm]=3.99439 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 - Collision 143 projectile=xi0 Ekin[MeV]=5611.9 direction=(0.352279,0.783561,0.511792) material=G4_Cu - --> #secondaries=14 impactParameter[fm]=4.05577 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 144 projectile=anti_hyperalpha Ekin[MeV]=25797.9 direction=(0.501753,0.33243,0.798583) material=G4_Be - --> #secondaries=13 impactParameter[fm]=3.9245 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 145 projectile=lambda_b Ekin[MeV]=23308.8 direction=(0.677049,0.71471,0.175484) material=G4_Fe - --> #secondaries=36 impactParameter[fm]=2.87682 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=1 - Collision 146 projectile=pi- Ekin[MeV]=23939.8 direction=(0.70432,0.698897,0.124409) material=G4_Al - --> #secondaries=12 impactParameter[fm]=1.46231 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 147 projectile=Bc- Ekin[MeV]=3410.61 direction=(0.286494,0.500288,0.817088) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=3.16608 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 148 projectile=hyperH4 Ekin[MeV]=16433.8 direction=(0.71205,0.694659,0.102147) material=G4_Fe - --> #secondaries=51 impactParameter[fm]=3.50787 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=50 #NNcollisions=4 - Collision 149 projectile=lambda_c+ Ekin[MeV]=12794.9 direction=(0.634764,0.54146,0.551267) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.45146 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 150 projectile=proton Ekin[MeV]=7117.2 direction=(0.486614,0.239734,0.84008) material=G4_Al - --> #secondaries=15 impactParameter[fm]=1.96899 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 151 projectile=omega_c0 Ekin[MeV]=21241.8 direction=(0.721723,0.686677,0.087118) material=G4_W - --> #secondaries=39 impactParameter[fm]=4.88383 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=0 - Collision 152 projectile=proton Ekin[MeV]=3738.41 direction=(0.560431,0.175048,0.809491) material=G4_Cu - --> #secondaries=38 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 153 projectile=hyperH4 Ekin[MeV]=26291.2 direction=(0.689256,0.724371,0.0146024) material=G4_Al - --> #secondaries=31 impactParameter[fm]=3.88404 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=6 - Collision 154 projectile=anti_hypertriton Ekin[MeV]=11567.5 direction=(0.297015,0.85051,0.434069) material=G4_Pb - --> #secondaries=68 impactParameter[fm]=6.73006 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=5 - Collision 155 projectile=kaon0L Ekin[MeV]=4932.05 direction=(0.00583704,0.751805,0.659359) material=G4_H - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 156 projectile=kaon- Ekin[MeV]=5723.64 direction=(0.147979,0.758767,0.63433) material=G4_Cu - --> #secondaries=18 impactParameter[fm]=4.31503 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 157 projectile=xi_b0 Ekin[MeV]=1717.37 direction=(0.757834,0.615112,0.217541) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.84623 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 158 projectile=xi- Ekin[MeV]=13991.7 direction=(0.213678,0.768586,0.603007) material=G4_C - --> #secondaries=13 impactParameter[fm]=1.33434 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 159 projectile=D0 Ekin[MeV]=11109.2 direction=(0.85038,0.235857,0.470346) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.21879 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 160 projectile=anti_doublehyperH4 Ekin[MeV]=22966.6 direction=(0.490601,0.782943,0.382505) material=G4_Fe - --> #secondaries=51 impactParameter[fm]=3.35237 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=5 - Collision 161 projectile=anti_B0 Ekin[MeV]=2624.27 direction=(0.812553,0.429165,0.39443) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=1.04999 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 162 projectile=kaon+ Ekin[MeV]=11740.5 direction=(0.99972,0.0194345,0.013462) material=G4_Pb - --> #secondaries=32 impactParameter[fm]=6.52146 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 163 projectile=anti_lambda_b Ekin[MeV]=26895 direction=(0.499424,0.865239,0.044018) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.643135 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 164 projectile=triton Ekin[MeV]=23921.8 direction=(0.573759,0.616762,0.538894) material=G4_He - --> #secondaries=8 impactParameter[fm]=4.73718 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 165 projectile=Bc+ Ekin[MeV]=15167.1 direction=(0.978342,0.20405,0.0347829) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=3.77453 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 166 projectile=Bc- Ekin[MeV]=10270 direction=(0.129766,0.688603,0.713433) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.3636 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 167 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=5762.77 direction=(0.572002,0.483892,0.662316) material=G4_He - --> #secondaries=14 impactParameter[fm]=0.91487 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 168 projectile=anti_He3 Ekin[MeV]=13388.1 direction=(0.787241,0.610446,0.0872196) material=G4_Al - --> #secondaries=17 impactParameter[fm]=4.99801 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 169 projectile=anti_omega_b- Ekin[MeV]=5564.74 direction=(0.154222,0.971139,0.181947) material=G4_W - --> #secondaries=12 impactParameter[fm]=4.80568 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 170 projectile=anti_hyperH4 Ekin[MeV]=28766.1 direction=(0.0902509,0.0402435,0.995106) material=G4_Be - --> #secondaries=15 impactParameter[fm]=3.35721 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 171 projectile=anti_B0 Ekin[MeV]=14043.9 direction=(0.235359,0.230586,0.944159) material=G4_Pb - --> #secondaries=16 impactParameter[fm]=7.15601 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 172 projectile=anti_xi_b0 Ekin[MeV]=18442.4 direction=(0.634628,0.743857,0.209579) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=3.71204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 173 projectile=anti_doublehyperH4 Ekin[MeV]=2891.01 direction=(0.770635,0.0122877,0.637158) material=G4_He - --> #secondaries=16 impactParameter[fm]=1.57165 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 174 projectile=anti_xi_c0 Ekin[MeV]=10203.1 direction=(0.546782,0.20669,0.811362) material=G4_Fe - --> #secondaries=27 impactParameter[fm]=2.38709 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=2 - Collision 175 projectile=anti_xi0 Ekin[MeV]=11387.4 direction=(0.645191,0.0900162,0.7587) material=G4_Cu - --> #secondaries=36 impactParameter[fm]=3.38024 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 - Collision 176 projectile=omega_b- Ekin[MeV]=23992.3 direction=(0.119308,0.983301,0.137419) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.268932 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 177 projectile=D+ Ekin[MeV]=14883.1 direction=(0.994766,0.10151,0.0116534) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=4.17041 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 178 projectile=anti_xi- Ekin[MeV]=14238.1 direction=(0.589176,0.807127,0.03765) material=G4_Be - --> #secondaries=16 impactParameter[fm]=0.199833 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 179 projectile=anti_doublehyperH4 Ekin[MeV]=28101.5 direction=(0.0580596,0.358351,0.93178) material=G4_Cu - --> #secondaries=69 impactParameter[fm]=2.89363 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=7 - Collision 180 projectile=He3 Ekin[MeV]=15294.2 direction=(0.189433,0.656333,0.730303) material=G4_C - --> #secondaries=12 impactParameter[fm]=3.67505 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 181 projectile=anti_triton Ekin[MeV]=18986.7 direction=(0.867075,0.374069,0.329019) material=G4_W - --> #secondaries=100 impactParameter[fm]=4.59948 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=5 - Collision 182 projectile=B- Ekin[MeV]=1068.69 direction=(0.830397,0.142546,0.538629) material=G4_Pb - --> #secondaries=33 impactParameter[fm]=4.82969 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=1 - Collision 183 projectile=anti_xi- Ekin[MeV]=13950.9 direction=(0.473664,0.827707,0.300904) material=G4_H - --> #secondaries=7 impactParameter[fm]=0.313174 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 184 projectile=doublehyperH4 Ekin[MeV]=4227.84 direction=(0.120895,0.606172,0.786092) material=G4_H - --> #secondaries=3 impactParameter[fm]=3.43507 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 185 projectile=anti_xi0 Ekin[MeV]=18893.4 direction=(0.541465,0.253687,0.801535) material=G4_Be - --> #secondaries=14 impactParameter[fm]=3.30298 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 186 projectile=kaon- Ekin[MeV]=18187 direction=(0.595159,0.792827,0.131187) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=2.74468 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=2 - Collision 187 projectile=hyperalpha Ekin[MeV]=15319.7 direction=(0.00667213,0.588875,0.808197) material=G4_C - --> #secondaries=20 impactParameter[fm]=0.457756 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=7 #NNcollisions=3 - Collision 188 projectile=lambda Ekin[MeV]=15219.1 direction=(0.442907,0.720258,0.533911) material=G4_H - --> #secondaries=11 impactParameter[fm]=0.5203 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 189 projectile=anti_xi_b- Ekin[MeV]=19292.3 direction=(0.949521,0.298947,0.0950828) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.02136 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=1 - Collision 190 projectile=triton Ekin[MeV]=5899.06 direction=(0.660335,0.721528,0.208219) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 191 projectile=xi_b- Ekin[MeV]=19371.7 direction=(0.469208,0.638824,0.609711) material=G4_Be - --> #secondaries=10 impactParameter[fm]=1.71608 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 192 projectile=anti_hyperalpha Ekin[MeV]=20520 direction=(0.891959,0.338271,0.299969) material=G4_Ar - --> #secondaries=19 impactParameter[fm]=3.51292 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 193 projectile=xi_b- Ekin[MeV]=23438.4 direction=(0.13019,0.787304,0.602663) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=2.74486 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 194 projectile=B- Ekin[MeV]=20350.8 direction=(0.586884,0.809671,0.000291766) material=G4_Cu - --> #secondaries=22 impactParameter[fm]=3.03905 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=60 #NNcollisions=2 - Collision 195 projectile=Bs0 Ekin[MeV]=24448.9 direction=(0.684602,0.658391,0.312796) material=G4_Cu - --> #secondaries=19 impactParameter[fm]=4.27653 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 196 projectile=doublehyperH4 Ekin[MeV]=1277.16 direction=(0.593333,0.772763,0.225374) material=G4_Ar - --> #secondaries=15 impactParameter[fm]=2.57493 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=0 - Collision 197 projectile=omega- Ekin[MeV]=20439.7 direction=(0.0859566,0.701998,0.706972) material=G4_Pb - --> #secondaries=62 impactParameter[fm]=6.40358 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 198 projectile=He3 Ekin[MeV]=12315.6 direction=(0.457639,0.708779,0.536842) material=G4_Si - --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 199 projectile=hypertriton Ekin[MeV]=18267.7 direction=(0.00166641,0.4218,0.906687) material=G4_Fe - --> #secondaries=37 impactParameter[fm]=5.68578 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=51 #NNcollisions=4 - Collision 200 projectile=neutron Ekin[MeV]=7528.68 direction=(0.658587,0.726779,0.195079) material=G4_W - --> #secondaries=46 impactParameter[fm]=5.25341 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=2 - List of produced secondaries: - j=0 neutron p=(1940.48,2545.32,537.3293378.7) MeV - j=1 pi0 p=(20.5707,292.93,-30.2692324.601) MeV - j=2 neutron p=(314.246,-178.312,642.6381194.28) MeV - j=3 pi0 p=(30.034,419.648,44.2924444.057) MeV - j=4 neutron p=(-122.709,611.52,62.51771129.47) MeV - j=5 pi+ p=(1269.07,699.865,534.5951551) MeV - j=6 proton p=(164.732,-580.147,-196.8411132.61) MeV - j=7 pi- p=(151.884,36.7669,-240.309318.824) MeV - j=8 proton p=(272.557,-247.779,-293.151049.75) MeV - j=9 proton p=(328.695,-404.783,-190.1171090.13) MeV - j=10 neutron p=(241.401,-31.7309,174.032986.079) MeV - j=11 pi- p=(179.289,275.986,-11.3215357.661) MeV - j=12 proton p=(193.062,114.94,-112.134971.294) MeV - j=13 neutron p=(-56.6482,38.0818,-240.591972.279) MeV - j=14 neutron p=(449.451,230.63,-141.341076.08) MeV - j=15 proton p=(279.91,8.16745,293.5111022.21) MeV - j=16 proton p=(70.4988,582.732,272.8791139.9) MeV - j=17 proton p=(-131.849,231.811,126.92983.658) MeV - j=18 neutron p=(454.856,2.7769,-125.0171051.34) MeV - j=19 neutron p=(-228.471,-96.0971,-36.3362972.387) MeV - j=20 neutron p=(-94.8303,27.6317,27.747945.15) MeV - j=21 neutron p=(66.0869,53.3532,19.0332943.589) MeV - j=22 neutron p=(-104.235,-65.7158,144.722958.599) MeV - j=23 proton p=(-141.363,36.7378,32.6515950.133) MeV - j=24 neutron p=(268.927,17.0502,139.56987.356) MeV - j=25 deuteron p=(42.2834,266.688,-93.75341897.27) MeV - j=26 proton p=(-14.5917,95.1949,-73.185946.037) MeV - j=27 neutron p=(75.9555,-0.77723,16.7844942.78) MeV - j=28 neutron p=(-115.753,-217.527,18.3989971.514) MeV - j=29 Ce134 p=(-246.138,696.78,-338.056124709) MeV - j=30 neutron p=(0.688202,1.95455,46.8929940.737) MeV - j=31 neutron p=(12.6009,55.4049,-27.9461941.697) MeV - j=32 neutron p=(58.0372,-36.0205,51.6274943.459) MeV - j=33 neutron p=(20.8395,-25.9192,33.4384940.748) MeV - j=34 C13 p=(-163.136,482.59,787.75812145.8) MeV - j=35 neutron p=(15.3898,24.0793,23.078940.283) MeV - j=36 neutron p=(9.09324,10.6424,-87.2285943.71) MeV - j=37 deuteron p=(-99.5124,149.654,-163.881891.32) MeV - j=38 neutron p=(17.8624,-4.72018,34.5168940.381) MeV - j=39 neutron p=(53.8623,-4.967,-31.6343941.653) MeV - j=40 neutron p=(58.6939,6.55686,8.81615941.461) MeV - j=41 gamma p=(0.0411939,-3.25308,0.8043653.35131) MeV - j=42 gamma p=(0.326388,0.178727,-0.09653690.384437) MeV - j=43 e- p=(-0.0836563,-0.439559,-0.266830.729746) MeV - j=44 gamma p=(0.555314,-0.626772,0.4847490.967573) MeV - j=45 gamma p=(-0.0567475,-0.341029,0.2144280.406817) MeV - Collision 201 projectile=Ds+ Ekin[MeV]=19762.9 direction=(0.676324,0.735362,0.0427728) material=G4_C - --> #secondaries=12 impactParameter[fm]=2.00538 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 202 projectile=anti_hyperHe5 Ekin[MeV]=24233.2 direction=(0.99471,0.0875182,0.0537751) material=G4_C - --> #secondaries=13 impactParameter[fm]=4.39547 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 203 projectile=lambda_c+ Ekin[MeV]=3598.92 direction=(0.374416,0.383065,0.844437) material=G4_W - --> #secondaries=10 impactParameter[fm]=6.81977 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=0 - Collision 204 projectile=Bc+ Ekin[MeV]=23494.1 direction=(0.153067,0.623619,0.766597) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.59546 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 205 projectile=hyperalpha Ekin[MeV]=22367.5 direction=(0.689996,0.660795,0.295392) material=G4_Pb - --> #secondaries=93 impactParameter[fm]=3.57084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=196 #NNcollisions=10 - Collision 206 projectile=kaon0S Ekin[MeV]=14224.4 direction=(0.372363,0.593754,0.713304) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.42756 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 207 projectile=omega_b- Ekin[MeV]=22999 direction=(0.525272,0.612037,0.591185) material=G4_W - --> #secondaries=92 impactParameter[fm]=1.40469 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 - Collision 208 projectile=anti_neutron Ekin[MeV]=21886.6 direction=(0.0925717,0.609431,0.787416) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.51518 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 209 projectile=omega_b- Ekin[MeV]=26112.8 direction=(0.497719,0.227436,0.836988) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.26127 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 210 projectile=kaon0L Ekin[MeV]=17284.7 direction=(0.857163,0.349649,0.378176) material=G4_Ar - --> #secondaries=30 impactParameter[fm]=1.86409 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 211 projectile=doublehyperdoubleneutron Ekin[MeV]=27195.4 direction=(0.560957,0.194607,0.804646) material=G4_Al - --> #secondaries=31 impactParameter[fm]=2.78385 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=22 #NNcollisions=4 - Collision 212 projectile=anti_xi- Ekin[MeV]=25873.6 direction=(0.429026,0.691143,0.581599) material=G4_Fe - --> #secondaries=61 impactParameter[fm]=1.35863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=6 - Collision 213 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=20599 direction=(0.869716,0.436307,0.230717) material=G4_Al - --> #secondaries=26 impactParameter[fm]=4.28084 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 214 projectile=anti_Bs0 Ekin[MeV]=7590.43 direction=(0.144482,0.00342419,0.989501) material=G4_He - --> #secondaries=4 impactParameter[fm]=0.741297 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 215 projectile=anti_triton Ekin[MeV]=21638.6 direction=(0.352697,0.866336,0.353648) material=G4_He - --> #secondaries=12 impactParameter[fm]=1.86561 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 216 projectile=doublehyperdoubleneutron Ekin[MeV]=3787.15 direction=(0.0742125,0.76021,0.645425) material=G4_Al - --> #secondaries=21 impactParameter[fm]=2.03906 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=19 #NNcollisions=0 - Collision 217 projectile=xi_c+ Ekin[MeV]=22672 direction=(0.583794,0.637705,0.502511) material=G4_Be - --> #secondaries=12 impactParameter[fm]=0.979963 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=2 - Collision 218 projectile=hypertriton Ekin[MeV]=26033.3 direction=(0.704743,0.575548,0.414828) material=G4_Al - --> #secondaries=23 impactParameter[fm]=2.15271 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 219 projectile=anti_proton Ekin[MeV]=12733.9 direction=(0.750071,0.220905,0.623374) material=G4_C - --> #secondaries=13 impactParameter[fm]=2.99073 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 220 projectile=anti_deuteron Ekin[MeV]=20180.4 direction=(0.620459,0.380168,0.685932) material=G4_Cu - --> #secondaries=49 impactParameter[fm]=3.67028 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=3 - Collision 221 projectile=xi0 Ekin[MeV]=22558.3 direction=(0.529836,0.537583,0.655956) material=G4_Al - --> #secondaries=10 impactParameter[fm]=2.44344 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 222 projectile=Bc+ Ekin[MeV]=28871 direction=(0.51478,0.767721,0.381582) material=G4_Pb - --> #secondaries=49 impactParameter[fm]=3.27868 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=2 - Collision 223 projectile=anti_xi0 Ekin[MeV]=7525 direction=(0.149206,0.443408,0.883814) material=G4_Cu - --> #secondaries=33 impactParameter[fm]=3.56867 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 224 projectile=anti_lambda_c+ Ekin[MeV]=13679.9 direction=(0.127495,0.8961,0.425146) material=G4_C - --> #secondaries=10 impactParameter[fm]=3.65231 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 225 projectile=anti_lambda_c+ Ekin[MeV]=20663.6 direction=(0.873953,0.226871,0.42981) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.6753 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 226 projectile=Ds+ Ekin[MeV]=3500.92 direction=(0.236564,0.814381,0.529926) material=G4_Al - --> #secondaries=9 impactParameter[fm]=3.04332 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 227 projectile=anti_triton Ekin[MeV]=7802.63 direction=(0.660096,0.700715,0.270688) material=G4_Si - --> #secondaries=14 impactParameter[fm]=4.68296 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 228 projectile=doublehyperH4 Ekin[MeV]=5355.61 direction=(0.610272,0.242068,0.754302) material=G4_W - --> #secondaries=32 impactParameter[fm]=7.70847 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 229 projectile=pi- Ekin[MeV]=27419.4 direction=(0.822688,0.493454,0.28229) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.22415 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 230 projectile=anti_xi- Ekin[MeV]=19370 direction=(0.732415,0.386183,0.560742) material=G4_Fe - --> #secondaries=25 impactParameter[fm]=3.58008 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 231 projectile=anti_lambda_c+ Ekin[MeV]=11546.4 direction=(0.107968,0.813941,0.570826) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.133084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 232 projectile=lambda_b Ekin[MeV]=14732.6 direction=(0.585728,0.0870043,0.805825) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=5.20054 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 233 projectile=He3 Ekin[MeV]=3255.86 direction=(0.393111,0.420814,0.817545) material=G4_Pb - --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 234 projectile=anti_hyperH4 Ekin[MeV]=11317.5 direction=(0.522793,0.675284,0.520269) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=2.92664 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=4 - Collision 235 projectile=alpha Ekin[MeV]=19794.1 direction=(0.490794,0.623679,0.608396) material=G4_Al - --> #secondaries=11 impactParameter[fm]=5.17116 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 236 projectile=B0 Ekin[MeV]=9846.23 direction=(0.537215,0.805166,0.251214) material=G4_Si - --> #secondaries=12 impactParameter[fm]=1.76045 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 237 projectile=anti_triton Ekin[MeV]=13840.1 direction=(0.147488,0.080104,0.985815) material=G4_W - --> #secondaries=141 impactParameter[fm]=3.38745 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 - Collision 238 projectile=D- Ekin[MeV]=24191 direction=(0.965711,0.233867,0.112733) material=G4_W - --> #secondaries=60 impactParameter[fm]=4.58712 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 239 projectile=anti_neutron Ekin[MeV]=3214.14 direction=(0.755209,0.648625,0.0945777) material=G4_Si - --> #secondaries=19 impactParameter[fm]=1.78991 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=2 - Collision 240 projectile=xi_c0 Ekin[MeV]=9186.53 direction=(0.574485,0.500756,0.647465) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=5.207 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 241 projectile=anti_B0 Ekin[MeV]=16870.4 direction=(0.647625,0.372212,0.664861) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=3.48778 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 242 projectile=kaon0L Ekin[MeV]=27783.4 direction=(0.595666,0.693096,0.405955) material=G4_Pb - --> #secondaries=47 impactParameter[fm]=3.15801 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 243 projectile=Bs0 Ekin[MeV]=10736.6 direction=(0.598721,0.394568,0.697028) material=G4_W - --> #secondaries=16 impactParameter[fm]=5.30654 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=0 - Collision 244 projectile=xi_c0 Ekin[MeV]=14986.1 direction=(0.351255,0.870578,0.344548) material=G4_Be - --> #secondaries=9 impactParameter[fm]=2.73192 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 245 projectile=anti_alpha Ekin[MeV]=6624.28 direction=(0.0942679,0.781323,0.616966) material=G4_Fe - --> #secondaries=58 impactParameter[fm]=1.29924 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 - Collision 246 projectile=hyperalpha Ekin[MeV]=4954.24 direction=(0.332236,0.838726,0.43146) material=G4_Ar - --> #secondaries=33 impactParameter[fm]=2.44585 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=32 #NNcollisions=1 - Collision 247 projectile=B0 Ekin[MeV]=17584 direction=(0.498062,0.64028,0.584787) material=G4_Pb - --> #secondaries=46 impactParameter[fm]=4.13235 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 248 projectile=anti_xi_c+ Ekin[MeV]=25285.7 direction=(0.410813,0.670766,0.617499) material=G4_Si - --> #secondaries=10 impactParameter[fm]=3.80746 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 249 projectile=sigma- Ekin[MeV]=21561 direction=(0.0415658,0.514758,0.856327) material=G4_Al - --> #secondaries=31 impactParameter[fm]=1.64571 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 250 projectile=anti_doublehyperH4 Ekin[MeV]=4835.42 direction=(0.77876,0.165748,0.605029) material=G4_Pb - --> #secondaries=75 impactParameter[fm]=3.46788 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 251 projectile=hyperHe5 Ekin[MeV]=17313.3 direction=(0.664877,0.357995,0.655574) material=G4_Si - --> #secondaries=18 impactParameter[fm]=4.90334 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 252 projectile=pi- Ekin[MeV]=1647.19 direction=(0.7185,0.199871,0.66619) material=G4_He - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 253 projectile=Bc+ Ekin[MeV]=23392.6 direction=(0.898606,0.413603,0.146422) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.07726 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 254 projectile=B- Ekin[MeV]=5756.38 direction=(0.399665,0.751519,0.524869) material=G4_Si - --> #secondaries=8 impactParameter[fm]=4.12368 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 255 projectile=B+ Ekin[MeV]=2021.9 direction=(0.0227218,0.796026,0.604835) material=G4_Pb - --> #secondaries=16 impactParameter[fm]=2.69382 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 256 projectile=anti_omega_c0 Ekin[MeV]=27952.6 direction=(0.128663,0.987366,0.0924886) material=G4_W - --> #secondaries=63 impactParameter[fm]=4.0554 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 - Collision 257 projectile=anti_neutron Ekin[MeV]=18721.3 direction=(0.116571,0.517583,0.847655) material=G4_W - --> #secondaries=129 impactParameter[fm]=0.604296 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 258 projectile=xi_b- Ekin[MeV]=21493.3 direction=(0.287438,0.341047,0.895023) material=G4_C - --> #secondaries=10 impactParameter[fm]=0.944257 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 259 projectile=anti_doublehyperH4 Ekin[MeV]=10629.6 direction=(0.614921,0.598762,0.513183) material=G4_Ar - --> #secondaries=16 impactParameter[fm]=6.49567 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 260 projectile=xi_b0 Ekin[MeV]=20923.1 direction=(0.723078,0.607216,0.329314) material=G4_Si - --> #secondaries=8 impactParameter[fm]=3.25329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 261 projectile=lambda Ekin[MeV]=2364.28 direction=(0.868294,0.309137,0.387944) material=G4_Pb - --> #secondaries=46 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 262 projectile=anti_B0 Ekin[MeV]=10963 direction=(0.978646,0.180005,0.0992444) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=1.33983 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 263 projectile=D0 Ekin[MeV]=15179.5 direction=(0.0244919,0.996803,0.0760471) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.887625 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 264 projectile=anti_He3 Ekin[MeV]=9447.27 direction=(0.898736,0.240755,0.366483) material=G4_H - --> #secondaries=7 impactParameter[fm]=0.106063 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 265 projectile=anti_D0 Ekin[MeV]=3146.85 direction=(0.39421,0.916295,0.0707272) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=4.56571 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 266 projectile=anti_xi_c+ Ekin[MeV]=11318.9 direction=(0.64453,0.656562,0.3918) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.056 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 267 projectile=sigma- Ekin[MeV]=29012 direction=(0.708215,0.0960937,0.699426) material=G4_Si - --> #secondaries=20 impactParameter[fm]=0.489178 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 268 projectile=xi_c+ Ekin[MeV]=21663.4 direction=(0.752832,0.262052,0.603799) material=G4_Al - --> #secondaries=23 impactParameter[fm]=1.18347 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 269 projectile=anti_omega_c0 Ekin[MeV]=17189.8 direction=(0.934977,0.331267,0.126808) material=G4_W - --> #secondaries=14 impactParameter[fm]=6.64113 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 270 projectile=alpha Ekin[MeV]=25055.9 direction=(0.693721,0.38142,0.610958) material=G4_Cu - --> #secondaries=21 impactParameter[fm]=6.36246 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 271 projectile=sigma- Ekin[MeV]=6434.33 direction=(0.360932,0.788649,0.497756) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.48371 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 272 projectile=anti_hyperHe5 Ekin[MeV]=3402.87 direction=(0.98516,0.157838,0.0674326) material=G4_Fe - --> #secondaries=7 impactParameter[fm]=7.09168 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 273 projectile=B+ Ekin[MeV]=7213.88 direction=(0.761198,0.59253,0.263602) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=3.70538 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 274 projectile=neutron Ekin[MeV]=26091.6 direction=(0.413529,0.778074,0.472858) material=G4_Si - --> #secondaries=31 impactParameter[fm]=3.87969 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 275 projectile=anti_lambda_c+ Ekin[MeV]=20314.8 direction=(0.728325,0.427646,0.535407) material=G4_Cu - --> #secondaries=27 impactParameter[fm]=4.03624 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 276 projectile=proton Ekin[MeV]=17493.3 direction=(0.294187,0.955182,0.0328896) material=G4_Pb - --> #secondaries=69 impactParameter[fm]=4.41739 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 - Collision 277 projectile=xi- Ekin[MeV]=24239.4 direction=(0.124814,0.952751,0.276924) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.18691 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 278 projectile=Bc- Ekin[MeV]=8232.23 direction=(0.394315,0.801142,0.450209) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=1.68374 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 279 projectile=anti_lambda_b Ekin[MeV]=17116.4 direction=(0.669816,0.707493,0.225389) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.30215 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 280 projectile=deuteron Ekin[MeV]=3216.36 direction=(0.286066,0.733518,0.616537) material=G4_C - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 281 projectile=Bs0 Ekin[MeV]=26267.5 direction=(0.349625,0.934063,0.0727284) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=2.11183 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 282 projectile=Ds+ Ekin[MeV]=21062.3 direction=(0.533243,0.805604,0.258177) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=4.27757 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 283 projectile=omega_c0 Ekin[MeV]=24740.8 direction=(0.350609,0.325732,0.87805) material=G4_Al - --> #secondaries=23 impactParameter[fm]=2.75233 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 284 projectile=xi- Ekin[MeV]=1818.79 direction=(0.311751,0.675717,0.667995) material=G4_Fe - --> #secondaries=17 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 285 projectile=anti_neutron Ekin[MeV]=4607.26 direction=(0.371193,0.842146,0.391159) material=G4_C - --> #secondaries=12 impactParameter[fm]=1.98244 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 286 projectile=B0 Ekin[MeV]=22170.3 direction=(0.553678,0.456088,0.696724) material=G4_C - --> #secondaries=6 impactParameter[fm]=0.525437 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 287 projectile=pi+ Ekin[MeV]=13650 direction=(0.162364,0.780723,0.603415) material=G4_Si - --> #secondaries=28 impactParameter[fm]=2.82673 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 288 projectile=anti_He3 Ekin[MeV]=6406.56 direction=(0.738311,0.113657,0.664815) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=4.09868 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 289 projectile=B0 Ekin[MeV]=3354.98 direction=(0.546912,0.704323,0.452567) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.65781 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=2 - Collision 290 projectile=anti_hyperHe5 Ekin[MeV]=3523.18 direction=(0.787898,0.606145,0.108653) material=G4_Be - --> #secondaries=11 impactParameter[fm]=4.849 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 291 projectile=Ds- Ekin[MeV]=5429.49 direction=(0.484585,0.311176,0.817525) material=G4_Si - --> #secondaries=17 impactParameter[fm]=1.87265 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=3 - Collision 292 projectile=anti_neutron Ekin[MeV]=26285.9 direction=(0.0323027,0.746797,0.664267) material=G4_Be - --> #secondaries=7 impactParameter[fm]=3.32526 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 293 projectile=Ds+ Ekin[MeV]=21274 direction=(0.86952,0.0597149,0.490275) material=G4_C - --> #secondaries=11 impactParameter[fm]=1.87284 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 294 projectile=anti_xi_b0 Ekin[MeV]=12518.3 direction=(0.626688,0.590752,0.508206) material=G4_Al - --> #secondaries=10 impactParameter[fm]=4.02261 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 295 projectile=anti_He3 Ekin[MeV]=26241.8 direction=(0.580421,0.708721,0.401031) material=G4_He - --> #secondaries=17 impactParameter[fm]=1.25879 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=3 - Collision 296 projectile=xi_b- Ekin[MeV]=25143.3 direction=(0.00777758,0.919007,0.394165) material=G4_C - --> #secondaries=10 impactParameter[fm]=1.77284 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 297 projectile=Bc- Ekin[MeV]=18537.3 direction=(0.840534,0.491809,0.227214) material=G4_C - --> #secondaries=7 impactParameter[fm]=1.17154 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 298 projectile=anti_hyperalpha Ekin[MeV]=8059.08 direction=(0.526056,0.451876,0.720467) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.68316 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 299 projectile=anti_sigma+ Ekin[MeV]=8058.83 direction=(0.663583,0.641779,0.384419) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.20066 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 300 projectile=pi- Ekin[MeV]=5423.29 direction=(0.95308,0.218735,0.209269) material=G4_Pb - --> #secondaries=27 impactParameter[fm]=7.73876 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 - List of produced secondaries: - j=0 pi+ p=(1860.26,188.147,542.131951.76) MeV - j=1 pi- p=(274.309,-153.083,309.246462.377) MeV - j=2 pi+ p=(780.587,175.087,198.453835.963) MeV - j=3 neutron p=(53.207,-208.2,-88.1723967.851) MeV - j=4 pi- p=(174.216,406.057,-127.743480.657) MeV - j=5 neutron p=(1318.58,547.402,341.0811742.82) MeV - j=6 pi- p=(380.558,-27.9943,-41.5459408.428) MeV - j=7 neutron p=(402.01,510.137,86.49521145.48) MeV - j=8 proton p=(141.145,-401.831,-170.6121044.44) MeV - j=9 neutron p=(188.243,164.108,166.162986.286) MeV - j=10 proton p=(-8.5366,222.339,-49.0511965.54) MeV - j=11 proton p=(93.7896,-122.129,-142.902961.503) MeV - j=12 neutron p=(26.4378,-19.5585,-74.9991943.127) MeV - j=13 Au189[2554.800] p=(-442.208,-109.654,103.915175982) MeV - j=14 neutron p=(-28.926,-5.85489,36.0526940.72) MeV - j=15 neutron p=(44.9239,-58.0198,47.6896943.632) MeV - j=16 neutron p=(-15.3595,167.922,-22.3052954.837) MeV - j=17 neutron p=(-48.1526,-15.6294,47.7684942.14) MeV - j=18 neutron p=(21.0569,35.1133,54.6367942.043) MeV - j=19 neutron p=(-31.0711,-7.58609,-93.5364944.751) MeV - j=20 neutron p=(-22.8768,-53.3685,-46.1722942.49) MeV - j=21 neutron p=(59.9965,-2.78288,19.6956941.689) MeV - j=22 neutron p=(45.411,-14.8958,9.72128940.83) MeV - j=23 neutron p=(32.8875,-1.53474,60.0365942.057) MeV - j=24 gamma p=(0.196769,1.92041,-2.5223.17603) MeV - j=25 gamma p=(-0.0861008,0.479022,0.1170910.500586) MeV - j=26 gamma p=(-0.45587,-0.192999,0.117670.508834) MeV - Collision 301 projectile=kaon+ Ekin[MeV]=22028.5 direction=(0.341342,0.72923,0.593052) material=G4_Ar - --> #secondaries=31 impactParameter[fm]=2.40921 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 302 projectile=anti_B0 Ekin[MeV]=20533.1 direction=(0.360777,0.926751,0.104753) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.86242 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 303 projectile=B+ Ekin[MeV]=26467.6 direction=(0.977289,0.00694474,0.211797) material=G4_Pb - --> #secondaries=41 impactParameter[fm]=3.88949 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 304 projectile=anti_xi_b- Ekin[MeV]=4883.17 direction=(0.473115,0.819102,0.324398) material=G4_Si - --> #secondaries=19 impactParameter[fm]=2.32405 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=0 - Collision 305 projectile=Ds- Ekin[MeV]=11207 direction=(0.418913,0.575327,0.702504) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.741562 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 306 projectile=anti_omega_b- Ekin[MeV]=14196.2 direction=(0.367531,0.625927,0.68785) material=G4_Si - --> #secondaries=7 impactParameter[fm]=3.36257 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 307 projectile=anti_hypertriton Ekin[MeV]=27143.5 direction=(0.660512,0.468285,0.586884) material=G4_Fe - --> #secondaries=70 impactParameter[fm]=2.11935 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=5 - Collision 308 projectile=anti_triton Ekin[MeV]=26508.8 direction=(0.743282,0.326451,0.583919) material=G4_C - --> #secondaries=21 impactParameter[fm]=2.0613 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=3 - Collision 309 projectile=lambda_c+ Ekin[MeV]=6697.67 direction=(0.93833,0.0479898,0.342393) material=G4_Al - --> #secondaries=8 impactParameter[fm]=3.75441 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 310 projectile=lambda Ekin[MeV]=19089.3 direction=(0.998002,0.0624586,0.00951891) material=G4_W - --> #secondaries=42 impactParameter[fm]=5.23805 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=4 - Collision 311 projectile=Bc- Ekin[MeV]=12440.3 direction=(0.54849,0.778539,0.305018) material=G4_Cu - --> #secondaries=8 impactParameter[fm]=1.46409 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 312 projectile=He3 Ekin[MeV]=24345.3 direction=(0.336902,0.358745,0.870516) material=G4_W - --> #secondaries=21 impactParameter[fm]=9.03044 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=185 #NNcollisions=0 - Collision 313 projectile=lambda_c+ Ekin[MeV]=26140.4 direction=(0.566369,0.727841,0.386619) material=G4_C - --> #secondaries=20 impactParameter[fm]=1.27892 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 314 projectile=anti_B0 Ekin[MeV]=22742 direction=(0.748787,0.430882,0.503645) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.415891 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 315 projectile=triton Ekin[MeV]=29390.3 direction=(0.482857,0.721264,0.496615) material=G4_Si - --> #secondaries=40 impactParameter[fm]=0.860871 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=6 - Collision 316 projectile=xi- Ekin[MeV]=8942.1 direction=(0.293482,0.955129,0.0399584) material=G4_W - --> #secondaries=76 impactParameter[fm]=0.357044 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 - Collision 317 projectile=pi- Ekin[MeV]=23230.8 direction=(0.589085,0.805103,0.0691958) material=G4_Fe - --> #secondaries=22 impactParameter[fm]=3.3378 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 318 projectile=anti_omega_c0 Ekin[MeV]=5686.98 direction=(0.106244,0.707433,0.698749) material=G4_Fe - --> #secondaries=8 impactParameter[fm]=4.47098 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 319 projectile=kaon0L Ekin[MeV]=16909.2 direction=(0.804401,0.494255,0.329621) material=G4_Si - --> #secondaries=17 impactParameter[fm]=1.62235 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 320 projectile=hyperHe5 Ekin[MeV]=24810.7 direction=(0.0189909,0.34049,0.940056) material=G4_H - --> #secondaries=5 impactParameter[fm]=2.93996 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 321 projectile=xi0 Ekin[MeV]=11559.4 direction=(0.713775,0.419395,0.560922) material=G4_W - --> #secondaries=87 impactParameter[fm]=2.22882 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 - Collision 322 projectile=Bc- Ekin[MeV]=14744.6 direction=(0.313917,0.630722,0.709681) material=G4_W - --> #secondaries=37 impactParameter[fm]=6.02567 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 323 projectile=xi0 Ekin[MeV]=10414.7 direction=(0.284671,0.666717,0.688804) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.59794 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 324 projectile=triton Ekin[MeV]=19910 direction=(0.887533,0.341021,0.309823) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=5.10248 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 325 projectile=triton Ekin[MeV]=2451.25 direction=(0.490708,0.770127,0.407567) material=G4_Pb - --> #secondaries=72 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 326 projectile=neutron Ekin[MeV]=9894.74 direction=(0.792897,0.299722,0.530548) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=4.91553 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 327 projectile=omega- Ekin[MeV]=15567.5 direction=(0.610977,0.219133,0.760716) material=G4_Cu - --> #secondaries=52 impactParameter[fm]=1.27223 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=5 - Collision 328 projectile=anti_omega_b- Ekin[MeV]=28608.3 direction=(0.540938,0.697311,0.470258) material=G4_W - --> #secondaries=27 impactParameter[fm]=5.5017 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 329 projectile=anti_deuteron Ekin[MeV]=7576.08 direction=(0.841617,0.531284,0.0970467) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=5.37691 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 330 projectile=anti_proton Ekin[MeV]=6654.14 direction=(0.687792,0.0989835,0.719128) material=G4_Ar - --> #secondaries=29 impactParameter[fm]=2.20517 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 331 projectile=anti_xi_c+ Ekin[MeV]=2224.91 direction=(0.787162,0.616084,0.0285759) material=G4_W - --> #secondaries=22 impactParameter[fm]=6.4536 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=0 - Collision 332 projectile=anti_lambda_c+ Ekin[MeV]=8597.88 direction=(0.87139,0.433424,0.229832) material=G4_Ar - --> #secondaries=32 impactParameter[fm]=1.32118 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=0 - Collision 333 projectile=anti_sigma- Ekin[MeV]=6859.3 direction=(0.408886,0.0254335,0.912231) material=G4_Ar - --> #secondaries=15 impactParameter[fm]=4.31529 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 334 projectile=xi_c+ Ekin[MeV]=9915.68 direction=(0.175041,0.745941,0.642598) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.783399 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 335 projectile=hyperHe5 Ekin[MeV]=22967.6 direction=(0.236548,0.708339,0.665058) material=G4_W - --> #secondaries=88 impactParameter[fm]=5.71427 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=166 #NNcollisions=6 - Collision 336 projectile=anti_xi_c+ Ekin[MeV]=21880.1 direction=(0.0743986,0.5651,0.821661) material=G4_Al - --> #secondaries=22 impactParameter[fm]=2.9143 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 337 projectile=anti_omega_b- Ekin[MeV]=3985.39 direction=(0.48066,0.637793,0.601819) material=G4_C - --> #secondaries=7 impactParameter[fm]=2.04778 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 338 projectile=deuteron Ekin[MeV]=24275.9 direction=(0.0512409,0.37103,0.927206) material=G4_Cu - --> #secondaries=47 impactParameter[fm]=3.60089 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=5 - Collision 339 projectile=deuteron Ekin[MeV]=10197 direction=(0.929549,0.214331,0.300001) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=4.16973 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=53 #NNcollisions=2 - Collision 340 projectile=anti_proton Ekin[MeV]=11472.3 direction=(0.797371,0.0912039,0.596558) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.44319 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 341 projectile=He3 Ekin[MeV]=27536.2 direction=(0.0146028,0.222977,0.974714) material=G4_Be - --> #secondaries=20 impactParameter[fm]=0.556689 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=5 #NNcollisions=4 - Collision 342 projectile=anti_lambda_c+ Ekin[MeV]=29979.3 direction=(0.762524,0.586658,0.272745) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.960585 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 343 projectile=anti_hyperHe5 Ekin[MeV]=3662.43 direction=(0.955857,0.270154,0.115564) material=G4_C - --> #secondaries=13 impactParameter[fm]=4.24178 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 344 projectile=anti_triton Ekin[MeV]=23508.6 direction=(0.918508,0.21626,0.331021) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.85432 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 345 projectile=B+ Ekin[MeV]=9610.29 direction=(0.362192,0.62885,0.688015) material=G4_C - --> #secondaries=8 impactParameter[fm]=2.85281 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 346 projectile=sigma+ Ekin[MeV]=24024.2 direction=(0.741743,0.153193,0.652955) material=G4_Pb - --> #secondaries=34 impactParameter[fm]=6.93319 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 347 projectile=D0 Ekin[MeV]=14569.6 direction=(0.357405,0.525381,0.772163) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.99641 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 348 projectile=doublehyperdoubleneutron Ekin[MeV]=25239.4 direction=(0.52032,0.265072,0.81179) material=G4_Si - --> #secondaries=42 impactParameter[fm]=3.30087 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=20 #NNcollisions=6 - Collision 349 projectile=anti_xi_c0 Ekin[MeV]=12047.9 direction=(0.18344,0.644103,0.742618) material=G4_Cu - --> #secondaries=29 impactParameter[fm]=2.84971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 350 projectile=anti_D0 Ekin[MeV]=7825.79 direction=(0.508702,0.437891,0.741265) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.05816 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 351 projectile=Bc+ Ekin[MeV]=19148.4 direction=(0.522168,0.0675427,0.850164) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=2.53612 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 352 projectile=xi_c0 Ekin[MeV]=23162.1 direction=(0.370779,0.81628,0.442957) material=G4_Si - --> #secondaries=36 impactParameter[fm]=1.64732 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 353 projectile=anti_He3 Ekin[MeV]=8189.79 direction=(0.373762,0.657278,0.654437) material=G4_He - --> #secondaries=10 impactParameter[fm]=3.13602 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 354 projectile=hypertriton Ekin[MeV]=26303.7 direction=(0.666538,0.426441,0.611454) material=G4_Cu - --> #secondaries=18 impactParameter[fm]=4.25722 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=0 - Collision 355 projectile=D- Ekin[MeV]=14322.7 direction=(0.685563,0.101285,0.720933) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=1.31313 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 356 projectile=anti_proton Ekin[MeV]=26268.6 direction=(0.576218,0.697032,0.426755) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=5.14411 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 357 projectile=anti_omega_c0 Ekin[MeV]=20039.5 direction=(0.418003,0.907215,0.0472797) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 358 projectile=anti_He3 Ekin[MeV]=19377 direction=(0.404878,0.723231,0.559473) material=G4_Cu - --> #secondaries=47 impactParameter[fm]=4.27422 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=4 - Collision 359 projectile=anti_sigma- Ekin[MeV]=12948.5 direction=(0.147259,0.785189,0.601492) material=G4_Fe - --> #secondaries=48 impactParameter[fm]=2.71969 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 360 projectile=kaon+ Ekin[MeV]=28487.1 direction=(0.456495,0.748978,0.480254) material=G4_Si - --> #secondaries=14 impactParameter[fm]=1.13774 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 361 projectile=anti_alpha Ekin[MeV]=17535.4 direction=(0.470196,0.739981,0.480981) material=G4_Be - --> #secondaries=24 impactParameter[fm]=1.11145 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=4 - Collision 362 projectile=deuteron Ekin[MeV]=9951.32 direction=(0.544804,0.240356,0.803379) material=G4_C - --> #secondaries=12 impactParameter[fm]=3.22144 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 363 projectile=omega_c0 Ekin[MeV]=22280 direction=(0.364229,0.780887,0.507496) material=G4_C - --> #secondaries=17 impactParameter[fm]=1.78775 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 364 projectile=D- Ekin[MeV]=8999.79 direction=(0.683493,0.610537,0.400102) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.61658 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 365 projectile=B+ Ekin[MeV]=18288.8 direction=(0.25736,0.780012,0.570392) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.28298 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 366 projectile=anti_omega- Ekin[MeV]=9120.11 direction=(0.630509,0.387379,0.672604) material=G4_He - --> #secondaries=11 impactParameter[fm]=0.0875327 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 367 projectile=anti_Bs0 Ekin[MeV]=8186.57 direction=(0.699387,0.702848,0.129855) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.279615 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 368 projectile=lambda_c+ Ekin[MeV]=10318 direction=(0.714075,0.614083,0.336153) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.12082 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 369 projectile=neutron Ekin[MeV]=21797.2 direction=(0.255817,0.950293,0.177483) material=G4_Si - --> #secondaries=42 impactParameter[fm]=0.769469 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=5 - Collision 370 projectile=hypertriton Ekin[MeV]=19372.1 direction=(0.762517,0.646316,0.0290478) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.49894 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=5 - Collision 371 projectile=kaon0S Ekin[MeV]=21314.3 direction=(0.331444,0.0863893,0.939511) material=G4_Al - --> #secondaries=13 impactParameter[fm]=5.25668 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 372 projectile=anti_doublehyperH4 Ekin[MeV]=26702.3 direction=(0.350309,0.0416746,0.935707) material=G4_Si - --> #secondaries=32 impactParameter[fm]=3.55743 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=4 - Collision 373 projectile=anti_lambda_b Ekin[MeV]=19181.5 direction=(0.369036,0.621202,0.691318) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=4.74337 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 374 projectile=anti_xi_b- Ekin[MeV]=12043.2 direction=(0.627873,0.778058,0.0200548) material=G4_Al - --> #secondaries=13 impactParameter[fm]=2.54667 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 375 projectile=anti_hyperHe5 Ekin[MeV]=21071.9 direction=(0.374882,0.669169,0.64162) material=G4_W - --> #secondaries=152 impactParameter[fm]=3.23877 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=171 #NNcollisions=6 - Collision 376 projectile=anti_deuteron Ekin[MeV]=12405.5 direction=(0.684032,0.432239,0.587596) material=G4_Be - --> #secondaries=13 impactParameter[fm]=5.20683 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 377 projectile=anti_hyperH4 Ekin[MeV]=28419.2 direction=(0.363386,0.530381,0.765929) material=G4_C - --> #secondaries=38 impactParameter[fm]=1.39084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=5 - Collision 378 projectile=sigma+ Ekin[MeV]=10082.3 direction=(0.595463,0.212428,0.774789) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.3908 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 379 projectile=anti_doublehyperH4 Ekin[MeV]=5301.64 direction=(0.783337,0.444939,0.434064) material=G4_C - --> #secondaries=14 impactParameter[fm]=2.87436 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 380 projectile=omega_c0 Ekin[MeV]=10847.6 direction=(0.494531,0.630889,0.597845) material=G4_W - --> #secondaries=43 impactParameter[fm]=5.39475 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 381 projectile=xi_b0 Ekin[MeV]=9633.89 direction=(0.659674,0.444242,0.606201) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.78716 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 382 projectile=xi_b0 Ekin[MeV]=15710.5 direction=(0.329203,0.694172,0.640117) material=G4_Fe - --> #secondaries=29 impactParameter[fm]=3.23379 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 383 projectile=Bs0 Ekin[MeV]=17181.6 direction=(0.923832,0.125028,0.361805) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=3.00815 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 384 projectile=Ds- Ekin[MeV]=9937.72 direction=(0.93395,0.335682,0.122698) material=G4_He - --> #secondaries=19 impactParameter[fm]=0.889776 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 385 projectile=doublehyperH4 Ekin[MeV]=24547.3 direction=(0.368398,0.5518,0.748197) material=G4_Fe - --> #secondaries=58 impactParameter[fm]=2.74441 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=9 - Collision 386 projectile=lambda_b Ekin[MeV]=18933 direction=(0.251106,0.967885,0.0119845) material=G4_Si - --> #secondaries=15 impactParameter[fm]=3.5938 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 387 projectile=sigma- Ekin[MeV]=24162.7 direction=(0.705652,0.109556,0.700038) material=G4_Fe - --> #secondaries=9 impactParameter[fm]=5.34526 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 388 projectile=xi_b0 Ekin[MeV]=21234.6 direction=(0.770969,0.582097,0.258396) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.80282 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 389 projectile=lambda_b Ekin[MeV]=5333.22 direction=(0.380031,0.420645,0.823792) material=G4_Al - --> #secondaries=9 impactParameter[fm]=2.19483 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 390 projectile=kaon+ Ekin[MeV]=10396.9 direction=(0.67575,0.654373,0.339349) material=G4_Cu - --> #secondaries=22 impactParameter[fm]=3.78267 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 391 projectile=lambda_c+ Ekin[MeV]=24462.4 direction=(0.559332,0.828882,0.0101378) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.09637 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 392 projectile=anti_omega_c0 Ekin[MeV]=3912.23 direction=(0.360498,0.668211,0.650796) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.60509 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 393 projectile=anti_lambda_b Ekin[MeV]=6284.85 direction=(0.486883,0.376782,0.788023) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=5.70326 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 394 projectile=kaon- Ekin[MeV]=4869.32 direction=(0.521573,0.725171,0.449542) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.70723 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 395 projectile=B+ Ekin[MeV]=4801.57 direction=(0.499929,0.861444,0.0893635) material=G4_Si - --> #secondaries=10 impactParameter[fm]=4.39183 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 396 projectile=alpha Ekin[MeV]=10382.9 direction=(0.580625,0.643229,0.49913) material=G4_Pb - --> #secondaries=26 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 397 projectile=neutron Ekin[MeV]=8693.5 direction=(0.742418,0.584006,0.328256) material=G4_Si - --> #secondaries=16 impactParameter[fm]=3.75268 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 398 projectile=anti_xi_c+ Ekin[MeV]=11357.2 direction=(0.70334,0.674855,0.223347) material=G4_W - --> #secondaries=25 impactParameter[fm]=7.03542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 399 projectile=anti_deuteron Ekin[MeV]=14317.1 direction=(0.524443,0.0401421,0.850499) material=G4_W - --> #secondaries=101 impactParameter[fm]=2.69333 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=5 - Collision 400 projectile=anti_neutron Ekin[MeV]=18418.9 direction=(0.664324,0.0490977,0.74583) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.72716 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - List of produced secondaries: - j=0 anti_proton p=(3551.7,15.7607,4332.815680.53) MeV - j=1 pi+ p=(584.575,-166.352,487.072791.277) MeV - j=2 proton p=(438.028,387.227,360.2551162.73) MeV - j=3 pi- p=(2457.28,-352.895,2795.693741.41) MeV - j=4 eta p=(1220.94,330.041,1007.331707.19) MeV - j=5 pi0 p=(1971.68,7.38955,1834.272696.35) MeV - j=6 pi+ p=(2621.05,728.173,3603.814517.42) MeV - Collision 401 projectile=kaon0L Ekin[MeV]=8684.56 direction=(0.76798,0.526714,0.364389) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.90958 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 402 projectile=lambda_c+ Ekin[MeV]=8511.6 direction=(0.991534,0.102671,0.0794896) material=G4_W - --> #secondaries=45 impactParameter[fm]=5.25272 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 403 projectile=B- Ekin[MeV]=7504.03 direction=(0.448767,0.85702,0.253231) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=1.09634 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=2 - Collision 404 projectile=deuteron Ekin[MeV]=19755.1 direction=(0.563073,0.770617,0.298495) material=G4_Be - --> #secondaries=13 impactParameter[fm]=2.3272 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 405 projectile=anti_sigma- Ekin[MeV]=10488.7 direction=(0.763156,0.487035,0.424723) material=G4_He - --> #secondaries=5 impactParameter[fm]=3.87593 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 406 projectile=anti_proton Ekin[MeV]=11625.8 direction=(0.39668,0.503169,0.767767) material=G4_Si - --> #secondaries=17 impactParameter[fm]=4.30998 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 407 projectile=anti_deuteron Ekin[MeV]=11402.1 direction=(0.633921,0.624129,0.456736) material=G4_Be - --> #secondaries=9 impactParameter[fm]=3.70044 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 408 projectile=D0 Ekin[MeV]=3168.87 direction=(0.276534,0.682231,0.676823) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.74906 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 409 projectile=doublehyperH4 Ekin[MeV]=29411.2 direction=(0.0383645,0.754365,0.655333) material=G4_Be - --> #secondaries=10 impactParameter[fm]=2.46284 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 410 projectile=Bc- Ekin[MeV]=4937.37 direction=(0.956143,0.0305016,0.291308) material=G4_Cu - --> #secondaries=7 impactParameter[fm]=4.45813 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 411 projectile=alpha Ekin[MeV]=9747.75 direction=(0.301799,0.807616,0.506629) material=G4_Al - --> #secondaries=20 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 412 projectile=xi- Ekin[MeV]=29692 direction=(0.746268,0.36279,0.558092) material=G4_Ar - --> #secondaries=22 impactParameter[fm]=2.59204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 413 projectile=doublehyperH4 Ekin[MeV]=16476.5 direction=(0.992336,0.0120967,0.122976) material=G4_Be - --> #secondaries=17 impactParameter[fm]=2.20725 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 414 projectile=Ds+ Ekin[MeV]=6821.84 direction=(0.67526,0.1991,0.710199) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.62837 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 415 projectile=anti_sigma+ Ekin[MeV]=14579.2 direction=(0.37267,0.91561,0.150915) material=G4_Si - --> #secondaries=29 impactParameter[fm]=0.693774 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 416 projectile=sigma+ Ekin[MeV]=23904.6 direction=(0.312699,0.939626,0.139001) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=4.35054 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 417 projectile=anti_D0 Ekin[MeV]=27442.9 direction=(0.634279,0.671179,0.383679) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=4.03293 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 418 projectile=Bs0 Ekin[MeV]=23417.7 direction=(0.132026,0.83066,0.5409) material=G4_W - --> #secondaries=64 impactParameter[fm]=3.87531 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 419 projectile=omega- Ekin[MeV]=10007.7 direction=(0.302115,0.338061,0.891314) material=G4_C - --> #secondaries=12 impactParameter[fm]=2.64514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 420 projectile=xi_b- Ekin[MeV]=26418.5 direction=(0.517294,0.480545,0.708155) material=G4_C - --> #secondaries=17 impactParameter[fm]=1.514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 421 projectile=doublehyperH4 Ekin[MeV]=26176.9 direction=(0.516112,0.469636,0.716289) material=G4_He - --> #secondaries=14 impactParameter[fm]=1.98669 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=4 - Collision 422 projectile=anti_hyperH4 Ekin[MeV]=16500.2 direction=(0.635061,0.450506,0.627489) material=G4_Si - --> #secondaries=40 impactParameter[fm]=2.61526 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 - Collision 423 projectile=anti_hyperalpha Ekin[MeV]=23632.5 direction=(0.690624,0.722992,0.0179192) material=G4_He - --> #secondaries=18 impactParameter[fm]=1.31258 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=2 #NNcollisions=5 - Collision 424 projectile=anti_xi_b- Ekin[MeV]=3150.41 direction=(0.643381,0.712133,0.28094) material=G4_Fe - --> #secondaries=5 impactParameter[fm]=3.0483 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 425 projectile=anti_hyperHe5 Ekin[MeV]=4529.36 direction=(0.343785,0.751847,0.562617) material=G4_Be - --> #secondaries=9 impactParameter[fm]=5.4164 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 426 projectile=anti_omega- Ekin[MeV]=11272.3 direction=(0.525432,0.460433,0.715488) material=G4_Pb - --> #secondaries=72 impactParameter[fm]=4.82397 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 427 projectile=kaon0S Ekin[MeV]=7483.15 direction=(0.187183,0.0699275,0.979833) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=3.57765 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 428 projectile=doublehyperH4 Ekin[MeV]=28936.5 direction=(0.202431,0.736958,0.644914) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.01591 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 429 projectile=anti_neutron Ekin[MeV]=5678.36 direction=(0.581676,0.42887,0.691175) material=G4_Pb - --> #secondaries=25 impactParameter[fm]=8.21564 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 430 projectile=triton Ekin[MeV]=1045.6 direction=(0.421976,0.698385,0.578096) material=G4_C - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 431 projectile=anti_omega- Ekin[MeV]=2478.09 direction=(0.465659,0.884924,0.0084176) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.61633 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 432 projectile=sigma+ Ekin[MeV]=25666.2 direction=(0.318159,0.9375,0.140954) material=G4_C - --> #secondaries=14 impactParameter[fm]=2.53043 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 433 projectile=Ds- Ekin[MeV]=24302.8 direction=(0.773445,0.507997,0.379106) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=4.59271 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 434 projectile=anti_alpha Ekin[MeV]=27762.7 direction=(0.485157,0.843259,0.231379) material=G4_Al - --> #secondaries=43 impactParameter[fm]=3.69633 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=7 - Collision 435 projectile=doublehyperdoubleneutron Ekin[MeV]=14134.6 direction=(0.730941,0.0761804,0.678176) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=2.88122 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=32 #NNcollisions=5 - Collision 436 projectile=Ds+ Ekin[MeV]=13387.3 direction=(0.646264,0.653955,0.393301) material=G4_W - --> #secondaries=13 impactParameter[fm]=7.82412 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 437 projectile=Bc- Ekin[MeV]=5733.65 direction=(0.841038,0.507737,0.186704) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=2.27845 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 438 projectile=doublehyperdoubleneutron Ekin[MeV]=22475.6 direction=(0.0502524,0.61528,0.786705) material=G4_Be - --> #secondaries=24 impactParameter[fm]=0.446879 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=4 - Collision 439 projectile=Ds+ Ekin[MeV]=22139.4 direction=(0.390252,0.661196,0.640721) material=G4_W - --> #secondaries=57 impactParameter[fm]=3.1272 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 440 projectile=alpha Ekin[MeV]=8538.96 direction=(0.0368621,0.596077,0.802081) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 441 projectile=anti_doublehyperH4 Ekin[MeV]=6731.66 direction=(0.200059,0.95282,0.228279) material=G4_C - --> #secondaries=22 impactParameter[fm]=2.81928 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=2 - Collision 442 projectile=xi_b- Ekin[MeV]=20018.4 direction=(0.0231508,0.988429,0.149906) material=G4_Cu - --> #secondaries=18 impactParameter[fm]=3.57863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=0 - Collision 443 projectile=pi- Ekin[MeV]=22592.7 direction=(0.798032,0.486683,0.355366) material=G4_Al - --> #secondaries=27 impactParameter[fm]=1.85262 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 444 projectile=anti_xi- Ekin[MeV]=27840.9 direction=(0.390156,0.787298,0.477431) material=G4_Pb - --> #secondaries=35 impactParameter[fm]=5.90946 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 445 projectile=anti_hyperalpha Ekin[MeV]=26822 direction=(0.865572,0.451389,0.21687) material=G4_He - --> #secondaries=8 impactParameter[fm]=2.95704 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 446 projectile=Ds- Ekin[MeV]=7828.98 direction=(0.214426,0.861283,0.460666) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=2.90281 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 447 projectile=B0 Ekin[MeV]=1517.3 direction=(0.442921,0.832376,0.333124) material=G4_Si - --> #secondaries=6 impactParameter[fm]=3.20501 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 448 projectile=hypertriton Ekin[MeV]=27236.3 direction=(0.0456909,0.674576,0.73679) material=G4_Cu - --> #secondaries=80 impactParameter[fm]=0.666194 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=49 #NNcollisions=12 - Collision 449 projectile=anti_omega- Ekin[MeV]=4273.97 direction=(0.781191,0.0437838,0.622755) material=G4_C - --> #secondaries=14 impactParameter[fm]=0.92051 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 450 projectile=anti_doublehyperH4 Ekin[MeV]=23290.1 direction=(0.682245,0.650631,0.333498) material=G4_Si - --> #secondaries=42 impactParameter[fm]=4.08004 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 - Collision 451 projectile=anti_neutron Ekin[MeV]=15774.8 direction=(0.815735,0.557631,0.153701) material=G4_W - --> #secondaries=22 impactParameter[fm]=6.6617 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 452 projectile=lambda Ekin[MeV]=1598.57 direction=(0.633757,0.027116,0.773057) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 453 projectile=kaon0L Ekin[MeV]=15766.6 direction=(0.257598,0.964294,0.0614855) material=G4_H - --> #secondaries=10 impactParameter[fm]=0.247022 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 454 projectile=anti_He3 Ekin[MeV]=20802.3 direction=(0.613626,0.63564,0.468428) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.24579 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 455 projectile=anti_D0 Ekin[MeV]=7654.17 direction=(0.65395,0.321189,0.684973) material=G4_Pb - --> #secondaries=82 impactParameter[fm]=2.02896 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 456 projectile=xi_c+ Ekin[MeV]=7590.25 direction=(0.910617,0.307307,0.276296) material=G4_Be - --> #secondaries=6 impactParameter[fm]=0.435766 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 457 projectile=anti_omega- Ekin[MeV]=19102.7 direction=(0.608982,0.721038,0.330522) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=4.1985 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 - Collision 458 projectile=anti_xi- Ekin[MeV]=9844.85 direction=(0.920666,0.306998,0.241092) material=G4_W - --> #secondaries=53 impactParameter[fm]=6.4875 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 459 projectile=anti_xi_b0 Ekin[MeV]=6036.65 direction=(0.819163,0.361131,0.445596) material=G4_Al - --> #secondaries=7 impactParameter[fm]=3.31488 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 460 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=19425.5 direction=(0.524929,0.330377,0.784411) material=G4_Pb - --> #secondaries=115 impactParameter[fm]=3.96702 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=4 - Collision 461 projectile=kaon- Ekin[MeV]=7890.7 direction=(0.533814,0.2648,0.803071) material=G4_W - --> #secondaries=34 impactParameter[fm]=5.73893 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=3 - Collision 462 projectile=Bc- Ekin[MeV]=8074.47 direction=(0.493516,0.599852,0.629777) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.2016 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 463 projectile=anti_omega_c0 Ekin[MeV]=12281.1 direction=(0.755598,0.638318,0.147043) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=2.85906 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 464 projectile=doublehyperdoubleneutron Ekin[MeV]=20183.2 direction=(0.496473,0.549628,0.671881) material=G4_W - --> #secondaries=93 impactParameter[fm]=5.01675 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=171 #NNcollisions=5 - Collision 465 projectile=anti_xi_b- Ekin[MeV]=10782.2 direction=(0.623272,0.743124,0.243513) material=G4_C - --> #secondaries=12 impactParameter[fm]=2.60353 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=2 - Collision 466 projectile=Ds- Ekin[MeV]=22045.4 direction=(0.686782,0.588148,0.427097) material=G4_Ar - --> #secondaries=6 impactParameter[fm]=2.64802 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 467 projectile=anti_triton Ekin[MeV]=17077.3 direction=(0.81392,0.0730131,0.576371) material=G4_H - --> #secondaries=9 impactParameter[fm]=3.77904 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 468 projectile=Bs0 Ekin[MeV]=12188.6 direction=(0.725989,0.0132908,0.687578) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=1.96965 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 469 projectile=anti_He3 Ekin[MeV]=29436.2 direction=(0.625642,0.743251,0.23696) material=G4_W - --> #secondaries=46 impactParameter[fm]=7.78776 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 470 projectile=anti_triton Ekin[MeV]=23758.2 direction=(0.0564037,0.97532,0.213472) material=G4_W - --> #secondaries=155 impactParameter[fm]=2.51576 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=4 - Collision 471 projectile=D+ Ekin[MeV]=26094.6 direction=(0.055378,0.332308,0.941544) material=G4_Cu - --> #secondaries=15 impactParameter[fm]=4.18095 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 472 projectile=lambda_b Ekin[MeV]=22980.6 direction=(0.37124,0.258961,0.891695) material=G4_He - --> #secondaries=13 impactParameter[fm]=0.894534 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 473 projectile=anti_proton Ekin[MeV]=12380.9 direction=(0.628971,0.487577,0.605528) material=G4_Si - --> #secondaries=22 impactParameter[fm]=2.59473 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 474 projectile=Ds- Ekin[MeV]=23680.8 direction=(0.561568,0.807275,0.181516) material=G4_Cu - --> #secondaries=48 impactParameter[fm]=1.91412 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=3 - Collision 475 projectile=anti_xi_c0 Ekin[MeV]=5689.77 direction=(0.832702,0.335993,0.440132) material=G4_Fe - --> #secondaries=7 impactParameter[fm]=5.6831 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 476 projectile=D0 Ekin[MeV]=21886.3 direction=(0.857665,0.294103,0.421798) material=G4_Cu - --> #secondaries=22 impactParameter[fm]=4.69266 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 477 projectile=pi- Ekin[MeV]=17674.1 direction=(0.439147,0.817394,0.372851) material=G4_W - --> #secondaries=56 impactParameter[fm]=3.93435 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 478 projectile=anti_hyperalpha Ekin[MeV]=29403.2 direction=(0.98098,0.190482,0.0373377) material=G4_Ar - --> #secondaries=26 impactParameter[fm]=4.0374 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=2 - Collision 479 projectile=anti_sigma- Ekin[MeV]=29565.3 direction=(0.355535,0.645191,0.676256) material=G4_Pb - --> #secondaries=56 impactParameter[fm]=5.76277 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 480 projectile=anti_lambda_c+ Ekin[MeV]=24812.3 direction=(0.696544,0.709603,0.106254) material=G4_H - --> #secondaries=7 impactParameter[fm]=0.775951 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 481 projectile=lambda_b Ekin[MeV]=3363 direction=(0.0875697,0.492256,0.866034) material=G4_Al - --> #secondaries=9 impactParameter[fm]=4.58728 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 482 projectile=kaon- Ekin[MeV]=10590.9 direction=(0.913313,0.286979,0.288966) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=2.35881 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 483 projectile=xi_b0 Ekin[MeV]=7932.5 direction=(0.379722,0.539478,0.751515) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=3.84923 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 484 projectile=anti_D0 Ekin[MeV]=24028.6 direction=(0.0255979,0.822949,0.567538) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=1.05806 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 485 projectile=xi- Ekin[MeV]=22315.6 direction=(0.019557,0.115044,0.993168) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.30752 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 486 projectile=sigma+ Ekin[MeV]=23387 direction=(0.736985,0.664136,0.125604) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=5.42858 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 487 projectile=anti_proton Ekin[MeV]=16902.1 direction=(0.276569,0.6697,0.689211) material=G4_Fe - --> #secondaries=26 impactParameter[fm]=5.40128 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 488 projectile=xi_b- Ekin[MeV]=27809.7 direction=(0.828926,0.535172,0.162705) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.80614 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 489 projectile=anti_hyperHe5 Ekin[MeV]=24486.9 direction=(0.835426,0.546088,0.0620487) material=G4_Be - --> #secondaries=13 impactParameter[fm]=2.75125 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 490 projectile=anti_omega_c0 Ekin[MeV]=12426.6 direction=(0.548833,0.507429,0.664303) material=G4_Al - --> #secondaries=11 impactParameter[fm]=2.00749 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 491 projectile=kaon+ Ekin[MeV]=23081.9 direction=(0.875877,0.456078,0.157583) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.27584 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 492 projectile=xi_b- Ekin[MeV]=6436.56 direction=(0.514167,0.437396,0.737779) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.34976 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 493 projectile=anti_xi_c0 Ekin[MeV]=3624.51 direction=(0.629863,0.353492,0.691604) material=G4_W - --> #secondaries=44 impactParameter[fm]=4.08218 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=0 - Collision 494 projectile=anti_hyperHe5 Ekin[MeV]=20618.5 direction=(0.0268127,0.71033,0.703358) material=G4_Fe - --> #secondaries=80 impactParameter[fm]=1.6043 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=6 - Collision 495 projectile=anti_xi_c0 Ekin[MeV]=13996.5 direction=(0.505534,0.336658,0.794416) material=G4_Cu - --> #secondaries=39 impactParameter[fm]=3.39363 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=1 - Collision 496 projectile=lambda_c+ Ekin[MeV]=4873.48 direction=(0.421794,0.354642,0.834457) material=G4_Be - --> #secondaries=5 impactParameter[fm]=2.48928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 497 projectile=D- Ekin[MeV]=9387.13 direction=(0.471777,0.331082,0.817197) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=2.72043 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 498 projectile=doublehyperH4 Ekin[MeV]=10098.8 direction=(0.288794,0.0490041,0.956136) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.07684 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 499 projectile=xi_b0 Ekin[MeV]=22109.2 direction=(0.864156,0.331544,0.378567) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=4.56719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 500 projectile=He3 Ekin[MeV]=12292.9 direction=(0.780574,0.357013,0.513075) material=G4_Be - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - List of produced secondaries: - j=0 proton p=(2850.61,1285.73,1873.823764.39) MeV - j=1 pi- p=(-89.4555,175.686,-46.1975245.93) MeV - j=2 neutron p=(701.434,359.319,575.141354.51) MeV - j=3 pi+ p=(246.225,-235.52,30.8581369.498) MeV - j=4 alpha p=(-21.4261,120.345,-64.55583729.94) MeV - j=5 alpha p=(-10.4031,-16.9626,52.61663727.8) MeV - j=6 proton p=(4593.81,2154.76,2906.595922.39) MeV - j=7 neutron p=(3311.29,1453.96,2284.684379.63) MeV - Collision 501 projectile=anti_hyperHe5 Ekin[MeV]=27331.4 direction=(0.189389,0.361555,0.912913) material=G4_Be - --> #secondaries=11 impactParameter[fm]=4.94147 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 502 projectile=lambda_c+ Ekin[MeV]=15861 direction=(0.192984,0.705133,0.682308) material=G4_Fe - --> #secondaries=32 impactParameter[fm]=3.97561 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 503 projectile=anti_hyperHe5 Ekin[MeV]=9881.57 direction=(0.712007,0.0225296,0.701811) material=G4_Al - --> #secondaries=9 impactParameter[fm]=5.92419 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 504 projectile=xi_b- Ekin[MeV]=4791.95 direction=(0.236178,0.970809,0.0418276) material=G4_C - --> #secondaries=9 impactParameter[fm]=2.32385 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 505 projectile=xi_c+ Ekin[MeV]=11519 direction=(0.320063,0.35717,0.87749) material=G4_Al - --> #secondaries=26 impactParameter[fm]=1.85609 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 506 projectile=proton Ekin[MeV]=1760.64 direction=(0.111203,0.379151,0.918629) material=G4_Cu - --> #secondaries=23 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 507 projectile=omega_c0 Ekin[MeV]=14053.1 direction=(0.198454,0.693283,0.692802) material=G4_Be - --> #secondaries=13 impactParameter[fm]=0.458449 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 508 projectile=xi0 Ekin[MeV]=5657.05 direction=(0.698894,0.147695,0.699809) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.03081 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 509 projectile=anti_lambda_b Ekin[MeV]=18990.9 direction=(0.525912,0.849797,0.0355301) material=G4_Pb - --> #secondaries=86 impactParameter[fm]=4.0292 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=6 - Collision 510 projectile=D0 Ekin[MeV]=17853.1 direction=(0.622567,0.0473724,0.781131) material=G4_He - --> #secondaries=11 impactParameter[fm]=1.38325 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 511 projectile=neutron Ekin[MeV]=13666.5 direction=(0.424599,0.72119,0.547357) material=G4_H - --> #secondaries=2 impactParameter[fm]=1.7749 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 512 projectile=anti_lambda_b Ekin[MeV]=1359.84 direction=(0.786041,0.338366,0.517347) material=G4_Pb - --> #secondaries=33 impactParameter[fm]=6.37415 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=0 - Collision 513 projectile=anti_sigma- Ekin[MeV]=13285.5 direction=(0.103079,0.0411874,0.99382) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.95636 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 514 projectile=anti_neutron Ekin[MeV]=15485.4 direction=(0.57942,0.427521,0.693901) material=G4_Be - --> #secondaries=5 impactParameter[fm]=3.59535 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 515 projectile=B- Ekin[MeV]=6098.63 direction=(0.484759,0.449031,0.750586) material=G4_Al - --> #secondaries=8 impactParameter[fm]=1.40735 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 516 projectile=anti_xi_c+ Ekin[MeV]=8926.95 direction=(0.513377,0.0541029,0.856456) material=G4_Si - --> #secondaries=13 impactParameter[fm]=3.48542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 517 projectile=xi_b0 Ekin[MeV]=22236.8 direction=(0.814296,0.384778,0.43459) material=G4_Al - --> #secondaries=8 impactParameter[fm]=3.96225 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 518 projectile=alpha Ekin[MeV]=17389.5 direction=(0.735146,0.467509,0.490913) material=G4_Pb - --> #secondaries=58 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 519 projectile=anti_deuteron Ekin[MeV]=8725.77 direction=(0.687521,0.275898,0.671711) material=G4_C - --> #secondaries=23 impactParameter[fm]=0.56388 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=2 - Collision 520 projectile=hyperHe5 Ekin[MeV]=24362.8 direction=(0.633244,0.246793,0.73355) material=G4_Al - --> #secondaries=11 impactParameter[fm]=3.542 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 521 projectile=anti_alpha Ekin[MeV]=29814.6 direction=(0.510546,0.350801,0.785036) material=G4_C - --> #secondaries=11 impactParameter[fm]=2.62736 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 522 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28935.1 direction=(0.918218,0.263017,0.296138) material=G4_Fe - --> #secondaries=47 impactParameter[fm]=3.7419 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=5 - Collision 523 projectile=xi_c0 Ekin[MeV]=21795.9 direction=(0.86567,0.496938,0.060573) material=G4_H - --> #secondaries=8 impactParameter[fm]=0.162472 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 524 projectile=Ds+ Ekin[MeV]=22504.9 direction=(0.0649785,0.703088,0.708128) material=G4_Cu - --> #secondaries=33 impactParameter[fm]=3.24085 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 525 projectile=anti_lambda_c+ Ekin[MeV]=6729.85 direction=(0.127529,0.618062,0.775716) material=G4_H - --> #secondaries=4 impactParameter[fm]=2.17965 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 526 projectile=kaon- Ekin[MeV]=8916.95 direction=(0.192354,0.981287,0.00868738) material=G4_C - --> #secondaries=13 impactParameter[fm]=1.99878 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 527 projectile=Bc+ Ekin[MeV]=17388.9 direction=(0.46205,0.196852,0.864731) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.4149 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 528 projectile=xi_b0 Ekin[MeV]=20436.3 direction=(0.542161,0.614014,0.573627) material=G4_Cu - --> #secondaries=43 impactParameter[fm]=1.32389 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=3 - Collision 529 projectile=anti_sigma+ Ekin[MeV]=27034.1 direction=(0.493885,0.853246,0.167477) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=3.2033 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 530 projectile=xi- Ekin[MeV]=4407.54 direction=(0.207512,0.907054,0.366323) material=G4_Al - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 531 projectile=anti_xi0 Ekin[MeV]=28975.6 direction=(0.774929,0.532636,0.34027) material=G4_Fe - --> #secondaries=48 impactParameter[fm]=3.54551 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 532 projectile=kaon0S Ekin[MeV]=20947.7 direction=(0.273374,0.371018,0.887475) material=G4_Pb - --> #secondaries=71 impactParameter[fm]=1.59811 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 533 projectile=D+ Ekin[MeV]=16985.1 direction=(0.292798,0.874891,0.385792) material=G4_W - --> #secondaries=17 impactParameter[fm]=5.59429 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 534 projectile=anti_He3 Ekin[MeV]=11013.1 direction=(0.538004,0.340515,0.771104) material=G4_W - --> #secondaries=29 impactParameter[fm]=8.01718 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 535 projectile=kaon0S Ekin[MeV]=5705.73 direction=(0.702368,0.090639,0.70602) material=G4_C - --> #secondaries=16 impactParameter[fm]=0.10703 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 536 projectile=anti_xi_c0 Ekin[MeV]=15214.3 direction=(0.264906,0.959547,0.0953678) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.70479 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 537 projectile=anti_xi_c0 Ekin[MeV]=5911.42 direction=(0.753535,0.129551,0.644517) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.12018 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 538 projectile=anti_He3 Ekin[MeV]=9493.18 direction=(0.244209,0.740997,0.625528) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=4.88297 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 539 projectile=anti_triton Ekin[MeV]=23414.5 direction=(0.250753,0.591919,0.765999) material=G4_He - --> #secondaries=10 impactParameter[fm]=3.4866 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 540 projectile=Bc- Ekin[MeV]=10847.7 direction=(0.555293,0.607188,0.568307) material=G4_Al - --> #secondaries=10 impactParameter[fm]=3.85928 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 541 projectile=Ds- Ekin[MeV]=7597.02 direction=(0.0358151,0.691908,0.721097) material=G4_C - --> #secondaries=11 impactParameter[fm]=0.190322 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 542 projectile=anti_lambda_c+ Ekin[MeV]=15402.5 direction=(0.083211,0.616283,0.783116) material=G4_Be - --> #secondaries=14 impactParameter[fm]=0.593001 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=2 - Collision 543 projectile=xi_c0 Ekin[MeV]=26375.2 direction=(0.516973,0.846812,0.125098) material=G4_Fe - --> #secondaries=10 impactParameter[fm]=4.5283 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 544 projectile=anti_xi0 Ekin[MeV]=8979.72 direction=(0.936996,0.270521,0.221037) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=5.18369 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 545 projectile=D0 Ekin[MeV]=17563.8 direction=(0.0856806,0.641927,0.761964) material=G4_W - --> #secondaries=26 impactParameter[fm]=7.97332 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 546 projectile=kaon0L Ekin[MeV]=4995.42 direction=(0.406883,0.676776,0.613531) material=G4_Al - --> #secondaries=17 impactParameter[fm]=2.33836 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 547 projectile=xi_c0 Ekin[MeV]=20966.7 direction=(0.162012,0.947419,0.275953) material=G4_Si - --> #secondaries=15 impactParameter[fm]=4.3088 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 548 projectile=anti_omega_b- Ekin[MeV]=23540.3 direction=(0.344706,0.938523,0.018769) material=G4_Si - --> #secondaries=12 impactParameter[fm]=3.87563 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 549 projectile=anti_xi- Ekin[MeV]=22317.7 direction=(0.795745,0.599897,0.0831422) material=G4_He - --> #secondaries=12 impactParameter[fm]=2.49987 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 550 projectile=deuteron Ekin[MeV]=4402.79 direction=(0.714253,0.408032,0.568641) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 551 projectile=anti_sigma+ Ekin[MeV]=21920.7 direction=(0.787311,0.50002,0.360723) material=G4_Be - --> #secondaries=16 impactParameter[fm]=1.89448 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 552 projectile=hyperH4 Ekin[MeV]=16472.3 direction=(0.0661787,0.961205,0.267778) material=G4_Cu - --> #secondaries=40 impactParameter[fm]=5.60799 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=60 #NNcollisions=2 - Collision 553 projectile=xi0 Ekin[MeV]=9856.68 direction=(0.619467,0.446753,0.645501) material=G4_H - --> #secondaries=2 impactParameter[fm]=1.66489 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 554 projectile=kaon+ Ekin[MeV]=24638.5 direction=(0.902903,0.179293,0.390667) material=G4_Al - --> #secondaries=16 impactParameter[fm]=2.78728 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 555 projectile=anti_neutron Ekin[MeV]=21140.2 direction=(0.685978,0.271934,0.674897) material=G4_He - --> #secondaries=8 impactParameter[fm]=0.533806 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 556 projectile=D+ Ekin[MeV]=3329.2 direction=(0.536715,0.814141,0.221611) material=G4_W - --> #secondaries=42 impactParameter[fm]=3.4463 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=1 - Collision 557 projectile=D- Ekin[MeV]=9051.69 direction=(0.0258398,0.606361,0.79477) material=G4_Pb - --> #secondaries=38 impactParameter[fm]=6.6882 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 558 projectile=omega- Ekin[MeV]=16653.6 direction=(0.299693,0.858266,0.41661) material=G4_W - --> #secondaries=45 impactParameter[fm]=6.25511 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=1 - Collision 559 projectile=anti_lambda Ekin[MeV]=4666.81 direction=(0.621934,0.0653358,0.780339) material=G4_C - --> #secondaries=14 impactParameter[fm]=1.56946 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 560 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28921.4 direction=(0.716327,0.461006,0.523783) material=G4_Si - --> #secondaries=34 impactParameter[fm]=2.77607 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=4 - Collision 561 projectile=proton Ekin[MeV]=26666.3 direction=(0.734254,0.516165,0.440958) material=G4_Pb - --> #secondaries=83 impactParameter[fm]=2.18474 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 562 projectile=anti_xi_b- Ekin[MeV]=18571.1 direction=(0.534524,0.308396,0.786878) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.279279 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 563 projectile=pi+ Ekin[MeV]=9344.51 direction=(0.497757,0.301914,0.813072) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.998498 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 564 projectile=anti_hypertriton Ekin[MeV]=5519.24 direction=(0.228886,0.764791,0.602251) material=G4_He - --> #secondaries=16 impactParameter[fm]=2.92443 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=2 - Collision 565 projectile=xi_b- Ekin[MeV]=13992.2 direction=(0.0489282,0.602684,0.796478) material=G4_C - --> #secondaries=7 impactParameter[fm]=3.56759 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 566 projectile=xi_b0 Ekin[MeV]=22361.7 direction=(0.623582,0.0878447,0.776807) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.954777 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 567 projectile=anti_neutron Ekin[MeV]=19034.8 direction=(0.146557,0.672228,0.725693) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.6387 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 568 projectile=kaon0L Ekin[MeV]=21522.6 direction=(0.659741,0.449963,0.601893) material=G4_Si - --> #secondaries=7 impactParameter[fm]=2.38606 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 569 projectile=omega_c0 Ekin[MeV]=14803.1 direction=(0.104943,0.884841,0.453919) material=G4_He - --> #secondaries=12 impactParameter[fm]=1.30797 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 570 projectile=anti_xi0 Ekin[MeV]=2014.76 direction=(0.167739,0.446223,0.879061) material=G4_Si - --> #secondaries=19 impactParameter[fm]=3.61308 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 571 projectile=hyperH4 Ekin[MeV]=9116.28 direction=(0.656527,0.367506,0.65872) material=G4_Si - --> #secondaries=8 impactParameter[fm]=7.0724 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=29 #NNcollisions=1 - Collision 572 projectile=doublehyperH4 Ekin[MeV]=9841.39 direction=(0.380062,0.0444058,0.923894) material=G4_Al - --> #secondaries=30 impactParameter[fm]=1.17603 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=19 #NNcollisions=7 - Collision 573 projectile=D- Ekin[MeV]=1797.17 direction=(0.613812,0.366048,0.69946) material=G4_Si - --> #secondaries=11 impactParameter[fm]=2.02058 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 574 projectile=anti_neutron Ekin[MeV]=28882.5 direction=(0.612499,0.426408,0.665599) material=G4_C - --> #secondaries=9 impactParameter[fm]=2.76622 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 575 projectile=Bs0 Ekin[MeV]=19957.2 direction=(0.986336,0.0866096,0.140145) material=G4_Si - --> #secondaries=10 impactParameter[fm]=4.83467 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 576 projectile=anti_hyperalpha Ekin[MeV]=27608.7 direction=(0.360533,0.880898,0.306651) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=6.9173 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 577 projectile=anti_lambda Ekin[MeV]=6945.69 direction=(0.542313,0.808696,0.227832) material=G4_Ar - --> #secondaries=36 impactParameter[fm]=0.596399 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 578 projectile=proton Ekin[MeV]=3037.08 direction=(0.81946,0.241622,0.519715) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 579 projectile=anti_lambda Ekin[MeV]=4918.97 direction=(0.766918,0.306964,0.563569) material=G4_Pb - --> #secondaries=92 impactParameter[fm]=1.51551 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 580 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=5893.85 direction=(0.233112,0.953027,0.193386) material=G4_W - --> #secondaries=103 impactParameter[fm]=3.69437 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=4 - Collision 581 projectile=hyperHe5 Ekin[MeV]=20521.9 direction=(0.55356,0.636662,0.536873) material=G4_Al - --> #secondaries=29 impactParameter[fm]=4.3829 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 582 projectile=B0 Ekin[MeV]=4154.88 direction=(0.946879,0.317699,0.0498843) material=G4_Pb - --> #secondaries=7 impactParameter[fm]=8.84318 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 583 projectile=hyperalpha Ekin[MeV]=22270.4 direction=(0.339792,0.899072,0.276062) material=G4_He - --> #secondaries=11 impactParameter[fm]=0.569165 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=2 #NNcollisions=3 - Collision 584 projectile=xi_c0 Ekin[MeV]=28964.5 direction=(0.756888,0.336399,0.560318) material=G4_W - --> #secondaries=64 impactParameter[fm]=4.36524 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 585 projectile=Ds- Ekin[MeV]=24026.9 direction=(0.694534,0.254043,0.673116) material=G4_Si - --> #secondaries=9 impactParameter[fm]=4.23611 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 586 projectile=anti_omega_b- Ekin[MeV]=10994 direction=(0.178973,0.869026,0.461262) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.05788 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 587 projectile=anti_xi_c0 Ekin[MeV]=28964.8 direction=(0.544914,0.758554,0.3573) material=G4_C - --> #secondaries=16 impactParameter[fm]=0.288601 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 588 projectile=anti_neutron Ekin[MeV]=23813.8 direction=(0.824494,0.143112,0.547475) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.63564 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 589 projectile=xi_b0 Ekin[MeV]=21923.9 direction=(0.718304,0.533809,0.446193) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=6.01542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 590 projectile=anti_hyperalpha Ekin[MeV]=24299 direction=(0.791719,0.266417,0.54973) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=6.27412 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 591 projectile=anti_lambda_c+ Ekin[MeV]=8964.89 direction=(0.496504,0.406562,0.766936) material=G4_C - --> #secondaries=12 impactParameter[fm]=1.12706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 592 projectile=anti_omega_c0 Ekin[MeV]=19474.4 direction=(0.0889775,0.0280156,0.99564) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=2.68741 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 593 projectile=anti_xi_c+ Ekin[MeV]=5688.97 direction=(0.448507,0.32304,0.833359) material=G4_C - --> #secondaries=11 impactParameter[fm]=1.95604 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 594 projectile=anti_He3 Ekin[MeV]=15650.5 direction=(0.970559,0.135776,0.198946) material=G4_C - --> #secondaries=22 impactParameter[fm]=1.6163 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=3 - Collision 595 projectile=pi+ Ekin[MeV]=20493.6 direction=(0.422008,0.396624,0.815229) material=G4_Fe - --> #secondaries=25 impactParameter[fm]=4.40313 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 596 projectile=kaon+ Ekin[MeV]=2867.99 direction=(0.561524,0.544967,0.622658) material=G4_Si - --> #secondaries=25 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 597 projectile=Bc+ Ekin[MeV]=25301 direction=(0.151448,0.853289,0.49896) material=G4_Si - --> #secondaries=13 impactParameter[fm]=1.84764 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 598 projectile=anti_omega_c0 Ekin[MeV]=24227.6 direction=(0.622395,0.741494,0.25062) material=G4_W - --> #secondaries=72 impactParameter[fm]=2.12628 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 599 projectile=triton Ekin[MeV]=18850.8 direction=(0.582386,0.528779,0.617429) material=G4_Si - --> #secondaries=41 impactParameter[fm]=1.82398 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=20 #NNcollisions=7 - Collision 600 projectile=doublehyperH4 Ekin[MeV]=16065.9 direction=(0.812772,0.367977,0.451658) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.01832 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=2 - List of produced secondaries: - j=0 neutron p=(3183.08,1606.1,1732.494073.8) MeV - j=1 proton p=(3473.7,1221,2489.874542.82) MeV - j=2 neutron p=(2882.6,1592.45,1643.053798.37) MeV - j=3 pi+ p=(777.023,262.268,4.09724831.893) MeV - j=4 lambda p=(4487.7,1860.77,2451.135554.7) MeV - j=5 proton p=(206.388,207.214,-445.3321078.98) MeV - j=6 neutron p=(387.041,-220.338,312.8211085.81) MeV - j=7 sigma0 p=(553.913,77.8978,780.8941531.36) MeV - j=8 neutron p=(-149.038,525.298,-47.02951087.72) MeV - j=9 pi0 p=(249.99,134.954,-1.64786314.53) MeV - Collision 601 projectile=anti_proton Ekin[MeV]=15053.2 direction=(0.178092,0.977633,0.111883) material=G4_Si - --> #secondaries=16 impactParameter[fm]=2.59868 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 602 projectile=pi- Ekin[MeV]=6793.33 direction=(0.367748,0.02032,0.929703) material=G4_Al - --> #secondaries=6 impactParameter[fm]=3.16154 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 603 projectile=xi_b- Ekin[MeV]=10763.5 direction=(0.810904,0.54572,0.211245) material=G4_Si - --> #secondaries=5 impactParameter[fm]=4.07549 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 604 projectile=anti_doublehyperH4 Ekin[MeV]=13110.3 direction=(0.73234,0.603315,0.315735) material=G4_Si - --> #secondaries=31 impactParameter[fm]=3.68997 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=28 #NNcollisions=5 - Collision 605 projectile=anti_He3 Ekin[MeV]=16038.8 direction=(0.186195,0.98045,0.0636364) material=G4_Fe - --> #secondaries=39 impactParameter[fm]=2.44198 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=4 - Collision 606 projectile=anti_xi_b- Ekin[MeV]=24174.2 direction=(0.0717549,0.396262,0.915329) material=G4_Pb - --> #secondaries=61 impactParameter[fm]=4.78537 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 - Collision 607 projectile=xi_c0 Ekin[MeV]=28386.4 direction=(0.870201,0.204419,0.44829) material=G4_Be - --> #secondaries=15 impactParameter[fm]=0.999252 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=2 - Collision 608 projectile=xi0 Ekin[MeV]=2239.71 direction=(0.265321,0.950974,0.158911) material=G4_Si - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 609 projectile=anti_deuteron Ekin[MeV]=2611.79 direction=(0.383815,0.654508,0.651387) material=G4_W - --> #secondaries=17 impactParameter[fm]=7.86409 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=184 #NNcollisions=1 - Collision 610 projectile=anti_B0 Ekin[MeV]=17350.8 direction=(0.300136,0.746032,0.594436) material=G4_Ar - --> #secondaries=16 impactParameter[fm]=0.0842936 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=1 - Collision 611 projectile=D0 Ekin[MeV]=15086.9 direction=(0.0702425,0.953001,0.294711) material=G4_Be - --> #secondaries=5 impactParameter[fm]=2.12986 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 612 projectile=anti_hyperH4 Ekin[MeV]=14304.7 direction=(0.380908,0.580338,0.719803) material=G4_C - --> #secondaries=5 impactParameter[fm]=4.47741 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 613 projectile=doublehyperH4 Ekin[MeV]=12448.7 direction=(0.914765,0.238216,0.32628) material=G4_Be - --> #secondaries=12 impactParameter[fm]=3.94735 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 614 projectile=proton Ekin[MeV]=4834.04 direction=(0.378252,0.193646,0.905222) material=G4_Pb - --> #secondaries=77 impactParameter[fm]=3.4542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=1 - Collision 615 projectile=He3 Ekin[MeV]=19231 direction=(0.628766,0.583703,0.513755) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.417358 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 616 projectile=B+ Ekin[MeV]=29844.4 direction=(0.530042,0.154474,0.833782) material=G4_Fe - --> #secondaries=17 impactParameter[fm]=3.76876 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 617 projectile=anti_xi_c+ Ekin[MeV]=15387.6 direction=(0.960523,0.043438,0.274789) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.62489 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 618 projectile=pi- Ekin[MeV]=24830.9 direction=(0.942083,0.312642,0.121387) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.27098 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 619 projectile=anti_xi_b0 Ekin[MeV]=11178.8 direction=(0.798386,0.319905,0.510137) material=G4_W - --> #secondaries=15 impactParameter[fm]=5.84494 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 620 projectile=B0 Ekin[MeV]=4345.38 direction=(0.609213,0.0254925,0.792597) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=4.77233 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 621 projectile=anti_sigma+ Ekin[MeV]=29385.9 direction=(0.978009,0.208514,0.00451549) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.25151 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 622 projectile=xi_b0 Ekin[MeV]=9468.61 direction=(0.715406,0.00762505,0.698667) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=3.42609 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 623 projectile=anti_sigma- Ekin[MeV]=19362.5 direction=(0.408731,0.323864,0.853259) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.08416 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 624 projectile=pi- Ekin[MeV]=1017.49 direction=(0.832098,0.437785,0.340525) material=G4_He - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 625 projectile=kaon- Ekin[MeV]=1440.17 direction=(0.960696,0.205879,0.186218) material=G4_Cu - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 626 projectile=anti_hyperHe5 Ekin[MeV]=26951.5 direction=(0.638888,0.735622,0.225126) material=G4_C - --> #secondaries=12 impactParameter[fm]=4.64546 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 627 projectile=anti_xi_b- Ekin[MeV]=17293.8 direction=(0.577015,0.24391,0.779462) material=G4_Si - --> #secondaries=23 impactParameter[fm]=0.328244 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 628 projectile=D+ Ekin[MeV]=17186.8 direction=(0.47187,0.799933,0.370736) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=2.92896 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 629 projectile=anti_omega_b- Ekin[MeV]=16241.8 direction=(0.595375,0.571734,0.56449) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=2.06933 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=3 - Collision 630 projectile=anti_omega_c0 Ekin[MeV]=15696.4 direction=(0.31484,0.569286,0.759466) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.72868 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 631 projectile=anti_alpha Ekin[MeV]=20208.4 direction=(0.760739,0.567804,0.314444) material=G4_Al - --> #secondaries=37 impactParameter[fm]=2.10204 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 632 projectile=B0 Ekin[MeV]=26328.6 direction=(0.318146,0.701958,0.637211) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=3.90821 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 633 projectile=doublehyperH4 Ekin[MeV]=18790.3 direction=(0.382414,0.768791,0.512562) material=G4_Fe - --> #secondaries=52 impactParameter[fm]=3.1155 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=8 - Collision 634 projectile=proton Ekin[MeV]=18911.8 direction=(0.981309,0.184608,0.0543407) material=G4_Pb - --> #secondaries=66 impactParameter[fm]=4.45126 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 635 projectile=anti_triton Ekin[MeV]=27305.9 direction=(0.141259,0.809492,0.569885) material=G4_W - --> #secondaries=130 impactParameter[fm]=3.8959 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=174 #NNcollisions=7 - Collision 636 projectile=pi+ Ekin[MeV]=19567.8 direction=(0.648587,0.443491,0.618588) material=G4_W - --> #secondaries=73 impactParameter[fm]=2.63607 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=2 - Collision 637 projectile=triton Ekin[MeV]=8239.84 direction=(0.545807,0.821187,0.16657) material=G4_Be - --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 638 projectile=pi+ Ekin[MeV]=7671.92 direction=(0.901864,0.426374,0.0696177) material=G4_W - --> #secondaries=47 impactParameter[fm]=5.56977 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 639 projectile=anti_hyperH4 Ekin[MeV]=17842.6 direction=(0.723246,0.239548,0.647712) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=5.08441 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 640 projectile=D0 Ekin[MeV]=15811.9 direction=(0.00965654,0.808213,0.588811) material=G4_Si - --> #secondaries=10 impactParameter[fm]=5.04875 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 641 projectile=kaon0S Ekin[MeV]=27570.4 direction=(0.700796,0.169082,0.693034) material=G4_Pb - --> #secondaries=80 impactParameter[fm]=3.57275 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=4 - Collision 642 projectile=xi0 Ekin[MeV]=28386.5 direction=(0.00750293,0.972126,0.234338) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.579248 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 643 projectile=Bc- Ekin[MeV]=7313.88 direction=(0.909763,0.410649,0.0608126) material=G4_Be - --> #secondaries=4 impactParameter[fm]=1.81381 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 644 projectile=sigma+ Ekin[MeV]=6881.37 direction=(0.0692432,0.272107,0.959773) material=G4_Pb - --> #secondaries=38 impactParameter[fm]=4.90355 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 645 projectile=doublehyperH4 Ekin[MeV]=22094 direction=(0.44534,0.765495,0.464424) material=G4_Fe - --> #secondaries=10 impactParameter[fm]=6.90885 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 646 projectile=anti_doublehyperH4 Ekin[MeV]=27332.7 direction=(0.0636666,0.0159544,0.997844) material=G4_H - --> #secondaries=11 impactParameter[fm]=2.07134 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=2 - Collision 647 projectile=sigma- Ekin[MeV]=14707.9 direction=(0.200514,0.796672,0.570182) material=G4_Be - --> #secondaries=11 impactParameter[fm]=1.08178 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 648 projectile=Bs0 Ekin[MeV]=24719 direction=(0.93406,0.348669,0.0772175) material=G4_Fe - --> #secondaries=9 impactParameter[fm]=4.6577 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 649 projectile=anti_doublehyperH4 Ekin[MeV]=25208.1 direction=(0.877705,0.467573,0.104923) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.70407 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 650 projectile=lambda_c+ Ekin[MeV]=1809.09 direction=(0.895386,0.195457,0.4001) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=4.19194 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 - Collision 651 projectile=pi+ Ekin[MeV]=6590.48 direction=(0.61924,0.756061,0.211927) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=3.96304 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 652 projectile=anti_lambda_b Ekin[MeV]=2285.68 direction=(0.00484716,0.964887,0.26262) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=4.42824 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=0 - Collision 653 projectile=anti_lambda Ekin[MeV]=21579.6 direction=(0.178526,0.471923,0.863375) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.82617 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 654 projectile=anti_lambda Ekin[MeV]=2358.97 direction=(0.538051,0.728315,0.424333) material=G4_C - --> #secondaries=7 impactParameter[fm]=2.50211 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 655 projectile=omega_b- Ekin[MeV]=9023.97 direction=(0.905977,0.35199,0.235177) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.790242 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 656 projectile=proton Ekin[MeV]=26539.5 direction=(0.685358,0.51326,0.516574) material=G4_Si - --> #secondaries=25 impactParameter[fm]=1.85358 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 657 projectile=neutron Ekin[MeV]=24693.6 direction=(0.533066,0.130581,0.835936) material=G4_Fe - --> #secondaries=22 impactParameter[fm]=5.19742 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 658 projectile=anti_Bs0 Ekin[MeV]=21979.3 direction=(0.593544,0.770374,0.232873) material=G4_Be - --> #secondaries=11 impactParameter[fm]=1.93694 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 659 projectile=anti_omega_c0 Ekin[MeV]=29935.3 direction=(0.318524,0.701579,0.637439) material=G4_Cu - --> #secondaries=39 impactParameter[fm]=3.19914 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 660 projectile=alpha Ekin[MeV]=1023.18 direction=(0.374783,0.865531,0.332254) material=G4_Si - --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 661 projectile=anti_sigma- Ekin[MeV]=28226.7 direction=(0.664718,0.562963,0.491145) material=G4_Be - --> #secondaries=6 impactParameter[fm]=3.78832 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 662 projectile=xi_c+ Ekin[MeV]=17866 direction=(0.748263,0.303253,0.590034) material=G4_Ar - --> #secondaries=27 impactParameter[fm]=2.84335 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 663 projectile=B0 Ekin[MeV]=15788.8 direction=(0.81796,0.485528,0.308552) material=G4_Si - --> #secondaries=14 impactParameter[fm]=2.74106 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 664 projectile=Bc- Ekin[MeV]=5218.28 direction=(0.612928,0.769544,0.179221) material=G4_W - --> #secondaries=10 impactParameter[fm]=3.05669 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 665 projectile=Ds+ Ekin[MeV]=12404.5 direction=(0.660825,0.295482,0.689928) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=2.17976 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 666 projectile=anti_hyperH4 Ekin[MeV]=29124.6 direction=(0.221655,0.948915,0.224564) material=G4_He - --> #secondaries=11 impactParameter[fm]=2.85756 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 667 projectile=omega- Ekin[MeV]=13997.2 direction=(0.811099,0.584478,0.0224427) material=G4_C - --> #secondaries=11 impactParameter[fm]=1.59077 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 668 projectile=Bs0 Ekin[MeV]=15127.6 direction=(0.993003,0.113494,0.0326096) material=G4_Cu - --> #secondaries=14 impactParameter[fm]=3.31692 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 669 projectile=anti_xi- Ekin[MeV]=9720.87 direction=(0.212217,0.762576,0.611099) material=G4_Al - --> #secondaries=16 impactParameter[fm]=2.3413 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 670 projectile=omega- Ekin[MeV]=15214.8 direction=(0.211708,0.704754,0.677128) material=G4_Si - --> #secondaries=12 impactParameter[fm]=4.80706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 671 projectile=lambda_b Ekin[MeV]=3541.03 direction=(0.807427,0.552816,0.206048) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=0.930186 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=0 - Collision 672 projectile=xi_c+ Ekin[MeV]=12192.7 direction=(0.688391,0.572431,0.445466) material=G4_Fe - --> #secondaries=9 impactParameter[fm]=4.19945 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=0 - Collision 673 projectile=kaon+ Ekin[MeV]=15175.1 direction=(0.774415,0.611716,0.161508) material=G4_Fe - --> #secondaries=27 impactParameter[fm]=0.862099 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 674 projectile=xi_c0 Ekin[MeV]=23824.6 direction=(0.529079,0.490759,0.692265) material=G4_Pb - --> #secondaries=19 impactParameter[fm]=7.10299 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 675 projectile=deuteron Ekin[MeV]=16301.6 direction=(0.168498,0.824981,0.539458) material=G4_He - --> #secondaries=5 impactParameter[fm]=4.45677 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 676 projectile=Bs0 Ekin[MeV]=24934.3 direction=(0.598573,0.640044,0.481719) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=4.28306 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 677 projectile=anti_triton Ekin[MeV]=11139.8 direction=(0.214135,0.766717,0.60522) material=G4_Al - --> #secondaries=27 impactParameter[fm]=5.06948 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 678 projectile=anti_B0 Ekin[MeV]=28717 direction=(0.886694,0.387043,0.252925) material=G4_Al - --> #secondaries=16 impactParameter[fm]=1.39463 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 679 projectile=anti_xi_c0 Ekin[MeV]=24631.4 direction=(0.0564622,0.54158,0.838751) material=G4_Pb - --> #secondaries=35 impactParameter[fm]=7.15228 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 680 projectile=hyperHe5 Ekin[MeV]=16755.8 direction=(0.748701,0.633398,0.195585) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.9899 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 681 projectile=anti_xi- Ekin[MeV]=8933.06 direction=(0.251591,0.912444,0.32272) material=G4_Si - --> #secondaries=37 impactParameter[fm]=0.996327 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 682 projectile=anti_neutron Ekin[MeV]=21016.4 direction=(0.370122,0.777545,0.508364) material=G4_Fe - --> #secondaries=30 impactParameter[fm]=2.54277 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 - Collision 683 projectile=anti_xi_b0 Ekin[MeV]=10100.9 direction=(0.836853,0.505267,0.210673) material=G4_W - --> #secondaries=22 impactParameter[fm]=5.40586 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 684 projectile=deuteron Ekin[MeV]=18815.7 direction=(0.588049,0.442278,0.677192) material=G4_He - --> #secondaries=13 impactParameter[fm]=0.532154 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=4 - Collision 685 projectile=B0 Ekin[MeV]=4597.09 direction=(0.272612,0.735367,0.620417) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=2.11698 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=60 #NNcollisions=1 - Collision 686 projectile=anti_hyperHe5 Ekin[MeV]=17654.5 direction=(0.000918625,0.278967,0.9603) material=G4_Fe - --> #secondaries=70 impactParameter[fm]=1.35925 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=5 - Collision 687 projectile=pi- Ekin[MeV]=13858.6 direction=(0.639534,0.302699,0.706661) material=G4_Al - --> #secondaries=17 impactParameter[fm]=1.10484 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 688 projectile=anti_neutron Ekin[MeV]=24990.7 direction=(0.395098,0.384677,0.834219) material=G4_Be - --> #secondaries=10 impactParameter[fm]=2.40624 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 689 projectile=xi_b- Ekin[MeV]=8043.69 direction=(0.726024,0.00181903,0.687667) material=G4_Si - --> #secondaries=11 impactParameter[fm]=3.60084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 690 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=20453.2 direction=(0.674695,0.668539,0.312798) material=G4_Be - --> #secondaries=7 impactParameter[fm]=3.52924 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 691 projectile=hyperHe5 Ekin[MeV]=8243.66 direction=(0.750173,0.658901,0.05559) material=G4_Be - --> #secondaries=7 impactParameter[fm]=4.7123 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 692 projectile=anti_hyperalpha Ekin[MeV]=17336 direction=(0.0380138,0.59809,0.800527) material=G4_Pb - --> #secondaries=49 impactParameter[fm]=7.01429 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 693 projectile=anti_xi0 Ekin[MeV]=5628.77 direction=(0.7811,0.591353,0.200461) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.36114 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 694 projectile=Bs0 Ekin[MeV]=6889.97 direction=(0.199874,0.861045,0.467602) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.40918 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 695 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=9825.03 direction=(0.625443,0.052493,0.778502) material=G4_Al - --> #secondaries=12 impactParameter[fm]=5.62963 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 696 projectile=anti_proton Ekin[MeV]=1881.97 direction=(0.379923,0.204762,0.90207) material=G4_Pb - --> #secondaries=52 impactParameter[fm]=6.27023 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 697 projectile=anti_proton Ekin[MeV]=28484.8 direction=(0.549432,0.0317112,0.834937) material=G4_W - --> #secondaries=84 impactParameter[fm]=3.01745 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=4 - Collision 698 projectile=anti_triton Ekin[MeV]=14180.1 direction=(0.408135,0.432602,0.803916) material=G4_W - --> #secondaries=46 impactParameter[fm]=8.37979 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=186 #NNcollisions=1 - Collision 699 projectile=anti_xi_b- Ekin[MeV]=24971.8 direction=(0.586868,0.0447249,0.808446) material=G4_C - --> #secondaries=18 impactParameter[fm]=1.07486 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 700 projectile=pi+ Ekin[MeV]=19827.7 direction=(0.91991,0.135344,0.368033) material=G4_Ar - --> #secondaries=15 impactParameter[fm]=6.20483 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - List of produced secondaries: - j=0 pi0 p=(3953.75,363.508,1163.654139.63) MeV - j=1 pi+ p=(553.937,-80.2154,11.3872576.966) MeV - j=2 neutron p=(902.643,414.536,238.0471387.82) MeV - j=3 pi+ p=(433.633,227.305,21.905509.573) MeV - j=4 pi0 p=(542.625,269.988,342.72709.233) MeV - j=5 pi- p=(826.707,326.762,411.262989.361) MeV - j=6 pi+ p=(9753.97,1404.03,4300.410752.9) MeV - j=7 pi0 p=(1029.28,72.3081,310.4661085.93) MeV - j=8 pi- p=(181.515,-304.05,460.643597.549) MeV - j=9 proton p=(214.918,212.998,359.5431049.37) MeV - j=10 Cl36 p=(-92.9376,-192.029,-291.19833497.5) MeV - j=11 neutron p=(80.6039,12.0003,-9.49913943.141) MeV - j=12 neutron p=(-15.9339,-24.7694,29.3036940.483) MeV - j=13 gamma p=(0.640598,-0.535572,-0.4849340.96559) MeV - j=14 gamma p=(2.41677,0.56113,0.3483642.50539) MeV - Collision 701 projectile=anti_hyperHe5 Ekin[MeV]=14573.9 direction=(0.963763,0.266494,0.0119072) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=6.82606 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 702 projectile=xi_b0 Ekin[MeV]=27317 direction=(0.297126,0.948557,0.109344) material=G4_Cu - --> #secondaries=25 impactParameter[fm]=4.61642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 703 projectile=hypertriton Ekin[MeV]=25037 direction=(0.410479,0.0259968,0.9115) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=2.96832 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=6 - Collision 704 projectile=B+ Ekin[MeV]=9112.1 direction=(0.255793,0.0168929,0.966584) material=G4_Si - --> #secondaries=4 impactParameter[fm]=3.84503 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 705 projectile=sigma- Ekin[MeV]=25702.2 direction=(0.726905,0.0707345,0.683085) material=G4_Ar - --> #secondaries=29 impactParameter[fm]=2.16897 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 706 projectile=anti_proton Ekin[MeV]=21059.5 direction=(0.152372,0.407317,0.900486) material=G4_Si - --> #secondaries=25 impactParameter[fm]=2.5086 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=5 - Collision 707 projectile=D+ Ekin[MeV]=4192.32 direction=(0.590477,0.734024,0.33548) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.05153 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=0 - Collision 708 projectile=kaon0L Ekin[MeV]=20158.1 direction=(0.514677,0.606366,0.606158) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.64474 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 709 projectile=sigma- Ekin[MeV]=14438 direction=(0.436953,0.304161,0.846497) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=6.31422 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 710 projectile=anti_proton Ekin[MeV]=26475.7 direction=(0.248433,0.820338,0.515099) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=5.428 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 711 projectile=Bs0 Ekin[MeV]=18053.2 direction=(0.740114,0.0348951,0.671576) material=G4_Be - --> #secondaries=8 impactParameter[fm]=3.65421 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 712 projectile=Bc- Ekin[MeV]=24981.6 direction=(0.501927,0.742967,0.442797) material=G4_Al - --> #secondaries=6 impactParameter[fm]=0.380795 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 713 projectile=xi_c0 Ekin[MeV]=5125.43 direction=(0.355045,0.914369,0.194608) material=G4_W - --> #secondaries=40 impactParameter[fm]=4.80929 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=3 - Collision 714 projectile=Bc+ Ekin[MeV]=27034.5 direction=(0.783363,0.158109,0.601119) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.503929 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 715 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=21948.4 direction=(0.671491,0.393569,0.627855) material=G4_Fe - --> #secondaries=35 impactParameter[fm]=3.91355 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=6 - Collision 716 projectile=Bc+ Ekin[MeV]=15897.4 direction=(0.287364,0.956803,0.0441644) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=0.805391 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 717 projectile=anti_xi_c0 Ekin[MeV]=1365.18 direction=(0.635159,0.662955,0.396312) material=G4_Cu - --> #secondaries=13 impactParameter[fm]=4.11038 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 - Collision 718 projectile=proton Ekin[MeV]=11019 direction=(0.842984,0.184825,0.505192) material=G4_Pb - --> #secondaries=71 impactParameter[fm]=5.04159 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 719 projectile=anti_deuteron Ekin[MeV]=3177.99 direction=(0.375264,0.641507,0.669064) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.82257 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 720 projectile=anti_xi_c+ Ekin[MeV]=5403.32 direction=(0.148845,0.920244,0.361934) material=G4_Fe - --> #secondaries=28 impactParameter[fm]=2.80597 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=2 - Collision 721 projectile=anti_xi_b0 Ekin[MeV]=24401 direction=(0.72122,0.648908,0.242405) material=G4_C - --> #secondaries=15 impactParameter[fm]=2.57252 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 722 projectile=xi_b0 Ekin[MeV]=24416.1 direction=(0.877987,0.261867,0.400705) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.57799 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 723 projectile=anti_xi_c0 Ekin[MeV]=13658.8 direction=(0.70206,0.664781,0.255299) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.04835 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 724 projectile=anti_xi0 Ekin[MeV]=23785.5 direction=(0.286597,0.0359163,0.957378) material=G4_Ar - --> #secondaries=45 impactParameter[fm]=2.74719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=4 - Collision 725 projectile=xi_b0 Ekin[MeV]=2861.21 direction=(0.540513,0.703234,0.461853) material=G4_Si - --> #secondaries=10 impactParameter[fm]=3.08391 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=0 - Collision 726 projectile=anti_omega_b- Ekin[MeV]=24131.8 direction=(0.214088,0.763074,0.609823) material=G4_Cu - --> #secondaries=48 impactParameter[fm]=1.53018 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 727 projectile=lambda_b Ekin[MeV]=23840.9 direction=(0.567574,0.733418,0.374108) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=5.58844 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 728 projectile=hyperalpha Ekin[MeV]=13211.1 direction=(0.522179,0.031348,0.85226) material=G4_Cu - --> #secondaries=50 impactParameter[fm]=4.40867 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=5 - Collision 729 projectile=anti_sigma- Ekin[MeV]=14176.3 direction=(0.862874,0.15113,0.482295) material=G4_Al - --> #secondaries=28 impactParameter[fm]=0.630026 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 730 projectile=xi_c+ Ekin[MeV]=13867.6 direction=(0.689891,0.392735,0.608119) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.69535 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 731 projectile=D+ Ekin[MeV]=25348.7 direction=(0.697292,0.610155,0.376158) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=0.59855 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 732 projectile=Bc- Ekin[MeV]=18732.1 direction=(0.448131,0.754813,0.478995) material=G4_Pb - --> #secondaries=29 impactParameter[fm]=4.56185 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 733 projectile=anti_xi_c0 Ekin[MeV]=25619.5 direction=(0.609829,0.672277,0.419705) material=G4_H - --> #secondaries=6 impactParameter[fm]=2.20581 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 734 projectile=kaon0S Ekin[MeV]=29302 direction=(0.681491,0.194267,0.705571) material=G4_Be - --> #secondaries=20 impactParameter[fm]=0.985412 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 735 projectile=pi+ Ekin[MeV]=25188.3 direction=(0.107062,0.985945,0.128255) material=G4_Si - --> #secondaries=27 impactParameter[fm]=2.79799 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 736 projectile=xi0 Ekin[MeV]=17173.8 direction=(0.750715,0.408753,0.518987) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.968309 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 737 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=6866.94 direction=(0.561225,0.312437,0.766427) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.845015 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 738 projectile=hyperH4 Ekin[MeV]=28392.9 direction=(0.50205,0.758159,0.4161) material=G4_Cu - --> #secondaries=47 impactParameter[fm]=5.22499 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=8 - Collision 739 projectile=anti_alpha Ekin[MeV]=8572.02 direction=(0.481677,0.653741,0.583617) material=G4_H - --> #secondaries=9 impactParameter[fm]=2.40601 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 740 projectile=anti_alpha Ekin[MeV]=13326.1 direction=(0.270399,0.674839,0.686642) material=G4_Ar - --> #secondaries=15 impactParameter[fm]=5.50074 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 741 projectile=anti_He3 Ekin[MeV]=15500.2 direction=(0.985967,0.149461,0.0743631) material=G4_He - --> #secondaries=16 impactParameter[fm]=1.18041 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=4 - Collision 742 projectile=anti_hyperHe5 Ekin[MeV]=10921.9 direction=(0.102694,0.812187,0.574287) material=G4_W - --> #secondaries=78 impactParameter[fm]=4.6495 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=4 - Collision 743 projectile=anti_xi0 Ekin[MeV]=18465.1 direction=(0.547089,0.200288,0.81276) material=G4_W - --> #secondaries=31 impactParameter[fm]=6.46288 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 744 projectile=anti_hyperHe5 Ekin[MeV]=16162.6 direction=(0.512539,0.662899,0.545773) material=G4_Cu - --> #secondaries=71 impactParameter[fm]=2.613 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=6 - Collision 745 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=19786.1 direction=(0.134636,0.811717,0.568321) material=G4_Al - --> #secondaries=45 impactParameter[fm]=0.996668 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=4 - Collision 746 projectile=xi_c0 Ekin[MeV]=28250.2 direction=(0.604206,0.614451,0.507332) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.1324 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 747 projectile=B+ Ekin[MeV]=17653.2 direction=(0.550228,0.424676,0.718958) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.61588 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 748 projectile=anti_triton Ekin[MeV]=20944.9 direction=(0.366898,0.0607787,0.928274) material=G4_Al - --> #secondaries=13 impactParameter[fm]=5.83439 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 749 projectile=anti_hypertriton Ekin[MeV]=5427.08 direction=(0.530494,0.726108,0.437428) material=G4_C - --> #secondaries=14 impactParameter[fm]=3.67096 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 750 projectile=lambda_c+ Ekin[MeV]=19986.4 direction=(0.6051,0.762472,0.229108) material=G4_W - --> #secondaries=70 impactParameter[fm]=2.42632 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=5 - Collision 751 projectile=Bc+ Ekin[MeV]=26920.1 direction=(0.357694,0.684073,0.635688) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=2.36943 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 752 projectile=anti_D0 Ekin[MeV]=27506.1 direction=(0.333689,0.926451,0.174181) material=G4_Ar - --> #secondaries=33 impactParameter[fm]=2.92475 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 753 projectile=lambda_b Ekin[MeV]=19804.9 direction=(0.371743,0.835913,0.403802) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.30889 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 754 projectile=anti_hyperHe5 Ekin[MeV]=12251.5 direction=(0.96164,0.147803,0.231089) material=G4_C - --> #secondaries=25 impactParameter[fm]=1.50694 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=4 - Collision 755 projectile=anti_lambda_b Ekin[MeV]=24794.5 direction=(0.541346,0.516355,0.663567) material=G4_Cu - --> #secondaries=37 impactParameter[fm]=2.37064 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 - Collision 756 projectile=neutron Ekin[MeV]=7454.5 direction=(0.263293,0.552781,0.790639) material=G4_Be - --> #secondaries=12 impactParameter[fm]=1.12844 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=2 - Collision 757 projectile=anti_sigma- Ekin[MeV]=14201.6 direction=(0.217467,0.742748,0.633272) material=G4_Ar - --> #secondaries=33 impactParameter[fm]=0.930041 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 - Collision 758 projectile=Bs0 Ekin[MeV]=13959.8 direction=(0.174272,0.843797,0.507578) material=G4_Si - --> #secondaries=8 impactParameter[fm]=1.75515 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 759 projectile=anti_Bs0 Ekin[MeV]=3412.32 direction=(0.00904596,0.894638,0.4467) material=G4_W - --> #secondaries=31 impactParameter[fm]=2.0545 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=2 - Collision 760 projectile=lambda_b Ekin[MeV]=16911.1 direction=(0.664467,0.488704,0.565378) material=G4_W - --> #secondaries=34 impactParameter[fm]=5.71783 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=1 - Collision 761 projectile=anti_hyperHe5 Ekin[MeV]=10218.8 direction=(0.176297,0.892402,0.415377) material=G4_Pb - --> #secondaries=75 impactParameter[fm]=6.41824 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=202 #NNcollisions=3 - Collision 762 projectile=proton Ekin[MeV]=14596.8 direction=(0.50163,0.697014,0.512386) material=G4_C - --> #secondaries=17 impactParameter[fm]=2.96793 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 763 projectile=anti_xi- Ekin[MeV]=21788.5 direction=(0.502295,0.861011,0.0797534) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.147 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 764 projectile=anti_xi_b0 Ekin[MeV]=18536.4 direction=(0.0527192,0.853882,0.517789) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.0159804 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 765 projectile=doublehyperH4 Ekin[MeV]=20577 direction=(0.940427,0.128417,0.314812) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.61884 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 766 projectile=anti_omega- Ekin[MeV]=25556.4 direction=(0.445968,0.00951013,0.894999) material=G4_Fe - --> #secondaries=39 impactParameter[fm]=2.36829 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 767 projectile=anti_omega_b- Ekin[MeV]=22423.5 direction=(0.683754,0.605095,0.407849) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.630529 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 768 projectile=anti_omega_b- Ekin[MeV]=29138.7 direction=(0.387248,0.84724,0.363625) material=G4_C - --> #secondaries=10 impactParameter[fm]=3.08248 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 769 projectile=anti_omega- Ekin[MeV]=2528.61 direction=(0.84458,0.372183,0.384921) material=G4_Pb - --> #secondaries=7 impactParameter[fm]=8.60325 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 770 projectile=xi_c+ Ekin[MeV]=27545.1 direction=(0.986346,0.127718,0.103972) material=G4_Fe - --> #secondaries=38 impactParameter[fm]=2.82387 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=3 - Collision 771 projectile=anti_xi_c+ Ekin[MeV]=3674.32 direction=(0.120988,0.933787,0.336755) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.34435 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 772 projectile=anti_xi- Ekin[MeV]=1964.26 direction=(0.200186,0.096268,0.975017) material=G4_Cu - --> #secondaries=11 impactParameter[fm]=5.52485 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 - Collision 773 projectile=omega_b- Ekin[MeV]=11240.4 direction=(0.449722,0.279501,0.84831) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=3.43522 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 774 projectile=anti_omega- Ekin[MeV]=26747.7 direction=(0.351652,0.750963,0.558924) material=G4_Al - --> #secondaries=30 impactParameter[fm]=2.38398 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 775 projectile=anti_omega_c0 Ekin[MeV]=28655 direction=(0.535782,0.638841,0.552105) material=G4_Cu - --> #secondaries=40 impactParameter[fm]=3.4166 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 776 projectile=xi_b- Ekin[MeV]=18331.1 direction=(0.720979,0.144701,0.67768) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.6058 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 777 projectile=anti_Bs0 Ekin[MeV]=15311.4 direction=(0.597753,0.591893,0.540698) material=G4_Cu - --> #secondaries=7 impactParameter[fm]=2.94507 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 778 projectile=Bc+ Ekin[MeV]=3106.58 direction=(0.660925,0.339571,0.66923) material=G4_Fe - --> #secondaries=7 impactParameter[fm]=1.9991 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 779 projectile=anti_hypertriton Ekin[MeV]=24061.9 direction=(0.0613434,0.672929,0.737159) material=G4_Pb - --> #secondaries=75 impactParameter[fm]=6.01805 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 - Collision 780 projectile=anti_doublehyperH4 Ekin[MeV]=19645.4 direction=(0.533455,0.753728,0.383824) material=G4_Al - --> #secondaries=35 impactParameter[fm]=2.7065 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=4 - Collision 781 projectile=pi- Ekin[MeV]=3727.06 direction=(0.477151,0.497017,0.724777) material=G4_W - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 782 projectile=anti_hyperH4 Ekin[MeV]=18642.6 direction=(0.60224,0.160505,0.782014) material=G4_Al - --> #secondaries=17 impactParameter[fm]=4.51685 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 783 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=14549.2 direction=(0.12772,0.315664,0.940236) material=G4_Si - --> #secondaries=14 impactParameter[fm]=3.75188 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=2 - Collision 784 projectile=anti_hypertriton Ekin[MeV]=6033.48 direction=(0.733306,0.620405,0.278136) material=G4_Be - --> #secondaries=16 impactParameter[fm]=1.93398 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 785 projectile=omega- Ekin[MeV]=3089.56 direction=(0.186238,0.73401,0.653104) material=G4_W - --> #secondaries=43 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 786 projectile=neutron Ekin[MeV]=7950.94 direction=(0.481585,0.743464,0.464044) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.93109 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 787 projectile=anti_omega_b- Ekin[MeV]=3351.83 direction=(0.571144,0.159149,0.805274) material=G4_Si - --> #secondaries=4 impactParameter[fm]=4.06867 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 788 projectile=proton Ekin[MeV]=25129.5 direction=(0.101219,0.989629,0.101923) material=G4_Al - --> #secondaries=32 impactParameter[fm]=1.41948 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 789 projectile=xi- Ekin[MeV]=4711.9 direction=(0.224947,0.302082,0.926361) material=G4_Si - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 790 projectile=alpha Ekin[MeV]=13998.4 direction=(0.285771,0.679768,0.675463) material=G4_Si - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 791 projectile=kaon0L Ekin[MeV]=20980.6 direction=(0.592563,0.59051,0.547876) material=G4_W - --> #secondaries=33 impactParameter[fm]=5.48516 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 792 projectile=hypertriton Ekin[MeV]=19454.3 direction=(0.139013,0.821436,0.5531) material=G4_C - --> #secondaries=14 impactParameter[fm]=1.83939 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=5 - Collision 793 projectile=B- Ekin[MeV]=24937.6 direction=(0.671963,0.737436,0.0682242) material=G4_He - --> #secondaries=10 impactParameter[fm]=1.17728 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 794 projectile=anti_He3 Ekin[MeV]=10539.8 direction=(0.325371,0.755677,0.568407) material=G4_Cu - --> #secondaries=53 impactParameter[fm]=2.4288 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=3 - Collision 795 projectile=anti_omega_c0 Ekin[MeV]=16482.8 direction=(0.424931,0.901116,0.0861622) material=G4_Pb - --> #secondaries=68 impactParameter[fm]=3.41683 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 796 projectile=anti_omega_c0 Ekin[MeV]=3883.15 direction=(0.320562,0.0238547,0.946927) material=G4_He - --> #secondaries=4 impactParameter[fm]=3.6383 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 797 projectile=kaon- Ekin[MeV]=3182.43 direction=(0.55551,0.615477,0.559104) material=G4_H - --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 798 projectile=anti_omega_c0 Ekin[MeV]=13552.2 direction=(0.499557,0.865676,0.0323849) material=G4_Si - --> #secondaries=21 impactParameter[fm]=1.29512 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 799 projectile=pi- Ekin[MeV]=21030.3 direction=(0.0518353,0.941778,0.332217) material=G4_Al - --> #secondaries=18 impactParameter[fm]=2.71561 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 800 projectile=kaon0L Ekin[MeV]=23539.6 direction=(0.214994,0.8194,0.531377) material=G4_Ar - --> #secondaries=19 impactParameter[fm]=2.58402 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - List of produced secondaries: - j=0 kaon0S p=(215.194,749.813,573.8191088.77) MeV - j=1 pi+ p=(377.616,1520.52,12692020.99) MeV - j=2 pi- p=(77.5558,326.21,384.714529.067) MeV - j=3 neutron p=(546.801,2949.19,873.0723262.17) MeV - j=4 pi+ p=(591.907,411.134,691.7031008.62) MeV - j=5 pi0 p=(-30.5669,175.764,82.2905238.365) MeV - j=6 kaon- p=(433.425,766.534,396.0521084.44) MeV - j=7 pi- p=(543.762,1127.95,753.9031468.27) MeV - j=8 pi0 p=(1213.21,7247.33,4794.118774.82) MeV - j=9 pi0 p=(-18.3299,550.874,339.277661.155) MeV - j=10 kaon+ p=(1444.37,3520.63,2306.884477.32) MeV - j=11 neutron p=(-263.857,535.364,403.1641183.87) MeV - j=12 proton p=(15.5572,28.2597,242.981969.76) MeV - j=13 proton p=(155.488,30.5498,-87.3057955.556) MeV - j=14 Si31 p=(24.0431,-224.472,-89.724128847.2) MeV - j=15 alpha p=(-193.62,26.7091,-92.0953733.64) MeV - j=16 neutron p=(36.9664,-51.8763,-73.635944.597) MeV - j=17 gamma p=(-2.74091,0.587699,1.58873.22211) MeV - j=18 gamma p=(-0.0576624,0.70947,0.2230910.745951) MeV - Collision 801 projectile=Bc- Ekin[MeV]=24635.6 direction=(0.67162,0.511806,0.535707) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.2248 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 802 projectile=B- Ekin[MeV]=11700.5 direction=(0.28973,0.775661,0.560719) material=G4_Al - --> #secondaries=10 impactParameter[fm]=2.07048 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 803 projectile=Bc+ Ekin[MeV]=29100.8 direction=(0.398189,0.750198,0.527871) material=G4_Pb - --> #secondaries=28 impactParameter[fm]=4.26647 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 804 projectile=pi+ Ekin[MeV]=1740.03 direction=(0.943998,0.303247,0.130037) material=G4_Be - --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 805 projectile=anti_omega_b- Ekin[MeV]=5206.83 direction=(0.0143056,0.36606,0.930481) material=G4_He - --> #secondaries=4 impactParameter[fm]=0.967667 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 806 projectile=sigma+ Ekin[MeV]=20720.9 direction=(0.378762,0.890668,0.251494) material=G4_Pb - --> #secondaries=56 impactParameter[fm]=6.25965 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 - Collision 807 projectile=anti_hypertriton Ekin[MeV]=7053.82 direction=(0.655458,0.239627,0.716208) material=G4_Pb - --> #secondaries=43 impactParameter[fm]=7.61705 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 808 projectile=neutron Ekin[MeV]=13021 direction=(0.225522,0.0416598,0.973347) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.53615 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 809 projectile=pi+ Ekin[MeV]=24324.4 direction=(0.307571,0.35867,0.881337) material=G4_Al - --> #secondaries=15 impactParameter[fm]=3.64216 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 810 projectile=kaon+ Ekin[MeV]=12581.8 direction=(0.0674511,0.280356,0.957523) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=3.32595 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 811 projectile=hyperH4 Ekin[MeV]=15545.7 direction=(0.952482,0.258981,0.160334) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=6.38139 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 812 projectile=anti_hyperH4 Ekin[MeV]=11965.2 direction=(0.591638,0.355779,0.723455) material=G4_Pb - --> #secondaries=44 impactParameter[fm]=7.96965 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 813 projectile=anti_omega_b- Ekin[MeV]=24302.7 direction=(0.771192,0.356093,0.527693) material=G4_Al - --> #secondaries=14 impactParameter[fm]=4.16144 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 814 projectile=triton Ekin[MeV]=25526.2 direction=(0.860637,0.434604,0.265373) material=G4_He - --> #secondaries=14 impactParameter[fm]=1.10904 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=4 - Collision 815 projectile=hypertriton Ekin[MeV]=8804.06 direction=(0.234592,0.480869,0.844826) material=G4_Cu - --> #secondaries=46 impactParameter[fm]=1.39009 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=3 - Collision 816 projectile=anti_alpha Ekin[MeV]=12114.4 direction=(0.503172,0.22076,0.835513) material=G4_W - --> #secondaries=52 impactParameter[fm]=7.14418 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 817 projectile=anti_Bs0 Ekin[MeV]=7187.91 direction=(0.874119,0.466029,0.13687) material=G4_Al - --> #secondaries=7 impactParameter[fm]=0.512144 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 818 projectile=Bc+ Ekin[MeV]=10731.8 direction=(0.435983,0.0783273,0.89654) material=G4_Si - --> #secondaries=7 impactParameter[fm]=2.72033 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 819 projectile=deuteron Ekin[MeV]=4989.15 direction=(0.392751,0.88823,0.238316) material=G4_W - --> #secondaries=49 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 820 projectile=xi- Ekin[MeV]=17681.2 direction=(0.364502,0.612936,0.701034) material=G4_Pb - --> #secondaries=61 impactParameter[fm]=4.33251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=0 - Collision 821 projectile=anti_sigma- Ekin[MeV]=23690.9 direction=(0.737808,0.399085,0.544399) material=G4_W - --> #secondaries=57 impactParameter[fm]=5.24329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 822 projectile=omega_c0 Ekin[MeV]=1500.33 direction=(0.600716,0.543283,0.586502) material=G4_W - --> #secondaries=24 impactParameter[fm]=2.13848 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=0 - Collision 823 projectile=hyperHe5 Ekin[MeV]=25358.1 direction=(0.448218,0.849731,0.277592) material=G4_Al - --> #secondaries=14 impactParameter[fm]=4.9419 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 824 projectile=anti_neutron Ekin[MeV]=7455.68 direction=(0.142201,0.97291,0.182279) material=G4_Al - --> #secondaries=27 impactParameter[fm]=0.748752 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 825 projectile=neutron Ekin[MeV]=1529.99 direction=(0.842328,0.0571549,0.535926) material=G4_Pb - --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 826 projectile=anti_triton Ekin[MeV]=18810.2 direction=(0.346594,0.603185,0.71836) material=G4_C - --> #secondaries=24 impactParameter[fm]=2.05227 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=6 - Collision 827 projectile=doublehyperH4 Ekin[MeV]=23143.5 direction=(0.196367,0.586397,0.785862) material=G4_Si - --> #secondaries=36 impactParameter[fm]=2.3898 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=19 #NNcollisions=10 - Collision 828 projectile=xi- Ekin[MeV]=21874.9 direction=(0.213247,0.929667,0.300407) material=G4_Pb - --> #secondaries=34 impactParameter[fm]=7.40685 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 829 projectile=anti_hyperHe5 Ekin[MeV]=12399 direction=(0.875752,0.199089,0.439798) material=G4_H - --> #secondaries=6 impactParameter[fm]=2.62319 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 830 projectile=lambda Ekin[MeV]=16117.1 direction=(0.504747,0.809649,0.299497) material=G4_W - --> #secondaries=71 impactParameter[fm]=3.18393 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=175 #NNcollisions=7 - Collision 831 projectile=xi- Ekin[MeV]=21378.1 direction=(0.622444,0.129137,0.771937) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=5.75921 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 832 projectile=He3 Ekin[MeV]=25611.6 direction=(0.68539,0.577235,0.443891) material=G4_Be - --> #secondaries=14 impactParameter[fm]=3.0354 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 833 projectile=anti_sigma+ Ekin[MeV]=28445.1 direction=(0.107756,0.944252,0.311088) material=G4_Al - --> #secondaries=17 impactParameter[fm]=3.77782 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 834 projectile=anti_doublehyperH4 Ekin[MeV]=20963 direction=(0.495986,0.417008,0.761645) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.92913 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 835 projectile=anti_sigma- Ekin[MeV]=6575.11 direction=(0.923295,0.343595,0.171666) material=G4_W - --> #secondaries=67 impactParameter[fm]=2.55258 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 836 projectile=xi_c+ Ekin[MeV]=26134.3 direction=(0.292611,0.955082,0.0468752) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.0089 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 837 projectile=hypertriton Ekin[MeV]=29504.8 direction=(0.272058,0.815446,0.510914) material=G4_W - --> #secondaries=117 impactParameter[fm]=3.5897 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=167 #NNcollisions=14 - Collision 838 projectile=anti_alpha Ekin[MeV]=25459.6 direction=(0.978633,0.191056,0.0760003) material=G4_Fe - --> #secondaries=65 impactParameter[fm]=2.77513 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=5 - Collision 839 projectile=B- Ekin[MeV]=29494.2 direction=(0.886654,0.402716,0.227298) material=G4_C - --> #secondaries=6 impactParameter[fm]=2.00275 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 840 projectile=neutron Ekin[MeV]=12934.9 direction=(0.0350852,0.434607,0.899936) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.958774 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 841 projectile=B0 Ekin[MeV]=23354 direction=(0.468592,0.666092,0.580296) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.11373 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 842 projectile=Bc+ Ekin[MeV]=10787.7 direction=(0.736545,0.268614,0.620764) material=G4_Ar - --> #secondaries=6 impactParameter[fm]=2.90008 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 843 projectile=anti_alpha Ekin[MeV]=15031.4 direction=(0.559582,0.533347,0.634358) material=G4_Fe - --> #secondaries=39 impactParameter[fm]=5.46412 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=3 - Collision 844 projectile=xi- Ekin[MeV]=15398.7 direction=(0.723091,0.299763,0.62232) material=G4_Cu - --> #secondaries=25 impactParameter[fm]=4.79025 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 845 projectile=hyperalpha Ekin[MeV]=7816.84 direction=(0.866848,0.475846,0.148812) material=G4_Be - --> #secondaries=14 impactParameter[fm]=2.4069 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=5 #NNcollisions=3 - Collision 846 projectile=anti_D0 Ekin[MeV]=10274.9 direction=(0.18145,0.561263,0.807503) material=G4_Fe - --> #secondaries=25 impactParameter[fm]=1.88988 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 847 projectile=hypertriton Ekin[MeV]=14238.6 direction=(0.31513,0.0926221,0.944518) material=G4_Be - --> #secondaries=11 impactParameter[fm]=3.18285 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 848 projectile=hyperH4 Ekin[MeV]=18211.7 direction=(0.763582,0.61945,0.182278) material=G4_Be - --> #secondaries=11 impactParameter[fm]=4.61773 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 849 projectile=hyperHe5 Ekin[MeV]=11283.5 direction=(0.232955,0.972051,0.0291416) material=G4_H - --> #secondaries=4 impactParameter[fm]=3.65816 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 850 projectile=alpha Ekin[MeV]=22075.2 direction=(0.496855,0.858195,0.128987) material=G4_Al - --> #secondaries=36 impactParameter[fm]=1.68454 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=21 #NNcollisions=5 - Collision 851 projectile=anti_sigma- Ekin[MeV]=16083.1 direction=(0.117425,0.0618383,0.991155) material=G4_C - --> #secondaries=17 impactParameter[fm]=1.32768 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 852 projectile=Bc- Ekin[MeV]=1947.5 direction=(0.212078,0.337454,0.917141) material=G4_Pb - --> #secondaries=27 impactParameter[fm]=5.38537 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=0 - Collision 853 projectile=anti_D0 Ekin[MeV]=10389.2 direction=(0.844645,0.286549,0.452178) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.91293 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 854 projectile=anti_sigma- Ekin[MeV]=20298.1 direction=(0.379742,0.9048,0.1927) material=G4_Al - --> #secondaries=11 impactParameter[fm]=3.14256 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 855 projectile=anti_omega- Ekin[MeV]=24421 direction=(0.43765,0.307431,0.844955) material=G4_C - --> #secondaries=13 impactParameter[fm]=2.83678 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 856 projectile=D+ Ekin[MeV]=18183.9 direction=(0.0391824,0.098883,0.994327) material=G4_Al - --> #secondaries=9 impactParameter[fm]=3.18669 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 857 projectile=hyperH4 Ekin[MeV]=20092.8 direction=(0.710898,0.702549,0.0323834) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=5.3355 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 858 projectile=anti_neutron Ekin[MeV]=29303.7 direction=(0.374486,0.426765,0.823184) material=G4_Al - --> #secondaries=38 impactParameter[fm]=0.955185 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=21 #NNcollisions=6 - Collision 859 projectile=neutron Ekin[MeV]=16024.7 direction=(0.674732,0.655438,0.339319) material=G4_Ar - --> #secondaries=36 impactParameter[fm]=1.14225 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 - Collision 860 projectile=anti_xi_b- Ekin[MeV]=5627.79 direction=(0.319404,0.335949,0.88607) material=G4_Pb - --> #secondaries=26 impactParameter[fm]=3.97518 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 861 projectile=B+ Ekin[MeV]=8777.59 direction=(0.904794,0.30883,0.293209) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=3.01835 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 862 projectile=xi0 Ekin[MeV]=29856.7 direction=(0.554153,0.728616,0.402533) material=G4_Si - --> #secondaries=13 impactParameter[fm]=3.69949 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 863 projectile=anti_xi_c+ Ekin[MeV]=26885.7 direction=(0.715196,0.658803,0.233394) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.55516 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 864 projectile=Bc+ Ekin[MeV]=13952.4 direction=(0.646339,0.589857,0.484061) material=G4_Si - --> #secondaries=10 impactParameter[fm]=2.71122 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 865 projectile=sigma- Ekin[MeV]=3173.42 direction=(0.467494,0.6675,0.579563) material=G4_C - --> #secondaries=16 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 866 projectile=Bs0 Ekin[MeV]=12324.4 direction=(0.443653,0.384718,0.809422) material=G4_Al - --> #secondaries=12 impactParameter[fm]=1.21159 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 867 projectile=anti_hyperalpha Ekin[MeV]=8703.94 direction=(0.587425,0.783913,0.201029) material=G4_Pb - --> #secondaries=14 impactParameter[fm]=8.21642 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 868 projectile=triton Ekin[MeV]=17472.3 direction=(0.588311,0.57989,0.563576) material=G4_W - --> #secondaries=150 impactParameter[fm]=2.29233 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=163 #NNcollisions=7 - Collision 869 projectile=lambda_b Ekin[MeV]=25226.3 direction=(0.787534,0.232052,0.570914) material=G4_Pb - --> #secondaries=48 impactParameter[fm]=6.22918 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=4 - Collision 870 projectile=anti_xi_b0 Ekin[MeV]=2148.95 direction=(0.416929,0.65609,0.629059) material=G4_W - --> #secondaries=38 impactParameter[fm]=2.69983 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=0 - Collision 871 projectile=anti_hyperHe5 Ekin[MeV]=25848.1 direction=(0.204893,0.708607,0.6752) material=G4_Pb - --> #secondaries=135 impactParameter[fm]=2.49461 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=6 - Collision 872 projectile=omega- Ekin[MeV]=13828.2 direction=(0.731975,0.668739,0.130387) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.27951 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 873 projectile=anti_doublehyperH4 Ekin[MeV]=18167.5 direction=(0.412631,0.855805,0.311984) material=G4_W - --> #secondaries=109 impactParameter[fm]=4.7572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=4 - Collision 874 projectile=alpha Ekin[MeV]=1870.41 direction=(0.802855,0.205513,0.559632) material=G4_W - --> #secondaries=27 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 875 projectile=anti_triton Ekin[MeV]=19106.8 direction=(0.577008,0.776921,0.251905) material=G4_C - --> #secondaries=20 impactParameter[fm]=3.56321 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=5 - Collision 876 projectile=triton Ekin[MeV]=13218.2 direction=(0.462118,0.885288,0.0520719) material=G4_Si - --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 877 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=24087.5 direction=(0.101125,0.295084,0.950105) material=G4_C - --> #secondaries=31 impactParameter[fm]=0.852238 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=6 - Collision 878 projectile=anti_omega_b- Ekin[MeV]=17775.5 direction=(0.340063,0.628876,0.699194) material=G4_C - --> #secondaries=8 impactParameter[fm]=0.410665 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 879 projectile=B0 Ekin[MeV]=19575.7 direction=(0.581216,0.0407467,0.812729) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=2.05379 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 880 projectile=triton Ekin[MeV]=29134.4 direction=(0.731319,0.350692,0.584968) material=G4_H - --> #secondaries=7 impactParameter[fm]=2.28692 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 881 projectile=anti_sigma- Ekin[MeV]=11180.2 direction=(0.466723,0.495002,0.7329) material=G4_Si - --> #secondaries=24 impactParameter[fm]=2.05554 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 882 projectile=anti_B0 Ekin[MeV]=16813.7 direction=(0.743454,0.198043,0.638792) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.883311 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 883 projectile=Ds- Ekin[MeV]=13616.3 direction=(0.556857,0.452997,0.696206) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=4.02271 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 884 projectile=anti_omega_b- Ekin[MeV]=17820.4 direction=(0.611503,0.438926,0.658337) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.59489 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 885 projectile=D+ Ekin[MeV]=10945.5 direction=(0.405968,0.481194,0.776944) material=G4_Si - --> #secondaries=8 impactParameter[fm]=3.70291 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 886 projectile=He3 Ekin[MeV]=29417.7 direction=(0.542638,0.406408,0.735103) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=6.08255 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 887 projectile=anti_doublehyperH4 Ekin[MeV]=27585.1 direction=(0.0543119,0.775764,0.628681) material=G4_Ar - --> #secondaries=40 impactParameter[fm]=2.66264 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=5 - Collision 888 projectile=B- Ekin[MeV]=8764.65 direction=(0.30353,0.649921,0.696759) material=G4_Be - --> #secondaries=8 impactParameter[fm]=0.933146 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 889 projectile=deuteron Ekin[MeV]=20708.6 direction=(0.708976,0.145807,0.689995) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=4.11386 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 890 projectile=omega_c0 Ekin[MeV]=22430.4 direction=(0.466983,0.222057,0.855931) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.338493 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 891 projectile=xi- Ekin[MeV]=14089 direction=(0.615952,0.684543,0.389877) material=G4_Si - --> #secondaries=7 impactParameter[fm]=3.72015 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 892 projectile=anti_xi_c+ Ekin[MeV]=20768 direction=(0.623324,0.234661,0.745923) material=G4_H - --> #secondaries=8 impactParameter[fm]=1.8581 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 893 projectile=xi_c+ Ekin[MeV]=3918.06 direction=(0.445384,0.614626,0.651051) material=G4_Al - --> #secondaries=15 impactParameter[fm]=4.11 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 894 projectile=anti_B0 Ekin[MeV]=25825.2 direction=(0.392012,0.880887,0.265264) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=3.10982 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 895 projectile=D+ Ekin[MeV]=14325.3 direction=(0.277594,0.503016,0.818484) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.39663 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 896 projectile=anti_xi0 Ekin[MeV]=20533.5 direction=(0.717224,0.196706,0.668503) material=G4_He - --> #secondaries=6 impactParameter[fm]=3.06791 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 897 projectile=anti_xi0 Ekin[MeV]=7673.82 direction=(0.469761,0.211889,0.856987) material=G4_Al - --> #secondaries=23 impactParameter[fm]=1.52751 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 898 projectile=pi- Ekin[MeV]=8940.52 direction=(0.641466,0.701097,0.311425) material=G4_Al - --> #secondaries=18 impactParameter[fm]=2.58335 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 899 projectile=proton Ekin[MeV]=1677.35 direction=(0.630111,0.625306,0.460383) material=G4_W - --> #secondaries=20 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 900 projectile=kaon0S Ekin[MeV]=29201.9 direction=(0.183962,0.472862,0.861719) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.89804 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - List of produced secondaries: - j=0 pi0 p=(233.427,610.854,1583.791718.79) MeV - j=1 neutron p=(305.303,518.51,172.4111128.97) MeV - j=2 pi+ p=(323.635,752.908,885.4621214.55) MeV - j=3 pi0 p=(2961.26,7543.02,14412.316534.7) MeV - j=4 kaon0S p=(1617.89,4742.77,8574.459943.86) MeV - j=5 deuteron p=(-83.9453,193.937,-40.02251887.9) MeV - j=6 neutron p=(105.276,-320.158,0.773493998.182) MeV - Collision 901 projectile=anti_deuteron Ekin[MeV]=8676.34 direction=(0.701498,0.710334,0.057672) material=G4_W - --> #secondaries=72 impactParameter[fm]=5.33242 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=4 - Collision 902 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=10155.5 direction=(0.436834,0.260181,0.861093) material=G4_Be - --> #secondaries=11 impactParameter[fm]=4.63514 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 903 projectile=anti_deuteron Ekin[MeV]=19910.9 direction=(0.0438368,0.948395,0.314048) material=G4_C - --> #secondaries=17 impactParameter[fm]=2.98817 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=2 - Collision 904 projectile=anti_xi- Ekin[MeV]=19385.3 direction=(0.586187,0.245908,0.771955) material=G4_He - --> #secondaries=14 impactParameter[fm]=3.11532 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 905 projectile=kaon0S Ekin[MeV]=22110.4 direction=(0.683526,0.664008,0.303126) material=G4_C - --> #secondaries=19 impactParameter[fm]=1.3345 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 906 projectile=anti_xi- Ekin[MeV]=12830.1 direction=(0.461548,0.585002,0.666892) material=G4_Pb - --> #secondaries=62 impactParameter[fm]=3.22267 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 907 projectile=anti_xi_b- Ekin[MeV]=23717 direction=(0.977978,0.141959,0.152993) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.71263 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 908 projectile=kaon- Ekin[MeV]=11365.6 direction=(0.721868,0.685024,0.0982318) material=G4_He - --> #secondaries=4 impactParameter[fm]=0.635086 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 909 projectile=doublehyperH4 Ekin[MeV]=13606.3 direction=(0.565091,0.120827,0.816133) material=G4_W - --> #secondaries=88 impactParameter[fm]=5.62399 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=168 #NNcollisions=5 - Collision 910 projectile=xi_c+ Ekin[MeV]=20046.5 direction=(0.801877,0.0925853,0.590272) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.0557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 911 projectile=anti_xi_b- Ekin[MeV]=18699.4 direction=(0.628935,0.656973,0.415726) material=G4_Cu - --> #secondaries=33 impactParameter[fm]=1.96851 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 - Collision 912 projectile=kaon0L Ekin[MeV]=8620.48 direction=(0.632892,0.48406,0.604263) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.529075 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 913 projectile=sigma- Ekin[MeV]=11786.1 direction=(0.775984,0.23553,0.585128) material=G4_Cu - --> #secondaries=13 impactParameter[fm]=4.45251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 914 projectile=anti_hyperHe5 Ekin[MeV]=2055.73 direction=(0.547112,0.784687,0.291435) material=G4_Ar - --> #secondaries=6 impactParameter[fm]=8.78325 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 915 projectile=kaon0S Ekin[MeV]=18010.6 direction=(0.642216,0.296179,0.706991) material=G4_W - --> #secondaries=40 impactParameter[fm]=6.16484 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 916 projectile=anti_D0 Ekin[MeV]=17227.9 direction=(0.389395,0.807508,0.443061) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.863172 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 917 projectile=pi- Ekin[MeV]=9094.84 direction=(0.665117,0.746365,0.0236293) material=G4_C - --> #secondaries=12 impactParameter[fm]=0.508778 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 918 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=3302.68 direction=(0.562883,0.643175,0.519123) material=G4_W - --> #secondaries=57 impactParameter[fm]=8.53512 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=3 - Collision 919 projectile=anti_xi_c0 Ekin[MeV]=16266.2 direction=(0.348448,0.817361,0.458808) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.09743 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 920 projectile=lambda_b Ekin[MeV]=9690.94 direction=(0.66133,0.506651,0.553125) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=5.26899 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 921 projectile=anti_lambda_c+ Ekin[MeV]=13028.3 direction=(0.565157,0.434035,0.701578) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=4.15585 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 922 projectile=Bs0 Ekin[MeV]=4450.3 direction=(0.918651,0.140384,0.369286) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=0.558876 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 923 projectile=Ds- Ekin[MeV]=10115.5 direction=(0.712106,0.361454,0.601877) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.1041 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 924 projectile=kaon0L Ekin[MeV]=2489.61 direction=(0.654584,0.556332,0.511874) material=G4_Fe + j=0 anti_Bs0 p=(1433.66,21470.8,12581.325497.9) MeV + j=1 kaon0L p=(-184.975,1469.9,687.8551707.51) MeV + j=2 pi+ p=(269.925,669.001,432.099852.415) MeV + j=3 pi- p=(821.923,843.903,677.2771365.98) MeV + j=4 neutron p=(-467.601,1445.12,800.1541957.06) MeV + j=5 pi0 p=(-564.283,1106.9,544.4681363.2) MeV + j=6 pi- p=(-341.121,371.079,-252.114580.607) MeV + j=7 deuteron p=(-26.0762,316.261,351.6381934.5) MeV + j=8 proton p=(-158.052,156.319,52.3466965.666) MeV + Collision 1 projectile=hyperHe5 Ekin[MeV]=7991.23 direction=(0.820884,0.485262,0.301116) material=G4_Pb + --> #secondaries=11 impactParameter[fm]=9.34828 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 2 projectile=kaon0L Ekin[MeV]=18455.9 direction=(0.742175,0.670083,0.0128418) material=G4_C + --> #secondaries=7 impactParameter[fm]=0.700884 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 3 projectile=lambda_b Ekin[MeV]=12775.2 direction=(0.820372,0.472066,0.322712) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.249676 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 4 projectile=anti_lambda Ekin[MeV]=9732.34 direction=(0.45533,0.824767,0.335311) material=G4_Si + --> #secondaries=18 impactParameter[fm]=3.66127 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 5 projectile=xi_c+ Ekin[MeV]=4156.42 direction=(0.882105,0.0490322,0.468495) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.26822 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 6 projectile=triton Ekin[MeV]=5321.89 direction=(0.0931994,0.622793,0.776816) material=G4_Be --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 925 projectile=D0 Ekin[MeV]=13306.5 direction=(0.202336,0.945546,0.254956) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=1.36734 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 926 projectile=anti_lambda Ekin[MeV]=23837.3 direction=(0.470807,0.0546898,0.880539) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=4.30145 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 927 projectile=xi0 Ekin[MeV]=15184.1 direction=(0.659418,0.461055,0.593798) material=G4_Cu - --> #secondaries=35 impactParameter[fm]=3.71343 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=4 - Collision 928 projectile=anti_doublehyperH4 Ekin[MeV]=19724.7 direction=(0.558145,0.828868,0.0380929) material=G4_Si - --> #secondaries=36 impactParameter[fm]=2.71125 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=6 - Collision 929 projectile=kaon- Ekin[MeV]=7620.28 direction=(0.437182,0.197434,0.877435) material=G4_W - --> #secondaries=40 impactParameter[fm]=6.04816 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 930 projectile=anti_sigma- Ekin[MeV]=9581.17 direction=(0.295792,0.746281,0.596299) material=G4_W - --> #secondaries=77 impactParameter[fm]=3.60915 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 - Collision 931 projectile=B- Ekin[MeV]=8715.68 direction=(0.800043,0.5701,0.186863) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=3.32274 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 932 projectile=Bc- Ekin[MeV]=15074.7 direction=(0.695819,0.567908,0.439678) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=3.02215 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 933 projectile=anti_xi0 Ekin[MeV]=17696.7 direction=(0.741129,0.660754,0.118876) material=G4_C - --> #secondaries=12 impactParameter[fm]=3.34711 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 934 projectile=kaon+ Ekin[MeV]=29684.7 direction=(0.159743,0.983696,0.082615) material=G4_W - --> #secondaries=63 impactParameter[fm]=5.12886 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=3 - Collision 935 projectile=kaon0L Ekin[MeV]=27632.8 direction=(0.61188,0.536455,0.581222) material=G4_Al - --> #secondaries=18 impactParameter[fm]=0.91676 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 936 projectile=anti_xi_b0 Ekin[MeV]=10273.2 direction=(0.289582,0.920724,0.26155) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=4.83184 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 937 projectile=omega_b- Ekin[MeV]=8136.36 direction=(0.660497,0.0295331,0.750248) material=G4_C - --> #secondaries=7 impactParameter[fm]=1.92204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 938 projectile=hypertriton Ekin[MeV]=15136.9 direction=(0.829672,0.423781,0.363392) material=G4_Pb - --> #secondaries=59 impactParameter[fm]=6.33521 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=203 #NNcollisions=5 - Collision 939 projectile=anti_hyperalpha Ekin[MeV]=23883.4 direction=(0.726864,0.246456,0.641037) material=G4_W - --> #secondaries=172 impactParameter[fm]=1.2309 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=8 - Collision 940 projectile=omega_c0 Ekin[MeV]=12178.9 direction=(0.247937,0.875072,0.415663) material=G4_Al - --> #secondaries=6 impactParameter[fm]=3.95118 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 941 projectile=anti_lambda_c+ Ekin[MeV]=7258.95 direction=(0.96429,0.179934,0.194339) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=4.95495 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 942 projectile=anti_omega_c0 Ekin[MeV]=27992.4 direction=(0.327925,0.80103,0.500815) material=G4_Al - --> #secondaries=8 impactParameter[fm]=5.51394 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 943 projectile=anti_proton Ekin[MeV]=6790.81 direction=(0.767745,0.640731,0.00553395) material=G4_He - --> #secondaries=10 impactParameter[fm]=1.69687 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 944 projectile=D0 Ekin[MeV]=26838.9 direction=(0.702788,0.649969,0.289186) material=G4_Fe - --> #secondaries=32 impactParameter[fm]=2.77318 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 945 projectile=D0 Ekin[MeV]=16032.7 direction=(0.611922,0.752217,0.24438) material=G4_Si - --> #secondaries=24 impactParameter[fm]=1.88178 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 946 projectile=B0 Ekin[MeV]=18910 direction=(0.129701,0.90331,0.408913) material=G4_W - --> #secondaries=43 impactParameter[fm]=3.34294 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=3 - Collision 947 projectile=Bc- Ekin[MeV]=13334.9 direction=(0.489623,0.0740467,0.868784) material=G4_W - --> #secondaries=15 impactParameter[fm]=6.71021 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 948 projectile=kaon0S Ekin[MeV]=18589.6 direction=(0.374116,0.575515,0.7272) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.07586 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 949 projectile=anti_omega- Ekin[MeV]=29321.3 direction=(0.335513,0.672442,0.659738) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=4.15007 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 950 projectile=kaon0L Ekin[MeV]=29903.1 direction=(0.619417,0.741148,0.258885) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=2.70392 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 951 projectile=anti_xi_b- Ekin[MeV]=13704.1 direction=(0.920481,0.318496,0.226441) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.907374 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 952 projectile=alpha Ekin[MeV]=13065 direction=(0.691655,0.263401,0.672483) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.38278 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 953 projectile=B0 Ekin[MeV]=15415.3 direction=(0.785959,0.592508,0.176644) material=G4_W - --> #secondaries=53 impactParameter[fm]=2.28389 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 954 projectile=anti_proton Ekin[MeV]=4192.18 direction=(0.583582,0.640142,0.49965) material=G4_W - --> #secondaries=45 impactParameter[fm]=6.30652 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=2 - Collision 955 projectile=B- Ekin[MeV]=12655.9 direction=(0.637891,0.594185,0.489938) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=3.25064 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 956 projectile=pi- Ekin[MeV]=25933.5 direction=(0.552073,0.761516,0.339571) material=G4_C - --> #secondaries=6 impactParameter[fm]=2.31779 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 957 projectile=kaon+ Ekin[MeV]=17991.4 direction=(0.787354,0.10846,0.606886) material=G4_He - --> #secondaries=7 impactParameter[fm]=1.67078 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 958 projectile=lambda Ekin[MeV]=1737.87 direction=(0.171507,0.724441,0.667661) material=G4_Al - --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 959 projectile=anti_lambda_b Ekin[MeV]=9817.97 direction=(0.559054,0.124352,0.819753) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=6.03748 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 960 projectile=anti_lambda Ekin[MeV]=21756 direction=(0.657095,0.67935,0.326665) material=G4_Cu - --> #secondaries=46 impactParameter[fm]=2.63521 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=4 - Collision 961 projectile=B0 Ekin[MeV]=15825 direction=(0.487784,0.792661,0.365726) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=4.86263 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 962 projectile=anti_xi_c+ Ekin[MeV]=1496.85 direction=(0.358233,0.629896,0.68913) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.4814 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 963 projectile=sigma- Ekin[MeV]=17174.9 direction=(0.402022,0.141404,0.904645) material=G4_W - --> #secondaries=42 impactParameter[fm]=5.02451 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 964 projectile=omega_b- Ekin[MeV]=1737.7 direction=(0.3864,0.526623,0.757207) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=4.85891 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 - Collision 965 projectile=doublehyperH4 Ekin[MeV]=14738 direction=(0.30948,0.727997,0.611754) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.57997 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 966 projectile=Ds+ Ekin[MeV]=18128 direction=(0.0399891,0.72425,0.688376) material=G4_Si - --> #secondaries=22 impactParameter[fm]=1.24573 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 967 projectile=anti_hypertriton Ekin[MeV]=27724.7 direction=(0.966724,0.03052,0.253993) material=G4_Si - --> #secondaries=37 impactParameter[fm]=2.40988 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 968 projectile=anti_xi_c+ Ekin[MeV]=10853.2 direction=(0.594111,0.373512,0.712405) material=G4_W - --> #secondaries=28 impactParameter[fm]=6.38622 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=0 - Collision 969 projectile=anti_lambda_c+ Ekin[MeV]=15667.5 direction=(0.817782,0.573786,0.044741) material=G4_Fe - --> #secondaries=49 impactParameter[fm]=1.11965 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 - Collision 970 projectile=omega- Ekin[MeV]=23400.8 direction=(0.785168,0.227002,0.576178) material=G4_He - --> #secondaries=10 impactParameter[fm]=0.411971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 971 projectile=anti_xi_c0 Ekin[MeV]=6083.68 direction=(0.123751,0.109044,0.986304) material=G4_Be - --> #secondaries=12 impactParameter[fm]=0.523952 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=5 #NNcollisions=3 - Collision 972 projectile=anti_alpha Ekin[MeV]=4841.92 direction=(0.701261,0.710367,0.060101) material=G4_C - --> #secondaries=12 impactParameter[fm]=3.33987 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=2 - Collision 973 projectile=doublehyperH4 Ekin[MeV]=27508.1 direction=(0.829576,0.0272987,0.557725) material=G4_Be - --> #secondaries=8 impactParameter[fm]=5.38255 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 974 projectile=lambda_c+ Ekin[MeV]=21588.4 direction=(0.271967,0.766949,0.581225) material=G4_He - --> #secondaries=14 impactParameter[fm]=1.08953 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 975 projectile=Bc+ Ekin[MeV]=8905.82 direction=(0.538505,0.809534,0.233811) material=G4_W - --> #secondaries=12 impactParameter[fm]=7.22161 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 976 projectile=lambda Ekin[MeV]=19968.6 direction=(0.047135,0.141182,0.988861) material=G4_Fe - --> #secondaries=36 impactParameter[fm]=2.5289 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=3 - Collision 977 projectile=anti_lambda_c+ Ekin[MeV]=11111.6 direction=(0.686636,0.539445,0.487371) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=2.33025 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 978 projectile=xi_b- Ekin[MeV]=16573.2 direction=(0.710636,0.403809,0.576138) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.656692 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 979 projectile=kaon- Ekin[MeV]=15294.5 direction=(0.342247,0.436496,0.832069) material=G4_He - --> #secondaries=10 impactParameter[fm]=1.37372 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 980 projectile=kaon0L Ekin[MeV]=2478.38 direction=(0.757346,0.492469,0.428837) material=G4_Ar - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 981 projectile=anti_omega_b- Ekin[MeV]=16367.3 direction=(0.840342,0.0205432,0.541667) material=G4_Cu - --> #secondaries=17 impactParameter[fm]=4.68507 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 982 projectile=kaon+ Ekin[MeV]=2364.33 direction=(0.594047,0.5114,0.620949) material=G4_Al - --> #secondaries=21 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 983 projectile=anti_Bs0 Ekin[MeV]=18244.5 direction=(0.308175,0.685443,0.659694) material=G4_Ar - --> #secondaries=18 impactParameter[fm]=1.04653 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=1 - Collision 984 projectile=B+ Ekin[MeV]=17754.5 direction=(0.276356,0.567923,0.7753) material=G4_Cu - --> #secondaries=8 impactParameter[fm]=4.58911 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 985 projectile=lambda_c+ Ekin[MeV]=28169.9 direction=(0.320825,0.284489,0.903403) material=G4_Be - --> #secondaries=9 impactParameter[fm]=2.83327 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 986 projectile=B0 Ekin[MeV]=12795.1 direction=(0.308761,0.660734,0.684177) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.150089 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 987 projectile=B+ Ekin[MeV]=25400 direction=(0.829483,0.219733,0.513494) material=G4_Al - --> #secondaries=15 impactParameter[fm]=2.7381 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 988 projectile=B0 Ekin[MeV]=28578.1 direction=(0.111593,0.248856,0.96209) material=G4_He - --> #secondaries=22 impactParameter[fm]=2.09376 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 989 projectile=kaon+ Ekin[MeV]=25860.7 direction=(0.0368115,0.0698927,0.996875) material=G4_W - --> #secondaries=43 impactParameter[fm]=6.30261 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 990 projectile=xi_c+ Ekin[MeV]=17243.6 direction=(0.450854,0.751548,0.481567) material=G4_W - --> #secondaries=30 impactParameter[fm]=5.48609 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 991 projectile=hyperHe5 Ekin[MeV]=11957 direction=(0.679785,0.373467,0.631201) material=G4_Pb - --> #secondaries=91 impactParameter[fm]=5.88578 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=193 #NNcollisions=2 - Collision 992 projectile=doublehyperdoubleneutron Ekin[MeV]=19856.4 direction=(0.849365,0.512002,0.128189) material=G4_Si - --> #secondaries=31 impactParameter[fm]=2.86963 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 993 projectile=D+ Ekin[MeV]=7907.55 direction=(0.714881,0.683544,0.147353) material=G4_Pb - --> #secondaries=41 impactParameter[fm]=6.51021 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 994 projectile=anti_doublehyperH4 Ekin[MeV]=23554 direction=(0.58119,0.429989,0.690889) material=G4_C - --> #secondaries=35 impactParameter[fm]=1.97886 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=5 - Collision 995 projectile=anti_xi_c+ Ekin[MeV]=13029.7 direction=(0.287739,0.830038,0.477749) material=G4_Be - --> #secondaries=10 impactParameter[fm]=2.6007 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 996 projectile=anti_hyperalpha Ekin[MeV]=25053.1 direction=(0.288578,0.72215,0.628668) material=G4_Cu - --> #secondaries=88 impactParameter[fm]=2.56703 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=5 - Collision 997 projectile=kaon- Ekin[MeV]=15043.4 direction=(0.023264,0.256513,0.966261) material=G4_Al - --> #secondaries=22 impactParameter[fm]=2.13746 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 998 projectile=D- Ekin[MeV]=24566.9 direction=(0.214404,0.929345,0.30058) material=G4_He - --> #secondaries=10 impactParameter[fm]=0.686373 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 999 projectile=anti_xi0 Ekin[MeV]=6472.27 direction=(0.548434,0.787717,0.280574) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.10439 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 7 projectile=anti_He3 Ekin[MeV]=21489.5 direction=(0.549126,0.801363,0.23723) material=G4_Cu + --> #secondaries=26 impactParameter[fm]=5.3022 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=62 #NNcollisions=2 + Collision 8 projectile=sigma- Ekin[MeV]=3606.25 direction=(0.363455,0.81645,0.448676) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 9 projectile=proton Ekin[MeV]=11735.1 direction=(0.547557,0.679563,0.488236) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=4.80958 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 10 projectile=anti_xi0 Ekin[MeV]=13459.1 direction=(0.635545,0.39098,0.665746) material=G4_W + --> #secondaries=64 impactParameter[fm]=3.62202 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 + Collision 11 projectile=omega_b- Ekin[MeV]=2854.98 direction=(0.422966,0.414487,0.805792) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.18987 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 12 projectile=anti_lambda Ekin[MeV]=29419.2 direction=(0.00145228,0.280563,0.959835) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=4.51261 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=1 + Collision 13 projectile=xi_c0 Ekin[MeV]=28250.1 direction=(0.460834,0.611207,0.643473) material=G4_Be + --> #secondaries=14 impactParameter[fm]=0.849697 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 14 projectile=xi0 Ekin[MeV]=7079.84 direction=(0.560078,0.639659,0.526449) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.42417 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 15 projectile=anti_B0 Ekin[MeV]=9638.93 direction=(0.646029,0.71919,0.255759) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.40839 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 16 projectile=alpha Ekin[MeV]=5072.94 direction=(0.0831396,0.621124,0.77929) material=G4_C + --> #secondaries=16 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 17 projectile=anti_neutron Ekin[MeV]=9270.62 direction=(0.822013,0.539849,0.181268) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.91421 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 18 projectile=alpha Ekin[MeV]=5662.19 direction=(0.804108,0.29795,0.514428) material=G4_H + --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 19 projectile=D0 Ekin[MeV]=12360.4 direction=(0.0162314,0.655115,0.755355) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=1.94459 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 20 projectile=alpha Ekin[MeV]=22347.1 direction=(0.810535,0.488931,0.322458) material=G4_Ar + --> #secondaries=46 impactParameter[fm]=3.95639 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=5 + Collision 21 projectile=B- Ekin[MeV]=27030.8 direction=(0.501123,0.748484,0.434336) material=G4_W + --> #secondaries=55 impactParameter[fm]=2.65856 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=1 + Collision 22 projectile=doublehyperH4 Ekin[MeV]=20714.4 direction=(0.521519,0.839011,0.155172) material=G4_Cu + --> #secondaries=74 impactParameter[fm]=1.44311 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=49 #NNcollisions=11 + Collision 23 projectile=omega_c0 Ekin[MeV]=12755.8 direction=(0.3728,0.0839875,0.924103) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.11414 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 24 projectile=anti_He3 Ekin[MeV]=11898.1 direction=(0.734302,0.532064,0.421554) material=G4_He + --> #secondaries=12 impactParameter[fm]=2.36751 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 25 projectile=anti_lambda Ekin[MeV]=8870.23 direction=(0.60398,0.384873,0.697911) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.02794 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 + Collision 26 projectile=Ds+ Ekin[MeV]=9240.8 direction=(0.0620328,0.727825,0.682951) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=2.76244 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 27 projectile=anti_lambda_b Ekin[MeV]=13056.6 direction=(0.537961,0.840207,0.0681843) material=G4_C + --> #secondaries=18 impactParameter[fm]=0.893901 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=3 + Collision 28 projectile=anti_xi_b0 Ekin[MeV]=24384.5 direction=(0.409543,0.00932496,0.912243) material=G4_Cu + --> #secondaries=48 impactParameter[fm]=2.46419 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=3 + Collision 29 projectile=xi0 Ekin[MeV]=21363.3 direction=(0.39271,0.695926,0.60122) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.55079 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 30 projectile=anti_Bs0 Ekin[MeV]=13502.6 direction=(0.502259,0.468011,0.727119) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.736005 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 31 projectile=D- Ekin[MeV]=27295.9 direction=(0.249385,0.587574,0.769781) material=G4_Ar + --> #secondaries=6 impactParameter[fm]=1.56252 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 32 projectile=anti_xi- Ekin[MeV]=13620.2 direction=(0.259894,0.154704,0.953164) material=G4_Si + --> #secondaries=23 impactParameter[fm]=4.3181 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 33 projectile=sigma- Ekin[MeV]=29201.7 direction=(0.0929799,0.944057,0.316402) material=G4_C + --> #secondaries=20 impactParameter[fm]=1.68833 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 34 projectile=anti_omega_c0 Ekin[MeV]=10375.3 direction=(0.726458,0.379501,0.572921) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=4.5595 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 35 projectile=hyperH4 Ekin[MeV]=20805.6 direction=(0.43484,0.375346,0.818554) material=G4_Be + --> #secondaries=20 impactParameter[fm]=2.87204 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=3 + Collision 36 projectile=sigma- Ekin[MeV]=19699.2 direction=(0.400906,0.578293,0.710529) material=G4_Be + --> #secondaries=6 impactParameter[fm]=1.30165 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 37 projectile=kaon0S Ekin[MeV]=16170.5 direction=(0.845652,0.284053,0.451871) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=5.67903 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 38 projectile=xi_b- Ekin[MeV]=16545.5 direction=(0.507312,0.427676,0.748149) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=4.85606 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 39 projectile=xi_c0 Ekin[MeV]=9701.86 direction=(0.282083,0.263496,0.922496) material=G4_Al + --> #secondaries=15 impactParameter[fm]=2.57022 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 40 projectile=anti_sigma- Ekin[MeV]=9476.29 direction=(0.535928,0.0452557,0.84305) material=G4_H + --> #secondaries=10 impactParameter[fm]=0.686591 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 41 projectile=omega_b- Ekin[MeV]=27975.8 direction=(0.128626,0.494774,0.85945) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=1.54322 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 42 projectile=anti_triton Ekin[MeV]=8003.98 direction=(0.660878,0.656482,0.363692) material=G4_W + --> #secondaries=20 impactParameter[fm]=8.89074 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=182 #NNcollisions=0 + Collision 43 projectile=D0 Ekin[MeV]=18506.9 direction=(0.786393,0.587234,0.191683) material=G4_C + --> #secondaries=12 impactParameter[fm]=2.49781 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 44 projectile=Ds+ Ekin[MeV]=6339.85 direction=(0.643543,0.133124,0.753744) material=G4_Al + --> #secondaries=8 impactParameter[fm]=2.03058 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 45 projectile=anti_lambda_c+ Ekin[MeV]=19765.4 direction=(0.463392,0.470723,0.750791) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.31007 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 46 projectile=xi- Ekin[MeV]=4258.62 direction=(0.138448,0.207859,0.968311) material=G4_Al + --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 47 projectile=neutron Ekin[MeV]=15544.2 direction=(0.709809,0.372771,0.597673) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.725293 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 48 projectile=anti_doublehyperH4 Ekin[MeV]=9167.63 direction=(0.698518,0.429614,0.572281) material=G4_Pb + --> #secondaries=102 impactParameter[fm]=4.77232 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 49 projectile=anti_neutron Ekin[MeV]=23507.5 direction=(0.437876,0.381206,0.814215) material=G4_W + --> #secondaries=77 impactParameter[fm]=3.42507 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=186 #NNcollisions=1 + Collision 50 projectile=anti_deuteron Ekin[MeV]=5942.4 direction=(0.382117,0.760688,0.524729) material=G4_Al + --> #secondaries=17 impactParameter[fm]=5.4403 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 51 projectile=Bc+ Ekin[MeV]=5379.18 direction=(0.776046,0.551317,0.306273) material=G4_Be + --> #secondaries=7 impactParameter[fm]=1.45035 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 52 projectile=anti_omega_c0 Ekin[MeV]=2121.83 direction=(0.861134,0.316822,0.397583) material=G4_Pb + --> #secondaries=19 impactParameter[fm]=0.875599 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=1 + Collision 53 projectile=kaon0L Ekin[MeV]=27487.6 direction=(0.642044,0.614457,0.4585) material=G4_Al + --> #secondaries=19 impactParameter[fm]=2.93823 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 54 projectile=doublehyperH4 Ekin[MeV]=21482.3 direction=(0.755043,0.355899,0.550677) material=G4_Ar + --> #secondaries=18 impactParameter[fm]=5.7411 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 55 projectile=sigma+ Ekin[MeV]=16084.2 direction=(0.299674,0.740898,0.601054) material=G4_He + --> #secondaries=9 impactParameter[fm]=2.48787 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 56 projectile=D0 Ekin[MeV]=28704.6 direction=(0.266576,0.738458,0.619368) material=G4_C + --> #secondaries=14 impactParameter[fm]=1.45335 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 57 projectile=hyperH4 Ekin[MeV]=19721.9 direction=(0.52898,0.593929,0.606159) material=G4_Cu + --> #secondaries=72 impactParameter[fm]=2.81715 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=6 + Collision 58 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=29381.2 direction=(0.558783,0.453291,0.69447) material=G4_Cu + --> #secondaries=56 impactParameter[fm]=3.90921 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=4 + Collision 59 projectile=Bc+ Ekin[MeV]=22861.4 direction=(0.0631458,0.542251,0.83784) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.29384 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 60 projectile=B0 Ekin[MeV]=19469 direction=(0.802393,0.197548,0.563153) material=G4_Al + --> #secondaries=8 impactParameter[fm]=4.30408 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 61 projectile=anti_deuteron Ekin[MeV]=18190.9 direction=(0.986136,0.0813671,0.144622) material=G4_He + --> #secondaries=9 impactParameter[fm]=3.40778 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 62 projectile=D- Ekin[MeV]=21928.3 direction=(0.634536,0.68389,0.360082) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.43125 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 63 projectile=Bc- Ekin[MeV]=20090.1 direction=(0.00981756,0.728712,0.68475) material=G4_Ar + --> #secondaries=7 impactParameter[fm]=1.56086 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 64 projectile=anti_sigma+ Ekin[MeV]=2211.35 direction=(0.747396,0.605285,0.273913) material=G4_Be + --> #secondaries=14 impactParameter[fm]=2.28701 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 65 projectile=anti_hyperHe5 Ekin[MeV]=2307.08 direction=(0.941129,0.337935,0.00876566) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=6.34626 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 66 projectile=anti_xi_c+ Ekin[MeV]=21750.2 direction=(0.0481984,0.581603,0.812044) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.93712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=2 + Collision 67 projectile=deuteron Ekin[MeV]=20236.2 direction=(0.174264,0.44354,0.87915) material=G4_Si + --> #secondaries=17 impactParameter[fm]=3.27583 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 68 projectile=anti_omega_c0 Ekin[MeV]=16260.2 direction=(0.643302,0.637319,0.424249) material=G4_Fe + --> #secondaries=50 impactParameter[fm]=1.91405 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 69 projectile=anti_xi- Ekin[MeV]=6164.12 direction=(0.235755,0.562252,0.792649) material=G4_Ar + --> #secondaries=35 impactParameter[fm]=0.333294 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 70 projectile=Ds+ Ekin[MeV]=21981.7 direction=(0.69019,0.0855138,0.718558) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=3.56409 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 71 projectile=anti_omega- Ekin[MeV]=11528.3 direction=(0.370607,0.763353,0.529096) material=G4_C + --> #secondaries=14 impactParameter[fm]=0.550251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 72 projectile=xi_b0 Ekin[MeV]=26535.8 direction=(0.901439,0.367911,0.228141) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.391764 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 73 projectile=anti_proton Ekin[MeV]=18911 direction=(0.0544701,0.641417,0.765256) material=G4_Pb + --> #secondaries=57 impactParameter[fm]=5.56254 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=2 + Collision 74 projectile=anti_alpha Ekin[MeV]=22713.6 direction=(0.165977,0.985969,0.017801) material=G4_Si + --> #secondaries=12 impactParameter[fm]=6.52454 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 75 projectile=anti_Bs0 Ekin[MeV]=21771.9 direction=(0.205498,0.0105666,0.978601) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=1.66316 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 76 projectile=proton Ekin[MeV]=20176 direction=(0.25928,0.42117,0.869131) material=G4_H + --> #secondaries=7 impactParameter[fm]=0.618694 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 77 projectile=xi_c+ Ekin[MeV]=27260.3 direction=(0.308125,0.497076,0.811156) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.10189 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 78 projectile=anti_neutron Ekin[MeV]=16800.6 direction=(0.542442,0.268932,0.795885) material=G4_C + --> #secondaries=6 impactParameter[fm]=2.60388 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 79 projectile=anti_xi_b- Ekin[MeV]=27160.3 direction=(0.674078,0.696961,0.244671) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.78587 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 80 projectile=anti_xi0 Ekin[MeV]=22102.8 direction=(0.0859301,0.831814,0.548362) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.77314 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 81 projectile=xi0 Ekin[MeV]=8331.24 direction=(0.688285,0.524791,0.500856) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.90866 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 82 projectile=deuteron Ekin[MeV]=27479.3 direction=(0.500029,0.656458,0.56483) material=G4_Al + --> #secondaries=29 impactParameter[fm]=1.77761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 83 projectile=xi_b0 Ekin[MeV]=15694.7 direction=(0.349983,0.857249,0.377671) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.13759 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 84 projectile=anti_alpha Ekin[MeV]=29031 direction=(0.043216,0.889298,0.455282) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=5.97848 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=56 #NNcollisions=1 + Collision 85 projectile=B+ Ekin[MeV]=10705.2 direction=(0.223214,0.73507,0.640193) material=G4_C + --> #secondaries=9 impactParameter[fm]=1.62364 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=0 + Collision 86 projectile=xi- Ekin[MeV]=6303.93 direction=(0.448787,0.633198,0.630596) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=3.01437 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 87 projectile=Bc- Ekin[MeV]=3345.51 direction=(0.393305,0.685244,0.612986) material=G4_Si + --> #secondaries=7 impactParameter[fm]=1.26279 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 88 projectile=triton Ekin[MeV]=18858.6 direction=(0.677732,0.709658,0.192523) material=G4_Be + --> #secondaries=18 impactParameter[fm]=2.33447 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=2 + Collision 89 projectile=pi+ Ekin[MeV]=25928 direction=(0.292708,0.943549,0.155041) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=3.21294 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=4 + Collision 90 projectile=anti_doublehyperH4 Ekin[MeV]=16258.6 direction=(0.786441,0.425322,0.447896) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.96009 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 91 projectile=omega- Ekin[MeV]=5280.31 direction=(0.834972,0.309645,0.454908) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.529161 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 92 projectile=doublehyperH4 Ekin[MeV]=18953.7 direction=(0.025382,0.670399,0.741567) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=5.07293 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=54 #NNcollisions=3 + Collision 93 projectile=alpha Ekin[MeV]=18583.6 direction=(0.166566,0.904488,0.392629) material=G4_W + --> #secondaries=66 impactParameter[fm]=6.87734 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=176 #NNcollisions=3 + Collision 94 projectile=anti_D0 Ekin[MeV]=3554.98 direction=(0.652687,0.705282,0.276728) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=4.21628 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 95 projectile=anti_proton Ekin[MeV]=11825.2 direction=(0.658575,0.122651,0.742452) material=G4_Al + --> #secondaries=12 impactParameter[fm]=5.75201 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 96 projectile=doublehyperH4 Ekin[MeV]=1932.45 direction=(0.994867,0.074288,0.0687106) material=G4_W + --> #secondaries=43 impactParameter[fm]=3.8622 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=174 #NNcollisions=0 + Collision 97 projectile=kaon0L Ekin[MeV]=20941.9 direction=(0.624145,0.428235,0.653496) material=G4_Si + --> #secondaries=9 impactParameter[fm]=2.03361 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 98 projectile=omega_b- Ekin[MeV]=2248.03 direction=(0.484679,0.354635,0.799575) material=G4_Fe + --> #secondaries=7 impactParameter[fm]=3.42379 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 99 projectile=He3 Ekin[MeV]=20718.4 direction=(0.0315616,0.115035,0.99286) material=G4_He + --> #secondaries=10 impactParameter[fm]=2.15285 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 100 projectile=anti_xi0 Ekin[MeV]=8390.71 direction=(0.875336,0.39708,0.27589) material=G4_Si + --> #secondaries=31 impactParameter[fm]=0.640193 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 + List of produced secondaries: + j=0 proton p=(809.02,-251.164,220.6681283.22) MeV + j=1 pi- p=(317.591,133.2,140.053397.116) MeV + j=2 pi+ p=(220.768,146.736,-152.874336.334) MeV + j=3 pi0 p=(492.483,157.169,18.2027534.595) MeV + j=4 neutron p=(745.091,322.513,554.4931359.93) MeV + j=5 pi+ p=(353.24,523.176,308.87716.499) MeV + j=6 neutron p=(30.1822,-122.959,193.485967.6) MeV + j=7 pi- p=(1024.66,903.936,576.551489.6) MeV + j=8 kaon+ p=(1847.45,742.583,1084.462320.4) MeV + j=9 pi0 p=(120.643,81.2202,-283.083345.697) MeV + j=10 kaon0S p=(351.549,-143.595,143.267642.146) MeV + j=11 pi- p=(352.793,-21.621,-9.96954380.144) MeV + j=12 pi+ p=(-252.004,-183.748,253.078425.203) MeV + j=13 pi- p=(49.0962,320.792,-29.9256354.533) MeV + j=14 neutron p=(1325.66,575.945,-159.6391731.29) MeV + j=15 alpha p=(-733.55,458.013,644.133880.22) MeV + j=16 neutron p=(-85.9479,-130.756,-244.854983.474) MeV + j=17 He3 p=(215.442,-65.7524,-24.46412817.52) MeV + j=18 proton p=(244.015,110.92,-213.612998.915) MeV + j=19 proton p=(362.041,-11.444,116.291012.46) MeV + j=20 proton p=(-24.5891,154.234,-179.032967.884) MeV + j=21 proton p=(-3.12062,-281.657,-56.579981.273) MeV + j=22 proton p=(58.9346,178.164,124.908964.973) MeV + j=23 deuteron p=(87.7514,-218.191,189.9821899.82) MeV + j=24 proton p=(460.014,31.89,-60.53591047.21) MeV + j=25 proton p=(15.7727,313.716,-75.7508992.35) MeV + j=26 deuteron p=(67.7246,239.16,-235.2691906.58) MeV + j=27 neutron p=(1.24985,151.95,114.401958.625) MeV + j=28 neutron p=(26.8991,-161.097,107.232959.665) MeV + j=29 neutron p=(0.386244,-85.7371,219.517968.67) MeV + j=30 neutron p=(-63.9951,-49.2688,-631.0311134.68) MeV + Collision 101 projectile=deuteron Ekin[MeV]=5939.94 direction=(0.596654,0.547644,0.586592) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 102 projectile=anti_omega_b- Ekin[MeV]=4153.95 direction=(0.405278,0.881115,0.243693) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.95333 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 103 projectile=Bc- Ekin[MeV]=1497.07 direction=(0.5316,0.547121,0.646575) material=G4_W + --> #secondaries=14 impactParameter[fm]=3.12298 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 104 projectile=proton Ekin[MeV]=11685.2 direction=(0.975335,0.0913508,0.200939) material=G4_W + --> #secondaries=18 impactParameter[fm]=8.5118 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 105 projectile=anti_sigma+ Ekin[MeV]=5751.97 direction=(0.546514,0.277668,0.790078) material=G4_W + --> #secondaries=38 impactParameter[fm]=6.46901 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 106 projectile=anti_deuteron Ekin[MeV]=26987.4 direction=(0.426161,0.124991,0.895971) material=G4_C + --> #secondaries=13 impactParameter[fm]=3.14988 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 107 projectile=xi_b0 Ekin[MeV]=25958 direction=(0.936855,0.275473,0.215448) material=G4_Cu + --> #secondaries=40 impactParameter[fm]=1.29392 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 + Collision 108 projectile=anti_xi_c+ Ekin[MeV]=24481.7 direction=(0.762475,0.201404,0.614873) material=G4_Al + --> #secondaries=14 impactParameter[fm]=3.87249 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 109 projectile=anti_hyperH4 Ekin[MeV]=2363.11 direction=(0.453378,0.712517,0.535507) material=G4_Al + --> #secondaries=15 impactParameter[fm]=5.1994 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 110 projectile=omega_c0 Ekin[MeV]=28647.2 direction=(0.757186,0.37056,0.537917) material=G4_Cu + --> #secondaries=44 impactParameter[fm]=3.31499 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=2 + Collision 111 projectile=anti_deuteron Ekin[MeV]=1699.83 direction=(0.788089,0.151262,0.596687) material=G4_Cu + --> #secondaries=41 impactParameter[fm]=3.53335 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 112 projectile=anti_xi_b0 Ekin[MeV]=14816.6 direction=(0.868063,0.470703,0.157811) material=G4_W + --> #secondaries=71 impactParameter[fm]=1.87883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=8 + Collision 113 projectile=Bs0 Ekin[MeV]=24623.1 direction=(0.278152,0.518933,0.808295) material=G4_Si + --> #secondaries=6 impactParameter[fm]=1.08946 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 114 projectile=anti_hyperalpha Ekin[MeV]=11314.6 direction=(0.547611,0.422699,0.722114) material=G4_He + --> #secondaries=9 impactParameter[fm]=2.86106 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 115 projectile=neutron Ekin[MeV]=2811.68 direction=(0.148171,0.665159,0.731853) material=G4_Be + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 116 projectile=lambda_b Ekin[MeV]=8126.95 direction=(0.634678,0.675713,0.37496) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.31176 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 117 projectile=lambda_c+ Ekin[MeV]=1167.48 direction=(0.566419,0.822803,0.0465248) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=1.79196 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=0 + Collision 118 projectile=xi0 Ekin[MeV]=2315.08 direction=(0.697227,0.38862,0.60237) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 119 projectile=Ds- Ekin[MeV]=3972.33 direction=(0.881931,0.214524,0.419735) material=G4_Be + --> #secondaries=4 impactParameter[fm]=2.42547 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 120 projectile=anti_omega_c0 Ekin[MeV]=21049.4 direction=(0.601412,0.34336,0.721392) material=G4_Ar + --> #secondaries=5 impactParameter[fm]=4.10613 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 121 projectile=anti_lambda Ekin[MeV]=26681.9 direction=(0.264579,0.732078,0.627742) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.19846 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 122 projectile=hyperH4 Ekin[MeV]=23779.3 direction=(0.322163,0.702448,0.634648) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=4.13989 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=35 #NNcollisions=4 + Collision 123 projectile=anti_B0 Ekin[MeV]=27888 direction=(0.590753,0.710187,0.382942) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.5224 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 124 projectile=anti_xi0 Ekin[MeV]=18665.6 direction=(0.113913,0.683533,0.720976) material=G4_Cu + --> #secondaries=43 impactParameter[fm]=2.98235 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 125 projectile=anti_xi_b- Ekin[MeV]=10503 direction=(0.464176,0.285842,0.838352) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.62397 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 126 projectile=Bc- Ekin[MeV]=21654 direction=(0.76141,0.274046,0.587497) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.5152 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 127 projectile=D0 Ekin[MeV]=10021.6 direction=(0.765658,0.64193,0.0411544) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.15776 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 128 projectile=anti_proton Ekin[MeV]=24948.6 direction=(0.567128,0.56207,0.602032) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=1.95715 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=0 + Collision 129 projectile=D- Ekin[MeV]=10736.4 direction=(0.75849,0.648364,0.065703) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.77645 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 130 projectile=hyperH4 Ekin[MeV]=16146.2 direction=(0.0803149,0.470014,0.878997) material=G4_He + --> #secondaries=11 impactParameter[fm]=3.11375 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 131 projectile=deuteron Ekin[MeV]=23165.6 direction=(0.871569,0.29528,0.391378) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=1.55804 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=11 + Collision 132 projectile=omega_b- Ekin[MeV]=25033.9 direction=(0.100921,0.547647,0.830601) material=G4_Pb + --> #secondaries=33 impactParameter[fm]=6.50967 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 133 projectile=anti_xi_c0 Ekin[MeV]=26388.5 direction=(0.827177,0.443111,0.345588) material=G4_Si + --> #secondaries=22 impactParameter[fm]=2.63936 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 134 projectile=kaon+ Ekin[MeV]=12700.6 direction=(0.63582,0.746302,0.196889) material=G4_Ar + --> #secondaries=24 impactParameter[fm]=3.26806 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 135 projectile=Ds- Ekin[MeV]=14585.3 direction=(0.940638,0.310497,0.137084) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.16041 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 136 projectile=anti_xi_c0 Ekin[MeV]=26102.1 direction=(0.284479,0.85161,0.440263) material=G4_Be + --> #secondaries=8 impactParameter[fm]=1.8381 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 137 projectile=pi- Ekin[MeV]=10125.3 direction=(0.735785,0.509201,0.446469) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=5.22406 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 138 projectile=hypertriton Ekin[MeV]=11934.1 direction=(0.0721995,0.685617,0.724374) material=G4_Fe + --> #secondaries=59 impactParameter[fm]=1.46959 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=5 + Collision 139 projectile=proton Ekin[MeV]=25553.5 direction=(0.0398278,0.398891,0.916133) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.572482 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 140 projectile=neutron Ekin[MeV]=24289.5 direction=(0.534804,0.840524,0.0866239) material=G4_Be + --> #secondaries=11 impactParameter[fm]=2.36457 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 141 projectile=neutron Ekin[MeV]=1324.35 direction=(0.726255,0.672919,0.140476) material=G4_He + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 142 projectile=anti_triton Ekin[MeV]=21652.3 direction=(0.686312,0.188309,0.702507) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.6238 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 143 projectile=hyperalpha Ekin[MeV]=19861.7 direction=(0.551016,0.552184,0.625679) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.99815 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=6 #NNcollisions=2 + Collision 144 projectile=sigma- Ekin[MeV]=23997.8 direction=(0.684203,0.656743,0.317106) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=2.43072 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 145 projectile=anti_neutron Ekin[MeV]=17511.8 direction=(0.0499674,0.439405,0.896898) material=G4_Si + --> #secondaries=10 impactParameter[fm]=2.89822 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 146 projectile=xi0 Ekin[MeV]=18719.8 direction=(0.517651,0.804045,0.292487) material=G4_Al + --> #secondaries=33 impactParameter[fm]=1.86997 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 147 projectile=anti_alpha Ekin[MeV]=19732.8 direction=(0.835396,0.0375494,0.548365) material=G4_C + --> #secondaries=11 impactParameter[fm]=3.7077 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=10 #NNcollisions=0 + Collision 148 projectile=He3 Ekin[MeV]=27019.3 direction=(0.734969,0.678095,0.00271354) material=G4_W + --> #secondaries=145 impactParameter[fm]=4.99703 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=169 #NNcollisions=13 + Collision 149 projectile=omega_c0 Ekin[MeV]=6499.35 direction=(0.878176,0.212307,0.428642) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=1.82465 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 150 projectile=kaon+ Ekin[MeV]=10122.8 direction=(0.517655,0.816864,0.254493) material=G4_Si + --> #secondaries=19 impactParameter[fm]=1.05935 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 151 projectile=anti_sigma+ Ekin[MeV]=4237.04 direction=(0.965501,0.248364,0.078249) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.81504 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 152 projectile=kaon- Ekin[MeV]=7183.1 direction=(0.119308,0.35595,0.926858) material=G4_C + --> #secondaries=18 impactParameter[fm]=0.667614 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=3 + Collision 153 projectile=anti_triton Ekin[MeV]=8054.5 direction=(0.438749,0.301981,0.846349) material=G4_Cu + --> #secondaries=64 impactParameter[fm]=2.202 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=4 + Collision 154 projectile=anti_xi_c+ Ekin[MeV]=5684.15 direction=(0.0242346,0.700985,0.712764) material=G4_Si + --> #secondaries=24 impactParameter[fm]=1.39736 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 155 projectile=xi- Ekin[MeV]=18841.1 direction=(0.456989,0.55677,0.693663) material=G4_He + --> #secondaries=6 impactParameter[fm]=0.705346 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 156 projectile=neutron Ekin[MeV]=19886.9 direction=(0.444063,0.617975,0.648779) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.663761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 157 projectile=lambda_c+ Ekin[MeV]=28980.8 direction=(0.748504,0.601432,0.279323) material=G4_Si + --> #secondaries=31 impactParameter[fm]=2.49693 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 158 projectile=anti_Bs0 Ekin[MeV]=3288.88 direction=(0.125402,0.19376,0.973001) material=G4_Si + --> #secondaries=8 impactParameter[fm]=1.41918 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 159 projectile=lambda Ekin[MeV]=12092 direction=(0.862911,0.208347,0.460409) material=G4_Be + --> #secondaries=13 impactParameter[fm]=2.01434 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 160 projectile=xi- Ekin[MeV]=21400.2 direction=(0.952744,0.276643,0.125492) material=G4_Si + --> #secondaries=14 impactParameter[fm]=3.76653 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 161 projectile=anti_lambda_c+ Ekin[MeV]=21022.8 direction=(0.00177924,0.548313,0.836271) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.20723 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 162 projectile=anti_xi_c+ Ekin[MeV]=26055.6 direction=(0.408868,0.744598,0.527637) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=1.9026 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 163 projectile=anti_doublehyperH4 Ekin[MeV]=10972.8 direction=(0.727559,0.676635,0.11324) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.56988 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 164 projectile=anti_xi_b0 Ekin[MeV]=17053.6 direction=(0.899536,0.223051,0.375611) material=G4_C + --> #secondaries=9 impactParameter[fm]=2.32497 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 165 projectile=anti_xi_c+ Ekin[MeV]=24918.5 direction=(0.812575,0.53614,0.228639) material=G4_Be + --> #secondaries=12 impactParameter[fm]=1.96941 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 166 projectile=alpha Ekin[MeV]=13734.7 direction=(0.637235,0.130865,0.759478) material=G4_C + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 167 projectile=Bs0 Ekin[MeV]=18502.1 direction=(0.34739,0.416886,0.839956) material=G4_Al + --> #secondaries=7 impactParameter[fm]=3.59593 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 168 projectile=kaon0L Ekin[MeV]=9467.97 direction=(0.474101,0.866738,0.154897) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.96864 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 169 projectile=omega- Ekin[MeV]=23901.9 direction=(0.478486,0.40417,0.77955) material=G4_C + --> #secondaries=21 impactParameter[fm]=3.27419 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 170 projectile=Ds+ Ekin[MeV]=10134.1 direction=(0.85027,0.243538,0.466616) material=G4_Si + --> #secondaries=12 impactParameter[fm]=1.9882 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 171 projectile=Ds- Ekin[MeV]=22544.7 direction=(0.0200911,0.70194,0.711953) material=G4_W + --> #secondaries=62 impactParameter[fm]=4.29339 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 172 projectile=anti_Bs0 Ekin[MeV]=23883.5 direction=(0.489807,0.716164,0.49719) material=G4_Cu + --> #secondaries=8 impactParameter[fm]=0.72696 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 173 projectile=anti_hyperH4 Ekin[MeV]=17201.1 direction=(0.498659,0.0480301,0.865467) material=G4_W + --> #secondaries=156 impactParameter[fm]=3.27151 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=5 + Collision 174 projectile=omega- Ekin[MeV]=8470.35 direction=(0.539286,0.461893,0.704149) material=G4_Cu + --> #secondaries=25 impactParameter[fm]=4.21717 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 + Collision 175 projectile=anti_xi_c+ Ekin[MeV]=7257.61 direction=(0.799449,0.377368,0.467413) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.34544 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 176 projectile=anti_sigma- Ekin[MeV]=22079 direction=(0.650548,0.750518,0.116229) material=G4_Si + --> #secondaries=31 impactParameter[fm]=2.22548 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 177 projectile=lambda_b Ekin[MeV]=29621.5 direction=(0.484057,0.752492,0.446593) material=G4_C + --> #secondaries=9 impactParameter[fm]=3.20587 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 178 projectile=omega- Ekin[MeV]=3264.4 direction=(0.528858,0.315981,0.787696) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 179 projectile=alpha Ekin[MeV]=6067.92 direction=(0.355167,0.850976,0.386907) material=G4_Si + --> #secondaries=19 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 180 projectile=kaon+ Ekin[MeV]=16760 direction=(0.774046,0.61488,0.150919) material=G4_Si + --> #secondaries=11 impactParameter[fm]=2.73409 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 181 projectile=omega_b- Ekin[MeV]=20523.8 direction=(0.60457,0.505488,0.615612) material=G4_W + --> #secondaries=46 impactParameter[fm]=2.03517 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=1 + Collision 182 projectile=anti_deuteron Ekin[MeV]=13495.7 direction=(0.311178,0.635728,0.706412) material=G4_Fe + --> #secondaries=35 impactParameter[fm]=2.74261 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 183 projectile=xi_c+ Ekin[MeV]=28681.9 direction=(0.529361,0.426425,0.733443) material=G4_Cu + --> #secondaries=49 impactParameter[fm]=1.39611 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=4 + Collision 184 projectile=anti_sigma- Ekin[MeV]=11740.5 direction=(0.737834,0.448433,0.504489) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.72604 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 185 projectile=anti_hyperalpha Ekin[MeV]=6398.61 direction=(0.164819,0.0163481,0.986188) material=G4_C + --> #secondaries=17 impactParameter[fm]=3.01535 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 186 projectile=kaon- Ekin[MeV]=22446.8 direction=(0.309719,0.767744,0.560932) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.23693 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 187 projectile=lambda_b Ekin[MeV]=19019.5 direction=(0.562309,0.575304,0.593998) material=G4_C + --> #secondaries=12 impactParameter[fm]=0.480081 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 + Collision 188 projectile=lambda_b Ekin[MeV]=1040.56 direction=(0.15124,0.0203044,0.988289) material=G4_W + --> #secondaries=38 impactParameter[fm]=4.49869 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=0 + Collision 189 projectile=hyperH4 Ekin[MeV]=5470 direction=(0.924751,0.361255,0.119711) material=G4_Al + --> #secondaries=17 impactParameter[fm]=3.71102 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=1 + Collision 190 projectile=omega- Ekin[MeV]=12746.2 direction=(0.774884,0.214381,0.594639) material=G4_W + --> #secondaries=36 impactParameter[fm]=6.87233 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 + Collision 191 projectile=anti_proton Ekin[MeV]=17659.6 direction=(0.954776,0.160123,0.250526) material=G4_Pb + --> #secondaries=69 impactParameter[fm]=5.50628 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=2 + Collision 192 projectile=Ds- Ekin[MeV]=7339.69 direction=(0.473034,0.190272,0.860253) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=3.20403 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 193 projectile=doublehyperH4 Ekin[MeV]=27421.7 direction=(0.3287,0.25855,0.908355) material=G4_Ar +-------- WWWW ------- G4Exception-START -------- WWWW ------- - Final random number = 0.221963 +*** ExceptionHandler is not defined *** +*** G4Exception : had012 + issued by : G4HadronicProcess:CheckResult() +Warning: Secondary with off-shell dynamic mass detected: + hypertriton, PDG mass: 2991.17, dynamic mass: 3346.42 +re-sample the interaction + Process / Model: doublehyperH4Inelastic / FTFP + Primary: doublehyperH4 (1020010040), E= 31528.5, target nucleus (18, 40) + +*** This is just a warning message. *** +-------- WWWW ------- G4Exception-END -------- WWWW ------- + + + --> #secondaries=29 impactParameter[fm]=3.36204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=6 + Collision 194 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=14394.1 direction=(0.831688,0.135501,0.538456) material=G4_He + --> #secondaries=8 impactParameter[fm]=0.93217 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 195 projectile=anti_lambda_c+ Ekin[MeV]=25727.2 direction=(0.903685,0.132193,0.407282) material=G4_Cu + --> #secondaries=38 impactParameter[fm]=3.60026 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 196 projectile=alpha Ekin[MeV]=12320 direction=(0.718297,0.13259,0.682985) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 197 projectile=anti_deuteron Ekin[MeV]=20845.2 direction=(0.465565,0.213015,0.858996) material=G4_Ar + --> #secondaries=21 impactParameter[fm]=6.00865 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 198 projectile=Bc- Ekin[MeV]=8877.59 direction=(0.794917,0.465512,0.389108) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.67681 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 199 projectile=alpha Ekin[MeV]=16575.4 direction=(0.0440433,0.960852,0.273539) material=G4_W + --> #secondaries=19 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 200 projectile=anti_neutron Ekin[MeV]=8709.03 direction=(0.101834,0.440484,0.891966) material=G4_Be + --> #secondaries=17 impactParameter[fm]=1.79478 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 + List of produced secondaries: + j=0 anti_neutron p=(-167.701,1233.59,2620.73049.71) MeV + j=1 pi+ p=(-177.746,-8.40606,223.865318.213) MeV + j=2 pi- p=(13.8075,205.886,59.565256.139) MeV + j=3 neutron p=(-314.276,519.032,757.8551351.03) MeV + j=4 pi0 p=(-174.428,33.3082,264.418345.934) MeV + j=5 pi+ p=(811.788,649.465,845.2991347.15) MeV + j=6 pi0 p=(-44.3905,30.9832,544.949564.02) MeV + j=7 pi+ p=(-13.2086,15.544,292.2324.464) MeV + j=8 pi0 p=(53.2079,-9.79687,216.579260.868) MeV + j=9 pi- p=(88.2875,62.6499,-106.809206.416) MeV + j=10 pi+ p=(-31.8884,228.005,135.943301.602) MeV + j=11 pi- p=(11.7598,145.012,329.734386.485) MeV + j=12 neutron p=(227.647,298.25,813.4421298.17) MeV + j=13 pi- p=(36.4035,-306.116,-251.811421.806) MeV + j=14 proton p=(535.913,765.265,1056.161693.71) MeV + j=15 alpha p=(879.919,296.173,446.7353867.16) MeV + j=16 deuteron p=(-757.204,71.0303,316.5442048.54) MeV + Collision 201 projectile=He3 Ekin[MeV]=23730.4 direction=(0.281016,0.529667,0.800302) material=G4_Al + --> #secondaries=16 impactParameter[fm]=4.89696 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 202 projectile=omega- Ekin[MeV]=21276.6 direction=(0.959753,0.0171488,0.280321) material=G4_W + --> #secondaries=14 impactParameter[fm]=6.24243 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 203 projectile=anti_hyperHe5 Ekin[MeV]=22766.3 direction=(0.326326,0.792186,0.515706) material=G4_Cu + --> #secondaries=78 impactParameter[fm]=1.59387 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=5 + Collision 204 projectile=kaon+ Ekin[MeV]=1197.33 direction=(0.688223,0.493821,0.531498) material=G4_C + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 205 projectile=anti_B0 Ekin[MeV]=27242.1 direction=(0.581324,0.564833,0.585684) material=G4_C + --> #secondaries=11 impactParameter[fm]=2.43188 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 206 projectile=anti_omega_b- Ekin[MeV]=8958.79 direction=(0.364824,0.704772,0.60844) material=G4_W + --> #secondaries=17 impactParameter[fm]=6.76874 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=0 + Collision 207 projectile=anti_xi- Ekin[MeV]=6857.61 direction=(0.558018,0.829799,0.00699515) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=6.23296 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 208 projectile=B0 Ekin[MeV]=21643.6 direction=(0.934344,0.326116,0.143701) material=G4_C + --> #secondaries=6 impactParameter[fm]=1.64398 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 209 projectile=neutron Ekin[MeV]=24742.7 direction=(0.727458,0.035817,0.685217) material=G4_Al + --> #secondaries=30 impactParameter[fm]=2.59164 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 210 projectile=D- Ekin[MeV]=2238.11 direction=(0.838095,0.0955216,0.537097) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.76411 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 211 projectile=xi_c0 Ekin[MeV]=12393.1 direction=(0.331437,0.204595,0.921027) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.99503 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 212 projectile=alpha Ekin[MeV]=9424.14 direction=(0.452306,0.8151,0.361982) material=G4_Be + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 213 projectile=anti_xi- Ekin[MeV]=16146.1 direction=(0.709431,0.566084,0.41983) material=G4_He + --> #secondaries=10 impactParameter[fm]=3.1309 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 214 projectile=anti_doublehyperH4 Ekin[MeV]=29596.6 direction=(0.168951,0.335733,0.926682) material=G4_C + --> #secondaries=22 impactParameter[fm]=0.67806 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=4 + Collision 215 projectile=proton Ekin[MeV]=27635.8 direction=(0.157808,0.81114,0.56316) material=G4_Ar + --> #secondaries=25 impactParameter[fm]=3.19997 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 + Collision 216 projectile=hyperHe5 Ekin[MeV]=10708.5 direction=(0.346901,0.085289,0.934016) material=G4_Fe + --> #secondaries=29 impactParameter[fm]=7.25944 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 217 projectile=omega_b- Ekin[MeV]=22151.2 direction=(0.831199,0.0478039,0.553916) material=G4_W + --> #secondaries=37 impactParameter[fm]=3.44523 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 218 projectile=anti_sigma+ Ekin[MeV]=22180.2 direction=(0.420362,0.716213,0.557077) material=G4_Ar + --> #secondaries=20 impactParameter[fm]=3.87301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 + Collision 219 projectile=sigma+ Ekin[MeV]=21319.6 direction=(0.493849,0.43046,0.755525) material=G4_H + --> #secondaries=5 impactParameter[fm]=2.25543 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 220 projectile=D0 Ekin[MeV]=15435.5 direction=(0.403103,0.914358,0.0381809) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=3.85168 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 221 projectile=anti_B0 Ekin[MeV]=24089.6 direction=(0.0443863,0.921468,0.38591) material=G4_Fe + --> #secondaries=8 impactParameter[fm]=2.24534 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=56 #NNcollisions=1 + Collision 222 projectile=proton Ekin[MeV]=1092.86 direction=(0.471435,0.502996,0.724392) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 223 projectile=xi- Ekin[MeV]=24367.1 direction=(0.721462,0.581981,0.37522) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=2.87397 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 224 projectile=anti_lambda_c+ Ekin[MeV]=20490.2 direction=(0.825386,0.433505,0.361678) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.6902 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 225 projectile=B- Ekin[MeV]=12365.5 direction=(0.322852,0.14135,0.935835) material=G4_Pb + --> #secondaries=44 impactParameter[fm]=2.82018 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 226 projectile=xi_c0 Ekin[MeV]=3364.12 direction=(0.720408,0.639296,0.268913) material=G4_Al + --> #secondaries=6 impactParameter[fm]=2.96675 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 227 projectile=pi+ Ekin[MeV]=13729.7 direction=(0.082771,0.98928,0.120308) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=3.70705 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 228 projectile=anti_omega- Ekin[MeV]=15961.3 direction=(0.193819,0.351893,0.915754) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.37553 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 229 projectile=anti_lambda_c+ Ekin[MeV]=11387.1 direction=(0.953779,0.281669,0.10473) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.30548 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 230 projectile=anti_lambda_c+ Ekin[MeV]=21690 direction=(0.663806,0.653048,0.36454) material=G4_Fe + --> #secondaries=57 impactParameter[fm]=2.70225 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=5 + Collision 231 projectile=D- Ekin[MeV]=1793.09 direction=(0.0887999,0.807675,0.582902) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=2.4582 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 232 projectile=omega_b- Ekin[MeV]=5974.64 direction=(0.146272,0.443541,0.884238) material=G4_W + --> #secondaries=24 impactParameter[fm]=5.53535 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 233 projectile=omega- Ekin[MeV]=5914.28 direction=(0.783863,0.296551,0.545543) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=3.79194 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 234 projectile=neutron Ekin[MeV]=9729.97 direction=(0.688191,0.139375,0.712017) material=G4_Pb + --> #secondaries=32 impactParameter[fm]=7.4628 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 + Collision 235 projectile=kaon- Ekin[MeV]=11688.8 direction=(0.877948,0.416405,0.236252) material=G4_He + --> #secondaries=8 impactParameter[fm]=0.725233 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 236 projectile=Ds- Ekin[MeV]=18209.7 direction=(0.413543,0.908054,0.0664839) material=G4_Si + --> #secondaries=4 impactParameter[fm]=4.75958 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 237 projectile=omega_c0 Ekin[MeV]=19233.4 direction=(0.73583,0.453628,0.502769) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.98772 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 238 projectile=anti_xi0 Ekin[MeV]=13482.2 direction=(0.642278,0.134887,0.75451) material=G4_Al + --> #secondaries=14 impactParameter[fm]=4.43992 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 239 projectile=deuteron Ekin[MeV]=28673.3 direction=(0.11524,0.677182,0.726736) material=G4_Be + --> #secondaries=14 impactParameter[fm]=1.47541 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 240 projectile=pi+ Ekin[MeV]=26339.8 direction=(0.40106,0.582752,0.70679) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.56124 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 241 projectile=D- Ekin[MeV]=8413.36 direction=(0.65987,0.593681,0.460559) material=G4_Cu + --> #secondaries=25 impactParameter[fm]=2.57377 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=59 #NNcollisions=2 + Collision 242 projectile=omega- Ekin[MeV]=6166.05 direction=(0.472219,0.66332,0.580531) material=G4_W + --> #secondaries=65 impactParameter[fm]=5.01975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=2 + Collision 243 projectile=anti_Bs0 Ekin[MeV]=16876.8 direction=(0.648698,0.70701,0.281651) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.261 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 244 projectile=anti_deuteron Ekin[MeV]=1665.36 direction=(0.655173,0.716067,0.240823) material=G4_Si + --> #secondaries=13 impactParameter[fm]=5.4557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=2 + Collision 245 projectile=alpha Ekin[MeV]=26954.3 direction=(0.674684,0.502097,0.541018) material=G4_Si + --> #secondaries=35 impactParameter[fm]=3.42756 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=6 + Collision 246 projectile=neutron Ekin[MeV]=22599.4 direction=(0.697834,0.474733,0.536336) material=G4_Si + --> #secondaries=28 impactParameter[fm]=3.53144 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 247 projectile=hypertriton Ekin[MeV]=12302.6 direction=(0.668606,0.65755,0.347266) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.82859 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 248 projectile=anti_hyperalpha Ekin[MeV]=16778.2 direction=(0.200632,0.0640882,0.977568) material=G4_Ar + --> #secondaries=37 impactParameter[fm]=1.80956 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=3 + Collision 249 projectile=lambda_b Ekin[MeV]=24299.8 direction=(0.622604,0.604654,0.496747) material=G4_Pb + --> #secondaries=14 impactParameter[fm]=7.27079 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 250 projectile=kaon- Ekin[MeV]=6937.54 direction=(0.464594,0.326612,0.82309) material=G4_C + --> #secondaries=12 impactParameter[fm]=2.02316 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 251 projectile=anti_hyperHe5 Ekin[MeV]=7302.83 direction=(0.0375793,0.746076,0.6648) material=G4_Ar + --> #secondaries=40 impactParameter[fm]=4.31874 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 252 projectile=D0 Ekin[MeV]=19153.1 direction=(0.736958,0.494295,0.461048) material=G4_Be + --> #secondaries=12 impactParameter[fm]=3.31156 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 253 projectile=anti_xi_c+ Ekin[MeV]=6748.37 direction=(0.567196,0.568348,0.596045) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=2.77674 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 254 projectile=lambda_c+ Ekin[MeV]=1825.41 direction=(0.329187,0.822531,0.463766) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=3.76642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=0 + Collision 255 projectile=anti_D0 Ekin[MeV]=10159.7 direction=(0.571693,0.571986,0.588218) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=4.40246 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 256 projectile=omega- Ekin[MeV]=23962.4 direction=(0.110701,0.258434,0.959665) material=G4_Cu + --> #secondaries=6 impactParameter[fm]=4.12369 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 257 projectile=D- Ekin[MeV]=27674.8 direction=(0.767776,0.615257,0.178826) material=G4_Pb + --> #secondaries=105 impactParameter[fm]=1.45285 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=201 #NNcollisions=7 + Collision 258 projectile=alpha Ekin[MeV]=15308.1 direction=(0.113917,0.98859,0.0985482) material=G4_W + --> #secondaries=28 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 259 projectile=anti_xi_c+ Ekin[MeV]=1462.79 direction=(0.277256,0.932846,0.230062) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=3.32201 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 260 projectile=Bc+ Ekin[MeV]=21947.9 direction=(0.206629,0.869846,0.447964) material=G4_Pb + --> #secondaries=37 impactParameter[fm]=3.0893 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 261 projectile=He3 Ekin[MeV]=16822.8 direction=(0.528076,0.848904,0.0222924) material=G4_W + --> #secondaries=40 impactParameter[fm]=7.62925 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 262 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=17291 direction=(0.662165,0.749308,0.00872674) material=G4_Cu + --> #secondaries=42 impactParameter[fm]=3.36444 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=4 + Collision 263 projectile=proton Ekin[MeV]=16584.9 direction=(0.40957,0.248974,0.877647) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.321745 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 264 projectile=anti_neutron Ekin[MeV]=23490.4 direction=(0.467169,0.784021,0.408735) material=G4_He + --> #secondaries=21 impactParameter[fm]=2.52197 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 265 projectile=xi- Ekin[MeV]=1363.9 direction=(0.461374,0.84545,0.268975) material=G4_Al + --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 266 projectile=anti_doublehyperH4 Ekin[MeV]=29660.7 direction=(0.878,0.346139,0.330611) material=G4_Pb + --> #secondaries=144 impactParameter[fm]=4.09151 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=4 + Collision 267 projectile=anti_lambda Ekin[MeV]=28185.1 direction=(0.505436,0.748252,0.429713) material=G4_Al + --> #secondaries=17 impactParameter[fm]=3.89186 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 268 projectile=anti_sigma- Ekin[MeV]=21217.1 direction=(0.690477,0.589682,0.418947) material=G4_H + --> #secondaries=10 impactParameter[fm]=0.910543 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 269 projectile=hypertriton Ekin[MeV]=4667.01 direction=(0.642672,0.0976127,0.759897) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.50502 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 270 projectile=kaon0L Ekin[MeV]=21205.5 direction=(0.687912,0.577643,0.439438) material=G4_Al + --> #secondaries=12 impactParameter[fm]=2.96301 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 271 projectile=anti_proton Ekin[MeV]=28340.9 direction=(0.769832,0.329267,0.546756) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.293607 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 272 projectile=anti_sigma- Ekin[MeV]=12823.2 direction=(0.763206,0.0241766,0.645703) material=G4_Al + --> #secondaries=22 impactParameter[fm]=1.28755 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 273 projectile=hypertriton Ekin[MeV]=11687 direction=(0.401625,0.703688,0.586106) material=G4_Cu + --> #secondaries=38 impactParameter[fm]=5.03 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=58 #NNcollisions=2 + Collision 274 projectile=anti_xi_c0 Ekin[MeV]=26654.5 direction=(0.722699,0.670716,0.166872) material=G4_Fe + --> #secondaries=54 impactParameter[fm]=1.46928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 275 projectile=alpha Ekin[MeV]=24249.7 direction=(0.0726066,0.978182,0.194652) material=G4_He + --> #secondaries=8 impactParameter[fm]=3.49146 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 276 projectile=kaon0S Ekin[MeV]=25761.4 direction=(0.895763,0.383277,0.225181) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.18706 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 277 projectile=anti_xi_c+ Ekin[MeV]=3494.26 direction=(0.110195,0.175269,0.978334) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=4.22065 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 278 projectile=anti_xi_b0 Ekin[MeV]=14079.4 direction=(0.108481,0.776606,0.620576) material=G4_Si + --> #secondaries=15 impactParameter[fm]=3.01712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 279 projectile=B+ Ekin[MeV]=15510.5 direction=(0.103793,0.95084,0.291772) material=G4_W + --> #secondaries=39 impactParameter[fm]=2.56217 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=4 + Collision 280 projectile=anti_hypertriton Ekin[MeV]=26254.9 direction=(0.801069,0.262443,0.537971) material=G4_He + --> #secondaries=22 impactParameter[fm]=2.75254 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 281 projectile=anti_sigma+ Ekin[MeV]=16257.9 direction=(0.139392,0.847808,0.511656) material=G4_Pb + --> #secondaries=110 impactParameter[fm]=3.3487 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 282 projectile=omega_c0 Ekin[MeV]=14873.2 direction=(0.799481,0.569087,0.192276) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=4.53686 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 283 projectile=anti_deuteron Ekin[MeV]=20755.2 direction=(0.875835,0.375653,0.302981) material=G4_W + --> #secondaries=32 impactParameter[fm]=8.29319 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 284 projectile=omega_b- Ekin[MeV]=18742.9 direction=(0.461213,0.574542,0.676154) material=G4_Al + --> #secondaries=11 impactParameter[fm]=3.83348 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 285 projectile=sigma- Ekin[MeV]=2368.49 direction=(0.3059,0.581663,0.75372) material=G4_Fe + --> #secondaries=33 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 286 projectile=anti_sigma+ Ekin[MeV]=27623.4 direction=(0.131872,0.562785,0.816017) material=G4_Pb + --> #secondaries=94 impactParameter[fm]=5.88007 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 + Collision 287 projectile=anti_xi_b- Ekin[MeV]=9679.26 direction=(0.19103,0.981387,0.0196952) material=G4_Be + --> #secondaries=8 impactParameter[fm]=3.93327 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 288 projectile=anti_alpha Ekin[MeV]=16631.3 direction=(0.507475,0.18939,0.840595) material=G4_W + --> #secondaries=12 impactParameter[fm]=8.78121 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=183 #NNcollisions=0 + Collision 289 projectile=hyperHe5 Ekin[MeV]=11602.9 direction=(0.606737,0.643062,0.46727) material=G4_Ar + --> #secondaries=41 impactParameter[fm]=2.51357 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 290 projectile=alpha Ekin[MeV]=8515.11 direction=(0.0584657,0.846226,0.529607) material=G4_Pb + --> #secondaries=23 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 291 projectile=hyperalpha Ekin[MeV]=26773.5 direction=(0.306175,0.521557,0.796389) material=G4_Be + --> #secondaries=14 impactParameter[fm]=4.01512 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 292 projectile=anti_doublehyperH4 Ekin[MeV]=14052.9 direction=(0.996446,0.0796412,0.0274496) material=G4_Si + --> #secondaries=18 impactParameter[fm]=4.43644 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 293 projectile=B0 Ekin[MeV]=8309.55 direction=(0.53252,0.422277,0.733556) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.34209 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 294 projectile=anti_hyperalpha Ekin[MeV]=28922.4 direction=(0.804779,0.413655,0.425701) material=G4_Si + --> #secondaries=48 impactParameter[fm]=0.965857 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=4 + Collision 295 projectile=anti_hyperH4 Ekin[MeV]=20420.9 direction=(0.683992,0.43268,0.587319) material=G4_Ar + --> #secondaries=46 impactParameter[fm]=4.13294 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=7 + Collision 296 projectile=D+ Ekin[MeV]=2284.27 direction=(0.631413,0.401786,0.663239) material=G4_Pb + --> #secondaries=29 impactParameter[fm]=6.8188 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 297 projectile=lambda Ekin[MeV]=5392.72 direction=(0.0209839,0.795849,0.605132) material=G4_Pb + --> #secondaries=13 impactParameter[fm]=7.42032 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 298 projectile=anti_He3 Ekin[MeV]=29586.5 direction=(0.725653,0.105869,0.679868) material=G4_Al + --> #secondaries=30 impactParameter[fm]=2.94586 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=22 #NNcollisions=3 + Collision 299 projectile=anti_doublehyperH4 Ekin[MeV]=19419.5 direction=(0.847486,0.5289,0.0450912) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.69203 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 300 projectile=omega- Ekin[MeV]=22359.3 direction=(0.172369,0.325593,0.929666) material=G4_W + --> #secondaries=22 impactParameter[fm]=6.93498 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=0 + List of produced secondaries: + j=0 omega- p=(3458.57,7950.45,21805.823525.7) MeV + j=1 neutron p=(242.665,-27.3693,18.3869970.957) MeV + j=2 pi+ p=(81.3277,-137.356,223.368307.984) MeV + j=3 neutron p=(53.2806,285.331,-92.6453987.734) MeV + j=4 neutron p=(114.907,113.136,81.2616956.76) MeV + j=5 neutron p=(92.6923,-0.983851,11.9306944.202) MeV + j=6 neutron p=(6.07094,22.8208,81.2394943.367) MeV + j=7 Ta173[165.880X] p=(178.218,-250.032,267.616161060) MeV + j=8 neutron p=(-62.0382,-72.5972,-109.081950.684) MeV + j=9 neutron p=(-25.8834,-37.4244,-59.7969942.565) MeV + j=10 neutron p=(16.1142,-17.4189,37.0933940.597) MeV + j=11 neutron p=(-21.428,-20.8189,19.5441940.243) MeV + j=12 gamma p=(-1.66793,-2.83612,2.217813.9679) MeV + j=13 gamma p=(-0.373717,0.35219,0.3247320.60758) MeV + j=14 gamma p=(0.0499329,0.180388,-0.2404030.304675) MeV + j=15 gamma p=(-0.396915,0.362414,0.194290.57152) MeV + j=16 gamma p=(0.401326,-0.323297,-0.04785590.517565) MeV + j=17 gamma p=(-0.0825681,0.173468,-0.1272320.230427) MeV + j=18 gamma p=(0.0657962,0.181151,0.09021820.212801) MeV + j=19 gamma p=(-0.162634,-0.0953617,0.01923980.18951) MeV + j=20 e- p=(0.0917486,-0.00329481,0.4172930.666095) MeV + j=21 e- p=(-0.14002,-0.122839,-0.2105960.583237) MeV + Collision 301 projectile=anti_triton Ekin[MeV]=27495.5 direction=(0.365812,0.579568,0.728205) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=6.24627 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 302 projectile=anti_omega_c0 Ekin[MeV]=18984.1 direction=(0.817677,0.422744,0.390758) material=G4_Be + --> #secondaries=8 impactParameter[fm]=3.86838 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 303 projectile=anti_lambda Ekin[MeV]=27047.3 direction=(0.0714435,0.866866,0.493396) material=G4_Pb + --> #secondaries=28 impactParameter[fm]=7.69396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 304 projectile=deuteron Ekin[MeV]=5481.81 direction=(0.35407,0.934475,0.0372956) material=G4_H + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 305 projectile=anti_sigma+ Ekin[MeV]=15911 direction=(0.0190224,0.33473,0.942122) material=G4_Al + --> #secondaries=34 impactParameter[fm]=0.886128 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 306 projectile=Bc+ Ekin[MeV]=16191 direction=(0.948879,0.217538,0.228705) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.985545 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 307 projectile=Ds+ Ekin[MeV]=26063 direction=(0.157697,0.531539,0.832225) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.04163 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 308 projectile=anti_alpha Ekin[MeV]=9910.6 direction=(0.84232,0.000172645,0.538977) material=G4_Si + --> #secondaries=30 impactParameter[fm]=3.22371 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=3 + Collision 309 projectile=sigma- Ekin[MeV]=16848.6 direction=(0.977762,0.039534,0.205959) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.96446 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 310 projectile=anti_lambda_b Ekin[MeV]=5664.09 direction=(0.730091,0.295163,0.616317) material=G4_Ar + --> #secondaries=20 impactParameter[fm]=2.15867 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 + Collision 311 projectile=hypertriton Ekin[MeV]=28560.3 direction=(0.820818,0.0703224,0.566845) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.169511 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 312 projectile=hyperH4 Ekin[MeV]=21452.2 direction=(0.885805,0.395212,0.243221) material=G4_W + --> #secondaries=67 impactParameter[fm]=5.95373 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=176 #NNcollisions=7 + Collision 313 projectile=anti_xi_c+ Ekin[MeV]=2224.96 direction=(0.108757,0.93358,0.341468) material=G4_Fe + --> #secondaries=14 impactParameter[fm]=1.55394 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=0 + Collision 314 projectile=anti_hypertriton Ekin[MeV]=20036.7 direction=(0.546609,0.587103,0.5971) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.59618 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=3 + Collision 315 projectile=B- Ekin[MeV]=27142.8 direction=(0.154076,0.708757,0.688422) material=G4_Pb + --> #secondaries=19 impactParameter[fm]=6.85208 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 316 projectile=anti_hyperH4 Ekin[MeV]=29593.2 direction=(0.651401,0.647461,0.395564) material=G4_He + --> #secondaries=6 impactParameter[fm]=2.5696 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 317 projectile=kaon0S Ekin[MeV]=26269.7 direction=(0.749316,0.514413,0.41702) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.87956 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 318 projectile=neutron Ekin[MeV]=16978.5 direction=(0.296405,0.599447,0.74351) material=G4_Ar + --> #secondaries=35 impactParameter[fm]=3.01913 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 319 projectile=omega_c0 Ekin[MeV]=6560.92 direction=(0.0534766,0.825465,0.561915) material=G4_Be + --> #secondaries=6 impactParameter[fm]=1.773 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 320 projectile=lambda_b Ekin[MeV]=18669 direction=(0.887052,0.456444,0.0692586) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=3.91483 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 321 projectile=omega_b- Ekin[MeV]=22243 direction=(0.960311,0.144696,0.238464) material=G4_He + --> #secondaries=4 impactParameter[fm]=0.963815 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 322 projectile=hyperalpha Ekin[MeV]=18582.2 direction=(0.693233,0.713212,0.103714) material=G4_He + --> #secondaries=7 impactParameter[fm]=4.01928 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 323 projectile=anti_proton Ekin[MeV]=25272.8 direction=(0.131143,0.667522,0.73295) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=2.77738 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 324 projectile=kaon+ Ekin[MeV]=15285.6 direction=(0.560163,0.644687,0.520189) material=G4_Fe + --> #secondaries=43 impactParameter[fm]=2.0792 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 325 projectile=anti_sigma- Ekin[MeV]=3055.6 direction=(0.577829,0.766859,0.279358) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=5.38589 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 326 projectile=He3 Ekin[MeV]=4670.22 direction=(0.483448,0.648642,0.587828) material=G4_C + --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 327 projectile=lambda_c+ Ekin[MeV]=13097.7 direction=(0.829119,0.413447,0.376327) material=G4_Be + --> #secondaries=9 impactParameter[fm]=1.87537 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 328 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=14666 direction=(0.292965,0.732966,0.613948) material=G4_Pb + --> #secondaries=104 impactParameter[fm]=5.02639 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=5 + Collision 329 projectile=deuteron Ekin[MeV]=6257.16 direction=(0.702235,0.701858,0.11942) material=G4_W + --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 330 projectile=anti_hyperH4 Ekin[MeV]=12871.6 direction=(0.676193,0.373386,0.635095) material=G4_C + --> #secondaries=32 impactParameter[fm]=2.55805 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=5 + Collision 331 projectile=B+ Ekin[MeV]=13601.5 direction=(0.287727,0.196908,0.937252) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=0.317145 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 332 projectile=pi- Ekin[MeV]=11024.9 direction=(0.254471,0.765747,0.590657) material=G4_Ar + --> #secondaries=18 impactParameter[fm]=4.8025 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 333 projectile=alpha Ekin[MeV]=7232.27 direction=(0.216357,0.913972,0.343285) material=G4_Be + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 334 projectile=deuteron Ekin[MeV]=28985.5 direction=(0.199193,0.977365,0.0712712) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.01982 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 335 projectile=Ds+ Ekin[MeV]=20049.9 direction=(0.774708,0.521179,0.35805) material=G4_Si + --> #secondaries=12 impactParameter[fm]=1.44149 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 336 projectile=anti_neutron Ekin[MeV]=13491.6 direction=(0.945374,0.223028,0.237754) material=G4_He + --> #secondaries=7 impactParameter[fm]=3.92737 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 337 projectile=D- Ekin[MeV]=13950.1 direction=(0.628856,0.762102,0.154082) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=4.35769 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 338 projectile=kaon+ Ekin[MeV]=10200.7 direction=(0.486752,0.827883,0.278715) material=G4_Si + --> #secondaries=25 impactParameter[fm]=1.75371 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 339 projectile=xi_c0 Ekin[MeV]=10865.6 direction=(0.373722,0.772571,0.51329) material=G4_Be + --> #secondaries=10 impactParameter[fm]=1.64854 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 340 projectile=anti_xi0 Ekin[MeV]=13752.1 direction=(0.257148,0.522879,0.812694) material=G4_Pb + --> #secondaries=44 impactParameter[fm]=5.7465 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=1 + Collision 341 projectile=xi_c+ Ekin[MeV]=18382.8 direction=(0.569239,0.682086,0.459048) material=G4_Si + --> #secondaries=32 impactParameter[fm]=1.98849 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 342 projectile=anti_deuteron Ekin[MeV]=13268.2 direction=(0.559293,0.802565,0.207556) material=G4_C + --> #secondaries=17 impactParameter[fm]=2.70965 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=3 + Collision 343 projectile=anti_neutron Ekin[MeV]=18743.7 direction=(0.568457,0.560705,0.602052) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=5.13431 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=65 #NNcollisions=1 + Collision 344 projectile=omega- Ekin[MeV]=14473.8 direction=(0.173916,0.693067,0.69958) material=G4_Fe + --> #secondaries=39 impactParameter[fm]=2.64165 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 + Collision 345 projectile=anti_xi_b0 Ekin[MeV]=11513.1 direction=(0.283116,0.555518,0.781821) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=1.10147 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=1 + Collision 346 projectile=Bs0 Ekin[MeV]=14874.5 direction=(0.678965,0.443513,0.585067) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.2581 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 347 projectile=kaon+ Ekin[MeV]=25899.7 direction=(0.340272,0.55678,0.757767) material=G4_Fe + --> #secondaries=20 impactParameter[fm]=4.24227 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 348 projectile=deuteron Ekin[MeV]=29653.1 direction=(0.924637,0.293022,0.243279) material=G4_C + --> #secondaries=17 impactParameter[fm]=2.51484 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 349 projectile=B+ Ekin[MeV]=28003 direction=(0.374121,0.398221,0.837528) material=G4_Be + --> #secondaries=9 impactParameter[fm]=0.675677 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 350 projectile=alpha Ekin[MeV]=12476 direction=(0.0997852,0.985216,0.139254) material=G4_Be + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 351 projectile=pi- Ekin[MeV]=3523.98 direction=(0.653642,0.0172579,0.756607) material=G4_Cu + --> #secondaries=9 impactParameter[fm]=4.64357 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 352 projectile=anti_xi_c0 Ekin[MeV]=13189.1 direction=(0.685654,0.344648,0.641168) material=G4_W + --> #secondaries=59 impactParameter[fm]=2.42948 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 + Collision 353 projectile=anti_D0 Ekin[MeV]=18340.2 direction=(0.66528,0.657332,0.354) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.75455 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 354 projectile=Bc- Ekin[MeV]=24846.7 direction=(0.414539,0.710368,0.568801) material=G4_Al + --> #secondaries=14 impactParameter[fm]=2.71913 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 355 projectile=kaon0L Ekin[MeV]=5498.91 direction=(0.978445,0.126511,0.163217) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=2.62265 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 356 projectile=anti_alpha Ekin[MeV]=10436.5 direction=(0.627992,0.649018,0.429421) material=G4_Ar + --> #secondaries=49 impactParameter[fm]=2.51662 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=6 + Collision 357 projectile=kaon- Ekin[MeV]=8837.63 direction=(0.684874,0.672228,0.281171) material=G4_Pb + --> #secondaries=86 impactParameter[fm]=2.24075 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 + Collision 358 projectile=Bc- Ekin[MeV]=2162.4 direction=(0.515949,0.835449,0.189265) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.17402 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 359 projectile=D+ Ekin[MeV]=2495.66 direction=(0.23197,0.315183,0.920244) material=G4_Pb + --> #secondaries=37 impactParameter[fm]=4.23508 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=202 #NNcollisions=2 + Collision 360 projectile=anti_neutron Ekin[MeV]=18435.9 direction=(0.862673,0.0834149,0.498836) material=G4_W + --> #secondaries=49 impactParameter[fm]=4.7538 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=3 + Collision 361 projectile=hyperH4 Ekin[MeV]=1576.07 direction=(0.166783,0.647733,0.743387) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=5.12394 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=60 #NNcollisions=0 + Collision 362 projectile=anti_omega- Ekin[MeV]=13901.1 direction=(0.50387,0.144531,0.851602) material=G4_Si + --> #secondaries=21 impactParameter[fm]=3.67477 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 363 projectile=He3 Ekin[MeV]=1829.86 direction=(0.917136,0.194803,0.347727) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 364 projectile=anti_sigma+ Ekin[MeV]=4619.14 direction=(0.295914,0.121593,0.947444) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.41444 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 365 projectile=B- Ekin[MeV]=26109.8 direction=(0.165796,0.70584,0.688695) material=G4_Pb + --> #secondaries=28 impactParameter[fm]=6.68544 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 + Collision 366 projectile=kaon0S Ekin[MeV]=18044.5 direction=(0.580274,0.565312,0.586263) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=0.910872 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 367 projectile=pi+ Ekin[MeV]=18579.8 direction=(0.316419,0.29077,0.902957) material=G4_He + --> #secondaries=19 impactParameter[fm]=0.860752 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 368 projectile=omega_b- Ekin[MeV]=10756.7 direction=(0.0232154,0.981094,0.192136) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=3.52076 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 369 projectile=anti_omega_c0 Ekin[MeV]=10783.7 direction=(0.0649561,0.939919,0.335161) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.12417 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 370 projectile=hyperH4 Ekin[MeV]=4084.97 direction=(0.639853,0.50247,0.581474) material=G4_W + --> #secondaries=73 impactParameter[fm]=4.21377 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=165 #NNcollisions=1 + Collision 371 projectile=D- Ekin[MeV]=4930.27 direction=(0.5763,0.628683,0.522146) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.88884 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 372 projectile=anti_omega_c0 Ekin[MeV]=13553.3 direction=(0.26391,0.253591,0.930614) material=G4_Si + --> #secondaries=15 impactParameter[fm]=2.35065 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 373 projectile=pi- Ekin[MeV]=18620.9 direction=(0.603126,0.762484,0.234216) material=G4_Be + --> #secondaries=14 impactParameter[fm]=0.945326 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=1 + Collision 374 projectile=xi_c0 Ekin[MeV]=17229.4 direction=(0.65906,0.397697,0.638339) material=G4_Ar + --> #secondaries=8 impactParameter[fm]=3.59795 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 375 projectile=proton Ekin[MeV]=8570.26 direction=(0.507048,0.148662,0.849) material=G4_Pb + --> #secondaries=36 impactParameter[fm]=5.98095 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=2 + Collision 376 projectile=neutron Ekin[MeV]=23752.6 direction=(0.14044,0.586061,0.798003) material=G4_Ar + --> #secondaries=28 impactParameter[fm]=3.28645 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 377 projectile=kaon+ Ekin[MeV]=21295.4 direction=(0.930488,0.18195,0.317941) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=4.00652 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 378 projectile=anti_B0 Ekin[MeV]=27448.5 direction=(0.414601,0.67986,0.604894) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.5881 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 379 projectile=omega_c0 Ekin[MeV]=17492.5 direction=(0.36038,0.573273,0.735856) material=G4_Al + --> #secondaries=11 impactParameter[fm]=3.75439 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 380 projectile=anti_Bs0 Ekin[MeV]=17263.2 direction=(0.644825,0.0536292,0.762447) material=G4_Si + --> #secondaries=13 impactParameter[fm]=2.82083 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 381 projectile=anti_hyperalpha Ekin[MeV]=13604.4 direction=(0.544069,0.165566,0.822543) material=G4_W + --> #secondaries=147 impactParameter[fm]=3.1464 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=4 + Collision 382 projectile=kaon+ Ekin[MeV]=3940.96 direction=(0.0717629,0.723397,0.686693) material=G4_Fe + --> #secondaries=38 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 383 projectile=anti_hypertriton Ekin[MeV]=8258.98 direction=(0.605228,0.473133,0.64019) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=2.53254 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=3 + Collision 384 projectile=He3 Ekin[MeV]=10267.3 direction=(0.903216,0.126917,0.409992) material=G4_Cu + --> #secondaries=39 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 385 projectile=deuteron Ekin[MeV]=8207.38 direction=(0.304554,0.810584,0.500201) material=G4_Fe + --> #secondaries=19 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 386 projectile=anti_hyperalpha Ekin[MeV]=20385.5 direction=(0.858925,0.255683,0.443706) material=G4_Si + --> #secondaries=42 impactParameter[fm]=0.9562 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=4 + Collision 387 projectile=anti_xi_c+ Ekin[MeV]=29532.8 direction=(0.494503,0.72968,0.472266) material=G4_W + --> #secondaries=78 impactParameter[fm]=3.58082 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 + Collision 388 projectile=kaon- Ekin[MeV]=24255 direction=(0.739316,0.20894,0.640122) material=G4_Si + --> #secondaries=10 impactParameter[fm]=2.2774 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 389 projectile=anti_hyperHe5 Ekin[MeV]=9079.91 direction=(0.845602,0.00288456,0.533805) material=G4_Pb + --> #secondaries=16 impactParameter[fm]=8.51636 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=207 #NNcollisions=2 + Collision 390 projectile=anti_proton Ekin[MeV]=14670.5 direction=(0.334932,0.49601,0.801121) material=G4_C + --> #secondaries=13 impactParameter[fm]=1.39046 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 391 projectile=xi_c+ Ekin[MeV]=9374.62 direction=(0.132432,0.911751,0.388809) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=2.16195 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=2 + Collision 392 projectile=anti_sigma- Ekin[MeV]=12466.6 direction=(0.36548,0.652604,0.663727) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=4.3802 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 + Collision 393 projectile=B+ Ekin[MeV]=6300.49 direction=(0.452045,0.863832,0.222372) material=G4_Cu + --> #secondaries=20 impactParameter[fm]=3.69453 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=59 #NNcollisions=2 + Collision 394 projectile=anti_omega_b- Ekin[MeV]=7363.22 direction=(0.272968,0.491352,0.827081) material=G4_Be + --> #secondaries=6 impactParameter[fm]=1.8706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 395 projectile=neutron Ekin[MeV]=14650.5 direction=(0.315998,0.664028,0.677652) material=G4_Fe + --> #secondaries=38 impactParameter[fm]=3.16352 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 396 projectile=anti_proton Ekin[MeV]=18384.9 direction=(0.420178,0.56976,0.706275) material=G4_Al + --> #secondaries=20 impactParameter[fm]=3.40438 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 397 projectile=xi0 Ekin[MeV]=14677.7 direction=(0.808931,0.507992,0.29593) material=G4_Be + --> #secondaries=9 impactParameter[fm]=1.71187 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 398 projectile=Bc+ Ekin[MeV]=13698 direction=(0.5875,0.809133,0.0121053) material=G4_Si + --> #secondaries=6 impactParameter[fm]=1.3664 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 399 projectile=anti_hyperHe5 Ekin[MeV]=3670.19 direction=(0.346809,0.807694,0.476817) material=G4_Pb + --> #secondaries=93 impactParameter[fm]=5.32537 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=200 #NNcollisions=5 + Collision 400 projectile=anti_deuteron Ekin[MeV]=2449.01 direction=(0.741251,0.612188,0.27527) material=G4_Cu + --> #secondaries=36 impactParameter[fm]=3.15814 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 + List of produced secondaries: + j=0 pi+ p=(67.9025,311.642,-37.6408350.183) MeV + j=1 anti_neutron p=(499.428,825.492,87.35771349.55) MeV + j=2 pi0 p=(440.586,337.398,101.442580.053) MeV + j=3 pi- p=(-289.889,-252.456,-183.429448.213) MeV + j=4 pi0 p=(196.446,75.1514,168.15301.217) MeV + j=5 proton p=(89.7884,-103.631,46.7608949.39) MeV + j=6 pi- p=(11.3847,19.1609,28.6739144.218) MeV + j=7 pi0 p=(569.629,139.63,420.036733.909) MeV + j=8 pi0 p=(-60.8119,-196.496,-49.3171250.918) MeV + j=9 proton p=(18.1926,220.245,276.2241002.74) MeV + j=10 deuteron p=(122.825,-67.0533,-228.8711894.7) MeV + j=11 deuteron p=(156.507,-108.124,-21.55171885.36) MeV + j=12 neutron p=(15.3296,-94.2681,151.351956.458) MeV + j=13 neutron p=(-127.017,402.939,-19.76391030.37) MeV + j=14 neutron p=(93.3134,97.9552,22.7463949.528) MeV + j=15 neutron p=(-431.598,314.93,210.4041101.14) MeV + j=16 neutron p=(153.192,3.61421,380.1761025.08) MeV + j=17 proton p=(-2.4233,152.617,-222.421976.28) MeV + j=18 neutron p=(191.642,17.5189,-248.321990.697) MeV + j=19 proton p=(-37.4179,68.5221,267.534978.787) MeV + j=20 neutron p=(10.791,44.3079,265.256977.355) MeV + j=21 Ne20 p=(949.77,284.013,-462.5918649.8) MeV + j=22 triton p=(-159.16,91.4441,-28.71132815.06) MeV + j=23 deuteron p=(177.51,-187.144,-161.0521900.1) MeV + j=24 neutron p=(-8.21581,41.4479,-102.395946.073) MeV + j=25 deuteron p=(76.0863,-143.605,207.9211894.09) MeV + j=26 deuteron p=(-30.2065,-213.934,168.8561895.55) MeV + j=27 proton p=(91.5518,81.293,39.5148947.051) MeV + j=28 deuteron p=(-24.3217,28.9857,111.3921879.3) MeV + j=29 triton p=(270.613,188.252,25.88772828.32) MeV + j=30 proton p=(-35.7348,131.584,9.76316948.178) MeV + j=31 proton p=(27.9834,-23.584,-130.894948.065) MeV + j=32 alpha p=(-34.2615,-102.654,31.97123729.09) MeV + j=33 alpha p=(-72.708,-13.1386,-64.41343728.67) MeV + j=34 neutron p=(19.3422,-16.5273,-21.7655940.162) MeV + j=35 gamma p=(-2.1241,0.825118,1.104512.53231) MeV + Collision 401 projectile=lambda_c+ Ekin[MeV]=12245.6 direction=(0.406096,0.739108,0.537406) material=G4_Cu + --> #secondaries=36 impactParameter[fm]=1.55273 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 402 projectile=doublehyperH4 Ekin[MeV]=21851.7 direction=(0.273002,0.724334,0.633096) material=G4_Al + --> #secondaries=31 impactParameter[fm]=5.05913 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=23 #NNcollisions=5 + Collision 403 projectile=anti_Bs0 Ekin[MeV]=13332.7 direction=(0.656565,0.449622,0.605609) material=G4_Pb + --> #secondaries=30 impactParameter[fm]=6.0712 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 404 projectile=D- Ekin[MeV]=23412.7 direction=(0.264761,0.590036,0.762731) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.422343 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 405 projectile=anti_triton Ekin[MeV]=17105.1 direction=(0.802212,0.582409,0.131361) material=G4_Fe + --> #secondaries=22 impactParameter[fm]=6.03204 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 406 projectile=anti_omega_b- Ekin[MeV]=1691.73 direction=(0.110691,0.763569,0.636168) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=5.02779 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 407 projectile=sigma+ Ekin[MeV]=28687.8 direction=(0.0284383,0.409911,0.911682) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.6997 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 408 projectile=pi- Ekin[MeV]=13778.4 direction=(0.810872,0.565991,0.148801) material=G4_W + --> #secondaries=44 impactParameter[fm]=5.74147 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 409 projectile=kaon0S Ekin[MeV]=6978.26 direction=(0.580772,0.633651,0.511068) material=G4_Si + --> #secondaries=8 impactParameter[fm]=4.00174 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 410 projectile=kaon0S Ekin[MeV]=17538.5 direction=(0.0583127,0.0148415,0.998188) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=4.69206 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 411 projectile=anti_omega_b- Ekin[MeV]=19177.4 direction=(0.949523,0.313654,0.00520557) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.68746 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 412 projectile=neutron Ekin[MeV]=20110.8 direction=(0.521182,0.851697,0.0546098) material=G4_C + --> #secondaries=11 impactParameter[fm]=1.64133 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 413 projectile=xi- Ekin[MeV]=1968.17 direction=(0.626203,0.335944,0.703571) material=G4_Be + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 414 projectile=anti_xi- Ekin[MeV]=13448.5 direction=(0.501783,0.665412,0.552667) material=G4_W + --> #secondaries=20 impactParameter[fm]=6.05883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 415 projectile=xi_c0 Ekin[MeV]=9545.07 direction=(0.693311,0.443996,0.567616) material=G4_Pb + --> #secondaries=24 impactParameter[fm]=5.98084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 416 projectile=D0 Ekin[MeV]=2193.4 direction=(0.0686656,0.343656,0.936582) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=5.7746 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 + Collision 417 projectile=anti_xi_c+ Ekin[MeV]=21845.2 direction=(0.821527,0.456997,0.340951) material=G4_Pb + --> #secondaries=43 impactParameter[fm]=6.82452 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 418 projectile=anti_xi_c0 Ekin[MeV]=2413.86 direction=(0.861072,0.115088,0.495288) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.959981 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 419 projectile=Bc- Ekin[MeV]=25006.7 direction=(0.403758,0.88974,0.212934) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.804383 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 420 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=18880.1 direction=(0.670107,0.270173,0.691349) material=G4_Be + --> #secondaries=22 impactParameter[fm]=0.343928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=5 + Collision 421 projectile=anti_lambda Ekin[MeV]=9547.38 direction=(0.678676,0.483566,0.552778) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.92067 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 422 projectile=proton Ekin[MeV]=28077.5 direction=(0.0754489,0.463895,0.882671) material=G4_Al + --> #secondaries=30 impactParameter[fm]=2.60426 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 423 projectile=xi_c0 Ekin[MeV]=2324.68 direction=(0.688389,0.302428,0.659286) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=0.853014 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 + Collision 424 projectile=anti_xi_b0 Ekin[MeV]=9111.05 direction=(0.252125,0.232725,0.939294) material=G4_W + --> #secondaries=26 impactParameter[fm]=5.09125 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 425 projectile=kaon- Ekin[MeV]=21910.8 direction=(0.757828,0.133149,0.638724) material=G4_W + --> #secondaries=57 impactParameter[fm]=3.78454 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=3 + Collision 426 projectile=D- Ekin[MeV]=11670.3 direction=(0.361798,0.924175,0.122488) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.49014 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 427 projectile=omega- Ekin[MeV]=25339.1 direction=(0.10237,0.06106,0.992871) material=G4_Al + --> #secondaries=26 impactParameter[fm]=2.40742 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 428 projectile=xi_b- Ekin[MeV]=2947.77 direction=(0.585415,0.415148,0.696377) material=G4_Pb + --> #secondaries=21 impactParameter[fm]=3.31267 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=2 + Collision 429 projectile=anti_sigma+ Ekin[MeV]=5740.06 direction=(0.404871,0.30277,0.862792) material=G4_Si + --> #secondaries=17 impactParameter[fm]=3.36748 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 430 projectile=kaon- Ekin[MeV]=2721.08 direction=(0.637698,0.666806,0.38563) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 431 projectile=anti_He3 Ekin[MeV]=24463.2 direction=(0.516999,0.515864,0.683078) material=G4_He + --> #secondaries=10 impactParameter[fm]=0.779057 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 432 projectile=kaon+ Ekin[MeV]=3347.39 direction=(0.422161,0.746685,0.514044) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=3.85105 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 433 projectile=anti_sigma+ Ekin[MeV]=13469.1 direction=(0.560258,0.0986668,0.822421) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.45645 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 434 projectile=hyperHe5 Ekin[MeV]=20659.9 direction=(0.996226,0.0777078,0.0386751) material=G4_C + --> #secondaries=12 impactParameter[fm]=5.15089 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 435 projectile=Bc+ Ekin[MeV]=16943.5 direction=(0.498556,0.349782,0.793155) material=G4_He + --> #secondaries=4 impactParameter[fm]=0.953186 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 436 projectile=anti_lambda_b Ekin[MeV]=15028.4 direction=(0.175833,0.392295,0.902877) material=G4_Pb + --> #secondaries=78 impactParameter[fm]=3.55584 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=197 #NNcollisions=8 + Collision 437 projectile=xi- Ekin[MeV]=19915.3 direction=(0.622115,0.686609,0.376219) material=G4_Si + --> #secondaries=22 impactParameter[fm]=1.83329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 438 projectile=anti_B0 Ekin[MeV]=10312.2 direction=(0.342194,0.618125,0.70769) material=G4_Al + --> #secondaries=9 impactParameter[fm]=3.75227 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 439 projectile=hyperalpha Ekin[MeV]=5856.45 direction=(0.680014,0.729983,0.0685991) material=G4_Ar + --> #secondaries=36 impactParameter[fm]=0.864414 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=30 #NNcollisions=0 + Collision 440 projectile=Ds+ Ekin[MeV]=23920.4 direction=(0.0564766,0.93799,0.342031) material=G4_Si + --> #secondaries=16 impactParameter[fm]=1.65448 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 441 projectile=xi0 Ekin[MeV]=24102.4 direction=(0.390272,0.318239,0.863951) material=G4_Pb + --> #secondaries=60 impactParameter[fm]=5.92508 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 + Collision 442 projectile=alpha Ekin[MeV]=10861.5 direction=(0.0778968,0.891687,0.4459) material=G4_W + --> #secondaries=17 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 443 projectile=anti_omega- Ekin[MeV]=25930.6 direction=(0.118135,0.505856,0.854491) material=G4_C + --> #secondaries=15 impactParameter[fm]=1.0268 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 + Collision 444 projectile=Bs0 Ekin[MeV]=6888.67 direction=(0.665159,0.327651,0.670976) material=G4_Pb + --> #secondaries=23 impactParameter[fm]=5.52974 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 445 projectile=xi_b- Ekin[MeV]=10096.8 direction=(0.508978,0.596566,0.620525) material=G4_Si + --> #secondaries=8 impactParameter[fm]=3.22275 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 446 projectile=anti_omega_c0 Ekin[MeV]=29378.1 direction=(0.943344,0.24348,0.22543) material=G4_Pb + --> #secondaries=84 impactParameter[fm]=2.67463 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 + Collision 447 projectile=anti_Bs0 Ekin[MeV]=23559.1 direction=(0.574827,0.818067,0.0184529) material=G4_Be + --> #secondaries=8 impactParameter[fm]=0.478881 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 448 projectile=xi_c+ Ekin[MeV]=5479.08 direction=(0.378701,0.790435,0.481454) material=G4_Al + --> #secondaries=5 impactParameter[fm]=3.99459 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 449 projectile=anti_proton Ekin[MeV]=12108.7 direction=(0.48393,0.86625,0.12419) material=G4_C + --> #secondaries=10 impactParameter[fm]=2.21611 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 450 projectile=anti_hypertriton Ekin[MeV]=19556.1 direction=(0.789731,0.589875,0.16844) material=G4_Ar + --> #secondaries=39 impactParameter[fm]=2.53131 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=4 + Collision 451 projectile=hyperHe5 Ekin[MeV]=7003.32 direction=(0.982504,0.0655135,0.174339) material=G4_Ar + --> #secondaries=22 impactParameter[fm]=2.3852 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=36 #NNcollisions=1 + Collision 452 projectile=omega_c0 Ekin[MeV]=7572.75 direction=(0.716539,0.304296,0.627674) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=5.19325 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 453 projectile=omega_c0 Ekin[MeV]=3197.99 direction=(0.637762,0.046596,0.768823) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=1.58421 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=0 + Collision 454 projectile=anti_deuteron Ekin[MeV]=21372.4 direction=(0.233047,0.497459,0.835598) material=G4_Ar + --> #secondaries=40 impactParameter[fm]=2.13072 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=4 + Collision 455 projectile=hyperalpha Ekin[MeV]=19251.4 direction=(0.79762,0.528814,0.2901) material=G4_Pb + --> #secondaries=39 impactParameter[fm]=6.8061 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 456 projectile=lambda_b Ekin[MeV]=29996.1 direction=(0.674331,0.59443,0.438099) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=2.55353 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 457 projectile=omega- Ekin[MeV]=25165.7 direction=(0.789728,0.597189,0.14034) material=G4_Be + --> #secondaries=7 impactParameter[fm]=4.17862 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 458 projectile=kaon0L Ekin[MeV]=25710.7 direction=(0.373567,0.741453,0.557401) material=G4_C + --> #secondaries=15 impactParameter[fm]=2.0566 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 459 projectile=omega_c0 Ekin[MeV]=24249.1 direction=(0.313051,0.639778,0.701914) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=2.54483 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 + Collision 460 projectile=B- Ekin[MeV]=18694.8 direction=(0.113754,0.399844,0.909497) material=G4_Pb + --> #secondaries=43 impactParameter[fm]=4.77529 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 + Collision 461 projectile=Ds- Ekin[MeV]=1767.05 direction=(0.696886,0.537881,0.474379) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=2.42755 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=56 #NNcollisions=1 + Collision 462 projectile=neutron Ekin[MeV]=24428.4 direction=(0.347686,0.171347,0.921822) material=G4_Pb + --> #secondaries=40 impactParameter[fm]=7.06367 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 463 projectile=sigma+ Ekin[MeV]=1326.48 direction=(0.75484,0.550039,0.357315) material=G4_Be + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 464 projectile=lambda_c+ Ekin[MeV]=18513.5 direction=(0.53674,0.703425,0.465944) material=G4_Si + --> #secondaries=33 impactParameter[fm]=0.911662 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 465 projectile=anti_doublehyperH4 Ekin[MeV]=27312.9 direction=(0.638202,0.673017,0.373826) material=G4_Al + --> #secondaries=35 impactParameter[fm]=1.91396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=5 + Collision 466 projectile=D- Ekin[MeV]=24345.9 direction=(0.805928,0.34882,0.478336) material=G4_C + --> #secondaries=24 impactParameter[fm]=1.20089 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 467 projectile=anti_xi0 Ekin[MeV]=15577 direction=(0.650144,0.432865,0.624453) material=G4_C + --> #secondaries=17 impactParameter[fm]=2.53147 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 468 projectile=anti_sigma+ Ekin[MeV]=4523.62 direction=(0.182123,0.77251,0.608325) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=3.24781 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 469 projectile=anti_deuteron Ekin[MeV]=4488.46 direction=(0.688267,0.657059,0.30751) material=G4_W + --> #secondaries=87 impactParameter[fm]=1.66955 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 470 projectile=anti_xi_c+ Ekin[MeV]=8818.08 direction=(0.526191,0.849945,0.02678) material=G4_Si + --> #secondaries=18 impactParameter[fm]=2.94311 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 471 projectile=anti_doublehyperH4 Ekin[MeV]=1950.77 direction=(0.449439,0.729017,0.516274) material=G4_Si + --> #secondaries=33 impactParameter[fm]=3.66415 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 472 projectile=anti_doublehyperH4 Ekin[MeV]=23463.3 direction=(0.652106,0.61622,0.441624) material=G4_C + --> #secondaries=16 impactParameter[fm]=5.07226 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 473 projectile=anti_neutron Ekin[MeV]=20281.9 direction=(0.575795,0.542947,0.611285) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=3.65632 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 474 projectile=omega_c0 Ekin[MeV]=25713.9 direction=(0.614937,0.76181,0.203713) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.9386 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 475 projectile=anti_hyperalpha Ekin[MeV]=23997.1 direction=(0.399369,0.73626,0.546284) material=G4_He + --> #secondaries=8 impactParameter[fm]=3.07008 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 476 projectile=hyperalpha Ekin[MeV]=22593.6 direction=(0.78172,0.347416,0.517896) material=G4_Cu + --> #secondaries=30 impactParameter[fm]=5.2098 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=63 #NNcollisions=3 + Collision 477 projectile=anti_triton Ekin[MeV]=16160.9 direction=(0.178389,0.784176,0.594344) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.79434 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 478 projectile=anti_triton Ekin[MeV]=21553.7 direction=(0.22996,0.704796,0.671104) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=8.36389 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 479 projectile=hypertriton Ekin[MeV]=20961.8 direction=(0.820655,0.568651,0.056222) material=G4_Al + --> #secondaries=29 impactParameter[fm]=4.45403 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 480 projectile=anti_omega_b- Ekin[MeV]=8069.15 direction=(0.213484,0.157403,0.964183) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=4.1781 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 481 projectile=alpha Ekin[MeV]=25189.6 direction=(0.238252,0.926728,0.290536) material=G4_Fe + --> #secondaries=54 impactParameter[fm]=3.62084 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=48 #NNcollisions=4 + Collision 482 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=17441.1 direction=(0.0745688,0.396398,0.915045) material=G4_C + --> #secondaries=14 impactParameter[fm]=3.79106 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 483 projectile=anti_omega_c0 Ekin[MeV]=2120.47 direction=(0.52482,0.0561414,0.84936) material=G4_W + --> #secondaries=27 impactParameter[fm]=5.70281 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=0 + Collision 484 projectile=Bc+ Ekin[MeV]=29027.8 direction=(0.293187,0.731429,0.615673) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=2.58468 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 485 projectile=anti_sigma- Ekin[MeV]=8638.74 direction=(0.0712814,0.28332,0.956373) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=3.1679 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 486 projectile=xi_b0 Ekin[MeV]=24944.1 direction=(0.846378,0.246339,0.472188) material=G4_Cu + --> #secondaries=28 impactParameter[fm]=2.73376 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=1 + Collision 487 projectile=Bc- Ekin[MeV]=13544.6 direction=(0.795352,0.31133,0.520085) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=1.33817 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 488 projectile=omega_c0 Ekin[MeV]=20119.6 direction=(0.521338,0.100516,0.84741) material=G4_Si + --> #secondaries=20 impactParameter[fm]=3.14414 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 489 projectile=neutron Ekin[MeV]=4055.58 direction=(0.875917,0.254115,0.410117) material=G4_Al + --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 490 projectile=anti_xi_c+ Ekin[MeV]=23953.4 direction=(0.599444,0.403735,0.691133) material=G4_Si + --> #secondaries=20 impactParameter[fm]=3.68933 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 491 projectile=xi_c+ Ekin[MeV]=18348.9 direction=(0.787073,0.100082,0.608687) material=G4_C + --> #secondaries=10 impactParameter[fm]=2.44342 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 492 projectile=pi- Ekin[MeV]=4067.32 direction=(0.700686,0.18199,0.689869) material=G4_Be + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 493 projectile=B0 Ekin[MeV]=7943.01 direction=(0.268186,0.867087,0.419806) material=G4_Fe + --> #secondaries=14 impactParameter[fm]=3.2468 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 494 projectile=Bc+ Ekin[MeV]=13370.2 direction=(0.519346,0.300945,0.79982) material=G4_Be + --> #secondaries=5 impactParameter[fm]=0.697579 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 495 projectile=hyperH4 Ekin[MeV]=13481.5 direction=(0.397549,0.712033,0.578761) material=G4_Fe + --> #secondaries=56 impactParameter[fm]=3.73767 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=45 #NNcollisions=6 + Collision 496 projectile=sigma+ Ekin[MeV]=19122.8 direction=(0.706534,0.00476999,0.707663) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.897226 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 497 projectile=anti_omega- Ekin[MeV]=23448.8 direction=(0.272474,0.695601,0.664753) material=G4_Cu + --> #secondaries=33 impactParameter[fm]=3.68507 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 498 projectile=anti_xi_c0 Ekin[MeV]=2226.53 direction=(0.747571,0.642351,0.16889) material=G4_Si + --> #secondaries=18 impactParameter[fm]=0.752903 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=0 + Collision 499 projectile=anti_doublehyperH4 Ekin[MeV]=16398.8 direction=(0.515482,0.303507,0.80135) material=G4_H + --> #secondaries=11 impactParameter[fm]=0.769399 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=3 + Collision 500 projectile=xi_b0 Ekin[MeV]=15483.6 direction=(0.644069,0.642797,0.414713) material=G4_C + --> #secondaries=10 impactParameter[fm]=2.74568 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + List of produced secondaries: + j=0 lambda_b p=(11131.4,11634.8,7292.7818548.4) MeV + j=1 pi+ p=(85.1208,-18.4601,159.689229.274) MeV + j=2 kaon- p=(1131.66,535.939,444.7571417.53) MeV + j=3 proton p=(582.367,607.432,443.1711335.99) MeV + j=4 pi0 p=(254.496,443.399,211.978569.67) MeV + j=5 neutron p=(-62.0582,-27.6188,10.6117942.077) MeV + j=6 deuteron p=(-123.316,195.469,129.0271894.2) MeV + j=7 deuteron p=(-15.5001,87.8293,53.35631878.49) MeV + j=8 deuteron p=(177.508,-9.28627,-210.8991895.78) MeV + j=9 alpha p=(23.6976,-290.211,-44.48523739) MeV + Collision 501 projectile=xi_c0 Ekin[MeV]=18403.9 direction=(0.798138,0.586894,0.136129) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.49762 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 502 projectile=neutron Ekin[MeV]=3312.21 direction=(0.374876,0.183637,0.908705) material=G4_Si + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 503 projectile=anti_He3 Ekin[MeV]=28911.6 direction=(0.34395,0.57908,0.739165) material=G4_W + --> #secondaries=64 impactParameter[fm]=6.16569 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=183 #NNcollisions=5 + Collision 504 projectile=anti_hyperH4 Ekin[MeV]=4779.7 direction=(0.26373,0.951153,0.160483) material=G4_W + --> #secondaries=82 impactParameter[fm]=3.48478 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=4 + Collision 505 projectile=anti_doublehyperH4 Ekin[MeV]=9304.23 direction=(0.359317,0.664068,0.655671) material=G4_H + --> #secondaries=4 impactParameter[fm]=2.76865 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 506 projectile=kaon0S Ekin[MeV]=26315 direction=(0.151691,0.93333,0.325399) material=G4_Cu + --> #secondaries=33 impactParameter[fm]=2.8695 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=4 + Collision 507 projectile=kaon+ Ekin[MeV]=6495.71 direction=(0.688514,0.21178,0.693612) material=G4_Al + --> #secondaries=12 impactParameter[fm]=1.16224 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 508 projectile=anti_xi_c0 Ekin[MeV]=9735.8 direction=(0.290197,0.874189,0.389332) material=G4_Cu + --> #secondaries=23 impactParameter[fm]=4.75205 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 509 projectile=deuteron Ekin[MeV]=18010.9 direction=(0.911056,0.394891,0.118483) material=G4_He + --> #secondaries=11 impactParameter[fm]=0.673884 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 510 projectile=D0 Ekin[MeV]=26203.7 direction=(0.335785,0.575798,0.745456) material=G4_H + --> #secondaries=11 impactParameter[fm]=0.849898 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 511 projectile=hyperalpha Ekin[MeV]=6639.44 direction=(0.385734,0.90108,0.198153) material=G4_Be + --> #secondaries=10 impactParameter[fm]=3.31269 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=6 #NNcollisions=0 + Collision 512 projectile=Bs0 Ekin[MeV]=3646.01 direction=(0.494381,0.481279,0.72385) material=G4_Si + --> #secondaries=9 impactParameter[fm]=2.84133 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 513 projectile=anti_B0 Ekin[MeV]=18828.6 direction=(0.670196,0.740589,0.0486386) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=3.25474 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 514 projectile=xi_b- Ekin[MeV]=6960.43 direction=(0.21604,0.57734,0.787404) material=G4_Al + --> #secondaries=13 impactParameter[fm]=3.1714 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 515 projectile=hyperHe5 Ekin[MeV]=24142.4 direction=(0.637724,0.620194,0.456801) material=G4_H + --> #secondaries=7 impactParameter[fm]=2.708 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 516 projectile=sigma- Ekin[MeV]=6499.6 direction=(0.47478,0.263632,0.839691) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.481138 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 517 projectile=anti_neutron Ekin[MeV]=13073.9 direction=(0.774519,0.0866871,0.626583) material=G4_Si + --> #secondaries=20 impactParameter[fm]=3.79374 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=2 + Collision 518 projectile=anti_hyperH4 Ekin[MeV]=6355.91 direction=(0.689612,0.0854012,0.719126) material=G4_Be + --> #secondaries=11 impactParameter[fm]=4.88322 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 519 projectile=anti_doublehyperH4 Ekin[MeV]=9991 direction=(0.654442,0.00819432,0.756067) material=G4_Si + --> #secondaries=40 impactParameter[fm]=2.85341 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=4 + Collision 520 projectile=pi+ Ekin[MeV]=6741.79 direction=(0.566732,0.282094,0.774104) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=3.98403 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 521 projectile=kaon- Ekin[MeV]=19834.1 direction=(0.359397,0.852367,0.379874) material=G4_Si + --> #secondaries=17 impactParameter[fm]=1.78007 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 522 projectile=lambda_c+ Ekin[MeV]=9312.09 direction=(0.69331,0.64589,0.319606) material=G4_Si + --> #secondaries=17 impactParameter[fm]=4.36571 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 523 projectile=sigma- Ekin[MeV]=8024.33 direction=(0.614046,0.239431,0.752077) material=G4_He + --> #secondaries=6 impactParameter[fm]=2.13532 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 524 projectile=hyperH4 Ekin[MeV]=2323.32 direction=(0.711859,0.639746,0.289798) material=G4_Be + --> #secondaries=7 impactParameter[fm]=3.3462 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=7 #NNcollisions=0 + Collision 525 projectile=omega_c0 Ekin[MeV]=3909.59 direction=(0.0491573,0.690266,0.721884) material=G4_Cu + --> #secondaries=32 impactParameter[fm]=3.75429 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=2 + Collision 526 projectile=kaon0L Ekin[MeV]=11257.7 direction=(0.902055,0.143638,0.407019) material=G4_Pb + --> #secondaries=18 impactParameter[fm]=6.53026 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 527 projectile=anti_xi_b0 Ekin[MeV]=28710.1 direction=(0.692321,0.712129,0.116469) material=G4_Be + --> #secondaries=12 impactParameter[fm]=1.82496 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 528 projectile=xi- Ekin[MeV]=15606.3 direction=(0.693313,0.29875,0.655794) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.98971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 529 projectile=deuteron Ekin[MeV]=14281.9 direction=(0.549103,0.804628,0.225965) material=G4_Ar + --> #secondaries=24 impactParameter[fm]=3.70237 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 530 projectile=anti_xi_b- Ekin[MeV]=17303.1 direction=(0.3196,0.728061,0.606451) material=G4_Fe + --> #secondaries=59 impactParameter[fm]=1.00284 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=47 #NNcollisions=6 + Collision 531 projectile=anti_alpha Ekin[MeV]=29180.4 direction=(0.128918,0.973024,0.191321) material=G4_Fe + --> #secondaries=50 impactParameter[fm]=3.30709 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=53 #NNcollisions=4 + Collision 532 projectile=anti_deuteron Ekin[MeV]=16980.5 direction=(0.789624,0.343604,0.508361) material=G4_Cu + --> #secondaries=62 impactParameter[fm]=1.28547 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=4 + Collision 533 projectile=anti_sigma- Ekin[MeV]=13262.2 direction=(0.233382,0.950493,0.205173) material=G4_H + --> #secondaries=10 impactParameter[fm]=0.265459 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 534 projectile=He3 Ekin[MeV]=20614.4 direction=(0.427684,0.899763,0.086681) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=5.44824 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 535 projectile=Ds- Ekin[MeV]=27436.1 direction=(0.728307,0.636806,0.253076) material=G4_Pb + --> #secondaries=46 impactParameter[fm]=2.99652 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=0 + Collision 536 projectile=anti_doublehyperH4 Ekin[MeV]=5744.58 direction=(0.340721,0.80283,0.489257) material=G4_H + --> #secondaries=7 impactParameter[fm]=2.33667 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 537 projectile=anti_deuteron Ekin[MeV]=26474 direction=(0.67595,0.139374,0.723648) material=G4_W + --> #secondaries=27 impactParameter[fm]=7.48289 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 538 projectile=anti_Bs0 Ekin[MeV]=17144.5 direction=(0.591803,0.735044,0.330876) material=G4_Si + --> #secondaries=8 impactParameter[fm]=4.30474 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 539 projectile=anti_hypertriton Ekin[MeV]=27589.5 direction=(0.869192,0.0381652,0.492999) material=G4_Be + --> #secondaries=18 impactParameter[fm]=2.86337 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=4 + Collision 540 projectile=xi0 Ekin[MeV]=2464.19 direction=(0.387872,0.918375,0.0783727) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 541 projectile=anti_hyperHe5 Ekin[MeV]=20405.6 direction=(0.18179,0.178489,0.967003) material=G4_C + --> #secondaries=24 impactParameter[fm]=2.06513 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=3 + Collision 542 projectile=xi_b- Ekin[MeV]=15164.3 direction=(0.377484,0.700904,0.605178) material=G4_Be + --> #secondaries=7 impactParameter[fm]=1.03148 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 543 projectile=D+ Ekin[MeV]=14978 direction=(0.682506,0.340086,0.646937) material=G4_C + --> #secondaries=13 impactParameter[fm]=0.84363 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 544 projectile=xi_c0 Ekin[MeV]=16753.1 direction=(0.723893,0.644059,0.24732) material=G4_Si + --> #secondaries=22 impactParameter[fm]=1.2416 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 545 projectile=anti_D0 Ekin[MeV]=26310.8 direction=(0.860129,0.109535,0.498177) material=G4_Ar + --> #secondaries=30 impactParameter[fm]=1.59067 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 546 projectile=anti_alpha Ekin[MeV]=29467 direction=(0.673575,0.301891,0.674654) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=5.97424 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 547 projectile=doublehyperdoubleneutron Ekin[MeV]=18992.3 direction=(0.0159989,0.749278,0.662063) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.3132 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 548 projectile=anti_lambda_c+ Ekin[MeV]=9820.84 direction=(0.565859,0.243888,0.787606) material=G4_W + --> #secondaries=15 impactParameter[fm]=7.08999 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 549 projectile=anti_deuteron Ekin[MeV]=3379.3 direction=(0.163,0.864719,0.47507) material=G4_Si + --> #secondaries=30 impactParameter[fm]=4.03882 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 550 projectile=neutron Ekin[MeV]=18298.6 direction=(0.684097,0.551334,0.477537) material=G4_C + --> #secondaries=4 impactParameter[fm]=3.11707 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 551 projectile=Bc- Ekin[MeV]=21324.4 direction=(0.411331,0.626359,0.662179) material=G4_Pb + --> #secondaries=17 impactParameter[fm]=5.22441 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=0 + Collision 552 projectile=anti_lambda Ekin[MeV]=17321.2 direction=(0.213407,0.945975,0.244109) material=G4_W + --> #secondaries=84 impactParameter[fm]=1.47767 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 553 projectile=neutron Ekin[MeV]=3169.38 direction=(0.336644,0.678854,0.652555) material=G4_Cu + --> #secondaries=20 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 554 projectile=xi_c0 Ekin[MeV]=27280.7 direction=(0.393584,0.0370155,0.918543) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=2.77491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 555 projectile=anti_neutron Ekin[MeV]=22335.7 direction=(0.810026,0.579167,0.0917812) material=G4_Fe + --> #secondaries=14 impactParameter[fm]=5.87737 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 556 projectile=xi_c0 Ekin[MeV]=24536.3 direction=(0.603882,0.486219,0.631599) material=G4_C + --> #secondaries=16 impactParameter[fm]=2.94799 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 557 projectile=D0 Ekin[MeV]=4299.53 direction=(0.37202,0.788901,0.489118) material=G4_Be + --> #secondaries=5 impactParameter[fm]=4.83252 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 558 projectile=D+ Ekin[MeV]=17249.2 direction=(0.578952,0.505907,0.639432) material=G4_Fe + --> #secondaries=24 impactParameter[fm]=2.12144 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 559 projectile=omega- Ekin[MeV]=14866.6 direction=(0.593274,0.469977,0.653566) material=G4_Cu + --> #secondaries=53 impactParameter[fm]=1.92924 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 + Collision 560 projectile=anti_D0 Ekin[MeV]=12156.3 direction=(0.23331,0.553967,0.799179) material=G4_Pb + --> #secondaries=57 impactParameter[fm]=3.67377 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=202 #NNcollisions=4 + Collision 561 projectile=hypertriton Ekin[MeV]=9278.14 direction=(0.589623,0.42614,0.686112) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=7.14737 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 562 projectile=anti_xi_c0 Ekin[MeV]=14433.3 direction=(0.674834,0.40296,0.618241) material=G4_W + --> #secondaries=53 impactParameter[fm]=4.91933 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 + Collision 563 projectile=lambda Ekin[MeV]=13613.2 direction=(0.0591546,0.0374428,0.997546) material=G4_W + --> #secondaries=65 impactParameter[fm]=5.77678 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=5 + Collision 564 projectile=anti_hypertriton Ekin[MeV]=15837.3 direction=(0.358451,0.863992,0.353598) material=G4_He + --> #secondaries=13 impactParameter[fm]=2.25642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=3 + Collision 565 projectile=anti_lambda Ekin[MeV]=27815.4 direction=(0.290246,0.923938,0.249189) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.50615 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 566 projectile=lambda_b Ekin[MeV]=6302.43 direction=(0.619482,0.178239,0.764508) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=2.7603 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 567 projectile=anti_xi- Ekin[MeV]=25317.4 direction=(0.824313,0.525153,0.211477) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=3.00115 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 568 projectile=anti_doublehyperH4 Ekin[MeV]=16482.9 direction=(0.304726,0.210359,0.928919) material=G4_Al + --> #secondaries=15 impactParameter[fm]=3.69638 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 569 projectile=anti_doublehyperH4 Ekin[MeV]=3901.04 direction=(0.74236,0.405437,0.533407) material=G4_Cu + --> #secondaries=46 impactParameter[fm]=2.46419 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=4 + Collision 570 projectile=Bc- Ekin[MeV]=15873.8 direction=(0.668508,0.608788,0.42717) material=G4_Al + --> #secondaries=12 impactParameter[fm]=2.10276 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 571 projectile=anti_hypertriton Ekin[MeV]=14774.3 direction=(0.306405,0.863403,0.400815) material=G4_Al + --> #secondaries=31 impactParameter[fm]=2.7342 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=2 + Collision 572 projectile=doublehyperH4 Ekin[MeV]=22675.7 direction=(0.686315,0.181971,0.704172) material=G4_Si + --> #secondaries=10 impactParameter[fm]=5.08051 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 573 projectile=anti_hypertriton Ekin[MeV]=22145.1 direction=(0.141801,0.745023,0.651792) material=G4_Cu + --> #secondaries=53 impactParameter[fm]=3.86296 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=3 + Collision 574 projectile=anti_proton Ekin[MeV]=17348.1 direction=(0.899547,0.238984,0.365653) material=G4_Fe + --> #secondaries=48 impactParameter[fm]=2.77283 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 575 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28626 direction=(0.605804,0.44697,0.658194) material=G4_Al + --> #secondaries=48 impactParameter[fm]=0.967758 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=21 #NNcollisions=10 + Collision 576 projectile=omega_b- Ekin[MeV]=8288.5 direction=(0.377622,0.749453,0.543803) material=G4_Fe + --> #secondaries=6 impactParameter[fm]=3.05844 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 577 projectile=xi_b0 Ekin[MeV]=5309.22 direction=(0.776218,0.624325,0.0877675) material=G4_Ar + --> #secondaries=20 impactParameter[fm]=0.535092 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=4 + Collision 578 projectile=anti_xi0 Ekin[MeV]=3632.58 direction=(0.360001,0.632899,0.685448) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=0.0718034 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 579 projectile=triton Ekin[MeV]=18120.2 direction=(0.553391,0.524518,0.647023) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=5.48278 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 580 projectile=kaon0S Ekin[MeV]=19908.9 direction=(0.104509,0.190612,0.976086) material=G4_Fe + --> #secondaries=25 impactParameter[fm]=2.32002 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=0 + Collision 581 projectile=D0 Ekin[MeV]=3299.23 direction=(0.0380577,0.924394,0.379536) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.990675 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 582 projectile=omega_b- Ekin[MeV]=25964.5 direction=(0.623745,0.678031,0.388865) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=3.40895 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 583 projectile=D+ Ekin[MeV]=13566 direction=(0.677387,0.247576,0.692714) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.99693 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 584 projectile=anti_lambda_c+ Ekin[MeV]=27179.9 direction=(0.673384,0.251456,0.695216) material=G4_Si + --> #secondaries=21 impactParameter[fm]=2.41045 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 585 projectile=anti_xi_b- Ekin[MeV]=4162.75 direction=(0.592655,0.218086,0.77537) material=G4_Al + --> #secondaries=9 impactParameter[fm]=1.82233 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=0 + Collision 586 projectile=deuteron Ekin[MeV]=4393.41 direction=(0.156499,0.606835,0.779269) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 587 projectile=anti_omega_c0 Ekin[MeV]=29784.5 direction=(0.240697,0.480996,0.843035) material=G4_Al + --> #secondaries=12 impactParameter[fm]=1.70232 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 588 projectile=proton Ekin[MeV]=3611.03 direction=(0.720777,0.103737,0.685361) material=G4_Ar + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 589 projectile=hyperHe5 Ekin[MeV]=22023.9 direction=(0.234378,0.575618,0.78341) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.71416 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 590 projectile=anti_D0 Ekin[MeV]=6737.77 direction=(0.696965,0.36352,0.618136) material=G4_Al + --> #secondaries=9 impactParameter[fm]=4.91511 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 591 projectile=xi0 Ekin[MeV]=17641.6 direction=(0.226893,0.638756,0.735195) material=G4_Si + --> #secondaries=13 impactParameter[fm]=4.12937 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 592 projectile=anti_proton Ekin[MeV]=25547 direction=(0.79486,0.0605132,0.603768) material=G4_Al + --> #secondaries=20 impactParameter[fm]=1.90821 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=1 + Collision 593 projectile=omega_c0 Ekin[MeV]=28247.1 direction=(0.523366,0.809768,0.265262) material=G4_W + --> #secondaries=71 impactParameter[fm]=1.65712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 + Collision 594 projectile=anti_xi_c+ Ekin[MeV]=20413.8 direction=(0.600426,0.68361,0.414929) material=G4_C + --> #secondaries=18 impactParameter[fm]=2.17561 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 595 projectile=deuteron Ekin[MeV]=6038.14 direction=(0.0774642,0.952393,0.294869) material=G4_Fe + --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 596 projectile=hypertriton Ekin[MeV]=15847.2 direction=(0.507619,0.104907,0.855171) material=G4_Be + --> #secondaries=19 impactParameter[fm]=1.81724 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 597 projectile=Bs0 Ekin[MeV]=13338.4 direction=(0.195529,0.602754,0.7736) material=G4_He + --> #secondaries=8 impactParameter[fm]=2.36424 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 598 projectile=Ds+ Ekin[MeV]=15137.3 direction=(0.618505,0.463247,0.634708) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=5.65318 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 599 projectile=pi- Ekin[MeV]=27893 direction=(0.527297,0.62176,0.579113) material=G4_C + --> #secondaries=16 impactParameter[fm]=1.37536 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 600 projectile=anti_hyperalpha Ekin[MeV]=15776.3 direction=(0.267625,0.552966,0.789054) material=G4_Pb + --> #secondaries=44 impactParameter[fm]=7.84322 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=207 #NNcollisions=1 + List of produced secondaries: + j=0 eta_prime p=(374.437,1317.77,1762.612429.16) MeV + j=1 pi0 p=(29.0566,564.202,1116.611258.65) MeV + j=2 pi- p=(307.19,193.953,192.126434.023) MeV + j=3 kaon0S p=(-86.9598,265.113,399.487696.46) MeV + j=4 pi0 p=(701.872,658.543,491.6591089.15) MeV + j=5 pi+ p=(118.611,-77.6202,426.495470.607) MeV + j=6 deuteron p=(-254.824,248.13,-228.1311922.62) MeV + j=7 neutron p=(282.972,-126.288,287.8721030.38) MeV + j=8 neutron p=(-269.815,74.5621,56.3047981.994) MeV + j=9 neutron p=(235.23,-149.575,14.3032980.15) MeV + j=10 proton p=(-251.953,-221.407,228.8711022.37) MeV + j=11 neutron p=(-43.8816,-31.6719,39.2201941.939) MeV + j=12 neutron p=(12.9757,34.6213,-177.105956.826) MeV + j=13 proton p=(172.73,-25.033,214.972978.279) MeV + j=14 neutron p=(72.2134,119.392,-98.8613955) MeV + j=15 neutron p=(-122.192,-32.1693,-2.74555948.028) MeV + j=16 neutron p=(-39.9749,125.558,-145.515959.854) MeV + j=17 proton p=(20.218,-122.76,106.162952.42) MeV + j=18 Pt184 p=(301.122,535.385,121.52171319) MeV + j=19 neutron p=(58.5949,8.21363,-45.5159942.526) MeV + j=20 neutron p=(109.321,-20.4725,-11.4991946.195) MeV + j=21 neutron p=(-45.8875,-103.837,3.65988946.406) MeV + j=22 neutron p=(72.273,6.02458,38.8928943.162) MeV + j=23 neutron p=(-4.16408,23.3369,-46.2259941) MeV + j=24 neutron p=(-29.9131,-27.4655,-28.2854940.868) MeV + j=25 neutron p=(-13.2363,74.1254,-11.7281942.651) MeV + j=26 neutron p=(-23.3651,-45.6228,9.79893941.014) MeV + j=27 neutron p=(3.50544,32.902,19.224940.344) MeV + j=28 neutron p=(-19.3032,17.8795,-14.1268940.04) MeV + j=29 gamma p=(-2.13255,-1.95111,-1.352033.19102) MeV + j=30 gamma p=(-0.0644298,0.829209,0.1848560.852004) MeV + j=31 gamma p=(0.0145261,0.7121,-0.3438250.790894) MeV + j=32 gamma p=(-0.457315,0.355672,0.4451610.730622) MeV + j=33 gamma p=(-0.0316055,-0.462116,-0.4865160.67175) MeV + j=34 gamma p=(-0.239666,-0.0366611,0.5752690.624274) MeV + j=35 gamma p=(-0.307824,-0.483557,0.115440.58473) MeV + j=36 gamma p=(0.419125,0.163374,0.3279220.556677) MeV + j=37 gamma p=(0.229842,-0.466494,0.0371940.521371) MeV + j=38 gamma p=(-0.456044,-0.0926773,-0.1725160.496313) MeV + j=39 gamma p=(0.0651628,0.449148,0.1495980.47787) MeV + j=40 gamma p=(-0.243894,-0.685646,0.7782891.06552) MeV + j=41 gamma p=(0.0294681,-0.140055,0.07726970.162648) MeV + j=42 anti_deuteron p=(2379.21,4473.97,5978.158058.11) MeV + j=43 anti_proton p=(1111.81,2897.59,4522.935565.01) MeV + Collision 601 projectile=triton Ekin[MeV]=15939.7 direction=(0.774044,0.604601,0.187919) material=G4_Si + --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 602 projectile=xi_c+ Ekin[MeV]=27998.2 direction=(0.637808,0.396922,0.660041) material=G4_Pb + --> #secondaries=34 impactParameter[fm]=6.20403 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 603 projectile=anti_hypertriton Ekin[MeV]=1085.41 direction=(0.614494,0.466409,0.636286) material=G4_Pb + --> #secondaries=29 impactParameter[fm]=6.74224 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=3 + Collision 604 projectile=kaon0S Ekin[MeV]=15586.3 direction=(0.130851,0.601025,0.788446) material=G4_Fe + --> #secondaries=20 impactParameter[fm]=4.50067 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 605 projectile=anti_deuteron Ekin[MeV]=6158.01 direction=(0.174593,0.702199,0.690242) material=G4_Al + --> #secondaries=24 impactParameter[fm]=1.12387 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 606 projectile=D0 Ekin[MeV]=14179.1 direction=(0.834897,0.3763,0.401678) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=2.25905 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 607 projectile=Bs0 Ekin[MeV]=21722.8 direction=(0.497191,0.694422,0.520172) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.91017 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 608 projectile=anti_hyperHe5 Ekin[MeV]=10956.4 direction=(0.810982,0.584691,0.021081) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.20608 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 609 projectile=sigma+ Ekin[MeV]=20326.1 direction=(0.573724,0.764331,0.294347) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.9553 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 610 projectile=anti_xi_b0 Ekin[MeV]=13935.8 direction=(0.936075,0.335066,0.107216) material=G4_Ar + --> #secondaries=11 impactParameter[fm]=4.25971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 611 projectile=anti_lambda_b Ekin[MeV]=26940.2 direction=(0.749203,0.0060783,0.662312) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.7541 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 612 projectile=hyperH4 Ekin[MeV]=23877.1 direction=(0.311475,0.325313,0.892835) material=G4_Ar + --> #secondaries=47 impactParameter[fm]=4.12156 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=34 #NNcollisions=5 + Collision 613 projectile=anti_xi0 Ekin[MeV]=11788.3 direction=(0.0680229,0.638826,0.766338) material=G4_Si + --> #secondaries=22 impactParameter[fm]=2.15068 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 614 projectile=deuteron Ekin[MeV]=18205.3 direction=(0.440194,0.893031,0.0934048) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.654549 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=2 + Collision 615 projectile=kaon0S Ekin[MeV]=23399.7 direction=(0.763186,0.618825,0.186019) material=G4_Pb + --> #secondaries=62 impactParameter[fm]=0.776166 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 616 projectile=hyperH4 Ekin[MeV]=15494 direction=(0.543874,0.730608,0.412812) material=G4_C + --> #secondaries=20 impactParameter[fm]=0.679535 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=4 + Collision 617 projectile=anti_hyperH4 Ekin[MeV]=20947.1 direction=(0.050436,0.432945,0.900008) material=G4_W + --> #secondaries=64 impactParameter[fm]=6.95032 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=6 + Collision 618 projectile=anti_omega- Ekin[MeV]=10134.3 direction=(0.648303,0.491192,0.581751) material=G4_Ar + --> #secondaries=32 impactParameter[fm]=4.08057 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 619 projectile=xi_b0 Ekin[MeV]=16638.3 direction=(0.775826,0.591175,0.220467) material=G4_Pb + --> #secondaries=25 impactParameter[fm]=6.51308 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 620 projectile=anti_hypertriton Ekin[MeV]=4961.64 direction=(0.661532,0.749902,0.00480294) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.7454 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 621 projectile=anti_omega_c0 Ekin[MeV]=9234.67 direction=(0.440448,0.441754,0.781574) material=G4_Al + --> #secondaries=9 impactParameter[fm]=2.84992 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 622 projectile=B+ Ekin[MeV]=5784.51 direction=(0.548642,0.556315,0.624103) material=G4_He + --> #secondaries=16 impactParameter[fm]=1.27033 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 623 projectile=D+ Ekin[MeV]=29068 direction=(0.649005,0.241532,0.721426) material=G4_Al + --> #secondaries=10 impactParameter[fm]=1.98803 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 624 projectile=xi_b0 Ekin[MeV]=15568.1 direction=(0.70605,0.0332684,0.70738) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=3.42235 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=1 + Collision 625 projectile=hyperHe5 Ekin[MeV]=17650.8 direction=(0.355085,0.63498,0.686086) material=G4_Fe + --> #secondaries=14 impactParameter[fm]=7.40085 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 626 projectile=xi_c+ Ekin[MeV]=2877.72 direction=(0.822172,0.558867,0.108174) material=G4_W + --> #secondaries=41 impactParameter[fm]=1.65591 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 + Collision 627 projectile=anti_xi- Ekin[MeV]=1221.04 direction=(0.532333,0.730803,0.427257) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=4.60801 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 628 projectile=sigma- Ekin[MeV]=5646.52 direction=(0.947413,0.313717,0.0631771) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.27043 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 629 projectile=anti_xi_b0 Ekin[MeV]=20842.3 direction=(0.318378,0.786193,0.529656) material=G4_W + --> #secondaries=82 impactParameter[fm]=4.08168 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=6 + Collision 630 projectile=B+ Ekin[MeV]=14376.6 direction=(0.497451,0.561708,0.66108) material=G4_W + --> #secondaries=37 impactParameter[fm]=2.74825 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=3 + Collision 631 projectile=Bc- Ekin[MeV]=26184.2 direction=(0.421441,0.67741,0.602912) material=G4_W + --> #secondaries=26 impactParameter[fm]=6.77725 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 632 projectile=anti_xi_c0 Ekin[MeV]=28527.5 direction=(0.403592,0.673407,0.619384) material=G4_Pb + --> #secondaries=100 impactParameter[fm]=4.46276 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=5 + Collision 633 projectile=B+ Ekin[MeV]=5550.89 direction=(0.835754,0.144874,0.529648) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=2.69686 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 634 projectile=D+ Ekin[MeV]=2812.54 direction=(0.844146,0.529844,0.0817512) material=G4_Si + --> #secondaries=8 impactParameter[fm]=3.07351 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 635 projectile=anti_triton Ekin[MeV]=3752.98 direction=(0.567292,0.650406,0.505126) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.527487 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 636 projectile=anti_xi_c+ Ekin[MeV]=27593.5 direction=(0.589959,0.344191,0.730398) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=2.73966 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 637 projectile=pi+ Ekin[MeV]=8540.41 direction=(0.123665,0.889329,0.440228) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.06482 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 638 projectile=anti_sigma- Ekin[MeV]=17409.1 direction=(0.604451,0.497456,0.622235) material=G4_C + --> #secondaries=25 impactParameter[fm]=0.928836 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=5 + Collision 639 projectile=D+ Ekin[MeV]=21048.4 direction=(0.35398,0.335596,0.872968) material=G4_Pb + --> #secondaries=21 impactParameter[fm]=7.2004 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 640 projectile=anti_deuteron Ekin[MeV]=25062.6 direction=(0.961621,0.165217,0.219061) material=G4_H + --> #secondaries=10 impactParameter[fm]=1.43007 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 641 projectile=hyperHe5 Ekin[MeV]=13458.5 direction=(0.60337,0.517188,0.60701) material=G4_Al + --> #secondaries=22 impactParameter[fm]=2.94396 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 642 projectile=Ds- Ekin[MeV]=7001.08 direction=(0.778029,0.398579,0.485598) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=2.62056 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 643 projectile=kaon- Ekin[MeV]=11310.3 direction=(0.64719,0.253012,0.719118) material=G4_Pb + --> #secondaries=28 impactParameter[fm]=6.1066 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 644 projectile=kaon- Ekin[MeV]=15955.4 direction=(0.435795,0.379335,0.816203) material=G4_Fe + --> #secondaries=7 impactParameter[fm]=5.13893 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 645 projectile=anti_xi_c0 Ekin[MeV]=25101.4 direction=(0.762984,0.619765,0.183703) material=G4_W + --> #secondaries=48 impactParameter[fm]=4.55554 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 646 projectile=anti_lambda Ekin[MeV]=24287.5 direction=(0.681944,0.727964,0.0708607) material=G4_C + --> #secondaries=15 impactParameter[fm]=2.66646 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 647 projectile=lambda Ekin[MeV]=9663.64 direction=(0.67229,0.71709,0.183871) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.44187 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 648 projectile=anti_hypertriton Ekin[MeV]=26910.4 direction=(0.656052,0.657741,0.370099) material=G4_Pb + --> #secondaries=81 impactParameter[fm]=6.16703 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=4 + Collision 649 projectile=Ds+ Ekin[MeV]=9919.7 direction=(0.822524,0.485221,0.296673) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.658322 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 650 projectile=D- Ekin[MeV]=26915.6 direction=(0.346031,0.738332,0.578903) material=G4_Be + --> #secondaries=13 impactParameter[fm]=0.588079 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 651 projectile=anti_doublehyperH4 Ekin[MeV]=7430.71 direction=(0.7737,0.129715,0.620131) material=G4_Pb + --> #secondaries=79 impactParameter[fm]=5.03269 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=4 + Collision 652 projectile=deuteron Ekin[MeV]=19613.6 direction=(0.799559,0.453421,0.393846) material=G4_Fe + --> #secondaries=41 impactParameter[fm]=3.72021 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 653 projectile=proton Ekin[MeV]=15390.8 direction=(0.56771,0.660548,0.491307) material=G4_H + --> #secondaries=11 impactParameter[fm]=2.69169 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 654 projectile=anti_xi- Ekin[MeV]=23706.3 direction=(0.806593,0.197897,0.556996) material=G4_Fe + --> #secondaries=22 impactParameter[fm]=5.16077 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 655 projectile=anti_omega_b- Ekin[MeV]=28171 direction=(0.542116,0.69584,0.47108) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.55739 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 656 projectile=anti_triton Ekin[MeV]=4524.32 direction=(0.110093,0.960708,0.254793) material=G4_Pb + --> #secondaries=69 impactParameter[fm]=6.48865 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=3 + Collision 657 projectile=lambda_c+ Ekin[MeV]=17086.5 direction=(0.390333,0.415411,0.821629) material=G4_H + --> #secondaries=6 impactParameter[fm]=2.01891 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 658 projectile=triton Ekin[MeV]=27665.9 direction=(0.76932,0.146958,0.621732) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.89331 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 659 projectile=anti_xi_c+ Ekin[MeV]=24666.1 direction=(0.923431,0.367898,0.109209) material=G4_Pb + --> #secondaries=50 impactParameter[fm]=5.37749 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 660 projectile=triton Ekin[MeV]=28685.7 direction=(0.505879,0.840819,0.192641) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.32923 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 661 projectile=D- Ekin[MeV]=22594.7 direction=(0.320115,0.716314,0.620016) material=G4_Ar + --> #secondaries=22 impactParameter[fm]=1.9684 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 662 projectile=hyperHe5 Ekin[MeV]=8784.24 direction=(0.685464,0.711913,0.152707) material=G4_W + --> #secondaries=98 impactParameter[fm]=3.44297 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=158 #NNcollisions=3 + Collision 663 projectile=kaon+ Ekin[MeV]=1780.91 direction=(0.13788,0.666993,0.732195) material=G4_H + --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 664 projectile=anti_omega_c0 Ekin[MeV]=1473.72 direction=(0.529654,0.0543449,0.846471) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=2.62159 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 + Collision 665 projectile=anti_hyperHe5 Ekin[MeV]=2665.65 direction=(0.492666,0.807362,0.324725) material=G4_Be + --> #secondaries=11 impactParameter[fm]=5.63901 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 666 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=13931.5 direction=(0.147922,0.969398,0.195923) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.33252 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 667 projectile=xi0 Ekin[MeV]=1558.34 direction=(0.680645,0.656793,0.32457) material=G4_Ar + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 668 projectile=anti_lambda_b Ekin[MeV]=23484.5 direction=(0.225778,0.697723,0.679858) material=G4_Ar + --> #secondaries=16 impactParameter[fm]=1.24119 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 669 projectile=pi- Ekin[MeV]=17450 direction=(0.14864,0.272343,0.95065) material=G4_Be + --> #secondaries=8 impactParameter[fm]=0.771513 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 670 projectile=anti_xi- Ekin[MeV]=7862.8 direction=(0.351897,0.743294,0.568931) material=G4_Al + --> #secondaries=17 impactParameter[fm]=3.22572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=0 + Collision 671 projectile=anti_omega_c0 Ekin[MeV]=29884.7 direction=(0.422736,0.881721,0.209432) material=G4_W + --> #secondaries=84 impactParameter[fm]=4.2421 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=2 + Collision 672 projectile=omega- Ekin[MeV]=8496.45 direction=(0.602588,0.0481652,0.796598) material=G4_Pb + --> #secondaries=37 impactParameter[fm]=4.97896 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 673 projectile=B0 Ekin[MeV]=18990.7 direction=(0.41456,0.495112,0.763547) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.36947 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 674 projectile=anti_sigma+ Ekin[MeV]=14105.6 direction=(0.0990083,0.823643,0.5584) material=G4_Pb + --> #secondaries=82 impactParameter[fm]=3.89327 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 + Collision 675 projectile=Bc+ Ekin[MeV]=3849.71 direction=(0.0294243,0.831601,0.554594) material=G4_Fe + --> #secondaries=7 impactParameter[fm]=2.59796 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 676 projectile=sigma+ Ekin[MeV]=13912.7 direction=(0.0181435,0.695982,0.71783) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.84201 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 677 projectile=anti_hyperH4 Ekin[MeV]=23314 direction=(0.330842,0.193461,0.923643) material=G4_Pb + --> #secondaries=122 impactParameter[fm]=5.38958 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=4 + Collision 678 projectile=omega_c0 Ekin[MeV]=16582.5 direction=(0.0871677,0.706646,0.702178) material=G4_Be + --> #secondaries=5 impactParameter[fm]=3.13944 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 679 projectile=anti_Bs0 Ekin[MeV]=11280.6 direction=(0.407402,0.770605,0.490093) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.861423 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 680 projectile=anti_omega_c0 Ekin[MeV]=26666 direction=(0.692124,0.691985,0.205234) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.54882 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 681 projectile=Ds+ Ekin[MeV]=17356.5 direction=(0.549249,0.290605,0.783501) material=G4_Al + --> #secondaries=17 impactParameter[fm]=0.499172 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 682 projectile=anti_sigma- Ekin[MeV]=22569.8 direction=(0.470663,0.488585,0.734684) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.44961 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 683 projectile=D- Ekin[MeV]=9924.64 direction=(0.397965,0.466029,0.790216) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.34132 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 684 projectile=D- Ekin[MeV]=10935.8 direction=(0.427696,0.89614,0.118357) material=G4_Al + --> #secondaries=14 impactParameter[fm]=3.5778 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 685 projectile=Bs0 Ekin[MeV]=9832.54 direction=(0.282937,0.470561,0.835775) material=G4_He + --> #secondaries=4 impactParameter[fm]=0.609766 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 686 projectile=Ds+ Ekin[MeV]=21431.1 direction=(0.742109,0.251433,0.621334) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=3.609 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 687 projectile=anti_B0 Ekin[MeV]=4072.53 direction=(0.157422,0.80791,0.567891) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.15841 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 688 projectile=anti_xi_c0 Ekin[MeV]=16241 direction=(0.936131,0.326248,0.131232) material=G4_Be + --> #secondaries=9 impactParameter[fm]=2.44045 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 689 projectile=sigma- Ekin[MeV]=23101.8 direction=(0.164008,0.313495,0.935319) material=G4_Si + --> #secondaries=8 impactParameter[fm]=4.94932 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 690 projectile=anti_xi_c0 Ekin[MeV]=18579.1 direction=(0.525711,0.557688,0.642349) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=3.55939 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 691 projectile=B- Ekin[MeV]=9885.22 direction=(0.336005,0.334981,0.880277) material=G4_Si + --> #secondaries=7 impactParameter[fm]=2.35678 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 692 projectile=omega- Ekin[MeV]=9889.1 direction=(0.0516848,0.584327,0.809871) material=G4_W + --> #secondaries=30 impactParameter[fm]=5.23321 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 + Collision 693 projectile=sigma+ Ekin[MeV]=18223.4 direction=(0.274908,0.886359,0.37255) material=G4_W + --> #secondaries=15 impactParameter[fm]=7.39606 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=0 + Collision 694 projectile=anti_D0 Ekin[MeV]=17491.6 direction=(0.0301166,0.908868,0.415996) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.175353 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 695 projectile=kaon+ Ekin[MeV]=8873.41 direction=(0.97806,0.08933,0.188199) material=G4_W + --> #secondaries=52 impactParameter[fm]=3.73855 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 + Collision 696 projectile=hyperalpha Ekin[MeV]=9184.73 direction=(0.543624,0.6739,0.500332) material=G4_Fe + --> #secondaries=38 impactParameter[fm]=3.21883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=1 + Collision 697 projectile=xi_c0 Ekin[MeV]=6224.14 direction=(0.24255,0.879286,0.409909) material=G4_C + --> #secondaries=11 impactParameter[fm]=1.02504 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=0 + Collision 698 projectile=xi0 Ekin[MeV]=23349.8 direction=(0.959078,0.215812,0.183288) material=G4_Si + --> #secondaries=27 impactParameter[fm]=0.710202 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 699 projectile=anti_sigma+ Ekin[MeV]=9093.67 direction=(0.240979,0.942477,0.231661) material=G4_W + --> #secondaries=41 impactParameter[fm]=6.33575 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 700 projectile=hyperalpha Ekin[MeV]=5790.56 direction=(0.952889,0.297551,0.0588697) material=G4_Ar + --> #secondaries=29 impactParameter[fm]=1.62601 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=32 #NNcollisions=2 + List of produced secondaries: + j=0 proton p=(1148.84,489.081,441.0061622.92) MeV + j=1 neutron p=(979.972,74.1134,413.8861421.24) MeV + j=2 proton p=(548.541,-473.183,263.3991214.3) MeV + j=3 sigma0 p=(2301.19,103.001,222.1852603.43) MeV + j=4 neutron p=(817.947,668.084,-722.6371587.56) MeV + j=5 proton p=(-247.087,-496.341,15.2871089.95) MeV + j=6 proton p=(-191.818,443.975,-379.1541121.62) MeV + j=7 neutron p=(264.387,246.726,518.1731132.28) MeV + j=8 neutron p=(392.332,578.002,-48.28571171.8) MeV + j=9 neutron p=(-154.68,18.9554,-63.3041954.503) MeV + j=10 pi+ p=(162.846,77.8979,172.68286.156) MeV + j=11 neutron p=(699.546,290.916,273.6541237.61) MeV + j=12 triton p=(324.274,783.93,-123.6872936.84) MeV + j=13 neutron p=(393.08,-454.714,-63.07111117.16) MeV + j=14 neutron p=(-144.274,-133.451,-84.0978963.577) MeV + j=15 proton p=(146.644,57.6439,-295.032996.105) MeV + j=16 proton p=(92.1298,-83.5325,252.375979.547) MeV + j=17 neutron p=(266.943,-67.5397,102.17984.399) MeV + j=18 neutron p=(47.5196,54.3604,-122.746950.296) MeV + j=19 deuteron p=(63.9212,114.974,-122.671884.22) MeV + j=20 neutron p=(-27.2089,116.654,117.025954.372) MeV + j=21 He3 p=(-27.6048,158.23,249.9892824.07) MeV + j=22 neutron p=(-185.936,-58.5071,53.0741961.039) MeV + j=23 He3 p=(252.443,-195.679,-277.7492840.11) MeV + j=24 proton p=(5.22285,58.594,-77.8526943.332) MeV + j=25 neutron p=(4.28727,52.8408,-104.245946.816) MeV + j=26 alpha p=(99.2054,54.1417,39.85253729.3) MeV + j=27 alpha p=(254.792,47.9547,31.48023736.52) MeV + j=28 alpha p=(179.346,116.733,-158.6233736.88) MeV + Collision 701 projectile=hyperalpha Ekin[MeV]=9207.96 direction=(0.184799,0.773512,0.606241) material=G4_W + --> #secondaries=144 impactParameter[fm]=1.1669 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=155 #NNcollisions=3 + Collision 702 projectile=omega_b- Ekin[MeV]=22347 direction=(0.449405,0.690377,0.566935) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.13209 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 703 projectile=anti_D0 Ekin[MeV]=2568.34 direction=(0.703111,0.465941,0.537154) material=G4_Si + --> #secondaries=11 impactParameter[fm]=1.75842 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 704 projectile=anti_hyperalpha Ekin[MeV]=11604.8 direction=(0.793514,0.601238,0.0940657) material=G4_Ar + --> #secondaries=39 impactParameter[fm]=2.84233 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=3 + Collision 705 projectile=anti_He3 Ekin[MeV]=29216.1 direction=(0.462004,0.886209,0.0344329) material=G4_W + --> #secondaries=15 impactParameter[fm]=7.53647 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=184 #NNcollisions=1 + Collision 706 projectile=anti_deuteron Ekin[MeV]=15036 direction=(0.728064,0.685345,0.0150236) material=G4_C + --> #secondaries=17 impactParameter[fm]=3.25442 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=2 + Collision 707 projectile=D0 Ekin[MeV]=9561.21 direction=(0.690113,0.476188,0.544967) material=G4_Be + --> #secondaries=6 impactParameter[fm]=0.297281 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 708 projectile=B0 Ekin[MeV]=23125.1 direction=(0.751461,0.574024,0.325275) material=G4_Pb + --> #secondaries=21 impactParameter[fm]=6.33526 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 709 projectile=D- Ekin[MeV]=6558.44 direction=(0.912323,0.367613,0.180352) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=4.18986 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 710 projectile=hyperHe5 Ekin[MeV]=5904.58 direction=(0.908496,0.409134,0.0851142) material=G4_He + --> #secondaries=5 impactParameter[fm]=3.37684 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 711 projectile=omega- Ekin[MeV]=29623.5 direction=(0.388775,0.176283,0.904311) material=G4_He + --> #secondaries=14 impactParameter[fm]=0.810141 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=2 + Collision 712 projectile=anti_hyperH4 Ekin[MeV]=16730.1 direction=(0.0762819,0.601843,0.794963) material=G4_Pb + --> #secondaries=67 impactParameter[fm]=6.68894 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=205 #NNcollisions=3 + Collision 713 projectile=anti_lambda Ekin[MeV]=25639.2 direction=(0.373129,0.0205017,0.927553) material=G4_C + --> #secondaries=15 impactParameter[fm]=0.998172 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 714 projectile=He3 Ekin[MeV]=29146.7 direction=(0.674765,0.737946,0.0113104) material=G4_Al + --> #secondaries=23 impactParameter[fm]=4.41859 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 715 projectile=anti_hyperHe5 Ekin[MeV]=10925 direction=(0.445464,0.557272,0.700721) material=G4_Ar + --> #secondaries=42 impactParameter[fm]=5.08056 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=39 #NNcollisions=2 + Collision 716 projectile=D+ Ekin[MeV]=12934.5 direction=(0.398932,0.687188,0.607146) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=4.64653 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 717 projectile=xi_c+ Ekin[MeV]=10632.4 direction=(0.752686,0.532245,0.387529) material=G4_Si + --> #secondaries=8 impactParameter[fm]=2.76989 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 718 projectile=anti_sigma+ Ekin[MeV]=13955.1 direction=(0.58998,0.0292411,0.806888) material=G4_Si + --> #secondaries=14 impactParameter[fm]=2.70396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 719 projectile=hyperHe5 Ekin[MeV]=10472.5 direction=(0.795843,0.450249,0.404859) material=G4_Fe + --> #secondaries=44 impactParameter[fm]=2.76645 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=45 #NNcollisions=3 + Collision 720 projectile=D+ Ekin[MeV]=1811.86 direction=(0.163958,0.7314,0.661945) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=3.71768 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 721 projectile=anti_xi- Ekin[MeV]=12185.5 direction=(0.370184,0.801643,0.469396) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=2.56291 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 722 projectile=anti_lambda_b Ekin[MeV]=29890.9 direction=(0.250986,0.80954,0.530708) material=G4_W + --> #secondaries=84 impactParameter[fm]=2.6185 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=6 + Collision 723 projectile=anti_triton Ekin[MeV]=2522.15 direction=(0.16629,0.694279,0.700232) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=5.81778 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 724 projectile=neutron Ekin[MeV]=15799.4 direction=(0.652967,0.0103083,0.757316) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.7027 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 725 projectile=omega_c0 Ekin[MeV]=24648.4 direction=(0.743344,0.467795,0.478129) material=G4_Si + --> #secondaries=26 impactParameter[fm]=1.3537 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=4 + Collision 726 projectile=kaon0S Ekin[MeV]=25162.2 direction=(0.700193,0.434964,0.566159) material=G4_Al + --> #secondaries=12 impactParameter[fm]=2.42991 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 727 projectile=D- Ekin[MeV]=9544.91 direction=(0.0376768,0.615783,0.787014) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.3023 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 728 projectile=xi_c+ Ekin[MeV]=23908.5 direction=(0.152237,0.345255,0.926079) material=G4_Fe + --> #secondaries=35 impactParameter[fm]=2.86454 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 729 projectile=lambda_b Ekin[MeV]=5561.32 direction=(0.104002,0.7078,0.698715) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.26229 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 730 projectile=Ds- Ekin[MeV]=11320.5 direction=(0.118942,0.764104,0.634033) material=G4_Pb + --> #secondaries=16 impactParameter[fm]=5.788 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 731 projectile=anti_xi0 Ekin[MeV]=21478.8 direction=(0.126077,0.443344,0.88744) material=G4_Ar + --> #secondaries=42 impactParameter[fm]=0.921407 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=3 + Collision 732 projectile=doublehyperdoubleneutron Ekin[MeV]=21457.4 direction=(0.295129,0.892333,0.341527) material=G4_H + --> #secondaries=10 impactParameter[fm]=0.422019 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=3 + Collision 733 projectile=kaon0L Ekin[MeV]=19698.8 direction=(0.850012,0.514004,0.115233) material=G4_He + --> #secondaries=13 impactParameter[fm]=2.00111 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 734 projectile=anti_omega_c0 Ekin[MeV]=28471.5 direction=(0.284383,0.248912,0.925834) material=G4_W + --> #secondaries=96 impactParameter[fm]=2.22182 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 + Collision 735 projectile=anti_deuteron Ekin[MeV]=23952.1 direction=(0.0600937,0.965223,0.254426) material=G4_W + --> #secondaries=19 impactParameter[fm]=7.31486 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=184 #NNcollisions=1 + Collision 736 projectile=doublehyperH4 Ekin[MeV]=18899.3 direction=(0.30637,0.786312,0.536517) material=G4_Al + --> #secondaries=24 impactParameter[fm]=3.506 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=20 #NNcollisions=4 + Collision 737 projectile=triton Ekin[MeV]=22417.1 direction=(0.893007,0.41092,0.183529) material=G4_Al + --> #secondaries=15 impactParameter[fm]=4.76137 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 738 projectile=xi_c+ Ekin[MeV]=11931.8 direction=(0.729151,0.670203,0.13844) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=3.49289 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 739 projectile=anti_omega- Ekin[MeV]=9681.6 direction=(0.594165,0.211456,0.776051) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.34213 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 740 projectile=kaon0L Ekin[MeV]=1401.23 direction=(0.803578,0.280024,0.525213) material=G4_W + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 741 projectile=neutron Ekin[MeV]=12458.7 direction=(0.150324,0.702218,0.695911) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.353921 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 742 projectile=kaon0S Ekin[MeV]=24088.1 direction=(0.792325,0.462239,0.39819) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=3.50296 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 743 projectile=anti_deuteron Ekin[MeV]=27656.8 direction=(0.402879,0.869328,0.286283) material=G4_Pb + --> #secondaries=27 impactParameter[fm]=9.24104 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 744 projectile=hypertriton Ekin[MeV]=19484.7 direction=(0.163597,0.713011,0.6818) material=G4_Cu + --> #secondaries=34 impactParameter[fm]=3.61213 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=61 #NNcollisions=3 + Collision 745 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=16921.6 direction=(0.384762,0.583061,0.715541) material=G4_Al + --> #secondaries=48 impactParameter[fm]=3.17645 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=7 + Collision 746 projectile=anti_xi_b0 Ekin[MeV]=19539.9 direction=(0.896144,0.235279,0.376258) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=2.94558 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 747 projectile=anti_hypertriton Ekin[MeV]=22263.7 direction=(0.281476,0.949103,0.141333) material=G4_He + --> #secondaries=16 impactParameter[fm]=0.627875 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 748 projectile=alpha Ekin[MeV]=8062.76 direction=(0.52236,0.241648,0.817769) material=G4_Si + --> #secondaries=29 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 749 projectile=He3 Ekin[MeV]=9655.84 direction=(0.193366,0.64854,0.73621) material=G4_H + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 750 projectile=anti_hyperHe5 Ekin[MeV]=13713.1 direction=(0.615514,0.173487,0.768794) material=G4_Cu + --> #secondaries=78 impactParameter[fm]=1.81355 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=6 + Collision 751 projectile=B+ Ekin[MeV]=7670.24 direction=(0.579312,0.597705,0.554209) material=G4_C + --> #secondaries=8 impactParameter[fm]=2.60478 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 752 projectile=B- Ekin[MeV]=20355.7 direction=(0.476632,0.248756,0.843174) material=G4_Ar + --> #secondaries=16 impactParameter[fm]=1.32297 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 753 projectile=lambda Ekin[MeV]=18066.3 direction=(0.621872,0.657472,0.425448) material=G4_Be + --> #secondaries=6 impactParameter[fm]=3.42036 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 754 projectile=anti_doublehyperH4 Ekin[MeV]=29549.5 direction=(0.966207,0.255825,0.0315983) material=G4_C + --> #secondaries=18 impactParameter[fm]=2.63305 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 755 projectile=anti_He3 Ekin[MeV]=4499.99 direction=(0.58411,0.8007,0.133025) material=G4_He + --> #secondaries=11 impactParameter[fm]=4.22504 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 756 projectile=Bc+ Ekin[MeV]=3850.45 direction=(0.519576,0.679346,0.518199) material=G4_W + --> #secondaries=17 impactParameter[fm]=3.90593 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=0 + Collision 757 projectile=D+ Ekin[MeV]=19366.3 direction=(0.0202452,0.567755,0.822949) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.4766 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 758 projectile=anti_hyperalpha Ekin[MeV]=3240.9 direction=(0.882686,0.297404,0.363889) material=G4_Al + --> #secondaries=34 impactParameter[fm]=2.66203 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 759 projectile=anti_xi_c0 Ekin[MeV]=19291.7 direction=(0.95764,0.178405,0.226047) material=G4_C + --> #secondaries=11 impactParameter[fm]=2.24409 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 760 projectile=D+ Ekin[MeV]=14154.8 direction=(0.0460378,0.753866,0.655414) material=G4_Al + --> #secondaries=15 impactParameter[fm]=3.59881 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 761 projectile=neutron Ekin[MeV]=24933.1 direction=(0.416805,0.896848,0.14811) material=G4_Al + --> #secondaries=28 impactParameter[fm]=2.37591 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 762 projectile=anti_B0 Ekin[MeV]=5441.89 direction=(0.00640502,0.789264,0.614021) material=G4_Pb + --> #secondaries=25 impactParameter[fm]=6.05991 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 763 projectile=xi_b0 Ekin[MeV]=9840.62 direction=(0.643199,0.478062,0.598123) material=G4_Si + --> #secondaries=10 impactParameter[fm]=2.99854 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 764 projectile=anti_xi_b- Ekin[MeV]=20555 direction=(0.832315,0.542649,0.11306) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.73259 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 765 projectile=anti_hyperH4 Ekin[MeV]=10862.4 direction=(0.676563,0.600051,0.42685) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.06067 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 766 projectile=anti_hyperalpha Ekin[MeV]=9238.06 direction=(0.675552,0.671871,0.303675) material=G4_Pb + --> #secondaries=158 impactParameter[fm]=3.55621 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=4 + Collision 767 projectile=anti_xi_c0 Ekin[MeV]=21419.1 direction=(0.921886,0.166986,0.349632) material=G4_Fe + --> #secondaries=28 impactParameter[fm]=3.20457 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=1 + Collision 768 projectile=alpha Ekin[MeV]=2139.66 direction=(0.0255294,0.691956,0.721488) material=G4_Si + --> #secondaries=16 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 769 projectile=anti_B0 Ekin[MeV]=19451.4 direction=(0.810261,0.513833,0.281873) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.82831 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 770 projectile=Ds+ Ekin[MeV]=7796.21 direction=(0.0531945,0.856562,0.513295) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=1.99575 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 771 projectile=omega_b- Ekin[MeV]=13488.5 direction=(0.463651,0.156727,0.872046) material=G4_Si + --> #secondaries=17 impactParameter[fm]=1.13046 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 772 projectile=kaon0S Ekin[MeV]=22659.1 direction=(0.50779,0.431944,0.745368) material=G4_Pb + --> #secondaries=39 impactParameter[fm]=3.81896 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 773 projectile=anti_alpha Ekin[MeV]=17788.4 direction=(0.733039,0.55667,0.390861) material=G4_W + --> #secondaries=118 impactParameter[fm]=4.87725 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=5 + Collision 774 projectile=anti_omega_b- Ekin[MeV]=13905.6 direction=(0.498582,0.354915,0.790855) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.46417 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 775 projectile=B+ Ekin[MeV]=21029.3 direction=(0.810318,0.222208,0.542226) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=5.43189 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 776 projectile=anti_hyperalpha Ekin[MeV]=29246.4 direction=(0.0877647,0.99614,0.00153225) material=G4_Al + --> #secondaries=44 impactParameter[fm]=3.02577 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=5 + Collision 777 projectile=anti_hyperH4 Ekin[MeV]=9698.33 direction=(0.64079,0.754576,0.141429) material=G4_Al + --> #secondaries=29 impactParameter[fm]=2.90459 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=5 + Collision 778 projectile=anti_lambda_c+ Ekin[MeV]=5456.62 direction=(0.366894,0.500495,0.784151) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.463546 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 779 projectile=lambda_b Ekin[MeV]=29115.6 direction=(0.509329,0.786789,0.348636) material=G4_Fe + --> #secondaries=46 impactParameter[fm]=1.03329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=2 + Collision 780 projectile=anti_xi- Ekin[MeV]=18520.6 direction=(0.740058,0.472848,0.478256) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.30552 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 781 projectile=triton Ekin[MeV]=26609.5 direction=(0.557873,0.601337,0.571989) material=G4_C + --> #secondaries=28 impactParameter[fm]=1.49674 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=4 + Collision 782 projectile=anti_hypertriton Ekin[MeV]=22647.2 direction=(0.206954,0.78278,0.586878) material=G4_C + --> #secondaries=16 impactParameter[fm]=4.30637 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=12 #NNcollisions=2 + Collision 783 projectile=neutron Ekin[MeV]=16584.2 direction=(0.603346,0.467661,0.645962) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=4.09204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 784 projectile=neutron Ekin[MeV]=27048 direction=(0.20524,0.518649,0.829988) material=G4_Pb + --> #secondaries=21 impactParameter[fm]=6.9728 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 785 projectile=pi- Ekin[MeV]=27948.8 direction=(0.492378,0.527535,0.692294) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=3.33692 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 786 projectile=kaon0S Ekin[MeV]=13169 direction=(0.966281,0.200796,0.161187) material=G4_W + --> #secondaries=24 impactParameter[fm]=6.44522 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=0 + Collision 787 projectile=xi0 Ekin[MeV]=21259.4 direction=(0.650938,0.659218,0.376447) material=G4_Si + --> #secondaries=23 impactParameter[fm]=0.269712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 788 projectile=anti_lambda_b Ekin[MeV]=3641.42 direction=(0.298756,0.0500358,0.953017) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=4.35563 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 + Collision 789 projectile=anti_D0 Ekin[MeV]=4608.02 direction=(0.690135,0.589645,0.419562) material=G4_Al + --> #secondaries=6 impactParameter[fm]=2.05085 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 790 projectile=hypertriton Ekin[MeV]=21677.6 direction=(0.132065,0.906289,0.401496) material=G4_Cu + --> #secondaries=36 impactParameter[fm]=4.26267 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=60 #NNcollisions=4 + Collision 791 projectile=omega_c0 Ekin[MeV]=4057.72 direction=(0.660716,0.727837,0.183595) material=G4_Fe + --> #secondaries=6 impactParameter[fm]=3.34897 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 792 projectile=D+ Ekin[MeV]=15915.3 direction=(0.851002,0.103971,0.514768) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.56535 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 793 projectile=anti_hyperHe5 Ekin[MeV]=29720.5 direction=(0.548258,0.719462,0.426366) material=G4_Cu + --> #secondaries=81 impactParameter[fm]=2.70274 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=8 + Collision 794 projectile=anti_sigma- Ekin[MeV]=18370.3 direction=(0.569529,0.716888,0.40213) material=G4_Cu + --> #secondaries=31 impactParameter[fm]=3.22802 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 + Collision 795 projectile=anti_hypertriton Ekin[MeV]=7004.01 direction=(0.263769,0.712578,0.650122) material=G4_Cu + --> #secondaries=32 impactParameter[fm]=4.76062 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=60 #NNcollisions=3 + Collision 796 projectile=anti_hyperH4 Ekin[MeV]=21313.6 direction=(0.779919,0.423071,0.461235) material=G4_Si + --> #secondaries=32 impactParameter[fm]=4.33285 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=28 #NNcollisions=3 + Collision 797 projectile=neutron Ekin[MeV]=3757.27 direction=(0.610725,0.537094,0.581846) material=G4_He + --> #secondaries=7 impactParameter[fm]=0.434393 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 798 projectile=Ds- Ekin[MeV]=25623.7 direction=(0.750946,0.468635,0.465255) material=G4_Al + --> #secondaries=5 impactParameter[fm]=3.8183 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 799 projectile=xi0 Ekin[MeV]=18523.3 direction=(0.351066,0.93443,0.0599354) material=G4_Pb + --> #secondaries=66 impactParameter[fm]=6.38907 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=4 + Collision 800 projectile=omega- Ekin[MeV]=21027.6 direction=(0.40329,0.566261,0.718822) material=G4_Fe + --> #secondaries=41 impactParameter[fm]=3.03064 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + List of produced secondaries: + j=0 xi0 p=(4635.91,6859.6,9217.612459.5) MeV + j=1 neutron p=(87.1217,-263.331,-206.9411001.27) MeV + j=2 pi0 p=(921.684,899.31,1052.71668.73) MeV + j=3 pi+ p=(2109.44,2329.22,3115.684427.4) MeV + j=4 sigma0 p=(144.561,14.6079,7.288671201.48) MeV + j=5 neutron p=(-242.503,333.107,-137.2041035.07) MeV + j=6 neutron p=(-291.479,446.311,205.0491099.54) MeV + j=7 pi- p=(298.653,-14.0948,368.655494.751) MeV + j=8 neutron p=(393.535,1327.37,830.3281867.89) MeV + j=9 pi0 p=(-175.483,-150.486,97.6262284.938) MeV + j=10 neutron p=(-61.4943,391.679,-31.74111020.29) MeV + j=11 pi- p=(22.0569,-230.594,-51.3689275.279) MeV + j=12 proton p=(-52.859,-156.537,-246.907984.183) MeV + j=13 deuteron p=(257.861,-262.784,-199.1851921.76) MeV + j=14 neutron p=(-127.906,181.528,79.8525968.748) MeV + j=15 neutron p=(494.283,507.227,279.9931209.45) MeV + j=16 neutron p=(463.163,-42.4562,-484.7721155.04) MeV + j=17 proton p=(-203.157,-42.173,-72.7605963.691) MeV + j=18 proton p=(156.055,158.541,223.938989.945) MeV + j=19 deuteron p=(261.907,-434.677,101.5981945.71) MeV + j=20 N14 p=(248.061,-195.13,967.40713079.8) MeV + j=21 neutron p=(191.423,64.7701,-104.506966.718) MeV + j=22 proton p=(-94.5601,90.3899,123.752955.396) MeV + j=23 neutron p=(-79.2242,-190.516,145.936972.961) MeV + j=24 proton p=(66.6185,60.8997,-169.188957.667) MeV + j=25 deuteron p=(3.05471,375.912,44.80591913.44) MeV + j=26 neutron p=(-99.5978,222.703,51.5625972.09) MeV + j=27 deuteron p=(-164.272,281.099,228.8091917.36) MeV + j=28 proton p=(-196.519,-26.5855,137.866968.859) MeV + j=29 He3 p=(-96.3451,-21.3419,355.8292832.56) MeV + j=30 proton p=(77.7631,-5.47594,-67.5477943.925) MeV + j=31 neutron p=(-16.1755,93.2032,-64.0638946.486) MeV + j=32 deuteron p=(-159.881,-25.6723,174.1391890.63) MeV + j=33 neutron p=(33.174,14.8556,-89.1166944.482) MeV + j=34 deuteron p=(128.591,200.128,228.7781904.43) MeV + j=35 proton p=(-60.966,84.6242,30.862944.555) MeV + j=36 proton p=(61.9086,167.115,39.3055955.855) MeV + j=37 alpha p=(194.698,-220.915,87.6653740.02) MeV + j=38 gamma p=(1.3425,-4.05794,1.847144.6563) MeV + j=39 gamma p=(-0.623993,-0.298886,-0.8804931.11981) MeV + j=40 gamma p=(0.369573,2.247,0.3675942.30667) MeV + Collision 801 projectile=anti_xi_c0 Ekin[MeV]=28288.6 direction=(0.543865,0.215443,0.811046) material=G4_Be + --> #secondaries=13 impactParameter[fm]=2.07333 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 802 projectile=omega_c0 Ekin[MeV]=6916.66 direction=(0.779927,0.528684,0.334974) material=G4_W + --> #secondaries=6 impactParameter[fm]=8.60711 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 803 projectile=anti_xi_c+ Ekin[MeV]=5841.08 direction=(0.31228,0.788605,0.529701) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=3.37704 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=2 + Collision 804 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=1591.02 direction=(0.516586,0.197222,0.833212) material=G4_C + --> #secondaries=15 impactParameter[fm]=2.12484 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 805 projectile=kaon- Ekin[MeV]=5188.59 direction=(0.827324,0.462907,0.318202) material=G4_Ar + --> #secondaries=26 impactParameter[fm]=3.68352 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 806 projectile=B- Ekin[MeV]=9318.46 direction=(0.865224,0.159338,0.475393) material=G4_Fe + --> #secondaries=14 impactParameter[fm]=4.82952 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 807 projectile=xi_c0 Ekin[MeV]=4234.45 direction=(0.0855278,0.938572,0.334318) material=G4_Al + --> #secondaries=8 impactParameter[fm]=2.76022 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 808 projectile=xi_b0 Ekin[MeV]=27695.1 direction=(0.598305,0.634393,0.489466) material=G4_C + --> #secondaries=24 impactParameter[fm]=1.41192 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 + Collision 809 projectile=doublehyperdoubleneutron Ekin[MeV]=17796.9 direction=(0.644554,0.711104,0.280856) material=G4_Be + --> #secondaries=11 impactParameter[fm]=4.40444 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 810 projectile=anti_hyperH4 Ekin[MeV]=14747.6 direction=(0.963099,0.128395,0.236547) material=G4_Al + --> #secondaries=15 impactParameter[fm]=4.69658 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 811 projectile=anti_omega- Ekin[MeV]=2494.03 direction=(0.400109,0.91289,0.0809032) material=G4_W + --> #secondaries=34 impactParameter[fm]=5.49572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=2 + Collision 812 projectile=anti_B0 Ekin[MeV]=21494 direction=(0.0329898,0.607539,0.793604) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.19622 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 813 projectile=pi+ Ekin[MeV]=1086.17 direction=(0.456102,0.0332221,0.889307) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 814 projectile=anti_hyperH4 Ekin[MeV]=29390.8 direction=(0.366495,0.513121,0.776137) material=G4_Fe + --> #secondaries=55 impactParameter[fm]=3.65169 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=6 + Collision 815 projectile=anti_alpha Ekin[MeV]=7041.71 direction=(0.640605,0.734725,0.223168) material=G4_W + --> #secondaries=48 impactParameter[fm]=7.30248 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=180 #NNcollisions=2 + Collision 816 projectile=omega_b- Ekin[MeV]=20809.4 direction=(0.47218,0.53577,0.699998) material=G4_Ar + --> #secondaries=16 impactParameter[fm]=2.54706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 817 projectile=anti_lambda_b Ekin[MeV]=8822.61 direction=(0.405662,0.678865,0.61203) material=G4_Pb + --> #secondaries=44 impactParameter[fm]=3.80152 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=4 + Collision 818 projectile=anti_proton Ekin[MeV]=4878.05 direction=(0.240112,0.745254,0.622047) material=G4_C + --> #secondaries=14 impactParameter[fm]=1.52026 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 819 projectile=hypertriton Ekin[MeV]=10957.9 direction=(0.548769,0.764389,0.338471) material=G4_Cu + --> #secondaries=63 impactParameter[fm]=0.914648 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=6 + Collision 820 projectile=anti_neutron Ekin[MeV]=1057.77 direction=(0.175451,0.102412,0.979147) material=G4_Pb + --> #secondaries=10 impactParameter[fm]=7.45295 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 821 projectile=anti_He3 Ekin[MeV]=20470.3 direction=(0.555763,0.100699,0.82522) material=G4_W + --> #secondaries=163 impactParameter[fm]=2.99837 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=5 + Collision 822 projectile=He3 Ekin[MeV]=18589.5 direction=(0.823741,0.452132,0.342093) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.45261 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 823 projectile=anti_D0 Ekin[MeV]=20978 direction=(0.123066,0.673576,0.7288) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=4.66087 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 824 projectile=kaon- Ekin[MeV]=17878.8 direction=(0.557952,0.412939,0.719841) material=G4_Ar + --> #secondaries=20 impactParameter[fm]=3.14815 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 825 projectile=Bc- Ekin[MeV]=23400.7 direction=(0.528099,0.80871,0.259036) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.6737 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 826 projectile=Bs0 Ekin[MeV]=25207.3 direction=(0.597827,0.151515,0.787176) material=G4_Si + --> #secondaries=8 impactParameter[fm]=0.872528 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 827 projectile=hypertriton Ekin[MeV]=11716.4 direction=(0.452598,0.0392893,0.890849) material=G4_Al + --> #secondaries=16 impactParameter[fm]=4.9116 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 828 projectile=lambda_c+ Ekin[MeV]=2961.75 direction=(0.394475,0.68089,0.617072) material=G4_Si + --> #secondaries=10 impactParameter[fm]=4.54543 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 829 projectile=xi_b0 Ekin[MeV]=27007.1 direction=(0.743945,0.609471,0.274028) material=G4_C + --> #secondaries=13 impactParameter[fm]=0.405332 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 830 projectile=lambda_b Ekin[MeV]=7487.05 direction=(0.613544,0.668437,0.420424) material=G4_W + --> #secondaries=24 impactParameter[fm]=5.70838 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 831 projectile=anti_He3 Ekin[MeV]=25987 direction=(0.64344,0.722986,0.251547) material=G4_Be + --> #secondaries=13 impactParameter[fm]=3.75382 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 832 projectile=omega_c0 Ekin[MeV]=22647.5 direction=(0.806468,0.0079316,0.591225) material=G4_Si + --> #secondaries=22 impactParameter[fm]=3.67299 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 833 projectile=anti_xi- Ekin[MeV]=15694.7 direction=(0.24446,0.192176,0.950425) material=G4_Si + --> #secondaries=9 impactParameter[fm]=4.76649 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 834 projectile=anti_He3 Ekin[MeV]=25264.3 direction=(0.175975,0.829895,0.529441) material=G4_H + --> #secondaries=6 impactParameter[fm]=2.06191 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 835 projectile=anti_omega- Ekin[MeV]=15043.6 direction=(0.686167,0.55825,0.466404) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.531328 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 836 projectile=Bc- Ekin[MeV]=28099.9 direction=(0.702102,0.276358,0.656261) material=G4_Si + --> #secondaries=10 impactParameter[fm]=1.38112 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 837 projectile=D0 Ekin[MeV]=23204.4 direction=(0.81974,0.55699,0.133373) material=G4_H + --> #secondaries=9 impactParameter[fm]=1.25636 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 838 projectile=anti_lambda Ekin[MeV]=17595.3 direction=(0.718787,0.653114,0.238303) material=G4_Al + --> #secondaries=30 impactParameter[fm]=0.622034 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 839 projectile=anti_sigma+ Ekin[MeV]=19210.4 direction=(0.712066,0.691806,0.119859) material=G4_Fe + --> #secondaries=35 impactParameter[fm]=2.2761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=3 + Collision 840 projectile=anti_proton Ekin[MeV]=26062.3 direction=(0.730116,0.509694,0.45513) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.79566 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 841 projectile=anti_lambda Ekin[MeV]=12989.9 direction=(0.220988,0.691573,0.687671) material=G4_Fe + --> #secondaries=29 impactParameter[fm]=5.0391 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 842 projectile=xi_b0 Ekin[MeV]=21466.3 direction=(0.100858,0.25638,0.9613) material=G4_Pb + --> #secondaries=26 impactParameter[fm]=7.16928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 843 projectile=He3 Ekin[MeV]=18466.9 direction=(0.129767,0.974039,0.185498) material=G4_W + --> #secondaries=124 impactParameter[fm]=0.513063 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=171 #NNcollisions=10 + Collision 844 projectile=kaon- Ekin[MeV]=1376.02 direction=(0.584181,0.0902406,0.806591) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 845 projectile=kaon- Ekin[MeV]=6918.24 direction=(0.568105,0.441374,0.694584) material=G4_Fe + --> #secondaries=23 impactParameter[fm]=3.087 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 846 projectile=doublehyperH4 Ekin[MeV]=5337.32 direction=(0.220959,0.424389,0.878107) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.76587 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 847 projectile=kaon+ Ekin[MeV]=21320.2 direction=(0.090458,0.82876,0.552245) material=G4_Al + --> #secondaries=17 impactParameter[fm]=4.01123 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 848 projectile=anti_xi_c0 Ekin[MeV]=12712.1 direction=(0.579865,0.768037,0.271799) material=G4_Pb + --> #secondaries=78 impactParameter[fm]=4.54286 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 + Collision 849 projectile=doublehyperH4 Ekin[MeV]=18496.4 direction=(0.287893,0.695989,0.657812) material=G4_H + --> #secondaries=5 impactParameter[fm]=2.79425 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 850 projectile=doublehyperH4 Ekin[MeV]=28036.5 direction=(0.31863,0.138015,0.937778) material=G4_W + --> #secondaries=123 impactParameter[fm]=4.47013 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=167 #NNcollisions=11 + Collision 851 projectile=He3 Ekin[MeV]=2617.6 direction=(0.722245,0.360931,0.589992) material=G4_H + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 852 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=13169.1 direction=(0.72608,0.484517,0.487905) material=G4_Ar + --> #secondaries=32 impactParameter[fm]=2.93486 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 853 projectile=pi- Ekin[MeV]=27176.3 direction=(0.0697187,0.851481,0.51973) material=G4_C + --> #secondaries=21 impactParameter[fm]=1.11448 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 854 projectile=xi_c+ Ekin[MeV]=10836.5 direction=(0.763145,0.107867,0.637161) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=4.63136 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 855 projectile=xi_c+ Ekin[MeV]=11527.3 direction=(0.751633,0.640509,0.157466) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.44743 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 856 projectile=lambda_c+ Ekin[MeV]=26065.4 direction=(0.699656,0.107981,0.706274) material=G4_Pb + --> #secondaries=26 impactParameter[fm]=7.79442 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 857 projectile=D0 Ekin[MeV]=8682.27 direction=(0.654017,0.246272,0.715271) material=G4_Pb + --> #secondaries=18 impactParameter[fm]=5.35119 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=0 + Collision 858 projectile=anti_xi_c0 Ekin[MeV]=25995.2 direction=(0.147369,0.975835,0.161331) material=G4_He + --> #secondaries=6 impactParameter[fm]=0.604344 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 859 projectile=D- Ekin[MeV]=3669.9 direction=(0.735437,0.656827,0.166467) material=G4_Si + --> #secondaries=9 impactParameter[fm]=2.46556 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 860 projectile=xi_b- Ekin[MeV]=15801.4 direction=(0.641526,0.719897,0.264939) material=G4_Cu + --> #secondaries=31 impactParameter[fm]=1.60876 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=2 + Collision 861 projectile=hypertriton Ekin[MeV]=15908.2 direction=(0.362663,0.488971,0.793337) material=G4_Fe + --> #secondaries=28 impactParameter[fm]=4.0427 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 862 projectile=D- Ekin[MeV]=12544.6 direction=(0.0342416,0.341024,0.939431) material=G4_Pb + --> #secondaries=47 impactParameter[fm]=2.56443 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 863 projectile=anti_xi_c0 Ekin[MeV]=12818.2 direction=(0.949247,0.261158,0.175293) material=G4_W + --> #secondaries=54 impactParameter[fm]=3.5073 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=3 + Collision 864 projectile=xi0 Ekin[MeV]=11158.3 direction=(0.641554,0.439229,0.628877) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.0129 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 865 projectile=kaon- Ekin[MeV]=14028.5 direction=(0.743867,0.0316923,0.667576) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.97222 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 866 projectile=lambda_b Ekin[MeV]=12008.1 direction=(0.0721966,0.779453,0.622287) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.620975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=0 + Collision 867 projectile=lambda_b Ekin[MeV]=15983.2 direction=(0.92978,0.309461,0.199359) material=G4_C + --> #secondaries=14 impactParameter[fm]=2.6556 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 868 projectile=lambda_c+ Ekin[MeV]=9863.47 direction=(0.43484,0.620078,0.653006) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.04948 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 869 projectile=anti_omega- Ekin[MeV]=29683.7 direction=(0.308575,0.59553,0.741704) material=G4_Be + --> #secondaries=5 impactParameter[fm]=0.647913 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 870 projectile=anti_xi_b0 Ekin[MeV]=12524.5 direction=(0.452874,0.462669,0.76213) material=G4_Al + --> #secondaries=8 impactParameter[fm]=2.70133 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 871 projectile=anti_xi_b- Ekin[MeV]=10714.5 direction=(0.653555,0.477101,0.587572) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=2.19487 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 + Collision 872 projectile=Ds- Ekin[MeV]=13669.6 direction=(0.737763,0.00175154,0.675058) material=G4_Pb + --> #secondaries=52 impactParameter[fm]=5.05239 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 873 projectile=anti_Bs0 Ekin[MeV]=23568.1 direction=(0.717988,0.313128,0.621646) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.32548 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 874 projectile=xi- Ekin[MeV]=11099.9 direction=(0.831496,0.344913,0.435488) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.92133 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 875 projectile=anti_omega- Ekin[MeV]=3430.97 direction=(0.611837,0.57553,0.542606) material=G4_Al + --> #secondaries=14 impactParameter[fm]=3.41684 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=0 + Collision 876 projectile=pi- Ekin[MeV]=29084.8 direction=(0.727675,0.654259,0.205997) material=G4_Be + --> #secondaries=14 impactParameter[fm]=0.372631 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 877 projectile=anti_xi_b- Ekin[MeV]=12782.3 direction=(0.944025,0.179273,0.276909) material=G4_C + --> #secondaries=10 impactParameter[fm]=3.17929 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 878 projectile=kaon0S Ekin[MeV]=6848.06 direction=(0.734264,0.486064,0.473918) material=G4_Si + --> #secondaries=15 impactParameter[fm]=3.26253 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 879 projectile=anti_alpha Ekin[MeV]=8357.51 direction=(0.778724,0.625967,0.0418804) material=G4_Be + --> #secondaries=13 impactParameter[fm]=3.26745 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 880 projectile=omega- Ekin[MeV]=20781.9 direction=(0.491316,0.65769,0.57101) material=G4_W + --> #secondaries=111 impactParameter[fm]=2.00993 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=174 #NNcollisions=7 + Collision 881 projectile=hyperalpha Ekin[MeV]=5134.65 direction=(0.897855,0.434629,0.0703791) material=G4_W + --> #secondaries=34 impactParameter[fm]=7.5544 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 882 projectile=anti_triton Ekin[MeV]=1174.16 direction=(0.537628,0.151967,0.829374) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=4.65455 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 883 projectile=anti_hyperH4 Ekin[MeV]=29840.2 direction=(0.169402,0.830746,0.530249) material=G4_Be + --> #secondaries=14 impactParameter[fm]=3.03287 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 884 projectile=alpha Ekin[MeV]=7320.34 direction=(0.262889,0.516968,0.814637) material=G4_Ar + --> #secondaries=25 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 885 projectile=omega_c0 Ekin[MeV]=8772.7 direction=(0.452732,0.681938,0.574452) material=G4_Pb + --> #secondaries=54 impactParameter[fm]=4.93099 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 886 projectile=omega- Ekin[MeV]=4860.52 direction=(0.657858,0.506995,0.556937) material=G4_Si + --> #secondaries=6 impactParameter[fm]=3.39152 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 887 projectile=anti_B0 Ekin[MeV]=20748.7 direction=(0.927964,0.0814189,0.363667) material=G4_Si + --> #secondaries=9 impactParameter[fm]=3.6031 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 888 projectile=kaon+ Ekin[MeV]=25160.1 direction=(0.623382,0.533891,0.571275) material=G4_C + --> #secondaries=17 impactParameter[fm]=1.57948 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 889 projectile=anti_He3 Ekin[MeV]=20887.1 direction=(0.429486,0.629042,0.647957) material=G4_Pb + --> #secondaries=91 impactParameter[fm]=6.75096 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=5 + Collision 890 projectile=doublehyperH4 Ekin[MeV]=11777.4 direction=(0.464588,0.75893,0.456272) material=G4_Fe + --> #secondaries=52 impactParameter[fm]=2.77561 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=47 #NNcollisions=3 + Collision 891 projectile=pi- Ekin[MeV]=21115.4 direction=(0.543135,0.218723,0.810657) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.84605 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 892 projectile=anti_xi_b0 Ekin[MeV]=12377.6 direction=(0.655455,0.250798,0.712376) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=3.67544 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 893 projectile=kaon+ Ekin[MeV]=27878.7 direction=(0.381677,0.50687,0.77292) material=G4_Pb + --> #secondaries=18 impactParameter[fm]=8.74693 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 894 projectile=xi- Ekin[MeV]=10299.2 direction=(0.199261,0.488788,0.849342) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.02516 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 895 projectile=anti_xi- Ekin[MeV]=17659 direction=(0.186324,0.776632,0.601769) material=G4_Cu + --> #secondaries=38 impactParameter[fm]=2.35251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 896 projectile=Ds+ Ekin[MeV]=15451 direction=(0.212492,0.303232,0.928923) material=G4_Cu + --> #secondaries=26 impactParameter[fm]=3.00181 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 897 projectile=pi- Ekin[MeV]=23036.5 direction=(0.424629,0.679866,0.59789) material=G4_Be + --> #secondaries=14 impactParameter[fm]=1.86207 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 898 projectile=lambda_b Ekin[MeV]=9487.88 direction=(0.125552,0.29431,0.947427) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=1.58003 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 899 projectile=B+ Ekin[MeV]=27030.6 direction=(0.576498,0.751569,0.320615) material=G4_H + --> #secondaries=7 impactParameter[fm]=0.482091 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 900 projectile=anti_lambda_b Ekin[MeV]=9064.37 direction=(0.20725,0.882226,0.422757) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.92628 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 + List of produced secondaries: + j=0 anti_lambda_b p=(1801.18,8442.3,3615.4510916.4) MeV + j=1 pi0 p=(-327.974,284.674,100.228465.693) MeV + j=2 proton p=(306.997,342.344,91.24431048.87) MeV + j=3 pi- p=(39.9085,1383.74,693.6011554.63) MeV + j=4 pi0 p=(94.5091,60.2728,10.6213175.773) MeV + j=5 pi+ p=(282.048,311.915,195.578484.327) MeV + j=6 neutron p=(-3.81733,-85.2899,202.18964.857) MeV + j=7 pi- p=(1.55924,167.6,221.203310.649) MeV + j=8 proton p=(394.588,-188.154,198.2821053.93) MeV + j=9 proton p=(-304.58,-73.6416,-213.3221011.95) MeV + j=10 neutron p=(161.82,258.288,368.4361054.24) MeV + j=11 neutron p=(480.453,114.856,-202.3531080.63) MeV + j=12 neutron p=(1.20417,318.822,-35.1987992.81) MeV + j=13 V49[152.928] p=(-22.8514,1005.06,240.27745595.4) MeV + j=14 proton p=(-52.8947,-46.8046,143.735951.842) MeV + j=15 alpha p=(-8.2049,-217.062,161.6173737.2) MeV + j=16 proton p=(-39.9187,-107.712,-50.5995946.631) MeV + j=17 neutron p=(9.26595,-1.71082,-6.99956939.639) MeV + j=18 gamma p=(-1.6939,-1.05472,1.224842.34135) MeV + Collision 901 projectile=anti_B0 Ekin[MeV]=17826.8 direction=(0.27121,0.616516,0.739157) material=G4_Si + --> #secondaries=9 impactParameter[fm]=3.41464 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 902 projectile=anti_hypertriton Ekin[MeV]=23421.6 direction=(0.00486904,0.658102,0.752913) material=G4_He + --> #secondaries=13 impactParameter[fm]=1.94107 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 903 projectile=xi0 Ekin[MeV]=25272.2 direction=(0.521847,0.394716,0.756224) material=G4_Be + --> #secondaries=6 impactParameter[fm]=4.15804 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 904 projectile=sigma+ Ekin[MeV]=5704.23 direction=(0.661185,0.742098,0.110119) material=G4_C + --> #secondaries=15 impactParameter[fm]=0.811359 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 905 projectile=anti_sigma- Ekin[MeV]=21291.7 direction=(0.0294274,0.512251,0.858331) material=G4_He + --> #secondaries=14 impactParameter[fm]=0.990172 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=2 + Collision 906 projectile=anti_hypertriton Ekin[MeV]=2572.78 direction=(0.280823,0.732158,0.62055) material=G4_C + --> #secondaries=21 impactParameter[fm]=3.37103 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=3 + Collision 907 projectile=Ds- Ekin[MeV]=27749.1 direction=(0.997961,0.0476412,0.0424868) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.09889 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 908 projectile=kaon- Ekin[MeV]=14913.4 direction=(0.131009,0.22263,0.96606) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=3.22396 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 909 projectile=sigma+ Ekin[MeV]=3837.37 direction=(0.583526,0.799678,0.141468) material=G4_W + --> #secondaries=28 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 910 projectile=Bc- Ekin[MeV]=2177.94 direction=(0.298288,0.734999,0.608934) material=G4_Be + --> #secondaries=6 impactParameter[fm]=0.93899 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 911 projectile=xi_c+ Ekin[MeV]=25661.6 direction=(0.715368,0.10502,0.690811) material=G4_Pb + --> #secondaries=57 impactParameter[fm]=6.23479 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 912 projectile=hyperH4 Ekin[MeV]=10381.4 direction=(0.461984,0.606831,0.646782) material=G4_Pb + --> #secondaries=52 impactParameter[fm]=6.10368 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=198 #NNcollisions=3 + Collision 913 projectile=neutron Ekin[MeV]=23909.5 direction=(0.610264,0.368522,0.701262) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=4.36415 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 914 projectile=anti_sigma- Ekin[MeV]=15604.6 direction=(0.964522,0.210236,0.15968) material=G4_Cu + --> #secondaries=34 impactParameter[fm]=3.31193 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 915 projectile=Ds+ Ekin[MeV]=18965 direction=(0.166532,0.041684,0.985154) material=G4_Al + --> #secondaries=11 impactParameter[fm]=1.71833 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 916 projectile=anti_He3 Ekin[MeV]=16905.4 direction=(0.387202,0.68926,0.612368) material=G4_Si + --> #secondaries=37 impactParameter[fm]=1.85975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=4 + Collision 917 projectile=xi_b0 Ekin[MeV]=27189.9 direction=(0.238347,0.9669,0.091076) material=G4_Al + --> #secondaries=23 impactParameter[fm]=0.640155 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 918 projectile=Bs0 Ekin[MeV]=14577.8 direction=(0.151805,0.792357,0.590868) material=G4_C + --> #secondaries=11 impactParameter[fm]=0.94008 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 919 projectile=lambda_b Ekin[MeV]=6423.66 direction=(0.959129,0.257659,0.116976) material=G4_Cu + --> #secondaries=6 impactParameter[fm]=4.0024 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 920 projectile=lambda Ekin[MeV]=19108.5 direction=(0.926304,0.0579885,0.372288) material=G4_C + --> #secondaries=7 impactParameter[fm]=1.71662 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 921 projectile=B+ Ekin[MeV]=11108.1 direction=(0.246694,0.584344,0.7731) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=1.9705 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 922 projectile=anti_Bs0 Ekin[MeV]=13012 direction=(0.375241,0.596761,0.709275) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=0.255783 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 923 projectile=anti_xi_b0 Ekin[MeV]=21165.4 direction=(0.249392,0.867509,0.430385) material=G4_Ar + --> #secondaries=38 impactParameter[fm]=1.67879 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=2 + Collision 924 projectile=xi_b- Ekin[MeV]=19109.2 direction=(0.132976,0.955478,0.263401) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.31719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 925 projectile=kaon- Ekin[MeV]=4152.61 direction=(0.566495,0.265564,0.780102) material=G4_Ar + --> #secondaries=30 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 926 projectile=doublehyperH4 Ekin[MeV]=20025.5 direction=(0.756027,0.523701,0.392631) material=G4_W + --> #secondaries=56 impactParameter[fm]=7.16123 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=178 #NNcollisions=3 + Collision 927 projectile=Bc- Ekin[MeV]=20408.7 direction=(0.686702,0.690464,0.227376) material=G4_C + --> #secondaries=8 impactParameter[fm]=1.43313 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 928 projectile=B+ Ekin[MeV]=18545.7 direction=(0.0670637,0.997739,0.00447568) material=G4_W + --> #secondaries=28 impactParameter[fm]=6.37995 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 929 projectile=xi- Ekin[MeV]=10749.6 direction=(0.544446,0.0825031,0.834728) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=2.83005 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 930 projectile=anti_neutron Ekin[MeV]=17765.3 direction=(0.0356549,0.124068,0.991633) material=G4_C + --> #secondaries=22 impactParameter[fm]=1.75351 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=3 + Collision 931 projectile=anti_xi_b0 Ekin[MeV]=21810.1 direction=(0.638342,0.5402,0.548365) material=G4_He + --> #secondaries=6 impactParameter[fm]=2.14503 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 932 projectile=neutron Ekin[MeV]=17738.6 direction=(0.591368,0.358222,0.722469) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=3.84329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 933 projectile=anti_omega_b- Ekin[MeV]=9254.45 direction=(0.408835,0.176123,0.895452) material=G4_Be + --> #secondaries=9 impactParameter[fm]=1.16061 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 934 projectile=xi_c0 Ekin[MeV]=2567.18 direction=(0.674712,0.355689,0.646721) material=G4_C + --> #secondaries=5 impactParameter[fm]=2.45865 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 935 projectile=kaon0L Ekin[MeV]=14576 direction=(0.480044,0.548938,0.684269) material=G4_Pb + --> #secondaries=51 impactParameter[fm]=4.2386 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 936 projectile=Bc- Ekin[MeV]=24487.5 direction=(0.91639,0.237932,0.321899) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.222043 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 937 projectile=kaon- Ekin[MeV]=8261.06 direction=(0.384508,0.253929,0.88751) material=G4_Pb + --> #secondaries=40 impactParameter[fm]=4.72351 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 938 projectile=anti_deuteron Ekin[MeV]=10690.4 direction=(0.162173,0.985062,0.0579069) material=G4_Cu + --> #secondaries=34 impactParameter[fm]=3.34337 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=2 + Collision 939 projectile=D+ Ekin[MeV]=3261.01 direction=(0.782237,0.429949,0.450832) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=3.633 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 940 projectile=Ds+ Ekin[MeV]=15191.7 direction=(0.311968,0.223887,0.923337) material=G4_Be + --> #secondaries=12 impactParameter[fm]=0.603344 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 941 projectile=kaon- Ekin[MeV]=15434.7 direction=(0.789939,0.420902,0.445912) material=G4_Al + --> #secondaries=21 impactParameter[fm]=2.00365 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 942 projectile=D0 Ekin[MeV]=17975.7 direction=(0.347811,0.743547,0.571109) material=G4_Si + --> #secondaries=9 impactParameter[fm]=3.31321 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 943 projectile=anti_deuteron Ekin[MeV]=26555 direction=(0.874769,0.0552707,0.481378) material=G4_H + --> #secondaries=12 impactParameter[fm]=1.08232 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 944 projectile=lambda Ekin[MeV]=14160.9 direction=(0.653298,0.587784,0.477192) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.84894 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 945 projectile=sigma+ Ekin[MeV]=5883.29 direction=(0.139859,0.581559,0.801392) material=G4_W + --> #secondaries=23 impactParameter[fm]=5.54076 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 946 projectile=anti_D0 Ekin[MeV]=19498.9 direction=(0.144436,0.789265,0.596824) material=G4_Al + --> #secondaries=19 impactParameter[fm]=1.89943 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 947 projectile=lambda_b Ekin[MeV]=11826.5 direction=(0.358975,0.498649,0.788978) material=G4_Al + --> #secondaries=20 impactParameter[fm]=0.354918 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 948 projectile=anti_hyperH4 Ekin[MeV]=14645.1 direction=(0.833222,0.341549,0.43484) material=G4_He + --> #secondaries=20 impactParameter[fm]=2.06153 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 949 projectile=D+ Ekin[MeV]=28308.2 direction=(0.801925,0.567942,0.185362) material=G4_He + --> #secondaries=10 impactParameter[fm]=0.970734 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 950 projectile=xi- Ekin[MeV]=20650.1 direction=(0.814831,0.0952787,0.571814) material=G4_Pb + --> #secondaries=46 impactParameter[fm]=6.6691 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 951 projectile=Ds- Ekin[MeV]=22360.3 direction=(0.672696,0.662759,0.328984) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=2.75269 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 952 projectile=xi_b0 Ekin[MeV]=13342 direction=(0.854572,0.511702,0.0887021) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=5.10949 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 953 projectile=anti_sigma+ Ekin[MeV]=25209.7 direction=(0.0853156,0.658413,0.747806) material=G4_H + --> #secondaries=6 impactParameter[fm]=2.21756 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 954 projectile=anti_omega_c0 Ekin[MeV]=8484.62 direction=(0.796942,0.35632,0.487769) material=G4_Pb + --> #secondaries=75 impactParameter[fm]=1.04002 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=198 #NNcollisions=5 + Collision 955 projectile=omega- Ekin[MeV]=20820.2 direction=(0.431681,0.828495,0.356718) material=G4_Fe + --> #secondaries=43 impactParameter[fm]=2.36848 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 + Collision 956 projectile=anti_xi_b0 Ekin[MeV]=3535.38 direction=(0.710796,0.677062,0.190671) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=4.037 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=0 + Collision 957 projectile=anti_B0 Ekin[MeV]=10354.3 direction=(0.585686,0.439005,0.681356) material=G4_C + --> #secondaries=9 impactParameter[fm]=1.3983 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 958 projectile=anti_xi_b0 Ekin[MeV]=21442.9 direction=(0.245192,0.954556,0.169423) material=G4_Fe + --> #secondaries=25 impactParameter[fm]=1.49457 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 959 projectile=B0 Ekin[MeV]=2333.01 direction=(0.911561,0.306964,0.273552) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.67775 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 960 projectile=lambda Ekin[MeV]=21958.8 direction=(0.163325,0.477084,0.863548) material=G4_Si + --> #secondaries=16 impactParameter[fm]=1.99007 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 961 projectile=triton Ekin[MeV]=14068 direction=(0.194189,0.698176,0.689087) material=G4_H + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 962 projectile=Bs0 Ekin[MeV]=6694.66 direction=(0.120581,0.677665,0.725417) material=G4_He + --> #secondaries=6 impactParameter[fm]=0.986359 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 963 projectile=B- Ekin[MeV]=16670.1 direction=(0.647977,0.591984,0.47925) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.18933 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 964 projectile=xi- Ekin[MeV]=24506.8 direction=(0.479525,0.87088,0.107814) material=G4_Be + --> #secondaries=9 impactParameter[fm]=1.77252 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 965 projectile=anti_hyperalpha Ekin[MeV]=4220.22 direction=(0.26762,0.208255,0.940749) material=G4_Pb + --> #secondaries=91 impactParameter[fm]=1.15997 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=4 + Collision 966 projectile=B0 Ekin[MeV]=3260.16 direction=(0.497173,0.862965,0.0900575) material=G4_Ar + --> #secondaries=8 impactParameter[fm]=3.66359 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 967 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=9733.07 direction=(0.808115,0.55004,0.210727) material=G4_C + --> #secondaries=29 impactParameter[fm]=1.74339 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=4 + Collision 968 projectile=anti_alpha Ekin[MeV]=12864.3 direction=(0.654727,0.270429,0.705834) material=G4_Pb + --> #secondaries=138 impactParameter[fm]=3.79992 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=5 + Collision 969 projectile=sigma- Ekin[MeV]=27787.7 direction=(0.966548,0.155109,0.204268) material=G4_C + --> #secondaries=9 impactParameter[fm]=1.60768 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 970 projectile=anti_xi_c0 Ekin[MeV]=19008.2 direction=(0.198409,0.328801,0.923322) material=G4_Cu + --> #secondaries=28 impactParameter[fm]=4.42217 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 971 projectile=anti_doublehyperH4 Ekin[MeV]=10139.8 direction=(0.784683,0.288206,0.548826) material=G4_C + --> #secondaries=27 impactParameter[fm]=1.44472 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=4 + Collision 972 projectile=lambda_c+ Ekin[MeV]=19067.6 direction=(0.452394,0.891678,0.0158188) material=G4_W + --> #secondaries=34 impactParameter[fm]=4.75344 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 + Collision 973 projectile=hypertriton Ekin[MeV]=29955.7 direction=(0.350417,0.718794,0.600453) material=G4_He + --> #secondaries=14 impactParameter[fm]=2.36584 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=3 + Collision 974 projectile=D- Ekin[MeV]=21897.2 direction=(0.46712,0.458091,0.756275) material=G4_Si + --> #secondaries=11 impactParameter[fm]=1.92655 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 975 projectile=anti_lambda Ekin[MeV]=22459.8 direction=(0.911775,0.312512,0.266464) material=G4_Ar + --> #secondaries=53 impactParameter[fm]=0.186283 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 976 projectile=anti_xi_c0 Ekin[MeV]=11747 direction=(0.211744,0.572367,0.792187) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.18979 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 977 projectile=anti_doublehyperH4 Ekin[MeV]=11997.4 direction=(0.141892,0.025384,0.989557) material=G4_C + --> #secondaries=9 impactParameter[fm]=3.70034 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 978 projectile=omega- Ekin[MeV]=22817.9 direction=(0.553049,0.533138,0.640235) material=G4_Al + --> #secondaries=27 impactParameter[fm]=3.68654 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 979 projectile=anti_sigma+ Ekin[MeV]=26986.3 direction=(0.65414,0.464257,0.597132) material=G4_He + --> #secondaries=5 impactParameter[fm]=2.04197 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 980 projectile=anti_omega- Ekin[MeV]=10639.7 direction=(0.791713,0.178794,0.584143) material=G4_Fe + --> #secondaries=42 impactParameter[fm]=3.42305 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 981 projectile=deuteron Ekin[MeV]=14223.4 direction=(0.120839,0.988128,0.0948751) material=G4_Si + --> #secondaries=29 impactParameter[fm]=3.75947 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 982 projectile=triton Ekin[MeV]=13056.6 direction=(0.340459,0.907619,0.245591) material=G4_Pb + --> #secondaries=56 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 983 projectile=anti_xi_c+ Ekin[MeV]=9567.99 direction=(0.691488,0.323446,0.645931) material=G4_Cu + --> #secondaries=36 impactParameter[fm]=2.11794 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=4 + Collision 984 projectile=anti_neutron Ekin[MeV]=13882 direction=(0.504848,0.745576,0.435023) material=G4_Be + --> #secondaries=10 impactParameter[fm]=0.616932 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 985 projectile=anti_proton Ekin[MeV]=10492.9 direction=(0.169427,0.837714,0.519162) material=G4_C + --> #secondaries=13 impactParameter[fm]=2.64039 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 986 projectile=anti_Bs0 Ekin[MeV]=26330.7 direction=(0.589419,0.447427,0.672603) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.16531 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 987 projectile=kaon- Ekin[MeV]=19323.7 direction=(0.625009,0.7801,0.0284308) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=4.25995 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 988 projectile=anti_triton Ekin[MeV]=4201.57 direction=(0.240844,0.586894,0.773013) material=G4_He + --> #secondaries=9 impactParameter[fm]=2.38712 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 989 projectile=D- Ekin[MeV]=13619.3 direction=(0.735504,0.075689,0.67328) material=G4_Be + --> #secondaries=7 impactParameter[fm]=3.281 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 990 projectile=D- Ekin[MeV]=7056.59 direction=(0.119166,0.115991,0.986076) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.01535 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 991 projectile=anti_xi_c+ Ekin[MeV]=17346.4 direction=(0.261222,0.957679,0.12089) material=G4_Al + --> #secondaries=10 impactParameter[fm]=2.6154 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 992 projectile=xi- Ekin[MeV]=1665.2 direction=(0.582485,0.596278,0.552417) material=G4_Ar + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 993 projectile=anti_hyperH4 Ekin[MeV]=29903.6 direction=(0.495426,0.654616,0.570991) material=G4_Si + --> #secondaries=45 impactParameter[fm]=0.84559 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 994 projectile=omega_c0 Ekin[MeV]=9912.74 direction=(0.609828,0.457337,0.647266) material=G4_Fe + --> #secondaries=7 impactParameter[fm]=3.43656 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 995 projectile=xi_b- Ekin[MeV]=17024.6 direction=(0.127597,0.313413,0.941005) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.669218 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 996 projectile=hyperalpha Ekin[MeV]=2218.35 direction=(0.0291372,0.167285,0.985478) material=G4_Pb + --> #secondaries=19 impactParameter[fm]=11.5132 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 997 projectile=anti_sigma+ Ekin[MeV]=1663.22 direction=(0.162942,0.621897,0.76596) material=G4_Si + --> #secondaries=29 impactParameter[fm]=1.38711 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 998 projectile=anti_hyperalpha Ekin[MeV]=14120.9 direction=(0.68243,0.360698,0.635757) material=G4_He + --> #secondaries=15 impactParameter[fm]=1.88187 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=3 + Collision 999 projectile=anti_alpha Ekin[MeV]=24558.1 direction=(0.80392,0.274566,0.527567) material=G4_Si + --> #secondaries=13 impactParameter[fm]=4.84604 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=0 + + Final random number = 0.618538 === End of test === diff --git a/examples/extended/hadronic/Hadr10/hadr10.out b/examples/extended/hadronic/Hadr10/hadr10.out index 1a2ac39044..862a70b8c5 100644 --- a/examples/extended/hadronic/Hadr10/hadr10.out +++ b/examples/extended/hadronic/Hadr10/hadr10.out @@ -1,6 +1,6 @@ ===================================================== - Initial seed = 1745424319 + Initial seed = 1750480774 ===================================================== Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... @@ -16,7 +16,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 @@ -79,20 +79,20 @@ Index : 1 used in the geometry : Yes ### Run 0 starts. ### Run 0 starts. - Event#=0 t[ns]=0.19405 r[mm]=58.1744 deltaR[mum]=4.78941e-05 deltaEkin[MeV]=13.964 deltaAngle(deg)=0.00800565 - Event#=1000 t[ns]=0.00649757 r[mm]=1.94791 deltaR[mum]=1.75904e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000266698 - Event#=2000 t[ns]=0.117774 r[mm]=35.3074 deltaR[mum]=8.54248e-06 deltaEkin[MeV]=6.72363 deltaAngle(deg)=0.00445086 - Event#=3000 t[ns]=0.100566 r[mm]=30.1488 deltaR[mum]=6.81255e-06 deltaEkin[MeV]=8.15048 deltaAngle(deg)=0.00403756 - Event#=4000 t[ns]=0.0707489 r[mm]=21.2099 deltaR[mum]=1.69629e-06 deltaEkin[MeV]=4.49316 deltaAngle(deg)=0.00379898 - Event#=5000 t[ns]=0.170441 r[mm]=51.0965 deltaR[mum]=1.83804e-05 deltaEkin[MeV]=7.5004 deltaAngle(deg)=0.00548548 - Event#=6000 t[ns]=0.0962344 r[mm]=28.8502 deltaR[mum]=4.12071e-06 deltaEkin[MeV]=7.16711 deltaAngle(deg)=0.00400351 - Event#=7000 t[ns]=0.0292784 r[mm]=8.77738 deltaR[mum]=1.60925e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00120176 - Event#=8000 t[ns]=0.150675 r[mm]=45.171 deltaR[mum]=2.97326e-05 deltaEkin[MeV]=7.97248 deltaAngle(deg)=0.00716461 - Event#=9000 t[ns]=0.0935957 r[mm]=28.0591 deltaR[mum]=8.3685e-06 deltaEkin[MeV]=8.74491 deltaAngle(deg)=0.00545936 + Event#=0 t[ns]=0.0437684 r[mm]=13.1214 deltaR[mum]=5.48884e-07 deltaEkin[MeV]=1.35352 deltaAngle(deg)=0.00141954 + Event#=1000 t[ns]=0.0226375 r[mm]=6.78651 deltaR[mum]=7.43832e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000929176 + Event#=2000 t[ns]=0.00669889 r[mm]=2.00826 deltaR[mum]=1.92735e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000274962 + Event#=3000 t[ns]=0.253239 r[mm]=75.9188 deltaR[mum]=0.000176588 deltaEkin[MeV]=53.2141 deltaAngle(deg)=0.0114991 + Event#=4000 t[ns]=0.0381917 r[mm]=11.4495 deltaR[mum]=3.95616e-07 deltaEkin[MeV]=0.878977 deltaAngle(deg)=0.00160618 + Event#=5000 t[ns]=0.00940177 r[mm]=2.81856 deltaR[mum]=5.32863e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000385904 + Event#=6000 t[ns]=0.148199 r[mm]=44.4287 deltaR[mum]=2.04047e-05 deltaEkin[MeV]=7.66041 deltaAngle(deg)=0.00624526 + Event#=7000 t[ns]=0.152822 r[mm]=45.8147 deltaR[mum]=1.68415e-05 deltaEkin[MeV]=8.05139 deltaAngle(deg)=0.00551409 + Event#=8000 t[ns]=0.0252531 r[mm]=7.57065 deltaR[mum]=1.03261e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00103654 + Event#=9000 t[ns]=0.442006 r[mm]=132.509 deltaR[mum]=0.000571498 deltaEkin[MeV]=8.03124 deltaAngle(deg)=0.0189384 Run terminated. Run Summary Number of events processed : 10000 - User=0.110000s Real=0.116212s Sys=0.000000s + User=0.100000s Real=0.094095s Sys=0.000000s ============ Run::printInfo() =============== RunID = 0 @@ -114,40 +114,40 @@ Run Summary (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.31985e-06 mean=0.0826496 max=0.876687 - decay R [mm] : min=0.000395679 mean=24.7776 max=262.823 - decay X [mm] : min=0.000395679 mean=24.7776 max=262.823 - decay Y [mm] : min=1.87081e-13 mean=0.00169601 max=0.0807907 - decay Z [mm] : min=-0.0045859 mean=-1.54901e-06 max=0.00381307 - Delta decay R [mm] : min=-3.46945e-18 mean=2.24429e-08 max=4.20557e-06 - deflection angle [deg] : min=0 mean=0.00342591 max=0.0356672 - Delta Ekin [MeV] : min=0 mean=4.81818 max=1177.55 - decay Ekin [GeV] : min=498.822 mean=499.995 max=500 - decay Px [GeV] : min=500.596 mean=501.769 max=501.774 - decay Py [GeV] : min=-0.0100874 mean=0.0297498 max=0.312352 - decay Pz [GeV] : min=-0.0389029 mean=3.57507e-05 max=0.0631392 - decay Etot violation [MeV] : min=-9.38884e-06 mean=5.67951e-06 max=2.67658e-05 - decay Px violation [MeV] : min=-9.38884e-06 mean=5.67953e-06 max=2.67657e-05 - decay Py violation [MeV] : min=-1.55603e-09 mean=4.66321e-10 max=7.6233e-09 - decay Pz violation [MeV] : min=-1.02264e-09 mean=3.80132e-13 max=1.87734e-09 + decay T [ns] : min=1.14646e-05 mean=0.0824025 max=0.788221 + decay R [mm] : min=0.00343698 mean=24.7035 max=236.301 + decay X [mm] : min=0.00343698 mean=24.7035 max=236.301 + decay Y [mm] : min=1.41155e-11 mean=0.00165766 max=0.0637617 + decay Z [mm] : min=-0.00560322 mean=-1.02273e-06 max=0.00308907 + Delta decay R [mm] : min=-3.46945e-18 mean=2.11318e-08 max=1.17967e-05 + deflection angle [deg] : min=0 mean=0.00340845 max=0.0314487 + Delta Ekin [MeV] : min=0 mean=5.59582 max=6552.69 + decay Ekin [GeV] : min=493.447 mean=499.994 max=500 + decay Px [GeV] : min=495.221 mean=501.768 max=501.774 + decay Py [GeV] : min=-0.0130679 mean=0.0296012 max=0.275438 + decay Pz [GeV] : min=-0.0451193 mean=-2.07817e-05 max=0.0333363 + decay Etot violation [MeV] : min=-1.08795e-05 mean=5.62675e-06 max=2.5992e-05 + decay Px violation [MeV] : min=-1.08795e-05 mean=5.62677e-06 max=2.59922e-05 + decay Py violation [MeV] : min=-2.14942e-09 mean=4.62136e-10 max=9.79298e-09 + decay Pz violation [MeV] : min=-1.11852e-09 mean=1.30446e-14 max=1.30559e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.053009 (mean=0.0101477) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.0615967 (mean=0.00996202) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.90581e-09 , 4.90581e-09 + maxGamma_deltaMax{1,2,3} = 0 , 4.52314e-09 , 4.52314e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.58017e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=5.51727e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -51.9929 (mean=-0.216033) (#above threshold = 79) - maxOverestimated_mc_truth_rPos_delta [mum] = 206.538 (mean=0.216806) (#above threshold = 382) - minUnderestimated_rDeltaPos [mum] = -51.9917 (mean=-0.21601) (#above threshold = 79) - maxOverestimated_rDeltaPos [mum] = 206.541 (mean=0.216829) (#above threshold = 382) + minUnderestimated_mc_truth_rPos_delta [mum] = -133.832 (mean=-0.228172) (#above threshold = 93) + maxOverestimated_mc_truth_rPos_delta [mum] = 918.555 (mean=0.290537) (#above threshold = 376) + minUnderestimated_rDeltaPos [mum] = -133.82 (mean=-0.228151) (#above threshold = 93) + maxOverestimated_rDeltaPos [mum] = 918.567 (mean=0.290558) (#above threshold = 376) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0470714 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0318082 ============================================= @@ -171,20 +171,20 @@ Index : 1 used in the geometry : Yes ### Run 1 starts. ### Run 1 starts. - Event#=0 t[ns]=0.0736067 r[mm]=22.0666 deltaR[mum]=1.88201e-06 deltaEkin[MeV]=4.5685 deltaAngle(deg)=0.00274276 - Event#=1000 t[ns]=0.213899 r[mm]=64.125 deltaR[mum]=5.0921e-05 deltaEkin[MeV]=6.64369 deltaAngle(deg)=0.00886512 - Event#=2000 t[ns]=0.040022 r[mm]=11.9982 deltaR[mum]=4.44791e-07 deltaEkin[MeV]=1.07509 deltaAngle(deg)=0.00140736 - Event#=3000 t[ns]=0.0624064 r[mm]=18.7089 deltaR[mum]=1.3921e-06 deltaEkin[MeV]=4.46428 deltaAngle(deg)=0.00243332 - Event#=4000 t[ns]=0.165231 r[mm]=49.5348 deltaR[mum]=2.44039e-05 deltaEkin[MeV]=6.62289 deltaAngle(deg)=0.00648423 - Event#=5000 t[ns]=0.170025 r[mm]=50.9718 deltaR[mum]=3.02345e-05 deltaEkin[MeV]=6.59164 deltaAngle(deg)=0.00760124 - Event#=6000 t[ns]=0.104332 r[mm]=31.2777 deltaR[mum]=6.71407e-06 deltaEkin[MeV]=6.95204 deltaAngle(deg)=0.00487646 - Event#=7000 t[ns]=0.142517 r[mm]=42.7253 deltaR[mum]=2.503e-05 deltaEkin[MeV]=7.81168 deltaAngle(deg)=0.00688618 - Event#=8000 t[ns]=0.00101602 r[mm]=0.304593 deltaR[mum]=6.66134e-12 deltaEkin[MeV]=0 deltaAngle(deg)=4.17086e-05 - Event#=9000 t[ns]=0.0501659 r[mm]=15.0393 deltaR[mum]=7.45844e-07 deltaEkin[MeV]=2.09511 deltaAngle(deg)=0.00183164 + Event#=0 t[ns]=0.11781 r[mm]=35.3182 deltaR[mum]=8.78332e-06 deltaEkin[MeV]=6.73319 deltaAngle(deg)=0.0045748 + Event#=1000 t[ns]=0.0447897 r[mm]=13.4275 deltaR[mum]=5.78428e-07 deltaEkin[MeV]=1.47121 deltaAngle(deg)=0.00168275 + Event#=2000 t[ns]=0.0346051 r[mm]=10.3743 deltaR[mum]=3.00071e-07 deltaEkin[MeV]=0.36764 deltaAngle(deg)=0.00132374 + Event#=3000 t[ns]=0.0094159 r[mm]=2.8228 deltaR[mum]=5.35216e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000386485 + Event#=4000 t[ns]=0.00686992 r[mm]=2.05954 deltaR[mum]=2.07923e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000281982 + Event#=5000 t[ns]=0.109478 r[mm]=32.8205 deltaR[mum]=8.52845e-06 deltaEkin[MeV]=11.3789 deltaAngle(deg)=0.00348194 + Event#=6000 t[ns]=0.0901644 r[mm]=27.0304 deltaR[mum]=3.30698e-06 deltaEkin[MeV]=6.19968 deltaAngle(deg)=0.00361256 + Event#=7000 t[ns]=0.17745 r[mm]=53.1979 deltaR[mum]=3.36998e-05 deltaEkin[MeV]=7.82658 deltaAngle(deg)=0.0073874 + Event#=8000 t[ns]=0.0800173 r[mm]=23.9884 deltaR[mum]=2.35898e-06 deltaEkin[MeV]=5.62327 deltaAngle(deg)=0.00352423 + Event#=9000 t[ns]=0.288896 r[mm]=86.6084 deltaR[mum]=0.000125514 deltaEkin[MeV]=7.21758 deltaAngle(deg)=0.0114635 Run terminated. Run Summary Number of events processed : 10000 - User=0.090000s Real=0.086717s Sys=0.000000s + User=0.090000s Real=0.156719s Sys=0.000000s ============ Run::printInfo() =============== RunID = 1 @@ -206,40 +206,40 @@ Run Summary (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.35406e-06 mean=0.0833671 max=0.703701 - decay R [mm] : min=0.000405934 mean=24.9927 max=210.963 - decay X [mm] : min=0.000405934 mean=24.9927 max=210.963 - decay Y [mm] : min=-0.0527432 mean=-0.00171715 max=-1.96904e-13 - decay Z [mm] : min=-0.0033665 mean=1.2089e-06 max=0.00895609 - Delta decay R [mm] : min=-1.73472e-18 mean=2.17765e-08 max=2.24468e-06 - deflection angle [deg] : min=0 mean=0.00345562 max=0.0287301 - Delta Ekin [MeV] : min=0 mean=4.66119 max=1541.3 - decay Ekin [GeV] : min=498.459 mean=499.995 max=500 - decay Px [GeV] : min=500.232 mean=501.769 max=501.774 - decay Py [GeV] : min=-0.251628 mean=-0.0300165 max=0.00353136 - decay Pz [GeV] : min=-0.0370056 mean=-5.69277e-05 max=0.0512779 - decay Etot violation [MeV] : min=-9.38884e-06 mean=5.55528e-06 max=2.49851e-05 - decay Px violation [MeV] : min=-9.3889e-06 mean=5.5553e-06 max=2.49851e-05 - decay Py violation [MeV] : min=-6.75581e-09 mean=-4.58802e-10 max=1.68893e-09 - decay Pz violation [MeV] : min=-7.43366e-10 mean=-1.37598e-12 max=1.39601e-09 + decay T [ns] : min=5.03126e-06 mean=0.0827853 max=0.844281 + decay R [mm] : min=0.00150832 mean=24.8183 max=253.108 + decay X [mm] : min=0.00150832 mean=24.8182 max=253.108 + decay Y [mm] : min=-0.0765197 mean=-0.00170776 max=-2.71852e-12 + decay Z [mm] : min=-0.00478599 mean=4.77312e-07 max=0.00438387 + Delta decay R [mm] : min=-1.73472e-18 mean=2.19909e-08 max=3.80407e-06 + deflection angle [deg] : min=0 mean=0.00344062 max=0.0345646 + Delta Ekin [MeV] : min=0 mean=4.86317 max=1573.69 + decay Ekin [GeV] : min=498.426 mean=499.995 max=500 + decay Px [GeV] : min=500.2 mean=501.769 max=501.774 + decay Py [GeV] : min=-0.302672 mean=-0.0298749 max=0.0227302 + decay Pz [GeV] : min=-0.0684617 mean=1.08486e-05 max=0.0413878 + decay Etot violation [MeV] : min=-9.38878e-06 mean=5.48526e-06 max=2.49734e-05 + decay Px violation [MeV] : min=-9.38878e-06 mean=5.48528e-06 max=2.49734e-05 + decay Py violation [MeV] : min=-7.70632e-09 mean=-4.56202e-10 max=8.77037e-10 + decay Pz violation [MeV] : min=-2.32292e-09 mean=-2.97531e-13 max=8.78238e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.053009 (mean=0.010077) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.76876e-09 , 4.76876e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.053009 (mean=0.00991549) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 4.46357e-09 , 4.46357e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=5.53304e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.51806e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -83.0826 (mean=-0.213413) (#above threshold = 77) - maxOverestimated_mc_truth_rPos_delta [mum] = 90.2336 (mean=0.190851) (#above threshold = 382) - minUnderestimated_rDeltaPos [mum] = -83.0814 (mean=-0.213392) (#above threshold = 77) - maxOverestimated_rDeltaPos [mum] = 90.2348 (mean=0.190873) (#above threshold = 382) + minUnderestimated_mc_truth_rPos_delta [mum] = -69.2203 (mean=-0.215512) (#above threshold = 86) + maxOverestimated_mc_truth_rPos_delta [mum] = 191.014 (mean=0.197538) (#above threshold = 416) + minUnderestimated_rDeltaPos [mum] = -69.2178 (mean=-0.21549) (#above threshold = 86) + maxOverestimated_rDeltaPos [mum] = 191.017 (mean=0.19756) (#above threshold = 416) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0327623 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0315443 ============================================= @@ -263,20 +263,20 @@ Index : 1 used in the geometry : Yes ### Run 2 starts. ### Run 2 starts. - Event#=0 t[ns]=0.254224 r[mm]=76.2138 deltaR[mum]=9.95706e-05 deltaEkin[MeV]=8.40226 deltaAngle(deg)=0.0104956 - Event#=1000 t[ns]=0.396283 r[mm]=118.802 deltaR[mum]=0.000408383 deltaEkin[MeV]=7.11425 deltaAngle(deg)=0.01636 - Event#=2000 t[ns]=0.722797 r[mm]=216.687 deltaR[mum]=0.00236633 deltaEkin[MeV]=7.89122 deltaAngle(deg)=0.0295467 - Event#=3000 t[ns]=0.567876 r[mm]=170.244 deltaR[mum]=0.00114636 deltaEkin[MeV]=7.68749 deltaAngle(deg)=0.0228757 - Event#=4000 t[ns]=0.0356343 r[mm]=10.6828 deltaR[mum]=3.27425e-07 deltaEkin[MeV]=0.540496 deltaAngle(deg)=0.00119116 - Event#=5000 t[ns]=0.238748 r[mm]=71.5744 deltaR[mum]=8.51764e-05 deltaEkin[MeV]=9.78766 deltaAngle(deg)=0.0100924 - Event#=6000 t[ns]=0.03437 r[mm]=10.3038 deltaR[mum]=2.93666e-07 deltaEkin[MeV]=0.420148 deltaAngle(deg)=0.00166695 - Event#=7000 t[ns]=0.20039 r[mm]=60.0749 deltaR[mum]=4.82737e-05 deltaEkin[MeV]=7.89765 deltaAngle(deg)=0.00816974 - Event#=8000 t[ns]=0.191592 r[mm]=57.4374 deltaR[mum]=5.3275e-05 deltaEkin[MeV]=16.3307 deltaAngle(deg)=0.00765873 - Event#=9000 t[ns]=0.464004 r[mm]=139.104 deltaR[mum]=0.000703058 deltaEkin[MeV]=7.03021 deltaAngle(deg)=0.0196206 + Event#=0 t[ns]=0.0527445 r[mm]=15.8123 deltaR[mum]=8.34664e-07 deltaEkin[MeV]=2.62393 deltaAngle(deg)=0.000954691 + Event#=1000 t[ns]=0.277478 r[mm]=83.1852 deltaR[mum]=0.000113096 deltaEkin[MeV]=7.49361 deltaAngle(deg)=0.0110227 + Event#=2000 t[ns]=1.13817 r[mm]=341.211 deltaR[mum]=0.00946043 deltaEkin[MeV]=7.06221 deltaAngle(deg)=0.0469178 + Event#=3000 t[ns]=0.795183 r[mm]=238.388 deltaR[mum]=0.00319501 deltaEkin[MeV]=9.32661 deltaAngle(deg)=0.0323881 + Event#=4000 t[ns]=0.0471772 r[mm]=14.1433 deltaR[mum]=6.7001e-07 deltaEkin[MeV]=2.37296 deltaAngle(deg)=0.00180097 + Event#=5000 t[ns]=0.0429258 r[mm]=12.8687 deltaR[mum]=5.24745e-07 deltaEkin[MeV]=1.5048 deltaAngle(deg)=0.00197481 + Event#=6000 t[ns]=0.058132 r[mm]=17.4274 deltaR[mum]=1.04422e-06 deltaEkin[MeV]=2.84619 deltaAngle(deg)=0.00201992 + Event#=7000 t[ns]=0.206994 r[mm]=62.0549 deltaR[mum]=5.63886e-05 deltaEkin[MeV]=10.0303 deltaAngle(deg)=0.00879796 + Event#=8000 t[ns]=0.12274 r[mm]=36.7962 deltaR[mum]=2.38562e-05 deltaEkin[MeV]=7.47778 deltaAngle(deg)=0.00717759 + Event#=9000 t[ns]=0.152533 r[mm]=45.728 deltaR[mum]=2.48518e-05 deltaEkin[MeV]=8.55276 deltaAngle(deg)=0.00667849 Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.218347s Sys=0.000000s + User=0.220000s Real=0.426265s Sys=0.000000s ============ Run::printInfo() =============== RunID = 2 @@ -293,45 +293,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9789 + # Decays = 9777 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=2.42971e-05 mean=0.276176 max=2.86081 - decay R [mm] : min=0.00728403 mean=82.7949 max=857.643 - decay X [mm] : min=0.00728403 mean=82.7949 max=857.642 - decay Y [mm] : min=-0.863261 mean=-0.0170325 max=0.0200547 - decay Z [mm] : min=-0.0350473 mean=3.22085e-06 max=0.0850942 - Delta decay R [mm] : min=0 mean=8.5861e-07 max=0.0001497 - deflection angle [deg] : min=1.2073e-06 mean=0.0113913 max=0.116339 - Delta Ekin [MeV] : min=0 mean=9.1581 max=6599.93 - decay Ekin [GeV] : min=493.4 mean=499.991 max=500 - decay Px [GeV] : min=495.266 mean=501.857 max=501.866 - decay Py [GeV] : min=-1.01906 mean=-0.0994228 max=0.0569725 - decay Pz [GeV] : min=-0.139197 mean=-3.73076e-05 max=0.158509 - decay Etot violation [MeV] : min=-8.7184e-06 mean=1.14811e-05 max=2.88397e-05 - decay Px violation [MeV] : min=-8.71834e-06 mean=1.14813e-05 max=2.88397e-05 - decay Py violation [MeV] : min=-4.21761e-08 mean=-2.59283e-09 max=1.96192e-09 - decay Pz violation [MeV] : min=-3.97992e-09 mean=-8.66531e-13 max=5.46819e-09 + decay T [ns] : min=1.42617e-05 mean=0.276717 max=2.69048 + decay R [mm] : min=0.00427553 mean=82.957 max=806.581 + decay X [mm] : min=0.00427553 mean=82.957 max=806.581 + decay Y [mm] : min=-0.766024 mean=-0.016704 max=0.00597441 + decay Z [mm] : min=-0.0352422 mean=2.29739e-05 max=0.0676459 + Delta decay R [mm] : min=8.67362e-19 mean=7.89913e-07 max=0.000124389 + deflection angle [deg] : min=8.53688e-07 mean=0.0114109 max=0.109573 + Delta Ekin [MeV] : min=0 mean=7.79362 max=1324.66 + decay Ekin [GeV] : min=498.675 mean=499.992 max=500 + decay Px [GeV] : min=500.541 mean=501.858 max=501.866 + decay Py [GeV] : min=-0.95984 mean=-0.0995494 max=0.0600999 + decay Pz [GeV] : min=-0.159927 mean=4.10752e-06 max=0.158644 + decay Etot violation [MeV] : min=-8.71834e-06 mean=1.14896e-05 max=2.87531e-05 + decay Px violation [MeV] : min=-8.7184e-06 mean=1.14898e-05 max=2.87533e-05 + decay Py violation [MeV] : min=-2.90638e-08 mean=-2.59088e-09 max=1.6331e-09 + decay Pz violation [MeV] : min=-6.32309e-09 mean=-1.85314e-13 max=5.41203e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0111618) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0111912) maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.12336e-09 , 4.12336e-09 + maxGamma_deltaMax{1,2,3} = 0 , 4.34432e-09 , 4.34432e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -191.238 (mean=-0.414893) (#above threshold = 178) - maxOverestimated_mc_truth_rPos_delta [mum] = 452.337 (mean=1.2522) (#above threshold = 3463) - minUnderestimated_rDeltaPos [mum] = -191.235 (mean=-0.414035) (#above threshold = 178) - maxOverestimated_rDeltaPos [mum] = 452.343 (mean=1.25305) (#above threshold = 3463) + minUnderestimated_mc_truth_rPos_delta [mum] = -57.9799 (mean=-0.373395) (#above threshold = 147) + maxOverestimated_mc_truth_rPos_delta [mum] = 475.448 (mean=1.26187) (#above threshold = 3466) + minUnderestimated_rDeltaPos [mum] = -57.9711 (mean=-0.372605) (#above threshold = 147) + maxOverestimated_rDeltaPos [mum] = 475.457 (mean=1.26266) (#above threshold = 3466) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.134505 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0828087 ============================================= @@ -355,20 +355,20 @@ Index : 1 used in the geometry : Yes ### Run 3 starts. ### Run 3 starts. - Event#=0 t[ns]=0.0205954 r[mm]=6.17432 deltaR[mum]=5.59943e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000845202 - Event#=1000 t[ns]=0.20672 r[mm]=61.9726 deltaR[mum]=4.76984e-05 deltaEkin[MeV]=6.69809 deltaAngle(deg)=0.00910661 - Event#=2000 t[ns]=0.0520979 r[mm]=15.6185 deltaR[mum]=8.11703e-07 deltaEkin[MeV]=2.54002 deltaAngle(deg)=0.00188247 - Event#=3000 t[ns]=0.00644116 r[mm]=1.931 deltaR[mum]=1.71285e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000264333 - Event#=4000 t[ns]=0.389805 r[mm]=116.86 deltaR[mum]=0.000392349 deltaEkin[MeV]=7.62116 deltaAngle(deg)=0.0158586 - Event#=5000 t[ns]=1.11383 r[mm]=333.914 deltaR[mum]=0.00869518 deltaEkin[MeV]=7.02773 deltaAngle(deg)=0.0449269 - Event#=6000 t[ns]=0.0757514 r[mm]=22.7095 deltaR[mum]=2.38393e-06 deltaEkin[MeV]=5.55972 deltaAngle(deg)=0.00320806 - Event#=7000 t[ns]=0.405606 r[mm]=121.597 deltaR[mum]=0.000414455 deltaEkin[MeV]=7.93 deltaAngle(deg)=0.0167508 - Event#=8000 t[ns]=0.119783 r[mm]=35.9097 deltaR[mum]=1.64002e-05 deltaEkin[MeV]=11.1009 deltaAngle(deg)=0.00543117 - Event#=9000 t[ns]=0.724199 r[mm]=217.108 deltaR[mum]=0.00255347 deltaEkin[MeV]=8.34024 deltaAngle(deg)=0.0307238 + Event#=0 t[ns]=0.84145 r[mm]=252.259 deltaR[mum]=0.00396263 deltaEkin[MeV]=8.31866 deltaAngle(deg)=0.0352554 + Event#=1000 t[ns]=0.0207164 r[mm]=6.21059 deltaR[mum]=5.69864e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000850168 + Event#=2000 t[ns]=0.0633201 r[mm]=18.9828 deltaR[mum]=1.28176e-06 deltaEkin[MeV]=3.60473 deltaAngle(deg)=0.00208276 + Event#=3000 t[ns]=0.0743092 r[mm]=22.2772 deltaR[mum]=1.9294e-06 deltaEkin[MeV]=4.88695 deltaAngle(deg)=0.00235093 + Event#=4000 t[ns]=0.0736181 r[mm]=22.07 deltaR[mum]=1.88208e-06 deltaEkin[MeV]=4.24136 deltaAngle(deg)=0.00200809 + Event#=5000 t[ns]=0.118885 r[mm]=35.6406 deltaR[mum]=1.52892e-05 deltaEkin[MeV]=9.19713 deltaAngle(deg)=0.00546471 + Event#=6000 t[ns]=0.0106065 r[mm]=3.17973 deltaR[mum]=7.6481e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000435273 + Event#=7000 t[ns]=0.483692 r[mm]=145.006 deltaR[mum]=0.000718063 deltaEkin[MeV]=7.27059 deltaAngle(deg)=0.0196233 + Event#=8000 t[ns]=0.127401 r[mm]=38.1936 deltaR[mum]=1.11946e-05 deltaEkin[MeV]=7.16366 deltaAngle(deg)=0.00475135 + Event#=9000 t[ns]=0.14017 r[mm]=42.0218 deltaR[mum]=2.04327e-05 deltaEkin[MeV]=8.09649 deltaAngle(deg)=0.00609281 Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.221611s Sys=0.000000s + User=0.220000s Real=0.440586s Sys=0.000000s ============ Run::printInfo() =============== RunID = 3 @@ -385,45 +385,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9787 + # Decays = 9782 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=3.9953e-05 mean=0.278916 max=2.50557 - decay R [mm] : min=0.0119775 mean=83.6163 max=751.147 - decay X [mm] : min=0.0119775 mean=83.6163 max=751.146 - decay Y [mm] : min=-0.00634029 mean=0.0171226 max=0.678516 - decay Z [mm] : min=-0.0279628 mean=-5.91758e-06 max=0.0395844 - Delta decay R [mm] : min=-1.73472e-18 mean=8.32686e-07 max=0.000100863 - deflection angle [deg] : min=1.9089e-06 mean=0.0114926 max=0.10315 - Delta Ekin [MeV] : min=0 mean=7.89263 max=865.997 - decay Ekin [GeV] : min=499.134 mean=499.992 max=500 - decay Px [GeV] : min=501 mean=501.858 max=501.866 - decay Py [GeV] : min=-0.0704554 mean=0.100256 max=0.903571 - decay Pz [GeV] : min=-0.124279 mean=-3.09829e-05 max=0.144219 - decay Etot violation [MeV] : min=-8.7184e-06 mean=1.15052e-05 max=3.00931e-05 - decay Px violation [MeV] : min=-8.71834e-06 mean=1.15053e-05 max=3.00934e-05 - decay Py violation [MeV] : min=-1.65538e-09 mean=2.59267e-09 max=3.48449e-08 - decay Pz violation [MeV] : min=-4.75147e-09 mean=-1.00102e-12 max=4.43538e-09 + decay T [ns] : min=3.10951e-05 mean=0.277123 max=2.31926 + decay R [mm] : min=0.00932201 mean=83.0788 max=695.292 + decay X [mm] : min=0.00932201 mean=83.0788 max=695.292 + decay Y [mm] : min=-0.0159 mean=0.0169296 max=0.586308 + decay Z [mm] : min=-0.0531779 mean=6.08575e-06 max=0.149055 + Delta decay R [mm] : min=1.73472e-18 mean=8.15223e-07 max=8.00333e-05 + deflection angle [deg] : min=1.47863e-06 mean=0.0114175 max=0.0958867 + Delta Ekin [MeV] : min=0 mean=7.95911 max=887.956 + decay Ekin [GeV] : min=499.112 mean=499.992 max=500 + decay Px [GeV] : min=500.978 mean=501.858 max=501.866 + decay Py [GeV] : min=-0.113728 mean=0.0995567 max=0.839945 + decay Pz [GeV] : min=-0.140157 mean=1.89865e-05 max=0.262444 + decay Etot violation [MeV] : min=-8.7184e-06 mean=1.14875e-05 max=2.87214e-05 + decay Px violation [MeV] : min=-8.7184e-06 mean=1.14877e-05 max=2.87216e-05 + decay Py violation [MeV] : min=-3.9081e-09 mean=2.58059e-09 max=2.88848e-08 + decay Pz violation [MeV] : min=-4.59511e-09 mean=-7.50303e-14 max=7.70871e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0112285) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0110696) maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.4094e-09 , 4.4094e-09 + maxGamma_deltaMax{1,2,3} = 0 , 4.16173e-09 , 4.16173e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -34.7959 (mean=-0.373436) (#above threshold = 158) - maxOverestimated_mc_truth_rPos_delta [mum] = 119.76 (mean=1.21145) (#above threshold = 3510) - minUnderestimated_rDeltaPos [mum] = -34.7959 (mean=-0.372603) (#above threshold = 156) - maxOverestimated_rDeltaPos [mum] = 119.763 (mean=1.21228) (#above threshold = 3510) + minUnderestimated_mc_truth_rPos_delta [mum] = -32.3084 (mean=-0.376883) (#above threshold = 161) + maxOverestimated_mc_truth_rPos_delta [mum] = 228.829 (mean=1.20482) (#above threshold = 3463) + minUnderestimated_rDeltaPos [mum] = -32.308 (mean=-0.376068) (#above threshold = 160) + maxOverestimated_rDeltaPos [mum] = 228.897 (mean=1.20564) (#above threshold = 3463) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.110486 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.116083 ============================================= @@ -447,20 +447,20 @@ Index : 1 used in the geometry : Yes ### Run 4 starts. ### Run 4 starts. - Event#=0 t[ns]=0.128024 r[mm]=38.3805 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.103819 r[mm]=31.1238 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.113346 r[mm]=33.9799 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.113492 r[mm]=34.0238 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0489489 r[mm]=14.6744 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.129048 r[mm]=38.6875 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0287208 r[mm]=8.61023 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0236228 r[mm]=7.0819 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.106857 r[mm]=32.0348 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.34058 r[mm]=102.103 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.355817 r[mm]=106.67 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0665953 r[mm]=19.9646 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.289448 r[mm]=86.7738 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0406646 r[mm]=12.1909 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00312176 r[mm]=0.935874 deltaR[mum]=1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0905036 r[mm]=27.1321 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0457278 r[mm]=13.7087 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0220926 r[mm]=6.62316 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0380593 r[mm]=11.4098 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.091357 r[mm]=27.3879 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.120000s Real=0.167204s Sys=0.000000s + User=0.110000s Real=0.249040s Sys=0.000000s ============ Run::printInfo() =============== RunID = 4 @@ -477,1888 +477,1888 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9836 + # Decays = 9847 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.40128e-06 mean=0.10793 max=1.06048 - decay R [mm] : min=0.000420091 mean=32.3563 max=317.923 - decay X [mm] : min=0.000420091 mean=32.3563 max=317.923 - decay Y [mm] : min=-0.0126237 mean=2.66283e-06 max=0.0314844 - decay Z [mm] : min=-0.012861 mean=6.75078e-06 max=0.0140826 - Delta decay R [mm] : min=-2.84217e-14 mean=1.09243e-09 max=1.20855e-06 - deflection angle [deg] : min=0 mean=4.85673e-05 max=0.0243052 - Delta Ekin [MeV] : min=0 mean=0.000878661 max=0.869992 + decay T [ns] : min=1.70857e-05 mean=0.110684 max=1.23888 + decay R [mm] : min=0.00512212 mean=33.1819 max=371.403 + decay X [mm] : min=0.00512212 mean=33.1819 max=371.403 + decay Y [mm] : min=-0.0100461 mean=5.58803e-06 max=0.0172716 + decay Z [mm] : min=-0.0110843 mean=-2.04422e-06 max=0.00638698 + Delta decay R [mm] : min=-2.84217e-14 mean=7.79888e-10 max=7.34961e-07 + deflection angle [deg] : min=0 mean=4.81179e-05 max=0.0258559 + Delta Ekin [MeV] : min=0 mean=0.000900739 max=0.984551 decay Ekin [GeV] : min=499.999 mean=500 max=500 decay Px [GeV] : min=501.86 mean=501.861 max=501.861 - decay Py [GeV] : min=-0.164246 mean=-2.70791e-05 max=0.139235 - decay Pz [GeV] : min=-0.126863 mean=8.67931e-05 max=0.179261 - decay Etot violation [MeV] : min=-5.98573e-06 mean=2.90217e-06 max=1.42886e-05 - decay Px violation [MeV] : min=-5.98573e-06 mean=2.90226e-06 max=1.42889e-05 - decay Py violation [MeV] : min=-2.23235e-09 mean=2.44474e-13 max=1.31307e-09 - decay Pz violation [MeV] : min=-6.27509e-10 mean=9.43745e-13 max=1.74708e-09 + decay Py [GeV] : min=-0.112589 mean=6.82065e-05 max=0.198494 + decay Pz [GeV] : min=-0.151773 mean=6.59304e-06 max=0.225061 + decay Etot violation [MeV] : min=-8.44855e-06 mean=2.93513e-06 max=1.18515e-05 + decay Px violation [MeV] : min=-8.44849e-06 mean=2.93522e-06 max=1.18517e-05 + decay Py violation [MeV] : min=-1.20616e-09 mean=-7.99671e-14 max=2.7967e-09 + decay Pz violation [MeV] : min=-1.19149e-09 mean=4.88931e-13 max=1.9573e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0371413 (mean=0.00381498) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0453235 (mean=0.00382447) maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.53646e-09 , 3.53646e-09 + maxGamma_deltaMax{1,2,3} = 0 , 2.89555e-09 , 2.89555e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.65275e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=3.63224e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0352659 (mean=-3.4327e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0848028 (mean=7.26747e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0340574 (mean=-3.32346e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0855527 (mean=7.37671e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0309701 (mean=-3.29602e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0471923 (mean=4.35179e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0302639 (mean=-3.21803e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0475582 (mean=4.42977e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 5 starts. +### Run 5 starts. + Event#=0 t[ns]=0.0016843 r[mm]=0.504936 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0437511 r[mm]=13.1162 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0620759 r[mm]=18.6097 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0372281 r[mm]=11.1606 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00545703 r[mm]=1.63597 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0117766 r[mm]=3.53051 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0867978 r[mm]=26.0211 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.00553201 r[mm]=1.65844 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.201192 r[mm]=60.3154 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.149308 r[mm]=44.761 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.130000s Real=0.263836s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 5 + primary PDG code = -421 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 501.865 + primary initial momentum [GeV] = 501.861 + primary initial Lorentz beta = 0.999993 + primary initial Lorentz gamma = 269.12 + primary initial 3 momentum [GeV] = (501.861,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9826 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=7.54755e-06 mean=0.10931 max=1.08856 + decay R [mm] : min=0.00226268 mean=32.7702 max=326.339 + decay X [mm] : min=0.00226268 mean=32.7702 max=326.339 + decay Y [mm] : min=-0.0112679 mean=-1.18553e-06 max=0.013581 + decay Z [mm] : min=-0.0197873 mean=-3.33628e-06 max=0.0159927 + Delta decay R [mm] : min=-2.84217e-14 mean=7.33047e-10 max=2.70356e-06 + deflection angle [deg] : min=0 mean=3.47597e-05 max=0.0511622 + Delta Ekin [MeV] : min=0 mean=0.00084369 max=3.85491 + decay Ekin [GeV] : min=499.996 mean=500 max=500 + decay Px [GeV] : min=501.857 mean=501.861 max=501.861 + decay Py [GeV] : min=-0.140121 mean=3.29172e-06 max=0.253617 + decay Pz [GeV] : min=-0.369516 mean=-2.33316e-05 max=0.0803191 + decay Etot violation [MeV] : min=-9.51247e-06 mean=2.8802e-06 max=1.1538e-05 + decay Px violation [MeV] : min=-9.51235e-06 mean=2.88028e-06 max=1.15381e-05 + decay Py violation [MeV] : min=-7.8785e-10 mean=1.77632e-13 max=1.9181e-09 + decay Pz violation [MeV] : min=-3.5717e-09 mean=-7.1862e-13 max=5.62878e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0371413 (mean=0.00380701) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.30118e-09 , 3.30118e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.62187e-12) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0695549 (mean=-2.26705e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.206426 (mean=4.97352e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0668514 (mean=-2.19375e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.209129 (mean=5.04683e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 6 starts. +### Run 6 starts. + Event#=0 t[ns]=0.00706647 r[mm]=2.11846 deltaR[mum]=2.26041e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00028994 + Event#=1000 t[ns]=0.246113 r[mm]=73.7822 deltaR[mum]=6.58844e-05 deltaEkin[MeV]=7.35645 deltaAngle(deg)=0.00934894 + Event#=2000 t[ns]=0.0705053 r[mm]=21.1368 deltaR[mum]=1.66265e-06 deltaEkin[MeV]=5.17771 deltaAngle(deg)=0.00197549 + Event#=3000 t[ns]=0.0437101 r[mm]=13.1039 deltaR[mum]=5.46796e-07 deltaEkin[MeV]=1.25915 deltaAngle(deg)=0.00203379 + Event#=4000 t[ns]=0.0428758 r[mm]=12.8537 deltaR[mum]=5.23126e-07 deltaEkin[MeV]=1.20652 deltaAngle(deg)=0.00190522 + Event#=5000 t[ns]=0.0877838 r[mm]=26.3167 deltaR[mum]=4.43568e-06 deltaEkin[MeV]=7.33355 deltaAngle(deg)=0.00311672 + Event#=6000 t[ns]=0.368864 r[mm]=110.582 deltaR[mum]=0.000335902 deltaEkin[MeV]=7.7111 deltaAngle(deg)=0.0157398 + Event#=7000 t[ns]=0.226998 r[mm]=68.0519 deltaR[mum]=8.41115e-05 deltaEkin[MeV]=11.0157 deltaAngle(deg)=0.00955094 + Event#=8000 t[ns]=0.00880922 r[mm]=2.64092 deltaR[mum]=4.38094e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000361445 + Event#=9000 t[ns]=0.449878 r[mm]=134.869 deltaR[mum]=0.00050639 deltaEkin[MeV]=6.90449 deltaAngle(deg)=0.017637 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.170000s Real=0.424650s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 6 + primary PDG code = 431 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 501.968 + primary initial momentum [GeV] = 501.964 + primary initial Lorentz beta = 0.999992 + primary initial Lorentz gamma = 255.03 + primary initial 3 momentum [GeV] = (501.964,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9874 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.41448e-05 mean=0.126759 max=1.58797 + decay R [mm] : min=0.00424047 mean=38.001 max=476.059 + decay X [mm] : min=0.00424047 mean=38.001 max=476.059 + decay Y [mm] : min=-0.278318 mean=-0.00382688 max=-2.14785e-11 + decay Z [mm] : min=-0.014247 mean=-1.28568e-08 max=0.0265987 + Delta decay R [mm] : min=-3.46945e-18 mean=8.37824e-08 max=2.59548e-05 + deflection angle [deg] : min=8.53688e-07 mean=0.00524432 max=0.066114 + Delta Ekin [MeV] : min=0 mean=6.38112 max=1941.5 + decay Ekin [GeV] : min=498.059 mean=499.994 max=500 + decay Px [GeV] : min=500.023 mean=501.958 max=501.964 + decay Py [GeV] : min=-0.579264 mean=-0.0456038 max=0.0224348 + decay Pz [GeV] : min=-0.169683 mean=-7.25298e-05 max=0.158418 + decay Etot violation [MeV] : min=-1.15986e-05 mean=3.26721e-06 max=1.85134e-05 + decay Px violation [MeV] : min=-1.15985e-05 mean=3.26725e-06 max=1.85135e-05 + decay Py violation [MeV] : min=-7.99218e-09 mean=-3.8126e-10 max=2.41857e-09 + decay Pz violation [MeV] : min=-1.48633e-09 mean=-4.22083e-13 max=1.53845e-09 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0562266 (mean=0.0119388) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.28521e-09 , 3.28521e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -61.6802 (mean=-0.287021) (#above threshold = 117) + maxOverestimated_mc_truth_rPos_delta [mum] = 110.79 (mean=0.410844) (#above threshold = 1090) + minUnderestimated_rDeltaPos [mum] = -61.6789 (mean=-0.286938) (#above threshold = 117) + maxOverestimated_rDeltaPos [mum] = 110.792 (mean=0.410928) (#above threshold = 1090) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0682055 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 7 starts. +### Run 7 starts. + Event#=0 t[ns]=0.0322774 r[mm]=9.67646 deltaR[mum]=2.36822e-07 deltaEkin[MeV]=0.218072 deltaAngle(deg)=0.00135884 + Event#=1000 t[ns]=0.0406753 r[mm]=12.194 deltaR[mum]=4.62199e-07 deltaEkin[MeV]=1.28079 deltaAngle(deg)=0.00151027 + Event#=2000 t[ns]=0.0244329 r[mm]=7.32475 deltaR[mum]=9.34506e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00100249 + Event#=3000 t[ns]=0.0511852 r[mm]=15.3448 deltaR[mum]=1.15735e-06 deltaEkin[MeV]=4.77257 deltaAngle(deg)=0.00253151 + Event#=4000 t[ns]=0.0113733 r[mm]=3.4096 deltaR[mum]=9.42579e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000466649 + Event#=5000 t[ns]=0.0445867 r[mm]=13.3667 deltaR[mum]=5.7207e-07 deltaEkin[MeV]=1.55202 deltaAngle(deg)=0.00181605 + Event#=6000 t[ns]=0.158634 r[mm]=47.557 deltaR[mum]=1.62413e-05 deltaEkin[MeV]=9.68133 deltaAngle(deg)=0.00469646 + Event#=7000 t[ns]=0.0590522 r[mm]=17.7033 deltaR[mum]=1.08318e-06 deltaEkin[MeV]=3.87312 deltaAngle(deg)=0.00303976 + Event#=8000 t[ns]=0.036585 r[mm]=10.9678 deltaR[mum]=3.52566e-07 deltaEkin[MeV]=0.672002 deltaAngle(deg)=0.00181081 + Event#=9000 t[ns]=0.152451 r[mm]=45.7033 deltaR[mum]=2.14374e-05 deltaEkin[MeV]=6.78618 deltaAngle(deg)=0.00644935 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.160000s Real=0.159363s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 7 + primary PDG code = -431 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 501.968 + primary initial momentum [GeV] = 501.964 + primary initial Lorentz beta = 0.999992 + primary initial Lorentz gamma = 255.03 + primary initial 3 momentum [GeV] = (501.964,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9871 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=2.26736e-05 mean=0.125384 max=1.2832 + decay R [mm] : min=0.00679732 mean=37.5889 max=384.69 + decay X [mm] : min=0.00679732 mean=37.5889 max=384.69 + decay Y [mm] : min=-0.00653122 mean=0.00365377 max=0.167396 + decay Z [mm] : min=-0.0183424 mean=1.78826e-06 max=0.0101641 + Delta decay R [mm] : min=-3.46945e-18 mean=7.35249e-08 max=1.33243e-05 + deflection angle [deg] : min=1.2073e-06 mean=0.00519754 max=0.0511331 + Delta Ekin [MeV] : min=0 mean=6.24233 max=4639.65 + decay Ekin [GeV] : min=495.36 mean=499.994 max=500 + decay Px [GeV] : min=497.325 mean=501.958 max=501.964 + decay Py [GeV] : min=-0.06824 mean=0.0451689 max=0.448009 + decay Pz [GeV] : min=-0.139592 mean=5.96743e-05 max=0.137421 + decay Etot violation [MeV] : min=-1.25607e-05 mean=3.15791e-06 max=1.90039e-05 + decay Px violation [MeV] : min=-1.25605e-05 mean=3.15795e-06 max=1.9004e-05 + decay Py violation [MeV] : min=-2.64944e-09 mean=3.59685e-10 max=6.71417e-09 + decay Pz violation [MeV] : min=-1.76261e-09 mean=-2.94338e-13 max=1.861e-09 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0639789 (mean=0.0120521) + maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.31431e-09 , 3.31431e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -125.671 (mean=-0.284108) (#above threshold = 111) + maxOverestimated_mc_truth_rPos_delta [mum] = 364.606 (mean=0.406225) (#above threshold = 1070) + minUnderestimated_rDeltaPos [mum] = -125.665 (mean=-0.284035) (#above threshold = 111) + maxOverestimated_rDeltaPos [mum] = 364.612 (mean=0.406298) (#above threshold = 1070) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0484217 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 8 starts. +### Run 8 starts. + Event#=0 t[ns]=0.195941 r[mm]=58.7385 deltaR[mum]=8.14005e-05 deltaEkin[MeV]=6.76511 deltaAngle(deg)=0.00813277 + Event#=1000 t[ns]=0.00320386 r[mm]=0.960442 deltaR[mum]=2.07945e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000130595 + Event#=2000 t[ns]=0.0750027 r[mm]=22.484 deltaR[mum]=1.95115e-06 deltaEkin[MeV]=5.04737 deltaAngle(deg)=0.00348072 + Event#=3000 t[ns]=0.00638813 r[mm]=1.91501 deltaR[mum]=1.64824e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000260389 + Event#=4000 t[ns]=0.0618026 r[mm]=18.5269 deltaR[mum]=1.19199e-06 deltaEkin[MeV]=3.56726 deltaAngle(deg)=0.00275575 + Event#=5000 t[ns]=0.534719 r[mm]=160.296 deltaR[mum]=0.00110243 deltaEkin[MeV]=6.86442 deltaAngle(deg)=0.0215224 + Event#=6000 t[ns]=0.0360993 r[mm]=10.8217 deltaR[mum]=3.35209e-07 deltaEkin[MeV]=0.554343 deltaAngle(deg)=0.00182278 + Event#=7000 t[ns]=0.19028 r[mm]=57.0414 deltaR[mum]=8.12192e-05 deltaEkin[MeV]=8.45304 deltaAngle(deg)=0.00580056 + Event#=8000 t[ns]=0.0442432 r[mm]=13.2631 deltaR[mum]=5.54767e-07 deltaEkin[MeV]=1.64021 deltaAngle(deg)=0.00183328 + Event#=9000 t[ns]=0.0204547 r[mm]=6.13183 deltaR[mum]=5.41149e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000833761 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.190000s Real=0.323891s Sys=0.010000s + + + ============ Run::printInfo() =============== RunID = 8 + primary PDG code = 521 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.279 + primary initial momentum [GeV] = 505.252 + primary initial Lorentz beta = 0.999945 + primary initial Lorentz gamma = 95.7097 + primary initial 3 momentum [GeV] = (505.252,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9825 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.41148e-06 mean=0.156861 max=1.38343 + decay R [mm] : min=0.000423128 mean=47.0231 max=414.72 + decay X [mm] : min=0.000423128 mean=47.0231 max=414.72 + decay Y [mm] : min=-0.201027 mean=-0.00568203 max=0.0034074 + decay Z [mm] : min=-0.0858594 mean=-3.31089e-05 max=0.0134247 + Delta decay R [mm] : min=-3.46945e-18 mean=2.02934e-07 max=1.71469e-05 + deflection angle [deg] : min=0 mean=0.00645777 max=0.0559157 + Delta Ekin [MeV] : min=0 mean=6.4962 max=812.42 + decay Ekin [GeV] : min=499.188 mean=499.994 max=500 + decay Px [GeV] : min=504.439 mean=505.245 max=505.252 + decay Py [GeV] : min=-0.493111 mean=-0.0565178 max=0.0905083 + decay Pz [GeV] : min=-0.301403 mean=-0.000175463 max=0.0882356 + decay Etot violation [MeV] : min=-1.53377e-06 mean=4.05728e-07 max=2.50887e-06 + decay Px violation [MeV] : min=-1.53383e-06 mean=4.05712e-07 max=2.50887e-06 + decay Py violation [MeV] : min=-1.30484e-09 mean=-5.2746e-11 max=7.86599e-10 + decay Pz violation [MeV] : min=-4.18879e-10 mean=-2.10536e-13 max=1.44851e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0247082 (mean=0.00447712) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.73117e-10 , 1.73117e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.05227e-11) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -24.302 (mean=-0.301394) (#above threshold = 122) + maxOverestimated_mc_truth_rPos_delta [mum] = 54.5325 (mean=0.528295) (#above threshold = 1642) + minUnderestimated_rDeltaPos [mum] = -24.2974 (mean=-0.301191) (#above threshold = 121) + maxOverestimated_rDeltaPos [mum] = 54.5393 (mean=0.528498) (#above threshold = 1642) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0656804 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 9 starts. +### Run 9 starts. + Event#=0 t[ns]=0.0690903 r[mm]=20.7116 deltaR[mum]=1.25775e-05 deltaEkin[MeV]=8.55119 deltaAngle(deg)=0.00314935 + Event#=1000 t[ns]=0.0921007 r[mm]=27.6096 deltaR[mum]=9.37881e-06 deltaEkin[MeV]=7.38792 deltaAngle(deg)=0.00262773 + Event#=2000 t[ns]=0.224544 r[mm]=67.3128 deltaR[mum]=0.000103062 deltaEkin[MeV]=6.94975 deltaAngle(deg)=0.00888783 + Event#=3000 t[ns]=0.000302781 r[mm]=0.0907664 deltaR[mum]=1.52656e-13 deltaEkin[MeV]=0 deltaAngle(deg)=1.23416e-05 + Event#=4000 t[ns]=0.00758759 r[mm]=2.27458 deltaR[mum]=2.76223e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000309281 + Event#=5000 t[ns]=0.288568 r[mm]=86.5057 deltaR[mum]=0.000217898 deltaEkin[MeV]=7.55145 deltaAngle(deg)=0.0113977 + Event#=6000 t[ns]=0.152375 r[mm]=45.6784 deltaR[mum]=4.50267e-05 deltaEkin[MeV]=7.44098 deltaAngle(deg)=0.00504385 + Event#=7000 t[ns]=0.0954664 r[mm]=28.6186 deltaR[mum]=3.85428e-06 deltaEkin[MeV]=7.36429 deltaAngle(deg)=0.00422426 + Event#=8000 t[ns]=0.0351676 r[mm]=10.5424 deltaR[mum]=3.1074e-07 deltaEkin[MeV]=0.423014 deltaAngle(deg)=0.00161366 + Event#=9000 t[ns]=0.0290919 r[mm]=8.72107 deltaR[mum]=1.55683e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00118583 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.190000s Real=0.184203s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 9 + primary PDG code = -521 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.279 + primary initial momentum [GeV] = 505.252 + primary initial Lorentz beta = 0.999945 + primary initial Lorentz gamma = 95.7097 + primary initial 3 momentum [GeV] = (505.252,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9859 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=4.26457e-06 mean=0.154557 max=1.46359 + decay R [mm] : min=0.00127841 mean=46.3325 max=438.749 + decay X [mm] : min=0.00127841 mean=46.3325 max=438.749 + decay Y [mm] : min=-0.00253455 mean=0.00548755 max=0.224801 + decay Z [mm] : min=-0.0297555 mean=4.79646e-06 max=0.0170601 + Delta decay R [mm] : min=0 mean=2.0407e-07 max=7.30067e-05 + deflection angle [deg] : min=0 mean=0.00634475 max=0.059142 + Delta Ekin [MeV] : min=0 mean=7.32948 max=6685.75 + decay Ekin [GeV] : min=493.314 mean=499.993 max=500 + decay Px [GeV] : min=498.566 mean=505.244 max=505.252 + decay Py [GeV] : min=-0.0500692 mean=0.0556082 max=0.521511 + decay Pz [GeV] : min=-0.13962 mean=0.000126901 max=0.105791 + decay Etot violation [MeV] : min=-1.51515e-06 mean=3.971e-07 max=2.57971e-06 + decay Px violation [MeV] : min=-1.51503e-06 mean=3.97083e-07 max=2.57971e-06 + decay Py violation [MeV] : min=-7.8245e-10 mean=5.12747e-11 max=1.29762e-09 + decay Pz violation [MeV] : min=-2.47098e-10 mean=2.08043e-13 max=2.55909e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0247082 (mean=0.00448798) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.61137e-10 , 1.61137e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.0153e-11) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -279.437 (mean=-0.33784) (#above threshold = 128) + maxOverestimated_mc_truth_rPos_delta [mum] = 663.746 (mean=0.61761) (#above threshold = 1533) + minUnderestimated_rDeltaPos [mum] = -279.364 (mean=-0.337636) (#above threshold = 128) + maxOverestimated_rDeltaPos [mum] = 663.819 (mean=0.617814) (#above threshold = 1533) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0545394 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 10 starts. +### Run 10 starts. + Event#=0 t[ns]=0.142184 r[mm]=42.6235 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.183796 r[mm]=55.0976 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.14727 r[mm]=44.1482 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0931874 r[mm]=27.9354 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.116444 r[mm]=34.907 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0379071 r[mm]=11.3636 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.104704 r[mm]=31.3878 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.00966504 r[mm]=2.89735 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.112946 r[mm]=33.8586 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0702168 r[mm]=21.0493 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.120000s Real=0.130766s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 10 + primary PDG code = 511 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.28 + primary initial momentum [GeV] = 505.252 + primary initial Lorentz beta = 0.999945 + primary initial Lorentz gamma = 95.704 + primary initial 3 momentum [GeV] = (505.252,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9824 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.21281e-05 mean=0.144786 max=1.53467 + decay R [mm] : min=0.0036357 mean=43.4034 max=460.057 + decay X [mm] : min=0.0036357 mean=43.4034 max=460.057 + decay Y [mm] : min=-0.0393445 mean=-4.19288e-06 max=0.00675102 + decay Z [mm] : min=-0.0321799 mean=-2.78173e-06 max=0.0142126 + Delta decay R [mm] : min=-5.68434e-14 mean=6.49574e-10 max=1.3381e-06 + deflection angle [deg] : min=0 mean=3.56036e-05 max=0.0231488 + Delta Ekin [MeV] : min=0 mean=0.00060131 max=0.799881 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.251 mean=505.252 max=505.252 + decay Py [GeV] : min=-0.18007 mean=1.23685e-05 max=0.153545 + decay Pz [GeV] : min=-0.152045 mean=9.29785e-06 max=0.141034 + decay Etot violation [MeV] : min=-1.45065e-06 mean=-1.80913e-07 max=1.12841e-06 + decay Px violation [MeV] : min=-1.45059e-06 mean=-1.80937e-07 max=1.12841e-06 + decay Py violation [MeV] : min=-4.00689e-10 mean=-1.58127e-14 max=1.96806e-10 + decay Pz violation [MeV] : min=-1.14284e-10 mean=-1.74323e-14 max=1.51488e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0121017 (mean=0.00235702) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.34776e-10 , 1.34776e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0345033 (mean=-2.43147e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.136982 (mean=4.45504e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0336781 (mean=-2.36651e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.13832 (mean=4.52e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 11 starts. +### Run 11 starts. + Event#=0 t[ns]=0.0235186 r[mm]=7.05032 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0311019 r[mm]=9.32361 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0760453 r[mm]=22.7965 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0414027 r[mm]=12.4115 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0261286 r[mm]=7.83272 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.201346 r[mm]=60.3588 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.148198 r[mm]=44.4264 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0131608 r[mm]=3.94531 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.145551 r[mm]=43.6326 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.174852 r[mm]=52.4166 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.120000s Real=0.112406s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 11 + primary PDG code = -511 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.28 + primary initial momentum [GeV] = 505.252 + primary initial Lorentz beta = 0.999945 + primary initial Lorentz gamma = 95.704 + primary initial 3 momentum [GeV] = (505.252,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9861 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.05663e-05 mean=0.143172 max=1.67207 + decay R [mm] : min=0.00316752 mean=42.9196 max=501.246 + decay X [mm] : min=0.00316752 mean=42.9196 max=501.246 + decay Y [mm] : min=-0.0275852 mean=-2.56213e-06 max=0.0223634 + decay Z [mm] : min=-0.0245622 mean=-8.09394e-06 max=0.0142797 + Delta decay R [mm] : min=-2.84217e-14 mean=8.3073e-10 max=7.32395e-07 + deflection angle [deg] : min=0 mean=4.50802e-05 max=0.0193851 + Delta Ekin [MeV] : min=0 mean=0.000783621 max=0.560925 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.251 mean=505.252 max=505.252 + decay Py [GeV] : min=-0.157728 mean=-3.06892e-05 max=0.106556 + decay Pz [GeV] : min=-0.147466 mean=-4.37682e-05 max=0.101886 + decay Etot violation [MeV] : min=-1.90345e-06 mean=-1.78851e-07 max=1.0301e-06 + decay Px violation [MeV] : min=-1.90345e-06 mean=-1.78876e-07 max=1.0301e-06 + decay Py violation [MeV] : min=-2.55682e-10 mean=-6.96318e-14 max=2.64862e-10 + decay Pz violation [MeV] : min=-2.13205e-10 mean=-3.29753e-14 max=1.63368e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0167993 (mean=0.00235962) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.44169e-10 , 1.44169e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0208335 (mean=-2.81665e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0721133 (mean=5.99806e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0201011 (mean=-2.73358e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0726957 (mean=6.08114e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 12 starts. +### Run 12 starts. + Event#=0 t[ns]=0.0392757 r[mm]=11.7739 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.177191 r[mm]=53.1175 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0546848 r[mm]=16.3932 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.00745145 r[mm]=2.23376 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.12792 r[mm]=38.3473 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0561995 r[mm]=16.8472 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0729497 r[mm]=21.8685 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.08892 r[mm]=26.656 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.484609 r[mm]=145.274 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.266262 r[mm]=79.8187 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.100000s Real=0.104910s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 12 + primary PDG code = 531 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.367 + primary initial momentum [GeV] = 505.338 + primary initial Lorentz beta = 0.999944 + primary initial Lorentz gamma = 94.1633 + primary initial 3 momentum [GeV] = (505.338,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9868 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.66757e-06 mean=0.141288 max=1.39288 + decay R [mm] : min=0.000499898 mean=42.3548 max=417.55 + decay X [mm] : min=0.000499898 mean=42.3548 max=417.55 + decay Y [mm] : min=-0.0192684 mean=-1.10074e-06 max=0.0169302 + decay Z [mm] : min=-0.0793627 mean=-7.06771e-06 max=0.0186048 + Delta decay R [mm] : min=-5.68434e-14 mean=8.17293e-10 max=4.42427e-06 + deflection angle [deg] : min=0 mean=2.61284e-05 max=0.0381669 + Delta Ekin [MeV] : min=0 mean=0.000626317 max=2.17514 + decay Ekin [GeV] : min=499.998 mean=500 max=500 + decay Px [GeV] : min=505.336 mean=505.338 max=505.338 + decay Py [GeV] : min=-0.132304 mean=-1.19856e-05 max=0.142179 + decay Pz [GeV] : min=-0.336581 mean=-1.07906e-06 max=0.176065 + decay Etot violation [MeV] : min=-1.08348e-06 mean=4.39693e-07 max=1.84966e-06 + decay Px violation [MeV] : min=-1.08348e-06 mean=4.39727e-07 max=1.84961e-06 + decay Py violation [MeV] : min=-2.26379e-10 mean=-3.79259e-14 max=1.64647e-10 + decay Pz violation [MeV] : min=-1.36865e-10 mean=8.24322e-14 max=2.39652e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0163627 (mean=0.00215305) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.16515e-10 , 1.16515e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.101508 (mean=-2.51043e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.512851 (mean=8.91915e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0970836 (mean=-2.42871e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.517275 (mean=9.00088e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 13 starts. +### Run 13 starts. + Event#=0 t[ns]=0.102565 r[mm]=30.7466 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0667408 r[mm]=20.0073 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0960133 r[mm]=28.7824 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.681855 r[mm]=204.404 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.312575 r[mm]=93.7022 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.224354 r[mm]=67.2557 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.608463 r[mm]=182.402 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.160816 r[mm]=48.2086 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.3426 r[mm]=102.703 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.1956 r[mm]=58.6362 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.100000s Real=0.100435s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 13 + primary PDG code = -531 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.367 + primary initial momentum [GeV] = 505.338 + primary initial Lorentz beta = 0.999944 + primary initial Lorentz gamma = 94.1633 + primary initial 3 momentum [GeV] = (505.338,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9878 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.69323e-05 mean=0.142555 max=1.34624 + decay R [mm] : min=0.00507589 mean=42.7345 max=403.57 + decay X [mm] : min=0.00507589 mean=42.7345 max=403.57 + decay Y [mm] : min=-0.00889769 mean=-2.05786e-07 max=0.0204759 + decay Z [mm] : min=-0.0183532 mean=1.29411e-06 max=0.0196408 + Delta decay R [mm] : min=-5.68434e-14 mean=6.62502e-10 max=9.8915e-07 + deflection angle [deg] : min=0 mean=3.14303e-05 max=0.0259969 + Delta Ekin [MeV] : min=0 mean=0.000533877 max=0.974333 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.337 mean=505.338 max=505.338 + decay Py [GeV] : min=-0.135618 mean=-1.50981e-05 max=0.166639 + decay Pz [GeV] : min=-0.117299 mean=-1.28135e-05 max=0.228296 + decay Etot violation [MeV] : min=-8.09261e-07 mean=4.45444e-07 max=1.90648e-06 + decay Px violation [MeV] : min=-8.09378e-07 mean=4.45478e-07 max=1.90659e-06 + decay Py violation [MeV] : min=-1.28139e-10 mean=1.86428e-14 max=1.92472e-10 + decay Pz violation [MeV] : min=-2.37634e-10 mean=3.71561e-14 max=8.48445e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0106766 (mean=0.00215448) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.28097e-10 , 1.28097e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0253153 (mean=-1.93322e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0769849 (mean=4.8944e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0243261 (mean=-1.86697e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0779369 (mean=4.96065e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 14 starts. +### Run 14 starts. + Event#=0 t[ns]=0.0254608 r[mm]=7.63236 deltaR[mum]=1.03946e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00103577 + Event#=1000 t[ns]=0.0357675 r[mm]=10.722 deltaR[mum]=3.25217e-07 deltaEkin[MeV]=0.50402 deltaAngle(deg)=0.00145888 + Event#=2000 t[ns]=0.0241881 r[mm]=7.25087 deltaR[mum]=8.91269e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000984003 + Event#=3000 t[ns]=0.0121016 r[mm]=3.62769 deltaR[mum]=1.11609e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000492308 + Event#=4000 t[ns]=0.0610601 r[mm]=18.3039 deltaR[mum]=9.82653e-06 deltaEkin[MeV]=6.85066 deltaAngle(deg)=0.00210248 + Event#=5000 t[ns]=0.0213628 r[mm]=6.40392 deltaR[mum]=6.14016e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000869065 + Event#=6000 t[ns]=0.0514805 r[mm]=15.4323 deltaR[mum]=7.76469e-07 deltaEkin[MeV]=2.33317 deltaAngle(deg)=0.00234314 + Event#=7000 t[ns]=0.153145 r[mm]=45.9083 deltaR[mum]=0.000111271 deltaEkin[MeV]=13.2474 deltaAngle(deg)=0.00637163 + Event#=8000 t[ns]=0.0538341 r[mm]=16.1378 deltaR[mum]=8.59174e-07 deltaEkin[MeV]=2.35453 deltaAngle(deg)=0.00257561 + Event#=9000 t[ns]=0.0122295 r[mm]=3.66603 deltaR[mum]=1.15197e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00049751 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.080000s Real=0.079166s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 14 + primary PDG code = 541 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 506.275 + primary initial momentum [GeV] = 506.236 + primary initial Lorentz beta = 0.999923 + primary initial Lorentz gamma = 80.6825 + primary initial 3 momentum [GeV] = (506.236,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9976 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.68907e-06 mean=0.0404653 max=0.379094 + decay R [mm] : min=0.000506331 mean=12.1303 max=113.641 + decay X [mm] : min=0.000506331 mean=12.1303 max=113.641 + decay Y [mm] : min=-0.0158481 mean=-0.000421861 max=0.000677083 + decay Z [mm] : min=-0.00886105 mean=-2.06742e-06 max=0.00166753 + Delta decay R [mm] : min=-3.46945e-18 mean=8.08394e-09 max=5.29755e-06 + deflection angle [deg] : min=0 mean=0.00166777 max=0.0155414 + Delta Ekin [MeV] : min=0 mean=2.52217 max=1276.03 + decay Ekin [GeV] : min=498.724 mean=499.997 max=500 + decay Px [GeV] : min=504.96 mean=506.233 max=506.236 + decay Py [GeV] : min=-0.137313 mean=-0.0145595 max=0.0107129 + decay Pz [GeV] : min=-0.115298 mean=-0.000111993 max=0.0801921 + decay Etot violation [MeV] : min=-1.65781e-06 mean=1.53029e-07 max=1.50932e-06 + decay Px violation [MeV] : min=-1.65775e-06 mean=1.53048e-07 max=1.50927e-06 + decay Py violation [MeV] : min=-2.19046e-10 mean=-1.18642e-12 max=1.78062e-10 + decay Pz violation [MeV] : min=-7.03047e-11 mean=1.84323e-14 max=9.38343e-11 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0153686 (mean=0.00314808) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.02688e-10 , 1.02688e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.69637e-12) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -34.5329 (mean=-0.101441) (#above threshold = 39) + maxOverestimated_mc_truth_rPos_delta [mum] = 34.2617 (mean=0.0390149) (#above threshold = 42) + minUnderestimated_rDeltaPos [mum] = -34.5322 (mean=-0.101433) (#above threshold = 39) + maxOverestimated_rDeltaPos [mum] = 34.267 (mean=0.039023) (#above threshold = 42) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0154639 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 15 starts. +### Run 15 starts. + Event#=0 t[ns]=0.0192499 r[mm]=5.77052 deltaR[mum]=4.49241e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000783107 + Event#=1000 t[ns]=0.0325251 r[mm]=9.75002 deltaR[mum]=2.39465e-07 deltaEkin[MeV]=0.274616 deltaAngle(deg)=0.00110878 + Event#=2000 t[ns]=0.0266149 r[mm]=7.97832 deltaR[mum]=1.18736e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00108272 + Event#=3000 t[ns]=0.0273661 r[mm]=8.20353 deltaR[mum]=1.29075e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00111329 + Event#=4000 t[ns]=0.0199194 r[mm]=5.97122 deltaR[mum]=4.97771e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000810344 + Event#=5000 t[ns]=0.048271 r[mm]=14.4702 deltaR[mum]=6.72152e-07 deltaEkin[MeV]=2.11171 deltaAngle(deg)=0.00183302 + Event#=6000 t[ns]=0.0134731 r[mm]=4.03881 deltaR[mum]=1.54028e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000548101 + Event#=7000 t[ns]=0.00401932 r[mm]=1.20487 deltaR[mum]=4.09006e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000163514 + Event#=8000 t[ns]=0.0329113 r[mm]=9.8658 deltaR[mum]=2.49832e-07 deltaEkin[MeV]=0.291161 deltaAngle(deg)=0.00143587 + Event#=9000 t[ns]=0.000742711 r[mm]=0.222642 deltaR[mum]=2.498e-12 deltaEkin[MeV]=0 deltaAngle(deg)=3.02186e-05 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.080000s Real=0.077369s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 15 + primary PDG code = -541 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 506.275 + primary initial momentum [GeV] = 506.236 + primary initial Lorentz beta = 0.999923 + primary initial Lorentz gamma = 80.6825 + primary initial 3 momentum [GeV] = (506.236,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9973 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.28056e-07 mean=0.0409428 max=0.297408 + decay R [mm] : min=3.83872e-05 mean=12.2734 max=89.154 + decay X [mm] : min=3.83872e-05 mean=12.2734 max=89.154 + decay Y [mm] : min=1.74531e-15 mean=0.000429496 max=0.0126871 + decay Z [mm] : min=-0.00863236 mean=-1.74686e-06 max=0.00115137 + Delta decay R [mm] : min=-3.46945e-18 mean=8.78067e-09 max=1.12526e-05 + deflection angle [deg] : min=0 mean=0.00169048 max=0.0269523 + Delta Ekin [MeV] : min=0 mean=2.36102 max=1702.26 + decay Ekin [GeV] : min=498.298 mean=499.998 max=500 + decay Px [GeV] : min=504.534 mean=506.234 max=506.236 + decay Py [GeV] : min=-0.00499857 mean=0.014763 max=0.217093 + decay Pz [GeV] : min=-0.0979231 mean=-3.85846e-05 max=0.0377751 + decay Etot violation [MeV] : min=-1.90682e-06 mean=1.43385e-07 max=1.44663e-06 + decay Px violation [MeV] : min=-1.90688e-06 mean=1.43404e-07 max=1.44652e-06 + decay Py violation [MeV] : min=-1.79938e-10 mean=7.88825e-13 max=1.74708e-10 + decay Pz violation [MeV] : min=-3.8618e-11 mean=-1.28059e-14 max=3.80851e-11 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0202326 (mean=0.00316802) + maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.97886e-11 , 9.97886e-11 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 2.84217e-11 (mean=2.71352e-12) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -61.74 (mean=-0.0962379) (#above threshold = 33) + maxOverestimated_mc_truth_rPos_delta [mum] = 72.9824 (mean=0.043378) (#above threshold = 23) + minUnderestimated_rDeltaPos [mum] = -61.7287 (mean=-0.0962292) (#above threshold = 33) + maxOverestimated_rDeltaPos [mum] = 72.9936 (mean=0.0433868) (#above threshold = 23) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0155079 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 16 starts. +### Run 16 starts. + Event#=0 t[ns]=0.028288 r[mm]=8.48044 deltaR[mum]=1.44848e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00115993 + Event#=1000 t[ns]=0.0445981 r[mm]=13.37 deltaR[mum]=5.71678e-07 deltaEkin[MeV]=1.45622 deltaAngle(deg)=0.00184382 + Event#=2000 t[ns]=0.0197836 r[mm]=5.93091 deltaR[mum]=4.95479e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000811211 + Event#=3000 t[ns]=0.106614 r[mm]=31.9617 deltaR[mum]=7.0213e-06 deltaEkin[MeV]=6.71378 deltaAngle(deg)=0.004462 + Event#=4000 t[ns]=0.00223261 r[mm]=0.669314 deltaR[mum]=7.11653e-11 deltaEkin[MeV]=0 deltaAngle(deg)=9.15438e-05 + Event#=5000 t[ns]=0.205906 r[mm]=61.7283 deltaR[mum]=5.92962e-05 deltaEkin[MeV]=8.3328 deltaAngle(deg)=0.00858322 + Event#=6000 t[ns]=0.0391211 r[mm]=11.7281 deltaR[mum]=4.19648e-07 deltaEkin[MeV]=1.08626 deltaAngle(deg)=0.00144156 + Event#=7000 t[ns]=0.0286068 r[mm]=8.57601 deltaR[mum]=1.498e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.001173 + Event#=8000 t[ns]=0.0357484 r[mm]=10.717 deltaR[mum]=3.2991e-07 deltaEkin[MeV]=0.531661 deltaAngle(deg)=0.00141143 + Event#=9000 t[ns]=0.0633926 r[mm]=19.0044 deltaR[mum]=1.28322e-06 deltaEkin[MeV]=3.45528 deltaAngle(deg)=0.0023649 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.120000s Real=0.126158s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 16 + primary PDG code = 4122 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.286 + primary initial momentum [GeV] = 502.281 + primary initial Lorentz beta = 0.99999 + primary initial Lorentz gamma = 219.679 + primary initial 3 momentum [GeV] = (502.281,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9921 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.4508e-06 mean=0.043336 max=0.411663 + decay R [mm] : min=0.000434934 mean=12.9917 max=123.412 + decay X [mm] : min=0.000434934 mean=12.9917 max=123.412 + decay Y [mm] : min=-0.0178555 mean=-0.000486928 max=0.00573554 + decay Z [mm] : min=-0.00460831 mean=7.65377e-07 max=0.00820098 + Delta decay R [mm] : min=-1.73472e-18 mean=4.76976e-09 max=8.01452e-06 + deflection angle [deg] : min=0 mean=0.0018219 max=0.0461676 + Delta Ekin [MeV] : min=0 mean=5.21113 max=24852.1 + decay Ekin [GeV] : min=475.148 mean=499.995 max=500 + decay Px [GeV] : min=477.429 mean=502.276 max=502.281 + decay Py [GeV] : min=-0.200106 mean=-0.0155596 max=0.0935371 + decay Pz [GeV] : min=-0.0761118 mean=3.38867e-05 max=0.404514 + decay Etot violation [MeV] : min=-1.16764e-05 mean=-8.62565e-07 max=8.54797e-06 + decay Px violation [MeV] : min=-1.16765e-05 mean=-8.62552e-07 max=8.54791e-06 + decay Py violation [MeV] : min=-1.43893e-09 mean=4.4412e-11 max=1.54616e-09 + decay Pz violation [MeV] : min=-1.08631e-09 mean=-2.12371e-13 max=7.87324e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0409168 (mean=0.0097655) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.81092e-09 , 1.81092e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -488.059 (mean=-0.158741) (#above threshold = 41) + maxOverestimated_mc_truth_rPos_delta [mum] = 372.269 (mean=0.0827299) (#above threshold = 46) + minUnderestimated_rDeltaPos [mum] = -488.051 (mean=-0.158736) (#above threshold = 41) + maxOverestimated_rDeltaPos [mum] = 372.277 (mean=0.0827347) (#above threshold = 46) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0153892 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 17 starts. +### Run 17 starts. + Event#=0 t[ns]=0.0234141 r[mm]=7.01931 deltaR[mum]=8.2137e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000960079 + Event#=1000 t[ns]=0.00178701 r[mm]=0.535728 deltaR[mum]=3.66374e-11 deltaEkin[MeV]=0 deltaAngle(deg)=7.32731e-05 + Event#=2000 t[ns]=0.030811 r[mm]=9.23681 deltaR[mum]=1.95685e-07 deltaEkin[MeV]=0.0773993 deltaAngle(deg)=0.00131021 + Event#=3000 t[ns]=0.00791122 r[mm]=2.3717 deltaR[mum]=3.16769e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000324393 + Event#=4000 t[ns]=0.0600205 r[mm]=17.9935 deltaR[mum]=1.12441e-06 deltaEkin[MeV]=3.2875 deltaAngle(deg)=0.00282114 + Event#=5000 t[ns]=0.0321432 r[mm]=9.6362 deltaR[mum]=2.32832e-07 deltaEkin[MeV]=0.402347 deltaAngle(deg)=0.0014056 + Event#=6000 t[ns]=0.00247296 r[mm]=0.741367 deltaR[mum]=9.69225e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0.000101402 + Event#=7000 t[ns]=0.105706 r[mm]=31.6895 deltaR[mum]=9.90748e-06 deltaEkin[MeV]=9.66997 deltaAngle(deg)=0.00461589 + Event#=8000 t[ns]=0.0659776 r[mm]=19.7794 deltaR[mum]=1.41676e-06 deltaEkin[MeV]=3.99735 deltaAngle(deg)=0.00350911 + Event#=9000 t[ns]=0.00337503 r[mm]=1.0118 deltaR[mum]=2.46025e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.00013839 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.140000s Real=0.145529s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 17 + primary PDG code = -4122 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.286 + primary initial momentum [GeV] = 502.281 + primary initial Lorentz beta = 0.99999 + primary initial Lorentz gamma = 219.679 + primary initial 3 momentum [GeV] = (502.281,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9902 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=3.08062e-07 mean=0.0426271 max=0.377086 + decay R [mm] : min=9.23537e-05 mean=12.7792 max=113.046 + decay X [mm] : min=9.23537e-05 mean=12.7792 max=113.046 + decay Y [mm] : min=-0.00148512 mean=0.000468367 max=0.0243453 + decay Z [mm] : min=-0.00408574 mean=3.05768e-06 max=0.00458237 + Delta decay R [mm] : min=-1.73472e-18 mean=4.40157e-09 max=9.68696e-06 + deflection angle [deg] : min=0 mean=0.00179982 max=0.0379253 + Delta Ekin [MeV] : min=0 mean=3.11646 max=6105.48 + decay Ekin [GeV] : min=493.895 mean=499.997 max=500 + decay Px [GeV] : min=496.176 mean=502.278 max=502.281 + decay Py [GeV] : min=-0.136391 mean=0.0153885 max=0.265969 + decay Pz [GeV] : min=-0.138754 mean=-1.37396e-05 max=0.202837 + decay Etot violation [MeV] : min=-1.09315e-05 mean=-9.23542e-07 max=1.14568e-05 + decay Px violation [MeV] : min=-1.09314e-05 mean=-9.23529e-07 max=1.14568e-05 + decay Py violation [MeV] : min=-1.54965e-09 mean=-4.47674e-11 max=1.27676e-09 + decay Pz violation [MeV] : min=-4.87148e-10 mean=2.21128e-13 max=6.70809e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0475902 (mean=0.00986679) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.74222e-09 , 1.74222e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -172.417 (mean=-0.120089) (#above threshold = 38) + maxOverestimated_mc_truth_rPos_delta [mum] = 455.053 (mean=0.0827848) (#above threshold = 26) + minUnderestimated_rDeltaPos [mum] = -172.407 (mean=-0.120085) (#above threshold = 38) + maxOverestimated_rDeltaPos [mum] = 455.063 (mean=0.0827892) (#above threshold = 26) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0154462 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 18 starts. +### Run 18 starts. + Event#=0 t[ns]=0.0222992 r[mm]=6.68505 deltaR[mum]=7.09033e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000914031 + Event#=1000 t[ns]=0.0133929 r[mm]=4.01504 deltaR[mum]=1.53602e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000548968 + Event#=2000 t[ns]=0.0244653 r[mm]=7.33444 deltaR[mum]=9.36362e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00100282 + Event#=3000 t[ns]=0.0214657 r[mm]=6.43518 deltaR[mum]=6.32436e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000879867 + Event#=4000 t[ns]=0.0928904 r[mm]=27.8475 deltaR[mum]=3.89472e-06 deltaEkin[MeV]=7.02556 deltaAngle(deg)=0.00367619 + Event#=5000 t[ns]=0.0453642 r[mm]=13.5997 deltaR[mum]=5.93685e-07 deltaEkin[MeV]=1.91933 deltaAngle(deg)=0.00197431 + Event#=6000 t[ns]=0.0983493 r[mm]=29.484 deltaR[mum]=4.59526e-06 deltaEkin[MeV]=6.69898 deltaAngle(deg)=0.00425467 + Event#=7000 t[ns]=0.053307 r[mm]=15.9808 deltaR[mum]=8.52957e-07 deltaEkin[MeV]=2.45556 deltaAngle(deg)=0.00195241 + Event#=8000 t[ns]=0.0311936 r[mm]=9.35149 deltaR[mum]=2.0631e-07 deltaEkin[MeV]=0.118998 deltaAngle(deg)=0.00120278 + Event#=9000 t[ns]=0.401003 r[mm]=120.216 deltaR[mum]=0.000530629 deltaEkin[MeV]=10.1802 deltaAngle(deg)=0.0178704 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.200000s Real=0.202954s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 18 + primary PDG code = 4232 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.468 + primary initial momentum [GeV] = 502.462 + primary initial Lorentz beta = 0.999988 + primary initial Lorentz gamma = 203.617 + primary initial 3 momentum [GeV] = (502.462,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9833 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.27977e-05 mean=0.0911977 max=0.864994 + decay R [mm] : min=0.0038366 mean=27.3401 max=259.315 + decay X [mm] : min=0.0038366 mean=27.3401 max=259.315 + decay Y [mm] : min=-0.0813389 mean=-0.0020116 max=0.00616263 + decay Z [mm] : min=-0.00951614 mean=9.74111e-06 max=0.0215208 + Delta decay R [mm] : min=-1.73472e-18 mean=3.17585e-08 max=4.22068e-06 + deflection angle [deg] : min=8.53688e-07 mean=0.00381642 max=0.0499508 + Delta Ekin [MeV] : min=0 mean=5.3997 max=2504.42 + decay Ekin [GeV] : min=497.496 mean=499.995 max=500 + decay Px [GeV] : min=499.957 mean=502.456 max=502.462 + decay Py [GeV] : min=-0.313089 mean=-0.0328356 max=0.147638 + decay Pz [GeV] : min=-0.150152 mean=0.000148341 max=0.421545 + decay Etot violation [MeV] : min=-1.31503e-05 mean=-3.59593e-06 max=5.40121e-06 + decay Px violation [MeV] : min=-1.31506e-05 mean=-3.59595e-06 max=5.40115e-06 + decay Py violation [MeV] : min=-1.19751e-09 mean=2.89567e-10 max=3.75763e-09 + decay Pz violation [MeV] : min=-4.23472e-09 mean=-8.40434e-13 max=1.5002e-09 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.044095 (mean=0.0125541) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.44439e-09 , 1.44439e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=6.12275e-12) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -96.9026 (mean=-0.241389) (#above threshold = 118) + maxOverestimated_mc_truth_rPos_delta [mum] = 58.0966 (mean=0.23488) (#above threshold = 499) + minUnderestimated_rDeltaPos [mum] = -96.9011 (mean=-0.241357) (#above threshold = 118) + maxOverestimated_rDeltaPos [mum] = 58.098 (mean=0.234912) (#above threshold = 499) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0347383 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 19 starts. +### Run 19 starts. + Event#=0 t[ns]=0.000663076 r[mm]=0.198783 deltaR[mum]=1.91513e-12 deltaEkin[MeV]=0 deltaAngle(deg)=2.71843e-05 + Event#=1000 t[ns]=0.213765 r[mm]=64.0843 deltaR[mum]=6.55337e-05 deltaEkin[MeV]=9.94154 deltaAngle(deg)=0.00872456 + Event#=2000 t[ns]=0.156135 r[mm]=46.8076 deltaR[mum]=1.91865e-05 deltaEkin[MeV]=7.07142 deltaAngle(deg)=0.00562642 + Event#=3000 t[ns]=0.0846744 r[mm]=25.3844 deltaR[mum]=2.75518e-06 deltaEkin[MeV]=5.42776 deltaAngle(deg)=0.00279754 + Event#=4000 t[ns]=0.166461 r[mm]=49.9033 deltaR[mum]=6.97829e-05 deltaEkin[MeV]=26.1253 deltaAngle(deg)=0.00798848 + Event#=5000 t[ns]=0.0433001 r[mm]=12.9809 deltaR[mum]=5.34063e-07 deltaEkin[MeV]=1.33119 deltaAngle(deg)=0.00148032 + Event#=6000 t[ns]=0.0746302 r[mm]=22.3733 deltaR[mum]=3.12658e-06 deltaEkin[MeV]=6.28114 deltaAngle(deg)=0.00307204 + Event#=7000 t[ns]=0.131262 r[mm]=39.351 deltaR[mum]=1.73942e-05 deltaEkin[MeV]=6.98522 deltaAngle(deg)=0.00583018 + Event#=8000 t[ns]=0.0493754 r[mm]=14.8022 deltaR[mum]=7.17806e-07 deltaEkin[MeV]=1.70046 deltaAngle(deg)=0.00196201 + Event#=9000 t[ns]=0.116035 r[mm]=34.7859 deltaR[mum]=1.10998e-05 deltaEkin[MeV]=6.96695 deltaAngle(deg)=0.00465195 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.210000s Real=0.210958s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 19 + primary PDG code = -4232 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.468 + primary initial momentum [GeV] = 502.462 + primary initial Lorentz beta = 0.999988 + primary initial Lorentz gamma = 203.617 + primary initial 3 momentum [GeV] = (502.462,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9828 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=3.04016e-05 mean=0.0913614 max=0.972948 + decay R [mm] : min=0.00911405 mean=27.3891 max=291.679 + decay X [mm] : min=0.00911405 mean=27.3891 max=291.679 + decay Y [mm] : min=-0.0038933 mean=0.00206776 max=0.102442 + decay Z [mm] : min=-0.0428769 mean=1.19338e-06 max=0.018674 + Delta decay R [mm] : min=0 mean=3.38572e-08 max=5.74898e-06 + deflection angle [deg] : min=1.47863e-06 mean=0.00380138 max=0.0399001 + Delta Ekin [MeV] : min=0 mean=5.59108 max=4974.02 + decay Ekin [GeV] : min=495.026 mean=499.994 max=500 + decay Px [GeV] : min=497.488 mean=502.456 max=502.462 + decay Py [GeV] : min=-0.098261 mean=0.0327797 max=0.349894 + decay Pz [GeV] : min=-0.283584 mean=4.45701e-05 max=0.227753 + decay Etot violation [MeV] : min=-1.38601e-05 mean=-3.6231e-06 max=6.0586e-06 + decay Px violation [MeV] : min=-1.38601e-05 mean=-3.62312e-06 max=6.0586e-06 + decay Py violation [MeV] : min=-4.64075e-09 mean=-2.95041e-10 max=1.335e-09 + decay Pz violation [MeV] : min=-2.55289e-09 mean=-5.36869e-13 max=1.84508e-09 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0379114 (mean=0.0127516) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.48333e-09 , 1.48333e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=6.04706e-12) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -198.657 (mean=-0.252004) (#above threshold = 100) + maxOverestimated_mc_truth_rPos_delta [mum] = 27.6492 (mean=0.222053) (#above threshold = 534) + minUnderestimated_rDeltaPos [mum] = -198.656 (mean=-0.25197) (#above threshold = 100) + maxOverestimated_rDeltaPos [mum] = 27.6499 (mean=0.222087) (#above threshold = 535) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0326259 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 20 starts. +### Run 20 starts. + Event#=0 t[ns]=0.0347403 r[mm]=10.4148 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0256551 r[mm]=7.69112 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0131378 r[mm]=3.93857 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0338432 r[mm]=10.1458 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00925876 r[mm]=2.77567 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.126762 r[mm]=38.0017 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0102751 r[mm]=3.08037 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0244578 r[mm]=7.33216 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0397908 r[mm]=11.9288 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0172927 r[mm]=5.18416 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.070000s Real=0.075460s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 20 + primary PDG code = 4132 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.47 + primary initial momentum [GeV] = 502.464 + primary initial Lorentz beta = 0.999988 + primary initial Lorentz gamma = 203.393 + primary initial 3 momentum [GeV] = (502.464,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9954 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=7.18043e-06 mean=0.0302753 max=0.302552 + decay R [mm] : min=0.00215261 mean=9.07621 max=90.7019 + decay X [mm] : min=0.00215261 mean=9.07621 max=90.7019 + decay Y [mm] : min=-0.0039764 mean=-2.84222e-09 max=0.00394337 + decay Z [mm] : min=-0.00606746 mean=-6.57012e-07 max=0.00350914 + Delta decay R [mm] : min=-1.42109e-14 mean=1.35518e-10 max=2.10266e-07 + deflection angle [deg] : min=0 mean=1.80317e-05 max=0.0138627 + Delta Ekin [MeV] : min=0 mean=0.000247637 max=0.283698 + decay Ekin [GeV] : min=500 mean=500 max=500 + decay Px [GeV] : min=502.464 mean=502.464 max=502.464 + decay Py [GeV] : min=-0.0917784 mean=-8.8924e-06 max=0.0841748 + decay Pz [GeV] : min=-0.101884 mean=-2.17825e-06 max=0.105704 + decay Etot violation [MeV] : min=-3.09607e-07 mean=1.82188e-06 max=1.02787e-05 + decay Px violation [MeV] : min=-3.09607e-07 mean=1.82193e-06 max=1.02789e-05 + decay Py violation [MeV] : min=-1.19645e-09 mean=-1.81983e-13 max=6.43567e-10 + decay Pz violation [MeV] : min=-1.03923e-09 mean=-8.5244e-14 max=7.29869e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.27374e-06 , 0.0165828 (mean=0.00811963) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.05743e-10 , 9.05743e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 1.42109e-11 (mean=9.79151e-13) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0147084 (mean=-7.11783e-06) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0128355 (mean=5.95931e-06) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.014622 (mean=-6.98232e-06) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0130458 (mean=6.09482e-06) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 21 starts. +### Run 21 starts. + Event#=0 t[ns]=0.00902761 r[mm]=2.70638 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.00591606 r[mm]=1.77357 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.00099795 r[mm]=0.299174 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0098921 r[mm]=2.96554 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00754621 r[mm]=2.26227 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0126791 r[mm]=3.80105 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.022351 r[mm]=6.70059 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.107243 r[mm]=32.1502 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0598913 r[mm]=17.9548 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0184629 r[mm]=5.53497 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.090000s Real=0.182242s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 21 + primary PDG code = -4132 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.47 + primary initial momentum [GeV] = 502.464 + primary initial Lorentz beta = 0.999988 + primary initial Lorentz gamma = 203.393 + primary initial 3 momentum [GeV] = (502.464,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9938 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=2.5299e-06 mean=0.0301643 max=0.292516 + decay R [mm] : min=0.000758436 mean=9.04291 max=87.6931 + decay X [mm] : min=0.000758436 mean=9.04291 max=87.6931 + decay Y [mm] : min=-0.00073164 mean=5.55358e-07 max=0.00208521 + decay Z [mm] : min=-0.00446536 mean=-5.4737e-08 max=0.00426902 + Delta decay R [mm] : min=-1.42109e-14 mean=1.1434e-10 max=1.56012e-07 + deflection angle [deg] : min=0 mean=2.45747e-05 max=0.0387057 + Delta Ekin [MeV] : min=0 mean=0.000583316 max=2.21162 + decay Ekin [GeV] : min=499.998 mean=500 max=500 + decay Px [GeV] : min=502.462 mean=502.464 max=502.464 + decay Py [GeV] : min=-0.255806 mean=-1.81141e-05 max=0.119785 + decay Pz [GeV] : min=-0.223165 mean=-2.25634e-05 max=0.117559 + decay Etot violation [MeV] : min=-1.76136e-07 mean=1.84134e-06 max=9.59617e-06 + decay Px violation [MeV] : min=-1.75962e-07 mean=1.84139e-06 max=9.59641e-06 + decay Py violation [MeV] : min=-4.20729e-09 mean=-1.52078e-13 max=1.78306e-09 + decay Pz violation [MeV] : min=-3.66992e-09 mean=-3.13876e-13 max=9.79583e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.27374e-06 , 0.0204764 (mean=0.00812358) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 + maxGamma_deltaMax{1,2,3} = 0 , 7.37913e-10 , 7.37913e-10 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 1.42109e-11 (mean=9.90195e-13) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0568562 (mean=-1.73358e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.00905371 (mean=4.09086e-06) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0568135 (mean=-1.72215e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.00920972 (mean=4.2052e-06) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 22 starts. +### Run 22 starts. + Event#=0 t[ns]=0.029795 r[mm]=8.93219 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0214592 r[mm]=6.43322 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0166174 r[mm]=4.9817 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.00817775 r[mm]=2.45159 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0456317 r[mm]=13.6799 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.00563098 r[mm]=1.6881 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0539331 r[mm]=16.1685 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0497533 r[mm]=14.9154 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0494402 r[mm]=14.8216 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.100073 r[mm]=30.0006 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.090000s Real=0.191778s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 22 + primary PDG code = 4332 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.695 + primary initial momentum [GeV] = 502.688 + primary initial Lorentz beta = 0.999986 + primary initial Lorentz gamma = 186.515 + primary initial 3 momentum [GeV] = (502.688,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9919 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=3.43805e-06 mean=0.0498491 max=0.384543 + decay R [mm] : min=0.00103069 mean=14.9442 max=115.281 + decay X [mm] : min=0.00103069 mean=14.9442 max=115.281 + decay Y [mm] : min=-0.00458014 mean=1.75054e-06 max=0.00741206 + decay Z [mm] : min=-0.00321643 mean=-5.94586e-07 max=0.00228339 + Delta decay R [mm] : min=-2.84217e-14 mean=2.54206e-10 max=6.72655e-07 + deflection angle [deg] : min=0 mean=2.33531e-05 max=0.0223194 + Delta Ekin [MeV] : min=0 mean=0.00038136 max=0.73606 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=502.687 mean=502.688 max=502.688 + decay Py [GeV] : min=-0.140459 mean=4.53481e-05 max=0.186642 + decay Pz [GeV] : min=-0.0750577 mean=-2.10961e-05 max=0.0632284 + decay Etot violation [MeV] : min=-5.07676e-06 mean=-4.33493e-07 max=4.44194e-06 + decay Px violation [MeV] : min=-5.07664e-06 mean=-4.33508e-07 max=4.44194e-06 + decay Py violation [MeV] : min=-4.76774e-10 mean=-7.74057e-14 max=6.27743e-10 + decay Pz violation [MeV] : min=-1.54856e-10 mean=1.65009e-13 max=6.92836e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0185696 (mean=0.00160171) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.09955e-09 , 1.09955e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0232918 (mean=-1.22415e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0292306 (mean=9.78316e-06) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0226191 (mean=-1.19873e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0299033 (mean=1.00374e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 23 starts. +### Run 23 starts. + Event#=0 t[ns]=0.00400807 r[mm]=1.20157 deltaR[mum]=-2.22045e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0144874 r[mm]=4.34316 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.00627283 r[mm]=1.88052 deltaR[mum]=-2.22045e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0183546 r[mm]=5.50249 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0376833 r[mm]=11.297 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0145869 r[mm]=4.37298 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0386991 r[mm]=11.6015 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0405339 r[mm]=12.1516 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0105777 r[mm]=3.17108 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0193049 r[mm]=5.78739 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.110000s Real=0.199790s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 23 + primary PDG code = -4332 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 502.695 + primary initial momentum [GeV] = 502.688 + primary initial Lorentz beta = 0.999986 + primary initial Lorentz gamma = 186.515 + primary initial 3 momentum [GeV] = (502.688,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9911 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=1.52381e-06 mean=0.0502648 max=0.43848 + decay R [mm] : min=0.00045682 mean=15.0688 max=131.451 + decay X [mm] : min=0.00045682 mean=15.0688 max=131.451 + decay Y [mm] : min=-0.00779815 mean=-2.86121e-07 max=0.00929872 + decay Z [mm] : min=-0.0104487 mean=-2.94507e-06 max=0.00839788 + Delta decay R [mm] : min=-2.84217e-14 mean=5.67156e-10 max=1.9593e-06 + deflection angle [deg] : min=0 mean=3.44117e-05 max=0.0432091 + Delta Ekin [MeV] : min=0 mean=0.000786439 max=2.75865 + decay Ekin [GeV] : min=499.997 mean=500 max=500 + decay Px [GeV] : min=502.685 mean=502.688 max=502.688 + decay Py [GeV] : min=-0.340261 mean=-2.09702e-05 max=0.147927 + decay Pz [GeV] : min=-0.167227 mean=-2.32175e-05 max=0.138383 + decay Etot violation [MeV] : min=-5.47903e-06 mean=-4.384e-07 max=4.85871e-06 + decay Px violation [MeV] : min=-5.47903e-06 mean=-4.38414e-07 max=4.85877e-06 + decay Py violation [MeV] : min=-7.81597e-10 mean=1.19903e-14 max=7.02954e-10 + decay Pz violation [MeV] : min=-8.84995e-10 mean=-7.30091e-14 max=5.79547e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0298928 (mean=0.00161047) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.03486e-09 , 1.03486e-09 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.152015 (mean=-3.27242e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0502676 (mean=2.3563e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.150055 (mean=-3.21571e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0522269 (mean=2.41302e-05) (#above threshold = 0) + --- float instead of double --- + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0152588 + ============================================= + + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 24 starts. +### Run 24 starts. + Event#=0 t[ns]=0.0671845 r[mm]=20.1402 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.23269 r[mm]=69.7544 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.219153 r[mm]=65.6962 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.423965 r[mm]=127.094 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0108171 r[mm]=3.24267 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0217609 r[mm]=6.52335 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0277213 r[mm]=8.31013 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.164107 r[mm]=49.195 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.202522 r[mm]=60.7107 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.162309 r[mm]=48.6561 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Run terminated. +Run Summary + Number of events processed : 10000 + User=0.190000s Real=0.381763s Sys=0.000000s + + + ============ Run::printInfo() =============== RunID = 24 + primary PDG code = 5122 + primary initial kinetic energy [GeV] = 500 + primary initial total energy [GeV] = 505.62 + primary initial momentum [GeV] = 505.588 + primary initial Lorentz beta = 0.999938 + primary initial Lorentz gamma = 89.9746 + primary initial 3 momentum [GeV] = (505.588,0,0) + primary initial position [mm] = (0,0,0) + toleranceEPviolations [eV] = 500 + toleranceDeltaDecayRadius [mum] = 1 + isPreassignedDecayEnabled = 1 + isBoostToLabEnabled = 1 + # Events = 10000 + # Decays = 9777 + (# Bad decays = 0 ) + (# Unexpected decays = 0 ) + # E violations = 0 + # P violations = 0 + decay T [ns] : min=2.72005e-05 mean=0.131505 max=1.33947 + decay R [mm] : min=0.00815399 mean=39.4218 max=401.538 + decay X [mm] : min=0.00815399 mean=39.4218 max=401.538 + decay Y [mm] : min=-0.0341801 mean=6.52827e-07 max=0.0310039 + decay Z [mm] : min=-0.0243689 mean=5.17137e-06 max=0.023897 + Delta decay R [mm] : min=-5.68434e-14 mean=1.67702e-09 max=1.24312e-06 + deflection angle [deg] : min=0 mean=8.76207e-05 max=0.0313398 + Delta Ekin [MeV] : min=0 mean=0.00166897 max=1.46803 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.587 mean=505.588 max=505.588 + decay Py [GeV] : min=-0.200254 mean=3.72979e-05 max=0.182669 + decay Pz [GeV] : min=-0.145723 mean=9.18672e-05 max=0.207667 + decay Etot violation [MeV] : min=-1.65775e-06 mean=-3.71998e-07 max=8.80565e-07 + decay Px violation [MeV] : min=-1.65775e-06 mean=-3.71898e-07 max=8.80682e-07 + decay Py violation [MeV] : min=-4.3363e-10 mean=-8.86523e-14 max=4.31697e-10 + decay Pz violation [MeV] : min=-3.57772e-10 mean=2.9208e-14 max=2.18535e-10 + --- Consistency checks --- + maxEkin_deltaMax [eV] = 0 + maxEtot_deltaMax [eV] = 0 + maxP_deltaMax [eV] = 0 + maxPdir_deltaMax = 0 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0112004 (mean=0.00306145) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.95186e-11 , 9.95186e-11 + maxT_proper_deltaMax [fs] = 0 + maxT_lab_deltaMax [fs] = 0 + maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) + --- Extra checks --- + minUnderestimated_mc_truth_rPos_delta [mum] = -0.043882 (mean=-5.74051e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0841253 (mean=0.000122642) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0430896 (mean=-5.57281e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0844579 (mean=0.000124319) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0610352 ============================================= -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 5 starts. -### Run 5 starts. - Event#=0 t[ns]=0.057597 r[mm]=17.267 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0428393 r[mm]=12.8428 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.301855 r[mm]=90.4934 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0716425 r[mm]=21.4777 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0696591 r[mm]=20.8831 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0177399 r[mm]=5.31826 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0636135 r[mm]=19.0707 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.00570565 r[mm]=1.7105 deltaR[mum]=2.22045e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.102514 r[mm]=30.7327 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0485537 r[mm]=14.5559 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.120000s Real=0.253170s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 5 - primary PDG code = -421 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 501.865 - primary initial momentum [GeV] = 501.861 - primary initial Lorentz beta = 0.999993 - primary initial Lorentz gamma = 269.12 - primary initial 3 momentum [GeV] = (501.861,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9836 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=8.82562e-07 mean=0.108516 max=0.957838 - decay R [mm] : min=0.000264584 mean=32.5319 max=287.151 - decay X [mm] : min=0.000264584 mean=32.5319 max=287.151 - decay Y [mm] : min=-0.0165411 mean=-5.54698e-06 max=0.00909621 - decay Z [mm] : min=-0.0158072 mean=-4.41774e-06 max=0.00976391 - Delta decay R [mm] : min=-2.84217e-14 mean=6.8858e-10 max=1.06411e-06 - deflection angle [deg] : min=0 mean=3.713e-05 max=0.022266 - Delta Ekin [MeV] : min=0 mean=0.000638253 max=0.730134 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=501.861 mean=501.861 max=501.861 - decay Py [GeV] : min=-0.140724 mean=-6.74247e-05 max=0.103307 - decay Pz [GeV] : min=-0.194186 mean=-4.69019e-05 max=0.127235 - decay Etot violation [MeV] : min=-9.74408e-06 mean=2.92559e-06 max=1.18594e-05 - decay Px violation [MeV] : min=-9.74408e-06 mean=2.92568e-06 max=1.18596e-05 - decay Py violation [MeV] : min=-2.69844e-09 mean=-7.86255e-13 max=1.685e-09 - decay Pz violation [MeV] : min=-2.4675e-09 mean=-5.14506e-13 max=2.7083e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0371413 (mean=0.00380999) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.24002e-09 , 3.24002e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.60079e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.031253 (mean=-2.23806e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0594343 (mean=4.29236e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0301889 (mean=-2.1692e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0604984 (mean=4.36122e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 6 starts. -### Run 6 starts. - Event#=0 t[ns]=0.331309 r[mm]=99.3232 deltaR[mum]=0.000172974 deltaEkin[MeV]=9.25013 deltaAngle(deg)=0.0118977 - Event#=1000 t[ns]=0.094884 r[mm]=28.4453 deltaR[mum]=3.88742e-06 deltaEkin[MeV]=7.5407 deltaAngle(deg)=0.00443318 - Event#=2000 t[ns]=0.0750158 r[mm]=22.489 deltaR[mum]=2.06979e-06 deltaEkin[MeV]=4.90869 deltaAngle(deg)=0.00298006 - Event#=3000 t[ns]=0.0482178 r[mm]=14.4552 deltaR[mum]=6.82068e-07 deltaEkin[MeV]=2.22609 deltaAngle(deg)=0.00200053 - Event#=4000 t[ns]=0.0633886 r[mm]=19.0033 deltaR[mum]=1.28465e-06 deltaEkin[MeV]=3.2552 deltaAngle(deg)=0.00272505 - Event#=5000 t[ns]=0.019337 r[mm]=5.79703 deltaR[mum]=4.63247e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.0007934 - Event#=6000 t[ns]=0.0231807 r[mm]=6.94934 deltaR[mum]=7.98073e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000951109 - Event#=7000 t[ns]=0.0250249 r[mm]=7.50221 deltaR[mum]=1.00409e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00102678 - Event#=8000 t[ns]=0.133567 r[mm]=40.0422 deltaR[mum]=1.37175e-05 deltaEkin[MeV]=7.08009 deltaAngle(deg)=0.00538139 - Event#=9000 t[ns]=0.0233254 r[mm]=6.99273 deltaR[mum]=8.13083e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000957047 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.160000s Real=0.323877s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 6 - primary PDG code = 431 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 501.968 - primary initial momentum [GeV] = 501.964 - primary initial Lorentz beta = 0.999992 - primary initial Lorentz gamma = 255.03 - primary initial 3 momentum [GeV] = (501.964,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9882 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=6.35954e-06 mean=0.129664 max=1.10413 - decay R [mm] : min=0.00190653 mean=38.872 max=331.007 - decay X [mm] : min=0.00190653 mean=38.872 max=331.007 - decay Y [mm] : min=-0.133769 mean=-0.00394143 max=0.0108183 - decay Z [mm] : min=-0.0187727 mean=-3.34138e-06 max=0.0314674 - Delta decay R [mm] : min=0 mean=8.46268e-08 max=8.65499e-06 - deflection angle [deg] : min=8.53688e-07 mean=0.00535954 max=0.0457713 - Delta Ekin [MeV] : min=0 mean=8.81298 max=22364.5 - decay Ekin [GeV] : min=477.635 mean=499.991 max=500 - decay Px [GeV] : min=479.6 mean=501.956 max=501.964 - decay Py [GeV] : min=-0.401032 mean=-0.046537 max=0.196143 - decay Pz [GeV] : min=-0.0841261 mean=-8.14294e-07 max=0.15903 - decay Etot violation [MeV] : min=-1.2124e-05 mean=3.17993e-06 max=1.91596e-05 - decay Px violation [MeV] : min=-1.2124e-05 mean=3.17998e-06 max=1.91596e-05 - decay Py violation [MeV] : min=-6.96548e-09 mean=-3.70465e-10 max=3.91327e-09 - decay Pz violation [MeV] : min=-1.35682e-09 mean=-6.62151e-13 max=1.31405e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0562266 (mean=0.0119999) - maxBeta_deltaMax{1,2} = 4.44089e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.30397e-09 , 3.30397e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -1284.21 (mean=-0.430596) (#above threshold = 134) - maxOverestimated_mc_truth_rPos_delta [mum] = 327.264 (mean=0.46685) (#above threshold = 1198) - minUnderestimated_rDeltaPos [mum] = -1284.2 (mean=-0.430511) (#above threshold = 134) - maxOverestimated_rDeltaPos [mum] = 327.269 (mean=0.466934) (#above threshold = 1199) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0480648 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 7 starts. -### Run 7 starts. - Event#=0 t[ns]=0.031093 r[mm]=9.32138 deltaR[mum]=2.03896e-07 deltaEkin[MeV]=0.120279 deltaAngle(deg)=0.00122629 - Event#=1000 t[ns]=0.0339897 r[mm]=10.1898 deltaR[mum]=2.83343e-07 deltaEkin[MeV]=0.369389 deltaAngle(deg)=0.0014447 - Event#=2000 t[ns]=0.0351717 r[mm]=10.5441 deltaR[mum]=3.14978e-07 deltaEkin[MeV]=0.571489 deltaAngle(deg)=0.00137755 - Event#=3000 t[ns]=0.167647 r[mm]=50.2588 deltaR[mum]=3.02133e-05 deltaEkin[MeV]=10.232 deltaAngle(deg)=0.00655382 - Event#=4000 t[ns]=0.0785175 r[mm]=23.5388 deltaR[mum]=2.23781e-06 deltaEkin[MeV]=5.04018 deltaAngle(deg)=0.00345182 - Event#=5000 t[ns]=0.115743 r[mm]=34.6985 deltaR[mum]=1.34864e-05 deltaEkin[MeV]=8.38959 deltaAngle(deg)=0.00547965 - Event#=6000 t[ns]=0.0154926 r[mm]=4.64452 deltaR[mum]=2.38254e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000635664 - Event#=7000 t[ns]=0.078082 r[mm]=23.4082 deltaR[mum]=3.69608e-06 deltaEkin[MeV]=6.43738 deltaAngle(deg)=0.00323259 - Event#=8000 t[ns]=0.115277 r[mm]=34.559 deltaR[mum]=1.01168e-05 deltaEkin[MeV]=7.85755 deltaAngle(deg)=0.00519039 - Event#=9000 t[ns]=0.00781871 r[mm]=2.34397 deltaR[mum]=3.06244e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000320804 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.170000s Real=0.339985s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 7 - primary PDG code = -431 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 501.968 - primary initial momentum [GeV] = 501.964 - primary initial Lorentz beta = 0.999992 - primary initial Lorentz gamma = 255.03 - primary initial 3 momentum [GeV] = (501.964,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9847 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=1.06849e-05 mean=0.127519 max=1.1466 - decay R [mm] : min=0.00320322 mean=38.2291 max=343.739 - decay X [mm] : min=0.00320322 mean=38.2291 max=343.739 - decay Y [mm] : min=-0.00448631 mean=0.00382261 max=0.141081 - decay Z [mm] : min=-0.0162117 mean=-6.23671e-06 max=0.0124938 - Delta decay R [mm] : min=-1.73472e-18 mean=8.24417e-08 max=9.70763e-06 - deflection angle [deg] : min=8.53688e-07 mean=0.00528038 max=0.0470185 - Delta Ekin [MeV] : min=0 mean=6.46706 max=2106.31 - decay Ekin [GeV] : min=497.894 mean=499.994 max=500 - decay Px [GeV] : min=499.858 mean=501.958 max=501.964 - decay Py [GeV] : min=-0.0993432 mean=0.0458869 max=0.41196 - decay Pz [GeV] : min=-0.187752 mean=-9.51255e-06 max=0.107183 - decay Etot violation [MeV] : min=-1.07346e-05 mean=3.2823e-06 max=1.95495e-05 - decay Px violation [MeV] : min=-1.07345e-05 mean=3.28234e-06 max=1.95494e-05 - decay Py violation [MeV] : min=-4.43521e-09 mean=3.77142e-10 max=7.7863e-09 - decay Pz violation [MeV] : min=-1.34982e-09 mean=1.54654e-13 max=1.58566e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0484742 (mean=0.0119445) - maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.43738e-09 , 3.43738e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -62.007 (mean=-0.292805) (#above threshold = 150) - maxOverestimated_mc_truth_rPos_delta [mum] = 482.604 (mean=0.454906) (#above threshold = 1108) - minUnderestimated_rDeltaPos [mum] = -62.0069 (mean=-0.292723) (#above threshold = 150) - maxOverestimated_rDeltaPos [mum] = 482.612 (mean=0.454988) (#above threshold = 1108) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0707428 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 8 starts. -### Run 8 starts. - Event#=0 t[ns]=0.181069 r[mm]=54.2801 deltaR[mum]=8.11325e-05 deltaEkin[MeV]=8.23918 deltaAngle(deg)=0.00697431 - Event#=1000 t[ns]=0.00889407 r[mm]=2.66623 deltaR[mum]=4.448e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000362535 - Event#=2000 t[ns]=0.00652155 r[mm]=1.95501 deltaR[mum]=1.75393e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000265827 - Event#=3000 t[ns]=0.039088 r[mm]=11.7177 deltaR[mum]=8.044e-07 deltaEkin[MeV]=1.39386 deltaAngle(deg)=0.00173076 - Event#=4000 t[ns]=0.0594161 r[mm]=17.8115 deltaR[mum]=8.31145e-06 deltaEkin[MeV]=7.68775 deltaAngle(deg)=0.00334092 - Event#=5000 t[ns]=0.159351 r[mm]=47.7695 deltaR[mum]=5.50084e-05 deltaEkin[MeV]=7.59014 deltaAngle(deg)=0.00739751 - Event#=6000 t[ns]=0.278663 r[mm]=83.5364 deltaR[mum]=0.000182751 deltaEkin[MeV]=8.37685 deltaAngle(deg)=0.0110945 - Event#=7000 t[ns]=0.0445816 r[mm]=13.3645 deltaR[mum]=7.24603e-07 deltaEkin[MeV]=2.84713 deltaAngle(deg)=0.00185572 - Event#=8000 t[ns]=0.628083 r[mm]=188.284 deltaR[mum]=0.00183657 deltaEkin[MeV]=7.49075 deltaAngle(deg)=0.0257199 - Event#=9000 t[ns]=0.110814 r[mm]=33.2195 deltaR[mum]=3.18268e-05 deltaEkin[MeV]=8.52386 deltaAngle(deg)=0.00581168 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.190000s Real=0.374240s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 8 - primary PDG code = 521 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.279 - primary initial momentum [GeV] = 505.252 - primary initial Lorentz beta = 0.999945 - primary initial Lorentz gamma = 95.7097 - primary initial 3 momentum [GeV] = (505.252,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9826 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=2.80433e-05 mean=0.155195 max=1.57472 - decay R [mm] : min=0.0084067 mean=46.5238 max=472.063 - decay X [mm] : min=0.0084067 mean=46.5238 max=472.063 - decay Y [mm] : min=-0.264259 mean=-0.00563034 max=0.00111629 - decay Z [mm] : min=-0.0155652 mean=1.95029e-06 max=0.0326844 - Delta decay R [mm] : min=-1.73472e-18 mean=2.38076e-07 max=0.000281231 - deflection angle [deg] : min=0 mean=0.0063635 max=0.0641153 - Delta Ekin [MeV] : min=0 mean=7.37362 max=7438.16 - decay Ekin [GeV] : min=492.562 mean=499.993 max=500 - decay Px [GeV] : min=497.813 mean=505.244 max=505.252 - decay Py [GeV] : min=-0.565357 mean=-0.0557091 max=0.0756702 - decay Pz [GeV] : min=-0.133092 mean=1.51411e-05 max=0.15652 - decay Etot violation [MeV] : min=-1.75944e-06 mean=3.88884e-07 max=2.83803e-06 - decay Px violation [MeV] : min=-1.75956e-06 mean=3.88868e-07 max=2.83803e-06 - decay Py violation [MeV] : min=-1.31661e-09 mean=-5.05117e-11 max=7.01448e-10 - decay Pz violation [MeV] : min=-1.70232e-10 mean=7.04485e-15 max=2.95827e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0189284 (mean=0.00444576) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.63496e-10 , 1.63496e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.03477e-11) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -366.209 (mean=-0.343305) (#above threshold = 138) - maxOverestimated_mc_truth_rPos_delta [mum] = 2541.8 (mean=0.831042) (#above threshold = 1606) - minUnderestimated_rDeltaPos [mum] = -365.928 (mean=-0.343067) (#above threshold = 138) - maxOverestimated_rDeltaPos [mum] = 2542.08 (mean=0.83128) (#above threshold = 1607) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0476377 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 9 starts. -### Run 9 starts. - Event#=0 t[ns]=0.538455 r[mm]=161.416 deltaR[mum]=0.00110704 deltaEkin[MeV]=7.25073 deltaAngle(deg)=0.0212309 - Event#=1000 t[ns]=0.0207488 r[mm]=6.21999 deltaR[mum]=5.64828e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000845749 - Event#=2000 t[ns]=0.0793618 r[mm]=23.7908 deltaR[mum]=2.27421e-06 deltaEkin[MeV]=4.91604 deltaAngle(deg)=0.0038902 - Event#=3000 t[ns]=0.0961902 r[mm]=28.8355 deltaR[mum]=1.27277e-05 deltaEkin[MeV]=7.82893 deltaAngle(deg)=0.00464153 - Event#=4000 t[ns]=0.106521 r[mm]=31.9324 deltaR[mum]=2.34806e-05 deltaEkin[MeV]=8.16865 deltaAngle(deg)=0.00497642 - Event#=5000 t[ns]=0.169334 r[mm]=50.7624 deltaR[mum]=5.19406e-05 deltaEkin[MeV]=7.23386 deltaAngle(deg)=0.00623765 - Event#=6000 t[ns]=0.151526 r[mm]=45.424 deltaR[mum]=6.098e-05 deltaEkin[MeV]=8.48709 deltaAngle(deg)=0.00736495 - Event#=7000 t[ns]=0.139718 r[mm]=41.8842 deltaR[mum]=4.34988e-05 deltaEkin[MeV]=7.77813 deltaAngle(deg)=0.00535711 - Event#=8000 t[ns]=0.0991501 r[mm]=29.7228 deltaR[mum]=5.55215e-06 deltaEkin[MeV]=6.70077 deltaAngle(deg)=0.00407138 - Event#=9000 t[ns]=0.0481467 r[mm]=14.4332 deltaR[mum]=2.33082e-06 deltaEkin[MeV]=3.16605 deltaAngle(deg)=0.0022587 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.180000s Real=0.302078s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 9 - primary PDG code = -521 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.279 - primary initial momentum [GeV] = 505.252 - primary initial Lorentz beta = 0.999945 - primary initial Lorentz gamma = 95.7097 - primary initial 3 momentum [GeV] = (505.252,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9829 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=5.8879e-06 mean=0.153855 max=1.48018 - decay R [mm] : min=0.00176505 mean=46.122 max=443.724 - decay X [mm] : min=0.00176505 mean=46.122 max=443.724 - decay Y [mm] : min=-0.00227479 mean=0.00531491 max=0.238003 - decay Z [mm] : min=-0.0304915 mean=-8.06232e-06 max=0.0221679 - Delta decay R [mm] : min=-1.73472e-18 mean=1.86056e-07 max=2.12075e-05 - deflection angle [deg] : min=0 mean=0.00631845 max=0.060901 - Delta Ekin [MeV] : min=0 mean=6.93145 max=2299.19 - decay Ekin [GeV] : min=497.701 mean=499.993 max=500 - decay Px [GeV] : min=502.952 mean=505.245 max=505.252 - decay Py [GeV] : min=-0.230548 mean=0.0552303 max=0.537064 - decay Pz [GeV] : min=-0.254557 mean=-8.01612e-05 max=0.147323 - decay Etot violation [MeV] : min=-1.55304e-06 mean=3.93306e-07 max=2.59769e-06 - decay Px violation [MeV] : min=-1.5531e-06 mean=3.93291e-07 max=2.59763e-06 - decay Py violation [MeV] : min=-4.78309e-10 mean=5.08557e-11 max=1.49885e-09 - decay Pz violation [MeV] : min=-5.44674e-10 mean=-1.69929e-13 max=1.86418e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0247082 (mean=0.0044438) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.70601e-10 , 1.70601e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.02974e-11) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -54.4328 (mean=-0.315171) (#above threshold = 132) - maxOverestimated_mc_truth_rPos_delta [mum] = 177.561 (mean=0.558405) (#above threshold = 1590) - minUnderestimated_rDeltaPos [mum] = -54.4133 (mean=-0.314985) (#above threshold = 132) - maxOverestimated_rDeltaPos [mum] = 177.581 (mean=0.558591) (#above threshold = 1591) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0460337 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 10 starts. -### Run 10 starts. - Event#=0 t[ns]=0.224551 r[mm]=67.3151 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.191936 r[mm]=57.5378 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.1806 r[mm]=54.1395 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.331476 r[mm]=99.3686 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.00525517 r[mm]=1.57537 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0708459 r[mm]=21.2379 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0110474 r[mm]=3.31173 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0585525 r[mm]=17.5526 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.126951 r[mm]=38.0568 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.344154 r[mm]=103.169 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.120000s Real=0.120276s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 10 - primary PDG code = 511 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.28 - primary initial momentum [GeV] = 505.252 - primary initial Lorentz beta = 0.999945 - primary initial Lorentz gamma = 95.704 - primary initial 3 momentum [GeV] = (505.252,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9837 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=2.20915e-05 mean=0.144635 max=1.45566 - decay R [mm] : min=0.00662249 mean=43.3581 max=436.373 - decay X [mm] : min=0.00662249 mean=43.3581 max=436.373 - decay Y [mm] : min=-0.0421918 mean=6.54805e-07 max=0.0562089 - decay Z [mm] : min=-0.0362712 mean=-6.92997e-06 max=0.0303493 - Delta decay R [mm] : min=-5.68434e-14 mean=1.4042e-09 max=1.58957e-06 - deflection angle [deg] : min=0 mean=5.70957e-05 max=0.0301267 - Delta Ekin [MeV] : min=0 mean=0.00119478 max=1.35478 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.251 mean=505.252 max=505.252 - decay Py [GeV] : min=-0.132526 mean=-6.69055e-05 max=0.215932 - decay Pz [GeV] : min=-0.234423 mean=-7.50913e-05 max=0.234859 - decay Etot violation [MeV] : min=-1.42952e-06 mean=-1.75098e-07 max=1.10787e-06 - decay Px violation [MeV] : min=-1.42946e-06 mean=-1.75122e-07 max=1.10792e-06 - decay Py violation [MeV] : min=-2.23224e-10 mean=-3.13368e-14 max=1.34023e-10 - decay Pz violation [MeV] : min=-2.35957e-10 mean=-4.46901e-14 max=2.95643e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0139089 (mean=0.0023584) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.1336e-10 , 1.1336e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0374393 (mean=-3.91642e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.300826 (mean=0.000145924) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0358497 (mean=-3.776e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.302199 (mean=0.000147328) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 11 starts. -### Run 11 starts. - Event#=0 t[ns]=0.146479 r[mm]=43.911 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0485962 r[mm]=14.568 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0638345 r[mm]=19.1361 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0159466 r[mm]=4.78041 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.22373 r[mm]=67.0689 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.195904 r[mm]=58.7275 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0196933 r[mm]=5.90357 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.175284 r[mm]=52.5459 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0132297 r[mm]=3.96596 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0120484 r[mm]=3.61181 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.120000s Real=0.123080s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 11 - primary PDG code = -511 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.28 - primary initial momentum [GeV] = 505.252 - primary initial Lorentz beta = 0.999945 - primary initial Lorentz gamma = 95.704 - primary initial 3 momentum [GeV] = (505.252,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9822 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=7.96789e-08 mean=0.143166 max=1.1897 - decay R [mm] : min=2.38858e-05 mean=42.9177 max=356.644 - decay X [mm] : min=2.38858e-05 mean=42.9177 max=356.644 - decay Y [mm] : min=-0.0151676 mean=-9.80638e-07 max=0.01893 - decay Z [mm] : min=-0.00951692 mean=1.44518e-05 max=0.0445101 - Delta decay R [mm] : min=-5.68434e-14 mean=8.34221e-10 max=9.4716e-07 - deflection angle [deg] : min=0 mean=4.60627e-05 max=0.0248224 - Delta Ekin [MeV] : min=0 mean=0.000861463 max=0.91972 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.251 mean=505.252 max=505.252 - decay Py [GeV] : min=-0.194481 mean=-4.55706e-05 max=0.164753 - decay Pz [GeV] : min=-0.129963 mean=5.39496e-05 max=0.199588 - decay Etot violation [MeV] : min=-1.58697e-06 mean=-1.80591e-07 max=1.11118e-06 - decay Px violation [MeV] : min=-1.58703e-06 mean=-1.80616e-07 max=1.11124e-06 - decay Py violation [MeV] : min=-3.54163e-10 mean=3.06676e-14 max=5.59339e-10 - decay Pz violation [MeV] : min=-4.55458e-10 mean=-6.12644e-14 max=2.95358e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0139089 (mean=0.00235897) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.76854e-11 , 9.76854e-11 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0297466 (mean=-2.76358e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.178522 (mean=8.01383e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0292951 (mean=-2.68015e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.179469 (mean=8.09725e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 12 starts. -### Run 12 starts. - Event#=0 t[ns]=0.00981209 r[mm]=2.94142 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0539209 r[mm]=16.1642 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.11864 r[mm]=35.5653 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.156337 r[mm]=46.8661 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.12287 r[mm]=36.8333 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0316917 r[mm]=9.50039 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0721563 r[mm]=21.6307 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.165901 r[mm]=49.733 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0842863 r[mm]=25.267 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.462549 r[mm]=138.661 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.110000s Real=0.109512s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 12 - primary PDG code = 531 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.367 - primary initial momentum [GeV] = 505.338 - primary initial Lorentz beta = 0.999944 - primary initial Lorentz gamma = 94.1633 - primary initial 3 momentum [GeV] = (505.338,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9876 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=7.42647e-06 mean=0.14369 max=1.29069 - decay R [mm] : min=0.00222627 mean=43.0747 max=386.918 - decay X [mm] : min=0.00222627 mean=43.0747 max=386.918 - decay Y [mm] : min=-0.0115945 mean=-1.24715e-07 max=0.0304499 - decay Z [mm] : min=-0.02317 mean=-6.42387e-06 max=0.0135799 - Delta decay R [mm] : min=-1.13687e-13 mean=7.13057e-10 max=1.3495e-06 - deflection angle [deg] : min=0 mean=3.17183e-05 max=0.0261845 - Delta Ekin [MeV] : min=0 mean=0.000717459 max=1.02378 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.337 mean=505.338 max=505.338 - decay Py [GeV] : min=-0.130324 mean=-1.3054e-05 max=0.120717 - decay Pz [GeV] : min=-0.207466 mean=-3.78649e-06 max=0.210595 - decay Etot violation [MeV] : min=-1.10653e-06 mean=4.49684e-07 max=1.68494e-06 - decay Px violation [MeV] : min=-1.10664e-06 mean=4.4972e-07 max=1.68505e-06 - decay Py violation [MeV] : min=-2.07592e-10 mean=1.23342e-14 max=2.29178e-10 - decay Pz violation [MeV] : min=-1.5271e-10 mean=-5.7775e-14 max=1.66068e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.009225 (mean=0.00215246) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.08315e-10 , 1.08315e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0507753 (mean=-2.61128e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0962876 (mean=4.95148e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0499921 (mean=-2.53997e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0966037 (mean=5.02279e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 13 starts. -### Run 13 starts. - Event#=0 t[ns]=0.0119029 r[mm]=3.5682 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.00249555 r[mm]=0.748105 deltaR[mum]=1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.338074 r[mm]=101.346 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.132825 r[mm]=39.8175 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.157208 r[mm]=47.127 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0235931 r[mm]=7.07264 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.438101 r[mm]=131.332 deltaR[mum]=0.00044358 deltaEkin[MeV]=0.359142 deltaAngle(deg)=0.0155087 - Event#=7000 t[ns]=0.414605 r[mm]=124.288 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0196895 r[mm]=5.90244 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.114267 r[mm]=34.2546 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.090000s Real=0.092591s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 13 - primary PDG code = -531 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.367 - primary initial momentum [GeV] = 505.338 - primary initial Lorentz beta = 0.999944 - primary initial Lorentz gamma = 94.1633 - primary initial 3 momentum [GeV] = (505.338,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9884 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=2.67472e-06 mean=0.141577 max=1.33451 - decay R [mm] : min=0.000801816 mean=42.4414 max=400.052 - decay X [mm] : min=0.000801816 mean=42.4414 max=400.052 - decay Y [mm] : min=-0.00825944 mean=1.31511e-06 max=0.0138087 - decay Z [mm] : min=-0.0156387 mean=8.06211e-06 max=0.0316703 - Delta decay R [mm] : min=-1.13687e-13 mean=5.53355e-10 max=8.30151e-07 - deflection angle [deg] : min=0 mean=2.39247e-05 max=0.0181009 - Delta Ekin [MeV] : min=0 mean=0.000422748 max=0.489234 - decay Ekin [GeV] : min=500 mean=500 max=500 - decay Px [GeV] : min=505.338 mean=505.338 max=505.338 - decay Py [GeV] : min=-0.108815 mean=1.15328e-05 max=0.151241 - decay Pz [GeV] : min=-0.139987 mean=5.75226e-05 max=0.135441 - decay Etot violation [MeV] : min=-7.37549e-07 mean=4.50342e-07 max=1.91829e-06 - decay Px violation [MeV] : min=-7.37607e-07 mean=4.50376e-07 max=1.91847e-06 - decay Py violation [MeV] : min=-2.74852e-10 mean=2.27359e-14 max=1.87313e-10 - decay Pz violation [MeV] : min=-9.25695e-11 mean=1.46567e-14 max=1.82467e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0120681 (mean=0.00215476) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.24828e-10 , 1.24828e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0232694 (mean=-1.72958e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0839739 (mean=3.80252e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0224392 (mean=-1.67425e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0844174 (mean=3.85785e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 14 starts. -### Run 14 starts. - Event#=0 t[ns]=0.0298205 r[mm]=8.93927 deltaR[mum]=1.67013e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00121313 - Event#=1000 t[ns]=0.00810359 r[mm]=2.42921 deltaR[mum]=3.35199e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000329664 - Event#=2000 t[ns]=0.26267 r[mm]=78.7405 deltaR[mum]=0.00021562 deltaEkin[MeV]=7.56987 deltaAngle(deg)=0.0112658 - Event#=3000 t[ns]=0.00022568 r[mm]=0.0676519 deltaR[mum]=5.55112e-14 deltaEkin[MeV]=0 deltaAngle(deg)=9.15478e-06 - Event#=4000 t[ns]=0.0398038 r[mm]=11.932 deltaR[mum]=4.31111e-07 deltaEkin[MeV]=0.926135 deltaAngle(deg)=0.00149116 - Event#=5000 t[ns]=0.018445 r[mm]=5.52925 deltaR[mum]=3.95222e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000750366 - Event#=6000 t[ns]=0.0307097 r[mm]=9.20584 deltaR[mum]=1.89763e-07 deltaEkin[MeV]=0.0604225 deltaAngle(deg)=0.00118748 - Event#=7000 t[ns]=0.00598827 r[mm]=1.7951 deltaR[mum]=1.3527e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000243609 - Event#=8000 t[ns]=0.0136617 r[mm]=4.09537 deltaR[mum]=1.60592e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000555776 - Event#=9000 t[ns]=0.0266866 r[mm]=7.99984 deltaR[mum]=1.19697e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00108564 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.080000s Real=0.074123s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 14 - primary PDG code = 541 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 506.275 - primary initial momentum [GeV] = 506.236 - primary initial Lorentz beta = 0.999923 - primary initial Lorentz gamma = 80.6825 - primary initial 3 momentum [GeV] = (506.236,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9969 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=1.41949e-05 mean=0.0413388 max=0.516898 - decay R [mm] : min=0.00425518 mean=12.3921 max=154.95 - decay X [mm] : min=0.00425518 mean=12.3921 max=154.95 - decay Y [mm] : min=-0.028278 mean=-0.000440689 max=-2.14454e-11 - decay Z [mm] : min=-0.00131358 mean=1.1539e-06 max=0.00473316 - Delta decay R [mm] : min=-3.46945e-18 mean=8.04827e-09 max=3.80823e-06 - deflection angle [deg] : min=8.53688e-07 mean=0.00170537 max=0.0209159 - Delta Ekin [MeV] : min=0 mean=2.33146 max=389.184 - decay Ekin [GeV] : min=499.611 mean=499.998 max=500 - decay Px [GeV] : min=505.847 mean=506.234 max=506.236 - decay Py [GeV] : min=-0.184741 mean=-0.0148919 max=0.0243069 - decay Pz [GeV] : min=-0.0830184 mean=3.46319e-05 max=0.14702 - decay Etot violation [MeV] : min=-1.57091e-06 mean=1.48278e-07 max=1.4106e-06 - decay Px violation [MeV] : min=-1.57079e-06 mean=1.48299e-07 max=1.41049e-06 - decay Py violation [MeV] : min=-1.83519e-10 mean=-7.47008e-13 max=1.91093e-10 - decay Pz violation [MeV] : min=-4.34994e-11 mean=1.13076e-14 max=7.02585e-11 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0153686 (mean=0.00314702) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.4488e-11 , 9.4488e-11 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.76828e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -19.8417 (mean=-0.0952261) (#above threshold = 35) - maxOverestimated_mc_truth_rPos_delta [mum] = 24.1507 (mean=0.0372219) (#above threshold = 36) - minUnderestimated_rDeltaPos [mum] = -19.8413 (mean=-0.095218) (#above threshold = 35) - maxOverestimated_rDeltaPos [mum] = 24.1545 (mean=0.03723) (#above threshold = 36) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0155648 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 15 starts. -### Run 15 starts. - Event#=0 t[ns]=0.0158348 r[mm]=4.74679 deltaR[mum]=2.50058e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000644178 - Event#=1000 t[ns]=0.006233 r[mm]=1.86846 deltaR[mum]=1.52545e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000253565 - Event#=2000 t[ns]=0.0115998 r[mm]=3.47727 deltaR[mum]=9.83036e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000471894 - Event#=3000 t[ns]=0.0356531 r[mm]=10.6877 deltaR[mum]=3.22222e-07 deltaEkin[MeV]=0.570459 deltaAngle(deg)=0.00140358 - Event#=4000 t[ns]=0.00722017 r[mm]=2.16439 deltaR[mum]=2.37099e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000293726 - Event#=5000 t[ns]=0.0511635 r[mm]=15.3373 deltaR[mum]=7.6575e-07 deltaEkin[MeV]=2.03923 deltaAngle(deg)=0.00266489 - Event#=6000 t[ns]=0.0177347 r[mm]=5.31631 deltaR[mum]=3.51283e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000721467 - Event#=7000 t[ns]=0.0174002 r[mm]=5.21604 deltaR[mum]=3.31788e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000707859 - Event#=8000 t[ns]=0.00151217 r[mm]=0.453303 deltaR[mum]=2.17049e-11 deltaEkin[MeV]=0 deltaAngle(deg)=6.15129e-05 - Event#=9000 t[ns]=0.0345269 r[mm]=10.3501 deltaR[mum]=2.92685e-07 deltaEkin[MeV]=0.567098 deltaAngle(deg)=0.00143697 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.080000s Real=0.080580s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 15 - primary PDG code = -541 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 506.275 - primary initial momentum [GeV] = 506.236 - primary initial Lorentz beta = 0.999923 - primary initial Lorentz gamma = 80.6825 - primary initial 3 momentum [GeV] = (506.236,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9967 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=7.44283e-06 mean=0.0413974 max=0.34651 - decay R [mm] : min=0.00223113 mean=12.4097 max=103.873 - decay X [mm] : min=0.00223113 mean=12.4097 max=103.873 - decay Y [mm] : min=-0.000972468 mean=0.00044031 max=0.0135297 - decay Z [mm] : min=-0.00151664 mean=2.21685e-06 max=0.0068003 - Delta decay R [mm] : min=-3.46945e-18 mean=8.03901e-09 max=4.72489e-06 - deflection angle [deg] : min=0 mean=0.00170901 max=0.0392474 - Delta Ekin [MeV] : min=0 mean=2.40421 max=653.417 - decay Ekin [GeV] : min=499.347 mean=499.998 max=500 - decay Px [GeV] : min=505.583 mean=506.234 max=506.236 - decay Py [GeV] : min=-0.0756082 mean=0.0148814 max=0.18866 - decay Pz [GeV] : min=-0.3323 mean=4.44234e-05 max=0.100079 - decay Etot violation [MeV] : min=-1.48802e-06 mean=1.42848e-07 max=1.4457e-06 - decay Px violation [MeV] : min=-1.48808e-06 mean=1.4287e-07 max=1.44576e-06 - decay Py violation [MeV] : min=-3.51491e-10 mean=8.83667e-13 max=1.91164e-10 - decay Pz violation [MeV] : min=-1.91392e-10 mean=-2.71246e-14 max=6.02398e-11 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0153686 (mean=0.00313145) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.93481e-11 , 9.93481e-11 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.75498e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -23.2376 (mean=-0.0982016) (#above threshold = 36) - maxOverestimated_mc_truth_rPos_delta [mum] = 30.6257 (mean=0.0375947) (#above threshold = 44) - minUnderestimated_rDeltaPos [mum] = -23.2371 (mean=-0.0981936) (#above threshold = 36) - maxOverestimated_rDeltaPos [mum] = 30.6304 (mean=0.0376028) (#above threshold = 44) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00846538 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 16 starts. -### Run 16 starts. - Event#=0 t[ns]=0.0339745 r[mm]=10.1852 deltaR[mum]=2.82569e-07 deltaEkin[MeV]=0.415993 deltaAngle(deg)=0.00140292 - Event#=1000 t[ns]=0.00301949 r[mm]=0.905211 deltaR[mum]=1.76081e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000123811 - Event#=2000 t[ns]=0.0646849 r[mm]=19.3918 deltaR[mum]=2.13281e-06 deltaEkin[MeV]=5.81235 deltaAngle(deg)=0.00278159 - Event#=3000 t[ns]=0.0221737 r[mm]=6.64743 deltaR[mum]=6.97602e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000909214 - Event#=4000 t[ns]=0.0490612 r[mm]=14.708 deltaR[mum]=8.83892e-07 deltaEkin[MeV]=3.36595 deltaAngle(deg)=0.00143217 - Event#=5000 t[ns]=0.0603362 r[mm]=18.0881 deltaR[mum]=1.46865e-06 deltaEkin[MeV]=4.37041 deltaAngle(deg)=0.00239747 - Event#=6000 t[ns]=0.013284 r[mm]=3.98241 deltaR[mum]=1.50004e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000544701 - Event#=7000 t[ns]=0.0111805 r[mm]=3.35178 deltaR[mum]=8.94307e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000458446 - Event#=8000 t[ns]=0.0144206 r[mm]=4.32315 deltaR[mum]=1.91891e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000591307 - Event#=9000 t[ns]=0.0109817 r[mm]=3.29221 deltaR[mum]=8.47411e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000450297 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.140000s Real=0.144481s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 16 - primary PDG code = 4122 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.286 - primary initial momentum [GeV] = 502.281 - primary initial Lorentz beta = 0.99999 - primary initial Lorentz gamma = 219.679 - primary initial 3 momentum [GeV] = (502.281,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9898 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=5.73668e-07 mean=0.0429719 max=0.379838 - decay R [mm] : min=0.000171979 mean=12.8825 max=113.871 - decay X [mm] : min=0.000171979 mean=12.8825 max=113.871 - decay Y [mm] : min=-0.0156223 mean=-0.000481841 max=0.00208923 - decay Z [mm] : min=-0.00818195 mean=-6.66737e-07 max=0.0063007 - Delta decay R [mm] : min=-3.46945e-18 mean=3.80957e-09 max=1.50591e-06 - deflection angle [deg] : min=0 mean=0.00181375 max=0.0252439 - Delta Ekin [MeV] : min=0 mean=2.5151 max=991.445 - decay Ekin [GeV] : min=499.009 mean=499.997 max=500 - decay Px [GeV] : min=501.29 mean=502.279 max=502.281 - decay Py [GeV] : min=-0.146687 mean=-0.0155065 max=0.127915 - decay Pz [GeV] : min=-0.202255 mean=-3.8826e-05 max=0.127356 - decay Etot violation [MeV] : min=-1.22869e-05 mean=-8.30586e-07 max=1.10487e-05 - decay Px violation [MeV] : min=-1.22871e-05 mean=-8.30573e-07 max=1.10487e-05 - decay Py violation [MeV] : min=-1.44202e-09 mean=4.11818e-11 max=1.65467e-09 - decay Pz violation [MeV] : min=-8.93124e-10 mean=5.96624e-13 max=8.03865e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0475902 (mean=0.00973559) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.67913e-09 , 1.67913e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -28.0375 (mean=-0.102333) (#above threshold = 32) - maxOverestimated_mc_truth_rPos_delta [mum] = 70.9127 (mean=0.0469147) (#above threshold = 49) - minUnderestimated_rDeltaPos [mum] = -28.036 (mean=-0.102329) (#above threshold = 32) - maxOverestimated_rDeltaPos [mum] = 70.9142 (mean=0.0469186) (#above threshold = 49) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0154734 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 17 starts. -### Run 17 starts. - Event#=0 t[ns]=0.00615234 r[mm]=1.84441 deltaR[mum]=1.49014e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000252272 - Event#=1000 t[ns]=0.0963947 r[mm]=28.8981 deltaR[mum]=4.01372e-06 deltaEkin[MeV]=6.93071 deltaAngle(deg)=0.00319153 - Event#=2000 t[ns]=0.0328898 r[mm]=9.86003 deltaR[mum]=2.53262e-07 deltaEkin[MeV]=0.273115 deltaAngle(deg)=0.0012167 - Event#=3000 t[ns]=0.0560032 r[mm]=16.7892 deltaR[mum]=9.55705e-07 deltaEkin[MeV]=2.54913 deltaAngle(deg)=0.00220821 - Event#=4000 t[ns]=0.0161104 r[mm]=4.82973 deltaR[mum]=2.67564e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000660595 - Event#=5000 t[ns]=0.225893 r[mm]=67.7204 deltaR[mum]=6.12317e-05 deltaEkin[MeV]=7.3811 deltaAngle(deg)=0.00933664 - Event#=6000 t[ns]=0.0639865 r[mm]=19.1825 deltaR[mum]=2.16634e-06 deltaEkin[MeV]=5.771 deltaAngle(deg)=0.00271887 - Event#=7000 t[ns]=0.143554 r[mm]=43.0359 deltaR[mum]=2.0221e-05 deltaEkin[MeV]=7.10441 deltaAngle(deg)=0.00615789 - Event#=8000 t[ns]=0.00477449 r[mm]=1.43134 deltaR[mum]=6.96554e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000195774 - Event#=9000 t[ns]=0.00975568 r[mm]=2.92465 deltaR[mum]=5.94147e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000400024 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.130000s Real=0.131410s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 17 - primary PDG code = -4122 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.286 - primary initial momentum [GeV] = 502.281 - primary initial Lorentz beta = 0.99999 - primary initial Lorentz gamma = 219.679 - primary initial 3 momentum [GeV] = (502.281,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9903 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=5.01966e-06 mean=0.0435834 max=0.366054 - decay R [mm] : min=0.00150484 mean=13.0658 max=109.739 - decay X [mm] : min=0.00150484 mean=13.0658 max=109.739 - decay Y [mm] : min=-0.00662635 mean=0.000491682 max=0.0140113 - decay Z [mm] : min=-0.00698188 mean=-3.6114e-07 max=0.00520252 - Delta decay R [mm] : min=0 mean=3.81896e-09 max=7.12336e-07 - deflection angle [deg] : min=0 mean=0.00182808 max=0.0246297 - Delta Ekin [MeV] : min=0 mean=2.78759 max=1241.07 - decay Ekin [GeV] : min=498.759 mean=499.997 max=500 - decay Px [GeV] : min=501.04 mean=502.278 max=502.281 - decay Py [GeV] : min=-0.102454 mean=0.0156319 max=0.190978 - decay Pz [GeV] : min=-0.153914 mean=-5.50692e-05 max=0.10464 - decay Etot violation [MeV] : min=-1.17938e-05 mean=-8.60268e-07 max=8.97323e-06 - decay Px violation [MeV] : min=-1.17938e-05 mean=-8.60256e-07 max=8.97323e-06 - decay Py violation [MeV] : min=-1.84247e-09 mean=-4.39909e-11 max=1.06705e-09 - decay Pz violation [MeV] : min=-9.68697e-10 mean=6.45843e-14 max=7.42119e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0475902 (mean=0.00968183) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.83158e-09 , 1.83158e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -41.6707 (mean=-0.113737) (#above threshold = 48) - maxOverestimated_mc_truth_rPos_delta [mum] = 21.7973 (mean=0.0446577) (#above threshold = 52) - minUnderestimated_rDeltaPos [mum] = -41.6707 (mean=-0.113733) (#above threshold = 48) - maxOverestimated_rDeltaPos [mum] = 21.7977 (mean=0.0446615) (#above threshold = 52) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00790405 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 18 starts. -### Run 18 starts. - Event#=0 t[ns]=0.0201165 r[mm]=6.03071 deltaR[mum]=5.20552e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000824566 - Event#=1000 t[ns]=0.134238 r[mm]=40.2432 deltaR[mum]=1.87456e-05 deltaEkin[MeV]=7.05853 deltaAngle(deg)=0.00609262 - Event#=2000 t[ns]=0.0189957 r[mm]=5.6947 deltaR[mum]=4.38281e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000778623 - Event#=3000 t[ns]=0.0846509 r[mm]=25.3774 deltaR[mum]=3.62817e-06 deltaEkin[MeV]=7.03896 deltaAngle(deg)=0.00247205 - Event#=4000 t[ns]=0.0725609 r[mm]=21.7529 deltaR[mum]=3.13054e-06 deltaEkin[MeV]=6.0569 deltaAngle(deg)=0.0029714 - Event#=5000 t[ns]=0.0690027 r[mm]=20.6862 deltaR[mum]=1.58599e-06 deltaEkin[MeV]=4.70356 deltaAngle(deg)=0.00295421 - Event#=6000 t[ns]=0.0138069 r[mm]=4.13916 deltaR[mum]=1.68301e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000565938 - Event#=7000 t[ns]=0.0702188 r[mm]=21.0508 deltaR[mum]=2.7988e-06 deltaEkin[MeV]=6.24028 deltaAngle(deg)=0.00339265 - Event#=8000 t[ns]=0.00884468 r[mm]=2.65154 deltaR[mum]=4.4249e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00036254 - Event#=9000 t[ns]=0.0460428 r[mm]=13.8031 deltaR[mum]=7.00613e-07 deltaEkin[MeV]=2.09544 deltaAngle(deg)=0.00246185 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.200000s Real=0.241351s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 18 - primary PDG code = 4232 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.468 - primary initial momentum [GeV] = 502.462 - primary initial Lorentz beta = 0.999988 - primary initial Lorentz gamma = 203.617 - primary initial 3 momentum [GeV] = (502.462,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9833 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=3.40404e-06 mean=0.0909337 max=0.746348 - decay R [mm] : min=0.00102049 mean=27.2609 max=223.747 - decay X [mm] : min=0.00102049 mean=27.2609 max=223.747 - decay Y [mm] : min=-0.0607537 mean=-0.00204144 max=0.0084923 - decay Z [mm] : min=-0.010464 mean=-5.00813e-06 max=0.00900054 - Delta decay R [mm] : min=-1.73472e-18 mean=3.23979e-08 max=2.62374e-06 - deflection angle [deg] : min=8.53688e-07 mean=0.00378087 max=0.0385864 - Delta Ekin [MeV] : min=0 mean=4.98634 max=515.268 - decay Ekin [GeV] : min=499.485 mean=499.995 max=500 - decay Px [GeV] : min=501.946 mean=502.457 max=502.462 - decay Py [GeV] : min=-0.338332 mean=-0.032674 max=0.0887431 - decay Pz [GeV] : min=-0.178885 mean=-9.95126e-06 max=0.124649 - decay Etot violation [MeV] : min=-1.39702e-05 mean=-3.56928e-06 max=5.40121e-06 - decay Px violation [MeV] : min=-1.39702e-05 mean=-3.5693e-06 max=5.40121e-06 - decay Py violation [MeV] : min=-9.42933e-10 mean=2.8461e-10 max=4.46789e-09 - decay Pz violation [MeV] : min=-1.78534e-09 mean=1.57981e-13 max=2.50017e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0379114 (mean=0.0128401) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.53085e-09 , 1.53085e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=6.01395e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -18.004 (mean=-0.22546) (#above threshold = 100) - maxOverestimated_mc_truth_rPos_delta [mum] = 59.8203 (mean=0.219964) (#above threshold = 521) - minUnderestimated_rDeltaPos [mum] = -18.0025 (mean=-0.225428) (#above threshold = 100) - maxOverestimated_rDeltaPos [mum] = 59.8218 (mean=0.219996) (#above threshold = 521) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0330796 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 19 starts. -### Run 19 starts. - Event#=0 t[ns]=0.0393743 r[mm]=11.804 deltaR[mum]=4.26132e-07 deltaEkin[MeV]=0.938395 deltaAngle(deg)=0.00179142 - Event#=1000 t[ns]=0.0199546 r[mm]=5.98216 deltaR[mum]=5.08065e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000817928 - Event#=2000 t[ns]=0.0194447 r[mm]=5.82931 deltaR[mum]=4.70122e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000797028 - Event#=3000 t[ns]=0.00253698 r[mm]=0.760557 deltaR[mum]=1.04583e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000103992 - Event#=4000 t[ns]=0.0153726 r[mm]=4.60852 deltaR[mum]=2.32303e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000630113 - Event#=5000 t[ns]=0.21013 r[mm]=62.9946 deltaR[mum]=5.56073e-05 deltaEkin[MeV]=7.96061 deltaAngle(deg)=0.00806285 - Event#=6000 t[ns]=0.103255 r[mm]=30.9547 deltaR[mum]=7.19e-06 deltaEkin[MeV]=6.54249 deltaAngle(deg)=0.00524091 - Event#=7000 t[ns]=0.0819749 r[mm]=24.5751 deltaR[mum]=2.51561e-06 deltaEkin[MeV]=5.07836 deltaAngle(deg)=0.00272168 - Event#=8000 t[ns]=0.256183 r[mm]=76.8007 deltaR[mum]=9.10622e-05 deltaEkin[MeV]=8.0871 deltaAngle(deg)=0.0101062 - Event#=9000 t[ns]=0.121263 r[mm]=36.3533 deltaR[mum]=1.24895e-05 deltaEkin[MeV]=6.88004 deltaAngle(deg)=0.00527221 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.190000s Real=0.409351s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 19 - primary PDG code = -4232 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.468 - primary initial momentum [GeV] = 502.462 - primary initial Lorentz beta = 0.999988 - primary initial Lorentz gamma = 203.617 - primary initial 3 momentum [GeV] = (502.462,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9827 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=2.54204e-05 mean=0.0927447 max=0.781193 - decay R [mm] : min=0.00762077 mean=27.8038 max=234.193 - decay X [mm] : min=0.00762077 mean=27.8038 max=234.193 - decay Y [mm] : min=-0.00781959 mean=0.00210859 max=0.0653462 - decay Z [mm] : min=-0.0186397 mean=1.32006e-06 max=0.0177529 - Delta decay R [mm] : min=0 mean=3.56791e-08 max=5.27363e-06 - deflection angle [deg] : min=8.53688e-07 mean=0.00386421 max=0.0319863 - Delta Ekin [MeV] : min=0 mean=5.85158 max=2941.62 - decay Ekin [GeV] : min=497.058 mean=499.994 max=500 - decay Px [GeV] : min=499.52 mean=502.456 max=502.462 - decay Py [GeV] : min=-0.144065 mean=0.033311 max=0.280244 - decay Pz [GeV] : min=-0.200115 mean=-2.57375e-05 max=0.106508 - decay Etot violation [MeV] : min=-1.48674e-05 mean=-3.6017e-06 max=4.24491e-06 - decay Px violation [MeV] : min=-1.48675e-05 mean=-3.60172e-06 max=4.24479e-06 - decay Py violation [MeV] : min=-3.80228e-09 mean=-2.97368e-10 max=1.13215e-09 - decay Pz violation [MeV] : min=-1.53351e-09 mean=-4.26298e-13 max=1.58443e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.044095 (mean=0.0126474) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.44044e-09 , 1.44044e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=6.22078e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -93.1895 (mean=-0.251274) (#above threshold = 85) - maxOverestimated_mc_truth_rPos_delta [mum] = 216.191 (mean=0.296032) (#above threshold = 555) - minUnderestimated_rDeltaPos [mum] = -93.1842 (mean=-0.251239) (#above threshold = 85) - maxOverestimated_rDeltaPos [mum] = 216.196 (mean=0.296067) (#above threshold = 555) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.032733 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 20 starts. -### Run 20 starts. - Event#=0 t[ns]=0.0388354 r[mm]=11.6424 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0435565 r[mm]=13.0577 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0509897 r[mm]=15.2861 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0635941 r[mm]=19.0648 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0525919 r[mm]=15.7665 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0545189 r[mm]=16.3442 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.122934 r[mm]=36.8543 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.00734432 r[mm]=2.20174 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0198233 r[mm]=5.94281 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0277061 r[mm]=8.30598 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.090000s Real=0.182560s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 20 - primary PDG code = 4132 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.47 - primary initial momentum [GeV] = 502.464 - primary initial Lorentz beta = 0.999988 - primary initial Lorentz gamma = 203.393 - primary initial 3 momentum [GeV] = (502.464,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9935 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=3.16614e-06 mean=0.0304543 max=0.307343 - decay R [mm] : min=0.000949172 mean=9.12987 max=92.1381 - decay X [mm] : min=0.000949172 mean=9.12987 max=92.1381 - decay Y [mm] : min=-0.00118257 mean=1.02921e-06 max=0.00318153 - decay Z [mm] : min=-0.00245327 mean=1.43216e-07 max=0.00363626 - Delta decay R [mm] : min=-1.42109e-14 mean=2.08619e-10 max=3.20721e-07 - deflection angle [deg] : min=0 mean=2.41012e-05 max=0.0194969 - Delta Ekin [MeV] : min=0 mean=0.000443567 max=0.561166 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=502.464 mean=502.464 max=502.464 - decay Py [GeV] : min=-0.158808 mean=2.83582e-05 max=0.151523 - decay Pz [GeV] : min=-0.110683 mean=2.07843e-05 max=0.135911 - decay Etot violation [MeV] : min=-8.77189e-07 mean=1.78154e-06 max=9.90502e-06 - decay Px violation [MeV] : min=-8.77073e-07 mean=1.78158e-06 max=9.9052e-06 - decay Py violation [MeV] : min=-1.6567e-09 mean=1.39858e-13 max=1.15639e-09 - decay Pz violation [MeV] : min=-1.35442e-09 mean=-4.33222e-14 max=1.69564e-09 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.27374e-06 , 0.0351124 (mean=0.00813151) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.22571e-09 , 1.22571e-09 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 2.84217e-11 (mean=1.02213e-12) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0253593 (mean=-1.68186e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.00954707 (mean=6.27749e-06) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0252602 (mean=-1.661e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.00986779 (mean=6.48611e-06) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0152588 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 21 starts. -### Run 21 starts. - Event#=0 t[ns]=0.00633762 r[mm]=1.89995 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.00661348 r[mm]=1.98265 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0204952 r[mm]=6.14422 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.103119 r[mm]=30.914 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.00265751 r[mm]=0.796692 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0379154 r[mm]=11.3666 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0400965 r[mm]=12.0205 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0628286 r[mm]=18.8353 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.00639192 r[mm]=1.91623 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0059771 r[mm]=1.79187 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.080000s Real=0.173409s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 21 - primary PDG code = -4132 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.47 - primary initial momentum [GeV] = 502.464 - primary initial Lorentz beta = 0.999988 - primary initial Lorentz gamma = 203.393 - primary initial 3 momentum [GeV] = (502.464,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9952 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=8.0562e-07 mean=0.0303216 max=0.277437 - decay R [mm] : min=0.000241516 mean=9.09007 max=83.1726 - decay X [mm] : min=0.000241516 mean=9.09007 max=83.1726 - decay Y [mm] : min=-0.00245287 mean=-1.27035e-07 max=0.00146187 - decay Z [mm] : min=-0.00675224 mean=-5.71141e-07 max=0.00149507 - Delta decay R [mm] : min=-1.42109e-14 mean=8.9473e-11 max=2.31799e-07 - deflection angle [deg] : min=0 mean=1.23125e-05 max=0.0151406 - Delta Ekin [MeV] : min=0 mean=0.000165434 max=0.338415 - decay Ekin [GeV] : min=500 mean=500 max=500 - decay Px [GeV] : min=502.464 mean=502.464 max=502.464 - decay Py [GeV] : min=-0.0791357 mean=8.93215e-06 max=0.132745 - decay Pz [GeV] : min=-0.107975 mean=2.23703e-06 max=0.0837682 - decay Etot violation [MeV] : min=-3.8353e-07 mean=1.84331e-06 max=1.00009e-05 - decay Px violation [MeV] : min=-3.8353e-07 mean=1.84335e-06 max=1.00011e-05 - decay Py violation [MeV] : min=-6.6521e-10 mean=3.90118e-14 max=9.38059e-10 - decay Pz violation [MeV] : min=-7.59528e-10 mean=-2.94885e-14 max=6.06803e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.27374e-06 , 0.0204764 (mean=0.0081229) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 8.78771e-10 , 8.78771e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.42109e-11 (mean=9.8838e-13) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0170431 (mean=-5.92769e-06) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0140625 (mean=3.27478e-06) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0168845 (mean=-5.83821e-06) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0142943 (mean=3.36425e-06) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 22 starts. -### Run 22 starts. - Event#=0 t[ns]=0.0220275 r[mm]=6.6036 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0198346 r[mm]=5.94616 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0216556 r[mm]=6.49208 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0389767 r[mm]=11.6848 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.017339 r[mm]=5.19802 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0663601 r[mm]=19.894 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0255813 r[mm]=7.66898 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0228313 r[mm]=6.84455 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0016762 r[mm]=0.502505 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0252415 r[mm]=7.5671 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.110000s Real=0.233797s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 22 - primary PDG code = 4332 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.695 - primary initial momentum [GeV] = 502.688 - primary initial Lorentz beta = 0.999986 - primary initial Lorentz gamma = 186.515 - primary initial 3 momentum [GeV] = (502.688,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9899 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=5.35259e-06 mean=0.0494421 max=0.479192 - decay R [mm] : min=0.00160464 mean=14.8221 max=143.656 - decay X [mm] : min=0.00160464 mean=14.8221 max=143.656 - decay Y [mm] : min=-0.00159657 mean=3.5794e-06 max=0.00777675 - decay Z [mm] : min=-0.00582067 mean=-3.39859e-06 max=0.00293075 - Delta decay R [mm] : min=-2.84217e-14 mean=3.01251e-10 max=6.93754e-07 - deflection angle [deg] : min=0 mean=2.6189e-05 max=0.0192465 - Delta Ekin [MeV] : min=0 mean=0.000441555 max=0.54733 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=502.687 mean=502.688 max=502.688 - decay Py [GeV] : min=-0.086468 mean=5.66127e-05 max=0.161199 - decay Pz [GeV] : min=-0.100941 mean=-4.89701e-05 max=0.0826965 - decay Etot violation [MeV] : min=-5.68986e-06 mean=-4.39428e-07 max=4.1342e-06 - decay Px violation [MeV] : min=-5.69003e-06 mean=-4.39443e-07 max=4.13437e-06 - decay Py violation [MeV] : min=-6.56769e-10 mean=-4.07639e-14 max=8.58421e-10 - decay Pz violation [MeV] : min=-7.31688e-10 mean=1.01361e-13 max=3.87963e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0210603 (mean=0.00160206) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 8.05301e-10 , 8.05301e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0252701 (mean=-1.48969e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0283926 (mean=1.40097e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0245763 (mean=-1.45956e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0290864 (mean=1.43109e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0152588 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 23 starts. -### Run 23 starts. - Event#=0 t[ns]=0.0067582 r[mm]=2.02603 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0597493 r[mm]=17.9121 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.00575863 r[mm]=1.72637 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0796693 r[mm]=23.8839 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0268599 r[mm]=8.05228 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0180501 r[mm]=5.41122 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0261615 r[mm]=7.84292 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0531724 r[mm]=15.9405 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0510804 r[mm]=15.3133 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0131192 r[mm]=3.93298 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.100000s Real=0.201353s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 23 - primary PDG code = -4332 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 502.695 - primary initial momentum [GeV] = 502.688 - primary initial Lorentz beta = 0.999986 - primary initial Lorentz gamma = 186.515 - primary initial 3 momentum [GeV] = (502.688,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9922 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=5.50899e-09 mean=0.0494442 max=0.548097 - decay R [mm] : min=1.65153e-06 mean=14.8228 max=164.313 - decay X [mm] : min=1.65153e-06 mean=14.8228 max=164.313 - decay Y [mm] : min=-0.00327012 mean=-3.51659e-07 max=0.00650129 - decay Z [mm] : min=-0.00432444 mean=1.03537e-06 max=0.00679426 - Delta decay R [mm] : min=-2.84217e-14 mean=3.6216e-10 max=7.96077e-07 - deflection angle [deg] : min=0 mean=3.71005e-05 max=0.0386644 - Delta Ekin [MeV] : min=0 mean=0.000718447 max=2.20886 - decay Ekin [GeV] : min=499.998 mean=500 max=500 - decay Px [GeV] : min=502.686 mean=502.688 max=502.688 - decay Py [GeV] : min=-0.0937861 mean=-2.05128e-05 max=0.171321 - decay Pz [GeV] : min=-0.1207 mean=1.58159e-05 max=0.332415 - decay Etot violation [MeV] : min=-4.66016e-06 mean=-4.4699e-07 max=4.26819e-06 - decay Px violation [MeV] : min=-4.66011e-06 mean=-4.47007e-07 max=4.26825e-06 - decay Py violation [MeV] : min=-8.15163e-10 mean=-6.50703e-14 max=6.53515e-10 - decay Pz violation [MeV] : min=-1.02557e-09 mean=-2.53696e-13 max=5.97339e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0242312 (mean=0.00161449) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.66537e-10 , 9.66537e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0630143 (mean=-2.21231e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0202911 (mean=1.33888e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0622182 (mean=-2.17609e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0210872 (mean=1.37509e-05) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 - ============================================= - - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : G4_Galactic - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : G4_Si - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um - Energy thresholds : gamma 5.85415 keV e- 423.338 keV e+ 409.013 keV proton 70 keV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -### Run 24 starts. -### Run 24 starts. - Event#=0 t[ns]=0.0809134 r[mm]=24.2557 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0886248 r[mm]=26.5674 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.00218873 r[mm]=0.656123 deltaR[mum]=1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.158125 r[mm]=47.4018 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0458526 r[mm]=13.7454 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0367128 r[mm]=11.0056 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.00657628 r[mm]=1.9714 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0609872 r[mm]=18.2824 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.127464 r[mm]=38.2105 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.143091 r[mm]=42.8949 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Run terminated. -Run Summary - Number of events processed : 10000 - User=0.180000s Real=0.254395s Sys=0.000000s - - - ============ Run::printInfo() =============== RunID = 24 - primary PDG code = 5122 - primary initial kinetic energy [GeV] = 500 - primary initial total energy [GeV] = 505.62 - primary initial momentum [GeV] = 505.588 - primary initial Lorentz beta = 0.999938 - primary initial Lorentz gamma = 89.9746 - primary initial 3 momentum [GeV] = (505.588,0,0) - primary initial position [mm] = (0,0,0) - toleranceEPviolations [eV] = 500 - toleranceDeltaDecayRadius [mum] = 1 - isPreassignedDecayEnabled = 1 - isBoostToLabEnabled = 1 - # Events = 10000 - # Decays = 9790 - (# Bad decays = 0 ) - (# Unexpected decays = 0 ) - # E violations = 0 - # P violations = 0 - decay T [ns] : min=3.37895e-05 mean=0.130795 max=1.20314 - decay R [mm] : min=0.0101292 mean=39.209 max=360.67 - decay X [mm] : min=0.0101292 mean=39.209 max=360.67 - decay Y [mm] : min=-0.020383 mean=5.60571e-06 max=0.0249731 - decay Z [mm] : min=-0.041776 mean=2.33376e-06 max=0.0162118 - Delta decay R [mm] : min=-5.68434e-14 mean=1.86614e-09 max=9.08186e-07 - deflection angle [deg] : min=0 mean=0.000113939 max=0.0207414 - Delta Ekin [MeV] : min=0 mean=0.00198685 max=0.643013 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.588 mean=505.588 max=505.588 - decay Py [GeV] : min=-0.13704 mean=6.22833e-05 max=0.182514 - decay Pz [GeV] : min=-0.160547 mean=4.05017e-05 max=0.163395 - decay Etot violation [MeV] : min=-1.90572e-06 mean=-3.67154e-07 max=9.99076e-07 - decay Px violation [MeV] : min=-1.90578e-06 mean=-3.67055e-07 max=9.99134e-07 - decay Py violation [MeV] : min=-2.06811e-10 mean=1.32608e-13 max=2.18208e-10 - decay Pz violation [MeV] : min=-2.27445e-10 mean=2.74302e-14 max=2.65828e-10 - --- Consistency checks --- - maxEkin_deltaMax [eV] = 0 - maxEtot_deltaMax [eV] = 0 - maxP_deltaMax [eV] = 0 - maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0112004 (mean=0.00306428) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.13246e-10 , 1.13246e-10 - maxT_proper_deltaMax [fs] = 0 - maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) - --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0333159 (mean=-6.76768e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.150499 (mean=0.000135996) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0324077 (mean=-6.58107e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.151267 (mean=0.000137862) (#above threshold = 0) - --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 - ============================================= - - ========= Table of registered couples ============================ Index : 0 used in the geometry : Yes @@ -2379,20 +2379,20 @@ Index : 1 used in the geometry : Yes ### Run 25 starts. ### Run 25 starts. - Event#=0 t[ns]=0.0701252 r[mm]=21.0217 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0431411 r[mm]=12.9326 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.11178 r[mm]=33.5088 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0311985 r[mm]=9.35249 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.046217 r[mm]=13.8547 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.13423 r[mm]=40.2388 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.00790726 r[mm]=2.37039 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.259455 r[mm]=77.7778 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0445669 r[mm]=13.36 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.155479 r[mm]=46.6084 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.130381 r[mm]=39.0849 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.00841336 r[mm]=2.52211 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0475662 r[mm]=14.2591 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0122345 r[mm]=3.66759 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0536007 r[mm]=16.0681 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0243909 r[mm]=7.31175 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.000884829 r[mm]=0.265249 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0135485 r[mm]=4.06147 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.119377 r[mm]=35.7862 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.456575 r[mm]=136.869 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.182832s Sys=0.000000s + User=0.180000s Real=0.263369s Sys=0.000000s ============ Run::printInfo() =============== RunID = 25 @@ -2409,45 +2409,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9772 + # Decays = 9782 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=4.05583e-06 mean=0.130063 max=1.08596 - decay R [mm] : min=0.00121583 mean=38.9896 max=325.541 - decay X [mm] : min=0.00121583 mean=38.9896 max=325.541 - decay Y [mm] : min=-0.0334477 mean=1.06424e-05 max=0.0257546 - decay Z [mm] : min=-0.0516231 mean=-7.3714e-06 max=0.0201737 - Delta decay R [mm] : min=-5.68434e-14 mean=1.83633e-09 max=1.60151e-06 - deflection angle [deg] : min=0 mean=9.58158e-05 max=0.0312437 - Delta Ekin [MeV] : min=0 mean=0.00183159 max=1.45904 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.587 mean=505.588 max=505.588 - decay Py [GeV] : min=-0.244684 mean=2.23583e-05 max=0.24192 - decay Pz [GeV] : min=-0.145877 mean=2.4294e-05 max=0.197487 - decay Etot violation [MeV] : min=-1.68098e-06 mean=-3.7284e-07 max=8.07107e-07 - decay Px violation [MeV] : min=-1.68098e-06 mean=-3.72742e-07 max=8.07107e-07 - decay Py violation [MeV] : min=-2.93085e-10 mean=-1.16561e-13 max=1.95087e-10 - decay Pz violation [MeV] : min=-2.46416e-10 mean=-1.68232e-13 max=1.60483e-10 + decay T [ns] : min=1.88084e-05 mean=0.12861 max=1.22915 + decay R [mm] : min=0.00563826 mean=38.5539 max=368.467 + decay X [mm] : min=0.00563826 mean=38.5539 max=368.467 + decay Y [mm] : min=-0.0281933 mean=-8.85875e-06 max=0.0128994 + decay Z [mm] : min=-0.0250376 mean=-6.53932e-06 max=0.0179594 + Delta decay R [mm] : min=-5.68434e-14 mean=1.65335e-09 max=1.98068e-06 + deflection angle [deg] : min=0 mean=7.38044e-05 max=0.0357016 + Delta Ekin [MeV] : min=0 mean=0.00153166 max=1.90511 + decay Ekin [GeV] : min=499.998 mean=500 max=500 + decay Px [GeV] : min=505.586 mean=505.588 max=505.588 + decay Py [GeV] : min=-0.237844 mean=-6.87879e-05 max=0.180337 + decay Pz [GeV] : min=-0.282026 mean=-8.11092e-05 max=0.191393 + decay Etot violation [MeV] : min=-1.72853e-06 mean=-3.78837e-07 max=9.73989e-07 + decay Px violation [MeV] : min=-1.72848e-06 mean=-3.78738e-07 max=9.73989e-07 + decay Py violation [MeV] : min=-1.60597e-10 mean=1.15177e-13 max=2.36028e-10 + decay Pz violation [MeV] : min=-2.91067e-10 mean=9.79535e-14 max=5.34783e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0139153 (mean=0.00306631) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.89502e-11 , 9.89502e-11 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0139153 (mean=0.00306498) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.74296e-11 , 9.74296e-11 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0406133 (mean=-6.3222e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.179043 (mean=0.000145233) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0400863 (mean=-6.13856e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.180221 (mean=0.000147069) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0964412 (mean=-5.84479e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.146075 (mean=0.00010664) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0946962 (mean=-5.67945e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.148056 (mean=0.000108294) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0316951 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0610352 ============================================= @@ -2471,20 +2471,20 @@ Index : 1 used in the geometry : Yes ### Run 26 starts. ### Run 26 starts. - Event#=0 t[ns]=0.164942 r[mm]=49.4453 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0945173 r[mm]=28.3337 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.365361 r[mm]=109.525 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.139485 r[mm]=41.8138 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0333064 r[mm]=9.98436 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.132688 r[mm]=39.7762 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0449096 r[mm]=13.4627 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0274784 r[mm]=8.23727 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.152823 r[mm]=45.8122 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.015154 r[mm]=4.54276 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0 r[mm]=0 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0569333 r[mm]=17.067 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0216694 r[mm]=6.4959 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.144544 r[mm]=43.3305 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0138173 r[mm]=4.14204 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0328183 r[mm]=9.83803 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.039578 r[mm]=11.8644 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.262829 r[mm]=78.789 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0794123 r[mm]=23.8057 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.119252 r[mm]=35.7487 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.294375s Sys=0.000000s + User=0.170000s Real=0.166793s Sys=0.000000s ============ Run::printInfo() =============== RunID = 26 @@ -2501,43 +2501,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9799 + # Decays = 9797 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.66907e-05 mean=0.126356 max=1.03791 - decay R [mm] : min=0.00500342 mean=37.878 max=311.137 - decay X [mm] : min=0.00500342 mean=37.878 max=311.137 - decay Y [mm] : min=-0.0368568 mean=-1.19766e-05 max=0.00872278 - decay Z [mm] : min=-0.0293937 mean=-6.49087e-06 max=0.0149671 - Delta decay R [mm] : min=-5.68434e-14 mean=1.13746e-09 max=1.63609e-06 - deflection angle [deg] : min=0 mean=7.14088e-05 max=0.024989 - Delta Ekin [MeV] : min=0 mean=0.00120588 max=0.933973 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.758 mean=505.759 max=505.759 - decay Py [GeV] : min=-0.172471 mean=-0.0001157 max=0.0918631 - decay Pz [GeV] : min=-0.181312 mean=-4.54998e-05 max=0.126383 - decay Etot violation [MeV] : min=-5.29806e-07 mean=6.27445e-07 max=1.81969e-06 - decay Px violation [MeV] : min=-5.29632e-07 mean=6.27471e-07 max=1.81986e-06 - decay Py violation [MeV] : min=-3.61808e-10 mean=-1.43191e-13 max=1.65173e-10 - decay Pz violation [MeV] : min=-3.13207e-10 mean=-1.10319e-14 max=2.06015e-10 + decay T [ns] : min=1.05463e-06 mean=0.128406 max=1.07437 + decay R [mm] : min=0.00031615 mean=38.4925 max=322.066 + decay X [mm] : min=0.00031615 mean=38.4925 max=322.066 + decay Y [mm] : min=-0.025092 mean=7.74229e-06 max=0.0522635 + decay Z [mm] : min=-0.0834173 mean=4.48056e-06 max=0.0918506 + Delta decay R [mm] : min=-5.68434e-14 mean=1.94477e-09 max=7.1847e-06 + deflection angle [deg] : min=0 mean=7.45179e-05 max=0.0614212 + Delta Ekin [MeV] : min=0 mean=0.00166937 max=5.64248 + decay Ekin [GeV] : min=499.994 mean=500 max=500 + decay Px [GeV] : min=505.753 mean=505.759 max=505.759 + decay Py [GeV] : min=-0.139019 mean=1.91804e-05 max=0.287883 + decay Pz [GeV] : min=-0.459488 mean=-1.63258e-05 max=0.185298 + decay Etot violation [MeV] : min=-5.0466e-07 mean=6.28141e-07 max=2.17307e-06 + decay Px violation [MeV] : min=-5.04602e-07 mean=6.28167e-07 max=2.17312e-06 + decay Py violation [MeV] : min=-3.57389e-10 mean=-2.79018e-14 max=3.6863e-10 + decay Pz violation [MeV] : min=-5.88045e-10 mean=3.34293e-14 max=4.17231e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.0013891) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.74296e-11 , 9.74296e-11 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0171776 (mean=0.00139209) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.07562e-10 , 1.07562e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.20326e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.20389e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0370834 (mean=-4.05689e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.199575 (mean=9.06073e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0354473 (mean=-3.94314e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.201211 (mean=9.17448e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.158115 (mean=-5.69546e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 1.02429 (mean=0.000223408) (#above threshold = 1) + minUnderestimated_rDeltaPos [mum] = -0.150931 (mean=-5.50099e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 1.03148 (mean=0.000225353) (#above threshold = 1) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -2563,20 +2563,20 @@ Index : 1 used in the geometry : Yes ### Run 27 starts. ### Run 27 starts. - Event#=0 t[ns]=0.0420898 r[mm]=12.6174 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0649552 r[mm]=19.4718 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0120062 r[mm]=3.59913 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.15305 r[mm]=45.8803 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.103706 r[mm]=31.0881 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.353596 r[mm]=105.998 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0312192 r[mm]=9.35868 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.19181 r[mm]=57.4996 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0658567 r[mm]=19.7421 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0301506 r[mm]=9.03833 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0557107 r[mm]=16.7005 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0434962 r[mm]=13.039 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0896504 r[mm]=26.8748 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.326076 r[mm]=97.7487 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.367831 r[mm]=110.266 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0131163 r[mm]=3.93192 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.175133 r[mm]=52.5002 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.129722 r[mm]=38.8872 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.272668 r[mm]=81.7385 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.254638 r[mm]=76.3335 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.261542s Sys=0.000000s + User=0.170000s Real=0.175447s Sys=0.000000s ============ Run::printInfo() =============== RunID = 27 @@ -2593,45 +2593,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9800 + # Decays = 9774 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=7.79763e-06 mean=0.128961 max=1.48007 - decay R [mm] : min=0.00233752 mean=38.659 max=443.685 - decay X [mm] : min=0.00233752 mean=38.659 max=443.685 - decay Y [mm] : min=-0.0126842 mean=2.55012e-06 max=0.0145861 - decay Z [mm] : min=-0.0189932 mean=3.46848e-06 max=0.0567531 - Delta decay R [mm] : min=-5.68434e-14 mean=1.06929e-09 max=7.34876e-07 - deflection angle [deg] : min=0 mean=6.44504e-05 max=0.0192398 - Delta Ekin [MeV] : min=0 mean=0.00102551 max=0.553652 + decay T [ns] : min=7.55695e-08 mean=0.127321 max=1.03522 + decay R [mm] : min=2.26537e-05 mean=38.1673 max=310.33 + decay X [mm] : min=2.26537e-05 mean=38.1673 max=310.33 + decay Y [mm] : min=-0.0327226 mean=-1.59804e-05 max=0.0136677 + decay Z [mm] : min=-0.023462 mean=-9.93007e-06 max=0.0206302 + Delta decay R [mm] : min=-5.68434e-14 mean=1.69331e-09 max=2.01037e-06 + deflection angle [deg] : min=0 mean=9.24718e-05 max=0.028407 + Delta Ekin [MeV] : min=0 mean=0.00176253 max=1.20694 decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.758 mean=505.759 max=505.759 - decay Py [GeV] : min=-0.146395 mean=8.0258e-05 max=0.150707 - decay Pz [GeV] : min=-0.147372 mean=4.60175e-06 max=0.141766 - decay Etot violation [MeV] : min=-3.66766e-07 mean=6.2219e-07 max=1.95124e-06 - decay Px violation [MeV] : min=-3.66825e-07 mean=6.22214e-07 max=1.95135e-06 - decay Py violation [MeV] : min=-3.11047e-10 mean=1.33478e-13 max=3.85e-10 - decay Pz violation [MeV] : min=-2.80025e-10 mean=-4.78784e-14 max=2.42522e-10 + decay Px [GeV] : min=505.757 mean=505.759 max=505.759 + decay Py [GeV] : min=-0.161267 mean=-0.000118733 max=0.166506 + decay Pz [GeV] : min=-0.238849 mean=-2.50936e-05 max=0.230489 + decay Etot violation [MeV] : min=-6.12577e-07 mean=6.20212e-07 max=1.85898e-06 + decay Px violation [MeV] : min=-6.12461e-07 mean=6.20236e-07 max=1.85904e-06 + decay Py violation [MeV] : min=-3.79686e-10 mean=-1.71947e-13 max=5.8472e-10 + decay Pz violation [MeV] : min=-4.32124e-10 mean=-4.92049e-14 max=3.60131e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.00927412 (mean=0.00139135) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.45732e-11 , 9.45732e-11 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.00139342) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.02432e-10 , 1.02432e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.32839e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.2658e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0301811 (mean=-3.69268e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.122757 (mean=8.15107e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0298544 (mean=-3.58575e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.123059 (mean=8.258e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0568156 (mean=-5.81636e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.104513 (mean=0.000132913) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0548053 (mean=-5.64703e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.105398 (mean=0.000134606) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0307184 ============================================= @@ -2655,20 +2655,20 @@ Index : 1 used in the geometry : Yes ### Run 28 starts. ### Run 28 starts. - Event#=0 t[ns]=0.0139949 r[mm]=4.1953 deltaR[mum]=1.72973e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000569871 - Event#=1000 t[ns]=0.226694 r[mm]=67.9567 deltaR[mum]=0.000172737 deltaEkin[MeV]=10.1571 deltaAngle(deg)=0.00849935 - Event#=2000 t[ns]=0.137252 r[mm]=41.1445 deltaR[mum]=3.45065e-05 deltaEkin[MeV]=6.80352 deltaAngle(deg)=0.00576182 - Event#=3000 t[ns]=0.082841 r[mm]=24.8335 deltaR[mum]=2.55652e-06 deltaEkin[MeV]=5.3219 deltaAngle(deg)=0.00271998 - Event#=4000 t[ns]=0.0669804 r[mm]=20.0789 deltaR[mum]=1.45111e-06 deltaEkin[MeV]=3.84097 deltaAngle(deg)=0.00279074 - Event#=5000 t[ns]=0.159492 r[mm]=47.8113 deltaR[mum]=5.58428e-05 deltaEkin[MeV]=7.36404 deltaAngle(deg)=0.00677256 - Event#=6000 t[ns]=0.0352582 r[mm]=10.5694 deltaR[mum]=3.12486e-07 deltaEkin[MeV]=0.490737 deltaAngle(deg)=0.00133121 - Event#=7000 t[ns]=0.086402 r[mm]=25.901 deltaR[mum]=5.69901e-05 deltaEkin[MeV]=20.4439 deltaAngle(deg)=0.00391615 - Event#=8000 t[ns]=0.157496 r[mm]=47.213 deltaR[mum]=5.00984e-05 deltaEkin[MeV]=7.57734 deltaAngle(deg)=0.00569049 - Event#=9000 t[ns]=0.0984306 r[mm]=29.5068 deltaR[mum]=1.38906e-05 deltaEkin[MeV]=7.79238 deltaAngle(deg)=0.00365075 + Event#=0 t[ns]=0.343614 r[mm]=103.006 deltaR[mum]=0.000348265 deltaEkin[MeV]=7.46688 deltaAngle(deg)=0.0134778 + Event#=1000 t[ns]=0.278489 r[mm]=83.4835 deltaR[mum]=0.000237071 deltaEkin[MeV]=8.93574 deltaAngle(deg)=0.0110033 + Event#=2000 t[ns]=0.0178606 r[mm]=5.35411 deltaR[mum]=3.59535e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00072728 + Event#=3000 t[ns]=0.231546 r[mm]=69.4112 deltaR[mum]=0.000197751 deltaEkin[MeV]=11.1315 deltaAngle(deg)=0.00928765 + Event#=4000 t[ns]=0.0896435 r[mm]=26.8727 deltaR[mum]=3.20039e-06 deltaEkin[MeV]=6.09169 deltaAngle(deg)=0.00410941 + Event#=5000 t[ns]=0.0162847 r[mm]=4.88172 deltaR[mum]=2.72493e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000663113 + Event#=6000 t[ns]=0.645784 r[mm]=193.589 deltaR[mum]=0.00203314 deltaEkin[MeV]=7.80604 deltaAngle(deg)=0.0269088 + Event#=7000 t[ns]=0.155303 r[mm]=46.5557 deltaR[mum]=6.41341e-05 deltaEkin[MeV]=6.89614 deltaAngle(deg)=0.00673085 + Event#=8000 t[ns]=0.0468955 r[mm]=14.058 deltaR[mum]=2.11006e-06 deltaEkin[MeV]=3.26811 deltaAngle(deg)=0.00164094 + Event#=9000 t[ns]=0.229969 r[mm]=68.9386 deltaR[mum]=0.000126352 deltaEkin[MeV]=7.09788 deltaAngle(deg)=0.00986559 Run terminated. Run Summary Number of events processed : 10000 - User=0.240000s Real=0.410699s Sys=0.000000s + User=0.240000s Real=0.234766s Sys=0.000000s ============ Run::printInfo() =============== RunID = 28 @@ -2685,45 +2685,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9803 + # Decays = 9788 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.86464e-05 mean=0.136436 max=1.05745 - decay R [mm] : min=0.00558968 mean=40.8999 max=316.996 - decay X [mm] : min=0.00558968 mean=40.8999 max=316.996 - decay Y [mm] : min=-0.00540596 mean=0.00423691 max=0.119831 - decay Z [mm] : min=-0.0271741 mean=6.33157e-06 max=0.0518642 - Delta decay R [mm] : min=-3.46945e-18 mean=1.48133e-07 max=2.54562e-05 - deflection angle [deg] : min=0 mean=0.00562743 max=0.0439487 - Delta Ekin [MeV] : min=0 mean=6.68402 max=1204.11 - decay Ekin [GeV] : min=498.796 mean=499.993 max=500 - decay Px [GeV] : min=504.557 mean=505.755 max=505.761 - decay Py [GeV] : min=-0.0973342 mean=0.0489894 max=0.381147 - decay Pz [GeV] : min=-0.168489 mean=1.1496e-05 max=0.142221 - decay Etot violation [MeV] : min=-1.65857e-06 mean=-7.08709e-08 max=1.63319e-06 - decay Px violation [MeV] : min=-1.65834e-06 mean=-7.08698e-08 max=1.63319e-06 - decay Py violation [MeV] : min=-6.93802e-10 mean=-6.84401e-12 max=4.40508e-10 - decay Pz violation [MeV] : min=-2.3681e-10 mean=-1.00962e-13 max=1.08201e-10 + decay T [ns] : min=1.36463e-05 mean=0.135401 max=1.20514 + decay R [mm] : min=0.0040908 mean=40.5894 max=361.267 + decay X [mm] : min=0.0040908 mean=40.5894 max=361.267 + decay Y [mm] : min=-0.00280664 mean=0.00427398 max=0.151262 + decay Z [mm] : min=-0.0157887 mean=1.74821e-05 max=0.0300185 + Delta decay R [mm] : min=8.67362e-19 mean=1.46326e-07 max=1.13771e-05 + deflection angle [deg] : min=8.53688e-07 mean=0.00558731 max=0.0602778 + Delta Ekin [MeV] : min=0 mean=6.24609 max=1491.81 + decay Ekin [GeV] : min=498.508 mean=499.994 max=500 + decay Px [GeV] : min=504.269 mean=505.755 max=505.761 + decay Py [GeV] : min=-0.0710092 mean=0.0487898 max=0.427433 + decay Pz [GeV] : min=-0.141809 mean=9.02279e-05 max=0.437824 + decay Etot violation [MeV] : min=-1.72976e-06 mean=-7.31906e-08 max=1.64221e-06 + decay Px violation [MeV] : min=-1.72982e-06 mean=-7.31903e-08 max=1.64221e-06 + decay Py violation [MeV] : min=-7.95694e-10 mean=-8.25613e-12 max=5.586e-10 + decay Pz violation [MeV] : min=-3.64196e-10 mean=-4.08732e-14 max=1.6766e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0184336 (mean=0.0034558) + maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.00347671) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.17765e-10 , 1.17765e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.16145e-10 , 1.16145e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -59.4392 (mean=-0.301328) (#above threshold = 140) - maxOverestimated_mc_truth_rPos_delta [mum] = 188.816 (mean=0.477624) (#above threshold = 1272) - minUnderestimated_rDeltaPos [mum] = -59.4137 (mean=-0.30118) (#above threshold = 140) - maxOverestimated_rDeltaPos [mum] = 188.842 (mean=0.477772) (#above threshold = 1273) + minUnderestimated_mc_truth_rPos_delta [mum] = -55.0218 (mean=-0.286258) (#above threshold = 119) + maxOverestimated_mc_truth_rPos_delta [mum] = 44.3416 (mean=0.424763) (#above threshold = 1251) + minUnderestimated_rDeltaPos [mum] = -55.0203 (mean=-0.286112) (#above threshold = 119) + maxOverestimated_rDeltaPos [mum] = 44.3475 (mean=0.424909) (#above threshold = 1252) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0366833 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0405244 ============================================= @@ -2747,20 +2747,20 @@ Index : 1 used in the geometry : Yes ### Run 29 starts. ### Run 29 starts. - Event#=0 t[ns]=0.164692 r[mm]=49.3702 deltaR[mum]=6.99868e-05 deltaEkin[MeV]=8.18283 deltaAngle(deg)=0.00663472 - Event#=1000 t[ns]=0.34432 r[mm]=103.218 deltaR[mum]=0.00039514 deltaEkin[MeV]=7.1558 deltaAngle(deg)=0.0141178 - Event#=2000 t[ns]=0.650246 r[mm]=194.926 deltaR[mum]=0.00207213 deltaEkin[MeV]=9.03309 deltaAngle(deg)=0.0257488 - Event#=3000 t[ns]=0.107547 r[mm]=32.2395 deltaR[mum]=2.18844e-05 deltaEkin[MeV]=8.03379 deltaAngle(deg)=0.00405229 - Event#=4000 t[ns]=0.477405 r[mm]=143.113 deltaR[mum]=0.000842535 deltaEkin[MeV]=6.98511 deltaAngle(deg)=0.0191306 - Event#=5000 t[ns]=0.101459 r[mm]=30.4147 deltaR[mum]=7.98303e-06 deltaEkin[MeV]=7.49893 deltaAngle(deg)=0.00424134 - Event#=6000 t[ns]=0.0346471 r[mm]=10.3863 deltaR[mum]=2.96417e-07 deltaEkin[MeV]=0.440277 deltaAngle(deg)=0.00131408 - Event#=7000 t[ns]=0.0307582 r[mm]=9.22047 deltaR[mum]=1.91484e-07 deltaEkin[MeV]=0.0521387 deltaAngle(deg)=0.00131649 - Event#=8000 t[ns]=0.358157 r[mm]=107.366 deltaR[mum]=0.000519346 deltaEkin[MeV]=9.71576 deltaAngle(deg)=0.0149212 - Event#=9000 t[ns]=0.00877659 r[mm]=2.63098 deltaR[mum]=4.26637e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000357382 + Event#=0 t[ns]=0.0974838 r[mm]=29.223 deltaR[mum]=2.00909e-05 deltaEkin[MeV]=8.80377 deltaAngle(deg)=0.00313933 + Event#=1000 t[ns]=0.07873 r[mm]=23.6011 deltaR[mum]=2.22034e-06 deltaEkin[MeV]=4.90414 deltaAngle(deg)=0.00346442 + Event#=2000 t[ns]=0.142597 r[mm]=42.7466 deltaR[mum]=3.94221e-05 deltaEkin[MeV]=7.1024 deltaAngle(deg)=0.00592265 + Event#=3000 t[ns]=0.205019 r[mm]=61.459 deltaR[mum]=0.000125833 deltaEkin[MeV]=7.37244 deltaAngle(deg)=0.00919708 + Event#=4000 t[ns]=0.210152 r[mm]=62.9978 deltaR[mum]=0.000143192 deltaEkin[MeV]=8.34736 deltaAngle(deg)=0.00965392 + Event#=5000 t[ns]=0.0967248 r[mm]=28.9954 deltaR[mum]=1.92281e-05 deltaEkin[MeV]=8.65225 deltaAngle(deg)=0.00439204 + Event#=6000 t[ns]=0.0398277 r[mm]=11.9393 deltaR[mum]=4.32571e-07 deltaEkin[MeV]=1.23854 deltaAngle(deg)=0.00194124 + Event#=7000 t[ns]=0.257683 r[mm]=77.2462 deltaR[mum]=0.000219848 deltaEkin[MeV]=10.2954 deltaAngle(deg)=0.00982831 + Event#=8000 t[ns]=0.299961 r[mm]=89.9201 deltaR[mum]=0.000389998 deltaEkin[MeV]=15.3063 deltaAngle(deg)=0.0113792 + Event#=9000 t[ns]=0.501015 r[mm]=150.191 deltaR[mum]=0.00114873 deltaEkin[MeV]=10.7749 deltaAngle(deg)=0.0203769 Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.660298s Sys=0.000000s + User=0.210000s Real=0.255040s Sys=0.000000s ============ Run::printInfo() =============== RunID = 29 @@ -2777,45 +2777,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9822 + # Decays = 9792 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=8.95109e-06 mean=0.136163 max=1.40684 - decay R [mm] : min=0.00268329 mean=40.8178 max=421.732 - decay X [mm] : min=0.00268329 mean=40.8178 max=421.732 - decay Y [mm] : min=-0.208351 mean=-0.00435182 max=0.0162766 - decay Z [mm] : min=-0.0133898 mean=4.47824e-06 max=0.0113011 - Delta decay R [mm] : min=4.33681e-19 mean=1.49498e-07 max=1.80444e-05 - deflection angle [deg] : min=8.53688e-07 mean=0.00562454 max=0.0568699 - Delta Ekin [MeV] : min=0 mean=6.0978 max=597.526 - decay Ekin [GeV] : min=499.402 mean=499.994 max=500 - decay Px [GeV] : min=505.164 mean=505.755 max=505.761 - decay Py [GeV] : min=-0.502045 mean=-0.0490181 max=0.222805 - decay Pz [GeV] : min=-0.0938571 mean=0.000102129 max=0.279884 - decay Etot violation [MeV] : min=-2.16131e-06 mean=-7.64811e-08 max=2.02295e-06 - decay Px violation [MeV] : min=-2.16148e-06 mean=-7.64824e-08 max=2.02307e-06 - decay Py violation [MeV] : min=-5.9768e-10 mean=6.9496e-12 max=7.12475e-10 - decay Pz violation [MeV] : min=-5.45299e-10 mean=-1.02951e-13 max=1.36794e-10 + decay T [ns] : min=4.9833e-06 mean=0.136305 max=1.25482 + decay R [mm] : min=0.00149386 mean=40.8604 max=376.161 + decay X [mm] : min=0.00149386 mean=40.8604 max=376.161 + decay Y [mm] : min=-0.169599 mean=-0.00425241 max=0.00943997 + decay Z [mm] : min=-0.0285607 mean=-9.79461e-08 max=0.0205047 + Delta decay R [mm] : min=0 mean=1.44214e-07 max=1.99784e-05 + deflection angle [deg] : min=8.53688e-07 mean=0.00560884 max=0.051375 + Delta Ekin [MeV] : min=0 mean=6.15613 max=746.959 + decay Ekin [GeV] : min=499.253 mean=499.994 max=500 + decay Px [GeV] : min=505.014 mean=505.755 max=505.761 + decay Py [GeV] : min=-0.453516 mean=-0.048975 max=0.171984 + decay Pz [GeV] : min=-0.100475 mean=1.08899e-05 max=0.166422 + decay Etot violation [MeV] : min=-1.73948e-06 mean=-7.29029e-08 max=1.4815e-06 + decay Px violation [MeV] : min=-1.73954e-06 mean=-7.29019e-08 max=1.48133e-06 + decay Py violation [MeV] : min=-5.33703e-10 mean=7.42358e-12 max=7.42943e-10 + decay Pz violation [MeV] : min=-1.43217e-10 mean=-2.22216e-14 max=1.28168e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.0034266) + maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.0034847) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.19002e-10 , 1.19002e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.17325e-10 , 1.17325e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -26.1273 (mean=-0.279755) (#above threshold = 119) - maxOverestimated_mc_truth_rPos_delta [mum] = 32.1022 (mean=0.414046) (#above threshold = 1222) - minUnderestimated_rDeltaPos [mum] = -26.1272 (mean=-0.279606) (#above threshold = 119) - maxOverestimated_rDeltaPos [mum] = 32.1065 (mean=0.414195) (#above threshold = 1222) + minUnderestimated_mc_truth_rPos_delta [mum] = -34.4696 (mean=-0.286677) (#above threshold = 125) + maxOverestimated_mc_truth_rPos_delta [mum] = 140.326 (mean=0.441019) (#above threshold = 1256) + minUnderestimated_rDeltaPos [mum] = -34.4669 (mean=-0.286532) (#above threshold = 125) + maxOverestimated_rDeltaPos [mum] = 140.346 (mean=0.441164) (#above threshold = 1256) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0391319 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.043602 ============================================= @@ -2839,20 +2839,20 @@ Index : 1 used in the geometry : Yes ### Run 30 starts. ### Run 30 starts. - Event#=0 t[ns]=0.00210329 r[mm]=0.630504 deltaR[mum]=5.83977e-11 deltaEkin[MeV]=0 deltaAngle(deg)=8.55989e-05 - Event#=1000 t[ns]=0.269916 r[mm]=80.9129 deltaR[mum]=0.000212639 deltaEkin[MeV]=6.99213 deltaAngle(deg)=0.0117515 - Event#=2000 t[ns]=0.170939 r[mm]=51.2425 deltaR[mum]=6.43416e-05 deltaEkin[MeV]=7.13347 deltaAngle(deg)=0.00657452 - Event#=3000 t[ns]=0.0506279 r[mm]=15.1768 deltaR[mum]=7.48537e-07 deltaEkin[MeV]=2.06873 deltaAngle(deg)=0.002134 - Event#=4000 t[ns]=0.00541729 r[mm]=1.62395 deltaR[mum]=1.00231e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000220481 - Event#=5000 t[ns]=0.0395909 r[mm]=11.8682 deltaR[mum]=1.22195e-06 deltaEkin[MeV]=10.5202 deltaAngle(deg)=0.00188723 - Event#=6000 t[ns]=0.395069 r[mm]=118.43 deltaR[mum]=0.000540013 deltaEkin[MeV]=7.16973 deltaAngle(deg)=0.0161128 - Event#=7000 t[ns]=0.325395 r[mm]=97.544 deltaR[mum]=0.00031432 deltaEkin[MeV]=7.11262 deltaAngle(deg)=0.013422 - Event#=8000 t[ns]=0.00531136 r[mm]=1.59219 deltaR[mum]=9.44578e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.00021617 - Event#=9000 t[ns]=0.0436899 r[mm]=13.097 deltaR[mum]=5.3744e-07 deltaEkin[MeV]=1.4358 deltaAngle(deg)=0.00199668 + Event#=0 t[ns]=0.0171252 r[mm]=5.13363 deltaR[mum]=3.16591e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000696987 + Event#=1000 t[ns]=0.312957 r[mm]=93.8154 deltaR[mum]=0.000305373 deltaEkin[MeV]=8.61035 deltaAngle(deg)=0.0118487 + Event#=2000 t[ns]=0.263614 r[mm]=79.0237 deltaR[mum]=0.000249651 deltaEkin[MeV]=8.71686 deltaAngle(deg)=0.0114889 + Event#=3000 t[ns]=0.55716 r[mm]=167.02 deltaR[mum]=0.00275299 deltaEkin[MeV]=40.4654 deltaAngle(deg)=0.0223537 + Event#=4000 t[ns]=0.0671445 r[mm]=20.128 deltaR[mum]=1.45864e-06 deltaEkin[MeV]=3.58899 deltaAngle(deg)=0.00277871 + Event#=5000 t[ns]=0.103672 r[mm]=31.0779 deltaR[mum]=1.05162e-05 deltaEkin[MeV]=8.02263 deltaAngle(deg)=0.00463807 + Event#=6000 t[ns]=0.221385 r[mm]=66.3647 deltaR[mum]=0.000135789 deltaEkin[MeV]=6.75536 deltaAngle(deg)=0.00897998 + Event#=7000 t[ns]=0.105801 r[mm]=31.7162 deltaR[mum]=1.30326e-05 deltaEkin[MeV]=7.07965 deltaAngle(deg)=0.00515088 + Event#=8000 t[ns]=0.179308 r[mm]=53.7515 deltaR[mum]=0.000116986 deltaEkin[MeV]=9.79561 deltaAngle(deg)=0.0071595 + Event#=9000 t[ns]=0.00390856 r[mm]=1.17167 deltaR[mum]=3.76144e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000159075 Run terminated. Run Summary Number of events processed : 10000 - User=0.210000s Real=0.485310s Sys=0.000000s + User=0.210000s Real=0.299670s Sys=0.000000s ============ Run::printInfo() =============== RunID = 30 @@ -2869,45 +2869,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9826 + # Decays = 9810 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=7.6336e-06 mean=0.136185 max=1.13622 - decay R [mm] : min=0.00228833 mean=40.8243 max=340.606 - decay X [mm] : min=0.00228833 mean=40.8243 max=340.606 - decay Y [mm] : min=-0.0045383 mean=0.00429051 max=0.139535 - decay Z [mm] : min=-0.0265067 mean=-1.37072e-05 max=0.0225382 - Delta decay R [mm] : min=-3.46945e-18 mean=1.53113e-07 max=1.67415e-05 - deflection angle [deg] : min=0 mean=0.00559013 max=0.0466066 - Delta Ekin [MeV] : min=0 mean=6.36042 max=1223.08 - decay Ekin [GeV] : min=498.777 mean=499.994 max=500 - decay Px [GeV] : min=504.787 mean=506.004 max=506.01 - decay Py [GeV] : min=-0.0972589 mean=0.0489144 max=0.411616 - decay Pz [GeV] : min=-0.150415 mean=-0.000156777 max=0.181704 - decay Etot violation [MeV] : min=-1.37498e-06 mean=1.45692e-07 max=1.64099e-06 - decay Px violation [MeV] : min=-1.37504e-06 mean=1.45682e-07 max=1.64105e-06 - decay Py violation [MeV] : min=-5.5843e-10 mean=1.04915e-11 max=7.32314e-10 - decay Pz violation [MeV] : min=-1.6756e-10 mean=3.98581e-14 max=2.062e-10 + decay T [ns] : min=1.00037e-06 mean=0.137506 max=1.55814 + decay R [mm] : min=0.000299881 mean=41.2203 max=467.086 + decay X [mm] : min=0.000299881 mean=41.2203 max=467.086 + decay Y [mm] : min=-0.00888774 mean=0.00434456 max=0.255633 + decay Z [mm] : min=-0.0138238 mean=-9.04483e-06 max=0.0187949 + Delta decay R [mm] : min=-3.46945e-18 mean=1.58161e-07 max=2.47198e-05 + deflection angle [deg] : min=0 mean=0.00565238 max=0.0674457 + Delta Ekin [MeV] : min=0 mean=6.12898 max=888.268 + decay Ekin [GeV] : min=499.112 mean=499.994 max=500 + decay Px [GeV] : min=505.122 mean=506.004 max=506.01 + decay Py [GeV] : min=-0.140188 mean=0.0494003 max=0.564682 + decay Pz [GeV] : min=-0.189702 mean=-8.07914e-05 max=0.101176 + decay Etot violation [MeV] : min=-1.38389e-06 mean=1.46736e-07 max=1.58948e-06 + decay Px violation [MeV] : min=-1.38395e-06 mean=1.46724e-07 max=1.58936e-06 + decay Py violation [MeV] : min=-4.49319e-10 mean=1.03801e-11 max=5.98533e-10 + decay Pz violation [MeV] : min=-1.21588e-10 mean=-1.26611e-13 max=1.70303e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0183736 (mean=0.00442858) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.07448e-10 , 1.07448e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0183736 (mean=0.00443022) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.0624e-10 , 1.0624e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.42321e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.67494e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -33.0101 (mean=-0.28928) (#above threshold = 147) - maxOverestimated_mc_truth_rPos_delta [mum] = 116.185 (mean=0.440117) (#above threshold = 1194) - minUnderestimated_rDeltaPos [mum] = -33.0011 (mean=-0.289126) (#above threshold = 147) - maxOverestimated_rDeltaPos [mum] = 116.202 (mean=0.44027) (#above threshold = 1194) + minUnderestimated_mc_truth_rPos_delta [mum] = -27.6207 (mean=-0.283316) (#above threshold = 120) + maxOverestimated_mc_truth_rPos_delta [mum] = 123.077 (mean=0.465425) (#above threshold = 1288) + minUnderestimated_rDeltaPos [mum] = -27.6178 (mean=-0.283158) (#above threshold = 120) + maxOverestimated_rDeltaPos [mum] = 123.096 (mean=0.465583) (#above threshold = 1289) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0708957 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0655804 ============================================= @@ -2931,20 +2931,20 @@ Index : 1 used in the geometry : Yes ### Run 31 starts. ### Run 31 starts. - Event#=0 t[ns]=0.0427818 r[mm]=12.8247 deltaR[mum]=5.12115e-07 deltaEkin[MeV]=1.64665 deltaAngle(deg)=0.00168231 - Event#=1000 t[ns]=0.0230412 r[mm]=6.9071 deltaR[mum]=7.71108e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00093777 - Event#=2000 t[ns]=0.133412 r[mm]=39.9932 deltaR[mum]=5.30673e-05 deltaEkin[MeV]=7.67542 deltaAngle(deg)=0.0063448 - Event#=3000 t[ns]=0.0244441 r[mm]=7.32763 deltaR[mum]=9.20704e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000994865 - Event#=4000 t[ns]=0.0984137 r[mm]=29.5016 deltaR[mum]=5.33124e-06 deltaEkin[MeV]=7.22103 deltaAngle(deg)=0.00387027 - Event#=5000 t[ns]=0.00481436 r[mm]=1.44321 deltaR[mum]=7.03881e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000195941 - Event#=6000 t[ns]=0.480079 r[mm]=143.914 deltaR[mum]=0.00097898 deltaEkin[MeV]=6.80626 deltaAngle(deg)=0.0202463 - Event#=7000 t[ns]=0.101121 r[mm]=30.3131 deltaR[mum]=2.06145e-05 deltaEkin[MeV]=7.91889 deltaAngle(deg)=0.00393136 - Event#=8000 t[ns]=0.138354 r[mm]=41.4746 deltaR[mum]=3.4132e-05 deltaEkin[MeV]=6.46978 deltaAngle(deg)=0.00551962 - Event#=9000 t[ns]=0.315887 r[mm]=94.6939 deltaR[mum]=0.000297312 deltaEkin[MeV]=7.01301 deltaAngle(deg)=0.0131849 + Event#=0 t[ns]=0.0815123 r[mm]=24.435 deltaR[mum]=2.44125e-06 deltaEkin[MeV]=5.26788 deltaAngle(deg)=0.00336473 + Event#=1000 t[ns]=0.178102 r[mm]=53.3898 deltaR[mum]=6.66342e-05 deltaEkin[MeV]=6.6183 deltaAngle(deg)=0.00678058 + Event#=2000 t[ns]=0.0781409 r[mm]=23.4244 deltaR[mum]=2.17305e-06 deltaEkin[MeV]=4.60793 deltaAngle(deg)=0.0038322 + Event#=3000 t[ns]=0.0876794 r[mm]=26.2838 deltaR[mum]=7.35606e-06 deltaEkin[MeV]=11.9325 deltaAngle(deg)=0.00372899 + Event#=4000 t[ns]=0.122785 r[mm]=36.8072 deltaR[mum]=2.32968e-05 deltaEkin[MeV]=6.65124 deltaAngle(deg)=0.0047996 + Event#=5000 t[ns]=0.110928 r[mm]=33.2529 deltaR[mum]=2.45259e-05 deltaEkin[MeV]=7.49108 deltaAngle(deg)=0.00497157 + Event#=6000 t[ns]=0.235579 r[mm]=70.6196 deltaR[mum]=0.000249886 deltaEkin[MeV]=12.8544 deltaAngle(deg)=0.00971311 + Event#=7000 t[ns]=0.221747 r[mm]=66.4735 deltaR[mum]=0.000110397 deltaEkin[MeV]=7.37147 deltaAngle(deg)=0.0077406 + Event#=8000 t[ns]=0.12284 r[mm]=36.8238 deltaR[mum]=5.39979e-05 deltaEkin[MeV]=11.2176 deltaAngle(deg)=0.00556927 + Event#=9000 t[ns]=0.277359 r[mm]=83.1443 deltaR[mum]=0.000219048 deltaEkin[MeV]=7.31144 deltaAngle(deg)=0.0118572 Run terminated. Run Summary Number of events processed : 10000 - User=0.230000s Real=0.461570s Sys=0.000000s + User=0.230000s Real=0.281856s Sys=0.010000s ============ Run::printInfo() =============== RunID = 31 @@ -2961,48 +2961,48 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9799 + # Decays = 9809 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=7.31734e-05 mean=0.137032 max=1.4367 - decay R [mm] : min=0.0219353 mean=41.0784 max=430.681 - decay X [mm] : min=0.0219353 mean=41.0784 max=430.681 - decay Y [mm] : min=-0.214914 mean=-0.00431217 max=0.00668866 - decay Z [mm] : min=-0.0338999 mean=-1.20243e-05 max=0.0136738 - Delta decay R [mm] : min=0 mean=1.59099e-07 max=5.32722e-05 - deflection angle [deg] : min=2.95726e-06 mean=0.00564629 max=0.057788 - Delta Ekin [MeV] : min=0 mean=6.70523 max=3740.08 - decay Ekin [GeV] : min=496.26 mean=499.993 max=500 - decay Px [GeV] : min=502.27 mean=506.003 max=506.01 - decay Py [GeV] : min=-0.510303 mean=-0.0493002 max=0.358224 - decay Pz [GeV] : min=-0.291008 mean=-6.34288e-05 max=0.12859 - decay Etot violation [MeV] : min=-1.53418e-06 mean=1.51223e-07 max=1.69728e-06 - decay Px violation [MeV] : min=-1.5343e-06 mean=1.51214e-07 max=1.69716e-06 - decay Py violation [MeV] : min=-5.47914e-10 mean=-1.05556e-11 max=5.80769e-10 - decay Pz violation [MeV] : min=-2.2618e-10 mean=1.75496e-14 max=1.71894e-10 + decay T [ns] : min=5.29427e-06 mean=0.134113 max=1.11228 + decay R [mm] : min=0.00158707 mean=40.2032 max=333.43 + decay X [mm] : min=0.00158707 mean=40.2032 max=333.43 + decay Y [mm] : min=-0.138979 mean=-0.00415916 max=0.0037071 + decay Z [mm] : min=-0.0239694 mean=-3.31665e-06 max=0.00859433 + Delta decay R [mm] : min=-3.46945e-18 mean=1.48497e-07 max=9.25095e-06 + deflection angle [deg] : min=0 mean=0.00550551 max=0.0489556 + Delta Ekin [MeV] : min=0 mean=6.33681 max=689.001 + decay Ekin [GeV] : min=499.311 mean=499.994 max=500 + decay Px [GeV] : min=505.321 mean=506.004 max=506.01 + decay Py [GeV] : min=-0.43201 mean=-0.0481085 max=0.101351 + decay Pz [GeV] : min=-0.168224 mean=-8.40891e-05 max=0.200305 + decay Etot violation [MeV] : min=-1.86748e-06 mean=1.5087e-07 max=1.7822e-06 + decay Px violation [MeV] : min=-1.86736e-06 mean=1.5086e-07 max=1.7822e-06 + decay Py violation [MeV] : min=-6.30735e-10 mean=-1.09868e-11 max=5.25432e-10 + decay Pz violation [MeV] : min=-1.78645e-10 mean=5.9162e-14 max=2.37492e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0158498 (mean=0.00441965) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0183736 (mean=0.00442412) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.06766e-10 , 1.06766e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.04407e-10 , 1.04407e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=4.51265e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.38248e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -91.1465 (mean=-0.302283) (#above threshold = 119) - maxOverestimated_mc_truth_rPos_delta [mum] = 371.162 (mean=0.478908) (#above threshold = 1251) - minUnderestimated_rDeltaPos [mum] = -91.0933 (mean=-0.302124) (#above threshold = 119) - maxOverestimated_rDeltaPos [mum] = 371.216 (mean=0.479067) (#above threshold = 1252) + minUnderestimated_mc_truth_rPos_delta [mum] = -29.2228 (mean=-0.288892) (#above threshold = 138) + maxOverestimated_mc_truth_rPos_delta [mum] = 62.0803 (mean=0.437097) (#above threshold = 1234) + minUnderestimated_rDeltaPos [mum] = -29.2138 (mean=-0.288744) (#above threshold = 138) + maxOverestimated_rDeltaPos [mum] = 62.0893 (mean=0.437245) (#above threshold = 1234) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0500179 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0561312 ============================================= ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.071 MB +Dynamic pools deleted: 11 / Total memory freed: 0.069 MB ============================================================ diff --git a/examples/extended/hadronic/NeutronSource/History b/examples/extended/hadronic/NeutronSource/History index 2085c8dc81..f2bccb2751 100644 --- a/examples/extended/hadronic/NeutronSource/History +++ b/examples/extended/hadronic/NeutronSource/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (NeutronSource-V11-03-00) +- NeutronSource.cc - SetUseNRESP71Model(true) + ## 2024-02-20 Michel Maire (NeutronSource-V11-02-00) - PhysicsList: add G4HadronElasticPhysicsXS - RadioactiveDecayPhysics: add Triton diff --git a/examples/extended/hadronic/NeutronSource/NeutronSource.cc b/examples/extended/hadronic/NeutronSource/NeutronSource.cc index 927855b861..9368e355af 100644 --- a/examples/extended/hadronic/NeutronSource/NeutronSource.cc +++ b/examples/extended/hadronic/NeutronSource/NeutronSource.cc @@ -81,7 +81,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/hadronic/NeutronSource/NeutronSource.out b/examples/extended/hadronic/NeutronSource/NeutronSource.out index 71f360c864..21c40d61c3 100644 --- a/examples/extended/hadronic/NeutronSource/NeutronSource.out +++ b/examples/extended/hadronic/NeutronSource/NeutronSource.out @@ -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 @@ -262,7 +262,7 @@ Threshold for very long decay time at rest 1e+60 y 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 @@ -323,6 +323,7 @@ Threshold for very long decay time at rest 1e+60 y ======================================================================= ====== 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 @@ -339,6 +340,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 @@ -397,7 +399,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=1.300000s Real=1.318959s Sys=0.000000s + User=1.300000s Real=1.361637s Sys=0.010000s The run is 10000 Am241 of 0 eV within BeO (D = 3 cm L = 6 cm ) diff --git a/examples/extended/hadronic/ParticleFluence/Calo/Calo.out b/examples/extended/hadronic/ParticleFluence/Calo/Calo.out index 00eddb5fa9..489d3f522c 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/Calo.out +++ b/examples/extended/hadronic/ParticleFluence/Calo/Calo.out @@ -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 @@ -85,7 +85,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 ======== @@ -738,6 +738,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 @@ -754,6 +755,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 @@ -815,7 +817,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=23.950000s Real=24.015439s Sys=0.030000s + User=26.030000s Real=26.178654s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 0 @@ -829,143 +831,143 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.000878129 - case= 1 downstream electron 1.57291e-05 - case= 2 downstream gamma 0.000360917 - case= 3 downstream muon 1.16001e-06 - case= 4 downstream neutrino 0.00010504 - case= 5 downstream pion 7.63435e-06 - case= 6 downstream neutron 0.000381658 - case= 7 downstream proton 4.85498e-06 + case= 0 downstream all 0.000421958 + case= 1 downstream electron 4.66646e-06 + case= 2 downstream gamma 0.000119948 + case= 3 downstream muon 5.71912e-07 + case= 4 downstream neutrino 9.66803e-05 + case= 5 downstream pion 1.93015e-06 + case= 6 downstream neutron 0.000197517 + case= 7 downstream proton 0 case= 8 downstream ion 0 - case= 9 downstream otherMeson 1.1352e-06 + case= 9 downstream otherMeson 6.43791e-07 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.000715175 - case= 12 downstream below 20 MeV electron 1.3012e-05 - case= 13 downstream below 20 MeV gamma 0.000351922 + case= 11 downstream below 20 MeV all 0.00030519 + case= 12 downstream below 20 MeV electron 1.76557e-06 + case= 13 downstream below 20 MeV gamma 0.000118162 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 1.26891e-05 + case= 15 downstream below 20 MeV neutrino 5.50827e-06 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.000336987 - case= 18 downstream below 20 MeV proton 5.65115e-07 + case= 17 downstream below 20 MeV neutron 0.000179754 + case= 18 downstream below 20 MeV proton 0 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.000162954 - case= 23 downstream above 20 MeV electron 2.71715e-06 - case= 24 downstream above 20 MeV gamma 8.99503e-06 - case= 25 downstream above 20 MeV muon 1.16001e-06 - case= 26 downstream above 20 MeV neutrino 9.23512e-05 - case= 27 downstream above 20 MeV pion 7.63435e-06 - case= 28 downstream above 20 MeV neutron 4.46711e-05 - case= 29 downstream above 20 MeV proton 4.28986e-06 + case= 22 downstream above 20 MeV all 0.000116768 + case= 23 downstream above 20 MeV electron 2.90089e-06 + case= 24 downstream above 20 MeV gamma 1.78657e-06 + case= 25 downstream above 20 MeV muon 5.71912e-07 + case= 26 downstream above 20 MeV neutrino 9.1172e-05 + case= 27 downstream above 20 MeV pion 1.93015e-06 + case= 28 downstream above 20 MeV neutron 1.7763e-05 + case= 29 downstream above 20 MeV proton 0 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.1352e-06 + case= 31 downstream above 20 MeV otherMeson 6.43791e-07 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.000673919 - case= 34 side electron 2.0723e-06 - case= 35 side gamma 0.00011181 + case= 33 side all 0.000658582 + case= 34 side electron 8.26828e-07 + case= 35 side gamma 9.21687e-05 case= 36 side muon 0 - case= 37 side neutrino 0.000171229 - case= 38 side pion 0 - case= 39 side neutron 0.000388361 - case= 40 side proton 4.46494e-07 + case= 37 side neutrino 0.000164989 + case= 38 side pion 1.0486e-07 + case= 39 side neutron 0.000399989 + case= 40 side proton 5.02678e-07 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.000484632 - case= 45 side below 20 MeV electron 2.0723e-06 - case= 46 side below 20 MeV gamma 0.000111705 + case= 44 side below 20 MeV all 0.00048243 + case= 45 side below 20 MeV electron 8.26828e-07 + case= 46 side below 20 MeV gamma 9.21687e-05 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.25457e-05 + case= 48 side below 20 MeV neutrino 1.35427e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.000358114 - case= 51 side below 20 MeV proton 1.94874e-07 + case= 50 side below 20 MeV neutron 0.000375892 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000189287 + case= 55 side above 20 MeV all 0.000176152 case= 56 side above 20 MeV electron 0 - case= 57 side above 20 MeV gamma 1.04346e-07 + case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000158683 - case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 3.02475e-05 - case= 62 side above 20 MeV proton 2.5162e-07 + case= 59 side above 20 MeV neutrino 0.000151446 + case= 60 side above 20 MeV pion 1.0486e-07 + case= 61 side above 20 MeV neutron 2.40977e-05 + case= 62 side above 20 MeV proton 5.02678e-07 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00576049 - case= 67 upstream electron 3.29356e-05 - case= 68 upstream gamma 0.00157364 + case= 66 upstream all 0.00521911 + case= 67 upstream electron 2.10759e-05 + case= 68 upstream gamma 0.00135571 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000386949 - case= 71 upstream pion 5.1595e-06 - case= 72 upstream neutron 0.00376098 - case= 73 upstream proton 8.30795e-07 + case= 70 upstream neutrino 0.000414549 + case= 71 upstream pion 5.77315e-06 + case= 72 upstream neutron 0.00342059 + case= 73 upstream proton 1.40764e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00521417 - case= 78 upstream below 20 MeV electron 2.92415e-05 - case= 79 upstream below 20 MeV gamma 0.00156097 + case= 77 upstream below 20 MeV all 0.00466914 + case= 78 upstream below 20 MeV electron 1.64199e-05 + case= 79 upstream below 20 MeV gamma 0.00134996 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 3.60509e-05 + case= 81 upstream below 20 MeV neutrino 3.77283e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.00358791 + case= 83 upstream below 20 MeV neutron 0.00326503 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000546317 - case= 89 upstream above 20 MeV electron 3.69403e-06 - case= 90 upstream above 20 MeV gamma 1.26728e-05 + case= 88 upstream above 20 MeV all 0.000549973 + case= 89 upstream above 20 MeV electron 4.65597e-06 + case= 90 upstream above 20 MeV gamma 5.75373e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000350898 - case= 93 upstream above 20 MeV pion 5.1595e-06 - case= 94 upstream above 20 MeV neutron 0.000173062 - case= 95 upstream above 20 MeV proton 8.30795e-07 + case= 92 upstream above 20 MeV neutrino 0.000376821 + case= 93 upstream above 20 MeV pion 5.77315e-06 + case= 94 upstream above 20 MeV neutron 0.000155562 + case= 95 upstream above 20 MeV proton 1.40764e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 calorimeter all 64109.8 4.09878 262772 - case= 1 calorimeter electron 47448.1 1.55651 73853.4 - case= 2 calorimeter gamma 13982.1 5.1653 72221.8 - case= 3 calorimeter muon 6.58 17.3728 114.313 - case= 4 calorimeter neutrino 19.63 36.438 715.279 - case= 5 calorimeter pion 62.24 1073.37 66806.6 - case= 6 calorimeter neutron 1003.26 19.3107 19373.6 - case= 7 calorimeter proton 230.16 61.5418 14164.5 - case= 8 calorimeter ion 1351.78 0.928336 1254.91 - case= 9 calorimeter otherMeson 4.59 2739.71 12575.3 - case= 10 calorimeter otherBaryon 1.32 1281.91 1692.12 - case= 11 calorimeter below 20 MeV all 63005.6 0.666917 42019.5 - case= 12 calorimeter below 20 MeV electron 47028.3 0.452148 21263.8 - case= 13 calorimeter below 20 MeV gamma 13605.5 1.21394 16516.2 - case= 14 calorimeter below 20 MeV muon 6.13 4.13308 25.3358 - case= 15 calorimeter below 20 MeV neutrino 1.63 14.4583 23.5671 - case= 16 calorimeter below 20 MeV pion 1.39 11.9336 16.5878 - case= 17 calorimeter below 20 MeV neutron 872.4 2.66922 2328.63 - case= 18 calorimeter below 20 MeV proton 149.91 8.08882 1212.6 - case= 19 calorimeter below 20 MeV ion 1339.97 0.470056 629.86 - case= 20 calorimeter below 20 MeV otherMeson 0.31 7.27977 2.25673 - case= 21 calorimeter below 20 MeV otherBaryon 0.07 10.1999 0.713996 - case= 22 calorimeter above 20 MeV all 1104.19 199.922 220752 - case= 23 calorimeter above 20 MeV electron 419.78 125.279 52589.6 - case= 24 calorimeter above 20 MeV gamma 376.66 147.894 55705.6 - case= 25 calorimeter above 20 MeV muon 0.45 197.727 88.9773 - case= 26 calorimeter above 20 MeV neutrino 18 38.4284 691.712 - case= 27 calorimeter above 20 MeV pion 60.85 1097.62 66790 - case= 28 calorimeter above 20 MeV neutron 130.86 130.254 17045 - case= 29 calorimeter above 20 MeV proton 80.25 161.394 12951.9 - case= 30 calorimeter above 20 MeV ion 11.81 52.9251 625.046 - case= 31 calorimeter above 20 MeV otherMeson 4.28 2937.62 12573 - case= 32 calorimeter above 20 MeV otherBaryon 1.25 1353.12 1691.4 + case= 0 calorimeter all 65538.5 4.04746 265265 + case= 1 calorimeter electron 48542.4 1.59381 77367.5 + case= 2 calorimeter gamma 14286.5 5.28321 75478.7 + case= 3 calorimeter muon 6.54 27.7394 181.416 + case= 4 calorimeter neutrino 19.56 37.9177 741.671 + case= 5 calorimeter pion 61.69 1058.43 65294.6 + case= 6 calorimeter neutron 1013.15 17.4751 17704.9 + case= 7 calorimeter proton 229.3 57.4283 13168.3 + case= 8 calorimeter ion 1373.23 0.931055 1278.55 + case= 9 calorimeter otherMeson 4.77 2700.15 12879.7 + case= 10 calorimeter otherBaryon 1.39 841.273 1169.37 + case= 11 calorimeter below 20 MeV all 64414.8 0.663743 42754.8 + case= 12 calorimeter below 20 MeV electron 48112.5 0.450821 21690.1 + case= 13 calorimeter below 20 MeV gamma 13901.1 1.21049 16827.1 + case= 14 calorimeter below 20 MeV muon 5.96 4.11609 24.5319 + case= 15 calorimeter below 20 MeV neutrino 1.57 15.1843 23.8394 + case= 16 calorimeter below 20 MeV pion 1.22 11.814 14.4131 + case= 17 calorimeter below 20 MeV neutron 880.04 2.6531 2334.84 + case= 18 calorimeter below 20 MeV proton 150.97 8.09173 1221.61 + case= 19 calorimeter below 20 MeV ion 1361.16 0.451689 614.821 + case= 20 calorimeter below 20 MeV otherMeson 0.2 8.30756 1.66151 + case= 21 calorimeter below 20 MeV otherBaryon 0.13 14.734 1.91541 + case= 22 calorimeter above 20 MeV all 1123.71 198.014 222510 + case= 23 calorimeter above 20 MeV electron 429.91 129.509 55677.4 + case= 24 calorimeter above 20 MeV gamma 385.42 152.176 58651.6 + case= 25 calorimeter above 20 MeV muon 0.58 270.49 156.884 + case= 26 calorimeter above 20 MeV neutrino 17.99 39.9017 717.831 + case= 27 calorimeter above 20 MeV pion 60.47 1079.55 65280.1 + case= 28 calorimeter above 20 MeV neutron 133.11 115.469 15370.1 + case= 29 calorimeter above 20 MeV proton 78.33 152.517 11946.7 + case= 30 calorimeter above 20 MeV ion 12.07 54.9902 663.732 + case= 31 calorimeter above 20 MeV otherMeson 4.57 2817.95 12878 + case= 32 calorimeter above 20 MeV otherBaryon 1.26 926.55 1167.45 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.25 MB +Dynamic pools deleted: 11 / Total memory freed: 0.23 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out index 8a7d4419ce..3121a072a7 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out @@ -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 @@ -113,7 +113,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 ======== @@ -766,6 +766,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 @@ -782,6 +783,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 @@ -843,7 +845,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=24.360000s Real=24.385843s Sys=0.020000s + User=26.130000s Real=26.187301s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 0 @@ -859,198 +861,198 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.0585951 - case= 1 tracker forward electron 0.000699794 - case= 2 tracker forward gamma 0.0135859 + case= 0 tracker forward all 0.0727022 + case= 1 tracker forward electron 0.000739116 + case= 2 tracker forward gamma 0.01732 case= 3 tracker forward muon 0 - case= 4 tracker forward neutrino 0.000581685 - case= 5 tracker forward pion 0.00051682 - case= 6 tracker forward neutron 0.0431071 - case= 7 tracker forward proton 7.39572e-05 - case= 8 tracker forward ion 1.13147e-05 - case= 9 tracker forward otherMeson 1.85094e-05 + case= 4 tracker forward neutrino 0.000693536 + case= 5 tracker forward pion 0.000531467 + case= 6 tracker forward neutron 0.0532299 + case= 7 tracker forward proton 0.000131182 + case= 8 tracker forward ion 4.51667e-06 + case= 9 tracker forward otherMeson 5.24974e-05 case= 10 tracker forward otherBaryon 0 - case= 11 tracker backward all 0.00774101 - case= 12 tracker backward electron 9.13896e-05 - case= 13 tracker backward gamma 0.00291672 - case= 14 tracker backward muon 1.35564e-06 - case= 15 tracker backward neutrino 0.000216396 - case= 16 tracker backward pion 1.86263e-06 - case= 17 tracker backward neutron 0.00451073 - case= 18 tracker backward proton 2.55391e-06 + case= 11 tracker backward all 0.00964357 + case= 12 tracker backward electron 0.000154378 + case= 13 tracker backward gamma 0.00364214 + case= 14 tracker backward muon 0 + case= 15 tracker backward neutrino 0.000296045 + case= 16 tracker backward pion 4.34383e-06 + case= 17 tracker backward neutron 0.00554666 + case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 case= 20 tracker backward otherMeson 0 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.0560642 - case= 23 tracker below 20 MeV forward electron 0.000577664 - case= 24 tracker below 20 MeV forward gamma 0.0130983 + case= 22 tracker below 20 MeV forward all 0.0697851 + case= 23 tracker below 20 MeV forward electron 0.000565236 + case= 24 tracker below 20 MeV forward gamma 0.0168753 case= 25 tracker below 20 MeV forward muon 0 - case= 26 tracker below 20 MeV forward neutrino 3.0043e-05 - case= 27 tracker below 20 MeV forward pion 3.2986e-06 - case= 28 tracker below 20 MeV forward neutron 0.0423432 - case= 29 tracker below 20 MeV forward proton 4.00048e-06 - case= 30 tracker below 20 MeV forward ion 4.43023e-06 - case= 31 tracker below 20 MeV forward otherMeson 3.31768e-06 + case= 26 tracker below 20 MeV forward neutrino 6.99974e-05 + case= 27 tracker below 20 MeV forward pion 0 + case= 28 tracker below 20 MeV forward neutron 0.0522643 + case= 29 tracker below 20 MeV forward proton 5.76178e-06 + case= 30 tracker below 20 MeV forward ion 4.51667e-06 + case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.00739594 - case= 34 tracker below 20 MeV backward electron 8.84414e-05 - case= 35 tracker below 20 MeV backward gamma 0.00290824 - case= 36 tracker below 20 MeV backward muon 1.35564e-06 - case= 37 tracker below 20 MeV backward neutrino 2.21987e-05 - case= 38 tracker below 20 MeV backward pion 1.86263e-06 - case= 39 tracker below 20 MeV backward neutron 0.00437384 + case= 33 tracker below 20 MeV backward all 0.00917835 + case= 34 tracker below 20 MeV backward electron 0.000154378 + case= 35 tracker below 20 MeV backward gamma 0.00362903 + case= 36 tracker below 20 MeV backward muon 0 + case= 37 tracker below 20 MeV backward neutrino 2.79681e-05 + case= 38 tracker below 20 MeV backward pion 0 + case= 39 tracker below 20 MeV backward neutron 0.00536698 case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00253089 - case= 45 tracker above 20 MeV forward electron 0.00012213 - case= 46 tracker above 20 MeV forward gamma 0.000487637 + case= 44 tracker above 20 MeV forward all 0.00291707 + case= 45 tracker above 20 MeV forward electron 0.00017388 + case= 46 tracker above 20 MeV forward gamma 0.000444712 case= 47 tracker above 20 MeV forward muon 0 - case= 48 tracker above 20 MeV forward neutrino 0.000551642 - case= 49 tracker above 20 MeV forward pion 0.000513521 - case= 50 tracker above 20 MeV forward neutron 0.000763926 - case= 51 tracker above 20 MeV forward proton 6.99567e-05 - case= 52 tracker above 20 MeV forward ion 6.88442e-06 - case= 53 tracker above 20 MeV forward otherMeson 1.51918e-05 + case= 48 tracker above 20 MeV forward neutrino 0.000623538 + case= 49 tracker above 20 MeV forward pion 0.000531467 + case= 50 tracker above 20 MeV forward neutron 0.000965556 + case= 51 tracker above 20 MeV forward proton 0.00012542 + case= 52 tracker above 20 MeV forward ion 0 + case= 53 tracker above 20 MeV forward otherMeson 5.24974e-05 case= 54 tracker above 20 MeV forward otherBaryon 0 - case= 55 tracker above 20 MeV backward all 0.000345067 - case= 56 tracker above 20 MeV backward electron 2.94825e-06 - case= 57 tracker above 20 MeV backward gamma 8.48197e-06 + case= 55 tracker above 20 MeV backward all 0.000465216 + case= 56 tracker above 20 MeV backward electron 0 + case= 57 tracker above 20 MeV backward gamma 1.3107e-05 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000194197 - case= 60 tracker above 20 MeV backward pion 0 - case= 61 tracker above 20 MeV backward neutron 0.000136885 - case= 62 tracker above 20 MeV backward proton 2.55391e-06 + case= 59 tracker above 20 MeV backward neutrino 0.000268077 + case= 60 tracker above 20 MeV backward pion 4.34383e-06 + case= 61 tracker above 20 MeV backward neutron 0.000179689 + case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 case= 64 tracker above 20 MeV backward otherMeson 0 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.0778323 - case= 67 emCalo forward electron 0.00112316 - case= 68 emCalo forward gamma 0.0207 - case= 69 emCalo forward muon 3.13886e-06 - case= 70 emCalo forward neutrino 0.000547511 - case= 71 emCalo forward pion 0.00024643 - case= 72 emCalo forward neutron 0.0550917 - case= 73 emCalo forward proton 9.346e-05 - case= 74 emCalo forward ion 6.31254e-06 - case= 75 emCalo forward otherMeson 1.9013e-05 - case= 76 emCalo forward otherBaryon 1.50803e-06 - case= 77 emCalo backward all 0.00435391 - case= 78 emCalo backward electron 5.14192e-05 - case= 79 emCalo backward gamma 0.000547831 + case= 66 emCalo forward all 0.0896612 + case= 67 emCalo forward electron 0.0014852 + case= 68 emCalo forward gamma 0.0240314 + case= 69 emCalo forward muon 2.46586e-06 + case= 70 emCalo forward neutrino 0.000587371 + case= 71 emCalo forward pion 0.000277829 + case= 72 emCalo forward neutron 0.0631439 + case= 73 emCalo forward proton 0.000107124 + case= 74 emCalo forward ion 1.86808e-06 + case= 75 emCalo forward otherMeson 2.23734e-05 + case= 76 emCalo forward otherBaryon 1.72062e-06 + case= 77 emCalo backward all 0.00513289 + case= 78 emCalo backward electron 4.31081e-05 + case= 79 emCalo backward gamma 0.000638328 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 0.000108282 + case= 81 emCalo backward neutrino 0.000128293 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.00364638 + case= 83 emCalo backward neutron 0.00432316 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.0755857 - case= 89 emCalo below 20 MeV forward electron 0.000966892 - case= 90 emCalo below 20 MeV forward gamma 0.0203302 + case= 88 emCalo below 20 MeV forward all 0.086938 + case= 89 emCalo below 20 MeV forward electron 0.00128333 + case= 90 emCalo below 20 MeV forward gamma 0.0234642 case= 91 emCalo below 20 MeV forward muon 0 - case= 92 emCalo below 20 MeV forward neutrino 5.79993e-05 - case= 93 emCalo below 20 MeV forward pion 2.1798e-06 - case= 94 emCalo below 20 MeV forward neutron 0.0542229 - case= 95 emCalo below 20 MeV forward proton 3.65473e-06 - case= 96 emCalo below 20 MeV forward ion 1.14231e-06 - case= 97 emCalo below 20 MeV forward otherMeson 7.46586e-07 + case= 92 emCalo below 20 MeV forward neutrino 4.49953e-05 + case= 93 emCalo below 20 MeV forward pion 0 + case= 94 emCalo below 20 MeV forward neutron 0.0621443 + case= 95 emCalo below 20 MeV forward proton 1.18205e-06 + case= 96 emCalo below 20 MeV forward ion 0 + case= 97 emCalo below 20 MeV forward otherMeson 0 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.0042451 - case=100 emCalo below 20 MeV backward electron 5.14192e-05 - case=101 emCalo below 20 MeV backward gamma 0.000547831 + case= 99 emCalo below 20 MeV backward all 0.00500027 + case=100 emCalo below 20 MeV backward electron 4.31081e-05 + case=101 emCalo below 20 MeV backward gamma 0.000638328 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 1.0989e-05 + case=103 emCalo below 20 MeV backward neutrino 1.0727e-05 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.00363486 + case=105 emCalo below 20 MeV backward neutron 0.00430811 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00224656 - case=111 emCalo above 20 MeV forward electron 0.000156265 - case=112 emCalo above 20 MeV forward gamma 0.000369853 - case=113 emCalo above 20 MeV forward muon 3.13886e-06 - case=114 emCalo above 20 MeV forward neutrino 0.000489512 - case=115 emCalo above 20 MeV forward pion 0.00024425 - case=116 emCalo above 20 MeV forward neutron 0.000868787 - case=117 emCalo above 20 MeV forward proton 8.98053e-05 - case=118 emCalo above 20 MeV forward ion 5.17022e-06 - case=119 emCalo above 20 MeV forward otherMeson 1.82664e-05 - case=120 emCalo above 20 MeV forward otherBaryon 1.50803e-06 - case=121 emCalo above 20 MeV backward all 0.000108812 + case=110 emCalo above 20 MeV forward all 0.00272321 + case=111 emCalo above 20 MeV forward electron 0.000201879 + case=112 emCalo above 20 MeV forward gamma 0.000567205 + case=113 emCalo above 20 MeV forward muon 2.46586e-06 + case=114 emCalo above 20 MeV forward neutrino 0.000542375 + case=115 emCalo above 20 MeV forward pion 0.000277829 + case=116 emCalo above 20 MeV forward neutron 0.000999555 + case=117 emCalo above 20 MeV forward proton 0.000105942 + case=118 emCalo above 20 MeV forward ion 1.86808e-06 + case=119 emCalo above 20 MeV forward otherMeson 2.23734e-05 + case=120 emCalo above 20 MeV forward otherBaryon 1.72062e-06 + case=121 emCalo above 20 MeV backward all 0.000132617 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 9.72929e-05 + case=125 emCalo above 20 MeV backward neutrino 0.000117566 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 1.15192e-05 + case=127 emCalo above 20 MeV backward neutron 1.50515e-05 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 0.00024823 - case=133 hadCalo forward electron 2.70585e-06 - case=134 hadCalo forward gamma 7.95091e-05 - case=135 hadCalo forward muon 5.48197e-08 - case=136 hadCalo forward neutrino 8.11011e-05 - case=137 hadCalo forward pion 6.52681e-07 - case=138 hadCalo forward neutron 8.37165e-05 - case=139 hadCalo forward proton 4.35716e-07 + case=132 hadCalo forward all 0.000238439 + case=133 hadCalo forward electron 2.8055e-06 + case=134 hadCalo forward gamma 6.46572e-05 + case=135 hadCalo forward muon 0 + case=136 hadCalo forward neutrino 8.53837e-05 + case=137 hadCalo forward pion 7.44688e-07 + case=138 hadCalo forward neutron 8.39276e-05 + case=139 hadCalo forward proton 8.10873e-07 case=140 hadCalo forward ion 0 - case=141 hadCalo forward otherMeson 5.47574e-08 + case=141 hadCalo forward otherMeson 1.09673e-07 case=142 hadCalo forward otherBaryon 0 - case=143 hadCalo backward all 3.00139e-05 + case=143 hadCalo backward all 3.36185e-05 case=144 hadCalo backward electron 0 case=145 hadCalo backward gamma 0 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 3.00139e-05 + case=147 hadCalo backward neutrino 3.36185e-05 case=148 hadCalo backward pion 0 case=149 hadCalo backward neutron 0 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 0.000160236 - case=155 hadCalo below 20 MeV forward electron 1.89176e-06 - case=156 hadCalo below 20 MeV forward gamma 7.71283e-05 + case=154 hadCalo below 20 MeV forward all 0.000145957 + case=155 hadCalo below 20 MeV forward electron 1.45789e-06 + case=156 hadCalo below 20 MeV forward gamma 6.28823e-05 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 6.96989e-06 + case=158 hadCalo below 20 MeV forward neutrino 7.71201e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 7.42458e-05 + case=160 hadCalo below 20 MeV forward neutron 7.39049e-05 case=161 hadCalo below 20 MeV forward proton 0 case=162 hadCalo below 20 MeV forward ion 0 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 2.92947e-06 + case=165 hadCalo below 20 MeV backward all 3.20799e-06 case=166 hadCalo below 20 MeV backward electron 0 case=167 hadCalo below 20 MeV backward gamma 0 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 2.92947e-06 + case=169 hadCalo below 20 MeV backward neutrino 3.20799e-06 case=170 hadCalo below 20 MeV backward pion 0 case=171 hadCalo below 20 MeV backward neutron 0 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 8.79947e-05 - case=177 hadCalo above 20 MeV forward electron 8.1409e-07 - case=178 hadCalo above 20 MeV forward gamma 2.38074e-06 - case=179 hadCalo above 20 MeV forward muon 5.48197e-08 - case=180 hadCalo above 20 MeV forward neutrino 7.41312e-05 - case=181 hadCalo above 20 MeV forward pion 6.52681e-07 - case=182 hadCalo above 20 MeV forward neutron 9.47067e-06 - case=183 hadCalo above 20 MeV forward proton 4.35716e-07 + case=176 hadCalo above 20 MeV forward all 9.24821e-05 + case=177 hadCalo above 20 MeV forward electron 1.34761e-06 + case=178 hadCalo above 20 MeV forward gamma 1.77493e-06 + case=179 hadCalo above 20 MeV forward muon 0 + case=180 hadCalo above 20 MeV forward neutrino 7.76717e-05 + case=181 hadCalo above 20 MeV forward pion 7.44688e-07 + case=182 hadCalo above 20 MeV forward neutron 1.00226e-05 + case=183 hadCalo above 20 MeV forward proton 8.10873e-07 case=184 hadCalo above 20 MeV forward ion 0 - case=185 hadCalo above 20 MeV forward otherMeson 5.47574e-08 + case=185 hadCalo above 20 MeV forward otherMeson 1.09673e-07 case=186 hadCalo above 20 MeV forward otherBaryon 0 - case=187 hadCalo above 20 MeV backward all 2.70844e-05 + case=187 hadCalo above 20 MeV backward all 3.04105e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 2.70844e-05 + case=191 hadCalo above 20 MeV backward neutrino 3.04105e-05 case=192 hadCalo above 20 MeV backward pion 0 case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 @@ -1059,105 +1061,105 @@ Run Summary case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 153.75 87.2543 13415.4 - case= 1 tracker electron 88.55 4.37225 387.163 - case= 2 tracker gamma 9.39 288.281 2706.96 - case= 3 tracker muon 0.03 4.11981 0.123594 - case= 4 tracker neutrino 0.1 36.3929 3.63929 - case= 5 tracker pion 2.41 3639.91 8772.17 - case= 6 tracker neutron 1.67 199.189 332.646 - case= 7 tracker proton 37.41 9.23682 345.549 - case= 8 tracker ion 14.02 2.20668 30.9377 - case= 9 tracker otherMeson 0.17 4918.6 836.162 - case= 10 tracker otherBaryon 0 0 0 - case= 11 tracker below 20 MeV all 146.91 0.561529 82.4942 - case= 12 tracker below 20 MeV electron 87.96 0.334673 29.4379 - case= 13 tracker below 20 MeV gamma 7.26 1.30096 9.44499 - case= 14 tracker below 20 MeV muon 0.03 4.11981 0.123594 - case= 15 tracker below 20 MeV neutrino 0.02 16.0286 0.320572 - case= 16 tracker below 20 MeV pion 0.03 9.65864 0.289759 - case= 17 tracker below 20 MeV neutron 0.99 6.27807 6.21529 - case= 18 tracker below 20 MeV proton 36.84 0.670324 24.6947 - case= 19 tracker below 20 MeV ion 13.78 0.868462 11.9674 + case= 0 tracker all 192.9 60.7384 11716.4 + case= 1 tracker electron 109.68 4.10385 450.111 + case= 2 tracker gamma 12.3 171.145 2105.09 + case= 3 tracker muon 0.05 4.11981 0.205991 + case= 4 tracker neutrino 0.15 34.6058 5.19088 + case= 5 tracker pion 2.15 2574.72 5535.65 + case= 6 tracker neutron 2.24 220.321 493.519 + case= 7 tracker proton 47.75 4.99544 238.532 + case= 8 tracker ion 18.19 1.27529 23.1976 + case= 9 tracker otherMeson 0.37 7668.69 2837.42 + case= 10 tracker otherBaryon 0.02 1376.9 27.5381 + case= 11 tracker below 20 MeV all 186.08 0.561793 104.538 + case= 12 tracker below 20 MeV electron 108.9 0.305895 33.3119 + case= 13 tracker below 20 MeV gamma 10.5 1.33142 13.98 + case= 14 tracker below 20 MeV muon 0.05 4.11981 0.205991 + case= 15 tracker below 20 MeV neutrino 0 0 0 + case= 16 tracker below 20 MeV pion 0 0 0 + case= 17 tracker below 20 MeV neutron 1.28 5.45944 6.98809 + case= 18 tracker below 20 MeV proton 47.3 0.692312 32.7464 + case= 19 tracker below 20 MeV ion 18.05 0.958787 17.3061 case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 6.84 1949.25 13332.9 - case= 23 tracker above 20 MeV electron 0.59 606.313 357.725 - case= 24 tracker above 20 MeV gamma 2.13 1266.44 2697.52 + case= 22 tracker above 20 MeV all 6.82 1702.63 11611.9 + case= 23 tracker above 20 MeV electron 0.78 534.357 416.799 + case= 24 tracker above 20 MeV gamma 1.8 1161.73 2091.11 case= 25 tracker above 20 MeV muon 0 0 0 - case= 26 tracker above 20 MeV neutrino 0.08 41.484 3.31872 - case= 27 tracker above 20 MeV pion 2.38 3685.66 8771.88 - case= 28 tracker above 20 MeV neutron 0.68 480.045 326.43 - case= 29 tracker above 20 MeV proton 0.57 562.903 320.855 - case= 30 tracker above 20 MeV ion 0.24 79.0427 18.9703 - case= 31 tracker above 20 MeV otherMeson 0.17 4918.6 836.162 - case= 32 tracker above 20 MeV otherBaryon 0 0 0 - case= 33 emCalo all 25197.6 5.45098 137352 - case= 34 emCalo electron 15424.1 2.98837 46092.7 - case= 35 emCalo gamma 8419.38 5.31856 44779 - case= 36 emCalo muon 1.8 16.2695 29.2852 - case= 37 emCalo neutrino 5.31 34.2083 181.646 - case= 38 emCalo pion 20.96 1360.37 28513.4 - case= 39 emCalo neutron 472.42 12.6633 5982.41 - case= 40 emCalo proton 38.42 111.704 4291.67 - case= 41 emCalo ion 813.09 0.670907 545.507 - case= 42 emCalo otherMeson 1.76 3596.51 6329.86 - case= 43 emCalo otherBaryon 0.42 1443.27 606.172 - case= 44 emCalo below 20 MeV all 24615.9 0.975124 24003.6 - case= 45 emCalo below 20 MeV electron 15175.1 0.801673 12165.4 - case= 46 emCalo below 20 MeV gamma 8180.78 1.28418 10505.6 - case= 47 emCalo below 20 MeV muon 1.71 4.104 7.01784 - case= 48 emCalo below 20 MeV neutrino 0.43 14.8903 6.40281 - case= 49 emCalo below 20 MeV pion 0.3 11.6039 3.48116 - case= 50 emCalo below 20 MeV neutron 433.67 2.05177 889.792 - case= 51 emCalo below 20 MeV proton 16.17 10.2377 165.544 - case= 52 emCalo below 20 MeV ion 807.72 0.321493 259.676 - case= 53 emCalo below 20 MeV otherMeson 0.07 5.85998 0.410199 - case= 54 emCalo below 20 MeV otherBaryon 0.01 19.325 0.19325 - case= 55 emCalo above 20 MeV all 581.69 194.86 113348 - case= 56 emCalo above 20 MeV electron 248.99 136.26 33927.3 - case= 57 emCalo above 20 MeV gamma 238.6 143.644 34273.4 - case= 58 emCalo above 20 MeV muon 0.09 247.415 22.2673 - case= 59 emCalo above 20 MeV neutrino 4.88 35.9105 175.243 - case= 60 emCalo above 20 MeV pion 20.66 1379.96 28510 - case= 61 emCalo above 20 MeV neutron 38.75 131.422 5092.62 - case= 62 emCalo above 20 MeV proton 22.25 185.444 4126.12 - case= 63 emCalo above 20 MeV ion 5.37 53.2274 285.831 - case= 64 emCalo above 20 MeV otherMeson 1.69 3745.24 6329.45 - case= 65 emCalo above 20 MeV otherBaryon 0.41 1478 605.979 - case= 66 hadCalo all 40278.6 3.02878 121995 - case= 67 hadCalo electron 29744.8 1.21407 36112.4 - case= 68 hadCalo gamma 8462.53 4.07228 34461.8 - case= 69 hadCalo muon 4.22 15.6327 65.9699 - case= 70 hadCalo neutrino 12.7 36.8382 467.845 - case= 71 hadCalo pion 32.59 801.64 26125.5 - case= 72 hadCalo neutron 762.96 15.1732 11576.5 - case= 73 hadCalo proton 165.4 51.1274 8456.47 - case= 74 hadCalo ion 1090.5 0.754892 823.21 - case= 75 hadCalo otherMeson 2.39 1372.73 3280.82 - case= 76 hadCalo otherBaryon 0.51 1224.9 624.7 - case= 77 hadCalo below 20 MeV all 39703.3 0.64902 25768.2 - case= 78 hadCalo below 20 MeV electron 29544.6 0.427848 12640.6 - case= 79 hadCalo below 20 MeV gamma 8288.15 1.21516 10071.4 - case= 80 hadCalo below 20 MeV muon 3.85 4.13341 15.9136 - case= 81 hadCalo below 20 MeV neutrino 1.15 14.5324 16.7123 - case= 82 hadCalo below 20 MeV pion 0.92 12.3184 11.3329 - case= 83 hadCalo below 20 MeV neutron 670.74 2.53881 1702.88 - case= 84 hadCalo below 20 MeV proton 111.14 7.98345 887.281 - case= 85 hadCalo below 20 MeV ion 1082.44 0.388428 420.45 - case= 86 hadCalo below 20 MeV otherMeson 0.23 4.23204 0.973369 - case= 87 hadCalo below 20 MeV otherBaryon 0.04 15.5964 0.623856 - case= 88 hadCalo above 20 MeV all 575.36 167.247 96227 - case= 89 hadCalo above 20 MeV electron 200.22 117.23 23471.8 - case= 90 hadCalo above 20 MeV gamma 174.38 139.869 24390.4 - case= 91 hadCalo above 20 MeV muon 0.37 135.287 50.0563 - case= 92 hadCalo above 20 MeV neutrino 11.55 39.0591 451.133 - case= 93 hadCalo above 20 MeV pion 31.67 824.57 26114.1 - case= 94 hadCalo above 20 MeV neutron 92.22 107.066 9873.63 - case= 95 hadCalo above 20 MeV proton 54.26 139.499 7569.19 - case= 96 hadCalo above 20 MeV ion 8.06 49.9702 402.76 - case= 97 hadCalo above 20 MeV otherMeson 2.16 1518.45 3279.85 - case= 98 hadCalo above 20 MeV otherBaryon 0.47 1327.82 624.077 + case= 26 tracker above 20 MeV neutrino 0.15 34.6058 5.19088 + case= 27 tracker above 20 MeV pion 2.15 2574.72 5535.65 + case= 28 tracker above 20 MeV neutron 0.96 506.804 486.531 + case= 29 tracker above 20 MeV proton 0.45 457.302 205.786 + case= 30 tracker above 20 MeV ion 0.14 42.0822 5.8915 + case= 31 tracker above 20 MeV otherMeson 0.37 7668.69 2837.42 + case= 32 tracker above 20 MeV otherBaryon 0.02 1376.9 27.5381 + case= 33 emCalo all 23306.8 5.55968 129579 + case= 34 emCalo electron 14077.7 2.8016 39440.2 + case= 35 emCalo gamma 7667.34 5.11342 39206.3 + case= 36 emCalo muon 2.11 12.9559 27.3369 + case= 37 emCalo neutrino 6.31 35.7442 225.546 + case= 38 emCalo pion 24.11 1307.97 31535.1 + case= 39 emCalo neutron 547.93 12.9756 7109.74 + case= 40 emCalo proton 43.91 98.6521 4331.82 + case= 41 emCalo ion 934.57 0.775323 724.594 + case= 42 emCalo otherMeson 2.24 3024.67 6775.27 + case= 43 emCalo otherBaryon 0.59 343.351 202.577 + case= 44 emCalo below 20 MeV all 22770 0.96299 21927.3 + case= 45 emCalo below 20 MeV electron 13861.4 0.780836 10823.5 + case= 46 emCalo below 20 MeV gamma 7457.17 1.27948 9541.34 + case= 47 emCalo below 20 MeV muon 2.03 4.20105 8.52813 + case= 48 emCalo below 20 MeV neutrino 0.53 14.7483 7.8166 + case= 49 emCalo below 20 MeV pion 0.43 11.2533 4.83891 + case= 50 emCalo below 20 MeV neutron 502.27 2.06565 1037.52 + case= 51 emCalo below 20 MeV proton 19.03 9.85483 187.537 + case= 52 emCalo below 20 MeV ion 926.96 0.338747 314.005 + case= 53 emCalo below 20 MeV otherMeson 0.11 11.0986 1.22085 + case= 54 emCalo below 20 MeV otherBaryon 0.07 14.2181 0.995269 + case= 55 emCalo above 20 MeV all 536.86 200.52 107651 + case= 56 emCalo above 20 MeV electron 216.35 132.27 28616.7 + case= 57 emCalo above 20 MeV gamma 210.17 141.148 29665 + case= 58 emCalo above 20 MeV muon 0.08 235.11 18.8088 + case= 59 emCalo above 20 MeV neutrino 5.78 37.6695 217.73 + case= 60 emCalo above 20 MeV pion 23.68 1331.52 31530.3 + case= 61 emCalo above 20 MeV neutron 45.66 132.988 6072.22 + case= 62 emCalo above 20 MeV proton 24.88 166.571 4144.28 + case= 63 emCalo above 20 MeV ion 7.61 53.9539 410.589 + case= 64 emCalo above 20 MeV otherMeson 2.13 3180.3 6774.05 + case= 65 emCalo above 20 MeV otherBaryon 0.52 387.657 201.582 + case= 66 hadCalo all 42030.4 2.80106 117730 + case= 67 hadCalo electron 30978.4 1.10688 34289.5 + case= 68 hadCalo gamma 8768.41 3.67041 32183.7 + case= 69 hadCalo muon 4.32 12.435 53.7193 + case= 70 hadCalo neutrino 13 35.9696 467.605 + case= 71 hadCalo pion 34.05 695.826 23692.9 + case= 72 hadCalo neutron 841.35 15.4859 13029.1 + case= 73 hadCalo proton 183.32 49.7967 9128.73 + case= 74 hadCalo ion 1204.68 0.757189 912.17 + case= 75 hadCalo otherMeson 2.24 1617.73 3623.71 + case= 76 hadCalo otherBaryon 0.61 571.39 348.548 + case= 77 hadCalo below 20 MeV all 41446.8 0.645548 26755.9 + case= 78 hadCalo below 20 MeV electron 30782.9 0.423441 13034.7 + case= 79 hadCalo below 20 MeV gamma 8600.27 1.20817 10390.6 + case= 80 hadCalo below 20 MeV muon 4.04 4.15092 16.7697 + case= 81 hadCalo below 20 MeV neutrino 1.2 14.948 17.9376 + case= 82 hadCalo below 20 MeV pion 0.89 11.8893 10.5815 + case= 83 hadCalo below 20 MeV neutron 736.81 2.51635 1854.07 + case= 84 hadCalo below 20 MeV proton 124.73 7.92801 988.86 + case= 85 hadCalo below 20 MeV ion 1195.75 0.368088 440.141 + case= 86 hadCalo below 20 MeV otherMeson 0.19 7.07616 1.34447 + case= 87 hadCalo below 20 MeV otherBaryon 0.06 14.5548 0.873288 + case= 88 hadCalo above 20 MeV all 583.6 155.884 90973.8 + case= 89 hadCalo above 20 MeV electron 195.56 108.687 21254.8 + case= 90 hadCalo above 20 MeV gamma 168.14 129.613 21793.1 + case= 91 hadCalo above 20 MeV muon 0.28 131.963 36.9496 + case= 92 hadCalo above 20 MeV neutrino 11.8 38.1074 449.667 + case= 93 hadCalo above 20 MeV pion 33.16 714.182 23682.3 + case= 94 hadCalo above 20 MeV neutron 104.54 106.897 11175 + case= 95 hadCalo above 20 MeV proton 58.59 138.929 8139.87 + case= 96 hadCalo above 20 MeV ion 8.93 52.8588 472.029 + case= 97 hadCalo above 20 MeV otherMeson 2.05 1767.01 3622.36 + case= 98 hadCalo above 20 MeV otherBaryon 0.55 632.136 347.675 ============================================================= @@ -1258,7 +1260,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=34.350000s Real=34.412384s Sys=0.020000s + User=39.610000s Real=39.693544s Sys=0.040000s =============== Run::PrintInfo() =============== RunID = 1 @@ -1274,305 +1276,305 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.315372 - case= 1 tracker forward electron 0.00146631 - case= 2 tracker forward gamma 0.0206118 - case= 3 tracker forward muon 2.4493e-06 - case= 4 tracker forward neutrino 0.000731192 - case= 5 tracker forward pion 0.000648802 - case= 6 tracker forward neutron 0.29174 - case= 7 tracker forward proton 0.000137948 - case= 8 tracker forward ion 3.43455e-06 - case= 9 tracker forward otherMeson 2.29879e-05 - case= 10 tracker forward otherBaryon 7.34313e-06 - case= 11 tracker backward all 0.202987 - case= 12 tracker backward electron 0.000183388 - case= 13 tracker backward gamma 0.00345074 + case= 0 tracker forward all 0.359807 + case= 1 tracker forward electron 0.000994625 + case= 2 tracker forward gamma 0.0155324 + case= 3 tracker forward muon 0 + case= 4 tracker forward neutrino 0.000659034 + case= 5 tracker forward pion 0.00049198 + case= 6 tracker forward neutron 0.342011 + case= 7 tracker forward proton 8.52135e-05 + case= 8 tracker forward ion 2.88372e-06 + case= 9 tracker forward otherMeson 2.80223e-05 + case= 10 tracker forward otherBaryon 1.38525e-06 + case= 11 tracker backward all 0.236399 + case= 12 tracker backward electron 0.00020581 + case= 13 tracker backward gamma 0.00323352 case= 14 tracker backward muon 0 - case= 15 tracker backward neutrino 0.000274167 + case= 15 tracker backward neutrino 0.000226165 case= 16 tracker backward pion 0 - case= 17 tracker backward neutron 0.199078 + case= 17 tracker backward neutron 0.232734 case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 case= 20 tracker backward otherMeson 0 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.311243 - case= 23 tracker below 20 MeV forward electron 0.0010097 - case= 24 tracker below 20 MeV forward gamma 0.0196697 + case= 22 tracker below 20 MeV forward all 0.356745 + case= 23 tracker below 20 MeV forward electron 0.000722161 + case= 24 tracker below 20 MeV forward gamma 0.0150253 case= 25 tracker below 20 MeV forward muon 0 - case= 26 tracker below 20 MeV forward neutrino 5.53902e-05 - case= 27 tracker below 20 MeV forward pion 1.80754e-05 - case= 28 tracker below 20 MeV forward neutron 0.290484 - case= 29 tracker below 20 MeV forward proton 3.34941e-06 + case= 26 tracker below 20 MeV forward neutrino 5.88628e-05 + case= 27 tracker below 20 MeV forward pion 4.73339e-06 + case= 28 tracker below 20 MeV forward neutron 0.340934 + case= 29 tracker below 20 MeV forward proton 0 case= 30 tracker below 20 MeV forward ion 0 - case= 31 tracker below 20 MeV forward otherMeson 3.20171e-06 + case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.202478 - case= 34 tracker below 20 MeV backward electron 0.000177986 - case= 35 tracker below 20 MeV backward gamma 0.00344035 + case= 33 tracker below 20 MeV backward all 0.235903 + case= 34 tracker below 20 MeV backward electron 0.000200618 + case= 35 tracker below 20 MeV backward gamma 0.00322855 case= 36 tracker below 20 MeV backward muon 0 - case= 37 tracker below 20 MeV backward neutrino 2.22641e-05 + case= 37 tracker below 20 MeV backward neutrino 9.16062e-06 case= 38 tracker below 20 MeV backward pion 0 - case= 39 tracker below 20 MeV backward neutron 0.198837 + case= 39 tracker below 20 MeV backward neutron 0.232465 case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00412865 - case= 45 tracker above 20 MeV forward electron 0.000456604 - case= 46 tracker above 20 MeV forward gamma 0.000942156 - case= 47 tracker above 20 MeV forward muon 2.4493e-06 - case= 48 tracker above 20 MeV forward neutrino 0.000675802 - case= 49 tracker above 20 MeV forward pion 0.000630727 - case= 50 tracker above 20 MeV forward neutron 0.00125574 - case= 51 tracker above 20 MeV forward proton 0.000134599 - case= 52 tracker above 20 MeV forward ion 3.43455e-06 - case= 53 tracker above 20 MeV forward otherMeson 1.97862e-05 - case= 54 tracker above 20 MeV forward otherBaryon 7.34313e-06 - case= 55 tracker above 20 MeV backward all 0.000509174 - case= 56 tracker above 20 MeV backward electron 5.40262e-06 - case= 57 tracker above 20 MeV backward gamma 1.03892e-05 + case= 44 tracker above 20 MeV forward all 0.00306151 + case= 45 tracker above 20 MeV forward electron 0.000272463 + case= 46 tracker above 20 MeV forward gamma 0.000507124 + case= 47 tracker above 20 MeV forward muon 0 + case= 48 tracker above 20 MeV forward neutrino 0.000600171 + case= 49 tracker above 20 MeV forward pion 0.000487246 + case= 50 tracker above 20 MeV forward neutron 0.001077 + case= 51 tracker above 20 MeV forward proton 8.52135e-05 + case= 52 tracker above 20 MeV forward ion 2.88372e-06 + case= 53 tracker above 20 MeV forward otherMeson 2.80223e-05 + case= 54 tracker above 20 MeV forward otherBaryon 1.38525e-06 + case= 55 tracker above 20 MeV backward all 0.000495872 + case= 56 tracker above 20 MeV backward electron 5.19161e-06 + case= 57 tracker above 20 MeV backward gamma 4.97848e-06 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000251903 + case= 59 tracker above 20 MeV backward neutrino 0.000217004 case= 60 tracker above 20 MeV backward pion 0 - case= 61 tracker above 20 MeV backward neutron 0.000241479 + case= 61 tracker above 20 MeV backward neutron 0.000268697 case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 case= 64 tracker above 20 MeV backward otherMeson 0 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.180501 - case= 67 emCalo forward electron 0.0012819 - case= 68 emCalo forward gamma 0.0205983 - case= 69 emCalo forward muon 2.54832e-06 - case= 70 emCalo forward neutrino 0.000495014 - case= 71 emCalo forward pion 0.000212056 - case= 72 emCalo forward neutron 0.157798 - case= 73 emCalo forward proton 8.68301e-05 - case= 74 emCalo forward ion 2.69507e-06 - case= 75 emCalo forward otherMeson 2.17207e-05 - case= 76 emCalo forward otherBaryon 1.89997e-06 - case= 77 emCalo backward all 0.0406694 - case= 78 emCalo backward electron 6.31798e-05 - case= 79 emCalo backward gamma 0.00132172 + case= 66 emCalo forward all 0.212805 + case= 67 emCalo forward electron 0.000918116 + case= 68 emCalo forward gamma 0.0178084 + case= 69 emCalo forward muon 3.35859e-06 + case= 70 emCalo forward neutrino 0.000584271 + case= 71 emCalo forward pion 0.000257333 + case= 72 emCalo forward neutron 0.1931 + case= 73 emCalo forward proton 0.000103696 + case= 74 emCalo forward ion 1.73417e-06 + case= 75 emCalo forward otherMeson 2.49969e-05 + case= 76 emCalo forward otherBaryon 3.06681e-06 + case= 77 emCalo backward all 0.0490907 + case= 78 emCalo backward electron 5.85511e-05 + case= 79 emCalo backward gamma 0.00152834 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 0.000110436 + case= 81 emCalo backward neutrino 0.000126565 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.039174 + case= 83 emCalo backward neutron 0.0473772 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.178104 - case= 89 emCalo below 20 MeV forward electron 0.00106982 - case= 90 emCalo below 20 MeV forward gamma 0.0201308 + case= 88 emCalo below 20 MeV forward all 0.21037 + case= 89 emCalo below 20 MeV forward electron 0.000810974 + case= 90 emCalo below 20 MeV forward gamma 0.01757 case= 91 emCalo below 20 MeV forward muon 0 - case= 92 emCalo below 20 MeV forward neutrino 4.72736e-05 - case= 93 emCalo below 20 MeV forward pion 4.43902e-06 - case= 94 emCalo below 20 MeV forward neutron 0.156849 - case= 95 emCalo below 20 MeV forward proton 3.14376e-06 + case= 92 emCalo below 20 MeV forward neutrino 4.00091e-05 + case= 93 emCalo below 20 MeV forward pion 1.90947e-06 + case= 94 emCalo below 20 MeV forward neutron 0.191944 + case= 95 emCalo below 20 MeV forward proton 1.94488e-06 case= 96 emCalo below 20 MeV forward ion 0 - case= 97 emCalo below 20 MeV forward otherMeson 0 + case= 97 emCalo below 20 MeV forward otherMeson 6.01667e-07 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.0405549 - case=100 emCalo below 20 MeV backward electron 6.31798e-05 - case=101 emCalo below 20 MeV backward gamma 0.00132172 + case= 99 emCalo below 20 MeV backward all 0.0489617 + case=100 emCalo below 20 MeV backward electron 5.85511e-05 + case=101 emCalo below 20 MeV backward gamma 0.00152834 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 9.14562e-06 + case=103 emCalo below 20 MeV backward neutrino 7.12468e-06 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.0391609 + case=105 emCalo below 20 MeV backward neutron 0.0473677 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00239659 - case=111 emCalo above 20 MeV forward electron 0.000212074 - case=112 emCalo above 20 MeV forward gamma 0.000467495 - case=113 emCalo above 20 MeV forward muon 2.54832e-06 - case=114 emCalo above 20 MeV forward neutrino 0.000447741 - case=115 emCalo above 20 MeV forward pion 0.000207617 - case=116 emCalo above 20 MeV forward neutron 0.000949112 - case=117 emCalo above 20 MeV forward proton 8.36863e-05 - case=118 emCalo above 20 MeV forward ion 2.69507e-06 - case=119 emCalo above 20 MeV forward otherMeson 2.17207e-05 - case=120 emCalo above 20 MeV forward otherBaryon 1.89997e-06 - case=121 emCalo above 20 MeV backward all 0.000114413 + case=110 emCalo above 20 MeV forward all 0.00243498 + case=111 emCalo above 20 MeV forward electron 0.000107142 + case=112 emCalo above 20 MeV forward gamma 0.000238373 + case=113 emCalo above 20 MeV forward muon 3.35859e-06 + case=114 emCalo above 20 MeV forward neutrino 0.000544262 + case=115 emCalo above 20 MeV forward pion 0.000255424 + case=116 emCalo above 20 MeV forward neutron 0.00115547 + case=117 emCalo above 20 MeV forward proton 0.000101751 + case=118 emCalo above 20 MeV forward ion 1.73417e-06 + case=119 emCalo above 20 MeV forward otherMeson 2.43952e-05 + case=120 emCalo above 20 MeV forward otherBaryon 3.06681e-06 + case=121 emCalo above 20 MeV backward all 0.000128966 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 0.00010129 + case=125 emCalo above 20 MeV backward neutrino 0.000119441 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 1.31235e-05 + case=127 emCalo above 20 MeV backward neutron 9.52549e-06 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 0.000502994 - case=133 hadCalo forward electron 8.35146e-06 - case=134 hadCalo forward gamma 0.000137954 - case=135 hadCalo forward muon 1.17036e-07 - case=136 hadCalo forward neutrino 7.92897e-05 - case=137 hadCalo forward pion 1.96681e-06 - case=138 hadCalo forward neutron 0.000273994 - case=139 hadCalo forward proton 1.04071e-06 - case=140 hadCalo forward ion 0 - case=141 hadCalo forward otherMeson 2.80121e-07 + case=132 hadCalo forward all 0.000362826 + case=133 hadCalo forward electron 6.96793e-07 + case=134 hadCalo forward gamma 4.16717e-05 + case=135 hadCalo forward muon 5.87881e-08 + case=136 hadCalo forward neutrino 7.97199e-05 + case=137 hadCalo forward pion 6.86557e-07 + case=138 hadCalo forward neutron 0.000239211 + case=139 hadCalo forward proton 6.02337e-07 + case=140 hadCalo forward ion 6.80064e-08 + case=141 hadCalo forward otherMeson 1.11027e-07 case=142 hadCalo forward otherBaryon 0 - case=143 hadCalo backward all 4.03817e-05 - case=144 hadCalo backward electron 0 - case=145 hadCalo backward gamma 4.17934e-07 + case=143 hadCalo backward all 4.315e-05 + case=144 hadCalo backward electron 6.29748e-08 + case=145 hadCalo backward gamma 1.2436e-06 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 2.92446e-05 + case=147 hadCalo backward neutrino 3.07521e-05 case=148 hadCalo backward pion 0 - case=149 hadCalo backward neutron 1.07192e-05 + case=149 hadCalo backward neutron 1.10913e-05 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 0.000404642 - case=155 hadCalo below 20 MeV forward electron 6.13239e-06 - case=156 hadCalo below 20 MeV forward gamma 0.000131457 + case=154 hadCalo below 20 MeV forward all 0.00027807 + case=155 hadCalo below 20 MeV forward electron 3.63786e-07 + case=156 hadCalo below 20 MeV forward gamma 4.10399e-05 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 6.61821e-06 + case=158 hadCalo below 20 MeV forward neutrino 6.29377e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 0.000260435 + case=160 hadCalo below 20 MeV forward neutron 0.000230304 case=161 hadCalo below 20 MeV forward proton 0 - case=162 hadCalo below 20 MeV forward ion 0 + case=162 hadCalo below 20 MeV forward ion 6.80064e-08 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 1.34026e-05 - case=166 hadCalo below 20 MeV backward electron 0 - case=167 hadCalo below 20 MeV backward gamma 4.17934e-07 + case=165 hadCalo below 20 MeV backward all 1.45868e-05 + case=166 hadCalo below 20 MeV backward electron 6.29748e-08 + case=167 hadCalo below 20 MeV backward gamma 1.2436e-06 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 2.35308e-06 + case=169 hadCalo below 20 MeV backward neutrino 2.18899e-06 case=170 hadCalo below 20 MeV backward pion 0 - case=171 hadCalo below 20 MeV backward neutron 1.06316e-05 + case=171 hadCalo below 20 MeV backward neutron 1.10913e-05 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 9.83523e-05 - case=177 hadCalo above 20 MeV forward electron 2.21907e-06 - case=178 hadCalo above 20 MeV forward gamma 6.49731e-06 - case=179 hadCalo above 20 MeV forward muon 1.17036e-07 - case=180 hadCalo above 20 MeV forward neutrino 7.26715e-05 - case=181 hadCalo above 20 MeV forward pion 1.96681e-06 - case=182 hadCalo above 20 MeV forward neutron 1.35598e-05 - case=183 hadCalo above 20 MeV forward proton 1.04071e-06 + case=176 hadCalo above 20 MeV forward all 8.47562e-05 + case=177 hadCalo above 20 MeV forward electron 3.33007e-07 + case=178 hadCalo above 20 MeV forward gamma 6.31786e-07 + case=179 hadCalo above 20 MeV forward muon 5.87881e-08 + case=180 hadCalo above 20 MeV forward neutrino 7.34261e-05 + case=181 hadCalo above 20 MeV forward pion 6.86557e-07 + case=182 hadCalo above 20 MeV forward neutron 8.90653e-06 + case=183 hadCalo above 20 MeV forward proton 6.02337e-07 case=184 hadCalo above 20 MeV forward ion 0 - case=185 hadCalo above 20 MeV forward otherMeson 2.80121e-07 + case=185 hadCalo above 20 MeV forward otherMeson 1.11027e-07 case=186 hadCalo above 20 MeV forward otherBaryon 0 - case=187 hadCalo above 20 MeV backward all 2.69791e-05 + case=187 hadCalo above 20 MeV backward all 2.85631e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 2.68915e-05 + case=191 hadCalo above 20 MeV backward neutrino 2.85631e-05 case=192 hadCalo above 20 MeV backward pion 0 - case=193 hadCalo above 20 MeV backward neutron 8.75486e-08 + case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 case=195 hadCalo above 20 MeV backward ion 0 case=196 hadCalo above 20 MeV backward otherMeson 0 case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 267.23 52.3485 13989.1 - case= 1 tracker electron 156.52 9.23229 1445.04 - case= 2 tracker gamma 48.99 72.7623 3564.62 - case= 3 tracker muon 0.07 25.3151 1.77206 - case= 4 tracker neutrino 0.19 44.25 8.40751 - case= 5 tracker pion 2.85 2351.89 6702.88 - case= 6 tracker neutron 10.31 43.2101 445.496 - case= 7 tracker proton 1.17 152.588 178.528 - case= 8 tracker ion 46.78 0.34626 16.198 - case= 9 tracker otherMeson 0.27 4541.49 1226.2 - case= 10 tracker otherBaryon 0.08 4999.47 399.957 - case= 11 tracker below 20 MeV all 254.57 0.62907 160.142 - case= 12 tracker below 20 MeV electron 153.84 0.379188 58.3343 - case= 13 tracker below 20 MeV gamma 43.98 1.40555 61.8162 + case= 0 tracker all 238.56 41.2575 9842.38 + case= 1 tracker electron 130.2 6.61161 860.832 + case= 2 tracker gamma 40.01 48.5247 1941.47 + case= 3 tracker muon 0.06 4.11981 0.247189 + case= 4 tracker neutrino 0.18 31.4691 5.66443 + case= 5 tracker pion 1.85 2899.92 5364.84 + case= 6 tracker neutron 10.99 34.743 381.826 + case= 7 tracker proton 1.11 123.517 137.104 + case= 8 tracker ion 53.88 0.359108 19.3487 + case= 9 tracker otherMeson 0.26 4242.47 1103.04 + case= 10 tracker otherBaryon 0.02 1400.22 28.0045 + case= 11 tracker below 20 MeV all 230.38 0.590825 136.114 + case= 12 tracker below 20 MeV electron 128.72 0.377655 48.6117 + case= 13 tracker below 20 MeV gamma 37.32 1.25351 46.7811 case= 14 tracker below 20 MeV muon 0.06 4.11981 0.247189 - case= 15 tracker below 20 MeV neutrino 0 0 0 - case= 16 tracker below 20 MeV pion 0.06 13.2933 0.797599 - case= 17 tracker below 20 MeV neutron 9.39 2.41357 22.6634 - case= 18 tracker below 20 MeV proton 0.55 8.88095 4.88452 - case= 19 tracker below 20 MeV ion 46.67 0.237573 11.0875 - case= 20 tracker below 20 MeV otherMeson 0.02 15.5805 0.311609 + case= 15 tracker below 20 MeV neutrino 0.03 17.4332 0.522995 + case= 16 tracker below 20 MeV pion 0 0 0 + case= 17 tracker below 20 MeV neutron 9.89 2.471 24.4382 + case= 18 tracker below 20 MeV proton 0.59 7.20119 4.2487 + case= 19 tracker below 20 MeV ion 53.77 0.209492 11.2644 + case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 12.66 1092.33 13829 - case= 23 tracker above 20 MeV electron 2.68 517.427 1386.7 - case= 24 tracker above 20 MeV gamma 5.01 699.163 3502.81 - case= 25 tracker above 20 MeV muon 0.01 152.487 1.52487 - case= 26 tracker above 20 MeV neutrino 0.19 44.25 8.40751 - case= 27 tracker above 20 MeV pion 2.79 2402.18 6702.08 - case= 28 tracker above 20 MeV neutron 0.92 459.601 422.832 - case= 29 tracker above 20 MeV proton 0.62 280.071 173.644 - case= 30 tracker above 20 MeV ion 0.11 46.4592 5.11051 - case= 31 tracker above 20 MeV otherMeson 0.25 4903.56 1225.89 - case= 32 tracker above 20 MeV otherBaryon 0.08 4999.47 399.957 - case= 33 emCalo all 27146.8 5.52942 150106 - case= 34 emCalo electron 16439.5 3.02823 49782.5 - case= 35 emCalo gamma 9580.38 5.139 49233.6 - case= 36 emCalo muon 2.12 13.8629 29.3894 - case= 37 emCalo neutrino 6.35 35.4557 225.143 - case= 38 emCalo pion 24.15 1246.01 30091.2 - case= 39 emCalo neutron 693.6 11.404 7909.8 - case= 40 emCalo proton 46.22 95.6372 4420.35 - case= 41 emCalo ion 351.79 1.66575 585.993 - case= 42 emCalo otherMeson 2.24 3215.11 7201.85 - case= 43 emCalo otherBaryon 0.5 1252.83 626.416 - case= 44 emCalo below 20 MeV all 26477.7 1.03249 27337.9 - case= 45 emCalo below 20 MeV electron 16163.6 0.846354 13680.1 - case= 46 emCalo below 20 MeV gamma 9313.13 1.27786 11900.9 - case= 47 emCalo below 20 MeV muon 2.02 4.16307 8.4094 - case= 48 emCalo below 20 MeV neutrino 0.55 14.7004 8.08521 - case= 49 emCalo below 20 MeV pion 0.49 13.8324 6.7779 - case= 50 emCalo below 20 MeV neutron 638.85 2.18849 1398.12 - case= 51 emCalo below 20 MeV proton 15.7 12.6369 198.399 - case= 52 emCalo below 20 MeV ion 343.23 0.395978 135.912 - case= 53 emCalo below 20 MeV otherMeson 0.1 7.92486 0.792486 - case= 54 emCalo below 20 MeV otherBaryon 0.03 12.8547 0.385642 - case= 55 emCalo above 20 MeV all 669.13 183.475 122768 - case= 56 emCalo above 20 MeV electron 275.88 130.863 36102.4 - case= 57 emCalo above 20 MeV gamma 267.25 139.692 37332.7 - case= 58 emCalo above 20 MeV muon 0.1 209.8 20.98 - case= 59 emCalo above 20 MeV neutrino 5.8 37.4238 217.058 - case= 60 emCalo above 20 MeV pion 23.66 1271.53 30084.5 - case= 61 emCalo above 20 MeV neutron 54.75 118.935 6511.69 - case= 62 emCalo above 20 MeV proton 30.52 138.334 4221.95 - case= 63 emCalo above 20 MeV ion 8.56 52.5797 450.082 - case= 64 emCalo above 20 MeV otherMeson 2.14 3364.98 7201.06 - case= 65 emCalo above 20 MeV otherBaryon 0.47 1331.98 626.03 - case= 66 hadCalo all 37949.9 2.74545 104189 - case= 67 hadCalo electron 28309.6 1.08796 30799.7 - case= 68 hadCalo gamma 7439.75 3.90159 29026.9 - case= 69 hadCalo muon 3.63 17.9106 65.0156 - case= 70 hadCalo neutrino 10.88 37.1063 403.716 - case= 71 hadCalo pion 27.4 813.811 22298.4 - case= 72 hadCalo neutron 744.99 13.2696 9885.71 - case= 73 hadCalo proton 126.42 51.6711 6532.26 - case= 74 hadCalo ion 1284.16 0.566502 727.479 - case= 75 hadCalo otherMeson 2.24 1892.63 4239.49 - case= 76 hadCalo otherBaryon 0.76 277.295 210.744 - case= 77 hadCalo below 20 MeV all 37476.5 0.62523 23431.4 - case= 78 hadCalo below 20 MeV electron 28143.1 0.410346 11548.4 - case= 79 hadCalo below 20 MeV gamma 7298.02 1.28183 9354.85 - case= 80 hadCalo below 20 MeV muon 3.35 4.13557 13.8542 - case= 81 hadCalo below 20 MeV neutrino 0.89 14.6368 13.0268 - case= 82 hadCalo below 20 MeV pion 0.6 12.4331 7.45984 - case= 83 hadCalo below 20 MeV neutron 667.57 2.15677 1439.8 - case= 84 hadCalo below 20 MeV proton 84.51 7.76967 656.615 - case= 85 hadCalo below 20 MeV ion 1278.24 0.309472 395.579 - case= 86 hadCalo below 20 MeV otherMeson 0.1 6.08781 0.608781 - case= 87 hadCalo below 20 MeV otherBaryon 0.09 13.6904 1.23213 - case= 88 hadCalo above 20 MeV all 473.35 170.609 80758 - case= 89 hadCalo above 20 MeV electron 166.49 115.63 19251.3 - case= 90 hadCalo above 20 MeV gamma 141.73 138.799 19672 - case= 91 hadCalo above 20 MeV muon 0.28 182.72 51.1615 - case= 92 hadCalo above 20 MeV neutrino 9.99 39.1081 390.689 - case= 93 hadCalo above 20 MeV pion 26.8 831.752 22291 - case= 94 hadCalo above 20 MeV neutron 77.42 109.092 8445.91 - case= 95 hadCalo above 20 MeV proton 41.91 140.197 5875.65 - case= 96 hadCalo above 20 MeV ion 5.92 56.0642 331.9 - case= 97 hadCalo above 20 MeV otherMeson 2.14 1980.79 4238.88 - case= 98 hadCalo above 20 MeV otherBaryon 0.67 312.705 209.512 + case= 22 tracker above 20 MeV all 8.18 1186.59 9706.27 + case= 23 tracker above 20 MeV electron 1.48 548.797 812.22 + case= 24 tracker above 20 MeV gamma 2.69 704.347 1894.69 + case= 25 tracker above 20 MeV muon 0 0 0 + case= 26 tracker above 20 MeV neutrino 0.15 34.2763 5.14144 + case= 27 tracker above 20 MeV pion 1.85 2899.92 5364.84 + case= 28 tracker above 20 MeV neutron 1.1 324.898 357.387 + case= 29 tracker above 20 MeV proton 0.52 255.49 132.855 + case= 30 tracker above 20 MeV ion 0.11 73.494 8.08434 + case= 31 tracker above 20 MeV otherMeson 0.26 4242.47 1103.04 + case= 32 tracker above 20 MeV otherBaryon 0.02 1400.22 28.0045 + case= 33 emCalo all 29371.8 5.46977 160657 + case= 34 emCalo electron 17735.4 2.80248 49703.1 + case= 35 emCalo gamma 10244.8 4.84935 49680.7 + case= 36 emCalo muon 2.45 20.747 50.8301 + case= 37 emCalo neutrino 7.21 37.2638 268.672 + case= 38 emCalo pion 30.76 1163.68 35794.8 + case= 39 emCalo neutron 855.62 10.8855 9313.86 + case= 40 emCalo proton 55.06 109.869 6049.37 + case= 41 emCalo ion 437.26 1.99667 873.065 + case= 42 emCalo otherMeson 2.73 3160.25 8627.5 + case= 43 emCalo otherBaryon 0.53 556.96 295.189 + case= 44 emCalo below 20 MeV all 28655.4 1.02462 29360.9 + case= 45 emCalo below 20 MeV electron 17448.8 0.835523 14578.8 + case= 46 emCalo below 20 MeV gamma 9971.56 1.26328 12596.9 + case= 47 emCalo below 20 MeV muon 2.22 4.26994 9.47927 + case= 48 emCalo below 20 MeV neutrino 0.5 15.6877 7.84387 + case= 49 emCalo below 20 MeV pion 0.65 12.8268 8.33742 + case= 50 emCalo below 20 MeV neutron 788.91 2.2006 1736.07 + case= 51 emCalo below 20 MeV proton 18.46 12.6484 233.49 + case= 52 emCalo below 20 MeV ion 424.24 0.445229 188.884 + case= 53 emCalo below 20 MeV otherMeson 0.09 7.86827 0.708144 + case= 54 emCalo below 20 MeV otherBaryon 0.04 8.99458 0.359783 + case= 55 emCalo above 20 MeV all 716.36 183.282 131296 + case= 56 emCalo above 20 MeV electron 286.61 122.551 35124.3 + case= 57 emCalo above 20 MeV gamma 273.24 135.719 37083.8 + case= 58 emCalo above 20 MeV muon 0.23 179.786 41.3509 + case= 59 emCalo above 20 MeV neutrino 6.71 38.8716 260.828 + case= 60 emCalo above 20 MeV pion 30.11 1188.52 35786.4 + case= 61 emCalo above 20 MeV neutron 66.71 113.593 7577.78 + case= 62 emCalo above 20 MeV proton 36.6 158.904 5815.88 + case= 63 emCalo above 20 MeV ion 13.02 52.5485 684.181 + case= 64 emCalo above 20 MeV otherMeson 2.64 3267.72 8626.79 + case= 65 emCalo above 20 MeV otherBaryon 0.49 601.692 294.829 + case= 66 hadCalo all 35980.8 2.39772 86271.8 + case= 67 hadCalo electron 26676.2 0.94417 25186.9 + case= 68 hadCalo gamma 6958.47 3.46356 24101.1 + case= 69 hadCalo muon 3.54 15.9119 56.3281 + case= 70 hadCalo neutrino 10.68 37.0601 395.802 + case= 71 hadCalo pion 24.75 689.334 17061 + case= 72 hadCalo neutron 783.9 12.8276 10055.6 + case= 73 hadCalo proton 127.11 52.2813 6645.47 + case= 74 hadCalo ion 1394.19 0.467219 651.392 + case= 75 hadCalo otherMeson 1.43 1318.95 1886.1 + case= 76 hadCalo otherBaryon 0.5 464.162 232.081 + case= 77 hadCalo below 20 MeV all 35575.9 0.620443 22072.8 + case= 78 hadCalo below 20 MeV electron 26544.1 0.397619 10554.4 + case= 79 hadCalo below 20 MeV gamma 6845.42 1.30844 8956.83 + case= 80 hadCalo below 20 MeV muon 3.29 4.16125 13.6905 + case= 81 hadCalo below 20 MeV neutrino 0.86 14.6013 12.5571 + case= 82 hadCalo below 20 MeV pion 0.72 11.2258 8.08261 + case= 83 hadCalo below 20 MeV neutron 706 2.0915 1476.6 + case= 84 hadCalo below 20 MeV proton 86.28 7.79017 672.136 + case= 85 hadCalo below 20 MeV ion 1388.92 0.270851 376.19 + case= 86 hadCalo below 20 MeV otherMeson 0.21 6.84593 1.43764 + case= 87 hadCalo below 20 MeV otherBaryon 0.08 10.683 0.854642 + case= 88 hadCalo above 20 MeV all 404.89 158.559 64198.9 + case= 89 hadCalo above 20 MeV electron 132.1 110.768 14632.5 + case= 90 hadCalo above 20 MeV gamma 113.05 133.961 15144.2 + case= 91 hadCalo above 20 MeV muon 0.25 170.55 42.6376 + case= 92 hadCalo above 20 MeV neutrino 9.82 39.027 383.245 + case= 93 hadCalo above 20 MeV pion 24.03 709.652 17052.9 + case= 94 hadCalo above 20 MeV neutron 77.9 110.128 8578.99 + case= 95 hadCalo above 20 MeV proton 40.83 146.298 5973.33 + case= 96 hadCalo above 20 MeV ion 5.27 52.2205 275.202 + case= 97 hadCalo above 20 MeV otherMeson 1.22 1544.81 1884.66 + case= 98 hadCalo above 20 MeV otherBaryon 0.42 550.539 231.226 ============================================================= @@ -1681,7 +1683,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=51.110000s Real=51.163113s Sys=0.010000s + User=52.460000s Real=52.776172s Sys=0.040000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1697,198 +1699,198 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.234253 - case= 1 tracker forward electron 0.00285513 - case= 2 tracker forward gamma 0.0452887 - case= 3 tracker forward muon 7.50021e-06 - case= 4 tracker forward neutrino 0.00114584 - case= 5 tracker forward pion 0.000936844 - case= 6 tracker forward neutron 0.18382 - case= 7 tracker forward proton 0.000161706 - case= 8 tracker forward ion 4.75064e-06 - case= 9 tracker forward otherMeson 2.96153e-05 - case= 10 tracker forward otherBaryon 2.60505e-06 - case= 11 tracker backward all 0.075 - case= 12 tracker backward electron 0.000352827 - case= 13 tracker backward gamma 0.00728195 + case= 0 tracker forward all 0.24624 + case= 1 tracker forward electron 0.00281628 + case= 2 tracker forward gamma 0.0441632 + case= 3 tracker forward muon 0 + case= 4 tracker forward neutrino 0.0013919 + case= 5 tracker forward pion 0.000683043 + case= 6 tracker forward neutron 0.197022 + case= 7 tracker forward proton 0.000124751 + case= 8 tracker forward ion 2.11804e-05 + case= 9 tracker forward otherMeson 1.23062e-05 + case= 10 tracker forward otherBaryon 4.9314e-06 + case= 11 tracker backward all 0.081552 + case= 12 tracker backward electron 0.000265159 + case= 13 tracker backward gamma 0.00790616 case= 14 tracker backward muon 0 - case= 15 tracker backward neutrino 0.000359839 - case= 16 tracker backward pion 2.96588e-05 - case= 17 tracker backward neutron 0.066973 - case= 18 tracker backward proton 2.68548e-06 + case= 15 tracker backward neutrino 0.00043936 + case= 16 tracker backward pion 0 + case= 17 tracker backward neutron 0.0729413 + case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 case= 20 tracker backward otherMeson 0 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.227569 - case= 23 tracker below 20 MeV forward electron 0.00195229 - case= 24 tracker below 20 MeV forward gamma 0.0437283 - case= 25 tracker below 20 MeV forward muon 1.93323e-06 - case= 26 tracker below 20 MeV forward neutrino 7.2538e-05 - case= 27 tracker below 20 MeV forward pion 1.05908e-06 - case= 28 tracker below 20 MeV forward neutron 0.181804 - case= 29 tracker below 20 MeV forward proton 9.67369e-06 - case= 30 tracker below 20 MeV forward ion 0 + case= 22 tracker below 20 MeV forward all 0.240193 + case= 23 tracker below 20 MeV forward electron 0.00212976 + case= 24 tracker below 20 MeV forward gamma 0.0428963 + case= 25 tracker below 20 MeV forward muon 0 + case= 26 tracker below 20 MeV forward neutrino 0.000143606 + case= 27 tracker below 20 MeV forward pion 2.98743e-06 + case= 28 tracker below 20 MeV forward neutron 0.195017 + case= 29 tracker below 20 MeV forward proton 0 + case= 30 tracker below 20 MeV forward ion 3.14442e-06 case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.074383 - case= 34 tracker below 20 MeV backward electron 0.000352827 - case= 35 tracker below 20 MeV backward gamma 0.00727422 + case= 33 tracker below 20 MeV backward all 0.080985 + case= 34 tracker below 20 MeV backward electron 0.00026263 + case= 35 tracker below 20 MeV backward gamma 0.00790054 case= 36 tracker below 20 MeV backward muon 0 - case= 37 tracker below 20 MeV backward neutrino 1.5294e-05 + case= 37 tracker below 20 MeV backward neutrino 4.83475e-05 case= 38 tracker below 20 MeV backward pion 0 - case= 39 tracker below 20 MeV backward neutron 0.0667407 + case= 39 tracker below 20 MeV backward neutron 0.0727735 case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00668356 - case= 45 tracker above 20 MeV forward electron 0.000902839 - case= 46 tracker above 20 MeV forward gamma 0.00156045 - case= 47 tracker above 20 MeV forward muon 5.56698e-06 - case= 48 tracker above 20 MeV forward neutrino 0.0010733 - case= 49 tracker above 20 MeV forward pion 0.000935785 - case= 50 tracker above 20 MeV forward neutron 0.00201662 - case= 51 tracker above 20 MeV forward proton 0.000152032 - case= 52 tracker above 20 MeV forward ion 4.75064e-06 - case= 53 tracker above 20 MeV forward otherMeson 2.96153e-05 - case= 54 tracker above 20 MeV forward otherBaryon 2.60505e-06 - case= 55 tracker above 20 MeV backward all 0.000616989 - case= 56 tracker above 20 MeV backward electron 0 - case= 57 tracker above 20 MeV backward gamma 7.72741e-06 + case= 44 tracker above 20 MeV forward all 0.00604663 + case= 45 tracker above 20 MeV forward electron 0.000686523 + case= 46 tracker above 20 MeV forward gamma 0.00126693 + case= 47 tracker above 20 MeV forward muon 0 + case= 48 tracker above 20 MeV forward neutrino 0.0012483 + case= 49 tracker above 20 MeV forward pion 0.000680056 + case= 50 tracker above 20 MeV forward neutron 0.00200481 + case= 51 tracker above 20 MeV forward proton 0.000124751 + case= 52 tracker above 20 MeV forward ion 1.8036e-05 + case= 53 tracker above 20 MeV forward otherMeson 1.23062e-05 + case= 54 tracker above 20 MeV forward otherBaryon 4.9314e-06 + case= 55 tracker above 20 MeV backward all 0.000566929 + case= 56 tracker above 20 MeV backward electron 2.52916e-06 + case= 57 tracker above 20 MeV backward gamma 5.61118e-06 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000344545 - case= 60 tracker above 20 MeV backward pion 2.96588e-05 - case= 61 tracker above 20 MeV backward neutron 0.000232372 - case= 62 tracker above 20 MeV backward proton 2.68548e-06 + case= 59 tracker above 20 MeV backward neutrino 0.000391012 + case= 60 tracker above 20 MeV backward pion 0 + case= 61 tracker above 20 MeV backward neutron 0.000167777 + case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 case= 64 tracker above 20 MeV backward otherMeson 0 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.0706965 - case= 67 emCalo forward electron 0.000450683 - case= 68 emCalo forward gamma 0.00894573 - case= 69 emCalo forward muon 0 - case= 70 emCalo forward neutrino 0.000673878 - case= 71 emCalo forward pion 0.000127109 - case= 72 emCalo forward neutron 0.0604375 - case= 73 emCalo forward proton 4.97351e-05 - case= 74 emCalo forward ion 2.07877e-06 - case= 75 emCalo forward otherMeson 8.74192e-06 - case= 76 emCalo forward otherBaryon 9.96352e-07 - case= 77 emCalo backward all 0.00233722 - case= 78 emCalo backward electron 2.51124e-05 - case= 79 emCalo backward gamma 0.000223252 + case= 66 emCalo forward all 0.0710977 + case= 67 emCalo forward electron 0.000533081 + case= 68 emCalo forward gamma 0.00940696 + case= 69 emCalo forward muon 1.37046e-06 + case= 70 emCalo forward neutrino 0.000755817 + case= 71 emCalo forward pion 0.000130594 + case= 72 emCalo forward neutron 0.0601943 + case= 73 emCalo forward proton 6.50868e-05 + case= 74 emCalo forward ion 1.80999e-06 + case= 75 emCalo forward otherMeson 6.11955e-06 + case= 76 emCalo forward otherBaryon 2.56025e-06 + case= 77 emCalo backward all 0.00244207 + case= 78 emCalo backward electron 1.11085e-05 + case= 79 emCalo backward gamma 0.000209778 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 0.000154883 + case= 81 emCalo backward neutrino 0.000156959 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.00193398 + case= 83 emCalo backward neutron 0.00206422 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.0690261 - case= 89 emCalo below 20 MeV forward electron 0.000424228 - case= 90 emCalo below 20 MeV forward gamma 0.00888039 + case= 88 emCalo below 20 MeV forward all 0.069252 + case= 89 emCalo below 20 MeV forward electron 0.000491301 + case= 90 emCalo below 20 MeV forward gamma 0.00933835 case= 91 emCalo below 20 MeV forward muon 0 - case= 92 emCalo below 20 MeV forward neutrino 5.40529e-05 - case= 93 emCalo below 20 MeV forward pion 4.67185e-07 - case= 94 emCalo below 20 MeV forward neutron 0.0596632 - case= 95 emCalo below 20 MeV forward proton 3.16912e-06 - case= 96 emCalo below 20 MeV forward ion 0 - case= 97 emCalo below 20 MeV forward otherMeson 6.63411e-07 + case= 92 emCalo below 20 MeV forward neutrino 7.40696e-05 + case= 93 emCalo below 20 MeV forward pion 8.85216e-07 + case= 94 emCalo below 20 MeV forward neutron 0.0593417 + case= 95 emCalo below 20 MeV forward proton 4.08076e-06 + case= 96 emCalo below 20 MeV forward ion 1.3637e-06 + case= 97 emCalo below 20 MeV forward otherMeson 2.94616e-07 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.00218588 - case=100 emCalo below 20 MeV backward electron 2.51124e-05 - case=101 emCalo below 20 MeV backward gamma 0.000223252 + case= 99 emCalo below 20 MeV backward all 0.00229658 + case=100 emCalo below 20 MeV backward electron 1.11085e-05 + case=101 emCalo below 20 MeV backward gamma 0.000209778 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 6.87176e-06 + case=103 emCalo below 20 MeV backward neutrino 1.24129e-05 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.00193064 + case=105 emCalo below 20 MeV backward neutron 0.00206328 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00167036 - case=111 emCalo above 20 MeV forward electron 2.64549e-05 - case=112 emCalo above 20 MeV forward gamma 6.53342e-05 - case=113 emCalo above 20 MeV forward muon 0 - case=114 emCalo above 20 MeV forward neutrino 0.000619825 - case=115 emCalo above 20 MeV forward pion 0.000126642 - case=116 emCalo above 20 MeV forward neutron 0.000774386 - case=117 emCalo above 20 MeV forward proton 4.65659e-05 - case=118 emCalo above 20 MeV forward ion 2.07877e-06 - case=119 emCalo above 20 MeV forward otherMeson 8.07851e-06 - case=120 emCalo above 20 MeV forward otherBaryon 9.96352e-07 - case=121 emCalo above 20 MeV backward all 0.000151348 + case=110 emCalo above 20 MeV forward all 0.00184564 + case=111 emCalo above 20 MeV forward electron 4.17798e-05 + case=112 emCalo above 20 MeV forward gamma 6.86034e-05 + case=113 emCalo above 20 MeV forward muon 1.37046e-06 + case=114 emCalo above 20 MeV forward neutrino 0.000681747 + case=115 emCalo above 20 MeV forward pion 0.000129709 + case=116 emCalo above 20 MeV forward neutron 0.000852597 + case=117 emCalo above 20 MeV forward proton 6.10061e-05 + case=118 emCalo above 20 MeV forward ion 4.46292e-07 + case=119 emCalo above 20 MeV forward otherMeson 5.82493e-06 + case=120 emCalo above 20 MeV forward otherBaryon 2.56025e-06 + case=121 emCalo above 20 MeV backward all 0.000145492 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 0.000148011 + case=125 emCalo above 20 MeV backward neutrino 0.000144546 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 3.33697e-06 + case=127 emCalo above 20 MeV backward neutron 9.46129e-07 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 6.87215e-05 - case=133 hadCalo forward electron 5.49966e-08 - case=134 hadCalo forward gamma 1.2123e-06 + case=132 hadCalo forward all 6.37069e-05 + case=133 hadCalo forward electron 0 + case=134 hadCalo forward gamma 0 case=135 hadCalo forward muon 0 - case=136 hadCalo forward neutrino 6.25513e-05 - case=137 hadCalo forward pion 5.63526e-08 - case=138 hadCalo forward neutron 4.84649e-06 + case=136 hadCalo forward neutrino 6.33979e-05 + case=137 hadCalo forward pion 0 + case=138 hadCalo forward neutron 3.08999e-07 case=139 hadCalo forward proton 0 case=140 hadCalo forward ion 0 case=141 hadCalo forward otherMeson 0 case=142 hadCalo forward otherBaryon 0 - case=143 hadCalo backward all 3.23636e-05 + case=143 hadCalo backward all 3.24312e-05 case=144 hadCalo backward electron 0 case=145 hadCalo backward gamma 0 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 3.23636e-05 + case=147 hadCalo backward neutrino 3.24312e-05 case=148 hadCalo backward pion 0 case=149 hadCalo backward neutron 0 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 1.13024e-05 - case=155 hadCalo below 20 MeV forward electron 5.49966e-08 - case=156 hadCalo below 20 MeV forward gamma 1.2123e-06 + case=154 hadCalo below 20 MeV forward all 6.6753e-06 + case=155 hadCalo below 20 MeV forward electron 0 + case=156 hadCalo below 20 MeV forward gamma 0 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 5.33603e-06 + case=158 hadCalo below 20 MeV forward neutrino 6.4264e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 4.69911e-06 + case=160 hadCalo below 20 MeV forward neutron 2.48899e-07 case=161 hadCalo below 20 MeV forward proton 0 case=162 hadCalo below 20 MeV forward ion 0 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 2.03375e-06 + case=165 hadCalo below 20 MeV backward all 2.6362e-06 case=166 hadCalo below 20 MeV backward electron 0 case=167 hadCalo below 20 MeV backward gamma 0 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 2.03375e-06 + case=169 hadCalo below 20 MeV backward neutrino 2.6362e-06 case=170 hadCalo below 20 MeV backward pion 0 case=171 hadCalo below 20 MeV backward neutron 0 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 5.7419e-05 + case=176 hadCalo above 20 MeV forward all 5.70316e-05 case=177 hadCalo above 20 MeV forward electron 0 case=178 hadCalo above 20 MeV forward gamma 0 case=179 hadCalo above 20 MeV forward muon 0 - case=180 hadCalo above 20 MeV forward neutrino 5.72153e-05 - case=181 hadCalo above 20 MeV forward pion 5.63526e-08 - case=182 hadCalo above 20 MeV forward neutron 1.47379e-07 + case=180 hadCalo above 20 MeV forward neutrino 5.69715e-05 + case=181 hadCalo above 20 MeV forward pion 0 + case=182 hadCalo above 20 MeV forward neutron 6.01003e-08 case=183 hadCalo above 20 MeV forward proton 0 case=184 hadCalo above 20 MeV forward ion 0 case=185 hadCalo above 20 MeV forward otherMeson 0 case=186 hadCalo above 20 MeV forward otherBaryon 0 - case=187 hadCalo above 20 MeV backward all 3.03299e-05 + case=187 hadCalo above 20 MeV backward all 2.9795e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 3.03299e-05 + case=191 hadCalo above 20 MeV backward neutrino 2.9795e-05 case=192 hadCalo above 20 MeV backward pion 0 case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 @@ -1897,105 +1899,105 @@ Run Summary case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 701.46 38.925 27304.3 - case= 1 tracker electron 523.7 5.71919 2995.14 - case= 2 tracker gamma 106.7 52.7227 5625.51 - case= 3 tracker muon 0.12 49.3387 5.92065 - case= 4 tracker neutrino 0.32 41.3098 13.2191 - case= 5 tracker pion 5.17 2778.28 14363.7 - case= 6 tracker neutron 11.82 117.987 1394.6 - case= 7 tracker proton 5.31 136.289 723.693 - case= 8 tracker ion 47.86 0.794725 38.0356 - case= 9 tracker otherMeson 0.41 5211.85 2136.86 - case= 10 tracker otherBaryon 0.05 153.084 7.65422 - case= 11 tracker below 20 MeV all 675.05 0.598955 404.325 - case= 12 tracker below 20 MeV electron 517.22 0.349119 180.571 - case= 13 tracker below 20 MeV gamma 96.61 1.44479 139.581 - case= 14 tracker below 20 MeV muon 0.1 4.11981 0.411981 - case= 15 tracker below 20 MeV neutrino 0.04 18.6778 0.747111 - case= 16 tracker below 20 MeV pion 0.05 11.5591 0.577957 - case= 17 tracker below 20 MeV neutron 9.76 3.34015 32.5999 - case= 18 tracker below 20 MeV proton 3.66 5.96359 21.8267 - case= 19 tracker below 20 MeV ion 47.61 0.58829 28.0085 + case= 0 tracker all 673.82 30.1106 20289.1 + case= 1 tracker electron 506.59 4.79463 2428.91 + case= 2 tracker gamma 95.35 45.7782 4364.95 + case= 3 tracker muon 0.08 4.11981 0.329585 + case= 4 tracker neutrino 0.24 31.3237 7.5177 + case= 5 tracker pion 3.41 3151.05 10745.1 + case= 6 tracker neutron 12.69 27.5872 350.081 + case= 7 tracker proton 5.27 117.195 617.619 + case= 8 tracker ion 49.93 0.818141 40.8498 + case= 9 tracker otherMeson 0.22 6135.6 1349.83 + case= 10 tracker otherBaryon 0.04 9597.94 383.917 + case= 11 tracker below 20 MeV all 653.67 0.572331 374.115 + case= 12 tracker below 20 MeV electron 501.5 0.325724 163.351 + case= 13 tracker below 20 MeV gamma 87.85 1.39194 122.282 + case= 14 tracker below 20 MeV muon 0.08 4.11981 0.329585 + case= 15 tracker below 20 MeV neutrino 0.04 15.6562 0.62625 + case= 16 tracker below 20 MeV pion 0.01 14.2298 0.142298 + case= 17 tracker below 20 MeV neutron 10.58 3.38924 35.8581 + case= 18 tracker below 20 MeV proton 3.97 6.34882 25.2048 + case= 19 tracker below 20 MeV ion 49.64 0.53026 26.3221 case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 26.41 1018.55 26900 - case= 23 tracker above 20 MeV electron 6.48 434.347 2814.57 - case= 24 tracker above 20 MeV gamma 10.09 543.7 5485.93 - case= 25 tracker above 20 MeV muon 0.02 275.433 5.50867 - case= 26 tracker above 20 MeV neutrino 0.28 44.543 12.472 - case= 27 tracker above 20 MeV pion 5.12 2805.29 14363.1 - case= 28 tracker above 20 MeV neutron 2.06 661.167 1362 - case= 29 tracker above 20 MeV proton 1.65 425.374 701.866 - case= 30 tracker above 20 MeV ion 0.25 40.1084 10.0271 - case= 31 tracker above 20 MeV otherMeson 0.41 5211.85 2136.86 - case= 32 tracker above 20 MeV otherBaryon 0.05 153.084 7.65422 - case= 33 emCalo all 55650.8 3.58411 199459 - case= 34 emCalo electron 33309.5 1.97812 65890.1 - case= 35 emCalo gamma 17668.2 3.65338 64548.8 - case= 36 emCalo muon 3.79 11.9082 45.1319 - case= 37 emCalo neutrino 11.45 36.4311 417.136 - case= 38 emCalo pion 37.45 996.727 37327.4 - case= 39 emCalo neutron 2260.74 5.82167 13161.3 - case= 40 emCalo proton 86.51 95.7309 8281.68 - case= 41 emCalo ion 2269.45 0.412922 937.106 - case= 42 emCalo otherMeson 2.91 2834.17 8247.44 - case= 43 emCalo otherBaryon 0.8 753.229 602.583 - case= 44 emCalo below 20 MeV all 54746.8 0.866457 47435.7 - case= 45 emCalo below 20 MeV electron 32952.3 0.694895 22898.4 - case= 46 emCalo below 20 MeV gamma 17337 1.20609 20910 - case= 47 emCalo below 20 MeV muon 3.57 4.11981 14.7077 - case= 48 emCalo below 20 MeV neutrino 0.87 14.9441 13.0013 - case= 49 emCalo below 20 MeV pion 0.82 11.4703 9.40566 - case= 50 emCalo below 20 MeV neutron 2161.59 1.33086 2876.77 - case= 51 emCalo below 20 MeV proton 32.54 12.5386 408.008 - case= 52 emCalo below 20 MeV ion 2257.87 0.13428 303.187 - case= 53 emCalo below 20 MeV otherMeson 0.19 8.26379 1.57012 - case= 54 emCalo below 20 MeV otherBaryon 0.06 11.3985 0.683909 - case= 55 emCalo above 20 MeV all 903.99 168.169 152023 - case= 56 emCalo above 20 MeV electron 357.22 120.351 42991.7 - case= 57 emCalo above 20 MeV gamma 331.18 131.767 43638.7 - case= 58 emCalo above 20 MeV muon 0.22 138.292 30.4242 - case= 59 emCalo above 20 MeV neutrino 10.58 38.198 404.134 - case= 60 emCalo above 20 MeV pion 36.63 1018.78 37318 - case= 61 emCalo above 20 MeV neutron 99.15 103.727 10284.5 - case= 62 emCalo above 20 MeV proton 53.97 145.89 7873.67 - case= 63 emCalo above 20 MeV ion 11.58 54.7425 633.919 - case= 64 emCalo above 20 MeV otherMeson 2.72 3031.57 8245.87 - case= 65 emCalo above 20 MeV otherBaryon 0.74 813.378 601.9 - case= 66 hadCalo all 19952.4 2.00148 39934.3 - case= 67 hadCalo electron 11500 1.00774 11589 - case= 68 hadCalo gamma 5873.83 2.01459 11833.4 - case= 69 hadCalo muon 1.58 9.754 15.4113 - case= 70 hadCalo neutrino 4.76 35.7231 170.042 - case= 71 hadCalo pion 10.92 572.037 6246.64 - case= 72 hadCalo neutron 1206.35 4.74247 5721.07 - case= 73 hadCalo proton 35.16 85.4481 3004.35 - case= 74 hadCalo ion 1318.96 0.272017 358.78 - case= 75 hadCalo otherMeson 0.68 1279.95 870.366 - case= 76 hadCalo otherBaryon 0.23 544.694 125.28 - case= 77 hadCalo below 20 MeV all 19764.9 0.728998 14408.6 - case= 78 hadCalo below 20 MeV electron 11448.9 0.559158 6401.75 - case= 79 hadCalo below 20 MeV gamma 5827.69 1.08707 6335.1 - case= 80 hadCalo below 20 MeV muon 1.52 4.11981 6.26212 - case= 81 hadCalo below 20 MeV neutrino 0.37 14.8865 5.508 - case= 82 hadCalo below 20 MeV pion 0.29 10.6537 3.08958 - case= 83 hadCalo below 20 MeV neutron 1159.67 1.19345 1384 - case= 84 hadCalo below 20 MeV proton 12 12.7605 153.126 - case= 85 hadCalo below 20 MeV ion 1314.33 0.0904309 118.856 - case= 86 hadCalo below 20 MeV otherMeson 0.07 7.20754 0.504528 - case= 87 hadCalo below 20 MeV otherBaryon 0.04 9.10136 0.364054 - case= 88 hadCalo above 20 MeV all 187.54 136.108 25525.7 - case= 89 hadCalo above 20 MeV electron 51.05 101.611 5187.23 - case= 90 hadCalo above 20 MeV gamma 46.14 119.165 5498.25 - case= 91 hadCalo above 20 MeV muon 0.06 152.487 9.14921 - case= 92 hadCalo above 20 MeV neutrino 4.39 37.4792 164.534 - case= 93 hadCalo above 20 MeV pion 10.63 587.352 6243.55 - case= 94 hadCalo above 20 MeV neutron 46.68 92.9107 4337.07 - case= 95 hadCalo above 20 MeV proton 23.16 123.11 2851.23 - case= 96 hadCalo above 20 MeV ion 4.63 51.8195 239.924 - case= 97 hadCalo above 20 MeV otherMeson 0.61 1426 869.861 - case= 98 hadCalo above 20 MeV otherBaryon 0.19 657.451 124.916 + case= 22 tracker above 20 MeV all 20.15 988.337 19915 + case= 23 tracker above 20 MeV electron 5.09 445.101 2265.56 + case= 24 tracker above 20 MeV gamma 7.5 565.689 4242.67 + case= 25 tracker above 20 MeV muon 0 0 0 + case= 26 tracker above 20 MeV neutrino 0.2 34.4572 6.89145 + case= 27 tracker above 20 MeV pion 3.4 3160.28 10744.9 + case= 28 tracker above 20 MeV neutron 2.11 148.921 314.223 + case= 29 tracker above 20 MeV proton 1.3 455.703 592.414 + case= 30 tracker above 20 MeV ion 0.29 50.0955 14.5277 + case= 31 tracker above 20 MeV otherMeson 0.22 6135.6 1349.83 + case= 32 tracker above 20 MeV otherBaryon 0.04 9597.94 383.917 + case= 33 emCalo all 61947.6 3.75789 232792 + case= 34 emCalo electron 37119.7 2.071 76874.8 + case= 35 emCalo gamma 19708.8 3.86699 76213.7 + case= 36 emCalo muon 4.59 13.6215 62.5228 + case= 37 emCalo neutrino 13.72 36.6171 502.387 + case= 38 emCalo pion 43.85 1014.41 44482 + case= 39 emCalo neutron 2478.31 6.0804 15069.1 + case= 40 emCalo proton 92.99 89.2985 8303.87 + case= 41 emCalo ion 2480.73 0.498603 1236.9 + case= 42 emCalo otherMeson 3.65 2479.8 9051.26 + case= 43 emCalo otherBaryon 1.25 796.343 995.429 + case= 44 emCalo below 20 MeV all 60912 0.869861 52985 + case= 45 emCalo below 20 MeV electron 36713.3 0.698778 25654.4 + case= 46 emCalo below 20 MeV gamma 19326.8 1.20862 23358.6 + case= 47 emCalo below 20 MeV muon 4.32 4.13319 17.8554 + case= 48 emCalo below 20 MeV neutrino 1.29 14.654 18.9037 + case= 49 emCalo below 20 MeV pion 1.07 11.8444 12.6735 + case= 50 emCalo below 20 MeV neutron 2366.68 1.33392 3156.95 + case= 51 emCalo below 20 MeV proton 33.75 12.479 421.166 + case= 52 emCalo below 20 MeV ion 2464.67 0.139062 342.742 + case= 53 emCalo below 20 MeV otherMeson 0.21 6.27556 1.31787 + case= 54 emCalo below 20 MeV otherBaryon 0.02 15.6179 0.312357 + case= 55 emCalo above 20 MeV all 1035.58 173.629 179807 + case= 56 emCalo above 20 MeV electron 406.45 126.019 51220.4 + case= 57 emCalo above 20 MeV gamma 382.05 138.346 52855.1 + case= 58 emCalo above 20 MeV muon 0.27 165.435 44.6675 + case= 59 emCalo above 20 MeV neutrino 12.43 38.8965 483.483 + case= 60 emCalo above 20 MeV pion 42.78 1039.49 44469.3 + case= 61 emCalo above 20 MeV neutron 111.63 106.711 11912.2 + case= 62 emCalo above 20 MeV proton 59.24 133.064 7882.7 + case= 63 emCalo above 20 MeV ion 16.06 55.676 894.157 + case= 64 emCalo above 20 MeV otherMeson 3.44 2630.8 9049.94 + case= 65 emCalo above 20 MeV otherBaryon 1.23 809.038 995.116 + case= 66 hadCalo all 13818.2 1.4451 19968.7 + case= 67 hadCalo electron 7941.07 0.779705 6191.69 + case= 68 hadCalo gamma 4003.91 1.57308 6298.47 + case= 69 hadCalo muon 0.97 20.4434 19.8301 + case= 70 hadCalo neutrino 2.92 34.5947 101.016 + case= 71 hadCalo pion 5.12 427.631 2189.47 + case= 72 hadCalo neutron 861.32 3.88721 3348.14 + case= 73 hadCalo proton 20.59 71.2013 1466.03 + case= 74 hadCalo ion 981.94 0.229248 225.108 + case= 75 hadCalo otherMeson 0.29 418.172 121.27 + case= 76 hadCalo otherBaryon 0.04 191.163 7.64653 + case= 77 hadCalo below 20 MeV all 13725.2 0.699027 9594.26 + case= 78 hadCalo below 20 MeV electron 7919.2 0.529078 4189.87 + case= 79 hadCalo below 20 MeV gamma 3985.51 1.06645 4250.33 + case= 80 hadCalo below 20 MeV muon 0.93 4.11981 3.83143 + case= 81 hadCalo below 20 MeV neutrino 0.26 12.6891 3.29916 + case= 82 hadCalo below 20 MeV pion 0.19 12.0952 2.29809 + case= 83 hadCalo below 20 MeV neutron 832.16 1.16473 969.243 + case= 84 hadCalo below 20 MeV proton 7.64 12.759 97.4785 + case= 85 hadCalo below 20 MeV ion 979.17 0.0790069 77.3612 + case= 86 hadCalo below 20 MeV otherMeson 0.11 4.96747 0.546422 + case= 87 hadCalo below 20 MeV otherBaryon 0 0 0 + case= 88 hadCalo above 20 MeV all 93 111.553 10374.4 + case= 89 hadCalo above 20 MeV electron 21.87 91.5326 2001.82 + case= 90 hadCalo above 20 MeV gamma 18.4 111.312 2048.14 + case= 91 hadCalo above 20 MeV muon 0.04 399.966 15.9987 + case= 92 hadCalo above 20 MeV neutrino 2.66 36.7358 97.7173 + case= 93 hadCalo above 20 MeV pion 4.93 443.646 2187.17 + case= 94 hadCalo above 20 MeV neutron 29.16 81.5807 2378.89 + case= 95 hadCalo above 20 MeV proton 12.95 105.68 1368.56 + case= 96 hadCalo above 20 MeV ion 2.77 53.3383 147.747 + case= 97 hadCalo above 20 MeV otherMeson 0.18 670.686 120.724 + case= 98 hadCalo above 20 MeV otherBaryon 0.04 191.163 7.64653 ============================================================= ================== Deleting memory pools =================== diff --git a/examples/extended/hadronic/ParticleFluence/Layer/Layer.out b/examples/extended/hadronic/ParticleFluence/Layer/Layer.out index 339fcc2a57..fcd4316d6a 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/Layer.out +++ b/examples/extended/hadronic/ParticleFluence/Layer/Layer.out @@ -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 @@ -94,7 +94,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 ======== @@ -747,6 +747,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 @@ -763,6 +764,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 @@ -810,7 +812,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.420000s Real=0.424600s Sys=0.010000s + User=0.510000s Real=0.516582s Sys=0.000000s =============== Run::PrintInfo() =============== RunID = 0 @@ -823,140 +825,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.00979939 - case= 1 downstream electron 0.00112727 - case= 2 downstream gamma 0.00747238 - case= 3 downstream muon 1.36538e-06 - case= 4 downstream neutrino 7.49974e-05 - case= 5 downstream pion 0.000496482 - case= 6 downstream neutron 0.000406984 - case= 7 downstream proton 0.000171044 + case= 0 downstream all 0.0124827 + case= 1 downstream electron 0.00153849 + case= 2 downstream gamma 0.0093226 + case= 3 downstream muon 6.55055e-06 + case= 4 downstream neutrino 0.00013569 + case= 5 downstream pion 0.000620243 + case= 6 downstream neutron 0.000606973 + case= 7 downstream proton 0.000195718 case= 8 downstream ion 0 - case= 9 downstream otherMeson 4.82602e-05 - case= 10 downstream otherBaryon 6.08045e-07 - case= 11 downstream below 20 MeV all 0.00672744 - case= 12 downstream below 20 MeV electron 0.000446161 - case= 13 downstream below 20 MeV gamma 0.00616509 + case= 9 downstream otherMeson 5.12969e-05 + case= 10 downstream otherBaryon 5.17389e-06 + case= 11 downstream below 20 MeV all 0.00841171 + case= 12 downstream below 20 MeV electron 0.000620017 + case= 13 downstream below 20 MeV gamma 0.00753744 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 0 - case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.00011418 - case= 18 downstream below 20 MeV proton 2.00911e-06 + case= 15 downstream below 20 MeV neutrino 1.11569e-05 + case= 16 downstream below 20 MeV pion 2.97244e-06 + case= 17 downstream below 20 MeV neutron 0.000234397 + case= 18 downstream below 20 MeV proton 5.72595e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00307195 - case= 23 downstream above 20 MeV electron 0.000681111 - case= 24 downstream above 20 MeV gamma 0.00130729 - case= 25 downstream above 20 MeV muon 1.36538e-06 - case= 26 downstream above 20 MeV neutrino 7.49974e-05 - case= 27 downstream above 20 MeV pion 0.000496482 - case= 28 downstream above 20 MeV neutron 0.000292804 - case= 29 downstream above 20 MeV proton 0.000169035 + case= 22 downstream above 20 MeV all 0.00407102 + case= 23 downstream above 20 MeV electron 0.000918476 + case= 24 downstream above 20 MeV gamma 0.00178515 + case= 25 downstream above 20 MeV muon 6.55055e-06 + case= 26 downstream above 20 MeV neutrino 0.000124533 + case= 27 downstream above 20 MeV pion 0.000617271 + case= 28 downstream above 20 MeV neutron 0.000372576 + case= 29 downstream above 20 MeV proton 0.000189993 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 4.82602e-05 - case= 32 downstream above 20 MeV otherBaryon 6.08045e-07 - case= 33 side all 0.0010503 - case= 34 side electron 7.12206e-05 - case= 35 side gamma 0.000848179 - case= 36 side muon 7.56883e-07 - case= 37 side neutrino 4.39688e-05 - case= 38 side pion 1.19098e-05 - case= 39 side neutron 6.97068e-05 - case= 40 side proton 3.64319e-06 + case= 31 downstream above 20 MeV otherMeson 5.12969e-05 + case= 32 downstream above 20 MeV otherBaryon 5.17389e-06 + case= 33 side all 0.00107574 + case= 34 side electron 5.73885e-05 + case= 35 side gamma 0.000866097 + case= 36 side muon 3.19108e-07 + case= 37 side neutrino 5.6848e-05 + case= 38 side pion 1.27851e-05 + case= 39 side neutron 7.82597e-05 + case= 40 side proton 3.51712e-06 case= 41 side ion 0 - case= 42 side otherMeson 9.11986e-07 + case= 42 side otherMeson 5.27573e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.000857942 - case= 45 side below 20 MeV electron 4.27537e-05 - case= 46 side below 20 MeV gamma 0.000782398 + case= 44 side below 20 MeV all 0.000848037 + case= 45 side below 20 MeV electron 2.68949e-05 + case= 46 side below 20 MeV gamma 0.000792905 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 4.7845e-06 - case= 49 side below 20 MeV pion 3.29782e-07 - case= 50 side below 20 MeV neutron 2.68353e-05 - case= 51 side below 20 MeV proton 8.40639e-07 + case= 48 side below 20 MeV neutrino 4.37465e-06 + case= 49 side below 20 MeV pion 0 + case= 50 side below 20 MeV neutron 2.35278e-05 + case= 51 side below 20 MeV proton 3.34869e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000192354 - case= 56 side above 20 MeV electron 2.8467e-05 - case= 57 side above 20 MeV gamma 6.57801e-05 - case= 58 side above 20 MeV muon 7.56883e-07 - case= 59 side above 20 MeV neutrino 3.91843e-05 - case= 60 side above 20 MeV pion 1.158e-05 - case= 61 side above 20 MeV neutron 4.28714e-05 - case= 62 side above 20 MeV proton 2.80255e-06 + case= 55 side above 20 MeV all 0.000227705 + case= 56 side above 20 MeV electron 3.04935e-05 + case= 57 side above 20 MeV gamma 7.31926e-05 + case= 58 side above 20 MeV muon 3.19108e-07 + case= 59 side above 20 MeV neutrino 5.24733e-05 + case= 60 side above 20 MeV pion 1.27851e-05 + case= 61 side above 20 MeV neutron 5.47318e-05 + case= 62 side above 20 MeV proton 3.18225e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 9.11986e-07 + case= 64 side above 20 MeV otherMeson 5.27573e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.000552136 - case= 67 upstream electron 3.38505e-05 - case= 68 upstream gamma 0.000416043 + case= 66 upstream all 0.00062127 + case= 67 upstream electron 2.53293e-05 + case= 68 upstream gamma 0.000457353 case= 69 upstream muon 0 - case= 70 upstream neutrino 3.60293e-05 - case= 71 upstream pion 3.64784e-06 - case= 72 upstream neutron 6.12486e-05 - case= 73 upstream proton 1.31724e-06 + case= 70 upstream neutrino 6.30181e-05 + case= 71 upstream pion 8.28141e-06 + case= 72 upstream neutron 6.72877e-05 + case= 73 upstream proton 0 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.000467283 - case= 78 upstream below 20 MeV electron 1.98357e-05 - case= 79 upstream below 20 MeV gamma 0.000403444 + case= 77 upstream below 20 MeV all 0.000463453 + case= 78 upstream below 20 MeV electron 1.45977e-05 + case= 79 upstream below 20 MeV gamma 0.00041745 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 4.9175e-06 + case= 81 upstream below 20 MeV neutrino 4.50526e-06 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 3.90858e-05 + case= 83 upstream below 20 MeV neutron 2.69001e-05 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 8.48534e-05 - case= 89 upstream above 20 MeV electron 1.40148e-05 - case= 90 upstream above 20 MeV gamma 1.25989e-05 + case= 88 upstream above 20 MeV all 0.000157817 + case= 89 upstream above 20 MeV electron 1.07316e-05 + case= 90 upstream above 20 MeV gamma 3.99033e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 3.11118e-05 - case= 93 upstream above 20 MeV pion 3.64784e-06 - case= 94 upstream above 20 MeV neutron 2.21627e-05 - case= 95 upstream above 20 MeV proton 1.31724e-06 + case= 92 upstream above 20 MeV neutrino 5.85129e-05 + case= 93 upstream above 20 MeV pion 8.28141e-06 + case= 94 upstream above 20 MeV neutron 4.03876e-05 + case= 95 upstream above 20 MeV proton 0 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 1252.8 41.1762 51585.5 - case= 1 layer electron 1021.42 5.25691 5369.51 - case= 2 layer gamma 153 71.9465 11007.8 - case= 3 layer muon 0.57 16.9102 9.63883 - case= 4 layer neutrino 1.65 35.934 59.2911 - case= 5 layer pion 11.26 2187.92 24636 - case= 6 layer neutron 12.06 178.839 2156.8 - case= 7 layer proton 25.36 85.5557 2169.69 - case= 8 layer ion 26.25 5.35537 140.578 - case= 9 layer otherMeson 1.12 5229.4 5856.92 - case= 10 layer otherBaryon 0.11 1629.3 179.223 - case= 11 layer below 20 MeV all 1192.73 0.595271 709.998 - case= 12 layer below 20 MeV electron 1007.46 0.339598 342.132 - case= 13 layer below 20 MeV gamma 133.54 1.45622 194.464 - case= 14 layer below 20 MeV muon 0.48 4.07588 1.95642 - case= 15 layer below 20 MeV neutrino 0.14 14.7541 2.06558 - case= 16 layer below 20 MeV pion 0.24 7.28848 1.74924 - case= 17 layer below 20 MeV neutron 6.14 6.9004 42.3685 - case= 18 layer below 20 MeV proton 19.7 2.75448 54.2632 - case= 19 layer below 20 MeV ion 25.02 2.83731 70.9896 - case= 20 layer below 20 MeV otherMeson 0.01 0.994377 0.00994377 + case= 0 layer all 1406.92 46.0991 64857.7 + case= 1 layer electron 1133.81 7.02147 7961.02 + case= 2 layer gamma 175.72 84.3756 14826.5 + case= 3 layer muon 0.86 18.9589 16.3047 + case= 4 layer neutrino 2.48 34.4772 85.5035 + case= 5 layer pion 14.42 2115.76 30509.3 + case= 6 layer neutron 15.18 153.105 2324.13 + case= 7 layer proton 31.46 71.3139 2243.54 + case= 8 layer ion 31.48 4.92962 155.185 + case= 9 layer otherMeson 1.36 4480.12 6092.97 + case= 10 layer otherBaryon 0.15 4289.04 643.357 + case= 11 layer below 20 MeV all 1332.44 0.612189 815.705 + case= 12 layer below 20 MeV electron 1117.17 0.338694 378.379 + case= 13 layer below 20 MeV gamma 151.04 1.48024 223.576 + case= 14 layer below 20 MeV muon 0.78 4.43553 3.45971 + case= 15 layer below 20 MeV neutrino 0.22 14.5273 3.19602 + case= 16 layer below 20 MeV pion 0.25 5.90114 1.47528 + case= 17 layer below 20 MeV neutron 7.49 6.64006 49.7341 + case= 18 layer below 20 MeV proton 25.25 2.79289 70.5206 + case= 19 layer below 20 MeV ion 30.23 2.82298 85.3387 + case= 20 layer below 20 MeV otherMeson 0.01 2.65788 0.0265788 case= 21 layer below 20 MeV otherBaryon 0 0 0 - case= 22 layer above 20 MeV all 60.07 846.937 50875.5 - case= 23 layer above 20 MeV electron 13.96 360.128 5027.38 - case= 24 layer above 20 MeV gamma 19.46 555.671 10813.4 - case= 25 layer above 20 MeV muon 0.09 85.36 7.6824 - case= 26 layer above 20 MeV neutrino 1.51 37.8977 57.2255 - case= 27 layer above 20 MeV pion 11.02 2235.42 24634.3 - case= 28 layer above 20 MeV neutron 5.92 357.167 2114.43 - case= 29 layer above 20 MeV proton 5.66 373.751 2115.43 - case= 30 layer above 20 MeV ion 1.23 56.5763 69.5888 - case= 31 layer above 20 MeV otherMeson 1.11 5276.5 5856.91 - case= 32 layer above 20 MeV otherBaryon 0.11 1629.3 179.223 + case= 22 layer above 20 MeV all 74.48 859.856 64042 + case= 23 layer above 20 MeV electron 16.64 455.687 7582.64 + case= 24 layer above 20 MeV gamma 24.68 591.689 14602.9 + case= 25 layer above 20 MeV muon 0.08 160.562 12.845 + case= 26 layer above 20 MeV neutrino 2.26 36.4192 82.3074 + case= 27 layer above 20 MeV pion 14.17 2152.98 30507.8 + case= 28 layer above 20 MeV neutron 7.69 295.761 2274.4 + case= 29 layer above 20 MeV proton 6.21 349.922 2173.02 + case= 30 layer above 20 MeV ion 1.25 55.8767 69.8459 + case= 31 layer above 20 MeV otherMeson 1.35 4513.29 6092.94 + case= 32 layer above 20 MeV otherBaryon 0.15 4289.04 643.357 ============================================================= @@ -1021,7 +1023,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=3.250000s Real=3.291569s Sys=0.010000s + User=3.440000s Real=3.450798s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 1 @@ -1034,140 +1036,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0454072 - case= 1 downstream electron 0.00413017 - case= 2 downstream gamma 0.0378251 - case= 3 downstream muon 1.05939e-05 - case= 4 downstream neutrino 0.000350836 - case= 5 downstream pion 0.000641681 - case= 6 downstream neutron 0.00208604 - case= 7 downstream proton 0.000292048 - case= 8 downstream ion 1.32496e-06 - case= 9 downstream otherMeson 6.50303e-05 - case= 10 downstream otherBaryon 4.44304e-06 - case= 11 downstream below 20 MeV all 0.0363028 - case= 12 downstream below 20 MeV electron 0.00210862 - case= 13 downstream below 20 MeV gamma 0.0330833 + case= 0 downstream all 0.047062 + case= 1 downstream electron 0.00431753 + case= 2 downstream gamma 0.0392323 + case= 3 downstream muon 8.39863e-06 + case= 4 downstream neutrino 0.000371221 + case= 5 downstream pion 0.000674887 + case= 6 downstream neutron 0.00215788 + case= 7 downstream proton 0.000249337 + case= 8 downstream ion 1.29027e-06 + case= 9 downstream otherMeson 4.91535e-05 + case= 10 downstream otherBaryon 0 + case= 11 downstream below 20 MeV all 0.0374735 + case= 12 downstream below 20 MeV electron 0.00208521 + case= 13 downstream below 20 MeV gamma 0.0341324 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 2.95658e-05 - case= 16 downstream below 20 MeV pion 6.09889e-06 - case= 17 downstream below 20 MeV neutron 0.0010721 - case= 18 downstream below 20 MeV proton 3.0703e-06 + case= 15 downstream below 20 MeV neutrino 2.41444e-05 + case= 16 downstream below 20 MeV pion 4.82094e-06 + case= 17 downstream below 20 MeV neutron 0.00122396 + case= 18 downstream below 20 MeV proton 2.9248e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00910444 - case= 23 downstream above 20 MeV electron 0.00202155 - case= 24 downstream above 20 MeV gamma 0.00474174 - case= 25 downstream above 20 MeV muon 1.05939e-05 - case= 26 downstream above 20 MeV neutrino 0.00032127 - case= 27 downstream above 20 MeV pion 0.000635582 - case= 28 downstream above 20 MeV neutron 0.00101393 - case= 29 downstream above 20 MeV proton 0.000288977 - case= 30 downstream above 20 MeV ion 1.32496e-06 - case= 31 downstream above 20 MeV otherMeson 6.50303e-05 - case= 32 downstream above 20 MeV otherBaryon 4.44304e-06 - case= 33 side all 0.00310778 - case= 34 side electron 0.000111624 - case= 35 side gamma 0.0022335 - case= 36 side muon 9.56343e-07 - case= 37 side neutrino 0.000211205 - case= 38 side pion 1.76999e-05 - case= 39 side neutron 0.000522713 - case= 40 side proton 9.77207e-06 + case= 22 downstream above 20 MeV all 0.00958848 + case= 23 downstream above 20 MeV electron 0.00223232 + case= 24 downstream above 20 MeV gamma 0.00509984 + case= 25 downstream above 20 MeV muon 8.39863e-06 + case= 26 downstream above 20 MeV neutrino 0.000347077 + case= 27 downstream above 20 MeV pion 0.000670066 + case= 28 downstream above 20 MeV neutron 0.000933915 + case= 29 downstream above 20 MeV proton 0.000246412 + case= 30 downstream above 20 MeV ion 1.29027e-06 + case= 31 downstream above 20 MeV otherMeson 4.91535e-05 + case= 32 downstream above 20 MeV otherBaryon 0 + case= 33 side all 0.0030825 + case= 34 side electron 0.000118757 + case= 35 side gamma 0.00222066 + case= 36 side muon 9.05165e-07 + case= 37 side neutrino 0.00020929 + case= 38 side pion 2.28023e-05 + case= 39 side neutron 0.000501603 + case= 40 side proton 6.19851e-06 case= 41 side ion 0 - case= 42 side otherMeson 3.16774e-07 + case= 42 side otherMeson 2.28238e-06 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00250126 - case= 45 side below 20 MeV electron 6.0882e-05 - case= 46 side below 20 MeV gamma 0.00208438 + case= 44 side below 20 MeV all 0.00249472 + case= 45 side below 20 MeV electron 7.41468e-05 + case= 46 side below 20 MeV gamma 0.00206604 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 2.07963e-05 + case= 48 side below 20 MeV neutrino 2.16187e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.000334858 - case= 51 side below 20 MeV proton 3.39956e-07 + case= 50 side below 20 MeV neutron 0.000332918 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000606524 - case= 56 side above 20 MeV electron 5.07418e-05 - case= 57 side above 20 MeV gamma 0.000149113 - case= 58 side above 20 MeV muon 9.56343e-07 - case= 59 side above 20 MeV neutrino 0.000190409 - case= 60 side above 20 MeV pion 1.76999e-05 - case= 61 side above 20 MeV neutron 0.000187855 - case= 62 side above 20 MeV proton 9.43212e-06 + case= 55 side above 20 MeV all 0.00058778 + case= 56 side above 20 MeV electron 4.46105e-05 + case= 57 side above 20 MeV gamma 0.000154625 + case= 58 side above 20 MeV muon 9.05165e-07 + case= 59 side above 20 MeV neutrino 0.000187672 + case= 60 side above 20 MeV pion 2.28023e-05 + case= 61 side above 20 MeV neutron 0.000168685 + case= 62 side above 20 MeV proton 6.19851e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.16774e-07 + case= 64 side above 20 MeV otherMeson 2.28238e-06 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00263608 - case= 67 upstream electron 3.45687e-05 - case= 68 upstream gamma 0.00171885 + case= 66 upstream all 0.00260362 + case= 67 upstream electron 6.23616e-05 + case= 68 upstream gamma 0.00167746 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000218091 - case= 71 upstream pion 1.34056e-05 - case= 72 upstream neutron 0.000635547 - case= 73 upstream proton 1.3399e-05 - case= 74 upstream ion 2.21588e-06 - case= 75 upstream otherMeson 0 + case= 70 upstream neutrino 0.00027152 + case= 71 upstream pion 1.30633e-05 + case= 72 upstream neutron 0.000568134 + case= 73 upstream proton 9.80511e-06 + case= 74 upstream ion 0 + case= 75 upstream otherMeson 1.27732e-06 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00215678 - case= 78 upstream below 20 MeV electron 2.50982e-05 - case= 79 upstream below 20 MeV gamma 0.00161436 + case= 77 upstream below 20 MeV all 0.00205641 + case= 78 upstream below 20 MeV electron 3.5789e-05 + case= 79 upstream below 20 MeV gamma 0.00156188 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 1.35863e-05 - case= 82 upstream below 20 MeV pion 1.32497e-06 - case= 83 upstream below 20 MeV neutron 0.000500546 - case= 84 upstream below 20 MeV proton 1.85789e-06 + case= 81 upstream below 20 MeV neutrino 1.80833e-05 + case= 82 upstream below 20 MeV pion 0 + case= 83 upstream below 20 MeV neutron 0.000440658 + case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000479303 - case= 89 upstream above 20 MeV electron 9.47057e-06 - case= 90 upstream above 20 MeV gamma 0.000104489 + case= 88 upstream above 20 MeV all 0.00054721 + case= 89 upstream above 20 MeV electron 2.65726e-05 + case= 90 upstream above 20 MeV gamma 0.00011558 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000204504 - case= 93 upstream above 20 MeV pion 1.20806e-05 - case= 94 upstream above 20 MeV neutron 0.000135001 - case= 95 upstream above 20 MeV proton 1.15411e-05 - case= 96 upstream above 20 MeV ion 2.21588e-06 - case= 97 upstream above 20 MeV otherMeson 0 + case= 92 upstream above 20 MeV neutrino 0.000253436 + case= 93 upstream above 20 MeV pion 1.30633e-05 + case= 94 upstream above 20 MeV neutron 0.000127476 + case= 95 upstream above 20 MeV proton 9.80511e-06 + case= 96 upstream above 20 MeV ion 0 + case= 97 upstream above 20 MeV otherMeson 1.27732e-06 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 12986.3 10.4082 135164 - case= 1 layer electron 11079 2.27469 25201.3 - case= 2 layer gamma 1296.23 25.0579 32480.8 - case= 3 layer muon 2.94 20.606 60.5817 - case= 4 layer neutrino 8.61 36.325 312.758 - case= 5 layer pion 36.27 1379.79 50044.9 - case= 6 layer neutron 83.47 89.8463 7499.47 - case= 7 layer proton 46.7 132.063 6167.32 - case= 8 layer ion 429.71 1.8703 803.685 - case= 9 layer otherMeson 2.81 4188.95 11770.9 - case= 10 layer otherBaryon 0.54 1522.68 822.245 - case= 11 layer below 20 MeV all 12672.4 0.422474 5353.77 - case= 12 layer below 20 MeV electron 10982.1 0.238776 2622.26 - case= 13 layer below 20 MeV gamma 1190.13 1.3923 1657.01 - case= 14 layer below 20 MeV muon 2.71 4.16927 11.2987 - case= 15 layer below 20 MeV neutrino 0.79 14.6479 11.5718 - case= 16 layer below 20 MeV pion 0.42 12.5472 5.26982 - case= 17 layer below 20 MeV neutron 47.83 6.34238 303.356 - case= 18 layer below 20 MeV proton 23.52 7.40687 174.21 - case= 19 layer below 20 MeV ion 424.87 1.33741 568.225 - case= 20 layer below 20 MeV otherMeson 0.04 5.4276 0.217104 - case= 21 layer below 20 MeV otherBaryon 0.03 11.6438 0.349315 - case= 22 layer above 20 MeV all 313.84 413.619 129810 - case= 23 layer above 20 MeV electron 96.9 233.014 22579 - case= 24 layer above 20 MeV gamma 106.1 290.517 30823.8 - case= 25 layer above 20 MeV muon 0.23 214.274 49.283 - case= 26 layer above 20 MeV neutrino 7.82 38.5149 301.187 - case= 27 layer above 20 MeV pion 35.85 1395.8 50039.6 - case= 28 layer above 20 MeV neutron 35.64 201.911 7196.11 - case= 29 layer above 20 MeV proton 23.18 258.547 5993.11 - case= 30 layer above 20 MeV ion 4.84 48.6488 235.46 - case= 31 layer above 20 MeV otherMeson 2.77 4249.36 11770.7 - case= 32 layer above 20 MeV otherBaryon 0.51 1611.56 821.896 + case= 0 layer all 13285.4 9.98424 132645 + case= 1 layer electron 11354.4 2.37276 26941.3 + case= 2 layer gamma 1337.34 24.9896 33419.6 + case= 3 layer muon 2.96 25.4772 75.4124 + case= 4 layer neutrino 8.74 36.3624 317.808 + case= 5 layer pion 36.13 1321.55 47747.5 + case= 6 layer neutron 80.06 87.6551 7017.67 + case= 7 layer proton 44.42 138.398 6147.65 + case= 8 layer ion 417.94 1.78733 746.997 + case= 9 layer otherMeson 2.81 3435.31 9653.23 + case= 10 layer otherBaryon 0.61 946.653 577.458 + case= 11 layer below 20 MeV all 12967.2 0.420359 5450.89 + case= 12 layer below 20 MeV electron 11254.6 0.240317 2704.67 + case= 13 layer below 20 MeV gamma 1226.13 1.4039 1721.37 + case= 14 layer below 20 MeV muon 2.72 4.15801 11.3098 + case= 15 layer below 20 MeV neutrino 0.78 14.9014 11.6231 + case= 16 layer below 20 MeV pion 0.51 12.1977 6.22085 + case= 17 layer below 20 MeV neutron 46.74 6.17938 288.824 + case= 18 layer below 20 MeV proton 22.03 7.30161 160.854 + case= 19 layer below 20 MeV ion 413.64 1.31868 545.458 + case= 20 layer below 20 MeV otherMeson 0.05 7.0338 0.35169 + case= 21 layer below 20 MeV otherBaryon 0.03 7.12942 0.213883 + case= 22 layer above 20 MeV all 318.16 399.779 127194 + case= 23 layer above 20 MeV electron 99.78 242.9 24236.6 + case= 24 layer above 20 MeV gamma 111.21 285.031 31698.3 + case= 25 layer above 20 MeV muon 0.24 267.094 64.1027 + case= 26 layer above 20 MeV neutrino 7.96 38.4654 306.184 + case= 27 layer above 20 MeV pion 35.62 1340.29 47741.3 + case= 28 layer above 20 MeV neutron 33.32 201.946 6728.84 + case= 29 layer above 20 MeV proton 22.39 267.387 5986.79 + case= 30 layer above 20 MeV ion 4.3 46.8696 201.539 + case= 31 layer above 20 MeV otherMeson 2.76 3497.42 9652.88 + case= 32 layer above 20 MeV otherBaryon 0.58 995.249 577.244 ============================================================= @@ -1237,7 +1239,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=4.370000s Real=4.371503s Sys=0.010000s + User=4.800000s Real=4.815745s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1250,140 +1252,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0623825 - case= 1 downstream electron 0.00472345 - case= 2 downstream gamma 0.0529433 - case= 3 downstream muon 1.14641e-05 - case= 4 downstream neutrino 0.000337373 - case= 5 downstream pion 0.000675168 - case= 6 downstream neutron 0.00336848 - case= 7 downstream proton 0.000250889 - case= 8 downstream ion 0 - case= 9 downstream otherMeson 6.92279e-05 - case= 10 downstream otherBaryon 3.13847e-06 - case= 11 downstream below 20 MeV all 0.0543068 - case= 12 downstream below 20 MeV electron 0.00293604 - case= 13 downstream below 20 MeV gamma 0.048937 + case= 0 downstream all 0.0673676 + case= 1 downstream electron 0.00489125 + case= 2 downstream gamma 0.0577999 + case= 3 downstream muon 6.51973e-06 + case= 4 downstream neutrino 0.000368086 + case= 5 downstream pion 0.000761009 + case= 6 downstream neutron 0.00316998 + case= 7 downstream proton 0.000305706 + case= 8 downstream ion 4.97208e-06 + case= 9 downstream otherMeson 5.48575e-05 + case= 10 downstream otherBaryon 5.32099e-06 + case= 11 downstream below 20 MeV all 0.0588067 + case= 12 downstream below 20 MeV electron 0.00317333 + case= 13 downstream below 20 MeV gamma 0.0534428 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 1.89713e-05 - case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.00239861 - case= 18 downstream below 20 MeV proton 1.61269e-05 + case= 15 downstream below 20 MeV neutrino 2.61943e-05 + case= 16 downstream below 20 MeV pion 2.9451e-06 + case= 17 downstream below 20 MeV neutron 0.00215699 + case= 18 downstream below 20 MeV proton 4.43549e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00807572 - case= 23 downstream above 20 MeV electron 0.00178741 - case= 24 downstream above 20 MeV gamma 0.00400629 - case= 25 downstream above 20 MeV muon 1.14641e-05 - case= 26 downstream above 20 MeV neutrino 0.000318402 - case= 27 downstream above 20 MeV pion 0.000675168 - case= 28 downstream above 20 MeV neutron 0.000969864 - case= 29 downstream above 20 MeV proton 0.000234762 - case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 6.92279e-05 - case= 32 downstream above 20 MeV otherBaryon 3.13847e-06 - case= 33 side all 0.0033981 - case= 34 side electron 7.5827e-05 - case= 35 side gamma 0.00184783 - case= 36 side muon 7.28126e-07 - case= 37 side neutrino 0.000191246 - case= 38 side pion 1.59929e-05 - case= 39 side neutron 0.00125978 - case= 40 side proton 6.31567e-06 + case= 22 downstream above 20 MeV all 0.00856092 + case= 23 downstream above 20 MeV electron 0.00171791 + case= 24 downstream above 20 MeV gamma 0.00435712 + case= 25 downstream above 20 MeV muon 6.51973e-06 + case= 26 downstream above 20 MeV neutrino 0.000341892 + case= 27 downstream above 20 MeV pion 0.000758064 + case= 28 downstream above 20 MeV neutron 0.00101299 + case= 29 downstream above 20 MeV proton 0.00030127 + case= 30 downstream above 20 MeV ion 4.97208e-06 + case= 31 downstream above 20 MeV otherMeson 5.48575e-05 + case= 32 downstream above 20 MeV otherBaryon 5.32099e-06 + case= 33 side all 0.0032734 + case= 34 side electron 7.07982e-05 + case= 35 side gamma 0.00180396 + case= 36 side muon 6.9767e-07 + case= 37 side neutrino 0.00015707 + case= 38 side pion 1.4774e-05 + case= 39 side neutron 0.00122005 + case= 40 side proton 5.73812e-06 case= 41 side ion 0 - case= 42 side otherMeson 3.89781e-07 + case= 42 side otherMeson 3.17283e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00296178 - case= 45 side below 20 MeV electron 6.11874e-05 - case= 46 side below 20 MeV gamma 0.00179666 - case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.44841e-05 + case= 44 side below 20 MeV all 0.00286277 + case= 45 side below 20 MeV electron 5.32817e-05 + case= 46 side below 20 MeV gamma 0.0017499 + case= 47 side below 20 MeV muon 3.34628e-07 + case= 48 side below 20 MeV neutrino 1.06018e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00108945 - case= 51 side below 20 MeV proton 0 + case= 50 side below 20 MeV neutron 0.00104813 + case= 51 side below 20 MeV proton 5.22152e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000436328 - case= 56 side above 20 MeV electron 1.46396e-05 - case= 57 side above 20 MeV gamma 5.11721e-05 - case= 58 side above 20 MeV muon 7.28126e-07 - case= 59 side above 20 MeV neutrino 0.000176762 - case= 60 side above 20 MeV pion 1.59929e-05 - case= 61 side above 20 MeV neutron 0.000170328 - case= 62 side above 20 MeV proton 6.31567e-06 + case= 55 side above 20 MeV all 0.000410629 + case= 56 side above 20 MeV electron 1.75166e-05 + case= 57 side above 20 MeV gamma 5.40523e-05 + case= 58 side above 20 MeV muon 3.63042e-07 + case= 59 side above 20 MeV neutrino 0.000146469 + case= 60 side above 20 MeV pion 1.4774e-05 + case= 61 side above 20 MeV neutron 0.000171921 + case= 62 side above 20 MeV proton 5.21597e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.89781e-07 + case= 64 side above 20 MeV otherMeson 3.17283e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00334351 - case= 67 upstream electron 5.06516e-05 - case= 68 upstream gamma 0.00184772 + case= 66 upstream all 0.00264595 + case= 67 upstream electron 6.55508e-05 + case= 68 upstream gamma 0.00132642 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000177726 - case= 71 upstream pion 1.9413e-05 - case= 72 upstream neutron 0.00123778 - case= 73 upstream proton 1.02258e-05 + case= 70 upstream neutrino 0.000173248 + case= 71 upstream pion 4.89848e-06 + case= 72 upstream neutron 0.00107443 + case= 73 upstream proton 1.39521e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00294573 - case= 78 upstream below 20 MeV electron 2.95043e-05 - case= 79 upstream below 20 MeV gamma 0.00178234 + case= 77 upstream below 20 MeV all 0.00234103 + case= 78 upstream below 20 MeV electron 5.52175e-05 + case= 79 upstream below 20 MeV gamma 0.00128651 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 1.03158e-05 - case= 82 upstream below 20 MeV pion 1.69626e-06 - case= 83 upstream below 20 MeV neutron 0.00112188 + case= 81 upstream below 20 MeV neutrino 1.89387e-05 + case= 82 upstream below 20 MeV pion 1.82618e-06 + case= 83 upstream below 20 MeV neutron 0.000978535 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000397778 - case= 89 upstream above 20 MeV electron 2.11473e-05 - case= 90 upstream above 20 MeV gamma 6.53803e-05 + case= 88 upstream above 20 MeV all 0.000304916 + case= 89 upstream above 20 MeV electron 1.03333e-05 + case= 90 upstream above 20 MeV gamma 3.99111e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.00016741 - case= 93 upstream above 20 MeV pion 1.77167e-05 - case= 94 upstream above 20 MeV neutron 0.000115898 - case= 95 upstream above 20 MeV proton 1.02258e-05 + case= 92 upstream above 20 MeV neutrino 0.000154309 + case= 93 upstream above 20 MeV pion 3.0723e-06 + case= 94 upstream above 20 MeV neutron 9.58946e-05 + case= 95 upstream above 20 MeV proton 1.39521e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 18557.3 7.7556 143923 - case= 1 layer electron 14934 2.37792 35511.8 - case= 2 layer gamma 3169.1 12.1988 38659.3 - case= 3 layer muon 2.61 28.5824 74.6002 - case= 4 layer neutrino 7.62 38.1777 290.914 - case= 5 layer pion 30.46 1523.78 46414.5 - case= 6 layer neutron 96.54 59.6566 5759.25 - case= 7 layer proton 71.24 78.931 5623.05 - case= 8 layer ion 242.64 1.76549 428.378 - case= 9 layer otherMeson 2.65 3907.84 10355.8 - case= 10 layer otherBaryon 0.47 1714.04 805.597 - case= 11 layer below 20 MeV all 18123.3 0.552464 10012.5 - case= 12 layer below 20 MeV electron 14763 0.363458 5365.74 - case= 13 layer below 20 MeV gamma 3002.01 1.24888 3749.14 - case= 14 layer below 20 MeV muon 2.31 4.14856 9.58317 - case= 15 layer below 20 MeV neutrino 0.53 15.6319 8.28491 - case= 16 layer below 20 MeV pion 0.46 11.8767 5.4633 - case= 17 layer below 20 MeV neutron 67.98 4.34459 295.345 - case= 18 layer below 20 MeV proton 47.73 6.3793 304.484 - case= 19 layer below 20 MeV ion 239.16 1.14338 273.452 - case= 20 layer below 20 MeV otherMeson 0.09 9.6343 0.867087 - case= 21 layer below 20 MeV otherBaryon 0.01 11.0981 0.110981 - case= 22 layer above 20 MeV all 434.03 308.529 133911 - case= 23 layer above 20 MeV electron 170.98 176.313 30146.1 - case= 24 layer above 20 MeV gamma 167.09 208.93 34910.2 - case= 25 layer above 20 MeV muon 0.3 216.723 65.017 - case= 26 layer above 20 MeV neutrino 7.09 39.863 282.629 - case= 27 layer above 20 MeV pion 30 1546.97 46409 - case= 28 layer above 20 MeV neutron 28.56 191.313 5463.9 - case= 29 layer above 20 MeV proton 23.51 226.226 5318.56 - case= 30 layer above 20 MeV ion 3.48 44.519 154.926 - case= 31 layer above 20 MeV otherMeson 2.56 4044.89 10354.9 - case= 32 layer above 20 MeV otherBaryon 0.46 1751.06 805.486 + case= 0 layer all 18633.2 7.83511 145993 + case= 1 layer electron 14978.2 2.47758 37109.6 + case= 2 layer gamma 3221.03 12.5853 40537.5 + case= 3 layer muon 2.35 34.4059 80.8539 + case= 4 layer neutrino 6.86 35.4329 243.07 + case= 5 layer pion 30.53 1524.17 46532.8 + case= 6 layer neutron 92.93 56.607 5260.49 + case= 7 layer proton 65.82 88.2851 5810.93 + case= 8 layer ion 232.59 1.78098 414.239 + case= 9 layer otherMeson 2.31 3797.08 8771.25 + case= 10 layer otherBaryon 0.65 1896.31 1232.6 + case= 11 layer below 20 MeV all 18194.9 0.555899 10114.5 + case= 12 layer below 20 MeV electron 14804.4 0.365662 5413.41 + case= 13 layer below 20 MeV gamma 3047.38 1.25926 3837.45 + case= 14 layer below 20 MeV muon 2.15 4.1893 9.00699 + case= 15 layer below 20 MeV neutrino 0.56 14.8886 8.33764 + case= 16 layer below 20 MeV pion 0.41 12.0253 4.93038 + case= 17 layer below 20 MeV neutron 65.54 4.45546 292.011 + case= 18 layer below 20 MeV proton 44.96 6.43977 289.532 + case= 19 layer below 20 MeV ion 229.41 1.13009 259.255 + case= 20 layer below 20 MeV otherMeson 0.05 9.9883 0.499415 + case= 21 layer below 20 MeV otherBaryon 0.01 9.17579 0.0917579 + case= 22 layer above 20 MeV all 438.36 309.971 135879 + case= 23 layer above 20 MeV electron 173.76 182.414 31696.2 + case= 24 layer above 20 MeV gamma 173.65 211.345 36700.1 + case= 25 layer above 20 MeV muon 0.2 359.235 71.8469 + case= 26 layer above 20 MeV neutrino 6.3 37.2591 234.732 + case= 27 layer above 20 MeV pion 30.12 1544.75 46527.8 + case= 28 layer above 20 MeV neutron 27.39 181.398 4968.48 + case= 29 layer above 20 MeV proton 20.86 264.688 5521.4 + case= 30 layer above 20 MeV ion 3.18 48.7372 154.984 + case= 31 layer above 20 MeV otherMeson 2.26 3880.86 8770.75 + case= 32 layer above 20 MeV otherBaryon 0.64 1925.8 1232.51 ============================================================= @@ -1458,7 +1460,7 @@ Index : 4 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.880000s Real=1.893670s Sys=0.010000s + User=2.150000s Real=2.150798s Sys=0.000000s =============== Run::PrintInfo() =============== RunID = 3 @@ -1471,140 +1473,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0539571 - case= 1 downstream electron 0.00435871 - case= 2 downstream gamma 0.0461174 - case= 3 downstream muon 1.03549e-05 - case= 4 downstream neutrino 0.000118072 - case= 5 downstream pion 0.000655465 - case= 6 downstream neutron 0.00247472 - case= 7 downstream proton 0.000183779 - case= 8 downstream ion 2.93729e-06 - case= 9 downstream otherMeson 3.27901e-05 - case= 10 downstream otherBaryon 2.8687e-06 - case= 11 downstream below 20 MeV all 0.0470575 - case= 12 downstream below 20 MeV electron 0.00269286 - case= 13 downstream below 20 MeV gamma 0.0424159 - case= 14 downstream below 20 MeV muon 1.47472e-06 - case= 15 downstream below 20 MeV neutrino 8.74978e-06 - case= 16 downstream below 20 MeV pion 2.64377e-06 - case= 17 downstream below 20 MeV neutron 0.00193071 - case= 18 downstream below 20 MeV proton 5.18555e-06 - case= 19 downstream below 20 MeV ion 0 + case= 0 downstream all 0.0650252 + case= 1 downstream electron 0.00565725 + case= 2 downstream gamma 0.0555049 + case= 3 downstream muon 9.01238e-06 + case= 4 downstream neutrino 0.000117071 + case= 5 downstream pion 0.0006661 + case= 6 downstream neutron 0.00280891 + case= 7 downstream proton 0.00022732 + case= 8 downstream ion 3.49761e-06 + case= 9 downstream otherMeson 2.98433e-05 + case= 10 downstream otherBaryon 1.28001e-06 + case= 11 downstream below 20 MeV all 0.0564079 + case= 12 downstream below 20 MeV electron 0.00343958 + case= 13 downstream below 20 MeV gamma 0.0508336 + case= 14 downstream below 20 MeV muon 0 + case= 15 downstream below 20 MeV neutrino 1.07281e-05 + case= 16 downstream below 20 MeV pion 4.07033e-06 + case= 17 downstream below 20 MeV neutron 0.00211801 + case= 18 downstream below 20 MeV proton 0 + case= 19 downstream below 20 MeV ion 1.9609e-06 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00689963 - case= 23 downstream above 20 MeV electron 0.00166585 - case= 24 downstream above 20 MeV gamma 0.00370156 - case= 25 downstream above 20 MeV muon 8.88016e-06 - case= 26 downstream above 20 MeV neutrino 0.000109322 - case= 27 downstream above 20 MeV pion 0.000652821 - case= 28 downstream above 20 MeV neutron 0.000544007 - case= 29 downstream above 20 MeV proton 0.000178593 - case= 30 downstream above 20 MeV ion 2.93729e-06 - case= 31 downstream above 20 MeV otherMeson 3.27901e-05 - case= 32 downstream above 20 MeV otherBaryon 2.8687e-06 - case= 33 side all 0.00356356 - case= 34 side electron 8.10126e-05 - case= 35 side gamma 0.0022246 - case= 36 side muon 2.44336e-06 - case= 37 side neutrino 5.74461e-05 - case= 38 side pion 1.98207e-05 - case= 39 side neutron 0.00117113 - case= 40 side proton 5.16696e-06 + case= 22 downstream above 20 MeV all 0.00861724 + case= 23 downstream above 20 MeV electron 0.00221767 + case= 24 downstream above 20 MeV gamma 0.00467129 + case= 25 downstream above 20 MeV muon 9.01238e-06 + case= 26 downstream above 20 MeV neutrino 0.000106342 + case= 27 downstream above 20 MeV pion 0.00066203 + case= 28 downstream above 20 MeV neutron 0.000690908 + case= 29 downstream above 20 MeV proton 0.00022732 + case= 30 downstream above 20 MeV ion 1.53671e-06 + case= 31 downstream above 20 MeV otherMeson 2.98433e-05 + case= 32 downstream above 20 MeV otherBaryon 1.28001e-06 + case= 33 side all 0.00374362 + case= 34 side electron 6.75182e-05 + case= 35 side gamma 0.00237784 + case= 36 side muon 1.22066e-06 + case= 37 side neutrino 6.25274e-05 + case= 38 side pion 1.85975e-05 + case= 39 side neutron 0.00120656 + case= 40 side proton 8.54086e-06 case= 41 side ion 0 - case= 42 side otherMeson 1.93528e-06 + case= 42 side otherMeson 8.09455e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.0032648 - case= 45 side below 20 MeV electron 6.24057e-05 - case= 46 side below 20 MeV gamma 0.00217354 + case= 44 side below 20 MeV all 0.00342783 + case= 45 side below 20 MeV electron 4.90318e-05 + case= 46 side below 20 MeV gamma 0.00231335 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 5.53585e-06 - case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00102298 + case= 48 side below 20 MeV neutrino 5.3787e-06 + case= 49 side below 20 MeV pion 1.05089e-06 + case= 50 side below 20 MeV neutron 0.00105902 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 - case= 53 side below 20 MeV otherMeson 3.44317e-07 + case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000298751 - case= 56 side above 20 MeV electron 1.86069e-05 - case= 57 side above 20 MeV gamma 5.10601e-05 - case= 58 side above 20 MeV muon 2.44336e-06 - case= 59 side above 20 MeV neutrino 5.19102e-05 - case= 60 side above 20 MeV pion 1.98207e-05 - case= 61 side above 20 MeV neutron 0.000148151 - case= 62 side above 20 MeV proton 5.16696e-06 + case= 55 side above 20 MeV all 0.000315789 + case= 56 side above 20 MeV electron 1.84864e-05 + case= 57 side above 20 MeV gamma 6.44915e-05 + case= 58 side above 20 MeV muon 1.22066e-06 + case= 59 side above 20 MeV neutrino 5.71487e-05 + case= 60 side above 20 MeV pion 1.75466e-05 + case= 61 side above 20 MeV neutron 0.000147545 + case= 62 side above 20 MeV proton 8.54086e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 1.59097e-06 + case= 64 side above 20 MeV otherMeson 8.09455e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00222628 - case= 67 upstream electron 2.9952e-05 - case= 68 upstream gamma 0.00121037 + case= 66 upstream all 0.00228922 + case= 67 upstream electron 2.80117e-05 + case= 68 upstream gamma 0.00114924 case= 69 upstream muon 0 - case= 70 upstream neutrino 5.52081e-05 - case= 71 upstream pion 7.97966e-06 - case= 72 upstream neutron 0.000921202 - case= 73 upstream proton 1.56265e-06 + case= 70 upstream neutrino 4.17511e-05 + case= 71 upstream pion 1.30447e-05 + case= 72 upstream neutron 0.00105567 + case= 73 upstream proton 1.50117e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00203079 - case= 78 upstream below 20 MeV electron 1.94557e-05 - case= 79 upstream below 20 MeV gamma 0.00118934 + case= 77 upstream below 20 MeV all 0.00210148 + case= 78 upstream below 20 MeV electron 2.49412e-05 + case= 79 upstream below 20 MeV gamma 0.00112796 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 3.33397e-06 + case= 81 upstream below 20 MeV neutrino 7.38399e-06 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.000818655 + case= 83 upstream below 20 MeV neutron 0.000941194 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00019549 - case= 89 upstream above 20 MeV electron 1.04964e-05 - case= 90 upstream above 20 MeV gamma 2.10305e-05 + case= 88 upstream above 20 MeV all 0.000187744 + case= 89 upstream above 20 MeV electron 3.07051e-06 + case= 90 upstream above 20 MeV gamma 2.12824e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 5.18741e-05 - case= 93 upstream above 20 MeV pion 7.97966e-06 - case= 94 upstream above 20 MeV neutron 0.000102547 - case= 95 upstream above 20 MeV proton 1.56265e-06 + case= 92 upstream above 20 MeV neutrino 3.43671e-05 + case= 93 upstream above 20 MeV pion 1.30447e-05 + case= 94 upstream above 20 MeV neutron 0.000114478 + case= 95 upstream above 20 MeV proton 1.50117e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 6524.69 12.7931 83471.1 - case= 1 layer electron 4836.25 3.96357 19168.8 - case= 2 layer gamma 1474.29 15.9892 23572.7 - case= 3 layer muon 0.87 56.4184 49.084 - case= 4 layer neutrino 2.33 46.6376 108.666 - case= 5 layer pion 15.79 1815.97 28674.1 - case= 6 layer neutron 69.98 40.5907 2840.53 - case= 7 layer proton 17.49 166.39 2910.15 - case= 8 layer ion 105.83 1.76189 186.46 - case= 9 layer otherMeson 1.5 3644.65 5466.98 - case= 10 layer otherBaryon 0.36 1370.93 493.534 - case= 11 layer below 20 MeV all 6319.49 0.664248 4197.71 - case= 12 layer below 20 MeV electron 4761.01 0.43133 2053.57 - case= 13 layer below 20 MeV gamma 1388.14 1.26932 1762 - case= 14 layer below 20 MeV muon 0.67 4.35028 2.91469 - case= 15 layer below 20 MeV neutrino 0.21 15.8226 3.32275 - case= 16 layer below 20 MeV pion 0.17 10.9714 1.86513 - case= 17 layer below 20 MeV neutron 56.46 3.71609 209.811 - case= 18 layer below 20 MeV proton 8.82 8.08122 71.2763 - case= 19 layer below 20 MeV ion 103.97 0.89029 92.5634 - case= 20 layer below 20 MeV otherMeson 0.03 8.84657 0.265397 - case= 21 layer below 20 MeV otherBaryon 0.01 13.0265 0.130265 - case= 22 layer above 20 MeV all 205.2 386.322 79273.3 - case= 23 layer above 20 MeV electron 75.24 227.476 17115.3 - case= 24 layer above 20 MeV gamma 86.15 253.171 21810.7 - case= 25 layer above 20 MeV muon 0.2 230.846 46.1693 - case= 26 layer above 20 MeV neutrino 2.12 49.69 105.343 - case= 27 layer above 20 MeV pion 15.62 1835.61 28672.3 - case= 28 layer above 20 MeV neutron 13.52 194.58 2630.72 - case= 29 layer above 20 MeV proton 8.67 327.437 2838.88 - case= 30 layer above 20 MeV ion 1.86 50.4823 93.897 - case= 31 layer above 20 MeV otherMeson 1.47 3718.85 5466.71 - case= 32 layer above 20 MeV otherBaryon 0.35 1409.73 493.404 + case= 0 layer all 7044.33 13.2915 93629.9 + case= 1 layer electron 5201 4.36431 22698.8 + case= 2 layer gamma 1622.28 17.1891 27885.6 + case= 3 layer muon 0.86 77.4368 66.5956 + case= 4 layer neutrino 2.4 52.2263 125.343 + case= 5 layer pion 16.4 1849.18 30326.5 + case= 6 layer neutron 71.54 43.9836 3146.59 + case= 7 layer proton 17.54 152.129 2668.34 + case= 8 layer ion 110.56 1.77623 196.38 + case= 9 layer otherMeson 1.47 3701.62 5441.38 + case= 10 layer otherBaryon 0.28 3836.87 1074.32 + case= 11 layer below 20 MeV all 6810.66 0.670124 4563.99 + case= 12 layer below 20 MeV electron 5115.46 0.434866 2224.54 + case= 13 layer below 20 MeV gamma 1520.64 1.29056 1962.47 + case= 14 layer below 20 MeV muon 0.74 4.30134 3.18299 + case= 15 layer below 20 MeV neutrino 0.22 13.1311 2.88885 + case= 16 layer below 20 MeV pion 0.18 11.7744 2.1194 + case= 17 layer below 20 MeV neutron 56.46 3.69591 208.671 + case= 18 layer below 20 MeV proton 8.22 7.66063 62.9704 + case= 19 layer below 20 MeV ion 108.7 0.892179 96.9799 + case= 20 layer below 20 MeV otherMeson 0.03 1.40029 0.0420088 + case= 21 layer below 20 MeV otherBaryon 0.01 11.668 0.11668 + case= 22 layer above 20 MeV all 233.67 381.161 89065.9 + case= 23 layer above 20 MeV electron 85.54 239.353 20474.3 + case= 24 layer above 20 MeV gamma 101.64 255.048 25923.1 + case= 25 layer above 20 MeV muon 0.12 528.439 63.4126 + case= 26 layer above 20 MeV neutrino 2.18 56.1717 122.454 + case= 27 layer above 20 MeV pion 16.22 1869.57 30324.4 + case= 28 layer above 20 MeV neutron 15.08 194.822 2937.92 + case= 29 layer above 20 MeV proton 9.32 279.546 2605.37 + case= 30 layer above 20 MeV ion 1.86 53.4411 99.4004 + case= 31 layer above 20 MeV otherMeson 1.44 3778.71 5441.34 + case= 32 layer above 20 MeV otherBaryon 0.27 3978.54 1074.21 ============================================================= @@ -1684,7 +1686,7 @@ Index : 5 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=16.690000s Real=16.725027s Sys=0.020000s + User=18.760000s Real=18.861676s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 4 @@ -1697,140 +1699,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0203941 - case= 1 downstream electron 0.000844276 - case= 2 downstream gamma 0.0102727 - case= 3 downstream muon 1.48202e-06 - case= 4 downstream neutrino 0.000480632 - case= 5 downstream pion 0.000140045 - case= 6 downstream neutron 0.00856595 - case= 7 downstream proton 7.69595e-05 + case= 0 downstream all 0.0173362 + case= 1 downstream electron 0.00041581 + case= 2 downstream gamma 0.00723217 + case= 3 downstream muon 3.32977e-06 + case= 4 downstream neutrino 0.000608838 + case= 5 downstream pion 0.0001551 + case= 6 downstream neutron 0.00880006 + case= 7 downstream proton 9.95438e-05 case= 8 downstream ion 0 - case= 9 downstream otherMeson 1.20019e-05 + case= 9 downstream otherMeson 2.13308e-05 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.018327 - case= 12 downstream below 20 MeV electron 0.000651673 - case= 13 downstream below 20 MeV gamma 0.00979707 + case= 11 downstream below 20 MeV all 0.0154135 + case= 12 downstream below 20 MeV electron 0.000337509 + case= 13 downstream below 20 MeV gamma 0.00696806 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.9958e-05 + case= 15 downstream below 20 MeV neutrino 5.85793e-05 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.00783007 - case= 18 downstream below 20 MeV proton 8.19782e-06 + case= 17 downstream below 20 MeV neutron 0.00804312 + case= 18 downstream below 20 MeV proton 4.7268e-06 case= 19 downstream below 20 MeV ion 0 - case= 20 downstream below 20 MeV otherMeson 0 + case= 20 downstream below 20 MeV otherMeson 1.46469e-06 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00206711 - case= 23 downstream above 20 MeV electron 0.000192603 - case= 24 downstream above 20 MeV gamma 0.000475663 - case= 25 downstream above 20 MeV muon 1.48202e-06 - case= 26 downstream above 20 MeV neutrino 0.000440674 - case= 27 downstream above 20 MeV pion 0.000140045 - case= 28 downstream above 20 MeV neutron 0.000735884 - case= 29 downstream above 20 MeV proton 6.87617e-05 + case= 22 downstream above 20 MeV all 0.00192272 + case= 23 downstream above 20 MeV electron 7.83013e-05 + case= 24 downstream above 20 MeV gamma 0.000264106 + case= 25 downstream above 20 MeV muon 3.32977e-06 + case= 26 downstream above 20 MeV neutrino 0.000550259 + case= 27 downstream above 20 MeV pion 0.0001551 + case= 28 downstream above 20 MeV neutron 0.000756943 + case= 29 downstream above 20 MeV proton 9.4817e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.20019e-05 + case= 31 downstream above 20 MeV otherMeson 1.98661e-05 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.00555258 - case= 34 side electron 6.67145e-06 - case= 35 side gamma 0.000502209 - case= 36 side muon 0 - case= 37 side neutrino 0.000410632 + case= 33 side all 0.00550497 + case= 34 side electron 1.04919e-05 + case= 35 side gamma 0.00052061 + case= 36 side muon 3.27622e-07 + case= 37 side neutrino 0.000416348 case= 38 side pion 0 - case= 39 side neutron 0.00463275 - case= 40 side proton 3.19032e-07 + case= 39 side neutron 0.00455612 + case= 40 side proton 1.07676e-06 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00505999 - case= 45 side below 20 MeV electron 6.67145e-06 - case= 46 side below 20 MeV gamma 0.000501407 + case= 44 side below 20 MeV all 0.00498733 + case= 45 side below 20 MeV electron 1.04919e-05 + case= 46 side below 20 MeV gamma 0.000520186 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.52987e-05 + case= 48 side below 20 MeV neutrino 2.67196e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00451661 - case= 51 side below 20 MeV proton 0 + case= 50 side below 20 MeV neutron 0.0044296 + case= 51 side below 20 MeV proton 3.35304e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000492595 + case= 55 side above 20 MeV all 0.000517637 case= 56 side above 20 MeV electron 0 - case= 57 side above 20 MeV gamma 8.01606e-07 - case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000375334 + case= 57 side above 20 MeV gamma 4.23577e-07 + case= 58 side above 20 MeV muon 3.27622e-07 + case= 59 side above 20 MeV neutrino 0.000389629 case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 0.000116141 - case= 62 side above 20 MeV proton 3.19032e-07 + case= 61 side above 20 MeV neutron 0.000126516 + case= 62 side above 20 MeV proton 7.41455e-07 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0134028 - case= 67 upstream electron 6.62836e-05 - case= 68 upstream gamma 0.00246121 + case= 66 upstream all 0.0124806 + case= 67 upstream electron 3.69837e-05 + case= 68 upstream gamma 0.00231598 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.00061294 - case= 71 upstream pion 9.60148e-06 - case= 72 upstream neutron 0.0102487 - case= 73 upstream proton 4.05659e-06 + case= 70 upstream neutrino 0.000666673 + case= 71 upstream pion 7.5975e-06 + case= 72 upstream neutron 0.00945165 + case= 73 upstream proton 1.72499e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0124376 - case= 78 upstream below 20 MeV electron 5.30713e-05 - case= 79 upstream below 20 MeV gamma 0.00244676 + case= 77 upstream below 20 MeV all 0.0115423 + case= 78 upstream below 20 MeV electron 2.63763e-05 + case= 79 upstream below 20 MeV gamma 0.00229719 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 5.20363e-05 - case= 82 upstream below 20 MeV pion 2.44255e-06 - case= 83 upstream below 20 MeV neutron 0.00988333 + case= 81 upstream below 20 MeV neutrino 5.08697e-05 + case= 82 upstream below 20 MeV pion 0 + case= 83 upstream below 20 MeV neutron 0.00916789 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000965176 - case= 89 upstream above 20 MeV electron 1.32123e-05 - case= 90 upstream above 20 MeV gamma 1.44471e-05 + case= 88 upstream above 20 MeV all 0.000938283 + case= 89 upstream above 20 MeV electron 1.06074e-05 + case= 90 upstream above 20 MeV gamma 1.87832e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000560903 - case= 93 upstream above 20 MeV pion 7.15893e-06 - case= 94 upstream above 20 MeV neutron 0.000365398 - case= 95 upstream above 20 MeV proton 4.05659e-06 + case= 92 upstream above 20 MeV neutrino 0.000615803 + case= 93 upstream above 20 MeV pion 7.5975e-06 + case= 94 upstream above 20 MeV neutron 0.000283766 + case= 95 upstream above 20 MeV proton 1.72499e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 56020.5 4.5555 255202 - case= 1 layer electron 41894.2 1.7478 73222.6 - case= 2 layer gamma 11886.5 6.02721 71642.7 - case= 3 layer muon 5.74 13.2156 75.8578 - case= 4 layer neutrino 17.21 36.0571 620.542 - case= 5 layer pion 56.57 1122.54 63501.8 - case= 6 layer neutron 850.26 19.2251 16346.3 - case= 7 layer proton 189.91 61.7382 11724.7 - case= 8 layer ion 1114.38 0.920848 1026.17 - case= 9 layer otherMeson 4.68 3469.7 16238.2 - case= 10 layer otherBaryon 1.09 736.497 802.782 - case= 11 layer below 20 MeV all 54968.3 0.657003 36114.3 - case= 12 layer below 20 MeV electron 41480 0.450108 18670.5 - case= 13 layer below 20 MeV gamma 11513.6 1.21422 13980.1 - case= 14 layer below 20 MeV muon 5.38 4.15333 22.3449 - case= 15 layer below 20 MeV neutrino 1.5 14.8492 22.2737 - case= 16 layer below 20 MeV pion 1.38 12.0125 16.5772 - case= 17 layer below 20 MeV neutron 737.51 2.52418 1861.61 - case= 18 layer below 20 MeV proton 123.62 7.93789 981.282 - case= 19 layer below 20 MeV ion 1104.97 0.5043 557.236 - case= 20 layer below 20 MeV otherMeson 0.17 8.65485 1.47132 - case= 21 layer below 20 MeV otherBaryon 0.07 13.1707 0.921949 - case= 22 layer above 20 MeV all 1052.27 208.205 219087 - case= 23 layer above 20 MeV electron 414.14 131.724 54552.1 - case= 24 layer above 20 MeV gamma 372.89 154.637 57662.6 - case= 25 layer above 20 MeV muon 0.36 148.647 53.5128 - case= 26 layer above 20 MeV neutrino 15.71 38.082 598.268 - case= 27 layer above 20 MeV pion 55.19 1150.3 63485.2 - case= 28 layer above 20 MeV neutron 112.75 128.467 14484.7 - case= 29 layer above 20 MeV proton 66.29 162.067 10743.4 - case= 30 layer above 20 MeV ion 9.41 49.834 468.938 - case= 31 layer above 20 MeV otherMeson 4.51 3600.16 16236.7 - case= 32 layer above 20 MeV otherBaryon 1.02 786.137 801.86 + case= 0 layer all 56154.9 4.48083 251620 + case= 1 layer electron 42042.9 1.72083 72348.7 + case= 2 layer gamma 11905.9 5.95693 70922.6 + case= 3 layer muon 6.23 21.7762 135.666 + case= 4 layer neutrino 18.58 39.4136 732.305 + case= 5 layer pion 57.17 1147.88 65624.6 + case= 6 layer neutron 840.17 19.2382 16163.3 + case= 7 layer proton 183.78 66.4234 12207.3 + case= 8 layer ion 1094.46 0.985651 1078.76 + case= 9 layer otherMeson 4.66 2467.72 11499.6 + case= 10 layer otherBaryon 1.06 856.282 907.659 + case= 11 layer below 20 MeV all 55104.5 0.657065 36207.2 + case= 12 layer below 20 MeV electron 41627.1 0.450632 18758.5 + case= 13 layer below 20 MeV gamma 11534.6 1.21449 14008.6 + case= 14 layer below 20 MeV muon 5.62 4.14447 23.2919 + case= 15 layer below 20 MeV neutrino 1.36 14.6947 19.9848 + case= 16 layer below 20 MeV pion 1.13 12.7355 14.3911 + case= 17 layer below 20 MeV neutron 729.42 2.57176 1875.89 + case= 18 layer below 20 MeV proton 119.59 7.91948 947.091 + case= 19 layer below 20 MeV ion 1085.37 0.512698 556.467 + case= 20 layer below 20 MeV otherMeson 0.29 7.85484 2.27791 + case= 21 layer below 20 MeV otherBaryon 0.04 18.2734 0.730935 + case= 22 layer above 20 MeV all 1050.45 205.068 215413 + case= 23 layer above 20 MeV electron 415.87 128.863 53590.2 + case= 24 layer above 20 MeV gamma 371.29 153.287 56914 + case= 25 layer above 20 MeV muon 0.61 184.219 112.374 + case= 26 layer above 20 MeV neutrino 17.22 41.3659 712.321 + case= 27 layer above 20 MeV pion 56.04 1170.77 65610.2 + case= 28 layer above 20 MeV neutron 110.75 129.006 14287.5 + case= 29 layer above 20 MeV proton 64.19 175.42 11260.2 + case= 30 layer above 20 MeV ion 9.09 57.4575 522.289 + case= 31 layer above 20 MeV otherMeson 4.37 2630.96 11497.3 + case= 32 layer above 20 MeV otherBaryon 1.02 889.145 906.928 ============================================================= @@ -1915,7 +1917,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=17.030000s Real=17.062301s Sys=0.020000s + User=18.730000s Real=18.770743s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 5 @@ -1928,140 +1930,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0113453 - case= 1 downstream electron 0.000249269 - case= 2 downstream gamma 0.00542681 - case= 3 downstream muon 1.30718e-06 - case= 4 downstream neutrino 0.000546338 - case= 5 downstream pion 0.000113231 - case= 6 downstream neutron 0.00489891 - case= 7 downstream proton 9.70854e-05 + case= 0 downstream all 0.0107655 + case= 1 downstream electron 0.00030733 + case= 2 downstream gamma 0.00572515 + case= 3 downstream muon 1.29745e-06 + case= 4 downstream neutrino 0.000412768 + case= 5 downstream pion 8.58296e-05 + case= 6 downstream neutron 0.00418866 + case= 7 downstream proton 3.91266e-05 case= 8 downstream ion 0 - case= 9 downstream otherMeson 1.23217e-05 + case= 9 downstream otherMeson 5.38062e-06 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.00980316 - case= 12 downstream below 20 MeV electron 0.000204986 - case= 13 downstream below 20 MeV gamma 0.00528667 + case= 11 downstream below 20 MeV all 0.0095773 + case= 12 downstream below 20 MeV electron 0.000234305 + case= 13 downstream below 20 MeV gamma 0.00555371 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.76576e-05 - case= 16 downstream below 20 MeV pion 1.27619e-06 - case= 17 downstream below 20 MeV neutron 0.0042615 - case= 18 downstream below 20 MeV proton 1.10673e-05 + case= 15 downstream below 20 MeV neutrino 4.02536e-05 + case= 16 downstream below 20 MeV pion 0 + case= 17 downstream below 20 MeV neutron 0.00374903 + case= 18 downstream below 20 MeV proton 0 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00154211 - case= 23 downstream above 20 MeV electron 4.42831e-05 - case= 24 downstream above 20 MeV gamma 0.000140136 - case= 25 downstream above 20 MeV muon 1.30718e-06 - case= 26 downstream above 20 MeV neutrino 0.000508681 - case= 27 downstream above 20 MeV pion 0.000111954 - case= 28 downstream above 20 MeV neutron 0.000637412 - case= 29 downstream above 20 MeV proton 8.60181e-05 + case= 22 downstream above 20 MeV all 0.00118825 + case= 23 downstream above 20 MeV electron 7.30245e-05 + case= 24 downstream above 20 MeV gamma 0.000171439 + case= 25 downstream above 20 MeV muon 1.29745e-06 + case= 26 downstream above 20 MeV neutrino 0.000372514 + case= 27 downstream above 20 MeV pion 8.58296e-05 + case= 28 downstream above 20 MeV neutron 0.000439633 + case= 29 downstream above 20 MeV proton 3.91266e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.23217e-05 + case= 31 downstream above 20 MeV otherMeson 5.38062e-06 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.00222812 - case= 34 side electron 5.61803e-06 - case= 35 side gamma 0.000419151 + case= 33 side all 0.00227953 + case= 34 side electron 5.32291e-06 + case= 35 side gamma 0.000429708 case= 36 side muon 0 - case= 37 side neutrino 0.000413772 - case= 38 side pion 6.81119e-07 - case= 39 side neutron 0.00138784 - case= 40 side proton 7.3061e-07 + case= 37 side neutrino 0.000438522 + case= 38 side pion 0 + case= 39 side neutron 0.00140531 + case= 40 side proton 6.73173e-07 case= 41 side ion 0 - case= 42 side otherMeson 3.35611e-07 + case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00175163 - case= 45 side below 20 MeV electron 5.30034e-06 - case= 46 side below 20 MeV gamma 0.000418832 + case= 44 side below 20 MeV all 0.00177792 + case= 45 side below 20 MeV electron 5.32291e-06 + case= 46 side below 20 MeV gamma 0.000429392 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.98624e-05 + case= 48 side below 20 MeV neutrino 3.74252e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.0012873 - case= 51 side below 20 MeV proton 3.38071e-07 + case= 50 side below 20 MeV neutron 0.00130542 + case= 51 side below 20 MeV proton 3.57746e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000476495 - case= 56 side above 20 MeV electron 3.17691e-07 - case= 57 side above 20 MeV gamma 3.19132e-07 + case= 55 side above 20 MeV all 0.000501613 + case= 56 side above 20 MeV electron 0 + case= 57 side above 20 MeV gamma 3.1573e-07 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000373909 - case= 60 side above 20 MeV pion 6.81119e-07 - case= 61 side above 20 MeV neutron 0.00010054 - case= 62 side above 20 MeV proton 3.92538e-07 + case= 59 side above 20 MeV neutrino 0.000401097 + case= 60 side above 20 MeV pion 0 + case= 61 side above 20 MeV neutron 9.98843e-05 + case= 62 side above 20 MeV proton 3.15427e-07 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.35611e-07 + case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0115627 - case= 67 upstream electron 0.000125131 - case= 68 upstream gamma 0.00331541 + case= 66 upstream all 0.0129306 + case= 67 upstream electron 8.95186e-05 + case= 68 upstream gamma 0.00374562 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000761193 - case= 71 upstream pion 5.7884e-05 - case= 72 upstream neutron 0.00730144 - case= 73 upstream proton 1.62177e-06 + case= 70 upstream neutrino 0.000768466 + case= 71 upstream pion 1.66182e-05 + case= 72 upstream neutron 0.00828721 + case= 73 upstream proton 2.31916e-05 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0104034 - case= 78 upstream below 20 MeV electron 0.000116823 - case= 79 upstream below 20 MeV gamma 0.0032559 + case= 77 upstream below 20 MeV all 0.0117597 + case= 78 upstream below 20 MeV electron 7.95164e-05 + case= 79 upstream below 20 MeV gamma 0.00372583 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 6.73631e-05 + case= 81 upstream below 20 MeV neutrino 4.86805e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.00696335 - case= 84 upstream below 20 MeV proton 0 + case= 83 upstream below 20 MeV neutron 0.00790329 + case= 84 upstream below 20 MeV proton 2.39745e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00115925 - case= 89 upstream above 20 MeV electron 8.30791e-06 - case= 90 upstream above 20 MeV gamma 5.951e-05 + case= 88 upstream above 20 MeV all 0.00117091 + case= 89 upstream above 20 MeV electron 1.00022e-05 + case= 90 upstream above 20 MeV gamma 1.97975e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.00069383 - case= 93 upstream above 20 MeV pion 5.7884e-05 - case= 94 upstream above 20 MeV neutron 0.000338092 - case= 95 upstream above 20 MeV proton 1.62177e-06 + case= 92 upstream above 20 MeV neutrino 0.000719786 + case= 93 upstream above 20 MeV pion 1.66182e-05 + case= 94 upstream above 20 MeV neutron 0.000383914 + case= 95 upstream above 20 MeV proton 2.07941e-05 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 59405.2 4.30416 255690 - case= 1 layer electron 43941.9 1.66825 73306 - case= 2 layer gamma 13219 5.45184 72068 - case= 3 layer muon 6.12 14.015 85.772 - case= 4 layer neutrino 18.3 36.1702 661.914 - case= 5 layer pion 55.84 1174.94 65608.6 - case= 6 layer neutron 862.12 18.6894 16112.5 - case= 7 layer proton 200.01 60.9237 12185.3 - case= 8 layer ion 1096.09 0.99032 1085.48 - case= 9 layer otherMeson 4.8 2846.8 13664.6 - case= 10 layer otherBaryon 1.02 893.689 911.563 - case= 11 layer below 20 MeV all 58350.1 0.672945 39266.4 - case= 12 layer below 20 MeV electron 43529 0.461142 20073 - case= 13 layer below 20 MeV gamma 12846.5 1.21206 15570.7 - case= 14 layer below 20 MeV muon 5.7 4.12412 23.5075 - case= 15 layer below 20 MeV neutrino 1.7 14.9035 25.3359 - case= 16 layer below 20 MeV pion 1.04 11.3021 11.7541 - case= 17 layer below 20 MeV neutron 748 2.63869 1973.74 - case= 18 layer below 20 MeV proton 131.34 8.06613 1059.41 - case= 19 layer below 20 MeV ion 1086.38 0.484259 526.089 - case= 20 layer below 20 MeV otherMeson 0.31 5.60854 1.73865 - case= 21 layer below 20 MeV otherBaryon 0.09 11.1962 1.00765 - case= 22 layer above 20 MeV all 1055.18 205.106 216423 - case= 23 layer above 20 MeV electron 412.86 128.937 53232.9 - case= 24 layer above 20 MeV gamma 372.58 151.638 56497.2 - case= 25 layer above 20 MeV muon 0.42 148.249 62.2645 - case= 26 layer above 20 MeV neutrino 16.6 38.3481 636.578 - case= 27 layer above 20 MeV pion 54.8 1197.02 65596.9 - case= 28 layer above 20 MeV neutron 114.12 123.894 14138.8 - case= 29 layer above 20 MeV proton 68.67 162.02 11125.9 - case= 30 layer above 20 MeV ion 9.71 57.6097 559.39 - case= 31 layer above 20 MeV otherMeson 4.49 3042.96 13662.9 - case= 32 layer above 20 MeV otherBaryon 0.93 979.092 910.555 + case= 0 layer all 62779.2 4.20746 264141 + case= 1 layer electron 46461.3 1.69878 78927.3 + case= 2 layer gamma 13977.1 5.55115 77589.2 + case= 3 layer muon 6.19 16.8394 104.236 + case= 4 layer neutrino 18.54 36.8096 682.45 + case= 5 layer pion 57.4 1081.2 62060.7 + case= 6 layer neutron 898.97 18.7886 16890.4 + case= 7 layer proton 212.94 63.0201 13419.5 + case= 8 layer ion 1141.64 1.02032 1164.84 + case= 9 layer otherMeson 4.18 3078.65 12868.8 + case= 10 layer otherBaryon 0.94 461.364 433.682 + case= 11 layer below 20 MeV all 61659.8 0.674043 41561.4 + case= 12 layer below 20 MeV electron 46020.8 0.461735 21249.4 + case= 13 layer below 20 MeV gamma 13581.6 1.21682 16526.3 + case= 14 layer below 20 MeV muon 5.75 4.11981 23.6889 + case= 15 layer below 20 MeV neutrino 1.47 14.2103 20.8891 + case= 16 layer below 20 MeV pion 1.19 11.0731 13.177 + case= 17 layer below 20 MeV neutron 778.33 2.63677 2052.28 + case= 18 layer below 20 MeV proton 140.14 8.10974 1136.5 + case= 19 layer below 20 MeV ion 1130.23 0.474494 536.287 + case= 20 layer below 20 MeV otherMeson 0.27 8.71188 2.35221 + case= 21 layer below 20 MeV otherBaryon 0.04 11.1257 0.445029 + case= 22 layer above 20 MeV all 1119.41 198.837 222580 + case= 23 layer above 20 MeV electron 440.46 130.949 57677.9 + case= 24 layer above 20 MeV gamma 395.57 154.367 61062.8 + case= 25 layer above 20 MeV muon 0.44 183.062 80.5472 + case= 26 layer above 20 MeV neutrino 17.07 38.7557 661.56 + case= 27 layer above 20 MeV pion 56.21 1103.85 62047.6 + case= 28 layer above 20 MeV neutron 120.64 122.995 14838.1 + case= 29 layer above 20 MeV proton 72.8 168.722 12283 + case= 30 layer above 20 MeV ion 11.41 55.0876 628.55 + case= 31 layer above 20 MeV otherMeson 3.91 3290.64 12866.4 + case= 32 layer above 20 MeV otherBaryon 0.9 481.374 433.237 ============================================================= @@ -2151,7 +2153,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=47.880000s Real=48.087992s Sys=0.070000s + User=51.370000s Real=51.786639s Sys=0.080000s =============== Run::PrintInfo() =============== RunID = 6 @@ -2164,140 +2166,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.00120259 - case= 1 downstream electron 0 - case= 2 downstream gamma 0.000107451 + case= 0 downstream all 0.0009465 + case= 1 downstream electron 1.66774e-06 + case= 2 downstream gamma 9.36788e-05 case= 3 downstream muon 0 - case= 4 downstream neutrino 0.000245348 - case= 5 downstream pion 2.92659e-06 - case= 6 downstream neutron 0.000845544 - case= 7 downstream proton 1.323e-06 + case= 4 downstream neutrino 0.000204152 + case= 5 downstream pion 3.95472e-06 + case= 6 downstream neutron 0.000641759 + case= 7 downstream proton 1.28786e-06 case= 8 downstream ion 0 case= 9 downstream otherMeson 0 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.000932532 - case= 12 downstream below 20 MeV electron 0 - case= 13 downstream below 20 MeV gamma 0.000107451 + case= 11 downstream below 20 MeV all 0.000743772 + case= 12 downstream below 20 MeV electron 1.66774e-06 + case= 13 downstream below 20 MeV gamma 9.36788e-05 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.64648e-05 + case= 15 downstream below 20 MeV neutrino 2.72045e-05 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.000788616 + case= 17 downstream below 20 MeV neutron 0.000621221 case= 18 downstream below 20 MeV proton 0 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00027006 + case= 22 downstream above 20 MeV all 0.000202728 case= 23 downstream above 20 MeV electron 0 case= 24 downstream above 20 MeV gamma 0 case= 25 downstream above 20 MeV muon 0 - case= 26 downstream above 20 MeV neutrino 0.000208883 - case= 27 downstream above 20 MeV pion 2.92659e-06 - case= 28 downstream above 20 MeV neutron 5.69274e-05 - case= 29 downstream above 20 MeV proton 1.323e-06 + case= 26 downstream above 20 MeV neutrino 0.000176947 + case= 27 downstream above 20 MeV pion 3.95472e-06 + case= 28 downstream above 20 MeV neutron 2.05381e-05 + case= 29 downstream above 20 MeV proton 1.28786e-06 case= 30 downstream above 20 MeV ion 0 case= 31 downstream above 20 MeV otherMeson 0 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.000793001 - case= 34 side electron 3.41521e-07 - case= 35 side gamma 3.37317e-05 + case= 33 side all 0.000741513 + case= 34 side electron 8.7975e-07 + case= 35 side gamma 3.86427e-05 case= 36 side muon 0 - case= 37 side neutrino 0.00035428 + case= 37 side neutrino 0.000325166 case= 38 side pion 0 - case= 39 side neutron 0.000404648 + case= 39 side neutron 0.000376825 case= 40 side proton 0 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.000448421 - case= 45 side below 20 MeV electron 3.41521e-07 - case= 46 side below 20 MeV gamma 3.37317e-05 + case= 44 side below 20 MeV all 0.000424634 + case= 45 side below 20 MeV electron 8.7975e-07 + case= 46 side below 20 MeV gamma 3.86427e-05 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.04878e-05 + case= 48 side below 20 MeV neutrino 2.76892e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00038386 + case= 50 side below 20 MeV neutron 0.000357422 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000344579 + case= 55 side above 20 MeV all 0.000316879 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000323792 + case= 59 side above 20 MeV neutrino 0.000297477 case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 2.07871e-05 + case= 61 side above 20 MeV neutron 1.94023e-05 case= 62 side above 20 MeV proton 0 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0291733 - case= 67 upstream electron 6.50963e-05 - case= 68 upstream gamma 0.00380254 + case= 66 upstream all 0.0317074 + case= 67 upstream electron 7.83117e-05 + case= 68 upstream gamma 0.00370972 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.00110084 - case= 71 upstream pion 3.53502e-05 - case= 72 upstream neutron 0.0241254 - case= 73 upstream proton 4.40606e-05 + case= 70 upstream neutrino 0.00105287 + case= 71 upstream pion 2.30997e-05 + case= 72 upstream neutron 0.0268233 + case= 73 upstream proton 1.56888e-05 case= 74 upstream ion 0 - case= 75 upstream otherMeson 0 + case= 75 upstream otherMeson 4.38185e-06 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0271363 - case= 78 upstream below 20 MeV electron 6.15439e-05 - case= 79 upstream below 20 MeV gamma 0.0037979 + case= 77 upstream below 20 MeV all 0.029655 + case= 78 upstream below 20 MeV electron 7.67871e-05 + case= 79 upstream below 20 MeV gamma 0.0036943 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 0.000111992 + case= 81 upstream below 20 MeV neutrino 8.37725e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.0231619 - case= 84 upstream below 20 MeV proton 2.99292e-06 + case= 83 upstream below 20 MeV neutron 0.0257958 + case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 - case= 86 upstream below 20 MeV otherMeson 0 + case= 86 upstream below 20 MeV otherMeson 4.38185e-06 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00203694 - case= 89 upstream above 20 MeV electron 3.55246e-06 - case= 90 upstream above 20 MeV gamma 4.63542e-06 + case= 88 upstream above 20 MeV all 0.00205239 + case= 89 upstream above 20 MeV electron 1.52453e-06 + case= 90 upstream above 20 MeV gamma 1.54207e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000988844 - case= 93 upstream above 20 MeV pion 3.53502e-05 - case= 94 upstream above 20 MeV neutron 0.000963494 - case= 95 upstream above 20 MeV proton 4.10676e-05 + case= 92 upstream above 20 MeV neutrino 0.000969094 + case= 93 upstream above 20 MeV pion 2.30997e-05 + case= 94 upstream above 20 MeV neutron 0.00102756 + case= 95 upstream above 20 MeV proton 1.56888e-05 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 73342.4 3.5882 263167 - case= 1 layer electron 43446.3 1.87728 81560.9 - case= 2 layer gamma 22946.4 3.61212 82885 - case= 3 layer muon 5.44 15.0086 81.6467 - case= 4 layer neutrino 16.31 36.6139 597.172 - case= 5 layer pion 51.54 1079.07 55615 - case= 6 layer neutron 3375.54 5.78901 19541 - case= 7 layer proton 120.07 86.9535 10440.5 - case= 8 layer ion 3375.49 0.410915 1387.04 - case= 9 layer otherMeson 4.3 2417.94 10397.1 - case= 10 layer otherBaryon 0.99 668.583 661.897 - case= 11 layer below 20 MeV all 72214 0.841541 60771.1 - case= 12 layer below 20 MeV electron 43026.2 0.67094 28868 - case= 13 layer below 20 MeV gamma 22551.4 1.18294 26676.9 - case= 14 layer below 20 MeV muon 5.07 4.11981 20.8875 - case= 15 layer below 20 MeV neutrino 1.46 14.6065 21.3255 - case= 16 layer below 20 MeV pion 1.15 11.9556 13.749 - case= 17 layer below 20 MeV neutron 3226.11 1.30059 4195.86 - case= 18 layer below 20 MeV proton 44.19 12.4979 552.284 - case= 19 layer below 20 MeV ion 3357.99 0.124678 418.667 - case= 20 layer below 20 MeV otherMeson 0.37 6.47149 2.39445 - case= 21 layer below 20 MeV otherBaryon 0.07 14.6171 1.02319 - case= 22 layer above 20 MeV all 1128.38 179.369 202396 - case= 23 layer above 20 MeV electron 420.1 125.429 52692.9 - case= 24 layer above 20 MeV gamma 395.01 142.296 56208.2 - case= 25 layer above 20 MeV muon 0.37 164.214 60.7593 - case= 26 layer above 20 MeV neutrino 14.85 38.7776 575.847 - case= 27 layer above 20 MeV pion 50.39 1103.42 55601.3 - case= 28 layer above 20 MeV neutron 149.43 102.691 15345.2 - case= 29 layer above 20 MeV proton 75.88 130.314 9888.23 - case= 30 layer above 20 MeV ion 17.5 55.3357 968.374 - case= 31 layer above 20 MeV otherMeson 3.93 2644.97 10394.8 - case= 32 layer above 20 MeV otherBaryon 0.92 718.341 660.874 + case= 0 layer all 72782.9 3.58219 260722 + case= 1 layer electron 43107.7 1.8716 80680.2 + case= 2 layer gamma 22789.6 3.60176 82082.6 + case= 3 layer muon 5.01 17.1182 85.7622 + case= 4 layer neutrino 14.97 37.1416 556.009 + case= 5 layer pion 50.31 1092.07 54942.1 + case= 6 layer neutron 3349.68 5.92546 19848.4 + case= 7 layer proton 119.88 89.5097 10730.4 + case= 8 layer ion 3340.62 0.477932 1596.59 + case= 9 layer otherMeson 3.98 2250.11 8955.43 + case= 10 layer otherBaryon 1.18 1054.94 1244.83 + case= 11 layer below 20 MeV all 71655.9 0.843271 60425.4 + case= 12 layer below 20 MeV electron 42686.5 0.671213 28651.8 + case= 13 layer below 20 MeV gamma 22393.3 1.18266 26483.6 + case= 14 layer below 20 MeV muon 4.63 4.14852 19.2077 + case= 15 layer below 20 MeV neutrino 1.26 14.7481 18.5826 + case= 16 layer below 20 MeV pion 1.15 12.8058 14.7266 + case= 17 layer below 20 MeV neutron 3203.51 1.31868 4224.41 + case= 18 layer below 20 MeV proton 45 12.5609 565.241 + case= 19 layer below 20 MeV ion 3320.28 0.134314 445.959 + case= 20 layer below 20 MeV otherMeson 0.21 5.83316 1.22496 + case= 21 layer below 20 MeV otherBaryon 0.05 12.121 0.606049 + case= 22 layer above 20 MeV all 1126.98 177.729 200297 + case= 23 layer above 20 MeV electron 421.14 123.542 52028.4 + case= 24 layer above 20 MeV gamma 396.3 140.295 55599 + case= 25 layer above 20 MeV muon 0.38 175.143 66.5545 + case= 26 layer above 20 MeV neutrino 13.71 39.1996 537.427 + case= 27 layer above 20 MeV pion 49.16 1117.32 54927.4 + case= 28 layer above 20 MeV neutron 146.17 106.889 15624 + case= 29 layer above 20 MeV proton 74.88 135.753 10165.2 + case= 30 layer above 20 MeV ion 20.34 56.5699 1150.63 + case= 31 layer above 20 MeV otherMeson 3.77 2375.12 8954.2 + case= 32 layer above 20 MeV otherBaryon 1.13 1101.08 1244.22 ============================================================= @@ -2392,7 +2394,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=30.200000s Real=30.353682s Sys=0.050000s + User=33.520000s Real=33.598845s Sys=0.050000s =============== Run::PrintInfo() =============== RunID = 7 @@ -2405,140 +2407,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0324024 - case= 1 downstream electron 0.00011655 - case= 2 downstream gamma 0.00167306 - case= 3 downstream muon 0 - case= 4 downstream neutrino 0.000304877 - case= 5 downstream pion 8.28174e-05 - case= 6 downstream neutron 0.030156 - case= 7 downstream proton 5.70923e-05 + case= 0 downstream all 0.0347884 + case= 1 downstream electron 7.00997e-05 + case= 2 downstream gamma 0.000979457 + case= 3 downstream muon 2.6206e-06 + case= 4 downstream neutrino 0.000368019 + case= 5 downstream pion 8.64346e-05 + case= 6 downstream neutron 0.0332259 + case= 7 downstream proton 5.04868e-05 case= 8 downstream ion 0 - case= 9 downstream otherMeson 1.20222e-05 + case= 9 downstream otherMeson 5.36322e-06 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.031334 - case= 12 downstream below 20 MeV electron 9.03315e-05 - case= 13 downstream below 20 MeV gamma 0.00164889 + case= 11 downstream below 20 MeV all 0.0336361 + case= 12 downstream below 20 MeV electron 6.44361e-05 + case= 13 downstream below 20 MeV gamma 0.000960268 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 2.35558e-05 + case= 15 downstream below 20 MeV neutrino 1.85139e-05 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.0295713 - case= 18 downstream below 20 MeV proton 0 + case= 17 downstream below 20 MeV neutron 0.0325909 + case= 18 downstream below 20 MeV proton 2.01249e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00106836 - case= 23 downstream above 20 MeV electron 2.62188e-05 - case= 24 downstream above 20 MeV gamma 2.41745e-05 - case= 25 downstream above 20 MeV muon 0 - case= 26 downstream above 20 MeV neutrino 0.000281321 - case= 27 downstream above 20 MeV pion 8.28174e-05 - case= 28 downstream above 20 MeV neutron 0.000584711 - case= 29 downstream above 20 MeV proton 5.70923e-05 + case= 22 downstream above 20 MeV all 0.0011523 + case= 23 downstream above 20 MeV electron 5.66357e-06 + case= 24 downstream above 20 MeV gamma 1.91893e-05 + case= 25 downstream above 20 MeV muon 2.6206e-06 + case= 26 downstream above 20 MeV neutrino 0.000349505 + case= 27 downstream above 20 MeV pion 8.64346e-05 + case= 28 downstream above 20 MeV neutron 0.000635051 + case= 29 downstream above 20 MeV proton 4.84743e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.20222e-05 + case= 31 downstream above 20 MeV otherMeson 5.36322e-06 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.0296091 - case= 34 side electron 7.41393e-07 - case= 35 side gamma 0.000121359 - case= 36 side muon 0 - case= 37 side neutrino 0.000371616 - case= 38 side pion 3.18053e-07 - case= 39 side neutron 0.0291127 - case= 40 side proton 1.93896e-06 + case= 33 side all 0.0303042 + case= 34 side electron 2.29384e-06 + case= 35 side gamma 0.000159388 + case= 36 side muon 4.20032e-07 + case= 37 side neutrino 0.000356205 + case= 38 side pion 0 + case= 39 side neutron 0.0297848 + case= 40 side proton 1.05991e-06 case= 41 side ion 0 - case= 42 side otherMeson 3.90421e-07 + case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.0291111 - case= 45 side below 20 MeV electron 7.41393e-07 - case= 46 side below 20 MeV gamma 0.000121359 + case= 44 side below 20 MeV all 0.0298177 + case= 45 side below 20 MeV electron 2.29384e-06 + case= 46 side below 20 MeV gamma 0.000159388 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.14559e-05 + case= 48 side below 20 MeV neutrino 2.56105e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.0289576 + case= 50 side below 20 MeV neutron 0.0296304 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000497941 + case= 55 side above 20 MeV all 0.000486449 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 - case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.00034016 - case= 60 side above 20 MeV pion 3.18053e-07 - case= 61 side above 20 MeV neutron 0.000155134 - case= 62 side above 20 MeV proton 1.93896e-06 + case= 58 side above 20 MeV muon 4.20032e-07 + case= 59 side above 20 MeV neutrino 0.000330594 + case= 60 side above 20 MeV pion 0 + case= 61 side above 20 MeV neutron 0.000154375 + case= 62 side above 20 MeV proton 1.05991e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.90421e-07 + case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0677284 - case= 67 upstream electron 3.81787e-05 - case= 68 upstream gamma 0.00160714 + case= 66 upstream all 0.0685416 + case= 67 upstream electron 4.29018e-05 + case= 68 upstream gamma 0.00167196 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000733094 - case= 71 upstream pion 2.00265e-05 - case= 72 upstream neutron 0.0653245 - case= 73 upstream proton 1.64709e-06 - case= 74 upstream ion 3.79453e-06 + case= 70 upstream neutrino 0.000675646 + case= 71 upstream pion 6.98955e-05 + case= 72 upstream neutron 0.0660681 + case= 73 upstream proton 1.177e-05 + case= 74 upstream ion 1.42195e-06 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0661493 - case= 78 upstream below 20 MeV electron 3.68194e-05 - case= 79 upstream below 20 MeV gamma 0.00160505 + case= 77 upstream below 20 MeV all 0.066955 + case= 78 upstream below 20 MeV electron 4.29018e-05 + case= 79 upstream below 20 MeV gamma 0.00166495 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 6.85607e-05 - case= 82 upstream below 20 MeV pion 1.40623e-06 - case= 83 upstream below 20 MeV neutron 0.0644375 + case= 81 upstream below 20 MeV neutrino 6.16255e-05 + case= 82 upstream below 20 MeV pion 0 + case= 83 upstream below 20 MeV neutron 0.0651841 case= 84 upstream below 20 MeV proton 0 - case= 85 upstream below 20 MeV ion 0 + case= 85 upstream below 20 MeV ion 1.42195e-06 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00157906 - case= 89 upstream above 20 MeV electron 1.35936e-06 - case= 90 upstream above 20 MeV gamma 2.0935e-06 + case= 88 upstream above 20 MeV all 0.00158662 + case= 89 upstream above 20 MeV electron 0 + case= 90 upstream above 20 MeV gamma 7.00969e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000664533 - case= 93 upstream above 20 MeV pion 1.86203e-05 - case= 94 upstream above 20 MeV neutron 0.000887017 - case= 95 upstream above 20 MeV proton 1.64709e-06 - case= 96 upstream above 20 MeV ion 3.79453e-06 + case= 92 upstream above 20 MeV neutrino 0.00061402 + case= 93 upstream above 20 MeV pion 6.98955e-05 + case= 94 upstream above 20 MeV neutron 0.000883921 + case= 95 upstream above 20 MeV proton 1.177e-05 + case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 46203.3 5.15955 238389 - case= 1 layer electron 27301.9 2.58387 70544.5 - case= 2 layer gamma 15720.9 4.5252 71140 - case= 3 layer muon 5.24 13.0536 68.4008 - case= 4 layer neutrino 15.67 35.7885 560.805 - case= 5 layer pion 48.34 1111.06 53708.4 - case= 6 layer neutron 1953.22 8.85639 17298.5 - case= 7 layer proton 111.53 99.5212 11099.6 - case= 8 layer ion 1041.52 1.41719 1476.03 - case= 9 layer otherMeson 3.9 2892.51 11280.8 - case= 10 layer otherBaryon 1.15 1053.61 1211.65 - case= 11 layer below 20 MeV all 45125.5 0.994129 44860.6 - case= 12 layer below 20 MeV electron 26901.2 0.801812 21569.7 - case= 13 layer below 20 MeV gamma 15343.1 1.21879 18700 - case= 14 layer below 20 MeV muon 4.91 4.1652 20.4511 - case= 15 layer below 20 MeV neutrino 1.41 13.5305 19.078 - case= 16 layer below 20 MeV pion 1.16 12.1105 14.0482 - case= 17 layer below 20 MeV neutron 1816 2.04898 3720.96 - case= 18 layer below 20 MeV proton 36.99 12.6949 469.585 - case= 19 layer below 20 MeV ion 1020.28 0.33683 343.66 - case= 20 layer below 20 MeV otherMeson 0.31 6.06026 1.87868 - case= 21 layer below 20 MeV otherBaryon 0.11 11.1726 1.22898 - case= 22 layer above 20 MeV all 1077.83 179.553 193528 - case= 23 layer above 20 MeV electron 400.69 122.226 48974.8 - case= 24 layer above 20 MeV gamma 377.74 138.826 52440 - case= 25 layer above 20 MeV muon 0.33 145.302 47.9497 - case= 26 layer above 20 MeV neutrino 14.26 37.9893 541.727 - case= 27 layer above 20 MeV pion 47.18 1138.07 53694.4 - case= 28 layer above 20 MeV neutron 137.22 98.947 13577.5 - case= 29 layer above 20 MeV proton 74.54 142.608 10630 - case= 30 layer above 20 MeV ion 21.24 53.3131 1132.37 - case= 31 layer above 20 MeV otherMeson 3.59 3141.76 11278.9 - case= 32 layer above 20 MeV otherBaryon 1.04 1163.87 1210.42 + case= 0 layer all 47056 5.06648 238408 + case= 1 layer electron 27790.3 2.58406 71811.8 + case= 2 layer gamma 16005.7 4.5409 72680.2 + case= 3 layer muon 5.23 19.7061 103.063 + case= 4 layer neutrino 15.6 36.6157 571.205 + case= 5 layer pion 49.78 1041.04 51823.1 + case= 6 layer neutron 2007.05 9.47335 19013.5 + case= 7 layer proton 106.17 103.435 10981.7 + case= 8 layer ion 1070.86 1.61484 1729.27 + case= 9 layer otherMeson 4.31 2023.72 8722.22 + case= 10 layer otherBaryon 1.06 917.223 972.257 + case= 11 layer below 20 MeV all 45965.5 0.995589 45762.7 + case= 12 layer below 20 MeV electron 27386.4 0.803221 21997.3 + case= 13 layer below 20 MeV gamma 15623.9 1.22053 19069.4 + case= 14 layer below 20 MeV muon 4.85 4.13601 20.0597 + case= 15 layer below 20 MeV neutrino 1.17 14.9283 17.4661 + case= 16 layer below 20 MeV pion 1.15 12.0722 13.883 + case= 17 layer below 20 MeV neutron 1866.69 2.04442 3816.3 + case= 18 layer below 20 MeV proton 35.87 12.6021 452.036 + case= 19 layer below 20 MeV ion 1044.93 0.357069 373.112 + case= 20 layer below 20 MeV otherMeson 0.44 5.75967 2.53426 + case= 21 layer below 20 MeV otherBaryon 0.07 7.98856 0.559199 + case= 22 layer above 20 MeV all 1090.55 176.65 192646 + case= 23 layer above 20 MeV electron 403.86 123.346 49814.5 + case= 24 layer above 20 MeV gamma 381.8 140.416 53610.8 + case= 25 layer above 20 MeV muon 0.38 218.43 83.0034 + case= 26 layer above 20 MeV neutrino 14.43 38.3742 553.739 + case= 27 layer above 20 MeV pion 48.63 1065.38 51809.2 + case= 28 layer above 20 MeV neutron 140.36 108.273 15197.2 + case= 29 layer above 20 MeV proton 70.3 149.782 10529.6 + case= 30 layer above 20 MeV ion 25.93 52.3007 1356.16 + case= 31 layer above 20 MeV otherMeson 3.87 2253.15 8719.69 + case= 32 layer above 20 MeV otherBaryon 0.99 981.512 971.697 ============================================================= @@ -2638,7 +2640,7 @@ Index : 9 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=27.290000s Real=27.351542s Sys=0.040000s + User=28.380000s Real=28.422631s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 8 @@ -2651,140 +2653,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0178156 - case= 1 downstream electron 0.000355062 - case= 2 downstream gamma 0.00431534 - case= 3 downstream muon 1.28327e-06 - case= 4 downstream neutrino 0.000509917 - case= 5 downstream pion 0.000169781 - case= 6 downstream neutron 0.0123454 - case= 7 downstream proton 8.3469e-05 - case= 8 downstream ion 3.22734e-06 - case= 9 downstream otherMeson 2.80401e-05 - case= 10 downstream otherBaryon 4.02305e-06 - case= 11 downstream below 20 MeV all 0.0159922 - case= 12 downstream below 20 MeV electron 0.000281595 - case= 13 downstream below 20 MeV gamma 0.00415889 + case= 0 downstream all 0.0177537 + case= 1 downstream electron 0.000245006 + case= 2 downstream gamma 0.00457439 + case= 3 downstream muon 5.00668e-06 + case= 4 downstream neutrino 0.000482358 + case= 5 downstream pion 0.000197436 + case= 6 downstream neutron 0.0121616 + case= 7 downstream proton 7.70258e-05 + case= 8 downstream ion 3.10241e-06 + case= 9 downstream otherMeson 6.50335e-06 + case= 10 downstream otherBaryon 1.2765e-06 + case= 11 downstream below 20 MeV all 0.0159091 + case= 12 downstream below 20 MeV electron 0.000195842 + case= 13 downstream below 20 MeV gamma 0.00445252 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.76399e-05 - case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.0115126 - case= 18 downstream below 20 MeV proton 1.47504e-06 + case= 15 downstream below 20 MeV neutrino 2.92667e-05 + case= 16 downstream below 20 MeV pion 3.5878e-06 + case= 17 downstream below 20 MeV neutron 0.0112255 + case= 18 downstream below 20 MeV proton 2.39089e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00182333 - case= 23 downstream above 20 MeV electron 7.34667e-05 - case= 24 downstream above 20 MeV gamma 0.000156453 - case= 25 downstream above 20 MeV muon 1.28327e-06 - case= 26 downstream above 20 MeV neutrino 0.000472278 - case= 27 downstream above 20 MeV pion 0.000169781 - case= 28 downstream above 20 MeV neutron 0.000832782 - case= 29 downstream above 20 MeV proton 8.19939e-05 - case= 30 downstream above 20 MeV ion 3.22734e-06 - case= 31 downstream above 20 MeV otherMeson 2.80401e-05 - case= 32 downstream above 20 MeV otherBaryon 4.02305e-06 - case= 33 side all 0.00503012 - case= 34 side electron 3.90612e-06 - case= 35 side gamma 0.00049953 - case= 36 side muon 3.66536e-07 - case= 37 side neutrino 0.000370823 - case= 38 side pion 4.58889e-07 - case= 39 side neutron 0.00415365 - case= 40 side proton 1.38619e-06 - case= 41 side ion 0 - case= 42 side otherMeson 0 + case= 22 downstream above 20 MeV all 0.00184458 + case= 23 downstream above 20 MeV electron 4.91641e-05 + case= 24 downstream above 20 MeV gamma 0.000121873 + case= 25 downstream above 20 MeV muon 5.00668e-06 + case= 26 downstream above 20 MeV neutrino 0.000453091 + case= 27 downstream above 20 MeV pion 0.000193848 + case= 28 downstream above 20 MeV neutron 0.000936078 + case= 29 downstream above 20 MeV proton 7.46349e-05 + case= 30 downstream above 20 MeV ion 3.10241e-06 + case= 31 downstream above 20 MeV otherMeson 6.50335e-06 + case= 32 downstream above 20 MeV otherBaryon 1.2765e-06 + case= 33 side all 0.0047671 + case= 34 side electron 3.97335e-06 + case= 35 side gamma 0.000455424 + case= 36 side muon 0 + case= 37 side neutrino 0.000348259 + case= 38 side pion 7.09566e-07 + case= 39 side neutron 0.00395545 + case= 40 side proton 1.90205e-06 + case= 41 side ion 1.02601e-06 + case= 42 side otherMeson 3.57089e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00447445 - case= 45 side below 20 MeV electron 3.90612e-06 - case= 46 side below 20 MeV gamma 0.00049953 + case= 44 side below 20 MeV all 0.00424623 + case= 45 side below 20 MeV electron 3.97335e-06 + case= 46 side below 20 MeV gamma 0.000455424 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.23513e-05 + case= 48 side below 20 MeV neutrino 2.88358e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00393866 - case= 51 side below 20 MeV proton 0 + case= 50 side below 20 MeV neutron 0.00375764 + case= 51 side below 20 MeV proton 3.56172e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000555673 + case= 55 side above 20 MeV all 0.000520866 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 - case= 58 side above 20 MeV muon 3.66536e-07 - case= 59 side above 20 MeV neutrino 0.000338472 - case= 60 side above 20 MeV pion 4.58889e-07 - case= 61 side above 20 MeV neutron 0.00021499 - case= 62 side above 20 MeV proton 1.38619e-06 - case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 0 + case= 58 side above 20 MeV muon 0 + case= 59 side above 20 MeV neutrino 0.000319423 + case= 60 side above 20 MeV pion 7.09566e-07 + case= 61 side above 20 MeV neutron 0.000197804 + case= 62 side above 20 MeV proton 1.54588e-06 + case= 63 side above 20 MeV ion 1.02601e-06 + case= 64 side above 20 MeV otherMeson 3.57089e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0186354 - case= 67 upstream electron 1.97464e-05 - case= 68 upstream gamma 0.00191698 - case= 69 upstream muon 4.88984e-06 - case= 70 upstream neutrino 0.000625343 - case= 71 upstream pion 1.35153e-05 - case= 72 upstream neutron 0.01605 - case= 73 upstream proton 4.96891e-06 + case= 66 upstream all 0.01872 + case= 67 upstream electron 4.38657e-05 + case= 68 upstream gamma 0.00237505 + case= 69 upstream muon 0 + case= 70 upstream neutrino 0.000588566 + case= 71 upstream pion 1.19719e-05 + case= 72 upstream neutron 0.0156948 + case= 73 upstream proton 5.69439e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0173723 - case= 78 upstream below 20 MeV electron 1.97464e-05 - case= 79 upstream below 20 MeV gamma 0.0019139 + case= 77 upstream below 20 MeV all 0.0176343 + case= 78 upstream below 20 MeV electron 4.38657e-05 + case= 79 upstream below 20 MeV gamma 0.00236834 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 4.13337e-05 + case= 81 upstream below 20 MeV neutrino 5.96616e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.015395 - case= 84 upstream below 20 MeV proton 2.29434e-06 + case= 83 upstream below 20 MeV neutron 0.0151625 + case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00126312 + case= 88 upstream above 20 MeV all 0.00108564 case= 89 upstream above 20 MeV electron 0 - case= 90 upstream above 20 MeV gamma 3.08505e-06 - case= 91 upstream above 20 MeV muon 4.88984e-06 - case= 92 upstream above 20 MeV neutrino 0.000584009 - case= 93 upstream above 20 MeV pion 1.35153e-05 - case= 94 upstream above 20 MeV neutron 0.000654947 - case= 95 upstream above 20 MeV proton 2.67457e-06 + case= 90 upstream above 20 MeV gamma 6.71316e-06 + case= 91 upstream above 20 MeV muon 0 + case= 92 upstream above 20 MeV neutrino 0.000528905 + case= 93 upstream above 20 MeV pion 1.19719e-05 + case= 94 upstream above 20 MeV neutron 0.000532355 + case= 95 upstream above 20 MeV proton 5.69439e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 54627.9 4.55175 248652 - case= 1 layer electron 32549.9 2.30417 75000.7 - case= 2 layer gamma 17225.5 4.41131 75987.1 - case= 3 layer muon 5.4 17.1356 92.5324 - case= 4 layer neutrino 16.06 36.8848 592.369 - case= 5 layer pion 50.43 1089.32 54934.5 - case= 6 layer neutron 1650.04 9.77441 16128.2 - case= 7 layer proton 121.35 87.4115 10607.4 - case= 8 layer ion 3004.18 0.561377 1686.48 - case= 9 layer otherMeson 4.07 3058.78 12449.2 - case= 10 layer otherBaryon 0.91 1289.9 1173.81 - case= 11 layer below 20 MeV all 53564.3 0.909755 48730.4 - case= 12 layer below 20 MeV electron 32144.7 0.736392 23671.1 - case= 13 layer below 20 MeV gamma 16844.8 1.22716 20671.2 - case= 14 layer below 20 MeV muon 5.01 4.17568 20.9202 - case= 15 layer below 20 MeV neutrino 1.33 15.1907 20.2036 - case= 16 layer below 20 MeV pion 0.93 12.5115 11.6357 - case= 17 layer below 20 MeV neutron 1525.8 1.92905 2943.34 - case= 18 layer below 20 MeV proton 53.45 9.62979 514.712 - case= 19 layer below 20 MeV ion 2987.95 0.292718 874.627 - case= 20 layer below 20 MeV otherMeson 0.25 7.87559 1.9689 - case= 21 layer below 20 MeV otherBaryon 0.05 12.9222 0.646109 - case= 22 layer above 20 MeV all 1063.63 187.962 199922 - case= 23 layer above 20 MeV electron 405.21 126.674 51329.5 - case= 24 layer above 20 MeV gamma 380.75 145.281 55315.9 - case= 25 layer above 20 MeV muon 0.39 183.621 71.6122 - case= 26 layer above 20 MeV neutrino 14.73 38.8436 572.166 - case= 27 layer above 20 MeV pion 49.5 1109.55 54922.9 - case= 28 layer above 20 MeV neutron 124.24 106.124 13184.8 - case= 29 layer above 20 MeV proton 67.9 148.64 10092.7 - case= 30 layer above 20 MeV ion 16.23 50.0216 811.851 - case= 31 layer above 20 MeV otherMeson 3.82 3258.44 12447.2 - case= 32 layer above 20 MeV otherBaryon 0.86 1364.14 1173.16 + case= 0 layer all 55122.5 4.5663 251706 + case= 1 layer electron 32958.6 2.37418 78249.7 + case= 2 layer gamma 17495.1 4.50346 78788.5 + case= 3 layer muon 5.12 20.4802 104.858 + case= 4 layer neutrino 15.25 38.7992 591.689 + case= 5 layer pion 49.54 1082.9 53646.6 + case= 6 layer neutron 1589.76 10.4469 16608 + case= 7 layer proton 113.43 91.5118 10380.2 + case= 8 layer ion 2890.66 0.613255 1772.71 + case= 9 layer otherMeson 4.01 2635.47 10568.2 + case= 10 layer otherBaryon 0.99 1005.21 995.156 + case= 11 layer below 20 MeV all 54035.7 0.916521 49524.8 + case= 12 layer below 20 MeV electron 32535 0.743682 24195.7 + case= 13 layer below 20 MeV gamma 17097.1 1.22929 21017.3 + case= 14 layer below 20 MeV muon 4.69 4.14957 19.4615 + case= 15 layer below 20 MeV neutrino 1.25 14.3533 17.9416 + case= 16 layer below 20 MeV pion 1.06 12.9351 13.7112 + case= 17 layer below 20 MeV neutron 1471.82 1.9546 2876.82 + case= 18 layer below 20 MeV proton 51.41 9.58977 493.01 + case= 19 layer below 20 MeV ion 2872.97 0.309361 888.783 + case= 20 layer below 20 MeV otherMeson 0.33 5.60471 1.84955 + case= 21 layer below 20 MeV otherBaryon 0.04 6.71953 0.268781 + case= 22 layer above 20 MeV all 1086.8 186.033 202181 + case= 23 layer above 20 MeV electron 423.61 127.603 54054 + case= 24 layer above 20 MeV gamma 398 145.154 57771.2 + case= 25 layer above 20 MeV muon 0.43 198.598 85.397 + case= 26 layer above 20 MeV neutrino 14 40.9819 573.747 + case= 27 layer above 20 MeV pion 48.48 1106.29 53632.9 + case= 28 layer above 20 MeV neutron 117.94 116.425 13731.2 + case= 29 layer above 20 MeV proton 62.02 159.419 9887.18 + case= 30 layer above 20 MeV ion 17.69 49.9677 883.929 + case= 31 layer above 20 MeV otherMeson 3.68 2871.3 10566.4 + case= 32 layer above 20 MeV otherBaryon 0.95 1047.25 994.887 ============================================================= ================== Deleting memory pools =================== diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out b/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out index 896eeca589..97f0c01b9a 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out +++ b/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out @@ -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 @@ -83,7 +83,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 ======== @@ -736,6 +736,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 @@ -752,6 +753,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 @@ -799,7 +801,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.650000s Real=0.660016s Sys=0.010000s + User=0.800000s Real=0.809224s Sys=0.000000s =============== Run::PrintInfo() =============== RunID = 0 @@ -811,107 +813,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00207823 - case= 1 forward electron 0.00021474 - case= 2 forward gamma 0.00159746 - case= 3 forward muon 1.15311e-06 - case= 4 forward neutrino 4.45917e-05 - case= 5 forward pion 8.28466e-05 - case= 6 forward neutron 0.000103734 - case= 7 forward proton 2.3378e-05 - case= 8 forward ion 8.50274e-07 - case= 9 forward otherMeson 8.5774e-06 - case= 10 forward otherBaryon 8.9959e-07 - case= 11 backward all 4.88406e-05 - case= 12 backward electron 9.99137e-07 - case= 13 backward gamma 3.16787e-05 + case= 0 forward all 0.00240168 + case= 1 forward electron 0.000246062 + case= 2 forward gamma 0.00184717 + case= 3 forward muon 1.29104e-06 + case= 4 forward neutrino 4.74302e-05 + case= 5 forward pion 9.81713e-05 + case= 6 forward neutron 0.000122828 + case= 7 forward proton 2.92625e-05 + case= 8 forward ion 5.02247e-07 + case= 9 forward otherMeson 8.16965e-06 + case= 10 forward otherBaryon 7.88687e-07 + case= 11 backward all 8.03461e-05 + case= 12 backward electron 3.75717e-06 + case= 13 backward gamma 5.78873e-05 case= 14 backward muon 0 - case= 15 backward neutrino 1.22858e-05 - case= 16 backward pion 1.64266e-07 - case= 17 backward neutron 3.71273e-06 + case= 15 backward neutrino 1.29719e-05 + case= 16 backward pion 0 + case= 17 backward neutron 5.72971e-06 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00147679 - case= 23 below 20 MeV forward electron 9.07998e-05 - case= 24 below 20 MeV forward gamma 0.00134811 - case= 25 below 20 MeV forward muon 1.76541e-07 - case= 26 below 20 MeV forward neutrino 4.02213e-06 - case= 27 below 20 MeV forward pion 1.04189e-06 - case= 28 below 20 MeV forward neutron 3.21297e-05 - case= 29 below 20 MeV forward proton 1.98991e-07 - case= 30 below 20 MeV forward ion 3.07896e-07 - case= 31 below 20 MeV forward otherMeson 0 + case= 22 below 20 MeV forward all 0.00169856 + case= 23 below 20 MeV forward electron 0.000105275 + case= 24 below 20 MeV forward gamma 0.00155594 + case= 25 below 20 MeV forward muon 0 + case= 26 below 20 MeV forward neutrino 4.9113e-06 + case= 27 below 20 MeV forward pion 3.70185e-07 + case= 28 below 20 MeV forward neutron 3.16408e-05 + case= 29 below 20 MeV forward proton 2.44462e-07 + case= 30 below 20 MeV forward ion 0 + case= 31 below 20 MeV forward otherMeson 1.78623e-07 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 3.1586e-05 - case= 34 below 20 MeV backward electron 6.77938e-07 - case= 35 below 20 MeV backward gamma 2.96526e-05 + case= 33 below 20 MeV backward all 5.77251e-05 + case= 34 below 20 MeV backward electron 2.01835e-06 + case= 35 below 20 MeV backward gamma 5.3077e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 6.65708e-07 + case= 37 below 20 MeV backward neutrino 1.00868e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 5.89774e-07 + case= 39 below 20 MeV backward neutron 1.62104e-06 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000601441 - case= 45 above 20 MeV forward electron 0.00012394 - case= 46 above 20 MeV forward gamma 0.000249347 - case= 47 above 20 MeV forward muon 9.7657e-07 - case= 48 above 20 MeV forward neutrino 4.05695e-05 - case= 49 above 20 MeV forward pion 8.18047e-05 - case= 50 above 20 MeV forward neutron 7.16047e-05 - case= 51 above 20 MeV forward proton 2.3179e-05 - case= 52 above 20 MeV forward ion 5.42378e-07 - case= 53 above 20 MeV forward otherMeson 8.5774e-06 - case= 54 above 20 MeV forward otherBaryon 8.9959e-07 - case= 55 above 20 MeV backward all 1.72545e-05 - case= 56 above 20 MeV backward electron 3.212e-07 - case= 57 above 20 MeV backward gamma 2.02604e-06 + case= 44 above 20 MeV forward all 0.000703121 + case= 45 above 20 MeV forward electron 0.000140787 + case= 46 above 20 MeV forward gamma 0.000291236 + case= 47 above 20 MeV forward muon 1.29104e-06 + case= 48 above 20 MeV forward neutrino 4.25189e-05 + case= 49 above 20 MeV forward pion 9.78011e-05 + case= 50 above 20 MeV forward neutron 9.1187e-05 + case= 51 above 20 MeV forward proton 2.9018e-05 + case= 52 above 20 MeV forward ion 5.02247e-07 + case= 53 above 20 MeV forward otherMeson 7.99103e-06 + case= 54 above 20 MeV forward otherBaryon 7.88687e-07 + case= 55 above 20 MeV backward all 2.2621e-05 + case= 56 above 20 MeV backward electron 1.73883e-06 + case= 57 above 20 MeV backward gamma 4.81026e-06 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 1.162e-05 - case= 60 above 20 MeV backward pion 1.64266e-07 - case= 61 above 20 MeV backward neutron 3.12296e-06 + case= 59 above 20 MeV backward neutrino 1.19632e-05 + case= 60 above 20 MeV backward pion 0 + case= 61 above 20 MeV backward neutron 4.10867e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 1958.53 55.3909 108485 - case= 1 sphere electron 1618.37 4.34478 7031.46 - case= 2 sphere gamma 221.57 59.4446 13171.1 - case= 3 sphere muon 0.95 45.8004 43.5104 - case= 4 sphere neutrino 2.71 40.0595 108.561 - case= 5 sphere pion 16.54 4597.47 76042.2 - case= 6 sphere neutron 17.41 123.24 2145.61 - case= 7 sphere proton 39.22 56.5102 2216.33 - case= 8 sphere ion 40.02 4.85356 194.239 - case= 9 sphere otherMeson 1.5 4827.15 7240.73 - case= 10 sphere otherBaryon 0.24 1212.46 290.99 - case= 11 sphere below 20 MeV all 1874.93 0.546753 1025.12 - case= 12 sphere below 20 MeV electron 1598.76 0.305378 488.226 - case= 13 sphere below 20 MeV gamma 195.29 1.38787 271.037 - case= 14 sphere below 20 MeV muon 0.82 4.2907 3.51837 - case= 15 sphere below 20 MeV neutrino 0.21 13.9824 2.93631 - case= 16 sphere below 20 MeV pion 0.18 6.45384 1.16169 - case= 17 sphere below 20 MeV neutron 9.24 6.4165 59.2885 - case= 18 sphere below 20 MeV proton 32.19 2.69087 86.6193 - case= 19 sphere below 20 MeV ion 38.23 2.93654 112.264 - case= 20 sphere below 20 MeV otherMeson 0 0 0 - case= 21 sphere below 20 MeV otherBaryon 0.01 7.3026 0.073026 - case= 22 sphere above 20 MeV all 83.6 1285.4 107460 - case= 23 sphere above 20 MeV electron 19.61 333.668 6543.24 - case= 24 sphere above 20 MeV gamma 26.28 490.872 12900.1 - case= 25 sphere above 20 MeV muon 0.13 307.631 39.992 - case= 26 sphere above 20 MeV neutrino 2.5 42.25 105.625 - case= 27 sphere above 20 MeV pion 16.36 4647.98 76041 - case= 28 sphere above 20 MeV neutron 8.17 255.363 2086.32 - case= 29 sphere above 20 MeV proton 7.03 302.946 2129.71 - case= 30 sphere above 20 MeV ion 1.79 45.7963 81.9754 - case= 31 sphere above 20 MeV otherMeson 1.5 4827.15 7240.73 - case= 32 sphere above 20 MeV otherBaryon 0.23 1264.86 290.917 + case= 0 sphere all 2351.73 52.1382 122615 + case= 1 sphere electron 1937.97 4.47777 8677.79 + case= 2 sphere gamma 260.34 60.0137 15624 + case= 3 sphere muon 1.08 50.7374 54.7964 + case= 4 sphere neutrino 3.1 39.6671 122.968 + case= 5 sphere pion 19.5 4247.67 82829.7 + case= 6 sphere neutron 23.56 127.555 3005.19 + case= 7 sphere proton 52.95 61.1011 3235.31 + case= 8 sphere ion 51.39 4.52796 232.692 + case= 9 sphere otherMeson 1.55 4617.13 7156.55 + case= 10 sphere otherBaryon 0.29 5779.37 1676.02 + case= 11 sphere below 20 MeV all 2250.81 0.545516 1227.85 + case= 12 sphere below 20 MeV electron 1915.01 0.294085 563.176 + case= 13 sphere below 20 MeV gamma 229.41 1.41272 324.092 + case= 14 sphere below 20 MeV muon 0.95 4.11981 3.91382 + case= 15 sphere below 20 MeV neutrino 0.29 14.8089 4.29458 + case= 16 sphere below 20 MeV pion 0.35 8.21591 2.87557 + case= 17 sphere below 20 MeV neutron 12.16 6.64574 80.8122 + case= 18 sphere below 20 MeV proton 43.04 2.72458 117.266 + case= 19 sphere below 20 MeV ion 49.56 2.64594 131.133 + case= 20 sphere below 20 MeV otherMeson 0.03 5.71246 0.171374 + case= 21 sphere below 20 MeV otherBaryon 0.01 11.7933 0.117933 + case= 22 sphere above 20 MeV all 100.92 1202.8 121387 + case= 23 sphere above 20 MeV electron 22.96 353.424 8114.61 + case= 24 sphere above 20 MeV gamma 30.93 494.661 15299.9 + case= 25 sphere above 20 MeV muon 0.13 391.404 50.8826 + case= 26 sphere above 20 MeV neutrino 2.81 42.2326 118.673 + case= 27 sphere above 20 MeV pion 19.15 4325.16 82826.8 + case= 28 sphere above 20 MeV neutron 11.4 256.525 2924.38 + case= 29 sphere above 20 MeV proton 9.91 314.636 3118.04 + case= 30 sphere above 20 MeV ion 1.83 55.4966 101.559 + case= 31 sphere above 20 MeV otherMeson 1.52 4708.14 7156.37 + case= 32 sphere above 20 MeV otherBaryon 0.28 5985.35 1675.9 ============================================================= @@ -970,7 +972,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=3.020000s Real=3.036943s Sys=0.010000s + User=3.630000s Real=3.653563s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 1 @@ -982,107 +984,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00601755 - case= 1 forward electron 0.000518746 - case= 2 forward gamma 0.00488188 - case= 3 forward muon 1.01071e-06 - case= 4 forward neutrino 0.000111942 - case= 5 forward pion 9.72825e-05 - case= 6 forward neutron 0.000361534 - case= 7 forward proton 3.67084e-05 - case= 8 forward ion 1.62818e-07 - case= 9 forward otherMeson 8.12792e-06 - case= 10 forward otherBaryon 1.58373e-07 - case= 11 backward all 7.0686e-05 - case= 12 backward electron 2.58113e-06 - case= 13 backward gamma 3.27438e-05 + case= 0 forward all 0.00638745 + case= 1 forward electron 0.000539855 + case= 2 forward gamma 0.00515101 + case= 3 forward muon 1.24413e-06 + case= 4 forward neutrino 0.000129158 + case= 5 forward pion 8.72569e-05 + case= 6 forward neutron 0.000432543 + case= 7 forward proton 3.77796e-05 + case= 8 forward ion 0 + case= 9 forward otherMeson 8.6088e-06 + case= 10 forward otherBaryon 0 + case= 11 backward all 7.53168e-05 + case= 12 backward electron 8.23714e-07 + case= 13 backward gamma 2.87159e-05 case= 14 backward muon 0 - case= 15 backward neutrino 2.82912e-05 + case= 15 backward neutrino 3.56343e-05 case= 16 backward pion 0 - case= 17 backward neutron 7.06981e-06 + case= 17 backward neutron 1.0143e-05 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00472644 - case= 23 below 20 MeV forward electron 0.000248708 - case= 24 below 20 MeV forward gamma 0.00425823 + case= 22 below 20 MeV forward all 0.00504781 + case= 23 below 20 MeV forward electron 0.000269399 + case= 24 below 20 MeV forward gamma 0.00451636 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.14252e-05 - case= 27 below 20 MeV forward pion 1.61993e-07 - case= 28 below 20 MeV forward neutron 0.000206673 - case= 29 below 20 MeV forward proton 1.2375e-06 + case= 26 below 20 MeV forward neutrino 1.15285e-05 + case= 27 below 20 MeV forward pion 1.15759e-06 + case= 28 below 20 MeV forward neutron 0.000248862 + case= 29 below 20 MeV forward proton 5.10231e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 4.0054e-05 - case= 34 below 20 MeV backward electron 2.40563e-06 - case= 35 below 20 MeV backward gamma 3.13952e-05 + case= 33 below 20 MeV backward all 3.54274e-05 + case= 34 below 20 MeV backward electron 6.37102e-07 + case= 35 below 20 MeV backward gamma 2.6265e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 1.66987e-06 + case= 37 below 20 MeV backward neutrino 3.29537e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 4.5833e-06 + case= 39 below 20 MeV backward neutron 5.2299e-06 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00129111 - case= 45 above 20 MeV forward electron 0.000270038 - case= 46 above 20 MeV forward gamma 0.000623647 - case= 47 above 20 MeV forward muon 1.01071e-06 - case= 48 above 20 MeV forward neutrino 0.000100517 - case= 49 above 20 MeV forward pion 9.71205e-05 - case= 50 above 20 MeV forward neutron 0.000154861 - case= 51 above 20 MeV forward proton 3.54709e-05 - case= 52 above 20 MeV forward ion 1.62818e-07 - case= 53 above 20 MeV forward otherMeson 8.12792e-06 - case= 54 above 20 MeV forward otherBaryon 1.58373e-07 - case= 55 above 20 MeV backward all 3.06319e-05 - case= 56 above 20 MeV backward electron 1.75505e-07 - case= 57 above 20 MeV backward gamma 1.34861e-06 + case= 44 above 20 MeV forward all 0.00133964 + case= 45 above 20 MeV forward electron 0.000270456 + case= 46 above 20 MeV forward gamma 0.000634649 + case= 47 above 20 MeV forward muon 1.24413e-06 + case= 48 above 20 MeV forward neutrino 0.00011763 + case= 49 above 20 MeV forward pion 8.60994e-05 + case= 50 above 20 MeV forward neutron 0.000183681 + case= 51 above 20 MeV forward proton 3.72694e-05 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 8.6088e-06 + case= 54 above 20 MeV forward otherBaryon 0 + case= 55 above 20 MeV backward all 3.98894e-05 + case= 56 above 20 MeV backward electron 1.86613e-07 + case= 57 above 20 MeV backward gamma 2.45082e-06 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 2.66213e-05 + case= 59 above 20 MeV backward neutrino 3.23389e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 2.48651e-06 + case= 61 above 20 MeV backward neutron 4.91306e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 12233.6 14.9478 182866 - case= 1 sphere electron 10453.8 2.36559 24729.4 - case= 2 sphere gamma 1203.21 26.523 31912.8 - case= 3 sphere muon 2.3 19.9926 45.983 - case= 4 sphere neutrino 6.8 35.7441 243.06 - case= 5 sphere pion 34.33 2954.47 101427 - case= 6 sphere neutron 74.66 84.104 6279.21 - case= 7 sphere proton 41.04 137.304 5634.95 - case= 8 sphere ion 414.87 1.77427 736.09 - case= 9 sphere otherMeson 2.29 5027.71 11513.5 - case= 10 sphere otherBaryon 0.29 1185.41 343.77 - case= 11 sphere below 20 MeV all 11943.3 0.415825 4966.31 - case= 12 sphere below 20 MeV electron 10362.6 0.237393 2460.02 - case= 13 sphere below 20 MeV gamma 1102.34 1.38995 1532.2 - case= 14 sphere below 20 MeV muon 2.11 4.20019 8.8624 - case= 15 sphere below 20 MeV neutrino 0.61 14.3764 8.76962 - case= 16 sphere below 20 MeV pion 0.52 12.2318 6.36056 - case= 17 sphere below 20 MeV neutron 44.1 6.24206 275.275 - case= 18 sphere below 20 MeV proton 20.43 7.27281 148.583 - case= 19 sphere below 20 MeV ion 410.51 1.28136 526.012 - case= 20 sphere below 20 MeV otherMeson 0.02 11.573 0.23146 - case= 21 sphere below 20 MeV otherBaryon 0 0 0 - case= 22 sphere above 20 MeV all 290.29 612.833 177899 - case= 23 sphere above 20 MeV electron 91.14 244.343 22269.4 - case= 24 sphere above 20 MeV gamma 100.87 301.185 30380.6 - case= 25 sphere above 20 MeV muon 0.19 195.372 37.1206 - case= 26 sphere above 20 MeV neutrino 6.19 37.8498 234.29 - case= 27 sphere above 20 MeV pion 33.81 2999.72 101421 - case= 28 sphere above 20 MeV neutron 30.56 196.464 6003.93 - case= 29 sphere above 20 MeV proton 20.61 266.199 5486.37 - case= 30 sphere above 20 MeV ion 4.36 48.1831 210.078 - case= 31 sphere above 20 MeV otherMeson 2.27 5071.91 11513.2 - case= 32 sphere above 20 MeV otherBaryon 0.29 1185.41 343.77 + case= 0 sphere all 13269.6 13.77 182722 + case= 1 sphere electron 11294.9 2.21848 25057.6 + case= 2 sphere gamma 1288.41 24.623 31724.5 + case= 3 sphere muon 2.77 17.5512 48.6167 + case= 4 sphere neutrino 8.19 35.9741 294.628 + case= 5 sphere pion 37.46 2683.05 100507 + case= 6 sphere neutron 91.13 77.8396 7093.53 + case= 7 sphere proton 47.98 131.131 6291.68 + case= 8 sphere ion 495.17 1.72741 855.362 + case= 9 sphere otherMeson 2.73 3770.64 10293.9 + case= 10 sphere otherBaryon 0.78 711.859 555.25 + case= 11 sphere below 20 MeV all 12956.5 0.415948 5389.23 + case= 12 sphere below 20 MeV electron 11199.9 0.233407 2614.12 + case= 13 sphere below 20 MeV gamma 1184.45 1.37903 1633.39 + case= 14 sphere below 20 MeV muon 2.51 4.1655 10.4554 + case= 15 sphere below 20 MeV neutrino 0.75 14.1433 10.6075 + case= 16 sphere below 20 MeV pion 0.41 12.7432 5.22471 + case= 17 sphere below 20 MeV neutron 53.71 6.20319 333.173 + case= 18 sphere below 20 MeV proton 24.12 7.06713 170.459 + case= 19 sphere below 20 MeV ion 490.58 1.24488 610.711 + case= 20 sphere below 20 MeV otherMeson 0.07 13.0664 0.914645 + case= 21 sphere below 20 MeV otherBaryon 0.02 8.3006 0.166012 + case= 22 sphere above 20 MeV all 313.07 566.432 177333 + case= 23 sphere above 20 MeV electron 95.07 236.074 22443.5 + case= 24 sphere above 20 MeV gamma 103.96 289.449 30091.1 + case= 25 sphere above 20 MeV muon 0.26 146.774 38.1613 + case= 26 sphere above 20 MeV neutrino 7.44 38.1748 284.021 + case= 27 sphere above 20 MeV pion 37.05 2712.6 100502 + case= 28 sphere above 20 MeV neutron 37.42 180.661 6760.35 + case= 29 sphere above 20 MeV proton 23.86 256.547 6121.22 + case= 30 sphere above 20 MeV ion 4.59 53.3007 244.65 + case= 31 sphere above 20 MeV otherMeson 2.66 3869.53 10292.9 + case= 32 sphere above 20 MeV otherBaryon 0.76 730.373 555.084 ============================================================= @@ -1146,7 +1148,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=3.830000s Real=3.838219s Sys=0.000000s + User=3.780000s Real=3.786301s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1158,107 +1160,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00765432 - case= 1 forward electron 0.000463141 - case= 2 forward gamma 0.00612174 - case= 3 forward muon 2.75616e-06 - case= 4 forward neutrino 0.00011119 - case= 5 forward pion 8.01286e-05 - case= 6 forward neutron 0.000837752 - case= 7 forward proton 3.17804e-05 - case= 8 forward ion 0 - case= 9 forward otherMeson 5.02127e-06 - case= 10 forward otherBaryon 8.0838e-07 - case= 11 backward all 0.000193397 - case= 12 backward electron 6.37455e-07 - case= 13 backward gamma 1.0535e-05 + case= 0 forward all 0.00844916 + case= 1 forward electron 0.000566752 + case= 2 forward gamma 0.00691076 + case= 3 forward muon 1.67036e-06 + case= 4 forward neutrino 9.14349e-05 + case= 5 forward pion 8.51798e-05 + case= 6 forward neutron 0.000755361 + case= 7 forward proton 3.03679e-05 + case= 8 forward ion 2.44754e-07 + case= 9 forward otherMeson 7.07132e-06 + case= 10 forward otherBaryon 3.19793e-07 + case= 11 backward all 0.000149019 + case= 12 backward electron 1.65091e-07 + case= 13 backward gamma 1.34151e-05 case= 14 backward muon 0 - case= 15 backward neutrino 2.55122e-05 + case= 15 backward neutrino 2.3255e-05 case= 16 backward pion 0 - case= 17 backward neutron 0.000156712 + case= 17 backward neutron 0.000112184 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00666671 - case= 23 below 20 MeV forward electron 0.000292344 - case= 24 below 20 MeV forward gamma 0.00567456 + case= 22 below 20 MeV forward all 0.0073218 + case= 23 below 20 MeV forward electron 0.000337449 + case= 24 below 20 MeV forward gamma 0.00636708 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 7.45378e-06 - case= 27 below 20 MeV forward pion 7.17988e-07 - case= 28 below 20 MeV forward neutron 0.000690775 - case= 29 below 20 MeV forward proton 8.66534e-07 + case= 26 below 20 MeV forward neutrino 8.17387e-06 + case= 27 below 20 MeV forward pion 0 + case= 28 below 20 MeV forward neutron 0.000608561 + case= 29 below 20 MeV forward proton 5.35405e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.000167305 - case= 34 below 20 MeV backward electron 6.37455e-07 - case= 35 below 20 MeV backward gamma 1.02143e-05 + case= 33 below 20 MeV backward all 0.000125077 + case= 34 below 20 MeV backward electron 0 + case= 35 below 20 MeV backward gamma 1.32541e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 2.1864e-06 + case= 37 below 20 MeV backward neutrino 2.01627e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.000154267 + case= 39 below 20 MeV backward neutron 0.000109807 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00098761 - case= 45 above 20 MeV forward electron 0.000170797 - case= 46 above 20 MeV forward gamma 0.000447189 - case= 47 above 20 MeV forward muon 2.75616e-06 - case= 48 above 20 MeV forward neutrino 0.000103737 - case= 49 above 20 MeV forward pion 7.94106e-05 - case= 50 above 20 MeV forward neutron 0.000146977 - case= 51 above 20 MeV forward proton 3.09139e-05 - case= 52 above 20 MeV forward ion 0 - case= 53 above 20 MeV forward otherMeson 5.02127e-06 - case= 54 above 20 MeV forward otherBaryon 8.0838e-07 - case= 55 above 20 MeV backward all 2.60916e-05 - case= 56 above 20 MeV backward electron 0 - case= 57 above 20 MeV backward gamma 3.20728e-07 + case= 44 above 20 MeV forward all 0.00112736 + case= 45 above 20 MeV forward electron 0.000229304 + case= 46 above 20 MeV forward gamma 0.000543682 + case= 47 above 20 MeV forward muon 1.67036e-06 + case= 48 above 20 MeV forward neutrino 8.3261e-05 + case= 49 above 20 MeV forward pion 8.51798e-05 + case= 50 above 20 MeV forward neutron 0.0001468 + case= 51 above 20 MeV forward proton 2.98325e-05 + case= 52 above 20 MeV forward ion 2.44754e-07 + case= 53 above 20 MeV forward otherMeson 7.07132e-06 + case= 54 above 20 MeV forward otherBaryon 3.19793e-07 + case= 55 above 20 MeV backward all 2.3942e-05 + case= 56 above 20 MeV backward electron 1.65091e-07 + case= 57 above 20 MeV backward gamma 1.60998e-07 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 2.33258e-05 + case= 59 above 20 MeV backward neutrino 2.12387e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 2.4451e-06 + case= 61 above 20 MeV backward neutron 2.37723e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 16070.1 11.3236 181971 - case= 1 sphere electron 12899.6 2.32481 29989.2 - case= 2 sphere gamma 2719.91 12.043 32756 - case= 3 sphere muon 2.26 33.9202 76.6597 - case= 4 sphere neutrino 6.53 40.7831 266.313 - case= 5 sphere pion 27.83 3611.34 100504 - case= 6 sphere neutron 91.32 51.242 4679.42 - case= 7 sphere proton 62.27 77.5742 4830.55 - case= 8 sphere ion 257.77 1.49304 384.86 - case= 9 sphere otherMeson 2.11 3761.27 7936.27 - case= 10 sphere otherBaryon 0.43 1275.72 548.558 - case= 11 sphere below 20 MeV all 15696.4 0.55133 8653.88 - case= 12 sphere below 20 MeV electron 12754.3 0.361232 4607.25 - case= 13 sphere below 20 MeV gamma 2576.71 1.25331 3229.41 - case= 14 sphere below 20 MeV muon 1.96 4.22133 8.2738 - case= 15 sphere below 20 MeV neutrino 0.44 15.325 6.74301 - case= 16 sphere below 20 MeV pion 0.49 11.2541 5.51452 - case= 17 sphere below 20 MeV neutron 65.29 4.25725 277.956 - case= 18 sphere below 20 MeV proton 42.6 6.33871 270.029 - case= 19 sphere below 20 MeV ion 254.5 0.971523 247.253 - case= 20 sphere below 20 MeV otherMeson 0.07 9.66356 0.676449 - case= 21 sphere below 20 MeV otherBaryon 0.06 12.9119 0.774717 - case= 22 sphere above 20 MeV all 373.7 463.788 173318 - case= 23 sphere above 20 MeV electron 145.39 174.578 25382 - case= 24 sphere above 20 MeV gamma 143.2 206.191 29526.6 - case= 25 sphere above 20 MeV muon 0.3 227.953 68.3859 - case= 26 sphere above 20 MeV neutrino 6.09 42.6224 259.57 - case= 27 sphere above 20 MeV pion 27.34 3675.86 100498 - case= 28 sphere above 20 MeV neutron 26.03 169.092 4401.47 - case= 29 sphere above 20 MeV proton 19.67 231.851 4560.52 - case= 30 sphere above 20 MeV ion 3.27 42.0818 137.607 - case= 31 sphere above 20 MeV otherMeson 2.04 3890 7935.59 - case= 32 sphere above 20 MeV otherBaryon 0.37 1480.5 547.783 + case= 0 sphere all 14473.1 12.1291 175546 + case= 1 sphere electron 11558 2.68053 30981.5 + case= 2 sphere gamma 2529.45 13.8771 35101.5 + case= 3 sphere muon 1.91 23.434 44.759 + case= 4 sphere neutrino 5.6 37.2676 208.698 + case= 5 sphere pion 25.81 3518.4 90809.9 + case= 6 sphere neutron 77.34 62.0536 4799.23 + case= 7 sphere proton 53.99 68.9219 3721.09 + case= 8 sphere ion 218.28 1.45008 316.524 + case= 9 sphere otherMeson 2.27 3986.85 9050.15 + case= 10 sphere otherBaryon 0.51 1005.42 512.766 + case= 11 sphere below 20 MeV all 14116.4 0.562335 7938.14 + case= 12 sphere below 20 MeV electron 11418.7 0.366691 4187.13 + case= 13 sphere below 20 MeV gamma 2386.4 1.27509 3042.88 + case= 14 sphere below 20 MeV muon 1.69 4.17083 7.04871 + case= 15 sphere below 20 MeV neutrino 0.5 14.0347 7.01733 + case= 16 sphere below 20 MeV pion 0.43 11.9982 5.15922 + case= 17 sphere below 20 MeV neutron 55.75 4.26164 237.587 + case= 18 sphere below 20 MeV proton 36.95 6.36332 235.125 + case= 19 sphere below 20 MeV ion 215.9 0.999708 215.837 + case= 20 sphere below 20 MeV otherMeson 0.06 4.5337 0.272022 + case= 21 sphere below 20 MeV otherBaryon 0.01 8.28646 0.0828646 + case= 22 sphere above 20 MeV all 356.72 469.859 167608 + case= 23 sphere above 20 MeV electron 139.25 192.419 26794.3 + case= 24 sphere above 20 MeV gamma 143.05 224.108 32058.6 + case= 25 sphere above 20 MeV muon 0.22 171.41 37.7103 + case= 26 sphere above 20 MeV neutrino 5.1 39.5453 201.681 + case= 27 sphere above 20 MeV pion 25.38 3577.81 90804.7 + case= 28 sphere above 20 MeV neutron 21.59 211.285 4561.64 + case= 29 sphere above 20 MeV proton 17.04 204.576 3485.97 + case= 30 sphere above 20 MeV ion 2.38 42.3053 100.687 + case= 31 sphere above 20 MeV otherMeson 2.21 4094.97 9049.88 + case= 32 sphere above 20 MeV otherBaryon 0.5 1025.37 512.683 ============================================================= @@ -1327,7 +1329,7 @@ Index : 4 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=2.040000s Real=2.053909s Sys=0.010000s + User=2.160000s Real=2.181203s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 3 @@ -1339,107 +1341,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00830913 - case= 1 forward electron 0.000639494 - case= 2 forward gamma 0.00666056 - case= 3 forward muon 1.37383e-06 - case= 4 forward neutrino 4.20503e-05 - case= 5 forward pion 7.63949e-05 - case= 6 forward neutron 0.000858513 - case= 7 forward proton 2.30412e-05 - case= 8 forward ion 5.22446e-07 - case= 9 forward otherMeson 6.86565e-06 - case= 10 forward otherBaryon 3.15773e-07 - case= 11 backward all 0.000213678 - case= 12 backward electron 1.64356e-07 - case= 13 backward gamma 4.13382e-05 + case= 0 forward all 0.00818762 + case= 1 forward electron 0.000582574 + case= 2 forward gamma 0.00639584 + case= 3 forward muon 1.52381e-06 + case= 4 forward neutrino 4.64435e-05 + case= 5 forward pion 0.000108708 + case= 6 forward neutron 0.00101548 + case= 7 forward proton 2.96486e-05 + case= 8 forward ion 3.92812e-07 + case= 9 forward otherMeson 6.84091e-06 + case= 10 forward otherBaryon 1.60712e-07 + case= 11 backward all 0.000240895 + case= 12 backward electron 0 + case= 13 backward gamma 4.89583e-05 case= 14 backward muon 0 - case= 15 backward neutrino 1.32419e-05 + case= 15 backward neutrino 1.32365e-05 case= 16 backward pion 0 - case= 17 backward neutron 0.000158934 + case= 17 backward neutron 0.0001787 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00723213 - case= 23 below 20 MeV forward electron 0.000373843 - case= 24 below 20 MeV forward gamma 0.00611189 + case= 22 below 20 MeV forward all 0.00710142 + case= 23 below 20 MeV forward electron 0.000338597 + case= 24 below 20 MeV forward gamma 0.00589329 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 4.83857e-06 - case= 27 below 20 MeV forward pion 3.90906e-07 - case= 28 below 20 MeV forward neutron 0.000740833 - case= 29 below 20 MeV forward proton 3.33781e-07 + case= 26 below 20 MeV forward neutrino 2.93445e-06 + case= 27 below 20 MeV forward pion 6.98391e-07 + case= 28 below 20 MeV forward neutron 0.000865305 + case= 29 below 20 MeV forward proton 5.96224e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.000196219 - case= 34 below 20 MeV backward electron 1.64356e-07 - case= 35 below 20 MeV backward gamma 4.10059e-05 + case= 33 below 20 MeV backward all 0.000222128 + case= 34 below 20 MeV backward electron 0 + case= 35 below 20 MeV backward gamma 4.8599e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 1.15594e-06 + case= 37 below 20 MeV backward neutrino 1.35776e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.000153893 + case= 39 below 20 MeV backward neutron 0.000172171 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.001077 - case= 45 above 20 MeV forward electron 0.000265651 - case= 46 above 20 MeV forward gamma 0.000548666 - case= 47 above 20 MeV forward muon 1.37383e-06 - case= 48 above 20 MeV forward neutrino 3.72118e-05 - case= 49 above 20 MeV forward pion 7.6004e-05 - case= 50 above 20 MeV forward neutron 0.00011768 - case= 51 above 20 MeV forward proton 2.27074e-05 - case= 52 above 20 MeV forward ion 5.22446e-07 - case= 53 above 20 MeV forward otherMeson 6.86565e-06 - case= 54 above 20 MeV forward otherBaryon 3.15773e-07 - case= 55 above 20 MeV backward all 1.74594e-05 + case= 44 above 20 MeV forward all 0.0010862 + case= 45 above 20 MeV forward electron 0.000243977 + case= 46 above 20 MeV forward gamma 0.000502555 + case= 47 above 20 MeV forward muon 1.52381e-06 + case= 48 above 20 MeV forward neutrino 4.3509e-05 + case= 49 above 20 MeV forward pion 0.000108009 + case= 50 above 20 MeV forward neutron 0.000150177 + case= 51 above 20 MeV forward proton 2.90523e-05 + case= 52 above 20 MeV forward ion 3.92812e-07 + case= 53 above 20 MeV forward otherMeson 6.84091e-06 + case= 54 above 20 MeV forward otherBaryon 1.60712e-07 + case= 55 above 20 MeV backward all 1.87667e-05 case= 56 above 20 MeV backward electron 0 - case= 57 above 20 MeV backward gamma 3.32302e-07 + case= 57 above 20 MeV backward gamma 3.59335e-07 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 1.2086e-05 + case= 59 above 20 MeV backward neutrino 1.18788e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 5.04108e-06 + case= 61 above 20 MeV backward neutron 6.52857e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 6759.5 21.7403 146954 - case= 1 sphere electron 4990.31 4.64321 23171.1 - case= 2 sphere gamma 1508.37 19.2368 29016.2 - case= 3 sphere muon 0.93 79.1435 73.6034 - case= 4 sphere neutrino 2.62 43.9885 115.25 - case= 5 sphere pion 16.29 4931.11 80327.8 - case= 6 sphere neutron 76.91 37.1523 2857.39 - case= 7 sphere proton 17.31 114.813 1987.41 - case= 8 sphere ion 144.99 1.21723 176.486 - case= 9 sphere otherMeson 1.49 5357.11 7982.09 - case= 10 sphere otherBaryon 0.28 4451.41 1246.39 - case= 11 sphere below 20 MeV all 6544.23 0.658491 4309.31 - case= 12 sphere below 20 MeV electron 4912.31 0.426422 2094.72 - case= 13 sphere below 20 MeV gamma 1415.12 1.27908 1810.05 - case= 14 sphere below 20 MeV muon 0.77 4.11981 3.17226 - case= 15 sphere below 20 MeV neutrino 0.22 14.0093 3.08204 - case= 16 sphere below 20 MeV pion 0.2 12.1059 2.42119 - case= 17 sphere below 20 MeV neutron 63.27 3.58027 226.524 - case= 18 sphere below 20 MeV proton 8.85 7.72081 68.3292 - case= 19 sphere below 20 MeV ion 143.45 0.701296 100.601 - case= 20 sphere below 20 MeV otherMeson 0.02 6.87311 0.137462 - case= 21 sphere below 20 MeV otherBaryon 0.02 14.0003 0.280007 - case= 22 sphere above 20 MeV all 215.27 662.63 142644 - case= 23 sphere above 20 MeV electron 78 270.21 21076.4 - case= 24 sphere above 20 MeV gamma 93.25 291.755 27206.1 - case= 25 sphere above 20 MeV muon 0.16 440.195 70.4312 - case= 26 sphere above 20 MeV neutrino 2.4 46.7366 112.168 - case= 27 sphere above 20 MeV pion 16.09 4992.26 80325.4 - case= 28 sphere above 20 MeV neutron 13.64 192.878 2630.86 - case= 29 sphere above 20 MeV proton 8.46 226.842 1919.08 - case= 30 sphere above 20 MeV ion 1.54 49.2763 75.8855 - case= 31 sphere above 20 MeV otherMeson 1.47 5429.9 7981.95 - case= 32 sphere above 20 MeV otherBaryon 0.26 4792.75 1246.11 + case= 0 sphere all 6732.06 21.5282 144929 + case= 1 sphere electron 4956.14 3.95856 19619.2 + case= 2 sphere gamma 1477.86 17.2061 25428.2 + case= 3 sphere muon 1 40.1797 40.1797 + case= 4 sphere neutrino 2.77 37.8317 104.794 + case= 5 sphere pion 20.02 4359.26 87272.3 + case= 6 sphere neutron 87.33 39.7858 3474.49 + case= 7 sphere proton 19.91 154.925 3084.57 + case= 8 sphere ion 165.45 1.10691 183.139 + case= 9 sphere otherMeson 1.33 4081.66 5428.61 + case= 10 sphere otherBaryon 0.25 1175.38 293.845 + case= 11 sphere below 20 MeV all 6516.88 0.653109 4256.23 + case= 12 sphere below 20 MeV electron 4880.99 0.422628 2062.84 + case= 13 sphere below 20 MeV gamma 1389.87 1.25701 1747.09 + case= 14 sphere below 20 MeV muon 0.81 4.27578 3.46338 + case= 15 sphere below 20 MeV neutrino 0.19 14.5769 2.76962 + case= 16 sphere below 20 MeV pion 0.19 12.8806 2.44731 + case= 17 sphere below 20 MeV neutron 70.81 3.47768 246.255 + case= 18 sphere below 20 MeV proton 10.02 7.94341 79.5929 + case= 19 sphere below 20 MeV ion 163.99 0.680473 111.591 + case= 20 sphere below 20 MeV otherMeson 0 0 0 + case= 21 sphere below 20 MeV otherBaryon 0.01 18.9913 0.189913 + case= 22 sphere above 20 MeV all 215.18 653.746 140673 + case= 23 sphere above 20 MeV electron 75.15 233.617 17556.3 + case= 24 sphere above 20 MeV gamma 87.99 269.134 23681.1 + case= 25 sphere above 20 MeV muon 0.19 193.244 36.7164 + case= 26 sphere above 20 MeV neutrino 2.58 39.5443 102.024 + case= 27 sphere above 20 MeV pion 19.83 4400.9 87269.9 + case= 28 sphere above 20 MeV neutron 16.52 195.414 3228.24 + case= 29 sphere above 20 MeV proton 9.89 303.84 3004.97 + case= 30 sphere above 20 MeV ion 1.46 49.0055 71.548 + case= 31 sphere above 20 MeV otherMeson 1.33 4081.66 5428.61 + case= 32 sphere above 20 MeV otherBaryon 0.24 1223.56 293.655 ============================================================= @@ -1513,7 +1515,7 @@ Index : 5 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=18.040000s Real=18.088689s Sys=0.020000s + User=20.010000s Real=20.186110s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 4 @@ -1525,107 +1527,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00353029 - case= 1 forward electron 4.73859e-05 - case= 2 forward gamma 0.00113271 - case= 3 forward muon 1.34312e-06 - case= 4 forward neutrino 0.000237822 - case= 5 forward pion 1.88039e-05 - case= 6 forward neutron 0.00207718 - case= 7 forward proton 1.23573e-05 - case= 8 forward ion 3.28241e-07 - case= 9 forward otherMeson 2.19483e-06 - case= 10 forward otherBaryon 1.66395e-07 - case= 11 backward all 0.000166009 + case= 0 forward all 0.00279544 + case= 1 forward electron 2.77005e-05 + case= 2 forward gamma 0.000663711 + case= 3 forward muon 1.60135e-07 + case= 4 forward neutrino 0.000222867 + case= 5 forward pion 1.52814e-05 + case= 6 forward neutron 0.0018562 + case= 7 forward proton 8.30703e-06 + case= 8 forward ion 0 + case= 9 forward otherMeson 8.98739e-07 + case= 10 forward otherBaryon 3.15395e-07 + case= 11 backward all 0.000170445 case= 12 backward electron 0 - case= 13 backward gamma 7.49852e-06 + case= 13 backward gamma 8.24941e-06 case= 14 backward muon 0 - case= 15 backward neutrino 8.30951e-05 + case= 15 backward neutrino 8.70268e-05 case= 16 backward pion 0 - case= 17 backward neutron 7.54149e-05 - case= 18 backward proton 0 + case= 17 backward neutron 7.49613e-05 + case= 18 backward proton 2.07834e-07 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00309761 - case= 23 below 20 MeV forward electron 3.67451e-05 - case= 24 below 20 MeV forward gamma 0.00109953 + case= 22 below 20 MeV forward all 0.00244855 + case= 23 below 20 MeV forward electron 2.108e-05 + case= 24 below 20 MeV forward gamma 0.000646756 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 2.25721e-05 - case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 0.00193877 - case= 29 below 20 MeV forward proton 0 + case= 26 below 20 MeV forward neutrino 1.71911e-05 + case= 27 below 20 MeV forward pion 2.20434e-07 + case= 28 below 20 MeV forward neutron 0.00176264 + case= 29 below 20 MeV forward proton 6.60563e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 8.90698e-05 + case= 33 below 20 MeV backward all 9.04776e-05 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 7.49852e-06 + case= 35 below 20 MeV backward gamma 8.24941e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 6.74187e-06 + case= 37 below 20 MeV backward neutrino 7.81625e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 7.48294e-05 + case= 39 below 20 MeV backward neutron 7.44119e-05 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000432679 - case= 45 above 20 MeV forward electron 1.06407e-05 - case= 46 above 20 MeV forward gamma 3.31871e-05 - case= 47 above 20 MeV forward muon 1.34312e-06 - case= 48 above 20 MeV forward neutrino 0.00021525 - case= 49 above 20 MeV forward pion 1.88039e-05 - case= 50 above 20 MeV forward neutron 0.000138407 - case= 51 above 20 MeV forward proton 1.23573e-05 - case= 52 above 20 MeV forward ion 3.28241e-07 - case= 53 above 20 MeV forward otherMeson 2.19483e-06 - case= 54 above 20 MeV forward otherBaryon 1.66395e-07 - case= 55 above 20 MeV backward all 7.69387e-05 + case= 44 above 20 MeV forward all 0.000346891 + case= 45 above 20 MeV forward electron 6.62051e-06 + case= 46 above 20 MeV forward gamma 1.69546e-05 + case= 47 above 20 MeV forward muon 1.60135e-07 + case= 48 above 20 MeV forward neutrino 0.000205675 + case= 49 above 20 MeV forward pion 1.5061e-05 + case= 50 above 20 MeV forward neutron 9.35592e-05 + case= 51 above 20 MeV forward proton 7.64647e-06 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 8.98739e-07 + case= 54 above 20 MeV forward otherBaryon 3.15395e-07 + case= 55 above 20 MeV backward all 7.99677e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 7.63532e-05 + case= 59 above 20 MeV backward neutrino 7.92105e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 5.85517e-07 - case= 62 above 20 MeV backward proton 0 + case= 61 above 20 MeV backward neutron 5.4934e-07 + case= 62 above 20 MeV backward proton 2.07834e-07 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 57608.4 5.26744 303449 - case= 1 sphere electron 43140.6 1.69075 72939.8 - case= 2 sphere gamma 12121 5.86597 71101.4 - case= 3 sphere muon 5.85 20.5863 120.43 - case= 4 sphere neutrino 17.33 36.5469 633.357 - case= 5 sphere pion 57.55 1980.04 113951 - case= 6 sphere neutron 873.05 19.0368 16620.1 - case= 7 sphere proton 189.41 67.3586 12758.4 - case= 8 sphere ion 1198.26 0.895482 1073.02 - case= 9 sphere otherMeson 4.37 3056.76 13358 - case= 10 sphere otherBaryon 0.97 921.169 893.534 - case= 11 sphere below 20 MeV all 56570.4 0.653523 36970 - case= 12 sphere below 20 MeV electron 42733.7 0.445394 19033.3 - case= 13 sphere below 20 MeV gamma 11756.6 1.22613 14415.1 - case= 14 sphere below 20 MeV muon 5.37 4.13714 22.2164 - case= 15 sphere below 20 MeV neutrino 1.59 14.6595 23.3086 - case= 16 sphere below 20 MeV pion 1.29 12.8475 16.5733 - case= 17 sphere below 20 MeV neutron 759.94 2.51573 1911.8 - case= 18 sphere below 20 MeV proton 122.83 7.87248 966.976 - case= 19 sphere below 20 MeV ion 1188.77 0.486401 578.218 - case= 20 sphere below 20 MeV otherMeson 0.26 6.95671 1.80874 - case= 21 sphere below 20 MeV otherBaryon 0.06 11.4804 0.688824 - case= 22 sphere above 20 MeV all 1038.01 256.721 266479 - case= 23 sphere above 20 MeV electron 406.92 132.474 53906.5 - case= 24 sphere above 20 MeV gamma 364.41 155.556 56686.3 - case= 25 sphere above 20 MeV muon 0.48 204.611 98.2135 - case= 26 sphere above 20 MeV neutrino 15.74 38.7579 610.049 - case= 27 sphere above 20 MeV pion 56.26 2025.14 113934 - case= 28 sphere above 20 MeV neutron 113.11 130.035 14708.3 - case= 29 sphere above 20 MeV proton 66.58 177.101 11791.4 - case= 30 sphere above 20 MeV ion 9.49 52.1393 494.802 - case= 31 sphere above 20 MeV otherMeson 4.11 3249.69 13356.2 - case= 32 sphere above 20 MeV otherBaryon 0.91 981.148 892.845 + case= 0 sphere all 60245.9 5.2823 318237 + case= 1 sphere electron 45220.4 1.7543 79330 + case= 2 sphere gamma 12729.2 6.10692 77736 + case= 3 sphere muon 5.72 15.8802 90.8348 + case= 4 sphere neutrino 17.06 36.2863 619.045 + case= 5 sphere pion 57.43 2042 117272 + case= 6 sphere neutron 853.24 19.4224 16572 + case= 7 sphere proton 183.44 66.2095 12145.5 + case= 8 sphere ion 1174.39 0.862887 1013.37 + case= 9 sphere otherMeson 4.18 2826.87 11816.3 + case= 10 sphere otherBaryon 0.9 1824.88 1642.39 + case= 11 sphere below 20 MeV all 59161.4 0.652081 38578 + case= 12 sphere below 20 MeV electron 44785 0.448487 20085.5 + case= 13 sphere below 20 MeV gamma 12339.6 1.22213 15080.5 + case= 14 sphere below 20 MeV muon 5.3 4.1237 21.8556 + case= 15 sphere below 20 MeV neutrino 1.38 14.7778 20.3933 + case= 16 sphere below 20 MeV pion 0.95 11.8852 11.2909 + case= 17 sphere below 20 MeV neutron 743.39 2.51027 1866.11 + case= 18 sphere below 20 MeV proton 120.13 7.93119 952.774 + case= 19 sphere below 20 MeV ion 1165.41 0.460818 537.042 + case= 20 sphere below 20 MeV otherMeson 0.24 7.37366 1.76968 + case= 21 sphere below 20 MeV otherBaryon 0.05 15.7796 0.788978 + case= 22 sphere above 20 MeV all 1084.51 257.867 279659 + case= 23 sphere above 20 MeV electron 435.37 136.079 59244.5 + case= 24 sphere above 20 MeV gamma 389.63 160.808 62655.5 + case= 25 sphere above 20 MeV muon 0.42 164.236 68.9792 + case= 26 sphere above 20 MeV neutrino 15.68 38.1793 598.651 + case= 27 sphere above 20 MeV pion 56.48 2076.14 117261 + case= 28 sphere above 20 MeV neutron 109.85 133.873 14705.9 + case= 29 sphere above 20 MeV proton 63.31 176.792 11192.7 + case= 30 sphere above 20 MeV ion 8.98 53.0428 476.324 + case= 31 sphere above 20 MeV otherMeson 3.94 2998.61 11814.5 + case= 32 sphere above 20 MeV otherBaryon 0.85 1931.29 1641.6 ============================================================= @@ -1704,7 +1706,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=18.310000s Real=18.359091s Sys=0.020000s + User=19.830000s Real=19.862463s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 5 @@ -1716,107 +1718,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.0011345 - case= 1 forward electron 1.2358e-05 - case= 2 forward gamma 0.000321739 - case= 3 forward muon 3.15687e-07 - case= 4 forward neutrino 0.000205869 - case= 5 forward pion 8.04375e-06 - case= 6 forward neutron 0.000580028 - case= 7 forward proton 5.33172e-06 - case= 8 forward ion 0 - case= 9 forward otherMeson 6.45327e-07 - case= 10 forward otherBaryon 1.67497e-07 - case= 11 backward all 0.000112058 + case= 0 forward all 0.00186201 + case= 1 forward electron 4.72993e-05 + case= 2 forward gamma 0.000820032 + case= 3 forward muon 2.14544e-07 + case= 4 forward neutrino 0.000212895 + case= 5 forward pion 8.75303e-06 + case= 6 forward neutron 0.000765055 + case= 7 forward proton 6.64673e-06 + case= 8 forward ion 2.00485e-07 + case= 9 forward otherMeson 8.2599e-07 + case= 10 forward otherBaryon 8.54972e-08 + case= 11 backward all 0.000101498 case= 12 backward electron 0 - case= 13 backward gamma 2.05418e-06 + case= 13 backward gamma 1.69913e-06 case= 14 backward muon 0 - case= 15 backward neutrino 0.000104704 + case= 15 backward neutrino 9.58602e-05 case= 16 backward pion 0 - case= 17 backward neutron 5.3003e-06 + case= 17 backward neutron 3.93873e-06 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.000859596 - case= 23 below 20 MeV forward electron 1.04542e-05 - case= 24 below 20 MeV forward gamma 0.000315203 + case= 22 below 20 MeV forward all 0.00152531 + case= 23 below 20 MeV forward electron 3.67911e-05 + case= 24 below 20 MeV forward gamma 0.00079788 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.53937e-05 - case= 27 below 20 MeV forward pion 1.90005e-07 - case= 28 below 20 MeV forward neutron 0.000518355 - case= 29 below 20 MeV forward proton 0 + case= 26 below 20 MeV forward neutrino 1.67571e-05 + case= 27 below 20 MeV forward pion 2.33322e-07 + case= 28 below 20 MeV forward neutron 0.000673343 + case= 29 below 20 MeV forward proton 3.07838e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 1.67729e-05 + case= 33 below 20 MeV backward all 1.35042e-05 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 2.05418e-06 + case= 35 below 20 MeV backward gamma 1.69913e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 1.05619e-05 + case= 37 below 20 MeV backward neutrino 8.38711e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 4.15673e-06 + case= 39 below 20 MeV backward neutron 3.41799e-06 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000274902 - case= 45 above 20 MeV forward electron 1.90386e-06 - case= 46 above 20 MeV forward gamma 6.53579e-06 - case= 47 above 20 MeV forward muon 3.15687e-07 - case= 48 above 20 MeV forward neutrino 0.000190475 - case= 49 above 20 MeV forward pion 7.85374e-06 - case= 50 above 20 MeV forward neutron 6.16729e-05 - case= 51 above 20 MeV forward proton 5.33172e-06 - case= 52 above 20 MeV forward ion 0 - case= 53 above 20 MeV forward otherMeson 6.45327e-07 - case= 54 above 20 MeV forward otherBaryon 1.67497e-07 - case= 55 above 20 MeV backward all 9.52856e-05 + case= 44 above 20 MeV forward all 0.000336696 + case= 45 above 20 MeV forward electron 1.05083e-05 + case= 46 above 20 MeV forward gamma 2.21523e-05 + case= 47 above 20 MeV forward muon 2.14544e-07 + case= 48 above 20 MeV forward neutrino 0.000196138 + case= 49 above 20 MeV forward pion 8.51971e-06 + case= 50 above 20 MeV forward neutron 9.17121e-05 + case= 51 above 20 MeV forward proton 6.3389e-06 + case= 52 above 20 MeV forward ion 2.00485e-07 + case= 53 above 20 MeV forward otherMeson 8.2599e-07 + case= 54 above 20 MeV forward otherBaryon 8.54972e-08 + case= 55 above 20 MeV backward all 8.79939e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 9.4142e-05 + case= 59 above 20 MeV backward neutrino 8.74731e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 1.14356e-06 + case= 61 above 20 MeV backward neutron 5.20745e-07 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 66193.7 4.87177 322480 - case= 1 sphere electron 49095 1.67941 82450.4 - case= 2 sphere gamma 14671.5 5.51938 80977.4 - case= 3 sphere muon 6.07 26.5251 161.007 - case= 4 sphere neutrino 18.13 38.0583 689.997 - case= 5 sphere pion 57.93 2009.2 116393 - case= 6 sphere neutron 910.45 16.9672 15447.8 - case= 7 sphere proton 211.45 60.6183 12817.7 - case= 8 sphere ion 1218.29 0.919025 1119.64 - case= 9 sphere otherMeson 4.13 2894.84 11955.7 - case= 10 sphere otherBaryon 0.83 563.696 467.868 - case= 11 sphere below 20 MeV all 65057.8 0.6688 43510.7 - case= 12 sphere below 20 MeV electron 48643.6 0.459039 22329.3 - case= 13 sphere below 20 MeV gamma 14264 1.2179 17372.2 - case= 14 sphere below 20 MeV muon 5.64 4.13401 23.3158 - case= 15 sphere below 20 MeV neutrino 1.5 14.6666 21.9999 - case= 16 sphere below 20 MeV pion 1.16 12.7118 14.7457 - case= 17 sphere below 20 MeV neutron 794.18 2.60755 2070.86 - case= 18 sphere below 20 MeV proton 139.31 8.11794 1130.91 - case= 19 sphere below 20 MeV ion 1208.08 0.45177 545.774 - case= 20 sphere below 20 MeV otherMeson 0.26 4.28107 1.11308 - case= 21 sphere below 20 MeV otherBaryon 0.05 8.59195 0.429597 - case= 22 sphere above 20 MeV all 1135.93 245.587 278970 - case= 23 sphere above 20 MeV electron 451.4 133.188 60121.1 - case= 24 sphere above 20 MeV gamma 407.43 156.113 63605.2 - case= 25 sphere above 20 MeV muon 0.43 320.212 137.691 - case= 26 sphere above 20 MeV neutrino 16.63 40.1682 667.997 - case= 27 sphere above 20 MeV pion 56.77 2049.99 116378 - case= 28 sphere above 20 MeV neutron 116.27 115.05 13376.9 - case= 29 sphere above 20 MeV proton 72.14 162.002 11686.8 - case= 30 sphere above 20 MeV ion 10.21 56.2062 573.866 - case= 31 sphere above 20 MeV otherMeson 3.87 3089.04 11954.6 - case= 32 sphere above 20 MeV otherBaryon 0.78 599.279 467.438 + case= 0 sphere all 65905 4.88189 321741 + case= 1 sphere electron 48829.9 1.67878 81974.5 + case= 2 sphere gamma 14622.2 5.51579 80653 + case= 3 sphere muon 5.86 14.9194 87.4276 + case= 4 sphere neutrino 17.57 36.8159 646.856 + case= 5 sphere pion 57.9 1972.44 114204 + case= 6 sphere neutron 926.02 18.2626 16911.5 + case= 7 sphere proton 211.76 60.8482 12885.2 + case= 8 sphere ion 1228.19 0.944675 1160.24 + case= 9 sphere otherMeson 4.54 2722.97 12362.3 + case= 10 sphere otherBaryon 1.08 792.764 856.185 + case= 11 sphere below 20 MeV all 64765.8 0.669577 43365.6 + case= 12 sphere below 20 MeV electron 48379.7 0.458753 22194.3 + case= 13 sphere below 20 MeV gamma 14215.2 1.21824 17317.6 + case= 14 sphere below 20 MeV muon 5.42 4.13715 22.4233 + case= 15 sphere below 20 MeV neutrino 1.45 14.96 21.692 + case= 16 sphere below 20 MeV pion 0.97 12.0944 11.7316 + case= 17 sphere below 20 MeV neutron 804.84 2.62508 2112.77 + case= 18 sphere below 20 MeV proton 140.87 8.03328 1131.65 + case= 19 sphere below 20 MeV ion 1216.93 0.452374 550.507 + case= 20 sphere below 20 MeV otherMeson 0.24 7.51208 1.8029 + case= 21 sphere below 20 MeV otherBaryon 0.09 12.4197 1.11777 + case= 22 sphere above 20 MeV all 1139.22 244.356 278376 + case= 23 sphere above 20 MeV electron 450.12 132.809 59780.1 + case= 24 sphere above 20 MeV gamma 406.99 155.619 63335.4 + case= 25 sphere above 20 MeV muon 0.44 147.737 65.0043 + case= 26 sphere above 20 MeV neutrino 16.12 38.7819 625.164 + case= 27 sphere above 20 MeV pion 56.93 2005.84 114192 + case= 28 sphere above 20 MeV neutron 121.18 122.122 14798.7 + case= 29 sphere above 20 MeV proton 70.89 165.8 11753.6 + case= 30 sphere above 20 MeV ion 11.26 54.1504 609.733 + case= 31 sphere above 20 MeV otherMeson 4.3 2874.53 12360.5 + case= 32 sphere above 20 MeV otherBaryon 0.99 863.705 855.068 ============================================================= @@ -1900,7 +1902,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=50.500000s Real=50.682308s Sys=0.050000s + User=52.010000s Real=52.364314s Sys=0.050000s =============== Run::PrintInfo() =============== RunID = 6 @@ -1912,107 +1914,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.000267045 - case= 1 forward electron 2.85948e-07 - case= 2 forward gamma 1.19408e-05 + case= 0 forward all 0.000238846 + case= 1 forward electron 3.9905e-07 + case= 2 forward gamma 7.11509e-06 case= 3 forward muon 0 - case= 4 forward neutrino 0.000158695 + case= 4 forward neutrino 0.000159122 case= 5 forward pion 0 - case= 6 forward neutron 9.61232e-05 - case= 7 forward proton 0 + case= 6 forward neutron 7.14646e-05 + case= 7 forward proton 7.45341e-07 case= 8 forward ion 0 case= 9 forward otherMeson 0 case= 10 forward otherBaryon 0 - case= 11 backward all 9.00945e-05 + case= 11 backward all 9.92503e-05 case= 12 backward electron 0 case= 13 backward gamma 0 case= 14 backward muon 0 - case= 15 backward neutrino 8.95521e-05 + case= 15 backward neutrino 9.92503e-05 case= 16 backward pion 0 - case= 17 backward neutron 5.42317e-07 + case= 17 backward neutron 0 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.000115136 - case= 23 below 20 MeV forward electron 2.85948e-07 - case= 24 below 20 MeV forward gamma 1.19408e-05 + case= 22 below 20 MeV forward all 8.6482e-05 + case= 23 below 20 MeV forward electron 3.9905e-07 + case= 24 below 20 MeV forward gamma 7.11509e-06 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.2995e-05 + case= 26 below 20 MeV forward neutrino 1.16748e-05 case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 8.99141e-05 + case= 28 below 20 MeV forward neutron 6.72931e-05 case= 29 below 20 MeV forward proton 0 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 7.06095e-06 + case= 33 below 20 MeV backward all 8.63696e-06 case= 34 below 20 MeV backward electron 0 case= 35 below 20 MeV backward gamma 0 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 6.68742e-06 + case= 37 below 20 MeV backward neutrino 8.63696e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 3.73536e-07 + case= 39 below 20 MeV backward neutron 0 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000151909 + case= 44 above 20 MeV forward all 0.000152364 case= 45 above 20 MeV forward electron 0 case= 46 above 20 MeV forward gamma 0 case= 47 above 20 MeV forward muon 0 - case= 48 above 20 MeV forward neutrino 0.0001457 + case= 48 above 20 MeV forward neutrino 0.000147448 case= 49 above 20 MeV forward pion 0 - case= 50 above 20 MeV forward neutron 6.20904e-06 - case= 51 above 20 MeV forward proton 0 + case= 50 above 20 MeV forward neutron 4.17153e-06 + case= 51 above 20 MeV forward proton 7.45341e-07 case= 52 above 20 MeV forward ion 0 case= 53 above 20 MeV forward otherMeson 0 case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 8.30335e-05 + case= 55 above 20 MeV backward all 9.06133e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 8.28647e-05 + case= 59 above 20 MeV backward neutrino 9.06133e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 1.6878e-07 + case= 61 above 20 MeV backward neutron 0 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 77076.3 4.11504 317172 - case= 1 sphere electron 45672 1.78507 81527.7 - case= 2 sphere gamma 24023.7 3.45931 83105.5 - case= 3 sphere muon 5.07 15.2053 77.0908 - case= 4 sphere neutrino 15.19 37.1154 563.783 - case= 5 sphere pion 52.68 2025.36 106696 - case= 6 sphere neutron 3529.84 5.55834 19620 - case= 7 sphere proton 124.88 90.7687 11335.2 - case= 8 sphere ion 3647.51 0.385718 1406.91 - case= 9 sphere otherMeson 4.36 2708.94 11811 - case= 10 sphere otherBaryon 1.09 944.348 1029.34 - case= 11 sphere below 20 MeV all 75939 0.831697 63158.2 - case= 12 sphere below 20 MeV electron 45249.3 0.661188 29918.3 - case= 13 sphere below 20 MeV gamma 23626.8 1.17938 27864.9 - case= 14 sphere below 20 MeV muon 4.73 4.15455 19.651 - case= 15 sphere below 20 MeV neutrino 1.21 14.983 18.1294 - case= 16 sphere below 20 MeV pion 1.06 11.2952 11.9729 - case= 17 sphere below 20 MeV neutron 3379.84 1.27686 4315.59 - case= 18 sphere below 20 MeV proton 45.77 12.5679 575.231 - case= 19 sphere below 20 MeV ion 3629.92 0.118823 431.319 - case= 20 sphere below 20 MeV otherMeson 0.28 6.78269 1.89915 - case= 21 sphere below 20 MeV otherBaryon 0.09 13.0943 1.17849 - case= 22 sphere above 20 MeV all 1137.33 223.343 254014 - case= 23 sphere above 20 MeV electron 422.7 122.095 51609.4 - case= 24 sphere above 20 MeV gamma 396.91 139.177 55240.5 - case= 25 sphere above 20 MeV muon 0.34 168.941 57.4398 - case= 26 sphere above 20 MeV neutrino 13.98 39.031 545.653 - case= 27 sphere above 20 MeV pion 51.62 2066.72 106684 - case= 28 sphere above 20 MeV neutron 150 102.03 15304.4 - case= 29 sphere above 20 MeV proton 79.11 136.013 10760 - case= 30 sphere above 20 MeV ion 17.59 55.4628 975.59 - case= 31 sphere above 20 MeV otherMeson 4.08 2894.38 11809.1 - case= 32 sphere above 20 MeV otherBaryon 1 1028.16 1028.16 + case= 0 sphere all 76557.4 4.17744 319814 + case= 1 sphere electron 45470.6 1.84106 83713.9 + case= 2 sphere gamma 23937.7 3.56446 85325 + case= 3 sphere muon 5.26 13.5562 71.3058 + case= 4 sphere neutrino 15.81 36.9063 583.489 + case= 5 sphere pion 51.28 2103.58 107872 + case= 6 sphere neutron 3417.47 5.6226 19215.1 + case= 7 sphere proton 117.61 91.0037 10702.9 + case= 8 sphere ion 3536.65 0.435662 1540.78 + case= 9 sphere otherMeson 4.01 2522.25 10114.2 + case= 10 sphere otherBaryon 1.02 662.316 675.563 + case= 11 sphere below 20 MeV all 75410 0.837927 63188 + case= 12 sphere below 20 MeV electron 45040.2 0.667446 30061.9 + case= 13 sphere below 20 MeV gamma 23532.3 1.18542 27895.7 + case= 14 sphere below 20 MeV muon 4.92 4.11981 20.2695 + case= 15 sphere below 20 MeV neutrino 1.25 14.7835 18.4794 + case= 16 sphere below 20 MeV pion 1.16 11.773 13.6567 + case= 17 sphere below 20 MeV neutron 3271.59 1.29311 4230.52 + case= 18 sphere below 20 MeV proton 41.8 12.4504 520.425 + case= 19 sphere below 20 MeV ion 3516.38 0.120898 425.125 + case= 20 sphere below 20 MeV otherMeson 0.25 4.31395 1.07849 + case= 21 sphere below 20 MeV otherBaryon 0.09 9.83571 0.885214 + case= 22 sphere above 20 MeV all 1147.45 223.649 256626 + case= 23 sphere above 20 MeV electron 430.38 124.662 53652 + case= 24 sphere above 20 MeV gamma 405.4 141.661 57429.3 + case= 25 sphere above 20 MeV muon 0.34 150.107 51.0363 + case= 26 sphere above 20 MeV neutrino 14.56 38.8056 565.009 + case= 27 sphere above 20 MeV pion 50.12 2151.99 107858 + case= 28 sphere above 20 MeV neutron 145.88 102.718 14984.5 + case= 29 sphere above 20 MeV proton 75.81 134.316 10182.5 + case= 30 sphere above 20 MeV ion 20.27 55.0399 1115.66 + case= 31 sphere above 20 MeV otherMeson 3.76 2689.67 10113.1 + case= 32 sphere above 20 MeV otherBaryon 0.93 725.46 674.678 ============================================================= @@ -2101,7 +2103,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=48.250000s Real=48.335465s Sys=0.030000s + User=50.090000s Real=50.275881s Sys=0.100000s =============== Run::PrintInfo() =============== RunID = 7 @@ -2113,107 +2115,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.0150004 - case= 1 forward electron 2.08423e-05 - case= 2 forward gamma 0.000346503 - case= 3 forward muon 3.48872e-07 - case= 4 forward neutrino 0.000182034 - case= 5 forward pion 1.49659e-05 - case= 6 forward neutron 0.0144301 - case= 7 forward proton 3.98503e-06 - case= 8 forward ion 6.43953e-07 - case= 9 forward otherMeson 1.00678e-06 + case= 0 forward all 0.0145852 + case= 1 forward electron 1.44171e-05 + case= 2 forward gamma 0.000241942 + case= 3 forward muon 1.63686e-07 + case= 4 forward neutrino 0.000192115 + case= 5 forward pion 1.2124e-05 + case= 6 forward neutron 0.0141178 + case= 7 forward proton 5.83377e-06 + case= 8 forward ion 3.93718e-07 + case= 9 forward otherMeson 4.75962e-07 case= 10 forward otherBaryon 0 - case= 11 backward all 0.00238182 + case= 11 backward all 0.00253936 case= 12 backward electron 0 - case= 13 backward gamma 6.68512e-06 + case= 13 backward gamma 7.6607e-06 case= 14 backward muon 0 - case= 15 backward neutrino 7.48995e-05 + case= 15 backward neutrino 8.08169e-05 case= 16 backward pion 0 - case= 17 backward neutron 0.00230023 + case= 17 backward neutron 0.00245088 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.0146994 - case= 23 below 20 MeV forward electron 1.77933e-05 - case= 24 below 20 MeV forward gamma 0.000337465 + case= 22 below 20 MeV forward all 0.014278 + case= 23 below 20 MeV forward electron 1.24766e-05 + case= 24 below 20 MeV forward gamma 0.000236236 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.34139e-05 - case= 27 below 20 MeV forward pion 2.11481e-07 - case= 28 below 20 MeV forward neutron 0.0143306 + case= 26 below 20 MeV forward neutrino 1.28711e-05 + case= 27 below 20 MeV forward pion 0 + case= 28 below 20 MeV forward neutron 0.0140164 case= 29 below 20 MeV forward proton 0 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.00231318 + case= 33 below 20 MeV backward all 0.00246364 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 6.68512e-06 + case= 35 below 20 MeV backward gamma 7.6607e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 7.15944e-06 + case= 37 below 20 MeV backward neutrino 6.45041e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.00229933 + case= 39 below 20 MeV backward neutron 0.00244953 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000300974 - case= 45 above 20 MeV forward electron 3.04895e-06 - case= 46 above 20 MeV forward gamma 9.03747e-06 - case= 47 above 20 MeV forward muon 3.48872e-07 - case= 48 above 20 MeV forward neutrino 0.00016862 - case= 49 above 20 MeV forward pion 1.47544e-05 - case= 50 above 20 MeV forward neutron 9.95287e-05 - case= 51 above 20 MeV forward proton 3.98503e-06 - case= 52 above 20 MeV forward ion 6.43953e-07 - case= 53 above 20 MeV forward otherMeson 1.00678e-06 + case= 44 above 20 MeV forward all 0.000307255 + case= 45 above 20 MeV forward electron 1.94045e-06 + case= 46 above 20 MeV forward gamma 5.70581e-06 + case= 47 above 20 MeV forward muon 1.63686e-07 + case= 48 above 20 MeV forward neutrino 0.000179244 + case= 49 above 20 MeV forward pion 1.2124e-05 + case= 50 above 20 MeV forward neutron 0.000101374 + case= 51 above 20 MeV forward proton 5.83377e-06 + case= 52 above 20 MeV forward ion 3.93718e-07 + case= 53 above 20 MeV forward otherMeson 4.75962e-07 case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 6.86418e-05 + case= 55 above 20 MeV backward all 7.57217e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 6.774e-05 + case= 59 above 20 MeV backward neutrino 7.43665e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 9.01745e-07 + case= 61 above 20 MeV backward neutron 1.35521e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 50616.1 5.82977 295080 - case= 1 sphere electron 29944.6 2.49634 74751.9 - case= 2 sphere gamma 17144.8 4.40865 75585.6 - case= 3 sphere muon 4.95 16.3479 80.9221 - case= 4 sphere neutrino 14.76 36.7352 542.211 - case= 5 sphere pion 49.45 2096.71 103682 - case= 6 sphere neutron 2072 8.57719 17771.9 - case= 7 sphere proton 108.75 96.0603 10446.6 - case= 8 sphere ion 1271.82 1.17881 1499.23 - case= 9 sphere otherMeson 3.86 2587.88 9989.21 - case= 10 sphere otherBaryon 1.07 682.697 730.485 - case= 11 sphere below 20 MeV all 49519.2 0.978046 48432 - case= 12 sphere below 20 MeV electron 29534 0.788799 23296.4 - case= 13 sphere below 20 MeV gamma 16755.6 1.22078 20454.8 - case= 14 sphere below 20 MeV muon 4.61 4.1428 19.0983 - case= 15 sphere below 20 MeV neutrino 1.19 14.3583 17.0863 - case= 16 sphere below 20 MeV pion 1.07 11.4153 12.2144 - case= 17 sphere below 20 MeV neutron 1936.05 1.96817 3810.47 - case= 18 sphere below 20 MeV proton 36.77 12.6215 464.094 - case= 19 sphere below 20 MeV ion 1249.5 0.283871 354.697 - case= 20 sphere below 20 MeV otherMeson 0.32 5.97748 1.91279 - case= 21 sphere below 20 MeV otherBaryon 0.1 12.6078 1.26078 - case= 22 sphere above 20 MeV all 1096.97 224.845 246648 - case= 23 sphere above 20 MeV electron 410.64 125.306 51455.6 - case= 24 sphere above 20 MeV gamma 389.28 141.622 55130.8 - case= 25 sphere above 20 MeV muon 0.34 181.835 61.8238 - case= 26 sphere above 20 MeV neutrino 13.57 38.6975 525.125 - case= 27 sphere above 20 MeV pion 48.38 2142.82 103670 - case= 28 sphere above 20 MeV neutron 135.95 102.696 13961.5 - case= 29 sphere above 20 MeV proton 71.98 138.684 9982.46 - case= 30 sphere above 20 MeV ion 22.32 51.2785 1144.54 - case= 31 sphere above 20 MeV otherMeson 3.54 2821.27 9987.3 - case= 32 sphere above 20 MeV otherBaryon 0.97 751.778 729.225 + case= 0 sphere all 51500.7 5.84242 300889 + case= 1 sphere electron 30535.1 2.52601 77131.9 + case= 2 sphere gamma 17503.8 4.45465 77973.4 + case= 3 sphere muon 5.15 21.2031 109.196 + case= 4 sphere neutrino 15.34 37.6631 577.751 + case= 5 sphere pion 49.44 2086.55 103159 + case= 6 sphere neutron 2033.76 8.60744 17505.5 + case= 7 sphere proton 102.96 103.817 10689 + case= 8 sphere ion 1250.43 1.27864 1598.85 + case= 9 sphere otherMeson 3.72 2901.8 10794.7 + case= 10 sphere otherBaryon 0.95 1420.28 1349.26 + case= 11 sphere below 20 MeV all 50377.3 0.98176 49458.4 + case= 12 sphere below 20 MeV electron 30107.2 0.793564 23892 + case= 13 sphere below 20 MeV gamma 17099.6 1.2235 20921.4 + case= 14 sphere below 20 MeV muon 4.71 4.12489 19.4282 + case= 15 sphere below 20 MeV neutrino 1.08 14.7171 15.8945 + case= 16 sphere below 20 MeV pion 1.12 12.8494 14.3914 + case= 17 sphere below 20 MeV neutron 1900.58 1.98763 3777.65 + case= 18 sphere below 20 MeV proton 35.77 12.4817 446.47 + case= 19 sphere below 20 MeV ion 1226.92 0.300393 368.558 + case= 20 sphere below 20 MeV otherMeson 0.23 8.39832 1.93161 + case= 21 sphere below 20 MeV otherBaryon 0.08 9.06347 0.725077 + case= 22 sphere above 20 MeV all 1123.36 223.82 251430 + case= 23 sphere above 20 MeV electron 427.87 124.43 53239.9 + case= 24 sphere above 20 MeV gamma 404.23 141.138 57052 + case= 25 sphere above 20 MeV muon 0.44 204.018 89.7679 + case= 26 sphere above 20 MeV neutrino 14.26 39.4009 561.857 + case= 27 sphere above 20 MeV pion 48.32 2134.62 103145 + case= 28 sphere above 20 MeV neutron 133.18 103.077 13727.8 + case= 29 sphere above 20 MeV proton 67.19 152.441 10242.5 + case= 30 sphere above 20 MeV ion 23.51 52.3307 1230.3 + case= 31 sphere above 20 MeV otherMeson 3.49 3092.48 10792.8 + case= 32 sphere above 20 MeV otherBaryon 0.87 1550.04 1348.54 ============================================================= @@ -2307,7 +2309,7 @@ Index : 9 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=27.520000s Real=27.584207s Sys=0.020000s + User=30.180000s Real=30.246970s Sys=0.050000s =============== Run::PrintInfo() =============== RunID = 8 @@ -2319,110 +2321,110 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00286106 - case= 1 forward electron 1.40321e-05 - case= 2 forward gamma 0.000476651 - case= 3 forward muon 6.95087e-07 - case= 4 forward neutrino 0.000187233 - case= 5 forward pion 2.08958e-05 - case= 6 forward neutron 0.00214898 - case= 7 forward proton 1.10057e-05 - case= 8 forward ion 0 - case= 9 forward otherMeson 1.56705e-06 - case= 10 forward otherBaryon 0 - case= 11 backward all 0.000105074 + case= 0 forward all 0.00303272 + case= 1 forward electron 2.99122e-05 + case= 2 forward gamma 0.000526241 + case= 3 forward muon 3.23566e-07 + case= 4 forward neutrino 0.000215835 + case= 5 forward pion 1.57034e-05 + case= 6 forward neutron 0.00223445 + case= 7 forward proton 7.34334e-06 + case= 8 forward ion 2.46924e-07 + case= 9 forward otherMeson 2.2569e-06 + case= 10 forward otherBaryon 4.04998e-07 + case= 11 backward all 0.000112873 case= 12 backward electron 0 - case= 13 backward gamma 1.68513e-06 + case= 13 backward gamma 1.54823e-06 case= 14 backward muon 0 - case= 15 backward neutrino 8.35514e-05 + case= 15 backward neutrino 8.87382e-05 case= 16 backward pion 0 - case= 17 backward neutron 1.98371e-05 + case= 17 backward neutron 2.25866e-05 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00249912 - case= 23 below 20 MeV forward electron 1.1659e-05 - case= 24 below 20 MeV forward gamma 0.000470788 + case= 22 below 20 MeV forward all 0.00261838 + case= 23 below 20 MeV forward electron 2.35848e-05 + case= 24 below 20 MeV forward gamma 0.000515843 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.549e-05 + case= 26 below 20 MeV forward neutrino 1.75431e-05 case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 0.00199954 - case= 29 below 20 MeV forward proton 1.64195e-06 - case= 30 below 20 MeV forward ion 0 + case= 28 below 20 MeV forward neutron 0.00206116 + case= 29 below 20 MeV forward proton 0 + case= 30 below 20 MeV forward ion 2.46924e-07 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 2.71248e-05 + case= 33 below 20 MeV backward all 3.00351e-05 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 1.68513e-06 + case= 35 below 20 MeV backward gamma 1.54823e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 7.53035e-06 + case= 37 below 20 MeV backward neutrino 7.45488e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 1.79093e-05 + case= 39 below 20 MeV backward neutron 2.1032e-05 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00036194 - case= 45 above 20 MeV forward electron 2.37312e-06 - case= 46 above 20 MeV forward gamma 5.86256e-06 - case= 47 above 20 MeV forward muon 6.95087e-07 - case= 48 above 20 MeV forward neutrino 0.000171743 - case= 49 above 20 MeV forward pion 2.08958e-05 - case= 50 above 20 MeV forward neutron 0.000149439 - case= 51 above 20 MeV forward proton 9.36376e-06 + case= 44 above 20 MeV forward all 0.000414341 + case= 45 above 20 MeV forward electron 6.32741e-06 + case= 46 above 20 MeV forward gamma 1.0398e-05 + case= 47 above 20 MeV forward muon 3.23566e-07 + case= 48 above 20 MeV forward neutrino 0.000198292 + case= 49 above 20 MeV forward pion 1.57034e-05 + case= 50 above 20 MeV forward neutron 0.000173292 + case= 51 above 20 MeV forward proton 7.34334e-06 case= 52 above 20 MeV forward ion 0 - case= 53 above 20 MeV forward otherMeson 1.56705e-06 - case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 7.79489e-05 + case= 53 above 20 MeV forward otherMeson 2.2569e-06 + case= 54 above 20 MeV forward otherBaryon 4.04998e-07 + case= 55 above 20 MeV backward all 8.28379e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 7.60211e-05 + case= 59 above 20 MeV backward neutrino 8.12833e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 1.92781e-06 + case= 61 above 20 MeV backward neutron 1.55458e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 57597.6 5.21303 300258 - case= 1 sphere electron 34348.5 2.19393 75358.2 - case= 2 sphere gamma 18074.6 4.19939 75902.4 - case= 3 sphere muon 5.07 25.0409 126.957 - case= 4 sphere neutrino 15.06 41.6734 627.602 - case= 5 sphere pion 50.94 2084.7 106195 - case= 6 sphere neutron 1707.31 9.31725 15907.4 - case= 7 sphere proton 119.24 85.6245 10209.9 - case= 8 sphere ion 3272.07 0.522157 1708.53 - case= 9 sphere otherMeson 3.95 3477.76 13737.2 - case= 10 sphere otherBaryon 0.82 591.66 485.161 - case= 11 sphere below 20 MeV all 56543.9 0.895974 50661.9 - case= 12 sphere below 20 MeV electron 33944.1 0.723351 24553.5 - case= 13 sphere below 20 MeV gamma 17697.9 1.22229 21631.8 - case= 14 sphere below 20 MeV muon 4.73 4.21901 19.9559 - case= 15 sphere below 20 MeV neutrino 1.27 14.7511 18.7339 - case= 16 sphere below 20 MeV pion 1.1 12.4332 13.6765 - case= 17 sphere below 20 MeV neutron 1584.65 1.89033 2995.51 - case= 18 sphere below 20 MeV proton 53.81 9.55143 513.963 - case= 19 sphere below 20 MeV ion 3256.02 0.279906 911.38 - case= 20 sphere below 20 MeV otherMeson 0.25 7.86869 1.96717 - case= 21 sphere below 20 MeV otherBaryon 0.14 9.98834 1.39837 - case= 22 sphere above 20 MeV all 1053.66 236.885 249596 - case= 23 sphere above 20 MeV electron 404.41 125.627 50804.7 - case= 24 sphere above 20 MeV gamma 376.76 144.045 54270.6 - case= 25 sphere above 20 MeV muon 0.34 314.71 107.001 - case= 26 sphere above 20 MeV neutrino 13.79 44.1529 608.868 - case= 27 sphere above 20 MeV pion 49.84 2130.44 106181 - case= 28 sphere above 20 MeV neutron 122.66 105.266 12911.9 - case= 29 sphere above 20 MeV proton 65.43 148.187 9695.91 - case= 30 sphere above 20 MeV ion 16.05 49.6668 797.153 - case= 31 sphere above 20 MeV otherMeson 3.7 3712.22 13735.2 - case= 32 sphere above 20 MeV otherBaryon 0.68 711.415 483.762 + case= 0 sphere all 58254.8 5.17841 301667 + case= 1 sphere electron 34739.5 2.19221 76156.3 + case= 2 sphere gamma 18276 4.20163 76789.1 + case= 3 sphere muon 5.62 23.5794 132.516 + case= 4 sphere neutrino 16.74 37.3946 625.986 + case= 5 sphere pion 50.68 2080.41 105435 + case= 6 sphere neutron 1733.47 9.40716 16307 + case= 7 sphere proton 117.96 88.8233 10477.6 + case= 8 sphere ion 3308.93 0.578268 1913.45 + case= 9 sphere otherMeson 4.54 2790.03 12666.7 + case= 10 sphere otherBaryon 1.34 867.949 1163.05 + case= 11 sphere below 20 MeV all 57188.6 0.896738 51283.2 + case= 12 sphere below 20 MeV electron 34331.2 0.722864 24816.8 + case= 13 sphere below 20 MeV gamma 17895.3 1.22405 21904.7 + case= 14 sphere below 20 MeV muon 5.1 4.17546 21.2949 + case= 15 sphere below 20 MeV neutrino 1.37 14.2044 19.46 + case= 16 sphere below 20 MeV pion 1.15 11.7026 13.458 + case= 17 sphere below 20 MeV neutron 1610.58 1.90356 3065.83 + case= 18 sphere below 20 MeV proton 53.7 9.49224 509.733 + case= 19 sphere below 20 MeV ion 3289.8 0.282103 928.064 + case= 20 sphere below 20 MeV otherMeson 0.25 7.1239 1.78098 + case= 21 sphere below 20 MeV otherBaryon 0.16 12.9775 2.07641 + case= 22 sphere above 20 MeV all 1066.21 234.836 250384 + case= 23 sphere above 20 MeV electron 408.29 125.743 51339.5 + case= 24 sphere above 20 MeV gamma 380.75 144.148 54884.4 + case= 25 sphere above 20 MeV muon 0.52 213.887 111.221 + case= 26 sphere above 20 MeV neutrino 15.37 39.4617 606.526 + case= 27 sphere above 20 MeV pion 49.53 2128.45 105422 + case= 28 sphere above 20 MeV neutron 122.89 107.748 13241.2 + case= 29 sphere above 20 MeV proton 64.26 155.118 9967.87 + case= 30 sphere above 20 MeV ion 19.13 51.5099 985.385 + case= 31 sphere above 20 MeV otherMeson 4.29 2952.2 12665 + case= 32 sphere above 20 MeV otherBaryon 1.18 983.878 1160.98 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.13 MB +Dynamic pools deleted: 11 / Total memory freed: 0.14 MB ============================================================ diff --git a/examples/extended/medical/.README.txt b/examples/extended/medical/.README.txt index d4a1df86fd..b6cec326b2 100644 --- a/examples/extended/medical/.README.txt +++ b/examples/extended/medical/.README.txt @@ -7,7 +7,7 @@ Specific examples for medical physics applications are demonstarted in this directory. -\link ExampleDICOM DICOM \endlink +\link ExamplesDICOM DICOM \endlink This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and @@ -15,7 +15,7 @@ densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. -\link ExampleDICOM2 DICOM2 \endlink +\link ExampleDICOM_2 DICOM2 \endlink This example demonstrates how to reuse the DICOM example library for another application. diff --git a/examples/extended/medical/DICOM/.README.txt b/examples/extended/medical/DICOM/.README.txt index 2e3a0d5698..21778365af 100644 --- a/examples/extended/medical/DICOM/.README.txt +++ b/examples/extended/medical/DICOM/.README.txt @@ -1,11 +1,11 @@ ///\file "medical/DICOM/.README.txt" -///\brief ExampleDICOM README page +///\brief DICOM Examples README page -/*! \page ExampleDICOM Example DICOM +/*! \page ExamplesDICOM DICOM Examples -The DICOM application has been originally developed by the Geant4 users: \n +The DICOM applications were originally developed by the Geant4 users: \n Louis Archambault,(1)Luc Beaulieu, (2)Vincent Hubert-Tremblay. - (1) Centre Hospitalier Universitaire de Quebec (CHUQ), \n @@ -17,343 +17,107 @@ web : thomson.phy.ulaval.ca/phys_med \n - (2) Universite Laval, Quebec (QC) Canada -And it has been deeply reviewed by Pedro Arce in December 2007. \n +It has since been deeply reviewed by Pedro Arce in December 2007. \n Very small changes by Stephane Chauvie in January 2008. \n Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. \n Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file \n Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 \n +\section DICOM_s0 Introduction -\section DICOM_s0 NEW DICOM READER BASED ON DCMTK +This example consists of the following applications: -A new way to read DICOM files has been implemented since release 10.3, to avoid the often problems found by users when reading DICOM files. -It can also read RT structures in DICOM format as well as RT plans. -This utility uses the DCMTK (http://dicom.offis.de/dcmtk.php.en). +- DICOM1 +- DICOM2 -\section DICOM_s1 NEW DICOM HEAD Project +with two libraries that implement capabilities common to both applications: -A new DICOM Digital Head included by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. Available since Geant4 10.4. -The Digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., +- 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. + It uses the [DCMTK library](http://dicom.offis.de/dcmtk.php.en), which must be installed if you wish to use this capability. + - Requires DCMTK 3.6.1 or newer, with the `dcmrt` package available. + +Both application can optionally use the DICOM Digital Head developed by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. +This digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. -\section DICOM_s2 Introduction - -This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. - -You can find the phantom reproduced in the image PhantomCT.jpg. -In the application the phantom is placed on a table. - -\section DICOM_s3a Installation OLD: - - - A standard Geant4 example CMakeLists.txt is provided - - Configure via cmake with 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x /path/to/DICOM/source' then make - -\section DICOM_s3b Installation NEW: - -You have to download and install DCMTK, see http://dicom.offis.de/dcmtk.php.en . At least you need version 3.6.1 or newer; the important thing is that you make sure it contains the dcmrt package. -Then define the enviromental variable DCMTK_BASE_DIR to point to the directory where you have installed it. -And to run it, you have to add to the enviromental variable LD_LIBRARY_PATH the path ${DCMTK_BASE_DIR}/lib (i.e. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${DCMTK_BASE_DIR}/lib ) - -Then you have to set the enviromental variable DICOM_USE_DCMTK to 1. - - A standard Geant4 example GNUmakefile is provided, but have to uncomment the line -\verbatim -#DICOM_USE_DCMTK := true -\endverbatim - - Compile it with 'make'/'gmake' - - - A standard Geant4 example CMakeLists.txt is provided - - Configure via cmake with -\verbatim - 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x \ - -DDCMTK_DIR=/path_to_dcmtk_install /path/to/DICOM/source' -\endverbatim - then make - -\section DICOM_s3c CMake installation and inheriting from DICOM - - - Set the CMAKE_INSTALL_PREFIX (typically use the same install prefix as the Geant4 distribution) - - Install the project - - Installation will install libraries + DICOMConfig.cmake + other config files - - if DCMTK is enabled, will also install dicomReader library + icomReaderConfig.cmake and it's other config files - - In the new Geant4 application, add "find_package(DICOM REQUIRED)" to CMakeLists.txt - - (optionally) add "set(DICOM_DIR ${Geant4_DIR} CACHE PATH "Path to DICOM installation config files") to CMakeLists.txt - - add "include_directories(${DICOM_INCLUDE_DIRS}) and link target to ${DICOM_LIBRARIES} - - if DCMTK is enabled, DICOMConfig.cmake will include the DCMTK and dicomReader installations, i.e. there is not need for "find_package(dicomReader)" or "find_package(DCMTK)" - -\section DICOM_s4 Run the example: - - - To run the environment variable G4LEDATA needs to be set, pointing to the low energy data base, and the G4LEVELGAMMADATA pointing to the PhotonEvaporation data base - - - batch mode: -\verbatim -DICOM run.mac -\endverbatim - - - interactive mode: -\verbatim -DICOM -\endverbatim - the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML - - - - Environment variables: - - DICOM_CHANGE_MATERIAL_DENSITY - - set to the minimum density difference before making a separate material - - e.g. if DenseBone is from > 1.496 to <= 1.654 and DICOM_CHANGE_MATERIAL_DENSITY=0.079 - then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 - - DICOM_PARTIAL_PARAM - - set to 1 to build the partial build instead of regular or nested construction (see section 9) - - DICOM_NESTED_PARAM - - set to 1 to build the nested construction (see section 9; overridden by DICOM_PARTIAL_PARAM) - - DICOM_NTHREADS - - To set the number of threads (when G4MULTITHREADED is defined via GEANT4_BUILD_MULTITHREADED=ON during Geant4 source build) - - Needs to be set to the number of desired threads, e.g. DICOM_NTHREADS=8 (default is 4 threads) - - DICOM_USE_HEAD - - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., - "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. - To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. - For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. - When using this option, - 1) export DICOM_USE_HEAD=1 - 2) export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project - or - export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. - 3) THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) - Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction - without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). - -\section DICOM_s5 Metadata file: - -The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, -"Data.dat.old" is copied into the binary directory at "Data.dat". - - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat - -The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, -"Data.dat.new" is copied into the binary directory as "Data.dat". - - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat - -\section DICOM_s5a Metadata file, OLD version: - - The file Data.dat has the following information - - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) - - A line with the number of files - - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) - -In case you want to convert DICOM files to text files, it must have the following lines: - - The number of materials you want to use - - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. - -\section DICOM_s5b Metadata file, NEW version (based on DCMTK): - -As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). -The following tags should be used: - -\subsection DICOM_s5b_sub1 :COMPRESSION level -Where "level" is the number of voxels that will be merged into one in the X and Y dimen- -sions. The Hounsfield numbers of the voxels merged are averaged to give the -resulting value for the new voxel.\n -Example: -\verbatim -:COMPRESSION 4 -\endverbatim -4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 - -\subsection DICOM_s5b_sub2 :FILE file_name -These are the list of files (one line per file) in DICOM format that will be treated. -They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically -detect its modality and treat it correspondingly).\n -Example: -\verbatim -:FILE 1.dcm -:FILE 2.dcm -:FILE 3.dcm -\endverbatim - -\subsection DICOM_s5b_sub3 :CT2D Hounsfield_number density -These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs.\n -Example: -\verbatim -:CT2D -5000 0. -:CT2D -1000 0.01 -:CT2D -400 0.602 -:CT2D 300 1.145 -:CT2D 2000 1.856 -\endverbatim - -\subsection DICOM_s5b_sub4 :MATE material_name upper_bound_of_material_Hounsfield_number_interval -This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc.\n -Example: -\verbatim -:MATE G4_AIR -800 -:MATE G4_LUNG_ICRP -145 -:MATE G4_ADIPOSE_TISSUE_ICRP -60 -:MATE G4_WATER 0 -\endverbatim - -Alternatively to the use of :MATE, you can use the :MATE_DENS -\subsection DICOM_s5b_sub5 :MATE_DENS material_name upper_bound_of_material_density_interval -This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc.\n -Example: -\verbatim -:MATE_DENS G4_AIR 0.207 -:MATE_DENS G4_LUNG_ICRP 0.919 -:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 -:MATE_DENS G4_WATER 1.01 -\endverbatim - -We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. - -\subsection DICOM_s5b_sub6 :FILE_OUT file_name -Name of output file containing the DICOM information in ASCII format - -\section DICOM_s6 Conversion of Hounsfield numbers to materials: - -After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. -Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. - -The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. -The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density -The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: - -
-           #####################################################
-           #     Density Range                   Material      #
-           #---------------------------------------------------#
-           #       mg/cm3                            -         #
-           #---------------------------------------------------#
-           #  [ 0.    , 0.207 )                 Air            #
-           #  [ 0.207 , 0.481 )                 Lungs (inhale) #
-           #  [ 0.481 , 0.919 )                 Lungs (exhale) #
-           #  [ 0.919 , 0.979 )                 Adipose        #
-           #  [ 0.979 , 1.004 )                 Breast         #
-           #  [ 1.004 , 1.043 )                 Phantom        #
-           #  [ 1.043 , 1.109 )                 Liver          #
-           #  [ 1.109 , 1.113 )                 Muscle         #
-           #  [ 1.113 , 1.496 )                 Trabecular Bone#
-           #  [ 1.496 , 1.654 ]                 Dense Bone     #
-           #####################################################
-
- -Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...) - -\section DICOM_s7 Splitting materials in density intervals: - -In the class DicomDetectorConstruction, it is defined a density interval - -\verbatim -G4double densityDiff = 0.1; -\endverbatim - -This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. - -\section DICOM_s8 Voxel colouring: - -The file Colormap.dat defines the colour that will be assigned to the voxels of each material. - -\section DICOM_s9 DICOM file formats: - -The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): - -- A line with the number of materials -- A line for each material with its index and name (the same name of materials that you construct as G4Material's) -- A line with the number of voxels in X, Y and Z -- A line with the minimum and maximum extension in X (mm) -- A line with the minimum and maximum extension in Y (mm) -- A line with the minimum and maximum extension in Z (mm) -- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) -- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) - -As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. - -The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . - -\section DICOM_s10 Choosing different parameterisation/navigation options: - -There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: - --# The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory --# Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory --# Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit scorer can be used for *regular* navigation and G4PSDoseDeposit3D for *nested* parameterisation (see descriptions below). - -Obsolete option: --# The 1D optimisation . It will be very slow because each time a track exits a voxel it has to loop to all other voxels to know which one it may enter - -You can select among the four options in the following way: - -- By default the example will run with G4RegularNavigation - -- To use the first option at RegularDicomDetectorConstruction.cc you just have to set -\verbatim -patient_phys->SetRegularStructureId(0); -\endverbatim - -- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 - -- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstructio\ -n.cc you need to replace (i.e. use kUndefined) -\verbatim -G4PVParameterised* patient_phys - = new G4PVParameterised("Patient",voxel_logic,container_logic, - kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); -\endverbatim -by -\verbatim -G4PVParameterised * patient_phys - = new G4PVParameterised("Patient",voxel_logic,container_logic, - kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); -\endverbatim - -Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. - - -\section DICOM_s11 Calculating dose in phantom voxels for regular navigation - -As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit_RegNav scorer can be used. - -It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. -The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. -It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. - -This scorer is implemented in this examples if the regular navigation option is -chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call -\verbatim -SetScorer(voxel_logic); -\endverbatim - -\section DICOM_s12 Calculating dose in phantom voxels for nested parameterisation - -For the nested parameterisation the geometry comprises replicas in X and Y which are then parameterised in Z. This means that to get the correct voxel idendification the replica depth has to be taken into account. The G4PSDoseDeposit3D scorers uses a fixed algorithm to calculate the voxel ID, according to the number of voxels in each axes and the associated replica depth. -\verbatim -G4PSDoseDeposit3D("DoseDeposit", fNoVoxelsZ, fNoVoxelsY, fNoVoxelsX, 0, 2, 1) -\endverbatim -contains the number of voxels at the top (Z) level (0) and then two daughter levels down for the Y-voxels and one depth down for X. - -\section DICOM_s13 Output -dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of -voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) -It is produced, as an example, with a compression value of 32 - - -\section DICOM_s14 Partial phantom -It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command - -\verbatim -/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. -\endverbatim - -where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format - -Alternatively you can intersect the phantom with an existing Geant4 volume with the command - -\verbatim -/dicom/intersectWithG4Volume VOLUME_NAME -\endverbatim - -The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 - -\section DICOM_s15 Visualisation - -The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. -The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. +\section DICOM_s1 Compiling the libraries and applications + +A standard Geant4 example `CMakeLists.txt` is provided, and thus the project may be configured and built using: + +``` +$ cmake -DCMAKE_PREFIX_PATH=/path/to/geant4-install -S. -Bbuild +$ cmake --build ./build +``` + +Note that this assumes you run `cmake` in the top level `DICOM` directory. + +To build the applications and libraries with support for reading DICOM files using DCMTK, run `cmake` as + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH=/path/to/geant4-install \ + -DG4DICOM_USE_DCMTK=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +This requires that you have DCMTK v3.6.1 or newer with the `dcmrt` package installed. If CMake has problems +located the install of DCMTK, add its install path to the `CMAKE_PREFIX_PATH` argument, e.g. + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH="/path/to/geant4-install;/path/to/dcmtk-install" \ + -DG4DICOM_USE_DCMTK=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +To enable use of the DICOM Digital Head model, run cmake as: + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH=/path/to/geant4-install \ + -DG4DICOM_USE_HEAD=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +This requires a working network connection in order to download the model from the Geant4 website. + + +\section DICOM_s2 Running the applications + +Both applications can have their runtime behaviour configured using a series on environment variables: + +- `DICOM_CHANGE_MATERIAL_DENSITY` + - set to the minimum density difference before making a separate material + - e.g. if DenseBone is from > 1.496 to <= 1.654 and `DICOM_CHANGE_MATERIAL_DENSITY=0.079` + then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 +- `DICOM_PARTIAL_PARAM` + - set to 1 to build the partial build instead of regular or nested construction (see section 9) +- `DICOM_NESTED_PARAM` + - set to 1 to build the nested construction (see section 9; overridden by `DICOM_PARTIAL_PARAM`) +- `DICOM_NTHREADS` + - To set the number of threads (only when Geant4 itself has been built with multithreading capability) + - Needs to be set to the number of desired threads, e.g. `DICOM_NTHREADS=8` (default is 4 threads) +- `DICOM_USE_HEAD` + - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., + "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. + For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. + When using this option, + + - export DICOM_USE_HEAD=1 + - export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project + or + export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. + - THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) + + Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction + without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). + +Detailed information on the capabilities of, and how to run, the `DICOM1` and `DICOM2` applications +are available in the [DICOM1 README](@ref ExampleDICOM_1) and [DICOM2 README](@ref ExampleDICOM_2) respectively. */ diff --git a/examples/extended/medical/DICOM/CMakeLists.txt b/examples/extended/medical/DICOM/CMakeLists.txt index 1bdf6151cf..dd7e8edbdd 100644 --- a/examples/extended/medical/DICOM/CMakeLists.txt +++ b/examples/extended/medical/DICOM/CMakeLists.txt @@ -1,245 +1,42 @@ #---------------------------------------------------------------------------- # Setup the project cmake_minimum_required(VERSION 3.16...3.27) -project(DICOM) - -option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() +project(G4DICOM) #---------------------------------------------------------------------------- -# DICOM configure options +# Find Geant4 package, activating all available UI and Vis drivers by default +# See the documentation for a guide on how to enable/disable specific components # -include(CMakeDependentOption) -# this macro checks for environment variable ${VAR} and sets ENV_${VAR} if -# if is a non-empty string. If empty string and ${VAR} is defined in CMake -# cache, then set ENV_${VAR} to it's value -# NOTE: environment variable, if set, overrides cache value -macro(check_environment VAR) - set(ENV_${VAR} "$ENV{${VAR}}") - if("${ENV_${VAR}}" STREQUAL "" AND DEFINED ${VAR}) - set(ENV_${VAR} ${${VAR}}) - else() - set(ENV_${VAR} OFF) # default to off - endif() -endmacro(check_environment VAR) - -check_environment(DICOM_USE_DCMTK) -check_environment(DICOM_USE_HEAD) -# enable option if environment variable set (backwards-compat) -option(DICOM_USE_DCMTK "DICOM with DCMTK support" ${ENV_DICOM_USE_DCMTK}) -option(DICOM_USE_HEAD "Download DICOM_HEAD data" ${ENV_DICOM_USE_HEAD}) - -if(DICOM_USE_HEAD) - add_definitions(-DDICOM_USE_HEAD) -endif() - +find_package(Geant4 REQUIRED ui_all vis_all) #---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# -include(${Geant4_USE_FILE}) -include("${PROJECT_SOURCE_DIR}/dicomReader/cmake/DICOMUtilities.cmake") - -#---------------------------------------------------------------------------- -# Add dicomReader subdirectory -# -if(DICOM_USE_DCMTK) - message(STATUS "${PROJECT_NAME}: Using DCMTK") - find_package(DCMTK REQUIRED) - add_definitions(-DG4_DCMTK) - add_subdirectory(dicomReader) - set(DICOM_READER_LIBRARY dicomReader${_geant4_lib_use_suffix}) -endif() +# We can optional build these examples with support for the DCMTK libraries, +# and use of HEAD data. +option(G4DICOM_USE_DCMTK "Build with DCMTK support" OFF) +option(G4DICOM_USE_HEAD "Download and use HEAD data" OFF) +# For HEAD data, we need to download the data #---------------------------------------------------------------------------- # Download DICOM_HEAD data # # enable option if environment variable set (backwards-compat) -if(DICOM_USE_HEAD) - message(STATUS "${PROJECT_NAME}: Enabling DICOM_HEAD data download") - set(CMAKE_MODULE_PATH - ${PROJECT_SOURCE_DIR}/cmake - ${CMAKE_MODULE_PATH}) +if(G4DICOM_USE_HEAD) + message(STATUS "Enabling DICOM_HEAD data download") + set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) include(DownloadDICOMData) endif() -#---------------------------------------------------------------------------- -# Locate sources and headers for this project -# -include_directories(${PROJECT_SOURCE_DIR}/include - ${PROJECT_SOURCE_DIR}/dicomReader/include - ${Geant4_INCLUDE_DIR} - ${DCMTK_INCLUDE_DIRS}) - -file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - -# List any source specific properties here - - - -#---------------------------------------------------------------------------- -# Add the executable, and link it to the Geant4 libraries -# -dicom_build_library( - BUILD_SHARED ${Geant4_shared_FOUND} - BUILD_STATIC ${Geant4_static_FOUND} - OUTPUT_NAME DICOM - TARGET_NAME DICOM-library - SOURCES ${headers} ${sources} - LINK_LIBRARIES ${Geant4_LIBRARIES} ${DICOM_READER_LIBRARY} ${DCMTK_LIBRARIES}) - -# DICOM-library-target is set in dicom_build_library -add_executable(DICOM DICOM.cc) -target_link_libraries(DICOM DICOM::library) - - -#---------------------------------------------------------------------------- -# Copy all scripts to the build directory, i.e. the directory in which we -# build DICOM. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. -# - -# the macros -set(DICOM_MACROS run.mac vis.mac) - -# original set of DICOM data -set(DICOM_SCRIPTS - 1.dcm 2.dcm 3.dcm - 1.g4 2.g4 3.g4 - 1.g4dcm 2.g4dcm 3.g4dcm - ColourMap.dat CT2Density.dat - Data.dat.new Data.dat.old - Data.dat.new_dens Data.partial.dat -) - -# new DICOM data (in share directory) -set(DICOM_SHARE - AltData.dat SixSlice.dat - IM-0003-0001.dcm IM-0003-0003.dcm IM-0003-0005.dcm IM-0003-0007.dcm IM-0003-0009.dcm - IM-0003-0002.dcm IM-0003-0004.dcm IM-0003-0006.dcm IM-0003-0008.dcm IM-0003-0010.dcm -) - -# copy over scripts -foreach(_script ${DICOM_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY) -endforeach() - -# copy either Data.dat.old or Data.dat.new to Data.dat based on build settings -if(DICOM_USE_DCMTK) - configure_file(${PROJECT_SOURCE_DIR}/Data.dat.new - ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) -else() - configure_file(${PROJECT_SOURCE_DIR}/Data.dat.old - ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) +# If we choose to use DCMTK, we must find it, then build the interface to it +# TODO: Make this work with DCMTK 3 +if(G4DICOM_USE_DCMTK) + add_subdirectory(G4DicomReader) endif() -# copy over files in share -foreach(_script ${DICOM_SHARE}) - configure_file( - ${PROJECT_SOURCE_DIR}/share/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY) -endforeach() +# Build library of functionality shared between the two example applications +add_subdirectory(G4DicomCore) -# copy over macros -foreach(_script ${DICOM_MACROS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY) -endforeach() +# Build the example applications +add_subdirectory(DICOM1) +add_subdirectory(DICOM2) -# ensure files have correct compile definitions -if(DICOM_USE_DCMTK) - set_source_files_properties( ${sources} - PROPERTIES COMPILE_DEFINITIONS G4_DCMTK) -endif() -#---------------------------------------------------------------------------- -# Configuration for export and installation -# -include(CMakePackageConfigHelpers) -include(GNUInstallDirs) - -#---------------------------------------------------------------------------- -# Configuration for build tree -# -export(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES} - FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Build.cmake) - -set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Build.cmake) -set(PACKAGE_INCLUDE_INSTALL_DIR ${PROJECT_SOURCE_DIR}/include) -set(PACKAGE_INIT -"macro(set_and_check _var _file) - set(\${_var} \"\${_file}\") - if(NOT EXISTS \"\${_file}\") - message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\") - endif() -endmacro() - -macro(check_required_components _NAME) - foreach(comp \${\${_NAME}_FIND_COMPONENTS}) - if(NOT \${_NAME}_\${comp}_FOUND) - if(\${_NAME}_FIND_REQUIRED_\${comp}) - set(\${_NAME}_FOUND FALSE) - endif() - endif() - endforeach() -endmacro() -") - -configure_file( - ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake @ONLY) - -write_basic_package_version_file( - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${Geant4_VERSION} - COMPATIBILITY SameMajorVersion ) - -unset(PACKAGE_INIT) - -#---------------------------------------------------------------------------- -# Install the project under CMAKE_INSTALL_PREFIX -# -# by default install the package configuration to the Geant4 installation tree -set(${PROJECT_NAME}_DIR ${CMAKE_INSTALL_LIBDIR}/Geant4-${Geant4_VERSION} - CACHE PATH "${PROJECT_NAME} installation") - -install(FILES ${headers} DESTINATION include/${PROJECT_NAME}) -install(TARGETS DICOM DESTINATION bin) -install(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES} - DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT ${PROJECT_NAME}Targets) -install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${${PROJECT_NAME}_DIR}) - -set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Targets.cmake) -set(INCLUDE_INSTALL_DIR include/${PROJECT_NAME}) -set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) - -configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${${PROJECT_NAME}_DIR} - PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR) - -write_basic_package_version_file( - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${Geant4_VERSION} - COMPATIBILITY SameMajorVersion ) - -install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${${PROJECT_NAME}_DIR} ) - -set(MSG "DICOM settings:") -set(MSG "${MSG}\n - DICOM_USE_DCMTK: ${DICOM_USE_DCMTK}") -set(MSG "${MSG}\n - DICOM_USE_HEAD: ${DICOM_USE_HEAD}") -message(STATUS "${MSG}") diff --git a/examples/extended/medical/DICOM/DICOM1/.README.txt b/examples/extended/medical/DICOM/DICOM1/.README.txt new file mode 100644 index 0000000000..78167acc2b --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM1/.README.txt @@ -0,0 +1,282 @@ + +///\file "DICOM1/.README.txt" +///\brief DICOM1 Example README page + +/*! \page ExampleDICOM_1 DICOM1 Example + + +The DICOM application has been originally developed by the Geant4 users: \n +Louis Archambault,(1)Luc Beaulieu, (2)Vincent Hubert-Tremblay. + +- (1) Centre Hospitalier Universitaire de Quebec (CHUQ), \n +Hotel-Dieu de Quebec, departement de Radio-oncologie \n +11 cote du palais. Quebec, QC, Canada, G1R 2J6 \n +tel (418) 525-4444 #6720 \n +fax (418) 691 5268 \n +web : thomson.phy.ulaval.ca/phys_med \n + +- (2) Universite Laval, Quebec (QC) Canada + +And it has been deeply reviewed by Pedro Arce in December 2007. \n +Very small changes by Stephane Chauvie in January 2008. \n +Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. \n +Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file \n +Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 \n + + +\section DICOM_s2 Introduction + +This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. + +You can find the phantom reproduced in the image PhantomCT.jpg. +In the application the phantom is placed on a table. + +\section DICOM_s4 Run the example: + + - batch mode: +\verbatim +DICOM run.mac +\endverbatim + + - interactive mode: +\verbatim +DICOM +\endverbatim + the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML + + +\section DICOM_s5 Metadata file: + +The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, +"Data.dat.old" is copied into the binary directory at "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat + +The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, +"Data.dat.new" is copied into the binary directory as "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat + +\section DICOM_s5a Metadata file, OLD version: + + The file Data.dat has the following information + - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) + - A line with the number of files + - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) + +In case you want to convert DICOM files to text files, it must have the following lines: + - The number of materials you want to use + - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. + +\section DICOM_s5b Metadata file, NEW version (based on DCMTK): + +As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). +The following tags should be used: + +\subsection DICOM_s5b_sub1 :COMPRESSION level +Where "level" is the number of voxels that will be merged into one in the X and Y dimen- +sions. The Hounsfield numbers of the voxels merged are averaged to give the +resulting value for the new voxel.\n +Example: +\verbatim +:COMPRESSION 4 +\endverbatim +4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 + +\subsection DICOM_s5b_sub2 :FILE file_name +These are the list of files (one line per file) in DICOM format that will be treated. +They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically +detect its modality and treat it correspondingly).\n +Example: +\verbatim +:FILE 1.dcm +:FILE 2.dcm +:FILE 3.dcm +\endverbatim + +\subsection DICOM_s5b_sub3 :CT2D Hounsfield_number density +These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs.\n +Example: +\verbatim +:CT2D -5000 0. +:CT2D -1000 0.01 +:CT2D -400 0.602 +:CT2D 300 1.145 +:CT2D 2000 1.856 +\endverbatim + +\subsection DICOM_s5b_sub4 :MATE material_name upper_bound_of_material_Hounsfield_number_interval +This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc.\n +Example: +\verbatim +:MATE G4_AIR -800 +:MATE G4_LUNG_ICRP -145 +:MATE G4_ADIPOSE_TISSUE_ICRP -60 +:MATE G4_WATER 0 +\endverbatim + +Alternatively to the use of :MATE, you can use the :MATE_DENS +\subsection DICOM_s5b_sub5 :MATE_DENS material_name upper_bound_of_material_density_interval +This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc.\n +Example: +\verbatim +:MATE_DENS G4_AIR 0.207 +:MATE_DENS G4_LUNG_ICRP 0.919 +:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 +:MATE_DENS G4_WATER 1.01 +\endverbatim + +We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. + +\subsection DICOM_s5b_sub6 :FILE_OUT file_name +Name of output file containing the DICOM information in ASCII format + +\section DICOM_s6 Conversion of Hounsfield numbers to materials: + +After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. +Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. + +The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. +The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density +The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: + +
+           #####################################################
+           #     Density Range                   Material      #
+           #---------------------------------------------------#
+           #       mg/cm3                            -         #
+           #---------------------------------------------------#
+           #  [ 0.    , 0.207 )                 Air            #
+           #  [ 0.207 , 0.481 )                 Lungs (inhale) #
+           #  [ 0.481 , 0.919 )                 Lungs (exhale) #
+           #  [ 0.919 , 0.979 )                 Adipose        #
+           #  [ 0.979 , 1.004 )                 Breast         #
+           #  [ 1.004 , 1.043 )                 Phantom        #
+           #  [ 1.043 , 1.109 )                 Liver          #
+           #  [ 1.109 , 1.113 )                 Muscle         #
+           #  [ 1.113 , 1.496 )                 Trabecular Bone#
+           #  [ 1.496 , 1.654 ]                 Dense Bone     #
+           #####################################################
+
+ +Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...) + +\section DICOM_s7 Splitting materials in density intervals: + +In the class DicomDetectorConstruction, it is defined a density interval + +\verbatim +G4double densityDiff = 0.1; +\endverbatim + +This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. + +\section DICOM_s8 Voxel colouring: + +The file Colormap.dat defines the colour that will be assigned to the voxels of each material. + +\section DICOM_s9 DICOM file formats: + +The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): + +- A line with the number of materials +- A line for each material with its index and name (the same name of materials that you construct as G4Material's) +- A line with the number of voxels in X, Y and Z +- A line with the minimum and maximum extension in X (mm) +- A line with the minimum and maximum extension in Y (mm) +- A line with the minimum and maximum extension in Z (mm) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) + +As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. + +The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . + +\section DICOM_s10 Choosing different parameterisation/navigation options: + +There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: + +-# The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory +-# Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory +-# Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit scorer can be used for *regular* navigation and G4PSDoseDeposit3D for *nested* parameterisation (see descriptions below). + +Obsolete option: +-# The 1D optimisation . It will be very slow because each time a track exits a voxel it has to loop to all other voxels to know which one it may enter + +You can select among the four options in the following way: + +- By default the example will run with G4RegularNavigation + +- To use the first option at RegularDicomDetectorConstruction.cc you just have to set +\verbatim +patient_phys->SetRegularStructureId(0); +\endverbatim + +- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 + +- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstructio\ +n.cc you need to replace (i.e. use kUndefined) +\verbatim +G4PVParameterised* patient_phys + = new G4PVParameterised("Patient",voxel_logic,container_logic, + kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); +\endverbatim +by +\verbatim +G4PVParameterised * patient_phys + = new G4PVParameterised("Patient",voxel_logic,container_logic, + kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); +\endverbatim + +Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. + + +\section DICOM_s11 Calculating dose in phantom voxels for regular navigation + +As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit_RegNav scorer can be used. + +It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. +The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. +It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. + +This scorer is implemented in this examples if the regular navigation option is +chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call +\verbatim +SetScorer(voxel_logic); +\endverbatim + +\section DICOM_s12 Calculating dose in phantom voxels for nested parameterisation + +For the nested parameterisation the geometry comprises replicas in X and Y which are then parameterised in Z. This means that to get the correct voxel idendification the replica depth has to be taken into account. The G4PSDoseDeposit3D scorers uses a fixed algorithm to calculate the voxel ID, according to the number of voxels in each axes and the associated replica depth. +\verbatim +G4PSDoseDeposit3D("DoseDeposit", fNoVoxelsZ, fNoVoxelsY, fNoVoxelsX, 0, 2, 1) +\endverbatim +contains the number of voxels at the top (Z) level (0) and then two daughter levels down for the Y-voxels and one depth down for X. + +\section DICOM_s13 Output +dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of +voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) +It is produced, as an example, with a compression value of 32 + + +\section DICOM_s14 Partial phantom +It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command + +\verbatim +/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. +\endverbatim + +where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format + +Alternatively you can intersect the phantom with an existing Geant4 volume with the command + +\verbatim +/dicom/intersectWithG4Volume VOLUME_NAME +\endverbatim + +The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 + +\section DICOM_s15 Visualisation + +The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. +The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. + +*/ diff --git a/examples/extended/medical/DICOM/1.dcm b/examples/extended/medical/DICOM/DICOM1/1.dcm similarity index 100% rename from examples/extended/medical/DICOM/1.dcm rename to examples/extended/medical/DICOM/DICOM1/1.dcm diff --git a/examples/extended/medical/DICOM/1.g4 b/examples/extended/medical/DICOM/DICOM1/1.g4 similarity index 100% rename from examples/extended/medical/DICOM/1.g4 rename to examples/extended/medical/DICOM/DICOM1/1.g4 diff --git a/examples/extended/medical/DICOM/1.g4dcm b/examples/extended/medical/DICOM/DICOM1/1.g4dcm similarity index 100% rename from examples/extended/medical/DICOM/1.g4dcm rename to examples/extended/medical/DICOM/DICOM1/1.g4dcm diff --git a/examples/extended/medical/DICOM/2.dcm b/examples/extended/medical/DICOM/DICOM1/2.dcm similarity index 100% rename from examples/extended/medical/DICOM/2.dcm rename to examples/extended/medical/DICOM/DICOM1/2.dcm diff --git a/examples/extended/medical/DICOM/2.g4 b/examples/extended/medical/DICOM/DICOM1/2.g4 similarity index 100% rename from examples/extended/medical/DICOM/2.g4 rename to examples/extended/medical/DICOM/DICOM1/2.g4 diff --git a/examples/extended/medical/DICOM/2.g4dcm b/examples/extended/medical/DICOM/DICOM1/2.g4dcm similarity index 100% rename from examples/extended/medical/DICOM/2.g4dcm rename to examples/extended/medical/DICOM/DICOM1/2.g4dcm diff --git a/examples/extended/medical/DICOM/3.dcm b/examples/extended/medical/DICOM/DICOM1/3.dcm similarity index 100% rename from examples/extended/medical/DICOM/3.dcm rename to examples/extended/medical/DICOM/DICOM1/3.dcm diff --git a/examples/extended/medical/DICOM/3.g4 b/examples/extended/medical/DICOM/DICOM1/3.g4 similarity index 100% rename from examples/extended/medical/DICOM/3.g4 rename to examples/extended/medical/DICOM/DICOM1/3.g4 diff --git a/examples/extended/medical/DICOM/3.g4dcm b/examples/extended/medical/DICOM/DICOM1/3.g4dcm similarity index 100% rename from examples/extended/medical/DICOM/3.g4dcm rename to examples/extended/medical/DICOM/DICOM1/3.g4dcm diff --git a/examples/extended/medical/DICOM/DICOM1/CMakeLists.txt b/examples/extended/medical/DICOM/DICOM1/CMakeLists.txt new file mode 100644 index 0000000000..575eb895c9 --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM1/CMakeLists.txt @@ -0,0 +1,75 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.27) +project(DICOM01) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(dicom1 dicom1.cc) +target_link_libraries(dicom1 PRIVATE G4DicomCore::G4DicomCore) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build DICOM. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# + +# the macros +set(DICOM_MACROS run.mac vis.mac) + +# original set of DICOM data +set(DICOM_SCRIPTS + 1.dcm 2.dcm 3.dcm + 1.g4 2.g4 3.g4 + 1.g4dcm 2.g4dcm 3.g4dcm + ColourMap.dat CT2Density.dat + Data.dat.new Data.dat.old + Data.dat.new_dens Data.partial.dat) + +# new DICOM data (in share directory) +set(DICOM_SHARE + AltData.dat SixSlice.dat + IM-0003-0001.dcm IM-0003-0003.dcm IM-0003-0005.dcm IM-0003-0007.dcm IM-0003-0009.dcm + IM-0003-0002.dcm IM-0003-0004.dcm IM-0003-0006.dcm IM-0003-0008.dcm IM-0003-0010.dcm) + +# copy over scripts +foreach(_script ${DICOM_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY) +endforeach() + +# copy either Data.dat.old or Data.dat.new to Data.dat based on build settings +if(G4DICOM_USE_DCMTK) + configure_file(${PROJECT_SOURCE_DIR}/Data.dat.new + ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) +else() + configure_file(${PROJECT_SOURCE_DIR}/Data.dat.old + ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) +endif() + +# copy over files in share +foreach(_script ${DICOM_SHARE}) + configure_file( + ${PROJECT_SOURCE_DIR}/share/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY) +endforeach() + +# copy over macros +foreach(_script ${DICOM_MACROS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY) +endforeach() + diff --git a/examples/extended/medical/DICOM/CT2Density.dat b/examples/extended/medical/DICOM/DICOM1/CT2Density.dat similarity index 100% rename from examples/extended/medical/DICOM/CT2Density.dat rename to examples/extended/medical/DICOM/DICOM1/CT2Density.dat diff --git a/examples/extended/medical/DICOM/ColourMap.dat b/examples/extended/medical/DICOM/DICOM1/ColourMap.dat similarity index 100% rename from examples/extended/medical/DICOM/ColourMap.dat rename to examples/extended/medical/DICOM/DICOM1/ColourMap.dat diff --git a/examples/extended/medical/DICOM/Data.dat.new b/examples/extended/medical/DICOM/DICOM1/Data.dat.new similarity index 100% rename from examples/extended/medical/DICOM/Data.dat.new rename to examples/extended/medical/DICOM/DICOM1/Data.dat.new diff --git a/examples/extended/medical/DICOM/Data.dat.new_dens b/examples/extended/medical/DICOM/DICOM1/Data.dat.new_dens similarity index 100% rename from examples/extended/medical/DICOM/Data.dat.new_dens rename to examples/extended/medical/DICOM/DICOM1/Data.dat.new_dens diff --git a/examples/extended/medical/DICOM/Data.dat.old b/examples/extended/medical/DICOM/DICOM1/Data.dat.old similarity index 100% rename from examples/extended/medical/DICOM/Data.dat.old rename to examples/extended/medical/DICOM/DICOM1/Data.dat.old diff --git a/examples/extended/medical/DICOM/Data.partial.dat b/examples/extended/medical/DICOM/DICOM1/Data.partial.dat similarity index 100% rename from examples/extended/medical/DICOM/Data.partial.dat rename to examples/extended/medical/DICOM/DICOM1/Data.partial.dat diff --git a/examples/extended/medical/DICOM/DICOM1/History b/examples/extended/medical/DICOM/DICOM1/History new file mode 100644 index 0000000000..bfcbfa88e2 --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM1/History @@ -0,0 +1,469 @@ +# Example DICOM History + +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-04-24 Ben Morgan (DICOM-V11-03-00) +- Refactor DICOM examples into single project. Retain this History file for + legacy reasons. + + **All new entries must go in the main `History`file in the top level DICOM + directory.** + +## 2024-06-05 L. T. Anh (DICOM-V11-02-00) +- Correct symbols for Chlorine and Potassium elements in function + InitialisationOfMaterials(). + +## 2023-12-03 A. Howard (DICOM-V11-01-02) +- Modified DicomDetectorConstruction: added correct replica depths for x,y,z + of G4PSDoseDeposit3D for nested parameterisation and corrected voxel ordering + according to the fixed formula within G4PSDoseDeposit3D; added environment + variable to switch to standard G4PSDoseDeposit in the case of regular + navigation (default). +- Updated README and .README to be more correct and include description of + G4PSDoseDeposit3D and its usage for nested parameterisation. + +## 2023-11-25 C. Mancini (DICOM-V11-01-01) +- Modified DicomNestedPhantomParameterisation: removed the "static" descriptor + from the "G4Material* mate" instantiation. + +## 2023-09-02 Gabriele Cosmo (DICOM-V11-01-00) +- Removed forward declaration for G4VTouchable. + +## 2022-10-04 John Allison (DICOM-V11-00-04) +- Introduce special mesh rendering of DICOM image. + +## 2022-10-24 I. Hrivnacova (DICOM-V11-00-03) +- Coding guidelines: start data member with 'f'; use G4int, G4double + (skipped dicomReader classes). + +## 2022-10-04 Ben Morgan (DICOM-V11-00-02) +- Replace sprintf with direct G4String use to remove deprecation warnings on + macOS-13. + +## 2022-10-04 Gabriele Cosmo (DICOM-V11-00-01) +- Fixed compilation warning on Intel-icx compiler for set but unused variable + in DicomHandler::ReadData(). + +## 2021-12-10 Ben Morgan (DICOM-V11-00-00) +- Change to new Markdown History format. + +--- + +# History entries prior to 11.0 + +27.09.2021 Pedro Arce (DICOM-V10-07-01) +- Use updated interface from geomnav to use G4PhantomParameterisation::GetNoVoxels instead of GetNoVoxel + +31.12.2020 - John Allison (DICOM-V10-07-00) + vis.mac: "Change /vis/ogl/set/eventsDrawInterval" to + "/vis/ogl/flushAt NthPrimitive". + +10.11.2020 - Ben Morgan (DICOM-V10-06-01) + Migration to G4RunManagerFactory. + +21.10.2020 - Ben Morgan (DICOM-V10-06-00) + Distinguish output names of archive lib from DLL and application to + fix Windows LNK1149 errors for static libs. + Modernize cmake version detection and policy setting to follow main + Geant4 usage. + +19.11.2019 - Gabriele Cosmo (DICOM-V10-05-03) + Fixed more cases of implicit type conversions. + Some minor code cleanup. + +15.11.2019 - Gabriele Cosmo (DICOM-V10-05-02) + Fixed cases of implicit type conversions from size_t to G4int. + +12.11.2019 - Gunter Folger (DICOM-V10-05-01) + Correct DicomHandler singleton for use on Windows. + DICOM2 was crashing + +08.06.2019 - Gabriele Cosmo (DICOM-V10-05-00) + Defaulted copy-ctr in DicomPhantomZSliceHeader, to fix deprecation + compilation warnings on gcc-9.1. + +13.11.2018 - Jonathan Madsen (DICOM-V10-04-11) + Bugfix (2102) to DicomHandler reading fPixelSpacingY + +13.11.2018 - Jonathan Madsen (DICOM-V10-04-10) + Bugfix (2101) to DicomHandler skipping 2 bytes in implicit VR + +12.11.2018 - Jonathan Madsen (DICOM-V10-04-09) + Updated DICOMUtilities.cmake to handle Windows builds + Using modern CMake DICOM::target library alias + +12.11.2018 - Gabriele Cosmo (DICOM-V10-04-08) + DicomDetectorConstruction: removed useless static Instance() + method. + +12.11.2018 - Gabriele Cosmo (DICOM-V10-04-07) + DicomPartialDetectorConstruction: fixed shadowing of base class + data for 'fMateIDs'. Fixed type conversion unsigned_int -> int. + +12.11.2018 - Gabriele Cosmo (DICOM-V10-04-06) + DicomNestedPhantomParameterisation: removed useless statement + causing compilation error on Linux. + +10.11.2018 - Jonathan Madsen (DICOM-V10-04-05) + DICOMConfig.cmake.in handles DICOM_USE_HEAD being set + DownloadDICOMData.cmake does installation + CMakeLists.txt creates build-tree export + DicomDetectorConstruction is globally accessible + DicomHandler implements GetDicomData{Path,File} + which provides a fallback path to data libraries + directory for DICOM2 and handles DICOM_USE_HEAD situation + Phantom parameterization classes take an argument + specifying color file + fDcmrun is protected instead of private (for DICOM2) + DicomEventAction doesn't print every event + Removed DicomRun::RecordEvent incrementing numberOfEvent + (done by G4Run::RecordEvent) + Cleaned up output (when provided along with DICOM2 output + it was too excessive) now just a summary is provided + and per-voxel is output to file only + Moved Data.dat to Data.dat.old and CMake copies correct + Data.dat.{old,new} to Data.dat in binary directory based + on DICOM_USE_DCMTK setting + Updated README + +09.11.2018 - Gabriele Cosmo (DICOM-V10-04-04) + Use canonical definition for DICOMRunAction; removed wrong + singleton specification (in any case not necessary). + +22.06.2018 - Jonathan Madsen (DICOM-V10-04-03) + Added dicomReader/cmake/DICOMUtilities.cmake that defines + a DICOM_BUILD_LIBRARY macro which handles how to build + DICOM-library (and dicomReader library if USE_DICOM_DCMTK=ON) + based on the Geant4 installation (e.g. build shared, static, or + both) + updates to DICOMConfig.cmake.in and + dicomReaderConfig.cmake.in to handle which library type to + use link to + +20.05.2018 - John Allison (DICOM-V10-04-02) + Remove G4UI_USE and G4VIS_USE. + Move instantiation of G4UIExecutive to start of main. + +09.05.2018 - Ben Morgan (DICOM-V10-04-01) + Include G4Types before use of G4MULTITHREADED. For forward + compatibility with move to #defines over -D for G4 preprocessor + symbols. + +20.03.2018 - Jonathan Madsen (DICOM-V10-04-00) + Enabled CMake package configuration + Added DICOM_USE_DCMTK and DICOM_USE_HEAD CMake + options back-compat with environment variables + Updated README and .README.txt + +11.11.2017 - Marc Verderi (DICOM-V10-03-12) + Retag as DICOM-V10-03-11 too quickly rejected + +09.11.2017 - Ivana Hrivnacova (DICOM-V10-03-11) + Updated DICOM data version to 1.1 + +09.11.2017 - S. Guatelli (DICOM-V10-03-10) + Updated README and .README.txt + +09.11.2017 - S. Guatelli (DICOM-V10-03-09) + .g4dmc created in the user directory and not in the DICOM library, + together with the .g4dcmb files. + +09.11.2017 - S. Guatelli (DICOM-V10-03-08) + DICOM_PATH changed + no writing .g4dcmb in the library DICOM + +08.11.2017 - Ivana Hrivnacova (DICOM-V10-03-07) + Added downloading DICOM data in CMake build + (used only with DICOM_USE_HEAD option) + +07.11.2017 - S. Guatelli (DICOM-V10-03-06). + Warning deleted, updated README and .README.txt + +01.11.2017 - S. Guatelli (DICOM-V10-03-05). + DICOM_HEAD library can be used as input to the DICOM + DICOM_v1 does not need to be copied in the directory where the simulation is executed + +01.11.2017 - S. Guatelli (DICOM-V10-03-04). DICOM_HEAD library can be used as input to the DICOM + +28.09.2017 - S. Guatelli (DICOM-V10-03-03). DICOM_HEAD Directory deleted + +16.09.2017 - S. Guatelli (DICOM-V10-03-02) + - New DICOM Digital Head included by S. Guatelli + - Updated README, .README.txt + +19.11.2016 - Andrea Dotti (DICOM-V10-02-04) + - explicit set of SD to manager + +11.11.2016 - Ivana Hrivnacova (DICOM-V10-02-03) + - Removed extra compiler flags in GNUmakefile, CMakeLists.txt + (not needed) + - Renamed G4_USE_DCMTK in DICOM_USE_DCMTK + - Updated README, .README.txt + +11.11.2016 - Pedro Arce (DICOM-V10-02-02) + - Complying with Geant4 guidelines in data variables + +04.11.2016 - Pedro Arce (DICOM-V10-02-01) + - New DICOM reader based on DCMTK + +20.07.2016 - Ivana Hrivnacova (DICOM-V10-02-00) + - Fixed coding guidelines + (redundant empty lines, class data member names) + +17.09.2015 - Pedro Arce (DICOM-V10-01-01) + - Fixed coding guidelines (long lines) + +21.10.2014 - Pedro Arce (DICOM-V10-00-04) + - Fixed coding guidelines (long lines) + +16.10.2014 - Ivana Hrivnacova (DICOM-V10-00-03) + - Fixed coding guidelines (long lines) in + DicomPartialDetectorConstruction.hh, DicomPhantomZSliceHeader.hh + +29.07.2014 - Pedro Arce (DICOM-V10-00-02) + - Remove DicomPhysicsList + +25.07.2014 - Pedro Arce (DICOM-V10-00-01) + - Using G4GenericPhysicsList + - no std::cout + - no exit() + +03.12.2013 - Gabriele Cosmo (DICOM-V10-00-00) + - Attempt to fix Valgrind run-time error from printout in + DicomHandler::CheckFileFormat(). + +03.12.2013 - Ivana Hrivnacova (DICOM-V09-06-09) + - Updated README and .README to match (Pedro Arce) + +18.11.2014 - Ivana Hrivnacova (DICOM-V09-06-08) + - Fixed DicomPhantomZSliceMerged.hh file description + (for Doxygen) + +13.11.2014 - Jonathan Mdsen (DICOM-V09-06-07) + - Updated README and .README + - Fixed some comments + +04.11.2013 - Dennis Wright (DICOM-V09-06-06) + - replaced LEP model for alphas by extending Binary cascade to + zero energy + - updated sample output files to reflect this + +23.10.2013 - Gabriele Cosmo (DICOM-V09-06-05) + - Fixed compilation warnings. + +15.10.2013 - Jonathan Madsen (DICOM-V09-06-04) + - Modified DICOM to enable multithreading + - Adapted scorers + - Added ActionInitialization class + - Modified RunAction to handle master and daughter threads + +09.10.2013 - Ivana Hrivnacova (DICOM-V09-06-03) + Fixed file description (DicomPhantomZSliceMerged.hh) + +28.08.2013 - Gabriele Cosmo (DICOM-V09-06-02) + Added G4Ellipsoid to solids enabled for parameterisation in + DicomNestedPhantomParameterisation. + +29.07.2013 - Peter Gumplinger (DICOM-V09-06-01) + Fixed MAC/clang32 compilation warnings in DicomRunAction and + DiconIntersectVolume classes + +18.07.2013 - Jonathan Madsen + Missing documentation update from 18.12.2012: + Improvements and bug-fixes -> + DicomHandler had some bugs when using DCM files + other than examples provided + Added DicomPhantomZSliceMerged class to handle + inconsistencies in DCM file meta-data + DicomPhantomZSliceHeader class is extended to hold density + and material ID data and the printing of data + to files instead of DicomHandler + Removed additions on 16.07.2013 pending further discussion + Reverted DICOM example to 18.12.2012 update with some very + minor tweaks + Kept share folder with additional anonymous DCM files + and additional data files (SixSlice.dat, AltData.dat). Rename + these files with Data.dat to use + Kept CMakeLists.txt to copy over extra data file and anonymous + DCM files + +16.07.2013 - Jonathan Madsen + Many modifications to the DICOM example. + Added more anonymous DICOM files. + Added more script configurations. + Added DicomCommandLineOptions, DicomHelpers, DicomTypeConversion, + DicomOption as part of a command line processing package. + Modified CMakeLists.txt to configure extra files. + Added capability to use different data files for DICOM set, + CT2Density file, ColourMap file. + Added Statistical Analysis and Statistical Manager classes + Miscellaneous improvements. + DICOM.cc now has a large list of runtime configuration options + via command line. + Options set at command line are set to override environment + variables. + +15.02.2013 - Ivana Hrivnacova (DICOM-V09-06-00) + Applied coding guidelines (virtual keyword, data members + names and initialization) + +07.11.2012 - Gabriele Cosmo (DICOM-V09-05-10) + Fixed compilation warnings for shadowing of variables and unused + return flag from system calls. + +18.10.2012 - Ivana Hrivnacova (DICOM-V09-05-09) + Updated CMakeLists.txt: added copying data files to the build + area as they are needed to run the tests. + +13.10.2012 - Andrea Dotti (DICOM-V09-05-08) + Removing previous tag modification (not needed) + +13.10.2012 - Andrea Dotti (DICOM-V09-05-07) + Adding explicit use of system of units + +05.09.2012 - Ivana Hrivnacova (DICOM-V09-05-06) + Fixed compiler warning + +04.09.2012 - Pedro Arce (DICOM-V09-05-05) + Remove old renamed files + Updated CMakeLists.txt (By I.Hrivnacova) + Adding visualization, copying macros, install target and + comment lines + +17.07.2012 - Ivana Hrivnacova (DICOM-V09-05-04) + Improved README files + +06.07.2012 - Pedro Arce (DICOM-V09-05-03) + Reviewed examples according to coding guidelines + +13.06.2012 - Gabriele Cosmo (DICOM-V09-05-02) + Assign return value for fread() and fscanf() calls in + DicomHandler. Fixes compilation warnings on Ubuntu. + +28.03.2012 - Pedro Arce (DICOM-V09-05-01) + Corrections in materials Z/A. Addressing problem report #1287. + +13.11.2011 - Pedro Arce (DICOM-V09-04-03) + Migration to new G4Exception scheme. + +03.10.2011 - G.Folger (DICOM-V09-04-02) + Fix gcc46 compilation warning in DicomHandler.cc + and DicomPhantomParameterisationColour.cc + +05.06.2011 - Pedro Arce (DICOM-V09-04-01) + Corrected name for sensitive detector to be consistently + named as "phantomSD" in DicomRunAction. Addressing problem + report #1210. + Corrected axis slicing hint in nested-parameterisation. + +23.12.2010 - Stephane Chauvie + Corrected 2 bugs in DicomHandler + +30.11.2010 - John Allison + dicom.cc: Removed redundant headers: + "G4UIterminal.hh" and "G4UItcsh.hh". + +30.11.2010 - Ivana Hrivnacova (DICOM-V09-03-09) + Moved inclusion of vis headers as last in main(). + +26.11.2010 - Pedro Arce (DICOM-V09-03-08) + Correction of warnings + +24.11.2010 - Pedro Arce (DICOM-V09-03-07) + Introduced partial phantom example + Delete G4PSDoseDeposit_RegNav and use G4ScoreSplittingProcess instead + +11.11.2010 - Gabriele Cosmo (DICOM-V09-03-06) + Corrected vis.mac macro and set OGL as default viewer. + Corrected some printouts in code... + +09.11.2010 - Gabriele Cosmo (DICOM-V09-03-05) + Fixed compilation warning on virtual methods hiding + Fixed compilation warnings in DicomPhantomParameterisationColour + and DicomHandler. + +02.11.2010 - John Allison (DICOM-V09-03-04) + Introduced G4UIExecutive. + +06.06.2010 - Joseph Perl (DICOM-V09-03-03) + Remove unused variable in EventAction + +03.06.2010 - Joseph Perl (DICOM-V09-03-02) + Updated vis usage + +19.11.2009 - StÈphane Chauvie (DICOM-V09-03-00) +01.06.2010 - Stephane Chauvie - Andrea Armando + Added function to read nested items (defined and undefined) + Removed dependencies on CONQUEST + DICOM handler could now read whichever DICOM file + (PT,CT,DR,CR,US,MR... ) + +19.11.2009 - Stephanee Chauvie (DICOM-V09-02-03) + Changed DICOM Handler to read CT files coming from CONQUEST + DICOM server + +05.02.2009 - Pedro Arce (DICOM-V09-02-01) + Added report on dose per voxel. + Added warning for erroneous inclusion of development code in + release 9.2 (to be removed when fix will be included in patch). + +27.01.2009 - Gabriele Cosmo (DICOM-V09-02-00) + Use new class G4RegularNavigationHistory for counting of step + lengths in voxels of the regular structure. + +27.11.2008 - Pedro Arce (DICOM-V09-01-02) + Included G4PSDoseDeposit_RegNav to distribute dose along voxels, + including msc and energy loss corrections, for the case of + skipping voxel with equal materials when using regular + navigation + +21.07.2008 - Pedro Arce (DICOM-V09-01-01) + Bug fix in DicomNestedPhantomParameterisation in calculating the + 'copyNo', so that material assignment was wrong + Set default cut to 1 mm (with previous 1.E-3 mm too much time is + spent on physics and no improvement is seen with different + navigation options). + Corrected direction and position of primary particles so that + they traverse the DICOM voxels. + +22.01.2008 - Pedro Arce (DICOM-V09-01-00) + Do not use 'rindex' in DicomHandler class to avoid problems + on Windows. + +06.12.2007 - Pedro Arce + Added voxel colouring by material. Added possibility to use nested parameterisation + +05.12.2007 - Pedro Arce + Deep review on the input files and the way how the geometry is built. + Use of G4PhantomParameterisation and G4RegularNavigation. + +06.12.2005 - Gabriele Cosmo + Trivial changes for support of CLHEP-2.0.X series. + +29.11.2005 - Susanna Guatelli (DICOM-V07-01-00) + Documentation update + +12.06.2005 - Stephane Chauvie (DICOM-V07-00-01) + Added improvement by Akinori Kimura. + +03.05.2005 - John Allison + Replaced vis manager with G4VisExecutive. + +10.12.2004 - Maria Grazia Pia (DICOM-V06-02-02) + Update README to announce further improvements and fixes + by Akinori Kimura. + +3.12.2004 - Gabriele Cosmo (DICOM-V06-02-01) + Implemented migration to . + +13.5.2004 - Susanna Guatelli + updated compiler: gcc3.2.3 + +11.3.2003 - Susanna Guatelli + README changed + +6.2003 - Susanna Guatelli + First public release of the example diff --git a/examples/extended/medical/DICOM/PhantomCT.jpg b/examples/extended/medical/DICOM/DICOM1/PhantomCT.jpg similarity index 100% rename from examples/extended/medical/DICOM/PhantomCT.jpg rename to examples/extended/medical/DICOM/DICOM1/PhantomCT.jpg diff --git a/examples/extended/medical/DICOM/DICOM1/README b/examples/extended/medical/DICOM/DICOM1/README new file mode 100644 index 0000000000..f0cd41ff8c --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM1/README @@ -0,0 +1,248 @@ +# DICOM1 Example + +The DICOM application has been originally developed by the Geant4 users: +Louis Archambault,+Luc Beaulieu, ++Vincent Hubert-Tremblay. + ++ Centre Hospitalier Universitaire de Quebec (CHUQ), +Hotel-Dieu de Quebec, departement de Radio-oncologie +11 cote du palais. Quebec, QC, Canada, G1R 2J6 +tel (418) 525-4444 #6720 +fax (418) 691 5268 +web : thomson.phy.ulaval.ca/phys_med + +++ Université Laval, Québec (QC) Canada + + +And it has been deeply reviewed by Pedro Arce in December 2007. +Very small changes by Stephane Chauvie in January 2008. +Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. +Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file +Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 +Alexander Howard, Dec 2023: updated scorer to give correct voxel index for both regular and nested geometries + +## Introduction + +This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. + +You can find the phantom reproduced in the image PhantomCT.jpg. +In the application the phantom is placed on a table. + +## Run the example: + + - batch mode: + - DICOM run.mac + + - interactive mode: + - DICOM + the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML + +## Metadata file: + +The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, +"Data.dat.old" is copied into the binary directory at "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat + +The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, +"Data.dat.new" is copied into the binary directory as "Data.dat". + - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat + +### Metadata file, OLD version: + + The file Data.dat has the following information + - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) + - A line with the number of files + - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) + +In case you want to convert DICOM files to text files, it must have the following lines: + - The number of materials you want to use + - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. + +### Metadata file, NEW version (based on DCMTK): + +As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). +The following tags should be used: + +:COMPRESSION level + +Where "level" is the number of voxels that will be merged into one in the X and Y dimen- +sions. The Hounsfield numbers of the voxels merged are averaged to give the +resulting value for the new voxel. +Example: +:COMPRESSION 4 // 4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 + +:FILE file_name +These are the list of files (one line per file) in DICOM format that will be treated. +They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically +detect its modality and treat it correspondingly). +Example: +:FILE 1.dcm +:FILE 2.dcm +:FILE 3.dcm + +:CT2D Hounsfield_number density +These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs. +Example: +:CT2D -5000 0. +:CT2D -1000 0.01 +:CT2D -400 0.602 +:CT2D 300 1.145 +:CT2D 2000 1.856 + +:MATE material_name upper_bound_of_material_Hounsfield_number_interval +This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc. +Example: +:MATE G4_AIR -800 +:MATE G4_LUNG_ICRP -145 +:MATE G4_ADIPOSE_TISSUE_ICRP -60 +:MATE G4_WATER 0 + +Alternatively to the use of :MATE, you can use the :MATE_DENS +:MATE_DENS material_name upper_bound_of_material_density_interval +This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. +Example: +:MATE_DENS G4_AIR 0.207 +:MATE_DENS G4_LUNG_ICRP 0.919 +:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 +:MATE_DENS G4_WATER 1.01 + +We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. + +:FILE_OUT file_name +Name of output file containing the DICOM information in ASCII format + + +## Conversion of Hounsfield numbers to materials: + +After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. +Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. + +The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. +The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density +The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: + + ##################################################### + # Density Range Material # + #---------------------------------------------------# + # mg/cm3 - # + #---------------------------------------------------# + # [ 0. , 0.207 ) Air # + # [ 0.207 , 0.481 ) Lungs (inhale) # + # [ 0.481 , 0.919 ) Lungs (exhale) # + # [ 0.919 , 0.979 ) Adipose # + # [ 0.979 , 1.004 ) Breast # + # [ 1.004 , 1.043 ) Phantom # + # [ 1.043 , 1.109 ) Liver # + # [ 1.109 , 1.113 ) Muscle # + # [ 1.113 , 1.496 ) Trabecular Bone# + # [ 1.496 , 1.654 ] Dense Bone # + ##################################################### + +Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...). + +When using the Digital Head Phantom, the CT2Density.dat is not used. The conversion is performed directly in the Dicom Handler.cc + +## Splitting materials in density intervals: + +In the class DicomDetectorConstruction, it is defined a density interval + + G4double densityDiff = 0.1; + +This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. + +## Voxel colouring: + +The file Colormap.dat defines the colour that will be assigned to the voxels of each material. + +## DICOM file formats: + +The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): + +- A line with the number of materials +- A line for each material with its index and name (the same name of materials that you construct as G4Material's) +- A line with the number of voxels in X, Y and Z +- A line with the minimum and maximum extension in X (mm) +- A line with the minimum and maximum extension in Y (mm) +- A line with the minimum and maximum extension in Z (mm) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) +- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) + +As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. + +The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . + +## Choosing different parameterisation/navigation options: + +There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: + +- The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory +- Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory +- Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit scorer can be used for regular (see (10) below) and G4PSDoseDeposit3D for nested parameterisation (see (11) below). + +Obsolete option: +- Use 1D optimisation in replica. It will be very slow because each time a track exits a voxel it has to loop to all other voxels in a 2D slide in order to locate which one it will enter. + +You can select amongst the four options in the following way: + +- By default the example will run with G4RegularNavigation + +- To use the first option at RegularDicomDetectorConstruction.cc you must set + + patient_phys->SetRegularStructureId(0); + +- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 + +- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstruction.cc you need to replace (i.e. use kUndefined) + + G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, + kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); +by + G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, + kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); + + Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. + + +## Calculating dose in phantom voxels for regular navigation + +As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit scorer can be used. + +It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. +The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. +It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. + +This scorer is implemented in this examples if the regular navigation option is +chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call + +SetScorer(voxel_logic); + +## Calculating dose in phantom voxels for nested parameterisation + +For the nested parameterisation the geometry comprises replicas in X and Y which are then parameterised in Z. This means that to get the correct voxel idendification the replica depth has to be taken into account. The G4PSDoseDeposit3D scorers uses a fixed algorithm to calculate the voxel ID, according to the number +of voxels in each axes and the associated replica depth. G4PSDoseDeposit3D("DoseDeposit", fNoVoxelsZ, fNoVoxelsY, fNoVoxelsX, 0, 2, 1) contains the number of voxels at the top level (0) and then two daughter levels down for the Y-voxels and one depth down for X. + +## Output +dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of +voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) +It is produced, as an example, with a compression value of 32 + + +## Partial phantom +It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command + +/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. + +where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format + +Alternatively you can intersect the phantom with an existing Geant4 volume with the command + +/dicom/intersectWithG4Volume VOLUME_NAME + +The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 + +## Visualisation + +The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. +The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. + + + diff --git a/examples/extended/medical/DICOM/dicom.out b/examples/extended/medical/DICOM/DICOM1/dicom.out similarity index 100% rename from examples/extended/medical/DICOM/dicom.out rename to examples/extended/medical/DICOM/DICOM1/dicom.out diff --git a/examples/extended/medical/DICOM/DICOM.cc b/examples/extended/medical/DICOM/DICOM1/dicom1.cc similarity index 100% rename from examples/extended/medical/DICOM/DICOM.cc rename to examples/extended/medical/DICOM/DICOM1/dicom1.cc diff --git a/examples/extended/medical/DICOM/run.mac b/examples/extended/medical/DICOM/DICOM1/run.mac similarity index 100% rename from examples/extended/medical/DICOM/run.mac rename to examples/extended/medical/DICOM/DICOM1/run.mac diff --git a/examples/extended/medical/DICOM/DICOM1/run.out b/examples/extended/medical/DICOM/DICOM1/run.out new file mode 100644 index 0000000000..b4a64e81eb --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM1/run.out @@ -0,0 +1,1121 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-03-ref-04 (30-April-2025) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +3 test file 1.g4dcm +3 test file 2.g4dcm +3 test file 3.g4dcm + ReadMaterialIndices 10 +<<< Geant4 Physics List simulation engine: Shielding +<<< (Note that Shielding and Shielding_HP are equivalent!) +Default materials of the DICOM Extended examples have been used + DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm + DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm + DicomPhantomZSliceHeader reading number of materials 10 + Number of voxels 128 128 1 + Extension in X -196 196 + Extension in Y -196 196 + Extension in Z 80 85 + DicomDetectorConstruction::ReadPhantomDataFile opening file 2.g4dcm + DicomDetectorConstruction::ReadPhantomDataFile opening file 2.g4dcm + DicomPhantomZSliceHeader reading number of materials 10 + Number of voxels 128 128 1 + Extension in X -196 196 + Extension in Y -196 196 + Extension in Z 85 90 + DicomDetectorConstruction::ReadPhantomDataFile opening file 3.g4dcm + DicomDetectorConstruction::ReadPhantomDataFile opening file 3.g4dcm + DicomPhantomZSliceHeader reading number of materials 10 + Number of voxels 128 128 1 + Extension in X -196 196 + Extension in Y -196 196 + Extension in Z 90 95 + fNoVoxelsX 128 fVoxelHalfDimX 1.53125 + fNoVoxelsY 128 fVoxelHalfDimY 1.53125 + fNoVoxelsZ 3 fVoxelHalfDimZ 2.5 + totalPixels 49152 + placing voxel container volume at (0,0,87.5) +DicomRegularDetectorConstruction::ConstructPhantom + SET SCORER : VoxelLogical + CONSTRUCT SD AND FIELD + + hInelastic Shielding : threshold between BERT and FTFP is over the interval + for pions : 3 to 6 GeV + for kaons : 3 to 6 GeV + for proton : 3 to 6 GeV + for neutron : 3 to 6 GeV + +@@@ G4ParticleHPInelasticData instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1 +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RT) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) + OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) + 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_ZB (TSG_QT_ZB, TSGQtZB) +You may choose a graphics system (driver) with a parameter of +the command "/vis/open" or "/vis/sceneHandler/create", +or you may omit the driver parameter and choose at run time: +- by argument in the construction of G4VisExecutive +- by environment variable "G4VIS_DEFAULT_DRIVER" +- by entry in "~/.g4session" +- by build flags. +- Note: This feature is not allowed in batch mode. +For further information see "examples/basic/B1/exampleB1.cc" +and "vis.mac". + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. +/tracking/verbose 0 +/run/verbose 1 +/event/verbose 0 +/random/setDirectoryName . +/random/setSavingFlag 1 +/run/initialize +/run/beamOn 100 +G4RunManagerKernel -- G4ScoreSplittingProcess is appended to all particles. +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 1 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 7 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Positron annihilation at rest model SimplePositronium +Enable 3 gamma annihilation on fly 0 +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 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 1 mm) +Step function for muons/hadrons (0.2, 0.1 mm) +Step function for light ions (0.2, 0.1 mm) +Step function for general ions (0.2, 0.1 mm) +Lowest e+e- kinetic energy 1 keV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 0 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Urban +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 0 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 0 eV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 1 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.04 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 1 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 0 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 1 +PIXE atomic de-excitation enabled 0 +De-excitation module ignores cuts 1 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 1 region: + DefaultRegionForTheWorld 1 1 0 +### === Auger flag: 1 +### === Ignore cuts flag: 1 + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 61 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 7 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 56 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Klein-Nishina : Emin= 0 eV Emax= 100 TeV + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitlerLPM : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 7 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 62 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 100 TeV + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai + eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai + +CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 100 TeV + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai + eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai + +annihil: for e+ XStype:2 SubType=5 AtRestModel:Simple BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV +====================================================================== +====== Radioactive Decay Physics Parameters ======= +====================================================================== +min MeanLife (from G4NuclideTable) 1 ns +Max life time (from G4DeexPrecoParameters) 1000 ps +Internal e- conversion flag 1 +Stored internal conversion coefficients 1 +Enabled atomic relaxation mode 1 +Enable correlated gamma emission 0 +Max 2J for sampling of angular correlations 10 +Atomic de-excitation enabled 1 +Auger electron emission enabled 1 +Check EM cuts disabled for atomic de-excitation 1 +Use Bearden atomic level energies 0 +Use ANSTO fluorescence model 0 +Threshold for very long decay time at rest 1 y +====================================================================== + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of mu+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +======================================================= +====== ParticleHP Physics Parameters ======== +======================================================= + Use only photo-evaporation 0 + Skip missing isotopes 0 + Neglect Doppler 0 + Do not adjust final state 0 + Produce fission fragments 1 + Use WendtFissionModel 0 + Use NRESP71Model 0 + Use DBRC 0 + PHP use Poisson 0 + PHP check 1 + CHECK HP NAMES 0 + Enable DEBUG 0 + Use probability tables from +======================================================= + +@@@ G4ParticleHPInelastic instantiated for particle neutron/n data directory is /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV + BetheBloch : Emin=297.505 keV Emax= 100 TeV + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV + BetheBloch : Emin=297.505 keV Emax= 100 TeV + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of pi+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +==================================================================== + HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for B- + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: B-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for D- + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: D-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for GenericIon + Process: ionElastic + Model: NNDiffuseElastic: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: ionInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n + Model: QMDModel: 100 MeV/n ---> 6 GeV/n + Model: FTFP: 5.99 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: RadioactiveDecay +----------------------------------------------------------------------- + Hadronic Processes for He3 + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: He3Inelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n + Model: QMDModel: 100 MeV/n ---> 6 GeV/n + Model: FTFP: 5.99 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV +----------------------------------------------------------------------- + Hadronic Processes for alpha + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: alphaInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n + Model: QMDModel: 100 MeV/n ---> 6 GeV/n + Model: FTFP: 5.99 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV +----------------------------------------------------------------------- + Hadronic Processes for anti_He3 + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_He3Inelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_alpha + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_alphaInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_deuteron + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_deuteronInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +------------------------------------------------------------------------- + Hadronic Processes for anti_hypertriton + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_lambda + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: anti_lambdaInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_neutron + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_neutronInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_proton + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_protonInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for anti_triton + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: anti_tritonInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + Process: hFritiofCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for deuteron + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: dInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n + Model: QMDModel: 100 MeV/n ---> 6 GeV/n + Model: FTFP: 5.99 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV +----------------------------------------------------------------------- + Hadronic Processes for e+ + Process: positronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for e- + Process: electronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for gamma + Process: photonNuclear + Model: GammaNPreco: 0 eV ---> 200 MeV + Model: BertiniCascade: 199 MeV ---> 6 GeV + Model: TheoFSGenerator: 3 GeV ---> 100 TeV + Cr_sctns: GammaNuclearXS: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for kaon+ + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for kaon- + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: hBertiniCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for lambda + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: lambdaInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for mu+ + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for mu- + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + Process: muMinusCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 19.5 MeV ---> 100 TeV + Model: NeutronHPElastic: 0 eV ---> 20 MeV + Cr_sctns: NeutronHPElasticXS: 0 eV ---> 20 MeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 19.9 MeV ---> 6 GeV + Model: NeutronHPInelastic: 0 eV ---> 20 MeV + Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV + Cr_sctns: JENDLHEInelasticCrossSection: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: NeutronHPCapture: 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 + Process: nFission + Model: NeutronHPFission: 0 eV ---> 20 MeV + Model: G4LFission: 19.9 MeV ---> 100 TeV + Cr_sctns: NeutronHPFissionXS: 0 eV ---> 20 MeV + Cr_sctns: ZeroXS: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for pi+ + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for pi- + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: hBertiniCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for proton + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: protonInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV +----------------------------------------------------------------------- + Hadronic Processes for sigma- + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: sigma-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: hBertiniCaptureAtRest +----------------------------------------------------------------------- + Hadronic Processes for triton + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: tInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n + Model: QMDModel: 100 MeV/n ---> 6 GeV/n + Model: FTFP: 5.99 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + Process: RadioactiveDecay +======================================================================= +====== 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 +Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= +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 +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 0 +Time limit for long lived isomeres 1000 ps +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 1 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : LungInhale + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 1.31725 keV e- 108.069 keV e+ 106.431 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 2 used in the geometry : Yes + Material : LungExhale + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 1.88193 keV e- 180.152 keV e+ 176.601 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 3 used in the geometry : Yes + Material : AdiposeTissue + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.18075 keV e- 275.015 keV e+ 268.402 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 4 used in the geometry : Yes + Material : Breast + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.25478 keV e- 277.672 keV e+ 270.955 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 5 used in the geometry : Yes + Material : Water + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.52504 keV e- 277.648 keV e+ 270.838 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 6 used in the geometry : Yes + Material : Muscle + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.54445 keV e- 287.023 keV e+ 279.831 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 7 used in the geometry : Yes + Material : TrabecularBone + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.70679 keV e- 299.822 keV e+ 292.108 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 8 used in the geometry : Yes + Material : Liver + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm + Energy thresholds : gamma 2.55839 keV e- 288.67 keV e+ 281.428 keV proton 0 eV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +++ phantomSD/DoseDeposit id 0 +### Run 0 starts. +### Run 0 start. +--> Event 0 starts. +--> Event 1 starts. +--> Event 2 starts. +--> Event 3 starts. +--> Event 4 starts. +--> Event 5 starts. +--> Event 6 starts. +--> Event 7 starts. +--> Event 8 starts. +--> Event 9 starts. +--> Event 10 starts. +--> Event 11 starts. +--> Event 12 starts. +--> Event 13 starts. +--> Event 14 starts. +--> Event 15 starts. +--> Event 16 starts. +--> Event 17 starts. +--> Event 18 starts. +--> Event 19 starts. +--> Event 20 starts. +--> Event 21 starts. +--> Event 22 starts. +--> Event 23 starts. +--> Event 24 starts. +--> Event 25 starts. +--> Event 26 starts. +--> Event 27 starts. +--> Event 28 starts. +--> Event 29 starts. +--> Event 30 starts. +--> Event 31 starts. +--> Event 32 starts. +--> Event 33 starts. +--> Event 34 starts. +--> Event 35 starts. +--> Event 36 starts. +--> Event 37 starts. +--> Event 38 starts. +--> Event 39 starts. +--> Event 40 starts. +--> Event 41 starts. +--> Event 42 starts. +--> Event 43 starts. +--> Event 44 starts. +--> Event 45 starts. +--> Event 46 starts. +--> Event 47 starts. +--> Event 48 starts. +--> Event 49 starts. +--> Event 50 starts. +--> Event 51 starts. +--> Event 52 starts. +--> Event 53 starts. +--> Event 54 starts. +--> Event 55 starts. +--> Event 56 starts. +--> Event 57 starts. +--> Event 58 starts. +--> Event 59 starts. +--> Event 60 starts. +--> Event 61 starts. +--> Event 62 starts. +--> Event 63 starts. +--> Event 64 starts. +--> Event 65 starts. +--> Event 66 starts. +--> Event 67 starts. +--> Event 68 starts. +--> Event 69 starts. +--> Event 70 starts. +--> Event 71 starts. +--> Event 72 starts. +--> Event 73 starts. +--> Event 74 starts. +--> Event 75 starts. +--> Event 76 starts. +--> Event 77 starts. +--> Event 78 starts. +--> Event 79 starts. +--> Event 80 starts. +--> Event 81 starts. +--> Event 82 starts. +--> Event 83 starts. +--> Event 84 starts. +--> Event 85 starts. +--> Event 86 starts. +--> Event 87 starts. +--> Event 88 starts. +--> Event 89 starts. +--> Event 90 starts. +--> Event 91 starts. +--> Event 92 starts. +--> Event 93 starts. +--> Event 94 starts. +--> Event 95 starts. +--> Event 96 starts. +--> Event 97 starts. +--> Event 98 starts. +--> Event 99 starts. + Run terminated. +Run Summary + Number of events processed : 100 + User=0.010000s Real=0.022940s Sys=0.010000s +--------------------End of Global Run----------------------- + The run was 100 events +LOCAL TOTAL DOSE : 0 Gy + TOTAL DOSE : 9.87206e-07 Gy + ###### EndOfRunAction ###### +============================================================= + Number of event processed : 100 +============================================================= + opened file dicom.out for dose output + Voxel | DoseDeposit | +============================================= + closed file dicom.out for dose output +Finished : End of Run Action 0 +Graphics systems deleted. +Visualization Manager deleting... +================== Deleting memory pools =================== +Number of memory pools allocated: 10 of which, static: 0 +Dynamic pools deleted: 10 / Total memory freed: 0.03 MB +============================================================ diff --git a/examples/extended/medical/DICOM/run_DICOM_HEAD.mac b/examples/extended/medical/DICOM/DICOM1/run_DICOM_HEAD.mac similarity index 100% rename from examples/extended/medical/DICOM/run_DICOM_HEAD.mac rename to examples/extended/medical/DICOM/DICOM1/run_DICOM_HEAD.mac diff --git a/examples/extended/medical/DICOM/share/AltData.dat b/examples/extended/medical/DICOM/DICOM1/share/AltData.dat similarity index 100% rename from examples/extended/medical/DICOM/share/AltData.dat rename to examples/extended/medical/DICOM/DICOM1/share/AltData.dat diff --git a/examples/extended/medical/DICOM/share/IM-0003-0001.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0001.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0001.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0001.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0002.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0002.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0002.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0002.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0003.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0003.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0003.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0003.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0004.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0004.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0004.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0004.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0005.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0005.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0005.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0005.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0006.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0006.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0006.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0006.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0007.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0007.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0007.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0007.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0008.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0008.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0008.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0008.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0009.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0009.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0009.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0009.dcm diff --git a/examples/extended/medical/DICOM/share/IM-0003-0010.dcm b/examples/extended/medical/DICOM/DICOM1/share/IM-0003-0010.dcm similarity index 100% rename from examples/extended/medical/DICOM/share/IM-0003-0010.dcm rename to examples/extended/medical/DICOM/DICOM1/share/IM-0003-0010.dcm diff --git a/examples/extended/medical/DICOM/share/SixSlice.dat b/examples/extended/medical/DICOM/DICOM1/share/SixSlice.dat similarity index 100% rename from examples/extended/medical/DICOM/share/SixSlice.dat rename to examples/extended/medical/DICOM/DICOM1/share/SixSlice.dat diff --git a/examples/extended/medical/DICOM/test.g4pdcm b/examples/extended/medical/DICOM/DICOM1/test.g4pdcm similarity index 100% rename from examples/extended/medical/DICOM/test.g4pdcm rename to examples/extended/medical/DICOM/DICOM1/test.g4pdcm diff --git a/examples/extended/medical/DICOM/vis.mac b/examples/extended/medical/DICOM/DICOM1/vis.mac similarity index 100% rename from examples/extended/medical/DICOM/vis.mac rename to examples/extended/medical/DICOM/DICOM1/vis.mac diff --git a/examples/extended/medical/DICOM2/.README.txt b/examples/extended/medical/DICOM/DICOM2/.README.txt similarity index 72% rename from examples/extended/medical/DICOM2/.README.txt rename to examples/extended/medical/DICOM/DICOM2/.README.txt index 71287cc9b5..9ac7ee1920 100644 --- a/examples/extended/medical/DICOM2/.README.txt +++ b/examples/extended/medical/DICOM/DICOM2/.README.txt @@ -2,15 +2,15 @@ ///\file "DICOM2/.README.txt" ///\brief Example DICOM2 README page -/*! \page ExampleDICOM2 Example DICOM2 +/*! \page ExampleDICOM_2 Example DICOM2 - This example demonstrates how to inherit from the DICOM example. + This example demonstrates how to inherit from the `G4DicomCore` library. For more information of the DICOM problem, see the documentation - for the DICOM example + for the [DICOM1](ExampleDICOM1) example \section DICOM2_s0 Introduction -This example demonstrates how to inherit from the DICOM example. +This example demonstrates how to inherit from the `G4DicomCore` library. For more information on the DICOM example, see the README in the DICOM example. In addition to demonstrating inheritance from DICOM, this example demonstrates method for memory savings, scoring into a sequential @@ -18,21 +18,8 @@ container instead of an associative container, accumulating the scoring with a statistics class instead of a simple floating point, and generic iteration over the variety of scoring container storage variants provided by Geant4 -\section DICOM2_s1 Configuration and Building -The DICOM example should be built and installed. By default, the CMake configuration -for the DICOM example will install to the same directory as ${Geant4_DIR}. - -When configurating this example, provide DICOM_DIR=, e.g. - -$ cmake -DGeant4_DIR=/usr/local/lib/Geant4-10.5.0 -DDICOM_DIR=/usr/local/lib/Geant4-10.5.0 - -This example will enable DCMTK and/or DICOM_HEAD based on the configuration set when -the DICOM example was installed. The files "Data.dat.old" and "Data.dat.new" follow -the same pattern of being copied to "Data.dat" in the binary directory that is detailed -out in Section 4 of the DICOM README. - -\section DICOM2_s2 Class Overview +\section DICOM2_s1 Class Overview - Dicom2Run: - How to save memory with G4VTHitsVector instead of G4THitsMap diff --git a/examples/extended/medical/DICOM/DICOM2/CMakeLists.txt b/examples/extended/medical/DICOM/DICOM2/CMakeLists.txt new file mode 100644 index 0000000000..b5b9f4a730 --- /dev/null +++ b/examples/extended/medical/DICOM/DICOM2/CMakeLists.txt @@ -0,0 +1,58 @@ + +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.27) +project(DICOM2) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(dicom2 dicom2.cc ${sources} ${headers}) +target_include_directories(dicom2 PRIVATE ${PROJECT_SOURCE_DIR}/include) +target_link_libraries(dicom2 PRIVATE G4DicomCore::G4DicomCore ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build B1. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +# the macros +set(DICOM_MACROS run.mac vis.mac) + +# original set of DICOM data +set(DICOM_SCRIPTS + 1.dcm 2.dcm 3.dcm + 1.g4 2.g4 3.g4 + 1.g4dcm 2.g4dcm 3.g4dcm + ColourMap.dat CT2Density.dat + Data.dat.new Data.dat.old + Data.dat.new_dens Data.partial.dat) + +foreach(_script ${DICOM_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/data/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY) +endforeach() + +if(DICOM_USE_DCMTK) + configure_file(${PROJECT_SOURCE_DIR}/data/Data.dat.new + ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) +else() + configure_file(${PROJECT_SOURCE_DIR}/data/Data.dat.old + ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) +endif() + +foreach(_script ${DICOM_MACROS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY) +endforeach() diff --git a/examples/extended/medical/DICOM2/History b/examples/extended/medical/DICOM/DICOM2/History similarity index 92% rename from examples/extended/medical/DICOM2/History rename to examples/extended/medical/DICOM/DICOM2/History index 5a69fb30e1..04d224f24a 100644 --- a/examples/extended/medical/DICOM2/History +++ b/examples/extended/medical/DICOM/DICOM2/History @@ -4,6 +4,12 @@ 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-04-24 Ben Morgan (DICOM2-V11-03-00) +- Refactor DICOM examples into single project. Retain this History file for + legacy reasons. + + **All new entries must go in the main `History`file in the top level DICOM + directory.** ## 2023-10-20 John Allison (DICOM2-V11-01-00) - vis.mac: Remove defunct command /vis/ogl/set/displayListLimit. diff --git a/examples/extended/medical/DICOM2/README b/examples/extended/medical/DICOM/DICOM2/README similarity index 68% rename from examples/extended/medical/DICOM2/README rename to examples/extended/medical/DICOM/DICOM2/README index d8fa3f1ac6..f035ae294a 100644 --- a/examples/extended/medical/DICOM2/README +++ b/examples/extended/medical/DICOM/DICOM2/README @@ -1,14 +1,6 @@ -------------------------------------------------------------------- +# DICOM2 Example - ========================================================= - Geant4 - an Object-Oriented Toolkit for Simulation in HEP - ========================================================= - - Example DICOM2 - -------------- - - ----> 1) Introduction +## Introduction This example demonstrates how to inherit from the DICOM example. For more information on the DICOM example, see the README in @@ -18,21 +10,7 @@ container instead of an associative container, accumulating the scoring with a statistics class instead of a simple floating point, and generic iteration over the variety of scoring container storage variants provided by Geant4 ----> 2) Configuration and Building - -The DICOM example should be built and installed. By default, the CMake configuration -for the DICOM example will install to the same directory as ${Geant4_DIR}. - -When configurating this example, provide DICOM_DIR=, e.g. - -$ cmake -DGeant4_DIR=/usr/local/lib/Geant4-10.5.0 -DDICOM_DIR=/usr/local/lib/Geant4-10.5.0 - -This example will enable DCMTK and/or DICOM_HEAD based on the configuration set when -the DICOM example was installed. The files "Data.dat.old" and "Data.dat.new" follow -the same pattern of being copied to "Data.dat" in the binary directory that is detailed -out in Section 4 of the DICOM README. - ----> 3) Class Overview +## Class Overview - Dicom2Run: - How to save memory with G4VTHitsVector instead of G4THitsMap diff --git a/examples/extended/medical/DICOM2/data/1.dcm b/examples/extended/medical/DICOM/DICOM2/data/1.dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/1.dcm rename to examples/extended/medical/DICOM/DICOM2/data/1.dcm diff --git a/examples/extended/medical/DICOM2/data/1.g4 b/examples/extended/medical/DICOM/DICOM2/data/1.g4 similarity index 100% rename from examples/extended/medical/DICOM2/data/1.g4 rename to examples/extended/medical/DICOM/DICOM2/data/1.g4 diff --git a/examples/extended/medical/DICOM2/data/1.g4dcm b/examples/extended/medical/DICOM/DICOM2/data/1.g4dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/1.g4dcm rename to examples/extended/medical/DICOM/DICOM2/data/1.g4dcm diff --git a/examples/extended/medical/DICOM2/data/2.dcm b/examples/extended/medical/DICOM/DICOM2/data/2.dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/2.dcm rename to examples/extended/medical/DICOM/DICOM2/data/2.dcm diff --git a/examples/extended/medical/DICOM2/data/2.g4 b/examples/extended/medical/DICOM/DICOM2/data/2.g4 similarity index 100% rename from examples/extended/medical/DICOM2/data/2.g4 rename to examples/extended/medical/DICOM/DICOM2/data/2.g4 diff --git a/examples/extended/medical/DICOM2/data/2.g4dcm b/examples/extended/medical/DICOM/DICOM2/data/2.g4dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/2.g4dcm rename to examples/extended/medical/DICOM/DICOM2/data/2.g4dcm diff --git a/examples/extended/medical/DICOM2/data/3.dcm b/examples/extended/medical/DICOM/DICOM2/data/3.dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/3.dcm rename to examples/extended/medical/DICOM/DICOM2/data/3.dcm diff --git a/examples/extended/medical/DICOM2/data/3.g4 b/examples/extended/medical/DICOM/DICOM2/data/3.g4 similarity index 100% rename from examples/extended/medical/DICOM2/data/3.g4 rename to examples/extended/medical/DICOM/DICOM2/data/3.g4 diff --git a/examples/extended/medical/DICOM2/data/3.g4dcm b/examples/extended/medical/DICOM/DICOM2/data/3.g4dcm similarity index 100% rename from examples/extended/medical/DICOM2/data/3.g4dcm rename to examples/extended/medical/DICOM/DICOM2/data/3.g4dcm diff --git a/examples/extended/medical/DICOM2/data/CT2Density.dat b/examples/extended/medical/DICOM/DICOM2/data/CT2Density.dat similarity index 100% rename from examples/extended/medical/DICOM2/data/CT2Density.dat rename to examples/extended/medical/DICOM/DICOM2/data/CT2Density.dat diff --git a/examples/extended/medical/DICOM2/data/ColourMap.dat b/examples/extended/medical/DICOM/DICOM2/data/ColourMap.dat similarity index 100% rename from examples/extended/medical/DICOM2/data/ColourMap.dat rename to examples/extended/medical/DICOM/DICOM2/data/ColourMap.dat diff --git a/examples/extended/medical/DICOM2/data/Data.dat b/examples/extended/medical/DICOM/DICOM2/data/Data.dat similarity index 100% rename from examples/extended/medical/DICOM2/data/Data.dat rename to examples/extended/medical/DICOM/DICOM2/data/Data.dat diff --git a/examples/extended/medical/DICOM2/data/Data.dat.new b/examples/extended/medical/DICOM/DICOM2/data/Data.dat.new similarity index 100% rename from examples/extended/medical/DICOM2/data/Data.dat.new rename to examples/extended/medical/DICOM/DICOM2/data/Data.dat.new diff --git a/examples/extended/medical/DICOM2/data/Data.dat.new_dens b/examples/extended/medical/DICOM/DICOM2/data/Data.dat.new_dens similarity index 100% rename from examples/extended/medical/DICOM2/data/Data.dat.new_dens rename to examples/extended/medical/DICOM/DICOM2/data/Data.dat.new_dens diff --git a/examples/extended/medical/DICOM2/data/Data.dat.old b/examples/extended/medical/DICOM/DICOM2/data/Data.dat.old similarity index 100% rename from examples/extended/medical/DICOM2/data/Data.dat.old rename to examples/extended/medical/DICOM/DICOM2/data/Data.dat.old diff --git a/examples/extended/medical/DICOM2/data/Data.partial.dat b/examples/extended/medical/DICOM/DICOM2/data/Data.partial.dat similarity index 100% rename from examples/extended/medical/DICOM2/data/Data.partial.dat rename to examples/extended/medical/DICOM/DICOM2/data/Data.partial.dat diff --git a/examples/extended/medical/DICOM2/data/test.g4pdcm b/examples/extended/medical/DICOM/DICOM2/data/test.g4pdcm similarity index 100% rename from examples/extended/medical/DICOM2/data/test.g4pdcm rename to examples/extended/medical/DICOM/DICOM2/data/test.g4pdcm diff --git a/examples/extended/medical/DICOM2/dicom2.cc b/examples/extended/medical/DICOM/DICOM2/dicom2.cc similarity index 100% rename from examples/extended/medical/DICOM2/dicom2.cc rename to examples/extended/medical/DICOM/DICOM2/dicom2.cc diff --git a/examples/extended/medical/DICOM2/include/Dicom2ActionInitialization.hh b/examples/extended/medical/DICOM/DICOM2/include/Dicom2ActionInitialization.hh similarity index 100% rename from examples/extended/medical/DICOM2/include/Dicom2ActionInitialization.hh rename to examples/extended/medical/DICOM/DICOM2/include/Dicom2ActionInitialization.hh diff --git a/examples/extended/medical/DICOM2/include/Dicom2PrimaryGeneratorAction.hh b/examples/extended/medical/DICOM/DICOM2/include/Dicom2PrimaryGeneratorAction.hh similarity index 100% rename from examples/extended/medical/DICOM2/include/Dicom2PrimaryGeneratorAction.hh rename to examples/extended/medical/DICOM/DICOM2/include/Dicom2PrimaryGeneratorAction.hh diff --git a/examples/extended/medical/DICOM2/include/Dicom2Run.hh b/examples/extended/medical/DICOM/DICOM2/include/Dicom2Run.hh similarity index 100% rename from examples/extended/medical/DICOM2/include/Dicom2Run.hh rename to examples/extended/medical/DICOM/DICOM2/include/Dicom2Run.hh diff --git a/examples/extended/medical/DICOM2/include/Dicom2RunAction.hh b/examples/extended/medical/DICOM/DICOM2/include/Dicom2RunAction.hh similarity index 100% rename from examples/extended/medical/DICOM2/include/Dicom2RunAction.hh rename to examples/extended/medical/DICOM/DICOM2/include/Dicom2RunAction.hh diff --git a/examples/extended/medical/DICOM2/run.mac b/examples/extended/medical/DICOM/DICOM2/run.mac similarity index 100% rename from examples/extended/medical/DICOM2/run.mac rename to examples/extended/medical/DICOM/DICOM2/run.mac diff --git a/examples/extended/medical/DICOM2/run.out b/examples/extended/medical/DICOM/DICOM2/run.out similarity index 99% rename from examples/extended/medical/DICOM2/run.out rename to examples/extended/medical/DICOM/DICOM2/run.out index 8e7641a48b..3004b248dd 100644 --- a/examples/extended/medical/DICOM2/run.out +++ b/examples/extended/medical/DICOM/DICOM2/run.out @@ -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-04 (30-April-2025) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -77,7 +77,7 @@ Registered graphics systems are: ASCIITree (ATree) DAWNFILE (DAWNFILE) G4HepRepFile (HepRepFile) - RayTracer (RayTracer) + RayTracer (RT) VRML2FILE (VRML2FILE) gMocrenFile (gMocrenFile) TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) @@ -87,7 +87,8 @@ Registered graphics systems are: 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) @@ -898,6 +899,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 @@ -914,6 +916,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 @@ -1102,7 +1105,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.017840s Sys=0.000000s + User=0.030000s Real=0.040748s Sys=0.000000s [=========================================================== DICOM ===========================================================] @@ -1144,5 +1147,5 @@ Number of memory pools allocated: 10 of which, static: 0 Dynamic pools deleted: 10 / Total memory freed: 0.04 MB ============================================================ -[/build/jenkins/workspace/examples/extended/medical/DICOM2/dicom2] Primary execution time: User=3.790000s Real=4.534401s Sys=0.260000s +[/build/jenkins/workspace/examples/extended/medical/DICOM2/dicom2] Primary execution time: User=8.360000s Real=10.225062s Sys=0.460000s diff --git a/examples/extended/medical/DICOM2/run_DICOM_HEAD.mac b/examples/extended/medical/DICOM/DICOM2/run_DICOM_HEAD.mac similarity index 100% rename from examples/extended/medical/DICOM2/run_DICOM_HEAD.mac rename to examples/extended/medical/DICOM/DICOM2/run_DICOM_HEAD.mac diff --git a/examples/extended/medical/DICOM2/src/Dicom2ActionInitialization.cc b/examples/extended/medical/DICOM/DICOM2/src/Dicom2ActionInitialization.cc similarity index 100% rename from examples/extended/medical/DICOM2/src/Dicom2ActionInitialization.cc rename to examples/extended/medical/DICOM/DICOM2/src/Dicom2ActionInitialization.cc diff --git a/examples/extended/medical/DICOM2/src/Dicom2PrimaryGeneratorAction.cc b/examples/extended/medical/DICOM/DICOM2/src/Dicom2PrimaryGeneratorAction.cc similarity index 100% rename from examples/extended/medical/DICOM2/src/Dicom2PrimaryGeneratorAction.cc rename to examples/extended/medical/DICOM/DICOM2/src/Dicom2PrimaryGeneratorAction.cc diff --git a/examples/extended/medical/DICOM2/src/Dicom2Run.cc b/examples/extended/medical/DICOM/DICOM2/src/Dicom2Run.cc similarity index 100% rename from examples/extended/medical/DICOM2/src/Dicom2Run.cc rename to examples/extended/medical/DICOM/DICOM2/src/Dicom2Run.cc diff --git a/examples/extended/medical/DICOM2/src/Dicom2RunAction.cc b/examples/extended/medical/DICOM/DICOM2/src/Dicom2RunAction.cc similarity index 100% rename from examples/extended/medical/DICOM2/src/Dicom2RunAction.cc rename to examples/extended/medical/DICOM/DICOM2/src/Dicom2RunAction.cc diff --git a/examples/extended/medical/DICOM2/vis.mac b/examples/extended/medical/DICOM/DICOM2/vis.mac similarity index 100% rename from examples/extended/medical/DICOM2/vis.mac rename to examples/extended/medical/DICOM/DICOM2/vis.mac diff --git a/examples/extended/medical/DICOM/G4DicomCore/CMakeLists.txt b/examples/extended/medical/DICOM/G4DicomCore/CMakeLists.txt new file mode 100644 index 0000000000..25db3955cf --- /dev/null +++ b/examples/extended/medical/DICOM/G4DicomCore/CMakeLists.txt @@ -0,0 +1,19 @@ +#---------------------------------------------------------------------------- +# Build G4DicomCore library for shared functionality between the two examples +#---------------------------------------------------------------------------- + +# Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs +# +file(GLOB sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh) + +add_library(G4DicomCore STATIC ${headers} ${sources}) +target_compile_definitions(G4DicomCore PRIVATE $<$:DICOM_USE_HEAD>) +target_include_directories(G4DicomCore PUBLIC $) +target_link_libraries(G4DicomCore + PUBLIC + ${Geant4_LIBRARIES} + $<$:G4DicomReader::G4DicomReader>) + +add_library(G4DicomCore::G4DicomCore ALIAS G4DicomCore) diff --git a/examples/extended/medical/DICOM/include/DicomActionInitialization.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomActionInitialization.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomActionInitialization.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomActionInitialization.hh diff --git a/examples/extended/medical/DICOM/include/DicomDetectorConstruction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomDetectorConstruction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomDetectorConstruction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomDetectorConstruction.hh diff --git a/examples/extended/medical/DICOM/include/DicomEventAction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomEventAction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomEventAction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomEventAction.hh diff --git a/examples/extended/medical/DICOM/include/DicomHandler.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomHandler.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomHandler.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomHandler.hh diff --git a/examples/extended/medical/DICOM/include/DicomIntersectVolume.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomIntersectVolume.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomIntersectVolume.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomIntersectVolume.hh diff --git a/examples/extended/medical/DICOM/include/DicomNestedParamDetectorConstruction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomNestedParamDetectorConstruction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomNestedParamDetectorConstruction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomNestedParamDetectorConstruction.hh diff --git a/examples/extended/medical/DICOM/include/DicomNestedPhantomParameterisation.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomNestedPhantomParameterisation.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomNestedPhantomParameterisation.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomNestedPhantomParameterisation.hh diff --git a/examples/extended/medical/DICOM/include/DicomPartialDetectorConstruction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomPartialDetectorConstruction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomPartialDetectorConstruction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomPartialDetectorConstruction.hh diff --git a/examples/extended/medical/DICOM/include/DicomPhantomParameterisationColour.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomParameterisationColour.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomPhantomParameterisationColour.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomParameterisationColour.hh diff --git a/examples/extended/medical/DICOM/include/DicomPhantomZSliceHeader.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomZSliceHeader.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomPhantomZSliceHeader.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomZSliceHeader.hh diff --git a/examples/extended/medical/DICOM/include/DicomPhantomZSliceMerged.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomZSliceMerged.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomPhantomZSliceMerged.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomPhantomZSliceMerged.hh diff --git a/examples/extended/medical/DICOM/include/DicomPrimaryGeneratorAction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomPrimaryGeneratorAction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomPrimaryGeneratorAction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomPrimaryGeneratorAction.hh diff --git a/examples/extended/medical/DICOM/include/DicomRegularDetectorConstruction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomRegularDetectorConstruction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomRegularDetectorConstruction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomRegularDetectorConstruction.hh diff --git a/examples/extended/medical/DICOM/include/DicomRun.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomRun.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomRun.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomRun.hh diff --git a/examples/extended/medical/DICOM/include/DicomRunAction.hh b/examples/extended/medical/DICOM/G4DicomCore/include/DicomRunAction.hh similarity index 100% rename from examples/extended/medical/DICOM/include/DicomRunAction.hh rename to examples/extended/medical/DICOM/G4DicomCore/include/DicomRunAction.hh diff --git a/examples/extended/medical/DICOM/src/DicomActionInitialization.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomActionInitialization.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomActionInitialization.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomActionInitialization.cc diff --git a/examples/extended/medical/DICOM/src/DicomDetectorConstruction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomDetectorConstruction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomDetectorConstruction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomDetectorConstruction.cc diff --git a/examples/extended/medical/DICOM/src/DicomEventAction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomEventAction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomEventAction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomEventAction.cc diff --git a/examples/extended/medical/DICOM/src/DicomHandler.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomHandler.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomHandler.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomHandler.cc diff --git a/examples/extended/medical/DICOM/src/DicomIntersectVolume.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomIntersectVolume.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomIntersectVolume.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomIntersectVolume.cc diff --git a/examples/extended/medical/DICOM/src/DicomNestedParamDetectorConstruction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomNestedParamDetectorConstruction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomNestedParamDetectorConstruction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomNestedParamDetectorConstruction.cc diff --git a/examples/extended/medical/DICOM/src/DicomNestedPhantomParameterisation.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomNestedPhantomParameterisation.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomNestedPhantomParameterisation.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomNestedPhantomParameterisation.cc diff --git a/examples/extended/medical/DICOM/src/DicomPartialDetectorConstruction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomPartialDetectorConstruction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomPartialDetectorConstruction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomPartialDetectorConstruction.cc diff --git a/examples/extended/medical/DICOM/src/DicomPhantomParameterisationColour.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomParameterisationColour.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomPhantomParameterisationColour.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomParameterisationColour.cc diff --git a/examples/extended/medical/DICOM/src/DicomPhantomZSliceHeader.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomZSliceHeader.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomPhantomZSliceHeader.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomZSliceHeader.cc diff --git a/examples/extended/medical/DICOM/src/DicomPhantomZSliceMerged.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomZSliceMerged.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomPhantomZSliceMerged.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomPhantomZSliceMerged.cc diff --git a/examples/extended/medical/DICOM/src/DicomPrimaryGeneratorAction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomPrimaryGeneratorAction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomPrimaryGeneratorAction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomPrimaryGeneratorAction.cc diff --git a/examples/extended/medical/DICOM/src/DicomRegularDetectorConstruction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomRegularDetectorConstruction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomRegularDetectorConstruction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomRegularDetectorConstruction.cc diff --git a/examples/extended/medical/DICOM/src/DicomRun.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomRun.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomRun.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomRun.cc diff --git a/examples/extended/medical/DICOM/src/DicomRunAction.cc b/examples/extended/medical/DICOM/G4DicomCore/src/DicomRunAction.cc similarity index 100% rename from examples/extended/medical/DICOM/src/DicomRunAction.cc rename to examples/extended/medical/DICOM/G4DicomCore/src/DicomRunAction.cc diff --git a/examples/extended/medical/DICOM/G4DicomReader/CMakeLists.txt b/examples/extended/medical/DICOM/G4DicomReader/CMakeLists.txt new file mode 100644 index 0000000000..9e4940c970 --- /dev/null +++ b/examples/extended/medical/DICOM/G4DicomReader/CMakeLists.txt @@ -0,0 +1,27 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.27) +project(G4DicomReader) + +#---------------------------------------------------------------------------- +# Find DCMTK installation +# +find_package(DCMTK REQUIRED) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the library +# +add_library(G4DicomReader STATIC ${headers} ${sources}) +target_compile_definitions(G4DicomReader PUBLIC G4_DCMTK) +target_include_directories(G4DicomReader PUBLIC $) +target_link_libraries(G4DicomReader PUBLIC ${Geant4_LIBRARIES} DCMTK::DCMTK) + +add_library(G4DicomReader::G4DicomReader ALIAS G4DicomReader) + + diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeam.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeam.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeam.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeam.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamBlock.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamBlock.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamBlock.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamBlock.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamCompensator.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamCompensator.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamCompensator.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamCompensator.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamControlPoint.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamControlPoint.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamControlPoint.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamControlPoint.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamDevice.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDevice.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamDevice.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDevice.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamDevicePos.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDevicePos.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamDevicePos.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDevicePos.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamDeviceRef.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDeviceRef.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamDeviceRef.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamDeviceRef.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomBeamWedge.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamWedge.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomBeamWedge.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomBeamWedge.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFileCT.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFileCT.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFileCT.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFileCT.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFileCT_NOdcmrt.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFileCT_NOdcmrt.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFileCT_NOdcmrt.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFileCT_NOdcmrt.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFileMgr.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFileMgr.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFileMgr.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFileMgr.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFilePET.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFilePET.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFilePET.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFilePET.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFilePlan.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFilePlan.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFilePlan.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFilePlan.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomFileStructure.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomFileStructure.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomFileStructure.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomFileStructure.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomROI.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomROI.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomROI.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomROI.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomROIContour.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomROIContour.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomROIContour.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomROIContour.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomVBeamDevice.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomVBeamDevice.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomVBeamDevice.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomVBeamDevice.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomVFile.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomVFile.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomVFile.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomVFile.hh diff --git a/examples/extended/medical/DICOM/dicomReader/include/DicomVFileImage.hh b/examples/extended/medical/DICOM/G4DicomReader/include/DicomVFileImage.hh similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/include/DicomVFileImage.hh rename to examples/extended/medical/DICOM/G4DicomReader/include/DicomVFileImage.hh diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeam.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeam.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeam.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeam.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamBlock.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamBlock.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamBlock.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamBlock.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamCompensator.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamCompensator.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamCompensator.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamCompensator.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamControlPoint.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamControlPoint.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamControlPoint.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamControlPoint.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamDevice.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDevice.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamDevice.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDevice.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamDevicePos.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDevicePos.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamDevicePos.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDevicePos.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamDeviceRef.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDeviceRef.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamDeviceRef.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamDeviceRef.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomBeamWedge.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamWedge.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomBeamWedge.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomBeamWedge.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomFileCT.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomFileCT.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomFileCT.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomFileCT.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomFileMgr.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomFileMgr.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomFileMgr.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomFileMgr.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomFilePET.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomFilePET.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomFilePET.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomFilePET.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomFilePlan.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomFilePlan.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomFilePlan.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomFilePlan.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomFileStructure.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomFileStructure.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomFileStructure.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomFileStructure.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomROI.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomROI.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomROI.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomROI.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomROIContour.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomROIContour.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomROIContour.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomROIContour.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomVBeamDevice.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomVBeamDevice.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomVBeamDevice.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomVBeamDevice.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomVFile.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomVFile.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomVFile.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomVFile.cc diff --git a/examples/extended/medical/DICOM/dicomReader/src/DicomVFileImage.cc b/examples/extended/medical/DICOM/G4DicomReader/src/DicomVFileImage.cc similarity index 100% rename from examples/extended/medical/DICOM/dicomReader/src/DicomVFileImage.cc rename to examples/extended/medical/DICOM/G4DicomReader/src/DicomVFileImage.cc diff --git a/examples/extended/medical/DICOM/GNUmakefile b/examples/extended/medical/DICOM/GNUmakefile deleted file mode 100644 index 468fce4d3a..0000000000 --- a/examples/extended/medical/DICOM/GNUmakefile +++ /dev/null @@ -1,59 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. -# -------------------------------------------------------------- - -name := DICOM -G4TARGET := $(name) -G4EXLIB := true -SUBDIRS := dicomReader - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -.PHONY: all makesub clean cleansub -all: makesub lib bin - -# DCMTK support -# -#DICOM_USE_DCMTK := true - -ifdef DICOM_USE_DCMTK - -EXTRALIBS = -L$(DCMTK_BASE_DIR)/lib -ldcmpstat -ldcmwlm -lijg8 -ldcmdata -ldcmjpeg -ldcmqrdb -li2d -loflog -ldcmdsig -ldcmjpls -ldcmsr -lijg12 -lofstd -ldcmimage -ldcmnet -ldcmtls -lijg16 -ldcmjpeg -ldcmrt -lcharls -ldcmimgle -lpthread -lpng - -#CPPFLAGS += -DG4_DCMTK -DHAVE_CONFIG_H -DUSE_NULL_SAFE_OFSTRING -DWITH_ARITHMETIC_PATCH -D_REENTRANT -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -fPIC -CPPFLAGS += -DG4_DCMTK - -endif - -include $(G4INSTALL)/config/binmake.gmk - -ifdef DICOM_USE_DCMTK -INCFLAGS += -I$(DCMTK_BASE_DIR)/include -CPPFLAGS += -I./dicomReader/include -endif - -makesub: -ifdef DICOM_USE_DCMTK - @for dir in $(SUBDIRS); do ( \ - echo Entering $$dir ... ; \ - cd $$dir; \ - $(MAKE) obj name=dicomReader );\ - done -endif - -clean:: cleansub - -cleansub: -ifdef DICOM_USE_DCMTK - @for dir in $(SUBDIRS); do ( \ - echo Entering $$dir ...; \ - cd $$dir; \ - $(MAKE) clean );\ - done -endif - -visclean: - rm -f g4*.prim g4*.eps g4*.wrl - rm -f .DAWN_* diff --git a/examples/extended/medical/DICOM/History b/examples/extended/medical/DICOM/History index c7a8b199ca..498dc881fa 100644 --- a/examples/extended/medical/DICOM/History +++ b/examples/extended/medical/DICOM/History @@ -6,457 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2024-06-05 L. T. Anh (DICOM-V11-02-00) -- Correct symbols for Chlorine and Potassium elements in function - InitialisationOfMaterials(). - -## 2023-12-03 A. Howard (DICOM-V11-01-02) -- Modified DicomDetectorConstruction: added correct replica depths for x,y,z - of G4PSDoseDeposit3D for nested parameterisation and corrected voxel ordering - according to the fixed formula within G4PSDoseDeposit3D; added environment - variable to switch to standard G4PSDoseDeposit in the case of regular - navigation (default). -- Updated README and .README to be more correct and include description of - G4PSDoseDeposit3D and its usage for nested parameterisation. - -## 2023-11-25 C. Mancini (DICOM-V11-01-01) -- Modified DicomNestedPhantomParameterisation: removed the "static" descriptor - from the "G4Material* mate" instantiation. - -## 2023-09-02 Gabriele Cosmo (DICOM-V11-01-00) -- Removed forward declaration for G4VTouchable. - -## 2022-10-04 John Allison (DICOM-V11-00-04) -- Introduce special mesh rendering of DICOM image. - -## 2022-10-24 I. Hrivnacova (DICOM-V11-00-03) -- Coding guidelines: start data member with 'f'; use G4int, G4double - (skipped dicomReader classes). - -## 2022-10-04 Ben Morgan (DICOM-V11-00-02) -- Replace sprintf with direct G4String use to remove deprecation warnings on - macOS-13. - -## 2022-10-04 Gabriele Cosmo (DICOM-V11-00-01) -- Fixed compilation warning on Intel-icx compiler for set but unused variable - in DicomHandler::ReadData(). - -## 2021-12-10 Ben Morgan (DICOM-V11-00-00) -- Change to new Markdown History format. - ---- - -# History entries prior to 11.0 - -27.09.2021 Pedro Arce (DICOM-V10-07-01) -- Use updated interface from geomnav to use G4PhantomParameterisation::GetNoVoxels instead of GetNoVoxel - -31.12.2020 - John Allison (DICOM-V10-07-00) - vis.mac: "Change /vis/ogl/set/eventsDrawInterval" to - "/vis/ogl/flushAt NthPrimitive". - -10.11.2020 - Ben Morgan (DICOM-V10-06-01) - Migration to G4RunManagerFactory. - -21.10.2020 - Ben Morgan (DICOM-V10-06-00) - Distinguish output names of archive lib from DLL and application to - fix Windows LNK1149 errors for static libs. - Modernize cmake version detection and policy setting to follow main - Geant4 usage. - -19.11.2019 - Gabriele Cosmo (DICOM-V10-05-03) - Fixed more cases of implicit type conversions. - Some minor code cleanup. - -15.11.2019 - Gabriele Cosmo (DICOM-V10-05-02) - Fixed cases of implicit type conversions from size_t to G4int. - -12.11.2019 - Gunter Folger (DICOM-V10-05-01) - Correct DicomHandler singleton for use on Windows. - DICOM2 was crashing - -08.06.2019 - Gabriele Cosmo (DICOM-V10-05-00) - Defaulted copy-ctr in DicomPhantomZSliceHeader, to fix deprecation - compilation warnings on gcc-9.1. - -13.11.2018 - Jonathan Madsen (DICOM-V10-04-11) - Bugfix (2102) to DicomHandler reading fPixelSpacingY - -13.11.2018 - Jonathan Madsen (DICOM-V10-04-10) - Bugfix (2101) to DicomHandler skipping 2 bytes in implicit VR - -12.11.2018 - Jonathan Madsen (DICOM-V10-04-09) - Updated DICOMUtilities.cmake to handle Windows builds - Using modern CMake DICOM::target library alias - -12.11.2018 - Gabriele Cosmo (DICOM-V10-04-08) - DicomDetectorConstruction: removed useless static Instance() - method. - -12.11.2018 - Gabriele Cosmo (DICOM-V10-04-07) - DicomPartialDetectorConstruction: fixed shadowing of base class - data for 'fMateIDs'. Fixed type conversion unsigned_int -> int. - -12.11.2018 - Gabriele Cosmo (DICOM-V10-04-06) - DicomNestedPhantomParameterisation: removed useless statement - causing compilation error on Linux. - -10.11.2018 - Jonathan Madsen (DICOM-V10-04-05) - DICOMConfig.cmake.in handles DICOM_USE_HEAD being set - DownloadDICOMData.cmake does installation - CMakeLists.txt creates build-tree export - DicomDetectorConstruction is globally accessible - DicomHandler implements GetDicomData{Path,File} - which provides a fallback path to data libraries - directory for DICOM2 and handles DICOM_USE_HEAD situation - Phantom parameterization classes take an argument - specifying color file - fDcmrun is protected instead of private (for DICOM2) - DicomEventAction doesn't print every event - Removed DicomRun::RecordEvent incrementing numberOfEvent - (done by G4Run::RecordEvent) - Cleaned up output (when provided along with DICOM2 output - it was too excessive) now just a summary is provided - and per-voxel is output to file only - Moved Data.dat to Data.dat.old and CMake copies correct - Data.dat.{old,new} to Data.dat in binary directory based - on DICOM_USE_DCMTK setting - Updated README - -09.11.2018 - Gabriele Cosmo (DICOM-V10-04-04) - Use canonical definition for DICOMRunAction; removed wrong - singleton specification (in any case not necessary). - -22.06.2018 - Jonathan Madsen (DICOM-V10-04-03) - Added dicomReader/cmake/DICOMUtilities.cmake that defines - a DICOM_BUILD_LIBRARY macro which handles how to build - DICOM-library (and dicomReader library if USE_DICOM_DCMTK=ON) - based on the Geant4 installation (e.g. build shared, static, or - both) + updates to DICOMConfig.cmake.in and - dicomReaderConfig.cmake.in to handle which library type to - use link to - -20.05.2018 - John Allison (DICOM-V10-04-02) - Remove G4UI_USE and G4VIS_USE. - Move instantiation of G4UIExecutive to start of main. - -09.05.2018 - Ben Morgan (DICOM-V10-04-01) - Include G4Types before use of G4MULTITHREADED. For forward - compatibility with move to #defines over -D for G4 preprocessor - symbols. - -20.03.2018 - Jonathan Madsen (DICOM-V10-04-00) - Enabled CMake package configuration - Added DICOM_USE_DCMTK and DICOM_USE_HEAD CMake - options back-compat with environment variables - Updated README and .README.txt - -11.11.2017 - Marc Verderi (DICOM-V10-03-12) - Retag as DICOM-V10-03-11 too quickly rejected - -09.11.2017 - Ivana Hrivnacova (DICOM-V10-03-11) - Updated DICOM data version to 1.1 - -09.11.2017 - S. Guatelli (DICOM-V10-03-10) - Updated README and .README.txt - -09.11.2017 - S. Guatelli (DICOM-V10-03-09) - .g4dmc created in the user directory and not in the DICOM library, - together with the .g4dcmb files. - -09.11.2017 - S. Guatelli (DICOM-V10-03-08) - DICOM_PATH changed - no writing .g4dcmb in the library DICOM - -08.11.2017 - Ivana Hrivnacova (DICOM-V10-03-07) - Added downloading DICOM data in CMake build - (used only with DICOM_USE_HEAD option) - -07.11.2017 - S. Guatelli (DICOM-V10-03-06). - Warning deleted, updated README and .README.txt - -01.11.2017 - S. Guatelli (DICOM-V10-03-05). - DICOM_HEAD library can be used as input to the DICOM - DICOM_v1 does not need to be copied in the directory where the simulation is executed - -01.11.2017 - S. Guatelli (DICOM-V10-03-04). DICOM_HEAD library can be used as input to the DICOM - -28.09.2017 - S. Guatelli (DICOM-V10-03-03). DICOM_HEAD Directory deleted - -16.09.2017 - S. Guatelli (DICOM-V10-03-02) - - New DICOM Digital Head included by S. Guatelli - - Updated README, .README.txt - -19.11.2016 - Andrea Dotti (DICOM-V10-02-04) - - explicit set of SD to manager - -11.11.2016 - Ivana Hrivnacova (DICOM-V10-02-03) - - Removed extra compiler flags in GNUmakefile, CMakeLists.txt - (not needed) - - Renamed G4_USE_DCMTK in DICOM_USE_DCMTK - - Updated README, .README.txt - -11.11.2016 - Pedro Arce (DICOM-V10-02-02) - - Complying with Geant4 guidelines in data variables - -04.11.2016 - Pedro Arce (DICOM-V10-02-01) - - New DICOM reader based on DCMTK - -20.07.2016 - Ivana Hrivnacova (DICOM-V10-02-00) - - Fixed coding guidelines - (redundant empty lines, class data member names) - -17.09.2015 - Pedro Arce (DICOM-V10-01-01) - - Fixed coding guidelines (long lines) - -21.10.2014 - Pedro Arce (DICOM-V10-00-04) - - Fixed coding guidelines (long lines) - -16.10.2014 - Ivana Hrivnacova (DICOM-V10-00-03) - - Fixed coding guidelines (long lines) in - DicomPartialDetectorConstruction.hh, DicomPhantomZSliceHeader.hh - -29.07.2014 - Pedro Arce (DICOM-V10-00-02) - - Remove DicomPhysicsList - -25.07.2014 - Pedro Arce (DICOM-V10-00-01) - - Using G4GenericPhysicsList - - no std::cout - - no exit() - -03.12.2013 - Gabriele Cosmo (DICOM-V10-00-00) - - Attempt to fix Valgrind run-time error from printout in - DicomHandler::CheckFileFormat(). - -03.12.2013 - Ivana Hrivnacova (DICOM-V09-06-09) - - Updated README and .README to match (Pedro Arce) - -18.11.2014 - Ivana Hrivnacova (DICOM-V09-06-08) - - Fixed DicomPhantomZSliceMerged.hh file description - (for Doxygen) - -13.11.2014 - Jonathan Mdsen (DICOM-V09-06-07) - - Updated README and .README - - Fixed some comments - -04.11.2013 - Dennis Wright (DICOM-V09-06-06) - - replaced LEP model for alphas by extending Binary cascade to - zero energy - - updated sample output files to reflect this - -23.10.2013 - Gabriele Cosmo (DICOM-V09-06-05) - - Fixed compilation warnings. - -15.10.2013 - Jonathan Madsen (DICOM-V09-06-04) - - Modified DICOM to enable multithreading - - Adapted scorers - - Added ActionInitialization class - - Modified RunAction to handle master and daughter threads - -09.10.2013 - Ivana Hrivnacova (DICOM-V09-06-03) - Fixed file description (DicomPhantomZSliceMerged.hh) - -28.08.2013 - Gabriele Cosmo (DICOM-V09-06-02) - Added G4Ellipsoid to solids enabled for parameterisation in - DicomNestedPhantomParameterisation. - -29.07.2013 - Peter Gumplinger (DICOM-V09-06-01) - Fixed MAC/clang32 compilation warnings in DicomRunAction and - DiconIntersectVolume classes - -18.07.2013 - Jonathan Madsen - Missing documentation update from 18.12.2012: - Improvements and bug-fixes -> - DicomHandler had some bugs when using DCM files - other than examples provided - Added DicomPhantomZSliceMerged class to handle - inconsistencies in DCM file meta-data - DicomPhantomZSliceHeader class is extended to hold density - and material ID data and the printing of data - to files instead of DicomHandler - Removed additions on 16.07.2013 pending further discussion - Reverted DICOM example to 18.12.2012 update with some very - minor tweaks - Kept share folder with additional anonymous DCM files - and additional data files (SixSlice.dat, AltData.dat). Rename - these files with Data.dat to use - Kept CMakeLists.txt to copy over extra data file and anonymous - DCM files - -16.07.2013 - Jonathan Madsen - Many modifications to the DICOM example. - Added more anonymous DICOM files. - Added more script configurations. - Added DicomCommandLineOptions, DicomHelpers, DicomTypeConversion, - DicomOption as part of a command line processing package. - Modified CMakeLists.txt to configure extra files. - Added capability to use different data files for DICOM set, - CT2Density file, ColourMap file. - Added Statistical Analysis and Statistical Manager classes - Miscellaneous improvements. - DICOM.cc now has a large list of runtime configuration options - via command line. - Options set at command line are set to override environment - variables. - -15.02.2013 - Ivana Hrivnacova (DICOM-V09-06-00) - Applied coding guidelines (virtual keyword, data members - names and initialization) - -07.11.2012 - Gabriele Cosmo (DICOM-V09-05-10) - Fixed compilation warnings for shadowing of variables and unused - return flag from system calls. - -18.10.2012 - Ivana Hrivnacova (DICOM-V09-05-09) - Updated CMakeLists.txt: added copying data files to the build - area as they are needed to run the tests. - -13.10.2012 - Andrea Dotti (DICOM-V09-05-08) - Removing previous tag modification (not needed) - -13.10.2012 - Andrea Dotti (DICOM-V09-05-07) - Adding explicit use of system of units - -05.09.2012 - Ivana Hrivnacova (DICOM-V09-05-06) - Fixed compiler warning - -04.09.2012 - Pedro Arce (DICOM-V09-05-05) - Remove old renamed files - Updated CMakeLists.txt (By I.Hrivnacova) - Adding visualization, copying macros, install target and - comment lines - -17.07.2012 - Ivana Hrivnacova (DICOM-V09-05-04) - Improved README files - -06.07.2012 - Pedro Arce (DICOM-V09-05-03) - Reviewed examples according to coding guidelines - -13.06.2012 - Gabriele Cosmo (DICOM-V09-05-02) - Assign return value for fread() and fscanf() calls in - DicomHandler. Fixes compilation warnings on Ubuntu. - -28.03.2012 - Pedro Arce (DICOM-V09-05-01) - Corrections in materials Z/A. Addressing problem report #1287. - -13.11.2011 - Pedro Arce (DICOM-V09-04-03) - Migration to new G4Exception scheme. - -03.10.2011 - G.Folger (DICOM-V09-04-02) - Fix gcc46 compilation warning in DicomHandler.cc - and DicomPhantomParameterisationColour.cc - -05.06.2011 - Pedro Arce (DICOM-V09-04-01) - Corrected name for sensitive detector to be consistently - named as "phantomSD" in DicomRunAction. Addressing problem - report #1210. - Corrected axis slicing hint in nested-parameterisation. - -23.12.2010 - Stephane Chauvie - Corrected 2 bugs in DicomHandler - -30.11.2010 - John Allison - dicom.cc: Removed redundant headers: - "G4UIterminal.hh" and "G4UItcsh.hh". - -30.11.2010 - Ivana Hrivnacova (DICOM-V09-03-09) - Moved inclusion of vis headers as last in main(). - -26.11.2010 - Pedro Arce (DICOM-V09-03-08) - Correction of warnings - -24.11.2010 - Pedro Arce (DICOM-V09-03-07) - Introduced partial phantom example - Delete G4PSDoseDeposit_RegNav and use G4ScoreSplittingProcess instead - -11.11.2010 - Gabriele Cosmo (DICOM-V09-03-06) - Corrected vis.mac macro and set OGL as default viewer. - Corrected some printouts in code... - -09.11.2010 - Gabriele Cosmo (DICOM-V09-03-05) - Fixed compilation warning on virtual methods hiding - Fixed compilation warnings in DicomPhantomParameterisationColour - and DicomHandler. - -02.11.2010 - John Allison (DICOM-V09-03-04) - Introduced G4UIExecutive. - -06.06.2010 - Joseph Perl (DICOM-V09-03-03) - Remove unused variable in EventAction - -03.06.2010 - Joseph Perl (DICOM-V09-03-02) - Updated vis usage - -19.11.2009 - StÈphane Chauvie (DICOM-V09-03-00) -01.06.2010 - Stephane Chauvie - Andrea Armando - Added function to read nested items (defined and undefined) - Removed dependencies on CONQUEST - DICOM handler could now read whichever DICOM file - (PT,CT,DR,CR,US,MR... ) - -19.11.2009 - Stephanee Chauvie (DICOM-V09-02-03) - Changed DICOM Handler to read CT files coming from CONQUEST - DICOM server - -05.02.2009 - Pedro Arce (DICOM-V09-02-01) - Added report on dose per voxel. - Added warning for erroneous inclusion of development code in - release 9.2 (to be removed when fix will be included in patch). - -27.01.2009 - Gabriele Cosmo (DICOM-V09-02-00) - Use new class G4RegularNavigationHistory for counting of step - lengths in voxels of the regular structure. - -27.11.2008 - Pedro Arce (DICOM-V09-01-02) - Included G4PSDoseDeposit_RegNav to distribute dose along voxels, - including msc and energy loss corrections, for the case of - skipping voxel with equal materials when using regular - navigation - -21.07.2008 - Pedro Arce (DICOM-V09-01-01) - Bug fix in DicomNestedPhantomParameterisation in calculating the - 'copyNo', so that material assignment was wrong - Set default cut to 1 mm (with previous 1.E-3 mm too much time is - spent on physics and no improvement is seen with different - navigation options). - Corrected direction and position of primary particles so that - they traverse the DICOM voxels. - -22.01.2008 - Pedro Arce (DICOM-V09-01-00) - Do not use 'rindex' in DicomHandler class to avoid problems - on Windows. - -06.12.2007 - Pedro Arce - Added voxel colouring by material. Added possibility to use nested parameterisation - -05.12.2007 - Pedro Arce - Deep review on the input files and the way how the geometry is built. - Use of G4PhantomParameterisation and G4RegularNavigation. - -06.12.2005 - Gabriele Cosmo - Trivial changes for support of CLHEP-2.0.X series. - -29.11.2005 - Susanna Guatelli (DICOM-V07-01-00) - Documentation update - -12.06.2005 - Stephane Chauvie (DICOM-V07-00-01) - Added improvement by Akinori Kimura. - -03.05.2005 - John Allison - Replaced vis manager with G4VisExecutive. - -10.12.2004 - Maria Grazia Pia (DICOM-V06-02-02) - Update README to announce further improvements and fixes - by Akinori Kimura. - -3.12.2004 - Gabriele Cosmo (DICOM-V06-02-01) - Implemented migration to . - -13.5.2004 - Susanna Guatelli - updated compiler: gcc3.2.3 - -11.3.2003 - Susanna Guatelli - README changed - -6.2003 - Susanna Guatelli - First public release of the example +## 2025-04-24 Ben Morgan (DICOM-V11-03-00) +- Refactor DICOM examples into single project + - Build everything together for ease of use and demonstration + - Code/behaviour otherwise unchanged + - Documentation not yet updated pending review and testing with + newer DMCTK and HEAD versions. +- **All new `History` entries for must go in this file only** diff --git a/examples/extended/medical/DICOM/README b/examples/extended/medical/DICOM/README index 669e7d57ff..aa0c71c00d 100644 --- a/examples/extended/medical/DICOM/README +++ b/examples/extended/medical/DICOM/README @@ -1,334 +1,115 @@ -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -| DicomG4 | -+ + -| README | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -The DICOM application has been originally developed by the Geant4 users: -Louis Archambault,+Luc Beaulieu, ++Vincent Hubert-Tremblay. +# Geant4 DICOM Examples -+ Centre Hospitalier Universitaire de Quebec (CHUQ), -Hotel-Dieu de Quebec, departement de Radio-oncologie -11 cote du palais. Quebec, QC, Canada, G1R 2J6 -tel (418) 525-4444 #6720 -fax (418) 691 5268 -web : thomson.phy.ulaval.ca/phys_med +The DICOM applications were originally developed by the Geant4 users: \n +Louis Archambault,(1)Luc Beaulieu, (2)Vincent Hubert-Tremblay. -++ Université Laval, Québec (QC) Canada +- (1) Centre Hospitalier Universitaire de Quebec (CHUQ), \n +Hotel-Dieu de Quebec, departement de Radio-oncologie \n +11 cote du palais. Quebec, QC, Canada, G1R 2J6 \n +tel (418) 525-4444 #6720 \n +fax (418) 691 5268 \n +web : thomson.phy.ulaval.ca/phys_med \n +- (2) Universite Laval, Quebec (QC) Canada -And it has been deeply reviewed by Pedro Arce in December 2007. -Very small changes by Stephane Chauvie in January 2008. -Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. -Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file -Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 -Alexander Howard, Dec 2023: updated scorer to give correct voxel index for both regular and nested geometries +It has since been deeply reviewed by Pedro Arce in December 2007. \n +Very small changes by Stephane Chauvie in January 2008. \n +Stephane Chauvie, Oct 2009: changed Physics list; changes in DICOM read. \n +Stephane Chauvie and Andrea Armando; June 2010 adapted for reading whatever DICOM file \n +Jonathan Madsen, Nov 2013: updated DICOM to utilize multithreading now available in Geant4.10 \n -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@ @@@ -@@@ NEW DICOM READER BASED ON DCMTK @@@ -@@@ @@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -A new way to read DICOM files has been implemented since release 10.3, to avoid the often problems found by users when reading DICOM files. -It can also read RT structures in DICOM format as well as RT plans. -This utility uses the DCMTK (http://dicom.offis.de/dcmtk.php.en). +## Introduction +This example consists of the following applications: -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -@@@ @@@ -@@@ NEW DICOM HEAD PROJECT @@@ -@@@ @@@ -@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +- DICOM1 +- DICOM2 -A new DICOM Digital Head included by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. Available since Geant4 10.4. -The Digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., +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. + It uses the [DCMTK library](http://dicom.offis.de/dcmtk.php.en), which must be installed if you wish to use this capability. + - Requires DCMTK 3.6.1 or newer, with the `dcmrt` package available. + +Both application can optionally use the DICOM Digital Head developed by S. Guatelli (susanna@uow.edu.au) and V. Giacometti. +This digital model is documented in: Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. ---->1) Introduction - -This example serves first to convert a DICOM file to a simple ASCII file, where the Hounsfield numbers are converted to materials and densities so that it can be used by GEANT4. It serves also to create a GEANT4 geometry based on the DICOM file information using the G4PhantomParameterisation. - -You can find the phantom reproduced in the image PhantomCT.jpg. -In the application the phantom is placed on a table. - ----> 2a) Installation, OLD version: - - - A standard Geant4 example CMakeLists.txt is provided - - Configure via cmake with 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x /path/to/DICOM/source' then make - ----> 2b) Installation, NEW version (based on DCMTK): - -You have to download and install DCMTK, see http://dicom.offis.de/dcmtk.php.en . At least you need version 3.6.1 or newer; the important thing is that you make sure it contains the dcmrt package. -Then define the enviromental variable DCMTK_BASE_DIR to point to the directory where you have installed it. -And to run it, you have to add to the enviromental variable LD_LIBRARY_PATH the path ${DCMTK_BASE_DIR}/lib (i.e. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${DCMTK_BASE_DIR}/lib ) - - Then you have to set the enviromental variable DICOM_USE_DCMTK to 1. - - A standard Geant4 example GNUmakefile is provided, but have to uncomment the line - #DICOM_USE_DCMTK := true - - Compile it with 'make'/'gmake' - - - A standard Geant4 example CMakeLists.txt is provided - - Configure via cmake with - 'cmake -DGeant4_DIR=/path_to_geant4_install/lib/Geant4-x.x.x \ - -DDCMTK_DIR=/path_to_dcmtk_install /path/to/DICOM/source' -then make - ----> 2c) CMake installation and inheriting from DICOM: - - - Set the CMAKE_INSTALL_PREFIX (typically use the same install prefix as the Geant4 distribution) - - Install the project - - Installation will install libraries + DICOMConfig.cmake + other config files - - if DCMTK is enabled, will also install dicomReader library + icomReaderConfig.cmake and it's other config files - - In the new Geant4 application, add "find_package(DICOM REQUIRED)" to CMakeLists.txt - - (optionally) add "set(DICOM_DIR ${Geant4_DIR} CACHE PATH "Path to DICOM installation config files") to CMakeLists.txt - - add "include_directories(${DICOM_INCLUDE_DIRS}) and link target to ${DICOM_LIBRARIES} - - if DCMTK is enabled, DICOMConfig.cmake will include the DCMTK and dicomReader installations, i.e. there is not need for "find_package(dicomReader)" or "find_package(DCMTK)" - - ----> 3) Run the example: - - - To run, the environment variable G4LEDATA needs to be set, pointing to the low energy data base, and the G4LEVELGAMMADATA pointing to the PhotonEvaporation data base - - - batch mode: - - DICOM run.mac - - - interactive mode: - - DICOM - the file vis.mac is read in order to visualise the phantom with OpenGL, DAWN or VRML - - - Environment variables: - - DICOM_CHANGE_MATERIAL_DENSITY - - set to the minimum density difference before making a separate material - - e.g. if DenseBone is from > 1.496 to <= 1.654 and DICOM_CHANGE_MATERIAL_DENSITY=0.079 - then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 - - DICOM_PARTIAL_PARAM - - set to 1 to build the partial build instead of regular or nested construction (see section 9) - - DICOM_NESTED_PARAM - - set to 1 to build the nested construction (see section 9; overridden by DICOM_PARTIAL_PARAM) - - DICOM_NTHREADS - - To set the number of threads (when G4MULTITHREADED is defined via GEANT4_BUILD_MULTITHREADED=ON during Geant4 source build) - - Needs to be set to the number of desired threads, e.g. DICOM_NTHREADS=8 (default is 4 threads) - - DICOM_USE_HEAD - - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., - "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. - To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. - For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. - When using this option, - 1) export DICOM_USE_HEAD=1 - 2) export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project - or - export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. - 3) THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) - Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction - without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). - ----> 4) Metadata file: - -The old version of "Data.dat" is found in "Data.dat.old", when the project is configured with DICOM_USE_DCMTK=OFF, -"Data.dat.old" is copied into the binary directory at "Data.dat". - - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.old ${PROJECT_BINARY_DIR}/Data.dat - -The new version of "Data.dat" is found in "Data.dat.new", when the project is configured with DICOM_USE_DCMTK=ON, -"Data.dat.new" is copied into the binary directory as "Data.dat". - - i.e. cp ${PROJECT_SOURCE_DIR}/Data.dat.new ${PROJECT_BINARY_DIR}/Data.dat - ----> 4a) Metadata file, OLD version: - - The file Data.dat has the following information - - A line with the compression value (used only to create the .g4dcm and .g4dcmb, not to read it) - - A line with the number of files - - A line for each file name (to these names it will be added the suffix .dcm to read the DICOM files in their original format, and the suffix .g4dcm to read the text files that contain the DICOM information where the Hounsfield numbers have been converted to material and densities) - -In case you want to convert DICOM files to text files, it must have the following lines: - - The number of materials you want to use - - A line for each material describing its name and the upper bound of the density interval. The materials should be described in increasing order of density. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. - ----> 4b) Metadata file, NEW version (based on DCMTK): - -As for the previous version, a Data.dat file has to be defined to manage the conversion options. The format of this file is though quite different from the previous version. The format of this file is based on tags (similary to the ASCII geometry files). -The following tags should be used: - -:COMPRESSION level - -Where "level" is the number of voxels that will be merged into one in the X and Y dimen- -sions. The Hounsfield numbers of the voxels merged are averaged to give the -resulting value for the new voxel. -Example: -:COMPRESSION 4 // 4 X 4 voxels will be merged, so that the number of voxels in X and Y dimensions will be reduced by a factor 4 - -:FILE file_name -These are the list of files (one line per file) in DICOM format that will be treated. -They can be of modality CT, RTSTRUCT or RTPLAN (the code will automatically -detect its modality and treat it correspondingly). -Example: -:FILE 1.dcm -:FILE 2.dcm -:FILE 3.dcm - -:CT2D Hounsfield_number density -These sets of value pairs build the calibration curve (linearly interpolating between them). In other words, each Hounsfield number is given a material density using a function that is built interpolating between this list of value pairs. -Example: -:CT2D -5000 0. -:CT2D -1000 0.01 -:CT2D -400 0.602 -:CT2D 300 1.145 -:CT2D 2000 1.856 - -:MATE material_name upper_bound_of_material_Hounsfield_number_interval -This serves for the Hounsfield number to material name conversion. The voxels with a Hounsfield number between 0. and the first upper bound will be assigned to the first material, those with a Hounsfiled number between the first upper bound and the second upper bound will be assigned to the second material, etc. -Example: -:MATE G4_AIR -800 -:MATE G4_LUNG_ICRP -145 -:MATE G4_ADIPOSE_TISSUE_ICRP -60 -:MATE G4_WATER 0 - -Alternatively to the use of :MATE, you can use the :MATE_DENS -:MATE_DENS material_name upper_bound_of_material_density_interval -This serves for the material density to material name conversion. The voxels with a density between 0. and the first upper bound will be assigned to the first material, those with a density between the first upper bound and the second upper bound will be assigned to the second material, etc. -Example: -:MATE_DENS G4_AIR 0.207 -:MATE_DENS G4_LUNG_ICRP 0.919 -:MATE_DENS G4_ADIPOSE_TISSUE_ICRP 0.979 -:MATE_DENS G4_WATER 1.01 - -We recommend the use of :MATE instead of :MATE_DENS as this is the way is used more often in the literature. - -:FILE_OUT file_name -Name of output file containing the DICOM information in ASCII format - - ---->5) Conversion of Hounsfield numbers to materials: - -After reading the name of files from Data.dat, if a file .dcm is found, then it looks for the corresponding .g4dcm file and if not found creates it. -Each file corresponds to a Z slice. The Z slices will be merged at runtime to form a unique patient volume; therefore the different slices have to be contiguous in Z. - -The DICOM images pixel values represent CT (Hounsfield) numbers and they should be converted, first, to a given density and then to a material type. The relation between CT number and density is more or less linear. -The file CT2Density.dat contains the calibration curve to convert CT (Hounsfield) number to physical density -The assignment of material densities to materials is done following the information from the file Data.dat (see below). In this case we have used: - - ##################################################### - # Density Range Material # - #---------------------------------------------------# - # mg/cm3 - # - #---------------------------------------------------# - # [ 0. , 0.207 ) Air # - # [ 0.207 , 0.481 ) Lungs (inhale) # - # [ 0.481 , 0.919 ) Lungs (exhale) # - # [ 0.919 , 0.979 ) Adipose # - # [ 0.979 , 1.004 ) Breast # - # [ 1.004 , 1.043 ) Phantom # - # [ 1.043 , 1.109 ) Liver # - # [ 1.109 , 1.113 ) Muscle # - # [ 1.113 , 1.496 ) Trabecular Bone# - # [ 1.496 , 1.654 ] Dense Bone # - ##################################################### - -Data taken from the International Commission on Radiation Units and measurements (ICRU) report 46 was used to build the materials (lung, liver, breast, bones, ...). - -When using the Digital Head Phantom, the CT2Density.dat is not used. The conversion is performed directly in the Dicom Handler.cc - ---->6) Splitting materials in density intervals: - -In the class DicomDetectorConstruction, it is defined a density interval - - G4double densityDiff = 0.1; - -This means that the voxels of each material will be grouped in density intervals of 0.1 g/cm3 and a new material will be created for each group of voxels. - ---->7) Voxel colouring: - -The file Colormap.dat defines the colour that will be assigned to the voxels of each material. - ---->8) DICOM file formats: - -The DICOM files are converted to a simple text format. You may create your own file with the following format (see e.g. 14196616.g4dcm): - -- A line with the number of materials -- A line for each material with its index and name (the same name of materials that you construct as G4Material's) -- A line with the number of voxels in X, Y and Z -- A line with the minimum and maximum extension in X (mm) -- A line with the minimum and maximum extension in Y (mm) -- A line with the minimum and maximum extension in Z (mm) -- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material indices (one per voxel) -- A number of lines containing the nVoxelX*nVoxelY*nVoxelZ material densities (one per voxel) - -As commented before the DICOM files (.dcm) are assumed to describe one Z slice per file, and therefore the GEANT4 text files (.g4dcm) created from them have also one unique Z slice per file. Nevertheless if you create your own .g4dcm file you may include as many Z slices as desired. In any case you have to respect the rule that the Z slices must be contiguous. - -The same information is also used to fill a file in binary format, that contains the same information as the text format. Its name ends in .g4dcmb, instead of .g4dcm . - ---->9) Choosing different parameterisation/navigation options: - -There are four possible ways in GEANT4 to treat the navigation in regular voxelised volumes: - -- The 3D optimisation with G4SmartVoxel: a 3D grid is built, so that the location of voxels is fast, but it requires a lot of memory -- Using G4NestedParameterisation. The search is done hierarchically in X, Y and Z. It is fast and does not require big memory -- Using G4PhantomParameterisation/G4RegularNavigation: an special algorithm to navigate in regular voxelised geometries (see GEANT4 doc). This is the fastest way without any extra memory requirement (and it is the default in this example). It includes an option (default) to skip frontiers between voxels when they have the same material. When using this option at each step the energy is all deposited in the last voxel; for properly distribution of the dose (=energy/volume) the G4PSDoseDeposit scorer can be used for regular (see (10) below) and G4PSDoseDeposit3D for nested parameterisation (see (11) below). - -Obsolete option: -- Use 1D optimisation in replica. It will be very slow because each time a track exits a voxel it has to loop to all other voxels in a 2D slide in order to locate which one it will enter. - -You can select amongst the four options in the following way: - -- By default the example will run with G4RegularNavigation - -- To use the first option at RegularDicomDetectorConstruction.cc you must set - - patient_phys->SetRegularStructureId(0); - -- To use the second option (Nested Parameterisation) you must set the enviromental variable DICOM_NESTED_PARAM to 1 - -- To use the final, obsolete 1D-option, apart from the change above at RegularDicomDetectorConstruction.cc you need to replace (i.e. use kUndefined) - - G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, - kUndefined, nVoxelX*nVoxelY*nVoxelZ, param); -by - G4PVParameterised * patient_phys = new G4PVParameterised("Patient",voxel_logic,container_logic, - kXAxis, nVoxelX*nVoxelY*nVoxelZ, param); - - Note also you must *not* set the enviromental variable DICOM_NESTED_PARAM. - - ---->10) Calculating dose in phantom voxels for regular navigation - -As mentioned above the regular navigation has the option to keip voxel frontiers when two voxels share the same material, what can make the CPU time several times smaller. But this option makes that all energy deposited is computed in the last voxel, instead of distributing it along the voxels traversed. To properly calculate the dose in each voxel the G4PSDoseDeposit scorer can be used. - -It takes into account the fact that, when the particle travels through the voxels it looses energy and therefore the energy lost per length (dEdx) is bigger and also the effect of the multiple scattering is bigger. -The algorithm to make this correction is an iterative one, as the step length increase due multiple scattering (that converts the geometrical step length in what we will call the true step length) and the energy loss are correlated. -It works in the folloing way: first the total true step length is distributed among the voxels proportionally to their geometrical step length; with these values it is calculated one voxel after another the value of dEdx and then the value of the kinetic energy at the entrance of each voxel; with these values it is calculated the geometrical to true step corrections due to multiple scattering for each voxel; finally these new values are used to recalculate the energy lost in each voxel. It has been demonstrated for dose in a water phantom and in a real phantom that the two-step iteration described is enough to reproduce the dose calcualted when no skipping of voxel frontiers is done. - -This scorer is implemented in this examples if the regular navigation option is -chosen. It is triggered at the method RegularDicomDetectorConstruction::ConstructPhantom() by the call - -SetScorer(voxel_logic); - ---->11) Calculating dose in phantom voxels for nested parameterisation - -For the nested parameterisation the geometry comprises replicas in X and Y which are then parameterised in Z. This means that to get the correct voxel idendification the replica depth has to be taken into account. The G4PSDoseDeposit3D scorers uses a fixed algorithm to calculate the voxel ID, according to the number -of voxels in each axes and the associated replica depth. G4PSDoseDeposit3D("DoseDeposit", fNoVoxelsZ, fNoVoxelsY, fNoVoxelsX, 0, 2, 1) contains the number of voxels at the top level (0) and then two daughter levels down for the Y-voxels and one depth down for X. - ---->12) Output -dicom.out is produced running the macro file run.mac. It has 2 columns: the first is the number of -voxel (ordered in x,y,z) and the second the dose there deposited (in Gy) -It is produced, as an example, with a compression value of 32 - - ---->13) Partial phantom -It is possible to create a partial phantom, that is the intersection of a phantom with a volume. You may define the volume with the command - -/dicom/intersectWithUserVolume 0. 0. 0. 45.*deg 0. 0. TUBE 0. 150. 100. - -where the first three arguments are its position, its second three arguments are the rotation around the global X, Y and Z axis and the rest of the parameters are the same that you use to build a solid using the ASCII geometry format - -Alternatively you can intersect the phantom with an existing Geant4 volume with the command - -/dicom/intersectWithG4Volume VOLUME_NAME - -The job will create an ASCII file names "phantom.g4pdcm" containing the partial phantom. To read this file all what is needed is to set the enviromental variable DICOM_PARTIAL_PARAM to 1 - ---->14) Visualisation - -The Geant4 drivers are not meant for visualizing millions of voxel and visualising the DICOM geometries can be very computationally demanding. -The users may want to visualise each DICOM slice separately or use higher compression values when visualising a part of DICOM project. - - - +## Compiling the libraries and applications + +A standard Geant4 example `CMakeLists.txt` is provided, and thus the project may be configured and built using: + +``` +$ cmake -DCMAKE_PREFIX_PATH=/path/to/geant4-install -S. -Bbuild +$ cmake --build ./build +``` + +Note that this assumes you run `cmake` in the top level `DICOM` directory. + +To build the applications and libraries with support for reading DICOM files using DCMTK, run `cmake` as + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH=/path/to/geant4-install \ + -DG4DICOM_USE_DCMTK=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +This requires that you have DCMTK v3.6.1 or newer with the `dcmrt` package installed. If CMake has problems +located the install of DCMTK, add its install path to the `CMAKE_PREFIX_PATH` argument, e.g. + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH="/path/to/geant4-install;/path/to/dcmtk-install" \ + -DG4DICOM_USE_DCMTK=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +To enable use of the DICOM Digital Head model, run cmake as: + +``` +$ cmake \ + -DCMAKE_PREFIX_PATH=/path/to/geant4-install \ + -DG4DICOM_USE_HEAD=ON \ + -S. -Bbuild +$ cmake --build ./build +``` + +This requires a working network connection in order to download the model from the Geant4 website. + + +## Running the applications + +Both applications can have their runtime behaviour configured using a series on environment variables: + +- `DICOM_CHANGE_MATERIAL_DENSITY` + - set to the minimum density difference before making a separate material + - e.g. if DenseBone is from > 1.496 to <= 1.654 and `DICOM_CHANGE_MATERIAL_DENSITY=0.079` + then DenseBone would be separated into DenseBone > 1.496 to <= 1.575 and DenseBone > 1.575 to <= 1.654 +- `DICOM_PARTIAL_PARAM` + - set to 1 to build the partial build instead of regular or nested construction (see section 9) +- `DICOM_NESTED_PARAM` + - set to 1 to build the nested construction (see section 9; overridden by `DICOM_PARTIAL_PARAM`) +- `DICOM_NTHREADS` + - To set the number of threads (only when Geant4 itself has been built with multithreading capability) + - Needs to be set to the number of desired threads, e.g. `DICOM_NTHREADS=8` (default is 4 threads) +- `DICOM_USE_HEAD` + - set to 1 (export DICOM_USE_HEAD=1) to use the digital head phantom documented in Giacometti, V., Guatelli, S., Bazalova-Carter, M., Rosenfeld, A.B., Schulte, R.W., + "Development of a high resolution voxelised head phantom for medical physics applications", (2017) Physica Medica, 33, pp. 182-188. + To use this option, the DICOM library needs to be downloaded. This is distributed with the other Geant4 data files on the Geant4 Download site. + For convenience of use, it is suggested to have the DICOM library directory in the DICOM Geant4 extended example or in the directory containing the DICOM executable. + When using this option, + 1) export DICOM_USE_HEAD=1 + 2) export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD - to use the full DICOM HEAD project + or + export DICOM_PATH=path/to/DICOM1.1/DICOM_HEAD_TEST - to use 4 DICOM files of the DICOM HEAD project. This option is useful for testing purposes. + 3) THE DICOM_HEAD uses the OLD version of the Metadata files (see point 4a) + Note 1: The Conversion of Hounsfield numbers to materials (point 5) is not used. The material is associated to the voxel in the Detector Construction + without using the calibration curve.This happens because the DICOM project has already been segmented and cleaned from artefacts (see publication). + +Detailed information on the capabilities of, and how to run, the `DICOM1` and `DICOM2` applications +are available in the [DICOM1 README](DICOM1/README) and [DICOM2 README](DICOM2/README) respectively. diff --git a/examples/extended/medical/DICOM/cmake/DICOMConfig.cmake.in b/examples/extended/medical/DICOM/cmake/DICOMConfig.cmake.in deleted file mode 100644 index c9d25df312..0000000000 --- a/examples/extended/medical/DICOM/cmake/DICOMConfig.cmake.in +++ /dev/null @@ -1,30 +0,0 @@ -set(@PROJECT_NAME@_VERSION @Geant4_VERSION@) - -@PACKAGE_INIT@ - -set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") - -check_required_components(@PROJECT_NAME@) - -include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_TARGETS_FILE@) - -set(@PROJECT_NAME@_INCLUDE_DIRS ${@PROJECT_NAME@_INCLUDE_DIR}) -set(@PROJECT_NAME@_LIBRARIES DICOM-library@_geant4_lib_use_suffix@) - -set(DICOM_USE_DCMTK @DICOM_USE_DCMTK@) -set(DICOM_USE_HEAD @DICOM_USE_HEAD@) - -if(DICOM_USE_DCMTK) - set(dicomReader_DIR ${CMAKE_CURRENT_LIST_DIR} - CACHE PATH "Path to dicomReader configuration") - find_package(dicomReader @Geant4_VERSION@ EXACT REQUIRED) - list(APPEND DICOM_INCLUDE_DIRS ${dicomReader_INCLUDE_DIRS}) - list(APPEND DICOM_LIBRARIES ${dicomReader_LIBRARIES}) - add_definitions(-DG4_DCMTK) -endif(DICOM_USE_DCMTK) - -if(DICOM_USE_HEAD) - add_definitions(-DDICOM_USE_HEAD) -endif(DICOM_USE_HEAD) - -set(@PROJECT_NAME@_FOUND ON) diff --git a/examples/extended/medical/DICOM/cmake/DownloadDICOMData.cmake b/examples/extended/medical/DICOM/cmake/DownloadDICOMData.cmake index d79a84ae37..a3bbb86212 100644 --- a/examples/extended/medical/DICOM/cmake/DownloadDICOMData.cmake +++ b/examples/extended/medical/DICOM/cmake/DownloadDICOMData.cmake @@ -24,8 +24,7 @@ if (EXISTS "${DICOMDATA_LOCAL_ROOTDIR}") message(STATUS "DICOM example: DICOM_HEAD data found, skipping download") message(STATUS "Installing '${DICOMDATA_LOCAL_ROOTDIR}' to '${DICOMDATA_INSTALL_DIR}'...") - install(DIRECTORY ${DICOMDATA_LOCAL_ROOTDIR} - DESTINATION ${DICOMDATA_INSTALL_DIR}) + install(DIRECTORY ${DICOMDATA_LOCAL_ROOTDIR} DESTINATION ${DICOMDATA_INSTALL_DIR}) return() endif() @@ -61,5 +60,4 @@ endif() message(STATUS "Installing '${DICOMDATA_LOCAL_ROOTDIR}' to '${DICOMDATA_INSTALL_DIR}'...") -install(DIRECTORY ${DICOMDATA_LOCAL_ROOTDIR} - DESTINATION ${DICOMDATA_INSTALL_DIR}) +install(DIRECTORY ${DICOMDATA_LOCAL_ROOTDIR} DESTINATION ${DICOMDATA_INSTALL_DIR}) diff --git a/examples/extended/medical/DICOM/dicomReader/CMakeLists.txt b/examples/extended/medical/DICOM/dicomReader/CMakeLists.txt deleted file mode 100644 index 026836b705..0000000000 --- a/examples/extended/medical/DICOM/dicomReader/CMakeLists.txt +++ /dev/null @@ -1,118 +0,0 @@ -#---------------------------------------------------------------------------- -# Setup the project -cmake_minimum_required(VERSION 3.16...3.27) -project(dicomReader) -# for shared library -set(CMAKE_POSITION_INDEPENDENT_CODE ON) -#set(CMAKE_MACOSX_RPATH OFF) - -#---------------------------------------------------------------------------- -# Find Geant4 package, no UI and Vis drivers activated -# -find_package(Geant4 REQUIRED) - -#---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# -include(${Geant4_USE_FILE}) -include("${PROJECT_SOURCE_DIR}/cmake/DICOMUtilities.cmake") - -#---------------------------------------------------------------------------- -# Find DCMTK installation -# -find_package(DCMTK REQUIRED) -add_definitions(-DG4_DCMTK) - -#---------------------------------------------------------------------------- -# Locate sources and headers for this project -# -include_directories(${PROJECT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR} - ${DCMTK_INCLUDE_DIRS}) - -file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - -#---------------------------------------------------------------------------- -# Add the library -# -dicom_build_library( - BUILD_SHARED ${Geant4_shared_FOUND} - BUILD_STATIC ${Geant4_static_FOUND} - OUTPUT_NAME dicomReader - TARGET_NAME dicomReader - SOURCES ${headers} ${sources} - LINK_LIBRARIES ${Geant4_LIBRARIES} ${DCMTK_LIBRARIES}) - -#---------------------------------------------------------------------------- -# Configuration -# -include(CMakePackageConfigHelpers) -include(GNUInstallDirs) - -#---------------------------------------------------------------------------- -# Configuration for build tree -# -export(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES} - FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Build.cmake) - -set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Build.cmake) -set(PACKAGE_INCLUDE_INSTALL_DIR ${PROJECT_SOURCE_DIR}/include) -set(PACKAGE_INIT -"macro(set_and_check _var _file) - set(\${_var} \"\${_file}\") - if(NOT EXISTS \"\${_file}\") - message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\") - endif() -endmacro() - -macro(check_required_components _NAME) - foreach(comp \${\${_NAME}_FIND_COMPONENTS}) - if(NOT \${_NAME}_\${comp}_FOUND) - if(\${_NAME}_FIND_REQUIRED_\${comp}) - set(\${_NAME}_FOUND FALSE) - endif() - endif() - endforeach() -endmacro() -") - -configure_file( - ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake @ONLY) - -write_basic_package_version_file( - ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${Geant4_VERSION} - COMPATIBILITY SameMajorVersion ) - -unset(PACKAGE_INIT) - -#---------------------------------------------------------------------------- -# Install the library to 'lib' directory under CMAKE_INSTALL_PREFIX -# -set(${PROJECT_NAME}_DIR ${CMAKE_INSTALL_LIBDIR}/Geant4-${Geant4_VERSION} CACHE PATH "${PROJECT_NAME} installation") - -install(FILES ${headers} DESTINATION include/${PROJECT_NAME}) -install(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES} - DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT ${PROJECT_NAME}Targets) -install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${${PROJECT_NAME}_DIR}) - -set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Targets.cmake) -set(INCLUDE_INSTALL_DIR include/${PROJECT_NAME}) -set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) - -configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${${PROJECT_NAME}_DIR} - PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR) - -write_basic_package_version_file( - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${Geant4_VERSION} - COMPATIBILITY SameMajorVersion ) - -install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake - ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${${PROJECT_NAME}_DIR} ) diff --git a/examples/extended/medical/DICOM/dicomReader/GNUmakefile b/examples/extended/medical/DICOM/dicomReader/GNUmakefile deleted file mode 100644 index 31d4f79e4b..0000000000 --- a/examples/extended/medical/DICOM/dicomReader/GNUmakefile +++ /dev/null @@ -1,46 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for common repository examples module. -# -------------------------------------------------------------- - -name := dicomReader - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/pii/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/run/include -CPPFLAGS += -I$(G4INCLUDE) - -# DCMTK support -# - -#EXTRALIBS = -L$(DCMTK_BASE_DIR)/lib -ldcmpstat -ldcmwlm -lijg8 -ldcmdata -ldcmjpeg -ldcmqrdb -li2d -loflog -ldcmdsig -ldcmjpls -ldcmsr -lijg12 -lofstd -ldcmimage -ldcmnet -ldcmtls -lijg16 -ldcmjpeg -ldcmrt -lcharls -ldcmimgle -lpthread -lpng - -#CPPFLAGS += -DG4_DCMTK -DHAVE_CONFIG_H -DUSE_NULL_SAFE_OFSTRING -DWITH_ARITHMETIC_PATCH -D_REENTRANT -D_XOPEN_SOURCE_EXTENDED -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_BSD_COMPAT -D_OSF_SOURCE -D_POSIX_C_SOURCE=199506L -fPIC -CPPFLAGS += -DG4_DCMTK - -CPPFLAGS += -I$(DCMTK_BASE_DIR)/include - -include $(G4INSTALL)/config/common.gmk diff --git a/examples/extended/medical/DICOM/dicomReader/cmake/DICOMUtilities.cmake b/examples/extended/medical/DICOM/dicomReader/cmake/DICOMUtilities.cmake deleted file mode 100644 index c145c4d102..0000000000 --- a/examples/extended/medical/DICOM/dicomReader/cmake/DICOMUtilities.cmake +++ /dev/null @@ -1,65 +0,0 @@ -# Utility macros for DICOM example -# called from the DICOM example CMakeLists.txt -# - -# - Include guard -if(__dicomutilities_isloaded) - return() -endif() -set(__dicomutilities_isloaded YES) - -# - for cmake_parse_arguments -include(CMakeParseArguments) - -macro(DICOM_BUILD_LIBRARY) - - set(_options ) # options - set(_onevalue BUILD_SHARED # single-value - BUILD_STATIC - OUTPUT_NAME - TARGET_NAME) - set(_multival SOURCES # multi-value - LINK_LIBRARIES - COMPILE_DEFINITIONS) - - cmake_parse_arguments( - LIBRARY "${_options}" "${_onevalue}" "${_multival}" ${ARGN}) - - # static library - if(LIBRARY_BUILD_STATIC) - # add static library - add_library(${LIBRARY_TARGET_NAME}-static STATIC ${LIBRARY_SOURCES}) - # link - target_link_libraries(${LIBRARY_TARGET_NAME}-static ${LIBRARY_LINK_LIBRARIES}) - # properties - set_target_properties(${LIBRARY_TARGET_NAME}-static PROPERTIES - OUTPUT_NAME ${LIBRARY_OUTPUT_NAME} - POSITION_INDEPENDENT_CODE OFF) - # On Windows, *must distinguish archive from DLL import lib (and other outputs) - if(WIN32) - set_target_properties(${LIBRARY_TARGET_NAME}-static PROPERTIES - OUTPUT_NAME ${LIBRARY_OUTPUT_NAME}-static) - endif() - # append this to list of libraries to install - list(APPEND ${PROJECT_NAME}_INSTALL_LIBRARIES ${LIBRARY_TARGET_NAME}-static) - endif(LIBRARY_BUILD_STATIC) - - # shared library - if(LIBRARY_BUILD_SHARED) - # add shared - add_library(${LIBRARY_TARGET_NAME} SHARED ${LIBRARY_SOURCES}) - # link - target_link_libraries(${LIBRARY_TARGET_NAME} ${LIBRARY_LINK_LIBRARIES}) - # properties - set_target_properties(${LIBRARY_TARGET_NAME} PROPERTIES - OUTPUT_NAME ${LIBRARY_OUTPUT_NAME} - POSITION_INDEPENDENT_CODE ON - WINDOWS_EXPORT_ALL_SYMBOLS ON) - # append this to list of libraries to install - list(APPEND ${PROJECT_NAME}_INSTALL_LIBRARIES ${LIBRARY_TARGET_NAME}) - # cleanup - endif(LIBRARY_BUILD_SHARED) - - add_library(${PROJECT_NAME}::library ALIAS ${LIBRARY_TARGET_NAME}${_geant4_lib_use_suffix}) - -endmacro(DICOM_BUILD_LIBRARY) diff --git a/examples/extended/medical/DICOM/dicomReader/cmake/dicomReaderConfig.cmake.in b/examples/extended/medical/DICOM/dicomReader/cmake/dicomReaderConfig.cmake.in deleted file mode 100644 index 5db29e2b9c..0000000000 --- a/examples/extended/medical/DICOM/dicomReader/cmake/dicomReaderConfig.cmake.in +++ /dev/null @@ -1,16 +0,0 @@ -set(FOO_VERSION @Geant4_VERSION@) - -@PACKAGE_INIT@ - -set_and_check(dicomReader_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") - -check_required_components(dicomReader) - -include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_TARGETS_FILE@) - -find_package(DCMTK REQUIRED) - -set(dicomReader_INCLUDE_DIRS ${dicomReader_INCLUDE_DIR} ${DCMTK_INCLUDE_DIRS}) -set(dicomReader_LIBRARIES dicomReader@_geant4_lib_use_suffix@ ${DCMTK_LIBRARIES}) - -set(dicomReader_FOUND ON) diff --git a/examples/extended/medical/DICOM/run.out b/examples/extended/medical/DICOM/run.out index 55cccb94e8..48beb846db 100644 --- a/examples/extended/medical/DICOM/run.out +++ b/examples/extended/medical/DICOM/run.out @@ -1,1118 +1 @@ -Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... - - ############################################ - !!! WARNING - FPE detection is activated !!! - ############################################ - - - ################################ - !!! G4Backtrace is activated !!! - ################################ - - -************************************************************** - Geant4 version Name: geant4-11-03-patch-02 (25-April-2025) - Copyright : Geant4 Collaboration - References : NIM A 506 (2003), 250-303 - : IEEE-TNS 53 (2006), 270-278 - : NIM A 835 (2016), 186-225 - WWW : http://geant4.org/ -************************************************************** - -3 test file 1.g4dcm -3 test file 2.g4dcm -3 test file 3.g4dcm - ReadMaterialIndices 10 -<<< Geant4 Physics List simulation engine: Shielding -<<< (Note that Shielding and Shielding_HP are equivalent!) -Default materials of the DICOM Extended examples have been used - DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm - DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm - DicomPhantomZSliceHeader reading number of materials 10 - Number of voxels 128 128 1 - Extension in X -196 196 - Extension in Y -196 196 - Extension in Z 80 85 - DicomDetectorConstruction::ReadPhantomDataFile opening file 2.g4dcm - DicomDetectorConstruction::ReadPhantomDataFile opening file 2.g4dcm - DicomPhantomZSliceHeader reading number of materials 10 - Number of voxels 128 128 1 - Extension in X -196 196 - Extension in Y -196 196 - Extension in Z 85 90 - DicomDetectorConstruction::ReadPhantomDataFile opening file 3.g4dcm - DicomDetectorConstruction::ReadPhantomDataFile opening file 3.g4dcm - DicomPhantomZSliceHeader reading number of materials 10 - Number of voxels 128 128 1 - Extension in X -196 196 - Extension in Y -196 196 - Extension in Z 90 95 - fNoVoxelsX 128 fVoxelHalfDimX 1.53125 - fNoVoxelsY 128 fVoxelHalfDimY 1.53125 - fNoVoxelsZ 3 fVoxelHalfDimZ 2.5 - totalPixels 49152 - placing voxel container volume at (0,0,87.5) -DicomRegularDetectorConstruction::ConstructPhantom - SET SCORER : VoxelLogical - CONSTRUCT SD AND FIELD - - hInelastic Shielding : threshold between BERT and FTFP is over the interval - for pions : 3 to 6 GeV - for kaons : 3 to 6 GeV - for proton : 3 to 6 GeV - for neutron : 3 to 6 GeV - -@@@ G4ParticleHPInelasticData instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1 -Visualization Manager instantiating with verbosity "warnings (3)"... -Visualization Manager initialising... -Registering graphics systems... - -You have successfully registered the following graphics systems. -Registered graphics systems are: - ASCIITree (ATree) - DAWNFILE (DAWNFILE) - G4HepRepFile (HepRepFile) - RayTracer (RayTracer) - VRML2FILE (VRML2FILE) - gMocrenFile (gMocrenFile) - TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) - OpenGLImmediateQt (OGLIQt, OGLI) - OpenGLStoredQt (OGLSQt, OGL, OGLS) - OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) - OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) - OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) - OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) - RayTracerX (RayTracerX) - 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_ZB (TSG_QT_ZB, TSGQtZB) -You may choose a graphics system (driver) with a parameter of -the command "/vis/open" or "/vis/sceneHandler/create", -or you may omit the driver parameter and choose at run time: -- by argument in the construction of G4VisExecutive -- by environment variable "G4VIS_DEFAULT_DRIVER" -- by entry in "~/.g4session" -- by build flags. -- Note: This feature is not allowed in batch mode. -For further information see "examples/basic/B1/exampleB1.cc" -and "vis.mac". - -Registering model factories... - -You have successfully registered the following model factories. -Registered model factories: - generic - drawByAttribute - drawByCharge - drawByOriginVolume - drawByParticleID - drawByEncounteredVolume - -Registered models: - None - -Registered filter factories: - attributeFilter - chargeFilter - originVolumeFilter - particleFilter - encounteredVolumeFilter - -Registered filters: - None - -You have successfully registered the following user vis actions. -Run Duration User Vis Actions: none -End of Event User Vis Actions: none -End of Run User Vis Actions: none - -Some /vis commands (optionally) take a string to specify colour. -"/vis/list" to see available colours. -/tracking/verbose 0 -/run/verbose 1 -/event/verbose 0 -/random/setDirectoryName . -/random/setSavingFlag 1 -/run/initialize -/run/beamOn 100 -G4RunManagerKernel -- G4ScoreSplittingProcess is appended to all particles. -======================================================================= -====== Electromagnetic Physics Parameters ======== -======================================================================= -LPM effect enabled 1 -Enable creation and use of sampling tables 0 -Apply cuts on all EM processes 0 -Use combined TransportationWithMsc Disabled -Use general process 1 -Enable linear polarisation for gamma 0 -Enable photoeffect sampling below K-shell 1 -Enable sampling of quantum entanglement 0 -X-section factor for integral approach 0.8 -Min kinetic energy for tables 100 eV -Max kinetic energy for tables 100 TeV -Number of bins per decade of a table 7 -Verbose level 1 -Verbose level for worker thread 0 -Bremsstrahlung energy threshold above which - primary e+- is added to the list of secondary 100 TeV -Bremsstrahlung energy threshold above which primary - muon/hadron is added to the list of secondary 100 TeV -Positron annihilation at rest model SimplePositronium -Enable 3 gamma annihilation on fly 0 -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 -Livermore data directory epics_2017 -======================================================================= -====== Ionisation Parameters ======== -======================================================================= -Step function for e+- (0.2, 1 mm) -Step function for muons/hadrons (0.2, 0.1 mm) -Step function for light ions (0.2, 0.1 mm) -Step function for general ions (0.2, 0.1 mm) -Lowest e+e- kinetic energy 1 keV -Lowest muon/hadron kinetic energy 1 keV -Use ICRU90 data 0 -Fluctuations of dE/dx are enabled 1 -Type of fluctuation model for leptons and hadrons Urban -Use built-in Birks satuaration 0 -Build CSDA range enabled 0 -Use cut as a final range enabled 0 -Enable angular generator interface 0 -Max kinetic energy for CSDA tables 1 GeV -Max kinetic energy for NIEL computation 0 eV -Linear loss limit 0.01 -Read data from file for e+e- pair production by mu 0 -======================================================================= -====== Multiple Scattering Parameters ======== -======================================================================= -Type of msc step limit algorithm for e+- 1 -Type of msc step limit algorithm for muons/hadrons 0 -Msc lateral displacement for e+- enabled 1 -Msc lateral displacement for muons and hadrons 0 -Urban msc model lateral displacement alg96 1 -Range factor for msc step limit for e+- 0.04 -Range factor for msc step limit for muons/hadrons 0.2 -Geometry factor for msc step limitation of e+- 2.5 -Safety factor for msc step limit for e+- 0.6 -Skin parameter for msc step limitation of e+- 1 -Lambda limit for msc step limit for e+- 1 mm -Use Mott correction for e- scattering 0 -Factor used for dynamic computation of angular - limit between single and multiple scattering 1 -Fixed angular limit between single - and multiple scattering 3.1416 rad -Upper energy limit for e+- multiple scattering 100 MeV -Type of electron single scattering model 0 -Type of nuclear form-factor 1 -Screening factor 1 -======================================================================= -====== Atomic Deexcitation Parameters ======== -======================================================================= -Fluorescence enabled 1 -Directory in G4LEDATA for fluorescence data files fluor -Auger electron cascade enabled 1 -PIXE atomic de-excitation enabled 0 -De-excitation module ignores cuts 1 -Type of PIXE cross section for hadrons Empirical -Type of PIXE cross section for e+- Livermore -======================================================================= - -### === Deexcitation model UAtomDeexcitation is activated for 1 region: - DefaultRegionForTheWorld 1 1 0 -### === Auger flag: 1 -### === Ignore cuts flag: 1 - -phot: for gamma SubType=12 BuildTable=0 - LambdaPrime table from 200 keV to 100 TeV in 61 bins - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo - -compt: for gamma SubType=13 BuildTable=1 - Lambda table from 100 eV to 1 MeV, 7 bins/decade, spline: 1 - LambdaPrime table from 1 MeV to 100 TeV in 56 bins - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Klein-Nishina : Emin= 0 eV Emax= 100 TeV - -conv: for gamma SubType=14 BuildTable=1 - Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - BetheHeitlerLPM : Emin= 0 eV Emax= 100 TeV ModifiedTsai - -Rayl: for gamma SubType=11 BuildTable=1 - Lambda table from 100 eV to 150 keV, 7 bins/decade, spline: 0 - LambdaPrime table from 150 keV to 100 TeV in 62 bins - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator - -msc: for e- SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV - StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm - WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV - StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm - -eIoni: for e- XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MollerBhabha : Emin= 0 eV Emax= 100 TeV - -eBrem: for e- XStype:4 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai - eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai - -CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 - Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 100 MeV Emax= 100 TeV - -msc: for e+ SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV - StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm - WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV - StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm - -eIoni: for e+ XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MollerBhabha : Emin= 0 eV Emax= 100 TeV - -eBrem: for e+ XStype:4 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai - eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai - -annihil: for e+ XStype:2 SubType=5 AtRestModel:Simple BuildTable=0 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eplus2gg : Emin= 0 eV Emax= 100 TeV - -CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 - Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 100 MeV Emax= 100 TeV - -msc: for proton SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for proton XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 100 TeV - -hBrems: for proton XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for proton XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 17x1001 from 7.50618 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 - Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for GenericIon SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -ionIoni: for GenericIon XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 100 TeV -====================================================================== -====== Radioactive Decay Physics Parameters ======= -====================================================================== -min MeanLife (from G4NuclideTable) 1 ns -Max life time (from G4DeexPrecoParameters) 1000 ps -Internal e- conversion flag 1 -Stored internal conversion coefficients 1 -Enabled atomic relaxation mode 1 -Enable correlated gamma emission 0 -Max 2J for sampling of angular correlations 10 -Atomic de-excitation enabled 1 -Auger electron emission enabled 1 -Check EM cuts disabled for atomic de-excitation 1 -Use Bearden atomic level energies 0 -Use ANSTO fluorescence model 0 -Threshold for very long decay time at rest 1 y -====================================================================== - -msc: for alpha SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -ionIoni: for alpha XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - BraggIon : Emin= 0 eV Emax=7.9452 MeV - BetheBloch : Emin=7.9452 MeV Emax= 100 TeV - -msc: for anti_proton SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for anti_proton XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 100 TeV - -hBrems: for anti_proton XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for anti_proton XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 17x1001 from 7.50618 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 - Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for kaon+ SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for kaon+ XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax=1.05231 MeV - BetheBloch : Emin=1.05231 MeV Emax= 100 TeV - -hBrems: for kaon+ XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for kaon+ XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 18x1001 from 3.94942 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 - Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for kaon- SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for kaon- XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax=1.05231 MeV - BetheBloch : Emin=1.05231 MeV Emax= 100 TeV - -hBrems: for kaon- XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for kaon- XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 18x1001 from 3.94942 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 - Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for mu+ SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -muIoni: for mu+ XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 200 keV - MuBetheBloch : Emin= 200 keV Emax= 100 TeV - -muBrems: for mu+ XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -muPairProd: for mu+ XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 21x1001 from 0.85 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 - Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for mu- SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -muIoni: for mu- XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 200 keV - MuBetheBloch : Emin= 200 keV Emax= 100 TeV - -muBrems: for mu- XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -muPairProd: for mu- XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 21x1001 from 0.85 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 - Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -======================================================= -====== ParticleHP Physics Parameters ======== -======================================================= - Use only photo-evaporation 0 - Skip missing isotopes 0 - Neglect Doppler 0 - Do not adjust final state 0 - Produce fission fragments 1 - Use WendtFissionModel 0 - Use NRESP71Model 0 - Use DBRC 0 - PHP use Poisson 0 - PHP check 1 - CHECK HP NAMES 0 - Enable DEBUG 0 - Use probability tables from -======================================================= - -@@@ G4ParticleHPInelastic instantiated for particle neutron/n data directory is /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic - -msc: for pi+ SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for pi+ XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax=297.505 keV - BetheBloch : Emin=297.505 keV Emax= 100 TeV - -hBrems: for pi+ XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for pi+ XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 20x1001 from 1.11656 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 - Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -msc: for pi- SubType= 10 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV - StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm - -hIoni: for pi- XStype:3 SubType=2 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax=297.505 keV - BetheBloch : Emin=297.505 keV Emax= 100 TeV - -hBrems: for pi- XStype:1 SubType=3 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -hPairProd: for pi- XStype:1 SubType=4 - dE/dx and range tables from 100 eV to 100 TeV in 84 bins - Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - Sampling table 20x1001 from 1.11656 GeV to 100 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi - -CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 - Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 100 TeV - -==================================================================== - HADRONIC PROCESSES SUMMARY (verbose level 1) ------------------------------------------------------------------------ - Hadronic Processes for B- - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: B-Inelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for D- - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: D-Inelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for GenericIon - Process: ionElastic - Model: NNDiffuseElastic: 0 eV /n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: ionInelastic - Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n - Model: QMDModel: 100 MeV/n ---> 6 GeV/n - Model: FTFP: 5.99 GeV/n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: RadioactiveDecay ------------------------------------------------------------------------ - Hadronic Processes for He3 - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: He3Inelastic - Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n - Model: QMDModel: 100 MeV/n ---> 6 GeV/n - Model: FTFP: 5.99 GeV/n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV ------------------------------------------------------------------------ - Hadronic Processes for alpha - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: alphaInelastic - Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n - Model: QMDModel: 100 MeV/n ---> 6 GeV/n - Model: FTFP: 5.99 GeV/n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV ------------------------------------------------------------------------ - Hadronic Processes for anti_He3 - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n - Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_He3Inelastic - Model: FTFP: 0 eV /n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_alpha - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n - Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_alphaInelastic - Model: FTFP: 0 eV /n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_deuteron - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n - Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_deuteronInelastic - Model: FTFP: 0 eV /n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest -------------------------------------------------------------------------- - Hadronic Processes for anti_hypertriton - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_lambda - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: anti_lambdaInelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_neutron - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100.1 MeV - Model: AntiAElastic: 100 MeV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_neutronInelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_proton - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100.1 MeV - Model: AntiAElastic: 100 MeV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_protonInelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for anti_triton - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n - Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: anti_tritonInelastic - Model: FTFP: 0 eV /n ---> 100 TeV/n - Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV - Process: hFritiofCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for deuteron - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: dInelastic - Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n - Model: QMDModel: 100 MeV/n ---> 6 GeV/n - Model: FTFP: 5.99 GeV/n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV ------------------------------------------------------------------------ - Hadronic Processes for e+ - Process: positronNuclear - Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for e- - Process: electronNuclear - Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for gamma - Process: photonNuclear - Model: GammaNPreco: 0 eV ---> 200 MeV - Model: BertiniCascade: 199 MeV ---> 6 GeV - Model: TheoFSGenerator: 3 GeV ---> 100 TeV - Cr_sctns: GammaNuclearXS: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for kaon+ - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: kaon+Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for kaon- - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: kaon-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: hBertiniCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for lambda - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: lambdaInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for mu+ - Process: muonNuclear - Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for mu- - Process: muonNuclear - Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV - Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 19.5 MeV ---> 100 TeV - Model: NeutronHPElastic: 0 eV ---> 20 MeV - Cr_sctns: NeutronHPElasticXS: 0 eV ---> 20 MeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 19.9 MeV ---> 6 GeV - Model: NeutronHPInelastic: 0 eV ---> 20 MeV - Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV - Cr_sctns: JENDLHEInelasticCrossSection: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: NeutronHPCapture: 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 - Process: nFission - Model: NeutronHPFission: 0 eV ---> 20 MeV - Model: G4LFission: 19.9 MeV ---> 100 TeV - Cr_sctns: NeutronHPFissionXS: 0 eV ---> 20 MeV - Cr_sctns: ZeroXS: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for pi+ - Process: hadElastic - Model: hElasticGlauber: 0 eV ---> 100 TeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV - Process: pi+Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for pi- - Process: hadElastic - Model: hElasticGlauber: 0 eV ---> 100 TeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV - Process: pi-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV - Process: hBertiniCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for proton - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV - Process: protonInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV ------------------------------------------------------------------------ - Hadronic Processes for sigma- - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: sigma-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 6 GeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - Process: hBertiniCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for triton - Process: hadElastic - Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: tInelastic - Model: Binary Light Ion Cascade: 0 eV /n ---> 110 MeV/n - Model: QMDModel: 100 MeV/n ---> 6 GeV/n - Model: FTFP: 5.99 GeV/n ---> 100 TeV/n - Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV - Process: RadioactiveDecay -======================================================================= -====== Geant4 Native Pre-compound Model Parameters ======== -======================================================================= -Type of pre-compound inverse x-section 1 -Pre-compound model active 1 -Pre-compound excitation low energy 100 keV -Pre-compound excitation high energy 30 MeV -Angular generator for pre-compound model 1 -Use NeverGoBack option for pre-compound model 0 -Use SoftCutOff option for pre-compound model 0 -Use CEM transitions for pre-compound model 1 -Use GNASH transitions for pre-compound model 0 -Use HETC submodel for pre-compound model 0 -======================================================================= -====== Nuclear De-excitation Module Parameters ======== -======================================================================= -Type of de-excitation inverse x-section 3 -Type of de-excitation factory Evaporation+GEM -Number of de-excitation channels 68 -Min excitation energy 10 eV -Min energy per nucleon for multifragmentation 200 GeV -Limit excitation energy for Fermi BreakUp 20 MeV -Level density (1/MeV) 0.075 -Use simple level density model 1 -Use discrete excitation energy of the residual 0 -Time limit for long lived isomeres 1000 ps -Isomer production flag 1 -Internal e- conversion flag 1 -Store e- internal conversion data 1 -Correlated gamma emission flag 0 -Max 2J for sampling of angular correlations 10 -======================================================================= - -========= Table of registered couples ============================ - -Index : 0 used in the geometry : Yes - Material : Air - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 1 used in the geometry : Yes - Material : LungInhale - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 1.31725 keV e- 108.069 keV e+ 106.431 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 2 used in the geometry : Yes - Material : LungExhale - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 1.88193 keV e- 180.152 keV e+ 176.601 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 3 used in the geometry : Yes - Material : AdiposeTissue - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.18075 keV e- 275.015 keV e+ 268.402 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 4 used in the geometry : Yes - Material : Breast - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.25478 keV e- 277.672 keV e+ 270.955 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 5 used in the geometry : Yes - Material : Water - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.52504 keV e- 277.648 keV e+ 270.838 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 6 used in the geometry : Yes - Material : Muscle - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.54445 keV e- 287.023 keV e+ 279.831 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 7 used in the geometry : Yes - Material : TrabecularBone - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.70679 keV e- 299.822 keV e+ 292.108 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -Index : 8 used in the geometry : Yes - Material : Liver - Range cuts : gamma 700 um e- 700 um e+ 700 um proton 0 fm - Energy thresholds : gamma 2.55839 keV e- 288.67 keV e+ 281.428 keV proton 0 eV - Region(s) which use this couple : - DefaultRegionForTheWorld - -================================================================== - -++ phantomSD/DoseDeposit id 0 -### Run 0 starts. -### Run 0 start. ---> Event 0 starts. ---> Event 1 starts. ---> Event 2 starts. ---> Event 3 starts. ---> Event 4 starts. ---> Event 5 starts. ---> Event 6 starts. ---> Event 7 starts. ---> Event 8 starts. ---> Event 9 starts. ---> Event 10 starts. ---> Event 11 starts. ---> Event 12 starts. ---> Event 13 starts. ---> Event 14 starts. ---> Event 15 starts. ---> Event 16 starts. ---> Event 17 starts. ---> Event 18 starts. ---> Event 19 starts. ---> Event 20 starts. ---> Event 21 starts. ---> Event 22 starts. ---> Event 23 starts. ---> Event 24 starts. ---> Event 25 starts. ---> Event 26 starts. ---> Event 27 starts. ---> Event 28 starts. ---> Event 29 starts. ---> Event 30 starts. ---> Event 31 starts. ---> Event 32 starts. ---> Event 33 starts. ---> Event 34 starts. ---> Event 35 starts. ---> Event 36 starts. ---> Event 37 starts. ---> Event 38 starts. ---> Event 39 starts. ---> Event 40 starts. ---> Event 41 starts. ---> Event 42 starts. ---> Event 43 starts. ---> Event 44 starts. ---> Event 45 starts. ---> Event 46 starts. ---> Event 47 starts. ---> Event 48 starts. ---> Event 49 starts. ---> Event 50 starts. ---> Event 51 starts. ---> Event 52 starts. ---> Event 53 starts. ---> Event 54 starts. ---> Event 55 starts. ---> Event 56 starts. ---> Event 57 starts. ---> Event 58 starts. ---> Event 59 starts. ---> Event 60 starts. ---> Event 61 starts. ---> Event 62 starts. ---> Event 63 starts. ---> Event 64 starts. ---> Event 65 starts. ---> Event 66 starts. ---> Event 67 starts. ---> Event 68 starts. ---> Event 69 starts. ---> Event 70 starts. ---> Event 71 starts. ---> Event 72 starts. ---> Event 73 starts. ---> Event 74 starts. ---> Event 75 starts. ---> Event 76 starts. ---> Event 77 starts. ---> Event 78 starts. ---> Event 79 starts. ---> Event 80 starts. ---> Event 81 starts. ---> Event 82 starts. ---> Event 83 starts. ---> Event 84 starts. ---> Event 85 starts. ---> Event 86 starts. ---> Event 87 starts. ---> Event 88 starts. ---> Event 89 starts. ---> Event 90 starts. ---> Event 91 starts. ---> Event 92 starts. ---> Event 93 starts. ---> Event 94 starts. ---> Event 95 starts. ---> Event 96 starts. ---> Event 97 starts. ---> Event 98 starts. ---> Event 99 starts. - Run terminated. -Run Summary - Number of events processed : 100 - User=0.010000s Real=0.083454s Sys=0.000000s ---------------------End of Global Run----------------------- - The run was 100 events -LOCAL TOTAL DOSE : 0 Gy - TOTAL DOSE : 9.87206e-07 Gy - ###### EndOfRunAction ###### -============================================================= - Number of event processed : 100 -============================================================= - opened file dicom.out for dose output - Voxel | DoseDeposit | -============================================= - closed file dicom.out for dose output -Finished : End of Run Action 0 -Graphics systems deleted. -Visualization Manager deleting... -================== Deleting memory pools =================== -Number of memory pools allocated: 10 of which, static: 0 -Dynamic pools deleted: 10 / Total memory freed: 0.03 MB -============================================================ +DICOM build complete diff --git a/examples/extended/medical/DICOM2/CMakeLists.txt b/examples/extended/medical/DICOM2/CMakeLists.txt deleted file mode 100644 index 85fbef8377..0000000000 --- a/examples/extended/medical/DICOM2/CMakeLists.txt +++ /dev/null @@ -1,94 +0,0 @@ - -#---------------------------------------------------------------------------- -# Setup the project -cmake_minimum_required(VERSION 3.16...3.27) -project(DICOM2) - -#---------------------------------------------------------------------------- -# Find Geant4 package, activating all available UI and Vis drivers by default -# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui -# to build a batch mode only executable -# -option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() - -# append CMAKE_PREFIX_PATH to help find DICOM in recommended installation -# location (${Geant4_DIR}) and the location found when testing -if(NOT DEFINED DICOM_DIR) - # recommended installation place - list(APPEND CMAKE_PREFIX_PATH ${Geant4_DIR}) - # found here when internally testing - list(APPEND CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/../DICOM") -endif() - -# find DICOM package -find_package(DICOM REQUIRED) - -#---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# Setup include directory for this project -# -include(${Geant4_USE_FILE}) -include_directories(${PROJECT_SOURCE_DIR}/include ${DICOM_INCLUDE_DIRS}) - -#---------------------------------------------------------------------------- -# Locate sources and headers for this project -# NB: headers are included so they will show up in IDEs -# -file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - -#---------------------------------------------------------------------------- -# Add the executable, and link it to the Geant4 libraries -# -add_executable(dicom2 dicom2.cc ${sources} ${headers}) -target_link_libraries(dicom2 ${Geant4_LIBRARIES} ${DICOM_LIBRARIES}) - -#---------------------------------------------------------------------------- -# Copy all scripts to the build directory, i.e. the directory in which we -# build B1. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. -# -# the macros -set(DICOM_MACROS run.mac vis.mac) - -# original set of DICOM data -set(DICOM_SCRIPTS - 1.dcm 2.dcm 3.dcm - 1.g4 2.g4 3.g4 - 1.g4dcm 2.g4dcm 3.g4dcm - ColourMap.dat CT2Density.dat - Data.dat.new Data.dat.old - Data.dat.new_dens Data.partial.dat -) - -foreach(_script ${DICOM_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/data/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY) -endforeach() - -if(DICOM_USE_DCMTK) - configure_file(${PROJECT_SOURCE_DIR}/data/Data.dat.new - ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) -else() - configure_file(${PROJECT_SOURCE_DIR}/data/Data.dat.old - ${PROJECT_BINARY_DIR}/Data.dat COPYONLY) -endif() - -foreach(_script ${DICOM_MACROS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY) -endforeach() - -#---------------------------------------------------------------------------- -# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX -# -install(TARGETS dicom2 DESTINATION bin) diff --git a/examples/extended/medical/DICOM2/GNUmakefile b/examples/extended/medical/DICOM2/GNUmakefile deleted file mode 100644 index dfaf1b73e9..0000000000 --- a/examples/extended/medical/DICOM2/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. -# -------------------------------------------------------------- - -name := dicom2 -G4TARGET := $(name) -G4EXLIB := true - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -.PHONY: all -all: lib bin - -include $(G4INSTALL)/config/binmake.gmk - -visclean: - rm -f g4*.prim g4*.eps g4*.wrl - rm -f .DAWN_* diff --git a/examples/extended/medical/GammaTherapy/GammaTherapy.out b/examples/extended/medical/GammaTherapy/GammaTherapy.out index 1490d84599..41476e361e 100644 --- a/examples/extended/medical/GammaTherapy/GammaTherapy.out +++ b/examples/extended/medical/GammaTherapy/GammaTherapy.out @@ -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 @@ -193,7 +193,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 ======== @@ -664,7 +664,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=1.610000s Real=1.608993s Sys=0.000000s + User=1.600000s Real=1.628730s Sys=0.000000s Histo: End of run actions are started ======================================================== Number of events 10000 diff --git a/examples/extended/medical/dna/AuNP/AuNP.out b/examples/extended/medical/dna/AuNP/AuNP.out index 43c57943ab..646e297912 100644 --- a/examples/extended/medical/dna/AuNP/AuNP.out +++ b/examples/extended/medical/dna/AuNP/AuNP.out @@ -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 @@ -55,6 +55,12 @@ PhysicsList::SetCuts:CutLength : 100000 fm ========================================================= +G4DNASamplingTable::LoadData from file: +/dna/sigmadiff_ionisation_e_born.dat + Nenergy= 83 NmaxT= 151 +G4DNASamplingTable::LoadData from file: +/dna/sigmadiff_ionisation_p_born.dat + Nenergy= 31 NmaxT= 151 PhysicsList::SetCuts:CutLength : 100000 fm ======================================================================= ====== Electromagnetic Physics Parameters ======== @@ -83,7 +89,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 ======== diff --git a/examples/extended/medical/dna/CMakeLists.txt b/examples/extended/medical/dna/CMakeLists.txt index 42294287e8..473693b2bb 100644 --- a/examples/extended/medical/dna/CMakeLists.txt +++ b/examples/extended/medical/dna/CMakeLists.txt @@ -1,4 +1,4 @@ -#---Adding all dna examples subdirectories explicitly +#---Adding all dna examples subdirectories explicitly cmake_minimum_required(VERSION 3.16...3.27) @@ -27,8 +27,10 @@ add_subdirectory(mfp) add_subdirectory(microdosimetry) add_subdirectory(microprox) add_subdirectory(microyz) +add_subdirectory(molcounters) add_subdirectory(neuron) add_subdirectory(pdb4dna) +add_subdirectory(radial) add_subdirectory(range) add_subdirectory(scavenger) add_subdirectory(slowing) @@ -39,4 +41,3 @@ add_subdirectory(wholeNuclearDNA) add_subdirectory(wvalue) add_subdirectory(AuNP) add_subdirectory(UHDR) - diff --git a/examples/extended/medical/dna/History b/examples/extended/medical/dna/History index 7a2051eb44..5de2e6f54c 100644 --- a/examples/extended/medical/dna/History +++ b/examples/extended/medical/dna/History @@ -4,6 +4,12 @@ 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-05-05 Hoang Tran (exdna-V11-03-01) +- added molcounter examples + +## 2025-03-19 Hoang Tran (exdna-V11-03-00) +- added dna radial example + ## 2024-10-22 Hoang Tran (exdna-V11-02-02) - clean up moleculardna (moved to advanced) in README files @@ -69,7 +75,7 @@ be used as a substitute for writing good git commit messages! - Updated README for newly added examples (S. Incerti) 05-11-2019 H. Tran (exdna-V10-05-01) -- Added check for no products reactions and +- Added check for no products reactions and fixed sequential mode in example dnadamage1 26-12-2018 H. Tran (exdna-V10-05-00) diff --git a/examples/extended/medical/dna/README b/examples/extended/medical/dna/README index 694d059f85..8d0e6bef27 100644 --- a/examples/extended/medical/dna/README +++ b/examples/extended/medical/dna/README @@ -8,42 +8,46 @@ This directory contains a set of Geant4-DNA examples. Physics - - dnaphysics - The dnaphysics example shows how to simulate track structures in liquid + - dnaphysics + The dnaphysics example shows how to simulate track structures in liquid water using the Geant4-DNA physics processes and models. - - clustering + - clustering Clustering application for direct damage extraction. - icsd - This example shows how to use cross section models for DNA materials + This example shows how to simulate ICSD and how to use cross section models + for DNA materials. - mfp - This example shows how to simulate mean free path in liquid water + This example shows how to simulate mean free path in liquid water. - - microdosimetry - The microdosimetry example simulates the track of a 5 MeV proton in - liquid water. - Geant4 standard EM models are used in the World volume while Geant4-DNA + - microdosimetry + The microdosimetry example simulates the track of a 5 MeV proton in + liquid water. + Geant4 standard EM models are used in the World volume while Geant4-DNA models are used in a Target volume, declared as a Region. - - microprox - Computation of proximity functions in liquid water + - microprox + Simulation of proximity functions in liquid water. - - microyz - Simulation of microdosimetry spectra + - microyz + Simulation of microdosimetry spectra. - - range + - radial + Simulation of radial dose of ions. + + - range Simulation of ranges. - - slowing + - slowing Simulation of slowing down spectra. - - splitting + - splitting Use of variance reduction to improve the computational efficiency of ionization. - - spower + - spower Simulation of stopping power. - svalue @@ -63,7 +67,7 @@ This directory contains a set of Geant4-DNA examples. - chem2 Usage of TimeStepAction in the chemistry module. - chem3 Activate the full interactivity with the chemistry module. - chem4 Simulation of radiochemical yields with the chemistry module. - - chem5 Variation of chem4, using the contructors G4EmDNAPhysics_option8 and + - chem5 Variation of chem4, using the contructors G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1. - chem6 Scoring of the radiochemical yield G defined as a function of time and LET. @@ -73,22 +77,20 @@ This directory contains a set of Geant4-DNA examples. Geometry and other - - pdb4dna + - pdb4dna Usage of the Protein Data Bank (PDB) file format to build geometries. - - wholeNuclearDNA + - wholeNuclearDNA Geometrical description of a full simplified cell nucleus. - - - dnadamage1 + + - dnadamage1 Damage simulation on a chromatin fiber. - - neuron + - neuron Irradiation of a realistic neuron cell. - jetcounter A setup for simulation of a typical experiment with the Jet Counter nanodosemeter - + See the README page inside each example for more detail. - - diff --git a/examples/extended/medical/dna/UHDR/.README.txt b/examples/extended/medical/dna/UHDR/.README.txt index 5bd3eeef4c..56812c2f26 100644 --- a/examples/extended/medical/dna/UHDR/.README.txt +++ b/examples/extended/medical/dna/UHDR/.README.txt @@ -18,7 +18,7 @@ \section UHDR_s0 INTRODUCTION This example shows how to activate the mesoscopic model in chemistry and - combine with SBS model (Tran et al.,Int. J. Mol. Sci. 22 (2021) 6023). + combine with IRT-syn model (https://arxiv.org/abs/2409.11993). It allows to simulate chemical reactions longtime (beyond 1 us) of post-irradiation. To run the example: @@ -75,6 +75,17 @@ In batch mode, the macro beam.in can be used as follows: This object is controlled by DetectorContruction. It defines the chemistry volume, scavengers and pH of water. + This fearture can be set by the following commands: + # pH and Scavenger + \verbatim + /UHDR/env/pH 5.5 +\endverbatim + # air concentration +\verbatim + /UHDR/env/scavenger O2 21 % + /UHDR/env/scavenger CO2 0.041 % + /UHDR/env/scavenger HCO3m 2.4 uM +\endverbatim \section UHDR_s4 AN EVENT: PRIMARY GENERATOR This example utilizes the G4SingleParticleSource. @@ -100,17 +111,45 @@ These two macro commands can be used to control the scoring time: # or user can automatically select time bin logarithmically. \endverbatim -\section UHDR_s6 PULSE ACTION +\section UHDR_s6 PULSE ACTION and INTERPULSE ACTION -This functionality is not available for this version. +The time structure can be activated by implementing a delayed time, Δt, +which is sampled from a beamline raw signal of a measured pulse. +Each delayed time is associated with a primary particle and propagates to its corresponding +primary chemical species induced by this primary particle. +These primary chemical species remain inactive until the virtual simulation time matches +their respective delayed time. This process creates a duration for the primary particle train +where their primary chemical species are activated randomly through an experimental beam +current transformation, named "pulse duration". +This fearture can be set by the following commands: + +# time structure +\verbatim +/UHDR/pulse/pulseOn true // active the time structure +\endverbatim +# push structure file +\verbatim +/UHDR/pulse/pulseFile 1.4us // push structure file +\endverbatim +# pulse structure +\verbatim +/UHDR/pulse/multiPulse true // active the multi pulse +/UHDR/pulse/pulsePeriod 10 ms // time between two pulses (DIT) +/UHDR/pulse/numberOfPulse 2 // number of pulses +\endverbatim \section UHDR_s7 OUTPUT G-value \section UHDR_s8 RELEVANT MACRO COMMANDS AND MACRO FILE -The user macro files are: beam.in (conventional), UHDR.in (Ultra High Dose Rate) +The user macro files are: +beam.in (default), +CONV.in (Conventional) +UHDR.in (Ultra High Dose Rate) +initialize.in (initialize geo and phys) +scavengers.in (pH and scavengers are defined) \section UHDR_s9 REACTION BUILDER @@ -138,10 +177,7 @@ root plot_time.C > scorer.txt \endverbatim The results show the molecular species (G values) as a function of -time (ns). Please correct the dose in the -\verbatim -TTree *tree = (TTree *) dir->Get("0.010000"); -\endverbatim +time (ns). \section UHDR_s11 - Periodic Boundary Condition (PBC) @@ -165,7 +201,6 @@ Use the following command to activate or deactivate PBC. /UHDR/Detector/PBC true \endverbatim -Funding: FNS Synergia grant MAGIC-FNS CRSII5_186369. Contact: H. Tran (tran@lp2ib.in2p3.fr) CNRS, lp2i, UMR 5797, Université de Bordeaux, F-33170 Gradignan, France */ diff --git a/examples/extended/medical/dna/UHDR/AuNP.out b/examples/extended/medical/dna/UHDR/AuNP.out index ba7fdbadf7..bdad0ef256 100644 --- a/examples/extended/medical/dna/UHDR/AuNP.out +++ b/examples/extended/medical/dna/UHDR/AuNP.out @@ -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 @@ -26,7 +26,7 @@ Checking overlaps for volume PBC:0 (G4Box) ... OK! G4SDManager::AddNewCollection : the collection is registered at 1 G4SDManager::AddNewCollection : the collection is registered at 2 New sensitive detector is registered at / -Number of chemical species involved in reactions = 16 +Number of chemical species involved in reactions = 23 Reaction Reaction Rate [dm3/(mol*s)] ----------------------------------------------------------------------------------- H3O^1 + OH^-1 -> No product 1.13e+11 @@ -43,6 +43,8 @@ H3O^1 + O^-1 -> °OH^0 4.78e+10 ----------------------------------------------------------------------------------- H3O^1 + OH^-1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- +°OH^0 + CO_2^0 -> HCO_3^0 1e+06 +----------------------------------------------------------------------------------- °OH^0 + H^0 -> No product 1.55e+10 ----------------------------------------------------------------------------------- °OH^0 + °OH^0 -> H2O2^0 5.5e+09 @@ -65,10 +67,18 @@ H3O^1 + OH^-1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- °OH^0 + H_2^0 -> H^0 3.28e+07 ----------------------------------------------------------------------------------- +°OH^0 + HCO_3^-1 -> CO_3^-1 8.5e+06 +----------------------------------------------------------------------------------- +°OH^0 + °O^0 -> HO_2°^0 2e+10 +----------------------------------------------------------------------------------- +°OH^0 + MeOH^0 -> MeOH^0 9.7e+08 +----------------------------------------------------------------------------------- °OH^0 + OH^-1 -> O^-1 1.27e+10 ----------------------------------------------------------------------------------- °OH^0 + H2O^0 -> O^-1 + H3O^1 6.01766e-08 ----------------------------------------------------------------------------------- +°OH^0 + NO_2^-1 -> NO_2^0 + OH^-1 8e+09 +----------------------------------------------------------------------------------- OH^-1 + HO_2°^0 -> O_2^-1 1.27e+10 ----------------------------------------------------------------------------------- OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 @@ -77,7 +87,9 @@ OH^-1 + H^0 -> e_aq^-1 2.51e+07 ----------------------------------------------------------------------------------- OH^-1 + H3O^1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- -e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 +e_aq^-1 + O_2^0 -> O_2^-1 1.74e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + CO_2^0 -> CO_2^-1 7.7e+09 ----------------------------------------------------------------------------------- e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 ----------------------------------------------------------------------------------- @@ -93,11 +105,17 @@ e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 ----------------------------------------------------------------------------------- e_aq^-1 + HO_2°^0 -> HO_2^-1 1.29e+10 ----------------------------------------------------------------------------------- +e_aq^-1 + N_2O^0 -> O^-1 9e+09 +----------------------------------------------------------------------------------- e_aq^-1 + H3O^1 -> H^0 2.25e+10 ----------------------------------------------------------------------------------- e_aq^-1 + H2O^0 -> H^0 + OH^-1 0.00086821 ----------------------------------------------------------------------------------- -H^0 + O_2^0 -> HO_2°^0 1.3e+10 +e_aq^-1 + NO_2^-1 -> NO_2^-2 3.5e+09 +----------------------------------------------------------------------------------- +e_aq^-1 + NO_3^-1 -> NO_3^-2 9.7e+09 +----------------------------------------------------------------------------------- +H^0 + O_2^0 -> HO_2°^0 2.1e+10 ----------------------------------------------------------------------------------- H^0 + H^0 -> H_2^0 5.03e+09 ----------------------------------------------------------------------------------- @@ -184,7 +202,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 ======== @@ -246,6 +264,7 @@ Use fast sampling in DNA models 1 Use Stationary option in DNA models 0 Use DNA with multiple scattering of e- 0 Use DNA e- solvation model type 11003 +Use DNA Chemistry model IRT_syn ======================================================================= ### === Deexcitation model UAtomDeexcitation is activated for 1 region: @@ -390,7 +409,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 ====== @@ -406,7 +427,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 @@ -434,19 +455,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 ====== @@ -468,23 +491,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 ====== @@ -507,19 +534,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 ====== @@ -529,8 +558,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 @@ -541,7 +570,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 ====== @@ -624,154 +655,15376 @@ hIoni: for pi- XStype:3 SubType=2 ### Run 0 starts. --> Event 0 starts. _____________________________________________________________________________ -Stop this beam line (e-, 0.999 MeV) at actual dose: 0.0111416 Gy. Cut-off dose: 0.01 Gy -The beam of 6 tracks in a volume of 32.768 um3. Total deposit energy: 2278.87 eV. -_____________________________________________________________________________ -Number of chemical species involved in reactions = 16 -Reaction Reaction Rate [dm3/(mol*s)] Interaction Range for chosen reaction model [nm] -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + OH^-1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + e_aq^-1 -> H^0 2.11e+10 0.194163 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O_3^-1 -> °OH^0 + O_2^0 9e+10 1.03776 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O_2^-1 -> HO_2°^0 4.78e+10 0.563458 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + HO_2^-1 -> H2O2^0 4.78e+10 0.581617 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O^-1 -> °OH^0 4.78e+10 0.551166 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + OH^-1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H^0 -> No product 1.55e+10 0.22263 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + °OH^0 -> H2O2^0 5.5e+09 0.330354 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + e_aq^-1 -> OH^-1 2.95e+10 0.549039 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O_2^-1 -> O_2^0 + OH^-1 1.07e+10 0.357953 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + HO_2°^0 -> O_2^0 7.9e+09 0.231982 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + HO_2^-1 -> HO_2°^0 + OH^-1 8.32e+09 0.305394 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O^-1 -> HO_2^-1 1e+09 0.0314623 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O_3^-1 -> O_2^-1 + HO_2°^0 8.5e+09 0.267429 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H2O2^0 -> HO_2°^0 2.88e+07 0.000845706 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H_2^0 -> H^0 3.28e+07 0.000619177 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H2O^0 -> O^-1 + H3O^1 6.01766e-08 1.89329e-18 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + HO_2°^0 -> O_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 0.226032 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H^0 -> e_aq^-1 2.51e+07 0.000269655 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H3O^1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 0.416336 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 0.277608 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 6.36e+09 0.171514 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 1.1e+10 0.201883 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 1.3e+10 0.258322 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + HO_2^-1 -> O^-1 + OH^-1 3.51e+09 0.0736217 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 0.442387 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + HO_2°^0 -> HO_2^-1 1.29e+10 0.236754 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H3O^1 -> H^0 2.25e+10 0.207046 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H2O^0 -> H^0 + OH^-1 0.00086821 1.6627e-14 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O_2^0 -> HO_2°^0 1.3e+10 0.182749 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H^0 -> H_2^0 5.03e+09 0.0949531 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O^-1 -> OH^-1 2e+10 0.293648 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + HO_2°^0 -> H2O2^0 1e+10 0.142088 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O_2^-1 -> HO_2^-1 1e+10 0.151019 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H2O2^0 -> °OH^0 3.5e+07 0.000497307 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H2O^0 -> e_aq^-1 + H3O^1 6.32e-06 9.27927e-17 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + OH^-1 -> e_aq^-1 2.49e+07 0.000267506 -------------------------------------------------------------------------------------------------------------------------------------- -H_2^0 + O^-1 -> H^0 + OH^-1 1.21e+08 0.00235134 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + O^-1 -> HO_2°^0 + OH^-1 5.55e+08 0.0170555 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + OH^-1 -> HO_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + H2O^0 -> HO_2^-1 + H3O^1 7.86e-08 2.41542e-18 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + HO_2°^0 -> H2O2^0 + O_2^0 980000 5.63038e-05 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + O_2^-1 -> HO_2^-1 + O_2^0 9.7e+07 0.00316487 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 0.758 2.32938e-11 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + OH^-1 -> O_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + O^-1 -> O_2^-1 + OH^-1 3.5e+08 0.0136028 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 75.208 2.92297e-09 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + H3O^1 -> H2O2^0 4.78e+10 0.581617 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_2^0 -> O_3^-1 3.7e+09 0.111119 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_2^-1 -> O_2^0 + OH^-1 + OH^-1 6e+08 0.0211426 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O^-1 -> H2O2^0 + OH^-1 + OH^-1 1e+08 0.00660708 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_3^-1 -> O_2^-1 + O_2^-1 7e+08 0.0231248 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + H2O^0 -> °OH^0 + OH^-1 99.54 3.28834e-09 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + H3O^1 -> °OH^0 9.56e+10 1.10233 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + O_2^-1 -> H2O2^0 + O_2^0 + OH^-1 + OH^-1 100 7.55094e-09 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + H3O^1 -> HO_2°^0 4.78e+10 0.563458 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + H2O^0 -> HO_2°^0 + OH^-1 8.295e-06 2.92297e-16 -------------------------------------------------------------------------------------------------------------------------------------- -O_3^-1 + H3O^1 -> °OH^0 + O_2^0 9e+10 1.03776 -------------------------------------------------------------------------------------------------------------------------------------- -O_3^-1 + H2O^0 -> O^-1 + O_2^0 0.00266 8.78741e-14 -------------------------------------------------------------------------------------------------------------------------------------- -DNAMolecularStepByStepModel will be used -_____________________________________________________________________________ -Stop this beam line (e-, 0.999 MeV) at actual dose: 0.010174 Gy. Cut-off dose: 0.01 Gy -The beam of 4 tracks in a volume of 32.768 um3. Total deposit energy: 2080.9 eV. +Beam line : (e-, 0.999 MeV) +Cut-off dose : 0.1 Gy +Stop at actual dose : 0.102287 Gy +Beam duration : 0 s +Actual dose rate : infinite +Track number : 39 tracks +Irradiated volume : 32.768 um3 (3.2 x 3.2 x 3.2) +O_2^0 : 0.000273 M +pH : 5.5 +CO_2^0 : 0 M +Total deposit energy : 20921.5 eV +Dose to abort : 0.15 Gy _____________________________________________________________________________ +DNAIndependentReactionTimeModel will be used ========================== + +======================================================================= + +*** G4Scheduler starts processing +At time : 1 ps Reaction : °OH^0 (-4124) + e_aq^-1 (-346) -> OH^-1 (-4568) +At time : 1 ps Reaction : °OH^0 (-2332) + OH^-1 (-2331) -> O^-1 (-4569) +At time : 1 ps Reaction : °OH^0 (-2311) + OH^-1 (-2310) -> O^-1 (-4570) +At time : 1 ps Reaction : °OH^0 (-2504) + °OH^0 (-2502) -> H2O2^0 (-4571) +At time : 1 ps Reaction : °OH^0 (-2686) + °OH^0 (-4200) -> H2O2^0 (-4572) +At time : 1 ps Reaction : H3O^1 (-2701) + e_aq^-1 (-1859) -> H^0 (-4573) +At time : 1 ps Reaction : H3O^1 (-3357) + OH^-1 (-2280) -> No product +At time : 1 ps Reaction : °OH^0 (-2275) + OH^-1 (-2274) -> O^-1 (-4574) +At time : 1 ps Reaction : H3O^1 (-3257) + OH^-1 (-2271) -> No product +At time : 1 ps Reaction : °OH^0 (-2269) + OH^-1 (-2268) -> O^-1 (-4575) +At time : 1 ps Reaction : °OH^0 (-3714) + H^0 (-4274) -> No product +At time : 1 ps Reaction : °OH^0 (-2928) + °O^0 (-4273) -> HO_2°^0 (-4576) +At time : 1 ps Reaction : °OH^0 (-4369) + °OH^0 (-4370) -> H2O2^0 (-4577) +At time : 1 ps Reaction : °OH^0 (-4029) + °OH^0 (-4210) -> H2O2^0 (-4578) +At time : 1 ps Reaction : e_aq^-1 (-4025) + °OH^0 (-4023) -> OH^-1 (-4579) +At time : 1 ps Reaction : °OH^0 (-4057) + °O^0 (-4195) -> HO_2°^0 (-4580) +At time : 1 ps Reaction : °OH^0 (-4102) + °OH^0 (-4437) -> H2O2^0 (-4581) +At time : 1 ps Reaction : °OH^0 (-4174) + °OH^0 (-4456) -> H2O2^0 (-4582) +At time : 1 ps Reaction : °OH^0 (-4225) + °O^0 (-4222) -> HO_2°^0 (-4583) +At time : 1 ps Reaction : °OH^0 (-3190) + °OH^0 (-2666) -> H2O2^0 (-4584) +At time : 1 ps Reaction : H3O^1 (-4024) + OH^-1 (-4579) -> No product +At time : 1 ps Reaction : °OH^0 (-2724) + °O^0 (-4247) -> HO_2°^0 (-4585) +At time : 2 ps Reaction : H3O^1 (-3167) + OH^-1 (-2256) -> No product +At time : 2 ps Reaction : °OH^0 (-3126) + °OH^0 (-4309) -> H2O2^0 (-4586) +At time : 2 ps Reaction : °OH^0 (-3148) + °OH^0 (-3146) -> H2O2^0 (-4587) +At time : 2 ps Reaction : °OH^0 (-3254) + °OH^0 (-4357) -> H2O2^0 (-4588) +At time : 2 ps Reaction : H3O^1 (-4125) + OH^-1 (-4568) -> No product +At time : 2 ps Reaction : °OH^0 (-3132) + °OH^0 (-3116) -> H2O2^0 (-4589) +At time : 2.2523 ps Reaction : °OH^0 (-2970) + H^0 (-4499) -> No product +At time : 2.4148 ps Reaction : °OH^0 (-2852) + e_aq^-1 (-1035) -> OH^-1 (-4590) +At time : 2.5717 ps Reaction : °OH^0 (-3922) + °O^0 (-4543) -> HO_2°^0 (-4591) +At time : 2.9954 ps Reaction : H3O^1 (-2831) + OH^-1 (-2295) -> No product +At time : 3.5113 ps Reaction : °OH^0 (-3196) + °OH^0 (-2444) -> H2O2^0 (-4592) +At time : 4.1272 ps Reaction : °OH^0 (-4081) + e_aq^-1 (-1794) -> OH^-1 (-4593) +At time : 4.1729 ps Reaction : °OH^0 (-4567) + °OH^0 (-4423) -> H2O2^0 (-4594) +At time : 4.8893 ps Reaction : °OH^0 (-2410) + H^0 (-4293) -> No product +At time : 5.4277 ps Reaction : °OH^0 (-3716) + °OH^0 (-3712) -> H2O2^0 (-4595) +At time : 5.5337 ps Reaction : °OH^0 (-4466) + °OH^0 (-4467) -> H2O2^0 (-4596) +At time : 5.5909 ps Reaction : °OH^0 (-4312) + °OH^0 (-4313) -> H2O2^0 (-4597) +At time : 5.9332 ps Reaction : °OH^0 (-3228) + e_aq^-1 (-1873) -> OH^-1 (-4598) +At time : 7.8529 ps Reaction : H3O^1 (-3445) + OH^-1 (-2286) -> No product +At time : 7.8529 ps Reaction : °OH^0 (-2814) + °O^0 (-4204) -> HO_2°^0 (-4600) +At time : 7.8529 ps Reaction : °OH^0 (-4390) + °OH^0 (-4389) -> H2O2^0 (-4601) +At time : 7.8529 ps Reaction : e_aq^-1 (-4092) + °OH^0 (-4090) -> OH^-1 (-4602) +At time : 7.8529 ps Reaction : °OH^0 (-3360) + °O^0 (-4402) -> HO_2°^0 (-4603) +At time : 8.8482 ps Reaction : °OH^0 (-3432) + e_aq^-1 (-1325) -> OH^-1 (-4604) +At time : 8.8529 ps Reaction : H3O^1 (-4091) + OH^-1 (-4602) -> No product +At time : 9.6572 ps Reaction : °OH^0 (-4298) + °OH^0 (-4299) -> H2O2^0 (-4605) +At time : 9.9109 ps Reaction : °OH^0 (-3188) + °OH^0 (-3186) -> H2O2^0 (-4606) +At time : 10.331 ps Reaction : °OH^0 (-2682) + °OH^0 (-4240) -> H2O2^0 (-4607) +At time : 11.235 ps Reaction : °OH^0 (-4323) + °OH^0 (-4324) -> H2O2^0 (-4608) +At time : 11.473 ps Reaction : H3O^1 (-3005) + OH^-1 (-2319) -> No product +At time : 12.389 ps Reaction : H^0 (-4406) + HO_2°^0 (-4603) -> H2O2^0 (-4609) +At time : 14.337 ps Reaction : H^0 (-4517) + H^0 (-4518) -> H_2^0 (-4610) +At time : 14.763 ps Reaction : e_aq^-1 (-2030) + e_aq^-1 (-2029) -> OH^-1 (-4611) + OH^-1 (-4612) + H_2^0 (-4613) +At time : 15.409 ps Reaction : °OH^0 (-2936) + °OH^0 (-4480) -> H2O2^0 (-4614) +At time : 16.203 ps Reaction : °OH^0 (-4238) + °OH^0 (-4330) -> H2O2^0 (-4615) +At time : 16.804 ps Reaction : °OH^0 (-4139) + H^0 (-4138) -> No product +At time : 20.162 ps Reaction : °OH^0 (-2640) + °OH^0 (-4316) -> H2O2^0 (-4616) +At time : 20.373 ps Reaction : °OH^0 (-2638) + H^0 (-4224) -> No product +At time : 21.033 ps Reaction : °OH^0 (-2578) + °OH^0 (-2576) -> H2O2^0 (-4617) +At time : 21.322 ps Reaction : °OH^0 (-3152) + °OH^0 (-4318) -> H2O2^0 (-4618) +At time : 22.072 ps Reaction : °OH^0 (-2308) + OH^-1 (-2307) -> O^-1 (-4619) +At time : 22.482 ps Reaction : °OH^0 (-2920) + °OH^0 (-2396) -> H2O2^0 (-4620) +At time : 23.4 ps Reaction : °OH^0 (-3192) + e_aq^-1 (-2009) -> OH^-1 (-4621) +At time : 23.414 ps Reaction : °OH^0 (-3378) + °OH^0 (-4408) -> H2O2^0 (-4622) +At time : 23.861 ps Reaction : H^0 (-4116) + °OH^0 (-4271) -> No product +At time : 24.135 ps Reaction : °OH^0 (-3002) + °OH^0 (-2998) -> H2O2^0 (-4623) +At time : 24.508 ps Reaction : °OH^0 (-3162) + H^0 (-4223) -> No product +At time : 25.668 ps Reaction : °OH^0 (-2714) + °OH^0 (-4337) -> H2O2^0 (-4624) +At time : 27.096 ps Reaction : °OH^0 (-4348) + H^0 (-4349) -> No product +At time : 27.666 ps Reaction : °OH^0 (-3448) + °OH^0 (-3444) -> H2O2^0 (-4625) +At time : 29.864 ps Reaction : °OH^0 (-2932) + HO_2°^0 (-4576) -> No product +At time : 30.033 ps Reaction : °OH^0 (-2674) + °OH^0 (-2672) -> H2O2^0 (-4626) +At time : 30.227 ps Reaction : °OH^0 (-2628) + °OH^0 (-2618) -> H2O2^0 (-4627) +At time : 30.74 ps Reaction : H3O^1 (-3181) + OH^-1 (-4611) -> No product +At time : 31.147 ps Reaction : °O^0 (-4531) + °OH^0 (-4537) -> HO_2°^0 (-4628) +At time : 31.799 ps Reaction : H3O^1 (-3551) + e_aq^-1 (-1046) -> H^0 (-4629) +At time : 33.432 ps Reaction : °OH^0 (-3730) + H^0 (-4277) -> No product +At time : 34.497 ps Reaction : H3O^1 (-3227) + OH^-1 (-4598) -> No product +At time : 34.982 ps Reaction : °OH^0 (-3214) + °OH^0 (-2472) -> H2O2^0 (-4630) +At time : 36.595 ps Reaction : °OH^0 (-3604) + e_aq^-1 (-892) -> OH^-1 (-4631) +At time : 41.084 ps Reaction : °OH^0 (-3268) + H^0 (-4244) -> No product +At time : 41.125 ps Reaction : H^0 (-4122) + e_aq^-1 (-542) -> OH^-1 (-4632) + H_2^0 (-4633) +At time : 41.237 ps Reaction : H3O^1 (-3945) + e_aq^-1 (-44) -> H^0 (-4634) +At time : 43.219 ps Reaction : °OH^0 (-2266) + OH^-1 (-2265) -> O^-1 (-4635) +At time : 45.431 ps Reaction : H^0 (-4108) + e_aq^-1 (-1042) -> OH^-1 (-4636) + H_2^0 (-4637) +At time : 47.125 ps Reaction : H^0 (-4249) + H^0 (-4248) -> H_2^0 (-4638) +At time : 48.521 ps Reaction : °OH^0 (-3740) + e_aq^-1 (-689) -> OH^-1 (-4639) +At time : 51.515 ps Reaction : °OH^0 (-2810) + °OH^0 (-2378) -> H2O2^0 (-4640) +At time : 51.69 ps Reaction : °OH^0 (-3284) + °OH^0 (-2466) -> H2O2^0 (-4641) +At time : 51.709 ps Reaction : °OH^0 (-3484) + °OH^0 (-2518) -> H2O2^0 (-4642) +At time : 53.352 ps Reaction : °OH^0 (-3314) + H^0 (-4395) -> No product +At time : 54.932 ps Reaction : °OH^0 (-4560) + °OH^0 (-4559) -> H2O2^0 (-4643) +At time : 55.834 ps Reaction : °OH^0 (-2972) + °OH^0 (-4503) -> H2O2^0 (-4644) +At time : 57.391 ps Reaction : °OH^0 (-3724) + °OH^0 (-4485) -> H2O2^0 (-4645) +At time : 59.565 ps Reaction : H3O^1 (-3673) + e_aq^-1 (-749) -> H^0 (-4646) +At time : 59.672 ps Reaction : H3O^1 (-4045) + OH^-1 (-2322) -> No product +At time : 61.231 ps Reaction : H3O^1 (-2461) + OH^-1 (-4593) -> No product +At time : 61.231 ps Reaction : e_aq^-1 (-4019) + °OH^0 (-4017) -> OH^-1 (-4648) +At time : 61.231 ps Reaction : °OH^0 (-2372) + e_aq^-1 (-1538) -> OH^-1 (-4649) +At time : 63.15 ps Reaction : °OH^0 (-3074) + e_aq^-1 (-142) -> OH^-1 (-4650) +At time : 67.978 ps Reaction : °OH^0 (-4339) + H^0 (-4340) -> No product +At time : 68.761 ps Reaction : °OH^0 (-3120) + °OH^0 (-3112) -> H2O2^0 (-4651) +At time : 69.903 ps Reaction : °OH^0 (-4208) + °OH^0 (-4209) -> H2O2^0 (-4652) +At time : 70.023 ps Reaction : e_aq^-1 (-4055) + H3O^1 (-2607) -> H^0 (-4653) +At time : 71.044 ps Reaction : °OH^0 (-4541) + H^0 (-4542) -> No product +At time : 71.688 ps Reaction : e_aq^-1 (-4134) + °OH^0 (-4132) -> OH^-1 (-4654) +At time : 72.286 ps Reaction : °OH^0 (-3496) + e_aq^-1 (-1166) -> OH^-1 (-4655) +At time : 75.885 ps Reaction : °OH^0 (-3678) + °OH^0 (-4272) -> H2O2^0 (-4656) +At time : 76.412 ps Reaction : °OH^0 (-4430) + °OH^0 (-4431) -> H2O2^0 (-4657) +At time : 76.428 ps Reaction : OH^-1 (-4655) + H3O^1 (-2521) -> No product +At time : 76.738 ps Reaction : °OH^0 (-2284) + OH^-1 (-2283) -> O^-1 (-4658) +At time : 77.179 ps Reaction : °OH^0 (-4227) + °OH^0 (-4321) -> H2O2^0 (-4659) +At time : 79.997 ps Reaction : H3O^1 (-2357) + e_aq^-1 (-1752) -> H^0 (-4660) +At time : 81.028 ps Reaction : °OH^0 (-3808) + °OH^0 (-3806) -> H2O2^0 (-4661) +At time : 84.585 ps Reaction : °OH^0 (-3412) + e_aq^-1 (-1358) -> OH^-1 (-4662) +At time : 85.408 ps Reaction : °OH^0 (-3804) + H^0 (-4294) -> No product +At time : 87.2 ps Reaction : H3O^1 (-2481) + OH^-1 (-2277) -> No product +At time : 87.581 ps Reaction : e_aq^-1 (-4086) + °OH^0 (-4084) -> OH^-1 (-4663) +At time : 91.835 ps Reaction : °OH^0 (-3334) + °OH^0 (-3332) -> H2O2^0 (-4664) +At time : 95.2 ps Reaction : H3O^1 (-2479) + e_aq^-1 (-1598) -> H^0 (-4665) +At time : 99.904 ps Reaction : °OH^0 (-3374) + e_aq^-1 (-1462) -> OH^-1 (-4666) +At time : 100.2 ps Reaction : °OH^0 (-4158) + °OH^0 (-3446) -> H2O2^0 (-4667) +At time : 101.33 ps Reaction : H^0 (-4241) + e_aq^-1 (-1801) -> OH^-1 (-4668) + H_2^0 (-4669) +At time : 106.72 ps Reaction : °OH^0 (-3596) + °OH^0 (-4452) -> H2O2^0 (-4670) +At time : 108.44 ps Reaction : °OH^0 (-4400) + °OH^0 (-4203) -> H2O2^0 (-4671) +At time : 109.11 ps Reaction : °OH^0 (-2336) + e_aq^-1 (-564) -> OH^-1 (-4672) +At time : 109.23 ps Reaction : °OH^0 (-4150) + °OH^0 (-4365) -> H2O2^0 (-4673) +At time : 110.12 ps Reaction : °OH^0 (-2428) + e_aq^-1 (-2094) -> OH^-1 (-4674) +At time : 113.25 ps Reaction : °OH^0 (-3812) + °OH^0 (-3000) -> H2O2^0 (-4675) +At time : 115.2 ps Reaction : °OH^0 (-4371) + H^0 (-4372) -> No product +At time : 116.18 ps Reaction : °OH^0 (-3088) + e_aq^-1 (-57) -> OH^-1 (-4676) +At time : 116.69 ps Reaction : °OH^0 (-3490) + e_aq^-1 (-1186) -> OH^-1 (-4677) +At time : 116.87 ps Reaction : °OH^0 (-4176) + °OH^0 (-3640) -> H2O2^0 (-4678) +At time : 118.97 ps Reaction : e_aq^-1 (-4031) + H3O^1 (-4264) -> H^0 (-4679) +At time : 123.17 ps Reaction : °OH^0 (-4505) + °OH^0 (-4506) -> H2O2^0 (-4680) +At time : 125.52 ps Reaction : H^0 (-4679) + °OH^0 (-4449) -> No product +At time : 131.25 ps Reaction : H3O^1 (-4133) + OH^-1 (-4654) -> No product +At time : 132.47 ps Reaction : H3O^1 (-2827) + e_aq^-1 (-1190) -> H^0 (-4681) +At time : 133.08 ps Reaction : H3O^1 (-3089) + OH^-1 (-4676) -> No product +At time : 141 ps Reaction : °OH^0 (-3462) + °OH^0 (-4259) -> H2O2^0 (-4682) +At time : 145.45 ps Reaction : °OH^0 (-2496) + H^0 (-4251) -> No product +At time : 157 ps Reaction : H3O^1 (-3489) + OH^-1 (-4677) -> No product +At time : 162.74 ps Reaction : H3O^1 (-2917) + O^-1 (-4570) -> °OH^0 (-4683) +At time : 164.39 ps Reaction : °OH^0 (-3130) + °OH^0 (-4217) -> H2O2^0 (-4684) +At time : 165.88 ps Reaction : °OH^0 (-3560) + e_aq^-1 (-1045) -> OH^-1 (-4685) +At time : 166.77 ps Reaction : °OH^0 (-4162) + °OH^0 (-2334) -> H2O2^0 (-4686) +At time : 169.9 ps Reaction : °OH^0 (-3722) + H^0 (-4487) -> No product +At time : 171.38 ps Reaction : °OH^0 (-3670) + °OH^0 (-4683) -> H2O2^0 (-4687) +At time : 172.23 ps Reaction : °OH^0 (-3410) + e_aq^-1 (-1373) -> OH^-1 (-4688) +At time : 173.23 ps Reaction : H3O^1 (-3409) + OH^-1 (-4688) -> No product +At time : 174.01 ps Reaction : °OH^0 (-4050) + e_aq^-1 (-72) -> OH^-1 (-4689) +At time : 179.87 ps Reaction : H^0 (-4532) + °OH^0 (-4535) -> No product +At time : 183.22 ps Reaction : °OH^0 (-3972) + °OH^0 (-2830) -> H2O2^0 (-4690) +At time : 183.75 ps Reaction : °OH^0 (-2584) + e_aq^-1 (-373) -> OH^-1 (-4691) +At time : 185.28 ps Reaction : °OH^0 (-3466) + °OH^0 (-4260) -> H2O2^0 (-4692) +At time : 188.57 ps Reaction : H3O^1 (-3369) + OH^-1 (-4648) -> No product +At time : 199.3 ps Reaction : e_aq^-1 (-3980) + H3O^1 (-2933) -> H^0 (-4693) +At time : 199.72 ps Reaction : H3O^1 (-2741) + OH^-1 (-4649) -> No product +At time : 205.21 ps Reaction : H3O^1 (-4190) + OH^-1 (-4632) -> No product +At time : 206.4 ps Reaction : H^0 (-4213) + °OH^0 (-4315) -> No product +At time : 208.87 ps Reaction : °OH^0 (-3156) + H^0 (-4221) -> No product +At time : 209.9 ps Reaction : °OH^0 (-3092) + °OH^0 (-2608) -> H2O2^0 (-4694) +At time : 211.28 ps Reaction : °OH^0 (-4117) + °OH^0 (-3680) -> H2O2^0 (-4695) +At time : 212.79 ps Reaction : H3O^1 (-3751) + e_aq^-1 (-568) -> H^0 (-4696) +At time : 214.34 ps Reaction : H3O^1 (-3487) + e_aq^-1 (-1179) -> H^0 (-4697) +At time : 215.67 ps Reaction : OH^-1 (-4668) + °OH^0 (-4551) -> O^-1 (-4698) +At time : 219.79 ps Reaction : °OH^0 (-3928) + °OH^0 (-3068) -> H2O2^0 (-4699) +At time : 230.72 ps Reaction : H^0 (-4072) + °OH^0 (-3220) -> No product +At time : 236.98 ps Reaction : °OH^0 (-3642) + H^0 (-4459) -> No product +At time : 238.4 ps Reaction : °OH^0 (-4202) + H^0 (-4404) -> No product +At time : 243.36 ps Reaction : e_aq^-1 (-4007) + °OH^0 (-2712) -> OH^-1 (-4700) +At time : 245.04 ps Reaction : H3O^1 (-2671) + e_aq^-1 (-1895) -> H^0 (-4701) +At time : 245.36 ps Reaction : °OH^0 (-3890) + e_aq^-1 (-174) -> OH^-1 (-4702) +At time : 245.9 ps Reaction : H3O^1 (-3209) + e_aq^-1 (-1911) -> H^0 (-4703) +At time : 247.5 ps Reaction : °OH^0 (-2944) + H^0 (-4275) -> No product +At time : 249.46 ps Reaction : H3O^1 (-2637) + e_aq^-1 (-2129) -> H^0 (-4704) +At time : 273.18 ps Reaction : °OH^0 (-4128) + H^0 (-4127) -> No product +At time : 274.31 ps Reaction : °OH^0 (-2424) + °OH^0 (-4553) -> H2O2^0 (-4705) +At time : 279.07 ps Reaction : H3O^1 (-2959) + OH^-1 (-4672) -> No product +At time : 279.58 ps Reaction : °OH^0 (-3578) + °O^0 (-4445) -> HO_2°^0 (-4706) +At time : 288.95 ps Reaction : °OH^0 (-4083) + °OH^0 (-4363) -> H2O2^0 (-4707) +At time : 290.3 ps Reaction : °OH^0 (-2422) + H^0 (-4653) -> No product +At time : 293.72 ps Reaction : °OH^0 (-3686) + °OH^0 (-2922) -> H2O2^0 (-4708) +At time : 298.06 ps Reaction : °OH^0 (-3286) + °OH^0 (-3238) -> H2O2^0 (-4709) +At time : 318.98 ps Reaction : °OH^0 (-3720) + e_aq^-1 (-625) -> OH^-1 (-4710) +At time : 322.4 ps Reaction : °OH^0 (-3282) + °OH^0 (-2694) -> H2O2^0 (-4711) +At time : 333.32 ps Reaction : °OH^0 (-3124) + °OH^0 (-2338) -> H2O2^0 (-4712) +At time : 336.26 ps Reaction : °OH^0 (-3408) + e_aq^-1 (-1377) -> OH^-1 (-4713) +At time : 346.66 ps Reaction : °OH^0 (-3278) + e_aq^-1 (-1808) -> OH^-1 (-4714) +At time : 350.73 ps Reaction : °OH^0 (-4556) + °OH^0 (-4557) -> H2O2^0 (-4715) +At time : 351.86 ps Reaction : e_aq^-1 (-4046) + °OH^0 (-4526) -> OH^-1 (-4716) +At time : 365.36 ps Reaction : H3O^1 (-3583) + e_aq^-1 (-964) -> H^0 (-4717) +At time : 366.9 ps Reaction : °OH^0 (-3250) + °OH^0 (-2462) -> H2O2^0 (-4718) +At time : 371.41 ps Reaction : °OH^0 (-3458) + H^0 (-4187) -> No product +At time : 373.93 ps Reaction : °OH^0 (-2960) + °OH^0 (-4496) -> H2O2^0 (-4719) +At time : 379.77 ps Reaction : OH^-1 (-4710) + °OH^0 (-2940) -> O^-1 (-4720) +At time : 392.42 ps Reaction : °OH^0 (-3138) + °OH^0 (-3118) -> H2O2^0 (-4721) +At time : 406.81 ps Reaction : H3O^1 (-2537) + OH^-1 (-2301) -> No product +At time : 409.43 ps Reaction : °OH^0 (-3748) + H^0 (-4282) -> No product +At time : 416.4 ps Reaction : H3O^1 (-3273) + O^-1 (-4698) -> °OH^0 (-4722) +At time : 419.71 ps Reaction : °OH^0 (-3824) + e_aq^-1 (-327) -> OH^-1 (-4723) +At time : 429.55 ps Reaction : e_aq^-1 (-4010) + H3O^1 (-4009) -> H^0 (-4724) +At time : 430.89 ps Reaction : e_aq^-1 (-901) + H^0 (-4269) -> OH^-1 (-4725) + H_2^0 (-4726) +At time : 433.14 ps Reaction : H^0 (-4377) + °OH^0 (-4350) -> No product +At time : 439.42 ps Reaction : °OH^0 (-3562) + e_aq^-1 (-1014) -> OH^-1 (-4727) +At time : 443.74 ps Reaction : H^0 (-4064) + °OH^0 (-4233) -> No product +At time : 461.69 ps Reaction : H3O^1 (-2713) + OH^-1 (-4700) -> No product +At time : 466.52 ps Reaction : °OH^0 (-2754) + °O^0 (-4405) -> HO_2°^0 (-4728) +At time : 467.33 ps Reaction : °OH^0 (-2263) + H^0 (-4237) -> No product +At time : 469.79 ps Reaction : H3O^1 (-3909) + OH^-1 (-4650) -> No product +At time : 480.27 ps Reaction : H3O^1 (-2723) + OH^-1 (-2262) -> No product +At time : 483.9 ps Reaction : H^0 (-4141) + °OH^0 (-3128) -> No product +At time : 490.17 ps Reaction : °OH^0 (-2450) + OH^-1 (-4621) -> O^-1 (-4729) +At time : 491.7 ps Reaction : °OH^0 (-3628) + °OH^0 (-2554) -> H2O2^0 (-4730) +At time : 492.52 ps Reaction : °OH^0 (-2426) + H^0 (-4219) -> No product +At time : 501.74 ps Reaction : e_aq^-1 (-3989) + e_aq^-1 (-1819) -> OH^-1 (-4731) + OH^-1 (-4732) + H_2^0 (-4733) +At time : 501.97 ps Reaction : H3O^1 (-2965) + e_aq^-1 (-518) -> H^0 (-4734) +At time : 505.06 ps Reaction : °OH^0 (-3726) + e_aq^-1 (-653) -> OH^-1 (-4735) +At time : 509.54 ps Reaction : °OH^0 (-3488) + e_aq^-1 (-1160) -> OH^-1 (-4736) +At time : 515.17 ps Reaction : °OH^0 (-3672) + e_aq^-1 (-766) -> OH^-1 (-4737) +At time : 516.91 ps Reaction : °OH^0 (-3810) + OH^-1 (-4716) -> O^-1 (-4738) +At time : 521.42 ps Reaction : °OH^0 (-4061) + °OH^0 (-2340) -> H2O2^0 (-4739) +At time : 524.8 ps Reaction : °OH^0 (-3288) + e_aq^-1 (-1837) -> OH^-1 (-4740) +At time : 528.12 ps Reaction : H3O^1 (-2359) + O^-1 (-4635) -> °OH^0 (-4741) +At time : 530.15 ps Reaction : H3O^1 (-3727) + OH^-1 (-4735) -> No product +At time : 541.87 ps Reaction : H3O^1 (-3837) + e_aq^-1 (-303) -> H^0 (-4742) +At time : 546.69 ps Reaction : °OH^0 (-2362) + °O^0 (-4378) -> HO_2°^0 (-4743) +At time : 549.72 ps Reaction : H2O2^0 (-4709) + OH^-1 (-4740) -> HO_2^-1 (-4744) +At time : 554.82 ps Reaction : °OH^0 (-4140) + e_aq^-1 (-2180) -> OH^-1 (-4745) +At time : 559.23 ps Reaction : °OH^0 (-2710) + e_aq^-1 (-1874) -> OH^-1 (-4746) +At time : 567.73 ps Reaction : °O^0 (-4497) + °OH^0 (-3758) -> HO_2°^0 (-4747) +At time : 572.17 ps Reaction : H3O^1 (-3279) + OH^-1 (-4732) -> No product +At time : 576.28 ps Reaction : H3O^1 (-2577) + OH^-1 (-2313) -> No product +At time : 580.15 ps Reaction : H3O^1 (-3477) + e_aq^-1 (-1171) -> H^0 (-4748) +At time : 584.42 ps Reaction : °OH^0 (-2934) + °OH^0 (-4188) -> H2O2^0 (-4749) +At time : 595.15 ps Reaction : e_aq^-1 (-651) + °OH^0 (-4482) -> OH^-1 (-4750) +At time : 595.67 ps Reaction : °OH^0 (-3502) + °OH^0 (-4438) -> H2O2^0 (-4751) +At time : 604.97 ps Reaction : °OH^0 (-3846) + e_aq^-1 (-289) -> OH^-1 (-4752) +At time : 610.76 ps Reaction : H3O^1 (-3713) + OH^-1 (-4750) -> No product +At time : 613.47 ps Reaction : °OH^0 (-2916) + °OH^0 (-4471) -> H2O2^0 (-4753) +At time : 615.25 ps Reaction : H3O^1 (-3481) + e_aq^-1 (-1174) -> H^0 (-4754) +At time : 615.61 ps Reaction : °OH^0 (-2524) + e_aq^-1 (-1207) -> OH^-1 (-4755) +At time : 617.06 ps Reaction : H3O^1 (-3137) + OH^-1 (-4745) -> No product +At time : 620.79 ps Reaction : °OH^0 (-2586) + e_aq^-1 (-374) -> OH^-1 (-4756) +At time : 627.66 ps Reaction : °OH^0 (-3274) + °OH^0 (-4353) -> H2O2^0 (-4757) +At time : 632.8 ps Reaction : HO_2°^0 (-4600) + °OH^0 (-4186) -> No product +At time : 638.26 ps Reaction : °OH^0 (-2806) + H^0 (-4435) -> No product +At time : 645.01 ps Reaction : °OH^0 (-3304) + °OH^0 (-4236) -> H2O2^0 (-4758) +At time : 649.71 ps Reaction : °OH^0 (-3898) + °OH^0 (-3882) -> H2O2^0 (-4759) +At time : 655.83 ps Reaction : °OH^0 (-3838) + °OH^0 (-2598) -> H2O2^0 (-4760) +At time : 656.95 ps Reaction : H3O^1 (-3911) + e_aq^-1 (-140) -> H^0 (-4761) +At time : 657.47 ps Reaction : °OH^0 (-3114) + H^0 (-4554) -> No product +At time : 659.33 ps Reaction : °OH^0 (-4463) + H^0 (-4464) -> No product +At time : 659.47 ps Reaction : °OH^0 (-2966) + H^0 (-4734) -> No product +At time : 666.11 ps Reaction : °OH^0 (-3390) + °OH^0 (-2776) -> H2O2^0 (-4762) +At time : 672.31 ps Reaction : °OH^0 (-3744) + °OH^0 (-2580) -> H2O2^0 (-4763) +At time : 675.63 ps Reaction : °OH^0 (-2314) + e_aq^-1 (-554) -> OH^-1 (-4764) +At time : 683.07 ps Reaction : H3O^1 (-3807) + OH^-1 (-4756) -> No product +At time : 688.89 ps Reaction : e_aq^-1 (-4004) + H^0 (-4317) -> OH^-1 (-4765) + H_2^0 (-4766) +At time : 697.07 ps Reaction : °OH^0 (-3478) + e_aq^-1 (-1199) -> OH^-1 (-4767) +At time : 699.1 ps Reaction : OH^-1 (-4725) + H3O^1 (-2391) -> No product +At time : 703.28 ps Reaction : H3O^1 (-2415) + OH^-1 (-2325) -> No product +At time : 706.13 ps Reaction : °OH^0 (-4098) + °OH^0 (-4566) -> H2O2^0 (-4768) +At time : 706.66 ps Reaction : H3O^1 (-3743) + e_aq^-1 (-580) -> H^0 (-4769) +At time : 716.35 ps Reaction : °OH^0 (-3746) + e_aq^-1 (-573) -> OH^-1 (-4770) +At time : 725.98 ps Reaction : °OH^0 (-3728) + °OH^0 (-4486) -> H2O2^0 (-4771) +At time : 738.68 ps Reaction : °OH^0 (-3176) + °OH^0 (-2436) -> H2O2^0 (-4772) +At time : 745.5 ps Reaction : °OH^0 (-2930) + H^0 (-4693) -> No product +At time : 745.67 ps Reaction : °OH^0 (-4160) + OH^-1 (-4736) -> O^-1 (-4773) +At time : 749.26 ps Reaction : H2O2^0 (-4616) + OH^-1 (-4765) -> HO_2^-1 (-4774) +At time : 779.15 ps Reaction : °OH^0 (-3576) + °OH^0 (-2305) -> H2O2^0 (-4775) +At time : 839.33 ps Reaction : H3O^1 (-3177) + OH^-1 (-2259) -> No product +At time : 846.4 ps Reaction : H3O^1 (-2393) + e_aq^-1 (-806) -> H^0 (-4776) +At time : 849.3 ps Reaction : °OH^0 (-3486) + e_aq^-1 (-1191) -> OH^-1 (-4777) +At time : 869.62 ps Reaction : e_aq^-1 (-3986) + H3O^1 (-3111) -> H^0 (-4778) +At time : 900.33 ps Reaction : H2O2^0 (-4627) + H^0 (-4306) -> °OH^0 (-4779) +At time : 903.35 ps Reaction : H^0 (-4165) + e_aq^-1 (-1161) -> OH^-1 (-4780) + H_2^0 (-4781) +At time : 907.09 ps Reaction : °OH^0 (-3066) + HO_2°^0 (-4591) -> No product +At time : 907.41 ps Reaction : °OH^0 (-3622) + °OH^0 (-2892) -> H2O2^0 (-4782) +At time : 907.48 ps Reaction : °OH^0 (-4779) + °OH^0 (-2626) -> H2O2^0 (-4783) +At time : 947.99 ps Reaction : H3O^1 (-2641) + OH^-1 (-4674) -> No product +At time : 970.97 ps Reaction : °OH^0 (-2978) + °O^0 (-4507) -> HO_2°^0 (-4784) +At time : 1.0413 ns Reaction : H3O^1 (-4414) + e_aq^-1 (-1461) -> H^0 (-4785) +At time : 1.0629 ns Reaction : °OH^0 (-4184) + °OH^0 (-4142) -> H2O2^0 (-4786) +At time : 1.065 ns Reaction : °OH^0 (-3574) + °OH^0 (-3572) -> H2O2^0 (-4787) +At time : 1.0891 ns Reaction : °OH^0 (-3454) + e_aq^-1 (-1293) -> OH^-1 (-4788) +At time : 1.1077 ns Reaction : °OH^0 (-3428) + e_aq^-1 (-1379) -> OH^-1 (-4789) +At time : 1.1144 ns Reaction : °OH^0 (-2558) + °O^0 (-4458) -> HO_2°^0 (-4790) +At time : 1.12 ns Reaction : °OH^0 (-2824) + OH^-1 (-2289) -> O^-1 (-4792) +At time : 1.1381 ns Reaction : °OH^0 (-3956) + e_aq^-1 (-63) -> OH^-1 (-4793) +At time : 1.1464 ns Reaction : e_aq^-1 (-371) + e_aq^-1 (-412) -> OH^-1 (-4794) + OH^-1 (-4795) + H_2^0 (-4796) +At time : 1.1465 ns Reaction : H^0 (-4147) + °OH^0 (-4146) -> No product +At time : 1.1564 ns Reaction : H3O^1 (-3431) + OH^-1 (-4604) -> No product +At time : 1.1611 ns Reaction : °OH^0 (-3240) + °OH^0 (-4741) -> H2O2^0 (-4798) +At time : 1.1874 ns Reaction : H^0 (-4159) + e_aq^-1 (-1283) -> OH^-1 (-4799) + H_2^0 (-4800) +At time : 1.1879 ns Reaction : °OH^0 (-3754) + e_aq^-1 (-571) -> OH^-1 (-4801) +At time : 1.1882 ns Reaction : H^0 (-4145) + °OH^0 (-3154) -> No product +At time : 1.1895 ns Reaction : °OH^0 (-3542) + °OH^0 (-2388) -> H2O2^0 (-4802) +At time : 1.2064 ns Reaction : H3O^1 (-2957) + OH^-1 (-4770) -> No product +At time : 1.208 ns Reaction : H3O^1 (-2967) + OH^-1 (-4801) -> No product +At time : 1.2165 ns Reaction : °OH^0 (-2988) + °O^0 (-4292) -> HO_2°^0 (-4803) +At time : 1.2311 ns Reaction : H^0 (-4143) + e_aq^-1 (-2177) -> OH^-1 (-4804) + H_2^0 (-4805) +At time : 1.2438 ns Reaction : °OH^0 (-3354) + e_aq^-1 (-1499) -> OH^-1 (-4806) +At time : 1.2701 ns Reaction : H3O^1 (-3043) + e_aq^-1 (-243) -> H^0 (-4807) +At time : 1.2761 ns Reaction : e_aq^-1 (-4105) + °OH^0 (-3536) -> OH^-1 (-4808) +At time : 1.2784 ns Reaction : °OH^0 (-2956) + e_aq^-1 (-555) -> OH^-1 (-4809) +At time : 1.2869 ns Reaction : °OH^0 (-3236) + °OH^0 (-2698) -> H2O2^0 (-4812) +At time : 1.287 ns Reaction : °OH^0 (-3210) + H^0 (-4703) -> No product +At time : 1.2931 ns Reaction : °OH^0 (-4426) + e_aq^-1 (-1242) -> OH^-1 (-4813) +At time : 1.3299 ns Reaction : H3O^1 (-2953) + e_aq^-1 (-682) -> H^0 (-4814) +At time : 1.3627 ns Reaction : °OH^0 (-3464) + °OH^0 (-4428) -> H2O2^0 (-4815) +At time : 1.3679 ns Reaction : °OH^0 (-2904) + e_aq^-1 (-794) -> OH^-1 (-4816) +At time : 1.3725 ns Reaction : °OH^0 (-3756) + °OH^0 (-3752) -> H2O2^0 (-4817) +At time : 1.424 ns Reaction : e_aq^-1 (-1914) + e_aq^-1 (-1917) -> OH^-1 (-4819) + OH^-1 (-4820) + H_2^0 (-4821) +At time : 1.4308 ns Reaction : °OH^0 (-3248) + °O^0 (-4373) -> HO_2°^0 (-4823) +At time : 1.4343 ns Reaction : °OH^0 (-3530) + °OH^0 (-3528) -> H2O2^0 (-4824) +At time : 1.4358 ns Reaction : °OH^0 (-4178) + H^0 (-4769) -> No product +At time : 1.4426 ns Reaction : °OH^0 (-2522) + e_aq^-1 (-1159) -> OH^-1 (-4825) +At time : 1.456 ns Reaction : °OH^0 (-3096) + e_aq^-1 (-71) -> OH^-1 (-4826) +At time : 1.5089 ns Reaction : H3O^1 (-4104) + OH^-1 (-4808) -> No product +At time : 1.5274 ns Reaction : H3O^1 (-3681) + OH^-1 (-4737) -> No product +At time : 1.55 ns Reaction : °O^0 (-4121) + °OH^0 (-4191) -> HO_2°^0 (-4828) +At time : 1.5663 ns Reaction : °OH^0 (-3874) + e_aq^-1 (-207) -> OH^-1 (-4829) +At time : 1.5804 ns Reaction : H3O^1 (-2611) + OH^-1 (-4793) -> No product +At time : 1.581 ns Reaction : e_aq^-1 (-536) + °OH^0 (-4494) -> OH^-1 (-4830) +At time : 1.5942 ns Reaction : H3O^1 (-2765) + OH^-1 (-4666) -> No product +At time : 1.597 ns Reaction : O^-1 (-4773) + H3O^1 (-2381) -> °OH^0 (-4832) +At time : 1.6493 ns Reaction : OH^-1 (-4830) + H3O^1 (-4495) -> No product +At time : 1.6498 ns Reaction : °OH^0 (-2476) + e_aq^-1 (-1943) -> OH^-1 (-4835) +At time : 1.6965 ns Reaction : OH^-1 (-4662) + H3O^1 (-3421) -> No product +At time : 1.7301 ns Reaction : °OH^0 (-4047) + °OH^0 (-3016) -> H2O2^0 (-4836) +At time : 1.7361 ns Reaction : H2O2^0 (-4711) + e_aq^-1 (-1816) -> OH^-1 (-4837) + °OH^0 (-4838) +At time : 1.7458 ns Reaction : °OH^0 (-4002) + °OH^0 (-3160) -> H2O2^0 (-4839) +At time : 1.7483 ns Reaction : °OH^0 (-2872) + °OH^0 (-4265) -> H2O2^0 (-4840) +At time : 1.7602 ns Reaction : °OH^0 (-3260) + °OH^0 (-2272) -> H2O2^0 (-4841) +At time : 1.7719 ns Reaction : °OH^0 (-3372) + °OH^0 (-4413) -> H2O2^0 (-4842) +At time : 1.8217 ns Reaction : e_aq^-1 (-3992) + °OH^0 (-3990) -> OH^-1 (-4843) +At time : 1.8403 ns Reaction : H3O^1 (-2987) + e_aq^-1 (-378) -> H^0 (-4844) +At time : 1.8474 ns Reaction : H3O^1 (-3991) + OH^-1 (-4843) -> No product +At time : 1.8724 ns Reaction : H3O^1 (-3571) + OH^-1 (-2304) -> No product +At time : 1.8826 ns Reaction : H3O^1 (-3745) + OH^-1 (-4809) -> No product +At time : 1.8857 ns Reaction : °OH^0 (-2696) + HO_2^-1 (-4744) -> HO_2°^0 (-4846) + OH^-1 (-4847) +At time : 1.9597 ns Reaction : °OH^0 (-3666) + e_aq^-1 (-780) -> OH^-1 (-4849) +At time : 2.0377 ns Reaction : H3O^1 (-2855) + OH^-1 (-4636) -> No product +At time : 2.0397 ns Reaction : °OH^0 (-4478) + °OH^0 (-4481) -> H2O2^0 (-4850) +At time : 2.0436 ns Reaction : H3O^1 (-3265) + OH^-1 (-4663) -> No product +At time : 2.0651 ns Reaction : °OH^0 (-2962) + °OH^0 (-4491) -> H2O2^0 (-4852) +At time : 2.074 ns Reaction : °OH^0 (-2996) + °OH^0 (-2992) -> H2O2^0 (-4853) +At time : 2.0855 ns Reaction : OH^-1 (-4788) + H3O^1 (-3463) -> No product +At time : 2.0989 ns Reaction : °OH^0 (-4501) + e_aq^-1 (-525) -> OH^-1 (-4855) +At time : 2.1125 ns Reaction : °OH^0 (-3382) + °OH^0 (-2374) -> H2O2^0 (-4856) +At time : 2.1538 ns Reaction : °OH^0 (-4154) + °OH^0 (-3422) -> H2O2^0 (-4857) +At time : 2.1579 ns Reaction : OH^-1 (-4847) + H3O^1 (-3237) -> No product +At time : 2.1673 ns Reaction : H^0 (-4785) + e_aq^-1 (-1453) -> OH^-1 (-4858) + H_2^0 (-4859) +At time : 2.1679 ns Reaction : °OH^0 (-2516) + e_aq^-1 (-1332) -> OH^-1 (-4860) +At time : 2.1841 ns Reaction : H3O^1 (-2557) + e_aq^-1 (-838) -> H^0 (-4861) +At time : 2.2395 ns Reaction : °OH^0 (-3504) + °OH^0 (-2296) -> H2O2^0 (-4863) +At time : 2.2924 ns Reaction : °OH^0 (-3122) + °OH^0 (-2620) -> H2O2^0 (-4864) +At time : 2.2968 ns Reaction : °OH^0 (-3352) + °OH^0 (-2500) -> H2O2^0 (-4866) +At time : 2.3741 ns Reaction : H3O^1 (-2949) + e_aq^-1 (-604) -> H^0 (-4867) +At time : 2.4638 ns Reaction : e_aq^-1 (-137) + e_aq^-1 (-139) -> OH^-1 (-4868) + OH^-1 (-4869) + H_2^0 (-4870) +At time : 2.4833 ns Reaction : H3O^1 (-2939) + O^-1 (-4720) -> °OH^0 (-4871) +At time : 2.4875 ns Reaction : °OH^0 (-2293) + OH^-1 (-2292) -> O^-1 (-4872) +At time : 2.5375 ns Reaction : °OH^0 (-2882) + e_aq^-1 (-937) -> OH^-1 (-4873) +At time : 2.5867 ns Reaction : OH^-1 (-4795) + H3O^1 (-4525) -> No product +At time : 2.5872 ns Reaction : °OH^0 (-4026) + e_aq^-1 (-981) -> OH^-1 (-4874) +At time : 2.5897 ns Reaction : H3O^1 (-3115) + e_aq^-1 (-2201) -> H^0 (-4875) +At time : 2.6414 ns Reaction : °OH^0 (-3993) + °OH^0 (-2914) -> H2O2^0 (-4876) +At time : 2.6876 ns Reaction : °OH^0 (-3256) + °OH^0 (-2356) -> H2O2^0 (-4877) +At time : 2.7809 ns Reaction : OH^-1 (-4835) + H3O^1 (-4329) -> No product +At time : 2.8106 ns Reaction : °OH^0 (-4722) + H^0 (-4552) -> No product +At time : 2.8618 ns Reaction : °OH^0 (-2832) + e_aq^-1 (-1149) -> OH^-1 (-4880) +At time : 2.8625 ns Reaction : °OH^0 (-4053) + °OH^0 (-3944) -> H2O2^0 (-4881) +At time : 2.8801 ns Reaction : °OH^0 (-3508) + °OH^0 (-4832) -> H2O2^0 (-4882) +At time : 2.9468 ns Reaction : e_aq^-1 (-4089) + H3O^1 (-3207) -> H^0 (-4884) +At time : 2.9629 ns Reaction : H3O^1 (-2825) + OH^-1 (-4767) -> No product +At time : 2.9667 ns Reaction : H3O^1 (-2963) + OH^-1 (-4855) -> No product +At time : 3.0027 ns Reaction : °OH^0 (-3456) + e_aq^-1 (-1235) -> OH^-1 (-4885) +At time : 3.0371 ns Reaction : °OH^0 (-2860) + °O^0 (-4261) -> HO_2°^0 (-4886) +At time : 3.0518 ns Reaction : H3O^1 (-3491) + OH^-1 (-4825) -> No product +At time : 3.1345 ns Reaction : °OH^0 (-3470) + °OH^0 (-2808) -> H2O2^0 (-4887) +At time : 3.1987 ns Reaction : °OH^0 (-3802) + e_aq^-1 (-411) -> OH^-1 (-4888) +At time : 3.2624 ns Reaction : O^-1 (-4729) + e_aq^-1 (-2008) -> OH^-1 (-4889) + OH^-1 (-4890) +At time : 3.289 ns Reaction : H3O^1 (-2679) + e_aq^-1 (-1818) -> H^0 (-4892) +At time : 3.289 ns Reaction : H3O^1 (-2819) + OH^-1 (-4885) -> No product +At time : 3.289 ns Reaction : e_aq^-1 (-4115) + H3O^1 (-3677) -> H^0 (-4893) +At time : 3.3656 ns Reaction : °OH^0 (-3648) + HO_2°^0 (-4790) -> No product +At time : 3.4315 ns Reaction : °OH^0 (-2622) + °OH^0 (-4212) -> H2O2^0 (-4894) +At time : 3.5248 ns Reaction : H3O^1 (-3295) + e_aq^-1 (-1864) -> H^0 (-4895) +At time : 3.5337 ns Reaction : H^0 (-4665) + °OH^0 (-4392) -> No product +At time : 3.5871 ns Reaction : HO_2°^0 (-4743) + e_aq^-1 (-1861) -> HO_2^-1 (-4897) +At time : 3.5971 ns Reaction : H^0 (-4844) + °OH^0 (-4514) -> No product +At time : 3.6552 ns Reaction : °OH^0 (-4475) + H^0 (-4476) -> No product +At time : 3.6756 ns Reaction : H3O^1 (-3641) + e_aq^-1 (-830) -> H^0 (-4898) +At time : 3.6898 ns Reaction : H2O2^0 (-4657) + e_aq^-1 (-1257) -> OH^-1 (-4899) + °OH^0 (-4900) +At time : 3.7641 ns Reaction : °OH^0 (-3398) + e_aq^-1 (-1400) -> OH^-1 (-4901) +At time : 3.7736 ns Reaction : °OH^0 (-3770) + e_aq^-1 (-503) -> OH^-1 (-4902) +At time : 3.806 ns Reaction : °OH^0 (-3098) + e_aq^-1 (-82) -> OH^-1 (-4904) +At time : 3.8271 ns Reaction : e_aq^-1 (-4112) + °OH^0 (-4110) -> OH^-1 (-4905) +At time : 3.8292 ns Reaction : °OH^0 (-2688) + °O^0 (-4242) -> HO_2°^0 (-4906) +At time : 3.9255 ns Reaction : H3O^1 (-3003) + e_aq^-1 (-405) -> H^0 (-4908) +At time : 3.9697 ns Reaction : °OH^0 (-3476) + °OH^0 (-3474) -> H2O2^0 (-4909) +At time : 3.9889 ns Reaction : °OH^0 (-2818) + e_aq^-1 (-1250) -> OH^-1 (-4910) +At time : 4.0053 ns Reaction : °OH^0 (-3090) + e_aq^-1 (-61) -> OH^-1 (-4912) +At time : 4.1037 ns Reaction : °OH^0 (-4470) + °OH^0 (-4469) -> H2O2^0 (-4914) +At time : 4.2239 ns Reaction : H3O^1 (-2639) + OH^-1 (-2253) -> No product +At time : 4.2779 ns Reaction : H3O^1 (-3191) + OH^-1 (-4889) -> No product +At time : 4.3566 ns Reaction : °OH^0 (-3920) + °OH^0 (-3916) -> H2O2^0 (-4920) +At time : 4.3695 ns Reaction : °OH^0 (-4144) + °OH^0 (-3150) -> H2O2^0 (-4921) +At time : 4.3849 ns Reaction : H2O2^0 (-4684) + e_aq^-1 (-2184) -> OH^-1 (-4922) + °OH^0 (-4923) +At time : 4.4025 ns Reaction : H3O^1 (-4099) + OH^-1 (-4899) -> No product +At time : 4.4148 ns Reaction : °OH^0 (-3358) + e_aq^-1 (-1501) -> OH^-1 (-4924) +At time : 4.4562 ns Reaction : °OH^0 (-2974) + HO_2°^0 (-4747) -> No product +At time : 4.4659 ns Reaction : °OH^0 (-4923) + H^0 (-4304) -> No product +At time : 4.6194 ns Reaction : H3O^1 (-3001) + OH^-1 (-4888) -> No product +At time : 4.6459 ns Reaction : H3O^1 (-2821) + OH^-1 (-4813) -> No product +At time : 4.6925 ns Reaction : °OH^0 (-3136) + °OH^0 (-4215) -> H2O2^0 (-4926) +At time : 4.8521 ns Reaction : °OH^0 (-3926) + e_aq^-1 (-126) -> OH^-1 (-4927) +At time : 4.8591 ns Reaction : °OH^0 (-4382) + e_aq^-1 (-1898) -> OH^-1 (-4929) +At time : 4.8617 ns Reaction : °OH^0 (-2366) + e_aq^-1 (-1918) -> OH^-1 (-4930) +At time : 4.8712 ns Reaction : H3O^1 (-3941) + OH^-1 (-4689) -> No product +At time : 5.0781 ns Reaction : H3O^1 (-3765) + e_aq^-1 (-498) -> H^0 (-4931) +At Time : 5.0781 ns the Mesh has 512 x 512 x 512 voxels with Resolution 6.25 nm during next 98.084 ns +At time : 5.145 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.2455 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 5.2624 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.3231 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.3609 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.4101 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.5434 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.5834 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 5.6037 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.6854 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 5.7501 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.7582 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 5.8485 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 5.8601 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.8666 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 5.8743 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.9561 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 5.9909 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 6.0445 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 6.0721 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.1345 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.1631 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 6.3145 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 6.4503 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.4806 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 6.5328 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.5969 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 6.6853 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7116 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 6.7219 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.7478 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7573 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7657 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.9407 ns Reaction : °OH^0 + H^0 -> No product +At time : 6.9459 ns Reaction : °OH^0 + H^0 -> No product +At time : 6.9994 ns Reaction : °OH^0 + H^0 -> No product +At time : 7.0151 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.0257 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.1183 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.1434 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 7.1642 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 7.3921 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.4431 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 7.5004 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.6459 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.8253 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 7.8309 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 7.901 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.9178 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.0567 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 8.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.1829 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.3067 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 8.3284 ns Reaction : H3O^1 + O^-1 -> °OH^0 +At time : 8.4588 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 8.4829 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.718 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 8.7485 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.7592 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 8.8347 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.9621 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.9632 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 9.0025 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.0312 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 9.0658 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.0707 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 9.1082 ns Reaction : °OH^0 + H^0 -> No product +At time : 9.1251 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 9.3064 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 9.545 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 9.6598 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 9.8069 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.9013 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 10.107 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.125 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 10.149 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.242 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 10.278 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 10.298 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.314 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.676 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 10.826 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.833 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 10.883 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 11.053 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 11.08 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 11.095 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 11.215 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 11.271 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 11.33 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 11.599 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 11.603 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 11.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 11.936 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 11.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.051 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.112 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.121 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.507 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.509 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 12.543 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 12.575 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 12.584 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 12.602 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 12.667 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.856 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.916 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.919 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.992 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 13.136 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 13.178 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 13.477 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 13.842 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 14.005 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 14.237 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 14.436 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 14.633 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 14.725 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.851 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.942 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.946 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 15.119 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.169 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 15.195 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.445 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.515 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.698 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.774 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.838 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 15.882 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 16.699 ns Reaction : °OH^0 + H^0 -> No product +At time : 16.753 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 16.908 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 17.291 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 17.474 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 17.487 ns Reaction : °OH^0 + H^0 -> No product +At time : 17.888 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.109 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 18.187 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 18.334 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.643 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.685 ns Reaction : °OH^0 + H^0 -> No product +At time : 18.798 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 18.83 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 19.447 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 19.944 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 19.951 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 19.97 ns Reaction : °OH^0 + H^0 -> No product +At time : 19.997 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 20.042 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 20.113 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 20.817 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 21.081 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.137 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 21.224 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 21.496 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.509 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.643 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 21.73 ns Reaction : °OH^0 + H^0 -> No product +At time : 21.856 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.038 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.098 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.254 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.672 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.688 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 22.795 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.829 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 23.31 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 23.591 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 23.895 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 24.261 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 24.303 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.574 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.912 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 25.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 25.203 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 25.303 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 25.46 ns Reaction : °OH^0 + H^0 -> No product +At time : 25.613 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 25.809 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 25.871 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 26.071 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 26.204 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 26.239 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.619 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.841 ns Reaction : H^0 + H^0 -> H_2^0 +At time : 28.379 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 28.486 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 29.39 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 29.519 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 29.534 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 29.61 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 30.512 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 30.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 30.745 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 30.778 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.274 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.386 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.503 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 31.865 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.875 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.903 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 31.971 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.118 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.341 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.371 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.861 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 32.873 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 33.328 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 33.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 33.978 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.048 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 34.161 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.285 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 34.329 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 34.367 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.748 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.427 ns Reaction : e_aq^-1 + HO_2°^0 -> HO_2^-1 +At time : 35.442 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.544 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.568 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.015 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.173 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 36.245 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.477 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 37.032 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 37.189 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 37.24 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 37.282 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 37.347 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 37.563 ns Reaction : °OH^0 + H^0 -> No product +At time : 37.616 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.042 ns Reaction : °OH^0 + HO_2^-1 -> HO_2°^0 + OH^-1 +At time : 38.183 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.281 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.355 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 38.416 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.486 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 38.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.705 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 39.076 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.241 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 39.266 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.813 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 39.824 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.905 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 40.053 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 40.17 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 40.938 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 40.942 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 41.144 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 41.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 41.302 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.112 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.474 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 42.533 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.607 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 42.644 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 42.653 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 42.925 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.065 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 43.203 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 43.529 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.578 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 43.758 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 43.858 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.865 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 43.894 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.918 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 44.037 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 44.379 ns Reaction : °OH^0 + H^0 -> No product +At time : 44.575 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.923 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.272 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.278 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 45.284 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 45.346 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.423 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.979 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 46.915 ns Reaction : °OH^0 + H^0 -> No product +At time : 47.13 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 47.305 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 47.339 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 48.053 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 48.466 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 48.604 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 48.768 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.064 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.747 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.938 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 51.434 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 51.527 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 52.119 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 52.194 ns Reaction : H^0 + O_2^-1 -> HO_2^-1 +At time : 52.666 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 53.096 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.198 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.436 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.646 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 53.697 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.803 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 54.132 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.649 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 54.694 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.815 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 54.817 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.895 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 55.195 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 55.231 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.237 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 55.621 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 55.993 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.039 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 56.149 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.275 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.506 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.541 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.595 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 57.156 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 57.386 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 57.451 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.547 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 58.378 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 59.431 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 59.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.025 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.349 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.533 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.971 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 61.038 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 61.361 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 61.515 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 61.682 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 61.925 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.312 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.479 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 62.479 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.549 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.592 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.599 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 62.892 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.06 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 63.062 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.202 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.439 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.636 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.769 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 64.129 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.219 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.295 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 64.339 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.426 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 64.489 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 64.561 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.613 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 64.937 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 65.338 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 66.034 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 66.512 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 66.986 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 67.831 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 67.983 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 68.052 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 68.199 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 68.414 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 68.778 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 68.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 69.019 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 69.863 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 70.337 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 70.634 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 70.635 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 70.807 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 71.696 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 71.758 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 72.18 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 72.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 72.785 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 73.403 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 74.583 ns Reaction : e_aq^-1 + H2O^0 -> H^0 + OH^-1 +At time : 74.804 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 74.899 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 74.955 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 75.066 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 75.428 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 76.336 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 76.382 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 76.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 76.928 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 77.249 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 77.977 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.106 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.182 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.431 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 78.568 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.647 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 79.024 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 79.566 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 79.882 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 80.483 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 80.953 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.294 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.489 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 81.592 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.671 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 81.686 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.764 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.946 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.969 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 82.056 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.097 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.124 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 83.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.304 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 83.845 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.871 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.978 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.435 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.579 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 84.702 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.712 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.764 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 85.373 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 86.026 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 86.187 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 86.23 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 86.407 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 87.772 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.229 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.514 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.975 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 89.877 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 90.165 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.191 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.607 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 90.657 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.835 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 91.079 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.086 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.179 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.439 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 91.519 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 92.688 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 93.417 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 93.537 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 93.661 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 94.553 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 94.574 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 94.692 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 94.909 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 95.059 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 95.924 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 96.264 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.491 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.582 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.983 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.316 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.611 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 97.754 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.777 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 98.085 ns the Mesh has 256 x 256 x 256 voxels with Resolution 12.5 nm during next 470.11 ns +At time : 98.341 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.483 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.517 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.755 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 98.919 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.009 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.016 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.121 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.461 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.618 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.694 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.754 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.35 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.63 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 101.52 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 101.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 101.79 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 101.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 101.95 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 102.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.44 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 104.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 104.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 105.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 105.42 ns Reaction : H^0 + O_2^-1 -> HO_2^-1 +At time : 105.97 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 105.98 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 106.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 108.29 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 108.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 108.85 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 108.92 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 109.1 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 109.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 109.72 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 109.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 109.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 110.22 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 112.52 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 112.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 112.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 113.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 115.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.72 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 116.85 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 119.17 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 120 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 120.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 120.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 122.32 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 123.12 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 123.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 124.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 124.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 125.21 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 126.44 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 126.48 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 126.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 127.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 127.24 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 127.32 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 128.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 128.81 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 129.88 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 129.99 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 130.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 131.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 132.15 ns Reaction : °OH^0 + H^0 -> No product +At time : 133.26 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 133.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 133.67 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 133.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 134.75 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 136.25 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 136.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.14 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 138.42 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 138.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 140.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.64 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 141.72 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 141.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.39 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 142.39 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 142.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 143.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 144.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 144.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 145.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 146.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 146.85 ns Reaction : e_aq^-1 + HO_2°^0 -> HO_2^-1 +At time : 147.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 147.47 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 147.87 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 148.29 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 148.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 148.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 149.15 ns Reaction : °OH^0 + H^0 -> No product +At time : 149.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 150.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 150.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 151.18 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 153.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 153.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 154.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 155.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 155.4 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 155.78 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 156.24 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 156.24 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 156.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 156.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 158.03 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 158.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 158.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 159.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 159.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 160.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 160.52 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 161.56 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 161.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 161.9 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 162 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.12 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 162.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 163.35 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 163.58 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 164.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 165 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 165.23 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 166.02 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 166.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 166.6 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 166.84 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 166.87 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 166.98 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 167.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 168.61 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 168.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 169.07 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 169.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 170.36 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.46 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 173.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 173.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.8 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 175.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 175.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 176.62 ns Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 176.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 177.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 177.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.69 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.87 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 181.79 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 181.99 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 182.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 183.78 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 183.84 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 183.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 184.99 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 185.12 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 185.51 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 185.61 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 190.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 191.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 192.09 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 192.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 193.12 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 193.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 196.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 197.25 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 197.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 200.43 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 201.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 202.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 202.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 203.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 205.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 205.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 206.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.03 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 207.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 209.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.13 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 210.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.94 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 211.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 211.72 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 212.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 212.22 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 213.82 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 213.85 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 214.15 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 215.39 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 216.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 218.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 218.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 219.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 220.62 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 221.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 222.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 222.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 223.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 224.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 224.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 225.27 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 225.33 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 225.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 226.62 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 228.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 230.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 230.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 231.27 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 231.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 232.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 232.08 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 232.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.35 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.67 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 234.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 236.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 236.48 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 237.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 237.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 238.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.88 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 239.94 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 240.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.97 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 242.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 243.33 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 244.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 247.23 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 248.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 249.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 251.38 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 251.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 251.72 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 251.73 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 252.77 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 253 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 255.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 257.06 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 257.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 258.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 258.78 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 259.12 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 259.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 261.37 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 263.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 263.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 263.61 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 264.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 265.89 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 266.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 267.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 268.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 270.71 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 270.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 271 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 271.1 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 271.86 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 272.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 272.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 272.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 273.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 276.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 277.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 277.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 278.46 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 280.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 282.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 282.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 283.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.98 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 286.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 286.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 286.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 287.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 287.35 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 288.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 292.36 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 292.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 293.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 295.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 297.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 297.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 298.07 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 298.21 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 299.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 299.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 299.76 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 301.26 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 301.35 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 303.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 303.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 303.31 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 303.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 305.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 305.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 306.83 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 307.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 307.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 308.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 308.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 309.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 309.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 310.78 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 312.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 312.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 313.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 313.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 314.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 314.79 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.59 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 317.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.42 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.78 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 321.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 323.43 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 323.96 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 325.99 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 326.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 327.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 333.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 338.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 339.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 341.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 341.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 342.59 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 344.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 344.5 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 344.53 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 344.88 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 344.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 346.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 349.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 350.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 352.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.79 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 357.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 358.49 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 361.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 362.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 363.36 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 363.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 364.52 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 365.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.59 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 369.07 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 369.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 369.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 370.34 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 371.03 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 373.58 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 374.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 374.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 375.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 376.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 377.11 ns the Mesh has 128 x 128 x 128 voxels with Resolution 25 nm during next 1.8652 us +At time : 382.02 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 382.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 382.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 382.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 383.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 383.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 385.3 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 385.7 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 387.15 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 387.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 387.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 388.23 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 389.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 390.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 391.41 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 392.36 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 393.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 395.11 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 395.95 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 397.79 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 398.41 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 401.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 401.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 401.86 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 402.11 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 403.41 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 406.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 408.83 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 410.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 411.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 412.9 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 413.77 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 417.28 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 418.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 419.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 422.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 422.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 423.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 423.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 425.41 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 427.59 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 429.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 429.92 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 432 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 432.57 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 435.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 439.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 441.95 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 442.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 444.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 444.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 448.34 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 449.42 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 450.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 463.47 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 464.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 464.34 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 465.25 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 465.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 465.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 466.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 467.52 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 468.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 471.42 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 471.65 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 473.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 473.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 478.6 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 482.64 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 483.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 483.93 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 484.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 485.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 485.83 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 489.65 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 490.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 491.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 494.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 495.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 498.32 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 499.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 502.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 504.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 506.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 506.38 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 507.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 512.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 512.45 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 513.84 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 518.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 519.8 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 522.53 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 524.14 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 524.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 525.09 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 526.04 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 528.39 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 529.38 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 531.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 531.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 531.9 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 532.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 532.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 533.82 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 543.22 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 551.17 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 551.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 554.35 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 554.47 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 558.57 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 559.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 563.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 568.3 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 574.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 576.6 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 578.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 586.26 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 586.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 587.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 591.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 591.63 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 599.36 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 600.05 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 602.78 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 605.14 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 605.68 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 605.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 609.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 611.77 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 614.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 616.08 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 616.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 617.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 624.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 627.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 628.63 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 643.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 657.74 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 658.58 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 661.78 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 670.13 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 671.37 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 673.9 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 676.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 680.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 684.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 685.15 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 685.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 688.56 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 690.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 700.42 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 702.85 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 703.34 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 703.68 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 704.32 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 705.19 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 706.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 707.54 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 708.13 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 710.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 713.63 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 713.99 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 723.76 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 726.36 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 726.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 735.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 736.04 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 743.15 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 743.35 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 743.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 746.77 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 747.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 748.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 748.19 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 754.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 763.25 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 764.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 767.27 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 767.98 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 775.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 785.92 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 790.3 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 791.83 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 796.34 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 800.22 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 800.54 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 802.21 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 802.99 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 803.27 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 805.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 817.51 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 824.85 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 826.15 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 833.54 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 842.99 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 843.07 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 845.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 852.51 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 865.7 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 866.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 869.46 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 872.09 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 873.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 879.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 883.72 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 888.48 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 892.13 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 895.13 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 899.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 905.47 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 907.09 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 908.14 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 926.55 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 930.82 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 937.39 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 938.33 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 941.8 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 942.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 945.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 947.74 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 958.63 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 960.32 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 962.54 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 964.89 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 965.42 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 965.43 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 969.79 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 971.07 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 979.33 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 984.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 987.05 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 989.2 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 990.05 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.0074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0243 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.0261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0261 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.0271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0339 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.0347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0409 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.0514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0527 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 1.0545 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0609 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.0632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1301 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.1404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1538 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.1545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1558 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.158 us Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 1.1616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1785 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.1805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1885 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 1.1927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1976 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2088 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.261 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.2616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2765 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2878 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2978 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.3017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3175 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.3237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3377 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.3399 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.3418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3526 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 1.3534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3551 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 1.3604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4264 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4324 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4451 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.4497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4626 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4867 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 1.4932 us the Mesh has 64 x 64 x 64 voxels with Resolution 50 nm during next 7.4456 us +At time : 1.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5322 us Reaction : H3O^1 + OH^-1 -> No product +At time : 1.5496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5661 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.5684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5809 us Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 1.5829 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.5922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6541 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6702 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.6711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.686 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6947 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.7079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7212 us Reaction : H3O^1 + OH^-1 -> No product +At time : 1.7324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7338 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.735 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.7491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7891 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 1.7933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7944 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 1.7962 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8653 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.877 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.8781 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9533 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.9537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0074 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0306 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0324 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.0352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0721 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0982 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1096 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1274 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1686 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1818 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2117 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.2125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2245 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.2307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2626 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.2642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2786 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.2877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3269 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.3324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3667 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.3718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4014 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4016 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4187 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4795 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5919 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6239 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 2.6281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6294 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6646 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6913 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7075 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.7091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7113 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.7158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7708 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8391 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8515 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8818 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.159 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.1619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1791 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.1945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2021 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 3.2178 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.2203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2281 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.2299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3118 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3121 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3256 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.3256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3286 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3581 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4072 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.4139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4341 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 3.4363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4672 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.4748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4971 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.5054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5819 us Reaction : H3O^1 + OH^-1 -> No product +At time : 3.5868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6316 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 3.6348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6368 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 3.6373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7842 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.7845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7905 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.7933 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8036 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.8055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8286 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8733 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.914 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.9206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.964 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.9641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0322 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.0375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0649 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 4.0704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0904 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.0951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1718 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.191 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 4.1948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2549 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2668 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.31 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.3149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.537 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.5408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6403 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.6456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7323 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.7531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7792 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9763 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.9902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0358 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0621 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.0647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0653 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1278 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1613 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1647 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1795 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1874 us Reaction : H3O^1 + OH^-1 -> No product +At time : 5.1887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2896 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3544 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.3597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.45 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.4543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4959 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.4983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5899 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.5917 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.5924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.679 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.6857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7796 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 5.7956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 5.9575 us the Mesh has 32 x 32 x 32 voxels with Resolution 100 nm during next 29.767 us +At time : 5.9641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0037 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.0046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0727 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.0757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1865 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.1973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4007 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.485 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.4859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5358 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.5371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6141 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6254 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.6261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7242 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.7247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7672 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.7703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8536 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.8567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.924 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.939 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.9396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0591 us Reaction : OH^-1 + H3O^1 -> No product +At time : 7.0604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4052 us Reaction : OH^-1 + H3O^1 -> No product +At time : 7.4177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5364 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5474 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.5497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7102 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.7111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8124 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.8139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8597 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 7.8609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8634 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 7.8641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8725 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.9556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0746 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0901 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 8.0948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1637 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.1663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2367 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4091 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 8.4098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4359 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.4406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8917 us Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 8.8939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0231 us Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 9.0233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0249 us Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 9.0329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1686 us Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 9.1724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6099 us Reaction : OH^-1 + H3O^1 -> No product +At time : 9.6129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.735 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 9.7419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8464 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 9.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8613 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9715 us Reaction : OH^-1 + H3O^1 -> No product +At time : 9.9804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.028 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.273 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.319 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 11.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.539 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.668 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.881 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.974 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 11.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.693 us Reaction : H3O^1 + OH^-1 -> No product +At time : 12.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.855 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 12.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.896 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.008 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 13.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.029 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.038 us Reaction : OH^-1 + H3O^1 -> No product +At time : 13.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.154 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.288 us Reaction : OH^-1 + H3O^1 -> No product +At time : 13.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.522 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.652 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.713 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.715 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.838 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.922 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 14.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.394 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 15.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.423 us Reaction : OH^-1 + H3O^1 -> No product +At time : 15.426 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.697 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 15.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.182 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.312 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.327 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.654 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.674 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 16.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.317 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.759 us Reaction : OH^-1 + H3O^1 -> No product +At time : 17.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.944 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.288 us Reaction : OH^-1 + H3O^1 -> No product +At time : 18.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.364 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.572 us Reaction : OH^-1 + H3O^1 -> No product +At time : 18.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.87 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 18.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.141 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.613 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.724 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 19.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.859 us Reaction : OH^-1 + H3O^1 -> No product +At time : 19.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.275 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 20.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.539 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.083 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.587 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 21.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.852 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.204 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.747 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.747 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.766 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.088 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.497 us Reaction : H3O^1 + OH^-1 -> No product +At time : 23.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 23.815 us the Mesh has 16 x 16 x 16 voxels with Resolution 200 nm during next 119.05 us +At time : 23.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.88 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 23.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.899 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 23.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.266 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.852 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.863 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.921 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.957 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.082 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.194 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.725 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 25.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.863 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.007 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.115 us Reaction : H3O^1 + OH^-1 -> No product +At time : 26.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.391 us Reaction : H3O^1 + OH^-1 -> No product +At time : 26.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.529 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.581 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 26.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.073 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 27.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.131 us Reaction : OH^-1 + H3O^1 -> No product +At time : 27.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.268 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.552 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.582 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 27.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.68 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.916 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.116 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.245 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.504 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.66 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.006 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.039 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.245 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.805 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.144 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 30.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.285 us Reaction : OH^-1 + H3O^1 -> No product +At time : 30.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.872 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.218 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.235 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.478 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 31.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.798 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.944 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.043 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 32.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.172 us Reaction : OH^-1 + H3O^1 -> No product +At time : 32.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.291 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.682 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 32.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.798 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.03 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.798 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 33.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.905 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 33.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.021 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.107 us Reaction : OH^-1 + H3O^1 -> No product +At time : 35.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.513 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 35.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.717 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.867 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.237 us Reaction : OH^-1 + H3O^1 -> No product +At time : 36.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.331 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.62 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.893 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 36.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.347 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 37.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.652 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.84 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.331 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.396 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.42 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.606 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.888 us Reaction : H3O^1 + OH^-1 -> No product +At time : 38.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.994 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.994 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.647 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.72 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.872 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.53 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 40.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.751 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.014 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.083 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.925 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.511 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 42.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.549 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.747 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.881 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.113 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.199 us Reaction : OH^-1 + H3O^1 -> No product +At time : 43.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.368 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 43.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.975 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 43.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.021 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.095 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.108 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.792 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.014 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.395 us Reaction : OH^-1 + H3O^1 -> No product +At time : 45.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.548 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.692 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 45.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.746 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.547 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.914 us Reaction : H3O^1 + OH^-1 -> No product +At time : 46.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.039 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.141 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.141 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.182 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.326 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 47.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.44 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 47.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.283 us Reaction : OH^-1 + H3O^1 -> No product +At time : 48.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.84 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.49 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.509 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 49.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.838 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.844 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.674 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.416 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 51.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.461 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 51.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.563 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.575 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 52.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.704 us Reaction : H3O^1 + OH^-1 -> No product +At time : 52.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.88 us Reaction : H3O^1 + OH^-1 -> No product +At time : 52.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.332 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.751 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.762 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.951 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.102 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.49 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.492 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 54.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.426 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.547 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.674 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.184 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.844 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.849 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.9 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 56.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.317 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.827 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 57.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.001 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 58.011 us Reaction : H3O^1 + OH^-1 -> No product +At time : 58.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.725 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.288 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 59.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.563 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 60.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.72 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.01 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 61.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.977 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 61.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.532 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.552 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.713 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.717 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.477 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 63.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.674 us Reaction : H3O^1 + OH^-1 -> No product +At time : 63.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.822 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 63.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.221 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 64.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.659 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 64.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.291 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 65.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.085 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 66.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.126 us Reaction : OH^-1 + H3O^1 -> No product +At time : 66.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.62 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.891 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 66.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.364 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 67.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.447 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.777 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 67.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.857 us Reaction : OH^-1 + H3O^1 -> No product +At time : 67.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.54 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 68.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.547 us Reaction : OH^-1 + H3O^1 -> No product +At time : 68.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.766 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.881 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 68.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.053 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 69.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.467 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 69.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.81 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.883 us Reaction : OH^-1 + H3O^1 -> No product +At time : 69.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.1 us Reaction : HO_2°^0 + OH^-1 -> O_2^-1 +At time : 70.116 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.604 us Reaction : OH^-1 + H3O^1 -> No product +At time : 70.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.878 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.986 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.406 us Reaction : OH^-1 + H3O^1 -> No product +At time : 71.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.741 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 71.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.751 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 71.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.863 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.24 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.269 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.312 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.553 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.647 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^ +============================================================================================ +================= lines above cut to keep file within limits =============================== +============================================================================================ + +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +*** G4Scheduler ends at time : 10 s +___________________________________ +End Processing and reset Gird, ScavengerTable, EventSet for new simulation!!!! + --------------------------End of Local Run------------------------------ The run has 2 events. Scavenger info: ************************************************************** -Scavenger:O_2^0 : 0.000273 (M) with : 5387144 (molecules)in: 32.768 (um3) +Scavenger:O_2^0 : 0.00027298 (M) with : 5386901 (molecules)in: 32.768 (um3) Scavenger:H3O^1 : 3.1623e-06 (M) with : 62402 (molecules)in: 32.768 (um3) Scavenger:OH^-1 : 3.1419e-09 (M) with : 62 (molecules)in: 32.768 (um3) Scavenger:H2O^0 : 55.3 (M) with : 1091254301582 (molecules)in: 32.768 (um3) +Scavenger:CO_2^0 : 0 (M) with : 0 (molecules)in: 32.768 (um3) +!!!!!!!!!!!!! this molecule has less one molecule for considered volume ************************************************************** -Total energy deposited in the world volume : 4.3598 keV +Total energy deposited in the world volume : 49.999 keV ------------------------------------------------------------------------- diff --git a/examples/extended/medical/dna/UHDR/CMakeLists.txt b/examples/extended/medical/dna/UHDR/CMakeLists.txt index 1762dff4d5..65a2cec1d1 100644 --- a/examples/extended/medical/dna/UHDR/CMakeLists.txt +++ b/examples/extended/medical/dna/UHDR/CMakeLists.txt @@ -9,11 +9,11 @@ project(UHDR) # to build a batch mode only executable # option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() +if (WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else () + find_package(Geant4 REQUIRED) +endif () #---------------------------------------------------------------------------- # Setup Geant4 include directories and compile definitions @@ -23,8 +23,8 @@ include(${Geant4_USE_FILE}) #---------------------------------------------------------------------------- # Locate sources and headers for this project # -include_directories(${PROJECT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR}) +include_directories(${PROJECT_SOURCE_DIR}/include + ${Geant4_INCLUDE_DIR}) file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) @@ -32,7 +32,7 @@ file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) # Add the executable, and link it to the Geant4 libraries # add_executable(UHDR UHDR.cc ${sources} ${headers}) -target_link_libraries(UHDR ${Geant4_LIBRARIES} ) +target_link_libraries(UHDR ${Geant4_LIBRARIES}) #---------------------------------------------------------------------------- # Copy all scripts to the build directory, i.e. the directory in which we @@ -40,16 +40,24 @@ target_link_libraries(UHDR ${Geant4_LIBRARIES} ) # relies on these scripts being in the current working directory. # set(UHDR_SCRIPTS - beam.in UHDR.in plotG_time.C pulseShape.dat vis.mac - ) + beam.in + UHDR.in + CONV.in + scavengers.in + initialize.in + plotG_time.C vis.mac) -foreach(_script ${UHDR_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY +foreach (_script ${UHDR_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY ) -endforeach() +endforeach () + +file(GLOB PULSESTRUCTURE + "PulseStructure/*") +file(COPY ${PULSESTRUCTURE} DESTINATION ${PROJECT_BINARY_DIR}) #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX diff --git a/examples/extended/medical/dna/UHDR/CONV.in b/examples/extended/medical/dna/UHDR/CONV.in new file mode 100644 index 0000000000..f5148ecf43 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/CONV.in @@ -0,0 +1,25 @@ +/run/numberOfThreads 10 + +# initialize geo and phys +/control/execute initialize.in + +# time structure +/UHDR/pulse/pulseOn true +# push structure file +/UHDR/pulse/pulseFile 1.4us + +# pulse structure +/UHDR/pulse/multiPulse true +/UHDR/pulse/pulsePeriod 100 ms +/UHDR/pulse/numberOfPulse 80 +#/UHDR/pulse/pulseInHisto pulseHisto.txt + +/run/initialize + +# medium is configured in this file (scavengers.in) +/control/execute scavengers.in + +/scorer/Dose/cutoff 1 Gy +/UHDR/source/particle e- +/UHDR/source/energy 0.999 MeV +/run/beamOn 10 diff --git a/examples/extended/medical/dna/UHDR/History b/examples/extended/medical/dna/UHDR/History index 97cca15d8c..cbc2810f79 100644 --- a/examples/extended/medical/dna/UHDR/History +++ b/examples/extended/medical/dna/UHDR/History @@ -4,6 +4,27 @@ Geant4 - an Object-Oriented Toolkit for Simulation in HEP ========================================================= +## 2025-05-15 Hoang Tran (UHDR-V11-03-04) +- corrected reading file +- updated macro files + +## 2025-05-15 Hoang Tran (UHDR-V11-03-03) +- added pulse structure and interpulse feature +- fixed partially diffused-control reactions + +## 2025-05-14 Le Tuan Anh (UHDR-V11-03-02) +- Fix crash due to typo in UHDR.in +- Avoid dependence of PrimaryGeneratorAction/Physlist/ChemList/ActionIni + classes on DetectorConstruction class + +## 2025-04-23 Hoang Tran (UHDR-V11-03-01) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + +## 2025-04-04 Hoang Tran (UHDR-V11-03-00) +- updated pulseAction for larger pulse size +- temporarily used molecule counter form EventScheduler +- updated reaction table for scavengers + ## 2024-10-22 Hoang Tran (UHDR-V11-02-04) - updated visu mode for physical stage and corrected README files diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/1.4us b/examples/extended/medical/dna/UHDR/PulseStructure/1.4us new file mode 100644 index 0000000000..a35c0b03d7 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/1.4us @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +0.15 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.42 0.997 +0.5 0.966 +0.58 0.939 +0.66 0.916 +0.71 0.889 +0.79 0.863 +0.85 0.836 +0.93 0.813 +0.94 0.771 +0.94 0.73 +0.95 0.694 +0.95 0.654 +0.99 0.622 +1.04 0.6 +1.06 0.561 +1.09 0.516 +1.09 0.459 +1.14 0.404 +1.2 0.35 +1.24 0.297 +1.27 0.245 +1.32 0.201 +1.37 0.147 +1.42 0.0993 +1.47 0.0644 +1.55 0.0311 +1.6 0.0057 +1.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/100ms b/examples/extended/medical/dna/UHDR/PulseStructure/100ms new file mode 100644 index 0000000000..026431e941 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/100ms @@ -0,0 +1,46 @@ +0.00E+00 0.00146 +4.00E-02 0.0395 +6.00E-02 0.0934 +7.00E-02 0.152 +8.00E-02 0.212 +1.00E-01 0.276 +1.10E-01 0.328 +1.20E-01 0.388 +1.30E-01 0.467 +1.60E-01 0.531 +1.50E-01 0.577 +1.60E-01 0.653 +2.00E-01 0.722 +2.00E-01 0.778 +2.00E-01 0.829 +2.60E-01 0.887 +3.00E-01 0.947 +3.70E-01 0.985 +4.20E-01 0.997 +1.00E+05 0.966 +1.00E+05 0.939 +1.00E+05 0.916 +1.00E+05 0.889 +1.00E+05 0.863 +1.00E+05 0.836 +1.00E+05 0.813 +1.00E+05 0.771 +1.00E+05 0.73 +1.00E+05 0.694 +1.00E+05 0.654 +1.00E+05 0.622 +1.00E+05 0.6 +1.00E+05 0.561 +1.00E+05 0.516 +1.00E+05 0.459 +1.00E+05 0.404 +1.00E+05 0.35 +1.00E+05 0.297 +1.00E+05 0.245 +1.00E+05 0.201 +1.00E+05 0.147 +1.00E+05 0.0993 +1.00E+05 0.0644 +1.00E+05 0.0311 +1.00E+05 0.0057 +1.00E+05 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/100us b/examples/extended/medical/dna/UHDR/PulseStructure/100us new file mode 100644 index 0000000000..1f8c3cffb0 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/100us @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +1.500E-01 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.997 0.997 +100.5 0.966 +100.58 0.939 +100.66 0.916 +100.71 0.889 +100.79 0.863 +100.85 0.836 +100.93 0.813 +100.94 0.771 +100.94 0.73 +100.95 0.694 +100.95 0.654 +100.99 0.622 +101.04 0.6 +101.06 0.561 +101.09 0.516 +101.09 0.459 +101.14 0.404 +101.2 0.35 +101.24 0.297 +101.27 0.245 +101.32 0.201 +101.37 0.147 +101.42 0.0993 +101.47 0.0644 +101.55 0.0311 +101.6 0.0057 +101.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/10ms b/examples/extended/medical/dna/UHDR/PulseStructure/10ms new file mode 100644 index 0000000000..008d8331b8 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/10ms @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +0.15 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.42 0.997 +10000.5 0.966 +10000.58 0.939 +10000.66 0.916 +10000.71 0.889 +10000.79 0.863 +10000.85 0.836 +10000.93 0.813 +10000.94 0.771 +10000.94 0.73 +10000.95 0.694 +10000.95 0.654 +10000.99 0.622 +10001.04 0.6 +10001.06 0.561 +10001.09 0.516 +10001.09 0.459 +10001.14 0.404 +10001.2 0.35 +10001.24 0.297 +10001.27 0.245 +10001.32 0.201 +10001.37 0.147 +10001.42 0.0993 +10001.47 0.0644 +10001.55 0.0311 +10001.6 0.0057 +10001.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/10us b/examples/extended/medical/dna/UHDR/PulseStructure/10us new file mode 100644 index 0000000000..16a4ffa083 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/10us @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +1.500E-01 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.42 0.997 +10.5 0.966 +10.58 0.939 +10.66 0.916 +10.71 0.889 +10.79 0.863 +10.85 0.836 +10.93 0.813 +10.94 0.771 +10.94 0.73 +10.95 0.694 +10.95 0.654 +10.99 0.622 +11.04 0.6 +11.06 0.561 +11.09 0.516 +11.09 0.459 +11.14 0.404 +11.2 0.35 +11.24 0.297 +11.27 0.245 +11.32 0.201 +11.37 0.147 +11.42 0.0993 +11.47 0.0644 +11.55 0.0311 +11.6 0.0057 +11.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/1ms b/examples/extended/medical/dna/UHDR/PulseStructure/1ms new file mode 100644 index 0000000000..ef9b054f4e --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/1ms @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +0.15 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.42 0.997 +1000.5 0.966 +1000.58 0.939 +1000.66 0.916 +1000.71 0.889 +1000.79 0.863 +1000.85 0.836 +1000.93 0.813 +1000.94 0.771 +1000.94 0.73 +1000.95 0.694 +1000.95 0.654 +1000.99 0.622 +1001.04 0.6 +1001.06 0.561 +1001.09 0.516 +1001.09 0.459 +1001.14 0.404 +1001.2 0.35 +1001.24 0.297 +1001.27 0.245 +1001.32 0.201 +1001.37 0.147 +1001.42 0.0993 +1001.47 0.0644 +1001.55 0.0311 +1001.6 0.0057 +1001.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/1s b/examples/extended/medical/dna/UHDR/PulseStructure/1s new file mode 100644 index 0000000000..8c80b78416 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/1s @@ -0,0 +1,46 @@ +0.00E+00 0.00146 +4.00E-02 0.0395 +6.00E-02 0.0934 +7.00E-02 0.152 +8.00E-02 0.212 +1.00E-01 0.276 +1.10E-01 0.328 +1.20E-01 0.388 +1.30E-01 0.467 +1.60E-01 0.531 +1.50E-01 0.577 +1.60E-01 0.653 +2.00E-01 0.722 +2.00E-01 0.778 +2.00E-01 0.829 +2.60E-01 0.887 +3.00E-01 0.947 +3.70E-01 0.985 +4.20E-01 0.997 +1.00E+06 0.966 +1.00E+06 0.939 +1.00E+06 0.916 +1.00E+06 0.889 +1.00E+06 0.863 +1.00E+06 0.836 +1.00E+06 0.813 +1.00E+06 0.771 +1.00E+06 0.73 +1.00E+06 0.694 +1.00E+06 0.654 +1.00E+06 0.622 +1.00E+06 0.6 +1.00E+06 0.561 +1.00E+06 0.516 +1.00E+06 0.459 +1.00E+06 0.404 +1.00E+06 0.35 +1.00E+06 0.297 +1.00E+06 0.245 +1.00E+06 0.201 +1.00E+06 0.147 +1.00E+06 0.0993 +1.00E+06 0.0644 +1.00E+06 0.0311 +1.00E+06 0.0057 +1.00E+06 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/2.4us b/examples/extended/medical/dna/UHDR/PulseStructure/2.4us new file mode 100644 index 0000000000..fcdf863bda --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/2.4us @@ -0,0 +1,39 @@ +0 0.00 +0.05 0.0347 +0.07 0.0823 +0.1 0.147 +0.12 0.209 +0.13 0.29 +0.13 0.36 +0.15 0.453 +0.16 0.55 +0.2 0.65 +0.21 0.734 +0.25 0.822 +0.26 0.883 +0.29 0.933 +0.42 0.992 +0.54 0.959 +0.66 0.917 +0.79 0.873 +0.91 0.835 +1.05 0.794 +1.28 0.762 +1.5 0.736 +1.71 0.719 +1.91 0.695 +1.97 0.659 +1.97 0.595 +1.98 0.551 +2.04 0.524 +2.1 0.479 +2.1 0.441 +2.12 0.392 +2.16 0.338 +2.25 0.277 +2.29 0.212 +2.36 0.154 +2.42 0.0942 +2.51 0.045 +2.6 0.00698 +2.77 0.00 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/2s b/examples/extended/medical/dna/UHDR/PulseStructure/2s new file mode 100644 index 0000000000..cd638c46d3 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/2s @@ -0,0 +1,46 @@ +0.00E+00 0.00146 +4.00E-02 0.0395 +6.00E-02 0.0934 +7.00E-02 0.152 +8.00E-02 0.212 +1.00E-01 0.276 +1.10E-01 0.328 +1.20E-01 0.388 +1.30E-01 0.467 +1.60E-01 0.531 +1.50E-01 0.577 +1.60E-01 0.653 +2.00E-01 0.722 +2.00E-01 0.778 +2.00E-01 0.829 +2.60E-01 0.887 +3.00E-01 0.947 +3.70E-01 0.985 +4.20E-01 0.997 +2.00E+06 0.966 +2.00E+06 0.939 +2.00E+06 0.916 +2.00E+06 0.889 +2.00E+06 0.863 +2.00E+06 0.836 +2.00E+06 0.813 +2.00E+06 0.771 +2.00E+06 0.73 +2.00E+06 0.694 +2.00E+06 0.654 +2.00E+06 0.622 +2.00E+06 0.6 +2.00E+06 0.561 +2.00E+06 0.516 +2.00E+06 0.459 +2.00E+06 0.404 +2.00E+06 0.35 +2.00E+06 0.297 +2.00E+06 0.245 +2.00E+06 0.201 +2.00E+06 0.147 +2.00E+06 0.0993 +2.00E+06 0.0644 +2.00E+06 0.0311 +2.00E+06 0.0057 +2.00E+06 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/3.5us b/examples/extended/medical/dna/UHDR/PulseStructure/3.5us new file mode 100644 index 0000000000..868bc0560f --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/3.5us @@ -0,0 +1,40 @@ +0 0.000124 +0.04 0.03 +0.08 0.0838 +0.09 0.139 +0.1 0.195 +0.12 0.258 +0.13 0.333 +0.13 0.398 +0.15 0.472 +0.17 0.54 +0.18 0.61 +0.2 0.683 +0.23 0.757 +0.24 0.851 +0.28 0.924 +0.37 0.992 +0.48 0.985 +0.58 0.947 +0.71 0.897 +0.84 0.855 +0.97 0.817 +1.12 0.789 +1.4 0.755 +1.7 0.722 +1.97 0.693 +2.19 0.666 +2.48 0.643 +2.74 0.619 +2.97 0.592 +3.17 0.56 +3.34 0.519 +3.54 0.476 +3.68 0.396 +3.74 0.316 +3.8 0.24 +3.82 0.151 +3.86 0.0716 +3.92 0.0256 +4.04 0.00494 +4.2 0.00171 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/500ms b/examples/extended/medical/dna/UHDR/PulseStructure/500ms new file mode 100644 index 0000000000..1337da8f29 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/500ms @@ -0,0 +1,46 @@ +0.00E+00 0.00146 +4.00E-02 0.0395 +6.00E-02 0.0934 +7.00E-02 0.152 +8.00E-02 0.212 +1.00E-01 0.276 +1.10E-01 0.328 +1.20E-01 0.388 +1.30E-01 0.467 +1.60E-01 0.531 +1.50E-01 0.577 +1.60E-01 0.653 +2.00E-01 0.722 +2.00E-01 0.778 +2.00E-01 0.829 +2.60E-01 0.887 +3.00E-01 0.947 +3.70E-01 0.985 +4.20E-01 0.997 +5.00E+05 0.966 +5.00E+05 0.939 +5.00E+05 0.916 +5.00E+05 0.889 +5.00E+05 0.863 +5.00E+05 0.836 +5.00E+05 0.813 +5.00E+05 0.771 +5.00E+05 0.73 +5.00E+05 0.694 +5.00E+05 0.654 +5.00E+05 0.622 +5.00E+05 0.6 +5.00E+05 0.561 +5.00E+05 0.516 +5.00E+05 0.459 +5.00E+05 0.404 +5.00E+05 0.35 +5.00E+05 0.297 +5.00E+05 0.245 +5.00E+05 0.201 +5.00E+05 0.147 +5.00E+05 0.0993 +5.00E+05 0.0644 +5.00E+05 0.0311 +5.00E+05 0.0057 +5.00E+05 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/5ms b/examples/extended/medical/dna/UHDR/PulseStructure/5ms new file mode 100644 index 0000000000..724c41989a --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/5ms @@ -0,0 +1,46 @@ +0 0.00146 +0.04 0.0395 +0.06 0.0934 +0.07 0.152 +0.08 0.212 +0.1 0.276 +0.11 0.328 +0.12 0.388 +0.13 0.467 +0.16 0.531 +0.15 0.577 +0.16 0.653 +0.2 0.722 +0.2 0.778 +0.2 0.829 +0.26 0.887 +0.3 0.947 +0.37 0.985 +0.42 0.997 +5000.5 0.966 +5000.58 0.939 +5000.66 0.916 +5000.71 0.889 +5000.79 0.863 +5000.85 0.836 +5000.93 0.813 +5000.94 0.771 +5000.94 0.73 +5000.95 0.694 +5000.95 0.654 +5000.99 0.622 +5001.04 0.6 +5001.06 0.561 +5001.09 0.516 +5001.09 0.459 +5001.14 0.404 +5001.2 0.35 +5001.24 0.297 +5001.27 0.245 +5001.32 0.201 +5001.37 0.147 +5001.42 0.0993 +5001.47 0.0644 +5001.55 0.0311 +5001.6 0.0057 +5001.71 0.00226 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/80ns b/examples/extended/medical/dna/UHDR/PulseStructure/80ns new file mode 100644 index 0000000000..abe4f7d98d --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/80ns @@ -0,0 +1,90 @@ +0 2.62655 +0.000833367 6.83524 +0.0016667 12.553 +0.002500033 17.0223 +0.003333367 24.7406 +0.0041667 32.4819 +0.005000033 42.8519 +0.005833367 48.6027 +0.0066667 56.4824 +0.007500033 62.09 +0.008333367 69.1621 +0.0091667 74.3751 +0.010000033 80.2126 +0.010833367 83.9005 +0.0116667 87.5853 +0.012500033 89.5126 +0.013333367 91.5201 +0.0141667 92.4811 +0.015000033 92.9938 +0.015833367 93.4008 +0.0166667 93.3343 +0.017500033 93.0633 +0.018333367 92.4693 +0.0191667 91.6022 +0.020000033 90.8025 +0.020833367 90.1 +0.0216667 89.1324 +0.022500033 88.3259 +0.023333367 87.0589 +0.0241667 85.7656 +0.025000033 84.1971 +0.025833367 83.1376 +0.0266667 82.2867 +0.027500033 81.4951 +0.028333367 80.594 +0.0291667 79.6264 +0.030000033 78.6214 +0.030833367 77.5289 +0.0316667 76.521 +0.032500033 75.6933 +0.033333367 75.028 +0.0341667 74.2267 +0.035000033 73.3055 +0.035833367 72.6401 +0.0366667 72.0123 +0.037500033 71.4163 +0.038333367 70.8578 +0.0391667 70.3184 +0.040000033 69.7047 +0.040833367 69.1162 +0.0416667 68.7255 +0.042500033 68.2682 +0.043333367 67.7121 +0.0441667 67.311 +0.045000033 66.9099 +0.045833367 66.5897 +0.0466667 66.3253 +0.047500033 66.0608 +0.048333367 65.7764 +0.0491667 65.453 +0.050000033 65.1296 +0.050833367 64.8234 +0.0516667 64.5258 +0.052500033 64.2282 +0.053333367 63.9305 +0.0541667 63.6328 +0.055000033 63.079 +0.055833367 60.5713 +0.0566667 37.4664 +0.057500033 40.3387 +0.058333367 43.7965 +0.0591667 45.9804 +0.060000033 36.3683 +0.060833367 29.7977 +0.0616667 30.6857 +0.062500033 30.2191 +0.063333367 26.0506 +0.0641667 19.788 +0.065000033 18.1777 +0.065833367 16.052 +0.0666667 13.2789 +0.067500033 10.394 +0.068333367 8.90658 +0.0691667 6.26689 +0.070000033 4.90529 +0.070833367 3.5856 +0.0716667 2.12792 +0.072500033 1.50895 +0.073333367 0.889984 +0.0741667 0 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/PulseStructure/pulseHisto.txt b/examples/extended/medical/dna/UHDR/PulseStructure/pulseHisto.txt new file mode 100644 index 0000000000..66dffaefb5 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/PulseStructure/pulseHisto.txt @@ -0,0 +1,39 @@ +# Example of another format input for UHDR example. Author: Le Tuan Anh. +# Tmin: minimal time in pulse; Tmin 0 us: Tmin = 0 us +# Tmmax: maximal time in pulse; Tmax 3 us: Tmax = 0 us +# us: time units. User can change to ns, ms .. which are compatible to G4 unit +# nbins: nummber of bins between Tmin and Tmax +# the remaining rows are the observed events of corresponding bin (bin content) +Tmin 0 us +Tmax 3 us +nbins 30 +123 +204 +341 +573 +861 +1340 +1868 +2572 +3463 +4417 +5411 +6141 +7070 +7641 +7778 +7937 +7693 +6954 +6270 +5367 +4359 +3362 +2622 +1866 +1356 +879 +593 +350 +194 +139 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/README b/examples/extended/medical/dna/UHDR/README index 3926419d6b..fbfb59eaf2 100644 --- a/examples/extended/medical/dna/UHDR/README +++ b/examples/extended/medical/dna/UHDR/README @@ -19,8 +19,9 @@ 0 - INTRODUCTION This example shows how to activate the mesoscopic model in chemistry and - combine with SBS model (Tran et al.,Int. J. Mol. Sci. 22 (2021) 6023). - It allows to simulate chemical reactions longtime (beyond 1 us) of post-irradiation. + combine with IRT-syn model (https://arxiv.org/abs/2409.11993). + It allows to simulate chemical reactions longtime (beyond 1 us) of post-irradiation + under different dose rates. To run the example: mkdir UHDR-build @@ -32,9 +33,9 @@ ./UHDR In batch mode, the macro beam.in can be used as follows: - ./UHDR beam.in + ./UHDR UHDR.in or - ./UHDR beam.in 123 + ./UHDR UHDR.in 123 # 123 is the user's seed number 1 - GEOMETRY DEFINITION @@ -67,6 +68,16 @@ This object is controlled by DetectorContruction. It defines the chemistry volume, scavengers and pH of water. + This fearture can be set by the following commands: + # pH and Scavenger + /UHDR/env/pH 5.5 + + # air concentration + /UHDR/env/scavenger O2 21 % + /UHDR/env/scavenger CO2 0.041 % + /UHDR/env/scavenger HCO3m 2.4 uM + + 4 - AN EVENT: THE PRIMARY GENERATOR This example utilizes the G4SingleParticleSource. @@ -91,9 +102,28 @@ # or user can automatically select time bin logarithmically. - 6 - PULSE ACTION + 6 - PULSE ACTION and INTERPULSE ACTION + + The time structure can be activated by implementing a delayed time, Δt, + which is sampled from a beamline raw signal of a measured pulse. + Each delayed time is associated with a primary particle and propagates to its corresponding + primary chemical species induced by this primary particle. + These primary chemical species remain inactive until the virtual simulation time matches + their respective delayed time. This process creates a duration for the primary particle train + where their primary chemical species are activated randomly through an experimental beam + current transformation, named "pulse duration". + + This fearture can be set by the following commands: + # time structure + /UHDR/pulse/pulseOn true // active the time structure + # push structure file + /UHDR/pulse/pulseFile 1.4us // push structure file + + # pulse structure + /UHDR/pulse/multiPulse true // active the multi pulse + /UHDR/pulse/pulsePeriod 10 ms // time between two pulses (DIT) + /UHDR/pulse/numberOfPulse 2 // number of pulses - This functionality is not available for this version. 7 - OUTPUT @@ -101,7 +131,12 @@ 8 - RELEVANT MACRO COMMANDS AND MACRO FILE - The user macro files are: beam.in (conventional), UHDR.in (Ultra High Dose Rate) + The user macro files are: + beam.in (default), + CONV.in (Conventional) + UHDR.in (Ultra High Dose Rate) + initialize.in (initialize geo and phys) + scavengers.in (pH and scavengers are defined) 9 - REACTION BUILDER @@ -129,7 +164,7 @@ The results show the molecular species (G values) as a function of - time (ns). Please correct the dose in the TTree *tree = (TTree *) dir->Get("0.010000"); + time (ns). 11 - Periodic Boundary Condition (PBC) @@ -149,6 +184,5 @@ /UHDR/Detector/PBC true - Funding: FNS Synergia grant MAGIC-FNS CRSII5_186369. Contact: H. Tran (tran@lp2ib.in2p3.fr) CNRS, lp2i, UMR 5797, Université de Bordeaux, F-33170 Gradignan, France diff --git a/examples/extended/medical/dna/UHDR/UHDR.cc b/examples/extended/medical/dna/UHDR/UHDR.cc index 12f9e11215..b2adf2ca99 100644 --- a/examples/extended/medical/dna/UHDR/UHDR.cc +++ b/examples/extended/medical/dna/UHDR/UHDR.cc @@ -55,8 +55,8 @@ int main(int argc, char** argv) auto pDetector = new DetectorConstruction(); runManager->SetUserInitialization(pDetector); - runManager->SetUserInitialization(new PhysicsList(pDetector)); - runManager->SetUserInitialization(new ActionInitialization(pDetector)); + runManager->SetUserInitialization(new PhysicsList()); + runManager->SetUserInitialization(new ActionInitialization()); /// G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); @@ -64,7 +64,7 @@ int main(int argc, char** argv) analysisManager->SetNtupleDirectoryName("ntuple"); // open output file // - std::string name = "Dose_" + std::to_string(seed); + G4String name = "Dose_" + std::to_string(seed); G4bool fileOpen = analysisManager->OpenFile(name); if (!fileOpen) { G4cout << "\n---> HistoManager::book(): cannot open " << name << G4endl; diff --git a/examples/extended/medical/dna/UHDR/UHDR.in b/examples/extended/medical/dna/UHDR/UHDR.in index e5e1e38f1c..2a18220fc2 100644 --- a/examples/extended/medical/dna/UHDR/UHDR.in +++ b/examples/extended/medical/dna/UHDR/UHDR.in @@ -1,38 +1,25 @@ -#/run/numberOfThreads 10 -/process/dna/e-SolvationSubType Meesungnoen2002 -#/process/dna/e-SolvationSubType Ritchie1994 -#/process/dna/e-SolvationSubType Terrisol1990 +/run/numberOfThreads 10 -# Set the simulation volume (half Side Length) -/UHDR/env/volume 0.8 um # for UHDR -#/UHDR/env/volume 1.6 um # for CONV +# initialize geo and phys +/control/execute initialize.in + +# time structure +/UHDR/pulse/pulseOn true +# push structure file +/UHDR/pulse/pulseFile 1.4us + +# pulse structure +/UHDR/pulse/multiPulse true +/UHDR/pulse/pulsePeriod 10 ms +/UHDR/pulse/numberOfPulse 2 +#/UHDR/pulse/pulseInHisto pulseHisto.txt /run/initialize -# time structure (not available) -#/UHDR/pulse/activate true - -# pH and Scavenger -/UHDR/env/pH 5.5 - -# Oxygen concentration -/UHDR/env/scavenger O2 19 % - -/chem/reaction/print - -#/run/verbose 1 -/tracking/verbose 0 -/scheduler/verbose 0 -/scheduler/endTime 1 ms - -# set false if many beamOn in medium -/scheduler/ResetScavengerForEachBeamOn true - -/scorer/Gvalues/nOfTimeBins 80 - -/run/printProgress 10 +# medium is configured in this file (scavengers.in) +/control/execute scavengers.in /scorer/Dose/cutoff 1 Gy /UHDR/source/particle e- /UHDR/source/energy 0.999 MeV -/run/beamOn 2 +/run/beamOn 10 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/UHDR.out b/examples/extended/medical/dna/UHDR/UHDR.out index ba7fdbadf7..bdad0ef256 100644 --- a/examples/extended/medical/dna/UHDR/UHDR.out +++ b/examples/extended/medical/dna/UHDR/UHDR.out @@ -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 @@ -26,7 +26,7 @@ Checking overlaps for volume PBC:0 (G4Box) ... OK! G4SDManager::AddNewCollection : the collection is registered at 1 G4SDManager::AddNewCollection : the collection is registered at 2 New sensitive detector is registered at / -Number of chemical species involved in reactions = 16 +Number of chemical species involved in reactions = 23 Reaction Reaction Rate [dm3/(mol*s)] ----------------------------------------------------------------------------------- H3O^1 + OH^-1 -> No product 1.13e+11 @@ -43,6 +43,8 @@ H3O^1 + O^-1 -> °OH^0 4.78e+10 ----------------------------------------------------------------------------------- H3O^1 + OH^-1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- +°OH^0 + CO_2^0 -> HCO_3^0 1e+06 +----------------------------------------------------------------------------------- °OH^0 + H^0 -> No product 1.55e+10 ----------------------------------------------------------------------------------- °OH^0 + °OH^0 -> H2O2^0 5.5e+09 @@ -65,10 +67,18 @@ H3O^1 + OH^-1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- °OH^0 + H_2^0 -> H^0 3.28e+07 ----------------------------------------------------------------------------------- +°OH^0 + HCO_3^-1 -> CO_3^-1 8.5e+06 +----------------------------------------------------------------------------------- +°OH^0 + °O^0 -> HO_2°^0 2e+10 +----------------------------------------------------------------------------------- +°OH^0 + MeOH^0 -> MeOH^0 9.7e+08 +----------------------------------------------------------------------------------- °OH^0 + OH^-1 -> O^-1 1.27e+10 ----------------------------------------------------------------------------------- °OH^0 + H2O^0 -> O^-1 + H3O^1 6.01766e-08 ----------------------------------------------------------------------------------- +°OH^0 + NO_2^-1 -> NO_2^0 + OH^-1 8e+09 +----------------------------------------------------------------------------------- OH^-1 + HO_2°^0 -> O_2^-1 1.27e+10 ----------------------------------------------------------------------------------- OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 @@ -77,7 +87,9 @@ OH^-1 + H^0 -> e_aq^-1 2.51e+07 ----------------------------------------------------------------------------------- OH^-1 + H3O^1 -> No product 1.13e+11 ----------------------------------------------------------------------------------- -e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 +e_aq^-1 + O_2^0 -> O_2^-1 1.74e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + CO_2^0 -> CO_2^-1 7.7e+09 ----------------------------------------------------------------------------------- e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 ----------------------------------------------------------------------------------- @@ -93,11 +105,17 @@ e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 ----------------------------------------------------------------------------------- e_aq^-1 + HO_2°^0 -> HO_2^-1 1.29e+10 ----------------------------------------------------------------------------------- +e_aq^-1 + N_2O^0 -> O^-1 9e+09 +----------------------------------------------------------------------------------- e_aq^-1 + H3O^1 -> H^0 2.25e+10 ----------------------------------------------------------------------------------- e_aq^-1 + H2O^0 -> H^0 + OH^-1 0.00086821 ----------------------------------------------------------------------------------- -H^0 + O_2^0 -> HO_2°^0 1.3e+10 +e_aq^-1 + NO_2^-1 -> NO_2^-2 3.5e+09 +----------------------------------------------------------------------------------- +e_aq^-1 + NO_3^-1 -> NO_3^-2 9.7e+09 +----------------------------------------------------------------------------------- +H^0 + O_2^0 -> HO_2°^0 2.1e+10 ----------------------------------------------------------------------------------- H^0 + H^0 -> H_2^0 5.03e+09 ----------------------------------------------------------------------------------- @@ -184,7 +202,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 ======== @@ -246,6 +264,7 @@ Use fast sampling in DNA models 1 Use Stationary option in DNA models 0 Use DNA with multiple scattering of e- 0 Use DNA e- solvation model type 11003 +Use DNA Chemistry model IRT_syn ======================================================================= ### === Deexcitation model UAtomDeexcitation is activated for 1 region: @@ -390,7 +409,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 ====== @@ -406,7 +427,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 @@ -434,19 +455,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 ====== @@ -468,23 +491,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 ====== @@ -507,19 +534,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 ====== @@ -529,8 +558,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 @@ -541,7 +570,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 ====== @@ -624,154 +655,15376 @@ hIoni: for pi- XStype:3 SubType=2 ### Run 0 starts. --> Event 0 starts. _____________________________________________________________________________ -Stop this beam line (e-, 0.999 MeV) at actual dose: 0.0111416 Gy. Cut-off dose: 0.01 Gy -The beam of 6 tracks in a volume of 32.768 um3. Total deposit energy: 2278.87 eV. -_____________________________________________________________________________ -Number of chemical species involved in reactions = 16 -Reaction Reaction Rate [dm3/(mol*s)] Interaction Range for chosen reaction model [nm] -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + OH^-1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + e_aq^-1 -> H^0 2.11e+10 0.194163 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O_3^-1 -> °OH^0 + O_2^0 9e+10 1.03776 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O_2^-1 -> HO_2°^0 4.78e+10 0.563458 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + HO_2^-1 -> H2O2^0 4.78e+10 0.581617 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + O^-1 -> °OH^0 4.78e+10 0.551166 -------------------------------------------------------------------------------------------------------------------------------------- -H3O^1 + OH^-1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H^0 -> No product 1.55e+10 0.22263 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + °OH^0 -> H2O2^0 5.5e+09 0.330354 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + e_aq^-1 -> OH^-1 2.95e+10 0.549039 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O_2^-1 -> O_2^0 + OH^-1 1.07e+10 0.357953 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + HO_2°^0 -> O_2^0 7.9e+09 0.231982 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + HO_2^-1 -> HO_2°^0 + OH^-1 8.32e+09 0.305394 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O^-1 -> HO_2^-1 1e+09 0.0314623 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + O_3^-1 -> O_2^-1 + HO_2°^0 8.5e+09 0.267429 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H2O2^0 -> HO_2°^0 2.88e+07 0.000845706 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H_2^0 -> H^0 3.28e+07 0.000619177 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 -------------------------------------------------------------------------------------------------------------------------------------- -°OH^0 + H2O^0 -> O^-1 + H3O^1 6.01766e-08 1.89329e-18 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + HO_2°^0 -> O_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 0.226032 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H^0 -> e_aq^-1 2.51e+07 0.000269655 -------------------------------------------------------------------------------------------------------------------------------------- -OH^-1 + H3O^1 -> No product 1.13e+11 1.01165 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 0.416336 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 0.277608 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 6.36e+09 0.171514 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 1.1e+10 0.201883 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 1.3e+10 0.258322 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + HO_2^-1 -> O^-1 + OH^-1 3.51e+09 0.0736217 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 0.442387 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + HO_2°^0 -> HO_2^-1 1.29e+10 0.236754 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H3O^1 -> H^0 2.25e+10 0.207046 -------------------------------------------------------------------------------------------------------------------------------------- -e_aq^-1 + H2O^0 -> H^0 + OH^-1 0.00086821 1.6627e-14 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O_2^0 -> HO_2°^0 1.3e+10 0.182749 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H^0 -> H_2^0 5.03e+09 0.0949531 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O^-1 -> OH^-1 2e+10 0.293648 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + HO_2°^0 -> H2O2^0 1e+10 0.142088 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + O_2^-1 -> HO_2^-1 1e+10 0.151019 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H2O2^0 -> °OH^0 3.5e+07 0.000497307 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + H2O^0 -> e_aq^-1 + H3O^1 6.32e-06 9.27927e-17 -------------------------------------------------------------------------------------------------------------------------------------- -H^0 + OH^-1 -> e_aq^-1 2.49e+07 0.000267506 -------------------------------------------------------------------------------------------------------------------------------------- -H_2^0 + O^-1 -> H^0 + OH^-1 1.21e+08 0.00235134 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + O^-1 -> HO_2°^0 + OH^-1 5.55e+08 0.0170555 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + OH^-1 -> HO_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -H2O2^0 + H2O^0 -> HO_2^-1 + H3O^1 7.86e-08 2.41542e-18 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + HO_2°^0 -> H2O2^0 + O_2^0 980000 5.63038e-05 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + O_2^-1 -> HO_2^-1 + O_2^0 9.7e+07 0.00316487 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 0.758 2.32938e-11 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2°^0 + OH^-1 -> O_2^-1 1.27e+10 0.220815 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + O^-1 -> O_2^-1 + OH^-1 3.5e+08 0.0136028 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 75.208 2.92297e-09 -------------------------------------------------------------------------------------------------------------------------------------- -HO_2^-1 + H3O^1 -> H2O2^0 4.78e+10 0.581617 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_2^0 -> O_3^-1 3.7e+09 0.111119 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_2^-1 -> O_2^0 + OH^-1 + OH^-1 6e+08 0.0211426 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O^-1 -> H2O2^0 + OH^-1 + OH^-1 1e+08 0.00660708 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + O_3^-1 -> O_2^-1 + O_2^-1 7e+08 0.0231248 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + H2O^0 -> °OH^0 + OH^-1 99.54 3.28834e-09 -------------------------------------------------------------------------------------------------------------------------------------- -O^-1 + H3O^1 -> °OH^0 9.56e+10 1.10233 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + O_2^-1 -> H2O2^0 + O_2^0 + OH^-1 + OH^-1 100 7.55094e-09 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + H3O^1 -> HO_2°^0 4.78e+10 0.563458 -------------------------------------------------------------------------------------------------------------------------------------- -O_2^-1 + H2O^0 -> HO_2°^0 + OH^-1 8.295e-06 2.92297e-16 -------------------------------------------------------------------------------------------------------------------------------------- -O_3^-1 + H3O^1 -> °OH^0 + O_2^0 9e+10 1.03776 -------------------------------------------------------------------------------------------------------------------------------------- -O_3^-1 + H2O^0 -> O^-1 + O_2^0 0.00266 8.78741e-14 -------------------------------------------------------------------------------------------------------------------------------------- -DNAMolecularStepByStepModel will be used -_____________________________________________________________________________ -Stop this beam line (e-, 0.999 MeV) at actual dose: 0.010174 Gy. Cut-off dose: 0.01 Gy -The beam of 4 tracks in a volume of 32.768 um3. Total deposit energy: 2080.9 eV. +Beam line : (e-, 0.999 MeV) +Cut-off dose : 0.1 Gy +Stop at actual dose : 0.102287 Gy +Beam duration : 0 s +Actual dose rate : infinite +Track number : 39 tracks +Irradiated volume : 32.768 um3 (3.2 x 3.2 x 3.2) +O_2^0 : 0.000273 M +pH : 5.5 +CO_2^0 : 0 M +Total deposit energy : 20921.5 eV +Dose to abort : 0.15 Gy _____________________________________________________________________________ +DNAIndependentReactionTimeModel will be used ========================== + +======================================================================= + +*** G4Scheduler starts processing +At time : 1 ps Reaction : °OH^0 (-4124) + e_aq^-1 (-346) -> OH^-1 (-4568) +At time : 1 ps Reaction : °OH^0 (-2332) + OH^-1 (-2331) -> O^-1 (-4569) +At time : 1 ps Reaction : °OH^0 (-2311) + OH^-1 (-2310) -> O^-1 (-4570) +At time : 1 ps Reaction : °OH^0 (-2504) + °OH^0 (-2502) -> H2O2^0 (-4571) +At time : 1 ps Reaction : °OH^0 (-2686) + °OH^0 (-4200) -> H2O2^0 (-4572) +At time : 1 ps Reaction : H3O^1 (-2701) + e_aq^-1 (-1859) -> H^0 (-4573) +At time : 1 ps Reaction : H3O^1 (-3357) + OH^-1 (-2280) -> No product +At time : 1 ps Reaction : °OH^0 (-2275) + OH^-1 (-2274) -> O^-1 (-4574) +At time : 1 ps Reaction : H3O^1 (-3257) + OH^-1 (-2271) -> No product +At time : 1 ps Reaction : °OH^0 (-2269) + OH^-1 (-2268) -> O^-1 (-4575) +At time : 1 ps Reaction : °OH^0 (-3714) + H^0 (-4274) -> No product +At time : 1 ps Reaction : °OH^0 (-2928) + °O^0 (-4273) -> HO_2°^0 (-4576) +At time : 1 ps Reaction : °OH^0 (-4369) + °OH^0 (-4370) -> H2O2^0 (-4577) +At time : 1 ps Reaction : °OH^0 (-4029) + °OH^0 (-4210) -> H2O2^0 (-4578) +At time : 1 ps Reaction : e_aq^-1 (-4025) + °OH^0 (-4023) -> OH^-1 (-4579) +At time : 1 ps Reaction : °OH^0 (-4057) + °O^0 (-4195) -> HO_2°^0 (-4580) +At time : 1 ps Reaction : °OH^0 (-4102) + °OH^0 (-4437) -> H2O2^0 (-4581) +At time : 1 ps Reaction : °OH^0 (-4174) + °OH^0 (-4456) -> H2O2^0 (-4582) +At time : 1 ps Reaction : °OH^0 (-4225) + °O^0 (-4222) -> HO_2°^0 (-4583) +At time : 1 ps Reaction : °OH^0 (-3190) + °OH^0 (-2666) -> H2O2^0 (-4584) +At time : 1 ps Reaction : H3O^1 (-4024) + OH^-1 (-4579) -> No product +At time : 1 ps Reaction : °OH^0 (-2724) + °O^0 (-4247) -> HO_2°^0 (-4585) +At time : 2 ps Reaction : H3O^1 (-3167) + OH^-1 (-2256) -> No product +At time : 2 ps Reaction : °OH^0 (-3126) + °OH^0 (-4309) -> H2O2^0 (-4586) +At time : 2 ps Reaction : °OH^0 (-3148) + °OH^0 (-3146) -> H2O2^0 (-4587) +At time : 2 ps Reaction : °OH^0 (-3254) + °OH^0 (-4357) -> H2O2^0 (-4588) +At time : 2 ps Reaction : H3O^1 (-4125) + OH^-1 (-4568) -> No product +At time : 2 ps Reaction : °OH^0 (-3132) + °OH^0 (-3116) -> H2O2^0 (-4589) +At time : 2.2523 ps Reaction : °OH^0 (-2970) + H^0 (-4499) -> No product +At time : 2.4148 ps Reaction : °OH^0 (-2852) + e_aq^-1 (-1035) -> OH^-1 (-4590) +At time : 2.5717 ps Reaction : °OH^0 (-3922) + °O^0 (-4543) -> HO_2°^0 (-4591) +At time : 2.9954 ps Reaction : H3O^1 (-2831) + OH^-1 (-2295) -> No product +At time : 3.5113 ps Reaction : °OH^0 (-3196) + °OH^0 (-2444) -> H2O2^0 (-4592) +At time : 4.1272 ps Reaction : °OH^0 (-4081) + e_aq^-1 (-1794) -> OH^-1 (-4593) +At time : 4.1729 ps Reaction : °OH^0 (-4567) + °OH^0 (-4423) -> H2O2^0 (-4594) +At time : 4.8893 ps Reaction : °OH^0 (-2410) + H^0 (-4293) -> No product +At time : 5.4277 ps Reaction : °OH^0 (-3716) + °OH^0 (-3712) -> H2O2^0 (-4595) +At time : 5.5337 ps Reaction : °OH^0 (-4466) + °OH^0 (-4467) -> H2O2^0 (-4596) +At time : 5.5909 ps Reaction : °OH^0 (-4312) + °OH^0 (-4313) -> H2O2^0 (-4597) +At time : 5.9332 ps Reaction : °OH^0 (-3228) + e_aq^-1 (-1873) -> OH^-1 (-4598) +At time : 7.8529 ps Reaction : H3O^1 (-3445) + OH^-1 (-2286) -> No product +At time : 7.8529 ps Reaction : °OH^0 (-2814) + °O^0 (-4204) -> HO_2°^0 (-4600) +At time : 7.8529 ps Reaction : °OH^0 (-4390) + °OH^0 (-4389) -> H2O2^0 (-4601) +At time : 7.8529 ps Reaction : e_aq^-1 (-4092) + °OH^0 (-4090) -> OH^-1 (-4602) +At time : 7.8529 ps Reaction : °OH^0 (-3360) + °O^0 (-4402) -> HO_2°^0 (-4603) +At time : 8.8482 ps Reaction : °OH^0 (-3432) + e_aq^-1 (-1325) -> OH^-1 (-4604) +At time : 8.8529 ps Reaction : H3O^1 (-4091) + OH^-1 (-4602) -> No product +At time : 9.6572 ps Reaction : °OH^0 (-4298) + °OH^0 (-4299) -> H2O2^0 (-4605) +At time : 9.9109 ps Reaction : °OH^0 (-3188) + °OH^0 (-3186) -> H2O2^0 (-4606) +At time : 10.331 ps Reaction : °OH^0 (-2682) + °OH^0 (-4240) -> H2O2^0 (-4607) +At time : 11.235 ps Reaction : °OH^0 (-4323) + °OH^0 (-4324) -> H2O2^0 (-4608) +At time : 11.473 ps Reaction : H3O^1 (-3005) + OH^-1 (-2319) -> No product +At time : 12.389 ps Reaction : H^0 (-4406) + HO_2°^0 (-4603) -> H2O2^0 (-4609) +At time : 14.337 ps Reaction : H^0 (-4517) + H^0 (-4518) -> H_2^0 (-4610) +At time : 14.763 ps Reaction : e_aq^-1 (-2030) + e_aq^-1 (-2029) -> OH^-1 (-4611) + OH^-1 (-4612) + H_2^0 (-4613) +At time : 15.409 ps Reaction : °OH^0 (-2936) + °OH^0 (-4480) -> H2O2^0 (-4614) +At time : 16.203 ps Reaction : °OH^0 (-4238) + °OH^0 (-4330) -> H2O2^0 (-4615) +At time : 16.804 ps Reaction : °OH^0 (-4139) + H^0 (-4138) -> No product +At time : 20.162 ps Reaction : °OH^0 (-2640) + °OH^0 (-4316) -> H2O2^0 (-4616) +At time : 20.373 ps Reaction : °OH^0 (-2638) + H^0 (-4224) -> No product +At time : 21.033 ps Reaction : °OH^0 (-2578) + °OH^0 (-2576) -> H2O2^0 (-4617) +At time : 21.322 ps Reaction : °OH^0 (-3152) + °OH^0 (-4318) -> H2O2^0 (-4618) +At time : 22.072 ps Reaction : °OH^0 (-2308) + OH^-1 (-2307) -> O^-1 (-4619) +At time : 22.482 ps Reaction : °OH^0 (-2920) + °OH^0 (-2396) -> H2O2^0 (-4620) +At time : 23.4 ps Reaction : °OH^0 (-3192) + e_aq^-1 (-2009) -> OH^-1 (-4621) +At time : 23.414 ps Reaction : °OH^0 (-3378) + °OH^0 (-4408) -> H2O2^0 (-4622) +At time : 23.861 ps Reaction : H^0 (-4116) + °OH^0 (-4271) -> No product +At time : 24.135 ps Reaction : °OH^0 (-3002) + °OH^0 (-2998) -> H2O2^0 (-4623) +At time : 24.508 ps Reaction : °OH^0 (-3162) + H^0 (-4223) -> No product +At time : 25.668 ps Reaction : °OH^0 (-2714) + °OH^0 (-4337) -> H2O2^0 (-4624) +At time : 27.096 ps Reaction : °OH^0 (-4348) + H^0 (-4349) -> No product +At time : 27.666 ps Reaction : °OH^0 (-3448) + °OH^0 (-3444) -> H2O2^0 (-4625) +At time : 29.864 ps Reaction : °OH^0 (-2932) + HO_2°^0 (-4576) -> No product +At time : 30.033 ps Reaction : °OH^0 (-2674) + °OH^0 (-2672) -> H2O2^0 (-4626) +At time : 30.227 ps Reaction : °OH^0 (-2628) + °OH^0 (-2618) -> H2O2^0 (-4627) +At time : 30.74 ps Reaction : H3O^1 (-3181) + OH^-1 (-4611) -> No product +At time : 31.147 ps Reaction : °O^0 (-4531) + °OH^0 (-4537) -> HO_2°^0 (-4628) +At time : 31.799 ps Reaction : H3O^1 (-3551) + e_aq^-1 (-1046) -> H^0 (-4629) +At time : 33.432 ps Reaction : °OH^0 (-3730) + H^0 (-4277) -> No product +At time : 34.497 ps Reaction : H3O^1 (-3227) + OH^-1 (-4598) -> No product +At time : 34.982 ps Reaction : °OH^0 (-3214) + °OH^0 (-2472) -> H2O2^0 (-4630) +At time : 36.595 ps Reaction : °OH^0 (-3604) + e_aq^-1 (-892) -> OH^-1 (-4631) +At time : 41.084 ps Reaction : °OH^0 (-3268) + H^0 (-4244) -> No product +At time : 41.125 ps Reaction : H^0 (-4122) + e_aq^-1 (-542) -> OH^-1 (-4632) + H_2^0 (-4633) +At time : 41.237 ps Reaction : H3O^1 (-3945) + e_aq^-1 (-44) -> H^0 (-4634) +At time : 43.219 ps Reaction : °OH^0 (-2266) + OH^-1 (-2265) -> O^-1 (-4635) +At time : 45.431 ps Reaction : H^0 (-4108) + e_aq^-1 (-1042) -> OH^-1 (-4636) + H_2^0 (-4637) +At time : 47.125 ps Reaction : H^0 (-4249) + H^0 (-4248) -> H_2^0 (-4638) +At time : 48.521 ps Reaction : °OH^0 (-3740) + e_aq^-1 (-689) -> OH^-1 (-4639) +At time : 51.515 ps Reaction : °OH^0 (-2810) + °OH^0 (-2378) -> H2O2^0 (-4640) +At time : 51.69 ps Reaction : °OH^0 (-3284) + °OH^0 (-2466) -> H2O2^0 (-4641) +At time : 51.709 ps Reaction : °OH^0 (-3484) + °OH^0 (-2518) -> H2O2^0 (-4642) +At time : 53.352 ps Reaction : °OH^0 (-3314) + H^0 (-4395) -> No product +At time : 54.932 ps Reaction : °OH^0 (-4560) + °OH^0 (-4559) -> H2O2^0 (-4643) +At time : 55.834 ps Reaction : °OH^0 (-2972) + °OH^0 (-4503) -> H2O2^0 (-4644) +At time : 57.391 ps Reaction : °OH^0 (-3724) + °OH^0 (-4485) -> H2O2^0 (-4645) +At time : 59.565 ps Reaction : H3O^1 (-3673) + e_aq^-1 (-749) -> H^0 (-4646) +At time : 59.672 ps Reaction : H3O^1 (-4045) + OH^-1 (-2322) -> No product +At time : 61.231 ps Reaction : H3O^1 (-2461) + OH^-1 (-4593) -> No product +At time : 61.231 ps Reaction : e_aq^-1 (-4019) + °OH^0 (-4017) -> OH^-1 (-4648) +At time : 61.231 ps Reaction : °OH^0 (-2372) + e_aq^-1 (-1538) -> OH^-1 (-4649) +At time : 63.15 ps Reaction : °OH^0 (-3074) + e_aq^-1 (-142) -> OH^-1 (-4650) +At time : 67.978 ps Reaction : °OH^0 (-4339) + H^0 (-4340) -> No product +At time : 68.761 ps Reaction : °OH^0 (-3120) + °OH^0 (-3112) -> H2O2^0 (-4651) +At time : 69.903 ps Reaction : °OH^0 (-4208) + °OH^0 (-4209) -> H2O2^0 (-4652) +At time : 70.023 ps Reaction : e_aq^-1 (-4055) + H3O^1 (-2607) -> H^0 (-4653) +At time : 71.044 ps Reaction : °OH^0 (-4541) + H^0 (-4542) -> No product +At time : 71.688 ps Reaction : e_aq^-1 (-4134) + °OH^0 (-4132) -> OH^-1 (-4654) +At time : 72.286 ps Reaction : °OH^0 (-3496) + e_aq^-1 (-1166) -> OH^-1 (-4655) +At time : 75.885 ps Reaction : °OH^0 (-3678) + °OH^0 (-4272) -> H2O2^0 (-4656) +At time : 76.412 ps Reaction : °OH^0 (-4430) + °OH^0 (-4431) -> H2O2^0 (-4657) +At time : 76.428 ps Reaction : OH^-1 (-4655) + H3O^1 (-2521) -> No product +At time : 76.738 ps Reaction : °OH^0 (-2284) + OH^-1 (-2283) -> O^-1 (-4658) +At time : 77.179 ps Reaction : °OH^0 (-4227) + °OH^0 (-4321) -> H2O2^0 (-4659) +At time : 79.997 ps Reaction : H3O^1 (-2357) + e_aq^-1 (-1752) -> H^0 (-4660) +At time : 81.028 ps Reaction : °OH^0 (-3808) + °OH^0 (-3806) -> H2O2^0 (-4661) +At time : 84.585 ps Reaction : °OH^0 (-3412) + e_aq^-1 (-1358) -> OH^-1 (-4662) +At time : 85.408 ps Reaction : °OH^0 (-3804) + H^0 (-4294) -> No product +At time : 87.2 ps Reaction : H3O^1 (-2481) + OH^-1 (-2277) -> No product +At time : 87.581 ps Reaction : e_aq^-1 (-4086) + °OH^0 (-4084) -> OH^-1 (-4663) +At time : 91.835 ps Reaction : °OH^0 (-3334) + °OH^0 (-3332) -> H2O2^0 (-4664) +At time : 95.2 ps Reaction : H3O^1 (-2479) + e_aq^-1 (-1598) -> H^0 (-4665) +At time : 99.904 ps Reaction : °OH^0 (-3374) + e_aq^-1 (-1462) -> OH^-1 (-4666) +At time : 100.2 ps Reaction : °OH^0 (-4158) + °OH^0 (-3446) -> H2O2^0 (-4667) +At time : 101.33 ps Reaction : H^0 (-4241) + e_aq^-1 (-1801) -> OH^-1 (-4668) + H_2^0 (-4669) +At time : 106.72 ps Reaction : °OH^0 (-3596) + °OH^0 (-4452) -> H2O2^0 (-4670) +At time : 108.44 ps Reaction : °OH^0 (-4400) + °OH^0 (-4203) -> H2O2^0 (-4671) +At time : 109.11 ps Reaction : °OH^0 (-2336) + e_aq^-1 (-564) -> OH^-1 (-4672) +At time : 109.23 ps Reaction : °OH^0 (-4150) + °OH^0 (-4365) -> H2O2^0 (-4673) +At time : 110.12 ps Reaction : °OH^0 (-2428) + e_aq^-1 (-2094) -> OH^-1 (-4674) +At time : 113.25 ps Reaction : °OH^0 (-3812) + °OH^0 (-3000) -> H2O2^0 (-4675) +At time : 115.2 ps Reaction : °OH^0 (-4371) + H^0 (-4372) -> No product +At time : 116.18 ps Reaction : °OH^0 (-3088) + e_aq^-1 (-57) -> OH^-1 (-4676) +At time : 116.69 ps Reaction : °OH^0 (-3490) + e_aq^-1 (-1186) -> OH^-1 (-4677) +At time : 116.87 ps Reaction : °OH^0 (-4176) + °OH^0 (-3640) -> H2O2^0 (-4678) +At time : 118.97 ps Reaction : e_aq^-1 (-4031) + H3O^1 (-4264) -> H^0 (-4679) +At time : 123.17 ps Reaction : °OH^0 (-4505) + °OH^0 (-4506) -> H2O2^0 (-4680) +At time : 125.52 ps Reaction : H^0 (-4679) + °OH^0 (-4449) -> No product +At time : 131.25 ps Reaction : H3O^1 (-4133) + OH^-1 (-4654) -> No product +At time : 132.47 ps Reaction : H3O^1 (-2827) + e_aq^-1 (-1190) -> H^0 (-4681) +At time : 133.08 ps Reaction : H3O^1 (-3089) + OH^-1 (-4676) -> No product +At time : 141 ps Reaction : °OH^0 (-3462) + °OH^0 (-4259) -> H2O2^0 (-4682) +At time : 145.45 ps Reaction : °OH^0 (-2496) + H^0 (-4251) -> No product +At time : 157 ps Reaction : H3O^1 (-3489) + OH^-1 (-4677) -> No product +At time : 162.74 ps Reaction : H3O^1 (-2917) + O^-1 (-4570) -> °OH^0 (-4683) +At time : 164.39 ps Reaction : °OH^0 (-3130) + °OH^0 (-4217) -> H2O2^0 (-4684) +At time : 165.88 ps Reaction : °OH^0 (-3560) + e_aq^-1 (-1045) -> OH^-1 (-4685) +At time : 166.77 ps Reaction : °OH^0 (-4162) + °OH^0 (-2334) -> H2O2^0 (-4686) +At time : 169.9 ps Reaction : °OH^0 (-3722) + H^0 (-4487) -> No product +At time : 171.38 ps Reaction : °OH^0 (-3670) + °OH^0 (-4683) -> H2O2^0 (-4687) +At time : 172.23 ps Reaction : °OH^0 (-3410) + e_aq^-1 (-1373) -> OH^-1 (-4688) +At time : 173.23 ps Reaction : H3O^1 (-3409) + OH^-1 (-4688) -> No product +At time : 174.01 ps Reaction : °OH^0 (-4050) + e_aq^-1 (-72) -> OH^-1 (-4689) +At time : 179.87 ps Reaction : H^0 (-4532) + °OH^0 (-4535) -> No product +At time : 183.22 ps Reaction : °OH^0 (-3972) + °OH^0 (-2830) -> H2O2^0 (-4690) +At time : 183.75 ps Reaction : °OH^0 (-2584) + e_aq^-1 (-373) -> OH^-1 (-4691) +At time : 185.28 ps Reaction : °OH^0 (-3466) + °OH^0 (-4260) -> H2O2^0 (-4692) +At time : 188.57 ps Reaction : H3O^1 (-3369) + OH^-1 (-4648) -> No product +At time : 199.3 ps Reaction : e_aq^-1 (-3980) + H3O^1 (-2933) -> H^0 (-4693) +At time : 199.72 ps Reaction : H3O^1 (-2741) + OH^-1 (-4649) -> No product +At time : 205.21 ps Reaction : H3O^1 (-4190) + OH^-1 (-4632) -> No product +At time : 206.4 ps Reaction : H^0 (-4213) + °OH^0 (-4315) -> No product +At time : 208.87 ps Reaction : °OH^0 (-3156) + H^0 (-4221) -> No product +At time : 209.9 ps Reaction : °OH^0 (-3092) + °OH^0 (-2608) -> H2O2^0 (-4694) +At time : 211.28 ps Reaction : °OH^0 (-4117) + °OH^0 (-3680) -> H2O2^0 (-4695) +At time : 212.79 ps Reaction : H3O^1 (-3751) + e_aq^-1 (-568) -> H^0 (-4696) +At time : 214.34 ps Reaction : H3O^1 (-3487) + e_aq^-1 (-1179) -> H^0 (-4697) +At time : 215.67 ps Reaction : OH^-1 (-4668) + °OH^0 (-4551) -> O^-1 (-4698) +At time : 219.79 ps Reaction : °OH^0 (-3928) + °OH^0 (-3068) -> H2O2^0 (-4699) +At time : 230.72 ps Reaction : H^0 (-4072) + °OH^0 (-3220) -> No product +At time : 236.98 ps Reaction : °OH^0 (-3642) + H^0 (-4459) -> No product +At time : 238.4 ps Reaction : °OH^0 (-4202) + H^0 (-4404) -> No product +At time : 243.36 ps Reaction : e_aq^-1 (-4007) + °OH^0 (-2712) -> OH^-1 (-4700) +At time : 245.04 ps Reaction : H3O^1 (-2671) + e_aq^-1 (-1895) -> H^0 (-4701) +At time : 245.36 ps Reaction : °OH^0 (-3890) + e_aq^-1 (-174) -> OH^-1 (-4702) +At time : 245.9 ps Reaction : H3O^1 (-3209) + e_aq^-1 (-1911) -> H^0 (-4703) +At time : 247.5 ps Reaction : °OH^0 (-2944) + H^0 (-4275) -> No product +At time : 249.46 ps Reaction : H3O^1 (-2637) + e_aq^-1 (-2129) -> H^0 (-4704) +At time : 273.18 ps Reaction : °OH^0 (-4128) + H^0 (-4127) -> No product +At time : 274.31 ps Reaction : °OH^0 (-2424) + °OH^0 (-4553) -> H2O2^0 (-4705) +At time : 279.07 ps Reaction : H3O^1 (-2959) + OH^-1 (-4672) -> No product +At time : 279.58 ps Reaction : °OH^0 (-3578) + °O^0 (-4445) -> HO_2°^0 (-4706) +At time : 288.95 ps Reaction : °OH^0 (-4083) + °OH^0 (-4363) -> H2O2^0 (-4707) +At time : 290.3 ps Reaction : °OH^0 (-2422) + H^0 (-4653) -> No product +At time : 293.72 ps Reaction : °OH^0 (-3686) + °OH^0 (-2922) -> H2O2^0 (-4708) +At time : 298.06 ps Reaction : °OH^0 (-3286) + °OH^0 (-3238) -> H2O2^0 (-4709) +At time : 318.98 ps Reaction : °OH^0 (-3720) + e_aq^-1 (-625) -> OH^-1 (-4710) +At time : 322.4 ps Reaction : °OH^0 (-3282) + °OH^0 (-2694) -> H2O2^0 (-4711) +At time : 333.32 ps Reaction : °OH^0 (-3124) + °OH^0 (-2338) -> H2O2^0 (-4712) +At time : 336.26 ps Reaction : °OH^0 (-3408) + e_aq^-1 (-1377) -> OH^-1 (-4713) +At time : 346.66 ps Reaction : °OH^0 (-3278) + e_aq^-1 (-1808) -> OH^-1 (-4714) +At time : 350.73 ps Reaction : °OH^0 (-4556) + °OH^0 (-4557) -> H2O2^0 (-4715) +At time : 351.86 ps Reaction : e_aq^-1 (-4046) + °OH^0 (-4526) -> OH^-1 (-4716) +At time : 365.36 ps Reaction : H3O^1 (-3583) + e_aq^-1 (-964) -> H^0 (-4717) +At time : 366.9 ps Reaction : °OH^0 (-3250) + °OH^0 (-2462) -> H2O2^0 (-4718) +At time : 371.41 ps Reaction : °OH^0 (-3458) + H^0 (-4187) -> No product +At time : 373.93 ps Reaction : °OH^0 (-2960) + °OH^0 (-4496) -> H2O2^0 (-4719) +At time : 379.77 ps Reaction : OH^-1 (-4710) + °OH^0 (-2940) -> O^-1 (-4720) +At time : 392.42 ps Reaction : °OH^0 (-3138) + °OH^0 (-3118) -> H2O2^0 (-4721) +At time : 406.81 ps Reaction : H3O^1 (-2537) + OH^-1 (-2301) -> No product +At time : 409.43 ps Reaction : °OH^0 (-3748) + H^0 (-4282) -> No product +At time : 416.4 ps Reaction : H3O^1 (-3273) + O^-1 (-4698) -> °OH^0 (-4722) +At time : 419.71 ps Reaction : °OH^0 (-3824) + e_aq^-1 (-327) -> OH^-1 (-4723) +At time : 429.55 ps Reaction : e_aq^-1 (-4010) + H3O^1 (-4009) -> H^0 (-4724) +At time : 430.89 ps Reaction : e_aq^-1 (-901) + H^0 (-4269) -> OH^-1 (-4725) + H_2^0 (-4726) +At time : 433.14 ps Reaction : H^0 (-4377) + °OH^0 (-4350) -> No product +At time : 439.42 ps Reaction : °OH^0 (-3562) + e_aq^-1 (-1014) -> OH^-1 (-4727) +At time : 443.74 ps Reaction : H^0 (-4064) + °OH^0 (-4233) -> No product +At time : 461.69 ps Reaction : H3O^1 (-2713) + OH^-1 (-4700) -> No product +At time : 466.52 ps Reaction : °OH^0 (-2754) + °O^0 (-4405) -> HO_2°^0 (-4728) +At time : 467.33 ps Reaction : °OH^0 (-2263) + H^0 (-4237) -> No product +At time : 469.79 ps Reaction : H3O^1 (-3909) + OH^-1 (-4650) -> No product +At time : 480.27 ps Reaction : H3O^1 (-2723) + OH^-1 (-2262) -> No product +At time : 483.9 ps Reaction : H^0 (-4141) + °OH^0 (-3128) -> No product +At time : 490.17 ps Reaction : °OH^0 (-2450) + OH^-1 (-4621) -> O^-1 (-4729) +At time : 491.7 ps Reaction : °OH^0 (-3628) + °OH^0 (-2554) -> H2O2^0 (-4730) +At time : 492.52 ps Reaction : °OH^0 (-2426) + H^0 (-4219) -> No product +At time : 501.74 ps Reaction : e_aq^-1 (-3989) + e_aq^-1 (-1819) -> OH^-1 (-4731) + OH^-1 (-4732) + H_2^0 (-4733) +At time : 501.97 ps Reaction : H3O^1 (-2965) + e_aq^-1 (-518) -> H^0 (-4734) +At time : 505.06 ps Reaction : °OH^0 (-3726) + e_aq^-1 (-653) -> OH^-1 (-4735) +At time : 509.54 ps Reaction : °OH^0 (-3488) + e_aq^-1 (-1160) -> OH^-1 (-4736) +At time : 515.17 ps Reaction : °OH^0 (-3672) + e_aq^-1 (-766) -> OH^-1 (-4737) +At time : 516.91 ps Reaction : °OH^0 (-3810) + OH^-1 (-4716) -> O^-1 (-4738) +At time : 521.42 ps Reaction : °OH^0 (-4061) + °OH^0 (-2340) -> H2O2^0 (-4739) +At time : 524.8 ps Reaction : °OH^0 (-3288) + e_aq^-1 (-1837) -> OH^-1 (-4740) +At time : 528.12 ps Reaction : H3O^1 (-2359) + O^-1 (-4635) -> °OH^0 (-4741) +At time : 530.15 ps Reaction : H3O^1 (-3727) + OH^-1 (-4735) -> No product +At time : 541.87 ps Reaction : H3O^1 (-3837) + e_aq^-1 (-303) -> H^0 (-4742) +At time : 546.69 ps Reaction : °OH^0 (-2362) + °O^0 (-4378) -> HO_2°^0 (-4743) +At time : 549.72 ps Reaction : H2O2^0 (-4709) + OH^-1 (-4740) -> HO_2^-1 (-4744) +At time : 554.82 ps Reaction : °OH^0 (-4140) + e_aq^-1 (-2180) -> OH^-1 (-4745) +At time : 559.23 ps Reaction : °OH^0 (-2710) + e_aq^-1 (-1874) -> OH^-1 (-4746) +At time : 567.73 ps Reaction : °O^0 (-4497) + °OH^0 (-3758) -> HO_2°^0 (-4747) +At time : 572.17 ps Reaction : H3O^1 (-3279) + OH^-1 (-4732) -> No product +At time : 576.28 ps Reaction : H3O^1 (-2577) + OH^-1 (-2313) -> No product +At time : 580.15 ps Reaction : H3O^1 (-3477) + e_aq^-1 (-1171) -> H^0 (-4748) +At time : 584.42 ps Reaction : °OH^0 (-2934) + °OH^0 (-4188) -> H2O2^0 (-4749) +At time : 595.15 ps Reaction : e_aq^-1 (-651) + °OH^0 (-4482) -> OH^-1 (-4750) +At time : 595.67 ps Reaction : °OH^0 (-3502) + °OH^0 (-4438) -> H2O2^0 (-4751) +At time : 604.97 ps Reaction : °OH^0 (-3846) + e_aq^-1 (-289) -> OH^-1 (-4752) +At time : 610.76 ps Reaction : H3O^1 (-3713) + OH^-1 (-4750) -> No product +At time : 613.47 ps Reaction : °OH^0 (-2916) + °OH^0 (-4471) -> H2O2^0 (-4753) +At time : 615.25 ps Reaction : H3O^1 (-3481) + e_aq^-1 (-1174) -> H^0 (-4754) +At time : 615.61 ps Reaction : °OH^0 (-2524) + e_aq^-1 (-1207) -> OH^-1 (-4755) +At time : 617.06 ps Reaction : H3O^1 (-3137) + OH^-1 (-4745) -> No product +At time : 620.79 ps Reaction : °OH^0 (-2586) + e_aq^-1 (-374) -> OH^-1 (-4756) +At time : 627.66 ps Reaction : °OH^0 (-3274) + °OH^0 (-4353) -> H2O2^0 (-4757) +At time : 632.8 ps Reaction : HO_2°^0 (-4600) + °OH^0 (-4186) -> No product +At time : 638.26 ps Reaction : °OH^0 (-2806) + H^0 (-4435) -> No product +At time : 645.01 ps Reaction : °OH^0 (-3304) + °OH^0 (-4236) -> H2O2^0 (-4758) +At time : 649.71 ps Reaction : °OH^0 (-3898) + °OH^0 (-3882) -> H2O2^0 (-4759) +At time : 655.83 ps Reaction : °OH^0 (-3838) + °OH^0 (-2598) -> H2O2^0 (-4760) +At time : 656.95 ps Reaction : H3O^1 (-3911) + e_aq^-1 (-140) -> H^0 (-4761) +At time : 657.47 ps Reaction : °OH^0 (-3114) + H^0 (-4554) -> No product +At time : 659.33 ps Reaction : °OH^0 (-4463) + H^0 (-4464) -> No product +At time : 659.47 ps Reaction : °OH^0 (-2966) + H^0 (-4734) -> No product +At time : 666.11 ps Reaction : °OH^0 (-3390) + °OH^0 (-2776) -> H2O2^0 (-4762) +At time : 672.31 ps Reaction : °OH^0 (-3744) + °OH^0 (-2580) -> H2O2^0 (-4763) +At time : 675.63 ps Reaction : °OH^0 (-2314) + e_aq^-1 (-554) -> OH^-1 (-4764) +At time : 683.07 ps Reaction : H3O^1 (-3807) + OH^-1 (-4756) -> No product +At time : 688.89 ps Reaction : e_aq^-1 (-4004) + H^0 (-4317) -> OH^-1 (-4765) + H_2^0 (-4766) +At time : 697.07 ps Reaction : °OH^0 (-3478) + e_aq^-1 (-1199) -> OH^-1 (-4767) +At time : 699.1 ps Reaction : OH^-1 (-4725) + H3O^1 (-2391) -> No product +At time : 703.28 ps Reaction : H3O^1 (-2415) + OH^-1 (-2325) -> No product +At time : 706.13 ps Reaction : °OH^0 (-4098) + °OH^0 (-4566) -> H2O2^0 (-4768) +At time : 706.66 ps Reaction : H3O^1 (-3743) + e_aq^-1 (-580) -> H^0 (-4769) +At time : 716.35 ps Reaction : °OH^0 (-3746) + e_aq^-1 (-573) -> OH^-1 (-4770) +At time : 725.98 ps Reaction : °OH^0 (-3728) + °OH^0 (-4486) -> H2O2^0 (-4771) +At time : 738.68 ps Reaction : °OH^0 (-3176) + °OH^0 (-2436) -> H2O2^0 (-4772) +At time : 745.5 ps Reaction : °OH^0 (-2930) + H^0 (-4693) -> No product +At time : 745.67 ps Reaction : °OH^0 (-4160) + OH^-1 (-4736) -> O^-1 (-4773) +At time : 749.26 ps Reaction : H2O2^0 (-4616) + OH^-1 (-4765) -> HO_2^-1 (-4774) +At time : 779.15 ps Reaction : °OH^0 (-3576) + °OH^0 (-2305) -> H2O2^0 (-4775) +At time : 839.33 ps Reaction : H3O^1 (-3177) + OH^-1 (-2259) -> No product +At time : 846.4 ps Reaction : H3O^1 (-2393) + e_aq^-1 (-806) -> H^0 (-4776) +At time : 849.3 ps Reaction : °OH^0 (-3486) + e_aq^-1 (-1191) -> OH^-1 (-4777) +At time : 869.62 ps Reaction : e_aq^-1 (-3986) + H3O^1 (-3111) -> H^0 (-4778) +At time : 900.33 ps Reaction : H2O2^0 (-4627) + H^0 (-4306) -> °OH^0 (-4779) +At time : 903.35 ps Reaction : H^0 (-4165) + e_aq^-1 (-1161) -> OH^-1 (-4780) + H_2^0 (-4781) +At time : 907.09 ps Reaction : °OH^0 (-3066) + HO_2°^0 (-4591) -> No product +At time : 907.41 ps Reaction : °OH^0 (-3622) + °OH^0 (-2892) -> H2O2^0 (-4782) +At time : 907.48 ps Reaction : °OH^0 (-4779) + °OH^0 (-2626) -> H2O2^0 (-4783) +At time : 947.99 ps Reaction : H3O^1 (-2641) + OH^-1 (-4674) -> No product +At time : 970.97 ps Reaction : °OH^0 (-2978) + °O^0 (-4507) -> HO_2°^0 (-4784) +At time : 1.0413 ns Reaction : H3O^1 (-4414) + e_aq^-1 (-1461) -> H^0 (-4785) +At time : 1.0629 ns Reaction : °OH^0 (-4184) + °OH^0 (-4142) -> H2O2^0 (-4786) +At time : 1.065 ns Reaction : °OH^0 (-3574) + °OH^0 (-3572) -> H2O2^0 (-4787) +At time : 1.0891 ns Reaction : °OH^0 (-3454) + e_aq^-1 (-1293) -> OH^-1 (-4788) +At time : 1.1077 ns Reaction : °OH^0 (-3428) + e_aq^-1 (-1379) -> OH^-1 (-4789) +At time : 1.1144 ns Reaction : °OH^0 (-2558) + °O^0 (-4458) -> HO_2°^0 (-4790) +At time : 1.12 ns Reaction : °OH^0 (-2824) + OH^-1 (-2289) -> O^-1 (-4792) +At time : 1.1381 ns Reaction : °OH^0 (-3956) + e_aq^-1 (-63) -> OH^-1 (-4793) +At time : 1.1464 ns Reaction : e_aq^-1 (-371) + e_aq^-1 (-412) -> OH^-1 (-4794) + OH^-1 (-4795) + H_2^0 (-4796) +At time : 1.1465 ns Reaction : H^0 (-4147) + °OH^0 (-4146) -> No product +At time : 1.1564 ns Reaction : H3O^1 (-3431) + OH^-1 (-4604) -> No product +At time : 1.1611 ns Reaction : °OH^0 (-3240) + °OH^0 (-4741) -> H2O2^0 (-4798) +At time : 1.1874 ns Reaction : H^0 (-4159) + e_aq^-1 (-1283) -> OH^-1 (-4799) + H_2^0 (-4800) +At time : 1.1879 ns Reaction : °OH^0 (-3754) + e_aq^-1 (-571) -> OH^-1 (-4801) +At time : 1.1882 ns Reaction : H^0 (-4145) + °OH^0 (-3154) -> No product +At time : 1.1895 ns Reaction : °OH^0 (-3542) + °OH^0 (-2388) -> H2O2^0 (-4802) +At time : 1.2064 ns Reaction : H3O^1 (-2957) + OH^-1 (-4770) -> No product +At time : 1.208 ns Reaction : H3O^1 (-2967) + OH^-1 (-4801) -> No product +At time : 1.2165 ns Reaction : °OH^0 (-2988) + °O^0 (-4292) -> HO_2°^0 (-4803) +At time : 1.2311 ns Reaction : H^0 (-4143) + e_aq^-1 (-2177) -> OH^-1 (-4804) + H_2^0 (-4805) +At time : 1.2438 ns Reaction : °OH^0 (-3354) + e_aq^-1 (-1499) -> OH^-1 (-4806) +At time : 1.2701 ns Reaction : H3O^1 (-3043) + e_aq^-1 (-243) -> H^0 (-4807) +At time : 1.2761 ns Reaction : e_aq^-1 (-4105) + °OH^0 (-3536) -> OH^-1 (-4808) +At time : 1.2784 ns Reaction : °OH^0 (-2956) + e_aq^-1 (-555) -> OH^-1 (-4809) +At time : 1.2869 ns Reaction : °OH^0 (-3236) + °OH^0 (-2698) -> H2O2^0 (-4812) +At time : 1.287 ns Reaction : °OH^0 (-3210) + H^0 (-4703) -> No product +At time : 1.2931 ns Reaction : °OH^0 (-4426) + e_aq^-1 (-1242) -> OH^-1 (-4813) +At time : 1.3299 ns Reaction : H3O^1 (-2953) + e_aq^-1 (-682) -> H^0 (-4814) +At time : 1.3627 ns Reaction : °OH^0 (-3464) + °OH^0 (-4428) -> H2O2^0 (-4815) +At time : 1.3679 ns Reaction : °OH^0 (-2904) + e_aq^-1 (-794) -> OH^-1 (-4816) +At time : 1.3725 ns Reaction : °OH^0 (-3756) + °OH^0 (-3752) -> H2O2^0 (-4817) +At time : 1.424 ns Reaction : e_aq^-1 (-1914) + e_aq^-1 (-1917) -> OH^-1 (-4819) + OH^-1 (-4820) + H_2^0 (-4821) +At time : 1.4308 ns Reaction : °OH^0 (-3248) + °O^0 (-4373) -> HO_2°^0 (-4823) +At time : 1.4343 ns Reaction : °OH^0 (-3530) + °OH^0 (-3528) -> H2O2^0 (-4824) +At time : 1.4358 ns Reaction : °OH^0 (-4178) + H^0 (-4769) -> No product +At time : 1.4426 ns Reaction : °OH^0 (-2522) + e_aq^-1 (-1159) -> OH^-1 (-4825) +At time : 1.456 ns Reaction : °OH^0 (-3096) + e_aq^-1 (-71) -> OH^-1 (-4826) +At time : 1.5089 ns Reaction : H3O^1 (-4104) + OH^-1 (-4808) -> No product +At time : 1.5274 ns Reaction : H3O^1 (-3681) + OH^-1 (-4737) -> No product +At time : 1.55 ns Reaction : °O^0 (-4121) + °OH^0 (-4191) -> HO_2°^0 (-4828) +At time : 1.5663 ns Reaction : °OH^0 (-3874) + e_aq^-1 (-207) -> OH^-1 (-4829) +At time : 1.5804 ns Reaction : H3O^1 (-2611) + OH^-1 (-4793) -> No product +At time : 1.581 ns Reaction : e_aq^-1 (-536) + °OH^0 (-4494) -> OH^-1 (-4830) +At time : 1.5942 ns Reaction : H3O^1 (-2765) + OH^-1 (-4666) -> No product +At time : 1.597 ns Reaction : O^-1 (-4773) + H3O^1 (-2381) -> °OH^0 (-4832) +At time : 1.6493 ns Reaction : OH^-1 (-4830) + H3O^1 (-4495) -> No product +At time : 1.6498 ns Reaction : °OH^0 (-2476) + e_aq^-1 (-1943) -> OH^-1 (-4835) +At time : 1.6965 ns Reaction : OH^-1 (-4662) + H3O^1 (-3421) -> No product +At time : 1.7301 ns Reaction : °OH^0 (-4047) + °OH^0 (-3016) -> H2O2^0 (-4836) +At time : 1.7361 ns Reaction : H2O2^0 (-4711) + e_aq^-1 (-1816) -> OH^-1 (-4837) + °OH^0 (-4838) +At time : 1.7458 ns Reaction : °OH^0 (-4002) + °OH^0 (-3160) -> H2O2^0 (-4839) +At time : 1.7483 ns Reaction : °OH^0 (-2872) + °OH^0 (-4265) -> H2O2^0 (-4840) +At time : 1.7602 ns Reaction : °OH^0 (-3260) + °OH^0 (-2272) -> H2O2^0 (-4841) +At time : 1.7719 ns Reaction : °OH^0 (-3372) + °OH^0 (-4413) -> H2O2^0 (-4842) +At time : 1.8217 ns Reaction : e_aq^-1 (-3992) + °OH^0 (-3990) -> OH^-1 (-4843) +At time : 1.8403 ns Reaction : H3O^1 (-2987) + e_aq^-1 (-378) -> H^0 (-4844) +At time : 1.8474 ns Reaction : H3O^1 (-3991) + OH^-1 (-4843) -> No product +At time : 1.8724 ns Reaction : H3O^1 (-3571) + OH^-1 (-2304) -> No product +At time : 1.8826 ns Reaction : H3O^1 (-3745) + OH^-1 (-4809) -> No product +At time : 1.8857 ns Reaction : °OH^0 (-2696) + HO_2^-1 (-4744) -> HO_2°^0 (-4846) + OH^-1 (-4847) +At time : 1.9597 ns Reaction : °OH^0 (-3666) + e_aq^-1 (-780) -> OH^-1 (-4849) +At time : 2.0377 ns Reaction : H3O^1 (-2855) + OH^-1 (-4636) -> No product +At time : 2.0397 ns Reaction : °OH^0 (-4478) + °OH^0 (-4481) -> H2O2^0 (-4850) +At time : 2.0436 ns Reaction : H3O^1 (-3265) + OH^-1 (-4663) -> No product +At time : 2.0651 ns Reaction : °OH^0 (-2962) + °OH^0 (-4491) -> H2O2^0 (-4852) +At time : 2.074 ns Reaction : °OH^0 (-2996) + °OH^0 (-2992) -> H2O2^0 (-4853) +At time : 2.0855 ns Reaction : OH^-1 (-4788) + H3O^1 (-3463) -> No product +At time : 2.0989 ns Reaction : °OH^0 (-4501) + e_aq^-1 (-525) -> OH^-1 (-4855) +At time : 2.1125 ns Reaction : °OH^0 (-3382) + °OH^0 (-2374) -> H2O2^0 (-4856) +At time : 2.1538 ns Reaction : °OH^0 (-4154) + °OH^0 (-3422) -> H2O2^0 (-4857) +At time : 2.1579 ns Reaction : OH^-1 (-4847) + H3O^1 (-3237) -> No product +At time : 2.1673 ns Reaction : H^0 (-4785) + e_aq^-1 (-1453) -> OH^-1 (-4858) + H_2^0 (-4859) +At time : 2.1679 ns Reaction : °OH^0 (-2516) + e_aq^-1 (-1332) -> OH^-1 (-4860) +At time : 2.1841 ns Reaction : H3O^1 (-2557) + e_aq^-1 (-838) -> H^0 (-4861) +At time : 2.2395 ns Reaction : °OH^0 (-3504) + °OH^0 (-2296) -> H2O2^0 (-4863) +At time : 2.2924 ns Reaction : °OH^0 (-3122) + °OH^0 (-2620) -> H2O2^0 (-4864) +At time : 2.2968 ns Reaction : °OH^0 (-3352) + °OH^0 (-2500) -> H2O2^0 (-4866) +At time : 2.3741 ns Reaction : H3O^1 (-2949) + e_aq^-1 (-604) -> H^0 (-4867) +At time : 2.4638 ns Reaction : e_aq^-1 (-137) + e_aq^-1 (-139) -> OH^-1 (-4868) + OH^-1 (-4869) + H_2^0 (-4870) +At time : 2.4833 ns Reaction : H3O^1 (-2939) + O^-1 (-4720) -> °OH^0 (-4871) +At time : 2.4875 ns Reaction : °OH^0 (-2293) + OH^-1 (-2292) -> O^-1 (-4872) +At time : 2.5375 ns Reaction : °OH^0 (-2882) + e_aq^-1 (-937) -> OH^-1 (-4873) +At time : 2.5867 ns Reaction : OH^-1 (-4795) + H3O^1 (-4525) -> No product +At time : 2.5872 ns Reaction : °OH^0 (-4026) + e_aq^-1 (-981) -> OH^-1 (-4874) +At time : 2.5897 ns Reaction : H3O^1 (-3115) + e_aq^-1 (-2201) -> H^0 (-4875) +At time : 2.6414 ns Reaction : °OH^0 (-3993) + °OH^0 (-2914) -> H2O2^0 (-4876) +At time : 2.6876 ns Reaction : °OH^0 (-3256) + °OH^0 (-2356) -> H2O2^0 (-4877) +At time : 2.7809 ns Reaction : OH^-1 (-4835) + H3O^1 (-4329) -> No product +At time : 2.8106 ns Reaction : °OH^0 (-4722) + H^0 (-4552) -> No product +At time : 2.8618 ns Reaction : °OH^0 (-2832) + e_aq^-1 (-1149) -> OH^-1 (-4880) +At time : 2.8625 ns Reaction : °OH^0 (-4053) + °OH^0 (-3944) -> H2O2^0 (-4881) +At time : 2.8801 ns Reaction : °OH^0 (-3508) + °OH^0 (-4832) -> H2O2^0 (-4882) +At time : 2.9468 ns Reaction : e_aq^-1 (-4089) + H3O^1 (-3207) -> H^0 (-4884) +At time : 2.9629 ns Reaction : H3O^1 (-2825) + OH^-1 (-4767) -> No product +At time : 2.9667 ns Reaction : H3O^1 (-2963) + OH^-1 (-4855) -> No product +At time : 3.0027 ns Reaction : °OH^0 (-3456) + e_aq^-1 (-1235) -> OH^-1 (-4885) +At time : 3.0371 ns Reaction : °OH^0 (-2860) + °O^0 (-4261) -> HO_2°^0 (-4886) +At time : 3.0518 ns Reaction : H3O^1 (-3491) + OH^-1 (-4825) -> No product +At time : 3.1345 ns Reaction : °OH^0 (-3470) + °OH^0 (-2808) -> H2O2^0 (-4887) +At time : 3.1987 ns Reaction : °OH^0 (-3802) + e_aq^-1 (-411) -> OH^-1 (-4888) +At time : 3.2624 ns Reaction : O^-1 (-4729) + e_aq^-1 (-2008) -> OH^-1 (-4889) + OH^-1 (-4890) +At time : 3.289 ns Reaction : H3O^1 (-2679) + e_aq^-1 (-1818) -> H^0 (-4892) +At time : 3.289 ns Reaction : H3O^1 (-2819) + OH^-1 (-4885) -> No product +At time : 3.289 ns Reaction : e_aq^-1 (-4115) + H3O^1 (-3677) -> H^0 (-4893) +At time : 3.3656 ns Reaction : °OH^0 (-3648) + HO_2°^0 (-4790) -> No product +At time : 3.4315 ns Reaction : °OH^0 (-2622) + °OH^0 (-4212) -> H2O2^0 (-4894) +At time : 3.5248 ns Reaction : H3O^1 (-3295) + e_aq^-1 (-1864) -> H^0 (-4895) +At time : 3.5337 ns Reaction : H^0 (-4665) + °OH^0 (-4392) -> No product +At time : 3.5871 ns Reaction : HO_2°^0 (-4743) + e_aq^-1 (-1861) -> HO_2^-1 (-4897) +At time : 3.5971 ns Reaction : H^0 (-4844) + °OH^0 (-4514) -> No product +At time : 3.6552 ns Reaction : °OH^0 (-4475) + H^0 (-4476) -> No product +At time : 3.6756 ns Reaction : H3O^1 (-3641) + e_aq^-1 (-830) -> H^0 (-4898) +At time : 3.6898 ns Reaction : H2O2^0 (-4657) + e_aq^-1 (-1257) -> OH^-1 (-4899) + °OH^0 (-4900) +At time : 3.7641 ns Reaction : °OH^0 (-3398) + e_aq^-1 (-1400) -> OH^-1 (-4901) +At time : 3.7736 ns Reaction : °OH^0 (-3770) + e_aq^-1 (-503) -> OH^-1 (-4902) +At time : 3.806 ns Reaction : °OH^0 (-3098) + e_aq^-1 (-82) -> OH^-1 (-4904) +At time : 3.8271 ns Reaction : e_aq^-1 (-4112) + °OH^0 (-4110) -> OH^-1 (-4905) +At time : 3.8292 ns Reaction : °OH^0 (-2688) + °O^0 (-4242) -> HO_2°^0 (-4906) +At time : 3.9255 ns Reaction : H3O^1 (-3003) + e_aq^-1 (-405) -> H^0 (-4908) +At time : 3.9697 ns Reaction : °OH^0 (-3476) + °OH^0 (-3474) -> H2O2^0 (-4909) +At time : 3.9889 ns Reaction : °OH^0 (-2818) + e_aq^-1 (-1250) -> OH^-1 (-4910) +At time : 4.0053 ns Reaction : °OH^0 (-3090) + e_aq^-1 (-61) -> OH^-1 (-4912) +At time : 4.1037 ns Reaction : °OH^0 (-4470) + °OH^0 (-4469) -> H2O2^0 (-4914) +At time : 4.2239 ns Reaction : H3O^1 (-2639) + OH^-1 (-2253) -> No product +At time : 4.2779 ns Reaction : H3O^1 (-3191) + OH^-1 (-4889) -> No product +At time : 4.3566 ns Reaction : °OH^0 (-3920) + °OH^0 (-3916) -> H2O2^0 (-4920) +At time : 4.3695 ns Reaction : °OH^0 (-4144) + °OH^0 (-3150) -> H2O2^0 (-4921) +At time : 4.3849 ns Reaction : H2O2^0 (-4684) + e_aq^-1 (-2184) -> OH^-1 (-4922) + °OH^0 (-4923) +At time : 4.4025 ns Reaction : H3O^1 (-4099) + OH^-1 (-4899) -> No product +At time : 4.4148 ns Reaction : °OH^0 (-3358) + e_aq^-1 (-1501) -> OH^-1 (-4924) +At time : 4.4562 ns Reaction : °OH^0 (-2974) + HO_2°^0 (-4747) -> No product +At time : 4.4659 ns Reaction : °OH^0 (-4923) + H^0 (-4304) -> No product +At time : 4.6194 ns Reaction : H3O^1 (-3001) + OH^-1 (-4888) -> No product +At time : 4.6459 ns Reaction : H3O^1 (-2821) + OH^-1 (-4813) -> No product +At time : 4.6925 ns Reaction : °OH^0 (-3136) + °OH^0 (-4215) -> H2O2^0 (-4926) +At time : 4.8521 ns Reaction : °OH^0 (-3926) + e_aq^-1 (-126) -> OH^-1 (-4927) +At time : 4.8591 ns Reaction : °OH^0 (-4382) + e_aq^-1 (-1898) -> OH^-1 (-4929) +At time : 4.8617 ns Reaction : °OH^0 (-2366) + e_aq^-1 (-1918) -> OH^-1 (-4930) +At time : 4.8712 ns Reaction : H3O^1 (-3941) + OH^-1 (-4689) -> No product +At time : 5.0781 ns Reaction : H3O^1 (-3765) + e_aq^-1 (-498) -> H^0 (-4931) +At Time : 5.0781 ns the Mesh has 512 x 512 x 512 voxels with Resolution 6.25 nm during next 98.084 ns +At time : 5.145 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.2455 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 5.2624 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.3231 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.3609 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.4101 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.5434 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.5834 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 5.6037 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.6854 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 5.7501 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 5.7582 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 5.8485 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 5.8601 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 5.8666 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 5.8743 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 5.9561 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 5.9909 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 6.0445 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 6.0721 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.1345 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.1631 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 6.3145 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 6.4503 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.4806 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 6.5328 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.5969 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 6.6853 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7116 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 6.7219 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.7478 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7573 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 6.7657 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 6.9407 ns Reaction : °OH^0 + H^0 -> No product +At time : 6.9459 ns Reaction : °OH^0 + H^0 -> No product +At time : 6.9994 ns Reaction : °OH^0 + H^0 -> No product +At time : 7.0151 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.0257 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.1183 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.1434 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 7.1642 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 7.3921 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.4431 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 7.5004 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.6459 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 7.8253 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 7.8309 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 7.901 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 7.9178 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.0567 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 8.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.1829 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.3067 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 8.3284 ns Reaction : H3O^1 + O^-1 -> °OH^0 +At time : 8.4588 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 8.4829 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.718 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 8.7485 ns Reaction : °OH^0 + H^0 -> No product +At time : 8.7592 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 8.8347 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.9621 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 8.9632 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 9.0025 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.0312 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 9.0658 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.0707 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 9.1082 ns Reaction : °OH^0 + H^0 -> No product +At time : 9.1251 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 9.3064 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 9.545 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 9.6598 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 9.8069 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 9.9013 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 10.107 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.125 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 10.149 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.242 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 10.278 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 10.298 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.314 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.676 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 10.826 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 10.833 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 10.883 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 11.053 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 11.08 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 11.095 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 11.215 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 11.271 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 11.33 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 11.599 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 11.603 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 11.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 11.936 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 11.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.051 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.112 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.121 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.507 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.509 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 12.543 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 12.575 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 12.584 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 12.602 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 12.667 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.856 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.916 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 12.919 ns Reaction : °OH^0 + H^0 -> No product +At time : 12.992 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 13.136 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 13.178 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 13.477 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 13.842 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 14.005 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 14.237 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 14.436 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 14.633 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 14.725 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.851 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.942 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 14.946 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 15.119 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.169 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 15.195 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.445 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.515 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.698 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 15.774 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 15.838 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 15.882 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 16.699 ns Reaction : °OH^0 + H^0 -> No product +At time : 16.753 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 16.908 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 17.291 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 17.474 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 17.487 ns Reaction : °OH^0 + H^0 -> No product +At time : 17.888 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.109 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 18.187 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 18.334 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.643 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 18.685 ns Reaction : °OH^0 + H^0 -> No product +At time : 18.798 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 18.83 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 19.447 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 19.944 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 19.951 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 19.97 ns Reaction : °OH^0 + H^0 -> No product +At time : 19.997 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 20.042 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 20.113 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 20.817 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 21.081 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.137 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 21.224 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 21.496 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.509 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 21.643 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 21.73 ns Reaction : °OH^0 + H^0 -> No product +At time : 21.856 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.038 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.098 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.254 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 22.672 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.688 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 22.795 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 22.829 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 23.31 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 23.591 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 23.895 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 24.261 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 24.303 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.574 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 24.912 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 25.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 25.203 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 25.303 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 25.46 ns Reaction : °OH^0 + H^0 -> No product +At time : 25.613 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 25.809 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 25.871 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 26.071 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 26.204 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 26.239 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.619 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 27.841 ns Reaction : H^0 + H^0 -> H_2^0 +At time : 28.379 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 28.486 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 29.39 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 29.519 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 29.534 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 29.61 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 30.512 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 30.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 30.745 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 30.778 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.274 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.386 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.503 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 31.865 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.875 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 31.903 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 31.971 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.118 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.341 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.371 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 32.861 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 32.873 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 33.328 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 33.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 33.978 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.048 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 34.161 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.285 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 34.329 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 34.367 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 34.748 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.427 ns Reaction : e_aq^-1 + HO_2°^0 -> HO_2^-1 +At time : 35.442 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.544 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 35.568 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.015 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.173 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 36.245 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 36.477 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 37.032 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 37.189 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 37.24 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 37.282 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 37.347 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 37.563 ns Reaction : °OH^0 + H^0 -> No product +At time : 37.616 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.042 ns Reaction : °OH^0 + HO_2^-1 -> HO_2°^0 + OH^-1 +At time : 38.183 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.281 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.355 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 38.416 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.486 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 38.656 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 38.705 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 39.076 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.241 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 39.266 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.813 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 39.824 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 39.905 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 40.053 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 40.17 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 40.938 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 40.942 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 41.144 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 41.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 41.302 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.112 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.474 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 42.533 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 42.607 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 42.644 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 42.653 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 42.925 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.065 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 43.203 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 43.529 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.578 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 43.758 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 43.858 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.865 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 43.894 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 43.918 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 44.037 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 44.379 ns Reaction : °OH^0 + H^0 -> No product +At time : 44.575 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.923 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.272 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.278 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 45.284 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 45.346 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.423 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 45.979 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 46.915 ns Reaction : °OH^0 + H^0 -> No product +At time : 47.13 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 47.305 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 47.339 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 48.053 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 48.466 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 48.604 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 48.768 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.064 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.747 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 49.938 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 51.434 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 51.527 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 52.119 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 52.194 ns Reaction : H^0 + O_2^-1 -> HO_2^-1 +At time : 52.666 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 53.096 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.198 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.436 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.646 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 53.697 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 53.803 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 54.132 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.649 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 54.694 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.815 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 54.817 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 54.895 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 55.195 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 55.231 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.237 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 55.621 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 55.993 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.039 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 56.149 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.275 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.506 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.541 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 56.595 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 57.156 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 57.386 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 57.451 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.547 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 58.378 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 59.431 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 59.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.025 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.349 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.533 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 60.971 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 61.038 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 61.361 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 61.515 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 61.682 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 61.925 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.312 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.479 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 62.479 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.549 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.592 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 62.599 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 62.892 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.06 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 63.062 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.202 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.439 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.636 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 63.769 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 64.129 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.219 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.295 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 64.339 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.426 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 64.489 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 64.561 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 64.613 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 64.937 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 65.338 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 66.034 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 66.512 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 66.986 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 67.831 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 67.983 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 68.052 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 68.199 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 68.414 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 68.778 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 68.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 69.019 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 69.863 ns Reaction : e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 +At time : 70.337 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 70.634 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 70.635 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 70.807 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 71.696 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 71.758 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 72.18 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 72.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 72.785 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 73.403 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 74.583 ns Reaction : e_aq^-1 + H2O^0 -> H^0 + OH^-1 +At time : 74.804 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 74.899 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 74.955 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 75.066 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 75.428 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 76.336 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 76.382 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 76.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 76.928 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 77.249 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 77.977 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.106 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.182 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.431 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 78.568 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 78.647 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 79.024 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 79.566 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 79.882 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 80.483 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 80.953 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.294 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.489 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 81.592 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.671 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 81.686 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.764 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.946 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 81.969 ns Reaction : e_aq^-1 + H^0 -> OH^-1 + H_2^0 +At time : 82.056 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.097 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.124 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 83.158 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.304 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 83.845 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.871 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 83.978 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.435 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.579 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 84.702 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.712 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 84.764 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 85.373 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 86.026 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 86.187 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 86.23 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 86.407 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 87.772 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.229 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.514 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 88.975 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 89.877 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 90.165 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.191 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.607 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 90.657 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 90.835 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 91.079 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.086 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.179 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 91.439 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 91.519 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 92.688 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 93.417 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 93.537 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 93.661 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 94.553 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 94.574 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 94.692 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 94.909 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 95.059 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 95.924 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 96.264 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.491 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.582 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 96.983 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.316 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.611 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 97.754 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 97.777 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 98.085 ns the Mesh has 256 x 256 x 256 voxels with Resolution 12.5 nm during next 470.11 ns +At time : 98.341 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.483 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.517 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 98.755 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 98.919 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.009 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.016 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.121 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.461 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.618 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.694 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 99.754 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.35 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 100.63 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 101.52 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 101.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 101.79 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 101.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 101.95 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 102.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.44 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 103.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 104.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 104.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 105.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 105.42 ns Reaction : H^0 + O_2^-1 -> HO_2^-1 +At time : 105.97 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 105.98 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 106.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 108.29 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 108.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 108.85 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 108.92 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 109.1 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 109.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 109.72 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 109.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 109.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 110.22 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 112.52 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 112.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 112.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 113.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 114.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 115.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 116.72 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 116.85 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 118.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 119.17 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 120 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 120.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 120.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 121.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 122.32 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 123.12 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 123.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 124.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 124.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 125.21 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 126.44 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 126.48 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 126.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 127.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 127.24 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 127.32 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 128.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 128.81 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 129.88 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 129.99 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 130.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 131.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 132.15 ns Reaction : °OH^0 + H^0 -> No product +At time : 133.26 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 133.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 133.67 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 133.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 134.75 ns Reaction : e_aq^-1 + H2O2^0 -> OH^-1 + °OH^0 +At time : 136.25 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 136.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.14 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 137.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 138.42 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 138.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 140.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 141.64 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 141.72 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 141.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.39 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 142.39 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 142.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 142.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 143.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 144.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 144.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 145.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 146.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 146.85 ns Reaction : e_aq^-1 + HO_2°^0 -> HO_2^-1 +At time : 147.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 147.47 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 147.87 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 148.29 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 148.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 148.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 149.15 ns Reaction : °OH^0 + H^0 -> No product +At time : 149.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 150.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 150.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 151.18 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 153.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 153.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 154.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 155.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 155.4 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 155.78 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 156.24 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 156.24 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 156.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 156.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 158.03 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 158.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 158.89 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 159.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 159.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 160.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 160.52 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 161.56 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 161.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 161.9 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 162 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.12 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 162.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 162.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 163.35 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 163.58 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 164.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 165 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 165.23 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 166.02 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 166.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 166.6 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 166.84 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 166.87 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 166.98 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 167.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 168.61 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 168.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 169.07 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 169.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 170.36 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.46 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 171.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 173.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 173.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 174.8 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 175.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 175.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 176.62 ns Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 176.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 177.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 177.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 178.69 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 180.87 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 181.79 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 181.99 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 182.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 183.78 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 183.84 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 183.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 184.99 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 185.12 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 185.51 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 185.61 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 190.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 191.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 192.09 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 192.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 193.12 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 193.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 194.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 196.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 197.25 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 197.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 200.43 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 201.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 202.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 202.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 203.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 205.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 205.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 206.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.03 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 207.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 207.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 209.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.13 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 210.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 210.94 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 211.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 211.72 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 212.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 212.22 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 213.82 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 213.85 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 214.15 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 215.39 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 216.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 218.01 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 218.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 219.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 220.62 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 221.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 222.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 222.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 223.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 224.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 224.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 225.27 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 225.33 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 225.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 226.62 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 228.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 230.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 230.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 231.27 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 231.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 232.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 232.08 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 232.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.35 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 233.67 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 234.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 236.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 236.48 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 237.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 237.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 238.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 238.88 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 239.94 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 240.33 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 241.97 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 242.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 243.33 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 244.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.04 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 245.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 247.23 ns Reaction : e_aq^-1 + °OH^0 -> OH^-1 +At time : 248.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 249.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 251.38 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 251.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 251.72 ns Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 251.73 ns Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 252.77 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 253 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 255.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 257.06 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 257.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 258.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 258.78 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 259.12 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 259.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 261.37 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 263.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 263.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 263.61 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 264.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 265.89 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 266.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 267.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 268.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 270.71 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 270.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 271 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 271.1 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 271.86 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 272.57 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 272.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 272.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 273.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 276.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 277.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 277.94 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 278.46 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 280.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 282.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 282.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 283.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.7 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 284.98 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 286.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 286.6 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 286.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 287.25 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 287.35 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 288.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 292.36 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 292.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 293.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 295.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 297.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 297.48 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 298.07 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 298.21 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 299.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 299.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 299.76 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 301.26 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 301.35 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 303.2 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 303.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 303.31 ns Reaction : e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 +At time : 303.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 305.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 305.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 306.83 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 307.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 307.96 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 308.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 308.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 309.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 309.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 310.78 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 312.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 312.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 313.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 313.86 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 314.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 314.79 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.44 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 317.59 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 317.95 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.42 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.71 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 319.78 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 321.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 323.43 ns Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 323.96 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 325.99 ns Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 326.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 327.54 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 333.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 338.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 339.32 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 341.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 341.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 342.59 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 344.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 344.5 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 344.53 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 344.88 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 344.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 346.64 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 349.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 350.51 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 352.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 355.79 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 357.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 358.49 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 361.03 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 362.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 363.36 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 363.56 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 364.52 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 365.91 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.43 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 366.59 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 369.07 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 369.62 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 369.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 370.34 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 371.03 ns Reaction : e_aq^-1 + H3O^1 -> H^0 +At time : 373.58 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 374.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 374.88 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 375.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 376.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 377.11 ns the Mesh has 128 x 128 x 128 voxels with Resolution 25 nm during next 1.8652 us +At time : 382.02 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 382.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 382.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 382.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 383.37 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 383.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 385.3 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 385.7 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 387.15 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 387.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 387.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 388.23 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 389.82 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 390.09 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 391.41 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 392.36 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 393.16 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 395.11 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 395.95 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 397.79 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 398.41 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 401.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 401.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 401.86 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 402.11 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 403.41 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 406.74 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 408.83 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 410.87 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 411.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 412.9 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 413.77 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 417.28 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 418.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 419.38 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 422.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 422.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 423.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 423.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 425.41 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 427.59 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 429.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 429.92 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 432 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 432.57 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 435.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 439.55 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 441.95 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 442.81 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 444.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 444.39 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 448.34 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 449.42 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 450.97 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 463.47 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 464.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 464.34 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 465.25 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 465.66 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 465.76 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 466.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 467.52 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 468.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 471.42 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 471.65 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 473.53 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 473.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 478.6 ns Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 482.64 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 483.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 483.93 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 484.45 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 485.31 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 485.83 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 489.65 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 490.3 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 491.68 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 494.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 495.29 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 498.32 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 499.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 502.5 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 504.33 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 506.23 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 506.38 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 507.05 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 512.37 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 512.45 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 513.84 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 518.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 519.8 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 522.53 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 524.14 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 524.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 525.09 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 526.04 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 528.39 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 529.38 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 531.73 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 531.8 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 531.9 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 532.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 532.26 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 533.82 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 543.22 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 551.17 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 551.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 554.35 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 554.47 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 558.57 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 559.05 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 563.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 568.3 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 574.82 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 576.6 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 578.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 586.26 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 586.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 587.53 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 591.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 591.63 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 599.36 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 600.05 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 602.78 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 605.14 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 605.68 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 605.75 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 609.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 611.77 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 614.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 616.08 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 616.18 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 617.06 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 624.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 627.24 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 628.63 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 643.41 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 657.74 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 658.58 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 661.78 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 670.13 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 671.37 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 673.9 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 676.65 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 680.58 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 684.4 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 685.15 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 685.27 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 688.56 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 690.84 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 700.42 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 702.85 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 703.34 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 703.68 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 704.32 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 705.19 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 706.19 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 707.54 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 708.13 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 710.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 713.63 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 713.99 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 723.76 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 726.36 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 726.9 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 735.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 736.04 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 743.15 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 743.35 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 743.83 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 746.77 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 747.47 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 748.11 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 748.19 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 754.08 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 763.25 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 764.61 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 767.27 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 767.98 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 775.43 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 785.92 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 790.3 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 791.83 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 796.34 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 800.22 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 800.54 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 802.21 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 802.99 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 803.27 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 805.28 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 817.51 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 824.85 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 826.15 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 833.54 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 842.99 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 843.07 ns Reaction : H3O^1 + OH^-1 -> No product +At time : 845.98 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 852.51 ns Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 865.7 ns Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 866.2 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 869.46 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 872.09 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 873.1 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 879.49 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 883.72 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 888.48 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 892.13 ns Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 895.13 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 899.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 905.47 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 907.09 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 908.14 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 926.55 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 930.82 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 937.39 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 938.33 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 941.8 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 942.52 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 945.93 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 947.74 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 958.63 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 960.32 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 962.54 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 964.89 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 965.42 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 965.43 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 969.79 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 971.07 ns Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 979.33 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 984.95 ns Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 987.05 ns Reaction : OH^-1 + H3O^1 -> No product +At time : 989.2 ns Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 990.05 ns Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.0074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0243 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.0261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0261 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.0271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0339 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.0347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0409 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.0514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0527 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 1.0545 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0609 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.0632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.0739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.0895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1301 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.1404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1538 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.1545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1558 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.158 us Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 1.1616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1785 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.1805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.1885 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 1.1927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.1976 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2088 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.261 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.2616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.2644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2765 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2878 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.2893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.2978 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.3017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3175 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 1.3237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3377 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.3399 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.3418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3526 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 1.3534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3551 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 1.3604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.3724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.3873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4264 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4324 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4451 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.4497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4626 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.4657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.4853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.4867 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 1.4932 us the Mesh has 64 x 64 x 64 voxels with Resolution 50 nm during next 7.4456 us +At time : 1.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5322 us Reaction : H3O^1 + OH^-1 -> No product +At time : 1.5496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5661 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.5684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.5809 us Reaction : H^0 + O_2^0 -> HO_2°^0 +At time : 1.5829 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.5922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.5991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6541 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6702 us Reaction : e_aq^-1 + O_2^0 -> O_2^-1 +At time : 1.6711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.686 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.6924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.6947 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.7079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7212 us Reaction : H3O^1 + OH^-1 -> No product +At time : 1.7324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7338 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.735 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.7491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.7891 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 1.7933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.7944 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 1.7962 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8653 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.8688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.877 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.8781 us Reaction : OH^-1 + H3O^1 -> No product +At time : 1.8898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.8899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9533 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 1.9537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 1.9702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 1.9933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0074 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0306 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0324 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.0352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0721 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.0829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.0956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.0982 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1096 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1274 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1686 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.1793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.1818 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.1997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2117 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.2125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2245 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.2307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2626 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.2642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2786 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.2877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.2912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.2989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3269 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.3324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3667 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.3718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.3832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.3959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4014 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4016 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4187 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.4652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.4795 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.4798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.5813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.5919 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6239 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 2.6281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6294 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.6646 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.6913 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.6928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7075 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 2.7091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7113 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.7158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7708 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 2.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.7924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.7975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8391 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8515 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8818 us Reaction : OH^-1 + H3O^1 -> No product +At time : 2.8823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.8824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.8959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 2.9951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 2.9966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.0745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.0968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.159 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.1619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.1791 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.1945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.1974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2021 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 3.2178 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.2203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2281 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.2299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.2905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.2956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3118 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3121 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3256 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.3256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3286 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3581 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.3585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.3821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.3988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4072 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.4139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4341 us Reaction : °OH^0 + HO_2°^0 -> O_2^0 +At time : 3.4363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4672 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 3.4748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.4917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.4971 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.5054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.5696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5819 us Reaction : H3O^1 + OH^-1 -> No product +At time : 3.5868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.5964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6316 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 3.6348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6368 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 3.6373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.6962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.6982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7842 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.7845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.7901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.7905 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.7933 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8036 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.8055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8286 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.8486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8733 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.8888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.8901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.914 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 3.9206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.964 us Reaction : OH^-1 + H3O^1 -> No product +At time : 3.9641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 3.9826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 3.9926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0322 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.0375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0649 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 4.0704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.0858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.0904 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.0951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.1718 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.191 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 4.1948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.1974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2549 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2668 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.2788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.2939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.31 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.3149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.3923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.3943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.4869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.4882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.537 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.5408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.5888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.5889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6403 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.6456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.6683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.6905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7323 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.7531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7792 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.7893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.7949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.8961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.8975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 4.9763 us Reaction : OH^-1 + H3O^1 -> No product +At time : 4.9902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 4.9971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0358 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0621 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.0647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0653 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.0967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.0989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1278 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.1567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1613 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1647 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1795 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.1852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1874 us Reaction : H3O^1 + OH^-1 -> No product +At time : 5.1887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.1986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2896 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.2928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.2966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3544 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.3597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.3756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.3889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.45 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.4543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.4883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.4959 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.4983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.5865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5899 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.5917 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.5924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.5953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.6348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.6698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.679 us Reaction : OH^-1 + H3O^1 -> No product +At time : 5.6857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.7759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7796 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 5.7956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.7979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.8894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.8895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 5.9575 us the Mesh has 32 x 32 x 32 voxels with Resolution 100 nm during next 29.767 us +At time : 5.9641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 5.9879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 5.9997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0037 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.0046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.0455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0727 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.0757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.0992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.1865 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.1973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.1988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.2922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.2954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.3851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.3883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4007 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.485 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.4859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.4933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.4972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5358 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.5371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.5951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.5966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6141 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6254 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.6261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.6692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.6934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7242 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.7247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7672 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.7703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.7932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.7956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8536 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.8567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.8813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.8993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.924 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 6.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.939 us Reaction : OH^-1 + H3O^1 -> No product +At time : 6.9396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 6.9878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 6.9906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0591 us Reaction : OH^-1 + H3O^1 -> No product +At time : 7.0604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.0868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.0996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.1927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.1989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.2892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.2984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.3675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.3956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4052 us Reaction : OH^-1 + H3O^1 -> No product +At time : 7.4177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.4804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.4977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5364 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5474 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.5497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.5901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.5908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.6767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.6977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7102 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.7111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.7883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.7895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8124 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 7.8139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8597 us Reaction : °OH^0 + OH^-1 -> O^-1 +At time : 7.8609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8634 us Reaction : O^-1 + H2O^0 -> °OH^0 + OH^-1 +At time : 7.8641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8725 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.8765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.8768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.9556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 7.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 7.9973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0746 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.0836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0901 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 8.0948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.0966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1637 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.1663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.1804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.1929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2295 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2367 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.2778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.2805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.3954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.3955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4091 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 8.4098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4359 us Reaction : OH^-1 + H3O^1 -> No product +At time : 8.4406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.4914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.4937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.5865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.5899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.6822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.6955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.7629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.7915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8917 us Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 8.8939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.8953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.8979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 8.9815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 8.9998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0231 us Reaction : H2O2^0 + OH^-1 -> HO_2^-1 +At time : 9.0233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0249 us Reaction : HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 +At time : 9.0329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.0822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.0993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1686 us Reaction : °O^0 + °OH^0 -> HO_2°^0 +At time : 9.1724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.1957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.1965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.2867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.2984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.3951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.3984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.4869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.4942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.5612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.5948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6099 us Reaction : OH^-1 + H3O^1 -> No product +At time : 9.6129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.6913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.6972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.735 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 9.7419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.7946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.7977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8464 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 9.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8613 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.8765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.8877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9715 us Reaction : OH^-1 + H3O^1 -> No product +At time : 9.9804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.028 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.273 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 10.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 10.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.319 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 11.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.539 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.668 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.881 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.974 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 11.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 11.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 11.998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.693 us Reaction : H3O^1 + OH^-1 -> No product +At time : 12.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.855 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 12.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.896 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 12.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 12.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.008 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 13.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.029 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.038 us Reaction : OH^-1 + H3O^1 -> No product +At time : 13.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.154 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.288 us Reaction : OH^-1 + H3O^1 -> No product +At time : 13.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.522 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.652 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.713 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.715 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 13.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.838 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 13.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 13.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.922 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 14.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 14.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 14.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.394 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 15.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.423 us Reaction : OH^-1 + H3O^1 -> No product +At time : 15.426 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.697 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 15.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 15.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 15.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.182 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.312 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.327 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.383 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.654 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 16.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.674 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 16.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 16.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 16.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.317 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.759 us Reaction : OH^-1 + H3O^1 -> No product +At time : 17.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.944 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 17.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 17.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.288 us Reaction : OH^-1 + H3O^1 -> No product +At time : 18.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.364 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.572 us Reaction : OH^-1 + H3O^1 -> No product +At time : 18.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.87 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 18.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 18.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 18.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.141 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.613 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.724 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 19.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.859 us Reaction : OH^-1 + H3O^1 -> No product +At time : 19.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 19.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 19.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.275 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 20.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.539 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 20.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 20.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.083 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.587 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 21.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.724 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.852 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 21.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 21.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.204 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.747 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.747 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 22.766 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 22.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 22.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.088 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.257 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.326 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.492 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.497 us Reaction : H3O^1 + OH^-1 -> No product +At time : 23.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +At Time : 23.815 us the Mesh has 16 x 16 x 16 voxels with Resolution 200 nm during next 119.05 us +At time : 23.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.88 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 23.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.899 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 23.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 23.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 23.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.266 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.607 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.852 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.863 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.921 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.957 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 24.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 24.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 24.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.082 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.194 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.725 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 25.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.863 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 25.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 25.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 25.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.007 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.115 us Reaction : H3O^1 + OH^-1 -> No product +At time : 26.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.391 us Reaction : H3O^1 + OH^-1 -> No product +At time : 26.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.529 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.581 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 26.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 26.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 26.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.073 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 27.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.131 us Reaction : OH^-1 + H3O^1 -> No product +At time : 27.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.268 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.552 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.579 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.582 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 27.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.68 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.916 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.939 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 27.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 27.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.116 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.245 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.385 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.453 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.504 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.513 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.529 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.66 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 28.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.723 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.725 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 28.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 28.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.006 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.039 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.245 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.805 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 29.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.968 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 29.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 29.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.144 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 30.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.285 us Reaction : OH^-1 + H3O^1 -> No product +At time : 30.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.872 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 30.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 30.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.218 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.235 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.478 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 31.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.798 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.944 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 31.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 31.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.014 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.043 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 32.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.172 us Reaction : OH^-1 + H3O^1 -> No product +At time : 32.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.281 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.291 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.682 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 32.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.798 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 32.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 32.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.03 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.035 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.215 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.279 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.292 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.329 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.567 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.582 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.798 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 33.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.905 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 33.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 33.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 33.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.021 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.024 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.113 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.133 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.136 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.23 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.369 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.37 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.455 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.461 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.479 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 34.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 34.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.107 us Reaction : OH^-1 + H3O^1 -> No product +At time : 35.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.288 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.498 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.505 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.513 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 35.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.717 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.755 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.867 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 35.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.997 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 35.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.028 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.117 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.237 us Reaction : OH^-1 + H3O^1 -> No product +At time : 36.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.331 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.419 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.62 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.819 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.893 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 36.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 36.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 36.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.033 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.062 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.214 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.347 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 37.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.652 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.837 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.84 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.845 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 37.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 37.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.331 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.396 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.42 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.518 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.606 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 38.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.762 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.833 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.888 us Reaction : H3O^1 + OH^-1 -> No product +At time : 38.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.994 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.994 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 38.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 38.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.122 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.144 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.181 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.3 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.354 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.647 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.72 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.819 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.872 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 39.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 39.989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.036 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.051 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.102 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.114 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.356 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.513 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.53 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 40.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.751 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 40.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 40.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.014 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.083 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.161 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.504 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.524 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.539 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.598 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.637 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.703 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.774 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.893 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.925 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 41.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 41.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.047 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.109 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.374 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.448 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.511 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 42.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.549 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.549 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.747 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.881 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.956 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 42.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 42.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.113 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.129 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.199 us Reaction : OH^-1 + H3O^1 -> No product +At time : 43.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.233 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.263 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.368 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 43.376 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.56 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.574 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.607 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.694 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.695 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.728 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.734 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.869 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.975 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 43.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 43.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 43.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.021 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.095 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.108 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 44.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.139 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.142 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.15 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.156 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.568 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.605 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.612 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.792 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.886 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.905 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.943 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.974 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 44.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 44.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.014 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.052 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.054 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.107 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.269 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.395 us Reaction : OH^-1 + H3O^1 -> No product +At time : 45.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.543 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.548 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.588 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.631 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.635 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.681 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.692 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 45.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.731 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.746 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.765 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.877 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 45.989 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 45.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.052 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.055 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.086 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.127 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.192 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.225 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.286 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.348 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.354 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.439 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.47 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.521 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.523 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.547 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.558 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.673 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.771 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.814 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.914 us Reaction : H3O^1 + OH^-1 -> No product +At time : 46.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.965 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 46.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 46.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.039 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.063 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.085 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.141 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.141 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.154 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.182 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.326 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 47.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.378 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.403 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.428 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.44 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 47.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.46 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.468 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.716 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.908 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 47.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 47.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.08 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.173 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.206 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.272 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.279 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.283 us Reaction : OH^-1 + H3O^1 -> No product +At time : 48.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.334 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.375 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.415 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.598 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.664 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.675 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.782 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.808 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.815 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.84 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.861 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.897 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.941 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 48.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.994 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 48.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.091 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.128 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.161 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.199 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.296 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.318 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.473 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.49 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.509 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 49.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.541 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.667 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.74 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.818 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.838 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.844 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.875 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.905 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 49.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 49.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.034 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.198 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.337 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.386 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.391 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.408 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.573 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.6 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.639 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.674 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.766 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.829 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.85 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.922 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.961 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 50.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 50.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.066 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.071 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.077 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.133 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.176 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.266 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.272 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.314 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.365 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.416 us Reaction : °OH^0 + °OH^0 -> H2O2^0 +At time : 51.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.433 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.461 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 51.463 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.464 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.481 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.522 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.537 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.555 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.563 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.594 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.596 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.597 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.599 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.638 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.658 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.701 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.735 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.77 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.779 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.795 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.882 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.955 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 51.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 51.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.043 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.245 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.259 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.292 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.299 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.38 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.384 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.471 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.475 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.489 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.514 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.575 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 52.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.589 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.593 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.606 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.662 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.704 us Reaction : H3O^1 + OH^-1 -> No product +At time : 52.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.767 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.812 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.83 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.832 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.846 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.851 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.88 us Reaction : H3O^1 + OH^-1 -> No product +At time : 52.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.884 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.889 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.98 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 52.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 52.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.029 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.049 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.105 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.12 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.237 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.246 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.254 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.332 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.368 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.445 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.446 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.452 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.472 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.506 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.605 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.619 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.629 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.672 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.71 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.751 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.762 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.793 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.814 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.829 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.834 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.86 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.903 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.904 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.951 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 53.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 53.955 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 53.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.069 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.102 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.117 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.149 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.179 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.21 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.262 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.301 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.321 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.372 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.395 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.409 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.431 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.436 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.464 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.49 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.492 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 54.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.516 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.566 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.568 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.575 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.603 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.65 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.651 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.677 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.716 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.764 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.776 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.806 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.84 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.851 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.914 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.97 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.972 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 54.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 54.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.023 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.04 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.046 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.081 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.088 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.112 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.123 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.214 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.226 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.253 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.258 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.312 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.312 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.336 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.348 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.357 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.41 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.426 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.44 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.442 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.483 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.527 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.541 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.547 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.595 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.662 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.674 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.683 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.729 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.736 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.747 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.773 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.81 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.841 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.96 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 55.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 55.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.021 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.022 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.065 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.075 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.096 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.118 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.125 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.138 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.176 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.18 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.183 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.184 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.229 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.238 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.276 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.308 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.375 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.388 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.389 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.399 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.426 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.462 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.475 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.533 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.635 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.646 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.692 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.696 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.698 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.718 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.726 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.759 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.784 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.834 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.843 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.844 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.847 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.849 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.854 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.9 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 56.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.945 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.961 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.972 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.977 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 56.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.992 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 56.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.04 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.068 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.078 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.086 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.119 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.15 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.169 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.199 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.204 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.219 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.231 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.249 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.317 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.32 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.339 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.353 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.371 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.389 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.434 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.462 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.493 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.545 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.556 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.648 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.676 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.688 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.69 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.727 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.739 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.798 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.827 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 57.839 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.865 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.867 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.868 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.88 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.881 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.909 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.92 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.924 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.932 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.934 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 57.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 57.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.001 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 58.011 us Reaction : H3O^1 + OH^-1 -> No product +At time : 58.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.026 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.084 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.124 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.163 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.173 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.194 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.251 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.264 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.291 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.34 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.366 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.385 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.39 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.393 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.408 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.412 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.423 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.432 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.444 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.453 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.467 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.467 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.482 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.493 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.505 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.511 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.557 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.61 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.621 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.648 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.651 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.655 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.665 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.692 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.721 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.722 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.722 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.725 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.777 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.778 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.784 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.839 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.866 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.894 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.898 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.983 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 58.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 58.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.026 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.061 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.064 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.109 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.134 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.135 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.148 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.151 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.178 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.183 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.256 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.262 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.288 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 59.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.296 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.298 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.338 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.343 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.344 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.357 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.361 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.384 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.4 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.417 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.427 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.434 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.441 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.451 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.458 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.459 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.486 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.5 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.509 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.511 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.527 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.538 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.547 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.555 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.557 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.563 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.564 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.585 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.596 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.612 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.632 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.671 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.693 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.754 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.796 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.811 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.823 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.823 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.849 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.87 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.887 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.922 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 59.948 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.988 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.995 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 59.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.006 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.007 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.041 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.053 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.069 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.072 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.076 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.119 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.131 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.135 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.147 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.158 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.165 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.188 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.217 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.24 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.251 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.259 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.278 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.282 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.29 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.299 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.327 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.332 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.342 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.356 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.359 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.367 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.373 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.396 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.447 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.457 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.485 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.495 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.524 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.536 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.552 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.563 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 60.569 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.583 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.601 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.604 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.615 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.72 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.749 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.753 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.772 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.797 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.8 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.801 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.809 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.827 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.828 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.853 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.883 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.954 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.958 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.969 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 60.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 60.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.01 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 61.01 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.019 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.037 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.066 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.089 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.093 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.095 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.097 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.116 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.125 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.129 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.13 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.162 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.167 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.172 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.2 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.212 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.232 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.233 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.237 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.239 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.261 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.264 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.308 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.316 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.344 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.346 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.367 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.372 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.388 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.393 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.397 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.404 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.411 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.418 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.449 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.466 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.491 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.502 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.507 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.522 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.528 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.548 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.556 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.627 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.638 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.654 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.669 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.679 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.679 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.681 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.685 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.693 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.711 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.738 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.745 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.765 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.778 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.79 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.831 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.841 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.848 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.87 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.875 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.887 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.9 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.907 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.932 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.971 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.976 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.977 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 61.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 61.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 61.993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.012 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.062 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.103 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.105 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.114 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.177 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.195 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.202 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.206 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.212 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.238 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.242 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.26 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.273 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.284 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.293 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.305 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.323 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.329 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.339 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.349 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.351 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.352 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.363 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.377 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.387 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.392 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.406 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.42 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.424 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.443 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.456 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.476 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.532 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.542 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.552 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.558 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.595 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.597 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.602 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.603 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.61 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.615 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.624 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.629 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.644 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.646 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.661 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.666 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.67 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.691 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.697 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.713 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.717 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.724 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.728 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.734 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.739 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.748 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.785 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.804 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.805 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.813 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.816 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.818 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.824 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.825 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.85 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.892 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.908 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.927 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.942 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.943 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.969 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.985 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.989 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.99 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 62.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.993 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 62.998 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.035 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.063 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.068 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.07 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.078 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.09 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.106 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.159 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.181 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.205 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.211 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.221 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.227 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.265 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.295 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.322 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.346 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.36 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.361 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.381 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.402 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.407 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.417 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.465 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.47 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.477 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 63.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.488 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.502 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.517 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.518 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.534 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.559 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.57 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.59 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.59 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.601 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.604 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.609 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.626 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.628 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.631 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.634 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.653 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.655 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.659 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.674 us Reaction : H3O^1 + OH^-1 -> No product +At time : 63.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.708 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.711 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.746 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.75 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.751 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.779 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.78 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.781 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.789 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.822 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 63.832 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.878 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.879 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.885 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.888 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.895 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.911 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.927 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.936 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.949 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.951 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.959 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.963 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 63.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.979 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 63.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.008 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.024 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.027 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.044 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.048 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.056 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.059 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.074 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.082 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.091 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.111 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.122 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.124 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.132 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.143 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.144 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.157 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.158 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.169 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.18 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.185 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.21 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.211 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.221 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 64.221 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.228 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.248 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.283 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.302 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.313 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.335 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.341 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.358 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.377 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.383 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.404 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.429 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.435 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.44 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.444 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.45 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.472 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.479 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.516 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.526 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.53 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.535 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.55 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.578 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.58 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.583 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.584 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.587 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.591 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.618 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.641 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.659 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 64.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.684 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.696 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.702 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.71 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.714 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.73 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.737 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.758 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.759 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.761 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.764 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.77 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.773 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.775 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.791 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.794 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.807 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.807 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.811 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.812 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.831 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.854 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.855 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.872 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.898 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.906 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.914 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.923 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.936 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.94 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.982 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.99 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 64.991 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 64.997 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.008 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.01 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.025 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.046 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.054 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.087 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.087 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.089 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.099 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.104 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.155 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.156 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.159 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.168 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.17 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.189 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.209 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.213 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.223 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.267 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.289 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.291 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 65.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.301 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.302 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.303 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.311 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.313 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.318 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.331 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.343 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.359 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.374 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.378 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.397 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.411 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.424 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.428 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.429 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.436 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.455 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.456 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.497 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.506 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.508 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.514 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.523 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.525 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.531 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.535 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.545 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.576 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.578 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.586 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.627 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.669 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.705 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.706 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.719 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.731 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.736 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.738 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.788 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.79 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.792 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.802 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.836 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.845 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.865 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.884 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.886 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.91 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.913 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.916 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.931 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.95 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.957 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.964 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.966 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.966 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.978 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.981 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.983 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 65.993 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 65.999 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.013 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.017 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.02 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.023 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.05 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.05 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.056 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.065 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.085 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 66.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.115 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.126 us Reaction : OH^-1 + H3O^1 -> No product +At time : 66.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.139 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.147 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.184 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.186 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.191 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.216 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.217 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.223 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.236 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.241 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.249 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.258 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.276 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.278 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.281 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.311 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.315 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.349 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.35 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.353 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.366 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.373 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.382 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.391 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.416 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.418 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.439 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.442 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.458 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.468 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.473 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.483 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.484 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.487 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.49 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.508 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.532 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.533 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.537 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.542 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.544 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.546 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.569 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.571 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.572 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.574 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.581 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.589 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.592 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.62 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.64 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.644 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.649 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.66 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.672 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.713 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.714 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.743 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.761 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.771 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.78 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.797 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.804 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.835 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.852 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.859 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.86 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.873 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.876 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.883 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.891 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 66.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.899 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.902 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.903 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.912 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.912 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.926 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.929 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.938 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.953 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 66.984 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.985 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 66.995 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.005 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.039 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.057 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.058 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.06 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.079 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.094 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.1 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.101 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.101 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.103 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.11 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.118 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.146 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.162 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.168 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.193 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.197 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.203 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.213 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.226 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.23 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.243 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.261 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.275 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.277 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.286 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.293 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.297 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.303 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.304 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.31 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.319 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.327 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.345 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.347 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.355 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.364 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 67.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.414 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.415 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.421 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.435 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.447 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.457 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.469 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.476 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.48 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.496 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.499 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.501 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.52 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.55 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.551 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.553 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.554 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.565 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.566 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.571 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.579 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.582 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.584 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.593 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.606 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.619 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.622 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.623 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.637 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.642 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.676 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.699 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.707 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.709 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.723 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.727 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.73 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.733 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.745 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.763 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.767 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.777 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 67.782 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.786 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.791 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.793 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.794 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.795 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.801 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.805 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.817 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.822 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.826 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.837 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.857 us Reaction : OH^-1 + H3O^1 -> No product +At time : 67.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.862 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.89 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.901 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.911 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.915 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.917 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.933 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.935 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.937 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.942 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.952 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.954 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.956 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.959 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.967 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.981 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.984 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 67.986 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 67.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.006 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.009 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.018 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.03 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.038 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.042 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.044 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.045 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.053 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.06 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.081 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.082 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.092 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.099 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.108 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.146 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.157 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.164 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.166 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.174 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.175 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.178 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.192 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.196 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.202 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.207 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.209 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.215 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.232 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.239 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.246 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.255 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.283 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.287 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.304 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.307 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.307 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.317 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.321 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.324 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.33 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.33 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.335 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.337 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.358 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.36 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.362 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.365 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.37 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.371 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.392 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.394 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.406 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.41 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.427 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.466 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.471 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.478 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.53 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.54 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 68.544 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.547 us Reaction : OH^-1 + H3O^1 -> No product +At time : 68.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.577 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.581 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.587 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.594 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.599 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.602 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.608 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.611 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.617 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.625 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.633 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.641 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.671 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.674 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.678 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.684 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.689 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.701 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.729 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.732 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.742 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.743 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.744 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.744 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.75 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.752 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.755 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.766 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.774 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.775 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.781 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.783 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.785 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.799 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.809 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.816 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.817 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.853 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.857 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.858 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.868 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.873 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.874 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.874 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.881 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 68.888 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.893 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.895 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.902 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.904 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.906 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.925 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.928 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.929 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.933 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.939 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.941 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.946 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.949 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.95 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.98 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 68.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 68.998 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.002 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.005 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.015 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.016 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.02 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.033 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.034 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.048 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.053 us Reaction : °OH^0 + O_2^-1 -> O_2^0 + OH^-1 +At time : 69.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.071 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.074 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.097 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.104 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.121 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.13 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.137 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.14 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.152 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.153 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.167 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.179 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.188 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.194 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.2 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.201 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.204 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.205 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.208 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.216 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.22 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.234 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.247 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.263 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.266 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.267 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.271 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.274 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.28 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.297 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.3 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.305 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.306 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.315 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.322 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.323 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.324 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.332 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.334 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.351 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.363 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.381 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.394 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.396 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.403 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.416 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.422 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.431 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.437 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.441 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.45 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.461 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.467 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 69.481 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.486 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.494 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.496 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.503 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.51 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.515 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.515 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.517 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.525 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.531 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.534 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.536 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.54 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.554 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.56 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.562 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.588 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.591 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.613 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.616 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.623 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.624 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.632 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.636 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.636 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.642 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.645 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.65 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.657 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.667 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.675 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.682 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.685 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.687 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.689 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.694 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.698 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.7 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.702 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.706 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.712 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.717 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.718 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.72 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.741 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.748 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.753 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.757 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.768 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.772 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.776 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.783 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.799 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.8 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.802 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.808 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.81 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.82 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.821 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.836 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.842 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.844 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.846 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.877 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.883 us Reaction : OH^-1 + H3O^1 -> No product +At time : 69.885 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.891 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.899 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.907 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.913 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.915 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.923 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.926 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.935 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.947 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.948 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 69.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 69.992 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.016 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.019 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.022 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.025 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.031 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.032 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.032 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.041 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.042 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.043 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.067 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.075 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.09 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.093 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.095 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.096 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.1 us Reaction : HO_2°^0 + OH^-1 -> O_2^-1 +At time : 70.116 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.134 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.136 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.17 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.185 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.19 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.218 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.222 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.229 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.235 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.241 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.244 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.248 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.25 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.257 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.26 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.265 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.274 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.277 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.28 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.287 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.309 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.31 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.325 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.328 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.336 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.342 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.345 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.35 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.379 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.39 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.398 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.4 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.405 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.412 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.414 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.423 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.425 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.425 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.451 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.452 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.454 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.474 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.48 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.485 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.487 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.488 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.491 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.494 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.498 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.503 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.509 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.519 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.52 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.528 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.546 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.559 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.564 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.576 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.586 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.604 us Reaction : OH^-1 + H3O^1 -> No product +At time : 70.608 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.609 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.611 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.617 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.618 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.625 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.628 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.63 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.633 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.639 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.643 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.645 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.647 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.654 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.656 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.656 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.657 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.658 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.665 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.67 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.688 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.697 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.7 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.703 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.704 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.704 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.705 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.707 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.709 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.752 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.754 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.756 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.762 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.763 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.768 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.769 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.786 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.787 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.788 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.796 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.803 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.813 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.822 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.827 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.842 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.843 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.847 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.857 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.859 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.862 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.869 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.871 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.878 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.89 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.894 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.901 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.919 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.92 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.921 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.921 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.93 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.93 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.934 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.937 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.938 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.945 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.96 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.963 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.965 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.967 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.968 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.975 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 70.975 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.982 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.986 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.987 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 70.996 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.001 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.004 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.018 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.045 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.047 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.049 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.055 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.057 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.064 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.072 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.094 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.107 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.108 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.131 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.138 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.14 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.142 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.145 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.151 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.152 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.153 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.16 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.16 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.171 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.172 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.177 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.182 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.186 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.187 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.19 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.191 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.196 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.198 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.201 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.207 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.208 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.219 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.222 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.224 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.224 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.234 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.236 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.243 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.244 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.247 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.25 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.252 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.253 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.254 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.255 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.268 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.27 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.27 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.271 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.275 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.284 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.289 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.29 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.294 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.298 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.309 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.316 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.32 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.325 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.333 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.341 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.347 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.352 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.355 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.362 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.376 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.379 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.387 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.399 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.401 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.402 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.405 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.406 us Reaction : OH^-1 + H3O^1 -> No product +At time : 71.407 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.413 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.422 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.432 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.433 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.437 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.445 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.448 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.463 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.465 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.469 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.474 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.482 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.484 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.497 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.499 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.51 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.521 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.551 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.561 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.565 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.567 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.57 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.575 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.577 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.585 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.62 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.622 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.63 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.653 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.659 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.661 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.663 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.663 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.664 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.673 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.677 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.687 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.712 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.715 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.719 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.732 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.733 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.74 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.741 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 71.741 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.742 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.749 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.751 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 71.757 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.769 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.777 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.787 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.803 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.806 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.82 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.83 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.848 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.856 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.861 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.863 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.863 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.871 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.876 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.889 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.892 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.896 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.897 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.9 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.909 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.91 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.919 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.931 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.94 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.946 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.951 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.957 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.962 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.973 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.977 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.978 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.979 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.987 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.988 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 71.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.996 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 71.999 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.001 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.002 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.003 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.003 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.011 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.013 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.015 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.017 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.031 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.036 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.037 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.038 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.059 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.076 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.077 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.079 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.08 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.083 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.092 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.098 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.11 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.127 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.128 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.132 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.148 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.149 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.155 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.163 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.187 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.195 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.197 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.203 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.22 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.225 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.227 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.228 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.231 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.24 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.24 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.242 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.245 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.252 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.256 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.269 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.269 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.282 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.285 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.285 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.288 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.294 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.306 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.312 us Reaction : H3O^1 + O_2^-1 -> HO_2°^0 +At time : 72.314 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.319 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.326 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.328 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.333 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.338 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.34 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.364 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.368 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.369 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.38 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.382 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.386 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.395 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.398 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.401 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.409 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.413 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.419 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.42 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.421 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.43 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.43 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.438 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.438 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.443 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.446 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.449 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.454 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.459 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.477 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.477 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.478 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.489 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.492 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.495 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.5 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.501 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.504 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.507 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.512 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.512 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.519 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.526 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.538 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.54 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.543 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.553 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.561 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.562 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.572 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.573 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.58 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.592 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.6 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.614 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.614 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.616 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.621 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.626 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.634 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.643 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.647 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.649 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.652 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.66 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.666 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.668 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.678 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.68 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.682 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.683 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.686 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.69 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.691 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.695 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.699 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.708 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.715 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.721 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.726 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.735 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.737 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.756 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.758 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.76 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.789 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.815 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.824 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.825 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.826 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.828 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.833 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.835 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.838 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.855 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.856 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.858 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.864 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.864 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.866 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.879 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.88 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.882 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.891 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.917 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.918 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.918 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.924 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.928 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.944 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.947 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.952 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.953 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.958 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.962 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.964 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.97 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 72.971 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.973 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.974 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.976 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 72.991 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.004 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.009 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.011 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.012 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.027 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.051 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.058 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.061 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.067 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.07 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.073 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.073 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.084 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.085 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.098 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.1 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.106 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.111 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.112 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.115 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.12 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.121 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.123 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.126 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.126 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.137 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.143 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.145 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.154 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.164 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.165 us Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 73.166 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.171 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.174 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.175 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.189 us Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 73.193 us Reaction : O_2^-1 + H3O^1 -> HO_2°^ +============================================================================================ +================= lines above cut to keep file within limits =============================== +============================================================================================ + +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : O_2^-1 + H3O^1 -> HO_2°^0 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +At time : 9.9978 s Reaction : HO_2°^0 + H2O^0 -> H3O^1 + O_2^-1 +*** End Processing In Mesh and reset Mesh, EventSet for new Mesh!!!! +*** G4Scheduler ends at time : 10 s +___________________________________ +End Processing and reset Gird, ScavengerTable, EventSet for new simulation!!!! + --------------------------End of Local Run------------------------------ The run has 2 events. Scavenger info: ************************************************************** -Scavenger:O_2^0 : 0.000273 (M) with : 5387144 (molecules)in: 32.768 (um3) +Scavenger:O_2^0 : 0.00027298 (M) with : 5386901 (molecules)in: 32.768 (um3) Scavenger:H3O^1 : 3.1623e-06 (M) with : 62402 (molecules)in: 32.768 (um3) Scavenger:OH^-1 : 3.1419e-09 (M) with : 62 (molecules)in: 32.768 (um3) Scavenger:H2O^0 : 55.3 (M) with : 1091254301582 (molecules)in: 32.768 (um3) +Scavenger:CO_2^0 : 0 (M) with : 0 (molecules)in: 32.768 (um3) +!!!!!!!!!!!!! this molecule has less one molecule for considered volume ************************************************************** -Total energy deposited in the world volume : 4.3598 keV +Total energy deposited in the world volume : 49.999 keV ------------------------------------------------------------------------- diff --git a/examples/extended/medical/dna/UHDR/beam.in b/examples/extended/medical/dna/UHDR/beam.in index 330e21caec..9921540dbc 100644 --- a/examples/extended/medical/dna/UHDR/beam.in +++ b/examples/extended/medical/dna/UHDR/beam.in @@ -3,16 +3,26 @@ #/process/dna/e-SolvationSubType Ritchie1994 #/process/dna/e-SolvationSubType Terrisol1990 +/process/chem/TimeStepModel IRT_syn + # Set the simulation volume (half Side Length) #/UHDR/env/volume 0.8 um # for UHDR /UHDR/env/volume 1.6 um # for CONV /UHDR/Detector/PBC true -/run/initialize +# time structure +/UHDR/pulse/pulseOn true +# push structure file +/UHDR/pulse/pulseFile 1.4us -# time structure (not available) -#/UHDR/pulse/activate true +# pulse structure +/UHDR/pulse/multiPulse true +/UHDR/pulse/pulsePeriod 10 ms +/UHDR/pulse/numberOfPulse 2 +#/UHDR/pulse/pulseInHisto pulseHisto.txt + +/run/initialize # pH and Scavenger /UHDR/env/pH 5.5 @@ -24,8 +34,8 @@ #/run/verbose 1 /tracking/verbose 0 -/scheduler/verbose 0 -/scheduler/endTime 1 ms +/scheduler/verbose 1 +/scheduler/endTime 10 s # set false if many beamOn in medium /scheduler/ResetScavengerForEachBeamOn true @@ -34,9 +44,7 @@ /run/printProgress 10 -/scorer/Dose/abortedDose 0.05 Gy - -/scorer/Dose/cutoff 0.01 Gy +/scorer/Dose/cutoff 0.1 Gy /UHDR/source/particle e- /UHDR/source/energy 0.999 MeV /run/beamOn 2 diff --git a/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh b/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh index d1abc7001b..7c8450b39f 100644 --- a/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh @@ -29,14 +29,18 @@ #ifndef ActionInitialization_h #define ActionInitialization_h 1 +#include "G4GenericMessenger.hh" +#include "G4String.hh" #include "G4VUserActionInitialization.hh" -class DetectorConstruction; +#include + + class ActionInitialization : public G4VUserActionInitialization { public: - explicit ActionInitialization(DetectorConstruction* pDetector); + explicit ActionInitialization(); ~ActionInitialization() override = default; @@ -45,7 +49,20 @@ class ActionInitialization : public G4VUserActionInitialization void Build() const override; private: - DetectorConstruction* fpDetector = nullptr; + void SetPulseStructureHistoInput(G4String); // L.T.Anh: set histo file + void SetPulseStructureInput(G4String); + void SetPulsePeriod(G4double tp) { fPulsePeriod = tp; } + void SetNumberOfPulse(G4int npulse) { fNumberOfPulse = npulse; } + void DefineCommands(); // Le Tuan Anh: add new commands + + G4String fPulseStructure = ""; + // Le Tuan Anh: To store pulse structure filename set by user in macro: + std::unique_ptr fMessenger; // Le Tuan Anh: command control + G4bool fActivePulse = false; // Le Tuan Anh: flag for invoking pulse mode + G4bool fUseHistoInput = false; + G4bool fUseInterPulse = false; // Le Tuan Anh: unify with fActivePulse later + G4double fPulsePeriod = 0; + G4int fNumberOfPulse = 1; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh b/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh index 980fefb75a..4c7558c42d 100644 --- a/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh +++ b/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh @@ -26,9 +26,12 @@ #ifndef ChemOxygenWaterBuilder_hh # define ChemOxygenWaterBuilder_hh 1 -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +# include "G4VUserChemistryList.hh" +#include "G4ChemTimeStepModel.hh" class G4DNAMolecularReactionTable; +class G4DNAMolecularReactionData; class ChemOxygenWaterBuilder { @@ -40,6 +43,10 @@ class ChemOxygenWaterBuilder static void SecondOrderReactionExtended(G4DNAMolecularReactionTable* pReactionTable); static void OxygenScavengerReaction(G4DNAMolecularReactionTable* pReactionTable); + + static void CO2ScavengerReaction(G4DNAMolecularReactionTable* pReactionTable); + + static void SetReactionType(G4DNAMolecularReactionData* pData, G4ChemTimeStepModel model); }; #endif // diff --git a/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh b/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh index 65fcaa0b13..c383dfae1d 100644 --- a/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh +++ b/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh @@ -32,28 +32,24 @@ #include "globals.hh" class G4DNAMolecularReactionTable; -class G4VChemistryWorld; -class EmDNAChemistry : public G4VUserChemistryList, public G4VPhysicsConstructor -{ - public: - EmDNAChemistry(); - ~EmDNAChemistry() override; +class G4GenericMessenger; +class EmDNAChemistry : public G4VUserChemistryList, + public G4VPhysicsConstructor { +public: + EmDNAChemistry(); + ~EmDNAChemistry() override; - void ConstructParticle() override { ConstructMolecule(); } - void ConstructMolecule() final; - void ConstructProcess() final; + void ConstructParticle() override { ConstructMolecule(); } + void ConstructMolecule() final; + void ConstructProcess() final; - void ConstructDissociationChannels() final; - void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) final; - void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) final; + void ConstructDissociationChannels() final; + void ConstructReactionTable(G4DNAMolecularReactionTable *reactionTable) final; + void ConstructTimeStepModel(G4DNAMolecularReactionTable *reactionTable) final; - void SetChemistryWorld(G4VChemistryWorld& chemistryWorld) - { - fpChemistryWorld = &chemistryWorld; - } - - private: - G4VChemistryWorld* fpChemistryWorld = nullptr; +private: + std::unique_ptr fMessenger; + //---------------------------------------------- }; #endif diff --git a/examples/extended/medical/dna/UHDR/include/InterPulseAction.hh b/examples/extended/medical/dna/UHDR/include/InterPulseAction.hh new file mode 100644 index 0000000000..7b55ea5575 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/InterPulseAction.hh @@ -0,0 +1,56 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// author: Le Tuan Anh +/// \file InterPulseAction.hh +/// \brief Definition of the InterPulseAction class + +#ifndef InterPulseAction_h +#define InterPulseAction_h 1 + +#include "PulseAction.hh" +#include "globals.hh" + +#include +class G4Track; + +class InterPulseAction: public PulseAction +{ +public: + explicit InterPulseAction(const G4String& pulse, G4bool useHisto=false, + G4double pulsePeriod = 0, G4int npulses = 0); + ~InterPulseAction() override = default; + void PreUserTrackingAction(const G4Track *) override; + void SetPulsePeriod(G4double tp) {fPulsePeriod = tp;} + G4double GetPulsePeriod() const{return fPulsePeriod;} + G4int GetNumberOfPulse() const{return fNumberOfPulse;} +private: + G4int WhichPulse() const; + G4int fNumberOfPulse = 1;//this must be always = 1 if no pulse + G4double fPulsePeriod = 0; +}; + +#endif + diff --git a/examples/extended/medical/dna/UHDR/include/PhysicsList.hh b/examples/extended/medical/dna/UHDR/include/PhysicsList.hh index d1dfe7fafc..8356a205b6 100644 --- a/examples/extended/medical/dna/UHDR/include/PhysicsList.hh +++ b/examples/extended/medical/dna/UHDR/include/PhysicsList.hh @@ -49,12 +49,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... class G4VPhysicsConstructor; -class DetectorConstruction; class PeriodicBoundaryPhysics; class PhysicsList : public G4VModularPhysicsList { public: - explicit PhysicsList(DetectorConstruction* det); + explicit PhysicsList(); ~PhysicsList() override = default; void ConstructParticle() final; diff --git a/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh index 98079aaa6b..e1f4dd4e70 100644 --- a/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh +++ b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh @@ -47,12 +47,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... class G4Event; -class DetectorConstruction; class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - explicit PrimaryGeneratorAction(DetectorConstruction* pDet); + explicit PrimaryGeneratorAction(); ~PrimaryGeneratorAction() override = default; void GeneratePrimaries(G4Event*) override; @@ -60,7 +59,6 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction private: std::unique_ptr fParticleGun; - DetectorConstruction* fpDetector = nullptr; std::unique_ptr fpMessenger; }; diff --git a/examples/extended/medical/dna/UHDR/include/PulseAction.hh b/examples/extended/medical/dna/UHDR/include/PulseAction.hh index 3a013a71a6..58856da5cd 100644 --- a/examples/extended/medical/dna/UHDR/include/PulseAction.hh +++ b/examples/extended/medical/dna/UHDR/include/PulseAction.hh @@ -28,14 +28,15 @@ #ifndef PULSE_PULSEACTION_HH #define PULSE_PULSEACTION_HH 1 -#include "G4MoleculeCounter.hh" +#include "CLHEP/Random/RandGeneral.h" + +#include "G4AutoLock.hh" #include "G4UserTrackingAction.hh" #include "G4VUserPulseInfo.hh" #include "G4VUserTrackInformation.hh" -#include - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +#include +#include class G4ParticleDefinition; @@ -59,7 +60,7 @@ class PulseAction : public G4UserTrackingAction public: using PulseMap = std::map; - PulseAction(); + PulseAction(const G4String& pulse, G4bool useHisto = false); ~PulseAction() override; @@ -75,25 +76,34 @@ class PulseAction : public G4UserTrackingAction G4double GetLonggestDelayedTime() const; - inline void SetPulse(const G4bool& pulse) - { - fActivePulse = pulse; - if (fActivePulse) { - G4MoleculeCounter::Instance()->Use(false); - } - } + inline void SetPulse(const G4bool& pulse) { fActivePulse = pulse; } inline G4bool IsActivedPulse() const { return fActivePulse; } + // L.T. Anh added getter/setter for interpulse class: + void SetLonggestDelayedTime(G4double lt) { fLonggestDelayedTime = lt; } + const G4String GetPulseFileName() { return fFileName; } + G4int GetVerbose() { return fVerbose; } + G4double GetPulseLarger() const; - private: - std::unique_ptr fpPulseInfo; - G4double fPulseLarger = 74.16666667; + protected: + G4int fVerbose = 1; G4double fDelayedTime = 0; + +private: + void InitializeForHistoInput(); + std::unique_ptr fpPulseInfo; + G4double fPulseLarger = 0; PulseMap fPulseData; std::vector fPulseVector; G4double fLonggestDelayedTime = 0; std::unique_ptr fpMessenger; G4bool fActivePulse = false; + G4String fFileName = ""; + std::unique_ptr fRandGeneral{ + nullptr}; // L. T. Anh: pointer to radomize histogram from CLHEP + G4bool fUseHistoInput{false}; // L. T. Anh: flag to use histo Input + G4double fTmin{0.}, fTmax{0.}; + static G4Mutex gUHDRMutex; // Le Tuan Anh: protect reading input files in MT mode }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/include/Scorer.hh b/examples/extended/medical/dna/UHDR/include/Scorer.hh index 98a3de9cc6..c6a1e4fdee 100644 --- a/examples/extended/medical/dna/UHDR/include/Scorer.hh +++ b/examples/extended/medical/dna/UHDR/include/Scorer.hh @@ -35,10 +35,10 @@ #include "G4UIdirectory.hh" #include "G4UImessenger.hh" #include "G4VPrimitiveScorer.hh" - +#include "G4DNAMolecularReactionTable.hh" #include #include - +#include "G4MoleculeTable.hh" class G4DNAEventScheduler; class G4VAnalysisManager; @@ -47,6 +47,7 @@ class G4MolecularConfiguration; class G4VChemistryWorld; +class InterPulseAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... struct Dose : public G4UImessenger @@ -60,9 +61,11 @@ struct Dose : public G4UImessenger std::unique_ptr fpDoseDir; std::unique_ptr fpAddDoseCutOff; std::unique_ptr fpAddDoseToAbort; + std::unique_ptr fpAddDoseCutOffPerPulse; G4double fDosesCutOff = 0; G4double fDosesToAbort = 0; G4double fCumulatedDose = 0; + G4double fPulseMax = 0; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -83,10 +86,17 @@ struct Gvalues : public G4UImessenger G4int fNEvent = 0; G4double fEdep = 0; + G4double fTotalDose = 0; + G4double fTotalDose2 = 0; + G4double fTotalDoseRate = 0; + G4double fTotalDoseRate2 = 0; + G4double fPulseMax = 0; inline void AddTimeToRecord(double time) { fTimeToRecord.insert(time); } void WriteWithAnalysisManager(G4VAnalysisManager*, const std::string& out); + void WriteInfo(G4VAnalysisManager* analysisManager, const std::string& out); + void WriteGvalues(G4VAnalysisManager* analysisManager); struct SpeciesInfo { @@ -152,19 +162,30 @@ class Scorer : public G4VPrimitiveScorer fpEventScheduler = pEventScheduler; } - private: - std::unique_ptr fpScorer; - G4int fHCID = -1; - G4THitsMap* fpEvtMap = nullptr; - G4VChemistryWorld* fpChemistryWorld = nullptr; - G4DNAEventScheduler* fpEventScheduler = nullptr; +private: + std::unique_ptr fpScorer; + G4int fHCID = -1; + G4THitsMap *fpEvtMap = nullptr; + G4VChemistryWorld *fpChemistryWorld = nullptr; + G4DNAEventScheduler *fpEventScheduler = nullptr; + const InterPulseAction* fPulseActionInfo = nullptr; + const G4MolecularConfiguration* fH3Op = nullptr; + const G4MolecularConfiguration* fOHm = nullptr; + const G4MolecularConfiguration* fH2O = nullptr; + const G4MolecularConfiguration* fO2 = nullptr; + }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... template Scorer::Scorer() : G4VPrimitiveScorer(typeid(TR).name()), fpScorer(new TR) -{} +{ + fH3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + fOHm = G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); + fH2O = G4MoleculeTable::Instance()->GetConfiguration("H2O"); + fO2 = G4MoleculeTable::Instance()->GetConfiguration("O2"); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh b/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh index 20cb6c0b7c..a9148d6dca 100644 --- a/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh +++ b/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh @@ -75,9 +75,12 @@ class TimeStepAction : public G4UserTimeStepAction void CompartmentBased(); PulseAction* fpPulse = nullptr; + G4int fPulseID = 0; const G4VChemistryWorld* fpChemWorld = nullptr; G4int fPixel = 0; G4Scheduler* fScheduler = nullptr; + G4double fPulsePeriod = 0; + G4int fNumberOfPulse = 0; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/initialize.in b/examples/extended/medical/dna/UHDR/initialize.in new file mode 100644 index 0000000000..431ed8f954 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/initialize.in @@ -0,0 +1,14 @@ + +/process/dna/e-SolvationSubType Meesungnoen2002 +#/process/dna/e-SolvationSubType Ritchie1994 +#/process/dna/e-SolvationSubType Terrisol1990 + +/process/chem/TimeStepModel IRT_syn + +# Set the simulation volume (half Side Length) +#/UHDR/env/volume 0.2 um +#/UHDR/env/volume 0.4 um +/UHDR/env/volume 0.8 um + +/UHDR/Detector/PBC true + diff --git a/examples/extended/medical/dna/UHDR/plotG_time.C b/examples/extended/medical/dna/UHDR/plotG_time.C index 6a1aa83ec9..3738d038bd 100644 --- a/examples/extended/medical/dna/UHDR/plotG_time.C +++ b/examples/extended/medical/dna/UHDR/plotG_time.C @@ -100,6 +100,8 @@ void plotG_time() { TGTab *fTab = new TGTab(main, 200, 200); Double_t timeA, sumG, sumG2; + Double_t sumDose, sumDose2; + Double_t sumDoseRate, sumDoseRate2; Int_t speciesID, number, nEvent; char speciesName[500]; @@ -108,7 +110,7 @@ void plotG_time() { file = TFile::Open("Dose_0.root"); TDirectoryFile *dir = dynamic_cast(file->Get("ntuple")); - TTree *tree = (TTree *) dir->Get("0.010000"); + TTree *tree = (TTree *) dir->Get("Gvalue"); tree->SetBranchAddress("speciesID", &speciesID); tree->SetBranchAddress("number", &number); tree->SetBranchAddress("nEvent", &nEvent); @@ -116,6 +118,10 @@ void plotG_time() { tree->SetBranchAddress("time", &timeA); tree->SetBranchAddress("sumG", &sumG); tree->SetBranchAddress("sumG2", &sumG2); + tree->SetBranchAddress("TotalDose", &sumDose); + tree->SetBranchAddress("TotalDose2", &sumDose2); + tree->SetBranchAddress("TotalDoseRate", &sumDoseRate); + tree->SetBranchAddress("TotalDoseRate2", &sumDoseRate2); Long64_t nentries = tree->GetEntries(); @@ -124,6 +130,15 @@ void plotG_time() { << file->GetPath() << endl; exit(1); } + tree->GetEntry(1); + Double_t errDose = sqrt((sumDose2 / nEvent - pow(sumDose/nEvent, 2)) + / (nEvent - 1)); + std::cout<<"Average dose (in Gy) : "<> speciesTimeInfo; diff --git a/examples/extended/medical/dna/UHDR/scavengers.in b/examples/extended/medical/dna/UHDR/scavengers.in new file mode 100644 index 0000000000..31a9e693dc --- /dev/null +++ b/examples/extended/medical/dna/UHDR/scavengers.in @@ -0,0 +1,29 @@ + +# pH and Scavenger +/UHDR/env/pH 5.5 + +# air concentration +/UHDR/env/scavenger O2 21 % +/UHDR/env/scavenger CO2 0.041 % +/UHDR/env/scavenger HCO3m 2.4 uM +# NO3-/NO2- concentration +#/UHDR/env/scavenger NO3m 1 mM +#/UHDR/env/scavenger NO2m 10 uM +#/UHDR/env/scavenger N2O 0.1 mM +#/UHDR/env/scavenger CH3OH 10 mM + + +/chem/reaction/print + +#/run/verbose 1 +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 1000 s + +# set false if many beamOn in medium +/scheduler/ResetScavengerForEachBeamOn true + +/scorer/Gvalues/nOfTimeBins 80 + +/run/printProgress 10 + diff --git a/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc b/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc index b7db19af8e..de7943a102 100644 --- a/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc @@ -27,6 +27,7 @@ #include "ChemistryWorld.hh" #include "DetectorConstruction.hh" +#include "InterPulseAction.hh" #include "PrimaryGeneratorAction.hh" #include "PulseAction.hh" #include "RunAction.hh" @@ -38,46 +39,111 @@ #include "G4DNAScavengerMaterial.hh" #include "G4H2O.hh" #include "G4Molecule.hh" -#include "G4MoleculeCounter.hh" #include "G4MoleculeGun.hh" #include "G4Scheduler.hh" +#include "G4RunManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -ActionInitialization::ActionInitialization(DetectorConstruction* pDetector) - : G4VUserActionInitialization(), fpDetector(pDetector) -{} +ActionInitialization::ActionInitialization() + : G4VUserActionInitialization() +{ + DefineCommands(); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(true); - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - G4MoleculeCounter::Instance()->SetVerbose(0); - G4MoleculeCounter::Instance()->CheckTimeForConsistency(false); - auto pPulseAction = new PulseAction(); - SetUserAction(pPulseAction); - SetUserAction(new PrimaryGeneratorAction(fpDetector)); + PulseAction* pPulseAction = nullptr; + if (fActivePulse) { // Le Tuan Anh: define if fActivePulse + if (fUseInterPulse) { + pPulseAction = + new InterPulseAction(fPulseStructure, fUseHistoInput, fPulsePeriod, fNumberOfPulse); + } + else { + pPulseAction = new PulseAction(fPulseStructure, fUseHistoInput); + } + + pPulseAction->SetPulse(fActivePulse); + SetUserAction(pPulseAction); + } + + SetUserAction(new PrimaryGeneratorAction()); auto pRunAction = new RunAction(); SetUserAction(pRunAction); - SetUserAction(new StackingAction()); - auto pChemWorld = fpDetector->GetChemistryWorld(); - auto pScavenger = std::make_unique(pChemWorld); - // To counter Scavenger - dynamic_cast(pScavenger.get())->SetCounterAgainstTime(); - G4Scheduler::Instance()->SetScavengerMaterial(std::move(pScavenger)); - auto timeStepAction = new TimeStepAction(pChemWorld, pPulseAction); - auto eventScheduler = timeStepAction->GetEventScheduler(); - pRunAction->SetEventScheduler(eventScheduler); - G4Scheduler::Instance()->SetUserAction(timeStepAction); + + if (G4DNAChemistryManager::IsActivated()) { + SetUserAction(new StackingAction()); + const auto* fpDetector = dynamic_cast( + G4RunManager::GetRunManager()->GetUserDetectorConstruction()); + auto pChemWorld = fpDetector->GetChemistryWorld(); + auto pScavenger = std::make_unique(pChemWorld); + // To counter Scavenger + dynamic_cast(pScavenger.get())->SetCounterAgainstTime(); + G4Scheduler::Instance()->SetScavengerMaterial(std::move(pScavenger)); + auto timeStepAction = new TimeStepAction(pChemWorld, pPulseAction); + auto eventScheduler = timeStepAction->GetEventScheduler(); + pRunAction->SetEventScheduler(eventScheduler); + G4Scheduler::Instance()->SetUserAction(timeStepAction); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::DefineCommands() +{ + // Le Tuan Anh: add new commands: + fMessenger = std::make_unique(this, "/UHDR/pulse/", "Pulse control"); + auto& filenameCmd = + fMessenger->DeclareMethod("pulseFile", &ActionInitialization::SetPulseStructureInput); + filenameCmd.SetParameterName("filenamePulse", true); + filenameCmd.SetDefaultValue(""); + + auto& activePulseCmd = fMessenger->DeclareProperty("pulseOn", fActivePulse); + activePulseCmd.SetParameterName("activatePulse", true); + activePulseCmd.SetDefaultValue("false"); + + auto& filenameCmdHisto = + fMessenger->DeclareMethod("pulseInHisto", &ActionInitialization::SetPulseStructureHistoInput); + filenameCmdHisto.SetParameterName("filenameInHisto", true); + filenameCmdHisto.SetDefaultValue(""); + + auto& interPulseCmd = fMessenger->DeclareProperty("multiPulse", fUseInterPulse); + interPulseCmd.SetParameterName("activateInterPulse", true); + interPulseCmd.SetDefaultValue("false"); + + auto& pulsePeriodCmd = + fMessenger->DeclareMethodWithUnit("pulsePeriod", "us", &ActionInitialization::SetPulsePeriod); + pulsePeriodCmd.SetParameterName("pulsePeriod", true); + pulsePeriodCmd.SetDefaultValue("0"); + pulsePeriodCmd.SetRange("pulsePeriod >= 0"); + + auto& nPulseCmd = + fMessenger->DeclareMethod("numberOfPulse", &ActionInitialization::SetNumberOfPulse); + nPulseCmd.SetParameterName("numberOfPulse", true); + nPulseCmd.SetDefaultValue("1"); + nPulseCmd.SetRange("numberOfPulse >= 1"); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +void ActionInitialization::SetPulseStructureHistoInput(G4String fn) +{ + // L.T. Anh: set histo input file & activate fUseHistoInput + fPulseStructure = fn; + fUseHistoInput = true; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::SetPulseStructureInput(G4String fn) +{ + // L.T. Anh: set input file & deactivate fUseHistoInput + fPulseStructure = fn; + fUseHistoInput = false; +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc b/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc index 53cd68933e..537cc96e44 100644 --- a/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc +++ b/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc @@ -29,6 +29,7 @@ #include "G4DNAMolecularReactionTable.hh" #include "G4MoleculeTable.hh" #include "G4SystemOfUnits.hh" +#include "G4EmParameters.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ChemOxygenWaterBuilder::OxygenScavengerReaction(G4DNAMolecularReactionTable* pReactionTable) @@ -43,16 +44,15 @@ void ChemOxygenWaterBuilder::OxygenScavengerReaction(G4DNAMolecularReactionTable auto* O2 = table->GetConfiguration("O2"); auto* O2m = table->GetConfiguration("O2m"); auto* O3m = table->GetConfiguration("O3m"); - G4DNAMolecularReactionData* reactionData = nullptr; // Oxygen concentration // e_aq + O2(B) -> O2- - reactionData = new G4DNAMolecularReactionData(2.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); + reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); reactionData->AddProduct(O2m); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H + O2(B) -> HO2 - reactionData = new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), H, O2); + reactionData = new G4DNAMolecularReactionData(2.1e10 * (1e-3 * m3 / (mole * s)), H, O2); reactionData->AddProduct(HO2); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ @@ -62,11 +62,38 @@ void ChemOxygenWaterBuilder::OxygenScavengerReaction(G4DNAMolecularReactionTable pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ } + +void ChemOxygenWaterBuilder::CO2ScavengerReaction(G4DNAMolecularReactionTable* pReactionTable) +{ + auto table = G4MoleculeTable::Instance(); + //----------------------------------- + // Get the molecular configuration + auto* e_aq = table->GetConfiguration("e_aq"); + auto* OH = table->GetConfiguration("°OH"); + auto* CO2 = table->GetConfiguration("CO2"); + auto* CO2m = table->GetConfiguration("CO2m"); + auto* HCO3 = table->GetConfiguration("HCO3"); + + + G4DNAMolecularReactionData* reactionData = nullptr; + // Oxygen concentration + // e_aq + CO2(B) -> CO2- k = 0.77 × 1010 + reactionData = new G4DNAMolecularReactionData(0.77e10 * (1e-3 * m3 / (mole * s)), e_aq, CO2); + reactionData->AddProduct(CO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + CO2(B) -> HCO3 + reactionData = new G4DNAMolecularReactionData(1.e6 * (1e-3 * m3 / (mole * s)), OH, CO2); + reactionData->AddProduct(HCO3); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ChemOxygenWaterBuilder::SecondOrderReactionExtended( - G4DNAMolecularReactionTable* pReactionTable) -{ + G4DNAMolecularReactionTable *pReactionTable) { + G4EmParameters* param = G4EmParameters::Instance(); + auto model = param->GetTimeStepModel(); //----------------------------------- // Get the molecular configuration auto table = G4MoleculeTable::Instance(); @@ -84,6 +111,13 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( auto* O2 = table->GetConfiguration("O2"); auto* O2m = table->GetConfiguration("O2m"); auto* O3m = table->GetConfiguration("O3m"); + auto* HCO3m = table->GetConfiguration("HCO3m"); + auto* O = table->GetConfiguration("Oxy"); + auto* CO3m = table->GetConfiguration("CO3m"); + //auto* CO3mm = table->GetConfiguration("CO3mm"); + auto* N2O = table->GetConfiguration("N2O"); + auto* MeOH = table->GetConfiguration("CH3OH"); + auto* CH2OH = table->GetConfiguration("CH2OH"); // second order G4DNAMolecularReactionData* reactionData = nullptr; @@ -113,27 +147,32 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( //------------------------------------------------------------------ // *OH + *H -> H2O reactionData = new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // *OH + *OH -> H2O2 reactionData = new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH); reactionData->AddProduct(H2O2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + *OH -> OH- reactionData = new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + H2O2 -> OH- + *OH reactionData = new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2); reactionData->AddProduct(OHm); reactionData->AddProduct(OH); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + H3O+ -> H* + H2O reactionData = new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op); reactionData->AddProduct(H); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); // extended @@ -152,17 +191,20 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( // H + HO2 -> H2O2 reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2); reactionData->AddProduct(H2O2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H + O2- -> HO2- reactionData = new G4DNAMolecularReactionData(1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m); reactionData->AddProduct(HO2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + O2- -> O2 + OH- reactionData = new G4DNAMolecularReactionData(1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m); reactionData->AddProduct(O2); // added to Scavenger reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + O2- -> H2O2 + OH- + OH- @@ -170,89 +212,105 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( reactionData->AddProduct(H2O2); reactionData->AddProduct(OHm); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + HO2- -> O- + OH- reactionData = new G4DNAMolecularReactionData(3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m); reactionData->AddProduct(Om); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // e_aq + O- -> OH- + OH- reactionData = new G4DNAMolecularReactionData(2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om); reactionData->AddProduct(OHm); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H3O+ + O2- -> HO2 reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m); reactionData->AddProduct(HO2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H3O+ + HO2- -> H2O2 reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m); reactionData->AddProduct(H2O2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H3O+ + O- -> OH reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om); reactionData->AddProduct(OH); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // eaq + HO2 -> HO2- reactionData = new G4DNAMolecularReactionData(1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2); reactionData->AddProduct(HO2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + OH- -> O- reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OH, OHm); reactionData->AddProduct(Om); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + HO2 -> O2 reactionData = new G4DNAMolecularReactionData(7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2); - reactionData->AddProduct(O2); // added to Scavenger + reactionData->AddProduct(O2); // added to Scavenger + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + HO2- -> HO2 + OH- reactionData = new G4DNAMolecularReactionData(8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m); reactionData->AddProduct(HO2); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + O- -> HO2- reactionData = new G4DNAMolecularReactionData(1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om); reactionData->AddProduct(HO2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + O3- -> O2- + HO2 reactionData = new G4DNAMolecularReactionData(8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m); reactionData->AddProduct(O2m); reactionData->AddProduct(HO2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH- + HO2 -> O2- reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OHm, HO2); // Frongillo 1.27e10 reactionData->AddProduct(O2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H2O2 + OH- -> HO2- reactionData = new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), H2O2, OHm); // Elliot 1.3e10, Plante 4.71e8 reactionData->AddProduct(HO2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H2O2 + O- -> HO2 + OH- reactionData = new G4DNAMolecularReactionData(5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om); reactionData->AddProduct(HO2); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H2 + O- -> H + OH- reactionData = new G4DNAMolecularReactionData(1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om); reactionData->AddProduct(H); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // O2- + O- -> O2 + OH- + OH- @@ -260,12 +318,14 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( reactionData->AddProduct(O2); reactionData->AddProduct(OHm); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // HO2- + O- -> O2- + OH- reactionData = new G4DNAMolecularReactionData(3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om); reactionData->AddProduct(O2m); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // O- + O- -> H2O2 + OH- + OH- @@ -273,44 +333,52 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( reactionData->AddProduct(H2O2); reactionData->AddProduct(OHm); reactionData->AddProduct(OHm); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // O- + O3- -> O2- + O2- reactionData = new G4DNAMolecularReactionData(7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m); reactionData->AddProduct(O2m); reactionData->AddProduct(O2m); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H + OH- -> eaq- reactionData = new G4DNAMolecularReactionData(2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm); reactionData->AddProduct(e_aq); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // H + H2O2 -> OH reactionData = new G4DNAMolecularReactionData(3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2); reactionData->AddProduct(OH); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + H2O2 -> HO2 reactionData = new G4DNAMolecularReactionData(2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2); reactionData->AddProduct(HO2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // OH + H2 -> H reactionData = new G4DNAMolecularReactionData(3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2); reactionData->AddProduct(H); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // HO2 + HO2 -> H2O2 + O2 reactionData = new G4DNAMolecularReactionData(9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2); reactionData->AddProduct(H2O2); reactionData->AddProduct(O2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // HO2 + O2- -> HO2- + O2 + reactionData = new G4DNAMolecularReactionData(9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m); reactionData->AddProduct(HO2m); reactionData->AddProduct(O2); + SetReactionType(reactionData, model); pReactionTable->SetReaction(reactionData); //------------------------------------------------------------------ // hoang added. this must be rare @@ -321,5 +389,37 @@ void ChemOxygenWaterBuilder::SecondOrderReactionExtended( reactionData->AddProduct(OHm); reactionData->AddProduct(OHm); pReactionTable->SetReaction(reactionData); + + //------------------------------------------------------------------ + // hoang added. : + // Radiat. Phys. Chcm. Vol. 27. No. 3. pp. 241-243. 1986 + // OH + HCO3m -> CO3- + H2O + reactionData = new G4DNAMolecularReactionData(8.5e6 * (1e-3 * m3 / (mole * s)), OH, HCO3m); + reactionData->AddProduct(CO3m); + pReactionTable->SetReaction(reactionData); + + + + // hoang added. :B. Gervais et al. / Chemical Physics Letters 410 (2005) 330–334 + //O + OH -> HO2; k = 2 * 1010 dm3 mol 1 s 1 + reactionData = new G4DNAMolecularReactionData(2.0e10 * (1e-3 * m3 / (mole * s)), O, OH); + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + + reactionData = new G4DNAMolecularReactionData(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, N2O); + reactionData->AddProduct(Om); + pReactionTable->SetReaction(reactionData); + + // OH + CH3OH -> CH2OH + H2O + reactionData = new G4DNAMolecularReactionData(9.7e8 * (1e-3 * m3 / (mole * s)), OH, MeOH); + reactionData->AddProduct(CH2OH); + pReactionTable->SetReaction(reactionData); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ChemOxygenWaterBuilder::SetReactionType(G4DNAMolecularReactionData* pData, G4ChemTimeStepModel model) +{ + if(model != G4ChemTimeStepModel::SBS) { pData->SetReactionType(1); } +} + + diff --git a/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc b/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc index fe45dff061..a8d17c1cbb 100644 --- a/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc +++ b/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc @@ -87,9 +87,14 @@ void ChemistryWorld::SetNewValue(G4UIcommand* command, G4String newValue) G4double ConcentrationInM = concentraion / (mole * liter * 1e6); fpChemicalComponent[scavengerConf] = ConcentrationInM; } - else if (unit == "%") // only for O2 + else if (unit == "%") // only for O2 and CO2 { - G4double ConcentrationInM = (concentraion / 100) * 0.0013 / (mole * liter); + G4double kH = 0.; + if (species == "O2") + kH = 0.0013; + else if (species == "CO2") + kH = 0.034; + G4double ConcentrationInM = (concentraion / 100) * kH / (mole * liter); fpChemicalComponent[scavengerConf] = ConcentrationInM; } else { @@ -108,6 +113,7 @@ void ChemistryWorld::SetNewValue(G4UIcommand* command, G4String newValue) void ChemistryWorld::ConstructChemistryComponents() { auto O2 = G4MoleculeTable::Instance()->GetConfiguration("O2"); + auto CO2 = G4MoleculeTable::Instance()->GetConfiguration("CO2"); auto H2O = G4MoleculeTable::Instance()->GetConfiguration("H2O"); auto H3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); @@ -132,5 +138,9 @@ void ChemistryWorld::ConstructChemistryComponents() // oxygen G4double O2Molarity = (0. / 100) * 0.0013 / (mole * liter); fpChemicalComponent[O2] = O2Molarity; + + // CO2 At 25°C, kH is approximately 3.3×10 −2 mol/(L·atm). + G4double CO2Molarity = (0. / 100) * 0.034 / (mole * liter); + fpChemicalComponent[CO2] = CO2Molarity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc b/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc index f47b84d85c..b3f0e96cb7 100644 --- a/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc +++ b/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc @@ -25,16 +25,19 @@ // #include "EmDNAChemistry.hh" +#include "DetectorConstruction.hh" + #include "G4DNAChemistryManager.hh" #include "G4DNAWaterDissociationDisplacer.hh" #include "G4ProcessManager.hh" +#include "G4RunManager.hh" #include "G4SystemOfUnits.hh" // *** Processes and models for Geant4-DNA #include "BoundedBrownianAction.hh" -#include "G4DNABrownianTransportation.hh" +#include "G4ChemReboundTransportation.hh" #include "G4DNAElectronHoleRecombination.hh" #include "G4DNAElectronSolvation.hh" #include "G4DNAMolecularDissociation.hh" @@ -67,17 +70,20 @@ /****/ #include "G4ChemicalMoleculeFinder.hh" // factory +#include "ChemNO2_NO3ScavengerBuilder.hh" #include "ChemOxygenWaterBuilder.hh" #include "ChemPureWaterBuilder.hh" #include "G4ChemDissociationChannels_option1.hh" +#include "G4DNAIndependentReactionTimeModel.hh" +#include "G4GenericMessenger.hh" #include "G4PhysicsConstructorFactory.hh" - G4_DECLARE_PHYSCONSTR_FACTORY(EmDNAChemistry); EmDNAChemistry::EmDNAChemistry() : G4VUserChemistryList(true) { G4DNAChemistryManager::Instance()->SetChemistryList(this); + // DefineCommands(); // Le Tuan Anh: create cmds } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -99,7 +105,7 @@ void EmDNAChemistry::ConstructMolecule() table->CreateConfiguration("H2O", G4H2O::Definition()); auto G4NO2 = new G4MoleculeDefinition("NO_2", /*mass*/ 30, - /*D*/ 0 * (m * m / s), + /*D*/ 5.3e-9 * (m * m / s), /*charge*/ 0, /*electronL*/ 0, /*radius*/ 0.17 * nm); // should be corrected @@ -113,18 +119,18 @@ void EmDNAChemistry::ConstructMolecule() table->CreateConfiguration("NO2", G4NO2); table->CreateConfiguration("NO2m", G4NO2, -1, // charge - 0 * (m2 / s)); + 1.9e-9 * (m2 / s)); table->CreateConfiguration("NO2mm", G4NO2, -2, // charge - 0 * (m2 / s)); + 1.9e-9 * (m2 / s)); table->CreateConfiguration("NO3m", G4NO3, -1, // charge - 0 * (m2 / s)); + 1.9e-9 * (m2 / s)); table->CreateConfiguration("NO3mm", G4NO3, -2, // charge - 0 * (m2 / s)); + 1.9e-9 * (m2 / s)); // FrickeDosimeter auto G4Fe = new G4MoleculeDefinition("Fe", @@ -164,6 +170,77 @@ void EmDNAChemistry::ConstructMolecule() table->CreateConfiguration("SO4m", G4SO4, -1, // charge 0 * (m2 / s)); + + // CO2 + auto G4CO2 = new G4MoleculeDefinition("CO_2", + /*mass*/ 44.01 * g / Avogadro * c_squared, + /*D*/ 1.88e-9 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + table->CreateConfiguration("CO2", G4CO2, + 0, // charge + 1.88e-9 * (m2 / s)); + + table->CreateConfiguration("CO2m", G4CO2, + -1, // charge + 1.88e-9 * (m2 / s)); + + // HCO3- + auto G4HCO3 = new G4MoleculeDefinition("HCO_3", + /*mass*/ 61.01 * g / Avogadro * c_squared, + /*D*/ 1.88e-9 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + + table->CreateConfiguration("HCO3", G4HCO3, + 0, // charge + 1.88e-9 * (m2 / s)); + table->CreateConfiguration("HCO3m", G4HCO3, + -1, // charge + 1.88e-9 * (m2 / s)); + + // CO3- + auto G4CO3 = new G4MoleculeDefinition("CO_3", + /*mass*/ 61.01 * g / Avogadro * c_squared, + /*D*/ 0.8e-9 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + table->CreateConfiguration("CO3m", G4CO3, + -1, // charge + 0.8e-9 * (m2 / s)); + + table->CreateConfiguration("CO3mm", G4CO3, + -2, // charge + 0.8e-9 * (m2 / s)); + + // G4N2O + auto G4N2O = new G4MoleculeDefinition("N_2O", + /*mass*/ 61.01 * g / Avogadro * c_squared, + /*D*/ 0.8e-9 * (m * m / s), // not corrected + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + table->CreateConfiguration("N2O", G4N2O, + 0, // charge + 0.8e-9 * (m2 / s)); // not corrected + + // MeOH + auto G4MeOH = new G4MoleculeDefinition("MeOH", + /*mass*/ 61.01 * g / Avogadro * c_squared, + /*D*/ 1e-10 * (m * m / s), // not corrected + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + table->CreateConfiguration("CH3OH", G4MeOH, + 0, // charge + 1e-10 * (m2 / s)); // n + table->CreateConfiguration("CH2OH", G4MeOH, + 0, // charge + 1e-10 * (m2 / s)); // n + // CH2OH } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -178,8 +255,10 @@ void EmDNAChemistry::ConstructDissociationChannels() void EmDNAChemistry::ConstructReactionTable(G4DNAMolecularReactionTable* pReactionTable) { ChemOxygenWaterBuilder::OxygenScavengerReaction(pReactionTable); + ChemOxygenWaterBuilder::CO2ScavengerReaction(pReactionTable); ChemOxygenWaterBuilder::SecondOrderReactionExtended(pReactionTable); ChemPureWaterBuilder::WaterScavengerReaction(pReactionTable); + ChemNO2_NO3ScavengerBuilder::NO2_NO3ScavengerReaction(pReactionTable); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -201,16 +280,27 @@ void EmDNAChemistry::ConstructProcess() auto NO3m = table->GetConfiguration("NO3m"); auto NO3mm = table->GetConfiguration("NO3mm"); + auto HCO3m = table->GetConfiguration("HCO3m"); + auto* CO2 = table->GetConfiguration("CO2"); + auto* CO2m = table->GetConfiguration("CO2m"); auto H2O2 = table->GetConfiguration("H2O2"); auto H = table->GetConfiguration("H"); - + auto* HCO3 = table->GetConfiguration("HCO3"); auto* H3OpB = table->GetConfiguration("H3Op(B)"); auto* OHmB = table->GetConfiguration("OHm(B)"); auto* HO2m = table->GetConfiguration("HO2m"); auto* Om = table->GetConfiguration("Om"); auto* O3m = table->GetConfiguration("O3m"); auto* H3Op = table->GetConfiguration("H3Op"); + auto H2O = table->GetConfiguration("H2O"); + auto* N2O = table->GetConfiguration("N2O"); + auto* MeOH = table->GetConfiguration("CH3OH"); + auto* CH2OH = table->GetConfiguration("CH2OH"); + //auto* CO3m = table->GetConfiguration("CO3m"); + const auto* fpDetector = dynamic_cast( + G4RunManager::GetRunManager()->GetUserDetectorConstruction()); + auto fpChemistryWorld = fpDetector->GetChemistryWorld(); fpChemistryWorld->ConstructChemistryComponents(); auto confinedBox = fpChemistryWorld->GetChemistryBoundary(); @@ -254,13 +344,8 @@ void EmDNAChemistry::ConstructProcess() auto* moleculeDef = iterator.value(); if (moleculeDef != G4H2O::Definition()) { - auto brown = new G4DNABrownianTransportation("BrowianTransportation"); - // hoang exp - auto brownTransport = new BoundedBrownianAction(); - brownTransport->SetBoundary(*confinedBox); - brown->SetUserBrownianAction(brownTransport); - // hoang exp - + auto brown = new G4ChemReboundTransportation("ReboundTransport"); + brown->SetBoundary(confinedBox); ph->RegisterProcess(brown, moleculeDef); } else { @@ -270,6 +355,7 @@ void EmDNAChemistry::ConstructProcess() auto dissociationProcess = new G4DNAMolecularDissociation("H2O_DNAMolecularDecay", fDecay); dissociationProcess->SetUserBrownianAction(brownTransport); dissociationProcess->SetDisplacer(moleculeDef, new G4DNAWaterDissociationDisplacer); + // dissociationProcess->SetVerbose(1); moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1); } @@ -278,7 +364,7 @@ void EmDNAChemistry::ConstructProcess() auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); //------------------------------------------------------------------ // H + O2(B) -> HO2 - auto reactionData = new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), H, O2); + auto reactionData = new G4DNAMolecularReactionData(2.1e10 * (1e-3 * m3 / (mole * s)), H, O2); reactionData->AddProduct(HO2); scanvergerProcess->SetReaction(H, reactionData); //------------------------------------------------------------------ @@ -287,14 +373,19 @@ void EmDNAChemistry::ConstructProcess() OHmB); // 2.51e7 (H + OH-)* 1e-7 (pH) = 2.48e0 reactionData->AddProduct(e_aq); scanvergerProcess->SetReaction(H, reactionData); - + //------------------------------------------------------------------ + // H + H2O -> eaq- + H3O+ 5.94 / s pkA = 9.5515 //2 + reactionData = new G4DNAMolecularReactionData(6.32 / s, H, H2O); // 6.32e0 * + reactionData->AddProduct(e_aq); + reactionData->AddProduct(H3OpB); + scanvergerProcess->SetReaction(H, reactionData); // H2O2 //------------------------------------------------------------------ // H + H202 -> OH + H20 - // reactionData = new G4DNAMolecularReactionData( - // 9.0e7 * (1e-3 * m3 / (mole * s)), H,H2O2); - // reactionData->AddProduct(OH); - // scanvergerProcess->SetReaction(H,reactionData); + reactionData = new G4DNAMolecularReactionData(9.0e7 * (1e-3 * m3 / (mole * s)), H, H2O2); + reactionData->AddProduct(OH); + scanvergerProcess->SetReaction(H, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); } if (moleculeDef == G4Electron_aq::Definition()) { @@ -302,13 +393,13 @@ void EmDNAChemistry::ConstructProcess() G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ // e_aq + O2(B) -> O2- - reactionData = new G4DNAMolecularReactionData(2.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); + reactionData = new G4DNAMolecularReactionData(1.74e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); reactionData->AddProduct(O2m); scanvergerProcess->SetReaction(e_aq, reactionData); //------------------------------------------------------------------ - // eaq- + H3O+(B) -> H + H2O 2.09e3 / s + // eaq- + H3O+(B) -> H + H2O 2.09e3 / s //2 reactionData = - new G4DNAMolecularReactionData(2.25e10 * (1e-3 * m3 / (mole * s)), e_aq, + new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3OpB); // 2.11e10 (e_aq + H3O+) * 1.0e-7 (Ph=7) = 2.09e3 reactionData->AddProduct(H); scanvergerProcess->SetReaction(e_aq, reactionData); @@ -322,30 +413,99 @@ void EmDNAChemistry::ConstructProcess() reactionData = new G4DNAMolecularReactionData(9.7e9 * (1e-3 * m3 / (mole * s)), e_aq, NO3m); reactionData->AddProduct(NO3mm); scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ // eaq- + H2O -> H + OH- 15.7 / M * s pKa = ??? //3 + reactionData = + new G4DNAMolecularReactionData(1.57e1 * 55.3 / s, e_aq, H2O); + reactionData->AddProduct(H); + reactionData->AddProduct(OHmB); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ + // Oxygen concentration + // e_aq + CO2(B) -> CO2- k = 0.77 × 1010 + reactionData = new G4DNAMolecularReactionData(0.77e10 * (1e-3 * m3 / (mole * s)), e_aq, CO2); + reactionData->AddProduct(CO2m); + scanvergerProcess->SetReaction(e_aq, reactionData); + // scanvergerProcess->SetVerboseLevel(1); - // H2O2 + e aq → OHm + OH - // reactionData = new G4DNAMolecularReactionData( - // 1.1e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);//or - // reactionData->AddProduct(OHm); - // reactionData->AddProduct(OH); - // scanvergerProcess->SetReaction(e_aq,reactionData); + //------------------------------------------------------------------ + reactionData = new G4DNAMolecularReactionData(0.9e10 * (1e-3 * m3 / (mole * s)), e_aq, N2O); + reactionData->AddProduct(Om); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } if (moleculeDef == G4O2::Definition()) { auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ - // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s + // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s //1 reactionData = new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), O2m, H3OpB); // 4.78e10(O2- + H3O+) * 1e-7(pH7) = 4.73e3 reactionData->AddProduct(HO2); + reactionData->AddProduct(H2O); + reactionData->SetReactionType(6); // Equilibrium 6 scanvergerProcess->SetReaction(O2m, reactionData); + //------------------------------------------------------------------ + // O2- + H2O -> HO2 + OH- 0.15 / s //4 + reactionData = new G4DNAMolecularReactionData(0.15 * 55.3 / s, O2m, H2O); + reactionData->AddProduct(HO2); + reactionData->AddProduct(OHmB); + scanvergerProcess->SetReaction(O2m, reactionData); + + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } - if (moleculeDef == G4ParticleTable::GetParticleTable()->FindParticle("OHm")) { + if (moleculeDef == G4OH::Definition()) { + auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + // scanvergerProcess->SetVerboseLevel(1); + G4DNAMolecularReactionData* reactionData = nullptr; + //------------------------------------------------------------------ + // OH + OH-(B) -> O- + H2O 6.24e2 / s //6 + reactionData = + new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OH, + OHmB); // 6.30e9 (OH + OH-) * 1e-7 (pH) = 6.24e2 + reactionData->AddProduct(Om); + reactionData->AddProduct(H2O); + reactionData->SetReactionType(8); // Equilibrium 8 + scanvergerProcess->SetReaction(OH, reactionData); + //------------------------------------------------------------------ + // OH + NO2- -> NO2 + OH- + reactionData = new G4DNAMolecularReactionData(8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m); + reactionData->AddProduct(NO2); + reactionData->AddProduct(OHm); + scanvergerProcess->SetReaction(OH, reactionData); + //------------------------------------------------------------------ + // OH + HCO3m -> NO2 + OH- + reactionData = new G4DNAMolecularReactionData(8.5e6 * (1e-3 * m3 / (mole * s)), OH, HCO3m); + scanvergerProcess->SetReaction(OH, reactionData); + // scanvergerProcess->SetVerboseLevel(1); + //------------------------------------------------------------------ + // OH -> O- + H3O+(B) //8 + reactionData = new G4DNAMolecularReactionData(0.060176635 / s, OH, + H2O); // + reactionData->AddProduct(Om); + reactionData->AddProduct(H3OpB); + scanvergerProcess->SetReaction(OH, reactionData); + //------------------------------------------------------------------ + // OH + CO2(B) -> HCO3 + reactionData = new G4DNAMolecularReactionData(1.e7 * (1e-3 * m3 / (mole * s)), OH, CO2); + reactionData->AddProduct(HCO3); + scanvergerProcess->SetReaction(OH, reactionData); + // scanvergerProcess->SetVerboseLevel(1); + //------------------------------------------------------------------ + // OH + CH3OH -> CH2OH + H2O + reactionData = new G4DNAMolecularReactionData(9.7e8 * (1e-3 * m3 / (mole * s)), OH, MeOH); + reactionData->AddProduct(CH2OH); + scanvergerProcess->SetReaction(OH, reactionData); + // scanvergerProcess->SetVerboseLevel(1); + //------------------------------------------------------------------ + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4MoleculeTable::Instance()->GetMoleculeDefinition("OH")) // OH- + { auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ @@ -354,63 +514,75 @@ void EmDNAChemistry::ConstructProcess() new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), OHm, H3OpB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) =1.12e4 scanvergerProcess->SetReaction(OHm, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } - if (moleculeDef == G4OH::Definition()) { - auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); - G4DNAMolecularReactionData* reactionData = nullptr; - - //------------------------------------------------------------------ - // OH + OH-(B) -> O- + H2O 6.24e2 / s - reactionData = - new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), OH, - OHmB); // 6.30e9 (OH + OH-) * 1e-7 (pH) = 6.24e2 - reactionData->AddProduct(Om); - scanvergerProcess->SetReaction(OH, reactionData); - - //------------------------------------------------------------------ - // OH + NO2- -> NO2 + OH- - reactionData = new G4DNAMolecularReactionData(8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m); - reactionData->AddProduct(NO2); - reactionData->AddProduct(OHm); - scanvergerProcess->SetReaction(OH, reactionData); - ph->RegisterProcess(scanvergerProcess, moleculeDef); - } - if (moleculeDef == G4ParticleTable::GetParticleTable()->FindParticle("HO_2m")) { - auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); - G4DNAMolecularReactionData* reactionData = nullptr; - //------------------------------------------------------------------ - // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 / s - reactionData = - new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), HO2m, - H3OpB); // 5.00e10 (H3O+ + HO2-) * 1e-7(pH) = 4.95e3 - reactionData->AddProduct(H2O2); - scanvergerProcess->SetReaction(HO2m, reactionData); - ph->RegisterProcess(scanvergerProcess, moleculeDef); - } - if (moleculeDef == G4HO2::Definition()) { auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + // scanvergerProcess->SetVerboseLevel(1); G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ - // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s + // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s //4 reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), HO2, OHmB); // 6.30e9(HO2 + OH-)*1e-7 (pH) = 6.24e2 reactionData->AddProduct(O2m); scanvergerProcess->SetReaction(HO2, reactionData); //------------------------------------------------------------------ + // HO2 + H2O -> H3O+ + O2- //1 + reactionData = new G4DNAMolecularReactionData(7.58e5 / s, HO2, H2O); + reactionData->AddProduct(H3OpB); + reactionData->AddProduct(O2m); + reactionData->SetReactionType(6); // Equilibrium 6 + scanvergerProcess->SetReaction(HO2, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } + + if (moleculeDef == G4MoleculeTable::Instance()->GetMoleculeDefinition("HO_2")) /*HO2-*/ { + auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + // scanvergerProcess->SetVerboseLevel(1); + G4DNAMolecularReactionData* reactionData = nullptr; + //------------------------------------------------------------------ + // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 / s //7 + reactionData = + new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), HO2m, + H3OpB); // 5.00e10 (H3O+ + HO2-) * 1e-7(pH) = 4.95e3 + reactionData->AddProduct(H2O2); + scanvergerProcess->SetReaction(HO2m, reactionData); + //------------------------------------------------------------------ + // HO2- + H2O -> H2O2 + OH- 1.36e6 / M * s pka = 11.784 //5 + reactionData = new G4DNAMolecularReactionData(1.36e6 * 55.3 / s, HO2m, H2O); // + reactionData->AddProduct(H2O2); + reactionData->AddProduct(OHmB); + reactionData->SetReactionType(7); // Equilibrium 7 + scanvergerProcess->SetReaction(HO2m, reactionData); + //------------------------------------------------------------------ + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4Oxygen::Definition()) { auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ - // O- + H3O+(B) -> OH + H2O 4.73e3 / s + // O- + H3O+(B) -> OH + H2O 4.73e3 / s //8 reactionData = - new G4DNAMolecularReactionData(4.78e10 * (1e-3 * m3 / (mole * s)), Om, + new G4DNAMolecularReactionData(9.56e10 * (1e-3 * m3 / (mole * s)), Om, H3OpB); // 4.78e10 (H3O+ + O2-) * 1e-7(pH) = 4.73e3 reactionData->AddProduct(OH); scanvergerProcess->SetReaction(Om, reactionData); + //------------------------------------------------------------------ + // O- + H2O -> OH + OH- 1.8e6 / s pka = 11.9 //6 + reactionData = new G4DNAMolecularReactionData(1.8e6 * 55.3 / s, Om, H2O); + reactionData->AddProduct(OH); + reactionData->AddProduct(OHmB); + reactionData->SetReactionType(8); // Equilibrium 8 + scanvergerProcess->SetReaction(Om, reactionData); + //------------------------------------------------------------------ + // O- + O2(B) -> O3- + reactionData = new G4DNAMolecularReactionData(3.7e9 * (1e-3 * m3 / (mole * s)), Om, O2); + reactionData->AddProduct(O3m); + scanvergerProcess->SetReaction(Om, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } if (moleculeDef == G4O3::Definition()) { @@ -423,8 +595,14 @@ void EmDNAChemistry::ConstructProcess() H3OpB); // 9.0e10 (O3- + H3O+) * 1e-7(pH) = 8.91e3 reactionData->AddProduct(OH); reactionData->AddProduct(O2); - //------------------------------------------------------------------ scanvergerProcess->SetReaction(O3m, reactionData); + //------------------------------------------------------------------ + // O3- + H2OB -> O- + O2 + reactionData = new G4DNAMolecularReactionData(2.66e3 / s, O3m, H2O); + reactionData->AddProduct(Om); + reactionData->AddProduct(O2); + scanvergerProcess->SetReaction(O3m, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } if (moleculeDef == G4H3O::Definition()) { @@ -436,18 +614,29 @@ void EmDNAChemistry::ConstructProcess() new G4DNAMolecularReactionData(1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHmB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) = 1.12e4 scanvergerProcess->SetReaction(H3Op, reactionData); + //------------------------------------------------------------------ ph->RegisterProcess(scanvergerProcess, moleculeDef); } if (moleculeDef == G4H2O2::Definition()) { auto scanvergerProcess = new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + // scanvergerProcess->SetVerboseLevel(1); G4DNAMolecularReactionData* reactionData = nullptr; //------------------------------------------------------------------ - // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s + // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s //5 reactionData = new G4DNAMolecularReactionData(1.27e10 * (1e-3 * m3 / (mole * s)), H2O2, OHmB); // 4.71e8 (H2O2 + OH-) * 1e-7 (pH) = 4.66e1 reactionData->AddProduct(HO2m); + reactionData->SetReactionType(7); // Equilibrium 7 scanvergerProcess->SetReaction(H2O2, reactionData); + //------------------------------------------------------------------ + // H2O2 + H2O -> H+ + HO2- First order pka = 11.784 //7 + reactionData = new G4DNAMolecularReactionData(7.86e-2 / s, H2O2, H2O); + reactionData->AddProduct(HO2m); + reactionData->AddProduct(H3OpB); + scanvergerProcess->SetReaction(H2O2, reactionData); + //------------------------------------------------------------------ + ph->RegisterProcess(scanvergerProcess, moleculeDef); } } @@ -458,11 +647,19 @@ void EmDNAChemistry::ConstructProcess() void EmDNAChemistry::ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) { - auto reactionRadiusComputer = new G4DNASmoluchowskiReactionModel(); - reactionTable->PrintTable(reactionRadiusComputer); - auto stepByStep = new G4DNAMolecularStepByStepModel(); - stepByStep->SetReactionModel(reactionRadiusComputer); - RegisterTimeStepModel(stepByStep, 0); + // Le Tuan Anh: swtich between time-step-models + G4EmParameters* param = G4EmParameters::Instance(); + auto model = param->GetTimeStepModel(); + if (model == G4ChemTimeStepModel::SBS) { + auto reactionRadiusComputer = new G4DNASmoluchowskiReactionModel(); + reactionTable->PrintTable(reactionRadiusComputer); + auto stepByStep = new G4DNAMolecularStepByStepModel(); + stepByStep->SetReactionModel(reactionRadiusComputer); + RegisterTimeStepModel(stepByStep, 0); + } + else if (model == G4ChemTimeStepModel::IRT_syn) { + RegisterTimeStepModel(new G4DNAIndependentReactionTimeModel(), 0); + } } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/InterPulseAction.cc b/examples/extended/medical/dna/UHDR/src/InterPulseAction.cc new file mode 100644 index 0000000000..acca431e52 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/InterPulseAction.cc @@ -0,0 +1,79 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// author: Le Tuan Anh +/// \file InterPulseAction.cc +/// \brief Implementation of the InterPulseAction class + +#include "InterPulseAction.hh" + +#include "CLHEP/Random/RandGeneral.h" +#include "Scorer.hh" + +#include "G4EventManager.hh" +#include "G4MultiFunctionalDetector.hh" +#include "G4Track.hh" +#include "G4UnitsTable.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +InterPulseAction::InterPulseAction(const G4String& pulse, G4bool useHisto, G4double pulsePeriod, + G4int npulses) + : PulseAction(pulse, useHisto), fNumberOfPulse(npulses), fPulsePeriod(pulsePeriod) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void InterPulseAction::PreUserTrackingAction(const G4Track* atrk) +{ + if (IsActivedPulse() && GetPulseFileName().empty()) { + return; + } + if (atrk->GetParentID() == 0) { + G4double DelayedTimeInPulse = RandomizeInPulse(); + + G4int activePulse = WhichPulse(); + fDelayedTime = DelayedTimeInPulse + G4double(activePulse - 1) * fPulsePeriod; + + if (GetVerbose() > 1) { + G4cout << "Particle comes at : " << G4BestUnit(fDelayedTime, "Time") + << " in Pulse : " << activePulse << G4endl; + } + if (GetLonggestDelayedTime() < fDelayedTime) { + SetLonggestDelayedTime(fDelayedTime); + } + } + auto pPulseInfo = new PulseInfo(fDelayedTime); + ((G4Track*)atrk)->SetUserInformation(pPulseInfo); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int InterPulseAction::WhichPulse() const +{ + G4int random = std::floor(1 + fNumberOfPulse * G4UniformRand()); + G4int output = fNumberOfPulse == 1 ? 1 : random; + return output; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/src/PhysicsList.cc b/examples/extended/medical/dna/UHDR/src/PhysicsList.cc index 1c28aa624a..f9d96199f7 100644 --- a/examples/extended/medical/dna/UHDR/src/PhysicsList.cc +++ b/examples/extended/medical/dna/UHDR/src/PhysicsList.cc @@ -32,9 +32,10 @@ #include "G4EmDNAPhysics_option2.hh" #include "G4PhysicsConstructorRegistry.hh" #include "G4SystemOfUnits.hh" +#include "G4RunManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList(DetectorConstruction* pDetector) +PhysicsList::PhysicsList() : G4VModularPhysicsList(), fEmDNAPhysicsList(new G4EmDNAPhysics_option2(verboseLevel)), fEmDNAChemistryList(new EmDNAChemistry) @@ -42,7 +43,6 @@ PhysicsList::PhysicsList(DetectorConstruction* pDetector) G4double currentDefaultCut = 0.01 * mm; G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); SetDefaultCutValue(currentDefaultCut); - fEmDNAChemistryList->SetChemistryWorld(*(pDetector->GetChemistryWorld())); fPBC = std::make_unique("Periodic", true, true, true); } diff --git a/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc index e1ef9ec6c2..4b3fd275b0 100644 --- a/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc +++ b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc @@ -34,11 +34,12 @@ #include "G4ParticleGun.hh" #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" +#include "G4RunManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* pDet) - : G4VUserPrimaryGeneratorAction(), fpDetector(pDet) +PrimaryGeneratorAction::PrimaryGeneratorAction() + : G4VUserPrimaryGeneratorAction() { fpMessenger = std::make_unique(this); fParticleGun = std::make_unique(); @@ -49,6 +50,8 @@ PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* pDet) auto pPosDist = fParticleGun->GetPosDist(); pPosDist->SetPosDisType("Plane"); pPosDist->SetPosDisShape("Square"); + const auto* fpDetector = dynamic_cast( + G4RunManager::GetRunManager()->GetUserDetectorConstruction()); auto faceSiez = fpDetector->GetChemistryWorld()->GetChemistryBoundary()->halfSideLengthInY(); pPosDist->SetCentreCoords(G4ThreeVector(0, 0, -faceSiez)); pPosDist->SetHalfX(faceSiez); diff --git a/examples/extended/medical/dna/UHDR/src/PulseAction.cc b/examples/extended/medical/dna/UHDR/src/PulseAction.cc index 1c252f667d..a291d4154e 100644 --- a/examples/extended/medical/dna/UHDR/src/PulseAction.cc +++ b/examples/extended/medical/dna/UHDR/src/PulseAction.cc @@ -29,19 +29,31 @@ #include "PulseActionMessenger.hh" +#include "G4RunManager.hh" +#include "G4Scheduler.hh" +#include "G4String.hh" +#include "G4SystemOfUnits.hh" #include "G4Track.hh" +#include "G4UIcommand.hh" #include "G4UnitsTable.hh" #include "Randomize.hh" #include +G4Mutex PulseAction::gUHDRMutex = G4MUTEX_INITIALIZER; // Le Tuan Anh: for autolock in MT mode //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PulseAction::PulseAction() : G4UserTrackingAction() +PulseAction::PulseAction(const G4String& pulse, G4bool useHisto) + : G4UserTrackingAction(), fFileName(pulse), fUseHistoInput(useHisto) { fpPulseInfo = std::make_unique(0); fpMessenger = std::make_unique(this); - Initialize(); + if (fUseHistoInput) { + InitializeForHistoInput(); + } + else { + Initialize(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -67,20 +79,29 @@ PulseAction::~PulseAction() = default; void PulseAction::PreUserTrackingAction(const G4Track* pTrack) { - if (fActivePulse) { - if (pTrack->GetParentID() == 0) { - fDelayedTime = RandomizeInPulse(); - fpPulseInfo = std::make_unique(fDelayedTime); + if (!fActivePulse || fFileName == "") { + return; + } + if (fActivePulse && fFileName == "") { + return; + } + if (fFileName != "" && !fActivePulse) { + return; + } + if (pTrack->GetParentID() == 0) { + fDelayedTime = RandomizeInPulse(); + fpPulseInfo = std::make_unique(fDelayedTime); + if (fVerbose > 1) { G4cout << "Particle comes at : " << G4BestUnit(fpPulseInfo->GetDelayedTime(), "Time") << G4endl; - if (fLonggestDelayedTime < fDelayedTime) { - fLonggestDelayedTime = fDelayedTime; - } } - auto pPulseInfo = new PulseInfo(*fpPulseInfo); - ((G4Track*)pTrack)->SetUserInformation(pPulseInfo); + if (fLonggestDelayedTime < fDelayedTime) { + fLonggestDelayedTime = fDelayedTime; + } } + auto pPulseInfo = new PulseInfo(*fpPulseInfo); + ((G4Track*)pTrack)->SetUserInformation(pPulseInfo); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -93,12 +114,6 @@ G4double PulseAction::Interpolate(const std::array& data) G4double xs1 = data[3]; G4double xs2 = data[4]; G4double value = 0.; - if ((std::log10(e2) - std::log10(e1)) != 0) { - G4double a = (std::log10(xs2) - std::log10(xs1)) / (std::log10(e2) - std::log10(e1)); - G4double b = std::log10(xs2) - a * std::log10(e2); - G4double sigma = a * std::log10(e) + b; - value = (std::pow(10., sigma)); - } if ((e2 - e1) != 0) { G4double d1 = xs1; @@ -112,55 +127,130 @@ G4double PulseAction::Interpolate(const std::array& data) void PulseAction::Initialize() { - std::ostringstream FileName; - FileName << "pulseShape.dat"; - std::ifstream input(FileName.str().c_str()); + if (fFileName.empty()) { + return; + } - if (!input.is_open()) { + fPulseVector = {0.}; // Commence avec zéro comme première valeur + fPulseData.clear(); + fPulseLarger = 0; + G4MUTEXLOCK(&gUHDRMutex); // Le Tuan Anh: for autolock in MT mode + + std::ifstream inputFile(fFileName); + if (!inputFile) { G4ExceptionDescription exception; - exception << "pulseShape.dat file not found. Please, provide"; + exception << "pulse Shape file not found. Please, provide : " << fFileName; G4Exception("PulseAction::Initialize()", "PulseAction01", FatalException, exception); } - fPulseVector.clear(); - fPulseVector.push_back(0.); - while (!input.eof()) { - double aTDummy; - double pTDummy; - input >> aTDummy; - if (aTDummy != fPulseVector.back()) { - fPulseVector.push_back(aTDummy); + G4double time, pulseAmplitude; + while (inputFile >> time) { + time *= CLHEP::us; // Conversion en unités + + if (!(inputFile >> pulseAmplitude)) { + break; } - input >> pTDummy; - fPulseData[aTDummy] = pTDummy; + if (time != fPulseVector.back()) { + fPulseVector.push_back(time); + } + fPulseData[time] = pulseAmplitude; + fPulseLarger = std::max(fPulseLarger, time); } + G4MUTEXUNLOCK(&gUHDRMutex); // Le Tuan Anh: for autolock in MT mode } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PulseAction::InitializeForHistoInput() +{ + // L.T. Anh: read histogram for Randomizing pulse using CLHEP::RandGeneral + std::ostringstream FileName; + FileName << fFileName; + if (fFileName == "") { + return; + } + fPulseVector.clear(); + G4int nbins = 0; + G4double Tmin = 0, Tmax = 0, pdata; + G4MUTEXLOCK(&gUHDRMutex); + std::ifstream input(FileName.str().c_str()); + if (!input.is_open()) { + G4ExceptionDescription exception; + exception << "pulse Shape file " << fFileName + << " not found. Please, provide correct file name!!!"; + G4Exception("PulseAction::InitializeForHistoInput()", "PulseAction01", FatalException, + exception); + } + + G4String aline; + while (std::getline(input, aline)) { + if (aline.empty()) continue; + std::istringstream issLine(aline); + G4String firstWord; + issLine >> firstWord; + if (firstWord == "#") continue; + if (firstWord == "nbins") { + issLine >> nbins; + } + else if (firstWord == "Tmin") { + G4String units = ""; + issLine >> Tmin >> units; + fTmin = Tmin * G4UIcommand::ValueOf(units); + } + else if (firstWord == "Tmax") { + G4String units = ""; + issLine >> Tmax >> units; + fTmax = Tmax * G4UIcommand::ValueOf(units); + } + else { + pdata = std::stod(firstWord); + fPulseVector.push_back(pdata); + } + } + input.close(); + G4MUTEXUNLOCK(&gUHDRMutex); + if (nbins != (G4int)fPulseVector.size() || nbins == 0) { + G4ExceptionDescription exception; + exception << "Nbins = " << nbins; + if (nbins != 0) exception << " not equal to data-size = " << fPulseVector.size(); + exception << "!!! \nPlease check the content/format of input file."; + G4Exception("PulseAction::InitializeForHistoInput()", "PulseAction01", FatalException, + exception); + } + fRandGeneral = std::make_unique(&fPulseVector.at(0), nbins); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double PulseAction::RandomizeInPulse() { - const G4double minTime = 0.; - const G4double maxTime = fPulseLarger; // ns - - G4double MaximumPulse = 0.; - G4int nSteps = 50; - G4double value(minTime); - - for (G4int i = 0; i < nSteps; i++) { - G4double PulseNumber = PulseSpectrum(value); - if (PulseNumber >= MaximumPulse) { - MaximumPulse = PulseNumber; - } - value += maxTime / nSteps; + if (fUseHistoInput) { + // L.T. Anh: Randomizing pulse using CLHEP::RandGeneral + G4double r = fRandGeneral->shoot(); + G4double tp = (fTmax - fTmin) * r + fTmin; + return tp; } + else { + const G4double minTime = 0.; + const G4double maxTime = fPulseLarger; // us - G4double selectedPulse = 0.; - do { - selectedPulse = G4UniformRand() * (maxTime - minTime); - } while (G4UniformRand() * MaximumPulse > PulseSpectrum(selectedPulse)); + G4double MaximumPulse = 0.; + G4int nSteps = 50; + G4double value(minTime); - return selectedPulse; + for (G4int i = 0; i < nSteps; i++) { + G4double PulseNumber = PulseSpectrum(value); + if (PulseNumber >= MaximumPulse) { + MaximumPulse = PulseNumber; + } + value += maxTime / nSteps; + } + + G4double selectedPulse; + do { + selectedPulse = G4UniformRand() * (maxTime - minTime); + } while (G4UniformRand() * MaximumPulse > PulseSpectrum(selectedPulse)); + + return selectedPulse; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -168,17 +258,14 @@ G4double PulseAction::RandomizeInPulse() double PulseAction::PulseSpectrum(G4double time) { G4double pulse = 0.; - G4double valueT1 = 0; - G4double valueT2 = 0; - G4double xs1 = 0; - G4double xs2 = 0; + G4double valueT1, valueT2, xs1, xs2; auto t2 = std::upper_bound(fPulseVector.begin(), fPulseVector.end(), time); auto t1 = t2 - 1; valueT1 = *t1; valueT2 = *t2; xs1 = fPulseData[valueT1]; xs2 = fPulseData[valueT2]; - G4double xsProduct = xs1 * xs2; + auto xsProduct = xs1 * xs2; if (xsProduct != 0.) { std::array a = {valueT1, valueT2, time, xs1, xs2}; pulse = Interpolate(a); @@ -194,3 +281,9 @@ G4double PulseAction::GetLonggestDelayedTime() const } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4double PulseAction::GetPulseLarger() const +{ + return fPulseLarger; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc b/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc index d6d608fc75..58f4f11b37 100644 --- a/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc +++ b/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc @@ -30,6 +30,7 @@ #include "PulseAction.hh" #include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithAString.hh" #include "G4UIdirectory.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/src/RunAction.cc b/examples/extended/medical/dna/UHDR/src/RunAction.cc index e135342504..3dae56d16d 100644 --- a/examples/extended/medical/dna/UHDR/src/RunAction.cc +++ b/examples/extended/medical/dna/UHDR/src/RunAction.cc @@ -79,16 +79,16 @@ void RunAction::EndOfRunAction(const G4Run* run) if (nofEvents == 0) { return; } - auto chem6Run = dynamic_cast(run); - G4double sumDose = chem6Run->GetSumDose(); + auto pRun = dynamic_cast(run); + G4double sumDose = pRun->GetSumDose(); if (G4Threading::IsMultithreadedApplication() && IsMaster()) { G4cout << G4endl << "--------------------------End of Global Run------------------------------" << G4endl << "The run has " << nofEvents << " events " << G4endl; - auto masterGvaluesScorer = dynamic_cast*>(chem6Run->GetGvaluesScorer()); + auto masterGvaluesScorer = dynamic_cast*>(pRun->GetGvaluesScorer()); - auto masterDoseLimite = dynamic_cast*>(chem6Run->GetSumDoseLimit()); + auto masterDoseLimite = dynamic_cast*>(pRun->GetSumDoseLimit()); G4cout << "Number of events recorded by the species scorer : " << masterGvaluesScorer->GetpScorer()->GetNumberOfRecordedEvents() << " events " diff --git a/examples/extended/medical/dna/UHDR/src/Scorer.cc b/examples/extended/medical/dna/UHDR/src/Scorer.cc index 5667776fc0..348886f363 100644 --- a/examples/extended/medical/dna/UHDR/src/Scorer.cc +++ b/examples/extended/medical/dna/UHDR/src/Scorer.cc @@ -25,14 +25,15 @@ #include "Scorer.hh" +#include "InterPulseAction.hh" #include "PrimaryGeneratorAction.hh" +#include "PulseAction.hh" #include "TimeStepAction.hh" #include "G4AnalysisManager.hh" #include "G4DNAEventScheduler.hh" #include "G4DNAScavengerMaterial.hh" #include "G4Event.hh" -#include "G4MoleculeTable.hh" #include "G4PhysicalConstants.hh" #include "G4RunManager.hh" #include "G4Scheduler.hh" @@ -42,9 +43,9 @@ #include #include -#include #include #include + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Dose @@ -91,10 +92,9 @@ template<> void Scorer::clear() { fpScorer->fCumulatedDose = 0.; + fpScorer->fPulseMax = 0; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - template<> void Scorer::Initialize(G4HCofThisEvent* HCE) { @@ -104,6 +104,9 @@ void Scorer::Initialize(G4HCofThisEvent* HCE) fHCID = GetCollectionID(0); } HCE->AddHitsCollection(fHCID, (G4VHitsCollection*)fpEvtMap); + + fPulseActionInfo = + dynamic_cast(G4RunManager::GetRunManager()->GetUserTrackingAction()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -115,6 +118,7 @@ void Scorer::EndOfEvent(G4HCofThisEvent*) fpEvtMap->add(0, fpScorer->fDosesCutOff); } fpScorer->fCumulatedDose = 0.; + fpScorer->fPulseMax = 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -125,14 +129,25 @@ G4bool Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*) auto currentEvent = G4EventManager::GetEventManager(); const G4Track* track = aStep->GetTrack(); auto boundingBox = fpChemistryWorld->GetChemistryBoundary(); + G4double V = boundingBox->Volume() / cm3; G4double edep = aStep->GetTotalEnergyDeposit(); if (edep == 0.) { return false; } - (fpScorer->fCumulatedDose) += edep; + G4double eToGray = (0.001 * V * 6.242e+18); + if (eToGray != 0) { + (fpScorer->fCumulatedDose) += ((edep) / eV) / eToGray; + } if (track->GetParentID() == 0 && aStep->IsFirstStepInVolume()) { - G4double DoseInGray = ((fpScorer->fCumulatedDose) / eV) / (0.001 * V * 6.242e+18); + auto pulseInfo = dynamic_cast(track->GetUserInformation()); + if (pulseInfo != nullptr) { + auto delayedTime = pulseInfo->GetDelayedTime(); + if (fpScorer->fPulseMax < delayedTime) { + fpScorer->fPulseMax = delayedTime; + } + } + G4double DoseInGray = fpScorer->fCumulatedDose; if (DoseInGray > fpScorer->fDosesCutOff / gray) { G4cout << "_____________________________________________________________________________" << G4endl; @@ -143,17 +158,64 @@ G4bool Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*) ->GetParticleName(); auto energy = currentEvent->GetConstCurrentEvent()->GetPrimaryVertex()->GetPrimary()->GetKineticEnergy(); - G4cout << "Stop this beam line (" << name << ", " << energy - << " MeV) at actual dose: " << DoseInGray - << " Gy. Cut-off dose: " << fpScorer->fDosesCutOff / gray << " Gy" << G4endl; - G4cout << "The beam of " << 1000000 - currentEvent->GetStackManager()->GetNUrgentTrack() - 1 - << " tracks" - << " in a volume of " << V * 1e+12 // convert cm3 to um3 - << " um3. Total deposit energy: " << fpScorer->fCumulatedDose / eV << " eV. " - << G4endl; - if (DoseInGray > fpScorer->fDosesToAbort / gray) { + + G4cout << "Beam line : " << "(" << name << ", " << energy << " MeV)" << G4endl; + G4cout << "Cut-off dose : " << fpScorer->fDosesCutOff / gray << " Gy" << G4endl; + G4cout << "Stop at actual dose : " << DoseInGray << " Gy" << G4endl; + if (fPulseActionInfo != nullptr) { + auto numberOfPulse = fPulseActionInfo->GetNumberOfPulse(); + auto DIT = fPulseActionInfo->GetPulsePeriod(); + G4cout << "DIT : " << DIT / CLHEP::ms << " ms" << G4endl; + G4cout << "Pulse number : " << numberOfPulse << G4endl; + } + + const auto generatorAction = static_cast( + G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction()); + const auto particleGun = generatorAction->GetSPGun(); + auto NumberOfParticlesGeneratedinOneEvent = particleGun->GetNumberOfParticles(); + + G4cout << "Beam duration : " << fpScorer->fPulseMax / second << " s" << G4endl; + if(fpScorer->fPulseMax != 0){ + G4cout << "Actual dose rate : " << DoseInGray / (fpScorer->fPulseMax / second) << " Gy/s" + << G4endl; + }else{ + G4cout << "Actual dose rate : " << "infinite" + << G4endl; + } + + G4cout << "Track number : " + << NumberOfParticlesGeneratedinOneEvent + - currentEvent->GetStackManager()->GetNUrgentTrack() - 1 + << " tracks" << G4endl; + G4cout << "Irradiated volume : " << V * 1e+12 // convert cm3 to um3 + << " um3 (" << 2 * boundingBox->halfSideLengthInX() / um << " x " + << 2 * boundingBox->halfSideLengthInY() / um << " x " + << 2 * boundingBox->halfSideLengthInZ() / um << ")" << G4endl; + auto ChemComponent = fpChemistryWorld->GetChemicalComponent(); + for (const auto& it : ChemComponent) { + if (fH2O == it.first) continue; + if (fOHm == it.first) continue; + if (it.first == fH3Op) { + G4cout << "pH : " << -std::log10(it.second * (mole * liter)) << G4endl; + continue; + } + G4cout << it.first->GetName() << " : " << it.second * (mole * liter) << " M " + << G4endl; + } + + G4cout << "Total deposit energy : " << fpScorer->fCumulatedDose * eToGray << " eV" << G4endl; + G4double DoseAbort; + if (fpScorer->fDosesToAbort == 0) { + DoseAbort = fpScorer->fDosesCutOff / gray + 0.5 * fpScorer->fDosesCutOff / gray; + } + else { + DoseAbort = fpScorer->fDosesToAbort / gray; + } + + G4cout << "Dose to abort : " << DoseAbort << " Gy" << G4endl; + if (DoseInGray > DoseAbort) { G4cout << "Abort this beam line (" << name << ", " << energy - << " MeV) at actual dose: " << DoseInGray << " Gy." << G4endl; + << " MeV) at actual dose: " << DoseInGray << " Gy" << G4endl; G4RunManager::GetRunManager()->AbortEvent(); } G4cout << "_____________________________________________________________________________" @@ -185,7 +247,6 @@ Gvalues::Gvalues() fAddTimeToRecordcmd(new G4UIcmdWithADoubleAndUnit("/scorer/Gvalues/addTimeToRecord", this)) { fSpeciesdir->SetGuidance("ScoreSpecies commands"); - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -214,19 +275,30 @@ void Gvalues::SetNewValue(G4UIcommand* command, G4String newValue) } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void Gvalues::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager, const std::string& out) +void Gvalues::WriteInfo(G4VAnalysisManager* analysisManager, const std::string& out) { - analysisManager->CreateNtuple(out, out); - G4cout << "NtupleID : " << fRunID << " name : " << out << G4endl; - analysisManager->CreateNtupleIColumn(fRunID, "speciesID"); - analysisManager->CreateNtupleIColumn(fRunID, "number"); - analysisManager->CreateNtupleIColumn(fRunID, "nEvent"); - analysisManager->CreateNtupleSColumn(fRunID, "speciesName"); - analysisManager->CreateNtupleDColumn(fRunID, "time"); - analysisManager->CreateNtupleDColumn(fRunID, "sumG"); - analysisManager->CreateNtupleDColumn(fRunID, "sumG2"); - analysisManager->FinishNtuple(fRunID); + G4int NtupleID = analysisManager->CreateNtuple("info", "Simulation"); + analysisManager->CreateNtupleDColumn(NtupleID, "Dose"); + analysisManager->FinishNtuple(NtupleID); + analysisManager->FillNtupleDColumn(NtupleID, 0, std::stod(out)); + analysisManager->AddNtupleRow(NtupleID); +} + +void Gvalues::WriteGvalues(G4VAnalysisManager* analysisManager) +{ + G4int NtupleID = analysisManager->CreateNtuple("Gvalue", "Gvalue"); + analysisManager->CreateNtupleIColumn(NtupleID, "speciesID"); + analysisManager->CreateNtupleIColumn(NtupleID, "number"); + analysisManager->CreateNtupleIColumn(NtupleID, "nEvent"); + analysisManager->CreateNtupleSColumn(NtupleID, "speciesName"); + analysisManager->CreateNtupleDColumn(NtupleID, "time"); + analysisManager->CreateNtupleDColumn(NtupleID, "sumG"); + analysisManager->CreateNtupleDColumn(NtupleID, "sumG2"); + analysisManager->CreateNtupleDColumn(NtupleID, "TotalDose"); + analysisManager->CreateNtupleDColumn(NtupleID, "TotalDose2"); + analysisManager->CreateNtupleDColumn(NtupleID, "TotalDoseRate"); + analysisManager->CreateNtupleDColumn(NtupleID, "TotalDoseRate2"); + analysisManager->FinishNtuple(NtupleID); for (const auto& it_map1 : fSpeciesInfoPerTime) { const InnerSpeciesMap& map2 = it_map1.second; @@ -239,19 +311,29 @@ void Gvalues::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager, cons double G = it_map2.second.fG; double G2 = it_map2.second.fG2; - analysisManager->FillNtupleIColumn(fRunID, 0, molID); // MolID - analysisManager->FillNtupleIColumn(fRunID, 1, number); // Number - analysisManager->FillNtupleIColumn(fRunID, 2, fNEvent); // Total nb events - analysisManager->FillNtupleSColumn(fRunID, 3, name); // molName - analysisManager->FillNtupleDColumn(fRunID, 4, time); // time - analysisManager->FillNtupleDColumn(fRunID, 5, G); // G - analysisManager->FillNtupleDColumn(fRunID, 6, G2); // G2 - analysisManager->AddNtupleRow(fRunID); + analysisManager->FillNtupleIColumn(NtupleID, 0, molID); // MolID + analysisManager->FillNtupleIColumn(NtupleID, 1, number); // Number + analysisManager->FillNtupleIColumn(NtupleID, 2, fNEvent); // Total nb events + analysisManager->FillNtupleSColumn(NtupleID, 3, name); // molName + analysisManager->FillNtupleDColumn(NtupleID, 4, time); // time + analysisManager->FillNtupleDColumn(NtupleID, 5, G); // G + analysisManager->FillNtupleDColumn(NtupleID, 6, G2); // G2 + analysisManager->FillNtupleDColumn(NtupleID, 7, fTotalDose); + analysisManager->FillNtupleDColumn(NtupleID, 8, fTotalDose2); + analysisManager->FillNtupleDColumn(NtupleID, 9, fTotalDoseRate); + analysisManager->FillNtupleDColumn(NtupleID, 10, fTotalDoseRate2); + analysisManager->AddNtupleRow(NtupleID); } } - fRunID++; } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +void Gvalues::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager, const std::string& out) +{ + WriteInfo(analysisManager, out); + WriteGvalues(analysisManager); + // fRunID++; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... template<> @@ -296,6 +378,15 @@ G4VChemistryWorld* Scorer::GetChemistryWorld() const template<> G4bool Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*) { + const G4Track* track = aStep->GetTrack(); + auto pulseInfo = dynamic_cast(track->GetUserInformation()); + if (pulseInfo != nullptr) { + auto delayedTime = pulseInfo->GetDelayedTime(); + if (fpScorer->fPulseMax < delayedTime) { + fpScorer->fPulseMax = delayedTime; + } + } + G4double edep = aStep->GetTotalEnergyDeposit(); if (edep == 0.) { return FALSE; @@ -322,28 +413,39 @@ void Scorer::SaveScavengerChange() } auto scavengerList = pScavengerMaterial->GetScavengerList(); auto V = fpChemistryWorld->GetChemistryBoundary()->Volume(); + auto iniC = fpChemistryWorld->GetChemicalComponent(); - for (const auto& it : scavengerList) { - if (it == G4MoleculeTable::Instance()->GetConfiguration("H2O") - || G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)") == it - || G4MoleculeTable::Instance()->GetConfiguration("OHm(B)") == it) - { - continue; - } - for (auto time_mol : fpScorer->fTimeToRecord) { - int64_t n_mol = pScavengerMaterial->GetNMoleculesAtTime(it, time_mol); - if (n_mol < 0) { - G4ExceptionDescription errMsg; - errMsg << "SaveScavengerChange()::N molecules not valid < 0 : " << it->GetName() - << " N : " << n_mol << G4endl; - G4Exception("", "N<0", FatalException, errMsg); + G4double eToGray = (0.001 * V * 6.242e+18); + if (eToGray != 0) { + G4double dose = 1000 * (fpScorer->fEdep / eV) / eToGray; // in Gy + for (const auto& it : scavengerList) { + if (it == fH2O || fH3Op == it || fOHm == it) { + continue; } + for (auto time_mol : fpScorer->fTimeToRecord) { + int64_t n_mol = pScavengerMaterial->GetNMoleculesAtTime(it, time_mol); + if (n_mol < 0) { + G4ExceptionDescription errMsg; + errMsg << "SaveScavengerChange()::N molecules not valid < 0 : " << it->GetName() + << " N : " << n_mol << G4endl; + G4Exception("", "N<0", FatalException, errMsg); + } - Gvalues::SpeciesInfo& molInfo = fpScorer->fSpeciesInfoPerTime[time_mol][it]; - molInfo.fNumber += n_mol; - G4double gValue = n_mol / (Avogadro * V * 1.0e-6 /*mm3 to L*/); - molInfo.fG += gValue; - molInfo.fG2 += gValue * gValue; + Gvalues::SpeciesInfo& molInfo = fpScorer->fSpeciesInfoPerTime[time_mol][it]; + molInfo.fNumber += n_mol; + if (V > 0) { + auto concentration = n_mol / (Avogadro * V /*mm3 to L*/); + // auto percentage = 10 * 100 * (iniC[it]-concentration) * (mole * liter) / 0.0013; //in % + // air/10 Gy + auto inuM = (iniC[it] - concentration) * (mole * liter) * 1e6; // in uM + + if (dose > 0) { + G4double gValue = inuM / dose; // in uM + molInfo.fG += gValue; + molInfo.fG2 += gValue * gValue; + } + } + } } } } @@ -360,68 +462,48 @@ void Scorer::SaveMoleculeCounter() else { auto counterMap = fpEventScheduler->GetCounterMap(); if (counterMap.empty()) { - if (!G4MoleculeCounter::Instance()->InUse()) { - G4Exception("No counter", "Scorer::SaveMoleculeCounter()", JustWarning, - "G4MoleculeCounter::Instance() is not used"); - return; - } - - G4MoleculeCounter::RecordedMolecules species; - species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); - if (species.get() == nullptr) { - return; - } - else if (species->empty()) { - G4cout << "No molecule recorded, energy deposited" << G4endl; - ++(fpScorer->fNEvent); - fpScorer->fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); - return; - } - for (auto molecule : *species) { - if (molecule == G4MoleculeTable::Instance()->GetConfiguration("O2")) { + G4Exception("No counter", "Scorer::SaveMoleculeCounter()", JustWarning, + "CounterMap is not used"); + return; + } + for (const auto& map_mol : counterMap) { + auto time_mol = map_mol.first; + for (auto it_mol : map_mol.second) { + auto molecule = it_mol.first; + if (molecule == fO2) { continue; } - for (auto time_mol : fpScorer->fTimeToRecord) { - int n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, time_mol); + int n_mol = it_mol.second; - if (n_mol < 0) { - G4ExceptionDescription errMsg; - errMsg << "N molecules not valid < 0 " << G4endl; - G4Exception("", "N<0", FatalException, errMsg); - } + if (n_mol < 0) { + G4ExceptionDescription errMsg; + errMsg << "N molecules not valid < 0 " << " molecule : " << it_mol.first->GetName() + << " N : " << n_mol << G4endl; + G4Exception("", "N<0", FatalException, errMsg); + } + if (fpScorer->fEdep > 0) { Gvalues::SpeciesInfo& molInfo = fpScorer->fSpeciesInfoPerTime[time_mol][molecule]; molInfo.fNumber += n_mol; G4double gValue = (n_mol / (fpScorer->fEdep / eV)) * 100.; + // G4double gValue = n_mol; molInfo.fG += gValue; molInfo.fG2 += gValue * gValue; } } } - else { - for (const auto& map_mol : counterMap) { - auto time_mol = map_mol.first; - for (auto it_mol : map_mol.second) { - auto molecule = it_mol.first; - if (molecule == G4MoleculeTable::Instance()->GetConfiguration("O2")) { - continue; - } - int n_mol = it_mol.second; - if (n_mol < 0) { - G4ExceptionDescription errMsg; - errMsg << "N molecules not valid < 0 " - << " molecule : " << it_mol.first->GetName() << " N : " << n_mol << G4endl; - G4Exception("", "N<0", FatalException, errMsg); - } - - Gvalues::SpeciesInfo& molInfo = fpScorer->fSpeciesInfoPerTime[time_mol][molecule]; - molInfo.fNumber += n_mol; - G4double gValue = (n_mol / (fpScorer->fEdep / eV)) * 100.; - molInfo.fG += gValue; - molInfo.fG2 += gValue * gValue; - } + auto boundingBox = fpChemistryWorld->GetChemistryBoundary(); + G4double V = boundingBox->Volume() / cm3; + G4double eToGray = (0.001 * V * 6.242e+18); + if (eToGray != 0) { + G4double dose = (fpScorer->fEdep / eV) / eToGray; // in Gy + if (fpScorer->fPulseMax != 0) { + G4double doseRate = dose / (fpScorer->fPulseMax / second); + fpScorer->fTotalDose += dose; + fpScorer->fTotalDose2 += dose * dose; + fpScorer->fTotalDoseRate += doseRate; + fpScorer->fTotalDoseRate2 += doseRate * doseRate; } } } @@ -434,7 +516,7 @@ void Scorer::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fpScorer->fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); + fpEventScheduler->ResetCounter(); return; } @@ -444,8 +526,7 @@ void Scorer::EndOfEvent(G4HCofThisEvent*) ++(fpScorer->fNEvent); fpScorer->fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); - G4MoleculeCounter::Instance()->Use(true); + fpEventScheduler->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -476,6 +557,19 @@ void Scorer::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerSc molInfo.fG2 += it_map2->second.fG2; } } + + // dose + fpScorer->fTotalDose += right->fpScorer->fTotalDose; + fpScorer->fTotalDose2 += right->fpScorer->fTotalDose2; + right->fpScorer->fTotalDose = 0; + right->fpScorer->fTotalDose2 = 0.; + + // dose rate + fpScorer->fTotalDoseRate += right->fpScorer->fTotalDoseRate; + fpScorer->fTotalDoseRate2 += right->fpScorer->fTotalDoseRate2; + right->fpScorer->fTotalDoseRate = 0; + right->fpScorer->fTotalDoseRate2 = 0.; + right->fpScorer->fSpeciesInfoPerTime.clear(); fpScorer->fNEvent += right->fpScorer->fNEvent; right->fpScorer->fNEvent = 0; diff --git a/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc b/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc index ac4baa9ea5..19896a9fab 100644 --- a/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc +++ b/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc @@ -26,7 +26,7 @@ // #include "TimeStepAction.hh" -#include "PulseAction.hh" +#include "InterPulseAction.hh" #include "G4DNAEventScheduler.hh" #include "G4DNAGillespieDirectMethod.hh" @@ -46,11 +46,17 @@ TimeStepAction::TimeStepAction(const G4VChemistryWorld* pChemWorld, PulseAction* { fpEventScheduler = std::make_unique(); fScheduler = G4Scheduler::Instance(); + if (dynamic_cast(fpPulse) != nullptr) { + fPulsePeriod = dynamic_cast(fpPulse)->GetPulsePeriod(); + fNumberOfPulse = dynamic_cast(fpPulse)->GetNumberOfPulse(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void TimeStepAction::UserPreTimeStepAction() {} +void TimeStepAction::UserPreTimeStepAction() +{ + fpEventScheduler->ParticleBasedCounter(); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -58,9 +64,11 @@ void TimeStepAction::UserPostTimeStepAction() { G4double T1 = 5 * CLHEP::ns; if (fpPulse != nullptr && fpPulse->IsActivedPulse()) { - G4MoleculeCounter::Instance()->Use(false); - // we don't count molecules during the pulse - T1 = fpPulse->GetLonggestDelayedTime() + 5 * CLHEP::ns; + T1 = fpPulse->GetPulseLarger() + 5 * CLHEP::ns; + if (fNumberOfPulse != 0) { + fPulseID = (floor)(fScheduler->GetGlobalTime() / fPulsePeriod); + T1 = fPulseID * fPulsePeriod + fpPulse->GetPulseLarger() + 5 * CLHEP::ns; + } } // T1: time to start mesoscopic model if (fScheduler->GetGlobalTime() >= T1) { @@ -76,20 +84,19 @@ void TimeStepAction::UserReactionAction(const G4Track& /*a*/, const G4Track& /*b //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TimeStepAction::EndProcessing() {} +void TimeStepAction::EndProcessing() +{ + fpEventScheduler->Reset(); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void TimeStepAction::CompartmentBased() { - SetInitialPixel(); - fpEventScheduler->SetVerbose(fScheduler->GetVerbose()); fpEventScheduler->SetStartTime(fScheduler->GetGlobalTime()); // continue from globalTime - fpEventScheduler->SetEndTime(fScheduler->GetEndTime() - 1 * ps); fpEventScheduler->SetChangeMesh(true); fpEventScheduler->Initialize(*fpChemWorld->GetChemistryBoundary(), fPixel); fpEventScheduler->Run(); - fScheduler->Stop(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -105,19 +112,29 @@ void TimeStepAction::SetInitialPixel() { auto pBoundingBox = fpChemWorld->GetChemistryBoundary(); G4double Box = pBoundingBox->halfSideLengthInX(); - if (Box == 1.6 * um) { + if (Box == 4 * 1.6 * um) { + fPixel = 4 * 512; // for CONV + } + else if (Box == 2 * 1.6 * um) { + fPixel = 2 * 512; // for CONV + } + else if (Box == 1.6 * um) { fPixel = 512; // for CONV } else if (Box == 0.8 * um) { fPixel = 256; // for FLASH } + else if (Box == 0.4 * um) { + fPixel = 256 / 2; // for FLASH + } + else if (Box == 0.2 * um) { + fPixel = 256 / 4; // for FLASH + } else { G4cout << "Box : " << *pBoundingBox << " Pixel : " << fPixel << G4endl; G4Exception("This chem volume is not optimized and the result may be incorrect.", "TimeStepAction::TimeStepAction", FatalException, ""); } - // 512 : for conventional dose rate - // 256 : for higher dose rate } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -129,6 +146,9 @@ void TimeStepAction::StartProcessing() G4cout << "This event is fully aborted" << G4endl; fScheduler->Stop(); } + fpEventScheduler->SetVerbose(G4Scheduler::Instance()->GetVerbose()); + SetInitialPixel(); + fPulseID = 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem1/chem1.out b/examples/extended/medical/dna/chem1/chem1.out index 3c27855e04..58b7c4d3d0 100644 --- a/examples/extended/medical/dna/chem1/chem1.out +++ b/examples/extended/medical/dna/chem1/chem1.out @@ -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 @@ -53,7 +53,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 ======== @@ -259,7 +259,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 ====== @@ -275,7 +277,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 @@ -303,19 +305,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -337,23 +341,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -376,19 +384,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -398,19 +408,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== @@ -810,12 +822,12 @@ ___________________________________ Run terminated. Run Summary Number of events processed : 1 - User=44.590000s Real=44.804535s Sys=0.000000s + User=46.530000s Real=46.543692s Sys=0.010000s G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x236c160 -UserPhysicsList deleted 0x236c518 -UserActionInitialization deleted 0x23e0590 +UserDetectorConstruction deleted 0x2201810 +UserPhysicsList deleted 0x2201bc8 +UserActionInitialization deleted 0x2276640 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -825,10 +837,10 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 1504 +Total navigation history collections cleaned: 1638 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 1.09 MB +Pool ID '20G4NavigationLevelRep', size : 1.32 MB Pool ID '19G4ElectronOccupancy', size : 0.000961 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB Pool ID '7G4Event', size : 0.000961 MB @@ -844,7 +856,7 @@ Pool ID '8G4KDNodeI4G4ITE', size : 0.0519 MB Pool ID '14G4KDTreeResult', size : 0.000961 MB Pool ID '8G4KDNodeI10G4MoleculeE', size : 0.000961 MB Number of memory pools allocated: 15 of which, static: 0 -Dynamic pools deleted: 15 / Total memory freed: 1.8 MB +Dynamic pools deleted: 15 / Total memory freed: 2.1 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/medical/dna/chem2/chem2.out b/examples/extended/medical/dna/chem2/chem2.out index 2138da4227..0f9e10e1b0 100644 --- a/examples/extended/medical/dna/chem2/chem2.out +++ b/examples/extended/medical/dna/chem2/chem2.out @@ -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 @@ -48,7 +48,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 ======== @@ -254,7 +254,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 ====== @@ -270,7 +272,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 @@ -298,19 +300,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -332,23 +336,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -371,19 +379,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -393,19 +403,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== @@ -508,4142 +520,4222 @@ H^0 + H^0 -> H_2^0 1.2e+10 0.2265 ------------------------------------------------------------------------------------------------------------------------------ DNAMolecularStepByStepModel will be used *** G4Scheduler starts processing -At time : 1 ps Reaction : °OH^0 (-11376) + °OH^0 (-10182) -> H2O2^0 (-11395) -At time : 1 ps Reaction : °OH^0 (-11374) + °OH^0 (-9326) -> H2O2^0 (-11396) -At time : 1 ps Reaction : °OH^0 (-11349) + °OH^0 (-10024) -> H2O2^0 (-11397) -At time : 1 ps Reaction : °OH^0 (-11312) + °OH^0 (-9454) -> H2O2^0 (-11398) -At time : 1 ps Reaction : H^0 (-10244) + H^0 (-11265) -> H_2^0 (-11399) -At time : 1 ps Reaction : °OH^0 (-9433) + °OH^0 (-11239) -> H2O2^0 (-11400) -At time : 1 ps Reaction : °OH^0 (-9895) + °OH^0 (-11233) -> H2O2^0 (-11401) -At time : 1 ps Reaction : °OH^0 (-10812) + °OH^0 (-11229) -> H2O2^0 (-11402) -At time : 1 ps Reaction : °OH^0 (-11227) + °OH^0 (-9858) -> H2O2^0 (-11403) -At time : 1 ps Reaction : °OH^0 (-9813) + °OH^0 (-11217) -> H2O2^0 (-11404) -At time : 1 ps Reaction : °OH^0 (-9129) + °OH^0 (-11175) -> H2O2^0 (-11405) -At time : 1 ps Reaction : °OH^0 (-11153) + °OH^0 (-10272) -> H2O2^0 (-11406) -At time : 1 ps Reaction : °OH^0 (-10237) + °OH^0 (-11108) -> H2O2^0 (-11407) -At time : 1 ps Reaction : H3O^1 (-11097) + OH^-1 (-5726) -> No product -At time : 1 ps Reaction : °OH^0 (-11095) + °OH^0 (-8911) -> H2O2^0 (-11408) -At time : 1 ps Reaction : H3O^1 (-11050) + OH^-1 (-5729) -> No product -At time : 1 ps Reaction : °OH^0 (-10055) + °OH^0 (-10960) -> H2O2^0 (-11409) -At time : 1 ps Reaction : °OH^0 (-9117) + °OH^0 (-10895) -> H2O2^0 (-11410) -At time : 1 ps Reaction : °OH^0 (-10893) + °OH^0 (-9115) -> H2O2^0 (-11411) -At time : 1 ps Reaction : °OH^0 (-9945) + °OH^0 (-10876) -> H2O2^0 (-11412) -At time : 1 ps Reaction : °OH^0 (-10789) + °OH^0 (-10791) -> H2O2^0 (-11413) -At time : 1 ps Reaction : °OH^0 (-9803) + °OH^0 (-10779) -> H2O2^0 (-11414) -At time : 1 ps Reaction : °OH^0 (-10722) + °OH^0 (-10724) -> H2O2^0 (-11415) -At time : 1 ps Reaction : °OH^0 (-10676) + °OH^0 (-8744) -> H2O2^0 (-11416) -At time : 1 ps Reaction : °OH^0 (-10656) + °OH^0 (-9527) -> H2O2^0 (-11417) -At time : 1 ps Reaction : H3O^1 (-10549) + OH^-1 (-5789) -> No product -At time : 1 ps Reaction : °OH^0 (-10508) + °OH^0 (-9984) -> H2O2^0 (-11418) -At time : 1 ps Reaction : °OH^0 (-10447) + °OH^0 (-9305) -> H2O2^0 (-11419) -At time : 1 ps Reaction : °OH^0 (-10418) + °OH^0 (-10172) -> H2O2^0 (-11420) -At time : 1 ps Reaction : °OH^0 (-10282) + °OH^0 (-9087) -> H2O2^0 (-11421) -At time : 1 ps Reaction : °OH^0 (-10281) + °OH^0 (-6104) -> H2O2^0 (-11422) -At time : 1 ps Reaction : °OH^0 (-10194) + °OH^0 (-10196) -> H2O2^0 (-11423) -At time : 1 ps Reaction : °OH^0 (-10135) + °OH^0 (-10137) -> H2O2^0 (-11424) -At time : 1 ps Reaction : °OH^0 (-10120) + °OH^0 (-9411) -> H2O2^0 (-11425) -At time : 1 ps Reaction : °OH^0 (-9277) + °OH^0 (-10022) -> H2O2^0 (-11426) -At time : 1 ps Reaction : °OH^0 (-9953) + °OH^0 (-9263) -> H2O2^0 (-11427) -At time : 1 ps Reaction : °OH^0 (-9925) + °OH^0 (-6852) -> H2O2^0 (-11428) -At time : 1 ps Reaction : °OH^0 (-9899) + °OH^0 (-9897) -> H2O2^0 (-11429) -At time : 1 ps Reaction : °OH^0 (-9848) + °OH^0 (-7882) -> H2O2^0 (-11430) -At time : 1 ps Reaction : °OH^0 (-9111) + °OH^0 (-9844) -> H2O2^0 (-11431) -At time : 1 ps Reaction : °OH^0 (-9791) + °OH^0 (-9011) -> H2O2^0 (-11432) -At time : 1 ps Reaction : H3O^1 (-9729) + OH^-1 (-5771) -> No product -At time : 1 ps Reaction : °OH^0 (-9716) + °OH^0 (-9007) -> H2O2^0 (-11433) -At time : 1 ps Reaction : °OH^0 (-9617) + °OH^0 (-9613) -> H2O2^0 (-11434) -At time : 1 ps Reaction : H3O^1 (-9564) + OH^-1 (-5780) -> No product -At time : 1 ps Reaction : °OH^0 (-9472) + °OH^0 (-9470) -> H2O2^0 (-11435) -At time : 1 ps Reaction : °OH^0 (-9358) + °OH^0 (-6100) -> H2O2^0 (-11436) -At time : 1 ps Reaction : H^0 (-9346) + °OH^0 (-8226) -> No product -At time : 1 ps Reaction : °OH^0 (-9121) + °OH^0 (-9321) -> H2O2^0 (-11437) -At time : 1 ps Reaction : H^0 (-9219) + °OH^0 (-5930) -> No product -At time : 1 ps Reaction : °OH^0 (-9147) + °OH^0 (-9149) -> H2O2^0 (-11438) -At time : 1 ps Reaction : °OH^0 (-7520) + e_aq^-1 (-8851) -> OH^-1 (-11439) -At time : 1 ps Reaction : °OH^0 (-8579) + e_aq^-1 (-8581) -> OH^-1 (-11440) -At time : 1 ps Reaction : °OH^0 (-5840) + e_aq^-1 (-8521) -> OH^-1 (-11441) -At time : 1 ps Reaction : e_aq^-1 (-4676) + °OH^0 (-8006) -> OH^-1 (-11442) -At time : 1 ps Reaction : e_aq^-1 (-3263) + °OH^0 (-7692) -> OH^-1 (-11443) -At time : 1 ps Reaction : e_aq^-1 (-4305) + °OH^0 (-7596) -> OH^-1 (-11444) -At time : 1 ps Reaction : OH^-1 (-5720) + H3O^1 (-7343) -> No product -At time : 1 ps Reaction : OH^-1 (-5801) + H3O^1 (-7035) -> No product -At time : 1 ps Reaction : OH^-1 (-5750) + H3O^1 (-6911) -> No product -At time : 1 ps Reaction : OH^-1 (-5792) + H3O^1 (-6845) -> No product -At time : 1 ps Reaction : OH^-1 (-5783) + H3O^1 (-6363) -> No product -At time : 1 ps Reaction : e_aq^-1 (-4368) + °OH^0 (-6192) -> OH^-1 (-11445) -At time : 1 ps Reaction : OH^-1 (-5768) + H3O^1 (-5831) -> No product -At time : 1 ps Reaction : OH^-1 (-11445) + H3O^1 (-6191) -> No product -At time : 1 ps Reaction : OH^-1 (-11444) + H3O^1 (-7595) -> No product -At time : 1 ps Reaction : OH^-1 (-11443) + H3O^1 (-7691) -> No product -At time : 1 ps Reaction : OH^-1 (-11442) + H3O^1 (-7021) -> No product -At time : 1 ps Reaction : OH^-1 (-11441) + H3O^1 (-5839) -> No product -At time : 1 ps Reaction : OH^-1 (-11440) + H3O^1 (-6977) -> No product -At time : 1 ps Reaction : OH^-1 (-11439) + H3O^1 (-7519) -> No product -At time : 1.1 ps Reaction : °OH^0 (-11351) + °OH^0 (-11353) -> H2O2^0 (-11446) -At time : 1.1 ps Reaction : °OH^0 (-11310) + °OH^0 (-9143) -> H2O2^0 (-11447) -At time : 1.1 ps Reaction : °OH^0 (-11191) + °OH^0 (-11260) -> H2O2^0 (-11448) -At time : 1.1 ps Reaction : °OH^0 (-10503) + °OH^0 (-9996) -> H2O2^0 (-11449) -At time : 1.1 ps Reaction : H^0 (-10483) + °OH^0 (-8008) -> No product -At time : 1.1 ps Reaction : °OH^0 (-10395) + H^0 (-10402) -> No product -At time : 1.1 ps Reaction : °OH^0 (-10226) + °OH^0 (-9339) -> H2O2^0 (-11450) -At time : 1.1 ps Reaction : °OH^0 (-10165) + °OH^0 (-8885) -> H2O2^0 (-11451) -At time : 1.1 ps Reaction : °OH^0 (-10070) + °OH^0 (-10072) -> H2O2^0 (-11452) -At time : 1.1 ps Reaction : °OH^0 (-9986) + °OH^0 (-9991) -> H2O2^0 (-11453) -At time : 1.1 ps Reaction : °OH^0 (-9887) + °OH^0 (-9023) -> H2O2^0 (-11454) -At time : 1.1 ps Reaction : °OH^0 (-9727) + °OH^0 (-9728) -> H2O2^0 (-11455) -At time : 1.1 ps Reaction : H^0 (-9661) + °OH^0 (-7778) -> No product -At time : 1.1 ps Reaction : H^0 (-9226) + °OH^0 (-8977) -> No product -At time : 1.1 ps Reaction : °OH^0 (-9196) + °OH^0 (-5904) -> H2O2^0 (-11456) -At time : 1.1 ps Reaction : e_aq^-1 (-5420) + °OH^0 (-8639) -> OH^-1 (-11457) -At time : 1.1 ps Reaction : °OH^0 (-7358) + °OH^0 (-8320) -> H2O2^0 (-11458) -At time : 1.1 ps Reaction : OH^-1 (-11457) + H3O^1 (-8640) -> No product -At time : 1.1 ps Reaction : °OH^0 (-10833) + e_aq^-1 (-1849) -> OH^-1 (-11459) -At time : 1.2 ps Reaction : °OH^0 (-10206) + °OH^0 (-11258) -> H2O2^0 (-11460) -At time : 1.2 ps Reaction : °OH^0 (-10843) + °OH^0 (-10841) -> H2O2^0 (-11461) -At time : 1.2 ps Reaction : °OH^0 (-10042) + °OH^0 (-9286) -> H2O2^0 (-11462) -At time : 1.3 ps Reaction : °OH^0 (-10763) + °OH^0 (-9009) -> H2O2^0 (-11463) -At time : 1.3 ps Reaction : e_aq^-1 (-4627) + °OH^0 (-7002) -> OH^-1 (-11464) -At time : 1.3 ps Reaction : OH^-1 (-11464) + H3O^1 (-7001) -> No product -At time : 1.4 ps Reaction : °OH^0 (-9852) + °OH^0 (-11225) -> H2O2^0 (-11465) -At time : 1.4 ps Reaction : °OH^0 (-9838) + °OH^0 (-11221) -> H2O2^0 (-11466) -At time : 1.4 ps Reaction : °OH^0 (-9161) + °OH^0 (-11197) -> H2O2^0 (-11467) -At time : 1.5 ps Reaction : °OH^0 (-11393) + °OH^0 (-9370) -> H2O2^0 (-11468) -At time : 1.5 ps Reaction : °OH^0 (-11300) + °OH^0 (-11301) -> H2O2^0 (-11469) -At time : 1.5 ps Reaction : °OH^0 (-10998) + °OH^0 (-6038) -> H2O2^0 (-11470) -At time : 1.5 ps Reaction : °OH^0 (-10293) + °OH^0 (-8935) -> H2O2^0 (-11471) -At time : 1.5 ps Reaction : °OH^0 (-10059) + °OH^0 (-5842) -> H2O2^0 (-11472) -At time : 1.5 ps Reaction : e_aq^-1 (-4465) + °OH^0 (-7946) -> OH^-1 (-11473) -At time : 1.5 ps Reaction : OH^-1 (-11473) + H3O^1 (-6927) -> No product -At time : 1.6 ps Reaction : °OH^0 (-9291) + °OH^0 (-11245) -> H2O2^0 (-11474) -At time : 1.6 ps Reaction : °OH^0 (-10984) + °OH^0 (-8028) -> H2O2^0 (-11475) -At time : 1.6 ps Reaction : °OH^0 (-5866) + H^0 (-9052) -> No product -At time : 1.6 ps Reaction : °OH^0 (-7094) + e_aq^-1 (-8590) -> OH^-1 (-11476) -At time : 1.6 ps Reaction : e_aq^-1 (-1586) + °OH^0 (-7940) -> OH^-1 (-11477) -At time : 1.6 ps Reaction : OH^-1 (-11477) + H3O^1 (-7939) -> No product -At time : 1.6 ps Reaction : H3O^1 (-7093) + OH^-1 (-11476) -> No product -At time : 1.7 ps Reaction : °OH^0 (-10266) + H^0 (-11288) -> No product -At time : 1.7 ps Reaction : °OH^0 (-9372) + °OH^0 (-10315) -> H2O2^0 (-11478) -At time : 1.7 ps Reaction : °OH^0 (-9970) + °OH^0 (-9269) -> H2O2^0 (-11479) -At time : 1.7 ps Reaction : H^0 (-9420) + °OH^0 (-8441) -> No product -At time : 1.7 ps Reaction : °OH^0 (-9109) + °OH^0 (-9013) -> H2O2^0 (-11480) -At time : 1.8 ps Reaction : °OH^0 (-9216) + °OH^0 (-9655) -> H2O2^0 (-11481) -At time : 1.8 ps Reaction : °OH^0 (-9236) + °OH^0 (-7640) -> H2O2^0 (-11482) -At time : 1.8 ps Reaction : °OH^0 (-7282) + °OH^0 (-7428) -> H2O2^0 (-11483) -At time : 1.8 ps Reaction : °OH^0 (-6750) + °OH^0 (-6754) -> H2O2^0 (-11484) -At time : 1.8 ps Reaction : °OH^0 (-9452) + °OH^0 (-9449) -> H2O2^0 (-11485) -At time : 1.9 ps Reaction : °OH^0 (-10747) + °OH^0 (-9741) -> H2O2^0 (-11486) -At time : 1.9 ps Reaction : °OH^0 (-10079) + °OH^0 (-7530) -> H2O2^0 (-11487) -At time : 1.9 ps Reaction : °OH^0 (-9423) + °OH^0 (-6170) -> H2O2^0 (-11488) -At time : 1.9 ps Reaction : °OH^0 (-7110) + °OH^0 (-9065) -> H2O2^0 (-11489) -At time : 2 ps Reaction : °OH^0 (-10441) + °OH^0 (-7114) -> H2O2^0 (-11490) -At time : 2 ps Reaction : °OH^0 (-9281) + °OH^0 (-9284) -> H2O2^0 (-11491) -At time : 2 ps Reaction : °OH^0 (-6674) + °OH^0 (-8528) -> H2O2^0 (-11492) -At time : 2 ps Reaction : °OH^0 (-7236) + °OH^0 (-7238) -> H2O2^0 (-11493) -At time : 2.1 ps Reaction : °OH^0 (-10671) + °OH^0 (-9556) -> H2O2^0 (-11494) -At time : 2.1 ps Reaction : °OH^0 (-9698) + °OH^0 (-9696) -> H2O2^0 (-11495) -At time : 2.2 ps Reaction : °OH^0 (-11323) + °OH^0 (-9774) -> H2O2^0 (-11496) -At time : 2.2 ps Reaction : °OH^0 (-9675) + °OH^0 (-9673) -> H2O2^0 (-11497) -At time : 2.2 ps Reaction : OH^-1 (-5762) + H3O^1 (-7867) -> No product -At time : 2.2 ps Reaction : °OH^0 (-6004) + °OH^0 (-6006) -> H2O2^0 (-11498) -At time : 2.3 ps Reaction : °OH^0 (-10004) + °OH^0 (-10006) -> H2O2^0 (-11499) -At time : 2.3 ps Reaction : °OH^0 (-8465) + °OH^0 (-8468) -> H2O2^0 (-11500) -At time : 2.4 ps Reaction : °OH^0 (-9846) + °OH^0 (-9017) -> H2O2^0 (-11501) -At time : 2.4 ps Reaction : °OH^0 (-9786) + °OH^0 (-9244) -> H2O2^0 (-11502) -At time : 2.6 ps Reaction : °OH^0 (-10948) + °OH^0 (-7550) -> H2O2^0 (-11503) -At time : 2.6 ps Reaction : °OH^0 (-10857) + H^0 (-10858) -> No product -At time : 2.6 ps Reaction : H^0 (-9166) + °OH^0 (-9488) -> No product -At time : 2.7 ps Reaction : H^0 (-10968) + °OH^0 (-8339) -> No product -At time : 2.7 ps Reaction : °OH^0 (-10891) + °OH^0 (-7584) -> H2O2^0 (-11504) -At time : 2.7 ps Reaction : °OH^0 (-9524) + °OH^0 (-8993) -> H2O2^0 (-11505) -At time : 2.7 ps Reaction : °OH^0 (-7080) + °OH^0 (-8050) -> H2O2^0 (-11506) -At time : 2.9 ps Reaction : °OH^0 (-10236) + H^0 (-10238) -> No product -At time : 3 ps Reaction : °OH^0 (-11281) + °OH^0 (-11282) -> H2O2^0 (-11507) -At time : 3 ps Reaction : °OH^0 (-9582) + °OH^0 (-6414) -> H2O2^0 (-11508) -At time : 3 ps Reaction : °OH^0 (-5844) + °OH^0 (-8846) -> H2O2^0 (-11509) -At time : 3.2 ps Reaction : °OH^0 (-9202) + °OH^0 (-9206) -> H2O2^0 (-11510) -At time : 3.2 ps Reaction : e_aq^-1 (-4825) + °OH^0 (-6162) -> OH^-1 (-11511) -At time : 3.2 ps Reaction : OH^-1 (-11511) + H3O^1 (-6161) -> No product -At time : 3.3 ps Reaction : °OH^0 (-11028) + °OH^0 (-9314) -> H2O2^0 (-11512) -At time : 3.3 ps Reaction : e_aq^-1 (-4320) + °OH^0 (-6860) -> OH^-1 (-11513) -At time : 3.3 ps Reaction : OH^-1 (-11513) + H3O^1 (-6859) -> No product -At time : 3.3 ps Reaction : °OH^0 (-8829) + °OH^0 (-8830) -> H2O2^0 (-11514) -At time : 3.4 ps Reaction : °OH^0 (-10620) + °OH^0 (-10621) -> H2O2^0 (-11515) -At time : 3.5 ps Reaction : °OH^0 (-11297) + °OH^0 (-10473) -> H2O2^0 (-11516) -At time : 3.5 ps Reaction : °OH^0 (-10807) + H^0 (-9018) -> No product -At time : 3.5 ps Reaction : °OH^0 (-10703) + °OH^0 (-6478) -> H2O2^0 (-11517) -At time : 3.5 ps Reaction : °OH^0 (-8248) + e_aq^-1 (-8464) -> OH^-1 (-11518) -At time : 3.5 ps Reaction : e_aq^-1 (-1450) + °OH^0 (-8378) -> OH^-1 (-11519) -At time : 3.5 ps Reaction : OH^-1 (-11519) + H3O^1 (-8379) -> No product -At time : 3.5 ps Reaction : H3O^1 (-8247) + OH^-1 (-11518) -> No product -At time : 3.6 ps Reaction : e_aq^-1 (-762) + H^0 (-10160) -> OH^-1 (-11520) + H_2^0 (-11521) -At time : 3.6 ps Reaction : e_aq^-1 (-4204) + H3O^1 (-6817) -> H^0 (-11522) -At time : 3.7 ps Reaction : °OH^0 (-9681) + °OH^0 (-5938) -> H2O2^0 (-11523) -At time : 3.9 ps Reaction : °OH^0 (-11039) + °OH^0 (-8122) -> H2O2^0 (-11524) -At time : 3.9 ps Reaction : °OH^0 (-6916) + °OH^0 (-8819) -> H2O2^0 (-11525) -At time : 4.1 ps Reaction : °OH^0 (-8080) + °OH^0 (-8865) -> H2O2^0 (-11526) -At time : 4.2 ps Reaction : H^0 (-11350) + °OH^0 (-6962) -> No product -At time : 4.2 ps Reaction : H^0 (-10854) + H^0 (-10846) -> H_2^0 (-11527) -At time : 4.2 ps Reaction : °OH^0 (-9856) + °OH^0 (-9854) -> H2O2^0 (-11528) -At time : 4.2 ps Reaction : °OH^0 (-7296) + °OH^0 (-8258) -> H2O2^0 (-11529) -At time : 4.2 ps Reaction : °OH^0 (-5942) + °OH^0 (-6598) -> H2O2^0 (-11530) -At time : 4.3 ps Reaction : °OH^0 (-9982) + °OH^0 (-8375) -> H2O2^0 (-11531) -At time : 4.3 ps Reaction : °OH^0 (-6976) + °OH^0 (-7556) -> H2O2^0 (-11532) -At time : 4.4 ps Reaction : H3O^1 (-7981) + e_aq^-1 (-8839) -> H^0 (-11533) -At time : 4.5 ps Reaction : H3O^1 (-7165) + OH^-1 (-11520) -> No product -At time : 4.6 ps Reaction : °OH^0 (-10053) + °OH^0 (-10054) -> H2O2^0 (-11534) -At time : 4.7 ps Reaction : °OH^0 (-7370) + e_aq^-1 (-8419) -> OH^-1 (-11535) -At time : 4.7 ps Reaction : OH^-1 (-11535) + H3O^1 (-8418) -> No product -At time : 4.8 ps Reaction : °OH^0 (-9529) + °OH^0 (-6304) -> H2O2^0 (-11536) -At time : 4.9 ps Reaction : H^0 (-10019) + °OH^0 (-7568) -> No product -At time : 5 ps Reaction : °OH^0 (-11391) + °OH^0 (-10277) -> H2O2^0 (-11537) -At time : 5 ps Reaction : °OH^0 (-11264) + °OH^0 (-9079) -> H2O2^0 (-11538) -At time : 5 ps Reaction : H^0 (-9934) + e_aq^-1 (-8572) -> OH^-1 (-11539) + H_2^0 (-11540) -At time : 5.1 ps Reaction : °OH^0 (-11092) + °OH^0 (-11093) -> H2O2^0 (-11541) -At time : 5.1 ps Reaction : °OH^0 (-10706) + H^0 (-8998) -> No product -At time : 5.2 ps Reaction : °OH^0 (-11082) + °OH^0 (-7230) -> H2O2^0 (-11542) -At time : 5.4 ps Reaction : °OH^0 (-11223) + °OH^0 (-8796) -> H2O2^0 (-11543) -At time : 5.4 ps Reaction : °OH^0 (-7088) + °OH^0 (-7090) -> H2O2^0 (-11544) -At time : 5.5 ps Reaction : °OH^0 (-10292) + °OH^0 (-9380) -> H2O2^0 (-11545) -At time : 5.8 ps Reaction : H^0 (-9246) + °OH^0 (-10766) -> No product -At time : 5.8 ps Reaction : H3O^1 (-9929) + OH^-1 (-5795) -> No product -At time : 5.8 ps Reaction : °OH^0 (-5802) + °OH^0 (-7036) -> H2O2^0 (-11546) -At time : 5.8 ps Reaction : OH^-1 (-5747) + H3O^1 (-6949) -> No product -At time : 5.9 ps Reaction : °OH^0 (-9099) + °OH^0 (-9492) -> H2O2^0 (-11547) -At time : 6 ps Reaction : e_aq^-1 (-3714) + e_aq^-1 (-8545) -> OH^-1 (-11548) + OH^-1 (-11549) + H_2^0 (-11550) -At time : 6.2 ps Reaction : H^0 (-10539) + °OH^0 (-7916) -> No product -At time : 6.2 ps Reaction : °OH^0 (-10020) + °OH^0 (-6014) -> H2O2^0 (-11551) -At time : 6.2 ps Reaction : °OH^0 (-9818) + °OH^0 (-6738) -> H2O2^0 (-11552) -At time : 6.2 ps Reaction : OH^-1 (-5753) + H3O^1 (-6839) -> No product -At time : 6.4 ps Reaction : °OH^0 (-11107) + °OH^0 (-7442) -> H2O2^0 (-11553) -At time : 6.4 ps Reaction : °OH^0 (-11025) + °OH^0 (-7136) -> H2O2^0 (-11554) -At time : 6.5 ps Reaction : °OH^0 (-10949) + °OH^0 (-10498) -> H2O2^0 (-11555) -At time : 6.6 ps Reaction : °OH^0 (-11031) + °OH^0 (-8597) -> H2O2^0 (-11556) -At time : 6.6 ps Reaction : °OH^0 (-9312) + °OH^0 (-8098) -> H2O2^0 (-11557) -At time : 6.6 ps Reaction : e_aq^-1 (-5528) + e_aq^-1 (-8929) -> OH^-1 (-11558) + OH^-1 (-11559) + H_2^0 (-11560) -At time : 6.7 ps Reaction : °OH^0 (-10850) + e_aq^-1 (-8569) -> OH^-1 (-11561) -At time : 6.7 ps Reaction : e_aq^-1 (-3491) + °OH^0 (-6230) -> OH^-1 (-11562) -At time : 6.7 ps Reaction : OH^-1 (-11562) + H3O^1 (-6229) -> No product -At time : 6.7 ps Reaction : H3O^1 (-10849) + OH^-1 (-11561) -> No product -At time : 6.8 ps Reaction : °OH^0 (-9238) + °OH^0 (-9766) -> H2O2^0 (-11563) -At time : 6.8 ps Reaction : °OH^0 (-8645) + °OH^0 (-8900) -> H2O2^0 (-11564) -At time : 7 ps Reaction : OH^-1 (-11539) + H3O^1 (-6863) -> No product -At time : 7.3 ps Reaction : °OH^0 (-10987) + °OH^0 (-10092) -> H2O2^0 (-11565) -At time : 7.3 ps Reaction : H^0 (-9505) + °OH^0 (-8989) -> No product -At time : 7.4 ps Reaction : °OH^0 (-10215) + °OH^0 (-7234) -> H2O2^0 (-11566) -At time : 7.5 ps Reaction : H^0 (-10056) + °OH^0 (-10959) -> No product -At time : 7.5 ps Reaction : H^0 (-9199) + °OH^0 (-9198) -> No product -At time : 7.5 ps Reaction : H3O^1 (-6919) + e_aq^-1 (-8827) -> H^0 (-11567) -At time : 7.6 ps Reaction : °OH^0 (-10507) + °OH^0 (-7572) -> H2O2^0 (-11568) -At time : 7.6 ps Reaction : °OH^0 (-10468) + H^0 (-9422) -> No product -At time : 7.6 ps Reaction : °OH^0 (-9514) + °OH^0 (-9516) -> H2O2^0 (-11569) -At time : 7.7 ps Reaction : e_aq^-1 (-5638) + °OH^0 (-8471) -> OH^-1 (-11570) -At time : 7.7 ps Reaction : OH^-1 (-11570) + H3O^1 (-8472) -> No product -At time : 8 ps Reaction : °OH^0 (-10285) + °OH^0 (-11268) -> H2O2^0 (-11571) -At time : 8.1 ps Reaction : °OH^0 (-9758) + °OH^0 (-10577) -> H2O2^0 (-11572) -At time : 8.1 ps Reaction : °OH^0 (-6422) + °OH^0 (-7752) -> H2O2^0 (-11573) -At time : 8.3 ps Reaction : H^0 (-11192) + °OH^0 (-9335) -> No product -At time : 8.3 ps Reaction : H^0 (-9114) + °OH^0 (-10533) -> No product -At time : 8.4 ps Reaction : °OH^0 (-10814) + H^0 (-9874) -> No product -At time : 8.5 ps Reaction : °OH^0 (-9625) + °OH^0 (-8997) -> H2O2^0 (-11574) -At time : 8.5 ps Reaction : H^0 (-9098) + °OH^0 (-8534) -> No product -At time : 8.8 ps Reaction : OH^-1 (-11549) + H3O^1 (-6461) -> No product -At time : 8.9 ps Reaction : °OH^0 (-10344) + °OH^0 (-10276) -> H2O2^0 (-11575) -At time : 9.2 ps Reaction : °OH^0 (-7134) + °OH^0 (-11251) -> H2O2^0 (-11576) -At time : 9.3 ps Reaction : °OH^0 (-7758) + e_aq^-1 (-8755) -> OH^-1 (-11577) -At time : 9.3 ps Reaction : H3O^1 (-7757) + OH^-1 (-11577) -> No product -At time : 9.4 ps Reaction : °OH^0 (-7206) + °OH^0 (-7212) -> H2O2^0 (-11578) -At time : 9.5 ps Reaction : °OH^0 (-8627) + H^0 (-8944) -> No product -At time : 9.6 ps Reaction : °OH^0 (-10401) + H^0 (-10213) -> No product -At time : 9.7 ps Reaction : H^0 (-11307) + H^0 (-9711) -> H_2^0 (-11579) -At time : 9.8 ps Reaction : H3O^1 (-10808) + OH^-1 (-5759) -> No product -At time : 9.8 ps Reaction : °OH^0 (-9345) + H^0 (-9344) -> No product -At time : 9.9 ps Reaction : °OH^0 (-6524) + °OH^0 (-6526) -> H2O2^0 (-11580) -At time : 10 ps Reaction : °OH^0 (-11276) + °OH^0 (-8934) -> H2O2^0 (-11581) -At time : 10 ps Reaction : °OH^0 (-7124) + °OH^0 (-8086) -> H2O2^0 (-11582) -At time : 10 ps Reaction : e_aq^-1 (-1561) + °OH^0 (-7574) -> OH^-1 (-11583) -At time : 10 ps Reaction : OH^-1 (-11583) + H3O^1 (-7943) -> No product -At time : 10.2 ps Reaction : °OH^0 (-6204) + °OH^0 (-7890) -> H2O2^0 (-11584) -At time : 10.3 ps Reaction : °OH^0 (-10910) + °OH^0 (-6906) -> H2O2^0 (-11585) -At time : 10.3 ps Reaction : e_aq^-1 (-4461) + H^0 (-9983) -> OH^-1 (-11586) + H_2^0 (-11587) -At time : 10.3 ps Reaction : H3O^1 (-10917) + OH^-1 (-11586) -> No product -At time : 10.4 ps Reaction : H3O^1 (-6885) + e_aq^-1 (-8809) -> H^0 (-11588) -At time : 10.5 ps Reaction : °OH^0 (-9145) + °OH^0 (-9447) -> H2O2^0 (-11589) -At time : 10.6 ps Reaction : °OH^0 (-9947) + H^0 (-9948) -> No product -At time : 10.6 ps Reaction : °OH^0 (-9214) + °OH^0 (-6514) -> H2O2^0 (-11590) -At time : 10.7 ps Reaction : °OH^0 (-10490) + °OH^0 (-6174) -> H2O2^0 (-11591) -At time : 10.8 ps Reaction : °OH^0 (-10548) + e_aq^-1 (-4218) -> OH^-1 (-11592) -At time : 10.8 ps Reaction : °OH^0 (-10318) + H^0 (-10299) -> No product -At time : 12.1 ps Reaction : °OH^0 (-11211) + °OH^0 (-9772) -> H2O2^0 (-11593) -At time : 12.1 ps Reaction : °OH^0 (-10080) + e_aq^-1 (-1170) -> OH^-1 (-11594) -At time : 12.1 ps Reaction : H3O^1 (-9611) + e_aq^-1 (-8770) -> H^0 (-11595) -At time : 12.1 ps Reaction : °OH^0 (-9171) + °OH^0 (-9506) -> H2O2^0 (-11596) -At time : 12.1 ps Reaction : °OH^0 (-9429) + °OH^0 (-7976) -> H2O2^0 (-11597) -At time : 12.1 ps Reaction : °OH^0 (-9405) + H^0 (-9074) -> No product -At time : 12.1 ps Reaction : H3O^1 (-10078) + OH^-1 (-11594) -> No product -At time : 13.1 ps Reaction : °OH^0 (-9374) + °OH^0 (-11286) -> H2O2^0 (-11598) -At time : 13.1 ps Reaction : °OH^0 (-10992) + °OH^0 (-10993) -> H2O2^0 (-11599) -At time : 13.1 ps Reaction : °OH^0 (-10482) + °OH^0 (-10967) -> H2O2^0 (-11600) -At time : 13.1 ps Reaction : °OH^0 (-10913) + °OH^0 (-8823) -> H2O2^0 (-11601) -At time : 13.1 ps Reaction : H^0 (-10829) + °OH^0 (-7606) -> No product -At time : 13.1 ps Reaction : °OH^0 (-10767) + °OH^0 (-5956) -> H2O2^0 (-11602) -At time : 13.1 ps Reaction : °OH^0 (-10530) + °OH^0 (-6870) -> H2O2^0 (-11603) -At time : 13.1 ps Reaction : °OH^0 (-8655) + °OH^0 (-8656) -> H2O2^0 (-11604) -At time : 13.1 ps Reaction : H3O^1 (-6803) + e_aq^-1 (-8560) -> H^0 (-11605) -At time : 13.1 ps Reaction : e_aq^-1 (-4362) + H3O^1 (-7591) -> H^0 (-11606) -At time : 13.1 ps Reaction : °OH^0 (-6048) + °OH^0 (-7126) -> H2O2^0 (-11607) -At time : 14.1 ps Reaction : °OH^0 (-10890) + °OH^0 (-5998) -> H2O2^0 (-11608) -At time : 14.1 ps Reaction : °OH^0 (-9612) + °OH^0 (-9609) -> H2O2^0 (-11609) -At time : 14.1 ps Reaction : °OH^0 (-9595) + °OH^0 (-8764) -> H2O2^0 (-11610) -At time : 14.1 ps Reaction : °OH^0 (-10803) + °OH^0 (-10802) -> H2O2^0 (-11611) -At time : 15.1 ps Reaction : H^0 (-11394) + °OH^0 (-8420) -> No product -At time : 15.1 ps Reaction : H^0 (-10512) + H^0 (-11242) -> H_2^0 (-11612) -At time : 15.1 ps Reaction : H^0 (-10860) + °OH^0 (-9938) -> No product -At time : 15.1 ps Reaction : °OH^0 (-10002) + °OH^0 (-8961) -> H2O2^0 (-11613) -At time : 15.1 ps Reaction : H^0 (-9659) + °OH^0 (-7780) -> No product -At time : 15.1 ps Reaction : H^0 (-9124) + °OH^0 (-8206) -> No product -At time : 15.1 ps Reaction : °OH^0 (-5769) + °OH^0 (-8973) -> H2O2^0 (-11614) -At time : 16.1 ps Reaction : H^0 (-11379) + H^0 (-10211) -> H_2^0 (-11615) -At time : 16.1 ps Reaction : °OH^0 (-9267) + °OH^0 (-11237) -> H2O2^0 (-11616) -At time : 16.1 ps Reaction : H^0 (-10339) + H^0 (-11158) -> H_2^0 (-11617) -At time : 16.1 ps Reaction : H^0 (-11154) + °OH^0 (-7322) -> No product -At time : 16.1 ps Reaction : H^0 (-11015) + °OH^0 (-7504) -> No product -At time : 16.1 ps Reaction : °OH^0 (-9891) + °OH^0 (-6834) -> H2O2^0 (-11618) -At time : 16.1 ps Reaction : °OH^0 (-7174) + °OH^0 (-7180) -> H2O2^0 (-11619) -At time : 16.1 ps Reaction : OH^-1 (-5717) + H3O^1 (-5815) -> No product -At time : 16.1 ps Reaction : °OH^0 (-10899) + °OH^0 (-11343) -> H2O2^0 (-11620) -At time : 17.1 ps Reaction : H^0 (-11588) + °OH^0 (-6886) -> No product -At time : 17.1 ps Reaction : °OH^0 (-11104) + H^0 (-9342) -> No product -At time : 17.1 ps Reaction : °OH^0 (-11088) + H^0 (-10207) -> No product -At time : 17.1 ps Reaction : °OH^0 (-10978) + °OH^0 (-10086) -> H2O2^0 (-11621) -At time : 17.1 ps Reaction : °OH^0 (-10951) + H^0 (-9287) -> No product -At time : 17.1 ps Reaction : H^0 (-10815) + °OH^0 (-9021) -> No product -At time : 17.1 ps Reaction : °OH^0 (-10416) + °OH^0 (-9332) -> H2O2^0 (-11622) -At time : 17.1 ps Reaction : °OH^0 (-10193) + °OH^0 (-8154) -> H2O2^0 (-11623) -At time : 17.1 ps Reaction : °OH^0 (-9102) + H^0 (-9575) -> No product -At time : 17.1 ps Reaction : °OH^0 (-6012) + H^0 (-9046) -> No product -At time : 17.1 ps Reaction : H3O^1 (-7243) + e_aq^-1 (-8905) -> H^0 (-11624) -At time : 18.1 ps Reaction : °OH^0 (-11295) + °OH^0 (-10424) -> H2O2^0 (-11625) -At time : 18.1 ps Reaction : H^0 (-10821) + °OH^0 (-6198) -> No product -At time : 18.1 ps Reaction : H^0 (-9272) + H^0 (-9036) -> H_2^0 (-11626) -At time : 18.1 ps Reaction : °OH^0 (-7544) + °OH^0 (-7992) -> H2O2^0 (-11627) -At time : 18.1 ps Reaction : °OH^0 (-6556) + °OH^0 (-7782) -> H2O2^0 (-11628) -At time : 18.1 ps Reaction : °OH^0 (-6590) + °OH^0 (-6592) -> H2O2^0 (-11629) -At time : 19.1 ps Reaction : °OH^0 (-10029) + °OH^0 (-10026) -> H2O2^0 (-11630) -At time : 19.1 ps Reaction : °OH^0 (-9902) + °OH^0 (-9903) -> H2O2^0 (-11631) -At time : 19.1 ps Reaction : H^0 (-9534) + °OH^0 (-6308) -> No product -At time : 19.1 ps Reaction : °OH^0 (-7318) + °OH^0 (-7324) -> H2O2^0 (-11632) -At time : 19.1 ps Reaction : e_aq^-1 (-4373) + H3O^1 (-6877) -> H^0 (-11633) -At time : 20.1 ps Reaction : °OH^0 (-10333) + °OH^0 (-11167) -> H2O2^0 (-11634) -At time : 20.1 ps Reaction : H^0 (-11084) + °OH^0 (-6076) -> No product -At time : 20.1 ps Reaction : H^0 (-9334) + H^0 (-9072) -> H_2^0 (-11635) -At time : 21.1 ps Reaction : °OH^0 (-10538) + H^0 (-10541) -> No product -At time : 21.1 ps Reaction : H^0 (-10043) + °OH^0 (-10044) -> No product -At time : 21.1 ps Reaction : °OH^0 (-9710) + H^0 (-8978) -> No product -At time : 21.1 ps Reaction : °OH^0 (-9318) + °OH^0 (-7142) -> H2O2^0 (-11636) -At time : 21.1 ps Reaction : °OH^0 (-6282) + H^0 (-8992) -> No product -At time : 21.1 ps Reaction : °OH^0 (-9125) + °OH^0 (-11129) -> H2O2^0 (-11637) -At time : 22.1 ps Reaction : °OH^0 (-11334) + °OH^0 (-7900) -> H2O2^0 (-11638) -At time : 22.1 ps Reaction : H^0 (-10778) + °OH^0 (-7856) -> No product -At time : 22.1 ps Reaction : °OH^0 (-10739) + °OH^0 (-9714) -> H2O2^0 (-11639) -At time : 22.1 ps Reaction : °OH^0 (-9227) + °OH^0 (-6612) -> H2O2^0 (-11640) -At time : 22.1 ps Reaction : °OH^0 (-10173) + °OH^0 (-7170) -> H2O2^0 (-11641) -At time : 23.1 ps Reaction : °OH^0 (-11390) + °OH^0 (-10265) -> H2O2^0 (-11642) -At time : 23.1 ps Reaction : °OH^0 (-11388) + H^0 (-9082) -> No product -At time : 23.1 ps Reaction : °OH^0 (-11051) + °OH^0 (-10175) -> H2O2^0 (-11643) -At time : 23.1 ps Reaction : °OH^0 (-10663) + °OH^0 (-6334) -> H2O2^0 (-11644) -At time : 23.1 ps Reaction : °OH^0 (-10123) + °OH^0 (-9308) -> H2O2^0 (-11645) -At time : 23.1 ps Reaction : °OH^0 (-9425) + °OH^0 (-7984) -> H2O2^0 (-11646) -At time : 24.1 ps Reaction : °OH^0 (-10970) + °OH^0 (-7032) -> H2O2^0 (-11647) -At time : 24.1 ps Reaction : H^0 (-10227) + H^0 (-10386) -> H_2^0 (-11648) -At time : 24.1 ps Reaction : °OH^0 (-9840) + H^0 (-9016) -> No product -At time : 24.1 ps Reaction : °OH^0 (-9796) + °OH^0 (-9794) -> H2O2^0 (-11649) -At time : 24.1 ps Reaction : °OH^0 (-9649) + °OH^0 (-9648) -> H2O2^0 (-11650) -At time : 24.1 ps Reaction : °OH^0 (-6488) + e_aq^-1 (-8551) -> OH^-1 (-11651) -At time : 25.1 ps Reaction : °OH^0 (-10618) + °OH^0 (-11195) -> H2O2^0 (-11652) -At time : 25.1 ps Reaction : °OH^0 (-10010) + °OH^0 (-10014) -> H2O2^0 (-11653) -At time : 26.1 ps Reaction : °OH^0 (-7314) + °OH^0 (-11287) -> H2O2^0 (-11654) -At time : 26.1 ps Reaction : °OH^0 (-11098) + °OH^0 (-5727) -> H2O2^0 (-11655) -At time : 26.1 ps Reaction : °OH^0 (-9289) + °OH^0 (-9290) -> H2O2^0 (-11656) -At time : 26.1 ps Reaction : °OH^0 (-9137) + °OH^0 (-6030) -> H2O2^0 (-11657) -At time : 26.1 ps Reaction : °OH^0 (-7240) + °OH^0 (-7242) -> H2O2^0 (-11658) -At time : 26.1 ps Reaction : °OH^0 (-7214) + °OH^0 (-7216) -> H2O2^0 (-11659) -At time : 27.1 ps Reaction : °OH^0 (-11358) + °OH^0 (-7522) -> H2O2^0 (-11660) -At time : 27.1 ps Reaction : °OH^0 (-10933) + °OH^0 (-10018) -> H2O2^0 (-11661) -At time : 27.1 ps Reaction : °OH^0 (-10623) + °OH^0 (-10624) -> H2O2^0 (-11662) -At time : 27.1 ps Reaction : °OH^0 (-10312) + °OH^0 (-10311) -> H2O2^0 (-11663) -At time : 27.1 ps Reaction : °OH^0 (-10103) + °OH^0 (-7068) -> H2O2^0 (-11664) -At time : 27.1 ps Reaction : °OH^0 (-10088) + °OH^0 (-7048) -> H2O2^0 (-11665) -At time : 27.1 ps Reaction : °OH^0 (-8987) + H^0 (-8988) -> No product -At time : 27.1 ps Reaction : e_aq^-1 (-5447) + H3O^1 (-8637) -> H^0 (-11666) -At time : 27.1 ps Reaction : OH^-1 (-5741) + H3O^1 (-7049) -> No product -At time : 27.1 ps Reaction : °OH^0 (-9949) + °OH^0 (-10884) -> H2O2^0 (-11667) -At time : 28.1 ps Reaction : °OH^0 (-10436) + °OH^0 (-11370) -> H2O2^0 (-11668) -At time : 28.1 ps Reaction : °OH^0 (-9872) + °OH^0 (-7886) -> H2O2^0 (-11669) -At time : 28.1 ps Reaction : °OH^0 (-9186) + °OH^0 (-9187) -> H2O2^0 (-11670) -At time : 28.1 ps Reaction : °OH^0 (-8477) + H^0 (-9086) -> No product -At time : 28.1 ps Reaction : °OH^0 (-7060) + °OH^0 (-8038) -> H2O2^0 (-11671) -At time : 28.1 ps Reaction : °OH^0 (-11364) + H^0 (-9414) -> No product -At time : 29.1 ps Reaction : °OH^0 (-9955) + °OH^0 (-11341) -> H2O2^0 (-11672) -At time : 29.1 ps Reaction : °OH^0 (-9249) + °OH^0 (-11219) -> H2O2^0 (-11673) -At time : 29.1 ps Reaction : °OH^0 (-8128) + °OH^0 (-8657) -> H2O2^0 (-11674) -At time : 30.1 ps Reaction : H^0 (-10877) + °OH^0 (-8807) -> No product -At time : 30.1 ps Reaction : °OH^0 (-10152) + °OH^0 (-8104) -> H2O2^0 (-11675) -At time : 30.1 ps Reaction : °OH^0 (-9967) + °OH^0 (-9973) -> H2O2^0 (-11676) -At time : 30.1 ps Reaction : °OH^0 (-7868) + H^0 (-8970) -> No product -At time : 30.1 ps Reaction : °OH^0 (-7010) + °OH^0 (-8957) -> H2O2^0 (-11677) -At time : 31.1 ps Reaction : °OH^0 (-11294) + °OH^0 (-10205) -> H2O2^0 (-11678) -At time : 31.1 ps Reaction : °OH^0 (-9435) + °OH^0 (-6876) -> H2O2^0 (-11679) -At time : 31.1 ps Reaction : °OH^0 (-9407) + °OH^0 (-7156) -> H2O2^0 (-11680) -At time : 32.1 ps Reaction : °OH^0 (-9695) + °OH^0 (-6602) -> H2O2^0 (-11681) -At time : 32.1 ps Reaction : °OH^0 (-8926) + °OH^0 (-9085) -> H2O2^0 (-11682) -At time : 32.1 ps Reaction : °OH^0 (-6580) + e_aq^-1 (-8554) -> OH^-1 (-11683) -At time : 32.1 ps Reaction : °OH^0 (-6454) + °OH^0 (-6458) -> H2O2^0 (-11684) -At time : 32.1 ps Reaction : H3O^1 (-6579) + OH^-1 (-11683) -> No product -At time : 33.1 ps Reaction : °OH^0 (-10955) + H^0 (-11246) -> No product -At time : 33.1 ps Reaction : H^0 (-10089) + H^0 (-10091) -> H_2^0 (-11685) -At time : 33.1 ps Reaction : H^0 (-10007) + °OH^0 (-6946) -> No product -At time : 33.1 ps Reaction : H^0 (-9156) + e_aq^-1 (-3460) -> OH^-1 (-11686) + H_2^0 (-11687) -At time : 33.1 ps Reaction : H3O^1 (-5901) + e_aq^-1 (-8749) -> H^0 (-11688) -At time : 33.1 ps Reaction : °OH^0 (-6368) + °OH^0 (-7734) -> H2O2^0 (-11689) -At time : 33.1 ps Reaction : °OH^0 (-5775) + °OH^0 (-6620) -> H2O2^0 (-11690) -At time : 33.1 ps Reaction : °OH^0 (-10131) + °OH^0 (-8088) -> H2O2^0 (-11691) -At time : 34.1 ps Reaction : H^0 (-10934) + °OH^0 (-6948) -> No product -At time : 34.1 ps Reaction : °OH^0 (-10400) + °OH^0 (-10404) -> H2O2^0 (-11692) -At time : 34.1 ps Reaction : °OH^0 (-10076) + °OH^0 (-8016) -> H2O2^0 (-11693) -At time : 34.1 ps Reaction : H^0 (-9410) + °OH^0 (-6158) -> No product -At time : 34.1 ps Reaction : °OH^0 (-9343) + °OH^0 (-8222) -> H2O2^0 (-11694) -At time : 34.1 ps Reaction : °OH^0 (-9176) + °OH^0 (-9177) -> H2O2^0 (-11695) -At time : 34.1 ps Reaction : °OH^0 (-7256) + °OH^0 (-8204) -> H2O2^0 (-11696) -At time : 34.1 ps Reaction : e_aq^-1 (-3447) + °OH^0 (-7670) -> OH^-1 (-11697) -At time : 34.1 ps Reaction : e_aq^-1 (-5010) + °OH^0 (-7148) -> OH^-1 (-11698) -At time : 34.1 ps Reaction : OH^-1 (-11698) + H3O^1 (-7149) -> No product -At time : 34.1 ps Reaction : H3O^1 (-7669) + OH^-1 (-11697) -> No product -At time : 35.1 ps Reaction : OH^-1 (-11651) + H3O^1 (-7663) -> No product -At time : 35.1 ps Reaction : OH^-1 (-11558) + H3O^1 (-8928) -> No product -At time : 35.1 ps Reaction : °OH^0 (-11321) + °OH^0 (-10581) -> H2O2^0 (-11699) -At time : 35.1 ps Reaction : H^0 (-9742) + °OH^0 (-5950) -> No product -At time : 35.1 ps Reaction : °OH^0 (-9431) + °OH^0 (-9037) -> H2O2^0 (-11700) -At time : 36.1 ps Reaction : °OH^0 (-11378) + H^0 (-10396) -> No product -At time : 36.1 ps Reaction : °OH^0 (-11048) + °OH^0 (-6068) -> H2O2^0 (-11701) -At time : 37.1 ps Reaction : °OH^0 (-10828) + °OH^0 (-5984) -> H2O2^0 (-11702) -At time : 37.1 ps Reaction : H^0 (-10073) + °OH^0 (-8668) -> No product -At time : 38.1 ps Reaction : H^0 (-9635) + °OH^0 (-10712) -> No product -At time : 38.1 ps Reaction : °OH^0 (-10001) + °OH^0 (-9041) -> H2O2^0 (-11703) -At time : 38.1 ps Reaction : OH^-1 (-5735) + H3O^1 (-6035) -> No product -At time : 39.1 ps Reaction : °OH^0 (-11061) + °OH^0 (-10189) -> H2O2^0 (-11704) -At time : 39.1 ps Reaction : °OH^0 (-10178) + °OH^0 (-10179) -> H2O2^0 (-11705) -At time : 39.1 ps Reaction : °OH^0 (-9307) + °OH^0 (-6042) -> H2O2^0 (-11706) -At time : 40.1 ps Reaction : °OH^0 (-9886) + H^0 (-11335) -> No product -At time : 40.1 ps Reaction : H^0 (-11269) + H^0 (-9092) -> H_2^0 (-11707) -At time : 40.1 ps Reaction : °OH^0 (-11162) + °OH^0 (-8609) -> H2O2^0 (-11708) -At time : 40.1 ps Reaction : °OH^0 (-9951) + °OH^0 (-10518) -> H2O2^0 (-11709) -At time : 40.1 ps Reaction : °OH^0 (-10457) + e_aq^-1 (-4839) -> OH^-1 (-11710) -At time : 41.1 ps Reaction : °OH^0 (-10063) + °OH^0 (-10066) -> H2O2^0 (-11711) -At time : 41.1 ps Reaction : H^0 (-9950) + °OH^0 (-6896) -> No product -At time : 41.1 ps Reaction : °OH^0 (-9385) + °OH^0 (-9364) -> H2O2^0 (-11712) -At time : 41.1 ps Reaction : H^0 (-9148) + e_aq^-1 (-3436) -> OH^-1 (-11713) + H_2^0 (-11714) -At time : 43.1 ps Reaction : °OH^0 (-7512) + °OH^0 (-11248) -> H2O2^0 (-11715) -At time : 43.1 ps Reaction : °OH^0 (-10901) + °OH^0 (-8813) -> H2O2^0 (-11716) -At time : 44.1 ps Reaction : H3O^1 (-11159) + e_aq^-1 (-8611) -> H^0 (-11717) -At time : 44.1 ps Reaction : H^0 (-9130) + H^0 (-9365) -> H_2^0 (-11718) -At time : 44.1 ps Reaction : °OH^0 (-9317) + °OH^0 (-9320) -> H2O2^0 (-11719) -At time : 45.1 ps Reaction : °OH^0 (-10145) + °OH^0 (-11250) -> H2O2^0 (-11720) -At time : 45.1 ps Reaction : °OH^0 (-11136) + °OH^0 (-9357) -> H2O2^0 (-11721) -At time : 45.1 ps Reaction : H^0 (-9573) + °OH^0 (-9572) -> No product -At time : 45.1 ps Reaction : °OH^0 (-9247) + H^0 (-9248) -> No product -At time : 45.1 ps Reaction : H^0 (-9239) + °OH^0 (-5834) -> No product -At time : 45.1 ps Reaction : e_aq^-1 (-3364) + °OH^0 (-6218) -> OH^-1 (-11722) -At time : 46.1 ps Reaction : H^0 (-9110) + °OH^0 (-7874) -> No product -At time : 46.1 ps Reaction : °OH^0 (-8504) + e_aq^-1 (-8506) -> OH^-1 (-11723) -At time : 46.1 ps Reaction : OH^-1 (-11723) + H3O^1 (-8505) -> No product -At time : 47.1 ps Reaction : °OH^0 (-9325) + °OH^0 (-10423) -> H2O2^0 (-11724) -At time : 47.1 ps Reaction : H3O^1 (-8697) + e_aq^-1 (-8698) -> H^0 (-11725) -At time : 47.1 ps Reaction : °OH^0 (-6838) + °OH^0 (-7910) -> H2O2^0 (-11726) -At time : 47.1 ps Reaction : OH^-1 (-5774) + H3O^1 (-7805) -> No product -At time : 48.1 ps Reaction : °OH^0 (-10678) + H^0 (-10679) -> No product -At time : 48.1 ps Reaction : °OH^0 (-9881) + °OH^0 (-6828) -> H2O2^0 (-11727) -At time : 48.1 ps Reaction : °OH^0 (-9672) + °OH^0 (-9001) -> H2O2^0 (-11728) -At time : 48.1 ps Reaction : H^0 (-9373) + °OH^0 (-7388) -> No product -At time : 48.1 ps Reaction : °OH^0 (-8369) + °OH^0 (-9027) -> H2O2^0 (-11729) -At time : 48.1 ps Reaction : e_aq^-1 (-5636) + °OH^0 (-8623) -> OH^-1 (-11730) -At time : 48.1 ps Reaction : °OH^0 (-7368) + °OH^0 (-8328) -> H2O2^0 (-11731) -At time : 48.1 ps Reaction : e_aq^-1 (-3589) + °OH^0 (-6316) -> OH^-1 (-11732) -At time : 48.1 ps Reaction : e_aq^-1 (-4238) + e_aq^-1 (-4257) -> OH^-1 (-11733) + OH^-1 (-11734) + H_2^0 (-11735) -At time : 49.1 ps Reaction : °OH^0 (-10596) + e_aq^-1 (-2464) -> OH^-1 (-11736) -At time : 49.1 ps Reaction : H^0 (-9340) + °OH^0 (-8212) -> No product -At time : 49.1 ps Reaction : OH^-1 (-5804) + H3O^1 (-8457) -> No product -At time : 49.1 ps Reaction : °OH^0 (-7102) + °OH^0 (-8070) -> H2O2^0 (-11737) -At time : 50.1 ps Reaction : °OH^0 (-11141) + e_aq^-1 (-8410) -> OH^-1 (-11738) -At time : 50.1 ps Reaction : °OH^0 (-10106) + °OH^0 (-9061) -> H2O2^0 (-11739) -At time : 50.1 ps Reaction : °OH^0 (-9920) + °OH^0 (-9926) -> H2O2^0 (-11740) -At time : 50.1 ps Reaction : °OH^0 (-9105) + °OH^0 (-6474) -> H2O2^0 (-11741) -At time : 50.1 ps Reaction : °OH^0 (-8498) + e_aq^-1 (-8500) -> OH^-1 (-11742) -At time : 50.1 ps Reaction : H3O^1 (-7295) + OH^-1 (-11738) -> No product -At time : 51.1 ps Reaction : °OH^0 (-11081) + °OH^0 (-10204) -> H2O2^0 (-11743) -At time : 51.1 ps Reaction : °OH^0 (-10156) + H^0 (-9322) -> No product -At time : 52.1 ps Reaction : H3O^1 (-10456) + OH^-1 (-11710) -> No product -At time : 52.1 ps Reaction : °OH^0 (-9981) + °OH^0 (-7942) -> H2O2^0 (-11744) -At time : 52.1 ps Reaction : °OH^0 (-7354) + e_aq^-1 (-8470) -> OH^-1 (-11745) -At time : 52.1 ps Reaction : e_aq^-1 (-3708) + H3O^1 (-7761) -> H^0 (-11746) -At time : 52.1 ps Reaction : °OH^0 (-6118) + °OH^0 (-7362) -> H2O2^0 (-11747) -At time : 52.1 ps Reaction : °OH^0 (-5954) + °OH^0 (-6666) -> H2O2^0 (-11748) -At time : 53.1 ps Reaction : °OH^0 (-10930) + °OH^0 (-7570) -> H2O2^0 (-11749) -At time : 53.1 ps Reaction : °OH^0 (-10645) + °OH^0 (-6268) -> H2O2^0 (-11750) -At time : 53.1 ps Reaction : °OH^0 (-6002) + °OH^0 (-7930) -> H2O2^0 (-11751) -At time : 53.1 ps Reaction : °OH^0 (-6312) + °OH^0 (-7722) -> H2O2^0 (-11752) -At time : 54.1 ps Reaction : OH^-1 (-11745) + H3O^1 (-8466) -> No product -At time : 54.1 ps Reaction : °OH^0 (-9413) + °OH^0 (-8390) -> H2O2^0 (-11753) -At time : 54.1 ps Reaction : e_aq^-1 (-4711) + °OH^0 (-7040) -> OH^-1 (-11754) -At time : 55.1 ps Reaction : °OH^0 (-10218) + H^0 (-10219) -> No product -At time : 55.1 ps Reaction : H^0 (-10125) + °OH^0 (-9304) -> No product -At time : 55.1 ps Reaction : °OH^0 (-6814) + °OH^0 (-8558) -> H2O2^0 (-11755) -At time : 56.1 ps Reaction : H^0 (-10394) + °OH^0 (-8188) -> No product -At time : 56.1 ps Reaction : °OH^0 (-10258) + °OH^0 (-10366) -> H2O2^0 (-11756) -At time : 56.1 ps Reaction : °OH^0 (-9519) + °OH^0 (-7714) -> H2O2^0 (-11757) -At time : 56.1 ps Reaction : °OH^0 (-8158) + e_aq^-1 (-8899) -> OH^-1 (-11758) -At time : 56.1 ps Reaction : OH^-1 (-11758) + H3O^1 (-7211) -> No product -At time : 57.1 ps Reaction : °OH^0 (-8094) + °OH^0 (-8873) -> H2O2^0 (-11759) -At time : 57.1 ps Reaction : °OH^0 (-7808) + e_aq^-1 (-8785) -> OH^-1 (-11760) -At time : 57.1 ps Reaction : H3O^1 (-8231) + e_aq^-1 (-8335) -> H^0 (-11761) -At time : 57.1 ps Reaction : °OH^0 (-6390) + °OH^0 (-6396) -> H2O2^0 (-11762) -At time : 58.1 ps Reaction : °OH^0 (-11011) + e_aq^-1 (-8449) -> OH^-1 (-11763) -At time : 58.1 ps Reaction : °OH^0 (-8603) + e_aq^-1 (-8896) -> OH^-1 (-11764) -At time : 58.1 ps Reaction : OH^-1 (-11763) + H3O^1 (-8079) -> No product -At time : 58.1 ps Reaction : e_aq^-1 (-3342) + H3O^1 (-7681) -> H^0 (-11765) -At time : 59.1 ps Reaction : OH^-1 (-11754) + H3O^1 (-7039) -> No product -At time : 59.1 ps Reaction : e_aq^-1 (-5545) + H3O^1 (-8607) -> H^0 (-11766) -At time : 59.1 ps Reaction : e_aq^-1 (-8365) + e_aq^-1 (-8368) -> OH^-1 (-11767) + OH^-1 (-11768) + H_2^0 (-11769) -At time : 60.1 ps Reaction : H3O^1 (-10830) + OH^-1 (-11768) -> No product -At time : 60.1 ps Reaction : OH^-1 (-11767) + H3O^1 (-6841) -> No product -At time : 60.1 ps Reaction : H^0 (-10999) + °OH^0 (-8060) -> No product -At time : 61.1 ps Reaction : OH^-1 (-11764) + H3O^1 (-8155) -> No product -At time : 61.1 ps Reaction : H^0 (-11375) + °OH^0 (-8134) -> No product -At time : 61.1 ps Reaction : °OH^0 (-9943) + °OH^0 (-11340) -> H2O2^0 (-11770) -At time : 61.1 ps Reaction : °OH^0 (-11319) + H^0 (-9642) -> No product -At time : 61.1 ps Reaction : °OH^0 (-11113) + °OH^0 (-8224) -> H2O2^0 (-11771) -At time : 61.1 ps Reaction : °OH^0 (-7208) + H^0 (-8948) -> No product -At time : 61.1 ps Reaction : e_aq^-1 (-267) + °OH^0 (-7316) -> OH^-1 (-11772) -At time : 61.1 ps Reaction : OH^-1 (-11772) + H3O^1 (-8269) -> No product -At time : 62.1 ps Reaction : H^0 (-11236) + °OH^0 (-7590) -> No product -At time : 62.1 ps Reaction : °OH^0 (-10938) + e_aq^-1 (-1462) -> OH^-1 (-11773) -At time : 62.1 ps Reaction : °OH^0 (-9351) + °OH^0 (-7434) -> H2O2^0 (-11774) -At time : 62.1 ps Reaction : e_aq^-1 (-3314) + °OH^0 (-8714) -> OH^-1 (-11775) -At time : 62.1 ps Reaction : H3O^1 (-5877) + OH^-1 (-11775) -> No product -At time : 62.1 ps Reaction : °OH^0 (-10128) + H^0 (-10129) -> No product -At time : 63.1 ps Reaction : °OH^0 (-11014) + °OH^0 (-6154) -> H2O2^0 (-11776) -At time : 63.1 ps Reaction : °OH^0 (-9919) + °OH^0 (-9923) -> H2O2^0 (-11777) -At time : 63.1 ps Reaction : °OH^0 (-9802) + °OH^0 (-9806) -> H2O2^0 (-11778) -At time : 63.1 ps Reaction : e_aq^-1 (-5467) + H3O^1 (-7409) -> H^0 (-11779) -At time : 63.1 ps Reaction : e_aq^-1 (-4358) + °OH^0 (-6878) -> OH^-1 (-11780) -At time : 63.1 ps Reaction : H^0 (-9592) + °OH^0 (-10694) -> No product -At time : 64.1 ps Reaction : OH^-1 (-11736) + H3O^1 (-8703) -> No product -At time : 64.1 ps Reaction : °OH^0 (-10288) + °OH^0 (-11275) -> H2O2^0 (-11781) -At time : 64.1 ps Reaction : H^0 (-9682) + °OH^0 (-8981) -> No product -At time : 64.1 ps Reaction : °OH^0 (-7546) + e_aq^-1 (-8518) -> OH^-1 (-11782) -At time : 65.1 ps Reaction : °OH^0 (-11115) + °OH^0 (-9348) -> H2O2^0 (-11783) -At time : 65.1 ps Reaction : °OH^0 (-9297) + °OH^0 (-8018) -> H2O2^0 (-11784) -At time : 65.1 ps Reaction : H^0 (-9139) + °OH^0 (-6972) -> No product -At time : 65.1 ps Reaction : e_aq^-1 (-4482) + °OH^0 (-7576) -> OH^-1 (-11785) -At time : 65.1 ps Reaction : H3O^1 (-8376) + OH^-1 (-11785) -> No product -At time : 66.1 ps Reaction : OH^-1 (-11782) + H3O^1 (-7545) -> No product -At time : 66.1 ps Reaction : H^0 (-9946) + °OH^0 (-10880) -> No product -At time : 66.1 ps Reaction : °OH^0 (-9504) + °OH^0 (-9502) -> H2O2^0 (-11786) -At time : 67.1 ps Reaction : °OH^0 (-9755) + H^0 (-10578) -> No product -At time : 67.1 ps Reaction : °OH^0 (-9777) + H^0 (-9779) -> No product -At time : 67.1 ps Reaction : H^0 (-9767) + °OH^0 (-6688) -> No product -At time : 67.1 ps Reaction : °OH^0 (-6302) + °OH^0 (-8423) -> H2O2^0 (-11787) -At time : 67.1 ps Reaction : °OH^0 (-7028) + °OH^0 (-8000) -> H2O2^0 (-11788) -At time : 68.1 ps Reaction : H3O^1 (-10927) + OH^-1 (-11773) -> No product -At time : 68.1 ps Reaction : H^0 (-11298) + °OH^0 (-8953) -> No product -At time : 68.1 ps Reaction : °OH^0 (-9868) + H^0 (-8968) -> No product -At time : 68.1 ps Reaction : °OH^0 (-9301) + °OH^0 (-8054) -> H2O2^0 (-11789) -At time : 68.1 ps Reaction : °OH^0 (-6968) + °OH^0 (-7978) -> H2O2^0 (-11790) -At time : 69.1 ps Reaction : H^0 (-9369) + °OH^0 (-8936) -> No product -At time : 69.1 ps Reaction : °OH^0 (-8387) + °OH^0 (-8843) -> H2O2^0 (-11791) -At time : 69.1 ps Reaction : °OH^0 (-8399) + e_aq^-1 (-8401) -> OH^-1 (-11792) -At time : 70.1 ps Reaction : °OH^0 (-10936) + e_aq^-1 (-8431) -> OH^-1 (-11793) -At time : 70.1 ps Reaction : °OH^0 (-10448) + °OH^0 (-10124) -> H2O2^0 (-11794) -At time : 71.1 ps Reaction : H^0 (-11352) + °OH^0 (-10038) -> No product -At time : 71.1 ps Reaction : H^0 (-11344) + °OH^0 (-7582) -> No product -At time : 71.1 ps Reaction : H^0 (-10158) + °OH^0 (-7164) -> No product -At time : 71.1 ps Reaction : H^0 (-9386) + H^0 (-9090) -> H_2^0 (-11795) -At time : 71.1 ps Reaction : e_aq^-1 (-1542) + H3O^1 (-7573) -> H^0 (-11796) -At time : 72.1 ps Reaction : H3O^1 (-7967) + OH^-1 (-11793) -> No product -At time : 72.1 ps Reaction : °OH^0 (-11383) + °OH^0 (-11384) -> H2O2^0 (-11797) -At time : 72.1 ps Reaction : °OH^0 (-10164) + °OH^0 (-7160) -> H2O2^0 (-11798) -At time : 73.1 ps Reaction : H^0 (-11331) + °OH^0 (-7624) -> No product -At time : 73.1 ps Reaction : °OH^0 (-11132) + e_aq^-1 (-5426) -> OH^-1 (-11799) -At time : 73.1 ps Reaction : H^0 (-10181) + °OH^0 (-9069) -> No product -At time : 73.1 ps Reaction : °OH^0 (-10068) + H^0 (-10069) -> No product -At time : 73.1 ps Reaction : H^0 (-10015) + H^0 (-10017) -> H_2^0 (-11800) -At time : 73.1 ps Reaction : °OH^0 (-9180) + °OH^0 (-8995) -> H2O2^0 (-11801) -At time : 74.1 ps Reaction : °OH^0 (-11362) + °OH^0 (-10110) -> H2O2^0 (-11802) -At time : 74.1 ps Reaction : H^0 (-10115) + H^0 (-11194) -> H_2^0 (-11803) -At time : 74.1 ps Reaction : H^0 (-10727) + °OH^0 (-10729) -> No product -At time : 74.1 ps Reaction : H3O^1 (-6489) + e_aq^-1 (-8548) -> H^0 (-11804) -At time : 75.1 ps Reaction : °OH^0 (-11152) + °OH^0 (-8272) -> H2O2^0 (-11805) -At time : 75.1 ps Reaction : H^0 (-10459) + e_aq^-1 (-967) -> OH^-1 (-11806) + H_2^0 (-11807) -At time : 76.1 ps Reaction : °OH^0 (-10520) + °OH^0 (-5996) -> H2O2^0 (-11808) -At time : 77.1 ps Reaction : H^0 (-11356) + °OH^0 (-7004) -> No product -At time : 77.1 ps Reaction : e_aq^-1 (-5554) + °OH^0 (-10336) -> OH^-1 (-11809) -At time : 77.1 ps Reaction : e_aq^-1 (-3143) + °OH^0 (-5892) -> OH^-1 (-11810) -At time : 77.1 ps Reaction : OH^-1 (-11810) + H3O^1 (-5891) -> No product -At time : 78.1 ps Reaction : H^0 (-11337) + °OH^0 (-10540) -> No product -At time : 79.1 ps Reaction : H^0 (-10231) + °OH^0 (-6084) -> No product -At time : 79.1 ps Reaction : °OH^0 (-7248) + e_aq^-1 (-8485) -> OH^-1 (-11811) -At time : 80.1 ps Reaction : H^0 (-9122) + °OH^0 (-10150) -> No product -At time : 80.1 ps Reaction : H^0 (-9355) + °OH^0 (-8252) -> No product -At time : 81.1 ps Reaction : °OH^0 (-10511) + °OH^0 (-11241) -> H2O2^0 (-11812) -At time : 81.1 ps Reaction : H^0 (-9120) + H^0 (-10496) -> H_2^0 (-11813) -At time : 82.1 ps Reaction : H^0 (-9268) + °OH^0 (-10897) -> No product -At time : 82.1 ps Reaction : H^0 (-10197) + °OH^0 (-7210) -> No product -At time : 83.1 ps Reaction : °OH^0 (-10094) + °OH^0 (-10099) -> H2O2^0 (-11814) -At time : 84.1 ps Reaction : °OH^0 (-9905) + °OH^0 (-6836) -> H2O2^0 (-11815) -At time : 84.1 ps Reaction : °OH^0 (-6082) + °OH^0 (-7448) -> H2O2^0 (-11816) -At time : 85.1 ps Reaction : H3O^1 (-10417) + e_aq^-1 (-8890) -> H^0 (-11817) -At time : 85.1 ps Reaction : H^0 (-9126) + °OH^0 (-8462) -> No product -At time : 85.1 ps Reaction : e_aq^-1 (-3908) + °OH^0 (-8975) -> OH^-1 (-11818) -At time : 85.1 ps Reaction : °OH^0 (-7328) + °OH^0 (-7330) -> H2O2^0 (-11819) -At time : 86.1 ps Reaction : °OH^0 (-10405) + °OH^0 (-6144) -> H2O2^0 (-11820) -At time : 86.1 ps Reaction : H^0 (-9816) + °OH^0 (-6732) -> No product -At time : 86.1 ps Reaction : H^0 (-9329) + °OH^0 (-7168) -> No product -At time : 86.1 ps Reaction : e_aq^-1 (-2790) + °OH^0 (-6468) -> OH^-1 (-11821) -At time : 87.1 ps Reaction : OH^-1 (-11742) + H3O^1 (-8658) -> No product -At time : 87.1 ps Reaction : H^0 (-10922) + °OH^0 (-7954) -> No product -At time : 87.1 ps Reaction : °OH^0 (-9523) + °OH^0 (-9521) -> H2O2^0 (-11822) -At time : 87.1 ps Reaction : H^0 (-9116) + H^0 (-9264) -> H_2^0 (-11823) -At time : 87.1 ps Reaction : °OH^0 (-9261) + °OH^0 (-6868) -> H2O2^0 (-11824) -At time : 88.1 ps Reaction : °OH^0 (-10524) + °OH^0 (-10529) -> H2O2^0 (-11825) -At time : 89.1 ps Reaction : H3O^1 (-10613) + OH^-1 (-11686) -> No product -At time : 89.1 ps Reaction : °OH^0 (-10941) + H^0 (-10942) -> No product -At time : 89.1 ps Reaction : H^0 (-10021) + °OH^0 (-9047) -> No product -At time : 89.1 ps Reaction : °OH^0 (-9658) + °OH^0 (-9663) -> H2O2^0 (-11826) -At time : 89.1 ps Reaction : °OH^0 (-9362) + °OH^0 (-8292) -> H2O2^0 (-11827) -At time : 89.1 ps Reaction : °OH^0 (-8573) + e_aq^-1 (-8821) -> OH^-1 (-11828) -At time : 89.1 ps Reaction : H3O^1 (-8433) + e_aq^-1 (-8434) -> H^0 (-11829) -At time : 89.1 ps Reaction : °OH^0 (-7220) + °OH^0 (-8170) -> H2O2^0 (-11830) -At time : 89.1 ps Reaction : °OH^0 (-7070) + °OH^0 (-7074) -> H2O2^0 (-11831) -At time : 90.1 ps Reaction : OH^-1 (-11818) + H3O^1 (-6643) -> No product -At time : 90.1 ps Reaction : H^0 (-10875) + °OH^0 (-7592) -> No product -At time : 90.1 ps Reaction : °OH^0 (-9863) + °OH^0 (-6808) -> H2O2^0 (-11832) -At time : 91.1 ps Reaction : °OH^0 (-9165) + °OH^0 (-9489) -> H2O2^0 (-11833) -At time : 91.1 ps Reaction : °OH^0 (-5898) + °OH^0 (-8537) -> H2O2^0 (-11834) -At time : 91.1 ps Reaction : e_aq^-1 (-3542) + H3O^1 (-6259) -> H^0 (-11835) -At time : 92.1 ps Reaction : H3O^1 (-6879) + OH^-1 (-11780) -> No product -At time : 92.1 ps Reaction : °OH^0 (-11125) + °OH^0 (-8244) -> H2O2^0 (-11836) -At time : 92.1 ps Reaction : °OH^0 (-11076) + °OH^0 (-7224) -> H2O2^0 (-11837) -At time : 92.1 ps Reaction : °OH^0 (-9969) + °OH^0 (-7934) -> H2O2^0 (-11838) -At time : 93.1 ps Reaction : °OH^0 (-11122) + e_aq^-1 (-5397) -> OH^-1 (-11839) -At time : 93.1 ps Reaction : °OH^0 (-10338) + °OH^0 (-7336) -> H2O2^0 (-11840) -At time : 93.1 ps Reaction : °OH^0 (-9543) + °OH^0 (-7730) -> H2O2^0 (-11841) -At time : 93.1 ps Reaction : OH^-1 (-5738) + H3O^1 (-5845) -> No product -At time : 94.1 ps Reaction : H3O^1 (-9974) + OH^-1 (-11828) -> No product -At time : 94.1 ps Reaction : °OH^0 (-10430) + °OH^0 (-7498) -> H2O2^0 (-11842) -At time : 95.1 ps Reaction : H^0 (-10748) + °OH^0 (-9743) -> No product -At time : 95.1 ps Reaction : °OH^0 (-10297) + °OH^0 (-8312) -> H2O2^0 (-11843) -At time : 95.1 ps Reaction : °OH^0 (-8552) + °OH^0 (-8780) -> H2O2^0 (-11844) -At time : 96.1 ps Reaction : e_aq^-1 (-2826) + H^0 (-11746) -> OH^-1 (-11845) + H_2^0 (-11846) -At time : 96.1 ps Reaction : °OH^0 (-11034) + H^0 (-11035) -> No product -At time : 96.1 ps Reaction : °OH^0 (-5936) + °OH^0 (-7788) -> H2O2^0 (-11847) -At time : 96.1 ps Reaction : e_aq^-1 (-3823) + e_aq^-1 (-3821) -> OH^-1 (-11848) + OH^-1 (-11849) + H_2^0 (-11850) -At time : 97.1 ps Reaction : °OH^0 (-11332) + H^0 (-9855) -> No product -At time : 97.1 ps Reaction : H^0 (-11324) + H^0 (-8972) -> H_2^0 (-11851) -At time : 97.1 ps Reaction : °OH^0 (-6050) + °OH^0 (-8450) -> H2O2^0 (-11852) -At time : 97.1 ps Reaction : °OH^0 (-6072) + °OH^0 (-7226) -> H2O2^0 (-11853) -At time : 98.1 ps Reaction : OH^-1 (-11839) + H3O^1 (-8237) -> No product -At time : 98.1 ps Reaction : °OH^0 (-9871) + °OH^0 (-8967) -> H2O2^0 (-11854) -At time : 98.1 ps Reaction : °OH^0 (-9245) + °OH^0 (-7850) -> H2O2^0 (-11855) -At time : 98.1 ps Reaction : °OH^0 (-6664) + °OH^0 (-7826) -> H2O2^0 (-11856) -At time : 99.1 ps Reaction : OH^-1 (-11592) + H3O^1 (-7901) -> No product -At time : 100.1 ps Reaction : °OH^0 (-10450) + °OH^0 (-11368) -> H2O2^0 (-11857) -At time : 100.1 ps Reaction : H^0 (-9134) + H^0 (-11176) -> H_2^0 (-11858) -At time : 100.1 ps Reaction : °OH^0 (-11005) + °OH^0 (-7104) -> H2O2^0 (-11859) -At time : 100.1 ps Reaction : H^0 (-9158) + °OH^0 (-10616) -> No product -At time : 100.1 ps Reaction : °OH^0 (-10159) + °OH^0 (-7166) -> H2O2^0 (-11860) -At time : 100.1 ps Reaction : °OH^0 (-9824) + °OH^0 (-8354) -> H2O2^0 (-11861) -At time : 101.1 ps Reaction : H^0 (-10062) + °OH^0 (-10961) -> No product -At time : 101.1 ps Reaction : °OH^0 (-9173) + °OH^0 (-9511) -> H2O2^0 (-11862) -At time : 101.1 ps Reaction : e_aq^-1 (-5214) + °OH^0 (-8483) -> OH^-1 (-11863) -At time : 111.1 ps Reaction : OH^-1 (-11863) + H3O^1 (-8201) -> No product -At time : 111.1 ps Reaction : OH^-1 (-11806) + H3O^1 (-8445) -> No product -At time : 111.1 ps Reaction : H3O^1 (-6313) + OH^-1 (-11732) -> No product -At time : 111.1 ps Reaction : H^0 (-11003) + °OH^0 (-8066) -> No product -At time : 111.1 ps Reaction : H^0 (-10946) + °OH^0 (-6018) -> No product -At time : 111.1 ps Reaction : H^0 (-9237) + °OH^0 (-10760) -> No product -At time : 111.1 ps Reaction : H^0 (-9744) + °OH^0 (-10587) -> No product -At time : 111.1 ps Reaction : °OH^0 (-10303) + °OH^0 (-10314) -> H2O2^0 (-11864) -At time : 111.1 ps Reaction : °OH^0 (-9225) + °OH^0 (-7652) -> H2O2^0 (-11865) -At time : 111.1 ps Reaction : °OH^0 (-8168) + °OH^0 (-9075) -> H2O2^0 (-11866) -At time : 111.1 ps Reaction : °OH^0 (-5928) + H^0 (-9006) -> No product -At time : 111.1 ps Reaction : °OH^0 (-8870) + e_aq^-1 (-8872) -> OH^-1 (-11867) -At time : 111.1 ps Reaction : e_aq^-1 (-4303) + e_aq^-1 (-8374) -> OH^-1 (-11868) + OH^-1 (-11869) + H_2^0 (-11870) -At time : 111.1 ps Reaction : °OH^0 (-5992) + °OH^0 (-6858) -> H2O2^0 (-11871) -At time : 111.1 ps Reaction : °OH^0 (-8210) + °OH^0 (-8912) -> H2O2^0 (-11872) -At time : 121.1 ps Reaction : OH^-1 (-11811) + H3O^1 (-7247) -> No product -At time : 121.1 ps Reaction : OH^-1 (-11760) + H3O^1 (-6621) -> No product -At time : 121.1 ps Reaction : °OH^0 (-10879) + °OH^0 (-11339) -> H2O2^0 (-11873) -At time : 121.1 ps Reaction : °OH^0 (-10376) + °OH^0 (-11267) -> H2O2^0 (-11874) -At time : 121.1 ps Reaction : H^0 (-11230) + °OH^0 (-7614) -> No product -At time : 121.1 ps Reaction : °OH^0 (-11170) + °OH^0 (-7340) -> H2O2^0 (-11875) -At time : 121.1 ps Reaction : °OH^0 (-11148) + °OH^0 (-6126) -> H2O2^0 (-11876) -At time : 121.1 ps Reaction : °OH^0 (-10690) + °OH^0 (-10693) -> H2O2^0 (-11877) -At time : 121.1 ps Reaction : H^0 (-10362) + °OH^0 (-8242) -> No product -At time : 121.1 ps Reaction : °OH^0 (-9721) + °OH^0 (-6606) -> H2O2^0 (-11878) -At time : 121.1 ps Reaction : H^0 (-9228) + e_aq^-1 (-3857) -> OH^-1 (-11879) + H_2^0 (-11880) -At time : 121.1 ps Reaction : °OH^0 (-9178) + °OH^0 (-6326) -> H2O2^0 (-11881) -At time : 121.1 ps Reaction : H3O^1 (-8919) + e_aq^-1 (-8920) -> H^0 (-11882) -At time : 121.1 ps Reaction : °OH^0 (-6708) + °OH^0 (-8787) -> H2O2^0 (-11883) -At time : 121.1 ps Reaction : °OH^0 (-6740) + e_aq^-1 (-8356) -> OH^-1 (-11884) -At time : 121.1 ps Reaction : °OH^0 (-6518) + °OH^0 (-8342) -> H2O2^0 (-11885) -At time : 121.1 ps Reaction : e_aq^-1 (-2887) + H3O^1 (-6421) -> H^0 (-11886) -At time : 121.1 ps Reaction : OH^-1 (-5786) + H3O^1 (-6205) -> No product -At time : 121.1 ps Reaction : e_aq^-1 (-97) + °OH^0 (-8300) -> OH^-1 (-11887) -At time : 131.1 ps Reaction : OH^-1 (-11799) + H3O^1 (-7293) -> No product -At time : 131.1 ps Reaction : °OH^0 (-10298) + H^0 (-11277) -> No product -At time : 131.1 ps Reaction : °OH^0 (-11215) + °OH^0 (-5966) -> H2O2^0 (-11888) -At time : 131.1 ps Reaction : °OH^0 (-11160) + H^0 (-9088) -> No product -At time : 131.1 ps Reaction : H3O^1 (-11121) + e_aq^-1 (-5396) -> H^0 (-11889) -At time : 131.1 ps Reaction : °OH^0 (-10911) + e_aq^-1 (-4413) -> OH^-1 (-11890) -At time : 131.1 ps Reaction : °OH^0 (-10742) + °OH^0 (-6632) -> H2O2^0 (-11891) -At time : 131.1 ps Reaction : °OH^0 (-10481) + °OH^0 (-7536) -> H2O2^0 (-11892) -At time : 131.1 ps Reaction : °OH^0 (-10307) + °OH^0 (-7384) -> H2O2^0 (-11893) -At time : 131.1 ps Reaction : H^0 (-10039) + °OH^0 (-8837) -> No product -At time : 131.1 ps Reaction : °OH^0 (-9481) + e_aq^-1 (-3530) -> OH^-1 (-11894) -At time : 131.1 ps Reaction : °OH^0 (-9388) + °OH^0 (-5852) -> H2O2^0 (-11895) -At time : 131.1 ps Reaction : °OH^0 (-6942) + H^0 (-9044) -> No product -At time : 131.1 ps Reaction : e_aq^-1 (-1623) + H3O^1 (-7927) -> H^0 (-11896) -At time : 131.1 ps Reaction : °OH^0 (-6040) + °OH^0 (-7092) -> H2O2^0 (-11897) -At time : 131.1 ps Reaction : OH^-1 (-5765) + H3O^1 (-6679) -> No product -At time : 131.1 ps Reaction : °OH^0 (-10230) + °OH^0 (-11106) -> H2O2^0 (-11898) -At time : 131.1 ps Reaction : °OH^0 (-9878) + °OH^0 (-7888) -> H2O2^0 (-11899) -At time : 141.1 ps Reaction : H3O^1 (-11010) + OH^-1 (-11867) -> No product -At time : 141.1 ps Reaction : °OH^0 (-10589) + °OH^0 (-7818) -> H2O2^0 (-11900) -At time : 141.1 ps Reaction : °OH^0 (-10428) + °OH^0 (-7130) -> H2O2^0 (-11901) -At time : 141.1 ps Reaction : °OH^0 (-10414) + °OH^0 (-8136) -> H2O2^0 (-11902) -At time : 141.1 ps Reaction : °OH^0 (-10301) + °OH^0 (-7364) -> H2O2^0 (-11903) -At time : 141.1 ps Reaction : H^0 (-10107) + H^0 (-9062) -> H_2^0 (-11904) -At time : 141.1 ps Reaction : H^0 (-9849) + °OH^0 (-6798) -> No product -At time : 141.1 ps Reaction : °OH^0 (-9494) + °OH^0 (-6262) -> H2O2^0 (-11905) -At time : 141.1 ps Reaction : H^0 (-9252) + °OH^0 (-7872) -> No product -At time : 141.1 ps Reaction : °OH^0 (-7054) + °OH^0 (-9059) -> H2O2^0 (-11906) -At time : 141.1 ps Reaction : °OH^0 (-8435) + °OH^0 (-8836) -> H2O2^0 (-11907) -At time : 141.1 ps Reaction : °OH^0 (-6994) + °OH^0 (-6996) -> H2O2^0 (-11908) -At time : 141.1 ps Reaction : e_aq^-1 (-4243) + °OH^0 (-6196) -> OH^-1 (-11909) -At time : 141.1 ps Reaction : H3O^1 (-6047) + OH^-1 (-11792) -> No product -At time : 141.1 ps Reaction : e_aq^-1 (-3299) + °OH^0 (-7686) -> OH^-1 (-11910) -At time : 141.1 ps Reaction : e_aq^-1 (-1565) + °OH^0 (-6186) -> OH^-1 (-11911) -At time : 141.1 ps Reaction : OH^-1 (-11910) + H3O^1 (-7687) -> No product -At time : 151.1 ps Reaction : °OH^0 (-11185) + °OH^0 (-8324) -> H2O2^0 (-11912) -At time : 151.1 ps Reaction : H^0 (-10920) + e_aq^-1 (-4503) -> OH^-1 (-11913) + H_2^0 (-11914) -At time : 151.1 ps Reaction : °OH^0 (-10831) + °OH^0 (-6842) -> H2O2^0 (-11915) -At time : 151.1 ps Reaction : H^0 (-9956) + H^0 (-10517) -> H_2^0 (-11916) -At time : 151.1 ps Reaction : H^0 (-10449) + H^0 (-10121) -> H_2^0 (-11917) -At time : 151.1 ps Reaction : °OH^0 (-10146) + °OH^0 (-8876) -> H2O2^0 (-11918) -At time : 151.1 ps Reaction : °OH^0 (-9998) + H^0 (-9042) -> No product -At time : 151.1 ps Reaction : °OH^0 (-9989) + °OH^0 (-7952) -> H2O2^0 (-11919) -At time : 151.1 ps Reaction : e_aq^-1 (-4316) + H^0 (-9928) -> OH^-1 (-11920) + H_2^0 (-11921) -At time : 151.1 ps Reaction : H^0 (-9859) + °OH^0 (-6806) -> No product -At time : 151.1 ps Reaction : H^0 (-9224) + °OH^0 (-9688) -> No product -At time : 151.1 ps Reaction : H^0 (-9471) + °OH^0 (-5878) -> No product -At time : 151.1 ps Reaction : °OH^0 (-9169) + °OH^0 (-7706) -> H2O2^0 (-11922) -At time : 151.1 ps Reaction : °OH^0 (-8624) + °OH^0 (-8941) -> H2O2^0 (-11923) -At time : 151.1 ps Reaction : e_aq^-1 (-5499) + H3O^1 (-8263) -> H^0 (-11924) -At time : 151.1 ps Reaction : °OH^0 (-7086) + °OH^0 (-8058) -> H2O2^0 (-11925) -At time : 151.1 ps Reaction : °OH^0 (-7630) + °OH^0 (-7870) -> H2O2^0 (-11926) -At time : 151.1 ps Reaction : e_aq^-1 (-4817) + H3O^1 (-7077) -> H^0 (-11927) -At time : 151.1 ps Reaction : H^0 (-10127) + °OH^0 (-9409) -> No product -At time : 151.1 ps Reaction : °OH^0 (-8711) + e_aq^-1 (-8713) -> OH^-1 (-11928) -At time : 151.1 ps Reaction : OH^-1 (-11928) + H3O^1 (-8712) -> No product -At time : 161.1 ps Reaction : OH^-1 (-11821) + H3O^1 (-8532) -> No product -At time : 161.1 ps Reaction : °OH^0 (-9581) + °OH^0 (-10689) -> H2O2^0 (-11929) -At time : 161.1 ps Reaction : °OH^0 (-10594) + e_aq^-1 (-2365) -> OH^-1 (-11930) -At time : 161.1 ps Reaction : H^0 (-9896) + °OH^0 (-6832) -> No product -At time : 161.1 ps Reaction : °OH^0 (-9643) + e_aq^-1 (-3773) -> OH^-1 (-11931) -At time : 161.1 ps Reaction : °OH^0 (-9419) + e_aq^-1 (-4833) -> OH^-1 (-11932) -At time : 161.1 ps Reaction : e_aq^-1 (-189) + °OH^0 (-8278) -> OH^-1 (-11933) -At time : 161.1 ps Reaction : e_aq^-1 (-409) + °OH^0 (-8228) -> OH^-1 (-11934) -At time : 161.1 ps Reaction : e_aq^-1 (-11) + e_aq^-1 (-45) -> OH^-1 (-11935) + OH^-1 (-11936) + H_2^0 (-11937) -At time : 161.1 ps Reaction : OH^-1 (-11934) + H3O^1 (-7265) -> No product -At time : 161.1 ps Reaction : H3O^1 (-10108) + OH^-1 (-11932) -> No product -At time : 161.1 ps Reaction : H3O^1 (-6655) + OH^-1 (-11930) -> No product -At time : 161.1 ps Reaction : °OH^0 (-9819) + °OH^0 (-9815) -> H2O2^0 (-11938) -At time : 171.1 ps Reaction : H3O^1 (-5885) + OH^-1 (-11894) -> No product -At time : 171.1 ps Reaction : H^0 (-11320) + H^0 (-9646) -> H_2^0 (-11939) -At time : 171.1 ps Reaction : e_aq^-1 (-4474) + H^0 (-11240) -> OH^-1 (-11940) + H_2^0 (-11941) -At time : 171.1 ps Reaction : °OH^0 (-10665) + °OH^0 (-9538) -> H2O2^0 (-11942) -At time : 171.1 ps Reaction : H^0 (-10659) + °OH^0 (-6320) -> No product -At time : 171.1 ps Reaction : °OH^0 (-10562) + °OH^0 (-6778) -> H2O2^0 (-11943) -At time : 171.1 ps Reaction : °OH^0 (-10390) + °OH^0 (-7258) -> H2O2^0 (-11944) -At time : 171.1 ps Reaction : °OH^0 (-9979) + °OH^0 (-6928) -> H2O2^0 (-11945) -At time : 171.1 ps Reaction : °OH^0 (-9915) + °OH^0 (-5988) -> H2O2^0 (-11946) -At time : 171.1 ps Reaction : H^0 (-9888) + °OH^0 (-6826) -> No product -At time : 171.1 ps Reaction : H^0 (-9614) + °OH^0 (-5914) -> No product -At time : 171.1 ps Reaction : H^0 (-9547) + °OH^0 (-6366) -> No product -At time : 171.1 ps Reaction : °OH^0 (-9352) + °OH^0 (-6134) -> H2O2^0 (-11947) -At time : 171.1 ps Reaction : °OH^0 (-6130) + °OH^0 (-8631) -> H2O2^0 (-11948) -At time : 171.1 ps Reaction : e_aq^-1 (-5241) + °OH^0 (-6142) -> OH^-1 (-11949) -At time : 181.1 ps Reaction : H3O^1 (-6077) + OH^-1 (-11949) -> No product -At time : 181.1 ps Reaction : H3O^1 (-6523) + OH^-1 (-11931) -> No product -At time : 181.1 ps Reaction : OH^-1 (-11722) + H3O^1 (-6217) -> No product -At time : 181.1 ps Reaction : °OH^0 (-10882) + °OH^0 (-8811) -> H2O2^0 (-11950) -At time : 181.1 ps Reaction : °OH^0 (-10811) + °OH^0 (-9019) -> H2O2^0 (-11951) -At time : 181.1 ps Reaction : H^0 (-10349) + °OH^0 (-7408) -> No product -At time : 181.1 ps Reaction : °OH^0 (-5978) + °OH^0 (-8804) -> H2O2^0 (-11952) -At time : 181.1 ps Reaction : °OH^0 (-8633) + e_aq^-1 (-8635) -> OH^-1 (-11953) -At time : 181.1 ps Reaction : °OH^0 (-7382) + e_aq^-1 (-8614) -> OH^-1 (-11954) -At time : 181.1 ps Reaction : °OH^0 (-7122) + °OH^0 (-8396) -> H2O2^0 (-11955) -At time : 181.1 ps Reaction : e_aq^-1 (-5056) + H3O^1 (-7485) -> H^0 (-11956) -At time : 181.1 ps Reaction : e_aq^-1 (-3082) + °OH^0 (-6330) -> OH^-1 (-11957) -At time : 181.1 ps Reaction : OH^-1 (-11957) + H3O^1 (-6325) -> No product -At time : 181.1 ps Reaction : OH^-1 (-11954) + H3O^1 (-7359) -> No product -At time : 191.1 ps Reaction : °OH^0 (-11202) + °OH^0 (-7736) -> H2O2^0 (-11958) -At time : 191.1 ps Reaction : °OH^0 (-11009) + °OH^0 (-11012) -> H2O2^0 (-11959) -At time : 191.1 ps Reaction : °OH^0 (-10840) + °OH^0 (-9916) -> H2O2^0 (-11960) -At time : 191.1 ps Reaction : °OH^0 (-9965) + e_aq^-1 (-8686) -> OH^-1 (-11961) -At time : 191.1 ps Reaction : H^0 (-9396) + °OH^0 (-9394) -> No product -At time : 191.1 ps Reaction : e_aq^-1 (-5284) + H3O^1 (-8203) -> H^0 (-11962) -At time : 191.1 ps Reaction : °OH^0 (-7144) + °OH^0 (-7492) -> H2O2^0 (-11963) -At time : 191.1 ps Reaction : °OH^0 (-6744) + °OH^0 (-6746) -> H2O2^0 (-11964) -At time : 191.1 ps Reaction : OH^-1 (-11869) + H3O^1 (-7593) -> No product -At time : 191.1 ps Reaction : e_aq^-1 (-8689) + °OH^0 (-8816) -> OH^-1 (-11965) -At time : 191.1 ps Reaction : OH^-1 (-5744) + H3O^1 (-7551) -> No product -At time : 201.1 ps Reaction : °OH^0 (-11045) + °OH^0 (-7172) -> H2O2^0 (-11966) -At time : 201.1 ps Reaction : °OH^0 (-10997) + e_aq^-1 (-8443) -> OH^-1 (-11967) -At time : 201.1 ps Reaction : °OH^0 (-10485) + °OH^0 (-10964) -> H2O2^0 (-11968) -At time : 201.1 ps Reaction : °OH^0 (-10534) + °OH^0 (-7594) -> H2O2^0 (-11969) -At time : 201.1 ps Reaction : H^0 (-10477) + H^0 (-8954) -> H_2^0 (-11970) -At time : 201.1 ps Reaction : H^0 (-10398) + °OH^0 (-5858) -> No product -At time : 201.1 ps Reaction : H^0 (-10095) + °OH^0 (-9299) -> No product -At time : 201.1 ps Reaction : H^0 (-9179) + °OH^0 (-6318) -> No product -At time : 201.1 ps Reaction : e_aq^-1 (-4453) + °OH^0 (-9035) -> OH^-1 (-11971) -At time : 201.1 ps Reaction : e_aq^-1 (-1149) + °OH^0 (-8004) -> OH^-1 (-11972) -At time : 201.1 ps Reaction : °OH^0 (-6984) + °OH^0 (-6986) -> H2O2^0 (-11973) -At time : 201.1 ps Reaction : H3O^1 (-10996) + OH^-1 (-11967) -> No product -At time : 211.1 ps Reaction : °OH^0 (-10733) + °OH^0 (-5932) -> H2O2^0 (-11974) -At time : 211.1 ps Reaction : H3O^1 (-10633) + e_aq^-1 (-3261) -> H^0 (-11975) -At time : 211.1 ps Reaction : °OH^0 (-10353) + e_aq^-1 (-8638) -> OH^-1 (-11976) -At time : 211.1 ps Reaction : °OH^0 (-10013) + °OH^0 (-6950) -> H2O2^0 (-11977) -At time : 211.1 ps Reaction : °OH^0 (-6908) + °OH^0 (-8687) -> H2O2^0 (-11978) -At time : 211.1 ps Reaction : OH^-1 (-5732) + H3O^1 (-7089) -> No product -At time : 211.1 ps Reaction : °OH^0 (-7020) + °OH^0 (-7022) -> H2O2^0 (-11979) -At time : 221.1 ps Reaction : °OH^0 (-11381) + °OH^0 (-7462) -> H2O2^0 (-11980) -At time : 221.1 ps Reaction : °OH^0 (-11346) + H^0 (-9960) -> No product -At time : 221.1 ps Reaction : °OH^0 (-11001) + °OH^0 (-10114) -> H2O2^0 (-11981) -At time : 221.1 ps Reaction : e_aq^-1 (-1604) + H^0 (-10894) -> OH^-1 (-11982) + H_2^0 (-11983) -At time : 221.1 ps Reaction : °OH^0 (-10532) + e_aq^-1 (-4328) -> OH^-1 (-11984) -At time : 221.1 ps Reaction : °OH^0 (-10235) + °OH^0 (-7262) -> H2O2^0 (-11985) -At time : 221.1 ps Reaction : °OH^0 (-10075) + e_aq^-1 (-4707) -> OH^-1 (-11986) -At time : 221.1 ps Reaction : H^0 (-9670) + e_aq^-1 (-8779) -> OH^-1 (-11987) + H_2^0 (-11988) -At time : 221.1 ps Reaction : °OH^0 (-9383) + °OH^0 (-8302) -> H2O2^0 (-11989) -At time : 221.1 ps Reaction : °OH^0 (-6070) + °OH^0 (-8947) -> H2O2^0 (-11990) -At time : 221.1 ps Reaction : H3O^1 (-6061) + e_aq^-1 (-8887) -> H^0 (-11991) -At time : 221.1 ps Reaction : H3O^1 (-8394) + e_aq^-1 (-8395) -> H^0 (-11992) -At time : 221.1 ps Reaction : e_aq^-1 (-3124) + °OH^0 (-6306) -> OH^-1 (-11993) -At time : 221.1 ps Reaction : OH^-1 (-11982) + H3O^1 (-7583) -> No product -At time : 221.1 ps Reaction : e_aq^-1 (-4401) + °OH^0 (-6902) -> OH^-1 (-11994) -At time : 221.1 ps Reaction : OH^-1 (-11994) + H3O^1 (-8685) -> No product -At time : 231.1 ps Reaction : OH^-1 (-11987) + H3O^1 (-7781) -> No product -At time : 231.1 ps Reaction : OH^-1 (-11972) + H3O^1 (-7999) -> No product -At time : 231.1 ps Reaction : OH^-1 (-11965) + H3O^1 (-8523) -> No product -At time : 231.1 ps Reaction : H3O^1 (-10909) + OH^-1 (-11961) -> No product -At time : 231.1 ps Reaction : H3O^1 (-10509) + OH^-1 (-11911) -> No product -At time : 231.1 ps Reaction : °OH^0 (-10516) + H^0 (-11896) -> No product -At time : 231.1 ps Reaction : °OH^0 (-11085) + °OH^0 (-8172) -> H2O2^0 (-11995) -At time : 231.1 ps Reaction : e_aq^-1 (-601) + H3O^1 (-11066) -> H^0 (-11996) -At time : 231.1 ps Reaction : °OH^0 (-11043) + °OH^0 (-10170) -> H2O2^0 (-11997) -At time : 231.1 ps Reaction : °OH^0 (-9151) + °OH^0 (-10609) -> H2O2^0 (-11998) -At time : 231.1 ps Reaction : °OH^0 (-10602) + H^0 (-10603) -> No product -At time : 231.1 ps Reaction : °OH^0 (-10495) + °OH^0 (-7000) -> H2O2^0 (-11999) -At time : 231.1 ps Reaction : °OH^0 (-9645) + °OH^0 (-6532) -> H2O2^0 (-12000) -At time : 231.1 ps Reaction : °OH^0 (-9313) + °OH^0 (-8501) -> H2O2^0 (-12001) -At time : 231.1 ps Reaction : H^0 (-9112) + °OH^0 (-7618) -> No product -At time : 231.1 ps Reaction : °OH^0 (-8230) + °OH^0 (-8915) -> H2O2^0 (-12002) -At time : 231.1 ps Reaction : °OH^0 (-6200) + °OH^0 (-8701) -> H2O2^0 (-12003) -At time : 231.1 ps Reaction : °OH^0 (-7762) + e_aq^-1 (-8533) -> OH^-1 (-12004) -At time : 231.1 ps Reaction : e_aq^-1 (-1516) + H3O^1 (-7963) -> H^0 (-12005) -At time : 231.1 ps Reaction : e_aq^-1 (-4418) + H3O^1 (-6881) -> H^0 (-12006) -At time : 241.1 ps Reaction : H3O^1 (-5909) + OH^-1 (-11845) -> No product -At time : 241.1 ps Reaction : °OH^0 (-11007) + e_aq^-1 (-8593) -> OH^-1 (-12007) -At time : 241.1 ps Reaction : H^0 (-10374) + °OH^0 (-10246) -> No product -At time : 241.1 ps Reaction : °OH^0 (-9586) + °OH^0 (-9584) -> H2O2^0 (-12008) -At time : 241.1 ps Reaction : °OH^0 (-6706) + °OH^0 (-8788) -> H2O2^0 (-12009) -At time : 241.1 ps Reaction : e_aq^-1 (-3338) + H3O^1 (-7683) -> H^0 (-12010) -At time : 241.1 ps Reaction : e_aq^-1 (-940) + H3O^1 (-7113) -> H^0 (-12011) -At time : 241.1 ps Reaction : e_aq^-1 (-2770) + H3O^1 (-6505) -> H^0 (-12012) -At time : 241.1 ps Reaction : °OH^0 (-5908) + °OH^0 (-6442) -> H2O2^0 (-12013) -At time : 241.1 ps Reaction : e_aq^-1 (-4138) + e_aq^-1 (-2077) -> OH^-1 (-12014) + OH^-1 (-12015) + H_2^0 (-12016) -At time : 241.1 ps Reaction : OH^-1 (-12007) + H3O^1 (-8075) -> No product -At time : 251.1 ps Reaction : OH^-1 (-11986) + H3O^1 (-7043) -> No product -At time : 251.1 ps Reaction : H2O2^0 (-11776) + e_aq^-1 (-4984) -> OH^-1 (-12017) + °OH^0 (-12018) -At time : 251.1 ps Reaction : H^0 (-11182) + °OH^0 (-7396) -> No product -At time : 251.1 ps Reaction : °OH^0 (-10385) + °OH^0 (-11102) -> H2O2^0 (-12019) -At time : 251.1 ps Reaction : °OH^0 (-11055) + °OH^0 (-7184) -> H2O2^0 (-12020) -At time : 251.1 ps Reaction : °OH^0 (-10278) + °OH^0 (-8288) -> H2O2^0 (-12021) -At time : 251.1 ps Reaction : °OH^0 (-9993) + H^0 (-9997) -> No product -At time : 251.1 ps Reaction : °OH^0 (-9783) + °OH^0 (-7846) -> H2O2^0 (-12022) -At time : 251.1 ps Reaction : °OH^0 (-9637) + °OH^0 (-6500) -> H2O2^0 (-12023) -At time : 251.1 ps Reaction : °OH^0 (-9295) + °OH^0 (-7026) -> H2O2^0 (-12024) -At time : 251.1 ps Reaction : °OH^0 (-7052) + H^0 (-9058) -> No product -At time : 251.1 ps Reaction : °OH^0 (-6400) + °OH^0 (-8747) -> H2O2^0 (-12025) -At time : 251.1 ps Reaction : e_aq^-1 (-1138) + H3O^1 (-8511) -> H^0 (-12026) -At time : 251.1 ps Reaction : °OH^0 (-8040) + °OH^0 (-8507) -> H2O2^0 (-12027) -At time : 251.1 ps Reaction : °OH^0 (-7418) + e_aq^-1 (-8413) -> OH^-1 (-12028) -At time : 251.1 ps Reaction : °OH^0 (-5772) + °OH^0 (-6630) -> H2O2^0 (-12029) -At time : 261.1 ps Reaction : H3O^1 (-8409) + OH^-1 (-12028) -> No product -At time : 261.1 ps Reaction : H3O^1 (-6455) + OH^-1 (-12004) -> No product -At time : 261.1 ps Reaction : e_aq^-1 (-529) + °OH^0 (-11089) -> OH^-1 (-12030) -At time : 261.1 ps Reaction : H^0 (-10636) + °OH^0 (-10637) -> No product -At time : 261.1 ps Reaction : °OH^0 (-9133) + °OH^0 (-10322) -> H2O2^0 (-12031) -At time : 261.1 ps Reaction : H^0 (-10183) + °OH^0 (-8144) -> No product -At time : 261.1 ps Reaction : °OH^0 (-9097) + e_aq^-1 (-3501) -> OH^-1 (-12032) -At time : 261.1 ps Reaction : °OH^0 (-6028) + °OH^0 (-9053) -> H2O2^0 (-12033) -At time : 261.1 ps Reaction : °OH^0 (-7298) + °OH^0 (-8254) -> H2O2^0 (-12034) -At time : 261.1 ps Reaction : °OH^0 (-6952) + °OH^0 (-6956) -> H2O2^0 (-12035) -At time : 261.1 ps Reaction : °OH^0 (-5968) + °OH^0 (-6726) -> H2O2^0 (-12036) -At time : 261.1 ps Reaction : e_aq^-1 (-3283) + °OH^0 (-5882) -> OH^-1 (-12037) -At time : 271.1 ps Reaction : H3O^1 (-6243) + OH^-1 (-12037) -> No product -At time : 271.1 ps Reaction : °OH^0 (-11303) + °OH^0 (-9231) -> H2O2^0 (-12038) -At time : 271.1 ps Reaction : °OH^0 (-10908) + e_aq^-1 (-4429) -> OH^-1 (-12039) -At time : 271.1 ps Reaction : e_aq^-1 (-650) + H3O^1 (-10192) -> H^0 (-12040) -At time : 271.1 ps Reaction : H^0 (-9898) + °OH^0 (-9025) -> No product -At time : 271.1 ps Reaction : °OH^0 (-9497) + e_aq^-1 (-3535) -> OH^-1 (-12041) -At time : 271.1 ps Reaction : °OH^0 (-9280) + e_aq^-1 (-4544) -> OH^-1 (-12042) -At time : 271.1 ps Reaction : °OH^0 (-9209) + °OH^0 (-6462) -> H2O2^0 (-12043) -At time : 271.1 ps Reaction : e_aq^-1 (-4531) + °OH^0 (-8831) -> OH^-1 (-12044) -At time : 271.1 ps Reaction : °OH^0 (-8765) + e_aq^-1 (-8767) -> OH^-1 (-12045) -At time : 271.1 ps Reaction : °OH^0 (-8615) + e_aq^-1 (-8617) -> OH^-1 (-12046) -At time : 271.1 ps Reaction : e_aq^-1 (-320) + H3O^1 (-8251) -> H^0 (-12047) -At time : 271.1 ps Reaction : OH^-1 (-12046) + H3O^1 (-7373) -> No product -At time : 271.1 ps Reaction : OH^-1 (-12039) + H3O^1 (-6907) -> No product -At time : 271.1 ps Reaction : °OH^0 (-10083) + e_aq^-1 (-1153) -> OH^-1 (-12048) -At time : 281.1 ps Reaction : H3O^1 (-6445) + OH^-1 (-12045) -> No product -At time : 281.1 ps Reaction : °OH^0 (-12018) + e_aq^-1 (-8875) -> OH^-1 (-12049) -At time : 281.1 ps Reaction : OH^-1 (-11993) + H3O^1 (-7719) -> No product -At time : 281.1 ps Reaction : H3O^1 (-6097) + OH^-1 (-11976) -> No product -At time : 281.1 ps Reaction : OH^-1 (-11933) + H3O^1 (-8279) -> No product -At time : 281.1 ps Reaction : H^0 (-10023) + °OH^0 (-6964) -> No product -At time : 281.1 ps Reaction : °OH^0 (-9778) + °OH^0 (-9781) -> H2O2^0 (-12050) -At time : 281.1 ps Reaction : °OH^0 (-9271) + °OH^0 (-6930) -> H2O2^0 (-12051) -At time : 281.1 ps Reaction : °OH^0 (-6568) + H^0 (-9004) -> No product -At time : 281.1 ps Reaction : e_aq^-1 (-828) + °OH^0 (-7486) -> OH^-1 (-12052) -At time : 281.1 ps Reaction : °OH^0 (-6974) + °OH^0 (-6982) -> H2O2^0 (-12053) -At time : 291.1 ps Reaction : OH^-1 (-12030) + H3O^1 (-8189) -> No product -At time : 291.1 ps Reaction : OH^-1 (-11887) + H3O^1 (-7393) -> No product -At time : 291.1 ps Reaction : °OH^0 (-11386) + °OH^0 (-10361) -> H2O2^0 (-12054) -At time : 291.1 ps Reaction : °OH^0 (-10355) + °OH^0 (-11133) -> H2O2^0 (-12055) -At time : 291.1 ps Reaction : °OH^0 (-10823) + °OH^0 (-9894) -> H2O2^0 (-12056) -At time : 291.1 ps Reaction : H3O^1 (-9468) + e_aq^-1 (-3495) -> H^0 (-12057) -At time : 291.1 ps Reaction : °OH^0 (-9354) + °OH^0 (-7292) -> H2O2^0 (-12058) -At time : 291.1 ps Reaction : °OH^0 (-9123) + °OH^0 (-7452) -> H2O2^0 (-12059) -At time : 291.1 ps Reaction : e_aq^-1 (-4205) + H3O^1 (-8802) -> H^0 (-12060) -At time : 291.1 ps Reaction : e_aq^-1 (-5712) + °OH^0 (-7376) -> OH^-1 (-12061) -At time : 291.1 ps Reaction : OH^-1 (-12061) + H3O^1 (-7371) -> No product -At time : 301.1 ps Reaction : OH^-1 (-12049) + H3O^1 (-6051) -> No product -At time : 301.1 ps Reaction : H^0 (-11292) + °OH^0 (-6088) -> No product -At time : 301.1 ps Reaction : °OH^0 (-6086) + °OH^0 (-11262) -> H2O2^0 (-12062) -At time : 301.1 ps Reaction : °OH^0 (-10427) + °OH^0 (-11256) -> H2O2^0 (-12063) -At time : 301.1 ps Reaction : °OH^0 (-10284) + °OH^0 (-10330) -> H2O2^0 (-12064) -At time : 301.1 ps Reaction : e_aq^-1 (-2950) + °OH^0 (-9561) -> OH^-1 (-12065) -At time : 301.1 ps Reaction : e_aq^-1 (-8380) + H3O^1 (-8832) -> H^0 (-12066) -At time : 301.1 ps Reaction : H3O^1 (-7123) + e_aq^-1 (-8452) -> H^0 (-12067) -At time : 301.1 ps Reaction : °OH^0 (-7518) + e_aq^-1 (-8446) -> OH^-1 (-12068) -At time : 301.1 ps Reaction : H3O^1 (-6537) + e_aq^-1 (-8347) -> H^0 (-12069) -At time : 301.1 ps Reaction : e_aq^-1 (-1251) + H3O^1 (-8009) -> H^0 (-12070) -At time : 301.1 ps Reaction : e_aq^-1 (-4996) + H3O^1 (-7495) -> H^0 (-12071) -At time : 301.1 ps Reaction : e_aq^-1 (-5410) + °OH^0 (-7430) -> OH^-1 (-12072) -At time : 301.1 ps Reaction : H3O^1 (-10561) + e_aq^-1 (-4121) -> H^0 (-12073) -At time : 311.1 ps Reaction : H3O^1 (-6257) + OH^-1 (-12041) -> No product -At time : 311.1 ps Reaction : OH^-1 (-11913) + H3O^1 (-6933) -> No product -At time : 311.1 ps Reaction : H2O2^0 (-11677) + e_aq^-1 (-4698) -> OH^-1 (-12074) + °OH^0 (-12075) -At time : 311.1 ps Reaction : H^0 (-11037) + °OH^0 (-7162) -> No product -At time : 311.1 ps Reaction : H^0 (-10914) + e_aq^-1 (-1566) -> OH^-1 (-12076) + H_2^0 (-12077) -At time : 311.1 ps Reaction : °OH^0 (-10134) + e_aq^-1 (-8398) -> OH^-1 (-12078) -At time : 311.1 ps Reaction : °OH^0 (-9958) + °OH^0 (-7926) -> H2O2^0 (-12079) -At time : 311.1 ps Reaction : H3O^1 (-9922) + e_aq^-1 (-4346) -> H^0 (-12080) -At time : 311.1 ps Reaction : °OH^0 (-9790) + °OH^0 (-5962) -> H2O2^0 (-12081) -At time : 311.1 ps Reaction : °OH^0 (-9598) + H^0 (-9596) -> No product -At time : 311.1 ps Reaction : e_aq^-1 (-4366) + H3O^1 (-7589) -> H^0 (-12082) -At time : 311.1 ps Reaction : H3O^1 (-10963) + OH^-1 (-12074) -> No product -At time : 311.1 ps Reaction : e_aq^-1 (-4692) + H3O^1 (-8001) -> H^0 (-12083) -At time : 321.1 ps Reaction : H3O^1 (-9918) + OH^-1 (-11920) -> No product -At time : 321.1 ps Reaction : OH^-1 (-11809) + H3O^1 (-8931) -> No product -At time : 321.1 ps Reaction : H3O^1 (-7325) + OH^-1 (-11559) -> No product -At time : 321.1 ps Reaction : H^0 (-11186) + H^0 (-9371) -> H_2^0 (-12084) -At time : 321.1 ps Reaction : e_aq^-1 (-574) + H^0 (-11077) -> OH^-1 (-12085) + H_2^0 (-12086) -At time : 321.1 ps Reaction : °OH^0 (-10918) + °OH^0 (-6926) -> H2O2^0 (-12087) -At time : 321.1 ps Reaction : °OH^0 (-10848) + °OH^0 (-8561) -> H2O2^0 (-12088) -At time : 321.1 ps Reaction : °OH^0 (-9257) + °OH^0 (-10817) -> H2O2^0 (-12089) -At time : 321.1 ps Reaction : °OH^0 (-10373) + e_aq^-1 (-8644) -> OH^-1 (-12090) -At time : 321.1 ps Reaction : e_aq^-1 (-31) + °OH^0 (-10309) -> OH^-1 (-12091) -At time : 321.1 ps Reaction : °OH^0 (-9498) + e_aq^-1 (-3551) -> OH^-1 (-12092) -At time : 321.1 ps Reaction : °OH^0 (-8076) + °OH^0 (-8861) -> H2O2^0 (-12093) -At time : 321.1 ps Reaction : °OH^0 (-6578) + °OH^0 (-6582) -> H2O2^0 (-12094) -At time : 321.1 ps Reaction : e_aq^-1 (-3764) + °OH^0 (-6534) -> OH^-1 (-12095) -At time : 321.1 ps Reaction : OH^-1 (-12090) + H3O^1 (-7429) -> No product -At time : 331.1 ps Reaction : H3O^1 (-6151) + OH^-1 (-12017) -> No product -At time : 331.1 ps Reaction : OH^-1 (-11734) + H3O^1 (-9906) -> No product -At time : 331.1 ps Reaction : H^0 (-11198) + e_aq^-1 (-3509) -> OH^-1 (-12096) + H_2^0 (-12097) -At time : 331.1 ps Reaction : e_aq^-1 (-4423) + H3O^1 (-10903) -> H^0 (-12098) -At time : 331.1 ps Reaction : °OH^0 (-10465) + °OH^0 (-8585) -> H2O2^0 (-12099) -At time : 331.1 ps Reaction : °OH^0 (-10113) + °OH^0 (-10117) -> H2O2^0 (-12100) -At time : 331.1 ps Reaction : °OH^0 (-10047) + e_aq^-1 (-4637) -> OH^-1 (-12101) -At time : 331.1 ps Reaction : H^0 (-9644) + °OH^0 (-6522) -> No product -At time : 331.1 ps Reaction : H^0 (-9463) + °OH^0 (-7682) -> No product -At time : 331.1 ps Reaction : °OH^0 (-9255) + °OH^0 (-7626) -> H2O2^0 (-12102) -At time : 331.1 ps Reaction : e_aq^-1 (-624) + H3O^1 (-8898) -> H^0 (-12103) -At time : 331.1 ps Reaction : e_aq^-1 (-4221) + °OH^0 (-7904) -> OH^-1 (-12104) -At time : 331.1 ps Reaction : °OH^0 (-6168) + °OH^0 (-7538) -> H2O2^0 (-12105) -At time : 331.1 ps Reaction : °OH^0 (-6888) + °OH^0 (-6890) -> H2O2^0 (-12106) -At time : 341.1 ps Reaction : H3O^1 (-6837) + OH^-1 (-11909) -> No product -At time : 341.1 ps Reaction : OH^-1 (-11890) + H3O^1 (-8817) -> No product -At time : 341.1 ps Reaction : OH^-1 (-11459) + H3O^1 (-8367) -> No product -At time : 341.1 ps Reaction : °OH^0 (-10220) + °OH^0 (-8202) -> H2O2^0 (-12107) -At time : 341.1 ps Reaction : °OH^0 (-10216) + °OH^0 (-6138) -> H2O2^0 (-12108) -At time : 341.1 ps Reaction : °OH^0 (-10126) + °OH^0 (-7506) -> H2O2^0 (-12109) -At time : 341.1 ps Reaction : e_aq^-1 (-4060) + °OH^0 (-9812) -> OH^-1 (-12110) -At time : 341.1 ps Reaction : e_aq^-1 (-5115) + H3O^1 (-7169) -> H^0 (-12111) -At time : 341.1 ps Reaction : °OH^0 (-6784) + °OH^0 (-6786) -> H2O2^0 (-12112) -At time : 341.1 ps Reaction : e_aq^-1 (-1994) + H3O^1 (-6753) -> H^0 (-12113) -At time : 351.1 ps Reaction : H^0 (-11829) + e_aq^-1 (-4580) -> OH^-1 (-12114) + H_2^0 (-12115) -At time : 351.1 ps Reaction : °OH^0 (-6140) + H^0 (-11259) -> No product -At time : 351.1 ps Reaction : °OH^0 (-9885) + H^0 (-11232) -> No product -At time : 351.1 ps Reaction : °OH^0 (-10798) + °OH^0 (-6748) -> H2O2^0 (-12116) -At time : 351.1 ps Reaction : °OH^0 (-9889) + °OH^0 (-5982) -> H2O2^0 (-12117) -At time : 351.1 ps Reaction : °OH^0 (-9360) + e_aq^-1 (-5474) -> OH^-1 (-12118) -At time : 351.1 ps Reaction : °OH^0 (-6650) + °OH^0 (-8702) -> H2O2^0 (-12119) -At time : 351.1 ps Reaction : e_aq^-1 (-2904) + H3O^1 (-6409) -> H^0 (-12120) -At time : 351.1 ps Reaction : e_aq^-1 (-3220) + °OH^0 (-6266) -> OH^-1 (-12121) -At time : 351.1 ps Reaction : °OH^0 (-9976) + °OH^0 (-6924) -> H2O2^0 (-12122) -At time : 351.1 ps Reaction : OH^-1 (-5756) + H3O^1 (-5983) -> No product -At time : 361.1 ps Reaction : OH^-1 (-11971) + H3O^1 (-6187) -> No product -At time : 361.1 ps Reaction : °OH^0 (-7274) + H^0 (-11882) -> No product -At time : 361.1 ps Reaction : H^0 (-11392) + °OH^0 (-6102) -> No product -At time : 361.1 ps Reaction : °OH^0 (-10887) + °OH^0 (-9031) -> H2O2^0 (-12123) -At time : 361.1 ps Reaction : °OH^0 (-10886) + H^0 (-9032) -> No product -At time : 361.1 ps Reaction : °OH^0 (-10233) + e_aq^-1 (-8407) -> OH^-1 (-12124) -At time : 361.1 ps Reaction : H^0 (-10077) + °OH^0 (-8012) -> No product -At time : 361.1 ps Reaction : H^0 (-9310) + e_aq^-1 (-4946) -> OH^-1 (-12125) + H_2^0 (-12126) -At time : 361.1 ps Reaction : °OH^0 (-6214) + °OH^0 (-7678) -> H2O2^0 (-12127) -At time : 361.1 ps Reaction : e_aq^-1 (-5185) + °OH^0 (-7464) -> OH^-1 (-12128) -At time : 361.1 ps Reaction : H3O^1 (-7527) + OH^-1 (-12048) -> No product -At time : 371.1 ps Reaction : OH^-1 (-12091) + H3O^1 (-8616) -> No product -At time : 371.1 ps Reaction : H3O^1 (-8427) + OH^-1 (-11879) -> No product -At time : 371.1 ps Reaction : H^0 (-10655) + °OH^0 (-11201) -> No product -At time : 371.1 ps Reaction : H^0 (-9241) + °OH^0 (-10762) -> No product -At time : 371.1 ps Reaction : H^0 (-10445) + e_aq^-1 (-4850) -> OH^-1 (-12129) + H_2^0 (-12130) -At time : 371.1 ps Reaction : °OH^0 (-5742) + °OH^0 (-8849) -> H2O2^0 (-12131) -At time : 371.1 ps Reaction : °OH^0 (-6654) + °OH^0 (-7646) -> H2O2^0 (-12132) -At time : 371.1 ps Reaction : e_aq^-1 (-2473) + H3O^1 (-6613) -> H^0 (-12133) -At time : 381.1 ps Reaction : H3O^1 (-7107) + OH^-1 (-12129) -> No product -At time : 381.1 ps Reaction : OH^-1 (-12096) + H3O^1 (-7689) -> No product -At time : 381.1 ps Reaction : e_aq^-1 (-5432) + H2O2^0 (-12055) -> OH^-1 (-12134) + °OH^0 (-12135) -At time : 381.1 ps Reaction : e_aq^-1 (-921) + H2O2^0 (-11691) -> OH^-1 (-12136) + °OH^0 (-12137) -At time : 381.1 ps Reaction : H^0 (-10640) + °OH^0 (-9491) -> No product -At time : 381.1 ps Reaction : °OH^0 (-10560) + °OH^0 (-7878) -> H2O2^0 (-12138) -At time : 381.1 ps Reaction : °OH^0 (-10489) + °OH^0 (-10051) -> H2O2^0 (-12139) -At time : 381.1 ps Reaction : °OH^0 (-10009) + °OH^0 (-9043) -> H2O2^0 (-12140) -At time : 381.1 ps Reaction : H3O^1 (-9585) + e_aq^-1 (-8752) -> H^0 (-12141) -At time : 381.1 ps Reaction : °OH^0 (-7192) + °OH^0 (-9073) -> H2O2^0 (-12142) -At time : 381.1 ps Reaction : °OH^0 (-8074) + °OH^0 (-9063) -> H2O2^0 (-12143) -At time : 381.1 ps Reaction : °OH^0 (-6394) + e_aq^-1 (-8746) -> OH^-1 (-12144) -At time : 381.1 ps Reaction : e_aq^-1 (-5303) + °OH^0 (-7260) -> OH^-1 (-12145) -At time : 381.1 ps Reaction : OH^-1 (-12144) + H3O^1 (-6387) -> No product -At time : 381.1 ps Reaction : H3O^1 (-11131) + OH^-1 (-12134) -> No product -At time : 391.1 ps Reaction : OH^-1 (-12052) + H3O^1 (-8883) -> No product -At time : 391.1 ps Reaction : °OH^0 (-10250) + H^0 (-11761) -> No product -At time : 391.1 ps Reaction : e_aq^-1 (-477) + H3O^1 (-11101) -> H^0 (-12146) -At time : 391.1 ps Reaction : °OH^0 (-9746) + °OH^0 (-10752) -> H2O2^0 (-12147) -At time : 391.1 ps Reaction : H^0 (-10523) + °OH^0 (-6872) -> No product -At time : 391.1 ps Reaction : °OH^0 (-9395) + °OH^0 (-8266) -> H2O2^0 (-12148) -At time : 391.1 ps Reaction : °OH^0 (-7198) + °OH^0 (-8949) -> H2O2^0 (-12149) -At time : 391.1 ps Reaction : °OH^0 (-7488) + °OH^0 (-8882) -> H2O2^0 (-12150) -At time : 391.1 ps Reaction : OH^-1 (-5723) + H3O^1 (-7437) -> No product -At time : 391.1 ps Reaction : e_aq^-1 (-766) + °OH^0 (-7152) -> OH^-1 (-12151) -At time : 391.1 ps Reaction : e_aq^-1 (-4512) + H3O^1 (-6969) -> H^0 (-12152) -At time : 391.1 ps Reaction : °OH^0 (-6646) + °OH^0 (-6656) -> H2O2^0 (-12153) -At time : 391.1 ps Reaction : e_aq^-1 (-483) + H3O^1 (-6079) -> H^0 (-12154) -At time : 391.1 ps Reaction : °OH^0 (-10348) + °OH^0 (-11156) -> H2O2^0 (-12155) -At time : 401.1 ps Reaction : H3O^1 (-10403) + OH^-1 (-12128) -> No product -At time : 401.1 ps Reaction : H^0 (-10372) + °OH^0 (-7276) -> No product -At time : 401.1 ps Reaction : °OH^0 (-7424) + °OH^0 (-9083) -> H2O2^0 (-12156) -At time : 401.1 ps Reaction : e_aq^-1 (-5058) + H3O^1 (-8135) -> H^0 (-12157) -At time : 401.1 ps Reaction : e_aq^-1 (-26) + °OH^0 (-7374) -> OH^-1 (-12158) -At time : 401.1 ps Reaction : e_aq^-1 (-2941) + e_aq^-1 (-3641) -> OH^-1 (-12159) + OH^-1 (-12160) + H_2^0 (-12161) -At time : 411.1 ps Reaction : OH^-1 (-12158) + H3O^1 (-6111) -> No product -At time : 411.1 ps Reaction : H3O^1 (-9931) + OH^-1 (-11868) -> No product -At time : 411.1 ps Reaction : H^0 (-11354) + e_aq^-1 (-4619) -> OH^-1 (-12162) + H_2^0 (-12163) -At time : 411.1 ps Reaction : °OH^0 (-10434) + e_aq^-1 (-8869) -> OH^-1 (-12164) -At time : 411.1 ps Reaction : °OH^0 (-10271) + H^0 (-9361) -> No product -At time : 411.1 ps Reaction : e_aq^-1 (-890) + °OH^0 (-10143) -> OH^-1 (-12165) -At time : 411.1 ps Reaction : H^0 (-9757) + °OH^0 (-6206) -> No product -At time : 411.1 ps Reaction : °OH^0 (-9654) + °OH^0 (-5828) -> H2O2^0 (-12166) -At time : 411.1 ps Reaction : e_aq^-1 (-2946) + H3O^1 (-7745) -> H^0 (-12167) -At time : 411.1 ps Reaction : e_aq^-1 (-3532) + H3O^1 (-7699) -> H^0 (-12168) -At time : 411.1 ps Reaction : OH^-1 (-12165) + H3O^1 (-7137) -> No product -At time : 421.1 ps Reaction : H^0 (-11365) + °OH^0 (-8052) -> No product -At time : 421.1 ps Reaction : °OH^0 (-9807) + °OH^0 (-10570) -> H2O2^0 (-12169) -At time : 421.1 ps Reaction : °OH^0 (-10343) + °OH^0 (-7332) -> H2O2^0 (-12170) -At time : 421.1 ps Reaction : °OH^0 (-9333) + e_aq^-1 (-8491) -> OH^-1 (-12171) -At time : 421.1 ps Reaction : H3O^1 (-10672) + OH^-1 (-12159) -> No product -At time : 431.1 ps Reaction : OH^-1 (-12068) + H3O^1 (-7517) -> No product -At time : 431.1 ps Reaction : °OH^0 (-10726) + H^0 (-9002) -> No product -At time : 431.1 ps Reaction : °OH^0 (-10718) + °OH^0 (-10721) -> H2O2^0 (-12172) -At time : 431.1 ps Reaction : °OH^0 (-10222) + °OH^0 (-8200) -> H2O2^0 (-12173) -At time : 431.1 ps Reaction : H^0 (-9839) + °OH^0 (-9015) -> No product -At time : 431.1 ps Reaction : °OH^0 (-6912) + °OH^0 (-8824) -> H2O2^0 (-12174) -At time : 431.1 ps Reaction : °OH^0 (-6436) + °OH^0 (-8760) -> H2O2^0 (-12175) -At time : 431.1 ps Reaction : e_aq^-1 (-5258) + °OH^0 (-8196) -> OH^-1 (-12176) -At time : 441.1 ps Reaction : e_aq^-1 (-4436) + H^0 (-12098) -> OH^-1 (-12177) + H_2^0 (-12178) -At time : 441.1 ps Reaction : OH^-1 (-12092) + H3O^1 (-6267) -> No product -At time : 441.1 ps Reaction : °OH^0 (-9591) + °OH^0 (-10697) -> H2O2^0 (-12179) -At time : 441.1 ps Reaction : H3O^1 (-10617) + e_aq^-1 (-3469) -> H^0 (-12180) -At time : 441.1 ps Reaction : °OH^0 (-6208) + °OH^0 (-7672) -> H2O2^0 (-12181) -At time : 441.1 ps Reaction : e_aq^-1 (-3467) + H3O^1 (-6213) -> H^0 (-12182) -At time : 451.1 ps Reaction : OH^-1 (-11940) + H3O^1 (-7571) -> No product -At time : 451.1 ps Reaction : °OH^0 (-11317) + H^0 (-11318) -> No product -At time : 451.1 ps Reaction : °OH^0 (-11204) + °OH^0 (-6470) -> H2O2^0 (-12183) -At time : 451.1 ps Reaction : °OH^0 (-10005) + °OH^0 (-7962) -> H2O2^0 (-12184) -At time : 451.1 ps Reaction : °OH^0 (-9700) + °OH^0 (-7796) -> H2O2^0 (-12185) -At time : 451.1 ps Reaction : °OH^0 (-9157) + e_aq^-1 (-3473) -> OH^-1 (-12186) -At time : 451.1 ps Reaction : e_aq^-1 (-8440) + °OH^0 (-8675) -> OH^-1 (-12187) -At time : 451.1 ps Reaction : e_aq^-1 (-517) + H3O^1 (-8185) -> H^0 (-12188) -At time : 451.1 ps Reaction : e_aq^-1 (-3098) + H3O^1 (-6321) -> H^0 (-12189) -At time : 451.1 ps Reaction : e_aq^-1 (-924) + e_aq^-1 (-4972) -> OH^-1 (-12190) + OH^-1 (-12191) + H_2^0 (-12192) -At time : 461.1 ps Reaction : OH^-1 (-12176) + H3O^1 (-8197) -> No product -At time : 461.1 ps Reaction : H3O^1 (-10186) + OH^-1 (-12171) -> No product -At time : 461.1 ps Reaction : H^0 (-12157) + °OH^0 (-10180) -> No product -At time : 461.1 ps Reaction : H^0 (-10838) + °OH^0 (-6194) -> No product -At time : 461.1 ps Reaction : °OH^0 (-10705) + °OH^0 (-6492) -> H2O2^0 (-12193) -At time : 461.1 ps Reaction : H^0 (-10257) + °OH^0 (-7432) -> No product -At time : 461.1 ps Reaction : e_aq^-1 (-1917) + H3O^1 (-6827) -> H^0 (-12194) -At time : 471.1 ps Reaction : OH^-1 (-12076) + H3O^1 (-8520) -> No product -At time : 471.1 ps Reaction : °OH^0 (-6148) + °OH^0 (-8106) -> H2O2^0 (-12195) -At time : 481.1 ps Reaction : H3O^1 (-7581) + OH^-1 (-12177) -> No product -At time : 481.1 ps Reaction : °OH^0 (-10974) + H^0 (-9298) -> No product -At time : 481.1 ps Reaction : °OH^0 (-10919) + H^0 (-9038) -> No product -At time : 481.1 ps Reaction : H^0 (-10429) + °OH^0 (-6054) -> No product -At time : 481.1 ps Reaction : °OH^0 (-9234) + °OH^0 (-7642) -> H2O2^0 (-12196) -At time : 481.1 ps Reaction : °OH^0 (-7118) + °OH^0 (-8866) -> H2O2^0 (-12197) -At time : 481.1 ps Reaction : e_aq^-1 (-4950) + °OH^0 (-8092) -> OH^-1 (-12198) -At time : 481.1 ps Reaction : e_aq^-1 (-5482) + H3O^1 (-7307) -> H^0 (-12199) -At time : 481.1 ps Reaction : °OH^0 (-7426) + °OH^0 (-8246) -> H2O2^0 (-12200) -At time : 491.1 ps Reaction : OH^-1 (-12136) + H3O^1 (-8087) -> No product -At time : 491.1 ps Reaction : e_aq^-1 (-5637) + H3O^1 (-11278) -> H^0 (-12201) -At time : 491.1 ps Reaction : °OH^0 (-6178) + °OH^0 (-11243) -> H2O2^0 (-12202) -At time : 491.1 ps Reaction : e_aq^-1 (-5026) + H^0 (-9408) -> OH^-1 (-12203) + H_2^0 (-12204) -At time : 491.1 ps Reaction : °OH^0 (-6132) + °OH^0 (-8256) -> H2O2^0 (-12205) -At time : 491.1 ps Reaction : °OH^0 (-6466) + °OH^0 (-7764) -> H2O2^0 (-12206) -At time : 491.1 ps Reaction : e_aq^-1 (-3923) + °OH^0 (-5952) -> OH^-1 (-12207) -At time : 501.1 ps Reaction : H3O^1 (-10751) + OH^-1 (-12207) -> No product -At time : 501.1 ps Reaction : °OH^0 (-11367) + °OH^0 (-11193) -> H2O2^0 (-12208) -At time : 501.1 ps Reaction : °OH^0 (-11143) + °OH^0 (-8636) -> H2O2^0 (-12209) -At time : 501.1 ps Reaction : °OH^0 (-10989) + °OH^0 (-8044) -> H2O2^0 (-12210) -At time : 501.1 ps Reaction : e_aq^-1 (-1362) + H3O^1 (-9279) -> H^0 (-12211) -At time : 501.1 ps Reaction : °OH^0 (-6576) + °OH^0 (-9005) -> H2O2^0 (-12212) -At time : 501.1 ps Reaction : e_aq^-1 (-5118) + °OH^0 (-8146) -> OH^-1 (-12213) -At time : 511.1 ps Reaction : H3O^1 (-11099) + OH^-1 (-12145) -> No product -At time : 511.1 ps Reaction : e_aq^-1 (-1701) + H3O^1 (-6901) -> H^0 (-12214) -At time : 521.1 ps Reaction : OH^-1 (-12114) + H3O^1 (-7563) -> No product -At time : 521.1 ps Reaction : °OH^0 (-9542) + e_aq^-1 (-8725) -> OH^-1 (-12215) -At time : 521.1 ps Reaction : e_aq^-1 (-4660) + °OH^0 (-8582) -> OH^-1 (-12216) -At time : 521.1 ps Reaction : °OH^0 (-6692) + °OH^0 (-7844) -> H2O2^0 (-12217) -At time : 521.1 ps Reaction : e_aq^-1 (-2599) + H3O^1 (-6549) -> H^0 (-12218) -At time : 531.1 ps Reaction : H^0 (-9256) + H^0 (-12073) -> H_2^0 (-12219) -At time : 531.1 ps Reaction : H2O2^0 (-11674) + e_aq^-1 (-8659) -> OH^-1 (-12220) + °OH^0 (-12221) -At time : 531.1 ps Reaction : H^0 (-11567) + °OH^0 (-8519) -> No product -At time : 531.1 ps Reaction : e_aq^-1 (-5282) + °OH^0 (-8214) -> OH^-1 (-12222) -At time : 531.1 ps Reaction : °OH^0 (-7638) + °OH^0 (-7834) -> H2O2^0 (-12223) -At time : 531.1 ps Reaction : OH^-1 (-12220) + H3O^1 (-8886) -> No product -At time : 541.1 ps Reaction : H^0 (-11595) + °OH^0 (-7766) -> No product -At time : 541.1 ps Reaction : °OH^0 (-10818) + H^0 (-11234) -> No product -At time : 541.1 ps Reaction : °OH^0 (-10493) + e_aq^-1 (-4647) -> OH^-1 (-12224) -At time : 541.1 ps Reaction : °OH^0 (-9243) + °OH^0 (-7848) -> H2O2^0 (-12225) -At time : 541.1 ps Reaction : °OH^0 (-6120) + °OH^0 (-9093) -> H2O2^0 (-12226) -At time : 541.1 ps Reaction : e_aq^-1 (-718) + H3O^1 (-7475) -> H^0 (-12227) -At time : 541.1 ps Reaction : H3O^1 (-10046) + OH^-1 (-12224) -> No product -At time : 551.1 ps Reaction : H3O^1 (-10939) + e_aq^-1 (-8683) -> H^0 (-12228) -At time : 551.1 ps Reaction : e_aq^-1 (-87) + °OH^0 (-10295) -> OH^-1 (-12229) -At time : 551.1 ps Reaction : H^0 (-9857) + e_aq^-1 (-4145) -> OH^-1 (-12230) + H_2^0 (-12231) -At time : 551.1 ps Reaction : e_aq^-1 (-3984) + H3O^1 (-7833) -> H^0 (-12232) -At time : 551.1 ps Reaction : e_aq^-1 (-875) + °OH^0 (-7140) -> OH^-1 (-12233) -At time : 551.1 ps Reaction : °OH^0 (-5948) + °OH^0 (-6628) -> H2O2^0 (-12234) -At time : 561.1 ps Reaction : H3O^1 (-10855) + OH^-1 (-11984) -> No product -At time : 561.1 ps Reaction : °OH^0 (-10202) + °OH^0 (-7222) -> H2O2^0 (-12235) -At time : 571.1 ps Reaction : OH^-1 (-12065) + H3O^1 (-6381) -> No product -At time : 571.1 ps Reaction : e_aq^-1 (-4663) + H2O2^0 (-11627) -> OH^-1 (-12236) + °OH^0 (-12237) -At time : 571.1 ps Reaction : H^0 (-10990) + °OH^0 (-10097) -> No product -At time : 571.1 ps Reaction : °OH^0 (-10928) + e_aq^-1 (-1461) -> OH^-1 (-12238) -At time : 571.1 ps Reaction : °OH^0 (-10527) + H^0 (-9262) -> No product -At time : 571.1 ps Reaction : °OH^0 (-10422) + °OH^0 (-8108) -> H2O2^0 (-12239) -At time : 571.1 ps Reaction : e_aq^-1 (-1080) + H3O^1 (-8033) -> H^0 (-12240) -At time : 571.1 ps Reaction : OH^-1 (-12236) + H3O^1 (-8676) -> No product -At time : 581.1 ps Reaction : H3O^1 (-10012) + OH^-1 (-12238) -> No product -At time : 581.1 ps Reaction : OH^-1 (-12162) + H3O^1 (-6177) -> No product -At time : 581.1 ps Reaction : e_aq^-1 (-395) + °OH^0 (-10243) -> OH^-1 (-12241) -At time : 581.1 ps Reaction : °OH^0 (-7444) + °OH^0 (-8405) -> H2O2^0 (-12242) -At time : 581.1 ps Reaction : e_aq^-1 (-2876) + H3O^1 (-7749) -> H^0 (-12243) -At time : 581.1 ps Reaction : °OH^0 (-6416) + °OH^0 (-7748) -> H2O2^0 (-12244) -At time : 581.1 ps Reaction : H^0 (-9381) + °OH^0 (-8318) -> No product -At time : 591.1 ps Reaction : °OH^0 (-10956) + H^0 (-9426) -> No product -At time : 591.1 ps Reaction : °OH^0 (-10499) + e_aq^-1 (-1306) -> OH^-1 (-12245) -At time : 591.1 ps Reaction : H^0 (-9353) + °OH^0 (-8918) -> No product -At time : 591.1 ps Reaction : °OH^0 (-9106) + °OH^0 (-6472) -> H2O2^0 (-12246) -At time : 591.1 ps Reaction : °OH^0 (-7708) + H^0 (-8990) -> No product -At time : 591.1 ps Reaction : e_aq^-1 (-3936) + °OH^0 (-5832) -> OH^-1 (-12247) -At time : 591.1 ps Reaction : H3O^1 (-10585) + OH^-1 (-12247) -> No product -At time : 601.1 ps Reaction : OH^-1 (-12233) + H3O^1 (-7135) -> No product -At time : 601.1 ps Reaction : H2O2^0 (-12226) + e_aq^-1 (-8467) -> OH^-1 (-12248) + °OH^0 (-12249) -At time : 601.1 ps Reaction : OH^-1 (-12151) + H3O^1 (-8119) -> No product -At time : 601.1 ps Reaction : OH^-1 (-12072) + H3O^1 (-7431) -> No product -At time : 601.1 ps Reaction : °OH^0 (-11213) + °OH^0 (-5960) -> H2O2^0 (-12250) -At time : 601.1 ps Reaction : °OH^0 (-11178) + °OH^0 (-10329) -> H2O2^0 (-12251) -At time : 601.1 ps Reaction : °OH^0 (-11166) + °OH^0 (-8296) -> H2O2^0 (-12252) -At time : 601.1 ps Reaction : e_aq^-1 (-1744) + °OH^0 (-10868) -> OH^-1 (-12253) -At time : 601.1 ps Reaction : °OH^0 (-9212) + H^0 (-9631) -> No product -At time : 601.1 ps Reaction : H^0 (-9551) + °OH^0 (-6374) -> No product -At time : 601.1 ps Reaction : H^0 (-9160) + H^0 (-9461) -> H_2^0 (-12254) -At time : 601.1 ps Reaction : °OH^0 (-9103) + °OH^0 (-7744) -> H2O2^0 (-12255) -At time : 601.1 ps Reaction : °OH^0 (-7132) + e_aq^-1 (-8662) -> OH^-1 (-12256) -At time : 611.1 ps Reaction : OH^-1 (-12187) + H3O^1 (-7005) -> No product -At time : 611.1 ps Reaction : °OH^0 (-11306) + °OH^0 (-5944) -> H2O2^0 (-12257) -At time : 611.1 ps Reaction : °OH^0 (-11212) + °OH^0 (-7840) -> H2O2^0 (-12258) -At time : 611.1 ps Reaction : H3O^1 (-10379) + e_aq^-1 (-5324) -> H^0 (-12259) -At time : 611.1 ps Reaction : H3O^1 (-9850) + e_aq^-1 (-8362) -> H^0 (-12260) -At time : 611.1 ps Reaction : °OH^0 (-6108) + °OH^0 (-8308) -> H2O2^0 (-12261) -At time : 621.1 ps Reaction : e_aq^-1 (-5537) + H2O2^0 (-12021) -> OH^-1 (-12262) + °OH^0 (-12263) -At time : 621.1 ps Reaction : °OH^0 (-11138) + °OH^0 (-7288) -> H2O2^0 (-12264) -At time : 621.1 ps Reaction : H3O^1 (-10822) + e_aq^-1 (-4227) -> H^0 (-12265) -At time : 621.1 ps Reaction : °OH^0 (-10635) + H^0 (-9486) -> No product -At time : 621.1 ps Reaction : °OH^0 (-10162) + H^0 (-9327) -> No product -At time : 621.1 ps Reaction : °OH^0 (-9669) + °OH^0 (-6566) -> H2O2^0 (-12266) -At time : 621.1 ps Reaction : °OH^0 (-9275) + °OH^0 (-6922) -> H2O2^0 (-12267) -At time : 631.1 ps Reaction : H3O^1 (-6801) + OH^-1 (-12230) -> No product -At time : 631.1 ps Reaction : °OH^0 (-11118) + °OH^0 (-11119) -> H2O2^0 (-12268) -At time : 631.1 ps Reaction : °OH^0 (-9707) + °OH^0 (-9705) -> H2O2^0 (-12269) -At time : 631.1 ps Reaction : °OH^0 (-9690) + °OH^0 (-5940) -> H2O2^0 (-12270) -At time : 631.1 ps Reaction : H3O^1 (-7543) + e_aq^-1 (-8515) -> H^0 (-12271) -At time : 631.1 ps Reaction : °OH^0 (-5972) + °OH^0 (-6774) -> H2O2^0 (-12272) -At time : 631.1 ps Reaction : e_aq^-1 (-4728) + °OH^0 (-6024) -> OH^-1 (-12273) -At time : 631.1 ps Reaction : OH^-1 (-12273) + H3O^1 (-6171) -> No product -At time : 641.1 ps Reaction : H^0 (-12194) + e_aq^-1 (-4215) -> OH^-1 (-12274) + H_2^0 (-12275) -At time : 641.1 ps Reaction : °OH^0 (-10269) + °OH^0 (-8925) -> H2O2^0 (-12276) -At time : 641.1 ps Reaction : °OH^0 (-9912) + °OH^0 (-7908) -> H2O2^0 (-12277) -At time : 641.1 ps Reaction : e_aq^-1 (-179) + °OH^0 (-9389) -> OH^-1 (-12278) -At time : 641.1 ps Reaction : °OH^0 (-8020) + °OH^0 (-8510) -> H2O2^0 (-12279) -At time : 651.1 ps Reaction : H3O^1 (-10245) + OH^-1 (-12241) -> No product -At time : 651.1 ps Reaction : e_aq^-1 (-487) + H^0 (-11624) -> OH^-1 (-12280) + H_2^0 (-12281) -At time : 651.1 ps Reaction : °OH^0 (-10926) + °OH^0 (-7966) -> H2O2^0 (-12282) -At time : 651.1 ps Reaction : °OH^0 (-10168) + °OH^0 (-8132) -> H2O2^0 (-12283) -At time : 651.1 ps Reaction : e_aq^-1 (-1509) + °OH^0 (-9995) -> OH^-1 (-12284) -At time : 651.1 ps Reaction : °OH^0 (-9822) + °OH^0 (-6730) -> H2O2^0 (-12285) -At time : 651.1 ps Reaction : °OH^0 (-9418) + °OH^0 (-7508) -> H2O2^0 (-12286) -At time : 651.1 ps Reaction : H^0 (-9294) + °OH^0 (-8002) -> No product -At time : 651.1 ps Reaction : °OH^0 (-5754) + °OH^0 (-8366) -> H2O2^0 (-12287) -At time : 651.1 ps Reaction : °OH^0 (-7528) + °OH^0 (-8026) -> H2O2^0 (-12288) -At time : 651.1 ps Reaction : °OH^0 (-6426) + °OH^0 (-6428) -> H2O2^0 (-12289) -At time : 651.1 ps Reaction : e_aq^-1 (-5652) + e_aq^-1 (-5641) -> OH^-1 (-12290) + OH^-1 (-12291) + H_2^0 (-12292) -At time : 651.1 ps Reaction : H3O^1 (-6943) + OH^-1 (-12284) -> No product -At time : 661.1 ps Reaction : OH^-1 (-12121) + H3O^1 (-7701) -> No product -At time : 661.1 ps Reaction : H^0 (-11086) + °OH^0 (-8178) -> No product -At time : 661.1 ps Reaction : e_aq^-1 (-2957) + °OH^0 (-6392) -> OH^-1 (-12293) -At time : 671.1 ps Reaction : H3O^1 (-8291) + OH^-1 (-12262) -> No product -At time : 671.1 ps Reaction : °OH^0 (-11057) + H^0 (-12040) -> No product -At time : 671.1 ps Reaction : °OH^0 (-8965) + H^0 (-8966) -> No product -At time : 671.1 ps Reaction : e_aq^-1 (-4473) + °OH^0 (-8825) -> OH^-1 (-12294) -At time : 671.1 ps Reaction : H3O^1 (-7361) + OH^-1 (-12290) -> No product -At time : 681.1 ps Reaction : H3O^1 (-7739) + OH^-1 (-12293) -> No product -At time : 681.1 ps Reaction : e_aq^-1 (-747) + H3O^1 (-11042) -> H^0 (-12295) -At time : 681.1 ps Reaction : H^0 (-10695) + °OH^0 (-6420) -> No product -At time : 681.1 ps Reaction : °OH^0 (-10675) + °OH^0 (-6398) -> H2O2^0 (-12296) -At time : 681.1 ps Reaction : °OH^0 (-10393) + °OH^0 (-7456) -> H2O2^0 (-12297) -At time : 681.1 ps Reaction : H^0 (-9172) + °OH^0 (-9508) -> No product -At time : 681.1 ps Reaction : e_aq^-1 (-5440) + °OH^0 (-7302) -> OH^-1 (-12298) -At time : 681.1 ps Reaction : e_aq^-1 (-3149) + H3O^1 (-6295) -> H^0 (-12299) -At time : 681.1 ps Reaction : e_aq^-1 (-3011) + °OH^0 (-7738) -> OH^-1 (-12300) -At time : 691.1 ps Reaction : e_aq^-1 (-723) + H2O2^0 (-11902) -> OH^-1 (-12301) + °OH^0 (-12302) -At time : 691.1 ps Reaction : °OH^0 (-10872) + °OH^0 (-6884) -> H2O2^0 (-12303) -At time : 691.1 ps Reaction : e_aq^-1 (-208) + H3O^1 (-10283) -> H^0 (-12304) -At time : 691.1 ps Reaction : H^0 (-10274) + °OH^0 (-8276) -> No product -At time : 691.1 ps Reaction : H^0 (-10060) + °OH^0 (-6172) -> No product -At time : 691.1 ps Reaction : H3O^1 (-7177) + OH^-1 (-12301) -> No product -At time : 691.1 ps Reaction : e_aq^-1 (-3055) + °OH^0 (-8723) -> OH^-1 (-12305) -At time : 701.1 ps Reaction : H^0 (-11804) + °OH^0 (-6482) -> No product -At time : 701.1 ps Reaction : °OH^0 (-11189) + °OH^0 (-6020) -> H2O2^0 (-12306) -At time : 701.1 ps Reaction : e_aq^-1 (-5205) + H^0 (-10217) -> OH^-1 (-12307) + H_2^0 (-12308) -At time : 701.1 ps Reaction : e_aq^-1 (-900) + H3O^1 (-7117) -> H^0 (-12309) -At time : 711.1 ps Reaction : H2O2^0 (-11794) + e_aq^-1 (-8860) -> OH^-1 (-12310) + °OH^0 (-12311) -At time : 711.1 ps Reaction : H^0 (-10924) + e_aq^-1 (-1482) -> OH^-1 (-12312) + H_2^0 (-12313) -At time : 711.1 ps Reaction : e_aq^-1 (-4239) + °OH^0 (-10837) -> OH^-1 (-12314) -At time : 711.1 ps Reaction : °OH^0 (-9964) + e_aq^-1 (-1590) -> OH^-1 (-12315) -At time : 711.1 ps Reaction : e_aq^-1 (-5550) + H^0 (-9128) -> OH^-1 (-12316) + H_2^0 (-12317) -At time : 711.1 ps Reaction : H^0 (-9108) + °OH^0 (-5830) -> No product -At time : 711.1 ps Reaction : °OH^0 (-8216) + H^0 (-8946) -> No product -At time : 711.1 ps Reaction : °OH^0 (-6790) + °OH^0 (-6794) -> H2O2^0 (-12318) -At time : 711.1 ps Reaction : H3O^1 (-7101) + OH^-1 (-12310) -> No product -At time : 711.1 ps Reaction : e_aq^-1 (-4851) + H^0 (-9302) -> OH^-1 (-12319) + H_2^0 (-12320) -At time : 711.1 ps Reaction : e_aq^-1 (-5228) + °OH^0 (-7202) -> OH^-1 (-12321) -At time : 721.1 ps Reaction : OH^-1 (-12314) + H3O^1 (-7915) -> No product -At time : 721.1 ps Reaction : e_aq^-1 (-5627) + °OH^0 (-11181) -> OH^-1 (-12322) -At time : 721.1 ps Reaction : °OH^0 (-10940) + H^0 (-10027) -> No product -At time : 721.1 ps Reaction : °OH^0 (-10382) + e_aq^-1 (-5312) -> OH^-1 (-12323) -At time : 721.1 ps Reaction : H^0 (-9459) + °OH^0 (-8705) -> No product -At time : 731.1 ps Reaction : H2O2^0 (-11467) + e_aq^-1 (-8536) -> OH^-1 (-12324) + °OH^0 (-12325) -At time : 731.1 ps Reaction : °OH^0 (-9942) + °OH^0 (-10874) -> H2O2^0 (-12326) -At time : 731.1 ps Reaction : e_aq^-1 (-136) + °OH^0 (-7356) -> OH^-1 (-12327) -At time : 731.1 ps Reaction : °OH^0 (-6386) + °OH^0 (-6388) -> H2O2^0 (-12328) -At time : 731.1 ps Reaction : OH^-1 (-12327) + H3O^1 (-8469) -> No product -At time : 741.1 ps Reaction : H3O^1 (-7203) + OH^-1 (-12321) -> No product -At time : 741.1 ps Reaction : °OH^0 (-10239) + H^0 (-11109) -> No product -At time : 741.1 ps Reaction : e_aq^-1 (-3899) + °OH^0 (-10754) -> OH^-1 (-12329) -At time : 741.1 ps Reaction : e_aq^-1 (-217) + H3O^1 (-8478) -> H^0 (-12330) -At time : 741.1 ps Reaction : e_aq^-1 (-4495) + H3O^1 (-7577) -> H^0 (-12331) -At time : 751.1 ps Reaction : H3O^1 (-9990) + OH^-1 (-12312) -> No product -At time : 751.1 ps Reaction : H^0 (-11605) + H^0 (-11228) -> H_2^0 (-12332) -At time : 751.1 ps Reaction : °OH^0 (-9641) + °OH^0 (-6530) -> H2O2^0 (-12333) -At time : 751.1 ps Reaction : °OH^0 (-6618) + e_aq^-1 (-8428) -> OH^-1 (-12334) -At time : 761.1 ps Reaction : H3O^1 (-8305) + OH^-1 (-12248) -> No product -At time : 761.1 ps Reaction : OH^-1 (-12110) + H3O^1 (-7869) -> No product -At time : 761.1 ps Reaction : e_aq^-1 (-488) + H2O2^0 (-12059) -> OH^-1 (-12335) + °OH^0 (-12336) -At time : 771.1 ps Reaction : H3O^1 (-6983) + OH^-1 (-12245) -> No product -At time : 771.1 ps Reaction : H3O^1 (-6155) + OH^-1 (-12164) -> No product -At time : 771.1 ps Reaction : °OH^0 (-10289) + °OH^0 (-7400) -> H2O2^0 (-12337) -At time : 771.1 ps Reaction : H^0 (-9434) + °OH^0 (-7578) -> No product -At time : 771.1 ps Reaction : H^0 (-9181) + e_aq^-1 (-3603) -> OH^-1 (-12338) + H_2^0 (-12339) -At time : 771.1 ps Reaction : e_aq^-1 (-1715) + °OH^0 (-7588) -> OH^-1 (-12340) -At time : 771.1 ps Reaction : e_aq^-1 (-3553) + H3O^1 (-5889) -> H^0 (-12341) -At time : 781.1 ps Reaction : H3O^1 (-11024) + OH^-1 (-12256) -> No product -At time : 781.1 ps Reaction : e_aq^-1 (-3113) + °OH^0 (-7720) -> OH^-1 (-12342) -At time : 781.1 ps Reaction : OH^-1 (-12300) + H3O^1 (-7737) -> No product -At time : 791.1 ps Reaction : OH^-1 (-12294) + H3O^1 (-7579) -> No product -At time : 791.1 ps Reaction : e_aq^-1 (-4568) + °OH^0 (-10037) -> OH^-1 (-12343) -At time : 791.1 ps Reaction : °OH^0 (-9937) + °OH^0 (-6862) -> H2O2^0 (-12344) -At time : 791.1 ps Reaction : H^0 (-9820) + e_aq^-1 (-2177) -> OH^-1 (-12345) + H_2^0 (-12346) -At time : 791.1 ps Reaction : e_aq^-1 (-3388) + °OH^0 (-6210) -> OH^-1 (-12347) -At time : 791.1 ps Reaction : OH^-1 (-12345) + H3O^1 (-7873) -> No product -At time : 791.1 ps Reaction : H^0 (-10519) + °OH^0 (-6000) -> No product -At time : 791.1 ps Reaction : e_aq^-1 (-5139) + °OH^0 (-8486) -> OH^-1 (-12348) -At time : 791.1 ps Reaction : OH^-1 (-12348) + H3O^1 (-7197) -> No product -At time : 801.1 ps Reaction : H^0 (-9528) + H^0 (-12299) -> H_2^0 (-12349) -At time : 801.1 ps Reaction : OH^-1 (-11548) + H3O^1 (-6471) -> No product -At time : 801.1 ps Reaction : °OH^0 (-11157) + °OH^0 (-7334) -> H2O2^0 (-12350) -At time : 801.1 ps Reaction : H^0 (-10425) + °OH^0 (-7484) -> No product -At time : 801.1 ps Reaction : °OH^0 (-9460) + °OH^0 (-8708) -> H2O2^0 (-12351) -At time : 801.1 ps Reaction : e_aq^-1 (-4444) + H^0 (-9034) -> OH^-1 (-12352) + H_2^0 (-12353) -At time : 801.1 ps Reaction : °OH^0 (-5976) + e_aq^-1 (-8803) -> OH^-1 (-12354) -At time : 801.1 ps Reaction : °OH^0 (-6718) + °OH^0 (-6722) -> H2O2^0 (-12355) -At time : 801.1 ps Reaction : e_aq^-1 (-3358) + °OH^0 (-6222) -> OH^-1 (-12356) -At time : 811.1 ps Reaction : OH^-1 (-12354) + H3O^1 (-6807) -> No product -At time : 811.1 ps Reaction : °OH^0 (-10383) + H^0 (-12146) -> No product -At time : 811.1 ps Reaction : e_aq^-1 (-3158) + °OH^0 (-11200) -> OH^-1 (-12357) -At time : 811.1 ps Reaction : e_aq^-1 (-5055) + °OH^0 (-11036) -> OH^-1 (-12358) -At time : 811.1 ps Reaction : °OH^0 (-10501) + e_aq^-1 (-1515) -> OH^-1 (-12359) -At time : 811.1 ps Reaction : °OH^0 (-6026) + H^0 (-9054) -> No product -At time : 811.1 ps Reaction : e_aq^-1 (-4761) + H3O^1 (-8664) -> H^0 (-12360) -At time : 811.1 ps Reaction : °OH^0 (-8042) + e_aq^-1 (-8338) -> OH^-1 (-12361) -At time : 811.1 ps Reaction : °OH^0 (-6904) + °OH^0 (-7932) -> H2O2^0 (-12362) -At time : 811.1 ps Reaction : H3O^1 (-11038) + OH^-1 (-12358) -> No product -At time : 811.1 ps Reaction : OH^-1 (-12357) + H3O^1 (-6291) -> No product -At time : 821.1 ps Reaction : OH^-1 (-12352) + H3O^1 (-6913) -> No product -At time : 821.1 ps Reaction : OH^-1 (-12307) + H3O^1 (-6137) -> No product -At time : 821.1 ps Reaction : OH^-1 (-12222) + H3O^1 (-8213) -> No product -At time : 821.1 ps Reaction : e_aq^-1 (-1442) + H2O2^0 (-11613) -> OH^-1 (-12363) + °OH^0 (-12364) -At time : 821.1 ps Reaction : °OH^0 (-10476) + °OH^0 (-10986) -> H2O2^0 (-12365) -At time : 821.1 ps Reaction : °OH^0 (-9828) + °OH^0 (-6758) -> H2O2^0 (-12366) -At time : 821.1 ps Reaction : H3O^1 (-6385) + e_aq^-1 (-8734) -> H^0 (-12367) -At time : 821.1 ps Reaction : e_aq^-1 (-4499) + H3O^1 (-6939) -> H^0 (-12368) -At time : 831.1 ps Reaction : e_aq^-1 (-5268) + H2O2^0 (-12108) -> OH^-1 (-12369) + °OH^0 (-12370) -At time : 831.1 ps Reaction : H3O^1 (-6945) + OH^-1 (-12044) -> No product -At time : 831.1 ps Reaction : °OH^0 (-10932) + °OH^0 (-7564) -> H2O2^0 (-12371) -At time : 841.1 ps Reaction : OH^-1 (-12342) + H3O^1 (-6309) -> No product -At time : 841.1 ps Reaction : H3O^1 (-11177) + OH^-1 (-12316) -> No product -At time : 841.1 ps Reaction : H3O^1 (-6339) + OH^-1 (-12215) -> No product -At time : 841.1 ps Reaction : H^0 (-10944) + H^0 (-9050) -> H_2^0 (-12372) -At time : 841.1 ps Reaction : H^0 (-10290) + e_aq^-1 (-5619) -> OH^-1 (-12373) + H_2^0 (-12374) -At time : 841.1 ps Reaction : °OH^0 (-10141) + e_aq^-1 (-4966) -> OH^-1 (-12375) -At time : 841.1 ps Reaction : °OH^0 (-8480) + e_aq^-1 (-8629) -> OH^-1 (-12376) -At time : 851.1 ps Reaction : °OH^0 (-10347) + e_aq^-1 (-8479) -> OH^-1 (-12377) -At time : 851.1 ps Reaction : H^0 (-10011) + °OH^0 (-10016) -> No product -At time : 861.1 ps Reaction : H3O^1 (-9961) + e_aq^-1 (-4376) -> H^0 (-12378) -At time : 861.1 ps Reaction : °OH^0 (-9155) + H^0 (-9455) -> No product -At time : 861.1 ps Reaction : °OH^0 (-8310) + °OH^0 (-8618) -> H2O2^0 (-12379) -At time : 861.1 ps Reaction : e_aq^-1 (-5123) + H3O^1 (-8143) -> H^0 (-12380) -At time : 861.1 ps Reaction : °OH^0 (-7150) + °OH^0 (-7490) -> H2O2^0 (-12381) -At time : 861.1 ps Reaction : e_aq^-1 (-1497) + H3O^1 (-6935) -> H^0 (-12382) -At time : 871.1 ps Reaction : H3O^1 (-6017) + OH^-1 (-12343) -> No product -At time : 871.1 ps Reaction : H2O2^0 (-12303) + e_aq^-1 (-4355) -> OH^-1 (-12383) + °OH^0 (-12384) -At time : 871.1 ps Reaction : °OH^0 (-10731) + °OH^0 (-8777) -> H2O2^0 (-12385) -At time : 871.1 ps Reaction : °OH^0 (-10556) + H^0 (-9853) -> No product -At time : 871.1 ps Reaction : H3O^1 (-9994) + e_aq^-1 (-4534) -> H^0 (-12386) -At time : 871.1 ps Reaction : °OH^0 (-8600) + °OH^0 (-8879) -> H2O2^0 (-12387) -At time : 871.1 ps Reaction : e_aq^-1 (-665) + H3O^1 (-7217) -> H^0 (-12388) -At time : 881.1 ps Reaction : °OH^0 (-11067) + °OH^0 (-8651) -> H2O2^0 (-12389) -At time : 881.1 ps Reaction : H^0 (-10261) + °OH^0 (-6092) -> No product -At time : 881.1 ps Reaction : °OH^0 (-9627) + e_aq^-1 (-2661) -> OH^-1 (-12390) -At time : 881.1 ps Reaction : e_aq^-1 (-3779) + H3O^1 (-8778) -> H^0 (-12391) -At time : 891.1 ps Reaction : H3O^1 (-6873) + OH^-1 (-12383) -> No product -At time : 891.1 ps Reaction : OH^-1 (-12274) + H3O^1 (-6201) -> No product -At time : 891.1 ps Reaction : e_aq^-1 (-4141) + H^0 (-9847) -> OH^-1 (-12392) + H_2^0 (-12393) -At time : 891.1 ps Reaction : e_aq^-1 (-4853) + H3O^1 (-7087) -> H^0 (-12394) -At time : 891.1 ps Reaction : e_aq^-1 (-2604) + H3O^1 (-5923) -> H^0 (-12395) -At time : 901.1 ps Reaction : H3O^1 (-10057) + OH^-1 (-12101) -> No product -At time : 901.1 ps Reaction : °OH^0 (-10614) + e_aq^-1 (-3459) -> OH^-1 (-12396) -At time : 901.1 ps Reaction : °OH^0 (-9163) + H^0 (-9484) -> No product -At time : 901.1 ps Reaction : e_aq^-1 (-5478) + °OH^0 (-7414) -> OH^-1 (-12397) -At time : 911.1 ps Reaction : H3O^1 (-11171) + OH^-1 (-12278) -> No product -At time : 911.1 ps Reaction : H^0 (-10599) + H^0 (-10744) -> H_2^0 (-12398) -At time : 911.1 ps Reaction : °OH^0 (-10649) + e_aq^-1 (-3222) -> OH^-1 (-12399) -At time : 911.1 ps Reaction : °OH^0 (-10639) + °OH^0 (-7694) -> H2O2^0 (-12400) -At time : 911.1 ps Reaction : H3O^1 (-9832) + e_aq^-1 (-4134) -> H^0 (-12401) -At time : 911.1 ps Reaction : e_aq^-1 (-5404) + e_aq^-1 (-8641) -> OH^-1 (-12402) + OH^-1 (-12403) + H_2^0 (-12404) -At time : 911.1 ps Reaction : e_aq^-1 (-765) + °OH^0 (-8116) -> OH^-1 (-12405) -At time : 911.1 ps Reaction : e_aq^-1 (-4481) + °OH^0 (-7958) -> OH^-1 (-12406) -At time : 911.1 ps Reaction : e_aq^-1 (-951) + e_aq^-1 (-1114) -> OH^-1 (-12407) + OH^-1 (-12408) + H_2^0 (-12409) -At time : 921.1 ps Reaction : OH^-1 (-12406) + H3O^1 (-7957) -> No product -At time : 921.1 ps Reaction : H3O^1 (-10155) + OH^-1 (-12405) -> No product -At time : 921.1 ps Reaction : OH^-1 (-12397) + H3O^1 (-8481) -> No product -At time : 921.1 ps Reaction : H^0 (-10552) + e_aq^-1 (-4186) -> OH^-1 (-12410) + H_2^0 (-12411) -At time : 921.1 ps Reaction : °OH^0 (-9730) + °OH^0 (-6624) -> H2O2^0 (-12412) -At time : 921.1 ps Reaction : H^0 (-9610) + °OH^0 (-9605) -> No product -At time : 921.1 ps Reaction : e_aq^-1 (-5522) + °OH^0 (-9127) -> OH^-1 (-12413) -At time : 921.1 ps Reaction : OH^-1 (-12413) + H3O^1 (-6101) -> No product -At time : 931.1 ps Reaction : OH^-1 (-12078) + H3O^1 (-7139) -> No product -At time : 931.1 ps Reaction : °OH^0 (-10592) + e_aq^-1 (-8704) -> OH^-1 (-12414) -At time : 931.1 ps Reaction : H^0 (-10463) + °OH^0 (-6032) -> No product -At time : 931.1 ps Reaction : °OH^0 (-10391) + °OH^0 (-5856) -> H2O2^0 (-12415) -At time : 941.1 ps Reaction : e_aq^-1 (-4104) + H2O2^0 (-11964) -> OH^-1 (-12416) + °OH^0 (-12417) -At time : 941.1 ps Reaction : °OH^0 (-10444) + °OH^0 (-11371) -> H2O2^0 (-12418) -At time : 941.1 ps Reaction : e_aq^-1 (-815) + °OH^0 (-11040) -> OH^-1 (-12419) -At time : 941.1 ps Reaction : °OH^0 (-10388) + °OH^0 (-8906) -> H2O2^0 (-12420) -At time : 941.1 ps Reaction : °OH^0 (-10147) + H^0 (-9315) -> No product -At time : 941.1 ps Reaction : OH^-1 (-5714) + H3O^1 (-7391) -> No product -At time : 941.1 ps Reaction : e_aq^-1 (-4137) + e_aq^-1 (-4157) -> OH^-1 (-12421) + OH^-1 (-12422) + H_2^0 (-12423) -At time : 951.1 ps Reaction : OH^-1 (-12376) + H3O^1 (-8628) -> No product -At time : 951.1 ps Reaction : H3O^1 (-10375) + OH^-1 (-12323) -> No product -At time : 951.1 ps Reaction : °OH^0 (-10543) + °OH^0 (-7608) -> H2O2^0 (-12424) -At time : 951.1 ps Reaction : e_aq^-1 (-161) + °OH^0 (-8280) -> OH^-1 (-12425) -At time : 961.1 ps Reaction : OH^-1 (-12425) + H3O^1 (-7319) -> No product -At time : 961.1 ps Reaction : H3O^1 (-10432) + OH^-1 (-12375) -> No product -At time : 961.1 ps Reaction : OH^-1 (-12363) + H3O^1 (-7961) -> No product -At time : 961.1 ps Reaction : °OH^0 (-10176) + °OH^0 (-12221) -> H2O2^0 (-12426) -At time : 961.1 ps Reaction : OH^-1 (-11733) + H3O^1 (-7607) -> No product -At time : 961.1 ps Reaction : °OH^0 (-10058) + °OH^0 (-6022) -> H2O2^0 (-12427) -At time : 961.1 ps Reaction : H3O^1 (-10028) + e_aq^-1 (-4538) -> H^0 (-12428) -At time : 971.1 ps Reaction : °OH^0 (-11180) + °OH^0 (-8304) -> H2O2^0 (-12429) -At time : 971.1 ps Reaction : °OH^0 (-10651) + e_aq^-1 (-3571) -> OH^-1 (-12430) -At time : 971.1 ps Reaction : e_aq^-1 (-4813) + H3O^1 (-8853) -> H^0 (-12431) -At time : 971.1 ps Reaction : e_aq^-1 (-740) + H3O^1 (-8127) -> H^0 (-12432) -At time : 971.1 ps Reaction : e_aq^-1 (-3674) + H3O^1 (-6407) -> H^0 (-12433) -At time : 971.1 ps Reaction : °OH^0 (-9384) + °OH^0 (-9091) -> H2O2^0 (-12434) -At time : 981.1 ps Reaction : °OH^0 (-11047) + °OH^0 (-6146) -> H2O2^0 (-12435) -At time : 981.1 ps Reaction : e_aq^-1 (-3732) + H3O^1 (-9628) -> H^0 (-12436) -At time : 981.1 ps Reaction : °OH^0 (-8438) + H^0 (-8956) -> No product -At time : 981.1 ps Reaction : H3O^1 (-7487) + e_aq^-1 (-8881) -> H^0 (-12437) -At time : 981.1 ps Reaction : e_aq^-1 (-5368) + °OH^0 (-8236) -> OH^-1 (-12438) -At time : 981.1 ps Reaction : °OH^0 (-7372) + °OH^0 (-7378) -> H2O2^0 (-12439) -At time : 981.1 ps Reaction : e_aq^-1 (-5293) + °OH^0 (-7254) -> OH^-1 (-12440) -At time : 981.1 ps Reaction : e_aq^-1 (-3335) + °OH^0 (-6224) -> OH^-1 (-12441) -At time : 991.1 ps Reaction : OH^-1 (-12416) + H3O^1 (-6743) -> No product -At time : 991.1 ps Reaction : H3O^1 (-8199) + OH^-1 (-12335) -> No product -At time : 991.1 ps Reaction : °OH^0 (-10852) + e_aq^-1 (-4295) -> OH^-1 (-12442) -At time : 991.1 ps Reaction : H^0 (-9162) + °OH^0 (-6246) -> No product -At time : 991.1 ps Reaction : °OH^0 (-6036) + H^0 (-8952) -> No product -At time : 991.1 ps Reaction : °OH^0 (-7990) + °OH^0 (-8513) -> H2O2^0 (-12443) -At time : 991.1 ps Reaction : e_aq^-1 (-827) + H3O^1 (-8115) -> H^0 (-12444) -At time : 1.0011 ns Reaction : °OH^0 (-11100) + H^0 (-9401) -> No product -At time : 1.0011 ns Reaction : °OH^0 (-10187) + °OH^0 (-8148) -> H2O2^0 (-12445) -At time : 1.0011 ns Reaction : H^0 (-9478) + °OH^0 (-5880) -> No product -At time : 1.0011 ns Reaction : °OH^0 (-6238) + H^0 (-8986) -> No product -At time : 1.0011 ns Reaction : e_aq^-1 (-4304) + °OH^0 (-7602) -> OH^-1 (-12446) -At time : 1.1011 ns Reaction : H3O^1 (-10526) + OH^-1 (-12442) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-7279) + OH^-1 (-12438) -> No product -At time : 1.1011 ns Reaction : OH^-1 (-12403) + H3O^1 (-10365) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-6135) + OH^-1 (-12369) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-9992) + OH^-1 (-12359) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-6245) + OH^-1 (-12324) -> No product -At time : 1.1011 ns Reaction : H^0 (-10064) + H^0 (-12271) -> H_2^0 (-12447) -At time : 1.1011 ns Reaction : OH^-1 (-12253) + H3O^1 (-6861) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-6015) + OH^-1 (-12042) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-6249) + OH^-1 (-12032) -> No product -At time : 1.1011 ns Reaction : H^0 (-11666) + °OH^0 (-6096) -> No product -At time : 1.1011 ns Reaction : H3O^1 (-10954) + e_aq^-1 (-4641) -> H^0 (-12448) -At time : 1.1011 ns Reaction : e_aq^-1 (-1705) + H3O^1 (-10870) -> H^0 (-12449) -At time : 1.1011 ns Reaction : °OH^0 (-9873) + °OH^0 (-7612) -> H2O2^0 (-12450) -At time : 1.1011 ns Reaction : H^0 (-9804) + °OH^0 (-6720) -> No product -At time : 1.1011 ns Reaction : °OH^0 (-9208) + °OH^0 (-9608) -> H2O2^0 (-12451) -At time : 1.1011 ns Reaction : °OH^0 (-9464) + e_aq^-1 (-3340) -> OH^-1 (-12452) -At time : 1.1011 ns Reaction : e_aq^-1 (-3062) + H3O^1 (-7729) -> H^0 (-12453) -At time : 1.1011 ns Reaction : e_aq^-1 (-3678) + H3O^1 (-6413) -> H^0 (-12454) -At time : 1.1011 ns Reaction : e_aq^-1 (-3178) + °OH^0 (-6284) -> OH^-1 (-12455) -At time : 1.1011 ns Reaction : e_aq^-1 (-2285) + e_aq^-1 (-3931) -> OH^-1 (-12456) + OH^-1 (-12457) + H_2^0 (-12458) -At time : 1.1011 ns Reaction : e_aq^-1 (-3749) + e_aq^-1 (-3792) -> OH^-1 (-12459) + OH^-1 (-12460) + H_2^0 (-12461) -At time : 1.2011 ns Reaction : H3O^1 (-9393) + OH^-1 (-12377) -> No product -At time : 1.2011 ns Reaction : OH^-1 (-12315) + H3O^1 (-8814) -> No product -At time : 1.2011 ns Reaction : H3O^1 (-7381) + OH^-1 (-12291) -> No product -At time : 1.2011 ns Reaction : H^0 (-12259) + e_aq^-1 (-5390) -> OH^-1 (-12462) + H_2^0 (-12463) -At time : 1.2011 ns Reaction : H3O^1 (-10674) + OH^-1 (-12160) -> No product -At time : 1.2011 ns Reaction : °OH^0 (-7154) + °OH^0 (-11254) -> H2O2^0 (-12464) -At time : 1.2011 ns Reaction : H^0 (-11071) + e_aq^-1 (-5202) -> OH^-1 (-12465) + H_2^0 (-12466) -At time : 1.2011 ns Reaction : °OH^0 (-10952) + °OH^0 (-5745) -> H2O2^0 (-12467) -At time : 1.2011 ns Reaction : °OH^0 (-10510) + °OH^0 (-6190) -> H2O2^0 (-12468) -At time : 1.2011 ns Reaction : °OH^0 (-9842) + °OH^0 (-8555) -> H2O2^0 (-12469) -At time : 1.2011 ns Reaction : e_aq^-1 (-2263) + H^0 (-9775) -> OH^-1 (-12470) + H_2^0 (-12471) -At time : 1.2011 ns Reaction : °OH^0 (-9686) + °OH^0 (-7792) -> H2O2^0 (-12472) -At time : 1.2011 ns Reaction : e_aq^-1 (-3103) + H3O^1 (-8718) -> H^0 (-12473) -At time : 1.2011 ns Reaction : e_aq^-1 (-4826) + H3O^1 (-8027) -> H^0 (-12474) -At time : 1.2011 ns Reaction : e_aq^-1 (-4099) + H3O^1 (-6735) -> H^0 (-12475) -At time : 1.2011 ns Reaction : e_aq^-1 (-3629) + H3O^1 (-6373) -> H^0 (-12476) -At time : 1.2011 ns Reaction : e_aq^-1 (-4255) + H3O^1 (-6199) -> H^0 (-12477) -At time : 1.2011 ns Reaction : e_aq^-1 (-5047) + H3O^1 (-6057) -> H^0 (-12478) -At time : 1.2011 ns Reaction : OH^-1 (-12419) + H3O^1 (-7157) -> No product -At time : 1.2011 ns Reaction : OH^-1 (-12298) + H3O^1 (-7297) -> No product -At time : 1.3011 ns Reaction : H^0 (-12475) + e_aq^-1 (-4091) -> OH^-1 (-12479) + H_2^0 (-12480) -At time : 1.3011 ns Reaction : H3O^1 (-11112) + OH^-1 (-12462) -> No product -At time : 1.3011 ns Reaction : OH^-1 (-12422) + H3O^1 (-8556) -> No product -At time : 1.3011 ns Reaction : OH^-1 (-12399) + H3O^1 (-6277) -> No product -At time : 1.3011 ns Reaction : °OH^0 (-5868) + °OH^0 (-12364) -> H2O2^0 (-12481) -At time : 1.3011 ns Reaction : OH^-1 (-12125) + H3O^1 (-8661) -> No product -At time : 1.3011 ns Reaction : e_aq^-1 (-4406) + H^0 (-12082) -> OH^-1 (-12482) + H_2^0 (-12483) -At time : 1.3011 ns Reaction : e_aq^-1 (-4455) + H2O2^0 (-11601) -> OH^-1 (-12484) + °OH^0 (-12485) -At time : 1.3011 ns Reaction : °OH^0 (-11146) + °OH^0 (-8921) -> H2O2^0 (-12486) -At time : 1.3011 ns Reaction : °OH^0 (-10871) + °OH^0 (-10866) -> H2O2^0 (-12487) -At time : 1.3011 ns Reaction : e_aq^-1 (-746) + H3O^1 (-10167) -> H^0 (-12488) -At time : 1.3011 ns Reaction : °OH^0 (-9666) + °OH^0 (-6550) -> H2O2^0 (-12489) -At time : 1.3011 ns Reaction : °OH^0 (-9338) + e_aq^-1 (-5167) -> OH^-1 (-12490) -At time : 1.3011 ns Reaction : e_aq^-1 (-4686) + H3O^1 (-8508) -> H^0 (-12491) -At time : 1.3011 ns Reaction : °OH^0 (-7312) + °OH^0 (-8268) -> H2O2^0 (-12492) -At time : 1.3011 ns Reaction : e_aq^-1 (-1324) + H3O^1 (-7991) -> H^0 (-12493) -At time : 1.3011 ns Reaction : e_aq^-1 (-4396) + e_aq^-1 (-4403) -> OH^-1 (-12494) + OH^-1 (-12495) + H_2^0 (-12496) -At time : 1.3011 ns Reaction : e_aq^-1 (-5233) + °OH^0 (-8164) -> OH^-1 (-12497) -At time : 1.4011 ns Reaction : OH^-1 (-12497) + H3O^1 (-7221) -> No product -At time : 1.4011 ns Reaction : OH^-1 (-12455) + H3O^1 (-6285) -> No product -At time : 1.4011 ns Reaction : °OH^0 (-12370) + °OH^0 (-7244) -> H2O2^0 (-12498) -At time : 1.4011 ns Reaction : °OH^0 (-12302) + H^0 (-12111) -> No product -At time : 1.4011 ns Reaction : OH^-1 (-12198) + H3O^1 (-8095) -> No product -At time : 1.4011 ns Reaction : °OH^0 (-11363) + °OH^0 (-7516) -> H2O2^0 (-12499) -At time : 1.4011 ns Reaction : H^0 (-10962) + °OH^0 (-7018) -> No product -At time : 1.4011 ns Reaction : H^0 (-10813) + °OH^0 (-7892) -> No product -At time : 1.4011 ns Reaction : °OH^0 (-10746) + °OH^0 (-6636) -> H2O2^0 (-12500) -At time : 1.4011 ns Reaction : e_aq^-1 (-5075) + °OH^0 (-10419) -> OH^-1 (-12501) -At time : 1.4011 ns Reaction : °OH^0 (-9136) + °OH^0 (-10084) -> H2O2^0 (-12502) -At time : 1.4011 ns Reaction : °OH^0 (-9851) + °OH^0 (-8525) -> H2O2^0 (-12503) -At time : 1.4011 ns Reaction : °OH^0 (-9740) + °OH^0 (-6634) -> H2O2^0 (-12504) -At time : 1.4011 ns Reaction : °OH^0 (-9602) + °OH^0 (-6444) -> H2O2^0 (-12505) -At time : 1.4011 ns Reaction : e_aq^-1 (-2800) + H3O^1 (-9597) -> H^0 (-12506) -At time : 1.4011 ns Reaction : °OH^0 (-9200) + °OH^0 (-6446) -> H2O2^0 (-12507) -At time : 1.4011 ns Reaction : °OH^0 (-7072) + °OH^0 (-8056) -> H2O2^0 (-12508) -At time : 1.4011 ns Reaction : e_aq^-1 (-4764) + H3O^1 (-7041) -> H^0 (-12509) -At time : 1.4011 ns Reaction : e_aq^-1 (-2677) + e_aq^-1 (-2725) -> OH^-1 (-12510) + OH^-1 (-12511) + H_2^0 (-12512) -At time : 1.4011 ns Reaction : H3O^1 (-10100) + OH^-1 (-12361) -> No product -At time : 1.4011 ns Reaction : OH^-1 (-5777) + H3O^1 (-6603) -> No product -At time : 1.5011 ns Reaction : OH^-1 (-12322) + H3O^1 (-7355) -> No product -At time : 1.5011 ns Reaction : OH^-1 (-12213) + H3O^1 (-8652) -> No product -At time : 1.5011 ns Reaction : OH^-1 (-12124) + H3O^1 (-7255) -> No product -At time : 1.5011 ns Reaction : °OH^0 (-7176) + H^0 (-11817) -> No product -At time : 1.5011 ns Reaction : e_aq^-1 (-95) + °OH^0 (-10324) -> OH^-1 (-12513) -At time : 1.5011 ns Reaction : e_aq^-1 (-2316) + H^0 (-9773) -> OH^-1 (-12514) + H_2^0 (-12515) -At time : 1.5011 ns Reaction : °OH^0 (-9738) + °OH^0 (-8348) -> H2O2^0 (-12516) -At time : 1.5011 ns Reaction : H^0 (-9571) + e_aq^-1 (-3643) -> OH^-1 (-12517) + H_2^0 (-12518) -At time : 1.5011 ns Reaction : H^0 (-9170) + e_aq^-1 (-3552) -> OH^-1 (-12519) + H_2^0 (-12520) -At time : 1.5011 ns Reaction : e_aq^-1 (-4608) + e_aq^-1 (-4574) -> OH^-1 (-12521) + OH^-1 (-12522) + H_2^0 (-12523) -At time : 1.5011 ns Reaction : OH^-1 (-12484) + H3O^1 (-8577) -> No product -At time : 1.5011 ns Reaction : OH^-1 (-12465) + H3O^1 (-6073) -> No product -At time : 1.6011 ns Reaction : OH^-1 (-12408) + H3O^1 (-8051) -> No product -At time : 1.6011 ns Reaction : H3O^1 (-10611) + OH^-1 (-12396) -> No product -At time : 1.6011 ns Reaction : H3O^1 (-10865) + OH^-1 (-12340) -> No product -At time : 1.6011 ns Reaction : H^0 (-12080) + e_aq^-1 (-8563) -> OH^-1 (-12524) + H_2^0 (-12525) -At time : 1.6011 ns Reaction : H^0 (-10469) + °OH^0 (-7050) -> No product -At time : 1.6011 ns Reaction : °OH^0 (-10224) + °OH^0 (-8218) -> H2O2^0 (-12526) -At time : 1.6011 ns Reaction : H^0 (-9495) + °OH^0 (-7702) -> No product -At time : 1.6011 ns Reaction : °OH^0 (-9240) + °OH^0 (-6698) -> H2O2^0 (-12527) -At time : 1.6011 ns Reaction : H3O^1 (-9182) + e_aq^-1 (-3107) -> H^0 (-12528) -At time : 1.6011 ns Reaction : °OH^0 (-9138) + °OH^0 (-7974) -> H2O2^0 (-12529) -At time : 1.6011 ns Reaction : °OH^0 (-7684) + e_aq^-1 (-8710) -> OH^-1 (-12530) -At time : 1.6011 ns Reaction : e_aq^-1 (-3911) + °OH^0 (-7820) -> OH^-1 (-12531) -At time : 1.6011 ns Reaction : e_aq^-1 (-236) + °OH^0 (-11174) -> OH^-1 (-12532) -At time : 1.7011 ns Reaction : H3O^1 (-9764) + OH^-1 (-12514) -> No product -At time : 1.7011 ns Reaction : OH^-1 (-12446) + H3O^1 (-7911) -> No product -At time : 1.7011 ns Reaction : OH^-1 (-12229) + H3O^1 (-8327) -> No product -At time : 1.7011 ns Reaction : e_aq^-1 (-4235) + °OH^0 (-11231) -> OH^-1 (-12533) -At time : 1.7011 ns Reaction : H3O^1 (-11161) + e_aq^-1 (-5488) -> H^0 (-12534) -At time : 1.7011 ns Reaction : H3O^1 (-10296) + OH^-1 (-5813) -> No product -At time : 1.7011 ns Reaction : °OH^0 (-9833) + e_aq^-1 (-4110) -> OH^-1 (-12535) -At time : 1.7011 ns Reaction : H^0 (-9553) + °OH^0 (-6378) -> No product -At time : 1.7011 ns Reaction : H^0 (-9526) + °OH^0 (-6290) -> No product -At time : 1.7011 ns Reaction : H^0 (-9215) + °OH^0 (-6508) -> No product -At time : 1.7011 ns Reaction : e_aq^-1 (-3775) + H3O^1 (-7657) -> H^0 (-12536) -At time : 1.7011 ns Reaction : e_aq^-1 (-4308) + °OH^0 (-6844) -> OH^-1 (-12537) -At time : 1.7011 ns Reaction : e_aq^-1 (-2382) + H3O^1 (-6647) -> H^0 (-12538) -At time : 1.7011 ns Reaction : e_aq^-1 (-5049) + °OH^0 (-7476) -> OH^-1 (-12539) -At time : 1.8011 ns Reaction : e_aq^-1 (-706) + H^0 (-12380) -> OH^-1 (-12540) + H_2^0 (-12541) -At time : 1.8011 ns Reaction : e_aq^-1 (-4956) + °OH^0 (-12137) -> OH^-1 (-12542) -At time : 1.8011 ns Reaction : H^0 (-9213) + H^0 (-12012) -> H_2^0 (-12543) -At time : 1.8011 ns Reaction : °OH^0 (-11116) + °OH^0 (-8945) -> H2O2^0 (-12544) -At time : 1.8011 ns Reaction : °OH^0 (-10972) + °OH^0 (-8010) -> H2O2^0 (-12545) -At time : 1.8011 ns Reaction : H3O^1 (-10929) + e_aq^-1 (-4450) -> H^0 (-12546) -At time : 1.8011 ns Reaction : °OH^0 (-10644) + e_aq^-1 (-3227) -> OH^-1 (-12547) -At time : 1.8011 ns Reaction : H^0 (-9699) + °OH^0 (-7790) -> No product -At time : 1.8011 ns Reaction : °OH^0 (-7542) + °OH^0 (-8955) -> H2O2^0 (-12548) -At time : 1.8011 ns Reaction : °OH^0 (-6486) + °OH^0 (-8774) -> H2O2^0 (-12549) -At time : 1.8011 ns Reaction : e_aq^-1 (-4065) + H3O^1 (-7631) -> H^0 (-12550) -At time : 1.8011 ns Reaction : OH^-1 (-12542) + H3O^1 (-8502) -> No product -At time : 1.8011 ns Reaction : OH^-1 (-12216) + H3O^1 (-8514) -> No product -At time : 1.8011 ns Reaction : °OH^0 (-10317) + °OH^0 (-11184) -> H2O2^0 (-12551) -At time : 1.8011 ns Reaction : e_aq^-1 (-3034) + °OH^0 (-6342) -> OH^-1 (-12552) -At time : 1.9011 ns Reaction : OH^-1 (-12535) + H3O^1 (-6791) -> No product -At time : 1.9011 ns Reaction : °OH^0 (-5980) + H^0 (-12060) -> No product -At time : 1.9011 ns Reaction : °OH^0 (-10995) + e_aq^-1 (-1062) -> OH^-1 (-12553) -At time : 1.9011 ns Reaction : H3O^1 (-10937) + e_aq^-1 (-4551) -> H^0 (-12554) -At time : 1.9011 ns Reaction : e_aq^-1 (-1640) + °OH^0 (-10906) -> OH^-1 (-12555) -At time : 1.9011 ns Reaction : H^0 (-10780) + °OH^0 (-7858) -> No product -At time : 1.9011 ns Reaction : °OH^0 (-10661) + °OH^0 (-8717) -> H2O2^0 (-12556) -At time : 1.9011 ns Reaction : H3O^1 (-10030) + e_aq^-1 (-4533) -> H^0 (-12557) -At time : 1.9011 ns Reaction : H^0 (-9717) + °OH^0 (-7804) -> No product -At time : 1.9011 ns Reaction : e_aq^-1 (-8575) + H3O^1 (-8820) -> H^0 (-12558) -At time : 1.9011 ns Reaction : e_aq^-1 (-2856) + H3O^1 (-8754) -> H^0 (-12559) -At time : 1.9011 ns Reaction : e_aq^-1 (-4674) + °OH^0 (-7998) -> OH^-1 (-12560) -At time : 1.9011 ns Reaction : e_aq^-1 (-4657) + H3O^1 (-7989) -> H^0 (-12561) -At time : 1.9011 ns Reaction : °OH^0 (-6762) + °OH^0 (-7628) -> H2O2^0 (-12562) -At time : 1.9011 ns Reaction : e_aq^-1 (-3929) + H3O^1 (-6665) -> H^0 (-12563) -At time : 1.9011 ns Reaction : e_aq^-1 (-1675) + e_aq^-1 (-4381) -> OH^-1 (-12564) + OH^-1 (-12565) + H_2^0 (-12566) -At time : 1.9011 ns Reaction : °OH^0 (-7178) + e_aq^-1 (-8497) -> OH^-1 (-12567) -At time : 2.0011 ns Reaction : OH^-1 (-12560) + H3O^1 (-6023) -> No product -At time : 2.0011 ns Reaction : OH^-1 (-12553) + H3O^1 (-7079) -> No product -At time : 2.0011 ns Reaction : H3O^1 (-10321) + OH^-1 (-12513) -> No product -At time : 2.0011 ns Reaction : OH^-1 (-12414) + H3O^1 (-6639) -> No product -At time : 2.0011 ns Reaction : H3O^1 (-6209) + OH^-1 (-12347) -> No product -At time : 2.0011 ns Reaction : H^0 (-11305) + °OH^0 (-6622) -> No product -At time : 2.0011 ns Reaction : °OH^0 (-11206) + °OH^0 (-6608) -> H2O2^0 (-12568) -At time : 2.0011 ns Reaction : e_aq^-1 (-5106) + °OH^0 (-11062) -> OH^-1 (-12569) -At time : 2.0011 ns Reaction : °OH^0 (-9936) + °OH^0 (-5799) -> H2O2^0 (-12570) -At time : 2.0011 ns Reaction : °OH^0 (-9667) + °OH^0 (-9665) -> H2O2^0 (-12571) -At time : 2.0011 ns Reaction : °OH^0 (-8316) + °OH^0 (-9095) -> H2O2^0 (-12572) -At time : 2.0011 ns Reaction : e_aq^-1 (-4441) + H^0 (-9030) -> OH^-1 (-12573) + H_2^0 (-12574) -At time : 2.0011 ns Reaction : e_aq^-1 (-3656) + H3O^1 (-8745) -> H^0 (-12575) -At time : 2.0011 ns Reaction : °OH^0 (-8576) + e_aq^-1 (-8578) -> OH^-1 (-12576) -At time : 2.0011 ns Reaction : e_aq^-1 (-717) + H3O^1 (-8109) -> H^0 (-12577) -At time : 2.0011 ns Reaction : e_aq^-1 (-4834) + H3O^1 (-8047) -> H^0 (-12578) -At time : 2.0011 ns Reaction : °OH^0 (-7566) + °OH^0 (-7972) -> H2O2^0 (-12579) -At time : 2.0011 ns Reaction : e_aq^-1 (-1560) + H3O^1 (-7955) -> H^0 (-12580) -At time : 2.0011 ns Reaction : e_aq^-1 (-3620) + H3O^1 (-6353) -> H^0 (-12581) -At time : 2.0011 ns Reaction : e_aq^-1 (-5623) + e_aq^-1 (-5705) -> OH^-1 (-12582) + OH^-1 (-12583) + H_2^0 (-12584) -At time : 2.0011 ns Reaction : e_aq^-1 (-2049) + e_aq^-1 (-4126) -> OH^-1 (-12585) + OH^-1 (-12586) + H_2^0 (-12587) -At time : 2.0011 ns Reaction : °OH^0 (-7284) + e_aq^-1 (-8461) -> OH^-1 (-12588) -At time : 2.0011 ns Reaction : e_aq^-1 (-2408) + °OH^0 (-6652) -> OH^-1 (-12589) -At time : 2.0011 ns Reaction : e_aq^-1 (-5564) + °OH^0 (-5721) -> OH^-1 (-12590) -At time : 2.1011 ns Reaction : H3O^1 (-7585) + OH^-1 (-12573) -> No product -At time : 2.1011 ns Reaction : °OH^0 (-7956) + H^0 (-12382) -> No product -At time : 2.1011 ns Reaction : e_aq^-1 (-5262) + H^0 (-11962) -> OH^-1 (-12591) + H_2^0 (-12592) -At time : 2.1011 ns Reaction : OH^-1 (-11953) + H3O^1 (-8255) -> No product -At time : 2.1011 ns Reaction : e_aq^-1 (-2990) + H2O2^0 (-11494) -> OH^-1 (-12593) + °OH^0 (-12594) -At time : 2.1011 ns Reaction : H3O^1 (-11183) + e_aq^-1 (-5653) -> H^0 (-12595) -At time : 2.1011 ns Reaction : e_aq^-1 (-5076) + H3O^1 (-11052) -> H^0 (-12596) -At time : 2.1011 ns Reaction : °OH^0 (-10628) + e_aq^-1 (-3492) -> OH^-1 (-12597) -At time : 2.1011 ns Reaction : H^0 (-9939) + °OH^0 (-10522) -> No product -At time : 2.1011 ns Reaction : e_aq^-1 (-5388) + H^0 (-10358) -> OH^-1 (-12598) + H_2^0 (-12599) -At time : 2.1011 ns Reaction : H^0 (-9503) + e_aq^-1 (-3213) -> OH^-1 (-12600) + H_2^0 (-12601) -At time : 2.1011 ns Reaction : °OH^0 (-9194) + H^0 (-9197) -> No product -At time : 2.1011 ns Reaction : °OH^0 (-6324) + H^0 (-8996) -> No product -At time : 2.1011 ns Reaction : °OH^0 (-6840) + °OH^0 (-7914) -> H2O2^0 (-12602) -At time : 2.1011 ns Reaction : e_aq^-1 (-4613) + °OH^0 (-7008) -> OH^-1 (-12603) -At time : 2.1011 ns Reaction : e_aq^-1 (-5112) + e_aq^-1 (-722) -> OH^-1 (-12604) + OH^-1 (-12605) + H_2^0 (-12606) -At time : 2.1011 ns Reaction : e_aq^-1 (-484) + °OH^0 (-9403) -> OH^-1 (-12607) -At time : 2.2011 ns Reaction : OH^-1 (-12590) + H3O^1 (-8297) -> No product -At time : 2.2011 ns Reaction : OH^-1 (-12588) + H3O^1 (-8463) -> No product -At time : 2.2011 ns Reaction : OH^-1 (-12586) + H3O^1 (-6765) -> No product -At time : 2.2011 ns Reaction : H3O^1 (-10411) + OH^-1 (-12540) -> No product -At time : 2.2011 ns Reaction : OH^-1 (-12524) + H3O^1 (-6851) -> No product -At time : 2.2011 ns Reaction : H3O^1 (-6737) + OH^-1 (-12479) -> No product -At time : 2.2011 ns Reaction : OH^-1 (-12319) + H3O^1 (-7075) -> No product -At time : 2.2011 ns Reaction : H3O^1 (-6525) + OH^-1 (-12095) -> No product -At time : 2.2011 ns Reaction : H^0 (-11992) + °OH^0 (-6152) -> No product -At time : 2.2011 ns Reaction : e_aq^-1 (-2837) + H2O2^0 (-11609) -> OH^-1 (-12608) + °OH^0 (-12609) -At time : 2.2011 ns Reaction : °OH^0 (-9367) + °OH^0 (-11273) -> H2O2^0 (-12610) -At time : 2.2011 ns Reaction : °OH^0 (-10140) + °OH^0 (-7116) -> H2O2^0 (-12611) -At time : 2.2011 ns Reaction : H^0 (-9557) + e_aq^-1 (-8743) -> OH^-1 (-12612) + H_2^0 (-12613) -At time : 2.2011 ns Reaction : OH^-1 (-5807) + H3O^1 (-8634) -> No product -At time : 2.2011 ns Reaction : e_aq^-1 (-4029) + H3O^1 (-7847) -> H^0 (-12614) -At time : 2.2011 ns Reaction : °OH^0 (-7380) + °OH^0 (-7386) -> H2O2^0 (-12615) -At time : 2.2011 ns Reaction : e_aq^-1 (-5302) + e_aq^-1 (-5369) -> OH^-1 (-12616) + OH^-1 (-12617) + H_2^0 (-12618) -At time : 2.2011 ns Reaction : OH^-1 (-12482) + H3O^1 (-7921) -> No product -At time : 2.2011 ns Reaction : e_aq^-1 (-1295) + °OH^0 (-7994) -> OH^-1 (-12619) -At time : 2.2011 ns Reaction : e_aq^-1 (-5134) + °OH^0 (-7196) -> OH^-1 (-12620) -At time : 2.3011 ns Reaction : e_aq^-1 (-4103) + H2O2^0 (-11480) -> OH^-1 (-12621) + °OH^0 (-12622) -At time : 2.3011 ns Reaction : H3O^1 (-11173) + e_aq^-1 (-5523) -> H^0 (-12623) -At time : 2.3011 ns Reaction : °OH^0 (-10710) + °OH^0 (-7770) -> H2O2^0 (-12624) -At time : 2.3011 ns Reaction : °OH^0 (-10700) + e_aq^-1 (-2772) -> OH^-1 (-12625) -At time : 2.3011 ns Reaction : °OH^0 (-10466) + °OH^0 (-8036) -> H2O2^0 (-12626) -At time : 2.3011 ns Reaction : H^0 (-10221) + °OH^0 (-6080) -> No product -At time : 2.3011 ns Reaction : H^0 (-9985) + °OH^0 (-6188) -> No product -At time : 2.3011 ns Reaction : °OH^0 (-9563) + °OH^0 (-8732) -> H2O2^0 (-12627) -At time : 2.3011 ns Reaction : °OH^0 (-9391) + °OH^0 (-5854) -> H2O2^0 (-12628) -At time : 2.3011 ns Reaction : e_aq^-1 (-2667) + H3O^1 (-8781) -> H^0 (-12629) -At time : 2.3011 ns Reaction : °OH^0 (-8156) + °OH^0 (-8489) -> H2O2^0 (-12630) -At time : 2.3011 ns Reaction : e_aq^-1 (-4040) + °OH^0 (-7854) -> OH^-1 (-12631) -At time : 2.3011 ns Reaction : e_aq^-1 (-592) + H3O^1 (-7213) -> H^0 (-12632) -At time : 2.3011 ns Reaction : e_aq^-1 (-2073) + H3O^1 (-6821) -> H^0 (-12633) -At time : 2.3011 ns Reaction : e_aq^-1 (-3032) + H3O^1 (-6361) -> H^0 (-12634) -At time : 2.3011 ns Reaction : e_aq^-1 (-2273) + e_aq^-1 (-3979) -> OH^-1 (-12635) + OH^-1 (-12636) + H_2^0 (-12637) -At time : 2.3011 ns Reaction : H3O^1 (-10188) + OH^-1 (-12620) -> No product -At time : 2.4011 ns Reaction : OH^-1 (-12410) + H3O^1 (-7617) -> No product -At time : 2.4011 ns Reaction : OH^-1 (-12186) + H3O^1 (-6211) -> No product -At time : 2.4011 ns Reaction : H3O^1 (-10268) + OH^-1 (-12118) -> No product -At time : 2.4011 ns Reaction : e_aq^-1 (-2930) + H^0 (-11203) -> OH^-1 (-12638) + H_2^0 (-12639) -At time : 2.4011 ns Reaction : e_aq^-1 (-4023) + °OH^0 (-10775) -> OH^-1 (-12640) -At time : 2.4011 ns Reaction : H^0 (-10166) + °OH^0 (-8130) -> No product -At time : 2.4011 ns Reaction : °OH^0 (-10031) + °OH^0 (-7968) -> H2O2^0 (-12641) -At time : 2.4011 ns Reaction : e_aq^-1 (-4542) + H^0 (-9278) -> OH^-1 (-12642) + H_2^0 (-12643) -At time : 2.4011 ns Reaction : °OH^0 (-7514) + °OH^0 (-8855) -> H2O2^0 (-12644) -At time : 2.4011 ns Reaction : °OH^0 (-7458) + °OH^0 (-8182) -> H2O2^0 (-12645) -At time : 2.4011 ns Reaction : °OH^0 (-5733) + °OH^0 (-8072) -> H2O2^0 (-12646) -At time : 2.4011 ns Reaction : e_aq^-1 (-1741) + °OH^0 (-7922) -> OH^-1 (-12647) -At time : 2.4011 ns Reaction : e_aq^-1 (-1953) + H3O^1 (-7891) -> H^0 (-12648) -At time : 2.4011 ns Reaction : °OH^0 (-7634) + °OH^0 (-7636) -> H2O2^0 (-12649) -At time : 2.4011 ns Reaction : °OH^0 (-6572) + °OH^0 (-6574) -> H2O2^0 (-12650) -At time : 2.4011 ns Reaction : e_aq^-1 (-3569) + H3O^1 (-6303) -> H^0 (-12651) -At time : 2.4011 ns Reaction : OH^-1 (-12569) + H3O^1 (-8490) -> No product -At time : 2.5011 ns Reaction : H3O^1 (-10935) + OH^-1 (-12642) -> No product -At time : 2.5011 ns Reaction : OH^-1 (-12638) + H3O^1 (-8739) -> No product -At time : 2.5011 ns Reaction : OH^-1 (-12621) + H3O^1 (-7871) -> No product -At time : 2.5011 ns Reaction : H3O^1 (-7349) + OH^-1 (-12582) -> No product -At time : 2.5011 ns Reaction : H2O2^0 (-12209) + e_aq^-1 (-5498) -> OH^-1 (-12652) + °OH^0 (-12653) -At time : 2.5011 ns Reaction : OH^-1 (-12191) + H3O^1 (-7499) -> No product -At time : 2.5011 ns Reaction : OH^-1 (-12085) + H3O^1 (-8167) -> No product -At time : 2.5011 ns Reaction : e_aq^-1 (-4171) + H2O2^0 (-11727) -> OH^-1 (-12654) + °OH^0 (-12655) -At time : 2.5011 ns Reaction : e_aq^-1 (-1910) + H3O^1 (-9904) -> H^0 (-12656) -At time : 2.5011 ns Reaction : °OH^0 (-9756) + °OH^0 (-5766) -> H2O2^0 (-12657) -At time : 2.5011 ns Reaction : °OH^0 (-9621) + °OH^0 (-9618) -> H2O2^0 (-12658) -At time : 2.5011 ns Reaction : °OH^0 (-5816) + °OH^0 (-7348) -> H2O2^0 (-12659) -At time : 2.5011 ns Reaction : e_aq^-1 (-2227) + H3O^1 (-6697) -> H^0 (-12660) -At time : 2.5011 ns Reaction : °OH^0 (-6642) + °OH^0 (-6660) -> H2O2^0 (-12661) -At time : 2.5011 ns Reaction : e_aq^-1 (-2747) + H3O^1 (-6487) -> H^0 (-12662) -At time : 2.5011 ns Reaction : °OH^0 (-10537) + e_aq^-1 (-1867) -> OH^-1 (-12663) -At time : 2.5011 ns Reaction : e_aq^-1 (-3866) + H^0 (-9008) -> OH^-1 (-12664) + H_2^0 (-12665) -At time : 2.6011 ns Reaction : H3O^1 (-6095) + OH^-1 (-12652) -> No product -At time : 2.6011 ns Reaction : e_aq^-1 (-5150) + H^0 (-12577) -> OH^-1 (-12666) + H_2^0 (-12667) -At time : 2.6011 ns Reaction : H3O^1 (-9768) + OH^-1 (-12470) -> No product -At time : 2.6011 ns Reaction : OH^-1 (-12392) + H3O^1 (-8799) -> No product -At time : 2.6011 ns Reaction : °OH^0 (-11188) + e_aq^-1 (-5594) -> OH^-1 (-12668) -At time : 2.6011 ns Reaction : H3O^1 (-10931) + e_aq^-1 (-1504) -> H^0 (-12669) -At time : 2.6011 ns Reaction : °OH^0 (-10363) + e_aq^-1 (-5441) -> OH^-1 (-12670) -At time : 2.6011 ns Reaction : e_aq^-1 (-1229) + °OH^0 (-7016) -> OH^-1 (-12671) -At time : 2.6011 ns Reaction : °OH^0 (-5781) + °OH^0 (-5902) -> H2O2^0 (-12672) -At time : 2.6011 ns Reaction : e_aq^-1 (-3510) + H3O^1 (-5879) -> H^0 (-12673) -At time : 2.6011 ns Reaction : e_aq^-1 (-876) + e_aq^-1 (-4994) -> OH^-1 (-12674) + OH^-1 (-12675) + H_2^0 (-12676) -At time : 2.6011 ns Reaction : H3O^1 (-7251) + OH^-1 (-12280) -> No product -At time : 2.7011 ns Reaction : e_aq^-1 (-5570) + H2O2^0 (-12659) -> OH^-1 (-12677) + °OH^0 (-12678) -At time : 2.7011 ns Reaction : e_aq^-1 (-4907) + H2O2^0 (-12197) -> OH^-1 (-12679) + °OH^0 (-12680) -At time : 2.7011 ns Reaction : °OH^0 (-10634) + H^0 (-12168) -> No product -At time : 2.7011 ns Reaction : e_aq^-1 (-5298) + H2O2^0 (-11872) -> OH^-1 (-12681) + °OH^0 (-12682) -At time : 2.7011 ns Reaction : °OH^0 (-10980) + °OH^0 (-7526) -> H2O2^0 (-12683) -At time : 2.7011 ns Reaction : H^0 (-10864) + H^0 (-10896) -> H_2^0 (-12684) -At time : 2.7011 ns Reaction : °OH^0 (-10438) + e_aq^-1 (-944) -> OH^-1 (-12685) -At time : 2.7011 ns Reaction : e_aq^-1 (-4630) + H3O^1 (-10040) -> H^0 (-12686) -At time : 2.7011 ns Reaction : °OH^0 (-8140) + °OH^0 (-8891) -> H2O2^0 (-12687) -At time : 2.7011 ns Reaction : °OH^0 (-7098) + °OH^0 (-8858) -> H2O2^0 (-12688) -At time : 2.7011 ns Reaction : H3O^1 (-10323) + OH^-1 (-12677) -> No product -At time : 2.7011 ns Reaction : OH^-1 (-12668) + H3O^1 (-7353) -> No product -At time : 2.7011 ns Reaction : e_aq^-1 (-5536) + °OH^0 (-8414) -> OH^-1 (-12689) -At time : 2.8011 ns Reaction : H3O^1 (-8287) + OH^-1 (-12689) -> No product -At time : 2.8011 ns Reaction : OH^-1 (-12685) + H3O^1 (-7105) -> No product -At time : 2.8011 ns Reaction : OH^-1 (-12654) + H3O^1 (-7897) -> No product -At time : 2.8011 ns Reaction : H3O^1 (-8221) + OH^-1 (-12440) -> No product -At time : 2.8011 ns Reaction : e_aq^-1 (-3665) + H^0 (-11886) -> OH^-1 (-12690) + H_2^0 (-12691) -At time : 2.8011 ns Reaction : °OH^0 (-11111) + °OH^0 (-8220) -> H2O2^0 (-12692) -At time : 2.8011 ns Reaction : °OH^0 (-9630) + °OH^0 (-10714) -> H2O2^0 (-12693) -At time : 2.8011 ns Reaction : °OH^0 (-10708) + °OH^0 (-6490) -> H2O2^0 (-12694) -At time : 2.8011 ns Reaction : H3O^1 (-10304) + e_aq^-1 (-5690) -> H^0 (-12695) -At time : 2.8011 ns Reaction : H^0 (-10240) + °OH^0 (-10248) -> No product -At time : 2.8011 ns Reaction : H^0 (-9438) + °OH^0 (-6854) -> No product -At time : 2.8011 ns Reaction : e_aq^-1 (-5462) + e_aq^-1 (-8482) -> OH^-1 (-12696) + OH^-1 (-12697) + H_2^0 (-12698) -At time : 2.8011 ns Reaction : e_aq^-1 (-429) + H3O^1 (-8195) -> H^0 (-12699) -At time : 2.8011 ns Reaction : e_aq^-1 (-5427) + H3O^1 (-7423) -> H^0 (-12700) -At time : 2.8011 ns Reaction : °OH^0 (-7062) + °OH^0 (-7064) -> H2O2^0 (-12701) -At time : 2.8011 ns Reaction : e_aq^-1 (-2796) + e_aq^-1 (-2815) -> OH^-1 (-12702) + OH^-1 (-12703) + H_2^0 (-12704) -At time : 2.8011 ns Reaction : H3O^1 (-6021) + OH^-1 (-12521) -> No product -At time : 2.9011 ns Reaction : OH^-1 (-12567) + H3O^1 (-8133) -> No product -At time : 2.9011 ns Reaction : H3O^1 (-6661) + OH^-1 (-12329) -> No product -At time : 2.9011 ns Reaction : e_aq^-1 (-5504) + H2O2^0 (-11948) -> OH^-1 (-12705) + °OH^0 (-12706) -At time : 2.9011 ns Reaction : e_aq^-1 (-1004) + H2O2^0 (-11470) -> OH^-1 (-12707) + °OH^0 (-12708) -At time : 2.9011 ns Reaction : e_aq^-1 (-3753) + H3O^1 (-10715) -> H^0 (-12709) -At time : 2.9011 ns Reaction : e_aq^-1 (-741) + H3O^1 (-8889) -> H^0 (-12710) -At time : 2.9011 ns Reaction : e_aq^-1 (-2803) + H3O^1 (-7763) -> H^0 (-12711) -At time : 2.9011 ns Reaction : e_aq^-1 (-2113) + H3O^1 (-6783) -> H^0 (-12712) -At time : 2.9011 ns Reaction : e_aq^-1 (-2612) + e_aq^-1 (-2621) -> OH^-1 (-12713) + OH^-1 (-12714) + H_2^0 (-12715) -At time : 2.9011 ns Reaction : H3O^1 (-10861) + OH^-1 (-5798) -> No product -At time : 3.0011 ns Reaction : H3O^1 (-10163) + OH^-1 (-12666) -> No product -At time : 3.0011 ns Reaction : H3O^1 (-6853) + OH^-1 (-12537) -> No product -At time : 3.0011 ns Reaction : OH^-1 (-12452) + H3O^1 (-6223) -> No product -At time : 3.0011 ns Reaction : e_aq^-1 (-319) + H2O2^0 (-12156) -> OH^-1 (-12716) + °OH^0 (-12717) -At time : 3.0011 ns Reaction : H3O^1 (-6745) + OH^-1 (-11884) -> No product -At time : 3.0011 ns Reaction : e_aq^-1 (-4030) + H2O2^0 (-11778) -> OH^-1 (-12718) + °OH^0 (-12719) -At time : 3.0011 ns Reaction : H^0 (-11168) + °OH^0 (-5814) -> No product -At time : 3.0011 ns Reaction : H^0 (-10953) + e_aq^-1 (-4594) -> OH^-1 (-12720) + H_2^0 (-12721) -At time : 3.0011 ns Reaction : °OH^0 (-9754) + °OH^0 (-9751) -> H2O2^0 (-12722) -At time : 3.0011 ns Reaction : e_aq^-1 (-3807) + H3O^1 (-7787) -> H^0 (-12723) -At time : 3.0011 ns Reaction : e_aq^-1 (-3513) + H3O^1 (-7695) -> H^0 (-12724) -At time : 3.0011 ns Reaction : e_aq^-1 (-2704) + H3O^1 (-6503) -> H^0 (-12725) -At time : 3.0011 ns Reaction : e_aq^-1 (-4452) + H3O^1 (-6009) -> H^0 (-12726) -At time : 3.1011 ns Reaction : H^0 (-12695) + °OH^0 (-8330) -> No product -At time : 3.1011 ns Reaction : OH^-1 (-12674) + H3O^1 (-7491) -> No product -At time : 3.1011 ns Reaction : OH^-1 (-12608) + H3O^1 (-8550) -> No product -At time : 3.1011 ns Reaction : H3O^1 (-7337) + OH^-1 (-12532) -> No product -At time : 3.1011 ns Reaction : H2O2^0 (-11826) + e_aq^-1 (-2595) -> OH^-1 (-12727) + °OH^0 (-12728) -At time : 3.1011 ns Reaction : e_aq^-1 (-4313) + H2O2^0 (-11729) -> OH^-1 (-12729) + °OH^0 (-12730) -At time : 3.1011 ns Reaction : °OH^0 (-7924) + H^0 (-11606) -> No product -At time : 3.1011 ns Reaction : °OH^0 (-10796) + °OH^0 (-6734) -> H2O2^0 (-12731) -At time : 3.1011 ns Reaction : °OH^0 (-10597) + e_aq^-1 (-3917) -> OH^-1 (-12732) -At time : 3.1011 ns Reaction : H3O^1 (-9782) + e_aq^-1 (-3997) -> H^0 (-12733) -At time : 3.1011 ns Reaction : °OH^0 (-9761) + H^0 (-8974) -> No product -At time : 3.1011 ns Reaction : e_aq^-1 (-4044) + °OH^0 (-6716) -> OH^-1 (-12734) -At time : 3.1011 ns Reaction : e_aq^-1 (-111) + e_aq^-1 (-5549) -> OH^-1 (-12735) + OH^-1 (-12736) + H_2^0 (-12737) -At time : 3.1011 ns Reaction : H^0 (-10784) + e_aq^-1 (-4088) -> OH^-1 (-12738) + H_2^0 (-12739) -At time : 3.2011 ns Reaction : H2O2^0 (-12661) + e_aq^-1 (-3958) -> OH^-1 (-12740) + °OH^0 (-12741) -At time : 3.2011 ns Reaction : e_aq^-1 (-4915) + H^0 (-12011) -> OH^-1 (-12742) + H_2^0 (-12743) -At time : 3.2011 ns Reaction : e_aq^-1 (-1027) + H2O2^0 (-11753) -> OH^-1 (-12744) + °OH^0 (-12745) -At time : 3.2011 ns Reaction : °OH^0 (-10629) + °OH^0 (-9475) -> H2O2^0 (-12746) -At time : 3.2011 ns Reaction : e_aq^-1 (-3895) + H3O^1 (-7829) -> H^0 (-12747) -At time : 3.2011 ns Reaction : e_aq^-1 (-4397) + e_aq^-1 (-4333) -> OH^-1 (-12748) + OH^-1 (-12749) + H_2^0 (-12750) -At time : 3.2011 ns Reaction : H3O^1 (-6723) + OH^-1 (-12631) -> No product -At time : 3.2011 ns Reaction : e_aq^-1 (-4086) + °OH^0 (-7622) -> OH^-1 (-12751) -At time : 3.2011 ns Reaction : e_aq^-1 (-5356) + °OH^0 (-5805) -> OH^-1 (-12752) -At time : 3.3011 ns Reaction : OH^-1 (-12742) + H3O^1 (-8069) -> No product -At time : 3.3011 ns Reaction : OH^-1 (-12740) + H3O^1 (-6659) -> No product -At time : 3.3011 ns Reaction : e_aq^-1 (-2867) + H^0 (-12711) -> OH^-1 (-12753) + H_2^0 (-12754) -At time : 3.3011 ns Reaction : OH^-1 (-12605) + H3O^1 (-7163) -> No product -At time : 3.3011 ns Reaction : e_aq^-1 (-458) + °OH^0 (-12336) -> OH^-1 (-12755) -At time : 3.3011 ns Reaction : e_aq^-1 (-4375) + H2O2^0 (-12326) -> OH^-1 (-12756) + °OH^0 (-12757) -At time : 3.3011 ns Reaction : e_aq^-1 (-1205) + H2O2^0 (-11657) -> OH^-1 (-12758) + °OH^0 (-12759) -At time : 3.3011 ns Reaction : °OH^0 (-11017) + °OH^0 (-7112) -> H2O2^0 (-12760) -At time : 3.3011 ns Reaction : e_aq^-1 (-2434) + °OH^0 (-10743) -> OH^-1 (-12761) -At time : 3.3011 ns Reaction : H^0 (-9917) + e_aq^-1 (-4269) -> OH^-1 (-12762) + H_2^0 (-12763) -At time : 3.3011 ns Reaction : °OH^0 (-7474) + H^0 (-9070) -> No product -At time : 3.3011 ns Reaction : e_aq^-1 (-2265) + H3O^1 (-7849) -> H^0 (-12764) -At time : 3.3011 ns Reaction : e_aq^-1 (-105) + °OH^0 (-7392) -> OH^-1 (-12765) -At time : 3.3011 ns Reaction : e_aq^-1 (-3855) + °OH^0 (-9709) -> OH^-1 (-12766) -At time : 3.4011 ns Reaction : H3O^1 (-11117) + OH^-1 (-12752) -> No product -At time : 3.4011 ns Reaction : OH^-1 (-12718) + H3O^1 (-7859) -> No product -At time : 3.4011 ns Reaction : OH^-1 (-12679) + H3O^1 (-8400) -> No product -At time : 3.4011 ns Reaction : OH^-1 (-12670) + H3O^1 (-8460) -> No product -At time : 3.4011 ns Reaction : OH^-1 (-12647) + H3O^1 (-6871) -> No product -At time : 3.4011 ns Reaction : H^0 (-12596) + e_aq^-1 (-8494) -> OH^-1 (-12767) + H_2^0 (-12768) -At time : 3.4011 ns Reaction : OH^-1 (-12539) + H3O^1 (-7189) -> No product -At time : 3.4011 ns Reaction : H3O^1 (-7179) + OH^-1 (-12501) -> No product -At time : 3.4011 ns Reaction : H^0 (-12474) + e_aq^-1 (-4655) -> OH^-1 (-12769) + H_2^0 (-12770) -At time : 3.4011 ns Reaction : e_aq^-1 (-1105) + H2O2^0 (-12365) -> OH^-1 (-12771) + °OH^0 (-12772) -At time : 3.4011 ns Reaction : OH^-1 (-12203) + H3O^1 (-8454) -> No product -At time : 3.4011 ns Reaction : OH^-1 (-12190) + H3O^1 (-8093) -> No product -At time : 3.4011 ns Reaction : e_aq^-1 (-4180) + H2O2^0 (-11584) -> OH^-1 (-12773) + °OH^0 (-12774) -At time : 3.4011 ns Reaction : H3O^1 (-11302) + e_aq^-1 (-3957) -> H^0 (-12775) -At time : 3.4011 ns Reaction : H^0 (-10898) + °OH^0 (-6894) -> No product -At time : 3.4011 ns Reaction : °OH^0 (-9831) + H^0 (-10792) -> No product -At time : 3.4011 ns Reaction : °OH^0 (-10340) + °OH^0 (-8606) -> H2O2^0 (-12776) -At time : 3.4011 ns Reaction : H3O^1 (-10169) + e_aq^-1 (-5095) -> H^0 (-12777) -At time : 3.4011 ns Reaction : °OH^0 (-7360) + e_aq^-1 (-8620) -> OH^-1 (-12778) -At time : 3.4011 ns Reaction : e_aq^-1 (-4832) + °OH^0 (-8032) -> OH^-1 (-12779) -At time : 3.4011 ns Reaction : OH^-1 (-12716) + H3O^1 (-7289) -> No product -At time : 3.5011 ns Reaction : OH^-1 (-12761) + H3O^1 (-6637) -> No product -At time : 3.5011 ns Reaction : e_aq^-1 (-5421) + °OH^0 (-12717) -> OH^-1 (-12780) -At time : 3.5011 ns Reaction : H^0 (-12699) + e_aq^-1 (-5226) -> OH^-1 (-12781) + H_2^0 (-12782) -At time : 3.5011 ns Reaction : OH^-1 (-12603) + H3O^1 (-8439) -> No product -At time : 3.5011 ns Reaction : H3O^1 (-6657) + OH^-1 (-12334) -> No product -At time : 3.5011 ns Reaction : °OH^0 (-7896) + H^0 (-11522) -> No product -At time : 3.5011 ns Reaction : °OH^0 (-11070) + e_aq^-1 (-5140) -> OH^-1 (-12783) -At time : 3.5011 ns Reaction : °OH^0 (-11058) + °OH^0 (-8162) -> H2O2^0 (-12784) -At time : 3.5011 ns Reaction : °OH^0 (-10943) + °OH^0 (-7980) -> H2O2^0 (-12785) -At time : 3.5011 ns Reaction : e_aq^-1 (-4311) + H^0 (-10844) -> OH^-1 (-12786) + H_2^0 (-12787) -At time : 3.5011 ns Reaction : °OH^0 (-10653) + °OH^0 (-9515) -> H2O2^0 (-12788) -At time : 3.5011 ns Reaction : H^0 (-10590) + e_aq^-1 (-3932) -> OH^-1 (-12789) + H_2^0 (-12790) -At time : 3.5011 ns Reaction : °OH^0 (-10461) + °OH^0 (-5864) -> H2O2^0 (-12791) -At time : 3.5011 ns Reaction : °OH^0 (-10153) + °OH^0 (-5850) -> H2O2^0 (-12792) -At time : 3.5011 ns Reaction : H^0 (-9201) + °OH^0 (-9604) -> No product -At time : 3.5011 ns Reaction : H^0 (-9499) + °OH^0 (-6276) -> No product -At time : 3.5011 ns Reaction : H^0 (-9482) + °OH^0 (-6234) -> No product -At time : 3.5011 ns Reaction : e_aq^-1 (-1218) + °OH^0 (-8022) -> OH^-1 (-12793) -At time : 3.5011 ns Reaction : e_aq^-1 (-2034) + H3O^1 (-7883) -> H^0 (-12794) -At time : 3.5011 ns Reaction : e_aq^-1 (-3455) + °OH^0 (-7676) -> OH^-1 (-12795) -At time : 3.5011 ns Reaction : °OH^0 (-6548) + °OH^0 (-6554) -> H2O2^0 (-12796) -At time : 3.5011 ns Reaction : e_aq^-1 (-3475) + e_aq^-1 (-3468) -> OH^-1 (-12797) + OH^-1 (-12798) + H_2^0 (-12799) -At time : 3.6011 ns Reaction : H3O^1 (-9356) + OH^-1 (-12780) -> No product -At time : 3.6011 ns Reaction : OH^-1 (-12778) + H3O^1 (-7365) -> No product -At time : 3.6011 ns Reaction : H3O^1 (-10881) + OH^-1 (-12756) -> No product -At time : 3.6011 ns Reaction : e_aq^-1 (-3782) + H2O2^0 (-12166) -> OH^-1 (-12800) + °OH^0 (-12801) -At time : 3.6011 ns Reaction : H2O2^0 (-11708) + e_aq^-1 (-5491) -> OH^-1 (-12802) + °OH^0 (-12803) -At time : 3.6011 ns Reaction : e_aq^-1 (-5675) + H2O2^0 (-11598) -> OH^-1 (-12804) + °OH^0 (-12805) -At time : 3.6011 ns Reaction : e_aq^-1 (-4933) + H2O2^0 (-11582) -> OH^-1 (-12806) + °OH^0 (-12807) -At time : 3.6011 ns Reaction : H^0 (-11348) + °OH^0 (-7964) -> No product -At time : 3.6011 ns Reaction : H^0 (-9250) + H^0 (-10790) -> H_2^0 (-12808) -At time : 3.6011 ns Reaction : °OH^0 (-10558) + °OH^0 (-7880) -> H2O2^0 (-12809) -At time : 3.6011 ns Reaction : H3O^1 (-10399) + e_aq^-1 (-8908) -> H^0 (-12810) -At time : 3.6011 ns Reaction : °OH^0 (-10371) + °OH^0 (-10256) -> H2O2^0 (-12811) -At time : 3.6011 ns Reaction : °OH^0 (-9222) + °OH^0 (-9684) -> H2O2^0 (-12812) -At time : 3.6011 ns Reaction : °OH^0 (-9651) + °OH^0 (-5918) -> H2O2^0 (-12813) -At time : 3.6011 ns Reaction : e_aq^-1 (-5276) + °OH^0 (-9400) -> OH^-1 (-12814) -At time : 3.6011 ns Reaction : e_aq^-1 (-4493) + H^0 (-9276) -> OH^-1 (-12815) + H_2^0 (-12816) -At time : 3.6011 ns Reaction : e_aq^-1 (-605) + °OH^0 (-8897) -> OH^-1 (-12817) -At time : 3.6011 ns Reaction : e_aq^-1 (-4085) + H3O^1 (-8355) -> H^0 (-12818) -At time : 3.6011 ns Reaction : e_aq^-1 (-995) + H3O^1 (-8041) -> H^0 (-12819) -At time : 3.6011 ns Reaction : e_aq^-1 (-1432) + H3O^1 (-6967) -> H^0 (-12820) -At time : 3.6011 ns Reaction : e_aq^-1 (-2127) + H3O^1 (-6719) -> H^0 (-12821) -At time : 3.6011 ns Reaction : e_aq^-1 (-3711) + °OH^0 (-6456) -> OH^-1 (-12822) -At time : 3.6011 ns Reaction : H3O^1 (-9601) + OH^-1 (-12822) -> No product -At time : 3.6011 ns Reaction : °OH^0 (-11290) + °OH^0 (-10357) -> H2O2^0 (-12823) -At time : 3.6011 ns Reaction : e_aq^-1 (-4565) + °OH^0 (-7970) -> OH^-1 (-12824) -At time : 3.7011 ns Reaction : °OH^0 (-9057) + °OH^0 (-12772) -> H2O2^0 (-12825) -At time : 3.7011 ns Reaction : OH^-1 (-12607) + H3O^1 (-7237) -> No product -At time : 3.7011 ns Reaction : OH^-1 (-12591) + H3O^1 (-8649) -> No product -At time : 3.7011 ns Reaction : H2O2^0 (-11834) + e_aq^-1 (-3015) -> OH^-1 (-12826) + °OH^0 (-12827) -At time : 3.7011 ns Reaction : e_aq^-1 (-5170) + H2O2^0 (-11704) -> OH^-1 (-12828) + °OH^0 (-12829) -At time : 3.7011 ns Reaction : H2O2^0 (-11405) + e_aq^-1 (-5597) -> OH^-1 (-12830) + °OH^0 (-12831) -At time : 3.7011 ns Reaction : °OH^0 (-10654) + e_aq^-1 (-3576) -> OH^-1 (-12832) -At time : 3.7011 ns Reaction : H3O^1 (-10600) + e_aq^-1 (-2488) -> H^0 (-12833) -At time : 3.7011 ns Reaction : H3O^1 (-10593) + e_aq^-1 (-3946) -> H^0 (-12834) -At time : 3.7011 ns Reaction : °OH^0 (-9634) + H^0 (-9633) -> No product -At time : 3.7011 ns Reaction : e_aq^-1 (-4047) + H3O^1 (-7853) -> H^0 (-12835) -At time : 3.7011 ns Reaction : °OH^0 (-9189) + e_aq^-1 (-8728) -> OH^-1 (-12836) -At time : 3.8011 ns Reaction : e_aq^-1 (-2181) + °OH^0 (-10783) -> OH^-1 (-12837) -At time : 3.8011 ns Reaction : e_aq^-1 (-595) + H3O^1 (-8904) -> H^0 (-12838) -At time : 3.8011 ns Reaction : e_aq^-1 (-2846) + H3O^1 (-8757) -> H^0 (-12839) -At time : 3.8011 ns Reaction : e_aq^-1 (-3661) + H3O^1 (-8751) -> H^0 (-12840) -At time : 3.8011 ns Reaction : e_aq^-1 (-3065) + H3O^1 (-6337) -> H^0 (-12841) -At time : 3.8011 ns Reaction : e_aq^-1 (-3880) + e_aq^-1 (-2490) -> OH^-1 (-12842) + OH^-1 (-12843) + H_2^0 (-12844) -At time : 3.8011 ns Reaction : e_aq^-1 (-2098) + e_aq^-1 (-2207) -> OH^-1 (-12845) + OH^-1 (-12846) + H_2^0 (-12847) -At time : 3.8011 ns Reaction : e_aq^-1 (-4433) + °OH^0 (-8812) -> OH^-1 (-12848) -At time : 3.8011 ns Reaction : e_aq^-1 (-2943) + °OH^0 (-6404) -> OH^-1 (-12849) -At time : 3.9011 ns Reaction : OH^-1 (-12848) + H3O^1 (-6895) -> No product -At time : 3.9011 ns Reaction : OH^-1 (-12762) + H3O^1 (-8370) -> No product -At time : 3.9011 ns Reaction : e_aq^-1 (-2091) + H2O2^0 (-12112) -> OH^-1 (-12850) + °OH^0 (-12851) -At time : 3.9011 ns Reaction : °OH^0 (-7548) + H^0 (-11244) -> No product -At time : 3.9011 ns Reaction : e_aq^-1 (-2010) + H3O^1 (-10806) -> H^0 (-12852) -At time : 3.9011 ns Reaction : H^0 (-10701) + °OH^0 (-9616) -> No product -At time : 3.9011 ns Reaction : °OH^0 (-10612) + e_aq^-1 (-3466) -> OH^-1 (-12853) -At time : 3.9011 ns Reaction : °OH^0 (-9694) + °OH^0 (-7798) -> H2O2^0 (-12854) -At time : 4.0011 ns Reaction : H3O^1 (-10294) + OH^-1 (-12804) -> No product -At time : 4.0011 ns Reaction : OH^-1 (-12779) + H3O^1 (-7525) -> No product -At time : 4.0011 ns Reaction : OH^-1 (-12767) + H3O^1 (-6145) -> No product -At time : 4.0011 ns Reaction : OH^-1 (-12738) + H3O^1 (-7863) -> No product -At time : 4.0011 ns Reaction : e_aq^-1 (-5569) + °OH^0 (-12678) -> OH^-1 (-12855) -At time : 4.0011 ns Reaction : H3O^1 (-6501) + OH^-1 (-12625) -> No product -At time : 4.0011 ns Reaction : H3O^1 (-10050) + OH^-1 (-12522) -> No product -At time : 4.0011 ns Reaction : e_aq^-1 (-5093) + H2O2^0 (-12389) -> OH^-1 (-12856) + °OH^0 (-12857) -At time : 4.0011 ns Reaction : e_aq^-1 (-4411) + H^0 (-11633) -> OH^-1 (-12858) + H_2^0 (-12859) -At time : 4.0011 ns Reaction : H^0 (-11220) + °OH^0 (-6766) -> No product -At time : 4.0011 ns Reaction : H^0 (-10467) + e_aq^-1 (-4797) -> OH^-1 (-12860) + H_2^0 (-12861) -At time : 4.0011 ns Reaction : H^0 (-10195) + °OH^0 (-7218) -> No product -At time : 4.0011 ns Reaction : H^0 (-9829) + H^0 (-9845) -> H_2^0 (-12862) -At time : 4.0011 ns Reaction : °OH^0 (-6360) + e_aq^-1 (-8731) -> OH^-1 (-12863) -At time : 4.0011 ns Reaction : e_aq^-1 (-4897) + °OH^0 (-8064) -> OH^-1 (-12864) -At time : 4.0011 ns Reaction : °OH^0 (-7286) + °OH^0 (-7294) -> H2O2^0 (-12865) -At time : 4.0011 ns Reaction : °OH^0 (-7194) + °OH^0 (-7204) -> H2O2^0 (-12866) -At time : 4.1011 ns Reaction : OH^-1 (-12856) + H3O^1 (-7191) -> No product -At time : 4.1011 ns Reaction : OH^-1 (-12849) + H3O^1 (-6383) -> No product -At time : 4.1011 ns Reaction : °OH^0 (-5884) + H^0 (-12724) -> No product -At time : 4.1011 ns Reaction : H^0 (-11796) + H^0 (-12558) -> H_2^0 (-12867) -At time : 4.1011 ns Reaction : e_aq^-1 (-2974) + H^0 (-11688) -> OH^-1 (-12868) + H_2^0 (-12869) -At time : 4.1011 ns Reaction : °OH^0 (-10305) + °OH^0 (-11284) -> H2O2^0 (-12870) -At time : 4.1011 ns Reaction : e_aq^-1 (-5179) + H3O^1 (-11068) -> H^0 (-12871) -At time : 4.1011 ns Reaction : °OH^0 (-9826) + °OH^0 (-10794) -> H2O2^0 (-12872) -At time : 4.1011 ns Reaction : H^0 (-10384) + °OH^0 (-7450) -> No product -At time : 4.1011 ns Reaction : H^0 (-10148) + H^0 (-9068) -> H_2^0 (-12873) -At time : 4.1011 ns Reaction : °OH^0 (-9558) + °OH^0 (-6376) -> H2O2^0 (-12874) -At time : 4.1011 ns Reaction : H3O^1 (-8071) + e_aq^-1 (-8854) -> H^0 (-12875) -At time : 4.1011 ns Reaction : e_aq^-1 (-4182) + e_aq^-1 (-1982) -> OH^-1 (-12876) + OH^-1 (-12877) + H_2^0 (-12878) -At time : 4.1011 ns Reaction : OH^-1 (-12758) + H3O^1 (-8007) -> No product -At time : 4.2011 ns Reaction : OH^-1 (-12460) + H3O^1 (-6481) -> No product -At time : 4.2011 ns Reaction : OH^-1 (-12402) + H3O^1 (-7281) -> No product -At time : 4.2011 ns Reaction : OH^-1 (-12104) + H3O^1 (-7899) -> No product -At time : 4.2011 ns Reaction : H3O^1 (-10563) + e_aq^-1 (-4140) -> H^0 (-12879) -At time : 4.2011 ns Reaction : H3O^1 (-10536) + e_aq^-1 (-1752) -> H^0 (-12880) -At time : 4.2011 ns Reaction : °OH^0 (-10033) + °OH^0 (-6180) -> H2O2^0 (-12881) -At time : 4.2011 ns Reaction : H3O^1 (-9520) + e_aq^-1 (-3119) -> H^0 (-12882) -At time : 4.2011 ns Reaction : °OH^0 (-7786) + H^0 (-8980) -> No product -At time : 4.2011 ns Reaction : e_aq^-1 (-3891) + H3O^1 (-7799) -> H^0 (-12883) -At time : 4.2011 ns Reaction : e_aq^-1 (-5416) + H3O^1 (-7285) -> H^0 (-12884) -At time : 4.2011 ns Reaction : e_aq^-1 (-4804) + e_aq^-1 (-4875) -> OH^-1 (-12885) + OH^-1 (-12886) + H_2^0 (-12887) -At time : 4.2011 ns Reaction : e_aq^-1 (-4409) + H^0 (-10888) -> OH^-1 (-12888) + H_2^0 (-12889) -At time : 4.3011 ns Reaction : OH^-1 (-12855) + H3O^1 (-8937) -> No product -At time : 4.3011 ns Reaction : OH^-1 (-12828) + H3O^1 (-8493) -> No product -At time : 4.3011 ns Reaction : H3O^1 (-10696) + OH^-1 (-12753) -> No product -At time : 4.3011 ns Reaction : OH^-1 (-12338) + H3O^1 (-6341) -> No product -At time : 4.3011 ns Reaction : °OH^0 (-12311) + °OH^0 (-7096) -> H2O2^0 (-12890) -At time : 4.3011 ns Reaction : e_aq^-1 (-1039) + H2O2^0 (-12210) -> OH^-1 (-12891) + °OH^0 (-12892) -At time : 4.3011 ns Reaction : °OH^0 (-11355) + °OH^0 (-10049) -> H2O2^0 (-12893) -At time : 4.3011 ns Reaction : H3O^1 (-11000) + e_aq^-1 (-1050) -> H^0 (-12894) -At time : 4.3011 ns Reaction : H^0 (-9150) + °OH^0 (-10605) -> No product -At time : 4.3011 ns Reaction : H3O^1 (-10287) + e_aq^-1 (-8476) -> H^0 (-12895) -At time : 4.3011 ns Reaction : H3O^1 (-9797) + e_aq^-1 (-2221) -> H^0 (-12896) -At time : 4.3011 ns Reaction : °OH^0 (-6542) + °OH^0 (-7658) -> H2O2^0 (-12897) -At time : 4.3011 ns Reaction : e_aq^-1 (-5034) + °OH^0 (-7158) -> OH^-1 (-12898) -At time : 4.3011 ns Reaction : °OH^0 (-6242) + °OH^0 (-6248) -> H2O2^0 (-12899) -At time : 4.3011 ns Reaction : e_aq^-1 (-4795) + e_aq^-1 (-1132) -> OH^-1 (-12900) + OH^-1 (-12901) + H_2^0 (-12902) -At time : 4.4011 ns Reaction : OH^-1 (-12751) + H3O^1 (-6787) -> No product -At time : 4.4011 ns Reaction : e_aq^-1 (-4263) + H^0 (-12265) -> OH^-1 (-12903) + H_2^0 (-12904) -At time : 4.4011 ns Reaction : e_aq^-1 (-5037) + H^0 (-12071) -> OH^-1 (-12905) + H_2^0 (-12906) -At time : 4.4011 ns Reaction : H2O2^0 (-11719) + e_aq^-1 (-8599) -> OH^-1 (-12907) + °OH^0 (-12908) -At time : 4.4011 ns Reaction : e_aq^-1 (-1238) + H2O2^0 (-11693) -> OH^-1 (-12909) + °OH^0 (-12910) -At time : 4.4011 ns Reaction : °OH^0 (-9680) + °OH^0 (-11209) -> H2O2^0 (-12911) -At time : 4.4011 ns Reaction : °OH^0 (-9569) + e_aq^-1 (-2914) -> OH^-1 (-12912) -At time : 4.4011 ns Reaction : °OH^0 (-6156) + °OH^0 (-8594) -> H2O2^0 (-12913) -At time : 4.4011 ns Reaction : e_aq^-1 (-4818) + H3O^1 (-7081) -> H^0 (-12914) -At time : 4.4011 ns Reaction : e_aq^-1 (-4027) + H3O^1 (-6705) -> H^0 (-12915) -At time : 4.4011 ns Reaction : OH^-1 (-12511) + H3O^1 (-6531) -> No product -At time : 4.5011 ns Reaction : OH^-1 (-12903) + H3O^1 (-10824) -> No product -At time : 4.5011 ns Reaction : e_aq^-1 (-3544) + H^0 (-12341) -> OH^-1 (-12916) + H_2^0 (-12917) -At time : 4.5011 ns Reaction : e_aq^-1 (-5565) + H2O2^0 (-11912) -> OH^-1 (-12918) + °OH^0 (-12919) -At time : 4.5011 ns Reaction : e_aq^-1 (-5184) + H2O2^0 (-11448) -> OH^-1 (-12920) + °OH^0 (-12921) -At time : 4.5011 ns Reaction : e_aq^-1 (-235) + H^0 (-11142) -> OH^-1 (-12922) + H_2^0 (-12923) -At time : 4.5011 ns Reaction : °OH^0 (-10458) + °OH^0 (-6160) -> H2O2^0 (-12924) -At time : 4.5011 ns Reaction : °OH^0 (-9941) + °OH^0 (-5994) -> H2O2^0 (-12925) -At time : 4.5011 ns Reaction : °OH^0 (-9532) + °OH^0 (-9525) -> H2O2^0 (-12926) -At time : 4.5011 ns Reaction : e_aq^-1 (-1351) + H^0 (-9430) -> OH^-1 (-12927) + H_2^0 (-12928) -At time : 4.5011 ns Reaction : e_aq^-1 (-3160) + °OH^0 (-8991) -> OH^-1 (-12929) -At time : 4.5011 ns Reaction : OH^-1 (-12891) + H3O^1 (-6159) -> No product -At time : 4.6011 ns Reaction : OH^-1 (-12860) + H3O^1 (-7061) -> No product -At time : 4.6011 ns Reaction : OH^-1 (-12802) + H3O^1 (-8285) -> No product -At time : 4.6011 ns Reaction : H^0 (-12794) + e_aq^-1 (-4161) -> OH^-1 (-12930) + H_2^0 (-12931) -At time : 4.6011 ns Reaction : H3O^1 (-7511) + OH^-1 (-12744) -> No product -At time : 4.6011 ns Reaction : e_aq^-1 (-3701) + H^0 (-12506) -> OH^-1 (-12932) + H_2^0 (-12933) -At time : 4.6011 ns Reaction : H^0 (-12454) + °OH^0 (-9576) -> No product -At time : 4.6011 ns Reaction : °OH^0 (-10574) + °OH^0 (-10776) -> H2O2^0 (-12934) -At time : 4.6011 ns Reaction : °OH^0 (-10687) + e_aq^-1 (-2959) -> OH^-1 (-12935) -At time : 4.6011 ns Reaction : °OH^0 (-10061) + °OH^0 (-9293) -> H2O2^0 (-12936) -At time : 4.6011 ns Reaction : H^0 (-9195) + e_aq^-1 (-3623) -> OH^-1 (-12937) + H_2^0 (-12938) -At time : 4.6011 ns Reaction : °OH^0 (-6184) + °OH^0 (-8432) -> H2O2^0 (-12939) -At time : 4.6011 ns Reaction : e_aq^-1 (-446) + °OH^0 (-8234) -> OH^-1 (-12940) -At time : 4.6011 ns Reaction : e_aq^-1 (-3527) + H3O^1 (-7693) -> H^0 (-12941) -At time : 4.6011 ns Reaction : °OH^0 (-7308) + °OH^0 (-7320) -> H2O2^0 (-12942) -At time : 4.6011 ns Reaction : e_aq^-1 (-4245) + °OH^0 (-5986) -> OH^-1 (-12943) -At time : 4.6011 ns Reaction : e_aq^-1 (-701) + e_aq^-1 (-5105) -> OH^-1 (-12944) + OH^-1 (-12945) + H_2^0 (-12946) -At time : 4.6011 ns Reaction : OH^-1 (-12918) + H3O^1 (-7383) -> No product -At time : 4.6011 ns Reaction : OH^-1 (-12806) + H3O^1 (-8091) -> No product -At time : 4.7011 ns Reaction : OH^-1 (-12929) + H3O^1 (-6281) -> No product -At time : 4.7011 ns Reaction : H3O^1 (-7143) + OH^-1 (-12907) -> No product -At time : 4.7011 ns Reaction : OH^-1 (-12824) + H3O^1 (-7561) -> No product -At time : 4.7011 ns Reaction : °OH^0 (-12807) + °OH^0 (-8082) -> H2O2^0 (-12947) -At time : 4.7011 ns Reaction : H3O^1 (-6465) + OH^-1 (-12690) -> No product -At time : 4.7011 ns Reaction : e_aq^-1 (-2482) + H2O2^0 (-12504) -> OH^-1 (-12948) + °OH^0 (-12949) -At time : 4.7011 ns Reaction : OH^-1 (-12390) + H3O^1 (-6483) -> No product -At time : 4.7011 ns Reaction : e_aq^-1 (-3822) + H2O2^0 (-12385) -> OH^-1 (-12950) + °OH^0 (-12951) -At time : 4.7011 ns Reaction : °OH^0 (-11373) + °OH^0 (-11253) -> H2O2^0 (-12952) -At time : 4.7011 ns Reaction : H^0 (-11218) + °OH^0 (-7860) -> No product -At time : 4.7011 ns Reaction : H3O^1 (-9780) + e_aq^-1 (-2373) -> H^0 (-12953) -At time : 4.7011 ns Reaction : e_aq^-1 (-642) + °OH^0 (-7468) -> OH^-1 (-12954) -At time : 4.7011 ns Reaction : e_aq^-1 (-2149) + H3O^1 (-6793) -> H^0 (-12955) -At time : 4.7011 ns Reaction : e_aq^-1 (-1384) + °OH^0 (-6988) -> OH^-1 (-12956) -At time : 4.8011 ns Reaction : H3O^1 (-11151) + OH^-1 (-12922) -> No product -At time : 4.8011 ns Reaction : °OH^0 (-9379) + °OH^0 (-12805) -> H2O2^0 (-12957) -At time : 4.8011 ns Reaction : H3O^1 (-6219) + OH^-1 (-12798) -> No product -At time : 4.8011 ns Reaction : H2O2^0 (-11622) + e_aq^-1 (-596) -> OH^-1 (-12958) + °OH^0 (-12959) -At time : 4.8011 ns Reaction : e_aq^-1 (-4426) + H2O2^0 (-11585) -> OH^-1 (-12960) + °OH^0 (-12961) -At time : 4.8011 ns Reaction : °OH^0 (-10923) + °OH^0 (-6944) -> H2O2^0 (-12962) -At time : 4.8011 ns Reaction : H^0 (-10842) + °OH^0 (-10863) -> No product -At time : 4.8011 ns Reaction : °OH^0 (-10547) + °OH^0 (-6822) -> H2O2^0 (-12963) -At time : 4.8011 ns Reaction : H3O^1 (-9718) + e_aq^-1 (-3861) -> H^0 (-12964) -At time : 4.8011 ns Reaction : e_aq^-1 (-5362) + H3O^1 (-8913) -> H^0 (-12965) -At time : 4.8011 ns Reaction : e_aq^-1 (-3738) + °OH^0 (-8549) -> OH^-1 (-12966) -At time : 4.8011 ns Reaction : e_aq^-1 (-5330) + °OH^0 (-7272) -> OH^-1 (-12967) -At time : 4.8011 ns Reaction : e_aq^-1 (-4693) + H3O^1 (-7015) -> H^0 (-12968) -At time : 4.9011 ns Reaction : OH^-1 (-12920) + H3O^1 (-7261) -> No product -At time : 4.9011 ns Reaction : H3O^1 (-10122) + OH^-1 (-12885) -> No product -At time : 4.9011 ns Reaction : H3O^1 (-6553) + OH^-1 (-12713) -> No product -At time : 4.9011 ns Reaction : OH^-1 (-12619) + H3O^1 (-8517) -> No product -At time : 4.9011 ns Reaction : OH^-1 (-12617) + H3O^1 (-7441) -> No product -At time : 4.9011 ns Reaction : H3O^1 (-6499) + OH^-1 (-12459) -> No product -At time : 4.9011 ns Reaction : e_aq^-1 (-5657) + H2O2^0 (-12439) -> OH^-1 (-12969) + °OH^0 (-12970) -At time : 4.9011 ns Reaction : H^0 (-10957) + °OH^0 (-8381) -> No product -At time : 4.9011 ns Reaction : H^0 (-10588) + e_aq^-1 (-3955) -> OH^-1 (-12971) + H_2^0 (-12972) -At time : 4.9011 ns Reaction : °OH^0 (-9972) + e_aq^-1 (-1522) -> OH^-1 (-12973) -At time : 4.9011 ns Reaction : e_aq^-1 (-3002) + H3O^1 (-9554) -> H^0 (-12974) -At time : 4.9011 ns Reaction : e_aq^-1 (-5350) + H3O^1 (-8235) -> H^0 (-12975) -At time : 5.0011 ns Reaction : H3O^1 (-6545) + OH^-1 (-12950) -> No product -At time : 5.0011 ns Reaction : OH^-1 (-12736) + H3O^1 (-8275) -> No product -At time : 5.0011 ns Reaction : H^0 (-11991) + H^0 (-12478) -> H_2^0 (-12976) -At time : 5.0011 ns Reaction : e_aq^-1 (-3722) + H^0 (-12436) -> OH^-1 (-12977) + H_2^0 (-12978) -At time : 5.0011 ns Reaction : e_aq^-1 (-990) + H2O2^0 (-11963) -> OH^-1 (-12979) + °OH^0 (-12980) -At time : 5.0011 ns Reaction : e_aq^-1 (-3696) + H^0 (-9606) -> OH^-1 (-12981) + H_2^0 (-12982) -At time : 5.0011 ns Reaction : °OH^0 (-7912) + H^0 (-9026) -> No product -At time : 5.0011 ns Reaction : e_aq^-1 (-290) + H3O^1 (-7413) -> H^0 (-12983) -At time : 5.0011 ns Reaction : e_aq^-1 (-3992) + H3O^1 (-5955) -> H^0 (-12984) -At time : 5.0011 ns Reaction : e_aq^-1 (-112) + e_aq^-1 (-5567) -> OH^-1 (-12985) + OH^-1 (-12986) + H_2^0 (-12987) -At time : 5.0011 ns Reaction : e_aq^-1 (-2129) + e_aq^-1 (-2133) -> OH^-1 (-12988) + OH^-1 (-12989) + H_2^0 (-12990) -At time : 5.0011 ns Reaction : H3O^1 (-11026) + OH^-1 (-12979) -> No product -At time : 5.1011 ns Reaction : OH^-1 (-12967) + H3O^1 (-7267) -> No product -At time : 5.1011 ns Reaction : OH^-1 (-12858) + H3O^1 (-8688) -> No product -At time : 5.1011 ns Reaction : H3O^1 (-6365) + OH^-1 (-12836) -> No product -At time : 5.1011 ns Reaction : OH^-1 (-12830) + H3O^1 (-8281) -> No product -At time : 5.1011 ns Reaction : OH^-1 (-12597) + H3O^1 (-6221) -> No product -At time : 5.1011 ns Reaction : H^0 (-12227) + °OH^0 (-8138) -> No product -At time : 5.1011 ns Reaction : H2O2^0 (-11801) + e_aq^-1 (-3073) -> OH^-1 (-12991) + °OH^0 (-12992) -At time : 5.1011 ns Reaction : e_aq^-1 (-3548) + H2O2^0 (-11750) -> OH^-1 (-12993) + °OH^0 (-12994) -At time : 5.1011 ns Reaction : e_aq^-1 (-5451) + °OH^0 (-11128) -> OH^-1 (-12995) -At time : 5.1011 ns Reaction : e_aq^-1 (-5403) + H3O^1 (-10369) -> H^0 (-12996) -At time : 5.1011 ns Reaction : e_aq^-1 (-5221) + H3O^1 (-7469) -> H^0 (-12997) -At time : 5.1011 ns Reaction : e_aq^-1 (-5643) + H3O^1 (-7347) -> H^0 (-12998) -At time : 5.1011 ns Reaction : e_aq^-1 (-2808) + H3O^1 (-6479) -> H^0 (-12999) -At time : 5.1011 ns Reaction : OH^-1 (-12734) + H3O^1 (-7855) -> No product -At time : 5.2011 ns Reaction : OH^-1 (-12956) + H3O^1 (-7557) -> No product -At time : 5.2011 ns Reaction : OH^-1 (-12905) + H3O^1 (-7111) -> No product -At time : 5.2011 ns Reaction : °OH^0 (-8789) + H^0 (-12896) -> No product -At time : 5.2011 ns Reaction : H2O2^0 (-11435) + e_aq^-1 (-3502) -> OH^-1 (-13000) + °OH^0 (-13001) -At time : 5.2011 ns Reaction : °OH^0 (-10836) + °OH^0 (-5793) -> H2O2^0 (-13002) -At time : 5.2011 ns Reaction : e_aq^-1 (-4393) + H^0 (-9436) -> OH^-1 (-13003) + H_2^0 (-13004) -At time : 5.2011 ns Reaction : e_aq^-1 (-2567) + H3O^1 (-8553) -> H^0 (-13005) -At time : 5.2011 ns Reaction : e_aq^-1 (-5109) + °OH^0 (-8118) -> OH^-1 (-13006) -At time : 5.3011 ns Reaction : OH^-1 (-12817) + H3O^1 (-7167) -> No product -At time : 5.3011 ns Reaction : OH^-1 (-12589) + H3O^1 (-6651) -> No product -At time : 5.3011 ns Reaction : e_aq^-1 (-5129) + H2O2^0 (-11623) -> OH^-1 (-13007) + °OH^0 (-13008) -At time : 5.3011 ns Reaction : H2O2^0 (-11593) + e_aq^-1 (-2309) -> OH^-1 (-13009) + °OH^0 (-13010) -At time : 5.3011 ns Reaction : H^0 (-10071) + °OH^0 (-8673) -> No product -At time : 5.3011 ns Reaction : °OH^0 (-6990) + e_aq^-1 (-8386) -> OH^-1 (-13011) -At time : 5.3011 ns Reaction : e_aq^-1 (-5656) + H3O^1 (-8331) -> H^0 (-13012) -At time : 5.3011 ns Reaction : e_aq^-1 (-104) + H3O^1 (-8311) -> H^0 (-13013) -At time : 5.3011 ns Reaction : e_aq^-1 (-3457) + H3O^1 (-7679) -> H^0 (-13014) -At time : 5.3011 ns Reaction : e_aq^-1 (-1193) + °OH^0 (-7024) -> OH^-1 (-13015) -At time : 5.3011 ns Reaction : e_aq^-1 (-2647) + H3O^1 (-6509) -> H^0 (-13016) -At time : 5.3011 ns Reaction : e_aq^-1 (-3524) + H3O^1 (-6255) -> H^0 (-13017) -At time : 5.4011 ns Reaction : H3O^1 (-6163) + OH^-1 (-12909) -> No product -At time : 5.4011 ns Reaction : H^0 (-12067) + °OH^0 (-7494) -> No product -At time : 5.4011 ns Reaction : H^0 (-10535) + °OH^0 (-5870) -> No product -At time : 5.4011 ns Reaction : H3O^1 (-10247) + e_aq^-1 (-5393) -> H^0 (-13018) -At time : 5.4011 ns Reaction : e_aq^-1 (-4744) + H3O^1 (-10048) -> H^0 (-13019) -At time : 5.4011 ns Reaction : e_aq^-1 (-3635) + °OH^0 (-9555) -> OH^-1 (-13020) -At time : 5.4011 ns Reaction : °OH^0 (-9445) + e_aq^-1 (-3448) -> OH^-1 (-13021) -At time : 5.4011 ns Reaction : °OH^0 (-7558) + °OH^0 (-9045) -> H2O2^0 (-13022) -At time : 5.4011 ns Reaction : e_aq^-1 (-5193) + H3O^1 (-7209) -> H^0 (-13023) -At time : 5.4011 ns Reaction : OH^-1 (-12864) + H3O^1 (-8856) -> No product -At time : 5.5011 ns Reaction : OH^-1 (-12995) + H3O^1 (-6125) -> No product -At time : 5.5011 ns Reaction : H^0 (-9723) + H^0 (-12964) -> H_2^0 (-13024) -At time : 5.5011 ns Reaction : e_aq^-1 (-4717) + H2O2^0 (-12825) -> OH^-1 (-13025) + °OH^0 (-13026) -At time : 5.5011 ns Reaction : OH^-1 (-12735) + H3O^1 (-7401) -> No product -At time : 5.5011 ns Reaction : OH^-1 (-12671) + H3O^1 (-7541) -> No product -At time : 5.5011 ns Reaction : °OH^0 (-11096) + °OH^0 (-7250) -> H2O2^0 (-13027) -At time : 5.5011 ns Reaction : °OH^0 (-11083) + H^0 (-9076) -> No product -At time : 5.5011 ns Reaction : e_aq^-1 (-2735) + H3O^1 (-10713) -> H^0 (-13028) -At time : 5.5011 ns Reaction : H^0 (-10505) + e_aq^-1 (-4469) -> OH^-1 (-13029) + H_2^0 (-13030) -At time : 5.5011 ns Reaction : e_aq^-1 (-1683) + °OH^0 (-9266) -> OH^-1 (-13031) -At time : 5.6011 ns Reaction : e_aq^-1 (-1119) + H2O2^0 (-12924) -> OH^-1 (-13032) + °OH^0 (-13033) -At time : 5.6011 ns Reaction : e_aq^-1 (-4887) + °OH^0 (-12892) -> OH^-1 (-13034) -At time : 5.6011 ns Reaction : OH^-1 (-12845) + H3O^1 (-6749) -> No product -At time : 5.6011 ns Reaction : e_aq^-1 (-5654) + H2O2^0 (-11507) -> OH^-1 (-13035) + °OH^0 (-13036) -At time : 5.6011 ns Reaction : e_aq^-1 (-1188) + e_aq^-1 (-8845) -> OH^-1 (-13037) + OH^-1 (-13038) + H_2^0 (-13039) -At time : 5.6011 ns Reaction : e_aq^-1 (-4059) + H3O^1 (-6727) -> H^0 (-13040) -At time : 5.6011 ns Reaction : H3O^1 (-10096) + OH^-1 (-13032) -> No product -At time : 5.6011 ns Reaction : H^0 (-10337) + °OH^0 (-11270) -> No product -At time : 5.6011 ns Reaction : H^0 (-9676) + e_aq^-1 (-3765) -> OH^-1 (-13041) + H_2^0 (-13042) -At time : 5.7011 ns Reaction : H2O2^0 (-11990) + e_aq^-1 (-5242) -> OH^-1 (-13043) + °OH^0 (-13044) -At time : 5.7011 ns Reaction : H3O^1 (-7385) + OH^-1 (-11936) -> No product -At time : 5.7011 ns Reaction : H^0 (-10364) + °OH^0 (-8232) -> No product -At time : 5.7011 ns Reaction : °OH^0 (-9883) + °OH^0 (-6810) -> H2O2^0 (-13045) -At time : 5.7011 ns Reaction : e_aq^-1 (-2962) + H3O^1 (-8736) -> H^0 (-13046) -At time : 5.7011 ns Reaction : e_aq^-1 (-5288) + H3O^1 (-7259) -> H^0 (-13047) -At time : 5.7011 ns Reaction : OH^-1 (-12707) + H3O^1 (-7069) -> No product -At time : 5.7011 ns Reaction : H3O^1 (-11385) + OH^-1 (-12598) -> No product -At time : 5.7011 ns Reaction : e_aq^-1 (-4931) + °OH^0 (-6046) -> OH^-1 (-13048) -At time : 5.8011 ns Reaction : H3O^1 (-10826) + OH^-1 (-12663) -> No product -At time : 5.8011 ns Reaction : e_aq^-1 (-5207) + H^0 (-12632) -> OH^-1 (-13049) + H_2^0 (-13050) -At time : 5.8011 ns Reaction : OH^-1 (-12531) + H3O^1 (-9737) -> No product -At time : 5.8011 ns Reaction : H3O^1 (-10969) + e_aq^-1 (-1247) -> H^0 (-13051) -At time : 5.8011 ns Reaction : H^0 (-10630) + e_aq^-1 (-3295) -> OH^-1 (-13052) + H_2^0 (-13053) -At time : 5.8011 ns Reaction : °OH^0 (-10576) + e_aq^-1 (-4005) -> OH^-1 (-13054) -At time : 5.8011 ns Reaction : °OH^0 (-9798) + H^0 (-9012) -> No product -At time : 5.8011 ns Reaction : H3O^1 (-9787) + e_aq^-1 (-2240) -> H^0 (-13055) -At time : 5.8011 ns Reaction : H3O^1 (-9599) + e_aq^-1 (-2768) -> H^0 (-13056) -At time : 5.8011 ns Reaction : °OH^0 (-6066) + °OH^0 (-8888) -> H2O2^0 (-13057) -At time : 5.8011 ns Reaction : e_aq^-1 (-41) + H3O^1 (-8315) -> H^0 (-13058) -At time : 5.8011 ns Reaction : e_aq^-1 (-4784) + H3O^1 (-8021) -> H^0 (-13059) -At time : 5.8011 ns Reaction : OH^-1 (-5810) + H3O^1 (-7341) -> No product -At time : 5.9011 ns Reaction : OH^-1 (-13054) + H3O^1 (-7845) -> No product -At time : 5.9011 ns Reaction : OH^-1 (-12732) + H3O^1 (-9735) -> No product -At time : 5.9011 ns Reaction : H3O^1 (-11145) + OH^-1 (-12705) -> No product -At time : 5.9011 ns Reaction : e_aq^-1 (-418) + H^0 (-11134) -> OH^-1 (-13060) + H_2^0 (-13061) -At time : 5.9011 ns Reaction : °OH^0 (-10554) + e_aq^-1 (-4183) -> OH^-1 (-13062) -At time : 5.9011 ns Reaction : e_aq^-1 (-4072) + °OH^0 (-8969) -> OH^-1 (-13063) -At time : 5.9011 ns Reaction : e_aq^-1 (-4600) + H3O^1 (-6973) -> H^0 (-13064) -At time : 5.9011 ns Reaction : e_aq^-1 (-2380) + e_aq^-1 (-3898) -> OH^-1 (-13065) + OH^-1 (-13066) + H_2^0 (-13067) -At time : 5.9011 ns Reaction : H3O^1 (-6197) + OH^-1 (-13062) -> No product -At time : 6.0011 ns Reaction : OH^-1 (-13063) + H3O^1 (-6731) -> No product -At time : 6.0011 ns Reaction : OH^-1 (-13025) + H3O^1 (-7055) -> No product -At time : 6.0011 ns Reaction : H^0 (-12838) + H^0 (-12388) -> H_2^0 (-13068) -At time : 6.0011 ns Reaction : °OH^0 (-6432) + H^0 (-12243) -> No product -At time : 6.0011 ns Reaction : H3O^1 (-9866) + e_aq^-1 (-1930) -> H^0 (-13069) -At time : 6.0011 ns Reaction : e_aq^-1 (-1408) + H3O^1 (-8841) -> H^0 (-13070) -At time : 6.0011 ns Reaction : °OH^0 (-6662) + °OH^0 (-7830) -> H2O2^0 (-13071) -At time : 6.0011 ns Reaction : e_aq^-1 (-2576) + H3O^1 (-6567) -> H^0 (-13072) -At time : 6.1011 ns Reaction : H3O^1 (-10228) + OH^-1 (-12954) -> No product -At time : 6.1011 ns Reaction : H^0 (-11322) + °OH^0 (-7824) -> No product -At time : 6.1011 ns Reaction : °OH^0 (-11020) + e_aq^-1 (-865) -> OH^-1 (-13073) -At time : 6.1011 ns Reaction : °OH^0 (-10921) + °OH^0 (-7944) -> H2O2^0 (-13074) -At time : 6.1011 ns Reaction : °OH^0 (-9588) + °OH^0 (-10680) -> H2O2^0 (-13075) -At time : 6.1011 ns Reaction : e_aq^-1 (-2452) + °OH^0 (-9736) -> OH^-1 (-13076) -At time : 6.1011 ns Reaction : H^0 (-9416) + °OH^0 (-7510) -> No product -At time : 6.1011 ns Reaction : e_aq^-1 (-4722) + H3O^1 (-8670) -> H^0 (-13077) -At time : 6.2011 ns Reaction : OH^-1 (-13034) + H3O^1 (-10112) -> No product -At time : 6.2011 ns Reaction : °OH^0 (-12801) + °OH^0 (-9660) -> H2O2^0 (-13078) -At time : 6.2011 ns Reaction : OH^-1 (-12456) + H3O^1 (-6689) -> No product -At time : 6.2011 ns Reaction : e_aq^-1 (-4545) + H2O2^0 (-12371) -> OH^-1 (-13079) + °OH^0 (-13080) -At time : 6.2011 ns Reaction : e_aq^-1 (-96) + H2O2^0 (-11747) -> OH^-1 (-13081) + °OH^0 (-13082) -At time : 6.2011 ns Reaction : e_aq^-1 (-4578) + H2O2^0 (-11555) -> OH^-1 (-13083) + °OH^0 (-13084) -At time : 6.2011 ns Reaction : H^0 (-9734) + °OH^0 (-10598) -> No product -At time : 6.2011 ns Reaction : H^0 (-10571) + e_aq^-1 (-2283) -> OH^-1 (-13085) + H_2^0 (-13086) -At time : 6.2011 ns Reaction : e_aq^-1 (-2479) + H3O^1 (-6635) -> H^0 (-13087) -At time : 6.2011 ns Reaction : e_aq^-1 (-5521) + H3O^1 (-6127) -> H^0 (-13088) -At time : 6.3011 ns Reaction : OH^-1 (-13031) + H3O^1 (-6003) -> No product -At time : 6.3011 ns Reaction : H^0 (-12997) + °OH^0 (-7460) -> No product -At time : 6.3011 ns Reaction : OH^-1 (-12977) + H3O^1 (-6477) -> No product -At time : 6.3011 ns Reaction : e_aq^-1 (-5561) + °OH^0 (-12919) -> OH^-1 (-13089) -At time : 6.3011 ns Reaction : OH^-1 (-12593) + H3O^1 (-7735) -> No product -At time : 6.3011 ns Reaction : H3O^1 (-6875) + OH^-1 (-12565) -> No product -At time : 6.3011 ns Reaction : OH^-1 (-12373) + H3O^1 (-11272) -> No product -At time : 6.3011 ns Reaction : H^0 (-11975) + e_aq^-1 (-3523) -> OH^-1 (-13090) + H_2^0 (-13091) -At time : 6.3011 ns Reaction : H3O^1 (-11357) + e_aq^-1 (-1046) -> H^0 (-13092) -At time : 6.3011 ns Reaction : e_aq^-1 (-2278) + °OH^0 (-10771) -> OH^-1 (-13093) -At time : 6.3011 ns Reaction : e_aq^-1 (-4541) + °OH^0 (-9051) -> OH^-1 (-13094) -At time : 6.3011 ns Reaction : e_aq^-1 (-679) + H3O^1 (-7215) -> H^0 (-13095) -At time : 6.3011 ns Reaction : °OH^0 (-6704) + °OH^0 (-6710) -> H2O2^0 (-13096) -At time : 6.4011 ns Reaction : OH^-1 (-13094) + H3O^1 (-7569) -> No product -At time : 6.4011 ns Reaction : OH^-1 (-13015) + H3O^1 (-7011) -> No product -At time : 6.4011 ns Reaction : °OH^0 (-10586) + H^0 (-9232) -> No product -At time : 6.4011 ns Reaction : °OH^0 (-7500) + H^0 (-9064) -> No product -At time : 6.5011 ns Reaction : OH^-1 (-12935) + H3O^1 (-6405) -> No product -At time : 6.5011 ns Reaction : e_aq^-1 (-4920) + H^0 (-12914) -> OH^-1 (-13097) + H_2^0 (-13098) -At time : 6.5011 ns Reaction : e_aq^-1 (-3456) + H2O2^0 (-11998) -> OH^-1 (-13099) + °OH^0 (-13100) -At time : 6.5011 ns Reaction : H^0 (-11130) + °OH^0 (-8250) -> No product -At time : 6.5011 ns Reaction : H3O^1 (-11004) + e_aq^-1 (-4963) -> H^0 (-13101) -At time : 6.5011 ns Reaction : e_aq^-1 (-4498) + H3O^1 (-7949) -> H^0 (-13102) -At time : 6.5011 ns Reaction : e_aq^-1 (-4232) + °OH^0 (-7906) -> OH^-1 (-13103) -At time : 6.5011 ns Reaction : e_aq^-1 (-2170) + H3O^1 (-6785) -> H^0 (-13104) -At time : 6.5011 ns Reaction : °OH^0 (-7082) + e_aq^-1 (-8863) -> OH^-1 (-13105) -At time : 6.6011 ns Reaction : H3O^1 (-10464) + OH^-1 (-13037) -> No product -At time : 6.6011 ns Reaction : e_aq^-1 (-4207) + °OH^0 (-12774) -> OH^-1 (-13106) -At time : 6.6011 ns Reaction : H3O^1 (-9500) + OH^-1 (-12519) -> No product -At time : 6.6011 ns Reaction : H^0 (-12304) + °OH^0 (-8290) -> No product -At time : 6.6011 ns Reaction : °OH^0 (-10191) + e_aq^-1 (-8605) -> OH^-1 (-13107) -At time : 6.6011 ns Reaction : e_aq^-1 (-4158) + H^0 (-9020) -> OH^-1 (-13108) + H_2^0 (-13109) -At time : 6.6011 ns Reaction : e_aq^-1 (-591) + H3O^1 (-8646) -> H^0 (-13110) -At time : 6.6011 ns Reaction : e_aq^-1 (-5399) + H3O^1 (-8229) -> H^0 (-13111) -At time : 6.6011 ns Reaction : e_aq^-1 (-5408) + e_aq^-1 (-5472) -> OH^-1 (-13112) + OH^-1 (-13113) + H_2^0 (-13114) -At time : 6.6011 ns Reaction : e_aq^-1 (-4284) + e_aq^-1 (-4317) -> OH^-1 (-13115) + OH^-1 (-13116) + H_2^0 (-13117) -At time : 6.6011 ns Reaction : e_aq^-1 (-3673) + e_aq^-1 (-2919) -> OH^-1 (-13118) + OH^-1 (-13119) + H_2^0 (-13120) -At time : 6.7011 ns Reaction : e_aq^-1 (-5706) + °OH^0 (-13082) -> OH^-1 (-13121) -At time : 6.7011 ns Reaction : OH^-1 (-13011) + H3O^1 (-6985) -> No product -At time : 6.7011 ns Reaction : e_aq^-1 (-1397) + H^0 (-12066) -> OH^-1 (-13122) + H_2^0 (-13123) -At time : 6.7011 ns Reaction : e_aq^-1 (-4415) + H3O^1 (-10885) -> H^0 (-13124) -At time : 6.7011 ns Reaction : H3O^1 (-10770) + e_aq^-1 (-4080) -> H^0 (-13125) -At time : 6.7011 ns Reaction : H^0 (-9944) + e_aq^-1 (-4325) -> OH^-1 (-13126) + H_2^0 (-13127) -At time : 6.7011 ns Reaction : e_aq^-1 (-1859) + °OH^0 (-9911) -> OH^-1 (-13128) -At time : 6.7011 ns Reaction : °OH^0 (-9652) + °OH^0 (-6502) -> H2O2^0 (-13129) -At time : 6.7011 ns Reaction : °OH^0 (-6900) + °OH^0 (-8690) -> H2O2^0 (-13130) -At time : 6.8011 ns Reaction : H2O2^0 (-13096) + e_aq^-1 (-4033) -> OH^-1 (-13131) + °OH^0 (-13132) -At time : 6.8011 ns Reaction : OH^-1 (-13065) + H3O^1 (-6629) -> No product -At time : 6.8011 ns Reaction : e_aq^-1 (-5699) + H2O2^0 (-12957) -> OH^-1 (-13133) + °OH^0 (-13134) -At time : 6.8011 ns Reaction : H3O^1 (-9706) + OH^-1 (-12766) -> No product -At time : 6.8011 ns Reaction : OH^-1 (-12729) + H3O^1 (-6855) -> No product -At time : 6.8011 ns Reaction : H2O2^0 (-12516) + e_aq^-1 (-2312) -> OH^-1 (-13135) + °OH^0 (-13136) -At time : 6.8011 ns Reaction : e_aq^-1 (-4900) + H3O^1 (-11247) -> H^0 (-13137) -At time : 6.8011 ns Reaction : H^0 (-10800) + °OH^0 (-8357) -> No product -At time : 6.8011 ns Reaction : °OH^0 (-8492) + H^0 (-8950) -> No product -At time : 6.8011 ns Reaction : e_aq^-1 (-2849) + H3O^1 (-8766) -> H^0 (-13138) -At time : 6.8011 ns Reaction : e_aq^-1 (-3950) + H3O^1 (-6673) -> H^0 (-13139) -At time : 6.8011 ns Reaction : e_aq^-1 (-4781) + °OH^0 (-5739) -> OH^-1 (-13140) -At time : 6.8011 ns Reaction : e_aq^-1 (-4566) + °OH^0 (-9428) -> OH^-1 (-13141) -At time : 6.9011 ns Reaction : OH^-1 (-13083) + H3O^1 (-6175) -> No product -At time : 6.9011 ns Reaction : °OH^0 (-12970) + °OH^0 (-8417) -> H2O2^0 (-13142) -At time : 6.9011 ns Reaction : OH^-1 (-12958) + H3O^1 (-8895) -> No product -At time : 6.9011 ns Reaction : OH^-1 (-12814) + H3O^1 (-8205) -> No product -At time : 6.9011 ns Reaction : H3O^1 (-10474) + OH^-1 (-12771) -> No product -At time : 6.9011 ns Reaction : H^0 (-9390) + °OH^0 (-12263) -> No product -At time : 6.9011 ns Reaction : H3O^1 (-9720) + OH^-1 (-11848) -> No product -At time : 6.9011 ns Reaction : e_aq^-1 (-195) + H^0 (-11766) -> OH^-1 (-13143) + H_2^0 (-13144) -At time : 6.9011 ns Reaction : H3O^1 (-11169) + e_aq^-1 (-5579) -> H^0 (-13145) -At time : 6.9011 ns Reaction : °OH^0 (-10735) + °OH^0 (-6596) -> H2O2^0 (-13146) -At time : 6.9011 ns Reaction : e_aq^-1 (-912) + H3O^1 (-7099) -> H^0 (-13147) -At time : 6.9011 ns Reaction : °OH^0 (-5763) + °OH^0 (-6724) -> H2O2^0 (-13148) -At time : 7.0011 ns Reaction : H^0 (-13104) + e_aq^-1 (-4105) -> OH^-1 (-13149) + H_2^0 (-13150) -At time : 7.0011 ns Reaction : H3O^1 (-9626) + OH^-1 (-12966) -> No product -At time : 7.0011 ns Reaction : OH^-1 (-12912) + H3O^1 (-9568) -> No product -At time : 7.0011 ns Reaction : OH^-1 (-12876) + H3O^1 (-8559) -> No product -At time : 7.0011 ns Reaction : OH^-1 (-12815) + H3O^1 (-10907) -> No product -At time : 7.0011 ns Reaction : H3O^1 (-6089) + OH^-1 (-12696) -> No product -At time : 7.0011 ns Reaction : e_aq^-1 (-218) + H2O2^0 (-12251) -> OH^-1 (-13151) + °OH^0 (-13152) -At time : 7.0011 ns Reaction : H^0 (-11144) + e_aq^-1 (-5515) -> OH^-1 (-13153) + H_2^0 (-13154) -At time : 7.0011 ns Reaction : H^0 (-11090) + °OH^0 (-7246) -> No product -At time : 7.0011 ns Reaction : e_aq^-1 (-4771) + H3O^1 (-8388) -> H^0 (-13155) -At time : 7.0011 ns Reaction : e_aq^-1 (-4153) + H3O^1 (-7879) -> H^0 (-13156) -At time : 7.0011 ns Reaction : e_aq^-1 (-1893) + H3O^1 (-6829) -> H^0 (-13157) -At time : 7.1011 ns Reaction : H3O^1 (-9229) + OH^-1 (-13076) -> No product -At time : 7.1011 ns Reaction : OH^-1 (-12850) + H3O^1 (-6757) -> No product -At time : 7.1011 ns Reaction : OH^-1 (-12800) + H3O^1 (-8343) -> No product -At time : 7.1011 ns Reaction : e_aq^-1 (-4278) + H2O2^0 (-11702) -> OH^-1 (-13158) + °OH^0 (-13159) -At time : 7.1011 ns Reaction : H^0 (-10900) + e_aq^-1 (-4367) -> OH^-1 (-13160) + H_2^0 (-13161) -At time : 7.1011 ns Reaction : H^0 (-10521) + H^0 (-10892) -> H_2^0 (-13162) -At time : 7.1011 ns Reaction : H^0 (-10025) + e_aq^-1 (-4524) -> OH^-1 (-13163) + H_2^0 (-13164) -At time : 7.1011 ns Reaction : H^0 (-9952) + e_aq^-1 (-4462) -> OH^-1 (-13165) + H_2^0 (-13166) -At time : 7.1011 ns Reaction : °OH^0 (-6310) + °OH^0 (-7718) -> H2O2^0 (-13167) -At time : 7.1011 ns Reaction : e_aq^-1 (-4443) + °OH^0 (-7586) -> OH^-1 (-13168) -At time : 7.1011 ns Reaction : e_aq^-1 (-5666) + e_aq^-1 (-5608) -> OH^-1 (-13169) + OH^-1 (-13170) + H_2^0 (-13171) -At time : 7.1011 ns Reaction : OH^-1 (-12576) + H3O^1 (-6923) -> No product -At time : 7.2011 ns Reaction : OH^-1 (-12786) + H3O^1 (-8565) -> No product -At time : 7.2011 ns Reaction : H^0 (-11029) + e_aq^-1 (-1026) -> OH^-1 (-13172) + H_2^0 (-13173) -At time : 7.2011 ns Reaction : e_aq^-1 (-4049) + H^0 (-9808) -> OH^-1 (-13174) + H_2^0 (-13175) -At time : 7.2011 ns Reaction : H3O^1 (-9167) + e_aq^-1 (-3540) -> H^0 (-13176) -At time : 7.2011 ns Reaction : °OH^0 (-7918) + H^0 (-9024) -> No product -At time : 7.2011 ns Reaction : e_aq^-1 (-81) + °OH^0 (-8622) -> OH^-1 (-13177) -At time : 7.2011 ns Reaction : e_aq^-1 (-364) + °OH^0 (-7436) -> OH^-1 (-13178) -At time : 7.2011 ns Reaction : e_aq^-1 (-5674) + °OH^0 (-6110) -> OH^-1 (-13179) -At time : 7.2011 ns Reaction : e_aq^-1 (-4874) + H3O^1 (-6043) -> H^0 (-13180) -At time : 7.3011 ns Reaction : OH^-1 (-12886) + H3O^1 (-7073) -> No product -At time : 7.3011 ns Reaction : °OH^0 (-10856) + H^0 (-12880) -> No product -At time : 7.3011 ns Reaction : e_aq^-1 (-4170) + H2O2^0 (-12056) -> OH^-1 (-13181) + °OH^0 (-13182) -At time : 7.3011 ns Reaction : H^0 (-10873) + e_aq^-1 (-4234) -> OH^-1 (-13183) + H_2^0 (-13184) -At time : 7.3011 ns Reaction : e_aq^-1 (-5073) + H3O^1 (-7185) -> H^0 (-13185) -At time : 7.3011 ns Reaction : e_aq^-1 (-841) + e_aq^-1 (-4952) -> OH^-1 (-13186) + OH^-1 (-13187) + H_2^0 (-13188) -At time : 7.3011 ns Reaction : H3O^1 (-6115) + OH^-1 (-12969) -> No product -At time : 7.4011 ns Reaction : H3O^1 (-10950) + OH^-1 (-13141) -> No product -At time : 7.4011 ns Reaction : H^0 (-13092) + e_aq^-1 (-4799) -> OH^-1 (-13189) + H_2^0 (-13190) -At time : 7.4011 ns Reaction : H3O^1 (-11187) + OH^-1 (-13081) -> No product -At time : 7.4011 ns Reaction : H3O^1 (-11103) + OH^-1 (-12616) -> No product -At time : 7.4011 ns Reaction : H^0 (-11041) + °OH^0 (-8453) -> No product -At time : 7.4011 ns Reaction : e_aq^-1 (-4622) + H3O^1 (-8003) -> H^0 (-13191) -At time : 7.4011 ns Reaction : e_aq^-1 (-359) + °OH^0 (-7440) -> OH^-1 (-13192) -At time : 7.5011 ns Reaction : H3O^1 (-8391) + OH^-1 (-13097) -> No product -At time : 7.5011 ns Reaction : OH^-1 (-13079) + H3O^1 (-8682) -> No product -At time : 7.5011 ns Reaction : OH^-1 (-12986) + H3O^1 (-7333) -> No product -At time : 7.5011 ns Reaction : OH^-1 (-12681) + H3O^1 (-8179) -> No product -At time : 7.5011 ns Reaction : e_aq^-1 (-241) + H^0 (-11924) -> OH^-1 (-13193) + H_2^0 (-13194) -At time : 7.5011 ns Reaction : H^0 (-10988) + °OH^0 (-9415) -> No product -At time : 7.5011 ns Reaction : H^0 (-9174) + e_aq^-1 (-3184) -> OH^-1 (-13195) + H_2^0 (-13196) -At time : 7.5011 ns Reaction : °OH^0 (-7446) + H^0 (-9078) -> No product -At time : 7.5011 ns Reaction : °OH^0 (-6448) + °OH^0 (-8761) -> H2O2^0 (-13197) -At time : 7.6011 ns Reaction : OH^-1 (-13122) + H3O^1 (-6957) -> No product -At time : 7.6011 ns Reaction : OH^-1 (-12846) + H3O^1 (-5969) -> No product -At time : 7.6011 ns Reaction : H^0 (-12686) + e_aq^-1 (-4629) -> OH^-1 (-13198) + H_2^0 (-13199) -At time : 7.6011 ns Reaction : e_aq^-1 (-3718) + H3O^1 (-9603) -> H^0 (-13200) -At time : 7.6011 ns Reaction : e_aq^-1 (-3141) + °OH^0 (-6294) -> OH^-1 (-13201) -At time : 7.6011 ns Reaction : e_aq^-1 (-4677) + °OH^0 (-6164) -> OH^-1 (-13202) -At time : 7.7011 ns Reaction : H2O2^0 (-13027) + e_aq^-1 (-8404) -> OH^-1 (-13203) + °OH^0 (-13204) -At time : 7.7011 ns Reaction : H3O^1 (-7893) + OH^-1 (-12015) -> No product -At time : 7.7011 ns Reaction : e_aq^-1 (-5464) + H3O^1 (-7427) -> H^0 (-13205) -At time : 7.7011 ns Reaction : e_aq^-1 (-2728) + e_aq^-1 (-3726) -> OH^-1 (-13206) + OH^-1 (-13207) + H_2^0 (-13208) -At time : 7.8011 ns Reaction : H3O^1 (-9799) + OH^-1 (-13131) -> No product -At time : 7.8011 ns Reaction : OH^-1 (-12981) + H3O^1 (-6429) -> No product -At time : 7.8011 ns Reaction : OH^-1 (-12898) + H3O^1 (-7153) -> No product -At time : 7.8011 ns Reaction : e_aq^-1 (-4517) + H2O2^0 (-12122) -> OH^-1 (-13209) + °OH^0 (-13210) -At time : 7.8011 ns Reaction : H2O2^0 (-11781) + e_aq^-1 (-8932) -> OH^-1 (-13211) + °OH^0 (-13212) -At time : 7.8011 ns Reaction : H^0 (-10491) + H^0 (-10045) -> H_2^0 (-13213) -At time : 7.8011 ns Reaction : e_aq^-1 (-27) + H3O^1 (-10300) -> H^0 (-13214) -At time : 7.8011 ns Reaction : e_aq^-1 (-4848) + °OH^0 (-9421) -> OH^-1 (-13215) -At time : 7.8011 ns Reaction : e_aq^-1 (-2511) + H3O^1 (-7821) -> H^0 (-13216) -At time : 7.8011 ns Reaction : e_aq^-1 (-3878) + H3O^1 (-6627) -> H^0 (-13217) -At time : 7.8011 ns Reaction : e_aq^-1 (-3840) + H3O^1 (-6595) -> H^0 (-13218) -At time : 7.8011 ns Reaction : e_aq^-1 (-2582) + e_aq^-1 (-2587) -> OH^-1 (-13219) + OH^-1 (-13220) + H_2^0 (-13221) -At time : 7.9011 ns Reaction : °OH^0 (-13008) + °OH^0 (-12829) -> H2O2^0 (-13222) -At time : 7.9011 ns Reaction : H3O^1 (-9957) + OH^-1 (-12749) -> No product -At time : 7.9011 ns Reaction : e_aq^-1 (-3751) + H^0 (-12709) -> OH^-1 (-13223) + H_2^0 (-13224) -At time : 7.9011 ns Reaction : e_aq^-1 (-229) + H3O^1 (-11149) -> H^0 (-13225) -At time : 7.9011 ns Reaction : e_aq^-1 (-3811) + H^0 (-9715) -> OH^-1 (-13226) + H_2^0 (-13227) -At time : 7.9011 ns Reaction : e_aq^-1 (-2447) + H3O^1 (-7643) -> H^0 (-13228) -At time : 7.9011 ns Reaction : e_aq^-1 (-4597) + °OH^0 (-7986) -> OH^-1 (-13229) -At time : 8.0011 ns Reaction : H3O^1 (-11389) + OH^-1 (-13178) -> No product -At time : 8.0011 ns Reaction : H^0 (-9954) + H^0 (-12546) -> H_2^0 (-13230) -At time : 8.0011 ns Reaction : H^0 (-11377) + °OH^0 (-7182) -> No product -At time : 8.0011 ns Reaction : °OH^0 (-10462) + e_aq^-1 (-4943) -> OH^-1 (-13231) -At time : 8.0011 ns Reaction : H^0 (-9217) + °OH^0 (-6520) -> No product -At time : 8.0011 ns Reaction : e_aq^-1 (-5406) + H3O^1 (-8249) -> H^0 (-13232) -At time : 8.1011 ns Reaction : OH^-1 (-13186) + H3O^1 (-7133) -> No product -At time : 8.1011 ns Reaction : OH^-1 (-13119) + H3O^1 (-7753) -> No product -At time : 8.1011 ns Reaction : H3O^1 (-6065) + OH^-1 (-13107) -> No product -At time : 8.1011 ns Reaction : H3O^1 (-10190) + OH^-1 (-13043) -> No product -At time : 8.1011 ns Reaction : H3O^1 (-10652) + OH^-1 (-12430) -> No product -At time : 8.1011 ns Reaction : °OH^0 (-7746) + °OH^0 (-8753) -> H2O2^0 (-13233) -At time : 8.1011 ns Reaction : °OH^0 (-6352) + e_aq^-1 (-8722) -> OH^-1 (-13234) -At time : 8.2011 ns Reaction : H3O^1 (-10835) + OH^-1 (-13181) -> No product -At time : 8.2011 ns Reaction : e_aq^-1 (-4213) + H2O2^0 (-13045) -> OH^-1 (-13235) + °OH^0 (-13236) -At time : 8.2011 ns Reaction : H^0 (-12819) + e_aq^-1 (-1047) -> OH^-1 (-13237) + H_2^0 (-13238) -At time : 8.2011 ns Reaction : H3O^1 (-9988) + e_aq^-1 (-4485) -> H^0 (-13239) -At time : 8.2011 ns Reaction : e_aq^-1 (-5247) + H3O^1 (-8191) -> H^0 (-13240) -At time : 8.2011 ns Reaction : °OH^0 (-6074) + °OH^0 (-8150) -> H2O2^0 (-13241) -At time : 8.2011 ns Reaction : e_aq^-1 (-2080) + H3O^1 (-6799) -> H^0 (-13242) -At time : 8.3011 ns Reaction : OH^-1 (-13234) + H3O^1 (-8727) -> No product -At time : 8.3011 ns Reaction : OH^-1 (-13105) + H3O^1 (-8337) -> No product -At time : 8.3011 ns Reaction : OH^-1 (-13049) + H3O^1 (-6141) -> No product -At time : 8.3011 ns Reaction : e_aq^-1 (-4552) + H2O2^0 (-12939) -> OH^-1 (-13243) + °OH^0 (-13244) -At time : 8.3011 ns Reaction : H3O^1 (-7639) + OH^-1 (-12457) -> No product -At time : 8.3011 ns Reaction : e_aq^-1 (-3927) + °OH^0 (-9732) -> OH^-1 (-13245) -At time : 8.3011 ns Reaction : °OH^0 (-7076) + °OH^0 (-8048) -> H2O2^0 (-13246) -At time : 8.3011 ns Reaction : e_aq^-1 (-3752) + °OH^0 (-7772) -> OH^-1 (-13247) -At time : 8.3011 ns Reaction : e_aq^-1 (-3594) + H3O^1 (-6333) -> H^0 (-13248) -At time : 8.4011 ns Reaction : OH^-1 (-13007) + H3O^1 (-8121) -> No product -At time : 8.4011 ns Reaction : OH^-1 (-13006) + H3O^1 (-8892) -> No product -At time : 8.4011 ns Reaction : H^0 (-12821) + e_aq^-1 (-2103) -> OH^-1 (-13249) + H_2^0 (-13250) -At time : 8.4011 ns Reaction : OH^-1 (-12769) + H3O^1 (-6165) -> No product -At time : 8.4011 ns Reaction : OH^-1 (-12305) + H3O^1 (-6323) -> No product -At time : 8.4011 ns Reaction : H^0 (-9190) + °OH^0 (-6370) -> No product -At time : 8.4011 ns Reaction : e_aq^-1 (-4120) + °OH^0 (-6776) -> OH^-1 (-13251) -At time : 8.5011 ns Reaction : °OH^0 (-12622) + °OH^0 (-6800) -> H2O2^0 (-13252) -At time : 8.5011 ns Reaction : H^0 (-12477) + °OH^0 (-5790) -> No product -At time : 8.5011 ns Reaction : e_aq^-1 (-1579) + H2O2^0 (-11945) -> OH^-1 (-13253) + °OH^0 (-13254) -At time : 8.5011 ns Reaction : OH^-1 (-11849) + H3O^1 (-6583) -> No product -At time : 8.5011 ns Reaction : e_aq^-1 (-2400) + H2O2^0 (-11572) -> OH^-1 (-13255) + °OH^0 (-13256) -At time : 8.5011 ns Reaction : °OH^0 (-9254) + °OH^0 (-5970) -> H2O2^0 (-13257) -At time : 8.5011 ns Reaction : e_aq^-1 (-5541) + H3O^1 (-8309) -> H^0 (-13258) -At time : 8.5011 ns Reaction : °OH^0 (-7350) + °OH^0 (-8298) -> H2O2^0 (-13259) -At time : 8.5011 ns Reaction : e_aq^-1 (-4203) + °OH^0 (-6792) -> OH^-1 (-13260) -At time : 8.5011 ns Reaction : e_aq^-1 (-3517) + H3O^1 (-5881) -> H^0 (-13261) -At time : 8.6011 ns Reaction : OH^-1 (-13229) + H3O^1 (-7973) -> No product -At time : 8.6011 ns Reaction : H3O^1 (-10971) + OH^-1 (-13202) -> No product -At time : 8.6011 ns Reaction : H3O^1 (-5917) + OH^-1 (-13041) -> No product -At time : 8.6011 ns Reaction : H3O^1 (-7027) + OH^-1 (-13038) -> No product -At time : 8.6011 ns Reaction : °OH^0 (-10157) + e_aq^-1 (-5108) -> OH^-1 (-13262) -At time : 8.6011 ns Reaction : e_aq^-1 (-1950) + H3O^1 (-6819) -> H^0 (-13263) -At time : 8.7011 ns Reaction : H3O^1 (-10151) + OH^-1 (-13172) -> No product -At time : 8.7011 ns Reaction : H^0 (-10356) + °OH^0 (-12803) -> No product -At time : 8.7011 ns Reaction : °OH^0 (-11315) + e_aq^-1 (-3511) -> OH^-1 (-13264) -At time : 8.7011 ns Reaction : °OH^0 (-8333) + °OH^0 (-8642) -> H2O2^0 (-13265) -At time : 8.7011 ns Reaction : °OH^0 (-6232) + °OH^0 (-7688) -> H2O2^0 (-13266) -At time : 8.8011 ns Reaction : OH^-1 (-13203) + H3O^1 (-7449) -> No product -At time : 8.8011 ns Reaction : e_aq^-1 (-4719) + H^0 (-11927) -> OH^-1 (-13267) + H_2^0 (-13268) -At time : 8.8011 ns Reaction : e_aq^-1 (-4767) + °OH^0 (-10109) -> OH^-1 (-13269) -At time : 8.8011 ns Reaction : °OH^0 (-9324) + e_aq^-1 (-5085) -> OH^-1 (-13270) -At time : 8.8011 ns Reaction : e_aq^-1 (-2627) + °OH^0 (-6558) -> OH^-1 (-13271) -At time : 8.9011 ns Reaction : H3O^1 (-5863) + OH^-1 (-13215) -> No product -At time : 8.9011 ns Reaction : OH^-1 (-13209) + H3O^1 (-6915) -> No product -At time : 8.9011 ns Reaction : OH^-1 (-12517) + H3O^1 (-5825) -> No product -At time : 8.9011 ns Reaction : e_aq^-1 (-284) + °OH^0 (-8284) -> OH^-1 (-13272) -At time : 8.9011 ns Reaction : e_aq^-1 (-5446) + H3O^1 (-7433) -> H^0 (-13273) -At time : 8.9011 ns Reaction : e_aq^-1 (-5074) + °OH^0 (-6052) -> OH^-1 (-13274) -At time : 9.0011 ns Reaction : H3O^1 (-7181) + OH^-1 (-13270) -> No product -At time : 9.0011 ns Reaction : OH^-1 (-13193) + H3O^1 (-8293) -> No product -At time : 9.0011 ns Reaction : H3O^1 (-11325) + OH^-1 (-13174) -> No product -At time : 9.0011 ns Reaction : OH^-1 (-12985) + H3O^1 (-7399) -> No product -At time : 9.0011 ns Reaction : °OH^0 (-6124) + °OH^0 (-8943) -> H2O2^0 (-13275) -At time : 9.0011 ns Reaction : e_aq^-1 (-3812) + H3O^1 (-8784) -> H^0 (-13276) -At time : 9.1011 ns Reaction : e_aq^-1 (-1976) + H^0 (-13263) -> OH^-1 (-13277) + H_2^0 (-13278) -At time : 9.1011 ns Reaction : OH^-1 (-13206) + H3O^1 (-7769) -> No product -At time : 9.1011 ns Reaction : H3O^1 (-7621) + OH^-1 (-13106) -> No product -At time : 9.1011 ns Reaction : e_aq^-1 (-5511) + H2O2^0 (-12264) -> OH^-1 (-13279) + °OH^0 (-13280) -At time : 9.2011 ns Reaction : H3O^1 (-5987) + OH^-1 (-13103) -> No product -At time : 9.2011 ns Reaction : H^0 (-12820) + °OH^0 (-6934) -> No product -At time : 9.2011 ns Reaction : OH^-1 (-12547) + H3O^1 (-7705) -> No product -At time : 9.2011 ns Reaction : OH^-1 (-12014) + H3O^1 (-6773) -> No product -At time : 9.2011 ns Reaction : H3O^1 (-10983) + e_aq^-1 (-4659) -> H^0 (-13281) -At time : 9.2011 ns Reaction : °OH^0 (-10975) + °OH^0 (-8674) -> H2O2^0 (-13282) -At time : 9.2011 ns Reaction : H^0 (-9827) + °OH^0 (-6780) -> No product -At time : 9.3011 ns Reaction : OH^-1 (-13274) + H3O^1 (-7141) -> No product -At time : 9.3011 ns Reaction : H^0 (-12882) + °OH^0 (-7724) -> No product -At time : 9.3011 ns Reaction : e_aq^-1 (-811) + H2O2^0 (-12464) -> OH^-1 (-13283) + °OH^0 (-13284) -At time : 9.3011 ns Reaction : e_aq^-1 (-3877) + H2O2^0 (-12029) -> OH^-1 (-13285) + °OH^0 (-13286) -At time : 9.3011 ns Reaction : °OH^0 (-9907) + °OH^0 (-7898) -> H2O2^0 (-13287) -At time : 9.3011 ns Reaction : H^0 (-9260) + °OH^0 (-7610) -> No product -At time : 9.3011 ns Reaction : °OH^0 (-9183) + °OH^0 (-6338) -> H2O2^0 (-13288) -At time : 9.4011 ns Reaction : H3O^1 (-11147) + OH^-1 (-13153) -> No product -At time : 9.4011 ns Reaction : e_aq^-1 (-2593) + H^0 (-13072) -> OH^-1 (-13289) + H_2^0 (-13290) -At time : 9.4011 ns Reaction : OH^-1 (-12991) + H3O^1 (-6331) -> No product -At time : 9.4011 ns Reaction : H^0 (-12309) + °OH^0 (-7496) -> No product -At time : 9.4011 ns Reaction : e_aq^-1 (-2896) + H2O2^0 (-12179) -> OH^-1 (-13291) + °OH^0 (-13292) -At time : 9.4011 ns Reaction : °OH^0 (-10551) + H^0 (-9869) -> No product -At time : 9.4011 ns Reaction : e_aq^-1 (-5086) + H3O^1 (-8125) -> H^0 (-13293) -At time : 9.4011 ns Reaction : e_aq^-1 (-4601) + °OH^0 (-6954) -> OH^-1 (-13294) -At time : 9.5011 ns Reaction : OH^-1 (-13073) + H3O^1 (-8077) -> No product -At time : 9.5011 ns Reaction : H3O^1 (-10251) + OH^-1 (-12697) -> No product -At time : 9.5011 ns Reaction : e_aq^-1 (-5014) + °OH^0 (-8110) -> OH^-1 (-13295) -At time : 9.5011 ns Reaction : e_aq^-1 (-4286) + H3O^1 (-7907) -> H^0 (-13296) -At time : 9.6011 ns Reaction : OH^-1 (-13271) + H3O^1 (-6561) -> No product -At time : 9.6011 ns Reaction : H3O^1 (-10684) + OH^-1 (-13118) -> No product -At time : 9.6011 ns Reaction : e_aq^-1 (-142) + H^0 (-12199) -> OH^-1 (-13297) + H_2^0 (-13298) -At time : 9.6011 ns Reaction : °OH^0 (-11328) + °OH^0 (-7620) -> H2O2^0 (-13299) -At time : 9.6011 ns Reaction : e_aq^-1 (-925) + H3O^1 (-7147) -> H^0 (-13300) -At time : 9.7011 ns Reaction : H3O^1 (-5949) + OH^-1 (-13285) -> No product -At time : 9.7011 ns Reaction : e_aq^-1 (-4683) + H2O2^0 (-13246) -> OH^-1 (-13301) + °OH^0 (-13302) -At time : 9.7011 ns Reaction : e_aq^-1 (-394) + H2O2^0 (-12823) -> OH^-1 (-13303) + °OH^0 (-13304) -At time : 9.7011 ns Reaction : H2O2^0 (-11815) + e_aq^-1 (-4175) -> OH^-1 (-13305) + °OH^0 (-13306) -At time : 9.7011 ns Reaction : H^0 (-10351) + H^0 (-11779) -> H_2^0 (-13307) -At time : 9.7011 ns Reaction : e_aq^-1 (-5333) + H3O^1 (-11110) -> H^0 (-13308) -At time : 9.7011 ns Reaction : e_aq^-1 (-692) + H3O^1 (-8151) -> H^0 (-13309) -At time : 9.8011 ns Reaction : H3O^1 (-10328) + OH^-1 (-13211) -> No product -At time : 9.8011 ns Reaction : H^0 (-12871) + °OH^0 (-8648) -> No product -At time : 9.8011 ns Reaction : OH^-1 (-12441) + H3O^1 (-8709) -> No product -At time : 9.8011 ns Reaction : °OH^0 (-6552) + H^0 (-12391) -> No product -At time : 9.8011 ns Reaction : °OH^0 (-11304) + °OH^0 (-7648) -> H2O2^0 (-13310) -At time : 9.8011 ns Reaction : °OH^0 (-10683) + °OH^0 (-6418) -> H2O2^0 (-13311) -At time : 9.8011 ns Reaction : e_aq^-1 (-5059) + °OH^0 (-8114) -> OH^-1 (-13312) -At time : 9.8011 ns Reaction : e_aq^-1 (-3925) + H3O^1 (-7803) -> H^0 (-13313) -At time : 9.8011 ns Reaction : e_aq^-1 (-5433) + H3O^1 (-7313) -> H^0 (-13314) -At time : 9.9011 ns Reaction : OH^-1 (-13272) + H3O^1 (-7331) -> No product -At time : 9.9011 ns Reaction : e_aq^-1 (-4745) + H^0 (-13051) -> OH^-1 (-13315) + H_2^0 (-13316) -At time : 9.9011 ns Reaction : °OH^0 (-6616) + H^0 (-12133) -> No product -At time : 9.9011 ns Reaction : °OH^0 (-11023) + e_aq^-1 (-889) -> OH^-1 (-13317) -At time : 9.9011 ns Reaction : e_aq^-1 (-1289) + H3O^1 (-7531) -> H^0 (-13318) -At time : 9.9011 ns Reaction : e_aq^-1 (-266) + H3O^1 (-7451) -> H^0 (-13319) -At time : 9.9011 ns Reaction : e_aq^-1 (-2784) + H3O^1 (-5911) -> H^0 (-13320) -At time : 10.001 ns Reaction : e_aq^-1 (-2041) + H^0 (-12955) -> OH^-1 (-13321) + H_2^0 (-13322) -At time : 10.001 ns Reaction : H3O^1 (-6683) + OH^-1 (-12635) -> No product -At time : 10.001 ns Reaction : °OH^0 (-10782) + e_aq^-1 (-4000) -> OH^-1 (-13323) -At time : 10.001 ns Reaction : °OH^0 (-10777) + e_aq^-1 (-4036) -> OH^-1 (-13324) -At time : 10.001 ns Reaction : H^0 (-10646) + °OH^0 (-6274) -> No product -At time : 10.001 ns Reaction : H3O^1 (-9685) + e_aq^-1 (-2590) -> H^0 (-13325) -At time : 10.001 ns Reaction : e_aq^-1 (-2013) + H3O^1 (-5837) -> H^0 (-13326) -At time : 11.001 ns Reaction : OH^-1 (-13315) + H3O^1 (-8025) -> No product -At time : 11.001 ns Reaction : OH^-1 (-13305) + H3O^1 (-7887) -> No product -At time : 11.001 ns Reaction : H2O2^0 (-13167) + e_aq^-1 (-3085) -> OH^-1 (-13327) + °OH^0 (-13328) -At time : 11.001 ns Reaction : OH^-1 (-13165) + H3O^1 (-7933) -> No product -At time : 11.001 ns Reaction : OH^-1 (-13140) + H3O^1 (-7521) -> No product -At time : 11.001 ns Reaction : e_aq^-1 (-870) + H^0 (-13101) -> OH^-1 (-13329) + H_2^0 (-13330) -At time : 11.001 ns Reaction : H3O^1 (-6235) + OH^-1 (-13000) -> No product -At time : 11.001 ns Reaction : H3O^1 (-6645) + OH^-1 (-12971) -> No product -At time : 11.001 ns Reaction : OH^-1 (-12927) + H3O^1 (-6995) -> No product -At time : 11.001 ns Reaction : e_aq^-1 (-5348) + °OH^0 (-12682) -> OH^-1 (-13331) -At time : 11.001 ns Reaction : H3O^1 (-5847) + OH^-1 (-12604) -> No product -At time : 11.001 ns Reaction : OH^-1 (-12585) + H3O^1 (-7881) -> No product -At time : 11.001 ns Reaction : e_aq^-1 (-3742) + H2O2^0 (-12206) -> OH^-1 (-13332) + °OH^0 (-13333) -At time : 11.001 ns Reaction : °OH^0 (-6182) + H^0 (-11533) -> No product -At time : 11.001 ns Reaction : H3O^1 (-11372) + e_aq^-1 (-5077) -> H^0 (-13334) -At time : 11.001 ns Reaction : H^0 (-10819) + H^0 (-9890) -> H_2^0 (-13335) -At time : 11.001 ns Reaction : H^0 (-10681) + e_aq^-1 (-2891) -> OH^-1 (-13336) + H_2^0 (-13337) -At time : 11.001 ns Reaction : H3O^1 (-10591) + e_aq^-1 (-3966) -> H^0 (-13338) -At time : 11.001 ns Reaction : °OH^0 (-9930) + °OH^0 (-8363) -> H2O2^0 (-13339) -At time : 11.001 ns Reaction : °OH^0 (-9765) + °OH^0 (-6684) -> H2O2^0 (-13340) -At time : 11.001 ns Reaction : e_aq^-1 (-5379) + H3O^1 (-7407) -> H^0 (-13341) -At time : 11.001 ns Reaction : e_aq^-1 (-3561) + H3O^1 (-6263) -> H^0 (-13342) -At time : 12.001 ns Reaction : OH^-1 (-13312) + H3O^1 (-8601) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13303) + H3O^1 (-8643) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13255) + H3O^1 (-6725) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13231) + H3O^1 (-6033) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13192) + H3O^1 (-6087) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13169) + H3O^1 (-8289) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13116) + H3O^1 (-7913) -> No product -At time : 12.001 ns Reaction : H3O^1 (-5897) + OH^-1 (-13020) -> No product -At time : 12.001 ns Reaction : OH^-1 (-13003) + H3O^1 (-5993) -> No product -At time : 12.001 ns Reaction : e_aq^-1 (-4513) + H2O2^0 (-12962) -> OH^-1 (-13343) + °OH^0 (-13344) -At time : 12.001 ns Reaction : H3O^1 (-9745) + OH^-1 (-12948) -> No product -At time : 12.001 ns Reaction : e_aq^-1 (-945) + H2O2^0 (-12890) -> OH^-1 (-13345) + °OH^0 (-13346) -At time : 12.001 ns Reaction : e_aq^-1 (-2533) + H^0 (-12883) -> OH^-1 (-13347) + H_2^0 (-13348) -At time : 12.001 ns Reaction : OH^-1 (-12789) + H3O^1 (-5833) -> No product -At time : 12.001 ns Reaction : °OH^0 (-11347) + °OH^0 (-6958) -> H2O2^0 (-13349) -At time : 12.001 ns Reaction : °OH^0 (-10945) + °OH^0 (-6940) -> H2O2^0 (-13350) -At time : 12.001 ns Reaction : e_aq^-1 (-2606) + H3O^1 (-10730) -> H^0 (-13351) -At time : 12.001 ns Reaction : °OH^0 (-10601) + °OH^0 (-7650) -> H2O2^0 (-13352) -At time : 12.001 ns Reaction : °OH^0 (-9909) + °OH^0 (-10545) -> H2O2^0 (-13353) -At time : 12.001 ns Reaction : H3O^1 (-10480) + e_aq^-1 (-1019) -> H^0 (-13354) -At time : 12.001 ns Reaction : °OH^0 (-9771) + °OH^0 (-6682) -> H2O2^0 (-13355) -At time : 12.001 ns Reaction : °OH^0 (-9565) + °OH^0 (-5906) -> H2O2^0 (-13356) -At time : 12.001 ns Reaction : H^0 (-9465) + °OH^0 (-6226) -> No product -At time : 12.001 ns Reaction : e_aq^-1 (-3606) + H3O^1 (-8742) -> H^0 (-13357) -At time : 12.001 ns Reaction : °OH^0 (-6936) + °OH^0 (-8522) -> H2O2^0 (-13358) -At time : 12.001 ns Reaction : e_aq^-1 (-2111) + H3O^1 (-8358) -> H^0 (-13359) -At time : 12.001 ns Reaction : e_aq^-1 (-4750) + H3O^1 (-8011) -> H^0 (-13360) -At time : 12.001 ns Reaction : °OH^0 (-5787) + °OH^0 (-6696) -> H2O2^0 (-13361) -At time : 12.001 ns Reaction : e_aq^-1 (-3759) + H3O^1 (-6469) -> H^0 (-13362) -At time : 12.001 ns Reaction : OH^-1 (-13321) + H3O^1 (-5977) -> No product -At time : 13.001 ns Reaction : OH^-1 (-13345) + H3O^1 (-8089) -> No product -At time : 13.001 ns Reaction : H3O^1 (-10709) + OH^-1 (-13247) -> No product -At time : 13.001 ns Reaction : H3O^1 (-10446) + OH^-1 (-13237) -> No product -At time : 13.001 ns Reaction : e_aq^-1 (-630) + H2O2^0 (-13222) -> OH^-1 (-13363) + °OH^0 (-13364) -At time : 13.001 ns Reaction : OH^-1 (-13128) + H3O^1 (-7601) -> No product -At time : 13.001 ns Reaction : H3O^1 (-6847) + OH^-1 (-13115) -> No product -At time : 13.001 ns Reaction : °OH^0 (-13100) + e_aq^-1 (-3465) -> OH^-1 (-13365) -At time : 13.001 ns Reaction : OH^-1 (-13035) + H3O^1 (-7363) -> No product -At time : 13.001 ns Reaction : H2O2^0 (-12952) + e_aq^-1 (-775) -> OH^-1 (-13366) + °OH^0 (-13367) -At time : 13.001 ns Reaction : e_aq^-1 (-4821) + H^0 (-12875) -> OH^-1 (-13368) + H_2^0 (-13369) -At time : 13.001 ns Reaction : H3O^1 (-5851) + OH^-1 (-12765) -> No product -At time : 13.001 ns Reaction : OH^-1 (-12664) + H3O^1 (-6593) -> No product -At time : 13.001 ns Reaction : H^0 (-12578) + e_aq^-1 (-4877) -> OH^-1 (-13370) + H_2^0 (-13371) -At time : 13.001 ns Reaction : OH^-1 (-12552) + H3O^1 (-6367) -> No product -At time : 13.001 ns Reaction : H2O2^0 (-12287) + e_aq^-1 (-1832) -> OH^-1 (-13372) + °OH^0 (-13373) -At time : 13.001 ns Reaction : e_aq^-1 (-5349) + H^0 (-11120) -> OH^-1 (-13374) + H_2^0 (-13375) -At time : 13.001 ns Reaction : °OH^0 (-10799) + °OH^0 (-6742) -> H2O2^0 (-13376) -At time : 13.001 ns Reaction : H^0 (-9144) + °OH^0 (-10608) -> No product -At time : 13.001 ns Reaction : °OH^0 (-9113) + °OH^0 (-6874) -> H2O2^0 (-13377) -At time : 13.001 ns Reaction : °OH^0 (-8684) + °OH^0 (-9033) -> H2O2^0 (-13378) -At time : 13.001 ns Reaction : °OH^0 (-6506) + H^0 (-9000) -> No product -At time : 13.001 ns Reaction : e_aq^-1 (-3326) + °OH^0 (-8985) -> OH^-1 (-13379) -At time : 13.001 ns Reaction : e_aq^-1 (-3846) + H3O^1 (-7801) -> H^0 (-13380) -At time : 13.001 ns Reaction : e_aq^-1 (-3570) + H3O^1 (-7715) -> H^0 (-13381) -At time : 13.001 ns Reaction : e_aq^-1 (-4382) + °OH^0 (-8570) -> OH^-1 (-13382) -At time : 14.001 ns Reaction : OH^-1 (-13363) + H3O^1 (-8131) -> No product -At time : 14.001 ns Reaction : OH^-1 (-13332) + H3O^1 (-6425) -> No product -At time : 14.001 ns Reaction : H3O^1 (-6063) + OH^-1 (-13317) -> No product -At time : 14.001 ns Reaction : H^0 (-13313) + e_aq^-1 (-2471) -> OH^-1 (-13383) + H_2^0 (-13384) -At time : 14.001 ns Reaction : H3O^1 (-11046) + OH^-1 (-13295) -> No product -At time : 14.001 ns Reaction : OH^-1 (-13294) + H3O^1 (-7037) -> No product -At time : 14.001 ns Reaction : H^0 (-13273) + e_aq^-1 (-5357) -> OH^-1 (-13385) + H_2^0 (-13386) -At time : 14.001 ns Reaction : OH^-1 (-13207) + H3O^1 (-6495) -> No product -At time : 14.001 ns Reaction : OH^-1 (-13093) + H3O^1 (-5961) -> No product -At time : 14.001 ns Reaction : OH^-1 (-12993) + H3O^1 (-9518) -> No product -At time : 14.001 ns Reaction : H3O^1 (-10413) + OH^-1 (-12945) -> No product -At time : 14.001 ns Reaction : H3O^1 (-9578) + OH^-1 (-12932) -> No product -At time : 14.001 ns Reaction : H3O^1 (-9749) + OH^-1 (-12837) -> No product -At time : 14.001 ns Reaction : OH^-1 (-12783) + H3O^1 (-8165) -> No product -At time : 14.001 ns Reaction : e_aq^-1 (-5156) + H2O2^0 (-12687) -> OH^-1 (-13387) + °OH^0 (-13388) -At time : 14.001 ns Reaction : OH^-1 (-12640) + H3O^1 (-5871) -> No product -At time : 14.001 ns Reaction : OH^-1 (-12533) + H3O^1 (-5835) -> No product -At time : 14.001 ns Reaction : e_aq^-1 (-2899) + H2O2^0 (-11877) -> OH^-1 (-13389) + °OH^0 (-13390) -At time : 14.001 ns Reaction : °OH^0 (-11330) + °OH^0 (-8360) -> H2O2^0 (-13391) -At time : 14.001 ns Reaction : H^0 (-10345) + e_aq^-1 (-5367) -> OH^-1 (-13392) + H_2^0 (-13393) -At time : 14.001 ns Reaction : H3O^1 (-10264) + e_aq^-1 (-5517) -> H^0 (-13394) -At time : 14.001 ns Reaction : e_aq^-1 (-4921) + H3O^1 (-8442) -> H^0 (-13395) -At time : 14.001 ns Reaction : °OH^0 (-7532) + °OH^0 (-8384) -> H2O2^0 (-13396) -At time : 14.001 ns Reaction : e_aq^-1 (-2524) + e_aq^-1 (-3888) -> OH^-1 (-13397) + OH^-1 (-13398) + H_2^0 (-13399) -At time : 14.001 ns Reaction : e_aq^-1 (-4017) + °OH^0 (-6702) -> OH^-1 (-13400) -At time : 15.001 ns Reaction : H3O^1 (-11123) + OH^-1 (-13385) -> No product -At time : 15.001 ns Reaction : OH^-1 (-13301) + H3O^1 (-8595) -> No product -At time : 15.001 ns Reaction : H3O^1 (-8123) + OH^-1 (-13187) -> No product -At time : 15.001 ns Reaction : OH^-1 (-13133) + H3O^1 (-11283) -> No product -At time : 15.001 ns Reaction : H3O^1 (-11032) + OH^-1 (-13048) -> No product -At time : 15.001 ns Reaction : H3O^1 (-5973) + OH^-1 (-12989) -> No product -At time : 15.001 ns Reaction : OH^-1 (-12842) + H3O^1 (-8349) -> No product -At time : 15.001 ns Reaction : e_aq^-1 (-2466) + H^0 (-12723) -> OH^-1 (-13401) + H_2^0 (-13402) -At time : 15.001 ns Reaction : H^0 (-12669) + e_aq^-1 (-4363) -> OH^-1 (-13403) + H_2^0 (-13404) -At time : 15.001 ns Reaction : H3O^1 (-10686) + OH^-1 (-12612) -> No product -At time : 15.001 ns Reaction : H3O^1 (-10241) + OH^-1 (-12490) -> No product -At time : 15.001 ns Reaction : e_aq^-1 (-5483) + H2O2^0 (-12350) -> OH^-1 (-13405) + °OH^0 (-13406) -At time : 15.001 ns Reaction : °OH^0 (-6010) + H^0 (-12331) -> No product -At time : 15.001 ns Reaction : e_aq^-1 (-3951) + °OH^0 (-10758) -> OH^-1 (-13407) -At time : 15.001 ns Reaction : °OH^0 (-10607) + °OH^0 (-9439) -> H2O2^0 (-13408) -At time : 15.001 ns Reaction : °OH^0 (-9733) + °OH^0 (-6638) -> H2O2^0 (-13409) -At time : 15.001 ns Reaction : °OH^0 (-9719) + °OH^0 (-6614) -> H2O2^0 (-13410) -At time : 15.001 ns Reaction : °OH^0 (-5890) + °OH^0 (-7710) -> H2O2^0 (-13411) -At time : 15.001 ns Reaction : e_aq^-1 (-3575) + H3O^1 (-6317) -> H^0 (-13412) -At time : 15.001 ns Reaction : e_aq^-1 (-2235) + °OH^0 (-7838) -> OH^-1 (-13413) -At time : 16.001 ns Reaction : e_aq^-1 (-2359) + H^0 (-13216) -> OH^-1 (-13414) + H_2^0 (-13415) -At time : 16.001 ns Reaction : °OH^0 (-6094) + H^0 (-13205) -> No product -At time : 16.001 ns Reaction : OH^-1 (-13163) + H3O^1 (-7987) -> No product -At time : 16.001 ns Reaction : H2O2^0 (-13142) + e_aq^-1 (-5571) -> OH^-1 (-13416) + °OH^0 (-13417) -At time : 16.001 ns Reaction : e_aq^-1 (-1283) + H^0 (-13064) -> OH^-1 (-13418) + H_2^0 (-13419) -At time : 16.001 ns Reaction : e_aq^-1 (-908) + H^0 (-13059) -> OH^-1 (-13420) + H_2^0 (-13421) -At time : 16.001 ns Reaction : OH^-1 (-12940) + H3O^1 (-11266) -> No product -At time : 16.001 ns Reaction : H^0 (-12764) + e_aq^-1 (-4037) -> OH^-1 (-13422) + H_2^0 (-13423) -At time : 16.001 ns Reaction : e_aq^-1 (-4448) + H^0 (-12580) -> OH^-1 (-13424) + H_2^0 (-13425) -At time : 16.001 ns Reaction : e_aq^-1 (-3642) + H^0 (-12476) -> OH^-1 (-13426) + H_2^0 (-13427) -At time : 16.001 ns Reaction : e_aq^-1 (-4489) + H2O2^0 (-12468) -> OH^-1 (-13428) + °OH^0 (-13429) -At time : 16.001 ns Reaction : e_aq^-1 (-17) + H2O2^0 (-12429) -> OH^-1 (-13430) + °OH^0 (-13431) -At time : 16.001 ns Reaction : °OH^0 (-11073) + °OH^0 (-9071) -> H2O2^0 (-13432) -At time : 16.001 ns Reaction : °OH^0 (-10410) + °OH^0 (-7186) -> H2O2^0 (-13433) -At time : 16.001 ns Reaction : H^0 (-9480) + °OH^0 (-5888) -> No product -At time : 16.001 ns Reaction : e_aq^-1 (-1096) + H3O^1 (-8874) -> H^0 (-13434) -At time : 16.001 ns Reaction : e_aq^-1 (-4370) + H3O^1 (-7925) -> H^0 (-13435) -At time : 16.001 ns Reaction : e_aq^-1 (-1574) + H3O^1 (-7553) -> H^0 (-13436) -At time : 16.001 ns Reaction : e_aq^-1 (-2440) + H3O^1 (-6671) -> H^0 (-13437) -At time : 16.001 ns Reaction : e_aq^-1 (-2639) + H3O^1 (-6585) -> H^0 (-13438) -At time : 16.001 ns Reaction : °OH^0 (-5820) + °OH^0 (-6260) -> H2O2^0 (-13439) -At time : 16.001 ns Reaction : e_aq^-1 (-4560) + H3O^1 (-6173) -> H^0 (-13440) -At time : 17.001 ns Reaction : OH^-1 (-13329) + H3O^1 (-8081) -> No product -At time : 17.001 ns Reaction : H3O^1 (-6457) + OH^-1 (-13291) -> No product -At time : 17.001 ns Reaction : OH^-1 (-13283) + H3O^1 (-7199) -> No product -At time : 17.001 ns Reaction : OH^-1 (-13151) + H3O^1 (-8283) -> No product -At time : 17.001 ns Reaction : °OH^0 (-13136) + °OH^0 (-7802) -> H2O2^0 (-13441) -At time : 17.001 ns Reaction : H3O^1 (-10981) + OH^-1 (-12793) -> No product -At time : 17.001 ns Reaction : e_aq^-1 (-4031) + H2O2^0 (-12081) -> OH^-1 (-13442) + °OH^0 (-13443) -At time : 17.001 ns Reaction : e_aq^-1 (-4607) + H2O2^0 (-11999) -> OH^-1 (-13444) + °OH^0 (-13445) -At time : 17.001 ns Reaction : H^0 (-11889) + °OH^0 (-7264) -> No product -At time : 17.001 ns Reaction : °OH^0 (-10916) + °OH^0 (-6008) -> H2O2^0 (-13446) -At time : 17.001 ns Reaction : H^0 (-10582) + e_aq^-1 (-2416) -> OH^-1 (-13447) + H_2^0 (-13448) -At time : 17.001 ns Reaction : H3O^1 (-10342) + e_aq^-1 (-5387) -> H^0 (-13449) -At time : 17.001 ns Reaction : °OH^0 (-9574) + °OH^0 (-5824) -> H2O2^0 (-13450) -At time : 17.001 ns Reaction : °OH^0 (-9376) + e_aq^-1 (-5615) -> OH^-1 (-13451) -At time : 17.001 ns Reaction : e_aq^-1 (-8341) + H3O^1 (-8850) -> H^0 (-13452) -At time : 17.001 ns Reaction : e_aq^-1 (-4695) + H3O^1 (-8055) -> H^0 (-13453) -At time : 17.001 ns Reaction : e_aq^-1 (-4790) + H3O^1 (-8023) -> H^0 (-13454) -At time : 17.001 ns Reaction : e_aq^-1 (-2349) + H3O^1 (-7817) -> H^0 (-13455) -At time : 17.001 ns Reaction : °OH^0 (-6424) + °OH^0 (-7754) -> H2O2^0 (-13456) -At time : 17.001 ns Reaction : e_aq^-1 (-3707) + H3O^1 (-6435) -> H^0 (-13457) -At time : 18.001 ns Reaction : OH^-1 (-13420) + H3O^1 (-7529) -> No product -At time : 18.001 ns Reaction : OH^-1 (-13418) + H3O^1 (-6999) -> No product -At time : 18.001 ns Reaction : OH^-1 (-13416) + H3O^1 (-7329) -> No product -At time : 18.001 ns Reaction : OH^-1 (-13413) + H3O^1 (-7851) -> No product -At time : 18.001 ns Reaction : OH^-1 (-13403) + H3O^1 (-6963) -> No product -At time : 18.001 ns Reaction : OH^-1 (-13365) + H3O^1 (-8706) -> No product -At time : 18.001 ns Reaction : e_aq^-1 (-1198) + °OH^0 (-12910) -> OH^-1 (-13458) -At time : 18.001 ns Reaction : e_aq^-1 (-5151) + H^0 (-12154) -> OH^-1 (-13459) + H_2^0 (-13460) -At time : 18.001 ns Reaction : e_aq^-1 (-5135) + H3O^1 (-10415) -> H^0 (-13461) -At time : 18.001 ns Reaction : e_aq^-1 (-619) + °OH^0 (-10200) -> OH^-1 (-13462) -At time : 18.001 ns Reaction : H3O^1 (-9587) + e_aq^-1 (-3676) -> H^0 (-13463) -At time : 18.001 ns Reaction : °OH^0 (-7338) + °OH^0 (-8282) -> H2O2^0 (-13464) -At time : 18.001 ns Reaction : e_aq^-1 (-1404) + e_aq^-1 (-4388) -> OH^-1 (-13465) + OH^-1 (-13466) + H_2^0 (-13467) -At time : 19.001 ns Reaction : OH^-1 (-13374) + H3O^1 (-8187) -> No product -At time : 19.001 ns Reaction : e_aq^-1 (-3660) + H2O2^0 (-13356) -> OH^-1 (-13468) + °OH^0 (-13469) -At time : 19.001 ns Reaction : H3O^1 (-5941) + OH^-1 (-13289) -> No product -At time : 19.001 ns Reaction : H3O^1 (-10994) + OH^-1 (-13269) -> No product -At time : 19.001 ns Reaction : OH^-1 (-13262) + H3O^1 (-8147) -> No product -At time : 19.001 ns Reaction : H3O^1 (-5985) + OH^-1 (-13183) -> No product -At time : 19.001 ns Reaction : e_aq^-1 (-1005) + H^0 (-13147) -> OH^-1 (-13470) + H_2^0 (-13471) -At time : 19.001 ns Reaction : H3O^1 (-9862) + OH^-1 (-12988) -> No product -At time : 19.001 ns Reaction : OH^-1 (-12937) + H3O^1 (-5895) -> No product -At time : 19.001 ns Reaction : e_aq^-1 (-4279) + H2O2^0 (-12602) -> OH^-1 (-13472) + °OH^0 (-13473) -At time : 19.001 ns Reaction : e_aq^-1 (-5364) + H2O2^0 (-12200) -> OH^-1 (-13474) + °OH^0 (-13475) -At time : 19.001 ns Reaction : H^0 (-12189) + e_aq^-1 (-3038) -> OH^-1 (-13476) + H_2^0 (-13477) -At time : 19.001 ns Reaction : e_aq^-1 (-4298) + H2O2^0 (-12088) -> OH^-1 (-13478) + °OH^0 (-13479) -At time : 19.001 ns Reaction : °OH^0 (-10263) + °OH^0 (-5811) -> H2O2^0 (-13480) -At time : 19.001 ns Reaction : H3O^1 (-9978) + e_aq^-1 (-1593) -> H^0 (-13481) -At time : 19.001 ns Reaction : °OH^0 (-8014) + H^0 (-8958) -> No product -At time : 19.001 ns Reaction : °OH^0 (-6938) + °OH^0 (-8835) -> H2O2^0 (-13482) -At time : 19.001 ns Reaction : °OH^0 (-6782) + °OH^0 (-8797) -> H2O2^0 (-13483) -At time : 19.001 ns Reaction : e_aq^-1 (-1914) + H3O^1 (-7919) -> H^0 (-13484) -At time : 19.001 ns Reaction : e_aq^-1 (-1986) + H3O^1 (-7895) -> H^0 (-13485) -At time : 19.001 ns Reaction : °OH^0 (-7342) + °OH^0 (-7404) -> H2O2^0 (-13486) -At time : 20.001 ns Reaction : OH^-1 (-13458) + H3O^1 (-7009) -> No product -At time : 20.001 ns Reaction : H3O^1 (-10787) + OH^-1 (-13323) -> No product -At time : 20.001 ns Reaction : H^0 (-13261) + e_aq^-1 (-3515) -> OH^-1 (-13487) + H_2^0 (-13488) -At time : 20.001 ns Reaction : OH^-1 (-13260) + H3O^1 (-7877) -> No product -At time : 20.001 ns Reaction : OH^-1 (-13112) + H3O^1 (-6133) -> No product -At time : 20.001 ns Reaction : OH^-1 (-12944) + H3O^1 (-7127) -> No product -At time : 20.001 ns Reaction : H3O^1 (-10641) + OH^-1 (-12916) -> No product -At time : 20.001 ns Reaction : H2O2^0 (-12911) + e_aq^-1 (-3837) -> OH^-1 (-13489) + °OH^0 (-13490) -At time : 20.001 ns Reaction : °OH^0 (-12728) + °OH^0 (-5922) -> H2O2^0 (-13491) -At time : 20.001 ns Reaction : H2O2^0 (-12099) + e_aq^-1 (-4859) -> OH^-1 (-13492) + °OH^0 (-13493) -At time : 20.001 ns Reaction : H^0 (-12057) + °OH^0 (-6258) -> No product -At time : 20.001 ns Reaction : e_aq^-1 (-3900) + H2O2^0 (-11530) -> OH^-1 (-13494) + °OH^0 (-13495) -At time : 20.001 ns Reaction : H^0 (-11205) + °OH^0 (-6440) -> No product -At time : 20.001 ns Reaction : H^0 (-11013) + e_aq^-1 (-859) -> OH^-1 (-13496) + H_2^0 (-13497) -At time : 20.001 ns Reaction : H3O^1 (-9776) + e_aq^-1 (-4015) -> H^0 (-13498) -At time : 20.001 ns Reaction : e_aq^-1 (-3699) + H3O^1 (-9620) -> H^0 (-13499) -At time : 20.001 ns Reaction : °OH^0 (-7006) + °OH^0 (-7540) -> H2O2^0 (-13500) -At time : 21.001 ns Reaction : OH^-1 (-13428) + H3O^1 (-6189) -> No product -At time : 21.001 ns Reaction : OH^-1 (-13398) + H3O^1 (-7795) -> No product -At time : 21.001 ns Reaction : H3O^1 (-5991) + OH^-1 (-13382) -> No product -At time : 21.001 ns Reaction : OH^-1 (-13379) + H3O^1 (-6233) -> No product -At time : 21.001 ns Reaction : H^0 (-13318) + e_aq^-1 (-4736) -> OH^-1 (-13501) + H_2^0 (-13502) -At time : 21.001 ns Reaction : OH^-1 (-13249) + H3O^1 (-6779) -> No product -At time : 21.001 ns Reaction : H3O^1 (-5937) + OH^-1 (-13226) -> No product -At time : 21.001 ns Reaction : e_aq^-1 (-5438) + H^0 (-12884) -> OH^-1 (-13503) + H_2^0 (-13504) -At time : 21.001 ns Reaction : H^0 (-12712) + °OH^0 (-9810) -> No product -At time : 21.001 ns Reaction : OH^-1 (-12636) + H3O^1 (-7811) -> No product -At time : 21.001 ns Reaction : e_aq^-1 (-5194) + H2O2^0 (-12235) -> OH^-1 (-13505) + °OH^0 (-13506) -At time : 21.001 ns Reaction : e_aq^-1 (-4055) + H2O2^0 (-11861) -> OH^-1 (-13507) + °OH^0 (-13508) -At time : 21.001 ns Reaction : H2O2^0 (-11665) + e_aq^-1 (-4766) -> OH^-1 (-13509) + °OH^0 (-13510) -At time : 21.001 ns Reaction : °OH^0 (-11329) + °OH^0 (-7862) -> H2O2^0 (-13511) -At time : 21.001 ns Reaction : e_aq^-1 (-352) + H3O^1 (-11135) -> H^0 (-13512) -At time : 21.001 ns Reaction : e_aq^-1 (-2579) + °OH^0 (-10737) -> OH^-1 (-13513) -At time : 21.001 ns Reaction : H3O^1 (-10387) + e_aq^-1 (-5455) -> H^0 (-13514) -At time : 21.001 ns Reaction : H^0 (-9282) + °OH^0 (-7554) -> No product -At time : 21.001 ns Reaction : e_aq^-1 (-5004) + H3O^1 (-8499) -> H^0 (-13515) -At time : 21.001 ns Reaction : e_aq^-1 (-4332) + °OH^0 (-7600) -> OH^-1 (-13516) -At time : 21.001 ns Reaction : e_aq^-1 (-3836) + H3O^1 (-6597) -> H^0 (-13517) -At time : 22.001 ns Reaction : e_aq^-1 (-283) + H^0 (-13514) -> OH^-1 (-13518) + H_2^0 (-13519) -At time : 22.001 ns Reaction : OH^-1 (-13220) + H3O^1 (-9683) -> No product -At time : 22.001 ns Reaction : H3O^1 (-11387) + OH^-1 (-13179) -> No product -At time : 22.001 ns Reaction : OH^-1 (-13085) + H3O^1 (-7641) -> No product -At time : 22.001 ns Reaction : H3O^1 (-6955) + OH^-1 (-12960) -> No product -At time : 22.001 ns Reaction : OH^-1 (-12714) + H3O^1 (-6547) -> No product -At time : 22.001 ns Reaction : e_aq^-1 (-1228) + H^0 (-12211) -> OH^-1 (-13520) + H_2^0 (-13521) -At time : 22.001 ns Reaction : e_aq^-1 (-4176) + H2O2^0 (-11952) -> OH^-1 (-13522) + °OH^0 (-13523) -At time : 22.001 ns Reaction : e_aq^-1 (-3588) + H2O2^0 (-11757) -> OH^-1 (-13524) + °OH^0 (-13525) -At time : 22.001 ns Reaction : H^0 (-10378) + °OH^0 (-11140) -> No product -At time : 22.001 ns Reaction : °OH^0 (-10101) + °OH^0 (-5848) -> H2O2^0 (-13526) -At time : 22.001 ns Reaction : °OH^0 (-7030) + H^0 (-9056) -> No product -At time : 22.001 ns Reaction : °OH^0 (-8090) + °OH^0 (-8447) -> H2O2^0 (-13527) -At time : 22.001 ns Reaction : e_aq^-1 (-3301) + °OH^0 (-6250) -> OH^-1 (-13528) -At time : 23.001 ns Reaction : OH^-1 (-13492) + H3O^1 (-7985) -> No product -At time : 23.001 ns Reaction : OH^-1 (-13405) + H3O^1 (-8257) -> No product -At time : 23.001 ns Reaction : H3O^1 (-10660) + OH^-1 (-13327) -> No product -At time : 23.001 ns Reaction : °OH^0 (-10354) + °OH^0 (-13280) -> H2O2^0 (-13529) -At time : 23.001 ns Reaction : OH^-1 (-13135) + H3O^1 (-7647) -> No product -At time : 23.001 ns Reaction : H3O^1 (-6711) + OH^-1 (-13009) -> No product -At time : 23.001 ns Reaction : °OH^0 (-12741) + e_aq^-1 (-2324) -> OH^-1 (-13530) -At time : 23.001 ns Reaction : H2O2^0 (-12556) + e_aq^-1 (-3585) -> OH^-1 (-13531) + °OH^0 (-13532) -At time : 23.001 ns Reaction : e_aq^-1 (-3720) + H2O2^0 (-12333) -> OH^-1 (-13533) + °OH^0 (-13534) -At time : 23.001 ns Reaction : e_aq^-1 (-2540) + H2O2^0 (-12266) -> OH^-1 (-13535) + °OH^0 (-13536) -At time : 23.001 ns Reaction : °OH^0 (-11164) + °OH^0 (-7300) -> H2O2^0 (-13537) -At time : 23.001 ns Reaction : e_aq^-1 (-688) + H3O^1 (-10201) -> H^0 (-13538) -At time : 23.001 ns Reaction : H^0 (-9987) + H^0 (-9040) -> H_2^0 (-13539) -At time : 23.001 ns Reaction : H3O^1 (-9622) + e_aq^-1 (-2921) -> H^0 (-13540) -At time : 23.001 ns Reaction : e_aq^-1 (-471) + H^0 (-9406) -> OH^-1 (-13541) + H_2^0 (-13542) -At time : 24.001 ns Reaction : H3O^1 (-7357) + OH^-1 (-13451) -> No product -At time : 24.001 ns Reaction : e_aq^-1 (-424) + H^0 (-13308) -> OH^-1 (-13543) + H_2^0 (-13544) -At time : 24.001 ns Reaction : e_aq^-1 (-5315) + H^0 (-13240) -> OH^-1 (-13545) + H_2^0 (-13546) -At time : 24.001 ns Reaction : e_aq^-1 (-585) + H2O2^0 (-12866) -> OH^-1 (-13547) + °OH^0 (-13548) -At time : 24.001 ns Reaction : OH^-1 (-12720) + H3O^1 (-7559) -> No product -At time : 24.001 ns Reaction : e_aq^-1 (-3652) + H^0 (-12575) -> OH^-1 (-13549) + H_2^0 (-13550) -At time : 24.001 ns Reaction : OH^-1 (-12564) + H3O^1 (-7947) -> No product -At time : 24.001 ns Reaction : H2O2^0 (-12093) + e_aq^-1 (-4836) -> OH^-1 (-13551) + °OH^0 (-13552) -At time : 24.001 ns Reaction : e_aq^-1 (-5103) + H2O2^0 (-11625) -> OH^-1 (-13553) + °OH^0 (-13554) -At time : 24.001 ns Reaction : °OH^0 (-10756) + °OH^0 (-7812) -> H2O2^0 (-13555) -At time : 24.001 ns Reaction : H^0 (-10331) + e_aq^-1 (-5508) -> OH^-1 (-13556) + H_2^0 (-13557) -At time : 24.001 ns Reaction : °OH^0 (-10041) + e_aq^-1 (-4777) -> OH^-1 (-13558) -At time : 24.001 ns Reaction : °OH^0 (-9724) + °OH^0 (-6610) -> H2O2^0 (-13559) -At time : 25.001 ns Reaction : H3O^1 (-9689) + OH^-1 (-13535) -> No product -At time : 25.001 ns Reaction : OH^-1 (-13507) + H3O^1 (-6767) -> No product -At time : 25.001 ns Reaction : H3O^1 (-10484) + OH^-1 (-13368) -> No product -At time : 25.001 ns Reaction : H^0 (-13225) + H^0 (-9084) -> H_2^0 (-13560) -At time : 25.001 ns Reaction : H3O^1 (-9811) + OH^-1 (-12930) -> No product -At time : 25.001 ns Reaction : H3O^1 (-10816) + OH^-1 (-12877) -> No product -At time : 25.001 ns Reaction : H2O2^0 (-12424) + e_aq^-1 (-8695) -> OH^-1 (-13561) + °OH^0 (-13562) -At time : 25.001 ns Reaction : OH^-1 (-11730) + H3O^1 (-7379) -> No product -At time : 25.001 ns Reaction : e_aq^-1 (-5259) + H2O2^0 (-11553) -> OH^-1 (-13563) + °OH^0 (-13564) -At time : 25.001 ns Reaction : H^0 (-10093) + °OH^0 (-10105) -> No product -At time : 25.001 ns Reaction : e_aq^-1 (-1874) + °OH^0 (-9933) -> OH^-1 (-13565) -At time : 25.001 ns Reaction : °OH^0 (-8180) + °OH^0 (-8184) -> H2O2^0 (-13566) -At time : 26.001 ns Reaction : H3O^1 (-6297) + OH^-1 (-13201) -> No product -At time : 26.001 ns Reaction : H^0 (-13047) + e_aq^-1 (-5540) -> OH^-1 (-13567) + H_2^0 (-13568) -At time : 26.001 ns Reaction : OH^-1 (-12943) + H3O^1 (-6713) -> No product -At time : 26.001 ns Reaction : e_aq^-1 (-4402) + H2O2^0 (-12123) -> OH^-1 (-13569) + °OH^0 (-13570) -At time : 26.001 ns Reaction : °OH^0 (-9192) + °OH^0 (-6382) -> H2O2^0 (-13571) -At time : 26.001 ns Reaction : e_aq^-1 (-4198) + H3O^1 (-5965) -> H^0 (-13572) -At time : 27.001 ns Reaction : H3O^1 (-9880) + OH^-1 (-13478) -> No product -At time : 27.001 ns Reaction : OH^-1 (-13366) + H3O^1 (-8063) -> No product -At time : 27.001 ns Reaction : e_aq^-1 (-3841) + H^0 (-13325) -> OH^-1 (-13573) + H_2^0 (-13574) -At time : 27.001 ns Reaction : OH^-1 (-13324) + H3O^1 (-6769) -> No product -At time : 27.001 ns Reaction : H3O^1 (-8267) + OH^-1 (-13279) -> No product -At time : 27.001 ns Reaction : e_aq^-1 (-1890) + °OH^0 (-13159) -> OH^-1 (-13575) -At time : 27.001 ns Reaction : °OH^0 (-12680) + °OH^0 (-5736) -> H2O2^0 (-13576) -At time : 27.001 ns Reaction : H^0 (-12167) + H^0 (-9594) -> H_2^0 (-13577) -At time : 27.001 ns Reaction : H^0 (-12069) + e_aq^-1 (-2520) -> OH^-1 (-13578) + H_2^0 (-13579) -At time : 27.001 ns Reaction : e_aq^-1 (-4326) + H^0 (-12006) -> OH^-1 (-13580) + H_2^0 (-13581) -At time : 27.001 ns Reaction : H3O^1 (-9980) + e_aq^-1 (-1615) -> H^0 (-13582) -At time : 27.001 ns Reaction : H^0 (-9900) + °OH^0 (-5760) -> No product -At time : 27.001 ns Reaction : H^0 (-9668) + e_aq^-1 (-2786) -> OH^-1 (-13583) + H_2^0 (-13584) -At time : 27.001 ns Reaction : °OH^0 (-9218) + e_aq^-1 (-2514) -> OH^-1 (-13585) -At time : 27.001 ns Reaction : °OH^0 (-8024) + H^0 (-9060) -> No product -At time : 27.001 ns Reaction : °OH^0 (-8693) + °OH^0 (-8696) -> H2O2^0 (-13586) -At time : 27.001 ns Reaction : e_aq^-1 (-5489) + °OH^0 (-8411) -> OH^-1 (-13587) -At time : 27.001 ns Reaction : °OH^0 (-6686) + °OH^0 (-7842) -> H2O2^0 (-13588) -At time : 27.001 ns Reaction : °OH^0 (-6640) + °OH^0 (-7794) -> H2O2^0 (-13589) -At time : 28.001 ns Reaction : OH^-1 (-13426) + H3O^1 (-6375) -> No product -At time : 28.001 ns Reaction : H2O2^0 (-12963) + e_aq^-1 (-4223) -> OH^-1 (-13590) + °OH^0 (-13591) -At time : 28.001 ns Reaction : e_aq^-1 (-1998) + H2O2^0 (-11755) -> OH^-1 (-13592) + °OH^0 (-13593) -At time : 28.001 ns Reaction : e_aq^-1 (-5409) + H2O2^0 (-11632) -> OH^-1 (-13594) + °OH^0 (-13595) -At time : 28.001 ns Reaction : °OH^0 (-10632) + °OH^0 (-6236) -> H2O2^0 (-13596) -At time : 28.001 ns Reaction : e_aq^-1 (-5314) + °OH^0 (-10359) -> OH^-1 (-13597) -At time : 28.001 ns Reaction : °OH^0 (-7800) + °OH^0 (-8979) -> H2O2^0 (-13598) -At time : 28.001 ns Reaction : °OH^0 (-6770) + °OH^0 (-7616) -> H2O2^0 (-13599) -At time : 28.001 ns Reaction : e_aq^-1 (-5468) + H3O^1 (-7323) -> H^0 (-13600) -At time : 28.001 ns Reaction : °OH^0 (-6402) + °OH^0 (-6408) -> H2O2^0 (-13601) -At time : 28.001 ns Reaction : °OH^0 (-6344) + °OH^0 (-6350) -> H2O2^0 (-13602) -At time : 28.001 ns Reaction : e_aq^-1 (-3609) + H3O^1 (-6289) -> H^0 (-13603) -At time : 29.001 ns Reaction : OH^-1 (-13580) + H3O^1 (-5869) -> No product -At time : 29.001 ns Reaction : OH^-1 (-13505) + H3O^1 (-7467) -> No product -At time : 29.001 ns Reaction : e_aq^-1 (-3930) + °OH^0 (-13495) -> OH^-1 (-13604) -At time : 29.001 ns Reaction : e_aq^-1 (-4107) + H2O2^0 (-13483) -> OH^-1 (-13605) + °OH^0 (-13606) -At time : 29.001 ns Reaction : H3O^1 (-10249) + OH^-1 (-13474) -> No product -At time : 29.001 ns Reaction : OH^-1 (-13465) + H3O^1 (-8571) -> No product -At time : 29.001 ns Reaction : OH^-1 (-13424) + H3O^1 (-6929) -> No product -At time : 29.001 ns Reaction : OH^-1 (-13223) + H3O^1 (-6591) -> No product -At time : 29.001 ns Reaction : OH^-1 (-12900) + H3O^1 (-8005) -> No product -At time : 29.001 ns Reaction : H3O^1 (-7227) + OH^-1 (-12755) -> No product -At time : 29.001 ns Reaction : OH^-1 (-12555) + H3O^1 (-7971) -> No product -At time : 29.001 ns Reaction : e_aq^-1 (-457) + H2O2^0 (-12415) -> OH^-1 (-13607) + °OH^0 (-13608) -At time : 29.001 ns Reaction : e_aq^-1 (-4748) + H^0 (-12083) -> OH^-1 (-13609) + H_2^0 (-13610) -At time : 29.001 ns Reaction : H^0 (-10223) + °OH^0 (-11124) -> No product -At time : 29.001 ns Reaction : H3O^1 (-10098) + e_aq^-1 (-4743) -> H^0 (-13611) -At time : 29.001 ns Reaction : °OH^0 (-6970) + °OH^0 (-9049) -> H2O2^0 (-13612) -At time : 30.001 ns Reaction : e_aq^-1 (-4006) + H^0 (-13498) -> OH^-1 (-13613) + H_2^0 (-13614) -At time : 30.001 ns Reaction : H3O^1 (-8049) + OH^-1 (-13470) -> No product -At time : 30.001 ns Reaction : e_aq^-1 (-778) + °OH^0 (-13367) -> OH^-1 (-13615) -At time : 30.001 ns Reaction : e_aq^-1 (-1392) + H^0 (-13191) -> OH^-1 (-13616) + H_2^0 (-13617) -At time : 30.001 ns Reaction : e_aq^-1 (-4706) + H^0 (-12561) -> OH^-1 (-13618) + H_2^0 (-13619) -At time : 30.001 ns Reaction : e_aq^-1 (-5310) + H2O2^0 (-11783) -> OH^-1 (-13620) + °OH^0 (-13621) -At time : 30.001 ns Reaction : e_aq^-1 (-4802) + H2O2^0 (-11715) -> OH^-1 (-13622) + °OH^0 (-13623) -At time : 30.001 ns Reaction : H^0 (-11224) + °OH^0 (-5836) -> No product -At time : 30.001 ns Reaction : H^0 (-9999) + °OH^0 (-6978) -> No product -At time : 30.001 ns Reaction : e_aq^-1 (-2518) + H3O^1 (-9656) -> H^0 (-13624) -At time : 30.001 ns Reaction : °OH^0 (-9193) + °OH^0 (-7742) -> H2O2^0 (-13625) -At time : 30.001 ns Reaction : °OH^0 (-6752) + °OH^0 (-8798) -> H2O2^0 (-13626) -At time : 30.001 ns Reaction : °OH^0 (-7128) + °OH^0 (-8495) -> H2O2^0 (-13627) -At time : 30.001 ns Reaction : e_aq^-1 (-4460) + H3O^1 (-6989) -> H^0 (-13628) -At time : 31.001 ns Reaction : e_aq^-1 (-304) + °OH^0 (-13621) -> OH^-1 (-13629) -At time : 31.001 ns Reaction : OH^-1 (-13618) + H3O^1 (-8067) -> No product -At time : 31.001 ns Reaction : OH^-1 (-13422) + H3O^1 (-6703) -> No product -At time : 31.001 ns Reaction : e_aq^-1 (-3438) + H^0 (-12182) -> OH^-1 (-13630) + H_2^0 (-13631) -At time : 31.001 ns Reaction : °OH^0 (-9747) + °OH^0 (-5946) -> H2O2^0 (-13632) -At time : 31.001 ns Reaction : °OH^0 (-9638) + e_aq^-1 (-3744) -> OH^-1 (-13633) -At time : 31.001 ns Reaction : H^0 (-9493) + e_aq^-1 (-8716) -> OH^-1 (-13634) + H_2^0 (-13635) -At time : 31.001 ns Reaction : H^0 (-9457) + e_aq^-1 (-3481) -> OH^-1 (-13636) + H_2^0 (-13637) -At time : 31.001 ns Reaction : e_aq^-1 (-5209) + °OH^0 (-8459) -> OH^-1 (-13638) -At time : 31.001 ns Reaction : H3O^1 (-5821) + e_aq^-1 (-8425) -> H^0 (-13639) -At time : 31.001 ns Reaction : e_aq^-1 (-3646) + H3O^1 (-6443) -> H^0 (-13640) -At time : 32.001 ns Reaction : OH^-1 (-13575) + H3O^1 (-8364) -> No product -At time : 32.001 ns Reaction : OH^-1 (-13513) + H3O^1 (-6571) -> No product -At time : 32.001 ns Reaction : H3O^1 (-10565) + OH^-1 (-13251) -> No product -At time : 32.001 ns Reaction : e_aq^-1 (-1031) + H^0 (-13180) -> OH^-1 (-13641) + H_2^0 (-13642) -At time : 32.001 ns Reaction : OH^-1 (-13126) + H3O^1 (-7931) -> No product -At time : 32.001 ns Reaction : °OH^0 (-9462) + H^0 (-11765) -> No product -At time : 32.001 ns Reaction : °OH^0 (-10334) + °OH^0 (-8930) -> H2O2^0 (-13643) -At time : 32.001 ns Reaction : H^0 (-9375) + e_aq^-1 (-5599) -> OH^-1 (-13644) + H_2^0 (-13645) -At time : 32.001 ns Reaction : °OH^0 (-6430) + °OH^0 (-8531) -> H2O2^0 (-13646) -At time : 32.001 ns Reaction : e_aq^-1 (-832) + H3O^1 (-8083) -> H^0 (-13647) -At time : 33.001 ns Reaction : e_aq^-1 (-2739) + °OH^0 (-13534) -> OH^-1 (-13648) -At time : 33.001 ns Reaction : °OH^0 (-6410) + °OH^0 (-13390) -> H2O2^0 (-13649) -At time : 33.001 ns Reaction : OH^-1 (-12832) + H3O^1 (-6265) -> No product -At time : 33.001 ns Reaction : H^0 (-12448) + e_aq^-1 (-4575) -> OH^-1 (-13650) + H_2^0 (-13651) -At time : 33.001 ns Reaction : H2O2^0 (-11621) + e_aq^-1 (-4801) -> OH^-1 (-13652) + °OH^0 (-13653) -At time : 33.001 ns Reaction : °OH^0 (-7996) + °OH^0 (-8959) -> H2O2^0 (-13654) -At time : 33.001 ns Reaction : e_aq^-1 (-5098) + H3O^1 (-8159) -> H^0 (-13655) -At time : 33.001 ns Reaction : e_aq^-1 (-1333) + H3O^1 (-7935) -> H^0 (-13656) -At time : 33.001 ns Reaction : e_aq^-1 (-2984) + °OH^0 (-6372) -> OH^-1 (-13657) -At time : 33.001 ns Reaction : e_aq^-1 (-3700) + H3O^1 (-5903) -> H^0 (-13658) -At time : 34.001 ns Reaction : H3O^1 (-6473) + OH^-1 (-13648) -> No product -At time : 34.001 ns Reaction : e_aq^-1 (-2460) + H2O2^0 (-13598) -> OH^-1 (-13659) + °OH^0 (-13660) -At time : 34.001 ns Reaction : e_aq^-1 (-147) + °OH^0 (-13595) -> OH^-1 (-13661) -At time : 34.001 ns Reaction : H2O2^0 (-13586) + e_aq^-1 (-4220) -> OH^-1 (-13662) + °OH^0 (-13663) -At time : 34.001 ns Reaction : °OH^0 (-13508) + °OH^0 (-12417) -> H2O2^0 (-13664) -At time : 34.001 ns Reaction : H3O^1 (-6991) + OH^-1 (-13466) -> No product -At time : 34.001 ns Reaction : H3O^1 (-9671) + OH^-1 (-13414) -> No product -At time : 34.001 ns Reaction : OH^-1 (-13343) + H3O^1 (-6917) -> No product -At time : 34.001 ns Reaction : H3O^1 (-9760) + OH^-1 (-13245) -> No product -At time : 34.001 ns Reaction : H^0 (-13156) + e_aq^-1 (-2044) -> OH^-1 (-13665) + H_2^0 (-13666) -At time : 34.001 ns Reaction : °OH^0 (-13134) + e_aq^-1 (-5553) -> OH^-1 (-13667) -At time : 34.001 ns Reaction : e_aq^-1 (-2260) + H^0 (-13125) -> OH^-1 (-13668) + H_2^0 (-13669) -At time : 34.001 ns Reaction : e_aq^-1 (-3783) + H^0 (-13016) -> OH^-1 (-13670) + H_2^0 (-13671) -At time : 34.001 ns Reaction : e_aq^-1 (-5543) + H2O2^0 (-12551) -> OH^-1 (-13672) + °OH^0 (-13673) -At time : 34.001 ns Reaction : e_aq^-1 (-4586) + H2O2^0 (-12545) -> OH^-1 (-13674) + °OH^0 (-13675) -At time : 34.001 ns Reaction : e_aq^-1 (-578) + H2O2^0 (-11743) -> OH^-1 (-13676) + °OH^0 (-13677) -At time : 34.001 ns Reaction : e_aq^-1 (-4296) + H2O2^0 (-11429) -> OH^-1 (-13678) + °OH^0 (-13679) -At time : 34.001 ns Reaction : e_aq^-1 (-5072) + H3O^1 (-6053) -> H^0 (-13680) -At time : 34.001 ns Reaction : e_aq^-1 (-2937) + °OH^0 (-5826) -> OH^-1 (-13681) -At time : 35.001 ns Reaction : H^0 (-13640) + e_aq^-1 (-3658) -> OH^-1 (-13682) + H_2^0 (-13683) -At time : 35.001 ns Reaction : H3O^1 (-7047) + OH^-1 (-13501) -> No product -At time : 35.001 ns Reaction : OH^-1 (-13400) + H3O^1 (-9795) -> No product -At time : 35.001 ns Reaction : OH^-1 (-13387) + H3O^1 (-8153) -> No product -At time : 35.001 ns Reaction : OH^-1 (-13168) + H3O^1 (-8691) -> No product -At time : 35.001 ns Reaction : e_aq^-1 (-4237) + H2O2^0 (-13002) -> OH^-1 (-13684) + °OH^0 (-13685) -At time : 35.001 ns Reaction : OH^-1 (-12901) + H3O^1 (-7063) -> No product -At time : 35.001 ns Reaction : e_aq^-1 (-5082) + H2O2^0 (-12381) -> OH^-1 (-13686) + °OH^0 (-13687) -At time : 35.001 ns Reaction : e_aq^-1 (-303) + H3O^1 (-8259) -> H^0 (-13688) -At time : 35.001 ns Reaction : e_aq^-1 (-3537) + H3O^1 (-6237) -> H^0 (-13689) -At time : 36.001 ns Reaction : OH^-1 (-13676) + H3O^1 (-7253) -> No product -At time : 36.001 ns Reaction : OH^-1 (-13662) + H3O^1 (-10905) -> No product -At time : 36.001 ns Reaction : OH^-1 (-13609) + H3O^1 (-7505) -> No product -At time : 36.001 ns Reaction : e_aq^-1 (-5297) + H2O2^0 (-13566) -> OH^-1 (-13690) + °OH^0 (-13691) -At time : 36.001 ns Reaction : H3O^1 (-9691) + OH^-1 (-13489) -> No product -At time : 36.001 ns Reaction : H^0 (-13434) + e_aq^-1 (-4819) -> OH^-1 (-13692) + H_2^0 (-13693) -At time : 36.001 ns Reaction : H3O^1 (-9366) + OH^-1 (-13297) -> No product -At time : 36.001 ns Reaction : e_aq^-1 (-2027) + °OH^0 (-12851) -> OH^-1 (-13694) -At time : 36.001 ns Reaction : e_aq^-1 (-3670) + H2O2^0 (-12505) -> OH^-1 (-13695) + °OH^0 (-13696) -At time : 36.001 ns Reaction : e_aq^-1 (-4704) + H^0 (-12431) -> OH^-1 (-13697) + H_2^0 (-13698) -At time : 36.001 ns Reaction : °OH^0 (-11359) + °OH^0 (-8852) -> H2O2^0 (-13699) -At time : 36.001 ns Reaction : e_aq^-1 (-791) + °OH^0 (-10199) -> OH^-1 (-13700) -At time : 36.001 ns Reaction : H^0 (-9530) + °OH^0 (-5896) -> No product -At time : 37.001 ns Reaction : H3O^1 (-6805) + OH^-1 (-13665) -> No product -At time : 37.001 ns Reaction : H3O^1 (-8223) + OH^-1 (-13597) -> No product -At time : 37.001 ns Reaction : OH^-1 (-13569) + H3O^1 (-6831) -> No product -At time : 37.001 ns Reaction : OH^-1 (-13563) + H3O^1 (-6081) -> No product -At time : 37.001 ns Reaction : e_aq^-1 (-964) + °OH^0 (-13552) -> OH^-1 (-13701) -At time : 37.001 ns Reaction : H3O^1 (-6283) + OH^-1 (-13531) -> No product -At time : 37.001 ns Reaction : OH^-1 (-13503) + H3O^1 (-7435) -> No product -At time : 37.001 ns Reaction : H^0 (-12894) + e_aq^-1 (-8878) -> OH^-1 (-13702) + H_2^0 (-13703) -At time : 37.001 ns Reaction : e_aq^-1 (-5261) + °OH^0 (-12857) -> OH^-1 (-13704) -At time : 37.001 ns Reaction : e_aq^-1 (-4705) + H^0 (-12240) -> OH^-1 (-13705) + H_2^0 (-13706) -At time : 37.001 ns Reaction : °OH^0 (-9677) + e_aq^-1 (-2675) -> OH^-1 (-13707) -At time : 38.001 ns Reaction : OH^-1 (-13702) + H3O^1 (-8099) -> No product -At time : 38.001 ns Reaction : H3O^1 (-7513) + OH^-1 (-13692) -> No product -At time : 38.001 ns Reaction : e_aq^-1 (-1365) + H2O2^0 (-13612) -> OH^-1 (-13708) + °OH^0 (-13709) -At time : 38.001 ns Reaction : °OH^0 (-13473) + °OH^0 (-7604) -> H2O2^0 (-13710) -At time : 38.001 ns Reaction : e_aq^-1 (-5418) + H2O2^0 (-12942) -> OH^-1 (-13711) + °OH^0 (-13712) -At time : 38.001 ns Reaction : e_aq^-1 (-4356) + H2O2^0 (-12881) -> OH^-1 (-13713) + °OH^0 (-13714) -At time : 38.001 ns Reaction : H3O^1 (-5875) + OH^-1 (-12600) -> No product -At time : 38.001 ns Reaction : H^0 (-11216) + e_aq^-1 (-2223) -> OH^-1 (-13715) + H_2^0 (-13716) -At time : 38.001 ns Reaction : H3O^1 (-11016) + e_aq^-1 (-1009) -> H^0 (-13717) -At time : 38.001 ns Reaction : °OH^0 (-10397) + °OH^0 (-7252) -> H2O2^0 (-13718) -At time : 38.001 ns Reaction : H3O^1 (-10319) + e_aq^-1 (-5709) -> H^0 (-13719) -At time : 38.001 ns Reaction : e_aq^-1 (-3790) + °OH^0 (-9632) -> OH^-1 (-13720) -At time : 38.001 ns Reaction : e_aq^-1 (-3794) + °OH^0 (-9003) -> OH^-1 (-13721) -At time : 38.001 ns Reaction : e_aq^-1 (-3613) + °OH^0 (-6286) -> OH^-1 (-13722) -At time : 39.001 ns Reaction : OH^-1 (-13684) + H3O^1 (-7613) -> No product -At time : 39.001 ns Reaction : OH^-1 (-13678) + H3O^1 (-8568) -> No product -At time : 39.001 ns Reaction : OH^-1 (-13558) + H3O^1 (-5867) -> No product -At time : 39.001 ns Reaction : OH^-1 (-13397) + H3O^1 (-6677) -> No product -At time : 39.001 ns Reaction : OH^-1 (-13372) + H3O^1 (-6835) -> No product -At time : 39.001 ns Reaction : °OH^0 (-6496) + H^0 (-13056) -> No product -At time : 39.001 ns Reaction : H^0 (-12915) + H^0 (-9010) -> H_2^0 (-13723) -At time : 39.001 ns Reaction : °OH^0 (-12831) + °OH^0 (-8294) -> H2O2^0 (-13724) -At time : 39.001 ns Reaction : H^0 (-12437) + e_aq^-1 (-4904) -> OH^-1 (-13725) + H_2^0 (-13726) -At time : 39.001 ns Reaction : H3O^1 (-10555) + OH^-1 (-12421) -> No product -At time : 39.001 ns Reaction : e_aq^-1 (-1533) + H2O2^0 (-12362) -> OH^-1 (-13727) + °OH^0 (-13728) -At time : 39.001 ns Reaction : e_aq^-1 (-4329) + H2O2^0 (-11667) -> OH^-1 (-13729) + °OH^0 (-13730) -At time : 39.001 ns Reaction : H^0 (-10976) + °OH^0 (-10090) -> No product -At time : 39.001 ns Reaction : e_aq^-1 (-3612) + H3O^1 (-9544) -> H^0 (-13731) -At time : 39.001 ns Reaction : °OH^0 (-9168) + e_aq^-1 (-3599) -> OH^-1 (-13732) -At time : 39.001 ns Reaction : e_aq^-1 (-5206) + H3O^1 (-8907) -> H^0 (-13733) -At time : 39.001 ns Reaction : e_aq^-1 (-4935) + H3O^1 (-8586) -> H^0 (-13734) -At time : 39.001 ns Reaction : °OH^0 (-7410) + °OH^0 (-8240) -> H2O2^0 (-13735) -At time : 40.001 ns Reaction : H3O^1 (-11139) + OH^-1 (-13541) -> No product -At time : 40.001 ns Reaction : H^0 (-13239) + e_aq^-1 (-4650) -> OH^-1 (-13736) + H_2^0 (-13737) -At time : 40.001 ns Reaction : H3O^1 (-7903) + OH^-1 (-13235) -> No product -At time : 40.001 ns Reaction : e_aq^-1 (-2096) + H^0 (-12852) -> OH^-1 (-13738) + H_2^0 (-13739) -At time : 40.001 ns Reaction : e_aq^-1 (-5234) + H2O2^0 (-11659) -> OH^-1 (-13740) + °OH^0 (-13741) -At time : 40.001 ns Reaction : e_aq^-1 (-2038) + H2O2^0 (-11431) -> OH^-1 (-13742) + °OH^0 (-13743) -At time : 40.001 ns Reaction : H3O^1 (-10074) + e_aq^-1 (-4558) -> H^0 (-13744) -At time : 40.001 ns Reaction : H^0 (-9432) + °OH^0 (-6980) -> No product -At time : 41.001 ns Reaction : H3O^1 (-10502) + OH^-1 (-13727) -> No product -At time : 41.001 ns Reaction : H2O2^0 (-13571) + e_aq^-1 (-3013) -> OH^-1 (-13745) + °OH^0 (-13746) -At time : 41.001 ns Reaction : OH^-1 (-13561) + H3O^1 (-5975) -> No product -At time : 41.001 ns Reaction : OH^-1 (-13509) + H3O^1 (-7019) -> No product -At time : 41.001 ns Reaction : e_aq^-1 (-980) + °OH^0 (-13493) -> OH^-1 (-13747) -At time : 41.001 ns Reaction : H^0 (-10111) + H^0 (-13453) -> H_2^0 (-13748) -At time : 41.001 ns Reaction : H3O^1 (-10142) + OH^-1 (-13444) -> No product -At time : 41.001 ns Reaction : H^0 (-13395) + e_aq^-1 (-4830) -> OH^-1 (-13749) + H_2^0 (-13750) -At time : 41.001 ns Reaction : °OH^0 (-13333) + e_aq^-1 (-2782) -> OH^-1 (-13751) -At time : 41.001 ns Reaction : °OH^0 (-12325) + °OH^0 (-7690) -> H2O2^0 (-13752) -At time : 41.001 ns Reaction : °OH^0 (-10845) + °OH^0 (-7920) -> H2O2^0 (-13753) -At time : 41.001 ns Reaction : °OH^0 (-10471) + °OH^0 (-8667) -> H2O2^0 (-13754) -At time : 41.001 ns Reaction : H3O^1 (-9639) + e_aq^-1 (-3833) -> H^0 (-13755) -At time : 41.001 ns Reaction : e_aq^-1 (-4347) + °OH^0 (-7936) -> OH^-1 (-13756) -At time : 42.001 ns Reaction : H3O^1 (-10232) + OH^-1 (-13740) -> No product -At time : 42.001 ns Reaction : OH^-1 (-13652) + H3O^1 (-8057) -> No product -At time : 42.001 ns Reaction : H3O^1 (-7207) + OH^-1 (-13547) -> No product -At time : 42.001 ns Reaction : e_aq^-1 (-5493) + H2O2^0 (-13537) -> OH^-1 (-13757) + °OH^0 (-13758) -At time : 42.001 ns Reaction : H^0 (-13351) + e_aq^-1 (-2635) -> OH^-1 (-13759) + H_2^0 (-13760) -At time : 42.001 ns Reaction : H^0 (-12330) + e_aq^-1 (-5527) -> OH^-1 (-13761) + H_2^0 (-13762) -At time : 42.001 ns Reaction : H^0 (-10453) + °OH^0 (-11002) -> No product -At time : 42.001 ns Reaction : H^0 (-10610) + °OH^0 (-9448) -> No product -At time : 42.001 ns Reaction : °OH^0 (-9600) + e_aq^-1 (-8542) -> OH^-1 (-13763) -At time : 42.001 ns Reaction : e_aq^-1 (-5389) + °OH^0 (-9081) -> OH^-1 (-13764) -At time : 42.001 ns Reaction : e_aq^-1 (-4942) + H3O^1 (-8397) -> H^0 (-13765) -At time : 42.001 ns Reaction : e_aq^-1 (-3763) + H3O^1 (-7783) -> H^0 (-13766) -At time : 42.001 ns Reaction : e_aq^-1 (-5092) + °OH^0 (-7200) -> OH^-1 (-13767) -At time : 43.001 ns Reaction : OH^-1 (-13757) + H3O^1 (-8475) -> No product -At time : 43.001 ns Reaction : H3O^1 (-6849) + OH^-1 (-13277) -> No product -At time : 43.001 ns Reaction : e_aq^-1 (-2424) + H2O2^0 (-12854) -> OH^-1 (-13768) + °OH^0 (-13769) -At time : 43.001 ns Reaction : H3O^1 (-10692) + OH^-1 (-12703) -> No product -At time : 43.001 ns Reaction : e_aq^-1 (-1311) + H2O2^0 (-11474) -> OH^-1 (-13770) + °OH^0 (-13771) -At time : 43.001 ns Reaction : °OH^0 (-11064) + H^0 (-10185) -> No product -At time : 43.001 ns Reaction : e_aq^-1 (-3044) + °OH^0 (-6358) -> OH^-1 (-13772) -At time : 43.001 ns Reaction : e_aq^-1 (-3584) + e_aq^-1 (-3583) -> OH^-1 (-13773) + OH^-1 (-13774) + H_2^0 (-13775) -At time : 44.001 ns Reaction : H2O2^0 (-13754) + e_aq^-1 (-4754) -> OH^-1 (-13776) + °OH^0 (-13777) -At time : 44.001 ns Reaction : H2O2^0 (-13353) + e_aq^-1 (-4214) -> OH^-1 (-13778) + °OH^0 (-13779) -At time : 44.001 ns Reaction : OH^-1 (-13331) + H3O^1 (-7455) -> No product -At time : 44.001 ns Reaction : OH^-1 (-13243) + H3O^1 (-7007) -> No product -At time : 44.001 ns Reaction : H^0 (-12634) + e_aq^-1 (-8719) -> OH^-1 (-13780) + H_2^0 (-13781) -At time : 44.001 ns Reaction : °OH^0 (-9959) + H^0 (-12378) -> No product -At time : 44.001 ns Reaction : H3O^1 (-10557) + e_aq^-1 (-4206) -> H^0 (-13782) -At time : 44.001 ns Reaction : H^0 (-9203) + °OH^0 (-5916) -> No product -At time : 44.001 ns Reaction : e_aq^-1 (-5102) + H3O^1 (-7479) -> H^0 (-13783) -At time : 45.001 ns Reaction : H3O^1 (-10478) + OH^-1 (-13776) -> No product -At time : 45.001 ns Reaction : °OH^0 (-13730) + e_aq^-1 (-1776) -> OH^-1 (-13784) -At time : 45.001 ns Reaction : OH^-1 (-13713) + H3O^1 (-6981) -> No product -At time : 45.001 ns Reaction : OH^-1 (-13711) + H3O^1 (-6131) -> No product -At time : 45.001 ns Reaction : H3O^1 (-10102) + OH^-1 (-13705) -> No product -At time : 45.001 ns Reaction : °OH^0 (-13687) + e_aq^-1 (-4930) -> OH^-1 (-13785) -At time : 45.001 ns Reaction : OH^-1 (-13638) + H3O^1 (-8173) -> No product -At time : 45.001 ns Reaction : e_aq^-1 (-2698) + H^0 (-13028) -> OH^-1 (-13786) + H_2^0 (-13787) -At time : 45.001 ns Reaction : e_aq^-1 (-3598) + H2O2^0 (-11787) -> OH^-1 (-13788) + °OH^0 (-13789) -At time : 45.001 ns Reaction : e_aq^-1 (-683) + H2O2^0 (-11692) -> OH^-1 (-13790) + °OH^0 (-13791) -At time : 45.001 ns Reaction : e_aq^-1 (-1996) + H3O^1 (-10810) -> H^0 (-13792) -At time : 45.001 ns Reaction : e_aq^-1 (-3672) + H3O^1 (-6497) -> H^0 (-13793) -At time : 46.001 ns Reaction : e_aq^-1 (-3694) + °OH^0 (-13746) -> OH^-1 (-13794) -At time : 46.001 ns Reaction : H^0 (-13436) + e_aq^-1 (-1079) -> OH^-1 (-13795) + H_2^0 (-13796) -At time : 46.001 ns Reaction : OH^-1 (-13389) + H3O^1 (-7765) -> No product -At time : 46.001 ns Reaction : e_aq^-1 (-2117) + H2O2^0 (-13299) -> OH^-1 (-13797) + °OH^0 (-13798) -At time : 46.001 ns Reaction : OH^-1 (-13149) + H3O^1 (-7861) -> No product -At time : 46.001 ns Reaction : °OH^0 (-12745) + °OH^0 (-6044) -> H2O2^0 (-13799) -At time : 46.001 ns Reaction : e_aq^-1 (-2719) + H2O2^0 (-12694) -> OH^-1 (-13800) + °OH^0 (-13801) -At time : 46.001 ns Reaction : H^0 (-12473) + e_aq^-1 (-3593) -> OH^-1 (-13802) + H_2^0 (-13803) -At time : 46.001 ns Reaction : H3O^1 (-10707) + e_aq^-1 (-3690) -> H^0 (-13804) -At time : 46.001 ns Reaction : °OH^0 (-9640) + °OH^0 (-5912) -> H2O2^0 (-13805) -At time : 46.001 ns Reaction : e_aq^-1 (-712) + H3O^1 (-8862) -> H^0 (-13806) -At time : 46.001 ns Reaction : e_aq^-1 (-447) + H3O^1 (-8215) -> H^0 (-13807) -At time : 46.001 ns Reaction : e_aq^-1 (-3562) + H3O^1 (-7713) -> H^0 (-13808) -At time : 47.001 ns Reaction : OH^-1 (-13795) + H3O^1 (-6183) -> No product -At time : 47.001 ns Reaction : OH^-1 (-13722) + H3O^1 (-7703) -> No product -At time : 47.001 ns Reaction : H3O^1 (-5971) + OH^-1 (-13590) -> No product -At time : 47.001 ns Reaction : OH^-1 (-13578) + H3O^1 (-6535) -> No product -At time : 47.001 ns Reaction : H^0 (-13012) + H^0 (-9377) -> H_2^0 (-13809) -At time : 47.001 ns Reaction : H^0 (-12996) + e_aq^-1 (-5476) -> OH^-1 (-13810) + H_2^0 (-13811) -At time : 47.001 ns Reaction : °OH^0 (-12827) + e_aq^-1 (-2977) -> OH^-1 (-13812) -At time : 47.001 ns Reaction : e_aq^-1 (-2522) + H2O2^0 (-11681) -> OH^-1 (-13813) + °OH^0 (-13814) -At time : 47.001 ns Reaction : e_aq^-1 (-4322) + H2O2^0 (-11620) -> OH^-1 (-13815) + °OH^0 (-13816) -At time : 47.001 ns Reaction : e_aq^-1 (-5689) + °OH^0 (-11279) -> OH^-1 (-13817) -At time : 47.001 ns Reaction : H3O^1 (-10631) + e_aq^-1 (-3507) -> H^0 (-13818) -At time : 47.001 ns Reaction : e_aq^-1 (-2842) + H3O^1 (-8769) -> H^0 (-13819) -At time : 47.001 ns Reaction : e_aq^-1 (-3825) + e_aq^-1 (-2556) -> OH^-1 (-13820) + OH^-1 (-13821) + H_2^0 (-13822) -At time : 48.001 ns Reaction : H^0 (-13783) + e_aq^-1 (-5126) -> OH^-1 (-13823) + H_2^0 (-13824) -At time : 48.001 ns Reaction : OH^-1 (-13778) + H3O^1 (-8361) -> No product -At time : 48.001 ns Reaction : OH^-1 (-13767) + H3O^1 (-7183) -> No product -At time : 48.001 ns Reaction : OH^-1 (-13672) + H3O^1 (-9378) -> No product -At time : 48.001 ns Reaction : H3O^1 (-8775) + OH^-1 (-13533) -> No product -At time : 48.001 ns Reaction : OH^-1 (-13113) + H3O^1 (-6117) -> No product -At time : 48.001 ns Reaction : H^0 (-12260) + H^0 (-12660) -> H_2^0 (-13825) -At time : 48.001 ns Reaction : H2O2^0 (-12626) + e_aq^-1 (-994) -> OH^-1 (-13826) + °OH^0 (-13827) -At time : 48.001 ns Reaction : °OH^0 (-12609) + °OH^0 (-8999) -> H2O2^0 (-13828) -At time : 48.001 ns Reaction : e_aq^-1 (-5020) + H2O2^0 (-11918) -> OH^-1 (-13829) + °OH^0 (-13830) -At time : 48.001 ns Reaction : °OH^0 (-10805) + e_aq^-1 (-1901) -> OH^-1 (-13831) -At time : 48.001 ns Reaction : °OH^0 (-10699) + e_aq^-1 (-2702) -> OH^-1 (-13832) -At time : 48.001 ns Reaction : e_aq^-1 (-3826) + °OH^0 (-6512) -> OH^-1 (-13833) -At time : 49.001 ns Reaction : OH^-1 (-13747) + H3O^1 (-8061) -> No product -At time : 49.001 ns Reaction : H3O^1 (-7233) + OH^-1 (-13700) -> No product -At time : 49.001 ns Reaction : OH^-1 (-13370) + H3O^1 (-8031) -> No product -At time : 49.001 ns Reaction : OH^-1 (-13189) + H3O^1 (-8045) -> No product -At time : 49.001 ns Reaction : H3O^1 (-5979) + OH^-1 (-12773) -> No product -At time : 49.001 ns Reaction : H^0 (-12747) + °OH^0 (-6680) -> No product -At time : 49.001 ns Reaction : e_aq^-1 (-1258) + H^0 (-12491) -> OH^-1 (-13834) + H_2^0 (-13835) -At time : 49.001 ns Reaction : H2O2^0 (-11557) + e_aq^-1 (-4954) -> OH^-1 (-13836) + °OH^0 (-13837) -At time : 49.001 ns Reaction : e_aq^-1 (-2968) + °OH^0 (-8738) -> OH^-1 (-13838) -At time : 50.001 ns Reaction : e_aq^-1 (-3028) + H^0 (-13731) -> OH^-1 (-13839) + H_2^0 (-13840) -At time : 50.001 ns Reaction : OH^-1 (-13670) + H3O^1 (-5921) -> No product -At time : 50.001 ns Reaction : H^0 (-13088) + e_aq^-1 (-5503) -> OH^-1 (-13841) + H_2^0 (-13842) -At time : 50.001 ns Reaction : H^0 (-12710) + °OH^0 (-7190) -> No product -At time : 50.001 ns Reaction : H2O2^0 (-12469) + e_aq^-1 (-4211) -> OH^-1 (-13843) + °OH^0 (-13844) -At time : 50.001 ns Reaction : °OH^0 (-11033) + H^0 (-12432) -> No product -At time : 50.001 ns Reaction : e_aq^-1 (-5079) + H2O2^0 (-11578) -> OH^-1 (-13845) + °OH^0 (-13846) -At time : 50.001 ns Reaction : °OH^0 (-9479) + °OH^0 (-5886) -> H2O2^0 (-13847) -At time : 50.001 ns Reaction : °OH^0 (-8669) + °OH^0 (-8951) -> H2O2^0 (-13848) -At time : 50.001 ns Reaction : °OH^0 (-7046) + °OH^0 (-8591) -> H2O2^0 (-13849) -At time : 50.001 ns Reaction : °OH^0 (-5718) + °OH^0 (-7406) -> H2O2^0 (-13850) -At time : 51.001 ns Reaction : OH^-1 (-13800) + H3O^1 (-8544) -> No product -At time : 51.001 ns Reaction : OH^-1 (-13686) + H3O^1 (-7493) -> No product -At time : 51.001 ns Reaction : H^0 (-12394) + e_aq^-1 (-4940) -> OH^-1 (-13851) + H_2^0 (-13852) -At time : 51.001 ns Reaction : e_aq^-1 (-4661) + H2O2^0 (-12306) -> OH^-1 (-13853) + °OH^0 (-13854) -At time : 51.001 ns Reaction : H2O2^0 (-11885) + e_aq^-1 (-3808) -> OH^-1 (-13855) + °OH^0 (-13856) -At time : 51.001 ns Reaction : H^0 (-9296) + °OH^0 (-7120) -> No product -At time : 52.001 ns Reaction : OH^-1 (-13690) + H3O^1 (-7421) -> No product -At time : 52.001 ns Reaction : H3O^1 (-9537) + OH^-1 (-13549) -> No product -At time : 52.001 ns Reaction : OH^-1 (-13476) + H3O^1 (-7741) -> No product -At time : 52.001 ns Reaction : OH^-1 (-13472) + H3O^1 (-7599) -> No product -At time : 52.001 ns Reaction : OH^-1 (-13253) + H3O^1 (-7017) -> No product -At time : 52.001 ns Reaction : H^0 (-13218) + e_aq^-1 (-2432) -> OH^-1 (-13857) + H_2^0 (-13858) -At time : 52.001 ns Reaction : H2O2^0 (-12527) + e_aq^-1 (-4094) -> OH^-1 (-13859) + °OH^0 (-13860) -At time : 52.001 ns Reaction : e_aq^-1 (-929) + °OH^0 (-9067) -> OH^-1 (-13861) -At time : 52.001 ns Reaction : e_aq^-1 (-5698) + °OH^0 (-8927) -> OH^-1 (-13862) -At time : 53.001 ns Reaction : °OH^0 (-12980) + H^0 (-13717) -> No product -At time : 53.001 ns Reaction : e_aq^-1 (-2363) + H^0 (-13517) -> OH^-1 (-13863) + H_2^0 (-13864) -At time : 53.001 ns Reaction : °OH^0 (-10788) + °OH^0 (-5872) -> H2O2^0 (-13865) -At time : 53.001 ns Reaction : °OH^0 (-10669) + e_aq^-1 (-3592) -> OH^-1 (-13866) -At time : 53.001 ns Reaction : °OH^0 (-9593) + e_aq^-1 (-3671) -> OH^-1 (-13867) -At time : 53.001 ns Reaction : °OH^0 (-6362) + °OH^0 (-6364) -> H2O2^0 (-13868) -At time : 54.001 ns Reaction : H3O^1 (-7977) + OH^-1 (-13853) -> No product -At time : 54.001 ns Reaction : e_aq^-1 (-584) + °OH^0 (-13044) -> OH^-1 (-13869) -At time : 54.001 ns Reaction : H^0 (-12839) + e_aq^-1 (-2820) -> OH^-1 (-13870) + H_2^0 (-13871) -At time : 54.001 ns Reaction : e_aq^-1 (-2003) + H^0 (-12835) -> OH^-1 (-13872) + H_2^0 (-13873) -At time : 54.001 ns Reaction : H3O^1 (-9687) + OH^-1 (-12727) -> No product -At time : 54.001 ns Reaction : OH^-1 (-12702) + H3O^1 (-6437) -> No product -At time : 54.001 ns Reaction : H3O^1 (-9817) + e_aq^-1 (-4124) -> H^0 (-13874) -At time : 54.001 ns Reaction : e_aq^-1 (-3543) + H3O^1 (-7721) -> H^0 (-13875) -At time : 54.001 ns Reaction : e_aq^-1 (-733) + °OH^0 (-7454) -> OH^-1 (-13876) -At time : 55.001 ns Reaction : OH^-1 (-13851) + H3O^1 (-7995) -> No product -At time : 55.001 ns Reaction : OH^-1 (-13742) + H3O^1 (-7615) -> No product -At time : 55.001 ns Reaction : H^0 (-13647) + °OH^0 (-7138) -> No product -At time : 55.001 ns Reaction : H^0 (-13538) + e_aq^-1 (-4999) -> OH^-1 (-13877) + H_2^0 (-13878) -At time : 55.001 ns Reaction : OH^-1 (-13177) + H3O^1 (-7403) -> No product -At time : 55.001 ns Reaction : e_aq^-1 (-4991) + °OH^0 (-13033) -> OH^-1 (-13879) -At time : 55.001 ns Reaction : OH^-1 (-12510) + H3O^1 (-6589) -> No product -At time : 55.001 ns Reaction : H^0 (-10723) + °OH^0 (-6560) -> No product -At time : 55.001 ns Reaction : e_aq^-1 (-5321) + H3O^1 (-8610) -> H^0 (-13880) -At time : 55.001 ns Reaction : e_aq^-1 (-5068) + H3O^1 (-8163) -> H^0 (-13881) -At time : 55.001 ns Reaction : e_aq^-1 (-533) + e_aq^-1 (-5210) -> OH^-1 (-13882) + OH^-1 (-13883) + H_2^0 (-13884) -At time : 56.001 ns Reaction : H3O^1 (-9704) + OH^-1 (-13821) -> No product -At time : 56.001 ns Reaction : OH^-1 (-13797) + H3O^1 (-10797) -> No product -At time : 56.001 ns Reaction : H^0 (-13680) + e_aq^-1 (-4968) -> OH^-1 (-13885) + H_2^0 (-13886) -At time : 56.001 ns Reaction : OH^-1 (-13659) + H3O^1 (-6565) -> No product -At time : 56.001 ns Reaction : e_aq^-1 (-5269) + °OH^0 (-13204) -> OH^-1 (-13887) -At time : 56.001 ns Reaction : H2O2^0 (-11402) + e_aq^-1 (-1972) -> OH^-1 (-13888) + °OH^0 (-13889) -At time : 56.001 ns Reaction : °OH^0 (-10442) + °OH^0 (-8867) -> H2O2^0 (-13890) -At time : 56.001 ns Reaction : °OH^0 (-6960) + e_aq^-1 (-8833) -> OH^-1 (-13891) -At time : 56.001 ns Reaction : e_aq^-1 (-4528) + °OH^0 (-8681) -> OH^-1 (-13892) -At time : 56.001 ns Reaction : e_aq^-1 (-3677) + e_aq^-1 (-2893) -> OH^-1 (-13893) + OH^-1 (-13894) + H_2^0 (-13895) -At time : 57.001 ns Reaction : e_aq^-1 (-4379) + H^0 (-13435) -> OH^-1 (-13896) + H_2^0 (-13897) -At time : 57.001 ns Reaction : e_aq^-1 (-4100) + H2O2^0 (-11888) -> OH^-1 (-13898) + °OH^0 (-13899) -At time : 57.001 ns Reaction : H^0 (-9713) + e_aq^-1 (-3893) -> OH^-1 (-13900) + H_2^0 (-13901) -At time : 57.001 ns Reaction : e_aq^-1 (-3703) + H3O^1 (-6439) -> H^0 (-13902) -At time : 57.001 ns Reaction : e_aq^-1 (-4351) + H3O^1 (-6013) -> H^0 (-13903) -At time : 58.001 ns Reaction : °OH^0 (-13816) + e_aq^-1 (-4454) -> OH^-1 (-13904) -At time : 58.001 ns Reaction : OH^-1 (-13785) + H3O^1 (-8105) -> No product -At time : 58.001 ns Reaction : OH^-1 (-13674) + H3O^1 (-8097) -> No product -At time : 58.001 ns Reaction : OH^-1 (-13661) + H3O^1 (-7309) -> No product -At time : 58.001 ns Reaction : H^0 (-11226) + °OH^0 (-9860) -> No product -At time : 58.001 ns Reaction : °OH^0 (-10494) + °OH^0 (-8429) -> H2O2^0 (-13905) -At time : 58.001 ns Reaction : H3O^1 (-10389) + e_aq^-1 (-8608) -> H^0 (-13906) -At time : 58.001 ns Reaction : °OH^0 (-10260) + e_aq^-1 (-5176) -> OH^-1 (-13907) -At time : 59.001 ns Reaction : °OH^0 (-13691) + e_aq^-1 (-5116) -> OH^-1 (-13908) -At time : 59.001 ns Reaction : °OH^0 (-13673) + H^0 (-13145) -> No product -At time : 59.001 ns Reaction : OH^-1 (-13516) + H3O^1 (-7605) -> No product -At time : 59.001 ns Reaction : e_aq^-1 (-2290) + H2O2^0 (-13376) -> OH^-1 (-13909) + °OH^0 (-13910) -At time : 59.001 ns Reaction : OH^-1 (-13336) + H3O^1 (-10688) -> No product -At time : 59.001 ns Reaction : H3O^1 (-5999) + OH^-1 (-13160) -> No product -At time : 59.001 ns Reaction : H^0 (-12968) + °OH^0 (-8084) -> No product -At time : 59.001 ns Reaction : H3O^1 (-9490) + e_aq^-1 (-3499) -> H^0 (-13911) -At time : 59.001 ns Reaction : °OH^0 (-6816) + °OH^0 (-8564) -> H2O2^0 (-13912) -At time : 60.001 ns Reaction : OH^-1 (-13908) + H3O^1 (-8175) -> No product -At time : 60.001 ns Reaction : OH^-1 (-13892) + H3O^1 (-8838) -> No product -At time : 60.001 ns Reaction : H3O^1 (-8496) + OH^-1 (-13829) -> No product -At time : 60.001 ns Reaction : OH^-1 (-13518) + H3O^1 (-7299) -> No product -At time : 60.001 ns Reaction : OH^-1 (-13494) + H3O^1 (-7831) -> No product -At time : 60.001 ns Reaction : H^0 (-12983) + °OH^0 (-8402) -> No product -At time : 60.001 ns Reaction : °OH^0 (-12908) + e_aq^-1 (-5007) -> OH^-1 (-13913) -At time : 60.001 ns Reaction : e_aq^-1 (-3876) + H^0 (-12536) -> OH^-1 (-13914) + H_2^0 (-13915) -At time : 60.001 ns Reaction : e_aq^-1 (-4548) + H2O2^0 (-11906) -> OH^-1 (-13916) + °OH^0 (-13917) -At time : 60.001 ns Reaction : e_aq^-1 (-5071) + H3O^1 (-7463) -> H^0 (-13918) -At time : 60.001 ns Reaction : e_aq^-1 (-4758) + H3O^1 (-6953) -> H^0 (-13919) -At time : 60.001 ns Reaction : e_aq^-1 (-4155) + H3O^1 (-6195) -> H^0 (-13920) -At time : 61.001 ns Reaction : H3O^1 (-6083) + OH^-1 (-13845) -> No product -At time : 61.001 ns Reaction : OH^-1 (-13826) + H3O^1 (-6029) -> No product -At time : 61.001 ns Reaction : OH^-1 (-13815) + H3O^1 (-8679) -> No product -At time : 61.001 ns Reaction : H3O^1 (-6491) + OH^-1 (-13585) -> No product -At time : 61.001 ns Reaction : e_aq^-1 (-4281) + H^0 (-13484) -> OH^-1 (-13921) + H_2^0 (-13922) -At time : 61.001 ns Reaction : e_aq^-1 (-1988) + H2O2^0 (-12731) -> OH^-1 (-13923) + °OH^0 (-13924) -At time : 61.001 ns Reaction : e_aq^-1 (-1246) + °OH^0 (-12708) -> OH^-1 (-13925) -At time : 61.001 ns Reaction : H3O^1 (-10308) + e_aq^-1 (-5591) -> H^0 (-13926) -At time : 62.001 ns Reaction : OH^-1 (-13891) + H3O^1 (-6947) -> No product -At time : 62.001 ns Reaction : OH^-1 (-13879) + H3O^1 (-8039) -> No product -At time : 62.001 ns Reaction : H3O^1 (-6715) + OH^-1 (-13738) -> No product -At time : 62.001 ns Reaction : e_aq^-1 (-16) + H2O2^0 (-12379) -> OH^-1 (-13927) + °OH^0 (-13928) -At time : 62.001 ns Reaction : OH^-1 (-11935) + H3O^1 (-7397) -> No product -At time : 62.001 ns Reaction : e_aq^-1 (-3939) + H2O2^0 (-11865) -> OH^-1 (-13929) + °OH^0 (-13930) -At time : 62.001 ns Reaction : °OH^0 (-9210) + e_aq^-1 (-8758) -> OH^-1 (-13931) -At time : 62.001 ns Reaction : e_aq^-1 (-4820) + H3O^1 (-7993) -> H^0 (-13932) -At time : 63.001 ns Reaction : e_aq^-1 (-848) + H2O2^0 (-13849) -> OH^-1 (-13933) + °OH^0 (-13934) -At time : 63.001 ns Reaction : H3O^1 (-8243) + OH^-1 (-13667) -> No product -At time : 63.001 ns Reaction : °OH^0 (-9865) + °OH^0 (-13373) -> H2O2^0 (-13935) -At time : 63.001 ns Reaction : e_aq^-1 (-4794) + H^0 (-13155) -> OH^-1 (-13936) + H_2^0 (-13937) -At time : 63.001 ns Reaction : °OH^0 (-12485) + °OH^0 (-7948) -> H2O2^0 (-13938) -At time : 63.001 ns Reaction : H^0 (-11126) + H^0 (-11261) -> H_2^0 (-13939) -At time : 63.001 ns Reaction : e_aq^-1 (-1984) + H3O^1 (-8805) -> H^0 (-13940) -At time : 63.001 ns Reaction : e_aq^-1 (-5453) + °OH^0 (-8260) -> OH^-1 (-13941) -At time : 64.001 ns Reaction : e_aq^-1 (-249) + °OH^0 (-13712) -> OH^-1 (-13942) -At time : 64.001 ns Reaction : OH^-1 (-13605) + H3O^1 (-5963) -> No product -At time : 64.001 ns Reaction : H3O^1 (-6517) + OH^-1 (-13583) -> No product -At time : 64.001 ns Reaction : H^0 (-12840) + °OH^0 (-9570) -> No product -At time : 64.001 ns Reaction : H2O2^0 (-11463) + e_aq^-1 (-2332) -> OH^-1 (-13943) + °OH^0 (-13944) -At time : 64.001 ns Reaction : H3O^1 (-9531) + e_aq^-1 (-3117) -> H^0 (-13945) -At time : 64.001 ns Reaction : e_aq^-1 (-3595) + °OH^0 (-7728) -> OH^-1 (-13946) -At time : 64.001 ns Reaction : e_aq^-1 (-202) + e_aq^-1 (-441) -> OH^-1 (-13947) + OH^-1 (-13948) + H_2^0 (-13949) -At time : 65.001 ns Reaction : OH^-1 (-13943) + H3O^1 (-5947) -> No product -At time : 65.001 ns Reaction : H3O^1 (-9607) + OH^-1 (-13832) -> No product -At time : 65.001 ns Reaction : H3O^1 (-7797) + OH^-1 (-13613) -> No product -At time : 65.001 ns Reaction : H2O2^0 (-13411) + e_aq^-1 (-3533) -> OH^-1 (-13950) + °OH^0 (-13951) -At time : 65.001 ns Reaction : °OH^0 (-12959) + °OH^0 (-13284) -> H2O2^0 (-13952) -At time : 65.001 ns Reaction : OH^-1 (-12675) + H3O^1 (-8589) -> No product -At time : 66.001 ns Reaction : OH^-1 (-13820) + H3O^1 (-6563) -> No product -At time : 66.001 ns Reaction : e_aq^-1 (-3797) + H2O2^0 (-13491) -> OH^-1 (-13953) + °OH^0 (-13954) -At time : 66.001 ns Reaction : e_aq^-1 (-4710) + H2O2^0 (-11664) -> OH^-1 (-13955) + °OH^0 (-13956) -At time : 66.001 ns Reaction : °OH^0 (-9223) + °OH^0 (-10741) -> H2O2^0 (-13957) -At time : 66.001 ns Reaction : H^0 (-10525) + e_aq^-1 (-4611) -> OH^-1 (-13958) + H_2^0 (-13959) -At time : 66.001 ns Reaction : e_aq^-1 (-528) + H3O^1 (-10262) -> H^0 (-13960) -At time : 66.001 ns Reaction : e_aq^-1 (-5012) + H^0 (-10154) -> OH^-1 (-13961) + H_2^0 (-13962) -At time : 66.001 ns Reaction : °OH^0 (-9927) + °OH^0 (-9259) -> H2O2^0 (-13963) -At time : 66.001 ns Reaction : °OH^0 (-6264) + °OH^0 (-7712) -> H2O2^0 (-13964) -At time : 66.001 ns Reaction : e_aq^-1 (-4378) + °OH^0 (-6830) -> OH^-1 (-13965) -At time : 66.001 ns Reaction : e_aq^-1 (-5100) + H3O^1 (-6149) -> H^0 (-13966) -At time : 67.001 ns Reaction : e_aq^-1 (-4561) + H^0 (-13628) -> OH^-1 (-13967) + H_2^0 (-13968) -At time : 67.001 ns Reaction : e_aq^-1 (-2455) + H2O2^0 (-12657) -> OH^-1 (-13969) + °OH^0 (-13970) -At time : 67.001 ns Reaction : °OH^0 (-7988) + H^0 (-12493) -> No product -At time : 67.001 ns Reaction : e_aq^-1 (-4973) + H2O2^0 (-12149) -> OH^-1 (-13971) + °OH^0 (-13972) -At time : 67.001 ns Reaction : °OH^0 (-10564) + e_aq^-1 (-4246) -> OH^-1 (-13973) -At time : 67.001 ns Reaction : °OH^0 (-10210) + °OH^0 (-7188) -> H2O2^0 (-13974) -At time : 67.001 ns Reaction : e_aq^-1 (-4192) + °OH^0 (-7894) -> OH^-1 (-13975) -At time : 67.001 ns Reaction : e_aq^-1 (-5248) + H3O^1 (-7439) -> H^0 (-13976) -At time : 67.001 ns Reaction : e_aq^-1 (-3860) + H3O^1 (-6569) -> H^0 (-13977) -At time : 68.001 ns Reaction : e_aq^-1 (-173) + H^0 (-12895) -> OH^-1 (-13978) + H_2^0 (-13979) -At time : 68.001 ns Reaction : OH^-1 (-12494) + H3O^1 (-7575) -> No product -At time : 68.001 ns Reaction : e_aq^-1 (-539) + H^0 (-10406) -> OH^-1 (-13980) + H_2^0 (-13981) -At time : 69.001 ns Reaction : OH^-1 (-13980) + H3O^1 (-8113) -> No product -At time : 69.001 ns Reaction : e_aq^-1 (-3969) + °OH^0 (-13970) -> OH^-1 (-13982) -At time : 69.001 ns Reaction : H^0 (-13766) + H^0 (-13804) -> H_2^0 (-13983) -At time : 69.001 ns Reaction : °OH^0 (-10966) + H^0 (-12557) -> No product -At time : 69.001 ns Reaction : e_aq^-1 (-4508) + H2O2^0 (-12140) -> OH^-1 (-13984) + °OH^0 (-13985) -At time : 69.001 ns Reaction : °OH^0 (-9437) + °OH^0 (-8700) -> H2O2^0 (-13986) -At time : 69.001 ns Reaction : e_aq^-1 (-4258) + °OH^0 (-9029) -> OH^-1 (-13987) -At time : 69.001 ns Reaction : e_aq^-1 (-4133) + H^0 (-9014) -> OH^-1 (-13988) + H_2^0 (-13989) -At time : 69.001 ns Reaction : e_aq^-1 (-5158) + H3O^1 (-8183) -> H^0 (-13990) -At time : 69.001 ns Reaction : °OH^0 (-7524) + °OH^0 (-8030) -> H2O2^0 (-13991) -At time : 69.001 ns Reaction : e_aq^-1 (-4610) + H3O^1 (-7997) -> H^0 (-13992) -At time : 70.001 ns Reaction : OH^-1 (-13961) + H3O^1 (-7091) -> No product -At time : 70.001 ns Reaction : OH^-1 (-13882) + H3O^1 (-6075) -> No product -At time : 70.001 ns Reaction : e_aq^-1 (-2559) + °OH^0 (-13769) -> OH^-1 (-13993) -At time : 70.001 ns Reaction : e_aq^-1 (-702) + H^0 (-13734) -> OH^-1 (-13994) + H_2^0 (-13995) -At time : 70.001 ns Reaction : H3O^1 (-11006) + OH^-1 (-13701) -> No product -At time : 70.001 ns Reaction : H3O^1 (-6067) + OH^-1 (-13607) -> No product -At time : 70.001 ns Reaction : e_aq^-1 (-1749) + H2O2^0 (-13074) -> OH^-1 (-13996) + °OH^0 (-13997) -At time : 70.001 ns Reaction : H^0 (-12673) + °OH^0 (-7680) -> No product -At time : 70.001 ns Reaction : e_aq^-1 (-4681) + H2O2^0 (-11789) -> OH^-1 (-13998) + °OH^0 (-13999) -At time : 70.001 ns Reaction : °OH^0 (-10904) + °OH^0 (-6898) -> H2O2^0 (-14000) -At time : 70.001 ns Reaction : °OH^0 (-10769) + °OH^0 (-6694) -> H2O2^0 (-14001) -At time : 70.001 ns Reaction : e_aq^-1 (-1941) + H3O^1 (-9834) -> H^0 (-14002) -At time : 70.001 ns Reaction : °OH^0 (-6802) + °OH^0 (-7884) -> H2O2^0 (-14003) -At time : 71.001 ns Reaction : OH^-1 (-13965) + H3O^1 (-6775) -> No product -At time : 71.001 ns Reaction : e_aq^-1 (-3802) + °OH^0 (-13660) -> OH^-1 (-14004) -At time : 71.001 ns Reaction : e_aq^-1 (-2574) + e_aq^-1 (-3801) -> OH^-1 (-14005) + OH^-1 (-14006) + H_2^0 (-14007) -At time : 72.001 ns Reaction : H3O^1 (-6573) + OH^-1 (-13993) -> No product -At time : 72.001 ns Reaction : OH^-1 (-13894) + H3O^1 (-5905) -> No product -At time : 72.001 ns Reaction : OH^-1 (-13430) + H3O^1 (-8273) -> No product -At time : 72.001 ns Reaction : °OH^0 (-10119) + °OH^0 (-13026) -> H2O2^0 (-14008) -At time : 72.001 ns Reaction : °OH^0 (-9692) + °OH^0 (-7644) -> H2O2^0 (-14009) -At time : 72.001 ns Reaction : e_aq^-1 (-3824) + H3O^1 (-7813) -> H^0 (-14010) -At time : 73.001 ns Reaction : OH^-1 (-13876) + H3O^1 (-7219) -> No product -At time : 73.001 ns Reaction : H3O^1 (-10214) + OH^-1 (-13869) -> No product -At time : 73.001 ns Reaction : H^0 (-10435) + °OH^0 (-13837) -> No product -At time : 73.001 ns Reaction : OH^-1 (-13749) + H3O^1 (-7515) -> No product -At time : 73.001 ns Reaction : e_aq^-1 (-5002) + H^0 (-13281) -> OH^-1 (-14011) + H_2^0 (-14012) -At time : 73.001 ns Reaction : e_aq^-1 (-4776) + H^0 (-12554) -> OH^-1 (-14013) + H_2^0 (-14014) -At time : 73.001 ns Reaction : e_aq^-1 (-1471) + H3O^1 (-8029) -> H^0 (-14015) -At time : 73.001 ns Reaction : °OH^0 (-5876) + °OH^0 (-6228) -> H2O2^0 (-14016) -At time : 73.001 ns Reaction : e_aq^-1 (-821) + °OH^0 (-6136) -> OH^-1 (-14017) -At time : 74.001 ns Reaction : OH^-1 (-13978) + H3O^1 (-11274) -> No product -At time : 74.001 ns Reaction : H3O^1 (-9893) + OH^-1 (-13958) -> No product -At time : 74.001 ns Reaction : OH^-1 (-13947) + H3O^1 (-11179) -> No product -At time : 74.001 ns Reaction : OH^-1 (-13833) + H3O^1 (-8547) -> No product -At time : 74.001 ns Reaction : e_aq^-1 (-3973) + H2O2^0 (-13632) -> OH^-1 (-14018) + °OH^0 (-14019) -At time : 74.001 ns Reaction : e_aq^-1 (-546) + H3O^1 (-11074) -> H^0 (-14020) -At time : 74.001 ns Reaction : e_aq^-1 (-5679) + H3O^1 (-8295) -> H^0 (-14021) -At time : 75.001 ns Reaction : H3O^1 (-7645) + OH^-1 (-13863) -> No product -At time : 75.001 ns Reaction : OH^-1 (-13681) + H3O^1 (-8538) -> No product -At time : 75.001 ns Reaction : OH^-1 (-13459) + H3O^1 (-8117) -> No product -At time : 75.001 ns Reaction : e_aq^-1 (-5424) + H^0 (-12965) -> OH^-1 (-14022) + H_2^0 (-14023) -At time : 75.001 ns Reaction : e_aq^-1 (-5174) + H^0 (-12810) -> OH^-1 (-14024) + H_2^0 (-14025) -At time : 75.001 ns Reaction : °OH^0 (-12249) + H^0 (-10259) -> No product -At time : 75.001 ns Reaction : °OH^0 (-10454) + °OH^0 (-5846) -> H2O2^0 (-14026) -At time : 76.001 ns Reaction : e_aq^-1 (-4178) + H2O2^0 (-13626) -> OH^-1 (-14027) + °OH^0 (-14028) -At time : 76.001 ns Reaction : e_aq^-1 (-4958) + °OH^0 (-13548) -> OH^-1 (-14029) -At time : 76.001 ns Reaction : e_aq^-1 (-4007) + °OH^0 (-12719) -> OH^-1 (-14030) -At time : 77.001 ns Reaction : OH^-1 (-13823) + H3O^1 (-8103) -> No product -At time : 77.001 ns Reaction : H^0 (-9678) + H^0 (-12953) -> H_2^0 (-14031) -At time : 77.001 ns Reaction : H2O2^0 (-11497) + e_aq^-1 (-2623) -> OH^-1 (-14032) + °OH^0 (-14033) -At time : 77.001 ns Reaction : e_aq^-1 (-4193) + H2O2^0 (-11432) -> OH^-1 (-14034) + °OH^0 (-14035) -At time : 77.001 ns Reaction : e_aq^-1 (-3048) + H3O^1 (-6355) -> H^0 (-14036) -At time : 78.001 ns Reaction : e_aq^-1 (-5120) + H^0 (-13990) -> OH^-1 (-14037) + H_2^0 (-14038) -At time : 78.001 ns Reaction : OH^-1 (-13859) + H3O^1 (-10761) -> No product -At time : 78.001 ns Reaction : °OH^0 (-13663) + H^0 (-13792) -> No product -At time : 78.001 ns Reaction : e_aq^-1 (-5648) + H3O^1 (-8317) -> H^0 (-14039) -At time : 78.001 ns Reaction : e_aq^-1 (-4858) + H3O^1 (-6039) -> H^0 (-14040) -At time : 79.001 ns Reaction : e_aq^-1 (-5612) + H^0 (-13600) -> OH^-1 (-14041) + H_2^0 (-14042) -At time : 79.001 ns Reaction : OH^-1 (-13158) + H3O^1 (-6883) -> No product -At time : 79.001 ns Reaction : H^0 (-10584) + °OH^0 (-7822) -> No product -At time : 79.001 ns Reaction : H^0 (-10431) + °OH^0 (-6062) -> No product -At time : 80.001 ns Reaction : OH^-1 (-13720) + H3O^1 (-6551) -> No product -At time : 80.001 ns Reaction : e_aq^-1 (-3607) + °OH^0 (-13532) -> OH^-1 (-14043) -At time : 80.001 ns Reaction : e_aq^-1 (-5710) + H^0 (-12595) -> OH^-1 (-14044) + H_2^0 (-14045) -At time : 80.001 ns Reaction : °OH^0 (-9368) + °OH^0 (-7352) -> H2O2^0 (-14046) -At time : 80.001 ns Reaction : e_aq^-1 (-5036) + H3O^1 (-7507) -> H^0 (-14047) -At time : 81.001 ns Reaction : H^0 (-14040) + °OH^0 (-12759) -> No product -At time : 81.001 ns Reaction : H^0 (-13793) + e_aq^-1 (-3679) -> OH^-1 (-14048) + H_2^0 (-14049) -At time : 81.001 ns Reaction : H3O^1 (-10161) + e_aq^-1 (-5132) -> H^0 (-14050) -At time : 81.001 ns Reaction : e_aq^-1 (-72) + °OH^0 (-7310) -> OH^-1 (-14051) -At time : 82.001 ns Reaction : OH^-1 (-14051) + H3O^1 (-8321) -> No product -At time : 82.001 ns Reaction : °OH^0 (-9623) + °OH^0 (-8756) -> H2O2^0 (-14052) -At time : 83.001 ns Reaction : °OH^0 (-14033) + e_aq^-1 (-2502) -> OH^-1 (-14053) -At time : 83.001 ns Reaction : °OH^0 (-13777) + e_aq^-1 (-4856) -> OH^-1 (-14054) -At time : 83.001 ns Reaction : e_aq^-1 (-660) + H2O2^0 (-12644) -> OH^-1 (-14055) + °OH^0 (-14056) -At time : 83.001 ns Reaction : e_aq^-1 (-2689) + H2O2^0 (-12013) -> OH^-1 (-14057) + °OH^0 (-14058) -At time : 83.001 ns Reaction : e_aq^-1 (-4737) + H3O^1 (-8017) -> H^0 (-14059) -At time : 84.001 ns Reaction : OH^-1 (-14030) + H3O^1 (-7809) -> No product -At time : 84.001 ns Reaction : OH^-1 (-13955) + H3O^1 (-8065) -> No product -At time : 84.001 ns Reaction : H3O^1 (-5827) + OH^-1 (-13900) -> No product -At time : 84.001 ns Reaction : H^0 (-13655) + e_aq^-1 (-436) -> OH^-1 (-14060) + H_2^0 (-14061) -At time : 84.001 ns Reaction : OH^-1 (-13629) + H3O^1 (-8139) -> No product -At time : 84.001 ns Reaction : e_aq^-1 (-5378) + H^0 (-13319) -> OH^-1 (-14062) + H_2^0 (-14063) -At time : 84.001 ns Reaction : °OH^0 (-10566) + °OH^0 (-6820) -> H2O2^0 (-14064) -At time : 84.001 ns Reaction : e_aq^-1 (-57) + H3O^1 (-8265) -> H^0 (-14065) -At time : 84.001 ns Reaction : e_aq^-1 (-3651) + e_aq^-1 (-3611) -> OH^-1 (-14066) + OH^-1 (-14067) + H_2^0 (-14068) -At time : 85.001 ns Reaction : OH^-1 (-14054) + H3O^1 (-8053) -> No product -At time : 85.001 ns Reaction : H3O^1 (-6037) + OH^-1 (-14013) -> No product -At time : 85.001 ns Reaction : H3O^1 (-6529) + OH^-1 (-13855) -> No product -At time : 85.001 ns Reaction : H^0 (-13481) + e_aq^-1 (-4417) -> OH^-1 (-14069) + H_2^0 (-14070) -At time : 85.001 ns Reaction : e_aq^-1 (-5639) + H2O2^0 (-11895) -> OH^-1 (-14071) + °OH^0 (-14072) -At time : 85.001 ns Reaction : H^0 (-9392) + °OH^0 (-5715) -> No product -At time : 85.001 ns Reaction : OH^-1 (-13695) + H3O^1 (-6521) -> No product -At time : 86.001 ns Reaction : OH^-1 (-14027) + H3O^1 (-7619) -> No product -At time : 86.001 ns Reaction : OH^-1 (-13694) + H3O^1 (-7827) -> No product -At time : 86.001 ns Reaction : e_aq^-1 (-4680) + H2O2^0 (-11525) -> OH^-1 (-14073) + °OH^0 (-14074) -At time : 86.001 ns Reaction : H3O^1 (-11054) + e_aq^-1 (-5062) -> H^0 (-14075) -At time : 86.001 ns Reaction : °OH^0 (-10685) + e_aq^-1 (-3692) -> OH^-1 (-14076) -At time : 86.001 ns Reaction : e_aq^-1 (-5213) + H3O^1 (-8141) -> H^0 (-14077) -At time : 86.001 ns Reaction : e_aq^-1 (-3725) + °OH^0 (-7774) -> OH^-1 (-14078) -At time : 87.001 ns Reaction : e_aq^-1 (-4675) + °OH^0 (-13830) -> OH^-1 (-14079) -At time : 87.001 ns Reaction : H^0 (-13046) + °OH^0 (-12594) -> No product -At time : 87.001 ns Reaction : H2O2^0 (-12217) + e_aq^-1 (-2339) -> OH^-1 (-14080) + °OH^0 (-14081) -At time : 87.001 ns Reaction : e_aq^-1 (-1774) + H2O2^0 (-11873) -> OH^-1 (-14082) + °OH^0 (-14083) -At time : 87.001 ns Reaction : H3O^1 (-10579) + e_aq^-1 (-3907) -> H^0 (-14084) -At time : 88.001 ns Reaction : OH^-1 (-14041) + H3O^1 (-7405) -> No product -At time : 88.001 ns Reaction : H3O^1 (-10500) + OH^-1 (-13708) -> No product -At time : 88.001 ns Reaction : e_aq^-1 (-606) + H^0 (-13110) -> OH^-1 (-14085) + H_2^0 (-14086) -At time : 88.001 ns Reaction : H2O2^0 (-12492) + e_aq^-1 (-5686) -> OH^-1 (-14087) + °OH^0 (-14088) -At time : 88.001 ns Reaction : e_aq^-1 (-5164) + H2O2^0 (-11720) -> OH^-1 (-14089) + °OH^0 (-14090) -At time : 88.001 ns Reaction : °OH^0 (-6240) + °OH^0 (-7700) -> H2O2^0 (-14091) -At time : 89.001 ns Reaction : °OH^0 (-14028) + e_aq^-1 (-4002) -> OH^-1 (-14092) -At time : 89.001 ns Reaction : e_aq^-1 (-5583) + °OH^0 (-13928) -> OH^-1 (-14093) -At time : 89.001 ns Reaction : H^0 (-9359) + °OH^0 (-10327) -> No product -At time : 90.001 ns Reaction : °OH^0 (-13860) + e_aq^-1 (-3972) -> OH^-1 (-14094) -At time : 90.001 ns Reaction : e_aq^-1 (-1344) + H2O2^0 (-13349) -> OH^-1 (-14095) + °OH^0 (-14096) -At time : 90.001 ns Reaction : e_aq^-1 (-615) + H^0 (-13185) -> OH^-1 (-14097) + H_2^0 (-14098) -At time : 90.001 ns Reaction : °OH^0 (-6588) + °OH^0 (-7656) -> H2O2^0 (-14099) -At time : 91.001 ns Reaction : OH^-1 (-13219) + H3O^1 (-6515) -> No product -At time : 91.001 ns Reaction : OH^-1 (-12888) + H3O^1 (-6971) -> No product -At time : 91.001 ns Reaction : H^0 (-9861) + °OH^0 (-6818) -> No product -At time : 92.001 ns Reaction : OH^-1 (-14080) + H3O^1 (-6759) -> No product -At time : 92.001 ns Reaction : OH^-1 (-14006) + H3O^1 (-6555) -> No product -At time : 92.001 ns Reaction : °OH^0 (-13854) + °OH^0 (-7058) -> H2O2^0 (-14100) -At time : 92.001 ns Reaction : OH^-1 (-13810) + H3O^1 (-7335) -> No product -At time : 92.001 ns Reaction : H3O^1 (-11345) + OH^-1 (-13108) -> No product -At time : 92.001 ns Reaction : °OH^0 (-10504) + H^0 (-12214) -> No product -At time : 92.001 ns Reaction : e_aq^-1 (-2542) + H^0 (-10725) -> OH^-1 (-14101) + H_2^0 (-14102) -At time : 92.001 ns Reaction : e_aq^-1 (-3608) + °OH^0 (-8540) -> OH^-1 (-14103) -At time : 92.001 ns Reaction : e_aq^-1 (-3774) + H3O^1 (-5929) -> H^0 (-14104) -At time : 93.001 ns Reaction : OH^-1 (-13786) + H3O^1 (-7759) -> No product -At time : 93.001 ns Reaction : H3O^1 (-5913) + OH^-1 (-13633) -> No product -At time : 93.001 ns Reaction : °OH^0 (-8192) + H^0 (-11263) -> No product -At time : 93.001 ns Reaction : e_aq^-1 (-240) + H3O^1 (-8412) -> H^0 (-14105) -At time : 93.001 ns Reaction : e_aq^-1 (-273) + H3O^1 (-8171) -> H^0 (-14106) -At time : 94.001 ns Reaction : e_aq^-1 (-2252) + H^0 (-14010) -> OH^-1 (-14107) + H_2^0 (-14108) -At time : 94.001 ns Reaction : OH^-1 (-13994) + H3O^1 (-7095) -> No product -At time : 94.001 ns Reaction : e_aq^-1 (-3565) + H^0 (-13808) -> OH^-1 (-14109) + H_2^0 (-14110) -At time : 94.001 ns Reaction : °OH^0 (-13443) + °OH^0 (-6678) -> H2O2^0 (-14111) -At time : 94.001 ns Reaction : H^0 (-9577) + H^0 (-13200) -> H_2^0 (-14112) -At time : 94.001 ns Reaction : e_aq^-1 (-2504) + H^0 (-12232) -> OH^-1 (-14113) + H_2^0 (-14114) -At time : 94.001 ns Reaction : H3O^1 (-8181) + e_aq^-1 (-8884) -> H^0 (-14115) -At time : 95.001 ns Reaction : H3O^1 (-6307) + OH^-1 (-13946) -> No product -At time : 95.001 ns Reaction : °OH^0 (-13536) + °OH^0 (-6546) -> H2O2^0 (-14116) -At time : 95.001 ns Reaction : °OH^0 (-13244) + e_aq^-1 (-4432) -> OH^-1 (-14117) -At time : 95.001 ns Reaction : H^0 (-12141) + H^0 (-12999) -> H_2^0 (-14118) -At time : 95.001 ns Reaction : °OH^0 (-7660) + °OH^0 (-7776) -> H2O2^0 (-14119) -At time : 96.001 ns Reaction : e_aq^-1 (-502) + H2O2^0 (-12062) -> OH^-1 (-14120) + °OH^0 (-14121) -At time : 96.001 ns Reaction : H2O2^0 (-11816) + e_aq^-1 (-8488) -> OH^-1 (-14122) + °OH^0 (-14123) -At time : 96.001 ns Reaction : e_aq^-1 (-4917) + H^0 (-9066) -> OH^-1 (-14124) + H_2^0 (-14125) -At time : 96.001 ns Reaction : e_aq^-1 (-761) + e_aq^-1 (-4896) -> OH^-1 (-14126) + OH^-1 (-14127) + H_2^0 (-14128) -At time : 97.001 ns Reaction : H^0 (-9725) + H^0 (-13977) -> H_2^0 (-14129) -At time : 97.001 ns Reaction : °OH^0 (-10809) + H^0 (-12648) -> No product -At time : 97.001 ns Reaction : e_aq^-1 (-4582) + °OH^0 (-9285) -> OH^-1 (-14130) -At time : 98.001 ns Reaction : H3O^1 (-7875) + OH^-1 (-13898) -> No product -At time : 98.001 ns Reaction : °OH^0 (-10786) + e_aq^-1 (-2059) -> OH^-1 (-14131) -At time : 98.001 ns Reaction : H^0 (-10279) + H^0 (-9363) -> H_2^0 (-14132) -At time : 98.001 ns Reaction : °OH^0 (-10255) + H^0 (-9080) -> No product -At time : 98.001 ns Reaction : °OH^0 (-9552) + e_aq^-1 (-3686) -> OH^-1 (-14133) -At time : 99.001 ns Reaction : H3O^1 (-6653) + OH^-1 (-13347) -> No product -At time : 99.001 ns Reaction : °OH^0 (-12951) + °OH^0 (-5924) -> H2O2^0 (-14134) -At time : 100 ns Reaction : OH^-1 (-14076) + H3O^1 (-6393) -> No product -At time : 100 ns Reaction : OH^-1 (-13780) + H3O^1 (-7723) -> No product -At time : 100 ns Reaction : e_aq^-1 (-5563) + H2O2^0 (-11575) -> OH^-1 (-14135) + °OH^0 (-14136) -At time : 100 ns Reaction : °OH^0 (-7666) + °OH^0 (-7760) -> H2O2^0 (-14137) -At time : 100 ns Reaction : e_aq^-1 (-5275) + H3O^1 (-6105) -> H^0 (-14138) -At time : 100 ns Reaction : e_aq^-1 (-2390) + °OH^0 (-5934) -> OH^-1 (-14139) -At time : 100 ns Reaction : e_aq^-1 (-2741) + e_aq^-1 (-3735) -> OH^-1 (-14140) + OH^-1 (-14141) + H_2^0 (-14142) -At time : 101 ns Reaction : OH^-1 (-14095) + H3O^1 (-8430) -> No product -At time : 101 ns Reaction : °OH^0 (-5808) + H^0 (-13314) -> No product -At time : 101 ns Reaction : H^0 (-13087) + H^0 (-8976) -> H_2^0 (-14143) -At time : 101 ns Reaction : e_aq^-1 (-2863) + H2O2^0 (-12296) -> OH^-1 (-14144) + °OH^0 (-14145) -At time : 101 ns Reaction : H2O2^0 (-12184) + e_aq^-1 (-4457) -> OH^-1 (-14146) + °OH^0 (-14147) -At time : 101 ns Reaction : e_aq^-1 (-670) + H2O2^0 (-11860) -> OH^-1 (-14148) + °OH^0 (-14149) -At time : 101 ns Reaction : e_aq^-1 (-2617) + H3O^1 (-6617) -> H^0 (-14150) -At time : 101 ns Reaction : OH^-1 (-12407) + H3O^1 (-7103) -> No product -At time : 102 ns Reaction : OH^-1 (-14037) + H3O^1 (-7249) -> No product -At time : 102 ns Reaction : e_aq^-1 (-5574) + H^0 (-13309) -> OH^-1 (-14151) + H_2^0 (-14152) -At time : 102 ns Reaction : e_aq^-1 (-5015) + H3O^1 (-11044) -> H^0 (-14153) -At time : 103 ns Reaction : °OH^0 (-13344) + °OH^0 (-6914) -> H2O2^0 (-14154) -At time : 103 ns Reaction : H3O^1 (-6395) + OH^-1 (-12863) -> No product -At time : 103 ns Reaction : °OH^0 (-11235) + °OH^0 (-6866) -> H2O2^0 (-14155) -At time : 103 ns Reaction : °OH^0 (-11069) + °OH^0 (-6150) -> H2O2^0 (-14156) -At time : 103 ns Reaction : e_aq^-1 (-5602) + °OH^0 (-8939) -> OH^-1 (-14157) -At time : 103 ns Reaction : e_aq^-1 (-51) + H3O^1 (-8619) -> H^0 (-14158) -At time : 104 ns Reaction : H^0 (-14084) + °OH^0 (-6600) -> No product -At time : 104 ns Reaction : OH^-1 (-14071) + H3O^1 (-8271) -> No product -At time : 104 ns Reaction : H3O^1 (-5939) + OH^-1 (-14004) -> No product -At time : 104 ns Reaction : H^0 (-13276) + °OH^0 (-13930) -> No product -At time : 104 ns Reaction : e_aq^-1 (-4074) + °OH^0 (-13236) -> OH^-1 (-14159) -At time : 104 ns Reaction : e_aq^-1 (-4113) + H2O2^0 (-11740) -> OH^-1 (-14160) + °OH^0 (-14161) -At time : 105 ns Reaction : °OH^0 (-14136) + e_aq^-1 (-5551) -> OH^-1 (-14162) -At time : 105 ns Reaction : OH^-1 (-14120) + H3O^1 (-8217) -> No product -At time : 105 ns Reaction : e_aq^-1 (-503) + °OH^0 (-13972) -> OH^-1 (-14163) -At time : 105 ns Reaction : e_aq^-1 (-4742) + H2O2^0 (-13848) -> OH^-1 (-14164) + °OH^0 (-14165) -At time : 106 ns Reaction : H^0 (-13919) + °OH^0 (-9055) -> No product -At time : 106 ns Reaction : OH^-1 (-13721) + H3O^1 (-7767) -> No product -At time : 106 ns Reaction : OH^-1 (-13657) + H3O^1 (-6287) -> No product -At time : 106 ns Reaction : OH^-1 (-13622) + H3O^1 (-7065) -> No product -At time : 106 ns Reaction : °OH^0 (-9185) + e_aq^-1 (-3630) -> OH^-1 (-14166) -At time : 107 ns Reaction : OH^-1 (-14163) + H3O^1 (-7465) -> No product -At time : 107 ns Reaction : e_aq^-1 (-3755) + °OH^0 (-13856) -> OH^-1 (-14167) -At time : 107 ns Reaction : °OH^0 (-13771) + e_aq^-1 (-4852) -> OH^-1 (-14168) -At time : 107 ns Reaction : e_aq^-1 (-5272) + H2O2^0 (-12297) -> OH^-1 (-14169) + °OH^0 (-14170) -At time : 107 ns Reaction : H2O2^0 (-11739) + e_aq^-1 (-8671) -> OH^-1 (-14171) + °OH^0 (-14172) -At time : 108 ns Reaction : °OH^0 (-14123) + e_aq^-1 (-551) -> OH^-1 (-14173) -At time : 108 ns Reaction : OH^-1 (-13528) + H3O^1 (-6311) -> No product -At time : 108 ns Reaction : H3O^1 (-10575) + e_aq^-1 (-2385) -> H^0 (-14174) -At time : 109 ns Reaction : °OH^0 (-6846) + °OH^0 (-13889) -> H2O2^0 (-14175) -At time : 109 ns Reaction : H3O^1 (-6071) + OH^-1 (-13877) -> No product -At time : 109 ns Reaction : OH^-1 (-12853) + H3O^1 (-6225) -> No product -At time : 109 ns Reaction : e_aq^-1 (-2141) + H2O2^0 (-11943) -> OH^-1 (-14176) + °OH^0 (-14177) -At time : 109 ns Reaction : H^0 (-11238) + °OH^0 (-6856) -> No product -At time : 109 ns Reaction : e_aq^-1 (-3719) + H3O^1 (-8772) -> H^0 (-14178) -At time : 109 ns Reaction : e_aq^-1 (-2403) + H3O^1 (-6691) -> H^0 (-14179) -At time : 109 ns Reaction : H3O^1 (-10472) + OH^-1 (-14011) -> No product -At time : 110 ns Reaction : °OH^0 (-13479) + e_aq^-1 (-1882) -> OH^-1 (-14180) -At time : 110 ns Reaction : e_aq^-1 (-5173) + °OH^0 (-7232) -> OH^-1 (-14181) -At time : 111 ns Reaction : e_aq^-1 (-5649) + H^0 (-14105) -> OH^-1 (-14182) + H_2^0 (-14183) -At time : 111 ns Reaction : °OH^0 (-13475) + °OH^0 (-7416) -> H2O2^0 (-14184) -At time : 111 ns Reaction : °OH^0 (-10452) + H^0 (-10081) -> No product -At time : 111 ns Reaction : e_aq^-1 (-5577) + °OH^0 (-9077) -> OH^-1 (-14185) -At time : 111 ns Reaction : e_aq^-1 (-5291) + °OH^0 (-8186) -> OH^-1 (-14186) -At time : 112 ns Reaction : H3O^1 (-6139) + OH^-1 (-13971) -> No product -At time : 112 ns Reaction : e_aq^-1 (-4898) + H2O2^0 (-13952) -> OH^-1 (-14187) + °OH^0 (-14188) -At time : 112 ns Reaction : H3O^1 (-5853) + OH^-1 (-13761) -> No product -At time : 112 ns Reaction : H^0 (-13744) + e_aq^-1 (-4880) -> OH^-1 (-14189) + H_2^0 (-14190) -At time : 112 ns Reaction : H^0 (-10451) + °OH^0 (-8124) -> No product -At time : 112 ns Reaction : °OH^0 (-10209) + °OH^0 (-10242) -> H2O2^0 (-14191) -At time : 112 ns Reaction : e_aq^-1 (-5178) + H3O^1 (-7159) -> H^0 (-14192) -At time : 112 ns Reaction : e_aq^-1 (-2057) + H3O^1 (-6843) -> H^0 (-14193) -At time : 113 ns Reaction : H3O^1 (-6733) + OH^-1 (-14180) -> No product -At time : 113 ns Reaction : H^0 (-14020) + H^0 (-11996) -> H_2^0 (-14194) -At time : 113 ns Reaction : e_aq^-1 (-8665) + °OH^0 (-13999) -> OH^-1 (-14195) -At time : 113 ns Reaction : H3O^1 (-9864) + OH^-1 (-13729) -> No product -At time : 113 ns Reaction : e_aq^-1 (-2693) + H^0 (-13437) -> OH^-1 (-14196) + H_2^0 (-14197) -At time : 113 ns Reaction : H^0 (-9300) + e_aq^-1 (-4824) -> OH^-1 (-14198) + H_2^0 (-14199) -At time : 114 ns Reaction : OH^-1 (-14024) + H3O^1 (-8334) -> No product -At time : 114 ns Reaction : H2O2^0 (-12624) + e_aq^-1 (-3780) -> OH^-1 (-14200) + °OH^0 (-14201) -At time : 114 ns Reaction : e_aq^-1 (-3627) + H3O^1 (-8730) -> H^0 (-14202) -At time : 114 ns Reaction : e_aq^-1 (-5255) + H3O^1 (-7271) -> H^0 (-14203) -At time : 115 ns Reaction : OH^-1 (-14034) + H3O^1 (-10793) -> No product -At time : 115 ns Reaction : H^0 (-12700) + H^0 (-11717) -> H_2^0 (-14204) -At time : 115 ns Reaction : H3O^1 (-9739) + e_aq^-1 (-3816) -> H^0 (-14205) -At time : 115 ns Reaction : H^0 (-9118) + e_aq^-1 (-4656) -> OH^-1 (-14206) + H_2^0 (-14207) -At time : 116 ns Reaction : H3O^1 (-10409) + OH^-1 (-14126) -> No product -At time : 116 ns Reaction : e_aq^-1 (-4653) + H2O2^0 (-14100) -> OH^-1 (-14208) + °OH^0 (-14209) -At time : 116 ns Reaction : e_aq^-1 (-2068) + H2O2^0 (-12934) -> OH^-1 (-14210) + °OH^0 (-14211) -At time : 116 ns Reaction : e_aq^-1 (-4053) + H^0 (-12818) -> OH^-1 (-14212) + H_2^0 (-14213) -At time : 116 ns Reaction : °OH^0 (-6346) + H^0 (-12453) -> No product -At time : 116 ns Reaction : e_aq^-1 (-4420) + H3O^1 (-7051) -> H^0 (-14214) -At time : 116 ns Reaction : e_aq^-1 (-1319) + H3O^1 (-6031) -> H^0 (-14215) -At time : 117 ns Reaction : H3O^1 (-5829) + OH^-1 (-14053) -> No product -At time : 117 ns Reaction : H3O^1 (-7161) + OH^-1 (-13861) -> No product -At time : 117 ns Reaction : °OH^0 (-13758) + °OH^0 (-8270) -> H2O2^0 (-14216) -At time : 117 ns Reaction : H3O^1 (-6797) + OH^-1 (-13715) -> No product -At time : 118 ns Reaction : OH^-1 (-14069) + H3O^1 (-6193) -> No product -At time : 118 ns Reaction : e_aq^-1 (-600) + H2O2^0 (-13627) -> OH^-1 (-14217) + °OH^0 (-14218) -At time : 118 ns Reaction : °OH^0 (-9962) + e_aq^-1 (-4549) -> OH^-1 (-14219) -At time : 118 ns Reaction : e_aq^-1 (-5045) + H3O^1 (-8604) -> H^0 (-14220) -At time : 119 ns Reaction : H3O^1 (-5849) + OH^-1 (-14171) -> No product -At time : 119 ns Reaction : H3O^1 (-8406) + OH^-1 (-14162) -> No product -At time : 119 ns Reaction : e_aq^-1 (-5628) + H^0 (-13960) -> OH^-1 (-14221) + H_2^0 (-14222) -At time : 119 ns Reaction : e_aq^-1 (-4673) + H3O^1 (-7085) -> H^0 (-14223) -At time : 119 ns Reaction : e_aq^-1 (-2722) + H3O^1 (-6417) -> H^0 (-14224) -At time : 119 ns Reaction : e_aq^-1 (-2645) + H3O^1 (-5931) -> H^0 (-14225) -At time : 120 ns Reaction : OH^-1 (-14101) + H3O^1 (-6485) -> No product -At time : 120 ns Reaction : OH^-1 (-13872) + H3O^1 (-6747) -> No product -At time : 120 ns Reaction : °OH^0 (-13256) + °OH^0 (-6648) -> H2O2^0 (-14226) -At time : 121 ns Reaction : °OH^0 (-7056) + °OH^0 (-13080) -> H2O2^0 (-14227) -At time : 121 ns Reaction : H^0 (-12725) + H^0 (-9211) -> H_2^0 (-14228) -At time : 121 ns Reaction : e_aq^-1 (-4602) + H^0 (-12386) -> OH^-1 (-14229) + H_2^0 (-14230) -At time : 121 ns Reaction : e_aq^-1 (-957) + H2O2^0 (-11857) -> OH^-1 (-14231) + °OH^0 (-14232) -At time : 121 ns Reaction : H2O2^0 (-11656) + e_aq^-1 (-4814) -> OH^-1 (-14233) + °OH^0 (-14234) -At time : 121 ns Reaction : e_aq^-1 (-3721) + °OH^0 (-8771) -> OH^-1 (-14235) -At time : 121 ns Reaction : e_aq^-1 (-3504) + °OH^0 (-7704) -> OH^-1 (-14236) -At time : 121 ns Reaction : e_aq^-1 (-3901) + H3O^1 (-6601) -> H^0 (-14237) -At time : 122 ns Reaction : H3O^1 (-6581) + OH^-1 (-14196) -> No product -At time : 122 ns Reaction : e_aq^-1 (-2498) + H^0 (-14150) -> OH^-1 (-14238) + H_2^0 (-14239) -At time : 122 ns Reaction : H3O^1 (-11030) + OH^-1 (-13616) -> No product -At time : 122 ns Reaction : H^0 (-12834) + e_aq^-1 (-2216) -> OH^-1 (-14240) + H_2^0 (-14241) -At time : 122 ns Reaction : e_aq^-1 (-4041) + H3O^1 (-8346) -> H^0 (-14242) -At time : 123 ns Reaction : H^0 (-9188) + °OH^0 (-6278) -> No product -At time : 123 ns Reaction : e_aq^-1 (-5236) + H3O^1 (-8844) -> H^0 (-14243) -At time : 123 ns Reaction : °OH^0 (-7228) + °OH^0 (-8152) -> H2O2^0 (-14244) -At time : 123 ns Reaction : e_aq^-1 (-4412) + H3O^1 (-7975) -> H^0 (-14245) -At time : 123 ns Reaction : e_aq^-1 (-2246) + °OH^0 (-6712) -> OH^-1 (-14246) -At time : 124 ns Reaction : e_aq^-1 (-8782) + H2O2^0 (-14116) -> OH^-1 (-14247) + °OH^0 (-14248) -At time : 124 ns Reaction : OH^-1 (-13885) + H3O^1 (-7535) -> No product -At time : 124 ns Reaction : H^0 (-13455) + °OH^0 (-6594) -> No product -At time : 125 ns Reaction : H3O^1 (-10670) + OH^-1 (-14133) -> No product -At time : 125 ns Reaction : °OH^0 (-14083) + °OH^0 (-7902) -> H2O2^0 (-14249) -At time : 125 ns Reaction : e_aq^-1 (-4664) + H^0 (-13932) -> OH^-1 (-14250) + H_2^0 (-14251) -At time : 125 ns Reaction : OH^-1 (-12843) + H3O^1 (-5915) -> No product -At time : 126 ns Reaction : °OH^0 (-6056) + °OH^0 (-8660) -> H2O2^0 (-14252) -At time : 126 ns Reaction : e_aq^-1 (-5466) + H3O^1 (-8613) -> H^0 (-14253) -At time : 127 ns Reaction : H2O2^0 (-12649) + e_aq^-1 (-2412) -> OH^-1 (-14254) + °OH^0 (-14255) -At time : 128 ns Reaction : H^0 (-9559) + °OH^0 (-6336) -> No product -At time : 128 ns Reaction : e_aq^-1 (-4116) + °OH^0 (-8801) -> OH^-1 (-14256) -At time : 128 ns Reaction : e_aq^-1 (-3563) + H3O^1 (-6335) -> H^0 (-14257) -At time : 129 ns Reaction : OH^-1 (-14250) + H3O^1 (-6011) -> No product -At time : 129 ns Reaction : OH^-1 (-14195) + H3O^1 (-7129) -> No product -At time : 129 ns Reaction : OH^-1 (-13487) + H3O^1 (-7673) -> No product -At time : 130 ns Reaction : OH^-1 (-13862) + H3O^1 (-7425) -> No product -At time : 130 ns Reaction : e_aq^-1 (-3654) + H^0 (-13412) -> OH^-1 (-14258) + H_2^0 (-14259) -At time : 130 ns Reaction : °OH^0 (-9251) + H^0 (-13055) -> No product -At time : 130 ns Reaction : °OH^0 (-9835) + °OH^0 (-9793) -> H2O2^0 (-14260) -At time : 130 ns Reaction : e_aq^-1 (-4989) + H3O^1 (-8161) -> H^0 (-14261) -At time : 130 ns Reaction : e_aq^-1 (-3004) + °OH^0 (-6406) -> OH^-1 (-14262) -At time : 131 ns Reaction : e_aq^-1 (-2093) + H3O^1 (-8562) -> H^0 (-14263) -At time : 131 ns Reaction : e_aq^-1 (-3921) + H3O^1 (-7649) -> H^0 (-14264) -At time : 132 ns Reaction : H3O^1 (-6449) + OH^-1 (-14048) -> No product -At time : 132 ns Reaction : e_aq^-1 (-2305) + °OH^0 (-14035) -> OH^-1 (-14265) -At time : 132 ns Reaction : e_aq^-1 (-4919) + e_aq^-1 (-4932) -> OH^-1 (-14266) + OH^-1 (-14267) + H_2^0 (-14268) -At time : 133 ns Reaction : H3O^1 (-9762) + OH^-1 (-14265) -> No product -At time : 133 ns Reaction : OH^-1 (-14130) + H3O^1 (-7965) -> No product -At time : 133 ns Reaction : OH^-1 (-13929) + H3O^1 (-7789) -> No product -At time : 133 ns Reaction : °OH^0 (-13469) + °OH^0 (-9566) -> H2O2^0 (-14269) -At time : 134 ns Reaction : H3O^1 (-10749) + OH^-1 (-14238) -> No product -At time : 134 ns Reaction : H3O^1 (-9809) + OH^-1 (-14210) -> No product -At time : 134 ns Reaction : OH^-1 (-14168) + H3O^1 (-7501) -> No product -At time : 134 ns Reaction : H^0 (-9132) + °OH^0 (-8326) -> No product -At time : 135 ns Reaction : °OH^0 (-13564) + e_aq^-1 (-5360) -> OH^-1 (-14270) -At time : 135 ns Reaction : e_aq^-1 (-5022) + °OH^0 (-8174) -> OH^-1 (-14271) -At time : 136 ns Reaction : H3O^1 (-7023) + OH^-1 (-14117) -> No product -At time : 136 ns Reaction : OH^-1 (-14094) + H3O^1 (-6761) -> No product -At time : 136 ns Reaction : OH^-1 (-14089) + H3O^1 (-5857) -> No product -At time : 136 ns Reaction : OH^-1 (-14078) + H3O^1 (-7771) -> No product -At time : 136 ns Reaction : OH^-1 (-13788) + H3O^1 (-6347) -> No product -At time : 136 ns Reaction : H^0 (-13040) + °OH^0 (-8783) -> No product -At time : 136 ns Reaction : e_aq^-1 (-467) + H^0 (-12188) -> OH^-1 (-14272) + H_2^0 (-14273) -At time : 136 ns Reaction : e_aq^-1 (-2256) + H^0 (-12113) -> OH^-1 (-14274) + H_2^0 (-14275) -At time : 136 ns Reaction : H^0 (-11333) + °OH^0 (-6672) -> No product -At time : 136 ns Reaction : H^0 (-10360) + e_aq^-1 (-5220) -> OH^-1 (-14276) + H_2^0 (-14277) -At time : 137 ns Reaction : OH^-1 (-14229) + H3O^1 (-6965) -> No product -At time : 137 ns Reaction : H3O^1 (-6493) + OH^-1 (-14140) -> No product -At time : 137 ns Reaction : H3O^1 (-6275) + OH^-1 (-14109) -> No product -At time : 137 ns Reaction : H2O2^0 (-11425) + e_aq^-1 (-5005) -> OH^-1 (-14278) + °OH^0 (-14279) -At time : 137 ns Reaction : e_aq^-1 (-3760) + °OH^0 (-10716) -> OH^-1 (-14280) -At time : 137 ns Reaction : H^0 (-10439) + e_aq^-1 (-655) -> OH^-1 (-14281) + H_2^0 (-14282) -At time : 138 ns Reaction : OH^-1 (-13883) + H3O^1 (-8916) -> No product -At time : 138 ns Reaction : H^0 (-13326) + e_aq^-1 (-2186) -> OH^-1 (-14283) + H_2^0 (-14284) -At time : 138 ns Reaction : e_aq^-1 (-2948) + H2O2^0 (-13075) -> OH^-1 (-14285) + °OH^0 (-14286) -At time : 138 ns Reaction : °OH^0 (-10825) + H^0 (-12614) -> No product -At time : 138 ns Reaction : e_aq^-1 (-4386) + H2O2^0 (-11454) -> OH^-1 (-14287) + °OH^0 (-14288) -At time : 139 ns Reaction : H3O^1 (-5861) + OH^-1 (-14164) -> No product -At time : 139 ns Reaction : e_aq^-1 (-3818) + H^0 (-13920) -> OH^-1 (-14289) + H_2^0 (-14290) -At time : 139 ns Reaction : OH^-1 (-13841) + H3O^1 (-7273) -> No product -At time : 140 ns Reaction : OH^-1 (-14093) + H3O^1 (-7317) -> No product -At time : 140 ns Reaction : e_aq^-1 (-4123) + H2O2^0 (-13865) -> OH^-1 (-14291) + °OH^0 (-14292) -At time : 140 ns Reaction : H3O^1 (-9966) + e_aq^-1 (-1169) -> H^0 (-14293) -At time : 140 ns Reaction : H^0 (-9146) + °OH^0 (-6216) -> No product -At time : 141 ns Reaction : °OH^0 (-10827) + H^0 (-14193) -> No product -At time : 141 ns Reaction : H3O^1 (-10732) + OH^-1 (-13401) -> No product -At time : 141 ns Reaction : °OH^0 (-7552) + °OH^0 (-9039) -> H2O2^0 (-14294) -At time : 141 ns Reaction : e_aq^-1 (-2730) + H3O^1 (-6587) -> H^0 (-14295) -At time : 141 ns Reaction : e_aq^-1 (-3218) + H3O^1 (-6327) -> H^0 (-14296) -At time : 143 ns Reaction : H3O^1 (-7257) + OH^-1 (-13913) -> No product -At time : 143 ns Reaction : e_aq^-1 (-4342) + H2O2^0 (-12106) -> OH^-1 (-14297) + °OH^0 (-14298) -At time : 144 ns Reaction : H3O^1 (-8015) + OH^-1 (-14189) -> No product -At time : 144 ns Reaction : e_aq^-1 (-5029) + °OH^0 (-14188) -> OH^-1 (-14299) -At time : 144 ns Reaction : OH^-1 (-14160) + H3O^1 (-10542) -> No product -At time : 144 ns Reaction : H3O^1 (-6951) + OH^-1 (-13784) -> No product -At time : 145 ns Reaction : °OH^0 (-13951) + H^0 (-14296) -> No product -At time : 145 ns Reaction : OH^-1 (-14066) + H3O^1 (-7743) -> No product -At time : 145 ns Reaction : e_aq^-1 (-1880) + H2O2^0 (-13710) -> OH^-1 (-14300) + °OH^0 (-14301) -At time : 145 ns Reaction : H2O2^0 (-12050) + e_aq^-1 (-2335) -> OH^-1 (-14302) + °OH^0 (-14303) -At time : 146 ns Reaction : e_aq^-1 (-5626) + H^0 (-12623) -> OH^-1 (-14304) + H_2^0 (-14305) -At time : 146 ns Reaction : H^0 (-12550) + °OH^0 (-6728) -> No product -At time : 147 ns Reaction : OH^-1 (-14181) + H3O^1 (-7419) -> No product -At time : 147 ns Reaction : H3O^1 (-9427) + OH^-1 (-13520) -> No product -At time : 147 ns Reaction : H^0 (-13320) + e_aq^-1 (-3788) -> OH^-1 (-14306) + H_2^0 (-14307) -At time : 147 ns Reaction : e_aq^-1 (-4805) + H3O^1 (-7059) -> H^0 (-14308) -At time : 147 ns Reaction : e_aq^-1 (-4106) + H3O^1 (-6771) -> H^0 (-14309) -At time : 148 ns Reaction : H^0 (-13139) + °OH^0 (-7632) -> No product -At time : 149 ns Reaction : H2O2^0 (-13340) + e_aq^-1 (-2528) -> OH^-1 (-14310) + °OH^0 (-14311) -At time : 150 ns Reaction : H^0 (-13582) + H^0 (-13124) -> H_2^0 (-14312) -At time : 150 ns Reaction : e_aq^-1 (-560) + °OH^0 (-7268) -> OH^-1 (-14313) -At time : 150 ns Reaction : °OH^0 (-5974) + °OH^0 (-6768) -> H2O2^0 (-14314) -At time : 151 ns Reaction : e_aq^-1 (-3771) + H2O2^0 (-12234) -> OH^-1 (-14315) + °OH^0 (-14316) -At time : 151 ns Reaction : °OH^0 (-10320) + °OH^0 (-7420) -> H2O2^0 (-14317) -At time : 151 ns Reaction : e_aq^-1 (-5380) + H3O^1 (-8193) -> H^0 (-14318) -At time : 152 ns Reaction : e_aq^-1 (-1242) + °OH^0 (-7012) -> OH^-1 (-14319) -At time : 153 ns Reaction : OH^-1 (-14280) + H3O^1 (-7661) -> No product -At time : 153 ns Reaction : °OH^0 (-14145) + °OH^0 (-13696) -> H2O2^0 (-14320) -At time : 153 ns Reaction : °OH^0 (-7266) + H^0 (-9094) -> No product -At time : 154 ns Reaction : e_aq^-1 (-1357) + °OH^0 (-14234) -> OH^-1 (-14321) -At time : 154 ns Reaction : H3O^1 (-7751) + OH^-1 (-13802) -> No product -At time : 154 ns Reaction : e_aq^-1 (-4082) + H2O2^0 (-13599) -> OH^-1 (-14322) + °OH^0 (-14323) -At time : 154 ns Reaction : °OH^0 (-9512) + e_aq^-1 (-3531) -> OH^-1 (-14324) -At time : 155 ns Reaction : H3O^1 (-11056) + OH^-1 (-14186) -> No product -At time : 155 ns Reaction : H2O2^0 (-13799) + e_aq^-1 (-4691) -> OH^-1 (-14325) + °OH^0 (-14326) -At time : 155 ns Reaction : H3O^1 (-10973) + e_aq^-1 (-4585) -> H^0 (-14327) -At time : 155 ns Reaction : e_aq^-1 (-4651) + °OH^0 (-8663) -> OH^-1 (-14328) -At time : 156 ns Reaction : H3O^1 (-6669) + OH^-1 (-14322) -> No product -At time : 156 ns Reaction : H3O^1 (-6649) + OH^-1 (-13923) -> No product -At time : 156 ns Reaction : OH^-1 (-13790) + H3O^1 (-8241) -> No product -At time : 156 ns Reaction : e_aq^-1 (-2823) + H3O^1 (-6441) -> H^0 (-14329) -At time : 156 ns Reaction : e_aq^-1 (-1934) + e_aq^-1 (-4477) -> OH^-1 (-14330) + OH^-1 (-14331) + H_2^0 (-14332) -At time : 157 ns Reaction : H^0 (-13138) + H^0 (-14225) -> H_2^0 (-14333) -At time : 157 ns Reaction : H3O^1 (-10332) + OH^-1 (-13927) -> No product -At time : 157 ns Reaction : e_aq^-1 (-2199) + °OH^0 (-13779) -> OH^-1 (-14334) -At time : 157 ns Reaction : e_aq^-1 (-885) + H3O^1 (-5859) -> H^0 (-14335) -At time : 158 ns Reaction : H3O^1 (-6305) + OH^-1 (-13745) -> No product -At time : 158 ns Reaction : H2O2^0 (-12147) + e_aq^-1 (-2426) -> OH^-1 (-14336) + °OH^0 (-14337) -At time : 159 ns Reaction : e_aq^-1 (-476) + °OH^0 (-13212) -> OH^-1 (-14338) -At time : 159 ns Reaction : e_aq^-1 (-1068) + H3O^1 (-8847) -> H^0 (-14339) -At time : 159 ns Reaction : e_aq^-1 (-398) + H3O^1 (-8299) -> H^0 (-14340) -At time : 160 ns Reaction : H3O^1 (-10470) + OH^-1 (-14231) -> No product -At time : 160 ns Reaction : H3O^1 (-7303) + OH^-1 (-13462) -> No product -At time : 160 ns Reaction : e_aq^-1 (-2700) + H3O^1 (-10711) -> H^0 (-14341) -At time : 161 ns Reaction : OH^-1 (-14182) + H3O^1 (-8303) -> No product -At time : 161 ns Reaction : °OH^0 (-7108) + H^0 (-13293) -> No product -At time : 162 ns Reaction : e_aq^-1 (-1416) + H^0 (-14293) -> OH^-1 (-14342) + H_2^0 (-14343) -At time : 163 ns Reaction : e_aq^-1 (-4905) + H2O2^0 (-12109) -> OH^-1 (-14344) + °OH^0 (-14345) -At time : 163 ns Reaction : e_aq^-1 (-3850) + H2O2^0 (-12038) -> OH^-1 (-14346) + °OH^0 (-14347) -At time : 163 ns Reaction : e_aq^-1 (-2345) + e_aq^-1 (-2430) -> OH^-1 (-14348) + OH^-1 (-14349) + H_2^0 (-14350) -At time : 164 ns Reaction : °OH^0 (-9119) + H^0 (-14059) -> No product -At time : 164 ns Reaction : OH^-1 (-13496) + H3O^1 (-7173) -> No product -At time : 164 ns Reaction : e_aq^-1 (-2271) + H2O2^0 (-11699) -> OH^-1 (-14351) + °OH^0 (-14352) -At time : 164 ns Reaction : e_aq^-1 (-5547) + H3O^1 (-8319) -> H^0 (-14353) -At time : 164 ns Reaction : e_aq^-1 (-5405) + H3O^1 (-7411) -> H^0 (-14354) -At time : 165 ns Reaction : H^0 (-13540) + °OH^0 (-6540) -> No product -At time : 166 ns Reaction : OH^-1 (-14103) + H3O^1 (-6403) -> No product -At time : 166 ns Reaction : °OH^0 (-14090) + e_aq^-1 (-4841) -> OH^-1 (-14355) -At time : 166 ns Reaction : H^0 (-13689) + H^0 (-9509) -> H_2^0 (-14356) -At time : 166 ns Reaction : H3O^1 (-7025) + OH^-1 (-13267) -> No product -At time : 166 ns Reaction : H^0 (-9336) + e_aq^-1 (-5256) -> OH^-1 (-14357) + H_2^0 (-14358) -At time : 167 ns Reaction : e_aq^-1 (-3843) + °OH^0 (-14316) -> OH^-1 (-14359) -At time : 167 ns Reaction : H^0 (-12395) + e_aq^-1 (-2872) -> OH^-1 (-14360) + H_2^0 (-14361) -At time : 167 ns Reaction : e_aq^-1 (-5011) + °OH^0 (-7470) -> OH^-1 (-14362) -At time : 168 ns Reaction : e_aq^-1 (-1139) + °OH^0 (-13714) -> OH^-1 (-14363) -At time : 168 ns Reaction : H3O^1 (-6867) + OH^-1 (-13522) -> No product -At time : 168 ns Reaction : H^0 (-13242) + H^0 (-9258) -> H_2^0 (-14364) -At time : 168 ns Reaction : e_aq^-1 (-2749) + °OH^0 (-9629) -> OH^-1 (-14365) -At time : 169 ns Reaction : OH^-1 (-13866) + H3O^1 (-7725) -> No product -At time : 170 ns Reaction : OH^-1 (-14313) + H3O^1 (-7481) -> No product -At time : 170 ns Reaction : OH^-1 (-14032) + H3O^1 (-5925) -> No product -At time : 170 ns Reaction : °OH^0 (-10773) + H^0 (-9843) -> No product -At time : 171 ns Reaction : H3O^1 (-6103) + OH^-1 (-14270) -> No product -At time : 171 ns Reaction : H3O^1 (-5841) + OH^-1 (-14217) -> No product -At time : 171 ns Reaction : H3O^1 (-7205) + OH^-1 (-14187) -> No product -At time : 172 ns Reaction : H^0 (-10225) + H^0 (-13095) -> H_2^0 (-14366) -At time : 172 ns Reaction : e_aq^-1 (-3705) + e_aq^-1 (-3666) -> OH^-1 (-14367) + OH^-1 (-14368) + H_2^0 (-14369) -At time : 173 ns Reaction : °OH^0 (-14292) + H^0 (-9759) -> No product -At time : 173 ns Reaction : °OH^0 (-13306) + °OH^0 (-6764) -> H2O2^0 (-14370) -At time : 173 ns Reaction : H3O^1 (-10785) + e_aq^-1 (-2276) -> H^0 (-14371) -At time : 175 ns Reaction : OH^-1 (-14082) + H3O^1 (-7923) -> No product -At time : 175 ns Reaction : H^0 (-13338) + °OH^0 (-13944) -> No product -At time : 175 ns Reaction : H3O^1 (-10734) + OH^-1 (-13530) -> No product -At time : 175 ns Reaction : e_aq^-1 (-5308) + °OH^0 (-10273) -> OH^-1 (-14372) -At time : 176 ns Reaction : e_aq^-1 (-2421) + °OH^0 (-7832) -> OH^-1 (-14373) -At time : 177 ns Reaction : OH^-1 (-14355) + H3O^1 (-7537) -> No product -At time : 177 ns Reaction : e_aq^-1 (-5692) + H^0 (-14039) -> OH^-1 (-14374) + H_2^0 (-14375) -At time : 177 ns Reaction : H^0 (-13023) + °OH^0 (-8588) -> No product -At time : 178 ns Reaction : °OH^0 (-14303) + H^0 (-11222) -> No product -At time : 179 ns Reaction : H3O^1 (-6993) + OH^-1 (-14321) -> No product -At time : 179 ns Reaction : °OH^0 (-14165) + e_aq^-1 (-4188) -> OH^-1 (-14376) -At time : 180 ns Reaction : °OH^0 (-13562) + H^0 (-11725) -> No product -At time : 180 ns Reaction : °OH^0 (-7482) + H^0 (-12103) -> No product -At time : 180 ns Reaction : e_aq^-1 (-2924) + H2O2^0 (-11456) -> OH^-1 (-14377) + °OH^0 (-14378) -At time : 181 ns Reaction : e_aq^-1 (-4981) + °OH^0 (-8078) -> OH^-1 (-14379) -At time : 182 ns Reaction : H3O^1 (-10668) + OH^-1 (-13839) -> No product -At time : 182 ns Reaction : OH^-1 (-13697) + H3O^1 (-7941) -> No product -At time : 182 ns Reaction : °OH^0 (-11172) + H^0 (-13214) -> No product -At time : 183 ns Reaction : e_aq^-1 (-4536) + °OH^0 (-14147) -> OH^-1 (-14380) -At time : 183 ns Reaction : H^0 (-13945) + °OH^0 (-6356) -> No product -At time : 183 ns Reaction : e_aq^-1 (-5631) + H^0 (-13688) -> OH^-1 (-14381) + H_2^0 (-14382) -At time : 183 ns Reaction : °OH^0 (-10254) + °OH^0 (-13677) -> H2O2^0 (-14383) -At time : 184 ns Reaction : H3O^1 (-9253) + OH^-1 (-13813) -> No product -At time : 184 ns Reaction : e_aq^-1 (-5361) + H^0 (-12998) -> OH^-1 (-14384) + H_2^0 (-14385) -At time : 185 ns Reaction : H^0 (-12656) + °OH^0 (-6864) -> No product -At time : 185 ns Reaction : e_aq^-1 (-4391) + H2O2^0 (-12344) -> OH^-1 (-14386) + °OH^0 (-14387) -At time : 185 ns Reaction : e_aq^-1 (-5157) + H2O2^0 (-11542) -> OH^-1 (-14388) + °OH^0 (-14389) -At time : 186 ns Reaction : H^0 (-10902) + °OH^0 (-13445) -> No product -At time : 186 ns Reaction : °OH^0 (-11019) + H^0 (-13137) -> No product -At time : 187 ns Reaction : °OH^0 (-6992) + °OH^0 (-7960) -> H2O2^0 (-14390) -At time : 188 ns Reaction : H3O^1 (-6833) + OH^-1 (-14206) -> No product -At time : 188 ns Reaction : OH^-1 (-13936) + H3O^1 (-8035) -> No product -At time : 188 ns Reaction : OH^-1 (-13907) + H3O^1 (-8149) -> No product -At time : 188 ns Reaction : e_aq^-1 (-3815) + H^0 (-11207) -> OH^-1 (-14391) + H_2^0 (-14392) -At time : 189 ns Reaction : e_aq^-1 (-4885) + H^0 (-13354) -> OH^-1 (-14393) + H_2^0 (-14394) -At time : 192 ns Reaction : e_aq^-1 (-3947) + H2O2^0 (-14260) -> OH^-1 (-14395) + °OH^0 (-14396) -At time : 192 ns Reaction : e_aq^-1 (-497) + °OH^0 (-8903) -> OH^-1 (-14397) -At time : 193 ns Reaction : OH^-1 (-14018) + H3O^1 (-6685) -> No product -At time : 193 ns Reaction : OH^-1 (-13756) + H3O^1 (-8694) -> No product -At time : 194 ns Reaction : OH^-1 (-14127) + H3O^1 (-8111) -> No product -At time : 195 ns Reaction : H3O^1 (-6453) + OH^-1 (-14258) -> No product -At time : 195 ns Reaction : H^0 (-11296) + °OH^0 (-14149) -> No product -At time : 195 ns Reaction : H3O^1 (-7275) + OH^-1 (-14122) -> No product -At time : 195 ns Reaction : H3O^1 (-9496) + e_aq^-1 (-3614) -> H^0 (-14398) -At time : 196 ns Reaction : °OH^0 (-10433) + e_aq^-1 (-4990) -> OH^-1 (-14399) -At time : 196 ns Reaction : e_aq^-1 (-4301) + H3O^1 (-6181) -> H^0 (-14400) -At time : 197 ns Reaction : e_aq^-1 (-4581) + °OH^0 (-14323) -> OH^-1 (-14401) -At time : 197 ns Reaction : H^0 (-14224) + °OH^0 (-9533) -> No product -At time : 197 ns Reaction : H3O^1 (-6959) + OH^-1 (-12973) -> No product -At time : 197 ns Reaction : °OH^0 (-7784) + H^0 (-12538) -> No product -At time : 197 ns Reaction : °OH^0 (-9341) + °OH^0 (-5730) -> H2O2^0 (-14402) -At time : 197 ns Reaction : e_aq^-1 (-2328) + e_aq^-1 (-4068) -> OH^-1 (-14403) + OH^-1 (-14404) + H_2^0 (-14405) -At time : 198 ns Reaction : H3O^1 (-7747) + OH^-1 (-13772) -> No product -At time : 199 ns Reaction : H3O^1 (-6641) + OH^-1 (-14092) -> No product -At time : 199 ns Reaction : °OH^0 (-9867) + °OH^0 (-9837) -> H2O2^0 (-14406) -At time : 200 ns Reaction : H3O^1 (-7549) + OH^-1 (-13933) -> No product -At time : 202 ns Reaction : OH^-1 (-13587) + H3O^1 (-8177) -> No product -At time : 203 ns Reaction : OH^-1 (-14393) + H3O^1 (-8487) -> No product -At time : 204 ns Reaction : OH^-1 (-14299) + H3O^1 (-7083) -> No product -At time : 204 ns Reaction : °OH^0 (-9914) + e_aq^-1 (-4467) -> OH^-1 (-14407) -At time : 204 ns Reaction : H3O^1 (-9273) + e_aq^-1 (-4492) -> H^0 (-14408) -At time : 205 ns Reaction : e_aq^-1 (-1110) + H3O^1 (-8385) -> H^0 (-14409) -At time : 206 ns Reaction : H3O^1 (-7951) + OH^-1 (-13843) -> No product -At time : 207 ns Reaction : H3O^1 (-10753) + OH^-1 (-14391) -> No product -At time : 208 ns Reaction : OH^-1 (-14300) + H3O^1 (-7597) -> No product -At time : 208 ns Reaction : OH^-1 (-13870) + H3O^1 (-6447) -> No product -At time : 208 ns Reaction : OH^-1 (-13773) + H3O^1 (-6369) -> No product -At time : 209 ns Reaction : °OH^0 (-13814) + H^0 (-13228) -> No product -At time : 210 ns Reaction : H^0 (-10267) + °OH^0 (-7402) -> No product -At time : 211 ns Reaction : OH^-1 (-14085) + H3O^1 (-7193) -> No product -At time : 212 ns Reaction : e_aq^-1 (-3486) + H2O2^0 (-11652) -> OH^-1 (-14410) + °OH^0 (-14411) -At time : 214 ns Reaction : °OH^0 (-5862) + H^0 (-12360) -> No product -At time : 214 ns Reaction : °OH^0 (-5796) + H^0 (-9028) -> No product -At time : 216 ns Reaction : OH^-1 (-14262) + H3O^1 (-6433) -> No product -At time : 216 ns Reaction : e_aq^-1 (-656) + H^0 (-12070) -> OH^-1 (-14412) + H_2^0 (-14413) -At time : 216 ns Reaction : e_aq^-1 (-4504) + H2O2^0 (-11711) -> OH^-1 (-14414) + °OH^0 (-14415) -At time : 217 ns Reaction : °OH^0 (-14345) + °OH^0 (-14279) -> H2O2^0 (-14416) -At time : 218 ns Reaction : H3O^1 (-10149) + OH^-1 (-14362) -> No product -At time : 220 ns Reaction : OH^-1 (-14144) + H3O^1 (-6349) -> No product -At time : 220 ns Reaction : H^0 (-14138) + °OH^0 (-13388) -> No product -At time : 220 ns Reaction : H2O2^0 (-12087) + e_aq^-1 (-4716) -> OH^-1 (-14417) + °OH^0 (-14418) -At time : 220 ns Reaction : °OH^0 (-6538) + °OH^0 (-6564) -> H2O2^0 (-14419) -At time : 222 ns Reaction : e_aq^-1 (-2230) + °OH^0 (-7806) -> OH^-1 (-14420) -At time : 223 ns Reaction : OH^-1 (-14372) + H3O^1 (-8169) -> No product -At time : 223 ns Reaction : OH^-1 (-13545) + H3O^1 (-6113) -> No product -At time : 224 ns Reaction : OH^-1 (-14256) + H3O^1 (-6857) -> No product -At time : 225 ns Reaction : OH^-1 (-13143) + H3O^1 (-5855) -> No product -At time : 226 ns Reaction : OH^-1 (-13921) + H3O^1 (-6777) -> No product -At time : 227 ns Reaction : OH^-1 (-14304) + H3O^1 (-7415) -> No product -At time : 227 ns Reaction : OH^-1 (-14283) + H3O^1 (-6755) -> No product -At time : 227 ns Reaction : e_aq^-1 (-4058) + H3O^1 (-8793) -> H^0 (-14421) -At time : 229 ns Reaction : H3O^1 (-6623) + OH^-1 (-13857) -> No product -At time : 229 ns Reaction : H2O2^0 (-11482) + e_aq^-1 (-2319) -> OH^-1 (-14422) + °OH^0 (-14423) -At time : 229 ns Reaction : °OH^0 (-7326) + °OH^0 (-8160) -> H2O2^0 (-14424) -At time : 230 ns Reaction : OH^-1 (-14363) + H3O^1 (-7587) -> No product -At time : 231 ns Reaction : °OH^0 (-14387) + °OH^0 (-6176) -> H2O2^0 (-14425) -At time : 231 ns Reaction : e_aq^-1 (-5327) + °OH^0 (-14121) -> OH^-1 (-14426) -At time : 232 ns Reaction : OH^-1 (-13831) + H3O^1 (-7819) -> No product -At time : 232 ns Reaction : e_aq^-1 (-3828) + H^0 (-13658) -> OH^-1 (-14427) + H_2^0 (-14428) -At time : 233 ns Reaction : OH^-1 (-14359) + H3O^1 (-6701) -> No product -At time : 234 ns Reaction : H3O^1 (-11165) + OH^-1 (-14374) -> No product -At time : 235 ns Reaction : H^0 (-13976) + H^0 (-13258) -> H_2^0 (-14429) -At time : 236 ns Reaction : H3O^1 (-7791) + OH^-1 (-14113) -> No product -At time : 236 ns Reaction : °OH^0 (-13570) + °OH^0 (-6848) -> H2O2^0 (-14430) -At time : 238 ns Reaction : °OH^0 (-6932) + °OH^0 (-8372) -> H2O2^0 (-14431) -At time : 238 ns Reaction : e_aq^-1 (-4419) + H3O^1 (-7917) -> H^0 (-14432) -At time : 238 ns Reaction : e_aq^-1 (-2109) + e_aq^-1 (-3968) -> OH^-1 (-14433) + OH^-1 (-14434) + H_2^0 (-14435) -At time : 239 ns Reaction : e_aq^-1 (-5492) + H3O^1 (-7369) -> H^0 (-14436) -At time : 240 ns Reaction : H3O^1 (-6005) + OH^-1 (-13029) -> No product -At time : 241 ns Reaction : H3O^1 (-5899) + OH^-1 (-14368) -> No product -At time : 241 ns Reaction : H^0 (-13992) + e_aq^-1 (-4361) -> OH^-1 (-14437) + H_2^0 (-14438) -At time : 242 ns Reaction : °OH^0 (-6812) + H^0 (-12428) -> No product -At time : 243 ns Reaction : H^0 (-13360) + °OH^0 (-7100) -> No product -At time : 243 ns Reaction : e_aq^-1 (-5017) + H3O^1 (-8307) -> H^0 (-14439) -At time : 244 ns Reaction : OH^-1 (-14166) + H3O^1 (-6423) -> No product -At time : 244 ns Reaction : °OH^0 (-13346) + °OH^0 (-8068) -> H2O2^0 (-14440) -At time : 244 ns Reaction : e_aq^-1 (-3021) + H^0 (-13017) -> OH^-1 (-14441) + H_2^0 (-14442) -At time : 244 ns Reaction : e_aq^-1 (-2691) + H2O2^0 (-12270) -> OH^-1 (-14443) + °OH^0 (-14444) -At time : 244 ns Reaction : H2O2^0 (-11721) + e_aq^-1 (-5459) -> OH^-1 (-14445) + °OH^0 (-14446) -At time : 245 ns Reaction : OH^-1 (-14348) + H3O^1 (-10736) -> No product -At time : 245 ns Reaction : °OH^0 (-9825) + e_aq^-1 (-2164) -> OH^-1 (-14447) -At time : 248 ns Reaction : °OH^0 (-14337) + °OH^0 (-5926) -> H2O2^0 (-14448) -At time : 248 ns Reaction : e_aq^-1 (-2157) + H3O^1 (-6611) -> H^0 (-14449) -At time : 249 ns Reaction : H^0 (-13334) + H^0 (-12488) -> H_2^0 (-14450) -At time : 249 ns Reaction : H3O^1 (-11380) + e_aq^-1 (-930) -> H^0 (-14451) -At time : 249 ns Reaction : e_aq^-1 (-4882) + H3O^1 (-7223) -> H^0 (-14452) -At time : 249 ns Reaction : e_aq^-1 (-5019) + H3O^1 (-7109) -> H^0 (-14453) -At time : 251 ns Reaction : OH^-1 (-14331) + H3O^1 (-6045) -> No product -At time : 251 ns Reaction : e_aq^-1 (-5319) + e_aq^-1 (-623) -> OH^-1 (-14454) + OH^-1 (-14455) + H_2^0 (-14456) -At time : 252 ns Reaction : °OH^0 (-10642) + e_aq^-1 (-3176) -> OH^-1 (-14457) -At time : 254 ns Reaction : e_aq^-1 (-5457) + H2O2^0 (-11774) -> OH^-1 (-14458) + °OH^0 (-14459) -At time : 254 ns Reaction : °OH^0 (-10583) + °OH^0 (-9230) -> H2O2^0 (-14460) -At time : 255 ns Reaction : e_aq^-1 (-4928) + H3O^1 (-7155) -> H^0 (-14461) -At time : 256 ns Reaction : OH^-1 (-14285) + H3O^1 (-6605) -> No product -At time : 256 ns Reaction : H^0 (-9517) + e_aq^-1 (-3189) -> OH^-1 (-14462) + H_2^0 (-14463) -At time : 257 ns Reaction : e_aq^-1 (-2717) + e_aq^-1 (-3691) -> OH^-1 (-14464) + OH^-1 (-14465) + H_2^0 (-14466) -At time : 258 ns Reaction : e_aq^-1 (-82) + H^0 (-14439) -> OH^-1 (-14467) + H_2^0 (-14468) -At time : 259 ns Reaction : H3O^1 (-10367) + OH^-1 (-13089) -> No product -At time : 259 ns Reaction : e_aq^-1 (-641) + °OH^0 (-6060) -> OH^-1 (-14469) -At time : 262 ns Reaction : H^0 (-14050) + °OH^0 (-8314) -> No product -At time : 262 ns Reaction : OH^-1 (-13551) + H3O^1 (-7471) -> No product -At time : 262 ns Reaction : H^0 (-11059) + °OH^0 (-8190) -> No product -At time : 263 ns Reaction : OH^-1 (-14457) + H3O^1 (-7727) -> No product -At time : 263 ns Reaction : °OH^0 (-14389) + °OH^0 (-7278) -> H2O2^0 (-14470) -At time : 263 ns Reaction : e_aq^-1 (-4277) + °OH^0 (-10862) -> OH^-1 (-14471) -At time : 263 ns Reaction : °OH^0 (-10326) + °OH^0 (-8306) -> H2O2^0 (-14472) -At time : 265 ns Reaction : H3O^1 (-10625) + OH^-1 (-14324) -> No product -At time : 265 ns Reaction : °OH^0 (-13490) + H^0 (-14205) -> No product -At time : 266 ns Reaction : e_aq^-1 (-5039) + H2O2^0 (-11923) -> OH^-1 (-14473) + °OH^0 (-14474) -At time : 268 ns Reaction : °OH^0 (-14019) + °OH^0 (-13132) -> H2O2^0 (-14475) -At time : 269 ns Reaction : H^0 (-10667) + e_aq^-1 (-3529) -> OH^-1 (-14476) + H_2^0 (-14477) -At time : 270 ns Reaction : H3O^1 (-7953) + OH^-1 (-14319) -> No product -At time : 270 ns Reaction : H^0 (-11190) + e_aq^-1 (-1446) -> OH^-1 (-14478) + H_2^0 (-14479) -At time : 271 ns Reaction : OH^-1 (-14055) + H3O^1 (-8382) -> No product -At time : 272 ns Reaction : °OH^0 (-11053) + °OH^0 (-11065) -> H2O2^0 (-14480) -At time : 273 ns Reaction : °OH^0 (-13910) + °OH^0 (-8792) -> H2O2^0 (-14481) -At time : 274 ns Reaction : e_aq^-1 (-3847) + H3O^1 (-7793) -> H^0 (-14482) -At time : 277 ns Reaction : H3O^1 (-10768) + OH^-1 (-13768) -> No product -At time : 281 ns Reaction : H3O^1 (-10889) + OH^-1 (-14107) -> No product -At time : 285 ns Reaction : H^0 (-14220) + H^0 (-13300) -> H_2^0 (-14483) -At time : 286 ns Reaction : °OH^0 (-12921) + °OH^0 (-12135) -> H2O2^0 (-14484) -At time : 288 ns Reaction : e_aq^-1 (-2006) + H2O2^0 (-11883) -> OH^-1 (-14485) + °OH^0 (-14486) -At time : 289 ns Reaction : H3O^1 (-10133) + OH^-1 (-14478) -> No product -At time : 291 ns Reaction : OH^-1 (-13615) + H3O^1 (-6179) -> No product -At time : 291 ns Reaction : e_aq^-1 (-3977) + H3O^1 (-7775) -> H^0 (-14487) -At time : 291 ns Reaction : OH^-1 (-13909) + H3O^1 (-6729) -> No product -At time : 293 ns Reaction : OH^-1 (-13407) + H3O^1 (-7885) -> No product -At time : 294 ns Reaction : °OH^0 (-7866) + H^0 (-12633) -> No product -At time : 294 ns Reaction : e_aq^-1 (-4667) + H3O^1 (-7533) -> H^0 (-14488) -At time : 295 ns Reaction : e_aq^-1 (-291) + H2O2^0 (-14484) -> OH^-1 (-14489) + °OH^0 (-14490) -At time : 295 ns Reaction : H^0 (-14339) + H^0 (-9270) -> H_2^0 (-14491) -At time : 297 ns Reaction : e_aq^-1 (-3716) + H3O^1 (-7633) -> H^0 (-14492) -At time : 297 ns Reaction : °OH^0 (-6788) + °OH^0 (-6804) -> H2O2^0 (-14493) -At time : 298 ns Reaction : e_aq^-1 (-1340) + °OH^0 (-13985) -> OH^-1 (-14494) -At time : 298 ns Reaction : e_aq^-1 (-4623) + H3O^1 (-6997) -> H^0 (-14495) -At time : 299 ns Reaction : H2O2^0 (-12205) + e_aq^-1 (-5707) -> OH^-1 (-14496) + °OH^0 (-14497) -At time : 300 ns Reaction : e_aq^-1 (-573) + H2O2^0 (-11576) -> OH^-1 (-14498) + °OH^0 (-14499) -At time : 301 ns Reaction : H3O^1 (-6633) + OH^-1 (-14310) -> No product -At time : 302 ns Reaction : °OH^0 (-14459) + e_aq^-1 (-5651) -> OH^-1 (-14500) -At time : 302 ns Reaction : OH^-1 (-14351) + H3O^1 (-6351) -> No product -At time : 303 ns Reaction : H^0 (-14461) + °OH^0 (-8102) -> No product -At time : 303 ns Reaction : °OH^0 (-13001) + °OH^0 (-6328) -> H2O2^0 (-14501) -At time : 303 ns Reaction : e_aq^-1 (-1100) + H3O^1 (-7131) -> H^0 (-14502) -At time : 304 ns Reaction : H^0 (-11342) + °OH^0 (-6736) -> No product -At time : 305 ns Reaction : °OH^0 (-13510) + e_aq^-1 (-4926) -> OH^-1 (-14503) -At time : 306 ns Reaction : e_aq^-1 (-5142) + °OH^0 (-13302) -> OH^-1 (-14504) -At time : 307 ns Reaction : °OH^0 (-12075) + e_aq^-1 (-4669) -> OH^-1 (-14505) -At time : 308 ns Reaction : °OH^0 (-10229) + e_aq^-1 (-516) -> OH^-1 (-14506) -At time : 308 ns Reaction : e_aq^-1 (-3591) + °OH^0 (-6254) -> OH^-1 (-14507) -At time : 309 ns Reaction : e_aq^-1 (-4546) + °OH^0 (-14301) -> OH^-1 (-14508) -At time : 309 ns Reaction : H2O2^0 (-11812) + e_aq^-1 (-8437) -> OH^-1 (-14509) + °OH^0 (-14510) -At time : 310 ns Reaction : H^0 (-14318) + H^0 (-13341) -> H_2^0 (-14511) -At time : 312 ns Reaction : °OH^0 (-14510) + e_aq^-1 (-4251) -> OH^-1 (-14512) -At time : 313 ns Reaction : OH^-1 (-13950) + H3O^1 (-6239) -> No product -At time : 316 ns Reaction : H^0 (-13357) + °OH^0 (-6272) -> No product -At time : 317 ns Reaction : OH^-1 (-14336) + H3O^1 (-6607) -> No product -At time : 317 ns Reaction : e_aq^-1 (-1161) + H3O^1 (-6119) -> H^0 (-14513) -At time : 319 ns Reaction : e_aq^-1 (-2753) + °OH^0 (-6498) -> OH^-1 (-14514) -At time : 320 ns Reaction : OH^-1 (-14176) + H3O^1 (-6599) -> No product -At time : 320 ns Reaction : OH^-1 (-14141) + H3O^1 (-9702) -> No product -At time : 320 ns Reaction : °OH^0 (-10666) + H^0 (-8994) -> No product -At time : 321 ns Reaction : H3O^1 (-10544) + OH^-1 (-14508) -> No product -At time : 323 ns Reaction : OH^-1 (-14504) + H3O^1 (-7187) -> No product -At time : 323 ns Reaction : H^0 (-13881) + °OH^0 (-6090) -> No product -At time : 323 ns Reaction : H^0 (-12026) + °OH^0 (-6058) -> No product -At time : 324 ns Reaction : e_aq^-1 (-2000) + H3O^1 (-5957) -> H^0 (-14515) -At time : 326 ns Reaction : OH^-1 (-14500) + H3O^1 (-8403) -> No product -At time : 327 ns Reaction : H3O^1 (-6825) + OH^-1 (-14346) -> No product -At time : 328 ns Reaction : e_aq^-1 (-4111) + H2O2^0 (-14475) -> OH^-1 (-14516) + °OH^0 (-14517) -At time : 329 ns Reaction : OH^-1 (-13636) + H3O^1 (-6411) -> No product -At time : 329 ns Reaction : H2O2^0 (-11655) + e_aq^-1 (-5582) -> OH^-1 (-14518) + °OH^0 (-14519) -At time : 332 ns Reaction : H^0 (-13807) + H^0 (-14488) -> H_2^0 (-14520) -At time : 332 ns Reaction : e_aq^-1 (-4156) + °OH^0 (-12655) -> OH^-1 (-14521) -At time : 334 ns Reaction : H^0 (-9412) + H^0 (-14327) -> H_2^0 (-14522) -At time : 335 ns Reaction : OH^-1 (-14365) + H3O^1 (-6475) -> No product -At time : 336 ns Reaction : H3O^1 (-6539) + OH^-1 (-13383) -> No product -At time : 336 ns Reaction : e_aq^-1 (-2354) + °OH^0 (-9788) -> OH^-1 (-14523) -At time : 337 ns Reaction : H3O^1 (-11208) + OH^-1 (-13759) -> No product -At time : 337 ns Reaction : e_aq^-1 (-1784) + H2O2^0 (-11744) -> OH^-1 (-14524) + °OH^0 (-14525) -At time : 338 ns Reaction : OH^-1 (-14246) + H3O^1 (-6693) -> No product -At time : 342 ns Reaction : H^0 (-13232) + °OH^0 (-8286) -> No product -At time : 345 ns Reaction : H3O^1 (-10804) + OH^-1 (-14325) -> No product -At time : 345 ns Reaction : H3O^1 (-7837) + OH^-1 (-14254) -> No product -At time : 345 ns Reaction : °OH^0 (-10568) + e_aq^-1 (-4048) -> OH^-1 (-14526) -At time : 345 ns Reaction : e_aq^-1 (-2107) + H3O^1 (-5995) -> H^0 (-14527) -At time : 347 ns Reaction : °OH^0 (-9876) + e_aq^-1 (-4522) -> OH^-1 (-14528) -At time : 349 ns Reaction : °OH^0 (-9763) + e_aq^-1 (-2204) -> OH^-1 (-14529) -At time : 351 ns Reaction : °OH^0 (-14499) + °OH^0 (-5860) -> H2O2^0 (-14530) -At time : 353 ns Reaction : e_aq^-1 (-4439) + H^0 (-12563) -> OH^-1 (-14531) + H_2^0 (-14532) -At time : 354 ns Reaction : H3O^1 (-8233) + OH^-1 (-14412) -> No product -At time : 354 ns Reaction : H^0 (-13102) + °OH^0 (-12757) -> No product -At time : 354 ns Reaction : °OH^0 (-9469) + e_aq^-1 (-3272) -> OH^-1 (-14533) -At time : 356 ns Reaction : e_aq^-1 (-4567) + °OH^0 (-6016) -> OH^-1 (-14534) -At time : 357 ns Reaction : °OH^0 (-14525) + °OH^0 (-13997) -> H2O2^0 (-14535) -At time : 357 ns Reaction : OH^-1 (-14467) + H3O^1 (-8219) -> No product -At time : 358 ns Reaction : OH^-1 (-14135) + H3O^1 (-8261) -> No product -At time : 359 ns Reaction : e_aq^-1 (-2137) + e_aq^-1 (-3902) -> OH^-1 (-14536) + OH^-1 (-14537) + H_2^0 (-14538) -At time : 360 ns Reaction : e_aq^-1 (-1232) + °OH^0 (-8840) -> OH^-1 (-14539) -At time : 363 ns Reaction : e_aq^-1 (-5300) + H^0 (-14513) -> OH^-1 (-14540) + H_2^0 (-14541) -At time : 364 ns Reaction : e_aq^-1 (-4718) + H3O^1 (-8598) -> H^0 (-14542) -At time : 365 ns Reaction : H^0 (-10912) + °OH^0 (-6920) -> No product -At time : 367 ns Reaction : H3O^1 (-5817) + e_aq^-1 (-8707) -> H^0 (-14543) -At time : 368 ns Reaction : e_aq^-1 (-4252) + °OH^0 (-8046) -> OH^-1 (-14544) -At time : 370 ns Reaction : e_aq^-1 (-3781) + H^0 (-14482) -> OH^-1 (-14545) + H_2^0 (-14546) -At time : 370 ns Reaction : °OH^0 (-9205) + °OH^0 (-13292) -> H2O2^0 (-14547) -At time : 370 ns Reaction : °OH^0 (-8238) + °OH^0 (-8456) -> H2O2^0 (-14548) -At time : 371 ns Reaction : OH^-1 (-14376) + H3O^1 (-7443) -> No product -At time : 372 ns Reaction : e_aq^-1 (-5413) + H3O^1 (-6153) -> H^0 (-14549) -At time : 373 ns Reaction : H3O^1 (-6069) + OH^-1 (-14017) -> No product -At time : 375 ns Reaction : H3O^1 (-5951) + OH^-1 (-13707) -> No product -At time : 375 ns Reaction : e_aq^-1 (-5701) + H3O^1 (-7291) -> H^0 (-14550) -At time : 376 ns Reaction : OH^-1 (-12781) + H3O^1 (-7367) -> No product -At time : 377 ns Reaction : e_aq^-1 (-3512) + H2O2^0 (-13439) -> OH^-1 (-14551) + °OH^0 (-14552) -At time : 379 ns Reaction : e_aq^-1 (-4488) + °OH^0 (-13591) -> OH^-1 (-14553) -At time : 381 ns Reaction : H3O^1 (-6055) + OH^-1 (-14503) -> No product -At time : 382 ns Reaction : OH^-1 (-14471) + H3O^1 (-7033) -> No product -At time : 382 ns Reaction : H^0 (-13806) + e_aq^-1 (-5442) -> OH^-1 (-14554) + H_2^0 (-14555) -At time : 384 ns Reaction : H3O^1 (-7387) + OH^-1 (-14087) -> No product -At time : 385 ns Reaction : OH^-1 (-14455) + H3O^1 (-7445) -> No product -At time : 386 ns Reaction : e_aq^-1 (-4264) + H2O2^0 (-14425) -> OH^-1 (-14556) + °OH^0 (-14557) -At time : 386 ns Reaction : OH^-1 (-14157) + H3O^1 (-7447) -> No product -At time : 387 ns Reaction : H^0 (-13217) + °OH^0 (-6772) -> No product -At time : 387 ns Reaction : e_aq^-1 (-3786) + °OH^0 (-8763) -> OH^-1 (-14558) -At time : 388 ns Reaction : OH^-1 (-14473) + H3O^1 (-8085) -> No product -At time : 391 ns Reaction : H3O^1 (-10488) + OH^-1 (-13736) -> No product -At time : 393 ns Reaction : H^0 (-9752) + °OH^0 (-6476) -> No product -At time : 396 ns Reaction : e_aq^-1 (-4510) + e_aq^-1 (-4724) -> OH^-1 (-14559) + OH^-1 (-14560) + H_2^0 (-14561) -At time : 398 ns Reaction : e_aq^-1 (-4614) + H2O2^0 (-12105) -> OH^-1 (-14562) + °OH^0 (-14563) -At time : 398 ns Reaction : e_aq^-1 (-4934) + H2O2^0 (-11820) -> OH^-1 (-14564) + °OH^0 (-14565) -At time : 399 ns Reaction : °OH^0 (-14490) + °OH^0 (-12653) -> H2O2^0 (-14566) -At time : 399 ns Reaction : OH^-1 (-14379) + H3O^1 (-8313) -> No product -At time : 400 ns Reaction : H^0 (-9841) + e_aq^-1 (-2496) -> OH^-1 (-14567) + H_2^0 (-14568) -At time : 400 ns Reaction : H^0 (-9164) + °OH^0 (-9453) -> No product -At time : 400 ns Reaction : °OH^0 (-9141) + °OH^0 (-9159) -> H2O2^0 (-14569) -At time : 405 ns Reaction : e_aq^-1 (-498) + H^0 (-13765) -> OH^-1 (-14570) + H_2^0 (-14571) -At time : 406 ns Reaction : H3O^1 (-10757) + OH^-1 (-13763) -> No product -At time : 407 ns Reaction : H3O^1 (-6431) + OH^-1 (-13893) -> No product -At time : 408 ns Reaction : °OH^0 (-12384) + H^0 (-13359) -> No product -At time : 409 ns Reaction : °OH^0 (-6078) + °OH^0 (-8408) -> H2O2^0 (-14572) -At time : 413 ns Reaction : e_aq^-1 (-2159) + H^0 (-9022) -> OH^-1 (-14573) + H_2^0 (-14574) -At time : 418 ns Reaction : OH^-1 (-14518) + H3O^1 (-8868) -> No product -At time : 420 ns Reaction : H^0 (-9748) + °OH^0 (-6516) -> No product -At time : 425 ns Reaction : °OH^0 (-6348) + °OH^0 (-6480) -> H2O2^0 (-14575) -At time : 428 ns Reaction : °OH^0 (-10377) + °OH^0 (-14497) -> H2O2^0 (-14576) -At time : 428 ns Reaction : H^0 (-10437) + °OH^0 (-8194) -> No product -At time : 429 ns Reaction : H3O^1 (-11289) + OH^-1 (-13836) -> No product -At time : 432 ns Reaction : H^0 (-14449) + H^0 (-12218) -> H_2^0 (-14577) -At time : 432 ns Reaction : OH^-1 (-14297) + H3O^1 (-7627) -> No product -At time : 434 ns Reaction : OH^-1 (-14521) + H3O^1 (-6203) -> No product -At time : 434 ns Reaction : e_aq^-1 (-5290) + H2O2^0 (-12064) -> OH^-1 (-14578) + °OH^0 (-14579) -At time : 436 ns Reaction : H^0 (-13394) + °OH^0 (-13417) -> No product -At time : 436 ns Reaction : °OH^0 (-5778) + °OH^0 (-7852) -> H2O2^0 (-14580) -At time : 436 ns Reaction : e_aq^-1 (-2757) + e_aq^-1 (-3625) -> OH^-1 (-14581) + OH^-1 (-14582) + H_2^0 (-14583) -At time : 437 ns Reaction : H3O^1 (-10979) + OH^-1 (-14562) -> No product -At time : 438 ns Reaction : OH^-1 (-14373) + H3O^1 (-6419) -> No product -At time : 439 ns Reaction : H3O^1 (-6107) + OH^-1 (-14384) -> No product -At time : 443 ns Reaction : H3O^1 (-7489) + OH^-1 (-14022) -> No product -At time : 443 ns Reaction : H2O2^0 (-11597) + e_aq^-1 (-4723) -> OH^-1 (-14584) + °OH^0 (-14585) -At time : 449 ns Reaction : °OH^0 (-6270) + °OH^0 (-6434) -> H2O2^0 (-14586) -At time : 450 ns Reaction : H2O2^0 (-13352) + e_aq^-1 (-2547) -> OH^-1 (-14587) + °OH^0 (-14588) -At time : 452 ns Reaction : °OH^0 (-9657) + °OH^0 (-13801) -> H2O2^0 (-14589) -At time : 453 ns Reaction : e_aq^-1 (-4889) + H3O^1 (-7121) -> H^0 (-14590) -At time : 455 ns Reaction : H2O2^0 (-11416) + e_aq^-1 (-3648) -> OH^-1 (-14591) + °OH^0 (-14592) -At time : 455 ns Reaction : H^0 (-9549) + °OH^0 (-7698) -> No product -At time : 456 ns Reaction : H3O^1 (-7659) + OH^-1 (-14516) -> No product -At time : 456 ns Reaction : °OH^0 (-6918) + °OH^0 (-8034) -> H2O2^0 (-14593) -At time : 456 ns Reaction : °OH^0 (-6690) + °OH^0 (-7654) -> H2O2^0 (-14594) -At time : 457 ns Reaction : H^0 (-11360) + e_aq^-1 (-4808) -> OH^-1 (-14595) + H_2^0 (-14596) -At time : 458 ns Reaction : e_aq^-1 (-5566) + e_aq^-1 (-5141) -> OH^-1 (-14597) + OH^-1 (-14598) + H_2^0 (-14599) -At time : 463 ns Reaction : OH^-1 (-13468) + H3O^1 (-6389) -> No product -At time : 465 ns Reaction : H3O^1 (-6631) + OH^-1 (-14567) -> No product -At time : 466 ns Reaction : °OH^0 (-6504) + °OH^0 (-6510) -> H2O2^0 (-14600) -At time : 467 ns Reaction : OH^-1 (-14330) + H3O^1 (-7053) -> No product -At time : 471 ns Reaction : °OH^0 (-10834) + H^0 (-12368) -> No product -At time : 473 ns Reaction : °OH^0 (-14088) + °OH^0 (-8632) -> H2O2^0 (-14601) -At time : 474 ns Reaction : e_aq^-1 (-1457) + °OH^0 (-6892) -> OH^-1 (-14602) -At time : 484 ns Reaction : H^0 (-13926) + °OH^0 (-8612) -> No product -At time : 485 ns Reaction : °OH^0 (-7044) + °OH^0 (-8208) -> H2O2^0 (-14603) -At time : 485 ns Reaction : e_aq^-1 (-5212) + H3O^1 (-6041) -> H^0 (-14604) -At time : 486 ns Reaction : e_aq^-1 (-2637) + H3O^1 (-6379) -> H^0 (-14605) -At time : 489 ns Reaction : e_aq^-1 (-2151) + H3O^1 (-6007) -> H^0 (-14606) -At time : 490 ns Reaction : °OH^0 (-14232) + H^0 (-14453) -> No product -At time : 499 ns Reaction : e_aq^-1 (-4873) + °OH^0 (-8393) -> OH^-1 (-14607) -At time : 502 ns Reaction : H3O^1 (-6663) + OH^-1 (-14427) -> No product -At time : 504 ns Reaction : e_aq^-1 (-4076) + H3O^1 (-6709) -> H^0 (-14608) -At time : 505 ns Reaction : OH^-1 (-14607) + H3O^1 (-8101) -> No product -At time : 505 ns Reaction : OH^-1 (-14591) + H3O^1 (-8748) -> No product -At time : 505 ns Reaction : e_aq^-1 (-5264) + °OH^0 (-8262) -> OH^-1 (-14609) -At time : 507 ns Reaction : H3O^1 (-7287) + OH^-1 (-14357) -> No product -At time : 510 ns Reaction : H2O2^0 (-11426) + e_aq^-1 (-1826) -> OH^-1 (-14610) + °OH^0 (-14611) -At time : 515 ns Reaction : OH^-1 (-14271) + H3O^1 (-8059) -> No product -At time : 525 ns Reaction : H^0 (-13512) + °OH^0 (-8142) -> No product -At time : 526 ns Reaction : H3O^1 (-11155) + OH^-1 (-14388) -> No product -At time : 526 ns Reaction : °OH^0 (-13956) + H^0 (-12777) -> No product -At time : 532 ns Reaction : H3O^1 (-6739) + OH^-1 (-14407) -> No product -At time : 533 ns Reaction : e_aq^-1 (-899) + H3O^1 (-7151) -> H^0 (-14612) -At time : 535 ns Reaction : H3O^1 (-6301) + OH^-1 (-13774) -> No product -At time : 538 ns Reaction : H^0 (-14295) + °OH^0 (-5958) -> No product -At time : 540 ns Reaction : OH^-1 (-14528) + H3O^1 (-6687) -> No product -At time : 541 ns Reaction : e_aq^-1 (-5065) + e_aq^-1 (-5028) -> OH^-1 (-14613) + OH^-1 (-14614) + H_2^0 (-14615) -At time : 544 ns Reaction : °OH^0 (-7664) + °OH^0 (-7836) -> H2O2^0 (-14616) -At time : 545 ns Reaction : °OH^0 (-9328) + °OH^0 (-6116) -> H2O2^0 (-14617) -At time : 546 ns Reaction : H^0 (-14432) + °OH^0 (-14611) -> No product -At time : 546 ns Reaction : H2O2^0 (-14383) + e_aq^-1 (-4868) -> OH^-1 (-14618) + °OH^0 (-14619) -At time : 559 ns Reaction : e_aq^-1 (-2281) + H3O^1 (-7823) -> H^0 (-14620) -At time : 561 ns Reaction : OH^-1 (-14276) + H3O^1 (-7523) -> No product -At time : 563 ns Reaction : °OH^0 (-13827) + H^0 (-13515) -> No product -At time : 569.29 ns Reaction : OH^-1 (-14079) + H3O^1 (-8073) -> No product -At time : 569.29 ns Reaction : e_aq^-1 (-1487) + H2O2^0 (-13500) -> OH^-1 (-14621) + °OH^0 (-14622) -At time : 570.29 ns Reaction : H^0 (-13572) + H^0 (-14263) -> H_2^0 (-14623) -At time : 570.29 ns Reaction : H^0 (-10764) + H^0 (-12879) -> H_2^0 (-14624) -At time : 571.29 ns Reaction : H3O^1 (-11087) + OH^-1 (-14124) -> No product -At time : 572.29 ns Reaction : °OH^0 (-13182) + H^0 (-14608) -> No product -At time : 573.29 ns Reaction : OH^-1 (-13998) + H3O^1 (-8436) -> No product -At time : 577.29 ns Reaction : H3O^1 (-11127) + OH^-1 (-14221) -> No product -At time : 578.29 ns Reaction : OH^-1 (-12826) + H3O^1 (-6415) -> No product -At time : 580.29 ns Reaction : e_aq^-1 (-4292) + °OH^0 (-6668) -> OH^-1 (-14625) -At time : 582.29 ns Reaction : e_aq^-1 (-4115) + H2O2^0 (-11978) -> OH^-1 (-14626) + °OH^0 (-14627) -At time : 583.29 ns Reaction : °OH^0 (-11075) + H^0 (-13077) -> No product -At time : 583.29 ns Reaction : H2O2^0 (-11614) + e_aq^-1 (-2437) -> OH^-1 (-14628) + °OH^0 (-14629) -At time : 585.29 ns Reaction : H2O2^0 (-11397) + e_aq^-1 (-1211) -> OH^-1 (-14630) + °OH^0 (-14631) -At time : 586.29 ns Reaction : H^0 (-14398) + H^0 (-12559) -> H_2^0 (-14632) -At time : 586.29 ns Reaction : e_aq^-1 (-5423) + H2O2^0 (-11995) -> OH^-1 (-14633) + °OH^0 (-14634) -At time : 591.29 ns Reaction : H3O^1 (-6781) + OH^-1 (-14433) -> No product -At time : 599.29 ns Reaction : e_aq^-1 (-4472) + °OH^0 (-13917) -> OH^-1 (-14635) -At time : 603.29 ns Reaction : H3O^1 (-7097) + OH^-1 (-14062) -> No product -At time : 605.29 ns Reaction : °OH^0 (-10859) + °OH^0 (-6880) -> H2O2^0 (-14636) -At time : 610.29 ns Reaction : H3O^1 (-6869) + OH^-1 (-12495) -> No product -At time : 611.29 ns Reaction : OH^-1 (-13641) + H3O^1 (-7125) -> No product -At time : 611.29 ns Reaction : H^0 (-12367) + °OH^0 (-8345) -> No product -At time : 613.29 ns Reaction : °OH^0 (-10820) + H^0 (-14335) -> No product -At time : 614.29 ns Reaction : OH^-1 (-14266) + H3O^1 (-8880) -> No product -At time : 615.29 ns Reaction : e_aq^-1 (-4077) + H2O2^0 (-11552) -> OH^-1 (-14637) + °OH^0 (-14638) -At time : 616.29 ns Reaction : OH^-1 (-14485) + H3O^1 (-6905) -> No product -At time : 622.29 ns Reaction : e_aq^-1 (-3549) + H^0 (-12651) -> OH^-1 (-14639) + H_2^0 (-14640) -At time : 622.29 ns Reaction : e_aq^-1 (-4847) + °OH^0 (-10408) -> OH^-1 (-14641) -At time : 633.29 ns Reaction : H2O2^0 (-12267) + e_aq^-1 (-4389) -> OH^-1 (-14642) + °OH^0 (-14643) -At time : 639.29 ns Reaction : H3O^1 (-10104) + OH^-1 (-14560) -> No product -At time : 640.29 ns Reaction : H3O^1 (-9417) + OH^-1 (-14602) -> No product -At time : 641.29 ns Reaction : H2O2^0 (-14016) + e_aq^-1 (-3550) -> OH^-1 (-14644) + °OH^0 (-14645) -At time : 646.29 ns Reaction : °OH^0 (-5748) + °OH^0 (-13623) -> H2O2^0 (-14646) -At time : 646.29 ns Reaction : H2O2^0 (-12926) + e_aq^-1 (-3500) -> OH^-1 (-14647) + °OH^0 (-14648) -At time : 646.29 ns Reaction : °OH^0 (-9975) + °OH^0 (-10034) -> H2O2^0 (-14649) -At time : 647.29 ns Reaction : OH^-1 (-14235) + H3O^1 (-9562) -> No product -At time : 648.29 ns Reaction : H3O^1 (-5959) + OH^-1 (-13592) -> No product -At time : 657.29 ns Reaction : H2O2^0 (-14419) + e_aq^-1 (-3706) -> OH^-1 (-14650) + °OH^0 (-14651) -At time : 669.29 ns Reaction : °OH^0 (-13728) + H^0 (-8960) -> No product -At time : 674.29 ns Reaction : H^0 (-9507) + H^0 (-13639) -> H_2^0 (-14652) -At time : 675.29 ns Reaction : °OH^0 (-10648) + e_aq^-1 (-2706) -> OH^-1 (-14653) -At time : 676.29 ns Reaction : °OH^0 (-9703) + °OH^0 (-13954) -> H2O2^0 (-14654) -At time : 677.29 ns Reaction : OH^-1 (-14349) + H3O^1 (-7773) -> No product -At time : 678.29 ns Reaction : °OH^0 (-14058) + °OH^0 (-7810) -> H2O2^0 (-14655) -At time : 685.29 ns Reaction : e_aq^-1 (-2314) + °OH^0 (-6670) -> OH^-1 (-14656) -At time : 685.29 ns Reaction : e_aq^-1 (-2123) + H3O^1 (-6513) -> H^0 (-14657) -At time : 687.29 ns Reaction : H3O^1 (-6167) + OH^-1 (-14414) -> No product -At time : 689.29 ns Reaction : °OH^0 (-14072) + H^0 (-13906) -> No product -At time : 691.29 ns Reaction : °OH^0 (-9476) + °OH^0 (-7674) -> H2O2^0 (-14658) -At time : 695.29 ns Reaction : H3O^1 (-11072) + OH^-1 (-14509) -> No product -At time : 696.29 ns Reaction : e_aq^-1 (-3451) + H^0 (-13875) -> OH^-1 (-14659) + H_2^0 (-14660) -At time : 698.29 ns Reaction : e_aq^-1 (-384) + H3O^1 (-9347) -> H^0 (-14661) -At time : 700.29 ns Reaction : e_aq^-1 (-561) + °OH^0 (-13364) -> OH^-1 (-14662) -At time : 703.29 ns Reaction : e_aq^-1 (-1755) + H3O^1 (-6019) -> H^0 (-14663) -At time : 703.29 ns Reaction : e_aq^-1 (-12) + H3O^1 (-5865) -> H^0 (-14664) -At time : 705.29 ns Reaction : e_aq^-1 (-5231) + H2O2^0 (-13433) -> OH^-1 (-14665) + °OH^0 (-14666) -At time : 721.29 ns Reaction : H^0 (-12974) + H^0 (-13819) -> H_2^0 (-14667) -At time : 721.29 ns Reaction : e_aq^-1 (-4800) + °OH^0 (-8516) -> OH^-1 (-14668) -At time : 731.29 ns Reaction : OH^-1 (-14570) + H3O^1 (-6157) -> No product -At time : 738.29 ns Reaction : °OH^0 (-6998) + °OH^0 (-7034) -> H2O2^0 (-14669) -At time : 739.29 ns Reaction : e_aq^-1 (-2713) + H2O2^0 (-11543) -> OH^-1 (-14670) + °OH^0 (-14671) -At time : 739.29 ns Reaction : °OH^0 (-9404) + °OH^0 (-6106) -> H2O2^0 (-14672) -At time : 740.29 ns Reaction : H3O^1 (-6667) + OH^-1 (-14637) -> No product -At time : 743.29 ns Reaction : e_aq^-1 (-810) + H3O^1 (-6937) -> H^0 (-14673) -At time : 745.29 ns Reaction : e_aq^-1 (-4515) + H^0 (-9424) -> OH^-1 (-14674) + H_2^0 (-14675) -At time : 750.29 ns Reaction : OH^-1 (-14556) + H3O^1 (-7979) -> No product -At time : 761.29 ns Reaction : OH^-1 (-14524) + H3O^1 (-8373) -> No product -At time : 766.29 ns Reaction : e_aq^-1 (-4026) + H2O2^0 (-12138) -> OH^-1 (-14676) + °OH^0 (-14677) -At time : 771.29 ns Reaction : e_aq^-1 (-1991) + H2O2^0 (-11528) -> OH^-1 (-14678) + °OH^0 (-14679) -At time : 772.29 ns Reaction : e_aq^-1 (-3602) + °OH^0 (-7732) -> OH^-1 (-14680) -At time : 775.29 ns Reaction : H3O^1 (-7305) + OH^-1 (-13887) -> No product -At time : 781.29 ns Reaction : H^0 (-14408) + °OH^0 (-14557) -> No product -At time : 787.29 ns Reaction : e_aq^-1 (-842) + H3O^1 (-8137) -> H^0 (-14681) -At time : 789.29 ns Reaction : H3O^1 (-5893) + OH^-1 (-14680) -> No product -At time : 799.29 ns Reaction : OH^-1 (-14233) + H3O^1 (-8043) -> No product -At time : 803.29 ns Reaction : H2O2^0 (-14390) + e_aq^-1 (-8587) -> OH^-1 (-14682) + °OH^0 (-14683) -At time : 805.29 ns Reaction : H3O^1 (-10407) + OH^-1 (-13543) -> No product -At time : 806.29 ns Reaction : OH^-1 (-13565) + H3O^1 (-9731) -> No product -At time : 813.29 ns Reaction : OH^-1 (-12795) + H3O^1 (-6397) -> No product -At time : 815.29 ns Reaction : H3O^1 (-6049) + OH^-1 (-14540) -> No product -At time : 816.29 ns Reaction : °OH^0 (-11336) + H^0 (-14502) -> No product -At time : 821.29 ns Reaction : °OH^0 (-6128) + °OH^0 (-13675) -> H2O2^0 (-14684) -At time : 828.29 ns Reaction : H3O^1 (-6931) + OH^-1 (-14628) -> No product -At time : 840.95 ns Reaction : OH^-1 (-14151) + H3O^1 (-7263) -> No product -At time : 842.95 ns Reaction : OH^-1 (-14139) + H3O^1 (-6789) -> No product -At time : 858.95 ns Reaction : OH^-1 (-14531) + H3O^1 (-6185) -> No product -At time : 862.95 ns Reaction : OH^-1 (-14397) + H3O^1 (-8227) -> No product -At time : 862.95 ns Reaction : °OH^0 (-13210) + °OH^0 (-7876) -> H2O2^0 (-14685) -At time : 864.95 ns Reaction : e_aq^-1 (-1865) + e_aq^-1 (-4118) -> OH^-1 (-14686) + OH^-1 (-14687) + H_2^0 (-14688) -At time : 877.95 ns Reaction : H^0 (-12534) + °OH^0 (-8126) -> No product -At time : 879.95 ns Reaction : H3O^1 (-7283) + OH^-1 (-14595) -> No product -At time : 882.95 ns Reaction : e_aq^-1 (-3922) + e_aq^-1 (-3628) -> OH^-1 (-14689) + OH^-1 (-14690) + H_2^0 (-14691) -At time : 886.95 ns Reaction : OH^-1 (-14073) + H3O^1 (-8826) -> No product -At time : 887.95 ns Reaction : e_aq^-1 (-4703) + H2O2^0 (-11630) -> OH^-1 (-14692) + °OH^0 (-14693) -At time : 893.95 ns Reaction : H^0 (-12775) + °OH^0 (-6676) -> No product -At time : 896.95 ns Reaction : H^0 (-12984) + °OH^0 (-8426) -> No product -At time : 898.95 ns Reaction : e_aq^-1 (-298) + H2O2^0 (-11819) -> OH^-1 (-14694) + °OH^0 (-14695) -At time : 908.95 ns Reaction : e_aq^-1 (-4965) + H2O2^0 (-12481) -> OH^-1 (-14696) + °OH^0 (-14697) -At time : 910.95 ns Reaction : H^0 (-14065) + °OH^0 (-7078) -> No product -At time : 920.95 ns Reaction : H3O^1 (-10977) + OH^-1 (-14469) -> No product -At time : 926.95 ns Reaction : H3O^1 (-6987) + OH^-1 (-13650) -> No product -At time : 929.95 ns Reaction : e_aq^-1 (-4755) + e_aq^-1 (-4349) -> OH^-1 (-14698) + OH^-1 (-14699) + H_2^0 (-14700) -At time : 944.95 ns Reaction : °OH^0 (-11291) + °OH^0 (-14056) -> H2O2^0 (-14701) -At time : 946.95 ns Reaction : OH^-1 (-13888) + H3O^1 (-7779) -> No product -At time : 960.95 ns Reaction : °OH^0 (-5822) + °OH^0 (-7726) -> H2O2^0 (-14702) -At time : 964.95 ns Reaction : H^0 (-10677) + °OH^0 (-9545) -> No product -At time : 968.95 ns Reaction : OH^-1 (-13996) + H3O^1 (-8157) -> No product -At time : 970.95 ns Reaction : H3O^1 (-6609) + OH^-1 (-14159) -> No product -At time : 972.95 ns Reaction : H3O^1 (-9535) + OH^-1 (-13630) -> No product -At time : 972.95 ns Reaction : e_aq^-1 (-2999) + H3O^1 (-6279) -> H^0 (-14703) -At time : 974.95 ns Reaction : H3O^1 (-9830) + OH^-1 (-14334) -> No product -At time : 974.95 ns Reaction : OH^-1 (-14167) + H3O^1 (-6527) -> No product -At time : 975.95 ns Reaction : °OH^0 (-9879) + °OH^0 (-8971) -> H2O2^0 (-14704) -At time : 979.95 ns Reaction : °OH^0 (-5990) + °OH^0 (-8100) -> H2O2^0 (-14705) -At time : 999.97 ns Reaction : OH^-1 (-14386) + H3O^1 (-5967) -> No product +At time : 1 ps Reaction : °OH^0 (-11371) + °OH^0 (-9439) -> H2O2^0 (-11421) +At time : 1 ps Reaction : °OH^0 (-10063) + °OH^0 (-11369) -> H2O2^0 (-11422) +At time : 1 ps Reaction : H3O^1 (-11357) + OH^-1 (-5793) -> No product +At time : 1 ps Reaction : °OH^0 (-11355) + °OH^0 (-9204) -> H2O2^0 (-11423) +At time : 1 ps Reaction : °OH^0 (-9748) + °OH^0 (-11346) -> H2O2^0 (-11424) +At time : 1 ps Reaction : °OH^0 (-9568) + °OH^0 (-11340) -> H2O2^0 (-11425) +At time : 1 ps Reaction : °OH^0 (-10058) + °OH^0 (-11328) -> H2O2^0 (-11426) +At time : 1 ps Reaction : °OH^0 (-6130) + °OH^0 (-11310) -> H2O2^0 (-11427) +At time : 1 ps Reaction : °OH^0 (-11304) + °OH^0 (-10333) -> H2O2^0 (-11428) +At time : 1 ps Reaction : °OH^0 (-11126) + °OH^0 (-10226) -> H2O2^0 (-11429) +At time : 1 ps Reaction : °OH^0 (-11100) + °OH^0 (-10201) -> H2O2^0 (-11430) +At time : 1 ps Reaction : °OH^0 (-11011) + °OH^0 (-10086) -> H2O2^0 (-11431) +At time : 1 ps Reaction : H^0 (-11003) + °OH^0 (-11002) -> No product +At time : 1 ps Reaction : H3O^1 (-10923) + OH^-1 (-5745) -> No product +At time : 1 ps Reaction : °OH^0 (-10751) + °OH^0 (-9650) -> H2O2^0 (-11432) +At time : 1 ps Reaction : °OH^0 (-9318) + °OH^0 (-10693) -> H2O2^0 (-11433) +At time : 1 ps Reaction : °OH^0 (-10682) + °OH^0 (-9554) -> H2O2^0 (-11434) +At time : 1 ps Reaction : H3O^1 (-10621) + OH^-1 (-5805) -> No product +At time : 1 ps Reaction : °OH^0 (-10531) + e_aq^-1 (-8825) -> OH^-1 (-11435) +At time : 1 ps Reaction : H3O^1 (-10402) + OH^-1 (-5715) -> No product +At time : 1 ps Reaction : °OH^0 (-10352) + °OH^0 (-10354) -> H2O2^0 (-11436) +At time : 1 ps Reaction : H^0 (-10328) + °OH^0 (-7330) -> No product +At time : 1 ps Reaction : °OH^0 (-10261) + °OH^0 (-10262) -> H2O2^0 (-11437) +At time : 1 ps Reaction : H^0 (-10221) + °OH^0 (-6090) -> No product +At time : 1 ps Reaction : °OH^0 (-10195) + °OH^0 (-9451) -> H2O2^0 (-11438) +At time : 1 ps Reaction : H^0 (-10147) + H^0 (-9137) -> H_2^0 (-11439) +At time : 1 ps Reaction : °OH^0 (-10099) + °OH^0 (-10100) -> H2O2^0 (-11440) +At time : 1 ps Reaction : °OH^0 (-10050) + °OH^0 (-10048) -> H2O2^0 (-11441) +At time : 1 ps Reaction : °OH^0 (-9997) + e_aq^-1 (-4381) -> OH^-1 (-11442) +At time : 1 ps Reaction : °OH^0 (-9982) + °OH^0 (-9980) -> H2O2^0 (-11443) +At time : 1 ps Reaction : H3O^1 (-9877) + OH^-1 (-5781) -> No product +At time : 1 ps Reaction : °OH^0 (-9841) + °OH^0 (-9839) -> H2O2^0 (-11444) +At time : 1 ps Reaction : °OH^0 (-9738) + °OH^0 (-9178) -> H2O2^0 (-11445) +At time : 1 ps Reaction : °OH^0 (-9474) + °OH^0 (-8800) -> H2O2^0 (-11446) +At time : 1 ps Reaction : °OH^0 (-9427) + °OH^0 (-9220) -> H2O2^0 (-11447) +At time : 1 ps Reaction : °OH^0 (-9351) + °OH^0 (-9176) -> H2O2^0 (-11448) +At time : 1 ps Reaction : °OH^0 (-9302) + e_aq^-1 (-3445) -> OH^-1 (-11449) +At time : 1 ps Reaction : °OH^0 (-9294) + °OH^0 (-9296) -> H2O2^0 (-11450) +At time : 1 ps Reaction : °OH^0 (-5952) + H^0 (-9159) -> No product +At time : 1 ps Reaction : °OH^0 (-7280) + °OH^0 (-9088) -> H2O2^0 (-11451) +At time : 1 ps Reaction : OH^-1 (-5808) + H3O^1 (-9070) -> No product +At time : 1 ps Reaction : e_aq^-1 (-8717) + °OH^0 (-9021) -> OH^-1 (-11452) +At time : 1 ps Reaction : °OH^0 (-8272) + e_aq^-1 (-8597) -> OH^-1 (-11453) +At time : 1 ps Reaction : °OH^0 (-8520) + e_aq^-1 (-8522) -> OH^-1 (-11454) +At time : 1 ps Reaction : OH^-1 (-5733) + H3O^1 (-8135) -> No product +At time : 1 ps Reaction : e_aq^-1 (-4971) + °OH^0 (-7580) -> OH^-1 (-11455) +At time : 1 ps Reaction : OH^-1 (-5721) + H3O^1 (-7479) -> No product +At time : 1 ps Reaction : °OH^0 (-6138) + °OH^0 (-7424) -> H2O2^0 (-11456) +At time : 1 ps Reaction : e_aq^-1 (-4670) + °OH^0 (-7050) -> OH^-1 (-11457) +At time : 1 ps Reaction : OH^-1 (-5769) + H3O^1 (-6481) -> No product +At time : 1 ps Reaction : OH^-1 (-11457) + H3O^1 (-7049) -> No product +At time : 1 ps Reaction : OH^-1 (-11455) + H3O^1 (-7579) -> No product +At time : 1 ps Reaction : OH^-1 (-11454) + H3O^1 (-8521) -> No product +At time : 1 ps Reaction : OH^-1 (-11453) + H3O^1 (-8271) -> No product +At time : 1 ps Reaction : OH^-1 (-11452) + H3O^1 (-9022) -> No product +At time : 1 ps Reaction : OH^-1 (-11442) + H3O^1 (-9996) -> No product +At time : 1.1 ps Reaction : °OH^0 (-11287) + °OH^0 (-10925) -> H2O2^0 (-11458) +At time : 1.1 ps Reaction : °OH^0 (-10981) + °OH^0 (-10039) -> H2O2^0 (-11459) +At time : 1.1 ps Reaction : H^0 (-10662) + °OH^0 (-10661) -> No product +At time : 1.1 ps Reaction : °OH^0 (-10526) + °OH^0 (-7566) -> H2O2^0 (-11460) +At time : 1.1 ps Reaction : H^0 (-10373) + °OH^0 (-6150) -> No product +At time : 1.1 ps Reaction : °OH^0 (-10142) + °OH^0 (-9234) -> H2O2^0 (-11461) +At time : 1.1 ps Reaction : H^0 (-10077) + °OH^0 (-9438) -> No product +At time : 1.1 ps Reaction : °OH^0 (-9406) + °OH^0 (-9956) -> H2O2^0 (-11462) +At time : 1.1 ps Reaction : °OH^0 (-9823) + °OH^0 (-6688) -> H2O2^0 (-11463) +At time : 1.1 ps Reaction : OH^-1 (-5754) + H3O^1 (-6869) -> No product +At time : 1.2 ps Reaction : °OH^0 (-9783) + °OH^0 (-11336) -> H2O2^0 (-11464) +At time : 1.2 ps Reaction : °OH^0 (-10702) + °OH^0 (-10704) -> H2O2^0 (-11465) +At time : 1.2 ps Reaction : °OH^0 (-8589) + e_aq^-1 (-8591) -> OH^-1 (-11466) +At time : 1.2 ps Reaction : OH^-1 (-11466) + H3O^1 (-7011) -> No product +At time : 1.2 ps Reaction : °OH^0 (-10623) + °OH^0 (-9966) -> H2O2^0 (-11467) +At time : 1.3 ps Reaction : OH^-1 (-11449) + H3O^1 (-5889) -> No product +At time : 1.3 ps Reaction : °OH^0 (-10317) + e_aq^-1 (-9098) -> OH^-1 (-11468) +At time : 1.3 ps Reaction : °OH^0 (-10280) + °OH^0 (-9462) -> H2O2^0 (-11469) +At time : 1.3 ps Reaction : °OH^0 (-10076) + °OH^0 (-10081) -> H2O2^0 (-11470) +At time : 1.3 ps Reaction : °OH^0 (-10061) + °OH^0 (-10056) -> H2O2^0 (-11471) +At time : 1.3 ps Reaction : OH^-1 (-11468) + H3O^1 (-6171) -> No product +At time : 1.4 ps Reaction : °OH^0 (-10804) + °OH^0 (-7934) -> H2O2^0 (-11472) +At time : 1.4 ps Reaction : °OH^0 (-10771) + °OH^0 (-10775) -> H2O2^0 (-11473) +At time : 1.4 ps Reaction : °OH^0 (-9614) + °OH^0 (-9612) -> H2O2^0 (-11474) +At time : 1.4 ps Reaction : OH^-1 (-5802) + H3O^1 (-6015) -> No product +At time : 1.5 ps Reaction : °OH^0 (-11277) + °OH^0 (-9186) -> H2O2^0 (-11475) +At time : 1.5 ps Reaction : °OH^0 (-11187) + °OH^0 (-8408) -> H2O2^0 (-11476) +At time : 1.5 ps Reaction : °OH^0 (-9435) + °OH^0 (-10984) -> H2O2^0 (-11477) +At time : 1.5 ps Reaction : °OH^0 (-9417) + °OH^0 (-10010) -> H2O2^0 (-11478) +At time : 1.5 ps Reaction : °OH^0 (-7166) + e_aq^-1 (-8630) -> OH^-1 (-11479) +At time : 1.5 ps Reaction : OH^-1 (-11479) + H3O^1 (-7165) -> No product +At time : 1.6 ps Reaction : H^0 (-10928) + °OH^0 (-6038) -> No product +At time : 1.6 ps Reaction : °OH^0 (-10173) + °OH^0 (-9236) -> H2O2^0 (-11480) +At time : 1.6 ps Reaction : °OH^0 (-9776) + °OH^0 (-6610) -> H2O2^0 (-11481) +At time : 1.6 ps Reaction : °OH^0 (-9307) + °OH^0 (-9308) -> H2O2^0 (-11482) +At time : 1.7 ps Reaction : H^0 (-10827) + °OH^0 (-10828) -> No product +At time : 1.8 ps Reaction : °OH^0 (-9835) + °OH^0 (-11351) -> H2O2^0 (-11483) +At time : 1.8 ps Reaction : °OH^0 (-11319) + °OH^0 (-11320) -> H2O2^0 (-11484) +At time : 1.8 ps Reaction : °OH^0 (-10934) + °OH^0 (-10932) -> H2O2^0 (-11485) +At time : 1.8 ps Reaction : °OH^0 (-10506) + °OH^0 (-10271) -> H2O2^0 (-11486) +At time : 1.8 ps Reaction : H^0 (-10236) + °OH^0 (-7230) -> No product +At time : 1.8 ps Reaction : °OH^0 (-10158) + °OH^0 (-10160) -> H2O2^0 (-11487) +At time : 1.8 ps Reaction : °OH^0 (-7614) + e_aq^-1 (-8594) -> OH^-1 (-11488) +At time : 1.8 ps Reaction : °OH^0 (-7234) + °OH^0 (-8336) -> H2O2^0 (-11489) +At time : 1.8 ps Reaction : OH^-1 (-11488) + H3O^1 (-7613) -> No product +At time : 1.9 ps Reaction : H^0 (-11174) + H^0 (-9467) -> H_2^0 (-11490) +At time : 1.9 ps Reaction : °OH^0 (-9268) + °OH^0 (-9332) -> H2O2^0 (-11491) +At time : 2 ps Reaction : °OH^0 (-9433) + °OH^0 (-10961) -> H2O2^0 (-11492) +At time : 2 ps Reaction : °OH^0 (-8860) + °OH^0 (-8861) -> H2O2^0 (-11493) +At time : 2.2 ps Reaction : °OH^0 (-5912) + °OH^0 (-9164) -> H2O2^0 (-11494) +At time : 2.4 ps Reaction : °OH^0 (-10303) + °OH^0 (-10307) -> H2O2^0 (-11495) +At time : 2.4 ps Reaction : °OH^0 (-10177) + H^0 (-10180) -> No product +At time : 2.4 ps Reaction : °OH^0 (-9939) + H^0 (-9399) -> No product +At time : 2.4 ps Reaction : °OH^0 (-9791) + °OH^0 (-9188) -> H2O2^0 (-11496) +At time : 2.4 ps Reaction : °OH^0 (-8198) + °OH^0 (-8200) -> H2O2^0 (-11497) +At time : 2.4 ps Reaction : °OH^0 (-6004) + °OH^0 (-8032) -> H2O2^0 (-11498) +At time : 2.5 ps Reaction : °OH^0 (-10339) + °OH^0 (-10341) -> H2O2^0 (-11499) +At time : 2.6 ps Reaction : °OH^0 (-11147) + °OH^0 (-11151) -> H2O2^0 (-11500) +At time : 2.6 ps Reaction : °OH^0 (-10552) + °OH^0 (-10207) -> H2O2^0 (-11501) +At time : 2.7 ps Reaction : °OH^0 (-6904) + °OH^0 (-6906) -> H2O2^0 (-11502) +At time : 2.8 ps Reaction : °OH^0 (-10909) + °OH^0 (-6886) -> H2O2^0 (-11503) +At time : 2.9 ps Reaction : °OH^0 (-11227) + °OH^0 (-11230) -> H2O2^0 (-11504) +At time : 2.9 ps Reaction : °OH^0 (-6656) + °OH^0 (-9156) -> H2O2^0 (-11505) +At time : 3 ps Reaction : °OH^0 (-11076) + °OH^0 (-11075) -> H2O2^0 (-11506) +At time : 3 ps Reaction : °OH^0 (-7698) + e_aq^-1 (-8708) -> OH^-1 (-11507) +At time : 3 ps Reaction : OH^-1 (-11507) + H3O^1 (-7697) -> No product +At time : 3.1 ps Reaction : °OH^0 (-9760) + °OH^0 (-10806) -> H2O2^0 (-11508) +At time : 3.1 ps Reaction : °OH^0 (-10311) + H^0 (-10312) -> No product +At time : 3.2 ps Reaction : °OH^0 (-11246) + °OH^0 (-10397) -> H2O2^0 (-11509) +At time : 3.3 ps Reaction : °OH^0 (-9091) + °OH^0 (-9092) -> H2O2^0 (-11510) +At time : 3.3 ps Reaction : e_aq^-1 (-9053) + °OH^0 (-9054) -> OH^-1 (-11511) +At time : 3.3 ps Reaction : OH^-1 (-11511) + H3O^1 (-9055) -> No product +At time : 3.4 ps Reaction : °OH^0 (-10171) + °OH^0 (-11298) -> H2O2^0 (-11512) +At time : 3.4 ps Reaction : °OH^0 (-10007) + °OH^0 (-6040) -> H2O2^0 (-11513) +At time : 3.4 ps Reaction : H^0 (-9647) + °OH^0 (-9646) -> No product +At time : 3.4 ps Reaction : °OH^0 (-9174) + H^0 (-9175) -> No product +At time : 3.4 ps Reaction : °OH^0 (-7164) + °OH^0 (-8274) -> H2O2^0 (-11514) +At time : 3.7 ps Reaction : °OH^0 (-11223) + °OH^0 (-7374) -> H2O2^0 (-11515) +At time : 3.7 ps Reaction : H^0 (-9858) + °OH^0 (-10836) -> No product +At time : 3.7 ps Reaction : °OH^0 (-9903) + °OH^0 (-9902) -> H2O2^0 (-11516) +At time : 3.7 ps Reaction : °OH^0 (-9750) + °OH^0 (-5966) -> H2O2^0 (-11517) +At time : 3.7 ps Reaction : OH^-1 (-5775) + H3O^1 (-7749) -> No product +At time : 3.8 ps Reaction : °OH^0 (-10606) + e_aq^-1 (-4406) -> OH^-1 (-11518) +At time : 3.8 ps Reaction : °OH^0 (-10514) + °OH^0 (-7546) -> H2O2^0 (-11519) +At time : 3.9 ps Reaction : °OH^0 (-11272) + °OH^0 (-11271) -> H2O2^0 (-11520) +At time : 3.9 ps Reaction : °OH^0 (-10385) + °OH^0 (-7460) -> H2O2^0 (-11521) +At time : 3.9 ps Reaction : H^0 (-9594) + °OH^0 (-9592) -> No product +At time : 4 ps Reaction : °OH^0 (-10110) + °OH^0 (-7044) -> H2O2^0 (-11522) +At time : 4.2 ps Reaction : °OH^0 (-10380) + °OH^0 (-11415) -> H2O2^0 (-11523) +At time : 4.2 ps Reaction : °OH^0 (-9313) + °OH^0 (-9314) -> H2O2^0 (-11524) +At time : 4.3 ps Reaction : °OH^0 (-9310) + e_aq^-1 (-3459) -> OH^-1 (-11525) +At time : 4.3 ps Reaction : e_aq^-1 (-5028) + °OH^0 (-7206) -> OH^-1 (-11526) +At time : 4.3 ps Reaction : OH^-1 (-11526) + H3O^1 (-7205) -> No product +At time : 4.4 ps Reaction : °OH^0 (-11365) + °OH^0 (-10008) -> H2O2^0 (-11527) +At time : 4.4 ps Reaction : H^0 (-9374) + °OH^0 (-8685) -> No product +At time : 4.4 ps Reaction : °OH^0 (-9345) + °OH^0 (-9346) -> H2O2^0 (-11528) +At time : 4.5 ps Reaction : °OH^0 (-11206) + °OH^0 (-7334) -> H2O2^0 (-11529) +At time : 4.5 ps Reaction : °OH^0 (-6132) + °OH^0 (-7398) -> H2O2^0 (-11530) +At time : 4.6 ps Reaction : °OH^0 (-11386) + °OH^0 (-8242) -> H2O2^0 (-11531) +At time : 4.6 ps Reaction : °OH^0 (-11292) + °OH^0 (-10043) -> H2O2^0 (-11532) +At time : 4.7 ps Reaction : °OH^0 (-11419) + °OH^0 (-7000) -> H2O2^0 (-11533) +At time : 4.7 ps Reaction : °OH^0 (-10678) + °OH^0 (-9544) -> H2O2^0 (-11534) +At time : 4.8 ps Reaction : °OH^0 (-11413) + °OH^0 (-9488) -> H2O2^0 (-11535) +At time : 4.8 ps Reaction : °OH^0 (-6696) + e_aq^-1 (-8693) -> OH^-1 (-11536) +At time : 4.8 ps Reaction : °OH^0 (-6900) + °OH^0 (-6910) -> H2O2^0 (-11537) +At time : 4.9 ps Reaction : H^0 (-10340) + °OH^0 (-9103) -> No product +At time : 4.9 ps Reaction : °OH^0 (-7284) + °OH^0 (-9089) -> H2O2^0 (-11538) +At time : 5 ps Reaction : °OH^0 (-11283) + °OH^0 (-9897) -> H2O2^0 (-11539) +At time : 5 ps Reaction : OH^-1 (-5727) + H3O^1 (-6201) -> No product +At time : 5.1 ps Reaction : °OH^0 (-10517) + H^0 (-10264) -> No product +At time : 5.3 ps Reaction : H^0 (-9623) + °OH^0 (-9621) -> No product +At time : 5.3 ps Reaction : °OH^0 (-6944) + H^0 (-9221) -> No product +At time : 5.4 ps Reaction : °OH^0 (-9949) + °OH^0 (-9952) -> H2O2^0 (-11540) +At time : 5.5 ps Reaction : °OH^0 (-11164) + °OH^0 (-10292) -> H2O2^0 (-11541) +At time : 5.6 ps Reaction : OH^-1 (-5787) + H3O^1 (-6791) -> No product +At time : 5.7 ps Reaction : °OH^0 (-10542) + °OH^0 (-7158) -> H2O2^0 (-11542) +At time : 5.8 ps Reaction : °OH^0 (-8484) + °OH^0 (-8604) -> H2O2^0 (-11543) +At time : 6.1 ps Reaction : °OH^0 (-10242) + °OH^0 (-10246) -> H2O2^0 (-11544) +At time : 6.3 ps Reaction : °OH^0 (-6178) + H^0 (-11322) -> No product +At time : 6.3 ps Reaction : °OH^0 (-10356) + °OH^0 (-11225) -> H2O2^0 (-11545) +At time : 6.4 ps Reaction : H^0 (-10108) + °OH^0 (-7040) -> No product +At time : 6.5 ps Reaction : °OH^0 (-6048) + °OH^0 (-7674) -> H2O2^0 (-11546) +At time : 6.6 ps Reaction : °OH^0 (-10431) + °OH^0 (-10433) -> H2O2^0 (-11547) +At time : 6.6 ps Reaction : °OH^0 (-10234) + °OH^0 (-7228) -> H2O2^0 (-11548) +At time : 6.7 ps Reaction : °OH^0 (-8964) + e_aq^-1 (-8966) -> OH^-1 (-11549) +At time : 6.7 ps Reaction : OH^-1 (-11549) + H3O^1 (-8965) -> No product +At time : 7.4 ps Reaction : °OH^0 (-6672) + °OH^0 (-6674) -> H2O2^0 (-11550) +At time : 7.5 ps Reaction : H^0 (-10841) + °OH^0 (-6738) -> No product +At time : 7.6 ps Reaction : °OH^0 (-10238) + °OH^0 (-10239) -> H2O2^0 (-11551) +At time : 7.9 ps Reaction : °OH^0 (-11132) + °OH^0 (-11133) -> H2O2^0 (-11552) +At time : 8.1 ps Reaction : °OH^0 (-9504) + °OH^0 (-8234) -> H2O2^0 (-11553) +At time : 8.2 ps Reaction : °OH^0 (-11392) + °OH^0 (-10267) -> H2O2^0 (-11554) +At time : 8.5 ps Reaction : °OH^0 (-7274) + °OH^0 (-8378) -> H2O2^0 (-11555) +At time : 8.6 ps Reaction : °OH^0 (-10036) + °OH^0 (-10975) -> H2O2^0 (-11556) +At time : 8.6 ps Reaction : H^0 (-10845) + H^0 (-10847) -> H_2^0 (-11557) +At time : 8.7 ps Reaction : H^0 (-10942) + °OH^0 (-9999) -> No product +At time : 8.7 ps Reaction : °OH^0 (-9696) + °OH^0 (-9694) -> H2O2^0 (-11558) +At time : 8.9 ps Reaction : H^0 (-11269) + e_aq^-1 (-3323) -> OH^-1 (-11559) + H_2^0 (-11560) +At time : 8.9 ps Reaction : °OH^0 (-7564) + °OH^0 (-9120) -> H2O2^0 (-11561) +At time : 8.9 ps Reaction : H3O^1 (-10686) + OH^-1 (-11559) -> No product +At time : 9 ps Reaction : °OH^0 (-10974) + °OH^0 (-6220) -> H2O2^0 (-11562) +At time : 9 ps Reaction : °OH^0 (-9284) + °OH^0 (-10554) -> H2O2^0 (-11563) +At time : 9 ps Reaction : °OH^0 (-10521) + °OH^0 (-6182) -> H2O2^0 (-11564) +At time : 9 ps Reaction : °OH^0 (-10167) + °OH^0 (-10165) -> H2O2^0 (-11565) +At time : 9 ps Reaction : °OH^0 (-6858) + °OH^0 (-8050) -> H2O2^0 (-11566) +At time : 9.4 ps Reaction : °OH^0 (-9675) + e_aq^-1 (-2871) -> OH^-1 (-11567) +At time : 9.4 ps Reaction : H3O^1 (-9674) + OH^-1 (-11567) -> No product +At time : 9.5 ps Reaction : H^0 (-11366) + °OH^0 (-10944) -> No product +At time : 9.9 ps Reaction : °OH^0 (-6232) + °OH^0 (-6780) -> H2O2^0 (-11568) +At time : 10.1 ps Reaction : °OH^0 (-9777) + °OH^0 (-9773) -> H2O2^0 (-11569) +At time : 10.1 ps Reaction : e_aq^-1 (-3602) + °OH^0 (-6342) -> OH^-1 (-11570) +At time : 10.5 ps Reaction : H^0 (-11184) + °OH^0 (-7310) -> No product +At time : 10.8 ps Reaction : e_aq^-1 (-4844) + H3O^1 (-7605) -> H^0 (-11571) +At time : 11.1 ps Reaction : H3O^1 (-9052) + e_aq^-1 (-9056) -> H^0 (-11572) +At time : 12.1 ps Reaction : °OH^0 (-10188) + °OH^0 (-11084) -> H2O2^0 (-11573) +At time : 12.1 ps Reaction : °OH^0 (-10096) + °OH^0 (-11018) -> H2O2^0 (-11574) +At time : 12.1 ps Reaction : °OH^0 (-10658) + °OH^0 (-9817) -> H2O2^0 (-11575) +At time : 12.1 ps Reaction : °OH^0 (-10123) + °OH^0 (-8730) -> H2O2^0 (-11576) +At time : 12.1 ps Reaction : H^0 (-10029) + °OH^0 (-6956) -> No product +At time : 12.1 ps Reaction : °OH^0 (-9810) + °OH^0 (-6642) -> H2O2^0 (-11577) +At time : 12.1 ps Reaction : °OH^0 (-9719) + °OH^0 (-7906) -> H2O2^0 (-11578) +At time : 12.1 ps Reaction : e_aq^-1 (-4687) + °OH^0 (-7062) -> OH^-1 (-11579) +At time : 12.1 ps Reaction : °OH^0 (-11306) + °OH^0 (-7346) -> H2O2^0 (-11580) +At time : 13.1 ps Reaction : H^0 (-11376) + °OH^0 (-11040) -> No product +At time : 13.1 ps Reaction : °OH^0 (-11085) + °OH^0 (-8228) -> H2O2^0 (-11581) +At time : 13.1 ps Reaction : H^0 (-10588) + °OH^0 (-9034) -> No product +At time : 13.1 ps Reaction : °OH^0 (-9375) + °OH^0 (-9805) -> H2O2^0 (-11582) +At time : 13.1 ps Reaction : °OH^0 (-7740) + °OH^0 (-8016) -> H2O2^0 (-11583) +At time : 14.1 ps Reaction : OH^-1 (-11435) + H3O^1 (-8305) -> No product +At time : 14.1 ps Reaction : °OH^0 (-11264) + °OH^0 (-9292) -> H2O2^0 (-11584) +At time : 14.1 ps Reaction : °OH^0 (-11111) + °OH^0 (-11110) -> H2O2^0 (-11585) +At time : 14.1 ps Reaction : °OH^0 (-10714) + °OH^0 (-9603) -> H2O2^0 (-11586) +At time : 14.1 ps Reaction : °OH^0 (-9466) + H^0 (-9253) -> No product +At time : 14.1 ps Reaction : e_aq^-1 (-4003) + °OH^0 (-7746) -> OH^-1 (-11587) +At time : 14.1 ps Reaction : e_aq^-1 (-1011) + H3O^1 (-7097) -> H^0 (-11588) +At time : 14.1 ps Reaction : OH^-1 (-11587) + H3O^1 (-7745) -> No product +At time : 15.1 ps Reaction : H^0 (-11293) + °OH^0 (-8122) -> No product +At time : 15.1 ps Reaction : H^0 (-9283) + °OH^0 (-11241) -> No product +At time : 15.1 ps Reaction : °OH^0 (-10468) + °OH^0 (-10467) -> H2O2^0 (-11589) +At time : 15.1 ps Reaction : °OH^0 (-10250) + °OH^0 (-10252) -> H2O2^0 (-11590) +At time : 15.1 ps Reaction : °OH^0 (-9861) + H^0 (-9864) -> No product +At time : 15.1 ps Reaction : °OH^0 (-9503) + °OH^0 (-9064) -> H2O2^0 (-11591) +At time : 16.1 ps Reaction : °OH^0 (-11200) + e_aq^-1 (-8612) -> OH^-1 (-11592) +At time : 16.1 ps Reaction : °OH^0 (-11044) + °OH^0 (-7640) -> H2O2^0 (-11593) +At time : 16.1 ps Reaction : °OH^0 (-10088) + °OH^0 (-11012) -> H2O2^0 (-11594) +At time : 16.1 ps Reaction : °OH^0 (-10868) + °OH^0 (-6798) -> H2O2^0 (-11595) +At time : 16.1 ps Reaction : °OH^0 (-6820) + °OH^0 (-8658) -> H2O2^0 (-11596) +At time : 16.1 ps Reaction : H3O^1 (-11199) + OH^-1 (-11592) -> No product +At time : 16.1 ps Reaction : °OH^0 (-9278) + °OH^0 (-10146) -> H2O2^0 (-11597) +At time : 17.1 ps Reaction : H^0 (-11224) + °OH^0 (-9116) -> No product +At time : 17.1 ps Reaction : °OH^0 (-11117) + °OH^0 (-6088) -> H2O2^0 (-11598) +At time : 17.1 ps Reaction : °OH^0 (-10191) + H^0 (-9129) -> No product +At time : 17.1 ps Reaction : °OH^0 (-10072) + °OH^0 (-8132) -> H2O2^0 (-11599) +At time : 17.1 ps Reaction : °OH^0 (-9276) + °OH^0 (-7054) -> H2O2^0 (-11600) +At time : 17.1 ps Reaction : °OH^0 (-8796) + °OH^0 (-9118) -> H2O2^0 (-11601) +At time : 17.1 ps Reaction : °OH^0 (-8499) + e_aq^-1 (-8501) -> OH^-1 (-11602) +At time : 17.1 ps Reaction : °OH^0 (-6176) + °OH^0 (-7288) -> H2O2^0 (-11603) +At time : 17.1 ps Reaction : OH^-1 (-11602) + H3O^1 (-8500) -> No product +At time : 18.1 ps Reaction : °OH^0 (-11407) + °OH^0 (-9114) -> H2O2^0 (-11604) +At time : 18.1 ps Reaction : H^0 (-9279) + H^0 (-11054) -> H_2^0 (-11605) +At time : 18.1 ps Reaction : °OH^0 (-9506) + °OH^0 (-11046) -> H2O2^0 (-11606) +At time : 18.1 ps Reaction : °OH^0 (-11030) + °OH^0 (-7650) -> H2O2^0 (-11607) +At time : 18.1 ps Reaction : °OH^0 (-10891) + °OH^0 (-9932) -> H2O2^0 (-11608) +At time : 18.1 ps Reaction : °OH^0 (-10119) + °OH^0 (-10120) -> H2O2^0 (-11609) +At time : 18.1 ps Reaction : °OH^0 (-10093) + H^0 (-9227) -> No product +At time : 18.1 ps Reaction : °OH^0 (-8036) + °OH^0 (-8038) -> H2O2^0 (-11610) +At time : 18.1 ps Reaction : e_aq^-1 (-3607) + °OH^0 (-5922) -> OH^-1 (-11611) +At time : 18.1 ps Reaction : H3O^1 (-5921) + OH^-1 (-11611) -> No product +At time : 19.1 ps Reaction : °OH^0 (-9356) + °OH^0 (-10785) -> H2O2^0 (-11612) +At time : 19.1 ps Reaction : °OH^0 (-7176) + °OH^0 (-8628) -> H2O2^0 (-11613) +At time : 19.1 ps Reaction : e_aq^-1 (-1759) + °OH^0 (-7694) -> OH^-1 (-11614) +At time : 20.1 ps Reaction : OH^-1 (-11614) + H3O^1 (-7693) -> No product +At time : 20.1 ps Reaction : °OH^0 (-10839) + H^0 (-9856) -> No product +At time : 20.1 ps Reaction : H^0 (-10281) + H^0 (-10290) -> H_2^0 (-11615) +At time : 20.1 ps Reaction : °OH^0 (-10258) + H^0 (-10259) -> No product +At time : 20.1 ps Reaction : °OH^0 (-9727) + °OH^0 (-9728) -> H2O2^0 (-11616) +At time : 20.1 ps Reaction : °OH^0 (-9571) + °OH^0 (-9162) -> H2O2^0 (-11617) +At time : 20.1 ps Reaction : °OH^0 (-7028) + °OH^0 (-8142) -> H2O2^0 (-11618) +At time : 21.1 ps Reaction : H3O^1 (-9400) + OH^-1 (-5757) -> No product +At time : 22.1 ps Reaction : OH^-1 (-11579) + H3O^1 (-7061) -> No product +At time : 22.1 ps Reaction : °OH^0 (-9984) + H^0 (-9985) -> No product +At time : 22.1 ps Reaction : °OH^0 (-9790) + °OH^0 (-6628) -> H2O2^0 (-11619) +At time : 22.1 ps Reaction : °OH^0 (-9729) + °OH^0 (-7912) -> H2O2^0 (-11620) +At time : 22.1 ps Reaction : °OH^0 (-5988) + e_aq^-1 (-8858) -> OH^-1 (-11621) +At time : 22.1 ps Reaction : °OH^0 (-8046) + °OH^0 (-8841) -> H2O2^0 (-11622) +At time : 22.1 ps Reaction : °OH^0 (-8092) + °OH^0 (-8100) -> H2O2^0 (-11623) +At time : 22.1 ps Reaction : e_aq^-1 (-3828) + °OH^0 (-5767) -> OH^-1 (-11624) +At time : 22.1 ps Reaction : H3O^1 (-5987) + OH^-1 (-11621) -> No product +At time : 23.1 ps Reaction : H^0 (-11239) + °OH^0 (-8470) -> No product +At time : 23.1 ps Reaction : H^0 (-11125) + °OH^0 (-7574) -> No product +At time : 23.1 ps Reaction : H3O^1 (-10782) + OH^-1 (-5772) -> No product +At time : 23.1 ps Reaction : °OH^0 (-10573) + °OH^0 (-7072) -> H2O2^0 (-11625) +At time : 23.1 ps Reaction : e_aq^-1 (-4991) + H^0 (-10537) -> OH^-1 (-11626) + H_2^0 (-11627) +At time : 24.1 ps Reaction : °OH^0 (-11233) + °OH^0 (-10368) -> H2O2^0 (-11628) +At time : 24.1 ps Reaction : °OH^0 (-10907) + H^0 (-9961) -> No product +At time : 24.1 ps Reaction : °OH^0 (-10186) + °OH^0 (-10187) -> H2O2^0 (-11629) +At time : 24.1 ps Reaction : °OH^0 (-9943) + °OH^0 (-6020) -> H2O2^0 (-11630) +At time : 24.1 ps Reaction : °OH^0 (-8893) + °OH^0 (-8894) -> H2O2^0 (-11631) +At time : 24.1 ps Reaction : °OH^0 (-7286) + °OH^0 (-8760) -> H2O2^0 (-11632) +At time : 24.1 ps Reaction : °OH^0 (-6974) + °OH^0 (-8116) -> H2O2^0 (-11633) +At time : 24.1 ps Reaction : e_aq^-1 (-3536) + H3O^1 (-6285) -> H^0 (-11634) +At time : 25.1 ps Reaction : °OH^0 (-11375) + °OH^0 (-11296) -> H2O2^0 (-11635) +At time : 25.1 ps Reaction : H^0 (-10679) + e_aq^-1 (-3387) -> OH^-1 (-11636) + H_2^0 (-11637) +At time : 25.1 ps Reaction : H3O^1 (-10604) + e_aq^-1 (-4422) -> H^0 (-11638) +At time : 25.1 ps Reaction : °OH^0 (-5940) + °OH^0 (-8886) -> H2O2^0 (-11639) +At time : 25.1 ps Reaction : °OH^0 (-6186) + °OH^0 (-8330) -> H2O2^0 (-11640) +At time : 25.1 ps Reaction : °OH^0 (-6008) + °OH^0 (-6816) -> H2O2^0 (-11641) +At time : 25.1 ps Reaction : e_aq^-1 (-4432) + H3O^1 (-6223) -> H^0 (-11642) +At time : 26.1 ps Reaction : H^0 (-11588) + °OH^0 (-6200) -> No product +At time : 26.1 ps Reaction : °OH^0 (-8868) + e_aq^-1 (-8870) -> OH^-1 (-11643) +At time : 26.1 ps Reaction : °OH^0 (-8354) + °OH^0 (-8356) -> H2O2^0 (-11644) +At time : 26.1 ps Reaction : OH^-1 (-11643) + H3O^1 (-8869) -> No product +At time : 27.1 ps Reaction : OH^-1 (-11636) + H3O^1 (-7775) -> No product +At time : 27.1 ps Reaction : OH^-1 (-11570) + H3O^1 (-6341) -> No product +At time : 27.1 ps Reaction : °OH^0 (-11416) + °OH^0 (-7384) -> H2O2^0 (-11645) +At time : 27.1 ps Reaction : H^0 (-11303) + °OH^0 (-11302) -> No product +At time : 27.1 ps Reaction : °OH^0 (-11158) + °OH^0 (-7254) -> H2O2^0 (-11646) +At time : 27.1 ps Reaction : °OH^0 (-10729) + °OH^0 (-6352) -> H2O2^0 (-11647) +At time : 27.1 ps Reaction : °OH^0 (-9914) + e_aq^-1 (-8951) -> OH^-1 (-11648) +At time : 28.1 ps Reaction : °OH^0 (-11410) + °OH^0 (-5876) -> H2O2^0 (-11649) +At time : 28.1 ps Reaction : °OH^0 (-10070) + °OH^0 (-9224) -> H2O2^0 (-11650) +At time : 28.1 ps Reaction : OH^-1 (-5718) + H3O^1 (-7385) -> No product +At time : 29.1 ps Reaction : °OH^0 (-10141) + °OH^0 (-11049) -> H2O2^0 (-11651) +At time : 29.1 ps Reaction : °OH^0 (-10633) + H^0 (-10634) -> No product +At time : 29.1 ps Reaction : °OH^0 (-7712) + H^0 (-9211) -> No product +At time : 29.1 ps Reaction : e_aq^-1 (-4972) + °OH^0 (-6192) -> OH^-1 (-11652) +At time : 29.1 ps Reaction : OH^-1 (-5736) + H3O^1 (-6051) -> No product +At time : 29.1 ps Reaction : °OH^0 (-11144) + °OH^0 (-10257) -> H2O2^0 (-11653) +At time : 30.1 ps Reaction : °OH^0 (-11417) + °OH^0 (-10641) -> H2O2^0 (-11654) +At time : 30.1 ps Reaction : H3O^1 (-9620) + e_aq^-1 (-3566) -> H^0 (-11655) +At time : 30.1 ps Reaction : °OH^0 (-7198) + °OH^0 (-8300) -> H2O2^0 (-11656) +At time : 30.1 ps Reaction : e_aq^-1 (-4458) + °OH^0 (-8110) -> OH^-1 (-11657) +At time : 30.1 ps Reaction : °OH^0 (-6736) + °OH^0 (-8006) -> H2O2^0 (-11658) +At time : 30.1 ps Reaction : °OH^0 (-5716) + °OH^0 (-6140) -> H2O2^0 (-11659) +At time : 30.1 ps Reaction : OH^-1 (-11657) + H3O^1 (-8836) -> No product +At time : 31.1 ps Reaction : H^0 (-11571) + °OH^0 (-7606) -> No product +At time : 31.1 ps Reaction : °OH^0 (-10213) + °OH^0 (-10214) -> H2O2^0 (-11660) +At time : 31.1 ps Reaction : H^0 (-9287) + H^0 (-9959) -> H_2^0 (-11661) +At time : 31.1 ps Reaction : e_aq^-1 (-1715) + °OH^0 (-8988) -> OH^-1 (-11662) +At time : 31.1 ps Reaction : °OH^0 (-8396) + °OH^0 (-8553) -> H2O2^0 (-11663) +At time : 31.1 ps Reaction : OH^-1 (-5790) + H3O^1 (-7735) -> No product +At time : 31.1 ps Reaction : OH^-1 (-5817) + H3O^1 (-7425) -> No product +At time : 31.1 ps Reaction : °OH^0 (-9581) + e_aq^-1 (-3227) -> OH^-1 (-11664) +At time : 31.1 ps Reaction : H3O^1 (-10710) + OH^-1 (-11664) -> No product +At time : 32.1 ps Reaction : OH^-1 (-11652) + H3O^1 (-6191) -> No product +At time : 32.1 ps Reaction : H^0 (-10369) + H^0 (-10371) -> H_2^0 (-11665) +At time : 32.1 ps Reaction : °OH^0 (-9922) + H^0 (-9921) -> No product +At time : 32.1 ps Reaction : °OH^0 (-9767) + °OH^0 (-6606) -> H2O2^0 (-11666) +At time : 32.1 ps Reaction : °OH^0 (-6654) + H^0 (-9195) -> No product +At time : 32.1 ps Reaction : e_aq^-1 (-4177) + °OH^0 (-7718) -> OH^-1 (-11667) +At time : 32.1 ps Reaction : OH^-1 (-11667) + H3O^1 (-8950) -> No product +At time : 33.1 ps Reaction : e_aq^-1 (-1377) + °OH^0 (-10996) -> OH^-1 (-11668) +At time : 33.1 ps Reaction : °OH^0 (-10435) + H^0 (-10436) -> No product +At time : 33.1 ps Reaction : H^0 (-9890) + °OH^0 (-9889) -> No product +At time : 33.1 ps Reaction : °OH^0 (-9577) + e_aq^-1 (-3245) -> OH^-1 (-11669) +At time : 33.1 ps Reaction : H3O^1 (-7875) + e_aq^-1 (-8891) -> H^0 (-11670) +At time : 33.1 ps Reaction : °OH^0 (-6588) + °OH^0 (-8682) -> H2O2^0 (-11671) +At time : 33.1 ps Reaction : OH^-1 (-11669) + H3O^1 (-6271) -> No product +At time : 34.1 ps Reaction : °OH^0 (-11137) + H^0 (-9123) -> No product +At time : 34.1 ps Reaction : e_aq^-1 (-100) + °OH^0 (-10427) -> OH^-1 (-11672) +At time : 34.1 ps Reaction : OH^-1 (-5766) + H3O^1 (-5963) -> No product +At time : 35.1 ps Reaction : °OH^0 (-10639) + °OH^0 (-6846) -> H2O2^0 (-11673) +At time : 36.1 ps Reaction : °OH^0 (-11394) + °OH^0 (-8364) -> H2O2^0 (-11674) +At time : 36.1 ps Reaction : °OH^0 (-11154) + °OH^0 (-10516) -> H2O2^0 (-11675) +At time : 36.1 ps Reaction : °OH^0 (-11048) + H^0 (-9233) -> No product +At time : 36.1 ps Reaction : °OH^0 (-10670) + °OH^0 (-7926) -> H2O2^0 (-11676) +At time : 36.1 ps Reaction : °OH^0 (-9971) + °OH^0 (-8703) -> H2O2^0 (-11677) +At time : 36.1 ps Reaction : H^0 (-9363) + H^0 (-9739) -> H_2^0 (-11678) +At time : 36.1 ps Reaction : °OH^0 (-9590) + e_aq^-1 (-3531) -> OH^-1 (-11679) +At time : 36.1 ps Reaction : e_aq^-1 (-266) + H3O^1 (-8427) -> H^0 (-11680) +At time : 36.1 ps Reaction : e_aq^-1 (-1070) + °OH^0 (-7624) -> OH^-1 (-11681) +At time : 36.1 ps Reaction : °OH^0 (-5888) + °OH^0 (-6852) -> H2O2^0 (-11682) +At time : 36.1 ps Reaction : H3O^1 (-9589) + OH^-1 (-11679) -> No product +At time : 37.1 ps Reaction : °OH^0 (-10711) + e_aq^-1 (-3237) -> OH^-1 (-11683) +At time : 37.1 ps Reaction : H^0 (-9944) + °OH^0 (-7710) -> No product +At time : 37.1 ps Reaction : °OH^0 (-6080) + °OH^0 (-8230) -> H2O2^0 (-11684) +At time : 38.1 ps Reaction : °OH^0 (-11377) + °OH^0 (-11057) -> H2O2^0 (-11685) +At time : 38.1 ps Reaction : H^0 (-9800) + °OH^0 (-10821) -> No product +At time : 38.1 ps Reaction : H^0 (-9361) + H^0 (-10791) -> H_2^0 (-11686) +At time : 38.1 ps Reaction : °OH^0 (-10609) + °OH^0 (-6226) -> H2O2^0 (-11687) +At time : 38.1 ps Reaction : °OH^0 (-10021) + H^0 (-9422) -> No product +At time : 38.1 ps Reaction : °OH^0 (-9716) + °OH^0 (-6520) -> H2O2^0 (-11688) +At time : 38.1 ps Reaction : H^0 (-9584) + °OH^0 (-9583) -> No product +At time : 38.1 ps Reaction : e_aq^-1 (-3107) + °OH^0 (-7846) -> OH^-1 (-11689) +At time : 38.1 ps Reaction : °OH^0 (-6552) + °OH^0 (-8872) -> H2O2^0 (-11690) +At time : 39.1 ps Reaction : °OH^0 (-10953) + °OH^0 (-10951) -> H2O2^0 (-11691) +At time : 39.1 ps Reaction : H^0 (-10255) + e_aq^-1 (-5148) -> OH^-1 (-11692) + H_2^0 (-11693) +At time : 39.1 ps Reaction : °OH^0 (-10222) + °OH^0 (-8823) -> H2O2^0 (-11694) +At time : 39.1 ps Reaction : H^0 (-10182) + °OH^0 (-8204) -> No product +At time : 39.1 ps Reaction : e_aq^-1 (-3592) + °OH^0 (-6332) -> OH^-1 (-11695) +At time : 39.1 ps Reaction : e_aq^-1 (-5383) + °OH^0 (-6160) -> OH^-1 (-11696) +At time : 39.1 ps Reaction : H3O^1 (-6159) + OH^-1 (-11696) -> No product +At time : 39.1 ps Reaction : OH^-1 (-11692) + H3O^1 (-7243) -> No product +At time : 39.1 ps Reaction : °OH^0 (-9470) + H^0 (-9471) -> No product +At time : 40.1 ps Reaction : OH^-1 (-11695) + H3O^1 (-6331) -> No product +At time : 40.1 ps Reaction : °OH^0 (-10723) + °OH^0 (-9626) -> H2O2^0 (-11697) +At time : 40.1 ps Reaction : °OH^0 (-9714) + °OH^0 (-6514) -> H2O2^0 (-11698) +At time : 41.1 ps Reaction : H3O^1 (-6279) + OH^-1 (-11683) -> No product +At time : 41.1 ps Reaction : H^0 (-11286) + °OH^0 (-6890) -> No product +At time : 41.1 ps Reaction : °OH^0 (-9401) + H^0 (-9946) -> No product +At time : 41.1 ps Reaction : e_aq^-1 (-8705) + °OH^0 (-8985) -> OH^-1 (-11699) +At time : 41.1 ps Reaction : °OH^0 (-8236) + °OH^0 (-8634) -> H2O2^0 (-11700) +At time : 41.1 ps Reaction : °OH^0 (-6162) + °OH^0 (-7494) -> H2O2^0 (-11701) +At time : 42.1 ps Reaction : °OH^0 (-11281) + °OH^0 (-8022) -> H2O2^0 (-11702) +At time : 42.1 ps Reaction : °OH^0 (-11056) + H^0 (-9235) -> No product +At time : 42.1 ps Reaction : °OH^0 (-11038) + °OH^0 (-7048) -> H2O2^0 (-11703) +At time : 42.1 ps Reaction : °OH^0 (-10663) + °OH^0 (-9184) -> H2O2^0 (-11704) +At time : 42.1 ps Reaction : °OH^0 (-10347) + °OH^0 (-10349) -> H2O2^0 (-11705) +At time : 42.1 ps Reaction : °OH^0 (-6180) + °OH^0 (-8368) -> H2O2^0 (-11706) +At time : 42.1 ps Reaction : e_aq^-1 (-678) + °OH^0 (-7220) -> OH^-1 (-11707) +At time : 42.1 ps Reaction : H3O^1 (-9970) + OH^-1 (-11699) -> No product +At time : 43.1 ps Reaction : °OH^0 (-11237) + °OH^0 (-7390) -> H2O2^0 (-11708) +At time : 43.1 ps Reaction : °OH^0 (-8102) + °OH^0 (-8104) -> H2O2^0 (-11709) +At time : 44.1 ps Reaction : H3O^1 (-10929) + e_aq^-1 (-4371) -> H^0 (-11710) +At time : 44.1 ps Reaction : °OH^0 (-6174) + °OH^0 (-9252) -> H2O2^0 (-11711) +At time : 44.1 ps Reaction : °OH^0 (-6030) + °OH^0 (-6896) -> H2O2^0 (-11712) +At time : 45.1 ps Reaction : e_aq^-1 (-3573) + °OH^0 (-7834) -> OH^-1 (-11713) +At time : 45.1 ps Reaction : H3O^1 (-6307) + OH^-1 (-11713) -> No product +At time : 46.1 ps Reaction : °OH^0 (-10796) + °OH^0 (-6540) -> H2O2^0 (-11714) +At time : 46.1 ps Reaction : H^0 (-9291) + °OH^0 (-9290) -> No product +At time : 47.1 ps Reaction : °OH^0 (-8422) + °OH^0 (-9258) -> H2O2^0 (-11715) +At time : 47.1 ps Reaction : °OH^0 (-7666) + e_aq^-1 (-8726) -> OH^-1 (-11716) +At time : 47.1 ps Reaction : °OH^0 (-8130) + °OH^0 (-8724) -> H2O2^0 (-11717) +At time : 47.1 ps Reaction : OH^-1 (-11716) + H3O^1 (-7665) -> No product +At time : 48.1 ps Reaction : H3O^1 (-8129) + OH^-1 (-11668) -> No product +At time : 48.1 ps Reaction : H3O^1 (-6355) + e_aq^-1 (-8504) -> H^0 (-11718) +At time : 48.1 ps Reaction : H3O^1 (-7707) + e_aq^-1 (-8654) -> H^0 (-11719) +At time : 49.1 ps Reaction : °OH^0 (-9920) + °OH^0 (-6836) -> H2O2^0 (-11720) +At time : 49.1 ps Reaction : e_aq^-1 (-5357) + H3O^1 (-8425) -> H^0 (-11721) +At time : 50.1 ps Reaction : °OH^0 (-7918) + H^0 (-9179) -> No product +At time : 50.1 ps Reaction : °OH^0 (-8718) + e_aq^-1 (-8720) -> OH^-1 (-11722) +At time : 50.1 ps Reaction : OH^-1 (-5784) + H3O^1 (-8662) -> No product +At time : 50.1 ps Reaction : °OH^0 (-6170) + °OH^0 (-8410) -> H2O2^0 (-11723) +At time : 50.1 ps Reaction : e_aq^-1 (-4818) + H3O^1 (-8205) -> H^0 (-11724) +At time : 50.1 ps Reaction : °OH^0 (-6498) + °OH^0 (-6500) -> H2O2^0 (-11725) +At time : 52.1 ps Reaction : H^0 (-9420) + °OH^0 (-10948) -> No product +At time : 52.1 ps Reaction : °OH^0 (-10452) + H^0 (-10453) -> No product +At time : 52.1 ps Reaction : °OH^0 (-9954) + °OH^0 (-8968) -> H2O2^0 (-11726) +At time : 52.1 ps Reaction : °OH^0 (-9394) + °OH^0 (-6822) -> H2O2^0 (-11727) +At time : 52.1 ps Reaction : °OH^0 (-6046) + °OH^0 (-6954) -> H2O2^0 (-11728) +At time : 53.1 ps Reaction : °OH^0 (-10901) + °OH^0 (-10904) -> H2O2^0 (-11729) +At time : 53.1 ps Reaction : °OH^0 (-10550) + °OH^0 (-8260) -> H2O2^0 (-11730) +At time : 53.1 ps Reaction : H^0 (-9569) + °OH^0 (-7800) -> No product +At time : 53.1 ps Reaction : °OH^0 (-7246) + °OH^0 (-8565) -> H2O2^0 (-11731) +At time : 53.1 ps Reaction : °OH^0 (-6126) + °OH^0 (-7358) -> H2O2^0 (-11732) +At time : 54.1 ps Reaction : °OH^0 (-11195) + °OH^0 (-8416) -> H2O2^0 (-11733) +At time : 54.1 ps Reaction : °OH^0 (-8673) + e_aq^-1 (-8675) -> OH^-1 (-11734) +At time : 55.1 ps Reaction : °OH^0 (-9926) + °OH^0 (-11332) -> H2O2^0 (-11735) +At time : 55.1 ps Reaction : °OH^0 (-10218) + H^0 (-11327) -> No product +At time : 55.1 ps Reaction : °OH^0 (-10687) + °OH^0 (-11268) -> H2O2^0 (-11736) +At time : 55.1 ps Reaction : °OH^0 (-10815) + e_aq^-1 (-3863) -> OH^-1 (-11737) +At time : 55.1 ps Reaction : °OH^0 (-6700) + H^0 (-9199) -> No product +At time : 55.1 ps Reaction : H3O^1 (-6603) + OH^-1 (-11737) -> No product +At time : 56.1 ps Reaction : °OH^0 (-11398) + °OH^0 (-10379) -> H2O2^0 (-11738) +At time : 56.1 ps Reaction : °OH^0 (-11042) + °OH^0 (-9140) -> H2O2^0 (-11739) +At time : 56.1 ps Reaction : °OH^0 (-10386) + °OH^0 (-7462) -> H2O2^0 (-11740) +At time : 56.1 ps Reaction : °OH^0 (-9562) + H^0 (-9561) -> No product +At time : 56.1 ps Reaction : H^0 (-9512) + e_aq^-1 (-9011) -> OH^-1 (-11741) + H_2^0 (-11742) +At time : 56.1 ps Reaction : e_aq^-1 (-5343) + H^0 (-9257) -> OH^-1 (-11743) + H_2^0 (-11744) +At time : 56.1 ps Reaction : e_aq^-1 (-8531) + H^0 (-9141) -> OH^-1 (-11745) + H_2^0 (-11746) +At time : 56.1 ps Reaction : °OH^0 (-6206) + e_aq^-1 (-8744) -> OH^-1 (-11747) +At time : 56.1 ps Reaction : e_aq^-1 (-3473) + H3O^1 (-6253) -> H^0 (-11748) +At time : 56.1 ps Reaction : OH^-1 (-11743) + H3O^1 (-6157) -> No product +At time : 57.1 ps Reaction : OH^-1 (-11624) + H3O^1 (-8905) -> No product +At time : 57.1 ps Reaction : °OH^0 (-10544) + °OH^0 (-8544) -> H2O2^0 (-11749) +At time : 57.1 ps Reaction : °OH^0 (-11312) + H^0 (-9263) -> No product +At time : 59.1 ps Reaction : °OH^0 (-11005) + °OH^0 (-6058) -> H2O2^0 (-11750) +At time : 59.1 ps Reaction : °OH^0 (-6980) + °OH^0 (-6984) -> H2O2^0 (-11751) +At time : 60.1 ps Reaction : °OH^0 (-11062) + °OH^0 (-8176) -> H2O2^0 (-11752) +At time : 60.1 ps Reaction : °OH^0 (-10366) + °OH^0 (-9260) -> H2O2^0 (-11753) +At time : 60.1 ps Reaction : °OH^0 (-7116) + °OH^0 (-8637) -> H2O2^0 (-11754) +At time : 60.1 ps Reaction : °OH^0 (-7304) + °OH^0 (-7306) -> H2O2^0 (-11755) +At time : 61.1 ps Reaction : °OH^0 (-10049) + °OH^0 (-9142) -> H2O2^0 (-11756) +At time : 61.1 ps Reaction : °OH^0 (-8559) + H^0 (-9117) -> No product +At time : 62.1 ps Reaction : °OH^0 (-11094) + °OH^0 (-8248) -> H2O2^0 (-11757) +At time : 62.1 ps Reaction : °OH^0 (-9798) + °OH^0 (-6632) -> H2O2^0 (-11758) +At time : 62.1 ps Reaction : °OH^0 (-9640) + °OH^0 (-7852) -> H2O2^0 (-11759) +At time : 62.1 ps Reaction : e_aq^-1 (-714) + °OH^0 (-8306) -> OH^-1 (-11760) +At time : 63.1 ps Reaction : OH^-1 (-11689) + H3O^1 (-6325) -> No product +At time : 63.1 ps Reaction : °OH^0 (-11368) + H^0 (-10057) -> No product +At time : 64.1 ps Reaction : H3O^1 (-6817) + OH^-1 (-11648) -> No product +At time : 64.1 ps Reaction : H^0 (-10614) + e_aq^-1 (-4374) -> OH^-1 (-11761) + H_2^0 (-11762) +At time : 64.1 ps Reaction : °OH^0 (-10293) + °OH^0 (-10289) -> H2O2^0 (-11763) +At time : 64.1 ps Reaction : H^0 (-9609) + °OH^0 (-6296) -> No product +At time : 64.1 ps Reaction : e_aq^-1 (-3511) + H3O^1 (-7811) -> H^0 (-11764) +At time : 64.1 ps Reaction : OH^-1 (-11761) + H3O^1 (-8073) -> No product +At time : 65.1 ps Reaction : e_aq^-1 (-4554) + H2O2^0 (-11618) -> OH^-1 (-11765) + °OH^0 (-11766) +At time : 65.1 ps Reaction : H^0 (-10539) + °OH^0 (-7582) -> No product +At time : 65.1 ps Reaction : °OH^0 (-9475) + °OH^0 (-7360) -> H2O2^0 (-11767) +At time : 65.1 ps Reaction : °OH^0 (-6624) + °OH^0 (-8865) -> H2O2^0 (-11768) +At time : 65.1 ps Reaction : e_aq^-1 (-4311) + °OH^0 (-6888) -> OH^-1 (-11769) +At time : 65.1 ps Reaction : H3O^1 (-10101) + OH^-1 (-11765) -> No product +At time : 66.1 ps Reaction : H^0 (-10876) + °OH^0 (-6830) -> No product +At time : 66.1 ps Reaction : H^0 (-10253) + °OH^0 (-9122) -> No product +At time : 66.1 ps Reaction : H^0 (-10168) + °OH^0 (-8532) -> No product +At time : 66.1 ps Reaction : °OH^0 (-9857) + °OH^0 (-8574) -> H2O2^0 (-11770) +At time : 66.1 ps Reaction : °OH^0 (-8030) + °OH^0 (-8514) -> H2O2^0 (-11771) +At time : 66.1 ps Reaction : e_aq^-1 (-3518) + H3O^1 (-6269) -> H^0 (-11772) +At time : 67.1 ps Reaction : OH^-1 (-11747) + H3O^1 (-7053) -> No product +At time : 67.1 ps Reaction : °OH^0 (-11150) + °OH^0 (-7554) -> H2O2^0 (-11773) +At time : 67.1 ps Reaction : °OH^0 (-9682) + H^0 (-9683) -> No product +At time : 67.1 ps Reaction : °OH^0 (-8721) + e_aq^-1 (-8723) -> OH^-1 (-11774) +At time : 68.1 ps Reaction : H^0 (-9275) + °OH^0 (-6022) -> No product +At time : 68.1 ps Reaction : °OH^0 (-8902) + °OH^0 (-8903) -> H2O2^0 (-11775) +At time : 69.1 ps Reaction : °OH^0 (-9365) + °OH^0 (-6544) -> H2O2^0 (-11776) +At time : 70.1 ps Reaction : H3O^1 (-9988) + OH^-1 (-11662) -> No product +At time : 70.1 ps Reaction : °OH^0 (-10155) + H^0 (-11060) -> No product +At time : 70.1 ps Reaction : °OH^0 (-8202) + °OH^0 (-8208) -> H2O2^0 (-11777) +At time : 70.1 ps Reaction : e_aq^-1 (-580) + H3O^1 (-7555) -> H^0 (-11778) +At time : 70.1 ps Reaction : °OH^0 (-11220) + °OH^0 (-8446) -> H2O2^0 (-11779) +At time : 71.1 ps Reaction : °OH^0 (-6742) + e_aq^-1 (-8933) -> OH^-1 (-11780) +At time : 71.1 ps Reaction : °OH^0 (-6630) + °OH^0 (-7966) -> H2O2^0 (-11781) +At time : 71.1 ps Reaction : H3O^1 (-6739) + OH^-1 (-11780) -> No product +At time : 72.1 ps Reaction : H^0 (-11208) + °OH^0 (-7342) -> No product +At time : 72.1 ps Reaction : H3O^1 (-10749) + e_aq^-1 (-3026) -> H^0 (-11782) +At time : 73.1 ps Reaction : OH^-1 (-11760) + H3O^1 (-7201) -> No product +At time : 73.1 ps Reaction : H^0 (-11123) + °OH^0 (-6188) -> No product +At time : 73.1 ps Reaction : H^0 (-9973) + H^0 (-9411) -> H_2^0 (-11783) +At time : 73.1 ps Reaction : °OH^0 (-9753) + °OH^0 (-8907) -> H2O2^0 (-11784) +At time : 73.1 ps Reaction : e_aq^-1 (-5669) + H^0 (-9485) -> OH^-1 (-11785) + H_2^0 (-11786) +At time : 73.1 ps Reaction : °OH^0 (-8788) + °OH^0 (-8789) -> H2O2^0 (-11787) +At time : 74.1 ps Reaction : °OH^0 (-11231) + °OH^0 (-8458) -> H2O2^0 (-11788) +At time : 74.1 ps Reaction : °OH^0 (-10844) + °OH^0 (-8939) -> H2O2^0 (-11789) +At time : 74.1 ps Reaction : °OH^0 (-10732) + °OH^0 (-10736) -> H2O2^0 (-11790) +At time : 74.1 ps Reaction : e_aq^-1 (-4660) + °OH^0 (-7642) -> OH^-1 (-11791) +At time : 74.1 ps Reaction : °OH^0 (-6560) + °OH^0 (-6570) -> H2O2^0 (-11792) +At time : 74.1 ps Reaction : OH^-1 (-11791) + H3O^1 (-7641) -> No product +At time : 75.1 ps Reaction : °OH^0 (-10362) + H^0 (-10363) -> No product +At time : 75.1 ps Reaction : °OH^0 (-10268) + °OH^0 (-8816) -> H2O2^0 (-11793) +At time : 75.1 ps Reaction : °OH^0 (-9801) + °OH^0 (-9192) -> H2O2^0 (-11794) +At time : 75.1 ps Reaction : H^0 (-9710) + °OH^0 (-7894) -> No product +At time : 76.1 ps Reaction : °OH^0 (-9820) + °OH^0 (-6682) -> H2O2^0 (-11795) +At time : 76.1 ps Reaction : e_aq^-1 (-5193) + °OH^0 (-8374) -> OH^-1 (-11796) +At time : 77.1 ps Reaction : °OH^0 (-7366) + °OH^0 (-11315) -> H2O2^0 (-11797) +At time : 77.1 ps Reaction : e_aq^-1 (-1378) + H3O^1 (-8133) -> H^0 (-11798) +At time : 78.1 ps Reaction : H^0 (-9796) + e_aq^-1 (-3918) -> OH^-1 (-11799) + H_2^0 (-11800) +At time : 79.1 ps Reaction : °OH^0 (-9354) + °OH^0 (-6472) -> H2O2^0 (-11801) +At time : 79.1 ps Reaction : °OH^0 (-6882) + °OH^0 (-8058) -> H2O2^0 (-11802) +At time : 80.1 ps Reaction : OH^-1 (-11785) + H3O^1 (-8563) -> No product +At time : 80.1 ps Reaction : OH^-1 (-11769) + H3O^1 (-6889) -> No product +At time : 80.1 ps Reaction : H3O^1 (-8315) + OH^-1 (-11707) -> No product +At time : 80.1 ps Reaction : H^0 (-9273) + °OH^0 (-6518) -> No product +At time : 80.1 ps Reaction : e_aq^-1 (-5081) + °OH^0 (-8348) -> OH^-1 (-11803) +At time : 81.1 ps Reaction : H^0 (-10709) + H^0 (-11772) -> H_2^0 (-11804) +At time : 81.1 ps Reaction : H^0 (-10470) + °OH^0 (-11211) -> No product +At time : 81.1 ps Reaction : °OH^0 (-9410) + °OH^0 (-8066) -> H2O2^0 (-11805) +At time : 81.1 ps Reaction : °OH^0 (-7628) + °OH^0 (-9132) -> H2O2^0 (-11806) +At time : 81.1 ps Reaction : °OH^0 (-6872) + °OH^0 (-8056) -> H2O2^0 (-11807) +At time : 81.1 ps Reaction : e_aq^-1 (-3432) + H3O^1 (-6245) -> H^0 (-11808) +At time : 82.1 ps Reaction : °OH^0 (-10107) + H^0 (-10112) -> No product +At time : 82.1 ps Reaction : H^0 (-9461) + °OH^0 (-8346) -> No product +At time : 83.1 ps Reaction : H^0 (-11228) + H^0 (-11309) -> H_2^0 (-11809) +At time : 83.1 ps Reaction : °OH^0 (-8586) + e_aq^-1 (-8588) -> OH^-1 (-11810) +At time : 84.1 ps Reaction : OH^-1 (-11810) + H3O^1 (-7677) -> No product +At time : 85.1 ps Reaction : H3O^1 (-7235) + OH^-1 (-11803) -> No product +At time : 86.1 ps Reaction : H^0 (-9977) + °OH^0 (-6918) -> No product +At time : 87.1 ps Reaction : °OH^0 (-10360) + °OH^0 (-6152) -> H2O2^0 (-11811) +At time : 87.1 ps Reaction : °OH^0 (-10083) + °OH^0 (-8134) -> H2O2^0 (-11812) +At time : 87.1 ps Reaction : °OH^0 (-6172) + °OH^0 (-7526) -> H2O2^0 (-11813) +At time : 87.1 ps Reaction : °OH^0 (-5880) + °OH^0 (-6144) -> H2O2^0 (-11814) +At time : 88.1 ps Reaction : H^0 (-10499) + °OH^0 (-7276) -> No product +At time : 89.1 ps Reaction : °OH^0 (-9960) + °OH^0 (-8060) -> H2O2^0 (-11815) +At time : 89.1 ps Reaction : °OH^0 (-9724) + °OH^0 (-6522) -> H2O2^0 (-11816) +At time : 89.1 ps Reaction : °OH^0 (-5850) + H^0 (-9187) -> No product +At time : 90.1 ps Reaction : e_aq^-1 (-1604) + H^0 (-9424) -> OH^-1 (-11817) + H_2^0 (-11818) +At time : 91.1 ps Reaction : °OH^0 (-6012) + °OH^0 (-11334) -> H2O2^0 (-11819) +At time : 91.1 ps Reaction : °OH^0 (-10587) + °OH^0 (-6216) -> H2O2^0 (-11820) +At time : 91.1 ps Reaction : H^0 (-9633) + °OH^0 (-9632) -> No product +At time : 91.1 ps Reaction : H3O^1 (-8488) + e_aq^-1 (-8489) -> H^0 (-11821) +At time : 92.1 ps Reaction : H^0 (-10900) + °OH^0 (-6862) -> No product +At time : 93.1 ps Reaction : °OH^0 (-11065) + °OH^0 (-7632) -> H2O2^0 (-11822) +At time : 93.1 ps Reaction : e_aq^-1 (-1596) + °OH^0 (-10950) -> OH^-1 (-11823) +At time : 94.1 ps Reaction : °OH^0 (-7322) + H^0 (-11317) -> No product +At time : 94.1 ps Reaction : °OH^0 (-11008) + e_aq^-1 (-1351) -> OH^-1 (-11824) +At time : 94.1 ps Reaction : °OH^0 (-10298) + °OH^0 (-7278) -> H2O2^0 (-11825) +At time : 94.1 ps Reaction : H^0 (-9981) + °OH^0 (-9989) -> No product +At time : 94.1 ps Reaction : H^0 (-9892) + °OH^0 (-7736) -> No product +At time : 94.1 ps Reaction : °OH^0 (-7434) + e_aq^-1 (-8780) -> OH^-1 (-11826) +At time : 94.1 ps Reaction : e_aq^-1 (-5290) + °OH^0 (-6168) -> OH^-1 (-11827) +At time : 94.1 ps Reaction : OH^-1 (-11827) + H3O^1 (-8407) -> No product +At time : 94.1 ps Reaction : OH^-1 (-11824) + H3O^1 (-6057) -> No product +At time : 95.1 ps Reaction : H3O^1 (-7399) + OH^-1 (-11826) -> No product +At time : 95.1 ps Reaction : H^0 (-11387) + H^0 (-9241) -> H_2^0 (-11828) +At time : 95.1 ps Reaction : °OH^0 (-10866) + H^0 (-9205) -> No product +At time : 95.1 ps Reaction : H^0 (-10392) + °OH^0 (-7444) -> No product +At time : 95.1 ps Reaction : °OH^0 (-9607) + °OH^0 (-5908) -> H2O2^0 (-11829) +At time : 95.1 ps Reaction : °OH^0 (-9430) + °OH^0 (-9431) -> H2O2^0 (-11830) +At time : 95.1 ps Reaction : °OH^0 (-7586) + °OH^0 (-8631) -> H2O2^0 (-11831) +At time : 95.1 ps Reaction : e_aq^-1 (-3555) + °OH^0 (-6298) -> OH^-1 (-11832) +At time : 96.1 ps Reaction : °OH^0 (-11403) + °OH^0 (-7442) -> H2O2^0 (-11833) +At time : 96.1 ps Reaction : °OH^0 (-11193) + °OH^0 (-7320) -> H2O2^0 (-11834) +At time : 96.1 ps Reaction : H^0 (-9774) + °OH^0 (-6612) -> No product +At time : 96.1 ps Reaction : OH^-1 (-5760) + H3O^1 (-6681) -> No product +At time : 97.1 ps Reaction : °OH^0 (-9622) + H^0 (-11343) -> No product +At time : 97.1 ps Reaction : H^0 (-11284) + °OH^0 (-6804) -> No product +At time : 97.1 ps Reaction : °OH^0 (-10192) + °OH^0 (-7134) -> H2O2^0 (-11835) +At time : 97.1 ps Reaction : °OH^0 (-9788) + °OH^0 (-6626) -> H2O2^0 (-11836) +At time : 97.1 ps Reaction : °OH^0 (-7156) + °OH^0 (-8254) -> H2O2^0 (-11837) +At time : 97.1 ps Reaction : e_aq^-1 (-3332) + H3O^1 (-5893) -> H^0 (-11838) +At time : 97.1 ps Reaction : °OH^0 (-6724) + °OH^0 (-8004) -> H2O2^0 (-11839) +At time : 98.1 ps Reaction : H3O^1 (-5883) + e_aq^-1 (-8807) -> H^0 (-11840) +At time : 99.1 ps Reaction : °OH^0 (-11412) + °OH^0 (-5874) -> H2O2^0 (-11841) +At time : 99.1 ps Reaction : °OH^0 (-9336) + °OH^0 (-10766) -> H2O2^0 (-11842) +At time : 99.1 ps Reaction : °OH^0 (-10229) + °OH^0 (-10231) -> H2O2^0 (-11843) +At time : 100.1 ps Reaction : °OH^0 (-10713) + e_aq^-1 (-3206) -> OH^-1 (-11844) +At time : 100.1 ps Reaction : °OH^0 (-5946) + °OH^0 (-6442) -> H2O2^0 (-11845) +At time : 100.1 ps Reaction : °OH^0 (-6210) + °OH^0 (-6212) -> H2O2^0 (-11846) +At time : 100.1 ps Reaction : H3O^1 (-10712) + OH^-1 (-11844) -> No product +At time : 101.1 ps Reaction : H^0 (-10728) + H^0 (-9169) -> H_2^0 (-11847) +At time : 101.1 ps Reaction : H^0 (-9487) + °OH^0 (-9490) -> No product +At time : 101.1 ps Reaction : °OH^0 (-6824) + °OH^0 (-6828) -> H2O2^0 (-11848) +At time : 111.1 ps Reaction : H3O^1 (-6233) + OH^-1 (-11799) -> No product +At time : 111.1 ps Reaction : OH^-1 (-11672) + H3O^1 (-8485) -> No product +At time : 111.1 ps Reaction : H^0 (-11655) + e_aq^-1 (-3563) -> OH^-1 (-11849) + H_2^0 (-11850) +At time : 111.1 ps Reaction : °OH^0 (-10748) + °OH^0 (-9644) -> H2O2^0 (-11851) +At time : 111.1 ps Reaction : °OH^0 (-10067) + °OH^0 (-10590) -> H2O2^0 (-11852) +At time : 111.1 ps Reaction : °OH^0 (-10523) + °OH^0 (-10249) -> H2O2^0 (-11853) +At time : 111.1 ps Reaction : H^0 (-10482) + °OH^0 (-8805) -> No product +At time : 111.1 ps Reaction : H^0 (-9840) + °OH^0 (-7750) -> No product +At time : 111.1 ps Reaction : °OH^0 (-9698) + °OH^0 (-7890) -> H2O2^0 (-11854) +At time : 111.1 ps Reaction : °OH^0 (-9565) + e_aq^-1 (-3487) -> OH^-1 (-11855) +At time : 111.1 ps Reaction : °OH^0 (-9479) + °OH^0 (-7368) -> H2O2^0 (-11856) +At time : 111.1 ps Reaction : °OH^0 (-9453) + °OH^0 (-8290) -> H2O2^0 (-11857) +At time : 111.1 ps Reaction : H^0 (-9397) + °OH^0 (-6854) -> No product +At time : 111.1 ps Reaction : H^0 (-9393) + °OH^0 (-8952) -> No product +At time : 111.1 ps Reaction : H^0 (-9350) + °OH^0 (-6468) -> No product +At time : 111.1 ps Reaction : °OH^0 (-7232) + °OH^0 (-7568) -> H2O2^0 (-11858) +At time : 111.1 ps Reaction : e_aq^-1 (-2318) + H3O^1 (-6703) -> H^0 (-11859) +At time : 111.1 ps Reaction : e_aq^-1 (-3685) + °OH^0 (-7874) -> OH^-1 (-11860) +At time : 121.1 ps Reaction : H3O^1 (-6441) + OH^-1 (-11860) -> No product +At time : 121.1 ps Reaction : OH^-1 (-11796) + H3O^1 (-7543) -> No product +At time : 121.1 ps Reaction : OH^-1 (-11626) + H3O^1 (-8824) -> No product +At time : 121.1 ps Reaction : H^0 (-11399) + °OH^0 (-10375) -> No product +At time : 121.1 ps Reaction : H^0 (-11347) + °OH^0 (-11349) -> No product +At time : 121.1 ps Reaction : H3O^1 (-11185) + e_aq^-1 (-8804) -> H^0 (-11861) +At time : 121.1 ps Reaction : °OH^0 (-10880) + °OH^0 (-8958) -> H2O2^0 (-11862) +At time : 121.1 ps Reaction : °OH^0 (-10858) + °OH^0 (-6792) -> H2O2^0 (-11863) +At time : 121.1 ps Reaction : °OH^0 (-10505) + °OH^0 (-8366) -> H2O2^0 (-11864) +At time : 121.1 ps Reaction : °OH^0 (-10372) + H^0 (-9261) -> No product +At time : 121.1 ps Reaction : °OH^0 (-10220) + °OH^0 (-9455) -> H2O2^0 (-11865) +At time : 121.1 ps Reaction : °OH^0 (-9995) + e_aq^-1 (-8585) -> OH^-1 (-11866) +At time : 121.1 ps Reaction : H3O^1 (-9648) + e_aq^-1 (-3637) -> H^0 (-11867) +At time : 121.1 ps Reaction : °OH^0 (-9274) + °OH^0 (-7708) -> H2O2^0 (-11868) +At time : 121.1 ps Reaction : °OH^0 (-7512) + °OH^0 (-8418) -> H2O2^0 (-11869) +At time : 121.1 ps Reaction : e_aq^-1 (-5115) + H3O^1 (-8349) -> H^0 (-11870) +At time : 121.1 ps Reaction : °OH^0 (-8222) + °OH^0 (-8226) -> H2O2^0 (-11871) +At time : 121.1 ps Reaction : °OH^0 (-7958) + °OH^0 (-7960) -> H2O2^0 (-11872) +At time : 121.1 ps Reaction : H3O^1 (-9992) + OH^-1 (-11866) -> No product +At time : 121.1 ps Reaction : e_aq^-1 (-3975) + °OH^0 (-5986) -> OH^-1 (-11873) +At time : 131.1 ps Reaction : H3O^1 (-9425) + OH^-1 (-11823) -> No product +At time : 131.1 ps Reaction : H3O^1 (-11256) + e_aq^-1 (-8609) -> H^0 (-11874) +At time : 131.1 ps Reaction : °OH^0 (-10783) + °OH^0 (-5773) -> H2O2^0 (-11875) +At time : 131.1 ps Reaction : °OH^0 (-10763) + °OH^0 (-5836) -> H2O2^0 (-11876) +At time : 131.1 ps Reaction : H^0 (-10650) + °OH^0 (-5858) -> No product +At time : 131.1 ps Reaction : H^0 (-10593) + H^0 (-9436) -> H_2^0 (-11877) +At time : 131.1 ps Reaction : H^0 (-10447) + e_aq^-1 (-5531) -> OH^-1 (-11878) + H_2^0 (-11879) +At time : 131.1 ps Reaction : H^0 (-10055) + °OH^0 (-9012) -> No product +At time : 131.1 ps Reaction : °OH^0 (-9458) + H^0 (-9121) -> No product +At time : 131.1 ps Reaction : H^0 (-9445) + °OH^0 (-7088) -> No product +At time : 131.1 ps Reaction : °OH^0 (-9383) + e_aq^-1 (-4040) -> OH^-1 (-11880) +At time : 131.1 ps Reaction : e_aq^-1 (-3428) + °OH^0 (-6246) -> OH^-1 (-11881) +At time : 131.1 ps Reaction : OH^-1 (-11878) + H3O^1 (-9106) -> No product +At time : 131.1 ps Reaction : °OH^0 (-10840) + °OH^0 (-11279) -> H2O2^0 (-11882) +At time : 131.1 ps Reaction : °OH^0 (-10628) + e_aq^-1 (-8972) -> OH^-1 (-11883) +At time : 131.1 ps Reaction : °OH^0 (-9482) + H^0 (-9495) -> No product +At time : 131.1 ps Reaction : e_aq^-1 (-4469) + °OH^0 (-6224) -> OH^-1 (-11884) +At time : 131.1 ps Reaction : e_aq^-1 (-3595) + °OH^0 (-5828) -> OH^-1 (-11885) +At time : 131.1 ps Reaction : OH^-1 (-11885) + H3O^1 (-5827) -> No product +At time : 141.1 ps Reaction : °OH^0 (-11360) + °OH^0 (-11362) -> H2O2^0 (-11886) +At time : 141.1 ps Reaction : °OH^0 (-11166) + °OH^0 (-10295) -> H2O2^0 (-11887) +At time : 141.1 ps Reaction : H3O^1 (-10830) + e_aq^-1 (-4022) -> H^0 (-11888) +At time : 141.1 ps Reaction : H^0 (-9380) + °OH^0 (-10826) -> No product +At time : 141.1 ps Reaction : H^0 (-10772) + °OH^0 (-6448) -> No product +At time : 141.1 ps Reaction : °OH^0 (-10432) + °OH^0 (-9494) -> H2O2^0 (-11889) +At time : 141.1 ps Reaction : °OH^0 (-10417) + °OH^0 (-10418) -> H2O2^0 (-11890) +At time : 141.1 ps Reaction : °OH^0 (-9838) + °OH^0 (-6720) -> H2O2^0 (-11891) +At time : 141.1 ps Reaction : °OH^0 (-9440) + °OH^0 (-7066) -> H2O2^0 (-11892) +At time : 141.1 ps Reaction : °OH^0 (-6646) + °OH^0 (-9194) -> H2O2^0 (-11893) +At time : 141.1 ps Reaction : °OH^0 (-8838) + °OH^0 (-8995) -> H2O2^0 (-11894) +At time : 141.1 ps Reaction : °OH^0 (-7656) + °OH^0 (-8144) -> H2O2^0 (-11895) +At time : 141.1 ps Reaction : °OH^0 (-8074) + °OH^0 (-8076) -> H2O2^0 (-11896) +At time : 141.1 ps Reaction : e_aq^-1 (-3967) + H3O^1 (-7987) -> H^0 (-11897) +At time : 141.1 ps Reaction : OH^-1 (-11722) + H3O^1 (-8719) -> No product +At time : 141.1 ps Reaction : °OH^0 (-10400) + °OH^0 (-9486) -> H2O2^0 (-11898) +At time : 141.1 ps Reaction : e_aq^-1 (-3474) + °OH^0 (-7794) -> OH^-1 (-11899) +At time : 151.1 ps Reaction : H3O^1 (-10957) + OH^-1 (-11884) -> No product +At time : 151.1 ps Reaction : OH^-1 (-11883) + H3O^1 (-5885) -> No product +At time : 151.1 ps Reaction : °OH^0 (-8054) + H^0 (-11719) -> No product +At time : 151.1 ps Reaction : °OH^0 (-11405) + °OH^0 (-6134) -> H2O2^0 (-11900) +At time : 151.1 ps Reaction : e_aq^-1 (-3480) + °OH^0 (-11338) -> OH^-1 (-11901) +At time : 151.1 ps Reaction : °OH^0 (-10102) + H^0 (-11019) -> No product +At time : 151.1 ps Reaction : °OH^0 (-10991) + e_aq^-1 (-9023) -> OH^-1 (-11902) +At time : 151.1 ps Reaction : °OH^0 (-10212) + e_aq^-1 (-8633) -> OH^-1 (-11903) +At time : 151.1 ps Reaction : H^0 (-10087) + °OH^0 (-8140) -> No product +At time : 151.1 ps Reaction : °OH^0 (-10013) + °OH^0 (-6228) -> H2O2^0 (-11904) +At time : 151.1 ps Reaction : e_aq^-1 (-3800) + H3O^1 (-9744) -> H^0 (-11905) +At time : 151.1 ps Reaction : H^0 (-9469) + °OH^0 (-7302) -> No product +At time : 151.1 ps Reaction : e_aq^-1 (-8549) + H^0 (-9245) -> OH^-1 (-11906) + H_2^0 (-11907) +At time : 151.1 ps Reaction : e_aq^-1 (-1650) + H3O^1 (-8710) -> H^0 (-11908) +At time : 151.1 ps Reaction : °OH^0 (-7316) + °OH^0 (-8406) -> H2O2^0 (-11909) +At time : 151.1 ps Reaction : °OH^0 (-5872) + °OH^0 (-8278) -> H2O2^0 (-11910) +At time : 151.1 ps Reaction : °OH^0 (-6450) + °OH^0 (-7886) -> H2O2^0 (-11911) +At time : 151.1 ps Reaction : °OH^0 (-11324) + °OH^0 (-11325) -> H2O2^0 (-11912) +At time : 151.1 ps Reaction : °OH^0 (-5962) + °OH^0 (-5964) -> H2O2^0 (-11913) +At time : 161.1 ps Reaction : OH^-1 (-11903) + H3O^1 (-7169) -> No product +At time : 161.1 ps Reaction : °OH^0 (-11255) + °OH^0 (-11259) -> H2O2^0 (-11914) +At time : 161.1 ps Reaction : e_aq^-1 (-5010) + H^0 (-10533) -> OH^-1 (-11915) + H_2^0 (-11916) +At time : 161.1 ps Reaction : °OH^0 (-10450) + °OH^0 (-8766) -> H2O2^0 (-11917) +At time : 161.1 ps Reaction : °OH^0 (-10235) + °OH^0 (-7226) -> H2O2^0 (-11918) +At time : 161.1 ps Reaction : H^0 (-9834) + °OH^0 (-5776) -> No product +At time : 161.1 ps Reaction : e_aq^-1 (-1307) + °OH^0 (-8727) -> OH^-1 (-11919) +At time : 161.1 ps Reaction : e_aq^-1 (-5305) + °OH^0 (-8613) -> OH^-1 (-11920) +At time : 161.1 ps Reaction : °OH^0 (-7064) + °OH^0 (-8164) -> H2O2^0 (-11921) +At time : 161.1 ps Reaction : e_aq^-1 (-4350) + °OH^0 (-8068) -> OH^-1 (-11922) +At time : 161.1 ps Reaction : °OH^0 (-6718) + °OH^0 (-7752) -> H2O2^0 (-11923) +At time : 161.1 ps Reaction : e_aq^-1 (-674) + °OH^0 (-7218) -> OH^-1 (-11924) +At time : 161.1 ps Reaction : e_aq^-1 (-3449) + °OH^0 (-5890) -> OH^-1 (-11925) +At time : 161.1 ps Reaction : °OH^0 (-10862) + °OH^0 (-6788) -> H2O2^0 (-11926) +At time : 161.1 ps Reaction : °OH^0 (-6230) + e_aq^-1 (-8579) -> OH^-1 (-11927) +At time : 161.1 ps Reaction : e_aq^-1 (-4807) + °OH^0 (-8216) -> OH^-1 (-11928) +At time : 161.1 ps Reaction : °OH^0 (-7112) + °OH^0 (-7612) -> H2O2^0 (-11929) +At time : 161.1 ps Reaction : OH^-1 (-11928) + H3O^1 (-8215) -> No product +At time : 171.1 ps Reaction : OH^-1 (-11927) + H3O^1 (-6229) -> No product +At time : 171.1 ps Reaction : H^0 (-11370) + °OH^0 (-10988) -> No product +At time : 171.1 ps Reaction : H3O^1 (-11219) + OH^-1 (-5724) -> No product +At time : 171.1 ps Reaction : H3O^1 (-10918) + OH^-1 (-5748) -> No product +At time : 171.1 ps Reaction : °OH^0 (-10638) + °OH^0 (-8044) -> H2O2^0 (-11930) +At time : 171.1 ps Reaction : H^0 (-10603) + e_aq^-1 (-8837) -> OH^-1 (-11931) + H_2^0 (-11932) +At time : 171.1 ps Reaction : °OH^0 (-10454) + °OH^0 (-8436) -> H2O2^0 (-11933) +At time : 171.1 ps Reaction : °OH^0 (-9831) + °OH^0 (-7998) -> H2O2^0 (-11934) +At time : 171.1 ps Reaction : °OH^0 (-9301) + H^0 (-9555) -> No product +At time : 171.1 ps Reaction : °OH^0 (-7076) + °OH^0 (-8196) -> H2O2^0 (-11935) +At time : 171.1 ps Reaction : e_aq^-1 (-1753) + °OH^0 (-6912) -> OH^-1 (-11936) +At time : 171.1 ps Reaction : °OH^0 (-7446) + °OH^0 (-7450) -> H2O2^0 (-11937) +At time : 181.1 ps Reaction : H3O^1 (-8069) + OH^-1 (-11922) -> No product +At time : 181.1 ps Reaction : OH^-1 (-11906) + H3O^1 (-8629) -> No product +At time : 181.1 ps Reaction : OH^-1 (-11681) + H3O^1 (-11072) -> No product +At time : 181.1 ps Reaction : °OH^0 (-11160) + °OH^0 (-10513) -> H2O2^0 (-11938) +At time : 181.1 ps Reaction : H^0 (-11146) + °OH^0 (-6102) -> No product +At time : 181.1 ps Reaction : °OH^0 (-10647) + H^0 (-9203) -> No product +At time : 181.1 ps Reaction : e_aq^-1 (-5256) + H^0 (-10324) -> OH^-1 (-11939) + H_2^0 (-11940) +At time : 181.1 ps Reaction : °OH^0 (-9828) + °OH^0 (-9824) -> H2O2^0 (-11941) +At time : 181.1 ps Reaction : °OH^0 (-9770) + °OH^0 (-6608) -> H2O2^0 (-11942) +At time : 181.1 ps Reaction : °OH^0 (-9600) + °OH^0 (-6290) -> H2O2^0 (-11943) +At time : 181.1 ps Reaction : °OH^0 (-6116) + H^0 (-9255) -> No product +At time : 181.1 ps Reaction : °OH^0 (-7572) + e_aq^-1 (-8756) -> OH^-1 (-11944) +At time : 181.1 ps Reaction : e_aq^-1 (-5040) + °OH^0 (-8316) -> OH^-1 (-11945) +At time : 181.1 ps Reaction : OH^-1 (-5730) + H3O^1 (-7023) -> No product +At time : 181.1 ps Reaction : e_aq^-1 (-4545) + °OH^0 (-5862) -> OH^-1 (-11946) +At time : 181.1 ps Reaction : OH^-1 (-11944) + H3O^1 (-8303) -> No product +At time : 181.1 ps Reaction : °OH^0 (-8595) + °OH^0 (-9242) -> H2O2^0 (-11947) +At time : 191.1 ps Reaction : H3O^1 (-7781) + OH^-1 (-11925) -> No product +At time : 191.1 ps Reaction : OH^-1 (-11899) + H3O^1 (-7793) -> No product +At time : 191.1 ps Reaction : H^0 (-11226) + e_aq^-1 (-5481) -> OH^-1 (-11948) + H_2^0 (-11949) +At time : 191.1 ps Reaction : °OH^0 (-10995) + °OH^0 (-11001) -> H2O2^0 (-11950) +At time : 191.1 ps Reaction : H^0 (-10914) + °OH^0 (-9214) -> No product +At time : 191.1 ps Reaction : °OH^0 (-10439) + H^0 (-10381) -> No product +At time : 191.1 ps Reaction : °OH^0 (-10150) + °OH^0 (-9136) -> H2O2^0 (-11951) +At time : 191.1 ps Reaction : H^0 (-10121) + °OH^0 (-7652) -> No product +At time : 191.1 ps Reaction : H^0 (-10079) + °OH^0 (-7016) -> No product +At time : 191.1 ps Reaction : H^0 (-9844) + °OH^0 (-6726) -> No product +At time : 191.1 ps Reaction : °OH^0 (-9656) + °OH^0 (-6370) -> H2O2^0 (-11952) +At time : 191.1 ps Reaction : °OH^0 (-9501) + °OH^0 (-7194) -> H2O2^0 (-11953) +At time : 191.1 ps Reaction : e_aq^-1 (-4532) + °OH^0 (-9222) -> OH^-1 (-11954) +At time : 191.1 ps Reaction : °OH^0 (-8523) + °OH^0 (-9009) -> H2O2^0 (-11955) +At time : 191.1 ps Reaction : °OH^0 (-8568) + e_aq^-1 (-8570) -> OH^-1 (-11956) +At time : 191.1 ps Reaction : H3O^1 (-8381) + e_aq^-1 (-8492) -> H^0 (-11957) +At time : 191.1 ps Reaction : °OH^0 (-7470) + °OH^0 (-8454) -> H2O2^0 (-11958) +At time : 191.1 ps Reaction : e_aq^-1 (-3796) + H3O^1 (-6541) -> H^0 (-11959) +At time : 191.1 ps Reaction : °OH^0 (-5864) + °OH^0 (-6056) -> H2O2^0 (-11960) +At time : 191.1 ps Reaction : e_aq^-1 (-4705) + °OH^0 (-7058) -> OH^-1 (-11961) +At time : 191.1 ps Reaction : OH^-1 (-11961) + H3O^1 (-8743) -> No product +At time : 201.1 ps Reaction : H3O^1 (-7309) + OH^-1 (-11939) -> No product +At time : 201.1 ps Reaction : H^0 (-11372) + °OH^0 (-10074) -> No product +At time : 201.1 ps Reaction : °OH^0 (-10917) + °OH^0 (-10916) -> H2O2^0 (-11962) +At time : 201.1 ps Reaction : °OH^0 (-10854) + °OH^0 (-6766) -> H2O2^0 (-11963) +At time : 201.1 ps Reaction : H^0 (-9497) + °OH^0 (-8442) -> No product +At time : 201.1 ps Reaction : °OH^0 (-8128) + H^0 (-9225) -> No product +At time : 201.1 ps Reaction : e_aq^-1 (-3826) + e_aq^-1 (-8681) -> OH^-1 (-11964) + OH^-1 (-11965) + H_2^0 (-11966) +At time : 201.1 ps Reaction : e_aq^-1 (-944) + °OH^0 (-7120) -> OH^-1 (-11967) +At time : 201.1 ps Reaction : e_aq^-1 (-8498) + °OH^0 (-8736) -> OH^-1 (-11968) +At time : 201.1 ps Reaction : OH^-1 (-11968) + H3O^1 (-8157) -> No product +At time : 211.1 ps Reaction : OH^-1 (-11946) + H3O^1 (-6989) -> No product +At time : 211.1 ps Reaction : °OH^0 (-8106) + H^0 (-11642) -> No product +At time : 211.1 ps Reaction : °OH^0 (-8172) + °OH^0 (-8180) -> H2O2^0 (-11969) +At time : 211.1 ps Reaction : e_aq^-1 (-5636) + H3O^1 (-7433) -> H^0 (-11970) +At time : 211.1 ps Reaction : e_aq^-1 (-3551) + °OH^0 (-6300) -> OH^-1 (-11971) +At time : 221.1 ps Reaction : OH^-1 (-11745) + H3O^1 (-10126) -> No product +At time : 221.1 ps Reaction : e_aq^-1 (-685) + H2O2^0 (-11460) -> OH^-1 (-11972) + °OH^0 (-11973) +At time : 221.1 ps Reaction : °OH^0 (-11388) + °OH^0 (-7160) -> H2O2^0 (-11974) +At time : 221.1 ps Reaction : °OH^0 (-6840) + H^0 (-11333) -> No product +At time : 221.1 ps Reaction : °OH^0 (-11263) + °OH^0 (-8601) -> H2O2^0 (-11975) +At time : 221.1 ps Reaction : H^0 (-10565) + e_aq^-1 (-991) -> OH^-1 (-11976) + H_2^0 (-11977) +At time : 221.1 ps Reaction : °OH^0 (-9935) + °OH^0 (-9210) -> H2O2^0 (-11978) +At time : 221.1 ps Reaction : °OH^0 (-6390) + °OH^0 (-9172) -> H2O2^0 (-11979) +At time : 221.1 ps Reaction : OH^-1 (-5751) + H3O^1 (-8518) -> No product +At time : 221.1 ps Reaction : e_aq^-1 (-397) + °OH^0 (-8398) -> OH^-1 (-11980) +At time : 221.1 ps Reaction : °OH^0 (-7146) + °OH^0 (-8246) -> H2O2^0 (-11981) +At time : 221.1 ps Reaction : e_aq^-1 (-4339) + H3O^1 (-8065) -> H^0 (-11982) +At time : 221.1 ps Reaction : °OH^0 (-7592) + °OH^0 (-7600) -> H2O2^0 (-11983) +At time : 221.1 ps Reaction : °OH^0 (-6752) + °OH^0 (-6758) -> H2O2^0 (-11984) +At time : 221.1 ps Reaction : °OH^0 (-10263) + °OH^0 (-7250) -> H2O2^0 (-11985) +At time : 221.1 ps Reaction : °OH^0 (-8384) + e_aq^-1 (-8813) -> OH^-1 (-11986) +At time : 231.1 ps Reaction : H3O^1 (-6111) + OH^-1 (-11980) -> No product +At time : 231.1 ps Reaction : OH^-1 (-11967) + H3O^1 (-7123) -> No product +At time : 231.1 ps Reaction : H3O^1 (-7315) + OH^-1 (-11920) -> No product +At time : 231.1 ps Reaction : °OH^0 (-11135) + e_aq^-1 (-5092) -> OH^-1 (-11987) +At time : 231.1 ps Reaction : H^0 (-10463) + °OH^0 (-10332) -> No product +At time : 231.1 ps Reaction : H^0 (-10422) + °OH^0 (-10421) -> No product +At time : 231.1 ps Reaction : H^0 (-10174) + e_aq^-1 (-1059) -> OH^-1 (-11988) + H_2^0 (-11989) +At time : 231.1 ps Reaction : H^0 (-10138) + °OH^0 (-6074) -> No product +At time : 231.1 ps Reaction : °OH^0 (-10054) + °OH^0 (-6994) -> H2O2^0 (-11990) +At time : 231.1 ps Reaction : e_aq^-1 (-4433) + H^0 (-10019) -> OH^-1 (-11991) + H_2^0 (-11992) +At time : 231.1 ps Reaction : °OH^0 (-9958) + °OH^0 (-8970) -> H2O2^0 (-11993) +At time : 231.1 ps Reaction : H^0 (-9428) + °OH^0 (-6042) -> No product +At time : 231.1 ps Reaction : e_aq^-1 (-8864) + H3O^1 (-8920) -> H^0 (-11994) +At time : 231.1 ps Reaction : H3O^1 (-7527) + e_aq^-1 (-8810) -> H^0 (-11995) +At time : 231.1 ps Reaction : OH^-1 (-5811) + H3O^1 (-8794) -> No product +At time : 231.1 ps Reaction : °OH^0 (-6876) + °OH^0 (-6880) -> H2O2^0 (-11996) +At time : 231.1 ps Reaction : e_aq^-1 (-5301) + e_aq^-1 (-5396) -> OH^-1 (-11997) + OH^-1 (-11998) + H_2^0 (-11999) +At time : 231.1 ps Reaction : OH^-1 (-11988) + H3O^1 (-8641) -> No product +At time : 231.1 ps Reaction : H3O^1 (-11134) + OH^-1 (-11987) -> No product +At time : 241.1 ps Reaction : H3O^1 (-10525) + OH^-1 (-11972) -> No product +At time : 241.1 ps Reaction : H3O^1 (-8447) + OH^-1 (-11948) -> No product +At time : 241.1 ps Reaction : H^0 (-11341) + °OH^0 (-9160) -> No product +At time : 241.1 ps Reaction : H^0 (-11247) + °OH^0 (-8480) -> No product +At time : 241.1 ps Reaction : H^0 (-10477) + °OH^0 (-7520) -> No product +At time : 241.1 ps Reaction : °OH^0 (-9991) + °OH^0 (-7690) -> H2O2^0 (-12000) +At time : 241.1 ps Reaction : °OH^0 (-6580) + °OH^0 (-8508) -> H2O2^0 (-12001) +At time : 241.1 ps Reaction : e_aq^-1 (-3593) + H3O^1 (-7849) -> H^0 (-12002) +At time : 241.1 ps Reaction : e_aq^-1 (-3697) + H3O^1 (-6467) -> H^0 (-12003) +At time : 251.1 ps Reaction : H2O2^0 (-11688) + e_aq^-1 (-8678) -> OH^-1 (-12004) + °OH^0 (-12005) +At time : 251.1 ps Reaction : °OH^0 (-11358) + °OH^0 (-10644) -> H2O2^0 (-12006) +At time : 251.1 ps Reaction : °OH^0 (-11253) + °OH^0 (-10413) -> H2O2^0 (-12007) +At time : 251.1 ps Reaction : °OH^0 (-11251) + H^0 (-10401) -> No product +At time : 251.1 ps Reaction : °OH^0 (-11171) + °OH^0 (-9464) -> H2O2^0 (-12008) +At time : 251.1 ps Reaction : °OH^0 (-10777) + °OH^0 (-9679) -> H2O2^0 (-12009) +At time : 251.1 ps Reaction : H^0 (-9376) + H^0 (-9806) -> H_2^0 (-12010) +At time : 251.1 ps Reaction : H^0 (-9782) + °OH^0 (-6236) -> No product +At time : 251.1 ps Reaction : H^0 (-9508) + e_aq^-1 (-4556) -> OH^-1 (-12011) + H_2^0 (-12012) +At time : 251.1 ps Reaction : e_aq^-1 (-3690) + H3O^1 (-7879) -> H^0 (-12013) +At time : 251.1 ps Reaction : e_aq^-1 (-3424) + °OH^0 (-6242) -> OH^-1 (-12014) +At time : 261.1 ps Reaction : OH^-1 (-11986) + H3O^1 (-7293) -> No product +At time : 261.1 ps Reaction : °OH^0 (-10912) + °OH^0 (-11285) -> H2O2^0 (-12015) +At time : 261.1 ps Reaction : H^0 (-10993) + °OH^0 (-6996) -> No product +At time : 261.1 ps Reaction : °OH^0 (-10319) + °OH^0 (-10323) -> H2O2^0 (-12016) +At time : 261.1 ps Reaction : H^0 (-10015) + °OH^0 (-9419) -> No product +At time : 261.1 ps Reaction : H^0 (-10009) + °OH^0 (-9218) -> No product +At time : 261.1 ps Reaction : °OH^0 (-6154) + °OH^0 (-8793) -> H2O2^0 (-12017) +At time : 261.1 ps Reaction : H3O^1 (-8527) + e_aq^-1 (-8528) -> H^0 (-12018) +At time : 261.1 ps Reaction : e_aq^-1 (-5078) + °OH^0 (-7562) -> OH^-1 (-12019) +At time : 261.1 ps Reaction : °OH^0 (-11342) + °OH^0 (-9166) -> H2O2^0 (-12020) +At time : 261.1 ps Reaction : H^0 (-10807) + H^0 (-10809) -> H_2^0 (-12021) +At time : 261.1 ps Reaction : H^0 (-10524) + °OH^0 (-7236) -> No product +At time : 271.1 ps Reaction : H^0 (-11212) + °OH^0 (-7336) -> No product +At time : 271.1 ps Reaction : °OH^0 (-9434) + H^0 (-10962) -> No product +At time : 271.1 ps Reaction : H^0 (-10642) + °OH^0 (-5794) -> No product +At time : 271.1 ps Reaction : °OH^0 (-10487) + °OH^0 (-8808) -> H2O2^0 (-12022) +At time : 271.1 ps Reaction : °OH^0 (-8580) + H^0 (-9213) -> No product +At time : 271.1 ps Reaction : e_aq^-1 (-1132) + °OH^0 (-8829) -> OH^-1 (-12023) +At time : 271.1 ps Reaction : e_aq^-1 (-5609) + e_aq^-1 (-8564) -> OH^-1 (-12024) + OH^-1 (-12025) + H_2^0 (-12026) +At time : 271.1 ps Reaction : °OH^0 (-7354) + °OH^0 (-8434) -> H2O2^0 (-12027) +At time : 271.1 ps Reaction : °OH^0 (-6086) + °OH^0 (-8276) -> H2O2^0 (-12028) +At time : 271.1 ps Reaction : e_aq^-1 (-3102) + H3O^1 (-7851) -> H^0 (-12029) +At time : 271.1 ps Reaction : °OH^0 (-6110) + °OH^0 (-7292) -> H2O2^0 (-12030) +At time : 271.1 ps Reaction : e_aq^-1 (-3587) + H3O^1 (-6321) -> H^0 (-12031) +At time : 271.1 ps Reaction : OH^-1 (-11849) + H3O^1 (-7827) -> No product +At time : 281.1 ps Reaction : OH^-1 (-11901) + H3O^1 (-6255) -> No product +At time : 281.1 ps Reaction : °OH^0 (-10438) + °OH^0 (-8464) -> H2O2^0 (-12032) +At time : 281.1 ps Reaction : °OH^0 (-10127) + °OH^0 (-5866) -> H2O2^0 (-12033) +At time : 281.1 ps Reaction : °OH^0 (-9720) + °OH^0 (-5956) -> H2O2^0 (-12034) +At time : 281.1 ps Reaction : °OH^0 (-9660) + °OH^0 (-6384) -> H2O2^0 (-12035) +At time : 281.1 ps Reaction : °OH^0 (-9047) + H^0 (-9231) -> No product +At time : 281.1 ps Reaction : H3O^1 (-8974) + e_aq^-1 (-8975) -> H^0 (-12036) +At time : 281.1 ps Reaction : e_aq^-1 (-4806) + e_aq^-1 (-8540) -> OH^-1 (-12037) + OH^-1 (-12038) + H_2^0 (-12039) +At time : 281.1 ps Reaction : °OH^0 (-8262) + °OH^0 (-8264) -> H2O2^0 (-12040) +At time : 281.1 ps Reaction : e_aq^-1 (-4214) + °OH^0 (-7716) -> OH^-1 (-12041) +At time : 281.1 ps Reaction : OH^-1 (-5814) + H3O^1 (-7461) -> No product +At time : 281.1 ps Reaction : °OH^0 (-7140) + °OH^0 (-7144) -> H2O2^0 (-12042) +At time : 281.1 ps Reaction : H3O^1 (-5955) + OH^-1 (-12004) -> No product +At time : 291.1 ps Reaction : OH^-1 (-11991) + H3O^1 (-8099) -> No product +At time : 291.1 ps Reaction : °OH^0 (-11222) + e_aq^-1 (-5504) -> OH^-1 (-12043) +At time : 291.1 ps Reaction : °OH^0 (-10351) + H^0 (-9119) -> No product +At time : 291.1 ps Reaction : H^0 (-10196) + e_aq^-1 (-4860) -> OH^-1 (-12044) + H_2^0 (-12045) +At time : 291.1 ps Reaction : °OH^0 (-9732) + H^0 (-9730) -> No product +At time : 291.1 ps Reaction : °OH^0 (-8014) + e_aq^-1 (-8852) -> OH^-1 (-12046) +At time : 291.1 ps Reaction : °OH^0 (-7838) + °OH^0 (-7840) -> H2O2^0 (-12047) +At time : 291.1 ps Reaction : H3O^1 (-11221) + OH^-1 (-12043) -> No product +At time : 291.1 ps Reaction : e_aq^-1 (-4697) + H3O^1 (-6207) -> H^0 (-12048) +At time : 301.1 ps Reaction : e_aq^-1 (-5273) + °OH^0 (-11182) -> OH^-1 (-12049) +At time : 301.1 ps Reaction : °OH^0 (-10134) + °OH^0 (-8162) -> H2O2^0 (-12050) +At time : 301.1 ps Reaction : e_aq^-1 (-4442) + °OH^0 (-10003) -> OH^-1 (-12051) +At time : 301.1 ps Reaction : H^0 (-9772) + °OH^0 (-7944) -> No product +At time : 301.1 ps Reaction : H^0 (-9443) + °OH^0 (-8210) -> No product +At time : 301.1 ps Reaction : OH^-1 (-12049) + H3O^1 (-8399) -> No product +At time : 301.1 ps Reaction : °OH^0 (-10329) + H^0 (-10330) -> No product +At time : 301.1 ps Reaction : e_aq^-1 (-1614) + °OH^0 (-6044) -> OH^-1 (-12052) +At time : 311.1 ps Reaction : H3O^1 (-6751) + OH^-1 (-12046) -> No product +At time : 311.1 ps Reaction : H3O^1 (-5911) + OH^-1 (-11971) -> No product +At time : 311.1 ps Reaction : H3O^1 (-6691) + OH^-1 (-11873) -> No product +At time : 311.1 ps Reaction : °OH^0 (-10145) + °OH^0 (-11059) -> H2O2^0 (-12053) +At time : 311.1 ps Reaction : °OH^0 (-10958) + °OH^0 (-8112) -> H2O2^0 (-12054) +At time : 311.1 ps Reaction : °OH^0 (-10078) + °OH^0 (-9030) -> H2O2^0 (-12055) +At time : 311.1 ps Reaction : H^0 (-9967) + e_aq^-1 (-4327) -> OH^-1 (-12056) + H_2^0 (-12057) +At time : 311.1 ps Reaction : °OH^0 (-6400) + °OH^0 (-6404) -> H2O2^0 (-12058) +At time : 311.1 ps Reaction : H3O^1 (-9964) + OH^-1 (-12056) -> No product +At time : 311.1 ps Reaction : e_aq^-1 (-1055) + °OH^0 (-9130) -> OH^-1 (-12059) +At time : 321.1 ps Reaction : OH^-1 (-12023) + H3O^1 (-7059) -> No product +At time : 321.1 ps Reaction : OH^-1 (-11902) + H3O^1 (-10985) -> No product +At time : 321.1 ps Reaction : °OH^0 (-11073) + °OH^0 (-8535) -> H2O2^0 (-12060) +At time : 321.1 ps Reaction : °OH^0 (-10581) + °OH^0 (-10118) -> H2O2^0 (-12061) +At time : 321.1 ps Reaction : H3O^1 (-10346) + e_aq^-1 (-8795) -> H^0 (-12062) +At time : 321.1 ps Reaction : °OH^0 (-10028) + °OH^0 (-6946) -> H2O2^0 (-12063) +At time : 321.1 ps Reaction : °OH^0 (-9888) + °OH^0 (-5785) -> H2O2^0 (-12064) +At time : 321.1 ps Reaction : H^0 (-9267) + e_aq^-1 (-3469) -> OH^-1 (-12065) + H_2^0 (-12066) +At time : 321.1 ps Reaction : °OH^0 (-8024) + °OH^0 (-9150) -> H2O2^0 (-12067) +At time : 321.1 ps Reaction : e_aq^-1 (-8960) + H^0 (-9147) -> OH^-1 (-12068) + H_2^0 (-12069) +At time : 321.1 ps Reaction : °OH^0 (-8026) + °OH^0 (-8847) -> H2O2^0 (-12070) +At time : 321.1 ps Reaction : °OH^0 (-6072) + e_aq^-1 (-8735) -> OH^-1 (-12071) +At time : 321.1 ps Reaction : °OH^0 (-8282) + °OH^0 (-8625) -> H2O2^0 (-12072) +At time : 321.1 ps Reaction : °OH^0 (-6952) + °OH^0 (-7680) -> H2O2^0 (-12073) +At time : 321.1 ps Reaction : e_aq^-1 (-5411) + °OH^0 (-7496) -> OH^-1 (-12074) +At time : 321.1 ps Reaction : e_aq^-1 (-5656) + °OH^0 (-7406) -> OH^-1 (-12075) +At time : 321.1 ps Reaction : H3O^1 (-11409) + OH^-1 (-12075) -> No product +At time : 331.1 ps Reaction : H3O^1 (-7085) + OH^-1 (-12038) -> No product +At time : 331.1 ps Reaction : OH^-1 (-12019) + H3O^1 (-7557) -> No product +At time : 331.1 ps Reaction : H3O^1 (-8091) + OH^-1 (-11817) -> No product +At time : 331.1 ps Reaction : H^0 (-10954) + °OH^0 (-6950) -> No product +At time : 331.1 ps Reaction : °OH^0 (-10860) + e_aq^-1 (-8849) -> OH^-1 (-12076) +At time : 331.1 ps Reaction : °OH^0 (-10203) + °OH^0 (-10206) -> H2O2^0 (-12077) +At time : 331.1 ps Reaction : H^0 (-10202) + °OH^0 (-8256) -> No product +At time : 331.1 ps Reaction : °OH^0 (-9880) + °OH^0 (-5998) -> H2O2^0 (-12078) +At time : 331.1 ps Reaction : e_aq^-1 (-3627) + H3O^1 (-8671) -> H^0 (-12079) +At time : 331.1 ps Reaction : °OH^0 (-7052) + °OH^0 (-8529) -> H2O2^0 (-12080) +At time : 331.1 ps Reaction : e_aq^-1 (-1179) + e_aq^-1 (-4733) -> OH^-1 (-12081) + OH^-1 (-12082) + H_2^0 (-12083) +At time : 331.1 ps Reaction : OH^-1 (-12082) + H3O^1 (-7055) -> No product +At time : 341.1 ps Reaction : °OH^0 (-11210) + °OH^0 (-11216) -> H2O2^0 (-12084) +At time : 341.1 ps Reaction : °OH^0 (-11173) + °OH^0 (-10495) -> H2O2^0 (-12085) +At time : 341.1 ps Reaction : °OH^0 (-10972) + °OH^0 (-10034) -> H2O2^0 (-12086) +At time : 341.1 ps Reaction : °OH^0 (-10927) + H^0 (-9983) -> No product +At time : 341.1 ps Reaction : °OH^0 (-10718) + °OH^0 (-9608) -> H2O2^0 (-12087) +At time : 341.1 ps Reaction : °OH^0 (-10502) + H^0 (-10273) -> No product +At time : 341.1 ps Reaction : °OH^0 (-8178) + °OH^0 (-8188) -> H2O2^0 (-12088) +At time : 351.1 ps Reaction : OH^-1 (-11774) + H3O^1 (-6995) -> No product +At time : 351.1 ps Reaction : e_aq^-1 (-4277) + H^0 (-10902) -> OH^-1 (-12089) + H_2^0 (-12090) +At time : 351.1 ps Reaction : H3O^1 (-10026) + e_aq^-1 (-1568) -> H^0 (-12091) +At time : 351.1 ps Reaction : °OH^0 (-7380) + °OH^0 (-8790) -> H2O2^0 (-12092) +At time : 351.1 ps Reaction : °OH^0 (-7328) + °OH^0 (-8414) -> H2O2^0 (-12093) +At time : 351.1 ps Reaction : e_aq^-1 (-2327) + °OH^0 (-5761) -> OH^-1 (-12094) +At time : 351.1 ps Reaction : H^0 (-10178) + °OH^0 (-9442) -> No product +At time : 361.1 ps Reaction : H3O^1 (-10335) + OH^-1 (-12074) -> No product +At time : 361.1 ps Reaction : OH^-1 (-12024) + H3O^1 (-8608) -> No product +At time : 361.1 ps Reaction : H^0 (-11408) + °OH^0 (-9111) -> No product +At time : 361.1 ps Reaction : H^0 (-9370) + °OH^0 (-11350) -> No product +At time : 361.1 ps Reaction : °OH^0 (-11308) + °OH^0 (-10448) -> H2O2^0 (-12095) +At time : 361.1 ps Reaction : °OH^0 (-11261) + e_aq^-1 (-5679) -> OH^-1 (-12096) +At time : 361.1 ps Reaction : °OH^0 (-11138) + e_aq^-1 (-5066) -> OH^-1 (-12097) +At time : 361.1 ps Reaction : °OH^0 (-10884) + °OH^0 (-10892) -> H2O2^0 (-12098) +At time : 361.1 ps Reaction : °OH^0 (-10825) + °OH^0 (-6664) -> H2O2^0 (-12099) +At time : 361.1 ps Reaction : H^0 (-10640) + °OH^0 (-6850) -> No product +At time : 361.1 ps Reaction : °OH^0 (-10181) + e_aq^-1 (-1042) -> OH^-1 (-12100) +At time : 361.1 ps Reaction : °OH^0 (-9709) + °OH^0 (-6492) -> H2O2^0 (-12101) +At time : 361.1 ps Reaction : e_aq^-1 (-1207) + H3O^1 (-8163) -> H^0 (-12102) +At time : 361.1 ps Reaction : e_aq^-1 (-3516) + °OH^0 (-5904) -> OH^-1 (-12103) +At time : 371.1 ps Reaction : OH^-1 (-12096) + H3O^1 (-7411) -> No product +At time : 371.1 ps Reaction : H^0 (-10952) + °OH^0 (-7682) -> No product +At time : 371.1 ps Reaction : °OH^0 (-10734) + °OH^0 (-6356) -> H2O2^0 (-12104) +At time : 371.1 ps Reaction : °OH^0 (-10405) + °OH^0 (-10412) -> H2O2^0 (-12105) +At time : 371.1 ps Reaction : °OH^0 (-10383) + °OH^0 (-8466) -> H2O2^0 (-12106) +At time : 371.1 ps Reaction : H^0 (-10269) + °OH^0 (-7252) -> No product +At time : 371.1 ps Reaction : H^0 (-10243) + °OH^0 (-6184) -> No product +At time : 371.1 ps Reaction : H^0 (-10163) + °OH^0 (-10157) -> No product +At time : 371.1 ps Reaction : °OH^0 (-10064) + °OH^0 (-6218) -> H2O2^0 (-12107) +At time : 371.1 ps Reaction : °OH^0 (-9362) + °OH^0 (-9734) -> H2O2^0 (-12108) +At time : 371.1 ps Reaction : e_aq^-1 (-5514) + °OH^0 (-8478) -> OH^-1 (-12109) +At time : 371.1 ps Reaction : e_aq^-1 (-4987) + H3O^1 (-7577) -> H^0 (-12110) +At time : 371.1 ps Reaction : e_aq^-1 (-5399) + °OH^0 (-7498) -> OH^-1 (-12111) +At time : 371.1 ps Reaction : OH^-1 (-12109) + H3O^1 (-8477) -> No product +At time : 371.1 ps Reaction : H3O^1 (-10233) + OH^-1 (-11924) -> No product +At time : 381.1 ps Reaction : H3O^1 (-5903) + OH^-1 (-12103) -> No product +At time : 381.1 ps Reaction : OH^-1 (-12059) + H3O^1 (-8195) -> No product +At time : 381.1 ps Reaction : H3O^1 (-6941) + OH^-1 (-12052) -> No product +At time : 381.1 ps Reaction : OH^-1 (-12025) + H3O^1 (-8479) -> No product +At time : 381.1 ps Reaction : °OH^0 (-10344) + °OH^0 (-7356) -> H2O2^0 (-12112) +At time : 381.1 ps Reaction : °OH^0 (-9421) + e_aq^-1 (-4415) -> OH^-1 (-12113) +At time : 381.1 ps Reaction : °OH^0 (-7448) + °OH^0 (-8562) -> H2O2^0 (-12114) +At time : 381.1 ps Reaction : °OH^0 (-5900) + °OH^0 (-7810) -> H2O2^0 (-12115) +At time : 381.1 ps Reaction : °OH^0 (-6970) + °OH^0 (-6976) -> H2O2^0 (-12116) +At time : 391.1 ps Reaction : OH^-1 (-12100) + H3O^1 (-8213) -> No product +At time : 391.1 ps Reaction : °OH^0 (-11383) + °OH^0 (-7102) -> H2O2^0 (-12117) +At time : 391.1 ps Reaction : H^0 (-10982) + °OH^0 (-6050) -> No product +At time : 391.1 ps Reaction : °OH^0 (-10592) + °OH^0 (-6990) -> H2O2^0 (-12118) +At time : 391.1 ps Reaction : °OH^0 (-9867) + °OH^0 (-8940) -> H2O2^0 (-12119) +At time : 391.1 ps Reaction : °OH^0 (-9846) + °OH^0 (-8856) -> H2O2^0 (-12120) +At time : 401.1 ps Reaction : H3O^1 (-10135) + OH^-1 (-12081) -> No product +At time : 401.1 ps Reaction : H^0 (-11389) + °OH^0 (-6196) -> No product +At time : 401.1 ps Reaction : H3O^1 (-10810) + e_aq^-1 (-2479) -> H^0 (-12121) +At time : 401.1 ps Reaction : °OH^0 (-10017) + °OH^0 (-8997) -> H2O2^0 (-12122) +At time : 401.1 ps Reaction : °OH^0 (-9027) + e_aq^-1 (-9029) -> OH^-1 (-12123) +At time : 401.1 ps Reaction : e_aq^-1 (-2079) + °OH^0 (-8949) -> OH^-1 (-12124) +At time : 401.1 ps Reaction : e_aq^-1 (-3815) + °OH^0 (-6556) -> OH^-1 (-12125) +At time : 401.1 ps Reaction : e_aq^-1 (-2777) + H3O^1 (-6473) -> H^0 (-12126) +At time : 401.1 ps Reaction : °OH^0 (-6254) + °OH^0 (-6256) -> H2O2^0 (-12127) +At time : 401.1 ps Reaction : °OH^0 (-6258) + °OH^0 (-7796) -> H2O2^0 (-12128) +At time : 411.1 ps Reaction : OH^-1 (-12111) + H3O^1 (-7493) -> No product +At time : 411.1 ps Reaction : OH^-1 (-11956) + H3O^1 (-6587) -> No product +At time : 411.1 ps Reaction : H^0 (-10730) + H^0 (-11718) -> H_2^0 (-12129) +At time : 411.1 ps Reaction : H^0 (-11393) + e_aq^-1 (-5137) -> OH^-1 (-12130) + H_2^0 (-12131) +At time : 411.1 ps Reaction : H^0 (-10367) + °OH^0 (-6148) -> No product +At time : 411.1 ps Reaction : °OH^0 (-10046) + e_aq^-1 (-9017) -> OH^-1 (-12132) +At time : 411.1 ps Reaction : H^0 (-9617) + e_aq^-1 (-3552) -> OH^-1 (-12133) + H_2^0 (-12134) +At time : 411.1 ps Reaction : °OH^0 (-9347) + °OH^0 (-6466) -> H2O2^0 (-12135) +At time : 411.1 ps Reaction : °OH^0 (-5972) + °OH^0 (-7766) -> H2O2^0 (-12136) +At time : 411.1 ps Reaction : e_aq^-1 (-3989) + H3O^1 (-5985) -> H^0 (-12137) +At time : 411.1 ps Reaction : e_aq^-1 (-5542) + °OH^0 (-7386) -> OH^-1 (-12138) +At time : 421.1 ps Reaction : H3O^1 (-6735) + OH^-1 (-11880) -> No product +At time : 421.1 ps Reaction : H^0 (-10143) + H^0 (-11050) -> H_2^0 (-12139) +At time : 421.1 ps Reaction : °OH^0 (-9316) + °OH^0 (-10691) -> H2O2^0 (-12140) +At time : 421.1 ps Reaction : °OH^0 (-10649) + °OH^0 (-9863) -> H2O2^0 (-12141) +At time : 421.1 ps Reaction : °OH^0 (-10635) + °OH^0 (-6018) -> H2O2^0 (-12142) +At time : 421.1 ps Reaction : °OH^0 (-9745) + °OH^0 (-7930) -> H2O2^0 (-12143) +At time : 421.1 ps Reaction : H3O^1 (-10045) + OH^-1 (-12132) -> No product +At time : 421.1 ps Reaction : e_aq^-1 (-5035) + H3O^1 (-7565) -> H^0 (-12144) +At time : 431.1 ps Reaction : OH^-1 (-12071) + H3O^1 (-8167) -> No product +At time : 431.1 ps Reaction : OH^-1 (-11855) + H3O^1 (-7797) -> No product +At time : 431.1 ps Reaction : °OH^0 (-10770) + e_aq^-1 (-3699) -> OH^-1 (-12145) +At time : 431.1 ps Reaction : °OH^0 (-6486) + °OH^0 (-7896) -> H2O2^0 (-12146) +At time : 431.1 ps Reaction : °OH^0 (-6638) + °OH^0 (-6644) -> H2O2^0 (-12147) +At time : 431.1 ps Reaction : e_aq^-1 (-3512) + H3O^1 (-6265) -> H^0 (-12148) +At time : 431.1 ps Reaction : e_aq^-1 (-3559) + °OH^0 (-5916) -> OH^-1 (-12149) +At time : 431.1 ps Reaction : OH^-1 (-12145) + H3O^1 (-7881) -> No product +At time : 441.1 ps Reaction : OH^-1 (-12051) + H3O^1 (-8839) -> No product +At time : 441.1 ps Reaction : H3O^1 (-10877) + OH^-1 (-12041) -> No product +At time : 441.1 ps Reaction : °OH^0 (-10613) + °OH^0 (-11290) -> H2O2^0 (-12150) +At time : 441.1 ps Reaction : e_aq^-1 (-4639) + H3O^1 (-8734) -> H^0 (-12151) +At time : 441.1 ps Reaction : e_aq^-1 (-2980) + °OH^0 (-5932) -> OH^-1 (-12152) +At time : 441.1 ps Reaction : °OH^0 (-10619) + e_aq^-1 (-1754) -> OH^-1 (-12153) +At time : 441.1 ps Reaction : e_aq^-1 (-4134) + °OH^0 (-7724) -> OH^-1 (-12154) +At time : 441.1 ps Reaction : e_aq^-1 (-3131) + °OH^0 (-6324) -> OH^-1 (-12155) +At time : 451.1 ps Reaction : H^0 (-11280) + °OH^0 (-9855) -> No product +At time : 451.1 ps Reaction : °OH^0 (-11170) + H^0 (-10308) -> No product +At time : 451.1 ps Reaction : °OH^0 (-11102) + °OH^0 (-7588) -> H2O2^0 (-12156) +At time : 451.1 ps Reaction : e_aq^-1 (-1667) + H3O^1 (-10943) -> H^0 (-12157) +At time : 451.1 ps Reaction : °OH^0 (-9286) + H^0 (-10910) -> No product +At time : 451.1 ps Reaction : °OH^0 (-10632) + °OH^0 (-9941) -> H2O2^0 (-12158) +At time : 451.1 ps Reaction : °OH^0 (-9379) + e_aq^-1 (-8927) -> OH^-1 (-12159) +At time : 451.1 ps Reaction : e_aq^-1 (-405) + H3O^1 (-8391) -> H^0 (-12160) +At time : 451.1 ps Reaction : °OH^0 (-6988) + °OH^0 (-7672) -> H2O2^0 (-12161) +At time : 451.1 ps Reaction : °OH^0 (-5984) + °OH^0 (-6678) -> H2O2^0 (-12162) +At time : 451.1 ps Reaction : OH^-1 (-12138) + H3O^1 (-8463) -> No product +At time : 451.1 ps Reaction : °OH^0 (-9066) + e_aq^-1 (-9068) -> OH^-1 (-12163) +At time : 461.1 ps Reaction : OH^-1 (-12097) + H3O^1 (-8351) -> No product +At time : 461.1 ps Reaction : °OH^0 (-10266) + °OH^0 (-7260) -> H2O2^0 (-12164) +At time : 461.1 ps Reaction : °OH^0 (-10005) + °OH^0 (-10000) -> H2O2^0 (-12165) +At time : 461.1 ps Reaction : °OH^0 (-9649) + °OH^0 (-7862) -> H2O2^0 (-12166) +At time : 461.1 ps Reaction : e_aq^-1 (-3520) + H3O^1 (-6267) -> H^0 (-12167) +At time : 461.1 ps Reaction : e_aq^-1 (-3999) + °OH^0 (-8000) -> OH^-1 (-12168) +At time : 461.1 ps Reaction : e_aq^-1 (-4154) + °OH^0 (-6010) -> OH^-1 (-12169) +At time : 461.1 ps Reaction : OH^-1 (-12169) + H3O^1 (-6815) -> No product +At time : 471.1 ps Reaction : OH^-1 (-12130) + H3O^1 (-7545) -> No product +At time : 471.1 ps Reaction : H3O^1 (-6775) + OH^-1 (-12076) -> No product +At time : 471.1 ps Reaction : OH^-1 (-11965) + H3O^1 (-7769) -> No product +At time : 471.1 ps Reaction : °OH^0 (-11071) + H^0 (-10161) -> No product +At time : 471.1 ps Reaction : °OH^0 (-9507) + H^0 (-11007) -> No product +At time : 471.1 ps Reaction : °OH^0 (-10471) + °OH^0 (-10475) -> H2O2^0 (-12170) +At time : 471.1 ps Reaction : °OH^0 (-10287) + °OH^0 (-7268) -> H2O2^0 (-12171) +At time : 471.1 ps Reaction : °OH^0 (-10125) + e_aq^-1 (-8741) -> OH^-1 (-12172) +At time : 471.1 ps Reaction : H^0 (-9567) + °OH^0 (-8877) -> No product +At time : 471.1 ps Reaction : H^0 (-9493) + °OH^0 (-5820) -> No product +At time : 471.1 ps Reaction : °OH^0 (-9048) + H^0 (-9131) -> No product +At time : 471.1 ps Reaction : H3O^1 (-6195) + e_aq^-1 (-8828) -> H^0 (-12173) +At time : 471.1 ps Reaction : e_aq^-1 (-806) + e_aq^-1 (-4956) -> OH^-1 (-12174) + OH^-1 (-12175) + H_2^0 (-12176) +At time : 481.1 ps Reaction : H^0 (-11994) + e_aq^-1 (-3962) -> OH^-1 (-12177) + H_2^0 (-12178) +At time : 481.1 ps Reaction : e_aq^-1 (-1781) + H2O2^0 (-11537) -> OH^-1 (-12179) + °OH^0 (-12180) +At time : 481.1 ps Reaction : H^0 (-11097) + °OH^0 (-7594) -> No product +At time : 481.1 ps Reaction : °OH^0 (-10162) + e_aq^-1 (-4741) -> OH^-1 (-12181) +At time : 481.1 ps Reaction : °OH^0 (-9779) + °OH^0 (-7948) -> H2O2^0 (-12182) +At time : 481.1 ps Reaction : °OH^0 (-6776) + °OH^0 (-9148) -> H2O2^0 (-12183) +At time : 481.1 ps Reaction : OH^-1 (-12177) + H3O^1 (-7755) -> No product +At time : 481.1 ps Reaction : OH^-1 (-12133) + H3O^1 (-7821) -> No product +At time : 481.1 ps Reaction : H^0 (-11288) + °OH^0 (-7688) -> No product +At time : 491.1 ps Reaction : H3O^1 (-9845) + OH^-1 (-12168) -> No product +At time : 491.1 ps Reaction : OH^-1 (-12159) + H3O^1 (-5855) -> No product +At time : 491.1 ps Reaction : OH^-1 (-12153) + H3O^1 (-6913) -> No product +At time : 491.1 ps Reaction : H2O2^0 (-11445) + e_aq^-1 (-3797) -> OH^-1 (-12184) + °OH^0 (-12185) +At time : 491.1 ps Reaction : H^0 (-9329) + °OH^0 (-7826) -> No product +At time : 491.1 ps Reaction : °OH^0 (-9328) + °OH^0 (-7828) -> H2O2^0 (-12186) +At time : 491.1 ps Reaction : H3O^1 (-8417) + e_aq^-1 (-8558) -> H^0 (-12187) +At time : 501.1 ps Reaction : OH^-1 (-12154) + H3O^1 (-9908) -> No product +At time : 501.1 ps Reaction : OH^-1 (-12065) + H3O^1 (-6249) -> No product +At time : 501.1 ps Reaction : H^0 (-11572) + °OH^0 (-8640) -> No product +At time : 501.1 ps Reaction : e_aq^-1 (-978) + H3O^1 (-11092) -> H^0 (-12188) +At time : 501.1 ps Reaction : °OH^0 (-10811) + °OH^0 (-7764) -> H2O2^0 (-12189) +At time : 501.1 ps Reaction : H3O^1 (-10133) + e_aq^-1 (-8738) -> H^0 (-12190) +At time : 501.1 ps Reaction : H^0 (-9613) + °OH^0 (-6304) -> No product +At time : 501.1 ps Reaction : e_aq^-1 (-696) + H3O^1 (-8323) -> H^0 (-12191) +At time : 501.1 ps Reaction : e_aq^-1 (-4827) + H3O^1 (-7133) -> H^0 (-12192) +At time : 511.1 ps Reaction : H3O^1 (-6901) + OH^-1 (-12179) -> No product +At time : 511.1 ps Reaction : OH^-1 (-12125) + H3O^1 (-7919) -> No product +At time : 511.1 ps Reaction : OH^-1 (-12124) + H3O^1 (-6011) -> No product +At time : 511.1 ps Reaction : e_aq^-1 (-2507) + H^0 (-11337) -> OH^-1 (-12193) + H_2^0 (-12194) +At time : 511.1 ps Reaction : e_aq^-1 (-99) + °OH^0 (-10390) -> OH^-1 (-12195) +At time : 511.1 ps Reaction : H^0 (-9802) + e_aq^-1 (-2393) -> OH^-1 (-12196) + H_2^0 (-12197) +At time : 511.1 ps Reaction : °OH^0 (-9473) + °OH^0 (-7348) -> H2O2^0 (-12198) +At time : 511.1 ps Reaction : e_aq^-1 (-4479) + °OH^0 (-6972) -> OH^-1 (-12199) +At time : 511.1 ps Reaction : °OH^0 (-6958) + °OH^0 (-6964) -> H2O2^0 (-12200) +At time : 511.1 ps Reaction : e_aq^-1 (-3123) + H3O^1 (-6315) -> H^0 (-12201) +At time : 511.1 ps Reaction : e_aq^-1 (-5684) + e_aq^-1 (-5610) -> OH^-1 (-12202) + OH^-1 (-12203) + H_2^0 (-12204) +At time : 521.1 ps Reaction : OH^-1 (-12172) + H3O^1 (-8833) -> No product +At time : 521.1 ps Reaction : H^0 (-10926) + °OH^0 (-6934) -> No product +At time : 521.1 ps Reaction : °OH^0 (-10599) + °OH^0 (-9516) -> H2O2^0 (-12205) +At time : 521.1 ps Reaction : e_aq^-1 (-4423) + °OH^0 (-9418) -> OH^-1 (-12206) +At time : 531.1 ps Reaction : °OH^0 (-10768) + °OH^0 (-9672) -> H2O2^0 (-12207) +At time : 531.1 ps Reaction : °OH^0 (-9882) + °OH^0 (-6772) -> H2O2^0 (-12208) +At time : 531.1 ps Reaction : H^0 (-9763) + e_aq^-1 (-3878) -> OH^-1 (-12209) + H_2^0 (-12210) +At time : 531.1 ps Reaction : e_aq^-1 (-4388) + H3O^1 (-7685) -> H^0 (-12211) +At time : 531.1 ps Reaction : OH^-1 (-12209) + H3O^1 (-6607) -> No product +At time : 531.1 ps Reaction : H^0 (-10595) + °OH^0 (-10980) -> No product +At time : 541.1 ps Reaction : H3O^1 (-6313) + OH^-1 (-12155) -> No product +At time : 541.1 ps Reaction : °OH^0 (-11129) + °OH^0 (-8754) -> H2O2^0 (-12212) +At time : 541.1 ps Reaction : H3O^1 (-10959) + e_aq^-1 (-8714) -> H^0 (-12213) +At time : 541.1 ps Reaction : e_aq^-1 (-2101) + °OH^0 (-10873) -> OH^-1 (-12214) +At time : 541.1 ps Reaction : °OH^0 (-10519) + °OH^0 (-7552) -> H2O2^0 (-12215) +At time : 541.1 ps Reaction : e_aq^-1 (-5499) + °OH^0 (-8452) -> OH^-1 (-12216) +At time : 541.1 ps Reaction : e_aq^-1 (-3913) + °OH^0 (-7760) -> OH^-1 (-12217) +At time : 541.1 ps Reaction : °OH^0 (-6082) + °OH^0 (-7602) -> H2O2^0 (-12218) +At time : 541.1 ps Reaction : e_aq^-1 (-1479) + H3O^1 (-6997) -> H^0 (-12219) +At time : 551.1 ps Reaction : H3O^1 (-7377) + OH^-1 (-12216) -> No product +At time : 551.1 ps Reaction : °OH^0 (-9349) + °OH^0 (-9704) -> H2O2^0 (-12220) +At time : 551.1 ps Reaction : °OH^0 (-6756) + °OH^0 (-8850) -> H2O2^0 (-12221) +At time : 551.1 ps Reaction : e_aq^-1 (-4206) + °OH^0 (-8577) -> OH^-1 (-12222) +At time : 551.1 ps Reaction : e_aq^-1 (-3440) + °OH^0 (-7778) -> OH^-1 (-12223) +At time : 551.1 ps Reaction : °OH^0 (-7014) + °OH^0 (-7664) -> H2O2^0 (-12224) +At time : 551.1 ps Reaction : °OH^0 (-9896) + °OH^0 (-6000) -> H2O2^0 (-12225) +At time : 561.1 ps Reaction : H3O^1 (-8177) + OH^-1 (-12181) -> No product +At time : 561.1 ps Reaction : H3O^1 (-10937) + OH^-1 (-11518) -> No product +At time : 561.1 ps Reaction : °OH^0 (-11330) + °OH^0 (-8712) -> H2O2^0 (-12226) +At time : 561.1 ps Reaction : °OH^0 (-10746) + °OH^0 (-8670) -> H2O2^0 (-12227) +At time : 561.1 ps Reaction : °OH^0 (-9816) + °OH^0 (-7756) -> H2O2^0 (-12228) +At time : 561.1 ps Reaction : °OH^0 (-9246) + H^0 (-9247) -> No product +At time : 561.1 ps Reaction : e_aq^-1 (-3543) + °OH^0 (-5906) -> OH^-1 (-12229) +At time : 571.1 ps Reaction : H3O^1 (-6289) + OH^-1 (-12229) -> No product +At time : 571.1 ps Reaction : OH^-1 (-12193) + H3O^1 (-7953) -> No product +At time : 571.1 ps Reaction : e_aq^-1 (-4493) + H^0 (-10966) -> OH^-1 (-12230) + H_2^0 (-12231) +At time : 571.1 ps Reaction : H3O^1 (-7027) + e_aq^-1 (-9038) -> H^0 (-12232) +At time : 571.1 ps Reaction : °OH^0 (-9006) + e_aq^-1 (-9008) -> OH^-1 (-12233) +At time : 571.1 ps Reaction : °OH^0 (-8094) + °OH^0 (-9000) -> H2O2^0 (-12234) +At time : 571.1 ps Reaction : °OH^0 (-8929) + °OH^0 (-8930) -> H2O2^0 (-12235) +At time : 571.1 ps Reaction : e_aq^-1 (-8771) + °OH^0 (-8775) -> OH^-1 (-12236) +At time : 571.1 ps Reaction : °OH^0 (-6564) + °OH^0 (-8679) -> H2O2^0 (-12237) +At time : 581.1 ps Reaction : H3O^1 (-6951) + OH^-1 (-12233) -> No product +At time : 581.1 ps Reaction : H3O^1 (-6021) + OH^-1 (-12089) -> No product +At time : 581.1 ps Reaction : °OH^0 (-9781) + °OH^0 (-8688) -> H2O2^0 (-12238) +At time : 581.1 ps Reaction : H^0 (-9751) + °OH^0 (-6574) -> No product +At time : 581.1 ps Reaction : °OH^0 (-5782) + °OH^0 (-9152) -> H2O2^0 (-12239) +At time : 581.1 ps Reaction : °OH^0 (-5818) + H^0 (-9115) -> No product +At time : 581.1 ps Reaction : °OH^0 (-7294) + °OH^0 (-8386) -> H2O2^0 (-12240) +At time : 581.1 ps Reaction : e_aq^-1 (-201) + H3O^1 (-7513) -> H^0 (-12241) +At time : 581.1 ps Reaction : e_aq^-1 (-3719) + H3O^1 (-6463) -> H^0 (-12242) +At time : 581.1 ps Reaction : e_aq^-1 (-5241) + e_aq^-1 (-5219) -> OH^-1 (-12243) + OH^-1 (-12244) + H_2^0 (-12245) +At time : 581.1 ps Reaction : e_aq^-1 (-3902) + °OH^0 (-6602) -> OH^-1 (-12246) +At time : 591.1 ps Reaction : OH^-1 (-12246) + H3O^1 (-6599) -> No product +At time : 591.1 ps Reaction : H^0 (-12062) + °OH^0 (-9104) -> No product +At time : 591.1 ps Reaction : OH^-1 (-12044) + H3O^1 (-8231) -> No product +At time : 591.1 ps Reaction : OH^-1 (-12037) + H3O^1 (-7083) -> No product +At time : 591.1 ps Reaction : H3O^1 (-11361) + e_aq^-1 (-8954) -> H^0 (-12247) +At time : 591.1 ps Reaction : H^0 (-11278) + °OH^0 (-6622) -> No product +At time : 591.1 ps Reaction : °OH^0 (-9976) + °OH^0 (-6930) -> H2O2^0 (-12248) +At time : 591.1 ps Reaction : °OH^0 (-9899) + °OH^0 (-6812) -> H2O2^0 (-12249) +At time : 591.1 ps Reaction : °OH^0 (-9518) + e_aq^-1 (-4226) -> OH^-1 (-12250) +At time : 591.1 ps Reaction : e_aq^-1 (-9101) + °OH^0 (-9254) -> OH^-1 (-12251) +At time : 591.1 ps Reaction : °OH^0 (-6920) + e_aq^-1 (-8990) -> OH^-1 (-12252) +At time : 591.1 ps Reaction : e_aq^-1 (-1654) + °OH^0 (-8084) -> OH^-1 (-12253) +At time : 591.1 ps Reaction : e_aq^-1 (-5489) + °OH^0 (-5815) -> OH^-1 (-12254) +At time : 591.1 ps Reaction : OH^-1 (-12250) + H3O^1 (-8578) -> No product +At time : 601.1 ps Reaction : H^0 (-10429) + e_aq^-1 (-5654) -> OH^-1 (-12255) + H_2^0 (-12256) +At time : 601.1 ps Reaction : H^0 (-9478) + °OH^0 (-7488) -> No product +At time : 601.1 ps Reaction : e_aq^-1 (-5555) + H3O^1 (-8473) -> H^0 (-12257) +At time : 611.1 ps Reaction : H2O2^0 (-12161) + e_aq^-1 (-4514) -> OH^-1 (-12258) + °OH^0 (-12259) +At time : 611.1 ps Reaction : H^0 (-11418) + H^0 (-9905) -> H_2^0 (-12260) +At time : 611.1 ps Reaction : H^0 (-10664) + e_aq^-1 (-2505) -> OH^-1 (-12261) + H_2^0 (-12262) +At time : 611.1 ps Reaction : H3O^1 (-8557) + e_aq^-1 (-8600) -> H^0 (-12263) +At time : 611.1 ps Reaction : e_aq^-1 (-207) + H3O^1 (-7475) -> H^0 (-12264) +At time : 621.1 ps Reaction : H3O^1 (-10052) + OH^-1 (-12258) -> No product +At time : 621.1 ps Reaction : OH^-1 (-12217) + H3O^1 (-7951) -> No product +At time : 621.1 ps Reaction : OH^-1 (-12163) + H3O^1 (-9067) -> No product +At time : 621.1 ps Reaction : OH^-1 (-11998) + H3O^1 (-7339) -> No product +At time : 621.1 ps Reaction : °OH^0 (-10823) + °OH^0 (-6652) -> H2O2^0 (-12265) +At time : 621.1 ps Reaction : H^0 (-9281) + °OH^0 (-9280) -> No product +At time : 621.1 ps Reaction : e_aq^-1 (-4651) + e_aq^-1 (-8495) -> OH^-1 (-12266) + OH^-1 (-12267) + H_2^0 (-12268) +At time : 621.1 ps Reaction : e_aq^-1 (-5443) + H3O^1 (-6119) -> H^0 (-12269) +At time : 631.1 ps Reaction : H^0 (-11867) + °OH^0 (-10750) -> No product +At time : 631.1 ps Reaction : H3O^1 (-11169) + e_aq^-1 (-5172) -> H^0 (-12270) +At time : 631.1 ps Reaction : e_aq^-1 (-3700) + °OH^0 (-8505) -> OH^-1 (-12271) +At time : 631.1 ps Reaction : e_aq^-1 (-1425) + H3O^1 (-5861) -> H^0 (-12272) +At time : 641.1 ps Reaction : H^0 (-12110) + e_aq^-1 (-4955) -> OH^-1 (-12273) + H_2^0 (-12274) +At time : 641.1 ps Reaction : °OH^0 (-10666) + °OH^0 (-7932) -> H2O2^0 (-12275) +At time : 641.1 ps Reaction : °OH^0 (-9827) + °OH^0 (-6684) -> H2O2^0 (-12276) +At time : 641.1 ps Reaction : °OH^0 (-9468) + °OH^0 (-8402) -> H2O2^0 (-12277) +At time : 641.1 ps Reaction : °OH^0 (-7576) + °OH^0 (-7578) -> H2O2^0 (-12278) +At time : 641.1 ps Reaction : e_aq^-1 (-1029) + °OH^0 (-7084) -> OH^-1 (-12279) +At time : 641.1 ps Reaction : e_aq^-1 (-4071) + °OH^0 (-6768) -> OH^-1 (-12280) +At time : 641.1 ps Reaction : e_aq^-1 (-1411) + H3O^1 (-7007) -> H^0 (-12281) +At time : 651.1 ps Reaction : H3O^1 (-9885) + OH^-1 (-12280) -> No product +At time : 651.1 ps Reaction : OH^-1 (-12251) + H3O^1 (-7521) -> No product +At time : 651.1 ps Reaction : H3O^1 (-7013) + OH^-1 (-12123) -> No product +At time : 651.1 ps Reaction : e_aq^-1 (-4383) + °OH^0 (-9216) -> OH^-1 (-12282) +At time : 651.1 ps Reaction : °OH^0 (-7500) + °OH^0 (-8426) -> H2O2^0 (-12283) +At time : 651.1 ps Reaction : e_aq^-1 (-3482) + H3O^1 (-6257) -> H^0 (-12284) +At time : 651.1 ps Reaction : e_aq^-1 (-4416) + °OH^0 (-6940) -> OH^-1 (-12285) +At time : 661.1 ps Reaction : e_aq^-1 (-401) + H2O2^0 (-11763) -> OH^-1 (-12286) + °OH^0 (-12287) +At time : 661.1 ps Reaction : °OH^0 (-11326) + °OH^0 (-9244) -> H2O2^0 (-12288) +At time : 661.1 ps Reaction : °OH^0 (-10898) + °OH^0 (-5758) -> H2O2^0 (-12289) +At time : 661.1 ps Reaction : H^0 (-9519) + e_aq^-1 (-4240) -> OH^-1 (-12290) + H_2^0 (-12291) +At time : 661.1 ps Reaction : °OH^0 (-9305) + °OH^0 (-7782) -> H2O2^0 (-12292) +At time : 661.1 ps Reaction : °OH^0 (-6388) + °OH^0 (-7866) -> H2O2^0 (-12293) +At time : 671.1 ps Reaction : OH^-1 (-12286) + H3O^1 (-8371) -> No product +At time : 671.1 ps Reaction : OH^-1 (-12285) + H3O^1 (-6939) -> No product +At time : 671.1 ps Reaction : H^0 (-12151) + °OH^0 (-8733) -> No product +At time : 671.1 ps Reaction : °OH^0 (-11273) + °OH^0 (-6590) -> H2O2^0 (-12294) +At time : 671.1 ps Reaction : °OH^0 (-10376) + °OH^0 (-10378) -> H2O2^0 (-12295) +At time : 671.1 ps Reaction : H^0 (-9372) + °OH^0 (-5968) -> No product +At time : 671.1 ps Reaction : H3O^1 (-8497) + e_aq^-1 (-8834) -> H^0 (-12296) +At time : 681.1 ps Reaction : H^0 (-11724) + °OH^0 (-8745) -> No product +At time : 681.1 ps Reaction : °OH^0 (-11105) + e_aq^-1 (-779) -> OH^-1 (-12297) +At time : 681.1 ps Reaction : °OH^0 (-9924) + °OH^0 (-10878) -> H2O2^0 (-12298) +At time : 681.1 ps Reaction : °OH^0 (-9721) + °OH^0 (-8676) -> H2O2^0 (-12299) +At time : 681.1 ps Reaction : H3O^1 (-9579) + e_aq^-1 (-3528) -> H^0 (-12300) +At time : 681.1 ps Reaction : °OH^0 (-5990) + e_aq^-1 (-8513) -> OH^-1 (-12301) +At time : 681.1 ps Reaction : OH^-1 (-5763) + H3O^1 (-7765) -> No product +At time : 681.1 ps Reaction : e_aq^-1 (-856) + H3O^1 (-7159) -> H^0 (-12302) +At time : 681.1 ps Reaction : e_aq^-1 (-4117) + °OH^0 (-6782) -> OH^-1 (-12303) +At time : 681.1 ps Reaction : e_aq^-1 (-5335) + e_aq^-1 (-5342) -> OH^-1 (-12304) + OH^-1 (-12305) + H_2^0 (-12306) +At time : 681.1 ps Reaction : H3O^1 (-5859) + OH^-1 (-12303) -> No product +At time : 691.1 ps Reaction : OH^-1 (-11741) + H3O^1 (-8524) -> No product +At time : 691.1 ps Reaction : °OH^0 (-5854) + H^0 (-11352) -> No product +At time : 691.1 ps Reaction : °OH^0 (-11141) + e_aq^-1 (-588) -> OH^-1 (-12307) +At time : 691.1 ps Reaction : e_aq^-1 (-8762) + H^0 (-9251) -> OH^-1 (-12308) + H_2^0 (-12309) +At time : 691.1 ps Reaction : e_aq^-1 (-4132) + H3O^1 (-6813) -> H^0 (-12310) +At time : 691.1 ps Reaction : °OH^0 (-7534) + °OH^0 (-8490) -> H2O2^0 (-12311) +At time : 701.1 ps Reaction : H3O^1 (-10979) + OH^-1 (-12199) -> No product +At time : 711.1 ps Reaction : H^0 (-11029) + °OH^0 (-7036) -> No product +At time : 711.1 ps Reaction : H^0 (-9517) + °OH^0 (-6968) -> No product +At time : 711.1 ps Reaction : °OH^0 (-7432) + °OH^0 (-8607) -> H2O2^0 (-12312) +At time : 711.1 ps Reaction : e_aq^-1 (-3497) + °OH^0 (-7808) -> OH^-1 (-12313) +At time : 721.1 ps Reaction : OH^-1 (-12196) + H3O^1 (-7971) -> No product +At time : 721.1 ps Reaction : °OH^0 (-10469) + °OH^0 (-11207) -> H2O2^0 (-12314) +At time : 721.1 ps Reaction : e_aq^-1 (-4937) + °OH^0 (-10538) -> OH^-1 (-12315) +At time : 721.1 ps Reaction : e_aq^-1 (-3688) + °OH^0 (-7880) -> OH^-1 (-12316) +At time : 721.1 ps Reaction : e_aq^-1 (-948) + e_aq^-1 (-4903) -> OH^-1 (-12317) + OH^-1 (-12318) + H_2^0 (-12319) +At time : 731.1 ps Reaction : °OH^0 (-6054) + H^0 (-12281) -> No product +At time : 731.1 ps Reaction : e_aq^-1 (-4335) + °OH^0 (-12180) -> OH^-1 (-12320) +At time : 731.1 ps Reaction : °OH^0 (-10408) + °OH^0 (-5878) -> H2O2^0 (-12321) +At time : 731.1 ps Reaction : °OH^0 (-10103) + °OH^0 (-9041) -> H2O2^0 (-12322) +At time : 731.1 ps Reaction : °OH^0 (-9661) + °OH^0 (-6374) -> H2O2^0 (-12323) +At time : 731.1 ps Reaction : e_aq^-1 (-1661) + °OH^0 (-5740) -> OH^-1 (-12324) +At time : 731.1 ps Reaction : OH^-1 (-12320) + H3O^1 (-6907) -> No product +At time : 741.1 ps Reaction : °OH^0 (-9972) + e_aq^-1 (-1719) -> OH^-1 (-12325) +At time : 741.1 ps Reaction : °OH^0 (-9811) + e_aq^-1 (-8918) -> OH^-1 (-12326) +At time : 741.1 ps Reaction : °OH^0 (-9799) + °OH^0 (-7964) -> H2O2^0 (-12327) +At time : 741.1 ps Reaction : °OH^0 (-6334) + °OH^0 (-7848) -> H2O2^0 (-12328) +At time : 741.1 ps Reaction : e_aq^-1 (-4843) + H3O^1 (-7143) -> H^0 (-12329) +At time : 741.1 ps Reaction : e_aq^-1 (-4829) + H3O^1 (-7117) -> H^0 (-12330) +At time : 741.1 ps Reaction : e_aq^-1 (-4115) + H3O^1 (-6803) -> H^0 (-12331) +At time : 751.1 ps Reaction : H3O^1 (-9769) + OH^-1 (-12261) -> No product +At time : 751.1 ps Reaction : H3O^1 (-10879) + OH^-1 (-12222) -> No product +At time : 751.1 ps Reaction : °OH^0 (-11145) + °OH^0 (-7248) -> H2O2^0 (-12332) +At time : 751.1 ps Reaction : e_aq^-1 (-4797) + H3O^1 (-8542) -> H^0 (-12333) +At time : 751.1 ps Reaction : e_aq^-1 (-5652) + °OH^0 (-7440) -> OH^-1 (-12334) +At time : 751.1 ps Reaction : e_aq^-1 (-5348) + e_aq^-1 (-5472) -> OH^-1 (-12335) + OH^-1 (-12336) + H_2^0 (-12337) +At time : 761.1 ps Reaction : H^0 (-11395) + e_aq^-1 (-5138) -> OH^-1 (-12338) + H_2^0 (-12339) +At time : 761.1 ps Reaction : °OH^0 (-11218) + °OH^0 (-10456) -> H2O2^0 (-12340) +At time : 761.1 ps Reaction : H^0 (-11152) + °OH^0 (-8350) -> No product +At time : 761.1 ps Reaction : °OH^0 (-10774) + e_aq^-1 (-3711) -> OH^-1 (-12341) +At time : 761.1 ps Reaction : °OH^0 (-6416) + °OH^0 (-7870) -> H2O2^0 (-12342) +At time : 761.1 ps Reaction : e_aq^-1 (-5530) + H3O^1 (-7381) -> H^0 (-12343) +At time : 761.1 ps Reaction : e_aq^-1 (-1865) + H3O^1 (-7703) -> H^0 (-12344) +At time : 771.1 ps Reaction : °OH^0 (-10646) + e_aq^-1 (-8945) -> OH^-1 (-12345) +At time : 771.1 ps Reaction : e_aq^-1 (-1246) + °OH^0 (-10129) -> OH^-1 (-12346) +At time : 771.1 ps Reaction : °OH^0 (-9524) + e_aq^-1 (-8867) -> OH^-1 (-12347) +At time : 771.1 ps Reaction : °OH^0 (-7544) + °OH^0 (-7550) -> H2O2^0 (-12348) +At time : 771.1 ps Reaction : e_aq^-1 (-380) + H3O^1 (-7305) -> H^0 (-12349) +At time : 781.1 ps Reaction : OH^-1 (-12346) + H3O^1 (-5865) -> No product +At time : 781.1 ps Reaction : °OH^0 (-11121) + e_aq^-1 (-770) -> OH^-1 (-12350) +At time : 781.1 ps Reaction : e_aq^-1 (-4635) + °OH^0 (-11035) -> OH^-1 (-12351) +At time : 781.1 ps Reaction : H^0 (-10789) + °OH^0 (-6496) -> No product +At time : 781.1 ps Reaction : °OH^0 (-10617) + °OH^0 (-9412) -> H2O2^0 (-12352) +At time : 781.1 ps Reaction : °OH^0 (-10563) + H^0 (-10189) -> No product +At time : 781.1 ps Reaction : °OH^0 (-5970) + e_aq^-1 (-8687) -> OH^-1 (-12353) +At time : 781.1 ps Reaction : e_aq^-1 (-5262) + H3O^1 (-7531) -> H^0 (-12354) +At time : 781.1 ps Reaction : e_aq^-1 (-1417) + °OH^0 (-5737) -> OH^-1 (-12355) +At time : 781.1 ps Reaction : OH^-1 (-12338) + H3O^1 (-7259) -> No product +At time : 781.1 ps Reaction : H3O^1 (-10012) + OH^-1 (-12253) -> No product +At time : 791.1 ps Reaction : °OH^0 (-9884) + e_aq^-1 (-2118) -> OH^-1 (-12356) +At time : 791.1 ps Reaction : H3O^1 (-8845) + e_aq^-1 (-8846) -> H^0 (-12357) +At time : 791.1 ps Reaction : °OH^0 (-6722) + °OH^0 (-8511) -> H2O2^0 (-12358) +At time : 791.1 ps Reaction : °OH^0 (-7378) + °OH^0 (-7382) -> H2O2^0 (-12359) +At time : 791.1 ps Reaction : e_aq^-1 (-5274) + H3O^1 (-6167) -> H^0 (-12360) +At time : 801.1 ps Reaction : H3O^1 (-7193) + OH^-1 (-12350) -> No product +At time : 801.1 ps Reaction : °OH^0 (-6480) + °OH^0 (-7898) -> H2O2^0 (-12361) +At time : 801.1 ps Reaction : e_aq^-1 (-5467) + °OH^0 (-7482) -> OH^-1 (-12362) +At time : 801.1 ps Reaction : OH^-1 (-12362) + H3O^1 (-7371) -> No product +At time : 811.1 ps Reaction : H3O^1 (-7161) + OH^-1 (-12297) -> No product +At time : 811.1 ps Reaction : H3O^1 (-11179) + OH^-1 (-12244) -> No product +At time : 811.1 ps Reaction : H^0 (-11982) + °OH^0 (-8706) -> No product +At time : 811.1 ps Reaction : °OH^0 (-8318) + °OH^0 (-8550) -> H2O2^0 (-12363) +At time : 811.1 ps Reaction : e_aq^-1 (-116) + e_aq^-1 (-206) -> OH^-1 (-12364) + OH^-1 (-12365) + H_2^0 (-12366) +At time : 821.1 ps Reaction : OH^-1 (-12351) + H3O^1 (-8740) -> No product +At time : 821.1 ps Reaction : °OH^0 (-9324) + H^0 (-12167) -> No product +At time : 821.1 ps Reaction : H3O^1 (-11359) + OH^-1 (-5799) -> No product +At time : 821.1 ps Reaction : °OH^0 (-10445) + e_aq^-1 (-5497) -> OH^-1 (-12367) +At time : 821.1 ps Reaction : °OH^0 (-9264) + °OH^0 (-8352) -> H2O2^0 (-12368) +At time : 821.1 ps Reaction : e_aq^-1 (-2863) + H3O^1 (-7885) -> H^0 (-12369) +At time : 821.1 ps Reaction : e_aq^-1 (-3923) + H3O^1 (-5975) -> H^0 (-12370) +At time : 831.1 ps Reaction : OH^-1 (-12230) + H3O^1 (-6975) -> No product +At time : 831.1 ps Reaction : H3O^1 (-11167) + e_aq^-1 (-5215) -> H^0 (-12371) +At time : 831.1 ps Reaction : °OH^0 (-6832) + H^0 (-9145) -> No product +At time : 841.1 ps Reaction : OH^-1 (-12334) + H3O^1 (-7439) -> No product +At time : 841.1 ps Reaction : OH^-1 (-12279) + H3O^1 (-7087) -> No product +At time : 841.1 ps Reaction : °OH^0 (-11096) + °OH^0 (-11099) -> H2O2^0 (-12372) +At time : 841.1 ps Reaction : °OH^0 (-6874) + e_aq^-1 (-8981) -> OH^-1 (-12373) +At time : 841.1 ps Reaction : e_aq^-1 (-5206) + H3O^1 (-7511) -> H^0 (-12374) +At time : 841.1 ps Reaction : e_aq^-1 (-2920) + H3O^1 (-6421) -> H^0 (-12375) +At time : 851.1 ps Reaction : H3O^1 (-7451) + OH^-1 (-12255) -> No product +At time : 851.1 ps Reaction : H^0 (-11680) + H^0 (-12241) -> H_2^0 (-12376) +At time : 851.1 ps Reaction : OH^-1 (-12184) + H3O^1 (-7913) -> No product +At time : 851.1 ps Reaction : °OH^0 (-10669) + °OH^0 (-6584) -> H2O2^0 (-12377) +At time : 851.1 ps Reaction : e_aq^-1 (-4788) + H3O^1 (-7615) -> H^0 (-12378) +At time : 851.1 ps Reaction : e_aq^-1 (-1355) + °OH^0 (-7012) -> OH^-1 (-12379) +At time : 851.1 ps Reaction : °OH^0 (-8390) + e_aq^-1 (-8555) -> OH^-1 (-12380) +At time : 861.1 ps Reaction : e_aq^-1 (-4254) + H^0 (-10896) -> OH^-1 (-12381) + H_2^0 (-12382) +At time : 861.1 ps Reaction : e_aq^-1 (-4746) + °OH^0 (-10153) -> OH^-1 (-12383) +At time : 861.1 ps Reaction : °OH^0 (-9298) + e_aq^-1 (-3366) -> OH^-1 (-12384) +At time : 871.1 ps Reaction : H3O^1 (-9402) + OH^-1 (-12373) -> No product +At time : 871.1 ps Reaction : OH^-1 (-12341) + H3O^1 (-6447) -> No product +At time : 871.1 ps Reaction : OH^-1 (-12094) + H3O^1 (-7995) -> No product +At time : 871.1 ps Reaction : e_aq^-1 (-3750) + H^0 (-12003) -> OH^-1 (-12385) + H_2^0 (-12386) +At time : 871.1 ps Reaction : H^0 (-10151) + °OH^0 (-8643) -> No product +At time : 871.1 ps Reaction : °OH^0 (-9693) + °OH^0 (-6462) -> H2O2^0 (-12387) +At time : 871.1 ps Reaction : °OH^0 (-7172) + °OH^0 (-8547) -> H2O2^0 (-12388) +At time : 881.1 ps Reaction : H^0 (-12374) + °OH^0 (-7318) -> No product +At time : 881.1 ps Reaction : H3O^1 (-11118) + e_aq^-1 (-719) -> H^0 (-12389) +At time : 891.1 ps Reaction : e_aq^-1 (-4888) + H^0 (-12329) -> OH^-1 (-12390) + H_2^0 (-12391) +At time : 891.1 ps Reaction : H^0 (-10059) + H^0 (-11420) -> H_2^0 (-12392) +At time : 891.1 ps Reaction : H^0 (-11295) + °OH^0 (-9026) -> No product +At time : 891.1 ps Reaction : H3O^1 (-10577) + e_aq^-1 (-4753) -> H^0 (-12393) +At time : 891.1 ps Reaction : °OH^0 (-10325) + °OH^0 (-8412) -> H2O2^0 (-12394) +At time : 891.1 ps Reaction : H^0 (-10215) + °OH^0 (-7162) -> No product +At time : 891.1 ps Reaction : °OH^0 (-9556) + °OH^0 (-7780) -> H2O2^0 (-12395) +At time : 891.1 ps Reaction : e_aq^-1 (-677) + H3O^1 (-7221) -> H^0 (-12396) +At time : 891.1 ps Reaction : °OH^0 (-6488) + °OH^0 (-6494) -> H2O2^0 (-12397) +At time : 891.1 ps Reaction : OH^-1 (-5739) + H3O^1 (-6225) -> No product +At time : 901.1 ps Reaction : e_aq^-1 (-69) + °OH^0 (-10415) -> OH^-1 (-12398) +At time : 901.1 ps Reaction : e_aq^-1 (-4736) + H3O^1 (-8175) -> H^0 (-12399) +At time : 901.1 ps Reaction : e_aq^-1 (-1911) + °OH^0 (-6856) -> OH^-1 (-12400) +At time : 901.1 ps Reaction : e_aq^-1 (-3548) + H3O^1 (-5907) -> H^0 (-12401) +At time : 911.1 ps Reaction : e_aq^-1 (-5421) + H2O2^0 (-11788) -> OH^-1 (-12402) + °OH^0 (-12403) +At time : 911.1 ps Reaction : e_aq^-1 (-1528) + H2O2^0 (-11728) -> OH^-1 (-12404) + °OH^0 (-12405) +At time : 911.1 ps Reaction : °OH^0 (-10955) + H^0 (-11331) -> No product +At time : 911.1 ps Reaction : H^0 (-10095) + H^0 (-11014) -> H_2^0 (-12406) +At time : 911.1 ps Reaction : °OH^0 (-9965) + °OH^0 (-10913) -> H2O2^0 (-12407) +At time : 911.1 ps Reaction : H^0 (-9321) + °OH^0 (-6262) -> No product +At time : 911.1 ps Reaction : °OH^0 (-8088) + e_aq^-1 (-8999) -> OH^-1 (-12408) +At time : 911.1 ps Reaction : e_aq^-1 (-4785) + e_aq^-1 (-8639) -> OH^-1 (-12409) + OH^-1 (-12410) + H_2^0 (-12411) +At time : 911.1 ps Reaction : e_aq^-1 (-4107) + °OH^0 (-6814) -> OH^-1 (-12412) +At time : 911.1 ps Reaction : e_aq^-1 (-3665) + H3O^1 (-6431) -> H^0 (-12413) +At time : 911.1 ps Reaction : e_aq^-1 (-3023) + H3O^1 (-6359) -> H^0 (-12414) +At time : 911.1 ps Reaction : e_aq^-1 (-594) + H3O^1 (-6101) -> H^0 (-12415) +At time : 921.1 ps Reaction : OH^-1 (-12410) + H3O^1 (-7617) -> No product +At time : 921.1 ps Reaction : °OH^0 (-11245) + H^0 (-10394) -> No product +At time : 921.1 ps Reaction : °OH^0 (-10084) + H^0 (-10085) -> No product +At time : 921.1 ps Reaction : °OH^0 (-5809) + °OH^0 (-7196) -> H2O2^0 (-12416) +At time : 931.1 ps Reaction : OH^-1 (-5742) + H3O^1 (-8087) -> No product +At time : 941.1 ps Reaction : OH^-1 (-12325) + H3O^1 (-6931) -> No product +At time : 941.1 ps Reaction : H3O^1 (-10721) + OH^-1 (-12149) -> No product +At time : 941.1 ps Reaction : H3O^1 (-9746) + OH^-1 (-11964) -> No product +At time : 941.1 ps Reaction : °OH^0 (-10217) + °OH^0 (-8270) -> H2O2^0 (-12417) +At time : 951.1 ps Reaction : H3O^1 (-9978) + OH^-1 (-11936) -> No product +At time : 951.1 ps Reaction : °OH^0 (-11766) + °OH^0 (-9226) -> H2O2^0 (-12418) +At time : 951.1 ps Reaction : °OH^0 (-10288) + °OH^0 (-6108) -> H2O2^0 (-12419) +At time : 951.1 ps Reaction : °OH^0 (-7094) + °OH^0 (-7100) -> H2O2^0 (-12420) +At time : 961.1 ps Reaction : OH^-1 (-12390) + H3O^1 (-6081) -> No product +At time : 961.1 ps Reaction : °OH^0 (-9322) + e_aq^-1 (-3519) -> OH^-1 (-12421) +At time : 961.1 ps Reaction : e_aq^-1 (-4184) + °OH^0 (-8697) -> OH^-1 (-12422) +At time : 961.1 ps Reaction : e_aq^-1 (-77) + H3O^1 (-8465) -> H^0 (-12423) +At time : 961.1 ps Reaction : e_aq^-1 (-3813) + H3O^1 (-6565) -> H^0 (-12424) +At time : 971.1 ps Reaction : H3O^1 (-7393) + OH^-1 (-12195) -> No product +At time : 971.1 ps Reaction : e_aq^-1 (-1792) + °OH^0 (-9975) -> OH^-1 (-12425) +At time : 971.1 ps Reaction : °OH^0 (-6550) + °OH^0 (-8873) -> H2O2^0 (-12426) +At time : 981.1 ps Reaction : OH^-1 (-12402) + H3O^1 (-8457) -> No product +At time : 981.1 ps Reaction : OH^-1 (-12398) + H3O^1 (-7409) -> No product +At time : 981.1 ps Reaction : H3O^1 (-9758) + OH^-1 (-12353) -> No product +At time : 981.1 ps Reaction : H3O^1 (-6849) + OH^-1 (-12290) -> No product +At time : 981.1 ps Reaction : °OH^0 (-9765) + °OH^0 (-8911) -> H2O2^0 (-12427) +At time : 991.1 ps Reaction : H^0 (-11282) + °OH^0 (-10852) -> No product +At time : 991.1 ps Reaction : H3O^1 (-10199) + e_aq^-1 (-921) -> H^0 (-12428) +At time : 991.1 ps Reaction : e_aq^-1 (-4800) + H3O^1 (-9058) -> H^0 (-12429) +At time : 991.1 ps Reaction : e_aq^-1 (-4744) + H3O^1 (-7637) -> H^0 (-12430) +At time : 1.0011 ns Reaction : H3O^1 (-6841) + OH^-1 (-12381) -> No product +At time : 1.0011 ns Reaction : H3O^1 (-6099) + OH^-1 (-12307) -> No product +At time : 1.0011 ns Reaction : e_aq^-1 (-1144) + H^0 (-12048) -> OH^-1 (-12431) + H_2^0 (-12432) +At time : 1.0011 ns Reaction : °OH^0 (-10611) + H^0 (-9217) -> No product +At time : 1.0011 ns Reaction : e_aq^-1 (-3044) + H3O^1 (-7859) -> H^0 (-12433) +At time : 1.0011 ns Reaction : e_aq^-1 (-3667) + °OH^0 (-6394) -> OH^-1 (-12434) +At time : 1.1011 ns Reaction : H3O^1 (-6795) + OH^-1 (-12412) -> No product +At time : 1.1011 ns Reaction : OH^-1 (-12383) + H3O^1 (-10152) -> No product +At time : 1.1011 ns Reaction : OH^-1 (-12380) + H3O^1 (-8761) -> No product +At time : 1.1011 ns Reaction : H3O^1 (-10080) + OH^-1 (-12379) -> No product +At time : 1.1011 ns Reaction : H3O^1 (-7443) + OH^-1 (-12365) -> No product +At time : 1.1011 ns Reaction : OH^-1 (-12364) + H3O^1 (-7391) -> No product +At time : 1.1011 ns Reaction : H3O^1 (-6933) + OH^-1 (-12282) -> No product +At time : 1.1011 ns Reaction : OH^-1 (-12202) + H3O^1 (-7423) -> No product +At time : 1.1011 ns Reaction : e_aq^-1 (-4539) + H2O2^0 (-11960) -> OH^-1 (-12435) + °OH^0 (-12436) +At time : 1.1011 ns Reaction : H^0 (-11274) + °OH^0 (-7936) -> No product +At time : 1.1011 ns Reaction : °OH^0 (-11107) + °OH^0 (-7170) -> H2O2^0 (-12437) +At time : 1.1011 ns Reaction : H3O^1 (-10888) + e_aq^-1 (-4216) -> H^0 (-12438) +At time : 1.1011 ns Reaction : °OH^0 (-10788) + e_aq^-1 (-2774) -> OH^-1 (-12439) +At time : 1.1011 ns Reaction : e_aq^-1 (-5030) + H^0 (-10227) -> OH^-1 (-12440) + H_2^0 (-12441) +At time : 1.1011 ns Reaction : H^0 (-10114) + °OH^0 (-6066) -> No product +At time : 1.1011 ns Reaction : H^0 (-9269) + H^0 (-9645) -> H_2^0 (-12442) +At time : 1.1011 ns Reaction : e_aq^-1 (-1583) + H3O^1 (-8713) -> H^0 (-12443) +At time : 1.1011 ns Reaction : °OH^0 (-6078) + °OH^0 (-8212) -> H2O2^0 (-12444) +At time : 1.1011 ns Reaction : °OH^0 (-7974) + °OH^0 (-7976) -> H2O2^0 (-12445) +At time : 1.1011 ns Reaction : e_aq^-1 (-5093) + e_aq^-1 (-5063) -> OH^-1 (-12446) + OH^-1 (-12447) + H_2^0 (-12448) +At time : 1.1011 ns Reaction : OH^-1 (-12336) + H3O^1 (-7491) -> No product +At time : 1.1011 ns Reaction : H3O^1 (-11116) + OH^-1 (-11915) -> No product +At time : 1.1011 ns Reaction : e_aq^-1 (-4794) + °OH^0 (-7118) -> OH^-1 (-12449) +At time : 1.2011 ns Reaction : e_aq^-1 (-846) + H2O2^0 (-12437) -> OH^-1 (-12450) + °OH^0 (-12451) +At time : 1.2011 ns Reaction : H3O^1 (-11051) + OH^-1 (-12431) -> No product +At time : 1.2011 ns Reaction : OH^-1 (-12404) + H3O^1 (-8113) -> No product +At time : 1.2011 ns Reaction : OH^-1 (-12252) + H3O^1 (-8989) -> No product +At time : 1.2011 ns Reaction : e_aq^-1 (-3112) + H^0 (-12002) -> OH^-1 (-12452) + H_2^0 (-12453) +At time : 1.2011 ns Reaction : H3O^1 (-11120) + e_aq^-1 (-8759) -> H^0 (-12454) +At time : 1.2011 ns Reaction : °OH^0 (-10831) + °OH^0 (-6730) -> H2O2^0 (-12455) +At time : 1.2011 ns Reaction : e_aq^-1 (-1113) + °OH^0 (-10137) -> OH^-1 (-12456) +At time : 1.2011 ns Reaction : e_aq^-1 (-2151) + H^0 (-9868) -> OH^-1 (-12457) + H_2^0 (-12458) +At time : 1.2011 ns Reaction : °OH^0 (-9358) + °OH^0 (-6506) -> H2O2^0 (-12459) +At time : 1.2011 ns Reaction : °OH^0 (-8619) + °OH^0 (-9250) -> H2O2^0 (-12460) +At time : 1.2011 ns Reaction : °OH^0 (-8160) + °OH^0 (-9232) -> H2O2^0 (-12461) +At time : 1.2011 ns Reaction : e_aq^-1 (-5044) + H3O^1 (-9073) -> H^0 (-12462) +At time : 1.2011 ns Reaction : e_aq^-1 (-3898) + H3O^1 (-7965) -> H^0 (-12463) +At time : 1.2011 ns Reaction : e_aq^-1 (-479) + °OH^0 (-7296) -> OH^-1 (-12464) +At time : 1.2011 ns Reaction : e_aq^-1 (-5080) + H3O^1 (-7245) -> H^0 (-12465) +At time : 1.2011 ns Reaction : e_aq^-1 (-4998) + H3O^1 (-7207) -> H^0 (-12466) +At time : 1.2011 ns Reaction : e_aq^-1 (-4128) + e_aq^-1 (-4098) -> OH^-1 (-12467) + OH^-1 (-12468) + H_2^0 (-12469) +At time : 1.2011 ns Reaction : e_aq^-1 (-2982) + e_aq^-1 (-3638) -> OH^-1 (-12470) + OH^-1 (-12471) + H_2^0 (-12472) +At time : 1.2011 ns Reaction : H3O^1 (-6141) + OH^-1 (-12236) -> No product +At time : 1.3011 ns Reaction : H^0 (-12454) + °OH^0 (-8310) -> No product +At time : 1.3011 ns Reaction : OH^-1 (-12439) + H3O^1 (-6507) -> No product +At time : 1.3011 ns Reaction : e_aq^-1 (-5096) + H^0 (-12371) -> OH^-1 (-12473) + H_2^0 (-12474) +At time : 1.3011 ns Reaction : OH^-1 (-12355) + H3O^1 (-6053) -> No product +At time : 1.3011 ns Reaction : OH^-1 (-12347) + H3O^1 (-9797) -> No product +At time : 1.3011 ns Reaction : H3O^1 (-10154) + OH^-1 (-12267) -> No product +At time : 1.3011 ns Reaction : OH^-1 (-12068) + H3O^1 (-9916) -> No product +At time : 1.3011 ns Reaction : °OH^0 (-9460) + H^0 (-11870) -> No product +At time : 1.3011 ns Reaction : e_aq^-1 (-1172) + H2O2^0 (-11597) -> OH^-1 (-12475) + °OH^0 (-12476) +At time : 1.3011 ns Reaction : e_aq^-1 (-4403) + H2O2^0 (-11527) -> OH^-1 (-12477) + °OH^0 (-12478) +At time : 1.3011 ns Reaction : °OH^0 (-10741) + °OH^0 (-6358) -> H2O2^0 (-12479) +At time : 1.3011 ns Reaction : °OH^0 (-10600) + °OH^0 (-6222) -> H2O2^0 (-12480) +At time : 1.3011 ns Reaction : °OH^0 (-10496) + °OH^0 (-6112) -> H2O2^0 (-12481) +At time : 1.3011 ns Reaction : °OH^0 (-10426) + e_aq^-1 (-5619) -> OH^-1 (-12482) +At time : 1.3011 ns Reaction : e_aq^-1 (-4448) + H3O^1 (-10016) -> H^0 (-12483) +At time : 1.3011 ns Reaction : °OH^0 (-6064) + °OH^0 (-9040) -> H2O2^0 (-12484) +At time : 1.3011 ns Reaction : °OH^0 (-7584) + °OH^0 (-8280) -> H2O2^0 (-12485) +At time : 1.3011 ns Reaction : °OH^0 (-7722) + °OH^0 (-7726) -> H2O2^0 (-12486) +At time : 1.3011 ns Reaction : e_aq^-1 (-1839) + H3O^1 (-7699) -> H^0 (-12487) +At time : 1.3011 ns Reaction : °OH^0 (-7344) + °OH^0 (-7504) -> H2O2^0 (-12488) +At time : 1.3011 ns Reaction : e_aq^-1 (-5520) + H3O^1 (-7465) -> H^0 (-12489) +At time : 1.3011 ns Reaction : e_aq^-1 (-3937) + °OH^0 (-6636) -> OH^-1 (-12490) +At time : 1.3011 ns Reaction : e_aq^-1 (-3675) + °OH^0 (-6420) -> OH^-1 (-12491) +At time : 1.3011 ns Reaction : e_aq^-1 (-3748) + e_aq^-1 (-3741) -> OH^-1 (-12492) + OH^-1 (-12493) + H_2^0 (-12494) +At time : 1.3011 ns Reaction : OH^-1 (-12206) + H3O^1 (-10022) -> No product +At time : 1.3011 ns Reaction : °OH^0 (-9449) + °OH^0 (-7152) -> H2O2^0 (-12495) +At time : 1.3011 ns Reaction : e_aq^-1 (-5261) + °OH^0 (-7530) -> OH^-1 (-12496) +At time : 1.3011 ns Reaction : e_aq^-1 (-2411) + °OH^0 (-5978) -> OH^-1 (-12497) +At time : 1.4011 ns Reaction : H3O^1 (-6811) + OH^-1 (-12422) -> No product +At time : 1.4011 ns Reaction : OH^-1 (-12271) + H3O^1 (-7889) -> No product +At time : 1.4011 ns Reaction : e_aq^-1 (-1360) + H^0 (-12018) -> OH^-1 (-12498) + H_2^0 (-12499) +At time : 1.4011 ns Reaction : H3O^1 (-6949) + OH^-1 (-11931) -> No product +At time : 1.4011 ns Reaction : e_aq^-1 (-3917) + H2O2^0 (-11872) -> OH^-1 (-12500) + °OH^0 (-12501) +At time : 1.4011 ns Reaction : °OH^0 (-11202) + °OH^0 (-7508) -> H2O2^0 (-12502) +At time : 1.4011 ns Reaction : H^0 (-10764) + e_aq^-1 (-2984) -> OH^-1 (-12503) + H_2^0 (-12504) +At time : 1.4011 ns Reaction : °OH^0 (-10564) + e_aq^-1 (-4824) -> OH^-1 (-12505) +At time : 1.4011 ns Reaction : °OH^0 (-10486) + °OH^0 (-9499) -> H2O2^0 (-12506) +At time : 1.4011 ns Reaction : °OH^0 (-9886) + °OH^0 (-6770) -> H2O2^0 (-12507) +At time : 1.4011 ns Reaction : H3O^1 (-9585) + e_aq^-1 (-3535) -> H^0 (-12508) +At time : 1.4011 ns Reaction : e_aq^-1 (-730) + H^0 (-9456) -> OH^-1 (-12509) + H_2^0 (-12510) +At time : 1.4011 ns Reaction : e_aq^-1 (-4474) + H3O^1 (-9004) -> H^0 (-12511) +At time : 1.4011 ns Reaction : °OH^0 (-7758) + e_aq^-1 (-8921) -> OH^-1 (-12512) +At time : 1.4011 ns Reaction : e_aq^-1 (-3606) + H3O^1 (-6335) -> H^0 (-12513) +At time : 1.4011 ns Reaction : °OH^0 (-6314) + °OH^0 (-6320) -> H2O2^0 (-12514) +At time : 1.4011 ns Reaction : e_aq^-1 (-5332) + H3O^1 (-6165) -> H^0 (-12515) +At time : 1.4011 ns Reaction : e_aq^-1 (-3857) + H3O^1 (-5971) -> H^0 (-12516) +At time : 1.4011 ns Reaction : e_aq^-1 (-4113) + e_aq^-1 (-4145) -> OH^-1 (-12517) + OH^-1 (-12518) + H_2^0 (-12519) +At time : 1.4011 ns Reaction : OH^-1 (-12315) + H3O^1 (-9500) -> No product +At time : 1.5011 ns Reaction : H3O^1 (-10489) + OH^-1 (-12496) -> No product +At time : 1.5011 ns Reaction : OH^-1 (-12475) + H3O^1 (-8173) -> No product +At time : 1.5011 ns Reaction : OH^-1 (-12464) + H3O^1 (-7313) -> No product +At time : 1.5011 ns Reaction : OH^-1 (-12457) + H3O^1 (-8941) -> No product +At time : 1.5011 ns Reaction : e_aq^-1 (-2895) + H^0 (-12413) -> OH^-1 (-12520) + H_2^0 (-12521) +At time : 1.5011 ns Reaction : e_aq^-1 (-5002) + H^0 (-12389) -> OH^-1 (-12522) + H_2^0 (-12523) +At time : 1.5011 ns Reaction : OH^-1 (-12356) + H3O^1 (-8021) -> No product +At time : 1.5011 ns Reaction : e_aq^-1 (-5365) + H2O2^0 (-12112) -> OH^-1 (-12524) + °OH^0 (-12525) +At time : 1.5011 ns Reaction : H3O^1 (-10977) + OH^-1 (-11954) -> No product +At time : 1.5011 ns Reaction : °OH^0 (-10762) + e_aq^-1 (-2987) -> OH^-1 (-12526) +At time : 1.5011 ns Reaction : °OH^0 (-10760) + °OH^0 (-9655) -> H2O2^0 (-12527) +At time : 1.5011 ns Reaction : °OH^0 (-10596) + °OH^0 (-9511) -> H2O2^0 (-12528) +At time : 1.5011 ns Reaction : °OH^0 (-10116) + °OH^0 (-8739) -> H2O2^0 (-12529) +At time : 1.5011 ns Reaction : °OH^0 (-9754) + °OH^0 (-7768) -> H2O2^0 (-12530) +At time : 1.5011 ns Reaction : e_aq^-1 (-2406) + H^0 (-9157) -> OH^-1 (-12531) + H_2^0 (-12532) +At time : 1.5011 ns Reaction : °OH^0 (-7192) + °OH^0 (-8294) -> H2O2^0 (-12533) +At time : 1.5011 ns Reaction : °OH^0 (-6960) + °OH^0 (-7676) -> H2O2^0 (-12534) +At time : 1.5011 ns Reaction : e_aq^-1 (-5291) + H3O^1 (-7299) -> H^0 (-12535) +At time : 1.5011 ns Reaction : °OH^0 (-6434) + °OH^0 (-6438) -> H2O2^0 (-12536) +At time : 1.5011 ns Reaction : e_aq^-1 (-568) + e_aq^-1 (-5140) -> OH^-1 (-12537) + OH^-1 (-12538) + H_2^0 (-12539) +At time : 1.5011 ns Reaction : OH^-1 (-12520) + H3O^1 (-6443) -> No product +At time : 1.5011 ns Reaction : e_aq^-1 (-2897) + °OH^0 (-5944) -> OH^-1 (-12540) +At time : 1.6011 ns Reaction : OH^-1 (-12540) + H3O^1 (-6425) -> No product +At time : 1.6011 ns Reaction : OH^-1 (-12526) + H3O^1 (-7865) -> No product +At time : 1.6011 ns Reaction : OH^-1 (-12435) + H3O^1 (-8131) -> No product +At time : 1.6011 ns Reaction : OH^-1 (-12408) + H3O^1 (-8081) -> No product +At time : 1.6011 ns Reaction : H^0 (-12375) + e_aq^-1 (-2900) -> OH^-1 (-12541) + H_2^0 (-12542) +At time : 1.6011 ns Reaction : e_aq^-1 (-4508) + H^0 (-12272) -> OH^-1 (-12543) + H_2^0 (-12544) +At time : 1.6011 ns Reaction : OH^-1 (-11997) + H3O^1 (-8421) -> No product +At time : 1.6011 ns Reaction : H2O2^0 (-11430) + e_aq^-1 (-814) -> OH^-1 (-12545) + °OH^0 (-12546) +At time : 1.6011 ns Reaction : H2O2^0 (-11424) + e_aq^-1 (-8909) -> OH^-1 (-12547) + °OH^0 (-12548) +At time : 1.6011 ns Reaction : H^0 (-10997) + e_aq^-1 (-1436) -> OH^-1 (-12549) + H_2^0 (-12550) +At time : 1.6011 ns Reaction : H^0 (-10837) + °OH^0 (-5856) -> No product +At time : 1.6011 ns Reaction : e_aq^-1 (-5569) + °OH^0 (-10442) -> OH^-1 (-12551) +At time : 1.6011 ns Reaction : °OH^0 (-9945) + °OH^0 (-7704) -> H2O2^0 (-12552) +At time : 1.6011 ns Reaction : °OH^0 (-9624) + °OH^0 (-7832) -> H2O2^0 (-12553) +At time : 1.6011 ns Reaction : H^0 (-9395) + e_aq^-1 (-4156) -> OH^-1 (-12554) + H_2^0 (-12555) +At time : 1.6011 ns Reaction : e_aq^-1 (-4152) + °OH^0 (-9146) -> OH^-1 (-12556) +At time : 1.6011 ns Reaction : e_aq^-1 (-3956) + °OH^0 (-8919) -> OH^-1 (-12557) +At time : 1.6011 ns Reaction : e_aq^-1 (-2602) + H3O^1 (-6561) -> H^0 (-12558) +At time : 1.6011 ns Reaction : e_aq^-1 (-3760) + H3O^1 (-6503) -> H^0 (-12559) +At time : 1.7011 ns Reaction : H3O^1 (-6823) + OH^-1 (-12556) -> No product +At time : 1.7011 ns Reaction : OH^-1 (-12505) + H3O^1 (-8638) -> No product +At time : 1.7011 ns Reaction : e_aq^-1 (-1746) + H2O2^0 (-12248) -> OH^-1 (-12560) + °OH^0 (-12561) +At time : 1.7011 ns Reaction : °OH^0 (-11373) + °OH^0 (-6070) -> H2O2^0 (-12562) +At time : 1.7011 ns Reaction : H3O^1 (-11367) + e_aq^-1 (-4572) -> H^0 (-12563) +At time : 1.7011 ns Reaction : H^0 (-11172) + °OH^0 (-7540) -> No product +At time : 1.7011 ns Reaction : e_aq^-1 (-4868) + H^0 (-11087) -> OH^-1 (-12564) + H_2^0 (-12565) +At time : 1.7011 ns Reaction : e_aq^-1 (-4833) + H3O^1 (-11079) -> H^0 (-12566) +At time : 1.7011 ns Reaction : H3O^1 (-10672) + e_aq^-1 (-3734) -> H^0 (-12567) +At time : 1.7011 ns Reaction : H3O^1 (-9787) + e_aq^-1 (-2528) -> H^0 (-12568) +At time : 1.7011 ns Reaction : °OH^0 (-9762) + °OH^0 (-6600) -> H2O2^0 (-12569) +At time : 1.7011 ns Reaction : e_aq^-1 (-2891) + H3O^1 (-9686) -> H^0 (-12570) +At time : 1.7011 ns Reaction : °OH^0 (-9602) + e_aq^-1 (-3544) -> OH^-1 (-12571) +At time : 1.7011 ns Reaction : e_aq^-1 (-1968) + °OH^0 (-8961) -> OH^-1 (-12572) +At time : 1.7011 ns Reaction : °OH^0 (-7352) + °OH^0 (-8438) -> H2O2^0 (-12573) +At time : 1.7011 ns Reaction : e_aq^-1 (-5198) + H3O^1 (-8359) -> H^0 (-12574) +At time : 1.7011 ns Reaction : e_aq^-1 (-2537) + e_aq^-1 (-3876) -> OH^-1 (-12575) + OH^-1 (-12576) + H_2^0 (-12577) +At time : 1.7011 ns Reaction : H3O^1 (-6407) + OH^-1 (-12434) -> No product +At time : 1.7011 ns Reaction : e_aq^-1 (-4467) + °OH^0 (-8098) -> OH^-1 (-12578) +At time : 1.8011 ns Reaction : e_aq^-1 (-112) + H^0 (-12423) -> OH^-1 (-12579) + H_2^0 (-12580) +At time : 1.8011 ns Reaction : H3O^1 (-10494) + OH^-1 (-12308) -> No product +At time : 1.8011 ns Reaction : e_aq^-1 (-5054) + H2O2^0 (-11551) -> OH^-1 (-12581) + °OH^0 (-12582) +At time : 1.8011 ns Reaction : e_aq^-1 (-4760) + H^0 (-11067) -> OH^-1 (-12583) + H_2^0 (-12584) +At time : 1.8011 ns Reaction : °OH^0 (-10968) + °OH^0 (-8118) -> H2O2^0 (-12585) +At time : 1.8011 ns Reaction : H^0 (-10597) + e_aq^-1 (-4464) -> OH^-1 (-12586) + H_2^0 (-12587) +At time : 1.8011 ns Reaction : e_aq^-1 (-5429) + H3O^1 (-10464) -> H^0 (-12588) +At time : 1.8011 ns Reaction : e_aq^-1 (-1898) + H^0 (-9957) -> OH^-1 (-12589) + H_2^0 (-12590) +At time : 1.8011 ns Reaction : H^0 (-9563) + °OH^0 (-5892) -> No product +At time : 1.8011 ns Reaction : °OH^0 (-8052) + H^0 (-9209) -> No product +At time : 1.8011 ns Reaction : °OH^0 (-8370) + °OH^0 (-8819) -> H2O2^0 (-12591) +At time : 1.8011 ns Reaction : °OH^0 (-7728) + °OH^0 (-8034) -> H2O2^0 (-12592) +At time : 1.8011 ns Reaction : °OH^0 (-5980) + °OH^0 (-7984) -> H2O2^0 (-12593) +At time : 1.8011 ns Reaction : °OH^0 (-6754) + °OH^0 (-7738) -> H2O2^0 (-12594) +At time : 1.8011 ns Reaction : e_aq^-1 (-3759) + H3O^1 (-5843) -> H^0 (-12595) +At time : 1.8011 ns Reaction : e_aq^-1 (-126) + e_aq^-1 (-5529) -> OH^-1 (-12596) + OH^-1 (-12597) + H_2^0 (-12598) +At time : 1.9011 ns Reaction : OH^-1 (-12578) + H3O^1 (-10947) -> No product +At time : 1.9011 ns Reaction : °OH^0 (-6344) + H^0 (-12513) -> No product +At time : 1.9011 ns Reaction : H3O^1 (-10301) + OH^-1 (-12473) -> No product +At time : 1.9011 ns Reaction : OH^-1 (-12409) + H3O^1 (-8539) -> No product +At time : 1.9011 ns Reaction : OH^-1 (-12313) + H3O^1 (-6261) -> No product +At time : 1.9011 ns Reaction : OH^-1 (-12152) + H3O^1 (-5931) -> No product +At time : 1.9011 ns Reaction : e_aq^-1 (-1903) + H^0 (-12036) -> OH^-1 (-12599) + H_2^0 (-12600) +At time : 1.9011 ns Reaction : H3O^1 (-5933) + OH^-1 (-11734) -> No product +At time : 1.9011 ns Reaction : e_aq^-1 (-5572) + H2O2^0 (-11645) -> OH^-1 (-12601) + °OH^0 (-12602) +At time : 1.9011 ns Reaction : °OH^0 (-11401) + °OH^0 (-7452) -> H2O2^0 (-12603) +At time : 1.9011 ns Reaction : e_aq^-1 (-1383) + H3O^1 (-9028) -> H^0 (-12604) +At time : 1.9011 ns Reaction : e_aq^-1 (-4036) + H3O^1 (-8932) -> H^0 (-12605) +At time : 1.9011 ns Reaction : °OH^0 (-11192) + °OH^0 (-11197) -> H2O2^0 (-12606) +At time : 1.9011 ns Reaction : e_aq^-1 (-5479) + °OH^0 (-5812) -> OH^-1 (-12607) +At time : 2.0011 ns Reaction : e_aq^-1 (-4456) + H^0 (-12443) -> OH^-1 (-12608) + H_2^0 (-12609) +At time : 2.0011 ns Reaction : OH^-1 (-12385) + H3O^1 (-7895) -> No product +At time : 2.0011 ns Reaction : °OH^0 (-11294) + °OH^0 (-12259) -> H2O2^0 (-12610) +At time : 2.0011 ns Reaction : e_aq^-1 (-4150) + H^0 (-12247) -> OH^-1 (-12611) + H_2^0 (-12612) +At time : 2.0011 ns Reaction : H2O2^0 (-12162) + e_aq^-1 (-2356) -> OH^-1 (-12613) + °OH^0 (-12614) +At time : 2.0011 ns Reaction : OH^-1 (-11536) + H3O^1 (-6693) -> No product +At time : 2.0011 ns Reaction : °OH^0 (-10345) + e_aq^-1 (-5414) -> OH^-1 (-12615) +At time : 2.0011 ns Reaction : °OH^0 (-9566) + e_aq^-1 (-3488) -> OH^-1 (-12616) +At time : 2.0011 ns Reaction : e_aq^-1 (-5141) + H3O^1 (-9079) -> H^0 (-12617) +At time : 2.0011 ns Reaction : °OH^0 (-7558) + °OH^0 (-8622) -> H2O2^0 (-12618) +At time : 2.0011 ns Reaction : °OH^0 (-7184) + °OH^0 (-7188) -> H2O2^0 (-12619) +At time : 2.0011 ns Reaction : e_aq^-1 (-931) + H3O^1 (-7147) -> H^0 (-12620) +At time : 2.0011 ns Reaction : e_aq^-1 (-4322) + °OH^0 (-5806) -> OH^-1 (-12621) +At time : 2.1011 ns Reaction : OH^-1 (-12601) + H3O^1 (-7383) -> No product +At time : 2.1011 ns Reaction : °OH^0 (-5948) + H^0 (-12570) -> No product +At time : 2.1011 ns Reaction : OH^-1 (-12560) + H3O^1 (-6917) -> No product +At time : 2.1011 ns Reaction : OH^-1 (-12543) + H3O^1 (-8716) -> No product +At time : 2.1011 ns Reaction : H3O^1 (-9670) + OH^-1 (-12541) -> No product +At time : 2.1011 ns Reaction : e_aq^-1 (-4616) + H^0 (-12232) -> OH^-1 (-12622) + H_2^0 (-12623) +At time : 2.1011 ns Reaction : e_aq^-1 (-3585) + H^0 (-12031) -> OH^-1 (-12624) + H_2^0 (-12625) +At time : 2.1011 ns Reaction : OH^-1 (-12011) + H3O^1 (-8141) -> No product +At time : 2.1011 ns Reaction : °OH^0 (-11162) + °OH^0 (-8376) -> H2O2^0 (-12626) +At time : 2.1011 ns Reaction : °OH^0 (-10653) + H^0 (-9825) -> No product +At time : 2.1011 ns Reaction : H3O^1 (-10575) + e_aq^-1 (-4694) -> H^0 (-12627) +At time : 2.1011 ns Reaction : °OH^0 (-9559) + e_aq^-1 (-3455) -> OH^-1 (-12628) +At time : 2.1011 ns Reaction : °OH^0 (-8486) + °OH^0 (-8769) -> H2O2^0 (-12629) +At time : 2.1011 ns Reaction : °OH^0 (-6716) + °OH^0 (-8694) -> H2O2^0 (-12630) +At time : 2.1011 ns Reaction : e_aq^-1 (-882) + H3O^1 (-8247) -> H^0 (-12631) +At time : 2.1011 ns Reaction : e_aq^-1 (-3686) + H3O^1 (-7883) -> H^0 (-12632) +At time : 2.1011 ns Reaction : e_aq^-1 (-4421) + H3O^1 (-7687) -> H^0 (-12633) +At time : 2.1011 ns Reaction : °OH^0 (-7332) + °OH^0 (-7522) -> H2O2^0 (-12634) +At time : 2.1011 ns Reaction : e_aq^-1 (-4016) + e_aq^-1 (-4027) -> OH^-1 (-12635) + OH^-1 (-12636) + H_2^0 (-12637) +At time : 2.1011 ns Reaction : OH^-1 (-12622) + H3O^1 (-7041) -> No product +At time : 2.1011 ns Reaction : H3O^1 (-10382) + OH^-1 (-12551) -> No product +At time : 2.1011 ns Reaction : e_aq^-1 (-5629) + °OH^0 (-8772) -> OH^-1 (-12638) +At time : 2.1011 ns Reaction : e_aq^-1 (-4227) + °OH^0 (-6848) -> OH^-1 (-12639) +At time : 2.2011 ns Reaction : H^0 (-12563) + °OH^0 (-7010) -> No product +At time : 2.2011 ns Reaction : OH^-1 (-12497) + H3O^1 (-6653) -> No product +At time : 2.2011 ns Reaction : e_aq^-1 (-4605) + H3O^1 (-11024) -> H^0 (-12640) +At time : 2.2011 ns Reaction : °OH^0 (-10446) + °OH^0 (-8450) -> H2O2^0 (-12641) +At time : 2.2011 ns Reaction : °OH^0 (-10370) + °OH^0 (-5719) -> H2O2^0 (-12642) +At time : 2.2011 ns Reaction : °OH^0 (-10336) + °OH^0 (-6118) -> H2O2^0 (-12643) +At time : 2.2011 ns Reaction : °OH^0 (-10042) + e_aq^-1 (-4519) -> OH^-1 (-12644) +At time : 2.2011 ns Reaction : H^0 (-9923) + °OH^0 (-8955) -> No product +At time : 2.2011 ns Reaction : °OH^0 (-9909) + °OH^0 (-9913) -> H2O2^0 (-12645) +At time : 2.2011 ns Reaction : °OH^0 (-9874) + e_aq^-1 (-4069) -> OH^-1 (-12646) +At time : 2.2011 ns Reaction : °OH^0 (-9813) + °OH^0 (-7980) -> H2O2^0 (-12647) +At time : 2.2011 ns Reaction : °OH^0 (-9795) + e_aq^-1 (-3929) -> OH^-1 (-12648) +At time : 2.2011 ns Reaction : °OH^0 (-9326) + °OH^0 (-7818) -> H2O2^0 (-12649) +At time : 2.2011 ns Reaction : °OH^0 (-7804) + H^0 (-9161) -> No product +At time : 2.2011 ns Reaction : °OH^0 (-7388) + °OH^0 (-8474) -> H2O2^0 (-12650) +At time : 2.2011 ns Reaction : e_aq^-1 (-5436) + °OH^0 (-8440) -> OH^-1 (-12651) +At time : 2.2011 ns Reaction : e_aq^-1 (-1578) + H3O^1 (-7679) -> H^0 (-12652) +At time : 2.2011 ns Reaction : e_aq^-1 (-3618) + H3O^1 (-5831) -> H^0 (-12653) +At time : 2.3011 ns Reaction : H3O^1 (-10859) + OH^-1 (-12345) -> No product +At time : 2.3011 ns Reaction : e_aq^-1 (-5403) + H2O2^0 (-12340) -> OH^-1 (-12654) + °OH^0 (-12655) +At time : 2.3011 ns Reaction : OH^-1 (-12318) + H3O^1 (-8243) -> No product +At time : 2.3011 ns Reaction : °OH^0 (-8252) + H^0 (-12188) -> No product +At time : 2.3011 ns Reaction : e_aq^-1 (-3608) + H^0 (-11345) -> OH^-1 (-12656) + H_2^0 (-12657) +At time : 2.3011 ns Reaction : H3O^1 (-10665) + e_aq^-1 (-2621) -> H^0 (-12658) +At time : 2.3011 ns Reaction : °OH^0 (-10576) + e_aq^-1 (-4730) -> OH^-1 (-12659) +At time : 2.3011 ns Reaction : H3O^1 (-9912) + e_aq^-1 (-4167) -> H^0 (-12660) +At time : 2.3011 ns Reaction : °OH^0 (-9685) + °OH^0 (-6446) -> H2O2^0 (-12661) +At time : 2.3011 ns Reaction : e_aq^-1 (-5645) + °OH^0 (-9484) -> OH^-1 (-12662) +At time : 2.3011 ns Reaction : °OH^0 (-9423) + °OH^0 (-8090) -> H2O2^0 (-12663) +At time : 2.3011 ns Reaction : e_aq^-1 (-3905) + °OH^0 (-8664) -> OH^-1 (-12664) +At time : 2.3011 ns Reaction : e_aq^-1 (-5223) + H3O^1 (-8620) -> H^0 (-12665) +At time : 2.3011 ns Reaction : e_aq^-1 (-3990) + °OH^0 (-7992) -> OH^-1 (-12666) +At time : 2.3011 ns Reaction : °OH^0 (-5936) + °OH^0 (-7868) -> H2O2^0 (-12667) +At time : 2.3011 ns Reaction : °OH^0 (-5731) + °OH^0 (-7662) -> H2O2^0 (-12668) +At time : 2.3011 ns Reaction : e_aq^-1 (-4821) + H3O^1 (-7091) -> H^0 (-12669) +At time : 2.3011 ns Reaction : e_aq^-1 (-2250) + °OH^0 (-6686) -> OH^-1 (-12670) +At time : 2.3011 ns Reaction : e_aq^-1 (-2803) + H3O^1 (-6471) -> H^0 (-12671) +At time : 2.3011 ns Reaction : e_aq^-1 (-3540) + H3O^1 (-6283) -> H^0 (-12672) +At time : 2.3011 ns Reaction : e_aq^-1 (-4889) + e_aq^-1 (-4854) -> OH^-1 (-12673) + OH^-1 (-12674) + H_2^0 (-12675) +At time : 2.3011 ns Reaction : e_aq^-1 (-4180) + e_aq^-1 (-4195) -> OH^-1 (-12676) + OH^-1 (-12677) + H_2^0 (-12678) +At time : 2.3011 ns Reaction : °OH^0 (-6266) + °OH^0 (-7814) -> H2O2^0 (-12679) +At time : 2.4011 ns Reaction : OH^-1 (-12639) + H3O^1 (-6855) -> No product +At time : 2.4011 ns Reaction : OH^-1 (-12575) + H3O^1 (-7945) -> No product +At time : 2.4011 ns Reaction : OH^-1 (-12545) + H3O^1 (-7157) -> No product +At time : 2.4011 ns Reaction : H3O^1 (-6231) + OH^-1 (-12517) -> No product +At time : 2.4011 ns Reaction : H3O^1 (-7151) + OH^-1 (-12317) -> No product +At time : 2.4011 ns Reaction : OH^-1 (-12113) + H3O^1 (-10949) -> No product +At time : 2.4011 ns Reaction : °OH^0 (-11078) + °OH^0 (-8218) -> H2O2^0 (-12680) +At time : 2.4011 ns Reaction : °OH^0 (-10136) + °OH^0 (-9230) -> H2O2^0 (-12681) +At time : 2.4011 ns Reaction : H3O^1 (-9887) + e_aq^-1 (-4092) -> H^0 (-12682) +At time : 2.4011 ns Reaction : °OH^0 (-9757) + °OH^0 (-5848) -> H2O2^0 (-12683) +At time : 2.4011 ns Reaction : H3O^1 (-9564) + e_aq^-1 (-3486) -> H^0 (-12684) +At time : 2.4011 ns Reaction : H^0 (-9463) + °OH^0 (-8362) -> No product +At time : 2.4011 ns Reaction : °OH^0 (-7638) + °OH^0 (-9138) -> H2O2^0 (-12685) +At time : 2.4011 ns Reaction : e_aq^-1 (-3844) + H3O^1 (-7937) -> H^0 (-12686) +At time : 2.4011 ns Reaction : °OH^0 (-5914) + °OH^0 (-6294) -> H2O2^0 (-12687) +At time : 2.5011 ns Reaction : H3O^1 (-5997) + OH^-1 (-12646) -> No product +At time : 2.5011 ns Reaction : OH^-1 (-12644) + H3O^1 (-8117) -> No product +At time : 2.5011 ns Reaction : OH^-1 (-12638) + H3O^1 (-6133) -> No product +At time : 2.5011 ns Reaction : e_aq^-1 (-3570) + H2O2^0 (-12553) -> OH^-1 (-12688) + °OH^0 (-12689) +At time : 2.5011 ns Reaction : OH^-1 (-12549) + H3O^1 (-7669) -> No product +At time : 2.5011 ns Reaction : °OH^0 (-12287) + e_aq^-1 (-5147) -> OH^-1 (-12690) +At time : 2.5011 ns Reaction : H2O2^0 (-11694) + e_aq^-1 (-5018) -> OH^-1 (-12691) + °OH^0 (-12692) +At time : 2.5011 ns Reaction : e_aq^-1 (-4983) + °OH^0 (-10225) -> OH^-1 (-12693) +At time : 2.5011 ns Reaction : H^0 (-10219) + °OH^0 (-7178) -> No product +At time : 2.5011 ns Reaction : e_aq^-1 (-2266) + °OH^0 (-9843) -> OH^-1 (-12694) +At time : 2.5011 ns Reaction : °OH^0 (-9587) + °OH^0 (-6292) -> H2O2^0 (-12695) +At time : 2.5011 ns Reaction : e_aq^-1 (-4100) + H3O^1 (-8944) -> H^0 (-12696) +At time : 2.5011 ns Reaction : e_aq^-1 (-3952) + H3O^1 (-6675) -> H^0 (-12697) +At time : 2.5011 ns Reaction : °OH^0 (-6650) + °OH^0 (-6662) -> H2O2^0 (-12698) +At time : 2.5011 ns Reaction : e_aq^-1 (-2955) + H3O^1 (-6417) -> H^0 (-12699) +At time : 2.5011 ns Reaction : H3O^1 (-7195) + OH^-1 (-12693) -> No product +At time : 2.5011 ns Reaction : OH^-1 (-12367) + H3O^1 (-7473) -> No product +At time : 2.5011 ns Reaction : °OH^0 (-7454) + °OH^0 (-8784) -> H2O2^0 (-12700) +At time : 2.5011 ns Reaction : e_aq^-1 (-2823) + °OH^0 (-6464) -> OH^-1 (-12701) +At time : 2.6011 ns Reaction : OH^-1 (-12691) + H3O^1 (-6087) -> No product +At time : 2.6011 ns Reaction : e_aq^-1 (-2579) + H^0 (-12658) -> OH^-1 (-12702) + H_2^0 (-12703) +At time : 2.6011 ns Reaction : OH^-1 (-12654) + H3O^1 (-7499) -> No product +At time : 2.6011 ns Reaction : OH^-1 (-12581) + H3O^1 (-8327) -> No product +At time : 2.6011 ns Reaction : OH^-1 (-12203) + H3O^1 (-8602) -> No product +At time : 2.6011 ns Reaction : H2O2^0 (-11929) + e_aq^-1 (-920) -> OH^-1 (-12704) + °OH^0 (-12705) +At time : 2.6011 ns Reaction : °OH^0 (-9931) + H^0 (-9925) -> No product +At time : 2.6011 ns Reaction : H3O^1 (-9809) + e_aq^-1 (-2539) -> H^0 (-12706) +At time : 2.6011 ns Reaction : °OH^0 (-9668) + e_aq^-1 (-2959) -> OH^-1 (-12707) +At time : 2.6011 ns Reaction : H3O^1 (-8575) + e_aq^-1 (-8855) -> H^0 (-12708) +At time : 2.6011 ns Reaction : e_aq^-1 (-2663) + H3O^1 (-6525) -> H^0 (-12709) +At time : 2.7011 ns Reaction : °OH^0 (-11385) + e_aq^-1 (-4925) -> OH^-1 (-12710) +At time : 2.7011 ns Reaction : °OH^0 (-11089) + °OH^0 (-7138) -> H2O2^0 (-12711) +At time : 2.7011 ns Reaction : H^0 (-10031) + °OH^0 (-9426) -> No product +At time : 2.7011 ns Reaction : H^0 (-9331) + H^0 (-9629) -> H_2^0 (-12712) +At time : 2.7011 ns Reaction : °OH^0 (-6306) + e_aq^-1 (-8882) -> OH^-1 (-12713) +At time : 2.7011 ns Reaction : e_aq^-1 (-5460) + °OH^0 (-8460) -> OH^-1 (-12714) +At time : 2.7011 ns Reaction : e_aq^-1 (-3088) + H3O^1 (-7853) -> H^0 (-12715) +At time : 2.7011 ns Reaction : e_aq^-1 (-5285) + H3O^1 (-7537) -> H^0 (-12716) +At time : 2.7011 ns Reaction : e_aq^-1 (-2359) + °OH^0 (-6690) -> OH^-1 (-12717) +At time : 2.7011 ns Reaction : °OH^0 (-6534) + °OH^0 (-6542) -> H2O2^0 (-12718) +At time : 2.7011 ns Reaction : e_aq^-1 (-2750) + H3O^1 (-6523) -> H^0 (-12719) +At time : 2.7011 ns Reaction : e_aq^-1 (-400) + H^0 (-12716) -> OH^-1 (-12720) + H_2^0 (-12721) +At time : 2.7011 ns Reaction : OH^-1 (-12636) + H3O^1 (-6713) -> No product +At time : 2.8011 ns Reaction : H3O^1 (-11159) + OH^-1 (-12690) -> No product +At time : 2.8011 ns Reaction : OH^-1 (-12611) + H3O^1 (-10871) -> No product +At time : 2.8011 ns Reaction : H3O^1 (-10886) + OH^-1 (-12572) -> No product +At time : 2.8011 ns Reaction : OH^-1 (-12456) + H3O^1 (-8187) -> No product +At time : 2.8011 ns Reaction : OH^-1 (-12450) + H3O^1 (-8273) -> No product +At time : 2.8011 ns Reaction : e_aq^-1 (-5456) + H2O2^0 (-11779) -> OH^-1 (-12722) + °OH^0 (-12723) +At time : 2.8011 ns Reaction : e_aq^-1 (-1487) + H2O2^0 (-11633) -> OH^-1 (-12724) + °OH^0 (-12725) +At time : 2.8011 ns Reaction : °OH^0 (-10720) + H^0 (-9627) -> No product +At time : 2.8011 ns Reaction : °OH^0 (-10484) + °OH^0 (-7312) -> H2O2^0 (-12726) +At time : 2.8011 ns Reaction : e_aq^-1 (-4832) + °OH^0 (-9065) -> OH^-1 (-12727) +At time : 2.8011 ns Reaction : e_aq^-1 (-4745) + H3O^1 (-8644) -> H^0 (-12728) +At time : 2.8011 ns Reaction : e_aq^-1 (-4913) + H3O^1 (-7163) -> H^0 (-12729) +At time : 2.8011 ns Reaction : e_aq^-1 (-4088) + H3O^1 (-6757) -> H^0 (-12730) +At time : 2.8011 ns Reaction : e_aq^-1 (-4313) + e_aq^-1 (-4298) -> OH^-1 (-12731) + OH^-1 (-12732) + H_2^0 (-12733) +At time : 2.8011 ns Reaction : e_aq^-1 (-2974) + e_aq^-1 (-3654) -> OH^-1 (-12734) + OH^-1 (-12735) + H_2^0 (-12736) +At time : 2.8011 ns Reaction : e_aq^-1 (-975) + e_aq^-1 (-1010) -> OH^-1 (-12737) + OH^-1 (-12738) + H_2^0 (-12739) +At time : 2.8011 ns Reaction : OH^-1 (-12722) + H3O^1 (-11314) -> No product +At time : 2.9011 ns Reaction : OH^-1 (-12724) + H3O^1 (-6967) -> No product +At time : 2.9011 ns Reaction : H3O^1 (-10655) + OH^-1 (-12613) -> No product +At time : 2.9011 ns Reaction : OH^-1 (-12500) + H3O^1 (-7943) -> No product +At time : 2.9011 ns Reaction : H3O^1 (-11000) + OH^-1 (-12498) -> No product +At time : 2.9011 ns Reaction : OH^-1 (-12301) + H3O^1 (-6727) -> No product +At time : 2.9011 ns Reaction : H2O2^0 (-11677) + e_aq^-1 (-8582) -> OH^-1 (-12740) + °OH^0 (-12741) +At time : 2.9011 ns Reaction : °OH^0 (-11186) + °OH^0 (-9093) -> H2O2^0 (-12742) +At time : 2.9011 ns Reaction : °OH^0 (-11016) + °OH^0 (-11017) -> H2O2^0 (-12743) +At time : 2.9011 ns Reaction : °OH^0 (-10754) + °OH^0 (-8883) -> H2O2^0 (-12744) +At time : 2.9011 ns Reaction : H^0 (-10449) + °OH^0 (-5722) -> No product +At time : 2.9011 ns Reaction : °OH^0 (-9794) + H^0 (-9191) -> No product +At time : 2.9011 ns Reaction : e_aq^-1 (-5490) + °OH^0 (-8456) -> OH^-1 (-12745) +At time : 2.9011 ns Reaction : °OH^0 (-7408) + °OH^0 (-7428) -> H2O2^0 (-12746) +At time : 2.9011 ns Reaction : °OH^0 (-7264) + °OH^0 (-7266) -> H2O2^0 (-12747) +At time : 2.9011 ns Reaction : e_aq^-1 (-4686) + H3O^1 (-7067) -> H^0 (-12748) +At time : 2.9011 ns Reaction : H3O^1 (-5873) + e_aq^-1 (-8777) -> H^0 (-12749) +At time : 2.9011 ns Reaction : e_aq^-1 (-901) + °OH^0 (-8292) -> OH^-1 (-12750) +At time : 2.9011 ns Reaction : e_aq^-1 (-293) + °OH^0 (-7506) -> OH^-1 (-12751) +At time : 3.0011 ns Reaction : H3O^1 (-11189) + OH^-1 (-12751) -> No product +At time : 3.0011 ns Reaction : °OH^0 (-9979) + °OH^0 (-12741) -> H2O2^0 (-12752) +At time : 3.0011 ns Reaction : OH^-1 (-12702) + H3O^1 (-7933) -> No product +At time : 3.0011 ns Reaction : H3O^1 (-6631) + OH^-1 (-12664) -> No product +At time : 3.0011 ns Reaction : OH^-1 (-12503) + H3O^1 (-5937) -> No product +At time : 3.0011 ns Reaction : OH^-1 (-12400) + H3O^1 (-6827) -> No product +At time : 3.0011 ns Reaction : OH^-1 (-12304) + H3O^1 (-7501) -> No product +At time : 3.0011 ns Reaction : °OH^0 (-6252) + H^0 (-11748) -> No product +At time : 3.0011 ns Reaction : H3O^1 (-11157) + e_aq^-1 (-484) -> H^0 (-12753) +At time : 3.0011 ns Reaction : °OH^0 (-11156) + e_aq^-1 (-604) -> OH^-1 (-12754) +At time : 3.0011 ns Reaction : °OH^0 (-10939) + °OH^0 (-8996) -> H2O2^0 (-12755) +At time : 3.0011 ns Reaction : °OH^0 (-10296) + °OH^0 (-8372) -> H2O2^0 (-12756) +At time : 3.0011 ns Reaction : °OH^0 (-10248) + °OH^0 (-8338) -> H2O2^0 (-12757) +At time : 3.0011 ns Reaction : H^0 (-10025) + e_aq^-1 (-4484) -> OH^-1 (-12758) + H_2^0 (-12759) +At time : 3.0011 ns Reaction : °OH^0 (-8136) + e_aq^-1 (-9032) -> OH^-1 (-12760) +At time : 3.0011 ns Reaction : °OH^0 (-7020) + °OH^0 (-8526) -> H2O2^0 (-12761) +At time : 3.0011 ns Reaction : e_aq^-1 (-3582) + H3O^1 (-6317) -> H^0 (-12762) +At time : 3.0011 ns Reaction : e_aq^-1 (-2543) + °OH^0 (-6586) -> OH^-1 (-12763) +At time : 3.1011 ns Reaction : H3O^1 (-11275) + OH^-1 (-12763) -> No product +At time : 3.1011 ns Reaction : H3O^1 (-6061) + OH^-1 (-12760) -> No product +At time : 3.1011 ns Reaction : OH^-1 (-12758) + H3O^1 (-8093) -> No product +At time : 3.1011 ns Reaction : e_aq^-1 (-3783) + H2O2^0 (-12718) -> OH^-1 (-12764) + °OH^0 (-12765) +At time : 3.1011 ns Reaction : OH^-1 (-12615) + H3O^1 (-5881) -> No product +At time : 3.1011 ns Reaction : °OH^0 (-10685) + H^0 (-11838) -> No product +At time : 3.1011 ns Reaction : °OH^0 (-10808) + °OH^0 (-9768) -> H2O2^0 (-12766) +At time : 3.1011 ns Reaction : °OH^0 (-10501) + °OH^0 (-10282) -> H2O2^0 (-12767) +At time : 3.1011 ns Reaction : H^0 (-9866) + °OH^0 (-8012) -> No product +At time : 3.1011 ns Reaction : H^0 (-9476) + °OH^0 (-7476) -> No product +At time : 3.1011 ns Reaction : °OH^0 (-9311) + °OH^0 (-7784) -> H2O2^0 (-12768) +At time : 3.1011 ns Reaction : e_aq^-1 (-5221) + H3O^1 (-8389) -> H^0 (-12769) +At time : 3.1011 ns Reaction : e_aq^-1 (-3631) + H3O^1 (-7855) -> H^0 (-12770) +At time : 3.1011 ns Reaction : e_aq^-1 (-5694) + H3O^1 (-6135) -> H^0 (-12771) +At time : 3.2011 ns Reaction : H^0 (-12429) + °OH^0 (-8214) -> No product +At time : 3.2011 ns Reaction : e_aq^-1 (-1075) + H^0 (-12393) -> OH^-1 (-12772) + H_2^0 (-12773) +At time : 3.2011 ns Reaction : e_aq^-1 (-1028) + H^0 (-12378) -> OH^-1 (-12774) + H_2^0 (-12775) +At time : 3.2011 ns Reaction : OH^-1 (-12174) + H3O^1 (-8289) -> No product +At time : 3.2011 ns Reaction : e_aq^-1 (-4592) + H2O2^0 (-11574) -> OH^-1 (-12776) + °OH^0 (-12777) +At time : 3.2011 ns Reaction : °OH^0 (-10559) + °OH^0 (-10194) -> H2O2^0 (-12778) +At time : 3.2011 ns Reaction : H^0 (-10511) + °OH^0 (-6106) -> No product +At time : 3.2011 ns Reaction : H^0 (-10089) + e_aq^-1 (-1306) -> OH^-1 (-12779) + H_2^0 (-12780) +At time : 3.2011 ns Reaction : H3O^1 (-9822) + e_aq^-1 (-2382) -> H^0 (-12781) +At time : 3.2011 ns Reaction : °OH^0 (-6892) + H^0 (-9215) -> No product +At time : 3.2011 ns Reaction : e_aq^-1 (-4870) + H3O^1 (-8245) -> H^0 (-12782) +At time : 3.2011 ns Reaction : °OH^0 (-6666) + °OH^0 (-7982) -> H2O2^0 (-12783) +At time : 3.2011 ns Reaction : e_aq^-1 (-2779) + H3O^1 (-7773) -> H^0 (-12784) +At time : 3.3011 ns Reaction : H3O^1 (-6929) + OH^-1 (-12740) -> No product +At time : 3.3011 ns Reaction : OH^-1 (-12701) + H3O^1 (-6455) -> No product +At time : 3.3011 ns Reaction : OH^-1 (-12335) + H3O^1 (-7343) -> No product +At time : 3.3011 ns Reaction : e_aq^-1 (-501) + H^0 (-11995) -> OH^-1 (-12785) + H_2^0 (-12786) +At time : 3.3011 ns Reaction : OH^-1 (-11976) + H3O^1 (-8217) -> No product +At time : 3.3011 ns Reaction : e_aq^-1 (-9080) + H2O2^0 (-11564) -> OH^-1 (-12787) + °OH^0 (-12788) +At time : 3.3011 ns Reaction : °OH^0 (-10919) + e_aq^-1 (-8984) -> OH^-1 (-12789) +At time : 3.3011 ns Reaction : H^0 (-10752) + e_aq^-1 (-8672) -> OH^-1 (-12790) + H_2^0 (-12791) +At time : 3.3011 ns Reaction : H^0 (-10353) + °OH^0 (-7486) -> No product +At time : 3.3011 ns Reaction : H^0 (-9722) + °OH^0 (-5958) -> No product +At time : 3.3011 ns Reaction : °OH^0 (-9689) + °OH^0 (-6456) -> H2O2^0 (-12792) +At time : 3.3011 ns Reaction : e_aq^-1 (-5196) + H3O^1 (-8393) -> H^0 (-12793) +At time : 3.3011 ns Reaction : e_aq^-1 (-1723) + H3O^1 (-8097) -> H^0 (-12794) +At time : 3.3011 ns Reaction : e_aq^-1 (-3948) + H3O^1 (-7983) -> H^0 (-12795) +At time : 3.3011 ns Reaction : °OH^0 (-7950) + °OH^0 (-7952) -> H2O2^0 (-12796) +At time : 3.3011 ns Reaction : e_aq^-1 (-3510) + °OH^0 (-7816) -> OH^-1 (-12797) +At time : 3.4011 ns Reaction : H3O^1 (-10364) + OH^-1 (-12745) -> No product +At time : 3.4011 ns Reaction : H3O^1 (-10719) + OH^-1 (-12713) -> No product +At time : 3.4011 ns Reaction : H3O^1 (-11254) + OH^-1 (-12662) -> No product +At time : 3.4011 ns Reaction : H3O^1 (-11068) + OH^-1 (-12659) -> No product +At time : 3.4011 ns Reaction : e_aq^-1 (-1420) + H^0 (-12604) -> OH^-1 (-12798) + H_2^0 (-12799) +At time : 3.4011 ns Reaction : e_aq^-1 (-5320) + H2O2^0 (-12022) -> OH^-1 (-12800) + °OH^0 (-12801) +At time : 3.4011 ns Reaction : e_aq^-1 (-4924) + H2O2^0 (-11749) -> OH^-1 (-12802) + °OH^0 (-12803) +At time : 3.4011 ns Reaction : °OH^0 (-10584) + °OH^0 (-6214) -> H2O2^0 (-12804) +At time : 3.4011 ns Reaction : °OH^0 (-9702) + e_aq^-1 (-2791) -> OH^-1 (-12805) +At time : 3.4011 ns Reaction : °OH^0 (-9596) + H^0 (-9588) -> No product +At time : 3.4011 ns Reaction : °OH^0 (-9320) + e_aq^-1 (-8879) -> OH^-1 (-12806) +At time : 3.4011 ns Reaction : e_aq^-1 (-4735) + H3O^1 (-8533) -> H^0 (-12807) +At time : 3.4011 ns Reaction : e_aq^-1 (-4950) + °OH^0 (-8266) -> OH^-1 (-12808) +At time : 3.4011 ns Reaction : e_aq^-1 (-2333) + H3O^1 (-8005) -> H^0 (-12809) +At time : 3.4011 ns Reaction : e_aq^-1 (-313) + H3O^1 (-7519) -> H^0 (-12810) +At time : 3.4011 ns Reaction : °OH^0 (-5960) + °OH^0 (-6576) -> H2O2^0 (-12811) +At time : 3.4011 ns Reaction : °OH^0 (-5938) + °OH^0 (-6408) -> H2O2^0 (-12812) +At time : 3.4011 ns Reaction : e_aq^-1 (-5659) + e_aq^-1 (-5686) -> OH^-1 (-12813) + OH^-1 (-12814) + H_2^0 (-12815) +At time : 3.4011 ns Reaction : OH^-1 (-12802) + H3O^1 (-7187) -> No product +At time : 3.5011 ns Reaction : H^0 (-12794) + H^0 (-11638) -> H_2^0 (-12816) +At time : 3.5011 ns Reaction : e_aq^-1 (-2741) + H^0 (-12784) -> OH^-1 (-12817) + H_2^0 (-12818) +At time : 3.5011 ns Reaction : OH^-1 (-12707) + H3O^1 (-6399) -> No product +At time : 3.5011 ns Reaction : OH^-1 (-12651) + H3O^1 (-8431) -> No product +At time : 3.5011 ns Reaction : H^0 (-12568) + e_aq^-1 (-3907) -> OH^-1 (-12819) + H_2^0 (-12820) +At time : 3.5011 ns Reaction : H^0 (-12396) + °OH^0 (-7224) -> No product +At time : 3.5011 ns Reaction : H3O^1 (-10315) + OH^-1 (-12243) -> No product +At time : 3.5011 ns Reaction : H3O^1 (-6243) + OH^-1 (-12014) -> No product +At time : 3.5011 ns Reaction : e_aq^-1 (-5371) + H2O2^0 (-11515) -> OH^-1 (-12821) + °OH^0 (-12822) +At time : 3.5011 ns Reaction : °OH^0 (-10675) + °OH^0 (-6372) -> H2O2^0 (-12823) +At time : 3.5011 ns Reaction : °OH^0 (-10396) + °OH^0 (-9483) -> H2O2^0 (-12824) +At time : 3.5011 ns Reaction : °OH^0 (-9663) + e_aq^-1 (-3666) -> OH^-1 (-12825) +At time : 3.5011 ns Reaction : e_aq^-1 (-4798) + H3O^1 (-7089) -> H^0 (-12826) +At time : 3.5011 ns Reaction : e_aq^-1 (-4907) + e_aq^-1 (-4951) -> OH^-1 (-12827) + OH^-1 (-12828) + H_2^0 (-12829) +At time : 3.5011 ns Reaction : e_aq^-1 (-2748) + °OH^0 (-6504) -> OH^-1 (-12830) +At time : 3.6011 ns Reaction : OH^-1 (-12800) + H3O^1 (-8614) -> No product +At time : 3.6011 ns Reaction : OH^-1 (-12607) + H3O^1 (-8451) -> No product +At time : 3.6011 ns Reaction : e_aq^-1 (-736) + H2O2^0 (-12416) -> OH^-1 (-12831) + °OH^0 (-12832) +At time : 3.6011 ns Reaction : H3O^1 (-9918) + OH^-1 (-12214) -> No product +At time : 3.6011 ns Reaction : e_aq^-1 (-5317) + H2O2^0 (-12093) -> OH^-1 (-12833) + °OH^0 (-12834) +At time : 3.6011 ns Reaction : H2O2^0 (-11431) + e_aq^-1 (-8729) -> OH^-1 (-12835) + °OH^0 (-12836) +At time : 3.6011 ns Reaction : °OH^0 (-11082) + °OH^0 (-7128) -> H2O2^0 (-12837) +At time : 3.6011 ns Reaction : H^0 (-9812) + e_aq^-1 (-2399) -> OH^-1 (-12838) + H_2^0 (-12839) +At time : 3.6011 ns Reaction : e_aq^-1 (-1828) + H3O^1 (-8063) -> H^0 (-12840) +At time : 3.6011 ns Reaction : e_aq^-1 (-5608) + H3O^1 (-7427) -> H^0 (-12841) +At time : 3.6011 ns Reaction : °OH^0 (-6866) + °OH^0 (-6870) -> H2O2^0 (-12842) +At time : 3.6011 ns Reaction : H3O^1 (-7125) + OH^-1 (-12564) -> No product +At time : 3.6011 ns Reaction : °OH^0 (-9304) + e_aq^-1 (-3450) -> OH^-1 (-12843) +At time : 3.6011 ns Reaction : e_aq^-1 (-4895) + H3O^1 (-7173) -> H^0 (-12844) +At time : 3.7011 ns Reaction : OH^-1 (-12720) + H3O^1 (-8809) -> No product +At time : 3.7011 ns Reaction : OH^-1 (-12538) + H3O^1 (-9082) -> No product +At time : 3.7011 ns Reaction : H3O^1 (-11240) + e_aq^-1 (-5452) -> H^0 (-12845) +At time : 3.7011 ns Reaction : H^0 (-11127) + e_aq^-1 (-5005) -> OH^-1 (-12846) + H_2^0 (-12847) +At time : 3.7011 ns Reaction : H^0 (-9836) + e_aq^-1 (-3982) -> OH^-1 (-12848) + H_2^0 (-12849) +At time : 3.7011 ns Reaction : °OH^0 (-9403) + °OH^0 (-5755) -> H2O2^0 (-12850) +At time : 3.7011 ns Reaction : H^0 (-9337) + e_aq^-1 (-2910) -> OH^-1 (-12851) + H_2^0 (-12852) +At time : 3.7011 ns Reaction : °OH^0 (-7018) + e_aq^-1 (-8651) -> OH^-1 (-12853) +At time : 3.7011 ns Reaction : e_aq^-1 (-4609) + H3O^1 (-7033) -> H^0 (-12854) +At time : 3.7011 ns Reaction : e_aq^-1 (-5687) + °OH^0 (-6142) -> OH^-1 (-12855) +At time : 3.8011 ns Reaction : OH^-1 (-12846) + H3O^1 (-7185) -> No product +At time : 3.8011 ns Reaction : OH^-1 (-12790) + H3O^1 (-6381) -> No product +At time : 3.8011 ns Reaction : OH^-1 (-12774) + H3O^1 (-8207) -> No product +At time : 3.8011 ns Reaction : H3O^1 (-7603) + OH^-1 (-12704) -> No product +At time : 3.8011 ns Reaction : OH^-1 (-12452) + H3O^1 (-7845) -> No product +At time : 3.8011 ns Reaction : e_aq^-1 (-4297) + H2O2^0 (-11815) -> OH^-1 (-12856) + °OH^0 (-12857) +At time : 3.8011 ns Reaction : °OH^0 (-11176) + °OH^0 (-7538) -> H2O2^0 (-12858) +At time : 3.8011 ns Reaction : °OH^0 (-10520) + °OH^0 (-9081) -> H2O2^0 (-12859) +At time : 3.8011 ns Reaction : °OH^0 (-10428) + e_aq^-1 (-5616) -> OH^-1 (-12860) +At time : 3.8011 ns Reaction : H^0 (-9818) + H^0 (-9193) -> H_2^0 (-12861) +At time : 3.8011 ns Reaction : e_aq^-1 (-2466) + H3O^1 (-8914) -> H^0 (-12862) +At time : 3.8011 ns Reaction : e_aq^-1 (-2873) + e_aq^-1 (-8507) -> OH^-1 (-12863) + OH^-1 (-12864) + H_2^0 (-12865) +At time : 3.8011 ns Reaction : e_aq^-1 (-5321) + H3O^1 (-7357) -> H^0 (-12866) +At time : 3.8011 ns Reaction : e_aq^-1 (-1816) + H3O^1 (-6883) -> H^0 (-12867) +At time : 3.8011 ns Reaction : e_aq^-1 (-2511) + H3O^1 (-6639) -> H^0 (-12868) +At time : 3.8011 ns Reaction : H3O^1 (-10784) + OH^-1 (-12492) -> No product +At time : 3.9011 ns Reaction : H^0 (-12826) + °OH^0 (-8190) -> No product +At time : 3.9011 ns Reaction : H2O2^0 (-12569) + e_aq^-1 (-2571) -> OH^-1 (-12869) + °OH^0 (-12870) +At time : 3.9011 ns Reaction : °OH^0 (-11104) + H^0 (-10555) -> No product +At time : 3.9011 ns Reaction : °OH^0 (-6744) + °OH^0 (-8938) -> H2O2^0 (-12871) +At time : 3.9011 ns Reaction : H3O^1 (-8017) + e_aq^-1 (-8663) -> H^0 (-12872) +At time : 3.9011 ns Reaction : e_aq^-1 (-415) + H3O^1 (-8554) -> H^0 (-12873) +At time : 3.9011 ns Reaction : e_aq^-1 (-5417) + H3O^1 (-7467) -> H^0 (-12874) +At time : 3.9011 ns Reaction : e_aq^-1 (-3968) + H3O^1 (-6677) -> H^0 (-12875) +At time : 3.9011 ns Reaction : e_aq^-1 (-3934) + °OH^0 (-5976) -> OH^-1 (-12876) +At time : 3.9011 ns Reaction : e_aq^-1 (-2784) + °OH^0 (-5844) -> OH^-1 (-12877) +At time : 3.9011 ns Reaction : e_aq^-1 (-27) + e_aq^-1 (-5644) -> OH^-1 (-12878) + OH^-1 (-12879) + H_2^0 (-12880) +At time : 3.9011 ns Reaction : e_aq^-1 (-4387) + e_aq^-1 (-4360) -> OH^-1 (-12881) + OH^-1 (-12882) + H_2^0 (-12883) +At time : 4.0011 ns Reaction : OH^-1 (-12877) + H3O^1 (-8899) -> No product +At time : 4.0011 ns Reaction : H3O^1 (-6867) + OH^-1 (-12789) -> No product +At time : 4.0011 ns Reaction : OH^-1 (-12717) + H3O^1 (-6657) -> No product +At time : 4.0011 ns Reaction : OH^-1 (-12608) + H3O^1 (-8109) -> No product +At time : 4.0011 ns Reaction : e_aq^-1 (-5082) + H2O2^0 (-11853) -> OH^-1 (-12884) + °OH^0 (-12885) +At time : 4.0011 ns Reaction : e_aq^-1 (-53) + H2O2^0 (-11833) -> OH^-1 (-12886) + °OH^0 (-12887) +At time : 4.0011 ns Reaction : H^0 (-11374) + °OH^0 (-7030) -> No product +At time : 4.0011 ns Reaction : °OH^0 (-7850) + °OH^0 (-11344) -> H2O2^0 (-12888) +At time : 4.0011 ns Reaction : H^0 (-9637) + e_aq^-1 (-3589) -> OH^-1 (-12889) + H_2^0 (-12890) +At time : 4.0011 ns Reaction : e_aq^-1 (-1094) + H3O^1 (-8181) -> H^0 (-12891) +At time : 4.0011 ns Reaction : e_aq^-1 (-2472) + °OH^0 (-6614) -> OH^-1 (-12892) +At time : 4.0011 ns Reaction : e_aq^-1 (-4242) + °OH^0 (-8844) -> OH^-1 (-12893) +At time : 4.1011 ns Reaction : H3O^1 (-9930) + OH^-1 (-12893) -> No product +At time : 4.1011 ns Reaction : H3O^1 (-10897) + OH^-1 (-12856) -> No product +At time : 4.1011 ns Reaction : H3O^1 (-6083) + OH^-1 (-12710) -> No product +At time : 4.1011 ns Reaction : OH^-1 (-12589) + H3O^1 (-10903) -> No product +At time : 4.1011 ns Reaction : H^0 (-12242) + H^0 (-9177) -> H_2^0 (-12894) +At time : 4.1011 ns Reaction : °OH^0 (-11168) + °OH^0 (-8818) -> H2O2^0 (-12895) +At time : 4.1011 ns Reaction : °OH^0 (-7168) + °OH^0 (-8826) -> H2O2^0 (-12896) +At time : 4.1011 ns Reaction : e_aq^-1 (-4717) + H3O^1 (-8647) -> H^0 (-12897) +At time : 4.1011 ns Reaction : e_aq^-1 (-4033) + °OH^0 (-5994) -> OH^-1 (-12898) +At time : 4.1011 ns Reaction : e_aq^-1 (-3565) + H3O^1 (-5905) -> H^0 (-12899) +At time : 4.2011 ns Reaction : OH^-1 (-12876) + H3O^1 (-10816) -> No product +At time : 4.2011 ns Reaction : OH^-1 (-12831) + H3O^1 (-8755) -> No product +At time : 4.2011 ns Reaction : e_aq^-1 (-3949) + H^0 (-12781) -> OH^-1 (-12900) + H_2^0 (-12901) +At time : 4.2011 ns Reaction : °OH^0 (-12777) + e_aq^-1 (-4648) -> OH^-1 (-12902) +At time : 4.2011 ns Reaction : OH^-1 (-12714) + H3O^1 (-7459) -> No product +At time : 4.2011 ns Reaction : e_aq^-1 (-1003) + H^0 (-12669) -> OH^-1 (-12903) + H_2^0 (-12904) +At time : 4.2011 ns Reaction : H3O^1 (-10963) + OH^-1 (-12586) -> No product +At time : 4.2011 ns Reaction : H3O^1 (-6013) + OH^-1 (-12554) -> No product +At time : 4.2011 ns Reaction : OH^-1 (-12425) + H3O^1 (-6887) -> No product +At time : 4.2011 ns Reaction : e_aq^-1 (-5019) + °OH^0 (-10532) -> OH^-1 (-12905) +At time : 4.2011 ns Reaction : °OH^0 (-10492) + °OH^0 (-8388) -> H2O2^0 (-12906) +At time : 4.2011 ns Reaction : °OH^0 (-10132) + °OH^0 (-6068) -> H2O2^0 (-12907) +At time : 4.2011 ns Reaction : e_aq^-1 (-3590) + °OH^0 (-7842) -> OH^-1 (-12908) +At time : 4.2011 ns Reaction : e_aq^-1 (-5037) + H3O^1 (-7199) -> H^0 (-12909) +At time : 4.3011 ns Reaction : °OH^0 (-7474) + °OH^0 (-9108) -> H2O2^0 (-12910) +At time : 4.3011 ns Reaction : e_aq^-1 (-3664) + °OH^0 (-7858) -> OH^-1 (-12911) +At time : 4.3011 ns Reaction : °OH^0 (-6136) + °OH^0 (-7420) -> H2O2^0 (-12912) +At time : 4.3011 ns Reaction : °OH^0 (-6778) + °OH^0 (-6796) -> H2O2^0 (-12913) +At time : 4.4011 ns Reaction : OH^-1 (-12787) + H3O^1 (-8337) -> No product +At time : 4.4011 ns Reaction : OH^-1 (-12583) + H3O^1 (-7625) -> No product +At time : 4.4011 ns Reaction : H3O^1 (-6427) + OH^-1 (-12316) -> No product +At time : 4.4011 ns Reaction : H^0 (-11297) + e_aq^-1 (-4678) -> OH^-1 (-12914) + H_2^0 (-12915) +At time : 4.4011 ns Reaction : °OH^0 (-10798) + °OH^0 (-7920) -> H2O2^0 (-12916) +At time : 4.4011 ns Reaction : H^0 (-10359) + e_aq^-1 (-8561) -> OH^-1 (-12917) + H_2^0 (-12918) +At time : 4.4011 ns Reaction : °OH^0 (-9947) + °OH^0 (-8652) -> H2O2^0 (-12919) +At time : 4.4011 ns Reaction : e_aq^-1 (-2179) + H^0 (-9862) -> OH^-1 (-12920) + H_2^0 (-12921) +At time : 4.4011 ns Reaction : °OH^0 (-7616) + °OH^0 (-9057) -> H2O2^0 (-12922) +At time : 4.4011 ns Reaction : °OH^0 (-5764) + e_aq^-1 (-8915) -> OH^-1 (-12923) +At time : 4.4011 ns Reaction : °OH^0 (-7186) + °OH^0 (-8751) -> H2O2^0 (-12924) +At time : 4.4011 ns Reaction : e_aq^-1 (-5213) + H3O^1 (-8355) -> H^0 (-12925) +At time : 4.4011 ns Reaction : e_aq^-1 (-5712) + °OH^0 (-7436) -> OH^-1 (-12926) +At time : 4.4011 ns Reaction : e_aq^-1 (-1272) + °OH^0 (-7034) -> OH^-1 (-12927) +At time : 4.4011 ns Reaction : °OH^0 (-6762) + °OH^0 (-6764) -> H2O2^0 (-12928) +At time : 4.4011 ns Reaction : e_aq^-1 (-3887) + H3O^1 (-6627) -> H^0 (-12929) +At time : 4.5011 ns Reaction : OH^-1 (-12819) + H3O^1 (-6615) -> No product +At time : 4.5011 ns Reaction : H^0 (-12682) + e_aq^-1 (-2140) -> OH^-1 (-12930) + H_2^0 (-12931) +At time : 4.5011 ns Reaction : H3O^1 (-6395) + OH^-1 (-12491) -> No product +At time : 4.5011 ns Reaction : H^0 (-9829) + e_aq^-1 (-2342) -> OH^-1 (-12932) + H_2^0 (-12933) +At time : 4.5011 ns Reaction : e_aq^-1 (-2720) + H3O^1 (-7903) -> H^0 (-12934) +At time : 4.5011 ns Reaction : e_aq^-1 (-4864) + °OH^0 (-7598) -> OH^-1 (-12935) +At time : 4.5011 ns Reaction : e_aq^-1 (-5597) + °OH^0 (-7468) -> OH^-1 (-12936) +At time : 4.5011 ns Reaction : e_aq^-1 (-4153) + °OH^0 (-5800) -> OH^-1 (-12937) +At time : 4.5011 ns Reaction : e_aq^-1 (-4629) + e_aq^-1 (-1258) -> OH^-1 (-12938) + OH^-1 (-12939) + H_2^0 (-12940) +At time : 4.5011 ns Reaction : e_aq^-1 (-3834) + e_aq^-1 (-3840) -> OH^-1 (-12941) + OH^-1 (-12942) + H_2^0 (-12943) +At time : 4.5011 ns Reaction : e_aq^-1 (-3613) + e_aq^-1 (-3601) -> OH^-1 (-12944) + OH^-1 (-12945) + H_2^0 (-12946) +At time : 4.5011 ns Reaction : H2O2^0 (-11771) + e_aq^-1 (-4116) -> OH^-1 (-12947) + °OH^0 (-12948) +At time : 4.5011 ns Reaction : OH^-1 (-12947) + H3O^1 (-6771) -> No product +At time : 4.6011 ns Reaction : OH^-1 (-12835) + H3O^1 (-5863) -> No product +At time : 4.6011 ns Reaction : H3O^1 (-5953) + OH^-1 (-12805) -> No product +At time : 4.6011 ns Reaction : H3O^1 (-7253) + OH^-1 (-12754) -> No product +At time : 4.6011 ns Reaction : OH^-1 (-12677) + H3O^1 (-6017) -> No product +At time : 4.6011 ns Reaction : H3O^1 (-6075) + OH^-1 (-12674) -> No product +At time : 4.6011 ns Reaction : e_aq^-1 (-274) + H^0 (-12588) -> OH^-1 (-12949) + H_2^0 (-12950) +At time : 4.6011 ns Reaction : H^0 (-10612) + e_aq^-1 (-1685) -> OH^-1 (-12951) + H_2^0 (-12952) +At time : 4.6011 ns Reaction : °OH^0 (-10149) + °OH^0 (-7060) -> H2O2^0 (-12953) +At time : 4.6011 ns Reaction : °OH^0 (-9859) + e_aq^-1 (-2234) -> OH^-1 (-12954) +At time : 4.6011 ns Reaction : °OH^0 (-6104) + °OH^0 (-8815) -> H2O2^0 (-12955) +At time : 4.6011 ns Reaction : e_aq^-1 (-3542) + H3O^1 (-7817) -> H^0 (-12956) +At time : 4.6011 ns Reaction : e_aq^-1 (-5561) + °OH^0 (-7438) -> OH^-1 (-12957) +At time : 4.6011 ns Reaction : e_aq^-1 (-409) + e_aq^-1 (-447) -> OH^-1 (-12958) + OH^-1 (-12959) + H_2^0 (-12960) +At time : 4.7011 ns Reaction : OH^-1 (-12772) + H3O^1 (-7095) -> No product +At time : 4.7011 ns Reaction : °OH^0 (-11063) + H^0 (-9139) -> No product +At time : 4.7011 ns Reaction : H^0 (-10803) + e_aq^-1 (-3819) -> OH^-1 (-12961) + H_2^0 (-12962) +At time : 4.7011 ns Reaction : H^0 (-10624) + e_aq^-1 (-4287) -> OH^-1 (-12963) + H_2^0 (-12964) +At time : 4.7011 ns Reaction : °OH^0 (-10480) + °OH^0 (-9099) -> H2O2^0 (-12965) +At time : 4.7011 ns Reaction : °OH^0 (-9459) + °OH^0 (-8326) -> H2O2^0 (-12966) +At time : 4.7011 ns Reaction : H^0 (-9335) + e_aq^-1 (-3659) -> OH^-1 (-12967) + H_2^0 (-12968) +At time : 4.7011 ns Reaction : e_aq^-1 (-695) + H3O^1 (-8623) -> H^0 (-12969) +At time : 4.7011 ns Reaction : e_aq^-1 (-4918) + H3O^1 (-8281) -> H^0 (-12970) +At time : 4.8011 ns Reaction : H^0 (-12874) + e_aq^-1 (-9107) -> OH^-1 (-12971) + H_2^0 (-12972) +At time : 4.8011 ns Reaction : OH^-1 (-12833) + H3O^1 (-8405) -> No product +At time : 4.8011 ns Reaction : e_aq^-1 (-370) + H^0 (-12769) -> OH^-1 (-12973) + H_2^0 (-12974) +At time : 4.8011 ns Reaction : H^0 (-12574) + °OH^0 (-8380) -> No product +At time : 4.8011 ns Reaction : OH^-1 (-12531) + H3O^1 (-7977) -> No product +At time : 4.8011 ns Reaction : e_aq^-1 (-4596) + H2O2^0 (-12322) -> OH^-1 (-12975) + °OH^0 (-12976) +At time : 4.8011 ns Reaction : H^0 (-11364) + H^0 (-11710) -> H_2^0 (-12977) +At time : 4.8011 ns Reaction : H2O2^0 (-11583) + e_aq^-1 (-4074) -> OH^-1 (-12978) + °OH^0 (-12979) +At time : 4.8011 ns Reaction : H^0 (-10677) + H^0 (-9543) -> H_2^0 (-12980) +At time : 4.8011 ns Reaction : °OH^0 (-10300) + °OH^0 (-7272) -> H2O2^0 (-12981) +At time : 4.8011 ns Reaction : e_aq^-1 (-1646) + H3O^1 (-10002) -> H^0 (-12982) +At time : 4.8011 ns Reaction : °OH^0 (-9907) + e_aq^-1 (-4161) -> OH^-1 (-12983) +At time : 4.8011 ns Reaction : °OH^0 (-9387) + e_aq^-1 (-2066) -> OH^-1 (-12984) +At time : 4.8011 ns Reaction : e_aq^-1 (-2280) + e_aq^-1 (-2302) -> OH^-1 (-12985) + OH^-1 (-12986) + H_2^0 (-12987) +At time : 4.8011 ns Reaction : OH^-1 (-12949) + H3O^1 (-8413) -> No product +At time : 4.9011 ns Reaction : OH^-1 (-12935) + H3O^1 (-7153) -> No product +At time : 4.9011 ns Reaction : H3O^1 (-10256) + OH^-1 (-12884) -> No product +At time : 4.9011 ns Reaction : OH^-1 (-12449) + H3O^1 (-7129) -> No product +At time : 4.9011 ns Reaction : e_aq^-1 (-5313) + H^0 (-11721) -> OH^-1 (-12988) + H_2^0 (-12989) +At time : 4.9011 ns Reaction : H3O^1 (-11300) + e_aq^-1 (-4778) -> H^0 (-12990) +At time : 4.9011 ns Reaction : °OH^0 (-9398) + °OH^0 (-10895) -> H2O2^0 (-12991) +At time : 4.9011 ns Reaction : e_aq^-1 (-3823) + H^0 (-9181) -> OH^-1 (-12992) + H_2^0 (-12993) +At time : 4.9011 ns Reaction : e_aq^-1 (-4974) + °OH^0 (-8288) -> OH^-1 (-12994) +At time : 4.9011 ns Reaction : e_aq^-1 (-497) + H3O^1 (-7267) -> H^0 (-12995) +At time : 4.9011 ns Reaction : e_aq^-1 (-3609) + H3O^1 (-6333) -> H^0 (-12996) +At time : 5.0011 ns Reaction : H^0 (-12990) + °OH^0 (-8538) -> No product +At time : 5.0011 ns Reaction : H3O^1 (-7325) + OH^-1 (-12988) -> No product +At time : 5.0011 ns Reaction : e_aq^-1 (-605) + H^0 (-12969) -> OH^-1 (-12997) + H_2^0 (-12998) +At time : 5.0011 ns Reaction : H3O^1 (-9826) + OH^-1 (-12932) -> No product +At time : 5.0011 ns Reaction : H^0 (-10073) + °OH^0 (-12436) -> No product +At time : 5.0011 ns Reaction : H3O^1 (-5891) + OH^-1 (-12384) -> No product +At time : 5.0011 ns Reaction : e_aq^-1 (-2426) + H^0 (-11897) -> OH^-1 (-12999) + H_2^0 (-13000) +At time : 5.0011 ns Reaction : °OH^0 (-11023) + e_aq^-1 (-4613) -> OH^-1 (-13001) +At time : 5.0011 ns Reaction : e_aq^-1 (-523) + H3O^1 (-10278) -> H^0 (-13002) +At time : 5.0011 ns Reaction : H^0 (-10011) + °OH^0 (-5743) -> No product +At time : 5.0011 ns Reaction : °OH^0 (-9671) + e_aq^-1 (-2929) -> OH^-1 (-13003) +At time : 5.0011 ns Reaction : °OH^0 (-8064) + e_aq^-1 (-8987) -> OH^-1 (-13004) +At time : 5.0011 ns Reaction : e_aq^-1 (-5131) + e_aq^-1 (-5112) -> OH^-1 (-13005) + OH^-1 (-13006) + H_2^0 (-13007) +At time : 5.1011 ns Reaction : OH^-1 (-12905) + H3O^1 (-7179) -> No product +At time : 5.1011 ns Reaction : H3O^1 (-11045) + OH^-1 (-12902) -> No product +At time : 5.1011 ns Reaction : H3O^1 (-5819) + OH^-1 (-12860) -> No product +At time : 5.1011 ns Reaction : OH^-1 (-12808) + H3O^1 (-7177) -> No product +At time : 5.1011 ns Reaction : °OH^0 (-11053) + e_aq^-1 (-4766) -> OH^-1 (-13008) +At time : 5.1011 ns Reaction : °OH^0 (-11013) + °OH^0 (-10094) -> H2O2^0 (-13009) +At time : 5.1011 ns Reaction : °OH^0 (-10905) + °OH^0 (-6868) -> H2O2^0 (-13010) +At time : 5.1011 ns Reaction : H3O^1 (-10558) + e_aq^-1 (-4939) -> H^0 (-13011) +At time : 5.1011 ns Reaction : e_aq^-1 (-3739) + °OH^0 (-7900) -> OH^-1 (-13012) +At time : 5.1011 ns Reaction : e_aq^-1 (-5360) + H3O^1 (-7525) -> H^0 (-13013) +At time : 5.1011 ns Reaction : °OH^0 (-6406) + °OH^0 (-6430) -> H2O2^0 (-13014) +At time : 5.1011 ns Reaction : e_aq^-1 (-3517) + H3O^1 (-6259) -> H^0 (-13015) +At time : 5.2011 ns Reaction : OH^-1 (-13008) + H3O^1 (-8169) -> No product +At time : 5.2011 ns Reaction : H3O^1 (-11155) + OH^-1 (-12997) -> No product +At time : 5.2011 ns Reaction : H3O^1 (-7285) + OH^-1 (-12973) -> No product +At time : 5.2011 ns Reaction : OH^-1 (-12838) + H3O^1 (-6651) -> No product +At time : 5.2011 ns Reaction : OH^-1 (-12477) + H3O^1 (-6935) -> No product +At time : 5.2011 ns Reaction : e_aq^-1 (-2417) + H2O2^0 (-12445) -> OH^-1 (-13016) + °OH^0 (-13017) +At time : 5.2011 ns Reaction : e_aq^-1 (-1573) + H2O2^0 (-12226) -> OH^-1 (-13018) + °OH^0 (-13019) +At time : 5.2011 ns Reaction : °OH^0 (-9848) + H^0 (-11888) -> No product +At time : 5.2011 ns Reaction : e_aq^-1 (-4560) + H2O2^0 (-11422) -> OH^-1 (-13020) + °OH^0 (-13021) +At time : 5.2011 ns Reaction : °OH^0 (-11052) + °OH^0 (-6208) -> H2O2^0 (-13022) +At time : 5.2011 ns Reaction : H3O^1 (-10690) + e_aq^-1 (-3464) -> H^0 (-13023) +At time : 5.2011 ns Reaction : H3O^1 (-10109) + e_aq^-1 (-4711) -> H^0 (-13024) +At time : 5.2011 ns Reaction : °OH^0 (-6092) + °OH^0 (-8757) -> H2O2^0 (-13025) +At time : 5.2011 ns Reaction : e_aq^-1 (-4238) + °OH^0 (-8517) -> OH^-1 (-13026) +At time : 5.2011 ns Reaction : e_aq^-1 (-4715) + °OH^0 (-8170) -> OH^-1 (-13027) +At time : 5.2011 ns Reaction : e_aq^-1 (-3950) + °OH^0 (-6660) -> OH^-1 (-13028) +At time : 5.2011 ns Reaction : e_aq^-1 (-3758) + H3O^1 (-6519) -> H^0 (-13029) +At time : 5.2011 ns Reaction : °OH^0 (-5770) + °OH^0 (-6482) -> H2O2^0 (-13030) +At time : 5.3011 ns Reaction : OH^-1 (-12975) + H3O^1 (-8151) -> No product +At time : 5.3011 ns Reaction : OH^-1 (-12958) + H3O^1 (-7279) -> No product +At time : 5.3011 ns Reaction : OH^-1 (-12621) + H3O^1 (-8584) -> No product +At time : 5.3011 ns Reaction : OH^-1 (-12175) + H3O^1 (-7175) -> No product +At time : 5.3011 ns Reaction : e_aq^-1 (-3491) + H2O2^0 (-12140) -> OH^-1 (-13031) + °OH^0 (-13032) +At time : 5.3011 ns Reaction : H3O^1 (-7217) + OH^-1 (-11945) -> No product +At time : 5.3011 ns Reaction : °OH^0 (-10198) + °OH^0 (-11086) -> H2O2^0 (-13033) +At time : 5.3011 ns Reaction : H^0 (-10091) + e_aq^-1 (-1302) -> OH^-1 (-13034) + H_2^0 (-13035) +At time : 5.3011 ns Reaction : e_aq^-1 (-5224) + H3O^1 (-8411) -> H^0 (-13036) +At time : 5.3011 ns Reaction : e_aq^-1 (-2433) + H3O^1 (-7961) -> H^0 (-13037) +At time : 5.3011 ns Reaction : e_aq^-1 (-4986) + H3O^1 (-6187) -> H^0 (-13038) +At time : 5.3011 ns Reaction : OH^-1 (-12524) + H3O^1 (-6127) -> No product +At time : 5.4011 ns Reaction : H3O^1 (-9879) + OH^-1 (-12984) -> No product +At time : 5.4011 ns Reaction : H^0 (-12686) + °OH^0 (-6598) -> No product +At time : 5.4011 ns Reaction : H2O2^0 (-11590) + e_aq^-1 (-5200) -> OH^-1 (-13039) + °OH^0 (-13040) +At time : 5.4011 ns Reaction : e_aq^-1 (-4521) + °OH^0 (-10999) -> OH^-1 (-13041) +At time : 5.4011 ns Reaction : °OH^0 (-10978) + °OH^0 (-8835) -> H2O2^0 (-13042) +At time : 5.4011 ns Reaction : H3O^1 (-10931) + e_aq^-1 (-4376) -> H^0 (-13043) +At time : 5.4011 ns Reaction : e_aq^-1 (-4525) + °OH^0 (-10053) -> OH^-1 (-13044) +At time : 5.4011 ns Reaction : °OH^0 (-9893) + °OH^0 (-5860) -> H2O2^0 (-13045) +At time : 5.4011 ns Reaction : H3O^1 (-9883) + e_aq^-1 (-2071) -> H^0 (-13046) +At time : 5.4011 ns Reaction : °OH^0 (-9531) + °OH^0 (-6244) -> H2O2^0 (-13047) +At time : 5.4011 ns Reaction : °OH^0 (-9371) + e_aq^-1 (-3822) -> OH^-1 (-13048) +At time : 5.4011 ns Reaction : °OH^0 (-7098) + °OH^0 (-7618) -> H2O2^0 (-13049) +At time : 5.4011 ns Reaction : e_aq^-1 (-365) + H3O^1 (-7515) -> H^0 (-13050) +At time : 5.4011 ns Reaction : e_aq^-1 (-757) + e_aq^-1 (-4953) -> OH^-1 (-13051) + OH^-1 (-13052) + H_2^0 (-13053) +At time : 5.5011 ns Reaction : OH^-1 (-13034) + H3O^1 (-6059) -> No product +At time : 5.5011 ns Reaction : e_aq^-1 (-748) + °OH^0 (-12832) -> OH^-1 (-13054) +At time : 5.5011 ns Reaction : OH^-1 (-12571) + H3O^1 (-6277) -> No product +At time : 5.5011 ns Reaction : e_aq^-1 (-5459) + H2O2^0 (-11580) -> OH^-1 (-13055) + °OH^0 (-13056) +At time : 5.5011 ns Reaction : °OH^0 (-11093) + °OH^0 (-7130) -> H2O2^0 (-13057) +At time : 5.5011 ns Reaction : H^0 (-11033) + °OH^0 (-7042) -> No product +At time : 5.5011 ns Reaction : °OH^0 (-9342) + °OH^0 (-6452) -> H2O2^0 (-13058) +At time : 5.5011 ns Reaction : °OH^0 (-7658) + °OH^0 (-9036) -> H2O2^0 (-13059) +At time : 5.5011 ns Reaction : °OH^0 (-6844) + °OH^0 (-8700) -> H2O2^0 (-13060) +At time : 5.5011 ns Reaction : e_aq^-1 (-724) + °OH^0 (-8322) -> OH^-1 (-13061) +At time : 5.5011 ns Reaction : e_aq^-1 (-4727) + H3O^1 (-7047) -> H^0 (-13062) +At time : 5.6011 ns Reaction : OH^-1 (-13055) + H3O^1 (-7487) -> No product +At time : 5.6011 ns Reaction : OH^-1 (-13041) + H3O^1 (-8722) -> No product +At time : 5.6011 ns Reaction : OH^-1 (-12937) + H3O^1 (-6829) -> No product +At time : 5.6011 ns Reaction : OH^-1 (-12886) + H3O^1 (-7457) -> No product +At time : 5.6011 ns Reaction : H^0 (-12191) + °OH^0 (-6100) -> No product +At time : 5.6011 ns Reaction : e_aq^-1 (-857) + H2O2^0 (-11837) -> OH^-1 (-13063) + °OH^0 (-13064) +At time : 5.6011 ns Reaction : e_aq^-1 (-4052) + H2O2^0 (-11789) -> OH^-1 (-13065) + °OH^0 (-13066) +At time : 5.6011 ns Reaction : e_aq^-1 (-4078) + H2O2^0 (-11498) -> OH^-1 (-13067) + °OH^0 (-13068) +At time : 5.6011 ns Reaction : °OH^0 (-8616) + °OH^0 (-11321) -> H2O2^0 (-13069) +At time : 5.6011 ns Reaction : e_aq^-1 (-5547) + H^0 (-10334) -> OH^-1 (-13070) + H_2^0 (-13071) +At time : 5.6011 ns Reaction : °OH^0 (-10066) + °OH^0 (-8715) -> H2O2^0 (-13072) +At time : 5.6011 ns Reaction : e_aq^-1 (-4526) + H3O^1 (-8587) -> H^0 (-13073) +At time : 5.6011 ns Reaction : e_aq^-1 (-610) + H3O^1 (-8343) -> H^0 (-13074) +At time : 5.6011 ns Reaction : e_aq^-1 (-3885) + H3O^1 (-7959) -> H^0 (-13075) +At time : 5.6011 ns Reaction : e_aq^-1 (-2199) + °OH^0 (-5992) -> OH^-1 (-13076) +At time : 5.7011 ns Reaction : OH^-1 (-12798) + H3O^1 (-9013) -> No product +At time : 5.7011 ns Reaction : OH^-1 (-12731) + H3O^1 (-6905) -> No product +At time : 5.7011 ns Reaction : OH^-1 (-12599) + H3O^1 (-8953) -> No product +At time : 5.7011 ns Reaction : e_aq^-1 (-811) + H2O2^0 (-12417) -> OH^-1 (-13077) + °OH^0 (-13078) +At time : 5.7011 ns Reaction : H3O^1 (-11384) + e_aq^-1 (-4871) -> H^0 (-13079) +At time : 5.7011 ns Reaction : e_aq^-1 (-4366) + H3O^1 (-7689) -> H^0 (-13080) +At time : 5.7011 ns Reaction : e_aq^-1 (-5366) + H3O^1 (-7355) -> H^0 (-13081) +At time : 5.7011 ns Reaction : °OH^0 (-6098) + °OH^0 (-7222) -> H2O2^0 (-13082) +At time : 5.8011 ns Reaction : H3O^1 (-9505) + OH^-1 (-12939) -> No product +At time : 5.8011 ns Reaction : OH^-1 (-12863) + H3O^1 (-6457) -> No product +At time : 5.8011 ns Reaction : °OH^0 (-10530) + °OH^0 (-9069) -> H2O2^0 (-13083) +At time : 5.8011 ns Reaction : °OH^0 (-9444) + H^0 (-10159) -> No product +At time : 5.8011 ns Reaction : °OH^0 (-8302) + H^0 (-9125) -> No product +At time : 5.8011 ns Reaction : e_aq^-1 (-1510) + H3O^1 (-6943) -> H^0 (-13084) +At time : 5.8011 ns Reaction : e_aq^-1 (-4352) + °OH^0 (-6032) -> OH^-1 (-13085) +At time : 5.9011 ns Reaction : OH^-1 (-13063) + H3O^1 (-8241) -> No product +At time : 5.9011 ns Reaction : OH^-1 (-13061) + H3O^1 (-6091) -> No product +At time : 5.9011 ns Reaction : H3O^1 (-10216) + OH^-1 (-13052) -> No product +At time : 5.9011 ns Reaction : OH^-1 (-12930) + H3O^1 (-6789) -> No product +At time : 5.9011 ns Reaction : H^0 (-12875) + e_aq^-1 (-8924) -> OH^-1 (-13086) + H_2^0 (-13087) +At time : 5.9011 ns Reaction : e_aq^-1 (-2676) + H2O2^0 (-12426) -> OH^-1 (-13088) + °OH^0 (-13089) +At time : 5.9011 ns Reaction : °OH^0 (-11235) + °OH^0 (-10388) -> H2O2^0 (-13090) +At time : 5.9011 ns Reaction : e_aq^-1 (-5340) + H3O^1 (-11203) -> H^0 (-13091) +At time : 5.9011 ns Reaction : H^0 (-10758) + °OH^0 (-6396) -> No product +At time : 5.9011 ns Reaction : °OH^0 (-10184) + e_aq^-1 (-1041) -> OH^-1 (-13092) +At time : 5.9011 ns Reaction : H^0 (-9297) + H^0 (-9553) -> H_2^0 (-13093) +At time : 5.9011 ns Reaction : e_aq^-1 (-3874) + H3O^1 (-8689) -> H^0 (-13094) +At time : 5.9011 ns Reaction : e_aq^-1 (-5538) + °OH^0 (-7400) -> OH^-1 (-13095) +At time : 5.9011 ns Reaction : e_aq^-1 (-3091) + °OH^0 (-6340) -> OH^-1 (-13096) +At time : 5.9011 ns Reaction : e_aq^-1 (-2043) + e_aq^-1 (-4133) -> OH^-1 (-13097) + OH^-1 (-13098) + H_2^0 (-13099) +At time : 6.0011 ns Reaction : OH^-1 (-13085) + H3O^1 (-8581) -> No product +At time : 6.0011 ns Reaction : H3O^1 (-7387) + OH^-1 (-12936) -> No product +At time : 6.0011 ns Reaction : e_aq^-1 (-5571) + H2O2^0 (-11900) -> OH^-1 (-13100) + °OH^0 (-13101) +At time : 6.0011 ns Reaction : e_aq^-1 (-4699) + H2O2^0 (-11480) -> OH^-1 (-13102) + °OH^0 (-13103) +At time : 6.0011 ns Reaction : H2O2^0 (-11429) + e_aq^-1 (-5029) -> OH^-1 (-13104) + °OH^0 (-13105) +At time : 6.0011 ns Reaction : °OH^0 (-11363) + e_aq^-1 (-4368) -> OH^-1 (-13106) +At time : 6.0011 ns Reaction : H^0 (-11009) + °OH^0 (-8649) -> No product +At time : 6.0011 ns Reaction : °OH^0 (-9367) + e_aq^-1 (-2596) -> OH^-1 (-13107) +At time : 6.0011 ns Reaction : °OH^0 (-9272) + e_aq^-1 (-3753) -> OH^-1 (-13108) +At time : 6.1011 ns Reaction : OH^-1 (-13039) + H3O^1 (-8821) -> No product +At time : 6.1011 ns Reaction : H3O^1 (-7481) + OH^-1 (-12971) -> No product +At time : 6.1011 ns Reaction : H3O^1 (-7403) + OH^-1 (-12879) -> No product +At time : 6.1011 ns Reaction : OH^-1 (-12779) + H3O^1 (-6985) -> No product +At time : 6.1011 ns Reaction : H^0 (-12399) + °OH^0 (-6204) -> No product +At time : 6.1011 ns Reaction : °OH^0 (-10536) + °OH^0 (-6190) -> H2O2^0 (-13109) +At time : 6.1011 ns Reaction : °OH^0 (-9368) + e_aq^-1 (-3877) -> OH^-1 (-13110) +At time : 6.1011 ns Reaction : °OH^0 (-9266) + e_aq^-1 (-3472) -> OH^-1 (-13111) +At time : 6.1011 ns Reaction : °OH^0 (-7298) + °OH^0 (-8404) -> H2O2^0 (-13112) +At time : 6.1011 ns Reaction : e_aq^-1 (-5106) + H3O^1 (-7281) -> H^0 (-13113) +At time : 6.1011 ns Reaction : °OH^0 (-10419) + e_aq^-1 (-5631) -> OH^-1 (-13114) +At time : 6.2011 ns Reaction : OH^-1 (-12898) + H3O^1 (-6765) -> No product +At time : 6.2011 ns Reaction : e_aq^-1 (-356) + H2O2^0 (-12858) -> OH^-1 (-13115) + °OH^0 (-13116) +At time : 6.2011 ns Reaction : H3O^1 (-6345) + OH^-1 (-12656) -> No product +At time : 6.2011 ns Reaction : H^0 (-12605) + °OH^0 (-8010) -> No product +At time : 6.2011 ns Reaction : e_aq^-1 (-4682) + H^0 (-10172) -> OH^-1 (-13117) + H_2^0 (-13118) +At time : 6.2011 ns Reaction : °OH^0 (-8244) + °OH^0 (-8268) -> H2O2^0 (-13119) +At time : 6.3011 ns Reaction : OH^-1 (-13100) + H3O^1 (-7401) -> No product +At time : 6.3011 ns Reaction : OH^-1 (-13004) + H3O^1 (-8067) -> No product +At time : 6.3011 ns Reaction : H3O^1 (-6629) + OH^-1 (-12892) -> No product +At time : 6.3011 ns Reaction : e_aq^-1 (-4751) + H2O2^0 (-11892) -> OH^-1 (-13120) + °OH^0 (-13121) +At time : 6.3011 ns Reaction : e_aq^-1 (-28) + H2O2^0 (-11509) -> OH^-1 (-13122) + °OH^0 (-13123) +At time : 6.3011 ns Reaction : °OH^0 (-11178) + °OH^0 (-11183) -> H2O2^0 (-13124) +At time : 6.3011 ns Reaction : °OH^0 (-10695) + °OH^0 (-7798) -> H2O2^0 (-13125) +At time : 6.3011 ns Reaction : e_aq^-1 (-3159) + H^0 (-9167) -> OH^-1 (-13126) + H_2^0 (-13127) +At time : 6.3011 ns Reaction : e_aq^-1 (-4172) + H3O^1 (-6863) -> H^0 (-13128) +At time : 6.3011 ns Reaction : °OH^0 (-10462) + e_aq^-1 (-5397) -> OH^-1 (-13129) +At time : 6.4011 ns Reaction : e_aq^-1 (-5033) + °OH^0 (-13040) -> OH^-1 (-13130) +At time : 6.4011 ns Reaction : H3O^1 (-10156) + OH^-1 (-13027) -> No product +At time : 6.4011 ns Reaction : OH^-1 (-12994) + H3O^1 (-8827) -> No product +At time : 6.4011 ns Reaction : OH^-1 (-12983) + H3O^1 (-6833) -> No product +At time : 6.4011 ns Reaction : H3O^1 (-6777) + OH^-1 (-12518) -> No product +At time : 6.4011 ns Reaction : H^0 (-11861) + °OH^0 (-8556) -> No product +At time : 6.4011 ns Reaction : e_aq^-1 (-5552) + H2O2^0 (-11604) -> OH^-1 (-13131) + °OH^0 (-13132) +At time : 6.4011 ns Reaction : e_aq^-1 (-4817) + H2O2^0 (-11506) -> OH^-1 (-13133) + °OH^0 (-13134) +At time : 6.4011 ns Reaction : e_aq^-1 (-4597) + H2O2^0 (-11421) -> OH^-1 (-13135) + °OH^0 (-13136) +At time : 6.4011 ns Reaction : °OH^0 (-6432) + °OH^0 (-6440) -> H2O2^0 (-13137) +At time : 6.5011 ns Reaction : H3O^1 (-10869) + OH^-1 (-13098) -> No product +At time : 6.5011 ns Reaction : OH^-1 (-13077) + H3O^1 (-6089) -> No product +At time : 6.5011 ns Reaction : OH^-1 (-12957) + H3O^1 (-8475) -> No product +At time : 6.5011 ns Reaction : °OH^0 (-11198) + °OH^0 (-12801) -> H2O2^0 (-13138) +At time : 6.5011 ns Reaction : °OH^0 (-11027) + °OH^0 (-8146) -> H2O2^0 (-13139) +At time : 6.5011 ns Reaction : e_aq^-1 (-5199) + °OH^0 (-10310) -> OH^-1 (-13140) +At time : 6.5011 ns Reaction : H^0 (-9576) + H^0 (-9163) -> H_2^0 (-13141) +At time : 6.5011 ns Reaction : e_aq^-1 (-3897) + H3O^1 (-8665) -> H^0 (-13142) +At time : 6.5011 ns Reaction : e_aq^-1 (-4564) + H3O^1 (-7667) -> H^0 (-13143) +At time : 6.5011 ns Reaction : °OH^0 (-8344) + e_aq^-1 (-9083) -> OH^-1 (-13144) +At time : 6.6011 ns Reaction : H3O^1 (-7633) + OH^-1 (-13120) -> No product +At time : 6.6011 ns Reaction : H3O^1 (-6353) + OH^-1 (-13096) -> No product +At time : 6.6011 ns Reaction : OH^-1 (-11919) + H3O^1 (-7663) -> No product +At time : 6.6011 ns Reaction : e_aq^-1 (-5316) + H2O2^0 (-11589) -> OH^-1 (-13145) + °OH^0 (-13146) +At time : 6.6011 ns Reaction : °OH^0 (-10744) + e_aq^-1 (-3004) -> OH^-1 (-13147) +At time : 6.6011 ns Reaction : e_aq^-1 (-4934) + H3O^1 (-10205) -> H^0 (-13148) +At time : 6.6011 ns Reaction : °OH^0 (-6094) + °OH^0 (-8308) -> H2O2^0 (-13149) +At time : 6.6011 ns Reaction : e_aq^-1 (-3803) + H3O^1 (-7771) -> H^0 (-13150) +At time : 6.6011 ns Reaction : °OH^0 (-6330) + °OH^0 (-6350) -> H2O2^0 (-13151) +At time : 6.6011 ns Reaction : e_aq^-1 (-4084) + H3O^1 (-5857) -> H^0 (-13152) +At time : 6.6011 ns Reaction : e_aq^-1 (-5534) + H2O2^0 (-12641) -> OH^-1 (-13153) + °OH^0 (-13154) +At time : 6.7011 ns Reaction : OH^-1 (-13153) + H3O^1 (-7369) -> No product +At time : 6.7011 ns Reaction : OH^-1 (-12738) + H3O^1 (-7075) -> No product +At time : 6.7011 ns Reaction : H^0 (-12213) + H^0 (-9143) -> H_2^0 (-13155) +At time : 6.7011 ns Reaction : e_aq^-1 (-342) + °OH^0 (-10465) -> OH^-1 (-13156) +At time : 6.7011 ns Reaction : °OH^0 (-9657) + °OH^0 (-5934) -> H2O2^0 (-13157) +At time : 6.7011 ns Reaction : e_aq^-1 (-3549) + H3O^1 (-7819) -> H^0 (-13158) +At time : 6.7011 ns Reaction : e_aq^-1 (-2372) + °OH^0 (-5982) -> OH^-1 (-13159) +At time : 6.8011 ns Reaction : °OH^0 (-13132) + °OH^0 (-7404) -> H2O2^0 (-13160) +At time : 6.8011 ns Reaction : OH^-1 (-13092) + H3O^1 (-7111) -> No product +At time : 6.8011 ns Reaction : H3O^1 (-10865) + OH^-1 (-13067) -> No product +At time : 6.8011 ns Reaction : °OH^0 (-10864) + °OH^0 (-12948) -> H2O2^0 (-13161) +At time : 6.8011 ns Reaction : H^0 (-12753) + °OH^0 (-8342) -> No product +At time : 6.8011 ns Reaction : e_aq^-1 (-966) + H2O2^0 (-12680) -> OH^-1 (-13162) + °OH^0 (-13163) +At time : 6.8011 ns Reaction : H^0 (-12330) + °OH^0 (-7122) -> No product +At time : 6.8011 ns Reaction : OH^-1 (-12324) + H3O^1 (-8077) -> No product +At time : 6.8011 ns Reaction : e_aq^-1 (-466) + H2O2^0 (-11711) -> OH^-1 (-13164) + °OH^0 (-13165) +At time : 6.8011 ns Reaction : e_aq^-1 (-4923) + H2O2^0 (-11660) -> OH^-1 (-13166) + °OH^0 (-13167) +At time : 6.8011 ns Reaction : e_aq^-1 (-4255) + °OH^0 (-8978) -> OH^-1 (-13168) +At time : 6.9011 ns Reaction : OH^-1 (-13129) + H3O^1 (-7323) -> No product +At time : 6.9011 ns Reaction : H^0 (-9415) + H^0 (-13043) -> H_2^0 (-13169) +At time : 6.9011 ns Reaction : OH^-1 (-12954) + H3O^1 (-6723) -> No product +At time : 6.9011 ns Reaction : e_aq^-1 (-3037) + H^0 (-12029) -> OH^-1 (-13170) + H_2^0 (-13171) +At time : 6.9011 ns Reaction : °OH^0 (-10794) + e_aq^-1 (-3781) -> OH^-1 (-13172) +At time : 6.9011 ns Reaction : e_aq^-1 (-5185) + °OH^0 (-9085) -> OH^-1 (-13173) +At time : 6.9011 ns Reaction : °OH^0 (-7370) + °OH^0 (-7492) -> H2O2^0 (-13174) +At time : 6.9011 ns Reaction : e_aq^-1 (-952) + e_aq^-1 (-4838) -> OH^-1 (-13175) + OH^-1 (-13176) + H_2^0 (-13177) +At time : 6.9011 ns Reaction : °OH^0 (-13078) + °OH^0 (-12803) -> H2O2^0 (-13178) +At time : 6.9011 ns Reaction : H2O2^0 (-11598) + e_aq^-1 (-4962) -> OH^-1 (-13179) + °OH^0 (-13180) +At time : 7.0011 ns Reaction : OH^-1 (-13102) + H3O^1 (-8183) -> No product +At time : 7.0011 ns Reaction : OH^-1 (-12911) + H3O^1 (-6367) -> No product +At time : 7.0011 ns Reaction : e_aq^-1 (-4646) + H2O2^0 (-12681) -> OH^-1 (-13181) + °OH^0 (-13182) +At time : 7.0011 ns Reaction : H3O^1 (-6623) + OH^-1 (-12648) -> No product +At time : 7.0011 ns Reaction : e_aq^-1 (-552) + H3O^1 (-7563) -> H^0 (-13183) +At time : 7.0011 ns Reaction : e_aq^-1 (-2730) + H3O^1 (-6543) -> H^0 (-13184) +At time : 7.0011 ns Reaction : e_aq^-1 (-5159) + e_aq^-1 (-5243) -> OH^-1 (-13185) + OH^-1 (-13186) + H_2^0 (-13187) +At time : 7.0011 ns Reaction : e_aq^-1 (-4509) + e_aq^-1 (-4507) -> OH^-1 (-13188) + OH^-1 (-13189) + H_2^0 (-13190) +At time : 7.1011 ns Reaction : OH^-1 (-13164) + H3O^1 (-7303) -> No product +At time : 7.1011 ns Reaction : H3O^1 (-8419) + OH^-1 (-13145) -> No product +At time : 7.1011 ns Reaction : OH^-1 (-13140) + H3O^1 (-8365) -> No product +At time : 7.1011 ns Reaction : H^0 (-13036) + °OH^0 (-7290) -> No product +At time : 7.1011 ns Reaction : H3O^1 (-10706) + e_aq^-1 (-3499) -> H^0 (-13191) +At time : 7.1011 ns Reaction : e_aq^-1 (-4722) + H3O^1 (-10169) -> H^0 (-13192) +At time : 7.1011 ns Reaction : H^0 (-9927) + e_aq^-1 (-4122) -> OH^-1 (-13193) + H_2^0 (-13194) +At time : 7.1011 ns Reaction : e_aq^-1 (-2059) + °OH^0 (-9904) -> OH^-1 (-13195) +At time : 7.1011 ns Reaction : °OH^0 (-9542) + e_aq^-1 (-3435) -> OH^-1 (-13196) +At time : 7.1011 ns Reaction : e_aq^-1 (-4076) + H3O^1 (-8025) -> H^0 (-13197) +At time : 7.1011 ns Reaction : °OH^0 (-6436) + °OH^0 (-7872) -> H2O2^0 (-13198) +At time : 7.1011 ns Reaction : e_aq^-1 (-1731) + H3O^1 (-7695) -> H^0 (-13199) +At time : 7.2011 ns Reaction : H3O^1 (-6991) + OH^-1 (-13020) -> No product +At time : 7.2011 ns Reaction : e_aq^-1 (-2156) + H^0 (-12730) -> OH^-1 (-13200) + H_2^0 (-13201) +At time : 7.2011 ns Reaction : °OH^0 (-10819) + °OH^0 (-6634) -> H2O2^0 (-13202) +At time : 7.2011 ns Reaction : °OH^0 (-10802) + °OH^0 (-6594) -> H2O2^0 (-13203) +At time : 7.2011 ns Reaction : H^0 (-10626) + °OH^0 (-6908) -> No product +At time : 7.2011 ns Reaction : °OH^0 (-10338) + e_aq^-1 (-320) -> OH^-1 (-13204) +At time : 7.2011 ns Reaction : °OH^0 (-9853) + e_aq^-1 (-2222) -> OH^-1 (-13205) +At time : 7.2011 ns Reaction : °OH^0 (-9382) + °OH^0 (-8853) -> H2O2^0 (-13206) +At time : 7.2011 ns Reaction : e_aq^-1 (-2164) + °OH^0 (-8943) -> OH^-1 (-13207) +At time : 7.2011 ns Reaction : e_aq^-1 (-302) + e_aq^-1 (-5169) -> OH^-1 (-13208) + OH^-1 (-13209) + H_2^0 (-13210) +At time : 7.2011 ns Reaction : e_aq^-1 (-3182) + e_aq^-1 (-3522) -> OH^-1 (-13211) + OH^-1 (-13212) + H_2^0 (-13213) +At time : 7.2011 ns Reaction : H3O^1 (-6109) + OH^-1 (-13173) -> No product +At time : 7.3011 ns Reaction : OH^-1 (-13207) + H3O^1 (-6801) -> No product +At time : 7.3011 ns Reaction : H3O^1 (-7747) + OH^-1 (-12985) -> No product +At time : 7.3011 ns Reaction : OH^-1 (-12951) + H3O^1 (-6937) -> No product +At time : 7.3011 ns Reaction : OH^-1 (-12750) + H3O^1 (-8253) -> No product +At time : 7.3011 ns Reaction : °OH^0 (-12403) + °OH^0 (-8462) -> H2O2^0 (-13214) +At time : 7.3011 ns Reaction : H^0 (-11188) + H^0 (-12354) -> H_2^0 (-13215) +At time : 7.3011 ns Reaction : °OH^0 (-11402) + °OH^0 (-8472) -> H2O2^0 (-13216) +At time : 7.3011 ns Reaction : °OH^0 (-10210) + °OH^0 (-9124) -> H2O2^0 (-13217) +At time : 7.3011 ns Reaction : °OH^0 (-10027) + °OH^0 (-7678) -> H2O2^0 (-13218) +At time : 7.3011 ns Reaction : H^0 (-9325) + e_aq^-1 (-3232) -> OH^-1 (-13219) + H_2^0 (-13220) +At time : 7.3011 ns Reaction : e_aq^-1 (-235) + H3O^1 (-6121) -> H^0 (-13221) +At time : 7.4011 ns Reaction : OH^-1 (-13179) + H3O^1 (-10540) -> No product +At time : 7.4011 ns Reaction : e_aq^-1 (-52) + H2O2^0 (-13160) -> OH^-1 (-13222) + °OH^0 (-13223) +At time : 7.4011 ns Reaction : H3O^1 (-9711) + OH^-1 (-12830) -> No product +At time : 7.4011 ns Reaction : OH^-1 (-12817) + H3O^1 (-6489) -> No product +At time : 7.4011 ns Reaction : H^0 (-11307) + H^0 (-12489) -> H_2^0 (-13224) +At time : 7.4011 ns Reaction : e_aq^-1 (-760) + H2O2^0 (-12028) -> OH^-1 (-13225) + °OH^0 (-13226) +At time : 7.4011 ns Reaction : e_aq^-1 (-575) + H2O2^0 (-11640) -> OH^-1 (-13227) + °OH^0 (-13228) +At time : 7.4011 ns Reaction : e_aq^-1 (-4561) + H^0 (-9223) -> OH^-1 (-13229) + H_2^0 (-13230) +At time : 7.5011 ns Reaction : H3O^1 (-7223) + OH^-1 (-13144) -> No product +At time : 7.5011 ns Reaction : H3O^1 (-8185) + OH^-1 (-13133) -> No product +At time : 7.5011 ns Reaction : OH^-1 (-12927) + H3O^1 (-7037) -> No product +At time : 7.5011 ns Reaction : e_aq^-1 (-3642) + H^0 (-12433) -> OH^-1 (-13231) + H_2^0 (-13232) +At time : 7.5011 ns Reaction : °OH^0 (-10570) + e_aq^-1 (-4656) -> OH^-1 (-13233) +At time : 7.5011 ns Reaction : e_aq^-1 (-4527) + °OH^0 (-8120) -> OH^-1 (-13234) +At time : 7.5011 ns Reaction : OH^-1 (-13234) + H3O^1 (-7001) -> No product +At time : 7.6011 ns Reaction : H3O^1 (-10853) + OH^-1 (-13200) -> No product +At time : 7.6011 ns Reaction : OH^-1 (-13195) + H3O^1 (-8848) -> No product +At time : 7.6011 ns Reaction : e_aq^-1 (-3504) + H^0 (-13191) -> OH^-1 (-13235) + H_2^0 (-13236) +At time : 7.6011 ns Reaction : H3O^1 (-7737) + OH^-1 (-13065) -> No product +At time : 7.6011 ns Reaction : e_aq^-1 (-1206) + H2O2^0 (-11703) -> OH^-1 (-13237) + °OH^0 (-13238) +At time : 7.6011 ns Reaction : e_aq^-1 (-3986) + °OH^0 (-9200) -> OH^-1 (-13239) +At time : 7.6011 ns Reaction : e_aq^-1 (-5587) + H3O^1 (-7397) -> H^0 (-13240) +At time : 7.7011 ns Reaction : H3O^1 (-6227) + OH^-1 (-13018) -> No product +At time : 7.7011 ns Reaction : H3O^1 (-6641) + OH^-1 (-12512) -> No product +At time : 7.7011 ns Reaction : e_aq^-1 (-369) + H^0 (-12263) -> OH^-1 (-13241) + H_2^0 (-13242) +At time : 7.7011 ns Reaction : H3O^1 (-6237) + OH^-1 (-11881) -> No product +At time : 7.7011 ns Reaction : °OH^0 (-10176) + °OH^0 (-8206) -> H2O2^0 (-13243) +At time : 7.7011 ns Reaction : e_aq^-1 (-4676) + H3O^1 (-8179) -> H^0 (-13244) +At time : 7.7011 ns Reaction : e_aq^-1 (-2092) + H3O^1 (-6763) -> H^0 (-13245) +At time : 7.8011 ns Reaction : e_aq^-1 (-355) + H^0 (-13081) -> OH^-1 (-13246) + H_2^0 (-13247) +At time : 7.8011 ns Reaction : H3O^1 (-6251) + OH^-1 (-13031) -> No product +At time : 7.8011 ns Reaction : OH^-1 (-12827) + H3O^1 (-7167) -> No product +At time : 7.8011 ns Reaction : °OH^0 (-9968) + °OH^0 (-6902) -> H2O2^0 (-13248) +At time : 7.8011 ns Reaction : e_aq^-1 (-285) + e_aq^-1 (-349) -> OH^-1 (-13249) + OH^-1 (-13250) + H_2^0 (-13251) +At time : 7.9011 ns Reaction : H3O^1 (-11034) + OH^-1 (-13237) -> No product +At time : 7.9011 ns Reaction : OH^-1 (-13117) + H3O^1 (-10124) -> No product +At time : 7.9011 ns Reaction : H3O^1 (-11248) + OH^-1 (-13114) -> No product +At time : 7.9011 ns Reaction : OH^-1 (-12963) + H3O^1 (-8051) -> No product +At time : 7.9011 ns Reaction : e_aq^-1 (-4784) + H3O^1 (-5869) -> H^0 (-13252) +At time : 8.0011 ns Reaction : H2O2^0 (-11502) + e_aq^-1 (-1843) -> OH^-1 (-13253) + °OH^0 (-13254) +At time : 8.0011 ns Reaction : H3O^1 (-10861) + OH^-1 (-5778) -> No product +At time : 8.0011 ns Reaction : e_aq^-1 (-5158) + H^0 (-9249) -> OH^-1 (-13255) + H_2^0 (-13256) +At time : 8.0011 ns Reaction : e_aq^-1 (-4351) + °OH^0 (-8078) -> OH^-1 (-13257) +At time : 8.0011 ns Reaction : e_aq^-1 (-4046) + e_aq^-1 (-2246) -> OH^-1 (-13258) + OH^-1 (-13259) + H_2^0 (-13260) +At time : 8.1011 ns Reaction : OH^-1 (-13253) + H3O^1 (-8707) -> No product +At time : 8.1011 ns Reaction : OH^-1 (-13156) + H3O^1 (-8459) -> No product +At time : 8.1011 ns Reaction : °OH^0 (-13101) + °OH^0 (-7394) -> H2O2^0 (-13261) +At time : 8.1011 ns Reaction : e_aq^-1 (-2237) + H^0 (-12708) -> OH^-1 (-13262) + H_2^0 (-13263) +At time : 8.1011 ns Reaction : OH^-1 (-12326) + H3O^1 (-6645) -> No product +At time : 8.1011 ns Reaction : e_aq^-1 (-1599) + H2O2^0 (-11623) -> OH^-1 (-13264) + °OH^0 (-13265) +At time : 8.1011 ns Reaction : °OH^0 (-10922) + °OH^0 (-6898) -> H2O2^0 (-13266) +At time : 8.1011 ns Reaction : °OH^0 (-10566) + e_aq^-1 (-932) -> OH^-1 (-13267) +At time : 8.1011 ns Reaction : °OH^0 (-10023) + °OH^0 (-8096) -> H2O2^0 (-13268) +At time : 8.1011 ns Reaction : e_aq^-1 (-3901) + °OH^0 (-8913) -> OH^-1 (-13269) +At time : 8.1011 ns Reaction : e_aq^-1 (-4880) + °OH^0 (-8238) -> OH^-1 (-13270) +At time : 8.1011 ns Reaction : e_aq^-1 (-3744) + °OH^0 (-7908) -> OH^-1 (-13271) +At time : 8.1011 ns Reaction : e_aq^-1 (-2262) + °OH^0 (-9154) -> OH^-1 (-13272) +At time : 8.2011 ns Reaction : OH^-1 (-13239) + H3O^1 (-6745) -> No product +At time : 8.2011 ns Reaction : °OH^0 (-12451) + H^0 (-12844) -> No product +At time : 8.2011 ns Reaction : e_aq^-1 (-492) + H2O2^0 (-12756) -> OH^-1 (-13273) + °OH^0 (-13274) +At time : 8.2011 ns Reaction : °OH^0 (-11190) + H^0 (-11840) -> No product +At time : 8.2011 ns Reaction : H^0 (-11058) + e_aq^-1 (-4756) -> OH^-1 (-13275) + H_2^0 (-13276) +At time : 8.2011 ns Reaction : e_aq^-1 (-986) + H3O^1 (-7093) -> H^0 (-13277) +At time : 8.2011 ns Reaction : e_aq^-1 (-1974) + e_aq^-1 (-4232) -> OH^-1 (-13278) + OH^-1 (-13279) + H_2^0 (-13280) +At time : 8.2011 ns Reaction : e_aq^-1 (-184) + e_aq^-1 (-221) -> OH^-1 (-13281) + OH^-1 (-13282) + H_2^0 (-13283) +At time : 8.3011 ns Reaction : OH^-1 (-12547) + H3O^1 (-7947) -> No product +At time : 8.3011 ns Reaction : H^0 (-10799) + °OH^0 (-6548) -> No product +At time : 8.3011 ns Reaction : °OH^0 (-6062) + H^0 (-9229) -> No product +At time : 8.3011 ns Reaction : e_aq^-1 (-3729) + H3O^1 (-8896) -> H^0 (-13284) +At time : 8.4011 ns Reaction : H^0 (-12995) + H^0 (-10283) -> H_2^0 (-13285) +At time : 8.4011 ns Reaction : H2O2^0 (-12928) + e_aq^-1 (-8936) -> OH^-1 (-13286) + °OH^0 (-13287) +At time : 8.4011 ns Reaction : H3O^1 (-11252) + OH^-1 (-12878) -> No product +At time : 8.4011 ns Reaction : H^0 (-9413) + °OH^0 (-10938) -> No product +At time : 8.5011 ns Reaction : H3O^1 (-5993) + OH^-1 (-13272) -> No product +At time : 8.5011 ns Reaction : H^0 (-13013) + °OH^0 (-13146) -> No product +At time : 8.5011 ns Reaction : H^0 (-12300) + °OH^0 (-6288) -> No product +At time : 8.5011 ns Reaction : e_aq^-1 (-4430) + H^0 (-12219) -> OH^-1 (-13288) + H_2^0 (-13289) +At time : 8.5011 ns Reaction : H3O^1 (-10105) + e_aq^-1 (-4607) -> H^0 (-13290) +At time : 8.5011 ns Reaction : e_aq^-1 (-5250) + °OH^0 (-9096) -> OH^-1 (-13291) +At time : 8.5011 ns Reaction : °OH^0 (-8748) + e_aq^-1 (-8750) -> OH^-1 (-13292) +At time : 8.5011 ns Reaction : °OH^0 (-5884) + °OH^0 (-8598) -> H2O2^0 (-13293) +At time : 8.6011 ns Reaction : H3O^1 (-8043) + OH^-1 (-13278) -> No product +At time : 8.6011 ns Reaction : H^0 (-13050) + °OH^0 (-7340) -> No product +At time : 8.6011 ns Reaction : °OH^0 (-11119) + H^0 (-13038) -> No product +At time : 8.6011 ns Reaction : H3O^1 (-6583) + OH^-1 (-12942) -> No product +At time : 8.6011 ns Reaction : H^0 (-12782) + °OH^0 (-9240) -> No product +At time : 8.6011 ns Reaction : H3O^1 (-10131) + e_aq^-1 (-4707) -> H^0 (-13294) +At time : 8.6011 ns Reaction : e_aq^-1 (-5537) + H3O^1 (-7469) -> H^0 (-13295) +At time : 8.6011 ns Reaction : e_aq^-1 (-76) + H3O^1 (-7421) -> H^0 (-13296) +At time : 8.6011 ns Reaction : e_aq^-1 (-2713) + °OH^0 (-6512) -> OH^-1 (-13297) +At time : 8.6011 ns Reaction : e_aq^-1 (-4810) + e_aq^-1 (-1084) -> OH^-1 (-13298) + OH^-1 (-13299) + H_2^0 (-13300) +At time : 8.7011 ns Reaction : H3O^1 (-7589) + OH^-1 (-12828) -> No product +At time : 8.7011 ns Reaction : OH^-1 (-12557) + H3O^1 (-10824) -> No product +At time : 8.7011 ns Reaction : °OH^0 (-12501) + H^0 (-12370) -> No product +At time : 8.7011 ns Reaction : °OH^0 (-10602) + e_aq^-1 (-4534) -> OH^-1 (-13301) +At time : 8.7011 ns Reaction : e_aq^-1 (-5525) + H3O^1 (-10348) -> H^0 (-13302) +At time : 8.7011 ns Reaction : H^0 (-10342) + °OH^0 (-6128) -> No product +At time : 8.7011 ns Reaction : e_aq^-1 (-5220) + H3O^1 (-10305) -> H^0 (-13303) +At time : 8.7011 ns Reaction : e_aq^-1 (-5602) + H3O^1 (-8461) -> H^0 (-13304) +At time : 8.7011 ns Reaction : e_aq^-1 (-3591) + °OH^0 (-6328) -> OH^-1 (-13305) +At time : 8.8011 ns Reaction : OH^-1 (-12273) + H3O^1 (-7591) -> No product +At time : 8.8011 ns Reaction : e_aq^-1 (-4276) + °OH^0 (-7706) -> OH^-1 (-13306) +At time : 8.9011 ns Reaction : H3O^1 (-11234) + OH^-1 (-12917) -> No product +At time : 8.9011 ns Reaction : OH^-1 (-12676) + H3O^1 (-9906) -> No product +At time : 8.9011 ns Reaction : °OH^0 (-7210) + °OH^0 (-8298) -> H2O2^0 (-13307) +At time : 8.9011 ns Reaction : e_aq^-1 (-703) + H3O^1 (-7227) -> H^0 (-13308) +At time : 9.0011 ns Reaction : OH^-1 (-13301) + H3O^1 (-9007) -> No product +At time : 9.0011 ns Reaction : H^0 (-10488) + °OH^0 (-11316) -> No product +At time : 9.0011 ns Reaction : H3O^1 (-9928) + OH^-1 (-5796) -> No product +At time : 9.0011 ns Reaction : H^0 (-9265) + e_aq^-1 (-5032) -> OH^-1 (-13309) + H_2^0 (-13310) +At time : 9.0011 ns Reaction : e_aq^-1 (-2640) + °OH^0 (-8874) -> OH^-1 (-13311) +At time : 9.0011 ns Reaction : e_aq^-1 (-737) + °OH^0 (-8286) -> OH^-1 (-13312) +At time : 9.0011 ns Reaction : e_aq^-1 (-4600) + H3O^1 (-8145) -> H^0 (-13313) +At time : 9.0011 ns Reaction : e_aq^-1 (-1211) + H3O^1 (-7645) -> H^0 (-13314) +At time : 9.0011 ns Reaction : °OH^0 (-12885) + H^0 (-13183) -> No product +At time : 9.1011 ns Reaction : OH^-1 (-13281) + H3O^1 (-7337) -> No product +At time : 9.1011 ns Reaction : OH^-1 (-13204) + H3O^1 (-8429) -> No product +At time : 9.1011 ns Reaction : H3O^1 (-10504) + OH^-1 (-13186) -> No product +At time : 9.1011 ns Reaction : OH^-1 (-13110) + H3O^1 (-6551) -> No product +At time : 9.1011 ns Reaction : OH^-1 (-12961) + H3O^1 (-5845) -> No product +At time : 9.1011 ns Reaction : H^0 (-10572) + °OH^0 (-8156) -> No product +At time : 9.1011 ns Reaction : °OH^0 (-9636) + °OH^0 (-7856) -> H2O2^0 (-13315) +At time : 9.1011 ns Reaction : °OH^0 (-7684) + °OH^0 (-8991) -> H2O2^0 (-13316) +At time : 9.1011 ns Reaction : e_aq^-1 (-4222) + H3O^1 (-8659) -> H^0 (-13317) +At time : 9.1011 ns Reaction : H3O^1 (-7647) + e_aq^-1 (-8534) -> H^0 (-13318) +At time : 9.1011 ns Reaction : e_aq^-1 (-4874) + H3O^1 (-8203) -> H^0 (-13319) +At time : 9.1011 ns Reaction : e_aq^-1 (-5189) + e_aq^-1 (-5363) -> OH^-1 (-13320) + OH^-1 (-13321) + H_2^0 (-13322) +At time : 9.1011 ns Reaction : e_aq^-1 (-4119) + e_aq^-1 (-4208) -> OH^-1 (-13323) + OH^-1 (-13324) + H_2^0 (-13325) +At time : 9.2011 ns Reaction : OH^-1 (-13275) + H3O^1 (-8171) -> No product +At time : 9.2011 ns Reaction : H3O^1 (-10838) + OH^-1 (-13205) -> No product +At time : 9.2011 ns Reaction : H2O2^0 (-13072) + e_aq^-1 (-4443) -> OH^-1 (-13326) + °OH^0 (-13327) +At time : 9.2011 ns Reaction : °OH^0 (-10668) + e_aq^-1 (-2564) -> OH^-1 (-13328) +At time : 9.2011 ns Reaction : e_aq^-1 (-4124) + °OH^0 (-9891) -> OH^-1 (-13329) +At time : 9.2011 ns Reaction : e_aq^-1 (-5614) + H3O^1 (-8605) -> H^0 (-13330) +At time : 9.3011 ns Reaction : OH^-1 (-13312) + H3O^1 (-7575) -> No product +At time : 9.3011 ns Reaction : e_aq^-1 (-4006) + H2O2^0 (-12358) -> OH^-1 (-13331) + °OH^0 (-13332) +At time : 9.3011 ns Reaction : e_aq^-1 (-4412) + e_aq^-1 (-9002) -> OH^-1 (-13333) + OH^-1 (-13334) + H_2^0 (-13335) +At time : 9.3011 ns Reaction : °OH^0 (-5826) + e_aq^-1 (-8669) -> OH^-1 (-13336) +At time : 9.3011 ns Reaction : e_aq^-1 (-1588) + H3O^1 (-8089) -> H^0 (-13337) +At time : 9.3011 ns Reaction : e_aq^-1 (-3889) + H3O^1 (-7761) -> H^0 (-13338) +At time : 9.3011 ns Reaction : e_aq^-1 (-366) + °OH^0 (-7514) -> OH^-1 (-13339) +At time : 9.4011 ns Reaction : OH^-1 (-13209) + H3O^1 (-7297) -> No product +At time : 9.4011 ns Reaction : OH^-1 (-12882) + H3O^1 (-6925) -> No product +At time : 9.4011 ns Reaction : °OH^0 (-11143) + °OH^0 (-12788) -> H2O2^0 (-13340) +At time : 9.4011 ns Reaction : °OH^0 (-6454) + °OH^0 (-7884) -> H2O2^0 (-13341) +At time : 9.4011 ns Reaction : e_aq^-1 (-3620) + H3O^1 (-6329) -> H^0 (-13342) +At time : 9.5011 ns Reaction : H3O^1 (-10792) + OH^-1 (-13271) -> No product +At time : 9.5011 ns Reaction : H3O^1 (-7597) + OH^-1 (-13162) -> No product +At time : 9.5011 ns Reaction : e_aq^-1 (-5624) + °OH^0 (-13123) -> OH^-1 (-13343) +At time : 9.5011 ns Reaction : °OH^0 (-11130) + e_aq^-1 (-5016) -> OH^-1 (-13344) +At time : 9.5011 ns Reaction : °OH^0 (-10616) + e_aq^-1 (-4385) -> OH^-1 (-13345) +At time : 9.5011 ns Reaction : OH^-1 (-13267) + H3O^1 (-7623) -> No product +At time : 9.6011 ns Reaction : OH^-1 (-13343) + H3O^1 (-7463) -> No product +At time : 9.6011 ns Reaction : H3O^1 (-8383) + OH^-1 (-13273) -> No product +At time : 9.6011 ns Reaction : OH^-1 (-13086) + H3O^1 (-6707) -> No product +At time : 9.6011 ns Reaction : H3O^1 (-7321) + OH^-1 (-12305) -> No product +At time : 9.6011 ns Reaction : H2O2^0 (-11552) + e_aq^-1 (-4979) -> OH^-1 (-13346) + °OH^0 (-13347) +At time : 9.6011 ns Reaction : e_aq^-1 (-1676) + °OH^0 (-10032) -> OH^-1 (-13348) +At time : 9.6011 ns Reaction : H^0 (-9673) + e_aq^-1 (-8888) -> OH^-1 (-13349) + H_2^0 (-13350) +At time : 9.6011 ns Reaction : e_aq^-1 (-1861) + H3O^1 (-8704) -> H^0 (-13351) +At time : 9.7011 ns Reaction : OH^-1 (-13262) + H3O^1 (-8007) -> No product +At time : 9.7011 ns Reaction : OH^-1 (-12522) + H3O^1 (-6189) -> No product +At time : 9.8011 ns Reaction : OH^-1 (-13346) + H3O^1 (-8293) -> No product +At time : 9.8011 ns Reaction : H3O^1 (-7509) + OH^-1 (-13070) -> No product +At time : 9.8011 ns Reaction : e_aq^-1 (-1520) + H^0 (-12633) -> OH^-1 (-13352) + H_2^0 (-13353) +At time : 9.8011 ns Reaction : e_aq^-1 (-474) + H3O^1 (-11163) -> H^0 (-13354) +At time : 9.8011 ns Reaction : H^0 (-9933) + °OH^0 (-6014) -> No product +At time : 9.8011 ns Reaction : e_aq^-1 (-3722) + H3O^1 (-9695) -> H^0 (-13355) +At time : 9.8011 ns Reaction : °OH^0 (-9539) + H^0 (-9536) -> No product +At time : 9.8011 ns Reaction : H^0 (-9521) + e_aq^-1 (-4303) -> OH^-1 (-13356) + H_2^0 (-13357) +At time : 9.8011 ns Reaction : H^0 (-9441) + e_aq^-1 (-4822) -> OH^-1 (-13358) + H_2^0 (-13359) +At time : 9.8011 ns Reaction : e_aq^-1 (-1279) + H3O^1 (-7057) -> H^0 (-13360) +At time : 9.8011 ns Reaction : e_aq^-1 (-4836) + °OH^0 (-6198) -> OH^-1 (-13361) +At time : 9.9011 ns Reaction : H3O^1 (-9881) + OH^-1 (-13329) -> No product +At time : 9.9011 ns Reaction : H^0 (-12671) + °OH^0 (-6476) -> No product +At time : 9.9011 ns Reaction : e_aq^-1 (-5089) + H2O2^0 (-11706) -> OH^-1 (-13362) + °OH^0 (-13363) +At time : 9.9011 ns Reaction : H^0 (-10601) + e_aq^-1 (-4451) -> OH^-1 (-13364) + H_2^0 (-13365) +At time : 9.9011 ns Reaction : °OH^0 (-10306) + °OH^0 (-6114) -> H2O2^0 (-13366) +At time : 9.9011 ns Reaction : H^0 (-10223) + °OH^0 (-7190) -> No product +At time : 9.9011 ns Reaction : e_aq^-1 (-376) + H3O^1 (-7529) -> H^0 (-13367) +At time : 9.9011 ns Reaction : e_aq^-1 (-4281) + H3O^1 (-6019) -> H^0 (-13368) +At time : 10.001 ns Reaction : OH^-1 (-13246) + H3O^1 (-7495) -> No product +At time : 10.001 ns Reaction : H^0 (-12190) + °OH^0 (-8493) -> No product +At time : 10.001 ns Reaction : e_aq^-1 (-4709) + H2O2^0 (-11487) -> OH^-1 (-13369) + °OH^0 (-13370) +At time : 10.001 ns Reaction : H3O^1 (-10556) + e_aq^-1 (-4834) -> H^0 (-13371) +At time : 10.001 ns Reaction : e_aq^-1 (-5062) + H3O^1 (-6093) -> H^0 (-13372) +At time : 11.001 ns Reaction : OH^-1 (-13369) + H3O^1 (-6209) -> No product +At time : 11.001 ns Reaction : H3O^1 (-6041) + OH^-1 (-13364) -> No product +At time : 11.001 ns Reaction : H^0 (-13338) + e_aq^-1 (-2586) -> OH^-1 (-13373) + H_2^0 (-13374) +At time : 11.001 ns Reaction : OH^-1 (-13306) + H3O^1 (-8842) -> No product +At time : 11.001 ns Reaction : H3O^1 (-11088) + OH^-1 (-13292) -> No product +At time : 11.001 ns Reaction : H3O^1 (-6023) + OH^-1 (-13257) -> No product +At time : 11.001 ns Reaction : H3O^1 (-11064) + OH^-1 (-13233) -> No product +At time : 11.001 ns Reaction : e_aq^-1 (-5307) + H2O2^0 (-13069) -> OH^-1 (-13375) + °OH^0 (-13376) +At time : 11.001 ns Reaction : e_aq^-1 (-4850) + H2O2^0 (-13049) -> OH^-1 (-13377) + °OH^0 (-13378) +At time : 11.001 ns Reaction : OH^-1 (-12843) + H3O^1 (-7799) -> No product +At time : 11.001 ns Reaction : OH^-1 (-12825) + H3O^1 (-6411) -> No product +At time : 11.001 ns Reaction : e_aq^-1 (-1451) + H2O2^0 (-12761) -> OH^-1 (-13379) + °OH^0 (-13380) +At time : 11.001 ns Reaction : H3O^1 (-9974) + OH^-1 (-12732) -> No product +At time : 11.001 ns Reaction : OH^-1 (-12670) + H3O^1 (-8923) -> No product +At time : 11.001 ns Reaction : °OH^0 (-12478) + °OH^0 (-6034) -> H2O2^0 (-13381) +At time : 11.001 ns Reaction : °OH^0 (-10930) + °OH^0 (-6926) -> H2O2^0 (-13382) +At time : 11.001 ns Reaction : °OH^0 (-9180) + °OH^0 (-9182) -> H2O2^0 (-13383) +At time : 11.001 ns Reaction : e_aq^-1 (-2500) + H3O^1 (-8866) -> H^0 (-13384) +At time : 11.001 ns Reaction : °OH^0 (-8304) + °OH^0 (-8314) -> H2O2^0 (-13385) +At time : 11.001 ns Reaction : e_aq^-1 (-3683) + °OH^0 (-7878) -> OH^-1 (-13386) +At time : 11.001 ns Reaction : e_aq^-1 (-4795) + H3O^1 (-7619) -> H^0 (-13387) +At time : 11.001 ns Reaction : °OH^0 (-6714) + °OH^0 (-6732) -> H2O2^0 (-13388) +At time : 11.001 ns Reaction : e_aq^-1 (-1954) + e_aq^-1 (-4176) -> OH^-1 (-13389) + OH^-1 (-13390) + H_2^0 (-13391) +At time : 12.001 ns Reaction : OH^-1 (-13339) + H3O^1 (-8806) -> No product +At time : 12.001 ns Reaction : H3O^1 (-10651) + OH^-1 (-13331) -> No product +At time : 12.001 ns Reaction : H3O^1 (-7905) + OH^-1 (-13297) -> No product +At time : 12.001 ns Reaction : OH^-1 (-13282) + H3O^1 (-7349) -> No product +At time : 12.001 ns Reaction : H3O^1 (-6405) + OH^-1 (-13231) -> No product +At time : 12.001 ns Reaction : OH^-1 (-13222) + H3O^1 (-8779) -> No product +At time : 12.001 ns Reaction : OH^-1 (-13172) + H3O^1 (-6553) -> No product +At time : 12.001 ns Reaction : OH^-1 (-13170) + H3O^1 (-5925) -> No product +At time : 12.001 ns Reaction : H3O^1 (-8653) + OH^-1 (-13168) -> No product +At time : 12.001 ns Reaction : OH^-1 (-13111) + H3O^1 (-5897) -> No product +At time : 12.001 ns Reaction : °OH^0 (-6790) + °OH^0 (-13068) -> H2O2^0 (-13392) +At time : 12.001 ns Reaction : H^0 (-13029) + e_aq^-1 (-2763) -> OH^-1 (-13393) + H_2^0 (-13394) +At time : 12.001 ns Reaction : H2O2^0 (-12812) + e_aq^-1 (-2916) -> OH^-1 (-13395) + °OH^0 (-13396) +At time : 12.001 ns Reaction : OH^-1 (-12735) + H3O^1 (-8884) -> No product +At time : 12.001 ns Reaction : e_aq^-1 (-2435) + H^0 (-12706) -> OH^-1 (-13397) + H_2^0 (-13398) +At time : 12.001 ns Reaction : OH^-1 (-12576) + H3O^1 (-7979) -> No product +At time : 12.001 ns Reaction : e_aq^-1 (-4110) + H2O2^0 (-12507) -> OH^-1 (-13399) + °OH^0 (-13400) +At time : 12.001 ns Reaction : e_aq^-1 (-541) + H^0 (-12465) -> OH^-1 (-13401) + H_2^0 (-13402) +At time : 12.001 ns Reaction : e_aq^-1 (-3652) + H2O2^0 (-12293) -> OH^-1 (-13403) + °OH^0 (-13404) +At time : 12.001 ns Reaction : e_aq^-1 (-3598) + H^0 (-12201) -> OH^-1 (-13405) + H_2^0 (-13406) +At time : 12.001 ns Reaction : H^0 (-12157) + °OH^0 (-8080) -> No product +At time : 12.001 ns Reaction : H^0 (-12091) + °OH^0 (-6948) -> No product +At time : 12.001 ns Reaction : H2O2^0 (-11807) + e_aq^-1 (-8702) -> OH^-1 (-13407) + °OH^0 (-13408) +At time : 12.001 ns Reaction : °OH^0 (-10578) + °OH^0 (-7622) -> H2O2^0 (-13409) +At time : 12.001 ns Reaction : °OH^0 (-9771) + H^0 (-9183) -> No product +At time : 12.001 ns Reaction : H^0 (-9635) + °OH^0 (-5924) -> No product +At time : 12.001 ns Reaction : °OH^0 (-7714) + °OH^0 (-9144) -> H2O2^0 (-13410) +At time : 12.001 ns Reaction : e_aq^-1 (-787) + H3O^1 (-8749) -> H^0 (-13411) +At time : 12.001 ns Reaction : °OH^0 (-8166) + °OH^0 (-8186) -> H2O2^0 (-13412) +At time : 12.001 ns Reaction : e_aq^-1 (-3925) + H3O^1 (-6567) -> H^0 (-13413) +At time : 13.001 ns Reaction : H3O^1 (-7255) + OH^-1 (-13401) -> No product +At time : 13.001 ns Reaction : OH^-1 (-13349) + H3O^1 (-6415) -> No product +At time : 13.001 ns Reaction : OH^-1 (-13270) + H3O^1 (-8229) -> No product +At time : 13.001 ns Reaction : OH^-1 (-13147) + H3O^1 (-8887) -> No product +At time : 13.001 ns Reaction : e_aq^-1 (-4878) + H2O2^0 (-13119) -> OH^-1 (-13414) + °OH^0 (-13415) +At time : 13.001 ns Reaction : H3O^1 (-10460) + OH^-1 (-12959) -> No product +At time : 13.001 ns Reaction : H3O^1 (-7019) + OH^-1 (-12938) -> No product +At time : 13.001 ns Reaction : e_aq^-1 (-4942) + H2O2^0 (-12924) -> OH^-1 (-13416) + °OH^0 (-13417) +At time : 13.001 ns Reaction : e_aq^-1 (-4315) + H^0 (-12840) -> OH^-1 (-13418) + H_2^0 (-13419) +At time : 13.001 ns Reaction : H3O^1 (-10583) + OH^-1 (-12776) -> No product +At time : 13.001 ns Reaction : OH^-1 (-12447) + H3O^1 (-10297) -> No product +At time : 13.001 ns Reaction : e_aq^-1 (-5496) + H2O2^0 (-12092) -> OH^-1 (-13420) + °OH^0 (-13421) +At time : 13.001 ns Reaction : e_aq^-1 (-1374) + H^0 (-11798) -> OH^-1 (-13422) + H_2^0 (-13423) +At time : 13.001 ns Reaction : H3O^1 (-10659) + e_aq^-1 (-2492) -> H^0 (-13424) +At time : 13.001 ns Reaction : °OH^0 (-9910) + °OH^0 (-5797) -> H2O2^0 (-13425) +At time : 13.001 ns Reaction : H3O^1 (-9869) + e_aq^-1 (-2243) -> H^0 (-13426) +At time : 13.001 ns Reaction : H^0 (-9352) + e_aq^-1 (-3765) -> OH^-1 (-13427) + H_2^0 (-13428) +At time : 13.001 ns Reaction : OH^-1 (-13377) + H3O^1 (-7103) -> No product +At time : 14.001 ns Reaction : OH^-1 (-13399) + H3O^1 (-6743) -> No product +At time : 14.001 ns Reaction : OH^-1 (-13375) + H3O^1 (-7333) -> No product +At time : 14.001 ns Reaction : OH^-1 (-13326) + H3O^1 (-10987) -> No product +At time : 14.001 ns Reaction : H3O^1 (-10725) + OH^-1 (-13305) -> No product +At time : 14.001 ns Reaction : H3O^1 (-6115) + OH^-1 (-13250) -> No product +At time : 14.001 ns Reaction : H3O^1 (-6649) + OH^-1 (-13159) -> No product +At time : 14.001 ns Reaction : OH^-1 (-13108) + H3O^1 (-7909) -> No product +At time : 14.001 ns Reaction : H3O^1 (-10643) + OH^-1 (-13097) -> No product +At time : 14.001 ns Reaction : OH^-1 (-13095) + H3O^1 (-7441) -> No product +At time : 14.001 ns Reaction : H3O^1 (-6741) + OH^-1 (-13076) -> No product +At time : 14.001 ns Reaction : H^0 (-13015) + e_aq^-1 (-3503) -> OH^-1 (-13429) + H_2^0 (-13430) +At time : 14.001 ns Reaction : H3O^1 (-6965) + OH^-1 (-12853) -> No product +At time : 14.001 ns Reaction : H2O2^0 (-12804) + e_aq^-1 (-4632) -> OH^-1 (-13431) + °OH^0 (-13432) +At time : 14.001 ns Reaction : e_aq^-1 (-3195) + H2O2^0 (-12695) -> OH^-1 (-13433) + °OH^0 (-13434) +At time : 14.001 ns Reaction : e_aq^-1 (-1694) + H^0 (-12483) -> OH^-1 (-13435) + H_2^0 (-13436) +At time : 14.001 ns Reaction : OH^-1 (-12468) + H3O^1 (-10867) -> No product +At time : 14.001 ns Reaction : e_aq^-1 (-4547) + H2O2^0 (-12418) -> OH^-1 (-13437) + °OH^0 (-13438) +At time : 14.001 ns Reaction : e_aq^-1 (-4259) + H2O2^0 (-12142) -> OH^-1 (-13439) + °OH^0 (-13440) +At time : 14.001 ns Reaction : e_aq^-1 (-4185) + H2O2^0 (-11886) -> OH^-1 (-13441) + °OH^0 (-13442) +At time : 14.001 ns Reaction : °OH^0 (-11113) + °OH^0 (-10553) -> H2O2^0 (-13443) +At time : 14.001 ns Reaction : H^0 (-11106) + e_aq^-1 (-4839) -> OH^-1 (-13444) + H_2^0 (-13445) +At time : 14.001 ns Reaction : °OH^0 (-10801) + °OH^0 (-7770) -> H2O2^0 (-13446) +At time : 14.001 ns Reaction : °OH^0 (-10423) + °OH^0 (-7410) -> H2O2^0 (-13447) +At time : 14.001 ns Reaction : H^0 (-9489) + °OH^0 (-7414) -> No product +At time : 14.001 ns Reaction : e_aq^-1 (-5470) + H3O^1 (-8435) -> H^0 (-13448) +At time : 14.001 ns Reaction : e_aq^-1 (-4977) + H3O^1 (-8297) -> H^0 (-13449) +At time : 14.001 ns Reaction : e_aq^-1 (-3993) + H3O^1 (-7985) -> H^0 (-13450) +At time : 14.001 ns Reaction : e_aq^-1 (-2574) + H3O^1 (-6593) -> H^0 (-13451) +At time : 14.001 ns Reaction : OH^-1 (-13288) + H3O^1 (-6217) -> No product +At time : 15.001 ns Reaction : e_aq^-1 (-778) + H^0 (-13449) -> OH^-1 (-13452) + H_2^0 (-13453) +At time : 15.001 ns Reaction : OH^-1 (-13444) + H3O^1 (-6193) -> No product +At time : 15.001 ns Reaction : °OH^0 (-13442) + e_aq^-1 (-4260) -> OH^-1 (-13454) +At time : 15.001 ns Reaction : OH^-1 (-13441) + H3O^1 (-10631) -> No product +At time : 15.001 ns Reaction : H3O^1 (-8049) + OH^-1 (-13356) -> No product +At time : 15.001 ns Reaction : OH^-1 (-13279) + H3O^1 (-8656) -> No product +At time : 15.001 ns Reaction : OH^-1 (-13264) + H3O^1 (-6981) -> No product +At time : 15.001 ns Reaction : H3O^1 (-9498) + OH^-1 (-13241) -> No product +At time : 15.001 ns Reaction : OH^-1 (-13208) + H3O^1 (-7517) -> No product +At time : 15.001 ns Reaction : H^0 (-13184) + e_aq^-1 (-2814) -> OH^-1 (-13455) + H_2^0 (-13456) +At time : 15.001 ns Reaction : H3O^1 (-5839) + OH^-1 (-13003) -> No product +At time : 15.001 ns Reaction : e_aq^-1 (-4584) + H^0 (-12854) -> OH^-1 (-13457) + H_2^0 (-13458) +At time : 15.001 ns Reaction : e_aq^-1 (-1214) + H^0 (-12102) -> OH^-1 (-13459) + H_2^0 (-13460) +At time : 15.001 ns Reaction : °OH^0 (-10548) + °OH^0 (-7150) -> H2O2^0 (-13461) +At time : 15.001 ns Reaction : °OH^0 (-9667) + e_aq^-1 (-3656) -> OH^-1 (-13462) +At time : 16.001 ns Reaction : OH^-1 (-13431) + H3O^1 (-7653) -> No product +At time : 16.001 ns Reaction : OH^-1 (-13422) + H3O^1 (-8127) -> No product +At time : 16.001 ns Reaction : OH^-1 (-13393) + H3O^1 (-6477) -> No product +At time : 16.001 ns Reaction : OH^-1 (-13309) + H3O^1 (-7553) -> No product +At time : 16.001 ns Reaction : OH^-1 (-13258) + H3O^1 (-8003) -> No product +At time : 16.001 ns Reaction : H3O^1 (-6853) + OH^-1 (-13106) -> No product +At time : 16.001 ns Reaction : H3O^1 (-10092) + OH^-1 (-13044) -> No product +At time : 16.001 ns Reaction : H^0 (-12956) + e_aq^-1 (-3529) -> OH^-1 (-13463) + H_2^0 (-13464) +At time : 16.001 ns Reaction : H3O^1 (-10735) + OH^-1 (-12945) -> No product +At time : 16.001 ns Reaction : H3O^1 (-7863) + OH^-1 (-12944) -> No product +At time : 16.001 ns Reaction : H3O^1 (-7373) + OH^-1 (-12579) -> No product +At time : 16.001 ns Reaction : e_aq^-1 (-4506) + H2O2^0 (-12086) -> OH^-1 (-13465) + °OH^0 (-13466) +At time : 16.001 ns Reaction : °OH^0 (-11124) + °OH^0 (-10230) -> H2O2^0 (-13467) +At time : 16.001 ns Reaction : °OH^0 (-7914) + °OH^0 (-7928) -> H2O2^0 (-13468) +At time : 16.001 ns Reaction : °OH^0 (-7070) + °OH^0 (-7608) -> H2O2^0 (-13469) +At time : 16.001 ns Reaction : e_aq^-1 (-5524) + °OH^0 (-8778) -> OH^-1 (-13470) +At time : 17.001 ns Reaction : H3O^1 (-7453) + OH^-1 (-13470) -> No product +At time : 17.001 ns Reaction : H2O2^0 (-13469) + e_aq^-1 (-4769) -> OH^-1 (-13471) + °OH^0 (-13472) +At time : 17.001 ns Reaction : OH^-1 (-13455) + H3O^1 (-6559) -> No product +At time : 17.001 ns Reaction : OH^-1 (-13348) + H3O^1 (-6959) -> No product +At time : 17.001 ns Reaction : OH^-1 (-13291) + H3O^1 (-6105) -> No product +At time : 17.001 ns Reaction : e_aq^-1 (-4612) + °OH^0 (-13182) -> OH^-1 (-13473) +At time : 17.001 ns Reaction : H3O^1 (-5823) + OH^-1 (-13126) -> No product +At time : 17.001 ns Reaction : OH^-1 (-12900) + H3O^1 (-5983) -> No product +At time : 17.001 ns Reaction : H^0 (-12899) + H^0 (-11634) -> H_2^0 (-13474) +At time : 17.001 ns Reaction : OH^-1 (-12855) + H3O^1 (-6131) -> No product +At time : 17.001 ns Reaction : e_aq^-1 (-5351) + °OH^0 (-12822) -> OH^-1 (-13475) +At time : 17.001 ns Reaction : H3O^1 (-6493) + OH^-1 (-12493) -> No product +At time : 17.001 ns Reaction : e_aq^-1 (-2556) + H2O2^0 (-12377) -> OH^-1 (-13476) + °OH^0 (-13477) +At time : 17.001 ns Reaction : e_aq^-1 (-2413) + H2O2^0 (-11893) -> OH^-1 (-13478) + °OH^0 (-13479) +At time : 17.001 ns Reaction : e_aq^-1 (-3674) + H2O2^0 (-11842) -> OH^-1 (-13480) + °OH^0 (-13481) +At time : 17.001 ns Reaction : e_aq^-1 (-4900) + H^0 (-9243) -> OH^-1 (-13482) + H_2^0 (-13483) +At time : 17.001 ns Reaction : e_aq^-1 (-3830) + °OH^0 (-7924) -> OH^-1 (-13484) +At time : 17.001 ns Reaction : e_aq^-1 (-2477) + H3O^1 (-6621) -> H^0 (-13485) +At time : 18.001 ns Reaction : H3O^1 (-6371) + OH^-1 (-13462) -> No product +At time : 18.001 ns Reaction : OH^-1 (-13414) + H3O^1 (-7593) -> No product +At time : 18.001 ns Reaction : °OH^0 (-12185) + H^0 (-13150) -> No product +At time : 18.001 ns Reaction : H2O2^0 (-13109) + e_aq^-1 (-4935) -> OH^-1 (-13486) + °OH^0 (-13487) +At time : 18.001 ns Reaction : H3O^1 (-6527) + OH^-1 (-13088) -> No product +At time : 18.001 ns Reaction : OH^-1 (-13054) + H3O^1 (-8333) -> No product +At time : 18.001 ns Reaction : H3O^1 (-6235) + OH^-1 (-12869) -> No product +At time : 18.001 ns Reaction : °OH^0 (-12765) + e_aq^-1 (-2735) -> OH^-1 (-13488) +At time : 18.001 ns Reaction : H^0 (-11095) + °OH^0 (-8258) -> No product +At time : 18.001 ns Reaction : e_aq^-1 (-1962) + H3O^1 (-10857) -> H^0 (-13489) +At time : 18.001 ns Reaction : °OH^0 (-10817) + °OH^0 (-7940) -> H2O2^0 (-13490) +At time : 18.001 ns Reaction : e_aq^-1 (-5693) + H3O^1 (-8455) -> H^0 (-13491) +At time : 19.001 ns Reaction : OH^-1 (-13486) + H3O^1 (-8321) -> No product +At time : 19.001 ns Reaction : OH^-1 (-13328) + H3O^1 (-5969) -> No product +At time : 19.001 ns Reaction : e_aq^-1 (-2076) + H^0 (-13317) -> OH^-1 (-13492) + H_2^0 (-13493) +At time : 19.001 ns Reaction : H2O2^0 (-13178) + e_aq^-1 (-8753) -> OH^-1 (-13494) + °OH^0 (-13495) +At time : 19.001 ns Reaction : OH^-1 (-12926) + H3O^1 (-7445) -> No product +At time : 19.001 ns Reaction : e_aq^-1 (-5339) + H2O2^0 (-12910) -> OH^-1 (-13496) + °OH^0 (-13497) +At time : 19.001 ns Reaction : H3O^1 (-6915) + OH^-1 (-12881) -> No product +At time : 19.001 ns Reaction : H^0 (-12748) + e_aq^-1 (-9062) -> OH^-1 (-13498) + H_2^0 (-13499) +At time : 19.001 ns Reaction : H3O^1 (-6079) + OH^-1 (-12737) -> No product +At time : 19.001 ns Reaction : e_aq^-1 (-567) + H2O2^0 (-12348) -> OH^-1 (-13500) + °OH^0 (-13501) +At time : 19.001 ns Reaction : e_aq^-1 (-4386) + H3O^1 (-9994) -> H^0 (-13502) +At time : 19.001 ns Reaction : H^0 (-9658) + °OH^0 (-6338) -> No product +At time : 19.001 ns Reaction : °OH^0 (-9535) + H^0 (-9534) -> No product +At time : 19.001 ns Reaction : °OH^0 (-9386) + °OH^0 (-7734) -> H2O2^0 (-13503) +At time : 19.001 ns Reaction : e_aq^-1 (-5650) + H3O^1 (-8483) -> H^0 (-13504) +At time : 20.001 ns Reaction : H3O^1 (-6409) + OH^-1 (-13480) -> No product +At time : 20.001 ns Reaction : OH^-1 (-13227) + H3O^1 (-7183) -> No product +At time : 20.001 ns Reaction : OH^-1 (-13028) + H3O^1 (-5849) -> No product +At time : 20.001 ns Reaction : OH^-1 (-13016) + H3O^1 (-6611) -> No product +At time : 20.001 ns Reaction : e_aq^-1 (-2310) + H^0 (-12809) -> OH^-1 (-13505) + H_2^0 (-13506) +At time : 20.001 ns Reaction : H3O^1 (-6097) + OH^-1 (-12785) -> No product +At time : 20.001 ns Reaction : H3O^1 (-5991) + OH^-1 (-12694) -> No product +At time : 20.001 ns Reaction : H3O^1 (-7209) + OH^-1 (-12509) -> No product +At time : 20.001 ns Reaction : e_aq^-1 (-2996) + H2O2^0 (-12035) -> OH^-1 (-13507) + °OH^0 (-13508) +At time : 20.001 ns Reaction : °OH^0 (-5928) + H^0 (-11782) -> No product +At time : 20.001 ns Reaction : H^0 (-10361) + °OH^0 (-11238) -> No product +At time : 20.001 ns Reaction : H^0 (-11148) + °OH^0 (-8392) -> No product +At time : 20.001 ns Reaction : °OH^0 (-9963) + e_aq^-1 (-1901) -> OH^-1 (-13509) +At time : 20.001 ns Reaction : e_aq^-1 (-5235) + H3O^1 (-8395) -> H^0 (-13510) +At time : 20.001 ns Reaction : °OH^0 (-8150) + °OH^0 (-8168) -> H2O2^0 (-13511) +At time : 20.001 ns Reaction : e_aq^-1 (-4234) + °OH^0 (-8048) -> OH^-1 (-13512) +At time : 20.001 ns Reaction : e_aq^-1 (-3738) + e_aq^-1 (-3713) -> OH^-1 (-13513) + OH^-1 (-13514) + H_2^0 (-13515) +At time : 20.001 ns Reaction : e_aq^-1 (-3657) + e_aq^-1 (-3648) -> OH^-1 (-13516) + OH^-1 (-13517) + H_2^0 (-13518) +At time : 20.001 ns Reaction : H3O^1 (-7437) + OH^-1 (-13420) -> No product +At time : 21.001 ns Reaction : OH^-1 (-13517) + H3O^1 (-6383) -> No product +At time : 21.001 ns Reaction : H3O^1 (-5853) + OH^-1 (-13505) -> No product +At time : 21.001 ns Reaction : H3O^1 (-7189) + OH^-1 (-13494) -> No product +At time : 21.001 ns Reaction : H3O^1 (-10637) + OH^-1 (-13439) -> No product +At time : 21.001 ns Reaction : H3O^1 (-9895) + OH^-1 (-13324) -> No product +At time : 21.001 ns Reaction : H2O2^0 (-13198) + e_aq^-1 (-2972) -> OH^-1 (-13519) + °OH^0 (-13520) +At time : 21.001 ns Reaction : OH^-1 (-13122) + H3O^1 (-6143) -> No product +At time : 21.001 ns Reaction : H3O^1 (-6069) + OH^-1 (-13001) -> No product +At time : 21.001 ns Reaction : e_aq^-1 (-2208) + H2O2^0 (-12871) -> OH^-1 (-13521) + °OH^0 (-13522) +At time : 21.001 ns Reaction : H^0 (-12333) + e_aq^-1 (-4809) -> OH^-1 (-13523) + H_2^0 (-13524) +At time : 21.001 ns Reaction : e_aq^-1 (-515) + H2O2^0 (-12332) -> OH^-1 (-13525) + °OH^0 (-13526) +At time : 21.001 ns Reaction : e_aq^-1 (-4602) + °OH^0 (-11032) -> OH^-1 (-13527) +At time : 21.001 ns Reaction : e_aq^-1 (-1458) + H3O^1 (-10983) -> H^0 (-13528) +At time : 21.001 ns Reaction : °OH^0 (-10964) + °OH^0 (-10960) -> H2O2^0 (-13529) +At time : 21.001 ns Reaction : e_aq^-1 (-1879) + H3O^1 (-10945) -> H^0 (-13530) +At time : 21.001 ns Reaction : H3O^1 (-10786) + e_aq^-1 (-2807) -> H^0 (-13531) +At time : 21.001 ns Reaction : H^0 (-10567) + °OH^0 (-7610) -> No product +At time : 21.001 ns Reaction : e_aq^-1 (-396) + °OH^0 (-10493) -> OH^-1 (-13532) +At time : 21.001 ns Reaction : °OH^0 (-10461) + °OH^0 (-6164) -> H2O2^0 (-13533) +At time : 21.001 ns Reaction : e_aq^-1 (-4394) + H3O^1 (-10006) -> H^0 (-13534) +At time : 21.001 ns Reaction : °OH^0 (-9580) + e_aq^-1 (-3553) -> OH^-1 (-13535) +At time : 21.001 ns Reaction : e_aq^-1 (-1663) + H3O^1 (-6875) -> H^0 (-13536) +At time : 21.001 ns Reaction : H3O^1 (-7651) + OH^-1 (-13527) -> No product +At time : 22.001 ns Reaction : e_aq^-1 (-229) + H2O2^0 (-13533) -> OH^-1 (-13537) + °OH^0 (-13538) +At time : 22.001 ns Reaction : e_aq^-1 (-4331) + H^0 (-13530) -> OH^-1 (-13539) + H_2^0 (-13540) +At time : 22.001 ns Reaction : e_aq^-1 (-348) + H^0 (-13367) -> OH^-1 (-13541) + H_2^0 (-13542) +At time : 22.001 ns Reaction : H3O^1 (-7077) + OH^-1 (-13358) -> No product +At time : 22.001 ns Reaction : e_aq^-1 (-5364) + H^0 (-13091) -> OH^-1 (-13543) + H_2^0 (-13544) +At time : 22.001 ns Reaction : OH^-1 (-12673) + H3O^1 (-8261) -> No product +At time : 22.001 ns Reaction : e_aq^-1 (-2692) + H^0 (-12595) -> OH^-1 (-13545) + H_2^0 (-13546) +At time : 22.001 ns Reaction : e_aq^-1 (-3723) + H^0 (-12567) -> OH^-1 (-13547) + H_2^0 (-13548) +At time : 22.001 ns Reaction : e_aq^-1 (-4630) + H2O2^0 (-12529) -> OH^-1 (-13549) + °OH^0 (-13550) +At time : 22.001 ns Reaction : H^0 (-12349) + °OH^0 (-7308) -> No product +At time : 22.001 ns Reaction : e_aq^-1 (-3448) + H^0 (-12284) -> OH^-1 (-13551) + H_2^0 (-13552) +At time : 22.001 ns Reaction : e_aq^-1 (-2459) + H2O2^0 (-12147) -> OH^-1 (-13553) + °OH^0 (-13554) +At time : 22.001 ns Reaction : °OH^0 (-10313) + H^0 (-11821) -> No product +At time : 22.001 ns Reaction : OH^-1 (-11525) + H3O^1 (-7785) -> No product +At time : 22.001 ns Reaction : °OH^0 (-11006) + °OH^0 (-5734) -> H2O2^0 (-13555) +At time : 22.001 ns Reaction : °OH^0 (-10166) + °OH^0 (-7074) -> H2O2^0 (-13556) +At time : 22.001 ns Reaction : °OH^0 (-9833) + °OH^0 (-6706) -> H2O2^0 (-13557) +At time : 22.001 ns Reaction : °OH^0 (-9725) + e_aq^-1 (-3792) -> OH^-1 (-13558) +At time : 23.001 ns Reaction : OH^-1 (-13512) + H3O^1 (-8980) -> No product +At time : 23.001 ns Reaction : H3O^1 (-10739) + OH^-1 (-13507) -> No product +At time : 23.001 ns Reaction : OH^-1 (-13478) + H3O^1 (-6647) -> No product +At time : 23.001 ns Reaction : H^0 (-13221) + °OH^0 (-6158) -> No product +At time : 23.001 ns Reaction : H3O^1 (-9404) + OH^-1 (-13026) -> No product +At time : 23.001 ns Reaction : OH^-1 (-12848) + H3O^1 (-6715) -> No product +At time : 23.001 ns Reaction : H^0 (-12508) + °OH^0 (-6278) -> No product +At time : 23.001 ns Reaction : e_aq^-1 (-4043) + H3O^1 (-11353) -> H^0 (-13559) +At time : 23.001 ns Reaction : e_aq^-1 (-5426) + °OH^0 (-11204) -> OH^-1 (-13560) +At time : 23.001 ns Reaction : °OH^0 (-10793) + °OH^0 (-9158) -> H2O2^0 (-13561) +At time : 23.001 ns Reaction : °OH^0 (-10625) + °OH^0 (-7692) -> H2O2^0 (-13562) +At time : 23.001 ns Reaction : °OH^0 (-10490) + °OH^0 (-8802) -> H2O2^0 (-13563) +At time : 23.001 ns Reaction : °OH^0 (-9530) + H^0 (-9527) -> No product +At time : 23.001 ns Reaction : e_aq^-1 (-5309) + e_aq^-1 (-9095) -> OH^-1 (-13564) + OH^-1 (-13565) + H_2^0 (-13566) +At time : 23.001 ns Reaction : °OH^0 (-7542) + °OH^0 (-8400) -> H2O2^0 (-13567) +At time : 23.001 ns Reaction : e_aq^-1 (-4218) + H3O^1 (-6027) -> H^0 (-13568) +At time : 24.001 ns Reaction : OH^-1 (-13553) + H3O^1 (-6701) -> No product +At time : 24.001 ns Reaction : e_aq^-1 (-4373) + H2O2^0 (-13381) -> OH^-1 (-13569) + °OH^0 (-13570) +At time : 24.001 ns Reaction : H3O^1 (-6153) + OH^-1 (-13185) -> No product +At time : 24.001 ns Reaction : °OH^0 (-13163) + e_aq^-1 (-4783) -> OH^-1 (-13571) +At time : 24.001 ns Reaction : OH^-1 (-13005) + H3O^1 (-6107) -> No product +At time : 24.001 ns Reaction : OH^-1 (-12941) + H3O^1 (-8875) -> No product +At time : 24.001 ns Reaction : OH^-1 (-12920) + H3O^1 (-7739) -> No product +At time : 24.001 ns Reaction : OH^-1 (-12914) + H3O^1 (-8149) -> No product +At time : 24.001 ns Reaction : H^0 (-12665) + e_aq^-1 (-5177) -> OH^-1 (-13572) + H_2^0 (-13573) +At time : 24.001 ns Reaction : °OH^0 (-10717) + e_aq^-1 (-3577) -> OH^-1 (-13574) +At time : 24.001 ns Reaction : °OH^0 (-10040) + °OH^0 (-6992) -> H2O2^0 (-13575) +At time : 24.001 ns Reaction : e_aq^-1 (-1933) + H^0 (-9911) -> OH^-1 (-13576) + H_2^0 (-13577) +At time : 24.001 ns Reaction : °OH^0 (-8448) + °OH^0 (-8610) -> H2O2^0 (-13578) +At time : 24.001 ns Reaction : °OH^0 (-7978) + °OH^0 (-8571) -> H2O2^0 (-13579) +At time : 25.001 ns Reaction : e_aq^-1 (-2391) + H2O2^0 (-13579) -> OH^-1 (-13580) + °OH^0 (-13581) +At time : 25.001 ns Reaction : e_aq^-1 (-1401) + H^0 (-13528) -> OH^-1 (-13582) + H_2^0 (-13583) +At time : 25.001 ns Reaction : H3O^1 (-6179) + OH^-1 (-13525) -> No product +At time : 25.001 ns Reaction : OH^-1 (-13523) + H3O^1 (-10175) -> No product +At time : 25.001 ns Reaction : OH^-1 (-13516) + H3O^1 (-6377) -> No product +At time : 25.001 ns Reaction : H3O^1 (-11236) + OH^-1 (-13496) -> No product +At time : 25.001 ns Reaction : OH^-1 (-13435) + H3O^1 (-6957) -> No product +At time : 25.001 ns Reaction : OH^-1 (-13193) + H3O^1 (-6005) -> No product +At time : 25.001 ns Reaction : OH^-1 (-13188) + H3O^1 (-7675) -> No product +At time : 25.001 ns Reaction : H3O^1 (-11217) + OH^-1 (-12597) -> No product +At time : 25.001 ns Reaction : °OH^0 (-7942) + H^0 (-12121) -> No product +At time : 25.001 ns Reaction : °OH^0 (-10241) + °OH^0 (-7216) -> H2O2^0 (-13584) +At time : 25.001 ns Reaction : e_aq^-1 (-2203) + °OH^0 (-9865) -> OH^-1 (-13585) +At time : 25.001 ns Reaction : °OH^0 (-9737) + °OH^0 (-9717) -> H2O2^0 (-13586) +At time : 25.001 ns Reaction : °OH^0 (-9550) + °OH^0 (-9546) -> H2O2^0 (-13587) +At time : 25.001 ns Reaction : e_aq^-1 (-3611) + °OH^0 (-8667) -> OH^-1 (-13588) +At time : 25.001 ns Reaction : e_aq^-1 (-3670) + H3O^1 (-6435) -> H^0 (-13589) +At time : 26.001 ns Reaction : H3O^1 (-11194) + OH^-1 (-13541) -> No product +At time : 26.001 ns Reaction : OH^-1 (-13509) + H3O^1 (-6761) -> No product +At time : 26.001 ns Reaction : H3O^1 (-7725) + OH^-1 (-13323) -> No product +At time : 26.001 ns Reaction : OH^-1 (-13299) + H3O^1 (-7119) -> No product +At time : 26.001 ns Reaction : OH^-1 (-13166) + H3O^1 (-8291) -> No product +At time : 26.001 ns Reaction : OH^-1 (-13107) + H3O^1 (-6549) -> No product +At time : 26.001 ns Reaction : H^0 (-12867) + e_aq^-1 (-1926) -> OH^-1 (-13590) + H_2^0 (-13591) +At time : 26.001 ns Reaction : e_aq^-1 (-1881) + H2O2^0 (-11622) -> OH^-1 (-13592) + °OH^0 (-13593) +At time : 26.001 ns Reaction : °OH^0 (-10990) + H^0 (-10051) -> No product +At time : 26.001 ns Reaction : H3O^1 (-10747) + e_aq^-1 (-3066) -> H^0 (-13594) +At time : 26.001 ns Reaction : e_aq^-1 (-1098) + H3O^1 (-10549) -> H^0 (-13595) +At time : 26.001 ns Reaction : H^0 (-10545) + °OH^0 (-10547) -> No product +At time : 26.001 ns Reaction : H^0 (-9761) + e_aq^-1 (-2451) -> OH^-1 (-13596) + H_2^0 (-13597) +At time : 26.001 ns Reaction : °OH^0 (-9741) + °OH^0 (-6572) -> H2O2^0 (-13598) +At time : 26.001 ns Reaction : °OH^0 (-9712) + °OH^0 (-5954) -> H2O2^0 (-13599) +At time : 26.001 ns Reaction : °OH^0 (-9270) + °OH^0 (-7892) -> H2O2^0 (-13600) +At time : 26.001 ns Reaction : °OH^0 (-6470) + e_aq^-1 (-8897) -> OH^-1 (-13601) +At time : 26.001 ns Reaction : °OH^0 (-7154) + °OH^0 (-8250) -> H2O2^0 (-13602) +At time : 26.001 ns Reaction : °OH^0 (-7106) + °OH^0 (-8192) -> H2O2^0 (-13603) +At time : 26.001 ns Reaction : °OH^0 (-7788) + °OH^0 (-7790) -> H2O2^0 (-13604) +At time : 26.001 ns Reaction : e_aq^-1 (-4908) + H3O^1 (-5871) -> H^0 (-13605) +At time : 27.001 ns Reaction : H^0 (-13531) + e_aq^-1 (-2831) -> OH^-1 (-13606) + H_2^0 (-13607) +At time : 27.001 ns Reaction : OH^-1 (-13521) + H3O^1 (-6785) -> No product +At time : 27.001 ns Reaction : e_aq^-1 (-4413) + H2O2^0 (-13382) -> OH^-1 (-13608) + °OH^0 (-13609) +At time : 27.001 ns Reaction : °OH^0 (-6582) + °OH^0 (-12548) -> H2O2^0 (-13610) +At time : 27.001 ns Reaction : H^0 (-11108) + °OH^0 (-12546) -> No product +At time : 27.001 ns Reaction : e_aq^-1 (-5333) + H2O2^0 (-12017) -> OH^-1 (-13611) + °OH^0 (-13612) +At time : 27.001 ns Reaction : H3O^1 (-11103) + e_aq^-1 (-4892) -> H^0 (-13613) +At time : 27.001 ns Reaction : °OH^0 (-9804) + °OH^0 (-10813) -> H2O2^0 (-13614) +At time : 27.001 ns Reaction : H^0 (-9532) + e_aq^-1 (-3425) -> OH^-1 (-13615) + H_2^0 (-13616) +At time : 27.001 ns Reaction : °OH^0 (-7038) + °OH^0 (-9046) -> H2O2^0 (-13617) +At time : 27.001 ns Reaction : e_aq^-1 (-3149) + °OH^0 (-7836) -> OH^-1 (-13618) +At time : 27.001 ns Reaction : e_aq^-1 (-3932) + °OH^0 (-6704) -> OH^-1 (-13619) +At time : 28.001 ns Reaction : H3O^1 (-9688) + OH^-1 (-13606) -> No product +At time : 28.001 ns Reaction : OH^-1 (-13463) + H3O^1 (-6305) -> No product +At time : 28.001 ns Reaction : H3O^1 (-10598) + OH^-1 (-13352) -> No product +At time : 28.001 ns Reaction : e_aq^-1 (-3965) + °OH^0 (-13332) -> OH^-1 (-13620) +At time : 28.001 ns Reaction : H3O^1 (-6663) + OH^-1 (-12999) -> No product +At time : 28.001 ns Reaction : OH^-1 (-12821) + H3O^1 (-8469) -> No product +At time : 28.001 ns Reaction : H2O2^0 (-12766) + e_aq^-1 (-3833) -> OH^-1 (-13621) + °OH^0 (-13622) +At time : 28.001 ns Reaction : e_aq^-1 (-4369) + H^0 (-12511) -> OH^-1 (-13623) + H_2^0 (-13624) +At time : 28.001 ns Reaction : H2O2^0 (-11433) + e_aq^-1 (-3458) -> OH^-1 (-13625) + °OH^0 (-13626) +At time : 28.001 ns Reaction : °OH^0 (-11115) + e_aq^-1 (-5043) -> OH^-1 (-13627) +At time : 28.001 ns Reaction : H^0 (-10497) + °OH^0 (-8420) -> No product +At time : 28.001 ns Reaction : e_aq^-1 (-4763) + H3O^1 (-8596) -> H^0 (-13628) +At time : 28.001 ns Reaction : e_aq^-1 (-3933) + H3O^1 (-7963) -> H^0 (-13629) +At time : 28.001 ns Reaction : e_aq^-1 (-2684) + H3O^1 (-7911) -> H^0 (-13630) +At time : 28.001 ns Reaction : e_aq^-1 (-3493) + H3O^1 (-7803) -> H^0 (-13631) +At time : 28.001 ns Reaction : e_aq^-1 (-3133) + H3O^1 (-6311) -> H^0 (-13632) +At time : 28.001 ns Reaction : e_aq^-1 (-4199) + °OH^0 (-10894) -> OH^-1 (-13633) +At time : 29.001 ns Reaction : OH^-1 (-13582) + H3O^1 (-9016) -> No product +At time : 29.001 ns Reaction : H3O^1 (-6885) + OH^-1 (-13418) -> No product +At time : 29.001 ns Reaction : OH^-1 (-13386) + H3O^1 (-6357) -> No product +At time : 29.001 ns Reaction : e_aq^-1 (-5248) + H2O2^0 (-13366) -> OH^-1 (-13634) + °OH^0 (-13635) +At time : 29.001 ns Reaction : e_aq^-1 (-943) + H^0 (-13294) -> OH^-1 (-13636) + H_2^0 (-13637) +At time : 29.001 ns Reaction : e_aq^-1 (-4535) + H2O2^0 (-13059) -> OH^-1 (-13638) + °OH^0 (-13639) +At time : 29.001 ns Reaction : H3O^1 (-8467) + OH^-1 (-12813) -> No product +At time : 29.001 ns Reaction : H^0 (-12807) + °OH^0 (-7056) -> No product +At time : 29.001 ns Reaction : H3O^1 (-6609) + OH^-1 (-12490) -> No product +At time : 29.001 ns Reaction : °OH^0 (-10941) + °OH^0 (-8082) -> H2O2^0 (-13640) +At time : 29.001 ns Reaction : °OH^0 (-10698) + °OH^0 (-7802) -> H2O2^0 (-13641) +At time : 29.001 ns Reaction : H^0 (-9948) + °OH^0 (-6024) -> No product +At time : 29.001 ns Reaction : °OH^0 (-8358) + °OH^0 (-9072) -> H2O2^0 (-13642) +At time : 29.001 ns Reaction : °OH^0 (-7338) + °OH^0 (-8801) -> H2O2^0 (-13643) +At time : 29.001 ns Reaction : e_aq^-1 (-4620) + H3O^1 (-8737) -> H^0 (-13644) +At time : 29.001 ns Reaction : e_aq^-1 (-690) + H3O^1 (-7283) -> H^0 (-13645) +At time : 29.001 ns Reaction : e_aq^-1 (-3030) + °OH^0 (-6398) -> OH^-1 (-13646) +At time : 29.001 ns Reaction : e_aq^-1 (-4147) + °OH^0 (-12979) -> OH^-1 (-13647) +At time : 30.001 ns Reaction : e_aq^-1 (-4893) + H^0 (-13595) -> OH^-1 (-13648) + H_2^0 (-13649) +At time : 30.001 ns Reaction : H3O^1 (-8209) + OH^-1 (-13571) -> No product +At time : 30.001 ns Reaction : H3O^1 (-8307) + OH^-1 (-13482) -> No product +At time : 30.001 ns Reaction : OH^-1 (-13437) + H3O^1 (-8121) -> No product +At time : 30.001 ns Reaction : OH^-1 (-13403) + H3O^1 (-7869) -> No product +At time : 30.001 ns Reaction : OH^-1 (-13390) + H3O^1 (-8037) -> No product +At time : 30.001 ns Reaction : OH^-1 (-13115) + H3O^1 (-7489) -> No product +At time : 30.001 ns Reaction : OH^-1 (-12889) + H3O^1 (-6351) -> No product +At time : 30.001 ns Reaction : OH^-1 (-12470) + H3O^1 (-5833) -> No product +At time : 30.001 ns Reaction : e_aq^-1 (-202) + H2O2^0 (-12283) -> OH^-1 (-13650) + °OH^0 (-13651) +At time : 30.001 ns Reaction : e_aq^-1 (-3117) + H2O2^0 (-11647) -> OH^-1 (-13652) + °OH^0 (-13653) +At time : 30.001 ns Reaction : H^0 (-10742) + e_aq^-1 (-3600) -> OH^-1 (-13654) + H_2^0 (-13655) +At time : 30.001 ns Reaction : °OH^0 (-10130) + °OH^0 (-8152) -> H2O2^0 (-13656) +At time : 30.001 ns Reaction : H3O^1 (-9690) + e_aq^-1 (-3687) -> H^0 (-13657) +At time : 30.001 ns Reaction : °OH^0 (-8154) + °OH^0 (-9228) -> H2O2^0 (-13658) +At time : 30.001 ns Reaction : °OH^0 (-5996) + °OH^0 (-9202) -> H2O2^0 (-13659) +At time : 30.001 ns Reaction : °OH^0 (-6318) + °OH^0 (-7830) -> H2O2^0 (-13660) +At time : 30.001 ns Reaction : e_aq^-1 (-3526) + H3O^1 (-5913) -> H^0 (-13661) +At time : 31.001 ns Reaction : OH^-1 (-13652) + H3O^1 (-7837) -> No product +At time : 31.001 ns Reaction : H3O^1 (-5981) + OH^-1 (-13580) -> No product +At time : 31.001 ns Reaction : H3O^1 (-7261) + OH^-1 (-13255) -> No product +At time : 31.001 ns Reaction : H^0 (-10503) + H^0 (-13002) -> H_2^0 (-13662) +At time : 31.001 ns Reaction : OH^-1 (-12864) + H3O^1 (-8677) -> No product +At time : 31.001 ns Reaction : H2O2^0 (-12114) + e_aq^-1 (-8783) -> OH^-1 (-13663) + °OH^0 (-13664) +At time : 31.001 ns Reaction : H2O2^0 (-11566) + e_aq^-1 (-4203) -> OH^-1 (-13665) + °OH^0 (-13666) +At time : 31.001 ns Reaction : H2O2^0 (-11459) + e_aq^-1 (-4449) -> OH^-1 (-13667) + °OH^0 (-13668) +At time : 31.001 ns Reaction : H^0 (-11267) + H^0 (-9557) -> H_2^0 (-13669) +At time : 31.001 ns Reaction : e_aq^-1 (-1431) + H3O^1 (-11022) -> H^0 (-13670) +At time : 31.001 ns Reaction : °OH^0 (-10200) + °OH^0 (-7604) -> H2O2^0 (-13671) +At time : 31.001 ns Reaction : e_aq^-1 (-4691) + H3O^1 (-8159) -> H^0 (-13672) +At time : 31.001 ns Reaction : e_aq^-1 (-3507) + H3O^1 (-6281) -> H^0 (-13673) +At time : 31.001 ns Reaction : e_aq^-1 (-3509) + °OH^0 (-5902) -> OH^-1 (-13674) +At time : 32.001 ns Reaction : OH^-1 (-13500) + H3O^1 (-7237) -> No product +At time : 32.001 ns Reaction : OH^-1 (-13397) + H3O^1 (-8572) -> No product +At time : 32.001 ns Reaction : OH^-1 (-13320) + H3O^1 (-7287) -> No product +At time : 32.001 ns Reaction : H3O^1 (-7225) + OH^-1 (-13104) -> No product +At time : 32.001 ns Reaction : OH^-1 (-12978) + H3O^1 (-8015) -> No product +At time : 32.001 ns Reaction : e_aq^-1 (-5061) + H2O2^0 (-12966) -> OH^-1 (-13675) + °OH^0 (-13676) +At time : 32.001 ns Reaction : e_aq^-1 (-308) + H^0 (-12535) -> OH^-1 (-13677) + H_2^0 (-13678) +At time : 32.001 ns Reaction : °OH^0 (-11243) + H^0 (-10455) -> No product +At time : 32.001 ns Reaction : H3O^1 (-10337) + e_aq^-1 (-5444) -> H^0 (-13679) +At time : 33.001 ns Reaction : H3O^1 (-11026) + OH^-1 (-13473) -> No product +At time : 33.001 ns Reaction : OH^-1 (-13181) + H3O^1 (-7601) -> No product +At time : 33.001 ns Reaction : H2O2^0 (-11732) + e_aq^-1 (-5296) -> OH^-1 (-13680) + °OH^0 (-13681) +At time : 33.001 ns Reaction : H2O2^0 (-11451) + e_aq^-1 (-8618) -> OH^-1 (-13682) + °OH^0 (-13683) +At time : 33.001 ns Reaction : °OH^0 (-10090) + e_aq^-1 (-4538) -> OH^-1 (-13684) +At time : 33.001 ns Reaction : e_aq^-1 (-1966) + H3O^1 (-7729) -> H^0 (-13685) +At time : 34.001 ns Reaction : OH^-1 (-13650) + H3O^1 (-7361) -> No product +At time : 34.001 ns Reaction : OH^-1 (-13601) + H3O^1 (-7891) -> No product +At time : 34.001 ns Reaction : OH^-1 (-13344) + H3O^1 (-8335) -> No product +At time : 34.001 ns Reaction : e_aq^-1 (-4244) + H^0 (-13128) -> OH^-1 (-13686) + H_2^0 (-13687) +At time : 34.001 ns Reaction : OH^-1 (-12814) + H3O^1 (-9112) -> No product +At time : 34.001 ns Reaction : °OH^0 (-10327) + °OH^0 (-12723) -> H2O2^0 (-13688) +At time : 34.001 ns Reaction : e_aq^-1 (-673) + H2O2^0 (-12626) -> OH^-1 (-13689) + °OH^0 (-13690) +At time : 34.001 ns Reaction : e_aq^-1 (-5402) + H2O2^0 (-12295) -> OH^-1 (-13691) + °OH^0 (-13692) +At time : 34.001 ns Reaction : e_aq^-1 (-2561) + °OH^0 (-11276) -> OH^-1 (-13693) +At time : 34.001 ns Reaction : °OH^0 (-10410) + °OH^0 (-8482) -> H2O2^0 (-13694) +At time : 34.001 ns Reaction : °OH^0 (-9691) + e_aq^-1 (-3747) -> OH^-1 (-13695) +At time : 34.001 ns Reaction : °OH^0 (-8811) + °OH^0 (-9086) -> H2O2^0 (-13696) +At time : 34.001 ns Reaction : e_aq^-1 (-743) + H3O^1 (-8339) -> H^0 (-13697) +At time : 34.001 ns Reaction : e_aq^-1 (-1801) + H3O^1 (-6955) -> H^0 (-13698) +At time : 34.001 ns Reaction : e_aq^-1 (-4109) + °OH^0 (-6808) -> OH^-1 (-13699) +At time : 34.001 ns Reaction : e_aq^-1 (-3095) + H3O^1 (-6327) -> H^0 (-13700) +At time : 35.001 ns Reaction : e_aq^-1 (-5642) + H2O2^0 (-13694) -> OH^-1 (-13701) + °OH^0 (-13702) +At time : 35.001 ns Reaction : H3O^1 (-6865) + OH^-1 (-13686) -> No product +At time : 35.001 ns Reaction : e_aq^-1 (-1286) + H2O2^0 (-13658) -> OH^-1 (-13703) + °OH^0 (-13704) +At time : 35.001 ns Reaction : OH^-1 (-13454) + H3O^1 (-8698) -> No product +At time : 35.001 ns Reaction : e_aq^-1 (-558) + °OH^0 (-13228) -> OH^-1 (-13705) +At time : 35.001 ns Reaction : e_aq^-1 (-649) + H^0 (-13074) -> OH^-1 (-13706) + H_2^0 (-13707) +At time : 35.001 ns Reaction : OH^-1 (-12923) + H3O^1 (-7923) -> No product +At time : 35.001 ns Reaction : °OH^0 (-12405) + °OH^0 (-8114) -> H2O2^0 (-13708) +At time : 35.001 ns Reaction : e_aq^-1 (-4577) + H2O2^0 (-11650) -> OH^-1 (-13709) + °OH^0 (-13710) +At time : 35.001 ns Reaction : °OH^0 (-9705) + e_aq^-1 (-3771) -> OH^-1 (-13711) +At time : 35.001 ns Reaction : °OH^0 (-9634) + e_aq^-1 (-3583) -> OH^-1 (-13712) +At time : 35.001 ns Reaction : e_aq^-1 (-699) + H3O^1 (-9076) -> H^0 (-13713) +At time : 35.001 ns Reaction : e_aq^-1 (-2497) + H3O^1 (-8569) -> H^0 (-13714) +At time : 35.001 ns Reaction : °OH^0 (-7202) + °OH^0 (-7212) -> H2O2^0 (-13715) +At time : 35.001 ns Reaction : OH^-1 (-13703) + H3O^1 (-7043) -> No product +At time : 36.001 ns Reaction : OH^-1 (-13680) + H3O^1 (-7503) -> No product +At time : 36.001 ns Reaction : e_aq^-1 (-5070) + H2O2^0 (-12618) -> OH^-1 (-13716) + °OH^0 (-13717) +At time : 36.001 ns Reaction : °OH^0 (-6002) + H^0 (-12438) -> No product +At time : 36.001 ns Reaction : e_aq^-1 (-191) + H^0 (-12257) -> OH^-1 (-13718) + H_2^0 (-13719) +At time : 36.001 ns Reaction : H^0 (-11265) + °OH^0 (-9552) -> No product +At time : 36.001 ns Reaction : H3O^1 (-9666) + e_aq^-1 (-3672) -> H^0 (-13720) +At time : 36.001 ns Reaction : H^0 (-9480) + °OH^0 (-6156) -> No product +At time : 36.001 ns Reaction : °OH^0 (-9360) + °OH^0 (-5842) -> H2O2^0 (-13721) +At time : 36.001 ns Reaction : H3O^1 (-9353) + e_aq^-1 (-3743) -> H^0 (-13722) +At time : 36.001 ns Reaction : °OH^0 (-8332) + °OH^0 (-9075) -> H2O2^0 (-13723) +At time : 36.001 ns Reaction : e_aq^-1 (-702) + H3O^1 (-8279) -> H^0 (-13724) +At time : 37.001 ns Reaction : OH^-1 (-13699) + H3O^1 (-6769) -> No product +At time : 37.001 ns Reaction : OH^-1 (-13665) + H3O^1 (-6857) -> No product +At time : 37.001 ns Reaction : e_aq^-1 (-1997) + H^0 (-13368) -> OH^-1 (-13725) + H_2^0 (-13726) +At time : 37.001 ns Reaction : H^0 (-13023) + °OH^0 (-5894) -> No product +At time : 37.001 ns Reaction : e_aq^-1 (-1060) + H2O2^0 (-12685) -> OH^-1 (-13727) + °OH^0 (-13728) +At time : 37.001 ns Reaction : e_aq^-1 (-4262) + H2O2^0 (-12289) -> OH^-1 (-13729) + °OH^0 (-13730) +At time : 37.001 ns Reaction : e_aq^-1 (-1465) + H2O2^0 (-11990) -> OH^-1 (-13731) + °OH^0 (-13732) +At time : 37.001 ns Reaction : e_aq^-1 (-4305) + H2O2^0 (-11930) -> OH^-1 (-13733) + °OH^0 (-13734) +At time : 37.001 ns Reaction : e_aq^-1 (-244) + H3O^1 (-10299) -> H^0 (-13735) +At time : 38.001 ns Reaction : H3O^1 (-6117) + OH^-1 (-13677) -> No product +At time : 38.001 ns Reaction : H^0 (-13670) + e_aq^-1 (-4583) -> OH^-1 (-13736) + H_2^0 (-13737) +At time : 38.001 ns Reaction : OH^-1 (-13532) + H3O^1 (-8770) -> No product +At time : 38.001 ns Reaction : OH^-1 (-13429) + H3O^1 (-7801) -> No product +At time : 38.001 ns Reaction : e_aq^-1 (-2817) + H2O2^0 (-13030) -> OH^-1 (-13738) + °OH^0 (-13739) +At time : 38.001 ns Reaction : H2O2^0 (-12278) + e_aq^-1 (-8552) -> OH^-1 (-13740) + °OH^0 (-13741) +At time : 38.001 ns Reaction : e_aq^-1 (-4568) + H2O2^0 (-11594) -> OH^-1 (-13742) + °OH^0 (-13743) +At time : 38.001 ns Reaction : H3O^1 (-11379) + e_aq^-1 (-4891) -> H^0 (-13744) +At time : 38.001 ns Reaction : °OH^0 (-6734) + °OH^0 (-9196) -> H2O2^0 (-13745) +At time : 38.001 ns Reaction : e_aq^-1 (-5468) + H3O^1 (-8767) -> H^0 (-13746) +At time : 38.001 ns Reaction : e_aq^-1 (-4777) + H3O^1 (-8233) -> H^0 (-13747) +At time : 38.001 ns Reaction : e_aq^-1 (-4169) + °OH^0 (-8042) -> OH^-1 (-13748) +At time : 39.001 ns Reaction : °OH^0 (-13704) + e_aq^-1 (-4640) -> OH^-1 (-13749) +At time : 39.001 ns Reaction : OH^-1 (-13634) + H3O^1 (-6155) -> No product +At time : 39.001 ns Reaction : H^0 (-13502) + °OH^0 (-9003) -> No product +At time : 39.001 ns Reaction : e_aq^-1 (-5129) + H2O2^0 (-13217) -> OH^-1 (-13750) + °OH^0 (-13751) +At time : 39.001 ns Reaction : e_aq^-1 (-4057) + H2O2^0 (-12078) -> OH^-1 (-13752) + °OH^0 (-13753) +At time : 39.001 ns Reaction : H^0 (-10671) + e_aq^-1 (-2689) -> OH^-1 (-13754) + H_2^0 (-13755) +At time : 39.001 ns Reaction : e_aq^-1 (-2576) + °OH^0 (-6596) -> OH^-1 (-13756) +At time : 39.001 ns Reaction : e_aq^-1 (-3524) + °OH^0 (-6274) -> OH^-1 (-13757) +At time : 40.001 ns Reaction : °OH^0 (-13622) + °OH^0 (-8912) -> H2O2^0 (-13758) +At time : 40.001 ns Reaction : H^0 (-9653) + °OH^0 (-13404) -> No product +At time : 40.001 ns Reaction : H3O^1 (-11205) + OH^-1 (-13362) -> No product +At time : 40.001 ns Reaction : e_aq^-1 (-4364) + H2O2^0 (-12534) -> OH^-1 (-13759) + °OH^0 (-13760) +At time : 40.001 ns Reaction : e_aq^-1 (-5031) + H^0 (-12173) -> OH^-1 (-13761) + H_2^0 (-13762) +At time : 40.001 ns Reaction : e_aq^-1 (-4988) + H2O2^0 (-11858) -> OH^-1 (-13763) + °OH^0 (-13764) +At time : 40.001 ns Reaction : e_aq^-1 (-5568) + H2O2^0 (-11738) -> OH^-1 (-13765) + °OH^0 (-13766) +At time : 40.001 ns Reaction : e_aq^-1 (-4175) + H2O2^0 (-11608) -> OH^-1 (-13767) + °OH^0 (-13768) +At time : 40.001 ns Reaction : °OH^0 (-10591) + °OH^0 (-9035) -> H2O2^0 (-13769) +At time : 40.001 ns Reaction : H3O^1 (-10309) + e_aq^-1 (-5050) -> H^0 (-13770) +At time : 40.001 ns Reaction : °OH^0 (-6966) + °OH^0 (-9015) -> H2O2^0 (-13771) +At time : 40.001 ns Reaction : °OH^0 (-6444) + °OH^0 (-7888) -> H2O2^0 (-13772) +At time : 40.001 ns Reaction : e_aq^-1 (-3560) + °OH^0 (-7820) -> OH^-1 (-13773) +At time : 40.001 ns Reaction : e_aq^-1 (-3541) + H3O^1 (-7807) -> H^0 (-13774) +At time : 40.001 ns Reaction : e_aq^-1 (-2859) + H3O^1 (-6483) -> H^0 (-13775) +At time : 40.001 ns Reaction : e_aq^-1 (-3615) + H3O^1 (-6373) -> H^0 (-13776) +At time : 41.001 ns Reaction : e_aq^-1 (-4980) + °OH^0 (-13751) -> OH^-1 (-13777) +At time : 41.001 ns Reaction : e_aq^-1 (-4466) + °OH^0 (-13668) -> OH^-1 (-13778) +At time : 41.001 ns Reaction : °OH^0 (-13593) + e_aq^-1 (-4228) -> OH^-1 (-13779) +At time : 41.001 ns Reaction : H3O^1 (-6485) + OH^-1 (-13488) -> No product +At time : 41.001 ns Reaction : OH^-1 (-13476) + H3O^1 (-6601) -> No product +At time : 41.001 ns Reaction : OH^-1 (-13475) + H3O^1 (-9109) -> No product +At time : 41.001 ns Reaction : H^0 (-13351) + e_aq^-1 (-4319) -> OH^-1 (-13780) + H_2^0 (-13781) +At time : 41.001 ns Reaction : OH^-1 (-13225) + H3O^1 (-10534) -> No product +At time : 41.001 ns Reaction : e_aq^-1 (-1320) + °OH^0 (-13121) -> OH^-1 (-13782) +At time : 41.001 ns Reaction : e_aq^-1 (-5505) + H2O2^0 (-11813) -> OH^-1 (-13783) + °OH^0 (-13784) +At time : 41.001 ns Reaction : °OH^0 (-9405) + °OH^0 (-8973) -> H2O2^0 (-13785) +At time : 41.001 ns Reaction : e_aq^-1 (-4141) + H3O^1 (-6847) -> H^0 (-13786) +At time : 41.001 ns Reaction : e_aq^-1 (-4477) + e_aq^-1 (-4485) -> OH^-1 (-13787) + OH^-1 (-13788) + H_2^0 (-13789) +At time : 41.001 ns Reaction : OH^-1 (-13748) + H3O^1 (-5999) -> No product +At time : 41.001 ns Reaction : e_aq^-1 (-668) + °OH^0 (-13717) -> OH^-1 (-13790) +At time : 42.001 ns Reaction : OH^-1 (-13749) + H3O^1 (-8211) -> No product +At time : 42.001 ns Reaction : H3O^1 (-8239) + OH^-1 (-13471) -> No product +At time : 42.001 ns Reaction : H3O^1 (-8494) + OH^-1 (-13298) -> No product +At time : 42.001 ns Reaction : e_aq^-1 (-905) + °OH^0 (-13180) -> OH^-1 (-13791) +At time : 42.001 ns Reaction : e_aq^-1 (-5349) + H^0 (-12866) -> OH^-1 (-13792) + H_2^0 (-13793) +At time : 42.001 ns Reaction : H^0 (-11404) + °OH^0 (-7478) -> No product +At time : 42.001 ns Reaction : H3O^1 (-11242) + e_aq^-1 (-5584) -> H^0 (-13794) +At time : 42.001 ns Reaction : °OH^0 (-11080) + °OH^0 (-7104) -> H2O2^0 (-13795) +At time : 42.001 ns Reaction : °OH^0 (-5930) + H^0 (-9173) -> No product +At time : 42.001 ns Reaction : e_aq^-1 (-4190) + H3O^1 (-7705) -> H^0 (-13796) +At time : 43.001 ns Reaction : H^0 (-13794) + e_aq^-1 (-5420) -> OH^-1 (-13797) + H_2^0 (-13798) +At time : 43.001 ns Reaction : H3O^1 (-11232) + OH^-1 (-13783) -> No product +At time : 43.001 ns Reaction : e_aq^-1 (-4708) + °OH^0 (-13728) -> OH^-1 (-13799) +At time : 43.001 ns Reaction : OH^-1 (-13623) + H3O^1 (-8075) -> No product +At time : 43.001 ns Reaction : e_aq^-1 (-4196) + H^0 (-13489) -> OH^-1 (-13800) + H_2^0 (-13801) +At time : 43.001 ns Reaction : H3O^1 (-7829) + OH^-1 (-13405) -> No product +At time : 43.001 ns Reaction : H3O^1 (-8095) + OH^-1 (-13379) -> No product +At time : 43.001 ns Reaction : H^0 (-10582) + °OH^0 (-13370) -> No product +At time : 43.001 ns Reaction : H2O2^0 (-13137) + e_aq^-1 (-2887) -> OH^-1 (-13802) + °OH^0 (-13803) +At time : 43.001 ns Reaction : H3O^1 (-6319) + OH^-1 (-12624) -> No product +At time : 43.001 ns Reaction : e_aq^-1 (-5373) + H^0 (-12360) -> OH^-1 (-13804) + H_2^0 (-13805) +At time : 43.001 ns Reaction : e_aq^-1 (-3973) + H2O2^0 (-12120) -> OH^-1 (-13806) + °OH^0 (-13807) +At time : 43.001 ns Reaction : e_aq^-1 (-2609) + H2O2^0 (-11472) -> OH^-1 (-13808) + °OH^0 (-13809) +At time : 43.001 ns Reaction : °OH^0 (-11122) + °OH^0 (-8296) -> H2O2^0 (-13810) +At time : 43.001 ns Reaction : °OH^0 (-10399) + °OH^0 (-6146) -> H2O2^0 (-13811) +At time : 43.001 ns Reaction : e_aq^-1 (-793) + H3O^1 (-8313) -> H^0 (-13812) +At time : 43.001 ns Reaction : e_aq^-1 (-4831) + H3O^1 (-7149) -> H^0 (-13813) +At time : 44.001 ns Reaction : e_aq^-1 (-3705) + °OH^0 (-13803) -> OH^-1 (-13814) +At time : 44.001 ns Reaction : H3O^1 (-9986) + OH^-1 (-13608) -> No product +At time : 44.001 ns Reaction : H3O^1 (-6711) + OH^-1 (-13389) -> No product +At time : 44.001 ns Reaction : H^0 (-13290) + °OH^0 (-6202) -> No product +At time : 44.001 ns Reaction : e_aq^-1 (-4212) + H2O2^0 (-12850) -> OH^-1 (-13815) + °OH^0 (-13816) +At time : 44.001 ns Reaction : e_aq^-1 (-1190) + H2O2^0 (-11822) -> OH^-1 (-13817) + °OH^0 (-13818) +At time : 44.001 ns Reaction : e_aq^-1 (-553) + H3O^1 (-10527) -> H^0 (-13819) +At time : 44.001 ns Reaction : °OH^0 (-9522) + e_aq^-1 (-4294) -> OH^-1 (-13820) +At time : 44.001 ns Reaction : e_aq^-1 (-4267) + H3O^1 (-7717) -> H^0 (-13821) +At time : 44.001 ns Reaction : e_aq^-1 (-1033) + H3O^1 (-7639) -> H^0 (-13822) +At time : 44.001 ns Reaction : e_aq^-1 (-1128) + H3O^1 (-7135) -> H^0 (-13823) +At time : 44.001 ns Reaction : e_aq^-1 (-3584) + °OH^0 (-5920) -> OH^-1 (-13824) +At time : 45.001 ns Reaction : OH^-1 (-13797) + H3O^1 (-8791) -> No product +At time : 45.001 ns Reaction : OH^-1 (-13705) + H3O^1 (-7533) -> No product +At time : 45.001 ns Reaction : OH^-1 (-13633) + H3O^1 (-8959) -> No product +At time : 45.001 ns Reaction : H^0 (-13628) + °OH^0 (-8312) -> No product +At time : 45.001 ns Reaction : H3O^1 (-6517) + OH^-1 (-13484) -> No product +At time : 45.001 ns Reaction : H^0 (-9277) + °OH^0 (-13238) -> No product +At time : 45.001 ns Reaction : OH^-1 (-13176) + H3O^1 (-6203) -> No product +At time : 45.001 ns Reaction : OH^-1 (-13130) + H3O^1 (-10321) -> No product +At time : 45.001 ns Reaction : e_aq^-1 (-5475) + H2O2^0 (-11917) -> OH^-1 (-13825) + °OH^0 (-13826) +At time : 45.001 ns Reaction : e_aq^-1 (-5454) + °OH^0 (-10479) -> OH^-1 (-13827) +At time : 45.001 ns Reaction : e_aq^-1 (-1069) + H3O^1 (-8309) -> H^0 (-13828) +At time : 45.001 ns Reaction : e_aq^-1 (-1762) + H3O^1 (-6029) -> H^0 (-13829) +At time : 46.001 ns Reaction : H3O^1 (-8191) + OH^-1 (-13727) -> No product +At time : 46.001 ns Reaction : e_aq^-1 (-1560) + H2O2^0 (-13529) -> OH^-1 (-13830) + °OH^0 (-13831) +At time : 46.001 ns Reaction : e_aq^-1 (-967) + H^0 (-13277) -> OH^-1 (-13832) + H_2^0 (-13833) +At time : 46.001 ns Reaction : H^0 (-13062) + °OH^0 (-7644) -> No product +At time : 46.001 ns Reaction : e_aq^-1 (-5379) + H3O^1 (-10350) -> H^0 (-13834) +At time : 46.001 ns Reaction : °OH^0 (-9747) + e_aq^-1 (-2650) -> OH^-1 (-13835) +At time : 46.001 ns Reaction : e_aq^-1 (-4669) + H3O^1 (-8189) -> H^0 (-13836) +At time : 46.001 ns Reaction : e_aq^-1 (-5441) + H3O^1 (-7407) -> H^0 (-13837) +At time : 46.001 ns Reaction : e_aq^-1 (-2306) + H3O^1 (-6689) -> H^0 (-13838) +At time : 47.001 ns Reaction : e_aq^-1 (-1000) + H^0 (-13836) -> OH^-1 (-13839) + H_2^0 (-13840) +At time : 47.001 ns Reaction : OH^-1 (-13779) + H3O^1 (-7715) -> No product +At time : 47.001 ns Reaction : e_aq^-1 (-2430) + H^0 (-13714) -> OH^-1 (-13841) + H_2^0 (-13842) +At time : 47.001 ns Reaction : H3O^1 (-7003) + OH^-1 (-13709) -> No product +At time : 47.001 ns Reaction : OH^-1 (-13695) + H3O^1 (-6423) -> No product +At time : 47.001 ns Reaction : e_aq^-1 (-3737) + H2O2^0 (-13561) -> OH^-1 (-13843) + °OH^0 (-13844) +At time : 47.001 ns Reaction : °OH^0 (-13438) + e_aq^-1 (-4462) -> OH^-1 (-13845) +At time : 47.001 ns Reaction : OH^-1 (-13373) + H3O^1 (-7921) -> No product +At time : 47.001 ns Reaction : H3O^1 (-10753) + OH^-1 (-12851) -> No product +At time : 47.001 ns Reaction : OH^-1 (-12467) + H3O^1 (-6825) -> No product +At time : 47.001 ns Reaction : H^0 (-12302) + °OH^0 (-8232) -> No product +At time : 47.001 ns Reaction : H2O2^0 (-11427) + e_aq^-1 (-5591) -> OH^-1 (-13846) + °OH^0 (-13847) +At time : 47.001 ns Reaction : °OH^0 (-10605) + e_aq^-1 (-4435) -> OH^-1 (-13848) +At time : 47.001 ns Reaction : e_aq^-1 (-2395) + °OH^0 (-7986) -> OH^-1 (-13849) +At time : 47.001 ns Reaction : e_aq^-1 (-3718) + H3O^1 (-7917) -> H^0 (-13850) +At time : 47.001 ns Reaction : e_aq^-1 (-2946) + H3O^1 (-6403) -> H^0 (-13851) +At time : 47.001 ns Reaction : e_aq^-1 (-4490) + H3O^1 (-6025) -> H^0 (-13852) +At time : 48.001 ns Reaction : H3O^1 (-6469) + OH^-1 (-13843) -> No product +At time : 48.001 ns Reaction : °OH^0 (-13818) + °OH^0 (-8496) -> H2O2^0 (-13853) +At time : 48.001 ns Reaction : °OH^0 (-8382) + °OH^0 (-13690) -> H2O2^0 (-13854) +At time : 48.001 ns Reaction : H2O2^0 (-13604) + e_aq^-1 (-3295) -> OH^-1 (-13855) + °OH^0 (-13856) +At time : 48.001 ns Reaction : OH^-1 (-13585) + H3O^1 (-10851) -> No product +At time : 48.001 ns Reaction : °OH^0 (-13550) + °OH^0 (-9134) -> H2O2^0 (-13857) +At time : 48.001 ns Reaction : e_aq^-1 (-2631) + H^0 (-12558) -> OH^-1 (-13858) + H_2^0 (-13859) +At time : 48.001 ns Reaction : °OH^0 (-9392) + °OH^0 (-10870) -> H2O2^0 (-13860) +At time : 48.001 ns Reaction : °OH^0 (-10403) + °OH^0 (-7430) -> H2O2^0 (-13861) +At time : 48.001 ns Reaction : H3O^1 (-9697) + e_aq^-1 (-2550) -> H^0 (-13862) +At time : 48.001 ns Reaction : e_aq^-1 (-579) + H^0 (-9259) -> OH^-1 (-13863) + H_2^0 (-13864) +At time : 48.001 ns Reaction : e_aq^-1 (-5039) + °OH^0 (-7590) -> OH^-1 (-13865) +At time : 48.001 ns Reaction : e_aq^-1 (-4796) + H3O^1 (-5867) -> H^0 (-13866) +At time : 49.001 ns Reaction : OH^-1 (-13761) + H3O^1 (-7583) -> No product +At time : 49.001 ns Reaction : OH^-1 (-13752) + H3O^1 (-8031) -> No product +At time : 49.001 ns Reaction : e_aq^-1 (-8657) + °OH^0 (-13666) -> OH^-1 (-13867) +At time : 49.001 ns Reaction : H3O^1 (-6843) + OH^-1 (-13492) -> No product +At time : 49.001 ns Reaction : e_aq^-1 (-756) + °OH^0 (-13347) -> OH^-1 (-13868) +At time : 49.001 ns Reaction : e_aq^-1 (-3847) + H^0 (-13094) -> OH^-1 (-13869) + H_2^0 (-13870) +At time : 49.001 ns Reaction : e_aq^-1 (-508) + H^0 (-12415) -> OH^-1 (-13871) + H_2^0 (-13872) +At time : 49.001 ns Reaction : e_aq^-1 (-2964) + H3O^1 (-7857) -> H^0 (-13873) +At time : 49.001 ns Reaction : OH^-1 (-13558) + H3O^1 (-7901) -> No product +At time : 49.001 ns Reaction : e_aq^-1 (-4690) + °OH^0 (-7646) -> OH^-1 (-13874) +At time : 50.001 ns Reaction : H3O^1 (-11090) + OH^-1 (-13865) -> No product +At time : 50.001 ns Reaction : H3O^1 (-11112) + OH^-1 (-13827) -> No product +At time : 50.001 ns Reaction : e_aq^-1 (-1278) + H2O2^0 (-13555) -> OH^-1 (-13875) + °OH^0 (-13876) +At time : 50.001 ns Reaction : OH^-1 (-13513) + H3O^1 (-6445) -> No product +At time : 50.001 ns Reaction : e_aq^-1 (-5498) + H2O2^0 (-12170) -> OH^-1 (-13877) + °OH^0 (-13878) +At time : 50.001 ns Reaction : e_aq^-1 (-4102) + H2O2^0 (-12006) -> OH^-1 (-13879) + °OH^0 (-13880) +At time : 50.001 ns Reaction : H^0 (-10829) + e_aq^-1 (-4038) -> OH^-1 (-13881) + H_2^0 (-13882) +At time : 50.001 ns Reaction : °OH^0 (-10571) + °OH^0 (-7086) -> H2O2^0 (-13883) +At time : 51.001 ns Reaction : H3O^1 (-10822) + OH^-1 (-13869) -> No product +At time : 51.001 ns Reaction : OH^-1 (-13867) + H3O^1 (-6871) -> No product +At time : 51.001 ns Reaction : OH^-1 (-13824) + H3O^1 (-7823) -> No product +At time : 51.001 ns Reaction : OH^-1 (-13682) + H3O^1 (-7327) -> No product +At time : 51.001 ns Reaction : e_aq^-1 (-4165) + H^0 (-13152) -> OH^-1 (-13884) + H_2^0 (-13885) +At time : 51.001 ns Reaction : °OH^0 (-13066) + e_aq^-1 (-2191) -> OH^-1 (-13886) +At time : 51.001 ns Reaction : e_aq^-1 (-4510) + H^0 (-12640) -> OH^-1 (-13887) + H_2^0 (-13888) +At time : 51.001 ns Reaction : e_aq^-1 (-4743) + H^0 (-12192) -> OH^-1 (-13889) + H_2^0 (-13890) +At time : 51.001 ns Reaction : °OH^0 (-10834) + °OH^0 (-6746) -> H2O2^0 (-13891) +At time : 51.001 ns Reaction : H^0 (-9319) + °OH^0 (-9573) -> No product +At time : 51.001 ns Reaction : °OH^0 (-7502) + °OH^0 (-8428) -> H2O2^0 (-13892) +At time : 52.001 ns Reaction : H3O^1 (-9703) + OH^-1 (-13738) -> No product +At time : 52.001 ns Reaction : OH^-1 (-13596) + H3O^1 (-10820) -> No product +At time : 52.001 ns Reaction : H3O^1 (-7485) + OH^-1 (-13537) -> No product +At time : 52.001 ns Reaction : H3O^1 (-10483) + OH^-1 (-13249) -> No product +At time : 52.001 ns Reaction : e_aq^-1 (-5336) + H2O2^0 (-13124) -> OH^-1 (-13893) + °OH^0 (-13894) +At time : 52.001 ns Reaction : e_aq^-1 (-4396) + H^0 (-13080) -> OH^-1 (-13895) + H_2^0 (-13896) +At time : 52.001 ns Reaction : e_aq^-1 (-4252) + H3O^1 (-9934) -> H^0 (-13897) +At time : 52.001 ns Reaction : e_aq^-1 (-3635) + H3O^1 (-5927) -> H^0 (-13898) +At time : 53.001 ns Reaction : OH^-1 (-13718) + H3O^1 (-8797) -> No product +At time : 53.001 ns Reaction : H3O^1 (-10414) + OH^-1 (-13611) -> No product +At time : 53.001 ns Reaction : H^0 (-13510) + e_aq^-1 (-5255) -> OH^-1 (-13899) + H_2^0 (-13900) +At time : 53.001 ns Reaction : H^0 (-12357) + °OH^0 (-9871) -> No product +At time : 53.001 ns Reaction : H3O^1 (-10967) + e_aq^-1 (-1750) -> H^0 (-13901) +At time : 53.001 ns Reaction : H3O^1 (-10209) + e_aq^-1 (-5075) -> H^0 (-13902) +At time : 54.001 ns Reaction : H3O^1 (-11262) + OH^-1 (-13663) -> No product +At time : 54.001 ns Reaction : OH^-1 (-12596) + H3O^1 (-7431) -> No product +At time : 54.001 ns Reaction : °OH^0 (-11180) + e_aq^-1 (-5227) -> OH^-1 (-13903) +At time : 54.001 ns Reaction : °OH^0 (-11066) + °OH^0 (-7092) -> H2O2^0 (-13904) +At time : 54.001 ns Reaction : H^0 (-9409) + °OH^0 (-9937) -> No product +At time : 54.001 ns Reaction : e_aq^-1 (-4002) + °OH^0 (-9851) -> OH^-1 (-13905) +At time : 54.001 ns Reaction : °OH^0 (-9700) + e_aq^-1 (-3766) -> OH^-1 (-13906) +At time : 54.001 ns Reaction : e_aq^-1 (-5583) + °OH^0 (-7396) -> OH^-1 (-13907) +At time : 54.001 ns Reaction : e_aq^-1 (-5518) + °OH^0 (-7372) -> OH^-1 (-13908) +At time : 55.001 ns Reaction : OH^-1 (-13879) + H3O^1 (-6725) -> No product +At time : 55.001 ns Reaction : °OH^0 (-13876) + e_aq^-1 (-4496) -> OH^-1 (-13909) +At time : 55.001 ns Reaction : e_aq^-1 (-4828) + H^0 (-13724) -> OH^-1 (-13910) + H_2^0 (-13911) +At time : 55.001 ns Reaction : H3O^1 (-7115) + OH^-1 (-13549) -> No product +At time : 55.001 ns Reaction : e_aq^-1 (-689) + °OH^0 (-13417) -> OH^-1 (-13912) +At time : 55.001 ns Reaction : e_aq^-1 (-2908) + H2O2^0 (-12536) -> OH^-1 (-13913) + °OH^0 (-13914) +At time : 55.001 ns Reaction : H^0 (-12463) + °OH^0 (-7762) -> No product +At time : 55.001 ns Reaction : H^0 (-10304) + H^0 (-10443) -> H_2^0 (-13915) +At time : 55.001 ns Reaction : e_aq^-1 (-1729) + H3O^1 (-6927) -> H^0 (-13916) +At time : 56.001 ns Reaction : OH^-1 (-13848) + H3O^1 (-6893) -> No product +At time : 56.001 ns Reaction : OH^-1 (-13763) + H3O^1 (-7561) -> No product +At time : 56.001 ns Reaction : H2O2^0 (-12743) + e_aq^-1 (-4593) -> OH^-1 (-13917) + °OH^0 (-13918) +At time : 56.001 ns Reaction : °OH^0 (-9850) + H^0 (-12310) -> No product +At time : 56.001 ns Reaction : e_aq^-1 (-3768) + H2O2^0 (-11676) -> OH^-1 (-13919) + °OH^0 (-13920) +At time : 56.001 ns Reaction : e_aq^-1 (-4518) + °OH^0 (-10965) -> OH^-1 (-13921) +At time : 56.001 ns Reaction : H^0 (-10451) + °OH^0 (-7466) -> No product +At time : 56.001 ns Reaction : °OH^0 (-7008) + °OH^0 (-7026) -> H2O2^0 (-13922) +At time : 56.001 ns Reaction : e_aq^-1 (-4253) + H3O^1 (-6837) -> H^0 (-13923) +At time : 56.001 ns Reaction : e_aq^-1 (-3710) + °OH^0 (-5838) -> OH^-1 (-13924) +At time : 57.001 ns Reaction : OH^-1 (-13909) + H3O^1 (-7609) -> No product +At time : 57.001 ns Reaction : e_aq^-1 (-4392) + H^0 (-13829) -> OH^-1 (-13925) + H_2^0 (-13926) +At time : 57.001 ns Reaction : e_aq^-1 (-4594) + °OH^0 (-13639) -> OH^-1 (-13927) +At time : 57.001 ns Reaction : e_aq^-1 (-4773) + H^0 (-13314) -> OH^-1 (-13928) + H_2^0 (-13929) +At time : 57.001 ns Reaction : °OH^0 (-8002) + °OH^0 (-13287) -> H2O2^0 (-13930) +At time : 57.001 ns Reaction : H^0 (-12925) + e_aq^-1 (-5163) -> OH^-1 (-13931) + H_2^0 (-13932) +At time : 57.001 ns Reaction : H^0 (-12862) + °OH^0 (-6708) -> No product +At time : 57.001 ns Reaction : e_aq^-1 (-5668) + H^0 (-11874) -> OH^-1 (-13933) + H_2^0 (-13934) +At time : 57.001 ns Reaction : e_aq^-1 (-3886) + H2O2^0 (-11550) -> OH^-1 (-13935) + °OH^0 (-13936) +At time : 57.001 ns Reaction : e_aq^-1 (-4811) + °OH^0 (-8541) -> OH^-1 (-13937) +At time : 57.001 ns Reaction : e_aq^-1 (-2379) + H3O^1 (-6695) -> H^0 (-13938) +At time : 58.001 ns Reaction : e_aq^-1 (-392) + H2O2^0 (-13696) -> OH^-1 (-13939) + °OH^0 (-13940) +At time : 58.001 ns Reaction : H^0 (-12891) + H^0 (-10543) -> H_2^0 (-13941) +At time : 58.001 ns Reaction : e_aq^-1 (-3795) + H^0 (-12709) -> OH^-1 (-13942) + H_2^0 (-13943) +At time : 58.001 ns Reaction : e_aq^-1 (-3849) + H2O2^0 (-12427) -> OH^-1 (-13944) + °OH^0 (-13945) +At time : 58.001 ns Reaction : H^0 (-10001) + H^0 (-12344) -> H_2^0 (-13946) +At time : 58.001 ns Reaction : e_aq^-1 (-2624) + H2O2^0 (-11913) -> OH^-1 (-13947) + °OH^0 (-13948) +At time : 58.001 ns Reaction : e_aq^-1 (-4353) + °OH^0 (-11291) -> OH^-1 (-13949) +At time : 58.001 ns Reaction : °OH^0 (-9953) + °OH^0 (-8040) -> H2O2^0 (-13950) +At time : 58.001 ns Reaction : e_aq^-1 (-896) + H^0 (-9452) -> OH^-1 (-13951) + H_2^0 (-13952) +At time : 58.001 ns Reaction : e_aq^-1 (-4136) + H3O^1 (-8033) -> H^0 (-13953) +At time : 59.001 ns Reaction : OH^-1 (-13868) + H3O^1 (-8311) -> No product +At time : 59.001 ns Reaction : e_aq^-1 (-3513) + H2O2^0 (-13641) -> OH^-1 (-13954) + °OH^0 (-13955) +At time : 59.001 ns Reaction : H^0 (-13308) + e_aq^-1 (-5052) -> OH^-1 (-13956) + H_2^0 (-13957) +At time : 59.001 ns Reaction : e_aq^-1 (-2132) + H2O2^0 (-13206) -> OH^-1 (-13958) + °OH^0 (-13959) +At time : 59.001 ns Reaction : e_aq^-1 (-4671) + H^0 (-12430) -> OH^-1 (-13960) + H_2^0 (-13961) +At time : 59.001 ns Reaction : °OH^0 (-10140) + °OH^0 (-7636) -> H2O2^0 (-13962) +At time : 59.001 ns Reaction : H^0 (-9551) + °OH^0 (-5822) -> No product +At time : 59.001 ns Reaction : °OH^0 (-6702) + H^0 (-9155) -> No product +At time : 59.001 ns Reaction : e_aq^-1 (-3649) + °OH^0 (-8895) -> OH^-1 (-13963) +At time : 59.001 ns Reaction : e_aq^-1 (-625) + H3O^1 (-8566) -> H^0 (-13964) +At time : 59.001 ns Reaction : e_aq^-1 (-4805) + H3O^1 (-7109) -> H^0 (-13965) +At time : 60.001 ns Reaction : OH^-1 (-13777) + H3O^1 (-8249) -> No product +At time : 60.001 ns Reaction : e_aq^-1 (-5657) + °OH^0 (-13766) -> OH^-1 (-13966) +At time : 60.001 ns Reaction : °OH^0 (-7364) + °OH^0 (-13664) -> H2O2^0 (-13967) +At time : 60.001 ns Reaction : OH^-1 (-13547) + H3O^1 (-6499) -> No product +At time : 60.001 ns Reaction : e_aq^-1 (-5378) + H2O2^0 (-13214) -> OH^-1 (-13968) + °OH^0 (-13969) +At time : 60.001 ns Reaction : H3O^1 (-11043) + OH^-1 (-13135) -> No product +At time : 60.001 ns Reaction : H^0 (-12126) + H^0 (-11959) -> H_2^0 (-13970) +At time : 60.001 ns Reaction : H2O2^0 (-11447) + e_aq^-1 (-4336) -> OH^-1 (-13971) + °OH^0 (-13972) +At time : 60.001 ns Reaction : H^0 (-9407) + e_aq^-1 (-1788) -> OH^-1 (-13973) + H_2^0 (-13974) +At time : 60.001 ns Reaction : OH^-1 (-13966) + H3O^1 (-8423) -> No product +At time : 61.001 ns Reaction : OH^-1 (-13817) + H3O^1 (-7121) -> No product +At time : 61.001 ns Reaction : OH^-1 (-13667) + H3O^1 (-8103) -> No product +At time : 61.001 ns Reaction : OH^-1 (-12223) + H3O^1 (-8878) -> No product +At time : 61.001 ns Reaction : H2O2^0 (-11524) + e_aq^-1 (-3479) -> OH^-1 (-13975) + °OH^0 (-13976) +At time : 61.001 ns Reaction : °OH^0 (-9610) + °OH^0 (-6302) -> H2O2^0 (-13977) +At time : 61.001 ns Reaction : e_aq^-1 (-3614) + °OH^0 (-6422) -> OH^-1 (-13978) +At time : 62.001 ns Reaction : °OH^0 (-13880) + e_aq^-1 (-4067) -> OH^-1 (-13979) +At time : 62.001 ns Reaction : °OH^0 (-10630) + °OH^0 (-13816) -> H2O2^0 (-13980) +At time : 62.001 ns Reaction : OH^-1 (-13792) + H3O^1 (-8773) -> No product +At time : 62.001 ns Reaction : °OH^0 (-13440) + e_aq^-1 (-1809) -> OH^-1 (-13981) +At time : 62.001 ns Reaction : e_aq^-1 (-4540) + H2O2^0 (-12205) -> OH^-1 (-13982) + °OH^0 (-13983) +At time : 62.001 ns Reaction : °OH^0 (-10474) + °OH^0 (-7240) -> H2O2^0 (-13984) +At time : 62.001 ns Reaction : e_aq^-1 (-3811) + H3O^1 (-8509) -> H^0 (-13985) +At time : 62.001 ns Reaction : °OH^0 (-7082) + °OH^0 (-8158) -> H2O2^0 (-13986) +At time : 63.001 ns Reaction : H3O^1 (-11153) + OH^-1 (-13893) -> No product +At time : 63.001 ns Reaction : e_aq^-1 (-1548) + H^0 (-13244) -> OH^-1 (-13987) + H_2^0 (-13988) +At time : 63.001 ns Reaction : °OH^0 (-7258) + °OH^0 (-7536) -> H2O2^0 (-13989) +At time : 63.001 ns Reaction : °OH^0 (-7326) + °OH^0 (-7518) -> H2O2^0 (-13990) +At time : 64.001 ns Reaction : OH^-1 (-13905) + H3O^1 (-6729) -> No product +At time : 64.001 ns Reaction : OH^-1 (-13899) + H3O^1 (-7269) -> No product +At time : 64.001 ns Reaction : e_aq^-1 (-5664) + H2O2^0 (-11787) -> OH^-1 (-13991) + °OH^0 (-13992) +At time : 64.001 ns Reaction : H2O2^0 (-11486) + e_aq^-1 (-5252) -> OH^-1 (-13993) + °OH^0 (-13994) +At time : 64.001 ns Reaction : H^0 (-9359) + e_aq^-1 (-2701) -> OH^-1 (-13995) + H_2^0 (-13996) +At time : 64.001 ns Reaction : e_aq^-1 (-485) + H3O^1 (-8375) -> H^0 (-13997) +At time : 64.001 ns Reaction : e_aq^-1 (-3641) + °OH^0 (-6414) -> OH^-1 (-13998) +At time : 65.001 ns Reaction : OH^-1 (-13778) + H3O^1 (-10994) -> No product +At time : 65.001 ns Reaction : OH^-1 (-13551) + H3O^1 (-9604) -> No product +At time : 65.001 ns Reaction : e_aq^-1 (-3554) + H^0 (-12996) -> OH^-1 (-13999) + H_2^0 (-14000) +At time : 65.001 ns Reaction : e_aq^-1 (-4354) + H2O2^0 (-12663) -> OH^-1 (-14001) + °OH^0 (-14002) +At time : 65.001 ns Reaction : H^0 (-12160) + e_aq^-1 (-5181) -> OH^-1 (-14003) + H_2^0 (-14004) +At time : 65.001 ns Reaction : °OH^0 (-7362) + °OH^0 (-7524) -> H2O2^0 (-14005) +At time : 65.001 ns Reaction : e_aq^-1 (-5689) + H3O^1 (-7419) -> H^0 (-14006) +At time : 65.001 ns Reaction : e_aq^-1 (-2905) + e_aq^-1 (-2961) -> OH^-1 (-14007) + OH^-1 (-14008) + H_2^0 (-14009) +At time : 66.001 ns Reaction : OH^-1 (-13855) + H3O^1 (-7783) -> No product +At time : 66.001 ns Reaction : e_aq^-1 (-2865) + H2O2^0 (-13772) -> OH^-1 (-14010) + °OH^0 (-14011) +At time : 66.001 ns Reaction : e_aq^-1 (-830) + H2O2^0 (-13412) -> OH^-1 (-14012) + °OH^0 (-14013) +At time : 66.001 ns Reaction : H^0 (-13245) + °OH^0 (-8008) -> No product +At time : 66.001 ns Reaction : e_aq^-1 (-4558) + H2O2^0 (-11750) -> OH^-1 (-14014) + °OH^0 (-14015) +At time : 66.001 ns Reaction : °OH^0 (-9875) + °OH^0 (-6826) -> H2O2^0 (-14016) +At time : 66.001 ns Reaction : e_aq^-1 (-4657) + H3O^1 (-7649) -> H^0 (-14017) +At time : 66.001 ns Reaction : e_aq^-1 (-5709) + °OH^0 (-9105) -> OH^-1 (-14018) +At time : 67.001 ns Reaction : OH^-1 (-14010) + H3O^1 (-6363) -> No product +At time : 67.001 ns Reaction : °OH^0 (-6532) + H^0 (-13985) -> No product +At time : 67.001 ns Reaction : H3O^1 (-8635) + OH^-1 (-13951) -> No product +At time : 67.001 ns Reaction : OH^-1 (-13908) + H3O^1 (-7405) -> No product +At time : 67.001 ns Reaction : °OH^0 (-9373) + H^0 (-13413) -> No product +At time : 67.001 ns Reaction : H3O^1 (-10769) + OH^-1 (-13395) -> No product +At time : 67.001 ns Reaction : °OH^0 (-6316) + H^0 (-13342) -> No product +At time : 67.001 ns Reaction : °OH^0 (-11973) + e_aq^-1 (-5105) -> OH^-1 (-14019) +At time : 67.001 ns Reaction : e_aq^-1 (-2286) + °OH^0 (-10872) -> OH^-1 (-14020) +At time : 67.001 ns Reaction : e_aq^-1 (-972) + H3O^1 (-10144) -> H^0 (-14021) +At time : 67.001 ns Reaction : H3O^1 (-9699) + e_aq^-1 (-2687) -> H^0 (-14022) +At time : 67.001 ns Reaction : °OH^0 (-9597) + H^0 (-9582) -> No product +At time : 68.001 ns Reaction : OH^-1 (-14014) + H3O^1 (-7671) -> No product +At time : 68.001 ns Reaction : OH^-1 (-13881) + H3O^1 (-6719) -> No product +At time : 68.001 ns Reaction : H3O^1 (-6085) + OH^-1 (-13871) -> No product +At time : 68.001 ns Reaction : H3O^1 (-10389) + OH^-1 (-13701) -> No product +At time : 68.001 ns Reaction : e_aq^-1 (-2798) + H2O2^0 (-12135) -> OH^-1 (-14023) + °OH^0 (-14024) +At time : 68.001 ns Reaction : H2O2^0 (-11616) + e_aq^-1 (-2674) -> OH^-1 (-14025) + °OH^0 (-14026) +At time : 68.001 ns Reaction : e_aq^-1 (-2271) + H2O2^0 (-11575) -> OH^-1 (-14027) + °OH^0 (-14028) +At time : 68.001 ns Reaction : e_aq^-1 (-3534) + H2O2^0 (-11474) -> OH^-1 (-14029) + °OH^0 (-14030) +At time : 68.001 ns Reaction : H3O^1 (-10973) + e_aq^-1 (-4340) -> H^0 (-14031) +At time : 69.001 ns Reaction : H3O^1 (-10778) + OH^-1 (-14025) -> No product +At time : 69.001 ns Reaction : OH^-1 (-13944) + H3O^1 (-6637) -> No product +At time : 69.001 ns Reaction : OH^-1 (-13808) + H3O^1 (-5973) -> No product +At time : 69.001 ns Reaction : e_aq^-1 (-4614) + H^0 (-13313) -> OH^-1 (-14032) + H_2^0 (-14033) +At time : 69.001 ns Reaction : e_aq^-1 (-3051) + H2O2^0 (-13157) -> OH^-1 (-14034) + °OH^0 (-14035) +At time : 69.001 ns Reaction : OH^-1 (-13006) + H3O^1 (-8353) -> No product +At time : 69.001 ns Reaction : e_aq^-1 (-2421) + H^0 (-12929) -> OH^-1 (-14036) + H_2^0 (-14037) +At time : 69.001 ns Reaction : e_aq^-1 (-1726) + H2O2^0 (-12000) -> OH^-1 (-14038) + °OH^0 (-14039) +At time : 69.001 ns Reaction : e_aq^-1 (-4112) + H2O2^0 (-11423) -> OH^-1 (-14040) + °OH^0 (-14041) +At time : 69.001 ns Reaction : °OH^0 (-9808) + °OH^0 (-6648) -> H2O2^0 (-14042) +At time : 69.001 ns Reaction : e_aq^-1 (-4555) + °OH^0 (-7654) -> OH^-1 (-14043) +At time : 69.001 ns Reaction : °OH^0 (-6378) + °OH^0 (-6412) -> H2O2^0 (-14044) +At time : 70.001 ns Reaction : e_aq^-1 (-5623) + H2O2^0 (-12460) -> OH^-1 (-14045) + °OH^0 (-14046) +At time : 71.001 ns Reaction : e_aq^-1 (-5324) + H2O2^0 (-13892) -> OH^-1 (-14047) + °OH^0 (-14048) +At time : 71.001 ns Reaction : H^0 (-13685) + H^0 (-9894) -> H_2^0 (-14049) +At time : 71.001 ns Reaction : OH^-1 (-13565) + H3O^1 (-8369) -> No product +At time : 71.001 ns Reaction : OH^-1 (-12903) + H3O^1 (-8255) -> No product +At time : 71.001 ns Reaction : °OH^0 (-12887) + e_aq^-1 (-5596) -> OH^-1 (-14050) +At time : 71.001 ns Reaction : e_aq^-1 (-938) + H2O2^0 (-12072) -> OH^-1 (-14051) + °OH^0 (-14052) +At time : 71.001 ns Reaction : e_aq^-1 (-2647) + H^0 (-9189) -> OH^-1 (-14053) + H_2^0 (-14054) +At time : 72.001 ns Reaction : OH^-1 (-13361) + H3O^1 (-8227) -> No product +At time : 72.001 ns Reaction : H^0 (-13252) + °OH^0 (-9238) -> No product +At time : 72.001 ns Reaction : e_aq^-1 (-4450) + H^0 (-10976) -> OH^-1 (-14055) + H_2^0 (-14056) +At time : 72.001 ns Reaction : e_aq^-1 (-4173) + °OH^0 (-10875) -> OH^-1 (-14057) +At time : 72.001 ns Reaction : °OH^0 (-7032) + °OH^0 (-8126) -> H2O2^0 (-14058) +At time : 72.001 ns Reaction : e_aq^-1 (-4621) + °OH^0 (-7660) -> OH^-1 (-14059) +At time : 72.001 ns Reaction : °OH^0 (-7114) + °OH^0 (-7132) -> H2O2^0 (-14060) +At time : 72.001 ns Reaction : e_aq^-1 (-2021) + H3O^1 (-6835) -> H^0 (-14061) +At time : 73.001 ns Reaction : OH^-1 (-13846) + H3O^1 (-6147) -> No product +At time : 73.001 ns Reaction : H3O^1 (-10780) + OH^-1 (-13756) -> No product +At time : 73.001 ns Reaction : e_aq^-1 (-4936) + °OH^0 (-13472) -> OH^-1 (-14062) +At time : 73.001 ns Reaction : OH^-1 (-12992) + H3O^1 (-7927) -> No product +At time : 73.001 ns Reaction : OH^-1 (-12727) + H3O^1 (-7611) -> No product +At time : 73.001 ns Reaction : H^0 (-12719) + e_aq^-1 (-3807) -> OH^-1 (-14063) + H_2^0 (-14064) +At time : 73.001 ns Reaction : e_aq^-1 (-4251) + H^0 (-12487) -> OH^-1 (-14065) + H_2^0 (-14066) +At time : 73.001 ns Reaction : °OH^0 (-10856) + e_aq^-1 (-4220) -> OH^-1 (-14067) +At time : 73.001 ns Reaction : °OH^0 (-10322) + °OH^0 (-8324) -> H2O2^0 (-14068) +At time : 73.001 ns Reaction : °OH^0 (-10030) + °OH^0 (-6060) -> H2O2^0 (-14069) +At time : 73.001 ns Reaction : H^0 (-9784) + e_aq^-1 (-2387) -> OH^-1 (-14070) + H_2^0 (-14071) +At time : 74.001 ns Reaction : OH^-1 (-14065) + H3O^1 (-8061) -> No product +At time : 74.001 ns Reaction : H^0 (-12620) + H^0 (-13813) -> H_2^0 (-14072) +At time : 74.001 ns Reaction : H^0 (-12211) + °OH^0 (-6942) -> No product +At time : 74.001 ns Reaction : e_aq^-1 (-1064) + H3O^1 (-8251) -> H^0 (-14073) +At time : 75.001 ns Reaction : H3O^1 (-7673) + OH^-1 (-13921) -> No product +At time : 75.001 ns Reaction : °OH^0 (-7956) + °OH^0 (-13581) -> H2O2^0 (-14074) +At time : 75.001 ns Reaction : H^0 (-13240) + °OH^0 (-13421) -> No product +At time : 75.001 ns Reaction : °OH^0 (-11214) + H^0 (-10457) -> No product +At time : 75.001 ns Reaction : °OH^0 (-10843) + °OH^0 (-7742) -> H2O2^0 (-14075) +At time : 75.001 ns Reaction : H3O^1 (-10812) + e_aq^-1 (-3869) -> H^0 (-14076) +At time : 75.001 ns Reaction : °OH^0 (-10569) + e_aq^-1 (-1266) -> OH^-1 (-14077) +At time : 75.001 ns Reaction : H^0 (-9749) + e_aq^-1 (-2589) -> OH^-1 (-14078) + H_2^0 (-14079) +At time : 75.001 ns Reaction : e_aq^-1 (-2606) + °OH^0 (-6658) -> OH^-1 (-14080) +At time : 76.001 ns Reaction : OH^-1 (-13928) + H3O^1 (-8201) -> No product +At time : 76.001 ns Reaction : OH^-1 (-13919) + H3O^1 (-6535) -> No product +At time : 76.001 ns Reaction : OH^-1 (-13627) + H3O^1 (-7585) -> No product +At time : 76.001 ns Reaction : e_aq^-1 (-5217) + H2O2^0 (-13563) -> OH^-1 (-14081) + °OH^0 (-14082) +At time : 76.001 ns Reaction : OH^-1 (-13012) + H3O^1 (-8686) -> No product +At time : 76.001 ns Reaction : °OH^0 (-10722) + e_aq^-1 (-3571) -> OH^-1 (-14083) +At time : 76.001 ns Reaction : H^0 (-10033) + °OH^0 (-5749) -> No product +At time : 76.001 ns Reaction : e_aq^-1 (-5045) + H3O^1 (-8267) -> H^0 (-14084) +At time : 77.001 ns Reaction : °OH^0 (-13784) + e_aq^-1 (-9074) -> OH^-1 (-14085) +At time : 77.001 ns Reaction : °OH^0 (-13743) + H^0 (-13143) -> No product +At time : 77.001 ns Reaction : °OH^0 (-9639) + H^0 (-13594) -> No product +At time : 77.001 ns Reaction : OH^-1 (-13588) + H3O^1 (-6379) -> No product +At time : 77.001 ns Reaction : OH^-1 (-13334) + H3O^1 (-10004) -> No product +At time : 77.001 ns Reaction : H3O^1 (-6293) + OH^-1 (-12421) -> No product +At time : 77.001 ns Reaction : e_aq^-1 (-3836) + H3O^1 (-6563) -> H^0 (-14086) +At time : 78.001 ns Reaction : OH^-1 (-13790) + H3O^1 (-7341) -> No product +At time : 78.001 ns Reaction : OH^-1 (-13750) + H3O^1 (-7131) -> No product +At time : 78.001 ns Reaction : e_aq^-1 (-2696) + H2O2^0 (-13586) -> OH^-1 (-14087) + °OH^0 (-14088) +At time : 78.001 ns Reaction : H^0 (-13079) + °OH^0 (-5868) -> No product +At time : 78.001 ns Reaction : e_aq^-1 (-2159) + °OH^0 (-10850) -> OH^-1 (-14089) +At time : 78.001 ns Reaction : H3O^1 (-10800) + e_aq^-1 (-2444) -> H^0 (-14090) +At time : 78.001 ns Reaction : e_aq^-1 (-4465) + H3O^1 (-7029) -> H^0 (-14091) +At time : 79.001 ns Reaction : e_aq^-1 (-3658) + H^0 (-13657) -> OH^-1 (-14092) + H_2^0 (-14093) +At time : 79.001 ns Reaction : e_aq^-1 (-656) + H2O2^0 (-13083) -> OH^-1 (-14094) + °OH^0 (-14095) +At time : 79.001 ns Reaction : OH^-1 (-12986) + H3O^1 (-6749) -> No product +At time : 79.001 ns Reaction : e_aq^-1 (-3684) + H2O2^0 (-12101) -> OH^-1 (-14096) + °OH^0 (-14097) +At time : 80.001 ns Reaction : OH^-1 (-13998) + H3O^1 (-5835) -> No product +At time : 80.001 ns Reaction : H3O^1 (-7249) + OH^-1 (-13931) -> No product +At time : 80.001 ns Reaction : OH^-1 (-13269) + H3O^1 (-8001) -> No product +At time : 80.001 ns Reaction : °OH^0 (-10285) + e_aq^-1 (-5102) -> OH^-1 (-14098) +At time : 80.001 ns Reaction : e_aq^-1 (-2635) + H3O^1 (-7915) -> H^0 (-14099) +At time : 81.001 ns Reaction : H3O^1 (-11004) + OH^-1 (-13874) -> No product +At time : 81.001 ns Reaction : OH^-1 (-13498) + H3O^1 (-8650) -> No product +At time : 81.001 ns Reaction : OH^-1 (-13189) + H3O^1 (-8071) -> No product +At time : 81.001 ns Reaction : H2O2^0 (-11784) + e_aq^-1 (-3851) -> OH^-1 (-14100) + °OH^0 (-14101) +At time : 81.001 ns Reaction : H^0 (-9619) + H^0 (-9578) -> H_2^0 (-14102) +At time : 81.001 ns Reaction : e_aq^-1 (-4781) + °OH^0 (-8646) -> OH^-1 (-14103) +At time : 81.001 ns Reaction : e_aq^-1 (-5098) + °OH^0 (-8340) -> OH^-1 (-14104) +At time : 82.001 ns Reaction : OH^-1 (-13925) + H3O^1 (-8590) -> No product +At time : 82.001 ns Reaction : e_aq^-1 (-134) + H2O2^0 (-12746) -> OH^-1 (-14105) + °OH^0 (-14106) +At time : 82.001 ns Reaction : e_aq^-1 (-644) + H2O2^0 (-12164) -> OH^-1 (-14107) + °OH^0 (-14108) +At time : 83.001 ns Reaction : H3O^1 (-6733) + OH^-1 (-14089) -> No product +At time : 83.001 ns Reaction : OH^-1 (-13800) + H3O^1 (-8851) -> No product +At time : 83.001 ns Reaction : e_aq^-1 (-1198) + H2O2^0 (-13771) -> OH^-1 (-14109) + °OH^0 (-14110) +At time : 83.001 ns Reaction : OH^-1 (-13647) + H3O^1 (-6613) -> No product +At time : 83.001 ns Reaction : e_aq^-1 (-4488) + H3O^1 (-8830) -> H^0 (-14111) +At time : 83.001 ns Reaction : e_aq^-1 (-471) + e_aq^-1 (-593) -> OH^-1 (-14112) + OH^-1 (-14113) + H_2^0 (-14114) +At time : 84.001 ns Reaction : H^0 (-14021) + e_aq^-1 (-1299) -> OH^-1 (-14115) + H_2^0 (-14116) +At time : 84.001 ns Reaction : H3O^1 (-7731) + OH^-1 (-13958) -> No product +At time : 84.001 ns Reaction : H3O^1 (-7009) + OH^-1 (-13465) -> No product +At time : 84.001 ns Reaction : H3O^1 (-7477) + OH^-1 (-13321) -> No product +At time : 85.001 ns Reaction : OH^-1 (-14094) + H3O^1 (-8285) -> No product +At time : 85.001 ns Reaction : e_aq^-1 (-5233) + H^0 (-12270) -> OH^-1 (-14117) + H_2^0 (-14118) +At time : 85.001 ns Reaction : H^0 (-12269) + H^0 (-11311) -> H_2^0 (-14119) +At time : 85.001 ns Reaction : H3O^1 (-10562) + e_aq^-1 (-4740) -> H^0 (-14120) +At time : 86.001 ns Reaction : °OH^0 (-14039) + e_aq^-1 (-1794) -> OH^-1 (-14121) +At time : 86.001 ns Reaction : OH^-1 (-14012) + H3O^1 (-7573) -> No product +At time : 86.001 ns Reaction : H3O^1 (-11101) + OH^-1 (-13910) -> No product +At time : 86.001 ns Reaction : H3O^1 (-9803) + OH^-1 (-13620) -> No product +At time : 86.001 ns Reaction : e_aq^-1 (-2064) + H2O2^0 (-13410) -> OH^-1 (-14122) + °OH^0 (-14123) +At time : 86.001 ns Reaction : H^0 (-13192) + °OH^0 (-13380) -> No product +At time : 86.001 ns Reaction : e_aq^-1 (-861) + H^0 (-12515) -> OH^-1 (-14124) + H_2^0 (-14125) +At time : 86.001 ns Reaction : °OH^0 (-10106) + H^0 (-12296) -> No product +At time : 86.001 ns Reaction : H^0 (-9842) + e_aq^-1 (-2288) -> OH^-1 (-14126) + H_2^0 (-14127) +At time : 86.001 ns Reaction : e_aq^-1 (-1229) + H3O^1 (-8125) -> H^0 (-14128) +At time : 86.001 ns Reaction : e_aq^-1 (-4097) + H3O^1 (-6793) -> H^0 (-14129) +At time : 86.001 ns Reaction : e_aq^-1 (-4588) + H3O^1 (-6055) -> H^0 (-14130) +At time : 87.001 ns Reaction : OH^-1 (-14034) + H3O^1 (-6349) -> No product +At time : 87.001 ns Reaction : OH^-1 (-13887) + H3O^1 (-8153) -> No product +At time : 87.001 ns Reaction : H^0 (-12660) + °OH^0 (-8982) -> No product +At time : 87.001 ns Reaction : e_aq^-1 (-784) + H2O2^0 (-11555) -> OH^-1 (-14131) + °OH^0 (-14132) +At time : 87.001 ns Reaction : °OH^0 (-10481) + °OH^0 (-7456) -> H2O2^0 (-14133) +At time : 87.001 ns Reaction : °OH^0 (-6250) + °OH^0 (-7812) -> H2O2^0 (-14134) +At time : 87.001 ns Reaction : e_aq^-1 (-3692) + H3O^1 (-5957) -> H^0 (-14135) +At time : 87.001 ns Reaction : e_aq^-1 (-190) + e_aq^-1 (-5578) -> OH^-1 (-14136) + OH^-1 (-14137) + H_2^0 (-14138) +At time : 88.001 ns Reaction : OH^-1 (-14032) + H3O^1 (-6983) -> No product +At time : 88.001 ns Reaction : °OH^0 (-6528) + H^0 (-13451) -> No product +At time : 88.001 ns Reaction : H^0 (-10795) + e_aq^-1 (-3804) -> OH^-1 (-14139) + H_2^0 (-14140) +At time : 88.001 ns Reaction : H^0 (-10683) + °OH^0 (-10703) -> No product +At time : 88.001 ns Reaction : °OH^0 (-10245) + e_aq^-1 (-8627) -> OH^-1 (-14141) +At time : 88.001 ns Reaction : e_aq^-1 (-4061) + H3O^1 (-6809) -> H^0 (-14142) +At time : 89.001 ns Reaction : OH^-1 (-14122) + H3O^1 (-10881) -> No product +At time : 89.001 ns Reaction : e_aq^-1 (-507) + °OH^0 (-14082) -> OH^-1 (-14143) +At time : 89.001 ns Reaction : °OH^0 (-9687) + H^0 (-14022) -> No product +At time : 89.001 ns Reaction : OH^-1 (-13636) + H3O^1 (-7071) -> No product +At time : 89.001 ns Reaction : OH^-1 (-13433) + H3O^1 (-6273) -> No product +At time : 89.001 ns Reaction : H^0 (-12795) + °OH^0 (-7988) -> No product +At time : 89.001 ns Reaction : e_aq^-1 (-3963) + H2O2^0 (-12182) -> OH^-1 (-14144) + °OH^0 (-14145) +At time : 89.001 ns Reaction : e_aq^-1 (-3014) + °OH^0 (-6428) -> OH^-1 (-14146) +At time : 90.001 ns Reaction : H3O^1 (-11396) + OH^-1 (-13804) -> No product +At time : 90.001 ns Reaction : e_aq^-1 (-292) + °OH^0 (-13497) -> OH^-1 (-14147) +At time : 90.001 ns Reaction : e_aq^-1 (-5125) + H^0 (-13295) -> OH^-1 (-14148) + H_2^0 (-14149) +At time : 90.001 ns Reaction : H^0 (-11859) + °OH^0 (-8925) -> No product +At time : 90.001 ns Reaction : °OH^0 (-10992) + e_aq^-1 (-1393) -> OH^-1 (-14150) +At time : 90.001 ns Reaction : e_aq^-1 (-5418) + °OH^0 (-8487) -> OH^-1 (-14151) +At time : 91.001 ns Reaction : °OH^0 (-14002) + e_aq^-1 (-4282) -> OH^-1 (-14152) +At time : 91.001 ns Reaction : e_aq^-1 (-4968) + °OH^0 (-13501) -> OH^-1 (-14153) +At time : 91.001 ns Reaction : H^0 (-10441) + e_aq^-1 (-5585) -> OH^-1 (-14154) + H_2^0 (-14155) +At time : 92.001 ns Reaction : OH^-1 (-14141) + H3O^1 (-6181) -> No product +At time : 92.001 ns Reaction : e_aq^-1 (-5020) + H^0 (-13964) -> OH^-1 (-14156) + H_2^0 (-14157) +At time : 92.001 ns Reaction : °OH^0 (-7090) + H^0 (-13605) -> No product +At time : 92.001 ns Reaction : e_aq^-1 (-4544) + H^0 (-13199) -> OH^-1 (-14158) + H_2^0 (-14159) +At time : 92.001 ns Reaction : °OH^0 (-11382) + °OH^0 (-13103) -> H2O2^0 (-14160) +At time : 92.001 ns Reaction : °OH^0 (-10885) + °OH^0 (-10889) -> H2O2^0 (-14161) +At time : 92.001 ns Reaction : °OH^0 (-9821) + °OH^0 (-8922) -> H2O2^0 (-14162) +At time : 92.001 ns Reaction : °OH^0 (-9369) + e_aq^-1 (-2743) -> OH^-1 (-14163) +At time : 92.001 ns Reaction : e_aq^-1 (-3610) + e_aq^-1 (-3580) -> OH^-1 (-14164) + OH^-1 (-14165) + H_2^0 (-14166) +At time : 92.001 ns Reaction : e_aq^-1 (-4652) + e_aq^-1 (-4515) -> OH^-1 (-14167) + OH^-1 (-14168) + H_2^0 (-14169) +At time : 93.001 ns Reaction : OH^-1 (-14077) + H3O^1 (-7627) -> No product +At time : 93.001 ns Reaction : H3O^1 (-10276) + OH^-1 (-13051) -> No product +At time : 93.001 ns Reaction : H^0 (-10908) + °OH^0 (-6932) -> No product +At time : 93.001 ns Reaction : e_aq^-1 (-5440) + H3O^1 (-8373) -> H^0 (-14170) +At time : 93.001 ns Reaction : e_aq^-1 (-3996) + H3O^1 (-7719) -> H^0 (-14171) +At time : 94.001 ns Reaction : OH^-1 (-14168) + H3O^1 (-7039) -> No product +At time : 94.001 ns Reaction : H3O^1 (-8283) + OH^-1 (-13832) -> No product +At time : 94.001 ns Reaction : e_aq^-1 (-375) + H3O^1 (-6197) -> H^0 (-14172) +At time : 95.001 ns Reaction : e_aq^-1 (-3706) + H^0 (-13850) -> OH^-1 (-14173) + H_2^0 (-14174) +At time : 95.001 ns Reaction : H2O2^0 (-12208) + e_aq^-1 (-2299) -> OH^-1 (-14175) + °OH^0 (-14176) +At time : 95.001 ns Reaction : e_aq^-1 (-542) + °OH^0 (-10476) -> OH^-1 (-14177) +At time : 95.001 ns Reaction : H^0 (-9299) + e_aq^-1 (-3321) -> OH^-1 (-14178) + H_2^0 (-14179) +At time : 95.001 ns Reaction : e_aq^-1 (-5405) + H3O^1 (-9097) -> H^0 (-14180) +At time : 96.001 ns Reaction : OH^-1 (-14177) + H3O^1 (-7331) -> No product +At time : 96.001 ns Reaction : °OH^0 (-6818) + °OH^0 (-14123) -> H2O2^0 (-14181) +At time : 96.001 ns Reaction : e_aq^-1 (-143) + H2O2^0 (-13112) -> OH^-1 (-14182) + °OH^0 (-14183) +At time : 96.001 ns Reaction : e_aq^-1 (-5390) + H2O2^0 (-11958) -> OH^-1 (-14184) + °OH^0 (-14185) +At time : 96.001 ns Reaction : e_aq^-1 (-5326) + H3O^1 (-8453) -> H^0 (-14186) +At time : 96.001 ns Reaction : e_aq^-1 (-2377) + H3O^1 (-8029) -> H^0 (-14187) +At time : 97.001 ns Reaction : OH^-1 (-14158) + H3O^1 (-8085) -> No product +At time : 97.001 ns Reaction : OH^-1 (-14081) + H3O^1 (-8357) -> No product +At time : 97.001 ns Reaction : °OH^0 (-13969) + e_aq^-1 (-5448) -> OH^-1 (-14188) +At time : 97.001 ns Reaction : H3O^1 (-6077) + OH^-1 (-13875) -> No product +At time : 97.001 ns Reaction : e_aq^-1 (-5170) + °OH^0 (-13764) -> OH^-1 (-14189) +At time : 97.001 ns Reaction : e_aq^-1 (-3920) + H2O2^0 (-13758) -> OH^-1 (-14190) + °OH^0 (-14191) +At time : 97.001 ns Reaction : e_aq^-1 (-4123) + H3O^1 (-10935) -> H^0 (-14192) +At time : 98.001 ns Reaction : OH^-1 (-13733) + H3O^1 (-8059) -> No product +At time : 98.001 ns Reaction : H^0 (-9860) + H^0 (-13426) -> H_2^0 (-14193) +At time : 98.001 ns Reaction : OH^-1 (-13235) + H3O^1 (-7833) -> No product +At time : 98.001 ns Reaction : °OH^0 (-9396) + e_aq^-1 (-8963) -> OH^-1 (-14194) +At time : 98.001 ns Reaction : e_aq^-1 (-2294) + °OH^0 (-7968) -> OH^-1 (-14195) +At time : 98.001 ns Reaction : e_aq^-1 (-1241) + H3O^1 (-6063) -> H^0 (-14196) +At time : 99.001 ns Reaction : H^0 (-10069) + °OH^0 (-13019) -> No product +At time : 99.001 ns Reaction : H^0 (-10940) + H^0 (-10037) -> H_2^0 (-14197) +At time : 99.001 ns Reaction : e_aq^-1 (-4967) + H3O^1 (-8259) -> H^0 (-14198) +At time : 100 ns Reaction : OH^-1 (-14051) + H3O^1 (-8632) -> No product +At time : 100 ns Reaction : OH^-1 (-13960) + H3O^1 (-6205) -> No product +At time : 100 ns Reaction : e_aq^-1 (-799) + H^0 (-13823) -> OH^-1 (-14199) + H_2^0 (-14200) +At time : 100 ns Reaction : H^0 (-9743) + °OH^0 (-6474) -> No product +At time : 101 ns Reaction : OH^-1 (-14153) + H3O^1 (-7273) -> No product +At time : 101 ns Reaction : H3O^1 (-11039) + OH^-1 (-14103) -> No product +At time : 101 ns Reaction : OH^-1 (-13982) + H3O^1 (-7661) -> No product +At time : 101 ns Reaction : OH^-1 (-13937) + H3O^1 (-7629) -> No product +At time : 101 ns Reaction : e_aq^-1 (-5026) + H2O2^0 (-12363) -> OH^-1 (-14201) + °OH^0 (-14202) +At time : 101 ns Reaction : H^0 (-11335) + °OH^0 (-11354) -> No product +At time : 101 ns Reaction : H^0 (-10522) + e_aq^-1 (-5073) -> OH^-1 (-14203) + H_2^0 (-14204) +At time : 101 ns Reaction : e_aq^-1 (-2401) + H3O^1 (-6685) -> H^0 (-14205) +At time : 102 ns Reaction : H3O^1 (-8415) + OH^-1 (-13968) -> No product +At time : 102 ns Reaction : e_aq^-1 (-5244) + H2O2^0 (-11653) -> OH^-1 (-14206) + °OH^0 (-14207) +At time : 103 ns Reaction : e_aq^-1 (-559) + H^0 (-13613) -> OH^-1 (-14208) + H_2^0 (-14209) +At time : 103 ns Reaction : H^0 (-13084) + °OH^0 (-7006) -> No product +At time : 103 ns Reaction : e_aq^-1 (-4912) + H2O2^0 (-11857) -> OH^-1 (-14210) + °OH^0 (-14211) +At time : 103 ns Reaction : e_aq^-1 (-5704) + H3O^1 (-8481) -> H^0 (-14212) +At time : 103 ns Reaction : e_aq^-1 (-5097) + °OH^0 (-7570) -> OH^-1 (-14213) +At time : 103 ns Reaction : e_aq^-1 (-1104) + H3O^1 (-7051) -> H^0 (-14214) +At time : 104 ns Reaction : OH^-1 (-13689) + H3O^1 (-7319) -> No product +At time : 104 ns Reaction : H^0 (-12699) + e_aq^-1 (-2989) -> OH^-1 (-14215) + H_2^0 (-14216) +At time : 104 ns Reaction : °OH^0 (-6386) + H^0 (-11670) -> No product +At time : 104 ns Reaction : e_aq^-1 (-3763) + H3O^1 (-7897) -> H^0 (-14217) +At time : 105 ns Reaction : OH^-1 (-14206) + H3O^1 (-7233) -> No product +At time : 105 ns Reaction : e_aq^-1 (-4131) + H2O2^0 (-12913) -> OH^-1 (-14218) + °OH^0 (-14219) +At time : 105 ns Reaction : e_aq^-1 (-3961) + H2O2^0 (-12455) -> OH^-1 (-14220) + °OH^0 (-14221) +At time : 105 ns Reaction : °OH^0 (-9993) + e_aq^-1 (-1778) -> OH^-1 (-14222) +At time : 105 ns Reaction : e_aq^-1 (-3865) + H3O^1 (-7967) -> H^0 (-14223) +At time : 106 ns Reaction : OH^-1 (-14139) + H3O^1 (-6547) -> No product +At time : 106 ns Reaction : OH^-1 (-14115) + H3O^1 (-10041) -> No product +At time : 106 ns Reaction : OH^-1 (-13675) + H3O^1 (-7213) -> No product +At time : 106 ns Reaction : °OH^0 (-13223) + °OH^0 (-7402) -> H2O2^0 (-14224) +At time : 106 ns Reaction : e_aq^-1 (-5297) + °OH^0 (-13116) -> OH^-1 (-14225) +At time : 106 ns Reaction : H^0 (-10906) + °OH^0 (-6006) -> No product +At time : 106 ns Reaction : °OH^0 (-9450) + e_aq^-1 (-4842) -> OH^-1 (-14226) +At time : 107 ns Reaction : OH^-1 (-14137) + H3O^1 (-7353) -> No product +At time : 107 ns Reaction : OH^-1 (-13576) + H3O^1 (-6839) -> No product +At time : 107 ns Reaction : e_aq^-1 (-5592) + H2O2^0 (-12321) -> OH^-1 (-14227) + °OH^0 (-14228) +At time : 107 ns Reaction : °OH^0 (-10358) + H^0 (-9491) -> No product +At time : 107 ns Reaction : e_aq^-1 (-4197) + H3O^1 (-8956) -> H^0 (-14229) +At time : 107 ns Reaction : e_aq^-1 (-1405) + H3O^1 (-8057) -> H^0 (-14230) +At time : 107 ns Reaction : e_aq^-1 (-3773) + e_aq^-1 (-3787) -> OH^-1 (-14231) + OH^-1 (-14232) + H_2^0 (-14233) +At time : 108 ns Reaction : OH^-1 (-13956) + H3O^1 (-7541) -> No product +At time : 108 ns Reaction : OH^-1 (-13845) + H3O^1 (-7035) -> No product +At time : 108 ns Reaction : H3O^1 (-10270) + OH^-1 (-13572) -> No product +At time : 108 ns Reaction : °OH^0 (-6026) + °OH^0 (-8062) -> H2O2^0 (-14234) +At time : 109 ns Reaction : °OH^0 (-13992) + H^0 (-13296) -> No product +At time : 109 ns Reaction : H^0 (-13504) + °OH^0 (-8468) -> No product +At time : 109 ns Reaction : H^0 (-9854) + °OH^0 (-7748) -> No product +At time : 109 ns Reaction : °OH^0 (-9343) + e_aq^-1 (-3726) -> OH^-1 (-14235) +At time : 109 ns Reaction : e_aq^-1 (-4859) + °OH^0 (-6084) -> OH^-1 (-14236) +At time : 110 ns Reaction : °OH^0 (-6982) + H^0 (-14130) -> No product +At time : 110 ns Reaction : H^0 (-13862) + e_aq^-1 (-2517) -> OH^-1 (-14237) + H_2^0 (-14238) +At time : 110 ns Reaction : °OH^0 (-10781) + H^0 (-13722) -> No product +At time : 110 ns Reaction : H3O^1 (-7789) + OH^-1 (-12628) -> No product +At time : 110 ns Reaction : H^0 (-10715) + °OH^0 (-6268) -> No product +At time : 110 ns Reaction : e_aq^-1 (-5680) + °OH^0 (-7458) -> OH^-1 (-14239) +At time : 111 ns Reaction : OH^-1 (-14226) + H3O^1 (-7257) -> No product +At time : 111 ns Reaction : OH^-1 (-14040) + H3O^1 (-5989) -> No product +At time : 111 ns Reaction : e_aq^-1 (-4688) + H^0 (-13822) -> OH^-1 (-14240) + H_2^0 (-14241) +At time : 111 ns Reaction : e_aq^-1 (-12) + H^0 (-13746) -> OH^-1 (-14242) + H_2^0 (-14243) +At time : 111 ns Reaction : OH^-1 (-13459) + H3O^1 (-8728) -> No product +At time : 111 ns Reaction : H^0 (-9611) + e_aq^-1 (-3532) -> OH^-1 (-14244) + H_2^0 (-14245) +At time : 112 ns Reaction : OH^-1 (-14036) + H3O^1 (-6709) -> No product +At time : 112 ns Reaction : °OH^0 (-13105) + °OH^0 (-8320) -> H2O2^0 (-14246) +At time : 112 ns Reaction : e_aq^-1 (-2679) + H^0 (-9755) -> OH^-1 (-14247) + H_2^0 (-14248) +At time : 112 ns Reaction : e_aq^-1 (-1259) + H3O^1 (-9001) -> H^0 (-14249) +At time : 112 ns Reaction : e_aq^-1 (-1945) + H3O^1 (-8053) -> H^0 (-14250) +At time : 113 ns Reaction : H2O2^0 (-14161) + e_aq^-1 (-4328) -> OH^-1 (-14251) + °OH^0 (-14252) +At time : 113 ns Reaction : H^0 (-14091) + °OH^0 (-8124) -> No product +At time : 113 ns Reaction : H^0 (-13819) + °OH^0 (-7208) -> No product +At time : 113 ns Reaction : H^0 (-10326) + H^0 (-10204) -> H_2^0 (-14253) +At time : 113 ns Reaction : e_aq^-1 (-4056) + °OH^0 (-8661) -> OH^-1 (-14254) +At time : 114 ns Reaction : e_aq^-1 (-5264) + H2O2^0 (-13643) -> OH^-1 (-14255) + °OH^0 (-14256) +At time : 114 ns Reaction : H2O2^0 (-13587) + e_aq^-1 (-3452) -> OH^-1 (-14257) + °OH^0 (-14258) +At time : 114 ns Reaction : H^0 (-12897) + °OH^0 (-9051) -> No product +At time : 114 ns Reaction : H2O2^0 (-11629) + e_aq^-1 (-4512) -> OH^-1 (-14259) + °OH^0 (-14260) +At time : 114 ns Reaction : H^0 (-10956) + e_aq^-1 (-4505) -> OH^-1 (-14261) + H_2^0 (-14262) +At time : 114 ns Reaction : e_aq^-1 (-4654) + °OH^0 (-9018) -> OH^-1 (-14263) +At time : 114 ns Reaction : °OH^0 (-6878) + °OH^0 (-7702) -> H2O2^0 (-14264) +At time : 115 ns Reaction : °OH^0 (-14228) + e_aq^-1 (-5533) -> OH^-1 (-14265) +At time : 115 ns Reaction : H^0 (-9523) + °OH^0 (-13972) -> No product +At time : 115 ns Reaction : H3O^1 (-6987) + OH^-1 (-13787) -> No product +At time : 115 ns Reaction : e_aq^-1 (-4380) + H2O2^0 (-11532) -> OH^-1 (-14266) + °OH^0 (-14267) +At time : 115 ns Reaction : H^0 (-9706) + °OH^0 (-5950) -> No product +At time : 115 ns Reaction : °OH^0 (-7822) + H^0 (-9165) -> No product +At time : 115 ns Reaction : e_aq^-1 (-1919) + H3O^1 (-6797) -> H^0 (-14268) +At time : 115 ns Reaction : e_aq^-1 (-3861) + H3O^1 (-6655) -> H^0 (-14269) +At time : 116 ns Reaction : OH^-1 (-13979) + H3O^1 (-6767) -> No product +At time : 116 ns Reaction : H3O^1 (-6781) + OH^-1 (-13884) -> No product +At time : 116 ns Reaction : H^0 (-13852) + °OH^0 (-12857) -> No product +At time : 116 ns Reaction : H^0 (-13589) + e_aq^-1 (-2952) -> OH^-1 (-14270) + H_2^0 (-14271) +At time : 116 ns Reaction : e_aq^-1 (-2148) + H2O2^0 (-11727) -> OH^-1 (-14272) + °OH^0 (-14273) +At time : 117 ns Reaction : °OH^0 (-14219) + °OH^0 (-6786) -> H2O2^0 (-14274) +At time : 117 ns Reaction : e_aq^-1 (-3651) + H2O2^0 (-13058) -> OH^-1 (-14275) + °OH^0 (-14276) +At time : 117 ns Reaction : e_aq^-1 (-3568) + H^0 (-12414) -> OH^-1 (-14277) + H_2^0 (-14278) +At time : 118 ns Reaction : OH^-1 (-14222) + H3O^1 (-8530) -> No product +At time : 118 ns Reaction : e_aq^-1 (-2825) + H2O2^0 (-11473) -> OH^-1 (-14279) + °OH^0 (-14280) +At time : 118 ns Reaction : e_aq^-1 (-1168) + H^0 (-9239) -> OH^-1 (-14281) + H_2^0 (-14282) +At time : 118 ns Reaction : e_aq^-1 (-2112) + H^0 (-9151) -> OH^-1 (-14283) + H_2^0 (-14284) +At time : 118 ns Reaction : e_aq^-1 (-3546) + H3O^1 (-7831) -> H^0 (-14285) +At time : 119 ns Reaction : OH^-1 (-14272) + H3O^1 (-8962) -> No product +At time : 119 ns Reaction : OH^-1 (-14057) + H3O^1 (-6851) -> No product +At time : 119 ns Reaction : e_aq^-1 (-4865) + H2O2^0 (-11600) -> OH^-1 (-14286) + °OH^0 (-14287) +At time : 120 ns Reaction : OH^-1 (-13806) + H3O^1 (-5995) -> No product +At time : 120 ns Reaction : H3O^1 (-11136) + OH^-1 (-13564) -> No product +At time : 120 ns Reaction : e_aq^-1 (-2314) + H^0 (-13559) -> OH^-1 (-14288) + H_2^0 (-14289) +At time : 120 ns Reaction : e_aq^-1 (-3460) + H2O2^0 (-12768) -> OH^-1 (-14290) + °OH^0 (-14291) +At time : 120 ns Reaction : e_aq^-1 (-2487) + °OH^0 (-9190) -> OH^-1 (-14292) +At time : 120 ns Reaction : °OH^0 (-7214) + e_aq^-1 (-9050) -> OH^-1 (-14293) +At time : 121 ns Reaction : OH^-1 (-14027) + H3O^1 (-7989) -> No product +At time : 121 ns Reaction : °OH^0 (-13570) + °OH^0 (-5752) -> H2O2^0 (-14294) +At time : 121 ns Reaction : °OH^0 (-13479) + H^0 (-12424) -> No product +At time : 121 ns Reaction : H^0 (-11139) + H^0 (-12617) -> H_2^0 (-14295) +At time : 121 ns Reaction : e_aq^-1 (-4010) + H^0 (-9852) -> OH^-1 (-14296) + H_2^0 (-14297) +At time : 121 ns Reaction : e_aq^-1 (-5156) + H3O^1 (-7239) -> H^0 (-14298) +At time : 122 ns Reaction : e_aq^-1 (-284) + H^0 (-14186) -> OH^-1 (-14299) + H_2^0 (-14300) +At time : 122 ns Reaction : OH^-1 (-14182) + H3O^1 (-7415) -> No product +At time : 122 ns Reaction : OH^-1 (-13927) + H3O^1 (-7127) -> No product +At time : 122 ns Reaction : OH^-1 (-13740) + H3O^1 (-7569) -> No product +At time : 122 ns Reaction : H2O2^0 (-12387) + e_aq^-1 (-2914) -> OH^-1 (-14301) + °OH^0 (-14302) +At time : 122 ns Reaction : e_aq^-1 (-4286) + H2O2^0 (-11462) -> OH^-1 (-14303) + °OH^0 (-14304) +At time : 122 ns Reaction : H3O^1 (-10911) + e_aq^-1 (-4501) -> H^0 (-14305) +At time : 122 ns Reaction : °OH^0 (-10302) + e_aq^-1 (-5280) -> OH^-1 (-14306) +At time : 123 ns Reaction : H3O^1 (-6067) + OH^-1 (-14240) -> No product +At time : 123 ns Reaction : e_aq^-1 (-624) + H2O2^0 (-11519) -> OH^-1 (-14307) + °OH^0 (-14308) +At time : 123 ns Reaction : H^0 (-10797) + °OH^0 (-8898) -> No product +At time : 123 ns Reaction : H^0 (-10420) + °OH^0 (-10440) -> No product +At time : 124 ns Reaction : °OH^0 (-14097) + e_aq^-1 (-2761) -> OH^-1 (-14309) +At time : 124 ns Reaction : H3O^1 (-9662) + OH^-1 (-13519) -> No product +At time : 124 ns Reaction : H3O^1 (-7251) + OH^-1 (-13416) -> No product +At time : 124 ns Reaction : °OH^0 (-12836) + H^0 (-11329) -> No product +At time : 124 ns Reaction : °OH^0 (-11380) + °OH^0 (-11025) -> H2O2^0 (-14310) +At time : 124 ns Reaction : e_aq^-1 (-4729) + e_aq^-1 (-4802) -> OH^-1 (-14311) + OH^-1 (-14312) + H_2^0 (-14313) +At time : 125 ns Reaction : OH^-1 (-14263) + H3O^1 (-9037) -> No product +At time : 125 ns Reaction : e_aq^-1 (-3714) + H^0 (-14135) -> OH^-1 (-14314) + H_2^0 (-14315) +At time : 125 ns Reaction : e_aq^-1 (-4575) + H2O2^0 (-13042) -> OH^-1 (-14316) + °OH^0 (-14317) +At time : 125 ns Reaction : e_aq^-1 (-5573) + H2O2^0 (-12085) -> OH^-1 (-14318) + °OH^0 (-14319) +At time : 125 ns Reaction : H^0 (-9333) + e_aq^-1 (-3612) -> OH^-1 (-14320) + H_2^0 (-14321) +At time : 126 ns Reaction : H3O^1 (-6533) + OH^-1 (-14007) -> No product +At time : 126 ns Reaction : e_aq^-1 (-3852) + H2O2^0 (-11569) -> OH^-1 (-14322) + °OH^0 (-14323) +At time : 126 ns Reaction : H^0 (-9295) + °OH^0 (-10680) -> No product +At time : 127 ns Reaction : H3O^1 (-7105) + OH^-1 (-14199) -> No product +At time : 127 ns Reaction : H3O^1 (-6595) + OH^-1 (-14190) -> No product +At time : 127 ns Reaction : H^0 (-13450) + °OH^0 (-12614) -> No product +At time : 127 ns Reaction : H^0 (-9681) + °OH^0 (-6478) -> No product +At time : 128 ns Reaction : OH^-1 (-14112) + H3O^1 (-11213) -> No product +At time : 128 ns Reaction : e_aq^-1 (-633) + H3O^1 (-11081) -> H^0 (-14324) +At time : 128 ns Reaction : e_aq^-1 (-3984) + H3O^1 (-9849) -> H^0 (-14325) +At time : 128 ns Reaction : °OH^0 (-7004) + °OH^0 (-8148) -> H2O2^0 (-14326) +At time : 129 ns Reaction : H3O^1 (-8013) + OH^-1 (-14251) -> No product +At time : 129 ns Reaction : e_aq^-1 (-1109) + H^0 (-14073) -> OH^-1 (-14327) + H_2^0 (-14328) +At time : 129 ns Reaction : e_aq^-1 (-4049) + e_aq^-1 (-4054) -> OH^-1 (-14329) + OH^-1 (-14330) + H_2^0 (-14331) +At time : 130 ns Reaction : e_aq^-1 (-265) + H2O2^0 (-13811) -> OH^-1 (-14332) + °OH^0 (-14333) +At time : 130 ns Reaction : e_aq^-1 (-4940) + °OH^0 (-8240) -> OH^-1 (-14334) +At time : 131 ns Reaction : e_aq^-1 (-810) + H2O2^0 (-13904) -> OH^-1 (-14335) + °OH^0 (-14336) +At time : 131 ns Reaction : e_aq^-1 (-720) + °OH^0 (-13526) -> OH^-1 (-14337) +At time : 131 ns Reaction : e_aq^-1 (-2143) + H2O2^0 (-12225) -> OH^-1 (-14338) + °OH^0 (-14339) +At time : 131 ns Reaction : °OH^0 (-10014) + e_aq^-1 (-4143) -> OH^-1 (-14340) +At time : 131 ns Reaction : °OH^0 (-6272) + °OH^0 (-8880) -> H2O2^0 (-14341) +At time : 131 ns Reaction : e_aq^-1 (-5247) + H3O^1 (-8345) -> H^0 (-14342) +At time : 131 ns Reaction : e_aq^-1 (-4787) + H3O^1 (-8257) -> H^0 (-14343) +At time : 131 ns Reaction : °OH^0 (-7126) + °OH^0 (-8194) -> H2O2^0 (-14344) +At time : 131 ns Reaction : e_aq^-1 (-1542) + °OH^0 (-7024) -> OH^-1 (-14345) +At time : 132 ns Reaction : e_aq^-1 (-4495) + H2O2^0 (-11630) -> OH^-1 (-14346) + °OH^0 (-14347) +At time : 133 ns Reaction : e_aq^-1 (-3682) + H2O2^0 (-13014) -> OH^-1 (-14348) + °OH^0 (-14349) +At time : 133 ns Reaction : H2O2^0 (-11845) + e_aq^-1 (-2875) -> OH^-1 (-14350) + °OH^0 (-14351) +At time : 134 ns Reaction : OH^-1 (-14334) + H3O^1 (-7277) -> No product +At time : 134 ns Reaction : OH^-1 (-13906) + H3O^1 (-5941) -> No product +At time : 134 ns Reaction : H^0 (-13448) + e_aq^-1 (-5647) -> OH^-1 (-14352) + H_2^0 (-14353) +At time : 134 ns Reaction : H^0 (-12343) + e_aq^-1 (-5707) -> OH^-1 (-14354) + H_2^0 (-14355) +At time : 134 ns Reaction : H3O^1 (-11209) + OH^-1 (-12254) -> No product +At time : 134 ns Reaction : e_aq^-1 (-4318) + °OH^0 (-8655) -> OH^-1 (-14356) +At time : 135 ns Reaction : OH^-1 (-14062) + H3O^1 (-8197) -> No product +At time : 135 ns Reaction : OH^-1 (-14003) + H3O^1 (-8363) -> No product +At time : 135 ns Reaction : OH^-1 (-13886) + H3O^1 (-6699) -> No product +At time : 135 ns Reaction : H^0 (-13851) + °OH^0 (-7876) -> No product +At time : 135 ns Reaction : °OH^0 (-10740) + e_aq^-1 (-3599) -> OH^-1 (-14357) +At time : 135 ns Reaction : e_aq^-1 (-5453) + °OH^0 (-10528) -> OH^-1 (-14358) +At time : 136 ns Reaction : OH^-1 (-14247) + H3O^1 (-6643) -> No product +At time : 136 ns Reaction : OH^-1 (-14136) + H3O^1 (-7351) -> No product +At time : 136 ns Reaction : H3O^1 (-6151) + OH^-1 (-14113) -> No product +At time : 136 ns Reaction : H3O^1 (-10842) + OH^-1 (-14020) -> No product +At time : 137 ns Reaction : °OH^0 (-5918) + °OH^0 (-13653) -> H2O2^0 (-14359) +At time : 137 ns Reaction : H^0 (-10705) + °OH^0 (-10708) -> No product +At time : 137 ns Reaction : °OH^0 (-10660) + e_aq^-1 (-2532) -> OH^-1 (-14360) +At time : 137 ns Reaction : H^0 (-9378) + e_aq^-1 (-4085) -> OH^-1 (-14361) + H_2^0 (-14362) +At time : 138 ns Reaction : OH^-1 (-13978) + H3O^1 (-5945) -> No product +At time : 138 ns Reaction : °OH^0 (-7300) + °OH^0 (-12692) -> H2O2^0 (-14363) +At time : 138 ns Reaction : e_aq^-1 (-3476) + H2O2^0 (-12292) -> OH^-1 (-14364) + °OH^0 (-14365) +At time : 138 ns Reaction : e_aq^-1 (-4857) + H2O2^0 (-11625) -> OH^-1 (-14366) + °OH^0 (-14367) +At time : 138 ns Reaction : H^0 (-9454) + °OH^0 (-8430) -> No product +At time : 138 ns Reaction : e_aq^-1 (-4032) + H3O^1 (-8019) -> H^0 (-14368) +At time : 139 ns Reaction : H3O^1 (-11215) + OH^-1 (-14208) -> No product +At time : 139 ns Reaction : e_aq^-1 (-3655) + °OH^0 (-13396) -> OH^-1 (-14369) +At time : 139 ns Reaction : H^0 (-12982) + e_aq^-1 (-4389) -> OH^-1 (-14370) + H_2^0 (-14371) +At time : 140 ns Reaction : °OH^0 (-14308) + °OH^0 (-6096) -> H2O2^0 (-14372) +At time : 140 ns Reaction : H3O^1 (-11177) + OH^-1 (-14293) -> No product +At time : 140 ns Reaction : H^0 (-9876) + °OH^0 (-6668) -> No product +At time : 140 ns Reaction : e_aq^-1 (-2583) + H3O^1 (-7925) -> H^0 (-14373) +At time : 141 ns Reaction : e_aq^-1 (-5300) + H2O2^0 (-11649) -> OH^-1 (-14374) + °OH^0 (-14375) +At time : 142 ns Reaction : e_aq^-1 (-2925) + °OH^0 (-14349) -> OH^-1 (-14376) +At time : 142 ns Reaction : °OH^0 (-14323) + °OH^0 (-9735) -> H2O2^0 (-14377) +At time : 142 ns Reaction : OH^-1 (-14131) + H3O^1 (-8746) -> No product +At time : 142 ns Reaction : e_aq^-1 (-5088) + H3O^1 (-8401) -> H^0 (-14378) +At time : 143 ns Reaction : e_aq^-1 (-3980) + °OH^0 (-7946) -> OH^-1 (-14379) +At time : 143 ns Reaction : e_aq^-1 (-3727) + °OH^0 (-6536) -> OH^-1 (-14380) +At time : 144 ns Reaction : OH^-1 (-14236) + H3O^1 (-8545) -> No product +At time : 144 ns Reaction : OH^-1 (-13924) + H3O^1 (-6323) -> No product +At time : 144 ns Reaction : OH^-1 (-13212) + H3O^1 (-5895) -> No product +At time : 144 ns Reaction : OH^-1 (-12446) + H3O^1 (-7395) -> No product +At time : 144 ns Reaction : e_aq^-1 (-5034) + H3O^1 (-8235) -> H^0 (-14381) +At time : 144 ns Reaction : e_aq^-1 (-3912) + H3O^1 (-5967) -> H^0 (-14382) +At time : 145 ns Reaction : e_aq^-1 (-5675) + H2O2^0 (-11543) -> OH^-1 (-14383) + °OH^0 (-14384) +At time : 146 ns Reaction : H^0 (-14196) + °OH^0 (-7022) -> No product +At time : 147 ns Reaction : H3O^1 (-7871) + OH^-1 (-14357) -> No product +At time : 147 ns Reaction : OH^-1 (-13791) + H3O^1 (-8275) -> No product +At time : 147 ns Reaction : °OH^0 (-10673) + °OH^0 (-7882) -> H2O2^0 (-14385) +At time : 148 ns Reaction : OH^-1 (-14366) + H3O^1 (-8137) -> No product +At time : 148 ns Reaction : H3O^1 (-6619) + OH^-1 (-14220) -> No product +At time : 148 ns Reaction : H^0 (-12845) + °OH^0 (-7422) -> No product +At time : 148 ns Reaction : e_aq^-1 (-2030) + H3O^1 (-6661) -> H^0 (-14386) +At time : 149 ns Reaction : OH^-1 (-14154) + H3O^1 (-7471) -> No product +At time : 149 ns Reaction : e_aq^-1 (-465) + H2O2^0 (-14068) -> OH^-1 (-14387) + °OH^0 (-14388) +At time : 150 ns Reaction : e_aq^-1 (-4761) + °OH^0 (-9515) -> OH^-1 (-14389) +At time : 151 ns Reaction : OH^-1 (-14201) + H3O^1 (-8593) -> No product +At time : 153 ns Reaction : e_aq^-1 (-915) + H3O^1 (-11055) -> H^0 (-14390) +At time : 153 ns Reaction : H^0 (-10035) + e_aq^-1 (-4638) -> OH^-1 (-14391) + H_2^0 (-14392) +At time : 154 ns Reaction : H2O2^0 (-11545) + e_aq^-1 (-5493) -> OH^-1 (-14393) + °OH^0 (-14394) +At time : 155 ns Reaction : H^0 (-12466) + °OH^0 (-14287) -> No product +At time : 155 ns Reaction : H3O^1 (-10082) + OH^-1 (-14055) -> No product +At time : 155 ns Reaction : °OH^0 (-13495) + °OH^0 (-7244) -> H2O2^0 (-14395) +At time : 155 ns Reaction : e_aq^-1 (-4127) + H^0 (-12696) -> OH^-1 (-14396) + H_2^0 (-14397) +At time : 156 ns Reaction : H3O^1 (-6175) + OH^-1 (-14107) -> No product +At time : 156 ns Reaction : e_aq^-1 (-4408) + H2O2^0 (-11812) -> OH^-1 (-14398) + °OH^0 (-14399) +At time : 156 ns Reaction : e_aq^-1 (-2627) + °OH^0 (-6618) -> OH^-1 (-14400) +At time : 156 ns Reaction : °OH^0 (-5832) + °OH^0 (-6326) -> H2O2^0 (-14401) +At time : 157 ns Reaction : OH^-1 (-14087) + H3O^1 (-7899) -> No product +At time : 157 ns Reaction : °OH^0 (-9929) + H^0 (-9201) -> No product +At time : 157 ns Reaction : e_aq^-1 (-3850) + °OH^0 (-8934) -> OH^-1 (-14402) +At time : 158 ns Reaction : e_aq^-1 (-926) + H2O2^0 (-12042) -> OH^-1 (-14403) + °OH^0 (-14404) +At time : 159 ns Reaction : OH^-1 (-14165) + H3O^1 (-10761) -> No product +At time : 159 ns Reaction : OH^-1 (-14047) + H3O^1 (-6095) -> No product +At time : 159 ns Reaction : e_aq^-1 (-3969) + H^0 (-13838) -> OH^-1 (-14405) + H_2^0 (-14406) +At time : 159 ns Reaction : OH^-1 (-12266) + H3O^1 (-7081) -> No product +At time : 159 ns Reaction : °OH^0 (-10727) + °OH^0 (-6310) -> H2O2^0 (-14407) +At time : 159 ns Reaction : °OH^0 (-9390) + °OH^0 (-6806) -> H2O2^0 (-14408) +At time : 160 ns Reaction : °OH^0 (-12476) + H^0 (-14120) -> No product +At time : 160 ns Reaction : OH^-1 (-13131) + H3O^1 (-9094) -> No product +At time : 160 ns Reaction : H2O2^0 (-12122) + e_aq^-1 (-1764) -> OH^-1 (-14409) + °OH^0 (-14410) +At time : 160 ns Reaction : e_aq^-1 (-4367) + H3O^1 (-10893) -> H^0 (-14411) +At time : 160 ns Reaction : °OH^0 (-9680) + °OH^0 (-5840) -> H2O2^0 (-14412) +At time : 160 ns Reaction : °OH^0 (-9630) + °OH^0 (-6312) -> H2O2^0 (-14413) +At time : 160 ns Reaction : e_aq^-1 (-2015) + H3O^1 (-8045) -> H^0 (-14414) +At time : 161 ns Reaction : H^0 (-14382) + °OH^0 (-8916) -> No product +At time : 161 ns Reaction : °OH^0 (-14185) + e_aq^-1 (-5433) -> OH^-1 (-14415) +At time : 161 ns Reaction : °OH^0 (-10849) + °OH^0 (-7744) -> H2O2^0 (-14416) +At time : 161 ns Reaction : e_aq^-1 (-323) + °OH^0 (-10535) -> OH^-1 (-14417) +At time : 162 ns Reaction : OH^-1 (-13830) + H3O^1 (-8101) -> No product +At time : 163 ns Reaction : e_aq^-1 (-4976) + °OH^0 (-9128) -> OH^-1 (-14418) +At time : 163 ns Reaction : e_aq^-1 (-174) + H3O^1 (-7203) -> H^0 (-14419) +At time : 164 ns Reaction : OH^-1 (-14306) + H3O^1 (-8329) -> No product +At time : 164 ns Reaction : H^0 (-10208) + H^0 (-13770) -> H_2^0 (-14420) +At time : 164 ns Reaction : H^0 (-13697) + °OH^0 (-10254) -> No product +At time : 165 ns Reaction : OH^-1 (-14338) + H3O^1 (-7733) -> No product +At time : 165 ns Reaction : H^0 (-14111) + °OH^0 (-6914) -> No product +At time : 165 ns Reaction : H^0 (-11378) + H^0 (-13747) -> H_2^0 (-14421) +At time : 165 ns Reaction : H2O2^0 (-12783) + e_aq^-1 (-4120) -> OH^-1 (-14422) + °OH^0 (-14423) +At time : 166 ns Reaction : e_aq^-1 (-2453) + H3O^1 (-8854) -> H^0 (-14424) +At time : 167 ns Reaction : °OH^0 (-11397) + °OH^0 (-13056) -> H2O2^0 (-14425) +At time : 168 ns Reaction : H3O^1 (-10657) + OH^-1 (-13711) -> No product +At time : 168 ns Reaction : °OH^0 (-10924) + °OH^0 (-7700) -> H2O2^0 (-14426) +At time : 168 ns Reaction : e_aq^-1 (-5352) + °OH^0 (-8444) -> OH^-1 (-14427) +At time : 169 ns Reaction : e_aq^-1 (-4996) + H2O2^0 (-11548) -> OH^-1 (-14428) + °OH^0 (-14429) +At time : 170 ns Reaction : OH^-1 (-12635) + H3O^1 (-6665) -> No product +At time : 170 ns Reaction : H^0 (-11305) + °OH^0 (-7350) -> No product +At time : 171 ns Reaction : e_aq^-1 (-441) + H^0 (-14324) -> OH^-1 (-14430) + H_2^0 (-14431) +At time : 171 ns Reaction : °OH^0 (-14304) + e_aq^-1 (-2121) -> OH^-1 (-14432) +At time : 171 ns Reaction : OH^-1 (-14225) + H3O^1 (-6149) -> No product +At time : 171 ns Reaction : e_aq^-1 (-4438) + H^0 (-11908) -> OH^-1 (-14433) + H_2^0 (-14434) +At time : 172 ns Reaction : e_aq^-1 (-5473) + °OH^0 (-5725) -> OH^-1 (-14435) +At time : 173 ns Reaction : H^0 (-12793) + °OH^0 (-13612) -> No product +At time : 173 ns Reaction : e_aq^-1 (-2216) + °OH^0 (-10887) -> OH^-1 (-14436) +At time : 173 ns Reaction : e_aq^-1 (-3994) + H3O^1 (-6737) -> H^0 (-14437) +At time : 173 ns Reaction : e_aq^-1 (-3731) + H3O^1 (-5951) -> H^0 (-14438) +At time : 174 ns Reaction : OH^-1 (-13949) + H3O^1 (-5887) -> No product +At time : 174 ns Reaction : e_aq^-1 (-17) + H2O2^0 (-11890) -> OH^-1 (-14439) + °OH^0 (-14440) +At time : 175 ns Reaction : e_aq^-1 (-5253) + H2O2^0 (-14363) -> OH^-1 (-14441) + °OH^0 (-14442) +At time : 175 ns Reaction : H^0 (-13536) + °OH^0 (-6036) -> No product +At time : 175 ns Reaction : e_aq^-1 (-4188) + H2O2^0 (-12552) -> OH^-1 (-14443) + °OH^0 (-14444) +At time : 175 ns Reaction : H^0 (-10648) + °OH^0 (-6774) -> No product +At time : 175 ns Reaction : e_aq^-1 (-491) + H3O^1 (-6129) -> H^0 (-14445) +At time : 176 ns Reaction : OH^-1 (-14163) + H3O^1 (-6539) -> No product +At time : 176 ns Reaction : OH^-1 (-13736) + H3O^1 (-8147) -> No product +At time : 176 ns Reaction : H2O2^0 (-11923) + e_aq^-1 (-2346) -> OH^-1 (-14446) + °OH^0 (-14447) +At time : 177 ns Reaction : e_aq^-1 (-1771) + °OH^0 (-14444) -> OH^-1 (-14448) +At time : 177 ns Reaction : °OH^0 (-13807) + °OH^0 (-6698) -> H2O2^0 (-14449) +At time : 177 ns Reaction : H3O^1 (-10585) + OH^-1 (-13333) -> No product +At time : 177 ns Reaction : H^0 (-13024) + °OH^0 (-13265) -> No product +At time : 177 ns Reaction : e_aq^-1 (-3515) + H3O^1 (-6439) -> H^0 (-14450) +At time : 178 ns Reaction : OH^-1 (-14358) + H3O^1 (-7435) -> No product +At time : 178 ns Reaction : H^0 (-13384) + °OH^0 (-6616) -> No product +At time : 179 ns Reaction : H^0 (-10097) + °OH^0 (-7080) -> No product +At time : 180 ns Reaction : OH^-1 (-14433) + H3O^1 (-6219) -> No product +At time : 180 ns Reaction : OH^-1 (-13457) + H3O^1 (-6221) -> No product +At time : 180 ns Reaction : e_aq^-1 (-220) + °OH^0 (-8763) -> OH^-1 (-14451) +At time : 181 ns Reaction : H3O^1 (-6001) + OH^-1 (-14346) -> No product +At time : 181 ns Reaction : OH^-1 (-14309) + H3O^1 (-6419) -> No product +At time : 181 ns Reaction : °OH^0 (-14273) + °OH^0 (-6760) -> H2O2^0 (-14452) +At time : 182 ns Reaction : H3O^1 (-6183) + OH^-1 (-14299) -> No product +At time : 182 ns Reaction : e_aq^-1 (-2716) + H2O2^0 (-12361) -> OH^-1 (-14453) + °OH^0 (-14454) +At time : 183 ns Reaction : OH^-1 (-14329) + H3O^1 (-6783) -> No product +At time : 183 ns Reaction : H^0 (-14230) + °OH^0 (-5886) -> No product +At time : 183 ns Reaction : °OH^0 (-7314) + H^0 (-11957) -> No product +At time : 183 ns Reaction : e_aq^-1 (-4005) + e_aq^-1 (-4014) -> OH^-1 (-14455) + OH^-1 (-14456) + H_2^0 (-14457) +At time : 184 ns Reaction : e_aq^-1 (-5705) + H2O2^0 (-12359) -> OH^-1 (-14458) + °OH^0 (-14459) +At time : 186 ns Reaction : OH^-1 (-13863) + H3O^1 (-8331) -> No product +At time : 186 ns Reaction : e_aq^-1 (-3673) + H^0 (-12401) -> OH^-1 (-14460) + H_2^0 (-14461) +At time : 186 ns Reaction : °OH^0 (-7412) + °OH^0 (-8394) -> H2O2^0 (-14462) +At time : 187 ns Reaction : H^0 (-14192) + H^0 (-14061) -> H_2^0 (-14463) +At time : 187 ns Reaction : H3O^1 (-6731) + OH^-1 (-13849) -> No product +At time : 188 ns Reaction : H^0 (-14438) + e_aq^-1 (-3909) -> OH^-1 (-14464) + H_2^0 (-14465) +At time : 188 ns Reaction : °OH^0 (-14375) + e_aq^-1 (-5620) -> OH^-1 (-14466) +At time : 188 ns Reaction : °OH^0 (-14339) + e_aq^-1 (-2125) -> OH^-1 (-14467) +At time : 188 ns Reaction : H^0 (-12013) + °OH^0 (-6382) -> No product +At time : 188 ns Reaction : H^0 (-10275) + e_aq^-1 (-5298) -> OH^-1 (-14468) + H_2^0 (-14469) +At time : 189 ns Reaction : H^0 (-14205) + H^0 (-14129) -> H_2^0 (-14470) +At time : 189 ns Reaction : e_aq^-1 (-4293) + H2O2^0 (-11610) -> OH^-1 (-14471) + °OH^0 (-14472) +At time : 190 ns Reaction : H^0 (-13775) + H^0 (-12369) -> H_2^0 (-14473) +At time : 190 ns Reaction : H3O^1 (-6185) + OH^-1 (-13452) -> No product +At time : 190 ns Reaction : e_aq^-1 (-4271) + H2O2^0 (-11868) -> OH^-1 (-14474) + °OH^0 (-14475) +At time : 190 ns Reaction : e_aq^-1 (-3579) + H3O^1 (-6365) -> H^0 (-14476) +At time : 191 ns Reaction : H2O2^0 (-13980) + e_aq^-1 (-4284) -> OH^-1 (-14477) + °OH^0 (-14478) +At time : 191 ns Reaction : °OH^0 (-13948) + °OH^0 (-6554) -> H2O2^0 (-14479) +At time : 191 ns Reaction : e_aq^-1 (-3691) + °OH^0 (-6380) -> OH^-1 (-14480) +At time : 192 ns Reaction : e_aq^-1 (-1054) + H^0 (-13387) -> OH^-1 (-14481) + H_2^0 (-14482) +At time : 192 ns Reaction : e_aq^-1 (-4326) + H2O2^0 (-12015) -> OH^-1 (-14483) + °OH^0 (-14484) +At time : 193 ns Reaction : °OH^0 (-10833) + H^0 (-9185) -> No product +At time : 194 ns Reaction : e_aq^-1 (-599) + H^0 (-13997) -> OH^-1 (-14485) + H_2^0 (-14486) +At time : 194 ns Reaction : e_aq^-1 (-4873) + H^0 (-13713) -> OH^-1 (-14487) + H_2^0 (-14488) +At time : 195 ns Reaction : OH^-1 (-14468) + H3O^1 (-8409) -> No product +At time : 195 ns Reaction : OH^-1 (-14303) + H3O^1 (-6945) -> No product +At time : 195 ns Reaction : H3O^1 (-7137) + OH^-1 (-14210) -> No product +At time : 195 ns Reaction : °OH^0 (-13136) + °OH^0 (-8742) -> H2O2^0 (-14489) +At time : 196 ns Reaction : e_aq^-1 (-794) + H^0 (-13828) -> OH^-1 (-14490) + H_2^0 (-14491) +At time : 196 ns Reaction : H3O^1 (-9684) + OH^-1 (-12967) -> No product +At time : 196 ns Reaction : e_aq^-1 (-529) + H2O2^0 (-12502) -> OH^-1 (-14492) + °OH^0 (-14493) +At time : 196 ns Reaction : e_aq^-1 (-2600) + °OH^0 (-6568) -> OH^-1 (-14494) +At time : 197 ns Reaction : OH^-1 (-14117) + H3O^1 (-8599) -> No product +At time : 198 ns Reaction : H3O^1 (-7607) + OH^-1 (-14335) -> No product +At time : 199 ns Reaction : H3O^1 (-7767) + OH^-1 (-14379) -> No product +At time : 199 ns Reaction : OH^-1 (-14332) + H3O^1 (-8560) -> No product +At time : 199 ns Reaction : H^0 (-14171) + °OH^0 (-6694) -> No product +At time : 200 ns Reaction : H3O^1 (-6999) + OH^-1 (-13987) -> No product +At time : 200 ns Reaction : H3O^1 (-10765) + OH^-1 (-13814) -> No product +At time : 200 ns Reaction : H^0 (-10607) + °OH^0 (-6998) -> No product +At time : 201 ns Reaction : H3O^1 (-8449) + OH^-1 (-14255) -> No product +At time : 201 ns Reaction : e_aq^-1 (-3716) + °OH^0 (-6362) -> OH^-1 (-14495) +At time : 202 ns Reaction : OH^-1 (-14370) + H3O^1 (-6045) -> No product +At time : 202 ns Reaction : e_aq^-1 (-2513) + H3O^1 (-6479) -> H^0 (-14496) +At time : 203 ns Reaction : °OH^0 (-14110) + H^0 (-12627) -> No product +At time : 203 ns Reaction : °OH^0 (-12705) + e_aq^-1 (-8543) -> OH^-1 (-14497) +At time : 203 ns Reaction : °OH^0 (-9357) + °OH^0 (-6490) -> H2O2^0 (-14498) +At time : 204 ns Reaction : e_aq^-1 (-3621) + H3O^1 (-5949) -> H^0 (-14499) +At time : 205 ns Reaction : OH^-1 (-14008) + H3O^1 (-8890) -> No product +At time : 205 ns Reaction : e_aq^-1 (-2056) + H2O2^0 (-11673) -> OH^-1 (-14500) + °OH^0 (-14501) +At time : 206 ns Reaction : H^0 (-14305) + °OH^0 (-6916) -> No product +At time : 206 ns Reaction : e_aq^-1 (-4559) + H3O^1 (-8725) -> H^0 (-14502) +At time : 207 ns Reaction : H3O^1 (-11020) + OH^-1 (-14259) -> No product +At time : 207 ns Reaction : OH^-1 (-14045) + H3O^1 (-8803) -> No product +At time : 207 ns Reaction : °OH^0 (-14013) + °OH^0 (-8184) -> H2O2^0 (-14503) +At time : 209 ns Reaction : e_aq^-1 (-3505) + °OH^0 (-6284) -> OH^-1 (-14504) +At time : 210 ns Reaction : OH^-1 (-14458) + H3O^1 (-6125) -> No product +At time : 210 ns Reaction : e_aq^-1 (-381) + H^0 (-14180) -> OH^-1 (-14505) + H_2^0 (-14506) +At time : 211 ns Reaction : H^0 (-13304) + °OH^0 (-13702) -> No product +At time : 212 ns Reaction : H^0 (-10232) + H^0 (-14502) -> H_2^0 (-14507) +At time : 212 ns Reaction : e_aq^-1 (-2849) + H3O^1 (-6521) -> H^0 (-14508) +At time : 213 ns Reaction : H3O^1 (-10240) + OH^-1 (-14307) -> No product +At time : 213 ns Reaction : H2O2^0 (-12645) + e_aq^-1 (-1948) -> OH^-1 (-14509) + °OH^0 (-14510) +At time : 213 ns Reaction : H2O2^0 (-12407) + e_aq^-1 (-4247) -> OH^-1 (-14511) + °OH^0 (-14512) +At time : 214 ns Reaction : e_aq^-1 (-4645) + H2O2^0 (-14489) -> OH^-1 (-14513) + °OH^0 (-14514) +At time : 214 ns Reaction : e_aq^-1 (-185) + H3O^1 (-8611) -> H^0 (-14515) +At time : 215 ns Reaction : e_aq^-1 (-455) + °OH^0 (-7490) -> OH^-1 (-14516) +At time : 216 ns Reaction : OH^-1 (-14443) + H3O^1 (-7691) -> No product +At time : 216 ns Reaction : H^0 (-14198) + °OH^0 (-11301) -> No product +At time : 217 ns Reaction : OH^-1 (-14439) + H3O^1 (-7505) -> No product +At time : 217 ns Reaction : e_aq^-1 (-16) + H2O2^0 (-11814) -> OH^-1 (-14517) + °OH^0 (-14518) +At time : 218 ns Reaction : OH^-1 (-14227) + H3O^1 (-6123) -> No product +At time : 218 ns Reaction : OH^-1 (-14023) + H3O^1 (-6671) -> No product +At time : 218 ns Reaction : e_aq^-1 (-4992) + e_aq^-1 (-788) -> OH^-1 (-14519) + OH^-1 (-14520) + H_2^0 (-14521) +At time : 219 ns Reaction : e_aq^-1 (-4852) + H3O^1 (-7581) -> H^0 (-14522) +At time : 219 ns Reaction : e_aq^-1 (-3720) + °OH^0 (-6510) -> OH^-1 (-14523) +At time : 220 ns Reaction : °OH^0 (-14011) + °OH^0 (-6458) -> H2O2^0 (-14524) +At time : 220 ns Reaction : OH^-1 (-13889) + H3O^1 (-6047) -> No product +At time : 221 ns Reaction : H^0 (-14414) + e_aq^-1 (-4299) -> OH^-1 (-14525) + H_2^0 (-14526) +At time : 222 ns Reaction : H3O^1 (-11181) + OH^-1 (-14485) -> No product +At time : 222 ns Reaction : °OH^0 (-14384) + e_aq^-1 (-5507) -> OH^-1 (-14527) +At time : 222 ns Reaction : OH^-1 (-14121) + H3O^1 (-9010) -> No product +At time : 223 ns Reaction : OH^-1 (-13835) + H3O^1 (-7907) -> No product +At time : 223 ns Reaction : °OH^0 (-7282) + H^0 (-13371) -> No product +At time : 223 ns Reaction : e_aq^-1 (-4045) + °OH^0 (-6680) -> OH^-1 (-14528) +At time : 224 ns Reaction : °OH^0 (-14484) + °OH^0 (-10899) -> H2O2^0 (-14529) +At time : 224 ns Reaction : e_aq^-1 (-3904) + H2O2^0 (-11714) -> OH^-1 (-14530) + °OH^0 (-14531) +At time : 224 ns Reaction : °OH^0 (-9676) + °OH^0 (-6460) -> H2O2^0 (-14532) +At time : 224 ns Reaction : e_aq^-1 (-4906) + H3O^1 (-8119) -> H^0 (-14533) +At time : 226 ns Reaction : °OH^0 (-14191) + °OH^0 (-8862) -> H2O2^0 (-14534) +At time : 226 ns Reaction : OH^-1 (-13219) + H3O^1 (-8881) -> No product +At time : 226 ns Reaction : e_aq^-1 (-4288) + H^0 (-10874) -> OH^-1 (-14535) + H_2^0 (-14536) +At time : 227 ns Reaction : OH^-1 (-14167) + H3O^1 (-8083) -> No product +At time : 227 ns Reaction : e_aq^-1 (-3586) + H3O^1 (-6303) -> H^0 (-14537) +At time : 228 ns Reaction : H^0 (-13360) + °OH^0 (-6052) -> No product +At time : 229 ns Reaction : °OH^0 (-10113) + H^0 (-13148) -> No product +At time : 230 ns Reaction : °OH^0 (-9385) + H^0 (-13197) -> No product +At time : 231 ns Reaction : OH^-1 (-14312) + H3O^1 (-10148) -> No product +At time : 231 ns Reaction : H^0 (-13821) + e_aq^-1 (-1923) -> OH^-1 (-14538) + H_2^0 (-14539) +At time : 232 ns Reaction : OH^-1 (-14530) + H3O^1 (-6491) -> No product +At time : 235 ns Reaction : OH^-1 (-14398) + H3O^1 (-7065) -> No product +At time : 236 ns Reaction : e_aq^-1 (-5374) + °OH^0 (-14493) -> OH^-1 (-14540) +At time : 236 ns Reaction : OH^-1 (-14405) + H3O^1 (-8683) -> No product +At time : 238 ns Reaction : °OH^0 (-14514) + e_aq^-1 (-1180) -> OH^-1 (-14541) +At time : 240 ns Reaction : e_aq^-1 (-475) + H^0 (-13354) -> OH^-1 (-14542) + H_2^0 (-14543) +At time : 240 ns Reaction : H3O^1 (-9764) + e_aq^-1 (-3895) -> H^0 (-14544) +At time : 240 ns Reaction : e_aq^-1 (-4324) + H3O^1 (-6007) -> H^0 (-14545) +At time : 241 ns Reaction : °OH^0 (-6978) + H^0 (-14533) -> No product +At time : 241 ns Reaction : OH^-1 (-13767) + H3O^1 (-8515) -> No product +At time : 243 ns Reaction : H3O^1 (-7709) + OH^-1 (-14175) -> No product +At time : 244 ns Reaction : H3O^1 (-11201) + OH^-1 (-14451) -> No product +At time : 244 ns Reaction : OH^-1 (-13933) + H3O^1 (-6163) -> No product +At time : 244 ns Reaction : e_aq^-1 (-1992) + H2O2^0 (-12991) -> OH^-1 (-14546) + °OH^0 (-14547) +At time : 245 ns Reaction : H^0 (-14325) + °OH^0 (-6566) -> No product +At time : 245 ns Reaction : OH^-1 (-13716) + H3O^1 (-7271) -> No product +At time : 245 ns Reaction : e_aq^-1 (-1462) + H^0 (-13644) -> OH^-1 (-14548) + H_2^0 (-14549) +At time : 246 ns Reaction : H3O^1 (-8433) + OH^-1 (-14492) -> No product +At time : 246 ns Reaction : H3O^1 (-10627) + OH^-1 (-13539) -> No product +At time : 246 ns Reaction : e_aq^-1 (-3922) + H2O2^0 (-12228) -> OH^-1 (-14550) + °OH^0 (-14551) +At time : 249 ns Reaction : e_aq^-1 (-2767) + H3O^1 (-6509) -> H^0 (-14552) +At time : 250 ns Reaction : H3O^1 (-6973) + OH^-1 (-14541) -> No product +At time : 250 ns Reaction : H^0 (-14419) + H^0 (-13645) -> H_2^0 (-14553) +At time : 250 ns Reaction : °OH^0 (-10274) + °OH^0 (-14048) -> H2O2^0 (-14554) +At time : 250 ns Reaction : °OH^0 (-10541) + °OH^0 (-8182) -> H2O2^0 (-14555) +At time : 252 ns Reaction : H^0 (-13113) + °OH^0 (-9126) -> No product +At time : 252 ns Reaction : °OH^0 (-9878) + °OH^0 (-7754) -> H2O2^0 (-14556) +At time : 253 ns Reaction : OH^-1 (-12482) + H3O^1 (-7307) -> No product +At time : 254 ns Reaction : °OH^0 (-6728) + °OH^0 (-13753) -> H2O2^0 (-14557) +At time : 254 ns Reaction : e_aq^-1 (-3639) + °OH^0 (-6392) -> OH^-1 (-14558) +At time : 255 ns Reaction : OH^-1 (-14474) + H3O^1 (-9019) -> No product +At time : 256 ns Reaction : H^0 (-13630) + °OH^0 (-14531) -> No product +At time : 256 ns Reaction : °OH^0 (-7046) + °OH^0 (-8220) -> H2O2^0 (-14559) +At time : 257 ns Reaction : °OH^0 (-14367) + H^0 (-14214) -> No product +At time : 257 ns Reaction : e_aq^-1 (-45) + H2O2^0 (-13967) -> OH^-1 (-14560) + °OH^0 (-14561) +At time : 258 ns Reaction : e_aq^-1 (-4928) + H2O2^0 (-12040) -> OH^-1 (-14562) + °OH^0 (-14563) +At time : 258 ns Reaction : e_aq^-1 (-4776) + H3O^1 (-7559) -> H^0 (-14564) +At time : 259 ns Reaction : e_aq^-1 (-1356) + H3O^1 (-7595) -> H^0 (-14565) +At time : 260 ns Reaction : OH^-1 (-14523) + H3O^1 (-6487) -> No product +At time : 261 ns Reaction : H^0 (-10357) + °OH^0 (-8328) -> No product +At time : 261 ns Reaction : e_aq^-1 (-3953) + H3O^1 (-6579) -> H^0 (-14566) +At time : 262 ns Reaction : e_aq^-1 (-1224) + H2O2^0 (-12156) -> OH^-1 (-14567) + °OH^0 (-14568) +At time : 264 ns Reaction : e_aq^-1 (-805) + H2O2^0 (-11918) -> OH^-1 (-14569) + °OH^0 (-14570) +At time : 265 ns Reaction : °OH^0 (-14551) + °OH^0 (-6234) -> H2O2^0 (-14571) +At time : 266 ns Reaction : OH^-1 (-14352) + H3O^1 (-7497) -> No product +At time : 266 ns Reaction : H2O2^0 (-11491) + e_aq^-1 (-3681) -> OH^-1 (-14572) + °OH^0 (-14573) +At time : 268 ns Reaction : e_aq^-1 (-3941) + H3O^1 (-8863) -> H^0 (-14574) +At time : 269 ns Reaction : OH^-1 (-14540) + H3O^1 (-7263) -> No product +At time : 269 ns Reaction : °OH^0 (-14280) + °OH^0 (-7904) -> H2O2^0 (-14575) +At time : 271 ns Reaction : °OH^0 (-9870) + °OH^0 (-13400) -> H2O2^0 (-14576) +At time : 273 ns Reaction : OH^-1 (-14203) + H3O^1 (-8385) -> No product +At time : 273 ns Reaction : OH^-1 (-13935) + H3O^1 (-6747) -> No product +At time : 275 ns Reaction : e_aq^-1 (-2351) + H3O^1 (-6921) -> H^0 (-14577) +At time : 277 ns Reaction : H3O^1 (-6511) + OH^-1 (-13841) -> No product +At time : 278 ns Reaction : H3O^1 (-9785) + e_aq^-1 (-2337) -> H^0 (-14578) +At time : 279 ns Reaction : H3O^1 (-10387) + OH^-1 (-14505) -> No product +At time : 279 ns Reaction : °OH^0 (-13878) + °OH^0 (-7464) -> H2O2^0 (-14579) +At time : 279 ns Reaction : OH^-1 (-13729) + H3O^1 (-6953) -> No product +At time : 280 ns Reaction : H^0 (-13485) + e_aq^-1 (-2095) -> OH^-1 (-14580) + H_2^0 (-14581) +At time : 280 ns Reaction : H2O2^0 (-11582) + e_aq^-1 (-8573) -> OH^-1 (-14582) + °OH^0 (-14583) +At time : 281 ns Reaction : OH^-1 (-13545) + H3O^1 (-8680) -> No product +At time : 282 ns Reaction : OH^-1 (-13345) + H3O^1 (-8986) -> No product +At time : 282 ns Reaction : e_aq^-1 (-783) + H3O^1 (-7181) -> H^0 (-14584) +At time : 284 ns Reaction : OH^-1 (-14548) + H3O^1 (-7005) -> No product +At time : 284 ns Reaction : e_aq^-1 (-5237) + °OH^0 (-6122) -> OH^-1 (-14585) +At time : 285 ns Reaction : °OH^0 (-13167) + °OH^0 (-7648) -> H2O2^0 (-14586) +At time : 285 ns Reaction : H^0 (-12653) + e_aq^-1 (-3556) -> OH^-1 (-14587) + H_2^0 (-14588) +At time : 287 ns Reaction : H^0 (-13372) + e_aq^-1 (-4820) -> OH^-1 (-14589) + H_2^0 (-14590) +At time : 288 ns Reaction : OH^-1 (-13912) + H3O^1 (-7359) -> No product +At time : 288 ns Reaction : °OH^0 (-13681) + H^0 (-13302) -> No product +At time : 289 ns Reaction : e_aq^-1 (-175) + H3O^1 (-11070) -> H^0 (-14591) +At time : 292 ns Reaction : OH^-1 (-14580) + H3O^1 (-8512) -> No product +At time : 292 ns Reaction : e_aq^-1 (-5060) + H3O^1 (-7295) -> H^0 (-14592) +At time : 293 ns Reaction : H^0 (-11905) + H^0 (-9197) -> H_2^0 (-14593) +At time : 294 ns Reaction : e_aq^-1 (-82) + H2O2^0 (-12105) -> OH^-1 (-14594) + °OH^0 (-14595) +At time : 296 ns Reaction : H^0 (-12697) + H^0 (-14577) -> H_2^0 (-14596) +At time : 296 ns Reaction : H3O^1 (-10485) + OH^-1 (-14354) -> No product +At time : 296 ns Reaction : e_aq^-1 (-648) + H^0 (-13411) -> OH^-1 (-14597) + H_2^0 (-14598) +At time : 296 ns Reaction : H3O^1 (-9713) + e_aq^-1 (-3695) -> H^0 (-14599) +At time : 297 ns Reaction : H3O^1 (-6369) + OH^-1 (-14495) -> No product +At time : 298 ns Reaction : °OH^0 (-6834) + °OH^0 (-7720) -> H2O2^0 (-14600) +At time : 299 ns Reaction : OH^-1 (-14597) + H3O^1 (-7025) -> No product +At time : 300 ns Reaction : H^0 (-9293) + °OH^0 (-13976) -> No product +At time : 300 ns Reaction : e_aq^-1 (-1735) + H2O2^0 (-11516) -> OH^-1 (-14601) + °OH^0 (-14602) +At time : 301 ns Reaction : e_aq^-1 (-4780) + °OH^0 (-14260) -> OH^-1 (-14603) +At time : 301 ns Reaction : °OH^0 (-13914) + °OH^0 (-6424) -> H2O2^0 (-14604) +At time : 302 ns Reaction : °OH^0 (-9334) + °OH^0 (-14302) -> H2O2^0 (-14605) +At time : 304 ns Reaction : e_aq^-1 (-1014) + H2O2^0 (-13671) -> OH^-1 (-14606) + °OH^0 (-14607) +At time : 304 ns Reaction : e_aq^-1 (-4445) + H3O^1 (-7015) -> H^0 (-14608) +At time : 305 ns Reaction : H3O^1 (-9707) + OH^-1 (-14350) -> No product +At time : 305 ns Reaction : H^0 (-13965) + H^0 (-13073) -> H_2^0 (-14609) +At time : 305 ns Reaction : H^0 (-9388) + H^0 (-13075) -> H_2^0 (-14610) +At time : 305 ns Reaction : °OH^0 (-10018) + °OH^0 (-6922) -> H2O2^0 (-14611) +At time : 309 ns Reaction : OH^-1 (-14050) + H3O^1 (-8443) -> No product +At time : 309 ns Reaction : e_aq^-1 (-2805) + H3O^1 (-7955) -> H^0 (-14612) +At time : 310 ns Reaction : °OH^0 (-14563) + °OH^0 (-14388) -> H2O2^0 (-14613) +At time : 310 ns Reaction : °OH^0 (-14399) + H^0 (-12728) -> No product +At time : 310 ns Reaction : e_aq^-1 (-5234) + H^0 (-14342) -> OH^-1 (-14614) + H_2^0 (-14615) +At time : 310 ns Reaction : OH^-1 (-13646) + H3O^1 (-7743) -> No product +At time : 313 ns Reaction : H3O^1 (-10832) + OH^-1 (-14453) -> No product +At time : 314 ns Reaction : OH^-1 (-14500) + H3O^1 (-7753) -> No product +At time : 315 ns Reaction : e_aq^-1 (-2171) + H3O^1 (-6437) -> H^0 (-14616) +At time : 316 ns Reaction : H^0 (-14128) + e_aq^-1 (-4444) -> OH^-1 (-14617) + H_2^0 (-14618) +At time : 317 ns Reaction : OH^-1 (-14448) + H3O^1 (-6923) -> No product +At time : 318 ns Reaction : OH^-1 (-14286) + H3O^1 (-8193) -> No product +At time : 318 ns Reaction : H3O^1 (-10645) + OH^-1 (-12666) -> No product +At time : 321 ns Reaction : OH^-1 (-13765) + H3O^1 (-8287) -> No product +At time : 321 ns Reaction : e_aq^-1 (-4029) + °OH^0 (-6740) -> OH^-1 (-14619) +At time : 322 ns Reaction : OH^-1 (-13788) + H3O^1 (-7635) -> No product +At time : 322 ns Reaction : e_aq^-1 (-2128) + H3O^1 (-9962) -> H^0 (-14620) +At time : 323 ns Reaction : H^0 (-9289) + H^0 (-9547) -> H_2^0 (-14621) +At time : 326 ns Reaction : OH^-1 (-13991) + H3O^1 (-8441) -> No product +At time : 327 ns Reaction : °OH^0 (-13274) + °OH^0 (-14183) -> H2O2^0 (-14622) +At time : 328 ns Reaction : OH^-1 (-14360) + H3O^1 (-6673) -> No product +At time : 329 ns Reaction : °OH^0 (-10393) + °OH^0 (-13692) -> H2O2^0 (-14623) +At time : 330 ns Reaction : OH^-1 (-14480) + H3O^1 (-6389) -> No product +At time : 330 ns Reaction : e_aq^-1 (-2011) + H2O2^0 (-12099) -> OH^-1 (-14624) + °OH^0 (-14625) +At time : 334 ns Reaction : OH^-1 (-13981) + H3O^1 (-9031) -> No product +At time : 335 ns Reaction : H2O2^0 (-11805) + e_aq^-1 (-3954) -> OH^-1 (-14626) + °OH^0 (-14627) +At time : 335 ns Reaction : °OH^0 (-6676) + °OH^0 (-7970) -> H2O2^0 (-14628) +At time : 337 ns Reaction : e_aq^-1 (-4307) + H2O2^0 (-14556) -> OH^-1 (-14629) + °OH^0 (-14630) +At time : 339 ns Reaction : °OH^0 (-10882) + H^0 (-13796) -> No product +At time : 341 ns Reaction : H^0 (-10724) + H^0 (-13355) -> H_2^0 (-14631) +At time : 343 ns Reaction : H^0 (-9814) + °OH^0 (-6508) -> No product +At time : 344 ns Reaction : °OH^0 (-13064) + °OH^0 (-7630) -> H2O2^0 (-14632) +At time : 344 ns Reaction : e_aq^-1 (-4965) + H3O^1 (-8536) -> H^0 (-14633) +At time : 344 ns Reaction : e_aq^-1 (-142) + °OH^0 (-7548) -> OH^-1 (-14634) +At time : 344 ns Reaction : e_aq^-1 (-2074) + H3O^1 (-6669) -> H^0 (-14635) +At time : 346 ns Reaction : H^0 (-13673) + e_aq^-1 (-3624) -> OH^-1 (-14636) + H_2^0 (-14637) +At time : 347 ns Reaction : °OH^0 (-14583) + °OH^0 (-6524) -> H2O2^0 (-14638) +At time : 348 ns Reaction : °OH^0 (-12870) + °OH^0 (-13809) -> H2O2^0 (-14639) +At time : 348 ns Reaction : e_aq^-1 (-4452) + °OH^0 (-5728) -> OH^-1 (-14640) +At time : 349 ns Reaction : H3O^1 (-8011) + OH^-1 (-13592) -> No product +At time : 349 ns Reaction : °OH^0 (-9510) + °OH^0 (-7670) -> H2O2^0 (-14641) +At time : 351 ns Reaction : °OH^0 (-14627) + °OH^0 (-6784) -> H2O2^0 (-14642) +At time : 351 ns Reaction : H3O^1 (-11390) + OH^-1 (-14311) -> No product +At time : 352 ns Reaction : °OH^0 (-14336) + °OH^0 (-7110) -> H2O2^0 (-14643) +At time : 352 ns Reaction : H^0 (-14187) + e_aq^-1 (-2525) -> OH^-1 (-14644) + H_2^0 (-14645) +At time : 352 ns Reaction : OH^-1 (-11832) + H3O^1 (-8674) -> No product +At time : 353 ns Reaction : H^0 (-14086) + e_aq^-1 (-8876) -> OH^-1 (-14646) + H_2^0 (-14647) +At time : 354 ns Reaction : H3O^1 (-10500) + OH^-1 (-13903) -> No product +At time : 355 ns Reaction : e_aq^-1 (-3867) + H^0 (-12868) -> OH^-1 (-14648) + H_2^0 (-14649) +At time : 356 ns Reaction : OH^-1 (-14589) + H3O^1 (-9061) -> No product +At time : 357 ns Reaction : OH^-1 (-14629) + H3O^1 (-8926) -> No product +At time : 359 ns Reaction : OH^-1 (-14640) + H3O^1 (-7711) -> No product +At time : 359 ns Reaction : e_aq^-1 (-2615) + H3O^1 (-7939) -> H^0 (-14650) +At time : 361 ns Reaction : OH^-1 (-14396) + H3O^1 (-8971) -> No product +At time : 361 ns Reaction : e_aq^-1 (-2902) + H2O2^0 (-11578) -> OH^-1 (-14651) + °OH^0 (-14652) +At time : 362 ns Reaction : e_aq^-1 (-2330) + °OH^0 (-6748) -> OH^-1 (-14653) +At time : 364 ns Reaction : OH^-1 (-13877) + H3O^1 (-8812) -> No product +At time : 368 ns Reaction : H^0 (-14142) + °OH^0 (-8691) -> No product +At time : 369 ns Reaction : H3O^1 (-7701) + OH^-1 (-13725) -> No product +At time : 370 ns Reaction : OH^-1 (-14653) + H3O^1 (-6687) -> No product +At time : 371 ns Reaction : e_aq^-1 (-2154) + °OH^0 (-13734) -> OH^-1 (-14654) +At time : 372 ns Reaction : OH^-1 (-13684) + H3O^1 (-6073) -> No product +At time : 372 ns Reaction : H3O^1 (-6393) + OH^-1 (-12734) -> No product +At time : 373 ns Reaction : H2O2^0 (-12070) + e_aq^-1 (-4089) -> OH^-1 (-14655) + °OH^0 (-14656) +At time : 373 ns Reaction : e_aq^-1 (-1533) + H3O^1 (-8992) -> H^0 (-14657) +At time : 374 ns Reaction : °OH^0 (-14015) + H^0 (-9127) -> No product +At time : 375 ns Reaction : °OH^0 (-13165) + °OH^0 (-9256) -> H2O2^0 (-14658) +At time : 375 ns Reaction : e_aq^-1 (-5015) + H3O^1 (-8367) -> H^0 (-14659) +At time : 376 ns Reaction : e_aq^-1 (-2137) + H2O2^0 (-11735) -> OH^-1 (-14660) + °OH^0 (-14661) +At time : 382 ns Reaction : e_aq^-1 (-5574) + °OH^0 (-9282) -> OH^-1 (-14662) +At time : 385 ns Reaction : H2O2^0 (-11553) + e_aq^-1 (-5190) -> OH^-1 (-14663) + °OH^0 (-14664) +At time : 386 ns Reaction : H3O^1 (-9847) + OH^-1 (-14660) -> No product +At time : 387 ns Reaction : H3O^1 (-10674) + e_aq^-1 (-3576) -> H^0 (-14665) +At time : 393 ns Reaction : °OH^0 (-13226) + e_aq^-1 (-8822) -> OH^-1 (-14666) +At time : 393 ns Reaction : e_aq^-1 (-337) + H3O^1 (-7275) -> H^0 (-14667) +At time : 394 ns Reaction : °OH^0 (-14317) + °OH^0 (-10594) -> H2O2^0 (-14668) +At time : 394 ns Reaction : °OH^0 (-9628) + °OH^0 (-7854) -> H2O2^0 (-14669) +At time : 398 ns Reaction : H3O^1 (-6433) + OH^-1 (-14279) -> No product +At time : 401 ns Reaction : H^0 (-13898) + °OH^0 (-6360) -> No product +At time : 401 ns Reaction : e_aq^-1 (-2098) + °OH^0 (-6712) -> OH^-1 (-14670) +At time : 402 ns Reaction : OH^-1 (-14441) + H3O^1 (-7539) -> No product +At time : 402 ns Reaction : e_aq^-1 (-404) + e_aq^-1 (-574) -> OH^-1 (-14671) + OH^-1 (-14672) + H_2^0 (-14673) +At time : 404 ns Reaction : OH^-1 (-13569) + H3O^1 (-8009) -> No product +At time : 405 ns Reaction : H^0 (-14437) + °OH^0 (-8020) -> No product +At time : 406 ns Reaction : H^0 (-9541) + e_aq^-1 (-3419) -> OH^-1 (-14674) + H_2^0 (-14675) +At time : 410 ns Reaction : °OH^0 (-13376) + e_aq^-1 (-4672) -> OH^-1 (-14676) +At time : 411 ns Reaction : OH^-1 (-13995) + H3O^1 (-6501) -> No product +At time : 413 ns Reaction : °OH^0 (-12655) + °OH^0 (-14459) -> H2O2^0 (-14677) +At time : 414 ns Reaction : H3O^1 (-6213) + OH^-1 (-14603) -> No product +At time : 416 ns Reaction : °OH^0 (-6750) + H^0 (-14578) -> No product +At time : 416 ns Reaction : H^0 (-10507) + H^0 (-10251) -> H_2^0 (-14678) +At time : 417 ns Reaction : °OH^0 (-10726) + °OH^0 (-6336) -> H2O2^0 (-14679) +At time : 420 ns Reaction : H3O^1 (-10060) + OH^-1 (-14001) -> No product +At time : 420 ns Reaction : °OH^0 (-13741) + °OH^0 (-8360) -> H2O2^0 (-14680) +At time : 423 ns Reaction : OH^-1 (-14322) + H3O^1 (-6683) -> No product +At time : 425 ns Reaction : e_aq^-1 (-5594) + H2O2^0 (-12603) -> OH^-1 (-14681) + °OH^0 (-14682) +At time : 425 ns Reaction : e_aq^-1 (-5674) + °OH^0 (-9262) -> OH^-1 (-14683) +At time : 429 ns Reaction : H3O^1 (-5851) + OH^-1 (-14288) -> No product +At time : 429 ns Reaction : e_aq^-1 (-5655) + H^0 (-14084) -> OH^-1 (-14684) + H_2^0 (-14685) +At time : 432 ns Reaction : e_aq^-1 (-4993) + H^0 (-10318) -> OH^-1 (-14686) + H_2^0 (-14687) +At time : 432 ns Reaction : e_aq^-1 (-5192) + °OH^0 (-7516) -> OH^-1 (-14688) +At time : 435 ns Reaction : OH^-1 (-13336) + H3O^1 (-6295) -> No product +At time : 436 ns Reaction : °OH^0 (-13683) + °OH^0 (-7472) -> H2O2^0 (-14689) +At time : 438 ns Reaction : H^0 (-14217) + °OH^0 (-7910) -> No product +At time : 438 ns Reaction : e_aq^-1 (-2408) + e_aq^-1 (-3764) -> OH^-1 (-14690) + OH^-1 (-14691) + H_2^0 (-14692) +At time : 440 ns Reaction : e_aq^-1 (-4949) + H3O^1 (-8295) -> H^0 (-14693) +At time : 443 ns Reaction : e_aq^-1 (-245) + °OH^0 (-7262) -> OH^-1 (-14694) +At time : 446 ns Reaction : H3O^1 (-9998) + OH^-1 (-14150) -> No product +At time : 448 ns Reaction : H3O^1 (-9990) + OH^-1 (-14535) -> No product +At time : 448 ns Reaction : °OH^0 (-14478) + e_aq^-1 (-4363) -> OH^-1 (-14695) +At time : 449 ns Reaction : H3O^1 (-7621) + OH^-1 (-14560) -> No product +At time : 451 ns Reaction : °OH^0 (-9477) + °OH^0 (-7418) -> H2O2^0 (-14696) +At time : 451 ns Reaction : e_aq^-1 (-4420) + °OH^0 (-6794) -> OH^-1 (-14697) +At time : 454 ns Reaction : OH^-1 (-13638) + H3O^1 (-8105) -> No product +At time : 455 ns Reaction : OH^-1 (-14562) + H3O^1 (-6173) -> No product +At time : 455 ns Reaction : e_aq^-1 (-3856) + H^0 (-13923) -> OH^-1 (-14698) + H_2^0 (-14699) +At time : 458 ns Reaction : H^0 (-14285) + H^0 (-13776) -> H_2^0 (-14700) +At time : 460 ns Reaction : °OH^0 (-12602) + °OH^0 (-6124) -> H2O2^0 (-14701) +At time : 460 ns Reaction : e_aq^-1 (-3588) + H3O^1 (-6401) -> H^0 (-14702) +At time : 461 ns Reaction : H3O^1 (-11140) + OH^-1 (-14387) -> No product +At time : 462 ns Reaction : °OH^0 (-14570) + H^0 (-9135) -> No product +At time : 463 ns Reaction : H^0 (-9285) + °OH^0 (-14202) -> No product +At time : 463 ns Reaction : e_aq^-1 (-4695) + H^0 (-10044) -> OH^-1 (-14703) + H_2^0 (-14704) +At time : 464 ns Reaction : OH^-1 (-13858) + H3O^1 (-5947) -> No product +At time : 465 ns Reaction : H3O^1 (-6043) + OH^-1 (-14432) -> No product +At time : 467 ns Reaction : e_aq^-1 (-533) + H2O2^0 (-11538) -> OH^-1 (-14705) + °OH^0 (-14706) +At time : 472 ns Reaction : OH^-1 (-14705) + H3O^1 (-8626) -> No product +At time : 473 ns Reaction : °OH^0 (-14442) + °OH^0 (-7532) -> H2O2^0 (-14707) +At time : 475 ns Reaction : °OH^0 (-8979) + °OH^0 (-13768) -> H2O2^0 (-14708) +At time : 477 ns Reaction : OH^-1 (-13754) + H3O^1 (-6625) -> No product +At time : 479 ns Reaction : H^0 (-14592) + °OH^0 (-7596) -> No product +At time : 480 ns Reaction : H^0 (-9792) + H^0 (-14269) -> H_2^0 (-14709) +At time : 481 ns Reaction : H^0 (-10434) + e_aq^-1 (-5404) -> OH^-1 (-14710) + H_2^0 (-14711) +At time : 486 ns Reaction : H^0 (-12144) + H^0 (-12566) -> H_2^0 (-14712) +At time : 488 ns Reaction : e_aq^-1 (-3581) + H3O^1 (-5899) -> H^0 (-14713) +At time : 489 ns Reaction : e_aq^-1 (-5677) + °OH^0 (-7392) -> OH^-1 (-14714) +At time : 492 ns Reaction : H^0 (-9447) + °OH^0 (-7096) -> No product +At time : 493 ns Reaction : H^0 (-13337) + H^0 (-14608) -> H_2^0 (-14715) +At time : 495 ns Reaction : H2O2^0 (-11819) + e_aq^-1 (-4048) -> OH^-1 (-14716) + °OH^0 (-14717) +At time : 496 ns Reaction : H3O^1 (-10629) + OH^-1 (-14316) -> No product +At time : 497 ns Reaction : e_aq^-1 (-2545) + H3O^1 (-7893) -> H^0 (-14718) +At time : 499 ns Reaction : H3O^1 (-7567) + OH^-1 (-14435) -> No product +At time : 505 ns Reaction : °OH^0 (-14602) + °OH^0 (-6016) -> H2O2^0 (-14719) +At time : 506 ns Reaction : OH^-1 (-13971) + H3O^1 (-8055) -> No product +At time : 507 ns Reaction : H2O2^0 (-11709) + e_aq^-1 (-4310) -> OH^-1 (-14720) + °OH^0 (-14721) +At time : 510 ns Reaction : e_aq^-1 (-1447) + H2O2^0 (-12234) -> OH^-1 (-14722) + °OH^0 (-14723) +At time : 512 ns Reaction : °OH^0 (-7204) + H^0 (-12428) -> No product +At time : 515 ns Reaction : e_aq^-1 (-4619) + H2O2^0 (-13640) -> OH^-1 (-14724) + °OH^0 (-14725) +At time : 517 ns Reaction : e_aq^-1 (-3785) + °OH^0 (-6530) -> OH^-1 (-14726) +At time : 520 ns Reaction : °OH^0 (-7730) + °OH^0 (-9208) -> H2O2^0 (-14727) +At time : 520 ns Reaction : e_aq^-1 (-4792) + H3O^1 (-7139) -> H^0 (-14728) +At time : 522 ns Reaction : H2O2^0 (-14060) + e_aq^-1 (-1245) -> OH^-1 (-14729) + °OH^0 (-14730) +At time : 524 ns Reaction : H^0 (-10075) + e_aq^-1 (-5536) -> OH^-1 (-14731) + H_2^0 (-14732) +At time : 526 ns Reaction : H^0 (-14496) + °OH^0 (-6562) -> No product +At time : 527 ns Reaction : OH^-1 (-14400) + H3O^1 (-7759) -> No product +At time : 527 ns Reaction : OH^-1 (-12471) + H3O^1 (-5919) -> No product +At time : 531 ns Reaction : e_aq^-1 (-4398) + H2O2^0 (-14529) -> OH^-1 (-14733) + °OH^0 (-14734) +At time : 531 ns Reaction : H3O^1 (-9938) + OH^-1 (-14446) -> No product +At time : 533 ns Reaction : °OH^0 (-9665) + e_aq^-1 (-3704) -> OH^-1 (-14735) +At time : 534 ns Reaction : OH^-1 (-14654) + H3O^1 (-6977) -> No product +At time : 534 ns Reaction : H^0 (-12729) + H^0 (-14633) -> H_2^0 (-14736) +At time : 535 ns Reaction : H^0 (-13046) + e_aq^-1 (-3966) -> OH^-1 (-14737) + H_2^0 (-14738) +At time : 539 ns Reaction : H3O^1 (-6103) + OH^-1 (-13939) -> No product +At time : 539 ns Reaction : H3O^1 (-9789) + e_aq^-1 (-2325) -> H^0 (-14739) +At time : 541 ns Reaction : e_aq^-1 (-2340) + H3O^1 (-9873) -> H^0 (-14740) +At time : 543 ns Reaction : OH^-1 (-14735) + H3O^1 (-7873) -> No product +At time : 547 ns Reaction : °OH^0 (-9391) + e_aq^-1 (-4429) -> OH^-1 (-14741) +At time : 548 ns Reaction : °OH^0 (-7528) + H^0 (-13011) -> No product +At time : 557 ns Reaction : °OH^0 (-13955) + °OH^0 (-6264) -> H2O2^0 (-14742) +At time : 558 ns Reaction : °OH^0 (-6838) + °OH^0 (-6928) -> H2O2^0 (-14743) +At time : 560 ns Reaction : H3O^1 (-10733) + OH^-1 (-14558) -> No product +At time : 560 ns Reaction : H3O^1 (-5901) + OH^-1 (-14504) -> No product +At time : 562 ns Reaction : e_aq^-1 (-4659) + H3O^1 (-7683) -> H^0 (-14744) +At time : 563 ns Reaction : e_aq^-1 (-5149) + H2O2^0 (-14658) -> OH^-1 (-14745) + °OH^0 (-14746) +At time : 570 ns Reaction : e_aq^-1 (-1350) + °OH^0 (-7270) -> OH^-1 (-14747) +At time : 571 ns Reaction : e_aq^-1 (-4580) + H3O^1 (-7681) -> H^0 (-14748) +At time : 572 ns Reaction : e_aq^-1 (-548) + H3O^1 (-7347) -> H^0 (-14749) +At time : 577 ns Reaction : °OH^0 (-14607) + °OH^0 (-13983) -> H2O2^0 (-14750) +At time : 577 ns Reaction : H^0 (-14386) + H^0 (-13142) -> H_2^0 (-14751) +At time : 580 ns Reaction : H^0 (-11356) + H^0 (-13786) -> H_2^0 (-14752) +At time : 581 ns Reaction : H3O^1 (-6721) + OH^-1 (-14389) -> No product +At time : 585 ns Reaction : OH^-1 (-14242) + H3O^1 (-8219) -> No product +At time : 586 ns Reaction : OH^-1 (-14345) + H3O^1 (-7021) -> No product +At time : 586 ns Reaction : °OH^0 (-13522) + °OH^0 (-7732) -> H2O2^0 (-14753) +At time : 590 ns Reaction : e_aq^-1 (-5372) + H2O2^0 (-11659) -> OH^-1 (-14754) + °OH^0 (-14755) +At time : 592 ns Reaction : °OH^0 (-14106) + H^0 (-13330) -> No product +At time : 595 ns Reaction : OH^-1 (-14487) + H3O^1 (-7535) -> No product +At time : 602 ns Reaction : e_aq^-1 (-3810) + H2O2^0 (-11836) -> OH^-1 (-14756) + °OH^0 (-14757) +At time : 603 ns Reaction : OH^-1 (-14281) + H3O^1 (-8361) -> No product +At time : 606 ns Reaction : e_aq^-1 (-1505) + H2O2^0 (-11687) -> OH^-1 (-14758) + °OH^0 (-14759) +At time : 609 ns Reaction : °OH^0 (-10561) + °OH^0 (-7324) -> H2O2^0 (-14760) +At time : 614 ns Reaction : OH^-1 (-13780) + H3O^1 (-6873) -> No product +At time : 616 ns Reaction : H3O^1 (-9736) + OH^-1 (-14301) -> No product +At time : 616 ns Reaction : H3O^1 (-9731) + e_aq^-1 (-3749) -> H^0 (-14761) +At time : 618 ns Reaction : OH^-1 (-14714) + H3O^1 (-7429) -> No product +At time : 619 ns Reaction : H^0 (-11031) + °OH^0 (-7124) -> No product +At time : 620 ns Reaction : °OH^0 (-10946) + e_aq^-1 (-9059) -> OH^-1 (-14762) +At time : 625 ns Reaction : °OH^0 (-14404) + °OH^0 (-7180) -> H2O2^0 (-14763) +At time : 627 ns Reaction : OH^-1 (-13993) + H3O^1 (-8379) -> No product +At time : 634 ns Reaction : e_aq^-1 (-823) + H2O2^0 (-13243) -> OH^-1 (-14764) + °OH^0 (-14765) +At time : 636 ns Reaction : H3O^1 (-6033) + OH^-1 (-14762) -> No product +At time : 638 ns Reaction : e_aq^-1 (-3805) + °OH^0 (-7994) -> OH^-1 (-14766) +At time : 639 ns Reaction : H2O2^0 (-11469) + e_aq^-1 (-5267) -> OH^-1 (-14767) + °OH^0 (-14768) +At time : 648 ns Reaction : OH^-1 (-14513) + H3O^1 (-6071) -> No product +At time : 648 ns Reaction : e_aq^-1 (-1118) + H3O^1 (-7197) -> H^0 (-14769) +At time : 650 ns Reaction : °OH^0 (-14276) + °OH^0 (-5942) -> H2O2^0 (-14770) +At time : 655 ns Reaction : e_aq^-1 (-3745) + H3O^1 (-6339) -> H^0 (-14771) +At time : 664 ns Reaction : OH^-1 (-14582) + H3O^1 (-8701) -> No product +At time : 664 ns Reaction : e_aq^-1 (-3508) + H3O^1 (-7825) -> H^0 (-14772) +At time : 666 ns Reaction : e_aq^-1 (-824) + H2O2^0 (-12312) -> OH^-1 (-14773) + °OH^0 (-14774) +At time : 667 ns Reaction : OH^-1 (-14393) + H3O^1 (-7417) -> No product +At time : 670 ns Reaction : OH^-1 (-14517) + H3O^1 (-8347) -> No product +At time : 676 ns Reaction : H2O2^0 (-11755) + e_aq^-1 (-5249) -> OH^-1 (-14775) + °OH^0 (-14776) +At time : 677 ns Reaction : °OH^0 (-14024) + e_aq^-1 (-3780) -> OH^-1 (-14777) +At time : 683 ns Reaction : e_aq^-1 (-4015) + H3O^1 (-7941) -> H^0 (-14778) +At time : 686 ns Reaction : H3O^1 (-10933) + e_aq^-1 (-2292) -> H^0 (-14779) +At time : 687 ns Reaction : OH^-1 (-14063) + H3O^1 (-7741) -> No product +At time : 694 ns Reaction : H2O2^0 (-14075) + e_aq^-1 (-2188) -> OH^-1 (-14780) + °OH^0 (-14781) +At time : 694 ns Reaction : °OH^0 (-13254) + °OH^0 (-7002) -> H2O2^0 (-14782) +At time : 694 ns Reaction : H^0 (-12909) + °OH^0 (-5746) -> No product +At time : 696 ns Reaction : OH^-1 (-14043) + H3O^1 (-7113) -> No product +At time : 699 ns Reaction : H3O^1 (-10398) + OH^-1 (-14148) -> No product +At time : 703 ns Reaction : e_aq^-1 (-2923) + H2O2^0 (-12009) -> OH^-1 (-14783) + °OH^0 (-14784) +At time : 708 ns Reaction : H3O^1 (-7929) + OH^-1 (-14078) -> No product +At time : 710 ns Reaction : H^0 (-14017) + °OH^0 (-13994) -> No product +At time : 713 ns Reaction : °OH^0 (-13732) + °OH^0 (-6894) -> H2O2^0 (-14785) +At time : 716 ns Reaction : OH^-1 (-13654) + H3O^1 (-7991) -> No product +At time : 721 ns Reaction : °OH^0 (-14041) + H^0 (-13916) -> No product +At time : 721 ns Reaction : °OH^0 (-9340) + °OH^0 (-6286) -> H2O2^0 (-14786) +At time : 731 ns Reaction : e_aq^-1 (-4513) + H3O^1 (-8325) -> H^0 (-14787) +At time : 734 ns Reaction : °OH^0 (-9652) + °OH^0 (-6354) -> H2O2^0 (-14788) +At time : 736 ns Reaction : H^0 (-9898) + °OH^0 (-7696) -> No product +At time : 738 ns Reaction : OH^-1 (-14691) + H3O^1 (-5909) -> No product +At time : 740 ns Reaction : H3O^1 (-10971) + OH^-1 (-14764) -> No product +At time : 746 ns Reaction : e_aq^-1 (-3712) + °OH^0 (-6604) -> OH^-1 (-14789) +At time : 749 ns Reaction : OH^-1 (-14663) + H3O^1 (-8764) -> No product +At time : 760 ns Reaction : OH^-1 (-14497) + H3O^1 (-8223) -> No product +At time : 760 ns Reaction : OH^-1 (-14143) + H3O^1 (-7551) -> No product +At time : 761 ns Reaction : OH^-1 (-14126) + H3O^1 (-6911) -> No product +At time : 764 ns Reaction : °OH^0 (-13635) + e_aq^-1 (-5359) -> OH^-1 (-14790) +At time : 767 ns Reaction : H^0 (-12632) + °OH^0 (-6558) -> No product +At time : 773 ns Reaction : H3O^1 (-9815) + OH^-1 (-14455) -> No product +At time : 773 ns Reaction : H3O^1 (-11250) + OH^-1 (-14428) -> No product +At time : 774 ns Reaction : e_aq^-1 (-4875) + H3O^1 (-7099) -> H^0 (-14791) +At time : 787 ns Reaction : °OH^0 (-6860) + °OH^0 (-14759) -> H2O2^0 (-14792) +At time : 792 ns Reaction : e_aq^-1 (-5165) + H3O^1 (-7599) -> H^0 (-14793) +At time : 802 ns Reaction : OH^-1 (-14710) + H3O^1 (-8269) -> No product +At time : 806 ns Reaction : OH^-1 (-13407) + H3O^1 (-6877) -> No product +At time : 807 ns Reaction : H^0 (-14006) + °OH^0 (-14595) -> No product +At time : 807 ns Reaction : H2O2^0 (-12249) + e_aq^-1 (-2214) -> OH^-1 (-14794) + °OH^0 (-14795) +At time : 820 ns Reaction : H3O^1 (-9807) + e_aq^-1 (-2368) -> H^0 (-14796) +At time : 821 ns Reaction : OH^-1 (-14374) + H3O^1 (-8165) -> No product +At time : 824 ns Reaction : e_aq^-1 (-125) + °OH^0 (-9496) -> OH^-1 (-14797) +At time : 832 ns Reaction : H3O^1 (-6065) + OH^-1 (-14019) -> No product +At time : 837 ns Reaction : H^0 (-9950) + °OH^0 (-10970) -> No product +At time : 851 ns Reaction : °OH^0 (-9408) + °OH^0 (-8018) -> H2O2^0 (-14798) +At time : 857 ns Reaction : °OH^0 (-13363) + °OH^0 (-8969) -> H2O2^0 (-14799) +At time : 861 ns Reaction : H3O^1 (-6003) + OH^-1 (-14720) -> No product +At time : 869 ns Reaction : °OH^0 (-10586) + °OH^0 (-13378) -> H2O2^0 (-14800) +At time : 878 ns Reaction : e_aq^-1 (-4009) + H^0 (-14761) -> OH^-1 (-14801) + H_2^0 (-14802) +At time : 882 ns Reaction : °OH^0 (-11069) + H^0 (-13744) -> No product +At time : 885 ns Reaction : H3O^1 (-8317) + OH^-1 (-14403) -> No product +At time : 890.13 ns Reaction : OH^-1 (-14519) + H3O^1 (-8199) -> No product +At time : 892.13 ns Reaction : H3O^1 (-10743) + e_aq^-1 (-3825) -> H^0 (-14803) +At time : 907.13 ns Reaction : H2O2^0 (-11654) + e_aq^-1 (-3812) -> OH^-1 (-14804) + °OH^0 (-14805) +At time : 911.13 ns Reaction : OH^-1 (-14745) + H3O^1 (-8551) -> No product +At time : 924.13 ns Reaction : H^0 (-14249) + H^0 (-9153) -> H_2^0 (-14806) +At time : 931.13 ns Reaction : e_aq^-1 (-819) + H3O^1 (-6199) -> H^0 (-14807) +At time : 933.13 ns Reaction : °OH^0 (-9942) + °OH^0 (-13760) -> H2O2^0 (-14808) +At time : 934.15 ns Reaction : OH^-1 (-13712) + H3O^1 (-5923) -> No product +At time : 936.15 ns Reaction : H^0 (-9465) + °OH^0 (-9248) -> No product +At time : 949.15 ns Reaction : H3O^1 (-7379) + OH^-1 (-14684) -> No product +At time : 957.15 ns Reaction : H^0 (-10805) + °OH^0 (-7774) -> No product +At time : 964.15 ns Reaction : H^0 (-14343) + °OH^0 (-14568) -> No product +At time : 964.15 ns Reaction : OH^-1 (-13618) + H3O^1 (-6577) -> No product +At time : 965.15 ns Reaction : °OH^0 (-14784) + °OH^0 (-7772) -> H2O2^0 (-14809) +At time : 968.15 ns Reaction : H3O^1 (-11041) + OH^-1 (-14758) -> No product +At time : 969.15 ns Reaction : H2O2^0 (-12488) + e_aq^-1 (-5398) -> OH^-1 (-14810) + °OH^0 (-14811) +At time : 971.15 ns Reaction : OH^-1 (-14173) + H3O^1 (-6755) -> No product +At time : 975.15 ns Reaction : °OH^0 (-9339) + °OH^0 (-14652) -> H2O2^0 (-14812) +At time : 981.15 ns Reaction : H3O^1 (-6031) + OH^-1 (-14601) -> No product +At time : 991.15 ns Reaction : H3O^1 (-10697) + OH^-1 (-14777) -> No product +At time : 997.15 ns Reaction : e_aq^-1 (-3808) + °OH^0 (-5846) -> OH^-1 (-14813) +At time : 999.33 ns Reaction : °OH^0 (-14723) + °OH^0 (-14347) -> H2O2^0 (-14814) +At time : 999.33 ns Reaction : H3O^1 (-5917) + OH^-1 (-14235) -> No product *** G4Scheduler ends at time : 1 us ___________________________________ diff --git a/examples/extended/medical/dna/chem3/chem3.out b/examples/extended/medical/dna/chem3/chem3.out index 46f13cc6e8..55ab3a25a4 100644 --- a/examples/extended/medical/dna/chem3/chem3.out +++ b/examples/extended/medical/dna/chem3/chem3.out @@ -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 @@ -30,23 +30,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", @@ -117,7 +118,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 ======== @@ -323,7 +324,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 ====== @@ -339,7 +342,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 @@ -367,19 +370,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -401,23 +406,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -440,19 +449,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -462,19 +473,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== diff --git a/examples/extended/medical/dna/chem4/History b/examples/extended/medical/dna/chem4/History index 6984bd1fea..a48df2dfc1 100644 --- a/examples/extended/medical/dna/chem4/History +++ b/examples/extended/medical/dna/chem4/History @@ -4,6 +4,12 @@ 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-05-05 Hoang Tran (chem4-V11-03-01) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-22 Hoang Tran (chem4-V11-03-00) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + ## 2024-10-14 Hoang Tran (chem4-V11-02-01) - corrected molecule name in chem4 macro file diff --git a/examples/extended/medical/dna/chem4/beam.in b/examples/extended/medical/dna/chem4/beam.in index c5143b4094..ef1ca5aa87 100644 --- a/examples/extended/medical/dna/chem4/beam.in +++ b/examples/extended/medical/dna/chem4/beam.in @@ -1,6 +1,6 @@ #/control/verbose 2 # -#/run/numberOfThreads 10 +/run/numberOfThreads 10 # /process/dna/e-SolvationSubType Ritchie1994 #/process/dna/e-SolvationSubType Meesungnoen2002 diff --git a/examples/extended/medical/dna/chem4/chem4.out b/examples/extended/medical/dna/chem4/chem4.out index c811a3467b..8afcf29d41 100644 --- a/examples/extended/medical/dna/chem4/chem4.out +++ b/examples/extended/medical/dna/chem4/chem4.out @@ -1,4 +1,4 @@ -Seed used : 1745424536 +Seed used : 1750481020 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 @@ -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", @@ -95,6 +96,8 @@ End of Run User Vis Actions: none Some /vis commands (optionally) take a string to specify colour. "/vis/list" to see available colours. +*** /run/numberOfThreads command is issued in sequential mode. +Command is ignored. G4SDManager::AddNewCollection : the collection is registered at 1 G4SDManager::AddNewCollection : the collection is registered at 2 New sensitive detector is registered at / @@ -202,7 +205,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 ======== @@ -408,7 +411,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 ====== @@ -424,7 +429,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 @@ -453,19 +458,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -487,23 +494,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -526,19 +537,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -548,19 +561,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== @@ -666,6 +681,8 @@ H^0 + H^0 -> H_2^0 1.2e+10 0.2265 DNAMolecularStepByStepModel will be used Start event 1 Start event 2 + * PrimaryKiller: aborts event 2, energy loss is too large. + * Energy loss by primary is: 2.8198 keV. Event is aborted if the Eloss is > 2 keV Start event 3 Start event 4 Start event 5 @@ -675,9 +692,9 @@ Start event 8 Start event 9 --------------------End of Global Run----------------------- - The run has 10 events -Number of events recorded by the species scorer = 10 - Total energy deposited in the world volume : 11787 eV + The run has 9 events +Number of events recorded by the species scorer = 9 + Total energy deposited in the world volume : 10113 eV ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/extended/medical/dna/chem4/include/ActionInitialization.hh b/examples/extended/medical/dna/chem4/include/ActionInitialization.hh index f4fb38903f..ccdacf62bd 100644 --- a/examples/extended/medical/dna/chem4/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/chem4/include/ActionInitialization.hh @@ -51,6 +51,9 @@ class ActionInitialization : public G4VUserActionInitialization virtual void BuildForMaster() const; virtual void Build() const; + + private: + void BuildMoleculeCounter() const; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem4/include/EventAction.hh b/examples/extended/medical/dna/chem4/include/EventAction.hh new file mode 100644 index 0000000000..f71354f8b5 --- /dev/null +++ b/examples/extended/medical/dna/chem4/include/EventAction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// +/// \file PhysicsList.hh +/// \brief Definition of the PhysicsList class + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" + +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; + +#endif diff --git a/examples/extended/medical/dna/chem4/src/ActionInitialization.cc b/examples/extended/medical/dna/chem4/src/ActionInitialization.cc index 6798507a4f..b2e4f2fe49 100644 --- a/examples/extended/medical/dna/chem4/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/chem4/src/ActionInitialization.cc @@ -35,16 +35,17 @@ #include "ActionInitialization.hh" -#include "PrimaryGeneratorAction.hh" -#include "RunAction.hh" -#include "StackingAction.hh" -#include "TrackingAction.hh" - #include "G4DNAChemistryManager.hh" #include "G4H2O.hh" #include "G4MoleculeCounter.hh" #include "G4Scheduler.hh" +#include "EventAction.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" +#include "TrackingAction.hh" + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} @@ -58,26 +59,33 @@ ActionInitialization::~ActionInitialization() {} void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); + + ActionInitialization::BuildMoleculeCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(); - // G4MoleculeCounter::Instance()->SetVerbose(2); - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - - // sequential mode - if (G4Threading::IsMultithreadedApplication() == false) { - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); - } - SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); + SetUserAction(new EventAction()); SetUserAction(new StackingAction()); - // SetUserAction(new TrackingAction()); + BuildMoleculeCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::BuildMoleculeCounter() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + G4MoleculeCounterManager::Instance()->SetAccumulateCounterIntoMaster(false); + + auto counter = std::make_unique(); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(1 * ps)); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem4/src/RunAction.cc b/examples/extended/medical/dna/chem4/src/RunAction.cc index 4a90e3ce18..eb6f27fdc3 100644 --- a/examples/extended/medical/dna/chem4/src/RunAction.cc +++ b/examples/extended/medical/dna/chem4/src/RunAction.cc @@ -36,15 +36,16 @@ #include "RunAction.hh" -#include "DetectorConstruction.hh" -#include "PrimaryGeneratorAction.hh" -#include "Run.hh" - +#include "G4DNAChemistryManager.hh" #include "G4Run.hh" #include "G4RunManager.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" +#include "DetectorConstruction.hh" +#include "PrimaryGeneratorAction.hh" +#include "Run.hh" + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction() : G4UserRunAction() {} @@ -65,6 +66,10 @@ G4Run* RunAction::GenerateRun() void RunAction::BeginOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; // informs the runManager to save random number seed @@ -75,6 +80,10 @@ void RunAction::BeginOfRunAction(const G4Run* run) void RunAction::EndOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + G4int nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) return; diff --git a/examples/extended/medical/dna/chem4/src/ScoreSpecies.cc b/examples/extended/medical/dna/chem4/src/ScoreSpecies.cc index c27adc4de9..0507758d50 100644 --- a/examples/extended/medical/dna/chem4/src/ScoreSpecies.cc +++ b/examples/extended/medical/dna/chem4/src/ScoreSpecies.cc @@ -115,17 +115,22 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + // get the first, and in this case only, counter + auto counter = G4MoleculeCounterManager::Instance()->GetMoleculeCounter(0); + if (counter == nullptr) { + G4Exception("ScoreSpecies::EndOfEvent", "BAD_REFERENCE", FatalException, + "The molecule counter could not be received!"); + } - if (species.get() == 0 || species->size() == 0) { + auto indices = counter->GetMapIndices(); + + if (indices.empty()) { G4cout << "No molecule recorded, energy deposited= " << G4BestUnit(fEdep, "Energy") << G4endl; ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } @@ -137,16 +142,16 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) int eventID = G4EventManager::GetEventManager()->GetConstCurrentEvent()->GetEventID(); #endif - for (auto molecule : *species) { + for (auto idx : indices) { for (auto time_mol : fTimeToRecord) { - double n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, time_mol); + double n_mol = counter->GetNbMoleculesAtTime(idx, time_mol); if (n_mol < 0) { G4cerr << "N molecules not valid < 0 " << G4endl; G4Exception("", "N<0", FatalException, ""); } - SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][idx.Molecule]; molInfo.fNumber += n_mol; double gValue = (n_mol / (fEdep / eV)) * 100.; molInfo.fG += gValue; @@ -172,7 +177,6 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) // << ", energy deposited=" << G4BestUnit(fEdep, "Energy") << G4endl; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/.README.txt b/examples/extended/medical/dna/chem5/.README.txt index cea4bda5c2..f22557859c 100644 --- a/examples/extended/medical/dna/chem5/.README.txt +++ b/examples/extended/medical/dna/chem5/.README.txt @@ -155,7 +155,7 @@ The default geometry is constructed in DetectorConstruction class. in the header of each file. Further information is available in Phys. Med. Biol. 63(10) (2018) 105014-12pp. - A gnuplot script (plot.gp) file is provided to display the output data with the experimental data + A gnuplot script (plot.gp) or python script (plot.py) files are provided to display the output data with the experimental data \section CHEM5_s11 HOW TO START diff --git a/examples/extended/medical/dna/chem5/CMakeLists.txt b/examples/extended/medical/dna/chem5/CMakeLists.txt index bda78dd8f6..cb0d152724 100644 --- a/examples/extended/medical/dna/chem5/CMakeLists.txt +++ b/examples/extended/medical/dna/chem5/CMakeLists.txt @@ -10,11 +10,11 @@ project(chem5) # to build a batch mode only executable # option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() +if (WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else () + find_package(Geant4 REQUIRED) +endif () #---------------------------------------------------------------------------- # Setup Geant4 include directories and compile definitions @@ -42,21 +42,24 @@ target_link_libraries(chem5 ${Geant4_LIBRARIES}) # it relies on these scripts being in the current working directory. # file(GLOB CHEM5_SCRIPTS - ${PROJECT_SOURCE_DIR}/*.in - ${PROJECT_SOURCE_DIR}/*.mac) + ${PROJECT_SOURCE_DIR}/*.in + ${PROJECT_SOURCE_DIR}/*.mac + ${PROJECT_SOURCE_DIR}/plot.py + ${PROJECT_SOURCE_DIR}/plot.gp + ${PROJECT_SOURCE_DIR}/data/*.txt) -foreach(_script ${CHEM5_SCRIPTS}) - configure_file( - ${_script} - ${PROJECT_BINARY_DIR}/. - COPYONLY +foreach (_script ${CHEM5_SCRIPTS}) + configure_file( + ${_script} + ${PROJECT_BINARY_DIR}/. + COPYONLY ) -endforeach() +endforeach () #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # -install(TARGETS chem5 DESTINATION bin ) +install(TARGETS chem5 DESTINATION bin) #---------------------------------------------------------------------------- # For internal Geant4 use - but has no effect if you build this diff --git a/examples/extended/medical/dna/chem5/GNUmakefile b/examples/extended/medical/dna/chem5/GNUmakefile deleted file mode 100644 index 616e08f8d4..0000000000 --- a/examples/extended/medical/dna/chem5/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. -# -------------------------------------------------------------- - -name := chem5 -G4TARGET := $(name) -G4EXLIB := true - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -.PHONY: all -all: lib bin - -include $(G4INSTALL)/config/binmake.gmk - -visclean: - rm -f g4*.prim g4*.eps g4*.wrl - rm -f .DAWN_* - diff --git a/examples/extended/medical/dna/chem5/History b/examples/extended/medical/dna/chem5/History index c6ea909339..fe90dcee21 100644 --- a/examples/extended/medical/dna/chem5/History +++ b/examples/extended/medical/dna/chem5/History @@ -4,6 +4,15 @@ 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-05-05 Hoang Tran (chem5-V11-03-02) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-22 Hoang Tran (chem5-V11-03-01) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + +## 2025-04-01 Hoang Tran (chem5-V11-03-00) +- clean up the code, add plot.py script for plotting the output data + ## 2024-09-19 Ivana Hrivnacova (chem5-V11-02-00) - Added HOW TO START section in README with the beam.in, gui.mac macros usage diff --git a/examples/extended/medical/dna/chem5/README b/examples/extended/medical/dna/chem5/README index 47721930f8..90c6edf53b 100644 --- a/examples/extended/medical/dna/chem5/README +++ b/examples/extended/medical/dna/chem5/README @@ -161,7 +161,7 @@ G4EmDNAPhysics_option8 and G4EmDNAChemistry_option1 from the literature is available in data subdirectory, the references are provided in the header of each file. Further information is available in Phys. Med. Biol. 63(10) (2018) 105014-12pp. - A gnuplot script (plot.gp) file is provided to display the output data with the experimental data + A gnuplot script (plot.gp) or python script (plot.py) files are provided to display the output data with the experimental data 11 - HOW TO START ? diff --git a/examples/extended/medical/dna/chem5/chem5.cc b/examples/extended/medical/dna/chem5/chem5.cc index cfe00639b7..9de4668814 100644 --- a/examples/extended/medical/dna/chem5/chem5.cc +++ b/examples/extended/medical/dna/chem5/chem5.cc @@ -58,7 +58,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... using namespace G4DNAPARSER; -CommandLineParser* parser(0); +CommandLineParser* parser(nullptr); long seed = 0; unsigned int noise(); @@ -72,7 +72,7 @@ int main(int argc, char** argv) { // Parse options given in commandLine Parse(argc, argv); - Command* commandLine(0); + Command* commandLine(nullptr); SetSeed(); // Construct the run manager according to whether MT is activated or not @@ -80,9 +80,10 @@ int main(int argc, char** argv) auto* runManager = G4RunManagerFactory::CreateRunManager(); if ((commandLine = parser->GetCommandIfActive("-mt"))) { - int nThreads = 2; + G4int nThreads; if (commandLine->GetOption() == "NMAX") { nThreads = G4Threading::G4GetNumberOfCores(); + G4cout<<"nThreads : "<GetOption()); @@ -113,7 +114,7 @@ int main(int argc, char** argv) // Get the pointer to the User Interface manager G4UImanager* UImanager = G4UImanager::GetUIpointer(); - G4UIExecutive* ui(0); + G4UIExecutive* ui = nullptr; // interactive mode : define UI session if ((commandLine = parser->GetCommandIfActive("-gui"))) { @@ -121,7 +122,7 @@ int main(int argc, char** argv) if (ui->IsGUI()) UImanager->ApplyCommand("/control/execute gui.mac"); - if (parser->GetCommandIfActive("-novis") == 0) { + if (parser->GetCommandIfActive("-novis") == nullptr) { // visualization is used by default if ((commandLine = parser->GetCommandIfActive("-vis"))) { // select a visualization driver if needed (e.g. HepFile) @@ -184,7 +185,7 @@ bool IsBracket(char c) void SetSeed() { - Command* commandLine(0); + Command* commandLine(nullptr); if ((commandLine = parser->GetCommandIfActive("-seed"))) { seed = atoi(commandLine->GetOption().c_str()); @@ -249,7 +250,7 @@ unsigned int noise() else { random_seed_a = 0; } - random_seed_b = std::time(0); + random_seed_b = std::time(nullptr); random_seed = random_seed_a xor random_seed_b; return random_seed; #endif diff --git a/examples/extended/medical/dna/chem5/chem5.out b/examples/extended/medical/dna/chem5/chem5.out index aa4cd15db0..416afcdb65 100644 --- a/examples/extended/medical/dna/chem5/chem5.out +++ b/examples/extended/medical/dna/chem5/chem5.out @@ -1,4 +1,4 @@ -Seed used : 1745424536 +Seed used : 1750481035 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 @@ -53,7 +53,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 ======== @@ -111,7 +111,7 @@ Type of PIXE cross section for e+- Livermore ======================================================================= ====== DNA Physics Parameters ======== ======================================================================= -Use fast sampling in DNA models 1 +Use fast sampling in DNA models 0 Use Stationary option in DNA models 0 Use DNA with multiple scattering of e- 0 Use DNA e- solvation model type 11001 @@ -128,23 +128,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", @@ -215,7 +216,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 ======== @@ -273,7 +274,7 @@ Type of PIXE cross section for e+- Livermore ======================================================================= ====== DNA Physics Parameters ======== ======================================================================= -Use fast sampling in DNA models 1 +Use fast sampling in DNA models 0 Use Stationary option in DNA models 0 Use DNA with multiple scattering of e- 0 Use DNA e- solvation model type 11001 @@ -328,26 +329,27 @@ eBrem: for e- XStype:4 SubType=3 e-_G4DNAElectronSolvation: for e- SubType=58 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNAOneStepThermalizationModel_Ritchie1994 : Emin= 0 eV Emax= 11 eV - DummyModel : Emin= 11 eV Emax= 600 MeV +DNAOneStepThermalizationModel_Ritchie1994 : Emin= 0 eV Emax= 10 eV + DummyModel : Emin= 10 eV Emax= 600 MeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm e-_G4DNAElastic: for e- SubType=51 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNACPA100ElasticModel : Emin= 0 eV Emax= 250 keV -DNAChampionElasticModel : Emin= 250 keV Emax= 1 MeV +DNAUeharaScreenedRutherfordElasticModel : Emin= 0 eV Emax= 1 MeV DummyModel : Emin= 1 MeV Emax= 600 MeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm e-_G4DNAExcitation: for e- SubType=52 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNABornExcitationModel : Emin= 0 eV Emax= 1 MeV +DNAEmfietzoglouExcitationModel : Emin= 0 eV Emax= 10 keV +DNABornExcitationModel : Emin= 10 keV Emax= 1 MeV DummyModel : Emin= 1 MeV Emax= 600 MeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm e-_G4DNAIonisation: for e- SubType=53 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNABornIonisationModel : Emin= 0 eV Emax= 1 MeV deltaBorn Fluo +DNAEmfietzoglouIonisationModel : Emin= 0 eV Emax= 10 keV deltaBorn Fluo +DNABornIonisationModel : Emin= 10 keV Emax= 1 MeV deltaBorn Fluo DummyModel : Emin= 1 MeV Emax= 600 MeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm @@ -406,23 +408,23 @@ proton_G4DNAElastic: for proton SubType=51 BuildTable=0 proton_G4DNAExcitation: for proton SubType=52 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV -DNABornExcitationModel : Emin= 500 keV Emax= 100 MeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 100 MeV DNARPWBAExcitationModel : Emin= 100 MeV 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 proton_G4DNAIonisation: for proton SubType=53 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 500 keV deltaRudd Fluo -DNABornIonisationModel : Emin= 500 keV Emax= 100 MeV deltaBorn Fluo +DNARuddIonisationDynamicModel : Emin= 0 eV Emax= 100 MeV deltaRudd Fluo DNARPWBAIonisationModel : Emin= 100 MeV Emax= 300 MeV deltaBorn 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 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 ====== @@ -438,7 +440,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 @@ -466,19 +468,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationDynamicModel : 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 ====== @@ -500,23 +504,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationDynamicModel : 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 ====== @@ -539,19 +547,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationDynamicModel : 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 ====== @@ -561,19 +571,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +DNARuddIonisationDynamicModel : 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 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 ====== diff --git a/examples/extended/medical/dna/chem5/include/ActionInitialization.hh b/examples/extended/medical/dna/chem5/include/ActionInitialization.hh index 9f4612eb8c..461eb2205e 100644 --- a/examples/extended/medical/dna/chem5/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/chem5/include/ActionInitialization.hh @@ -47,11 +47,12 @@ class DetectorConstruction; class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(); - virtual ~ActionInitialization(); + ActionInitialization() = default; + ~ActionInitialization() override = default; + void BuildMoleculeCounters() const; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/include/CommandLineParser.hh b/examples/extended/medical/dna/chem5/include/CommandLineParser.hh index cd61773b6d..d447010913 100644 --- a/examples/extended/medical/dna/chem5/include/CommandLineParser.hh +++ b/examples/extended/medical/dna/chem5/include/CommandLineParser.hh @@ -80,20 +80,20 @@ class Command class CommandWithOption : public Command { public: - virtual const G4String& GetOption() { return fOption; } - virtual const G4String& GetOptionName() { return fOptionName; } - virtual const G4String& GetDefaultOption() { return fDefaultOption; } + const G4String& GetOption() override { return fOption; } + const G4String& GetOptionName() override { return fOptionName; } + const G4String& GetDefaultOption() override { return fDefaultOption; } - virtual void SetOption(const G4String& in_op) { fOption = in_op; } - virtual void SetOptionName(const G4String& in_op) { fOptionName = in_op; } - virtual void SetDefaultOption(const G4String& in_op) { fDefaultOption = in_op; } + void SetOption(const G4String& in_op) override { fOption = in_op; } + void SetOptionName(const G4String& in_op) override { fOptionName = in_op; } + void SetDefaultOption(const G4String& in_op) override { fDefaultOption = in_op; } private: friend class CommandLineParser; CommandWithOption(Type, const G4String& description = "", const G4String& defaultOption = "", const G4String& optionName = "optionName"); - virtual ~CommandWithOption() { ; } + ~CommandWithOption() override = default; G4String fOption; G4String fDefaultOption; @@ -104,19 +104,19 @@ class CommandLineParser { static CommandLineParser* fpInstance; std::map fCommandMap; - G4bool fOptionsWereSetup; - G4int fMaxMarkerLength; - G4int fMaxOptionNameLength; - G4int fVerbose; + G4bool fOptionsWereSetup = false; + G4int fMaxMarkerLength = 0; + G4int fMaxOptionNameLength = 0; + G4int fVerbose = 0; public: static CommandLineParser* GetParser(); CommandLineParser(); ~CommandLineParser(); static void DeleteInstance(); - int Parse(int& argc, char** argv); + G4int Parse(int& argc, char** argv); void PrintHelp(); - bool CheckIfNotHandledOptionsExists(int& argc, char** argv); + G4bool CheckIfNotHandledOptionsExists(int& argc, char** argv); void CorrectRemainingOptions(int& argc, char** argv); void AddCommand(const G4String& marker, Command::Type, const G4String& description = "", const G4String& defaultOption = "", const G4String& optionName = ""); diff --git a/examples/extended/medical/dna/chem5/include/DetectorConstruction.hh b/examples/extended/medical/dna/chem5/include/DetectorConstruction.hh index 17ff89d8ec..19ceecdc9a 100644 --- a/examples/extended/medical/dna/chem5/include/DetectorConstruction.hh +++ b/examples/extended/medical/dna/chem5/include/DetectorConstruction.hh @@ -54,12 +54,12 @@ class G4LogicalVolume; class DetectorConstruction : public G4VUserDetectorConstruction { public: - DetectorConstruction(); - virtual ~DetectorConstruction(); + DetectorConstruction() = default; + ~DetectorConstruction() override = default; public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/include/EventAction.hh b/examples/extended/medical/dna/chem5/include/EventAction.hh new file mode 100644 index 0000000000..8362a7560d --- /dev/null +++ b/examples/extended/medical/dna/chem5/include/EventAction.hh @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" + +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; + +#endif \ No newline at end of file diff --git a/examples/extended/medical/dna/chem5/include/PhysicsList.hh b/examples/extended/medical/dna/chem5/include/PhysicsList.hh index a374dfee24..c7c5d69ecd 100644 --- a/examples/extended/medical/dna/chem5/include/PhysicsList.hh +++ b/examples/extended/medical/dna/chem5/include/PhysicsList.hh @@ -48,7 +48,7 @@ class G4EmDNAChemistry_option1; class PhysicsList : public G4VModularPhysicsList { public: - explicit PhysicsList(); + PhysicsList(); ~PhysicsList() override; void ConstructParticle() override; @@ -57,9 +57,9 @@ class PhysicsList : public G4VModularPhysicsList void RegisterConstructor(const G4String& name); private: - G4VPhysicsConstructor* fEmDNAPhysicsList; - G4EmDNAChemistry* fEmDNAChemistryList; - G4EmDNAChemistry_option1* fEmDNAChemistryList1; + G4VPhysicsConstructor* fEmDNAPhysicsList = nullptr; + G4EmDNAChemistry* fEmDNAChemistryList = nullptr; + G4EmDNAChemistry_option1* fEmDNAChemistryList1 = nullptr; G4String fPhysDNAName; }; #endif diff --git a/examples/extended/medical/dna/chem5/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/chem5/include/PrimaryGeneratorAction.hh index 9dd82208ff..c2f4e5d42d 100644 --- a/examples/extended/medical/dna/chem5/include/PrimaryGeneratorAction.hh +++ b/examples/extended/medical/dna/chem5/include/PrimaryGeneratorAction.hh @@ -50,12 +50,12 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); - virtual ~PrimaryGeneratorAction(); - virtual void GeneratePrimaries(G4Event*); + ~PrimaryGeneratorAction() override; + void GeneratePrimaries(G4Event*) override; const G4ParticleGun* GetParticleGun() const { return fParticleGun; } private: - G4ParticleGun* fParticleGun; + G4ParticleGun* fParticleGun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/include/PrimaryKiller.hh b/examples/extended/medical/dna/chem5/include/PrimaryKiller.hh index ad74c33ab9..520daa7cca 100644 --- a/examples/extended/medical/dna/chem5/include/PrimaryKiller.hh +++ b/examples/extended/medical/dna/chem5/include/PrimaryKiller.hh @@ -51,46 +51,41 @@ class G4UIcmdWithADoubleAndUnit; class PrimaryKiller : public G4VPrimitiveScorer, public G4UImessenger { private: - double fELoss; // cumulated energy loss by the primary + G4double fELoss = 0; // cumulated energy loss by the primary - double fELossRange_Min; // fELoss from which the primary is killed - double fELossRange_Max; // fELoss from which the event is aborted - double fKineticE_Min; // kinetic energy below which the primary is killed - - G4UIcmdWithADoubleAndUnit* fpELossUI; - G4UIcmdWithADoubleAndUnit* fpAbortEventIfELossUpperThan; - G4UIcmdWithADoubleAndUnit* fpMinKineticE; + G4double fELossRange_Min = DBL_MAX; // fELoss from which the primary is killed + G4double fELossRange_Max = DBL_MAX; // fELoss from which the event is aborted + G4double fKineticE_Min = 0; // kinetic energy below which the primary is killed + G4UIcmdWithADoubleAndUnit* fpELossUI = nullptr; + G4UIcmdWithADoubleAndUnit* fpAbortEventIfELossUpperThan = nullptr; public: - PrimaryKiller(G4String name, G4int depth = 0); + explicit PrimaryKiller(G4String name, G4int depth = 0); - virtual ~PrimaryKiller(); + ~PrimaryKiller() override = default; /** Set energy under which the particle should be killed*/ - inline void SetEnergyThreshold(double energy) { fKineticE_Min = energy; } + inline void SetEnergyThreshold(G4double energy) { fKineticE_Min = energy; } /** Set the energy loss from which the primary is killed*/ - inline void SetMinLossEnergyLimit(double energy) { fELossRange_Min = energy; } + inline void SetMinLossEnergyLimit(G4double energy) { fELossRange_Min = energy; } /** Set the energy loss from which the event is aborted*/ - inline void SetMaxLossEnergyLimit(double energy) { fELossRange_Max = energy; } + inline void SetMaxLossEnergyLimit(G4double energy) { fELossRange_Max = energy; } /** Method related to G4UImessenger used to control energy cuts through macro file */ - virtual void SetNewValue(G4UIcommand* command, G4String newValue); + void SetNewValue(G4UIcommand* command, G4String newValue) override; protected: - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void Clear(); - virtual void DrawAll(); - virtual void PrintAll(); + void Initialize(G4HCofThisEvent*) override; + inline void Clear(){ fELoss = 0;} }; #endif diff --git a/examples/extended/medical/dna/chem5/include/Run.hh b/examples/extended/medical/dna/chem5/include/Run.hh index 14f2a2be8a..dc9e539dc8 100644 --- a/examples/extended/medical/dna/chem5/include/Run.hh +++ b/examples/extended/medical/dna/chem5/include/Run.hh @@ -54,17 +54,17 @@ class Run : public G4Run { public: Run(); - virtual ~Run(); + ~Run() override = default; - virtual void RecordEvent(const G4Event*); - virtual void Merge(const G4Run*); + void RecordEvent(const G4Event*) override; + void Merge(const G4Run*) override; G4double GetSumDose() const { return fSumEne; } G4VPrimitiveScorer* GetPrimitiveScorer() const { return fScorerRun; } private: - G4double fSumEne; - G4VPrimitiveScorer* fScorerRun; + G4double fSumEne = 0; + G4VPrimitiveScorer* fScorerRun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/include/RunAction.hh b/examples/extended/medical/dna/chem5/include/RunAction.hh index 0c57592c92..2632c49c78 100644 --- a/examples/extended/medical/dna/chem5/include/RunAction.hh +++ b/examples/extended/medical/dna/chem5/include/RunAction.hh @@ -48,15 +48,15 @@ class DetectorConstruction; class RunAction : public G4UserRunAction { public: - RunAction(); + RunAction() = default; // TIPs: please avoid constructors with arguments // all data can be retrieved from G4RunManager // or others: G4SDManager::FindSensitiveDetector - virtual ~RunAction(); + ~RunAction() override = default; - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/include/ScoreSpecies.hh b/examples/extended/medical/dna/chem5/include/ScoreSpecies.hh index 492bd6ea72..3e93b2a598 100644 --- a/examples/extended/medical/dna/chem5/include/ScoreSpecies.hh +++ b/examples/extended/medical/dna/chem5/include/ScoreSpecies.hh @@ -54,9 +54,9 @@ class G4MolecularConfiguration; class ScoreSpecies : public G4VPrimitiveScorer { public: - ScoreSpecies(G4String name, G4int depth = 0); + explicit ScoreSpecies(G4String name, G4int depth = 0); - virtual ~ScoreSpecies(); + ~ScoreSpecies() override = default; /** Add a time at which the number of species should be recorded. Default times are set up to 1 microsecond.*/ @@ -66,19 +66,14 @@ class ScoreSpecies : public G4VPrimitiveScorer inline void ClearTimeToRecord() { fTimeToRecord.clear(); } /** Get number of recorded events*/ - inline int GetNumberOfRecordedEvents() const { return fNEvent; } + inline G4int GetNumberOfRecordedEvents() const { return fNEvent; } /** Write results to an text file*/ void ASCII(); struct SpeciesInfo { - SpeciesInfo() - { - fNumber = 0; - fG = 0.; - fG2 = 0.; - } + SpeciesInfo() = default; SpeciesInfo(const SpeciesInfo& right) // Species A(B); { fNumber = right.fNumber; @@ -93,39 +88,38 @@ class ScoreSpecies : public G4VPrimitiveScorer fG2 = right.fG2; return *this; } - int fNumber; - double fG; - double fG2; + G4int fNumber = 0; + G4double fG = 0; + G4double fG2 = 0; }; private: - typedef const G4MolecularConfiguration Species; - typedef std::map InnerSpeciesMap; - typedef std::map SpeciesMap; + using Species = const G4MolecularConfiguration; + using InnerSpeciesMap = std::map; + using SpeciesMap = std::map ; SpeciesMap fSpeciesInfoPerTime; std::set fTimeToRecord; - int fNEvent; // number of processed events - double fEdep; // total energy deposition + G4int fNEvent = 0; // number of processed events + G4double fEdep = 0; // total energy deposition protected: - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void DrawAll(); - virtual void PrintAll(); + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void PrintAll() override; /** Method used in multithreading mode in order to merge the results*/ - virtual void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*); - virtual void OutputAndClear(); + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*); + void OutputAndClear(); SpeciesMap GetSpeciesInfo() { return fSpeciesInfoPerTime; } private: - G4int fHCID; - G4THitsMap* fEvtMap; + G4int fHCID = -1; + G4THitsMap* fEvtMap = nullptr; }; #endif diff --git a/examples/extended/medical/dna/chem5/include/StackingAction.hh b/examples/extended/medical/dna/chem5/include/StackingAction.hh index 9304d4df07..35bd6120e4 100644 --- a/examples/extended/medical/dna/chem5/include/StackingAction.hh +++ b/examples/extended/medical/dna/chem5/include/StackingAction.hh @@ -47,9 +47,9 @@ class StackingAction : public G4UserStackingAction { public: - StackingAction(); - virtual ~StackingAction(); - virtual void NewStage(); + StackingAction() = default; + ~StackingAction() override = default; + void NewStage() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/plot.py b/examples/extended/medical/dna/chem5/plot.py new file mode 100644 index 0000000000..def3c7b09b --- /dev/null +++ b/examples/extended/medical/dna/chem5/plot.py @@ -0,0 +1,69 @@ +import numpy as np +import matplotlib.pyplot as plt +import pandas as pd + +# Load data from Species.txt +fileName1 = "Species.txt" +data = pd.read_csv(fileName1, delim_whitespace=True, header=None, names=["Time", "Value", "Err", "Species"], + comment="#") + +# Load data from e_aq.txt +fileName2 = "e_aq.txt" +data_eaq = pd.read_csv(fileName2, delim_whitespace=True, header=None, names=["Time", "Value", "Err"], comment="#") +data_eaq["Species"] = "e_aq^-1" # Assign species name + +# Load data from OH.txt +fileName3 = "OH.txt" +data_oh = pd.read_csv(fileName3, delim_whitespace=True, header=None, names=["Time", "Value", "Err"], comment="#") +data_oh["Species"] = "°OH^0" # Assign species name + +# Log scale transformation (avoid log(0) error) +data["Time"] = np.log10(data["Time"].replace(0, np.nan)) +data_eaq["Time"] = np.log10(data_eaq["Time"].replace(0, np.nan)) +data_oh["Time"] = np.log10(data_oh["Time"].replace(0, np.nan)) + +# Define species to plot with LaTeX formatting +species_list = ["°OH^0", "e_aq^-1", "H3O^1", "H2O2^0", "H_2^0", "H^0"] +labels = [ + r"$\mathrm{\cdot OH}$", # OH radical + r"$\mathrm{e^-_{aq}}$", # Aqueous electron + r"$\mathrm{H_3O^+}$", # Hydronium ion + r"$\mathrm{H_2O_2}$", # Hydrogen peroxide + r"$\mathrm{H_2}$", # Molecular hydrogen + r"$\mathrm{H^\bullet}$" # Hydrogen radical +] +marker_styles = ["s", "^"] # Square (e_aq), Triangle (OH) + +# Create figure and axes +fig, axes = plt.subplots(2, 3, figsize=(14, 8), sharex=True) +axes = axes.flatten() + +for i, (species, label) in enumerate(zip(species_list, labels)): + ax = axes[i] + subset = data[data["Species"] == species] + + if not subset.empty: + ax.plot(subset["Time"], subset["Value"], linestyle='-', marker='o', label="Simulation", color='black') + ax.errorbar(subset["Time"], subset["Value"], yerr=subset["Err"], fmt='o', capsize=5, color='black') + + # Add e_aq.txt as additional points + if species == "e_aq^-1": + ax.scatter(data_eaq["Time"], data_eaq["Value"], marker=marker_styles[0], color='red', + label=r"$\mathrm{e^-_{aq} \ exp}$") + + # Add OH.txt as additional points + if species == "°OH^0": + ax.scatter(data_oh["Time"], data_oh["Value"], marker=marker_styles[1], color='blue', + label=r"$\mathrm{\cdot OH \ exp}$") + + ax.set_title(label, fontsize=14) + ax.set_yscale("linear") + ax.grid(True) + ax.legend() + +# Set common labels +fig.text(0.5, 0.001, r"$\mathrm{Time \ (log(ps))}$", ha='center', fontsize=14) +fig.text(0.005, 0.5, r"$\mathrm{G(Species/100 \ eV)}$", va='center', rotation='vertical', fontsize=14) + +plt.tight_layout() +plt.show() diff --git a/examples/extended/medical/dna/chem5/src/ActionInitialization.cc b/examples/extended/medical/dna/chem5/src/ActionInitialization.cc index 425777001a..c44ecc6a50 100644 --- a/examples/extended/medical/dna/chem5/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/chem5/src/ActionInitialization.cc @@ -39,43 +39,42 @@ #include "PrimaryGeneratorAction.hh" #include "RunAction.hh" #include "StackingAction.hh" - +#include "EventAction.hh" #include "G4DNAChemistryManager.hh" #include "G4H2O.hh" #include "G4MoleculeCounter.hh" -#include "G4Scheduler.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); + BuildMoleculeCounters(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(); - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - - // sequential mode - if (G4Threading::IsMultithreadedApplication() == false) { - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); - } - SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); + SetUserAction(new EventAction()); SetUserAction(new StackingAction()); + BuildMoleculeCounters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::BuildMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + G4MoleculeCounterManager::Instance()->SetAccumulateCounterIntoMaster(false); + + auto counter = std::make_unique(); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(1 * ps)); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/src/CommandLineParser.cc b/examples/extended/medical/dna/chem5/src/CommandLineParser.cc index 645cf29a76..bda000f767 100644 --- a/examples/extended/medical/dna/chem5/src/CommandLineParser.cc +++ b/examples/extended/medical/dna/chem5/src/CommandLineParser.cc @@ -43,7 +43,7 @@ using namespace std; using namespace G4DNAPARSER; -CommandLineParser* CommandLineParser::fpInstance(0); +CommandLineParser* CommandLineParser::fpInstance(nullptr); G4String Command::fNoOption = "NoOption"; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -57,16 +57,10 @@ inline bool MATCH(const char* a, const char* b) CommandLineParser::CommandLineParser() { - // G4cout << "############ NEW PARSE ##########" << G4endl; fpInstance = this; - fOptionsWereSetup = false; - fMaxMarkerLength = 0; - fMaxOptionNameLength = 0; AddCommand("--help", Command::WithoutOption, "Print this help"); AddCommand("-h", Command::WithoutOption, "Print this help"); AddCommand("&", Command::WithoutOption); - - fVerbose = 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -81,9 +75,9 @@ CommandLineParser* CommandLineParser::GetParser() CommandLineParser::~CommandLineParser() { - std::map::iterator it = fCommandMap.begin(); + auto it = fCommandMap.begin(); for (; it != fCommandMap.end(); it++) { - if (it->second) delete it->second; + delete it->second; } } @@ -93,7 +87,7 @@ void CommandLineParser::DeleteInstance() { if (fpInstance) { delete fpInstance; - fpInstance = 0; + fpInstance = nullptr; } } @@ -119,15 +113,14 @@ CommandWithOption::CommandWithOption(Command::Type commandType, const G4String& //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -int CommandLineParser::Parse(int& argc, char** argv) +G4int CommandLineParser::Parse(int& argc, char** argv) { - // G4cout << "Parse " << G4endl; static char null[1] = {""}; - int firstArgc = argc; + G4int firstArgc = argc; - for (int i = 1; i < firstArgc; i++) { - Command* command = FindCommand(argv[i]); - if (command == 0) continue; + for (G4int i = 1; i < firstArgc; i++) { + auto command = FindCommand(argv[i]); + if (command == nullptr) continue; if (fVerbose) G4cout << "Command : " << argv[i] << G4endl; @@ -143,7 +136,7 @@ int CommandLineParser::Parse(int& argc, char** argv) if (command->fType == Command::WithOption) { if (fVerbose) G4cout << "WithOption" << G4endl; - if (i + 1 > firstArgc || argv[i + 1] == 0 || argv[i + 1][0] == '-') { + if (i + 1 > firstArgc || argv[i + 1] == nullptr || argv[i + 1][0] == '-') { G4cerr << "An command line option is missing for " << marker << G4endl; abort(); } @@ -158,7 +151,7 @@ int CommandLineParser::Parse(int& argc, char** argv) if (i + 1 < firstArgc) { G4String buffer = (const char*)strdup(argv[i + 1]); - if (buffer.empty() == false) { + if (!buffer.empty()) { if (buffer.at(0) != '-' && buffer.at(0) != '&' && buffer.at(0) != '>' && buffer.at(0) != '|') { @@ -181,7 +174,7 @@ int CommandLineParser::Parse(int& argc, char** argv) } CorrectRemainingOptions(argc, argv); - Command* commandLine(0); + Command* commandLine(nullptr); if ((commandLine = GetCommandIfActive("--help")) || (commandLine = GetCommandIfActive("-h"))) { G4cout << "Usage : " << argv[0] << " [OPTIONS]" << G4endl; PrintHelp(); @@ -197,7 +190,7 @@ void CommandLineParser::PrintHelp() { std::map::iterator it; - int maxFieldLength = fMaxMarkerLength + fMaxOptionNameLength + 4; + G4int maxFieldLength = fMaxMarkerLength + fMaxOptionNameLength + 4; G4cout << "Options: " << G4endl; @@ -220,9 +213,7 @@ void CommandLineParser::PrintHelp() if (command->GetDefaultOption() != "") { toPrint += " \"" + command->GetDefaultOption() + "\""; } - G4cout << toPrint; - G4cout << command->GetDescription() << G4endl; } } @@ -233,8 +224,8 @@ void CommandLineParser::PrintHelp() void CommandLineParser::CorrectRemainingOptions(int& argc, char** argv) { // remove handled arguments from argument array - int j = 0; - for (int i = 0; i < argc; i++) { + G4int j = 0; + for (G4int i = 0; i < argc; i++) { if (strcmp(argv[i], "")) { argv[j] = argv[i]; j++; @@ -249,9 +240,7 @@ void CommandLineParser::AddCommand(const G4String& marker, Command::Type type, const G4String& description, const G4String& defaultOption, const G4String& optionName) { - // G4cout << "Add command : "<< marker << G4endl; - - Command* command = 0; + Command* command = nullptr; switch (type) { case Command::WithoutOption: command = new Command(type, description); @@ -264,46 +253,17 @@ void CommandLineParser::AddCommand(const G4String& marker, Command::Type type, break; } - if ((int)marker.length() > fMaxMarkerLength) fMaxMarkerLength = marker.length(); + if ((G4int)marker.length() > fMaxMarkerLength) fMaxMarkerLength = marker.length(); fCommandMap.insert(make_pair(marker, command)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -/* -// Add one command but multiple markers -void Parser::AddCommand(vector markers, - CommandType type, - const G4String& description, - const G4String& optionName) -{ - // G4cout << "Add command : "<< marker << G4endl; - Command* command = new Command(type, description, optionName); - - for (size_t i = 0; i < markers.size; i++) - { - G4String marker = markers[i]; - if ((int) marker.length() > fMaxMarkerLength) - { - fMaxMarkerLength = marker.length(); - } - if ((int) optionName.length() > fMaxOptionNameLength) - { - fMaxOptionNameLength = optionName.length(); - } - fCommandMap.insert(make_pair(marker, command)); - } -} -*/ - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - Command* CommandLineParser::FindCommand(const G4String& marker) { - std::map::iterator it = fCommandMap.find(marker); + auto it = fCommandMap.find(marker); if (it == fCommandMap.end()) { - // G4cerr << "command not found" << G4endl; - return 0; + return nullptr; } return it->second; } @@ -314,24 +274,17 @@ Command* CommandLineParser::GetCommandIfActive(const G4String& marker) { Command* command = FindCommand(marker); if (command) { - // G4cout << "Command found : "<< marker << G4endl; - if (command->fActive) { - // G4cout << "Command Active" << G4endl; return command; } - // else - // G4cout <<"Command not active" << G4endl; } else { G4ExceptionDescription description; description << "You try to retrieve a command that was not registered : " << marker << G4endl; G4Exception("CommandLineParser::GetCommandIfActive", "COMMAND LINE NOT DEFINED", FatalException, description, ""); - // If you are using this class outside of Geant4, use exit(-1) instead - // exit(-1); } - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/src/DetectorConstruction.cc b/examples/extended/medical/dna/chem5/src/DetectorConstruction.cc index c97dbd7b44..a2e950d96c 100644 --- a/examples/extended/medical/dna/chem5/src/DetectorConstruction.cc +++ b/examples/extended/medical/dna/chem5/src/DetectorConstruction.cc @@ -42,10 +42,7 @@ #include "G4LogicalVolume.hh" #include "G4MultiFunctionalDetector.hh" #include "G4NistManager.hh" -#include "G4PSDoseDeposit.hh" -#include "G4PSEnergyDeposit.hh" #include "G4PVPlacement.hh" -#include "G4PhysicalConstants.hh" #include "G4SDManager.hh" #include "G4SystemOfUnits.hh" #include "G4VPrimitiveScorer.hh" @@ -53,41 +50,33 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -DetectorConstruction::~DetectorConstruction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4VPhysicalVolume* DetectorConstruction::Construct() { // Water is defined from NIST material database - G4NistManager* man = G4NistManager::Instance(); - G4Material* water = man->FindOrBuildMaterial("G4_WATER"); + auto man = G4NistManager::Instance(); + auto water = man->FindOrBuildMaterial("G4_WATER"); // // World // - double world_sizeXYZ = 1. * kilometer; + auto world_sizeXYZ = 1. * kilometer; - G4Box* solidWorld = + auto solidWorld = new G4Box("World", 0.5 * world_sizeXYZ, 0.5 * world_sizeXYZ, 0.5 * world_sizeXYZ); - G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWorld, water, "World"); + auto logicWorld = new G4LogicalVolume(solidWorld, water, "World"); - G4VPhysicalVolume* physWorld = new G4PVPlacement(0, // no rotation + auto physWorld = new G4PVPlacement(nullptr, // no rotation G4ThreeVector(), // its position at (0,0,0) logicWorld, // its logical volume "World", // its name - 0, // its mother volume + nullptr, // its mother volume false, // no boolean operation 0, // copy number true); // checking overlaps // Visualization attributes - G4VisAttributes* worldVisAtt = new G4VisAttributes(G4Colour(.5, 1.0, .5)); + auto worldVisAtt = new G4VisAttributes(G4Colour(.5, 1.0, .5)); worldVisAtt->SetVisibility(true); logicWorld->SetVisAttributes(worldVisAtt); @@ -103,14 +92,12 @@ void DetectorConstruction::ConstructSDandField() // declare World as a MultiFunctionalDetector scorer // - G4MultiFunctionalDetector* mfDetector = new G4MultiFunctionalDetector("mfDetector"); + auto mfDetector = new G4MultiFunctionalDetector("mfDetector"); //-- // Kill primary track after a chosen energy loss OR under a chosen // kinetic energy - PrimaryKiller* primaryKiller = new PrimaryKiller("PrimaryKiller"); - primaryKiller->SetMinLossEnergyLimit(500. * eV); // default value - primaryKiller->SetMaxLossEnergyLimit(1. * eV); // default value + auto primaryKiller = new PrimaryKiller("PrimaryKiller"); mfDetector->RegisterPrimitive(primaryKiller); //-- @@ -118,7 +105,7 @@ void DetectorConstruction::ConstructSDandField() // - scores number of species over time // - score the total energy deposition // - compute the radiochemical yields (G values) - G4VPrimitiveScorer* primitivSpecies = new ScoreSpecies("Species"); + auto primitivSpecies = new ScoreSpecies("Species"); mfDetector->RegisterPrimitive(primitivSpecies); G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); SetSensitiveDetector("World", mfDetector); diff --git a/examples/extended/medical/dna/chem5/src/PhysicsList.cc b/examples/extended/medical/dna/chem5/src/PhysicsList.cc index 95c4338c6b..87c7e0c325 100644 --- a/examples/extended/medical/dna/chem5/src/PhysicsList.cc +++ b/examples/extended/medical/dna/chem5/src/PhysicsList.cc @@ -51,28 +51,22 @@ #include "G4EmDNAPhysics_option7.hh" #include "G4EmDNAPhysics_option8.hh" #include "G4EmParameters.hh" -#include "G4PhysicsConstructorRegistry.hh" #include "G4SystemOfUnits.hh" using namespace G4DNAPARSER; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() - : G4VModularPhysicsList(), - fEmDNAPhysicsList(nullptr), - fEmDNAChemistryList(nullptr), - fEmDNAChemistryList1(nullptr), - fPhysDNAName("") +PhysicsList::PhysicsList(): G4VModularPhysicsList() { - G4double currentDefaultCut = 1. * nanometer; + auto currentDefaultCut = 1. * nanometer; // fixe lower limit for cut G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); SetDefaultCutValue(currentDefaultCut); SetVerboseLevel(1); RegisterConstructor("G4EmDNAPhysics_option8"); - if (CommandLineParser::GetParser()->GetCommandIfActive("-chemOFF") == 0) { + if (CommandLineParser::GetParser()->GetCommandIfActive("-chemOFF") == nullptr) { RegisterConstructor("G4EmDNAChemistry_option1"); } G4EmParameters::Instance()->SetDNAeSolvationSubType(fRitchie1994eSolvation); diff --git a/examples/extended/medical/dna/chem5/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/chem5/src/PrimaryGeneratorAction.cc index f3ebe4d851..86d00bcb42 100644 --- a/examples/extended/medical/dna/chem5/src/PrimaryGeneratorAction.cc +++ b/examples/extended/medical/dna/chem5/src/PrimaryGeneratorAction.cc @@ -37,7 +37,6 @@ #include "PrimaryGeneratorAction.hh" -#include "G4ChargedGeantino.hh" #include "G4Event.hh" #include "G4IonTable.hh" #include "G4ParticleDefinition.hh" @@ -50,14 +49,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction(), fParticleGun(0) +PrimaryGeneratorAction::PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() { - G4int n_particle = 1; + auto n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); // default particle kinematic - G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); - G4ParticleDefinition* particle = particleTable->FindParticle("e-"); + auto particleTable = G4ParticleTable::GetParticleTable(); + auto particle = particleTable->FindParticle("e-"); fParticleGun->SetParticleDefinition(particle); fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., 0.)); fParticleGun->SetParticleEnergy(100 * keV); diff --git a/examples/extended/medical/dna/chem5/src/PrimaryKiller.cc b/examples/extended/medical/dna/chem5/src/PrimaryKiller.cc index 639564e6ee..0fbe954569 100644 --- a/examples/extended/medical/dna/chem5/src/PrimaryKiller.cc +++ b/examples/extended/medical/dna/chem5/src/PrimaryKiller.cc @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include @@ -55,24 +54,9 @@ PrimaryKiller::PrimaryKiller(G4String name, G4int depth) : G4VPrimitiveScorer(name, depth), G4UImessenger() { - fELoss = 0.; // cumulated energy for current event - - fELossRange_Min = DBL_MAX; // fELoss from which the primary is killed - fELossRange_Max = DBL_MAX; // fELoss from which the event is aborted - fKineticE_Min = 0; // kinetic energy below which the primary is killed - fpELossUI = new G4UIcmdWithADoubleAndUnit("/primaryKiller/eLossMin", this); fpAbortEventIfELossUpperThan = new G4UIcmdWithADoubleAndUnit("/primaryKiller/eLossMax", this); - fpMinKineticE = new G4UIcmdWithADoubleAndUnit("/primaryKiller/minKineticE", this); } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -PrimaryKiller::~PrimaryKiller() -{ - ; -} - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void PrimaryKiller::SetNewValue(G4UIcommand* command, G4String newValue) @@ -95,14 +79,13 @@ G4bool PrimaryKiller::ProcessHits(G4Step* aStep, G4TouchableHistory*) //------------------- - double kineticE = aStep->GetPostStepPoint()->GetKineticEnergy(); + auto kineticE = aStep->GetPostStepPoint()->GetKineticEnergy(); - G4double eLoss = aStep->GetPreStepPoint()->GetKineticEnergy() - kineticE; + auto eLoss = aStep->GetPreStepPoint()->GetKineticEnergy() - kineticE; if (eLoss == 0.) return FALSE; //------------------- - fELoss += eLoss; if (fELoss > fELossRange_Max) { @@ -122,8 +105,6 @@ G4bool PrimaryKiller::ProcessHits(G4Step* aStep, G4TouchableHistory*) << ", Energy loss by primary is: " << G4BestUnit(fELoss, "Energy") << ", primary is terminated as Eloss is >: " << G4BestUnit(fELossRange_Min, "Energy") << G4endl; //", EThreshold is: " - // << G4BestUnit(fEThreshold, "Energy") - // << G4endl; } return true; @@ -137,25 +118,3 @@ void PrimaryKiller::Initialize(G4HCofThisEvent* /*HCE*/) } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void PrimaryKiller::EndOfEvent(G4HCofThisEvent*) {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void PrimaryKiller::Clear() -{ - fELoss = 0.; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void PrimaryKiller::DrawAll() -{ - ; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void PrimaryKiller::PrintAll() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem5/src/Run.cc b/examples/extended/medical/dna/chem5/src/Run.cc index 97102c9d12..0334d5fa7c 100644 --- a/examples/extended/medical/dna/chem5/src/Run.cc +++ b/examples/extended/medical/dna/chem5/src/Run.cc @@ -44,42 +44,35 @@ #include "G4HCofThisEvent.hh" #include "G4RunManager.hh" #include "G4SDManager.hh" -#include "G4SystemOfUnits.hh" #include "G4THitsMap.hh" -#include "G4VSensitiveDetector.hh" #include //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::Run() : G4Run(), fSumEne(0), fScorerRun(0) +Run::Run() : G4Run() { G4MultiFunctionalDetector* mfdet = dynamic_cast( G4SDManager::GetSDMpointer()->FindSensitiveDetector("mfDetector")); - G4int CollectionIDspecies = G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); + auto CollectionIDspecies = G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); fScorerRun = mfdet->GetPrimitive(CollectionIDspecies); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::~Run() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void Run::RecordEvent(const G4Event* event) { if (event->IsAborted()) return; - G4int CollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); + auto CollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); // Hits collections - G4HCofThisEvent* HCE = event->GetHCofThisEvent(); + auto HCE = event->GetHCofThisEvent(); if (!HCE) return; - G4THitsMap* evtMap = static_cast*>(HCE->GetHC(CollectionID)); + auto evtMap = static_cast*>(HCE->GetHC(CollectionID)); - std::map::iterator itr; - for (itr = evtMap->GetMap()->begin(); itr != evtMap->GetMap()->end(); itr++) { + for (auto itr = evtMap->GetMap()->begin(); itr != evtMap->GetMap()->end(); itr++) { G4double edep = *(itr->second); fSumEne += edep; } @@ -95,12 +88,12 @@ void Run::Merge(const G4Run* aRun) return; } - const Run* localRun = static_cast(aRun); + auto localRun = static_cast(aRun); fSumEne += localRun->fSumEne; - ScoreSpecies* masterScorer = dynamic_cast(this->fScorerRun); + auto masterScorer = dynamic_cast(this->fScorerRun); - ScoreSpecies* localScorer = dynamic_cast(localRun->fScorerRun); + auto localScorer = dynamic_cast(localRun->fScorerRun); masterScorer->AbsorbResultsFromWorkerScorer(localScorer); G4Run::Merge(aRun); diff --git a/examples/extended/medical/dna/chem5/src/RunAction.cc b/examples/extended/medical/dna/chem5/src/RunAction.cc index 2bc5bc8c3a..459967266a 100644 --- a/examples/extended/medical/dna/chem5/src/RunAction.cc +++ b/examples/extended/medical/dna/chem5/src/RunAction.cc @@ -45,20 +45,13 @@ #include "G4RunManager.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -RunAction::RunAction() : G4UserRunAction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -RunAction::~RunAction() {} +#include "G4DNAChemistryManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Run* RunAction::GenerateRun() { - Run* run = new Run(); + auto run = new Run(); return run; } @@ -66,6 +59,10 @@ G4Run* RunAction::GenerateRun() void RunAction::BeginOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; // informs the runManager to save random number seed @@ -76,12 +73,16 @@ void RunAction::BeginOfRunAction(const G4Run* run) void RunAction::EndOfRunAction(const G4Run* run) { - G4int nofEvents = run->GetNumberOfEvent(); + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + + auto nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) return; // results // - const Run* chem5Run = static_cast(run); + auto chem5Run = static_cast(run); G4double sumDose = chem5Run->GetSumDose(); // print @@ -90,7 +91,7 @@ void RunAction::EndOfRunAction(const G4Run* run) G4cout << G4endl << "--------------------End of Global Run-----------------------" << G4endl << " The run has " << nofEvents << " events " << G4endl; - ScoreSpecies* masterScorer = dynamic_cast(chem5Run->GetPrimitiveScorer()); + auto masterScorer = dynamic_cast(chem5Run->GetPrimitiveScorer()); G4cout << "Number of events recorded by the species scorer = " << masterScorer->GetNumberOfRecordedEvents() << G4endl; diff --git a/examples/extended/medical/dna/chem5/src/ScoreSpecies.cc b/examples/extended/medical/dna/chem5/src/ScoreSpecies.cc index 82df9b4682..ec10ef56c6 100644 --- a/examples/extended/medical/dna/chem5/src/ScoreSpecies.cc +++ b/examples/extended/medical/dna/chem5/src/ScoreSpecies.cc @@ -57,25 +57,15 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ScoreSpecies::ScoreSpecies(G4String name, G4int depth) - : G4VPrimitiveScorer(name, depth), fEdep(0), fHCID(-1), fEvtMap(0) + : G4VPrimitiveScorer(name, depth) { - fNEvent = 0; - G4double tMin = 1.0 * CLHEP::picosecond; - G4double tMax = 999999 * CLHEP::picosecond; - G4double tLogMin = std::log10(tMin); - G4double tLogMax = std::log10(tMax); - G4int tBins = 50; - for (int i = 0; i <= tBins; i++) + auto tMin = 1.0 * CLHEP::picosecond; + auto tMax = 999999 * CLHEP::picosecond; + auto tLogMin = std::log10(tMin); + auto tLogMax = std::log10(tMax); + auto tBins = 50; + for (G4int i = 0; i <= tBins; i++) AddTimeToRecord(std::pow(10., tLogMin + i * (tLogMax - tLogMin) / tBins)); - - fEdep = 0; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ScoreSpecies::~ScoreSpecies() -{ - ; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -113,32 +103,37 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + // get the first, and in this case only, counter + auto counter = G4MoleculeCounterManager::Instance()->GetMoleculeCounter(0); + if (counter == nullptr) { + G4Exception("ScoreSpecies::EndOfEvent", "BAD_REFERENCE", FatalException, + "The molecule counter could not be received!"); + } - if (species.get() == 0 || species->size() == 0) { + auto indices = counter->GetMapIndices(); + + if (indices.empty()) { G4cout << "No molecule recorded, energy deposited= " << G4BestUnit(fEdep, "Energy") << G4endl; ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - for (auto molecule : *species) { + for (const auto& idx : indices) { for (auto time_mol : fTimeToRecord) { - double n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, time_mol); + double n_mol = counter->GetNbMoleculesAtTime(idx, time_mol); if (n_mol < 0) { G4cerr << "N molecules not valid < 0 " << G4endl; G4Exception("", "N<0", FatalException, ""); } - SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][idx.Molecule]; molInfo.fNumber += n_mol; - double gValue = (n_mol / (fEdep / eV)) * 100.; + G4double gValue = (n_mol / (fEdep / eV)) * 100.; molInfo.fG += gValue; molInfo.fG2 += gValue * gValue; } @@ -146,30 +141,29 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) { - ScoreSpecies* right = + auto right = dynamic_cast(dynamic_cast(workerScorer)); - if (right == 0) { + if (right == nullptr) { return; } if (right == this) { return; } - SpeciesMap::iterator it_map1 = right->fSpeciesInfoPerTime.begin(); - SpeciesMap::iterator end_map1 = right->fSpeciesInfoPerTime.end(); + auto it_map1 = right->fSpeciesInfoPerTime.begin(); + auto end_map1 = right->fSpeciesInfoPerTime.end(); for (; it_map1 != end_map1; ++it_map1) { InnerSpeciesMap& map2 = it_map1->second; - InnerSpeciesMap::iterator it_map2 = map2.begin(); - InnerSpeciesMap::iterator end_map2 = map2.end(); + auto it_map2 = map2.begin(); + auto end_map2 = map2.end(); for (; it_map2 != end_map2; ++it_map2) { SpeciesInfo& molInfo = fSpeciesInfoPerTime[it_map1->first][it_map2->first]; @@ -178,6 +172,7 @@ void ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScore molInfo.fG2 += it_map2->second.fG2; } } + right->fSpeciesInfoPerTime.clear(); fNEvent += right->fNEvent; right->fNEvent = 0; @@ -186,13 +181,6 @@ void ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScore //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ScoreSpecies::DrawAll() -{ - ; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ScoreSpecies::PrintAll() { G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; @@ -217,10 +205,10 @@ void ScoreSpecies::ASCII() std::map>> mol; - for (auto it_map1 : fSpeciesInfoPerTime) { + for (auto& it_map1 : fSpeciesInfoPerTime) { InnerSpeciesMap& map2 = it_map1.second; G4double time = it_map1.first / ps; - for (auto it_map2 : map2) { + for (auto& it_map2 : map2) { G4double G = it_map2.second.fG; G4double G2 = it_map2.second.fG2; G4double N = fNEvent; @@ -230,7 +218,7 @@ void ScoreSpecies::ASCII() } } - for (auto it1 : mol) + for (const auto& it1 : mol) for (auto it2 : it1.second) out << std::setw(12) << it2.first << std::setw(12) << it2.second.first << std::setw(12) << it2.second.second << std::setw(12) << std::setw(12) << it1.first << G4endl; diff --git a/examples/extended/medical/dna/chem5/src/StackingAction.cc b/examples/extended/medical/dna/chem5/src/StackingAction.cc index 5e910f02cd..9ea428805c 100644 --- a/examples/extended/medical/dna/chem5/src/StackingAction.cc +++ b/examples/extended/medical/dna/chem5/src/StackingAction.cc @@ -39,15 +39,6 @@ #include "G4DNAChemistryManager.hh" #include "G4StackManager.hh" -#include "G4Track.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -StackingAction::StackingAction() : G4UserStackingAction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -StackingAction::~StackingAction() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/chem6/History b/examples/extended/medical/dna/chem6/History index 2d3e4bf1ce..836b34bc1a 100644 --- a/examples/extended/medical/dna/chem6/History +++ b/examples/extended/medical/dna/chem6/History @@ -4,6 +4,12 @@ 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-05-05 Hoang Tran (chem6-V11-03-01) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-22 Hoang Tran (chem6-V11-03-00) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + ## 2024-10-28 Hoang Tran (chem6-V11-02-02) - added the /process/chem/TimeStepModel IRT command in the macro file beam_HCP.in diff --git a/examples/extended/medical/dna/chem6/beam.in b/examples/extended/medical/dna/chem6/beam.in index 34b558dd30..d77e2d57d4 100644 --- a/examples/extended/medical/dna/chem6/beam.in +++ b/examples/extended/medical/dna/chem6/beam.in @@ -1,5 +1,4 @@ -# -/run/numberOfThreads 2 +#/run/numberOfThreads 2 /process/dna/e-SolvationSubType Meesungnoen2002 #/process/dna/e-SolvationSubType Ritchie1994 #/process/dna/e-SolvationSubType Terrisol1990 diff --git a/examples/extended/medical/dna/chem6/chem6.out b/examples/extended/medical/dna/chem6/chem6.out index 517d36ef0a..931fa27334 100644 --- a/examples/extended/medical/dna/chem6/chem6.out +++ b/examples/extended/medical/dna/chem6/chem6.out @@ -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 @@ -21,8 +21,6 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ===== Register constructor ==== G4EmDNAPhysics_option2 ===== Register constructor ==== G4EmDNAChemistry_option3 -*** /run/numberOfThreads command is issued in sequential mode. -Command is ignored. G4SDManager::AddNewCollection : the collection is registered at 1 G4SDManager::AddNewCollection : the collection is registered at 2 G4SDManager::AddNewCollection : the collection is registered at 3 @@ -158,7 +156,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 ======== @@ -365,7 +363,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 ====== @@ -381,7 +381,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 @@ -409,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 ====== @@ -443,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 ====== @@ -482,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 ====== @@ -504,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 @@ -516,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 ====== @@ -621,9 +631,9 @@ Number of events recorded by the species scorer = 3 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 6 events -Number of events recorded by the species scorer = 6 - Total energy deposited in the world volume : 13879 eV + The run has 7 events +Number of events recorded by the species scorer = 7 + Total energy deposited in the world volume : 16196 eV ------------------------------------------------------------ ### Run 3 starts. @@ -631,9 +641,9 @@ Number of events recorded by the species scorer = 6 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 1 events -Number of events recorded by the species scorer = 1 - Total energy deposited in the world volume : 3832.2 eV + The run has 4 events +Number of events recorded by the species scorer = 4 + Total energy deposited in the world volume : 15264 eV ------------------------------------------------------------ ### Run 4 starts. @@ -643,7 +653,7 @@ Number of events recorded by the species scorer = 1 --------------------End of Global Run----------------------- The run has 2 events Number of events recorded by the species scorer = 2 - Total energy deposited in the world volume : 12004 eV + Total energy deposited in the world volume : 12053 eV ------------------------------------------------------------ ### Run 5 starts. @@ -651,18 +661,11 @@ Number of events recorded by the species scorer = 2 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 5 events -Number of events recorded by the species scorer = 5 - Total energy deposited in the world volume : 40126 eV + The run has 2 events +Number of events recorded by the species scorer = 2 + Total energy deposited in the world volume : 16031 eV ------------------------------------------------------------ ### Run 6 starts. ### Run 6 starts. --> Event 0 starts. - ---------------------End of Global Run----------------------- - The run has 1 events -Number of events recorded by the species scorer = 1 - Total energy deposited in the world volume : 10069 eV - ------------------------------------------------------------ - diff --git a/examples/extended/medical/dna/chem6/include/ActionInitialization.hh b/examples/extended/medical/dna/chem6/include/ActionInitialization.hh index b3cfd21ead..3d59622cf0 100644 --- a/examples/extended/medical/dna/chem6/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/chem6/include/ActionInitialization.hh @@ -57,6 +57,7 @@ class ActionInitialization : public G4VUserActionInitialization public: ActionInitialization(); virtual ~ActionInitialization(); + void BuildMoleculeCounters() const; virtual void BuildForMaster() const; virtual void Build() const; diff --git a/examples/extended/medical/dna/chem6/include/EventAction.hh b/examples/extended/medical/dna/chem6/include/EventAction.hh new file mode 100644 index 0000000000..f71354f8b5 --- /dev/null +++ b/examples/extended/medical/dna/chem6/include/EventAction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// +/// \file PhysicsList.hh +/// \brief Definition of the PhysicsList class + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" + +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; + +#endif diff --git a/examples/extended/medical/dna/chem6/src/ActionInitialization.cc b/examples/extended/medical/dna/chem6/src/ActionInitialization.cc index 0b86db2fb2..841114e7a7 100644 --- a/examples/extended/medical/dna/chem6/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/chem6/src/ActionInitialization.cc @@ -51,7 +51,8 @@ #include "G4H2O.hh" #include "G4MoleculeCounter.hh" #include "G4Scheduler.hh" - +#include "G4MoleculeReactionCounter.hh" +#include "EventAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} @@ -65,27 +66,30 @@ ActionInitialization::~ActionInitialization() {} void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(); - // G4MoleculeCounter::Instance()->SetVerbose(2); - - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - - // sequential mode - if (G4Threading::IsMultithreadedApplication() == false) { - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); - } - SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); + SetUserAction(new EventAction()); SetUserAction(new StackingAction()); - G4Scheduler::Instance()->SetUserAction(new TimeStepAction()); + G4Scheduler::Instance()->SetUserAction(new G4UserTimeStepAction); + BuildMoleculeCounters(); +} + +void ActionInitialization::BuildMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + G4MoleculeCounterManager::Instance()->SetAccumulateCounterIntoMaster(false); + + auto counter = std::make_unique(); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(1 * ps)); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/chem6/src/RunAction.cc b/examples/extended/medical/dna/chem6/src/RunAction.cc index 9704fb57bf..00861224a2 100644 --- a/examples/extended/medical/dna/chem6/src/RunAction.cc +++ b/examples/extended/medical/dna/chem6/src/RunAction.cc @@ -50,6 +50,7 @@ #include "G4RunManager.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" +#include "G4DNAChemistryManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -73,6 +74,9 @@ G4Run* RunAction::GenerateRun() void RunAction::BeginOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; // informs the runManager to save random number seed @@ -83,6 +87,10 @@ void RunAction::BeginOfRunAction(const G4Run* run) void RunAction::EndOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + G4int nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) return; diff --git a/examples/extended/medical/dna/chem6/src/ScoreSpecies.cc b/examples/extended/medical/dna/chem6/src/ScoreSpecies.cc index 08aca50639..97abd0781d 100644 --- a/examples/extended/medical/dna/chem6/src/ScoreSpecies.cc +++ b/examples/extended/medical/dna/chem6/src/ScoreSpecies.cc @@ -87,7 +87,6 @@ ScoreSpecies::ScoreSpecies(G4String name, G4int depth) fEdep = 0; fNEvent = 0; fRunID = 0; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -147,7 +146,6 @@ void ScoreSpecies::Initialize(G4HCofThisEvent* HCE) } HCE->AddHitsCollection(fHCID, (G4VHitsCollection*)fEvtMap); - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -156,60 +154,51 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + // get the first, and in this case only, counter + auto counter = G4MoleculeCounterManager::Instance()->GetMoleculeCounter(0); + if (counter == nullptr) { + G4Exception("ScoreSpecies::EndOfEvent", "BAD_REFERENCE", FatalException, + "The molecule counter could not be received!"); + } - if (species.get() == 0 || species->size() == 0) { + auto indices = counter->GetMapIndices(); + + if (indices.empty()) { G4cout << "No molecule recorded, energy deposited= " << G4BestUnit(fEdep, "Energy") << G4endl; ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - - // G4cout << "ScoreSpecies::EndOfEvent"<GetNMoleculesAtTime(molecule, time_mol); + double n_mol = counter->GetNbMoleculesAtTime(idx, time_mol); if (n_mol < 0) { G4cerr << "N molecules not valid < 0 " << G4endl; G4Exception("", "N<0", FatalException, ""); } - SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][idx.Molecule]; molInfo.fNumber += n_mol; double gValue = (n_mol / (fEdep / eV)) * 100.; molInfo.fG += gValue; molInfo.fG2 += gValue * gValue; - - // G4cout << "In Save molucule: fNumber " << molInfo.fNumber - // << " fG " << molInfo.fG - // << " fEdep " << fEdep/eV - // << G4endl; } } ++fNEvent; - // G4cout << "End of event " << fNEvent - // << ", energy deposited=" << G4BestUnit(fEdep, "Energy") << G4endl; - fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) { - ScoreSpecies* right = + auto right = dynamic_cast(dynamic_cast(workerScorer)); if (right == 0) { @@ -219,26 +208,19 @@ void ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScore return; } - // G4cout<<"ScoreSpecies::AbsorbResultsFromWorkerScorer"<fSpeciesInfoPerTime.begin(); - SpeciesMap::iterator end_map1 = right->fSpeciesInfoPerTime.end(); + auto it_map1 = right->fSpeciesInfoPerTime.begin(); + auto end_map1 = right->fSpeciesInfoPerTime.end(); for (; it_map1 != end_map1; ++it_map1) { InnerSpeciesMap& map2 = it_map1->second; - InnerSpeciesMap::iterator it_map2 = map2.begin(); - InnerSpeciesMap::iterator end_map2 = map2.end(); + auto it_map2 = map2.begin(); + auto end_map2 = map2.end(); for (; it_map2 != end_map2; ++it_map2) { SpeciesInfo& molInfo = fSpeciesInfoPerTime[it_map1->first][it_map2->first]; molInfo.fNumber += it_map2->second.fNumber; molInfo.fG += it_map2->second.fG; molInfo.fG2 += it_map2->second.fG2; - - // G4cout << "In AbsorbeResultsFromWorkerScorer: fNumber " - // << molInfo.fNumber - // << " fG " - // << molInfo.fG - // << G4endl; } } right->fSpeciesInfoPerTime.clear(); diff --git a/examples/extended/medical/dna/clustering/clustering.out b/examples/extended/medical/dna/clustering/clustering.out index 8e7dfe00a8..372bbc9876 100644 --- a/examples/extended/medical/dna/clustering/clustering.out +++ b/examples/extended/medical/dna/clustering/clustering.out @@ -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", @@ -115,7 +116,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 ======== @@ -321,7 +322,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 ====== @@ -337,7 +340,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 @@ -365,19 +368,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -399,23 +404,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -438,19 +447,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -460,19 +471,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== diff --git a/examples/extended/medical/dna/dnadamage1/dnadamage1.out b/examples/extended/medical/dna/dnadamage1/dnadamage1.out index e1abf9d59b..4679fc9500 100644 --- a/examples/extended/medical/dna/dnadamage1/dnadamage1.out +++ b/examples/extended/medical/dna/dnadamage1/dnadamage1.out @@ -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 @@ -30,23 +30,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", @@ -133,7 +134,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 ======== @@ -339,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 ====== @@ -355,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 @@ -383,19 +386,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -417,23 +422,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -456,19 +465,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -478,19 +489,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== @@ -601,17 +614,17 @@ Start closing geometry. G4GeometryManager::ReportVoxelStats -- Voxel Statistics Total memory consumed for geometry optimisation: 2913 kByte - Total CPU time elapsed for geometry optimisation: 3.14 seconds + Total CPU time elapsed for geometry optimisation: 3.46 seconds Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- - 99.04 3.11 0.01 2914k VoxelStraight_logic + 99.13 3.43 0.01 2914k VoxelStraight_logic Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 100.00 2913k 20884 21735 54614 3.11 VoxelStraight_logic + 100.00 2913k 20884 21735 54614 3.43 VoxelStraight_logic -------------------------------------------------------------------------------- ### Run 0 starts. @@ -683,168 +696,161 @@ H2O2^0 + Histone^0 -> Histone^0 0 ------------------------------------------------------------------------------------------------------------------------------------ DNAMolecularStepByStepModel will be used *** G4Scheduler starts processing -At time : 1 ps Reaction : °OH^0 (-14623) + Guanine^0 (-2931) -> Damaged_Guanine^0 (-14637) -At time : 1 ps Reaction : °OH^0 (-14622) + Thymine^0 (-2928) -> Damaged_Thymine^0 (-14638) -At time : 1 ps Reaction : °OH^0 (-14558) + °OH^0 (-14611) -> H2O2^0 (-14639) -At time : 1 ps Reaction : °OH^0 (-14584) + Cytosine^0 (-2932) -> Damaged_Cytosine^0 (-14640) -At time : 1 ps Reaction : °OH^0 (-14536) + °OH^0 (-14544) -> H2O2^0 (-14641) -At time : 1.35 ps Reaction : °OH^0 (-14577) + °OH^0 (-14619) -> H2O2^0 (-14642) -At time : 1.35 ps Reaction : Cytosine^0 (-2636) + °OH^0 (-14533) -> Damaged_Cytosine^0 (-14643) -At time : 1.7 ps Reaction : °OH^0 (-14556) + °OH^0 (-14609) -> H2O2^0 (-14644) -At time : 1.7 ps Reaction : °OH^0 (-14567) + °OH^0 (-14566) -> H2O2^0 (-14645) -At time : 2.4 ps Reaction : Adenine^0 (-2959) + e_aq^-1 (-14535) -> Damaged_Adenine^0 (-14646) -At time : 2.75 ps Reaction : °OH^0 (-14571) + °OH^0 (-14613) -> H2O2^0 (-14647) -At time : 3.1 ps Reaction : °OH^0 (-14617) + °OH^0 (-14615) -> H2O2^0 (-14648) -At time : 4.5 ps Reaction : H^0 (-14634) + °OH^0 (-14548) -> No product -At time : 4.5 ps Reaction : °OH^0 (-14528) + °OH^0 (-14529) -> H2O2^0 (-14649) -At time : 6.25 ps Reaction : °OH^0 (-14563) + °OH^0 (-14560) -> H2O2^0 (-14650) -At time : 7.3 ps Reaction : °OH^0 (-14590) + °OH^0 (-14588) -> H2O2^0 (-14651) -At time : 10.581 ps Reaction : °OH^0 (-14564) + H^0 (-14608) -> No product -At time : 12.281 ps Reaction : H^0 (-14585) + °OH^0 (-14580) -> No product -At time : 14.281 ps Reaction : °OH^0 (-14582) + Thymine^0 (-2936) -> Damaged_Thymine^0 (-14652) -At time : 15.281 ps Reaction : °OH^0 (-14586) + Guanine^0 (-2627) -> Damaged_Guanine^0 (-14653) -At time : 26.281 ps Reaction : °OH^0 (-14603) + H^0 (-14604) -> No product -At time : 27.281 ps Reaction : H^0 (-14593) + H^0 (-14545) -> H_2^0 (-14654) -At time : 29.281 ps Reaction : H^0 (-14591) + Cytosine^0 (-2628) -> Damaged_Cytosine^0 (-14655) -At time : 68.632 ps Reaction : °OH^0 (-14552) + Guanine^0 (-12203) -> Damaged_Guanine^0 (-14656) -At time : 77.632 ps Reaction : °OH^0 (-14572) + Guanine^0 (-7421) -> Damaged_Guanine^0 (-14657) -At time : 79.632 ps Reaction : °OH^0 (-14592) + °OH^0 (-14594) -> H2O2^0 (-14658) -At time : 86.632 ps Reaction : H^0 (-14636) + Thymine^0 (-7746) -> Damaged_Thymine^0 (-14659) -At time : 89.632 ps Reaction : °OH^0 (-14576) + e_aq^-1 (-14526) -> OH^-1 (-14660) -At time : 95.632 ps Reaction : °OH^0 (-14599) + °OH^0 (-14602) -> H2O2^0 (-14661) -At time : 137.69 ps Reaction : H^0 (-14561) + H^0 (-14610) -> H_2^0 (-14662) -At time : 173.69 ps Reaction : °OH^0 (-14554) + Deoxyribose^0 (-12213) -> Damaged_Deoxyribose^0 (-14663) -At time : 273.4 ps Reaction : H^0 (-14583) + Deoxyribose^0 (-2945) -> Damaged_Deoxyribose^0 (-14664) -At time : 376.29 ps Reaction : Histone^0 (-6454) + H3O^1 (-14525) -> Histone^0 (-14665) -At time : 385.29 ps Reaction : Adenine^0 (-2623) + °OH^0 (-14530) -> Damaged_Adenine^0 (-14666) -At time : 400.29 ps Reaction : H^0 (-14539) + °OH^0 (-14631) -> No product -At time : 406.29 ps Reaction : H^0 (-14569) + Histone^0 (-7255) -> Histone^0 (-14667) -At time : 409.29 ps Reaction : H^0 (-14612) + Thymine^0 (-6901) -> Damaged_Thymine^0 (-14668) -At time : 461.8 ps Reaction : Histone^0 (-14667) + H^0 (-14559) -> Histone^0 (-14669) -At time : 470.8 ps Reaction : H^0 (-14555) + Deoxyribose^0 (-12250) -> Damaged_Deoxyribose^0 (-14670) -At time : 556.82 ps Reaction : H^0 (-14597) + °OH^0 (-14606) -> No product -At time : 593.21 ps Reaction : °OH^0 (-14607) + Deoxyribose^0 (-7744) -> Damaged_Deoxyribose^0 (-14671) -At time : 614.21 ps Reaction : °OH^0 (-14540) + °OH^0 (-14547) -> H2O2^0 (-14672) -At time : 617.21 ps Reaction : H^0 (-14616) + Cytosine^0 (-6841) -> Damaged_Cytosine^0 (-14673) -At time : 626.21 ps Reaction : H3O^1 (-14573) + Histone^0 (-14669) -> Histone^0 (-14674) -At time : 704.65 ps Reaction : Adenine^0 (-2943) + °OH^0 (-14524) -> Damaged_Adenine^0 (-14675) -At time : 717.62 ps Reaction : H^0 (-14537) + Histone^0 (-1648) -> Histone^0 (-14676) -At time : 732.77 ps Reaction : °OH^0 (-14632) + Guanine^0 (-13348) -> Damaged_Guanine^0 (-14677) -At time : 751.78 ps Reaction : °OH^0 (-14635) + °OH^0 (-14568) -> H2O2^0 (-14678) -At time : 785.45 ps Reaction : Histone^0 (-2449) + H3O^1 (-14534) -> Histone^0 (-14679) -At time : 788.45 ps Reaction : H^0 (-14579) + Deoxyribose^0 (-2065) -> Damaged_Deoxyribose^0 (-14680) -At time : 804.05 ps Reaction : °OH^0 (-14553) + Thymine^0 (-12208) -> Damaged_Thymine^0 (-14681) -At time : 983.44 ps Reaction : °OH^0 (-14542) + H^0 (-14620) -> No product -At time : 1.0364 ns Reaction : H_2^0 (-14654) + Histone^0 (-14676) -> Histone^0 (-14682) -At time : 1.4601 ns Reaction : °OH^0 (-14578) + Guanine^0 (-2939) -> Damaged_Guanine^0 (-14683) -At time : 1.4701 ns Reaction : H^0 (-14589) + Deoxyribose^0 (-2049) -> Damaged_Deoxyribose^0 (-14684) -At time : 1.4901 ns Reaction : H_2^0 (-14562) + Histone^0 (-14674) -> Histone^0 (-14685) -At time : 1.5001 ns Reaction : H^0 (-14543) + Histone^0 (-14665) -> Histone^0 (-14686) -At time : 1.5401 ns Reaction : Thymine^0 (-3421) + e_aq^-1 (-14532) -> Damaged_Thymine^0 (-14687) -At time : 1.6664 ns Reaction : Histone^0 (-14679) + H^0 (-14618) -> Histone^0 (-14688) -At time : 1.7664 ns Reaction : °OH^0 (-14538) + Guanine^0 (-12507) -> Damaged_Guanine^0 (-14689) -At time : 1.9524 ns Reaction : H^0 (-14541) + Adenine^0 (-8538) -> Damaged_Adenine^0 (-14690) -At time : 2.0342 ns Reaction : °OH^0 (-14549) + Cytosine^0 (-12492) -> Damaged_Cytosine^0 (-14691) -At time : 2.3763 ns Reaction : H2O2^0 (-14642) + Histone^0 (-14685) -> Histone^0 (-14692) -At time : 2.4699 ns Reaction : Histone^0 (-3250) + H3O^1 (-14531) -> Histone^0 (-14693) +At time : 1 ps Reaction : H^0 (-14708) + °OH^0 (-14694) -> No product +At time : 1 ps Reaction : °OH^0 (-14707) + °OH^0 (-14647) -> H2O2^0 (-14709) +At time : 1 ps Reaction : °OH^0 (-14590) + °OH^0 (-14704) -> H2O2^0 (-14710) +At time : 1 ps Reaction : °OH^0 (-14699) + °OH^0 (-14700) -> H2O2^0 (-14711) +At time : 1 ps Reaction : °OH^0 (-14696) + H^0 (-14697) -> No product +At time : 1 ps Reaction : H^0 (-14586) + H^0 (-14695) -> H_2^0 (-14712) +At time : 1 ps Reaction : °OH^0 (-14692) + H^0 (-14693) -> No product +At time : 1 ps Reaction : °OH^0 (-14690) + H^0 (-14691) -> No product +At time : 1 ps Reaction : °OH^0 (-14688) + H^0 (-14689) -> No product +At time : 1 ps Reaction : °OH^0 (-14686) + H^0 (-14687) -> No product +At time : 1 ps Reaction : °OH^0 (-14635) + H^0 (-14685) -> No product +At time : 1 ps Reaction : e_aq^-1 (-57) + °OH^0 (-14684) -> OH^-1 (-14713) +At time : 1 ps Reaction : Guanine^0 (-7407) + °OH^0 (-14683) -> Damaged_Guanine^0 (-14714) +At time : 1 ps Reaction : H^0 (-14636) + °OH^0 (-14682) -> No product +At time : 1 ps Reaction : e_aq^-1 (-14564) + °OH^0 (-14680) -> OH^-1 (-14715) +At time : 1 ps Reaction : e_aq^-1 (-14567) + °OH^0 (-14679) -> OH^-1 (-14716) +At time : 1 ps Reaction : °OH^0 (-14676) + H^0 (-14677) -> No product +At time : 1 ps Reaction : °OH^0 (-14674) + H^0 (-14675) -> No product +At time : 1 ps Reaction : °OH^0 (-14617) + H^0 (-14673) -> No product +At time : 1 ps Reaction : H^0 (-14618) + °OH^0 (-14672) -> No product +At time : 1 ps Reaction : °OH^0 (-14670) + H^0 (-14671) -> No product +At time : 1 ps Reaction : °OH^0 (-14668) + H^0 (-14669) -> No product +At time : 1 ps Reaction : °OH^0 (-14568) + °OH^0 (-14667) -> H2O2^0 (-14717) +At time : 1 ps Reaction : °OH^0 (-14606) + °OH^0 (-14666) -> H2O2^0 (-14718) +At time : 1 ps Reaction : °OH^0 (-14663) + °OH^0 (-14664) -> H2O2^0 (-14719) +At time : 1 ps Reaction : °OH^0 (-14660) + H^0 (-14661) -> No product +At time : 1 ps Reaction : °OH^0 (-14653) + H^0 (-14654) -> No product +At time : 1 ps Reaction : °OH^0 (-14651) + H^0 (-14652) -> No product +At time : 1 ps Reaction : °OH^0 (-14649) + H^0 (-14650) -> No product +At time : 1 ps Reaction : °OH^0 (-14585) + H^0 (-14648) -> No product +At time : 1 ps Reaction : °OH^0 (-14645) + H^0 (-14646) -> No product +At time : 1 ps Reaction : °OH^0 (-14639) + H^0 (-14642) -> No product +At time : 1 ps Reaction : °OH^0 (-14641) + H^0 (-14640) -> No product +At time : 1 ps Reaction : H^0 (-14638) + °OH^0 (-14637) -> No product +At time : 1 ps Reaction : H^0 (-14632) + °OH^0 (-14631) -> No product +At time : 1 ps Reaction : H^0 (-14630) + °OH^0 (-14627) -> No product +At time : 1 ps Reaction : °OH^0 (-14629) + °OH^0 (-14625) -> H2O2^0 (-14720) +At time : 1 ps Reaction : H^0 (-14628) + H^0 (-14626) -> H_2^0 (-14721) +At time : 1 ps Reaction : °OH^0 (-14573) + H^0 (-14624) -> No product +At time : 1 ps Reaction : H^0 (-14574) + °OH^0 (-14623) -> No product +At time : 1 ps Reaction : H^0 (-14622) + °OH^0 (-14621) -> No product +At time : 1 ps Reaction : H^0 (-14620) + °OH^0 (-14619) -> No product +At time : 1 ps Reaction : H^0 (-14616) + °OH^0 (-14615) -> No product +At time : 1 ps Reaction : H^0 (-14614) + °OH^0 (-14613) -> No product +At time : 1 ps Reaction : °OH^0 (-14612) + °OH^0 (-14611) -> H2O2^0 (-14722) +At time : 1 ps Reaction : H^0 (-14609) + °OH^0 (-14607) -> No product +At time : 1 ps Reaction : H^0 (-14569) + °OH^0 (-14608) -> No product +At time : 1 ps Reaction : H^0 (-14604) + °OH^0 (-14601) -> No product +At time : 1 ps Reaction : °OH^0 (-14603) + H^0 (-14602) -> No product +At time : 1 ps Reaction : °OH^0 (-14598) + °OH^0 (-14597) -> H2O2^0 (-14723) +At time : 1 ps Reaction : H^0 (-14595) + °OH^0 (-14594) -> No product +At time : 1 ps Reaction : °OH^0 (-14588) + °OH^0 (-14589) -> H2O2^0 (-14724) +At time : 1 ps Reaction : °OH^0 (-14583) + H^0 (-14584) -> No product +At time : 1 ps Reaction : °OH^0 (-14581) + H^0 (-14582) -> No product +At time : 1 ps Reaction : °OH^0 (-14579) + °OH^0 (-14580) -> H2O2^0 (-14725) +At time : 1 ps Reaction : °OH^0 (-14577) + °OH^0 (-14562) -> H2O2^0 (-14726) +At time : 1 ps Reaction : °OH^0 (-14571) + °OH^0 (-14572) -> H2O2^0 (-14727) +At time : 1 ps Reaction : e_aq^-1 (-125) + Histone^0 (-8090) -> Histone^0 (-14728) +At time : 1 ps Reaction : OH^-1 (-14716) + H3O^1 (-14563) -> No product +At time : 1 ps Reaction : OH^-1 (-14715) + H3O^1 (-14566) -> No product +At time : 1 ps Reaction : OH^-1 (-14713) + H3O^1 (-14560) -> No product +At time : 1.35 ps Reaction : H^0 (-14600) + °OH^0 (-14599) -> No product +At time : 1.35 ps Reaction : °OH^0 (-14655) + H^0 (-14656) -> No product +At time : 4.15 ps Reaction : °OH^0 (-14658) + °OH^0 (-14659) -> H2O2^0 (-14729) +At time : 22.295 ps Reaction : e_aq^-1 (-160) + H^0 (-14591) -> OH^-1 (-14730) + H_2^0 (-14731) +At time : 22.295 ps Reaction : OH^-1 (-14730) + H3O^1 (-14701) -> No product +At time : 41.295 ps Reaction : °OH^0 (-14634) + Guanine^0 (-7711) -> Damaged_Guanine^0 (-14732) +At time : 61.021 ps Reaction : e_aq^-1 (-137) + Histone^0 (-7289) -> Histone^0 (-14733) +At time : 121.28 ps Reaction : H_2^0 (-14587) + Histone^0 (-2483) -> Histone^0 (-14734) +At time : 144.58 ps Reaction : Deoxyribose^0 (-8274) + °OH^0 (-14565) -> Damaged_Deoxyribose^0 (-14735) +At time : 157.58 ps Reaction : H3O^1 (-14633) + Histone^0 (-14733) -> Histone^0 (-14736) +At time : 234.79 ps Reaction : °OH^0 (-14576) + Guanine^0 (-7703) -> Damaged_Guanine^0 (-14737) +At time : 675.78 ps Reaction : H_2^0 (-14721) + Histone^0 (-14728) -> Histone^0 (-14738) +At time : 947.08 ps Reaction : H2O2^0 (-14709) + Histone^0 (-14734) -> Histone^0 (-14739) +At time : 1.0147 ns Reaction : Thymine^0 (-8669) + °OH^0 (-14559) -> Damaged_Thymine^0 (-14740) +At time : 1.1349 ns Reaction : H2O2^0 (-14725) + Histone^0 (-14736) -> Histone^0 (-14741) +At time : 1.2569 ns Reaction : H2O2^0 (-14720) + Histone^0 (-14738) -> Histone^0 (-14742) +At time : 1.7904 ns Reaction : H2O2^0 (-14718) + Histone^0 (-12896) -> Histone^0 (-14743) +At time : 1.9548 ns Reaction : e_aq^-1 (-143) + Histone^0 (-1682) -> Histone^0 (-14744) *** G4Scheduler ends at time : 2.5 ns ___________________________________ Physics stage ends *** G4Scheduler starts processing -At time : 1 ps Reaction : °OH^0 (-14590) + °OH^0 (-14661) -> H2O2^0 (-14675) -At time : 1 ps Reaction : e_aq^-1 (-24) + °OH^0 (-14641) -> OH^-1 (-14676) -At time : 1 ps Reaction : °OH^0 (-14638) + Cytosine^0 (-2100) -> Damaged_Cytosine^0 (-14677) -At time : 1 ps Reaction : °OH^0 (-14624) + °OH^0 (-14626) -> H2O2^0 (-14678) -At time : 1 ps Reaction : °OH^0 (-14622) + Guanine^0 (-6881) -> Damaged_Guanine^0 (-14679) -At time : 1 ps Reaction : °OH^0 (-14558) + °OH^0 (-14610) -> H2O2^0 (-14680) -At time : 1 ps Reaction : °OH^0 (-14570) + °OH^0 (-14598) -> H2O2^0 (-14681) -At time : 1 ps Reaction : Guanine^0 (-2099) + °OH^0 (-14578) -> Damaged_Guanine^0 (-14682) -At time : 1.7 ps Reaction : °OH^0 (-14572) + °OH^0 (-14617) -> H2O2^0 (-14683) -At time : 2.4 ps Reaction : H^0 (-14637) + Histone^0 (-1673) -> Histone^0 (-14684) -At time : 2.4 ps Reaction : °OH^0 (-14566) + °OH^0 (-14594) -> H2O2^0 (-14685) -At time : 3.45 ps Reaction : °OH^0 (-14616) + °OH^0 (-14612) -> H2O2^0 (-14686) -At time : 3.45 ps Reaction : Deoxyribose^0 (-11361) + °OH^0 (-14599) -> Damaged_Deoxyribose^0 (-14687) -At time : 3.45 ps Reaction : °OH^0 (-14562) + °OH^0 (-14588) -> H2O2^0 (-14688) -At time : 9.5926 ps Reaction : °OH^0 (-14583) + °OH^0 (-14580) -> H2O2^0 (-14689) -At time : 13.343 ps Reaction : °OH^0 (-14564) + °OH^0 (-14592) -> H2O2^0 (-14690) -At time : 14.343 ps Reaction : Guanine^0 (-2107) + °OH^0 (-14642) -> Damaged_Guanine^0 (-14691) -At time : 14.343 ps Reaction : °OH^0 (-14549) + °OH^0 (-14621) -> H2O2^0 (-14692) -At time : 16.343 ps Reaction : °OH^0 (-14636) + °OH^0 (-14670) -> H2O2^0 (-14693) -At time : 16.343 ps Reaction : Histone^0 (-6479) + H^0 (-14575) -> Histone^0 (-14694) -At time : 17.343 ps Reaction : °OH^0 (-14601) + e_aq^-1 (-128) -> OH^-1 (-14695) -At time : 23.343 ps Reaction : Adenine^0 (-2103) + H^0 (-14579) -> Damaged_Adenine^0 (-14696) -At time : 27.343 ps Reaction : Cytosine^0 (-7799) + °OH^0 (-14668) -> Damaged_Cytosine^0 (-14697) -At time : 28.343 ps Reaction : °OH^0 (-14576) + H^0 (-14577) -> No product -At time : 31.343 ps Reaction : e_aq^-1 (-146) + Guanine^0 (-2123) -> Damaged_Guanine^0 (-14698) -At time : 32.343 ps Reaction : °OH^0 (-14645) + H^0 (-14648) -> No product -At time : 38.343 ps Reaction : H^0 (-14656) + °OH^0 (-14657) -> No product -At time : 38.343 ps Reaction : e_aq^-1 (-14551) + H^0 (-14623) -> OH^-1 (-14699) + H_2^0 (-14700) -At time : 49.479 ps Reaction : OH^-1 (-14676) + H3O^1 (-14671) -> No product -At time : 53.479 ps Reaction : °OH^0 (-14653) + °OH^0 (-14673) -> H2O2^0 (-14701) -At time : 54.479 ps Reaction : °OH^0 (-14630) + Adenine^0 (-6581) -> Damaged_Adenine^0 (-14702) -At time : 54.479 ps Reaction : °OH^0 (-14628) + H^0 (-14627) -> No product -At time : 55.479 ps Reaction : Thymine^0 (-6590) + °OH^0 (-14574) -> Damaged_Thymine^0 (-14703) -At time : 58.479 ps Reaction : H^0 (-14563) + °OH^0 (-14587) -> No product -At time : 64.479 ps Reaction : Histone^0 (-14684) + H^0 (-14650) -> Histone^0 (-14704) -At time : 68.479 ps Reaction : H^0 (-14602) + H^0 (-14571) -> H_2^0 (-14705) -At time : 72.479 ps Reaction : Thymine^0 (-11352) + °OH^0 (-14597) -> Damaged_Thymine^0 (-14706) -At time : 77.915 ps Reaction : H^0 (-14639) + °OH^0 (-14643) -> No product -At time : 78.915 ps Reaction : Histone^0 (-14694) + H3O^1 (-14550) -> Histone^0 (-14707) -At time : 113.41 ps Reaction : °OH^0 (-14620) + Deoxyribose^0 (-6880) -> Damaged_Deoxyribose^0 (-14708) -At time : 113.41 ps Reaction : H^0 (-14609) + °OH^0 (-14607) -> No product -At time : 128.41 ps Reaction : OH^-1 (-14699) + H3O^1 (-14667) -> No product -At time : 140.41 ps Reaction : Deoxyribose^0 (-11941) + H^0 (-14593) -> Damaged_Deoxyribose^0 (-14709) -At time : 161.41 ps Reaction : e_aq^-1 (-134) + Adenine^0 (-7850) -> Damaged_Adenine^0 (-14710) -At time : 182.41 ps Reaction : H^0 (-14625) + Histone^0 (-14707) -> Histone^0 (-14711) -At time : 213.17 ps Reaction : H^0 (-14646) + °OH^0 (-14651) -> No product -At time : 243.17 ps Reaction : °OH^0 (-14568) + Deoxyribose^0 (-11645) -> Damaged_Deoxyribose^0 (-14712) -At time : 252.17 ps Reaction : °OH^0 (-14633) + Deoxyribose^0 (-6595) -> Damaged_Deoxyribose^0 (-14713) -At time : 258.17 ps Reaction : e_aq^-1 (-142) + H2O2^0 (-14693) -> OH^-1 (-14714) + °OH^0 (-14715) -At time : 285.17 ps Reaction : H^0 (-14629) + Histone^0 (-14711) -> Histone^0 (-14716) -At time : 300.17 ps Reaction : Guanine^0 (-2660) + °OH^0 (-14672) -> Damaged_Guanine^0 (-14717) -At time : 336.17 ps Reaction : Deoxyribose^0 (-1765) + °OH^0 (-14647) -> Damaged_Deoxyribose^0 (-14718) -At time : 372.17 ps Reaction : H^0 (-14567) + Thymine^0 (-11360) -> Damaged_Thymine^0 (-14719) -At time : 456.47 ps Reaction : Deoxyribose^0 (-11406) + H^0 (-14604) -> Damaged_Deoxyribose^0 (-14720) -At time : 465.47 ps Reaction : Histone^0 (-11285) + H^0 (-14662) -> Histone^0 (-14721) -At time : 472.06 ps Reaction : H^0 (-14569) + Thymine^0 (-11688) -> Damaged_Thymine^0 (-14722) -At time : 481.06 ps Reaction : e_aq^-1 (-14554) + H^0 (-14581) -> OH^-1 (-14723) + H_2^0 (-14724) -At time : 484.06 ps Reaction : Histone^0 (-14704) + H^0 (-14644) -> Histone^0 (-14725) -At time : 674.53 ps Reaction : H3O^1 (-14553) + OH^-1 (-14723) -> No product -At time : 726.1 ps Reaction : H^0 (-14631) + Deoxyribose^0 (-6599) -> Damaged_Deoxyribose^0 (-14726) -At time : 732.1 ps Reaction : H^0 (-14613) + Histone^0 (-14721) -> Histone^0 (-14727) -At time : 738.78 ps Reaction : H^0 (-14559) + H^0 (-14565) -> H_2^0 (-14728) -At time : 791.88 ps Reaction : Adenine^0 (-11327) + °OH^0 (-14666) -> Damaged_Adenine^0 (-14729) -At time : 835.39 ps Reaction : H^0 (-14573) + °OH^0 (-14606) -> No product -At time : 849.84 ps Reaction : Histone^0 (-14725) + H^0 (-14654) -> Histone^0 (-14730) -At time : 910.89 ps Reaction : OH^-1 (-14714) + H3O^1 (-14669) -> No product -At time : 1.0233 ns Reaction : H^0 (-14611) + Deoxyribose^0 (-11330) -> Damaged_Deoxyribose^0 (-14731) -At time : 1.1533 ns Reaction : Cytosine^0 (-11356) + °OH^0 (-14603) -> Damaged_Cytosine^0 (-14732) -At time : 1.1633 ns Reaction : Histone^0 (-14716) + OH^-1 (-14695) -> Histone^0 (-14733) -At time : 1.1733 ns Reaction : Histone^0 (-12086) + H^0 (-14600) -> Histone^0 (-14734) -At time : 1.2833 ns Reaction : Histone^0 (-7280) + H_2^0 (-14705) -> Histone^0 (-14735) -At time : 1.3133 ns Reaction : H3O^1 (-14634) + Histone^0 (-2474) -> Histone^0 (-14736) -At time : 1.3233 ns Reaction : H_2^0 (-14619) + Histone^0 (-14735) -> Histone^0 (-14737) -At time : 1.3738 ns Reaction : H^0 (-14595) + °OH^0 (-14663) -> No product -At time : 1.3738 ns Reaction : Thymine^0 (-11448) + e_aq^-1 (-137) -> Damaged_Thymine^0 (-14738) -At time : 1.3838 ns Reaction : H3O^1 (-14632) + Histone^0 (-14737) -> Histone^0 (-14739) -At time : 1.6438 ns Reaction : °OH^0 (-14555) + Thymine^0 (-11952) -> Damaged_Thymine^0 (-14740) -At time : 1.7138 ns Reaction : Deoxyribose^0 (-11669) + H^0 (-14591) -> Damaged_Deoxyribose^0 (-14741) -At time : 1.896 ns Reaction : °OH^0 (-14608) + Guanine^0 (-7774) -> Damaged_Guanine^0 (-14742) +At time : 1 ps Reaction : H^0 (-14616) + °OH^0 (-14615) -> No product +At time : 1 ps Reaction : °OH^0 (-14613) + H^0 (-14614) -> No product +At time : 1 ps Reaction : e_aq^-1 (-14532) + H^0 (-14610) -> OH^-1 (-14617) + H_2^0 (-14618) +At time : 1 ps Reaction : °OH^0 (-14609) + °OH^0 (-14530) -> H2O2^0 (-14619) +At time : 1 ps Reaction : °OH^0 (-14605) + °OH^0 (-14604) -> H2O2^0 (-14620) +At time : 1 ps Reaction : Histone^0 (-4048) + H^0 (-14602) -> Histone^0 (-14621) +At time : 1 ps Reaction : °OH^0 (-14599) + H^0 (-14600) -> No product +At time : 1 ps Reaction : °OH^0 (-14597) + H^0 (-14598) -> No product +At time : 1 ps Reaction : °OH^0 (-14595) + H^0 (-14596) -> No product +At time : 1 ps Reaction : H^0 (-14594) + °OH^0 (-14593) -> No product +At time : 1 ps Reaction : H^0 (-14592) + °OH^0 (-14591) -> No product +At time : 1 ps Reaction : °OH^0 (-14588) + °OH^0 (-14590) -> H2O2^0 (-14622) +At time : 1 ps Reaction : H^0 (-14585) + °OH^0 (-14584) -> No product +At time : 1 ps Reaction : H^0 (-14581) + °OH^0 (-14580) -> No product +At time : 1 ps Reaction : °OH^0 (-14578) + °OH^0 (-14579) -> H2O2^0 (-14623) +At time : 1 ps Reaction : H^0 (-14576) + °OH^0 (-14575) -> No product +At time : 1 ps Reaction : °OH^0 (-14573) + H^0 (-14574) -> No product +At time : 1 ps Reaction : H^0 (-14572) + °OH^0 (-14571) -> No product +At time : 1 ps Reaction : °OH^0 (-14567) + H^0 (-14570) -> No product +At time : 1 ps Reaction : H^0 (-14568) + °OH^0 (-14569) -> No product +At time : 1 ps Reaction : °OH^0 (-14565) + H^0 (-14566) -> No product +At time : 1 ps Reaction : °OH^0 (-14561) + H^0 (-14562) -> No product +At time : 1 ps Reaction : °OH^0 (-14559) + H^0 (-14560) -> No product +At time : 1 ps Reaction : °OH^0 (-14557) + H^0 (-14558) -> No product +At time : 1 ps Reaction : Histone^0 (-8854) + H^0 (-14556) -> Histone^0 (-14624) +At time : 1 ps Reaction : °OH^0 (-14554) + °OH^0 (-14555) -> H2O2^0 (-14625) +At time : 1 ps Reaction : H^0 (-14551) + °OH^0 (-14550) -> No product +At time : 1 ps Reaction : H^0 (-14549) + °OH^0 (-14548) -> No product +At time : 1 ps Reaction : H^0 (-14547) + °OH^0 (-14546) -> No product +At time : 1 ps Reaction : H^0 (-14545) + °OH^0 (-14544) -> No product +At time : 1 ps Reaction : H^0 (-14539) + °OH^0 (-14538) -> No product +At time : 1 ps Reaction : H^0 (-14537) + °OH^0 (-14536) -> No product +At time : 1 ps Reaction : e_aq^-1 (-14535) + e_aq^-1 (-14529) -> OH^-1 (-14626) + OH^-1 (-14627) + H_2^0 (-14628) +At time : 1 ps Reaction : °OH^0 (-14527) + °OH^0 (-14533) -> H2O2^0 (-14629) +At time : 1 ps Reaction : OH^-1 (-14627) + H3O^1 (-14528) -> No product +At time : 1 ps Reaction : OH^-1 (-14626) + H3O^1 (-14534) -> No product +At time : 1 ps Reaction : Histone^0 (-14624) + H2O2^0 (-14625) -> Histone^0 (-14630) +At time : 1 ps Reaction : Histone^0 (-14621) + e_aq^-1 (-110) -> Histone^0 (-14631) +At time : 1 ps Reaction : OH^-1 (-14617) + H3O^1 (-14531) -> No product +At time : 1 ps Reaction : Histone^0 (-14631) + °OH^0 (-14563) -> Histone^0 (-14632) +At time : 1 ps Reaction : Histone^0 (-14630) + e_aq^-1 (-57) -> Histone^0 (-14633) +At time : 1 ps Reaction : Histone^0 (-14633) + °OH^0 (-14526) -> Histone^0 (-14634) +At time : 1 ps Reaction : °OH^0 (-14522) + Histone^0 (-14632) -> Histone^0 (-14635) +At time : 1 ps Reaction : Histone^0 (-14635) + °OH^0 (-14601) -> Histone^0 (-14636) +At time : 1 ps Reaction : °OH^0 (-14553) + Histone^0 (-14634) -> Histone^0 (-14637) +At time : 1 ps Reaction : Histone^0 (-14637) + °OH^0 (-14540) -> Histone^0 (-14638) +At time : 1 ps Reaction : °OH^0 (-14524) + Histone^0 (-14636) -> Histone^0 (-14639) +At time : 1 ps Reaction : Histone^0 (-14639) + H3O^1 (-14521) -> Histone^0 (-14640) +At time : 1 ps Reaction : H_2^0 (-14552) + Histone^0 (-14638) -> Histone^0 (-14641) +At time : 1 ps Reaction : H3O^1 (-14525) + Histone^0 (-14641) -> Histone^0 (-14642) +At time : 1 ps Reaction : H3O^1 (-14523) + Histone^0 (-14640) -> Histone^0 (-14643) +At time : 1 ps Reaction : Histone^0 (-14643) + H^0 (-14564) -> Histone^0 (-14644) +At time : 1 ps Reaction : H^0 (-14541) + Histone^0 (-14642) -> Histone^0 (-14645) +At time : 1.35 ps Reaction : °OH^0 (-14582) + H^0 (-14583) -> No product +At time : 1.7 ps Reaction : °OH^0 (-14607) + °OH^0 (-14608) -> H2O2^0 (-14646) +At time : 1.7 ps Reaction : H^0 (-14543) + °OH^0 (-14542) -> No product +At time : 32.756 ps Reaction : °OH^0 (-14587) + °OH^0 (-14612) -> H2O2^0 (-14647) *** G4Scheduler ends at time : 2.5 ns ___________________________________ Run terminated. Run Summary Number of events processed : 2 - User=64.560000s Real=64.628807s Sys=0.060000s + User=236.850000s Real=237.200449s Sys=0.120000s ----> Histograms are saved Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x20d9020 -UserPhysicsList deleted 0x20d9cc0 -UserActionInitialization deleted 0x238c000 +UserDetectorConstruction deleted 0x1dab6d0 +UserPhysicsList deleted 0x1dac370 +UserActionInitialization deleted 0x205f4d0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -854,7 +860,7 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 29120 +Total navigation history collections cleaned: 29198 G4RNGHelper object is deleted. ================== Deleting memory pools =================== Pool ID '20G4NavigationLevelRep', size : 27.9 MB @@ -865,13 +871,13 @@ Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '17G4DynamicParticle', size : 2.34 MB -Pool ID '7G4Track', size : 4.68 MB +Pool ID '7G4Track', size : 4.69 MB Pool ID '18G4TouchableHistory', size : 1.75 MB -Pool ID '10G4Molecule', size : 1.4 MB +Pool ID '10G4Molecule', size : 1.41 MB Pool ID '8G4KDTree', size : 0.000961 MB Pool ID '8G4KDNodeI4G4ITE', size : 1 MB Pool ID '14G4KDTreeResult', size : 0.000961 MB -Pool ID '8G4KDNodeI10G4MoleculeE', size : 0.000961 MB +Pool ID '8G4KDNodeI10G4MoleculeE', size : 0.00192 MB Number of memory pools allocated: 15 of which, static: 0 Dynamic pools deleted: 15 / Total memory freed: 40 MB ============================================================ diff --git a/examples/extended/medical/dna/dnadamage2/History b/examples/extended/medical/dna/dnadamage2/History index d56828c3a8..e8fd7e60b6 100644 --- a/examples/extended/medical/dna/dnadamage2/History +++ b/examples/extended/medical/dna/dnadamage2/History @@ -4,6 +4,12 @@ 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-05-05 Hoang Tran (dnadamage2-V11-03-01) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-22 Hoang Tran (dnadamage2-V11-03-00) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + ## 2024-10-02 Hoang Tran (dnadamage2-V11-02-00) - Modified the molecule names of OH, HO2, O in MoleculeDefinition. Each molecule configuration has a molecule definition. diff --git a/examples/extended/medical/dna/dnadamage2/dnadamage2.out b/examples/extended/medical/dna/dnadamage2/dnadamage2.out index 681d66618e..11ece8a957 100644 --- a/examples/extended/medical/dna/dnadamage2/dnadamage2.out +++ b/examples/extended/medical/dna/dnadamage2/dnadamage2.out @@ -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 ======== @@ -308,7 +308,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 ====== @@ -324,7 +326,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 @@ -352,19 +354,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 ====== @@ -386,23 +390,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 ====== @@ -425,19 +433,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 ====== @@ -447,8 +457,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 @@ -459,7 +469,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 ====== @@ -545,7 +557,7 @@ DNAMolecularIRTModel will be used --------------------End of Global Run----------------------- The run has 10 events Number of events recorded by the species scorer = 10 - Total energy deposited in the world volume : 1.4932e+05 eV + Total energy deposited in the world volume : 1.3473e+05 eV ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh b/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh index 2f63703101..3e1b8966e6 100644 --- a/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh @@ -57,6 +57,7 @@ class ActionInitialization : public G4VUserActionInitialization void BuildForMaster() const override; void Build() const override; + void BuildMoleculeCounters() const; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnadamage2/include/EventAction.hh b/examples/extended/medical/dna/dnadamage2/include/EventAction.hh new file mode 100644 index 0000000000..572eb25781 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/EventAction.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" + +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc b/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc index 7ba569c99d..da09ce84e0 100644 --- a/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc @@ -53,6 +53,7 @@ #include "G4H2O.hh" #include "G4MoleculeCounter.hh" #include "G4Scheduler.hh" +#include "EventAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -63,26 +64,32 @@ ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(); - - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - - // sequential mode - if (G4Threading::IsMultithreadedApplication() == false) { - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); - } - SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); SetUserAction(new StackingAction()); + SetUserAction(new EventAction()); G4Scheduler::Instance()->SetUserAction(new TimeStepAction()); + BuildMoleculeCounters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::BuildMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + G4MoleculeCounterManager::Instance()->SetAccumulateCounterIntoMaster(false); + + auto counter = std::make_unique(); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(1 * ps)); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/RunAction.cc b/examples/extended/medical/dna/dnadamage2/src/RunAction.cc index 926b89c1ad..5d85b4f8cb 100644 --- a/examples/extended/medical/dna/dnadamage2/src/RunAction.cc +++ b/examples/extended/medical/dna/dnadamage2/src/RunAction.cc @@ -47,11 +47,11 @@ #include "Run.hh" +#include "G4DNAChemistryManager.hh" #include "G4Run.hh" #include "G4RunManager.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... RunAction::RunAction() : G4UserRunAction() {} @@ -66,8 +66,12 @@ G4Run* RunAction::GenerateRun() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -void RunAction::BeginOfRunAction(const G4Run*) +void RunAction::BeginOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + // informs the runManager to save random number seed G4RunManager::GetRunManager()->SetRandomNumberStore(false); } @@ -76,6 +80,10 @@ void RunAction::BeginOfRunAction(const G4Run*) void RunAction::EndOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + G4int nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) return; @@ -101,18 +109,35 @@ void RunAction::EndOfRunAction(const G4Run* run) // LET Run* aRun = (Run*)run; G4THitsMap* totLET = aRun->GetLET(); + if (!totLET) { + G4cout << "No LET data available." << G4endl; + return; + } G4int nOfEvent = totLET->entries(); G4double LET_mean = 0; G4double LET_square = 0; - for (G4int i = 0; i < nOfEvent; i++) { - G4double* LET = (*totLET)[i]; - if (!LET) continue; - LET_mean += *LET; - LET_square += (*LET) * (*LET); - } - LET_mean /= nOfEvent; - LET_square = std::sqrt(LET_square / nOfEvent - std::pow(LET_mean, 2)); + if (nOfEvent > 0) { + for (G4int i = 0; i < nOfEvent; i++) { + G4double* LET = (*totLET)[i]; + if (!LET) continue; + LET_mean += *LET; + LET_square += (*LET) * (*LET); + } + LET_mean /= nOfEvent; + G4double variance = LET_square / nOfEvent - std::pow(LET_mean, 2); + if (variance >= 0) { + LET_square = std::sqrt(variance); + } + else { + G4cerr << "Warning: Negative variance encountered. Setting LET_square to 0." << G4endl; + LET_square = 0; + } + } + else { + LET_mean = 0; + LET_square = 0; + } masterScorer->OutputAndClear(); masterSBScorer->OutputAndClear(LET_mean, LET_square); } diff --git a/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc b/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc index b302880317..4faae4c3a2 100644 --- a/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc +++ b/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc @@ -79,8 +79,6 @@ ScoreSpecies::ScoreSpecies(G4String name, G4int depth) fOutputTypeUI = new G4UIcmdWithAString("/scorer/species/OutputFormat", this); fOutputFileUI = new G4UIcmdWithAString("/scorer/species/OutputFile", this); - - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -149,7 +147,6 @@ void ScoreSpecies::Initialize(G4HCofThisEvent* HCE) } HCE->AddHitsCollection(fHCID, (G4VHitsCollection*)fEvtMap); - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -158,33 +155,37 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + // get the first, and in this case only, counter + auto counter = G4MoleculeCounterManager::Instance()->GetMoleculeCounter(0); + if (counter == nullptr) { + G4Exception("ScoreSpecies::EndOfEvent", "BAD_REFERENCE", FatalException, + "The molecule counter could not be received!"); + } - if (species.get() == 0 || species->size() == 0) { + auto indices = counter->GetMapIndices(); + + if (indices.empty()) { G4cout << "No molecule recorded, energy deposited= " << G4BestUnit(fEdep, "Energy") << G4endl; ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - for (auto molecule : *species) { + for (const auto& idx : indices) { for (auto time_mol : fTimeToRecord) { - double n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, time_mol); + double n_mol = counter->GetNbMoleculesAtTime(idx, time_mol); if (n_mol < 0) { G4cerr << "N molecules not valid < 0 " << G4endl; G4Exception("", "N<0", FatalException, ""); } - SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][idx.Molecule]; molInfo.fNumber += n_mol; - molInfo.fNumber2 += n_mol * n_mol; - double gValue = (n_mol / (fEdep / eV)) * 100.; + G4double gValue = (n_mol / (fEdep / eV)) * 100.; molInfo.fG += gValue; molInfo.fG2 += gValue * gValue; } @@ -193,7 +194,6 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -347,7 +347,7 @@ void ScoreSpecies::OutputToASCII() Nb2 = 0.0; } - else if (N > 0) { + else if (N > 0 && G2 > 0 && Nb2 > 0) { G2 = std::sqrt(N / (N - 1) * (G2 / N - G * G)); Nb2 = std::sqrt(N / (N - 1) * (Nb2 / N - Nb * Nb)); } diff --git a/examples/extended/medical/dna/dnaphysics/.README.txt b/examples/extended/medical/dna/dnaphysics/.README.txt index b9adc6504b..1a97a9f398 100644 --- a/examples/extended/medical/dna/dnaphysics/.README.txt +++ b/examples/extended/medical/dna/dnaphysics/.README.txt @@ -50,7 +50,10 @@ In interactive mode, run: In batch, the macro dnaphysics.in can be used. It shows how to shoot different particle types and how to use Geant4-DNA Physics constructors. -The deexcitation.in macro can also be used to simulate the energy spectrum of deexcitation products. +The deexcitation.in macro can be used to simulate the energy spectrum of +deexcitation products. + +The radioactive.in macro can be used to simulate some radioactive nuclei. \section dnaphysics_s5 PHYSICS @@ -111,9 +114,25 @@ file plot.C; to do so : * under your ROOT session, type in : .X plot.C to execute the macro file * alternatively you can type directly under your session : root plot.C -Also, the plotDeexcitation.C ROOT macro file can be used to plot results of deexcitation.in. +The plotDeexcitation.C ROOT macro file can be used to plot results of +deexcitation.in. -The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc): +The plotRadioactive.C ROOT macro file can be used to plot results of +radioactive.in. + +The plotElastic.C ROOT macro file can be used to show distribution of elastic +scattering angles of the elastic process obtained with elastic.in. This macro also +illustrates the usage of a dedicated UI command : + +\verbatim +/step/recordOnlyFirstStep value +\endverbatim + +where value is 0 or 1. Setting value to 1 only records the first step and then kills +the track and its secondaries. + +The naming scheme for particles and processes on the displayed ROOT plots +adopts a local numbering, as follows (see SteppingAction.cc): - particles: \n gamma: 0 \n @@ -123,11 +142,14 @@ hydrogen: 3 \n alpha: 4 \n alpha+: 5 \n helium: 6 \n +GenericIon (above helium): 7\n \n - processes: \n Capture: 1 +RadioactiveDecay: 2 + e-_G4DNAElectronSolvation: 10 \n e-_G4DNAElastic: 11 \n e-_G4DNAExcitation: 12 \n @@ -196,9 +218,4 @@ Rayl: 84 \n - the track ID - the parent track ID ---------------------------------------------------------------------------- - -Should you have any enquiry, please do not hesitate to contact: -incerti@cenbg.in2p3.fr or tran@lp2ib.in2p3.fr - */ diff --git a/examples/extended/medical/dna/dnaphysics/History b/examples/extended/medical/dna/dnaphysics/History index baa494e3af..06b9393148 100644 --- a/examples/extended/medical/dna/dnaphysics/History +++ b/examples/extended/medical/dna/dnaphysics/History @@ -4,6 +4,20 @@ 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-05-06 Sebastien Incerti (dnaphysics-V11-03-03) +- Added UI command to record first step only; elastic.in updated accordingly + +## 2025-03-21 Sebastien Incerti (dnaphysics-V11-03-02) +- Added elastic.in and plotElastic.C macros to show distribution of scattering angles + +## 2025-01-24 Sebastien Incerti (dnaphysics-V11-03-01) +- Updated SteppingAction.cc with more comments & process identification + +## 2025-01-22 Sebastien Incerti (dnaphysics-V11-03-00) +- Added possibility to simulate radioactive nuclei +-- added radioactive.in and plotRadioactive.C +-- modified PhysicsList.cc and SteppingAction.cc + ## 2024-10-29 Sebastien Incerti, Hoang Tran (dnaphysics-V11-02-04) - Fixed issue with visualization by setting default World size and material in DetectorConstruction.cc diff --git a/examples/extended/medical/dna/dnaphysics/README b/examples/extended/medical/dna/dnaphysics/README index c072bb8dc6..f436effc81 100644 --- a/examples/extended/medical/dna/dnaphysics/README +++ b/examples/extended/medical/dna/dnaphysics/README @@ -34,8 +34,9 @@ The geometry is a 100-micron side cube (World) made of liquid water (G4_WATER material). Particles are shot from the center of the volume. The World size can be changed directly in the dnaphysics.in macro file. -The variable density feature of materials is illustrated in DetectorConstruction. -The material density can be changed directly in the dnaphysics.in macro file. +The variable density feature of materials is illustrated in +DetectorConstruction. The material density can be changed directly in the +dnaphysics.in macro file. ---->2. SET-UP @@ -50,7 +51,10 @@ In interactive mode, run: In batch, the macro dnaphysics.in can be used. It shows how to shoot different particle types and how to use Geant4-DNA Physics constructors. -The deexcitation.in macro can also be used to simulate the energy spectrum of deexcitation products. +The deexcitation.in macro can be used to simulate the energy spectrum of +deexcitation products. + +The radioactive.in macro can be used to simulate some radioactive nuclei. ---->4. PHYSICS @@ -106,9 +110,22 @@ file plot.C; to do so : * under your ROOT session, type in : .X plot.C to execute the macro file * alternatively you can type directly under your session : root plot.C -Also, the plotDeexcitation.C ROOT macro file can be used to plot results of deexcitation.in. +The plotDeexcitation.C ROOT macro file can be used to plot results of +deexcitation.in. -The naming scheme on the displayed ROOT plots is as follows (see SteppingAction.cc): +The plotRadioactive.C ROOT macro file can be used to plot results of +radioactive.in. + +The plotElastic.C ROOT macro file can be used to show distribution of elastic +scattering angles of the elastic process obtained with elastic.in. This macro also +illustrates the usage of a dedicated UI command : +/step/recordOnlyFirstStep value +where value is 0 or 1. +Setting value to 1 only records the first step and then kills the track and its +secondaries. + +The naming scheme for particles and processes on the displayed ROOT plots adopts +a local numbering, as follows (see SteppingAction.cc): -particles @@ -119,11 +136,14 @@ hydrogen: 3 alpha: 4 alpha+: 5 helium: 6 +GenericIon (above helium): 7 -processes Capture: 1 +RadioactiveDecay: 2 + e-_G4DNAElectronSolvation: 10 e-_G4DNAElastic: 11 e-_G4DNAExcitation: 12 @@ -191,8 +211,3 @@ Rayl: 84 - the track kinetic energy (in eV) - the track ID - the parent track ID - ---------------------------------------------------------------------------- - -Should you have any enquiry, please do not hesitate to contact: -incerti@lp2ib.in2p3.fr or tran@lp2ib.in2p3.fr diff --git a/examples/extended/medical/dna/dnaphysics/dnaphysics.out b/examples/extended/medical/dna/dnaphysics/dnaphysics.out index 64144f8e5a..d197c0a9f1 100644 --- a/examples/extended/medical/dna/dnaphysics/dnaphysics.out +++ b/examples/extended/medical/dna/dnaphysics/dnaphysics.out @@ -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 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x15985e0 +##### Create analysis manager 0x29c0800 Using analysis manager # # MT @@ -114,7 +114,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 ======== @@ -320,7 +320,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= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 MeV + DummyModel : Emin= 100 MeV Emax= 1 GeV + 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 ====== @@ -336,7 +338,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= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm @@ -346,8 +348,8 @@ nuclearStopping: for GenericIon SubType=8 BuildTable=0 ====================================================================== ====== Radioactive Decay Physics Parameters ======= ====================================================================== -min MeanLife (from G4NuclideTable) 1 ns -Max life time (from G4DeexPrecoParameters) 1000 ps +min MeanLife (from G4NuclideTable) 0.14427 ps +Max life time (from G4DeexPrecoParameters) 0.14427 ps Internal e- conversion flag 1 Stored internal conversion coefficients 1 Enabled atomic relaxation mode 1 @@ -387,19 +389,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= 1 GeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV + 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 ====== @@ -421,23 +425,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= 1 GeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV + 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= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV + 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 ====== @@ -460,19 +468,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= 1 GeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo + DummyModel : Emin= 300 MeV Emax= 1 GeV 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= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + DummyModel : Emin= 300 MeV Emax= 1 GeV + 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 ====== @@ -482,8 +492,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= 1 GeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV + DummyModel : Emin= 500 keV Emax= 1 GeV 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 @@ -494,7 +504,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= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 MeV + DummyModel : Emin= 100 MeV Emax= 1 GeV + 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 ====== @@ -623,14 +635,14 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 2 - User=1.850000s Real=1.897355s Sys=0.040000s + User=1.910000s Real=1.942428s Sys=0.030000s ... write file : dna.root - done ... close file : dna.root - done G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1429780 -UserPhysicsList deleted 0x13c7070 -UserActionInitialization deleted 0x158d160 +UserDetectorConstruction deleted 0x22fdf10 +UserPhysicsList deleted 0x255b720 +UserActionInitialization deleted 0x29b5380 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/medical/dna/dnaphysics/elastic.in b/examples/extended/medical/dna/dnaphysics/elastic.in new file mode 100644 index 0000000000..55d727d1e6 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/elastic.in @@ -0,0 +1,49 @@ +# Verbosity +/tracking/verbose 0 +# +# MT +/run/numberOfThreads 10 +# +# Material +/dna/test/setMat G4_WATER +# +# Size of World volume +/dna/test/setSize 100 nm +# +# Atomic deexcitation +/process/em/fluo true +/process/em/auger true +/process/em/augerCascade true +/process/em/deexcitationIgnoreCut true +# +# Physics +# - To use Geant4-DNA constructor X, X=0, 2, 4, or 6 (recommended) +#/dna/test/addPhysics DNA_Opt0 +#/dna/test/addPhysics DNA_Opt2 +/dna/test/addPhysics DNA_Opt4 +#/dna/test/addPhysics DNA_Opt6 +# +# Run initialization +/run/initialize +/run/printProgress 1 +# +# Incident particle type +/gun/particle e- +# +# Incident particle energy +/gun/energy 1 keV +# +/process/inactivate e-_G4DNAElectronSolvation +/process/inactivate e-_G4DNAExcitation +/process/inactivate e-_G4DNAIonisation +#/process/inactivate e-_G4DNAAttachment +#/process/inactivate e-_G4DNAVibExcitation +# +/process/inactivate msc +/process/inactivate eIoni +/process/inactivate eBrem +# +/step/recordOnlyFirstStep 1 +# +# Beam on +/run/beamOn 1000000 diff --git a/examples/extended/medical/dna/dnaphysics/include/SteppingAction.hh b/examples/extended/medical/dna/dnaphysics/include/SteppingAction.hh index 5ce2333407..4a79aab7a6 100644 --- a/examples/extended/medical/dna/dnaphysics/include/SteppingAction.hh +++ b/examples/extended/medical/dna/dnaphysics/include/SteppingAction.hh @@ -40,6 +40,9 @@ #define SteppingAction_h 1 #include "G4UserSteppingAction.hh" +#include "globals.hh" + +class SteppingMessenger; class SteppingAction : public G4UserSteppingAction { @@ -48,5 +51,12 @@ class SteppingAction : public G4UserSteppingAction virtual ~SteppingAction(); virtual void UserSteppingAction(const G4Step*); + + void SetKillStatus(G4int value) { fKill = value; }; + + private: + G4int fKill = 0; + SteppingMessenger* fSteppingMessenger = nullptr; + }; #endif diff --git a/examples/extended/parallel/TBB/B2b/include/B2bDetectorMessenger.hh b/examples/extended/medical/dna/dnaphysics/include/SteppingMessenger.hh similarity index 67% rename from examples/extended/parallel/TBB/B2b/include/B2bDetectorMessenger.hh rename to examples/extended/medical/dna/dnaphysics/include/SteppingMessenger.hh index 80d8cfe588..6b722ce44e 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2bDetectorMessenger.hh +++ b/examples/extended/medical/dna/dnaphysics/include/SteppingMessenger.hh @@ -23,48 +23,45 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 // -/// \file B2bDetectorMessenger.hh -/// \brief Definition of the B2bDetectorMessenger class +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file SteppingMessenger.hh +/// \brief Definition of the SteppingMessenger class -#ifndef B2bDetectorMessenger_h -#define B2bDetectorMessenger_h 1 +#ifndef SteppingMessenger_h +#define SteppingMessenger_h 1 #include "G4UImessenger.hh" #include "globals.hh" -class B2bDetectorConstruction; +class SteppingAction; + class G4UIdirectory; -class G4UIcmdWithAString; -class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWithAnInteger; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -/// Messenger class that defines commands for B2bDetectorConstruction. -/// -/// It implements commands: -/// - /B2/det/setTargetMaterial name -/// - /B2/det/setChamberMaterial name -/// - /B2/det/stepMax value unit - -class B2bDetectorMessenger : public G4UImessenger +class SteppingMessenger : public G4UImessenger { public: - B2bDetectorMessenger(B2bDetectorConstruction*); - virtual ~B2bDetectorMessenger(); + SteppingMessenger(SteppingAction*); + ~SteppingMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - B2bDetectorConstruction* fDetectorConstruction; + SteppingAction* fSteppingAction = nullptr; - G4UIdirectory* fB2Directory; - G4UIdirectory* fDetDirectory; - - G4UIcmdWithAString* fTargMatCmd; - G4UIcmdWithAString* fChamMatCmd; - - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + G4UIdirectory* fStepDir = nullptr; + G4UIcmdWithAnInteger* fKillCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnaphysics/plotElastic.C b/examples/extended/medical/dna/dnaphysics/plotElastic.C new file mode 100644 index 0000000000..a6b33b52d0 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/plotElastic.C @@ -0,0 +1,124 @@ +// ********************************************************************* +// To execute this macro under ROOT after your simulation ended, +// 1 - launch ROOT (usually type 'root' at your machine's prompt) +// 2 - type '.X plot.C' at the ROOT session prompt +// ********************************************************************* + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address); + +void plotElastic() +{ + gROOT->Reset(); + + gStyle->SetOptStat(0); + gStyle->SetOptTitle(0); + gStyle->SetCanvasColor(0); + gStyle->SetPadColor(0); + gStyle->SetFrameFillColor(0); + gStyle->SetPadGridX(false); + gStyle->SetPadGridY(false); + gStyle->SetGridColor(kGray+1); + gStyle->SetLabelFont(42, "XYZ"); + gStyle->SetTitleFont(42, "XYZ"); + gStyle->SetLabelSize(0.045, "XYZ"); + gStyle->SetTitleSize(0.05, "XYZ"); + gStyle->SetTitleOffset(1.2, "Y"); + gStyle->SetPadTickX(1); + gStyle->SetPadTickY(1); + gStyle->SetLineWidth(2); + gStyle->SetMarkerStyle(20); + gStyle->SetMarkerSize(1.2); + gStyle->SetLegendBorderSize(0); + gStyle->SetLegendFont(42); + gStyle->SetOptStat(000000); + + TCanvas* c1 = new TCanvas ("c1","",20,20,1500,500); + c1->Divide(3,1); + + TFile* f = new TFile("dna.root"); + + TNtuple* ntuple2; + ntuple2 = (TNtuple*)f->Get("step"); + bool rowWise2 = true; + TBranch* eventBranch2 = ntuple2->FindBranch("row_wise_branch"); + if ( ! eventBranch2 ) rowWise2 = false; + + // Cosine plot + + c1->cd(1); + gPad->SetLogy(); + + ntuple2->SetFillStyle(1001); + ntuple2->SetFillColor(2); + ntuple2->Draw + ("(cosTheta)","parentID==0&&trackID==1&&stepID==1",""); + + TH1* hist = (TH1*)gPad->GetPrimitive("htemp"); + hist->GetXaxis()->SetLabelSize(0.03); + hist->GetYaxis()->SetLabelSize(0.03); + hist->GetXaxis()->SetTitleSize(0.03); + hist->GetYaxis()->SetTitleSize(0.03); + hist->GetXaxis()->SetTitleOffset(1.4); + hist->GetYaxis()->SetTitleOffset(1.8); + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + hist->GetXaxis()->SetTitle("cos(#theta)"); + hist->GetYaxis()->SetTitle(""); + gPad->SetLogy(); + gPad->SetTicks(1, 1); + gPad->Modified(); + + // Solid angle (Omega) plot + // (as in dsigma/dOmega vs Omega diff. cross section plots) + + c1->cd(2); + gPad->SetLogy(); + ntuple2->Draw + ("2*3.1415926535*(1-cosTheta)","parentID==0&&trackID==1&&stepID==1",""); + + TH1* hist2 = (TH1*)gPad->GetPrimitive("htemp"); + hist2->GetXaxis()->SetLabelSize(0.03); + hist2->GetYaxis()->SetLabelSize(0.03); + hist2->GetXaxis()->SetTitleSize(0.03); + hist2->GetYaxis()->SetTitleSize(0.03); + hist2->GetXaxis()->SetTitleOffset(1.4); + hist2->GetYaxis()->SetTitleOffset(1.8); + hist2->GetXaxis()->CenterTitle(); + hist2->GetYaxis()->CenterTitle(); + hist2->GetXaxis()->SetTitle("Solid angle (sr)"); + hist2->GetYaxis()->SetTitle(""); + gPad->SetLogy(); + gPad->SetTicks(1, 1); + gPad->Modified(); + + // Angle plot + + c1->cd(3); + gPad->SetLogy(); + ntuple2->Draw + ("acos(cosTheta)*180/3.14159","parentID==0&&trackID==1&&stepID==1",""); + + TH1* hist3 = (TH1*)gPad->GetPrimitive("htemp"); + hist3->GetXaxis()->SetLabelSize(0.03); + hist3->GetYaxis()->SetLabelSize(0.03); + hist3->GetXaxis()->SetTitleSize(0.03); + hist3->GetYaxis()->SetTitleSize(0.03); + hist3->GetXaxis()->SetTitleOffset(1.4); + hist3->GetYaxis()->SetTitleOffset(1.8); + hist3->GetXaxis()->CenterTitle(); + hist3->GetYaxis()->CenterTitle(); + hist3->GetYaxis()->SetTitle(""); + hist3->GetXaxis()->SetTitle("Angle (deg)"); + gPad->SetLogy(); + gPad->SetTicks(1, 1); + gPad->Modified(); +} + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address) { + TLeaf* leaf = ntuple->FindLeaf(name); + if ( ! leaf ) { + std::cerr << "Error in : unknown leaf --> " << name << std::endl; + return; + } + leaf->SetAddress(address); +} diff --git a/examples/extended/medical/dna/dnaphysics/plotRadioactive.C b/examples/extended/medical/dna/dnaphysics/plotRadioactive.C new file mode 100644 index 0000000000..8720337861 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/plotRadioactive.C @@ -0,0 +1,95 @@ +// ------------------------------------------------------------------- +// ------------------------------------------------------------------- +// +// ********************************************************************* +// To execute this macro under ROOT after your simulation ended, +// 1 - launch ROOT (usually type 'root' at your machine's prompt) +// 2 - type '.X plot.C' at the ROOT session prompt +// ********************************************************************* + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address); + +void plotRadioactive() +{ + gROOT->Reset(); + gStyle->SetPalette(1); + gROOT->SetStyle("Plain"); + + TCanvas* c1 = new TCanvas ("c1","",20,20,1000,500); + c1->Divide(2,1); + + // Uncomment if merging should be done + //system ("rm -rf dna.root"); + //system ("hadd dna.root dna_*.root"); + + TFile* f = new TFile("dna.root"); + + TNtuple* ntuple; + ntuple = (TNtuple*)f->Get("step"); + bool rowWise = true; + TBranch* eventBranch = ntuple->FindBranch("row_wise_branch"); + if ( ! eventBranch ) rowWise = false; + // std::cout << "rowWise: " << rowWise << std::endl; + + //********************************************************************* + // canvas tab 1 + //********************************************************************* + + c1->cd(1); + gStyle->SetOptStat(000000); + + // All + ntuple->SetFillStyle(1001); + ntuple->SetFillColor(2); + ntuple->Draw("flagProcess","","B"); + + // Excitation + ntuple->SetFillStyle(1001); + ntuple->SetFillColor(3); + ntuple->Draw("flagProcess","flagProcess==12||flagProcess==15||flagProcess==22||flagProcess==32||flagProcess==42||flagProcess==52||flagProcess==62","Bsame"); + + // Elastic + ntuple->SetFillStyle(1001); + ntuple->SetFillColor(4); + ntuple->Draw("flagProcess","flagProcess==11||flagProcess==21||flagProcess==31||flagProcess==41||flagProcess==51||flagProcess==61||flagProcess==110||flagProcess==210||flagProcess==410||flagProcess==510||flagProcess==710||flagProcess==120||flagProcess==220||flagProcess==420||flagProcess==520||flagProcess==720","Bsame"); + + // Ionisation + ntuple->SetFillStyle(1001); + ntuple->SetFillColor(5); + ntuple->Draw("flagProcess","flagProcess==13||flagProcess==23||flagProcess==33||flagProcess==43||flagProcess==53||flagProcess==63||flagProcess==73||flagProcess==130||flagProcess==230||flagProcess==430||flagProcess==530||flagProcess==730","Bsame"); + + // Charge decrease + //ntuple->SetFillStyle(1001); + //ntuple->SetFillColor(6); + //ntuple->Draw("flagProcess","flagProcess==24||flagProcess==44||flagProcess==54","Bsame"); + + // Charge increase + //ntuple->SetFillStyle(1001); + //ntuple->SetFillColor(7); + //ntuple->Draw("flagProcess","flagProcess==35||flagProcess==55||flagProcess==65","Bsame"); + + gPad->SetLogy(); + + //********************************************************************* + // canvas tab 2 + //********************************************************************* + + c1->cd(2); + + ntuple->SetMarkerColor(2); + + ntuple->Draw("x:y:z","flagParticle==1"); + + //ntuple->SetMarkerColor(4); + //ntuple->SetMarkerSize(4); + //ntuple->Draw("x:y:z/1000","flagParticle==4 || flagParticle==5 || flagParticle==6","same"); +} + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address) { + TLeaf* leaf = ntuple->FindLeaf(name); + if ( ! leaf ) { + std::cerr << "Error in : unknown leaf --> " << name << std::endl; + return; + } + leaf->SetAddress(address); +} diff --git a/examples/extended/medical/dna/dnaphysics/radioactive.in b/examples/extended/medical/dna/dnaphysics/radioactive.in new file mode 100644 index 0000000000..a20daa2863 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/radioactive.in @@ -0,0 +1,81 @@ +# Verbosity +/tracking/verbose 0 +/run/verbose 2 +/control/verbose 2 +# +# MT +/run/numberOfThreads 5 +# +# Material +/dna/test/setMat G4_WATER +# or alternatively +#/dna/test/setMatDens G4_WATER_MODIFIED 1.200 g/cm3 +# +# Size of World volume +/dna/test/setSize 100 um +# +# Atomic deexcitation +/process/em/fluo true +/process/em/auger true +/process/em/augerCascade true +/process/em/deexcitationIgnoreCut true +# +# Physics +# - To use Geant4-DNA constructor X, X=0, 2, 4, or 6 (recommended) +#/dna/test/addPhysics DNA_Opt0 +/dna/test/addPhysics DNA_Opt2 +#/dna/test/addPhysics DNA_Opt4 +#/dna/test/addPhysics DNA_Opt6 +# +# - To add radioactive radioactive decay +/dna/test/addPhysics raddecay +# +# Heavy ions tracking cut +#/dna/test/addIonsTrackingCut false +# +# Run initialization +/run/initialize +# +# Visualization +#/control/execute vis.mac +# +# Incident particle type +/gun/particle ion +# +# Some iodine nuclei +#/gun/ion 53 123 +#/gun/ion 53 124 +#/gun/ion 53 125 +#/gun/ion 53 131 +# +# Some beta- emitters: 67Cu, 90Y, 177Lu +/gun/ion 29 67 +#/gun/ion 39 90 +#/gun/ion 71 177 +# +# Some Auger emitters: 64Cu, 111In, 201Tl +#/gun/ion 29 64 +#/gun/ion 49 111 +#/gun/ion 81 201 +# +# Some beta+ emitters: 18F, 68Ga +#/gun/ion 9 18 +#/gun/ion 31 68 +# +# Some alpha emitters: 149Tb, 211At, 212Pb, 213Bi, 223Ra, 225Ac, 227Th +#/gun/ion 65 149 +#/gun/ion 85 211 +#/gun/ion 82 212 +#/gun/ion 83 213 +#/gun/ion 88 223 +#/gun/ion 89 225 +#/gun/ion 90 227 +# +# Nucleus kinetic energy is set to zero +/gun/energy 0 eV +# +# Decay time threshold (if needed) +#/process/had/rdm/thresholdForVeryLongDecayTime 1.0e+60 year +# +# Beam on +/run/beamOn 5 diff --git a/examples/extended/medical/dna/dnaphysics/src/PhysicsList.cc b/examples/extended/medical/dna/dnaphysics/src/PhysicsList.cc index 2832a5f49b..f89924594b 100644 --- a/examples/extended/medical/dna/dnaphysics/src/PhysicsList.cc +++ b/examples/extended/medical/dna/dnaphysics/src/PhysicsList.cc @@ -58,6 +58,7 @@ #include "G4GenericIon.hh" #include "G4RadioactiveDecayPhysics.hh" #include "G4SystemOfUnits.hh" +#include "G4NuclideTable.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -74,6 +75,10 @@ PhysicsList::PhysicsList() : G4VModularPhysicsList() G4EmParameters* param = G4EmParameters::Instance(); param->SetMinEnergy(100 * eV); param->SetMaxEnergy(1 * GeV); + + // Limits in G4NuclideTable + G4NuclideTable::GetInstance()->SetThresholdOfHalfLife(0.1 * picosecond); + G4NuclideTable::GetInstance()->SetLevelTolerance(1.0 * eV); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnaphysics/src/SteppingAction.cc b/examples/extended/medical/dna/dnaphysics/src/SteppingAction.cc index dec4ff1640..fed9d5d265 100644 --- a/examples/extended/medical/dna/dnaphysics/src/SteppingAction.cc +++ b/examples/extended/medical/dna/dnaphysics/src/SteppingAction.cc @@ -37,6 +37,7 @@ /// \brief Implementation of the SteppingAction class #include "SteppingAction.hh" +#include "SteppingMessenger.hh" #include "DetectorConstruction.hh" #include "PrimaryGeneratorAction.hh" @@ -55,11 +56,17 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::SteppingAction() : G4UserSteppingAction() {} +SteppingAction::SteppingAction() : G4UserSteppingAction() +{ + fSteppingMessenger = new SteppingMessenger(this); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::~SteppingAction() {} +SteppingAction::~SteppingAction() +{ + delete fSteppingMessenger; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -69,14 +76,19 @@ void SteppingAction::UserSteppingAction(const G4Step* step) if (!step->GetPostStepPoint()) return; if (!step->GetPostStepPoint()->GetProcessDefinedStep()) return; + // ***** FOR FIRST STEP RECORD ONLY + if (step->GetTrack()->GetCurrentStepNumber()>=1 && fKill) step->GetTrack()->SetTrackStatus(fKillTrackAndSecondaries); + // + // G4double flagParticle = -1.; G4double flagProcess = -1.; G4double x, y, z, xp, yp, zp; - // Particle identification + // 1) Particle identification // The following method avoids the usage of string comparison + G4ParticleDefinition* partDef = step->GetTrack()->GetDynamicParticle()->GetDefinition(); if (partDef == G4Gamma::GammaDefinition()) flagParticle = 0; @@ -90,7 +102,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) G4DNAGenericIonsManager* instance; instance = G4DNAGenericIonsManager::Instance(); - // Usage example + // G4DNAGenericIonsManager usage example /* G4ParticleDefinition* protonDef = G4Proton::ProtonDefinition(); G4ParticleDefinition* hydrogenDef = instance->GetIon("hydrogen"); @@ -105,8 +117,10 @@ void SteppingAction::UserSteppingAction(const G4Step* step) if (partDef == instance->GetIon("helium")) flagParticle = 6; - // Alternative method (based on string comparison) + // Heavier ions + if (partDef->GetPDGCharge()>4) flagParticle = 7; + // Alternative method (based on string comparison ) - not recommended - /* const G4String& particleName = step->GetTrack()->GetDynamicParticle()-> GetDefinition()->GetParticleName(); @@ -120,8 +134,9 @@ void SteppingAction::UserSteppingAction(const G4Step* step) else if (particleName == "helium") flagParticle = 6; */ - // Process identification - + // 2) Process identification + // + // Reminder // Process sub-types are listed in G4PhysicsListHelper.cc // or in Geant4-DNA process class implementation files (*.cc) @@ -131,11 +146,8 @@ void SteppingAction::UserSteppingAction(const G4Step* step) const G4String& processName = postStep->GetProcessDefinedStep()->GetProcessName(); - if (processName == "Capture") flagProcess = 1; - // (no subType and procID exists at the moment for this process) - // used to kill ions below tracking cut - - else if (flagParticle == 0) { + // For gammas + if (flagParticle == 0) { if (procID == 12) flagProcess = 81; else if (procID == 13) @@ -146,6 +158,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 84; } + // For electrons else if (flagParticle == 1) { if (procID == 58) flagProcess = 10; @@ -167,6 +180,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 130; } + // For protons else if (flagParticle == 2) { if (procID == 51) flagProcess = 21; @@ -186,6 +200,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 240; } + // For hydrogen else if (flagParticle == 3) { if (procID == 51) flagProcess = 31; @@ -197,6 +212,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 35; } + // For alpha else if (flagParticle == 4) { if (procID == 51) flagProcess = 41; @@ -216,6 +232,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 440; } + // For alpha+ else if (flagParticle == 5) { if (procID == 51) flagProcess = 51; @@ -237,6 +254,7 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 540; } + // For helium else if (flagParticle == 6) { if (procID == 51) flagProcess = 61; @@ -248,20 +266,29 @@ void SteppingAction::UserSteppingAction(const G4Step* step) flagProcess = 65; } - else if (processName == "GenericIon_G4DNAIonisation") - flagProcess = 73; - else if (processName == "msc") - flagProcess = 710; - else if (processName == "CoulombScat") - flagProcess = 720; - else if (processName == "ionIoni") - flagProcess = 730; - else if (processName == "nuclearStopping") - flagProcess = 740; - // (for all GenericIons) - - // Alternatively, using process names + else if (flagParticle == 7) { + // For generic ions + if (processName == "Capture") + flagProcess = 1; + // This process is used to kill ions below tracking cut + // No subType and procID exists at the moment for this process, + // so testing is performed using string comparison + else if (procID == 210) + flagProcess = 2; + // This is the RadioactiveDecay process + else if (procID == 53) // GenericIon_G4DNAIonisation + flagProcess = 73; + else if (procID == 10) // msc + flagProcess = 710; + else if (procID == 1) // CoulombScat + flagProcess = 720; + else if (procID == 2) // ionIoni + flagProcess = 730; + else if (procID == 8) // nuclearStopping + flagProcess = 740; + } + // Alternative method (based on string comparison ) - not recommended - /* else if (processName=="e-_G4DNAElectronSolvation") flagProcess =10; else if (processName=="e-_G4DNAElastic") flagProcess =11; @@ -297,9 +324,10 @@ void SteppingAction::UserSteppingAction(const G4Step* step) else if (processName=="helium_G4DNAChargeIncrease") flagProcess =65; else if (processName=="GenericIon_G4DNAIonisation") flagProcess =73; - */ + // 3) Fill ntuples + if (processName != "Transportation") { x = preStep->GetPosition().x() / nanometer; y = preStep->GetPosition().y() / nanometer; @@ -309,11 +337,8 @@ void SteppingAction::UserSteppingAction(const G4Step* step) yp = postStep->GetPosition().y() / nanometer; zp = postStep->GetPosition().z() / nanometer; - // get analysis manager - G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); - // fill ntuple analysisManager->FillNtupleDColumn(0, flagParticle); analysisManager->FillNtupleDColumn(1, flagProcess); analysisManager->FillNtupleDColumn(2, xp); diff --git a/examples/extended/medical/dna/dnaphysics/src/SteppingMessenger.cc b/examples/extended/medical/dna/dnaphysics/src/SteppingMessenger.cc new file mode 100644 index 0000000000..d08d913506 --- /dev/null +++ b/examples/extended/medical/dna/dnaphysics/src/SteppingMessenger.cc @@ -0,0 +1,76 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file SteppingMessenger.cc +/// \brief Implementation of the SteppingMessenger class + +#include "SteppingMessenger.hh" +#include "SteppingAction.hh" + +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +SteppingMessenger::SteppingMessenger(SteppingAction* step) : fSteppingAction(step) +{ + fStepDir = new G4UIdirectory("/step/"); + fStepDir->SetGuidance("step control"); + + fKillCmd = new G4UIcmdWithAnInteger("/step/recordOnlyFirstStep", this); + fKillCmd->SetGuidance(" Choice: 0=no kill; 1=kill track and secondaries after 1st step;"); + fKillCmd->SetParameterName("choice", true); + fKillCmd->SetRange("choice>=0"); + fKillCmd->SetDefaultValue(0); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +SteppingMessenger::~SteppingMessenger() +{ + delete fKillCmd; + delete fStepDir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void SteppingMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fKillCmd) { + fSteppingAction->SetKillStatus(fKillCmd->GetNewIntValue(newValue)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/icsd/icsd.out b/examples/extended/medical/dna/icsd/icsd.out index eb77231d7b..5afec06368 100644 --- a/examples/extended/medical/dna/icsd/icsd.out +++ b/examples/extended/medical/dna/icsd/icsd.out @@ -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 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x11d69b0 +##### Create analysis manager 0x19b5060 Using analysis manager e-_G4DNAPTBAugerModel is constructed ======================================================================= @@ -49,7 +49,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 ======== diff --git a/examples/extended/medical/dna/jetcounter/jetcounter.out b/examples/extended/medical/dna/jetcounter/jetcounter.out index 5dfa9fc132..80ba884b12 100644 --- a/examples/extended/medical/dna/jetcounter/jetcounter.out +++ b/examples/extended/medical/dna/jetcounter/jetcounter.out @@ -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 @@ -64,7 +64,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 ======== @@ -341,7 +341,7 @@ proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 MeV msc: for GenericIon SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -370,7 +370,7 @@ GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +DNAIonIonisationModel : Emin= 0 eV Emax= 300 MeV msc: for alpha SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -421,7 +421,7 @@ alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 400 MeV msc: for alpha+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -467,14 +467,14 @@ alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 400 MeV alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 400 MeV msc: for anti_proton SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -534,7 +534,7 @@ helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 400 MeV hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -548,21 +548,21 @@ hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0 DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 100 TeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region Target ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 TeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 MeV msc: for kaon+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -756,5 +756,4 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ### Run 0 start. -ev: 0 -number of event = 40 User=1.710000s Real=1.710941s Sys=0.000000s +number of event = 40 User=2.620000s Real=2.622032s Sys=0.000000s diff --git a/examples/extended/medical/dna/mfp/History b/examples/extended/medical/dna/mfp/History index 6b0a9d79ad..cd764ad568 100644 --- a/examples/extended/medical/dna/mfp/History +++ b/examples/extended/medical/dna/mfp/History @@ -4,6 +4,9 @@ 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-01-03 Sebastien Incerti (mfp-V11-03-00) +- Added ntuple merging + ## 2024-10-05 Sebastien Incerti (mfp-V11-02-02) - Updated README - Added auto to plot.C diff --git a/examples/extended/medical/dna/mfp/mfp.out b/examples/extended/medical/dna/mfp/mfp.out index 21d3b50e24..b4404f0042 100644 --- a/examples/extended/medical/dna/mfp/mfp.out +++ b/examples/extended/medical/dna/mfp/mfp.out @@ -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", @@ -138,7 +139,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 ======== @@ -344,7 +345,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 ====== @@ -360,7 +363,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 @@ -388,19 +391,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 ====== @@ -422,23 +427,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 ====== @@ -461,19 +470,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 ====== @@ -483,8 +494,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 @@ -495,7 +506,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 ====== diff --git a/examples/extended/medical/dna/mfp/src/HistoManager.cc b/examples/extended/medical/dna/mfp/src/HistoManager.cc index 7dd63ad28d..4b1c242698 100644 --- a/examples/extended/medical/dna/mfp/src/HistoManager.cc +++ b/examples/extended/medical/dna/mfp/src/HistoManager.cc @@ -59,6 +59,7 @@ void HistoManager::Book() analysisManager->SetFileName(fFileName); analysisManager->SetVerboseLevel(1); analysisManager->SetActivation(true); // Enable inactivation of histograms + analysisManager->SetNtupleMerging(true); // Define histograms start values const G4int kMaxHisto = 7; diff --git a/examples/extended/medical/dna/microdosimetry/microdosimetry.out b/examples/extended/medical/dna/microdosimetry/microdosimetry.out index d257927cf2..dd69fc4efd 100644 --- a/examples/extended/medical/dna/microdosimetry/microdosimetry.out +++ b/examples/extended/medical/dna/microdosimetry/microdosimetry.out @@ -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 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x1c8d200 +##### Create analysis manager 0x285c2a0 Using analysis manager # # MT @@ -145,7 +145,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 ======== @@ -408,7 +408,7 @@ proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 100 MeV msc: for GenericIon SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -437,7 +437,7 @@ GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +DNAIonIonisationModel : Emin= 0 eV Emax= 300 MeV msc: for alpha SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -488,7 +488,7 @@ alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 400 MeV msc: for alpha+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -534,14 +534,14 @@ alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 400 MeV alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 400 MeV msc: for anti_proton SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -588,7 +588,7 @@ helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 400 MeV hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -602,21 +602,21 @@ hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0 DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== DummyModel : Emin= 0 eV Emax= 1 GeV StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm ===== EM models for the G4Region regionTarget ====== -DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 1 GeV +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 100 MeV msc: for kaon+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -795,14 +795,14 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 2 - User=0.940000s Real=0.947448s Sys=0.010000s + User=0.950000s Real=0.980767s Sys=0.020000s ... write file : dna.root - done ... close file : dna.root - done G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1b2a870 -UserPhysicsList deleted 0x1ac8078 -UserActionInitialization deleted 0x1c806a0 +UserDetectorConstruction deleted 0x26f9910 +UserPhysicsList deleted 0x2696728 +UserActionInitialization deleted 0x284f740 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/medical/dna/microprox/microprox.out b/examples/extended/medical/dna/microprox/microprox.out index 3bdbd1a1a6..557d8e6352 100644 --- a/examples/extended/medical/dna/microprox/microprox.out +++ b/examples/extended/medical/dna/microprox/microprox.out @@ -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 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x1a14420 +##### Create analysis manager 0xd524a0 Using analysis manager Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... @@ -30,23 +30,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", @@ -145,7 +146,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 ======== @@ -355,7 +356,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 ====== @@ -371,7 +374,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 @@ -399,19 +402,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 ====== @@ -433,23 +438,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 ====== @@ -472,19 +481,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 ====== @@ -494,8 +505,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 @@ -506,7 +517,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 ====== diff --git a/examples/extended/medical/dna/microyz/microyz.out b/examples/extended/medical/dna/microyz/microyz.out index 1340b9a417..c4eb9fd80d 100644 --- a/examples/extended/medical/dna/microyz/microyz.out +++ b/examples/extended/medical/dna/microyz/microyz.out @@ -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 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x1fdab00 +##### Create analysis manager 0x1333be0 Using analysis manager Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... @@ -30,23 +30,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", @@ -147,7 +148,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 ======== @@ -357,7 +358,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 ====== @@ -373,7 +376,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 @@ -401,19 +404,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 ====== @@ -435,23 +440,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 ====== @@ -474,19 +483,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 ====== @@ -496,8 +507,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 @@ -508,7 +519,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 ====== diff --git a/examples/extended/medical/dna/molcounters/.README.txt b/examples/extended/medical/dna/molcounters/.README.txt new file mode 100644 index 0000000000..c0cc0c82f5 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/.README.txt @@ -0,0 +1,34 @@ + +///\file "medical/dna/molcounters/.README.txt" +///\brief Examples molcounters README page + +/*! \page molcounters Examples + +Author: C. Velten \n +Date: 7 April 2025 \n +Email: cv2415@columbia.edu + +\ This example is provided by the Geant4-DNA collaboration + (http://geant4-dna.org). + + Any report or published results obtained using the Geant4-DNA software + shall cite the following Geant4-DNA collaboration publications:\n + Med. Phys. 51 (2024) 5873–5889\n + Med. Phys. 45 (2018) e722-e739\n + Phys. Med. 31 (2015) 861-874\n + Med. Phys. 37 (2010) 4692-4708\n + Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178\n + + +\ This folder contains two examples, +(1) basic; and\n +(2) sdcounters.\n + +1) "basic" focuses on the use of the molecule counter manager +system and how to register different counters and adjust their +parameters like, e.g., activation and time precision.\n + +2) "sdcounters" shows how to use primitive scorers and a multi- +functional detector to record and write out molecule counts.\n + +Please refer to each example's README for further information.\n \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/CMakeLists.txt b/examples/extended/medical/dna/molcounters/CMakeLists.txt new file mode 100644 index 0000000000..c0c349372f --- /dev/null +++ b/examples/extended/medical/dna/molcounters/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.16...3.27) + +project(extended-dna-molcounters-example) + +add_subdirectory(basic) +add_subdirectory(sdcounters) \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/History b/examples/extended/medical/dna/molcounters/History new file mode 100644 index 0000000000..102d04bd0b --- /dev/null +++ b/examples/extended/medical/dna/molcounters/History @@ -0,0 +1,8 @@ +# Example counter History + +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-05-05 Hoang Tran (molcounters-V11-03-00) +- Added all counter examples in CMakeLists.txt diff --git a/examples/extended/medical/dna/molcounters/README b/examples/extended/medical/dna/molcounters/README new file mode 100644 index 0000000000..cfc32f606a --- /dev/null +++ b/examples/extended/medical/dna/molcounters/README @@ -0,0 +1,44 @@ + ------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + +*** molcounters example(s) *** + +Author: C. Velten +Date: 7 April 2025 +Email: cv2415@columbia.edu + +(c) The Geant4-DNA collaboration. + +This example shows how to use the new molecule counter manager +system and how to write custom molecule counters. + +This example is provided by the Geant4-DNA collaboration. + +The custom (spatially-aware) molecule counter used here +is further described in: +Radiat. Phys. Chem. 212 (2023) 111194 +doi:10.1016/j.radphyschem.2023.111194 + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Med. Phys. 51 (2024) 5873–5889 +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +This folder contains two examples, +(1) basic; and +(2) sdcounters. + +1) "basic" focuses on the use of the molecule counter manager +system and how to register different counters and adjust their +parameters like, e.g., activation and time precision. + +2) "sdcounters" shows how to use primitive scorers and a multi- +functional detector to record and write out molecule counts. + +Please refer to each example's README for further information. diff --git a/examples/extended/medical/dna/molcounters/basic/.README.txt b/examples/extended/medical/dna/molcounters/basic/.README.txt new file mode 100644 index 0000000000..f1b94a33bf --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/.README.txt @@ -0,0 +1,95 @@ + +///\file "medical/dna/molcounters/basic/.README.txt" +///\brief Example molcounters basic README page + +/*! \page Examplebasic Example basic + +\ This example is provided by the Geant4-DNA collaboration + (http://geant4-dna.org). + +The custom (spatially-aware) molecule counter used here +is further described in: +- Radiat. Phys. Chem. 212 (2023) 111194 \ +doi:10.1016/j.radphyschem.2023.111194 + + Any report or published results obtained using the Geant4-DNA software + shall cite the following Geant4-DNA collaboration publications:\n + Med. Phys. 51 (2024) 5873–5889\n + Med. Phys. 45 (2018) e722-e739\n + Phys. Med. 31 (2015) 861-874\n + Med. Phys. 37 (2010) 4692-4708\n + Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178\n + +\Description: + + +\section 1. __Geometry__: +A box of liquid water with a 8 µm (radius) spherical cell placed at its center. +The cell contains a 4 µm (radius) nucleus and 100 mitochondria. + +\section2. __Incident particles__: +Electrons with 1 keV energy, which can be changed in +the simple_sbs.ini macro file. +They are shot from the center of the box (inside the nucleus). + +\section3. __Physics__: +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class with chemistry constructor 3. + +\section4. __Molecule Counters__: +Counters are defined and registered in the ActionInitialization +class for master & workers using the BuildMoleculeCounters(), and +BuildMultipleAndCustomMoleculeCounters() methods. +To switch between either of these methods, change the +boolean value of fBuildMultipleAndCustomMoleculeCounters in +ActionInitialization.hh. +By default, the molecule counter manager will accumulate counts from +worker instances into the master instance. To facilitate this the user +__must__ create a `UserEventAction` and `UserRunAction` and override +the `(Begin|End)Of(Event|Run)Action` methods and call the corresponding +method on the `G4DNAChemistryManager::Instance()`. See the example's +`EventAction.hh` and `RunAction.(hh|cc)` on how to do this. \ + + __Default Method: `BuildMoleculeCounters()`:__ + * Reset counters before each run but not keep counter values between events + * Register a default `G4MoleculeCounter` instance called "Molecules" + * Register a default `G4MoleculeReactionCounter` instance called "Reactions" + + + __Alternative Method: `BuildMultipleAndCustomMoleculeCounters()`:__ + * Reset counters before each run but not keep counter values between events + * Register a `G4MoleculeCounter` instance called "BasicCounter": + * set its time precision to 25 ps + * Register a `G4MoleculeCounter` instance called "BasicCounter_Restricted": + * set its time precision to 25 ps + * activate the counter for global times in [500 ps, 10 ns] + * Register a `G4MoleculeCounter` instance called "BasicCounter_VariablePrecision": + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * activate the counter for global times in [500 ps, 10 ns] + * Register a custom `MoleculeCounter` instance called "MoleculeCounter" + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * __(important)__ `SetSensitiveToStepping(true)` to change molecule count when traversing geometry boundaries + * `SetIgnoreMoleculePosition(false)` if set to `true` the counter behaves like `G4MoleculeCounter` + * `SetNegativeCountsAreFatal(true)` to throw a FatalException if any molecule count drops below 0 through misregistration + * Register a `G4MoleculeReactionCounter` instance called "Reactions": + * set its time precision to 50 ps + * activate the counter for global times in [0 ps, 1 µs] + +\section5. __Execute__ the code by running: +`./molcounters_basic [simple_sbs.in,simple_irt_syn_react.in]` +The `simple_sbs.in` macro __only__ includes molecule transport (diffusion)! + +\section6. __Output__: Contents of the molecule counters are dumped to `stdout` +at the end of each run by the RunAction::EndOfRunAction() diff --git a/examples/extended/parallel/MPI/examples/exMPI01/CMakeLists.txt b/examples/extended/medical/dna/molcounters/basic/CMakeLists.txt similarity index 54% rename from examples/extended/parallel/MPI/examples/exMPI01/CMakeLists.txt rename to examples/extended/medical/dna/molcounters/basic/CMakeLists.txt index 312ca136b9..39091fb83f 100644 --- a/examples/extended/parallel/MPI/examples/exMPI01/CMakeLists.txt +++ b/examples/extended/medical/dna/molcounters/basic/CMakeLists.txt @@ -1,75 +1,62 @@ -# - CmakeLists.txt for building an application - -#---------------------------------------------------------------------------- -# Setup the project cmake_minimum_required(VERSION 3.16...3.27) -project(exMPI01) #---------------------------------------------------------------------------- -# check MPI package... -find_package(MPI REQUIRED) -# modify these variables if needed -#set(CMAKE_CXX_COMPILER mpicxx) -#set(CMAKE_CXX_COMPILER mpiicpc) +project(molcounters_basic) -#set(CMAKE_CXX_INCLUDE_PATH ) - -#------------------------------------------------------------------------------ +#---------------------------------------------------------------------------- # Find Geant4 package, activating all available UI and Vis drivers by default # You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui # to build a batch mode only executable +# option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() - - -find_package(G4mpi REQUIRED) +if (WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else () + find_package(Geant4 REQUIRED) +endif () #---------------------------------------------------------------------------- # Setup Geant4 include directories and compile definitions +# Setup include directory for this project # +include_directories(${PROJECT_SOURCE_DIR}/include) + include(${Geant4_USE_FILE}) #---------------------------------------------------------------------------- # Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs # -include_directories(${PROJECT_SOURCE_DIR}/include) file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR} - ${G4mpi_INCLUDE_DIR}) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) #---------------------------------------------------------------------------- # Add the executable, and link it to the Geant4 libraries # -add_executable(exMPI01 exMPI01.cc ${sources} ${headers}) -target_link_libraries(exMPI01 ${G4mpi_LIBRARIES} ${Geant4_LIBRARIES}) +add_executable(molcounters_basic molcounters_basic.cc ${sources} ${headers}) +target_link_libraries(molcounters_basic ${Geant4_LIBRARIES}) #---------------------------------------------------------------------------- # Copy all scripts to the build directory, i.e. the directory in which we -# build exMPI01. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. +# build chem6_proj. This is so that we can run the executable directly because +# it relies on these scripts being in the current working directory. # -set(exMPI01_SCRIPTS - run.mac - vis.mac - ) +file(GLOB SCRIPTS + ${PROJECT_SOURCE_DIR}/*.in) +# ${PROJECT_SOURCE_DIR}/*.mac +# ${PROJECT_SOURCE_DIR}/*.C) -foreach(_script ${exMPI01_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY +foreach (_script ${SCRIPTS}) + configure_file( + ${_script} + ${PROJECT_BINARY_DIR}/. + COPYONLY ) -endforeach() +endforeach () #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # -install(TARGETS exMPI01 RUNTIME DESTINATION bin) +install(TARGETS molcounters_basic DESTINATION bin) diff --git a/examples/extended/medical/dna/molcounters/basic/History b/examples/extended/medical/dna/molcounters/basic/History new file mode 100644 index 0000000000..e51975ae64 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/History @@ -0,0 +1,11 @@ + + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + +## 2025-05-28 H Tran (molcounter-basic-V11-03-02) +- Fixed warning in windows + +## 2025-05-05 H Tran (molcounter-basic-V11-03-01) +- first commit, example is created diff --git a/examples/extended/medical/dna/molcounters/basic/README b/examples/extended/medical/dna/molcounters/basic/README new file mode 100644 index 0000000000..b1aaea3bfb --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/README @@ -0,0 +1,103 @@ + ------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= +*** molcounters/basic example *** + +Author: C. Velten \ +Date: 7 April 2025 \ +Email: cv2415@columbia.edu + +(c) The Geant4-DNA collaboration. + +This example shows how to use the new molecule counter manager +system and how to write custom molecule counters. + +This example is provided by the Geant4-DNA collaboration. + +The custom (spatially-aware) molecule counter used here +is further described in: +- Radiat. Phys. Chem. 212 (2023) 111194 \ +doi:10.1016/j.radphyschem.2023.111194 + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +- Med. Phys. 51 (2024) 5873–5889 +- Med. Phys. 45 (2018) e722-e739 +- Phys. Med. 31 (2015) 861-874 +- Med. Phys. 37 (2010) 4692-4708 +- Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +### Description: + +1. __Geometry__: +A box of liquid water with a 8 µm (radius) spherical cell placed at its center. +The cell contains a 4 µm (radius) nucleus and 100 mitochondria. + +2. __Incident particles__: +Electrons with 1 keV energy, which can be changed in +the simple_sbs.ini macro file. +They are shot from the center of the box (inside the nucleus). + +3. __Physics__: +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class with chemistry constructor 3. + +4. __Molecule Counters__: +Counters are defined and registered in the ActionInitialization +class for master & workers using the BuildMoleculeCounters(), and +BuildMultipleAndCustomMoleculeCounters() methods. +To switch between either of these methods, change the +boolean value of fBuildMultipleAndCustomMoleculeCounters in +ActionInitialization.hh. +By default, the molecule counter manager will accumulate counts from +worker instances into the master instance. To facilitate this the user +__must__ create a `UserEventAction` and `UserRunAction` and override +the `(Begin|End)Of(Event|Run)Action` methods and call the corresponding +method on the `G4DNAChemistryManager::Instance()`. See the example's +`EventAction.hh` and `RunAction.(hh|cc)` on how to do this. \ + + __Default Method: `BuildMoleculeCounters()`:__ + * Reset counters before each run but not keep counter values between events + * Register a default `G4MoleculeCounter` instance called "Molecules" + * Register a default `G4MoleculeReactionCounter` instance called "Reactions" + + + __Alternative Method: `BuildMultipleAndCustomMoleculeCounters()`:__ + * Reset counters before each run but not keep counter values between events + * Register a `G4MoleculeCounter` instance called "BasicCounter": + * set its time precision to 25 ps + * Register a `G4MoleculeCounter` instance called "BasicCounter_Restricted": + * set its time precision to 25 ps + * activate the counter for global times in [500 ps, 10 ns] + * Register a `G4MoleculeCounter` instance called "BasicCounter_VariablePrecision": + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * activate the counter for global times in [500 ps, 10 ns] + * Register a custom `MoleculeCounter` instance called "MoleculeCounter" + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * __(important)__ `SetSensitiveToStepping(true)` to change molecule count when traversing geometry boundaries + * `SetIgnoreMoleculePosition(false)` if set to `true` the counter behaves like `G4MoleculeCounter` + * `SetNegativeCountsAreFatal(true)` to throw a FatalException if any molecule count drops below 0 through misregistration + * Register a `G4MoleculeReactionCounter` instance called "Reactions": + * set its time precision to 50 ps + * activate the counter for global times in [0 ps, 1 µs] + +5. __Execute__ the code by running: +`./molcounters_basic [simple_sbs.in,simple_irt_syn_react.in]` +The `simple_sbs.in` macro __only__ includes molecule transport (diffusion)! + +6. __Output__: Contents of the molecule counters are dumped to `stdout` +at the end of each run by the RunAction::EndOfRunAction() diff --git a/examples/extended/parallel/TBB/B2b/include/B2TrackerSD.hh b/examples/extended/medical/dna/molcounters/basic/include/ActionInitialization.hh similarity index 67% rename from examples/extended/parallel/TBB/B2b/include/B2TrackerSD.hh rename to examples/extended/medical/dna/molcounters/basic/include/ActionInitialization.hh index bc8beb691c..6a2645f197 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2TrackerSD.hh +++ b/examples/extended/medical/dna/molcounters/basic/include/ActionInitialization.hh @@ -23,45 +23,39 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2TrackerSD.hh -/// \brief Definition of the B2TrackerSD class -#ifndef B2TrackerSD_h -#define B2TrackerSD_h 1 +#ifndef ActionInitialization_hh +#define ActionInitialization_hh 1 -#include "B2TrackerHit.hh" - -#include "G4VSensitiveDetector.hh" - -#include - -class G4Step; -class G4HCofThisEvent; +#include "G4Types.hh" +#include "G4VUserActionInitialization.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -/// B2Tracker sensitive detector class -/// -/// The hits are accounted in hits in ProcessHits() function which is called -/// by Geant4 kernel at each step. A hit is created with each step with non zero -/// energy deposit. - -class B2TrackerSD : public G4VSensitiveDetector +class ActionInitialization : public G4VUserActionInitialization { public: - B2TrackerSD(const G4String& name, const G4String& hitsCollectionName); - virtual ~B2TrackerSD(); + void BuildForMaster() const override; - // methods from base class - virtual void Initialize(G4HCofThisEvent* hitCollection); - virtual G4bool ProcessHits(G4Step* step, G4TouchableHistory* history); - virtual void EndOfEvent(G4HCofThisEvent* hitCollection); + void Build() const override; + + void BuildMoleculeCounters() const; + + void BuildMultipleAndCustomMoleculeCounters() const; private: - B2TrackerHitsCollection* fHitsCollection; + G4bool fBuildMultipleAndCustomMoleculeCounters{false}; }; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/ChemistrySteppingAction.hh b/examples/extended/medical/dna/molcounters/basic/include/ChemistrySteppingAction.hh new file mode 100644 index 0000000000..21740baef6 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/ChemistrySteppingAction.hh @@ -0,0 +1,51 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ChemistrySteppingAction_hh +#define ChemistrySteppingAction_hh 1 + +#include "G4Types.hh" +#include "G4UserSteppingAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ChemistrySteppingAction : public G4UserSteppingAction +{ + public: + void UserSteppingAction(const G4Step*) override; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/parallel/TBB/B2b/src/B2EventAction.cc b/examples/extended/medical/dna/molcounters/basic/include/ChemistryTrackingManager.hh similarity index 61% rename from examples/extended/parallel/TBB/B2b/src/B2EventAction.cc rename to examples/extended/medical/dna/molcounters/basic/include/ChemistryTrackingManager.hh index 97bbc79c04..99204003a6 100644 --- a/examples/extended/parallel/TBB/B2b/src/B2EventAction.cc +++ b/examples/extended/medical/dna/molcounters/basic/include/ChemistryTrackingManager.hh @@ -23,51 +23,48 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2EventAction.cc -/// \brief Implementation of the B2EventAction class -#include "B2EventAction.hh" - -#include "G4Event.hh" -#include "G4EventManager.hh" -#include "G4Trajectory.hh" -#include "G4TrajectoryContainer.hh" -#include "G4ios.hh" +#ifndef ChemistryTrackingManager_hh +#define ChemistryTrackingManager_hh 1 +#include "G4ITTrackingInteractivity.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2EventAction::B2EventAction() : G4UserEventAction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2EventAction::~B2EventAction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2EventAction::BeginOfEventAction(const G4Event*) {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2EventAction::EndOfEventAction(const G4Event* event) +class ChemistryTrackingManager : public G4ITTrackingInteractivity { - // get number of stored trajectories + public: + ChemistryTrackingManager() = default; + ~ChemistryTrackingManager() override; - G4TrajectoryContainer* trajectoryContainer = event->GetTrajectoryContainer(); - G4int n_trajectories = 0; - if (trajectoryContainer) n_trajectories = trajectoryContainer->entries(); + void AppendStep(G4Track*, G4Step*) override; + void Finalize() override; - // periodic printing - - G4int eventID = event->GetEventID(); - if (eventID < 100 || eventID % 100 == 0) { - G4cout << ">>> Event: " << eventID << G4endl; - if (trajectoryContainer) { - G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; - } - G4VHitsCollection* hc = event->GetHCofThisEvent()->GetHC(0); - G4cout << " " << hc->GetSize() << " hits stored in this event" << G4endl; - } -} + void SetUserAction(G4UserSteppingAction*); + const G4UserSteppingAction* GetUserSteppingAction() const; + private: + G4UserSteppingAction* fUserSteppingAction = nullptr; +}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ChemistryTrackingManager::SetUserAction(G4UserSteppingAction* steppingAction) +{ + fUserSteppingAction = steppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline const G4UserSteppingAction* ChemistryTrackingManager::GetUserSteppingAction() const +{ + return fUserSteppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/DetectorConstruction.hh b/examples/extended/medical/dna/molcounters/basic/include/DetectorConstruction.hh new file mode 100644 index 0000000000..3925bc39cc --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/DetectorConstruction.hh @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef DetectorConstruction_hh +#define DetectorConstruction_hh 1 + +#include "G4VUserDetectorConstruction.hh" + +class G4VPhysicalVolume; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class DetectorConstruction : public G4VUserDetectorConstruction +{ + public: + G4VPhysicalVolume* Construct() override; + + protected: + void ConstructCell(G4VPhysicalVolume*); +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/EventAction.hh b/examples/extended/medical/dna/molcounters/basic/include/EventAction.hh new file mode 100644 index 0000000000..090e64ec7d --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/EventAction.hh @@ -0,0 +1,60 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/MoleculeCounter.hh b/examples/extended/medical/dna/molcounters/basic/include/MoleculeCounter.hh new file mode 100644 index 0000000000..0b21dca9bf --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/MoleculeCounter.hh @@ -0,0 +1,171 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef MoleculeCounter_hh +#define MoleculeCounter_hh 1 + +#include "G4MolecularConfiguration.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VTouchable.hh" +#include "G4VUserMoleculeCounter.hh" + +#include +#include +#include + +class G4Navigator; + +class G4StepPoint; + +class G4Material; + +class G4Track; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +struct MoleculeCounterIndex : G4VMoleculeCounter::G4VMoleculeCounterIndex +{ + const G4MolecularConfiguration* Molecule; + const G4VPhysicalVolume* Volume; + std::vector CopyNumbers; + + MoleculeCounterIndex() : Molecule(nullptr), Volume(nullptr), CopyNumbers() {} + + MoleculeCounterIndex(const MoleculeCounterIndex&) = default; + + MoleculeCounterIndex(MoleculeCounterIndex&&) = default; + + MoleculeCounterIndex(const G4MolecularConfiguration* molecule, const G4VTouchable* touchable) + : Molecule(molecule), CopyNumbers() + { + if (touchable == nullptr) { + Volume = nullptr; + } + else { + Volume = touchable->GetVolume(); + CopyNumbers.reserve(touchable->GetHistoryDepth()); + for (auto i = 0; i < touchable->GetHistoryDepth(); ++i) + CopyNumbers.push_back(touchable->GetCopyNumber(i)); + } + } + + MoleculeCounterIndex(const G4MolecularConfiguration* molecule, + const G4VPhysicalVolume* volume, // should be removed ? + const std::vector& copyNumbers) + : Molecule(molecule), Volume(volume), CopyNumbers(copyNumbers) + {} + + ~MoleculeCounterIndex() override = default; + + MoleculeCounterIndex& operator=(const MoleculeCounterIndex&) = default; + + MoleculeCounterIndex& operator=(MoleculeCounterIndex&&) = default; + + G4bool operator<(G4VMoleculeCounterIndex const& other) const override + { + return *this < dynamic_cast(other); + } + + G4bool operator<(MoleculeCounterIndex const& other) const + { + if (std::less<>{}(Molecule, other.Molecule)) return true; + if (std::less<>{}(other.Molecule, Molecule)) return false; + + if (std::less<>{}(Volume, other.Volume)) return true; + if (std::less<>{}(other.Volume, Volume)) return false; + + return CopyNumbers < other.CopyNumbers; + } + + G4bool operator==(G4VMoleculeCounterIndex const& other) const override + { + return *this == dynamic_cast(other); + } + + G4bool operator==(const MoleculeCounterIndex& other) const + { + return std::tie(Molecule, Volume) == std::tie(other.Molecule, other.Volume) + && CopyNumbers == other.CopyNumbers; + } + + G4String GetInfo() const override + { + G4String info = "("; + const G4String& null = "null"; + info += Molecule == nullptr ? null : Molecule->GetName(); + info += ", "; + info += Volume == nullptr ? null : Volume->GetName(); + info += ")"; + return info; + } + + const G4MolecularConfiguration* GetMolecule() const override { return Molecule; } +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class MoleculeCounter : public G4VUserMoleculeCounter +{ + public: + MoleculeCounter(G4String = "MoleculeCounter"); + + ~MoleculeCounter() override = default; + + public: + void InitializeUser() override; + + std::unique_ptr BuildIndex(const G4Track*) const override; + + std::unique_ptr BuildIndex(const G4Track*, + const G4StepPoint*) const override; + + std::unique_ptr + BuildSimpleIndex(const G4MolecularConfiguration*) const override; + + G4bool GetIgnoreMoleculePosition() const; + + void SetIgnoreMoleculePosition(G4bool); + + void SetNegativeCountsAreFatal(G4bool); + + protected: + static G4ThreadLocal std::unique_ptr fNavigator; + + G4bool fIgnoreMoleculePosition{false}; + G4bool fIgnoreCopyNumbers{false}; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/PhysicsList.hh b/examples/extended/medical/dna/molcounters/basic/include/PhysicsList.hh new file mode 100644 index 0000000000..e36c75b3f9 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/PhysicsList.hh @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef PhysicsList_h +#define PhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "G4VUserChemistryList.hh" +#include "globals.hh" + +class G4VPhysicsConstructor; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class PhysicsList : public G4VModularPhysicsList +{ + public: + explicit PhysicsList(); + ~PhysicsList() override = default; + + void ConstructParticle() override; + void ConstructProcess() override; + + private: + std::unique_ptr fEmDNAPhysicsList; + std::unique_ptr fEmDNAChemistryList; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/parallel/TBB/B2b/include/B2PrimaryGeneratorAction.hh b/examples/extended/medical/dna/molcounters/basic/include/PrimaryGeneratorAction.hh similarity index 67% rename from examples/extended/parallel/TBB/B2b/include/B2PrimaryGeneratorAction.hh rename to examples/extended/medical/dna/molcounters/basic/include/PrimaryGeneratorAction.hh index de902f5bda..a3c99e8d12 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2PrimaryGeneratorAction.hh +++ b/examples/extended/medical/dna/molcounters/basic/include/PrimaryGeneratorAction.hh @@ -23,43 +23,37 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2PrimaryGeneratorAction.hh -/// \brief Definition of the B2PrimaryGeneratorAction class -#ifndef B2PrimaryGeneratorAction_h -#define B2PrimaryGeneratorAction_h 1 +#ifndef PrimaryGeneratorAction_hh +#define PrimaryGeneratorAction_hh 1 +#include "G4ParticleGun.hh" #include "G4VUserPrimaryGeneratorAction.hh" -#include "globals.hh" class G4ParticleGun; class G4Event; - -/// The primary generator action class with particle gum. -/// -/// It defines a single particle which hits the Tracker -/// perpendicular to the input face. The type of the particle -/// can be changed via the G4 build-in commands of G4ParticleGun class -/// (see the macros provided with this example). - -class B2PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - B2PrimaryGeneratorAction(); - virtual ~B2PrimaryGeneratorAction(); - - virtual void GeneratePrimaries(G4Event*); - - G4ParticleGun* GetParticleGun() { return fParticleGun; } - - // Set methods - void SetRandomFlag(G4bool); + PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override = default; + void GeneratePrimaries(G4Event*) override; private: - G4ParticleGun* fParticleGun; // G4 particle gun + std::unique_ptr fParticleGun; }; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/examples/extended/medical/dna/molcounters/basic/include/RunAction.hh b/examples/extended/medical/dna/molcounters/basic/include/RunAction.hh new file mode 100644 index 0000000000..5c46bad53e --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/include/RunAction.hh @@ -0,0 +1,51 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef RunAction_hh +#define RunAction_hh 1 + +#include "G4UserRunAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class RunAction : public G4UserRunAction +{ + public: + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/parallel/TBB/B2b/include/B2RunAction.hh b/examples/extended/medical/dna/molcounters/basic/include/StackingAction.hh similarity index 74% rename from examples/extended/parallel/TBB/B2b/include/B2RunAction.hh rename to examples/extended/medical/dna/molcounters/basic/include/StackingAction.hh index 73503de0af..111098dae0 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2RunAction.hh +++ b/examples/extended/medical/dna/molcounters/basic/include/StackingAction.hh @@ -23,32 +23,28 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2RunAction.hh -/// \brief Definition of the B2RunAction class -#ifndef B2RunAction_h -#define B2RunAction_h 1 - -#include "G4UserRunAction.hh" -#include "globals.hh" +#ifndef StackingAction_hh +#define StackingAction_hh 1 +#include "G4UserStackingAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -class G4Run; - -/// Run action class - -class B2RunAction : public G4UserRunAction +class StackingAction : public G4UserStackingAction { public: - B2RunAction(); - virtual ~B2RunAction(); - - virtual void BeginOfRunAction(const G4Run* run); - virtual void EndOfRunAction(const G4Run* run); + void NewStage() override; }; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/examples/extended/parallel/TBB/B2b/exampleB2b.cc b/examples/extended/medical/dna/molcounters/basic/molcounters_basic.cc similarity index 60% rename from examples/extended/parallel/TBB/B2b/exampleB2b.cc rename to examples/extended/medical/dna/molcounters/basic/molcounters_basic.cc index ea65e11892..2b20e8b00c 100644 --- a/examples/extended/parallel/TBB/B2b/exampleB2b.cc +++ b/examples/extended/medical/dna/molcounters/basic/molcounters_basic.cc @@ -23,75 +23,59 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file parallel/TBB/B2b/exampleB2b.cc -/// \brief Main program of the B2b example -#include "B2ActionInitialization.hh" -#include "B2bDetectorConstruction.hh" -#include "FTFP_BERT.hh" +#include "ActionInitialization.hh" +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" -#include "G4StepLimiterPhysics.hh" -#include "G4TaskRunManager.hh" -#include "G4Threading.hh" +#include "G4DNAChemistryManager.hh" +#include "G4RunManagerFactory.hh" #include "G4UIExecutive.hh" #include "G4UImanager.hh" #include "G4VisExecutive.hh" -#include "Randomize.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... int main(int argc, char** argv) { - // Instantiate G4UIExecutive if there are no arguments (interactive mode) G4UIExecutive* ui = 0; if (argc == 1) { ui = new G4UIExecutive(argc, argv); } - // Choose the Random engine + auto* runManager = G4RunManagerFactory::CreateRunManager(); - G4Random::setTheEngine(new CLHEP::RanecuEngine); - - auto runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::TBB); - - //==== Geant4 specific stuff, from now up to END-G4 comment is copy from MT - // example // Set mandatory initialization classes + runManager->SetUserInitialization(new PhysicsList); + runManager->SetUserInitialization(new DetectorConstruction); + runManager->SetUserInitialization(new ActionInitialization); - runManager->SetUserInitialization(new B2bDetectorConstruction()); + // get the pointer to the User Interface manager + auto UI = G4UImanager::GetUIpointer(); - G4VModularPhysicsList* physicsList = new FTFP_BERT; - physicsList->RegisterPhysics(new G4StepLimiterPhysics()); - runManager->SetUserInitialization(physicsList); - - // Set user action classes - - runManager->SetUserInitialization(new B2ActionInitialization()); - - // Initialize G4 kernel - - runManager->Initialize(); - - // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); - - if (!ui) // batch mode + if (argc > 1) // batch mode { G4String command = "/control/execute "; G4String fileName = argv[1]; - UImanager->ApplyCommand(command + fileName); + UI->ApplyCommand(command + fileName); } - else { - // interactive mode : define UI session - UImanager->ApplyCommand("/control/execute init.mac"); - if (ui->IsGUI()) UImanager->ApplyCommand("/control/execute gui.mac"); - ui->SessionStart(); + else // define visualization and UI terminal for interactive mode + { + UI->ApplyCommand("/control/execute simple_sbs.in"); delete ui; } delete runManager; - return 0; } diff --git a/examples/extended/medical/dna/molcounters/basic/simple_irt_syn_react.in b/examples/extended/medical/dna/molcounters/basic/simple_irt_syn_react.in new file mode 100644 index 0000000000..40403d694d --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/simple_irt_syn_react.in @@ -0,0 +1,37 @@ +/run/numberOfThreads 4 + +/process/chem/TimeStepModel IRT_syn + +/run/initialize + +/chem/PrintSpeciesTable + +# set all reaction rates to zero (only diffusion) +/chem/reaction/UI + +# totally diffusion-controlled (TDC) | Fix | reactionRate[dm3/(mol*s)] | TDC (0) +/chem/reaction/add H + H -> H2 | Fix | 0.503e10 | 0 +/chem/reaction/add e_aq + H -> H2 + OHm | Fix | 2.50e10 | 0 +/chem/reaction/add e_aq + e_aq -> H2 + OHm + OHm | Fix | 0.636e10 | 0 +/chem/reaction/add H3Op + OHm -> H2O | Fix | 1.13e11 | 0 + +# partially diffusion-controlled (PDC) | Fix | reactionRate[dm3/(mol*s)] | PDC (1) +/chem/reaction/add OH + H -> H2O | Fix | 1.55e10 | 1 +/chem/reaction/add OH + OH -> H2O2 | Fix | 0.55e10 | 1 +/chem/reaction/add e_aq + OH -> OHm | Fix | 2.95e10 | 1 +/chem/reaction/add e_aq + H2O2 -> OHm + OH | Fix | 1.10e10 | 1 +/chem/reaction/add e_aq + H3Op -> H + H2O | Fix | 2.11e10 | 1 + +/chem/reaction/print + +/gun/position 0 0 0 +/gun/particle e- + +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 1 microsecond + +/run/printProgress 2 + +/gun/energy 10 keV +/run/beamOn 400 \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/simple_sbs.in b/examples/extended/medical/dna/molcounters/basic/simple_sbs.in new file mode 100644 index 0000000000..7da9ba095b --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/simple_sbs.in @@ -0,0 +1,40 @@ +/run/numberOfThreads 1 + +/process/chem/TimeStepModel SBS + +/run/initialize + +/chem/PrintSpeciesTable + +# set all reaction rates to zero (only diffusion) +/chem/reaction/UI + +# only transport, no reactions (for speed) + +# totally diffusion-controlled (TDC) | Fix | reactionRate[dm3/(mol*s)] | TDC (0) +/chem/reaction/add H + H -> H2 | Fix | 0 | 0 +/chem/reaction/add e_aq + H -> H2 + OHm | Fix | 0 | 0 +/chem/reaction/add e_aq + e_aq -> H2 + OHm + OHm | Fix | 0 | 0 +/chem/reaction/add H3Op + OHm -> H2O | Fix | 0 | 0 + +# partially diffusion-controlled (PDC) | Fix | reactionRate[dm3/(mol*s)] | PDC (1) +/chem/reaction/add OH + H -> H2O | Fix | 0 | 1 +/chem/reaction/add OH + OH -> H2O2 | Fix | 0 | 1 +/chem/reaction/add e_aq + OH -> OHm | Fix | 0 | 1 +/chem/reaction/add e_aq + H2O2 -> OHm + OH | Fix | 0 | 1 +/chem/reaction/add e_aq + H3Op -> H + H2O | Fix | 0 | 1 + +/chem/reaction/print + +/gun/position 0 0 0 +/gun/particle e- + +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 0.001 microsecond + +/run/verbose 1 +/run/printProgress 1 + +/gun/energy 1 keV +/run/beamOn 1 \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/ActionInitialization.cc b/examples/extended/medical/dna/molcounters/basic/src/ActionInitialization.cc new file mode 100644 index 0000000000..088c341952 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/ActionInitialization.cc @@ -0,0 +1,189 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ActionInitialization.hh" + +#include "ChemistrySteppingAction.hh" +#include "ChemistryTrackingManager.hh" +#include "EventAction.hh" +#include "MoleculeCounter.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4H2O.hh" +#include "G4MoleculeCounter.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4MoleculeReactionCounter.hh" +#include "G4Scheduler.hh" +#include "G4UserTimeStepAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::BuildForMaster() const +{ + SetUserAction(new RunAction); + if (!fBuildMultipleAndCustomMoleculeCounters) + BuildMoleculeCounters(); + else + BuildMultipleAndCustomMoleculeCounters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::Build() const +{ + SetUserAction(new PrimaryGeneratorAction()); + + SetUserAction(new RunAction); + SetUserAction(new EventAction); + SetUserAction(new StackingAction); + + if (G4DNAChemistryManager::IsActivated()) { + G4Scheduler::Instance()->SetUserAction(new G4UserTimeStepAction); + + auto chemTrackingManager = new ChemistryTrackingManager(); + chemTrackingManager->SetUserAction(new ChemistrySteppingAction); + G4Scheduler::Instance()->SetInteractivity(chemTrackingManager); + + if (!fBuildMultipleAndCustomMoleculeCounters) + BuildMoleculeCounters(); + else + BuildMultipleAndCustomMoleculeCounters(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::BuildMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(false); // defaults to false + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); // defaults to false + + // Register molecule counters + { + // Basic molecule counter + auto counter = std::make_unique("Molecules"); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + { + // Basic reaction counter + auto counter = std::make_unique("Reactions"); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::BuildMultipleAndCustomMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(false); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + + // Register molecule counters + + // Basic (built-in) Counters + { + // Basic molecule counter using a fixed time precision. + // this will create many records {molecule -> {time -> conut}} + auto counter = std::make_unique("BasicCounter"); + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(25 * ps)); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + { + // Basic molecule counter using a fixed time precision [same as above]. + // However, we are activating it to only count molecules between 500 ps and 10 ns! + auto counter = std::make_unique("BasicCounter_Restricted"); + counter->SetActiveLowerBound(500 * ps); + counter->SetActiveUpperBound(10 * ns); // add option to truncate after time? + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(25 * ps)); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + { + // Basic molecule counter using variable time precision without time restrition. + // The precision is changed with respect to chemistry time. + auto counter = std::make_unique("BasicCounter_VariablePrecision"); + counter->SetActiveLowerBound(500 * ps); + counter->SetActiveUpperBound(10 * ns); // add option to truncate after time? + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithVariablePrecision({ + {10 * ps, 5 * ps}, + {100 * ps, 50 * ps}, + {1000 * ps, 500 * ps}, + {10 * ns, 5 * ns}, + {1 * microsecond, 50 * ns}, + })); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + + // Custom molecule counter, see: 10.1016/j.radphyschem.2023.111194 + { + // Here we create a custom volume-aware molecule counter that uses variable time precision. + // This counter records not just the molecules but also the encompassing volume. + // Note: + // - For this counter you must set `SetSensitiveToStepping(true)`. + // - Other options (like SetNegativeCountsAreFatal) are optional but recommended + // - SetIgnoreMoleculePosition can be set to true to override this counter's volume-awareness + // this would, in effect, make it the same as a BasicCounter `G4MoleculeCounter` + auto counter = std::make_unique("MoleculeCounter"); + counter->SetVerbose(1); + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetSensitiveToStepping(true); + counter->SetIgnoreMoleculePosition(false); + counter->SetNegativeCountsAreFatal(true); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithVariablePrecision({ + {10 * ps, 5 * ps}, + {100 * ps, 50 * ps}, + {1000 * ps, 500 * ps}, + {10 * ns, 5 * ns}, + {1 * microsecond, 50 * ns}, + })); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + + // Molecule Reaction Counter with fixed time precision. + // Set to be active from 0ps to 1us. + { + auto counter = std::make_unique("Reactions"); + counter->SetActiveLowerBound(0 * ps); + counter->SetActiveUpperBound(1 * microsecond); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(50 * ps)); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/ChemistrySteppingAction.cc b/examples/extended/medical/dna/molcounters/basic/src/ChemistrySteppingAction.cc new file mode 100644 index 0000000000..33c4e74b20 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/ChemistrySteppingAction.cc @@ -0,0 +1,49 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ChemistrySteppingAction.hh" + +#include "G4MoleculeCounterManager.hh" +#include "G4Step.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistrySteppingAction::UserSteppingAction(const G4Step* aStep) +{ + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + G4MoleculeCounterManager::Instance()->NotifyOfStep(aStep); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/ChemistryTrackingManager.cc b/examples/extended/medical/dna/molcounters/basic/src/ChemistryTrackingManager.cc new file mode 100644 index 0000000000..76a1320a71 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/ChemistryTrackingManager.cc @@ -0,0 +1,74 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ChemistryTrackingManager.hh" + +#include "G4Event.hh" +#include "G4EventManager.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4UserSteppingAction.hh" +#include "G4VSensitiveDetector.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ChemistryTrackingManager::~ChemistryTrackingManager() +{ + // Ensure this manager's stepping action is not handled by the event manager + auto eventManager = G4EventManager::GetEventManager(); + if (!(!eventManager || fUserSteppingAction == eventManager->GetUserSteppingAction())) + delete fUserSteppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistryTrackingManager::AppendStep(G4Track* /*track*/, G4Step* step) +{ + if (step->GetPreStepPoint()->GetPhysicalVolume() != nullptr + && step->GetControlFlag() != AvoidHitInvocation) + { + auto sensitiveDetector = step->GetPreStepPoint()->GetSensitiveDetector(); + if (sensitiveDetector != nullptr) { + sensitiveDetector->Hit(step); + } + } + + if (fUserSteppingAction) fUserSteppingAction->UserSteppingAction(step); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistryTrackingManager::Finalize() +{ + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + G4MoleculeCounterManager::Instance()->NotifyOfFinalize(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/DetectorConstruction.cc b/examples/extended/medical/dna/molcounters/basic/src/DetectorConstruction.cc new file mode 100644 index 0000000000..13a6ac736f --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/DetectorConstruction.cc @@ -0,0 +1,129 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "DetectorConstruction.hh" + +#include "G4Box.hh" +#include "G4Ellipsoid.hh" +#include "G4LogicalVolume.hh" +#include "G4NistManager.hh" +#include "G4Orb.hh" +#include "G4PVPlacement.hh" +#include "G4PhysicalConstants.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4SystemOfUnits.hh" +#include "G4VPhysicalVolume.hh" +#include "Randomize.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + // Water is defined from NIST material database + auto man = G4NistManager::Instance(); + auto water = man->FindOrBuildMaterial("G4_WATER"); + + // + // World + // + const G4double worldXYZ = 1 * m; + + auto solidWorld = new G4Box("World", 0.5 * worldXYZ, 0.5 * worldXYZ, 0.5 * worldXYZ); + auto lvWorld = new G4LogicalVolume(solidWorld, water, "World"); + auto pvWorld = + new G4PVPlacement(nullptr, G4ThreeVector(), lvWorld, "World", nullptr, false, 0, true); + + // + // Cell + ConstructCell(pvWorld); + + // return the world + return pvWorld; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void DetectorConstruction::ConstructCell(G4VPhysicalVolume* pvWorld) +{ + const G4double cellRadius = 7 * um; + const G4double nucleusRadius = 4 * um; + + const G4int nMitochondria = 100; + const G4double mitoA = 0.55 * micrometer; + const G4double mitoB = 0.25 * micrometer; + const G4double mitoC = 0.90 * micrometer; + + auto solidCell = new G4Orb("Cell", cellRadius); + auto lvCell = new G4LogicalVolume( + solidCell, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Cell"); + auto pvCell = + new G4PVPlacement(nullptr, G4ThreeVector(), "Cell", lvCell, pvWorld, false, 0, true); + + auto solidNucleus = new G4Orb("Nucleus", nucleusRadius); + auto lvNucleus = new G4LogicalVolume( + solidNucleus, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Nucleus"); + + new G4PVPlacement(nullptr, G4ThreeVector(), "Nucleus", lvNucleus, pvCell, false, 0, true); + + auto solidMito = new G4Ellipsoid("Mitochondria", mitoA, mitoB, mitoC); + auto lvMito = new G4LogicalVolume( + solidMito, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Mitochondria"); + + for (auto i = 0; i < nMitochondria; ++i) { + G4bool overlap = true; + do { + auto u = twopi * G4UniformRand(); + auto v = std::acos(2 * G4UniformRand() - 1); + auto dr = G4UniformRand() * cellRadius; + auto x = dr * std::cos(u) * std::sin(v); + auto y = dr * std::sin(u) * std::sin(v); + auto z = dr * std::cos(v); + auto pos = G4ThreeVector(x, y, z); + + auto phi = G4UniformRand() * 2 * pi; + auto psi = G4UniformRand() * 2 * pi; + auto rot = new G4RotationMatrix(); + rot->rotateX(psi); + rot->rotateY(phi); + + auto pvMito = new G4PVPlacement(rot, pos, "Mitochondria", lvMito, pvCell, false, i, false); + + overlap = pvMito->CheckOverlaps(1000, 0, false); + if (overlap) { + G4PhysicalVolumeStore::DeRegister(pvMito); + } + } while (overlap); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/MoleculeCounter.cc b/examples/extended/medical/dna/molcounters/basic/src/MoleculeCounter.cc new file mode 100644 index 0000000000..7160493f08 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/MoleculeCounter.cc @@ -0,0 +1,134 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include + +#include "MoleculeCounter.hh" + +#include "G4Event.hh" +#include "G4EventManager.hh" +#include "G4MolecularConfiguration.hh" +#include "G4Molecule.hh" +#include "G4MoleculeLocator.hh" +#include "G4Navigator.hh" +#include "G4Scheduler.hh" +#include "G4UIcommand.hh" +#include "G4UnitsTable.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +using G4VMoleculeCounterIndex = G4VMoleculeCounter::G4VMoleculeCounterIndex; + +G4ThreadLocal std::unique_ptr MoleculeCounter::fNavigator = nullptr; + +MoleculeCounter::MoleculeCounter(G4String name) + : G4VUserMoleculeCounter(name, G4VMoleculeCounter::MoleculeCounterType::Other), + fIgnoreMoleculePosition(false), + fIgnoreCopyNumbers(true) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void MoleculeCounter::InitializeUser() {} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +std::unique_ptr MoleculeCounter::BuildIndex(const G4Track* aTrack) const +{ + if (fVerbose > 1) { + G4cout << "MoleculeCounter::BuildIndex(" << aTrack->GetTrackID() << " : " + << GetMolecule(aTrack)->GetName() << ")" << G4endl; + } + if (fIgnoreMoleculePosition) { + return std::make_unique( + GetMolecule(aTrack)->GetMolecularConfiguration(), nullptr); + } + else { + const G4VTouchable* touchable = aTrack->GetNextTouchable(); + G4TouchableHistory* touchableHistory = nullptr; + + if (touchable == nullptr) touchable = aTrack->GetTouchable(); + if (touchable == nullptr) { + auto touchableHandle = G4MoleculeLocator::Instance()->LocateMoleculeTrack(aTrack); + touchable = touchableHandle(); + } + if (touchable == nullptr) { // still not found -- should never fire + G4ExceptionDescription errMsg; + errMsg << "Molecule scorer requires a valid volume pointer." + << " G4Track->GetVolume: " << aTrack->GetVolume() + << " G4Navigator->LocateGlobalPointAndUpdateTouchable: nullptr" << G4endl; + G4Exception("MoleculeCounter::BuildIndex", "VOL_NOT_FOUND", FatalException, errMsg); + } + + auto index = std::make_unique( + GetMolecule(aTrack)->GetMolecularConfiguration(), touchable); + + delete touchableHistory; + return index; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +std::unique_ptr +MoleculeCounter::BuildIndex(const G4Track* aTrack, const G4StepPoint* aStepPoint) const +{ + return std::make_unique( + GetMolecule(aTrack)->GetMolecularConfiguration(), aStepPoint->GetTouchable()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +std::unique_ptr +MoleculeCounter::BuildSimpleIndex(const G4MolecularConfiguration* configuration) const +{ + return std::make_unique( + configuration, nullptr); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4bool MoleculeCounter::GetIgnoreMoleculePosition() const +{ + return fIgnoreMoleculePosition; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void MoleculeCounter::SetIgnoreMoleculePosition(G4bool flag) +{ + fIgnoreMoleculePosition = flag; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void MoleculeCounter::SetNegativeCountsAreFatal(G4bool flag) +{ + G4VMoleculeCounter::SetNegativeCountsAreFatal(flag); + // this is protected in G4VMoleculeCounter and thus, must be exposed by the derived class +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/molcounters/basic/src/PhysicsList.cc b/examples/extended/medical/dna/molcounters/basic/src/PhysicsList.cc new file mode 100644 index 0000000000..c5ed6a093e --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/PhysicsList.cc @@ -0,0 +1,78 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "PhysicsList.hh" + +#include "G4EmDNAChemistry_option3.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4EmParameters.hh" +#include "G4SystemOfUnits.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +PhysicsList::PhysicsList() : G4VModularPhysicsList() +{ + G4double currentDefaultCut = 0.001 * mm; + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); + SetDefaultCutValue(currentDefaultCut); + SetVerboseLevel(1); + + fEmDNAPhysicsList = std::make_unique(verboseLevel); + fEmDNAChemistryList = std::make_unique(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PhysicsList::ConstructParticle() +{ + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructParticle(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructParticle(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PhysicsList::ConstructProcess() +{ + AddTransportation(); + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructProcess(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructProcess(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/parallel/TBB/B2b/src/B2PrimaryGeneratorAction.cc b/examples/extended/medical/dna/molcounters/basic/src/PrimaryGeneratorAction.cc similarity index 57% rename from examples/extended/parallel/TBB/B2b/src/B2PrimaryGeneratorAction.cc rename to examples/extended/medical/dna/molcounters/basic/src/PrimaryGeneratorAction.cc index 09944a21d6..0359f26835 100644 --- a/examples/extended/parallel/TBB/B2b/src/B2PrimaryGeneratorAction.cc +++ b/examples/extended/medical/dna/molcounters/basic/src/PrimaryGeneratorAction.cc @@ -23,71 +23,51 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2PrimaryGeneratorAction.cc -/// \brief Implementation of the B2PrimaryGeneratorAction class -#include "B2PrimaryGeneratorAction.hh" +#include "PrimaryGeneratorAction.hh" -#include "G4Box.hh" -#include "G4Event.hh" -#include "G4LogicalVolume.hh" -#include "G4LogicalVolumeStore.hh" #include "G4ParticleDefinition.hh" #include "G4ParticleGun.hh" #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" #include "Randomize.hh" - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2PrimaryGeneratorAction::B2PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() +PrimaryGeneratorAction::PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() { - G4int nofParticles = 1; - fParticleGun = new G4ParticleGun(nofParticles); + G4int n_particle = 1; + fParticleGun = std::make_unique(n_particle); // default particle kinematic - - G4ParticleDefinition* particleDefinition = - G4ParticleTable::GetParticleTable()->FindParticle("proton"); - - fParticleGun->SetParticleDefinition(particleDefinition); + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle = particleTable->FindParticle("e-"); + fParticleGun->SetParticleDefinition(particle); + fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., 0.)); + fParticleGun->SetParticleEnergy(100 * keV); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.)); - fParticleGun->SetParticleEnergy(3.0 * GeV); } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2PrimaryGeneratorAction::~B2PrimaryGeneratorAction() +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { - delete fParticleGun; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) -{ - // This function is called at the begining of event - - // In order to avoid dependence of PrimaryGeneratorAction - // on DetectorConstruction class we get world volume - // from G4LogicalVolumeStore. - - G4double worldZHalfLength = 0; - G4LogicalVolume* worldLV = G4LogicalVolumeStore::GetInstance()->GetVolume("World"); - G4Box* worldBox = NULL; - if (worldLV) worldBox = dynamic_cast(worldLV->GetSolid()); - if (worldBox) - worldZHalfLength = worldBox->GetZHalfLength(); - else { - G4cerr << "World volume of box not found." << G4endl; - G4cerr << "Perhaps you have changed geometry." << G4endl; - G4cerr << "The gun will be place in the center." << G4endl; - } - - fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., -worldZHalfLength)); + auto phi = CLHEP::twopi * G4UniformRand(); + auto cosTheta = 2 * G4UniformRand() - 1; + auto sinTheta = std::sqrt(1 - cosTheta * cosTheta); + auto ux = sinTheta * std::cos(phi); + auto uy = sinTheta * std::sin(phi); + auto uz = cosTheta; + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(ux, uy, uz)); fParticleGun->GeneratePrimaryVertex(anEvent); } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/RunAction.cc b/examples/extended/medical/dna/molcounters/basic/src/RunAction.cc new file mode 100644 index 0000000000..900ea6ebc8 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/RunAction.cc @@ -0,0 +1,80 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "RunAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4Run.hh" +#include "G4RunManager.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void RunAction::BeginOfRunAction(const G4Run* run) +{ + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + + // do your own stuff for an event here + + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; + G4RunManager::GetRunManager()->SetRandomNumberStore(false); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void RunAction::EndOfRunAction(const G4Run* run) +{ + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + + // do your own stuff for an event here + + G4int nofEvents = run->GetNumberOfEvent(); + if (nofEvents == 0) return; + + if (G4Threading::IsMasterThread()) + G4cout << "End of Global Run totaling nEvents = " << nofEvents << G4endl; + else + G4cout << "End of Local Run with nEvents = " << nofEvents << G4endl; + + // dump molecule counters to G4cout + if (G4Threading::IsMasterThread()) { + G4MoleculeCounterManager::Instance()->DumpWorkerCounters(); + G4MoleculeCounterManager::Instance()->DumpMasterCounters(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/basic/src/StackingAction.cc b/examples/extended/medical/dna/molcounters/basic/src/StackingAction.cc new file mode 100644 index 0000000000..655482f1c3 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/basic/src/StackingAction.cc @@ -0,0 +1,50 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "StackingAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4StackManager.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void StackingAction::NewStage() +{ + if (stackManager->GetNTotalTrack() == 0) { + G4DNAChemistryManager::Instance()->Run(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/.README.txt b/examples/extended/medical/dna/molcounters/sdcounters/.README.txt new file mode 100644 index 0000000000..4668a53e77 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/.README.txt @@ -0,0 +1,89 @@ + +///\file "medical/dna/molcounters/sdcounters/.README.txt" +///\brief Example sdcounters README page + + +/*! \page Examplesdcounters Example sdcounters + +Author: C. Velten \n +Date: 7 April 2025 \n +Email: cv2415@columbia.edu + +The custom (spatially-aware) molecule counter used here +is further described in: +- Radiat. Phys. Chem. 212 (2023) 111194 \n +doi:10.1016/j.radphyschem.2023.111194 + +\ This example is provided by the Geant4-DNA collaboration + (http://geant4-dna.org). + + Any report or published results obtained using the Geant4-DNA software + shall cite the following Geant4-DNA collaboration publications:\n + Med. Phys. 45 (2018) e722-e739\n + Phys. Med. 31 (2015) 861-874\n + Med. Phys. 37 (2010) 4692-4708\n + Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178\n + +\Description: + +\section 1. __Geometry__: +A box of liquid water with a 8 µm (radius) spherical cell placed at its center. +The cell contains a 4 µm (radius) nucleus and 100 mitochondria. + +\section 2. __Incident particles__: +Electrons with 1 keV energy, which can be changed in +the simple_sbs.ini macro file. +They are shot from the center of the box (inside the nucleus). + +\section 3. __Physics__: +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class with chemistry constructor 3. + +\section 4. __Molecule Counters__: +Counters are defined and registered in the ActionInitialization +class for master & workers using the BuildMoleculeCounters(), and +BuildMultipleAndCustomMoleculeCounters() methods. +To switch between either of these methods, change the +boolean value of fBuildMultipleAndCustomMoleculeCounters in +ActionInitialization.hh. +By default, the molecule counter manager will accumulate counts from +worker instances into the master instance. To facilitate this the user +__must__ create a `UserEventAction` and `UserRunAction` and override +the `(Begin|End)Of(Event|Run)Action` methods and call the corresponding +method on the `G4DNAChemistryManager::Instance()`. See the example's +`EventAction.hh` and `RunAction.(hh|cc)` on how to do this. + + __`BuildMoleculeCounters()`:__ + * __[important]__ Reset counters before each event but not keep counter values between events. \ + This is required since our scorers will read out the molecule counters using + their `EndOfEvent()` method and save the recorded molecules. + * Register a `G4MoleculeCounter` instance called "BasicCounter": + * set its time precision to 10 ps + * Register a `G4MoleculeCounter` instance called "BasicCounter_VariablePrecision": + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * Register a `G4MoleculeReactionCounter` instance called "Reactions": + * set its time precision to 10 ps + +\section 5. __Multifunctional Detector & Primitive Scorers__: +Two scorers are defined for molecule (`ScoreBasicMoleculeCounts`) and +reaction (`ScoreBasicReactionCounts`) counts. The basic molecule scorers +are instantiated once for each molecule counter. +The results are saved as ROOT trees to a single file. + +\section 6. __Execute__ the code by running: + +\verbatim +`./sdcounters [simple_sbs.in,simple_irt_syn_react.in]` +\endverbatim + +The `simple_sbs.in` macro __only__ includes molecule transport (diffusion)! + +\section 7. __Output__: Visualize the molecule and reaction counts using the Python notebook `plotRoot.ipynb`. It does not require a ROOT installation but the following packages: + `matplotlib pandas seaborn uproot` + diff --git a/examples/extended/parallel/TBB/B2b/CMakeLists.txt b/examples/extended/medical/dna/molcounters/sdcounters/CMakeLists.txt similarity index 55% rename from examples/extended/parallel/TBB/B2b/CMakeLists.txt rename to examples/extended/medical/dna/molcounters/sdcounters/CMakeLists.txt index 3b99cd156a..b47da01c3d 100644 --- a/examples/extended/parallel/TBB/B2b/CMakeLists.txt +++ b/examples/extended/medical/dna/molcounters/sdcounters/CMakeLists.txt @@ -1,9 +1,8 @@ +cmake_minimum_required(VERSION 3.16...3.27) #---------------------------------------------------------------------------- -# Setup the project -# -cmake_minimum_required(VERSION 3.16...3.27) -project(B2bTBB) + +project(molcounters_sdcounters) #---------------------------------------------------------------------------- # Find Geant4 package, activating all available UI and Vis drivers by default @@ -11,66 +10,53 @@ project(B2bTBB) # to build a batch mode only executable # option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all multithreaded) -else() - find_package(Geant4 REQUIRED multithreaded) -endif() - -#---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# -include(${Geant4_USE_FILE}) - -#---------------------------------------------------------------------------- -# Find TBB (required package) -# -find_package(TBB REQUIRED) +if (WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else () + find_package(Geant4 REQUIRED) +endif () #---------------------------------------------------------------------------- # Setup Geant4 include directories and compile definitions # Setup include directory for this project # -include_directories(${PROJECT_SOURCE_DIR}/include ${TBB_INCLUDE_DIRS}) +include_directories(${PROJECT_SOURCE_DIR}/include) + +include(${Geant4_USE_FILE}) #---------------------------------------------------------------------------- # Locate sources and headers for this project # NB: headers are included so they will show up in IDEs # file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) + file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) #---------------------------------------------------------------------------- # Add the executable, and link it to the Geant4 libraries # -add_executable(exampleB2bTBB exampleB2b.cc ${sources} ${headers}) -target_link_libraries(exampleB2bTBB ${Geant4_LIBRARIES} ${TBB_LIBRARIES}) +add_executable(molcounters_sdcounters sdcounters.cc ${sources} ${headers}) +target_link_libraries(molcounters_sdcounters ${Geant4_LIBRARIES}) #---------------------------------------------------------------------------- # Copy all scripts to the build directory, i.e. the directory in which we -# build B2b. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. +# build chem6_proj. This is so that we can run the executable directly because +# it relies on these scripts being in the current working directory. # -set(EXAMPLEB2B_SCRIPTS - exampleB2b.out - exampleB2.in - gui.mac - init.mac - init_vis.mac - tbb.mac - vis.mac - ) +file(GLOB SCRIPTS + ${PROJECT_SOURCE_DIR}/*.in + ${PROJECT_SOURCE_DIR}/*.ipynb + ${PROJECT_SOURCE_DIR}/*.C) -foreach(_script ${EXAMPLEB2B_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY +foreach (_script ${SCRIPTS}) + configure_file( + ${_script} + ${PROJECT_BINARY_DIR}/. + COPYONLY ) -endforeach() +endforeach () #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # -install(TARGETS exampleB2bTBB DESTINATION bin) - +install(TARGETS molcounters_sdcounters DESTINATION bin) diff --git a/examples/extended/medical/dna/molcounters/sdcounters/History b/examples/extended/medical/dna/molcounters/sdcounters/History new file mode 100644 index 0000000000..57f533942b --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/History @@ -0,0 +1,8 @@ + + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + +## 2025-05-05 H Tran (molcounter-sdcounters-V11-03-01) +- first commit, example is created diff --git a/examples/extended/medical/dna/molcounters/sdcounters/README b/examples/extended/medical/dna/molcounters/sdcounters/README new file mode 100644 index 0000000000..4a91a515e6 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/README @@ -0,0 +1,90 @@ + ------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + +*** molcounters/sdcounters example *** + +Author: C. Velten \ +Date: 7 April 2025 \ +Email: cv2415@columbia.edu + +(c) The Geant4-DNA collaboration. + +This example shows how to use the new molecule counter manager +system and how to write custom molecule counters. + +This example is provided by the Geant4-DNA collaboration. + +The custom (spatially-aware) molecule counter used here +is further described in: +- Radiat. Phys. Chem. 212 (2023) 111194 \ +doi:10.1016/j.radphyschem.2023.111194 + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +- Med. Phys. 51 (2024) 5873–5889 +- Med. Phys. 45 (2018) e722-e739 +- Phys. Med. 31 (2015) 861-874 +- Med. Phys. 37 (2010) 4692-4708 +- Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +### Description: + +1. __Geometry__: +A box of liquid water with a 8 µm (radius) spherical cell placed at its center. +The cell contains a 4 µm (radius) nucleus and 100 mitochondria. + +2. __Incident particles__: +Electrons with 1 keV energy, which can be changed in +the simple_sbs.ini macro file. +They are shot from the center of the box (inside the nucleus). + +3. __Physics__: +The default Geant4-DNA physics constructor 2 is used in +the PhysicsList class with chemistry constructor 3. + +4. __Molecule Counters__: +Counters are defined and registered in the ActionInitialization +class for master & workers using the BuildMoleculeCounters(), and +BuildMultipleAndCustomMoleculeCounters() methods. +To switch between either of these methods, change the +boolean value of fBuildMultipleAndCustomMoleculeCounters in +ActionInitialization.hh. \ +By default, the molecule counter manager will accumulate counts from +worker instances into the master instance. To facilitate this the user +__must__ create a `UserEventAction` and `UserRunAction` and override +the `(Begin|End)Of(Event|Run)Action` methods and call the corresponding +method on the `G4DNAChemistryManager::Instance()`. See the example's +`EventAction.hh` and `RunAction.(hh|cc)` on how to do this. \ + + __`BuildMoleculeCounters()`:__ + * __[important]__ Reset counters before each event but not keep counter values between events. \ + This is required since our scorers will read out the molecule counters using + their `EndOfEvent()` method and save the recorded molecules. + * Register a `G4MoleculeCounter` instance called "BasicCounter": + * set its time precision to 10 ps + * Register a `G4MoleculeCounter` instance called "BasicCounter_VariablePrecision": + * set its time precision to vary with global time: + ``` + <= 10 ps: 5 ps + <= 100 ps: 50 ps + <= 1 ns: 0.5 ns + <= 1 µs: 50 ns + ``` + * Register a `G4MoleculeReactionCounter` instance called "Reactions": + * set its time precision to 10 ps + +5. __Multifunctional Detector & Primitive Scorers__: +Two scorers are defined for molecule (`ScoreBasicMoleculeCounts`) and +reaction (`ScoreBasicReactionCounts`) counts. The basic molecule scorers +are instantiated once for each molecule counter. +The results are saved as ROOT trees to a single file. + +6. __Execute__ the code by running: +`./sdcounters [simple_sbs.in,simple_irt_syn_react.in]` \ +The `simple_sbs.in` macro __only__ includes molecule transport (diffusion)! + +7. __Output__: Visualize the molecule and reaction counts using the Python notebook `plotRoot.ipynb`. It does not require a ROOT installation but the following packages: + `matplotlib pandas seaborn uproot` diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/ActionInitialization.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/ActionInitialization.hh new file mode 100644 index 0000000000..4988f22287 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/ActionInitialization.hh @@ -0,0 +1,53 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ActionInitialization_hh +#define ActionInitialization_hh 1 + +#include "G4VUserActionInitialization.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ActionInitialization : public G4VUserActionInitialization +{ + public: + void BuildForMaster() const override; + void Build() const override; + + void BuildMoleculeCounters() const; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistrySteppingAction.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistrySteppingAction.hh new file mode 100644 index 0000000000..21740baef6 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistrySteppingAction.hh @@ -0,0 +1,51 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ChemistrySteppingAction_hh +#define ChemistrySteppingAction_hh 1 + +#include "G4Types.hh" +#include "G4UserSteppingAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ChemistrySteppingAction : public G4UserSteppingAction +{ + public: + void UserSteppingAction(const G4Step*) override; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistryTrackingManager.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistryTrackingManager.hh new file mode 100644 index 0000000000..99204003a6 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/ChemistryTrackingManager.hh @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ChemistryTrackingManager_hh +#define ChemistryTrackingManager_hh 1 + +#include "G4ITTrackingInteractivity.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ChemistryTrackingManager : public G4ITTrackingInteractivity +{ + public: + ChemistryTrackingManager() = default; + ~ChemistryTrackingManager() override; + + void AppendStep(G4Track*, G4Step*) override; + void Finalize() override; + + void SetUserAction(G4UserSteppingAction*); + const G4UserSteppingAction* GetUserSteppingAction() const; + + private: + G4UserSteppingAction* fUserSteppingAction = nullptr; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ChemistryTrackingManager::SetUserAction(G4UserSteppingAction* steppingAction) +{ + fUserSteppingAction = steppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline const G4UserSteppingAction* ChemistryTrackingManager::GetUserSteppingAction() const +{ + return fUserSteppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/parallel/TBB/B2b/src/B2RunAction.cc b/examples/extended/medical/dna/molcounters/sdcounters/include/DetectorConstruction.hh similarity index 69% rename from examples/extended/parallel/TBB/B2b/src/B2RunAction.cc rename to examples/extended/medical/dna/molcounters/sdcounters/include/DetectorConstruction.hh index a5ea063d31..664b770c47 100644 --- a/examples/extended/parallel/TBB/B2b/src/B2RunAction.cc +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/DetectorConstruction.hh @@ -23,37 +23,34 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) // -/// \file B2RunAction.cc -/// \brief Implementation of the B2RunAction class -#include "B2RunAction.hh" +#ifndef DetectorConstruction_hh +#define DetectorConstruction_hh 1 -#include "G4Run.hh" -#include "G4RunManager.hh" +#include "G4VUserDetectorConstruction.hh" +class G4VPhysicalVolume; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2RunAction::B2RunAction() : G4UserRunAction() +class DetectorConstruction : public G4VUserDetectorConstruction { - // set printing event number per each 100 events - G4RunManager::GetRunManager()->SetPrintProgress(1000); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2RunAction::~B2RunAction() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2RunAction::BeginOfRunAction(const G4Run*) -{ - // inform the runManager to save random number seed - G4RunManager::GetRunManager()->SetRandomNumberStore(false); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2RunAction::EndOfRunAction(const G4Run*) {} + public: + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + protected: + void ConstructCell(G4VPhysicalVolume*); +}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/EventAction.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/EventAction.hh new file mode 100644 index 0000000000..090e64ec7d --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/EventAction.hh @@ -0,0 +1,60 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/PhysicsList.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/PhysicsList.hh new file mode 100644 index 0000000000..e36c75b3f9 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/PhysicsList.hh @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef PhysicsList_h +#define PhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "G4VUserChemistryList.hh" +#include "globals.hh" + +class G4VPhysicsConstructor; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class PhysicsList : public G4VModularPhysicsList +{ + public: + explicit PhysicsList(); + ~PhysicsList() override = default; + + void ConstructParticle() override; + void ConstructProcess() override; + + private: + std::unique_ptr fEmDNAPhysicsList; + std::unique_ptr fEmDNAChemistryList; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/PrimaryGeneratorAction.hh new file mode 100644 index 0000000000..a3c99e8d12 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/PrimaryGeneratorAction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef PrimaryGeneratorAction_hh +#define PrimaryGeneratorAction_hh 1 + +#include "G4ParticleGun.hh" +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleGun; +class G4Event; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + public: + PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override = default; + void GeneratePrimaries(G4Event*) override; + + private: + std::unique_ptr fParticleGun; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/Run.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/Run.hh new file mode 100644 index 0000000000..664dcbd63f --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/Run.hh @@ -0,0 +1,73 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef Run_hh +#define Run_hh 1 + +#include "G4Run.hh" + +class G4VPrimitiveScorer; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class Run : public G4Run +{ + public: + Run(); + ~Run() override = default; + + void Merge(const G4Run*) override; + + inline G4VPrimitiveScorer* GetBasicMoleculeScorerWithVariablePrecision() const + { + return fScorerMoleculesBasicVariablePrecision; + } + inline G4VPrimitiveScorer* GetBasicMoleculeScorer() const + { + return fScorerMoleculesBasic; + } + inline G4VPrimitiveScorer* GetBasicReactionScorer() const + { + return fScorerReactionsBasic; + } + + private: + G4VPrimitiveScorer* fScorerMoleculesBasic = nullptr; + G4VPrimitiveScorer* fScorerMoleculesBasicVariablePrecision = nullptr; + G4VPrimitiveScorer* fScorerReactionsBasic = nullptr; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/RunAction.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/RunAction.hh new file mode 100644 index 0000000000..f0b11bfa4a --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/RunAction.hh @@ -0,0 +1,52 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef RunAction_hh +#define RunAction_hh 1 + +#include "G4UserRunAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class RunAction : public G4UserRunAction +{ + public: + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicMoleculeCounts.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicMoleculeCounts.hh new file mode 100644 index 0000000000..54d59f2ad9 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicMoleculeCounts.hh @@ -0,0 +1,102 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ScoreBasicMoleculeCounts_hh +#define ScoreBasicMoleculeCounts_hh 1 + +#include "G4MoleculeCounter.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UImessenger.hh" +#include "G4VPrimitiveScorer.hh" + +#include + +class G4HCofThisEvent; +class G4MolecularConfiguration; +class G4VAnalysisManager; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ScoreBasicMoleculeCounts : public G4VPrimitiveScorer, public G4UImessenger +{ + public: + ScoreBasicMoleculeCounts(G4String name, G4int depth = 0, G4String = "BasicCounter"); + ~ScoreBasicMoleculeCounts() override; + + void EndOfEvent(G4HCofThisEvent*) override; + void clear() override; + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*); + void OutputAndClear(); + void SetNewValue(G4UIcommand*, G4String) override; + const std::map>& GetMoleculeCountMap() const + { + return fMoleculeCountPerIndexPerTime; + } + inline void AddTimeToRecord(G4double); + inline void ClearTimesToRecord(); + inline G4int GetNumberOfRecordedEvents() const; + void WriteWithAnalysisManager(); + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + + private: + const char* ScorerCommand(G4String command); + G4String fMoleculeCounterName = ""; + G4int fRunID = 0; + G4int fNbOfScoredEvents = 0; + G4UIcmdWithAnInteger* fTimeBincmd = nullptr; + G4UIcmdWithADoubleAndUnit* fAddTimeToRecordcmd = nullptr; + //G4bool fAppendAllCopyNumbers{false};//not used + std::set fTimesToRecord; + std::map> fMoleculeCountPerIndexPerTime; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ScoreBasicMoleculeCounts::AddTimeToRecord(G4double time) +{ + fTimesToRecord.insert(time); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ScoreBasicMoleculeCounts::ClearTimesToRecord() +{ + fTimesToRecord.clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline G4int ScoreBasicMoleculeCounts::GetNumberOfRecordedEvents() const +{ + return fNbOfScoredEvents; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicReactionCounts.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicReactionCounts.hh new file mode 100644 index 0000000000..92bc76f7af --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/ScoreBasicReactionCounts.hh @@ -0,0 +1,105 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef ScoreBasicReactionCounts_hh +#define ScoreBasicReactionCounts_hh 1 + +#include "G4MoleculeCounter.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UImessenger.hh" +#include "G4VPrimitiveScorer.hh" + +#include + +class G4HCofThisEvent; +class G4MolecularConfiguration; +class G4VAnalysisManager; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class ScoreBasicReactionCounts : public G4VPrimitiveScorer, public G4UImessenger +{ + public: + ScoreBasicReactionCounts(G4String name, G4int depth = 0, G4String = "BasicCounter"); + ~ScoreBasicReactionCounts() override; + void EndOfEvent(G4HCofThisEvent*) override; + void clear() override; + + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer*); + void OutputAndClear(); + + void SetNewValue(G4UIcommand*, G4String) override; + + const std::map>& GetMoleculeCountMap() const + { + return fReactionCountPerIndexPerTime; + } + + inline void AddTimeToRecord(G4double); + inline void ClearTimesToRecord(); + inline G4int GetNumberOfRecordedEvents() const; + void WriteWithAnalysisManager(); + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + + private: + G4String fMoleculeCounterName =""; + G4int fRunID = 0; + G4int fNbOfScoredEvents = 0; + G4UIcmdWithAnInteger* fTimeBincmd = nullptr; + G4UIcmdWithADoubleAndUnit* fAddTimeToRecordcmd = nullptr; + //G4bool fAppendAllCopyNumbers{false}; not used + std::set fTimesToRecord; + std::map> fReactionCountPerIndexPerTime; + +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ScoreBasicReactionCounts::AddTimeToRecord(G4double time) +{ + fTimesToRecord.insert(time); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void ScoreBasicReactionCounts::ClearTimesToRecord() +{ + fTimesToRecord.clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline G4int ScoreBasicReactionCounts::GetNumberOfRecordedEvents() const +{ + return fNbOfScoredEvents; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/include/StackingAction.hh b/examples/extended/medical/dna/molcounters/sdcounters/include/StackingAction.hh new file mode 100644 index 0000000000..111098dae0 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/include/StackingAction.hh @@ -0,0 +1,50 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#ifndef StackingAction_hh +#define StackingAction_hh 1 + +#include "G4UserStackingAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +class StackingAction : public G4UserStackingAction +{ + public: + void NewStage() override; +}; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#endif diff --git a/examples/extended/medical/dna/molcounters/sdcounters/plotRoot.ipynb b/examples/extended/medical/dna/molcounters/sdcounters/plotRoot.ipynb new file mode 100644 index 0000000000..0477a1396d --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/plotRoot.ipynb @@ -0,0 +1,307 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "//\n", + "// ********************************************************************\n", + "// * License and Disclaimer *\n", + "// * *\n", + "// * The Geant4 software is copyright of the Copyright Holders of *\n", + "// * the Geant4 Collaboration. It is provided under the terms and *\n", + "// * conditions of the Geant4 Software License, included in the file *\n", + "// * LICENSE and available at http://cern.ch/geant4/license . These *\n", + "// * include a list of copyright holders. *\n", + "// * *\n", + "// * Neither the authors of this software system, nor their employing *\n", + "// * institutes,nor the agencies providing financial support for this *\n", + "// * work make any representation or warranty, express or implied, *\n", + "// * regarding this software system or assume any liability for its *\n", + "// * use. Please see the license in the file LICENSE and URL above *\n", + "// * for the full disclaimer and the limitation of liability. *\n", + "// * *\n", + "// * This code implementation is the result of the scientific and *\n", + "// * technical work of the GEANT4 collaboration. *\n", + "// * By using, copying, modifying or distributing the software (or *\n", + "// * any work based on the software) you agree to acknowledge its *\n", + "// * use in resulting scientific publications, and indicate your *\n", + "// * acceptance of all terms of the Geant4 Software license. *\n", + "// ********************************************************************\n", + "//\n", + "// The `molcounters` example(s) are provided as part of Geant4-DNA\n", + "// and any report or published result obtained using it shall cite\n", + "// the respective Geant4-DNA collaboration publications.\n", + "//\n", + "// Reports or results obtained using the spatially-aware `MoleculeCounter`\n", + "// provided in this example, shall further cite:\n", + "//\n", + "// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194)\n", + "//\n", + "//\n", + "// Author: Christian Velten (2025)\n", + "//\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import uproot\n", + "from pprint import pprint" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "mpl.rcParams['font.size'] = 9" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "TTrees:\n", + "['BasicMoleculeCount_BasicCounter;1',\n", + " 'BasicMoleculeCount_BasicCounter_VariablePrecision;1',\n", + " 'BasicReactionCount_Reactions;1']\n", + "\n", + "Branches in Tree `BasicMoleculeCount_BasicCounter;1`\n", + "[,\n", + " ,\n", + " ]\n", + "\n", + "Branches in Tree `BasicMoleculeCount_BasicCounter_VariablePrecision;1`\n", + "[,\n", + " ,\n", + " ]\n", + "\n", + "Branches in Tree `BasicReactionCount_Reactions;1`\n", + "[,\n", + " ,\n", + " ]\n", + "\n" + ] + } + ], + "source": [ + "path = '~/build/geant4/geant4/examples/molcounters/sdcounters'\n", + "tfile = uproot.open(os.path.join(path, 'MoleculeCounters.root'))\n", + "\n", + "print('TTrees:')\n", + "pprint(list(tfile))\n", + "print('')\n", + "\n", + "for tree in tfile:\n", + " ttree = tfile[tree]\n", + " print(f'Branches in Tree `{tree}`')\n", + " pprint(list(ttree))\n", + " print('')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Example DataFrame:\n", + " Time__ps_ Molecule_Count Molecule_Name\n", + "0 1.000000 166626.0 H3O^1\n", + "1 1.325711 166609.0 H3O^1\n", + "2 1.757511 166589.0 H3O^1\n", + "3 2.329952 166542.0 H3O^1\n", + "4 3.088844 166503.0 H3O^1\n", + ".. ... ... ...\n", + "345 323745.754282 7371.0 °O^0\n", + "346 429193.426013 7371.0 °O^0\n", + "347 568986.602902 7371.0 °O^0\n", + "348 754312.006335 7371.0 °O^0\n", + "349 1000000.000000 7371.0 °O^0\n", + "\n", + "[350 rows x 3 columns]\n", + " Time__ps_ Reaction_Count Reaction_Name \\\n", + "0 1.000000 685.0 H + H -> H2 \n", + "1 1.325711 686.0 H + H -> H2 \n", + "2 1.757511 686.0 H + H -> H2 \n", + "3 2.329952 688.0 H + H -> H2 \n", + "4 3.088844 689.0 H + H -> H2 \n", + ".. ... ... ... \n", + "245 323745.754282 7508.0 e_aq + e_aq -> H2 + OHm + OHm \n", + "246 429193.426013 7775.0 e_aq + e_aq -> H2 + OHm + OHm \n", + "247 568986.602902 8061.0 e_aq + e_aq -> H2 + OHm + OHm \n", + "248 754312.006335 8321.0 e_aq + e_aq -> H2 + OHm + OHm \n", + "249 1000000.000000 8564.0 e_aq + e_aq -> H2 + OHm + OHm \n", + "\n", + " Reaction_Count_Differential \n", + "0 NaN \n", + "1 1.0 \n", + "2 0.0 \n", + "3 2.0 \n", + "4 1.0 \n", + ".. ... \n", + "245 310.0 \n", + "246 267.0 \n", + "247 286.0 \n", + "248 260.0 \n", + "249 243.0 \n", + "\n", + "[250 rows x 4 columns]\n" + ] + } + ], + "source": [ + "# Convert TTree to pd.DataFrame\n", + "basic_molecule_count = tfile['BasicMoleculeCount_BasicCounter'].arrays(library='pd')\n", + "basic_molecule_count_variable = tfile['BasicMoleculeCount_BasicCounter_VariablePrecision'].arrays(library='pd')\n", + "basic_reaction_count = tfile['BasicReactionCount_Reactions'].arrays(library='pd')\n", + "\n", + "# Fix dtype from awkward to str:\n", + "for df in (basic_molecule_count, basic_molecule_count_variable, basic_reaction_count):\n", + " for col, dtype in zip(df.columns, df.dtypes):\n", + " if dtype == 'awkward':\n", + " df[col] = df[col].astype(str)\n", + "\n", + "# The reaction count is cumulative, so we'll calculate the differential\n", + "basic_reaction_count['Reaction_Count_Differential'] = \\\n", + " pd.concat([ser.Reaction_Count.diff()\n", + " for _, ser in basic_reaction_count.groupby('Reaction_Name')])\n", + "\n", + "print('Example DataFrame:')\n", + "pprint(basic_molecule_count)\n", + "pprint(basic_reaction_count)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArUAAAGICAYAAABfrBivAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAfQ5JREFUeJzt3Xd8FGX+B/DPtjRSCBB6UKognAZIpEiJIIgURWwciBVPfmAX8Gynp8gdcop64mEvJ6hnw5NTLBQ1ooARRECQKgkkEEJIT7bM/P7Y7GZnd2Yzszvbks/79coL8uyTmWc3m+9895mnGERRFEFEREREFMOMkW4AEREREVGwmNQSERERUcxjUktEREREMY9JLRERERHFPCa1RERERBTzmNQSERERUcxjUktEREREMc8c6QZEE1EUYbfb4XA4It0UIh8WiwUmkynSzaBmzOFwwGazRboZRD4Y/0gNJrUNrFYrioqKUFNTE+mmEMkyGAzo2rUrkpOTI90UaoaqqqpQWFgI7sdD0Yjxj9QwcEcxQBAE7Nu3DyaTCRkZGYiLi4PBYIh0s4jcRFFESUkJampq0Lt3b/ZYkK4cDgf27duHpKQkZGRkMP5RVGH8I7XYUwtnL60gCMjMzERSUlKkm0MkKyMjA4cPH4bNZmNQJ13ZbDaIooiMjAwkJiZGujlEPhj/SA1OFPNgNPLloOjF3jMKNb7HKFrxvUlqMIsjIiIiopjHpDYItVY7rHYBpVX1sNoF1FjtuhzXbJaOCsnLy0Nubi4A4NChQxg8eDCysrJw9tln46GHHpLU/fe//43+/fujb9++6N+/P9566y2f4xcWFqJHjx7o168fTp48KXnss88+Q1ZWFsxms+zPhpsgiBBFEYLQ4od+E0UVxr/QY/wj0oZJbYDqbQ6s+Pogsh//EoMXfYXsx7/EC18fRL0ttMuBde7cGd999x22b9+O7du34/PPP8fGjRsBAF988QX+8pe/YM2aNdizZw/WrFmDhx56CF988YX750+dOoXJkyfj73//O+bPn48pU6agqqrK/Xjv3r3x1ltvYcaMGSF9HmoIgghbnR1rX9gJW509pgK7vwunt7///e/o2bMnDAYDCgsLw9RCosAx/oUe4x+RdpwoJkMURdT6Cc6CIOKlbw/hmXX73GUVtXb39zeP7A6jUX78T6LFFNTYoPj4ePf/bTYbbDab+3iPP/44HnroIXTv3h0A0L17dzz44IN4/PHHMX78eNTU1GDatGl47LHHMGXKFABAq1atcNVVV2H16tWIi4tDr169AIRnfLGt3s8F0AAIdgEfLM1HWVENyo5X4/IFg2E0G2E0GGCyGCE4BDjsjYHeEh8dkwc8L5yVlZWYMmUKvvzyS8WlaMaOHYs//vGPGD16dJhbSuQrlPEPCC4GMv4pxz8gOmIg4x9FEpNaGbU2B87+y+eyj7VpFYe8ey/Aa5sOyT7+2qZDuGV0D4xYsgGnqq0+j+9+9CIkxfl/2R0OB7KystzfV1dXo0uXLu7vS0tLMWbMGOzbtw/z5s1zB4OdO3di8ODBkmNlZ2dj4cKFAICkpCR3r4bL9OnTMX36dL/tCZUX7/hatrz/qC44b9KZWP30NpQVOdcNLiuqwQdL8zH1zoEo3FuGPud1xMHtJ/H5SzvdPzdvxRhV5924cSMefPBB1NbWom3btnjllVeQmZnpUy8/Px+33347ampqIIoinnjiCYwfPx4AsHLlSvz1r39FSkoKRo0ahV9++QVfffWVqgunt5ycHFXtJgqHUMY/oOkYyPgXWPwD1MVAxj9qzpjUapSRHI/SKisqauXHj1XU2nGq2oqM5HjFoN4Uk8mE7du3u7/Py8vDgw8+6P6+bdu2+Pnnn1FSUoLJkydj165d6N+/f0DnijZGswGjp/fB2hd3ugO6S1lRDb5++zdMuGVAwMc/deoU7r//fnz22WdIS0vDe++9h/nz5+Pdd9/1qdu7d29s3LgRFosFR48exahRo3DgwAEUFxdjwYIFyM/PR8eOHXHFFVe4fybaLpxEemL8Cy3GP6LgMKmVkWgxYfejFyk+bjYakZpolg3sqYlmtE9JwEfzhiseWy8ZGRkYNWoUvvjiC/Tv3x8DBgxAfn4+zj33XHed/Px8DBgQeBAMpT89I3+7yW4XMObavig7Xi0J7OmdkjDm2r4Q7CJMFgN6ZLVTPIaSTZs2Ye/eve7eHUEQkJKSIlu3qqoKs2fPxu7du2E2m1FQUICTJ09i8+bNGDFiBDp16gQAuPbaa/HPf/5TUzuIolUo45/r+Hpg/GP8I/LGiWIyDAYDkuLMil8OQcANw7vL/uwNw7vDLgiKPxvsWnsFBQWora0FAFRWVmLdunXuXor77rsPixYtwuHDhwEAhw8fxqJFi3DfffcFdc5QscSb5L/iTLAkmHH5gsFI7+TcDCO9UxIuXzAYlgQzTBbn29ZoMkp+Tg1RFDFy5Ej3RJMdO3bgu+++k637wAMPYNCgQfjll1+wfft2pKSkoK6uLqjnfOzYMWRlZSErKwuPPvpoUMciCoVQxr9gYyDjn3L8UxMDGf+ouWNPbQAS48yYm9sTgHMMWUWtHamJZtwwvDvm5vZEvI69sd527dqFBQsWwGg0wuFw4Prrr3ePc5owYQL+8pe/YOLEiRAEAUajEQ8//DAmTJig+vjr1q3Dddddh7KyMvz3v//Fn//8Zxw4cEAyQSMcjEaDO7Cvf3MPxlzbF5YEs98JKGoMGzYMt9xyC3bu3IkBAwbAZrNhz549+MMf/uBTt7y8HF26dIHBYMD777+PU6dOAQCGDBmCuXPnori4GB06dNC09E/nzp0lt1aJYg3jX+gx/hEFxiCKYuysExIidXV1OHToELp3746EhATVP1djtcNsNKKyzoaUBIu7h4L0IwgiDAZAFBF0QHf5+uuvce+996K2thZ2ux1z587FvHnzfOpt3boV1157LeLj4zFy5Ej897//xXfffYeuXbtKJkqMHj0aO3bswFdffRVQexYtWoQVK1aguLgYGRkZyMnJwX//+1+feoG+T4maEsh7i/Ev9Bj/GjH+kRpMasE/FgrOxo0bsWjRooCDulp8n1Ko8L1FgWL8o2jCMbVEREREFPN4r4havDlz5uCHH36QlI0bNw5Lly5V9fO5ubnubTyJiGIJ4x81J0xqqcVbsWJFpJtARBQRjH/UnHD4ARERERHFPCa1RERERBTzmNQGw1bj//sAmc3SUSF5eXk+Y5YqKiowaNAgdO3aFfv375c8ZrfbccMNN6BXr17o378/vv32W13aRUTkxvhHRFGGSW2gbLXAt085/5X7PoTq6upw6aWXYtasWXjppZdw6aWXoqioyP3466+/jvr6euzfvx9vv/02brrpJsTyym0Ou/w+84F6//33MWjQINx///2S8ieffBJ9+vRB3759MWjQIHz++efuxx555BEsWrRIUv/CCy/02ef8zTffRFxcHObPn+9z3o0bN6J///7o1asXZs+eDYfDod+TIgonxr+wYfwjUo9JrT/WauWvb58EvlkKvDMDKD/q/Pebpc5yufo6BXuHw4GZM2di+vTpuOuuu3DxxRdj+fLluPLKK3H69GkAwAcffIDZs2cDAM455xy0bdsW27Zt0+X84Watq8Opo4Ww1Qe3PaOnt956C1u2bEFtbS327dsHAHjxxRexatUqbNq0CXv27MHLL7+MWbNmYffu3aqPu2bNGvzjH//Ar7/+il27dmHJkiXuxwRBwOzZs/Hee+9h//79qKio0LQTD1HYMf5FHOMfkTZc/cCfxZ3ly3uOAa54DTiaDxxYDyw7u7F82K3Au9c4yz11Hgj8aaOq0zocDmRlZbm/r66uRpcuXQAAJpMJH3zwgaR+bm4u8vLy3N8XFhYiMzPT/X23bt1QUFCAQYMGqTp/uNgU9hE3xVlgNJogCgLs9XV495F7cePTL8ASnyD5OYPRCHNcnLPMWg9LnLqtLAVBAAD3VpsA8Pjjj+O1115Du3btAACDBg3CLbfcgiVLluCNN95o8ph5eXlYvHgx1q1bh4yMDHz88ceYOXMmXnnlFdx0003YunUrOnfujLPPdr5XbrrpJixfvhzXXXedqjYThR3jX0jpHf8giLCo2JSA8Y+aMya1gTiwHvj+OWDKM8DTHntmT1zqLPcO6BqZTCbJ/th5eXl48MEHVf98rNxqe/a6K2TLZy5ehrZdM2GtrcX/nl2K+ppqrHnmCUy+415YEuLxwd8extE9u9BnyPmYcvd9AIDVTzyGKx9cJHs8b1dffTVycnJw8cUXo2/fvqisrMSRI0cwePBgSb3s7Gx8+umn7u+XL1+O999/3/39gQMH3P8fMWIENm3a5P4+Li4O7733nvt7pQstUcxh/NOF3vHvyC/bcc+7a5o8L+MfNWdMav25/5h8ucEEQHTecvP06QJg+ipg5HxA9BovZAjfSI/MzEwUFBSgd+/eAIAjR46ga9euYTt/sNp27YbTxUV495F7UV9TDQAo2LUDr975J1z9yBJces/9eP7mmQEff+bMmZg5U/vPz5s3T3JxvfDCC1X/bKxcaIncGP8igvGPKHBMav2JayVfbqtxToo4sN55y+2S54D/3ur8/tsngZF3K/9sGEybNg0vv/wyxowZgx07dqCkpCTqbr0BwO1vvC9bbrKY0bpjR9z49ItY88wSFOzagcz+52DynffCEh8PwIDb33gfBmPjhXLqwocCbkdKSgq6deuG/Px8jBkzxl2en5+PAQMGBHxcT64LrUusXWipBWL8Cynd458QWOLI+EfNCZPaQFiSgJH3OP8/8h7Akujsofj2ycbvI+j6669HXl4eevXqhbi4OLzyyiswGAwRbZMcf+O/jPEmWOITMPmOe/HqnX/C5DvvRVJqmvKxVI6nVXLffffh3nvvxdq1a9G2bVts374dK1aswIYNG4I6rkt2djYKCwuxe/dunH322XjllVcwbdo0XY5NFFaMf7pg/GP8I/0xqQ2UJdHZI+EK4N7fB8HutYTLiBEjfJZO8ds0i0XV4P5YYEmIx9WPLGnooQidOXPmoKKiAkOHDoXJZEJiYiJef/119O/fX5fjm0wmvPzyy7jiiitQX1+P0aNHY9asWbocmyjsGP/CgvGPSBuDyMEuqKurw6FDh9C9e3ckqJg9SuHlsNthMvPzF9+nFCp8b0Uvxj8nvkdJDa5TS1GPAZ2IWirGPyL1mNQSERERUcxjUktEREREMY9JLRERERHFPCa1RERERBTzmNQSERERUcxjUhsgq8OqqVwLs9ds17y8POTm5irWLygowNixY9GvXz/0798f9913n0+dwsJC9OjRA/369cPJkyclj1VUVGDKlCno3bs3srOz8euvvwb9HPQk2BxNV9Lg/fffx6BBg3D//fdLyp988kn06dMHffv2xaBBg/D555/7/Owvv/yCjIwMjBw5ErW1tZLHjh49ilGjRqFPnz7Izc1FUVGRru0mihaMf+HD+EekHpNaP2psNaix1bj3ra6116LGVgOH4ECcKQ45b+Vg4JsD3V85b+UgzhTnDux2wY4aWw3q7HUhbafZbMaSJUvw66+/Ytu2bcjLy8PHH3/sfvzUqVOYPHky/v73v2P+/PmYMmUKqqqq3I8/8cQT+MMf/oB9+/bh0Ucfxdy5c0PaXi1EuwAIDf/q5K233sKWLVtQW1uLffv2AQBefPFFrFq1Cps2bcKePXvw8ssvY9asWdi9e7f75w4dOoQrrrgCH3zwAcaMGYOrrrpKslD8vffei2uuuQa//fYbrrrqKp+LBlEs0Tv+CaJ+f8OeGP+0Yfyj5oxJrR9DVg3BkFVDUFZfBgD445o/YsiqIdh2YhsAZ9C2ix5fgvMP/B8//gMAsO7IOgxZNQT/99X/hbSdnTp1QnZ2NgAgLi4OAwcOxJEjRwAANTU1mDZtGh577DFcddVVuOmmm3DHHXfgqquugtXqvPh88MEHmD17NgBg4sSJ+O2331BaWhrSNgOAYHX4/RIdzovpyVd+8Vtf1NiTIQjOC4TRaITD4fzZxx9/HEuXLkW7du0AAIMGDcItt9yCJUuWAABOnDiBq6++Gv/+978xatQo/PWvf8Xo0aMxe/Zs90V/zZo1uPbaawEA1113neTCShRr9I5/B08fDEk7Gf+cMUwU1O2jxPhHzRlXdY5CDocDWVlZ7u+rq6vRpUsXVT976tQprF69Gl988QUAICkpyWeLyenTp2P69Onu7wsLC5GZmen+vmvXrigsLETbtm0DfxIqHPvLJr+Pt797EKyHK2A9UonqrcUAgNMfH/CpF9c9De1vOUf1ea+++mrk5OTg4osvRt++fVFZWYkjR45g8ODBknrZ2dn49NNPnW1p3x5btmyRPD5//nz3/0tLS9GqVSv3TjetWrWCxWJBeXk50tKU92wnIinGPyet8c9eUgNLh1ZNnpfxj5ozJrV+bJ6xGQCQaHbuZ/725LchiiLiTf734Z6f7fxjH9ttLDbP2AyjQVuHuMlkwvbt293f5+Xl4cEHH2zy56xWK6644grccccd6Nu3r6ZzRhtTWhzMrRNQum4nAKByYwE63DUYlRsL4CgPbtzezJkzMXPmTD2a6cbdpqm50Tv+9WjdQ9V5Gf8Y/4gCxaTWjyRLkuR7V3B3MRvNgOD1PYA4U5z7e1dZqDkcDsyYMQNZWVm45557NP1s165dUVBQgB49nBedwsJC1T0jwej86HDlB0WgZvsJdwB3lFtR88tJdLg7GzBIqxoMMj+vQUpKCrp164b8/HyMGTPGXZ6fn48BAwaoOkbbtm1RXV2Nuro6JCQkoLq6Glarlb0UFLP0jn9aP9xrwfgHmDOSEAjGP2pOmNQGyOqwYus1W2XLXUE9nP70pz8hJSUFTz75pOafnTZtGl5++WUsXrwYn376KXr16uUeWxVKxjiT4mOiXUDluiOSssqvfkerge1hMOt/cbzvvvtw7733Yu3atWjbti22b9+OFStWYMOGDap+3mAwYNKkSXjzzTfxpz/9CW+88QYuueQS3dtJFA0Y/4Knd/wzGAP/dM/4R80Fk9oAKQXuSAT07777Dq+++ioGDBiAgQMHAgBuvPFG3H777ap+fuHChZg5cyZ69+6NlJQU/Pvf/w5lc5sk2gVnL0WlDfAI1I5KG2p+PoGkc/VPbOfMmYOKigoMHToUJpMJiYmJeP3119G/f3/Vx/j73/+OGTNmYOnSpejUqRPefvttXdtIFC0Y/0KH8Y8ocAaRg2FQV1eHQ4cOoXv37u6B7hQ5gtXhtxejqcebK75PKVT43ooejH/y+B4lNbikF0WdpgJ2SwzoRNQyMP4RBY7DD2LIp59+Krug9ffff4/ExESZnyAiah4Y/4ioKUxqY8jEiRMxceLESDeDiCjsGP+IqCkcfkBEREREMY9JLRERERHFPCa1RERERBTzmNQGSaivl/xLRNRSMP4RUTRhUhskY3w89mbnwBjvfz90LaqqqnDLLbegR48e6NWrFy6++GLs378fAJCbm4u8vDxJfbPZd77f7NmzkZCQgNWrV/s9V35+PoYMGYL4+HgsWrRIt+dARM0f4x8RRROufuCHUFMjW26Ij4fBZIIoCDAYjRDtdsnjos0G0Wbz+Tljkrq9uf/0pz8hMTER+/btg8lkwmuvvYbx48fj119/VfXzf/7zn1FeXo6ff/4Zl112GdLT0zF69GjZuh07dsTzzz+PDz/8UNWxiahl0Dv+wWCAUcXSW4x/RBQoJrV+7B002LfQaESfrVtgatUKBqMRtqIiiA4HbEVFsHTqBAAQamvx29BhgCBIfrTfnqaD8sGDB/HJJ5/g6NGjMJmci2zfcMMNePXVV7Fq1aomf/6pp57CsWPH8M4778BkMuHLL7/E5ZdfjhUrViArK8unfpcuXdClSxd88sknTR6biFoOveNfXK+e6Llmjd9zMv4RUTCY1GplNMLUqhX2ZudAtNshOhyAzYb94y+CwWSCwWzGWT9uBYxGn6Cuxq5du9CrVy+kpqZKyrOzs7Fz504AziDfqlUr92MOh8P9/7vvvlvyc126dMEPP/yguR1ERD4Y/4goijGp9eOsn/Jly4X6emfgBmAvLcW+3AvQe+MGmNu2bXx8y+aQteu1117DiBEj3N/LjSkjIgqG7vHPYNClXYx/RKSEE8X8MCYlyX95TIowt20Lg8nkDuiAc/KE3M+p0b9/f+zfvx+VlZWS8vz8fAwYMCDo5zR79mxkZWUhOzs76GMRUfOld/xTM56W8Y+IgsGkVgcGHXsKevTogUmTJuHuu+9231Z78803UVBQgD/+8Y9BH//ll1/G9u3b8eOPPwZ9LCIixj8iiha8bxMk1604ob5et2VtXnrpJdx9993o3bs3jEYjevbsibVr1yIhIUGX43vau3cvxo4di4qKChgMBqxYsQJff/01evbsqfu5iKh5YfwjomhiEEVRjHQjIq2urg6HDh1C9+7dQxI4ifTA9ymFCt9bFO34HiU1OPyAiIiIiGIek1oiIiIiinlMaj0IAayrSBQuHClEocb3GEUrvjdJDU4UAxAXFwej0Yhjx44hIyMDcXFxMOi0piKRHkRRRElJCQwGAywWS6SbQ82MxWKBwWBASUkJMjIyGP8oqjD+kVqcKNbAarWiqKgINQr7nRNFmsFgQNeuXZGcnBzpplAzVFVVhcLCQvaIUVRi/CM1mNR6EEURdrtdsu0iUbSwWCwwmUyRbgY1Yw6HAzabLdLNIPLB+EdqMKklIiIiopjHiWJEREREFPNa3EQxQRBw7NgxpKSkcDIEEcUEURRRWVmJzp07w2gMvC+C8Y+IYo2W+Nfiktpjx44hMzMz0s0gItKsoKAAXbt2DfjnGf+IKFapiX8tLqlNSUkB4HxxUlNTI9waIqKmVVRUIDMz0x2/AsX4R0SxRkv8a3FJreuWW2pqKoM6EcWUYIcMMP4RUaxSE/84UYyIiIiIYh6TWiIiIiKKeUxqiYiIiCjmMaklIiIiopjHpJaIiIiIYh6TWg0cdrvq8lDV5fl4vmg+XzS3LdrPF+1i8TXl+Xg+ni822qYXJrUqWevqcOpoIWz1dU2Wh6ouz8fzRfP5orlt0X6+aBeLrynPx/PxfLHRNj0xqVXJXl+Pdx+5F7a6OtitVve/9vo6Z3l9PURB8CkDIFvXbrdJyxrqOOw23/M1lDnLG+vLlSm1zWG3+5QJDodvXaVj1NVBFEWf8wmCAADO5x5g21zlgsPu8zrb7bamX3uF87k47Haf34nP6+E6ps0qez5RFH3KBUFQ0Tbn+QTB4ft+EUX590u9/O9EcDh8Xx+bzPvFZlV8/eXOJ1cuOGTeL4Kg+H6R+xsRG94bkveLw+F8v4hik20T5c7X8H6R+3uSa5vgsMu+Fv7KnO9D/21z2O0e5/N9D8i9N+Re+1jB+Mf4x/jnP/55ny+U8c9WV9fwe/UTY1po/GNS2wRbfR1qysux5pklqK+pxppnnkBddRXqa6pRU1GONc88gfqaauS982/U19a469TXVGPN00tQW1mJ+toan7r2ujppXfdxa3zOV19VBWutq7zhGO++hbrqatSUn5Y5hm/bbN7ne3qJbF3FY7z7lrPM63z11Q1tq6wIqG3SdlS4n3feu2/Bbq1HfVVV06+9wvlqKythra1Brdf5aisrYa2r9TmG3VqP+upq2fM5jyFtW21lRZNtW/NMw/lqa33fLzXVsu8Xn7qu81VV+pzPWlPt+/6sqpZ9v9it9arfn9Za3/dLfXWl7Gtvt9Y3vPZer0VtraQN7jZ7/U6U2qb0XparW1+l8F7W8Lfjer8434dNtK3K87VQ937xPkZNeXnU99gy/jH+Mf4pxz/PmOZ9vvraGtn3QDDxz7O8yRjTQuNfi9tRTAuH3Y7TxcV495F7UV9TDQAo2LUDJpMJVWWn8O4jf3aXj5g+CxUnS/Afj7KCXTsAUUBtRblv3dKTPnXljluwaweMRiPKTxyXOd8JVcdwns+3bQYAtZUVPufT9vzEoNrmv83qXiOl80EUUH7ipM/5IAqoOhXk+TT8/iAKqDyp/v1SU346qPOZTArvF5ljQBRQc7pM1fsFou/7xV/bKk+e8GmbAdDQNlH1+YxGI6q8XreCXTtgMBhUvz/l3i9az6fl/fLqnX/C1Y8sQZsuXWEyR18oZvxj/GP88x//XO2Qfw/Iv+eCiX9afyctMf6xp9YPk9mM1h074sZnXkRm/3MAwPmv0YjUjA648ekX3OV57/wbqe3aS8oCritzvrT20nJdzxfkMdLad8CNTwfWtlC/ns626fs7Cej5tW+e7xe/ddtHx3tZy/m83y+hfC/f+MyLaN2xY1QmtADjH+Mf41/IYkywr6fW90BLin9iC/Hcc8+J/fr1E/v06SMCEMvLyzX9fPXp0+I/r79KrC4/3WR5qOryfDxfNJ8vmtsW7edrSnl5eUBxy4Xxj+fj+Xi+aG1bU7TEvxaT1LoEenGw1tWKJw4fEq11tU2Wh6ouz8fzRfP5orlt0X6+pgSb1AZ7nFh8TXk+no/ni422NUVL3DKIYsOUzhaioqICaWlpKC8vR2pqqqafddjtsl3lcuWhqsvz8XzRfL5oblu0n8+fYOKWXseJxdeU5+P5eL7YaJs/WuIWk1oioigXDUktEVEkaIlbnChGRERERDGPSS0RERERxbzoXEsmytRa7TAZjaissyElwQK7ICApzuxT7mjYQUTvui3lfEQUfaIlPkTz+YgoOrCntgn1NgdWfH0QT6zdg/SkODyxdg/e+7EQdV7lr+QdhF0Qda/bEs73wtcHYbU5UGu1w2YXIIoibHYBtVY7aq12WO0CSqvqYbULqLE6t/3zLtdS11VORP4x/vk/RlOxy7OsqXjEOEUUPCa1ftRa7Xh+4wGUVtXj9lE98fmLO3H7qJ7IOTMdz2/cLym/PucMbD5YqnvdlnA+A4B6h4BN+0tRW2PD2hd2oq7WGdBDnUQzMSaSx/jX9DH8xS7PstoaG34+clp1Eu0qr6q3Me4QacDVD/yw2gU8sXYPbh/VE2uWbUNZUQ3SOyXhsnsGY+u+Egzs2RafeJYvGAzBIeLjp35yl027ZzA27S9Bdo+20mMo1N28rwSDvI47bf5gfH2gBMPOVHGM+YPxw74SDJI7nyDi4yeldTft823btPmDkbevBOd5lU9dMBii9zEWDMbX+33bJlf38gWDsW5/CUZ4P4/5g3G4vAZdkhMk5ZfeMwjr9p1Abs8MfLfqN5w/ow8Kq+qwdlcxTlVZsXBsH3y36jfkzuqL734vxca9Je4ypbrnz+iDVzf/jptGdsfL3x5Cdb0d90/shxe+OYBrhp4hKVv86a/IbJOEq3My8a+NB3zKLx/cBXEmE4dXUMhFYvUD5fg3CD/uO4ksmfgnOkSs9ohHl90zCD/sP4nBMvHIt+5g/LivxPe49wzGtwdKMLS7uvj3/b4Sn/NpiUdK5XLHUIpd0xYOhsPhW1dtnBoxow9gMeKlvIOoqXe4406reDPm5faEQxQ5vIJaDC1xi+9WP+ptDklAB4Cyohr8srEAQ8Zk4oOl+e7yzr3TIdpFfLzsJ0ndHRsLMHxMJj5UWXeo13HLimqwY0MBRqs9xoYCDFPbtg0FOF/hfCNljgG5Y6wvQK7Kuj+vL8AYr+dRVlSDXzYU4FyZduzaWIjxHvXLjlfjsnsGoW+HFIwY0njBKTtejcsWDMawzDbuC1zZ8WpcvmCwbN1b5g/Gdw29LgvH9nH2xMzq61N2e8MF5/mN+90XnM9f3Ik7Gi44L34jveC4EuAVXx/Ea5sOoc4qICHOiBuGd5e9EPGCQdFMOf4V4jyFGLPa62/+l42FGKYQu3zrFvgc11U+SkP8G64hHo2VOZ9cudIxftlQgHNk2ibYfOt+9I98Z5zq1sad7PqLU5feMwi92rVCbs8Mdzx6dfPvqHcImj6Qe8eje8ad5VPer3MK3rppCF7+9hBjF8U0Dj/wIznBjO9W/eYOTABgNBuQM7E71r+5x11uNBswenoffL1qr2zdDRrqeh5Xj2MEer5Aj6HltfDXjv6jumDAyC6+CfDGQozplSG50LovcE/JXLS86rouLsPPbIv7LjwLa5Ztw8HtJfjoH/k436tszbJt6Nk6CX07pGDh2D7u8k+WbYPRIaJXu1ayty2fWbcPl5zTGXsem4BLzumMNTuKUO8QNN1e5HAHijTGP/2eH9CQGHv03gL+49SujYUYf1YHSTy6ZXh3n2EQTQ2v8I5HnVsn+JT/7bI/4MVvDqqOXS98fRD1NofKdxJR+DCp9cNqFzDqmrOQ3inJXSbYRWz99BDGXNvXXS7YRXz9zm8YPUPfui3pfBd4lLsvDG/LX1CDuUgCzouLwSFNgrUmxnIXnJ6tk1BT78A1Q7q5e3UXju2Df/4xCy9+c1By0bljVE9MG9gFL36jPL4u+/EvMexv65H9+JccX0dhx/in7hgXqKjrilMbV6qLU0of6t0fyMdJP5B7l/mLRyN7Z+D1TYcl5T1bJ6HWqi52ucYSHzpZzXhEUYdJrR/xFhMs8SZces8gd4BK75SEAbldYbQYJeXH9pXBHGfEZfMH61q3JZzvnAsyceh0DSbfNRDpnZJCdoED5C8uWhNjpQvOB0vzcc8FvXG/V29vj7Qk9O8YeG/vjcO7Y/I5nfDiN9JEV2nCGy8upAfGv6aP4R27XHWNFoPk59MyEmG1OpA7q+mYpvShHvD4QP6k9AM57L49wK545H33SbQKWHRJf0k8+mBpPu4Z41u3R1oSzvW6U7Vm2TbMOb87CstqkP34lxi86Ct3PGLvLUUaJ4qpUGdzwGATsP7NPRhzbV+IFiMSLCafcliMEAHd6zb388Hi/GyVt+8kcrq2dk6UmHkW4hJMsNc7JJMtpt4zCJZ4E6xe5Vfcmw2HQ8RH/8jXXBdwJqrnTe4uGecHADmTz5SM9zWaDZjzbC7WvrgTB7eXSN4n/Ud1wZAp3fHRU77H8B53J1fumqSydP0+1NkcPhPhZr+Zj2uGdMOjlw7AXz7eie8PnsLqecNVj4PjRJDYFcltciMdH6L5fEqxyxxvxKb9pe6y82f0wa4TlRh8RjpsKmKad9wBIBt79IpHauOfS3qnJEy+ayCeWPcb/vNjIawOZ2z56yX9cfmgLogzcwIt6UdL3GJSq5IgiDAYAFEEjEaD3/JQ1W3u56ux2mExGmE2GWB3iLALAgwGQ0gucAbA5+KiNjFWe8HxV95/VBecN+lMrH56m8/F4rL5DStVeMzqnnzXQGw8UOKzEsRnO4vxz/X7m0x2vSeCVNTakZpo5kSQGBHJpBaIjvgQzeeTi10iICmzNfxNqU2ijRZjwB/ItcQjrbHLpUdWBsbf3B8Gg8Edd96bMwxvbDosOzHtXxsPSGLPPePOUr2CjB6rOzCmxS4mtX7odXGg8AnVRSuYxFjugjNt4WAYRPj0aoSit1epV1cp2d1TXOEuA4A4kxFWh4CeGcmSBFjNBYfCL9JJLelLbZwK5gO52ngEBNZTO7VhWbZvVu71+yF79FkZ+OVoOZ5d1xh7Mtsk4T+3DMUb3x/G65sOS+KOdwJ8bmaa7Adyf8myXPkNw7tjbm5PxFtMIf7tkt6Y1PrBoE6egkmM5Xpc4kxG2Ors7ouAK/n0ToK19Pb669V1XVg8e3Xlkt0x1/bF0vX78HLeIZ8Lzo7Cckmyq3TBYa9u5DCpbbmC+UCuFI/M8c6hXZ7lV9ybDVEQm4xdrrgDr3WGpy0YjH/IfMiOSzTjvMVfoaLW3uSH7JeuHeyTAC+fOdAnRinV9VcOAHeM7Y1bRvdgvIoxTGr9YFAnPSklxbY6u/viYkkwyybBanp7A+nVdQ1hEAXpRUduCIOWCw57dSOHSS15U/uBXCkeyZUDaDJ2jb2+n88QCEA57kxbMBiLPt8DAH4/ZC/5bA/uGNcbQ/+2ThKPrA7BJ0Yp1VUq/8vHO/HW5iNITTTjxwfGIc7MOfKxhJsvEIWJ68JhMEjLLAlmTLhlgOTikmAxQTAZJeUOAJcvGNzYu2I2wmIy4vIFg92JrWt2dNnxap8VG9a+uFN+PUyPCwvgnA2955ujPptZTFswGJec0xkA3Ev5jLm2L2qtzlnM3r26L35z0J3sAkBGcoJ7ZQb26hKFj1LskSuTi0dK5U3FLgBY94L6uPPh0nzc77UbW9nxatx+10Cc0yXVvbnErTP7oM7qcCejrnh0wbV9fWKUUl2l8oUz+gAA3tp8BFV1NrRJjtfzV0FRhD21RBGmpndFze1CQL8hDE316gLytwZdlHp1uTJDYNhTS9HCFZvUxB1A+zwBtVsUa93meMpdA3G0ug49MlIYY2KMlrjFPniiCDMaDTAYDJLxu569KJYEM0wmIywJZly+YDB6ZGU4x8XFmdxlnuth2qwO7eteyvXqem0uAZvg7jG5Zkg37HlsAkb2zsAb3x92Hy/O5Awpf774LPcORa4kuKLWLtmhyLXG5ZUvbIJdECVlXIeXKDq5YlNTcQdQ3nRCaa1vuc1ulNbhVdoYR6n8k2XbkJmSiCfW7mkyxtRa7Yw7MYpJLVGU8k52vRNdo9EgucAoJbtaNqIAlC84Hy7Nx8KxffDs1ee6b+vJJbq3jOyB83u1U53s3npBL9UJMHdXI4o8NXEH0PYhO1TbHLuUFdXgm7f24v6J/RBnMur+IVtLYswkOnTY704UQ7SMmXNdYNa/uQfnjsmEOd4kGavrecFxjdf1N1a3rKgGR7aX4KLsDu5jlB2vxsK7BuK8M9Nlx8YBkEziOL9XO9zz3s/uY3ZIjfcpc3ElwBzDSxR91MSdMdf2hTnOuYRWU/MEPD98u8o9d4xsqq6/csA51Or8GX3wl493uldDkIsxrg/ZnmWuBHj2yO6KS4ut+Pqg6mXI1NRtKqZxHV557Kklagb0GsKg1KsLOMfA9fZIaAH5oQqfPLUNrYxGzB7RXTqJY1QPn2T3+z+PlZQBzl7dNq3ifHp7AedF6PVNh/Hsuv2qenV5e5EodNTEHbk7Sp4fsj23HZYrd21RrKauv/LJdw3EE1/9hrc2H1GMMUpxB1AeUtW5dYJ7a/Om7j5pqevvTlWdzaHpDlZLinVMaomasUCGMMhdFNp2bYWcSb639ZSGKnywNB/zvfaSV0p2XWVA4xCGG4adgdIqqyTZDeSCwzG8ROEX6IdsNR++m6orVz5twWCs/+wgfvvmmN8Y0zktwacMUI49rvLXNx3WtS6gLYn2vIMVbAIc69hXTdTCqB3CYEgwSG4jCoKoeqhC597pkhUVAI9kd+FgOBzS5X3uumeQZHmf6xpWW0hNNLsDd1MXHLVDGAK5vch1eImC5x179FhuTM0xju4rw9ENRfjTqDNw3tjusjHGc11cz7gTZzIiIzleNvbIletRVymmKZW77mB5xzRXAuzaiMJ5Tm1DuGJtZRr21BIRgKZ7dT17PwKZgAY0JLsyM5l3bSzERd6rLVgFLLsyC4CzB/e/t45ARko8UhMbg6m/C44etxeVekC0ThppLr0gRHqT69VVKtdS17O8a582mDBnAIZN6SEbYzzvHIlWAU9deS6AxjtHuX0y0DY5zif2lFTV+5SfrrUGXVdLYqylZxjQNoRLr0lz4Yx/TGqJSJFSoutvqEKgy/t4j9X98B/5GHFmG3x2+4iALjiB9IwEO4a3Jd7uI4p2giCia590nztHH/4jHyO6t8ED4xqHSX30j3yMOLOtJO7MG9kD5TU23DBcOkxq4oCO+G7/SVw//Ex3+fd/HovDJ6tx3bAzA66rJYnWIwEG9FuZJtLxLzr7j4koaqkZqiA34zmQ1Rb2/XhcMjmt7Hg1Ll8wGJ/dPgJdkhOcF5wZfdwXnGfW7ZOstuC6ALgCsmfPSFPJrtZhDYHc7pub2xPxFpM+vxgikmUwQHaZr8690yHYRcnGEGVFNdixvgDnjsn0iTvzcnvinC5pyOna2r1T2a4TlZib2wvndmntLh8x8yzMze2JrK6tA6qrFNP+8vFOd2LsijFKMc0zAW6886R+uEOsxj/21BKRZqFeQxdQXm3h5/UF6NE6SXIbsU2cGfNye+KVa7P99q5494wA2ntA9Lrd98y6fXh+4wH22BKFmCgi6DtHHyzNBxwiRpzZRhJ7BnZOg8VokJR/8tRPMAnwqTtIQ125mLZwbB8kx5kxN7cX7hjbG7NHdMf3fx6LI6XV7h5gwBnTTlVbJT3DgPxwByCw8b7RGv+Y1BKRLvRc3qep1RbkLjiiXcD5ZzR9YchMScTc3J7ui8KexyZg2sAuOFJa406AAW0XAKVyf7f7AOC1TYdgNjIME4WS2l3Qmtp90WETfGLPjvUFki3MXXXtVt+6P2uoq5RED+qchjiTEf+X2xMLxvTG5y/uRPe0JNzqkejueWwCZo/ojmOn61QlwHIf6uXKgOiPf4ymRBRSgSzvc9ndg9yrLai94Ah2ER/+o+lk95OnfoLRLmKex0VhwZje6N6ulSTZ1XIBAOQvAkoXAJeKWjsq62xBvb5E1LRQ7L4Y7C5oSnUB5ST6g6X5sFsdQEMifHB7iTPO2QSfmHZ1TiYSLKYmE2C5D/VVdXZ8t/+k5K4WoJzsRkv8i+mktlWrVsjNzUVubi7Wrl0b6eYQkQbhWm1BLtn9eX0BRJv0ogCbAIuKHhC5C4DS7T6lC4BLaqIZKQkWvV5SIvIj0DtHSpNf5WKS5y5ogdZtKqY5bIK6mGYVYK23w2BrOgH2/lC/57EJ2H+iCn8a1QN3jO2N1EQz4kxG2AUhquNfTCe13bt3x8aNG7Fx40ZMmDAh0s0hoiBFcrWFD5bmw17vAAK8AHjf7ktNNKOqzo4fDpZKAr2nG4Z3h71hHUgiCj29dl8E9NkFTa6uXjFtx4YCiA5RdhiEmg/1N553BuJMRtwyugfyHxiHvYsmIP+BcTijbVLUxj+DKIqirkcMo7S0NJx77rnIzMzEs88+i7Zt2zb5MxUVFUhLS0N5eTlSU1PD0EoiCpYgiDAY4F5tQRBE2Ors7tUWLAnOngBbnd0dwNM7JeGKe7MhCo1B3Wg2YM6zuVj74k4c3F4iOUf/UV0wZEp3yUxowDlhzXMmdHqnJPfORVaHAINNcLdDtBiRYDGhxmqHxWiE2WSA3SHCIYr418YDeG3TIdRZBSTEGTXN/tUrbjH+EannHXdcZd6xp6mYFGhdV1kgMU2pvP+oLjhv0plY/fQ2SZxL75SEyxcOhijA3QvsinXmeBPs9Q6f51Fnc0Rd/ItoUvvcc8/h9ddfxy+//IKLL74Yq1evdj9ms9lw1113YeXKlTAYDJg5cyaWLVsGs7mxG/vkyZNo164dXn31VWzZsgUrVqxo8pwM6kTNg9oLDiC9MHgnqUBgF4Ar7s2G4BB9LgBKF6g6u0MS6G0aduVhUksUPeRij1J5sHUDjWmA7wdyPT/UuxJduQ/7rvZFIv5FdPhB586d8eCDD+Lmm2/2eWzRokXIy8vD7t27sWvXLnz77bdYvHixpE67du0AANOnT8e2bdtkz1FfX4+KigrJFxHFPj1XWwh0JrTcxDRbvR3WWrvk1p6tzo54kxGC1YG1L+yEYHUgwRz69WkZ/4j0F6pd0PSMaXLDHbTOS1Aa1iC3ioPnJDZXwh2J+BfRpHbatGmYOnWqOzn19Oqrr+LBBx9Ep06d0KlTJzzwwAN45ZVX3I9XV1fD4XAAAL7++mv07t1b9hx/+9vfkJaW5v7KzMwMzZMhoqig15g5vSemuS4CnoFeEEJ7o4zxjyj2BRrT5MqD/VAvt4qDi9KKDeGMf1E5UaysrAyFhYXIyspyl2VlZeHIkSMoLy8HAOzZswfZ2dkYPXo0li1b5tOL63LfffehvLzc/VVQUBCOp0BEUSaQDSNCPTEt1Ikt4x9R86UmpsmVB/OhXq/e3lDFv6hMaquqqgAArVu3dpe5/l9ZWQkAGDx4MLZt24avv/4aX3zxBbp16yZ7rPj4eKSmpkq+iIgAfWdCax3CUFZUg/Vv7oFBeldSV4x/RC2L2uEOeg5rAKIn/kVlUpucnAwA7l5Zz/+npKREpE1E1HKEYxvg9E5JzhnDMbv+DBHFMj2HNURL/IvKpDY9PR1du3bF9u3b3WXbt29HZmYm0tLSItcwImqx9J7E4bo4ePeoEBFFUqDDGqIh/kU0qbXb7airq4PdbocgCKirq4PVagUA3HDDDXj88cdRXFyM4uJiLF68GLNnz45kc4mIfATT28GElohigdZVHCIV/9QtEhYiixYtwl//+lf394mJiRg9ejQ2btyIhx56CKWlpejXrx8A4JprrsH9998f8LmWL1+O5cuXu1dMICIKJVfAdo0Z8wz03mtWhhrjHxGFU6TiX0zvKBYILj5ORLGGmy8QUUsVM5svEBERERHpgUktEREREcU8JrVEREREFPOY1BIRERFRzGNSS0REREQxr8UktcuXL8fZZ5+NnJycSDeFiCisGP+IqCXgkl5ERFGOS3oRUUvFJb2IiIiIqEVhUktEREREMY9JLRERERHFPCa1RERERBTzmNQSERERUcxrMUktl7QhopaK8Y+IWgIu6UVEFOW4pBcRtVRc0ouIiIiIWhQmtUREREQU85jUEhEREVHMY1JLRERERDGPSS0RERERxTwmtUREREQU85jUEhEREVHMazFJLRcfJ6KWivGPiFoCbr5ARBTluPkCEbVU3HyBiIiIiFqUgJPaSZMmyZZfcsklATeGiIiIiCgQASe13377rWx5Xl5ewI0hIiIiIgqEWesPPPvsswAAm83m/r/LgQMH0LFjR31aRkRERESkkuak9qOPPgLgTGpd/wcAo9GIDh064PXXX9etcUREREREamhOajds2AAAmD9/Pv7xj3/o3iAiIiIiIq00J7UuroS2rKwMlZWVkse6desWXKuIiKKJrQawJPl+r7bcXgeIgnxdIqJooSV2RWH8C3ii2DfffIPu3bujXbt2OPPMM91f3bt317N9RES+bDXy36stt9dpOEYt8O1Tzn9d3+9arb7cXg84bL51Pb8notgQihijKR6F6Hz2OvWxK4rjX8BJ7S233ILZs2ejoKAAZWVl7q9Tp07p2T7dcEcdoigSjUmmXF1rNfDtk8A3S4F3ZgDlR53/Zp6nsrwQqDoBfPeMb91vljrrej+/EGD8I4L+SZ8eMSaUiaOWurXlvjFNKXYFFf8KQxr/At5RLDU1FeXl5TAYDLo2KNS4ow5RCGi6DSU6g9nIewBLYkOQtToDn6vMVgvs+gjof5m0rrUayFvmDIg9xwCXPAf891Zg4lLg53eaLp/SsGLLT280lk1+Glhzp2/dycuA/NeB8+8E3r8BOLC+8XmMuAsYfa8zODdV3nMMcOUbwHvXSev2HANMX+V8Xk3gjmJEQbLVSmOJUoxRikd1FcDWl9TFHlGQxhi96qqNaVOeBT65XSamPQ0YjF7xbxmw5i7nMa56E/jPtU3HriiOf0FtvsA1aYlaoGB6ToPpDTh9xPn/Ybc6A+KB9cCys53/bnvLeQFqqvzpAc5gP/z2xrJnzpGv+8y5zgR676fAJf+UPudB1zmD8SXPScsHXgMUbHZeTFwOrAcg+ta95DlVAZ2IgmSrUX/HRSkerZ4DnH+HutjjHWP0qqs2pj09QCGmnSMT/85tTDbNCcCkZY2v24H1gGBzJr6ecm52xq4pz0jLFeMfwhb/Ak5qU1JSMGXKFMyYMQN333235IuIYkygt9/U3p4/XaB8YVAb1J/+g3KSKRdMgcbg61n/wHpAsDt7LSR1b/JNVHuOAfpPBf57m7TuT284X4P/3iot3/YWkDkE+HSB9Bgw+Nb9760cU0stW7jGnFqS1CWI/uIRABjNwKQnpedTSuQEh28y6O9Dr5q6gDOmnToocz65mHaz886YZ5tdbfNOSKe95DzG/+5qLOs5BjBaGntyXba+5Ixdn9whLVeMfwhb/As4qbXZbLjssssQHx8vGVNbVlamZ/uISE/BTA7w7mU9XaC+59TVcwD4XhiUPskPvAYo3ApM9Fg6sOcY5+1C7yRTLpgCjcHXs37PMc42rLnTq+4rvonqxKXO1+HAeufP3bXb+e/Aa5yvhZryKc8Cm571rXtgfdjG1BJFXKB3ePQYc2qrdSaI3h+GB1+vkJDK9E5Oe8k5VOB/90jLlRI5o8k3GfT3oVdNXcAZ09r0kDmfXEx7CTAYpG12tc07IXUNz1ATu6I4/gW8pNdrr72mZzuIKFCql5tqCPRK48SO5vuO8Tqa7zvm6mh+Y6IKAO36OC8Wy/o3nsvVQzr5aectL5dLn/e9MCh9kt/2VuP4LJeJS6VB0zXOzDuY+isXBWmQ9Vd360vOMbVA4+s2fZVzLN7Ie9SV2+udvdPedT3H8RE1F4rj6J+SHxvvijuu8aKuD85K8chfXbly77HxnvJf940xSr2Ttlpg8wr9Y4yWuqE83ye3O+M70HTsiub4Jwbo999/V/yKZuXl5SIAsby8PNJNIdLGWi393lYritYaUVz3mPNfUXT+u22lb3l9lfP7h1NF8c2poni6wPnvm1NFsa7C+e/DqY2P15ZLy1zldqsolh6Ullmrfet++bDz3N7lZUe82lEoX/bmVFE8uc+3/MuHRbGmTN1zViq31Tmfs5Zj1FfJ/y68fydK5bZa5boq6BW3GP9IN2rjUUWx8t+xmrihFI+UYoxcuVwsUYoxSvHIFSv1jjGBxKNQnG/dY87HtMSuKIx/Aa9+YDQaYTAY4Ppxz1UQHA5H8Nl2iHD2L8UE2V7WJwObjetvFn/PMcAf3wUqCoFnBzaWLzwI1FdJe1kXHADiWklntt6Wr26GrqsccPYGeM4s1rL6gav87EudbfF+vfRYDFzpGBHE1Q8oqqiJR65VRQDfWfUAMPVfQPdR0js8t+U7l3xK6wr8c3Bj+cJDQH2Fc1JTU3Xv/MU55tSz3DXTPpjVD759Ehi1ABAd+seYUG9wEOObwWiJWwEPP/AeO3vs2DE8+uijmDx5cqCHJGp5grlVB0iHAyw721nmum3vKnddCOSGCUx7yRmkfcZcWXzHZ8ndftN6e/7bJwFTHDDy7sbbTuZ4AKK0zJLonKBlSVQo9wq+ru/VlpsT4KOpYxBRw0oCTzUdj1wfiF3jPScva4xFrgmY78yUHltuyJF7vKjMmFPvugDw46u+5QfWA18vcSalTcUYpXg08u6Gx7zoEWMCiUehOl+MC3iiWFpamuSrX79+ePHFF/HII4/o2DyiGBTMJgJyS14pTcYC5Gfj5twMVBbLTLCa6jvBSsvkgE9ud46NGrXAmaCmdXFePPZ+6lyfUE1C6rowyAVZrYkqETVN7xUGlFYSAOTj0dQVAERpUqplAqYek5V6jnF2DOQt830unv+6+ItHFNUCTmrlVFdXo6SkRM9DEkWvYHac8V4Ky9+SV0rLWF36nHNpFu/ZuFtfAlI6Ap/ObyxTuojIJarJ7X3Lpq8Cugz27WV1JbCeQwEAJqREeoi2HbBE0Rm75FYSmPaC81/veOSw+saebW85P6h7x5iCLc6EWU08kqvrr3zUgoa7RoxBzVnASa332rRz5szBsGHDMHXqVB2bRxRmeveyKi3w7d376m/JK6VlrAQB+O5pdT0VShcRuUTVHA+YLOp7WXmRINJfsAmplnikdgOUskPO/3fKkrnrUy/fQxrsHR6leOR3eJLCXSKuNNLsBTxR7IYbpEtjJCcnY9CgQbjmmmtgsVh0aZyeli9fjuXLl8PhcOC3337jRInmSPXSVv6WvFIxkUBpq1ZAfkKE0paCchMl7t4LJKQC785sejKW63x6TLCikLI6rIgzxaku9xbsBK+g4h8nquhLzevpOW5V6zarTU3Q0rKVqVxdrfGoqQlW1OyFM/4FnNTGqoAuDuEO6jxfAMdQmZBqTVS9LyKTnnJeQJRWEpj+NlB5TLqSwG35zp6Q5I7APwd61F3lm+jeudN3H3DXZKzvnwtuNi4vImGhFKhz3sqBXbC7vzcbzdh6zVZVx4zY6gdq/660rGDRUmeXuyeBang9g0lIXTGmskgaj27fDpz+XWaFgYNAfaV0hYG7dgKlB9StJMDklRD5+BfUmNrvv/8ec+bMweTJkzFnzhx8//33wRwuOoVi1xM9dkjh+RrL1W7VqnhL7Xf1O2M9m6U8xtXfjjOdBwKfepR7byIQyK26poYDcJhASFkdVtnyOFMcct7KwcA3B2LgmwOR8+8cAIBdsMMuenx5BPioZKvR//a1v7pH8xvHX8ZyPNJjOMDb052vkeLWqR6TQN07YD0trXvpv+Tj0U9vKOyAJbcd6iu+dV0rCWiNR9SsRGv8CzipfeeddzB+/HiIooiRI0fCYDBgwoQJePvtt/VsX2R5B/Wy35WTIu9A7Zr44133tEzd8kKFukcUgl6B+vOVF6o/X6gvWnJtU3sMxdfCz+oAcvt6y5U/c45yoppzM3B8l7oxrrZaIE/ljF4tY1ybmoxFIaU2eA98cyCGrhwKwDeAxySlWe5yf1ef3A4Mvz24ulOelf7Nlx1WiIty8U8pPugR/+SOoVBXrm2uunKTQJVeI8D5GiluneoxCVRpCT7B5oxroVhhwN9KAtSsxFr8C3j4wYABA/D8889j1KhR7rJvv/0Wc+bMwa5du3RroN4Cuv3mfYs42DFJWuryfIGPT1VanPuOHc5bcq0ygH8Oajzf9JXOdRP1HlPGMa4xz/vWWbwpHj/M/AED3xwoCdoJxgRsnbVVUm42mLHt2m0+dV3lakR084Xyo42JFqD8d3Xv7867JmrqLjzk/BvwrHv3biA+Vf8xoNES/5SGA9yWD5QfA9K7Nd7617KpifeY2kDikdYNULjFc7OkduhANMe/gHtqjx49ivPPP19SNnz4cBw7dizQQ0YnS6IzSHgadJ1zFuikpxrLDqx3jpfyqXstcHK/tKfvwHrnUkxydU/s8V3nb+As5+0sz/oH1gOC3feW08BZzp5jn7o2hVtZW5yf0n3KNzsDqPcxpjyjvq7P+a71revZDs/6Ss9v0LVAyW8yPadTfXtO3b0aC6Tl+a8Bnc5Vt+SVXr2sSrN02fsaVZR6Jbx7HhyC9l0TzUYzzAaPL2PAe9+Ej622MUFykfu76jkGMBjV1zWafet+fKvz78fnb/4633jpL/6dLlCoKxf/tsrHv8If1ce/wnyZujJtm6owHGDbW0BmjrRX9tMFzp7aYJa80hKPtK4wwJUEYlqwQweiOf4FfNT+/fvjhRdewNy5c91lL730Es4++2w/PxWD5IL6T2/I73piMMjUfVNhhxSTuroAsO3fznLP+u5dVu6Ur+tzPpnxUko7siju6mIBPrlDfV2f8yk9P3+7yHg9P7nXyDshdfVUeCek/sq17Iw1+l5nudKYMm8c4xp1lHokXEHd1SthNpixdZa6yQyezEYzIDj/bzQYUVxdLDspQu3s34hwzcBX8/cjCtLb14HUBZy9hT5/82/oEP807EilS/yTaZvDazhAU3HqveucGxe4tqCPph2wGLtihlyM8Y5zQGPvqyuBDUYk41/ASe3TTz+Niy++GMuXL8eZZ56Jw4cP48SJE/jss8/0bF9khTuoa0nCeL7AElKtiWogW7VS1NMrqHsGbwAwGo2wOqyqA3jUJrRA45haoOm/H3u9s7cwmLp1Fc7b37Eej5TqfnK7cziAmtfItbpAQqo02WyB256SOlo/qHvHObOgPR2MyvgnBuH06dPiypUrxSVLlogrV64Uy8rKgjlcWJSXl4sAxPLycnU/YK0RxXWPOf91fb9tpW+5rU4U6yr0r8vzqT9GfZXX765a+q/acmpW6u31suVZb2SJA14f4P7KfjPbpzzrjSxRFEUx+9/ZYtYbWe6v8946T/G4SuXB0By39DyO2r8fW21wdW21zSMeKdVd95jzMcYjCpJSjPGOU0PeGiKKonxMa67xT/NEMbvdjqKiImRmZvo8VlBQgE6dOsFsjt6xYlyntpmejxOsWjx/t7LkeirUTHIwGoz4/PLP0bFVR03n01tEJ4qFW3OIRy15cwnSTShimtLELVddz+MaDUb8b9r/Yir+ac4+ly1bhl9//RWvvvqqz2N//etf0a9fP9xzzz0yPxnD1K4DqmVMUiDjl3g+jvEiRaEaUnDp6kuxeeZm2fNRCDSHeMThAC2eUtJXb69HvNdYZ7VDBwD9xr5G5dABHWhOaletWoV3331X9rGFCxfiqquuan5JLRFFDX89BFrGiQUb1ImIAO2TseR6WdUmr8GOfW1q4pacWIp9ml+d33//HX369JF9rE+fPjhy5EjQjSIiUuLvYqGGAKFZB3UiCg29JmPJ9bI224lbYRbQ4NdTp06hTZs2suVERHpRuohovQBwSAERBSvUS2Fp0ZJ6X7XQnNQOHToUK1euxG233ebz2Ntvv40hQ4bo0jAiIq3rxnJIARFpIRcH9BripAf2vmqj+bdx//33Y+LEiaiqqsL06dPRpUsXHD16FO+88w7+/ve/N691aokoLLRcROQIEPwGejktLdgTkS+lD87BDHFy8U5ITUaTT7nZYJat21TyqvRcWjrNSe2IESOwatUq3HHHHXjwwQfd5WeeeSZWrVqF4cOH69pAImr+tI6T9bkAGIyKAZ2Bnoj80WOMq9rhAPX2ep9yJq/6CajffPLkyZg8eTL27duHkpIStGvXTnbyWGFhIbp27Rp0I/WwfPlyLF++HA6H9j2LiUg/wYyTbWqSF4O9PMY/In0EOxzAezkvQDlJZTzTTvPmC1qkpqaioqIiVIcPSEwsPk7UzGlZONy7BzfOFCc7yas5a1GbLxCFSUlNCTKSMlRtThBnjMP3M76XTTT5gTq0Qrr5ghYhzJeJKMqFepwsLyJEFKhjVccw96u5WD11tboxrhziFBNCmtQaDIZQHp6IohjHyRJRtPD+INw5uTNWT12NOnudpjGujD3RLbRrURBRi8ZxskQUDeQ+ZJuNZtm4ww/TscsY6QYQUWxTmqHrj9lohtng/DLCiEtXXypbjxcRItKL60O2+0sI32YJFB4cU0tEQdEyzIDjZImIKFSC7qkVRRFFRUWyj73wwgvBHp6IoohSr6x3D4hDcC4d5dkjazaYOU6WiIhCJuCe2srKSsybNw/vvvsuzGYzqqursXr1avz000949NFHAQAzZszQraFEFHlqt61ljywRRQu7YHd+wPaajGo2clpRcxPwb/S2226Dw+HAzp07cd555wEAhg4dinvvvded1BJR86NqOS5RYI8sEUWFzw59hpyOOfyQ3QIEnNSuXbsWhw4dQmJionvpro4dO+L48eO6NY6IIkNroGcPCBFFq4ndJ+KD3z5AkiUJk3tOljzGhLZ5CfjKEx8fD7td2ltTWlqKNm3aBN0oIoostZO/uBwXEUWzLUVbkNMxB1f1vSrSTaEwCHii2JQpUzB37lyUl5cDAOrr67Fw4UJcdtllujWOiCJHzeQvLsdFRKGmNEG13l7fZPl5nc5z300OZPlBii0B99QuWbIEN9xwA9q2bQtBEJCcnIypU6fi2Wef1bN9RBRiantUOfmLiEJNLpb4u3OktlxpowVqXgJOalu1aoX//Oc/KCkpwe+//47MzEx06NBBz7YRURioXtGAk7+IKMSU4pHS7oRqyz3H/FPzFfRsjoyMDGRkZOjRFiKKELkVDTj5i4hCxd/dHTUrrBDJ0XSVGjhwoHtsij8//fRTwA0iotDQMsyAk7+IKJS07ERIpJampPbOO+8MUTOIKNRUr2ggCpj04STkz8qXPQYRkRZKH4aVhg7I8b5zZDKaNJXzTlPLoOm3fN1114WqHUQUBkoXEe8LgNEQ9A7aRNTCKCWvasftu3jGI6PBqHjnqN5er6mcd5qav4A/urz55puKj1177bWBHpaIdMAVDYgo3PzdDVK1E6HGeBRvjpc9jlI541nzF3BSu2zZMsn3xcXFKC0txYABA5jUEkUYVzQgokgIZkiB0WBkPKKgBJzUbtu2zafsiSeegM1mC6pBRKQPrmhARNGIk1EpVHS9ot1zzz3o3LkzHnjgAT0Pq4vly5dj+fLlcDgckW4KkW64ogGpwfhHkeb9gfrS1Zdi88zNPvUYiygYBlEURb0O9t133+Hyyy9HcXGxXofUXUVFBdLS0lBeXo7U1NRIN4coaEpj2Aa+OVDSUxtnjJNd0YCin15xi/GPQs07HsWZ4vDt9G9lk1V+oCY1tMStgHtqvdesrampwcGDB/HEE08EekgiCgBXNCCiSPu55Gd0T+2ueDdIDhNa0lvASa33mrXJycnIyspCz549g20TEXnR0qPBFQ2IKJxsDhse2fQIDpYfxK1Zt+Lmc26WPM6YQ+EScFLLNWuJwkfL7jtc0YCIwsloMOLKPlfird1v4co+V0a6OdSCBXw/8o477sB3330nKcvLy8Ndd90VdKOIyJdrmIHryyE4J/2YjWaYDR5fXNGAiELIeziByWjCjH4z8NHUj9A6oXVkGkWEICaKdejQAb///jsSEhLcZbW1tejevTsnihEFQWmIgNzEr+9nfM8JGC0AJ4pRtPG+c2Q2mmWHPBEFKywTxex2O4xGaUevyWRCfX19oIckInDjBCKKfj7rYAvKdYnCJeDhB1lZWXjttdckZa+//jrOOeecoBtF1BIozQgGfIcaABxmQERE5E/AV8UnnngCY8eOxXvvvYfevXtj//792LJlC9atW6dn+4iaLbWTv7hxQvMh1NfDGB/v/peIqKUIR/wLuKd28ODB2LVrF8aPHw+j0Yhx48Zh9+7dyM7O1rN9RM2a0uQvT4IoYNKHk2R/nglt9BIahmIJHkOyjPHx2Judw4SWYpZNsAHgnSPyL1LxL6h3YZcuXbBw4UK92kLUbGntUeXGCbFDqffBFcDP+lHawy7a7d6HIIpa3rHLYrRwHWxyi7b4F3BSa7PZsGjRIqxcuRIlJSUoLy/H2rVrceDAAcybN0/PNhLFPNWTv7hxQtTSGrwBQBQESX17aSlEhwP20lKY27aVHJcoGskNk4ozxWHzzM2ydal5ipX4F3D3z8KFC5GXl4cVK1a4t8vt168fXnjhBd0aRxRrgp38ZTQYuaJBlPJ368zV+yDU1LjLbMXFEEXR/XN7sgZiX+4FgM2GfbkXYE/WQA5FoKihJXb5q0uxT+vQAXf886hvKyqKSPwLuKf2vffewy+//IL09HT30l5nnHEGjhw5olvjiGINJ381D0q9Eu7gXVcHY8Ma3baSEknvw97sHIh2O0SHA3A4YCsqdvdi2EtLsS/3AvTeuIE9tRQxcjFGy66F1Dyo7X11lJfDlJYmSV5d9W1FRRAdDthKSmDJyIh4/As4qRUEAUlJSZKyqqoqpKSkBN0ooljmvX6jWfD9M3NN/sqfle/zGBPayDPGx2PveUPQ+9tv3GW2EyeUk1ebDfvGjEWvz9c2BvCSEuwbMxaGOIv7GOa2bWEwmdwB3XUuolBQ+oCsNBxKTeyi2CSXwKodOmBKS2tMXouLYenY0Sf+7b9wnDT+NSSw4Y5/Ab9jx4wZg4ceeghPPPGEu2zJkiUYN26cLg0jimaB9KZy8lf0kQv0ot0Og9kMURDcQd9f8mo7cQL7x16I3uvXSXofzBkZPgEcAAxmJgqkL7XJK9DY++qzeYIf3rGLKx1Er0AnbtlPnYK5TRvn/0tLJUMHJMnrRROkyevJk9h3wRjf+CeTwAKhj38BH33ZsmW45JJLkJGRgYqKCnTp0gWZmZlYs2aNnu0jikpabtVx8ld0aKqnwjWkwGA2O3slbDYItbW+t868grelfXvF3gfvAC7U1zvPxSEHFCCtQweC6X1l7Io9gUzcshUVwdKpk7qhA97Ja7t2URX/Ak5qMzIy8P3332Pr1q34/fffkZmZiZycHJ+tc4linVLwVrpYyPXIcvJX5DXVU2FMSPDpldg7dBgMFguM8fHo812e6uANyAdw73+JlERi6ABjV3RS6n1tcuy/59jX48eVe18nXBzU0IFoin9B9wPn5OQgJydHj7YQRSUuxxVb/O1a491T4ZrkZSsqgqlNG7+9EoD64A0wgaXg6DV0QIlnAms0GDlxNYopfSCXHft//Lj2iatBDB2ItvinKam97LLL3Mt3+fPhhx8G3CCiSPEXvNVcRARRYK9GFJAMKfCepavUUzH+IhgsFhgsFpy1+QfZoB5twZuav5D0vhqNmj58M3apJ/eBWksvq98P5A29r5Vffw3HqTI4KsrR9rrrNIz9L8H+seonrqodOhBt8U/TX0hWVlaImkEUeVqXtOHkichScwHwCfYalpjxDurRFryJPGlNXuUwgVVHy2Qsv72sfuoqjX1tNXSo9IO6zQahrk7F2H/1E1djeeiUpqvwww8/HKp2EIWV1nGynrjGbHRQ7JH1WDfWmJzsM0tXTU8FJ3RRNNMydEAOY1Rw/E7GktkGVmlrWH91Ze8oTZyEftt+8h37P2RoQGP/Y6X3VYugupa+//57vPHGGygsLETXrl1x3XXXYdiwYXq1jShoWidbKPHuBbl09aXcJjKMmpoQIXv7LfcC6ZACmVm6gHxPRSwHdYptoii6h/lx6ED08txF0NiwZr+9pASiKEo2Z/HcGtaYnNz44bthx0GhthbGxERJXcUx/l996U5EJeUBjv1vjnEu4KT2nXfewc0334wZM2Zg5MiROHz4MCZMmIAVK1bgj3/8o55tJGpSqNZp5OSv6CA7IaK4WL5HtmHTAzVDCtgjS9HAM5a4EloOHYg8zw/TQGPyZzt+QnkpLFGUXUll34XjfHtZRRHGxMSAxvgD8neammPvqxYBJ7WLFi3C//73P4waNcpdNmPGDMyZM4dJLYWdXus0ckmb6KU4IcK7R1Zm0wOlIQUtJdBTdJOLX3GmON4NijDvYQZNLoVVchL7LrxQfoyrdy/ryZPYN1ahrooP5C4c+y8VcFJ79OhRnH/++ZKy4cOH49ixY0E3isifYMbDKuE42eig2DNy4oTyZggqLwAtPdhT5GlaYcURpkYRgKaHONmOH296F62MdjAYDO6hB4B8byoA53AoFXX9jfHnnSZfASe1/fv3xwsvvIC5c+e6y1566SWcffbZujSMSK/xsEo4Tjb6NNUzomYzBAZ6irRAhkNRZMkNcfLecQvQvouWUpmWukofyPlB3VfASe3TTz+Niy++GMuXL8eZZ56JQ4cOoaSkBJ999pme7aMWItitH/0JdrIFhZe7Z6TY/yLhACd5UfgoxYZ6ez3izdL3Wqi2raXQcE3sUhritH/8RTCYTDCYze6YpHYylpZeVn4gD17Af03Z2dnYv38//ve//6GwsBAzZ87ExIkT0bp1ax2bR7FKywUA0GfrR67TGFvkbvcp9oxomBBB5E1rPNKaqOqxbS3XvQ4PuSFOxoSExjVfVQxxAqB6MpaWXlZ+IA+e5r+au+++W7a8uLgYP/74IwDgqaeeCq5VFFO09rLqvfVjU+Nh5TB5jTxjfDz2DhmKszb/EFDPCC8ApFYg8UhLohrMtrVcYSW89BjiJPd/ig6ak9qnn34a/fr1w5AhQyCKYijaRGGkpQdD6xhXtRcAPbZ+5HjY2OK+3Wezya+7qLJnhEgtrfEomETVH66wEnnuNWYDXPOVopfm39aSJUvw+uuvY8uWLbjhhhswa9YstG/fPhRtIw9yCWUoElLAf0+F3r2sTeF42NjX1O0+R1kZjB07AvC/F7n3/6ll0zqkINwYu6KHZMfB48fd61tLVi7gEKdmQXNSu2DBAixYsABbtmzBq6++iv79+2P48OG48cYbMXnyZJhMplC0U1FeXh5GjhyJkpIStGvXTvfj65E4BlsXUO4NDUVC6q+nIpSTHLj1Y/PU5FqP48Y7hxrEx+OszT+wZ6QF02sylh6ro8jxTlRNRpNPOWNX9FFc35pDnJqdgK8e5513Hs477zw8/fTTeOyxx3D55Zfjiy++wJgxY/RsX5OWLVuG7OzskB1fr57MQOt6lmtJMsOdkMpRcwEAuPVjS+D3dp/XUAP2jESPcH+o12syllz8UxuPtCaq9fZ6xq4o5xl3bEVF2D/+Ig5xaqYCzmoqKyvx9ttv47XXXsOxY8dw//33Y9CgQXq2rUlr1qzBiBEj8PHHH4f0PHokjsHUjYUlX/S4AMjhRSB2KG6c0LCdra2kBJaMDHddf0MNeFGJDpH4UK/3GFd/E0mV4pGWRFVpqANjV/RwxRPRaoWlUycOcWrGjFp/YP369Zg1axa6d++Ob775Bo899hgOHz6MRx99VPNyXs899xyys7MRHx+PqVOnSh6z2Wy49dZbkZ6ejjZt2uC2226D3d4Y0ARBwPPPP4//+7//0/oUyIvZaIbZ0Pjl2VPhWS5X5tnLuu3abdh27Tbkz8pHx1YdZRNVXgCaL9ctPmN8vPv/e7IGYv+48c5hBmPGYk/WQHcdgJMwYoErmXR9OQSHbLledfUmiAImfThJ9jGleMQ41TwZ4py/P8ad5kvzb/bCCy9E3759cfvtt6N169bYvXs3du/eLalz++23qzpW586d8eCDD+Krr75CYWGh5LFFixYhLy/PfeyLL74Yixcvxl/+8hcAwKpVq3DJJZcgwWOLuebOszfUM8ls6taZUl1/t/3leiq45is1xT3MwGM/c9uJE9g/9kLe7iPdqR7iZNDcf0PNTE1+PhxlZWg1ciTjTjOmOakdNWoUDAYDNmzYIPu4wWBQndROmzYNALB9+3afpPbVV1/FsmXL0KlhAfYHHngA8+fPdye1v/zyC/Lz87F69Wrs2LEDM2bMwBdffOFzjvr6etQ3XEABoKKiQlXbPAWTOAZbF1BOPkOZkCpNVpPD5LXlkmyccPKk7MYJlvbtebsvQvSIf+EWzjGu1HKUvvoaqtatQ7vbbkPGvLmMO82U5qR248aNIWiGVFlZGQoLC5GVleUuy8rKwpEjR1BeXo60tDQsWbLE/Vhubi5WrVole6y//e1v+Otf/xpwW/RIHIOt66rvTSlAMyGlUHMls8FsKUmhF2z8A8L3oV7rnSOAY1xJHaGmBtV5eQCAlAvHRrg1FEoGMQp2UHjkkUewfft2rF69GgBQUFCAbt26SZbpKikpQfv27VFQUICuXbuqPrZcT0VmZibKy8uRmpqq6/Mgakn2njcEvb/9pnFCmJ9Zxd7b4ZI2FRUVSEtL0xy3go1/4V79gL2pFAoVn3+Bo3fcAUtmJnp+8TkMBkOkm0QaaIl/Udl9kpycDAAoLy93J7Xl5eUAgJSUFE3Hio+PRzwvpES6E61WGOPjsf/iiXBUVuKsvG85zCDKBBv/9LgbxDtHFGmVX34JAEgZN44JbTMXlUlteno6unbtiu3bt6Nnz54AnONuMzMzkZaWFuHWEbVMkvGzJSXuXXl6ffapuw6HGRBRNBGsVlQ1DJtMGXdhZBtDIRfRK5Ddbnd/CYKAuro6GI1GxMXF4YYbbsDjjz+O888/HwCwePFizJ49O5LNJWpxPNee9bsrT1wcen/7DWcVE1FUEaqrkTLhItT9shOJ554b6eZQiEU0qV20aJFkEkNiYiJGjx6NjRs34qGHHkJpaSn69esHALjmmmtw//33R6qpRC2S5xa3kl15iouxf9x4xfGzRETRwJyejs6LFkEURQ49aAEiunjfI488AlEUJV+u1RUsFguWL1+OsrIylJWV4Z///CfMQdzaXL58Oc4++2zk5OTo1HqilsG19qwxPh51e3/D0XvugaVjR7/jZym6MP5RSyQKgvvDNhPalqHFrEg9b9487N69G1u3+i4LQ0SNBI/Z8u6xsyUlAICEs/qg0+LFADh+NpYw/lFLVPvTT9g3chSKHgluWTuKHbwqEZGE7NjZMWMla8+6hiJw/CwRhYv3GP+myuN69sRZWzbDfupUJJpLEdBiemqJyD9XD60rYe27fRt6ffE5YLGg98YN6Lt9m08iy4SWiELBMx65uD5we8cdpXJzejr2ZufA3KZN6BtMUYFJLREBkF4Yfs0aiD2Ds2Hp1IljZ4ko7JQSVdcYfxfb8eOS8sqNG1H+6Weo379ftj41bxx+QERurguAKSUFXZY+AYBjZ4kodOSGDoiCAIPR6J7o5d61sLgYosMB24kTMKWlwRgfD0uHDrAVFTnLi4rQatiwxvW0S0vd62l7rtLCD+bNV4u5Wi1fvhzLly+Hw+GIdFOIooZkQ4WTJ90XgD7ffuN+nGNnYx/jH0UrybKBNTUwJiXBYDQ6E1VRlB3jv/+iCei37Sff8omTZMvd62k3zAmg5ssgiqIY6UaEU6B7qAOAYHPAaDGpKg9VXZ6P5wv2fEJ9PWA0A4JdcsEwtWuHzo//DcceuA+OkycbJ4U149cims7nTzBxS6/jxOJryvPFxvmqt+ajVc5gAPCJR3FndoOlQ3sAgL2sDPX7DiK+dw8Yk5IaP5CrKDenpzvP3xD/mvPrGQ11tR7DHy1xi0mtSqJdgOgQYTAZYDAb/ZaHqi7Px/Ppdj67AwazCUJdDUzJyQAAR2U1DJY4iHYbTMlJAACh3gbA2Lxfiyg4X1MindTG4mvK80Xv+QABxngLAMBRVQOD2QLRWg9DvMWdkLrLPeKRZ+zyOa7K8ub4eobjfLES/zhRTIOTr/wCABCsDveXZ7nzj1VdXQAQBdGnTK6u0jH8lYk233Ktz0O0C02ez/U8tLRNS7m/59HU+Zp6Hj71/TyPYJ+f63l4v3ZKz0P2ddb4PPy2+dVdAABDXCJO/OtF1O39DcbERJx8dReMCQnuugaTKSTPQ83rqep5eL/vHaJsuc+x/TwPNedr6nmoPUYsYfxj/NMr/hlMJhyYNBn7L5oAg9GIk6/ugsFsxsHLr8LeYSMhWB0wJiS445HkeTTELp/zNZT7xA2v+nJtVoobTT0PT3rEDbnfh6bXmfGv5YypDYZoF1D903FYj1SiemsxAOD0xwfQ+tKeAOAuj+uZBkubRFT/WOy/7o/FaJXdEUKtDbU7S51l206g1cD2OPaXTT7HlRzDaHCW5x8HhMaLiHfdNjP7Qai1NZabDWg1sIPq5xHXvhXqD1fAXlIjqS85X8PzsJfWov5geWP5thNAQwBS+zzk2gEAxuQ4n+eRnNPJ+TvZWqzctiaeh8/5tp1AYt901O4s9XkeSm1zNlDd86jZcRIZNw2QvP6tcjoCgM/z8DlG/nG0GtxB0/MoenwLWl/eCxBl2uzVNuvv/WBM6+zz3pCrq8fzOL3mICwdkuRfzyCex+mPD6D93YNgPVzR5HvcmByHxH5tfJ6HwWxETf5x/21r4nm4z2doKP/pBOAQALOh8Xk0/L1r6a2IFMY/xr9QxL8eH/8XQGPcqPn5FDo+8C+c/viA9G8wxPFPKW7I1VWKf3rEDUndJp6H0usc1zOtxce/6I+oUaJy3RHnvxsLkDSwPSxdk5E0sD0qNxa4y82tnZ8oKzcU+K/b8LgxwdJY9tXvACB7XMkx1je0Y/0RJA1sr1g3oU+6tM1/yND8POK6pfgcW+55wGyUln/1u9+2yT0Ppeet9Dxc3yu2rYnn4XO+r36HMcEs+zyU2qbleZgzEn1ef6Xn4XOMhnNoeR6WrslI+kOGz+9b6XdibpOoqq4ez8OYHq/8egb7PFonqHqPJ/RJV3weTbatiefhPp8rDqxr+Hs4x+N5NPy9xwrGP8Y/veOfaLdBFMXoiH8ycUNr/As2bmh5HoqvczrjH3tqm+DqpXCUWwEAjnIran45iYybz0HNzyck5fbSWlgLKlXVtZXU+NSt3nZCtq7i+crqVJ9PS92an0uQdG4GarY3fYzqbSdU11U8n8Y2qz6fwvNQ/J2cVP/70/r8Wk/q4fM+knsPaHm/KNWt3l6ivc0qf3/BPo/qbSeQMrSzqrbp8TwUf3+nfH/X7vfyjhJV73u556Hl/RILvbWMf4x/Qb+eO+Tjhr3MBmvBqZiPf3rEDS3xT5e/h2Yc/6I3mkYR16cLl+rNRTCYDJJyU1qc5FOSXnUjdj6jhmNoqavH8wuibXq8RjHx+wvT+aK5bQEdI4zv5VjprY253yHjn2JdPV4jzc9vS3CvUbN7v0Tz82sG8a/F9NQGsk6jaBecn+AqbYDR4C5vNbgDarZJy1NyM1Hzc4nudXk+ni+azxfNbYv28zkqbaj5+QSSzg19by3jH88X0fNtb+bPr5meLxbjH5f08kOwOmCMM6kqD1Vdno/ni+bzRXPbov18ah8HIrOkVyy+pjwfz8fzxUbb1D4OcJ1av/S6OBBFs73Dz3fuqGOzATYbEB8Pg9kMg8mEszZ9F+nmkUaRXqeWSA2fuGOxwGCxODdyaYg7e4cMxVmbf4hwSymWaIlbLWb4AVFz5rl/umizuS8gtuPHsf/Ccej9xefc+5yIQkaor3fHHXtpKfblXoDeX30piTsAcNbmHxiDKGQ4UYyoGXBtd2uMj4dQXY1948bh2P0PwNKhAwwmk/vC4qpLRKQnY3w8yj/5BKdWroS5bVvZuOOKPYxBFCrsqSVqJkS7HQBg6dABZ65cCXO7dgAAg5l/5kQUWqLNhhPLlsF+ogRtZs5k3KGIYE8tUYxy3c4DnMMMRIcD9pISAIClfXuINpvzluCPWyV1iYj0Vv6//8F+rAimNm0Ydyhi+FGKKEa5hhyIdjtEhwOw2bBvzFgYTCbnxIwft0rqEhGFSqthw9Dm+uth6dKFwwwoYlpMUhvIOo1E0cZzQhgcDnfiaisqwv7xF6H3xg2cEEY+GP8o1CwdOqDDn++NdDOoheOSXkQxZm92Ds76cSv2DhsGobIKcWeeiZ5rPsGerIHou31bpJtHIcAlvShaiaKIsrffRuqECTC3aRPp5lAzpCVucUwtUYxxTQhrM+taJJ13Hs7495sAOCGMiMJLqK+HwWBAygUX4ODkKRDq6iLdJGrheBUkinKewwhsJ044J4SVliJj7v+5H/ecmMEhB0QUDq5x/Wf9uBWpkybBmJAQ6SZRC8eklijKyU4Iy72AE8KIKOLcd46uvz6yDSECk1qiqOU5KaxxQlgx9o8fzwlhRBQRkjtHDUsJ2o4fR1yXzj6PE4Ubk1qiKOV5a08URZQ8/zzaz5vHHcKIKGLk7hztv3Cc7J0jonBjUksUxVy39gwGA9rPm+f8PyeEEVGESO4cnSjB/rFjeeeIogZXPyCKIpJdwoqKnLf2TpyQPM6deogoUjwTVkv7DN45oqjCLh+iKCJ7a2/shT639njhIKJIqf7+e5g7dkR89+68c0RRpcW8G7mjDkUrzwlhQnW1x629E9g/9kLe2qOgMf6RXkS7HcceeAD24yfQZ/MPXEqQokqLGX4wb9487N69G1u3chA7RRdX76wxPh6Hrroav55zLsre/wCW9u15a490wfhHeqn88kvYjxXBlJYGg8UCgHGJokeL6aklimauCWHdVvwL9YcPI/XCCwFwUhgRRRdDfALievZE6oQJTGYp6vCKSRQBkrUei4vdu4TF9+qF+F693BPBeGuPiKJJypgLkHxBLkSbLdJNIfLBpJYoArhLGBHFEs+x/8b4eBji4iLdJCIfTGqJwkh2l7DiYuwfx13CiCh6eW4Gw/hE0arFTBQjigaek8IAoPaXX2Dp2JETwogo6rnG/jM+UbRiUksUJq4xaK4LAwAk/uEPADghjIiij9xmMPaSk7KPE0UDXkmJQsw9Bs1iadwlrKQElowM9+O8pUdE0cB77KzP2P8xY2TH/hNFAya1RCHQ1IVh/5ix3CWMiCLKO04BvmNn3WP/jx/H/gvHcew/RTUOPyAKAc+xs7aiIpz141b03b4NvTdsACwW9N64AX23b3NfOIiIQsUVY7xjjfcYf3tZGQDp2Fnr4cOo2vQ9LB06cOw/RT0mtUQh4rownFzxAkrfeBOiIMDcri0vDEQUVt7JqydRENzJrjk9XTJECgDizjwTSYMHAeDYf4p+fIcSBcHz9h3QmKB6bqjQ6a+PuOsa4uN5YSCikJAbTuDi+pDtqKqCKTkZQMPkL1FUNUSKY/8pFrSYq+vy5cuxfPlyOByOSDeFmhHP8WcAmtxQgRcGigTGv5ZBaS1Ze2mps/e1qAiWTp2kccrhgK2o2B3D7KWl2Jd7geLYWcYtimYGURTFSDcinCoqKpCWloby8nKkpqZGujnUDOzJGoi+27dJLyInT2LfBWM4qYJ0oVfcYvxr/lzxCPD9kI34ePT6fC0sHTsCkE9gvY9BFGla4hbH1BJp5DnZwl5S4h5m4EpYhfp6mNu149hZIgqa0iQvufLGHtli912hvtu3offGhgmq69e5E1qhvh7mtr5j/AGOnaXYxXcukUqunlbZtRu9hhkAvDAQUfC8hzhJyocMxVmbf/AdDzt+PAwWCwwWC87a/INs8ur6kO0dpzhEimIZr7pEKhnj47H3vCHo/e03jWs3FhVh//iLfIYZAOCFgYh04bkLoaTcZpOsJetvPKzch2y5BJZjZymWcfgBkRel230AIFqtMMbHY092DgrvvAuWTp1ke0B4YSCiQMkOcSop8d221maD49Qpd5lSj6xn8uqJcYqaG/bUUoumZkcdnxnEx4+jr8etQA4zICI9yQ5xGn8R+m37SWaowUXOoU/x8Thr8w+y8YjJK7UUvBqrpLT+n791ASn6KY1X89xRx+cicuE450UkLs49FIG/f2rOtMS/UNXVeoxYJtme1jXE6csvVA01YDyilozDD1RS2pFFrlzLbFUtdbUeoyXS+noC0h11gMYeWdftPp8ZxK4tbrdsdv8MLyDUnGmJf6Gqq/UYsRgX5drqHuLUrp3kOfqb/MV4RC0Vk1oNFAfre5VHc1DXI4mOZmpeN8m4tOPHJTvq7MkaiH25Fzhv940Zi9+GDcfeIUMB+L+IEDV3rjhX/cMPqN68GdWbN0vKhfp6VP3wg6QMAByVlbD+/rukXLRa4VoiXW1c9VcuV+Zva9hIU4qrnm22Hj7sLlca4sShT0RSTGr9kF3/7/hx36SoYZ1ST55Btm7vXpxa9bakvPLrr1Hz00+SMuuRI7AVFcFRVeVzDKVj+ysLVRIdLT3RSuXer4UoCJJyzwR2/4XjgPp69446Pj2yP+XjrM0/uM/Biwi1FPLrnxYhceBAtBoyBK2GDHFvsyrU1cEYH4/koUNhP1nqjolCfT1MKSmIO+OMxrq1tTDExcFgMDQe98QJhXgrLbedOOE+n0/dkhKftnvHgnDHIzXJqzdXm0+++JL7Z+UmeSmVE7VkvEL7ITuecsLFvoP1HQ6IVpv759y3r0tLYUxORsJZZyHhrLMkQT1l9GhJXduJEzB36OA7Kam4GKb0dHe5rbi48SKSkCCte/w4LB06AACE2loYExPdAbLsvfcAAOlXXukusxUVwVpQAGNSEhIHDGjscbFanWNGTSYAyj3RsusmepVrqRvQMRqW2HKxnTjR8Lodhym9tXMpG6PR+do3vEam1q0bx6uVlDj3OI+zuI+hZgZxNPb+EOlJNv5NnOQb/0QRxoQE34lNF46Tr5uY6HvciybIT4KaIFOucL79F45z75ZljI93xsqGYUTmjAzJcwpZPFJZF5D2cEvie0Pc77z4cZ/jy33PWETUiEmtH3KD8nt98bl0EP+JE9h/0QRYOnUMTVC/eKL6oD7+osagnpgoSaLTr7zS+Tw8elFMbdqgVadOzufh0eNsTE52J7S2osYg69qJBmgMyKX/fgupY8fA0rmzpLx25y6Y27aBpVMnVT3OdXv3wnroEFInTJAcO+7MM5AycmRjcv7BBzBYLEjKykJct24QBUH+4nuxzIcP1yQvj0XJLRkZqnfU4UWEWhLZSUlffelbPmYshLo6/evmXuAzOcp24gT2jxsve4xeX3wOS4cOsnHYYLHAGB+PPt/lhWy4g2d51Q8/QKisQuq4C+WT14YP2fbSUpjbtvWNU+PG+2zmQkRNY1Lrh9ygfEvDJ34XS/v2MBgMobkAyJWfPIl9Yy9UPIY5I0NVEi2bcCuVOxyA2PicPW9Fpl91ZWPv8smT7iQ6cUD/hjJpr7VcUFfqzW476xrp+Y4fR9rkydLebJsNQm2t72vh9eFDy6Lk7JElko9/3h/+zG3bwmAwuO8a6Vq3YXKUJ1e8lTuGpUMH2Vh51g/fw5iY6CwrlY9Hku2uPeNUw5h7150vz2PYiophauNxF62kxF03eejQhjaU+k1e940Zi16fr/W5cyQXp4ioaUxqNVAcrG80huYCIFferp3yMTIyQpNEjxsv2xOteCsy2CRaqTdbbuiHzYa9Q4dJemJcr0VTr6fSkAL2yBL50jJZKVR1mzqGJA63a+eMC6GKRxMV7qLJnc8reXXH2/XrJMmr3J0jxiEiDcQWpry8XAQglpeXa/o5R12d5N+myvcMzpY9jly5lrpaj/HruVmqyvyWDxwkeX62kyfF3QP+INpOnvQtP+dc0VFb23TdkpLgj+FR7knr60kU7QKNW3odR0v8C1VdrccQRVHck3OeuthVIl9uPXFCOR6VlGiKXd7tVYq3jFNEUlriVotZ/WD58uU4++yzkZOTE9DPK/XeyZVrma2qdWarlmMAOvWM+OmJ9in30xPt04sS7DFkel85U5jIVzjjX6jqaj2GUF8vWUsa8BeP5MstGRnK8Uhu3VgVd+JcPyMXbxmniILTYpLaefPmYffu3di6NfSD7qMqqIcgiQYid3uxqXKtrydRSxDO+BctlP7mwxmPlMqU4irjFFFwDKIoik1Xaz4qKiqQlpaG8vJypKamRro5Mck1/tR7AoNcuZa6eh2DqLnRK2619PgX7njEGEUUPC1xq8X01JJ+oqUnmr0aRKRFuOMRYxRReDGpJSIiIqKYx6SWiIiIiGIek1oiIiIiinlMaomIiIgo5jGpJSIiIqKY1+K2yXWtYFZRURHhlhARqeOKV8GuwMj4R0SxRkv8a3FJbWVlJQAgMzMzwi0hItKmsrISaWlpQf08wPhHRLFHTfxrccMPOnfujIKCApw+fRrl5eUoLy9Hnz59/P6/T58+KCgoAAAUFBS4H1f75XlMLY97l/v73rOtnmWBtrupNivVaaqsOb3Wsdpuvd4jgbZbj/dIeXl5yN7b0fgeOX36NAoKCtC5c2fGv2b+3o6V1zpW290c3iPl5ZGPf4G0Oxzxr8X11BqNRnTt2lVSZjKZ3LtUyP3fsyw1NVXzTjyeP6/lce9yf9/LtTWYdjfVZqU6TZU1p9c6Vtut13sk0Hbr+R4JpN2x+h4JpofWhfEvtO1m/Iv+djen90gg7dbrtQ6m3aGMfy2up1bOvHnz/P7fsyzY42t53Lvc3/dybQ2m3Wp+Vq5OU2XN6bX2/H8stVuv94ian+d7RL92h0pzer353o7N9zbfI7H3HvEui5b4ZxCDnXnQQsTqnumx2O5YbDPAdodbLLY7FtsMsN3hFIttBtjucIvFdoejzeypVSk+Ph4PP/ww4mNsD+9YbHcsthlgu8MtFtsdi20G2O5wisU2A2x3uMViu8PRZvbUEhEREVHMY08tEREREcU8JrVEREREFPOY1BIRERFRzGNSS0REREQxj0mtDl566SUMHz4cubm5OHjwYKSbo4rNZsP555+P1q1b4/333490c1T7/vvvMWzYMIwePRqTJk3C6dOnI90kVY4fP47hw4dj9OjRGDFiBHbu3BnpJqmWl5cHg8GAkydPRropqrVq1Qq5ubnIzc3F2rVrI90c1bZs2YLx48fjggsuwNKlSyPdHNViLQYy/oUX4194tej4J1JQSktLxfPOO0+02Wzili1bxCuvvDLSTVJFEATx2LFj4sMPPyy+9957kW6OakePHhWrq6tFURTFf/3rX+KiRYsi3CJ17Ha76HA4RFEUxQ0bNogzZ86McIvUmzZtmpidnS2WlJREuimq9e/fP9JN0Kyurk6cOHGi+/0dK2IxBjL+hRfjX3i15PjHntogbdmyBbm5uTCbzcjJycHevXsj3SRVDAYDOnXqFOlmaNa5c2ckJSUBAOLi4mA2x8ZOzyaTCUaj88/t9OnTOPfccyPcInXWrFmDESNGoFWrVpFuiiYFBQUYNWoUZs6cidLS0kg3R5UffvgBiYmJuOKKKzB+/Hjs2LEj0k1SJRZjIONfeDH+hVdLjn9MagE899xzyM7ORnx8PKZOnSp5zGaz4dZbb0V6ejratGmD2267DXa73f34qVOnkJ6e7v5eEIRwNTuodkeSHu0uLS3F888/j5tuuilMrQ6+3bt378bw4cNx2223YfTo0VHfZkEQ8Pzzz+P//u//wtJWT8G+1gcOHMA333yDsWPH4oEHHoiJdh87dgy7d+/Ge++9h2eeeQZz586NiXZHKgYy/jH+hbLNjH/hbbde8Y9JLZyffh988EHcfPPNPo8tWrQIeXl52L17N3bt2oVvv/0Wixcvdj+enp4uGddkMpnC0WQAwbU7koJtd01NDa688ko8++yzaNeuXbiaHXS7zz77bGzatAlr1qzBbbfdFvVtXrVqFS655BIkJCSEpa2egn2tXe+L6dOnY9u2bWFpMxB8LDn//PPRqlUr9OvXD+Xl5THT7kjEQMY/xr9QtpnxT7uoiH86DYdoFh5++GHx0ksvlZR17dpVMubqP//5j9itWzf396WlpeLQoUNFu90u5ufni1dccUW4musWSLs9fzZSY8oCabfNZhOnTJkifvjhh+Fqpo9A2l1XV+f+/+HDh8Xc3NyQt9NTIG1euHChOHbsWPGiiy4S09PTxXHjxoWruW6BtLuqqkq02+2iKIrip59+GpHxe4G0+9SpU+LIkSNFh8MhFhUVidnZ2eFqrlssxkDGv/Bi/Asfxj/tYmNAToSUlZWhsLAQWVlZ7rKsrCwcOXIE5eXlSEtLQ5s2bXDddddh5MiRsFgseOWVVyLX4AZq2g0AV111FX788UckJydjy5YteOKJJyLUYic17X777bfxzTffoKKiAs888wwmTZqEBQsWRK7RUNfun376CX/+859hNBohiiKeeuqpyDUY6tq8ZMkS92O5ublYtWpVBFoqpabde/bswezZs5Gamor4+Hi8/PLLkWtwAzXtTk9Px/XXX4/Ro0fDZrPhySefjFyDG8RiDGT8Cy/Gv/Bh/Gsak1o/qqqqAACtW7d2l7n+X1lZ6Q6Oc+bMwZw5c8LdPEVq2/2f//wn3E3zS027Z82ahVmzZkWgdcrUtHvYsGH4+uuvI9A6eWrfIy4bN24MU8v8U9PuwYMHh/WWmxpqX+8bb7wRN954Y7ibpygWYyDjX3gx/oUP41/TOKbWj+TkZACQjO1w/T8lJSUibVKD7Q6vWGx3LLYZYLvDLRbbHYttBtjucIrFNgNstxpMav1IT09H165dsX37dnfZ9u3bkZmZ6fNJLpqw3eEVi+2OxTYDbHe4xWK7Y7HNANsdTrHYZoDtVoNJLQC73Y66ujrY7XYIgoC6ujpYrVYAwA033IDHH38cxcXFKC4uxuLFizF79uwIt9iJ7Q6vWGx3LLYZYLvDLRbbHYttBtjucIrFNgNsd1ACml7WzDz88MMiAMnX6NGjRVEURavVKs6dO1ds3bq12Lp1a/HWW28VbTZbZBvcgO0Or1hsdyy2WRTZ7nCLxXbHYptFke0Op1hssyiy3cEwiKIo6pciExERERGFH4cfEBEREVHMY1JLRERERDGPSS0RERERxTwmtUREREQU85jUEhEREVHMY1JLRERERDGPSS0RERERxTwmtUREREQU85jUEhEREVHMY1JLLcrixYvxxz/+MdLNICIKO8Y/au7MkW4AkZ6Sk5Pd/6+trYXZbIbFYgEAjBw5Ep999lmkmkZEFFKMf9TSGURRFCPdCKJQyM3NxdSpU3HnnXdGuilERGHF+EctEYcfUIvyyCOPYOrUqe7vDQYDnnvuOZx99tlo1aoVZs2ahbKyMlx99dVITU3FwIEDsWfPHnf9qqoq3HrrrejWrRvat2+Pa6+9FuXl5QG35/rrr8eNN96IqVOnIjk5Geeccw7y8vLcj69cuRK9e/dGSkoKunTpgsceeyzgcxFRy8b4R80dk1pq8T7++GPk5eVh3759+OKLLzB69GjcdtttOHXqFLKysrBw4UJ33RtvvBGnTp3Cjh07cOjQIdhsNtx6661BnX/VqlW46aabcPr0acydOxeXXHIJTp8+jerqalx//fV45ZVXUFlZiV27dmHChAnBPl0iIjfGP2pOmNRSizd//ny0adMGnTt3xujRo9G/f3+MGDECZrMZV155JX766ScAQElJCT744AMsX74crVu3RqtWrfDoo4/i3XffhcPhCPj8Y8aMwZQpU2A2mzFnzhx06NABa9asAQBYLBb8+uuvqKioQOvWrZGTk6PLcyYiAhj/qHlhUkstXocOHdz/T0pK8vm+qqoKAHD48GEIgoDu3bujdevW7iBrNBpRXFwc8PnPOOMMn++PHj2KVq1a4ZNPPsHHH3+MzMxMjBgxAhs2bAj4PERE3hj/qDnh6gdEKmVmZsJoNOLYsWNISkrS7bi///675PsjR46gS5cuAICxY8di7NixsNlseP755zF16lSUlZXBaOTnUSIKH8Y/igV8ZxCp1LFjR0ydOhW33norTp48CQAoLi7GRx99FNRx169fj//973+w2+146aWXUFRUhEmTJuH48eP46KOPUFlZCbPZjNTUVJjN/BxKROHH+EexgEktkQavv/66+7ZbamoqRo4cifz8/KCOOWPGDLz00kto3bo1nn32WXz88cdIT0+HIAh45plnkJmZibS0NCxfvhzvv/8+eymIKCIY/yjacZ1aogi6/vrr0bp1azz99NORbgoRUVgx/pHe+JGHiIiIiGIek1oiHaxcuRLJyck+X0ajEUajUfaxlStXBnSuxYsXyx7Pc4tMIqJwYfyjaMHhB0REREQU89hTS0REREQxj0ktEREREcU8JrVEREREFPOY1BIRERFRzGNSS0REREQxj0ktEREREcU8JrVEREREFPOY1BIRERFRzPt/C7Ro+H52XwsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2,\n", + " figsize=(7, 4),\n", + " sharex=True, sharey=True)\n", + "\n", + "ax1.set_xscale('log')\n", + "ax1.set_yscale('log')\n", + "ax2.set_yscale('log')\n", + "# ax1.set_xlim()\n", + "\n", + "sns.lineplot(data=basic_molecule_count,\n", + " x='Time__ps_',\n", + " y='Molecule_Count',\n", + " hue='Molecule_Name',\n", + " markers=True, style='Molecule_Name',\n", + " ax=ax1)\n", + "ax1.legend(ncols=2, fontsize='small', loc='lower left', bbox_to_anchor=(0, 1))\n", + "\n", + "sns.lineplot(data=basic_molecule_count_variable,\n", + " x='Time__ps_',\n", + " y='Molecule_Count',\n", + " hue='Molecule_Name',\n", + " markers=True, style='Molecule_Name',\n", + " ax=ax2,\n", + " legend=True)\n", + "ax2.legend(ncols=2, fontsize='small', loc='lower left', bbox_to_anchor=(0, 1))\n", + "\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArUAAAGJCAYAAACU8MsKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAx61JREFUeJzs3XdcU1f/B/BPQkLYQ0FAce8NgrWKAxeuulu1tVL7aOu2auvzOGutWK3+1Fbt0/p0OOrqdNfWOnC2qCjOiorgRBHQMAKZ9/fHNZfcJEDIIIPv+/XKS3LPTXIA+ebk3O/5HgHDMAwIIYQQQghxYkJ7d4AQQgghhBBL0aCWEEIIIYQ4PRrUEkIIIYQQp0eDWkIIIYQQ4vRoUEsIIYQQQpweDWoJIYQQQojTo0EtIYQQQghxejSoJYQQQgghTk9k7w64GrVaDaVSae9uEOKSxGIx3Nzc7N0NUkkonhJiG64aS2lQa0UFBQV48OABaJM2QmxDIBAgPDwcPj4+9u4KsTGKp4TYjqvGUgFtk2sdarUat27dgpeXF4KDgyEQCOzdJUJcCsMwePr0KWQyGRo3buySswyERfGUENtx5VhKM7VWolQqwTAMgoOD4enpae/uEOKSgoODkZGRAaVS6VKBmPBRPCXEtlw1ltJCMSujGQVCbIf+vqoW+n0TYhuu+rdFg1oXJRLxJ+FPnTqF2NhYi583IyMDjRo14h3bunUrxo4da/Fz69u0aRPGjx/POzZ+/Hhs2rQJAPDvf/8bzZo1Q9u2bdG7d2/cvXvX6n0ghFRtFEsJcR40qLWzIoUKCpUGOQVyKFQayBQqu/UlIyPDKsG6NAUFBVAoFFZ7vh49euDKlSu4dOkShg0bhhkzZljtuQkhzoViqfkolhJXQYNaO5Ir1fjq+B1EL/0TUQmHEb30T2w4fgdypdreXbOJW7duoUmTJpg2bRqSk5Mtfr6+fftCLBYDADp06IB79+5Z/JyEEOdDsdQyFEuJq6CFYjbCMAyKygioGg2Dr0+m4/Mjt7hjeUUq7v47XepDKDSe8+Ipdis3H0atViMiIoK7X1hYiFq1alXgOyjd/fv3ec/97NkzdO/evdzHRUZG4tq1a/jll1/wn//8B9nZ2RgzZgzefPNNhISEGH3Mrl27cP78ed5rd+7c2eC8DRs2oH///hX/ZgghDs2WsRQoP55SLCXEedCg1kaKlGq0+PAPo23VvN1x6j/dsfFMutH2jWfSMaFbA3T+9BhyCw0vMV3/uA+83Mv+1bm5uSElJYW7f+rUKSxYsMDouZ06dYJMJoNCocC9e/e4IDtq1CjMmTPH4PzatWvznnvr1q04fPhwmf3R8vb2Rnx8POLj4/HgwQPMnj0bc+bMwZkzZ9C+fXuD84cOHYpvvvmGu6+fFwYAX3/9NS5evIjjx4+b1AdCiPOwZSwFyo+nFEsJcR40qLWDYB8JcgoUyCsynvOVV6RCbqECwT6SUgOxNZ05cwYAmwc2duxYJCYmWuV5P/zwQ+zduxcAcOjQIdSoUQMA8OjRI2zfvh3btm1DUFAQNm7ciNatW5v1Gr/88gs+++wzJCYmUukfQqoYiqUUSwnRRYNaG/EUu+H6x31KbRcJhfDzFBkNxn6eItTw9cCuKZ1KfW5n8PHHH+Pjjz/m7t+9exfvvvsuHjx4gNGjR2Pfvn0IDw83+/kPHz6MOXPm4MiRIwgODrZGlwkhDsaWsVT7/I6OYikhpqFBrY0IBIIyL2kVKVR4u1N9Xh6Y1tud6kOl0ZSbYuBshEIhPvroI3Ts2NEqzzdp0iTIZDIMGjQIABAUFGTypTtCiHOgWGqIYikhxtE2uVZSXFyM9PR01K9fHx4eHiY9Rq5U47+Jadh4Jh15RSr4eYrwdqf6mBzbEBInmD0gpLKZ83dGnE9Ff88USwmpGFeNpa718dXJSMRumNCtAaZ0b4T8YiV8PcRQaTQUhAkhpAIolhJCABrU2p32slh1HwkAwJ1KBxNCSIVRLCWE0F89IYQQQghxejSoJYQQQgghTo8GtYQQQgghxOnRoJYQQgghhDg9GtS6KJGIvwbw1KlTiI2NBQCkp6cjKioKERERaNGiBRYuXMg79/vvv0fLli3RrFkztGzZElu3bq2UPpf1ups2bTLY1nH8+PHYtGlTpfSNEFI1USwlxHlQ9QN7U8oAsVfp922gZs2aOH36NDw8PKBQKNC5c2f07NkTsbGxOHToED788EMcPXoU9evXR3p6Onr06IEaNWogLi7OrNcbO3Ysxo4dy70RGGOL160oqVQKHx8fuLlRGSBCnA7FUgAUS0nVRjO19qQsAk6uZv81dt9GJBIJV2xZqVRCqVRCIBAAAJYuXYqFCxeifv36AID69etjwYIFWLp0KQD2U/7AgQPRq1cvNG3aFG+99RYUCsv3VC/vdcszduxYTJo0CTExMahTpw527tyJJUuWIDIyEu3bt8fjx4/LfY5Tp06hSZMmmDt3LlJTUy36fgghlYhiKYdiKanKaFBra4rC0m8nVwEnVgI73wCkD9l/T6xkjxs7vwIBWq1WIyIigru9/fbbvPacnBy0bdsWwcHB6NWrF7p16wYAuHr1KqKionjnRkdH4+rVq9z9U6dOYfPmzbhx4wYKCgrwv//9z4IfEEx+3V27dvG+p127dvHOf/jwIU6ePIn9+/dj3LhxaNSoES5evIju3btjw4YN5fZhwIABOH/+POrUqYOxY8eiU6dO2LBhA54/f27x90cIsRDFUpNQLCVVGaUf2NonNY0fb9gDeHUj8DAZSDsKrGlRcrzjVOCHN9njumpGAu8mmvSybm5uSElJ4e6fOnUKCxYs4O5Xr14dly5dwtOnT/HKK6/g2rVraNmypUnP3atXL9SqVQsAEB8fj61bt2Lq1Km8c7Zs2YLVq1cDAO7du4dTp07Bx8cHAJCYmIiAgACTXkvX0KFD8c0333D39fPCBg8eDKFQiNatW6O4uBjDhg0DAERERODQoUMmvUZgYCAmTZqESZMmITU1FZMnT8aMGTOQlpaGmjVL+V0SQmyPYinFUkLKQTO19pJ2FPhrPTDwc/7x/ivZ4/pB2EaCg4PRtWtXLlC1atUKycnJvHOSk5PRqlUr7r728lpZ4uPjkZKSgpSUFAwaNAjffPMNd99YEDbldcsjkUi4/gkEAu6+UCiESqUyOH/8+PGIiIhAdHQ07/jt27fx0UcfYciQIfDz88OOHTsQEhJicj8IIZWIYikPxVJSldFMra3Ne2T8uMANAMNeJtP122xg1HagywcAo9Z7jHU+g9y/fx9BQUHw9PREfn4+jhw5guXLlwMA5s6di8mTJ6NHjx6oV68eMjIykJCQgP/+97/c4w8fPozMzEyEhoZi69at3OU2S5jyutamO1MBABcuXMC0adMgl8sRHx+PkydPIigoyGavTwipAIqlJqFYSqoyGtTamru38eNKGbuQIe0oe5ls0Hpg71T2/slVQJdZpT/WQteuXcPs2bMhFAqhVqsxduxYblVs37598eGHH6J///7QaDQQCoVYtGgR+vbtyz0+JiYGY8aMwf3799GhQwe88847FvfJlNe1NU9PT2zYsKFCMxqEkEpCsdQkFEtJVSZgGIaxdydcQXFxMdLT01G/fn1uNWy5lEUvgu77gNjT8L4D2rRpE06dOmXwyZyQymDW3xlxOhX+PVMsJaRCXDWWUk6tPYk92VkEbdDVv08IIaR8FEsJIaCZWqtx1U89hDgS+jurGuj3TIhtuerfGM3UEkIIIYQQp0eDWkIIIYQQ4vRoUEsIIYQQQpweDWoJIYQQQojTo0EtIYQQQghxejSoJZUuMTERvXr14h1LSEjARx99ZPXX+uijj5CQkMA71qtXLyQmJgIAxowZg6ZNm6JNmzYYPnw4nj17ZpXXLSgowIQJE9CgQQM0atQI/fr1w+3bt7n22NhYnDp1ivcYkYj2QiGEmI5iKcVSwkeDWjtSqBUVOu4MEhMTMXbsWJs9v1QqhVqtLv9EE40aNQr//PMPLl++jEaNGuHjjz8u9zH16tUr95x3330XKpUKt27dwu3btzFixAjExcVBLpdbodeEEF0USyuOYilxRTSotTGZUgaZUgZtOeAiVRFkShnUGjXc3dzRfmt7RG6J5G7tt7aHu5s7F4xVGhVkShmKVcUVet3ExER07twZUVFRiIuLw/3790s9Nzk5GTExMYiMjERERAQOHTrEtW3btg1NmjRBVFQUZs6caTArUNlOnTqFJk2aYO7cuUhNTbX4+QYMGAChkP0z6NChA+7du2fxc965cwf79u3DmjVr4ObmBgB4++23UatWLWzfvt2k5xCJRPjwww/Rtm1btGvXDpcuXcKgQYPQuHFjvP/++xb3kRBnY+1YqmE0Jr0uxVLTUCwljoAGtTbWYXsHdNjeAc/k7KWY1/e/jg7bO+Bi1kUAbKBVMTo3jQoA8H/n/w8AcOTeEXTY3gGTDk8y+TVzc3Mxb948HDhwAMnJyXjnnXfwwQcflHp+48aNkZiYiIsXL+LAgQOYNIl9rcePH2P27Nk4fvw4zp8/b5UgpZWUlISIiAju9sUXX5j0uAEDBuD8+fOoU6cOxo4di06dOmHDhg14/vx5qY/54osveK+VlJRkcA7DMPjf//6H/v37m/stca5du4ZGjRrBz8+Pdzw6OhpXr17l7r/99tu8funOmqjVarRu3RqXLl1CbGwshg8fjk2bNuHq1av46aefkJGRYXE/CXEm1o6ld57fKfc1KZbyUSwljo4ST1zQmTNnkJqaim7dugEANBoNfH19Sz2/oKAA48ePx/Xr1yESiXD//n1kZ2cjKSkJnTt3RlhYGAAgPj4e69atM3j88+fPERsbyz1Xbm4uIiIiAACzZs1CfHy8wWM6dOiAw4cPc/cTEhKgUqlM+v4CAwMxadIkTJo0CampqZg8eTJmzJiBtLQ01KxZ0+D8KVOmYMGCBdx9YzMkCxYsgEQiwb/+9S+jr/nqq69yeVyPHj3ivr+uXbti7dq1JvVb38aNG9G5c2fuvm4emEAgwNChQwEAERERyMzMRLVq1QAAzZo1Q0ZGhkmX7ggh5qNYykexlDg6GtTaWNIb7CdZTxG7B/mOV3aAYRhI3CRlPu6DaHY2oGednkh6IwlCgemT6gzDoEuXLti9e7dJ58+fPx/t2rXDDz/8AIFAgOrVq6O42PR0h4CAAKSkpABgL9Vt2rQJmzZtMvnxZRk/fjzOnz8PkUiE8+fPc8dv376NrVu34ocffkCzZs2wY8cOhISEmPUan332GY4fP45Dhw5BIBAYPefnn3/mvq5Xrx73/RrTsmVL3L59G/n5+bw3wOTkZLz99tsm9UkoFHKBWSgUQiKR8NpMfdMixFVYO5Y2CGhQ7mtSLK0YiqXE3ij9wMa8xF7wEntxf+CeIk94ib3gJmTzg0RCEUQCnZuQ/eNzd3Pn2r3EXvAQmb43c8eOHXH27Fnu8oxSqcSVK1dKPV8qlaJWrVoQCAT4+eefkZubC4CdATh9+jQeP34MhmGwdevWiv8ALPTNN98gJSWFC8IXLlxATEwMRo0ahWrVquHkyZPYtWsXhgwZwuVcVcTmzZuxZcsW7N+/H15eXlbpc4MGDTBgwADMmjWLuwy2ZcsW3L9/H6+//rpVXoOQqsbasdSUiQKKpaajWEocAc3U2pFCrcC5N88ZPa4NxOYICgrCjh07MH78eBQVFUGlUmHy5Mlo3bq10fPnzp2L+Ph4rFq1Cl26dEGdOnUAAKGhoVixYgW6du0KX19fdOvWzWplWszl6emJDRs2oFWrVlZ5vvHjxyM8PJy75NemTRts2bLF4uf9+uuvMWvWLDRu3BhCoRANGzbE77//Dg8P0z+cEEJMQ7G04iiWElckYLRLSYlFiouLkZ6ejvr167vsH1tiYiISEhJ4+VuEVKaq8HdGXP/3TLGU2Jur/o1R+gEhhBBCCHF6lH5QhUycOBF///0371jv3r2xcuVKkx4fGxvLXVoihJCqimIpIY6JBrVVyFdffWXvLhBCiNOjWEqIY6L0A0IIIYQQ4vRoUEsIIYQQQpweDWoJIYQQQojTo0EtIYQQQghxejSodQAauZz3LyGEkIqjWEpI1UaDWgcglEiQGt0eQknZe5i7isTERPTq1Yt3LCEhAR999BEA4Ndff0WbNm0QERGBtm3b8vYKV6lUmDNnDho2bIgmTZqgc+fOOHfOcCchW9PuJa516tQpKtFDiJ1RLKVYSqo2KullYxqZzOhxgUQCgZsbGI0GAqEQjErFa2eUSjBKpcHjhFbaU9tWEhMTsWnTJmzatMns5+jduzeGDBkCoVCIR48eoVWrVhg4cCAkEgk+/PBDXL58GVeuXIGXlxcOHTqE/v374/r16wgODjb7NXNzc1GtWjWzH08IsS1rx1IIBBB6etqiq1ZBsZSQiqNBrY2ltosyPCgUosm5s3Dz9oZAKIQyMxOMWg1lZibEYWEAAE1REW6+3BHQaHgPbX7jH5NeNzExEQsWLEBRURGqV6+Ob7/9FrVr1zZ6bnJyMqZPnw6ZTAaGYbBixQrExcUBALZt24bFixfD19cXXbt2xZUrV2y+taOvry/3dVFREQQCATQaDYqKirBmzRpcu3YNXi8G93Fxcejbty/Wr1+PxYsXY+zYsfDw8MCFCxfw7NkzTJo0CbNmzSr3NYcOHQovLy+MHTsWgwcPdqltAwlxBdaOpe6NGqLh/v3lvi7FUoqlxHnQoNYehEK4eXsjNbo9GJUKjFoNKJW4HdcHAjc3CEQiND1/DhAKDQKxKXJzczFv3jwcPHgQ/v7++Omnn/DBBx/ghx9+MHp+48aNkZiYCLFYjIcPH6Jr165IS0vD48ePMXv2bCQnJyM0NBSvvvqqpd85JykpCREREdz9J0+eYMKECdz9P/74AzNnzsTdu3exZcsWeHp64sqVK/Dw8ECDBg14zxUdHY0TJ05w969evYpTp05BJpMhKioKvXv3RuvWrcvsz/Hjx3HmzBls2bIFc+fORZ8+fTB27Fh06NDB6PlqtZrX/8LCQtSqVasCPwFCiMUollIsJUQHDWptrOmFZKPHNXI5G2wBqHJycCu2OxonHoOoevWS9rNJZr3mmTNnkJqaim7durHPpdHwPrHrKygowPjx43H9+nWIRCLcv38f2dnZSEpKQufOnRH2YsYjPj4e69atM3j88+fPuRyogoIC5ObmckFq1qxZiI+PN3hMhw4deLMUCQkJUOlcNuzTpw+uX7+OCxcuYNy4cXjllVdM/v5ff/11uLu7w93dHYMGDcKJEyfKDcQA0KlTJ3Tq1AlyuRybNm1Cz549MW7cOHz++ecG57q5uSElJYW7f+rUKSxYsMDkPhJCKsbqsVQgKPc1KZZSLCXOhQa1NmZKDqyoenUI3Ny4IAzAooUODMOgS5cu2L17t0nnz58/H+3atcMPP/wAgUCA6tWro7i42OTXCwgI4IKSNfLAdLVr1w4ikQjXr19Hs2bNUFRUhDt37vBmGJKTk9GqVSvuvqCcN6vz589j/PjxAICpU6dyXysUChw4cABbtmzBjRs3MHv2bIwdO9Yq3wchxDIUSy1DsZRUBVT9wEEIRNb7fNGxY0ecPXsWV69eBQAolUpcuXKl1POlUilq1aoFgUCAn3/+Gbm5uQDYGYDTp0/j8ePHYBgGW7dutVofy3Lr1i0wDAMASE1Nxd27d1G/fn14enpixowZmD59OoqKigAAhw8fxsGDBzFlyhTu8Tt37oRSqYRUKsW+ffvQtWtX3vNHR0cjJSUFKSkpXBCeM2cOmjRpgv3792PmzJm4fv06Fi1ahLp161bK90wIsQ6KpSUolpKqhmZqHYD28plGLrdKKZqgoCDs2LED48ePR1FREVQqFSZPnlzqZaO5c+ciPj4eq1atQpcuXVCnTh0AQGhoKFasWIGuXbvC19cX3bp1w7NnzyzuX3l++uknbNu2DWKxGGKxGJs3b0ZAQAAAYMmSJZg/fz5atmwJkUiE4OBg7N+/HzVq1OAe36JFC8TExODZs2dlft+6unTpgg8//JBbNEEIcT4US/kolpKqRsBoP8YRixQXFyM9PR3169d32dWeiYmJSEhIsPmKXUuMHTsWvXr1wptvvmnvrhAbqAp/Z8T1f88US4m9uerfGKUfEEIIIYQQp0cztVbiDJ96Jk6ciL///pt3rHfv3li5cqWdekRIxTjD3xmxnKP/nimWEmfn6H9j5qKc2irkq6++sncXCCHE6VEsJcQxUfoBIYQQQghxejSoJYQQQgghTo8GtYQQQgghxOnRoNYBaDQMGIaBRkNr9gghxFwUSwmp2mhQa2caDQNlsQq/b7gKZbGKgrEDGjt2rMEOQI0aNUJGRgZkMhkGDhyIpk2bonXr1hg3bhwUCoVVXvfJkycYOXIkGjZsiIYNG2LkyJF48uQJ116vXj08ePCAu//gwQPUq1fPKq9tKpVKhTlz5qBhw4Zo0qQJOnfujHPnznHtZf3sCLEmiqWOj2Jp6SiWWgcNam1MKVeXflOooSxW4ZeVybiT8hS/rEyGslgFpUINtVIDANCoNbzHOLrExESH3+Nbu3WltcyYMQOpqam4dOkSZDIZvvzyyzLPz8jIQGxsbLnPO2zYMDRv3hxpaWlIS0tDs2bNMGzYMCv1unymBPUPP/wQly9fxpUrV3Dz5k18+OGH6N+/P54+fWr7DpIqxdqx1NHjKcVSiqUUSyuOBrU29r/3jhu9nf7lNpRFbBB+likDADzLlLHBuEiFtItZAIA7Kdm8x5kqMTERnTt3RlRUFOLi4nD//v1Sz01OTkZMTAwiIyMRERGBQ4cOcW3btm1DkyZNEBUVhZkzZ6JXr15m/iT41q1bh5deeglt27bF+PHjoVQqSz1348aNeOmllxAZGYnY2Fikp6cDABiGwaxZs9CkSRN06dIFo0ePRkJCQrmv/eOPP6J58+ZYunRpmT8XU3h5eaFnz54AAKFQiPbt2+PevXsWPScAHDt2DI8ePcLChQu5Yx9++CEePnyIY8eOlfv4jIwMNGjQABMnTkSLFi3Qo0cPXLx4Eb1790aDBg2wZs0ai/tYVFSENWvWYP369dyWmHFxcejbty/Wr19v0nPUq1cP8+bNQ1RUFJo2bYpz585h9OjRaN68OUaNGgUqo020rB1LTY2nFEtLR7GUYqmjoUGtHQhFAnQb1QTHd9zkgrDWs0wZju+4icbtQ8x+/tzcXMybNw8HDhxAcnIy3nnnHXzwwQelnt+4cWMkJibi4sWLOHDgACZNmgQAePz4MWbPno3jx4/j/PnzVgkwAHD06FGcPXsWf//9Ny5dugQPDw988803pZ4/aNAgnD17FhcvXsT06dMxb948AMDu3buRnJyMa9euYd++ffjrr79Mev2JEyfi6NGjcHd3x8CBA9G7d29s27YNRUVFpT5m/vz5iIiI4G7GArhcLsfmzZvRv39/k/pRlqtXryIiIgJubm7cMTc3N0RGRuLq1avcsT59+nB96tOnD+85MjIy8K9//QvXr19HQEAApk6dir179+LcuXNYsmQJiouLLerj7du34eHhgQYNGvCOR0dH8/pY3s8uMDAQycnJmDJlCvr164clS5bg+vXryMjIwIkTJyzqI3FtFEsplpaHYmnViqW0+YKNvft5N6PHVSoNesQ3w7MnhbxgHBjmhR7xzaBRMXATC9AgIqjU5yjNmTNnkJqaim7d2MdpNBr4+vqWen5BQQHGjx+P69evQyQS4f79+8jOzkZSUhI6d+6MsLAwAEB8fDzWrVtn8Pjnz59zl4AKCgqQm5uLiIgIAMCsWbMQHx/PO/+3337DiRMn0K5dOwDsziaenp6l9i81NRXz589HdnY21Go1hEL2s9iJEycwcuRIiMViBAQEYPDgwab9gACEhYVh9uzZmD17Ns6dO4d3330XkydPhlQqNXr+0qVLeXugN2rUiNfOMAzGjRuHrl27crMN+jp16gSZTAaFQoF79+5xP6NRo0Zhzpw5Jvdd1x9//IHw8HAAbB5Y586dubZatWrhpZdeAgBERESgqKgInp6e8PT0RFBQEB4/fmxwWWz69Olc8Hv06BHXx0aNGuHnn382q4/l/ey0lwEjIiLQuHFjLrC3adMG6enp3P9jUrVRLKVYqkWxFNxz6aJYSoNamxNL3Ept04iEGD47irtsFhjmheGzoyD2EEEoFAAAhG5CCEt/CqMYhkGXLl2we/duk86fP38+2rVrhx9++AECgQDVq1ev0CfPgIAApKSkAGAv1W3atAmbNm0qs38zZ87EjBkzTHr+0aNHY/v27ejYsSOuXLmCoUOHmtw3AOjfvz8ePXqEOnXqYO/evdzxy5cvY8uWLdizZw9efvlli7a4nDVrFoqLi/H555+Xes6ZM2cAsJ/6x44di8TExFLPbdWqFVavXg2NRsO98Wg0GqSkpGD69Okm9UkikXBfC4VCg/sqlcrgMWvXruW+rlevHvd7NaZRo0YoKirCnTt3eDMMycnJaNWqlUl91O2nqX0kVRPFUuP9o1hKsVS/n1U5llL6gR0JhQKIPUQYPjsKDSKCDYKwuTp27IizZ89yly2USiWuXLlS6vlSqRS1atWCQCDAzz//zCX/d+jQAadPn8bjx4/BMIzByktz9evXDxs3bsTz588BAM+ePeNyu4zJy8tDrVq1AAD/+9//uOPdunXDjz/+CKVSCalUyguyun777TekpKRw7X/++SciIyMxbdo0tGjRAhcuXMD3339vdo7bxx9/jOvXr2P79u1c0LRUbGwsQkNDeXltCQkJCA0NRffu3a3yGpby9PTEjBkzMH36dO5y4+HDh3Hw4EFMmTLFzr0jVQnF0ucAKJYaQ7G0aqGZWjvTBuO+E1qBYWBxEAaAoKAg7NixA+PHj0dRURFUKhUmT56M1q1bGz1/7ty5iI+Px6pVq9ClSxfUqVMHABAaGooVK1aga9eu8PX1Rbdu3fDs2TOL+9erVy9MnDgRXbt2BQCIRCJ8/vnnqF+/vtHzV6xYgW7duqFatWoYMGAAd3zw4ME4ceIEWrZsiZCQELz88ssmvX5gYCB++eUXg/wlczx48ACLFi1CkyZNuMtTffv2xfLlyy16XoFAgF9//RXTp0/n+hkVFYVdu3ZZ3GdrWrJkCebPn4+WLVtCJBIhODgY+/fvR40aNezdNVLFUCylWGoMxdKqRcBUlSVxNlZcXIz09HTUr18fHh4e9u6OTSQmJiIhIQGHDx+2d1eM+uijjyASibBgwQJ7d4XYSFX4OyOu/3umWErszVX/xij9gBBCCCGEOD2aqbUSZ/jUM3HiRPz999+8Y71797Yoqd+aoqOjDZLZ586di5EjR9qpR8TROMPfGbGco/+eKZYSZ+fof2PmopzaKuSrr76ydxfKdP78eXt3gRBCykWxlBDHROkHVkYT34TYDv19VS30+ybENlz1b4tmaq1ELBZDIBDg6dOnCA4OhkBg+cpbQkgJhmHw9OlTCAQCiMVie3eH2BDFU0Jsx5VjKeXUWlFBQQEePHjgsp+ACLE3gUCA8PBw+Pj42LsrxMYonhJiO64aS2lQa2VqtRpKpdLe3SDEJYnFYt4e7sS1UTwlxDZcNZbSoJYQQgghhDg9uy0UmzZtGmrXrg0/Pz/UqlULM2bMgEKhAMBuayeRSODj48PdHj16xD02Ly8Pb7zxBvz8/BASEoIlS5bwntvSdkIIIYQQ4lzstlBs8uTJWL58Oby9vZGdnY3XXnsNK1as4HYw+fTTTzFjxgyjj502bRpyc3Nx7949ZGVloVevXqhbty7i4+Ot0l4ejUaDR48ewdfXlxYwEEKMYhgG+fn5qFmzptX2sXc1FEsJIeWpUCxlHEBWVhbTo0cPJj4+nmEYhunWrRuzZs0ao+cWFhYy7u7uzLlz57hjK1asYLp27WqVdlPcv3+fAUA3utGNbuXe7t+/b3JsqWooltKNbnQz9WZKLLVrSa/ly5cjISEBhYWFqF69Oj799FOuLSEhAR9//DHq1q2LmTNncrOoqampUCgUiIiI4M6NiIjAJ598YpV2Y+RyOeRyOXefeZGGfP/+ffj5+Zn9/RNCXFdeXh5q164NX19fe3fFYWl/NhRLCSGlqUgsteugds6cOZgzZw7++ecfbNu2DaGhoQCAZcuWoUWLFvDy8sLRo0cxYsQI+Pr6YujQoSgoKIC3tzdEopKuBwQEID8/HwAsbjdm2bJlWLx4scFxPz8/CsSEkDLRZfXSaX82FEsJIeUxJZY6RKJX8+bN0bZtW4wdOxYA0LFjR/j7+0MsFqNPnz6YMGECfvjhBwCAj48PZDIZb19rqVTKjeAtbTdm7ty5kEql3O3+/ftW+94JIYQQQojlHGJQCwBKpRK3bt0y2qabGNy0aVOIxWJcunSJO5aSkoLWrVtbpd0YiUTCzSTQjAIhhBBCiOOxy6C2oKAAGzduxPPnz8EwDK5cuYKEhAT06dMHz58/x2+//QaZTAa1Wo0jR47gq6++wvDhwwEAXl5eGDlyJBYuXAipVIpbt25h3bp1GD9+vFXaCSGEEEKI87HLoFYgEGD79u1o2LAhfH19MXjwYAwYMACfffYZlEolFi9ejNDQUAQGBmLmzJlYvXo1XnvtNe7x69evh7+/P8LDwxETE4Nx48bxynFZ2k4IIYQQQpwL7Shmhry8PPj7+0MqlVIqAiFVhEYuh1Ai4f4tD8WJ8tHPiLiSisYIYpqKxAmHyaklhBBHJpRIkBrdnt6sCCFGUYywPxrUEkKIiRidqimEEKKPYoR90aCWEEJKodHZdEWVnQ1GrYYqJ8doOyGk6uHFiJwcihF2ZtfNFwghxJFpLycyKhUYtRpQKnErtjsEbm4QiERoev6cvbtICLEjihGOhQa1hBCiR3fBh/ZNSZmVhds9e6Fx4jGIqlfnnUcIqZp4MSIzE7fj+qDRkcMQ16jBtVOMqDyUfkAIIXqMLfgQ16gBgZsbN6DVnkcIqbqEEgke/mcObkREQhwWBoGbG8Q1aiD/+HGunVQeGtQSQogORq1m/32x4EM3P04gootbhJASsgsXkLdnDxc3tDEi57vv7NmtKosGtYQQgpIFHQI3NygzM8Go1VA+fcpLNWh6/hwt/CCEcHFAXLs2IBQiYOgQLkaonj5FtVGjQNsAVD4a1BJCqjTtm5M25eBGRCRux/UBlErc7tETNyIieakIznY5cf369YiOjoZEIsGQIUOMnvPkyRNUq1YNERERvOOPHj1C//794e3tjTp16uDrr7+uUDshrkAbI3Q/0GrjhTg4GEI/PwS/9x4XG0TBwfDr1w8CgcAu/a3K6FoaIaRKE0okSH2pAxqfPMEt+FBlZ+NW9x4usSisZs2aWLBgAQ4fPowHDx4YPWfq1KmIjIxEjk6qBQC8/vrraNiwIbKysnD16lX06dMHTZo0Qbdu3UxqJ8SRmboDmHYAq1/JQJuiVHPZJ7xcewBgGAaypCSIa9WCe+3a1u88MYpmagkhVR6jUEAokSDzk2Uo/ucfiIKCXGZR2LBhwzBkyBAEBQUZbd+zZw9yc3MxZswY3vG0tDScOnUKy5Ytg7e3Nzp06IDRo0fjuxe5guW1E+LoKrIDGKPRlFq32rd7dwD8mdysFStx71/jIPT2NmgjtkODWkJIlaP7BqN88oR7cwqbNxcezZsDqBqLwqRSKWbNmoWvvvrKoO3y5csICwtDSEgIdywiIgKXL182qd0YuVyOvLw83o0QeyptBzCDTRUYhpeidKt7D64mrX6KEgD49u4NCIUQVatGW+dWIteP2oQQoqfMgunu7lwqgrOmHJjq3//+N8aOHYvGjRvj9OnTvLaCggIEBATwjgUEBCA/P9+kdmOWLVuGxYsXW6XvhJhD929adwcw/TQjgxihVkOZ+bgkRSknB7diu5eaouTVLhJe0dEAaOvcykSDWkJIlWF0U4XHT3C7d2+DNyfAeVMOTHHy5EmcPn0aFy5cMNru4+MDqVTKOyaVSuHr62tSuzFz587FrFmzuPt5eXmoTfmGpBKZugOYsU0VBO5i7nlE1auXmqKkjTN1N23kKqkYGzgT66NBLSGkytBd8KEpLkb2/75GjenTXCZ/tiKOHDmCO3fuoGbNmgDY1ICioiIEBQXhypUraNOmDR49eoSsrCzUeLE7UkpKClq3bg0A5bYbI5FIIKkCP1viuEzdAYxRqXCjUwygVqNZykWDGAGUnqJEW+faD+XUEkKqFO2lQKGHB2pMnwbAtfNnVSoViouLoVKpoNFoUFxcDIVCgVmzZuHmzZtISUlBSkoKPv74YzRt2hQpKSmoUaMGGjZsiJiYGMybNw8ymQxnz57Ftm3bMG7cOAAot50QR6T9wJqz5XveDmA3IiLxT0QkNyB18/YGI5fDp1tXAIYxoqy61dq2ZikX0ejwn4BYjMbHjqJZykWqdW1jNKglhLg03qIw7aXAp0957a78RpOQkABPT08sXboU+/btg6enJ+Li4uDn54fw8HDuFhgYCLFYjPDwcLi5uQEAduzYgYcPHyI4OBjDhw/HihUreOW6ymsnxFHJXsyWager1f71L3g0aQKg5IOvZ9u2qLl8udEYUVbdat722iEh7CyvTvWRqnAlyF4EDG15UWF5eXnw9/eHVCqFn5+fvbtDCCmH/qVAiMU2vxRIcaJ89DMi9sAwDG517oL6P/8EcViYweKxW7Hd0ejPQxCHhgKwPAdWm/LEMAxtyGCGisQJ173mRgip0rhFYcXFJTl0WVm43bOXS2yqQAgxjyI9A+qcHKQNeAVN//7LaA7s7d5xVvngq53lVT55AvVzKTyaNrHid0L00aCWEOKSdBeF/RMRiWrx8QiZNbNKLgojhJRwr18PDQ8fhiI9HQJ3d97isfJKdVWUUCLBvXfeReHp0wiZP48GtTZGObWEEJelzY0LmjABNWbOAODai8IIIeUTCARwD68Fny6dAfA/2JZVqstcXu0iAY0GsvPnLXoeUj6K7oQQl8HLjdPZxjJ40kSuvSpsqkAIKd2zH36ER4sW8GjRHIIXiyJ1WfuDr2/fvnCvXx9eUVFWfV5iiAa1hBCXYWp9SBrQElI1KR8/xuNFiwChEE3OnoWbjzev3RYffCX160NSv75VnouUzW7pB9OmTUPt2rXh5+eHWrVqYcaMGVAoFADYlW5vvPEG/Pz8EBISgiVLlvAea+t2Qohz0Zba4dWHPHKYrQ+ZeIzqQxJCAACy88kAAI/mzQ0GtEDZpbosoVEoIEtORvE//1j1eQmf3Qa1kydPxo0bN5CXl4dLly7h0qVLWLFiBQB2wJubm4t79+7h5MmT+Prrr7FlyxbusbZuJ4Q4F+0MrVAiwfO9e5G56COIa9SgRWGEEB6hhwSeERHwerlDpb5uzldf4e7oN5G7aVOlvm5VY7f0g+bNm3NfMwwDoVCIW7duQSaTYefOnTh9+jQCAgIQEBCAadOm4dtvv0V8fLzN2wkhzkm7KCxg0CAEDBoEgBaFEUL4fHv1gm+vXpX+up4v8mll52ixmC3ZtfrB8uXL4ePjgxo1auDSpUuYNm0aUlNToVAoEBERwZ0XERGBy5cvA4DN242Ry+XIy8vj3Qgh9sXbKezxY3ZRWHY2r51SDgghjsArMhIQiaB89AjKhw/t3R2XZddB7Zw5c1BQUIDr169j4sSJCA0NRUFBAby9vSHSmWEJCAhAfn4+ANi83Zhly5bB39+fu9WuXds6PwBCiNm0KQc3IiJxu3ccuyisew/ciIjkUhG05xFCSMGJE0h/bQRyvv2u0l9b6OUFj5YtAIBKe9mQQ9Spbd68Odq2bYuxY8fCx8cHMpkMqheXEgFAKpXC19cXAGzebszcuXMhlUq52/37963zjRNCKszoorA/D9GiMEJImWTnz6P42jXI0+/Y5fW9oqO5fhDbcIhBLQAolUrcunULTZs2hVgsxqVLl7i2lJQUtG7dGgBs3m6MRCKBn58f70YIsQ/dRWH/RETidlwfiENDaVEYIaRUGrkcNWbNQqMjh+EVFW2XPnhFR0Po7Q24Ua6/rdhlUFtQUICNGzfi+fPnYBgGV65cQUJCAvr06QMvLy+MHDkSCxcuhFQqxa1bt7Bu3TqMHz8eAGzeTghxfNpFYSJ/f9T+8r8AXGtRWGBgIKpVq1bujRBiGu2HYXFYGLyi7bMJgk+XLmiS9DdC5s4BALqaZAN2eRcQCATYvn07PvjgA8jlctSoUQPDhw/H4sWLAQDr16/HhAkTEB4eDk9PT0ydOpVXmcDW7YQQx8LbKSwnh9sprPHxRK7dlXYK2717t727QIjL0X4YFoeH2+X1tR+8BSIRUqPbc5vBEOsRMAzD2LsTziYvLw/+/v6QSqWUikBIJdHfKQxiscFOYY6E4kT56GdEbEn3Q64yKwu3e/ZCo8N/QhwSYtBeWYquXIFn69a4ERGJZikXK/W1nVVF4oTrXK8jhLgs7UwsACgzM3E7rg8aJx7jcmhdZYa2NHfv3sWZM2eQnZ0N3XmI6dOn27FXhDgmbTwwtm327V697fJhWNsnz9atoczM5K42VZUYVlloUEsIcVi6gT5tyFAoMzLQLOVilVoU9vPPP2PMmDFo1qwZrl27hpYtW+Lq1avo3LkzDWoJMUIokSD1pQ5ofPIEN3BV5eTgVmx3u30YNjbAvhXb3aGvNjkjh6l+QAgh+nQrHdT9+n8IfH0UANdaFFaejz76CJs3b8bFixfh7e2NixcvYsOGDYiOts8KbkKcAaNQQCiR4EZ0e2Qu+gii6tXt+mFYtwRh46NHqAShjVSddwZCiFPiKh0EByPkP/9xuUVh5bl37x5ee+013rH4+HiEh4dj5cqVduoVIY7F2GJSZWYmmunMgNrzw7BurBIFB3MDbE1hIVRPn0IUFgaA0hAsRYNaQohD0V/cwajVUGZlQVyjBu+8qhL4q1WrhtzcXFSvXh21atVCSkoKqlevjuLiYnt3jRCHYTR/Nq4Pe3nf3Z1LRXCUQaN2gJ3+xhtg5Ao0+v0gVUSwAko/IIQ4FN72tz17sW9OPXsZbH9bVYwcORKHDh0CAIwbNw6xsbGIjIzEqFGjTHr8+vXrER0dDYlEgiFDhnDHs7KyMHr0aISHh8PPzw+RkZHYu3cv77GPHj1C//794e3tjTp16uDrr7+uUDshlYV3eT/xGP/y/tkk7jxHiB/c1abiYjByBVSPHwMouSpFzEcztYQQh1LVKx3o+/TTT7mvZ86cifbt2yM/Px99+/Y16fE1a9bEggULcPjwYTx48IA7XlBQgMjISHz66aeoWbMmDhw4gFGjRuHcuXNo0YLdo/71119Hw4YNkZWVhatXr6JPnz5o0qQJunXrZlI7IZVFGxNyNm1C9bFjHXoxKdcXgQCNfj8IAFQRwUqoTq0ZqLYiIbajKSxExujRUGTcRbOUi05bz9HR4sRHH32ElJSUMjd2aNeuHaZOnYp//etfSEtLQ5MmTfDo0SOEvKjrOWXKFBQUFGDz5s3ltpvC0X5GxPllxL+Fels2O82lfGerv20PVKeWEOJ0tLMSjEYD+c1bcKsRDKBqVTrQGj16NLZt2wYAGDp0KAQCgdHzfv31V6u9ZlZWFv755x+0adMGAHD58mWEhYVxA1YAiIiIwH//+1+T2o2Ry+WQ66zyzsvLs1r/CVHl5qLowgUoMzMdKn+2NLyrUk+e4Hav3mj05yGIQ0O5dkfuvyOqeu8WhBCHpM2lbXr+HGqtWQNRcHCVq3Sg1apVK+7riIgIm7+eQqHAqFGjMGLECK5UWEFBAQICAnjnBQQEID8/36R2Y5YtW8Zth06ItRUkHgdUKtyfNg0Nfv7Z4WOGbv/EISEQuLlxA1r9dmIaGtQSQhyGdqGEX5843vGqFtznzp3LfT1u3DiEG9mrXjc/1hIKhQKvvvoqvLy8eAu9fHx8IJVKeedKpVL4+vqa1G7M3LlzMWvWLO5+Xl4eateubY1vgxDkHz0CAPDtFmvfjphJ96qU/NYtiOvUgVAiqXIf6i1B1Q8IIXajW3BcmfmYXSiRnW20varSLtrSp00TsIRCocBrr70GhUKBX375Be7u7rznf/ToEbKysrhjKSkpaN26tUntxkgkEvj5+fFuhFgDo9FAkZ4BAPDt2cO+nTGD7lWpJ8s/xZ2hw3ibzxDT0EwtIcRujG4d2b0HLZTQYWwtb3Fxcal5tvpUKhV302g0KC4uhlAohEAgwIgRI1BYWIj9+/dDovfG2bBhQ8TExGDevHlYu3Ytrl69im3btnELzcprJ6QyCYRCNNi/D/LUVEiaNrV3dypMO3AVSiRgwHCztlTmq2JoUEsIsRveQonHj3G7d1yVLt+lKzIyEgKBAMXFxWjXrh2vLTMzE127djXpeRISEnh5rJ6enujWrRsWL16MPXv2wMPDA0FBQVz7vHnzMG/ePADAjh07MH78eAQHB6NatWpYsWIFr1xXee2EVCaBQACPZs3s3Q2LaORyhM6Zg9A5c6B8/JjKfFUQlfQyA5WhIcQy2sCsH6CdtXyXMZbGic2bN4NhGEyaNAlfffUVd1woFCIkJAQ9evSAyMkrQ1AsJdbAaDR49J858IqOhv/gQRB6eNi7SxahMl98VNKLEOLQdCsdKJ88gfhFWaiqWL6rNG+99RYAtvpBZVRAIMRZFV+9iryDB1GQmAj/oUPs3R2L6F69UuXk4FZsdzQ+dhSiF1dTaKa2bPQOQgixC22uWNanK1Br9aoqW76rPBEREThx4gSSk5MNymV9+OGHduoVIY5DXKcOml+9AlVODoQ6ix2dkW7sE1Wvzu6MFhQEjUwGoZcXxcZy0KCWEFIpdAeryidZYNRqKB8/Rq3Vq3jnUdDm+89//oMvvvgCnTp1gre3N3fc1IVihLg6UUCA0+wgVlHaq1fS/QcQOOI1O/fG8dGglhBSKYxVOrjdO65K54qZ4rvvvsP58+fRzMkXwBBiS65YJUB79UqZmYlnO3Yg4LVX6cNsOWhQSwipFLxKB5mZuB3XhyodmMDT0xMNGjSwdzcIcSi68UKVk+OSVQKEEgnUUinSBrwCRiZD0cUUeLWLtHe3HBptvkAIqRRCiQTKR49w962xEIeFsbliL96AtO3E0KJFizBv3jzIaSMKQjjaKz83IiJxK7Y7W+M6tjtuRES61IYFbv7+8OvXFwDwbMcOO/fG8dFMLSHEpnTLd4lr1kSdb78BQJUOTPXBBx8gPz8fn332mUE5m9zcXDv1ihD7qkpXfgJffwPSX36FRiYDwzCUglAGu8zUyuVyvPPOO6hfvz58fX3RrFkzfPfdd1x7bGwsJBIJfHx8uNujR4+49ry8PLzxxhvw8/NDSEgIlixZwnt+S9sJIdaju9Ujo9FAIBLxKh2Qsu3evRtHjhzBkSNHsGvXLt6NkKpKKJGgMCkJNyIiXf7Kj2erlmh09Ahqf7EejEIBgLYQL41dpkpUKhXCwsJw+PBhNGjQAElJSejXrx/Cw8MRFxcHAPj0008xY8YMo4+fNm0acnNzce/ePWRlZaFXr16oW7cu4uPjrdJOCLEu7SKOp//9L2pMncrbEpKUjXboIsS4wlOnudji6ld+xDVrAuDX+CaG7DJT6+3tjY8//hgNGzaEQCDAyy+/jO7du+PUqVPlPlYmk2Hnzp1ISEhAQEAAmjRpgmnTpuHbb7+1SjshxHK6swjKrBfluzIfo8bUqQbtpGxKpRKLFi1Co0aN4O/vDwD4/fff8cUXX9i5Z4TYV+GZM4BGA3V+fpW48pP7ww8ADCs9aL9vV//+TeEQC8WKi4tx9uxZtGnThjuWkJCAatWqITIyElu2bOGOp6amQqFQ8HbYiYiIwOXLl63SboxcLkdeXh7vRggpne4ijts9e7Hlu+LiXG4RR2X497//jVOnTuGrr77icumaN2+ODRs22LlnhNiPpqgIyidPAI0GmqIiAK575Uc7WK02ciSUmZlspYenT7l23RSvqs7u8/UMw2D8+PFo3Lgxhg0bBgBYtmwZWrRoAS8vLxw9ehQjRoyAr68vhg4dioKCAnh7e/P2PA8ICOB22rG03Zhly5Zh8eLFVv2+CXFlRrd6dNFFHLb2008/4cqVKwgMDIRQyM5D1K1bF/fu3bNzzwixH6GnJxqfOA7FnTsQ16hh7+7YlLEa37d69YZALIZQIkGT06dcsk6vOew6U8swDCZPnozU1FTs3r2bC9gdO3aEv78/xGIx+vTpgwkTJuCHF9PuPj4+kMlkUOn8AqVSKXx9fa3SbszcuXMhlUq52/379633QyDEBQklEmR+tBhP/m9VyVaPLrqIw9Y0Gg28vLx4xwoKCsqMWYRUBQKhEJJGjezdDZvTThI0S7mIxonHAIkETZP+RrPz59Dk9Cmoskvq9Oo+piqy26CWYRhMmTIFSUlJOHToEJcrZox2sAsATZs2hVgsxqVLl7hjKSkpaN26tVXajZFIJPDz8+PdCCGGtIFUXVCA5z/+iNzNmwG4/iIOW+rRowcWLlzIO/bpp5+id+/eduoRIfbFMAwyP/oIz3/+mUs9cGW6kwCi6tXZGVoPj5I6vd1dt05vhTF2MnnyZKZNmzZMdnY27/izZ8+YAwcOMIWFhYxKpWIOHz7M+Pv7Mz/++CN3zpgxY5h+/foxz58/Z27evMnUqVOH2bx5s9XayyOVShkAjFQqteAnQIhruhEVzTAMw1xv2Yp5vGIloy4uZhiG4f6tKqwVJ7KyspiXX36ZCQoKYtzc3JiaNWsyHTp0YJ4+fWqlntoPxVJijuK0NOZ602bMP61aM2qZzN7dqXQ32r/Ei6eKR4+Y661aM0qdmOBK8bYiccIuM7V3797Ff//7X6SmpqJu3bpcLdqJEydCqVRi8eLFCA0NRWBgIGbOnInVq1fjtdde4x6/fv16+Pv7Izw8HDExMRg3bhyvHJel7YQQ82lzuzyaNUXw9GlUvssCGo0GWVlZOH78OA4ePIidO3fi119/xZkzZxAUFGTv7hFiF4WnzwAAPKOjIPT0tHNvKpdGLkfTs0m8Y1ydXp2YUFXjrYBhGMbenXA2eXl58Pf3h1QqpVQEUuXx9mB/+hS3evREo0N/QBwWZtBelVgrTnh7e6OgoMAldxGiWErMUZSSAunevfBo2RIBw4fbuzsOQVu7Vp2XBzcX+1uqSJygRDdCiEWMrcy9HdcHAjc3CEQiKhJuoTZt2iAtLQ2NqsCCGEJM4RkRAU+dspxVnXYhmerpU6jz811uUFsRNKglhFiEynfZ1uDBgzFw4EBMnjwZtWvX5i2cHTRokB17RkjlU+flQSCRUEzRIZRIoC4ogCg4GKLgYHt3x67MHtROnjwZ//3vfw2OT506FevXr7eoU4QQ5yGUSFBw+gyEnh7wateOyndZmXaThdWrV/OOCwQCGtSSKofRaOAmkUAtlcKtjKpJVY2bjw8AtjIEU1xc5XKNtcxeKLZ161ajx7dv3252Zwghzkedl4fMefNwN/4tAFS+y9rS09ON3u7cuWPS49evX4/o6GhIJBIMGTKE15aXl4c33ngDfn5+CAkJwZIlS6zaToi1iQICkBrdnga0RhSeOYP0QYPx+OOq+3dY4XefvXv3AgDUajX27dsH3XVmaWlpCAgIsFrnCCGOTSOXw83PD/V27sC9dydwqQiUcmBdKpUKSUlJePDgAUaOHInCwkIA7CKy8tSsWRMLFizA4cOH8eDBA17btGnTkJubi3v37iErKwu9evVC3bp1uWowlrYTYk3a2VnaPcs4gYcn5LduQXH/PkLmzqmaubUVrRdWr149pl69eoxQKOS+rlevHtOgQQOmY8eOzL59+ypcg8zZUG1FQkpo69IWnj9v5544FmvFiX/++Ydp1KgRU6tWLcbb25thGIbZs2cPM2rUqAo9z6JFi5jBgwdz9wsLCxl3d3fm3Llz3LEVK1YwXbt2tUq7KSiWkrIYq3HN1WTVqXHvSjVZLaHRaJi0VwYy15u3YFR5eQzDuMbPxqZ1arWXvoYPH867FJaWloYzZ87glVdesfa4mxDiwLSzJl5RUXbuiWuaPHky3nvvPTx48ABisRgAEBsbi1OnTln0vKmpqVAoFIjQWUUeERGBy5cvW6XdGLlcjry8PN6NkNIIJRKkdniZq7ByIyISt+P60O5ZpRAIBAj9aBEaHNgPN1/fKvmzMTv57ccff7RmPwghTkK/Lq12z3GqdmAbKSkpOHz4MABwtWr9/PyQn59v0fMWFBTA29sbIp0c6ICAAO55LW03ZtmyZVi8eLFF/SZVC6NU8iqsKJ8+xe0ePanCSil0JxeqYpqG2QvFrl27hu7du8Pf3x9ubm5wc3ODUCiEm5ubNftHCHEwurMmt3r0pFkTGwsJCUFGRgbv2M2bNxEeHm7R8/r4+EAmk0Gl88YnlUrh6+trlXZj5s6dC6lUyt3u379v0fdAXI9GLue+Vj55wg5qCwq4Y+LgYKqwUgrezy6rZMLBWLurMnum9q233kJUVBSWLl1q0mIFQohr4M2aPHmC271606yJDU2aNAnDhw/Hxx9/DLVajUOHDmHhwoWYOnWqRc/btGlTiMViXLp0CVEvZndSUlLQunVrq7QbI5FIIKH/G6QMxjZzuRXbnd3MRSJB06S/qcJKKcr82VWVjXDMTdz19fVl1Gq1uQ93arS4gVRluTt3MtdbtmJSO3ViGIZh/mkbYeceOSZrxokvvviCadmyJePt7c00b96cWbduncmPVSqVTFFRETN//nxm4MCBTFFRESOXyxmGYZgxY8Yw/fr1Y54/f87cvHmTqVOnDrN582busZa2l4diKdFn6qIwV1gAZW26PxNlVhZzvVVrRvHokdF2Z2LThWJanTp1wvXr1601tiaEOAHV06fIWr0GUKkQNHESAKpLawu6G9jcvn0bkydPxtWrV1FQUIDr169XaJY2ISEBnp6eWLp0Kfbt2wdPT0/ExcVxr+Pv74/w8HDExMRg3LhxvHJclrYTUlHaqzyawkKIw8JKTTWgq0GGdH8mohdpGuKwMNzq0ROaoiIIJRJeCoL2a1dKSxAwjE6h2QqYN28etm7dijfffBOhoaG8tunTp1ulc44qLy8P/v7+kEql8KuKdeBIlaRNK1BmZuLB9PdQb+cOMCoVFyhd+k1GKQPEXqXfN8KSOKF9HMAuCnPVKgEUS0l5UqPbV43L5jag/dn9ExGJ5ikXjf4sneHnW5E4YfYUy19//YWGDRvir7/+4h0XCAQuP6glpCrS5ms1PX8OYUsT2DytFwtDXXtAWwScXA10eR8Qexret4Hw8HB88sknaNWqFVQqlcFGN1q0TS5xRQUnTwIMA68OHWgzFzNxG+EUFUFUIxhASTUETXExNPn5EAUHu1yFBLMHtceOHbNmPwghDkxTXAyhhwcXAD2aNLFzjyqJUsYOYE+sBB4mA4PWA3unAmlH2fYus8qdsTXHt99+i4ULF+K7776DQqEwOlEgEAhoUEtc0tP161F86TLCli5FwPBhNKA1A3cFzdMTjQ8dgionBwzDsGkInp4Qeniwx1ysJCMlwxFCSqUNcEIPDygzM10uAJZL7MXOyD5MZgeya1qwxxv2sOlM7csvv4w///wTABAWFob09HSbvA4hjkYtlaL4ylUAgHdMJzv3xrkZVENgGAg9PV26QoLZg1qhUMgVAtenVqvN7hAhxHFUyRIxuvmyikJArQQGrALWRpacM2i9zQa0AFCzZk08evQIANCvXz+bvQ4hjqYwKQnQaODeoAHEeut1qrwK5vbrll9U5eSwC8aKi/nHYruj0Z+HuJ+1s09UmF394OLFi7hw4QJ3279/P7p164Yvv/zSmv0jhNiRNig2S7mIRof/BMRiNE48hmYpF7lcN5eizZdVFgHyFwXfhW7Agff55+2dyp5jI3K5HAUvCs7//PPPNnsdQhxN4Yt1Ot6daJaWRzc2GbtvBK8aQvXqEAgEEHp48I+5uUEcGgr1i8WozjygBSyYqW3btq3B/aioKPTq1QvvvvuuxR0jhNgftx1udjbEISGuvZOPfv5s//8D3NyBC5vZ1IOGPfg5tSdX2Syndvjw4ahXrx7q1KmDoqIitGvXzuh5Fy5csPprE2JPhWfOAAC8O3W0c08ciJVy+42VX9QeK7p8GT6dO1u12/Zg1ZxaDw8P3L1715pPSQixE41MBuWjR5A0agRRUBAAF69Jq58/u64dO5B9bTPbrs2hHbX9xYDWdjm1//vf//DWW2/hzp07ePfdd/Hee+/Z5HUIcSQauRyerVqDKSqG10sv2bs7jsMKuf1cNQSd9ALtMWVmJmTJyS4xqDW7Tu3atWt592UyGX799VeEhYVhz549Vumco6LaisTV6dakzTt4ENX/9S/umLPnXJWJYYC8RyVvGgAwOw1w96rUOrW61q1bh2nTppn9eEdGsZQYwzBMqWt2qrRnd4HP25Tcn3kd8K9l2VP+9BMeL/oIXtHRqLtls4UdtI1KqVO7a9cu3n0fHx/069cPM2fONPcpCSEOQrcmrXvdutwx3X9dgu7gNCsVCKzDXtbT9es77OysLhukHOjKz8+Hr68vAOCtt94qdfMFGggSV0QDWiOURcD+Gfxje6eyscmCK0Ze7doBGg2KLl8Go1RCIBZb1k87ozq1hBAe7SyJtiatT48edu6RjehuopB9C6jekE0rqOT8WWNq1arFDWQDAgIM3uS1vyOqNENcBaPR4M4rA+HRrClCFiyAqFo1e3fJcWhzarWxaeBaYN/00mNTBaokuDdogJB58+DZtg0gNLt2gMOw6Du4e/culi9fjqlTp2L58uUm59PK5XK88847qF+/Pnx9fdGsWTN89913XHteXh7eeOMN+Pn5ISQkBEuWLOE93tbthFRF2koGAoGgpCZtdjY3oHKpSgdKGftmcGIlsPMNNr3gxEqg41Sg62x29sO/Fvtv19kv8tYqZ0ALANeuXeO+Tk9Px507d3g37TFCXEXx9X+guHcPBSdPwe3FVQrygtgL6DSdjUWvbmQXr762yXhsqmCVBIFAgGrxY+DZti23Q6QzM3um9siRIxg0aBA6d+6MBg0a4Pjx40hISMDu3bvRq1evMh+rUqkQFhaGw4cPo0GDBkhKSkK/fv0QHh6OuLg4TJs2Dbm5ubh37x6ysrLQq1cv1K1bF/Hx8QBg83ZCqiKjNWm793DNmrQGi8KiStq6zi65nCf2fDELYruatMbUrl2b+7rui/QPQlyZe+1wNL96BaqcHKe/BG518nw2DarPUuDJtRdVEC4AI7bwY5MFVRKUmZlQPnwIr+joSviGbIgxU1RUFPPzzz/zjv3yyy9MZGSkWc83dOhQZuHChUxhYSHj7u7OnDt3jmtbsWIF07VrV4ZhGJu3m0IqlTIAGKlUatb3SogjUhcXc18rMjOZ661aM8rsbKPtLiHjDMNk32KYRX4lt+cPrPb01ogTN27cYEaOHMmEhoYy7u7uTGhoKDNq1Cjmxo0bVuunPVEsJbpuREXbuwuO6cJWNj6tbccwGg3DfNmZvZ+8xfBchYxhtgzhx7UtQ9jjpZClpDDXmzZjUjvFMBqNxobfiHkqEifMTj9IS0vD0KFDeccGDx5s1iWx4uJinD17Fm3atEFqaioUCgUiIiK49oiICFy+fBkAbN5ujFwuR15eHu9GiKvRXQAmDg11vZq0SlnJ1w8vADXbAr/N5p9j400VKiIjIwMvv/wypFIpEhISsGfPHiQkJOD58+fo2LEjMjIy7N1FQqxKm8fv0nTjkLH7xlzeyf7bdhQgEADNXmHv3zhgeK5QBPRfyT9Wzg6IkubNIXB3hzonB8p798rvjwMze1Bbv3597Nu3j3fst99+Q/369Sv0PAzDYPz48WjcuDGGDRuGgoICeHt7Q6RTDzMgIAD5+fkAYPN2Y5YtWwZ/f3/upntpkBBXId27F7KLF7n7LlWTVj+vLLgpf+HFzOvsv9qFF6a80djYp59+ivj4eBw8eBDjxo1D3759MW7cOBw8eBBvvfUWli9fbu8uEmIR3Tx91dOnbB5/To7RdpdgLN/12m52O27eeTrxR/oASD/Jft16BPtvswHsv3eOGT5Wo6zwh3Whuzs8WrWCuHZtqJ4+rdj35GDMftdavnw5hgwZgu7du6NevXrIyMhAYmIifv31V5Ofg2EYTJ48GampqTh8+DCEQiF8fHwgk8mgUqm4gadUKuXK29i63Zi5c+di1qxZ3P28vDwa2BKXosrJweOPl0BTUIC632+BR5s2BoW6nZaxPLNzXwMxM9j2StxUoSKOHTuGP/74w2jbzJkzy127QIijM5rHH9vd8fP4K1BdgHdOaXHo1JqSuKNblUXsCXgEAAM/B7L+AQJf5NeHtAQC6gLP77IfxJsP5L+G9sN6/5XsANeECi51vv0GQk/7xz1LmT1TGxcXhytXriAmJgYMwyAmJgaXL19Gnz59THo8wzCYMmUKkpKScOjQIfj7+wMAmjZtCrFYjEuXLnHnpqSkoHXr1pXSboxEIoGfnx/vRoir0MjlEFWvjgb79sKjdWt4RkW5Vk1a7aIw7Uzsmhbsm8jpz4DOM+2+KKw0T548KXWRWJ06dZCVlVXJPSLEurQ7WjVLuYhGh/4AxGI0TjyGZikXuQ/VDqeC1QU4xuJQ5JvAX+tLqrBIH7L/nlhZcsVI4gNEvQX007kyU1oKgvY1tBVcru9lqyWYUMHFFQa0AMxfKGapyZMnM23atGGydRaiaI0ZM4bp168f8/z5c+bmzZtMnTp1mM2bN1dae3locQNxNdoFGgV/J9m5J1aiKCz5Wq1imKI8hslJs9miMGMsjRN+fn4WtTsDiqUk85NlzD9tIxiGYbh/HZaikGGOLClZfPX8QcmirCNL+HHHGHkhw2TfNlzApb+w689FDCMvMHxtXemnGGZZHYb57d/sfZWCYfZMZZis1JJzjy1nnzs3g11gVgaNRsNkf/01c2/CREaZm8tr0y4SttdiYZsuFNuwYQMGDRpktG3w4MH45ptvyn2Ou3fv4r///S9SU1NRt25d+Pj4wMfHBxMnTgQArF+/Hv7+/ggPD0dMTAzGjRvHK7dl63ZCqhrtAg3vDi6w37ruzIlaCaiKAQGAA+/zz3OgRWHGFBcXY9asWaXe5I44i0VIBagLCiH9+Wcu/jh8Hr+x2VbtpX5jM6G6ubEKGRuHfvug5FjaUeDaLmDQupJjDXsA3f7NXk2S57PtCpnhbHCdjsDs20C/T9n7V34CLmwBNvYDdxH+pXfYnNwb+wFN2YvwBAIBnu/ajYITJ1CUksJr06aJOMOVuwr/D9q4cSO+/PJLo22LFy/GxIkTMX78+DKfo27dumAYptR2Pz8/7Nixw27thLg63VxZ3QUa2moHTptLq5+3NmAVIBSzxcodYKewinjjjTfw7NmzUttff/31SuwNIdYn3bMbmsJCuDdowKUiOHzsEXuyMWRNi5JjQzcA0BvT6ObGCoRs+8k1/Dh07mugaX/g57dLHtd/JT+G9V8J/DDasNasUAhAyMY8Nwkbyxr2YPsi9mDP9aoGTDkLqIoAN53av6XkAHtFtkWdb76GOCyM/T0I1dx5zlKZosKD2rS0NERGRhpti4iIQFpamsWdIoTYltMu0CiP/qYKayPZQP/aZrbdQReFGbNx40aTzz19+jRiYmLMfq2HDx9iypQpOHnyJAQCAXr06IEvvvgCwcHBUCqVmDlzJrZt2waBQIDRo0djzZo13ELb8toJKY1nRAT8BgyAV/to58njVxaxH4q1GvYARB78xV2KQnamVffD9YUthotTu85mz9Mf6MbMMNwYhpsN9uT35eRqdrexlkPZHRH/Ws8/T1Vc0jeRB/++3nN5+mRBHBaG1Jc6oPHJE9yAVvn4MbfDpCgoCIDjTnxUOOrI5XLk5+cbrRaQn59Pl8QIcQLaWRGA3UnmdlwfNE485vwztQAbuAesYge0APvGoFbwF4E52KIwS/Xr18+i+tlTpkwBwKaGMQyD0aNHY/r06dixYwcSEhJw6tQpXL9+nXutTz75BB9++CEAlNtOSGk8W7ZErVX/Z+9umE6/usDAtezxM2uNVzXQ/XCtpbtjobs3O7gESgaZ3f4D3E9iUxLWtCx5nH6tWf2rUv1XsjO+ujO6gN6Vq9XAgVmGs75KGXDqM3g9/w0AwGg0TrvDZIVzaiMjIw3q02rt27ePt6kBIcQxCdzdcfetsbgREQlxWJhzb7SgX1NWVWyYP/vrO2AT2nQ4YMqBucpK5zLFnTt3MGLECPj4+MDX1xcjR47ElStXAADfffcdFixYgLCwMISFhWH+/Pn49ttvuceW106IPm1VA4esblAW3eoCr25kP0D71ABi3jOsrpL6Gz9XFgDav8MOZHnP6Wn4gbt2B2DvNP55+msA9PN710UZ5vfqn7M2wmgOsEbjBnSfB/flD6HMzASjVEJTVMRVpmiceMw5KlPAjEHtBx98wH2CV73IsVCpVNixYwfee+89/Pvf/7Z6Jwkh1iX76y/IkpJe5GU5wQKN0uguClMWsZf9Tq5y6E0VbEEgEJR/UhlmzZqFn376CVKpFM+fP8eOHTswcOBAPHv2DA8ePDDYgfHevXuQSqXltuuj3RkJwF94pHa2/wNPrrE7e/32b8A7CBBJ2NvAz0vOadgDaDmk/IGpln7NW1NjmNiT/7qA4YyuNge4jHO0v48bEZG4HdcHkMuR+nJH3Ihuj5sxnSGqXp2b+NAUFnKPcUQVHtQOHDgQS5YswcSJE+Hl5YWaNWvCy8sLkyZNwpIlS/DKK6/Yop+EECt6uo4NcgGvvcpboOFUtMFfW+Mx7xH7dcepJXUa/Wux/5pQp7Eqi4mJQVZWFgIDA1GtWjU8e/YMc+fORUFBAQB210Ut7df5+fnltuuj3RmJlnbhkZuz1X2/tJOdFXX3YuvFAoBGDex7r+Qc7WIvcz5c69eaLSuGKYv4rwsYDpz1c4CNnKNbL7jx4d/ZWdlDv6HZ+XNocvoUgJKJj8dLPzH5R2UPZm2+MGnSJDx8+BAHDhzA//3f/2H//v148OABV5KLEOKYtAPXOt9+A78B/RH0zjvOs0BDn8Hlt3ZOsamCo9FoNOjduzdiYmJQUFCAgoICxMTEIC4uDj4+PgDAm3XVfu3r61tuu765c+dCKpVyt/v379vs+yKORfdDszIri114pLMlq1N8qGYY4Paf7NeNe7P/GptZvbjVsg/XxlIS9GOYKTO6+udMv2h0cC0UqoFjnwBLQyEKqcnOyobUBJaGAseWcYNeZWYm8g4dgkbmuFe8zL7m6OPjg969e5d5jp+fH11eIsSBaC8zNT1/DrVWrbJ3dyynVgD9/48d0GoZzVtz7RlaS3Jqc3NzcffuXUyfPh1eXuzPadq0aVi5ciXUajXCw8ORkpKChg0bAmB3YKxduza3C2R57bokEgkkzvbhiViF0YVHPXo6/MIjnpw04FkGWyawflf2mPbDNcBf7HVtl2UfrvVjlrH7+q9rrKqL7jnSh2wusH6FBLEX29cXuHS0TtOBzjMgFEvAMAzujn0bTEEB8o8cgf/Agfz+mLN1sA2YvU2uKSxdvEAIsT5nqTdoFK+YeSFbe1G3mDng8JsqVNTkyZONHp86teSS4sGDB81+/qCgIDRq1AhffPEFiouLUVxcjC+++ALh4eEICgrC22+/jaVLl+Lx48d4/PgxPvnkE14t8vLaCQH0LnE70cIjHu0sbd2OgETnSoSxmdWWQ2z/4dqUGV3dY9UaAIcWsjnBN/8wfK7OM0rS0QqeAR0msjVwwebt+79IL5Xu2ct/rLlbB9uATQe1li5eIIRYjnfZ70W9QWVWltF2h8ZbFFbMHjM3b82JbN261ejx7du3c1937tzZotfYs2cPLly4gFq1aiEsLAxnz57F3r3sG9fChQvRsWNHNG/eHM2bN0dMTAzmzZvHPba8dkKAkvSm+5On8BYe6bc7tFsvBrWN+FepFWqFwYBVITR+IVyhVli3T+XN6OoeEwqB8Gg2J/gfnYFp/hNAJQfEXiXpaD6B7OYNwpJhov8gdna28MyZkvcQ/bUNz++z/55YaZc4LGBsOJ3qqukHeXl58Pf3h1QqhZ+zJbmTKkn/sh/EYue67Kdbk7FhD34xc91Lacoih9lUwdI4oR1Uvv7669i5cyfvyldaWhrWrVuHO3fuWK2/9kCxtGpR5eTgVrdYNL96hUuDciqZl4Cbh4BWw4DqDXlN7be2h+rFVrQigQjnxpzjHQMAkVCEc2/a+XtWFrMVHMKjSo7tHA08OMeWIGvSx/AxGg03uM14/Q0UXb6MWqtWwa/vi3OVRexAVlv/FmDj9KjtVonDFYkTTlrHhxBiKt5GC1lZuN2zl/NttGBspzAt3WLmLrQo7L332FXNxcXFmD59OndcKBQiJCQEa9eutVfXCDGL7OxZQKOBMivLObbE1RfWlr0ZodKooGJUZR/T2LJzJhJ7sANabc5rbjr79du/AW7u/HPvn2UXkNVoAfRlqx6EfrQIomrVIHwxuGR/h57AK58Bn7cpeax+abFKQjm1hLg43TcNcY0aznnZD2ALnevXW3ThRWHp6elIT0/H8OHDua/T09ORlpaGM2fOUPlE4nQKk5IAjQY5LzbncJrY42q0qVyKQnb3slc3sqXKvIP55wndgAH/Bzy/y54LwKNBbYiCg3m1hqEsAvbP4D/WTmsbbDqopbwqQuxPLZUi67PPoH5RaslpNlrQzcVSFrM7hZVTb9EV/fjjj/buAiFWIfs7CQDg/dJLdu5JBWjj0LbXgHPfAfIC+/bHUro5sD+8yebY/vy28RzYGi3Ywe7gL4CnqWysPfUZFBlpAHQWHZ/+HEg/ATSOA6ZdBBr1stvaBrPf3dRqNbZt24bk5GSDItvfffcdALYmISHEvnK++QY5X38D2flk1Pn2G+e47KedSejyPgABwKjZGrTaRWGD1rMDWm3g1O5hbgMKtQLu+pflyjhubdeuXcPUqVNx4cIFbrMDhmEgEAigVqtt/vqEWIPyyRMoMjIAoRBe7dvbuzum4eLQLDbtoNUwtg62kZx9kVDEpReIBCKDYwAqJV6USz+Va92L3Fpu69wX35fuOoaHyUD//4OmqADC7vPgDrDb6arVUGXnQBQ7B4idw72vaF7bBuHpVXZJBTN7UDt+/HgcOXIEffv2NVqPkBBif8rHj5G7dRsAoPq//uUcGy0YBNNVwMUXi8KAsmsy2oC7m7tdF3y89dZbiIqKwtKlS+Ht7V3+AwhxQG5+fgj/7xdQpKc7xy5iBnFoJTujqV0MpfNBulhVbBAPFGqF0WPGVNYHZI5269w1LUqOGWyvqzf4/eIlCD/MMaw13L07u+hYIkHTpL9LFgB2mWmXnFqzB7V79uzB9evXERoaas3+EEKsRCOXQxwaioa/HcDD2f+GT/dYe3fJNAYzCfZfFGbPBR83b97E2bNnIRTaNFuMEJsSenrCt0cPe3ejbLobBpg4o/kg/wGG7hmKnnV7YkmnJRC7iQEYn5U19gHZ3c0dSaOTbPt96Stt61z9agW6g19GA03uQ27RsSo7G7e69+AtOgZ0UhLEXmy1iIC6gGcA76W4GV0bXDE0O0pWr16dSrAQ4sC0ifzisDDUmDXLuepGC9zYsl26KmFRmNVrSFpBp06dcP36dXt3gxCLyM6dg6a42N7dKJ2xDQTuJ7FlrnTpzWiefHgSxepiPCt+xg1oy6L9gKxiVNBAgz1D9hg9z2axyJTtdblzdQa/jAbCda2Ara8CyiKIgoIgEIshfLFVNqCTkqDd/jisLTSMzjBTVQwoZXqLzKybc2v2TO2iRYvw7rvvYtGiRQgJCeG10WCXEMeg/dTs1S6ynDPtTHeGRK1mc2gPvM8/x9hMgpXpz6Ro603aU7t27dC/f3+8+eabBlfGdEt9EeKoFA8e4O6YeAi9vND4778gdHeA3FJd+qkGg9YD575mU55+fpt/rl4cer3Z64isEQkBKj5pIIQQod6hvJgjFAhxYNgBhHobXgW3SpqCqdvran8m2sHvwLXAvunsrmqn1gDd57GD2rK2P3Z3R+OTJwC8mJ2FEvjrCyB2js4is7VAzHtWi+tmD2rj4+MBsLvaaGeAaPECIfalezlHlZPzIpE/G6KgIIN2h6G7KEzsCaiL7bYoDDBeb1J/wYeolN2CbOGvv/5Cw4YN8ddff/GOCwQCGtQSpyBLYi+vS5o2dbwBLWCYarCmBTAtmd3YRT8O3Ulk41PnGbiQewNNApugWbVmFr28bswRQWT7ga5J2+uWMvi9tgtoMZitf570NzTFxSUpCTk5uBXbHY0O/QFxWBj3VKkvdWAHtxJfIHYOVE8fv5jRfcwuMoP13pvMjszp6ekWvzghxLqMfmru3sNxdw8ra4YEsOmiMFPeDDTQ4HHhY6OLwiprccexY8ds/hqE2JL6+XMIvbzg9XIHe3eldCIPNtVgTUv2/m+z2bgjEAKdZ3JxSKEqhrtnIACgXUg77uGmxgNjVRKMKW+gq30usxesmrS9rpHBb8uhwMlVEHZ5HzizHsLIN4Fjq4HOM7ntj8VhYbgR3R7+rX0RtvEoGI2mlBndOKu/N5k9qK1bty73dXZ2NoJezAQRQuxHd/cwY4n8DjdTa2yGRMvGi8JMSTXQMBoM+HUAksckG308IaR81ceNQ7X4eGjkDpSzrpvypFEDagWwd1pJ+51EdgDbXafevtgT7mJPsweXxioiVIRdFqzqDnbLqwjRfR4E7u7QyOVopn0fevIIjFIJTVGRzoxuNm7F9kDjw79DFFKT/Vas9N5k9kIxmUyGCRMmwMvLCyEhIfDy8sLEiRNRWFhocacIIeYRiES4M2QIbkREson8zrB7mPjFFou6KmmnMN1FG9ysiFAEkaDkJhTYt+qAUCiEm5ub0RshzkIgFsPNx0FK0ukuClMr2QVMBounesLdMxDtt7ZH5JZIRG6JRPvv2fq6+nFDd4BbltI+COvHHIelnYTQLixbF1XyM+s8k51UOZvEzcreiIjErV59AbkcqS93xI3o9rgZ0xmi6i/em0JqAttHAsoiq703mf3Te//993Hz5k0cOXIEDRo0QHp6OubPn48PPvgAX375pVU6RwipmPxDhyC/kQphtWoAnGT3MEWh8S0WrbgozFlSDYy5ePEi7/6jR4+wcuVKjBo1yi79IaQi1Pn5cPP1hbqwEG6OUGdZf7ZxwCrgwos62LqpBiO/B2A8x96aSpu9NSVNwdgHbptvFiP25KdpAFxFCG1veFcMnz7GrR5xaHz0METVS67oc+9Ntw9bda2E2VMQe/fuxS+//IKOHTsiJCQEL7/8Mn788Ufs2WO8PIW+9evXIzo6GhKJBEOGDOG1xcbGQiKRwMfHh7s9evSIa8/Ly8Mbb7wBPz8/hISEYMmSJbzHW9pOiLPyjYtD2NKlCJk1kwssGrnc3t3i0y3hIs/nLworq7yMBbSpBvozLrq0qQalPd5e2rZty7v169cPO3fuxPr16+3WJ0JM5ebri9To9o4xoAUMZxvXRgKnP4cCDNB9Hj/lqRKUNgA99+Y5XIy/iIvxF7m0KN0ZXXehOw4MO2D0+XRjXeSWSLTf2t56MUxZxE/TAAy2K2dLdRUBicshCg59ccUwiI33x5bx35s6z3qxVsI6V+LMnsZhGMagGLhQKATDMCY9vmbNmliwYAEOHz6MBw8eGLR/+umnmDFjhtHHTps2Dbm5ubh37x6ysrLQq1cv1K1bl6vIYGk7Ic5Gm4/EqFQIGD6M1+ZQKQe6lQ7USnZmJOY9ts3GO4WZUtXA3qkGpvLw8MDdu3ft3Q1CysRoNBAIhSXlmxyF2JMtUfVZK/a+QMilGphSzs/W1VDKGujqM9Znm+Xe6pf5KqsyjdgTiGGrs3Czsm5ioPN7EIp1dra08s5jZv8mXnnlFbz66qtYvnw56tati4yMDMyfPx8DBw406fHDhrFvvCkpKUYHtaWRyWTYuXMnTp8+jYCAAAQEBGDatGn49ttvER8fb3E7Ic5Im8PkcNUNdBnZSxy/fcC2DfkK0G4OYeGiMGdONTBm7dq1vPsymQy//vorYmNj7dMhQsqh/ZAtEApLCvLn5DjOglVlEVtzVU95H3yFAqHd4ob+c6s1argJ3WyeHsFjao1bnfN1Z2WFEg/jz2lFZg9qV69ejenTp6Nz585QKpVwd3fH66+/jlWrVpX/YBMkJCTg448/Rt26dTFz5kxuwJmamgqFQoGIiAju3IiICHzyySdWaTdGLpdDrnMJNy8vzwrfISHWpZ0N0daLdjgG206+KIfTsAfg4ceW1NE910yuVtVg165dvPs+Pj7o168fZs6caaceEVI2o+WbYrs7RmlBg00FPgf2zzI4raIffCs7brgJ7bRQ1JQatzq0H14q60OM2YNaHx8ffPfdd/j222/x9OlTBAcHW+2NdNmyZWjRogW8vLxw9OhRjBgxAr6+vhg6dCgKCgrg7e0Nkc4CmICAAOTn5wOAxe2l9Wfx4sVW+d4IsRbd2Q7d7QlFwcEG7Q5Ddy9xLb1tJ63BlVINqE4tcTa6C4WUmZm4HdfHcUoL6s82ukm4RWG6nOmDrz6bbxZjSo1bO7H4OxUIBKhRo4Y1+sLp2LEj93WfPn0wYcIE/PDDDxg6dCh8fHwgk8mgUqm4galUKoWvry8AWNxuzNy5czFrVsknuby8PNSuXduq3zMhFVXm9oT2ng3R4tWC1ABqecle4lpWrHRgbJbamVINSnP37l3s2LEDDx48QHh4OF5//XVerXBCHIlQIgHDMCg4fgK+sd0cr7Sg/uyikP3XGT/4Okp6hKOo0G+sTp063NeBgYGoVq2a0ZvVO6mzIK1p06YQi8W4dOkSdywlJQWtW7e2SrsxEokEfn5+vBsh9qadDWmWchGNDv0BiMVonHgMzVIuOkbVA91akAwDqIqM1IK0rNKBQs0v5m7sapGjVjUw1ZEjR9CiRQscO3YMarUax48fR8uWLXH48GF7d42QUgkEAvjGdmO/dqTSgveSgHPfsjFJx/Pi57yKAxfjL+Lcm+cMYowj0a+SkDwmGaHeoVyflyUtQ5cdXbA/bb9TxDqrYCrg5MmT3NeJiYml3kyhVCqZoqIiZv78+czAgQOZoqIiRi6XM8+ePWMOHDjAFBYWMiqVijl8+DDj7+/P/Pjjj9xjx4wZw/Tr1495/vw5c/PmTaZOnTrM5s2brdZeHqlUygBgpFKpyY8hxBaerF7N/NM2gmEYhvvXISgKGebIEoZZ5McwW4YwTG46w/y5iGFkz9jjCtmL82T8+2aI/j6aidgcwURsjmCit0QbHIvYHMFEfx9t8bdUUdaKE1FRUczPP//MO/bLL78wkZGRFj2vvj179jBt27ZlvLy8mLCwMObLL79kGIb9Pl5//XXG19eXqVGjBvPxxx/zHldee1kolrqugr+TGLVczqiLixmGYbh/7W7bCDYu/T6Pd/jq06vMxEMTmVMPTtmpY9b3rOgZ87z4ub27YbGKxIkKDWp1bd++3ejxHTt2mPT4RYsWMQB4t27dujFZWVnMSy+9xPj6+jK+vr5M69atmW+//Zb3WKlUyowaNYrx8fFhgoODmcWLF1u1vTwUiImj0Gg0TP6JEwzDMMyNqMofuJVJIWMHtIv8Sm5/LmIYeYHeeYUWvUzE5gim1aZWTKtNrZg2m9swmQWZRs+Tq+QWvU5FWStOBAQEMGq1mndMpVIx/v7+Fj2vroMHDzK1atVijh07xqhUKiY3N5f5559/GIZhmPj4eKZPnz7Ms2fPmNTUVKZ27dq8SYDy2stCsdQ1yTMymOtNmzGpHV5m1EVF9u5OSYzJucPGpOxbDPP8QUmzSmGnjlWOGzk3mNXnVzMajcbeXTFLpQxqfX19jR4PDAw09ymdBgViYm8alYrRKJXcfYebDdF6dpc/qNV5I7FUsYr9XnUHta02tWLabWlntdewhLXiRGRkJLN7927esb179zIREdabmY+OjmY2bNhgcLywsJBxd3dnzp07xx1bsWIF07VrV5Pay0Ox1DU9/d//mOtNmzF3337b3l3hXw26+eeLq0UJ3NWhO8/vMD1+6MFsvrrZaQd9ZSlWGn9PqOwP+ZaoSJyocKKLtpwVwzDIz8/nbbaQlpYGsVhsfi4EIaRc2pXDyqwsyG/dgk9MTKWXTTGJUgbse49/zIJFYfoLHSRuxr9XDWOtSuOOYfny5RgyZAi6d++OevXqISMjA4mJifj111+t8vyFhYVITk5G//790aRJE+Tl5aFLly5Yu3YtHj9+bNUSiVQesWrQFBRC4OEB37i4yn9x3cWpBrWxVwK/jINi0Fq4v4hB9f3r48iIIwBcczGVRCThlTgE2MVlxhaTuYIKL+0LCAhAYGAgZDIZ97X29tJLL2HatGnlPwkhxGzaqgfiGjWgyHCgXaV0F3opCvm1IGdes3hRWGlb3epuHSkSiKxfvsbO4uLicOXKFcTExIBhGMTExODy5cvo06ePVZ7/2bNnYBgGu3fvxp9//onbt29DIpHgzTfftHqJxGXLlsHf35+7URUZ11Rj5gw0OXMa/oMGVe4L6y5OBQCBG7tjoTb2rIsC7iTC3a+WbbeSdTDaEofcTWPaZg2lLZJz5MVzFY7+6enpYBgGHTp0wNmzZ7njQqEQwcHB8PAwsmMEIcSqtBstBI54zc49eUF3+1uxJyAU2WT7W936s65QqstUDRs2xLx582zy3D4+PgCA6dOnc2XCFi9ejMaNG+Pjjz+2aolEKo9YdQi9Krl2qf6srHYL11pRwCtrgM/b8k632VayTqq0DSWcbZa3woNabdB78uSJ1TtDCDFOt1i5KieH3WghOxuioCCD9kpX2psJYPb2tyZtdevExdFNsWHDBhw4cAB79+41aBs8eDAGDhyI8ePHW/w6AQEBvHKNulq3bs2VQIyKigJQeolEY+36JBIJJI6UIkOs7sHMWXAL8EfQ+PEQ16pVeS+sv2PhmhbsDG2n6cBPb1VeP5xUaTsxOtvg3+zKwq+++iqOHz/OO5aYmIgRI0ZY3ClCCJ825eBGRCRuxXZnN1ro3gM3IiKRGt3evrm02jcT7SW+NS3YfwGzt78tLdVAn6vlz+rauHFjqTsZLl68GN98843VXuvdd9/FunXr8PDhQxQVFeHjjz9Gz5494efnh5EjR2LhwoWQSqW4desW1q1bxw2mvby8ymwnVYumqAjha1Yj6N13ATc7bOOq3bFQq/9K4Mxafm3sBt0rv192pp+ipf3Qr5+GoJ+m4IzMTj5LTEzEzp07ecdiYmLw2msOcjmUEBfC23by6VPc7tHTcbadBNg3k4GfA5/pzNBZuP2tKVvdulr+rK60tDRERkYabYuIiEBaWprVXmvOnDnIzc1F27bsJdru3bvj++/ZrUPXr1+PCRMmIDw8HJ6enpg6dSri4+O5x5bXTqoOoacnUqPb2283Q2URf8fC32YDr21mv9amPb3YEreqxBLtBg36xwDX/J7N/o6EQiGUSiVvgYBSqeRVQyCEWIdQIsH96dNReOIkmqVcdIxtJ3VXGSusW+lAX1XKn9WSy+XIz883mp+an5/PqyJgKTc3N6xatQqrVq0yaPPz88OOHTtKfWx57aRq0eb7VzptGpR2VvaVNcD+mWzqgU4alAwMiotzq0wsMfb9lJZqYIyzDf7NTj/o2LGjQdmWTz/9FB06dLC4U4QQPtmFCyg49CcYDRtd7L7tpO4qY3kBcGq12dvfmrKS1tm3ujVHZGQk9u3bZ7Rt3759vDJahNiL7nbcysxMLt/fWLtNib2AzrOArrOBVzcCntXYD9W1onhpUN9d/Q7df+yOYXuGGUzCuWosMcZYqoFumoJQIOQmEpxp62Cz3xlXrVqFXr164YcffkDDhg2RlpYGuVxO+5ETYmUMwyBr1WoAQMCQIVwqgt1SDvQXhg1ezy7GANiKByJJhSodlDZroD9DIBSY/RncKX3wwQd4++23IRAI8Nprr0EkEkGlUuGnn37Ce++9h40bN9q7i4Rw+f6MSgVGreby/QVubhCIRJWbipD0JdB2FJC8Ceg8gz2mtzi1X/1+SH2WisENB0OgXcRaxZlyJezms5sYuW8k/CR+ODjsoMN+ABAwFuQLyGQy7Nu3D/fu3UPdunUxYMAAeHt7W7N/DikvLw/+/v6QSqXw8/Ozd3eIC+M2WsjMRNqAV9Dw4EGIQ2rYu1vsDO3ON0oWhDXsAQxcC/jUYAe1AD89oRyRWyK52QKhQIg/hv+BUO9Qg/Oc6fKgNeLEl19+iTlz5qCoqAhBQUHIzs6Gl5cXli9fjokTJ1q5x5WPYqnz41VmefoUt+yV7//8Plu2i1EDE08BoWx+f2kxQ66Wl7qBS1WgG3MBwF3obrSSjK4/7/6JTjU7wVtcueO8isQJi65hale+EkJsQzsL0vT8OVR76y3HGNAC7MzHgFXA2hcLmdKOAgJhyYAWMHlAq8/VS3VVxKRJkzBmzBj89ddfePr0KYKCgtCpUyeutiwh9qY7YBUFB9sv3z/pK3ZAW78bN6AFnLPWamUw50pY77q9AQA3n91Ebd/a8BRZvl7C2iwa1P71119ITExEdnY2Lzdl9erVFneMEMLSLryo/q+37dwTHcoi4MD7/GMmLAwzdabVlUt1VZSPjw969+5d5jl+fn605Syxm/xjxyD08oJ3hw6Vn++vvSLEMEDjOGDY/wxOcbZaq7ZmrCKC9nh58XnBqQXYk7YHizouwqtNXrVVF81mdpLaF198gZ49e+Ls2bP44osvkJ6ejg0bNuDx48fW7B8hVY7uwgpV9ouNFnJy4PZiFXylLbzQpV3sxTAvcmpXmbUwrKpudWtrVHWG2AvDMMj6dAXuvf0vqPPzuXz/SqG7YLXvJ8CILcBfX5Rsk0uMKm3gasqEQ5PAJpAIJXiU/8ja3bIKs985PvvsMxw8eBDdunVDYGAgdu3ahd9++w0//fSTNftHSJVjdOFFbHf7LLwA+Fvg3jkO1O9q0Ra4VXWrW1uiBS/EXoqvXoMiIwMCDw82BQmVlHJQ2k6G2jz/LrPMToEipRvZdCTiWxrWoXaUeG32oPbJkyfo1q0bALZmLcMw6NevH8aMGWO1zhFSFfE2WsjMxO24PvbbaEH/jaP/SuCH0WybmVvg6qL8WUKcnEAAn27dIPT3g5uPjRcQ6S4+NbYtrkAINOrNfbhOl6ajvn99p6u16sgkIolD5yib/ZsNDQ3Fo0ePULNmTdSrVw+JiYkIDg6GUFi1yu4QYm1CiQQFp04jc+FCND521L4bLei/cayLYo837FHhLXCVGiXEQrHBccqfJcR5ebZqidobvrJ9CozuFSOxJzvAvX8WGLQOWNMSEAihmHkV7n61uIfU969vUf4oMc6Rc5TNHtROmjQJSUlJGDp0KGbNmoW4uDgAwPz5863WOUKqKp/OMWiwexcAB9hoIe8hO0OrHdACJm2Bq/+moR3Q0qyJ9VFOLbEHdX4+hN7eEAiFtk2B0b9i9MpnQPJGIGYG8POLBbQCIdz9ahnMIrq7uSNpdJLBU9KA1rZK+9Bg6w8TZr+bzJw5k/t69OjR6Nq1KwoKCtC8eXOrdIyQqkabVqCWyeDm5QU3f3/7bLSge4lP+gDwqwnsHM0/x4RKB/qldIQCIQ4MO0CzJjYwb948e3eBVEFPPlmGwrNnETp3Dnx79bLdC+lfMfq8DTAtGfhrfcmC1UHrARiZRVTbrluEZawcmL1KqVk0RaJSqZCUlIQHDx5g5MiRKCwsRGFhYZXYgIEQa9OtSZu9YQOCJkzgBrKVN6DVucSnLAI8A/n7qesuxji5qtzFGLw3GAaUP2sGtVqNbdu2ITk5Gfn5+by27777DgAwd+5ce3SNVGEauRw1l30CZWYmlJmZtn9BsScwYDWwNoK9/9ts9oO1QAh0nlnhfH5iPt2rbdrJCmPskaZg9qD2xo0bGDhwIIqKivD8+XOMHDkSR44cwY4dO7Bjxw5r9pGQKkNbk9ajRYvKf3H9S3wDPwfOrGUv8QFmVTrQR/mzFTd+/HgcOXIEffv2hb+/v727QwgA/odwUajh7n9WpywCDswquX8nEQpVMdy701WKylRajrKxrc71VcZW52YPaidPnoz33nsPU6dORWBgIAAgNjYWU6ZMsVrnCHF1umkFyidPwKjVUD55Ap8uXQzabU7/Et9nJbvyoOvskgGskUoHlD5gO3v27MH169cRWhkDB0IqQPsh3OYl5bQfuHWvGO17D+6egdxgSjuQopx92yotzhvMyuopa0bXmu8fZv+2U1JScPjwYQAl/6H9/PwMLo8RQkpnrCbt7V697VeTVihmZ2h1B7Tt3wHc9VKK9FIO9POn6A3GeqpXr17ufueEVAbeh/DMTHZjmOxsiIKCDNqtSvuBGyi5QjTyewAlgymqee14dOO/SCBCqHeozfNszX6HCQkJQUZGBho0aMAdu3nzJsLDw63SMUKqAoeqSatRszMi+97jHzdhURhAmyrYyqJFi/Duu+9i0aJFCAkJ4bXRYJdUJqMbw3TvYdsP4Wolu0vYS+/wrxDpxSMNo0GfX/rAXeBucOmb4k3lKiv+2zrP1uwEh0mTJmH48OHYt28f1Go1Dh06hDFjxmDq1KkmPX79+vWIjo6GRCLBkCFDeG15eXl444034Ofnh5CQECxZsqRS2wmpLNoBa37icYjDwiq/Jq3u9reyXDaH1oztb/VpN1Uwht5gKiY+Ph7bt29H06ZNERgYiMDAQAQEBHBpX4RUFu2H8GYpF9H42FFALEbjxGNolnLRsu1x9WOLqrjk2PmNQPpxoPApICoZyBorY6dhNGVeAie2o7vVuRBCDN492D79MPeB06dPh0gkwty5c6FWqzFjxgxMmTIFAwcONOnxNWvWxIIFC3D48GE8ePCA1zZt2jTk5ubi3r17yMrKQq9evVC3bl3Ex8dXSjshlc03lt2dr1Jr0upWOrh7Bqjdwaztb1UaldG0AloUZh3p6en27gKp4rRXjBilEvIHDyBp2BCioCDrfAjX31RBJWdnZ09/zh5TFACvbmTLd+nEIW3aI6U42Z8jbXBh9m8/JycHEydOxOTJkwEAmZmZ+OSTT9C4cWPIZOXP6AwbNgwAm5urO6iVyWTYuXMnTp8+jYCAAAQEBGDatGn49ttvER8fb/N2QiqD9k1ClZMLeeoNeHfqVLk1aY1tf/vjiy2uTdj+VjdYad9E6M3FNurWrct9nZ2djaAX+YuEVBbdSge3usWi7nffwrNtW8s/hOvHoUHrAUYDXNjMj00/vw3cSXxRvmsGzmSloKZPTdT0qekwg6mK0GgYCATsBTKh0MaL7CpBaT9rY8dt/T5R4fSD5ORk1K1bFzVq1EBYWBjOnDmDL7/8Ek2bNsXdu3dx9OhRizqUmpoKhUKBiIgI7lhERAQuX75cKe3GyOVy5OXl8W6EWEL7JiGqXg0PZr3P7sxTmTVptQsvtOkF66LYfwGTtr/VLgyL3BKJqO+juPypi/EXudu5N89BoVbY/ntxcTKZDBMmTICXlxdCQkLg5eWFiRMnorCw0N5dI1VISbnB5vBo0YL3Idxs+nFoTQtg33Sg03R+bLqTCMUHN4Hu8wCxFzrV6oR6/vXg7uZuNMY4+oBWWazC7xuuQlmsgkZTdXYD1M7o2vJ9osKD2g8++ACjRo3ClStXMHr0aLz66qv47rvvcPz4cezduxcvv/yyRR0qKCiAt7c3RDqfAAMCAriqCrZuN2bZsmXw9/fnbrVr17boeyQEKHmTCH7vPbj5+lZ+BxSF7CyILhO2v9XSJvwrNAr0+aUP2n/f3uAcR35zcRbvv/8+bt68iSNHjuDRo0c4evQobt26hQ8++MCqr1NUVIRGjRohICCAO0brE6ou3cGqKieHLTf4+DHqff89BGIx12bxh3CxJ7cbGAB2IKtRAq+sKTkmEMLdO5j7IK29td/a3qlijHZA+8vKZNxJeYpfViZXqYFtRWZ0zVXhed8rV67gzz//hEgkwtKlS/H5558jOTkZYWFhVumQj48PZDIZVCoVN/CUSqXwffGmb+t2Y+bOnYtZs0qKPufl5dHAllSYbloB9ybx5AmqvT7KoN0mdLe/BdgyXb++wz/HxEoH+jSMBirQAg1b2Lt3L65cuYJq1aoBYCvP/Pjjj2jdujW+/PJLq73Ohx9+iLp16yI7O5s7RusTqi6j5QZ7x1m/0oGyiI07Wg17sKUF9880ONUeO1RZi+6A9lkmm6L5LFOGX1YmY/jsKIg9RC6RimBvFZ6pVSgU3GDQ09MT/v7+VhvQAkDTpk0hFotx6dIl7lhKSgpat25dKe3GSCQS+Pn58W6EVJT2TeJGRCRuxXbnatLeiIhEanR7Gw9oXyzGUBYBahU7S3tylUmVDiiFwL4YhoFQyA/VQqHQ6OpvcyUnJ+P333/Hf/7zH+6Ydv1BQkICAgIC0KRJE279gSntxLnZrNKBLqWMH4dmXAUGrjWswtKgu+WvZWcCAXB0yw1uQKv1LFOGo1tuAGDAMEyVmbW1lQrP1CoUCqxdu5a7L5fLefcBtjJCeVQqFXfTaDQoLi6GUCiEl5cXRo4ciYULF2LHjh3IysrCunXruMtatm4nxFZ0a9Kqnj7FrR49K6cmrcGisP8DLn5v8va3tLGCfb3yyit49dVXsXz5ctStWxcZGRmYP3++yZVmyqNSqfDOO+/giy++gEZT8gstbf3BJ598YlK7MXK5HHKdwRCtT3BcQokEmuJipPXth8aJx2xTblDsBXR+cRW041RA4gtoVIZVWF5stODMGAboEd8Mz54U8ga2gWFe6Dm2OZTFahzdcgM94ptxs7bGFpSZusjM1RajmarCM7Uvv/wydu3axd1eeukl3v3du3eb9DwJCQnw9PTE0qVLsW/fPnh6eiIuLg4AW8PW398f4eHhiImJwbhx43iXs2zdTogtCCUSPPz3f3AjIhKi4ODKq0lrsCisHXBqDXD6M6DzzDK3v9XSXvZTMSooGAUtDKtEq1evRp06ddC5c2eEhoaia9euCA8Px6pVq6zy/CtXrkRkZCS6du3KO07rE4h0716oXqSj2Kzc4D97gbajgKQNgNANEEkAN7HRjRZ0a6GKBCKn+iAtFArw7LEMQ2ZEIjCMTQMLDPPCq/+JBqNhDPJs1WqNwYIyUxeZVeXFaALGmtewqoi8vDz4+/tDKpVSKgIpl3YGVl1QgJsvdQBEIjS/fIkrkVMpivPY4uXr2pUcm3kd8K9l0sMjt0Tyctnche5IHpNs7V46tIrOfFg7TjAMg6dPnyI4OJir0Wmp27dvo2fPnrh48SKqVauGxMREDBkyBM+fP8fFixcRFRXFSzk7fPgwXnvtNTx79qzcdmOMzdTWrl2bYqkDYjQa3HllIBQZGWjy1xm4+fvb5mrSN72AB+fYtIOot4yeklucC2+xNyRuhq/tSOW7yooRDMPgx0/OIaS+PzoMqo/EranoObY5N6DVnb1t/0o9tO1RmzuuHfxqNAx+1TlmLBdXP3e3tPOcSUViqdk7ihFCTKPNpXXz8QGEQlQfO9Y65XDKortDj0IGuImA3/RWy++dyubYluGvh38ZPe7qGytoNPz8NkeY+RAIBKhRo4bVBrQAcOrUKTx58gRNmjRBUFAQBg8ejLy8PAQFBSEvL4/WJ1RhBSdOQHHnDoReXoCbGwAbXE2S5QKPLgJCEdCol9FTGIbBpMOTEP9bPG4+u2nQ7kgD2rJixMObz5F9vwCpf2XCzU2IvhNaQSxxM8izbdm1Flp1qcUb6NZsHAiVQsMNaIGSRWa6r6XRMFCUshitqszY0qCWkEqgLd8ladoEQVOn2LYmLW9RmBIAw943Y1FYx1odATj3Zb+K0n9z0l4GrMwyPHXq1OG+DgwMRLVq1YzeLDVixAjcvn0bKSkpSElJwTfffANfX1+kpKSgY8eO3PoDqVSKW7duYd26dRg/fjwA/voEY+3EueVu2gwACBgxgv1AbgtpR6GYcRn4MMfgqpE2Ft3Lv4d0aTrS89IR7Blsm36UQ/9DrrH28mJEyuF7AIBmncLg7imCQCDg8my16QhCkQDdRjXB8R03uUEpd2x7armLzAQC4FgZi9Gs+HnYYbnuOxMhdmS0fFdmJhr88otBu1XpLwobsJrdncfMRWFCgRAHhh1wyl17TKV7yRAA79Jd9XBv3mVAoHLK8Gzfvp372tR1Cubw8vKCl1dJmTdtakN4eDgAdv3BhAkTEB4eDk9PT0ydOtVgfUJZ7cT5aGNT+Bfr8Wj2v1FtzJu2e7G0Y3Bv/Sov5gBsHEoanQQAqOtXF4eGH8K1nGsI9Ai0XV9KoR2wlraIS6NhoJKry4wRCpkKj249BwRA254leeRCoQBiDxGGz47iHn/ut3TegjKNisHxnTfR7Y2m5S4y6zm2OWLfNH5ej/hmYBi4/MCWcmrNQDm1xBT6NR4hFlu/xqMxyiJg5xslO4QB7IKwrrPZ2rTceTKju4VVpfxZ3Tcs/fw2oUiAiWtj8fv/ruJOylODxzaICEbfCa1KTQewVpzYsWMHXn/9dYPjO3fuxKhRo8x+XkdAsdQxVVq+/4H3gQGreDFHKBDij+F/INQ71OD0yv4gXVp+qkjiBpVcjcStqYh7pyV+31B6jOjzbksIBAIo5Wrcv56Lhu1qlPo62oGz9vn1c2p141NFjg19vx0kXmLKqSWEmKdSajyWRn+HHgBo/w5/QAsYHdAa40r5s7qXEXXfsDKuZkPszs9v42ZIXm/CXR7U0p35sLUJEyYYPT558mTbvzipkrTpUjY3wLCChxBChHqH2n33sNI2S7h09D434Lx9IQvnDqTzUgi0AsO80OOtZlAWq/H7hqtgNAzqRxhPn9DO2Pad0ApiDxHc3ITcDG6DiGB2IO3uxjumP3jV9u/nT89DIBRw5w2ZEYlz+9ORn1P2+glXQYNaQmxAKJHgycr/Y8t3BQXZtnyX7qIwtdpwhx7ApEVhO//Zab0+OSDdXFmVQs17w9K9xKf75nTtxENcPfkQw2dH8crwVMZq4ry8POTl5YFhGOTn53P38/LycPHiRYh1tiolxBK6H7KVWVncbofG2itEKSv7fhl0ywiqGBUvPaEyGNsswdgirnP7M3Dp6H2DGDHsgyho1IalukrLyxUKBRAIBFxM0R/oCoUC/jEji8wAdmB7ZNM/EHu4oe+EVrh5/gmuJD5E+uVsg7zg8nKFnRENagmxIm3w18hkyN24kZvxsFmNR/1FYepis3cKG9WcvZTtKovCKjIrC7AD2LP70zF0Vjvem1PbHrUhkrjxZk0qozxOQEAAAgMDIZPJuK+1t5deegnTpk2z6euTqkN3t8PbPXtZZ7dD3dhk7P6tP4GCLACGMccRaDQMuo1uWuYiLq1z+zNw6/wT3iwqAOxadcGiKgT6A13dY/qLzLS0V5EA9rx6rYPQOrYWmkSHmFXz1tk4xv8eQlyE9s2h6flzqPnpcsjT7vDKd1l9hpa3KGwVcGELLQqDYa6sbn1HAKUuvHh06xncxA0xfHaUwcIQgYcAfSe0qrQdetLT08EwDDp06ICzZ89yx4VCIYKDg+Hh4WHzPpCqQXe3Q+WTJ7jdq7dlux3qx6ZB69mrRdo8/84zge0jATBQzH9kNObYi3YB2O3zT5CZlochMyKx+7OLRhdxaQWGeaFxdAhEEnZ2FAB+33C11CoE2nMsYWyRmbGrSH5BnnjplQb4dRV7zrMnhQapC8+eFDp9LVstGtQSYmXa2Vl/vW1MrV7tQLtT2MNk9s1ibWRJW9fZFdopjO04MODXAUYXhTn6gLa0CgbSp0UQu7vh9/9dNZiVBYChs9ph1+oL/EUg7mxNTv0BrPbfylo9XLduXQDAE53LwITYgm5sEoeEWJ4upR+b1rRgj3eeyd6e3QUYNRDxJj5I/AABntXxTpt3UNu3pDKAPbbh1v0w3O31JshMy0NhnoL7kKt71aasgaRGw5Q6+LVmFQLdga3+h3Dd70c7oAVKat7uXmM4i6xdBCcUCszamtcRUPoBIRYylo+m3VpSv936L64G+v8f/1gVWxRmTq4soJ2VFRpNKzB22c9eXn31VRw/fpx3LDExESNGjLBTj4grYhQKMEolACulS4k9gVfWlNxv2APo9h92i+6A2kDX2ciOnY3Ehyew6/YuuAtLPjgr1IpK34Zbv9bs7s8uosOg+qhey6fcRVz6M5y6g01b5+Iby73V0s8LLq/m7a3zT6CSq506TYEGtYRYyFg+2q3uPSzLRyuN7kKL4jxAKDRrpzBnZq1cWd0VxcbeEBxFYmIiYmJieMdiYmJw7NgxO/WIuKK833/HrW6xUD+XWqdCi0IG7J9Zcr//SjYN6sRK4Md4oO0oBOydgW8yn+B9/7YIcfflTi3typCtrhiVVulg16oLUBa/WBdRziIufboDW1vn4pf2IVw/77asD/ntX6mHxtEhvIVtKoUaiqLK3XjGUjSoJcRCuuW7Gh36w3blu/QXWgjdzN4pTMvZFoXpz8pqA66rzMoaIxQKoXwxg6alVCpBJcaJNUn374c6Nxe5W7cCsDBdSikDTunFpotbgY5TS2LUuiiI7hzDS7ViMHbA1yZfTbIFY5UOgLJ34jIlbpgy+LUlYzPGj249g8hdyDvW/pV6BpvMcFvz/p/pW+46QjUFx34HI8SB6S6euPPqa1Dcvo1mKRdtU77L2MKLc1+7/KKwysiVdXQdO3bEJ598giVLlnDHPv30U3To0MGOvSKuRJWbi8LTZwAAfgP6W/6E986yA1igJBZ1+w9wPwkYtA5Y0xIygQAja4aiU70WmCUUwgb7K5ZLd1cwW+3EVdm5+MZeXz/vVhsLh8+OQuLWVLQfUJ+3sE2bpqAfX4HSF7uVtvNaZaOZWkLMpE07EEokkN+4AeGLnU5sUr5Lu/BCO8uxpgWbm3b6M3bhRQUWhakYFRQaBQb8OsDoSznSgJY3K+tiubKmWrVqFb7//ns0adIE/fr1Q5MmTbBp0yZ89tln9u4acRF5Bw8CajU8WrWCpH59855Ee2Wo6DlwYROgLARensSPTbU7AHvZUnSnPT2Q4S7GiTu/wV2ttvh7qChefJGr4e4pwrD3K78edWUoq+Zt3DstuYVtpqQpGNt4Rj8f2Z5pCjSoJcQC2koHfn36oNaKT3nluyymX6ic0RjuwGPCorDSipY72qKw8nJlj7lYrqypGjVqhOvXr2PJkiXo0aMHEhIScP36dTRu3NjeXSMuIm//AQCA3yvGP+iWSzc16n4S8MpnwPmN/FiklPFqaHcedxprBWF4L+sxBKdWV2hjBnOUFl+4/FG5GmLPyq9HXVnKqnmru/itrDQF7Za7Ygk708swDNRqjdF8ZHsNbGlQS0gF6A5WVTk5bKWDnBzUWvV/8H75Za7N4pQD3TcJhmEXXTAadq90XUYWhennzzp6nizg+hUMLOXl5YWRI0di9uzZGDFiBLy9vct/ECEmUEulkN++DQgE8OtnRuqBdrB6YiWw8w2gekPg57fZ+7q5/dqrTV1ngxm5DZ7VG6L763vQN2rKixQF2+XUlhVfgJJBmEqu5mrNutKA1hTGFrbpb807fHYUJF5iQAAoilQ49PU1CIWCMvORgcrNs3X8dztCHIg25YBRqcCo1Wylg9juELi5QSAScQXMLWKwqcJqQCgCLmwuWXihW8z85KoXKQfsm4J+/qxIIMK5MefsUvfRFLqzJlUpV7Yi/vrrLyQmJiI7O5u3QGz16tV27BVxdhq5HG7+/mh86iSKLl6EOKRGxZ9Evybtuij2eMMeBrn92vSo5JzrWH52OV5p8ArGlpIuZS2mxBeAnysqEAjslgNrT7ppCrqxVPcYwzBQyFQlcfiAV6k1eXuObQ5lsbpS82wd412NECfB23knMxO34/pYtvOOMQabKkSwbxCvbWbby1kUBvA3VdBAg8eFjx1qUZjuAg2VXM2bNTFnty8tV3wj+uKLLzB79mz06dMHBw8eRL9+/XDo0CEMHjzY3l0jTkQbm3RjlO4OiLpXmipM7Ml+0NZusgCw9/XikkKtgLvYC9Gh0fh50M/841aMQ+bEF2tvjOCsjC1s0x5jGPbnqR3QAuwWwQAMNqSw165llH5AiIm4N4XiYmSMfhPisDDrVTrQzycTuvELl6cdBdQK/iKwMhaF8frNaBxqUZh25qS0S1dVJVfWVJ999hkOHjyIXbt2wdPTE7t27cJPP/0EibV3qCMuTXdhqy7tugCLKIvYK0e6jKRGaa8iRW6J5G7tt7a3+oDW3PhSVWKKuUorfXZufwZunX/CpSnoD2gBfp6tWq2xWUoCDWoJMRH3puDhgTr/2wDASpUO9OvPquTsTbdwOQD8+g4AvYCrl4d2+elloy9hz0VhpS3QuH0hC+cOpPNW3WpVlVxZUzx58gTdunUDwNasZRgG/fr1w969e+3cM+JsGI2GvwPi48dg1GoodbZirvAiV70FYGXVywb4VVhUjKrUhazmsEZ8IaXT38xBKzDMC42jQ0rykSWGm+AApe9aZk00qCWkArSzGkJvb+tUOtBfZPHsLlCQBZz+3KxNFdoEtwHgOJsqlFWWC2A/4V86et/odpJVcVbWmNDQUDx69AgAUK9ePSQmJuLatWsQCil8k7LxFrY+fQqGYfg7IPaOA5RK3O7V2/wdEEWeQKdpQNfZwIgtgH8tNjWq62ybLwDTZWxXMIov1lXe9r9ubkIIBIJSB7/Gdi2z9sCWcmoJKYNu/pkyM5OtdpCdDVFQkEF+mln082c/b1Oh/FlH21ShopslAOwbj5efe5XLlTXVpEmTkJSUhKFDh2LWrFmIi4sDAMyfP9/OPSOOzmBhq1oNZeZjbl2AKicHt2K7W7Yu4M4x4Mw6oP//AZoX9WZNTI2yFm3cKe3SOMUX6zG2mYP+z1P3HO2HDGO7lmlTEqw5U+6QH/XHjh0Ld3d3+Pj4cLe//vqLa1cqlZg6dSoCAwNRrVo1TJs2DSqdvCBL2wnR4s1qxPVhqx1072H+rAZgvB7jAJ1V7BXMn3WUTRXMLctlcOmKZk14Zs6ciaFDhwIARo8ejTt37uDy5cv46KOP7Nsx4vAMtvB2c4PAXcy1i6pXt2xdAMMAx1ewMevs14BnQElbKTO01r6KpI07104+NO3SOMUXi5my/a/uwLZRuxpoP6B+hbciNqtv1nka65s8eTIKCgq4W8eOHbm2hIQEnDp1CtevX8e1a9dw8uRJfPLJJ1ZrJ0R72U5TXFzypnDkMCAWo3HiMTRLuWhe6oFu/qxGw9af1aiAA7P455mQP1tq3+2QP2tss4SKLtDQXrqiNxxDKpUKp0+fxg8//IDatWujTp06KCwstHe3iIPTDlAff7rC6MJWwMx1AdoP5hmn2A/a05LZdIMy7PhnB2RKGc69eQ4X4y9yt3NvnjNIozKVbtw5vv1mqakGFF+sz5S1DWXtWqZlbIcyi/plnaepXN999x0WLFiAsLAwhIWFYf78+fj222+t1k6I7qKwfyIikfnRRxDXqGHZrIZ+/uzzDECWY3b+rCNgF39prLJZAjHuxo0baN68OUaOHIlx48YBAI4cOYLx48db5fnlcjneeecd1K9fH76+vmjWrBm+++47rj0vLw9vvPEG/Pz8EBISgiVLlvAeX147sS9GrUb+wYMADAewZq0L0P1g/vwu8OpG4NJOwL30D93Xc65j5bmV6P5DdzzIf2DQbs5VpPJyaCm+OIaydi2zRdUJh82p3bJlC7Zs2YKwsDD861//wsyZMyEUCvHs2TM8ePAAERER3LkRERG4d+8epFIpNBqNRe3+/v4GfZHL5ZDr/NHn5eXZ4lsmDka7KCzglQEIXbgQgBmzGkpZyQyrQf3ZSIvyZ+29qYL2TcXdU2R0VhaoupslWNPkyZPx3nvvcSlTABAbG4spU6ZY5flVKhXCwsJw+PBhNGjQAElJSejXrx/Cw8MRFxeHadOmITc3F/fu3UNWVhZ69eqFunXrIj4+HgDKbSf2pcrKgtDXF8rHj7kBrG6dWt1/jdKNYfobw/Rfye4elnaUbdfZBEY3h79F9Ra4EH+BO24N5eXQUnxxPKbk41pKwDDWmvS1ngsXLqB27dqoVq0azp07hxEjRmDmzJmYOXMm7t+/jzp16uDp06cICgoCADx9+hQ1atTA/fv3wTCMRe3h4eEG/fnoo4+wePFig+NSqRR+fn42/EmQyqQb7FXZ2bjVvYfRBRQmL6RQFvEHp9p90as3Ata0LDlvdho7y6G/T7qRdIPILZHcpgpCgRB/DP8Dod6hBufZYlFYaYvAajYOxEuv1MfuNRcMiplr6xVW5o4yjiIvLw/+/v4Wx4lq1aohOzsbQqEQ1apVQ25uLgAgICAAz58/t1Jv+YYNG4ZWrVphzpw5CAwMxOnTpxEdHQ0AWLlyJfbv34/jx49DJpOV2V4ea/2MSPmUWVkQ16jgjmH6MUwlZ/P9f4wvGcgC7IfzUdsNcv51P4QD7AduY4tYzaFWayAvVBmNOzRD69h030tM+R1VJE44ZPpBu3btEBwcDDc3N7z88suYM2cOfvjhBwCAj48PAHZAqaX92tfX1+J2Y+bOnQupVMrd7t+/b5XvkzgG7aU33UVht7r34LbA1V8UZtqAVj/V4B5w/FMgLALYO41/rgn5s8ZqOVbmpgpllebS5soOmUmbJdhCSEgIMjIyeMdu3rxp9AO4NRQXF+Ps2bNo06YNUlNToVAoDK5sXb7M1kMur12fXC5HXl4e70YqR8UHtPrlBjOAHaPYdCndjWEAo7uHAZbXpNWtca3v0pH7L+JOJG2i4GRsWWvcIQe1+nTrMQYGBiI8PBwpKSncsZSUFNSuXRv+/v4WtxsjkUjg5+fHuxHXIZRIkPpSB/5K4cN/VnxRmG5VA22qgTY/9rPWQOSbwF/rzcqfLS2loDIWhRlbBHasjEVgVX2zBGubNGkShg8fjn379kGtVuPQoUMYM2YMpk6dWv6DK4hhGIwfPx6NGzfGsGHDUFBQAG9vb4h00m4CAgKQn58PAOW261u2bBn8/f25W+3ata3+PZAShUlnkfHmm3i+a3fFH6wfwz5vyx7vNN1wYxgju4dZSveDtG4tU+1AtyC3GNdOPIQ0q4hyaAnHIQe1P/74I/Ly8sAwDM6fP4/ly5dj+PDhXPvbb7+NpUuX4vHjx3j8+DE++eQT3qIJS9tJ1cMoFBBKJMj+5hs8/eoriENCKrYoTH9XMG2qwaB1Jef89qIYedfZ7KW6MoqU628n2f779gAqb1MF7RuHWl3xRWA0K2td06dPxzvvvIO5c+dCrVZjxowZiI+Px8CBA636OgzDYPLkyUhNTcXu3bshFArh4+MDmUzGK3kolUq5q1rlteujq16VK++331B0Phmy5PPmPYHYE3jls5L7/VcCZ9YafjC/kwicWsN9ME97nmZRv3U/SOsW6dfGo983XEV0v3qIea0RQhv609UgwnHIhWLr16/Hu+++C5VKhVq1amHy5Ml4//33ufaFCxciJycHzZs3BwC8+eabmDdvntXaievjbarw5Am7qUJODoJ0PtyYvChMf/HEoHXAuW+AmBnsIgqttKNsCkLX2RWqPwsAGmjwuPBxpWyqoH1DSdyairh3WlZ4EZhAIKBi5laUk5ODiRMnYvLkyQCAzMxMfPLJJ2jcuDFkMiM1j83AMAymTJmCpKQkHDlyhLtq1bRpU4jFYly6dAlRUVEA2CtbrVu3Nqldn0QigcSSzUqIyRiVCvmHDgEA/Pr1M+9JlEXA/hkl93+bzS5sFQiBzjO5ha0KVTHcPQO50xoGNAQAsxaxGqtq8CxThktH7/OK9z97Uohhs6N4eZkUd4hDLhRzdLS4wXnpDmZ5O+0olYBYDIGbGwTu7mh88kTZi8L0F3Ipi9i8M+3iiWnJbJmbEyvZmYxB69lLdGlHX8zMGl8lrEt3URgAuAvdkTwm2Xo/jBdKWwBW2i4wAC0CM4WlcSI5ORnDhg3DgwcPEBQUhF27duHSpUv4z3/+g9jYWMybNw8vv/yyVfo6ZcoUnDp1CkePHkV1vTqm8fHxyM7Oxo4dO7jqBkuWLOGqG5TXXhaKpbbDMAyKr179//bOPL6Jcuvjv5lMkqYtpQWRtahAASlX6GVfu8miiJRN0aIgLiAUBYXiRYXrfRFFRIQrKLj7Coq48VoRN/atlaUXAUGgbELLLaV0oU2Tycz7xzSTTDJpp0lKE3q+n08/ZE4mMycLZ35znvOcByW//Iom09Pcb9LdYpjKtv1mvW2SdLP+3dOwjHwHhrAmbudTW9nQm0msoihi06rDyMnOl22xA1ui57Bb8e2bB2lSWD2kJnGCRK0XUCAObo737CWLVgCw5uXh5KDB2peK1NLVwD4b2HU/lVZdAFRbdbmKWo7hcPDhg379LOxZkc2fHEPyxNshCqKbgHUVts4XEgA1msVan/A1TiQmJqJnz56YMGEC3nvvPXz++edo2bIlVq9ejbi4OL/5efbsWdx6660wGo2K2tjx48fjnXfeQXFxMSZPnoyMjAyYTCakpaVh3rx58n7VPV8VFEtrh2o7tajFMNfYJIpARbG0BG6/GYAxXNpPb9IUr7y9CXfN1LIcgynLE7BptVLo2mnTtQmGTu4MhtK0Nyw1iRMBWX5AELWJvX72WPceaDjiXjR/8UXt9bOupQbDlwP73vdrqYGd2u4/63zxKMovh96gw6bVh2nt9ADh999/x88//wyO4/Dyyy9j2bJl2L9/P5o3b+7X89xyyy2oKrcRERGBzz77zOvnieuPvZNLh30q7bPcyqWcRpEAxyhS3iHgl38Cd78O2CekVsYutXjlireTWHNPXkXjluEYPbubLGx/23gaSQ93ROGla26ZWvtqVBSDCIBELXEDo5at4AsKINpssObmoqNTwK+2ftY+NOe6gMKbnaVSA+euBvaLxM6lAMspSw1YDtVVv9Zm/ay91EAQRPAVNkVW1j4BTO3C4bx2OmVlrw8Wi0XOnJpMJjRs2NDvgpa4cbEvHiOKojKL6RrDlnaS7G2TlJna5l2AwS8DFw4Ad4ytdX/tsenMocvY+PbvuP+FHvKNdJekaHBGnULoUukBoQaJWuKGhTUacbxXb3TI3OtWP3ty8BBF/azrSjsK7J0NBjwLMDppksQ9Sx0tbjZWdjMAvF4VzBl7/1m1oTtfBa23E8CcLxz1MSNSbuGhY1mUmK1oEKIHLwgINdRu+LRYLFi+fLm8XVFRodgGpM4IBAG4TH7Ny5Nu3p0WXFDEN71Juvm2C1oAGLkKgDJjb2ncFoamnaAFX0aWnMug4h9oD4OJQ1ikEQzDKG6kmRCmVlejIoIfErXEDY1otcr9ZwEpU3siIdGtfhZwKjmoalnIESsAQ7iyT2MtlBqwjO/d9qqaABb1fajqcJ7UlqvtDXnhcBWmNkH6wKuzCaKId7bl4MPdp1FcziPCxOGRvrdhakJbGPW6WvO3d+/e+Oabb+Ttnj17KrYZhiFRS8jYSw4UN+/Jd0o37xynLEWwlkujSXbaJgFcCLDzTamrQfkVwNQIBg/1s87ximVYn0aWXGtoCy9dw6hZ3RS9re030vZlVmnEiPAEiVrihsBjqYHVCtuVK2Arh225xo2rrp91zsrqTVJmtt/TjqE6axmw74OALzVwnQAm2ER8/bqj1OC3jDMAoDqcxxkkoRaIFw5/CdMu0Q3x6aO98N6O01XaPpjYHdnnr2L5rydlH4rLeSz79QQAYHJ8m1rL2G7durVWjkvcWDjHPrtwtebm4eRgD5Nf7Tfqcgz7NyCKsIg2GBIrW1vqW8rH96W1oEFnqHJJVE/tu75+fb/H0oL6PGJEVA+JWuKGQFOpgdGIDpl7lfWzVWVlh70BfP8M0LKbo9xg42xgzIfS/gFUauApKxuIE8ACQZimJbbD6u05+Pdmz7ZGYQb0btMYM9Zlq76PD3efxrTEdv7/gAiiBjhPCjv7+BOoOHoU7Xft9Hzzrg8F+s+QHvdJk0aeRBsMnNHv8cr55to5vtjjFcPArQwKkITt5k+OYejkzj58MkR9hEQtEXR4alejtdRArp9lhaqzssu7SpmMvk8B6ydIJzm1WepyMHy5VFsL1HmpQXVtuWprApirOLXwNhg4XcAL00ZhBvRrdxOeXf+fKm1Nwo0oKLWguFx9lndxOY8SsxWNw2kxAaJusU8Ki16+DJZTfwJwmvzq2n9WsDlWNzy9A+g0HHYp4M+uBmplBaNndwNn1IGvsElCd0JHJKSqxybqakB4Q0Auk0sQVcEajTjes5fCZs3NlUsN7LiVGljLZBHMsjYpu7p9sbRoQuEZ4LNxwK5lUlbWjtqykIDU9WD7YnlZSIuWlXKchu4OPnxQ/vtt/G+w2Cya3799CVtBEBUXjjOHL0Nv0KlOAMvKOI2Rz/xdXtrWeQKYTscq6tfKLTwsvICC0gpYeAHlFt7NZrba8M62HHR/+Wfct2ovSit4rN4hbXdb8AvGrtoNXhDlfbot+AU7T+Zj5daTWPbrCVko2kVoVTa7MP1o9xn5PdlF6Md7qrapCVOttvzSCjQONyDCpP7dRpg4NAjRa/7eCMIfCBUV8jwAwDEpjC8oAGsyIaRzF8XNO3YsdSzfDQB//B+QvRZ4706gbWK15/Nmae6qVgWzd13Jyc7HV6/tB8MyGDWrm2psCqTSJyI4oEwtEdB4zMoKgvrECE+lBtXVyi7r4p6VBRzLQgLKcoOdSx3LROL6lRp4m5VVmwAGPYsK3lbjTKpr1nTJ2A74cNfp65ox9UaY2u1abVeuWbDr5GVM6HOr4r3ZeaTvbeAFAQbKDRDXEU8rIp5ISFROCiu6APa7p4CTvwAQpdEkziTFLgDoOVlaUAFwz+bCt3p/tbKC2IEt0XlAS9X62TFzuruVQbnGJl86jtRF9xKibqBoTAQM9uyDcxZCNSublyeVGpjN6LDvN3TMPoiYrVsAvR4xW7egY/ZBdMjc65StMDtqZT9/ECg6X7Os7PoJQI/H5XEwC6sDEue6lRvYh+7sf4B7lqOmpQb+zMruyCnA4s0nMOSJzvgg6ywsNqHGmVTXrGldZUy12pyFaU1tAPDqD8cxse+teCq5nXzcCBOHp5NjMDWhLV0YieuKaLUCkGKgPfa1+/UXZezb9xuEKxek0aSTv0g33/1nSqI1ZwsQ2hiYfgDoM81x4EpB6xyvWLAY8e0IVT+quwkXRSBhfEc5BrEcg/hx7bHtsz9V62d//egP6EOkMih9CAerS2zq/vLPWL/vL5RWWBUjRmUW91KJqkaVqjqW2oiU2vHVzuFpP+L6QxGZqBPUMrCuq+DYm4Z7ysoe79UbjF4P1mhUTozY+iqwfTHYtknAsDfA7vugMiu7r7LZeOeaZWV3LAFCIqSWN9CYlfVDV4MKqw2wCl5lZRmuDUY8+3ds//Q4Eh7qiB1nCvDYJ1KG+JM9Z7EiNc6rTKqr6KyrjKlWGyAJ0y8m9wbDAB/tPoPich5vbTmJTx/tBZZh5Ay0mi2/1IyMQ7l4YmAbpCXGKDI9tdnOi7hxUIt11S5j6+G1jF4P66VLODlkKGI2/wqucWPob77ZEftObwcatQH7779Jq4C1TQLi0x2tuopzpYmue992TBYD8Gfhn7ilwS2a41V1mc+yIgsO/nwWKTPi8O2bBzWtCgYwYBgGZiuPd7blyB1GAKBJeAjuuaM5Vm/Pkf8PR5g4PDuoA0Z3awmDToeyCh4hBp1ipEmtFl/tWGojUq7Hr+sWf4Q2SNQStY4WAWtHFARHAGcYWC9dUmRlAacJYJVB3Y5catBrCnA+Ezjxk5StAICbYqTWNUtjpW3XrKy9Ndf6CUDKO47ZCR4mgVU3oaKqUgObjYVFFNwmVHEsC07HgLdJ2Vm+woYNSw547GDgabGEEc/+HQs2HQMA/OuJzrDYBDzjJEzDQzivh/hdRWcwC1ObIGByfBtMS2xXpc35gm2fFEYlB4RW1GJdlcvYur7WQ1eXEwmJYIxGdNz3myP2NbtDmshqn8x192JY+ApHq664VACAZeCzCqHaPqo9AKCcL4eJU8Y6V0FbUZn5/HD3aZgtAkIMrELUiaKI7Z8fx+n/XIbJqbtKl6RoMHpWtY0g9Cx4QURpmQXhIXp8uPu04pzP3dUBH+0+o4gJruJ0ydguOPRXUbXdS9SOpTbpVE38emrxl3EoF3d1boY2TcK9KnHQWh5BZRTVQ58G4TVaMxBuAbyyfstZwAKQBKwo1iwrW34V+PoJCHcvlYfd2HPblQK2bRIQmwJ8nupw3mNW9g1FVhbQ1m8W8NzVwMILqnf5ZouA21s0wKeP9kJWzhX0aBWJXWv/RFJlX9kNSw5oysqKOkdWNunhjli8+QQ+zTwHAMg+fxVvj+/mt0yqq+gMZmHqXH1VlY0ELOEr9u4ElnPnwDZoAC4qSrbZ8bari1xmZS4Du2eF8kZ93/swJM9THVlytgFS/FLL1DpTbnFkUcf3ao1/jeiMeRsOy6KubZNwcDoGoQ2NYFgGO0uvYdPmE5j7RGcs3PgHwowcpiUoa/sZPYsVW0/hw92n0TzChPcmdFfEJrURI0ApTrXW4mut43c9vn0/NZHctkk4vpjcGx/tPoOP95ypNnvrKky1Zn6dbyYoQ+wZErWEKtUKVtYG1hjqEKu8GRAFVZubgNWHehawNhusuXnuAfyXn8A1uVn2T85MHP8BuOcNsG92BhgWbJsE4P5PpdpZO3cvdmk27jkraxk4CwZOORzoXG5Q01KDq+VlSFi8A2UVAt556O/yXb79gnAsrxiZOQXo2SoKGUsPoii/HIYaZGXvmRmHhT86srJXyyx4b6cjy3GxyOzXTCrgLk5f/eE41k/pU61YJWFK1BfcFoERRQjl5TC0bi3ZLhdIHQvy88E1aQLAMX8gZsd2+Tj2kSpbYSHYZs0AuHR1KTwL9q3u0utvGyjFPoZxTGIdOFs6n8rIkput8obc+Sbc/n/O3leWY1l8uPs0xvdqjfTk9vhx9WHMebA9MJRF5ukCtAgzYtfaPxH/QHsITY2Y9PMRAFLJk8UmoG2TcFn8Dp3cGRVWASu3npJLDTjWPTZpEadab9S1jkjVpMWfWubXU/bWVcBqXdzF+WaiunOotVJ0bbdYG1nkQCFwPSM8ojVD6mazlkEQdA6bTgREQdXmUbD27IUOWZnAtteA+HRHtsFmleq04tOdBKyU7bTm5dVIwDKco42LHMCb3Az8Zx1waz8IAiNlJorzwcaOkDKwoiD93bVIqoF1FrC/vQv0mwEAEAc8i3JBD9O4tWB2vAExJAI8Y0BxaQUahOg9NiB3vQC4ZmVHfDsCmamZ6PjCD2AZBssf6IrfL0hDYQ/2lASsxSZgxrpsxQUheeLtuCXC5Jes7M9/XMKWWQl+E6s1EafhRg5PDKherJIwJeoDbrFOFMGaTO4lBHcOUoxAeezqMmiweleX758F7O0AT22GhTc7Sg0A1d7Z1dH7lV9w5ZpVrim9r3srsLyIzZ8cQ+LDHbHg3lgktG2CjKUHHcvapndDn+hG2FB5w1146RrumRmH8cUl+DTznCxonTOaJr0OW2YlKEoN1GKTFnGq9UZd64iUVpHsKcurlr11FbBVLe7Stkk4ukQ3BMeyuFJaoVqSoXYO19rgJuEhWD+lDz7afdpjLXJVYrUm2eFAEb8kamubGghJnwVnVTZrObDzTbCJcx22ihJg97/dbXtWAAnPyYK1ZOs28Pu+QdRz76DN/22Q3ld8Oqx5uXIGgjU1AOLT5ayEZgHr9P/CIWCbygIWDVs5Anin4cDnqWBztkpZ2WmZwL5VsoAV7/03mN/ecxew8XPAHPkWYv+Z+Pf281j+60k83Kc15tw1C0bOCD2cxVTV9bJVZWVzi0owtlsrvDTCUcf6YE+HgHW9INhrZX/96A+vsrLH8ophMjg+wEvFFX4XqzWqM+VYxTYJU6K+IScSnOcAXL6ME8l3us8LSEpGh717wJpMsk20WiGUl1e9gIxZel4oLQR7ehvQbhDE4W+CyXgWBlNUtZNYq6O4nIdBx6JJeAhGxbWEYBHwTeVNd+NWYRicFI2vnSastoiJgmAVsWHpAUWrroylB5E+Mw4A8GnmObeMZvMIk2rm0x6vAODjPWdw5ZoFe3MKMLHvrbIgdBWYWm/U1Y6lVfyq7ac1e6smYD291lmszliXrVqSoXYOwL02WK3dopZJdyVmK0L0OrnzjfNvQ0sG2pNwVssi+1v8kqitTWoiJLXaXASnIkNahc2S8SrEzI9hTJzr2G/v27i67gNEJs51yq42ABKekxYzqBSsDe4cAtw5BPzlAuibNas+A+FJwLKO1KYsYG9uBpQVQKwoARN1qyxgxU7Dwax7CMLdyx31YruXVilg39hyDtMHpsNwbINCwH45pQ86dh6JEC4ETyW3x1PJ7WU/anoB0DE6DPlqCAyMAZmpWQADXL1mQc+Fv+KBHtGY7UHAerogaM3KJjzUEbvOFshZ2S/2/YXoRqHXRaySOCXqE952JgCU8wf+6BqHm6Y+iSZPPCEtbhISIo1w7VoObu5fUoZWJXt7vHcf9fkD5iKgrADsyj5AmyTw930Iw4v5AAAGAFLXAah6FUM9q4dYuZa2s80qWOVFFVJ7tsb8e2ORV1QO1qm2n+UY9Lj7NkVplL1Vl9oy3IW5Zdi19k/864nO+PmPS24ZTTXhCACn8ktx36q9mHt3R0xPGiTHpr5tbwIDKa6piVNXMVxV7HM+llrcVDu+8znsMVdr9lZr5hdwF6tqJRlaaoO11gpL/imFLsey2DknUVN22NcOE/6uCyZRW1tYy6Q2KruXA05C8sqSWUDOZjRyEZfYs1KxH//TUnC/r5ZsroKzcjhfMJvBhigzpGpZU6G8HIaRLwEjX5JquUQRgrkcbHw6IuPTZVu1Q2aiiHabfpDFqjU3FyeH3uWSWbiMEwlJ6gK2aQuI1nIwX0wEUtc5MrCsHsz3z7oL2JO/gN34FMqHLoUp+0OpLRfDQOw/E29uPYen4udAd1QSsK9vPotV23KQ0KEJYmsgYKvKyrpeAMa2G4vnej2HVzNfhY7RKdY0Xz6uK/rf2tijgFW7IACes7KjZnfDzjMF2JtzBXOf6IxV209hfO9b8HRyDIlVgqhF1DoTaJkAaz2fA310GzmGN3tuFqLGSZNT5VjXdzpwPkuysaxyAtilXJy4cwhiftkErkkzhz+VmVwLZ4ShURvghUsAAAOkmDay3Ug81+s5LM5cjDm95yjei/PIkr0uVhSlNl2uNpZlcPVaOZ5NisHP7x3B4MdjsWmVI14JvCjdhD/QXr4Jl20eluHu92B7zNtwGJEmg5uoq2pxk1P5pTj0VxH6tG2sGEVzjWvO4vRUfikmffwbFo26A9OTYqqJfe7HUoubruJXLeaKorQQiz2jqVXAqr1/NSGqNUOspd2iVqHboWkDrzPQavsB6h0m1OqHfYVEbS0hCDqwiXOBxLngL12UxWWjuasAwCEuyyVxCSdxKZSXgxs+Dxg+D3zBZc+CMySk+qypJ1uIhuxqUrK7YE2609EfsXlzKQNhMgHmYuCbKeAeWCsLWJiLga8eVwhYZudS4ORPEIrzKwVsOdjdbwE5W8H+MBPlQ16H6T8fS8GfYSH2n4F3tp7DU/HpsIlWGBLnggEwc1AHAIDlb6Ng0Bkwe0hHzB7SUf78qxKwelbvJmQ9CdhFmYuQdy0PmQ9mwWrm8eOqI5g1MV3RM7ZxqzAkJ0XL22oCVu2CYMe1r2y/B9vj4MUi9G7bGAPb34zCMgse7d+GxCpB+BmPHQdcOhNo6eCij24D63//Ky9Zaxe0zkvWspwOGL4MwpUL6JCVKS2SYAsBKkrBNb2lsvyqGSzlhTCYomCzWBGzexdsFisMhhCFiIXIYGS7kUiLfRo/rjqCJ1PTIAii8v1Vthb8LXUfSkstUneVhzti6daTMFsFPJMYI9u2nMpH31scN+ZR34e69ZU9sv0CQiP0irZcF08UgtVL8cue1XW+Mf+/QxfBsaxqVlItu1pV9k6LOOUFAQaOrTb2aavtVz++62unJrQFAHy4+3SNVid0zfx6Kklw/Zy01AZrrRVWE7q+ZKBr0mHCzoe7T2NaYjvV52oKidpaQtNEAa02TYLTswi112BVaUtIAuP0a+AaN1YK1m+ngRv3v2AYRhoKe60dkH7SkYHY+7a0Wg2gtJ3e6hCwpYVge08FwIAxhWP19pN4vG80LAOfgSFJmtxgAoDkF6WG34n/UAhYHUyyWLWLUOfWNM42TwL2/vb3Y27vuXg181U32yuZr7gJ2GcengXOqIPFzOPrxfvRIiYKvEXAt0s9D8l5ErBqFwR7n0aRY2HQMxg6uTN4m4gurSNJrBJELaPaccBJmDr3wXbr4OJpAqzakrWl/wVrCAd4G/DdU2BPbXZ0axnzIbAxHUhdJ2dlDaYoLMpchCc7pWHXB8fQL7UNwjlOIWKTJ96OpzvPxIYl/5EnZ42e3Q3jOozD58c/l8sK7mt/H6xmXjGxa0Z6N9icSgsatwpDotONOQD8lnEGADBqdjd5xCmqeSg6DmyJX0/mK9tycSx2nb6Me2bGYdfaPxU35vueH6Sa0QQcpQYrHoxzy65qHY6u7R7SWo5v1OsU4lftvarNbXDN/JaarQgP0WsqyXA9h5Z2i1qFrtbssC8dJpwpLudRYrYqbia8ha6ItYT97rxj9kHE/PojmJAQWUhKy7purpHNVXCyBoNDcK6b4MF2k2QLMQHblwCL2ni2hYRIQ17bFgOvRANwGvYSbcC4/1XYkH5SkYGwDJgJPJ/rbnvhEtiIypY14VGwGEKBxH+A0ZvwxMB2YDgjDJyUgYj7JA49P+2JHv/bQ26jtXDvQgiigEV7FwGQ6sVGx4zG3tS9GBkz0qMNkMTqvvH7MLb9WADA2PZj8VTnmfhx1RGkxT4NQRAxrsM42TY9dgYOXTokL0Wbk52P/2w+D77Chq8X70dRfrm01OPa46oC1r4kJCAJ2MM7LmD07G6K5Wq7JEWDM+owenY3tOnaBKNnd4M+hEOIXgc9x4JhGOg5NqBbphBEMOK2DLe1crREp5OF6bGucTiZfCcYloVoscqv5QsKAI5T7jdoMBhBkBMO9uW6mdBQxGzd7FiytqICCL8ZMIQCxgaw3LscaDcI5mkHgXvelOJr6jpFVlYQRDzZKQ0Zb/yOnOx8ZLzxO3iLDU93nomMN36HKcIA3iLIghaQali/WrwfM/72DPal7kdmaib2pUrbX6lN7HKplXVdchuQhO3JfZfkeHXPzDi89uufOH6pFKKelZe1Neh16NOuMUyhegyd3BmmUD26tI5EuFEvZ03DjBymJrTF08kxiiWn77mjOW67KUzezxCk8S/UwFX5Xp0F7L7nB2H/C3di3/ODMLZ7K/lzahRuhE0Q8Ejf29yOby/J4AXB4zne2nISTwxsI9te/eE4Hul3m7zMt3OtsB215cUBxxLh05Ok12pdhlzrEubORJg4NAjR1/gzV4MR7WOuhGaKi4vRsGFDFBUVISIiQnUfW0UZbEIFDKYoqW4JIkQw4EUrDDpDwNtsFitYPQfBykNn0KPXml74JeUnhIdGQLDy6Lu+P1LapmBOrzl4Pet1pPdKR49Pe2BUu1FuNteaLzVb3CdxGB0zWs6izu09Fwv3LkRa7NPYtSZHylSEheLVrFe8soWFmnCtrBwZb/wuZxzGzOkOQRDlLESPe25FF5cyginLE7Bp9WHkZEsTMmIHtkTPYbfKSz/acX2tPQPLGXXgK2xyRkMfwoFlGbdaNuLGQ0ucuFGwWq2YOXMm1qxZA4ZhkJqaiqVLl4LjqhYnvn5GgqUMIvRyrGIYGxhRgOBk41kBRs4oxzmBt0FnkC6g1qIicA0aSHHOKC2xwpeUQhcWChEMTvTsCZHn0XD0aDR7fi744hLoIxsq9rOVFINrGCn54xRLWZZB7zW9MaLtCMzpNQeLMhfhkb89gmZhzdz+/8tZ2TU5iJ8QA52oUwjR2IEt0fOe2/DtUmmFQde45Ez8g+0R070ptn56XK6Lte+nFtPk46vENfsKhdtyLmNo5+byAgq+TOwps/DgAqD10/XA2/daYbVhZeWCFNWVZLiewyYIEAGFzbVPrSCKeNvp+GqTvQBpYtiKB+PkTgdqHRHsk8c+3nOmypXX3n24m2LFN2eeTo6psqa2JnGi3mZqrVYr0tLSEBUVhUaNGmH69OngefXUuDcIXAgMpii8lvkarGYem1YfgdXMg2P0PtsslTZLLdkWZS7CtQoLNq06jGsVFgiCiBFtR0AUOGxadRg8D7zU+yVMi30KP646gimdpkEQRIxsN1LVJtd8xaZ5tLlmUW02AWmxT3vMVChtz7jZZjjZjm27BL7CJgtaAHIZgetELudshVoW9sj2C8j6/gxSZv5dUwZWp2OhD+HkjIZdwLKstM45CVriRmDBggXYuXMnjh49iiNHjmDHjh1YuHBhrZ6zgq8AOBN4HnJcsrE6iC42PWvAkqwlcizleSDvlUXIfXkhbAInxdcyK3JfWYRLi5fApjPKMTcmKwvtDxxAo2fnYNPqIxAMoRAEEYIgyvvZ9GEQBBGvZ72uiNeCIOLetvfKMXFa7FO42dQUizIXofRaGTatOozSa2Ww2QQ5K3vm8GWYjEZFHLJ3GLCPEHkaHQKkm+uY7k3x1eL9OHngv/jt+9NIerijvJ/zxC4tI0ujZ3eDzqjDnZ2aobDMgvShHTE5vo1PM9WdM5rBmpXVirfv1V7O4JzR9fS5u57DZODcbOEhesV2iMvx+7drgqkJ7arNomvNQKsdzzWLbD/H08kxmJrQ1m+/g3qbqZ0/fz42bNiAH374AQBw1113YdSoUZg3b161r9Vy11Bu4WHkdCi9VuaWHbTyVnnYKBhtPe65FXc4zex37MNjw5Lsam08b8O3Sw46Mprp3WCzCbLNNesJKDMVNbGpZSZqmq1Qy8KOmdMdoiBSBpbwSH3K1EZHR2Pp0qUYM2YMAGD9+vWYNWsWzp49W+XrvP2MBEsZwJlw7VoZvlPE126V8SXb7f+q2v9fLTatcc0bmz9jndqxgKrjl9aRJaJ+oDWz7O1+allkLdlrytRq4IMPPsALL7yA5s2bo3nz5nj++efx/vvv++34Rk5q+aSWHXSugwo2W+zAlug8oKVb821pn2xNNrt4tdtsVlG2qWVMXTMVNbGpZTVqmq1Qy8JyBh1lYAkCQGFhIf766y907dpVtnXt2hXnzp1DUVGRYt+KigoUFxcr/rxBhB5WMy8LWsAeX0RZ0DpsgltNaU1sWuNaTW2ealmPbL+ArIzTGPmMYzTo4olCcAYWo5xi08UThQDHYOSsbmj395vRY5jnutgTTnWxzvFL68gSUT/Qmln2dj+1LLK/M/X1UtTWJAgD3gVihoHfhFmg2OTtz/6stXNqFaFabYC6WLVfJLRO5FIL9iRgCQIoLS0FAERGRso2++OSkhLFvq+88goaNmwo/0VHR3t1TlbPBX18raqM4OKJQuj0rCIOQcdg95kruGdmnDxpa8+ZK9AZWAx+PBaCICpKDexENQ9FTPem4Iw6t/hFN+bEjUa9FLU1CcKAd4FYFFFtLVOw2fwtOH0VoVpt1WVbqQ6WILwnPDwcABQJAfvjBg0aKPb9xz/+gaKiIvnv/PnzXp1TsPJBH1+BqmtZGb2oiEMGvQ69XToM9GnXGAa9DgzDyHFL7Vj2uOYavyimETca9VLU1iQIA94FYpZlwBrhN2EWKDZ/C05fRahWW1XZVhKwBOE9UVFRaNWqFbKzs2VbdnY2oqOj0bBhQ8W+RqMRERERij9vYGCFPoTD8Gf+5hZLRjzbVVPM0bqfv1+rFutYI+MWr/Q6vVscCjVwVbb+s8cz12NRHCPqDWI9pVWrVuKXX34pb69fv16Mjo7W9NqioiIRgFhUVFTtvjabIJqvWcSNbx8Szdcsos0m3BA2nrfV+jntn58gCPK2rzaCuF7UJE4EOy+++KIYFxcn5ubmirm5uWJcXJz40ksvVfs6Xz4js9XsFjcsvEU1lljMpcr9KspU96uwVoglxRXixrcPiSXFFWKF2SzyFrNivwqr+jlKzWaxqMgsbnz7kFhUZBb3nMwXyyqsiv3KLXyNYp23UOwjbiRqEifqbfeDefPmISMjAxs3bgQA3H333UhJSfFb9wNn1GbE3wi263FOgghW6lP3A6vVihkzZmDt2rUAgPHjxwdMn1q7jdeFgGMZ8IIInc0MC2OEjmHA6RjwNhF85cxsPcvKNmvlzGwt8arMwnv9WoIgPFOTOFFvRa23QRioXxcrgiC8g+JE9dBnRBBEddQkTty4XY+rQa/XY8WKFVixYkVdu0IQBEEQBEH4SL2cKEYQBEEQBEHcWJCoJQiCIAiCIIIeErUEQRAEQRBE0FNva2p9wT63ztslHgmCuPGxx4d6OhdXExRLCYKojprEUhK1XmBfdczbJR4Jgqg/lJSUuC1CQEhQLCUIQitaYimVH3hBixYtcP78eVy9ehVFRUVo3769vNqY/bHzv/YVyM6fP69YmayqP+djannO1eZpW83Xdu3a1dg/f/tYlX+B8BkG+ncc6P7Vx9/g1atXcf78ebRo0eK6xqdgwjWW1sffSW35p+Yr+UexKhi/45rEUsrUegHLsmjVqpW8rdPp5N5p9seu/wKo0bKQzq/T8pyrzdO2J19r6p+/fazOv7r+DAP9Ow50/9T8crXV1D9/+1gbv0HK0FaNaywF6ufvpD7FgkD3T80vV1tN/fO3j/XxN6g1llKm1g9MmzbN7bHrv74cU8tzrjZP22q+Pv7443XuY1X+BcJnGOjfcaD758mfG/03SNSc+vg7qU+xIND98+QP/QZr7p+aX7UdS+vtimLXk0BfNSfQ/QMC30fyzzcC3T8gOHy80QmG7yDQfST/fCPQ/QMC38fa9I8ytdcBo9GI+fPnw2g01rUrqgS6f0Dg+0j++Uag+wcEh483OsHwHQS6j+SfbwS6f0Dg+1ib/lGmliAIgiAIggh6KFNLEARBEARBBD0kagmCIAiCIIigh0QtQRAEQRAEEfSQqA0A3n33XfTt2xcJCQnIycmpa3cUWK1W9OvXD5GRkfjyyy/r2h039uzZgz59+iA+Ph7Dhg3D1atX69olBZcuXULfvn0RHx+P/v374/Dhw3Xtkkd27twJhmFw+fLlunbFjbCwMCQkJCAhIQGbNm2qa3fcyMrKwuDBg5GYmIjFixfXtTv1FoqlvkHx1D9QLPUen2OpSNQpBQUFYs+ePUWr1SpmZWWJY8eOrWuXFAiCIF68eFGcP3++uH79+rp2x40LFy6I165dE0VRFN9++21xwYIFdeyREp7nRZvNJoqiKG7ZskVMTU2tY488M2rUKLF79+5ifn5+XbviRmxsbF274BGz2Szefffd8u+QqBsolvoOxVP/QLHUO/wRSylTW8dkZWUhISEBHMehR48eOH78eF27pIBhGDRv3ryu3fBIixYtEBoaCgAwGAzguMBaJE+n04Flpf9mV69eRZcuXerYI3UyMjLQv39/hIWF1bUrqpw/fx4DBw5EamoqCgoK6todBXv37oXJZMKYMWMwePBgHDp0qK5dqpdQLPUdiqe+Q7HUe/wRS0nU+oG33noL3bt3h9FoREpKiuI5q9WKtLQ0REVFoVGjRpg+fTp4npefv3LlCqKiouRtQRACyr/rgT/8KygowMqVK/Hoo48GnH9Hjx5F3759MX36dMTHx/vdP199FAQBK1euxJNPPlkrvvnqHwCcOnUK27dvR3JyMp5//vmA8u/ixYs4evQo1q9fj2XLlmHq1Kl+96++QLE0MHysz/GUYmnd+eePWEqi1g+0aNECL7zwguryeQsWLMDOnTtx9OhRHDlyBDt27MDChQvl56OiohR1S/Z1pQPFv+uBr/6VlZVh7NixWL58OW666aaA869Tp07YvXs3MjIyMH36dL/756uPa9euxb333ouQkJBa8c1X/wDI3+u4ceNw8ODBgPIvKioK/fr1Q1hYGG6//XYUFRX53b/6AsXSuvexvsdTiqV1559fYqkfyyHqPfPnzxdHjBihsLVq1UpRP/XFF1+IrVu3lrcLCgrE3r17izzPi/v37xfHjBkTUP45v7a268C88c9qtYrDhw8Xv/7661r1zVv/zGaz/PjMmTNiQkJCwPmYnp4uJicni0OGDBGjoqLEQYMGBZR/paWlIs/zoiiK4saNG2u1js4b/65cuSIOGDBAtNlsYm5urti9e/da86++QLHUdyieXn//KJb65p8/YmlgFczcYBQWFuKvv/5C165dZVvXrl1x7tw5FBUVoWHDhmjUqBEmTJiAAQMGQK/X4/333w8o/wDgvvvuw759+xAeHo6srCy89tprAePfZ599hu3bt6O4uBjLli3DsGHDMHv27IDx78CBA3juuefAsixEUcQbb7xxXXyriY+LFi2Sn0tISMDatWsDyr9jx47hscceQ0REBIxGI957772A8i8qKgoTJ05EfHw8rFYrlixZct38qy9QLL0+PlI89c0/iqW++eePWEqithYpLS0FAERGRso2++OSkhI50E2ZMgVTpky53u5p9u+LL7643q4B0ObfQw89hIceeqgOvNPmX58+fbBt27Y68E5C63dsZ+vWrdfJMwkt/nXr1q1Whsm0oPXzmzRpEiZNmnS93as3UCz1HYqnvkGx1DeuVyylmtpaJDw8HAAUdSH2xw0aNKgTn5wh/3wj0P0DAt9H8o/QQqB/D4HuHxD4PpJ/vkH+SZCorUWioqLQqlUrZGdny7bs7GxER0e73dXVBeSfbwS6f0Dg+0j+EVoI9O8h0P0DAt9H8s83yD8JErV+gOd5mM1m8DwPQRBgNpthsVgAAI888ghefvll5OXlIS8vDwsXLsRjjz1G/pF/9cpH8o/QQqB/D4HuXzD4SP6Rf7Xqn5cT2wgn5s+fLwJQ/MXHx4uiKIoWi0WcOnWqGBkZKUZGRoppaWmi1Wol/8i/euUj+UdoIdC/h0D3Lxh8JP/Iv9r0jxFFUfSfRCYIgiAIgiCI6w+VHxAEQRAEQRBBD4lagiAIgiAIIughUUsQBEEQBEEEPSRqCYIgCIIgiKCHRC1BEARBEAQR9JCoJQiCIAiCIIIeErUEQRAEQRBE0EOiliAIgiAIggh6SNQSBEEQBEEQQQ+JWqLesHDhQjzwwAN17QZBEERQQ7GUCFS4unaAIPxFeHi4/Li8vBwcx0Gv1wMABgwYgB9++KGuXCMIgggaKJYSwQojiqJY104QhL9JSEhASkoKZsyYUdeuEARBBC0US4lggsoPiHrDP//5T6SkpMjbDMPgrbfeQqdOnRAWFoaHHnoIhYWFuP/++xEREYG4uDgcO3ZM3r+0tBRpaWlo3bo1br75Zjz88MMoKiry2p+JEydi0qRJSElJQXh4OO644w7s3LlTfn7NmjWIiYlBgwYN0LJlS/zP//yP1+ciCILwFxRLiUCFRC1Rr9mwYQN27tyJEydO4KeffkJ8fDymT5+OK1euoGvXrkhPT5f3nTRpEq5cuYJDhw7h9OnTsFqtSEtL8+n8a9euxaOPPoqrV69i6tSpuPfee3H16lVcu3YNEydOxPvvv4+SkhIcOXIEQ4cO9fXtEgRB1AoUS4lAgEQtUa+ZNWsWGjVqhBYtWiA+Ph6xsbHo378/OI7D2LFjceDAAQBAfn4+vvrqK6xYsQKRkZEICwvDv/71L6xbtw42m83r8yclJWH48OHgOA5TpkxB06ZNkZGRAQDQ6/X4448/UFxcjMjISPTo0cMv75kgCMLfUCwlAgEStUS9pmnTpvLj0NBQt+3S0lIAwJkzZyAIAm677TZERkbKgZFlWeTl5Xl9/ltuucVt+8KFCwgLC8N3332HDRs2IDo6Gv3798eWLVu8Pg9BEERtQrGUCASo+wFBaCA6Ohosy+LixYsIDQ3123HPnj2r2D537hxatmwJAEhOTkZycjKsVitWrlyJlJQUFBYWgmXpXpQgiOCEYilRm9A3ShAaaNasGVJSUpCWlobLly8DAPLy8vDNN9/4dNzNmzfj+++/B8/zePfdd5Gbm4thw4bh0qVL+Oabb1BSUgKO4xAREQGOo3tQgiCCG4qlRG1CopYgNPLRRx/JQ2UREREYMGAA9u/f79MxH3zwQbz77ruIjIzE8uXLsWHDBkRFRUEQBCxbtgzR0dFo2LAhVqxYgS+//JIyCwRBBD0US4nagvrUEkQdMXHiRERGRuLNN9+sa1cIgiCCFoqlhB26VSEIgiAIgiCCHhK1BOEja9asQXh4uNsfy7JgWVb1uTVr1nh1roULF6oez3lZS4IgiGCEYinhK1R+QBAEQRAEQQQ9lKklCIIgCIIggh4StQRBEARBEETQQ6KWIAiCIAiCCHpI1BIEQRAEQRBBD4lagiAIgiAIIughUUsQBEEQBEEEPSRqCYIgCIIgiKCHRC1BEARBEAQR9JCoJQiCIAiCIIKe/wc+0sWOpTjadwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2,\n", + " figsize=(7, 4),\n", + " sharex=True)\n", + "\n", + "ax1.set_xscale('log')\n", + "\n", + "sns.lineplot(data=basic_reaction_count,\n", + " x='Time__ps_',\n", + " y='Reaction_Count',\n", + " hue='Reaction_Name',\n", + " markers=True, style='Reaction_Name',\n", + " ax=ax1,\n", + " legend=True,)\n", + "ax1.legend(ncols=1, fontsize='small', loc='lower left', bbox_to_anchor=(0, 1))\n", + "\n", + "sns.lineplot(data=basic_reaction_count,\n", + " x='Time__ps_',\n", + " y='Reaction_Count_Differential',\n", + " hue='Reaction_Name',\n", + " markers=True, style='Reaction_Name',\n", + " ax=ax2,\n", + " legend=True)\n", + "ax2.legend(ncols=1, fontsize='small', loc='lower left', bbox_to_anchor=(0, 1))\n", + "\n", + "fig.tight_layout()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "standard", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/extended/medical/dna/molcounters/sdcounters/sdcounters.cc b/examples/extended/medical/dna/molcounters/sdcounters/sdcounters.cc new file mode 100644 index 0000000000..ac0fed49b6 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/sdcounters.cc @@ -0,0 +1,84 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ActionInitialization.hh" +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4RunManagerFactory.hh" +#include "G4UIExecutive.hh" +#include "G4UImanager.hh" +#include "G4VisExecutive.hh" + +int main(int argc, char** argv) +{ + G4UIExecutive* ui = nullptr; + if (argc == 1) { + ui = new G4UIExecutive(argc, argv); + } + + auto* runManager = + G4RunManagerFactory::CreateRunManager(); // G4RunManagerType::Serial for no threading + + // Set mandatory initialization classes + runManager->SetUserInitialization(new PhysicsList); + runManager->SetUserInitialization(new DetectorConstruction); + runManager->SetUserInitialization(new ActionInitialization); + + // get the pointer to the User Interface manager + auto UI = G4UImanager::GetUIpointer(); + + if (argc > 1) // batch mode + { + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UI->ApplyCommand(command + fileName); + } + else // define visualization and UI terminal for interactive mode + { + UI->ApplyCommand("/control/execute simple_irt_syn_react.in"); + // UI->ApplyCommand("/control/execute simple_sbs.in"); + delete ui; + } + + delete runManager; + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/molcounters/sdcounters/simple_irt_syn_react.in b/examples/extended/medical/dna/molcounters/sdcounters/simple_irt_syn_react.in new file mode 100644 index 0000000000..be9c2c44f1 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/simple_irt_syn_react.in @@ -0,0 +1,41 @@ +/run/numberOfThreads 4 + +/process/chem/TimeStepModel IRT_syn + +/run/initialize + +/chem/PrintSpeciesTable + +# set all reaction rates to zero (only diffusion) +/chem/reaction/UI + +# totally diffusion-controlled (TDC) | Fix | reactionRate[dm3/(mol*s)] | TDC (0) +/chem/reaction/add H + H -> H2 | Fix | 0.503e10 | 0 +/chem/reaction/add e_aq + H -> H2 + OHm | Fix | 2.50e10 | 0 +/chem/reaction/add e_aq + e_aq -> H2 + OHm + OHm | Fix | 0.636e10 | 0 +/chem/reaction/add H3Op + OHm -> H2O | Fix | 1.13e11 | 0 + +# partially diffusion-controlled (PDC) | Fix | reactionRate[dm3/(mol*s)] | PDC (1) +/chem/reaction/add OH + H -> H2O | Fix | 1.55e10 | 1 +/chem/reaction/add OH + OH -> H2O2 | Fix | 0.55e10 | 1 +/chem/reaction/add e_aq + OH -> OHm | Fix | 2.95e10 | 1 +/chem/reaction/add e_aq + H2O2 -> OHm + OH | Fix | 1.10e10 | 1 +/chem/reaction/add e_aq + H3Op -> H + H2O | Fix | 2.11e10 | 1 + +/chem/reaction/print + +/gun/position 0 0 0 +/gun/particle e- + +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 1 microsecond + +/scorer/BasicMoleculeCounts/nOfTimeBins 50 +/scorer/BasicCounter_VariablePrecision/nOfTimeBins 50 +/scorer/basicreactioncounts/nOfTimeBins 50 + +/run/printProgress 2 + +/gun/energy 10 keV +/run/beamOn 400 \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/simple_sbs.in b/examples/extended/medical/dna/molcounters/sdcounters/simple_sbs.in new file mode 100644 index 0000000000..542400e198 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/simple_sbs.in @@ -0,0 +1,48 @@ +/run/numberOfThreads 2 + +# use Step-by-Step (SBS), independent reaction time (IRT) +# or synchronized IRT (IRT_syn), +# SBS ( is only for TDC, set 0 ) +#/process/chem/TimeStepModel IRT +/process/chem/TimeStepModel SBS +#/process/chem/TimeStepModel IRT_syn + + +/run/initialize + +/chem/PrintSpeciesTable + +# set all reaction rates to zero (only diffusion) +/chem/reaction/UI + +# totally diffusion-controlled (TDC) | Fix | reactionRate[dm3/(mol*s)] | TDC (0) +/chem/reaction/add H + H -> H2 | Fix | 0 | 0 +/chem/reaction/add e_aq + H -> H2 + OHm | Fix | 0 | 0 +/chem/reaction/add e_aq + e_aq -> H2 + OHm + OHm | Fix | 0 | 0 +/chem/reaction/add H3Op + OHm -> H2O | Fix | 0 | 0 + +# partially diffusion-controlled (PDC) | Fix | reactionRate[dm3/(mol*s)] | PDC (1) +/chem/reaction/add OH + H -> H2O | Fix | 0 | 1 +/chem/reaction/add OH + OH -> H2O2 | Fix | 0 | 1 +/chem/reaction/add e_aq + OH -> OHm | Fix | 0 | 1 +/chem/reaction/add e_aq + H2O2 -> OHm + OH | Fix | 0 | 1 +/chem/reaction/add e_aq + H3Op -> H + H2O | Fix | 0 | 1 + +/chem/reaction/print + +/gun/position 0 0 0 +/gun/particle e- + +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 0.001 microsecond + +/scorer/BasicMoleculeCounts/nOfTimeBins 10 +/scorer/BasicCounter_VariablePrecision/nOfTimeBins 10 +/scorer/basicreactioncounts/nOfTimeBins 10 + +/run/verbose 1 +/run/printProgress 1 + +/gun/energy 1 keV +/run/beamOn 2 \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/ActionInitialization.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/ActionInitialization.cc new file mode 100644 index 0000000000..d2c9ca918b --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/ActionInitialization.cc @@ -0,0 +1,127 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ActionInitialization.hh" + +#include "ChemistrySteppingAction.hh" +#include "ChemistryTrackingManager.hh" +#include "EventAction.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4H2O.hh" +#include "G4MoleculeCounter.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4MoleculeReactionCounter.hh" +#include "G4Scheduler.hh" +#include "G4UserTimeStepAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::BuildForMaster() const +{ + SetUserAction(new RunAction); + BuildMoleculeCounters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::Build() const +{ + SetUserAction(new PrimaryGeneratorAction()); + + SetUserAction(new RunAction); + SetUserAction(new EventAction); + SetUserAction(new StackingAction); + + if (G4DNAChemistryManager::IsActivated()) { + G4Scheduler::Instance()->SetUserAction(new G4UserTimeStepAction); + + auto chemTrackingManager = new ChemistryTrackingManager(); + chemTrackingManager->SetUserAction(new ChemistrySteppingAction); + G4Scheduler::Instance()->SetInteractivity(chemTrackingManager); + BuildMoleculeCounters(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ActionInitialization::BuildMoleculeCounters() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + // The sensitive detectors will retrieve and process the counts after events + // Note that this setting is different from the other examples! + + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(false); + // SetResetCountersBeforeRun is irrelevant when resetting before event + // So we just set it to false here. + + // Register molecule counters + + // Basic (built-in) Counters + { + // Basic molecule counter using a fixed time precision. + // this will create many records {molecule -> {time -> conut}} + auto counter = std::make_unique("BasicCounter"); + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(10 * ps)); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + { + // Basic molecule counter using variable time precision without time restrition. + // The precision is changed with respect to chemistry time. + auto counter = std::make_unique("BasicCounter_VariablePrecision"); + counter->IgnoreMolecule(G4H2O::Definition()); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithVariablePrecision({ + {10 * ps, 5 * ps}, + {100 * ps, 50 * ps}, + {1000 * ps, 500 * ps}, + {10 * ns, 5 * ns}, + {1 * microsecond, 50 * ns}, + })); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } + + // Molecule Reaction Counter with fixed time precision. + // Set to be active from 0ps to 1us. + { + auto counter = std::make_unique("Reactions"); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(10 * ps)); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistrySteppingAction.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistrySteppingAction.cc new file mode 100644 index 0000000000..33c4e74b20 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistrySteppingAction.cc @@ -0,0 +1,49 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ChemistrySteppingAction.hh" + +#include "G4MoleculeCounterManager.hh" +#include "G4Step.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistrySteppingAction::UserSteppingAction(const G4Step* aStep) +{ + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + G4MoleculeCounterManager::Instance()->NotifyOfStep(aStep); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistryTrackingManager.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistryTrackingManager.cc new file mode 100644 index 0000000000..76a1320a71 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/ChemistryTrackingManager.cc @@ -0,0 +1,74 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ChemistryTrackingManager.hh" + +#include "G4Event.hh" +#include "G4EventManager.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4UserSteppingAction.hh" +#include "G4VSensitiveDetector.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ChemistryTrackingManager::~ChemistryTrackingManager() +{ + // Ensure this manager's stepping action is not handled by the event manager + auto eventManager = G4EventManager::GetEventManager(); + if (!(!eventManager || fUserSteppingAction == eventManager->GetUserSteppingAction())) + delete fUserSteppingAction; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistryTrackingManager::AppendStep(G4Track* /*track*/, G4Step* step) +{ + if (step->GetPreStepPoint()->GetPhysicalVolume() != nullptr + && step->GetControlFlag() != AvoidHitInvocation) + { + auto sensitiveDetector = step->GetPreStepPoint()->GetSensitiveDetector(); + if (sensitiveDetector != nullptr) { + sensitiveDetector->Hit(step); + } + } + + if (fUserSteppingAction) fUserSteppingAction->UserSteppingAction(step); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ChemistryTrackingManager::Finalize() +{ + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + G4MoleculeCounterManager::Instance()->NotifyOfFinalize(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/DetectorConstruction.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/DetectorConstruction.cc new file mode 100644 index 0000000000..2c373f71fc --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/DetectorConstruction.cc @@ -0,0 +1,153 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "DetectorConstruction.hh" + +#include "ScoreBasicMoleculeCounts.hh" +#include "ScoreBasicReactionCounts.hh" + +#include "G4Box.hh" +#include "G4Ellipsoid.hh" +#include "G4LogicalVolume.hh" +#include "G4MultiFunctionalDetector.hh" +#include "G4NistManager.hh" +#include "G4Orb.hh" +#include "G4PVPlacement.hh" +#include "G4PhysicalConstants.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4SDManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VPrimitiveScorer.hh" +#include "Randomize.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + // Water is defined from NIST material database + auto man = G4NistManager::Instance(); + auto water = man->FindOrBuildMaterial("G4_WATER"); + + // + // World + // + const G4double worldXYZ = 1 * m; + + auto solidWorld = new G4Box("World", 0.5 * worldXYZ, 0.5 * worldXYZ, 0.5 * worldXYZ); + auto lvWorld = new G4LogicalVolume(solidWorld, water, "World"); + auto pvWorld = + new G4PVPlacement(nullptr, G4ThreeVector(), lvWorld, "World", nullptr, false, 0, true); + + // + // Cell + ConstructCell(pvWorld); + + // return the world + return pvWorld; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void DetectorConstruction::ConstructCell(G4VPhysicalVolume* pvWorld) +{ + const G4double cellRadius = 7 * um; + const G4double nucleusRadius = 4 * um; + + const G4int nMitochondria = 100; + const G4double mitoA = 0.55 * micrometer; + const G4double mitoB = 0.25 * micrometer; + const G4double mitoC = 0.90 * micrometer; + + auto solidCell = new G4Orb("Cell", cellRadius); + auto lvCell = new G4LogicalVolume( + solidCell, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Cell"); + auto pvCell = + new G4PVPlacement(nullptr, G4ThreeVector(), "Cell", lvCell, pvWorld, false, 0, true); + + auto solidNucleus = new G4Orb("Nucleus", nucleusRadius); + auto lvNucleus = new G4LogicalVolume( + solidNucleus, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Nucleus"); + + new G4PVPlacement(nullptr, G4ThreeVector(), "Nucleus", lvNucleus, pvCell, false, 0, true); + + auto solidMito = new G4Ellipsoid("Mitochondria", mitoA, mitoB, mitoC); + auto lvMito = new G4LogicalVolume( + solidMito, G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"), "Mitochondria"); + + for (auto i = 0; i < nMitochondria; ++i) { + G4bool overlap = true; + do { + auto u = twopi * G4UniformRand(); + auto v = std::acos(2 * G4UniformRand() - 1); + auto dr = G4UniformRand() * cellRadius; + auto x = dr * std::cos(u) * std::sin(v); + auto y = dr * std::sin(u) * std::sin(v); + auto z = dr * std::cos(v); + auto pos = G4ThreeVector(x, y, z); + + auto phi = G4UniformRand() * 2 * pi; + auto psi = G4UniformRand() * 2 * pi; + auto rot = new G4RotationMatrix(); + rot->rotateX(psi); + rot->rotateY(phi); + + auto pvMito = new G4PVPlacement(rot, pos, "Mitochondria", lvMito, pvCell, false, i, false); + + overlap = pvMito->CheckOverlaps(1000, 0, false); + if (overlap) { + G4PhysicalVolumeStore::DeRegister(pvMito); + } + } while (overlap); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void DetectorConstruction::ConstructSDandField() +{ + G4SDManager::GetSDMpointer()->SetVerboseLevel(1); + + auto mfDetector = new G4MultiFunctionalDetector("mfDetector"); + + G4VPrimitiveScorer* primitivSpecies = new ScoreBasicMoleculeCounts("BasicMoleculeCounts", 1, "BasicCounter"); + mfDetector->RegisterPrimitive(primitivSpecies); + primitivSpecies = new ScoreBasicMoleculeCounts("BasicCounter_VariablePrecision", 1, + "BasicCounter_VariablePrecision"); + mfDetector->RegisterPrimitive(primitivSpecies); + primitivSpecies = new ScoreBasicReactionCounts("BasicReactionCounts", 1, "Reactions"); + mfDetector->RegisterPrimitive(primitivSpecies); + + G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); + SetSensitiveDetector("Cell", mfDetector); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/PhysicsList.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/PhysicsList.cc new file mode 100644 index 0000000000..9c92d0919b --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/PhysicsList.cc @@ -0,0 +1,78 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "PhysicsList.hh" + +#include "G4EmDNAChemistry_option3.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4EmParameters.hh" +#include "G4SystemOfUnits.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +PhysicsList::PhysicsList() : G4VModularPhysicsList() +{ + auto currentDefaultCut = 0.001 * mm; + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); + SetDefaultCutValue(currentDefaultCut); + SetVerboseLevel(1); + + fEmDNAPhysicsList = std::make_unique(verboseLevel); + fEmDNAChemistryList = std::make_unique(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PhysicsList::ConstructParticle() +{ + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructParticle(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructParticle(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PhysicsList::ConstructProcess() +{ + AddTransportation(); + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructProcess(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructProcess(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/PrimaryGeneratorAction.cc new file mode 100644 index 0000000000..0359f26835 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/PrimaryGeneratorAction.cc @@ -0,0 +1,73 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "PrimaryGeneratorAction.hh" + +#include "G4ParticleDefinition.hh" +#include "G4ParticleGun.hh" +#include "G4ParticleTable.hh" +#include "G4SystemOfUnits.hh" +#include "Randomize.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +PrimaryGeneratorAction::PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() +{ + G4int n_particle = 1; + fParticleGun = std::make_unique(n_particle); + + // default particle kinematic + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle = particleTable->FindParticle("e-"); + fParticleGun->SetParticleDefinition(particle); + fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., 0.)); + fParticleGun->SetParticleEnergy(100 * keV); + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.)); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + auto phi = CLHEP::twopi * G4UniformRand(); + auto cosTheta = 2 * G4UniformRand() - 1; + auto sinTheta = std::sqrt(1 - cosTheta * cosTheta); + auto ux = sinTheta * std::cos(phi); + auto uy = sinTheta * std::sin(phi); + auto uz = cosTheta; + + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(ux, uy, uz)); + fParticleGun->GeneratePrimaryVertex(anEvent); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/Run.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/Run.cc new file mode 100644 index 0000000000..59f01267b5 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/Run.cc @@ -0,0 +1,111 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "Run.hh" + +#include "ScoreBasicMoleculeCounts.hh" +#include "ScoreBasicReactionCounts.hh" + +#include "G4MoleculeCounterManager.hh" +#include "G4SDManager.hh" +#include "G4VSensitiveDetector.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +Run::Run() : G4Run() +{ + auto mfdet = dynamic_cast( + G4SDManager::GetSDMpointer()->FindSensitiveDetector("mfDetector")); + + fScorerMoleculesBasic = mfdet->GetPrimitive( + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/BasicMoleculeCounts")); + fScorerMoleculesBasicVariablePrecision = mfdet->GetPrimitive( + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/BasicCounter_VariablePrecision")); + fScorerReactionsBasic = mfdet->GetPrimitive( + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/BasicReactionCounts")); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void Run::Merge(const G4Run* aRun) +{ + if (aRun == nullptr || aRun == this) return; + + // Ideally, merging of workers -> master counters is handled by the counter manager + // as part of its EndOfEventAction and EndOfRunAction, if and when the manager it instructed + // to reset the counters between events or runs. + // In the case of resets between runs, the user has two options: + // (1) ignore the master counter entries and merge results from sensitive detector workers; or + // (2) do not trigger sensitive detectors in the workers and read out from the master, only + // If the counter manager does not accumulate, only option (1) is feasible. + // + // In the case of resets between events, and the counter manager does not accumulate, the user + // must: + // (*) fill the scorers during the Event (or using G4VPrimitiveScorer::EndOfEvent); and + // (*) merge the worker scorers at the end of the run + // This is the "current" behavior, for example, when calculating G-values. + // + // The code below accumulates the scorers' workers into the respective master + // in case the manager does not accumulate, or we reset between events or runs. + + if (G4MoleculeCounterManager::Instance()->GetResetCountersBeforeEvent() + || G4MoleculeCounterManager::Instance()->GetResetCountersBeforeRun() + || !G4MoleculeCounterManager::Instance()->GetAccumulateCounterIntoMaster()) + { + { + auto masterScorer = dynamic_cast(this->fScorerMoleculesBasic); + auto localScorer = dynamic_cast( + static_cast(aRun)->fScorerMoleculesBasic); + masterScorer->AbsorbResultsFromWorkerScorer(localScorer); + } + + { + auto masterScorer = + dynamic_cast(this->fScorerMoleculesBasicVariablePrecision); + auto localScorer = dynamic_cast( + static_cast(aRun)->fScorerMoleculesBasicVariablePrecision); + masterScorer->AbsorbResultsFromWorkerScorer(localScorer); + } + + { + auto masterScorer = dynamic_cast(this->fScorerReactionsBasic); + auto localScorer = dynamic_cast( + static_cast(aRun)->fScorerReactionsBasic); + masterScorer->AbsorbResultsFromWorkerScorer(localScorer); + } + } + + G4Run::Merge(aRun); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/RunAction.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/RunAction.cc new file mode 100644 index 0000000000..1b24b01f48 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/RunAction.cc @@ -0,0 +1,99 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "RunAction.hh" + +#include "Run.hh" +#include "ScoreBasicMoleculeCounts.hh" +#include "ScoreBasicReactionCounts.hh" + +#include "G4AnalysisManager.hh" +#include "G4DNAChemistryManager.hh" +#include "G4RunManager.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4Run* RunAction::GenerateRun() +{ + auto run = new Run(); + return run; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void RunAction::BeginOfRunAction(const G4Run* run) +{ + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + + // do your own stuff for an event here + + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; + G4RunManager::GetRunManager()->SetRandomNumberStore(false); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void RunAction::EndOfRunAction(const G4Run* run) +{ + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + + // do your own stuff for an event here + + auto nofEvents = run->GetNumberOfEvent(); + if (nofEvents == 0) return; + + if (IsMaster()) { + G4cout << "End of Global Run totaling nEvents = " << nofEvents << G4endl; + auto myRun = dynamic_cast(run); + + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetDefaultFileType("root"); + G4String fileN = "MoleculeCounters"; + analysisManager->OpenFile(fileN); + + dynamic_cast(myRun->GetBasicMoleculeScorer())->OutputAndClear(); + dynamic_cast(myRun->GetBasicMoleculeScorerWithVariablePrecision()) + ->OutputAndClear(); + dynamic_cast(myRun->GetBasicReactionScorer())->OutputAndClear(); + + analysisManager->Write(); + analysisManager->CloseFile(); + } + else { + G4cout << "End of Local Run with nEvents = " << nofEvents << G4endl; + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicMoleculeCounts.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicMoleculeCounts.cc new file mode 100644 index 0000000000..bd305924da --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicMoleculeCounts.cc @@ -0,0 +1,207 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ScoreBasicMoleculeCounts.hh" + +#include "G4AnalysisManager.hh" +#include "G4Event.hh" +#include "G4EventManager.hh" +#include "G4MolecularConfiguration.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4Scheduler.hh" +#include "G4SystemOfUnits.hh" +#include "G4TScoreNtupleWriter.hh" +#include "G4UImessenger.hh" +#include "G4UnitsTable.hh" +#include "globals.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ScoreBasicMoleculeCounts::ScoreBasicMoleculeCounts(G4String name, G4int depth, + G4String moleculeCounterName) + : G4VPrimitiveScorer(name, depth), + G4UImessenger(), + fMoleculeCounterName(moleculeCounterName), + fRunID(), + fNbOfScoredEvents(), + fTimesToRecord(), + fMoleculeCountPerIndexPerTime() +{ + fAddTimeToRecordcmd = new G4UIcmdWithADoubleAndUnit(ScorerCommand("addTimeToRecord"), this); + fTimeBincmd = new G4UIcmdWithAnInteger(ScorerCommand("nOfTimeBins"), this); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +const char* ScoreBasicMoleculeCounts::ScorerCommand(G4String command) +{ + command = "/scorer/" + GetName() + "/" + command; + return command.c_str(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ScoreBasicMoleculeCounts::~ScoreBasicMoleculeCounts() +{ + delete fAddTimeToRecordcmd;//can be smart ptr ? + delete fTimeBincmd; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicMoleculeCounts::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fAddTimeToRecordcmd) { + G4double cmdTime = fAddTimeToRecordcmd->GetNewDoubleValue(newValue); + AddTimeToRecord(cmdTime); + } + if (command == fTimeBincmd) { + ClearTimesToRecord(); + G4int cmdBins = fTimeBincmd->GetNewIntValue(newValue); + G4double timeMin = 1 * ps; + G4double timeMax = G4Scheduler::Instance()->GetEndTime(); + G4double timeLogMin = std::log10(timeMin); + G4double timeLogMax = std::log10(timeMax); + for (G4int i = 0; i < cmdBins; i++) { + AddTimeToRecord(std::pow(10, timeLogMin + i * (timeLogMax - timeLogMin) / (cmdBins - 1))); + } + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4bool ScoreBasicMoleculeCounts::ProcessHits(G4Step*, G4TouchableHistory*) +{ + return true; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicMoleculeCounts::EndOfEvent(G4HCofThisEvent*) +{ + if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) return; + + auto counters = G4MoleculeCounterManager::Instance()->GetMoleculeCounters(fMoleculeCounterName); + + G4MoleculeCounter* counter = nullptr; + if (counters.rbegin() != counters.rend()) { + counter = + const_cast(dynamic_cast(*counters.begin())); + if (counter == nullptr) + G4Exception("ScoreMoleculeCounter::EndOfEvent", "SCOREMOLCOUNT", FatalException, + "Molecule counter has wrong type!"); + } + else { + G4Exception("ScoreMoleculeCounter::EndOfEvent", "SCOREMOLCOUNT", FatalException, + "No molecule counter with given name found!"); + } + + for (auto const& entry : counter->GetCounterMap()) { + auto key = entry.first.GetMolecule()->GetName(); + for (auto const& time : fTimesToRecord) { + G4int nbOfMoleculesAtTime = counter->GetNbMoleculesAtTime(entry.first, time); + fMoleculeCountPerIndexPerTime[key][time] += nbOfMoleculesAtTime; + } + } + + ++fNbOfScoredEvents; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicMoleculeCounts::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) +{ + ScoreBasicMoleculeCounts* worker = dynamic_cast(workerScorer); + if (worker == nullptr || worker == this) return; + + fNbOfScoredEvents += worker->fNbOfScoredEvents; + + for (auto const& workerEntry : worker->fMoleculeCountPerIndexPerTime) { + auto emplacedPair = + fMoleculeCountPerIndexPerTime.emplace(workerEntry.first, workerEntry.second); + if (!emplacedPair.second) { // workerEntry.first already exists, emplacedPair.first == it + auto it = emplacedPair.first; + + for (auto const& workerMoleculeCountWithTimeIter : workerEntry.second) { + auto masterMoleculeCountWithTimeIter = + it->second.find(workerMoleculeCountWithTimeIter.first); + masterMoleculeCountWithTimeIter->second += workerMoleculeCountWithTimeIter.second; + } + } + } + + worker->clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicMoleculeCounts::clear() +{ + G4VPrimitiveScorer::clear(); + fNbOfScoredEvents = 0; + fMoleculeCountPerIndexPerTime.clear(); +} + +void ScoreBasicMoleculeCounts::OutputAndClear() +{ + if (G4Threading::IsWorkerThread()) return; + + G4cout << "\n\nWriting Scorers: " << GetName() << G4endl; + + WriteWithAnalysisManager(); + + ++fRunID; + clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicMoleculeCounts::WriteWithAnalysisManager() +{ + auto analysisManager = G4AnalysisManager::Instance(); + + int fNtupleID = analysisManager->CreateNtuple("BasicMoleculeCount_" + fMoleculeCounterName, + "BasicMoleculeCount_" + fMoleculeCounterName); + + analysisManager->CreateNtupleDColumn("Time__ps_"); + analysisManager->CreateNtupleDColumn("Molecule_Count"); + analysisManager->CreateNtupleSColumn("Molecule_Name"); + analysisManager->FinishNtuple(); + + for (auto const& entry : fMoleculeCountPerIndexPerTime) { + G4cout << entry.first << ":" << G4endl; + + for (auto const& moleculeCountWithTime : entry.second) { + auto moleculeCount = moleculeCountWithTime.second; + //auto moleculeCountPerEvent = moleculeCount / fNbOfScoredEvents;//not used + + auto time = moleculeCountWithTime.first; + auto moleculeName = entry.first; + + G4cout << " t=" << G4BestUnit(time, "Time") << ", n=" << moleculeCount << G4endl; + + analysisManager->FillNtupleDColumn(fNtupleID, 0, time / ps); // time + analysisManager->FillNtupleDColumn(fNtupleID, 1, moleculeCount); // Number + analysisManager->FillNtupleSColumn(fNtupleID, 2, moleculeName); // molecule name + analysisManager->AddNtupleRow(fNtupleID); + } + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicReactionCounts.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicReactionCounts.cc new file mode 100644 index 0000000000..3b830c78d2 --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/ScoreBasicReactionCounts.cc @@ -0,0 +1,201 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "ScoreBasicReactionCounts.hh" + +#include "G4AnalysisManager.hh" +#include "G4Event.hh" +#include "G4EventManager.hh" +#include "G4MolecularConfiguration.hh" +#include "G4MoleculeCounterManager.hh" +#include "G4MoleculeReactionCounter.hh" +#include "G4Scheduler.hh" +#include "G4SystemOfUnits.hh" +#include "G4TScoreNtupleWriter.hh" +#include "G4UImessenger.hh" +#include "G4UnitsTable.hh" +#include "globals.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ScoreBasicReactionCounts::ScoreBasicReactionCounts(G4String name, G4int depth, + G4String moleculeCounterName) + : G4VPrimitiveScorer(name, depth), + G4UImessenger(), + fMoleculeCounterName(moleculeCounterName), + fRunID(), + fNbOfScoredEvents(), + fTimesToRecord(), + fReactionCountPerIndexPerTime() +{ + fAddTimeToRecordcmd = + new G4UIcmdWithADoubleAndUnit("/scorer/basicreactioncounts/addTimeToRecord", this); + fTimeBincmd = new G4UIcmdWithAnInteger("/scorer/basicreactioncounts/nOfTimeBins", this); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +ScoreBasicReactionCounts::~ScoreBasicReactionCounts() +{ + delete fAddTimeToRecordcmd;//cannot be unique_ptr ? + delete fTimeBincmd; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fAddTimeToRecordcmd) { + G4double cmdTime = fAddTimeToRecordcmd->GetNewDoubleValue(newValue); + AddTimeToRecord(cmdTime); + } + if (command == fTimeBincmd) { + ClearTimesToRecord(); + G4int cmdBins = fTimeBincmd->GetNewIntValue(newValue); + G4double timeMin = 1 * ps; + G4double timeMax = G4Scheduler::Instance()->GetEndTime(); + G4double timeLogMin = std::log10(timeMin); + G4double timeLogMax = std::log10(timeMax); + for (G4int i = 0; i < cmdBins; i++) { + AddTimeToRecord(std::pow(10, timeLogMin + i * (timeLogMax - timeLogMin) / (cmdBins - 1))); + } + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4bool ScoreBasicReactionCounts::ProcessHits(G4Step*, G4TouchableHistory*) +{ + return true; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::EndOfEvent(G4HCofThisEvent*) +{ + if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) return; + + auto counters = + G4MoleculeCounterManager::Instance()->GetMoleculeReactionCounters(fMoleculeCounterName); + + G4MoleculeReactionCounter *counter = nullptr; + if (counters.rbegin() != counters.rend()) { + counter = const_cast( + dynamic_cast(*counters.begin())); + if (counter == nullptr) + G4Exception("ScoreReactionCounter::EndOfEvent", "SCOREMOLCOUNT", FatalException, + "Molecule counter has wrong type!"); + } + else { + G4Exception("ScoreReactionCounter::EndOfEvent", "SCOREMOLCOUNT", FatalException, + "No molecule counter with given name found!"); + } + + for (auto const& entry : counter->GetCounterMap()) { + auto key = entry.first.GetInfo(); + for (auto const& time : fTimesToRecord) { + G4int nbOfMoleculesAtTime = counter->GetNbReactionsAtTime(entry.first, time); + fReactionCountPerIndexPerTime[key][time] += nbOfMoleculesAtTime; + } + } + + ++fNbOfScoredEvents; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) +{ + auto worker = dynamic_cast(workerScorer); + if (worker == nullptr || worker == this) return; + + fNbOfScoredEvents += worker->fNbOfScoredEvents; + + for (auto const& workerEntry : worker->fReactionCountPerIndexPerTime) { + auto emplacedPair = + fReactionCountPerIndexPerTime.emplace(workerEntry.first, workerEntry.second); + if (!emplacedPair.second) { // workerEntry.first already exists, emplacedPair.first == it + auto it = emplacedPair.first; + + for (auto const& workerMoleculeCountWithTimeIter : workerEntry.second) { + auto masterMoleculeCountWithTimeIter = + it->second.find(workerMoleculeCountWithTimeIter.first); + masterMoleculeCountWithTimeIter->second += workerMoleculeCountWithTimeIter.second; + } + } + } + + worker->clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::clear() +{ + G4VPrimitiveScorer::clear(); + fNbOfScoredEvents = 0; + fReactionCountPerIndexPerTime.clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::OutputAndClear() +{ + if (G4Threading::IsWorkerThread()) return; + + G4cout << "\n\nWriting Scorers: " << GetName() << G4endl; + + WriteWithAnalysisManager(); + + ++fRunID; + clear(); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void ScoreBasicReactionCounts::WriteWithAnalysisManager() +{ + auto analysisManager = G4AnalysisManager::Instance(); + + int fNtupleID = analysisManager->CreateNtuple("BasicReactionCount_" + fMoleculeCounterName, + "BasicReactionCount_" + fMoleculeCounterName); + analysisManager->CreateNtupleDColumn("Time__ps_"); + analysisManager->CreateNtupleDColumn("Reaction_Count"); + analysisManager->CreateNtupleSColumn("Reaction_Name"); + analysisManager->FinishNtuple(); + + for (auto const& entry : fReactionCountPerIndexPerTime) { + G4cout << entry.first << ":" << G4endl; + + for (auto const& reactionCountWithTime : entry.second) { + auto reactionCount = reactionCountWithTime.second; + auto time = reactionCountWithTime.first; + auto reactionName = entry.first; + + G4cout << " t=" << G4BestUnit(time, "Time") << ", n=" << reactionCount << G4endl; + + analysisManager->FillNtupleDColumn(fNtupleID, 0, time / ps); // time + analysisManager->FillNtupleDColumn(fNtupleID, 1, reactionCount); // Number + analysisManager->FillNtupleSColumn(fNtupleID, 2, reactionName); // molecule name + analysisManager->AddNtupleRow(fNtupleID); + } + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/molcounters/sdcounters/src/StackingAction.cc b/examples/extended/medical/dna/molcounters/sdcounters/src/StackingAction.cc new file mode 100644 index 0000000000..cc1cabe7ac --- /dev/null +++ b/examples/extended/medical/dna/molcounters/sdcounters/src/StackingAction.cc @@ -0,0 +1,50 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// The `molcounters` example(s) are provided as part of Geant4-DNA +// and any report or published result obtained using it shall cite +// the respective Geant4-DNA collaboration publications. +// +// Reports or results obtained using the spatially-aware `MoleculeCounter` +// provided in this example, shall further cite: +// +// Velten & Tomé, Radiation Physics and Chemistry, 2023 (10.1016/j.radphyschem.2023.111194) +// +// +// Author: Christian Velten (2025) +// + +#include "StackingAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4StackManager.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void StackingAction::NewStage() +{ + if (stackManager->GetNTotalTrack() == 0) { + G4DNAChemistryManager::Instance()->Run(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/neuron/neuron.out b/examples/extended/medical/dna/neuron/neuron.out index 17694e674b..aa1c56316f 100644 --- a/examples/extended/medical/dna/neuron/neuron.out +++ b/examples/extended/medical/dna/neuron/neuron.out @@ -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 @@ -57,23 +57,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", @@ -144,7 +145,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 ======== @@ -665,7 +666,7 @@ Physics stage ends Dend3DEdep.out, Axon3DEdep.out, Soma3DEdep.out Outputs of energy deposition per event written in data file: OutputPerEvent.out - Calculation time = 1.11131 s + Calculation time = 1.12602 s Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/medical/dna/pdb4dna/pdb4dna.out b/examples/extended/medical/dna/pdb4dna/pdb4dna.out index d280a14746..d0151a4498 100644 --- a/examples/extended/medical/dna/pdb4dna/pdb4dna.out +++ b/examples/extended/medical/dna/pdb4dna/pdb4dna.out @@ -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 @@ -29,23 +29,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", @@ -147,7 +148,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 ======== @@ -353,7 +354,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 ====== @@ -369,7 +372,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 @@ -397,19 +400,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -431,23 +436,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -470,19 +479,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -492,19 +503,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== diff --git a/examples/extended/medical/dna/radial/.README.txt b/examples/extended/medical/dna/radial/.README.txt new file mode 100644 index 0000000000..5eae7760d6 --- /dev/null +++ b/examples/extended/medical/dna/radial/.README.txt @@ -0,0 +1,103 @@ + +///\file "medical/dna/radial/.README.txt" +///\brief Example radial README page + +/*! \page ExampleRadial Example radial + +\author S. Incerti (a, *)\n +a. LP2i, IN2P3 / CNRS / Bordeaux 1 University, 33175 Gradignan, France \n +* e-mail: incerti@lp2ib.in2p3.fr\n + +\section radial_s1 INTRODUCTION + +The radial example shows how to simulate radial dose profiles in liquid water +from incident ions using the Geant4-DNA physics processes and models. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Med. Phys. 51 (2024) 5873–5889 +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +\section radial_s2 GEOMETRY SET-UP + +The geometry is a set of cylindrical shells (hollow cylinders) made of liquid water +(G4_WATER material) and aligned along the Z-axis. The World is an empty cylinder +wrapping these shells and having the same maximum radius. + +a) The maximum radius of the set can be specified using the following UI command: + +\verbatim +/radial/setWorldRadius value unit +\endverbatim + +b) The Z length of the shells is the same as the length of the World and can be set using: + +\verbatim +/radial/setWorldLength value unit +\endverbatim + +c) The thickness of each shell can be specified using the command: + +\verbatim +/radial/setThicknessCylinders value unit +\endverbatim + +Particles are shot from the center of the entrance surface of the cylinders. +The Z position is negative and is equal to the half-length of the World. + +\section radial_s3 DATA + +Make sure $G4LEDATA points to the low-energy electromagnetic data files. + +\section radial_s4 HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +\verbatim +./radial +\endverbatim + +In batch, the macro radial.in can be used. It shows how to shoot different types +of ions and how to use Geant4-DNA Physics constructors. + +\section radial_s5 PHYSICS + +The PhysicsList uses Geant4-DNA Physics constructors. + +Geant4-DNA Physics constructors can be selected using the command: + +\verbatim +/radial/addPhysics DNA_OptX +\endverbatim + +where X is 0 to 8 (2, 4 or 6 are recommended). + +Comments regarding ions: + +- only the ionisation process is considered, and the radial absorbed dose is obtained +considering all energy losses by secondary electrons + +- when the incident particle type is ion (/gun/particle ion), specified with Z +and A numbers (/gun/ion A Z), the Rudd ionisation extended model is used. +The particles are tracked by default down to 0.5 MeV/u and undergo below a capture +process. This tracking cut can be bypassed using: + +\verbatim +/radial/addIonsTrackingCut false +\endverbatim + +\section radial_s6 SIMULATION OUTPUT + +The output results consist in a ROOT radial.root file, containing an ntuple, named +"radial" and containing the absorbed dose for each cylinder, identified by its +inner radius, per incident ion. + +The ROOT macro file plot.C can be used to draw the radial dose profile. + +*/ diff --git a/examples/extended/parallel/MPI/examples/exMPI03/CMakeLists.txt b/examples/extended/medical/dna/radial/CMakeLists.txt similarity index 51% rename from examples/extended/parallel/MPI/examples/exMPI03/CMakeLists.txt rename to examples/extended/medical/dna/radial/CMakeLists.txt index 5a7a1dafe8..64ab36e2e8 100644 --- a/examples/extended/parallel/MPI/examples/exMPI03/CMakeLists.txt +++ b/examples/extended/medical/dna/radial/CMakeLists.txt @@ -1,67 +1,53 @@ -# - CmakeLists.txt for building an application - #---------------------------------------------------------------------------- # Setup the project cmake_minimum_required(VERSION 3.16...3.27) -project(exMPI03) - -#------------------------------------------------------------------------------ -# check MPI package... -#find_package(MPI REQUIRED) +project(radial) #---------------------------------------------------------------------------- -# Find Geant4 package, activating all available UI and Vis drivers by default -# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# Find Geant4 package, activating all available Vis drivers by default +# You can set WITH_GEANT4_VIS to OFF via the command line or ccmake/cmake-gui # to build a batch mode only executable -option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) +# +option(WITH_GEANT4_VIS "Build example with Geant4 Vis drivers" ON) +if(WITH_GEANT4_VIS) + find_package(Geant4 REQUIRED vis_all) else() find_package(Geant4 REQUIRED) endif() -find_package(G4mpi REQUIRED) - #---------------------------------------------------------------------------- # Setup Geant4 include directories and compile definitions # include(${Geant4_USE_FILE}) -#------------------------------------------------------------------------------ -add_definitions(-DTOOLS_USE_NATIVE_MPI) - #---------------------------------------------------------------------------- # Locate sources and headers for this project # +include_directories(${PROJECT_SOURCE_DIR}/include + ${Geant4_INCLUDE_DIR}) file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR} - ${G4mpi_INCLUDE_DIR}) - - #---------------------------------------------------------------------------- # Add the executable, and link it to the Geant4 libraries # -add_executable(exMPI03 exMPI03.cc ${sources} ${headers}) -target_link_libraries(exMPI03 ${G4mpi_LIBRARIES} ${Geant4_LIBRARIES}) +add_executable(radial radial.cc ${sources} ${headers}) +target_link_libraries(radial ${Geant4_LIBRARIES} ) #---------------------------------------------------------------------------- # Copy all scripts to the build directory, i.e. the directory in which we -# build exMPI03. This is so that we can run the executable directly because it +# build radial. This is so that we can run the executable directly because it # relies on these scripts being in the current working directory. # -set(exMPI03_SCRIPTS - run.mac - vis.mac - ) -foreach(_script ${exMPI03_SCRIPTS}) +file(GLOB MAC_FILES ${PROJECT_SOURCE_DIR}/*.mac + ${PROJECT_SOURCE_DIR}/*.in + ${PROJECT_SOURCE_DIR}/*.C) + +foreach(_script ${MAC_FILES}) configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} + ${_script} + ${PROJECT_BINARY_DIR}/. COPYONLY ) endforeach() @@ -69,4 +55,4 @@ endforeach() #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # -install(TARGETS exMPI03 DESTINATION bin) +install(TARGETS radial DESTINATION bin) diff --git a/examples/extended/medical/dna/radial/History b/examples/extended/medical/dna/radial/History new file mode 100644 index 0000000000..d3de441094 --- /dev/null +++ b/examples/extended/medical/dna/radial/History @@ -0,0 +1,8 @@ +# Example radial History + +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-03-17 Sebastien Incerti (radial-V11-03-00) +- Created diff --git a/examples/extended/medical/dna/radial/README b/examples/extended/medical/dna/radial/README new file mode 100644 index 0000000000..d6cda60d44 --- /dev/null +++ b/examples/extended/medical/dna/radial/README @@ -0,0 +1,92 @@ + ========================================================= + Geant4 - radial example + ========================================================= + + README file + ---------------------- + + CORRESPONDING AUTHOR + +S. Incerti (a, *) +a. LP2i, IN2P3 / CNRS / Bordeaux University, 33175 Gradignan, France +* e-mail: incerti@lp2ib.in2p3.fr + +---->0. INTRODUCTION + +The radial example shows how to simulate radial dose profiles in liquid water +from incident ions using the Geant4-DNA physics processes and models. + +The Geant4-DNA processes and models are further described at: +http://geant4-dna.org + +Any report or published results obtained using the Geant4-DNA software shall +cite the following Geant4-DNA collaboration publications: +Med. Phys. 51 (2024) 5873–5889 +Med. Phys. 45 (2018) e722-e739 +Phys. Med. 31 (2015) 861-874 +Med. Phys. 37 (2010) 4692-4708 +Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 + +---->1. GEOMETRY SET-UP + +The geometry is a set of cylindrical shells (hollow cylinders) made of liquid water +(G4_WATER material) and aligned along the Z-axis. The World is an empty cylinder +wrapping these shells and having the same maximum radius. + +a) The maximum radius of the set can be specified using the following UI command: + +/radial/setWorldRadius value unit + +b) The Z length of the shells is the same as the length of the World and can be set using: + +/radial/setWorldLength value unit + +c) The thickness of each shell can be specified using the command: + +/radial/setThicknessCylinders value unit + +Particles are shot from the center of the entrance surface of the cylinders. +The Z position is negative and is equal to the half-length of the World. + +---->2. DATA + +Make sure $G4LEDATA points to the low-energy electromagnetic data files. + +---->3. HOW TO RUN THE EXAMPLE + +In interactive mode, run: + +./radial + +In batch, the macro radial.in can be used. It shows how to shoot different +types of ions and how to use Geant4-DNA Physics constructors. + +---->4. PHYSICS + +The PhysicsList uses Geant4-DNA Physics constructors. + +Geant4-DNA Physics constructors can be selected using the command: + +/radial/addPhysics DNA_OptX + +where X is 0 to 8 (2, 4 or 6 are recommended). + +Comments regarding ions: + +- only the ionisation process is considered, and the radial absorbed dose is obtained +considering all energy losses by secondary electrons + +- when the incident particle type is ion (/gun/particle ion), specified with Z +and A numbers (/gun/ion A Z), the Rudd ionisation extended model is used. +The particles are tracked by default down to 0.5 MeV/u and undergo below a capture +process. This tracking cut can be bypassed using: + +/radial/addIonsTrackingCut false + +---->5. SIMULATION OUTPUT + +The output results consist in a ROOT radial.root file, containing an ntuple, named +"radial" and containing the absorbed dose for each cylinder, identified by its +inner radius, per incident ion. + +The ROOT macro file plot.C can be used to draw the radial dose profile. diff --git a/examples/extended/medical/dna/radial/include/ActionInitialization.hh b/examples/extended/medical/dna/radial/include/ActionInitialization.hh new file mode 100644 index 0000000000..cff1a14104 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/ActionInitialization.hh @@ -0,0 +1,60 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file ActionInitialization.hh +/// \brief Definition of the ActionInitialization class + +#ifndef ActionInitialization_h +#define ActionInitialization_h 1 + +#include "G4VUserActionInitialization.hh" + +class DetectorConstruction; + +class ActionInitialization : public G4VUserActionInitialization +{ + public: + ActionInitialization(DetectorConstruction *); + ~ActionInitialization() override = default; + + void BuildForMaster() const override; + void Build() const override; + + private: + DetectorConstruction* fDetectorConstruction = nullptr; +}; + +#endif diff --git a/examples/extended/medical/dna/radial/include/DetectorConstruction.hh b/examples/extended/medical/dna/radial/include/DetectorConstruction.hh new file mode 100644 index 0000000000..69ae5d2fc9 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/DetectorConstruction.hh @@ -0,0 +1,88 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file DetectorConstruction.hh +/// \brief Definition of the DetectorConstruction class + +#ifndef DetectorConstruction_h +#define DetectorConstruction_h 1 + +#include "G4NistManager.hh" +#include "G4PVPlacement.hh" +#include "G4VUserDetectorConstruction.hh" + +class DetectorMessenger; +class PhysicsList; + +class DetectorConstruction : public G4VUserDetectorConstruction +{ + public: + DetectorConstruction(PhysicsList*); + ~DetectorConstruction() override; + + G4VPhysicalVolume* Construct() override; + + void SetMaterial(const G4String&); + void SetWorldRadius(const G4double&); + void SetWorldLength(const G4double&); + void SetThicknessCylinders(const G4double&); + void SetMinRadiusCylinders(const G4double&); + void SetMaxRadiusCylinders(const G4double&); + + G4int GetNumberCylinders() const {return fNumberCylinders;} + G4double GetThicknessCylinders() const {return fThicknessCylinders;} + G4double GetWorldLength() const {return fWorldLength;} + + private: + + G4double fWorldRadius = 0; + G4double fWorldLength = 0; + + G4double fThicknessCylinders = 0; + G4double fNumberCylinders = 0; + G4double fMinRadiusCylinders = 0; + + void DefineMaterials(); + + G4LogicalVolume* fLogicWorld = nullptr; + G4PVPlacement* fPhysiWorld = nullptr; + + G4Material* fWaterMaterial = nullptr; + G4Material* fVacuumMaterial = nullptr; + + DetectorMessenger* fDetectorMessenger = nullptr; +}; +#endif diff --git a/examples/extended/medical/dna/radial/include/DetectorMessenger.hh b/examples/extended/medical/dna/radial/include/DetectorMessenger.hh new file mode 100644 index 0000000000..72d2311edd --- /dev/null +++ b/examples/extended/medical/dna/radial/include/DetectorMessenger.hh @@ -0,0 +1,74 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file DetectorMessenger.hh +/// \brief Definition of the DetectorMessenger class + +#ifndef DetectorMessenger_h +#define DetectorMessenger_h 1 + +#include "G4UImessenger.hh" + +class DetectorConstruction; +class PhysicsList; + +class G4UIcmdWithAString; +class G4UIcmdWithABool; +class G4UIcmdWithADoubleAndUnit; + +class DetectorMessenger : public G4UImessenger +{ + public: + DetectorMessenger(DetectorConstruction*, PhysicsList*); + ~DetectorMessenger() override; + + void SetNewValue(G4UIcommand*, G4String) override; + + private: + DetectorConstruction* fDetector = nullptr; + PhysicsList* fPhysList = nullptr; + + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMatCmd = nullptr; + G4UIcmdWithAString* fPhysCmd = nullptr; + G4UIcmdWithABool* fTrackingCutCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fWorldRadiusCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fWorldLengthCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fThicknessCylindersCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fMinRadiusCylindersCmd = nullptr; +}; + +#endif diff --git a/examples/extended/medical/dna/radial/include/PhysicsList.hh b/examples/extended/medical/dna/radial/include/PhysicsList.hh new file mode 100644 index 0000000000..fabf2fa169 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/PhysicsList.hh @@ -0,0 +1,74 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file PhysicsList.hh +/// \brief Definition of the PhysicsList class + +#ifndef PhysicsList_h +#define PhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" + +#include "globals.hh" + +class G4VPhysicsConstructor; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysicsList : public G4VModularPhysicsList +{ + public: + PhysicsList(); + ~PhysicsList() override; + + void ConstructParticle() override; + void ConstructProcess() override; + + void AddPhysics(const G4String&); + void SetTrackingCut(G4bool); + + private: + void TrackingCut(); + + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4VPhysicsConstructor* fDecayPhysicsList = nullptr; + G4VPhysicsConstructor* fRadDecayPhysicsList = nullptr; + + G4String fEmPhysics = ""; + G4bool fIsTrackingCutSet = true; +}; + +#endif diff --git a/examples/extended/medical/dna/radial/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/radial/include/PrimaryGeneratorAction.hh new file mode 100644 index 0000000000..d3e441e9d5 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/PrimaryGeneratorAction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file PrimaryGeneratorAction.hh +/// \brief Definition of the PrimaryGeneratorAction class + +#ifndef PrimaryGeneratorAction_h +#define PrimaryGeneratorAction_h 1 + +#include "G4ParticleGun.hh" +#include "G4VUserPrimaryGeneratorAction.hh" + +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + public: + PrimaryGeneratorAction(); + virtual ~PrimaryGeneratorAction(); + virtual void GeneratePrimaries(G4Event*); + + G4double GetPrimaryKineticEnergy() const { return fKineticEnergy; } + + private: + G4ParticleGun* fParticleGun = nullptr; + G4double fKineticEnergy = 0.; +}; +#endif diff --git a/examples/extended/medical/dna/radial/include/Run.hh b/examples/extended/medical/dna/radial/include/Run.hh new file mode 100644 index 0000000000..3bbcfa7ea1 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/Run.hh @@ -0,0 +1,66 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file Run.hh +/// \brief Definition of the Run class + +#ifndef Run_h +#define Run_h 1 + +#include "DetectorConstruction.hh" + +#include "G4Run.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +class Run : public G4Run +{ + public: + Run(DetectorConstruction *); + ~Run(); + + void Merge(const G4Run*) override; + void EndOfRun(); + + void AddCylDoseDeposit(G4int i, G4double e) { fCylDoseDeposit[i] += e; } + inline G4double GetCylDoseDeposit(G4int i) const { return fCylDoseDeposit[i]; } + + private: + G4double * fCylDoseDeposit = nullptr; + DetectorConstruction* fMyDetectorConstruction = nullptr; +}; + +#endif diff --git a/examples/extended/medical/dna/radial/include/RunAction.hh b/examples/extended/medical/dna/radial/include/RunAction.hh new file mode 100644 index 0000000000..bb331356c4 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/RunAction.hh @@ -0,0 +1,72 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file RunAction.hh +/// \brief Definition of the RunAction class + +#ifndef RunAction_h +#define RunAction_h 1 + +#include "DetectorConstruction.hh" +#include "Run.hh" + +#include "G4UserRunAction.hh" + +#include "globals.hh" +#include + +class G4Run; + +class RunAction : public G4UserRunAction +{ + public: + explicit RunAction(DetectorConstruction*); + ~RunAction() override; + + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + G4Run* GenerateRun() override; + + void AddDoseCyl(G4int i, G4double x) {fCylDose[i] +=x;} + G4double GetDoseCyl(G4int i) {return fCylDose[i];} + + private: + DetectorConstruction* fMyDetectorConstruction = nullptr; + Run* fRun = nullptr; + + G4double * fCylDose = nullptr; +}; +#endif diff --git a/examples/extended/medical/dna/radial/include/SteppingAction.hh b/examples/extended/medical/dna/radial/include/SteppingAction.hh new file mode 100644 index 0000000000..e9f5b2e694 --- /dev/null +++ b/examples/extended/medical/dna/radial/include/SteppingAction.hh @@ -0,0 +1,56 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file SteppingAction.hh +/// \brief Definition of the SteppingAction class + +#ifndef SteppingAction_h +#define SteppingAction_h 1 + +#include "G4UserSteppingAction.hh" + +class SteppingAction : public G4UserSteppingAction +{ + public: + SteppingAction(); + virtual ~SteppingAction(); + + virtual void UserSteppingAction(const G4Step*); + + private: + G4bool energyFix = false; +}; +#endif diff --git a/examples/extended/medical/dna/radial/plot.C b/examples/extended/medical/dna/radial/plot.C new file mode 100644 index 0000000000..bef0f2d372 --- /dev/null +++ b/examples/extended/medical/dna/radial/plot.C @@ -0,0 +1,59 @@ +// ------------------------------------------------------------------- +// ------------------------------------------------------------------- +// +// ********************************************************************* +// To execute this macro under ROOT after your simulation ended, +// 1 - launch ROOT (usually type 'root' at your machine's prompt) +// 2 - type '.X plot.C' at the ROOT session prompt +// ********************************************************************* + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address); + +void plot() +{ + gROOT->Reset(); + gStyle->SetPalette(1); + gROOT->SetStyle("Plain"); + + TCanvas* c1 = new TCanvas ("c1","",20,20,800,800); + c1->Divide(1,1); + + TFile* f = new TFile("radial.root"); + + TNtuple* ntuple; + ntuple = (TNtuple*)f->Get("radial"); + bool rowWise = true; + TBranch* eventBranch = ntuple->FindBranch("row_wise_branch"); + if ( ! eventBranch ) rowWise = false; + + c1->cd(1); + gStyle->SetOptStat(000000); + gPad->SetLogy(); + + ntuple->SetLineWidth(5); + ntuple->Draw("dose:radius","","L"); + + TH1* hist = (TH1*)gPad->GetPrimitive("htemp"); + hist->SetTitle("Absorbed dose VS radius"); + hist->GetXaxis()->SetLabelSize(0.03); + hist->GetYaxis()->SetLabelSize(0.03); + hist->GetXaxis()->SetTitleSize(0.03); + hist->GetYaxis()->SetTitleSize(0.03); + hist->GetXaxis()->SetTitleOffset(1.4); + hist->GetYaxis()->SetTitleOffset(1.8); + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + hist->GetXaxis()->SetTitle("Radius (nm)"); + hist->GetYaxis()->SetTitle("Dose (Gy)"); + gPad->SetTicks(1, 1); + gPad->Modified(); +} + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address) { + TLeaf* leaf = ntuple->FindLeaf(name); + if ( ! leaf ) { + std::cerr << "Error in : unknown leaf --> " << name << std::endl; + return; + } + leaf->SetAddress(address); +} diff --git a/examples/extended/medical/dna/radial/radial.cc b/examples/extended/medical/dna/radial/radial.cc new file mode 100644 index 0000000000..170efe62dc --- /dev/null +++ b/examples/extended/medical/dna/radial/radial.cc @@ -0,0 +1,97 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file radial.cc +/// \brief Implementation of the radial example + +#include "ActionInitialization.hh" +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" + +#include "G4RunManagerFactory.hh" +#include "G4Types.hh" +#include "G4UIExecutive.hh" +#include "G4UImanager.hh" +#include "G4VisExecutive.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc, char** argv) +{ + // Detect interactive mode (if no arguments) and define UI session + G4UIExecutive* ui = nullptr; + if (argc == 1) ui = new G4UIExecutive(argc, argv); + + // Construct the default run manager + auto* runManager = G4RunManagerFactory::CreateRunManager(); + + // Set mandatory user initialization classes + auto physlist = new PhysicsList(); + runManager->SetUserInitialization(physlist); + + auto detector = new DetectorConstruction(physlist); + runManager->SetUserInitialization(detector); + + // User action initialization + runManager->SetUserInitialization(new ActionInitialization(detector)); + + // Visualization + G4VisExecutive* visManager = nullptr; + + // Get the pointer to the User Interface manager + G4UImanager* UImanager = G4UImanager::GetUIpointer(); + + if (nullptr == ui) { + // Batch mode + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UImanager->ApplyCommand(command + fileName); + } + else { + visManager = new G4VisExecutive; + visManager->Initialize(); + UImanager->ApplyCommand("/control/execute vis.mac"); + ui->SessionStart(); + delete ui; + delete visManager; + } + + // + + delete runManager; + + return 0; +} diff --git a/examples/extended/medical/dna/radial/radial.in b/examples/extended/medical/dna/radial/radial.in new file mode 100644 index 0000000000..e1601b5e2f --- /dev/null +++ b/examples/extended/medical/dna/radial/radial.in @@ -0,0 +1,73 @@ +# Verbosity +/run/verbose 2 +/tracking/verbose 0 +/control/verbose 2 +# +# MT +/run/numberOfThreads 10 +# +# Material +/radial/setMat G4_WATER +# +# Sizes of World and cylinders +# +# -> RADIUS: from the range of secondary electrons having the maximum kinetic energy +/radial/setWorldRadius 300 nm +# +# -> LENGTH: example for 1 MeV protons to get about 1000 proton steps +/radial/setWorldLength 2.5 um +# +# -> THICKNESS: default set to 1 nm +/radial/setThicknessCylinders 1 nm +# +# Atomic deexcitation +/process/em/fluo true +/process/em/auger true +/process/em/augerCascade true +/process/em/deexcitationIgnoreCut true +# +# Physics +# - To use Geant4-DNA constructor X, X=0, 2, 4, or 6 (recommended) +#/radial/addPhysics DNA_Opt0 +/radial/addPhysics DNA_Opt2 +#/radial/addPhysics DNA_Opt4 +#/radial/addPhysics DNA_Opt6 +# +# Heavy ions tracking cut +#/radial/addIonsTrackingCut false +# +# Run initialization +/run/initialize +# +# Visualization +#/control/execute vis.mac +# +# Incident ion type +# +/gun/particle proton +# +########################################################## +# PROTON IONISATION SETTINGS +########################################################## +/process/inactivate proton_G4DNAExcitation +/process/inactivate proton_G4DNAElastic +/process/inactivate proton_G4DNAChargeDecrease +# the following lines avoid standard EM processes, if any +/process/inactivate msc +/process/inactivate hIoni +/process/inactivate nuclearStopping +########################################################## +# +#/gun/particle alpha +# +#/gun/particle ion +#/gun/ion 14 28 +# +# Incident particle energy +/gun/energy 1 MeV +# +# Incident particle direction along cylinder Z-axis +/gun/direction 0 0 1 +# +# Beam on +/run/beamOn 100 diff --git a/examples/extended/parallel/TBB/B2b/src/B2ActionInitialization.cc b/examples/extended/medical/dna/radial/src/ActionInitialization.cc similarity index 64% rename from examples/extended/parallel/TBB/B2b/src/B2ActionInitialization.cc rename to examples/extended/medical/dna/radial/src/ActionInitialization.cc index 464e73e499..cc8fded02d 100644 --- a/examples/extended/parallel/TBB/B2b/src/B2ActionInitialization.cc +++ b/examples/extended/medical/dna/radial/src/ActionInitialization.cc @@ -23,38 +23,44 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 // -/// \file B2ActionInitialization.cc -/// \brief Implementation of the B2ActionInitialization class +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file ActionInitialization.cc +/// \brief Implementation of the ActionInitialization class -#include "B2ActionInitialization.hh" +#include "ActionInitialization.hh" -#include "B2EventAction.hh" -#include "B2PrimaryGeneratorAction.hh" -#include "B2RunAction.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "SteppingAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -B2ActionInitialization::B2ActionInitialization() : G4VUserActionInitialization() {} +ActionInitialization::ActionInitialization(DetectorConstruction* det) +:fDetectorConstruction(det) +{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -B2ActionInitialization::~B2ActionInitialization() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2ActionInitialization::BuildForMaster() const +void ActionInitialization::BuildForMaster() const { - SetUserAction(new B2RunAction); + SetUserAction(new RunAction(fDetectorConstruction)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void B2ActionInitialization::Build() const +void ActionInitialization::Build() const { - SetUserAction(new B2PrimaryGeneratorAction); - SetUserAction(new B2RunAction); - SetUserAction(new B2EventAction); + SetUserAction(new PrimaryGeneratorAction); + SetUserAction(new RunAction(fDetectorConstruction)); + SetUserAction(new SteppingAction()); } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/radial/src/DetectorConstruction.cc b/examples/extended/medical/dna/radial/src/DetectorConstruction.cc new file mode 100644 index 0000000000..e571af7043 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/DetectorConstruction.cc @@ -0,0 +1,209 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file DetectorConstruction.cc +/// \brief Implementation of the DetectorConstruction class + +#include "DetectorConstruction.hh" +#include "DetectorMessenger.hh" + +#include "G4RunManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4VisAttributes.hh" +#include "G4Tubs.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +DetectorConstruction::DetectorConstruction(PhysicsList* pl) +{ + // Create commands for interactive definition of the detector + fDetectorMessenger = new DetectorMessenger(this, pl); + + // World size + fWorldRadius = 1*um; + fWorldLength = 10*um; + + // Cylinders + fThicknessCylinders = 1*nm; + fMinRadiusCylinders = 0; + + fNumberCylinders = (fWorldRadius-fMinRadiusCylinders) / fThicknessCylinders; + + // Materials + G4NistManager* man = G4NistManager::Instance(); + G4Material* H2O = man->FindOrBuildMaterial("G4_WATER"); + G4Material* galactic = man->FindOrBuildMaterial("G4_Galactic"); + + fWaterMaterial = H2O; + fVacuumMaterial = galactic; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +DetectorConstruction::~DetectorConstruction() +{ + delete fDetectorMessenger; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void DetectorConstruction::DefineMaterials() +{ + // Water is defined from NIST material database + G4NistManager* man = G4NistManager::Instance(); + + G4Material* H2O = man->FindOrBuildMaterial("G4_WATER"); + G4Material* galactic = man->FindOrBuildMaterial("G4_Galactic"); + + fWaterMaterial = H2O; + fVacuumMaterial = galactic; + + G4cout << *(G4Material::GetMaterialTable()) << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + if (fPhysiWorld) return fPhysiWorld; + + // World volume + + G4Tubs* solidWorld = + new G4Tubs("World", 0., fWorldRadius, fWorldLength / 2, 0., 360*deg); + + fLogicWorld = new G4LogicalVolume(solidWorld, // its solid + fVacuumMaterial, // its material + "World"); // its name + + fPhysiWorld = new G4PVPlacement(0, // no rotation + G4ThreeVector(), // at (0,0,0) + "World", // its name + fLogicWorld, // its logical volume + 0, // its mother volume + false, // no boolean operation + 0); // copy number + + // Visualization attributes - white + G4VisAttributes* worldVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); + worldVisAtt->SetVisibility(true); + fLogicWorld->SetVisAttributes(worldVisAtt); + + // Cylinders + + fNumberCylinders = (fWorldRadius-fMinRadiusCylinders) / fThicknessCylinders; + + // Check values + /* + G4cout << fMinRadiusCylinders/nm << G4endl; + G4cout << fWorldRadius/nm << G4endl; + G4cout << fThicknessCylinders/nm << G4endl; + G4cout << fWorldLength/nm << G4endl; + */ + + G4cout << G4endl; + G4cout + << "*******************************************************************" + << G4endl; + G4cout << "*** NUMBER OF HOLLOW CYLINDERS = "<< fNumberCylinders << G4endl; + G4cout + << "*******************************************************************" + << G4endl; + G4cout << G4endl; + + for (G4int i = 0; i < fNumberCylinders; i++) { + + G4double rIn = i*fThicknessCylinders; + G4double rOut = (i+1) * fThicknessCylinders; + + G4Tubs* solidCylinder = + new G4Tubs("Cylinder", rIn, rOut, fWorldLength / 2, 0., 360*deg); + + G4LogicalVolume* logicCylinder = + new G4LogicalVolume(solidCylinder, fWaterMaterial, "Cylinder"); + + new G4PVPlacement(nullptr, G4ThreeVector(0, 0, 0), logicCylinder, + "Cylinder", fLogicWorld, false, i, true); + + logicCylinder->SetVisAttributes(worldVisAtt); + } + + // Shows how to introduce a 20 eV tracking cut + // logicWorld->SetUserLimits(new G4UserLimits(DBL_MAX,DBL_MAX,DBL_MAX,20*eV)); + + return fPhysiWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetMaterial(const G4String& materialChoice) +{ + G4Material* pttoMaterial = + G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); + + if (pttoMaterial) { + fWaterMaterial = pttoMaterial; + if (fLogicWorld) fLogicWorld->SetMaterial(fWaterMaterial); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetWorldRadius(const G4double& value) +{ + fWorldRadius = value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetWorldLength(const G4double& value) +{ + fWorldLength = value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetThicknessCylinders(const G4double& value) +{ + fThicknessCylinders = value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetMinRadiusCylinders(const G4double& value) +{ + fMinRadiusCylinders = value; +} diff --git a/examples/extended/medical/dna/radial/src/DetectorMessenger.cc b/examples/extended/medical/dna/radial/src/DetectorMessenger.cc new file mode 100644 index 0000000000..f9130e61b9 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/DetectorMessenger.cc @@ -0,0 +1,140 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file DetectorMessenger.cc +/// \brief Implementation of the DetectorMessenger class + +#include "DetectorMessenger.hh" +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" + +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorMessenger::DetectorMessenger(DetectorConstruction* det, PhysicsList* pl) +:fDetector(det), fPhysList(pl) +{ + fDetDir = new G4UIdirectory("/radial/"); + fDetDir->SetGuidance("radial commands"); + + fMatCmd = new G4UIcmdWithAString("/radial/setMat", this); + fMatCmd->SetGuidance("Select material of the world."); + fMatCmd->SetParameterName("Material", false); + fMatCmd->AvailableForStates(G4State_PreInit); + fMatCmd->SetToBeBroadcasted(false); + + fPhysCmd = new G4UIcmdWithAString("/radial/addPhysics", this); + fPhysCmd->SetGuidance("Added Physics List"); + fPhysCmd->SetParameterName("Physics", false); + fPhysCmd->AvailableForStates(G4State_PreInit); + fPhysCmd->SetToBeBroadcasted(false); + + fTrackingCutCmd = new G4UIcmdWithABool("/radial/addIonsTrackingCut", this); + fTrackingCutCmd->SetGuidance("Added Ions Tracking Cut"); + fTrackingCutCmd->SetDefaultValue(false); + fTrackingCutCmd->AvailableForStates(G4State_PreInit); + fTrackingCutCmd->SetToBeBroadcasted(false); + + fWorldRadiusCmd = new G4UIcmdWithADoubleAndUnit("/radial/setWorldRadius",this); + fWorldRadiusCmd->SetGuidance("Set size of the World"); + fWorldRadiusCmd->SetParameterName("Size",false); + fWorldRadiusCmd->SetRange("Size>0."); + fWorldRadiusCmd->SetUnitCategory("Length"); + fWorldRadiusCmd->AvailableForStates(G4State_PreInit); + + fWorldLengthCmd = new G4UIcmdWithADoubleAndUnit("/radial/setWorldLength",this); + fWorldLengthCmd->SetGuidance("Set size of the World"); + fWorldLengthCmd->SetParameterName("Size",false); + fWorldLengthCmd->SetRange("Size>0."); + fWorldLengthCmd->SetUnitCategory("Length"); + fWorldLengthCmd->AvailableForStates(G4State_PreInit); + + fThicknessCylindersCmd = new G4UIcmdWithADoubleAndUnit("/radial/setThicknessCylinders",this); + fThicknessCylindersCmd->SetGuidance("Set thickness of cylinders"); + fThicknessCylindersCmd->SetParameterName("Size",false); + fThicknessCylindersCmd->SetRange("Size>0."); + fThicknessCylindersCmd->SetUnitCategory("Length"); + fThicknessCylindersCmd->AvailableForStates(G4State_PreInit); + + fMinRadiusCylindersCmd = new G4UIcmdWithADoubleAndUnit("/radial/setMinRadiusCylinders",this); + fMinRadiusCylindersCmd->SetGuidance("Set minimum radius of the cylinders"); + fMinRadiusCylindersCmd->SetParameterName("Size",false); + fMinRadiusCylindersCmd->SetRange("Size>0."); + fMinRadiusCylindersCmd->SetUnitCategory("Length"); + fMinRadiusCylindersCmd->AvailableForStates(G4State_PreInit); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorMessenger::~DetectorMessenger() +{ + delete fDetDir; + + delete fMatCmd; + delete fPhysCmd; + delete fTrackingCutCmd; + delete fWorldRadiusCmd; + delete fWorldLengthCmd; + delete fThicknessCylindersCmd; + delete fMinRadiusCylindersCmd; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fMatCmd) fDetector->SetMaterial(newValue); + + if (command == fPhysCmd) fPhysList->AddPhysics(newValue); + + if (command == fTrackingCutCmd) + fPhysList->SetTrackingCut(fTrackingCutCmd->GetNewBoolValue(newValue)); + + if (command == fWorldRadiusCmd) + fDetector->SetWorldRadius(fWorldRadiusCmd->GetNewDoubleValue(newValue)); + + if (command == fWorldLengthCmd) + fDetector->SetWorldLength(fWorldLengthCmd->GetNewDoubleValue(newValue)); + + if (command == fThicknessCylindersCmd) + fDetector->SetThicknessCylinders(fThicknessCylindersCmd->GetNewDoubleValue(newValue)); + + if (command == fMinRadiusCylindersCmd) + fDetector->SetMinRadiusCylinders(fMinRadiusCylindersCmd->GetNewDoubleValue(newValue)); +} diff --git a/examples/extended/medical/dna/radial/src/PhysicsList.cc b/examples/extended/medical/dna/radial/src/PhysicsList.cc new file mode 100644 index 0000000000..da08626d29 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/PhysicsList.cc @@ -0,0 +1,213 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file PhysicsList.cc +/// \brief Implementation of the PhysicsList class + +#include "PhysicsList.hh" + +#include "G4ProcessManager.hh" + +#include "G4DecayPhysics.hh" +#include "G4EmDNABuilder.hh" +#include "G4EmDNAPhysics.hh" +#include "G4EmDNAPhysics_option1.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4EmDNAPhysics_option3.hh" +#include "G4EmDNAPhysics_option4.hh" +#include "G4EmDNAPhysics_option5.hh" +#include "G4EmDNAPhysics_option6.hh" +#include "G4EmDNAPhysics_option7.hh" +#include "G4EmDNAPhysics_option8.hh" +#include "G4EmLivermorePhysics.hh" +#include "G4EmParameters.hh" +#include "G4EmPenelopePhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmStandardPhysics_option3.hh" +#include "G4EmStandardPhysics_option4.hh" +#include "G4GenericIon.hh" +#include "G4RadioactiveDecayPhysics.hh" +#include "G4SystemOfUnits.hh" +#include "G4NuclideTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::PhysicsList() +{ + SetDefaultCutValue(1.0 * micrometer); + SetVerboseLevel(1); + + fEmPhysics = "DNA_Opt2"; + fEmPhysicsList = new G4EmDNAPhysics_option2(); + fDecayPhysicsList = new G4DecayPhysics(); + + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, 1 * GeV); + G4EmParameters* param = G4EmParameters::Instance(); + param->SetMinEnergy(100 * eV); + param->SetMaxEnergy(1 * GeV); + + // Limits in G4NuclideTable + G4NuclideTable::GetInstance()->SetThresholdOfHalfLife(0.1 * picosecond); + G4NuclideTable::GetInstance()->SetLevelTolerance(1.0 * eV); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::~PhysicsList() +{ + delete fEmPhysicsList; + delete fDecayPhysicsList; + delete fRadDecayPhysicsList; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructParticle() +{ + fEmPhysicsList->ConstructParticle(); + fDecayPhysicsList->ConstructParticle(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructProcess() +{ + AddTransportation(); + + fEmPhysicsList->ConstructProcess(); + + fDecayPhysicsList->ConstructProcess(); + + if (nullptr != fRadDecayPhysicsList) fRadDecayPhysicsList->ConstructProcess(); + + if (fIsTrackingCutSet) TrackingCut(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::AddPhysics(const G4String& name) +{ + if (name == fEmPhysics) { + return; + } + + G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name << "> is requested" + << G4endl; + + fEmPhysics = name; + + if (name == "emstandard_opt0") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics(); + } + else if (name == "emstandard_opt3") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option3(); + } + else if (name == "emstandard_opt4") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option4(); + } + else if (name == "raddecay") { + if (nullptr == fRadDecayPhysicsList) fRadDecayPhysicsList = new G4RadioactiveDecayPhysics(); + } + else if (name == "emlivermore") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmLivermorePhysics(); + } + else if (name == "empenelope") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmPenelopePhysics(); + } + else if (name == "DNA_Opt0") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics(); + } + else if (name == "DNA_Opt1") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option1(); + } + else if (name == "DNA_Opt2") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option2(); + } + else if (name == "DNA_Opt3") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option3(); + } + else if (name == "DNA_Opt4") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option4(); + } + else if (name == "DNA_Opt5") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option5(); + } + else if (name == "DNA_Opt6") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option6(); + } + else if (name == "DNA_Opt7") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option7(); + } + else if (name == "DNA_Opt8") { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option8(); + } + else { + G4cout << "### PhysicsList::AddPhysics Warning: Physics List <" << name + << "> is does not exist - the command ignored" << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::TrackingCut() +{ + auto particle = G4GenericIon::GenericIon(); // DNA heavy ions + auto particleName = particle->GetParticleName(); + auto capture = G4EmDNABuilder::FindOrBuildCapture(0.5 * CLHEP::MeV, particle); + capture->AddRegion("World"); + capture->SetKinEnergyLimit(0.5 * CLHEP::MeV); // 0.5 MeV/u +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::SetTrackingCut(G4bool isCut) +{ + fIsTrackingCutSet = isCut; +} diff --git a/examples/extended/medical/dna/radial/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/radial/src/PrimaryGeneratorAction.cc new file mode 100644 index 0000000000..44a4b23a69 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/PrimaryGeneratorAction.cc @@ -0,0 +1,80 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file PrimaryGeneratorAction.cc +/// \brief Implementation of the PrimaryGeneratorAction class + +#include "PrimaryGeneratorAction.hh" +#include "DetectorConstruction.hh" + +#include "G4RunManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorAction::PrimaryGeneratorAction() +{ + G4int n_particle = 1; + fParticleGun = new G4ParticleGun(n_particle); + fParticleGun->SetParticleEnergy(fKineticEnergy); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorAction::~PrimaryGeneratorAction() +{ + delete fParticleGun; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + const DetectorConstruction* detectorConstruction = + static_cast + (G4RunManager::GetRunManager()->GetUserDetectorConstruction()); + + G4double worldLength = detectorConstruction->GetWorldLength(); + + G4double gunX = 0.0; + G4double gunY = 0.0; + G4double gunZ = -0.5 * worldLength; + + fParticleGun->SetParticlePosition(G4ThreeVector(gunX, gunY, gunZ)); + + fKineticEnergy = fParticleGun->GetParticleEnergy(); + + fParticleGun->GeneratePrimaryVertex(anEvent); +} diff --git a/examples/extended/medical/dna/radial/src/Run.cc b/examples/extended/medical/dna/radial/src/Run.cc new file mode 100644 index 0000000000..b989bb4631 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/Run.cc @@ -0,0 +1,92 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file Run.cc +/// \brief Implementation of the Run class + +#include "Run.hh" + +#include "G4SystemOfUnits.hh" +#include "G4UnitsTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +Run::Run(DetectorConstruction* det) +:fMyDetectorConstruction(det) +{ + G4int nbCyl = fMyDetectorConstruction->GetNumberCylinders(); + fCylDoseDeposit = new G4double[nbCyl]; + for (G4int i=0; i(run); + + // Accumulate dose deposits per cylinder + G4int nbCyl = fMyDetectorConstruction->GetNumberCylinders(); + for (G4int i=0; ifCylDoseDeposit[i]; + + G4Run::Merge(run); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::EndOfRun() +{ + G4double dose=0; + + for (G4int i = 0; i < fMyDetectorConstruction->GetNumberCylinders(); i++) + if (fCylDoseDeposit[i] > 0.) dose=dose+fCylDoseDeposit[i]; + + G4cout << G4endl; + G4cout << "- Summary --------------------------------------------------" << G4endl; + G4cout << G4endl; + G4cout << " Total absorbed dose per primary (Gy) = " + << dose/(joule/kg) / this->GetNumberOfEvent() << G4endl; + G4cout << G4endl; + G4cout << "------------------------------------------------------------" << G4endl; +} diff --git a/examples/extended/medical/dna/radial/src/RunAction.cc b/examples/extended/medical/dna/radial/src/RunAction.cc new file mode 100644 index 0000000000..b2c1c45f05 --- /dev/null +++ b/examples/extended/medical/dna/radial/src/RunAction.cc @@ -0,0 +1,131 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file RunAction.cc +/// \brief Implementation of the RunAction class + +#include "RunAction.hh" +#include "DetectorConstruction.hh" +#include "Run.hh" + +#include "G4AnalysisManager.hh" +#include "G4Run.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunAction::RunAction(DetectorConstruction* det) +:fMyDetectorConstruction(det) +{ + if (isMaster) + { + G4cout << "##### Create analysis manager " << " " << this << G4endl; + auto analysisManager = G4AnalysisManager::Instance(); + + analysisManager->SetDefaultFileType("root"); + analysisManager->SetFirstNtupleId(1); + + // Create ntuple + analysisManager->CreateNtuple("radial", "radial"); + analysisManager->CreateNtupleDColumn("radius"); + analysisManager->CreateNtupleDColumn("dose"); + analysisManager->FinishNtuple(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunAction::~RunAction() +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4Run* RunAction::GenerateRun() +{ + fRun = new Run(fMyDetectorConstruction); + return fRun; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::BeginOfRunAction(const G4Run*) +{ + if (isMaster) + { + auto analysisManager = G4AnalysisManager::Instance(); + + // Open an output file + G4String fileName = "radial"; + analysisManager->OpenFile(fileName); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::EndOfRunAction(const G4Run*) +{ + if (isMaster) + { + // Display results from merged local runs + fRun->EndOfRun(); + + // Fill ntuple + auto analysisManager = G4AnalysisManager::Instance(); + + G4double cumulatedDeposit = 0; + + // Loop on cylinders and collect dose from merged local runs + G4int nbCyl = fMyDetectorConstruction->GetNumberCylinders(); + + for (G4int i = 0; i < nbCyl ; i++) + { + cumulatedDeposit = fRun->GetCylDoseDeposit(i); + if (cumulatedDeposit > 0.) + { + analysisManager->FillNtupleDColumn + (1,0,i*fMyDetectorConstruction->GetThicknessCylinders()/nm); + analysisManager->FillNtupleDColumn + (1,1,cumulatedDeposit/fRun->GetNumberOfEvent()/gray); + analysisManager->AddNtupleRow(1); + } + } + + // Save histograms + analysisManager->Write(); + analysisManager->CloseFile(); + analysisManager->Clear(); + } +} diff --git a/examples/extended/medical/dna/radial/src/SteppingAction.cc b/examples/extended/medical/dna/radial/src/SteppingAction.cc new file mode 100644 index 0000000000..39e1c5d95a --- /dev/null +++ b/examples/extended/medical/dna/radial/src/SteppingAction.cc @@ -0,0 +1,146 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 51 (2024) 5873-5889 +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file SteppingAction.cc +/// \brief Implementation of the SteppingAction class + +#include "PrimaryGeneratorAction.hh" +#include "SteppingAction.hh" +#include "Run.hh" + +#include "G4Electron.hh" +#include "G4Proton.hh" +#include "G4Alpha.hh" +#include "G4Tubs.hh" +#include "G4DNAGenericIonsManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4RunManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +SteppingAction::SteppingAction() +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +SteppingAction::~SteppingAction() +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void SteppingAction::UserSteppingAction(const G4Step* step) +{ + G4ParticleDefinition* partDef = + step->GetTrack()->GetDynamicParticle()->GetDefinition(); + + // Boolean to force kinetic energy value + if (energyFix) + { + G4DNAGenericIonsManager* instance = G4DNAGenericIonsManager::Instance(); + + if ( partDef == G4Proton::ProtonDefinition() + || + partDef == G4Alpha::AlphaDefinition() + || + partDef == instance->GetIon("hydrogen") + || + partDef == instance->GetIon("alpha+") + || + partDef == instance->GetIon("helium") + || + partDef->GetPDGCharge()>4 ) + { + const PrimaryGeneratorAction* primaryGenerator = + static_cast + (G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction()); + + G4double primaryEnergy = primaryGenerator->GetPrimaryKineticEnergy(); + + // *** WARNING *** + // this is a non physical trick to fix the kinetic energy + // of the ion at post step + step->GetPostStepPoint()->SetKineticEnergy(primaryEnergy); + + //G4cout << "-------------- NEW STEP ------------" + // << step->GetPreStepPoint()->GetKineticEnergy()/eV << G4endl; + //G4cout << "-----Kinetic energy at PreStepPoint=" + // << step->GetPreStepPoint()->GetKineticEnergy()/eV << G4endl; + //G4cout << "-----Kinetic energy at PostStepPoint=" + // << step->GetPostStepPoint()->GetKineticEnergy()/eV << G4endl; + } + } + + if (!step->GetPostStepPoint()) return; + + if (!step->GetPostStepPoint()->GetProcessDefinedStep()) return; + + // Absorbed dose deposited by electrons only + + if (partDef == G4Electron::ElectronDefinition()) { + + G4VPhysicalVolume* volume = + step->GetPreStepPoint()->GetTouchableHandle()->GetVolume(); + if (!volume) return; + + G4LogicalVolume* logicVol = volume->GetLogicalVolume(); + G4double dose = step->GetTotalEnergyDeposit()/logicVol->GetMass(); + + Run* run + = static_cast + (G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + + if (dose>0) run->AddCylDoseDeposit(volume->GetCopyNo(), dose); + + /* + // Mass computation check + + G4VSolid* solidVol = logicVol->GetSolid(); + G4Tubs* cylinder = dynamic_cast(solidVol); + if (cylinder) + { + G4double rInner = cylinder->GetInnerRadius(); + G4double rOuter = cylinder->GetOuterRadius(); + G4cout << "**** MASS CHECK ****" << G4endl; + G4cout << "Copy number=" << volume->GetCopyNo() << G4endl; + G4cout << "rInner/nm=" << rInner/nm << G4endl; + G4cout << "rOuter/nm=" << rOuter/nm << G4endl; + G4cout << "length/nm=" << 2*cylinder->GetZHalfLength()/nm << G4endl; + G4cout << "mass/kg=" << logicVol->GetMass()/kg << G4endl; + } + */ + } // electron + +} diff --git a/examples/extended/parallel/TBB/B2b/vis.mac b/examples/extended/medical/dna/radial/vis.mac similarity index 73% rename from examples/extended/parallel/TBB/B2b/vis.mac rename to examples/extended/medical/dna/radial/vis.mac index c3717fb48e..c94fdb8975 100644 --- a/examples/extended/parallel/TBB/B2b/vis.mac +++ b/examples/extended/medical/dna/radial/vis.mac @@ -1,7 +1,5 @@ -# Macro file for the visualization setting for the initialization phase -# of the B2 example when running in interactive mode # - +/run/initialize # Open a viewer /vis/open # This opens the default viewer - see examples/basic/B1/vis.mac for a @@ -16,15 +14,13 @@ /vis/drawVolume # # Specify view angle: -/vis/viewer/set/viewpointThetaPhi 90. 180. +/vis/viewer/set/viewpointThetaPhi -90. 0. # # Specify zoom value: -/vis/viewer/zoom 1.4 +#/vis/viewer/zoom 2. # -# Specify style (surface, wireframe, auxiliary edges,...) +# Specify style (surface or wireframe): #/vis/viewer/set/style wireframe -#/vis/viewer/set/auxiliaryEdge true -#/vis/viewer/set/lineSegmentsPerCircle 100 # # Draw coordinate axes: #/vis/scene/add/axes 0 0 0 1 m @@ -38,7 +34,7 @@ # (if too many tracks cause core dump => /tracking/storeTrajectory 0) # # Draw hits at end of event: -/vis/scene/add/hits +#/vis/scene/add/hits # # To draw only gammas: #/vis/filtering/trajectories/create/particleFilter @@ -51,10 +47,7 @@ # Many other options are available with /vis/modeling and /vis/filtering. # For example, to select colour by particle ID: #/vis/modeling/trajectories/create/drawByParticleID -#/vis/modeling/trajectories/drawByParticleID-0/default/setDrawStepPts true -# To select or override default colours (note: e+ is blue by default): -#/vis/modeling/trajectories/list -#/vis/modeling/trajectories/drawByParticleID-0/set e+ yellow +#/vis/modeling/trajectories/drawByParticleID-0/set e- blue # # To superimpose all of the events from a given run: /vis/scene/endOfEventAction accumulate diff --git a/examples/extended/medical/dna/range/History b/examples/extended/medical/dna/range/History index ef7d303960..39f8e1d202 100644 --- a/examples/extended/medical/dna/range/History +++ b/examples/extended/medical/dna/range/History @@ -4,6 +4,9 @@ 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! +## 2024-05-21 Sebastien Incerti (range-V11-03-00) +- Added beta option8 physics list + ## 2024-04-15 Sebastien Incerti (range-V11-02-01) - Updated README - Added auto to plot.C diff --git a/examples/extended/medical/dna/range/range.out b/examples/extended/medical/dna/range/range.out index 8f97c66f53..e6ad0e1550 100644 --- a/examples/extended/medical/dna/range/range.out +++ b/examples/extended/medical/dna/range/range.out @@ -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", @@ -141,7 +142,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 ======== @@ -347,7 +348,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 ====== @@ -363,7 +366,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 @@ -391,19 +394,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 ====== @@ -425,23 +430,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 ====== @@ -464,19 +473,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 ====== @@ -486,8 +497,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 @@ -498,7 +509,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 ====== diff --git a/examples/extended/medical/dna/range/src/PhysicsList.cc b/examples/extended/medical/dna/range/src/PhysicsList.cc index 76e9535633..bfa3e95fb0 100644 --- a/examples/extended/medical/dna/range/src/PhysicsList.cc +++ b/examples/extended/medical/dna/range/src/PhysicsList.cc @@ -48,6 +48,7 @@ #include "G4EmDNAPhysics_option5.hh" #include "G4EmDNAPhysics_option6.hh" #include "G4EmDNAPhysics_option7.hh" +#include "G4EmDNAPhysics_option8.hh" #include "G4EmStandardPhysics_option4.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" @@ -144,6 +145,11 @@ void PhysicsList::AddPhysicsList(const G4String& name) delete fEmPhysicsList; fEmPhysicsList = new G4EmDNAPhysics_option7(); } + else if (name == "dna_opt8") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option8(); + } else if (name == "std_opt4") { fEmName = name; delete fEmPhysicsList; diff --git a/examples/extended/medical/dna/scavenger/History b/examples/extended/medical/dna/scavenger/History index 74dbd047a6..6f607c3e69 100644 --- a/examples/extended/medical/dna/scavenger/History +++ b/examples/extended/medical/dna/scavenger/History @@ -4,6 +4,12 @@ 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-05-05 Hoang Tran (scavenger-V11-03-01) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-22 Hoang Tran (scavenger-V11-03-00) +- used new G4MoleculeCounterManager to manage the G4MoleculeCounter + ## 2024-10-03 Hoang Tran (scavenger-V11-02-00) - Modified the molecule names of OH, HO2, O in MoleculeDefinition. Each molecule configuration has a molecule definition. diff --git a/examples/extended/medical/dna/scavenger/beam.in b/examples/extended/medical/dna/scavenger/beam.in index 5c8acc6494..1da60d4a36 100644 --- a/examples/extended/medical/dna/scavenger/beam.in +++ b/examples/extended/medical/dna/scavenger/beam.in @@ -21,4 +21,4 @@ /event/verbose 0 /scheduler/verbose 0 -/run/beamOn 2 +/run/beamOn 100 diff --git a/examples/extended/medical/dna/scavenger/include/ActionInitialization.hh b/examples/extended/medical/dna/scavenger/include/ActionInitialization.hh index 1370a91567..5f342b447c 100644 --- a/examples/extended/medical/dna/scavenger/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/scavenger/include/ActionInitialization.hh @@ -47,6 +47,9 @@ class ActionInitialization : public G4VUserActionInitialization void BuildForMaster() const override; void Build() const override; + + private: + void BuildMoleculeCounter() const; }; } // namespace scavenger diff --git a/examples/extended/medical/dna/scavenger/include/EventAction.hh b/examples/extended/medical/dna/scavenger/include/EventAction.hh new file mode 100644 index 0000000000..352d974516 --- /dev/null +++ b/examples/extended/medical/dna/scavenger/include/EventAction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// +/// \file EventAction.hh +/// \brief + +#ifndef EventAction_hh +#define EventAction_hh 1 + +#include "G4DNAChemistryManager.hh" +#include "G4UserEventAction.hh" + +class EventAction : public G4UserEventAction +{ + public: + void BeginOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->BeginOfEventAction(event); + } + void EndOfEventAction(const G4Event* event) override + { + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::Instance()->EndOfEventAction(event); + } +}; + +#endif diff --git a/examples/extended/medical/dna/scavenger/scavenger.out b/examples/extended/medical/dna/scavenger/scavenger.out index 6eec227281..62675abe83 100644 --- a/examples/extended/medical/dna/scavenger/scavenger.out +++ b/examples/extended/medical/dna/scavenger/scavenger.out @@ -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", @@ -155,7 +156,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 ======== @@ -361,7 +362,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 ====== @@ -377,7 +380,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 @@ -405,19 +408,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 ====== @@ -439,23 +444,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 ====== @@ -478,19 +487,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 ====== @@ -500,8 +511,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 @@ -512,7 +523,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 ====== @@ -608,18 +621,18 @@ Index : 0 used in the geometry : Yes DNAMolecularIRTModel will be used Run terminated. Run Summary - Number of events processed : 2 - User=0.440000s Real=0.459128s Sys=0.010000s + Number of events processed : 100 + User=27.950000s Real=27.965778s Sys=0.010000s --------------------End of Global Run----------------------- - The run has 1 events -Number of events recorded by the species scorer = 1 - Total energy deposited in the world volume : 10010 eV + The run has 54 events +Number of events recorded by the species scorer = 54 + Total energy deposited in the world volume : 5.418e+05 eV ------------------------------------------------------------ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 15 of which, static: 0 -Dynamic pools deleted: 15 / Total memory freed: 4.9 MB +Dynamic pools deleted: 15 / Total memory freed: 8.2 MB ============================================================ diff --git a/examples/extended/medical/dna/scavenger/src/ActionInitialization.cc b/examples/extended/medical/dna/scavenger/src/ActionInitialization.cc index ed5b5fca86..3214ba9b45 100644 --- a/examples/extended/medical/dna/scavenger/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/scavenger/src/ActionInitialization.cc @@ -28,16 +28,17 @@ #include "ActionInitialization.hh" -#include "PrimaryGeneratorAction.hh" -#include "RunAction.hh" -#include "StackingAction.hh" -#include "TimeStepAction.hh" - #include "G4DNAChemistryManager.hh" #include "G4H2O.hh" #include "G4MoleculeCounter.hh" #include "G4Scheduler.hh" +#include "EventAction.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" +#include "TimeStepAction.hh" + namespace scavenger { @@ -50,27 +51,38 @@ ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); + + BuildMoleculeCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... void ActionInitialization::Build() const { - G4MoleculeCounter::Instance()->Use(); - G4MoleculeCounter::Instance()->SetVerbose(0); - G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); - // sequential mode - if (!G4Threading::IsMultithreadedApplication()) { - G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); - } - SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); + SetUserAction(new EventAction); SetUserAction(new StackingAction()); G4Scheduler::Instance()->SetUserAction(new TimeStepAction()); + + BuildMoleculeCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::BuildMoleculeCounter() const +{ + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeEvent(true); + G4MoleculeCounterManager::Instance()->SetResetCountersBeforeRun(true); + G4MoleculeCounterManager::Instance()->SetAccumulateCounterIntoMaster(false); + + auto counter = std::make_unique(); + counter->SetVerbose(0); + counter->SetTimeComparer(G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(1 * ps)); + counter->IgnoreMolecule(G4H2O::Definition()); + G4MoleculeCounterManager::Instance()->RegisterCounter(std::move(counter)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -} // namespace scavenger \ No newline at end of file +} // namespace scavenger diff --git a/examples/extended/medical/dna/scavenger/src/RunAction.cc b/examples/extended/medical/dna/scavenger/src/RunAction.cc index 0f2038ac54..88362d7ad8 100644 --- a/examples/extended/medical/dna/scavenger/src/RunAction.cc +++ b/examples/extended/medical/dna/scavenger/src/RunAction.cc @@ -34,6 +34,7 @@ #include "G4Run.hh" #include "G4RunManager.hh" #include "G4SystemOfUnits.hh" +#include "G4DNAChemistryManager.hh" namespace scavenger { @@ -54,6 +55,10 @@ G4Run* RunAction::GenerateRun() void RunAction::BeginOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->BeginOfRunAction(run); + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; // informs the runManager to save random number seed @@ -64,6 +69,10 @@ void RunAction::BeginOfRunAction(const G4Run* run) void RunAction::EndOfRunAction(const G4Run* run) { + // ensure that the chemistry is notified! + if (G4DNAChemistryManager::GetInstanceIfExists() != nullptr) + G4DNAChemistryManager::GetInstanceIfExists()->EndOfRunAction(run); + G4int nofEvents = run->GetNumberOfEvent(); if (nofEvents == 0) { return; diff --git a/examples/extended/medical/dna/scavenger/src/ScoreSpecies.cc b/examples/extended/medical/dna/scavenger/src/ScoreSpecies.cc index 51d1532c22..58d3cb77fd 100644 --- a/examples/extended/medical/dna/scavenger/src/ScoreSpecies.cc +++ b/examples/extended/medical/dna/scavenger/src/ScoreSpecies.cc @@ -55,7 +55,6 @@ ScoreSpecies::ScoreSpecies(const G4String& name, const G4int& depth) { fpSpeciesdir->SetGuidance("ScoreSpecies commands"); fpSetResultsFileNameCmd->SetGuidance("Set the root file name"); - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -106,7 +105,6 @@ void ScoreSpecies::Initialize(G4HCofThisEvent* HCE) fHCID = GetCollectionID(0); } HCE->AddHitsCollection(fHCID, (G4VHitsCollection*)fEvtMap); - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -115,27 +113,32 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) { if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + // get the first, and in this case only, counter + auto counter = G4MoleculeCounterManager::Instance()->GetMoleculeCounter(0); + if (counter == nullptr) { + G4Exception("ScoreSpecies::EndOfEvent", "BAD_REFERENCE", FatalException, + "The molecule counter could not be received!"); + } - if (species == nullptr || species->empty()) { + auto indices = counter->GetMapIndices(); + + if (indices.empty()) { G4cout << "No molecule recorded, energy deposited= " << G4BestUnit(fEdep, "Energy") << G4endl; ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); return; } - for (auto molecule : *species) { + for (auto idx : indices) { for (auto time_mol : fTimeToRecord) { - G4double n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, time_mol); + double n_mol = counter->GetNbMoleculesAtTime(idx, time_mol); if (n_mol < 0) { G4cerr << "N molecules not valid < 0 " << G4endl; G4Exception("", "N<0", FatalException, ""); } - SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][idx.Molecule]; molInfo.fNumber += n_mol; G4double gValue = (n_mol / (fEdep / eV)) * 100.; molInfo.fG += gValue; @@ -144,7 +147,6 @@ void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) } ++fNEvent; fEdep = 0.; - G4MoleculeCounter::Instance()->ResetCounter(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -254,4 +256,4 @@ void ScoreSpecies::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -} // namespace scavenger \ No newline at end of file +} // namespace scavenger diff --git a/examples/extended/medical/dna/slowing/History b/examples/extended/medical/dna/slowing/History index 162f798d8f..c2237b447b 100644 --- a/examples/extended/medical/dna/slowing/History +++ b/examples/extended/medical/dna/slowing/History @@ -4,6 +4,10 @@ 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-01-03 Sebastien Incerti (slowing-V11-03-00) +- Added ntuple merging +- Added auto to plot.C + ## 2024-10-05 Sebastien Incerti (slowing-V11-02-01) - Added auto to plot.C - Updated README diff --git a/examples/extended/medical/dna/slowing/plot.C b/examples/extended/medical/dna/slowing/plot.C index 7a251d6af9..3b0d1aee90 100644 --- a/examples/extended/medical/dna/slowing/plot.C +++ b/examples/extended/medical/dna/slowing/plot.C @@ -15,8 +15,8 @@ TH1F* h1 ; h1 = (TH1F*)f.Get("1"); - h2 = (TH1F*)f.Get("2"); - h3 = (TH1F*)f.Get("3"); + auto h2 = (TH1F*)f.Get("2"); + auto h3 = (TH1F*)f.Get("3"); //goto end; diff --git a/examples/extended/medical/dna/slowing/slowing.out b/examples/extended/medical/dna/slowing/slowing.out index 7a393a4a01..d7a36fee51 100644 --- a/examples/extended/medical/dna/slowing/slowing.out +++ b/examples/extended/medical/dna/slowing/slowing.out @@ -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 @@ -29,23 +29,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", @@ -145,7 +146,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 ======== @@ -351,7 +352,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 ====== @@ -367,7 +370,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 @@ -395,19 +398,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -429,23 +434,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -468,19 +477,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -490,19 +501,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== @@ -582,6 +595,15 @@ hIoni: for pi- XStype:3 SubType=2 ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI BetheBloch : Emin=297.505 keV Emax= 600 MeV deltaVI ### 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 ------- + ... set ntuple merging row mode : row-wise - done ... create file : slowing.root - done ... open analysis file : slowing.root - done diff --git a/examples/extended/medical/dna/slowing/src/HistoManager.cc b/examples/extended/medical/dna/slowing/src/HistoManager.cc index 243069653b..a4e4d2e5bc 100644 --- a/examples/extended/medical/dna/slowing/src/HistoManager.cc +++ b/examples/extended/medical/dna/slowing/src/HistoManager.cc @@ -61,6 +61,7 @@ void HistoManager::Book() analysisManager->SetFileName(fFileName); analysisManager->SetVerboseLevel(1); analysisManager->SetActivation(true); + analysisManager->SetNtupleMerging(true); // Define histograms start values const G4int kMaxHisto = 4; diff --git a/examples/extended/medical/dna/splitting/splitting.out b/examples/extended/medical/dna/splitting/splitting.out index 14ccc1c821..1f0c665bfe 100644 --- a/examples/extended/medical/dna/splitting/splitting.out +++ b/examples/extended/medical/dna/splitting/splitting.out @@ -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 @@ -30,23 +30,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", @@ -94,6 +95,12 @@ Some /vis commands (optionally) take a string to specify colour. Command is ignored. Checking overlaps for volume target:0 (G4Tubs) ... OK! - Split for e-e created in e-_G4DNAIonisation process activatedwith split number 200 in region Target-- +G4DNASamplingTable::LoadData from file: +/dna/sigmadiff_ionisation_e_born.dat + Nenergy= 83 NmaxT= 151 +G4DNASamplingTable::LoadData from file: +/dna/sigmadiff_ionisation_p_born.dat + Nenergy= 31 NmaxT= 151 PhysicsList::SetCuts:CutLength : 1 um Warning : Region does not have specific production cuts, even though it appears in the current tracking world. @@ -125,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 ======== @@ -371,10 +378,10 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=10.840000s Real=10.869141s Sys=0.030000s + User=12.300000s Real=12.357872s Sys=0.030000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 40 MB +Dynamic pools deleted: 9 / Total memory freed: 43 MB ============================================================ diff --git a/examples/extended/medical/dna/spower/.README.txt b/examples/extended/medical/dna/spower/.README.txt index e136119d4c..746b558d7b 100644 --- a/examples/extended/medical/dna/spower/.README.txt +++ b/examples/extended/medical/dna/spower/.README.txt @@ -77,4 +77,8 @@ The output results consist in a text file (spower.txt), containing : - stopping power (in keV/um) - rms (i.e. standard deviation) on stopping power (in keV/um) +A ROOT file, spower.root, is also provided for the scoring of secondary electrons. +The Geant4 secondary.in example macro can be used to run the corresponding simulation. +The plot.C ROOT macro can then be used to display their energy spectrum. + */ diff --git a/examples/extended/medical/dna/spower/CMakeLists.txt b/examples/extended/medical/dna/spower/CMakeLists.txt index 128ba16fd6..c032fccab1 100644 --- a/examples/extended/medical/dna/spower/CMakeLists.txt +++ b/examples/extended/medical/dna/spower/CMakeLists.txt @@ -23,7 +23,7 @@ include(${Geant4_USE_FILE}) #---------------------------------------------------------------------------- # Locate sources and headers for this project # -include_directories(${PROJECT_SOURCE_DIR}/include +include_directories(${PROJECT_SOURCE_DIR}/include ${Geant4_INCLUDE_DIR}) file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) @@ -40,7 +40,7 @@ target_link_libraries(spower ${Geant4_LIBRARIES} ) # relies on these scripts being in the current working directory. # set(spower_SCRIPTS - spower.in + spower.in secondary.in plot.C ) foreach(_script ${spower_SCRIPTS}) @@ -55,4 +55,3 @@ endforeach() # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # install(TARGETS spower DESTINATION bin) - diff --git a/examples/extended/medical/dna/spower/History b/examples/extended/medical/dna/spower/History index 78beecdd6c..6c07e689e3 100644 --- a/examples/extended/medical/dna/spower/History +++ b/examples/extended/medical/dna/spower/History @@ -4,6 +4,16 @@ 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-06-15 Sebastien Incerti (spower-V11-03-02) +- plot.C : add selection of electrons by default +- spower.in : changed physics constructors + +## 2025-05-20 Vladimir Ivanchenko (spower-V11-03-01) +- PhysicsList - add all DNA Physics Lists and add usage of G4EmParameters + +## 2025-03-15 Sebastien Incerti (spower-V11-03-00) +- added scoring of secondary electrons + ## 2024-04-20 Sebastien Incerti (spower-V11-02-02) - updated README diff --git a/examples/extended/medical/dna/spower/README b/examples/extended/medical/dna/spower/README index 9404cd63db..7ce5b8e250 100644 --- a/examples/extended/medical/dna/spower/README +++ b/examples/extended/medical/dna/spower/README @@ -76,3 +76,7 @@ The output results consist in a text file (spower.txt), containing : - energy of incident particles (in eV) - stopping power (in keV/um) - rms (i.e. standard deviation) on stopping power (in keV/um) + +A ROOT file, spower.root, is also provided for the scoring of secondary electrons. +The Geant4 secondary.in example macro can be used to run the corresponding simulation. +The plot.C ROOT macro can then be used to display their energy spectrum. diff --git a/examples/extended/medical/dna/spower/include/PhysicsList.hh b/examples/extended/medical/dna/spower/include/PhysicsList.hh index f86e63964c..1db88c96b7 100644 --- a/examples/extended/medical/dna/spower/include/PhysicsList.hh +++ b/examples/extended/medical/dna/spower/include/PhysicsList.hh @@ -47,9 +47,9 @@ class PhysicsList : public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); - virtual void ConstructParticle(); - virtual void ConstructProcess(); + ~PhysicsList() override; + void ConstructParticle() override; + void ConstructProcess() override; void AddPhysicsList(const G4String& name); private: diff --git a/examples/extended/medical/dna/spower/include/TrackingAction.hh b/examples/extended/medical/dna/spower/include/TrackingAction.hh new file mode 100644 index 0000000000..145631e131 --- /dev/null +++ b/examples/extended/medical/dna/spower/include/TrackingAction.hh @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file TrackingAction.hh +/// \brief Definition of the TrackingAction class + +#ifndef TrackingAction_h +#define TrackingAction_h + +#include "G4UserTrackingAction.hh" +#include "globals.hh" + +class TrackingAction : public G4UserTrackingAction +{ + public: + TrackingAction(); + ~TrackingAction() override = default; + + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; +}; + +#endif diff --git a/examples/extended/medical/dna/spower/plot.C b/examples/extended/medical/dna/spower/plot.C new file mode 100644 index 0000000000..176a916e00 --- /dev/null +++ b/examples/extended/medical/dna/spower/plot.C @@ -0,0 +1,50 @@ +// ********************************************************************* +// To execute this macro under ROOT after your simulation ended, +// 1 - launch ROOT (usually type 'root' at your machine's prompt) +// 2 - type '.X plot.C' at the ROOT session prompt +// ********************************************************************* + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address); + +void plot() +{ + gROOT->Reset(); + gStyle->SetPalette(1); + gROOT->SetStyle("Plain"); + TCanvas* c1 = new TCanvas ("c1","",20,20,500,500); + + c1->Divide(1,1); + + TFile* f = new TFile("spower.root"); + + TNtuple* ntuple; + ntuple = (TNtuple*)f->Get("track"); + bool rowWise = true; + TBranch* eventBranch = ntuple->FindBranch("row_wise_branch"); + if ( ! eventBranch ) rowWise = false; + + c1->cd(1); + gStyle->SetOptStat(000000); + //gPad->SetLogx(); + gPad->SetLogy(); + + ntuple->SetFillStyle(1001); + ntuple->SetFillColor(2); + + TH1F *htmp = new TH1F("htmp", "Secondary electron energy distribution per incident primary", 100, 0, 1000); + + ntuple->Draw("kineticEnergy>>htmp","kineticEnergy<100000&&flagParticle==1","B"); + + htmp->Scale (1./ntuple->GetEntries("trackID==1")); + htmp->SetXTitle("Energy (eV)"); + htmp->Draw(); +} + +void SetLeafAddress(TNtuple* ntuple, const char* name, void* address) { + TLeaf* leaf = ntuple->FindLeaf(name); + if ( ! leaf ) { + std::cerr << "Error in : unknown leaf --> " << name << std::endl; + return; + } + leaf->SetAddress(address); +} diff --git a/examples/extended/medical/dna/spower/secondary.in b/examples/extended/medical/dna/spower/secondary.in new file mode 100644 index 0000000000..d57c258464 --- /dev/null +++ b/examples/extended/medical/dna/spower/secondary.in @@ -0,0 +1,55 @@ +# MT mode +/run/numberOfThreads 8 +# +# Verbosity +/control/cout/ignoreThreadsExcept 0 +/control/verbose 1 +/run/verbose 1 +/tracking/verbose 0 +# +# Set material +/spower/det/setMat G4_WATER +# +# Set sphere radius +/spower/det/setRadius 1 m +# +# Set physics constructor +#/spower/phys/addPhysics dna_stat +/spower/phys/addPhysics dna_stat_opt2 +#/spower/phys/addPhysics dna_stat_opt4 +#/spower/phys/addPhysics dna_stat_opt6 +# +# Run initialization +/run/initialize +# +#################################################### +# ACTIVATE ROOT OUTPUT FILE CREATION FOR NTUPLE id=0 +/analysis/ntuple/setActivation 0 true +#################################################### +# +# Incident particle type +/gun/particle proton +#### Example of ion +#/gun/particle ion +#/gun/ion 3 7 +# +############################################ +# PROTON CASE: ACTIVATION OF IONISATION ONLY +# +/process/inactivate proton_G4DNAElastic +/process/inactivate proton_G4DNAExcitation +/process/inactivate proton_G4DNAChargeDecrease +# +/process/inactivate e-_G4DNAElectronSolvation +/process/inactivate e-_G4DNAElastic +/process/inactivate e-_G4DNAExcitation +/process/inactivate e-_G4DNAIonisation +/process/inactivate e-_G4DNAAttachment +/process/inactivate e-_G4DNAVibExcitation +############################################ +# +# Incident particle energy +/gun/energy 100 keV +# +# Beam on +/run/beamOn 100 diff --git a/examples/extended/medical/dna/spower/spower.in b/examples/extended/medical/dna/spower/spower.in index fe941aaa69..1fe28e2e5a 100644 --- a/examples/extended/medical/dna/spower/spower.in +++ b/examples/extended/medical/dna/spower/spower.in @@ -14,10 +14,11 @@ /spower/det/setRadius 1 m # # Set physics constructor -#/spower/phys/addPhysics dna_stat -/spower/phys/addPhysics dna_stat_opt2 -#/spower/phys/addPhysics dna_stat_opt4 -#/spower/phys/addPhysics dna_stat_opt6 +#/spower/phys/addPhysics dna_opt0 +/spower/phys/addPhysics dna_opt2 +#/spower/phys/addPhysics dna_opt4 +#/spower/phys/addPhysics dna_opt6 +#/spower/phys/addPhysics dna_opt8 # # Run initialization /run/initialize diff --git a/examples/extended/medical/dna/spower/spower.out b/examples/extended/medical/dna/spower/spower.out index 28b8bef09b..9b11eada50 100644 --- a/examples/extended/medical/dna/spower/spower.out +++ b/examples/extended/medical/dna/spower/spower.out @@ -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 @@ -19,6 +19,8 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** +##### Create analysis manager 0x1205030 +Using analysis manager *** /run/numberOfThreads command is issued in sequential mode. Command is ignored. /run/verbose 1 @@ -26,8 +28,8 @@ Command is ignored. /spower/det/setMat G4_WATER /spower/det/setRadius 1 m /run/reinitializeGeometry -/spower/phys/addPhysics dna_stat_opt2 -PhysicsList::AddPhysicsList: +/spower/phys/addPhysics dna_opt2 +PhysicsList::AddPhysicsList: /run/initialize --------------------------------------------------------- @@ -79,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 ======== @@ -285,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 ====== @@ -301,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 @@ -329,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 ====== @@ -363,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 ====== @@ -402,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 ====== @@ -424,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 @@ -436,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 ====== @@ -528,16 +542,25 @@ Index : 0 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 ------- + Run terminated. Run Summary Number of events processed : 1000 - User=1.010000s Real=1.011249s Sys=0.000000s + User=1.580000s Real=1.588855s Sys=0.000000s ======================== run summary ===================== The run is 1000 e- of 50.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 14.26 +- 0.83 + total Stopping Power (keV/um) = 14.26 +- 0.84 /gun/energy 100 eV /run/beamOn 1000 @@ -556,13 +579,13 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.040000s Real=1.037927s Sys=0.000000s + User=2.120000s Real=2.114935s Sys=0.000000s ======================== run summary ===================== The run is 1000 e- of 100.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 21.98 +- 1.12 + total Stopping Power (keV/um) = 21.97 +- 1.12 /gun/energy 200 eV /run/beamOn 1000 @@ -581,13 +604,13 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.120000s Real=1.130735s Sys=0.000000s + User=2.560000s Real=2.572647s Sys=0.000000s ======================== run summary ===================== The run is 1000 e- of 200.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 21.69 +- 1.05 + total Stopping Power (keV/um) = 21.72 +- 1.12 /gun/energy 500 eV /run/beamOn 1000 @@ -606,13 +629,13 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.160000s Real=1.159362s Sys=0.000000s + User=2.870000s Real=2.870607s Sys=0.010000s ======================== run summary ===================== The run is 1000 e- of 500.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 15.39 +- 0.83 + total Stopping Power (keV/um) = 15.35 +- 0.82 /gun/energy 1000 eV /run/beamOn 1000 @@ -631,13 +654,13 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.130000s Real=1.133089s Sys=0.000000s + User=2.890000s Real=2.895384s Sys=0.000000s ======================== run summary ===================== The run is 1000 e- of 1.00 keV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 10.53 +- 0.70 + total Stopping Power (keV/um) = 10.50 +- 0.68 ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.32 MB diff --git a/examples/extended/medical/dna/spower/src/ActionInitialization.cc b/examples/extended/medical/dna/spower/src/ActionInitialization.cc index 5587ba9dba..be1d98f589 100644 --- a/examples/extended/medical/dna/spower/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/spower/src/ActionInitialization.cc @@ -43,6 +43,8 @@ #include "RunAction.hh" #include "SteppingAction.hh" #include "SteppingVerbose.hh" +#include "TrackingAction.hh" + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -71,6 +73,9 @@ void ActionInitialization::Build() const SteppingAction* step = new SteppingAction(); SetUserAction(step); + TrackingAction* trackingAction = new TrackingAction(); + SetUserAction(trackingAction); + SetUserAction(new EventAction(step)); } diff --git a/examples/extended/medical/dna/spower/src/PhysicsList.cc b/examples/extended/medical/dna/spower/src/PhysicsList.cc index 940cd462ff..812e572414 100644 --- a/examples/extended/medical/dna/spower/src/PhysicsList.cc +++ b/examples/extended/medical/dna/spower/src/PhysicsList.cc @@ -39,11 +39,17 @@ #include "PhysicsList.hh" #include "PhysicsListMessenger.hh" +#include "G4EmParameters.hh" #include "G4EmDNAPhysics_stationary.hh" #include "G4EmDNAPhysics_stationary_option2.hh" #include "G4EmDNAPhysics_stationary_option4.hh" #include "G4EmDNAPhysics_stationary_option6.hh" +#include "G4EmDNAPhysics.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4EmDNAPhysics_option4.hh" +#include "G4EmDNAPhysics_option6.hh" +#include "G4EmDNAPhysics_option8.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -54,7 +60,9 @@ PhysicsList::PhysicsList() SetVerboseLevel(1); // EM physics - fEmPhysicsList = new G4EmDNAPhysics_stationary_option2(); + fEmName = "dna_stat_opt2"; + fEmPhysicsList = new G4EmDNAPhysics_option2(); + G4EmParameters::Instance()->SetDNAStationary(true); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -87,13 +95,38 @@ void PhysicsList::ConstructProcess() void PhysicsList::AddPhysicsList(const G4String& name) { - if (verboseLevel > -1) { + if (verboseLevel > 0) { G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; } if (name == fEmName) return; - if (name == "dna_stat") { + if (name == "dna_opt0") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics(); + } + else if (name == "dna_opt2") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option2(); + } + else if (name == "dna_opt4") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option4(); + } + else if (name == "dna_opt6") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option6(); + } + else if (name == "dna_opt8") { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmDNAPhysics_option8(); + } + else if (name == "dna_stat") { fEmName = name; delete fEmPhysicsList; fEmPhysicsList = new G4EmDNAPhysics_stationary(); @@ -117,4 +150,5 @@ void PhysicsList::AddPhysicsList(const G4String& name) G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << " is not defined" << G4endl; } + G4EmParameters::Instance()->SetDNAStationary(true); } diff --git a/examples/extended/medical/dna/spower/src/RunAction.cc b/examples/extended/medical/dna/spower/src/RunAction.cc index 11645bf24a..4ef2112d3c 100644 --- a/examples/extended/medical/dna/spower/src/RunAction.cc +++ b/examples/extended/medical/dna/spower/src/RunAction.cc @@ -42,19 +42,52 @@ #include "PrimaryGeneratorAction.hh" #include "Run.hh" +#include "G4AnalysisManager.hh" #include "G4RunManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction() : G4UserRunAction(), fpDetector(0), fpRun(0) { - fpDetector = dynamic_cast( + fpDetector = dynamic_cast( G4RunManager::GetRunManager()->GetUserDetectorConstruction()); + + // Create analysis manager + G4cout << "##### Create analysis manager " + << " " << this << G4endl; + auto analysisManager = G4AnalysisManager::Instance(); + + analysisManager->SetDefaultFileType("root"); + + analysisManager->SetNtupleMerging(true); + + analysisManager->SetActivation(true); // Set the possibility to activate or not + + G4cout << "Using " << analysisManager->GetType() << " analysis manager" << G4endl; + + // Create track information ntuple + analysisManager->CreateNtuple("track", "dnaphysics"); + analysisManager->CreateNtupleDColumn("flagParticle"); + analysisManager->CreateNtupleDColumn("x"); + analysisManager->CreateNtupleDColumn("y"); + analysisManager->CreateNtupleDColumn("z"); + analysisManager->CreateNtupleDColumn("dirx"); + analysisManager->CreateNtupleDColumn("diry"); + analysisManager->CreateNtupleDColumn("dirz"); + analysisManager->CreateNtupleDColumn("kineticEnergy"); + analysisManager->CreateNtupleIColumn("trackID"); + analysisManager->CreateNtupleIColumn("parentID"); + analysisManager->FinishNtuple(); + + // Not activated by default + analysisManager->SetNtupleActivation(false); + } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RunAction::~RunAction() {} +RunAction::~RunAction() +{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -68,6 +101,13 @@ G4Run* RunAction::GenerateRun() void RunAction::BeginOfRunAction(const G4Run*) { + auto analysisManager = G4AnalysisManager::Instance(); + + // Open an output file + G4String fileName = "spower"; + analysisManager->OpenFile(fileName); + + // const PrimaryGeneratorAction* primary = dynamic_cast( G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction()); @@ -84,4 +124,9 @@ void RunAction::BeginOfRunAction(const G4Run*) void RunAction::EndOfRunAction(const G4Run*) { if (isMaster) fpRun->EndOfRun(); + + // Save histograms + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->Write(); + analysisManager->CloseFile(); } diff --git a/examples/extended/medical/dna/spower/src/SteppingAction.cc b/examples/extended/medical/dna/spower/src/SteppingAction.cc index 90c3e6ebf0..3dc13e37b8 100644 --- a/examples/extended/medical/dna/spower/src/SteppingAction.cc +++ b/examples/extended/medical/dna/spower/src/SteppingAction.cc @@ -131,7 +131,12 @@ void SteppingAction::UserSteppingAction(const G4Step* step) fTotalStoppingPower = fDepositedEnergy / fLength; // G4cout << fTotalStoppingPower/(MeV/cm) << G4endl; - G4RunManager::GetRunManager()->AbortEvent(); + // *** Default method to stop calculation (no secondary electrons tracked) + // G4RunManager::GetRunManager()->AbortEvent(); + + // *** Alternative method when secondary electrons are scored in TrackingAction (slower) + step->GetTrack()->SetTrackStatus(fStopAndKill); + fSumOfStepLength = 0.; fDepositedEnergy = 0; fNumberOfSteps = 0; diff --git a/examples/extended/medical/dna/spower/src/TrackingAction.cc b/examples/extended/medical/dna/spower/src/TrackingAction.cc new file mode 100644 index 0000000000..8fa24bbd1a --- /dev/null +++ b/examples/extended/medical/dna/spower/src/TrackingAction.cc @@ -0,0 +1,111 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publications: +// Med. Phys. 45 (2018) e722-e739 +// Phys. Med. 31 (2015) 861-874 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file TrackingAction.cc +/// \brief Implementation of the TrackingAction class + +#include "TrackingAction.hh" + +#include "G4Alpha.hh" +#include "G4AnalysisManager.hh" +#include "G4DNAGenericIonsManager.hh" +#include "G4Electron.hh" +#include "G4Gamma.hh" +#include "G4PhysicalConstants.hh" +#include "G4Proton.hh" +#include "G4SystemOfUnits.hh" +#include "G4Track.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +TrackingAction::TrackingAction() {} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void TrackingAction::PreUserTrackingAction(const G4Track* aTrack) +{ + G4double flagParticle = -1.; + G4double x, y, z, dirx, diry, dirz; + + G4ParticleDefinition* partDef = aTrack->GetDynamicParticle()->GetDefinition(); + + if (partDef == G4Gamma::GammaDefinition()) flagParticle = 0; + + if (partDef == G4Electron::ElectronDefinition()) flagParticle = 1; + + if (partDef == G4Proton::ProtonDefinition()) flagParticle = 2; + + if (partDef == G4Alpha::AlphaDefinition()) flagParticle = 4; + + G4DNAGenericIonsManager* instance; + instance = G4DNAGenericIonsManager::Instance(); + + if (partDef == instance->GetIon("hydrogen")) flagParticle = 3; + + if (partDef == instance->GetIon("alpha+")) flagParticle = 5; + + if (partDef == instance->GetIon("helium")) flagParticle = 6; + + // + + x = aTrack->GetPosition().x() / nanometer; + y = aTrack->GetPosition().y() / nanometer; + z = aTrack->GetPosition().z() / nanometer; + + dirx = aTrack->GetMomentumDirection().x(); + diry = aTrack->GetMomentumDirection().y(); + dirz = aTrack->GetMomentumDirection().z(); + + // Call analysis manager + G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + + // Fill track information ntuple + analysisManager->FillNtupleDColumn(0, flagParticle); + analysisManager->FillNtupleDColumn(1, x); + analysisManager->FillNtupleDColumn(2, y); + analysisManager->FillNtupleDColumn(3, z); + analysisManager->FillNtupleDColumn(4, dirx); + analysisManager->FillNtupleDColumn(5, diry); + analysisManager->FillNtupleDColumn(6, dirz); + analysisManager->FillNtupleDColumn(7, aTrack->GetKineticEnergy() / eV); + analysisManager->FillNtupleIColumn(8, aTrack->GetTrackID()); + analysisManager->FillNtupleIColumn(9, aTrack->GetParentID()); + analysisManager->AddNtupleRow(); + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void TrackingAction::PostUserTrackingAction(const G4Track*) {} diff --git a/examples/extended/medical/dna/svalue/History b/examples/extended/medical/dna/svalue/History index b97389430f..344bc81cb7 100644 --- a/examples/extended/medical/dna/svalue/History +++ b/examples/extended/medical/dna/svalue/History @@ -4,6 +4,11 @@ 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-01-22 Sebastien Incerti (svalue-V11-03-01) +- added optional time threshold to iodine macros + +## 2025-01-02 Sebastien Incerti (svalue-V11-03-00) +- added ntuple merging ## 2024-10-05 Sebastien Incerti (svalue-V11-02-01) - Updated README diff --git a/examples/extended/medical/dna/svalue/spectrum.C b/examples/extended/medical/dna/svalue/spectrum.C index 96c68ba7ea..0d54b70886 100644 --- a/examples/extended/medical/dna/svalue/spectrum.C +++ b/examples/extended/medical/dna/svalue/spectrum.C @@ -26,7 +26,7 @@ for (int i=0;iFill(value); diff --git a/examples/extended/medical/dna/svalue/src/HistoManager.cc b/examples/extended/medical/dna/svalue/src/HistoManager.cc index 87ae372ffa..4d560a4578 100644 --- a/examples/extended/medical/dna/svalue/src/HistoManager.cc +++ b/examples/extended/medical/dna/svalue/src/HistoManager.cc @@ -60,6 +60,7 @@ void HistoManager::Book() analysisManager->SetFileName(fFileName); analysisManager->SetVerboseLevel(1); analysisManager->SetActivation(true); + analysisManager->SetNtupleMerging(true); // Define histograms start values diff --git a/examples/extended/medical/dna/svalue/src/PhysicsList.cc b/examples/extended/medical/dna/svalue/src/PhysicsList.cc index 717ab59ab5..d59c268677 100644 --- a/examples/extended/medical/dna/svalue/src/PhysicsList.cc +++ b/examples/extended/medical/dna/svalue/src/PhysicsList.cc @@ -86,8 +86,8 @@ PhysicsList::PhysicsList() : G4VModularPhysicsList(), fEmPhysicsList(0), fMessen G4double highLimit = 100. * CLHEP::GeV; G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(lowLimit, highLimit); - // Change time and other limits in G4NuclideTable + // Change time and other limits in G4NuclideTable G4NuclideTable::GetInstance()->SetThresholdOfHalfLife(0.1 * picosecond); G4NuclideTable::GetInstance()->SetLevelTolerance(1.0 * eV); diff --git a/examples/extended/medical/dna/svalue/svalue-iodine125.in b/examples/extended/medical/dna/svalue/svalue-iodine125.in index 3263ae9064..a023b874c0 100644 --- a/examples/extended/medical/dna/svalue/svalue-iodine125.in +++ b/examples/extended/medical/dna/svalue/svalue-iodine125.in @@ -33,6 +33,9 @@ /gun/particle ion /gun/ion 53 125 # +# Decay time threshold (if needed) +#/process/had/rdm/thresholdForVeryLongDecayTime 1.0e+60 year +# # Histograms /analysis/setFileName iodine125 /analysis/h1/set 0 100 0 1 MeV #e- track energy diff --git a/examples/extended/medical/dna/svalue/svalue-iodine131.in b/examples/extended/medical/dna/svalue/svalue-iodine131.in index f2db8de215..971f5889bf 100644 --- a/examples/extended/medical/dna/svalue/svalue-iodine131.in +++ b/examples/extended/medical/dna/svalue/svalue-iodine131.in @@ -33,6 +33,9 @@ /gun/particle ion /gun/ion 53 131 # +# Decay time threshold (if needed) +#/process/had/rdm/thresholdForVeryLongDecayTime 1.0e+60 year +# # Histograms /analysis/setFileName iodine131 /analysis/h1/set 0 100 0 1 MeV #e- track energy diff --git a/examples/extended/medical/dna/svalue/svalue.out b/examples/extended/medical/dna/svalue/svalue.out index 6d59a5616c..554ac02c3b 100644 --- a/examples/extended/medical/dna/svalue/svalue.out +++ b/examples/extended/medical/dna/svalue/svalue.out @@ -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", @@ -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 ======== @@ -357,7 +358,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 ====== @@ -374,7 +377,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 @@ -426,19 +429,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 ====== @@ -461,23 +466,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 ====== @@ -501,19 +510,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 ====== @@ -523,8 +534,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 @@ -535,7 +546,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 ====== @@ -636,7 +649,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.120000s Real=0.115806s Sys=0.000000s + User=0.120000s Real=0.119011s Sys=0.000000s ======================== run summary ===================== @@ -674,7 +687,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.200000s Real=0.201611s Sys=0.000000s + User=0.210000s Real=0.213941s Sys=0.000000s ======================== run summary ===================== @@ -712,7 +725,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.310000s Real=0.312124s Sys=0.000000s + User=0.340000s Real=0.338006s Sys=0.000000s ======================== run summary ===================== @@ -750,7 +763,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.390000s Real=0.381746s Sys=0.000000s + User=0.420000s Real=0.416726s Sys=0.000000s ======================== run summary ===================== @@ -788,7 +801,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.450000s Real=0.458994s Sys=0.000000s + User=0.490000s Real=0.496421s Sys=0.000000s ======================== run summary ===================== @@ -826,7 +839,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.560000s Real=0.558957s Sys=0.000000s + User=0.590000s Real=0.592153s Sys=0.000000s ======================== run summary ===================== @@ -864,7 +877,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.640000s Real=0.640356s Sys=0.000000s + User=0.680000s Real=0.684129s Sys=0.000000s ======================== run summary ===================== @@ -902,7 +915,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.720000s Real=0.716270s Sys=0.000000s + User=0.840000s Real=0.836656s Sys=0.000000s ======================== run summary ===================== @@ -940,7 +953,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.820000s Real=0.821529s Sys=0.000000s + User=0.960000s Real=0.962390s Sys=0.010000s ======================== run summary ===================== @@ -978,7 +991,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.920000s Real=0.916124s Sys=0.000000s + User=1.060000s Real=1.063180s Sys=0.000000s ======================== run summary ===================== @@ -1016,7 +1029,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.800000s Real=1.804779s Sys=0.000000s + User=1.940000s Real=1.944810s Sys=0.000000s ======================== run summary ===================== @@ -1054,7 +1067,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=2.650000s Real=2.650037s Sys=0.000000s + User=2.980000s Real=2.975870s Sys=0.000000s ======================== run summary ===================== @@ -1092,7 +1105,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=3.580000s Real=3.579465s Sys=0.000000s + User=3.900000s Real=3.907142s Sys=0.000000s ======================== run summary ===================== @@ -1130,7 +1143,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=4.350000s Real=4.353060s Sys=0.000000s + User=4.910000s Real=4.912387s Sys=0.000000s ======================== run summary ===================== @@ -1168,7 +1181,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=5.340000s Real=5.366861s Sys=0.000000s + User=5.780000s Real=5.775664s Sys=0.000000s ======================== run summary ===================== @@ -1206,7 +1219,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=6.360000s Real=6.366106s Sys=0.000000s + User=6.590000s Real=6.593097s Sys=0.000000s ======================== run summary ===================== @@ -1244,7 +1257,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=7.320000s Real=7.320443s Sys=0.000000s + User=7.470000s Real=7.471370s Sys=0.000000s ======================== run summary ===================== @@ -1282,7 +1295,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=8.010000s Real=8.005804s Sys=0.000000s + User=8.550000s Real=8.549184s Sys=0.000000s ======================== run summary ===================== @@ -1320,7 +1333,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=8.900000s Real=8.930019s Sys=0.020000s + User=9.470000s Real=9.480182s Sys=0.010000s ======================== run summary ===================== diff --git a/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out b/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out index 6a115edbc8..d665f67e2d 100644 --- a/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out +++ b/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out @@ -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 @@ -75,23 +75,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", @@ -162,7 +163,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 ======== @@ -368,7 +369,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 ====== @@ -384,7 +387,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 @@ -412,19 +415,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -446,23 +451,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -485,19 +494,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -507,19 +518,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== diff --git a/examples/extended/medical/dna/wvalue/History b/examples/extended/medical/dna/wvalue/History index 0addc56420..f79a6b9c75 100644 --- a/examples/extended/medical/dna/wvalue/History +++ b/examples/extended/medical/dna/wvalue/History @@ -4,6 +4,8 @@ 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-01-03 Sebastien Incerti (wvalue-V11-03-00) +- Added ntuple merging ## 2024-10-05 Sebastien Incerti (wvalue-V11-02-01) - Updated README diff --git a/examples/extended/medical/dna/wvalue/src/HistoManager.cc b/examples/extended/medical/dna/wvalue/src/HistoManager.cc index 5f61a1955c..235883dd27 100644 --- a/examples/extended/medical/dna/wvalue/src/HistoManager.cc +++ b/examples/extended/medical/dna/wvalue/src/HistoManager.cc @@ -60,6 +60,7 @@ void HistoManager::Book() analysisManager->SetFileName(fFileName); analysisManager->SetVerboseLevel(1); analysisManager->SetActivation(true); + analysisManager->SetNtupleMerging(true); // Define histograms start values diff --git a/examples/extended/medical/dna/wvalue/wvalue.out b/examples/extended/medical/dna/wvalue/wvalue.out index f0e9602776..21fbcaa6dc 100644 --- a/examples/extended/medical/dna/wvalue/wvalue.out +++ b/examples/extended/medical/dna/wvalue/wvalue.out @@ -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", @@ -140,7 +141,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 ======== @@ -336,7 +337,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 ====== @@ -352,7 +355,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 @@ -380,19 +383,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -414,23 +419,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -453,19 +462,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 ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 400 MeV deltaRudd Fluo - DummyModel : Emin= 400 MeV Emax= 600 MeV +DNARuddIonisationModel : 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 ====== @@ -475,19 +486,21 @@ 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 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -DNARuddIonisationModel : Emin= 0 eV Emax= 300 MeV deltaRudd Fluo +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 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 ====== diff --git a/examples/extended/medical/electronScattering/electronScattering.out b/examples/extended/medical/electronScattering/electronScattering.out index 3c71fb2e59..5198905762 100644 --- a/examples/extended/medical/electronScattering/electronScattering.out +++ b/examples/extended/medical/electronScattering/electronScattering.out @@ -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 @@ -226,7 +226,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 ======== @@ -740,7 +740,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=2.510000s Real=2.516897s Sys=0.000000s + User=2.580000s Real=2.586789s Sys=0.000000s ======================== run summary ====================== @@ -755,9 +755,9 @@ N=17 V[N]={139564191965863788, 2302776708230382971, 254581900843411369, 22213365 --------------------------------------- G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x73b8f0 -UserPhysicsList deleted 0x9da2b0 -UserActionInitialization deleted 0xa1e540 +UserDetectorConstruction deleted 0x2040a70 +UserPhysicsList deleted 0x22df960 +UserActionInitialization deleted 0x2324830 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/medical/electronScattering2/electronScattering2.out b/examples/extended/medical/electronScattering2/electronScattering2.out index e8ebb62cff..c5587aaed1 100644 --- a/examples/extended/medical/electronScattering2/electronScattering2.out +++ b/examples/extended/medical/electronScattering2/electronScattering2.out @@ -15,7 +15,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 @@ -200,7 +200,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 ======== @@ -847,4 +847,4 @@ Number of Events Processed:20000 230 0.0092149 0.0036173 10 4 231 0.0030701 0.0007328 4 1 232 0.005447 0.0032813 7 4 -### deleting electronFilter 0x135d5d0 +### deleting electronFilter 0x9777d0 diff --git a/examples/extended/medical/fanoCavity/fanoCavity.out b/examples/extended/medical/fanoCavity/fanoCavity.out index 6fe04f2b15..ca82750a72 100644 --- a/examples/extended/medical/fanoCavity/fanoCavity.out +++ b/examples/extended/medical/fanoCavity/fanoCavity.out @@ -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 @@ -160,7 +160,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 ======== @@ -300,7 +300,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 4000 - User=4.630000s Real=4.641809s Sys=0.000000s + User=4.920000s Real=4.916582s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/medical/fanoCavity2/fanoCavity2.out b/examples/extended/medical/fanoCavity2/fanoCavity2.out index f133e0c81d..b5574019ca 100644 --- a/examples/extended/medical/fanoCavity2/fanoCavity2.out +++ b/examples/extended/medical/fanoCavity2/fanoCavity2.out @@ -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 @@ -158,7 +158,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 ======== @@ -317,7 +317,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 40000 - User=0.840000s Real=0.839511s Sys=0.000000s + User=0.930000s Real=0.940515s Sys=0.000000s Process calls frequency ---> eIoni= 315000 msc= 275995 Transportation= 22864 diff --git a/examples/extended/medical/radiobiology/History b/examples/extended/medical/radiobiology/History index f792c92810..c2d3f5232d 100644 --- a/examples/extended/medical/radiobiology/History +++ b/examples/extended/medical/radiobiology/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2024-12-11 GAP Cirrone (radiobiology-V11-03-00) +- Primary beam origin can be located outside the detector water tank + ## 2024-08-12 I. Hrivnacova (radiobiology-V11-02-00) - Updated for changes in accumulables: use new "Register" method with shorter name diff --git a/examples/extended/medical/radiobiology/include/DetectorConstruction.hh b/examples/extended/medical/radiobiology/include/DetectorConstruction.hh index 96b3128ed6..d1187a42af 100644 --- a/examples/extended/medical/radiobiology/include/DetectorConstruction.hh +++ b/examples/extended/medical/radiobiology/include/DetectorConstruction.hh @@ -106,6 +106,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction G4double GetSizeY() const { return fBoxSizeY; } G4double GetSizeZ() const { return fBoxSizeZ; } + /** @brief Returns a pointer to the world material */ G4Material* GetMaterial() { return fMaterial; } @@ -114,6 +115,9 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: // World physical and logical + + G4VPhysicalVolume* pWorld = nullptr; + G4VPhysicalVolume* fPBox = nullptr; G4LogicalVolume* fLBox = nullptr; diff --git a/examples/extended/medical/radiobiology/radiobiology.out b/examples/extended/medical/radiobiology/radiobiology.out index 98c6b461f1..67fb4d08f9 100644 --- a/examples/extended/medical/radiobiology/radiobiology.out +++ b/examples/extended/medical/radiobiology/radiobiology.out @@ -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", @@ -97,6 +98,12 @@ HADRONTHERAPY_1 PHYSICS LIST has been activated Command is ignored. --- G4CoupledTransportation is used @@@ G4ParticleHPInelasticData instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1 +NeutronHP: /Capture file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_37_Argon +NeutronHP: /Elastic file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_37_Argon +NeutronHP: /Inelastic file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic/CrossSection/18_37_Argon +NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_39_Argon +NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_39_Argon +NeutronHP: /Inelastic file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic/CrossSection/18_39_Argon ******************************************* ****** Parameters of the class Dose ******* ******************************************* @@ -161,7 +168,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 ======== @@ -253,10 +260,10 @@ msc: for e- SubType= 10 WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm -eIoni: for e- XStype:1 SubType=2 +eIoni: for e- XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 240 bins Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 - StepFunction=(0.2, 0.01 mm), integ: 1, fluct: 1, linLossLim= 0.01 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 ===== EM models for the G4Region DefaultRegionForTheWorld ====== PenIoni : Emin= 0 eV Emax= 100 keV MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI @@ -289,10 +296,10 @@ msc: for e+ SubType= 10 WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm -eIoni: for e+ XStype:1 SubType=2 +eIoni: for e+ XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 240 bins Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 - StepFunction=(0.2, 0.01 mm), integ: 1, fluct: 1, linLossLim= 0.01 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 ===== EM models for the G4Region DefaultRegionForTheWorld ====== PenIoni : Emin= 0 eV Emax= 100 keV MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI @@ -567,6 +574,14 @@ CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV +NeutronHP: /Capture file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_37_Argon +NeutronHP: /Elastic file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_37_Argon +NeutronHP: /Inelastic file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic/CrossSection/18_37_Argon +NeutronHP: /Capture file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Capture/CrossSection/18_39_Argon +NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_39_Argon +NeutronHP: /Inelastic file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Inelastic/CrossSection/18_39_Argon +NeutronHP: /Elastic file for Z = 18, A = 36 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_37_Argon +NeutronHP: /Elastic file for Z = 18, A = 38 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7.1/Elastic/CrossSection/18_39_Argon ======================================================= ====== ParticleHP Physics Parameters ======== @@ -669,7 +684,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 @@ -900,6 +915,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 @@ -916,6 +932,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 @@ -964,4 +981,4 @@ RBE: Computing alpha and beta... RBE: Computing survival and RBE... RBE: Alpha and beta written to RadioBio_AlphaAndBeta.out RBE: RBE written to RadioBio_RBE.out -The simulation took: 32.1905 s to run (real time) +The simulation took: 34.2941 s to run (real time) diff --git a/examples/extended/medical/radiobiology/src/DetectorConstruction.cc b/examples/extended/medical/radiobiology/src/DetectorConstruction.cc index 5005af7d39..3edbac30af 100644 --- a/examples/extended/medical/radiobiology/src/DetectorConstruction.cc +++ b/examples/extended/medical/radiobiology/src/DetectorConstruction.cc @@ -41,6 +41,7 @@ #include "G4SolidStore.hh" #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" +#include "G4VisAttributes.hh" #include "DetectorMessenger.hh" #include "VoxelizedSensitiveDetector.hh" @@ -95,23 +96,32 @@ G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() G4LogicalVolumeStore::GetInstance()->Clean(); G4SolidStore::GetInstance()->Clean(); - G4Box* sBox = new G4Box("Container", // its name - fBoxSizeX / 2, fBoxSizeY / 2, fBoxSizeZ / 2); // its dimensions + // Materials + G4bool isotopes = false; + G4Material* airNist = G4NistManager::Instance()->FindOrBuildMaterial("G4_AIR", isotopes); - fLBox = new G4LogicalVolume(sBox, // its shape - fMaterial, // its material - fMaterial->GetName()); // its name + // Simulation world + const G4double worldX = 400.0 * cm; + const G4double worldY = 400.0 * cm; + const G4double worldZ = 400.0 * cm; - fPBox = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - fLBox, // its logical volume - fMaterial->GetName(), // its name - 0, // its mother volume - false, // no boolean operation - 0); // copy number + G4Box* sWorld = new G4Box("TreatmentRoom", worldX, worldY, worldZ); - // Parameters for the world volume can be printed - // PrintParameters(); + G4LogicalVolume* lWorld = new G4LogicalVolume(sWorld, airNist, "logicWorld", 0, 0, 0); + + pWorld = new G4PVPlacement(0, G4ThreeVector(), "physicsWorld", lWorld, 0, false, 0); + + // Create a visual attribute for the world + G4VisAttributes* worldVisAttributes = new G4VisAttributes(G4Colour(0.0, 0.0, 1.0)); // Blue color + worldVisAttributes->SetVisibility(true); // Ensure visibility + worldVisAttributes->SetForceWireframe(true); // Optional: make it wireframe for clarity + lWorld->SetVisAttributes(worldVisAttributes); + + G4Box* sBox = new G4Box("Container", fBoxSizeX / 2, fBoxSizeY / 2, fBoxSizeZ / 2); + + fLBox = new G4LogicalVolume(sBox, fMaterial, fMaterial->GetName()); + + fPBox = new G4PVPlacement(0, G4ThreeVector(), fLBox, fMaterial->GetName(), lWorld, false, 0); // Initialize pointer to world for voxelization VoxelizedSensitiveDetector::GetInstance()->InitializeWorldPtr(fPBox); @@ -120,15 +130,16 @@ G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() VoxelizedSensitiveDetector::GetInstance()->Construct(); // Always return the root volume - return fPBox; + return pWorld; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void DetectorConstruction::PrintParameters() { - G4cout << "\n The Box dimensions are: " << G4endl << "x: " << G4BestUnit(fBoxSizeX, "Length") - << G4endl << "y: " << G4BestUnit(fBoxSizeY, "Length") << G4endl + G4cout << "\n The Box dimensions are: " << G4endl + << "x: " << G4BestUnit(fBoxSizeX, "Length") << G4endl + << "y: " << G4BestUnit(fBoxSizeY, "Length") << G4endl << "z: " << G4BestUnit(fBoxSizeZ, "Length") << G4endl; G4cout << "And its volume therefore is: " @@ -139,7 +150,6 @@ void DetectorConstruction::PrintParameters() void DetectorConstruction::SetMaterial(G4String materialChoice) { - // Search the material by its name G4Material* pttoMaterial = G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); if (pttoMaterial) { @@ -150,9 +160,7 @@ void DetectorConstruction::SetMaterial(G4String materialChoice) } G4RunManager::GetRunManager()->PhysicsHasBeenModified(); } - } - else { - // Warning the user this material does not exist + } else { std::stringstream sstr; sstr << "material " << +materialChoice << " does not exist, keeping material " << fMaterial->GetName(); @@ -202,4 +210,4 @@ void DetectorConstruction::SetSizeZ(G4double sizeZ) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -} // namespace RadioBio +} // namespace RadioBio \ No newline at end of file diff --git a/examples/extended/optical/LXe/LXe.out b/examples/extended/optical/LXe/LXe.out index ac688bbea7..41a04ec112 100644 --- a/examples/extended/optical/LXe/LXe.out +++ b/examples/extended/optical/LXe/LXe.out @@ -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", @@ -151,7 +152,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 ======== @@ -846,6 +847,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 @@ -862,6 +864,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,7 +935,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 200 - User=3.570000s Real=3.587989s Sys=0.020000s + User=4.030000s Real=4.758681s Sys=0.020000s ======================== run summary ====================== The run was 200 events. @@ -1049,7 +1052,7 @@ Unaccounted for photons in this event : 0 Run terminated. Run Summary Number of events processed : 5 - User=0.090000s Real=0.092850s Sys=0.000000s + User=0.100000s Real=0.097027s Sys=0.000000s ======================== run summary ====================== The run was 5 events. @@ -1938,7 +1941,7 @@ Unaccounted for photons in this event : 0 "./currentEvent.rndm" is copied to "./run2evt0.rndm Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.009196s Sys=0.000000s + User=0.000000s Real=0.002775s Sys=0.000000s ======================== run summary ====================== The run was 1 events. diff --git a/examples/extended/optical/LXe/cerenkov.out b/examples/extended/optical/LXe/cerenkov.out index 66bbd2895f..49221558cd 100644 --- a/examples/extended/optical/LXe/cerenkov.out +++ b/examples/extended/optical/LXe/cerenkov.out @@ -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", @@ -179,7 +180,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 ======== @@ -874,6 +875,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 @@ -890,6 +892,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 @@ -959,7 +962,7 @@ WARNING: G4VisManager::IsValidView(): Attempt to draw when no graphics system Run terminated. Run Summary Number of events processed : 10000 - User=1.530000s Real=1.529011s Sys=0.000000s + User=1.500000s Real=1.507928s Sys=0.000000s ======================== run summary ====================== The run was 10000 events. diff --git a/examples/extended/optical/LXe/photon.out b/examples/extended/optical/LXe/photon.out index 8af9945b59..abd5fcefae 100644 --- a/examples/extended/optical/LXe/photon.out +++ b/examples/extended/optical/LXe/photon.out @@ -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", @@ -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 ======== @@ -826,6 +827,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 @@ -842,6 +844,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 diff --git a/examples/extended/optical/LXe/wls.out b/examples/extended/optical/LXe/wls.out index 6c6bb2a1af..554a135c0b 100644 --- a/examples/extended/optical/LXe/wls.out +++ b/examples/extended/optical/LXe/wls.out @@ -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", @@ -175,7 +176,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,6 +871,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 @@ -886,6 +888,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 @@ -990,15 +993,15 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 100 - User=14.450000s Real=14.473476s Sys=0.000000s + User=16.470000s Real=16.485063s Sys=0.000000s ======================== run summary ====================== The run was 100 events. Number of hits per event: 0 +- 0 Number of hits per event above threshold: 0 +- 0 -Number of scintillation photons per event : 4488 +- 77.08 -Number of Cerenkov photons per event: 22.34 +- 0.6692 -Number of absorbed photons per event : 4324 +- 74 +Number of scintillation photons per event : 4531 +- 61.58 +Number of Cerenkov photons per event: 23.97 +- 0.5982 +Number of absorbed photons per event : 4367 +- 59.21 Number of photons absorbed at boundary per event: 0 +- 0 Total energy deposition in scintillator per event: 0 +- 0 keV. @@ -1008,9 +1011,9 @@ Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0xbb9440 -UserPhysicsList deleted 0xc071b0 -UserActionInitialization deleted 0xd9fed0 +UserDetectorConstruction deleted 0x1b9aaf0 +UserPhysicsList deleted 0x1be8c80 +UserActionInitialization deleted 0x1d82380 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -1025,19 +1028,19 @@ G4RNGHelper object is deleted. ================== Deleting memory pools =================== Pool ID '20G4NavigationLevelRep', size : 0.00961 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.232 MB +Pool ID '17G4DynamicParticle', size : 0.306 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.462 MB +Pool ID '7G4Track', size : 0.611 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '13LXeTrajectory', size : 0.000961 MB Pool ID '17G4TrajectoryPoint', size : 0.000961 MB Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.71 MB +Dynamic pools deleted: 13 / Total memory freed: 0.94 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/optical/OpNovice/OpNovice.out b/examples/extended/optical/OpNovice/OpNovice.out index 6229373412..b959449122 100644 --- a/examples/extended/optical/OpNovice/OpNovice.out +++ b/examples/extended/optical/OpNovice/OpNovice.out @@ -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 @@ -401,7 +401,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 ======== @@ -1128,6 +1128,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 @@ -1144,6 +1145,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 @@ -13681,8 +13683,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu * G4Track Information: Particle = gamma, Track ID = 51, Parent ID = 1 ********************************************************************************************************* -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.943 -0.64 0.127 0.511 0 0 0 Tank initS +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLen ============================================================================================ ================= lines above cut to keep file within limits =============================== ============================================================================================ @@ -13696,7 +13697,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 1000 - User=0.690000s Real=0.694676s Sys=0.000000s + User=0.770000s Real=0.774595s Sys=0.000000s ======================== run summary ====================== Primary particle was: e+ with energy 500 keV. diff --git a/examples/extended/optical/OpNovice/opgdml.out b/examples/extended/optical/OpNovice/opgdml.out index 7c898472ea..309d58ecfb 100644 --- a/examples/extended/optical/OpNovice/opgdml.out +++ b/examples/extended/optical/OpNovice/opgdml.out @@ -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 ======== @@ -829,6 +829,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 @@ -845,6 +846,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 @@ -13444,8 +13446,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu ********************************************************************************************************* Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 10 0.518 0.977 -5.14 0.169 0 0 0.544 Tank_phys initStep - 11 0.496 0 + ============================================================================================ ================= lines above cut to keep file within limits =============================== ============================================================================================ @@ -13459,7 +13460,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 1000 - User=0.770000s Real=0.776351s Sys=0.000000s + User=0.770000s Real=0.775918s Sys=0.000000s ======================== run summary ====================== Primary particle was: e+ with energy 500 keV. diff --git a/examples/extended/optical/OpNovice/optPhoton.out b/examples/extended/optical/OpNovice/optPhoton.out index b2cd298bb2..4e0fb1b0cc 100644 --- a/examples/extended/optical/OpNovice/optPhoton.out +++ b/examples/extended/optical/OpNovice/optPhoton.out @@ -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 @@ -392,7 +392,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 ======== @@ -1119,6 +1119,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 @@ -1135,6 +1136,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 @@ -1313,7 +1315,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.000000s Real=0.000787s Sys=0.000000s + User=0.000000s Real=0.000872s Sys=0.000000s ======================== run summary ====================== Primary particle was: opticalphoton with energy 3 eV . @@ -1353,7 +1355,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.070000s Real=0.073401s Sys=0.000000s + User=0.090000s Real=0.085259s Sys=0.000000s ======================== run summary ====================== Primary particle was: opticalphoton with energy 3 eV . diff --git a/examples/extended/optical/OpNovice2/OpNovice2.out b/examples/extended/optical/OpNovice2/OpNovice2.out index 0284edb2b6..51dbd58d1c 100644 --- a/examples/extended/optical/OpNovice2/OpNovice2.out +++ b/examples/extended/optical/OpNovice2/OpNovice2.out @@ -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", @@ -267,7 +268,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 ======== @@ -962,6 +963,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 @@ -978,6 +980,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 @@ -1018,7 +1021,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.660000s Real=0.661123s Sys=0.000000s + User=0.660000s Real=0.663523s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/boundary.out b/examples/extended/optical/OpNovice2/boundary.out index e6b0a5b333..7116ec871d 100644 --- a/examples/extended/optical/OpNovice2/boundary.out +++ b/examples/extended/optical/OpNovice2/boundary.out @@ -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", @@ -346,7 +347,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 ======== @@ -1041,6 +1042,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 @@ -1057,6 +1059,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 @@ -1097,7 +1100,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.038351s Sys=0.000000s + User=0.050000s Real=0.044897s Sys=0.000000s Run Summary --------------------------------- @@ -1183,7 +1186,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.028735s Sys=0.000000s + User=0.030000s Real=0.033997s Sys=0.000000s Run Summary --------------------------------- @@ -1287,7 +1290,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.029790s Sys=0.000000s + User=0.040000s Real=0.031955s Sys=0.000000s Run Summary --------------------------------- @@ -1397,7 +1400,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.034966s Sys=0.000000s + User=0.030000s Real=0.035590s Sys=0.000000s Run Summary --------------------------------- @@ -1474,7 +1477,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.034734s Sys=0.000000s + User=0.040000s Real=0.049820s Sys=0.000000s Run Summary --------------------------------- @@ -1551,7 +1554,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.070000s Real=0.069383s Sys=0.000000s + User=0.070000s Real=0.076669s Sys=0.000000s Run Summary --------------------------------- @@ -1631,7 +1634,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.070000s Real=0.066894s Sys=0.000000s + User=0.070000s Real=0.071105s Sys=0.000000s Run Summary --------------------------------- @@ -1716,7 +1719,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.032118s Sys=0.000000s + User=0.040000s Real=0.034122s Sys=0.000000s Run Summary --------------------------------- @@ -1793,7 +1796,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.036219s Sys=0.000000s + User=0.030000s Real=0.036412s Sys=0.000000s Run Summary --------------------------------- @@ -1884,7 +1887,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.044522s Sys=0.000000s + User=0.060000s Real=0.058576s Sys=0.000000s Run Summary --------------------------------- @@ -1988,7 +1991,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.050000s Real=0.047883s Sys=0.000000s + User=0.060000s Real=0.068461s Sys=0.000000s Run Summary --------------------------------- @@ -2100,7 +2103,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.031619s Sys=0.000000s + User=0.030000s Real=0.034716s Sys=0.000000s Run Summary --------------------------------- @@ -2186,7 +2189,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.031960s Sys=0.000000s + User=0.050000s Real=0.046652s Sys=0.000000s Run Summary --------------------------------- @@ -2263,7 +2266,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.050000s Real=0.054514s Sys=0.000000s + User=0.060000s Real=0.060331s Sys=0.000000s Run Summary --------------------------------- @@ -2341,7 +2344,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.032290s Sys=0.000000s + User=0.040000s Real=0.034806s Sys=0.000000s Run Summary --------------------------------- @@ -2432,7 +2435,7 @@ Boundary scattering may be incorrect. Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.044639s Sys=0.000000s + User=0.070000s Real=0.075887s Sys=0.000000s Run Summary --------------------------------- @@ -2518,7 +2521,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.033388s Sys=0.000000s + User=0.040000s Real=0.034701s Sys=0.000000s Run Summary --------------------------------- @@ -2598,7 +2601,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.032255s Sys=0.000000s + User=0.040000s Real=0.035612s Sys=0.000000s Run Summary --------------------------------- @@ -2690,7 +2693,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.040000s Real=0.035552s Sys=0.000000s + User=0.050000s Real=0.051375s Sys=0.000000s Run Summary --------------------------------- @@ -2770,7 +2773,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.010000s Real=0.019065s Sys=0.000000s + User=0.020000s Real=0.021005s Sys=0.000000s Run Summary --------------------------------- @@ -2855,7 +2858,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.010000s Real=0.009509s Sys=0.000000s + User=0.010000s Real=0.010821s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/coated.out b/examples/extended/optical/OpNovice2/coated.out index fdf50a2906..32e464bbe8 100644 --- a/examples/extended/optical/OpNovice2/coated.out +++ b/examples/extended/optical/OpNovice2/coated.out @@ -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", @@ -239,7 +240,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 ======== @@ -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 @@ -995,7 +998,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=1.370000s Real=1.380330s Sys=0.000000s + User=1.460000s Real=1.452588s Sys=0.000000s Run Summary --------------------------------- @@ -1071,7 +1074,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=1.390000s Real=1.395229s Sys=0.000000s + User=1.440000s Real=1.448092s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/complexRindex.out b/examples/extended/optical/OpNovice2/complexRindex.out index 5703d51a76..2b60c42aa2 100644 --- a/examples/extended/optical/OpNovice2/complexRindex.out +++ b/examples/extended/optical/OpNovice2/complexRindex.out @@ -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", @@ -247,7 +248,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 ======== @@ -942,6 +943,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 @@ -958,6 +960,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 diff --git a/examples/extended/optical/OpNovice2/electron.out b/examples/extended/optical/OpNovice2/electron.out index fb2686e79a..89be5afe31 100644 --- a/examples/extended/optical/OpNovice2/electron.out +++ b/examples/extended/optical/OpNovice2/electron.out @@ -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", @@ -822,7 +823,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 ======== @@ -1517,6 +1518,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 @@ -1533,6 +1535,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 @@ -1574,7 +1577,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.190000s Real=1.212573s Sys=0.000000s + User=1.260000s Real=1.265634s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/fresnel.out b/examples/extended/optical/OpNovice2/fresnel.out index 7f69bbed94..620680b309 100644 --- a/examples/extended/optical/OpNovice2/fresnel.out +++ b/examples/extended/optical/OpNovice2/fresnel.out @@ -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", @@ -222,7 +223,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 ======== @@ -917,6 +918,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 @@ -933,6 +935,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 @@ -978,7 +981,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=1.630000s Real=1.636282s Sys=0.000000s + User=1.710000s Real=1.709479s Sys=0.000000s Run Summary --------------------------------- @@ -1055,7 +1058,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=1.580000s Real=1.580925s Sys=0.000000s + User=1.710000s Real=1.708244s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/scint_by_particle.out b/examples/extended/optical/OpNovice2/scint_by_particle.out index 7262af445d..e6e63da5b2 100644 --- a/examples/extended/optical/OpNovice2/scint_by_particle.out +++ b/examples/extended/optical/OpNovice2/scint_by_particle.out @@ -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", @@ -1860,7 +1861,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 ======== @@ -2563,6 +2564,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 @@ -2579,6 +2581,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 @@ -2619,7 +2622,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=4.350000s Real=4.363002s Sys=0.010000s + User=4.820000s Real=4.839231s Sys=0.010000s Run Summary --------------------------------- @@ -2688,7 +2691,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.060000s Real=0.067397s Sys=0.000000s + User=0.070000s Real=0.067138s Sys=0.000000s Run Summary --------------------------------- @@ -2757,7 +2760,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.630000s Real=0.631578s Sys=0.000000s + User=0.740000s Real=0.744246s Sys=0.000000s Run Summary --------------------------------- @@ -2826,7 +2829,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.090000s Real=0.082111s Sys=0.000000s + User=0.090000s Real=0.083754s Sys=0.000000s Run Summary --------------------------------- @@ -2896,7 +2899,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.060000s Real=0.061949s Sys=0.000000s + User=0.080000s Real=0.077690s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/wls.out b/examples/extended/optical/OpNovice2/wls.out index b33f78cde6..2761b9667b 100644 --- a/examples/extended/optical/OpNovice2/wls.out +++ b/examples/extended/optical/OpNovice2/wls.out @@ -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", @@ -518,7 +519,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 ======== @@ -1213,6 +1214,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 @@ -1229,6 +1231,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 @@ -1279,7 +1282,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.280000s Real=0.275723s Sys=0.010000s + User=0.310000s Real=0.308644s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/wls/electron.out b/examples/extended/optical/wls/electron.out index 03063b7011..9bfafcf743 100644 --- a/examples/extended/optical/wls/electron.out +++ b/examples/extended/optical/wls/electron.out @@ -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", @@ -230,7 +231,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 ======== @@ -925,6 +926,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 @@ -941,6 +943,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 @@ -1293,7 +1296,7 @@ Arrival time: 28.6004 ns Arrival position: (272.367 um , -35.8856 um ) Exit posi Run terminated. Run Summary Number of events processed : 10 - User=12.950000s Real=12.950826s Sys=0.000000s + User=13.710000s Real=13.719618s Sys=0.000000s ----> print histograms statistics for the entire run diff --git a/examples/extended/parallel/.README.txt b/examples/extended/parallel/.README.txt index 84a352dcc5..459c3a72d8 100644 --- a/examples/extended/parallel/.README.txt +++ b/examples/extended/parallel/.README.txt @@ -15,9 +15,4 @@ different techniques for achieving event parallelism with Geant4. and so on.

-- \link Examples_tbb Examples TBB \endlink demonstrate how to - interface a simple application with the Intel Threading Building Blocks - library (TBB), and organise MT event-level parallelism as TBB tasks. -

- */ diff --git a/examples/extended/parallel/CMakeLists.txt b/examples/extended/parallel/CMakeLists.txt index effcaebbed..827ef01e1b 100644 --- a/examples/extended/parallel/CMakeLists.txt +++ b/examples/extended/parallel/CMakeLists.txt @@ -14,10 +14,4 @@ else() message(STATUS "G4 Examples: MPI not installed --> MPI examples disabled") endif() -find_package(TBB QUIET) -if(TBB_FOUND) - add_subdirectory(TBB) -else() - message(STATUS "G4 Examples: TBB not installed --> TBB example disabled") -endif() diff --git a/examples/extended/parallel/History b/examples/extended/parallel/History index 9e84af1c65..d2617e293c 100644 --- a/examples/extended/parallel/History +++ b/examples/extended/parallel/History @@ -5,6 +5,11 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2025-03-30 Ben Morgan (exparallel-V11-03-00) +- Retire obsolete and untested TBB example. + - Functionality fully provided by tasking run manager with TBB support with no + user code changes required. + ## 2024-05-30 Ben Morgan (exparallel-V11-02-00) - Remove obsolete and untested TopC example diff --git a/examples/extended/parallel/MPI/CMakeLists.txt b/examples/extended/parallel/MPI/CMakeLists.txt index f2203ca619..ae1bb9b958 100644 --- a/examples/extended/parallel/MPI/CMakeLists.txt +++ b/examples/extended/parallel/MPI/CMakeLists.txt @@ -1,22 +1,19 @@ # - CmakeLists.txt for MPI examples -# This file should be used when configuring Geant4 with GEANT4_BUILD_EXAMPLES=ON -# Do not use in other cases -# To compile G4mpi as a standalone package, first compile the source subdir -# and then examples, see included README files +cmake_minimum_required(VERSION 3.16...3.27) project(G4mpi) -cmake_minimum_required(VERSION 3.16...3.27) +# - Require both MPI and Geant4. +# Only MPI component required is CXX (ability to use C++ with C API). +find_package(MPI REQUIRED CXX) +find_package(Geant4 REQUIRED ui_all vis_all) +# - The G4mpi library used by all the examples add_subdirectory(source) -set(G4mpi_DIR "${PROJECT_BINARY_DIR}/source") -add_subdirectory(examples) -add_dependencies(exMPI01 G4mpi) -if(TARGET exMPI02) #If ROOT not found, this does not exists - add_dependencies(exMPI02 G4mpi) -endif() -add_dependencies(exMPI03 G4mpi) - - -add_custom_target(MPI DEPENDS G4mpi exMPI01 exMPI02 exMPI03) + +# - The example applications themselves +add_subdirectory(exMPI01) +add_subdirectory(exMPI02) +add_subdirectory(exMPI03) +add_subdirectory(exMPI04) diff --git a/examples/extended/parallel/MPI/History b/examples/extended/parallel/MPI/History index 2f29bfb87f..d2df5e1604 100644 --- a/examples/extended/parallel/MPI/History +++ b/examples/extended/parallel/MPI/History @@ -4,6 +4,14 @@ 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-03-28 Ben Morgan (MPI-V11-03-01) +- Modernize and simplify library and example build scripts to build G4mpi library + and examples of its use in one project. + +## 2025-02-18 Chris Brady, Filippo Falezza, Ben Morgan (MPI-V11-03-00) +- Move MPI from deprecated C++ interface to C interface (MPI 3+) + - Changes from privately supplied patch, and through [GitHub PR #81](https://github.com/Geant4/geant4/pull/81/) + ## 2023-03-11 Ben Morgan (MPI-V11-02-00) - Move CTests definitions to tests/ctests_examples diff --git a/examples/extended/parallel/MPI/README.md b/examples/extended/parallel/MPI/README.md index 4593ed17ec..39d1231f31 100644 --- a/examples/extended/parallel/MPI/README.md +++ b/examples/extended/parallel/MPI/README.md @@ -27,9 +27,9 @@ http://www.open-mpi.org/ MPI support: ------------ G4mpi has been tested with the following MPI flavors: - * OpenMPI 1.8.1 - * MPICH 3.2 - * Intel MPI 5.0.1 + * OpenMPI 5.0.2 and 4.1.4 + * ~~MPICH 3.2~~ + * ~~Intel MPI 5.0.1~~ ### CMake diff --git a/examples/extended/parallel/MPI/examples/exMPI01/.README.txt b/examples/extended/parallel/MPI/exMPI01/.README.txt similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/.README.txt rename to examples/extended/parallel/MPI/exMPI01/.README.txt diff --git a/examples/extended/parallel/MPI/exMPI01/CMakeLists.txt b/examples/extended/parallel/MPI/exMPI01/CMakeLists.txt new file mode 100644 index 0000000000..86a8ee1e08 --- /dev/null +++ b/examples/extended/parallel/MPI/exMPI01/CMakeLists.txt @@ -0,0 +1,34 @@ +#---------------------------------------------------------------------------- +# Create a new project level to avoid name clashes with other exMPI0N +project(exMPI01) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, use our local headers, and link it to the Geant4 libraries +# +add_executable(exMPI01 exMPI01.cc ${sources} ${headers}) +target_include_directories(exMPI01 PRIVATE include) +target_link_libraries(exMPI01 PRIVATE ${Geant4_LIBRARIES} G4mpi::G4mpi) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build exMPI01. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(exMPI01_SCRIPTS + run.mac + vis.mac + ) + +foreach(_script ${exMPI01_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() diff --git a/examples/extended/parallel/MPI/examples/exMPI01/README.md b/examples/extended/parallel/MPI/exMPI01/README.md similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/README.md rename to examples/extended/parallel/MPI/exMPI01/README.md diff --git a/examples/extended/parallel/MPI/examples/exMPI01/exMPI01.cc b/examples/extended/parallel/MPI/exMPI01/exMPI01.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/exMPI01.cc rename to examples/extended/parallel/MPI/exMPI01/exMPI01.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI01/include/ActionInitialization.hh b/examples/extended/parallel/MPI/exMPI01/include/ActionInitialization.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/include/ActionInitialization.hh rename to examples/extended/parallel/MPI/exMPI01/include/ActionInitialization.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI01/include/DetectorConstruction.hh b/examples/extended/parallel/MPI/exMPI01/include/DetectorConstruction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/include/DetectorConstruction.hh rename to examples/extended/parallel/MPI/exMPI01/include/DetectorConstruction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI01/include/Materials.hh b/examples/extended/parallel/MPI/exMPI01/include/Materials.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/include/Materials.hh rename to examples/extended/parallel/MPI/exMPI01/include/Materials.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI01/include/PrimaryGeneratorAction.hh b/examples/extended/parallel/MPI/exMPI01/include/PrimaryGeneratorAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/include/PrimaryGeneratorAction.hh rename to examples/extended/parallel/MPI/exMPI01/include/PrimaryGeneratorAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI01/run.mac b/examples/extended/parallel/MPI/exMPI01/run.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/run.mac rename to examples/extended/parallel/MPI/exMPI01/run.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI01/src/ActionInitialization.cc b/examples/extended/parallel/MPI/exMPI01/src/ActionInitialization.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/src/ActionInitialization.cc rename to examples/extended/parallel/MPI/exMPI01/src/ActionInitialization.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI01/src/DetectorConstruction.cc b/examples/extended/parallel/MPI/exMPI01/src/DetectorConstruction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/src/DetectorConstruction.cc rename to examples/extended/parallel/MPI/exMPI01/src/DetectorConstruction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI01/src/Materials.cc b/examples/extended/parallel/MPI/exMPI01/src/Materials.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/src/Materials.cc rename to examples/extended/parallel/MPI/exMPI01/src/Materials.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI01/src/PrimaryGeneratorAction.cc b/examples/extended/parallel/MPI/exMPI01/src/PrimaryGeneratorAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/src/PrimaryGeneratorAction.cc rename to examples/extended/parallel/MPI/exMPI01/src/PrimaryGeneratorAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI01/vis.mac b/examples/extended/parallel/MPI/exMPI01/vis.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI01/vis.mac rename to examples/extended/parallel/MPI/exMPI01/vis.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI02/.README.txt b/examples/extended/parallel/MPI/exMPI02/.README.txt similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/.README.txt rename to examples/extended/parallel/MPI/exMPI02/.README.txt diff --git a/examples/extended/parallel/MPI/exMPI02/CMakeLists.txt b/examples/extended/parallel/MPI/exMPI02/CMakeLists.txt new file mode 100644 index 0000000000..117367ce9a --- /dev/null +++ b/examples/extended/parallel/MPI/exMPI02/CMakeLists.txt @@ -0,0 +1,42 @@ +#---------------------------------------------------------------------------- +# Create a new project level to avoid name clashes with other exMPI0N +project(exMPI02) + +# Find ROOT and return if we don't have it to prvent building this project +find_package(ROOT QUIET COMPONENTS Hist RIO) +if(NOT ROOT_FOUND) + message(STATUS "ROOT not found, disabling exMPI02 build") + return() +endif() + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(exMPI02 exMPI02.cc ${sources} ${headers}) +target_include_directories(exMPI02 PRIVATE include) +target_link_libraries(exMPI02 PRIVATE ${Geant4_LIBRARIES} G4mpi::G4mpi ROOT::Hist ROOT::RIO) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build exMPI02. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(exMPI02_SCRIPTS + run.mac + vis.mac + ) + +foreach(_script ${exMPI02_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + diff --git a/examples/extended/parallel/MPI/examples/exMPI02/README.md b/examples/extended/parallel/MPI/exMPI02/README.md similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/README.md rename to examples/extended/parallel/MPI/exMPI02/README.md diff --git a/examples/extended/parallel/MPI/examples/exMPI02/exMPI02.cc b/examples/extended/parallel/MPI/exMPI02/exMPI02.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/exMPI02.cc rename to examples/extended/parallel/MPI/exMPI02/exMPI02.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/ActionInitialization.hh b/examples/extended/parallel/MPI/exMPI02/include/ActionInitialization.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/ActionInitialization.hh rename to examples/extended/parallel/MPI/exMPI02/include/ActionInitialization.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/Analysis.hh b/examples/extended/parallel/MPI/exMPI02/include/Analysis.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/Analysis.hh rename to examples/extended/parallel/MPI/exMPI02/include/Analysis.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/DetectorConstruction.hh b/examples/extended/parallel/MPI/exMPI02/include/DetectorConstruction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/DetectorConstruction.hh rename to examples/extended/parallel/MPI/exMPI02/include/DetectorConstruction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/EventAction.hh b/examples/extended/parallel/MPI/exMPI02/include/EventAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/EventAction.hh rename to examples/extended/parallel/MPI/exMPI02/include/EventAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/MedicalBeam.hh b/examples/extended/parallel/MPI/exMPI02/include/MedicalBeam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/MedicalBeam.hh rename to examples/extended/parallel/MPI/exMPI02/include/MedicalBeam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/RunAction.hh b/examples/extended/parallel/MPI/exMPI02/include/RunAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/RunAction.hh rename to examples/extended/parallel/MPI/exMPI02/include/RunAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/VoxelParam.hh b/examples/extended/parallel/MPI/exMPI02/include/VoxelParam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/VoxelParam.hh rename to examples/extended/parallel/MPI/exMPI02/include/VoxelParam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/include/VoxelSD.hh b/examples/extended/parallel/MPI/exMPI02/include/VoxelSD.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/include/VoxelSD.hh rename to examples/extended/parallel/MPI/exMPI02/include/VoxelSD.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI02/run.mac b/examples/extended/parallel/MPI/exMPI02/run.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/run.mac rename to examples/extended/parallel/MPI/exMPI02/run.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/ActionInitialization.cc b/examples/extended/parallel/MPI/exMPI02/src/ActionInitialization.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/ActionInitialization.cc rename to examples/extended/parallel/MPI/exMPI02/src/ActionInitialization.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/Analysis.cc b/examples/extended/parallel/MPI/exMPI02/src/Analysis.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/Analysis.cc rename to examples/extended/parallel/MPI/exMPI02/src/Analysis.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/DetectorConstruction.cc b/examples/extended/parallel/MPI/exMPI02/src/DetectorConstruction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/DetectorConstruction.cc rename to examples/extended/parallel/MPI/exMPI02/src/DetectorConstruction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/EventAction.cc b/examples/extended/parallel/MPI/exMPI02/src/EventAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/EventAction.cc rename to examples/extended/parallel/MPI/exMPI02/src/EventAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/MedicalBeam.cc b/examples/extended/parallel/MPI/exMPI02/src/MedicalBeam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/MedicalBeam.cc rename to examples/extended/parallel/MPI/exMPI02/src/MedicalBeam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/RunAction.cc b/examples/extended/parallel/MPI/exMPI02/src/RunAction.cc similarity index 98% rename from examples/extended/parallel/MPI/examples/exMPI02/src/RunAction.cc rename to examples/extended/parallel/MPI/exMPI02/src/RunAction.cc index d6cada4cf2..d7cb86a33e 100644 --- a/examples/extended/parallel/MPI/examples/exMPI02/src/RunAction.cc +++ b/examples/extended/parallel/MPI/exMPI02/src/RunAction.cc @@ -55,7 +55,7 @@ void RunAction::EndOfRunAction(const G4Run*) G4int rank = G4MPImanager::GetManager()->GetRank(); char str[64]; - sprintf(str, "dose-rank%03d.root", rank); + snprintf(str, 64, "dose-rank%03d.root", rank); G4String fname(str); Analysis* myana = Analysis::GetAnalysis(); diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/VoxelParam.cc b/examples/extended/parallel/MPI/exMPI02/src/VoxelParam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/VoxelParam.cc rename to examples/extended/parallel/MPI/exMPI02/src/VoxelParam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/src/VoxelSD.cc b/examples/extended/parallel/MPI/exMPI02/src/VoxelSD.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/src/VoxelSD.cc rename to examples/extended/parallel/MPI/exMPI02/src/VoxelSD.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI02/vis.mac b/examples/extended/parallel/MPI/exMPI02/vis.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI02/vis.mac rename to examples/extended/parallel/MPI/exMPI02/vis.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI03/.README.txt b/examples/extended/parallel/MPI/exMPI03/.README.txt similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/.README.txt rename to examples/extended/parallel/MPI/exMPI03/.README.txt diff --git a/examples/extended/parallel/MPI/exMPI03/CMakeLists.txt b/examples/extended/parallel/MPI/exMPI03/CMakeLists.txt new file mode 100644 index 0000000000..eff22fb8d9 --- /dev/null +++ b/examples/extended/parallel/MPI/exMPI03/CMakeLists.txt @@ -0,0 +1,35 @@ +#---------------------------------------------------------------------------- +# Create a new project level to avoid name clashes with other exMPI0N +project(exMPI03) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(exMPI03 exMPI03.cc ${sources} ${headers}) +target_include_directories(exMPI03 PRIVATE include) +target_link_libraries(exMPI03 ${Geant4_LIBRARIES} G4mpi::G4mpi) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build exMPI03. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(exMPI03_SCRIPTS + run.mac + vis.mac + ) + +foreach(_script ${exMPI03_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + diff --git a/examples/extended/parallel/MPI/examples/exMPI03/README.md b/examples/extended/parallel/MPI/exMPI03/README.md similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/README.md rename to examples/extended/parallel/MPI/exMPI03/README.md diff --git a/examples/extended/parallel/MPI/examples/exMPI03/exMPI03.cc b/examples/extended/parallel/MPI/exMPI03/exMPI03.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/exMPI03.cc rename to examples/extended/parallel/MPI/exMPI03/exMPI03.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/ActionInitialization.hh b/examples/extended/parallel/MPI/exMPI03/include/ActionInitialization.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/ActionInitialization.hh rename to examples/extended/parallel/MPI/exMPI03/include/ActionInitialization.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/Analysis.hh b/examples/extended/parallel/MPI/exMPI03/include/Analysis.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/Analysis.hh rename to examples/extended/parallel/MPI/exMPI03/include/Analysis.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/DetectorConstruction.hh b/examples/extended/parallel/MPI/exMPI03/include/DetectorConstruction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/DetectorConstruction.hh rename to examples/extended/parallel/MPI/exMPI03/include/DetectorConstruction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/EventAction.hh b/examples/extended/parallel/MPI/exMPI03/include/EventAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/EventAction.hh rename to examples/extended/parallel/MPI/exMPI03/include/EventAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/MedicalBeam.hh b/examples/extended/parallel/MPI/exMPI03/include/MedicalBeam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/MedicalBeam.hh rename to examples/extended/parallel/MPI/exMPI03/include/MedicalBeam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/Run.hh b/examples/extended/parallel/MPI/exMPI03/include/Run.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/Run.hh rename to examples/extended/parallel/MPI/exMPI03/include/Run.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/RunAction.hh b/examples/extended/parallel/MPI/exMPI03/include/RunAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/RunAction.hh rename to examples/extended/parallel/MPI/exMPI03/include/RunAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/RunActionMaster.hh b/examples/extended/parallel/MPI/exMPI03/include/RunActionMaster.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/RunActionMaster.hh rename to examples/extended/parallel/MPI/exMPI03/include/RunActionMaster.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/RunMerger.hh b/examples/extended/parallel/MPI/exMPI03/include/RunMerger.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/RunMerger.hh rename to examples/extended/parallel/MPI/exMPI03/include/RunMerger.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/VoxelParam.hh b/examples/extended/parallel/MPI/exMPI03/include/VoxelParam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/VoxelParam.hh rename to examples/extended/parallel/MPI/exMPI03/include/VoxelParam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/include/VoxelSD.hh b/examples/extended/parallel/MPI/exMPI03/include/VoxelSD.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/include/VoxelSD.hh rename to examples/extended/parallel/MPI/exMPI03/include/VoxelSD.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI03/run.mac b/examples/extended/parallel/MPI/exMPI03/run.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/run.mac rename to examples/extended/parallel/MPI/exMPI03/run.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/ActionInitialization.cc b/examples/extended/parallel/MPI/exMPI03/src/ActionInitialization.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/ActionInitialization.cc rename to examples/extended/parallel/MPI/exMPI03/src/ActionInitialization.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/Analysis.cc b/examples/extended/parallel/MPI/exMPI03/src/Analysis.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/Analysis.cc rename to examples/extended/parallel/MPI/exMPI03/src/Analysis.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/DetectorConstruction.cc b/examples/extended/parallel/MPI/exMPI03/src/DetectorConstruction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/DetectorConstruction.cc rename to examples/extended/parallel/MPI/exMPI03/src/DetectorConstruction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/EventAction.cc b/examples/extended/parallel/MPI/exMPI03/src/EventAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/EventAction.cc rename to examples/extended/parallel/MPI/exMPI03/src/EventAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/MedicalBeam.cc b/examples/extended/parallel/MPI/exMPI03/src/MedicalBeam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/MedicalBeam.cc rename to examples/extended/parallel/MPI/exMPI03/src/MedicalBeam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/Run.cc b/examples/extended/parallel/MPI/exMPI03/src/Run.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/Run.cc rename to examples/extended/parallel/MPI/exMPI03/src/Run.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/RunAction.cc b/examples/extended/parallel/MPI/exMPI03/src/RunAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/RunAction.cc rename to examples/extended/parallel/MPI/exMPI03/src/RunAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/RunActionMaster.cc b/examples/extended/parallel/MPI/exMPI03/src/RunActionMaster.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/RunActionMaster.cc rename to examples/extended/parallel/MPI/exMPI03/src/RunActionMaster.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/RunMerger.cc b/examples/extended/parallel/MPI/exMPI03/src/RunMerger.cc similarity index 94% rename from examples/extended/parallel/MPI/examples/exMPI04/src/RunMerger.cc rename to examples/extended/parallel/MPI/exMPI03/src/RunMerger.cc index 45c2bad876..88ae4ed812 100644 --- a/examples/extended/parallel/MPI/examples/exMPI04/src/RunMerger.cc +++ b/examples/extended/parallel/MPI/exMPI03/src/RunMerger.cc @@ -32,7 +32,7 @@ void RunMerger::Pack() { // Very imporant, here fMyRun is const! // Register a user-data in the user Run class with MPI merger - InputUserData(const_cast(&(fMyRun->fDummyCounter)), MPI::INT, 1); + InputUserData(const_cast(&(fMyRun->fDummyCounter)), MPI_INT, 1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -40,6 +40,6 @@ G4Run* RunMerger::UnPack() { // Create a dummy user-Run, used to contain data received via MPI Run* aDummyRun = new Run; - OutputUserData(&(aDummyRun->fDummyCounter), MPI::INT, 1); + OutputUserData(&(aDummyRun->fDummyCounter), MPI_INT, 1); return aDummyRun; } diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/VoxelParam.cc b/examples/extended/parallel/MPI/exMPI03/src/VoxelParam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/VoxelParam.cc rename to examples/extended/parallel/MPI/exMPI03/src/VoxelParam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/VoxelSD.cc b/examples/extended/parallel/MPI/exMPI03/src/VoxelSD.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/src/VoxelSD.cc rename to examples/extended/parallel/MPI/exMPI03/src/VoxelSD.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/vis.mac b/examples/extended/parallel/MPI/exMPI03/vis.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI03/vis.mac rename to examples/extended/parallel/MPI/exMPI03/vis.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI04/.README.txt b/examples/extended/parallel/MPI/exMPI04/.README.txt similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/.README.txt rename to examples/extended/parallel/MPI/exMPI04/.README.txt diff --git a/examples/extended/parallel/MPI/exMPI04/CMakeLists.txt b/examples/extended/parallel/MPI/exMPI04/CMakeLists.txt new file mode 100644 index 0000000000..ebc3cd1670 --- /dev/null +++ b/examples/extended/parallel/MPI/exMPI04/CMakeLists.txt @@ -0,0 +1,35 @@ +#---------------------------------------------------------------------------- +# Create a new project level to avoid name clashes with other exMPI0N +project(exMPI04) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(exMPI04 exMPI04.cc ${sources} ${headers}) +target_include_directories(exMPI04 PRIVATE include) +target_link_libraries(exMPI04 PRIVATE ${Geant4_LIBRARIES} G4mpi::G4mpi) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build exMPI04. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(exMPI04_SCRIPTS + run.mac + vis.mac + ) + +foreach(_script ${exMPI04_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + diff --git a/examples/extended/parallel/MPI/examples/exMPI04/README.md b/examples/extended/parallel/MPI/exMPI04/README.md similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/README.md rename to examples/extended/parallel/MPI/exMPI04/README.md diff --git a/examples/extended/parallel/MPI/examples/exMPI04/exMPI04.cc b/examples/extended/parallel/MPI/exMPI04/exMPI04.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/exMPI04.cc rename to examples/extended/parallel/MPI/exMPI04/exMPI04.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/ActionInitialization.hh b/examples/extended/parallel/MPI/exMPI04/include/ActionInitialization.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/ActionInitialization.hh rename to examples/extended/parallel/MPI/exMPI04/include/ActionInitialization.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/Analysis.hh b/examples/extended/parallel/MPI/exMPI04/include/Analysis.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/Analysis.hh rename to examples/extended/parallel/MPI/exMPI04/include/Analysis.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/DetectorConstruction.hh b/examples/extended/parallel/MPI/exMPI04/include/DetectorConstruction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/DetectorConstruction.hh rename to examples/extended/parallel/MPI/exMPI04/include/DetectorConstruction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/EventAction.hh b/examples/extended/parallel/MPI/exMPI04/include/EventAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/EventAction.hh rename to examples/extended/parallel/MPI/exMPI04/include/EventAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/MedicalBeam.hh b/examples/extended/parallel/MPI/exMPI04/include/MedicalBeam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/MedicalBeam.hh rename to examples/extended/parallel/MPI/exMPI04/include/MedicalBeam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/Run.hh b/examples/extended/parallel/MPI/exMPI04/include/Run.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/Run.hh rename to examples/extended/parallel/MPI/exMPI04/include/Run.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/RunAction.hh b/examples/extended/parallel/MPI/exMPI04/include/RunAction.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/RunAction.hh rename to examples/extended/parallel/MPI/exMPI04/include/RunAction.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/RunActionMaster.hh b/examples/extended/parallel/MPI/exMPI04/include/RunActionMaster.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/RunActionMaster.hh rename to examples/extended/parallel/MPI/exMPI04/include/RunActionMaster.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/RunMerger.hh b/examples/extended/parallel/MPI/exMPI04/include/RunMerger.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/RunMerger.hh rename to examples/extended/parallel/MPI/exMPI04/include/RunMerger.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/VoxelParam.hh b/examples/extended/parallel/MPI/exMPI04/include/VoxelParam.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/VoxelParam.hh rename to examples/extended/parallel/MPI/exMPI04/include/VoxelParam.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/include/VoxelSD.hh b/examples/extended/parallel/MPI/exMPI04/include/VoxelSD.hh similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/include/VoxelSD.hh rename to examples/extended/parallel/MPI/exMPI04/include/VoxelSD.hh diff --git a/examples/extended/parallel/MPI/examples/exMPI04/run.mac b/examples/extended/parallel/MPI/exMPI04/run.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/run.mac rename to examples/extended/parallel/MPI/exMPI04/run.mac diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/ActionInitialization.cc b/examples/extended/parallel/MPI/exMPI04/src/ActionInitialization.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/ActionInitialization.cc rename to examples/extended/parallel/MPI/exMPI04/src/ActionInitialization.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/Analysis.cc b/examples/extended/parallel/MPI/exMPI04/src/Analysis.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/Analysis.cc rename to examples/extended/parallel/MPI/exMPI04/src/Analysis.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/DetectorConstruction.cc b/examples/extended/parallel/MPI/exMPI04/src/DetectorConstruction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/DetectorConstruction.cc rename to examples/extended/parallel/MPI/exMPI04/src/DetectorConstruction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/EventAction.cc b/examples/extended/parallel/MPI/exMPI04/src/EventAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/EventAction.cc rename to examples/extended/parallel/MPI/exMPI04/src/EventAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/MedicalBeam.cc b/examples/extended/parallel/MPI/exMPI04/src/MedicalBeam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/MedicalBeam.cc rename to examples/extended/parallel/MPI/exMPI04/src/MedicalBeam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/Run.cc b/examples/extended/parallel/MPI/exMPI04/src/Run.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/Run.cc rename to examples/extended/parallel/MPI/exMPI04/src/Run.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/RunAction.cc b/examples/extended/parallel/MPI/exMPI04/src/RunAction.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/RunAction.cc rename to examples/extended/parallel/MPI/exMPI04/src/RunAction.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/RunActionMaster.cc b/examples/extended/parallel/MPI/exMPI04/src/RunActionMaster.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/RunActionMaster.cc rename to examples/extended/parallel/MPI/exMPI04/src/RunActionMaster.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI03/src/RunMerger.cc b/examples/extended/parallel/MPI/exMPI04/src/RunMerger.cc similarity index 94% rename from examples/extended/parallel/MPI/examples/exMPI03/src/RunMerger.cc rename to examples/extended/parallel/MPI/exMPI04/src/RunMerger.cc index 45c2bad876..88ae4ed812 100644 --- a/examples/extended/parallel/MPI/examples/exMPI03/src/RunMerger.cc +++ b/examples/extended/parallel/MPI/exMPI04/src/RunMerger.cc @@ -32,7 +32,7 @@ void RunMerger::Pack() { // Very imporant, here fMyRun is const! // Register a user-data in the user Run class with MPI merger - InputUserData(const_cast(&(fMyRun->fDummyCounter)), MPI::INT, 1); + InputUserData(const_cast(&(fMyRun->fDummyCounter)), MPI_INT, 1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -40,6 +40,6 @@ G4Run* RunMerger::UnPack() { // Create a dummy user-Run, used to contain data received via MPI Run* aDummyRun = new Run; - OutputUserData(&(aDummyRun->fDummyCounter), MPI::INT, 1); + OutputUserData(&(aDummyRun->fDummyCounter), MPI_INT, 1); return aDummyRun; } diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/VoxelParam.cc b/examples/extended/parallel/MPI/exMPI04/src/VoxelParam.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/VoxelParam.cc rename to examples/extended/parallel/MPI/exMPI04/src/VoxelParam.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/src/VoxelSD.cc b/examples/extended/parallel/MPI/exMPI04/src/VoxelSD.cc similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/src/VoxelSD.cc rename to examples/extended/parallel/MPI/exMPI04/src/VoxelSD.cc diff --git a/examples/extended/parallel/MPI/examples/exMPI04/vis.mac b/examples/extended/parallel/MPI/exMPI04/vis.mac similarity index 100% rename from examples/extended/parallel/MPI/examples/exMPI04/vis.mac rename to examples/extended/parallel/MPI/exMPI04/vis.mac diff --git a/examples/extended/parallel/MPI/examples/CMakeLists.txt b/examples/extended/parallel/MPI/examples/CMakeLists.txt deleted file mode 100644 index 28b396160a..0000000000 --- a/examples/extended/parallel/MPI/examples/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -# - CmakeLists.txt for MPI examples - -cmake_minimum_required(VERSION 3.16...3.27) - -add_subdirectory(exMPI01) -add_subdirectory(exMPI02) -add_subdirectory(exMPI03) -add_subdirectory(exMPI04) diff --git a/examples/extended/parallel/MPI/examples/exMPI02/CMakeLists.txt b/examples/extended/parallel/MPI/examples/exMPI02/CMakeLists.txt deleted file mode 100644 index c274570b8b..0000000000 --- a/examples/extended/parallel/MPI/examples/exMPI02/CMakeLists.txt +++ /dev/null @@ -1,78 +0,0 @@ -# - CmakeLists.txt for building an application - -#---------------------------------------------------------------------------- -# Setup the project -cmake_minimum_required(VERSION 3.16...3.27) -project(exMPI02) - -#------------------------------------------------------------------------------ -# check MPI package... -find_package(MPI REQUIRED) - -#---------------------------------------------------------------------------- -# Find Geant4 package, activating all available UI and Vis drivers by default -# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui -# to build a batch mode only executable -option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() - -find_package(G4mpi REQUIRED) -#---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# -include(${Geant4_USE_FILE}) - -#---------------------------------------------------------------------------- -# Find ROOT (required package) -# -find_package(ROOT QUIET) -if(NOT ROOT_FOUND) - message(STATUS "G4 Examples: ROOT package not found. --> exMPI02 example disabled") - return() -endif() - -#---------------------------------------------------------------------------- -# Locate sources and headers for this project -# -file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR} - ${ROOT_INCLUDE_DIRS} - ${G4mpi_INCLUDE_DIR}) - - -#---------------------------------------------------------------------------- -# Add the executable, and link it to the Geant4 libraries -# -add_executable(exMPI02 exMPI02.cc ${sources} ${headers}) -target_link_libraries(exMPI02 ${G4mpi_LIBRARIES} ${Geant4_LIBRARIES} ${ROOT_LIBRARIES}) - -#---------------------------------------------------------------------------- -# Copy all scripts to the build directory, i.e. the directory in which we -# build exMPI02. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. -# -set(exMPI02_SCRIPTS - run.mac - vis.mac - ) - -foreach(_script ${exMPI02_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY - ) -endforeach() - -#---------------------------------------------------------------------------- -# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX -# -install(TARGETS exMPI02 RUNTIME DESTINATION bin) diff --git a/examples/extended/parallel/MPI/examples/exMPI04/CMakeLists.txt b/examples/extended/parallel/MPI/examples/exMPI04/CMakeLists.txt deleted file mode 100644 index 2017dfdc13..0000000000 --- a/examples/extended/parallel/MPI/examples/exMPI04/CMakeLists.txt +++ /dev/null @@ -1,72 +0,0 @@ -# - CmakeLists.txt for building an application - -#---------------------------------------------------------------------------- -# Setup the project -cmake_minimum_required(VERSION 3.16...3.27) -project(exMPI04) - -#------------------------------------------------------------------------------ -# check MPI package... -#find_package(MPI REQUIRED) - -#---------------------------------------------------------------------------- -# Find Geant4 package, activating all available UI and Vis drivers by default -# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui -# to build a batch mode only executable -option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) -if(WITH_GEANT4_UIVIS) - find_package(Geant4 REQUIRED ui_all vis_all) -else() - find_package(Geant4 REQUIRED) -endif() - -find_package(G4mpi REQUIRED) - -#---------------------------------------------------------------------------- -# Setup Geant4 include directories and compile definitions -# -include(${Geant4_USE_FILE}) - -#------------------------------------------------------------------------------ -add_definitions(-DTOOLS_USE_NATIVE_MPI) - -#---------------------------------------------------------------------------- -# Locate sources and headers for this project -# -file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) -file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) - - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${Geant4_INCLUDE_DIR} - ${G4mpi_INCLUDE_DIR}) - - -#---------------------------------------------------------------------------- -# Add the executable, and link it to the Geant4 libraries -# -add_executable(exMPI04 exMPI04.cc ${sources} ${headers}) -target_link_libraries(exMPI04 ${G4mpi_LIBRARIES} ${Geant4_LIBRARIES}) - -#---------------------------------------------------------------------------- -# Copy all scripts to the build directory, i.e. the directory in which we -# build exMPI04. This is so that we can run the executable directly because it -# relies on these scripts being in the current working directory. -# -set(exMPI04_SCRIPTS - run.mac - vis.mac - ) - -foreach(_script ${exMPI04_SCRIPTS}) - configure_file( - ${PROJECT_SOURCE_DIR}/${_script} - ${PROJECT_BINARY_DIR}/${_script} - COPYONLY - ) -endforeach() - -#---------------------------------------------------------------------------- -# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX -# -install(TARGETS exMPI04 DESTINATION bin) diff --git a/examples/extended/parallel/MPI/source/CMakeLists.txt b/examples/extended/parallel/MPI/source/CMakeLists.txt index fe3274214a..462503627b 100644 --- a/examples/extended/parallel/MPI/source/CMakeLists.txt +++ b/examples/extended/parallel/MPI/source/CMakeLists.txt @@ -1,118 +1,9 @@ -# - CmakeLists.txt for G4mpi interface - -#------------------------------------------------------------------------------ -set(_projname libG4mpi) -set(_targetname G4mpi) -project(${_projname}) - -#------------------------------------------------------------------------------ -#Manadatory dependencies - -cmake_minimum_required(VERSION 3.16...3.27) -find_package(MPI REQUIRED) -find_package(Geant4 10.2.0 REQUIRED) -include(${Geant4_USE_FILE}) - -#------------------------------------------------------------------------------ -message("-- G4 Examples: ${_projname} uses includes from: " - "${MPI_CXX_INCLUDE_PATH}") -message("-- G4 Examples: ${_projname} uses libraries: ${MPI_CXX_LIBRARIES}") - -#Version of this package is the same as the G4 version -set(${_targetname}_VERSION ${Geant4_VERSION}) -set(${_targetname}_VERSION_MAJOR ${Geant4_VERSION_MAJOR}) -set(${_targetname}_VERSION_MINOR ${Geant4_VERSION_MINOR}) -set(${_targetname}_VERSION_PATCH ${Geant4_VERSION_PATCH}) - -#------------------------------------------------------------------------------ -#Options for this package -option(BUILD_SHARED_LIBS "If true build shared library" ON) -option(BUILD_STATIC_LIBS "If true build static library" OFF) -option(G4MPI_OLD_MPI "If true use old signatures for MPI_[Un]Pack functions" - OFF) -mark_as_advanced(G4MPI_OLD_MPI) - -# Offer the user the choice of overriding the installation directories -set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") -set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") -set(INSTALL_INCLUDE_DIR include CACHE PATH - "Installation directory for header files") -#INSTALL_CMAKE_DIR is set later - -#------------------------------------------------------------------------------ -#Setup compilation options specific to this project -add_definitions(-DTOOLS_USE_NATIVE_MPI) -if(G4MPI_OLD_MPI) - message("-- G4 Examples: ${_projname} using old non-const signatures for" - "MPI_[Un]Pack functions") - add_definitions(-DTOOLS_USE_MPI_PACK_NOT_CONST) - add_definitions(-DG4MPI_USE_MPI_PACK_NOT_CONST) - # Prevent warning with c++11 on old MPI - add_definitions(-Wno-literal-suffix) -endif() - -#------------------------------------------------------------------------------ -#TODO: ??? What is G4 policy on this? -#if(Geant4_static_FOUND) -# set(BUILD_STATIC_LIBS ON) -# set(BUILD_SHARED_LIBS OFF) -#else() -# set(BUILD_STATIC_LIBS OFF) -# set(BUILD_SHARED_LIBS ON) -#endif() - #------------------------------------------------------------------------------ # Define library -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/analysis/include - ${Geant4_INCLUDE_DIR} - ${MPI_CXX_INCLUDE_PATH}) -link_directories(${MPI_CXX_LIBRARY_DIRS}) - -set(_sources - src/G4MPIbatch.cc - src/G4MPIextraWorker.cc - src/G4MPImanager.cc - src/G4MPImessenger.cc - src/G4MPIrandomSeedGenerator.cc - src/G4MPIsession.cc - src/G4MPIstatus.cc - src/G4UImpish.cc - src/G4VMPIseedGenerator.cc - src/G4VMPIsession.cc - src/G4MPIscorerMerger.cc - src/G4MPIhistoMerger.cc - src/G4MPIntupleMerger.cc - src/G4VUserMPIrunMerger.cc - src/G4MPIutils.cc - analysis/src/G4RootMpiAnalysisManager.cc - analysis/src/G4RootMpiNtupleFileManager.cc - analysis/src/G4RootMpiNtupleManager.cc - analysis/src/G4RootMpiPNtupleManager.cc -) - -#TODO: This works only if both BUILD_STATIC_LIBS=ON && BUILD_SHARED_LIBS=OFF -# are explicitly specified, what should be the behavior if only -# BUILD_STATIC_LIBS is specified? -# In Geant4 both are created: libXXX.so and libXXX.a with two target names -# XXX and XXX-static. I should study how to do that... -if(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) - message(FATAL "-- G4 Examples: ${_projname} neither static of shared build selected") - return() -endif() -if(BUILD_STATIC_LIBS) - add_library(${_targetname}-static STATIC ${_sources}) - set_target_properties(${_targetname}-static PROPERTIES OUTPUT_NAME ${_targetname}) - target_link_libraries(${_targetname}-static ${MPI_CXX_LIBRARIES} ${Geant4_LIBRARIES}) -endif() -if(BUILD_SHARED_LIBS) - add_library(${_targetname} SHARED ${_sources}) - target_link_libraries(${_targetname} ${MPI_CXX_LIBRARIES} ${Geant4_LIBRARIES}) -endif() - - -# headers -set(HEADERS +# We only build as a static library because we only want to use this in the +# example applications. It also avoids issues with dylib/DLL export/import +# and paths on some platforms. +add_library(G4mpi STATIC include/G4MPIbatch.hh include/G4MPIextraWorker.hh include/G4MPImanager.hh @@ -130,128 +21,48 @@ set(HEADERS include/G4MPIntupleMerger.hh include/G4VUserMPIrunMerger.hh include/G4MPIutils.hh + src/G4MPIbatch.cc + src/G4MPIextraWorker.cc + src/G4MPImanager.cc + src/G4MPImessenger.cc + src/G4MPIrandomSeedGenerator.cc + src/G4MPIsession.cc + src/G4MPIstatus.cc + src/G4UImpish.cc + src/G4VMPIseedGenerator.cc + src/G4VMPIsession.cc + src/G4MPIscorerMerger.cc + src/G4MPIhistoMerger.cc + src/G4MPIntupleMerger.cc + src/G4VUserMPIrunMerger.cc + src/G4MPIutils.cc analysis/include/G4RootMpiAnalysisManager.hh analysis/include/G4RootMpiNtupleFileManager.hh analysis/include/G4RootMpiNtupleManager.hh analysis/include/G4RootMpiPNtupleDescription.hh analysis/include/G4RootMpiPNtupleManager.hh - + analysis/src/G4RootMpiAnalysisManager.cc + analysis/src/G4RootMpiNtupleFileManager.cc + analysis/src/G4RootMpiNtupleManager.cc + analysis/src/G4RootMpiPNtupleManager.cc +) +target_include_directories(G4mpi + PUBLIC + $ + $ +) +target_link_libraries(G4mpi + PUBLIC + MPI::MPI_CXX + Geant4::G4analysis + Geant4::G4intercoms + Geant4::G4interfaces + Geant4::G4global + Geant4::G4run + Geant4::G4tools ) #------------------------------------------------------------------------------ -# Overwrite "lib" path w/ "lib64" if needed -set(_LIBDIR_DEFAULT "lib") -set(_dolib64 FALSE) -if(NOT DEFINED CMAKE_INSTALL_LIBDIR) - set(_dolib64 TRUE) -endif() -#If this is built as part of G4 CMAKE_INSTALL_LIBDIR is defined, we need to -#so force check of what we should use -include(G4DeveloperAPI OPTIONAL RESULT_VARIABLE _internal_build) -if(_internal_build) - set(_dolib64 TRUE) -endif() -if(${_dolib64}) - # Override this default 'lib' with 'lib64' iff: - # - we are on Linux system but NOT cross-compiling - # - we are NOT on debian - # - we are on a 64 bits system - # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf - # Note that the future of multi-arch handling may be even - # more complicated than that: http://wiki.debian.org/Multiarch - if(CMAKE_SYSTEM_NAME MATCHES "Linux" - AND NOT CMAKE_CROSSCOMPILING - AND NOT EXISTS "/etc/debian_version") - if(NOT DEFINED CMAKE_SIZEOF_VOID_P) - message(AUTHOR_WARNING - "Unable to determine default CMAKE_INSTALL_LIBDIR directory because " - "no target architecture is known. " - "Please enable at least one language before including GNUInstallDirs.") - else() - if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(_LIBDIR_DEFAULT "lib64") - endif() - endif() - endif() - set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})") - set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR}) -endif() - -#Set Location of .cmake files -if(WIN32 AND NOT CYGWIN) - set(DEF_INSTALL_CMAKE_DIR CMake) -else() - set(DEF_INSTALL_CMAKE_DIR - ${_LIBDIR_DEFAULT}/${_targetname}-${${_targetname}_VERSION}) -endif() -set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH - "Installation directory for CMake files") - -# Make relative paths absolute (needed later on) -foreach(p LIB BIN INCLUDE CMAKE) - set(var INSTALL_${p}_DIR) - if(NOT IS_ABSOLUTE "${${var}}") - set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") - endif() -endforeach() - -#------------------------------------------------------------------------------ -#install -if(BUILD_SHARED_LIBS) - INSTALL(TARGETS ${_targetname} - EXPORT ${_targetname}Targets - LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT shlib) -endif() -if(BUILD_STATIC_LIBS) - INSTALL(TARGETS ${_targetname}-static - EXPORT ${_targetname}Targets - ARCHIVE DESTINATION ${INSTALL_LIB_DIR} COMPONENT dev) -endif() -INSTALL(FILES ${HEADERS} DESTINATION include) - -#G4mpiTargets.cmake files -if(BUILD_SHARED_LIBS) - export(TARGETS ${_targetname} - FILE "${PROJECT_BINARY_DIR}/${_targetname}Targets.cmake") -endif() -if(BUILD_STATIC_LIBS) - export(TARGETS ${_targetname}-static - FILE "${PROJECT_BINARY_DIR}/${_targetname}Targets.cmake") -endif() -# Export the package for use from the build-tree -# (this registers the build-tree with a global CMake-registry) -export(PACKAGE ${_projname}) - -# Create the G4mpiConfig.cmake and G4mpiConfigVersion files -set(TARGET_STATIC OFF) -if(BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)#If both are activated, prefer shared - set(TARGET_STATIC ON) -endif() -file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" - "${INSTALL_INCLUDE_DIR}") -# ... for the build tree -set(TARGET_NAME ${_targetname}) -set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include") -file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" - "${INSTALL_INCLUDE_DIR}") -configure_file(G4mpiConfig.cmake.in - "${PROJECT_BINARY_DIR}/${_targetname}Config.cmake" @ONLY) -# ... for the install tree -set(CONF_INCLUDE_DIRS "\${${_targetname}_CMAKE_DIR}/${REL_INCLUDE_DIR}") -configure_file(${_targetname}Config.cmake.in - "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_targetname}Config.cmake" @ONLY) -# ... for both -set(THE_VERSION ${${_targetname}_VERSION}) -configure_file(G4mpiConfigVersion.cmake.in - "${PROJECT_BINARY_DIR}/${_targetname}ConfigVersion.cmake" @ONLY) - -# Install the G4mpiConfig.cmake -install(FILES - "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_targetname}Config.cmake" - "${PROJECT_BINARY_DIR}/${_targetname}ConfigVersion.cmake" - DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev) -# Install the export set for use with the install-tree -install(EXPORT ${_targetname}Targets DESTINATION - "${INSTALL_CMAKE_DIR}" COMPONENT dev) - - +# Create a namespaced alias target for the library for forward compatibility +# in case the library is moved or reorganised in the future +add_library(G4mpi::G4mpi ALIAS G4mpi) diff --git a/examples/extended/parallel/MPI/source/G4mpiConfig.cmake.in b/examples/extended/parallel/MPI/source/G4mpiConfig.cmake.in deleted file mode 100644 index 4fafb1467a..0000000000 --- a/examples/extended/parallel/MPI/source/G4mpiConfig.cmake.in +++ /dev/null @@ -1,82 +0,0 @@ -# -Configures for the use of @TARGET_NAME@ interface -# This file is configured by @TARGET_NAME@ for use by an external project -# This file is configured by @TARGET_NAME@ make system and SHOULD NOT BE EDITED -# -# It defines the following variables -# @TARGET_NAME@_INCLUDE_DIR directory where the include files are installed -# @TARGET_NAME@_LIBRARIES library of the G4-MPI interface -# @TARGET_NAME@_FOUND TRUE if package correctly setup -# Usage: -# Add -D@TARGET_NAME@_DIR=.... to cmake command line when building -# a @TARGET_NAME@ enabled application -# -# You may supply a version number through find_package which will be checked -# against the version of this build. Standard CMake logic is used so that -# the EXACT flag may be passed, and otherwise this build will report itself -# as compatible with the requested version if: -# -# VERSION_OF_THIS_BUILD >= VERSION_REQUESTED -# You can specify additional components of Geant4 through the -# COMPONENTS argument to find_package. -# Specifiying additional components will enable a check on the existence of -# these components, with the following per component variables being set: -# -# @TARGET_NAME@_${COMPONENT}_FOUND TRUE is the Geant4 library -# "component" was found -# Components -# --------------------- -# static (Static libraries available. Using this component -# when static libraries are available will result in -# @TARGET_NAME@_LIBRARIES being populated with the static -# versions of the Geant4 libraries. It does not -# guarantee the use of static third party libraries.) - - - -find_package(MPI REQUIRED) - -#Treatment of static libs -set(@TARGET_NAME@_static_FOUND @BUILD_STATIC_LIBS@) -set(@TARGET_NAME@_shared_FOUND @BUILD_SHARED_LIBS@) - -if(@TARGET_NAME@_shared_FOUND) - set(_libsuffix "") -else() - set(_libsuffix "-static") -endif() - -if(@TARGET_NAME@_FIND_REQUIRED_static AND @TARGET_NAME@_static_FOUND) - set(_libsuffix "-static") - list(REMOVE_ITEM @TARGET_NAME@_FIND_COMPONENTS static) -endif() - - - -# Compute paths -get_filename_component(@TARGET_NAME@_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -set(@TARGET_NAME@_INCLUDE_DIR @CONF_INCLUDE_DIRS@ ${MPI_CXX_INCLUDE_PATH}) - -SET(G4MPI_OLD_MPI @G4MPI_OLD_MPI@) - -if(G4MPI_OLD_MPI) - add_definitions(-DTOOLS_USE_MPI_PACK_NOT_CONST) - add_definitions(-DG4MPI_USE_MPI_PACK_NOT_CONST) - # Prevent warning with c++11 on old MPI - add_definitions(-Wno-literal-suffix) -endif() - -# Our library dependencies (contains definitions for IMPORTED targets) -if(NOT TARGET foo AND NOT @TARGET_NAME@_BINARY_DIR) - include("${@TARGET_NAME@_CMAKE_DIR}/@TARGET_NAME@Targets.cmake") -endif() - -#These are IMPORTED targets created by G4mpiTargets.cmake -SET(@TARGET_NAME@_LIBRARIES @TARGET_NAME@${_libsuffix} ${MPI_CXX_LIBRARIES}) -link_directories(${MPI_CXX_LIBRARY_DIRS}) - -SET(G4mpi_FOUND TRUE) - - - - - diff --git a/examples/extended/parallel/MPI/source/G4mpiConfigVersion.cmake.in b/examples/extended/parallel/MPI/source/G4mpiConfigVersion.cmake.in deleted file mode 100644 index 8f40381eef..0000000000 --- a/examples/extended/parallel/MPI/source/G4mpiConfigVersion.cmake.in +++ /dev/null @@ -1,11 +0,0 @@ -set(PACKAGE_VERSION "@THE_VERSION@") - -# Check whether the requested PACKAGE_FIND_VERSION is compatible -if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_COMPATIBLE FALSE) -else() - set(PACKAGE_VERSION_COMPATIBLE TRUE) - if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") - set(PACKAGE_VERSION_EXACT TRUE) - endif() -endif() \ No newline at end of file diff --git a/examples/extended/parallel/MPI/source/include/G4MPImanager.hh b/examples/extended/parallel/MPI/source/include/G4MPImanager.hh index 6fea685403..0803ffcbfc 100644 --- a/examples/extended/parallel/MPI/source/include/G4MPImanager.hh +++ b/examples/extended/parallel/MPI/source/include/G4MPImanager.hh @@ -34,6 +34,7 @@ #include #include +#include #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName&); \ @@ -123,11 +124,13 @@ class G4MPImanager // misc void ShowHelp() const; - const MPI::Intracomm* GetComm() const { return &COMM_G4COMMAND_; } + const MPI_Comm* GetComm() const { return &COMM_G4COMMAND_; } const MPI_Comm* GetProcessingComm() const { return &processing_comm_; } const MPI_Comm* GetCollectingComm() const { return &collecting_comm_; } const MPI_Comm* GetAllComm() const { return &all_comm_; } + std::vector ReturnArguments() { return _options; } + private: DISALLOW_COPY_AND_ASSIGN(G4MPImanager); @@ -157,7 +160,7 @@ class G4MPImanager G4int world_size_; // world comm size // MPI communicator (when no extra ranks) - MPI::Intracomm COMM_G4COMMAND_; + MPI_Comm COMM_G4COMMAND_; // MPI communicator (processing ranks - if ntuple merging) MPI_Comm processing_comm_; // MPI communicator (collecting ranks - if ntuple merging) @@ -188,6 +191,8 @@ class G4MPImanager // parallel parameters G4double master_weight_; G4int nof_extra_workers_; + + std::vector _options; }; // ==================================================================== diff --git a/examples/extended/parallel/MPI/source/include/G4MPIscorerMerger.hh b/examples/extended/parallel/MPI/source/include/G4MPIscorerMerger.hh index cc2a9ec36b..b5f1b7f75e 100644 --- a/examples/extended/parallel/MPI/source/include/G4MPIscorerMerger.hh +++ b/examples/extended/parallel/MPI/source/include/G4MPIscorerMerger.hh @@ -103,7 +103,7 @@ class G4MPIscorerMerger G4ScoringManager* scoringManager; unsigned int commSize; unsigned int destinationRank; - MPI::Intracomm comm; + MPI_Comm comm; G4int verbose; }; diff --git a/examples/extended/parallel/MPI/source/include/G4MPIutils.hh b/examples/extended/parallel/MPI/source/include/G4MPIutils.hh index d1fec7cf0c..30f37716dc 100644 --- a/examples/extended/parallel/MPI/source/include/G4MPIutils.hh +++ b/examples/extended/parallel/MPI/source/include/G4MPIutils.hh @@ -72,7 +72,7 @@ commMap_t buildCommunicationMap(std::vector& input); // Performs merging to rank 0 using the provided sender, receiver and barrier functions. // CommSize is the size of the communicator and myrank is the rank of the caller // For example: assume a class UserMerger has two members Send(uint) and -// Receive(uint) and we are using a MPI::Intracomm object as +// Receive(uint) and we are using a MPI_Comm object as // communicator, then to use this function the ranks can: // using std::placeholers::_1; // std::function sender = @@ -80,7 +80,7 @@ commMap_t buildCommunicationMap(std::vector& input); // std::function receiver = // std::bind(&Merger::Receiver,&mergerInst,_1); // std::function barrier = -// std::bind(&MPI::Intracomm::Barrier,&commInst); +// [&commInst](){MPI_Barrier(commInst);}; // G4mpi::Merge(sender,receiver,barrier,commSize,myrank); void Merge(std::function senderF, std::function receiverF, std::function barrierF, unsigned int commSize, unsigned int myrank); diff --git a/examples/extended/parallel/MPI/source/include/G4VUserMPIrunMerger.hh b/examples/extended/parallel/MPI/source/include/G4VUserMPIrunMerger.hh index f1cc93e9e2..d515efcebf 100644 --- a/examples/extended/parallel/MPI/source/include/G4VUserMPIrunMerger.hh +++ b/examples/extended/parallel/MPI/source/include/G4VUserMPIrunMerger.hh @@ -50,16 +50,16 @@ class G4VUserMPIrunMerger virtual void Pack() = 0; virtual G4Run* UnPack() = 0; - void InputUserData(/*const*/ void* input_data, const MPI::Datatype& dt, int count) + void InputUserData(/*const*/ void* input_data, const MPI_Datatype& dt, int count) { input_userdata.push_back(const_registered_data{input_data, dt, count}); } - void OutputUserData(void* input_data, const MPI::Datatype& dt, int count) + void OutputUserData(void* input_data, const MPI_Datatype& dt, int count) { output_userdata.push_back(registered_data{input_data, dt, count}); } - // void GetUserData(void* output_data,const MPI::Datatype& dt, int count); + // void GetUserData(void* output_data,const MPI_Datatype& dt, int count); void SetupOutputBuffer(char* buff, G4int size, G4int position) { @@ -88,10 +88,10 @@ class G4VUserMPIrunMerger G4int outputBufferSize; G4int outputBufferPosition; G4bool ownsBuffer; - unsigned int destinationRank; + G4int destinationRank; G4Run* run; unsigned int commSize; - MPI::Intracomm COMM_G4COMMAND_; + MPI_Comm COMM_G4COMMAND_; G4int verbose; long bytesSent; @@ -103,7 +103,7 @@ class G4VUserMPIrunMerger // const_registered_data(const_registered_data&&) = default; // const_registered_data& operator=(const_registered_data&&) = default; /*const*/ void* p_data; - /*const*/ MPI::Datatype dt; + /*const*/ MPI_Datatype dt; /*const*/ int count; }; std::vector input_userdata; @@ -114,7 +114,7 @@ class G4VUserMPIrunMerger registered_data(const registered_data&) = default; registered_data& operator=(const registered_data&) = default; void* p_data; - /*const*/ MPI::Datatype dt; + /*const*/ MPI_Datatype dt; /*const*/ int count; }; std::vector output_userdata; diff --git a/examples/extended/parallel/MPI/source/src/G4MPIhistoMerger.cc b/examples/extended/parallel/MPI/source/src/G4MPIhistoMerger.cc index 8a229e41a3..5c355066c3 100644 --- a/examples/extended/parallel/MPI/source/src/G4MPIhistoMerger.cc +++ b/examples/extended/parallel/MPI/source/src/G4MPIhistoMerger.cc @@ -52,12 +52,12 @@ void G4MPIhistoMerger::Merge() G4cout << "Starting merging of histograms" << G4endl; } - const MPI::Intracomm* parentComm = G4MPImanager::GetManager()->GetComm(); - MPI::Intracomm comm = parentComm->Dup(); + const MPI_Comm* parentComm = G4MPImanager::GetManager()->GetComm(); + MPI_Comm comm; + MPI_Comm_dup(*parentComm, &comm); G4bool verbose = (verboseLevel > 1); G4int tag = G4MPImanager::kTAG_HISTO; - // const MPI::Intracomm* comm = &COMM_G4COMMAND_; toolx::mpi::hmpi* hmpi = new toolx::mpi::hmpi(G4cout, destination, tag, comm, verbose); if (!manager->Merge(hmpi)) { G4cout << " Merge FAILED" << G4endl; @@ -68,5 +68,5 @@ void G4MPIhistoMerger::Merge() if (verboseLevel > 0) { G4cout << "End merging of histograms" << G4endl; } - comm.Free(); + MPI_Comm_free(&comm); } diff --git a/examples/extended/parallel/MPI/source/src/G4MPImanager.cc b/examples/extended/parallel/MPI/source/src/G4MPImanager.cc index 04e357970f..774d45dac0 100644 --- a/examples/extended/parallel/MPI/source/src/G4MPImanager.cc +++ b/examples/extended/parallel/MPI/source/src/G4MPImanager.cc @@ -44,6 +44,7 @@ #include #include #include +#include G4MPImanager* G4MPImanager::g4mpi_ = NULL; @@ -83,8 +84,13 @@ G4MPImanager::G4MPImanager(int nof_extra_workers) master_weight_(1.), nof_extra_workers_(nof_extra_workers) { - // MPI::Init(); - MPI::Init_thread(MPI::THREAD_SERIALIZED); + int provided; + MPI_Init_thread(nullptr, nullptr, MPI_THREAD_SERIALIZED, &provided); + if (provided < MPI_THREAD_SERIALIZED) { + G4Exception("G4MPImanager::G4MPImanager()", "G4MPImanager001", FatalException, + "MPI Initialization failed to setup with MPI_THREAD_SERIALIZED or better"); + } + Initialize(); } @@ -102,8 +108,12 @@ G4MPImanager::G4MPImanager(int argc, char** argv, int nof_extra_workers) master_weight_(1.), nof_extra_workers_(nof_extra_workers) { - // MPI::Init(argc, argv); - MPI::Init_thread(argc, argv, MPI::THREAD_SERIALIZED); + int provided; + MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &provided); + if (provided < MPI_THREAD_SERIALIZED) { + G4Exception("G4MPImanager::G4MPImanager()", "G4MPImanager001", FatalException, + "MPI Initialization failed to setup with MPI_THREAD_SERIALIZED or better"); + } Initialize(); ParseArguments(argc, argv); } @@ -133,10 +143,10 @@ G4MPImanager::~G4MPImanager() } } else { - COMM_G4COMMAND_.Free(); + MPI_Comm_free(&COMM_G4COMMAND_); } - MPI::Finalize(); + MPI_Finalize(); } // -------------------------------------------------------------------------- @@ -173,14 +183,14 @@ void G4MPImanager::Initialize() g4mpi_ = this; // get rank information - world_size_ = MPI::COMM_WORLD.Get_size(); + MPI_Comm_size(MPI_COMM_WORLD, &world_size_); if (world_size_ - nof_extra_workers_ <= 0) { G4Exception("G4MPImanager::SetExtraWorker()", "MPI001", JustWarning, "Cannot reserve extra ranks: the MPI size is not sufficient."); nof_extra_workers_ = 0; } size_ = world_size_ - nof_extra_workers_; - rank_ = MPI::COMM_WORLD.Get_rank(); + MPI_Comm_rank(MPI_COMM_WORLD, &rank_); is_master_ = (rank_ == kRANK_MASTER); is_slave_ = (rank_ != kRANK_MASTER); is_extra_worker_ = false; @@ -220,13 +230,12 @@ void G4MPImanager::Initialize() MPI_Comm_create_group(MPI_COMM_WORLD, collecting_group_, 0, &collecting_comm_); MPI_Comm_create_group(MPI_COMM_WORLD, all_group_, 0, &all_comm_); - // COMM_G4COMMAND_ = processing_comm_ copy - COMM_G4COMMAND_ = MPI::Intracomm(processing_comm_); + MPI_Comm_dup(processing_comm_, &COMM_G4COMMAND_); } else { // G4cout << "No extra workers requested" << G4endl; // initialize MPI communicator - COMM_G4COMMAND_ = MPI::COMM_WORLD.Dup(); + MPI_Comm_dup(MPI_COMM_WORLD, &COMM_G4COMMAND_); } is_extra_worker_ = (collecting_comm_ != MPI_COMM_NULL); @@ -257,50 +266,51 @@ void G4MPImanager::Initialize() // -------------------------------------------------------------------------- void G4MPImanager::ParseArguments(int argc, char** argv) { + _options.clear(); G4int qhelp = 0; G4String ofprefix = "mpi"; - G4int c; - while (1) { - G4int option_index = 0; - static struct option long_options[] = {{"help", no_argument, NULL, 'h'}, - {"verbose", no_argument, NULL, 'v'}, - {"init", required_argument, NULL, 'i'}, - {"ofile", optional_argument, NULL, 'o'}, - {NULL, 0, NULL, 0}}; + G4int option_index = -1; - opterr = 0; // suppress message - c = getopt_long(argc, argv, "hvi:o", long_options, &option_index); - opterr = 1; + for (int i = 1; i < argc; i++) { + G4String arg = argv[i]; + G4String sub; + G4String endsub = sub; + if (arg.length() > 5) { + sub = arg.substr(0, 5); + endsub = arg.substr(arg.length() - 4); + } - if (c == -1) break; - - switch (c) { - case 'h': - qhelp = 1; - break; - case 'v': - verbose_ = 1; - break; - case 'i': - qinitmacro_ = true; - init_file_name_ = optarg; - break; - case 'o': - qfcout_ = true; - if (optarg) ofprefix = optarg; - break; - default: - G4cerr << "*** invalid options specified." << G4endl; - std::exit(EXIT_FAILURE); - break; + if (arg == "help") { + qhelp = 1; + } + else if (arg == "verbose") { + verbose_ = 1; + } + else if (arg == "init") { + qinitmacro_ = true; + init_file_name_ = optarg; + } + else if (arg == "ofile") { + qfcout_ = true; + if (optarg) ofprefix = optarg; + } + else if (sub == "macro" or endsub == ".mac") { + option_index = i; + qbatchmode_ = true; + } + // default: + // G4cerr << "*** invalid options specified." << G4endl; + // std::exit(EXIT_FAILURE); + else { + _options.push_back(arg); } } // show help if (qhelp) { if (is_master_) ShowHelp(); - MPI::Finalize(); + MPI_Finalize(); std::exit(EXIT_SUCCESS); } @@ -308,15 +318,14 @@ void G4MPImanager::ParseArguments(int argc, char** argv) if (is_slave_ && qfcout_) { G4String prefix = ofprefix + ".%03d" + ".cout"; char str[1024]; - sprintf(str, prefix.c_str(), rank_); + snprintf(str, 1024, prefix.c_str(), rank_); G4String fname(str); fscout_.open(fname.c_str(), std::ios::out); } // non-option ARGV-elements ... - if (optind < argc) { - qbatchmode_ = true; - macro_file_name_ = argv[optind]; + if (qbatchmode_) { + macro_file_name_ = argv[option_index]; } } @@ -365,7 +374,8 @@ void G4MPImanager::ShowStatus() // receive from each slave for (G4int islave = 1; islave < size_; islave++) { - COMM_G4COMMAND_.Recv(buff, G4MPIstatus::kNSIZE, MPI::INT, islave, kTAG_G4STATUS); + MPI_Recv(buff, G4MPIstatus::kNSIZE, MPI_INT, islave, kTAG_G4STATUS, COMM_G4COMMAND_, + MPI_STATUS_IGNORE); status_->UnPack(buff); status_->Print(); @@ -389,7 +399,7 @@ void G4MPImanager::ShowStatus() } else { status_->Pack(buff); - COMM_G4COMMAND_.Send(buff, G4MPIstatus::kNSIZE, MPI::INT, kRANK_MASTER, kTAG_G4STATUS); + MPI_Send(buff, G4MPIstatus::kNSIZE, MPI_INT, kRANK_MASTER, kTAG_G4STATUS, COMM_G4COMMAND_); } } @@ -413,13 +423,13 @@ void G4MPImanager::ShowSeeds() G4cout << "* rank= " << rank_ << " seed= " << G4Random::getTheSeed() << G4endl; // receive from each slave for (G4int islave = 1; islave < size_; islave++) { - COMM_G4COMMAND_.Recv(&buff, 1, MPI::LONG, islave, kTAG_G4SEED); + MPI_Recv(&buff, 1, MPI_LONG, islave, kTAG_G4SEED, COMM_G4COMMAND_, MPI_STATUS_IGNORE); G4cout << "* rank= " << islave << " seed= " << buff << G4endl; } } else { // slaves buff = G4Random::getTheSeed(); - COMM_G4COMMAND_.Send(&buff, 1, MPI::LONG, kRANK_MASTER, kTAG_G4SEED); + MPI_Send(&buff, 1, MPI_LONG, kRANK_MASTER, kTAG_G4SEED, COMM_G4COMMAND_); } } @@ -441,21 +451,25 @@ G4bool G4MPImanager::CheckThreadStatus() qstatus = (thread_id_ != 0); // get slave status for (G4int islave = 1; islave < size_; islave++) { - MPI::Request request = COMM_G4COMMAND_.Irecv(&buff, 1, MPI::UNSIGNED, islave, kTAG_G4STATUS); - while (!request.Test()) { + MPI_Request request; + MPI_Irecv(&buff, 1, MPI_UNSIGNED, islave, kTAG_G4STATUS, COMM_G4COMMAND_, &request); + int flag = 0; + while (!flag) { + MPI_Test(&request, &flag, MPI_STATUS_IGNORE); ::Wait(1000); } + qstatus |= buff; } } else { buff = (thread_id_ != 0); - COMM_G4COMMAND_.Send(&buff, 1, MPI::UNSIGNED, kRANK_MASTER, kTAG_G4STATUS); + MPI_Send(&buff, 1, MPI_UNSIGNED, kRANK_MASTER, kTAG_G4STATUS, COMM_G4COMMAND_); } // broadcast buff = qstatus; // for master - COMM_G4COMMAND_.Bcast(&buff, 1, MPI::UNSIGNED, kRANK_MASTER); + MPI_Bcast(&buff, 1, MPI_UNSIGNED, kRANK_MASTER, COMM_G4COMMAND_); qstatus = buff; // for slave if (qstatus != 0) @@ -540,20 +554,21 @@ G4String G4MPImanager::BcastCommand(const G4String& command) // "command" is not yet fixed in slaves at this time. // waiting message exhausts CPU in LAM! - // COMM_G4COMMAND_.Bcast(sbuff, ssize, MPI::CHAR, RANK_MASTER); // another implementation if (is_master_) { for (G4int islave = 1; islave < size_; islave++) { - COMM_G4COMMAND_.Send(sbuff, kBUFF_SIZE, MPI::CHAR, islave, kTAG_G4COMMAND); + MPI_Send(sbuff, kBUFF_SIZE, MPI_CHAR, islave, kTAG_G4COMMAND, COMM_G4COMMAND_); } } else { // try non-blocking receive - MPI::Request request = - COMM_G4COMMAND_.Irecv(sbuff, kBUFF_SIZE, MPI::CHAR, kRANK_MASTER, kTAG_G4COMMAND); - // polling... - while (!request.Test()) { + MPI_Request request; + MPI_Irecv(sbuff, kBUFF_SIZE, MPI_CHAR, kRANK_MASTER, kTAG_G4COMMAND, COMM_G4COMMAND_, &request); + + int flag = 0; + while (!flag) { + MPI_Test(&request, &flag, MPI_STATUS_IGNORE); ::Wait(1000); } } @@ -654,8 +669,11 @@ void G4MPImanager::WaitBeamOn() // receive from each slave for (G4int islave = 1; islave < size_; islave++) { // G4cout << "calling Irecv for islave " << islave << G4endl; - MPI::Request request = COMM_G4COMMAND_.Irecv(&buff, 1, MPI::INT, islave, kTAG_G4STATUS); - while (!request.Test()) { + MPI_Request request; + MPI_Irecv(&buff, 1, MPI_INT, islave, kTAG_G4STATUS, COMM_G4COMMAND_, &request); + int flag = 0; + while (flag) { + MPI_Test(&request, &flag, MPI_STATUS_IGNORE); ::Wait(1000); } } @@ -663,7 +681,7 @@ void G4MPImanager::WaitBeamOn() else { buff = 1; // G4cout << "calling send for i " << kRANK_MASTER << G4endl; - COMM_G4COMMAND_.Send(&buff, 1, MPI::INT, kRANK_MASTER, kTAG_G4STATUS); + MPI_Send(&buff, 1, MPI_INT, kRANK_MASTER, kTAG_G4STATUS, COMM_G4COMMAND_); } } } diff --git a/examples/extended/parallel/MPI/source/src/G4MPIscorerMerger.cc b/examples/extended/parallel/MPI/source/src/G4MPIscorerMerger.cc index 8642874410..2fa0ac67b4 100644 --- a/examples/extended/parallel/MPI/source/src/G4MPIscorerMerger.cc +++ b/examples/extended/parallel/MPI/source/src/G4MPIscorerMerger.cc @@ -49,20 +49,20 @@ namespace struct MPIStatDouble : public G4StatDouble { G4int verbose; - inline void Pack(void* buffer, int bufferSize, int* position, MPI::Intracomm& comm) const + inline void Pack(void* buffer, int bufferSize, int* position, MPI_Comm& comm) const { DMSG(4, "Packing G4StatDouble(n,scale,sum_w,sum_w2,sum_wx,sum_wx2): " << m_n << " " << m_scale << " " << m_sum_w << " " << m_sum_w2 << " " << m_sum_wx << " " << m_sum_wx2); - MPI_Pack(&m_n, 1, MPI::INT, buffer, bufferSize, position, comm); + MPI_Pack(&m_n, 1, MPI_INT, buffer, bufferSize, position, comm); const G4double data[]{m_scale, m_sum_w, m_sum_w2, m_sum_wx, m_sum_wx2}; - MPI_Pack(&data, 5, MPI::DOUBLE, buffer, bufferSize, position, comm); + MPI_Pack(&data, 5, MPI_DOUBLE, buffer, bufferSize, position, comm); } - inline void UnPack(void* buffer, int bufferSize, int* position, MPI::Intracomm& comm) + inline void UnPack(void* buffer, int bufferSize, int* position, MPI_Comm& comm) { - MPI_Unpack(buffer, bufferSize, position, &m_n, 1, MPI::INT, comm); + MPI_Unpack(buffer, bufferSize, position, &m_n, 1, MPI_INT, comm); G4double data[5]; - MPI_Unpack(buffer, bufferSize, position, data, 5, MPI::DOUBLE, comm); + MPI_Unpack(buffer, bufferSize, position, data, 5, MPI_DOUBLE, comm); m_scale = data[0]; m_sum_w = data[1]; m_sum_w2 = data[2]; @@ -148,8 +148,8 @@ void G4MPIscorerMerger::Merge() DMSG(1, "Comm world size is 1, nothing to do"); return; } - const MPI::Intracomm* parentComm = G4MPImanager::GetManager()->GetComm(); - comm = parentComm->Dup(); + const MPI_Comm* parentComm = G4MPImanager::GetManager()->GetComm(); + MPI_Comm_dup(*parentComm, &comm); DestroyBuffer(); // ANDREA:-> @@ -168,14 +168,16 @@ void G4MPIscorerMerger::Merge() // ANDREA:<- bytesSent = 0; - const G4double sttime = MPI::Wtime(); + const G4double sttime = MPI_Wtime(); // Use G4MPIutils to optimize communications between ranks typedef std::function handler_t; using std::placeholders::_1; handler_t sender = std::bind(&G4MPIscorerMerger::Send, this, _1); handler_t receiver = std::bind(&G4MPIscorerMerger::Receive, this, _1); - std::function barrier = std::bind(&MPI::Intracomm::Barrier, &comm); + std::function barrier = [this]() { + MPI_Barrier(comm); + }; G4mpi::Merge(sender, receiver, barrier, commSize, myrank); // OLD Style p2p communications @@ -194,9 +196,9 @@ void G4MPIscorerMerger::Merge() } } */ - const G4double elapsed = MPI::Wtime() - sttime; + const G4double elapsed = MPI_Wtime() - sttime; long total = 0; - comm.Reduce(&bytesSent, &total, 1, MPI::LONG, MPI::SUM, destinationRank); + MPI_Reduce(&bytesSent, &total, 1, MPI_LONG, MPI_SUM, destinationRank, comm); if (verbose > 0 && myrank == destinationRank) { // Collect from ranks how much data was sent around G4cout << "G4MPIscorerMerger::Merge() -data transfer performances: " @@ -218,7 +220,7 @@ void G4MPIscorerMerger::Merge() // } // } // ANDREA:<- - comm.Free(); + MPI_Comm_free(&comm); DMSG(0, "G4MPIscorerMerger::Merge done."); } @@ -227,9 +229,11 @@ void G4MPIscorerMerger::Receive(const unsigned int source) DMSG(1, "Receiving scorers"); // DestroyBuffer(); DMSG(2, "Receiving from: " << source); - MPI::Status status; - comm.Probe(source, G4MPImanager::kTAG_CMDSCR, status); - const G4int newbuffsize = status.Get_count(MPI::PACKED); + MPI_Status status; + MPI_Probe(source, G4MPImanager::kTAG_CMDSCR, comm, &status); + int nbs; + MPI_Get_count(&status, MPI_PACKED, &nbs); + const G4int newbuffsize = nbs; // Need this interposed since G4int may not be int DMSG(2, "Preparing to receive buffer of size: " << newbuffsize); char* buffer = outputBuffer; if (newbuffsize > outputBufferSize) { @@ -244,7 +248,7 @@ void G4MPIscorerMerger::Receive(const unsigned int source) ownsBuffer = true; } SetupOutputBuffer(buffer, newbuffsize, 0); - comm.Recv(buffer, newbuffsize, MPI::PACKED, source, G4MPImanager::kTAG_CMDSCR, status); + MPI_Recv(buffer, newbuffsize, MPI_PACKED, source, G4MPImanager::kTAG_CMDSCR, comm, &status); DMSG(3, "Buffer Size: " << outputBufferSize << " bytes at: " << (void*)outputBuffer); UnPackAndMerge(scoringManager); DMSG(1, "Receiving of comamnd line scorers done"); @@ -271,7 +275,8 @@ void G4MPIscorerMerger::Send(const unsigned int destination) assert(outputBufferSize == outputBufferPosition); // Version 1: p2p communication - comm.Send(outputBuffer, outputBufferSize, MPI::PACKED, destination, G4MPImanager::kTAG_CMDSCR); + MPI_Send(outputBuffer, outputBufferSize, MPI_PACKED, destination, G4MPImanager::kTAG_CMDSCR, + comm); bytesSent += newbuffsize; // Receiver should use probe to get size of the package being sent DMSG(1, "Sending done"); @@ -287,10 +292,10 @@ void G4MPIscorerMerger::Pack(const G4ScoringManager* sm) } DMSG(2, "Starting packing of meshes, # meshes: " << sm->GetNumberOfMesh()); /*const*/ size_t numMeshes = sm->GetNumberOfMesh(); // TODO: OLD MPI interface - MPI_Pack(&numMeshes, 1, MPI::UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, + MPI_Pack(&numMeshes, 1, MPI_UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); for (size_t i = 0; i < numMeshes; ++i) { - MPI_Pack(&i, 1, MPI::UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); + MPI_Pack(&i, 1, MPI_UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); Pack(sm->GetMesh(i)); } } @@ -304,7 +309,7 @@ void G4MPIscorerMerger::UnPackAndMerge(const G4ScoringManager* sm) return; } size_t numMeshes = 0; - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &numMeshes, 1, MPI::UNSIGNED, + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &numMeshes, 1, MPI_UNSIGNED, comm); if (numMeshes != sm->GetNumberOfMesh()) { G4ExceptionDescription msg; @@ -318,7 +323,7 @@ void G4MPIscorerMerger::UnPackAndMerge(const G4ScoringManager* sm) size_t meshid = 0; for (size_t i = 0; i < numMeshes; ++i) { - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &meshid, 1, MPI::UNSIGNED, + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &meshid, 1, MPI_UNSIGNED, comm); if (meshid != i) { G4ExceptionDescription msg; @@ -342,18 +347,18 @@ void G4MPIscorerMerger::Pack(const G4VScoringMesh* mesh) auto map = mesh->GetScoreMap(); /*const*/ size_t nummaps = map.size(); // TODO: old MPI interface - MPI_Pack(&nummaps, 1, MPI::UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); + MPI_Pack(&nummaps, 1, MPI_UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); for (const auto& ele : map) { const G4String& name = ele.first; /*const*/ size_t ss = name.size(); - MPI_Pack(&ss, 1, MPI::UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); + MPI_Pack(&ss, 1, MPI_UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); #ifdef G4MPI_USE_MPI_PACK_NOT_CONST char* nn = new char[name.length()]; std::copy(name.begin(), name.end(), nn); #else const char* nn = name.c_str(); #endif - MPI_Pack(nn, ss, MPI::CHAR, outputBuffer, outputBufferSize, &outputBufferPosition, comm); + MPI_Pack(nn, ss, MPI_CHAR, outputBuffer, outputBufferSize, &outputBufferPosition, comm); Pack(ele.second); #ifdef G4MPI_USE_MPI_PACK_NOT_CONST delete[] nn; @@ -369,17 +374,17 @@ void G4MPIscorerMerger::UnPackAndMerge(G4VScoringMesh* inmesh) DMSG(3, "Preparing to unpack a mesh and merge into: " << inmesh); const G4String& detName = inmesh->GetWorldName(); size_t nummaps = 0; - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &nummaps, 1, MPI::UNSIGNED, + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &nummaps, 1, MPI_UNSIGNED, comm); for (size_t i = 0; i < nummaps; ++i) { size_t nameSize = 0; - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &nameSize, 1, MPI::UNSIGNED, + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &nameSize, 1, MPI_UNSIGNED, comm); // Create a null-terminated c-string: needed later when converting this to a G4String //(Not sure: but issue reported by valgrind with the use of MPI_Unpack) char* name = new char[nameSize + 1]; std::fill(name, name + nameSize + 1, 0); - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, name, nameSize, MPI::CHAR, + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, name, nameSize, MPI_CHAR, comm); const G4String colname(name, nameSize); delete[] name; @@ -393,31 +398,6 @@ void G4MPIscorerMerger::UnPackAndMerge(G4VScoringMesh* inmesh) } } -// void G4MPIscorerMerger::Pack(const HitMap* sm) { -// assert(sm!=nullptr); -// assert(outputBuffer!=nullptr); -// assert(outputBufferPosition<=outputBufferSize); -// DMSG(3,"Packing hitmap: "<GetSize()<<" elements."); -// /*const*/ size_t numEl = sm->GetSize();//TODO: old MPI implementation -// MPI_Pack(&numEl,1,MPI::UNSIGNED, -// outputBuffer,outputBufferSize, -// &outputBufferPosition,comm); -// const auto& theMap = *sm->GetMap(); -// std::vector ids; -// std::vector vals; -// std::transform(theMap.begin(),theMap.end(),std::back_inserter(ids), -// [](decltype(*theMap.begin())& e){ return e.first;}); -// std::transform(theMap.begin(),theMap.end(),std::back_inserter(vals), -// [](decltype(*theMap.begin())& e){ return *e.second;}); -// assert(ids.size()==vals.size()&&ids.size()==numEl); -// MPI_Pack(ids.data(),ids.size(),MPI::INT, -// outputBuffer,outputBufferSize, -// &outputBufferPosition,comm); -// MPI_Pack(vals.data(),vals.size(),MPI::DOUBLE, -// outputBuffer,outputBufferSize, -// &outputBufferPosition,comm); -// } - void G4MPIscorerMerger::Pack(const HitStatDoubleMap* sm) { assert(sm != nullptr); @@ -425,13 +405,13 @@ void G4MPIscorerMerger::Pack(const HitStatDoubleMap* sm) assert(outputBufferPosition <= outputBufferSize); DMSG(3, "Packing hitmap: " << sm << " with: " << sm->GetSize() << " elements."); /*const*/ size_t numEl = sm->GetSize(); // TODO: old MPI implementation - MPI_Pack(&numEl, 1, MPI::UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); + MPI_Pack(&numEl, 1, MPI_UNSIGNED, outputBuffer, outputBufferSize, &outputBufferPosition, comm); const auto& theMap = *sm->GetMap(); std::vector ids; std::transform(theMap.begin(), theMap.end(), std::back_inserter(ids), [](decltype(*theMap.begin())& e) { return e.first; }); assert(/*ids.size()==vals.size()&&*/ ids.size() == numEl); - MPI_Pack(ids.data(), ids.size(), MPI::INT, outputBuffer, outputBufferSize, &outputBufferPosition, + MPI_Pack(ids.data(), ids.size(), MPI_INT, outputBuffer, outputBufferSize, &outputBufferPosition, comm); for (const auto& e : theMap) { const MPIStatDouble sd(*e.second, verbose); @@ -439,27 +419,6 @@ void G4MPIscorerMerger::Pack(const HitStatDoubleMap* sm) } } -// HitMap* G4MPIscorerMerger::UnPackHitMap(const G4String& detName, -// const G4String& colName) { -// assert(outputBuffer!=nullptr); -// assert(outputBufferPosition<=outputBufferSize); -// DMSG(3,"Preparing to unpack a hit map for: "<set(ids[i],vals[i]); -// delete[] ids; -// delete[] vals; -// return result; -// } - HitStatDoubleMap* G4MPIscorerMerger::UnPackHitStatDoubleMap(const G4String& detName, const G4String& colName) { @@ -467,10 +426,10 @@ HitStatDoubleMap* G4MPIscorerMerger::UnPackHitStatDoubleMap(const G4String& detN assert(outputBufferPosition <= outputBufferSize); DMSG(3, "Preparing to unpack a hit map for: " << detName << "," << colName); size_t numEl = 0; - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &numEl, 1, MPI::UNSIGNED, comm); + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, &numEl, 1, MPI_UNSIGNED, comm); DMSG(3, "Will receive " << numEl << " values"); G4int* ids = new G4int[numEl]; - MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, ids, numEl, MPI::INT, comm); + MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, ids, numEl, MPI_INT, comm); HitStatDoubleMap* result = new HitStatDoubleMap(detName, colName); for (unsigned int i = 0; i < numEl; ++i) { MPIStatDouble sd(verbose); diff --git a/examples/extended/parallel/MPI/source/src/G4VUserMPIrunMerger.cc b/examples/extended/parallel/MPI/source/src/G4VUserMPIrunMerger.cc index 1c768107c2..ffa307d8e4 100644 --- a/examples/extended/parallel/MPI/source/src/G4VUserMPIrunMerger.cc +++ b/examples/extended/parallel/MPI/source/src/G4VUserMPIrunMerger.cc @@ -60,12 +60,15 @@ void G4VUserMPIrunMerger::Send(const unsigned int destination) << " events to: " << destination); input_userdata.clear(); Pack(); // User code - InputUserData(&nevts, MPI::INT, 1); + InputUserData(&nevts, MPI_INT, 1); DestroyBuffer(); G4int newbuffsize = 0; for (const const_registered_data& el : input_userdata) { - newbuffsize += (el.dt.Get_size() * el.count); + // Assumes type size small enough to be held in int. Use MPI_Type_size_x if not true + int sz; + MPI_Type_size(el.dt, &sz); + newbuffsize += (sz * el.count); } char* buffer = new char[newbuffsize]; // Avoid complains from valgrind (i'm not really sure why this is needed, but, beside the @@ -85,25 +88,29 @@ void G4VUserMPIrunMerger::Send(const unsigned int destination) outputBuffer, outputBufferSize, &outputBufferPosition, COMM_G4COMMAND_); } assert(outputBufferSize == outputBufferPosition); - COMM_G4COMMAND_.Send(outputBuffer, outputBufferSize, MPI::PACKED, destination, - G4MPImanager::kTAG_RUN); + MPI_Send(outputBuffer, outputBufferSize, MPI_PACKED, destination, G4MPImanager::kTAG_RUN, + COMM_G4COMMAND_); bytesSent += outputBufferSize; DMSG(2, "G4VUserMPIrunMerger::Send() : Done "); } void G4VUserMPIrunMerger::Receive(const unsigned int source) { - const MPI::Intracomm* parentComm = G4MPImanager::GetManager()->GetComm(); - DMSG(1, "G4VUserMPIrunMerger::Receive(...) , this rank : " << parentComm->Get_rank() + const MPI_Comm* parentComm = G4MPImanager::GetManager()->GetComm(); + int rank; + MPI_Comm_rank(*parentComm, &rank); + DMSG(1, "G4VUserMPIrunMerger::Receive(...) , this rank : " << rank << " and receiving from : " << source); // DestroyBuffer(); // Receive from all but one // for (G4int rank = 0; rank < commSize-1; ++rank) //{ - MPI::Status status; - COMM_G4COMMAND_.Probe(source, G4MPImanager::kTAG_RUN, status); + MPI_Status status; + MPI_Probe(source, G4MPImanager::kTAG_RUN, COMM_G4COMMAND_, &status); // const G4int source = status.Get_source(); - const G4int newbuffsize = status.Get_count(MPI::PACKED); + int nbs; + MPI_Get_count(&status, MPI_PACKED, &nbs); + const G4int newbuffsize = nbs; DMSG(2, "Preparing to receive buffer of size: " << newbuffsize); char* buffer = outputBuffer; if (newbuffsize > outputBufferSize) { @@ -117,7 +124,8 @@ void G4VUserMPIrunMerger::Receive(const unsigned int source) ownsBuffer = true; } SetupOutputBuffer(buffer, newbuffsize, 0); - COMM_G4COMMAND_.Recv(buffer, newbuffsize, MPI::PACKED, source, G4MPImanager::kTAG_RUN, status); + MPI_Recv(buffer, newbuffsize, MPI_PACKED, source, G4MPImanager::kTAG_RUN, COMM_G4COMMAND_, + &status); DMSG(3, "Buffer Size: " << outputBufferSize << " bytes at: " << (void*)outputBuffer); output_userdata.clear(); // User code, if implemented will return the concrete G4Run class @@ -125,7 +133,7 @@ void G4VUserMPIrunMerger::Receive(const unsigned int source) if (aNewRun == nullptr) aNewRun = new G4Run; // Add number of events counter G4int nevets = 0; - OutputUserData(&nevets, MPI::INT, 1); + OutputUserData(&nevets, MPI_INT, 1); // now userdata contains all data references, do the real unpacking for (const registered_data& el : output_userdata) { MPI_Unpack(outputBuffer, outputBufferSize, &outputBufferPosition, el.p_data, el.count, el.dt, @@ -147,8 +155,9 @@ void G4VUserMPIrunMerger::Merge() // G4cout << "G4VUserMPIrunMerger::Merge called" << G4endl; DMSG(0, "G4VUserMPIrunMerger::Merge called"); - const MPI::Intracomm* parentComm = G4MPImanager::GetManager()->GetComm(); - const unsigned int myrank = parentComm->Get_rank(); + const MPI_Comm* parentComm = G4MPImanager::GetManager()->GetComm(); + G4int myrank; + MPI_Comm_rank(*parentComm, &myrank); commSize = G4MPImanager::GetManager()->GetActiveSize(); // do not include extra worker in this communication @@ -156,17 +165,19 @@ void G4VUserMPIrunMerger::Merge() DMSG(1, "Comm world size is 1, nothing to do"); return; } - COMM_G4COMMAND_ = parentComm->Dup(); + MPI_Comm_dup(*parentComm, &COMM_G4COMMAND_); bytesSent = 0; - const G4double sttime = MPI::Wtime(); + const G4double sttime = MPI_Wtime(); // Use G4MPIutils to optimize communications between ranks typedef std::function handler_t; using std::placeholders::_1; handler_t sender = std::bind(&G4VUserMPIrunMerger::Send, this, _1); handler_t receiver = std::bind(&G4VUserMPIrunMerger::Receive, this, _1); - std::function barrier = std::bind(&MPI::Intracomm::Barrier, &COMM_G4COMMAND_); - // G4cout << "go to G4mpi::Merge" << G4endl; + std::function barrier = [this]() { + MPI_Barrier(COMM_G4COMMAND_); + }; + // G4cout << "go to G4mpi::Merge" << G4endl;i G4mpi::Merge(sender, receiver, barrier, commSize, myrank); // OLD Style p2p communications @@ -183,9 +194,9 @@ void G4VUserMPIrunMerger::Merge() } } */ - const G4double elapsed = MPI::Wtime() - sttime; + const G4double elapsed = MPI_Wtime() - sttime; long total = 0; - COMM_G4COMMAND_.Reduce(&bytesSent, &total, 1, MPI::LONG, MPI::SUM, destinationRank); + MPI_Reduce(&bytesSent, &total, 1, MPI_LONG, MPI_SUM, destinationRank, COMM_G4COMMAND_); if (verbose > 0 && myrank == destinationRank) { // Collect from ranks how much data was sent around G4cout << "G4VUserMPIrunMerger::Merge() - data transfer performances: " @@ -194,6 +205,6 @@ void G4VUserMPIrunMerger::Merge() << G4endl; } - COMM_G4COMMAND_.Free(); + MPI_Comm_free(&COMM_G4COMMAND_); DMSG(0, "G4VUserMPIrunMerger::Merge done"); } diff --git a/examples/extended/parallel/README b/examples/extended/parallel/README index f33923240e..49966adb18 100644 --- a/examples/extended/parallel/README +++ b/examples/extended/parallel/README @@ -10,7 +10,3 @@ different techniques for achieving event parallelism with Geant4. Using this interface, users applications can be parllelized with different MPI compliant libraries, such as LAM/MPI, MPICH2, OpenMPI, and so on. - -- Example TBB is derived from original basic/B2 demonstrating how to - interface a simple application with the Intel Threading Building Blocks - library (TBB), and organise MT event-level parallelism as TBB tasks. diff --git a/examples/extended/parallel/TBB/.README.txt b/examples/extended/parallel/TBB/.README.txt deleted file mode 100644 index 904a7bd1f9..0000000000 --- a/examples/extended/parallel/TBB/.README.txt +++ /dev/null @@ -1,27 +0,0 @@ - -///\file "parallel/TBB/.README.txt" -///\brief Examples TBB README page - -/*! \page Examples_tbb Category "parallel/TBB" - - -TBB directory shows how to integrate Intel Threading Building Block and Geant4 -to achieve event-level parallelism. - -\link ExampleTBB_B2b TBB/B2b \endlink - -Currently only a preliminary version of one example is provided: it replaces -the Geant4 Version 10.0 event-loop parallelism based on pthreads with TBB -task-based parallelism. It should not be considered a feature-complete example -and it present some limitations (no merging of output, no correct clean-up of -heap). - -It will be substantially improved in the future. -If you have interest in TBB please -refer to Geant4 Multi-threading user-forum (reachable from Geant4 website) -where updates on TBB will be communicated or contact example author at: -adotti@slac.stanford.edu. - -*/ - - diff --git a/examples/extended/parallel/TBB/B2b/.README.txt b/examples/extended/parallel/TBB/B2b/.README.txt deleted file mode 100644 index 1584b2fee2..0000000000 --- a/examples/extended/parallel/TBB/B2b/.README.txt +++ /dev/null @@ -1,51 +0,0 @@ - -///\file "parallel/TBB/B2b/.README.txt" -///\brief Example TBB/B2b README page - -/*! \page ExampleTBB_B2b Example TBB/B2b - -This example shows how to integrate Intel Threading Building Block and Geant4 -to achieve event-level parallelism. - - -Note that this is a preliminary version which should not be considered a -feature-complete example and which presents some limitations (no merging of -output, no correct clean-up of heap). It will be substantially improved -in 2014. - - -This example adds to B2b example, originally provided in basic example, -the TBB based classes: - -\section TBB_B2b_s1 tbbMasterRunManager - -tbbMasterRunManager class implements the master model run manager for TBB bases -application. - -It is instantiated by user main (or equivalent function) instead -of G4[MT]RunManager. It controls the creation of tbb::tasks. -See G4MTRunManager for documentation of methods relative to base -class. Only class specific methods are documented here. - -\section TBB_B2b_s2 tbbWorkerRunManager - -tbbWorkerRunManager class implements the worker model run manager for TBB based -application. - -It is instantiated by tbbUserWorkerInitialization and used by -tbbMasterRunManager. -See G4WorkerRunManager for documentation of methods relative to -base class. Only class specific methods are documented here. - -\section TBB_B2b_s3 tbbUserWorkerInitialization - -tbbUserWorkerInitialization class implements TBB specific worker initialization. -It is a sub-class of G4UserWorkerThreadInitialization. -Its role is to instantiate a tbbWorkerRunManager to be used by -tbb tasks. - -\section TBB_B2b_s4 tbbTask - -tbbTask class represents one TBB task. - -*/ diff --git a/examples/extended/parallel/TBB/B2b/GNUmakefile b/examples/extended/parallel/TBB/B2b/GNUmakefile deleted file mode 100644 index 9f8841b2b9..0000000000 --- a/examples/extended/parallel/TBB/B2b/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for examples module. Gabriele Cosmo, 06/04/98. -# -------------------------------------------------------------- - -name := exampleB2b -G4TARGET := $(name) -G4EXLIB := true - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -.PHONY: all -all: lib bin - -include $(G4INSTALL)/config/architecture.gmk - -include $(G4INSTALL)/config/binmake.gmk - -visclean: - rm -f g4*.prim g4*.eps g4*.wrl - rm -f .DAWN_* - diff --git a/examples/extended/parallel/TBB/B2b/README b/examples/extended/parallel/TBB/B2b/README deleted file mode 100644 index 59474b35d0..0000000000 --- a/examples/extended/parallel/TBB/B2b/README +++ /dev/null @@ -1,47 +0,0 @@ - - ========================================================= - Geant4 - an Object-Oriented Toolkit for Simulation in HEP - ========================================================= - - TBB/B2b - -------- - -This example shows how to integrate Intel Threading Building Block and Geant4 -to achieve event-level parallelism. - -Note that this is a preliminary version which should not be considered a -feature-complete example and which presents some limitations (no merging of -output, no correct clean-up of heap). It will be substantially improved -in 2014. - -This example adds to B2b example, originally provided in basic example, -the TBB based classes: - -tbbMasterRunManager: --------------------- -This class implements the master model run manager for TBB bases -application. -It is instantiated by user main (or equivalent function) instead -of G4[MT]RunManager. It controls the creation of tbb::tasks. -See G4MTRunManager for documentation of methods relative to base -class. Only class specific methods are documented here. - -tbbWorkerRunManager --------------------- -This class implements the worker model run manager for TBB based -application. -It is instantiated by tbbUserWorkerInitialization and used by -tbbMasterRunManager. -See G4WorkerRunManager for documentation of methods relative to -base class. Only class specific methods are documented here. - -tbbUserWorkerInitialization ---------------------------- -This class implements TBB specific worker initialization. -It is a sub-class of G4UserWorkerThreadInitialization. -Its role is to instantiate a tbbWorkerRunManager to be used by -tbb tasks. - -tbbTask ---------------------------- -This class represents one TBB task. diff --git a/examples/extended/parallel/TBB/B2b/exampleB2.in b/examples/extended/parallel/TBB/B2b/exampleB2.in deleted file mode 100644 index b1bb66e844..0000000000 --- a/examples/extended/parallel/TBB/B2b/exampleB2.in +++ /dev/null @@ -1,25 +0,0 @@ -/tracking/verbose 1 - -# e+ 200MeV -/gun/energy 200 MeV -/gun/particle e+ -/run/beamOn 1 - -# mu+ 1TeV -/gun/energy 1 TeV -/gun/particle mu+ -/run/beamOn 1 - -/tracking/verbose 0 - -# e+ 200MeV -/gun/energy 200 MeV -/gun/particle e+ -/run/beamOn 100 - -# mu+ 1TeV -/gun/energy 1 TeV -/gun/particle mu+ -/run/beamOn 100 - -exit diff --git a/examples/extended/parallel/TBB/B2b/exampleB2b.out b/examples/extended/parallel/TBB/B2b/exampleB2b.out deleted file mode 100644 index 5cb70f6ee5..0000000000 --- a/examples/extended/parallel/TBB/B2b/exampleB2b.out +++ /dev/null @@ -1,9943 +0,0 @@ - - ############################################ - !!! WARNING - FPE detection is activated !!! - ############################################ - -************************************************************* - Geant4 version Name: geant4-09-06-ref-09 (30-September-2013) - Copyright : Geant4 Collaboration - Reference : NIM A 506 (2003), 250-303 - WWW : http://cern.ch/geant4 -************************************************************* - -<<< Geant4 Physics List simulation engine: FTFP_BERT 2.0 - - -***** Table : Nb of materials = 3 ***** - - Material: G4_AIR density: 1.205 mg/cm3 RadL: 303.921 m Nucl.Int.Length: 710.137 m - Imean: 85.700 eV temperature: 273.15 K pressure: 1.00 atm - - ---> Element: C (C) Z = 6.0 N = 12.0 A = 12.01 g/mole - ---> Isotope: C12 Z = 6 N = 12 A = 12.00 g/mole abundance: 98.93 % - ---> Isotope: C13 Z = 6 N = 13 A = 13.00 g/mole abundance: 1.07 % - ElmMassFraction: 0.01 % ElmAbundance 0.02 % - - ---> Element: N (N) Z = 7.0 N = 14.0 A = 14.01 g/mole - ---> Isotope: N14 Z = 7 N = 14 A = 14.00 g/mole abundance: 99.63 % - ---> Isotope: N15 Z = 7 N = 15 A = 15.00 g/mole abundance: 0.37 % - ElmMassFraction: 75.53 % ElmAbundance 78.44 % - - ---> Element: O (O) Z = 8.0 N = 16.0 A = 16.00 g/mole - ---> Isotope: O16 Z = 8 N = 16 A = 15.99 g/mole abundance: 99.76 % - ---> Isotope: O17 Z = 8 N = 17 A = 17.00 g/mole abundance: 0.04 % - ---> Isotope: O18 Z = 8 N = 18 A = 18.00 g/mole abundance: 0.20 % - ElmMassFraction: 23.18 % ElmAbundance 21.07 % - - ---> Element: Ar (Ar) Z = 18.0 N = 40.0 A = 39.95 g/mole - ---> Isotope: Ar36 Z = 18 N = 36 A = 35.97 g/mole abundance: 0.34 % - ---> Isotope: Ar38 Z = 18 N = 38 A = 37.96 g/mole abundance: 0.06 % - ---> Isotope: Ar40 Z = 18 N = 40 A = 39.96 g/mole abundance: 99.60 % - ElmMassFraction: 1.28 % ElmAbundance 0.47 % - - - Material: G4_Pb density: 11.350 g/cm3 RadL: 5.613 mm Nucl.Int.Length: 18.247 cm - Imean: 823.000 eV - - ---> Element: Pb (Pb) Z = 82.0 N = 207.2 A = 207.22 g/mole - ---> Isotope: Pb204 Z = 82 N = 204 A = 203.97 g/mole abundance: 1.40 % - ---> Isotope: Pb206 Z = 82 N = 206 A = 205.97 g/mole abundance: 24.10 % - ---> Isotope: Pb207 Z = 82 N = 207 A = 206.98 g/mole abundance: 22.10 % - ---> Isotope: Pb208 Z = 82 N = 208 A = 207.98 g/mole abundance: 52.40 % - ElmMassFraction: 100.00 % ElmAbundance 100.00 % - - - Material: G4_Xe density: 5.485 mg/cm3 RadL: 15.462 m Nucl.Int.Length: 324.140 m - Imean: 482.000 eV temperature: 273.15 K pressure: 1.00 atm - - ---> Element: Xe (Xe) Z = 54.0 N = 131.4 A = 131.29 g/mole - ---> Isotope: Xe124 Z = 54 N = 124 A = 123.91 g/mole abundance: 0.09 % - ---> Isotope: Xe126 Z = 54 N = 126 A = 125.90 g/mole abundance: 0.09 % - ---> Isotope: Xe128 Z = 54 N = 128 A = 127.90 g/mole abundance: 1.92 % - ---> Isotope: Xe129 Z = 54 N = 129 A = 128.91 g/mole abundance: 26.44 % - ---> Isotope: Xe130 Z = 54 N = 130 A = 129.90 g/mole abundance: 4.08 % - ---> Isotope: Xe131 Z = 54 N = 131 A = 130.90 g/mole abundance: 21.18 % - ---> Isotope: Xe132 Z = 54 N = 132 A = 131.90 g/mole abundance: 26.89 % - ---> Isotope: Xe134 Z = 54 N = 134 A = 133.91 g/mole abundance: 10.44 % - ---> Isotope: Xe136 Z = 54 N = 136 A = 135.91 g/mole abundance: 8.87 % - ElmMassFraction: 100.00 % ElmAbundance 100.00 % - - - -Computed tolerance = 5.88e-08 mm -Checking overlaps for volume Target ... OK! -Target is 5 cm of G4_Pb -Checking overlaps for volume Tracker ... OK! -Checking overlaps for parameterised volume Chamber ... OK! -There are 5 chambers in the tracker region. -The chambers are 20 cm of G4_Xe -The distance between chamber is 80 cm -### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 -Visualization Manager instantiating with verbosity "warnings (3)"... -Visualization Manager initialising... -Registering graphics systems... - -You have successfully registered the following graphics systems. -Current available graphics systems are: - ASCIITree (ATree) - DAWNFILE (DAWNFILE) - G4HepRep (HepRepXML) - G4HepRepFile (HepRepFile) - OpenGLImmediateQt (OGLI, OGLIQt) - OpenGLImmediateX (OGLIX) - OpenGLImmediateXm (OGLIXm, OGLI_FALLBACK, OGLIQt_FALLBACK) - OpenGLStoredQt (OGL, OGLS, OGLSQt) - OpenGLStoredX (OGLSX) - OpenGLStoredXm (OGLSXm, OGL_FALLBACK, OGLS_FALLBACK, OGLSQt_FALLBACK) - RayTracer (RayTracer) - RayTracerX (RayTracerX) - VRML1FILE (VRML1FILE) - VRML2FILE (VRML2FILE) - gMocrenFile (gMocrenFile) - -Registering model factories... - -You have successfully registered the following model factories. -Registered model factories: - generic - drawByCharge - drawByParticleID - drawByOriginVolume - drawByAttribute - -Registered filter factories: - chargeFilter - particleFilter - originVolumeFilter - attributeFilter - -You have successfully registered the following user vis actions. -Run Duration User Vis Actions: none -End of Event User Vis Actions: none -End of Run User Vis Actions: none - -Some /vis commands (optionally) take a string to specify colour. -Available colours: - black, blue, brown, cyan, gray, green, grey, magenta, red, white, yellow - - -phot: for gamma, applyCuts: 1 SubType= 12 - LambdaPrime table from 200 keV to 10 TeV in 54 bins - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - PhotoElectric : Emin= 0 eV Emax= 10 TeV AngularGenSauterGavrila FluoActive - -compt: for gamma, applyCuts: 1 SubType= 13 - Lambda table from 100 eV to 1 MeV in 28 bins, spline: 1 - LambdaPrime table from 1 MeV to 10 TeV in 49 bins - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Klein-Nishina : Emin= 0 eV Emax= 10 TeV - -conv: for gamma, applyCuts: 1 SubType= 14 - Lambda table from 1.022 MeV to 10 TeV in 49 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - BetheHeitler : Emin= 0 eV Emax= 80 GeV - BetheHeitlerLPM : Emin= 80 GeV Emax= 10 TeV - -msc: for e- SubType= 10 - RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 MeV Table with 42 bins Emin= 100 eV Emax= 100 MeV - WentzelVIUni : Emin= 100 MeV Emax= 10 TeV Table with 35 bins Emin= 100 MeV Emax= 10 TeV - -eIoni: for e- SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MollerBhabha : Emin= 0 eV Emax= 10 TeV - -eBrem: for e- SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - LPM flag: 1 for E > 1 GeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen - eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen - -CoulombScat: for e-, applyCuts: 1 SubType= 1 - Lambda table from 100 MeV to 10 TeV in 35 bins, spline: 1 - 180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 100 MeV Emax= 10 TeV - -msc: for e+ SubType= 10 - RangeFactor= 0.04, stepLimitType: 1, latDisplacement: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 100 MeV Table with 42 bins Emin= 100 eV Emax= 100 MeV - WentzelVIUni : Emin= 100 MeV Emax= 10 TeV Table with 35 bins Emin= 100 MeV Emax= 10 TeV - -eIoni: for e+ SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MollerBhabha : Emin= 0 eV Emax= 10 TeV - -eBrem: for e+ SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - LPM flag: 1 for E > 1 GeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eBremSB : Emin= 0 eV Emax= 1 GeV DipBustGen - eBremLPM : Emin= 1 GeV Emax= 10 TeV DipBustGen - -annihil: for e+, applyCuts: 1 SubType= 5 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eplus2gg : Emin= 0 eV Emax= 10 TeV - -CoulombScat: for e+, applyCuts: 1 SubType= 1 - Lambda table from 100 MeV to 10 TeV in 35 bins, spline: 1 - 180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 100 MeV Emax= 10 TeV - -msc: for proton SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for proton SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 10 TeV - -hBrems: for proton SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for proton SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 13x1001 from 7.50618 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -msc: for GenericIon SubType= 10 - RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 10 TeV - -ionIoni: for GenericIon SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02 - Stopping Power data for 17 ion/material pairs - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - BraggIon : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 10 TeV - -msc: for alpha SubType= 10 - RangeFactor= 0.2, stepLimitType: 0, latDisplacement: 0 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - UrbanMsc : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -ionIoni: for alpha SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.01, dRoverRange= 0.1, integral: 1, fluct: 1, linLossLimit= 0.02 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - BraggIon : Emin= 0 eV Emax= 7.9452 MeV - BetheBloch : Emin= 7.9452 MeV Emax= 10 TeV - -msc: for anti_proton SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for anti_proton SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 2 MeV - BetheBloch : Emin= 2 MeV Emax= 10 TeV - -hBrems: for anti_proton SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for anti_proton SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 13x1001 from 7.50618 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -msc: for kaon+ SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for kaon+ SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 1.05231 MeV - BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV - -hBrems: for kaon+ SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for kaon+ SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 14x1001 from 3.94942 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -msc: for kaon- SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for kaon- SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 1.05231 MeV - BetheBloch : Emin= 1.05231 MeV Emax= 10 TeV - -hBrems: for kaon- SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for kaon- SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 14x1001 from 3.94942 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -msc: for mu+ SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -muIoni: for mu+ SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 200 keV - BetheBloch : Emin= 200 keV Emax= 1 GeV - MuBetheBloch : Emin= 1 GeV Emax= 10 TeV - -muBrems: for mu+ SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MuBrem : Emin= 0 eV Emax= 10 TeV - -muPairProd: for mu+ SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 17x1001 from 1 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - muPairProd : Emin= 0 eV Emax= 10 TeV - -CoulombScat: for mu+, applyCuts: 1 SubType= 1 - Lambda table from 100 eV to 10 TeV in 43 bins, spline: 1 - 180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 10 TeV - -msc: for mu- SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -muIoni: for mu- SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 200 keV - BetheBloch : Emin= 200 keV Emax= 1 GeV - MuBetheBloch : Emin= 1 GeV Emax= 10 TeV - -muBrems: for mu- SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - MuBrem : Emin= 0 eV Emax= 10 TeV - -muPairProd: for mu- SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 17x1001 from 1 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - muPairProd : Emin= 0 eV Emax= 10 TeV - -CoulombScat: for mu-, applyCuts: 1 SubType= 1 - Lambda table from 100 eV to 10 TeV in 43 bins, spline: 1 - 180 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - eCoulombScattering : Emin= 0 eV Emax= 10 TeV - -msc: for pi+ SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for pi+ SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - Bragg : Emin= 0 eV Emax= 297.505 keV - BetheBloch : Emin= 297.505 keV Emax= 10 TeV - -hBrems: for pi+ SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for pi+ SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 16x1001 from 1.11656 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -msc: for pi- SubType= 10 - RangeFactor= 0.2, step limit type: 0, lateralDisplacement: 1, polarAngleLimit(deg)= 180 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - WentzelVIUni : Emin= 0 eV Emax= 10 TeV Table with 77 bins Emin= 100 eV Emax= 10 TeV - -hIoni: for pi- SubType= 2 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - finalRange(mm)= 0.1, dRoverRange= 0.2, integral: 1, fluct: 1, linLossLimit= 0.01 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - ICRU73QO : Emin= 0 eV Emax= 297.505 keV - BetheBloch : Emin= 297.505 keV Emax= 10 TeV - -hBrems: for pi- SubType= 3 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hBrem : Emin= 0 eV Emax= 10 TeV - -hPairProd: for pi- SubType= 4 - dE/dx and range tables from 100 eV to 10 TeV in 77 bins - Lambda tables from threshold to 10 TeV in 77 bins, spline: 1 - Sampling table 16x1001 from 1.11656 GeV to 10 TeV - ===== EM models for the G4Region DefaultRegionForTheWorld ====== - hPairProd : Emin= 0 eV Emax= 10 TeV - -==================================================================== - HADRONIC PROCESSES SUMMARY (verbose level 1) - ---------------------------------------------------- - Hadronic Processes for GenericIon - - Process: ionInelastic - Model: Binary Light Ion Cascade: 0 eV ---> 4 GeV - Model: FTFP: 2 GeV ---> 100 TeV - Cr_sctns: Glauber-Gribov nucleus nucleus: 0 eV ---> 2.88022e+295 J - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for anti_neutron - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: anti_neutronInelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for anti_proton - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100.1 MeV - Model: AntiAElastic: 100 MeV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: anti_protonInelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: AntiAGlauber: 0 eV ---> 2.88022e+295 J - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - - Process: hFritiofCaptureAtRest - ---------------------------------------------------- - Hadronic Processes for e+ - - Process: positronNuclear - Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for e- - - Process: electronNuclear - Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV - Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for gamma - - Process: photonNuclear - Model: BertiniCascade: 0 eV ---> 3.5 GeV - Model: TheoFSGenerator: 3 GeV ---> 100 TeV - Cr_sctns: PhotoNuclearXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for kaon+ - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: kaon+Inelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: ChipsKaonPlusInelasticXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for kaon- - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: kaon-Inelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: ChipsKaonMinusInelasticXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - - Process: hBertiniCaptureAtRest - ---------------------------------------------------- - Hadronic Processes for lambda - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: lambdaInelastic - Model: BertiniCascade: 0 eV ---> 6 GeV - Model: FTFP: 2 GeV ---> 100 TeV - Cr_sctns: ChipsHyperonInelasticXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for mu- - - Process: muMinusCaptureAtRest - ---------------------------------------------------- - Hadronic Processes for neutron - - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: ChipsNeutronElasticXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: neutronInelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaCaptureXS: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for pi+ - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 1.0001 GeV - Model: hElasticGlauber: 1 GeV ---> 100 TeV - Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: pi+Inelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: G4CrossSectionPairGG: 0 eV ---> 100 TeV - G4CrossSectionPairGG: G4PiNuclearCrossSection cross sections - below 91 GeV, Glauber-Gribov above - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - ---------------------------------------------------- - Hadronic Processes for pi- - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 1.0001 GeV - Model: hElasticGlauber: 1 GeV ---> 100 TeV - Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: pi-Inelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: G4CrossSectionPairGG: 0 eV ---> 100 TeV - G4CrossSectionPairGG: G4PiNuclearCrossSection cross sections - below 91 GeV, Glauber-Gribov above - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - - Process: hBertiniCaptureAtRest - ---------------------------------------------------- - Hadronic Processes for proton - - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: ChipsProtonElasticXS: 0 eV ---> 100 TeV - Cr_sctns: GheishaElastic: 0 eV ---> 100 TeV - - Process: protonInelastic - Model: FTFP: 4 GeV ---> 100 TeV - Model: BertiniCascade: 0 eV ---> 5 GeV - Cr_sctns: Barashenkov-Glauber: 0 eV ---> 100 TeV - Cr_sctns: GheishaInelastic: 0 eV ---> 100 TeV - -================================================================ -### Run 0 start. - ----> Begin of event: 0 - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -2.94e+03 200 0 0 0 World initStep - 1 -0.00135 -0.00453 -2.92e+03 200 0.00378 21.7 21.7 World eIoni - 2 0.113 0.0322 -2.82e+03 200 0.0165 94 116 World eIoni - 3 0.277 0.191 -2.69e+03 200 0.0269 138 254 World eIoni - 4 0.275 0.191 -2.68e+03 200 0.00071 1.73 255 World eIoni - 5 0.261 0.221 -2.62e+03 200 0.012 67.1 322 World eIoni - 6 0.255 0.224 -2.61e+03 200 0.000721 5.05 328 World eIoni - 7 0.491 0.353 -2.46e+03 200 0.0354 153 481 World eIoni - 8 0.507 0.353 -2.45e+03 200 0.00193 9.31 490 Target Transportation - 9 0.509 0.344 -2.45e+03 198 0.892 0.769 491 Target eBrem - 10 0.515 0.33 -2.45e+03 192 0.702 0.534 491 Target eBrem - 11 0.519 0.328 -2.45e+03 186 0.082 0.112 491 Target eBrem - 12 0.523 0.32 -2.45e+03 185 0.275 0.291 492 Target eBrem - 13 0.529 0.31 -2.45e+03 183 1.35 1.18 493 Target eBrem - 14 0.529 0.31 -2.45e+03 182 0.00045 0.000663 493 Target eBrem - 15 0.538 0.331 -2.45e+03 180 0.565 0.507 493 Target eIoni - 16 0.533 0.332 -2.45e+03 176 0.298 0.205 494 Target eBrem - 17 0.533 0.332 -2.45e+03 165 0.0101 0.0122 494 Target eBrem - 18 0.523 0.332 -2.45e+03 158 0.393 0.324 494 Target eBrem - 19 0.508 0.332 -2.45e+03 157 0.383 0.276 494 Target eBrem - 20 0.496 0.331 -2.45e+03 123 0.293 0.236 494 Target eBrem - 21 0.484 0.353 -2.45e+03 120 0.7 0.507 495 Target eBrem - 22 0.448 0.368 -2.44e+03 119 1.04 0.911 496 Target eBrem - 23 0.443 0.374 -2.44e+03 119 0.144 0.12 496 Target CoulombScat - 24 0.439 0.392 -2.44e+03 113 0.0412 0.0377 496 Target eBrem - 25 0.425 0.472 -2.44e+03 98.7 0.2 0.161 496 Target eBrem - 26 0.353 0.924 -2.44e+03 71 1.78 0.912 497 Target eBrem - 27 0.319 1.07 -2.44e+03 67.4 0.304 0.294 497 Target eBrem - 28 0.152 1.44 -2.44e+03 36.2 1.32 0.775 498 Target eBrem - 29 -0.0861 3.17 -2.44e+03 7.1 3.58 2.45 501 Target eBrem - 30 -1.16 3.54 -2.44e+03 5.45 1.46 1.34 502 Target eBrem - 31 -1.2 3.57 -2.44e+03 5.26 0.0481 0.0538 502 Target eBrem - 32 -1.33 3.57 -2.44e+03 4.93 0.158 0.148 502 Target eBrem - 33 -1.39 3.59 -2.44e+03 2.51 0.0643 0.0867 502 Target eBrem - 34 -1.39 3.59 -2.44e+03 2.28 0.00426 0.00324 502 Target eBrem - 35 -1.47 3.81 -2.44e+03 0.714 0.452 0.267 503 Target eBrem - 36 -1.5 3.85 -2.44e+03 0 0.714 0.485 503 Target eIoni - 37 -1.5 3.85 -2.44e+03 0 0 0 503 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.538 0.331 -2.45e+03 1.54 0 0 0 Target initStep - 1 -0.24 0.912 -2.45e+03 0.287 1.26 1.17 1.17 Target eIoni - 2 -0.236 0.917 -2.45e+03 0 0.287 0.139 1.31 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.491 0.353 -2.46e+03 0.00108 0 0 0 World initStep - 1 0.47 0.368 -2.46e+03 0 0.00108 0.0639 0.0639 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.255 0.224 -2.61e+03 0.00275 0 0 0 World initStep - 1 0.186 0.126 -2.61e+03 0 0.00275 0.272 0.272 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.261 0.221 -2.62e+03 0.00247 0 0 0 World initStep - 1 0.204 0.302 -2.62e+03 0 0.00247 0.227 0.227 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.275 0.191 -2.68e+03 0.00143 0 0 0 World initStep - 1 0.238 0.208 -2.68e+03 0 0.00143 0.0961 0.0961 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.277 0.191 -2.69e+03 0.00349 0 0 0 World initStep - 1 0.415 0.0741 -2.69e+03 0 0.00349 0.409 0.409 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.113 0.0322 -2.82e+03 0.00123 0 0 0 World initStep - 1 0.107 0.0636 -2.82e+03 0 0.00123 0.0771 0.0771 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00135 -0.00453 -2.92e+03 0.0482 0 0 0 World initStep - 1 -8.88 -4.99 -2.92e+03 0.0424 0.00576 11.1 11.1 World eIoni - 2 -13.1 -7.13 -2.92e+03 0.037 0.00416 5 16.1 World eIoni - 3 -16.7 -7.93 -2.91e+03 0.0324 0.00464 7.45 23.5 World eIoni - 4 -17 -8.87 -2.91e+03 0.0294 0.00128 1.62 25.1 World eIoni - 5 -17.8 -13 -2.91e+03 0.0248 0.00457 5.41 30.5 World eIoni - 6 -18.3 -17 -2.91e+03 0.02 0.00484 4.37 34.9 World eIoni - 7 -18.1 -19.4 -2.91e+03 0.0158 0.00419 3.41 38.3 World eIoni - 8 -17.1 -21.5 -2.91e+03 0.011 0.00475 2.7 41 World eIoni - 9 -16.8 -21.3 -2.91e+03 0.007 0.00404 1.99 43 World eIoni - 10 -16.8 -22.2 -2.91e+03 0.00315 0.00385 1.31 44.3 World eIoni - 11 -16.9 -22.2 -2.9e+03 0 0.00315 0.342 44.6 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 38, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -17 -8.87 -2.91e+03 0.00173 0 0 0 World initStep - 1 -17 -8.92 -2.91e+03 0 0.00173 0.129 0.129 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 37, Parent ID = 2 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -13.1 -7.13 -2.92e+03 0.00121 0 0 0 World initStep - 1 -13.1 -7.1 -2.92e+03 0 0.00121 0.0748 0.0748 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 36, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.5 3.85 -2.44e+03 0.511 0 0 0 Target initStep - 1 1.93 0.406 -2.45e+03 0.324 0.187 10.1 10.1 Target compt - 2 2.36 1.59 -2.45e+03 0.324 0 1.67 11.8 World Transportation - 3 192 526 -2.94e+03 0.324 0 743 754 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 35, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.5 3.85 -2.44e+03 0.511 0 0 0 Target initStep - 1 -2.08 4.43 -2.44e+03 0.275 0.236 1.71 1.71 Target compt - 2 -2.05 3.94 -2.44e+03 0 0.275 0.568 2.27 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 34, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.47 3.81 -2.44e+03 1.12 0 0 0 Target initStep - 1 -6.94 12.9 -2.44e+03 0.855 0.264 11.5 11.5 Target compt - 2 -9.47 19.5 -2.44e+03 0.507 0.348 7.04 18.6 Target compt - 3 -9.08 20.1 -2.44e+03 0 0.507 0.855 19.4 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 33, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.39 3.59 -2.44e+03 0.218 0 0 0 Target initStep - 1 -1.98 4.03 -2.44e+03 0.131 0.0863 0.814 0.814 Target compt - 2 -1.42 4.26 -2.44e+03 0 0.131 0.618 1.43 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 32, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.39 3.59 -2.44e+03 2.36 0 0 0 Target initStep - 1 -14.4 13 -2.45e+03 0 0.088 18.1 18.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 39, Parent ID = 32 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -14.4 13 -2.45e+03 2.27 0 0 0 Target initStep - 1 -14.7 12.8 -2.45e+03 1.92 0.348 0.38 0.38 Target msc - 2 -14.8 12.7 -2.45e+03 1.6 0.321 0.335 0.714 Target msc - 3 -14.6 12.6 -2.45e+03 1.23 0.375 0.333 1.05 Target msc - 4 -14.1 12.5 -2.45e+03 0.076 0.983 0.907 1.95 Target eBrem - 5 -14.1 12.5 -2.45e+03 0 0.076 0.0176 1.97 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 40, Parent ID = 39 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -14.1 12.5 -2.45e+03 0.169 0 0 0 Target initStep - 1 -14.1 12.5 -2.45e+03 0 0.169 0.22 0.22 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 31, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.33 3.57 -2.44e+03 0.168 0 0 0 Target initStep - 1 -1.48 3.6 -2.44e+03 0.109 0.0587 0.167 0.167 Target compt - 2 -1.46 3.59 -2.44e+03 0 0.109 0.0207 0.188 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 30, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.2 3.57 -2.44e+03 0.141 0 0 0 Target initStep - 1 -1.37 3.63 -2.44e+03 0 0.141 0.212 0.212 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 29, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.16 3.54 -2.44e+03 0.198 0 0 0 Target initStep - 1 -1.23 3.61 -2.44e+03 0 0.198 0.106 0.106 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 28, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0861 3.17 -2.44e+03 25.5 0 0 0 Target initStep - 1 -18.3 15.6 -2.44e+03 0 0 22.2 22.2 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 41, Parent ID = 28 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.3 15.6 -2.44e+03 14 0 0 0 Target initStep - 1 -18.3 15.6 -2.44e+03 13.7 0.0249 0.0473 0.0473 Target eBrem - 2 -18.4 15.6 -2.44e+03 11.7 0.0871 0.0753 0.123 Target eBrem - 3 -19.2 16 -2.44e+03 10.7 0.974 0.932 1.05 Target msc - 4 -19.2 16 -2.44e+03 10.7 0.0614 0.0716 1.13 World Transportation - 5 -94.8 136 -2.41e+03 10.6 0.0239 146 147 World eIoni - 6 -111 162 -2.4e+03 10.6 0.00547 31.9 179 Tracker Transportation - 7 -161 245 -2.38e+03 10.6 0.0135 100 279 Tracker StepLimiter - 8 -212 328 -2.35e+03 10.6 0.0153 100 379 Tracker StepLimiter - 9 -235 366 -2.34e+03 10.6 0.00893 45.8 425 Tracker eIoni - 10 -284 449 -2.31e+03 10.6 0.0173 100 525 Tracker StepLimiter - 11 -305 486 -2.3e+03 10.6 0.00612 43.9 569 Tracker eIoni - 12 -337 540 -2.29e+03 10.5 0.00948 64.7 634 Tracker eIoni - 13 -342 550 -2.28e+03 10.3 0.00364 11.2 645 Tracker eIoni - 14 -389 633 -2.26e+03 10.3 0.0163 100 745 Tracker StepLimiter - 15 -395 642 -2.25e+03 10.3 0.00136 11.5 756 Tracker eIoni - 16 -440 727 -2.22e+03 10.3 0.0168 100 856 Tracker StepLimiter - 17 -460 763 -2.21e+03 10.3 0.00603 43.7 900 Tracker eIoni - 18 -476 792 -2.2e+03 10.3 0.00384 33.5 933 Tracker eIoni - 19 -484 808 -2.2e+03 10.3 0.00281 18.8 952 Tracker eIoni - 20 -490 819 -2.19e+03 10.3 0.00303 13.6 966 Tracker eIoni - 21 -522 875 -2.18e+03 10.2 0.00999 65.9 1.03e+03 Tracker eIoni - 22 -557 943 -2.16e+03 10.2 0.0126 79.9 1.11e+03 Tracker eIoni - 23 -561 950 -2.15e+03 10.2 0.00132 7.91 1.12e+03 Tracker eIoni - 24 -606 1.04e+03 -2.13e+03 10.2 0.0163 100 1.22e+03 Tracker StepLimiter - 25 -649 1.12e+03 -2.1e+03 10.2 0.0123 100 1.32e+03 Tracker StepLimiter - 26 -663 1.15e+03 -2.09e+03 10.2 0.00634 31.8 1.35e+03 Tracker eIoni - 27 -680 1.18e+03 -2.08e+03 10.2 0.00599 37.8 1.39e+03 Tracker eIoni - 28 -727 1.27e+03 -2.06e+03 10.2 0.0151 100 1.49e+03 Tracker StepLimiter - 29 -733 1.28e+03 -2.05e+03 10.2 0.00376 13.1 1.5e+03 Tracker eIoni - 30 -737 1.28e+03 -2.05e+03 10.2 0.00133 9.3 1.51e+03 Tracker eIoni - 31 -783 1.37e+03 -2.02e+03 10.1 0.0178 98.1 1.61e+03 Tracker eIoni - 32 -817 1.43e+03 -2e+03 10.1 0.0101 75.6 1.69e+03 Tracker eIoni - 33 -861 1.52e+03 -1.98e+03 10.1 0.0152 100 1.79e+03 Tracker StepLimiter - 34 -908 1.6e+03 -1.95e+03 10.1 0.0195 100 1.89e+03 Tracker StepLimiter - 35 -925 1.63e+03 -1.94e+03 10.1 0.00596 38.9 1.92e+03 Tracker eIoni - 36 -970 1.72e+03 -1.91e+03 10.1 0.0155 100 2.02e+03 Tracker StepLimiter - 37 -972 1.72e+03 -1.91e+03 10.1 0.000502 5.29 2.03e+03 Tracker eIoni - 38 -986 1.75e+03 -1.9e+03 10.1 0.00256 28.1 2.06e+03 Tracker eIoni - 39 -1.02e+03 1.8e+03 -1.88e+03 10 0.0136 64.6 2.12e+03 Tracker eIoni - 40 -1.06e+03 1.89e+03 -1.86e+03 10 0.0161 100 2.22e+03 Tracker StepLimiter - 41 -1.11e+03 1.97e+03 -1.83e+03 10 0.0185 100 2.32e+03 Tracker StepLimiter - 42 -1.12e+03 1.99e+03 -1.82e+03 9.93 0.00439 20.8 2.34e+03 Tracker eIoni - 43 -1.14e+03 2.02e+03 -1.81e+03 9.89 0.00574 42.7 2.39e+03 Tracker eIoni - 44 -1.17e+03 2.09e+03 -1.79e+03 9.87 0.0151 81.9 2.47e+03 World Transportation - 45 -1.23e+03 2.22e+03 -1.75e+03 9.85 0.0224 144 2.61e+03 World eIoni - 46 -1.25e+03 2.26e+03 -1.74e+03 9.84 0.00763 42.1 2.65e+03 World eIoni - 47 -1.27e+03 2.31e+03 -1.72e+03 9.78 0.00673 57.5 2.71e+03 World eIoni - 48 -1.37e+03 2.51e+03 -1.65e+03 9.71 0.0362 241 2.95e+03 World eIoni - 49 -1.39e+03 2.54e+03 -1.64e+03 7.33 0.00465 30.2 2.98e+03 World eIoni - 50 -1.4e+03 2.57e+03 -1.63e+03 7.32 0.00557 36.4 3.02e+03 World eIoni - 51 -1.42e+03 2.67e+03 -1.58e+03 7.31 0.0148 114 3.13e+03 World eIoni - 52 -1.43e+03 2.69e+03 -1.57e+03 7.3 0.00256 22.7 3.16e+03 World eIoni - 53 -1.43e+03 2.69e+03 -1.57e+03 7.3 5.49e-05 0.838 3.16e+03 World eIoni - 54 -1.43e+03 2.71e+03 -1.57e+03 7.3 0.000966 15.3 3.17e+03 World eIoni - 55 -1.47e+03 2.83e+03 -1.51e+03 7.27 0.0196 142 3.31e+03 World eIoni - 56 -1.47e+03 2.84e+03 -1.51e+03 7.27 0.000437 3.3 3.32e+03 World eIoni - 57 -1.48e+03 2.88e+03 -1.49e+03 7.26 0.008 45.3 3.36e+03 World eIoni - 58 -1.5e+03 2.94e+03 -1.47e+03 7.25 0.0112 72.1 3.44e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 82, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.48e+03 2.88e+03 -1.49e+03 0.00352 0 0 0 World initStep - 1 -1.48e+03 2.88e+03 -1.49e+03 0 0.00352 0.415 0.415 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 81, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.47e+03 2.84e+03 -1.51e+03 0.0021 0 0 0 World initStep - 1 -1.47e+03 2.84e+03 -1.51e+03 0 0.0021 0.175 0.175 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 80, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.47e+03 2.83e+03 -1.51e+03 0.00284 0 0 0 World initStep - 1 -1.47e+03 2.83e+03 -1.51e+03 0 0.00284 0.287 0.287 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 79, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.43e+03 2.71e+03 -1.57e+03 0.00581 0 0 0 World initStep - 1 -1.43e+03 2.71e+03 -1.57e+03 0 0.00581 1 1 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 78, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.43e+03 2.69e+03 -1.57e+03 0.00204 0 0 0 World initStep - 1 -1.43e+03 2.69e+03 -1.57e+03 0 0.00204 0.167 0.167 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 77, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.43e+03 2.69e+03 -1.57e+03 0.00169 0 0 0 World initStep - 1 -1.43e+03 2.69e+03 -1.57e+03 0 0.00169 0.125 0.125 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 76, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.42e+03 2.67e+03 -1.58e+03 0.00203 0 0 0 World initStep - 1 -1.42e+03 2.67e+03 -1.58e+03 0.00195 8.54e-05 0.0209 0.0209 World eIoni - 2 -1.42e+03 2.67e+03 -1.58e+03 0 0.00195 0.155 0.176 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 75, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.4e+03 2.57e+03 -1.63e+03 0.00118 0 0 0 World initStep - 1 -1.4e+03 2.57e+03 -1.63e+03 0 0.00118 0.0721 0.0721 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 74, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.39e+03 2.54e+03 -1.64e+03 2.37 0 0 0 World initStep - 1 -1.52e+03 2.66e+03 -1.62e+03 2.34 0.0234 184 184 World eIoni - 2 -1.56e+03 2.7e+03 -1.62e+03 2.33 0.00746 56.3 240 World eIoni - 3 -1.57e+03 2.73e+03 -1.61e+03 2.33 0.0048 30.8 271 World eIoni - 4 -1.59e+03 2.75e+03 -1.61e+03 2.32 0.00227 21.3 292 World eIoni - 5 -1.59e+03 2.75e+03 -1.61e+03 2.32 0.000822 9.01 301 World eIoni - 6 -1.63e+03 2.81e+03 -1.6e+03 2.31 0.00797 66.3 367 World eIoni - 7 -1.71e+03 2.94e+03 -1.59e+03 2.28 0.0231 157 524 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 88, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.63e+03 2.81e+03 -1.6e+03 0.00661 0 0 0 World initStep - 1 -1.63e+03 2.81e+03 -1.6e+03 0.00303 0.00166 0.738 0.738 World eIoni - 2 -1.63e+03 2.81e+03 -1.6e+03 0 0.00303 0.32 1.06 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 89, Parent ID = 88 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.63e+03 2.81e+03 -1.6e+03 0.00192 0 0 0 World initStep - 1 -1.63e+03 2.81e+03 -1.6e+03 0 0.00192 0.152 0.152 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 87, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.59e+03 2.75e+03 -1.61e+03 0.00167 0 0 0 World initStep - 1 -1.59e+03 2.75e+03 -1.61e+03 0 0.00167 0.122 0.122 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 86, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.59e+03 2.75e+03 -1.61e+03 0.00196 0 0 0 World initStep - 1 -1.59e+03 2.75e+03 -1.61e+03 0 0.00196 0.157 0.157 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 85, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.57e+03 2.73e+03 -1.61e+03 0.0012 0 0 0 World initStep - 1 -1.57e+03 2.73e+03 -1.61e+03 0 0.0012 0.0742 0.0742 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 84, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.56e+03 2.7e+03 -1.62e+03 0.00124 0 0 0 World initStep - 1 -1.56e+03 2.7e+03 -1.62e+03 0 0.00124 0.0777 0.0777 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 83, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.52e+03 2.66e+03 -1.62e+03 0.00314 0 0 0 World initStep - 1 -1.52e+03 2.66e+03 -1.62e+03 0 0.00314 0.341 0.341 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 73, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.37e+03 2.51e+03 -1.65e+03 0.0428 0 0 0 World initStep - 1 -1.37e+03 2.52e+03 -1.65e+03 0.0378 0.00385 8.02 8.02 World eIoni - 2 -1.36e+03 2.52e+03 -1.66e+03 0.03 0.00782 7.68 15.7 World eIoni - 3 -1.36e+03 2.53e+03 -1.66e+03 0.0262 0.0038 5.56 21.3 World eIoni - 4 -1.36e+03 2.53e+03 -1.66e+03 0.0208 0.00545 4.68 25.9 World eIoni - 5 -1.36e+03 2.53e+03 -1.66e+03 0.017 0.0038 3.56 29.5 World eIoni - 6 -1.35e+03 2.53e+03 -1.66e+03 0.0123 0.00465 2.9 32.4 World eIoni - 7 -1.35e+03 2.53e+03 -1.66e+03 0.00599 0.00636 2.18 34.6 World eIoni - 8 -1.35e+03 2.53e+03 -1.66e+03 0.00161 0.00437 1.05 35.6 World eIoni - 9 -1.35e+03 2.53e+03 -1.66e+03 0 0.00161 0.116 35.8 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 90, Parent ID = 73 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.37e+03 2.52e+03 -1.65e+03 0.00105 0 0 0 World initStep - 1 -1.37e+03 2.52e+03 -1.65e+03 0 0.00105 0.0616 0.0616 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 72, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.27e+03 2.31e+03 -1.72e+03 0.0509 0 0 0 World initStep - 1 -1.27e+03 2.31e+03 -1.72e+03 0.0459 0.00205 3.39 3.39 World eIoni - 2 -1.26e+03 2.31e+03 -1.72e+03 0.0387 0.00725 10.3 13.6 World eIoni - 3 -1.26e+03 2.32e+03 -1.71e+03 0.0327 0.00594 7.92 21.6 World eIoni - 4 -1.26e+03 2.32e+03 -1.71e+03 0.0272 0.0055 6.25 27.8 World eIoni - 5 -1.26e+03 2.32e+03 -1.71e+03 0.0239 0.00164 2.66 30.5 World eIoni - 6 -1.26e+03 2.32e+03 -1.7e+03 0.0193 0.00462 4.17 34.7 World eIoni - 7 -1.26e+03 2.32e+03 -1.7e+03 0.0142 0.0051 3.28 37.9 World eIoni - 8 -1.26e+03 2.32e+03 -1.7e+03 0.00867 0.00217 0.599 38.5 World eIoni - 9 -1.26e+03 2.32e+03 -1.7e+03 0.00284 0.00584 1.62 40.2 World eIoni - 10 -1.26e+03 2.32e+03 -1.7e+03 0 0.00284 0.287 40.4 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 93, Parent ID = 72 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.26e+03 2.32e+03 -1.7e+03 0.00331 0 0 0 World initStep - 1 -1.26e+03 2.32e+03 -1.7e+03 0 0.00331 0.372 0.372 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 92, Parent ID = 72 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.26e+03 2.32e+03 -1.71e+03 0.00171 0 0 0 World initStep - 1 -1.26e+03 2.32e+03 -1.71e+03 0 0.00171 0.127 0.127 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 91, Parent ID = 72 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.27e+03 2.31e+03 -1.72e+03 0.00291 0 0 0 World initStep - 1 -1.27e+03 2.31e+03 -1.72e+03 0 0.00291 0.299 0.299 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 71, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.25e+03 2.26e+03 -1.74e+03 0.00101 0 0 0 World initStep - 1 -1.25e+03 2.26e+03 -1.74e+03 0 0.00101 0.0575 0.0575 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 70, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.23e+03 2.22e+03 -1.75e+03 0.00102 0 0 0 World initStep - 1 -1.23e+03 2.22e+03 -1.75e+03 0 0.00102 0.0588 0.0588 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 69, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.14e+03 2.02e+03 -1.81e+03 0.0372 0 0 0 Tracker initStep - 1 -1.14e+03 2.02e+03 -1.81e+03 0.0344 0.000215 0.927 0.927 Tracker eIoni - 2 -1.13e+03 2.03e+03 -1.8e+03 0.0271 0.00732 6.71 7.64 Tracker eIoni - 3 -1.14e+03 2.03e+03 -1.8e+03 0.0237 0.00337 4.87 12.5 Tracker eIoni - 4 -1.14e+03 2.03e+03 -1.8e+03 0.0189 0.00489 4.14 16.7 Tracker eIoni - 5 -1.13e+03 2.03e+03 -1.8e+03 0.0134 0.00548 3.21 19.9 Tracker eIoni - 6 -1.13e+03 2.03e+03 -1.8e+03 0.0116 0.000581 0.195 20.1 Tracker eIoni - 7 -1.13e+03 2.03e+03 -1.79e+03 0.00723 0.00338 1.97 22 Tracker eIoni - 8 -1.13e+03 2.03e+03 -1.79e+03 0.00128 0.00596 1.36 23.4 Tracker eIoni - 9 -1.13e+03 2.03e+03 -1.79e+03 0 0.00128 0.0815 23.5 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 96, Parent ID = 69 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.13e+03 2.03e+03 -1.79e+03 0.000992 0 0 0 Tracker initStep - 1 -1.13e+03 2.03e+03 -1.79e+03 0 0.000992 0.0564 0.0564 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 95, Parent ID = 69 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.13e+03 2.03e+03 -1.8e+03 0.00119 0 0 0 Tracker initStep - 1 -1.13e+03 2.03e+03 -1.8e+03 0 0.00119 0.0731 0.0731 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 94, Parent ID = 69 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.14e+03 2.02e+03 -1.81e+03 0.00253 0 0 0 Tracker initStep - 1 -1.14e+03 2.02e+03 -1.81e+03 0 0.00253 0.236 0.236 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 68, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.12e+03 1.99e+03 -1.82e+03 0.0723 0 0 0 Tracker initStep - 1 -1.12e+03 1.99e+03 -1.82e+03 0.0509 0.000655 1.91 1.91 Tracker eIoni - 2 -1.12e+03 1.99e+03 -1.83e+03 0.0446 0.00525 8.01 9.92 Tracker eIoni - 3 -1.11e+03 1.98e+03 -1.84e+03 0.0386 0.00446 8.89 18.8 Tracker eIoni - 4 -1.11e+03 1.98e+03 -1.85e+03 0.0328 0.00585 7.91 26.7 Tracker eIoni - 5 -1.11e+03 1.99e+03 -1.85e+03 0.0293 0.00343 6.26 33 Tracker eIoni - 6 -1.11e+03 1.99e+03 -1.85e+03 0.0253 0.00402 5.39 38.4 Tracker eIoni - 7 -1.11e+03 1.99e+03 -1.86e+03 0.0216 0.00369 4.47 42.8 Tracker eIoni - 8 -1.11e+03 2e+03 -1.85e+03 0.0173 0.00427 3.72 46.6 Tracker eIoni - 9 -1.11e+03 1.99e+03 -1.85e+03 0.0133 0.00409 2.95 49.5 Tracker eIoni - 10 -1.11e+03 1.99e+03 -1.85e+03 0.0103 0.00165 0.743 50.3 Tracker eIoni - 11 -1.11e+03 1.99e+03 -1.85e+03 0.00828 0 0.0234 50.3 Tracker eIoni - 12 -1.11e+03 1.99e+03 -1.85e+03 0.00679 0.000437 0.249 50.5 Tracker eIoni - 13 -1.11e+03 2e+03 -1.85e+03 0.00124 0.00555 1.26 51.8 Tracker eIoni - 14 -1.11e+03 2e+03 -1.85e+03 0 0.00124 0.0782 51.9 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 102, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.11e+03 1.99e+03 -1.85e+03 0.00105 0 0 0 Tracker initStep - 1 -1.11e+03 1.99e+03 -1.85e+03 0 0.00105 0.061 0.061 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 101, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.11e+03 1.99e+03 -1.85e+03 0.00202 0 0 0 Tracker initStep - 1 -1.11e+03 1.99e+03 -1.85e+03 0 0.00202 0.164 0.164 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 100, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.11e+03 1.99e+03 -1.85e+03 0.00131 0 0 0 Tracker initStep - 1 -1.11e+03 1.99e+03 -1.85e+03 0 0.00131 0.0848 0.0848 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 99, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.11e+03 1.98e+03 -1.84e+03 0.00149 0 0 0 Tracker initStep - 1 -1.11e+03 1.98e+03 -1.84e+03 0 0.00149 0.103 0.103 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 98, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.12e+03 1.99e+03 -1.83e+03 0.00113 0 0 0 Tracker initStep - 1 -1.12e+03 1.99e+03 -1.83e+03 0 0.00113 0.0677 0.0677 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 97, Parent ID = 68 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.12e+03 1.99e+03 -1.82e+03 0.0207 0 0 0 Tracker initStep - 1 -1.12e+03 1.99e+03 -1.82e+03 0.0177 0.00191 1.3 1.3 Tracker eIoni - 2 -1.12e+03 1.99e+03 -1.82e+03 0.0108 0.00353 2.13 3.44 Tracker eIoni - 3 -1.12e+03 1.99e+03 -1.83e+03 0.00634 0.00447 1.96 5.39 Tracker eIoni - 4 -1.12e+03 1.99e+03 -1.83e+03 0 0.00634 1.15 6.54 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 104, Parent ID = 97 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.12e+03 1.99e+03 -1.82e+03 0.00334 0 0 0 Tracker initStep - 1 -1.12e+03 1.99e+03 -1.82e+03 0 0.00334 0.379 0.379 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 103, Parent ID = 97 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.12e+03 1.99e+03 -1.82e+03 0.00113 0 0 0 Tracker initStep - 1 -1.12e+03 1.99e+03 -1.82e+03 0 0.00113 0.068 0.068 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 67, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.02e+03 1.8e+03 -1.88e+03 0.00142 0 0 0 Tracker initStep - 1 -1.02e+03 1.8e+03 -1.88e+03 0 0.00142 0.095 0.095 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 66, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -986 1.75e+03 -1.9e+03 0.0012 0 0 0 Tracker initStep - 1 -986 1.75e+03 -1.9e+03 0 0.0012 0.0747 0.0747 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 65, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -972 1.72e+03 -1.91e+03 0.00246 0 0 0 Tracker initStep - 1 -972 1.72e+03 -1.91e+03 0 0.00246 0.225 0.225 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 64, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -925 1.63e+03 -1.94e+03 0.00261 0 0 0 Tracker initStep - 1 -925 1.63e+03 -1.94e+03 0 0.00261 0.249 0.249 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 63, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -817 1.43e+03 -2e+03 0.00103 0 0 0 Tracker initStep - 1 -817 1.43e+03 -2e+03 0 0.00103 0.0592 0.0592 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 62, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -783 1.37e+03 -2.02e+03 0.00271 0 0 0 Tracker initStep - 1 -783 1.37e+03 -2.02e+03 0 0.00271 0.266 0.266 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 61, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -737 1.28e+03 -2.05e+03 0.00273 0 0 0 Tracker initStep - 1 -737 1.28e+03 -2.05e+03 0 0.00273 0.268 0.268 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 60, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -733 1.28e+03 -2.05e+03 0.0018 0 0 0 Tracker initStep - 1 -733 1.28e+03 -2.05e+03 0 0.0018 0.138 0.138 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 59, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -680 1.18e+03 -2.08e+03 0.00219 0 0 0 Tracker initStep - 1 -680 1.18e+03 -2.08e+03 0 0.00219 0.187 0.187 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 58, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -663 1.15e+03 -2.09e+03 0.0012 0 0 0 Tracker initStep - 1 -664 1.15e+03 -2.09e+03 0 0.0012 0.0739 0.0739 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 57, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -561 950 -2.15e+03 0.00265 0 0 0 Tracker initStep - 1 -561 950 -2.15e+03 0 0.00265 0.256 0.256 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 56, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -557 943 -2.16e+03 0.000996 0 0 0 Tracker initStep - 1 -557 943 -2.16e+03 0 0.000996 0.0568 0.0568 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 55, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -522 875 -2.18e+03 0.00615 0 0 0 Tracker initStep - 1 -522 874 -2.18e+03 0.000221 0.00593 1.1 1.1 Tracker eIoni - 2 -522 874 -2.18e+03 0 0.000221 0.00988 1.11 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 54, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -490 819 -2.19e+03 0.00113 0 0 0 Tracker initStep - 1 -490 819 -2.19e+03 0 0.00113 0.0679 0.0679 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 53, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -484 808 -2.2e+03 0.0057 0 0 0 Tracker initStep - 1 -484 808 -2.2e+03 0 0.0057 0.968 0.968 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 52, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -476 792 -2.2e+03 0.0054 0 0 0 Tracker initStep - 1 -476 792 -2.2e+03 0 0.0054 0.877 0.877 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 51, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -460 763 -2.21e+03 0.00144 0 0 0 Tracker initStep - 1 -460 763 -2.21e+03 0 0.00144 0.0974 0.0974 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 50, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -395 642 -2.25e+03 0.00374 0 0 0 Tracker initStep - 1 -395 642 -2.25e+03 0 0.00374 0.46 0.46 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 49, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -342 550 -2.28e+03 0.2 0 0 0 Tracker initStep - 1 -355 592 -2.32e+03 0.184 0.0126 59.1 59.1 Tracker eIoni - 2 -354 599 -2.33e+03 0.18 0.00194 11.9 71 Tracker eIoni - 3 -353 601 -2.34e+03 0.179 0.000978 4.21 75.2 Tracker eIoni - 4 -354 606 -2.35e+03 0.174 0.00394 12.4 87.6 Tracker eIoni - 5 -357 634 -2.4e+03 0.158 0.0153 65.4 153 World Transportation - 6 -364 634 -2.41e+03 0.154 0.00311 14.7 168 World eIoni - 7 -369 634 -2.42e+03 0.149 0.00205 7.06 175 World eIoni - 8 -369 634 -2.42e+03 0.149 0.000208 1.55 176 World eIoni - 9 -374 633 -2.43e+03 0.132 0.00244 9.68 186 World eIoni - 10 -389 623 -2.44e+03 0.125 0.00543 20.8 207 World eIoni - 11 -391 618 -2.44e+03 0.123 0.0022 6.19 213 World eIoni - 12 -393 594 -2.45e+03 0.115 0.00606 28.1 241 World eIoni - 13 -397 571 -2.46e+03 0.109 0.00481 24.3 265 World eIoni - 14 -405 559 -2.46e+03 0.101 0.00456 16.2 282 World eIoni - 15 -428 544 -2.48e+03 0.0912 0.0102 31.1 313 World eIoni - 16 -445 531 -2.5e+03 0.0821 0.00915 31.3 344 World eIoni - 17 -445 524 -2.5e+03 0.0757 0.00411 8.22 352 World eIoni - 18 -440 508 -2.51e+03 0.0654 0.0102 22.9 375 World eIoni - 19 -442 502 -2.51e+03 0.0612 0.00269 6.96 382 World eIoni - 20 -443 499 -2.51e+03 0.0553 0.00227 3.61 386 World eIoni - 21 -444 498 -2.51e+03 0.053 0.000521 1.64 387 World eIoni - 22 -449 490 -2.5e+03 0.0465 0.00454 9.75 397 World eIoni - 23 -445 489 -2.51e+03 0.0416 0.00375 4.92 402 World eIoni - 24 -442 488 -2.51e+03 0.0391 0.00256 3.9 406 World eIoni - 25 -443 487 -2.52e+03 0.0337 0.00533 8.05 414 World eIoni - 26 -442 492 -2.52e+03 0.0299 0.00385 6.52 420 World eIoni - 27 -438 494 -2.52e+03 0.0253 0.00458 5.53 426 World eIoni - 28 -436 496 -2.53e+03 0.0213 0.00401 4.47 430 World eIoni - 29 -434 497 -2.53e+03 0.017 0.00426 3.66 434 World eIoni - 30 -435 498 -2.53e+03 0.0128 0.00421 2.9 437 World eIoni - 31 -435 500 -2.53e+03 0.00927 0.00357 2.25 439 World eIoni - 32 -435 502 -2.53e+03 0.00307 0.00619 1.72 441 World eIoni - 33 -435 502 -2.53e+03 0 0.00307 0.328 441 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 120, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -445 489 -2.51e+03 0.00113 0 0 0 World initStep - 1 -445 489 -2.51e+03 0 0.00113 0.0683 0.0683 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 119, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -449 490 -2.5e+03 0.00197 0 0 0 World initStep - 1 -449 490 -2.5e+03 0 0.00197 0.158 0.158 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 118, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -444 498 -2.51e+03 0.00176 0 0 0 World initStep - 1 -444 498 -2.51e+03 0 0.00176 0.132 0.132 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 117, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -443 499 -2.51e+03 0.00365 0 0 0 World initStep - 1 -444 499 -2.51e+03 0 0.00365 0.442 0.442 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 116, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -442 502 -2.51e+03 0.00152 0 0 0 World initStep - 1 -442 502 -2.51e+03 0 0.00152 0.106 0.106 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 115, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -445 524 -2.5e+03 0.00231 0 0 0 World initStep - 1 -445 524 -2.5e+03 0 0.00231 0.203 0.203 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 114, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -405 559 -2.46e+03 0.00275 0 0 0 World initStep - 1 -405 559 -2.46e+03 0 0.00275 0.272 0.272 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 113, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -397 571 -2.46e+03 0.00157 0 0 0 World initStep - 1 -397 571 -2.46e+03 0 0.00157 0.111 0.111 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 112, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -393 594 -2.45e+03 0.00131 0 0 0 World initStep - 1 -393 594 -2.45e+03 0 0.00131 0.0849 0.0849 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 111, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -389 623 -2.44e+03 0.00162 0 0 0 World initStep - 1 -389 623 -2.44e+03 0 0.00162 0.117 0.117 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 110, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -374 633 -2.43e+03 0.015 0 0 0 World initStep - 1 -373 634 -2.43e+03 0.0139 0.00101 0.843 0.843 World eIoni - 2 -372 635 -2.43e+03 0.00973 0.00422 2.42 3.26 World eIoni - 3 -373 636 -2.43e+03 0.00446 0.00527 1.79 5.05 World eIoni - 4 -373 635 -2.43e+03 0 0.00446 0.625 5.68 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 109, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -369 634 -2.42e+03 0.0024 0 0 0 World initStep - 1 -369 634 -2.42e+03 0 0.0024 0.218 0.218 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 108, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -364 634 -2.41e+03 0.0014 0 0 0 World initStep - 1 -364 634 -2.41e+03 0 0.0014 0.093 0.093 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 107, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -354 606 -2.35e+03 0.00177 0 0 0 Tracker initStep - 1 -354 606 -2.35e+03 0 0.00177 0.134 0.134 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 106, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -354 599 -2.33e+03 0.00179 0 0 0 Tracker initStep - 1 -354 599 -2.33e+03 0 0.00179 0.136 0.136 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 105, Parent ID = 49 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -355 592 -2.32e+03 0.00297 0 0 0 Tracker initStep - 1 -355 592 -2.32e+03 0 0.00297 0.309 0.309 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 48, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -337 540 -2.29e+03 0.0126 0 0 0 Tracker initStep - 1 -336 541 -2.29e+03 0.00909 0.00347 2.21 2.21 Tracker eIoni - 2 -336 541 -2.29e+03 0.0089 0.000193 0.068 2.28 Tracker eIoni - 3 -337 541 -2.28e+03 0.00313 0.00577 1.66 3.94 Tracker eIoni - 4 -337 541 -2.29e+03 0 0.00313 0.339 4.28 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 47, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -305 486 -2.3e+03 0.00535 0 0 0 Tracker initStep - 1 -306 486 -2.3e+03 0 0.00535 0.864 0.864 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 46, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -235 366 -2.34e+03 0.0015 0 0 0 Tracker initStep - 1 -235 366 -2.34e+03 0 0.0015 0.104 0.104 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 45, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -94.8 136 -2.41e+03 0.00248 0 0 0 World initStep - 1 -94.9 136 -2.41e+03 0 0.00248 0.229 0.229 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 44, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.4 15.6 -2.44e+03 1.92 0 0 0 Target initStep - 1 -19.2 16 -2.44e+03 1.92 0 0.9 0.9 World Transportation - 2 -2.73e+03 1.13e+03 -2.94e+03 1.92 0 2.97e+03 2.97e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 43, Parent ID = 41 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.3 15.6 -2.44e+03 0.26 0 0 0 Target initStep - 1 -19.2 16 -2.44e+03 0.26 0 0.947 0.947 World Transportation - 2 -2.94e+03 1.43e+03 -2.53e+03 0.26 0 3.25e+03 3.25e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 27, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.152 1.44 -2.44e+03 29.9 0 0 0 Target initStep - 1 -0.0684 2 -2.44e+03 0 0 1.08 1.08 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 121, Parent ID = 27 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0684 2 -2.44e+03 19 0 0 0 Target initStep - 1 -0.0664 2.38 -2.44e+03 16.5 0.834 0.688 0.688 Target eBrem - 2 -0.203 2.59 -2.44e+03 15.9 0.313 0.308 0.996 Target eBrem - 3 -0.445 3.57 -2.44e+03 13.9 1.83 1.38 2.37 Target eBrem - 4 -0.593 5.52 -2.44e+03 9.03 3.5 2.02 4.4 Target eBrem - 5 0.185 5.75 -2.44e+03 7.21 1.68 0.979 5.38 Target eBrem - 6 0.49 5.9 -2.44e+03 6.62 0.409 0.415 5.79 Target eBrem - 7 0.676 5.66 -2.44e+03 5.14 0.737 0.733 6.53 Target eBrem - 8 0.104 5.25 -2.44e+03 2.93 0.834 0.789 7.32 Target eIoni - 9 -0.0694 5.3 -2.44e+03 2.04 0.185 0.183 7.5 Target eBrem - 10 0.232 5.93 -2.44e+03 0.38 1.66 1.43 8.93 Target eIoni - 11 0.22 5.93 -2.44e+03 0 0.38 0.209 9.14 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 130, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.104 5.25 -2.44e+03 1.37 0 0 0 Target initStep - 1 -0.433 4.7 -2.44e+03 0.107 1.27 1.05 1.05 Target eIoni - 2 -0.434 4.7 -2.44e+03 0 0.107 0.0306 1.08 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 131, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0694 5.3 -2.44e+03 0.705 0 0 0 Target initStep - 1 -0.636 4.43 -2.44e+03 0.388 0.317 1.27 1.27 Target compt - 2 -0.204 4.07 -2.44e+03 0.229 0.159 0.685 1.95 Target compt - 3 -0.214 4.1 -2.44e+03 0 0.229 0.0664 2.02 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 129, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.676 5.66 -2.44e+03 0.743 0 0 0 Target initStep - 1 -14.4 1.04 -2.42e+03 0.35 0.393 25.7 25.7 Target compt - 2 -16.4 2.69 -2.42e+03 0 0.35 2.61 28.3 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 128, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.49 5.9 -2.44e+03 0.177 0 0 0 Target initStep - 1 0.849 6.23 -2.44e+03 0 0.177 0.545 0.545 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 127, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.185 5.75 -2.44e+03 0.145 0 0 0 Target initStep - 1 0.43 5.92 -2.44e+03 0 0.145 0.308 0.308 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 126, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.593 5.52 -2.44e+03 1.42 0 0 0 Target initStep - 1 19.3 15.8 -2.44e+03 1.42 0 22.5 22.5 World Transportation - 2 1.72e+03 897 -2.4e+03 1.42 0 1.92e+03 1.94e+03 Tracker Transportation - 3 2.13e+03 1.11e+03 -2.39e+03 1.42 0 458 2.4e+03 World Transportation - 4 2.94e+03 1.53e+03 -2.37e+03 1.42 0 913 3.31e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 125, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.445 3.57 -2.44e+03 0.114 0 0 0 Target initStep - 1 -0.495 3.74 -2.44e+03 0 0.114 0.206 0.206 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 124, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.203 2.59 -2.44e+03 0.341 0 0 0 Target initStep - 1 -1.54 4.41 -2.44e+03 0 0.341 3.15 3.15 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 123, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0664 2.38 -2.44e+03 1.66 0 0 0 Target initStep - 1 -2.52 6.19 -2.44e+03 0.387 0 6.52 6.52 Target compt - 2 -3.37 5.02 -2.44e+03 0 0.387 1.52 8.04 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 132, Parent ID = 123 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.52 6.19 -2.44e+03 1.28 0 0 0 Target initStep - 1 -2.1 6.6 -2.44e+03 0.0801 1.2 0.94 0.94 Target eBrem - 2 -2.1 6.6 -2.44e+03 0 0.0801 0.0192 0.959 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 26, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.319 1.07 -2.44e+03 3.3 0 0 0 Target initStep - 1 -6.03 12.7 -2.42e+03 0 0 26.9 26.9 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 133, Parent ID = 26 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -6.03 12.7 -2.42e+03 1.64 0 0 0 Target initStep - 1 -6.52 12.4 -2.42e+03 0.217 1.43 1.23 1.23 Target eIoni - 2 -6.52 12.4 -2.42e+03 0 0.217 0.092 1.33 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 25, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.353 0.924 -2.44e+03 25.9 0 0 0 Target initStep - 1 -0.14 3.28 -2.44e+03 0 0 4.54 4.54 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 135, Parent ID = 25 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.14 3.28 -2.44e+03 9.45 0 0 0 Target initStep - 1 0.856 3.82 -2.44e+03 6.91 1.9 1.96 1.96 Target eBrem - 2 0.528 4.12 -2.44e+03 3.31 3.6 2.59 4.55 Target eIoni - 3 -0.127 5.09 -2.44e+03 1.49 1.82 1.84 6.39 Target eIoni - 4 -0.11 5.1 -2.44e+03 1.1 0.0805 0.0799 6.47 Target eBrem - 5 -0.183 5.37 -2.44e+03 0.565 0.346 0.362 6.83 Target eBrem - 6 -0.165 5.37 -2.44e+03 0 0.565 0.359 7.19 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 139, Parent ID = 135 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.183 5.37 -2.44e+03 0.189 0 0 0 Target initStep - 1 -0.0941 5.38 -2.44e+03 0 0.189 0.168 0.168 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 138, Parent ID = 135 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.11 5.1 -2.44e+03 0.312 0 0 0 Target initStep - 1 -0.282 7.04 -2.44e+03 0 0.312 6.28 6.28 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 137, Parent ID = 135 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.856 3.82 -2.44e+03 0.646 0 0 0 Target initStep - 1 3.77 -0.216 -2.43e+03 0.461 0.185 8.46 8.46 Target compt - 2 3.96 -0.141 -2.43e+03 0 0.461 0.291 8.75 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 24, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.425 0.472 -2.44e+03 14.4 0 0 0 Target initStep - 1 0.196 1.48 -2.44e+03 0 0 2.13 2.13 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 140, Parent ID = 24 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.196 1.48 -2.44e+03 11 0 0 0 Target initStep - 1 0.0154 1.97 -2.44e+03 9.76 0.765 0.714 0.714 Target eBrem - 2 -0.128 1.97 -2.44e+03 9.24 0.407 0.35 1.06 Target eBrem - 3 -0.145 1.91 -2.44e+03 8.44 0.387 0.41 1.47 Target eBrem - 4 0.507 1.06 -2.44e+03 4.17 4.27 2.86 4.34 Target eIoni - 5 0.587 1.08 -2.44e+03 1.31 0.0934 0.108 4.44 Target eBrem - 6 0.537 1.36 -2.44e+03 0.511 0.663 0.584 5.03 Target eBrem - 7 0.53 1.38 -2.44e+03 0 0.511 0.314 5.34 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 146, Parent ID = 140 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.537 1.36 -2.44e+03 0.135 0 0 0 Target initStep - 1 0.389 1.67 -2.44e+03 0 0.135 0.34 0.34 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 145, Parent ID = 140 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.587 1.08 -2.44e+03 2.77 0 0 0 Target initStep - 1 4.83 15.8 -2.44e+03 0.557 0 15.5 15.5 Target compt - 2 4.16 18.4 -2.44e+03 0.548 0.00929 5.46 21 Target compt - 3 4.4 20.8 -2.43e+03 0 0.548 4.74 25.7 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 147, Parent ID = 145 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 4.83 15.8 -2.44e+03 2.21 0 0 0 Target initStep - 1 4.12 16.6 -2.44e+03 0.623 1.58 1.5 1.5 Target eIoni - 2 4.14 16.6 -2.44e+03 0 0.623 0.407 1.91 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 144, Parent ID = 140 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.145 1.91 -2.44e+03 0.421 0 0 0 Target initStep - 1 -1.95 -0.112 -2.44e+03 0.383 0.0383 5.78 5.78 Target compt - 2 -1.51 -0.851 -2.43e+03 0 0.383 2.5 8.27 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 143, Parent ID = 140 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.128 1.97 -2.44e+03 0.108 0 0 0 Target initStep - 1 -0.253 1.96 -2.44e+03 0 0.108 0.429 0.429 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 142, Parent ID = 140 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0154 1.97 -2.44e+03 0.525 0 0 0 Target initStep - 1 -2.91 3.25 -2.43e+03 0.203 0.322 11.5 11.5 Target compt - 2 -3.04 3.72 -2.43e+03 0 0.203 0.678 12.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 23, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.439 0.392 -2.44e+03 5.83 0 0 0 Target initStep - 1 0.106 2.02 -2.44e+03 4.75 0 3.31 3.31 Target compt - 2 1.23 15 -2.42e+03 1.92 0 21.6 24.9 Target compt - 3 2.18 22.7 -2.42e+03 1.7 0.22 8.25 33.2 Target compt - 4 2.79 24.8 -2.42e+03 1.7 0 2.7 35.9 World Transportation - 5 11 53.7 -2.4e+03 1.7 0 35.8 71.7 Tracker Transportation - 6 650 2.31e+03 -870 1.7 0 2.8e+03 2.87e+03 World Transportation - 7 828 2.94e+03 -443 1.7 0 781 3.65e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 149, Parent ID = 23 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.23 15 -2.42e+03 2.83 0 0 0 Target initStep - 1 1.76 14.4 -2.42e+03 1.58 1.03 1.02 1.02 Target eBrem - 2 1.64 14.4 -2.42e+03 0.227 1.35 1.19 2.21 Target eIoni - 3 1.63 14.4 -2.42e+03 0 0.227 0.0984 2.31 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 148, Parent ID = 23 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.106 2.02 -2.44e+03 1.08 0 0 0 Target initStep - 1 0.071 2.02 -2.44e+03 0 1.08 0.799 0.799 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 150, Parent ID = 149 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.76 14.4 -2.42e+03 0.222 0 0 0 Target initStep - 1 1.54 14.1 -2.42e+03 0 0.222 0.33 0.33 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 22, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.448 0.368 -2.44e+03 0.0955 0 0 0 Target initStep - 1 0.444 0.374 -2.44e+03 0 0.0955 0.115 0.115 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 21, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.484 0.353 -2.45e+03 1.82 0 0 0 Target initStep - 1 0.554 0.881 -2.41e+03 1.46 0.366 36.7 36.7 Target compt - 2 2.53 3.68 -2.4e+03 1.46 0 9.01 45.7 Tracker Transportation - 3 359 508 -900 1.46 0 1.62e+03 1.67e+03 Chamber Transportation - 4 406 575 -700 1.46 0 216 1.88e+03 Tracker Transportation - 5 549 777 -100 1.46 0 649 2.53e+03 Chamber Transportation - 6 596 844 100 1.46 0 216 2.75e+03 Tracker Transportation - 7 739 1.05e+03 700 1.46 0 649 3.4e+03 Chamber Transportation - 8 786 1.11e+03 900 1.46 0 216 3.61e+03 Tracker Transportation - 9 929 1.32e+03 1.5e+03 1.46 0 649 4.26e+03 Chamber Transportation - 10 976 1.38e+03 1.7e+03 1.46 0 216 4.48e+03 Tracker Transportation - 11 1.14e+03 1.62e+03 2.4e+03 1.46 0 757 5.24e+03 World Transportation - 12 1.27e+03 1.8e+03 2.94e+03 1.46 0 584 5.82e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 20, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.496 0.331 -2.45e+03 33.3 0 0 0 Target initStep - 1 -0.229 2.36 -2.4e+03 33.3 0 45.6 45.6 Tracker Transportation - 2 -11.4 33.6 -1.7e+03 33.3 0 701 746 Chamber Transportation - 3 -14.6 42.5 -1.5e+03 33.3 0 200 947 Tracker Transportation - 4 -24.1 69.3 -900 33.3 0 601 1.55e+03 Chamber Transportation - 5 -27.3 78.2 -700 33.3 0 200 1.75e+03 Tracker Transportation - 6 -36.8 105 -100 33.3 0 601 2.35e+03 Chamber Transportation - 7 -40 114 100 33.3 0 200 2.55e+03 Tracker Transportation - 8 -49.6 141 700 33.3 0 601 3.15e+03 Chamber Transportation - 9 -52.8 150 900 33.3 0 200 3.35e+03 Tracker Transportation - 10 -62.3 176 1.5e+03 33.3 0 601 3.95e+03 Chamber Transportation - 11 -65.5 185 1.7e+03 33.3 0 200 4.15e+03 Tracker Transportation - 12 -76.6 217 2.4e+03 33.3 0 701 4.85e+03 World Transportation - 13 -85.2 241 2.94e+03 33.3 0 541 5.39e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 19, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.508 0.332 -2.45e+03 0.597 0 0 0 Target initStep - 1 0.488 0.328 -2.45e+03 0.245 0.352 0.437 0.437 Target compt - 2 0.813 0.216 -2.45e+03 0 0.245 0.35 0.786 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 18, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.523 0.332 -2.45e+03 6.98 0 0 0 Target initStep - 1 -0.0812 0.327 -2.43e+03 4.95 0 13.2 13.2 Target compt - 2 0.985 0.233 -2.43e+03 0 0 5.38 18.6 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 152, Parent ID = 18 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.985 0.233 -2.43e+03 1.35 0 0 0 Target initStep - 1 1.06 -0.486 -2.43e+03 0.177 1.17 1.03 1.03 Target eIoni - 2 1.05 -0.487 -2.43e+03 0 0.177 0.0673 1.1 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 151, Parent ID = 18 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0812 0.327 -2.43e+03 2.04 0 0 0 Target initStep - 1 -0.674 -0.518 -2.43e+03 0.565 1.47 1.43 1.43 Target eIoni - 2 -0.666 -0.516 -2.43e+03 0 0.565 0.358 1.79 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 17, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.533 0.332 -2.45e+03 11.1 0 0 0 Target initStep - 1 0.532 0.332 -2.45e+03 0.629 0 0.0557 0.0557 Target compt - 2 -7.64 12.5 -2.44e+03 0 0.629 15 15.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 154, Parent ID = 17 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.532 0.332 -2.45e+03 10.5 0 0 0 Target initStep - 1 0.906 0.563 -2.45e+03 9.15 0.964 0.954 0.954 Target eBrem - 2 1.16 1.13 -2.45e+03 8.35 0.799 0.721 1.68 Target msc - 3 0.692 1.85 -2.45e+03 7.18 1.17 1.06 2.73 Target msc - 4 0.253 2.35 -2.44e+03 5.22 0.889 0.738 3.47 Target eBrem - 5 0.581 2.98 -2.45e+03 3.94 1.28 1.19 4.66 Target msc - 6 0.583 2.94 -2.45e+03 2.35 0.16 0.181 4.84 Target eBrem - 7 1.36 2.72 -2.45e+03 0.18 1.5 1.11 5.95 Target eBrem - 8 1.36 2.72 -2.45e+03 0 0.18 0.0695 6.02 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 158, Parent ID = 154 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.36 2.72 -2.45e+03 0.667 0 0 0 Target initStep - 1 -0.163 1.61 -2.45e+03 0 0.667 1.97 1.97 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 157, Parent ID = 154 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.583 2.94 -2.45e+03 1.43 0 0 0 Target initStep - 1 -1.1 -1.43 -2.45e+03 1.43 0 6.53 6.53 World Transportation - 2 -182 -471 -2.94e+03 1.43 0 702 709 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 156, Parent ID = 154 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.253 2.35 -2.44e+03 1.07 0 0 0 Target initStep - 1 1.15 25 -2.44e+03 1.07 0 22.8 22.8 World Transportation - 2 16.2 404 -2.4e+03 1.07 0 382 404 Tracker Transportation - 3 95.3 2.4e+03 -2.18e+03 1.07 0 2.01e+03 2.41e+03 World Transportation - 4 117 2.94e+03 -2.12e+03 1.07 0 546 2.96e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 155, Parent ID = 154 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.906 0.563 -2.45e+03 0.371 0 0 0 Target initStep - 1 0.447 2.23 -2.44e+03 0 0.371 1.95 1.95 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 16, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.533 0.332 -2.45e+03 3.97 0 0 0 Target initStep - 1 0.508 0.346 -2.44e+03 3.36 0.618 1.79 1.79 Target compt - 2 -4.46 1.68 -2.42e+03 0.245 0 22.2 24 Target compt - 3 -4.44 1.91 -2.42e+03 0 0.245 0.941 24.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 159, Parent ID = 16 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -4.46 1.68 -2.42e+03 3.11 0 0 0 Target initStep - 1 -3.2 0.909 -2.42e+03 0.92 2.19 1.79 1.79 Target eIoni - 2 -3.07 0.739 -2.42e+03 0.43 0.37 0.236 2.02 Target eBrem - 3 -3.07 0.735 -2.42e+03 0 0.43 0.248 2.27 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 160, Parent ID = 159 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -3.07 0.739 -2.42e+03 0.12 0 0 0 Target initStep - 1 -2.59 0.803 -2.42e+03 0 0.12 0.523 0.523 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 14, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.529 0.31 -2.45e+03 0.0966 0 0 0 Target initStep - 1 0.535 0.32 -2.45e+03 0 0.0966 0.492 0.492 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 13, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.529 0.31 -2.45e+03 1.32 0 0 0 Target initStep - 1 0.868 1.33 -2.42e+03 0.242 0 31.9 31.9 Target compt - 2 0.471 1.95 -2.42e+03 0 0.242 1.1 33 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 161, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.868 1.33 -2.42e+03 1.07 0 0 0 Target initStep - 1 1.08 1.67 -2.42e+03 0.283 0.678 0.549 0.549 Target eBrem - 2 1.08 1.67 -2.42e+03 0 0.283 0.137 0.686 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 162, Parent ID = 161 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.08 1.67 -2.42e+03 0.113 0 0 0 Target initStep - 1 1.08 1.7 -2.42e+03 0 0.113 0.116 0.116 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 12, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.523 0.32 -2.45e+03 0.266 0 0 0 Target initStep - 1 0.522 0.319 -2.45e+03 0 0.266 0.194 0.194 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 11, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.519 0.328 -2.45e+03 6.47 0 0 0 Target initStep - 1 0.683 -0.557 -2.42e+03 1.3 0 29.3 29.3 Target compt - 2 1.11 -2.19 -2.42e+03 0.22 0 2.26 31.5 Target compt - 3 1 -2.08 -2.42e+03 0 0.22 0.233 31.7 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 164, Parent ID = 11 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.11 -2.19 -2.42e+03 1.08 0 0 0 Target initStep - 1 1.15 -2.02 -2.42e+03 0.66 0.421 0.311 0.311 Target eBrem - 2 1.08 -2.18 -2.42e+03 0.265 0.245 0.23 0.541 Target eBrem - 3 1.08 -2.19 -2.42e+03 0 0.265 0.124 0.666 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 163, Parent ID = 11 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.683 -0.557 -2.42e+03 5.17 0 0 0 Target initStep - 1 0.914 1.59 -2.42e+03 2.19 2.98 2.26 2.26 Target eIoni - 2 1.16 1.43 -2.42e+03 1.67 0.406 0.325 2.58 Target eBrem - 3 1.17 1.58 -2.42e+03 0.994 0.358 0.36 2.94 Target eBrem - 4 1.22 1.59 -2.42e+03 0 0.994 0.725 3.67 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 167, Parent ID = 163 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.17 1.58 -2.42e+03 0.318 0 0 0 Target initStep - 1 2.42 1.96 -2.42e+03 0.164 0.154 1.75 1.75 Target compt - 2 2.42 2.46 -2.42e+03 0 0.164 1.19 2.94 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 166, Parent ID = 163 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.16 1.43 -2.42e+03 0.113 0 0 0 Target initStep - 1 0.729 1.48 -2.42e+03 0 0.113 0.533 0.533 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 165, Parent ID = 164 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.08 -2.18 -2.42e+03 0.15 0 0 0 Target initStep - 1 1.53 -2.26 -2.42e+03 0 0.15 0.496 0.496 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 10, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.515 0.33 -2.45e+03 5.38 0 0 0 Target initStep - 1 0.633 0.23 -2.44e+03 1.2 0 4.39 4.39 Target compt - 2 -2.78 2.89 -2.44e+03 1.19 0.00942 6.01 10.4 Target compt - 3 -10.5 9.12 -2.43e+03 0.366 0.822 15.1 25.5 Target compt - 4 -9.02 3.86 -2.42e+03 0 0.366 6.95 32.4 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 9, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.509 0.344 -2.45e+03 0.522 0 0 0 Target initStep - 1 0.514 0.341 -2.45e+03 0 0.522 0.363 0.363 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 153, Parent ID = 18 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.985 0.233 -2.43e+03 2.57 0 0 0 Target initStep - 1 1.06 -0.351 -2.43e+03 1.59 0.596 0.662 0.662 Target eBrem - 2 0.106 -0.406 -2.43e+03 0.255 1.33 1.22 1.88 Target eIoni - 3 0.106 -0.394 -2.43e+03 0 0.255 0.113 2 Target eIoni - 4 0.106 -0.394 -2.43e+03 0 0 0 2 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 141, Parent ID = 24 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.196 1.48 -2.44e+03 2.37 0 0 0 Target initStep - 1 -0.737 2.31 -2.44e+03 0.891 1.48 1.58 1.58 Target eIoni - 2 -0.78 2.3 -2.44e+03 0 0.891 0.641 2.22 Target eIoni - 3 -0.78 2.3 -2.44e+03 0 0 0 2.22 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 136, Parent ID = 25 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.14 3.28 -2.44e+03 15.4 0 0 0 Target initStep - 1 -0.036 4.83 -2.44e+03 12.6 2.79 2.3 2.3 Target msc - 2 0.477 5.36 -2.44e+03 11.4 1.1 0.751 3.05 Target eBrem - 3 0.559 5.4 -2.44e+03 3.74 0.093 0.0987 3.15 Target eBrem - 4 0.861 5.51 -2.44e+03 2.05 1.44 1.19 4.35 Target eBrem - 5 0.856 5.46 -2.44e+03 0 0.0883 0.0698 4.42 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 134, Parent ID = 26 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -6.03 12.7 -2.42e+03 0.632 0 0 0 Target initStep - 1 -5.93 12.8 -2.42e+03 0.228 0.271 0.223 0.223 Target eBrem - 2 -5.93 12.8 -2.42e+03 0 0.228 0.0959 0.319 Target eIoni - 3 -5.93 12.8 -2.42e+03 0 0 0 0.319 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 122, Parent ID = 27 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0684 2 -2.44e+03 9.83 0 0 0 Target initStep - 1 0.0733 2.37 -2.44e+03 7.34 2.01 1.09 1.09 Target eBrem - 2 0.106 1.87 -2.44e+03 6.65 0.559 0.543 1.64 Target eBrem - 3 -0.444 1.16 -2.44e+03 2.79 3.86 1.91 3.55 Target eBrem - 4 -0.486 0.926 -2.44e+03 1.8 0.363 0.282 3.83 Target eBrem - 5 -0.667 0.854 -2.44e+03 0.534 1.27 1.34 5.17 Target eIoni - 6 -0.633 0.85 -2.44e+03 0 0.534 0.331 5.5 Target eIoni - 7 -0.633 0.85 -2.44e+03 0 0 0 5.5 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 42, Parent ID = 28 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.3 15.6 -2.44e+03 10.5 0 0 0 Target initStep - 1 -18.5 15.8 -2.44e+03 10 0.334 0.306 0.306 Target eBrem - 2 -18.6 15.8 -2.44e+03 9.82 0.0289 0.0462 0.352 Target eBrem - 3 -18.9 16.1 -2.44e+03 9.23 0.584 0.608 0.96 Target msc - 4 -19.1 16.1 -2.44e+03 8.94 0.291 0.267 1.23 World Transportation - 5 -26.5 19.6 -2.45e+03 8.94 0.00146 10.3 11.6 World eIoni - 6 -230 113 -2.62e+03 8.89 0.046 284 295 World eIoni - 7 -331 162 -2.71e+03 8.86 0.0239 144 439 World eIoni - 8 -340 168 -2.72e+03 8.86 0.00158 14.4 454 World eIoni - 9 -482 235 -2.86e+03 8.83 0.0292 204 658 World eIoni - 10 -494 242 -2.87e+03 8.82 0.00227 18.5 677 World eIoni - 11 -510 250 -2.88e+03 8.82 0.00358 23.1 700 World eIoni - 12 -576 283 -2.94e+03 8.8 0.0137 94.1 794 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 195, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -510 250 -2.88e+03 0.00178 0 0 0 World initStep - 1 -510 250 -2.88e+03 0 0.00178 0.134 0.134 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 194, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -494 242 -2.87e+03 0.0013 0 0 0 World initStep - 1 -494 242 -2.87e+03 0 0.0013 0.0836 0.0836 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 193, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -482 235 -2.86e+03 0.00263 0 0 0 World initStep - 1 -482 235 -2.86e+03 0 0.00263 0.253 0.253 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 192, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -340 168 -2.72e+03 0.00214 0 0 0 World initStep - 1 -340 168 -2.72e+03 0 0.00214 0.18 0.18 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 191, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -331 162 -2.71e+03 0.0047 0 0 0 World initStep - 1 -330 162 -2.72e+03 0 0.0047 0.688 0.688 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 190, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -230 113 -2.62e+03 0.00323 0 0 0 World initStep - 1 -230 113 -2.62e+03 0.00187 0.00136 0.182 0.182 World eIoni - 2 -230 113 -2.62e+03 0 0.00187 0.146 0.327 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 189, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -26.5 19.6 -2.45e+03 0.00113 0 0 0 World initStep - 1 -26.5 19.5 -2.45e+03 0 0.00113 0.068 0.068 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 168, Parent ID = 10 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.633 0.23 -2.44e+03 4.18 0 0 0 Target initStep - 1 0.54 0.261 -2.44e+03 1.38 0.361 0.314 0.314 Target eBrem - 2 0.477 0.21 -2.44e+03 0 1.38 1.05 1.37 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 196, Parent ID = 168 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.54 0.261 -2.44e+03 2.44 0 0 0 Target initStep - 1 -6.41 -4.11 -2.44e+03 2.16 0.281 9.34 9.34 Target compt - 2 -7.98 -4.66 -2.44e+03 0.644 0 1.8 11.1 Target compt - 3 -15.4 3.02 -2.44e+03 0.347 0.297 10.8 21.9 Target compt - 4 -15.4 3.17 -2.44e+03 0 0.347 0.279 22.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 197, Parent ID = 196 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -7.98 -4.66 -2.44e+03 1.52 0 0 0 Target initStep - 1 -7.73 -4.82 -2.44e+03 0.0355 1.21 1.13 1.13 Target eBrem - 2 -7.73 -4.82 -2.44e+03 0 0.0355 0.00512 1.13 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 198, Parent ID = 197 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -7.73 -4.82 -2.44e+03 0.27 0 0 0 Target initStep - 1 -7.19 -5.53 -2.44e+03 0 0.27 1.03 1.03 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 188, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.6 15.8 -2.44e+03 0.184 0 0 0 Target initStep - 1 -18.6 15.8 -2.44e+03 0.121 0.063 0.0755 0.0755 Target compt - 2 -18.5 15.4 -2.44e+03 0 0.121 0.395 0.471 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 187, Parent ID = 42 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.5 15.8 -2.44e+03 0.141 0 0 0 Target initStep - 1 -18.7 15.8 -2.44e+03 0 0.141 0.306 0.306 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 186, Parent ID = 122 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.633 0.85 -2.44e+03 0.511 0 0 0 Target initStep - 1 0.128 -1.22 -2.44e+03 0.412 0.099 2.49 2.49 Target compt - 2 3.23 -2.54 -2.44e+03 0 0.412 3.98 6.48 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 185, Parent ID = 122 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.633 0.85 -2.44e+03 0.511 0 0 0 Target initStep - 1 -6.63 17.2 -2.45e+03 0.43 0.0806 19.6 19.6 Target compt - 2 -7.88 18.9 -2.45e+03 0 0.43 2.11 21.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 184, Parent ID = 122 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.486 0.926 -2.44e+03 0.624 0 0 0 Target initStep - 1 -3.06 8.83 -2.43e+03 0.538 0.086 10.1 10.1 Target compt - 2 -3.14 8.9 -2.43e+03 0.304 0.234 0.109 10.2 Target compt - 3 -0.863 11 -2.43e+03 0 0.304 8.07 18.3 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 183, Parent ID = 122 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.106 1.87 -2.44e+03 0.128 0 0 0 Target initStep - 1 0.21 1.47 -2.44e+03 0 0.128 0.44 0.44 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 182, Parent ID = 122 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0733 2.37 -2.44e+03 0.485 0 0 0 Target initStep - 1 -0.0498 -0.963 -2.44e+03 0 0.485 3.73 3.73 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 181, Parent ID = 134 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -5.93 12.8 -2.42e+03 0.511 0 0 0 Target initStep - 1 -4.96 12.9 -2.42e+03 0.337 0.174 1.55 1.55 Target compt - 2 -2.85 13.3 -2.42e+03 0.335 0.00178 2.19 3.74 Target compt - 3 2.88 13.7 -2.42e+03 0 0.335 5.86 9.6 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 180, Parent ID = 134 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -5.93 12.8 -2.42e+03 0.511 0 0 0 Target initStep - 1 -9.25 12.4 -2.42e+03 0 0.511 5.28 5.28 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 179, Parent ID = 134 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -5.93 12.8 -2.42e+03 0.133 0 0 0 Target initStep - 1 -6.2 12.5 -2.42e+03 0 0.133 0.586 0.586 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 178, Parent ID = 136 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.856 5.46 -2.44e+03 2.51 0 0 0 Target initStep - 1 -4.84 0.983 -2.43e+03 1.32 0 13.9 13.9 Target compt - 2 -3.65 -2.11 -2.42e+03 0.758 0.566 6.68 20.6 Target compt - 3 -3.26 -6.09 -2.42e+03 0.579 0.179 4.18 24.7 Target compt - 4 -3.39 -7.25 -2.42e+03 0 0.579 1.24 26 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 199, Parent ID = 178 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -4.84 0.983 -2.43e+03 1.19 0 0 0 Target initStep - 1 -4.9 0.975 -2.43e+03 0 1.19 0.896 0.896 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 177, Parent ID = 136 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.856 5.46 -2.44e+03 0.465 0 0 0 Target initStep - 1 0.184 5.98 -2.44e+03 0 0.465 0.972 0.972 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 176, Parent ID = 136 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.861 5.51 -2.44e+03 0.255 0 0 0 Target initStep - 1 0.431 4.7 -2.44e+03 0 0.255 0.924 0.924 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 175, Parent ID = 136 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.559 5.4 -2.44e+03 7.6 0 0 0 Target initStep - 1 18.1 17.3 -2.43e+03 7.6 0 22.2 22.2 World Transportation - 2 100 72.8 -2.4e+03 7.6 0 104 126 Tracker Transportation - 3 1.99e+03 1.35e+03 -1.68e+03 7.6 0 2.39e+03 2.51e+03 World Transportation - 4 2.94e+03 1.99e+03 -1.32e+03 7.6 0 1.21e+03 3.72e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 174, Parent ID = 136 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.477 5.36 -2.44e+03 0.103 0 0 0 Target initStep - 1 0.963 5.69 -2.44e+03 0 0.103 0.64 0.64 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 173, Parent ID = 141 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.78 2.3 -2.44e+03 0.511 0 0 0 Target initStep - 1 1.7 3.51 -2.44e+03 0.431 0.0803 3.05 3.05 Target compt - 2 2.33 4.23 -2.44e+03 0 0.431 0.957 4 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 172, Parent ID = 141 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.78 2.3 -2.44e+03 0.511 0 0 0 Target initStep - 1 -5.24 0.143 -2.44e+03 0 0.511 5.47 5.47 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 171, Parent ID = 153 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.106 -0.394 -2.43e+03 0.511 0 0 0 Target initStep - 1 0.119 -0.9 -2.43e+03 0.376 0.135 1.51 1.51 Target compt - 2 5.57 -0.6 -2.43e+03 0.314 0.0625 7.53 9.04 Target compt - 3 10.5 0.787 -2.43e+03 0 0.314 5.1 14.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 170, Parent ID = 153 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.106 -0.394 -2.43e+03 0.511 0 0 0 Target initStep - 1 0.0505 1.75 -2.42e+03 0.478 0.0329 6.4 6.4 Target compt - 2 0.424 3.41 -2.42e+03 0 0.478 2.66 9.06 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 169, Parent ID = 153 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.06 -0.351 -2.43e+03 0.39 0 0 0 Target initStep - 1 3.92 -1.81 -2.43e+03 0 0.39 3.98 3.98 Target phot ----> End of event: 0 ->>> Event: 0 - 0 hits stored in this event -### Run 1 start. - ----> Begin of event: 0 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0 0 -2.94e+03 1e+06 0 0 0 World initStep - 1 5.79e-06 6.28e-06 -2.87e+03 1e+06 0.0143 69.1 69.1 World muIoni - 2 -1.4e-05 -5.64e-06 -2.79e+03 1e+06 0.0149 85.5 155 World muIoni - 3 -1.85e-05 -9.27e-06 -2.77e+03 1e+06 0.0022 13.2 168 World muIoni - 4 -4.28e-05 -6.4e-05 -2.62e+03 1e+06 0.0347 150 317 World muIoni - 5 -0.000123 -5.7e-05 -2.45e+03 1e+06 0.0367 173 490 Target Transportation - 6 -2.03e-05 0.000145 -2.44e+03 1e+06 18.4 13 503 Target muIoni - 7 3.28e-05 -0.000514 -2.42e+03 9.99e+05 17.3 14.3 517 Target muPairProd - 8 0.000159 0.000119 -2.4e+03 9.99e+05 32.3 22.8 540 Tracker Transportation - 9 -0.00294 0.0039 -2.32e+03 9.99e+05 0.0138 78.4 618 Tracker muIoni - 10 -0.00339 0.00446 -2.31e+03 9.99e+05 0.00186 11.5 630 Tracker muIoni - 11 -0.00697 0.00883 -2.22e+03 9.99e+05 0.0196 90.7 721 Tracker muIoni - 12 -0.00788 0.00994 -2.2e+03 9.99e+05 0.00508 23 744 Tracker muIoni - 13 -0.00833 0.0105 -2.19e+03 9.99e+05 0.00147 11.3 755 Tracker muIoni - 14 -0.00881 0.0111 -2.17e+03 9.99e+05 0.00197 12.3 767 Tracker muIoni - 15 -0.0127 0.0159 -2.07e+03 9.99e+05 0.0192 100 867 Tracker StepLimiter - 16 -0.0143 0.0178 -2.03e+03 9.99e+05 0.00892 40.4 908 Tracker muIoni - 17 -0.0182 0.0226 -1.93e+03 9.99e+05 0.0201 100 1.01e+03 Tracker StepLimiter - 18 -0.0206 0.0256 -1.87e+03 9.99e+05 0.012 63.7 1.07e+03 Tracker muIoni - 19 -0.0224 0.0278 -1.82e+03 9.99e+05 0.00824 44.9 1.12e+03 Tracker muIoni - 20 -0.0253 0.0313 -1.75e+03 9.99e+05 0.0142 74.6 1.19e+03 Tracker muIoni - 21 -0.027 0.0334 -1.7e+03 9.99e+05 0.00988 44.4 1.24e+03 Tracker muIoni - 22 -0.0272 0.0337 -1.7e+03 9.99e+05 0.000337 4.75 1.24e+03 Chamber Transportation - 23 -0.0285 0.0353 -1.67e+03 9.99e+05 0.0264 33.3 1.27e+03 Chamber muIoni - 24 -0.0295 0.0365 -1.64e+03 9.99e+05 0.019 25.8 1.3e+03 Chamber muIoni - 25 -0.0295 0.0365 -1.64e+03 9.99e+05 9.07e-05 0.742 1.3e+03 Chamber muIoni - 26 -0.03 0.0371 -1.63e+03 9.99e+05 0.0108 11.1 1.31e+03 Chamber muIoni - 27 -0.03 0.0371 -1.63e+03 9.99e+05 0.00126 0.954 1.31e+03 Chamber muIoni - 28 -0.0306 0.0379 -1.61e+03 9.99e+05 0.0113 15.8 1.33e+03 Chamber muIoni - 29 -0.0308 0.0381 -1.61e+03 9.99e+05 0.00148 3.98 1.33e+03 Chamber muIoni - 30 -0.0315 0.0389 -1.59e+03 9.99e+05 0.0142 16.2 1.35e+03 Chamber muIoni - 31 -0.0321 0.0397 -1.58e+03 9.99e+05 0.00684 15.3 1.36e+03 Chamber muIoni - 32 -0.0335 0.0414 -1.54e+03 9.99e+05 0.024 34 1.4e+03 Chamber muIoni - 33 -0.035 0.0433 -1.51e+03 9.99e+05 0.0292 37.5 1.43e+03 Chamber muIoni - 34 -0.0353 0.0436 -1.5e+03 9.99e+05 0.00306 5.27 1.44e+03 Tracker Transportation - 35 -0.0394 0.0486 -1.4e+03 9.99e+05 0.0237 100 1.54e+03 Tracker StepLimiter - 36 -0.0399 0.0492 -1.39e+03 9.99e+05 0.00225 11.7 1.55e+03 Tracker muIoni - 37 -0.044 0.0543 -1.29e+03 9.99e+05 0.0193 100 1.65e+03 Tracker StepLimiter - 38 -0.0482 0.0594 -1.19e+03 9.99e+05 0.0216 100 1.75e+03 Tracker StepLimiter - 39 -0.051 0.0629 -1.12e+03 9.99e+05 0.0118 69.1 1.82e+03 Tracker muIoni - 40 -0.0552 0.068 -1.02e+03 9.99e+05 0.0166 100 1.92e+03 Tracker StepLimiter - 41 -0.0576 0.071 -959 9.99e+05 0.0121 59.9 1.98e+03 Tracker muIoni - 42 -0.0596 0.0735 -912 9.99e+05 0.0113 47.7 2.03e+03 Tracker muIoni - 43 -0.06 0.0739 -904 9.99e+05 0.00159 8.02 2.04e+03 Tracker muIoni - 44 -0.0601 0.0741 -900 9.99e+05 0.000944 3.68 2.04e+03 Chamber Transportation - 45 -0.0664 0.0819 -748 9.99e+05 0.0947 152 2.19e+03 Chamber muIoni - 46 -0.0684 0.0843 -700 9.99e+05 0.0312 48.4 2.24e+03 Tracker Transportation - 47 -0.0723 0.0889 -607 9.99e+05 0.0178 92.5 2.33e+03 Tracker muIoni - 48 -0.0758 0.0931 -523 9.99e+05 0.0156 84.3 2.42e+03 Tracker muIoni - 49 -0.0794 0.0974 -436 9.99e+05 0.0181 87.2 2.5e+03 Tracker muIoni - 50 -0.0835 0.102 -336 9.99e+05 0.0196 100 2.6e+03 Tracker StepLimiter - 51 -0.0856 0.105 -286 9.99e+05 0.00911 50.1 2.65e+03 Tracker muIoni - 52 -0.0897 0.11 -186 9.99e+05 0.0168 100 2.75e+03 Tracker StepLimiter - 53 -0.0932 0.114 -100 9.99e+05 0.0199 85.8 2.84e+03 Chamber Transportation - 54 -0.0941 0.115 -78 9.99e+05 0.0104 22 2.86e+03 Chamber muIoni - 55 -0.0952 0.117 -51.2 9.99e+05 0.0161 26.8 2.89e+03 Chamber muIoni - 56 -0.0973 0.119 0.433 9.99e+05 0.0391 51.6 2.94e+03 Chamber muIoni - 57 -0.0974 0.119 2.96 9.99e+05 0.00183 2.53 2.94e+03 Chamber muIoni - 58 -0.0989 0.121 39.8 9.99e+05 0.0297 36.9 2.98e+03 Chamber muIoni - 59 -0.101 0.124 100 9.99e+05 0.0483 60.2 3.04e+03 Tracker Transportation - 60 -0.102 0.125 121 9.99e+05 0.00332 21.1 3.06e+03 Tracker muIoni - 61 -0.103 0.126 133 9.99e+05 0.00136 11.8 3.07e+03 Tracker muIoni - 62 -0.107 0.131 233 9.99e+05 0.0233 100 3.17e+03 Tracker StepLimiter - 63 -0.11 0.135 326 9.99e+05 0.0168 93.4 3.27e+03 Tracker muIoni - 64 -0.114 0.14 426 9.99e+05 0.02 100 3.37e+03 Tracker StepLimiter - 65 -0.117 0.144 498 9.99e+05 0.0157 71.4 3.44e+03 Tracker muIoni - 66 -0.121 0.149 598 9.99e+05 0.0194 100 3.54e+03 Tracker StepLimiter - 67 -0.125 0.153 684 9.99e+05 0.0175 86.6 3.62e+03 Tracker muIoni - 68 -0.125 0.154 700 9.99e+05 0.00254 15.6 3.64e+03 Chamber Transportation - 69 -0.126 0.155 721 9.99e+05 0.0134 20.5 3.66e+03 Chamber muIoni - 70 -0.127 0.155 735 9.99e+05 0.0105 14.2 3.67e+03 Chamber muIoni - 71 -0.132 0.162 872 9.99e+05 0.101 137 3.81e+03 Chamber muIoni - 72 -0.133 0.163 880 9.99e+05 0.00302 8.04 3.82e+03 Chamber muIoni - 73 -0.133 0.164 899 9.99e+05 0.00987 18.7 3.84e+03 Chamber muIoni - 74 -0.133 0.164 900 9.99e+05 0.000724 1.06 3.84e+03 Tracker Transportation - 75 -0.137 0.169 1e+03 9.99e+05 0.0199 100 3.94e+03 Tracker StepLimiter - 76 -0.141 0.173 1.09e+03 9.99e+05 0.0182 94.8 4.03e+03 Tracker muIoni - 77 -0.145 0.178 1.19e+03 9.99e+05 0.0147 100 4.13e+03 Tracker StepLimiter - 78 -0.149 0.183 1.29e+03 9.99e+05 0.0153 96.7 4.23e+03 Tracker muIoni - 79 -0.15 0.185 1.33e+03 9.99e+05 0.0068 39.2 4.27e+03 Tracker muIoni - 80 -0.151 0.186 1.35e+03 9.99e+05 0.0053 21.4 4.29e+03 Tracker muIoni - 81 -0.155 0.191 1.45e+03 9.99e+05 0.0159 97.4 4.39e+03 Tracker muIoni - 82 -0.156 0.191 1.46e+03 9.99e+05 0.00156 9.68 4.4e+03 Tracker muIoni - 83 -0.157 0.193 1.5e+03 9.99e+05 0.00713 40.8 4.44e+03 Chamber Transportation - 84 -0.157 0.194 1.5e+03 9.99e+05 0.00186 2.25 4.44e+03 Chamber muIoni - 85 -0.159 0.196 1.55e+03 9.99e+05 0.0378 45.3 4.49e+03 Chamber muIoni - 86 -0.159 0.196 1.56e+03 9.99e+05 0.00842 9.62 4.5e+03 Chamber muIoni - 87 -0.16 0.197 1.56e+03 9.99e+05 0.00299 7.22 4.5e+03 Chamber muIoni - 88 -0.162 0.2 1.63e+03 9.99e+05 0.0581 69.5 4.57e+03 Chamber muIoni - 89 -0.164 0.202 1.67e+03 9.99e+05 0.0304 38.4 4.61e+03 Chamber muIoni - 90 -0.164 0.202 1.68e+03 9.99e+05 0.00257 5.63 4.62e+03 Chamber muIoni - 91 -0.164 0.202 1.68e+03 9.99e+05 0.00106 1.3 4.62e+03 Chamber muIoni - 92 -0.165 0.203 1.7e+03 9.99e+05 0.0152 20.8 4.64e+03 Tracker Transportation - 93 -0.165 0.204 1.71e+03 9.99e+05 0.00117 7.84 4.65e+03 Tracker muIoni - 94 -0.167 0.206 1.75e+03 9.99e+05 0.00656 38.1 4.69e+03 Tracker muIoni - 95 -0.171 0.211 1.85e+03 9.99e+05 0.0202 100 4.79e+03 Tracker StepLimiter - 96 -0.175 0.216 1.95e+03 9.99e+05 0.0184 100 4.89e+03 Tracker StepLimiter - 97 -0.179 0.221 2.05e+03 9.99e+05 0.0219 100 4.99e+03 Tracker StepLimiter - 98 -0.18 0.222 2.08e+03 9.99e+05 0.00591 33.9 5.02e+03 Tracker muIoni - 99 -0.181 0.223 2.09e+03 9.99e+05 0.00255 13.1 5.03e+03 Tracker muIoni - 100 -0.184 0.228 2.19e+03 9.99e+05 0.0185 97 5.13e+03 Tracker muIoni - 101 -0.185 0.228 2.19e+03 9.99e+05 0.000718 2.89 5.13e+03 Tracker muIoni - 102 -0.186 0.229 2.22e+03 9.99e+05 0.00525 28.6 5.16e+03 Tracker muIoni - 103 -0.19 0.234 2.32e+03 9.99e+05 0.0221 100 5.26e+03 Tracker StepLimiter - 104 -0.191 0.235 2.35e+03 9.99e+05 0.00507 24.4 5.29e+03 Tracker muIoni - 105 -0.193 0.238 2.4e+03 9.99e+05 0.0103 54.2 5.34e+03 World Transportation - 106 -0.203 0.251 2.65e+03 9.99e+05 0.0484 252 5.59e+03 World muIoni - 107 -0.204 0.253 2.69e+03 9.99e+05 0.00833 39 5.63e+03 World muIoni - 108 -0.205 0.254 2.71e+03 9.99e+05 0.0027 19.3 5.65e+03 World muIoni - 109 -0.21 0.259 2.82e+03 9.99e+05 0.0221 110 5.76e+03 World muIoni - 110 -0.214 0.265 2.94e+03 9.99e+05 0.0233 120 5.88e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 81, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.21 0.259 2.82e+03 0.0024 0 0 0 World initStep - 1 -0.244 0.17 2.82e+03 0 0.0024 0.218 0.218 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 80, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.205 0.254 2.71e+03 0.00163 0 0 0 World initStep - 1 -0.24 0.217 2.71e+03 0 0.00163 0.118 0.118 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 79, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.204 0.253 2.69e+03 0.0143 0 0 0 World initStep - 1 -0.924 0.427 2.69e+03 0.0126 0.000756 0.778 0.778 World eIoni - 2 -2.6 0.376 2.69e+03 0.0087 0.00386 2.21 2.99 World eIoni - 3 -2.57 0.581 2.69e+03 0.00291 0.00578 1.63 4.62 World eIoni - 4 -2.46 0.628 2.69e+03 0 0.00291 0.3 4.92 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 82, Parent ID = 79 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.924 0.427 2.69e+03 0.00103 0 0 0 World initStep - 1 -0.933 0.414 2.69e+03 0 0.00103 0.0598 0.0598 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 78, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.203 0.251 2.65e+03 0.0122 0 0 0 World initStep - 1 -0.977 -1.53 2.65e+03 0.00657 0.00562 2.16 2.16 World eIoni - 2 -0.7 -2.02 2.65e+03 0.000374 0.0062 1.21 3.37 World eIoni - 3 -0.699 -2.02 2.65e+03 0 0.000374 0.0164 3.38 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 77, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.191 0.235 2.35e+03 0.00161 0 0 0 Tracker initStep - 1 -0.144 0.25 2.35e+03 0 0.00161 0.116 0.116 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 76, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.186 0.229 2.22e+03 0.00121 0 0 0 Tracker initStep - 1 -0.189 0.198 2.22e+03 0 0.00121 0.075 0.075 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 75, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.185 0.228 2.19e+03 0.000995 0 0 0 Tracker initStep - 1 -0.162 0.228 2.19e+03 0 0.000995 0.0567 0.0567 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 74, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.184 0.228 2.19e+03 0.0097 0 0 0 Tracker initStep - 1 -0.153 0.189 2.19e+03 0.00786 0.000142 0.0505 0.0505 Tracker eIoni - 2 0.389 0.162 2.19e+03 0.00542 0.000975 0.677 0.728 Tracker eIoni - 3 0.183 0.16 2.19e+03 0 0.00542 0.884 1.61 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 84, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.389 0.162 2.19e+03 0.00147 0 0 0 Tracker initStep - 1 0.422 0.145 2.19e+03 0 0.00147 0.1 0.1 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 83, Parent ID = 74 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.153 0.189 2.19e+03 0.0017 0 0 0 Tracker initStep - 1 -0.173 0.151 2.19e+03 0 0.0017 0.125 0.125 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 73, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.181 0.223 2.09e+03 0.00117 0 0 0 Tracker initStep - 1 -0.159 0.243 2.09e+03 0 0.00117 0.0717 0.0717 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 72, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.18 0.222 2.08e+03 0.00122 0 0 0 Tracker initStep - 1 -0.212 0.224 2.08e+03 0 0.00122 0.0765 0.0765 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 71, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.167 0.206 1.75e+03 0.00274 0 0 0 Tracker initStep - 1 -0.131 0.32 1.75e+03 0 0.00274 0.271 0.271 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 70, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.165 0.204 1.71e+03 0.00117 0 0 0 Tracker initStep - 1 -0.178 0.177 1.71e+03 0 0.00117 0.0714 0.0714 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 69, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.164 0.202 1.68e+03 0.00785 0 0 0 Chamber initStep - 1 -0.238 0.255 1.68e+03 0 0.00785 0.816 0.816 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 68, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.164 0.202 1.68e+03 0.00458 0 0 0 Chamber initStep - 1 -0.206 0.206 1.68e+03 0 0.00458 0.342 0.342 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 67, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.164 0.202 1.67e+03 0.00146 0 0 0 Chamber initStep - 1 -0.162 0.193 1.67e+03 0 0.00146 0.0677 0.0677 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 66, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.162 0.2 1.63e+03 0.00321 0 0 0 Chamber initStep - 1 -0.184 0.186 1.63e+03 0 0.00321 0.201 0.201 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 65, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.16 0.197 1.56e+03 0.00144 0 0 0 Chamber initStep - 1 -0.151 0.196 1.56e+03 0 0.00144 0.0668 0.0668 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 64, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.159 0.196 1.56e+03 0.00361 0 0 0 Chamber initStep - 1 -0.132 0.207 1.56e+03 0 0.00361 0.238 0.238 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 63, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.159 0.196 1.55e+03 0.00544 0 0 0 Chamber initStep - 1 -0.187 0.257 1.55e+03 0.00115 0.0043 0.447 0.447 Chamber eIoni - 2 -0.185 0.25 1.55e+03 0 0.00115 0.0496 0.496 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 62, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.157 0.194 1.5e+03 0.0017 0 0 0 Chamber initStep - 1 -0.147 0.197 1.5e+03 0 0.0017 0.0835 0.0835 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 61, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.156 0.191 1.46e+03 0.00132 0 0 0 Tracker initStep - 1 -0.191 0.186 1.46e+03 0 0.00132 0.0856 0.0856 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 60, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.155 0.191 1.45e+03 0.00245 0 0 0 Tracker initStep - 1 -0.0705 0.14 1.45e+03 0 0.00245 0.224 0.224 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 59, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.151 0.186 1.35e+03 0.00181 0 0 0 Tracker initStep - 1 -0.197 0.148 1.35e+03 0 0.00181 0.138 0.138 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 58, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.15 0.185 1.33e+03 0.00183 0 0 0 Tracker initStep - 1 -0.119 0.133 1.33e+03 0 0.00183 0.141 0.141 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 57, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.149 0.183 1.29e+03 0.000999 0 0 0 Tracker initStep - 1 -0.13 0.17 1.29e+03 0 0.000999 0.057 0.057 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 56, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.141 0.173 1.09e+03 0.00162 0 0 0 Tracker initStep - 1 -0.149 0.223 1.09e+03 0 0.00162 0.117 0.117 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 55, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.133 0.164 899 0.00378 0 0 0 Chamber initStep - 1 -0.164 0.172 899 0 0.00378 0.255 0.255 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 54, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.133 0.163 880 0.00728 0 0 0 Chamber initStep - 1 -0.107 0.0858 880 0 0.00728 0.72 0.72 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 53, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.132 0.162 872 0.0176 0 0 0 Chamber initStep - 1 -0.607 -0.187 872 0.0135 0.00245 1.18 1.18 Chamber eIoni - 2 -0.317 -0.639 872 0.00798 0.00217 0.638 1.82 Chamber eIoni - 3 -0.386 -0.848 872 0.00698 0.001 0.252 2.07 Chamber eIoni - 4 -0.458 -0.866 872 0 0.00698 0.672 2.74 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 86, Parent ID = 53 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.317 -0.639 872 0.00335 0 0 0 Chamber initStep - 1 -0.309 -0.665 872 0 0.00335 0.214 0.214 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 85, Parent ID = 53 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.607 -0.187 872 0.0017 0 0 0 Chamber initStep - 1 -0.598 -0.193 872 0 0.0017 0.0829 0.0829 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 52, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.127 0.155 735 0.00301 0 0 0 Chamber initStep - 1 -0.146 0.169 735 0 0.00301 0.183 0.183 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 51, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.126 0.155 721 0.0234 0 0 0 Chamber initStep - 1 -0.0953 -0.268 721 0.0173 0.0032 1.11 1.11 Chamber eIoni - 2 -0.0717 -0.408 721 0.0135 0.00109 0.359 1.47 Chamber eIoni - 3 -0.00151 -1.21 723 0.00641 0.00569 1.45 2.92 Chamber eIoni - 4 0.027 -1.24 722 0 0.00641 0.586 3.5 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 89, Parent ID = 51 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00151 -1.21 723 0.00141 0 0 0 Chamber initStep - 1 0.00602 -1.21 723 0 0.00141 0.0645 0.0645 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 88, Parent ID = 51 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0717 -0.408 721 0.00266 0 0 0 Chamber initStep - 1 -0.0677 -0.405 721 0 0.00266 0.154 0.154 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 87, Parent ID = 51 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0953 -0.268 721 0.00293 0 0 0 Chamber initStep - 1 -0.0792 -0.259 721 0 0.00293 0.177 0.177 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 50, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.125 0.153 684 0.102 0 0 0 Tracker initStep - 1 5.32 18.8 690 0.0917 0.00864 21.8 21.8 Tracker eIoni - 2 7.74 22.9 692 0.0877 0.00405 5.24 27 Tracker eIoni - 3 14.3 37.2 691 0.0723 0.00771 16.3 43.3 Tracker eIoni - 4 27.4 53.5 691 0.0618 0.0105 21.2 64.6 Tracker eIoni - 5 28.9 55.8 691 0.0591 0.00141 2.78 67.4 Tracker eIoni - 6 39.4 65.2 695 0.0512 0.00789 15.3 82.7 Tracker eIoni - 7 47 73.3 693 0.0451 0.00617 12.2 94.8 Tracker eIoni - 8 50.3 74.5 690 0.038 0.00277 4.63 99.5 Tracker eIoni - 9 51.6 75.9 689 0.0359 0.000799 2.07 102 Tracker eIoni - 10 57.2 76.5 686 0.0314 0.0045 7.11 109 Tracker eIoni - 11 62 78.2 684 0.0247 0.00668 5.9 115 Tracker eIoni - 12 63.9 80 684 0.0182 0.00281 2.92 117 Tracker eIoni - 13 66 78.7 684 0.014 0.00267 2.72 120 Tracker eIoni - 14 67.4 79.3 684 0.00653 0.00444 1.61 122 Tracker eIoni - 15 67.6 78.4 685 0.000457 0.00607 1.2 123 Tracker eIoni - 16 67.6 78.4 685 0 0.000457 0.0206 123 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 97, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 67.4 79.3 684 0.00304 0 0 0 Tracker initStep - 1 67.4 79.3 684 0 0.00304 0.323 0.323 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 96, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 66 78.7 684 0.0015 0 0 0 Tracker initStep - 1 66 78.7 684 0 0.0015 0.104 0.104 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 95, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 63.9 80 684 0.00371 0 0 0 Tracker initStep - 1 64 80.1 683 0 0.00371 0.455 0.455 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 94, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 51.6 75.9 689 0.00127 0 0 0 Tracker initStep - 1 51.6 75.8 689 0 0.00127 0.081 0.081 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 93, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 50.3 74.5 690 0.00435 0 0 0 Tracker initStep - 1 50.3 74.4 690 0.00176 0.00156 0.277 0.277 Tracker eIoni - 2 50.4 74.4 690 0 0.00176 0.133 0.41 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 98, Parent ID = 93 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 50.3 74.4 690 0.00102 0 0 0 Tracker initStep - 1 50.3 74.4 690 0 0.00102 0.0586 0.0586 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 92, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 28.9 55.8 691 0.00125 0 0 0 Tracker initStep - 1 28.9 55.8 691 0 0.00125 0.079 0.079 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 91, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 14.3 37.2 691 0.00765 0 0 0 Tracker initStep - 1 14.8 38.4 691 0.00193 0.00572 1.44 1.44 Tracker eIoni - 2 14.8 38.4 691 0 0.00193 0.153 1.59 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 90, Parent ID = 50 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.32 18.8 690 0.00212 0 0 0 Tracker initStep - 1 5.25 18.8 690 0 0.00212 0.177 0.177 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 49, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.117 0.144 498 0.00232 0 0 0 Tracker initStep - 1 -0.0914 0.0575 498 0 0.00232 0.206 0.206 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 48, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.11 0.135 326 0.0117 0 0 0 Tracker initStep - 1 -0.0422 -1.36 328 0.00809 0.00363 2.09 2.09 Tracker eIoni - 2 0.0738 -1.5 328 0.00676 0.000194 0.202 2.29 Tracker eIoni - 3 1.25 -1.78 328 0.00146 0.00529 1.25 3.54 Tracker eIoni - 4 1.28 -1.75 328 0 0.00146 0.0999 3.64 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 99, Parent ID = 48 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0738 -1.5 328 0.00114 0 0 0 Tracker initStep - 1 0.0734 -1.52 328 0 0.00114 0.069 0.069 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 47, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.103 0.126 133 0.0117 0 0 0 Tracker initStep - 1 1.34 -0.819 134 0.00632 0.00536 2.08 2.08 Tracker eIoni - 2 1.52 -0.613 133 0.000141 0.00618 1.14 3.23 Tracker eIoni - 3 1.52 -0.614 133 0 0.000141 0.00717 3.23 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 46, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.102 0.125 121 0.0175 0 0 0 Tracker initStep - 1 -1.5 -1.68 123 0.0124 0.00503 2.98 2.98 Tracker eIoni - 2 -2.12 -2.36 124 0.00801 0.0032 1.7 4.67 Tracker eIoni - 3 -1.66 -3.15 123 0.00213 0.00587 1.51 6.18 Tracker eIoni - 4 -1.63 -3.22 123 0 0.00213 0.179 6.36 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 100, Parent ID = 46 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.12 -2.36 124 0.00123 0 0 0 Tracker initStep - 1 -2.09 -2.37 124 0 0.00123 0.0772 0.0772 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 45, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0989 0.121 39.8 0.00754 0 0 0 Chamber initStep - 1 -0.183 0.111 39.8 0 0.00754 0.764 0.764 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 44, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0974 0.119 2.96 0.0191 0 0 0 Chamber initStep - 1 -0.501 -0.205 4 0.014 0.00352 1.25 1.25 Chamber eIoni - 2 -0.3 0.33 4.04 0.00668 0.00541 1.14 2.39 Chamber eIoni - 3 -0.354 0.374 4.06 0 0.00668 0.626 3.02 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 102, Parent ID = 44 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.3 0.33 4.04 0.00188 0 0 0 Chamber initStep - 1 -0.299 0.334 4.03 0 0.00188 0.0957 0.0957 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 101, Parent ID = 44 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.501 -0.205 4 0.00162 0 0 0 Chamber initStep - 1 -0.508 -0.201 4 0 0.00162 0.0778 0.0778 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 43, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0973 0.119 0.433 0.00198 0 0 0 Chamber initStep - 1 -0.106 0.109 0.433 0 0.00198 0.103 0.103 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 42, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0952 0.117 -51.2 0.00399 0 0 0 Chamber initStep - 1 -0.119 0.0924 -51.2 0 0.00399 0.277 0.277 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 41, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0941 0.115 -78 0.0107 0 0 0 Chamber initStep - 1 -0.192 0.222 -77.9 0 0.0107 1.29 1.29 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 40, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0856 0.105 -286 0.00153 0 0 0 Tracker initStep - 1 -0.118 0.137 -286 0 0.00153 0.107 0.107 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 39, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0794 0.0974 -436 0.00208 0 0 0 Tracker initStep - 1 -0.129 0.0413 -436 0 0.00208 0.173 0.173 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 38, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0758 0.0931 -523 0.00111 0 0 0 Tracker initStep - 1 -0.095 0.112 -523 0 0.00111 0.0664 0.0664 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 37, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0723 0.0889 -607 0.0107 0 0 0 Tracker initStep - 1 -0.667 0.973 -608 0.00821 0.000617 1.21 1.21 Tracker eIoni - 2 -1.92 1.07 -608 0.0043 0.00391 1.54 2.75 Tracker eIoni - 3 -1.96 0.869 -607 0 0.0043 0.587 3.34 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 103, Parent ID = 37 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.667 0.973 -608 0.00192 0 0 0 Tracker initStep - 1 -0.625 1.02 -608 0 0.00192 0.151 0.151 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 36, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0664 0.0819 -748 0.00153 0 0 0 Chamber initStep - 1 -0.0579 0.077 -748 0 0.00153 0.0723 0.0723 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 35, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.06 0.0739 -904 0.00333 0 0 0 Tracker initStep - 1 -0.227 0.0855 -904 0 0.00333 0.378 0.378 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 34, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0596 0.0735 -912 0.00567 0 0 0 Tracker initStep - 1 -0.227 0.466 -912 0 0.00567 0.959 0.959 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 33, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0576 0.071 -959 0.00114 0 0 0 Tracker initStep - 1 -0.0701 0.0457 -959 0 0.00114 0.0686 0.0686 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 32, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.051 0.0629 -1.12e+03 0.00174 0 0 0 Tracker initStep - 1 0.00151 0.043 -1.12e+03 0 0.00174 0.131 0.131 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 31, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0399 0.0492 -1.39e+03 0.00315 0 0 0 Tracker initStep - 1 -0.0166 -0.101 -1.39e+03 0 0.00315 0.343 0.343 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 30, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.035 0.0433 -1.51e+03 0.00205 0 0 0 Chamber initStep - 1 -0.0212 0.0432 -1.51e+03 0 0.00205 0.108 0.108 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 29, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0335 0.0414 -1.54e+03 0.00961 0 0 0 Chamber initStep - 1 -0.0764 0.156 -1.54e+03 0 0.00961 1.13 1.13 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 28, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0321 0.0397 -1.58e+03 0.00167 0 0 0 Chamber initStep - 1 -0.038 0.0307 -1.58e+03 0 0.00167 0.0809 0.0809 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0315 0.0389 -1.59e+03 0.00386 0 0 0 Chamber initStep - 1 -0.0021 0.0251 -1.59e+03 0 0.00386 0.263 0.263 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 26, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0308 0.0381 -1.61e+03 0.00268 0 0 0 Chamber initStep - 1 -0.0217 0.0202 -1.61e+03 0 0.00268 0.156 0.156 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 25, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0306 0.0379 -1.61e+03 0.00171 0 0 0 Chamber initStep - 1 -0.0358 0.0478 -1.61e+03 0 0.00171 0.084 0.084 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 24, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.03 0.0371 -1.63e+03 0.0088 0 0 0 Chamber initStep - 1 -0.142 -0.037 -1.63e+03 0.00354 0.00375 0.334 0.334 Chamber eIoni - 2 -0.129 -0.0118 -1.63e+03 0 0.00354 0.232 0.566 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 104, Parent ID = 24 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.142 -0.037 -1.63e+03 0.0015 0 0 0 Chamber initStep - 1 -0.151 -0.0332 -1.63e+03 0 0.0015 0.0703 0.0703 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 23, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.03 0.0371 -1.63e+03 0.00197 0 0 0 Chamber initStep - 1 -0.0195 0.045 -1.63e+03 0 0.00197 0.102 0.102 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0295 0.0365 -1.64e+03 0.00317 0 0 0 Chamber initStep - 1 -0.0427 0.0579 -1.64e+03 0 0.00317 0.198 0.198 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0295 0.0365 -1.64e+03 0.00727 0 0 0 Chamber initStep - 1 -0.109 0.0516 -1.64e+03 0 0.00727 0.719 0.719 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 20, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0285 0.0353 -1.67e+03 0.00177 0 0 0 Chamber initStep - 1 -0.0209 0.044 -1.67e+03 0 0.00177 0.0877 0.0877 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.027 0.0334 -1.7e+03 0.0058 0 0 0 Tracker initStep - 1 -0.161 -0.389 -1.7e+03 0 0.0058 0.997 0.997 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0253 0.0313 -1.75e+03 0.00197 0 0 0 Tracker initStep - 1 0.0187 0.0841 -1.75e+03 0 0.00197 0.158 0.158 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0224 0.0278 -1.82e+03 0.00126 0 0 0 Tracker initStep - 1 -0.0411 0.000272 -1.82e+03 0 0.00126 0.0799 0.0799 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0206 0.0256 -1.87e+03 0.00747 0 0 0 Tracker initStep - 1 1.05 -0.149 -1.87e+03 0.00139 0.00608 1.41 1.41 Tracker eIoni - 2 1.06 -0.115 -1.87e+03 0 0.00139 0.0928 1.5 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0143 0.0178 -2.03e+03 0.00147 0 0 0 Tracker initStep - 1 0.0182 0.0453 -2.03e+03 0 0.00147 0.1 0.1 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00881 0.0111 -2.17e+03 0.0021 0 0 0 Tracker initStep - 1 0.039 0.0707 -2.17e+03 0 0.0021 0.176 0.176 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00833 0.0105 -2.19e+03 0.115 0 0 0 Tracker initStep - 1 -32.7 7.94 -2.18e+03 0.103 0.00982 34.9 34.9 Tracker eIoni - 2 -44.7 18.4 -2.18e+03 0.0953 0.00638 16.3 51.3 Tracker eIoni - 3 -60.5 29.3 -2.17e+03 0.0862 0.0071 20.3 71.6 Tracker eIoni - 4 -80.3 41.6 -2.16e+03 0.0758 0.0104 28.5 100 Tracker eIoni - 5 -84.8 40.3 -2.15e+03 0.07 0.00274 10.6 111 Tracker eIoni - 6 -83.5 40.3 -2.14e+03 0.0582 0.00231 7.9 119 Tracker eIoni - 7 -88.8 44.7 -2.13e+03 0.0491 0.00904 14.9 134 Tracker eIoni - 8 -91.9 47.3 -2.12e+03 0.0386 0.00366 8.66 142 Tracker eIoni - 9 -97.4 49.2 -2.12e+03 0.0315 0.00482 6.08 148 Tracker eIoni - 10 -102 52.2 -2.12e+03 0.0251 0.00644 5.93 154 Tracker eIoni - 11 -103 52.2 -2.12e+03 0.0185 0.000617 0.785 155 Tracker eIoni - 12 -103 53.7 -2.12e+03 0.0151 0.00336 3.14 158 Tracker eIoni - 13 -104 55.6 -2.12e+03 0.0107 0.00439 2.59 161 Tracker eIoni - 14 -103 57 -2.12e+03 0.00628 0.00444 1.94 163 Tracker eIoni - 15 -103 57.8 -2.12e+03 0.00109 0.00519 1.13 164 Tracker eIoni - 16 -103 57.8 -2.12e+03 0 0.00109 0.0644 164 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 112, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -103 52.2 -2.12e+03 0.00598 0 0 0 Tracker initStep - 1 -102 52.4 -2.12e+03 0.00148 0.00335 0.681 0.681 Tracker eIoni - 2 -102 52.5 -2.12e+03 0 0.00148 0.102 0.783 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 113, Parent ID = 112 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -102 52.4 -2.12e+03 0.00115 0 0 0 Tracker initStep - 1 -102 52.5 -2.12e+03 0 0.00115 0.0701 0.0701 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 111, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -97.4 49.2 -2.12e+03 0.0023 0 0 0 Tracker initStep - 1 -97.4 49.2 -2.12e+03 0 0.0023 0.203 0.203 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 110, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -91.9 47.3 -2.12e+03 0.00687 0 0 0 Tracker initStep - 1 -91.9 47.2 -2.12e+03 0.00572 0.000129 0.131 0.131 Tracker eIoni - 2 -91.7 46.9 -2.12e+03 0 0.00572 0.975 1.11 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 114, Parent ID = 110 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -91.9 47.2 -2.12e+03 0.00102 0 0 0 Tracker initStep - 1 -91.8 47.2 -2.12e+03 0 0.00102 0.0584 0.0584 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 109, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -83.5 40.3 -2.14e+03 0.00948 0 0 0 Tracker initStep - 1 -83.1 41.8 -2.14e+03 0.00146 0.00803 1.75 1.75 Tracker eIoni - 2 -83.1 41.8 -2.14e+03 0 0.00146 0.0991 1.85 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 108, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -84.8 40.3 -2.15e+03 0.0031 0 0 0 Tracker initStep - 1 -85 40.3 -2.15e+03 0 0.0031 0.333 0.333 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 107, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -60.5 29.3 -2.17e+03 0.00193 0 0 0 Tracker initStep - 1 -60.5 29.3 -2.17e+03 0 0.00193 0.153 0.153 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 106, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -44.7 18.4 -2.18e+03 0.0018 0 0 0 Tracker initStep - 1 -44.7 18.4 -2.18e+03 0 0.0018 0.138 0.138 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 105, Parent ID = 13 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -32.7 7.94 -2.18e+03 0.00202 0 0 0 Tracker initStep - 1 -32.8 7.89 -2.18e+03 0 0.00202 0.165 0.165 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00788 0.00994 -2.2e+03 0.00654 0 0 0 Tracker initStep - 1 0.00255 -0.957 -2.2e+03 0.00153 0.00501 1.15 1.15 Tracker eIoni - 2 0.0314 -0.991 -2.2e+03 0 0.00153 0.107 1.26 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00697 0.00883 -2.22e+03 0.00258 0 0 0 Tracker initStep - 1 0.00668 0.116 -2.22e+03 0 0.00258 0.245 0.245 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00339 0.00446 -2.31e+03 0.00146 0 0 0 Tracker initStep - 1 0.0134 0.0432 -2.31e+03 0 0.00146 0.0996 0.0996 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00294 0.0039 -2.32e+03 0.00116 0 0 0 Tracker initStep - 1 0.0172 -0.0171 -2.32e+03 0 0.00116 0.0705 0.0705 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.28e-05 -0.000514 -2.42e+03 109 0 0 0 Target initStep - 1 -0.00886 -0.000748 -2.42e+03 95.2 0.447 0.41 0.41 Target eIoni - 2 -0.00826 -0.00133 -2.42e+03 91 0.0151 0.0169 0.427 Target eBrem - 3 -0.00269 -0.0126 -2.42e+03 89.3 0.199 0.165 0.592 Target eBrem - 4 0.0171 -0.0579 -2.42e+03 88.3 0.668 0.429 1.02 Target eBrem - 5 0.0467 -0.0867 -2.42e+03 86.1 0.525 0.427 1.45 Target eBrem - 6 0.0577 -0.0951 -2.42e+03 85.6 0.136 0.117 1.57 Target eBrem - 7 0.102 -0.114 -2.42e+03 78.9 0.328 0.3 1.87 Target eBrem - 8 0.377 -0.186 -2.42e+03 76.8 2 1.67 3.54 Target eBrem - 9 0.39 -0.203 -2.42e+03 75.7 0.204 0.185 3.72 Target eBrem - 10 0.395 -0.206 -2.42e+03 71.9 0.0499 0.0519 3.77 Target eBrem - 11 0.429 -0.227 -2.42e+03 70.3 0.323 0.301 4.08 Target eBrem - 12 0.431 -0.231 -2.42e+03 40.1 0.0366 0.0363 4.11 Target eBrem - 13 0.481 -0.244 -2.42e+03 39.5 0.4 0.35 4.46 Target eBrem - 14 0.729 -0.211 -2.42e+03 36.6 2.57 1.33 5.8 Target eBrem - 15 0.966 -0.396 -2.42e+03 35 1.44 0.655 6.45 Target eBrem - 16 1.09 -0.437 -2.42e+03 30.4 0.229 0.25 6.7 Target eBrem - 17 1.23 -0.493 -2.42e+03 29.6 0.332 0.244 6.94 Target eBrem - 18 1.43 -0.558 -2.42e+03 28.7 0.74 0.471 7.42 Target eBrem - 19 1.45 -0.565 -2.42e+03 26.4 0.0485 0.0277 7.44 Target eBrem - 20 1.48 -0.577 -2.42e+03 26 0.0485 0.0501 7.49 Target eBrem - 21 1.66 -0.687 -2.42e+03 23.6 0.469 0.438 7.93 Target eBrem - 22 2.85 -2.73 -2.41e+03 19.5 3.99 2.89 10.8 Target eBrem - 23 1.51 -1.95 -2.42e+03 16.5 2.77 2.3 13.1 Target eBrem - 24 1.38 -1.94 -2.42e+03 16.2 0.189 0.178 13.3 Target eBrem - 25 1.26 -1.94 -2.42e+03 14.5 0.311 0.261 13.6 Target eBrem - 26 0.612 -2.01 -2.42e+03 9.79 2.96 2.68 16.2 Target eBrem - 27 0.227 -2.74 -2.42e+03 8.6 1.19 1.01 17.2 Target eBrem - 28 -0.024 -2.78 -2.42e+03 5.67 0.288 0.265 17.5 Target eBrem - 29 -0.375 -3.53 -2.42e+03 2.3 1.31 1.27 18.8 Target eIoni - 30 0.221 -4.36 -2.42e+03 0.5 1.8 1.52 20.3 Target eBrem - 31 0.205 -4.38 -2.42e+03 0 0.5 0.305 20.6 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 142, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.375 -3.53 -2.42e+03 2.06 0 0 0 Target initStep - 1 -0.678 -3.96 -2.42e+03 0.738 0.741 0.625 0.625 Target eBrem - 2 -0.657 -3.98 -2.42e+03 0 0.738 0.504 1.13 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 115, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00886 -0.000748 -2.42e+03 13.2 0 0 0 Target initStep - 1 -0.00578 0.00475 -2.42e+03 11.6 1.24 1.1 1.1 Target eBrem - 2 -0.194 -0.3 -2.42e+03 10.5 0.872 0.785 1.88 Target eBrem - 3 -1.04 -0.305 -2.42e+03 8.55 1.34 0.898 2.78 Target eBrem - 4 -1.23 -0.496 -2.42e+03 7.73 0.419 0.327 3.11 Target eBrem - 5 -1.61 -0.64 -2.42e+03 1.11 0.792 0.581 3.69 Target eBrem - 6 -1.67 -0.653 -2.42e+03 0 1.11 0.826 4.52 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.03e-05 0.000145 -2.44e+03 1.02 0 0 0 Target initStep - 1 0.0192 0.0371 -2.44e+03 0 1.02 0.749 0.749 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -4.28e-05 -6.4e-05 -2.62e+03 0.001 0 0 0 World initStep - 1 0.0224 0.0058 -2.62e+03 0 0.001 0.0572 0.0572 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.85e-05 -9.27e-06 -2.77e+03 0.00311 0 0 0 World initStep - 1 -0.0265 0.146 -2.77e+03 0 0.00311 0.335 0.335 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.4e-05 -5.64e-06 -2.79e+03 0.00142 0 0 0 World initStep - 1 0.00399 0.0402 -2.79e+03 0 0.00142 0.0957 0.0957 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.79e-06 6.28e-06 -2.87e+03 0.00133 0 0 0 World initStep - 1 0.0265 0.0249 -2.87e+03 0 0.00133 0.0867 0.0867 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 148, Parent ID = 115 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.61 -0.64 -2.42e+03 5.83 0 0 0 Target initStep - 1 -16.8 -11 -2.4e+03 5.83 0 27.4 27.4 Tracker Transportation - 2 -1.98e+03 -1.35e+03 232 5.83 0 3.55e+03 3.58e+03 World Transportation - 3 -2.94e+03 -2e+03 1.51e+03 5.83 0 1.73e+03 5.3e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 147, Parent ID = 115 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.23 -0.496 -2.42e+03 0.393 0 0 0 Target initStep - 1 -2.99 -1.92 -2.42e+03 0 0.393 2.39 2.39 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 146, Parent ID = 115 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.04 -0.305 -2.42e+03 0.592 0 0 0 Target initStep - 1 -1.24 -0.413 -2.42e+03 0.482 0.11 0.246 0.246 Target compt - 2 -2.95 -4.33 -2.42e+03 0 0.482 4.96 5.21 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 145, Parent ID = 115 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.194 -0.3 -2.42e+03 0.213 0 0 0 Target initStep - 1 -0.431 -0.39 -2.42e+03 0 0.213 0.257 0.257 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 144, Parent ID = 115 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00578 0.00475 -2.42e+03 0.395 0 0 0 Target initStep - 1 -0.3 0.13 -2.42e+03 0 0.395 1.52 1.52 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 143, Parent ID = 142 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.678 -3.96 -2.42e+03 0.586 0 0 0 Target initStep - 1 0.932 -3.89 -2.42e+03 0.319 0.267 1.74 1.74 Target compt - 2 0.694 -1.79 -2.41e+03 0 0.319 3.71 5.45 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 141, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.024 -2.78 -2.42e+03 2.64 0 0 0 Target initStep - 1 -8.9 -8.78 -2.42e+03 0 0.088 10.9 10.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 149, Parent ID = 141 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -8.9 -8.78 -2.42e+03 2.56 0 0 0 Target initStep - 1 -9.08 -9.13 -2.42e+03 1.44 0.964 1.03 1.03 Target eBrem - 2 -9.31 -9.14 -2.42e+03 0.196 1.24 1.1 2.13 Target eIoni - 3 -9.3 -9.13 -2.42e+03 0 0.196 0.0787 2.21 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 150, Parent ID = 149 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -9.08 -9.13 -2.42e+03 0.153 0 0 0 Target initStep - 1 -9.33 -9.06 -2.42e+03 0 0.153 0.265 0.265 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 140, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.612 -2.01 -2.42e+03 1.72 0 0 0 Target initStep - 1 0.269 -9.49 -2.45e+03 1.72 0 33.2 33.2 World Transportation - 2 -4.91 -123 -2.94e+03 1.72 0 503 536 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 139, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.26 -1.94 -2.42e+03 1.43 0 0 0 Target initStep - 1 -4.75 -3.44 -2.43e+03 0 0.088 11.9 11.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 151, Parent ID = 139 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -4.75 -3.44 -2.43e+03 1.34 0 0 0 Target initStep - 1 -5.08 -2.99 -2.43e+03 0.294 1.05 1.03 1.03 Target eIoni - 2 -5.08 -2.99 -2.43e+03 0 0.294 0.145 1.17 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 138, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.38 -1.94 -2.42e+03 0.107 0 0 0 Target initStep - 1 1.36 -1.95 -2.42e+03 0 0.107 0.0619 0.0619 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 137, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.51 -1.95 -2.42e+03 0.204 0 0 0 Target initStep - 1 1.1 -2 -2.42e+03 0 0.204 0.633 0.633 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 136, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.85 -2.73 -2.41e+03 0.1 0 0 0 Target initStep - 1 2.76 -2.73 -2.41e+03 0 0.1 0.192 0.192 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 135, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.66 -0.687 -2.42e+03 1.96 0 0 0 Target initStep - 1 8.35 -8.59 -2.4e+03 1.96 0 18.4 18.4 Tracker Transportation - 2 1.55e+03 -1.83e+03 1.1e+03 1.96 0 4.24e+03 4.26e+03 World Transportation - 3 2.36e+03 -2.79e+03 2.94e+03 1.96 0 2.22e+03 6.48e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 134, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.48 -0.577 -2.42e+03 0.324 0 0 0 Target initStep - 1 2.07 -0.886 -2.41e+03 0 0.324 1.14 1.14 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 133, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.45 -0.565 -2.42e+03 2.26 0 0 0 Target initStep - 1 4.86 -2.17 -2.41e+03 0.432 0 6.08 6.08 Target compt - 2 9.03 -3.69 -2.41e+03 0 0.432 5.47 11.5 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 152, Parent ID = 133 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 4.86 -2.17 -2.41e+03 1.82 0 0 0 Target initStep - 1 4.63 -2.27 -2.41e+03 0.868 0.346 0.358 0.358 Target eBrem - 2 4.62 -2.23 -2.41e+03 0 0.868 0.617 0.975 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 153, Parent ID = 152 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 4.63 -2.27 -2.41e+03 0.61 0 0 0 Target initStep - 1 -0.0872 4.12 -2.41e+03 0.183 0.428 8.2 8.2 Target compt - 2 0.0595 3.72 -2.41e+03 0 0.183 0.453 8.66 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 132, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.43 -0.558 -2.42e+03 0.174 0 0 0 Target initStep - 1 1.53 -0.603 -2.42e+03 0 0.174 0.171 0.171 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 131, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.23 -0.493 -2.42e+03 0.455 0 0 0 Target initStep - 1 4.64 -1.98 -2.41e+03 0 0.455 6.47 6.47 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 130, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.09 -0.437 -2.42e+03 4.4 0 0 0 Target initStep - 1 7.81 -3.35 -2.4e+03 0.807 0 13.9 13.9 Target compt - 2 5.6 -4 -2.4e+03 0.447 0.36 4.18 18 Target compt - 3 5.43 -4.38 -2.4e+03 0.249 0.198 0.423 18.5 Target compt - 4 6.43 -4.76 -2.4e+03 0.249 0 1.4 19.9 Tracker Transportation - 5 2.24e+03 -856 -339 0.249 0 3.16e+03 3.18e+03 World Transportation - 6 2.94e+03 -1.12e+03 304 0.249 0 986 4.16e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 154, Parent ID = 130 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 7.81 -3.35 -2.4e+03 3.59 0 0 0 Target initStep - 1 7.31 -2.26 -2.4e+03 1.47 2.12 1.91 1.91 Target eIoni - 2 7.68 -1.99 -2.4e+03 0.113 1.36 1.12 3.04 Target eIoni - 3 7.68 -1.99 -2.4e+03 0 0.113 0.0332 3.07 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 129, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.966 -0.396 -2.42e+03 0.112 0 0 0 Target initStep - 1 0.993 -0.405 -2.42e+03 0 0.112 0.0622 0.0622 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 128, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.729 -0.211 -2.42e+03 0.326 0 0 0 Target initStep - 1 2.08 -0.923 -2.41e+03 0 0.326 4.05 4.05 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 127, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.481 -0.244 -2.42e+03 0.233 0 0 0 Target initStep - 1 0.49 -0.24 -2.42e+03 0 0.233 0.122 0.122 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 126, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.431 -0.231 -2.42e+03 30.2 0 0 0 Target initStep - 1 0.919 -0.759 -2.41e+03 0 0 6.25 6.25 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 155, Parent ID = 126 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.919 -0.759 -2.41e+03 13.3 0 0 0 Target initStep - 1 1.27 -0.804 -2.41e+03 11.9 0.966 0.84 0.84 Target eBrem - 2 1.68 -0.955 -2.41e+03 10.5 1.07 0.846 1.69 Target eBrem - 3 1.77 -0.906 -2.41e+03 9.63 0.214 0.252 1.94 Target eBrem - 4 1.53 -0.209 -2.41e+03 8.32 1.15 1.05 2.99 Target eBrem - 5 2.01 0.093 -2.41e+03 7.03 0.78 0.666 3.65 Target eBrem - 6 1.9 -0.203 -2.41e+03 5.68 1.08 0.993 4.64 Target eBrem - 7 1.85 -0.287 -2.41e+03 5 0.358 0.278 4.92 Target eBrem - 8 1.82 -0.297 -2.41e+03 4.59 0.159 0.155 5.08 Target eBrem - 9 2.69 -0.588 -2.41e+03 2.32 2.27 2.14 7.22 Target eIoni - 10 3.27 0.0706 -2.41e+03 0.29 1.55 1.27 8.48 Target eBrem - 11 3.28 0.0755 -2.41e+03 0 0.29 0.142 8.62 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 165, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.27 0.0706 -2.41e+03 0.481 0 0 0 Target initStep - 1 3.21 -0.122 -2.41e+03 0.403 0.0779 0.337 0.337 Target compt - 2 3.56 -1.31 -2.41e+03 0.373 0.0304 1.38 1.72 Target compt - 3 10.5 -10.8 -2.41e+03 0.167 0.206 11.9 13.6 Target compt - 4 10.5 -10.8 -2.41e+03 0 0.167 0.118 13.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 164, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.82 -0.297 -2.41e+03 0.254 0 0 0 Target initStep - 1 1.02 -0.393 -2.41e+03 0 0.254 1.63 1.63 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 163, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.85 -0.287 -2.41e+03 0.316 0 0 0 Target initStep - 1 1.85 0.497 -2.41e+03 0 0.316 2.17 2.17 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 162, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.9 -0.203 -2.41e+03 0.273 0 0 0 Target initStep - 1 0.562 -0.589 -2.41e+03 0 0.273 2.16 2.16 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 161, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.01 0.093 -2.41e+03 0.514 0 0 0 Target initStep - 1 0.87 -0.504 -2.41e+03 0.292 0.222 4.07 4.07 Target compt - 2 1.15 -0.846 -2.41e+03 0.229 0.0628 0.47 4.54 Target compt - 3 0.632 -2.24 -2.42e+03 0 0.229 2.89 7.43 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 160, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.53 -0.209 -2.41e+03 0.164 0 0 0 Target initStep - 1 2.19 0.755 -2.41e+03 0 0.164 1.17 1.17 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 159, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.77 -0.906 -2.41e+03 0.65 0 0 0 Target initStep - 1 2.53 1.53 -2.4e+03 0.65 0 11.1 11.1 Tracker Transportation - 2 51.5 159 -1.7e+03 0.65 0 719 730 Chamber Transportation - 3 65.4 204 -1.5e+03 0.65 0 205 936 Tracker Transportation - 4 107 338 -900 0.65 0 616 1.55e+03 Chamber Transportation - 5 121 383 -700 0.65 0 205 1.76e+03 Tracker Transportation - 6 163 518 -100 0.65 0 616 2.37e+03 Chamber Transportation - 7 177 563 100 0.65 0 205 2.58e+03 Tracker Transportation - 8 219 697 700 0.65 0 616 3.2e+03 Chamber Transportation - 9 233 742 900 0.65 0 205 3.4e+03 Tracker Transportation - 10 275 877 1.5e+03 0.65 0 616 4.02e+03 Chamber Transportation - 11 289 922 1.7e+03 0.65 0 205 4.22e+03 Tracker Transportation - 12 338 1.08e+03 2.4e+03 0.65 0 719 4.94e+03 World Transportation - 13 376 1.2e+03 2.94e+03 0.65 0 555 5.5e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 158, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.68 -0.955 -2.41e+03 0.35 0 0 0 Target initStep - 1 3.42 -0.00457 -2.4e+03 0 0.35 7.8 7.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 157, Parent ID = 155 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.27 -0.804 -2.41e+03 0.444 0 0 0 Target initStep - 1 1.35 -0.905 -2.41e+03 0.229 0.215 0.198 0.198 Target compt - 2 1.57 -0.273 -2.41e+03 0 0.229 0.707 0.906 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 125, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.429 -0.227 -2.42e+03 1.31 0 0 0 Target initStep - 1 0.656 -0.513 -2.42e+03 0.754 0.553 3.42 3.42 Target compt - 2 3.43 2.83 -2.41e+03 0 0.754 6.38 9.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 124, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.395 -0.206 -2.42e+03 3.68 0 0 0 Target initStep - 1 1.91 -0.901 -2.4e+03 3.08 0.601 16 16 Target compt - 2 2.15 -1.79 -2.4e+03 3.08 0 3.25 19.2 Tracker Transportation - 3 56.8 -201 -1.7e+03 3.08 0 730 749 Chamber Transportation - 4 65.2 -231 -1.59e+03 3.08 0 111 860 Tracker Transportation - 5 119 -428 -900 3.08 0 723 1.58e+03 Chamber Transportation - 6 135 -485 -700 3.08 0 209 1.79e+03 Tracker Transportation - 7 182 -655 -100 3.08 0 626 2.42e+03 Chamber Transportation - 8 197 -712 100 3.08 0 209 2.63e+03 Tracker Transportation - 9 244 -883 700 3.08 0 626 3.25e+03 Chamber Transportation - 10 260 -940 900 3.08 0 209 3.46e+03 Tracker Transportation - 11 307 -1.11e+03 1.5e+03 3.08 0 626 4.09e+03 Chamber Transportation - 12 322 -1.17e+03 1.7e+03 3.08 0 209 4.29e+03 Tracker Transportation - 13 377 -1.37e+03 2.4e+03 3.08 0 730 5.02e+03 World Transportation - 14 419 -1.52e+03 2.94e+03 3.08 0 563 5.59e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 123, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.39 -0.203 -2.42e+03 0.886 0 0 0 Target initStep - 1 0.827 -0.492 -2.42e+03 0.641 0.245 4.02 4.02 Target compt - 2 1.63 -0.65 -2.41e+03 0.537 0.104 1.14 5.16 Target compt - 3 16.7 -6.64 -2.41e+03 0.197 0.34 16.7 21.8 Target compt - 4 16.3 -6.82 -2.41e+03 0 0.197 0.409 22.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 122, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.377 -0.186 -2.42e+03 0.171 0 0 0 Target initStep - 1 0.382 -0.192 -2.42e+03 0 0.171 0.136 0.136 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 121, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.102 -0.114 -2.42e+03 6.35 0 0 0 Target initStep - 1 0.639 -0.64 -2.42e+03 0 0 5.41 5.41 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 166, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.639 -0.64 -2.42e+03 3.94 0 0 0 Target initStep - 1 1.3 -1.25 -2.42e+03 2.47 1.47 1.16 1.16 Target eBrem - 2 1.51 -0.956 -2.42e+03 0.587 1.88 1.59 2.76 Target eIoni - 3 1.54 -0.955 -2.42e+03 0 0.587 0.376 3.13 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 120, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0577 -0.0951 -2.42e+03 0.308 0 0 0 Target initStep - 1 0.236 -0.192 -2.42e+03 0 0.308 1.34 1.34 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 119, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0467 -0.0867 -2.42e+03 1.75 0 0 0 Target initStep - 1 2.09 -1.68 -2.4e+03 1.75 0 21.5 21.5 Tracker Transportation - 2 69.1 -53.9 -1.7e+03 1.75 0 705 727 Chamber Transportation - 3 88.2 -68.9 -1.5e+03 1.75 0 201 928 Tracker Transportation - 4 146 -114 -900 1.75 0 604 1.53e+03 Chamber Transportation - 5 165 -129 -700 1.75 0 201 1.73e+03 Tracker Transportation - 6 222 -173 -100 1.75 0 604 2.34e+03 Chamber Transportation - 7 241 -188 100 1.75 0 201 2.54e+03 Tracker Transportation - 8 299 -233 700 1.75 0 604 3.14e+03 Chamber Transportation - 9 318 -248 900 1.75 0 201 3.35e+03 Tracker Transportation - 10 375 -293 1.5e+03 1.75 0 604 3.95e+03 Chamber Transportation - 11 394 -308 1.7e+03 1.75 0 201 4.15e+03 Tracker Transportation - 12 461 -360 2.4e+03 1.75 0 705 4.86e+03 World Transportation - 13 513 -400 2.94e+03 1.75 0 544 5.4e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 118, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0171 -0.0579 -2.42e+03 0.333 0 0 0 Target initStep - 1 0.132 -0.139 -2.42e+03 0 0.333 1.18 1.18 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 117, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00269 -0.0126 -2.42e+03 1.46 0 0 0 Target initStep - 1 0.391 -1.17 -2.41e+03 1.22 0.239 14.7 14.7 Target compt - 2 -0.552 -3.75 -2.4e+03 0.395 0.825 6.52 21.2 Target compt - 3 -0.431 -1.13 -2.4e+03 0.395 0 3.06 24.3 Tracker Transportation - 4 110 2.4e+03 -950 0.395 0 2.8e+03 2.83e+03 World Transportation - 5 135 2.94e+03 -622 0.395 0 634 3.46e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 116, Parent ID = 7 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.00826 -0.00133 -2.42e+03 4.18 0 0 0 Target initStep - 1 0.194 -0.632 -2.41e+03 3.29 0.883 9.29 9.29 Target compt - 2 -1.53 1.21 -2.4e+03 3.29 0 13.3 22.6 Tracker Transportation - 3 -94 99.8 -1.7e+03 3.29 0 713 736 Chamber Transportation - 4 -120 128 -1.5e+03 3.29 0 204 939 Tracker Transportation - 5 -200 212 -900 3.29 0 611 1.55e+03 Chamber Transportation - 6 -226 241 -700 3.29 0 204 1.75e+03 Tracker Transportation - 7 -305 325 -100 3.29 0 611 2.37e+03 Chamber Transportation - 8 -332 353 100 3.29 0 204 2.57e+03 Tracker Transportation - 9 -411 438 700 3.29 0 611 3.18e+03 Chamber Transportation - 10 -437 466 900 3.29 0 204 3.38e+03 Tracker Transportation - 11 -517 551 1.5e+03 3.29 0 611 3.99e+03 Chamber Transportation - 12 -543 579 1.7e+03 3.29 0 204 4.2e+03 Tracker Transportation - 13 -635 677 2.4e+03 3.29 0 713 4.91e+03 World Transportation - 14 -707 753 2.94e+03 3.29 0 550 5.46e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 167, Parent ID = 121 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.639 -0.64 -2.42e+03 1.39 0 0 0 Target initStep - 1 -0.151 -0.831 -2.42e+03 0.328 1.06 1.08 1.08 Target eIoni - 2 -0.148 -0.847 -2.42e+03 0 0.328 0.166 1.25 Target eIoni - 3 -0.148 -0.847 -2.42e+03 0 0 0 1.25 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 156, Parent ID = 126 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.919 -0.759 -2.41e+03 15.8 0 0 0 Target initStep - 1 1.07 -0.838 -2.41e+03 15 0.694 0.48 0.48 Target eBrem - 2 1.16 -0.688 -2.41e+03 9.36 1.68 1.57 2.05 Target eBrem - 3 1.53 0.253 -2.41e+03 7.34 1.87 1.73 3.78 Target eBrem - 4 0.742 -0.668 -2.41e+03 5.51 1.67 1.71 5.5 Target eBrem - 5 0.782 -0.597 -2.41e+03 4.7 0.664 0.544 6.04 Target eBrem - 6 0.718 -0.427 -2.41e+03 3.93 0.322 0.2 6.24 Target eBrem - 7 1.17 1.13 -2.41e+03 1.51 2.42 2.02 8.26 Target eIoni - 8 1.2 0.724 -2.41e+03 0.872 0.641 0.514 8.77 Target eBrem - 9 1.13 0.73 -2.41e+03 0 0.872 0.625 9.4 Target eIoni - 10 1.13 0.73 -2.41e+03 0 0 0 9.4 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 8, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.28e-05 -0.000514 -2.42e+03 548 0 0 0 Target initStep - 1 0.00251 0.019 -2.42e+03 509 2.77 2.19 2.19 Target eBrem - 2 0.00322 0.0186 -2.42e+03 489 0.101 0.0886 2.28 Target eBrem - 3 0.00701 0.018 -2.42e+03 488 0.336 0.318 2.59 Target eBrem - 4 0.00754 0.0176 -2.42e+03 487 0.0523 0.0515 2.64 Target eIoni - 5 0.00852 0.0161 -2.42e+03 486 0.376 0.298 2.94 Target eBrem - 6 0.00587 0.000588 -2.42e+03 484 1.3 1.05 3.99 Target eBrem - 7 0.00741 -0.0035 -2.42e+03 483 1.09 0.891 4.88 Target eBrem - 8 0.0254 -0.0125 -2.42e+03 429 0.809 0.714 5.6 Target eBrem - 9 0.028 -0.014 -2.42e+03 388 0.0892 0.0845 5.68 Target eBrem - 10 0.0529 -0.0282 -2.42e+03 142 0.956 0.848 6.53 Target eBrem - 11 0.0604 -0.0309 -2.42e+03 140 0.191 0.186 6.72 Target eBrem - 12 0.0615 -0.0333 -2.42e+03 139 0.479 0.344 7.06 Target eBrem - 13 0.0968 -0.101 -2.41e+03 137 1.33 1.07 8.13 Target eBrem - 14 0.0923 -0.105 -2.41e+03 129 1.29 0.785 8.92 Target eBrem - 15 0.0905 -0.104 -2.41e+03 127 0.0386 0.0304 8.95 Target eBrem - 16 0.0861 -0.106 -2.41e+03 124 0.15 0.129 9.08 Target eBrem - 17 0.0453 -0.0779 -2.41e+03 116 1.35 1.02 10.1 Target eBrem - 18 0.039 -0.0728 -2.41e+03 116 0.0783 0.0845 10.2 Target eBrem - 19 0.00967 -0.0466 -2.41e+03 111 0.747 0.5 10.7 Target eIoni - 20 -0.0454 0.0717 -2.41e+03 109 1.81 1.3 12 Target eBrem - 21 -0.0866 0.0938 -2.41e+03 105 1.36 0.8 12.8 Target eBrem - 22 -0.0672 0.131 -2.41e+03 93.4 0.537 0.374 13.2 Target eBrem - 23 0.0689 0.243 -2.41e+03 73 1.68 1.04 14.2 Target eBrem - 24 0.173 0.522 -2.41e+03 68.8 1.82 1.34 15.5 Target eBrem - 25 0.244 0.665 -2.41e+03 66.8 0.589 0.431 16 Target eBrem - 26 0.303 0.826 -2.41e+03 65.4 1.29 0.432 16.4 Target eBrem - 27 0.395 1.28 -2.41e+03 62.7 1.53 1.36 17.8 Target eIoni - 28 0.435 1.31 -2.41e+03 61.2 0.0786 0.0798 17.8 Target eIoni - 29 0.443 1.31 -2.41e+03 61 0.00398 0.0155 17.8 Target eBrem - 30 0.596 1.4 -2.4e+03 60.5 0.38 0.3 18.1 Target eBrem - 31 0.65 1.44 -2.4e+03 57.4 0.151 0.116 18.3 Target eBrem - 32 1.16 1.88 -2.4e+03 55.7 1.56 1.05 19.3 Target eBrem - 33 1.38 1.98 -2.4e+03 54.9 0.429 0.311 19.6 Target eBrem - 34 1.73 2.16 -2.4e+03 52.3 0.515 0.54 20.2 Target eIoni - 35 1.91 2.27 -2.4e+03 51.8 0.401 0.303 20.5 Target eBrem - 36 2.23 2.57 -2.4e+03 41.6 0.541 0.586 21 Target eBrem - 37 2.57 2.85 -2.4e+03 40.5 0.835 0.637 21.7 Target eBrem - 38 2.73 3.01 -2.4e+03 14.3 0.85 0.369 22.1 Target eBrem - 39 2.81 3.07 -2.4e+03 13.7 0.196 0.18 22.2 Target eBrem - 40 2.97 3.22 -2.4e+03 6.38 0.418 0.385 22.6 Target eBrem - 41 3.19 3.17 -2.4e+03 3.07 3.31 2.53 25.1 Target eIoni - 42 3.1 3.31 -2.4e+03 1.97 1.1 0.612 25.8 Tracker Transportation - 43 -18.5 74.6 -2.38e+03 1.96 0.00959 76.6 102 Tracker eIoni - 44 -22.1 91 -2.38e+03 1.96 0.0041 17.4 120 Tracker eIoni - 45 -44.2 184 -2.35e+03 1.94 0.0137 100 220 Tracker StepLimiter - 46 -51.6 236 -2.33e+03 1.93 0.00555 55.5 275 Tracker eIoni - 47 -61.8 333 -2.31e+03 1.92 0.013 100 375 Tracker StepLimiter - 48 -74.7 400 -2.29e+03 1.91 0.00958 71.4 447 Tracker eIoni - 49 -76.6 419 -2.28e+03 1.91 0.00402 19.4 466 Tracker eIoni - 50 -83.5 480 -2.27e+03 1.87 0.00695 62.6 529 Tracker eIoni - 51 -86.2 519 -2.26e+03 1.86 0.00655 41.5 570 Tracker eIoni - 52 -86 524 -2.26e+03 1.86 0.000315 4.9 575 Tracker eIoni - 53 -86.1 538 -2.25e+03 1.86 0.00218 14.6 590 Tracker eIoni - 54 -84.6 612 -2.23e+03 1.84 0.00987 76.7 666 Tracker eIoni - 55 -75.1 694 -2.2e+03 1.83 0.0103 88.2 755 Tracker eIoni - 56 -70.4 717 -2.19e+03 1.82 0.00388 25.1 780 Tracker eIoni - 57 -46.3 808 -2.16e+03 1.81 0.0137 100 880 Tracker StepLimiter - 58 -2.88 892 -2.13e+03 1.8 0.0133 100 980 Tracker StepLimiter - 59 25.2 956 -2.11e+03 1.78 0.00997 72.6 1.05e+03 Tracker eIoni - 60 38.4 982 -2.1e+03 1.77 0.00539 31 1.08e+03 Tracker eIoni - 61 80.7 1.07e+03 -2.07e+03 1.76 0.0105 100 1.18e+03 Tracker StepLimiter - 62 85.4 1.07e+03 -2.06e+03 1.76 0.00102 9.9 1.19e+03 Tracker eIoni - 63 96.8 1.09e+03 -2.05e+03 1.76 0.00235 24.2 1.22e+03 Tracker eIoni - 64 104 1.1e+03 -2.05e+03 1.75 0.00186 13.9 1.23e+03 Tracker eIoni - 65 152 1.18e+03 -2.01e+03 1.74 0.0126 100 1.33e+03 Tracker StepLimiter - 66 197 1.26e+03 -1.96e+03 1.73 0.0118 100 1.43e+03 Tracker StepLimiter - 67 216 1.3e+03 -1.94e+03 1.72 0.0064 45.9 1.48e+03 Tracker eIoni - 68 241 1.33e+03 -1.92e+03 1.66 0.00973 51.9 1.53e+03 Tracker eIoni - 69 295 1.4e+03 -1.86e+03 1.65 0.0134 100 1.63e+03 Tracker StepLimiter - 70 307 1.41e+03 -1.85e+03 1.64 0.00327 20.3 1.65e+03 Tracker eIoni - 71 331 1.43e+03 -1.83e+03 1.64 0.00642 38.8 1.69e+03 Tracker eIoni - 72 395 1.49e+03 -1.78e+03 1.62 0.0116 100 1.79e+03 Tracker StepLimiter - 73 445 1.53e+03 -1.74e+03 1.62 0.00864 76.6 1.86e+03 Tracker eIoni - 74 490 1.58e+03 -1.69e+03 1.6 0.00954 78.5 1.94e+03 Tracker eIoni - 75 549 1.63e+03 -1.63e+03 1.59 0.00954 100 2.04e+03 Tracker StepLimiter - 76 577 1.66e+03 -1.61e+03 1.58 0.00682 48.2 2.09e+03 Tracker eIoni - 77 589 1.67e+03 -1.6e+03 1.57 0.00281 21.5 2.11e+03 Tracker eIoni - 78 655 1.72e+03 -1.54e+03 1.56 0.0103 100 2.21e+03 Tracker StepLimiter - 79 724 1.76e+03 -1.48e+03 1.55 0.0131 100 2.31e+03 Tracker StepLimiter - 80 785 1.82e+03 -1.42e+03 1.54 0.0147 100 2.41e+03 Tracker StepLimiter - 81 805 1.84e+03 -1.4e+03 1.53 0.00651 38.8 2.45e+03 Tracker eIoni - 82 849 1.9e+03 -1.33e+03 1.51 0.0125 100 2.55e+03 Tracker StepLimiter - 83 895 1.96e+03 -1.27e+03 1.5 0.0136 100 2.65e+03 Tracker StepLimiter - 84 909 1.98e+03 -1.26e+03 1.49 0.00459 23.1 2.67e+03 Tracker eIoni - 85 915 1.99e+03 -1.26e+03 1.49 0.00156 11.3 2.69e+03 Tracker eIoni - 86 928 2e+03 -1.25e+03 1.49 0.00347 22 2.71e+03 Tracker eIoni - 87 935 2.01e+03 -1.24e+03 1.48 0.00127 10.8 2.72e+03 Tracker eIoni - 88 950 2.03e+03 -1.23e+03 1.48 0.00276 25.6 2.74e+03 Tracker eIoni - 89 970 2.06e+03 -1.21e+03 1.47 0.00415 39.5 2.78e+03 Tracker eIoni - 90 1.02e+03 2.13e+03 -1.18e+03 1.46 0.0137 100 2.88e+03 Tracker StepLimiter - 91 1.02e+03 2.14e+03 -1.17e+03 1.46 0.000555 5.39 2.89e+03 Tracker eIoni - 92 1.04e+03 2.16e+03 -1.15e+03 1.45 0.00588 37 2.93e+03 World Transportation - 93 1.11e+03 2.23e+03 -1.11e+03 1.44 0.0141 105 3.03e+03 World eIoni - 94 1.18e+03 2.34e+03 -1.08e+03 1.41 0.0198 135 3.17e+03 World eIoni - 95 1.2e+03 2.36e+03 -1.07e+03 1.41 0.00578 23.1 3.19e+03 World eIoni - 96 1.2e+03 2.36e+03 -1.07e+03 1.4 0.00117 9.62 3.2e+03 World eIoni - 97 1.27e+03 2.42e+03 -1.05e+03 1.39 0.0109 90.4 3.29e+03 World eIoni - 98 1.42e+03 2.52e+03 -1.03e+03 1.37 0.0215 176 3.47e+03 World eIoni - 99 1.5e+03 2.58e+03 -987 1.35 0.0162 111 3.58e+03 World eIoni - 100 1.56e+03 2.64e+03 -919 1.33 0.0143 109 3.69e+03 World eIoni - 101 1.59e+03 2.68e+03 -891 1.32 0.0101 57.4 3.74e+03 World eIoni - 102 1.61e+03 2.73e+03 -860 1.31 0.00647 62.7 3.81e+03 World eIoni - 103 1.65e+03 2.78e+03 -831 1.23 0.0112 64.2 3.87e+03 World eIoni - 104 1.65e+03 2.79e+03 -825 1.23 0.00266 13.8 3.88e+03 World eIoni - 105 1.68e+03 2.87e+03 -762 1.21 0.0176 113 4e+03 World eIoni - 106 1.7e+03 2.91e+03 -739 1.2 0.00697 49.3 4.05e+03 World eIoni - 107 1.71e+03 2.94e+03 -725 1.2 0.00458 30.8 4.08e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 263, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.7e+03 2.91e+03 -739 0.00183 0 0 0 World initStep - 1 1.7e+03 2.91e+03 -739 0 0.00183 0.141 0.141 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 262, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.68e+03 2.87e+03 -762 0.00258 0 0 0 World initStep - 1 1.68e+03 2.87e+03 -762 0 0.00258 0.244 0.244 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 261, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.65e+03 2.78e+03 -831 0.0689 0 0 0 World initStep - 1 1.66e+03 2.77e+03 -835 0.0612 0.00763 19.6 19.6 World eIoni - 2 1.67e+03 2.76e+03 -835 0.0546 0.0066 16.2 35.8 World eIoni - 3 1.68e+03 2.76e+03 -834 0.0378 0.00113 2.77 38.6 World eIoni - 4 1.68e+03 2.76e+03 -827 0.0324 0.00542 7.66 46.2 World eIoni - 5 1.68e+03 2.76e+03 -823 0.0282 0.00414 6.16 52.4 World eIoni - 6 1.68e+03 2.77e+03 -822 0.0229 0.00534 5.13 57.5 World eIoni - 7 1.68e+03 2.77e+03 -820 0.0179 0.00383 3.57 61.1 World eIoni - 8 1.69e+03 2.77e+03 -820 0.0138 0.00402 3.04 64.1 World eIoni - 9 1.69e+03 2.77e+03 -819 0.00795 0.0059 2.4 66.5 World eIoni - 10 1.69e+03 2.77e+03 -818 0.00312 0.00482 1.5 68 World eIoni - 11 1.69e+03 2.77e+03 -818 0 0.00312 0.338 68.4 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 265, Parent ID = 261 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.68e+03 2.77e+03 -820 0.00119 0 0 0 World initStep - 1 1.68e+03 2.77e+03 -820 0 0.00119 0.0731 0.0731 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 264, Parent ID = 261 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.68e+03 2.76e+03 -834 0.0157 0 0 0 World initStep - 1 1.68e+03 2.76e+03 -835 0.0121 0.00365 2.69 2.69 World eIoni - 2 1.68e+03 2.76e+03 -835 0.00657 0.00432 2.11 4.8 World eIoni - 3 1.68e+03 2.76e+03 -836 0 0.00657 1.21 6 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 266, Parent ID = 264 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.68e+03 2.76e+03 -835 0.00117 0 0 0 World initStep - 1 1.68e+03 2.76e+03 -835 0 0.00117 0.0713 0.0713 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 260, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.61e+03 2.73e+03 -860 0.00119 0 0 0 World initStep - 1 1.61e+03 2.73e+03 -860 0 0.00119 0.0737 0.0737 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 259, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.59e+03 2.68e+03 -891 0.00343 0 0 0 World initStep - 1 1.59e+03 2.68e+03 -891 0 0.00343 0.397 0.397 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 258, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.56e+03 2.64e+03 -919 0.00133 0 0 0 World initStep - 1 1.56e+03 2.64e+03 -919 0 0.00133 0.0868 0.0868 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 257, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.5e+03 2.58e+03 -987 0.00202 0 0 0 World initStep - 1 1.5e+03 2.58e+03 -987 0 0.00202 0.165 0.165 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 256, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.42e+03 2.52e+03 -1.03e+03 0.00166 0 0 0 World initStep - 1 1.42e+03 2.52e+03 -1.03e+03 0 0.00166 0.121 0.121 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 255, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.27e+03 2.42e+03 -1.05e+03 0.00144 0 0 0 World initStep - 1 1.27e+03 2.42e+03 -1.05e+03 0 0.00144 0.0975 0.0975 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 254, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.2e+03 2.36e+03 -1.07e+03 0.00288 0 0 0 World initStep - 1 1.2e+03 2.36e+03 -1.07e+03 0 0.00288 0.294 0.294 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 253, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.2e+03 2.36e+03 -1.07e+03 0.00139 0 0 0 World initStep - 1 1.2e+03 2.36e+03 -1.07e+03 0 0.00139 0.0922 0.0922 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 252, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.18e+03 2.34e+03 -1.08e+03 0.00173 0 0 0 World initStep - 1 1.18e+03 2.34e+03 -1.08e+03 0 0.00173 0.129 0.129 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 251, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.11e+03 2.23e+03 -1.11e+03 0.000999 0 0 0 World initStep - 1 1.11e+03 2.23e+03 -1.11e+03 0 0.000999 0.057 0.057 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 250, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.02e+03 2.14e+03 -1.17e+03 0.00106 0 0 0 Tracker initStep - 1 1.02e+03 2.14e+03 -1.17e+03 0 0.00106 0.0621 0.0621 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 249, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 970 2.06e+03 -1.21e+03 0.00287 0 0 0 Tracker initStep - 1 970 2.06e+03 -1.21e+03 0 0.00287 0.293 0.293 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 248, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 2.03e+03 -1.23e+03 0.00183 0 0 0 Tracker initStep - 1 950 2.03e+03 -1.23e+03 0 0.00183 0.141 0.141 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 247, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 935 2.01e+03 -1.24e+03 0.00121 0 0 0 Tracker initStep - 1 935 2.01e+03 -1.24e+03 0 0.00121 0.0749 0.0749 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 246, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 928 2e+03 -1.25e+03 0.00104 0 0 0 Tracker initStep - 1 928 2e+03 -1.25e+03 0 0.00104 0.0601 0.0601 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 245, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 915 1.99e+03 -1.26e+03 0.000998 0 0 0 Tracker initStep - 1 915 1.99e+03 -1.26e+03 0 0.000998 0.0569 0.0569 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 244, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 909 1.98e+03 -1.26e+03 0.00109 0 0 0 Tracker initStep - 1 909 1.98e+03 -1.26e+03 0 0.00109 0.0646 0.0646 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 243, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 805 1.84e+03 -1.4e+03 0.00414 0 0 0 Tracker initStep - 1 805 1.84e+03 -1.4e+03 0 0.00414 0.549 0.549 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 242, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 589 1.67e+03 -1.6e+03 0.0066 0 0 0 Tracker initStep - 1 590 1.67e+03 -1.59e+03 0.000707 0.00589 1.22 1.22 Tracker eIoni - 2 590 1.67e+03 -1.59e+03 0 0.000707 0.0355 1.25 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 241, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 577 1.66e+03 -1.61e+03 0.00294 0 0 0 Tracker initStep - 1 577 1.66e+03 -1.61e+03 0 0.00294 0.304 0.304 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 240, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 490 1.58e+03 -1.69e+03 0.00269 0 0 0 Tracker initStep - 1 490 1.58e+03 -1.69e+03 0 0.00269 0.263 0.263 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 239, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 445 1.53e+03 -1.74e+03 0.00102 0 0 0 Tracker initStep - 1 445 1.53e+03 -1.74e+03 0 0.00102 0.0589 0.0589 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 238, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 331 1.43e+03 -1.83e+03 0.00106 0 0 0 Tracker initStep - 1 331 1.43e+03 -1.83e+03 0 0.00106 0.0621 0.0621 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 237, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 307 1.41e+03 -1.85e+03 0.00233 0 0 0 Tracker initStep - 1 307 1.41e+03 -1.85e+03 0 0.00233 0.207 0.207 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 236, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 241 1.33e+03 -1.92e+03 0.0454 0 0 0 Tracker initStep - 1 238 1.34e+03 -1.93e+03 0.0404 0.00499 10.1 10.1 Tracker eIoni - 2 243 1.35e+03 -1.93e+03 0.0348 0.00557 8.46 18.5 Tracker eIoni - 3 244 1.35e+03 -1.93e+03 0.0303 0.00453 6.82 25.4 Tracker eIoni - 4 243 1.35e+03 -1.93e+03 0.0234 0.00407 4.72 30.1 Tracker eIoni - 5 243 1.35e+03 -1.93e+03 0.0226 0.000828 1.01 31.1 Tracker eIoni - 6 243 1.35e+03 -1.93e+03 0.0177 0.00317 1.8 32.9 Tracker eIoni - 7 242 1.35e+03 -1.94e+03 0.0139 0.00382 3.01 35.9 Tracker eIoni - 8 240 1.35e+03 -1.94e+03 0.0103 0.0036 2.41 38.3 Tracker eIoni - 9 241 1.35e+03 -1.94e+03 0.00641 0.00386 1.88 40.2 Tracker eIoni - 10 241 1.35e+03 -1.94e+03 0.000539 0.00587 1.17 41.4 Tracker eIoni - 11 241 1.35e+03 -1.94e+03 0 0.000539 0.0251 41.4 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 268, Parent ID = 236 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 243 1.35e+03 -1.93e+03 0.00172 0 0 0 Tracker initStep - 1 243 1.35e+03 -1.93e+03 0 0.00172 0.128 0.128 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 267, Parent ID = 236 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 243 1.35e+03 -1.93e+03 0.00283 0 0 0 Tracker initStep - 1 243 1.35e+03 -1.93e+03 0 0.00283 0.285 0.285 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 235, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 216 1.3e+03 -1.94e+03 0.00267 0 0 0 Tracker initStep - 1 216 1.3e+03 -1.94e+03 0 0.00267 0.259 0.259 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 234, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 104 1.1e+03 -2.05e+03 0.00406 0 0 0 Tracker initStep - 1 103 1.1e+03 -2.05e+03 0 0.00406 0.532 0.532 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 233, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 96.8 1.09e+03 -2.05e+03 0.00102 0 0 0 Tracker initStep - 1 96.8 1.09e+03 -2.05e+03 0 0.00102 0.0588 0.0588 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 232, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 85.4 1.07e+03 -2.06e+03 0.00138 0 0 0 Tracker initStep - 1 85.4 1.07e+03 -2.06e+03 0 0.00138 0.0916 0.0916 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 231, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 38.4 982 -2.1e+03 0.00512 0 0 0 Tracker initStep - 1 38.1 982 -2.1e+03 0 0.00512 0.8 0.8 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 230, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 25.2 956 -2.11e+03 0.0033 0 0 0 Tracker initStep - 1 25.2 956 -2.11e+03 0 0.0033 0.371 0.371 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 229, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -70.4 717 -2.19e+03 0.00228 0 0 0 Tracker initStep - 1 -70.4 717 -2.19e+03 0 0.00228 0.2 0.2 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 228, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -75.1 694 -2.2e+03 0.00324 0 0 0 Tracker initStep - 1 -75.2 694 -2.2e+03 0 0.00324 0.36 0.36 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 227, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -84.6 612 -2.23e+03 0.00138 0 0 0 Tracker initStep - 1 -84.6 612 -2.23e+03 0 0.00138 0.0912 0.0912 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 226, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -86.1 538 -2.25e+03 0.00203 0 0 0 Tracker initStep - 1 -86.2 538 -2.25e+03 0 0.00203 0.166 0.166 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 225, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -86 524 -2.26e+03 0.0016 0 0 0 Tracker initStep - 1 -86 524 -2.26e+03 0 0.0016 0.115 0.115 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 224, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -86.2 519 -2.26e+03 0.00308 0 0 0 Tracker initStep - 1 -86.3 519 -2.26e+03 0 0.00308 0.329 0.329 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 223, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -83.5 480 -2.27e+03 0.0268 0 0 0 Tracker initStep - 1 -87 479 -2.28e+03 0.0234 0.00336 4.79 4.79 Tracker eIoni - 2 -89.4 480 -2.28e+03 0.0192 0.00421 4.07 8.86 Tracker eIoni - 3 -88.8 483 -2.28e+03 0.0151 0.00411 3.27 12.1 Tracker eIoni - 4 -87.5 484 -2.28e+03 0.0112 0.00393 2.59 14.7 Tracker eIoni - 5 -87.7 485 -2.28e+03 0.00637 0.00478 2.01 16.7 Tracker eIoni - 6 -87.1 484 -2.28e+03 0.00275 0.00362 1.16 17.9 Tracker eIoni - 7 -87 484 -2.28e+03 0 0.00275 0.272 18.2 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 222, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -76.6 419 -2.28e+03 0.00118 0 0 0 Tracker initStep - 1 -76.7 419 -2.28e+03 0 0.00118 0.0726 0.0726 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 221, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -74.7 400 -2.29e+03 0.0012 0 0 0 Tracker initStep - 1 -74.6 400 -2.29e+03 0 0.0012 0.0739 0.0739 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 220, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -51.6 236 -2.33e+03 0.00404 0 0 0 Tracker initStep - 1 -51.6 237 -2.33e+03 0 0.00404 0.527 0.527 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 219, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -22.1 91 -2.38e+03 0.00159 0 0 0 Tracker initStep - 1 -22 91 -2.38e+03 0 0.00159 0.113 0.113 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 218, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -18.5 74.6 -2.38e+03 0.00178 0 0 0 Tracker initStep - 1 -18.5 74.6 -2.38e+03 0 0.00178 0.135 0.135 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 211, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.73 2.16 -2.4e+03 2.08 0 0 0 Target initStep - 1 2.2 1.78 -2.4e+03 0.686 1.4 1.45 1.45 Target eIoni - 2 2.18 1.8 -2.4e+03 0 0.686 0.461 1.91 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 205, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.435 1.31 -2.41e+03 1.4 0 0 0 Target initStep - 1 0.512 1.23 -2.41e+03 0.838 0.165 0.188 0.188 Target eBrem - 2 0.469 1.23 -2.41e+03 0 0.838 0.591 0.779 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 204, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.395 1.28 -2.41e+03 1.1 0 0 0 Target initStep - 1 0.305 1.3 -2.41e+03 0.26 0.35 0.274 0.274 Target eBrem - 2 0.299 1.3 -2.41e+03 0 0.26 0.121 0.394 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 196, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00967 -0.0466 -2.41e+03 3.76 0 0 0 Target initStep - 1 0.69 -0.304 -2.41e+03 1.24 2.52 1.95 1.95 Target eIoni - 2 0.661 -0.378 -2.41e+03 0 1.24 0.941 2.89 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 181, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00754 0.0176 -2.42e+03 1.13 0 0 0 Target initStep - 1 0.11 0.0411 -2.42e+03 0.177 0.216 0.177 0.177 Target eBrem - 2 0.112 0.0372 -2.42e+03 0 0.177 0.0674 0.244 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 271, Parent ID = 181 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.11 0.0411 -2.42e+03 0.739 0 0 0 Target initStep - 1 -0.0053 -4.85 -2.43e+03 0.23 0.509 9.8 9.8 Target compt - 2 -1.21 -4.26 -2.43e+03 0 0.23 1.45 11.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 270, Parent ID = 204 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.305 1.3 -2.41e+03 0.494 0 0 0 Target initStep - 1 -1.57 -1.56 -2.4e+03 0 0.494 4.04 4.04 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 269, Parent ID = 205 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.512 1.23 -2.41e+03 0.399 0 0 0 Target initStep - 1 -4.42 0.817 -2.4e+03 0 0.399 5.05 5.05 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 217, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.97 3.22 -2.4e+03 6.94 0 0 0 Target initStep - 1 3.86 4.03 -2.4e+03 6.94 0 2.04 2.04 Tracker Transportation - 2 1.78e+03 1.61e+03 871 6.94 0 4.05e+03 4.06e+03 World Transportation - 3 2.9e+03 2.63e+03 2.94e+03 6.94 0 2.56e+03 6.62e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 216, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.81 3.07 -2.4e+03 0.313 0 0 0 Target initStep - 1 4.2 4.21 -2.4e+03 0.313 0 2.65 2.65 Tracker Transportation - 2 1.85e+03 1.53e+03 192 0.313 0 3.53e+03 3.53e+03 World Transportation - 3 2.94e+03 2.43e+03 1.72e+03 0.313 0 2.08e+03 5.61e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 215, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.73 3.01 -2.4e+03 25.4 0 0 0 Target initStep - 1 4.08 4.38 -2.4e+03 25.4 0 2.85 2.85 Tracker Transportation - 2 1.69e+03 1.71e+03 196 25.4 0 3.53e+03 3.53e+03 World Transportation - 3 2.9e+03 2.94e+03 2.07e+03 25.4 0 2.56e+03 6.09e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 214, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.57 2.85 -2.4e+03 0.305 0 0 0 Target initStep - 1 2.71 3.51 -2.4e+03 0.249 0.0554 1.37 1.37 Target compt - 2 1.75 5.42 -2.4e+03 0 0.249 2.25 3.62 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 213, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.23 2.57 -2.4e+03 9.57 0 0 0 Target initStep - 1 4.06 4.53 -2.4e+03 9.57 0 3.91 3.91 Tracker Transportation - 2 1.64e+03 1.75e+03 149 9.57 0 3.5e+03 3.5e+03 World Transportation - 3 2.75e+03 2.94e+03 1.88e+03 9.57 0 2.37e+03 5.88e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 212, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.91 2.27 -2.4e+03 0.134 0 0 0 Target initStep - 1 1.95 2.3 -2.4e+03 0 0.134 0.065 0.065 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 210, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.38 1.98 -2.4e+03 0.394 0 0 0 Target initStep - 1 3.29 3.06 -2.4e+03 0 0.394 2.87 2.87 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 209, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.16 1.88 -2.4e+03 0.107 0 0 0 Target initStep - 1 1.47 2.04 -2.4e+03 0 0.107 0.432 0.432 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 208, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.65 1.44 -2.4e+03 3 0 0 0 Target initStep - 1 3.56 3.47 -2.4e+03 3 0 5.98 5.98 Tracker Transportation - 2 1.97e+03 1.37e+03 850 3 0 4.04e+03 4.04e+03 World Transportation - 3 2.94e+03 2.05e+03 2.45e+03 3 0 1.99e+03 6.04e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 207, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.596 1.4 -2.4e+03 0.123 0 0 0 Target initStep - 1 0.882 1.59 -2.4e+03 0 0.123 0.609 0.609 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 206, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.443 1.31 -2.41e+03 0.202 0 0 0 Target initStep - 1 0.515 1.36 -2.41e+03 0 0.202 0.142 0.142 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 203, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.303 0.826 -2.41e+03 0.173 0 0 0 Target initStep - 1 0.325 0.918 -2.41e+03 0 0.173 0.373 0.373 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 202, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.244 0.665 -2.41e+03 1.43 0 0 0 Target initStep - 1 0.355 0.882 -2.41e+03 1.23 0.2 0.64 0.64 Target compt - 2 3.49 5.55 -2.4e+03 1.23 0 8.45 9.09 Tracker Transportation - 3 1.34e+03 1.99e+03 284 1.23 0 3.6e+03 3.61e+03 World Transportation - 4 1.97e+03 2.94e+03 1.56e+03 1.23 0 1.71e+03 5.32e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 201, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.173 0.522 -2.41e+03 2.33 0 0 0 Target initStep - 1 1.2 2.05 -2.4e+03 2.33 0 7.53 7.53 Tracker Transportation - 2 99.4 149 -1.7e+03 2.33 0 722 729 Chamber Transportation - 3 127 191 -1.5e+03 2.33 0 206 936 Tracker Transportation - 4 212 316 -900 2.33 0 619 1.55e+03 Chamber Transportation - 5 240 358 -700 2.33 0 206 1.76e+03 Tracker Transportation - 6 324 484 -100 2.33 0 619 2.38e+03 Chamber Transportation - 7 352 526 100 2.33 0 206 2.59e+03 Tracker Transportation - 8 436 651 700 2.33 0 619 3.2e+03 Chamber Transportation - 9 464 693 900 2.33 0 206 3.41e+03 Tracker Transportation - 10 548 819 1.5e+03 2.33 0 619 4.03e+03 Chamber Transportation - 11 577 861 1.7e+03 2.33 0 206 4.24e+03 Tracker Transportation - 12 675 1.01e+03 2.4e+03 2.33 0 722 4.96e+03 World Transportation - 13 751 1.12e+03 2.94e+03 2.33 0 557 5.51e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 200, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0689 0.243 -2.41e+03 18.7 0 0 0 Target initStep - 1 1.01 2.26 -2.4e+03 0 0 8.13 8.13 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 272, Parent ID = 200 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.01 2.26 -2.4e+03 10 0 0 0 Target initStep - 1 1.12 2.34 -2.4e+03 9.05 1 0.388 0.388 Target msc - 2 0.984 2.37 -2.4e+03 8.6 0.451 0.467 0.855 Target msc - 3 1.01 2.38 -2.4e+03 8.53 0.0634 0.0477 0.902 Tracker Transportation - 4 41.6 27.9 -2.31e+03 8.52 0.016 100 101 Tracker StepLimiter - 5 61.6 40.4 -2.27e+03 8.51 0.00701 48.5 149 Tracker eIoni - 6 75.1 49 -2.24e+03 8.5 0.006 32.6 182 Tracker eIoni - 7 84.8 55.2 -2.22e+03 8.5 0.00231 22.8 205 Tracker eIoni - 8 125 84.9 -2.14e+03 8.48 0.0136 100 305 Tracker StepLimiter - 9 162 108 -2.06e+03 8.47 0.0137 83.6 388 Tracker eIoni - 10 162 108 -2.06e+03 8.47 0.000196 1.57 390 Tracker eIoni - 11 186 122 -2.02e+03 8.45 0.00875 54 444 Tracker eIoni - 12 229 152 -1.93e+03 8.43 0.0172 100 544 Tracker StepLimiter - 13 251 169 -1.88e+03 8.42 0.00506 55.1 599 Tracker eIoni - 14 291 199 -1.8e+03 8.41 0.0151 100 699 Tracker StepLimiter - 15 330 229 -1.71e+03 8.39 0.0145 100 799 Tracker StepLimiter - 16 366 262 -1.62e+03 8.37 0.0184 100 899 Tracker StepLimiter - 17 376 269 -1.6e+03 8.36 0.00375 26 925 Tracker eIoni - 18 415 298 -1.51e+03 8.35 0.0152 100 1.03e+03 Tracker StepLimiter - 19 417 300 -1.51e+03 8.35 0.000612 6.24 1.03e+03 Tracker eIoni - 20 448 324 -1.43e+03 8.33 0.0141 85.4 1.12e+03 Tracker eIoni - 21 481 351 -1.35e+03 8.31 0.0146 90.9 1.21e+03 Tracker eIoni - 22 484 353 -1.34e+03 8.31 0.000981 6.69 1.21e+03 Tracker eIoni - 23 522 386 -1.26e+03 8.29 0.0169 100 1.31e+03 Tracker StepLimiter - 24 556 417 -1.18e+03 8.28 0.0148 89.1 1.4e+03 Tracker eIoni - 25 589 450 -1.09e+03 8.26 0.0194 100 1.5e+03 Tracker StepLimiter - 26 623 481 -1e+03 8.25 0.0125 100 1.6e+03 Tracker StepLimiter - 27 657 511 -915 8.23 0.0151 100 1.7e+03 Tracker StepLimiter - 28 672 523 -879 8.22 0.00747 41 1.74e+03 Tracker eIoni - 29 708 556 -792 8.2 0.0171 100 1.84e+03 Tracker StepLimiter - 30 709 557 -789 8.2 0.000701 2.77 1.85e+03 Tracker eIoni - 31 710 558 -786 8.2 0.00017 3.35 1.85e+03 Tracker eIoni - 32 743 587 -697 8.18 0.0128 100 1.95e+03 Tracker StepLimiter - 33 751 595 -675 8.18 0.00559 24.6 1.98e+03 Tracker eIoni - 34 767 613 -630 8.13 0.00981 51 2.03e+03 Tracker eIoni - 35 769 615 -624 8.13 0.000435 6.76 2.03e+03 Tracker eIoni - 36 799 649 -535 8.12 0.0137 100 2.13e+03 Tracker StepLimiter - 37 811 662 -500 8.11 0.00504 38.7 2.17e+03 Tracker eIoni - 38 822 674 -467 8.1 0.00617 36.8 2.21e+03 Tracker eIoni - 39 851 705 -377 8.09 0.0165 100 2.31e+03 Tracker StepLimiter - 40 880 738 -287 8.08 0.0111 100 2.41e+03 Tracker StepLimiter - 41 907 771 -197 8.06 0.0134 100 2.51e+03 Tracker StepLimiter - 42 933 802 -105 8.05 0.0153 100 2.61e+03 Tracker StepLimiter - 43 935 804 -100 8.05 0.00127 5.69 2.61e+03 Chamber Transportation - 44 948 818 -64.4 8.02 0.0215 40.6 2.65e+03 Chamber eIoni - 45 949 819 -60.4 8.01 0.0019 4.32 2.66e+03 Chamber eIoni - 46 950 820 -58.8 7.99 0.000384 1.68 2.66e+03 Chamber eIoni - 47 958 826 -36 7.98 0.00958 25 2.69e+03 Chamber eIoni - 48 966 833 -2.7 7.94 0.0395 35 2.72e+03 Chamber eIoni - 49 976 839 23.4 7.92 0.0118 28.7 2.75e+03 Chamber eIoni - 50 978 841 29 7.91 0.00241 6.27 2.76e+03 Chamber eIoni - 51 980 842 33.6 7.91 0.00295 5.1 2.76e+03 Chamber eIoni - 52 996 860 76.3 7.88 0.0226 48.8 2.81e+03 Chamber eIoni - 53 999 863 86 7.87 0.00674 10.6 2.82e+03 Tracker Transportation - 54 1.02e+03 884 164 7.86 0.0105 84 2.9e+03 Tracker eIoni - 55 1.05e+03 910 255 7.85 0.0169 100 3e+03 Tracker StepLimiter - 56 1.08e+03 937 347 7.83 0.017 100 3.1e+03 Tracker StepLimiter - 57 1.08e+03 940 358 7.81 0.00234 11.8 3.12e+03 Tracker eIoni - 58 1.09e+03 943 372 7.81 0.00128 14 3.13e+03 Tracker eIoni - 59 1.11e+03 967 465 7.79 0.0176 100 3.23e+03 Tracker StepLimiter - 60 1.13e+03 981 524 7.78 0.00668 63.5 3.29e+03 Tracker eIoni - 61 1.14e+03 986 545 7.77 0.00375 22.7 3.32e+03 Tracker eIoni - 62 1.17e+03 1e+03 625 7.76 0.0146 87.2 3.4e+03 Tracker eIoni - 63 1.2e+03 1.02e+03 700 7.75 0.0125 81.4 3.48e+03 Chamber Transportation - 64 1.22e+03 1.03e+03 751 7.72 0.0217 57.4 3.54e+03 Chamber eIoni - 65 1.25e+03 1.04e+03 801 7.67 0.0334 57.4 3.6e+03 Chamber eBrem - 66 1.25e+03 1.04e+03 817 7.66 0.00576 17.1 3.62e+03 Chamber eIoni - 67 1.27e+03 1.05e+03 848 7.61 0.0233 35.3 3.65e+03 Chamber eIoni - 68 1.28e+03 1.06e+03 873 7.59 0.0137 29.3 3.68e+03 Chamber eIoni - 69 1.29e+03 1.06e+03 892 7.58 0.00767 23.2 3.7e+03 Chamber eIoni - 70 1.3e+03 1.06e+03 900 7.58 0.0059 9.82 3.71e+03 Tracker Transportation - 71 1.32e+03 1.07e+03 924 7.57 0.00444 29.8 3.74e+03 Tracker eIoni - 72 1.36e+03 1.08e+03 989 7.56 0.0123 82.5 3.83e+03 Tracker eIoni - 73 1.39e+03 1.09e+03 1.02e+03 7.55 0.0061 39.8 3.87e+03 Tracker eIoni - 74 1.44e+03 1.1e+03 1.1e+03 7.54 0.0137 100 3.97e+03 Tracker StepLimiter - 75 1.5e+03 1.12e+03 1.18e+03 7.52 0.0177 100 4.07e+03 Tracker StepLimiter - 76 1.56e+03 1.13e+03 1.26e+03 7.5 0.0123 99.7 4.17e+03 Tracker eIoni - 77 1.61e+03 1.15e+03 1.34e+03 7.49 0.0116 100 4.27e+03 Tracker StepLimiter - 78 1.62e+03 1.15e+03 1.36e+03 7.49 0.00117 16.7 4.28e+03 Tracker eIoni - 79 1.65e+03 1.15e+03 1.4e+03 7.47 0.00917 49.2 4.33e+03 Tracker eIoni - 80 1.66e+03 1.15e+03 1.4e+03 7.47 0.000401 4.35 4.34e+03 Tracker eIoni - 81 1.71e+03 1.17e+03 1.48e+03 7.42 0.0134 94 4.43e+03 Tracker eIoni - 82 1.72e+03 1.17e+03 1.5e+03 7.42 0.00259 27.1 4.46e+03 Chamber Transportation - 83 1.73e+03 1.17e+03 1.51e+03 7.41 0.00429 7.17 4.46e+03 Chamber eIoni - 84 1.76e+03 1.17e+03 1.58e+03 7.38 0.0293 82.8 4.55e+03 Chamber eIoni - 85 1.78e+03 1.17e+03 1.6e+03 7.35 0.0119 22.5 4.57e+03 Chamber eIoni - 86 1.81e+03 1.18e+03 1.64e+03 7.32 0.0263 51.4 4.62e+03 Chamber eIoni - 87 1.89e+03 1.2e+03 1.7e+03 7.27 0.056 109 4.73e+03 Tracker Transportation - 88 1.9e+03 1.21e+03 1.71e+03 7.26 0.0029 11.9 4.74e+03 Tracker eIoni - 89 1.93e+03 1.22e+03 1.72e+03 7.26 0.00375 35.1 4.78e+03 Tracker eBrem - 90 2.01e+03 1.26e+03 1.77e+03 7.24 0.0145 100 4.88e+03 Tracker StepLimiter - 91 2.04e+03 1.27e+03 1.78e+03 7.24 0.0079 31.4 4.91e+03 World Transportation - 92 2.35e+03 1.38e+03 1.97e+03 7.17 0.0561 377 5.29e+03 World eIoni - 93 2.39e+03 1.4e+03 1.99e+03 7.16 0.00869 48.5 5.33e+03 World eIoni - 94 2.42e+03 1.41e+03 2.01e+03 7.15 0.00742 44.4 5.38e+03 World eIoni - 95 2.46e+03 1.43e+03 2.04e+03 7.14 0.00819 50 5.43e+03 World eIoni - 96 2.47e+03 1.44e+03 2.04e+03 7.14 0.00238 11.8 5.44e+03 World eIoni - 97 2.59e+03 1.49e+03 2.12e+03 7.11 0.0248 150 5.59e+03 World eIoni - 98 2.6e+03 1.49e+03 2.12e+03 7.11 0.00228 12.1 5.6e+03 World eIoni - 99 2.6e+03 1.5e+03 2.12e+03 7.1 0.00133 6.53 5.61e+03 World eIoni - 100 2.61e+03 1.5e+03 2.13e+03 7.09 0.00225 10.2 5.62e+03 World eIoni - 101 2.64e+03 1.52e+03 2.15e+03 7.08 0.00601 39.7 5.66e+03 World eIoni - 102 2.94e+03 1.66e+03 2.34e+03 7.02 0.0613 384 6.04e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 338, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.64e+03 1.52e+03 2.15e+03 0.00256 0 0 0 World initStep - 1 2.64e+03 1.52e+03 2.15e+03 0 0.00256 0.241 0.241 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 337, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.61e+03 1.5e+03 2.13e+03 0.00644 0 0 0 World initStep - 1 2.61e+03 1.5e+03 2.13e+03 0.000204 0.00624 1.18 1.18 World eIoni - 2 2.61e+03 1.5e+03 2.13e+03 0 0.000204 0.00924 1.19 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 336, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.6e+03 1.5e+03 2.12e+03 0.00165 0 0 0 World initStep - 1 2.6e+03 1.5e+03 2.12e+03 0 0.00165 0.119 0.119 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 335, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.6e+03 1.49e+03 2.12e+03 0.00181 0 0 0 World initStep - 1 2.6e+03 1.49e+03 2.12e+03 0 0.00181 0.138 0.138 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 334, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.59e+03 1.49e+03 2.12e+03 0.00156 0 0 0 World initStep - 1 2.59e+03 1.49e+03 2.11e+03 0 0.00156 0.11 0.11 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 333, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.47e+03 1.44e+03 2.04e+03 0.00157 0 0 0 World initStep - 1 2.47e+03 1.44e+03 2.04e+03 0 0.00157 0.111 0.111 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 332, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.46e+03 1.43e+03 2.04e+03 0.004 0 0 0 World initStep - 1 2.46e+03 1.43e+03 2.04e+03 0 0.004 0.518 0.518 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 331, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.42e+03 1.41e+03 2.01e+03 0.00108 0 0 0 World initStep - 1 2.42e+03 1.41e+03 2.01e+03 0 0.00108 0.0636 0.0636 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 330, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.39e+03 1.4e+03 1.99e+03 0.00244 0 0 0 World initStep - 1 2.39e+03 1.4e+03 1.99e+03 0 0.00244 0.223 0.223 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 329, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.35e+03 1.38e+03 1.97e+03 0.00855 0 0 0 World initStep - 1 2.35e+03 1.39e+03 1.97e+03 0.00331 0.00523 1.6 1.6 World eIoni - 2 2.35e+03 1.39e+03 1.97e+03 0 0.00331 0.373 1.98 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 327, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.81e+03 1.18e+03 1.64e+03 0.00138 0 0 0 Chamber initStep - 1 1.81e+03 1.18e+03 1.64e+03 0 0.00138 0.0629 0.0629 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 326, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.78e+03 1.17e+03 1.6e+03 0.0188 0 0 0 Chamber initStep - 1 1.78e+03 1.17e+03 1.6e+03 0.0118 0.00704 2.11 2.11 Chamber eIoni - 2 1.78e+03 1.17e+03 1.6e+03 0.00813 0.00169 0.589 2.7 Chamber eIoni - 3 1.78e+03 1.17e+03 1.6e+03 0 0.00813 0.865 3.56 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 339, Parent ID = 326 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.78e+03 1.17e+03 1.6e+03 0.00195 0 0 0 Chamber initStep - 1 1.78e+03 1.17e+03 1.6e+03 0 0.00195 0.1 0.1 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 325, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.76e+03 1.17e+03 1.58e+03 0.00463 0 0 0 Chamber initStep - 1 1.76e+03 1.17e+03 1.58e+03 0 0.00463 0.349 0.349 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 324, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.73e+03 1.17e+03 1.51e+03 0.00189 0 0 0 Chamber initStep - 1 1.73e+03 1.17e+03 1.51e+03 0 0.00189 0.0962 0.0962 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 323, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.71e+03 1.17e+03 1.48e+03 0.0365 0 0 0 Tracker initStep - 1 1.71e+03 1.17e+03 1.48e+03 0.0293 0.00717 7.28 7.28 Tracker eIoni - 2 1.71e+03 1.18e+03 1.47e+03 0.0257 0.00361 5.38 12.7 Tracker eIoni - 3 1.71e+03 1.18e+03 1.47e+03 0.0214 0.00267 2.64 15.3 Tracker eIoni - 4 1.72e+03 1.18e+03 1.47e+03 0.0155 0.00591 3.67 19 Tracker eIoni - 5 1.72e+03 1.18e+03 1.47e+03 0.0127 0.00281 2.65 21.6 Tracker eIoni - 6 1.72e+03 1.18e+03 1.47e+03 0.00775 0.00491 2.23 23.8 Tracker eIoni - 7 1.72e+03 1.17e+03 1.47e+03 0.0016 0.00615 1.46 25.3 Tracker eIoni - 8 1.72e+03 1.17e+03 1.47e+03 0 0.0016 0.114 25.4 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 340, Parent ID = 323 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.71e+03 1.18e+03 1.47e+03 0.00165 0 0 0 Tracker initStep - 1 1.71e+03 1.18e+03 1.47e+03 0 0.00165 0.12 0.12 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 322, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.66e+03 1.15e+03 1.4e+03 0.00106 0 0 0 Tracker initStep - 1 1.66e+03 1.15e+03 1.4e+03 0 0.00106 0.0623 0.0623 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 321, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.65e+03 1.15e+03 1.4e+03 0.00246 0 0 0 Tracker initStep - 1 1.65e+03 1.15e+03 1.4e+03 0 0.00246 0.227 0.227 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 320, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.62e+03 1.15e+03 1.36e+03 0.00261 0 0 0 Tracker initStep - 1 1.62e+03 1.15e+03 1.36e+03 0 0.00261 0.248 0.248 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 319, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.56e+03 1.13e+03 1.26e+03 0.00461 0 0 0 Tracker initStep - 1 1.56e+03 1.13e+03 1.26e+03 0 0.00461 0.664 0.664 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 318, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.39e+03 1.09e+03 1.02e+03 0.00137 0 0 0 Tracker initStep - 1 1.39e+03 1.09e+03 1.02e+03 0 0.00137 0.09 0.09 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 317, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.36e+03 1.08e+03 989 0.00254 0 0 0 Tracker initStep - 1 1.36e+03 1.08e+03 989 0 0.00254 0.238 0.238 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 316, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.32e+03 1.07e+03 924 0.0015 0 0 0 Tracker initStep - 1 1.32e+03 1.07e+03 924 0 0.0015 0.104 0.104 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 315, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.29e+03 1.06e+03 892 0.00141 0 0 0 Chamber initStep - 1 1.29e+03 1.06e+03 892 0 0.00141 0.0645 0.0645 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 314, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.28e+03 1.06e+03 873 0.00275 0 0 0 Chamber initStep - 1 1.28e+03 1.06e+03 873 0 0.00275 0.162 0.162 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 313, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.27e+03 1.05e+03 848 0.0256 0 0 0 Chamber initStep - 1 1.27e+03 1.05e+03 847 0.019 0.00668 2.72 2.72 Chamber eIoni - 2 1.27e+03 1.05e+03 849 0.0132 0.00577 2.12 4.84 Chamber eIoni - 3 1.27e+03 1.05e+03 849 0.00834 0.00299 0.897 5.74 Chamber eIoni - 4 1.27e+03 1.05e+03 849 0 0.00834 0.687 6.43 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 341, Parent ID = 313 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.27e+03 1.05e+03 849 0.00187 0 0 0 Chamber initStep - 1 1.27e+03 1.05e+03 849 0 0.00187 0.0945 0.0945 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 312, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.25e+03 1.04e+03 817 0.0019 0 0 0 Chamber initStep - 1 1.25e+03 1.04e+03 817 0 0.0019 0.0966 0.0966 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 310, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.22e+03 1.03e+03 751 0.00386 0 0 0 Chamber initStep - 1 1.22e+03 1.03e+03 751 0 0.00386 0.263 0.263 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 309, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.17e+03 1e+03 625 0.00104 0 0 0 Tracker initStep - 1 1.17e+03 1e+03 625 0 0.00104 0.06 0.06 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 308, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.14e+03 986 545 0.00238 0 0 0 Tracker initStep - 1 1.14e+03 986 545 0 0.00238 0.214 0.214 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 307, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.13e+03 981 524 0.00601 0 0 0 Tracker initStep - 1 1.13e+03 982 524 5.03e-05 0.00596 1.06 1.06 Tracker eIoni - 2 1.13e+03 982 524 0 5.03e-05 0.0042 1.06 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 306, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.09e+03 943 372 0.00158 0 0 0 Tracker initStep - 1 1.09e+03 943 372 0 0.00158 0.113 0.113 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 305, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.08e+03 940 358 0.0137 0 0 0 Tracker initStep - 1 1.08e+03 938 359 0.00865 0.00509 2.39 2.39 Tracker eIoni - 2 1.08e+03 937 360 0.00438 0.00427 1.62 4.01 Tracker eIoni - 3 1.08e+03 937 360 0 0.00438 0.607 4.61 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 304, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.02e+03 884 164 0.00187 0 0 0 Tracker initStep - 1 1.02e+03 884 164 0 0.00187 0.145 0.145 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 303, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 996 860 76.3 0.00248 0 0 0 Chamber initStep - 1 996 860 76.3 0 0.00248 0.14 0.14 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 302, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 980 842 33.6 0.00455 0 0 0 Chamber initStep - 1 980 842 33.6 0 0.00455 0.34 0.34 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 301, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 978 841 29 0.00139 0 0 0 Chamber initStep - 1 978 841 29 0 0.00139 0.0636 0.0636 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 300, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 976 839 23.4 0.00591 0 0 0 Chamber initStep - 1 976 839 23.4 0 0.00591 0.514 0.514 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 299, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 966 833 -2.7 0.00207 0 0 0 Chamber initStep - 1 966 833 -2.7 0 0.00207 0.109 0.109 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 298, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 958 826 -36 0.00343 0 0 0 Chamber initStep - 1 958 826 -36 0 0.00343 0.221 0.221 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 297, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 820 -58.8 0.0238 0 0 0 Chamber initStep - 1 950 821 -60.4 0.0192 0.00289 1.78 1.78 Chamber eIoni - 2 950 820 -60.7 0.0142 0.00253 0.552 2.33 Chamber eIoni - 3 950 820 -60.7 0.012 5.41e-06 0.00146 2.33 Chamber eIoni - 4 950 820 -61 0.00567 0.00436 0.641 2.97 Chamber eIoni - 5 950 820 -61 0 0.00567 0.481 3.45 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 345, Parent ID = 297 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 820 -61 0.00196 0 0 0 Chamber initStep - 1 950 820 -61 0 0.00196 0.101 0.101 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 344, Parent ID = 297 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 820 -60.7 0.0022 0 0 0 Chamber initStep - 1 950 820 -60.7 0 0.0022 0.118 0.118 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 343, Parent ID = 297 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 820 -60.7 0.00247 0 0 0 Chamber initStep - 1 950 820 -60.7 0 0.00247 0.139 0.139 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 342, Parent ID = 297 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 950 821 -60.4 0.0017 0 0 0 Chamber initStep - 1 950 821 -60.4 0 0.0017 0.0833 0.0833 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 296, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 949 819 -60.4 0.0014 0 0 0 Chamber initStep - 1 949 819 -60.4 0 0.0014 0.0638 0.0638 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 295, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 948 818 -64.4 0.00752 0 0 0 Chamber initStep - 1 948 818 -64.3 0 0.00752 0.76 0.76 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 294, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 822 674 -467 0.00199 0 0 0 Tracker initStep - 1 822 674 -467 0 0.00199 0.161 0.161 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 293, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 811 662 -500 0.000999 0 0 0 Tracker initStep - 1 811 662 -500 0 0.000999 0.057 0.057 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 292, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 769 615 -624 0.00185 0 0 0 Tracker initStep - 1 769 615 -624 0 0.00185 0.143 0.143 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 291, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 767 613 -630 0.0329 0 0 0 Tracker initStep - 1 770 618 -630 0.0279 0.005 6.3 6.3 Tracker eIoni - 2 771 620 -628 0.0252 0.00107 2.18 8.48 Tracker eIoni - 3 772 623 -627 0.0216 0.00351 4.44 12.9 Tracker eIoni - 4 774 625 -625 0.0184 0.00321 3.72 16.6 Tracker eIoni - 5 774 625 -625 0.0163 0.000145 0.305 16.9 Tracker eIoni - 6 776 626 -624 0.0096 0.00673 2.79 19.7 Tracker eIoni - 7 777 627 -623 0.00272 0.00689 1.77 21.5 Tracker eIoni - 8 777 627 -623 0 0.00272 0.266 21.8 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 347, Parent ID = 291 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 774 625 -625 0.00195 0 0 0 Tracker initStep - 1 775 625 -625 0 0.00195 0.155 0.155 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 346, Parent ID = 291 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 771 620 -628 0.00167 0 0 0 Tracker initStep - 1 771 620 -628 0 0.00167 0.122 0.122 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 290, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 751 595 -675 0.0016 0 0 0 Tracker initStep - 1 751 595 -675 0 0.0016 0.115 0.115 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 289, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 710 558 -786 0.00247 0 0 0 Tracker initStep - 1 710 558 -786 0 0.00247 0.227 0.227 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 288, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 709 557 -789 0.00152 0 0 0 Tracker initStep - 1 709 557 -789 0 0.00152 0.106 0.106 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 287, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 672 523 -879 0.00384 0 0 0 Tracker initStep - 1 671 523 -879 0 0.00384 0.483 0.483 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 286, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 556 417 -1.18e+03 0.0018 0 0 0 Tracker initStep - 1 556 417 -1.18e+03 0 0.0018 0.137 0.137 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 285, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 484 353 -1.34e+03 0.00229 0 0 0 Tracker initStep - 1 484 353 -1.34e+03 0 0.00229 0.201 0.201 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 284, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 481 351 -1.35e+03 0.00139 0 0 0 Tracker initStep - 1 481 351 -1.35e+03 0 0.00139 0.0922 0.0922 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 283, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 448 324 -1.43e+03 0.00174 0 0 0 Tracker initStep - 1 448 324 -1.43e+03 0 0.00174 0.13 0.13 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 282, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 417 300 -1.51e+03 0.00258 0 0 0 Tracker initStep - 1 417 300 -1.51e+03 0 0.00258 0.245 0.245 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 281, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 376 269 -1.6e+03 0.0057 0 0 0 Tracker initStep - 1 376 269 -1.6e+03 0 0.0057 0.961 0.961 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 280, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 251 169 -1.88e+03 0.00356 0 0 0 Tracker initStep - 1 251 169 -1.88e+03 0 0.00356 0.422 0.422 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 279, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 186 122 -2.02e+03 0.0096 0 0 0 Tracker initStep - 1 186 122 -2.01e+03 0.0056 0.00401 1.77 1.77 Tracker eIoni - 2 186 122 -2.01e+03 0 0.0056 0.936 2.71 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 278, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 162 108 -2.06e+03 0.00175 0 0 0 Tracker initStep - 1 162 108 -2.06e+03 0 0.00175 0.131 0.131 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 277, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 162 108 -2.06e+03 0.00112 0 0 0 Tracker initStep - 1 162 108 -2.06e+03 0 0.00112 0.0674 0.0674 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 276, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 84.8 55.2 -2.22e+03 0.00131 0 0 0 Tracker initStep - 1 84.8 55.3 -2.22e+03 0 0.00131 0.0842 0.0842 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 275, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 75.1 49 -2.24e+03 0.00249 0 0 0 Tracker initStep - 1 75.2 48.9 -2.24e+03 0 0.00249 0.23 0.23 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 274, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 61.6 40.4 -2.27e+03 0.00171 0 0 0 Tracker initStep - 1 61.6 40.4 -2.27e+03 0 0.00171 0.127 0.127 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 328, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.93e+03 1.22e+03 1.72e+03 0.00106 0 0 0 Tracker initStep - 1 1.93e+03 1.22e+03 1.72e+03 0 0.00106 1.73 1.73 Tracker phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 311, Parent ID = 272 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.25e+03 1.04e+03 801 0.0201 0 0 0 Chamber initStep - 1 1.26e+03 1.06e+03 843 0 0.00546 47.8 47.8 Chamber phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 348, Parent ID = 311 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.26e+03 1.06e+03 843 0.0147 0 0 0 Chamber initStep - 1 1.26e+03 1.06e+03 843 0.0105 0.00117 0.26 0.26 Chamber eIoni - 2 1.26e+03 1.06e+03 843 0 0.0105 1.26 1.52 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 349, Parent ID = 348 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.26e+03 1.06e+03 843 0.00302 0 0 0 Chamber initStep - 1 1.26e+03 1.06e+03 843 0 0.00302 0.184 0.184 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 199, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0672 0.131 -2.41e+03 11 0 0 0 Target initStep - 1 0.321 0.714 -2.4e+03 1.51 0 5.8 5.8 Target compt - 2 -2.97 2.34 -2.4e+03 1.51 0 5.32 11.1 Tracker Transportation - 3 -2.15e+03 1.06e+03 122 1.51 0 3.48e+03 3.49e+03 World Transportation - 4 -2.94e+03 1.45e+03 1.05e+03 1.51 0 1.28e+03 4.77e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 350, Parent ID = 199 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.321 0.714 -2.4e+03 9.45 0 0 0 Target initStep - 1 0.338 0.758 -2.4e+03 9.16 0.137 0.153 0.153 Target eBrem - 2 0.183 0.284 -2.4e+03 8.08 1.08 1.1 1.26 Target msc - 3 0.241 0.0652 -2.4e+03 7.33 0.298 0.255 1.51 Target eBrem - 4 0.377 -0.522 -2.4e+03 6.45 0.884 0.752 2.26 Target msc - 5 0.162 -0.828 -2.4e+03 6.01 0.437 0.518 2.78 Target msc - 6 -0.211 -0.767 -2.4e+03 5.05 0.571 0.455 3.24 Target eBrem - 7 -0.362 -0.714 -2.4e+03 4.26 0.205 0.194 3.43 Target eBrem - 8 -0.395 -0.699 -2.4e+03 3.96 0.0497 0.0573 3.49 Target eBrem - 9 0.0254 -1.68 -2.41e+03 0.246 3.71 2 5.49 Target eIoni - 10 0.0196 -1.68 -2.41e+03 0 0.246 0.111 5.6 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 355, Parent ID = 350 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.395 -0.699 -2.4e+03 0.248 0 0 0 Target initStep - 1 -0.567 -0.616 -2.4e+03 0 0.248 0.246 0.246 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 354, Parent ID = 350 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.362 -0.714 -2.4e+03 0.589 0 0 0 Target initStep - 1 -12.6 -0.0775 -2.41e+03 0 0.589 16.1 16.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 353, Parent ID = 350 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.211 -0.767 -2.4e+03 0.391 0 0 0 Target initStep - 1 -1.6 0.628 -2.4e+03 0 0.391 2.47 2.47 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 352, Parent ID = 350 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.241 0.0652 -2.4e+03 0.447 0 0 0 Target initStep - 1 0.823 -1.71 -2.4e+03 0.201 0.247 1.87 1.87 Target compt - 2 -0.19 -1.59 -2.4e+03 0 0.201 1.06 2.93 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 351, Parent ID = 350 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.338 0.758 -2.4e+03 0.155 0 0 0 Target initStep - 1 0.48 0.787 -2.4e+03 0 0.155 0.737 0.737 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 198, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0866 0.0938 -2.41e+03 2.62 0 0 0 Target initStep - 1 0.308 1.05 -2.4e+03 2.62 0 10 10 Tracker Transportation - 2 28 68.2 -1.7e+03 2.62 0 704 714 Chamber Transportation - 3 35.9 87.4 -1.5e+03 2.62 0 201 915 Tracker Transportation - 4 59.6 145 -900 2.62 0 603 1.52e+03 Chamber Transportation - 5 67.5 164 -700 2.62 0 201 1.72e+03 Tracker Transportation - 6 91.2 222 -100 2.62 0 603 2.32e+03 Chamber Transportation - 7 99.1 241 100 2.62 0 201 2.52e+03 Tracker Transportation - 8 123 299 700 2.62 0 603 3.13e+03 Chamber Transportation - 9 131 318 900 2.62 0 201 3.33e+03 Tracker Transportation - 10 154 375 1.5e+03 2.62 0 603 3.93e+03 Chamber Transportation - 11 162 395 1.7e+03 2.62 0 201 4.13e+03 Tracker Transportation - 12 190 462 2.4e+03 2.62 0 704 4.84e+03 World Transportation - 13 211 514 2.94e+03 2.62 0 543 5.38e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 197, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0454 0.0717 -2.41e+03 0.344 0 0 0 Target initStep - 1 -0.0997 0.238 -2.41e+03 0 0.344 1.87 1.87 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 195, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.039 -0.0728 -2.41e+03 0.18 0 0 0 Target initStep - 1 0.00368 -0.0437 -2.41e+03 0 0.18 0.48 0.48 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 194, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0453 -0.0779 -2.41e+03 6.81 0 0 0 Target initStep - 1 -0.686 0.622 -2.4e+03 6.81 0 12.7 12.7 Tracker Transportation - 2 -41.1 39.3 -1.7e+03 6.81 0 702 715 Chamber Transportation - 3 -52.7 50.3 -1.5e+03 6.81 0 201 916 Tracker Transportation - 4 -87.4 83.5 -900 6.81 0 602 1.52e+03 Chamber Transportation - 5 -98.9 94.5 -700 6.81 0 201 1.72e+03 Tracker Transportation - 6 -134 128 -100 6.81 0 602 2.32e+03 Chamber Transportation - 7 -145 139 100 6.81 0 201 2.52e+03 Tracker Transportation - 8 -180 172 700 6.81 0 602 3.12e+03 Chamber Transportation - 9 -191 183 900 6.81 0 201 3.32e+03 Tracker Transportation - 10 -226 216 1.5e+03 6.81 0 602 3.93e+03 Chamber Transportation - 11 -238 227 1.7e+03 6.81 0 201 4.13e+03 Tracker Transportation - 12 -278 266 2.4e+03 6.81 0 702 4.83e+03 World Transportation - 13 -309 296 2.94e+03 6.81 0 542 5.37e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 193, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0861 -0.106 -2.41e+03 3.01 0 0 0 Target initStep - 1 -0.387 0.18 -2.4e+03 3.01 0 13.7 13.7 Tracker Transportation - 2 -24.6 14.8 -1.7e+03 3.01 0 701 714 Chamber Transportation - 3 -31.5 19 -1.5e+03 3.01 0 200 914 Tracker Transportation - 4 -52.2 31.5 -900 3.01 0 600 1.51e+03 Chamber Transportation - 5 -59.1 35.7 -700 3.01 0 200 1.72e+03 Tracker Transportation - 6 -79.9 48.2 -100 3.01 0 600 2.32e+03 Chamber Transportation - 7 -86.8 52.4 100 3.01 0 200 2.52e+03 Tracker Transportation - 8 -108 64.9 700 3.01 0 600 3.12e+03 Chamber Transportation - 9 -114 69.1 900 3.01 0 200 3.32e+03 Tracker Transportation - 10 -135 81.6 1.5e+03 3.01 0 600 3.92e+03 Chamber Transportation - 11 -142 85.8 1.7e+03 3.01 0 200 4.12e+03 Tracker Transportation - 12 -166 100 2.4e+03 3.01 0 701 4.82e+03 World Transportation - 13 -185 112 2.94e+03 3.01 0 540 5.36e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 192, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0905 -0.104 -2.41e+03 1.69 0 0 0 Target initStep - 1 -0.337 -0.0759 -2.4e+03 0.532 0 11.3 11.3 Target compt - 2 3.57 -1.63 -2.4e+03 0 0.532 4.54 15.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 356, Parent ID = 192 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.337 -0.0759 -2.4e+03 1.16 0 0 0 Target initStep - 1 -0.36 -0.0676 -2.4e+03 0 1.16 0.868 0.868 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 191, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0923 -0.105 -2.41e+03 7.18 0 0 0 Target initStep - 1 -0.657 0.00686 -2.4e+03 7.18 0 13.9 13.9 Tracker Transportation - 2 -38.6 5.65 -1.7e+03 7.18 0 701 715 Chamber Transportation - 3 -49.4 7.26 -1.5e+03 7.18 0 200 915 Tracker Transportation - 4 -81.9 12.1 -900 7.18 0 601 1.52e+03 Chamber Transportation - 5 -92.8 13.7 -700 7.18 0 200 1.72e+03 Tracker Transportation - 6 -125 18.5 -100 7.18 0 601 2.32e+03 Chamber Transportation - 7 -136 20.2 100 7.18 0 200 2.52e+03 Tracker Transportation - 8 -169 25 700 7.18 0 601 3.12e+03 Chamber Transportation - 9 -179 26.6 900 7.18 0 200 3.32e+03 Tracker Transportation - 10 -212 31.4 1.5e+03 7.18 0 601 3.92e+03 Chamber Transportation - 11 -223 33.1 1.7e+03 7.18 0 200 4.12e+03 Tracker Transportation - 12 -261 38.7 2.4e+03 7.18 0 701 4.82e+03 World Transportation - 13 -290 43 2.94e+03 7.18 0 541 5.36e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 190, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0968 -0.101 -2.41e+03 0.452 0 0 0 Target initStep - 1 0.104 0.04 -2.41e+03 0 0.452 6.5 6.5 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 189, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0615 -0.0333 -2.42e+03 0.232 0 0 0 Target initStep - 1 0.106 -0.0498 -2.41e+03 0 0.232 1.7 1.7 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 188, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0604 -0.0309 -2.42e+03 2.27 0 0 0 Target initStep - 1 0.332 -0.372 -2.4e+03 0.444 0 15.5 15.5 Target compt - 2 1.97 -6.06 -2.4e+03 0 0.444 5.92 21.5 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 357, Parent ID = 188 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.332 -0.372 -2.4e+03 1.82 0 0 0 Target initStep - 1 0.383 -0.337 -2.4e+03 1.67 0.149 0.149 0.149 Target msc - 2 0.364 -0.247 -2.4e+03 0.876 0.799 0.103 0.252 Target msc - 3 0.378 -0.183 -2.4e+03 0.777 0.0992 0.0817 0.334 Target msc - 4 0.406 -0.133 -2.4e+03 0.656 0.121 0.1 0.435 Target msc - 5 0.391 -0.113 -2.4e+03 0.568 0.0878 0.0894 0.524 Target msc - 6 0.371 -0.0723 -2.4e+03 0.479 0.0885 0.0846 0.609 Target msc - 7 0.374 -0.0358 -2.4e+03 0.403 0.0765 0.068 0.677 Target msc - 8 0.385 -0.0275 -2.4e+03 0 0.403 0.227 0.903 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 187, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0529 -0.0282 -2.42e+03 245 0 0 0 Target initStep - 1 0.228 -0.143 -2.41e+03 0 0 6.21 6.21 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 186, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.028 -0.014 -2.42e+03 40.8 0 0 0 Target initStep - 1 0.135 -0.0872 -2.41e+03 0 0 3.54 3.54 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 185, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0254 -0.0125 -2.42e+03 52.8 0 0 0 Target initStep - 1 0.357 -0.219 -2.41e+03 0 0 10.6 10.6 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 184, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00741 -0.0035 -2.42e+03 0.201 0 0 0 Target initStep - 1 0.0283 -0.0168 -2.42e+03 0 0.201 0.932 0.932 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 183, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00587 0.000588 -2.42e+03 0.706 0 0 0 Target initStep - 1 0.0132 -0.0522 -2.42e+03 0.57 0.136 2.54 2.54 Target compt - 2 -0.72 1.7 -2.41e+03 0 0.57 3.48 6.02 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 182, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00852 0.0161 -2.42e+03 0.161 0 0 0 Target initStep - 1 0.0101 0.0131 -2.42e+03 0 0.161 0.589 0.589 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 180, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00701 0.018 -2.42e+03 0.655 0 0 0 Target initStep - 1 0.142 -0.0844 -2.4e+03 0.218 0.436 15.7 15.7 Target compt - 2 -0.772 -0.58 -2.41e+03 0.128 0.0903 1.25 16.9 Target compt - 3 -0.772 -0.491 -2.41e+03 0 0.128 0.111 17 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 179, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00322 0.0186 -2.42e+03 19.7 0 0 0 Target initStep - 1 0.0665 0.00166 -2.42e+03 8.6 0 5.41 5.41 Target compt - 2 -3.23 1.91 -2.4e+03 8.6 0 15.5 21 Tracker Transportation - 3 -156 90.8 -1.7e+03 8.6 0 722 743 Chamber Transportation - 4 -200 116 -1.5e+03 8.6 0 206 949 Tracker Transportation - 5 -332 192 -900 8.6 0 619 1.57e+03 Chamber Transportation - 6 -375 218 -700 8.6 0 206 1.77e+03 Tracker Transportation - 7 -507 294 -100 8.6 0 619 2.39e+03 Chamber Transportation - 8 -550 319 100 8.6 0 206 2.6e+03 Tracker Transportation - 9 -682 395 700 8.6 0 619 3.22e+03 Chamber Transportation - 10 -726 421 900 8.6 0 206 3.42e+03 Tracker Transportation - 11 -857 497 1.5e+03 8.6 0 619 4.04e+03 Chamber Transportation - 12 -901 522 1.7e+03 8.6 0 206 4.25e+03 Tracker Transportation - 13 -1.05e+03 611 2.4e+03 8.6 0 722 4.97e+03 World Transportation - 14 -1.17e+03 680 2.94e+03 8.6 0 557 5.53e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 178, Parent ID = 8 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.00251 0.019 -2.42e+03 36.7 0 0 0 Target initStep - 1 0.0627 -0.0835 -2.41e+03 0.281 0 9.46 9.46 Target compt - 2 0.444 0.918 -2.41e+03 0 0.281 1.78 11.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 177, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.13 0.73 -2.41e+03 0.511 0 0 0 Target initStep - 1 -3.41 1.27 -2.41e+03 0.445 0.0657 4.74 4.74 Target compt - 2 -6.87 1.28 -2.41e+03 0.42 0.0252 3.59 8.33 Target compt - 3 -9.33 2.29 -2.41e+03 0.385 0.0353 2.78 11.1 Target compt - 4 -9.43 2.29 -2.41e+03 0.173 0.212 0.114 11.2 Target compt - 5 -8.91 1.7 -2.41e+03 0 0.173 0.803 12 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 176, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.13 0.73 -2.41e+03 0.511 0 0 0 Target initStep - 1 5.93 0.155 -2.41e+03 0 0.511 5.01 5.01 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 175, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.718 -0.427 -2.41e+03 0.444 0 0 0 Target initStep - 1 0.651 -0.369 -2.41e+03 0.207 0.237 0.0898 0.0898 Target compt - 2 -0.0246 -1.85 -2.41e+03 0 0.207 1.78 1.86 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 174, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.782 -0.597 -2.41e+03 0.144 0 0 0 Target initStep - 1 0.412 -0.143 -2.41e+03 0 0.144 0.917 0.917 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 173, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.742 -0.668 -2.41e+03 0.168 0 0 0 Target initStep - 1 1.04 -0.577 -2.41e+03 0 0.168 0.664 0.664 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 172, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.53 0.253 -2.41e+03 0.145 0 0 0 Target initStep - 1 1.48 -0.0906 -2.41e+03 0 0.145 0.349 0.349 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 171, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.16 -0.688 -2.41e+03 3.96 0 0 0 Target initStep - 1 3.09 4.56 -2.4e+03 3.96 0 12 12 Tracker Transportation - 2 108 291 -1.82e+03 3.59 0 654 666 Tracker compt - 3 637 2.31e+03 988 3.59 0 3.5e+03 4.17e+03 World Transportation - 4 801 2.94e+03 1.86e+03 3.59 0 1.08e+03 5.25e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 170, Parent ID = 156 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.07 -0.838 -2.41e+03 0.127 0 0 0 Target initStep - 1 1.34 -0.809 -2.41e+03 0 0.127 0.691 0.691 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 169, Parent ID = 167 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.148 -0.847 -2.42e+03 0.511 0 0 0 Target initStep - 1 2.21 -8 -2.41e+03 0.258 0.253 7.6 7.6 Target compt - 2 2.63 -7.81 -2.41e+03 0 0.258 0.646 8.25 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 168, Parent ID = 167 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.148 -0.847 -2.42e+03 0.511 0 0 0 Target initStep - 1 -0.336 -0.28 -2.42e+03 0.273 0.238 0.604 0.604 Target compt - 2 -0.363 -0.297 -2.42e+03 0 0.273 0.913 1.52 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 363, Parent ID = 185 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.357 -0.219 -2.41e+03 42.2 0 0 0 Target initStep - 1 0.358 -0.22 -2.41e+03 42 0.0182 0.0164 0.0164 Target eBrem - 2 0.413 -0.253 -2.41e+03 23.8 0.493 0.411 0.428 Target eBrem - 3 0.478 -0.258 -2.41e+03 23.4 0.299 0.261 0.689 Target eBrem - 4 0.546 -0.315 -2.41e+03 18.1 0.525 0.415 1.1 Target eBrem - 5 0.669 -0.284 -2.41e+03 16.8 0.353 0.243 1.35 Target eBrem - 6 1.13 -0.112 -2.4e+03 14.1 1.18 0.706 2.05 Target eBrem - 7 1.14 -0.106 -2.4e+03 14 0.0142 0.0181 2.07 Target eBrem - 8 1.23 -0.0425 -2.4e+03 1.24 0.23 0.182 2.25 Target eBrem - 9 1.31 -0.00585 -2.4e+03 0 1.24 0.957 3.21 Target eIoni - 10 1.31 -0.00585 -2.4e+03 0 0 0 3.21 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 361, Parent ID = 186 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.135 -0.0872 -2.41e+03 24.9 0 0 0 Target initStep - 1 -0.848 -1.8 -2.41e+03 15.5 5.35 4.47 4.47 Target eBrem - 2 0.451 -3 -2.41e+03 11.3 2.99 2.68 7.15 Target eIoni - 3 0.622 -3.52 -2.41e+03 9.82 0.984 0.635 7.78 Target eBrem - 4 0.615 -3.56 -2.41e+03 5.26 0.0377 0.0431 7.83 Target eBrem - 5 0.606 -3.6 -2.41e+03 5.1 0.0537 0.0465 7.87 Target eBrem - 6 0.747 -4 -2.41e+03 3.27 0.366 0.471 8.34 Target eBrem - 7 1.15 -3.91 -2.41e+03 2.2 1.07 1.13 9.47 Target eBrem - 8 2.11 -3.83 -2.41e+03 0.445 1.76 1.52 11 Target eIoni - 9 2.12 -3.86 -2.41e+03 0 0.445 0.257 11.2 Target eIoni - 10 2.12 -3.86 -2.41e+03 0 0 0 11.2 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 359, Parent ID = 187 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.228 -0.143 -2.41e+03 60.5 0 0 0 Target initStep - 1 0.296 -0.143 -2.41e+03 46.1 1.03 0.716 0.716 Target eBrem - 2 0.288 -0.142 -2.41e+03 42.1 0.116 0.107 0.822 Target eBrem - 3 0.133 0.00054 -2.41e+03 41.1 1 0.746 1.57 Target eBrem - 4 0.015 0.042 -2.41e+03 37.3 0.792 0.584 2.15 Target eBrem - 5 -0.0656 -0.00118 -2.41e+03 36.6 0.442 0.411 2.56 Target eBrem - 6 -0.406 -0.26 -2.41e+03 33.7 2.12 1.68 4.25 Target eBrem - 7 -0.382 -0.355 -2.41e+03 31.4 0.721 0.307 4.55 Target eBrem - 8 -0.382 -0.356 -2.41e+03 31.1 0.0138 0.00689 4.56 Target eBrem - 9 -0.321 -0.428 -2.41e+03 30.8 0.246 0.322 4.88 Target eBrem - 10 -0.279 -0.62 -2.4e+03 29.7 0.668 0.662 5.54 Target eBrem - 11 -0.269 -0.739 -2.4e+03 28.8 0.552 0.473 6.02 Target eBrem - 12 -0.0923 -0.902 -2.4e+03 27.8 0.694 0.626 6.64 Target eBrem - 13 0.0748 -1.3 -2.4e+03 22.9 0.849 0.795 7.44 Target eBrem - 14 0.099 -1.4 -2.4e+03 22.4 0.285 0.202 7.64 Target eBrem - 15 0.138 -1.52 -2.4e+03 21.7 0.533 0.46 8.1 Target eBrem - 16 0.155 -1.6 -2.4e+03 18.8 0.129 0.141 8.24 Target eBrem - 17 0.207 -2.07 -2.4e+03 16.6 0.781 0.645 8.89 Target eBrem - 18 -0.0858 -2.77 -2.4e+03 14.9 1.51 1.18 10.1 Target eBrem - 19 -0.113 -2.97 -2.4e+03 14.5 0.289 0.223 10.3 Target eBrem - 20 -0.485 -3.78 -2.4e+03 12.7 1.36 1.08 11.4 Target eBrem - 21 -0.453 -4.52 -2.4e+03 10.6 0.854 0.766 12.1 Target eBrem - 22 -0.961 -5.38 -2.4e+03 8.74 1.76 1.11 13.2 Target eBrem - 23 -1.14 -5.59 -2.4e+03 1.65 0.31 0.291 13.5 Target eIoni - 24 -1.28 -5.45 -2.4e+03 1.05 0.606 0.499 14 Target eBrem - 25 -1.24 -5.37 -2.4e+03 0 1.05 0.78 14.8 Target eIoni - 26 -1.24 -5.37 -2.4e+03 0 0 0 14.8 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 273, Parent ID = 200 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.01 2.26 -2.4e+03 7.67 0 0 0 Target initStep - 1 1.1 2.34 -2.4e+03 7.38 0.286 0.271 0.271 Target msc - 2 1.11 2.46 -2.4e+03 7.07 0.311 0.346 0.617 Target msc - 3 0.992 2.54 -2.4e+03 6.71 0.36 0.302 0.918 Tracker Transportation - 4 -50.4 32.7 -2.32e+03 6.69 0.0166 100 101 Tracker StepLimiter - 5 -69.9 42.6 -2.29e+03 6.69 0.00492 34.9 136 Tracker eIoni - 6 -85.6 51.5 -2.27e+03 6.68 0.00353 29.2 165 Tracker eIoni - 7 -124 75.1 -2.21e+03 6.67 0.00884 75 240 Tracker eIoni - 8 -132 80.1 -2.2e+03 6.67 0.00378 15.2 255 Tracker eIoni - 9 -180 109 -2.12e+03 6.65 0.014 93 348 Tracker eIoni - 10 -233 140 -2.04e+03 6.63 0.0147 100 448 Tracker StepLimiter - 11 -256 152 -2.01e+03 6.62 0.00778 42.9 491 Tracker eIoni - 12 -311 180 -1.93e+03 6.61 0.0149 100 591 Tracker StepLimiter - 13 -345 198 -1.88e+03 6.6 0.00853 63.6 655 Tracker eIoni - 14 -370 212 -1.85e+03 6.59 0.00498 44.9 700 Tracker eIoni - 15 -424 246 -1.77e+03 6.58 0.0148 100 800 Tracker StepLimiter - 16 -441 258 -1.74e+03 6.57 0.00647 33 833 Tracker eIoni - 17 -474 281 -1.7e+03 6.56 0.00797 60.1 893 Tracker eIoni - 18 -531 316 -1.63e+03 6.55 0.0113 100 993 Tracker StepLimiter - 19 -562 334 -1.59e+03 6.54 0.00938 53.5 1.05e+03 Tracker eIoni - 20 -612 371 -1.51e+03 6.52 0.0145 100 1.15e+03 Tracker StepLimiter - 21 -650 398 -1.45e+03 6.51 0.0127 77.7 1.22e+03 Tracker eIoni - 22 -662 408 -1.42e+03 6.5 0.00426 26.7 1.25e+03 Tracker eIoni - 23 -710 446 -1.34e+03 6.48 0.0173 100 1.35e+03 Tracker StepLimiter - 24 -757 487 -1.27e+03 6.47 0.0147 100 1.45e+03 Tracker StepLimiter - 25 -768 496 -1.25e+03 6.46 0.00276 22.9 1.47e+03 Tracker eIoni - 26 -814 534 -1.17e+03 6.45 0.0154 100 1.57e+03 Tracker StepLimiter - 27 -833 550 -1.13e+03 6.44 0.00792 42.6 1.62e+03 Tracker eIoni - 28 -854 568 -1.09e+03 6.42 0.00652 48.6 1.66e+03 Tracker eIoni - 29 -855 568 -1.09e+03 6.42 0.000123 0.778 1.67e+03 Tracker eIoni - 30 -899 605 -1.01e+03 6.41 0.0162 100 1.77e+03 Tracker StepLimiter - 31 -945 640 -929 6.39 0.0188 100 1.87e+03 Tracker StepLimiter - 32 -988 674 -846 6.37 0.0138 100 1.97e+03 Tracker StepLimiter - 33 -999 683 -826 6.31 0.0034 24.2 1.99e+03 Tracker eIoni - 34 -1.01e+03 692 -803 6.3 0.00445 26.9 2.02e+03 Tracker eIoni - 35 -1.05e+03 724 -719 6.28 0.0184 100 2.12e+03 Tracker StepLimiter - 36 -1.06e+03 730 -705 6.28 0.00327 16.1 2.13e+03 Tracker eIoni - 37 -1.07e+03 737 -687 6.27 0.0047 21 2.15e+03 Tracker eIoni - 38 -1.09e+03 751 -649 6.26 0.0047 44.2 2.2e+03 Tracker eIoni - 39 -1.09e+03 756 -633 6.26 0.00259 19 2.22e+03 Tracker eIoni - 40 -1.1e+03 760 -621 6.26 0.0012 12.9 2.23e+03 Tracker eIoni - 41 -1.13e+03 789 -533 6.25 0.0108 100 2.33e+03 Tracker StepLimiter - 42 -1.17e+03 821 -449 6.23 0.0134 97 2.43e+03 Tracker eIoni - 43 -1.18e+03 832 -419 6.22 0.00319 34.7 2.46e+03 Tracker eIoni - 44 -1.21e+03 850 -367 6.2 0.00775 60.4 2.52e+03 Tracker eIoni - 45 -1.24e+03 879 -277 6.19 0.0133 100 2.62e+03 Tracker StepLimiter - 46 -1.24e+03 880 -273 6.18 0.00044 4.52 2.63e+03 Tracker eIoni - 47 -1.26e+03 895 -229 6.17 0.00848 49.7 2.68e+03 Tracker eIoni - 48 -1.29e+03 920 -151 6.16 0.0154 86.1 2.76e+03 Tracker eIoni - 49 -1.32e+03 942 -69.9 6.13 0.0124 89.7 2.85e+03 Tracker eIoni - 50 -1.34e+03 964 -8.79 6.04 0.0102 69.1 2.92e+03 Tracker eIoni - 51 -1.37e+03 1e+03 78.5 6.02 0.0132 100 3.02e+03 Tracker StepLimiter - 52 -1.38e+03 1.01e+03 97.7 6.02 0.00384 21.8 3.04e+03 Tracker eIoni - 53 -1.41e+03 1.04e+03 169 6 0.0119 80.2 3.12e+03 Tracker eIoni - 54 -1.41e+03 1.04e+03 181 6 0.00164 13.9 3.14e+03 Tracker eIoni - 55 -1.44e+03 1.07e+03 251 5.99 0.00888 82.9 3.22e+03 Tracker eIoni - 56 -1.48e+03 1.11e+03 336 5.97 0.0146 100 3.32e+03 Tracker StepLimiter - 57 -1.48e+03 1.11e+03 340 5.97 0.000697 5.47 3.33e+03 Tracker eIoni - 58 -1.53e+03 1.15e+03 421 5.96 0.0154 100 3.43e+03 Tracker StepLimiter - 59 -1.57e+03 1.19e+03 504 5.94 0.0188 100 3.53e+03 Tracker StepLimiter - 60 -1.6e+03 1.21e+03 557 5.92 0.0111 65.6 3.59e+03 Tracker eIoni - 61 -1.64e+03 1.26e+03 637 5.91 0.0146 100 3.69e+03 Tracker StepLimiter - 62 -1.64e+03 1.26e+03 638 5.91 0.00023 1.75 3.69e+03 Tracker eIoni - 63 -1.68e+03 1.3e+03 720 5.9 0.0125 100 3.79e+03 Tracker StepLimiter - 64 -1.71e+03 1.34e+03 804 5.88 0.0143 100 3.89e+03 Tracker StepLimiter - 65 -1.75e+03 1.38e+03 885 5.87 0.015 100 3.99e+03 Tracker StepLimiter - 66 -1.77e+03 1.4e+03 921 5.86 0.00659 43.7 4.04e+03 Tracker eIoni - 67 -1.8e+03 1.43e+03 981 5.85 0.0113 73.7 4.11e+03 Tracker eIoni - 68 -1.84e+03 1.47e+03 1.06e+03 5.83 0.0151 100 4.21e+03 Tracker StepLimiter - 69 -1.87e+03 1.51e+03 1.13e+03 5.82 0.0104 78.8 4.29e+03 World Transportation - 70 -1.91e+03 1.55e+03 1.21e+03 5.8 0.0148 100 4.39e+03 World eIoni - 71 -2.03e+03 1.68e+03 1.44e+03 5.76 0.0443 291 4.68e+03 World eIoni - 72 -2.04e+03 1.69e+03 1.46e+03 5.75 0.0028 27.6 4.71e+03 World eIoni - 73 -2.06e+03 1.7e+03 1.5e+03 5.74 0.00685 46.5 4.75e+03 World eIoni - 74 -2.08e+03 1.72e+03 1.53e+03 5.73 0.00407 35.3 4.79e+03 World eIoni - 75 -2.19e+03 1.81e+03 1.76e+03 5.69 0.0446 269 5.06e+03 World eIoni - 76 -2.19e+03 1.81e+03 1.78e+03 5.68 0.00212 20.6 5.08e+03 World eIoni - 77 -2.2e+03 1.82e+03 1.8e+03 5.68 0.00333 24.4 5.1e+03 World eIoni - 78 -2.24e+03 1.85e+03 1.88e+03 5.66 0.0141 96.6 5.2e+03 World eIoni - 79 -2.25e+03 1.86e+03 1.9e+03 5.65 0.00469 23 5.22e+03 World eIoni - 80 -2.29e+03 1.88e+03 1.97e+03 5.64 0.0123 82.2 5.3e+03 World eIoni - 81 -2.34e+03 1.92e+03 2.07e+03 5.62 0.0163 120 5.42e+03 World eIoni - 82 -2.36e+03 1.94e+03 2.14e+03 5.61 0.00903 72.8 5.5e+03 World eIoni - 83 -2.38e+03 1.95e+03 2.18e+03 5.6 0.006 43 5.54e+03 World eIoni - 84 -2.38e+03 1.96e+03 2.19e+03 5.6 0.000466 11.2 5.55e+03 World eIoni - 85 -2.4e+03 1.97e+03 2.23e+03 5.59 0.0073 47.2 5.6e+03 World eIoni - 86 -2.45e+03 2.02e+03 2.35e+03 5.57 0.0186 141 5.74e+03 World eIoni - 87 -2.49e+03 2.05e+03 2.44e+03 5.55 0.0155 101 5.84e+03 World eIoni - 88 -2.5e+03 2.05e+03 2.45e+03 5.55 0.00176 14.6 5.86e+03 World eIoni - 89 -2.52e+03 2.07e+03 2.51e+03 5.53 0.0116 69.9 5.93e+03 World eIoni - 90 -2.54e+03 2.09e+03 2.56e+03 5.53 0.00682 47 5.97e+03 World eIoni - 91 -2.56e+03 2.1e+03 2.6e+03 5.39 0.00857 55.6 6.03e+03 World eIoni - 92 -2.75e+03 2.21e+03 2.87e+03 5.34 0.0497 348 6.38e+03 World eIoni - 93 -2.75e+03 2.21e+03 2.88e+03 5.34 0.000271 0.707 6.38e+03 World eIoni - 94 -2.79e+03 2.25e+03 2.94e+03 5.32 0.0142 88.3 6.47e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 473, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.75e+03 2.21e+03 2.88e+03 0.00279 0 0 0 World initStep - 1 -2.75e+03 2.21e+03 2.88e+03 0 0.00279 0.279 0.279 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 472, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.75e+03 2.21e+03 2.87e+03 0.00116 0 0 0 World initStep - 1 -2.75e+03 2.21e+03 2.87e+03 0 0.00116 0.0704 0.0704 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 471, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.56e+03 2.1e+03 2.6e+03 0.128 0 0 0 World initStep - 1 -2.52e+03 2.12e+03 2.63e+03 0.11 0.018 54.8 54.8 World eIoni - 2 -2.51e+03 2.12e+03 2.63e+03 0.102 0.0046 12.1 66.9 World eIoni - 3 -2.48e+03 2.12e+03 2.6e+03 0.087 0.0154 38 105 World eIoni - 4 -2.48e+03 2.12e+03 2.6e+03 0.0831 0.00249 4.69 110 World eIoni - 5 -2.48e+03 2.13e+03 2.59e+03 0.0764 0.00679 18.4 128 World eIoni - 6 -2.47e+03 2.15e+03 2.59e+03 0.0659 0.0105 23.3 151 World eIoni - 7 -2.48e+03 2.17e+03 2.58e+03 0.0564 0.00767 16.3 168 World eIoni - 8 -2.48e+03 2.17e+03 2.58e+03 0.0536 0.00124 3.53 171 World eIoni - 9 -2.49e+03 2.17e+03 2.57e+03 0.0447 0.00887 13.1 184 World eIoni - 10 -2.5e+03 2.17e+03 2.56e+03 0.0377 0.007 9.86 194 World eIoni - 11 -2.5e+03 2.18e+03 2.56e+03 0.0287 0.00908 7.65 202 World eIoni - 12 -2.51e+03 2.17e+03 2.56e+03 0.0247 0.004 5.23 207 World eIoni - 13 -2.51e+03 2.18e+03 2.56e+03 0.0211 0.00358 4.33 211 World eIoni - 14 -2.51e+03 2.18e+03 2.55e+03 0.0138 0.00161 1.33 213 World eIoni - 15 -2.51e+03 2.18e+03 2.55e+03 0.00796 0.00274 1.57 214 World eIoni - 16 -2.51e+03 2.18e+03 2.55e+03 0.00479 0.00113 0.433 215 World eIoni - 17 -2.51e+03 2.18e+03 2.55e+03 0 0.00479 0.71 215 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 480, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.51e+03 2.18e+03 2.55e+03 0.00204 0 0 0 World initStep - 1 -2.51e+03 2.18e+03 2.55e+03 0 0.00204 0.167 0.167 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 479, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.51e+03 2.18e+03 2.55e+03 0.00311 0 0 0 World initStep - 1 -2.51e+03 2.18e+03 2.55e+03 0 0.00311 0.336 0.336 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 478, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.51e+03 2.18e+03 2.55e+03 0.00565 0 0 0 World initStep - 1 -2.51e+03 2.18e+03 2.55e+03 0 0.00565 0.952 0.952 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 477, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.48e+03 2.17e+03 2.58e+03 0.0016 0 0 0 World initStep - 1 -2.48e+03 2.17e+03 2.58e+03 0 0.0016 0.114 0.114 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 476, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.48e+03 2.17e+03 2.58e+03 0.00178 0 0 0 World initStep - 1 -2.48e+03 2.17e+03 2.58e+03 0 0.00178 0.134 0.134 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 475, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.48e+03 2.12e+03 2.6e+03 0.00141 0 0 0 World initStep - 1 -2.48e+03 2.12e+03 2.6e+03 0 0.00141 0.0939 0.0939 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 474, Parent ID = 471 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.51e+03 2.12e+03 2.63e+03 0.00257 0 0 0 World initStep - 1 -2.51e+03 2.12e+03 2.63e+03 0 0.00257 0.243 0.243 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 470, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.54e+03 2.09e+03 2.56e+03 0.00141 0 0 0 World initStep - 1 -2.54e+03 2.09e+03 2.56e+03 0 0.00141 0.0944 0.0944 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 469, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.52e+03 2.07e+03 2.51e+03 0.00249 0 0 0 World initStep - 1 -2.52e+03 2.07e+03 2.51e+03 0 0.00249 0.231 0.231 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 468, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.5e+03 2.05e+03 2.45e+03 0.00132 0 0 0 World initStep - 1 -2.5e+03 2.05e+03 2.45e+03 0 0.00132 0.0854 0.0854 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 467, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.49e+03 2.05e+03 2.44e+03 0.00123 0 0 0 World initStep - 1 -2.49e+03 2.05e+03 2.44e+03 0 0.00123 0.0767 0.0767 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 466, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.45e+03 2.02e+03 2.35e+03 0.00156 0 0 0 World initStep - 1 -2.45e+03 2.02e+03 2.35e+03 0 0.00156 0.11 0.11 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 465, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.4e+03 1.97e+03 2.23e+03 0.00393 0 0 0 World initStep - 1 -2.4e+03 1.97e+03 2.23e+03 0 0.00393 0.503 0.503 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 464, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.38e+03 1.96e+03 2.19e+03 0.00286 0 0 0 World initStep - 1 -2.38e+03 1.96e+03 2.19e+03 0 0.00286 0.291 0.291 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 463, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.38e+03 1.95e+03 2.18e+03 0.00116 0 0 0 World initStep - 1 -2.38e+03 1.95e+03 2.18e+03 0 0.00116 0.071 0.071 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 462, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.36e+03 1.94e+03 2.14e+03 0.00267 0 0 0 World initStep - 1 -2.36e+03 1.94e+03 2.14e+03 0 0.00267 0.258 0.258 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 461, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.34e+03 1.92e+03 2.07e+03 0.0028 0 0 0 World initStep - 1 -2.34e+03 1.92e+03 2.07e+03 0 0.0028 0.281 0.281 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 460, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.29e+03 1.88e+03 1.97e+03 0.00134 0 0 0 World initStep - 1 -2.29e+03 1.88e+03 1.97e+03 0 0.00134 0.0871 0.0871 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 459, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.25e+03 1.86e+03 1.9e+03 0.00344 0 0 0 World initStep - 1 -2.25e+03 1.86e+03 1.9e+03 0 0.00344 0.398 0.398 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 458, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.24e+03 1.85e+03 1.88e+03 0.00101 0 0 0 World initStep - 1 -2.24e+03 1.85e+03 1.88e+03 0 0.00101 0.0577 0.0577 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 457, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.2e+03 1.82e+03 1.8e+03 0.00259 0 0 0 World initStep - 1 -2.2e+03 1.82e+03 1.8e+03 0 0.00259 0.247 0.247 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 456, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.19e+03 1.81e+03 1.78e+03 0.00194 0 0 0 World initStep - 1 -2.19e+03 1.82e+03 1.78e+03 0 0.00194 0.154 0.154 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 455, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.19e+03 1.81e+03 1.76e+03 0.00111 0 0 0 World initStep - 1 -2.19e+03 1.81e+03 1.76e+03 0 0.00111 0.0661 0.0661 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 454, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.08e+03 1.72e+03 1.53e+03 0.00104 0 0 0 World initStep - 1 -2.08e+03 1.72e+03 1.53e+03 0 0.00104 0.0605 0.0605 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 453, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.06e+03 1.7e+03 1.5e+03 0.00461 0 0 0 World initStep - 1 -2.06e+03 1.7e+03 1.5e+03 0 0.00461 0.665 0.665 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 452, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.04e+03 1.69e+03 1.46e+03 0.00451 0 0 0 World initStep - 1 -2.04e+03 1.69e+03 1.46e+03 0 0.00451 0.638 0.638 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 451, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.03e+03 1.68e+03 1.44e+03 0.00122 0 0 0 World initStep - 1 -2.03e+03 1.68e+03 1.44e+03 0 0.00122 0.0765 0.0765 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 450, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.91e+03 1.55e+03 1.21e+03 0.00149 0 0 0 World initStep - 1 -1.91e+03 1.55e+03 1.21e+03 0 0.00149 0.103 0.103 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 449, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.8e+03 1.43e+03 981 0.00141 0 0 0 Tracker initStep - 1 -1.8e+03 1.43e+03 981 0 0.00141 0.0947 0.0947 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 448, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.77e+03 1.4e+03 921 0.0018 0 0 0 Tracker initStep - 1 -1.77e+03 1.4e+03 921 0 0.0018 0.137 0.137 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 447, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.64e+03 1.26e+03 638 0.00152 0 0 0 Tracker initStep - 1 -1.64e+03 1.26e+03 638 0 0.00152 0.105 0.105 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 446, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.6e+03 1.21e+03 557 0.00216 0 0 0 Tracker initStep - 1 -1.6e+03 1.21e+03 557 0 0.00216 0.183 0.183 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 445, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.48e+03 1.11e+03 340 0.00104 0 0 0 Tracker initStep - 1 -1.48e+03 1.11e+03 340 0 0.00104 0.06 0.06 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 444, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.44e+03 1.07e+03 251 0.00222 0 0 0 Tracker initStep - 1 -1.44e+03 1.07e+03 251 0 0.00222 0.191 0.191 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 443, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.41e+03 1.04e+03 181 0.00291 0 0 0 Tracker initStep - 1 -1.41e+03 1.04e+03 181 0 0.00291 0.299 0.299 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 442, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.41e+03 1.04e+03 169 0.001 0 0 0 Tracker initStep - 1 -1.41e+03 1.04e+03 169 0 0.001 0.0573 0.0573 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 441, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.38e+03 1.01e+03 97.7 0.00106 0 0 0 Tracker initStep - 1 -1.38e+03 1.01e+03 97.7 0 0.00106 0.0621 0.0621 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 440, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 964 -8.79 0.0859 0 0 0 Tracker initStep - 1 -1.34e+03 952 12.7 0.0673 0.00942 25.6 25.6 Tracker eIoni - 2 -1.34e+03 951 14 0.0669 0.000317 1.57 27.2 Tracker eIoni - 3 -1.34e+03 944 29.1 0.061 0.00596 18.7 45.9 Tracker eIoni - 4 -1.34e+03 944 29.4 0.0592 7.82e-05 0.379 46.3 Tracker eIoni - 5 -1.34e+03 931 36.1 0.0532 0.00594 15.3 61.6 Tracker eIoni - 6 -1.33e+03 924 41.7 0.0385 0.00504 9.65 71.3 Tracker eIoni - 7 -1.34e+03 922 44.8 0.0324 0.00255 3.89 75.2 Tracker eIoni - 8 -1.34e+03 920 50.5 0.0279 0.00446 6.15 81.3 Tracker eIoni - 9 -1.34e+03 920 50.6 0.0266 0.000269 0.175 81.5 Tracker eIoni - 10 -1.34e+03 918 53.2 0.0236 0.00303 4.76 86.3 Tracker eIoni - 11 -1.34e+03 918 53.7 0.0205 0.000356 0.479 86.7 Tracker eIoni - 12 -1.34e+03 919 55.1 0.0159 0.00463 3.52 90.2 Tracker eIoni - 13 -1.34e+03 919 55.1 0.0147 0.000134 0.11 90.4 Tracker eIoni - 14 -1.34e+03 921 56.6 0.0104 0.00429 2.53 92.9 Tracker eIoni - 15 -1.34e+03 921 56.7 0.00774 0.000263 0.202 93.1 Tracker eIoni - 16 -1.34e+03 920 58 0.00238 0.00537 1.46 94.5 Tracker eIoni - 17 -1.34e+03 920 58 0 0.00238 0.213 94.8 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 488, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 921 56.7 0.00237 0 0 0 Tracker initStep - 1 -1.34e+03 921 56.8 0 0.00237 0.213 0.213 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 487, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 919 55.1 0.00111 0 0 0 Tracker initStep - 1 -1.34e+03 919 55.1 0 0.00111 0.0667 0.0667 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 486, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 918 53.7 0.00266 0 0 0 Tracker initStep - 1 -1.34e+03 918 53.8 0 0.00266 0.258 0.258 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 485, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 920 50.6 0.00103 0 0 0 Tracker initStep - 1 -1.34e+03 920 50.6 0 0.00103 0.0593 0.0593 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 484, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 922 44.8 0.00362 0 0 0 Tracker initStep - 1 -1.34e+03 922 44.7 0 0.00362 0.436 0.436 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 483, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.33e+03 924 41.7 0.00968 0 0 0 Tracker initStep - 1 -1.33e+03 924 41.8 0.00711 0.00111 0.282 0.282 Tracker eIoni - 2 -1.33e+03 925 41.9 0.00194 0.00516 1.28 1.56 Tracker eIoni - 3 -1.33e+03 925 41.9 0 0.00194 0.155 1.72 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 489, Parent ID = 483 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.33e+03 924 41.8 0.00146 0 0 0 Tracker initStep - 1 -1.33e+03 924 41.8 0 0.00146 0.0996 0.0996 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 482, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 944 29.4 0.00172 0 0 0 Tracker initStep - 1 -1.34e+03 944 29.4 0 0.00172 0.128 0.128 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 481, Parent ID = 440 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.34e+03 952 12.7 0.00924 0 0 0 Tracker initStep - 1 -1.34e+03 952 12.9 0.00469 0.00455 1.72 1.72 Tracker eIoni - 2 -1.34e+03 952 13.1 0 0.00469 0.684 2.4 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 439, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.32e+03 942 -69.9 0.0131 0 0 0 Tracker initStep - 1 -1.32e+03 940 -70.9 0.00645 0.00668 2.3 2.3 Tracker eIoni - 2 -1.32e+03 940 -71.4 0.00146 0.005 1.18 3.48 Tracker eIoni - 3 -1.32e+03 940 -71.4 0 0.00146 0.0991 3.57 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 438, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.29e+03 920 -151 0.00156 0 0 0 Tracker initStep - 1 -1.29e+03 920 -151 0 0.00156 0.11 0.11 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 437, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.26e+03 895 -229 0.00106 0 0 0 Tracker initStep - 1 -1.26e+03 895 -229 0 0.00106 0.0624 0.0624 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 436, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.24e+03 880 -273 0.00458 0 0 0 Tracker initStep - 1 -1.24e+03 880 -273 0.00146 0.00213 0.349 0.349 Tracker eIoni - 2 -1.24e+03 880 -273 0 0.00146 0.0994 0.448 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 490, Parent ID = 436 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.24e+03 880 -273 0.000991 0 0 0 Tracker initStep - 1 -1.24e+03 880 -273 0 0.000991 0.0563 0.0563 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 435, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.21e+03 850 -367 0.00571 0 0 0 Tracker initStep - 1 -1.21e+03 850 -367 0 0.00571 0.969 0.969 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 434, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.18e+03 832 -419 0.00813 0 0 0 Tracker initStep - 1 -1.18e+03 832 -419 0.00379 0.00125 0.558 0.558 Tracker eIoni - 2 -1.18e+03 833 -419 0.00195 0.00022 0.0573 0.616 Tracker eIoni - 3 -1.18e+03 833 -419 0 0.00195 0.155 0.771 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 492, Parent ID = 434 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.18e+03 833 -419 0.00163 0 0 0 Tracker initStep - 1 -1.18e+03 833 -419 0 0.00163 0.117 0.117 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 491, Parent ID = 434 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.18e+03 832 -419 0.00309 0 0 0 Tracker initStep - 1 -1.18e+03 833 -419 0 0.00309 0.332 0.332 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 433, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.17e+03 821 -449 0.00661 0 0 0 Tracker initStep - 1 -1.17e+03 820 -449 0.000374 0.00624 1.22 1.22 Tracker eIoni - 2 -1.17e+03 820 -449 0 0.000374 0.0164 1.23 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 432, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.1e+03 760 -621 0.00129 0 0 0 Tracker initStep - 1 -1.1e+03 760 -622 0 0.00129 0.0831 0.0831 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 431, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.09e+03 756 -633 0.00257 0 0 0 Tracker initStep - 1 -1.09e+03 756 -633 0 0.00257 0.242 0.242 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 430, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.09e+03 751 -649 0.00103 0 0 0 Tracker initStep - 1 -1.09e+03 751 -649 0 0.00103 0.0592 0.0592 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 429, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.07e+03 737 -687 0.00251 0 0 0 Tracker initStep - 1 -1.07e+03 737 -687 0 0.00251 0.234 0.234 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 428, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.06e+03 730 -705 0.0016 0 0 0 Tracker initStep - 1 -1.06e+03 729 -705 0 0.0016 0.115 0.115 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 427, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.01e+03 692 -803 0.00124 0 0 0 Tracker initStep - 1 -1.01e+03 692 -803 0 0.00124 0.0783 0.0783 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 426, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -999 683 -826 0.0633 0 0 0 Tracker initStep - 1 -1.01e+03 687 -835 0.056 0.00733 17.1 17.1 Tracker eIoni - 2 -1.02e+03 692 -844 0.0494 0.00654 14 31.1 Tracker eIoni - 3 -1.03e+03 696 -850 0.0448 0.00462 10.6 41.7 Tracker eIoni - 4 -1.03e+03 705 -854 0.0391 0.00571 9.89 51.6 Tracker eIoni - 5 -1.02e+03 705 -858 0.0345 0.00346 4.57 56.2 Tracker eIoni - 6 -1.02e+03 706 -860 0.0304 0.00146 2.4 58.6 Tracker eIoni - 7 -1.02e+03 705 -862 0.0281 0.000699 2.08 60.7 Tracker eIoni - 8 -1.03e+03 707 -865 0.0238 0.00435 5.11 65.8 Tracker eIoni - 9 -1.03e+03 709 -866 0.0197 0.00413 4.15 69.9 Tracker eIoni - 10 -1.03e+03 709 -867 0.0174 0.00113 0.765 70.7 Tracker eIoni - 11 -1.03e+03 708 -867 0.013 0.00276 1.63 72.3 Tracker eIoni - 12 -1.03e+03 708 -865 0.00927 0.00375 2.28 74.6 Tracker eIoni - 13 -1.03e+03 707 -864 0.00455 0.00472 1.72 76.3 Tracker eIoni - 14 -1.03e+03 707 -864 0 0.00455 0.648 77 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 497, Parent ID = 426 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.03e+03 708 -867 0.00165 0 0 0 Tracker initStep - 1 -1.03e+03 708 -867 0 0.00165 0.12 0.12 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 496, Parent ID = 426 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.03e+03 709 -867 0.0011 0 0 0 Tracker initStep - 1 -1.03e+03 709 -867 0 0.0011 0.0655 0.0655 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 495, Parent ID = 426 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.02e+03 705 -862 0.00156 0 0 0 Tracker initStep - 1 -1.02e+03 706 -862 0 0.00156 0.11 0.11 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 494, Parent ID = 426 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.02e+03 706 -860 0.00259 0 0 0 Tracker initStep - 1 -1.02e+03 706 -860 0 0.00259 0.246 0.246 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 493, Parent ID = 426 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.02e+03 705 -858 0.00117 0 0 0 Tracker initStep - 1 -1.02e+03 706 -858 0 0.00117 0.0716 0.0716 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 425, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -855 568 -1.09e+03 0.00156 0 0 0 Tracker initStep - 1 -855 568 -1.09e+03 0 0.00156 0.11 0.11 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 424, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -854 568 -1.09e+03 0.0085 0 0 0 Tracker initStep - 1 -853 569 -1.09e+03 0.00264 0.00586 1.59 1.59 Tracker eIoni - 2 -853 569 -1.09e+03 0 0.00264 0.254 1.85 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 423, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -833 550 -1.13e+03 0.00182 0 0 0 Tracker initStep - 1 -832 550 -1.13e+03 0 0.00182 0.14 0.14 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 422, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -768 496 -1.25e+03 0.00183 0 0 0 Tracker initStep - 1 -768 496 -1.25e+03 0 0.00183 0.141 0.141 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 421, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -662 408 -1.42e+03 0.00414 0 0 0 Tracker initStep - 1 -662 408 -1.42e+03 0.00184 0.0023 0.5 0.5 Tracker eIoni - 2 -662 408 -1.42e+03 0 0.00184 0.142 0.642 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 420, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -650 398 -1.45e+03 0.000999 0 0 0 Tracker initStep - 1 -650 398 -1.45e+03 0 0.000999 0.057 0.057 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 419, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -562 334 -1.59e+03 0.00155 0 0 0 Tracker initStep - 1 -562 334 -1.59e+03 0 0.00155 0.109 0.109 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 418, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -474 281 -1.7e+03 0.00139 0 0 0 Tracker initStep - 1 -474 281 -1.7e+03 0 0.00139 0.0926 0.0926 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 417, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -441 258 -1.74e+03 0.00125 0 0 0 Tracker initStep - 1 -441 258 -1.74e+03 0 0.00125 0.079 0.079 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 416, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -370 212 -1.85e+03 0.00182 0 0 0 Tracker initStep - 1 -370 212 -1.85e+03 0 0.00182 0.139 0.139 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 415, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -345 198 -1.88e+03 0.00167 0 0 0 Tracker initStep - 1 -345 198 -1.88e+03 0 0.00167 0.122 0.122 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 414, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -256 152 -2.01e+03 0.00279 0 0 0 Tracker initStep - 1 -256 152 -2.01e+03 0 0.00279 0.278 0.278 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 413, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -180 109 -2.12e+03 0.00312 0 0 0 Tracker initStep - 1 -180 109 -2.12e+03 0 0.00312 0.336 0.336 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 412, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -132 80.1 -2.2e+03 0.0011 0 0 0 Tracker initStep - 1 -132 80.1 -2.2e+03 0 0.0011 0.0654 0.0654 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 411, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -124 75.1 -2.21e+03 0.00108 0 0 0 Tracker initStep - 1 -124 75.1 -2.21e+03 0 0.00108 0.0641 0.0641 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 410, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -85.6 51.5 -2.27e+03 0.00162 0 0 0 Tracker initStep - 1 -85.7 51.5 -2.27e+03 0 0.00162 0.116 0.116 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 409, Parent ID = 273 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -69.9 42.6 -2.29e+03 0.00391 0 0 0 Tracker initStep - 1 -70 42.7 -2.29e+03 0 0.00391 0.497 0.497 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 406, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.14 -5.59 -2.4e+03 6.77 0 0 0 Target initStep - 1 -1.27 -5.7 -2.4e+03 6.58 0.196 0.214 0.214 Target msc - 2 -1.44 -5.8 -2.4e+03 6.1 0.236 0.21 0.424 Target eBrem - 3 -1.61 -5.91 -2.4e+03 5.78 0.32 0.241 0.665 Target msc - 4 -1.68 -6.12 -2.4e+03 5.42 0.363 0.241 0.907 Target msc - 5 -1.84 -6.24 -2.4e+03 5.07 0.346 0.241 1.15 Target msc - 6 -2.08 -6.22 -2.4e+03 4.82 0.252 0.241 1.39 Target msc - 7 -2.28 -6.18 -2.4e+03 4.59 0.225 0.241 1.63 Target msc - 8 -2.25 -5.98 -2.4e+03 3.94 0.655 0.241 1.87 Target msc - 9 -2.22 -5.77 -2.4e+03 3.64 0.303 0.241 2.11 Target msc - 10 -2.33 -5.84 -2.4e+03 3.14 0.493 0.241 2.35 Target msc - 11 -2.16 -5.81 -2.4e+03 2.89 0.253 0.241 2.6 Target msc - 12 -1.95 -5.78 -2.4e+03 2.6 0.293 0.241 2.84 Target msc - 13 -1.93 -5.61 -2.4e+03 2.39 0.206 0.241 3.08 Target msc - 14 -2 -5.72 -2.4e+03 2.11 0.28 0.241 3.32 Target msc - 15 -1.89 -5.53 -2.4e+03 1.83 0.285 0.241 3.56 Target msc - 16 -1.75 -5.69 -2.4e+03 1.62 0.208 0.241 3.8 Target msc - 17 -1.82 -5.83 -2.4e+03 1.38 0.237 0.241 4.04 Target msc - 18 -1.8 -5.62 -2.4e+03 1.15 0.233 0.241 4.29 Target msc - 19 -1.81 -5.61 -2.4e+03 0.912 0.236 0.241 4.53 Target msc - 20 -1.85 -5.47 -2.4e+03 0.312 0.6 0.241 4.77 Target msc - 21 -1.84 -5.47 -2.4e+03 0 0.312 0.158 4.93 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 378, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.451 -3 -2.41e+03 1.24 0 0 0 Target initStep - 1 0.514 -3.04 -2.41e+03 0 1.24 0.937 0.937 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 366, Parent ID = 171 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 108 291 -1.82e+03 0.364 0 0 0 Tracker initStep - 1 109 283 -1.81e+03 0.361 0.00136 13.8 13.8 Tracker eIoni - 2 106 258 -1.78e+03 0.343 0.00742 43.2 57 Tracker eIoni - 3 107 222 -1.72e+03 0.33 0.00962 67 124 Tracker eIoni - 4 108 192 -1.7e+03 0.324 0.00578 37.5 162 Chamber Transportation - 5 108 190 -1.7e+03 0.321 0.00139 2.69 164 Chamber eIoni - 6 121 204 -1.68e+03 0.289 0.0271 43.3 208 Chamber eIoni - 7 113 211 -1.66e+03 0.275 0.0127 39.6 247 Chamber eIoni - 8 105 216 -1.66e+03 0.269 0.00431 12.1 259 Chamber eIoni - 9 105 216 -1.66e+03 0.268 0.000452 0.783 260 Tracker Transportation - 10 95.5 233 -1.72e+03 0.23 0.0126 66.2 326 Tracker eIoni - 11 71.3 271 -1.79e+03 0.205 0.0175 87.5 414 Tracker eIoni - 12 71.1 299 -1.83e+03 0.189 0.015 54.3 468 Tracker eIoni - 13 82.3 309 -1.89e+03 0.171 0.0152 60.7 529 Tracker eIoni - 14 77.3 312 -1.9e+03 0.167 0.00257 12.2 541 Tracker eIoni - 15 15.2 356 -1.94e+03 0.148 0.0188 85.6 627 Tracker eIoni - 16 11.5 353 -1.93e+03 0.143 0.00147 5.24 632 Tracker eIoni - 17 -17 343 -1.91e+03 0.128 0.0131 41.9 674 Tracker eIoni - 18 -17.1 342 -1.91e+03 0.126 0.000654 2.36 676 Tracker eIoni - 19 -19.5 340 -1.9e+03 0.118 0.00305 9.29 685 Tracker eIoni - 20 -20.9 332 -1.89e+03 0.11 0.00512 14.5 700 Tracker eIoni - 21 -23 329 -1.88e+03 0.102 0.00302 4.99 705 Tracker eIoni - 22 -25.5 327 -1.86e+03 0.0935 0.006 19.6 724 Tracker eIoni - 23 -20.4 329 -1.83e+03 0.0822 0.0113 32.6 757 Tracker eIoni - 24 -20.8 327 -1.83e+03 0.0802 0.000833 2.56 760 Tracker eIoni - 25 -30.7 324 -1.82e+03 0.0729 0.00597 17.7 777 Tracker eIoni - 26 -41.8 321 -1.82e+03 0.0665 0.00532 12.9 790 Tracker eIoni - 27 -55.4 312 -1.83e+03 0.0582 0.00834 18.5 809 Tracker eIoni - 28 -56.6 299 -1.83e+03 0.0508 0.00738 14.9 824 Tracker eIoni - 29 -66.6 298 -1.84e+03 0.0442 0.00658 12 836 Tracker eIoni - 30 -72.6 299 -1.85e+03 0.0388 0.00541 9.69 845 Tracker eIoni - 31 -72.3 302 -1.85e+03 0.0343 0.0032 5.86 851 Tracker eIoni - 32 -70.9 302 -1.86e+03 0.0279 0.00312 5.07 856 Tracker eIoni - 33 -70.9 302 -1.86e+03 0.0179 0.000383 0.497 857 Tracker eIoni - 34 -68.9 304 -1.86e+03 0.015 0.00288 3.05 860 Tracker eIoni - 35 -67.7 304 -1.86e+03 0.0116 0.00348 2.59 862 Tracker eIoni - 36 -68.4 305 -1.86e+03 0.00492 0.0036 1.43 864 Tracker eIoni - 37 -68.7 305 -1.86e+03 0 0.00492 0.745 865 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 524, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -68.4 305 -1.86e+03 0.00305 0 0 0 Tracker initStep - 1 -68.4 305 -1.86e+03 0 0.00305 0.323 0.323 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 523, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -70.9 302 -1.86e+03 0.00962 0 0 0 Tracker initStep - 1 -72.4 303 -1.86e+03 0.00532 0.0043 1.78 1.78 Tracker eIoni - 2 -72.3 303 -1.86e+03 0 0.00532 0.856 2.63 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 522, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -70.9 302 -1.86e+03 0.00327 0 0 0 Tracker initStep - 1 -70.8 303 -1.86e+03 0 0.00327 0.364 0.364 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 521, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -72.3 302 -1.85e+03 0.00128 0 0 0 Tracker initStep - 1 -72.4 302 -1.85e+03 0 0.00128 0.0818 0.0818 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 520, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -41.8 321 -1.82e+03 0.0011 0 0 0 Tracker initStep - 1 -41.8 321 -1.82e+03 0 0.0011 0.0658 0.0658 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 519, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -30.7 324 -1.82e+03 0.00132 0 0 0 Tracker initStep - 1 -30.7 324 -1.82e+03 0 0.00132 0.0851 0.0851 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 518, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -20.8 327 -1.83e+03 0.00117 0 0 0 Tracker initStep - 1 -20.8 327 -1.83e+03 0 0.00117 0.0713 0.0713 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 517, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -25.5 327 -1.86e+03 0.0024 0 0 0 Tracker initStep - 1 -25.6 327 -1.86e+03 0 0.0024 0.217 0.217 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 516, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -23 329 -1.88e+03 0.00551 0 0 0 Tracker initStep - 1 -23.3 329 -1.88e+03 0 0.00551 0.909 0.909 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 515, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -20.9 332 -1.89e+03 0.00252 0 0 0 Tracker initStep - 1 -20.8 332 -1.89e+03 0 0.00252 0.234 0.234 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 514, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -19.5 340 -1.9e+03 0.00507 0 0 0 Tracker initStep - 1 -19.7 340 -1.9e+03 0 0.00507 0.785 0.785 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 513, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -17.1 342 -1.91e+03 0.00114 0 0 0 Tracker initStep - 1 -17.1 342 -1.91e+03 0 0.00114 0.0685 0.0685 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 512, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -17 343 -1.91e+03 0.00155 0 0 0 Tracker initStep - 1 -17 343 -1.91e+03 0 0.00155 0.109 0.109 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 511, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 11.5 353 -1.93e+03 0.00417 0 0 0 Tracker initStep - 1 11.4 353 -1.93e+03 0 0.00417 0.557 0.557 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 510, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 77.3 312 -1.9e+03 0.00165 0 0 0 Tracker initStep - 1 77.3 312 -1.9e+03 0 0.00165 0.12 0.12 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 509, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 82.3 309 -1.89e+03 0.00255 0 0 0 Tracker initStep - 1 82.3 309 -1.89e+03 0 0.00255 0.239 0.239 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 508, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 71.1 299 -1.83e+03 0.00109 0 0 0 Tracker initStep - 1 71.1 299 -1.83e+03 0 0.00109 0.0646 0.0646 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 507, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 71.3 271 -1.79e+03 0.00771 0 0 0 Tracker initStep - 1 70.7 271 -1.79e+03 0.0029 0.00481 1.45 1.45 Tracker eIoni - 2 70.8 271 -1.79e+03 0 0.0029 0.297 1.75 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 506, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 95.5 233 -1.72e+03 0.0255 0 0 0 Tracker initStep - 1 91.5 233 -1.72e+03 0.0211 0.00441 4.51 4.51 Tracker eIoni - 2 91 236 -1.72e+03 0.0174 0.00363 3.61 8.12 Tracker eIoni - 3 90.9 236 -1.72e+03 0.0127 0.0047 2.97 11.1 Tracker eIoni - 4 91.3 235 -1.73e+03 0.00876 0.00397 2.24 13.3 Tracker eIoni - 5 91.1 234 -1.73e+03 0.00394 0.00482 1.64 15 Tracker eIoni - 6 91.2 234 -1.73e+03 0 0.00394 0.503 15.5 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 505, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 105 216 -1.66e+03 0.00151 0 0 0 Chamber initStep - 1 105 216 -1.66e+03 0 0.00151 0.071 0.071 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 504, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 113 211 -1.66e+03 0.00177 0 0 0 Chamber initStep - 1 113 211 -1.66e+03 0 0.00177 0.0877 0.0877 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 503, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 121 204 -1.68e+03 0.00444 0 0 0 Chamber initStep - 1 121 204 -1.68e+03 0 0.00444 0.327 0.327 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 502, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 108 190 -1.7e+03 0.00173 0 0 0 Chamber initStep - 1 108 190 -1.7e+03 0 0.00173 0.0851 0.0851 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 501, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 107 222 -1.72e+03 0.00352 0 0 0 Tracker initStep - 1 107 222 -1.72e+03 0 0.00352 0.415 0.415 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 500, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 106 258 -1.78e+03 0.0105 0 0 0 Tracker initStep - 1 105 260 -1.78e+03 0.00733 0.00314 1.9 1.9 Tracker eIoni - 2 105 261 -1.78e+03 0.00113 0.0062 1.38 3.28 Tracker eIoni - 3 105 261 -1.78e+03 0 0.00113 0.0679 3.35 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 499, Parent ID = 366 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 109 283 -1.81e+03 0.00196 0 0 0 Tracker initStep - 1 109 283 -1.81e+03 0 0.00196 0.156 0.156 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 365, Parent ID = 178 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0627 -0.0835 -2.41e+03 36.4 0 0 0 Target initStep - 1 0.0893 -0.141 -2.41e+03 30.9 1.18 0.842 0.842 Target eBrem - 2 0.538 -0.302 -2.41e+03 20.5 2.15 1.76 2.61 Target eBrem - 3 1.29 0.667 -2.41e+03 18.5 1.78 1.29 3.9 Target eBrem - 4 1.87 0.944 -2.41e+03 16.8 1.48 0.979 4.88 Target eBrem - 5 2.43 0.941 -2.41e+03 15.9 0.601 0.615 5.49 Target eBrem - 6 2.71 0.971 -2.41e+03 14.4 0.6 0.286 5.78 Target eBrem - 7 2.75 0.963 -2.41e+03 12.8 0.0265 0.0372 5.81 Target eBrem - 8 2.99 0.912 -2.41e+03 12.3 0.316 0.254 6.07 Target eBrem - 9 3.36 0.94 -2.41e+03 11.3 0.528 0.407 6.48 Target eBrem - 10 3.74 1.01 -2.41e+03 10.1 0.404 0.392 6.87 Target eBrem - 11 3.91 0.999 -2.41e+03 8.41 0.171 0.167 7.03 Target eBrem - 12 4.67 1.05 -2.41e+03 6.31 1.62 1.39 8.42 Target eBrem - 13 4.59 1.27 -2.41e+03 5.85 0.272 0.277 8.7 Target eBrem - 14 5.35 1.87 -2.41e+03 4.46 1.14 1.06 9.76 Target eBrem - 15 6.67 3.47 -2.41e+03 2.47 2 2.11 11.9 Target eIoni - 16 6.63 3.8 -2.41e+03 1.62 0.453 0.48 12.3 Target eBrem - 17 7.13 3.74 -2.41e+03 0.246 0.805 0.725 13.1 Target eBrem - 18 7.13 3.75 -2.41e+03 0 0.246 0.112 13.2 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 364, Parent ID = 179 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0665 0.00166 -2.42e+03 11.1 0 0 0 Target initStep - 1 0.573 0.643 -2.41e+03 8.56 1.68 1.41 1.41 Target eBrem - 2 1.35 0.942 -2.41e+03 4.78 1.37 0.982 2.39 Target eBrem - 3 1.64 1.61 -2.41e+03 1.73 1.2 0.92 3.31 Target eBrem - 4 1.62 1.72 -2.41e+03 1.3 0.11 0.113 3.43 Target eBrem - 5 1.69 1.74 -2.41e+03 0 1.3 0.987 4.41 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 362, Parent ID = 185 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.357 -0.219 -2.41e+03 9.62 0 0 0 Target initStep - 1 0.329 0.275 -2.41e+03 2.38 1.5 1.2 1.2 Target eBrem - 2 0.0668 1.32 -2.41e+03 0.708 1.68 1.56 2.76 Target eIoni - 3 0.0738 1.34 -2.41e+03 0 0.708 0.479 3.24 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 360, Parent ID = 186 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.135 -0.0872 -2.41e+03 15 0 0 0 Target initStep - 1 0.136 -0.0872 -2.41e+03 8.21 0.0206 0.0152 0.0152 Target eBrem - 2 0.16 -0.0279 -2.41e+03 6.94 0.213 0.203 0.218 Target eBrem - 3 -0.299 0.163 -2.41e+03 5.72 1.07 1.02 1.23 Target eBrem - 4 -0.415 -0.148 -2.41e+03 4.7 0.477 0.408 1.64 Target eBrem - 5 -1.4 -0.421 -2.41e+03 2.39 2.11 1.85 3.49 Target eBrem - 6 -1.06 -0.242 -2.41e+03 1.64 0.753 0.654 4.15 Target eBrem - 7 -0.286 -0.84 -2.41e+03 0.113 1.52 1.23 5.38 Target eIoni - 8 -0.285 -0.838 -2.41e+03 0 0.113 0.0334 5.41 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 358, Parent ID = 187 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.228 -0.143 -2.41e+03 183 0 0 0 Target initStep - 1 0.233 -0.148 -2.41e+03 183 0.12 0.143 0.143 Target eBrem - 2 0.236 -0.15 -2.41e+03 178 0.0585 0.0573 0.201 Target eBrem - 3 0.325 -0.179 -2.41e+03 174 1.58 1.4 1.6 Target eBrem - 4 0.33 -0.179 -2.41e+03 146 0.0708 0.048 1.64 Target eBrem - 5 0.388 -0.189 -2.41e+03 144 0.687 0.566 2.21 Target eBrem - 6 0.401 -0.182 -2.41e+03 142 0.515 0.395 2.6 Target eBrem - 7 0.41 -0.185 -2.41e+03 141 0.448 0.382 2.99 Target eBrem - 8 0.416 -0.192 -2.41e+03 24.7 0.202 0.187 3.17 Target eBrem - 9 0.514 0.0395 -2.41e+03 7.79 1.27 1.08 4.26 Target eBrem - 10 0.495 0.00853 -2.41e+03 6.67 0.164 0.116 4.37 Target eBrem - 11 -0.199 -0.82 -2.4e+03 2.13 2.95 1.67 6.04 Target eBrem - 12 -0.278 -0.848 -2.4e+03 1.69 0.0875 0.0894 6.13 Target eBrem - 13 -0.499 -0.774 -2.4e+03 0.954 0.487 0.503 6.64 Target eBrem - 14 -0.543 -0.746 -2.4e+03 0.322 0.0769 0.106 6.74 Target eBrem - 15 -0.547 -0.738 -2.4e+03 0 0.322 0.165 6.91 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 564, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.543 -0.746 -2.4e+03 0.555 0 0 0 Target initStep - 1 -1.73 6.09 -2.42e+03 0 0.555 13.1 13.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 563, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.499 -0.774 -2.4e+03 0.246 0 0 0 Target initStep - 1 -1.68 0.391 -2.4e+03 0 0.246 1.66 1.66 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 562, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.278 -0.848 -2.4e+03 0.354 0 0 0 Target initStep - 1 -1.66 2.1 -2.41e+03 0.246 0.107 3.32 3.32 Target compt - 2 -1.57 2.32 -2.41e+03 0 0.246 0.885 4.21 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 561, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.199 -0.82 -2.4e+03 1.6 0 0 0 Target initStep - 1 -25 0.936 -2.43e+03 1.6 0 36.1 36.1 World Transportation - 2 -508 35.1 -2.94e+03 1.6 0 702 738 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 560, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.495 0.00853 -2.41e+03 0.955 0 0 0 Target initStep - 1 0.501 -0.482 -2.4e+03 0.619 0.335 4.8 4.8 Target compt - 2 0.607 0.255 -2.4e+03 0.619 0 1.18 5.99 Tracker Transportation - 3 345 2.38e+03 568 0.619 0 3.82e+03 3.82e+03 World Transportation - 4 426 2.94e+03 1.27e+03 0.619 0 908 4.73e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 559, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.514 0.0395 -2.41e+03 15.6 0 0 0 Target initStep - 1 0.559 -0.709 -2.4e+03 15.6 0 5.85 5.85 Tracker Transportation - 2 6.05 -91 -1.7e+03 15.6 0 706 712 Chamber Transportation - 3 7.62 -117 -1.5e+03 15.6 0 202 913 Tracker Transportation - 4 12.3 -194 -900 15.6 0 605 1.52e+03 Chamber Transportation - 5 13.9 -220 -700 15.6 0 202 1.72e+03 Tracker Transportation - 6 18.6 -297 -100 15.6 0 605 2.32e+03 Chamber Transportation - 7 20.2 -323 100 15.6 0 202 2.53e+03 Tracker Transportation - 8 24.9 -401 700 15.6 0 605 3.13e+03 Chamber Transportation - 9 26.5 -426 900 15.6 0 202 3.33e+03 Tracker Transportation - 10 31.2 -504 1.5e+03 15.6 0 605 3.94e+03 Chamber Transportation - 11 32.7 -530 1.7e+03 15.6 0 202 4.14e+03 Tracker Transportation - 12 38.2 -620 2.4e+03 15.6 0 706 4.85e+03 World Transportation - 13 42.5 -690 2.94e+03 15.6 0 544 5.39e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 558, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.416 -0.192 -2.41e+03 116 0 0 0 Target initStep - 1 0.738 -0.345 -2.4e+03 116 0 6.86 6.86 Tracker Transportation - 2 33.6 -16.1 -1.7e+03 116 0 701 708 Chamber Transportation - 3 43 -20.5 -1.5e+03 116 0 200 908 Tracker Transportation - 4 71.2 -34 -900 116 0 601 1.51e+03 Chamber Transportation - 5 80.6 -38.5 -700 116 0 200 1.71e+03 Tracker Transportation - 6 109 -52 -100 116 0 601 2.31e+03 Chamber Transportation - 7 118 -56.4 100 116 0 200 2.51e+03 Tracker Transportation - 8 146 -69.9 700 116 0 601 3.11e+03 Chamber Transportation - 9 156 -74.4 900 116 0 200 3.31e+03 Tracker Transportation - 10 184 -87.9 1.5e+03 116 0 601 3.91e+03 Chamber Transportation - 11 193 -92.3 1.7e+03 116 0 200 4.11e+03 Tracker Transportation - 12 226 -108 2.4e+03 116 0 701 4.81e+03 World Transportation - 13 251 -120 2.94e+03 116 0 541 5.35e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 557, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.41 -0.185 -2.41e+03 0.381 0 0 0 Target initStep - 1 0.634 -0.356 -2.4e+03 0 0.381 5.01 5.01 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 556, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.401 -0.182 -2.41e+03 2.1 0 0 0 Target initStep - 1 1.49 -0.617 -2.4e+03 2.1 0 7.51 7.51 Tracker Transportation - 2 104 -41.6 -1.7e+03 2.1 0 709 716 Chamber Transportation - 3 133 -53.3 -1.5e+03 2.1 0 202 919 Tracker Transportation - 4 221 -88.4 -900 2.1 0 607 1.53e+03 Chamber Transportation - 5 251 -100 -700 2.1 0 202 1.73e+03 Tracker Transportation - 6 339 -135 -100 2.1 0 607 2.34e+03 Chamber Transportation - 7 368 -147 100 2.1 0 202 2.54e+03 Tracker Transportation - 8 456 -182 700 2.1 0 607 3.15e+03 Chamber Transportation - 9 485 -194 900 2.1 0 202 3.35e+03 Tracker Transportation - 10 573 -229 1.5e+03 2.1 0 607 3.96e+03 Chamber Transportation - 11 603 -241 1.7e+03 2.1 0 202 4.16e+03 Tracker Transportation - 12 705 -282 2.4e+03 2.1 0 709 4.87e+03 World Transportation - 13 784 -313 2.94e+03 2.1 0 547 5.41e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 555, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.388 -0.189 -2.41e+03 0.506 0 0 0 Target initStep - 1 0.767 -0.0706 -2.4e+03 0.506 0 7.83 7.83 Tracker Transportation - 2 34.7 10.5 -1.7e+03 0.506 0 701 709 Chamber Transportation - 3 44.4 13.5 -1.5e+03 0.506 0 200 909 Tracker Transportation - 4 72.8 22.4 -913 0.306 0 588 1.5e+03 Tracker compt - 5 113 13.9 -900 0.306 0 42.6 1.54e+03 Chamber Transportation - 6 734 -120 -700 0.306 0 666 2.21e+03 Tracker Transportation - 7 2.35e+03 -468 -178 0.306 0 1.74e+03 3.94e+03 World Transportation - 8 2.94e+03 -594 10.5 0.306 0 629 4.57e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 565, Parent ID = 555 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 72.8 22.4 -913 0.2 0 0 0 Tracker initStep - 1 64.7 24.5 -900 0.197 0.00263 15.6 15.6 Chamber Transportation - 2 64.9 24.5 -897 0.194 0.00179 3.13 18.7 Chamber eIoni - 3 65 23.4 -897 0.185 0.0016 1.12 19.8 Chamber eIoni - 4 64.4 16.8 -899 0.177 0.00593 7.63 27.4 Chamber eIoni - 5 65.1 16.3 -900 0.176 0.000822 1.07 28.5 Tracker Transportation - 6 116 2.6 -916 0.157 0.0108 55.7 84.2 Tracker eIoni - 7 125 0.876 -919 0.153 0.00243 9.89 94.1 Tracker eIoni - 8 130 -1.39 -924 0.148 0.00192 7.24 101 Tracker eIoni - 9 138 -0.281 -931 0.145 0.0019 11 112 Tracker eIoni - 10 154 9.2 -950 0.135 0.00824 28.1 140 Tracker eIoni - 11 172 27.4 -992 0.118 0.0121 49 189 Tracker eIoni - 12 171 -5.27 -1.02e+03 0.0935 0.011 45.2 235 Tracker eIoni - 13 168 -29.9 -1.01e+03 0.0793 0.0124 26 261 Tracker eIoni - 14 166 -34.1 -1.02e+03 0.0751 0.00307 5.7 266 Tracker eIoni - 15 165 -36.3 -1.02e+03 0.0693 0.00126 3.29 270 Tracker eIoni - 16 164 -38 -1.02e+03 0.0623 0.00128 2.68 272 Tracker eIoni - 17 158 -51.8 -1.03e+03 0.054 0.00829 16.6 289 Tracker eIoni - 18 161 -62.6 -1.03e+03 0.0475 0.0065 13.2 302 Tracker eIoni - 19 165 -70 -1.02e+03 0.0429 0.00456 10.8 313 Tracker eIoni - 20 171 -68.9 -1.03e+03 0.0374 0.00551 9.26 322 Tracker eIoni - 21 172 -68.2 -1.03e+03 0.0353 0.000732 1.93 324 Tracker eIoni - 22 177 -65 -1.03e+03 0.0285 0.00672 6.94 331 Tracker eIoni - 23 181 -66.4 -1.03e+03 0.0224 0.00614 5.2 336 Tracker eIoni - 24 184 -66 -1.03e+03 0.018 0.00444 3.87 340 Tracker eIoni - 25 183 -67.9 -1.03e+03 0.0134 0.00457 3.06 343 Tracker eIoni - 26 181 -69.1 -1.03e+03 0.00986 0.00354 2.33 346 Tracker eIoni - 27 180 -68.6 -1.03e+03 0.00415 0.002 1.21 347 Tracker eIoni - 28 180 -68.4 -1.03e+03 0 0.00415 0.551 347 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 581, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 180 -68.6 -1.03e+03 0.00371 0 0 0 Tracker initStep - 1 180 -68.7 -1.03e+03 0 0.00371 0.454 0.454 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 580, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 172 -68.2 -1.03e+03 0.00142 0 0 0 Tracker initStep - 1 172 -68.2 -1.03e+03 0 0.00142 0.0957 0.0957 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 579, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 164 -38 -1.02e+03 0.00576 0 0 0 Tracker initStep - 1 164 -38.3 -1.02e+03 0 0.00576 0.985 0.985 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 578, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 165 -36.3 -1.02e+03 0.00452 0 0 0 Tracker initStep - 1 165 -36.5 -1.02e+03 0 0.00452 0.642 0.642 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 577, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 166 -34.1 -1.02e+03 0.00116 0 0 0 Tracker initStep - 1 166 -34.1 -1.02e+03 0 0.00116 0.0706 0.0706 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 576, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 168 -29.9 -1.01e+03 0.00182 0 0 0 Tracker initStep - 1 168 -29.9 -1.01e+03 0 0.00182 0.14 0.14 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 575, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 171 -5.27 -1.02e+03 0.0135 0 0 0 Tracker initStep - 1 169 -6.13 -1.02e+03 0.0086 0.00485 2.34 2.34 Tracker eIoni - 2 169 -7.67 -1.02e+03 0.00412 0.00448 1.61 3.96 Tracker eIoni - 3 169 -7.75 -1.02e+03 0 0.00412 0.545 4.5 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 574, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 172 27.4 -992 0.00484 0 0 0 Tracker initStep - 1 171 27.6 -992 0 0.00484 0.723 0.723 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 573, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 154 9.2 -950 0.00138 0 0 0 Tracker initStep - 1 154 9.16 -950 0 0.00138 0.0911 0.0911 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 572, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 138 -0.281 -931 0.00115 0 0 0 Tracker initStep - 1 138 -0.281 -931 0 0.00115 0.0695 0.0695 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 571, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 130 -1.39 -924 0.00351 0 0 0 Tracker initStep - 1 130 -1.56 -924 0 0.00351 0.412 0.412 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 570, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 125 0.876 -919 0.0018 0 0 0 Tracker initStep - 1 125 0.89 -919 0 0.0018 0.137 0.137 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 569, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 116 2.6 -916 0.00801 0 0 0 Tracker initStep - 1 117 2.21 -915 0.00336 0.00464 1.51 1.51 Tracker eIoni - 2 117 2.32 -915 0 0.00336 0.383 1.89 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 568, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 64.4 16.8 -899 0.00182 0 0 0 Chamber initStep - 1 64.4 16.8 -899 0 0.00182 0.0916 0.0916 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 567, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 65 23.4 -897 0.0074 0 0 0 Chamber initStep - 1 64.9 23.4 -897 0 0.0074 0.74 0.74 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 566, Parent ID = 565 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 64.9 24.5 -897 0.00154 0 0 0 Chamber initStep - 1 64.9 24.5 -897 0 0.00154 0.0729 0.0729 Chamber eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 554, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.33 -0.179 -2.41e+03 28.8 0 0 0 Target initStep - 1 0.592 -0.195 -2.41e+03 0 0 3.15 3.15 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 582, Parent ID = 554 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.592 -0.195 -2.41e+03 5.12 0 0 0 Target initStep - 1 0.0625 1.87 -2.4e+03 2.19 2.92 2.25 2.25 Target eIoni - 2 0.59 1.24 -2.4e+03 0.306 1.89 1.49 3.74 Target eIoni - 3 0.593 1.24 -2.4e+03 0 0.306 0.154 3.89 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 553, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.325 -0.179 -2.41e+03 1.51 0 0 0 Target initStep - 1 1.09 -0.186 -2.4e+03 1.51 0 8.46 8.46 Tracker Transportation - 2 64.7 -0.719 -1.7e+03 1.51 0 703 711 Chamber Transportation - 3 82.8 -0.871 -1.5e+03 1.51 0 201 912 Tracker Transportation - 4 137 -1.33 -900 1.51 0 602 1.51e+03 Chamber Transportation - 5 155 -1.48 -700 1.51 0 201 1.72e+03 Tracker Transportation - 6 210 -1.94 -100 1.51 0 602 2.32e+03 Chamber Transportation - 7 228 -2.09 100 1.51 0 201 2.52e+03 Tracker Transportation - 8 283 -2.55 700 1.51 0 602 3.12e+03 Chamber Transportation - 9 301 -2.7 900 1.51 0 201 3.32e+03 Tracker Transportation - 10 355 -3.16 1.5e+03 1.51 0 602 3.92e+03 Chamber Transportation - 11 373 -3.31 1.7e+03 1.51 0 201 4.13e+03 Tracker Transportation - 12 437 -3.84 2.4e+03 1.51 0 703 4.83e+03 World Transportation - 13 486 -4.25 2.94e+03 1.51 0 542 5.37e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 552, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.236 -0.15 -2.41e+03 5.22 0 0 0 Target initStep - 1 0.767 -0.542 -2.4e+03 5.22 0 9.84 9.84 Tracker Transportation - 2 38.6 -28.5 -1.7e+03 5.22 0 702 711 Chamber Transportation - 3 49.5 -36.5 -1.5e+03 5.22 0 200 912 Tracker Transportation - 4 81.9 -60.5 -900 5.22 0 601 1.51e+03 Chamber Transportation - 5 92.8 -68.5 -700 5.22 0 200 1.71e+03 Tracker Transportation - 6 125 -92.5 -100 5.22 0 601 2.32e+03 Chamber Transportation - 7 136 -100 100 5.22 0 200 2.52e+03 Tracker Transportation - 8 169 -124 700 5.22 0 601 3.12e+03 Chamber Transportation - 9 179 -132 900 5.22 0 200 3.32e+03 Tracker Transportation - 10 212 -156 1.5e+03 5.22 0 601 3.92e+03 Chamber Transportation - 11 223 -164 1.7e+03 5.22 0 200 4.12e+03 Tracker Transportation - 12 260 -192 2.4e+03 5.22 0 702 4.82e+03 World Transportation - 13 290 -214 2.94e+03 5.22 0 541 5.36e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 551, Parent ID = 358 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.233 -0.148 -2.41e+03 0.455 0 0 0 Target initStep - 1 0.475 -0.41 -2.4e+03 0.436 0.019 6.42 6.42 Target compt - 2 0.265 -0.406 -2.4e+03 0.241 0.195 0.779 7.2 Target compt - 3 0.371 -0.368 -2.4e+03 0 0.241 0.118 7.32 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 550, Parent ID = 360 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.4 -0.421 -2.41e+03 0.196 0 0 0 Target initStep - 1 -0.886 -1.29 -2.41e+03 0 0.196 1.17 1.17 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 549, Parent ID = 360 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.415 -0.148 -2.41e+03 0.551 0 0 0 Target initStep - 1 -11.9 -6.14 -2.42e+03 0 0.551 13.6 13.6 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 548, Parent ID = 360 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.299 0.163 -2.41e+03 0.145 0 0 0 Target initStep - 1 -0.488 -0.183 -2.41e+03 0 0.145 0.657 0.657 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 547, Parent ID = 360 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.16 -0.0279 -2.41e+03 1.05 0 0 0 Target initStep - 1 -3.1 4.51 -2.4e+03 1.05 0 14.4 14.4 Tracker Transportation - 2 -370 515 -900 1.05 0 1.63e+03 1.64e+03 Chamber Transportation - 3 -419 583 -700 1.05 0 217 1.86e+03 Tracker Transportation - 4 -566 787 -100 1.05 0 651 2.51e+03 Chamber Transportation - 5 -615 856 100 1.05 0 217 2.73e+03 Tracker Transportation - 6 -762 1.06e+03 700 1.05 0 651 3.38e+03 Chamber Transportation - 7 -811 1.13e+03 900 1.05 0 217 3.59e+03 Tracker Transportation - 8 -958 1.33e+03 1.5e+03 1.05 0 651 4.24e+03 Chamber Transportation - 9 -1.01e+03 1.4e+03 1.7e+03 1.05 0 217 4.46e+03 Tracker Transportation - 10 -1.18e+03 1.64e+03 2.4e+03 1.05 0 759 5.22e+03 World Transportation - 11 -1.31e+03 1.82e+03 2.94e+03 1.05 0 586 5.81e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 546, Parent ID = 360 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.136 -0.0872 -2.41e+03 6.72 0 0 0 Target initStep - 1 0.721 -0.225 -2.41e+03 0 0.088 6.54 6.54 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 584, Parent ID = 546 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.721 -0.225 -2.41e+03 6.64 0 0 0 Target initStep - 1 0.0711 -2.49 -2.41e+03 3.82 2.81 2.54 2.54 Target eIoni - 2 -0.114 -1.27 -2.41e+03 1.8 2.02 1.84 4.38 Target eBrem - 3 -0.234 -0.918 -2.41e+03 0.345 1.46 1.32 5.7 Target eIoni - 4 -0.232 -0.928 -2.41e+03 0 0.345 0.182 5.88 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 545, Parent ID = 362 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.329 0.275 -2.41e+03 5.73 0 0 0 Target initStep - 1 10.2 8.18 -2.41e+03 0 0 12.9 12.9 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 585, Parent ID = 545 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10.2 8.18 -2.41e+03 2.4 0 0 0 Target initStep - 1 10.5 7.8 -2.41e+03 0.339 1.36 1.3 1.3 Target eBrem - 2 10.5 7.8 -2.41e+03 0 0.339 0.178 1.48 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 587, Parent ID = 585 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10.5 7.8 -2.41e+03 0.708 0 0 0 Target initStep - 1 14.6 2.16 -2.41e+03 0.194 0.514 7.06 7.06 Target compt - 2 13.9 4.81 -2.41e+03 0 0.194 2.85 9.91 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 544, Parent ID = 364 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.62 1.72 -2.41e+03 0.319 0 0 0 Target initStep - 1 6.36 3.65 -2.42e+03 0.283 0.036 5.78 5.78 Target compt - 2 7.45 3.26 -2.42e+03 0 0.283 1.3 7.09 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 543, Parent ID = 364 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.64 1.61 -2.41e+03 1.85 0 0 0 Target initStep - 1 -5.46 6.99 -2.41e+03 0.638 0 8.92 8.92 Target compt - 2 -5.57 6.95 -2.41e+03 0.244 0.394 0.123 9.04 Target compt - 3 -5.41 7.91 -2.41e+03 0 0.244 1.08 10.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 588, Parent ID = 543 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -5.46 6.99 -2.41e+03 1.22 0 0 0 Target initStep - 1 -5.37 7.09 -2.41e+03 0.465 0.752 0.497 0.497 Target eBrem - 2 -5.37 7.07 -2.41e+03 0 0.465 0.276 0.773 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 542, Parent ID = 364 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.35 0.942 -2.41e+03 2.4 0 0 0 Target initStep - 1 3.62 2.66 -2.41e+03 1.08 0 3.1 3.1 Target compt - 2 5.34 14.2 -2.4e+03 1.08 0 17 20.1 Tracker Transportation - 3 358 2.37e+03 133 1.08 0 3.48e+03 3.5e+03 World Transportation - 4 442 2.94e+03 742 1.08 0 836 4.34e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 589, Parent ID = 542 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.62 2.66 -2.41e+03 1.32 0 0 0 Target initStep - 1 3.56 3.16 -2.41e+03 0.642 0.678 0.638 0.638 Target eBrem - 2 3.54 3.17 -2.41e+03 0 0.642 0.423 1.06 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 541, Parent ID = 364 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.573 0.643 -2.41e+03 0.881 0 0 0 Target initStep - 1 0.785 0.724 -2.41e+03 0 0.881 0.412 0.412 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 540, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 7.13 3.74 -2.41e+03 0.566 0 0 0 Target initStep - 1 9 17.5 -2.4e+03 0.566 0 16.4 16.4 Tracker Transportation - 2 329 2.38e+03 -914 0.566 0 2.81e+03 2.82e+03 World Transportation - 3 406 2.94e+03 -559 0.566 0 669 3.49e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 539, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.63 3.8 -2.41e+03 0.396 0 0 0 Target initStep - 1 5.27 1.9 -2.4e+03 0 0.396 4.95 4.95 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 538, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.35 1.87 -2.41e+03 0.245 0 0 0 Target initStep - 1 5.73 2.11 -2.41e+03 0 0.245 0.601 0.601 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 537, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 4.59 1.27 -2.41e+03 0.194 0 0 0 Target initStep - 1 4.8 3.06 -2.41e+03 0 0.194 2.54 2.54 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 536, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 4.67 1.05 -2.41e+03 0.474 0 0 0 Target initStep - 1 4.53 3.77 -2.41e+03 0.214 0.26 3.07 3.07 Target compt - 2 4.44 3.74 -2.41e+03 0 0.214 0.0988 3.17 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 535, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.91 0.999 -2.41e+03 1.52 0 0 0 Target initStep - 1 8.15 3.92 -2.41e+03 1.08 0.443 5.24 5.24 Target compt - 2 14.1 7.97 -2.41e+03 0.554 0.527 9.47 14.7 Target compt - 3 14.3 8.23 -2.41e+03 0.178 0.376 0.377 15.1 Target compt - 4 13.8 7.83 -2.41e+03 0 0.178 0.613 15.7 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 534, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.74 1.01 -2.41e+03 0.833 0 0 0 Target initStep - 1 17.6 3.05 -2.41e+03 0.363 0.469 14 14 Target compt - 2 17.7 3.32 -2.41e+03 0 0.363 0.457 14.5 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 533, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.36 0.94 -2.41e+03 0.418 0 0 0 Target initStep - 1 6.88 2.02 -2.41e+03 0 0.418 3.78 3.78 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 532, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.99 0.912 -2.41e+03 0.233 0 0 0 Target initStep - 1 3.98 0.809 -2.41e+03 0 0.233 1.01 1.01 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 531, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.75 0.963 -2.41e+03 1.5 0 0 0 Target initStep - 1 13.3 -0.972 -2.41e+03 1 0.504 10.7 10.7 Target compt - 2 21.3 0.214 -2.4e+03 0.545 0.456 9.03 19.8 Target compt - 3 24.8 3.32 -2.41e+03 0.545 0 4.89 24.6 World Transportation - 4 1.21e+03 1.07e+03 -2.94e+03 0.545 0 1.68e+03 1.7e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 530, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.71 0.971 -2.41e+03 0.905 0 0 0 Target initStep - 1 5.61 0.782 -2.41e+03 0 0.905 2.9 2.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 529, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.43 0.941 -2.41e+03 0.284 0 0 0 Target initStep - 1 3.71 0.953 -2.41e+03 0 0.284 1.36 1.36 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 528, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.87 0.944 -2.41e+03 0.22 0 0 0 Target initStep - 1 3.48 1.37 -2.41e+03 0 0.22 1.85 1.85 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 527, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.29 0.667 -2.41e+03 0.277 0 0 0 Target initStep - 1 1.42 0.749 -2.41e+03 0 0.277 0.185 0.185 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 526, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.538 -0.302 -2.41e+03 8.25 0 0 0 Target initStep - 1 6.7 8.03 -2.41e+03 0 0 10.4 10.4 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 590, Parent ID = 526 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.7 8.03 -2.41e+03 4.17 0 0 0 Target initStep - 1 6.88 8.21 -2.41e+03 3.13 0.407 0.329 0.329 Target eBrem - 2 5.83 8.16 -2.41e+03 0.0446 3.09 1.79 2.12 Target eIoni - 3 5.83 8.16 -2.41e+03 0 0.0446 0.00741 2.13 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 592, Parent ID = 590 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.88 8.21 -2.41e+03 0.637 0 0 0 Target initStep - 1 7.19 10.3 -2.41e+03 0.569 0.0677 2.48 2.48 Target compt - 2 7.6 19.3 -2.41e+03 0 0.569 9.07 11.5 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 525, Parent ID = 365 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0893 -0.141 -2.41e+03 4.32 0 0 0 Target initStep - 1 1.4 -0.56 -2.4e+03 4.32 0 10.4 10.4 Tracker Transportation - 2 90.7 -29.1 -1.7e+03 4.32 0 706 717 Chamber Transportation - 3 116 -37.2 -1.5e+03 4.32 0 202 918 Tracker Transportation - 4 193 -61.7 -900 4.32 0 605 1.52e+03 Chamber Transportation - 5 218 -69.8 -700 4.32 0 202 1.73e+03 Tracker Transportation - 6 295 -94.3 -100 4.32 0 605 2.33e+03 Chamber Transportation - 7 320 -102 100 4.32 0 202 2.53e+03 Tracker Transportation - 8 397 -127 700 4.32 0 605 3.14e+03 Chamber Transportation - 9 423 -135 900 4.32 0 202 3.34e+03 Tracker Transportation - 10 499 -159 1.5e+03 4.32 0 605 3.95e+03 Chamber Transportation - 11 525 -168 1.7e+03 4.32 0 202 4.15e+03 Tracker Transportation - 12 614 -196 2.4e+03 4.32 0 706 4.85e+03 World Transportation - 13 683 -218 2.94e+03 4.32 0 545 5.4e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 498, Parent ID = 406 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.44 -5.8 -2.4e+03 0.241 0 0 0 Target initStep - 1 -2.36 -7.6 -2.4e+03 0 0.241 2.43 2.43 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 408, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.24 -5.37 -2.4e+03 0.511 0 0 0 Target initStep - 1 -1.77 -7.61 -2.4e+03 0.506 0.00538 2.31 2.31 Target compt - 2 -1.98 -8.87 -2.4e+03 0.506 0 1.31 3.62 Tracker Transportation - 3 -402 -2.37e+03 -1.9e+03 0.506 0 2.44e+03 2.45e+03 World Transportation - 4 -499 -2.94e+03 -1.77e+03 0.506 0 595 3.04e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 407, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.24 -5.37 -2.4e+03 0.511 0 0 0 Target initStep - 1 -0.808 -3.53 -2.4e+03 0 0.511 1.9 1.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 405, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.961 -5.38 -2.4e+03 0.0955 0 0 0 Target initStep - 1 -0.972 -5.39 -2.4e+03 0 0.0955 0.019 0.019 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 404, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.453 -4.52 -2.4e+03 1.27 0 0 0 Target initStep - 1 -1.57 -11.3 -2.4e+03 1.27 0 6.89 6.89 Tracker Transportation - 2 -389 -2.37e+03 -2.21e+03 1.27 0 2.4e+03 2.4e+03 World Transportation - 3 -483 -2.94e+03 -2.17e+03 1.27 0 581 2.98e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 403, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.485 -3.78 -2.4e+03 0.422 0 0 0 Target initStep - 1 -0.702 -6.67 -2.4e+03 0.422 0 2.93 2.93 Tracker Transportation - 2 -180 -2.39e+03 -2.07e+03 0.422 0 2.42e+03 2.42e+03 World Transportation - 3 -221 -2.94e+03 -1.99e+03 0.422 0 554 2.97e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 402, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.113 -2.97 -2.4e+03 0.138 0 0 0 Target initStep - 1 -0.138 -3.3 -2.4e+03 0 0.138 0.372 0.372 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 401, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0858 -2.77 -2.4e+03 0.213 0 0 0 Target initStep - 1 -0.0973 -3.14 -2.4e+03 0 0.213 0.392 0.392 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 400, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.207 -2.07 -2.4e+03 1.38 0 0 0 Target initStep - 1 0.016 -3.04 -2.4e+03 1.38 0 2.08 2.08 Tracker Transportation - 2 -240 -1.22e+03 -100 1.38 0 2.61e+03 2.61e+03 Chamber Transportation - 3 -255 -1.3e+03 48.1 1.38 0 168 2.78e+03 Tracker Transportation - 4 -323 -1.64e+03 700 1.38 0 740 3.52e+03 Chamber Transportation - 5 -344 -1.74e+03 900 1.38 0 227 3.75e+03 Tracker Transportation - 6 -407 -2.06e+03 1.5e+03 1.38 0 681 4.43e+03 Chamber Transportation - 7 -428 -2.17e+03 1.7e+03 1.38 0 227 4.66e+03 Tracker Transportation - 8 -465 -2.35e+03 2.06e+03 1.38 0 404 5.06e+03 World Transportation - 9 -557 -2.82e+03 2.94e+03 1.38 0 1e+03 6.07e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 399, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.155 -1.6 -2.4e+03 2.81 0 0 0 Target initStep - 1 0.402 -2.86 -2.4e+03 2.81 0 2.6 2.6 Tracker Transportation - 2 251 -1.29e+03 -100 2.81 0 2.65e+03 2.65e+03 Chamber Transportation - 3 252 -1.3e+03 -88.8 2.81 0 12.9 2.66e+03 Tracker Transportation - 4 338 -1.74e+03 700 2.81 0 908 3.57e+03 Chamber Transportation - 5 356 -1.83e+03 859 2.81 0 183 3.75e+03 Tracker Transportation - 6 425 -2.18e+03 1.5e+03 2.81 0 738 4.49e+03 Chamber Transportation - 7 447 -2.3e+03 1.7e+03 2.81 0 230 4.72e+03 Tracker Transportation - 8 459 -2.36e+03 1.81e+03 2.81 0 122 4.84e+03 World Transportation - 9 573 -2.94e+03 2.85e+03 2.81 0 1.2e+03 6.05e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 398, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.138 -1.52 -2.4e+03 0.115 0 0 0 Target initStep - 1 0.178 -1.63 -2.4e+03 0 0.115 0.208 0.208 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 397, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.099 -1.4 -2.4e+03 0.188 0 0 0 Target initStep - 1 0.114 -1.45 -2.4e+03 0 0.188 0.152 0.152 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 396, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0748 -1.3 -2.4e+03 4.08 0 0 0 Target initStep - 1 0.8 -2.92 -2.4e+03 4.08 0 3.48 3.48 Tracker Transportation - 2 753 -1.69e+03 700 4.08 0 3.61e+03 3.61e+03 Chamber Transportation - 3 759 -1.7e+03 723 4.08 0 27.2 3.64e+03 Tracker Transportation - 4 947 -2.12e+03 1.5e+03 4.08 0 903 4.54e+03 Chamber Transportation - 5 979 -2.19e+03 1.63e+03 4.08 0 153 4.69e+03 World Transportation - 6 1.3e+03 -2.9e+03 2.94e+03 4.08 0 1.52e+03 6.22e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 395, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0923 -0.902 -2.4e+03 0.301 0 0 0 Target initStep - 1 0.524 -1.79 -2.4e+03 0 0.301 2.05 2.05 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 394, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.269 -0.739 -2.4e+03 0.403 0 0 0 Target initStep - 1 0.557 -1.87 -2.4e+03 0.403 0 4.44 4.44 Tracker Transportation - 2 138 -189 -1.7e+03 0.403 0 737 742 Chamber Transportation - 3 141 -194 -1.68e+03 0.403 0 19.5 761 Tracker Transportation - 4 294 -403 -900 0.403 0 823 1.58e+03 Chamber Transportation - 5 334 -456 -700 0.403 0 211 1.8e+03 Tracker Transportation - 6 451 -617 -100 0.403 0 632 2.43e+03 Chamber Transportation - 7 490 -670 100 0.403 0 211 2.64e+03 Tracker Transportation - 8 579 -791 551 0.272 0 476 3.11e+03 Tracker compt - 9 777 -587 700 0.272 0 321 3.43e+03 Chamber Transportation - 10 1.04e+03 -312 900 0.272 0 432 3.87e+03 Tracker Transportation - 11 1.84e+03 514 1.5e+03 0.272 0 1.3e+03 5.16e+03 Chamber Transportation - 12 2.11e+03 789 1.7e+03 0.272 0 432 5.6e+03 Tracker Transportation - 13 2.22e+03 904 1.78e+03 0.272 0 181 5.78e+03 World Transportation - 14 2.94e+03 1.64e+03 2.32e+03 0.272 0 1.16e+03 6.94e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 593, Parent ID = 394 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 579 -791 551 0.13 0 0 0 Tracker initStep - 1 577 -815 600 0.112 0.0182 56.8 56.8 Tracker eIoni - 2 577 -815 600 0.112 2.14e-05 0.323 57.1 Tracker eIoni - 3 603 -821 626 0.0986 0.0121 37.5 94.6 Tracker eIoni - 4 630 -836 643 0.0878 0.0108 35.6 130 Tracker eIoni - 5 654 -824 643 0.0759 0.0119 29.3 160 Tracker eIoni - 6 670 -809 636 0.0644 0.0115 23 183 Tracker eIoni - 7 682 -803 637 0.0557 0.0077 15.5 198 Tracker eIoni - 8 683 -802 637 0.0525 0.00172 1.48 200 Tracker eIoni - 9 690 -802 641 0.0467 0.00465 7.66 207 Tracker eIoni - 10 698 -799 635 0.0396 0.00713 10.5 218 Tracker eIoni - 11 704 -797 633 0.0341 0.00547 8.2 226 Tracker eIoni - 12 708 -793 634 0.0292 0.00487 6.62 233 Tracker eIoni - 13 713 -793 636 0.0237 0.00557 5.37 238 Tracker eIoni - 14 716 -790 638 0.0207 0.00295 4.12 242 Tracker eIoni - 15 715 -787 638 0.0178 0.00288 3.55 246 Tracker eIoni - 16 713 -786 637 0.0135 0.00434 3.03 249 Tracker eIoni - 17 711 -787 638 0.00782 0.00567 2.35 251 Tracker eIoni - 18 711 -787 638 0.00331 0.00211 0.928 252 Tracker eIoni - 19 711 -787 638 0 0.00331 0.372 252 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 598, Parent ID = 593 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 711 -787 638 0.0024 0 0 0 Tracker initStep - 1 711 -787 638 0 0.0024 0.217 0.217 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 597, Parent ID = 593 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 690 -802 641 0.0012 0 0 0 Tracker initStep - 1 690 -802 641 0 0.0012 0.0738 0.0738 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 596, Parent ID = 593 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 683 -802 637 0.00143 0 0 0 Tracker initStep - 1 683 -802 637 0 0.00143 0.0967 0.0967 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 595, Parent ID = 593 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 682 -803 637 0.00104 0 0 0 Tracker initStep - 1 682 -803 637 0 0.00104 0.0603 0.0603 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 594, Parent ID = 593 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 603 -821 626 0.00133 0 0 0 Tracker initStep - 1 603 -821 626 0 0.00133 0.0866 0.0866 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 393, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.279 -0.62 -2.4e+03 0.383 0 0 0 Target initStep - 1 -0.0836 -2.3 -2.4e+03 0.383 0 4.97 4.97 Tracker Transportation - 2 62.7 -540 -900 0.383 0 1.59e+03 1.6e+03 Chamber Transportation - 3 71.1 -612 -700 0.383 0 213 1.81e+03 Tracker Transportation - 4 96.2 -827 -100 0.383 0 638 2.45e+03 Chamber Transportation - 5 105 -899 100 0.383 0 213 2.66e+03 Tracker Transportation - 6 130 -1.11e+03 700 0.383 0 638 3.3e+03 Chamber Transportation - 7 138 -1.19e+03 900 0.383 0 213 3.51e+03 Tracker Transportation - 8 163 -1.4e+03 1.5e+03 0.383 0 638 4.15e+03 Chamber Transportation - 9 172 -1.47e+03 1.7e+03 0.383 0 213 4.36e+03 Tracker Transportation - 10 201 -1.72e+03 2.4e+03 0.383 0 744 5.11e+03 World Transportation - 11 224 -1.92e+03 2.94e+03 0.383 0 574 5.68e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 392, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.321 -0.428 -2.41e+03 0.0969 0 0 0 Target initStep - 1 -0.326 -0.516 -2.4e+03 0 0.0969 0.485 0.485 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 391, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.382 -0.356 -2.41e+03 0.217 0 0 0 Target initStep - 1 -0.104 -0.805 -2.4e+03 0 0.217 2.08 2.08 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 390, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.382 -0.355 -2.41e+03 1.63 0 0 0 Target initStep - 1 -0.012 -1.7 -2.4e+03 1.63 0 5.79 5.79 Tracker Transportation - 2 46.1 -169 -1.7e+03 1.63 0 721 727 Chamber Transportation - 3 59.3 -217 -1.5e+03 1.63 0 206 933 Tracker Transportation - 4 98.8 -360 -900 1.63 0 618 1.55e+03 Chamber Transportation - 5 112 -408 -700 1.63 0 206 1.76e+03 Tracker Transportation - 6 152 -551 -100 1.63 0 618 2.38e+03 Chamber Transportation - 7 165 -599 100 1.63 0 206 2.58e+03 Tracker Transportation - 8 204 -743 700 1.63 0 618 3.2e+03 Chamber Transportation - 9 217 -791 900 1.63 0 206 3.41e+03 Tracker Transportation - 10 257 -934 1.5e+03 1.63 0 618 4.02e+03 Chamber Transportation - 11 270 -982 1.7e+03 1.63 0 206 4.23e+03 Tracker Transportation - 12 316 -1.15e+03 2.4e+03 1.63 0 721 4.95e+03 World Transportation - 13 352 -1.28e+03 2.94e+03 1.63 0 556 5.51e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 389, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.406 -0.26 -2.41e+03 0.735 0 0 0 Target initStep - 1 -0.399 -0.313 -2.41e+03 0.247 0.488 0.181 0.181 Target compt - 2 -3.66 -1.89 -2.41e+03 0 0.247 4.12 4.3 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 388, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.0656 -0.00118 -2.41e+03 0.265 0 0 0 Target initStep - 1 -0.135 -0.00272 -2.41e+03 0 0.265 0.338 0.338 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 387, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.015 0.042 -2.41e+03 2.97 0 0 0 Target initStep - 1 -1.23 -0.104 -2.4e+03 2.97 0 8.01 8.01 Tracker Transportation - 2 -111 -13 -1.7e+03 2.97 0 709 717 Chamber Transportation - 3 -143 -16.7 -1.5e+03 2.97 0 202 919 Tracker Transportation - 4 -237 -27.8 -900 2.97 0 607 1.53e+03 Chamber Transportation - 5 -268 -31.5 -700 2.97 0 202 1.73e+03 Tracker Transportation - 6 -362 -42.6 -100 2.97 0 607 2.34e+03 Chamber Transportation - 7 -394 -46.3 100 2.97 0 202 2.54e+03 Tracker Transportation - 8 -488 -57.4 700 2.97 0 607 3.15e+03 Chamber Transportation - 9 -519 -61.1 900 2.97 0 202 3.35e+03 Tracker Transportation - 10 -613 -72.2 1.5e+03 2.97 0 607 3.96e+03 Chamber Transportation - 11 -645 -75.9 1.7e+03 2.97 0 202 4.16e+03 Tracker Transportation - 12 -755 -88.8 2.4e+03 2.97 0 709 4.87e+03 World Transportation - 13 -840 -98.8 2.94e+03 2.97 0 547 5.41e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 386, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.288 -0.142 -2.41e+03 3.91 0 0 0 Target initStep - 1 -0.776 0.956 -2.4e+03 3.91 0 9.32 9.32 Tracker Transportation - 2 -81.7 84.5 -1.7e+03 3.91 0 710 719 Chamber Transportation - 3 -105 108 -1.5e+03 3.91 0 203 922 Tracker Transportation - 4 -174 180 -900 3.91 0 608 1.53e+03 Chamber Transportation - 5 -197 204 -700 3.91 0 203 1.73e+03 Tracker Transportation - 6 -267 275 -100 3.91 0 608 2.34e+03 Chamber Transportation - 7 -290 299 100 3.91 0 203 2.54e+03 Tracker Transportation - 8 -359 371 700 3.91 0 608 3.15e+03 Chamber Transportation - 9 -382 395 900 3.91 0 203 3.35e+03 Tracker Transportation - 10 -452 466 1.5e+03 3.91 0 608 3.96e+03 Chamber Transportation - 11 -475 490 1.7e+03 3.91 0 203 4.17e+03 Tracker Transportation - 12 -556 574 2.4e+03 3.91 0 710 4.88e+03 World Transportation - 13 -618 638 2.94e+03 3.91 0 547 5.42e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 385, Parent ID = 359 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.296 -0.143 -2.41e+03 13.4 0 0 0 Target initStep - 1 0.0183 0.0415 -2.4e+03 0 0 6.52 6.52 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 599, Parent ID = 385 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0183 0.0415 -2.4e+03 6.28 0 0 0 Target initStep - 1 0.339 0.638 -2.4e+03 5.36 0.915 0.955 0.955 Target msc - 2 0.0141 0.789 -2.4e+03 4.93 0.432 0.461 1.42 Target msc - 3 0.0386 0.856 -2.4e+03 3.18 0.064 0.0729 1.49 Target eBrem - 4 0.114 1.13 -2.4e+03 2.42 0.49 0.431 1.92 Target eBrem - 5 0.00357 1.51 -2.4e+03 1.88 0.545 0.481 2.4 Target msc - 6 -0.0485 1.64 -2.4e+03 0 1.88 1.36 3.76 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 602, Parent ID = 599 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.114 1.13 -2.4e+03 0.266 0 0 0 Target initStep - 1 -0.666 1.39 -2.4e+03 0 0.266 1.56 1.56 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 601, Parent ID = 599 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0386 0.856 -2.4e+03 1.69 0 0 0 Target initStep - 1 1.27 6.84 -2.4e+03 1.69 0 6.44 6.44 Tracker Transportation - 2 485 2.35e+03 -1.61e+03 1.69 0 2.52e+03 2.53e+03 World Transportation - 3 607 2.94e+03 -1.41e+03 1.69 0 634 3.16e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 384, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.12 -3.86 -2.41e+03 0.511 0 0 0 Target initStep - 1 4.3 -7.19 -2.4e+03 0.311 0.2 6.08 6.08 Target compt - 2 4.22 -7.71 -2.4e+03 0 0.311 0.53 6.61 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 383, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.12 -3.86 -2.41e+03 0.511 0 0 0 Target initStep - 1 -0.198 -0.313 -2.41e+03 0.466 0.0453 6.46 6.46 Target compt - 2 -1.48 0.065 -2.41e+03 0 0.466 2.19 8.65 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 382, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.747 -4 -2.41e+03 1.46 0 0 0 Target initStep - 1 1.63 -10.6 -2.44e+03 0 0.088 35.8 35.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 603, Parent ID = 382 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.63 -10.6 -2.44e+03 1.38 0 0 0 Target initStep - 1 1.34 -11.1 -2.44e+03 0.281 1.1 1.05 1.05 Target eIoni - 2 1.34 -11.1 -2.44e+03 0 0.281 0.136 1.19 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 381, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.606 -3.6 -2.41e+03 0.103 0 0 0 Target initStep - 1 0.541 -3.79 -2.41e+03 0 0.103 0.213 0.213 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 380, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.615 -3.56 -2.41e+03 4.53 0 0 0 Target initStep - 1 -2.55 -24.9 -2.42e+03 4.53 0 23.1 23.1 World Transportation - 2 -201 -1.36e+03 -2.94e+03 4.53 0 1.45e+03 1.47e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 379, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.622 -3.52 -2.41e+03 0.493 0 0 0 Target initStep - 1 0.398 -6.06 -2.41e+03 0.288 0.205 2.75 2.75 Target compt - 2 0.602 -6.32 -2.41e+03 0 0.288 0.443 3.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 377, Parent ID = 361 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.848 -1.8 -2.41e+03 3.97 0 0 0 Target initStep - 1 0.124 -6.22 -2.4e+03 3.97 0 10.7 10.7 Tracker Transportation - 2 151 -691 -900 3.97 0 1.66e+03 1.67e+03 Chamber Transportation - 3 166 -762 -744 3.97 0 172 1.84e+03 Tracker Transportation - 4 231 -1.06e+03 -100 3.97 0 711 2.55e+03 Chamber Transportation - 5 251 -1.15e+03 100 3.97 0 221 2.77e+03 Tracker Transportation - 6 311 -1.42e+03 700 3.97 0 662 3.43e+03 Chamber Transportation - 7 331 -1.51e+03 900 3.97 0 221 3.65e+03 Tracker Transportation - 8 391 -1.79e+03 1.5e+03 3.97 0 662 4.32e+03 Chamber Transportation - 9 411 -1.88e+03 1.7e+03 3.97 0 221 4.54e+03 Tracker Transportation - 10 481 -2.2e+03 2.4e+03 3.97 0 773 5.31e+03 World Transportation - 11 536 -2.44e+03 2.94e+03 3.97 0 596 5.91e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 376, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.31 -0.00585 -2.4e+03 0.511 0 0 0 Target initStep - 1 -0.731 8.9 -2.41e+03 0 0.511 10.1 10.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 375, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.31 -0.00585 -2.4e+03 0.511 0 0 0 Target initStep - 1 2.71 -6.07 -2.4e+03 0 0.511 6.86 6.86 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 374, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.23 -0.0425 -2.4e+03 12.5 0 0 0 Target initStep - 1 2.43 0.569 -2.4e+03 0 0 2.16 2.16 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 604, Parent ID = 374 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.43 0.569 -2.4e+03 7.14 0 0 0 Target initStep - 1 2.46 1.07 -2.4e+03 6.07 1.06 1.1 1.1 Target msc - 2 2.38 0.999 -2.4e+03 5.61 0.467 0.506 1.61 Target msc - 3 2.36 1.02 -2.4e+03 5.33 0.1 0.105 1.71 Target eBrem - 4 2.55 0.897 -2.4e+03 5.01 0.216 0.259 1.97 Target eBrem - 5 2.83 0.711 -2.4e+03 4.65 0.359 0.415 2.39 Target msc - 6 2.93 0.609 -2.4e+03 4.26 0.391 0.351 2.74 Target msc - 7 2.7 0.405 -2.4e+03 3.94 0.319 0.324 3.06 Target msc - 8 2.7 0.17 -2.4e+03 3.67 0.278 0.262 3.32 Target msc - 9 2.84 -0.0235 -2.4e+03 3.38 0.289 0.262 3.59 Target msc - 10 2.94 -0.174 -2.4e+03 3.12 0.26 0.262 3.85 Target msc - 11 3.11 -0.277 -2.4e+03 2.88 0.241 0.262 4.11 Target msc - 12 3.1 -0.368 -2.4e+03 2.69 0.182 0.262 4.37 Target msc - 13 2.89 -0.34 -2.4e+03 2.4 0.291 0.262 4.63 Target msc - 14 2.69 -0.273 -2.4e+03 1.98 0.419 0.262 4.89 Target msc - 15 2.57 -0.369 -2.4e+03 1.72 0.261 0.262 5.16 Target msc - 16 2.57 -0.282 -2.4e+03 1.44 0.287 0.262 5.42 Target msc - 17 2.45 -0.248 -2.4e+03 1.16 0.278 0.262 5.68 Target msc - 18 2.66 -0.224 -2.4e+03 0.92 0.237 0.262 5.94 Target msc - 19 2.68 -0.203 -2.4e+03 0 0.92 0.662 6.6 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 607, Parent ID = 604 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.55 0.897 -2.4e+03 0.0971 0 0 0 Target initStep - 1 2.67 0.678 -2.4e+03 0 0.0971 0.256 0.256 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 606, Parent ID = 604 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.36 1.02 -2.4e+03 0.18 0 0 0 Target initStep - 1 3.31 0.0562 -2.4e+03 0 0.18 1.36 1.36 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 373, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.14 -0.106 -2.4e+03 0.166 0 0 0 Target initStep - 1 1.17 -0.0842 -2.4e+03 0 0.166 0.0819 0.0819 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 372, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.13 -0.112 -2.4e+03 1.46 0 0 0 Target initStep - 1 2.93 1.46 -2.4e+03 1.46 0 5.36 5.36 Tracker Transportation - 2 563 493 -900 1.46 0 1.67e+03 1.68e+03 Chamber Transportation - 3 587 514 -836 1.46 0 71.5 1.75e+03 Tracker Transportation - 4 862 755 -100 1.46 0 822 2.57e+03 Chamber Transportation - 5 936 821 100 1.46 0 223 2.8e+03 Tracker Transportation - 6 1.16e+03 1.02e+03 700 1.46 0 670 3.47e+03 Chamber Transportation - 7 1.23e+03 1.08e+03 900 1.46 0 223 3.69e+03 Tracker Transportation - 8 1.46e+03 1.28e+03 1.5e+03 1.46 0 670 4.36e+03 Chamber Transportation - 9 1.53e+03 1.34e+03 1.7e+03 1.46 0 223 4.58e+03 Tracker Transportation - 10 1.79e+03 1.57e+03 2.4e+03 1.46 0 782 5.36e+03 World Transportation - 11 2e+03 1.75e+03 2.94e+03 1.46 0 603 5.97e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 371, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.669 -0.284 -2.41e+03 0.988 0 0 0 Target initStep - 1 3.61 0.808 -2.4e+03 0.988 0 6.15 6.15 Tracker Transportation - 2 1.73e+03 641 700 0.988 0 3.6e+03 3.61e+03 Chamber Transportation - 3 1.74e+03 647 732 0.988 0 37.1 3.65e+03 Tracker Transportation - 4 2.17e+03 806 1.5e+03 0.988 0 893 4.54e+03 Chamber Transportation - 5 2.25e+03 835 1.64e+03 0.988 0 166 4.71e+03 World Transportation - 6 2.94e+03 1.09e+03 2.88e+03 0.988 0 1.44e+03 6.15e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 370, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.546 -0.315 -2.41e+03 4.72 0 0 0 Target initStep - 1 2.88 -0.0208 -2.4e+03 4.72 0 5.98 5.98 Tracker Transportation - 2 641 80.2 -900 4.72 0 1.63e+03 1.64e+03 Chamber Transportation - 3 726 90.9 -700 4.72 0 218 1.86e+03 Tracker Transportation - 4 981 123 -100 4.72 0 653 2.51e+03 Chamber Transportation - 5 1.07e+03 134 100 4.72 0 218 2.73e+03 Tracker Transportation - 6 1.32e+03 166 700 4.72 0 653 3.38e+03 Chamber Transportation - 7 1.41e+03 176 900 4.72 0 218 3.6e+03 Tracker Transportation - 8 1.66e+03 208 1.5e+03 4.72 0 653 4.25e+03 Chamber Transportation - 9 1.75e+03 219 1.7e+03 4.72 0 218 4.47e+03 Tracker Transportation - 10 2.04e+03 257 2.4e+03 4.72 0 762 5.23e+03 World Transportation - 11 2.27e+03 285 2.94e+03 4.72 0 587 5.82e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 369, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.478 -0.258 -2.41e+03 0.125 0 0 0 Target initStep - 1 0.589 -0.287 -2.41e+03 0 0.125 0.465 0.465 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 368, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.413 -0.253 -2.41e+03 17.7 0 0 0 Target initStep - 1 0.531 -0.254 -2.41e+03 0 0 0.664 0.664 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 367, Parent ID = 363 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.358 -0.22 -2.41e+03 0.16 0 0 0 Target initStep - 1 0.461 -0.241 -2.41e+03 0 0.16 1.24 1.24 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 609, Parent ID = 368 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.531 -0.254 -2.41e+03 6.6 0 0 0 Target initStep - 1 -0.111 -0.237 -2.4e+03 5.11 1.49 1.4 1.4 Target msc - 2 -1.07 -0.118 -2.4e+03 3.81 1.3 1.11 2.51 Target msc - 3 -1.17 -0.195 -2.4e+03 2.46 0.321 0.314 2.82 Target eIoni - 4 -1.35 -0.284 -2.4e+03 1.86 0.229 0.234 3.06 Target eBrem - 5 -1.31 -0.782 -2.4e+03 0.462 1.4 1.37 4.43 Target eIoni - 6 -1.29 -0.792 -2.4e+03 0 0.462 0.271 4.7 Target eIoni - 7 -1.29 -0.792 -2.4e+03 0 0 0 4.7 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 610, Parent ID = 609 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.17 -0.195 -2.4e+03 1.02 0 0 0 Target initStep - 1 -0.915 -0.135 -2.4e+03 0.498 0.332 0.342 0.342 Target eBrem - 2 -0.922 -0.116 -2.4e+03 0 0.498 0.303 0.645 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 608, Parent ID = 368 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.531 -0.254 -2.41e+03 10.1 0 0 0 Target initStep - 1 1.68 0.0422 -2.4e+03 7.81 2.29 1.6 1.6 Target msc - 2 1.69 0.144 -2.4e+03 5.89 0.117 0.104 1.7 Target eIoni - 3 1.64 0.915 -2.4e+03 4.33 1.56 1.31 3.01 Target msc - 4 2.02 0.859 -2.4e+03 1.67 0.481 0.452 3.47 Target eBrem - 5 2.24 -0.035 -2.4e+03 0.108 1.56 1.25 4.71 Target eIoni - 6 2.24 -0.0351 -2.4e+03 0 0.108 0.0309 4.74 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 615, Parent ID = 608 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.69 0.144 -2.4e+03 1.8 0 0 0 Target initStep - 1 0.848 0.964 -2.4e+03 0.306 1.49 1.32 1.32 Target eIoni - 2 0.85 0.962 -2.4e+03 0 0.306 0.138 1.46 Target eBrem - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 616, Parent ID = 608 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.02 0.859 -2.4e+03 2.18 0 0 0 Target initStep - 1 5.17 1.73 -2.4e+03 0 0.523 4.03 4.03 Target conv - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 614, Parent ID = 610 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -0.915 -0.135 -2.4e+03 0.192 0 0 0 Target initStep - 1 -0.576 0.204 -2.4e+03 0 0.192 0.486 0.486 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 613, Parent ID = 609 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.29 -0.792 -2.4e+03 0.511 0 0 0 Target initStep - 1 5.84 6.19 -2.41e+03 0.207 0.304 10.2 10.2 Target compt - 2 5.83 6.19 -2.41e+03 0 0.207 0.00911 10.3 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 612, Parent ID = 609 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.29 -0.792 -2.4e+03 0.511 0 0 0 Target initStep - 1 -6.42 -5.82 -2.4e+03 0.28 0.231 7.38 7.38 Target compt - 2 -6.27 -5.98 -2.4e+03 0 0.28 0.363 7.75 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 611, Parent ID = 609 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.35 -0.284 -2.4e+03 0.372 0 0 0 Target initStep - 1 -5.08 2.41 -2.41e+03 0 0.372 4.8 4.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 617, Parent ID = 616 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.17 1.73 -2.4e+03 0.64 0 0 0 Target initStep - 1 5.21 1.74 -2.4e+03 0 0.64 0.421 0.421 Target eIoni - 2 5.21 1.74 -2.4e+03 0 0 0 0.421 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 605, Parent ID = 374 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.43 0.569 -2.4e+03 4.32 0 0 0 Target initStep - 1 2.49 0.616 -2.4e+03 3.63 0.13 0.163 0.163 Target eBrem - 2 2.55 0.817 -2.4e+03 2.15 0.243 0.224 0.387 Target eIoni - 3 1.97 1.64 -2.4e+03 0.309 1.84 1.5 1.89 Target eIoni - 4 1.95 1.63 -2.4e+03 0 0.309 0.152 2.04 Target eIoni - 5 1.95 1.63 -2.4e+03 0 0 0 2.04 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 621, Parent ID = 605 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.55 0.817 -2.4e+03 1.23 0 0 0 Target initStep - 1 2.38 0.8 -2.4e+03 0.235 0.868 0.756 0.756 Target eBrem - 2 2.35 0.796 -2.4e+03 0.067 0.0537 0.0399 0.796 Target eBrem - 3 2.35 0.796 -2.4e+03 0 0.067 0.0144 0.81 Target eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 625, Parent ID = 621 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.35 0.796 -2.4e+03 0.114 0 0 0 Target initStep - 1 2.09 0.992 -2.4e+03 0 0.114 0.328 0.328 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 624, Parent ID = 621 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.38 0.8 -2.4e+03 0.13 0 0 0 Target initStep - 1 2.42 0.753 -2.4e+03 0 0.13 0.0613 0.0613 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 623, Parent ID = 605 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.95 1.63 -2.4e+03 0.511 0 0 0 Target initStep - 1 2.02 1.74 -2.4e+03 0 0.511 0.121 0.121 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 622, Parent ID = 605 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.95 1.63 -2.4e+03 0.511 0 0 0 Target initStep - 1 -8.35 -15.3 -2.4e+03 0.252 0.259 19.8 19.8 Target compt - 2 -6.69 -16.1 -2.41e+03 0 0.252 3.38 23.2 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 620, Parent ID = 605 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.49 0.616 -2.4e+03 0.565 0 0 0 Target initStep - 1 4.87 4.13 -2.4e+03 0.565 0 5.1 5.1 Tracker Transportation - 2 1.35e+03 1.98e+03 -816 0.565 0 2.87e+03 2.88e+03 World Transportation - 3 2e+03 2.94e+03 -51.7 0.565 0 1.38e+03 4.26e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 619, Parent ID = 617 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.21 1.74 -2.4e+03 0.511 0 0 0 Target initStep - 1 5.16 2.06 -2.4e+03 0 0.511 0.369 0.369 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 618, Parent ID = 617 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 5.21 1.74 -2.4e+03 0.511 0 0 0 Target initStep - 1 5.26 1.39 -2.4e+03 0.248 0.263 0.407 0.407 Target compt - 2 3.63 0.401 -2.4e+03 0 0.248 2.49 2.9 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 600, Parent ID = 385 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.0183 0.0415 -2.4e+03 6.11 0 0 0 Target initStep - 1 0.602 0.25 -2.4e+03 4.17 1.94 1.05 1.05 Target msc - 2 1.01 0.223 -2.4e+03 3.79 0.381 0.425 1.47 Target msc - 3 1.31 0.0538 -2.4e+03 2.77 0.425 0.38 1.85 Target eBrem - 4 1.52 -0.0128 -2.4e+03 2.29 0.48 0.485 2.33 Target msc - 5 1.47 0.085 -2.4e+03 1.92 0.368 0.453 2.79 Target msc - 6 1.31 0.365 -2.4e+03 1.21 0.501 0.492 3.28 Target eBrem - 7 1.37 0.453 -2.4e+03 0 1.21 0.929 4.21 Target eIoni - 8 1.37 0.453 -2.4e+03 0 0 0 4.21 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 591, Parent ID = 526 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.7 8.03 -2.41e+03 3.06 0 0 0 Target initStep - 1 6.7 8.04 -2.41e+03 2.16 0.00835 0.0111 0.0111 Target eBrem - 2 6.62 8.54 -2.41e+03 0 2.16 1.5 1.52 Target eIoni - 3 6.62 8.54 -2.41e+03 0 0 0 1.52 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 586, Parent ID = 545 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10.2 8.18 -2.41e+03 2.3 0 0 0 Target initStep - 1 10.1 8.48 -2.41e+03 0.868 1.33 1.24 1.24 Target eBrem - 2 10 8.42 -2.41e+03 0 0.868 0.621 1.86 Target eIoni - 3 10 8.42 -2.41e+03 0 0 0 1.86 Target annihil - -********************************************************************************************************* -* G4Track Information: Particle = e+, Track ID = 583, Parent ID = 554 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.592 -0.195 -2.41e+03 22.6 0 0 0 Target initStep - 1 0.624 -0.346 -2.4e+03 15.5 0.926 0.698 0.698 Target eBrem - 2 0.604 -0.37 -2.4e+03 15.2 0.0744 0.0987 0.796 Target eBrem - 3 0.599 -0.389 -2.4e+03 14.9 0.127 0.128 0.925 Target eBrem - 4 1.74 -1.89 -2.4e+03 11.9 2.87 2.41 3.34 Target eBrem - 5 1.56 -2.1 -2.4e+03 10.3 1.41 0.713 4.05 Target eBrem - 6 1.47 -1.94 -2.4e+03 9.15 0.513 0.547 4.6 Target eBrem - 7 2.9 -2.12 -2.4e+03 5.58 3.03 2.48 7.08 Target eBrem - 8 3.66 -2.44 -2.4e+03 3.96 1.5 1.36 8.43 Target eBrem - 9 3.46 -2.03 -2.4e+03 2.73 1.07 1.03 9.46 Target eBrem - 10 3.43 -2.02 -2.4e+03 2.72 0.0171 0.033 9.49 Tracker Transportation - 11 -38.3 18.8 -2.39e+03 2.71 0.00617 48 57.5 Tracker eIoni - 12 -68.9 35 -2.38e+03 2.7 0.00614 35.3 92.8 Tracker eIoni - 13 -133 66 -2.36e+03 2.68 0.00824 73.8 167 Tracker eIoni - 14 -223 104 -2.34e+03 2.67 0.0141 100 267 Tracker StepLimiter - 15 -308 153 -2.32e+03 2.65 0.0123 100 367 Tracker StepLimiter - 16 -398 189 -2.3e+03 2.64 0.0132 100 467 Tracker StepLimiter - 17 -490 227 -2.28e+03 2.63 0.0143 100 567 Tracker StepLimiter - 18 -531 242 -2.28e+03 2.61 0.00953 44.3 611 Tracker eIoni - 19 -621 285 -2.27e+03 2.59 0.0135 100 711 Tracker StepLimiter - 20 -705 337 -2.25e+03 2.58 0.0162 100 811 Tracker StepLimiter - 21 -791 386 -2.24e+03 2.57 0.0109 100 911 Tracker StepLimiter - 22 -881 429 -2.24e+03 2.56 0.0118 100 1.01e+03 Tracker StepLimiter - 23 -970 474 -2.24e+03 2.54 0.0163 100 1.11e+03 Tracker StepLimiter - 24 -999 489 -2.24e+03 2.53 0.0053 32.4 1.14e+03 Tracker eIoni - 25 -1.01e+03 494 -2.24e+03 2.5 0.00158 10.3 1.15e+03 Tracker eIoni - 26 -1.06e+03 521 -2.24e+03 2.49 0.00584 54.9 1.21e+03 Tracker eIoni - 27 -1.06e+03 521 -2.24e+03 2.49 0.0003 1.66 1.21e+03 Tracker eIoni - 28 -1.11e+03 544 -2.23e+03 2.48 0.00836 60.7 1.27e+03 Tracker eIoni - 29 -1.16e+03 561 -2.23e+03 2.47 0.00487 45.5 1.32e+03 Tracker eIoni - 30 -1.18e+03 573 -2.22e+03 2.47 0.00446 29.6 1.35e+03 Tracker eIoni - 31 -1.27e+03 612 -2.22e+03 2.45 0.0142 100 1.45e+03 Tracker StepLimiter - 32 -1.29e+03 622 -2.21e+03 2.45 0.00203 22.1 1.47e+03 Tracker eIoni - 33 -1.38e+03 665 -2.19e+03 2.43 0.0141 100 1.57e+03 Tracker StepLimiter - 34 -1.47e+03 704 -2.18e+03 2.42 0.0125 100 1.67e+03 Tracker StepLimiter - 35 -1.49e+03 710 -2.18e+03 2.41 0.00308 16.5 1.68e+03 Tracker eIoni - 36 -1.51e+03 720 -2.17e+03 2.41 0.00325 25.6 1.71e+03 Tracker eIoni - 37 -1.6e+03 757 -2.16e+03 2.39 0.0133 100 1.81e+03 Tracker StepLimiter - 38 -1.7e+03 790 -2.16e+03 2.38 0.017 100 1.91e+03 Tracker StepLimiter - 39 -1.72e+03 800 -2.15e+03 2.37 0.00299 27.5 1.94e+03 Tracker eIoni - 40 -1.76e+03 816 -2.15e+03 2.36 0.00539 43.8 1.98e+03 Tracker eIoni - 41 -1.85e+03 858 -2.14e+03 2.35 0.0154 100 2.08e+03 Tracker StepLimiter - 42 -1.92e+03 887 -2.13e+03 2.34 0.00761 72.6 2.15e+03 Tracker eIoni - 43 -1.92e+03 887 -2.13e+03 2.34 0 0.292 2.15e+03 Tracker eIoni - 44 -2.01e+03 934 -2.11e+03 2.32 0.0139 100 2.25e+03 Tracker StepLimiter - 45 -2.02e+03 941 -2.11e+03 2.32 0.00147 18.1 2.27e+03 Tracker eIoni - 46 -2.05e+03 958 -2.11e+03 2.31 0.00561 36.2 2.31e+03 Tracker eIoni - 47 -2.09e+03 977 -2.1e+03 2.3 0.00468 41 2.35e+03 Tracker eIoni - 48 -2.17e+03 1.02e+03 -2.1e+03 2.29 0.012 93.9 2.44e+03 World Transportation - 49 -2.33e+03 1.09e+03 -2.08e+03 2.26 0.0261 177 2.62e+03 World eIoni - 50 -2.33e+03 1.09e+03 -2.08e+03 2.26 0.000127 1.37 2.62e+03 World eIoni - 51 -2.36e+03 1.11e+03 -2.08e+03 2.25 0.00499 29.6 2.65e+03 World eIoni - 52 -2.37e+03 1.12e+03 -2.08e+03 2.25 0.000752 10.2 2.66e+03 World eIoni - 53 -2.45e+03 1.17e+03 -2.06e+03 2.23 0.0134 99.1 2.76e+03 World eIoni - 54 -2.49e+03 1.19e+03 -2.06e+03 2.23 0.00557 41.4 2.8e+03 World eIoni - 55 -2.51e+03 1.21e+03 -2.05e+03 2.22 0.00334 33.8 2.84e+03 World eIoni - 56 -2.6e+03 1.26e+03 -2.05e+03 2.2 0.0152 107 2.94e+03 World eIoni - 57 -2.64e+03 1.29e+03 -2.04e+03 2.19 0.00592 40.2 2.98e+03 World eIoni - 58 -2.64e+03 1.29e+03 -2.04e+03 2.19 0.000158 1.91 2.99e+03 World eIoni - 59 -2.74e+03 1.35e+03 -2.05e+03 2.17 0.0145 118 3.1e+03 World eIoni - 60 -2.77e+03 1.36e+03 -2.04e+03 2.16 0.0062 30.9 3.13e+03 World eIoni - 61 -2.89e+03 1.42e+03 -2.01e+03 2.14 0.0186 143 3.28e+03 World eIoni - 62 -2.9e+03 1.43e+03 -2.01e+03 2.14 0.000672 8.49 3.29e+03 World eIoni - 63 -2.94e+03 1.44e+03 -2e+03 2.13 0.0061 45.8 3.33e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 679, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.9e+03 1.43e+03 -2.01e+03 0.00113 0 0 0 World initStep - 1 -2.9e+03 1.43e+03 -2.01e+03 0 0.00113 0.0677 0.0677 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 678, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.89e+03 1.42e+03 -2.01e+03 0.00408 0 0 0 World initStep - 1 -2.89e+03 1.42e+03 -2.01e+03 0.0016 0.00248 0.382 0.382 World eIoni - 2 -2.89e+03 1.42e+03 -2.01e+03 0 0.0016 0.115 0.496 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 677, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.77e+03 1.36e+03 -2.04e+03 0.00873 0 0 0 World initStep - 1 -2.77e+03 1.36e+03 -2.04e+03 0.00603 0.000231 0.294 0.294 World eIoni - 2 -2.77e+03 1.36e+03 -2.04e+03 0.00175 0.00428 1.07 1.36 World eIoni - 3 -2.77e+03 1.36e+03 -2.04e+03 0 0.00175 0.131 1.49 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 680, Parent ID = 677 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.77e+03 1.36e+03 -2.04e+03 0.00247 0 0 0 World initStep - 1 -2.77e+03 1.36e+03 -2.04e+03 0 0.00247 0.227 0.227 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 676, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.74e+03 1.35e+03 -2.05e+03 0.00142 0 0 0 World initStep - 1 -2.74e+03 1.35e+03 -2.05e+03 0 0.00142 0.0952 0.0952 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 675, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.64e+03 1.29e+03 -2.04e+03 0.00175 0 0 0 World initStep - 1 -2.64e+03 1.29e+03 -2.04e+03 0 0.00175 0.131 0.131 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 674, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.64e+03 1.29e+03 -2.04e+03 0.00255 0 0 0 World initStep - 1 -2.64e+03 1.29e+03 -2.04e+03 0 0.00255 0.239 0.239 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 673, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.6e+03 1.26e+03 -2.05e+03 0.00321 0 0 0 World initStep - 1 -2.6e+03 1.26e+03 -2.05e+03 0 0.00321 0.354 0.354 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 672, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.51e+03 1.21e+03 -2.05e+03 0.00511 0 0 0 World initStep - 1 -2.51e+03 1.21e+03 -2.05e+03 0 0.00511 0.796 0.796 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 671, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.49e+03 1.19e+03 -2.06e+03 0.0012 0 0 0 World initStep - 1 -2.49e+03 1.19e+03 -2.06e+03 0 0.0012 0.0741 0.0741 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 670, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.45e+03 1.17e+03 -2.06e+03 0.00194 0 0 0 World initStep - 1 -2.45e+03 1.17e+03 -2.06e+03 0 0.00194 0.154 0.154 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 669, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.37e+03 1.12e+03 -2.08e+03 0.00221 0 0 0 World initStep - 1 -2.37e+03 1.12e+03 -2.08e+03 0 0.00221 0.19 0.19 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 668, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.36e+03 1.11e+03 -2.08e+03 0.00107 0 0 0 World initStep - 1 -2.36e+03 1.11e+03 -2.08e+03 0 0.00107 0.0625 0.0625 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 667, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.33e+03 1.09e+03 -2.08e+03 0.00246 0 0 0 World initStep - 1 -2.33e+03 1.09e+03 -2.08e+03 0 0.00246 0.226 0.226 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 666, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.33e+03 1.09e+03 -2.08e+03 0.00365 0 0 0 World initStep - 1 -2.33e+03 1.09e+03 -2.08e+03 0 0.00365 0.442 0.442 World eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 665, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.09e+03 977 -2.1e+03 0.00118 0 0 0 Tracker initStep - 1 -2.09e+03 977 -2.1e+03 0 0.00118 0.0723 0.0723 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 664, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.05e+03 958 -2.11e+03 0.00273 0 0 0 Tracker initStep - 1 -2.05e+03 958 -2.11e+03 0 0.00273 0.269 0.269 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 663, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -2.02e+03 941 -2.11e+03 0.00263 0 0 0 Tracker initStep - 1 -2.02e+03 942 -2.11e+03 0 0.00263 0.253 0.253 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 662, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.92e+03 887 -2.13e+03 0.00147 0 0 0 Tracker initStep - 1 -1.92e+03 887 -2.13e+03 0 0.00147 0.101 0.101 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 661, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.92e+03 887 -2.13e+03 0.00325 0 0 0 Tracker initStep - 1 -1.92e+03 887 -2.13e+03 0 0.00325 0.36 0.36 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 660, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.76e+03 816 -2.15e+03 0.0017 0 0 0 Tracker initStep - 1 -1.76e+03 816 -2.15e+03 0 0.0017 0.126 0.126 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 659, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.72e+03 800 -2.15e+03 0.00211 0 0 0 Tracker initStep - 1 -1.72e+03 800 -2.15e+03 0 0.00211 0.176 0.176 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 658, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.51e+03 720 -2.17e+03 0.00493 0 0 0 Tracker initStep - 1 -1.51e+03 720 -2.17e+03 0 0.00493 0.747 0.747 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 657, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.49e+03 710 -2.18e+03 0.00473 0 0 0 Tracker initStep - 1 -1.49e+03 711 -2.17e+03 0 0.00473 0.693 0.693 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 656, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.29e+03 622 -2.21e+03 0.00151 0 0 0 Tracker initStep - 1 -1.29e+03 622 -2.21e+03 0 0.00151 0.104 0.104 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 655, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.18e+03 573 -2.22e+03 0.00143 0 0 0 Tracker initStep - 1 -1.18e+03 573 -2.22e+03 0 0.00143 0.0964 0.0964 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 654, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.16e+03 561 -2.23e+03 0.00272 0 0 0 Tracker initStep - 1 -1.16e+03 561 -2.23e+03 0 0.00272 0.267 0.267 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 653, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.11e+03 544 -2.23e+03 0.00212 0 0 0 Tracker initStep - 1 -1.11e+03 544 -2.23e+03 0 0.00212 0.178 0.178 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 652, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.06e+03 521 -2.24e+03 0.00138 0 0 0 Tracker initStep - 1 -1.06e+03 521 -2.24e+03 0 0.00138 0.0909 0.0909 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 651, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.06e+03 521 -2.24e+03 0.00123 0 0 0 Tracker initStep - 1 -1.06e+03 521 -2.24e+03 0 0.00123 0.0768 0.0768 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 650, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.01e+03 494 -2.24e+03 0.0319 0 0 0 Tracker initStep - 1 -1.01e+03 489 -2.24e+03 0.0285 0.00343 6.04 6.04 Tracker eIoni - 2 -1.01e+03 490 -2.24e+03 0.0173 0.0019 2.03 8.07 Tracker eIoni - 3 -1.01e+03 491 -2.24e+03 0.0139 0.00339 2.94 11 Tracker eIoni - 4 -1.01e+03 491 -2.24e+03 0.00993 0.00393 2.4 13.4 Tracker eIoni - 5 -1.01e+03 490 -2.24e+03 0.00508 0.00485 1.82 15.2 Tracker eIoni - 6 -1.01e+03 490 -2.25e+03 0 0.00508 0.787 16 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 681, Parent ID = 650 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -1.01e+03 490 -2.24e+03 0.00933 0 0 0 Tracker initStep - 1 -1.01e+03 489 -2.24e+03 0.00402 0.00532 1.73 1.73 Tracker eIoni - 2 -1.01e+03 490 -2.24e+03 0 0.00402 0.521 2.25 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 649, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -999 489 -2.24e+03 0.00174 0 0 0 Tracker initStep - 1 -999 489 -2.24e+03 0 0.00174 0.13 0.13 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 648, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -531 242 -2.28e+03 0.00983 0 0 0 Tracker initStep - 1 -531 242 -2.28e+03 0.00443 0.00539 1.81 1.81 Tracker eIoni - 2 -531 243 -2.28e+03 0 0.00443 0.62 2.43 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 647, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -133 66 -2.36e+03 0.0098 0 0 0 Tracker initStep - 1 -133 65.2 -2.36e+03 0.0064 0.0011 0.989 0.989 Tracker eIoni - 2 -133 65.2 -2.36e+03 0.00206 0.0023 0.524 1.51 Tracker eIoni - 3 -133 65.3 -2.36e+03 0 0.00206 0.17 1.68 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 683, Parent ID = 647 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -133 65.2 -2.36e+03 0.00203 0 0 0 Tracker initStep - 1 -133 65.2 -2.36e+03 0 0.00203 0.166 0.166 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 682, Parent ID = 647 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -133 65.2 -2.36e+03 0.0023 0 0 0 Tracker initStep - 1 -134 65.2 -2.36e+03 0 0.0023 0.203 0.203 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 646, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -68.9 35 -2.38e+03 0.00316 0 0 0 Tracker initStep - 1 -68.8 35.2 -2.38e+03 0 0.00316 0.345 0.345 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 645, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 -38.3 18.8 -2.39e+03 0.0011 0 0 0 Tracker initStep - 1 -38.3 18.8 -2.39e+03 0 0.0011 0.0651 0.0651 Tracker eIoni - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 644, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.46 -2.03 -2.4e+03 0.151 0 0 0 Target initStep - 1 3.44 -2.02 -2.4e+03 0.151 0 0.0247 0.0247 Tracker Transportation - 2 -2.14e+03 1.08e+03 -774 0.151 0 2.9e+03 2.9e+03 World Transportation - 3 -2.94e+03 1.49e+03 -168 0.151 0 1.08e+03 3.98e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 643, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 3.66 -2.44 -2.4e+03 0.123 0 0 0 Target initStep - 1 3.69 -2.31 -2.4e+03 0 0.123 0.142 0.142 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 642, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 2.9 -2.12 -2.4e+03 0.538 0 0 0 Target initStep - 1 4.46 -3.8 -2.4e+03 0.538 0 2.35 2.35 Tracker Transportation - 2 1.63e+03 -1.76e+03 -1.85e+03 0.538 0 2.46e+03 2.46e+03 World Transportation - 3 2.72e+03 -2.94e+03 -1.48e+03 0.538 0 1.65e+03 4.11e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 641, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.47 -1.94 -2.4e+03 0.621 0 0 0 Target initStep - 1 5.19 -0.31 -2.4e+03 0.621 0 4.42 4.42 Tracker Transportation - 2 2.2e+03 957 -1.38e+03 0.621 0 2.6e+03 2.61e+03 World Transportation - 3 2.94e+03 1.28e+03 -1.04e+03 0.621 0 876 3.48e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 640, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.56 -2.1 -2.4e+03 0.23 0 0 0 Target initStep - 1 1.46 -2.08 -2.4e+03 0 0.23 0.483 0.483 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 639, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.74 -1.89 -2.4e+03 0.113 0 0 0 Target initStep - 1 1.76 -1.95 -2.4e+03 0 0.113 0.225 0.225 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 638, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.599 -0.389 -2.4e+03 0.156 0 0 0 Target initStep - 1 0.687 -0.733 -2.4e+03 0 0.156 1.16 1.16 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 637, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.604 -0.37 -2.4e+03 0.271 0 0 0 Target initStep - 1 0.566 -0.662 -2.4e+03 0 0.271 0.987 0.987 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 636, Parent ID = 583 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 0.624 -0.346 -2.4e+03 6.15 0 0 0 Target initStep - 1 0.157 -1.28 -2.4e+03 6.15 0 4.68 4.68 Tracker Transportation - 2 -71.4 -144 -1.7e+03 6.15 0 718 723 Chamber Transportation - 3 -91.8 -184 -1.5e+03 6.15 0 205 928 Tracker Transportation - 4 -153 -307 -900 6.15 0 615 1.54e+03 Chamber Transportation - 5 -174 -347 -700 6.15 0 205 1.75e+03 Tracker Transportation - 6 -235 -469 -100 6.15 0 615 2.36e+03 Chamber Transportation - 7 -255 -510 100 6.15 0 205 2.57e+03 Tracker Transportation - 8 -317 -632 700 6.15 0 615 3.18e+03 Chamber Transportation - 9 -337 -673 900 6.15 0 205 3.39e+03 Tracker Transportation - 10 -398 -795 1.5e+03 6.15 0 615 4e+03 Chamber Transportation - 11 -419 -836 1.7e+03 6.15 0 205 4.21e+03 Tracker Transportation - 12 -490 -978 2.4e+03 6.15 0 718 4.93e+03 World Transportation - 13 -545 -1.09e+03 2.94e+03 6.15 0 554 5.48e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 635, Parent ID = 586 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10 8.42 -2.41e+03 0.511 0 0 0 Target initStep - 1 9 9.56 -2.41e+03 0.334 0.177 2.01 2.01 Target compt - 2 9.59 9.85 -2.41e+03 0.22 0.114 1.42 3.43 Target compt - 3 9.09 9.74 -2.41e+03 0 0.22 0.656 4.09 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 634, Parent ID = 586 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10 8.42 -2.41e+03 0.511 0 0 0 Target initStep - 1 12.5 5.68 -2.41e+03 0 0.511 4.8 4.8 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 633, Parent ID = 586 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 10.1 8.48 -2.41e+03 0.102 0 0 0 Target initStep - 1 9.95 8.24 -2.41e+03 0 0.102 0.266 0.266 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 632, Parent ID = 591 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.62 8.54 -2.41e+03 0.511 0 0 0 Target initStep - 1 12.4 13 -2.41e+03 0.316 0.195 7.92 7.92 Target compt - 2 13.2 12.8 -2.41e+03 0 0.316 0.913 8.83 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 631, Parent ID = 591 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.62 8.54 -2.41e+03 0.511 0 0 0 Target initStep - 1 6.1 8.14 -2.41e+03 0.205 0.306 0.714 0.714 Target compt - 2 6.46 7.99 -2.41e+03 0 0.205 0.389 1.1 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 630, Parent ID = 591 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 6.7 8.04 -2.41e+03 0.885 0 0 0 Target initStep - 1 8.91 12.2 -2.41e+03 0.404 0.481 5.07 5.07 Target compt - 2 8.64 13.3 -2.41e+03 0 0.404 1.51 6.58 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 629, Parent ID = 600 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.37 0.453 -2.4e+03 0.511 0 0 0 Target initStep - 1 0.793 -4.06 -2.41e+03 0.192 0.319 6.47 6.47 Target compt - 2 2.03 -3.62 -2.41e+03 0 0.192 1.6 8.07 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 628, Parent ID = 600 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.37 0.453 -2.4e+03 0.511 0 0 0 Target initStep - 1 1.7 3.01 -2.4e+03 0.511 0 3.66 3.66 Tracker Transportation - 2 307 2.38e+03 23.2 0.511 0 3.41e+03 3.41e+03 World Transportation - 3 379 2.94e+03 594 0.511 0 802 4.21e+03 OutOfWorld Transportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 627, Parent ID = 600 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.31 0.365 -2.4e+03 0.206 0 0 0 Target initStep - 1 1.33 1.3 -2.4e+03 0 0.206 0.98 0.98 Target phot - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 626, Parent ID = 600 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.31 0.0538 -2.4e+03 0.598 0 0 0 Target initStep - 1 13.7 -2.49 -2.41e+03 0.51 0.0878 12.9 12.9 Target compt - 2 16.2 -4.75 -2.41e+03 0 0.51 3.39 16.3 Target phot ----> End of event: 0 ->>> Event: 0 - 158 hits stored in this event -### Run 2 start. - ----> Begin of event: 0 ----> End of event: 0 ->>> Event: 0 - 0 hits stored in this event ->>> Event: 1 - 0 hits stored in this event ->>> Event: 2 - 0 hits stored in this event ->>> Event: 3 - 244 hits stored in this event ->>> Event: 4 - 0 hits stored in this event ->>> Event: 5 - 0 hits stored in this event ->>> Event: 6 - 0 hits stored in this event ->>> Event: 7 - 0 hits stored in this event ->>> Event: 8 - 0 hits stored in this event ->>> Event: 9 - 0 hits stored in this event ->>> Event: 10 - 0 hits stored in this event ->>> Event: 11 - 77 hits stored in this event ->>> Event: 12 - 0 hits stored in this event ->>> Event: 13 - 0 hits stored in this event ->>> Event: 14 - 0 hits stored in this event ->>> Event: 15 - 0 hits stored in this event ->>> Event: 16 - 0 hits stored in this event ->>> Event: 17 - 37 hits stored in this event ->>> Event: 18 - 0 hits stored in this event ->>> Event: 19 - 0 hits stored in this event ->>> Event: 20 - 0 hits stored in this event ->>> Event: 21 - 0 hits stored in this event ->>> Event: 22 - 0 hits stored in this event ->>> Event: 23 - 0 hits stored in this event ->>> Event: 24 - 0 hits stored in this event ->>> Event: 25 - 10 hits stored in this event ->>> Event: 26 - 0 hits stored in this event ->>> Event: 27 - 0 hits stored in this event ->>> Event: 28 - 0 hits stored in this event ->>> Event: 29 - 0 hits stored in this event ->>> Event: 30 - 0 hits stored in this event ->>> Event: 31 - 0 hits stored in this event ->>> Event: 32 - 0 hits stored in this event ->>> Event: 33 - 0 hits stored in this event ->>> Event: 34 - 0 hits stored in this event ->>> Event: 35 - 0 hits stored in this event ->>> Event: 36 - 0 hits stored in this event ->>> Event: 37 - 0 hits stored in this event ->>> Event: 38 - 0 hits stored in this event ->>> Event: 39 - 0 hits stored in this event ->>> Event: 40 - 0 hits stored in this event ->>> Event: 41 - 0 hits stored in this event ->>> Event: 42 - 0 hits stored in this event ->>> Event: 43 - 80 hits stored in this event ->>> Event: 44 - 0 hits stored in this event ->>> Event: 45 - 0 hits stored in this event ->>> Event: 46 - 0 hits stored in this event ->>> Event: 47 - 0 hits stored in this event ->>> Event: 48 - 0 hits stored in this event ->>> Event: 49 - 0 hits stored in this event ->>> Event: 50 - 0 hits stored in this event ->>> Event: 51 - 22 hits stored in this event ->>> Event: 52 - 0 hits stored in this event ->>> Event: 53 - 57 hits stored in this event ->>> Event: 54 - 0 hits stored in this event ->>> Event: 55 - 0 hits stored in this event ->>> Event: 56 - 0 hits stored in this event ->>> Event: 57 - 0 hits stored in this event ->>> Event: 58 - 20 hits stored in this event ->>> Event: 59 - 123 hits stored in this event ->>> Event: 60 - 0 hits stored in this event ->>> Event: 61 - 58 hits stored in this event ->>> Event: 62 - 118 hits stored in this event ->>> Event: 63 - 0 hits stored in this event ->>> Event: 64 - 0 hits stored in this event ->>> Event: 65 - 0 hits stored in this event ->>> Event: 66 - 0 hits stored in this event ->>> Event: 67 - 0 hits stored in this event ->>> Event: 68 - 0 hits stored in this event ->>> Event: 69 - 0 hits stored in this event ->>> Event: 70 - 0 hits stored in this event ->>> Event: 71 - 0 hits stored in this event ->>> Event: 72 - 0 hits stored in this event ->>> Event: 73 - 0 hits stored in this event ->>> Event: 74 - 0 hits stored in this event ->>> Event: 75 - 20 hits stored in this event ->>> Event: 76 - 10 hits stored in this event ->>> Event: 77 - 0 hits stored in this event ->>> Event: 78 - 0 hits stored in this event ->>> Event: 79 - 0 hits stored in this event ->>> Event: 80 - 0 hits stored in this event ->>> Event: 81 - 0 hits stored in this event ->>> Event: 82 - 0 hits stored in this event ->>> Event: 83 - 0 hits stored in this event ->>> Event: 84 - 0 hits stored in this event ->>> Event: 85 - 137 hits stored in this event ->>> Event: 86 - 0 hits stored in this event ->>> Event: 87 - 0 hits stored in this event ->>> Event: 88 - 0 hits stored in this event ->>> Event: 89 - 0 hits stored in this event ->>> Event: 90 - 0 hits stored in this event ->>> Event: 91 - 0 hits stored in this event ->>> Event: 92 - 0 hits stored in this event ->>> Event: 93 - 0 hits stored in this event ->>> Event: 94 - 0 hits stored in this event ->>> Event: 95 - 0 hits stored in this event ->>> Event: 96 - 0 hits stored in this event ->>> Event: 97 - 0 hits stored in this event ->>> Event: 98 - 0 hits stored in this event ->>> Event: 99 - 0 hits stored in this event -### Run 3 start. - ----> Begin of event: 0 ----> End of event: 0 ->>> Event: 0 - 106 hits stored in this event ->>> Event: 1 - 661 hits stored in this event ->>> Event: 2 - 5805 hits stored in this event ->>> Event: 3 - 91 hits stored in this event ->>> Event: 4 - 92 hits stored in this event ->>> Event: 5 - 339 hits stored in this event ->>> Event: 6 - 44 hits stored in this event ->>> Event: 7 - 69 hits stored in this event ->>> Event: 8 - 1474 hits stored in this event ->>> Event: 9 - 97 hits stored in this event ->>> Event: 10 - 80 hits stored in this event ->>> Event: 11 - 152 hits stored in this event ->>> Event: 12 - 361 hits stored in this event ->>> Event: 13 - 84 hits stored in this event ->>> Event: 14 - 63 hits stored in this event ->>> Event: 15 - 64 hits stored in this event ->>> Event: 16 - 64 hits stored in this event ->>> Event: 17 - 112 hits stored in this event ->>> Event: 18 - 1786 hits stored in this event ->>> Event: 19 - 94 hits stored in this event ->>> Event: 20 - 57 hits stored in this event ->>> Event: 21 - 65 hits stored in this event ->>> Event: 22 - 92 hits stored in this event ->>> Event: 23 - 114 hits stored in this event ->>> Event: 24 - 50 hits stored in this event ->>> Event: 25 - 65 hits stored in this event ->>> Event: 26 - 69 hits stored in this event ->>> Event: 27 - 100 hits stored in this event ->>> Event: 28 - 56 hits stored in this event ->>> Event: 29 - 152 hits stored in this event ->>> Event: 30 - 270 hits stored in this event ->>> Event: 31 - 67 hits stored in this event ->>> Event: 32 - 105 hits stored in this event ->>> Event: 33 - 99 hits stored in this event ->>> Event: 34 - 129 hits stored in this event ->>> Event: 35 - 120 hits stored in this event ->>> Event: 36 - 77 hits stored in this event ->>> Event: 37 - 72 hits stored in this event ->>> Event: 38 - 90 hits stored in this event ->>> Event: 39 - 111 hits stored in this event ->>> Event: 40 - 103 hits stored in this event ->>> Event: 41 - 48 hits stored in this event ->>> Event: 42 - 164 hits stored in this event ->>> Event: 43 - 48 hits stored in this event ->>> Event: 44 - 115 hits stored in this event ->>> Event: 45 - 216 hits stored in this event ->>> Event: 46 - 80 hits stored in this event ->>> Event: 47 - 71 hits stored in this event ->>> Event: 48 - 580 hits stored in this event ->>> Event: 49 - 638 hits stored in this event ->>> Event: 50 - 207 hits stored in this event ->>> Event: 51 - 86 hits stored in this event ->>> Event: 52 - 64 hits stored in this event ->>> Event: 53 - 448 hits stored in this event ->>> Event: 54 - 142 hits stored in this event ->>> Event: 55 - 102 hits stored in this event ->>> Event: 56 - 50 hits stored in this event ->>> Event: 57 - 147 hits stored in this event ->>> Event: 58 - 172 hits stored in this event ->>> Event: 59 - 75 hits stored in this event ->>> Event: 60 - 146 hits stored in this event ->>> Event: 61 - 175 hits stored in this event ->>> Event: 62 - 203 hits stored in this event ->>> Event: 63 - 87 hits stored in this event ->>> Event: 64 - 115 hits stored in this event ->>> Event: 65 - 962 hits stored in this event ->>> Event: 66 - 68 hits stored in this event ->>> Event: 67 - 143 hits stored in this event ->>> Event: 68 - 495 hits stored in this event ->>> Event: 69 - 116 hits stored in this event ->>> Event: 70 - 645 hits stored in this event ->>> Event: 71 - 90 hits stored in this event ->>> Event: 72 - 63 hits stored in this event ->>> Event: 73 - 93 hits stored in this event ->>> Event: 74 - 180 hits stored in this event ->>> Event: 75 - 86 hits stored in this event ->>> Event: 76 - 111 hits stored in this event ->>> Event: 77 - 42 hits stored in this event ->>> Event: 78 - 62 hits stored in this event ->>> Event: 79 - 181 hits stored in this event ->>> Event: 80 - 273 hits stored in this event ->>> Event: 81 - 120 hits stored in this event ->>> Event: 82 - 333 hits stored in this event ->>> Event: 83 - 490 hits stored in this event ->>> Event: 84 - 54 hits stored in this event ->>> Event: 85 - 81 hits stored in this event ->>> Event: 86 - 111 hits stored in this event ->>> Event: 87 - 546 hits stored in this event ->>> Event: 88 - 108 hits stored in this event ->>> Event: 89 - 426 hits stored in this event ->>> Event: 90 - 535 hits stored in this event ->>> Event: 91 - 59 hits stored in this event ->>> Event: 92 - 216 hits stored in this event ->>> Event: 93 - 60 hits stored in this event ->>> Event: 94 - 80 hits stored in this event ->>> Event: 95 - 60 hits stored in this event ->>> Event: 96 - 52 hits stored in this event ->>> Event: 97 - 98 hits stored in this event ->>> Event: 98 - 96 hits stored in this event ->>> Event: 99 - 124 hits stored in this event -Graphics systems deleted. -Visualization Manager deleting... diff --git a/examples/extended/parallel/TBB/B2b/gui.mac b/examples/extended/parallel/TBB/B2b/gui.mac deleted file mode 100644 index 1af5a5cad9..0000000000 --- a/examples/extended/parallel/TBB/B2b/gui.mac +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file permits to customize, with commands, -# the menu bar of the G4UIXm, G4UIQt, G4UIWin32 sessions. -# It has no effect with G4UIterminal. -# -# -# File menu : -/gui/addMenu file File -/gui/addButton file Quit exit -# -# Run menu : -/gui/addMenu run Run -/gui/addButton run "beamOn 1" "/run/beamOn 1" -/gui/addButton run run1 "/control/execute run1.mac" -/gui/addButton run run2 "/control/execute run2.mac" -# -# Gun menu : -/gui/addMenu gun Gun -/gui/addButton gun "50 MeV" "/gun/energy 50 MeV" -/gui/addButton gun "1 GeV" "/gun/energy 1 GeV" -/gui/addButton gun "10 GeV" "/gun/energy 10 GeV" -/gui/addButton gun "e-" "/gun/particle e-" -/gui/addButton gun "pi0" "/gun/particle pi0" -/gui/addButton gun "pi+" "/gun/particle pi+" -/gui/addButton gun "neutron" "/gun/particle neutron" -/gui/addButton gun "proton" "/gun/particle proton" -# -# Field menu : -/gui/addMenu field Field -/gui/addButton field "off" "/globalField/setValue 0 0 0 tesla" -/gui/addButton field "0.2 tesla" "/globalField/setValue 0.2 0 0 tesla" -/gui/addButton field "2.0 tesla" "/globalField/setValue 2.0 0 0 tesla" -# -# Viewer menu : -/gui/addMenu viewer Viewer -/gui/addButton viewer "Set style surface" "/vis/viewer/set/style surface" -/gui/addButton viewer "Set style wireframe" "/vis/viewer/set/style wire" -/gui/addButton viewer "Refresh viewer" "/vis/viewer/refresh" -/gui/addButton viewer "Update viewer (interaction or end-of-file)" "/vis/viewer/update" -/gui/addButton viewer "Flush viewer (= refresh + update)" "/vis/viewer/flush" -/gui/addButton viewer "Update scene" "/vis/scene/notifyHandlers" diff --git a/examples/extended/parallel/TBB/B2b/include/B2TrackerHit.hh b/examples/extended/parallel/TBB/B2b/include/B2TrackerHit.hh deleted file mode 100644 index bbb89a29ef..0000000000 --- a/examples/extended/parallel/TBB/B2b/include/B2TrackerHit.hh +++ /dev/null @@ -1,106 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2TrackerHit.hh -/// \brief Definition of the B2TrackerHit class - -#ifndef B2TrackerHit_h -#define B2TrackerHit_h 1 - -#include "tls.hh" - -#include "G4Allocator.hh" -#include "G4THitsCollection.hh" -#include "G4ThreeVector.hh" -#include "G4VHit.hh" - -/// Tracker hit class -/// -/// It defines data members to store the trackID, chamberNb, energy deposit, -/// and position of charged particles in a selected volume: -/// - fTrackID, fChamberNB, fEdep, fPos - -class B2TrackerHit : public G4VHit -{ - public: - B2TrackerHit(); - B2TrackerHit(const B2TrackerHit&); - virtual ~B2TrackerHit(); - - // operators - const B2TrackerHit& operator=(const B2TrackerHit&); - G4bool operator==(const B2TrackerHit&) const; - - inline void* operator new(size_t); - inline void operator delete(void*); - - // methods from base class - virtual void Draw(); - virtual void Print(); - - // Set methods - void SetTrackID(G4int track) { fTrackID = track; }; - void SetChamberNb(G4int chamb) { fChamberNb = chamb; }; - void SetEdep(G4double de) { fEdep = de; }; - void SetPos(G4ThreeVector xyz) { fPos = xyz; }; - - // Get methods - G4int GetTrackID() const { return fTrackID; }; - G4int GetChamberNb() const { return fChamberNb; }; - G4double GetEdep() const { return fEdep; }; - G4ThreeVector GetPos() const { return fPos; }; - - private: - G4int fTrackID; - G4int fChamberNb; - G4double fEdep; - G4ThreeVector fPos; -}; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -typedef G4THitsCollection B2TrackerHitsCollection; - -extern G4ThreadLocal G4Allocator* B2TrackerHitAllocator; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -inline void* B2TrackerHit::operator new(size_t) -{ - if (!B2TrackerHitAllocator) B2TrackerHitAllocator = new G4Allocator; - return (void*)B2TrackerHitAllocator->MallocSingle(); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -inline void B2TrackerHit::operator delete(void* hit) -{ - B2TrackerHitAllocator->FreeSingle((B2TrackerHit*)hit); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#endif diff --git a/examples/extended/parallel/TBB/B2b/include/B2bChamberParameterisation.hh b/examples/extended/parallel/TBB/B2b/include/B2bChamberParameterisation.hh deleted file mode 100644 index 6155fe1241..0000000000 --- a/examples/extended/parallel/TBB/B2b/include/B2bChamberParameterisation.hh +++ /dev/null @@ -1,96 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2bChamberParameterisation.hh -/// \brief Definition of the B2bChamberParameterisation class - -#ifndef B2bChamberParameterisation_h -#define B2bChamberParameterisation_h 1 - -#include "G4VPVParameterisation.hh" -#include "globals.hh" - -class G4VPhysicalVolume; -class G4Box; - -// Dummy declarations to get rid of warnings ... -class G4Trd; -class G4Trap; -class G4Cons; -class G4Orb; -class G4Sphere; -class G4Ellipsoid; -class G4Torus; -class G4Para; -class G4Hype; -class G4Tubs; -class G4Polycone; -class G4Polyhedra; - -/// A parameterisation that describes a series of boxes along Z. -/// -/// The boxes have equal width, & their lengths are a linear equation. -/// They are spaced an equal distance apart, starting from given location. - -class B2bChamberParameterisation : public G4VPVParameterisation -{ - public: - B2bChamberParameterisation(G4int noChambers, G4double startZ, G4double spacing, - G4double widthChamber, G4double lengthInitial, G4double lengthFinal); - - virtual ~B2bChamberParameterisation(); - - void ComputeTransformation(const G4int copyNo, G4VPhysicalVolume* physVol) const; - - void ComputeDimensions(G4Tubs& trackerLayer, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; - - private: // Dummy declarations to get rid of warnings ... - void ComputeDimensions(G4Box&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Trd&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Trap&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Cons&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Sphere&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Orb&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Ellipsoid&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Torus&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Para&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Hype&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Polycone&, const G4int, const G4VPhysicalVolume*) const {} - void ComputeDimensions(G4Polyhedra&, const G4int, const G4VPhysicalVolume*) const {} - - private: - G4int fNoChambers; - G4double fStartZ; - G4double fHalfWidth; // The half-width of each tracker chamber - G4double fSpacing; // The distance between the chambers' center - G4double fRmaxFirst; // The first half-length - G4double fRmaxIncr; // The Increment for the half-length -}; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#endif diff --git a/examples/extended/parallel/TBB/B2b/init.mac b/examples/extended/parallel/TBB/B2b/init.mac deleted file mode 100644 index 33ada289f3..0000000000 --- a/examples/extended/parallel/TBB/B2b/init.mac +++ /dev/null @@ -1,9 +0,0 @@ -# Macro file for the initialization phase of "exampleN03.cc" -# when running in interactive mode without visualization -# -# Set some default verbose -# -/control/verbose 2 -/control/saveHistory -/run/verbose 2 -# diff --git a/examples/extended/parallel/TBB/B2b/init_vis.mac b/examples/extended/parallel/TBB/B2b/init_vis.mac deleted file mode 100644 index 7ca76c0a1f..0000000000 --- a/examples/extended/parallel/TBB/B2b/init_vis.mac +++ /dev/null @@ -1,12 +0,0 @@ -# Macro file for the initialization phase of "exampleB2.cc" -# when running in interactive mode with visualization -# -# Set some default verbose -# -/control/verbose 2 -/control/saveHistory -/run/verbose 2 -# -# Visualization setting -/control/execute vis.mac -# diff --git a/examples/extended/parallel/TBB/B2b/src/B2TrackerSD.cc b/examples/extended/parallel/TBB/B2b/src/B2TrackerSD.cc deleted file mode 100644 index d630a2d8d9..0000000000 --- a/examples/extended/parallel/TBB/B2b/src/B2TrackerSD.cc +++ /dev/null @@ -1,100 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2TrackerSD.cc -/// \brief Implementation of the B2TrackerSD class - -#include "B2TrackerSD.hh" - -#include "G4HCofThisEvent.hh" -#include "G4SDManager.hh" -#include "G4Step.hh" -#include "G4ThreeVector.hh" -#include "G4ios.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2TrackerSD::B2TrackerSD(const G4String& name, const G4String& hitsCollectionName) - : G4VSensitiveDetector(name), fHitsCollection(NULL) -{ - collectionName.insert(hitsCollectionName); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2TrackerSD::~B2TrackerSD() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2TrackerSD::Initialize(G4HCofThisEvent* hce) -{ - // Create hits collection - - fHitsCollection = new B2TrackerHitsCollection(SensitiveDetectorName, collectionName[0]); - - // Add this collection in hce - - G4int hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); - hce->AddHitsCollection(hcID, fHitsCollection); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4bool B2TrackerSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ - // energy deposit - G4double edep = aStep->GetTotalEnergyDeposit(); - - if (edep == 0.) return false; - - B2TrackerHit* newHit = new B2TrackerHit(); - - newHit->SetTrackID(aStep->GetTrack()->GetTrackID()); - newHit->SetChamberNb(aStep->GetPreStepPoint()->GetTouchableHandle()->GetCopyNumber()); - newHit->SetEdep(edep); - newHit->SetPos(aStep->GetPostStepPoint()->GetPosition()); - - fHitsCollection->insert(newHit); - - // newHit->Print(); - - return true; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2TrackerSD::EndOfEvent(G4HCofThisEvent*) -{ - if (verboseLevel > 1) { - G4int nofHits = fHitsCollection->entries(); - G4cout << "\n-------->Hits Collection: in this event they are " << nofHits - << " hits in the tracker chambers: " << G4endl; - for (G4int i = 0; i < nofHits; i++) - (*fHitsCollection)[i]->Print(); - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parallel/TBB/B2b/src/B2bChamberParameterisation.cc b/examples/extended/parallel/TBB/B2b/src/B2bChamberParameterisation.cc deleted file mode 100644 index 75b4e23751..0000000000 --- a/examples/extended/parallel/TBB/B2b/src/B2bChamberParameterisation.cc +++ /dev/null @@ -1,90 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2bChamberParameterisation.cc -/// \brief Implementation of the B2bChamberParameterisation class - -#include "B2bChamberParameterisation.hh" - -#include "G4SystemOfUnits.hh" -#include "G4ThreeVector.hh" -#include "G4Tubs.hh" -#include "G4VPhysicalVolume.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2bChamberParameterisation::B2bChamberParameterisation(G4int noChambers, - G4double startZ, // Z of center of first - G4double spacingZ, // Z spacing of centers - G4double widthChamber, - G4double lengthInitial, G4double lengthFinal) - : G4VPVParameterisation() -{ - fNoChambers = noChambers; - fStartZ = startZ; - fHalfWidth = 0.5 * widthChamber; - fSpacing = spacingZ; - fRmaxFirst = 0.5 * lengthInitial; - if (noChambers > 0) { - fRmaxIncr = 0.5 * (lengthFinal - lengthInitial) / (noChambers - 1); - if (spacingZ < widthChamber) { - G4Exception("B2bChamberParameterisation::B2bChamberParameterisation()", "InvalidSetup", - FatalException, "Width>Spacing"); - } - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2bChamberParameterisation::~B2bChamberParameterisation() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bChamberParameterisation::ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const -{ - // Note: copyNo will start with zero! - G4double Zposition = fStartZ + copyNo * fSpacing; - G4ThreeVector origin(0, 0, Zposition); - physVol->SetTranslation(origin); - physVol->SetRotation(0); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bChamberParameterisation::ComputeDimensions(G4Tubs& trackerChamber, const G4int copyNo, - const G4VPhysicalVolume*) const -{ - // Note: copyNo will start with zero! - G4double rmax = fRmaxFirst + copyNo * fRmaxIncr; - trackerChamber.SetInnerRadius(0); - trackerChamber.SetOuterRadius(rmax); - trackerChamber.SetZHalfLength(fHalfWidth); - trackerChamber.SetStartPhiAngle(0. * deg); - trackerChamber.SetDeltaPhiAngle(360. * deg); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parallel/TBB/B2b/src/B2bDetectorConstruction.cc b/examples/extended/parallel/TBB/B2b/src/B2bDetectorConstruction.cc deleted file mode 100644 index 9dcb12b472..0000000000 --- a/examples/extended/parallel/TBB/B2b/src/B2bDetectorConstruction.cc +++ /dev/null @@ -1,329 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2bDetectorConstruction.cc -/// \brief Implementation of the B2bDetectorConstruction class - -#include "B2bDetectorConstruction.hh" - -#include "B2TrackerSD.hh" -#include "B2bChamberParameterisation.hh" -#include "B2bDetectorMessenger.hh" - -#include "G4Box.hh" -#include "G4Colour.hh" -#include "G4GeometryManager.hh" -#include "G4GeometryTolerance.hh" -#include "G4GlobalMagFieldMessenger.hh" -#include "G4LogicalVolume.hh" -#include "G4Material.hh" -#include "G4NistManager.hh" -#include "G4PVParameterised.hh" -#include "G4PVPlacement.hh" -#include "G4SDManager.hh" -#include "G4SystemOfUnits.hh" -#include "G4Tubs.hh" -#include "G4UserLimits.hh" -#include "G4VisAttributes.hh" - -// #include "G4ios.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ThreadLocal G4GlobalMagFieldMessenger* B2bDetectorConstruction::fMagFieldMessenger = 0; - -B2bDetectorConstruction::B2bDetectorConstruction() - : G4VUserDetectorConstruction(), - fLogicTarget(NULL), - fLogicChamber(NULL), - fTargetMaterial(NULL), - fChamberMaterial(NULL), - fStepLimit(NULL), - fCheckOverlaps(true) -{ - fMessenger = new B2bDetectorMessenger(this); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2bDetectorConstruction::~B2bDetectorConstruction() -{ - delete fStepLimit; - delete fMessenger; - delete fMagFieldMessenger; - fMagFieldMessenger = 0; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4VPhysicalVolume* B2bDetectorConstruction::Construct() -{ - // Define materials - DefineMaterials(); - - // Define volumes - return DefineVolumes(); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorConstruction::DefineMaterials() -{ - // Material definition - - G4NistManager* nistManager = G4NistManager::Instance(); - - // Air defined using NIST Manager - nistManager->FindOrBuildMaterial("G4_AIR"); - - // Lead defined using NIST Manager - fTargetMaterial = nistManager->FindOrBuildMaterial("G4_Pb"); - - // Xenon gas defined using NIST Manager - fChamberMaterial = nistManager->FindOrBuildMaterial("G4_Xe"); - - // Print materials - G4cout << *(G4Material::GetMaterialTable()) << G4endl; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4VPhysicalVolume* B2bDetectorConstruction::DefineVolumes() -{ - G4Material* air = G4Material::GetMaterial("G4_AIR"); - - // Sizes of the principal geometrical components (solids) - - G4int NbOfChambers = 5; - G4double chamberSpacing = 80 * cm; // from chamber center to center! - - G4double chamberWidth = 20.0 * cm; // width of the chambers - G4double targetLength = 5.0 * cm; // full length of Target - - G4double trackerLength = (NbOfChambers + 1) * chamberSpacing; - - G4double worldLength = 1.2 * (2 * targetLength + trackerLength); - - G4double targetRadius = 0.5 * targetLength; // Radius of Target - targetLength = 0.5 * targetLength; // Half length of the Target - G4double trackerSize = 0.5 * trackerLength; // Half length of the Tracker - - // Definitions of Solids, Logical Volumes, Physical Volumes - - // World - - G4GeometryManager::GetInstance()->SetWorldMaximumExtent(worldLength); - - G4cout << "Computed tolerance = " - << G4GeometryTolerance::GetInstance()->GetSurfaceTolerance() / mm << " mm" << G4endl; - - G4Box* worldS = new G4Box("world", // its name - worldLength / 2, worldLength / 2, worldLength / 2); // its size - G4LogicalVolume* worldLV = new G4LogicalVolume(worldS, // its solid - air, // its material - "World"); // its name - - // Must place the World Physical volume unrotated at (0,0,0). - // - G4VPhysicalVolume* worldPV = new G4PVPlacement(0, // no rotation - G4ThreeVector(), // at (0,0,0) - worldLV, // its logical volume - "World", // its name - 0, // its mother volume - false, // no boolean operations - 0, // copy number - fCheckOverlaps); // checking overlaps - - // Target - - G4ThreeVector positionTarget = G4ThreeVector(0, 0, -(targetLength + trackerSize)); - - G4Tubs* targetS = new G4Tubs("target", 0., targetRadius, targetLength, 0. * deg, 360. * deg); - fLogicTarget = new G4LogicalVolume(targetS, fTargetMaterial, "Target", 0, 0, 0); - new G4PVPlacement(0, // no rotation - positionTarget, // at (x,y,z) - fLogicTarget, // its logical volume - "Target", // its name - worldLV, // its mother volume - false, // no boolean operations - 0, // copy number - fCheckOverlaps); // checking overlaps - - G4cout << "Target is " << 2 * targetLength / cm << " cm of " << fTargetMaterial->GetName() - << G4endl; - - // Tracker - - G4ThreeVector positionTracker = G4ThreeVector(0, 0, 0); - - G4Tubs* trackerS = new G4Tubs("tracker", 0, trackerSize, trackerSize, 0. * deg, 360. * deg); - G4LogicalVolume* trackerLV = new G4LogicalVolume(trackerS, air, "Tracker", 0, 0, 0); - new G4PVPlacement(0, // no rotation - positionTracker, // at (x,y,z) - trackerLV, // its logical volume - "Tracker", // its name - worldLV, // its mother volume - false, // no boolean operations - 0, // copy number - fCheckOverlaps); // checking overlaps - - // Tracker segments - - // An example of Parameterised volumes - // Dummy values for G4Tubs -- modified by parameterised volume - - G4Tubs* chamberS = new G4Tubs("tracker", 0, 100 * cm, 100 * cm, 0. * deg, 360. * deg); - fLogicChamber = new G4LogicalVolume(chamberS, fChamberMaterial, "Chamber", 0, 0, 0); - - G4double firstPosition = -trackerSize + chamberSpacing; - G4double firstLength = trackerLength / 10; - G4double lastLength = trackerLength; - - G4VPVParameterisation* chamberParam = - new B2bChamberParameterisation(NbOfChambers, // NoChambers - firstPosition, // Z of center of first - chamberSpacing, // Z spacing of centers - chamberWidth, // chamber width - firstLength, // initial length - lastLength); // final length - - // dummy value : kZAxis -- modified by parameterised volume - - new G4PVParameterised("Chamber", // their name - fLogicChamber, // their logical volume - trackerLV, // Mother logical volume - kZAxis, // Are placed along this axis - NbOfChambers, // Number of chambers - chamberParam, // The parametrisation - fCheckOverlaps); // checking overlaps - - G4cout << "There are " << NbOfChambers << " chambers in the tracker region. " - << "\nThe chambers are " << chamberWidth / cm << " cm of " << fChamberMaterial->GetName() - << "\nThe distance between chamber is " << chamberSpacing / cm << " cm" << G4endl; - - // Visualization attributes - - G4VisAttributes* boxVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); - worldLV->SetVisAttributes(boxVisAtt); - fLogicTarget->SetVisAttributes(boxVisAtt); - trackerLV->SetVisAttributes(boxVisAtt); - - G4VisAttributes* chamberVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0)); - fLogicChamber->SetVisAttributes(chamberVisAtt); - - // Example of User Limits - // - // Below is an example of how to set tracking constraints in a given - // logical volume - // - // Sets a max step length in the tracker region, with G4StepLimiter - - G4double maxStep = 0.5 * chamberWidth; - fStepLimit = new G4UserLimits(maxStep); - trackerLV->SetUserLimits(fStepLimit); - - /// Set additional contraints on the track, with G4UserSpecialCuts - /// - /// G4double maxLength = 2*trackerLength, maxTime = 0.1*ns, minEkin = 10*MeV; - /// trackerLV->SetUserLimits(new G4UserLimits(maxStep, - /// maxLength, - /// maxTime, - /// minEkin)); - - // Always return the physical world - - return worldPV; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorConstruction::ConstructSDandField() -{ - // Sensitive detectors - - G4String trackerChamberSDname = "B2/TrackerChamberSD"; - B2TrackerSD* aTrackerSD = new B2TrackerSD(trackerChamberSDname, "TrackerHitsCollection"); - G4SDManager::GetSDMpointer()->AddNewDetector(aTrackerSD); - SetSensitiveDetector(fLogicChamber, aTrackerSD); - - // Create global magnetic field messenger. - // Uniform magnetic field is then created automatically if - // the field value is not zero. - G4ThreeVector fieldValue = G4ThreeVector(); - fMagFieldMessenger = new G4GlobalMagFieldMessenger(fieldValue); - fMagFieldMessenger->SetVerboseLevel(1); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorConstruction::SetTargetMaterial(G4String materialName) -{ - G4NistManager* nistManager = G4NistManager::Instance(); - - G4Material* pttoMaterial = nistManager->FindOrBuildMaterial(materialName); - - if (fTargetMaterial != pttoMaterial) { - if (pttoMaterial) { - fTargetMaterial = pttoMaterial; - if (fLogicTarget) fLogicTarget->SetMaterial(fTargetMaterial); - G4cout << "\n----> The target is made of " << materialName << G4endl; - } - else { - G4cout << "\n--> WARNING from SetTargetMaterial : " << materialName << " not found" - << G4endl; - } - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorConstruction::SetChamberMaterial(G4String materialName) -{ - G4NistManager* nistManager = G4NistManager::Instance(); - - G4Material* pttoMaterial = nistManager->FindOrBuildMaterial(materialName); - - if (fChamberMaterial != pttoMaterial) { - if (pttoMaterial) { - fChamberMaterial = pttoMaterial; - if (fLogicChamber) fLogicChamber->SetMaterial(fChamberMaterial); - G4cout << "\n----> The chambers are made of " << materialName << G4endl; - } - else { - G4cout << "\n--> WARNING from SetChamberMaterial : " << materialName << " not found" - << G4endl; - } - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorConstruction::SetMaxStep(G4double maxStep) -{ - if ((fStepLimit) && (maxStep > 0.)) fStepLimit->SetMaxAllowedStep(maxStep); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parallel/TBB/B2b/src/B2bDetectorMessenger.cc b/examples/extended/parallel/TBB/B2b/src/B2bDetectorMessenger.cc deleted file mode 100644 index 92c2c0c513..0000000000 --- a/examples/extended/parallel/TBB/B2b/src/B2bDetectorMessenger.cc +++ /dev/null @@ -1,94 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// -/// \file B2bDetectorMessenger.cc -/// \brief Implementation of the B2bDetectorMessenger class - -#include "B2bDetectorMessenger.hh" - -#include "B2bDetectorConstruction.hh" - -#include "G4UIcmdWithADoubleAndUnit.hh" -#include "G4UIcmdWithAString.hh" -#include "G4UIdirectory.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2bDetectorMessenger::B2bDetectorMessenger(B2bDetectorConstruction* Det) - : G4UImessenger(), fDetectorConstruction(Det) -{ - fB2Directory = new G4UIdirectory("/B2/"); - fB2Directory->SetGuidance("UI commands specific to this example."); - - fDetDirectory = new G4UIdirectory("/B2/det/"); - fDetDirectory->SetGuidance("Detector construction control"); - - fTargMatCmd = new G4UIcmdWithAString("/B2/det/setTargetMaterial", this); - fTargMatCmd->SetGuidance("Select Material of the Target."); - fTargMatCmd->SetParameterName("choice", false); - fTargMatCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - - fChamMatCmd = new G4UIcmdWithAString("/B2/det/setChamberMaterial", this); - fChamMatCmd->SetGuidance("Select Material of the Chamber."); - fChamMatCmd->SetParameterName("choice", false); - fChamMatCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - - fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/B2/det/stepMax", this); - fStepMaxCmd->SetGuidance("Define a step max"); - fStepMaxCmd->SetParameterName("stepMax", false); - fStepMaxCmd->SetUnitCategory("Length"); - fStepMaxCmd->AvailableForStates(G4State_Idle); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2bDetectorMessenger::~B2bDetectorMessenger() -{ - delete fTargMatCmd; - delete fChamMatCmd; - delete fStepMaxCmd; - delete fB2Directory; - delete fDetDirectory; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void B2bDetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) -{ - if (command == fTargMatCmd) { - fDetectorConstruction->SetTargetMaterial(newValue); - } - - if (command == fChamMatCmd) { - fDetectorConstruction->SetChamberMaterial(newValue); - } - - if (command == fStepMaxCmd) { - fDetectorConstruction->SetMaxStep(fStepMaxCmd->GetNewDoubleValue(newValue)); - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parallel/TBB/B2b/tbb.mac b/examples/extended/parallel/TBB/B2b/tbb.mac deleted file mode 100644 index 74a7804eac..0000000000 --- a/examples/extended/parallel/TBB/B2b/tbb.mac +++ /dev/null @@ -1,16 +0,0 @@ -# Macro file for example B2 -# -# Can be run in batch, without graphic -# or interactively: Idle> /control/execute run1.mac -# -# Default kinematics: -# proton 3 GeV in direction (0.,0.,1.) -# -# -# set target and chamber material -# -/B2/det/setTargetMaterial G4_WATER -/B2/det/setChamberMaterial G4_Ar -/globalField/verbose 1 -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 10000 diff --git a/examples/extended/parallel/TBB/CMakeLists.txt b/examples/extended/parallel/TBB/CMakeLists.txt deleted file mode 100644 index 6f0bfbd7bf..0000000000 --- a/examples/extended/parallel/TBB/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -#---Adding examples subdirectories explicitly -# and a custom target to for building all basic examples ------------- - -cmake_minimum_required(VERSION 3.16...3.27) - -if(GEANT4_BUILD_MULTITHREADED) - add_subdirectory(B2b) - - add_custom_target(g4tbb DEPENDS exampleB2bTBB) -else() - message("-- G4 Examples: tbb examples require multithreaded build, disable") -endif() diff --git a/examples/extended/parallel/TBB/History b/examples/extended/parallel/TBB/History deleted file mode 100644 index 05c7a24142..0000000000 --- a/examples/extended/parallel/TBB/History +++ /dev/null @@ -1,50 +0,0 @@ -# Example TBB History - -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! - - -## 2021-12-10 Ben Morgan (tbbex-V11-00-00) -- Change to new Markdown History format - ---- - -# History entries prior to 11.0 - -28th May 2020 J. Madsen (tbbex-V10-06-00) -- Updated TBB example to use new tasking system which is fully compatible with TBB - -25th Oct 2018 J. Madsen (tbbex-V10-04-01) -- Updated TBB example to work with migration from POSIX threads to C++11 threads - -02 May 2018 J.Allison (tbbex-V10-04-00) -- Removed G4VIS_USE and G4UI_USE. -- Moved instantiation of G4UIExecutive to start of main. - -19th Nov 2016 A. Dotti (tbbex-V10-02-03) -- Explict set of SD to manager - -2nd Nov 2016 L. Garnier (tbbex-V10-02-02) -- Remove icons.mac. Automatically include since interfaces-V10-02-07 - -23rd Fev 2016 A. Dotti (tbbex-V10-02-01) -- Removing example "granular" that is not yet ready. Use - previous tag to develop it. - -22nd Feb 2016 A. Dotti (tbbex-V10-02-00) -- Compatibility porting to run-V10-02-07 tag - -10th November 2013 I. Hrivnacova (tbbex-V09-06-02) -- Added README files (and moved previous README in DevelopmentStatus.txt) -- Fixed CMake build -- Updated B2b classes for changes in B2b in basic - -7th November 2013 A. Dotti (tbbex-V09-06-01) -- Bug fix for G4VSteppingVerbose -- Remove unused macros - -6th November 2013 A. Dotti (tbbex-V09-06-00) -- First import of new TBB based examples -- Not ready yet for production or inclusion in release - diff --git a/examples/extended/parallel/TBB/README b/examples/extended/parallel/TBB/README deleted file mode 100644 index 408869a95a..0000000000 --- a/examples/extended/parallel/TBB/README +++ /dev/null @@ -1,22 +0,0 @@ - - Geant4 extended examples - TBB - -------------------------------- - -TBB directory shows how to integrate Intel Threading Building Block and Geant4 -to achieve event-level parallelism. - -TBB/B2b - -Currently only a preliminary version of one example is provided: it replaces -the Geant4 Version 10.0 event-loop parallelism based on pthreads with TBB -task-based parallelism. It should not be considered a feature-complete example -and it present some limitations (no merging of output, no correct clean-up of -heap). - -It will be substantially improved in the future. -If you have interest in TBB please -refer to Geant4 Multi-threading user-forum (reachable from Geant4 website) -where updates on TBB will be communicated or contact example author at: -adotti@slac.stanford.edu. - - diff --git a/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out b/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out index a5a6f5512d..502d7612da 100644 --- a/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out +++ b/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out @@ -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,23 +38,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", @@ -132,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 ======== @@ -847,6 +848,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 @@ -863,6 +865,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 @@ -915,773 +918,770 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=13.950000s Real=18.425489s Sys=0.570000s + User=14.270000s Real=18.015018s Sys=0.620000s ###### EndOfTSRunAction ###### ============================================================ opened file mfd_tl_EnergyDeposit.out for output ============================================================ - 0 1991.727437 keV - 1 77.491062 keV - 2 33.917923 keV - 3 285.083670 keV - 4 14.110093 keV + 0 1060.093224 keV + 1 697.124697 keV + 2 151.298905 keV + 3 134.210177 keV 5 10.498991 keV - 6 45.927514 keV - 7 110.675816 keV - 8 70.462143 keV - 9 178.404244 keV - 10 509.868218 keV - 11 106.589157 keV - 12 770.201130 keV - 13 7.836033 keV - 14 1208.635109 keV - 15 21.487003 keV - 16 567.033635 keV - 17 820.543356 keV - 18 673.280342 keV - 19 444.450384 keV - 21 240.912888 keV - 22 179.188023 keV - 23 147.266948 keV - 24 2221.243612 keV - 25 41.589433 keV - 26 81.118959 keV - 27 1249.184277 keV - 28 1272.271674 keV - 29 1914.564921 keV - 30 3610.594070 keV - 31 1179.702629 keV - 32 8239.692255 keV - 33 4017.958218 keV - 34 538.132063 keV - 35 1369.333185 keV - 36 6603.428916 keV - 37 3140.091933 keV - 38 1953.426346 keV - 39 1208.153833 keV - 40 2001.912541 keV - 41 3901.565410 keV - 42 781.178288 keV - 43 6339.939160 keV - 44 406.601894 keV - 45 2404.847783 keV - 46 3183.231255 keV - 47 4200.379557 keV - 48 948.025821 keV - 49 1393.606793 keV - 50 1135.814907 keV - 51 2940.749354 keV - 52 5081.633304 keV - 53 7691.853572 keV - 54 3113.180921 keV - 55 11038.922420 keV - 56 12591.714828 keV - 57 19534.481189 keV - 58 17079.814748 keV - 59 7468.116050 keV - 60 2656.414797 keV - 61 20964.079379 keV - 62 20152.189174 keV - 63 23653.504056 keV - 64 5120.407823 keV - 65 5928.393230 keV - 66 30515.935054 keV - 67 14352.038965 keV - 68 21742.147688 keV - 69 9961.834026 keV - 70 9190.986869 keV - 71 4192.889330 keV - 72 9173.003045 keV - 73 11806.908234 keV - 74 8520.734621 keV - 75 22112.156418 keV - 76 24545.926773 keV - 77 28364.256550 keV - 78 33883.940326 keV - 79 29424.065371 keV - 80 27658.116724 keV - 81 442245.973880 keV - 82 343171.658475 keV - 83 450217.167553 keV - 84 29376.622096 keV - 85 34279.039254 keV - 86 357391.892088 keV - 87 314485.899966 keV - 88 300004.500075 keV - 89 32378.946997 keV - 90 28740.852927 keV - 91 411490.770383 keV - 92 367275.204939 keV - 93 428723.904582 keV - 94 34534.742637 keV - 95 23077.007295 keV - 96 30057.027154 keV - 97 30947.222021 keV - 98 32135.475186 keV - 99 23995.432973 keV - 100 344249.396967 keV - 101 330035.452213 keV - 102 357367.798001 keV - 103 347790.095126 keV - 104 313495.543692 keV - 105 328489.751258 keV - 106 355915.032410 keV - 107 376541.162251 keV - 108 395217.422386 keV - 109 336464.887469 keV - 110 352424.687405 keV - 111 389029.630380 keV - 112 418034.813411 keV - 113 356688.506864 keV - 114 392187.164438 keV - 115 325448.540134 keV - 116 398825.049225 keV - 117 387271.201883 keV - 118 386212.240370 keV - 119 351384.141043 keV - 120 342498.187441 keV - 121 350873.709398 keV - 122 338602.368745 keV - 123 349420.177365 keV - 124 321165.757453 keV - 0 1991.73 [sigma: 576.462 | error: 0.501304 | coeff: 0.501304 | eff: 1 | fom: 0.284229 | r2int: 0.167537 | r2eff: 0 | hits: 3 ] keV - 1 77.4911 [sigma: 51.2905 | error: 0.936054 | coeff: 0.936054 | eff: 1 | fom: 0.0815212 | r2int: 0.438098 | r2eff: 0 | hits: 2 ] keV - 2 33.9179 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: -2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 3 285.084 [sigma: 50.5261 | error: 0.43413 | coeff: 0.43413 | eff: 1 | fom: 0.378995 | r2int: 0.157057 | r2eff: 0 | hits: 6 ] keV - 4 14.1101 [sigma: 4.128 | error: 0.413737 | coeff: 0.413737 | eff: 1 | fom: 0.417276 | r2int: 0.0855892 | r2eff: 0 | hits: 2 ] keV + 6 9.247724 keV + 7 64.317368 keV + 8 559.619706 keV + 9 134.395956 keV + 10 424.258890 keV + 11 244.049965 keV + 12 191.236860 keV + 13 55.691420 keV + 14 4.401569 keV + 15 87.341128 keV + 16 168.215322 keV + 17 56.245509 keV + 18 740.139518 keV + 19 569.055790 keV + 21 87.833930 keV + 22 608.557255 keV + 23 1276.402029 keV + 24 549.418144 keV + 25 1212.520222 keV + 26 2244.582446 keV + 27 1820.610114 keV + 28 629.423942 keV + 29 2448.415695 keV + 30 798.116118 keV + 31 3048.589553 keV + 32 3276.861433 keV + 33 2560.930036 keV + 34 658.454766 keV + 35 677.373009 keV + 36 6942.614672 keV + 37 1763.658511 keV + 38 1027.901733 keV + 39 1316.930736 keV + 40 3780.670232 keV + 41 3739.034138 keV + 42 518.520826 keV + 43 5854.174850 keV + 44 1425.517389 keV + 45 1283.539620 keV + 46 5088.452351 keV + 47 2792.825195 keV + 48 772.515743 keV + 49 1806.930070 keV + 50 2097.336382 keV + 51 5608.376230 keV + 52 4316.410428 keV + 53 6500.368879 keV + 54 6339.101893 keV + 55 10879.747003 keV + 56 11071.806607 keV + 57 23177.947778 keV + 58 11457.806663 keV + 59 5383.430010 keV + 60 6366.674464 keV + 61 28091.006435 keV + 62 15476.672841 keV + 63 12456.440294 keV + 64 5007.266450 keV + 65 7811.685208 keV + 66 22587.801014 keV + 67 9839.330253 keV + 68 24617.373788 keV + 69 6228.897703 keV + 70 9447.360322 keV + 71 9643.891591 keV + 72 5102.655286 keV + 73 6121.499052 keV + 74 4898.104264 keV + 75 27000.567879 keV + 76 23710.198802 keV + 77 21340.023631 keV + 78 28226.901781 keV + 79 23716.786352 keV + 80 32636.969393 keV + 81 397258.220704 keV + 82 347706.753115 keV + 83 384961.549225 keV + 84 23792.261913 keV + 85 30719.630678 keV + 86 339140.915115 keV + 87 296791.980610 keV + 88 331564.326361 keV + 89 29826.616230 keV + 90 34579.211698 keV + 91 424056.062194 keV + 92 360435.687986 keV + 93 462610.737666 keV + 94 29829.736440 keV + 95 25422.378218 keV + 96 23835.903669 keV + 97 27206.314251 keV + 98 37266.235218 keV + 99 34460.818528 keV + 100 317731.511183 keV + 101 334569.870222 keV + 102 322437.992484 keV + 103 346583.400284 keV + 104 309690.487524 keV + 105 343389.542558 keV + 106 365257.125317 keV + 107 366280.636033 keV + 108 385494.656530 keV + 109 343167.033994 keV + 110 328985.536361 keV + 111 373929.221975 keV + 112 406735.919922 keV + 113 406822.859485 keV + 114 360153.788454 keV + 115 323392.786707 keV + 116 384970.777622 keV + 117 397322.539719 keV + 118 406154.897307 keV + 119 370389.506929 keV + 120 342519.060900 keV + 121 361944.547109 keV + 122 365997.584059 keV + 123 368443.726574 keV + 124 331811.972919 keV + 0 1060.09 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV + 1 697.125 [sigma: 386.857 | error: 0.784792 | coeff: 0.784792 | eff: 1 | fom: 0.115975 | r2int: 0.307949 | r2eff: 0 | hits: 2 ] keV + 2 151.299 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV + 3 134.21 [sigma: 31.5075 | error: 0.524945 | coeff: 0.524945 | eff: 1 | fom: 0.259206 | r2int: 0.220454 | r2eff: 0 | hits: 5 ] keV 5 10.499 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 6 45.9275 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV - 7 110.676 [sigma: 21.0117 | error: 0.379699 | coeff: 0.379699 | eff: 1 | fom: 0.495443 | r2int: 0.108128 | r2eff: 0 | hits: 4 ] keV - 8 70.4621 [sigma: 2.23753 | error: 0.0449084 | coeff: 0.0449084 | eff: 1 | fom: 35.4174 | r2int: 0.00100838 | r2eff: 0 | hits: 2 ] keV - 9 178.404 [sigma: 19.1608 | error: 0.284156 | coeff: 0.284156 | eff: 1 | fom: 0.884622 | r2int: 0.0692098 | r2eff: 0 | hits: 7 ] keV - 10 509.868 [sigma: 173.216 | error: 0.480447 | coeff: 0.480447 | eff: 1 | fom: 0.309444 | r2int: 0.115414 | r2eff: 0 | hits: 2 ] keV - 11 106.589 [sigma: 16.2694 | error: 0.305274 | coeff: 0.305274 | eff: 1 | fom: 0.766466 | r2int: 0.0698941 | r2eff: 0 | hits: 4 ] keV - 12 770.201 [sigma: 360.038 | error: 0.809663 | coeff: 0.809663 | eff: 1 | fom: 0.108959 | r2int: 0.437036 | r2eff: 0 | hits: 3 ] keV - 13 7.83603 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 14 1208.64 [sigma: 854.389 | error: 0.999713 | coeff: 0.999713 | eff: 1 | fom: 0.0714696 | r2int: 0.499713 | r2eff: 0 | hits: 2 ] keV - 15 21.487 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 16 567.034 [sigma: 201.827 | error: 0.503368 | coeff: 0.503368 | eff: 1 | fom: 0.281904 | r2int: 0.12669 | r2eff: 0 | hits: 2 ] keV - 17 820.543 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 18 673.28 [sigma: 101.979 | error: 0.371013 | coeff: 0.371013 | eff: 1 | fom: 0.518913 | r2int: 0.114709 | r2eff: 0 | hits: 6 ] keV - 19 444.45 [sigma: 215.86 | error: 0.686853 | coeff: 0.686853 | eff: 1 | fom: 0.151406 | r2int: 0.235884 | r2eff: 0 | hits: 2 ] keV - 21 240.913 [sigma: 43.921 | error: 0.407659 | coeff: 0.407659 | eff: 1 | fom: 0.429811 | r2int: 0.132949 | r2eff: 0 | hits: 5 ] keV - 22 179.188 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV - 23 147.267 [sigma: 72.6422 | error: 0.854367 | coeff: 0.854367 | eff: 1 | fom: 0.097855 | r2int: 0.486629 | r2eff: 0 | hits: 3 ] keV - 24 2221.24 [sigma: 994 | error: 0.894994 | coeff: 0.894994 | eff: 1 | fom: 0.0891726 | r2int: 0.600761 | r2eff: 0 | hits: 4 ] keV - 25 41.5894 [sigma: 8.88981 | error: 0.427503 | coeff: 0.427503 | eff: 1 | fom: 0.390835 | r2int: 0.137069 | r2eff: 0 | hits: 4 ] keV - 26 81.119 [sigma: 14.3626 | error: 0.395909 | coeff: 0.395909 | eff: 1 | fom: 0.455703 | r2int: 0.125395 | r2eff: 0 | hits: 5 ] keV - 27 1249.18 [sigma: 343.166 | error: 0.672904 | coeff: 0.672904 | eff: 1 | fom: 0.157749 | r2int: 0.377334 | r2eff: 0 | hits: 6 ] keV - 28 1272.27 [sigma: 362.974 | error: 0.69883 | coeff: 0.69883 | eff: 1 | fom: 0.146261 | r2int: 0.406969 | r2eff: 0 | hits: 6 ] keV - 29 1914.56 [sigma: 261.822 | error: 0.432451 | coeff: 0.432451 | eff: 1 | fom: 0.381943 | r2int: 0.168312 | r2eff: 0 | hits: 10 ] keV - 30 3610.59 [sigma: 710.689 | error: 0.520775 | coeff: 0.520775 | eff: 1 | fom: 0.263374 | r2int: 0.232463 | r2eff: 0 | hits: 7 ] keV - 31 1179.7 [sigma: 93.1318 | error: 0.334936 | coeff: 0.334936 | eff: 1 | fom: 0.63672 | r2int: 0.10595 | r2eff: 0 | hits: 18 ] keV - 32 8239.69 [sigma: 806.607 | error: 0.415324 | coeff: 0.415324 | eff: 1 | fom: 0.414092 | r2int: 0.162911 | r2eff: 0 | hits: 18 ] keV - 33 4017.96 [sigma: 394.85 | error: 0.41693 | coeff: 0.41693 | eff: 1 | fom: 0.410909 | r2int: 0.164173 | r2eff: 0 | hits: 18 ] keV - 34 538.132 [sigma: 68.1102 | error: 0.456347 | coeff: 0.456347 | eff: 1 | fom: 0.34299 | r2int: 0.192233 | r2eff: 0 | hits: 13 ] keV - 35 1369.33 [sigma: 347.611 | error: 0.718009 | coeff: 0.718009 | eff: 1 | fom: 0.138552 | r2int: 0.451095 | r2eff: 0 | hits: 8 ] keV - 36 6603.43 [sigma: 656.883 | error: 0.422041 | coeff: 0.422041 | eff: 1 | fom: 0.401016 | r2int: 0.168223 | r2eff: 0 | hits: 18 ] keV - 37 3140.09 [sigma: 406.199 | error: 0.548823 | coeff: 0.548823 | eff: 1 | fom: 0.237141 | r2int: 0.284473 | r2eff: 0 | hits: 18 ] keV - 38 1953.43 [sigma: 198.11 | error: 0.405666 | coeff: 0.405666 | eff: 1 | fom: 0.434046 | r2int: 0.154279 | r2eff: 0 | hits: 16 ] keV - 39 1208.15 [sigma: 207.253 | error: 0.568952 | coeff: 0.568952 | eff: 1 | fom: 0.220659 | r2int: 0.294278 | r2eff: 0 | hits: 11 ] keV - 40 2001.91 [sigma: 615.317 | error: 0.869359 | coeff: 0.869359 | eff: 1 | fom: 0.0945091 | r2int: 0.661312 | r2eff: 0 | hits: 8 ] keV - 41 3901.57 [sigma: 677.254 | error: 0.69434 | coeff: 0.69434 | eff: 1 | fom: 0.148159 | r2int: 0.451977 | r2eff: 0 | hits: 16 ] keV - 42 781.178 [sigma: 85.0025 | error: 0.435253 | coeff: 0.435253 | eff: 1 | fom: 0.377041 | r2int: 0.177605 | r2eff: 0 | hits: 16 ] keV - 43 6339.94 [sigma: 541.734 | error: 0.391571 | coeff: 0.391571 | eff: 1 | fom: 0.465856 | r2int: 0.146026 | r2eff: 0 | hits: 21 ] keV - 44 406.602 [sigma: 87.569 | error: 0.481577 | coeff: 0.481577 | eff: 1 | fom: 0.307992 | r2int: 0.185533 | r2eff: 0 | hits: 5 ] keV - 45 2404.85 [sigma: 348.299 | error: 0.457999 | coeff: 0.457999 | eff: 1 | fom: 0.340521 | r2int: 0.188787 | r2eff: 0 | hits: 10 ] keV - 46 3183.23 [sigma: 474.23 | error: 0.494103 | coeff: 0.494103 | eff: 1 | fom: 0.292575 | r2int: 0.221943 | r2eff: 0 | hits: 11 ] keV - 47 4200.38 [sigma: 650.841 | error: 0.536756 | coeff: 0.536756 | eff: 1 | fom: 0.247923 | r2int: 0.264099 | r2eff: 0 | hits: 12 ] keV - 48 948.026 [sigma: 134.509 | error: 0.491498 | coeff: 0.491498 | eff: 1 | fom: 0.295685 | r2int: 0.221439 | r2eff: 0 | hits: 12 ] keV - 49 1393.61 [sigma: 350.448 | error: 0.5623 | coeff: 0.5623 | eff: 1 | fom: 0.22591 | r2int: 0.252945 | r2eff: 0 | hits: 5 ] keV - 50 1135.81 [sigma: 96.965 | error: 0.372121 | coeff: 0.372121 | eff: 1 | fom: 0.515827 | r2int: 0.131186 | r2eff: 0 | hits: 19 ] keV - 51 2940.75 [sigma: 360.438 | error: 0.548134 | coeff: 0.548134 | eff: 1 | fom: 0.237738 | r2int: 0.285429 | r2eff: 0 | hits: 20 ] keV - 52 5081.63 [sigma: 376.972 | error: 0.432559 | coeff: 0.432559 | eff: 1 | fom: 0.381751 | r2int: 0.181604 | r2eff: 0 | hits: 34 ] keV - 53 7691.85 [sigma: 382.721 | error: 0.330048 | coeff: 0.330048 | eff: 1 | fom: 0.655718 | r2int: 0.106456 | r2eff: 0 | hits: 44 ] keV - 54 3113.18 [sigma: 477.852 | error: 0.594476 | coeff: 0.594476 | eff: 1 | fom: 0.202117 | r2int: 0.329842 | r2eff: 0 | hits: 15 ] keV - 55 11038.9 [sigma: 564.739 | error: 0.30266 | coeff: 0.30266 | eff: 1 | fom: 0.779762 | r2int: 0.0889858 | r2eff: 0 | hits: 35 ] keV - 56 12591.7 [sigma: 505.577 | error: 0.300467 | coeff: 0.300467 | eff: 1 | fom: 0.791187 | r2int: 0.0886681 | r2eff: 0 | hits: 56 ] keV - 57 19534.5 [sigma: 600.776 | error: 0.259143 | coeff: 0.259143 | eff: 1 | fom: 1.06363 | r2int: 0.0662094 | r2eff: 0 | hits: 71 ] keV - 58 17079.8 [sigma: 710.734 | error: 0.297173 | coeff: 0.297173 | eff: 1 | fom: 0.808823 | r2int: 0.0865801 | r2eff: 0 | hits: 51 ] keV - 59 7468.12 [sigma: 471.073 | error: 0.383688 | coeff: 0.383688 | eff: 1 | fom: 0.485195 | r2int: 0.143237 | r2eff: 0 | hits: 37 ] keV - 60 2656.41 [sigma: 150.562 | error: 0.320623 | coeff: 0.320623 | eff: 1 | fom: 0.694836 | r2int: 0.0995868 | r2eff: 0 | hits: 32 ] keV - 61 20964.1 [sigma: 690.413 | error: 0.279447 | coeff: 0.279447 | eff: 1 | fom: 0.914689 | r2int: 0.077006 | r2eff: 0 | hits: 72 ] keV - 62 20152.2 [sigma: 633.932 | error: 0.261303 | coeff: 0.261303 | eff: 1 | fom: 1.04612 | r2int: 0.0672899 | r2eff: 0 | hits: 69 ] keV - 63 23653.5 [sigma: 787.407 | error: 0.257857 | coeff: 0.257857 | eff: 1 | fom: 1.07427 | r2int: 0.0653823 | r2eff: 0 | hits: 60 ] keV - 64 5120.41 [sigma: 323.992 | error: 0.410067 | coeff: 0.410067 | eff: 1 | fom: 0.424778 | r2int: 0.164151 | r2eff: 0 | hits: 42 ] keV - 65 5928.39 [sigma: 418.367 | error: 0.446324 | coeff: 0.446324 | eff: 1 | fom: 0.358568 | r2int: 0.194225 | r2eff: 0 | hits: 40 ] keV - 66 30515.9 [sigma: 805.915 | error: 0.219375 | coeff: 0.219375 | eff: 1 | fom: 1.48422 | r2int: 0.0474279 | r2eff: 0 | hits: 69 ] keV - 67 14352 [sigma: 532.005 | error: 0.298854 | coeff: 0.298854 | eff: 1 | fom: 0.799749 | r2int: 0.0879397 | r2eff: 0 | hits: 65 ] keV - 68 21742.1 [sigma: 773.949 | error: 0.266381 | coeff: 0.266381 | eff: 1 | fom: 1.00662 | r2int: 0.0696918 | r2eff: 0 | hits: 56 ] keV - 69 9961.83 [sigma: 446.613 | error: 0.268994 | coeff: 0.268994 | eff: 1 | fom: 0.987157 | r2int: 0.0703479 | r2eff: 0 | hits: 36 ] keV - 70 9190.99 [sigma: 656.633 | error: 0.342629 | coeff: 0.342629 | eff: 1 | fom: 0.608447 | r2int: 0.112291 | r2eff: 0 | hits: 23 ] keV - 71 4192.89 [sigma: 367.93 | error: 0.480632 | coeff: 0.480632 | eff: 1 | fom: 0.309205 | r2int: 0.223307 | r2eff: 0 | hits: 30 ] keV - 72 9173 [sigma: 409.509 | error: 0.309295 | coeff: 0.309295 | eff: 1 | fom: 0.746666 | r2int: 0.0936704 | r2eff: 0 | hits: 48 ] keV - 73 11806.9 [sigma: 499.676 | error: 0.270985 | coeff: 0.270985 | eff: 1 | fom: 0.972709 | r2int: 0.0716416 | r2eff: 0 | hits: 41 ] keV - 74 8520.73 [sigma: 633.47 | error: 0.371723 | coeff: 0.371723 | eff: 1 | fom: 0.516933 | r2int: 0.132651 | r2eff: 0 | hits: 25 ] keV - 75 22112.2 [sigma: 418.224 | error: 0.199269 | coeff: 0.199269 | eff: 1 | fom: 1.79884 | r2int: 0.0393503 | r2eff: 0 | hits: 111 ] keV - 76 24545.9 [sigma: 365.82 | error: 0.179462 | coeff: 0.179462 | eff: 1 | fom: 2.21783 | r2int: 0.0319845 | r2eff: 0 | hits: 145 ] keV - 77 28364.3 [sigma: 351.796 | error: 0.161236 | coeff: 0.161236 | eff: 1 | fom: 2.74755 | r2int: 0.0258433 | r2eff: 0 | hits: 169 ] keV - 78 33883.9 [sigma: 379.278 | error: 0.143346 | coeff: 0.143346 | eff: 1 | fom: 3.47617 | r2int: 0.0204228 | r2eff: 0 | hits: 164 ] keV - 79 29424.1 [sigma: 480.959 | error: 0.182751 | coeff: 0.182751 | eff: 1 | fom: 2.13871 | r2int: 0.0331308 | r2eff: 0 | hits: 125 ] keV - 80 27658.1 [sigma: 430.855 | error: 0.19643 | coeff: 0.19643 | eff: 1 | fom: 1.85122 | r2int: 0.038342 | r2eff: 0 | hits: 159 ] keV - 81 442246 [sigma: 1091.25 | error: 0.0412158 | coeff: 0.0412158 | eff: 1 | fom: 42.0478 | r2int: 0.00169266 | r2eff: 0 | hits: 279 ] keV - 82 343172 [sigma: 1157.14 | error: 0.0552003 | coeff: 0.0552003 | eff: 1 | fom: 23.4417 | r2int: 0.0030357 | r2eff: 0 | hits: 268 ] keV - 83 450217 [sigma: 1102.48 | error: 0.0412673 | coeff: 0.0412673 | eff: 1 | fom: 41.943 | r2int: 0.001697 | r2eff: 0 | hits: 284 ] keV - 84 29376.6 [sigma: 417.05 | error: 0.186728 | coeff: 0.186728 | eff: 1 | fom: 2.04858 | r2int: 0.0346658 | r2eff: 0 | hits: 173 ] keV - 85 34279 [sigma: 418.137 | error: 0.16044 | coeff: 0.16044 | eff: 1 | fom: 2.77488 | r2int: 0.0255923 | r2eff: 0 | hits: 173 ] keV - 86 357392 [sigma: 1163.36 | error: 0.0543715 | coeff: 0.0543715 | eff: 1 | fom: 24.1618 | r2int: 0.00294566 | r2eff: 0 | hits: 279 ] keV - 87 314486 [sigma: 1144.97 | error: 0.062744 | coeff: 0.062744 | eff: 1 | fom: 18.1437 | r2int: 0.00392356 | r2eff: 0 | hits: 297 ] keV - 88 300005 [sigma: 1136.63 | error: 0.0623698 | coeff: 0.0623698 | eff: 1 | fom: 18.3621 | r2int: 0.00387564 | r2eff: 0 | hits: 271 ] keV - 89 32378.9 [sigma: 364.429 | error: 0.15184 | coeff: 0.15184 | eff: 1 | fom: 3.09814 | r2int: 0.0229286 | r2eff: 0 | hits: 182 ] keV - 90 28740.9 [sigma: 342.728 | error: 0.161315 | coeff: 0.161315 | eff: 1 | fom: 2.74486 | r2int: 0.0258804 | r2eff: 0 | hits: 183 ] keV - 91 411491 [sigma: 1111.69 | error: 0.0456884 | coeff: 0.0456884 | eff: 1 | fom: 34.2185 | r2int: 0.00208013 | r2eff: 0 | hits: 286 ] keV - 92 367275 [sigma: 1143.26 | error: 0.052918 | coeff: 0.052918 | eff: 1 | fom: 25.5074 | r2int: 0.00279062 | r2eff: 0 | hits: 289 ] keV - 93 428724 [sigma: 1138.24 | error: 0.0442668 | coeff: 0.0442668 | eff: 1 | fom: 36.4515 | r2int: 0.0019525 | r2eff: 0 | hits: 278 ] keV - 94 34534.7 [sigma: 369.63 | error: 0.139961 | coeff: 0.139961 | eff: 1 | fom: 3.64632 | r2int: 0.0194747 | r2eff: 0 | hits: 171 ] keV - 95 23077 [sigma: 417.681 | error: 0.194095 | coeff: 0.194095 | eff: 1 | fom: 1.89603 | r2int: 0.0373452 | r2eff: 0 | hits: 115 ] keV - 96 30057 [sigma: 477.946 | error: 0.207328 | coeff: 0.207328 | eff: 1 | fom: 1.66172 | r2int: 0.0427319 | r2eff: 0 | hits: 170 ] keV - 97 30947.2 [sigma: 365.404 | error: 0.153041 | coeff: 0.153041 | eff: 1 | fom: 3.04971 | r2int: 0.023282 | r2eff: 0 | hits: 168 ] keV - 98 32135.5 [sigma: 418.898 | error: 0.161239 | coeff: 0.161239 | eff: 1 | fom: 2.74747 | r2int: 0.025828 | r2eff: 0 | hits: 153 ] keV - 99 23995.4 [sigma: 433.397 | error: 0.207513 | coeff: 0.207513 | eff: 1 | fom: 1.65876 | r2int: 0.0427353 | r2eff: 0 | hits: 132 ] keV - 100 344249 [sigma: 494.863 | error: 0.0343201 | coeff: 0.0343201 | eff: 1 | fom: 60.6421 | r2int: 0.00117581 | r2eff: 0 | hits: 570 ] keV - 101 330035 [sigma: 449.816 | error: 0.0361113 | coeff: 0.0361113 | eff: 1 | fom: 54.7754 | r2int: 0.00130217 | r2eff: 0 | hits: 702 ] keV - 102 357368 [sigma: 436.962 | error: 0.0337525 | coeff: 0.0337525 | eff: 1 | fom: 62.6988 | r2int: 0.00113774 | r2eff: 0 | hits: 762 ] keV - 103 347790 [sigma: 456.653 | error: 0.0349617 | coeff: 0.0349617 | eff: 1 | fom: 58.4368 | r2int: 0.0012206 | r2eff: 0 | hits: 709 ] keV - 104 313496 [sigma: 445.37 | error: 0.0341254 | coeff: 0.0341254 | eff: 1 | fom: 61.3362 | r2int: 0.00116252 | r2eff: 0 | hits: 577 ] keV - 105 328490 [sigma: 463.332 | error: 0.0363184 | coeff: 0.0363184 | eff: 1 | fom: 54.1525 | r2int: 0.00131704 | r2eff: 0 | hits: 663 ] keV - 106 355915 [sigma: 480.009 | error: 0.0391344 | coeff: 0.0391344 | eff: 1 | fom: 46.6395 | r2int: 0.00152968 | r2eff: 0 | hits: 842 ] keV - 107 376541 [sigma: 450.539 | error: 0.0359952 | coeff: 0.0359952 | eff: 1 | fom: 55.1293 | r2int: 0.00129422 | r2eff: 0 | hits: 905 ] keV - 108 395217 [sigma: 480.584 | error: 0.0363379 | coeff: 0.0363379 | eff: 1 | fom: 54.0945 | r2int: 0.00131896 | r2eff: 0 | hits: 893 ] keV - 109 336465 [sigma: 445.589 | error: 0.0347368 | coeff: 0.0347368 | eff: 1 | fom: 59.1962 | r2int: 0.00120489 | r2eff: 0 | hits: 688 ] keV - 110 352425 [sigma: 453.825 | error: 0.0347924 | coeff: 0.0347924 | eff: 1 | fom: 59.0071 | r2int: 0.00120885 | r2eff: 0 | hits: 730 ] keV - 111 389030 [sigma: 465.451 | error: 0.0359729 | coeff: 0.0359729 | eff: 1 | fom: 55.1976 | r2int: 0.00129262 | r2eff: 0 | hits: 904 ] keV - 112 418035 [sigma: 485.54 | error: 0.0353442 | coeff: 0.0353442 | eff: 1 | fom: 57.179 | r2int: 0.00124786 | r2eff: 0 | hits: 926 ] keV - 113 356689 [sigma: 464.512 | error: 0.0375186 | coeff: 0.0375186 | eff: 1 | fom: 50.7433 | r2int: 0.00140595 | r2eff: 0 | hits: 830 ] keV - 114 392187 [sigma: 488.005 | error: 0.033458 | coeff: 0.033458 | eff: 1 | fom: 63.8075 | r2int: 0.00111789 | r2eff: 0 | hits: 723 ] keV - 115 325449 [sigma: 446.803 | error: 0.0360366 | coeff: 0.0360366 | eff: 1 | fom: 55.0028 | r2int: 0.00129675 | r2eff: 0 | hits: 689 ] keV - 116 398825 [sigma: 478.296 | error: 0.0360179 | coeff: 0.0360179 | eff: 1 | fom: 55.06 | r2int: 0.00129585 | r2eff: 0 | hits: 902 ] keV - 117 387271 [sigma: 476.416 | error: 0.0368646 | coeff: 0.0368646 | eff: 1 | fom: 52.5597 | r2int: 0.00135748 | r2eff: 0 | hits: 898 ] keV - 118 386212 [sigma: 467.803 | error: 0.0350009 | coeff: 0.0350009 | eff: 1 | fom: 58.3059 | r2int: 0.0012236 | r2eff: 0 | hits: 835 ] keV - 119 351384 [sigma: 477.283 | error: 0.03586 | coeff: 0.03586 | eff: 1 | fom: 55.546 | r2int: 0.00128409 | r2eff: 0 | hits: 697 ] keV - 120 342498 [sigma: 440.653 | error: 0.0322931 | coeff: 0.0322931 | eff: 1 | fom: 68.4942 | r2int: 0.00104119 | r2eff: 0 | hits: 630 ] keV - 121 350874 [sigma: 465.067 | error: 0.0341803 | coeff: 0.0341803 | eff: 1 | fom: 61.1393 | r2int: 0.00116653 | r2eff: 0 | hits: 665 ] keV - 122 338602 [sigma: 477.562 | error: 0.0373155 | coeff: 0.0373155 | eff: 1 | fom: 51.2972 | r2int: 0.00139046 | r2eff: 0 | hits: 700 ] keV - 123 349420 [sigma: 458.791 | error: 0.0346893 | coeff: 0.0346893 | eff: 1 | fom: 59.3584 | r2int: 0.00120162 | r2eff: 0 | hits: 698 ] keV - 124 321166 [sigma: 456.506 | error: 0.034555 | coeff: 0.034555 | eff: 1 | fom: 59.8205 | r2int: 0.00119203 | r2eff: 0 | hits: 591 ] keV + 6 9.24772 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV + 7 64.3174 [sigma: 14.5832 | error: 0.392723 | coeff: 0.392723 | eff: 1 | fom: 0.463127 | r2int: 0.102821 | r2eff: 0 | hits: 3 ] keV + 8 559.62 [sigma: 77.0984 | error: 0.337464 | coeff: 0.337464 | eff: 1 | fom: 0.627215 | r2int: 0.0949017 | r2eff: 0 | hits: 6 ] keV + 9 134.396 [sigma: 69.5166 | error: 0.895907 | coeff: 0.895907 | eff: 1 | fom: 0.0889911 | r2int: 0.535099 | r2eff: 0 | hits: 3 ] keV + 10 424.259 [sigma: 233.751 | error: 0.779179 | coeff: 0.779179 | eff: 1 | fom: 0.117651 | r2int: 0.30356 | r2eff: 0 | hits: 2 ] keV + 11 244.05 [sigma: 106.485 | error: 0.755738 | coeff: 0.755738 | eff: 1 | fom: 0.125063 | r2int: 0.38076 | r2eff: 0 | hits: 3 ] keV + 12 191.237 [sigma: 16.7968 | error: 0.152131 | coeff: 0.152131 | eff: 1 | fom: 3.08631 | r2int: 0.0154291 | r2eff: 0 | hits: 3 ] keV + 13 55.6914 [sigma: 16.9319 | error: 0.526597 | coeff: 0.526597 | eff: 1 | fom: 0.257582 | r2int: 0.18487 | r2eff: 0 | hits: 3 ] keV + 14 4.40157 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV + 15 87.3411 [sigma: 9.56978 | error: 0.189777 | coeff: 0.189777 | eff: 1 | fom: 1.98328 | r2int: 0.0240102 | r2eff: 0 | hits: 3 ] keV + 16 168.215 [sigma: 73.9179 | error: 0.761105 | coeff: 0.761105 | eff: 1 | fom: 0.123306 | r2int: 0.386187 | r2eff: 0 | hits: 3 ] keV + 17 56.2455 [sigma: 22.1116 | error: 0.680916 | coeff: 0.680916 | eff: 1 | fom: 0.154058 | r2int: 0.309098 | r2eff: 0 | hits: 3 ] keV + 18 740.14 [sigma: 94.2053 | error: 0.381841 | coeff: 0.381841 | eff: 1 | fom: 0.489898 | r2int: 0.129603 | r2eff: 0 | hits: 9 ] keV + 19 569.056 [sigma: 190.359 | error: 0.669036 | coeff: 0.669036 | eff: 1 | fom: 0.159578 | r2int: 0.335706 | r2eff: 0 | hits: 4 ] keV + 21 87.8339 [sigma: 23.9763 | error: 0.472804 | coeff: 0.472804 | eff: 1 | fom: 0.319529 | r2int: 0.149029 | r2eff: 0 | hits: 3 ] keV + 22 608.557 [sigma: 370.816 | error: 0.861731 | coeff: 0.861731 | eff: 1 | fom: 0.0961896 | r2int: 0.37129 | r2eff: 0 | hits: 2 ] keV + 23 1276.4 [sigma: 495.037 | error: 0.950005 | coeff: 0.950005 | eff: 1 | fom: 0.0791444 | r2int: 0.752091 | r2eff: 0 | hits: 6 ] keV + 24 549.418 [sigma: 81.0734 | error: 0.329959 | coeff: 0.329959 | eff: 1 | fom: 0.656072 | r2int: 0.0870985 | r2eff: 0 | hits: 5 ] keV + 25 1212.52 [sigma: 237.44 | error: 0.553873 | coeff: 0.553873 | eff: 1 | fom: 0.232837 | r2int: 0.268428 | r2eff: 0 | hits: 8 ] keV + 26 2244.58 [sigma: 893.436 | error: 0.890047 | coeff: 0.890047 | eff: 1 | fom: 0.0901667 | r2int: 0.633747 | r2eff: 0 | hits: 5 ] keV + 27 1820.61 [sigma: 362.668 | error: 0.527037 | coeff: 0.527037 | eff: 1 | fom: 0.257152 | r2int: 0.238087 | r2eff: 0 | hits: 7 ] keV + 28 629.424 [sigma: 69.9032 | error: 0.333177 | coeff: 0.333177 | eff: 1 | fom: 0.64346 | r2int: 0.098673 | r2eff: 0 | hits: 9 ] keV + 29 2448.42 [sigma: 429.267 | error: 0.495892 | coeff: 0.495892 | eff: 1 | fom: 0.290468 | r2int: 0.21517 | r2eff: 0 | hits: 8 ] keV + 30 798.116 [sigma: 132.527 | error: 0.525095 | coeff: 0.525095 | eff: 1 | fom: 0.259058 | r2int: 0.248152 | r2eff: 0 | hits: 10 ] keV + 31 3048.59 [sigma: 523.06 | error: 0.641973 | coeff: 0.641973 | eff: 1 | fom: 0.173316 | r2int: 0.382691 | r2eff: 0 | hits: 14 ] keV + 32 3276.86 [sigma: 662.437 | error: 0.728883 | coeff: 0.728883 | eff: 1 | fom: 0.134449 | r2int: 0.490404 | r2eff: 0 | hits: 13 ] keV + 33 2560.93 [sigma: 460.748 | error: 0.539743 | coeff: 0.539743 | eff: 1 | fom: 0.245187 | r2int: 0.258954 | r2eff: 0 | hits: 9 ] keV + 34 658.455 [sigma: 87.5918 | error: 0.399079 | coeff: 0.399079 | eff: 1 | fom: 0.448492 | r2int: 0.141568 | r2eff: 0 | hits: 9 ] keV + 35 677.373 [sigma: 113.221 | error: 0.472765 | coeff: 0.472765 | eff: 1 | fom: 0.319582 | r2int: 0.195568 | r2eff: 0 | hits: 8 ] keV + 36 6942.61 [sigma: 621.626 | error: 0.400425 | coeff: 0.400425 | eff: 1 | fom: 0.445482 | r2int: 0.152323 | r2eff: 0 | hits: 20 ] keV + 37 1763.66 [sigma: 204.977 | error: 0.545132 | coeff: 0.545132 | eff: 1 | fom: 0.240364 | r2int: 0.283661 | r2eff: 0 | hits: 22 ] keV + 38 1027.9 [sigma: 142.625 | error: 0.438777 | coeff: 0.438777 | eff: 1 | fom: 0.371008 | r2int: 0.173273 | r2eff: 0 | hits: 10 ] keV + 39 1316.93 [sigma: 274.931 | error: 0.723187 | coeff: 0.723187 | eff: 1 | fom: 0.136575 | r2int: 0.479417 | r2eff: 0 | hits: 12 ] keV + 40 3780.67 [sigma: 532.899 | error: 0.545911 | coeff: 0.545911 | eff: 1 | fom: 0.239678 | r2int: 0.278151 | r2eff: 0 | hits: 15 ] keV + 41 3739.03 [sigma: 723.858 | error: 0.724366 | coeff: 0.724366 | eff: 1 | fom: 0.136131 | r2int: 0.487227 | r2eff: 0 | hits: 14 ] keV + 42 518.521 [sigma: 25.0822 | error: 0.205227 | coeff: 0.205227 | eff: 1 | fom: 1.69591 | r2int: 0.0397783 | r2eff: 0 | hits: 18 ] keV + 43 5854.17 [sigma: 469.541 | error: 0.439307 | coeff: 0.439307 | eff: 1 | fom: 0.370114 | r2int: 0.186558 | r2eff: 0 | hits: 30 ] keV + 44 1425.52 [sigma: 343.388 | error: 0.681329 | coeff: 0.681329 | eff: 1 | fom: 0.153871 | r2int: 0.406183 | r2eff: 0 | hits: 8 ] keV + 45 1283.54 [sigma: 228.665 | error: 0.563365 | coeff: 0.563365 | eff: 1 | fom: 0.225056 | r2int: 0.285643 | r2eff: 0 | hits: 10 ] keV + 46 5088.45 [sigma: 650.521 | error: 0.478343 | coeff: 0.478343 | eff: 1 | fom: 0.312171 | r2int: 0.212469 | r2eff: 0 | hits: 14 ] keV + 47 2792.83 [sigma: 503.037 | error: 0.742643 | coeff: 0.742643 | eff: 1 | fom: 0.129512 | r2int: 0.519077 | r2eff: 0 | hits: 17 ] keV + 48 772.516 [sigma: 47.875 | error: 0.231881 | coeff: 0.231881 | eff: 1 | fom: 1.32843 | r2int: 0.0499283 | r2eff: 0 | hits: 14 ] keV + 49 1806.93 [sigma: 287.347 | error: 0.42074 | coeff: 0.42074 | eff: 1 | fom: 0.4035 | r2int: 0.151733 | r2eff: 0 | hits: 7 ] keV + 50 2097.34 [sigma: 235.526 | error: 0.489493 | coeff: 0.489493 | eff: 1 | fom: 0.298111 | r2int: 0.226993 | r2eff: 0 | hits: 19 ] keV + 51 5608.38 [sigma: 351.35 | error: 0.306908 | coeff: 0.306908 | eff: 1 | fom: 0.758326 | r2int: 0.0902677 | r2eff: 0 | hits: 24 ] keV + 52 4316.41 [sigma: 290.471 | error: 0.37468 | coeff: 0.37468 | eff: 1 | fom: 0.508804 | r2int: 0.135857 | r2eff: 0 | hits: 31 ] keV + 53 6500.37 [sigma: 418.143 | error: 0.358152 | coeff: 0.358152 | eff: 1 | fom: 0.556847 | r2int: 0.124135 | r2eff: 0 | hits: 31 ] keV + 54 6339.1 [sigma: 639.591 | error: 0.416006 | coeff: 0.416006 | eff: 1 | fom: 0.412737 | r2int: 0.162881 | r2eff: 0 | hits: 17 ] keV + 55 10879.7 [sigma: 598.022 | error: 0.343266 | coeff: 0.343266 | eff: 1 | fom: 0.606194 | r2int: 0.11481 | r2eff: 0 | hits: 39 ] keV + 56 11071.8 [sigma: 383.173 | error: 0.272503 | coeff: 0.272503 | eff: 1 | fom: 0.961896 | r2int: 0.0730604 | r2eff: 0 | hits: 62 ] keV + 57 23177.9 [sigma: 700.646 | error: 0.245581 | coeff: 0.245581 | eff: 1 | fom: 1.18435 | r2int: 0.0593964 | r2eff: 0 | hits: 66 ] keV + 58 11457.8 [sigma: 533.968 | error: 0.345617 | coeff: 0.345617 | eff: 1 | fom: 0.597973 | r2int: 0.117279 | r2eff: 0 | hits: 55 ] keV + 59 5383.43 [sigma: 408.968 | error: 0.4091 | coeff: 0.4091 | eff: 1 | fom: 0.426789 | r2int: 0.161591 | r2eff: 0 | hits: 29 ] keV + 60 6366.67 [sigma: 248.956 | error: 0.268076 | coeff: 0.268076 | eff: 1 | fom: 0.993929 | r2int: 0.0703358 | r2eff: 0 | hits: 47 ] keV + 61 28091 [sigma: 776.432 | error: 0.236155 | coeff: 0.236155 | eff: 1 | fom: 1.28079 | r2int: 0.0550053 | r2eff: 0 | hits: 73 ] keV + 62 15476.7 [sigma: 552.314 | error: 0.287717 | coeff: 0.287717 | eff: 1 | fom: 0.862861 | r2int: 0.0815075 | r2eff: 0 | hits: 65 ] keV + 63 12456.4 [sigma: 408.579 | error: 0.266473 | coeff: 0.266473 | eff: 1 | fom: 1.00592 | r2int: 0.0699322 | r2eff: 0 | hits: 66 ] keV + 64 5007.27 [sigma: 344.807 | error: 0.435518 | coeff: 0.435518 | eff: 1 | fom: 0.376583 | r2int: 0.184934 | r2eff: 0 | hits: 40 ] keV + 65 7811.69 [sigma: 415.047 | error: 0.348407 | coeff: 0.348407 | eff: 1 | fom: 0.588436 | r2int: 0.118564 | r2eff: 0 | hits: 43 ] keV + 66 22587.8 [sigma: 625.059 | error: 0.224812 | coeff: 0.224812 | eff: 1 | fom: 1.4133 | r2int: 0.0497745 | r2eff: 0 | hits: 66 ] keV + 67 9839.33 [sigma: 318.38 | error: 0.260877 | coeff: 0.260877 | eff: 1 | fom: 1.04954 | r2int: 0.0670099 | r2eff: 0 | hits: 65 ] keV + 68 24617.4 [sigma: 763.283 | error: 0.244141 | coeff: 0.244141 | eff: 1 | fom: 1.19837 | r2int: 0.0586433 | r2eff: 0 | hits: 62 ] keV + 69 6228.9 [sigma: 448.836 | error: 0.394673 | coeff: 0.394673 | eff: 1 | fom: 0.458562 | r2int: 0.150574 | r2eff: 0 | hits: 30 ] keV + 70 9447.36 [sigma: 625.845 | error: 0.337787 | coeff: 0.337787 | eff: 1 | fom: 0.626017 | r2int: 0.109712 | r2eff: 0 | hits: 26 ] keV + 71 9643.89 [sigma: 499.631 | error: 0.310848 | coeff: 0.310848 | eff: 1 | fom: 0.739221 | r2int: 0.0939427 | r2eff: 0 | hits: 36 ] keV + 72 5102.66 [sigma: 308.512 | error: 0.372707 | coeff: 0.372707 | eff: 1 | fom: 0.514205 | r2int: 0.135255 | r2eff: 0 | hits: 38 ] keV + 73 6121.5 [sigma: 352.146 | error: 0.330462 | coeff: 0.330462 | eff: 1 | fom: 0.654077 | r2int: 0.105896 | r2eff: 0 | hits: 33 ] keV + 74 4898.1 [sigma: 483.566 | error: 0.452415 | coeff: 0.452415 | eff: 1 | fom: 0.348978 | r2int: 0.194933 | r2eff: 0 | hits: 21 ] keV + 75 27000.6 [sigma: 397.877 | error: 0.163429 | coeff: 0.163429 | eff: 1 | fom: 2.67433 | r2int: 0.0264918 | r2eff: 0 | hits: 123 ] keV + 76 23710.2 [sigma: 310.654 | error: 0.161534 | coeff: 0.161534 | eff: 1 | fom: 2.73744 | r2int: 0.0259216 | r2eff: 0 | hits: 152 ] keV + 77 21340 [sigma: 300.811 | error: 0.173216 | coeff: 0.173216 | eff: 1 | fom: 2.38066 | r2int: 0.029805 | r2eff: 0 | hits: 151 ] keV + 78 28226.9 [sigma: 421.411 | error: 0.177277 | coeff: 0.177277 | eff: 1 | fom: 2.27283 | r2int: 0.0312042 | r2eff: 0 | hits: 141 ] keV + 79 23716.8 [sigma: 496.768 | error: 0.222657 | coeff: 0.222657 | eff: 1 | fom: 1.44078 | r2int: 0.0491375 | r2eff: 0 | hits: 113 ] keV + 80 32637 [sigma: 461.592 | error: 0.166145 | coeff: 0.166145 | eff: 1 | fom: 2.58759 | r2int: 0.0274042 | r2eff: 0 | hits: 138 ] keV + 81 397258 [sigma: 1131.4 | error: 0.0460992 | coeff: 0.0460992 | eff: 1 | fom: 33.6113 | r2int: 0.00211702 | r2eff: 0 | hits: 262 ] keV + 82 347707 [sigma: 1168.18 | error: 0.0539644 | coeff: 0.0539644 | eff: 1 | fom: 24.5277 | r2int: 0.00290087 | r2eff: 0 | hits: 258 ] keV + 83 384962 [sigma: 1138.51 | error: 0.0478708 | coeff: 0.0478708 | eff: 1 | fom: 31.1696 | r2int: 0.00228286 | r2eff: 0 | hits: 262 ] keV + 84 23792.3 [sigma: 379.148 | error: 0.202829 | coeff: 0.202829 | eff: 1 | fom: 1.73625 | r2int: 0.0408857 | r2eff: 0 | hits: 162 ] keV + 85 30719.6 [sigma: 363.858 | error: 0.153522 | coeff: 0.153522 | eff: 1 | fom: 3.03062 | r2int: 0.0234287 | r2eff: 0 | hits: 168 ] keV + 86 339141 [sigma: 1150.75 | error: 0.0549225 | coeff: 0.0549225 | eff: 1 | fom: 23.6794 | r2int: 0.00300497 | r2eff: 0 | hits: 262 ] keV + 87 296792 [sigma: 1172.48 | error: 0.0641881 | coeff: 0.0641881 | eff: 1 | fom: 17.3366 | r2int: 0.0041045 | r2eff: 0 | hits: 264 ] keV + 88 331564 [sigma: 1162.79 | error: 0.0575188 | coeff: 0.0575188 | eff: 1 | fom: 21.59 | r2int: 0.00329611 | r2eff: 0 | hits: 269 ] keV + 89 29826.6 [sigma: 434.116 | error: 0.176466 | coeff: 0.176466 | eff: 1 | fom: 2.29377 | r2int: 0.0309283 | r2eff: 0 | hits: 147 ] keV + 90 34579.2 [sigma: 420.982 | error: 0.155909 | coeff: 0.155909 | eff: 1 | fom: 2.93854 | r2int: 0.0241593 | r2eff: 0 | hits: 164 ] keV + 91 424056 [sigma: 1116.32 | error: 0.0444415 | coeff: 0.0444415 | eff: 1 | fom: 36.1656 | r2int: 0.00196811 | r2eff: 0 | hits: 285 ] keV + 92 360436 [sigma: 1148.54 | error: 0.0533207 | coeff: 0.0533207 | eff: 1 | fom: 25.1235 | r2int: 0.00283294 | r2eff: 0 | hits: 280 ] keV + 93 462611 [sigma: 1120.67 | error: 0.0410397 | coeff: 0.0410397 | eff: 1 | fom: 42.4096 | r2int: 0.00167839 | r2eff: 0 | hits: 287 ] keV + 94 29829.7 [sigma: 347.788 | error: 0.149309 | coeff: 0.149309 | eff: 1 | fom: 3.20404 | r2int: 0.0221574 | r2eff: 0 | hits: 164 ] keV + 95 25422.4 [sigma: 409.353 | error: 0.180027 | coeff: 0.180027 | eff: 1 | fom: 2.20393 | r2int: 0.0321504 | r2eff: 0 | hits: 125 ] keV + 96 23835.9 [sigma: 318.704 | error: 0.177887 | coeff: 0.177887 | eff: 1 | fom: 2.25728 | r2int: 0.0314648 | r2eff: 0 | hits: 177 ] keV + 97 27206.3 [sigma: 354.773 | error: 0.164946 | coeff: 0.164946 | eff: 1 | fom: 2.62536 | r2int: 0.0270371 | r2eff: 0 | hits: 160 ] keV + 98 37266.2 [sigma: 596.021 | error: 0.206683 | coeff: 0.206683 | eff: 1 | fom: 1.6721 | r2int: 0.042462 | r2eff: 0 | hits: 167 ] keV + 99 34460.8 [sigma: 481.473 | error: 0.164129 | coeff: 0.164129 | eff: 1 | fom: 2.65155 | r2int: 0.0267432 | r2eff: 0 | hits: 138 ] keV + 100 317732 [sigma: 462.119 | error: 0.034295 | coeff: 0.034295 | eff: 1 | fom: 60.731 | r2int: 0.00117403 | r2eff: 0 | hits: 556 ] keV + 101 334570 [sigma: 436.881 | error: 0.0343502 | coeff: 0.0343502 | eff: 1 | fom: 60.536 | r2int: 0.00117823 | r2eff: 0 | hits: 692 ] keV + 102 322438 [sigma: 432.686 | error: 0.0361323 | coeff: 0.0361323 | eff: 1 | fom: 54.7118 | r2int: 0.00130374 | r2eff: 0 | hits: 725 ] keV + 103 346583 [sigma: 475.909 | error: 0.0361478 | coeff: 0.0361478 | eff: 1 | fom: 54.6647 | r2int: 0.00130478 | r2eff: 0 | hits: 693 ] keV + 104 309690 [sigma: 434.207 | error: 0.0338825 | coeff: 0.0338825 | eff: 1 | fom: 62.2187 | r2int: 0.00114606 | r2eff: 0 | hits: 584 ] keV + 105 343390 [sigma: 475.564 | error: 0.0359544 | coeff: 0.0359544 | eff: 1 | fom: 55.2545 | r2int: 0.0012908 | r2eff: 0 | hits: 674 ] keV + 106 365257 [sigma: 480.507 | error: 0.038105 | coeff: 0.038105 | eff: 1 | fom: 49.1935 | r2int: 0.00145026 | r2eff: 0 | hits: 839 ] keV + 107 366281 [sigma: 456.199 | error: 0.0365037 | coeff: 0.0365037 | eff: 1 | fom: 53.6041 | r2int: 0.00133097 | r2eff: 0 | hits: 859 ] keV + 108 385495 [sigma: 483.028 | error: 0.0371068 | coeff: 0.0371068 | eff: 1 | fom: 51.8758 | r2int: 0.00137534 | r2eff: 0 | hits: 877 ] keV + 109 343167 [sigma: 467.273 | error: 0.0357416 | coeff: 0.0357416 | eff: 1 | fom: 55.9143 | r2int: 0.00127561 | r2eff: 0 | hits: 689 ] keV + 110 328986 [sigma: 469.262 | error: 0.0373595 | coeff: 0.0373595 | eff: 1 | fom: 51.1764 | r2int: 0.0013937 | r2eff: 0 | hits: 686 ] keV + 111 373929 [sigma: 456.337 | error: 0.0361613 | coeff: 0.0361613 | eff: 1 | fom: 54.6241 | r2int: 0.00130615 | r2eff: 0 | hits: 878 ] keV + 112 406736 [sigma: 469.209 | error: 0.0345694 | coeff: 0.0345694 | eff: 1 | fom: 55.786 | r2int: 0.00119371 | r2eff: 0 | hits: 898 ] keV + 113 406823 [sigma: 474.731 | error: 0.0350854 | coeff: 0.0350854 | eff: 1 | fom: 54.1571 | r2int: 0.00122962 | r2eff: 0 | hits: 904 ] keV + 114 360154 [sigma: 454.519 | error: 0.0338399 | coeff: 0.0338399 | eff: 1 | fom: 58.2172 | r2int: 0.00114354 | r2eff: 0 | hits: 719 ] keV + 115 323393 [sigma: 448.89 | error: 0.0358755 | coeff: 0.0358755 | eff: 1 | fom: 51.7981 | r2int: 0.00128512 | r2eff: 0 | hits: 668 ] keV + 116 384971 [sigma: 465.004 | error: 0.0359742 | coeff: 0.0359742 | eff: 1 | fom: 51.5142 | r2int: 0.00129268 | r2eff: 0 | hits: 887 ] keV + 117 397323 [sigma: 496.285 | error: 0.0381326 | coeff: 0.0381326 | eff: 1 | fom: 45.8476 | r2int: 0.00145253 | r2eff: 0 | hits: 932 ] keV + 118 406155 [sigma: 468.895 | error: 0.0343831 | coeff: 0.0343831 | eff: 1 | fom: 56.392 | r2int: 0.00118087 | r2eff: 0 | hits: 887 ] keV + 119 370390 [sigma: 475.979 | error: 0.0346733 | coeff: 0.0346733 | eff: 1 | fom: 55.4522 | r2int: 0.00120058 | r2eff: 0 | hits: 728 ] keV + 120 342519 [sigma: 451.725 | error: 0.0327856 | coeff: 0.0327856 | eff: 1 | fom: 62.0213 | r2int: 0.00107316 | r2eff: 0 | hits: 618 ] keV + 121 361945 [sigma: 477.909 | error: 0.0346336 | coeff: 0.0346336 | eff: 1 | fom: 55.5793 | r2int: 0.00119774 | r2eff: 0 | hits: 688 ] keV + 122 365998 [sigma: 463.348 | error: 0.0348779 | coeff: 0.0348779 | eff: 1 | fom: 54.8036 | r2int: 0.00121486 | r2eff: 0 | hits: 759 ] keV + 123 368444 [sigma: 486.067 | error: 0.0354972 | coeff: 0.0354972 | eff: 1 | fom: 52.9078 | r2int: 0.00125831 | r2eff: 0 | hits: 724 ] keV + 124 331812 [sigma: 461.039 | error: 0.0344295 | coeff: 0.0344295 | eff: 1 | fom: 56.2404 | r2int: 0.00118346 | r2eff: 0 | hits: 614 ] keV ============================================================ closed file mfd_tl_EnergyDeposit.out for output ============================================================ opened file mfd_tg_EnergyDeposit.out for output ============================================================ - 0 1991.727437 keV - 1 77.491062 keV - 2 33.917923 keV - 3 285.083670 keV - 4 14.110093 keV + 0 1060.093224 keV + 1 697.124697 keV + 2 151.298905 keV + 3 134.210177 keV 5 10.498991 keV - 6 45.927514 keV - 7 110.675816 keV - 8 70.462143 keV - 9 178.404244 keV - 10 509.868218 keV - 11 106.589157 keV - 12 770.201130 keV - 13 7.836033 keV - 14 1208.635109 keV - 15 21.487003 keV - 16 567.033635 keV - 17 820.543356 keV - 18 673.280342 keV - 19 444.450384 keV - 21 240.912888 keV - 22 179.188023 keV - 23 147.266948 keV - 24 2221.243612 keV - 25 41.589433 keV - 26 81.118959 keV - 27 1249.184277 keV - 28 1272.271674 keV - 29 1914.564921 keV - 30 3610.594070 keV - 31 1179.702629 keV - 32 8239.692255 keV - 33 4017.958218 keV - 34 538.132063 keV - 35 1369.333185 keV - 36 6603.428916 keV - 37 3140.091933 keV - 38 1953.426346 keV - 39 1208.153833 keV - 40 2001.912541 keV - 41 3901.565410 keV - 42 781.178288 keV - 43 6339.939160 keV - 44 406.601894 keV - 45 2404.847783 keV - 46 3183.231255 keV - 47 4200.379557 keV - 48 948.025821 keV - 49 1393.606793 keV - 50 1135.814907 keV - 51 2940.749354 keV - 52 5081.633304 keV - 53 7691.853572 keV - 54 3113.180921 keV - 55 11038.922420 keV - 56 12591.714828 keV - 57 19534.481189 keV - 58 17079.814748 keV - 59 7468.116050 keV - 60 2656.414797 keV - 61 20964.079379 keV - 62 20152.189174 keV - 63 23653.504056 keV - 64 5120.407823 keV - 65 5928.393230 keV - 66 30515.935054 keV - 67 14352.038965 keV - 68 21742.147688 keV - 69 9961.834026 keV - 70 9190.986869 keV - 71 4192.889330 keV - 72 9173.003045 keV - 73 11806.908234 keV - 74 8520.734621 keV - 75 22112.156418 keV - 76 24545.926773 keV - 77 28364.256550 keV - 78 33883.940326 keV - 79 29424.065371 keV - 80 27658.116724 keV - 81 442245.973880 keV - 82 343171.658475 keV - 83 450217.167553 keV - 84 29376.622096 keV - 85 34279.039254 keV - 86 357391.892088 keV - 87 314485.899966 keV - 88 300004.500075 keV - 89 32378.946997 keV - 90 28740.852927 keV - 91 411490.770383 keV - 92 367275.204939 keV - 93 428723.904582 keV - 94 34534.742637 keV - 95 23077.007295 keV - 96 30057.027154 keV - 97 30947.222021 keV - 98 32135.475186 keV - 99 23995.432973 keV - 100 344249.396967 keV - 101 330035.452213 keV - 102 357367.798001 keV - 103 347790.095126 keV - 104 313495.543692 keV - 105 328489.751258 keV - 106 355915.032410 keV - 107 376541.162251 keV - 108 395217.422386 keV - 109 336464.887469 keV - 110 352424.687405 keV - 111 389029.630380 keV - 112 418034.813411 keV - 113 356688.506864 keV - 114 392187.164438 keV - 115 325448.540134 keV - 116 398825.049225 keV - 117 387271.201883 keV - 118 386212.240370 keV - 119 351384.141043 keV - 120 342498.187441 keV - 121 350873.709398 keV - 122 338602.368745 keV - 123 349420.177365 keV - 124 321165.757453 keV + 6 9.247724 keV + 7 64.317368 keV + 8 559.619706 keV + 9 134.395956 keV + 10 424.258890 keV + 11 244.049965 keV + 12 191.236860 keV + 13 55.691420 keV + 14 4.401569 keV + 15 87.341128 keV + 16 168.215322 keV + 17 56.245509 keV + 18 740.139518 keV + 19 569.055790 keV + 21 87.833930 keV + 22 608.557255 keV + 23 1276.402029 keV + 24 549.418144 keV + 25 1212.520222 keV + 26 2244.582446 keV + 27 1820.610114 keV + 28 629.423942 keV + 29 2448.415695 keV + 30 798.116118 keV + 31 3048.589553 keV + 32 3276.861433 keV + 33 2560.930036 keV + 34 658.454766 keV + 35 677.373009 keV + 36 6942.614672 keV + 37 1763.658511 keV + 38 1027.901733 keV + 39 1316.930736 keV + 40 3780.670232 keV + 41 3739.034138 keV + 42 518.520826 keV + 43 5854.174850 keV + 44 1425.517389 keV + 45 1283.539620 keV + 46 5088.452351 keV + 47 2792.825195 keV + 48 772.515743 keV + 49 1806.930070 keV + 50 2097.336382 keV + 51 5608.376230 keV + 52 4316.410428 keV + 53 6500.368879 keV + 54 6339.101893 keV + 55 10879.747003 keV + 56 11071.806607 keV + 57 23177.947778 keV + 58 11457.806663 keV + 59 5383.430010 keV + 60 6366.674464 keV + 61 28091.006435 keV + 62 15476.672841 keV + 63 12456.440294 keV + 64 5007.266450 keV + 65 7811.685208 keV + 66 22587.801014 keV + 67 9839.330253 keV + 68 24617.373788 keV + 69 6228.897703 keV + 70 9447.360322 keV + 71 9643.891591 keV + 72 5102.655286 keV + 73 6121.499052 keV + 74 4898.104264 keV + 75 27000.567879 keV + 76 23710.198802 keV + 77 21340.023631 keV + 78 28226.901781 keV + 79 23716.786352 keV + 80 32636.969393 keV + 81 397258.220704 keV + 82 347706.753115 keV + 83 384961.549225 keV + 84 23792.261913 keV + 85 30719.630678 keV + 86 339140.915115 keV + 87 296791.980610 keV + 88 331564.326361 keV + 89 29826.616230 keV + 90 34579.211698 keV + 91 424056.062194 keV + 92 360435.687986 keV + 93 462610.737666 keV + 94 29829.736440 keV + 95 25422.378218 keV + 96 23835.903669 keV + 97 27206.314251 keV + 98 37266.235218 keV + 99 34460.818528 keV + 100 317731.511183 keV + 101 334569.870222 keV + 102 322437.992484 keV + 103 346583.400284 keV + 104 309690.487524 keV + 105 343389.542558 keV + 106 365257.125317 keV + 107 366280.636033 keV + 108 385494.656530 keV + 109 343167.033994 keV + 110 328985.536361 keV + 111 373929.221975 keV + 112 406735.919922 keV + 113 406822.859485 keV + 114 360153.788454 keV + 115 323392.786707 keV + 116 384970.777622 keV + 117 397322.539719 keV + 118 406154.897307 keV + 119 370389.506929 keV + 120 342519.060900 keV + 121 361944.547109 keV + 122 365997.584059 keV + 123 368443.726574 keV + 124 331811.972919 keV ============================================================ closed file mfd_tg_EnergyDeposit.out for output ============================================================ opened file mfd_tl_NumberOfSteps.out for output ============================================================ - 0 48.000000 steps - 1 17.000000 steps - 2 25.000000 steps - 3 52.000000 steps - 4 15.000000 steps - 5 8.000000 steps - 6 20.000000 steps - 7 31.000000 steps - 8 24.000000 steps - 9 67.000000 steps - 10 30.000000 steps - 11 42.000000 steps - 12 49.000000 steps - 13 13.000000 steps - 14 42.000000 steps - 15 6.000000 steps - 16 46.000000 steps - 17 23.000000 steps - 18 72.000000 steps - 19 37.000000 steps + 0 24.000000 steps + 1 30.000000 steps + 2 13.000000 steps + 3 49.000000 steps + 4 5.000000 steps + 5 7.000000 steps + 6 14.000000 steps + 7 40.000000 steps + 8 92.000000 steps + 9 24.000000 steps + 10 27.000000 steps + 11 41.000000 steps + 12 33.000000 steps + 13 34.000000 steps + 14 12.000000 steps + 15 23.000000 steps + 16 26.000000 steps + 17 41.000000 steps + 18 119.000000 steps + 19 55.000000 steps 20 3.000000 steps - 21 43.000000 steps - 22 12.000000 steps - 23 22.000000 steps - 24 79.000000 steps - 25 94.000000 steps - 26 43.000000 steps - 27 146.000000 steps + 21 22.000000 steps + 22 24.000000 steps + 23 82.000000 steps + 24 57.000000 steps + 25 92.000000 steps + 26 88.000000 steps + 27 177.000000 steps 28 111.000000 steps - 29 152.000000 steps - 30 147.000000 steps - 31 215.000000 steps - 32 303.000000 steps - 33 291.000000 steps - 34 115.000000 steps - 35 69.000000 steps - 36 292.000000 steps - 37 249.000000 steps - 38 173.000000 steps - 39 161.000000 steps - 40 114.000000 steps - 41 255.000000 steps - 42 284.000000 steps - 43 328.000000 steps - 44 58.000000 steps - 45 144.000000 steps - 46 252.000000 steps - 47 291.000000 steps - 48 116.000000 steps - 49 84.000000 steps - 50 554.000000 steps - 51 418.000000 steps - 52 666.000000 steps - 53 1055.000000 steps - 54 295.000000 steps - 55 617.000000 steps - 56 854.000000 steps - 57 1067.000000 steps - 58 611.000000 steps - 59 761.000000 steps - 60 448.000000 steps - 61 1158.000000 steps - 62 1253.000000 steps - 63 1060.000000 steps - 64 883.000000 steps - 65 573.000000 steps - 66 1210.000000 steps - 67 1045.000000 steps - 68 746.000000 steps - 69 925.000000 steps - 70 474.000000 steps - 71 548.000000 steps - 72 1120.000000 steps - 73 622.000000 steps - 74 405.000000 steps - 75 3731.000000 steps - 76 4004.000000 steps - 77 4638.000000 steps - 78 5289.000000 steps - 79 3861.000000 steps - 80 4563.000000 steps - 81 3792.000000 steps - 82 4137.000000 steps - 83 4574.000000 steps - 84 5510.000000 steps - 85 4536.000000 steps - 86 4353.000000 steps - 87 4542.000000 steps - 88 3762.000000 steps - 89 5315.000000 steps - 90 4934.000000 steps - 91 4253.000000 steps - 92 4632.000000 steps - 93 4338.000000 steps - 94 5269.000000 steps - 95 3736.000000 steps - 96 4537.000000 steps - 97 5604.000000 steps - 98 4251.000000 steps - 99 4952.000000 steps - 100 16334.000000 steps - 101 19930.000000 steps - 102 21426.000000 steps - 103 19443.000000 steps - 104 15272.000000 steps - 105 19313.000000 steps - 106 25992.000000 steps - 107 25903.000000 steps - 108 26542.000000 steps - 109 19681.000000 steps - 110 19745.000000 steps - 111 27762.000000 steps - 112 29082.000000 steps - 113 25258.000000 steps - 114 22602.000000 steps - 115 21342.000000 steps - 116 26996.000000 steps - 117 28153.000000 steps - 118 26351.000000 steps - 119 20561.000000 steps - 120 16230.000000 steps - 121 20067.000000 steps - 122 18545.000000 steps - 123 20827.000000 steps - 124 15270.000000 steps - 0 48 [sigma: 10.4403 | error: 0.376732 | coeff: 0.376732 | eff: 1 | fom: 0.503277 | r2int: 0.0946181 | r2eff: 0 | hits: 3 ] steps - 1 17 [sigma: 3.36155 | error: 0.442156 | coeff: 0.442156 | eff: 1 | fom: 0.36536 | r2int: 0.156401 | r2eff: 0 | hits: 5 ] steps - 2 25 [sigma: 8.94427 | error: 0.8 | coeff: 0.8 | eff: 1 | fom: 0.111607 | r2int: 0.512 | r2eff: 0 | hits: 5 ] steps - 3 52 [sigma: 3.8239 | error: 0.232543 | coeff: 0.232543 | eff: 1 | fom: 1.32089 | r2int: 0.0486686 | r2eff: 0 | hits: 10 ] steps - 4 15 [sigma: 1.32288 | error: 0.264575 | coeff: 0.264575 | eff: 1 | fom: 1.02041 | r2int: 0.0622222 | r2eff: 0 | hits: 9 ] steps - 5 8 [sigma: 1.34164 | error: 0.375 | coeff: 0.375 | eff: 1 | fom: 0.507937 | r2int: 0.1125 | r2eff: 0 | hits: 5 ] steps - 6 20 [sigma: 4.24264 | error: 0.6 | coeff: 0.6 | eff: 1 | fom: 0.198413 | r2int: 0.315 | r2eff: 0 | hits: 8 ] steps - 7 31 [sigma: 3.32081 | error: 0.321369 | coeff: 0.321369 | eff: 1 | fom: 0.691616 | r2int: 0.0918025 | r2eff: 0 | hits: 9 ] steps - 8 24 [sigma: 3.89138 | error: 0.458604 | coeff: 0.458604 | eff: 1 | fom: 0.339623 | r2int: 0.184028 | r2eff: 0 | hits: 8 ] steps - 9 67 [sigma: 7.3794 | error: 0.348294 | coeff: 0.348294 | eff: 1 | fom: 0.588816 | r2int: 0.109178 | r2eff: 0 | hits: 10 ] steps - 10 30 [sigma: 6.48074 | error: 0.52915 | coeff: 0.52915 | eff: 1 | fom: 0.255102 | r2int: 0.233333 | r2eff: 0 | hits: 6 ] steps - 11 42 [sigma: 4.219 | error: 0.224619 | coeff: 0.224619 | eff: 1 | fom: 1.41573 | r2int: 0.0403628 | r2eff: 0 | hits: 5 ] steps - 12 49 [sigma: 8.07465 | error: 0.368479 | coeff: 0.368479 | eff: 1 | fom: 0.526074 | r2int: 0.108621 | r2eff: 0 | hits: 5 ] steps - 13 13 [sigma: 2.26779 | error: 0.461538 | coeff: 0.461538 | eff: 1 | fom: 0.335317 | r2int: 0.182587 | r2eff: 0 | hits: 7 ] steps - 14 42 [sigma: 13.2816 | error: 0.774597 | coeff: 0.774597 | eff: 1 | fom: 0.119048 | r2int: 0.5 | r2eff: 0 | hits: 6 ] steps - 15 6 [sigma: 1.73205 | error: 0.5 | coeff: 0.5 | eff: 1 | fom: 0.285714 | r2int: 0.166667 | r2eff: 0 | hits: 3 ] steps - 16 46 [sigma: 15.0444 | error: 0.56647 | coeff: 0.56647 | eff: 1 | fom: 0.222596 | r2int: 0.213926 | r2eff: 0 | hits: 3 ] steps - 17 23 [sigma: 14.8492 | error: 0.913043 | coeff: 0.913043 | eff: 1 | fom: 0.0856819 | r2int: 0.416824 | r2eff: 0 | hits: 2 ] steps - 18 72 [sigma: 7.17712 | error: 0.315223 | coeff: 0.315223 | eff: 1 | fom: 0.718846 | r2int: 0.089429 | r2eff: 0 | hits: 10 ] steps - 19 37 [sigma: 8.10533 | error: 0.619604 | coeff: 0.619604 | eff: 1 | fom: 0.186056 | r2int: 0.33592 | r2eff: 0 | hits: 8 ] steps + 29 153.000000 steps + 30 105.000000 steps + 31 191.000000 steps + 32 222.000000 steps + 33 131.000000 steps + 34 102.000000 steps + 35 108.000000 steps + 36 338.000000 steps + 37 268.000000 steps + 38 193.000000 steps + 39 146.000000 steps + 40 200.000000 steps + 41 206.000000 steps + 42 274.000000 steps + 43 404.000000 steps + 44 105.000000 steps + 45 158.000000 steps + 46 235.000000 steps + 47 216.000000 steps + 48 172.000000 steps + 49 106.000000 steps + 50 426.000000 steps + 51 447.000000 steps + 52 370.000000 steps + 53 584.000000 steps + 54 396.000000 steps + 55 638.000000 steps + 56 1043.000000 steps + 57 990.000000 steps + 58 631.000000 steps + 59 449.000000 steps + 60 897.000000 steps + 61 1329.000000 steps + 62 1070.000000 steps + 63 1072.000000 steps + 64 673.000000 steps + 65 857.000000 steps + 66 1164.000000 steps + 67 1039.000000 steps + 68 969.000000 steps + 69 641.000000 steps + 70 578.000000 steps + 71 745.000000 steps + 72 928.000000 steps + 73 503.000000 steps + 74 249.000000 steps + 75 4199.000000 steps + 76 3948.000000 steps + 77 4176.000000 steps + 78 3810.000000 steps + 79 3539.000000 steps + 80 4881.000000 steps + 81 4030.000000 steps + 82 4080.000000 steps + 83 3911.000000 steps + 84 4694.000000 steps + 85 4719.000000 steps + 86 4116.000000 steps + 87 3956.000000 steps + 88 4087.000000 steps + 89 4282.000000 steps + 90 4806.000000 steps + 91 4396.000000 steps + 92 4159.000000 steps + 93 4517.000000 steps + 94 4627.000000 steps + 95 3693.000000 steps + 96 4295.000000 steps + 97 4595.000000 steps + 98 4627.000000 steps + 99 4521.000000 steps + 100 16160.000000 steps + 101 20521.000000 steps + 102 20122.000000 steps + 103 19608.000000 steps + 104 15590.000000 steps + 105 18866.000000 steps + 106 25334.000000 steps + 107 25638.000000 steps + 108 26756.000000 steps + 109 21421.000000 steps + 110 19386.000000 steps + 111 26252.000000 steps + 112 29765.000000 steps + 113 28038.000000 steps + 114 20982.000000 steps + 115 18834.000000 steps + 116 27207.000000 steps + 117 27705.000000 steps + 118 27917.000000 steps + 119 20151.000000 steps + 120 15936.000000 steps + 121 20039.000000 steps + 122 21119.000000 steps + 123 22382.000000 steps + 124 15406.000000 steps + 0 24 [sigma: 15.5563 | error: 0.916667 | coeff: 0.916667 | eff: 1 | fom: 0.0793388 | r2int: 0.420139 | r2eff: 0 | hits: 2 ] steps + 1 30 [sigma: 8.96289 | error: 0.597526 | coeff: 0.597526 | eff: 1 | fom: 0.186722 | r2int: 0.267778 | r2eff: 0 | hits: 4 ] steps + 2 13 [sigma: 4.5 | error: 0.692308 | coeff: 0.692308 | eff: 1 | fom: 0.139095 | r2int: 0.359467 | r2eff: 0 | hits: 4 ] steps + 3 49 [sigma: 6.02771 | error: 0.325466 | coeff: 0.325466 | eff: 1 | fom: 0.629358 | r2int: 0.0907955 | r2eff: 0 | hits: 7 ] steps + 4 5 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 5 ] steps + 5 7 [sigma: 1.5 | error: 0.428571 | coeff: 0.428571 | eff: 1 | fom: 0.362963 | r2int: 0.137755 | r2eff: 0 | hits: 4 ] steps + 6 14 [sigma: 1.66667 | error: 0.357143 | coeff: 0.357143 | eff: 1 | fom: 0.522667 | r2int: 0.113379 | r2eff: 0 | hits: 9 ] steps + 7 40 [sigma: 7.19126 | error: 0.508499 | coeff: 0.508499 | eff: 1 | fom: 0.257827 | r2int: 0.22625 | r2eff: 0 | hits: 8 ] steps + 8 92 [sigma: 8.62812 | error: 0.281352 | coeff: 0.281352 | eff: 1 | fom: 0.842189 | r2int: 0.0703634 | r2eff: 0 | hits: 9 ] steps + 9 24 [sigma: 4.32435 | error: 0.402897 | coeff: 0.402897 | eff: 1 | fom: 0.410695 | r2int: 0.129861 | r2eff: 0 | hits: 5 ] steps + 10 27 [sigma: 5.66947 | error: 0.555556 | coeff: 0.555556 | eff: 1 | fom: 0.216 | r2int: 0.26455 | r2eff: 0 | hits: 7 ] steps + 11 41 [sigma: 5.84319 | error: 0.377064 | coeff: 0.377064 | eff: 1 | fom: 0.468898 | r2int: 0.121866 | r2eff: 0 | hits: 7 ] steps + 12 33 [sigma: 3.77492 | error: 0.228783 | coeff: 0.228783 | eff: 1 | fom: 1.27368 | r2int: 0.0392562 | r2eff: 0 | hits: 4 ] steps + 13 34 [sigma: 4.84195 | error: 0.427231 | coeff: 0.427231 | eff: 1 | fom: 0.365245 | r2int: 0.162245 | r2eff: 0 | hits: 9 ] steps + 14 12 [sigma: 1 | error: 0.25 | coeff: 0.25 | eff: 1 | fom: 1.06667 | r2int: 0.0555556 | r2eff: 0 | hits: 9 ] steps + 15 23 [sigma: 3.78153 | error: 0.367642 | coeff: 0.367642 | eff: 1 | fom: 0.49324 | r2int: 0.108129 | r2eff: 0 | hits: 5 ] steps + 16 26 [sigma: 5.04645 | error: 0.475432 | coeff: 0.475432 | eff: 1 | fom: 0.294939 | r2int: 0.188363 | r2eff: 0 | hits: 6 ] steps + 17 41 [sigma: 11.644 | error: 0.568001 | coeff: 0.568001 | eff: 1 | fom: 0.206638 | r2int: 0.241969 | r2eff: 0 | hits: 4 ] steps + 18 119 [sigma: 6.94731 | error: 0.202237 | coeff: 0.202237 | eff: 1 | fom: 1.63 | r2int: 0.0374915 | r2eff: 0 | hits: 12 ] steps + 19 55 [sigma: 7.73559 | error: 0.39781 | coeff: 0.39781 | eff: 1 | fom: 0.421267 | r2int: 0.138471 | r2eff: 0 | hits: 8 ] steps 20 3 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 3 ] steps - 21 43 [sigma: 5.17687 | error: 0.269206 | coeff: 0.269206 | eff: 1 | fom: 0.985608 | r2int: 0.0579773 | r2eff: 0 | hits: 5 ] steps - 22 12 [sigma: 5.19615 | error: 0.75 | coeff: 0.75 | eff: 1 | fom: 0.126984 | r2int: 0.375 | r2eff: 0 | hits: 3 ] steps - 23 22 [sigma: 3.88158 | error: 0.432177 | coeff: 0.432177 | eff: 1 | fom: 0.382427 | r2int: 0.155647 | r2eff: 0 | hits: 6 ] steps - 24 79 [sigma: 20.511 | error: 0.580556 | coeff: 0.580556 | eff: 1 | fom: 0.211926 | r2int: 0.269636 | r2eff: 0 | hits: 5 ] steps - 25 94 [sigma: 20.7251 | error: 0.661438 | coeff: 0.661438 | eff: 1 | fom: 0.163265 | r2int: 0.388889 | r2eff: 0 | hits: 9 ] steps - 26 43 [sigma: 4.30011 | error: 0.331671 | coeff: 0.331671 | eff: 1 | fom: 0.649319 | r2int: 0.100005 | r2eff: 0 | hits: 11 ] steps - 27 146 [sigma: 18.2051 | error: 0.431946 | coeff: 0.431946 | eff: 1 | fom: 0.382835 | r2int: 0.17103 | r2eff: 0 | hits: 12 ] steps - 28 111 [sigma: 13.2387 | error: 0.477069 | coeff: 0.477069 | eff: 1 | fom: 0.31384 | r2int: 0.21337 | r2eff: 0 | hits: 16 ] steps - 29 152 [sigma: 10.1878 | error: 0.284362 | coeff: 0.284362 | eff: 1 | fom: 0.883339 | r2int: 0.0763697 | r2eff: 0 | hits: 18 ] steps - 30 147 [sigma: 15.0617 | error: 0.339823 | coeff: 0.339823 | eff: 1 | fom: 0.618538 | r2int: 0.104982 | r2eff: 0 | hits: 11 ] steps - 31 215 [sigma: 8.39462 | error: 0.183136 | coeff: 0.183136 | eff: 1 | fom: 2.12973 | r2int: 0.0320144 | r2eff: 0 | hits: 22 ] steps - 32 303 [sigma: 12.9357 | error: 0.221835 | coeff: 0.221835 | eff: 1 | fom: 1.45148 | r2int: 0.0473882 | r2eff: 0 | hits: 27 ] steps - 33 291 [sigma: 10.2957 | error: 0.180405 | coeff: 0.180405 | eff: 1 | fom: 2.19469 | r2int: 0.0312944 | r2eff: 0 | hits: 26 ] steps - 34 115 [sigma: 4.74311 | error: 0.17978 | coeff: 0.17978 | eff: 1 | fom: 2.20998 | r2int: 0.0306198 | r2eff: 0 | hits: 19 ] steps - 35 69 [sigma: 5.06062 | error: 0.274422 | coeff: 0.274422 | eff: 1 | fom: 0.948494 | r2int: 0.0699283 | r2eff: 0 | hits: 14 ] steps - 36 292 [sigma: 15.1461 | error: 0.24876 | coeff: 0.24876 | eff: 1 | fom: 1.15428 | r2int: 0.0591911 | r2eff: 0 | hits: 23 ] steps - 37 249 [sigma: 9.29571 | error: 0.193984 | coeff: 0.193984 | eff: 1 | fom: 1.8982 | r2int: 0.036236 | r2eff: 0 | hits: 27 ] steps - 38 173 [sigma: 6.61744 | error: 0.175288 | coeff: 0.175288 | eff: 1 | fom: 2.32469 | r2int: 0.0292629 | r2eff: 0 | hits: 21 ] steps - 39 161 [sigma: 8.79566 | error: 0.262003 | coeff: 0.262003 | eff: 1 | fom: 1.04054 | r2int: 0.065661 | r2eff: 0 | hits: 23 ] steps - 40 114 [sigma: 8.67298 | error: 0.313681 | coeff: 0.313681 | eff: 1 | fom: 0.725932 | r2int: 0.0926077 | r2eff: 0 | hits: 17 ] steps - 41 255 [sigma: 12.0865 | error: 0.227313 | coeff: 0.227313 | eff: 1 | fom: 1.38237 | r2int: 0.0494245 | r2eff: 0 | hits: 23 ] steps - 42 284 [sigma: 15.2094 | error: 0.251191 | coeff: 0.251191 | eff: 1 | fom: 1.13205 | r2int: 0.0602289 | r2eff: 0 | hits: 22 ] steps - 43 328 [sigma: 11.6355 | error: 0.197511 | coeff: 0.197511 | eff: 1 | fom: 1.831 | r2int: 0.0377523 | r2eff: 0 | hits: 31 ] steps - 44 58 [sigma: 4.20912 | error: 0.290284 | coeff: 0.290284 | eff: 1 | fom: 0.847668 | r2int: 0.0789982 | r2eff: 0 | hits: 16 ] steps - 45 144 [sigma: 8.23812 | error: 0.228837 | coeff: 0.228837 | eff: 1 | fom: 1.36402 | r2int: 0.0490934 | r2eff: 0 | hits: 16 ] steps - 46 252 [sigma: 17.9904 | error: 0.29435 | coeff: 0.29435 | eff: 1 | fom: 0.824409 | r2int: 0.0815456 | r2eff: 0 | hits: 17 ] steps - 47 291 [sigma: 27.9058 | error: 0.406854 | coeff: 0.406854 | eff: 1 | fom: 0.431515 | r2int: 0.156334 | r2eff: 0 | hits: 18 ] steps - 48 116 [sigma: 5.775 | error: 0.23351 | coeff: 0.23351 | eff: 1 | fom: 1.30997 | r2int: 0.0520484 | r2eff: 0 | hits: 22 ] steps - 49 84 [sigma: 7.14143 | error: 0.340068 | coeff: 0.340068 | eff: 1 | fom: 0.617647 | r2int: 0.108418 | r2eff: 0 | hits: 16 ] steps - 50 554 [sigma: 36.0571 | error: 0.406456 | coeff: 0.406456 | eff: 1 | fom: 0.43236 | r2int: 0.16097 | r2eff: 0 | hits: 39 ] steps - 51 418 [sigma: 16.8924 | error: 0.232152 | coeff: 0.232152 | eff: 1 | fom: 1.32534 | r2int: 0.0522615 | r2eff: 0 | hits: 33 ] steps - 52 666 [sigma: 17.2529 | error: 0.181337 | coeff: 0.181337 | eff: 1 | fom: 2.1722 | r2int: 0.032212 | r2eff: 0 | hits: 49 ] steps - 53 1055 [sigma: 27.3206 | error: 0.210383 | coeff: 0.210383 | eff: 1 | fom: 1.61381 | r2int: 0.0435902 | r2eff: 0 | hits: 66 ] steps - 54 295 [sigma: 16.0247 | error: 0.292527 | coeff: 0.292527 | eff: 1 | fom: 0.834716 | r2int: 0.0826215 | r2eff: 0 | hits: 29 ] steps - 55 617 [sigma: 15.1391 | error: 0.169994 | coeff: 0.169994 | eff: 1 | fom: 2.47174 | r2int: 0.028296 | r2eff: 0 | hits: 48 ] steps - 56 854 [sigma: 13.0263 | error: 0.122976 | coeff: 0.122976 | eff: 1 | fom: 4.72318 | r2int: 0.0148903 | r2eff: 0 | hits: 65 ] steps - 57 1067 [sigma: 13.16 | error: 0.114377 | coeff: 0.114377 | eff: 1 | fom: 5.45998 | r2int: 0.0129301 | r2eff: 0 | hits: 86 ] steps - 58 611 [sigma: 8.03123 | error: 0.107592 | coeff: 0.107592 | eff: 1 | fom: 6.17043 | r2int: 0.0114032 | r2eff: 0 | hits: 67 ] steps - 59 761 [sigma: 27.1802 | error: 0.262461 | coeff: 0.262461 | eff: 1 | fom: 1.03691 | r2int: 0.0676103 | r2eff: 0 | hits: 54 ] steps - 60 448 [sigma: 8.48029 | error: 0.149049 | coeff: 0.149049 | eff: 1 | fom: 3.21525 | r2int: 0.0218573 | r2eff: 0 | hits: 62 ] steps - 61 1158 [sigma: 11.6877 | error: 0.0983743 | coeff: 0.0983743 | eff: 1 | fom: 7.38088 | r2int: 0.00957564 | r2eff: 0 | hits: 95 ] steps - 62 1253 [sigma: 13.0986 | error: 0.0986209 | coeff: 0.0986209 | eff: 1 | fom: 7.34403 | r2int: 0.00961679 | r2eff: 0 | hits: 89 ] steps - 63 1060 [sigma: 13.9977 | error: 0.120306 | coeff: 0.120306 | eff: 1 | fom: 4.93508 | r2int: 0.0142993 | r2eff: 0 | hits: 83 ] steps - 64 883 [sigma: 23.4171 | error: 0.217075 | coeff: 0.217075 | eff: 1 | fom: 1.51583 | r2int: 0.0464183 | r2eff: 0 | hits: 67 ] steps - 65 573 [sigma: 9.70835 | error: 0.133409 | coeff: 0.133409 | eff: 1 | fom: 4.01328 | r2int: 0.017511 | r2eff: 0 | hits: 62 ] steps - 66 1210 [sigma: 14.0795 | error: 0.104724 | coeff: 0.104724 | eff: 1 | fom: 6.51299 | r2int: 0.0108317 | r2eff: 0 | hits: 81 ] steps - 67 1045 [sigma: 13.4292 | error: 0.117077 | coeff: 0.117077 | eff: 1 | fom: 5.21109 | r2int: 0.0135419 | r2eff: 0 | hits: 83 ] steps - 68 746 [sigma: 8.5334 | error: 0.0997218 | coeff: 0.0997218 | eff: 1 | fom: 7.18276 | r2int: 0.00981359 | r2eff: 0 | hits: 76 ] steps - 69 925 [sigma: 25.3673 | error: 0.212426 | coeff: 0.212426 | eff: 1 | fom: 1.5829 | r2int: 0.0443729 | r2eff: 0 | hits: 60 ] steps - 70 474 [sigma: 16.0417 | error: 0.208624 | coeff: 0.208624 | eff: 1 | fom: 1.64113 | r2int: 0.0423787 | r2eff: 0 | hits: 38 ] steps - 71 548 [sigma: 18.2585 | error: 0.253746 | coeff: 0.253746 | eff: 1 | fom: 1.10936 | r2int: 0.063277 | r2eff: 0 | hits: 58 ] steps - 72 1120 [sigma: 25.7722 | error: 0.193893 | coeff: 0.193893 | eff: 1 | fom: 1.89997 | r2int: 0.037065 | r2eff: 0 | hits: 71 ] steps - 73 622 [sigma: 11.2127 | error: 0.143084 | coeff: 0.143084 | eff: 1 | fom: 3.4889 | r2int: 0.0201481 | r2eff: 0 | hits: 63 ] steps - 74 405 [sigma: 14.7652 | error: 0.239066 | coeff: 0.239066 | eff: 1 | fom: 1.24978 | r2int: 0.0558236 | r2eff: 0 | hits: 43 ] steps - 75 3731 [sigma: 36.3366 | error: 0.118881 | coeff: 0.118881 | eff: 1 | fom: 5.05414 | r2int: 0.0140378 | r2eff: 0 | hits: 149 ] steps - 76 4004 [sigma: 31.0995 | error: 0.105929 | coeff: 0.105929 | eff: 1 | fom: 6.36561 | r2int: 0.0111607 | r2eff: 0 | hits: 186 ] steps - 77 4638 [sigma: 27.3603 | error: 0.0872997 | coeff: 0.0872997 | eff: 1 | fom: 9.37231 | r2int: 0.00758643 | r2eff: 0 | hits: 219 ] steps - 78 5289 [sigma: 31.1854 | error: 0.0864564 | coeff: 0.0864564 | eff: 1 | fom: 9.55602 | r2int: 0.00743995 | r2eff: 0 | hits: 215 ] steps - 79 3861 [sigma: 30.4278 | error: 0.102147 | coeff: 0.102147 | eff: 1 | fom: 6.84576 | r2int: 0.0103719 | r2eff: 0 | hits: 168 ] steps - 80 4563 [sigma: 30.6034 | error: 0.094612 | coeff: 0.094612 | eff: 1 | fom: 7.97957 | r2int: 0.00890645 | r2eff: 0 | hits: 199 ] steps - 81 3792 [sigma: 11.5062 | error: 0.0547865 | coeff: 0.0547865 | eff: 1 | fom: 23.7972 | r2int: 0.00299235 | r2eff: 0 | hits: 326 ] steps - 82 4137 [sigma: 12.9621 | error: 0.0558731 | coeff: 0.0558731 | eff: 1 | fom: 22.8805 | r2int: 0.00311199 | r2eff: 0 | hits: 318 ] steps - 83 4574 [sigma: 14.342 | error: 0.0568735 | coeff: 0.0568735 | eff: 1 | fom: 22.0827 | r2int: 0.00322477 | r2eff: 0 | hits: 329 ] steps - 84 5510 [sigma: 34.637 | error: 0.0936624 | coeff: 0.0936624 | eff: 1 | fom: 8.14219 | r2int: 0.00873313 | r2eff: 0 | hits: 222 ] steps - 85 4536 [sigma: 27.3302 | error: 0.0889607 | coeff: 0.0889607 | eff: 1 | fom: 9.0256 | r2int: 0.0078777 | r2eff: 0 | hits: 218 ] steps - 86 4353 [sigma: 12.463 | error: 0.0524812 | coeff: 0.0524812 | eff: 1 | fom: 25.9337 | r2int: 0.00274608 | r2eff: 0 | hits: 336 ] steps - 87 4542 [sigma: 12.7336 | error: 0.053488 | coeff: 0.053488 | eff: 1 | fom: 24.9666 | r2int: 0.0028531 | r2eff: 0 | hits: 364 ] steps - 88 3762 [sigma: 10.8159 | error: 0.0515907 | coeff: 0.0515907 | eff: 1 | fom: 26.8367 | r2int: 0.00265333 | r2eff: 0 | hits: 322 ] steps - 89 5315 [sigma: 30.43 | error: 0.087017 | coeff: 0.087017 | eff: 1 | fom: 9.4333 | r2int: 0.00753918 | r2eff: 0 | hits: 231 ] steps - 90 4934 [sigma: 34.3384 | error: 0.106461 | coeff: 0.106461 | eff: 1 | fom: 6.30223 | r2int: 0.0112854 | r2eff: 0 | hits: 234 ] steps - 91 4253 [sigma: 12.916 | error: 0.0555847 | coeff: 0.0555847 | eff: 1 | fom: 23.1186 | r2int: 0.00308044 | r2eff: 0 | hits: 335 ] steps - 92 4632 [sigma: 12.7753 | error: 0.0500264 | coeff: 0.0500264 | eff: 1 | fom: 28.5413 | r2int: 0.00249503 | r2eff: 0 | hits: 329 ] steps - 93 4338 [sigma: 13.8844 | error: 0.0573441 | coeff: 0.0573441 | eff: 1 | fom: 21.7217 | r2int: 0.00327811 | r2eff: 0 | hits: 321 ] steps - 94 5269 [sigma: 37.0868 | error: 0.10721 | coeff: 0.10721 | eff: 1 | fom: 6.21445 | r2int: 0.0114444 | r2eff: 0 | hits: 232 ] steps - 95 3736 [sigma: 32.0222 | error: 0.105325 | coeff: 0.105325 | eff: 1 | fom: 6.43883 | r2int: 0.0110199 | r2eff: 0 | hits: 151 ] steps - 96 4537 [sigma: 30.826 | error: 0.0996248 | coeff: 0.0996248 | eff: 1 | fom: 7.19676 | r2int: 0.00987894 | r2eff: 0 | hits: 215 ] steps - 97 5604 [sigma: 36.8536 | error: 0.0977637 | coeff: 0.0977637 | eff: 1 | fom: 7.47338 | r2int: 0.00951449 | r2eff: 0 | hits: 221 ] steps - 98 4251 [sigma: 26.8457 | error: 0.0923826 | coeff: 0.0923826 | eff: 1 | fom: 8.36935 | r2int: 0.00849466 | r2eff: 0 | hits: 214 ] steps - 99 4952 [sigma: 43.6869 | error: 0.115364 | coeff: 0.115364 | eff: 1 | fom: 5.36704 | r2int: 0.0132309 | r2eff: 0 | hits: 171 ] steps - 100 16334 [sigma: 36.2289 | error: 0.0546909 | coeff: 0.0546909 | eff: 1 | fom: 23.8804 | r2int: 0.00298617 | r2eff: 0 | hits: 608 ] steps - 101 19930 [sigma: 32.2121 | error: 0.0450239 | coeff: 0.0450239 | eff: 1 | fom: 35.236 | r2int: 0.00202454 | r2eff: 0 | hits: 776 ] steps - 102 21426 [sigma: 35.467 | error: 0.0475456 | coeff: 0.0475456 | eff: 1 | fom: 31.5974 | r2int: 0.00225785 | r2eff: 0 | hits: 825 ] steps - 103 19443 [sigma: 32.4056 | error: 0.0461888 | coeff: 0.0461888 | eff: 1 | fom: 33.481 | r2int: 0.00213063 | r2eff: 0 | hits: 768 ] steps - 104 15272 [sigma: 35.53 | error: 0.0583015 | coeff: 0.0583015 | eff: 1 | fom: 21.0142 | r2int: 0.00339365 | r2eff: 0 | hits: 628 ] steps - 105 19313 [sigma: 34.7725 | error: 0.0484792 | coeff: 0.0484792 | eff: 1 | fom: 30.3921 | r2int: 0.00234699 | r2eff: 0 | hits: 725 ] steps - 106 25992 [sigma: 37.3058 | error: 0.0438642 | coeff: 0.0438642 | eff: 1 | fom: 37.1237 | r2int: 0.00192201 | r2eff: 0 | hits: 934 ] steps - 107 25903 [sigma: 32.7849 | error: 0.0401043 | coeff: 0.0401043 | eff: 1 | fom: 44.4109 | r2int: 0.00160675 | r2eff: 0 | hits: 1004 ] steps - 108 26542 [sigma: 35.3719 | error: 0.041506 | coeff: 0.041506 | eff: 1 | fom: 41.4621 | r2int: 0.00172097 | r2eff: 0 | hits: 970 ] steps - 109 19681 [sigma: 32.8088 | error: 0.0457143 | coeff: 0.0457143 | eff: 1 | fom: 34.1797 | r2int: 0.00208702 | r2eff: 0 | hits: 752 ] steps - 110 19745 [sigma: 30.819 | error: 0.0439816 | coeff: 0.0439816 | eff: 1 | fom: 36.9257 | r2int: 0.00193195 | r2eff: 0 | hits: 794 ] steps - 111 27762 [sigma: 38.5938 | error: 0.0443113 | coeff: 0.0443113 | eff: 1 | fom: 36.3784 | r2int: 0.00196156 | r2eff: 0 | hits: 1016 ] steps - 112 29082 [sigma: 35.6232 | error: 0.0392931 | coeff: 0.0392931 | eff: 1 | fom: 46.2636 | r2int: 0.00154245 | r2eff: 0 | hits: 1029 ] steps - 113 25258 [sigma: 34.2002 | error: 0.041558 | coeff: 0.041558 | eff: 1 | fom: 41.3582 | r2int: 0.00172524 | r2eff: 0 | hits: 942 ] steps - 114 22602 [sigma: 36.9124 | error: 0.0463366 | coeff: 0.0463366 | eff: 1 | fom: 33.2678 | r2int: 0.00214441 | r2eff: 0 | hits: 805 ] steps - 115 21342 [sigma: 39.933 | error: 0.0513104 | coeff: 0.0513104 | eff: 1 | fom: 27.1307 | r2int: 0.00262926 | r2eff: 0 | hits: 752 ] steps - 116 26996 [sigma: 34.5851 | error: 0.0406137 | coeff: 0.0406137 | eff: 1 | fom: 43.3039 | r2int: 0.00164783 | r2eff: 0 | hits: 1005 ] steps - 117 28153 [sigma: 34.9113 | error: 0.038978 | coeff: 0.038978 | eff: 1 | fom: 47.0145 | r2int: 0.00151775 | r2eff: 0 | hits: 988 ] steps - 118 26351 [sigma: 33.9766 | error: 0.0394687 | coeff: 0.0394687 | eff: 1 | fom: 45.8529 | r2int: 0.00155611 | r2eff: 0 | hits: 937 ] steps - 119 20561 [sigma: 35.0577 | error: 0.0470051 | coeff: 0.0470051 | eff: 1 | fom: 32.3282 | r2int: 0.00220658 | r2eff: 0 | hits: 760 ] steps - 120 16230 [sigma: 30.087 | error: 0.0475885 | coeff: 0.0475885 | eff: 1 | fom: 31.5404 | r2int: 0.00226123 | r2eff: 0 | hits: 659 ] steps - 121 20067 [sigma: 36.3953 | error: 0.048565 | coeff: 0.048565 | eff: 1 | fom: 30.2849 | r2int: 0.00235527 | r2eff: 0 | hits: 717 ] steps - 122 18545 [sigma: 29.5923 | error: 0.0441349 | coeff: 0.0441349 | eff: 1 | fom: 36.6697 | r2int: 0.00194534 | r2eff: 0 | hits: 765 ] steps - 123 20827 [sigma: 36.281 | error: 0.0480873 | coeff: 0.0480873 | eff: 1 | fom: 30.8895 | r2int: 0.00230936 | r2eff: 0 | hits: 762 ] steps - 124 15270 [sigma: 30.9118 | error: 0.0509316 | coeff: 0.0509316 | eff: 1 | fom: 25.7 | r2int: 0.00258993 | r2eff: 0 | hits: 633 ] steps + 21 22 [sigma: 3.69685 | error: 0.336077 | coeff: 0.336077 | eff: 1 | fom: 0.590244 | r2int: 0.0847107 | r2eff: 0 | hits: 4 ] steps + 22 24 [sigma: 7.57188 | error: 0.63099 | coeff: 0.63099 | eff: 1 | fom: 0.167442 | r2int: 0.298611 | r2eff: 0 | hits: 4 ] steps + 23 82 [sigma: 14.0766 | error: 0.594669 | coeff: 0.594669 | eff: 1 | fom: 0.18852 | r2int: 0.324162 | r2eff: 0 | hits: 12 ] steps + 24 57 [sigma: 6.4402 | error: 0.298933 | coeff: 0.298933 | eff: 1 | fom: 0.746039 | r2int: 0.076595 | r2eff: 0 | hits: 7 ] steps + 25 92 [sigma: 6.73355 | error: 0.273855 | coeff: 0.273855 | eff: 1 | fom: 0.888932 | r2int: 0.0696395 | r2eff: 0 | hits: 14 ] steps + 26 88 [sigma: 9.6515 | error: 0.379929 | coeff: 0.379929 | eff: 1 | fom: 0.461852 | r2int: 0.132317 | r2eff: 0 | hits: 12 ] steps + 27 177 [sigma: 19.3065 | error: 0.422452 | coeff: 0.422452 | eff: 1 | fom: 0.373555 | r2int: 0.166568 | r2eff: 0 | hits: 15 ] steps + 28 111 [sigma: 6.48955 | error: 0.267918 | coeff: 0.267918 | eff: 1 | fom: 0.928765 | r2int: 0.0683618 | r2eff: 0 | hits: 21 ] steps + 29 153 [sigma: 14.3537 | error: 0.363344 | coeff: 0.363344 | eff: 1 | fom: 0.504979 | r2int: 0.123218 | r2eff: 0 | hits: 15 ] steps + 30 105 [sigma: 5.40299 | error: 0.192535 | coeff: 0.192535 | eff: 1 | fom: 1.79842 | r2int: 0.0344218 | r2eff: 0 | hits: 14 ] steps + 31 191 [sigma: 13.5163 | error: 0.291776 | coeff: 0.291776 | eff: 1 | fom: 0.783085 | r2int: 0.0801255 | r2eff: 0 | hits: 17 ] steps + 32 222 [sigma: 12.044 | error: 0.223688 | coeff: 0.223688 | eff: 1 | fom: 1.33236 | r2int: 0.0470932 | r2eff: 0 | hits: 17 ] steps + 33 131 [sigma: 7.90965 | error: 0.241516 | coeff: 0.241516 | eff: 1 | fom: 1.14292 | r2int: 0.0546843 | r2eff: 0 | hits: 16 ] steps + 34 102 [sigma: 5.95404 | error: 0.218411 | coeff: 0.218411 | eff: 1 | fom: 1.39752 | r2int: 0.0442961 | r2eff: 0 | hits: 14 ] steps + 35 108 [sigma: 9.41708 | error: 0.326254 | coeff: 0.326254 | eff: 1 | fom: 0.62632 | r2int: 0.0988389 | r2eff: 0 | hits: 14 ] steps + 36 338 [sigma: 13.7739 | error: 0.21175 | coeff: 0.21175 | eff: 1 | fom: 1.48684 | r2int: 0.0431772 | r2eff: 0 | hits: 27 ] steps + 37 268 [sigma: 10.2011 | error: 0.194087 | coeff: 0.194087 | eff: 1 | fom: 1.76976 | r2int: 0.036221 | r2eff: 0 | hits: 26 ] steps + 38 193 [sigma: 12.3743 | error: 0.248319 | coeff: 0.248319 | eff: 1 | fom: 1.08116 | r2int: 0.0575514 | r2eff: 0 | hits: 15 ] steps + 39 146 [sigma: 8.4349 | error: 0.264751 | coeff: 0.264751 | eff: 1 | fom: 0.951119 | r2int: 0.0667551 | r2eff: 0 | hits: 21 ] steps + 40 200 [sigma: 8.36162 | error: 0.20904 | coeff: 0.20904 | eff: 1 | fom: 1.52563 | r2int: 0.04195 | r2eff: 0 | hits: 25 ] steps + 41 206 [sigma: 10.6393 | error: 0.242246 | coeff: 0.242246 | eff: 1 | fom: 1.13604 | r2int: 0.0560159 | r2eff: 0 | hits: 22 ] steps + 42 274 [sigma: 10.7728 | error: 0.204297 | coeff: 0.204297 | eff: 1 | fom: 1.5973 | r2int: 0.0401914 | r2eff: 0 | hits: 27 ] steps + 43 404 [sigma: 12.3273 | error: 0.180517 | coeff: 0.180517 | eff: 1 | fom: 2.04583 | r2int: 0.0316555 | r2eff: 0 | hits: 35 ] steps + 44 105 [sigma: 8.66386 | error: 0.330052 | coeff: 0.330052 | eff: 1 | fom: 0.61199 | r2int: 0.102126 | r2eff: 0 | hits: 16 ] steps + 45 158 [sigma: 11.2749 | error: 0.276377 | coeff: 0.276377 | eff: 1 | fom: 0.87278 | r2int: 0.071292 | r2eff: 0 | hits: 15 ] steps + 46 235 [sigma: 12.3837 | error: 0.2297 | coeff: 0.2297 | eff: 1 | fom: 1.26354 | r2int: 0.049985 | r2eff: 0 | hits: 19 ] steps + 47 216 [sigma: 12.594 | error: 0.285638 | coeff: 0.285638 | eff: 1 | fom: 0.817105 | r2int: 0.0781893 | r2eff: 0 | hits: 24 ] steps + 48 172 [sigma: 8.86705 | error: 0.247238 | coeff: 0.247238 | eff: 1 | fom: 1.09064 | r2int: 0.0584687 | r2eff: 0 | hits: 23 ] steps + 49 106 [sigma: 7.94613 | error: 0.270285 | coeff: 0.270285 | eff: 1 | fom: 0.912569 | r2int: 0.0674343 | r2eff: 0 | hits: 13 ] steps + 50 426 [sigma: 21.1885 | error: 0.314572 | coeff: 0.314572 | eff: 1 | fom: 0.673703 | r2int: 0.0964816 | r2eff: 0 | hits: 40 ] steps + 51 447 [sigma: 13.5512 | error: 0.191735 | coeff: 0.191735 | eff: 1 | fom: 1.81346 | r2int: 0.0358431 | r2eff: 0 | hits: 40 ] steps + 52 370 [sigma: 9.01525 | error: 0.16881 | coeff: 0.16881 | eff: 1 | fom: 2.33946 | r2int: 0.027903 | r2eff: 0 | hits: 48 ] steps + 53 584 [sigma: 15.4115 | error: 0.190298 | coeff: 0.190298 | eff: 1 | fom: 1.84095 | r2int: 0.0355168 | r2eff: 0 | hits: 52 ] steps + 54 396 [sigma: 16.7594 | error: 0.227909 | coeff: 0.227909 | eff: 1 | fom: 1.28347 | r2int: 0.0501515 | r2eff: 0 | hits: 29 ] steps + 55 638 [sigma: 12.7775 | error: 0.151204 | coeff: 0.151204 | eff: 1 | fom: 2.91595 | r2int: 0.0224616 | r2eff: 0 | hits: 57 ] steps + 56 1043 [sigma: 14.9215 | error: 0.12635 | coeff: 0.12635 | eff: 1 | fom: 4.17595 | r2int: 0.0157597 | r2eff: 0 | hits: 78 ] steps + 57 990 [sigma: 11.349 | error: 0.103173 | coeff: 0.103173 | eff: 1 | fom: 6.26294 | r2int: 0.0105132 | r2eff: 0 | hits: 81 ] steps + 58 631 [sigma: 8.53551 | error: 0.113175 | coeff: 0.113175 | eff: 1 | fom: 5.20488 | r2int: 0.0126255 | r2eff: 0 | hits: 70 ] steps + 59 449 [sigma: 10.6839 | error: 0.179647 | coeff: 0.179647 | eff: 1 | fom: 2.0657 | r2int: 0.0317069 | r2eff: 0 | hits: 57 ] steps + 60 897 [sigma: 16.0728 | error: 0.155178 | coeff: 0.155178 | eff: 1 | fom: 2.76852 | r2int: 0.0237592 | r2eff: 0 | hits: 75 ] steps + 61 1329 [sigma: 14.1949 | error: 0.108924 | coeff: 0.108924 | eff: 1 | fom: 5.61905 | r2int: 0.0117503 | r2eff: 0 | hits: 104 ] steps + 62 1070 [sigma: 11.8647 | error: 0.104609 | coeff: 0.104609 | eff: 1 | fom: 6.09213 | r2int: 0.0108201 | r2eff: 0 | hits: 89 ] steps + 63 1072 [sigma: 12.3873 | error: 0.105274 | coeff: 0.105274 | eff: 1 | fom: 6.01548 | r2int: 0.010949 | r2eff: 0 | hits: 83 ] steps + 64 673 [sigma: 18.7676 | error: 0.223092 | coeff: 0.223092 | eff: 1 | fom: 1.3395 | r2int: 0.0489922 | r2eff: 0 | hits: 64 ] steps + 65 857 [sigma: 17.2991 | error: 0.165227 | coeff: 0.165227 | eff: 1 | fom: 2.44202 | r2int: 0.0268924 | r2eff: 0 | hits: 67 ] steps + 66 1164 [sigma: 14.1539 | error: 0.110111 | coeff: 0.110111 | eff: 1 | fom: 5.49858 | r2int: 0.0119765 | r2eff: 0 | hits: 82 ] steps + 67 1039 [sigma: 12.8992 | error: 0.114461 | coeff: 0.114461 | eff: 1 | fom: 5.08855 | r2int: 0.0129472 | r2eff: 0 | hits: 85 ] steps + 68 969 [sigma: 11.4965 | error: 0.10206 | coeff: 0.10206 | eff: 1 | fom: 6.40022 | r2int: 0.0102755 | r2eff: 0 | hits: 74 ] steps + 69 641 [sigma: 20.9193 | error: 0.246392 | coeff: 0.246392 | eff: 1 | fom: 1.09813 | r2int: 0.0596439 | r2eff: 0 | hits: 57 ] steps + 70 578 [sigma: 18.8539 | error: 0.216371 | coeff: 0.216371 | eff: 1 | fom: 1.424 | r2int: 0.0457525 | r2eff: 0 | hits: 44 ] steps + 71 745 [sigma: 20.9252 | error: 0.2064 | coeff: 0.2064 | eff: 1 | fom: 1.56491 | r2int: 0.0418121 | r2eff: 0 | hits: 54 ] steps + 72 928 [sigma: 26.1755 | error: 0.214813 | coeff: 0.214813 | eff: 1 | fom: 1.44473 | r2int: 0.0453492 | r2eff: 0 | hits: 58 ] steps + 73 503 [sigma: 13.8447 | error: 0.19848 | coeff: 0.19848 | eff: 1 | fom: 1.69229 | r2int: 0.0386367 | r2eff: 0 | hits: 52 ] steps + 74 249 [sigma: 8.32027 | error: 0.205982 | coeff: 0.205982 | eff: 1 | fom: 1.57126 | r2int: 0.0413122 | r2eff: 0 | hits: 38 ] steps + 75 4199 [sigma: 36.3805 | error: 0.109593 | coeff: 0.109593 | eff: 1 | fom: 5.55063 | r2int: 0.0119356 | r2eff: 0 | hits: 160 ] steps + 76 3948 [sigma: 27.4727 | error: 0.0981638 | coeff: 0.0981638 | eff: 1 | fom: 6.9184 | r2int: 0.00958771 | r2eff: 0 | hits: 199 ] steps + 77 4176 [sigma: 27.9166 | error: 0.0952466 | coeff: 0.0952466 | eff: 1 | fom: 7.34868 | r2int: 0.00902723 | r2eff: 0 | hits: 203 ] steps + 78 3810 [sigma: 25.6336 | error: 0.0937099 | coeff: 0.0937099 | eff: 1 | fom: 7.59168 | r2int: 0.00873628 | r2eff: 0 | hits: 194 ] steps + 79 3539 [sigma: 33.2409 | error: 0.113881 | coeff: 0.113881 | eff: 1 | fom: 5.14051 | r2int: 0.0128807 | r2eff: 0 | hits: 147 ] steps + 80 4881 [sigma: 43.622 | error: 0.120568 | coeff: 0.120568 | eff: 1 | fom: 4.5861 | r2int: 0.0144568 | r2eff: 0 | hits: 182 ] steps + 81 4030 [sigma: 12.2533 | error: 0.0534477 | coeff: 0.0534477 | eff: 1 | fom: 23.3373 | r2int: 0.00284741 | r2eff: 0 | hits: 309 ] steps + 82 4080 [sigma: 13.0638 | error: 0.0562845 | coeff: 0.0562845 | eff: 1 | fom: 21.0442 | r2int: 0.00315769 | r2eff: 0 | hits: 309 ] steps + 83 3911 [sigma: 11.7718 | error: 0.0523932 | coeff: 0.0523932 | eff: 1 | fom: 24.2862 | r2int: 0.00273599 | r2eff: 0 | hits: 303 ] steps + 84 4694 [sigma: 29.1135 | error: 0.0913652 | coeff: 0.0913652 | eff: 1 | fom: 7.98632 | r2int: 0.00830914 | r2eff: 0 | hits: 217 ] steps + 85 4719 [sigma: 26.8765 | error: 0.0854308 | coeff: 0.0854308 | eff: 1 | fom: 9.1344 | r2int: 0.00726598 | r2eff: 0 | hits: 225 ] steps + 86 4116 [sigma: 11.6155 | error: 0.049687 | coeff: 0.049687 | eff: 1 | fom: 27.0037 | r2int: 0.00246084 | r2eff: 0 | hits: 310 ] steps + 87 3956 [sigma: 12.0401 | error: 0.0552039 | coeff: 0.0552039 | eff: 1 | fom: 21.876 | r2int: 0.00303821 | r2eff: 0 | hits: 329 ] steps + 88 4087 [sigma: 12.5845 | error: 0.0553392 | coeff: 0.0553392 | eff: 1 | fom: 21.7692 | r2int: 0.00305295 | r2eff: 0 | hits: 323 ] steps + 89 4282 [sigma: 28.3938 | error: 0.0935415 | coeff: 0.0935415 | eff: 1 | fom: 7.61904 | r2int: 0.00870603 | r2eff: 0 | hits: 199 ] steps + 90 4806 [sigma: 34.429 | error: 0.106256 | coeff: 0.106256 | eff: 1 | fom: 5.9048 | r2int: 0.0112389 | r2eff: 0 | hits: 220 ] steps + 91 4396 [sigma: 13.6201 | error: 0.0564535 | coeff: 0.0564535 | eff: 1 | fom: 20.9183 | r2int: 0.0031774 | r2eff: 0 | hits: 332 ] steps + 92 4159 [sigma: 12.0628 | error: 0.0526884 | coeff: 0.0526884 | eff: 1 | fom: 24.0147 | r2int: 0.00276766 | r2eff: 0 | hits: 330 ] steps + 93 4517 [sigma: 13.0475 | error: 0.0531836 | coeff: 0.0531836 | eff: 1 | fom: 23.5697 | r2int: 0.00282015 | r2eff: 0 | hits: 339 ] steps + 94 4627 [sigma: 31.928 | error: 0.102581 | coeff: 0.102581 | eff: 1 | fom: 6.33538 | r2int: 0.0104753 | r2eff: 0 | hits: 221 ] steps + 95 3693 [sigma: 35.3844 | error: 0.119673 | coeff: 0.119673 | eff: 1 | fom: 4.655 | r2int: 0.0142297 | r2eff: 0 | hits: 156 ] steps + 96 4295 [sigma: 26.017 | error: 0.0900513 | coeff: 0.0900513 | eff: 1 | fom: 8.22108 | r2int: 0.00807254 | r2eff: 0 | hits: 221 ] steps + 97 4595 [sigma: 29.264 | error: 0.0925102 | coeff: 0.0925102 | eff: 1 | fom: 7.78985 | r2int: 0.00851759 | r2eff: 0 | hits: 211 ] steps + 98 4627 [sigma: 25.5168 | error: 0.084179 | coeff: 0.084179 | eff: 1 | fom: 9.40808 | r2int: 0.0070557 | r2eff: 0 | hits: 233 ] steps + 99 4521 [sigma: 34.3984 | error: 0.101511 | coeff: 0.101511 | eff: 1 | fom: 6.46967 | r2int: 0.0102466 | r2eff: 0 | hits: 178 ] steps + 100 16160 [sigma: 38.2193 | error: 0.057252 | coeff: 0.057252 | eff: 1 | fom: 20.3389 | r2int: 0.00327219 | r2eff: 0 | hits: 586 ] steps + 101 20521 [sigma: 38.2784 | error: 0.0511522 | coeff: 0.0511522 | eff: 1 | fom: 25.4789 | r2int: 0.00261307 | r2eff: 0 | hits: 752 ] steps + 102 20122 [sigma: 36.233 | error: 0.0502898 | coeff: 0.0502898 | eff: 1 | fom: 26.3602 | r2int: 0.00252583 | r2eff: 0 | hits: 780 ] steps + 103 19608 [sigma: 32.0979 | error: 0.0449499 | coeff: 0.0449499 | eff: 1 | fom: 32.9952 | r2int: 0.00201782 | r2eff: 0 | hits: 754 ] steps + 104 15590 [sigma: 35.3382 | error: 0.0565773 | coeff: 0.0565773 | eff: 1 | fom: 20.8269 | r2int: 0.00319585 | r2eff: 0 | hits: 623 ] steps + 105 18866 [sigma: 32.8457 | error: 0.0468455 | coeff: 0.0468455 | eff: 1 | fom: 30.379 | r2int: 0.00219147 | r2eff: 0 | hits: 724 ] steps + 106 25334 [sigma: 36.4638 | error: 0.0436805 | coeff: 0.0436805 | eff: 1 | fom: 34.9408 | r2int: 0.00190591 | r2eff: 0 | hits: 921 ] steps + 107 25638 [sigma: 34.3245 | error: 0.0410909 | coeff: 0.0410909 | eff: 1 | fom: 39.4836 | r2int: 0.00168667 | r2eff: 0 | hits: 942 ] steps + 108 26756 [sigma: 35.0049 | error: 0.0405574 | coeff: 0.0405574 | eff: 1 | fom: 40.5293 | r2int: 0.00164319 | r2eff: 0 | hits: 961 ] steps + 109 21421 [sigma: 35.4976 | error: 0.0452008 | coeff: 0.0452008 | eff: 1 | fom: 32.63 | r2int: 0.00204037 | r2eff: 0 | hits: 744 ] steps + 110 19386 [sigma: 31.3907 | error: 0.0443745 | coeff: 0.0443745 | eff: 1 | fom: 33.8565 | r2int: 0.00196647 | r2eff: 0 | hits: 751 ] steps + 111 26252 [sigma: 33.0783 | error: 0.0394854 | coeff: 0.0394854 | eff: 1 | fom: 42.7599 | r2int: 0.00155751 | r2eff: 0 | hits: 982 ] steps + 112 29765 [sigma: 39.6369 | error: 0.0421108 | coeff: 0.0421108 | eff: 1 | fom: 37.5942 | r2int: 0.00177155 | r2eff: 0 | hits: 1000 ] steps + 113 28038 [sigma: 35.082 | error: 0.0396069 | coeff: 0.0396069 | eff: 1 | fom: 42.4979 | r2int: 0.00156714 | r2eff: 0 | hits: 1002 ] steps + 114 20982 [sigma: 35.1116 | error: 0.0473017 | coeff: 0.0473017 | eff: 1 | fom: 29.7958 | r2int: 0.00223465 | r2eff: 0 | hits: 799 ] steps + 115 18834 [sigma: 33.3938 | error: 0.047774 | coeff: 0.047774 | eff: 1 | fom: 29.2096 | r2int: 0.00227921 | r2eff: 0 | hits: 726 ] steps + 116 27207 [sigma: 37.0613 | error: 0.0424254 | coeff: 0.0424254 | eff: 1 | fom: 37.0389 | r2int: 0.00179806 | r2eff: 0 | hits: 970 ] steps + 117 27705 [sigma: 33.3622 | error: 0.0384777 | coeff: 0.0384777 | eff: 1 | fom: 45.0288 | r2int: 0.00147908 | r2eff: 0 | hits: 1021 ] steps + 118 27917 [sigma: 36.9008 | error: 0.0412945 | coeff: 0.0412945 | eff: 1 | fom: 39.0953 | r2int: 0.00170349 | r2eff: 0 | hits: 976 ] steps + 119 20151 [sigma: 31.5446 | error: 0.0438316 | coeff: 0.0438316 | eff: 1 | fom: 34.7004 | r2int: 0.00191876 | r2eff: 0 | hits: 784 ] steps + 120 15936 [sigma: 30.594 | error: 0.0488702 | coeff: 0.0488702 | eff: 1 | fom: 27.9139 | r2int: 0.00238461 | r2eff: 0 | hits: 648 ] steps + 121 20039 [sigma: 36.9493 | error: 0.0503616 | coeff: 0.0503616 | eff: 1 | fom: 26.2851 | r2int: 0.00253289 | r2eff: 0 | hits: 746 ] steps + 122 21119 [sigma: 35.0849 | error: 0.0476592 | coeff: 0.0476592 | eff: 1 | fom: 29.3505 | r2int: 0.00226864 | r2eff: 0 | hits: 823 ] steps + 123 22382 [sigma: 36.7011 | error: 0.0462923 | coeff: 0.0462923 | eff: 1 | fom: 31.1093 | r2int: 0.00214029 | r2eff: 0 | hits: 797 ] steps + 124 15406 [sigma: 29.4697 | error: 0.0494764 | coeff: 0.0494764 | eff: 1 | fom: 27.234 | r2int: 0.00244426 | r2eff: 0 | hits: 669 ] steps ============================================================ closed file mfd_tl_NumberOfSteps.out for output ============================================================ opened file mfd_tg_NumberOfSteps.out for output ============================================================ - 0 48.000000 steps - 1 17.000000 steps - 2 25.000000 steps - 3 52.000000 steps - 4 15.000000 steps - 5 8.000000 steps - 6 20.000000 steps - 7 31.000000 steps - 8 24.000000 steps - 9 67.000000 steps - 10 30.000000 steps - 11 42.000000 steps - 12 49.000000 steps - 13 13.000000 steps - 14 42.000000 steps - 15 6.000000 steps - 16 46.000000 steps - 17 23.000000 steps - 18 72.000000 steps - 19 37.000000 steps + 0 24.000000 steps + 1 30.000000 steps + 2 13.000000 steps + 3 49.000000 steps + 4 5.000000 steps + 5 7.000000 steps + 6 14.000000 steps + 7 40.000000 steps + 8 92.000000 steps + 9 24.000000 steps + 10 27.000000 steps + 11 41.000000 steps + 12 33.000000 steps + 13 34.000000 steps + 14 12.000000 steps + 15 23.000000 steps + 16 26.000000 steps + 17 41.000000 steps + 18 119.000000 steps + 19 55.000000 steps 20 3.000000 steps - 21 43.000000 steps - 22 12.000000 steps - 23 22.000000 steps - 24 79.000000 steps - 25 94.000000 steps - 26 43.000000 steps - 27 146.000000 steps + 21 22.000000 steps + 22 24.000000 steps + 23 82.000000 steps + 24 57.000000 steps + 25 92.000000 steps + 26 88.000000 steps + 27 177.000000 steps 28 111.000000 steps - 29 152.000000 steps - 30 147.000000 steps - 31 215.000000 steps - 32 303.000000 steps - 33 291.000000 steps - 34 115.000000 steps - 35 69.000000 steps - 36 292.000000 steps - 37 249.000000 steps - 38 173.000000 steps - 39 161.000000 steps - 40 114.000000 steps - 41 255.000000 steps - 42 284.000000 steps - 43 328.000000 steps - 44 58.000000 steps - 45 144.000000 steps - 46 252.000000 steps - 47 291.000000 steps - 48 116.000000 steps - 49 84.000000 steps - 50 554.000000 steps - 51 418.000000 steps - 52 666.000000 steps - 53 1055.000000 steps - 54 295.000000 steps - 55 617.000000 steps - 56 854.000000 steps - 57 1067.000000 steps - 58 611.000000 steps - 59 761.000000 steps - 60 448.000000 steps - 61 1158.000000 steps - 62 1253.000000 steps - 63 1060.000000 steps - 64 883.000000 steps - 65 573.000000 steps - 66 1210.000000 steps - 67 1045.000000 steps - 68 746.000000 steps - 69 925.000000 steps - 70 474.000000 steps - 71 548.000000 steps - 72 1120.000000 steps - 73 622.000000 steps - 74 405.000000 steps - 75 3731.000000 steps - 76 4004.000000 steps - 77 4638.000000 steps - 78 5289.000000 steps - 79 3861.000000 steps - 80 4563.000000 steps - 81 3792.000000 steps - 82 4137.000000 steps - 83 4574.000000 steps - 84 5510.000000 steps - 85 4536.000000 steps - 86 4353.000000 steps - 87 4542.000000 steps - 88 3762.000000 steps - 89 5315.000000 steps - 90 4934.000000 steps - 91 4253.000000 steps - 92 4632.000000 steps - 93 4338.000000 steps - 94 5269.000000 steps - 95 3736.000000 steps - 96 4537.000000 steps - 97 5604.000000 steps - 98 4251.000000 steps - 99 4952.000000 steps - 100 16334.000000 steps - 101 19930.000000 steps - 102 21426.000000 steps - 103 19443.000000 steps - 104 15272.000000 steps - 105 19313.000000 steps - 106 25992.000000 steps - 107 25903.000000 steps - 108 26542.000000 steps - 109 19681.000000 steps - 110 19745.000000 steps - 111 27762.000000 steps - 112 29082.000000 steps - 113 25258.000000 steps - 114 22602.000000 steps - 115 21342.000000 steps - 116 26996.000000 steps - 117 28153.000000 steps - 118 26351.000000 steps - 119 20561.000000 steps - 120 16230.000000 steps - 121 20067.000000 steps - 122 18545.000000 steps - 123 20827.000000 steps - 124 15270.000000 steps + 29 153.000000 steps + 30 105.000000 steps + 31 191.000000 steps + 32 222.000000 steps + 33 131.000000 steps + 34 102.000000 steps + 35 108.000000 steps + 36 338.000000 steps + 37 268.000000 steps + 38 193.000000 steps + 39 146.000000 steps + 40 200.000000 steps + 41 206.000000 steps + 42 274.000000 steps + 43 404.000000 steps + 44 105.000000 steps + 45 158.000000 steps + 46 235.000000 steps + 47 216.000000 steps + 48 172.000000 steps + 49 106.000000 steps + 50 426.000000 steps + 51 447.000000 steps + 52 370.000000 steps + 53 584.000000 steps + 54 396.000000 steps + 55 638.000000 steps + 56 1043.000000 steps + 57 990.000000 steps + 58 631.000000 steps + 59 449.000000 steps + 60 897.000000 steps + 61 1329.000000 steps + 62 1070.000000 steps + 63 1072.000000 steps + 64 673.000000 steps + 65 857.000000 steps + 66 1164.000000 steps + 67 1039.000000 steps + 68 969.000000 steps + 69 641.000000 steps + 70 578.000000 steps + 71 745.000000 steps + 72 928.000000 steps + 73 503.000000 steps + 74 249.000000 steps + 75 4199.000000 steps + 76 3948.000000 steps + 77 4176.000000 steps + 78 3810.000000 steps + 79 3539.000000 steps + 80 4881.000000 steps + 81 4030.000000 steps + 82 4080.000000 steps + 83 3911.000000 steps + 84 4694.000000 steps + 85 4719.000000 steps + 86 4116.000000 steps + 87 3956.000000 steps + 88 4087.000000 steps + 89 4282.000000 steps + 90 4806.000000 steps + 91 4396.000000 steps + 92 4159.000000 steps + 93 4517.000000 steps + 94 4627.000000 steps + 95 3693.000000 steps + 96 4295.000000 steps + 97 4595.000000 steps + 98 4627.000000 steps + 99 4521.000000 steps + 100 16160.000000 steps + 101 20521.000000 steps + 102 20122.000000 steps + 103 19608.000000 steps + 104 15590.000000 steps + 105 18866.000000 steps + 106 25334.000000 steps + 107 25638.000000 steps + 108 26756.000000 steps + 109 21421.000000 steps + 110 19386.000000 steps + 111 26252.000000 steps + 112 29765.000000 steps + 113 28038.000000 steps + 114 20982.000000 steps + 115 18834.000000 steps + 116 27207.000000 steps + 117 27705.000000 steps + 118 27917.000000 steps + 119 20151.000000 steps + 120 15936.000000 steps + 121 20039.000000 steps + 122 21119.000000 steps + 123 22382.000000 steps + 124 15406.000000 steps ============================================================ closed file mfd_tg_NumberOfSteps.out for output ============================================================ @@ -1693,5 +1693,5 @@ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.068 MB +Dynamic pools deleted: 13 / Total memory freed: 0.064 MB ============================================================ diff --git a/examples/extended/parameterisations/Par01/examplePar01.out b/examples/extended/parameterisations/Par01/examplePar01.out index b51e7eb009..2ce9ba5706 100644 --- a/examples/extended/parameterisations/Par01/examplePar01.out +++ b/examples/extended/parameterisations/Par01/examplePar01.out @@ -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 @@ -52,23 +52,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", @@ -139,7 +140,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 ======== @@ -792,6 +793,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 @@ -808,6 +810,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 diff --git a/examples/extended/parameterisations/Par02/examplePar02.out b/examples/extended/parameterisations/Par02/examplePar02.out index b6ba9f8bc3..d3161dd9a0 100644 --- a/examples/extended/parameterisations/Par02/examplePar02.out +++ b/examples/extended/parameterisations/Par02/examplePar02.out @@ -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 @@ -60,23 +60,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", diff --git a/examples/extended/parameterisations/Par03/Par03.out b/examples/extended/parameterisations/Par03/Par03.out index 5f17febda7..c2f4db535a 100644 --- a/examples/extended/parameterisations/Par03/Par03.out +++ b/examples/extended/parameterisations/Par03/Par03.out @@ -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", @@ -364,6 +365,7 @@ Checking overlaps for volume Detector:99 (G4Tubs) ... OK! ======================================================================= ====== 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 @@ -380,6 +382,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 diff --git a/examples/extended/parameterisations/Par04/.README.txt b/examples/extended/parameterisations/Par04/.README.txt index f3f539297b..b3eee86402 100644 --- a/examples/extended/parameterisations/Par04/.README.txt +++ b/examples/extended/parameterisations/Par04/.README.txt @@ -1,4 +1,4 @@ -///\file "parameterisations/Par03/.README.txt" +///\file "parameterisations/Par04/.README.txt" ///\brief Example Par04 README page /*! \page ExamplePar04 Example Par04 @@ -118,10 +118,18 @@ account all energy from the parameterisation. The macro file examplePar04.mac is used to run full simulation. It will simulate 100 events, for single 10 GeV electron beams. If CMake is able to find inference libraries (LWTNN and/or ONNX Runtime and/or LibTorch), a configuration - macro will be available for that library (examplePar04_lwtnn.mac and/or examplePar04_onnx.mac - and/or examplePar04_torch.mac). It will use a trained model to run inference and create showers + macro will be available for that library (examplePar04_lwtnn_vae.mac and/or examplePar04_onnx_vae.mac + and/or examplePar04_torch_vae.mac and/or examplePar04_onnx_calodit.mac and/or + examplePar04_torch_calodit.mac). It will use a trained model to run inference and create showers in the detector by directly depositing energy. + There are two models available VAE and CaloDiT-2. CaloDiT-2 is a more sophisticated transformer-based + diffusion model which gives much better accuracy, especially on the cell energy distribution, and + also can be easily adapted to new detectors. + Notes for CaloDiT-2; first, it operates on a lower granular cylindrical virtual mesh than VAE (which became + from this release also the default for full simulation). + Second, we do not support LWTNN inference, as PyTorch to LWTNN conversion is not straightforward. + ## 8. How to build and run the example - LWTNN, ONNX Runtime, and LibTorch are available on LCG. In order to use them, you can set a `CMAKE_PREFIX_PATH`: @@ -150,29 +158,33 @@ account all energy from the parameterisation. - If ONNX Runtime is available: \verbatim -% ./examplePar04 -m examplePar04_onnx.mac +% ./examplePar04 -m examplePar04_onnx_vae.mac + % ./examplePar04 -m examplePar04_onnx_calodit.mac \endverbatim For interactive mode with visualization: \verbatim -% ./examplePar04 -i -m vis_onnx.mac +% ./examplePar04 -i -m vis_onnx_vae.mac + % ./examplePar04 -i -m vis_onnx_calodit.mac \endverbatim - If LWTNN is available: \verbatim -% ./examplePar04 -m examplePar04_lwtnn.mac +% ./examplePar04 -m examplePar04_lwtnn_vae.mac \endverbatim For interactive mode with visualization: \verbatim -% ./examplePar04 -i -m vis_lwtnn.mac +% ./examplePar04 -i -m vis_lwtnn_vae.mac \endverbatim - If LibTorch is available: \verbatim -% ./examplePar04 -m examplePar04_torch.mac +% ./examplePar04 -m examplePar04_torch_vae.mac + % ./examplePar04 -m examplePar04_torch_calodit.mac \endverbatim For interactive mode with visualization: \verbatim -% ./examplePar04 -i -m vis_torch.mac +% ./examplePar04 -i -m vis_torch_vae.mac + % ./examplePar04 -i -m vis_torch_calodit.mac \endverbatim - Additional options available: @@ -195,31 +207,51 @@ For tasking run manager mode with number of tasks that can be change via env var ## 9. Macros -common_settings.mac - A macro with common settings, executed by all other macros (e.g. detector settings). + common_settings_lowgran.mac - A macro with common settings, executed by all other macros that use low granularity + (e.g. detector settings). This can be used directly by fast simulation, and for full sim + the sensitivity of absorber must be set to false (it's done in examplePar04.mac or vis.mac). + + common_settings_highgran.mac - A macro with common settings, executed by all other macros that use high granularity + (e.g. detector settings). This can be used directly by fast simulation, and for full sim + the sensitivity of absorber must be set to false. + + common_settings_vis.mac - A macro with common settings, executed by all visualisation macros. + + common_settings_postInit.mac - A macro with common settings, executed after initialization, e.g. for particle gun settings. vis.mac - Allows to run visualization. Pass it to the example in interactive mode ("-i" passed to the executable). - It can be used to visualize full simulation. + It can be used to visualize full simulation. Lower granularity is used for visualisation. To be compared to CaloDiT-2. - vis_onnx.mac - Allows to run visualization with ONNX Runtime inference. Pass it to the example in interactive mode + vis_onnx_vae.mac - Allows to run visualization with ONNX Runtime inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. - vis_lwtnn.mac - Allows to run visualization with LWTNN inference. Pass it to the example in interactive mode + vis_lwtnn_vae.mac - Allows to run visualization with LWTNN inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. - vis_torch.mac - Allows to run visualization with LibTorch inference. Pass it to the example in interactive mode + vis_torch_vae.mac - Allows to run visualization with LibTorch inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. examplePar04.mac - Runs full simulation. It will run 100 events with single electrons, 10 GeV and - along y axis. + along y axis. Lower granularity is used, to be compared with CaloDiT-2. - examplePar04_onnx.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with - a NN stored in onnx file. + examplePar04_onnx_vae.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file for VAE. - examplePar04_lwtnn.mac - Available only if LWTNN is found by CMake. Runs fast simulation with - a NN stored in json file. + examplePar04_lwtnn_vae.mac - Available only if LWTNN is found by CMake. Runs fast simulation with + a NN stored in json file for VAE. - examplePar04_torch.mac - Available only if LibTorch is found by CMake. Runs fast simulation with - a NN stored in pt file. + examplePar04_torch_vae.mac - Available only if LibTorch is found by CMake. Runs fast simulation with + a NN stored in pt file for VAE. + + vis_onnx_calodit.mac - Allows to run visualization with ONNX Runtime inference using CaloDiT-2. + + vis_torch_calodit.mac - Allows to run visualization with LibTorch inference using CaloDiT-2. + + examplePar04_onnx_calodit.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file for CaloDiT-2. + + examplePar04_torch_calodit.mac - Available only if LibTorch is found by CMake. Runs fast simulation with + a NN stored in pt file for CaloDiT-2. ## 10. UI commands @@ -251,10 +283,10 @@ common_settings.mac - A macro with common settings, executed by all other macros - readout mesh \verbatim -/Par04/mesh/setSizeOfRhoCells 2.325 mm +/Par04/mesh/setSizeOfRhoCells 2.325 mm # (4.65 for CaloDiT-2) /Par04/mesh/setSizeOfZCells 3.4 mm -/Par04/mesh/setNbOfRhoCells 18 -/Par04/mesh/setNbOfPhiCells 50 +/Par04/mesh/setNbOfRhoCells 18 # (9 for CaloDiT-2) +/Par04/mesh/setNbOfPhiCells 50 # (16 for CaloDiT-2) /Par04/mesh/setNbOfZCells 45 \endverbatim @@ -262,14 +294,14 @@ common_settings.mac - A macro with common settings, executed by all other macros \verbatim /Par04/inference/setSizeLatentVector 10 /Par04/inference/setSizeConditionVector 4 -/Par04/inference/setModelPathName MLModels/Generator.onnx +/Par04/inference/setModelPathName MLModels/Generator.onnx # (or cd.onnx for CaloDiT-2) /Par04/inference/setProfileFlag 0 /Par04/inference/setOptimizationFlag 0 /Par04/inference/setInferenceLibrary ONNX -/Par04/inference/setSizeOfRhoCells 2.325 mm +/Par04/inference/setSizeOfRhoCells 2.325 mm # (4.65 for CaloDiT-2) /Par04/inference/setSizeOfZCells 3.4 mm -/Par04/inference/setNbOfRhoCells 18 -/Par04/inference/setNbOfPhiCells 50 +/Par04/inference/setNbOfRhoCells 18 # (9 for CaloDiT-2) +/Par04/inference/setNbOfPhiCells 50 # (16 for CaloDiT-2) /Par04/inference/setNbOfZCells 45 \endverbatim @@ -278,11 +310,19 @@ common_settings.mac - A macro with common settings, executed by all other macros The scripts available in the training folder were used to firstly convert the ROOT files to the h5 files, preprocess the data and then train the VAE model of this example. More details can be found in - training/README. + training_vae/README. ## 12. Public data - Data generated with full simulation with this example has been published on zenodo. + Data generated with full simulation with this example has been published on + zenodo. + It was used (as well as VAE) for this publication: + doi.org/10.1016/j.physletb.2023.138079. + + Data generated with low granularity (so-called dataset2) and high granularity (so-called dataset3) are + released for the CaloChallenge: + dataset2 (lowgran): doi.org/10.5281/zenodo.6366271. + dataset3 (highgran): doi.org/10.5281/zenodo.6366324. */ diff --git a/examples/extended/parameterisations/Par04/CMakeLists.txt b/examples/extended/parameterisations/Par04/CMakeLists.txt index eb3a316d20..d2ebf83469 100644 --- a/examples/extended/parameterisations/Par04/CMakeLists.txt +++ b/examples/extended/parameterisations/Par04/CMakeLists.txt @@ -45,12 +45,12 @@ endif() # ONNX if(INFERENCE_LIB) find_package(OnnxRuntime QUIET) - find_package(CUDA QUIET) + find_package(CUDAToolkit QUIET) if(OnnxRuntime_FOUND) message("ONNX Runtime inference library found.") add_definitions(-DUSE_INFERENCE) add_definitions(-DUSE_INFERENCE_ONNX) - if(CUDA_FOUND) + if(CUDAToolkit_FOUND) message("Cuda found.") add_definitions(-DUSE_CUDA) else() @@ -98,13 +98,12 @@ if(OnnxRuntime_FOUND) target_include_directories(examplePar04 PUBLIC ${OnnxRuntime_INCLUDE_DIR}) target_link_libraries(examplePar04 ${OnnxRuntime_LIBRARY}) # Cuda_FOUND - if(CUDA_FOUND) - target_include_directories(examplePar04 PUBLIC ${CUDA_INCLUDE_DIRS}) - include_directories(${CUDA_INCLUDE_DIRS}) - target_link_libraries(examplePar04 ${CUDA_LIBRARIES}) + if(CUDAToolkit_FOUND) + target_link_libraries(examplePar04 CUDA::cudart) endif() # Depend on data for runtime - add_dependencies(examplePar04 examplePar04onnxdata) + add_dependencies(examplePar04 examplePar04onnxVAEdata) + add_dependencies(examplePar04 examplePar04onnxCaloDiTdata) endif() if(Torch_FOUND) @@ -112,7 +111,8 @@ if(Torch_FOUND) target_link_libraries(examplePar04 ${TORCH_LIBRARIES}) message(STATUS "${TORCH_LIBRARIES}") # Depend on data for runtime - add_dependencies(examplePar04 examplePar04torchdata) + add_dependencies(examplePar04 examplePar04torchVAEdata) + add_dependencies(examplePar04 examplePar04torchCaloDiTdata) endif() #---------------------------------------------------------------------------- @@ -121,16 +121,16 @@ endif() # relies on these scripts being in the current working directory. # set(Par04_SCRIPTS - examplePar04.mac vis.mac common_settings.mac + examplePar04.mac vis.mac common_settings_lowgran.mac common_settings_highgran.mac common_settings_vis.mac common_settings_postInit.mac ) if(lwtnn_FOUND) - set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_lwtnn.mac vis_lwtnn.mac) + set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_lwtnn_vae.mac vis_lwtnn_vae.mac) endif() if(OnnxRuntime_FOUND) - set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_onnx.mac vis_onnx.mac) + set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_onnx_calodit.mac examplePar04_onnx_vae.mac vis_onnx_calodit.mac vis_onnx_vae.mac) endif() if(Torch_FOUND) - set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_torch.mac vis_torch.mac) + set(Par04_SCRIPTS ${Par04_SCRIPTS} examplePar04_torch_calodit.mac examplePar04_torch_vae.mac vis_torch_calodit.mac vis_torch_vae.mac) endif() foreach(_script ${Par04_SCRIPTS}) @@ -158,7 +158,7 @@ if(lwtnn_FOUND) ) endif() if(OnnxRuntime_FOUND) - ExternalProject_Add(examplePar04onnxdata + ExternalProject_Add(examplePar04onnxVAEdata DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/MLModels URL https://cern.ch/geant4-data/datasets/examples/extended/parameterisations/Par04/Generator.onnx URL_MD5 cacd07c24b704decca28de990850287e @@ -167,9 +167,18 @@ if(OnnxRuntime_FOUND) INSTALL_COMMAND "" DOWNLOAD_NO_EXTRACT true ) + ExternalProject_Add(examplePar04onnxCaloDiTdata + DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/MLModels + URL https://cern.ch/geant4-data/datasets/examples/extended/parameterisations/Par04/cd.onnx + URL_MD5 eb0fa86fc53d9baf72414410a4a9e3c9 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DOWNLOAD_NO_EXTRACT true + ) endif() if(Torch_FOUND) - ExternalProject_Add(examplePar04torchdata + ExternalProject_Add(examplePar04torchVAEdata DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/MLModels URL https://cern.ch/geant4-data/datasets/examples/extended/parameterisations/Par04/Generator.pt URL_MD5 a43337f7f976e976f1127015f2ba61db @@ -178,6 +187,15 @@ if(Torch_FOUND) INSTALL_COMMAND "" DOWNLOAD_NO_EXTRACT true ) + ExternalProject_Add(examplePar04torchCaloDiTdata + DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/MLModels + URL https://cern.ch/geant4-data/datasets/examples/extended/parameterisations/Par04/cd_cpu.pt + URL_MD5 c812651390bfc2a4f4a88b3c7f945c56 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DOWNLOAD_NO_EXTRACT true + ) endif() #---------------------------------------------------------------------------- diff --git a/examples/extended/parameterisations/Par04/History b/examples/extended/parameterisations/Par04/History index 087635fbb7..c46aeb20b3 100644 --- a/examples/extended/parameterisations/Par04/History +++ b/examples/extended/parameterisations/Par04/History @@ -5,6 +5,9 @@ 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-05-27 Anna Zaborowska, Piyush Raikwar (expar04-V11-03-00) +- Update of VAE training with the new translation script and condor scripts +- Introduction of the CaloDiT pre-trained model which offers far greater accuracy ## 2024-10-22 Ben Morgan (expar04-V11-02-03) - Bump tensorflow version from [GitHub Dependabot PR](https://github.com/Geant4/geant4/pull/75) diff --git a/examples/extended/parameterisations/Par04/README b/examples/extended/parameterisations/Par04/README index bee60da9de..0f256b524e 100644 --- a/examples/extended/parameterisations/Par04/README +++ b/examples/extended/parameterisations/Par04/README @@ -130,10 +130,18 @@ account all energy from the parameterisation. The macro file examplePar04.mac is used to run full simulation. It will simulate 100 events, for single 10 GeV electron beams. If CMake is able to find inference libraries (LWTNN and/or ONNX Runtime and/or LibTorch), a configuration - macro will be available for that library (examplePar04_lwtnn.mac and/or examplePar04_onnx.mac - and/or examplePar04_torch.mac). It will use a trained model to run inference and create showers + macro will be available for that library (examplePar04_lwtnn_vae.mac and/or examplePar04_onnx_vae.mac + and/or examplePar04_torch_vae.mac and/or examplePar04_onnx_calodit.mac and/or + examplePar04_torch_calodit.mac). It will use a trained model to run inference and create showers in the detector by directly depositing energy. + There are two models available VAE and CaloDiT-2. CaloDiT-2 is a more sophisticated transformer-based + diffusion model which gives much better accuracy, especially on the cell energy distribution, and + also can be easily adapted to new detectors. + Notes for CaloDiT-2; first, it operates on a lower granular cylindrical virtual mesh than VAE (which became + from this release also the default for full simulation). + Second, we do not support LWTNN inference, as PyTorch to LWTNN conversion is not straightforward. + 8. How to build and run the example ----------------------------------- - LWTNN, ONNX Runtime, and LibTorch are available on LCG. In order to use them, you can set a CMAKE_PREFIX_PATH: @@ -153,18 +161,23 @@ account all energy from the parameterisation. which allows to visualize hits (from full simulation). - If ONNX Runtime is available: - % ./examplePar04 -m examplePar04_onnx.mac + % ./examplePar04 -m examplePar04_onnx_vae.mac + % ./examplePar04 -m examplePar04_onnx_calodit.mac For interactive mode with visualization: - % ./examplePar04 -i -m vis_onnx.mac + % ./examplePar04 -i -m vis_onnx_vae.mac + % ./examplePar04 -i -m vis_onnx_calodit.mac - If LWTNN is available: - % ./examplePar04 -m examplePar04_lwtnn.mac + % ./examplePar04 -m examplePar04_lwtnn_vae.mac For interactive mode with visualization: - % ./examplePar04 -i -m vis_lwtnn.mac + % ./examplePar04 -i -m vis_lwtnn_vae.mac + - If LibTorch is available: - % ./examplePar04 -m examplePar04_torch.mac + % ./examplePar04 -m examplePar04_torch_vae.mac + % ./examplePar04 -m examplePar04_torch_calodit.mac For interactive mode with visualization: - % ./examplePar04 -i -m vis_torch.mac + % ./examplePar04 -i -m vis_torch_vae.mac + % ./examplePar04 -i -m vis_torch_calodit.mac - Additional options available: % ./examplePar04 -m examplePar04.mac -r 0 @@ -182,31 +195,51 @@ account all energy from the parameterisation. 9. Macros --------- -common_settings.mac - A macro with common settings, executed by all other macros (e.g. detector settings). + common_settings_lowgran.mac - A macro with common settings, executed by all other macros that use low granularity + (e.g. detector settings). This can be used directly by fast simulation, and for full sim + the sensitivity of absorber must be set to false (it's done in examplePar04.mac or vis.mac). + + common_settings_highgran.mac - A macro with common settings, executed by all other macros that use high granularity + (e.g. detector settings). This can be used directly by fast simulation, and for full sim + the sensitivity of absorber must be set to false. + + common_settings_vis.mac - A macro with common settings, executed by all visualisation macros. + + common_settings_postInit.mac - A macro with common settings, executed after initialization, e.g. for particle gun settings. vis.mac - Allows to run visualization. Pass it to the example in interactive mode ("-i" passed to the executable). - It can be used to visualize full simulation. + It can be used to visualize full simulation. Lower granularity is used for visualisation. To be compared to CaloDiT-2. - vis_onnx.mac - Allows to run visualization with ONNX Runtime inference. Pass it to the example in interactive mode + vis_onnx_vae.mac - Allows to run visualization with ONNX Runtime inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. - vis_lwtnn.mac - Allows to run visualization with LWTNN inference. Pass it to the example in interactive mode + vis_lwtnn_vae.mac - Allows to run visualization with LWTNN inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. - vis_torch.mac - Allows to run visualization with LibTorch inference. Pass it to the example in interactive mode + vis_torch_vae.mac - Allows to run visualization with LibTorch inference using VAE. Pass it to the example in interactive mode ("-i" passed to the executable). It contains necessary settings of the inference. examplePar04.mac - Runs full simulation. It will run 100 events with single electrons, 10 GeV and - along y axis. + along y axis. Lower granularity is used, to be compared with CaloDiT-2. - examplePar04_onnx.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with - a NN stored in onnx file. + examplePar04_onnx_vae.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file for VAE. - examplePar04_lwtnn.mac - Available only if LWTNN is found by CMake. Runs fast simulation with - a NN stored in json file. + examplePar04_lwtnn_vae.mac - Available only if LWTNN is found by CMake. Runs fast simulation with + a NN stored in json file for VAE. - examplePar04_torch.mac - Available only if LibTorch is found by CMake. Runs fast simulation with - a NN stored in pt file. + examplePar04_torch_vae.mac - Available only if LibTorch is found by CMake. Runs fast simulation with + a NN stored in pt file for VAE. + + vis_onnx_calodit.mac - Allows to run visualization with ONNX Runtime inference using CaloDiT-2. + + vis_torch_calodit.mac - Allows to run visualization with LibTorch inference using CaloDiT-2. + + examplePar04_onnx_calodit.mac - Available only if ONNX Runtime is found by CMake. Runs fast simulation with + a NN stored in onnx file for CaloDiT-2. + + examplePar04_torch_calodit.mac - Available only if LibTorch is found by CMake. Runs fast simulation with + a NN stored in pt file for CaloDiT-2. 10. UI commands -------------- @@ -232,23 +265,23 @@ common_settings.mac - A macro with common settings, executed by all other macros /Par04/detector/setAbsorber 1 G4_Si 0.3 mm true - readout mesh - /Par04/mesh/setSizeOfRhoCells 2.325 mm + /Par04/mesh/setSizeOfRhoCells 2.325 mm # (4.65 for CaloDiT-2) /Par04/mesh/setSizeOfZCells 3.4 mm - /Par04/mesh/setNbOfRhoCells 18 - /Par04/mesh/setNbOfPhiCells 50 + /Par04/mesh/setNbOfRhoCells 18 # (9 for CaloDiT-2) + /Par04/mesh/setNbOfPhiCells 50 # (16 for CaloDiT-2) /Par04/mesh/setNbOfZCells 45 - inference setup /Par04/inference/setSizeLatentVector 10 /Par04/inference/setSizeConditionVector 4 - /Par04/inference/setModelPathName MLModels/Generator.onnx + /Par04/inference/setModelPathName MLModels/Generator.onnx # (or cd.onnx for CaloDiT-2) /Par04/inference/setProfileFlag 0 /Par04/inference/setOptimizationFlag 0 /Par04/inference/setInferenceLibrary ONNX - /Par04/inference/setSizeOfRhoCells 2.325 mm + /Par04/inference/setSizeOfRhoCells 2.325 mm # (4.65 for CaloDiT-2) /Par04/inference/setSizeOfZCells 3.4 mm - /Par04/inference/setNbOfRhoCells 18 - /Par04/inference/setNbOfPhiCells 50 + /Par04/inference/setNbOfRhoCells 18 # (9 for CaloDiT-2) + /Par04/inference/setNbOfPhiCells 50 # (16 for CaloDiT-2) /Par04/inference/setNbOfZCells 45 11. Python scripts for training @@ -257,11 +290,20 @@ common_settings.mac - A macro with common settings, executed by all other macros The scripts available in the training folder were used to firstly convert the ROOT files to the h5 files, preprocess the data and then train the VAE model of this example. More details can be found in - training/README. + training_vae/README. + + For CaloDiT-2 training and adaptation to new detectors, refer training_calodit/README. 12. Public data -------------- - Data generated with full simulation with this example has been published on zenodo: + Data generated with full simulation with higher granularity, with this example has been published on zenodo: https://doi.org/10.5281/zenodo.6082201 + It was used (as well as VAE) for this publication: + https://doi.org/10.1016/j.physletb.2023.138079 + + Data generated with low granularity (so-called dataset2) and high granularity (so-called dataset3) are + released for the CaloChallenge: + dataset2 (lowgran): https://doi.org/10.5281/zenodo.6366271 + dataset3 (highgran): https://doi.org/10.5281/zenodo.6366324 \ No newline at end of file diff --git a/examples/extended/parameterisations/Par04/cmake/FindOnnxRuntime.cmake b/examples/extended/parameterisations/Par04/cmake/FindOnnxRuntime.cmake index cb5396cf67..758f1d9361 100644 --- a/examples/extended/parameterisations/Par04/cmake/FindOnnxRuntime.cmake +++ b/examples/extended/parameterisations/Par04/cmake/FindOnnxRuntime.cmake @@ -11,8 +11,8 @@ find_library( find_path( OnnxRuntime_INCLUDE_DIR - NAMES core/session/onnxruntime_cxx_api.h - PATH_SUFFIXES include include/onnxruntime + NAMES onnxruntime_cxx_api.h + PATH_SUFFIXES include include/onnxruntime include/core/session DOC "The ONNXRuntime include directory") include(FindPackageHandleStandardArgs) diff --git a/examples/extended/parameterisations/Par04/common_settings.mac b/examples/extended/parameterisations/Par04/common_settings_highgran.mac similarity index 79% rename from examples/extended/parameterisations/Par04/common_settings.mac rename to examples/extended/parameterisations/Par04/common_settings_highgran.mac index 0df8e8becf..6102968740 100644 --- a/examples/extended/parameterisations/Par04/common_settings.mac +++ b/examples/extended/parameterisations/Par04/common_settings_highgran.mac @@ -4,7 +4,7 @@ /Par04/detector/setDetectorInnerRadius 80 cm /Par04/detector/setDetectorLength 2 m /Par04/detector/setNbOfLayers 90 -/Par04/detector/setAbsorber 0 G4_W 1.4 mm false +/Par04/detector/setAbsorber 0 G4_W 1.4 mm true /Par04/detector/setAbsorber 1 G4_Si 0.3 mm true ## 2.325 mm of tungsten =~ 0.25 * 9.327 mm = 0.25 * R_Moliere /Par04/mesh/setSizeOfRhoCells 2.325 mm @@ -17,10 +17,4 @@ ## 32 slices in 2 pi /Par04/parallel/setNbOfSlices 320 ## detector length / 100 rows = 4m / 100 = 4cm -/Par04/parallel/setNbOfRows 100 - -# Initialize -/run/initialize -/gun/energy 10 GeV -/gun/position 0 0 0 -/gun/direction 0 1 0 \ No newline at end of file +/Par04/parallel/setNbOfRows 100 \ No newline at end of file diff --git a/examples/extended/parameterisations/Par04/common_settings_lowgran.mac b/examples/extended/parameterisations/Par04/common_settings_lowgran.mac new file mode 100644 index 0000000000..44cf4b853d --- /dev/null +++ b/examples/extended/parameterisations/Par04/common_settings_lowgran.mac @@ -0,0 +1,20 @@ +# Supress output of physics list initialization +/process/had/verbose 0 +# Detector Construction +/Par04/detector/setDetectorInnerRadius 80 cm +/Par04/detector/setDetectorLength 2 m +/Par04/detector/setNbOfLayers 90 +/Par04/detector/setAbsorber 0 G4_W 1.4 mm true +/Par04/detector/setAbsorber 1 G4_Si 0.3 mm true +## 2.325 mm of tungsten =~ 0.25 * 9.327 mm = 0.25 * R_Moliere +/Par04/mesh/setSizeOfRhoCells 4.65 mm +## 2 * 1.4 mm of tungsten =~ 0.65 X_0 +/Par04/mesh/setSizeOfZCells 3.4 mm +/Par04/mesh/setNbOfRhoCells 9 +/Par04/mesh/setNbOfPhiCells 16 +/Par04/mesh/setNbOfZCells 45 +## Parallel world +## 32 slices in 2 pi +/Par04/parallel/setNbOfSlices 320 +## detector length / 100 rows = 4m / 100 = 4cm +/Par04/parallel/setNbOfRows 100 \ No newline at end of file diff --git a/examples/extended/parameterisations/Par04/common_settings_postInit.mac b/examples/extended/parameterisations/Par04/common_settings_postInit.mac new file mode 100644 index 0000000000..3cc7aad1db --- /dev/null +++ b/examples/extended/parameterisations/Par04/common_settings_postInit.mac @@ -0,0 +1,3 @@ +/gun/energy 10 GeV +/gun/position 0 0 0 +/gun/direction 0 1 0 \ No newline at end of file diff --git a/examples/extended/parameterisations/Par04/vis_lwtnn.mac b/examples/extended/parameterisations/Par04/common_settings_vis.mac similarity index 54% rename from examples/extended/parameterisations/Par04/vis_lwtnn.mac rename to examples/extended/parameterisations/Par04/common_settings_vis.mac index d7d39ed0c5..8ee7c3e7ed 100644 --- a/examples/extended/parameterisations/Par04/vis_lwtnn.mac +++ b/examples/extended/parameterisations/Par04/common_settings_vis.mac @@ -1,25 +1,17 @@ -/Par04/detector/setDetectorInnerRadius 80 cm -/Par04/detector/setDetectorLength 4 m -/Par04/detector/setNbOfLayers 90 -/Par04/detector/setAbsorber 0 G4_W 1.4 mm true -/Par04/detector/setAbsorber 1 G4_Si 0.3 mm true -/Par04/mesh/setSizeOfRhoCells 2.325 mm -/Par04/mesh/setSizeOfZCells 3.4 mm -/Par04/mesh/setNbOfRhoCells 18 -/Par04/mesh/setNbOfPhiCells 50 -/Par04/mesh/setNbOfZCells 45 -/Par04/detector/print - -# Use default detector dimensions and initialize -/run/initialize - -# If inference model is active, de-activate it because it needs configuration -/param/InActivateModel inferenceModel - -# Open a viewer -/vis/open -# This opens the default viewer - see examples/basic/B1/vis.mac for a -# more comprehensive overview of options. Also the documentation. +# Use this open statement to create an OpenGL view: +/vis/open OGL 600x600-0+0 +# +# Use this open statement to create a .prim file suitable for +# viewing in DAWN: +#/vis/open DAWNFILE +# +# Use this open statement to create a .heprep file suitable for +# viewing in HepRApp: +#/vis/open HepRepFile +# +# Use this open statement to create a .wrl file suitable for +# viewing in a VRML viewer: +#/vis/open VRML2FILE # # Disable auto refresh and quieten vis messages whilst scene and # trajectories are established: @@ -27,14 +19,14 @@ /vis/verbose errors # # Draw geometry: -/vis/drawVolume worlds +/vis/drawVolume world # # Specify view angle: /vis/viewer/set/viewpointThetaPhi 0 90 deg /vis/viewer/set/targetPoint 0 850 0 mm # # Specify zoom value: -/vis/viewer/zoomTo 40 +/vis/viewer/zoom 20 # # Specify style (surface or wireframe): #/vis/viewer/set/style wireframe @@ -84,24 +76,3 @@ # For file-based drivers, use this to create an empty detector view: #/vis/viewer/flush /vis/viewer/set/background 1 1 1 - -# Fast Simulation -# Inference Setup -## dimension of the latent vector (encoded vector in a Variational Autoencoder model) -/Par04/inference/setSizeLatentVector 10 -## size of the condition vector (energy, angle and geometry) -/Par04/inference/setSizeConditionVector 4 -## path to the model which is set to download by cmake -/Par04/inference/setModelPathName MLModels/Generator.json -/Par04/inference/setInferenceLibrary LWTNN -## set mesh size for inference == mesh size of a full sim that -## was used for training; it coincides with readout mesh size -/Par04/inference/setSizeOfRhoCells 2.325 mm -/Par04/inference/setSizeOfZCells 3.4 mm -/Par04/inference/setNbOfRhoCells 18 -/Par04/inference/setNbOfPhiCells 50 -/Par04/inference/setNbOfZCells 45 -## Dynamic readout mesh from particle direction needs to be the first fast sim model! -/param/ActivateModel defineMesh -## ML fast sim, configured with the inference setup /Par04/inference -/param/ActivateModel inferenceModel diff --git a/examples/extended/parameterisations/Par04/examplePar04.cc b/examples/extended/parameterisations/Par04/examplePar04.cc index 22d59e4490..9311770b88 100644 --- a/examples/extended/parameterisations/Par04/examplePar04.cc +++ b/examples/extended/parameterisations/Par04/examplePar04.cc @@ -143,8 +143,12 @@ int main(int argc, char** argv) } // Initialization of default Run manager - auto* runManager = G4RunManagerFactory::CreateRunManager(runManagerType); - if (runManagerTypeInt == 1) runManager->SetNumberOfThreads(numOfThreadsOrTasks); + auto* runManager = + G4RunManagerFactory::CreateRunManager(runManagerType); + if(runManagerTypeInt == 1 || runManagerTypeInt == 2) { + runManager->SetNumberOfThreads(numOfThreadsOrTasks); + } + // Detector geometry: auto detector = new Par04DetectorConstruction(); auto parallelWorldFull = new Par04ParallelFullWorld("parallelWorldFullSim", detector); @@ -174,15 +178,16 @@ int main(int argc, char** argv) // UserAction classes //------------------------------- runManager->SetUserInitialization(new Par04ActionInitialisation(detector, parallelWorldFull)); - //---------------- - // Visualization: - //---------------- - G4cout << "Instantiating Visualization Manager......." << G4endl; - G4VisManager* visManager = new G4VisExecutive; - visManager->Initialize(); G4UImanager* UImanager = G4UImanager::GetUIpointer(); if (useInteractiveMode) { + //---------------- + // Visualization: + //---------------- + G4cout << "Instantiating Visualization Manager......." << G4endl; + G4VisManager* visManager = new G4VisExecutive; + visManager->Initialize(); + if (batchMacroName.empty()) { G4Exception("main", "Unknown macro name", FatalErrorInArgument, ("No macro name passed to " + G4String(argv[0])).c_str()); @@ -190,7 +195,7 @@ int main(int argc, char** argv) G4String command = "/control/execute "; UImanager->ApplyCommand(command + batchMacroName); ui->SessionStart(); - delete ui; + delete visManager; } else { G4String command = "/control/execute "; @@ -200,8 +205,7 @@ int main(int argc, char** argv) // Free the store: user actions, physics_list and detector_description are // owned and deleted by the run manager, so they should not // be deleted in the main() program ! - - delete visManager; + delete ui; delete runManager; return 0; diff --git a/examples/extended/parameterisations/Par04/examplePar04.mac b/examples/extended/parameterisations/Par04/examplePar04.mac index 17bce59dbf..65564ac43c 100644 --- a/examples/extended/parameterisations/Par04/examplePar04.mac +++ b/examples/extended/parameterisations/Par04/examplePar04.mac @@ -1,6 +1,13 @@ # examplePar04.mac # -/control/execute common_settings.mac +/control/execute common_settings_lowgran.mac + +# Overwrite the sensitivity of the absorber to account for the passive material +/Par04/detector/setAbsorber 0 G4_W 1.4 mm false +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac # Full Simulation /analysis/setFileName 10GeV_100events_fullsim.root diff --git a/examples/extended/parameterisations/Par04/examplePar04.out b/examples/extended/parameterisations/Par04/examplePar04.out index d4ac616de2..9d62749f7b 100644 --- a/examples/extended/parameterisations/Par04/examplePar04.out +++ b/examples/extended/parameterisations/Par04/examplePar04.out @@ -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 @@ -21,76 +21,6 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo <<< Geant4 Physics List simulation engine: FTFP_BERT -Instantiating Visualization Manager....... -Visualization Manager instantiating with verbosity "warnings (3)"... -Visualization Manager initialising... -Registering graphics systems... - -You have successfully registered the following graphics systems. -Registered graphics systems are: - ASCIITree (ATree) - DAWNFILE (DAWNFILE) - G4HepRepFile (HepRepFile) - RayTracer (RayTracer) - VRML2FILE (VRML2FILE) - gMocrenFile (gMocrenFile) - TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) - OpenGLImmediateQt (OGLIQt, OGLI) - OpenGLStoredQt (OGLSQt, OGL, OGLS) - OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) - OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) - OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) - OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) - RayTracerX (RayTracerX) - 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_ZB (TSG_QT_ZB, TSGQtZB) -You may choose a graphics system (driver) with a parameter of -the command "/vis/open" or "/vis/sceneHandler/create", -or you may omit the driver parameter and choose at run time: -- by argument in the construction of G4VisExecutive -- by environment variable "G4VIS_DEFAULT_DRIVER" -- by entry in "~/.g4session" -- by build flags. -- Note: This feature is not allowed in batch mode. -For further information see "examples/basic/B1/exampleB1.cc" -and "vis.mac". - -Registering model factories... - -You have successfully registered the following model factories. -Registered model factories: - generic - drawByAttribute - drawByCharge - drawByOriginVolume - drawByParticleID - drawByEncounteredVolume - -Registered models: - None - -Registered filter factories: - attributeFilter - chargeFilter - originVolumeFilter - particleFilter - encounteredVolumeFilter - -Registered filters: - None - -You have successfully registered the following user vis actions. -Run Duration User Vis Actions: none -End of Event User Vis Actions: none -End of Run User Vis Actions: none - -Some /vis commands (optionally) take a string to specify colour. -"/vis/list" to see available colours. ------------------------------------------------------ --- Detector length: 2 m @@ -162,5 +92,3 @@ Setting was ignored. *** This is just a warning message. *** -------- WWWW -------- G4Exception-END --------- WWWW ------- -Graphics systems deleted. -Visualization Manager deleting... diff --git a/examples/extended/parameterisations/Par04/examplePar04_lwtnn.mac b/examples/extended/parameterisations/Par04/examplePar04_lwtnn_vae.mac similarity index 82% rename from examples/extended/parameterisations/Par04/examplePar04_lwtnn.mac rename to examples/extended/parameterisations/Par04/examplePar04_lwtnn_vae.mac index e25a90d6be..6bda0deadf 100644 --- a/examples/extended/parameterisations/Par04/examplePar04_lwtnn.mac +++ b/examples/extended/parameterisations/Par04/examplePar04_lwtnn_vae.mac @@ -1,6 +1,10 @@ -# examplePar04_lwtnn.mac +# examplePar04_lwtnn_vae.mac # -/control/execute common_settings.mac +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac # Inference Setup ## dimension of the latent vector (encoded vector in a Variational Autoencoder model) @@ -19,7 +23,7 @@ /Par04/inference/setNbOfZCells 45 # Fast Simulation -/analysis/setFileName 10GeV_100events_fastsim_lwtnn.root +/analysis/setFileName 10GeV_100events_vae_lwtnn.root ## dynamically set readout mesh from particle direction ## needs to be the first fast sim model! /param/ActivateModel defineMesh diff --git a/examples/extended/parameterisations/Par04/examplePar04_onnx_calodit.mac b/examples/extended/parameterisations/Par04/examplePar04_onnx_calodit.mac new file mode 100644 index 0000000000..9bed566520 --- /dev/null +++ b/examples/extended/parameterisations/Par04/examplePar04_onnx_calodit.mac @@ -0,0 +1,42 @@ +# examplePar04_onnx_calodit.mac +# +/control/execute common_settings_lowgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac + +# Inference Setup +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/cd.onnx +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType CaloDiT-2 +/Par04/inference/setProfileFlag 0 +/Par04/inference/setOptimizationFlag 0 +## cuda flag +/Par04/inference/setCudaFlag 0 +/Par04/inference/setInferenceLibrary ONNX +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 4.65 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 9 +/Par04/inference/setNbOfPhiCells 16 +/Par04/inference/setNbOfZCells 45 + +# cuda options +/Par04/inference/cuda/setDeviceId 0 +/Par04/inference/cuda/setGpuMemLimit 2147483648 +/Par04/inference/cuda/setArenaExtendedStrategy kSameAsRequested +/Par04/inference/cuda/setCudnnConvAlgoSearch DEFAULT +/Par04/inference/cuda/setDoCopyInDefaultStream 1 +/Par04/inference/cuda/setCudnnConvUseMaxWorkspace 1 + +# Fast Simulation +/analysis/setFileName 10GeV_100events_calodit_onnx.root +## dynamically set readout mesh from particle direction +## needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 100 diff --git a/examples/extended/parameterisations/Par04/examplePar04_onnx.mac b/examples/extended/parameterisations/Par04/examplePar04_onnx_vae.mac similarity index 81% rename from examples/extended/parameterisations/Par04/examplePar04_onnx.mac rename to examples/extended/parameterisations/Par04/examplePar04_onnx_vae.mac index d50461ab42..6fa3092598 100644 --- a/examples/extended/parameterisations/Par04/examplePar04_onnx.mac +++ b/examples/extended/parameterisations/Par04/examplePar04_onnx_vae.mac @@ -1,6 +1,10 @@ -# examplePar04_onnx.mac +# examplePar04_onnx_vae.mac # -/control/execute common_settings.mac +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac # Inference Setup ## dimension of the latent vector (encoded vector in a Variational Autoencoder model) @@ -9,7 +13,9 @@ /Par04/inference/setSizeConditionVector 4 ## path to the model which is set to download by cmake /Par04/inference/setModelPathName MLModels/Generator.onnx -/Par04/inference/setProfileFlag 1 +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType VAE +/Par04/inference/setProfileFlag 0 /Par04/inference/setOptimizationFlag 0 ## cuda flag /Par04/inference/setCudaFlag 0 @@ -31,7 +37,7 @@ /Par04/inference/cuda/setCudnnConvUseMaxWorkspace 1 # Fast Simulation -/analysis/setFileName 10GeV_100events_fastsim_onnx.root +/analysis/setFileName 10GeV_100events_vae_onnx.root ## dynamically set readout mesh from particle direction ## needs to be the first fast sim model! /param/ActivateModel defineMesh diff --git a/examples/extended/parameterisations/Par04/examplePar04_torch_calodit.mac b/examples/extended/parameterisations/Par04/examplePar04_torch_calodit.mac new file mode 100644 index 0000000000..bc3d19dde4 --- /dev/null +++ b/examples/extended/parameterisations/Par04/examplePar04_torch_calodit.mac @@ -0,0 +1,31 @@ +# examplePar04_torch_calodit.mac +# + +/control/execute common_settings_lowgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac + +# Inference Setup +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/cd_cpu.pt +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType CaloDiT-2 +/Par04/inference/setInferenceLibrary TORCH +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 4.65 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 9 +/Par04/inference/setNbOfPhiCells 16 +/Par04/inference/setNbOfZCells 45 + +# Fast Simulation +/analysis/setFileName 10GeV_100events_calodit_torch.root +## dynamically set readout mesh from particle direction +## needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 100 diff --git a/examples/extended/parameterisations/Par04/examplePar04_torch.mac b/examples/extended/parameterisations/Par04/examplePar04_torch_vae.mac similarity index 77% rename from examples/extended/parameterisations/Par04/examplePar04_torch.mac rename to examples/extended/parameterisations/Par04/examplePar04_torch_vae.mac index c3eef220c2..29096a3b3e 100644 --- a/examples/extended/parameterisations/Par04/examplePar04_torch.mac +++ b/examples/extended/parameterisations/Par04/examplePar04_torch_vae.mac @@ -1,7 +1,11 @@ -# examplePar04_torch.mac +# examplePar04_torch_vae.mac # -/control/execute common_settings.mac +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac # Inference Setup ## dimension of the latent vector (encoded vector in a Variational Autoencoder model) @@ -10,6 +14,8 @@ /Par04/inference/setSizeConditionVector 4 ## path to the model which is set to download by cmake /Par04/inference/setModelPathName MLModels/Generator.pt +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType VAE /Par04/inference/setInferenceLibrary TORCH ## set mesh size for inference == mesh size of a full sim that ## was used for training; it coincides with readout mesh size @@ -20,7 +26,7 @@ /Par04/inference/setNbOfZCells 45 # Fast Simulation -/analysis/setFileName 10GeV_100events_fastsim_libtorch.root +/analysis/setFileName 10GeV_100events_vae_torch.root ## dynamically set readout mesh from particle direction ## needs to be the first fast sim model! /param/ActivateModel defineMesh diff --git a/examples/extended/parameterisations/Par04/include/Par04InferenceMessenger.hh b/examples/extended/parameterisations/Par04/include/Par04InferenceMessenger.hh index d690563a91..d8f5b47461 100644 --- a/examples/extended/parameterisations/Par04/include/Par04InferenceMessenger.hh +++ b/examples/extended/parameterisations/Par04/include/Par04InferenceMessenger.hh @@ -70,6 +70,8 @@ class Par04InferenceMessenger : public G4UImessenger G4UIcmdWithAString* fInferenceLibraryCmd = nullptr; /// Command to set fModelPathNameCmd G4UIcmdWithAString* fModelPathNameCmd = nullptr; + /// Command to set fModelTypeCmd + G4UIcmdWithAString *fModelTypeCmd = nullptr; /// Command to set the fSizeLatentVectorCmd G4UIcmdWithAnInteger* fSizeLatentVectorCmd = nullptr; /// Command to set the fSizeConditionVectorCmd diff --git a/examples/extended/parameterisations/Par04/include/Par04InferenceSetup.hh b/examples/extended/parameterisations/Par04/include/Par04InferenceSetup.hh index 445bf9187a..4a96097972 100644 --- a/examples/extended/parameterisations/Par04/include/Par04InferenceSetup.hh +++ b/examples/extended/parameterisations/Par04/include/Par04InferenceSetup.hh @@ -93,6 +93,10 @@ class Par04InferenceSetup inline void SetModelPathName(G4String aName) { fModelPathName = aName; }; /// Get path and name of the model inline G4String GetModelPathName() const { return fModelPathName; }; + /// Set model type + inline void SetModelType(G4String aName) { fModelType = aName; }; + /// Get model type + inline G4String GetModelType() const { return fModelType; }; /// Set profiling flag inline void SetProfileFlag(G4int aNumber) { fProfileFlag = aNumber; }; /// Get profiling flag @@ -161,7 +165,7 @@ class Par04InferenceSetup /// detector /// @param[in] aParticleEnergy Energy of initial particle void GetEnergies(std::vector& aEnergies, G4double aParticleEnergy, - G4float aInitialAngle); + G4float aTheta, G4float aPhi); /// Calculate positions /// @param[out] aDepositsPositions Vector of positions corresponding to @@ -200,6 +204,8 @@ class Par04InferenceSetup G4int fSizeConditionVector = 4; /// Name of the inference library G4String fModelPathName = "MLModels/Generator.onnx"; + /// Model type + G4String fModelType = "VAE"; /// ONNX specific /// Profiling flag G4bool fProfileFlag = false; diff --git a/examples/extended/parameterisations/Par04/include/Par04OnnxInference.hh b/examples/extended/parameterisations/Par04/include/Par04OnnxInference.hh index a66c71116f..dfc450c80d 100644 --- a/examples/extended/parameterisations/Par04/include/Par04OnnxInference.hh +++ b/examples/extended/parameterisations/Par04/include/Par04OnnxInference.hh @@ -28,15 +28,14 @@ # ifndef PAR04ONNXINFERENCE_HH # define PAR04ONNXINFERENCE_HH # include "Par04InferenceInterface.hh" // for Par04InferenceInterface -# include "core/session/onnxruntime_cxx_api.h" // for Env, Session, SessionO... +# include "onnxruntime_c_api.h" // for OrtMemoryInfo +# include "onnxruntime_cxx_api.h" // for Env, Session, SessionO... # include // for G4String # include // for G4int, G4double # include // for unique_ptr # include // for vector -# include // for OrtMemoryInfo - /** * @brief Inference using the ONNX runtime. * diff --git a/examples/extended/parameterisations/Par04/src/Par04Hit.cc b/examples/extended/parameterisations/Par04/src/Par04Hit.cc index dea2c3c527..4bd0c90d42 100644 --- a/examples/extended/parameterisations/Par04/src/Par04Hit.cc +++ b/examples/extended/parameterisations/Par04/src/Par04Hit.cc @@ -104,7 +104,7 @@ int Par04Hit::operator==(const Par04Hit& aRight) const void Par04Hit::Draw() { /// Arbitrary size corresponds to the example macros - G4ThreeVector meshSize(2.325 * mm, 2 * CLHEP::pi / 50. * CLHEP::rad, 3.4 * mm); + G4ThreeVector meshSize(4.65 * mm, 2 * CLHEP::pi / 18. * CLHEP::rad, 3.4 * mm); G4int numPhiCells = CLHEP::pi * 2. / meshSize.y(); G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); // Hits can be filtered out in visualisation @@ -166,7 +166,7 @@ std::vector* Par04Hit::CreateAttValues() const void Par04Hit::Print() { - std::cout << "\tHit " << fEdep / MeV << " MeV from " << fNdep << " deposits at " << fPos / cm - << " cm rotation " << fRot << " (R,phi,z)= (" << fRhoId << ", " << fPhiId << ", " - << fZId << "), " << fTime << " ns" << std::endl; + G4cout << "\tHit " << fEdep / MeV << " MeV from " << fNdep << " deposits at " << fPos / cm + << " cm with rotation " << fRot << " (R,phi,z)= (" << fRhoId << ", " << fPhiId << ", " + << fZId << "), " << fTime << " ns" << G4endl; } diff --git a/examples/extended/parameterisations/Par04/src/Par04InferenceMessenger.cc b/examples/extended/parameterisations/Par04/src/Par04InferenceMessenger.cc index dd10a6de83..7e2f45a7b4 100644 --- a/examples/extended/parameterisations/Par04/src/Par04InferenceMessenger.cc +++ b/examples/extended/parameterisations/Par04/src/Par04InferenceMessenger.cc @@ -78,6 +78,12 @@ Par04InferenceMessenger::Par04InferenceMessenger(Par04InferenceSetup* aInference fModelPathNameCmd->AvailableForStates(G4State_Idle); fModelPathNameCmd->SetToBeBroadcasted(true); + fModelTypeCmd = new G4UIcmdWithAString("/Par04/inference/setModelType", this); + fModelTypeCmd->SetGuidance("Model type"); + fModelTypeCmd->SetParameterName("Name", false); + fModelTypeCmd->AvailableForStates(G4State_Idle); + fModelTypeCmd->SetToBeBroadcasted(true); + fProfileFlagCmd = new G4UIcmdWithAnInteger("/Par04/inference/setProfileFlag", this); fProfileFlagCmd->SetGuidance("Flag to save a json file for model execution profiling."); fProfileFlagCmd->SetParameterName("ProfileFlag", false); @@ -193,6 +199,7 @@ Par04InferenceMessenger::~Par04InferenceMessenger() delete fSizeLatentVectorCmd; delete fSizeConditionVectorCmd; delete fModelPathNameCmd; + delete fModelTypeCmd; delete fProfileFlagCmd; delete fOptimizationFlagCmd; delete fMeshNbRhoCellsCmd; @@ -218,6 +225,9 @@ void Par04InferenceMessenger::SetNewValue(G4UIcommand* aCommand, G4String aNewVa if (aCommand == fModelPathNameCmd) { fInference->SetModelPathName(aNewValue); } + if (aCommand == fModelTypeCmd) { + fInference->SetModelType(aNewValue); + } if (aCommand == fProfileFlagCmd) { fInference->SetProfileFlag(std::stoi(aNewValue)); } @@ -284,6 +294,9 @@ G4String Par04InferenceMessenger::GetCurrentValue(G4UIcommand* aCommand) if (aCommand == fModelPathNameCmd) { cv = fModelPathNameCmd->ConvertToString(fInference->GetModelPathName()); } + if (aCommand == fModelTypeCmd) { + cv = fModelTypeCmd->ConvertToString(fInference->GetModelType()); + } if (aCommand == fProfileFlagCmd) { cv = fSizeLatentVectorCmd->ConvertToString(fInference->GetProfileFlag()); } diff --git a/examples/extended/parameterisations/Par04/src/Par04InferenceSetup.cc b/examples/extended/parameterisations/Par04/src/Par04InferenceSetup.cc index c36803a83f..62c6657262 100644 --- a/examples/extended/parameterisations/Par04/src/Par04InferenceSetup.cc +++ b/examples/extended/parameterisations/Par04/src/Par04InferenceSetup.cc @@ -119,15 +119,19 @@ void Par04InferenceSetup::CheckInferenceLibrary() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Par04InferenceSetup::GetEnergies(std::vector& aEnergies, G4double aInitialEnergy, - G4float aInitialAngle) + G4float aTheta, G4float aPhi) { // First check if inference library was set correctly CheckInferenceLibrary(); // size represents the size of the output vector int size = fMeshNumber.x() * fMeshNumber.y() * fMeshNumber.z(); + std::vector genVector; + + if (fModelType == "VAE") + { + genVector.assign(fSizeLatentVector + fSizeConditionVector, 0); // randomly sample from a gaussian distribution in the latent space - std::vector genVector(fSizeLatentVector + fSizeConditionVector, 0); for (int i = 0; i < fSizeLatentVector; ++i) { genVector[i] = CLHEP::RandGauss::shoot(0., 1.); } @@ -144,18 +148,49 @@ void Par04InferenceSetup::GetEnergies(std::vector& aEnergies, G4double // 1. energy genVector[fSizeLatentVector] = aInitialEnergy / fMaxEnergy; // 2. angle - genVector[fSizeLatentVector + 1] = (aInitialAngle / (CLHEP::deg)) / fMaxAngle; + genVector[fSizeLatentVector + 1] = (aTheta / (CLHEP::deg)) / fMaxAngle; // 3. geometry genVector[fSizeLatentVector + 2] = 0; genVector[fSizeLatentVector + 3] = 1; + } else if (fModelType == "CaloDiT-2") + { + // fSizeLatentVector & fSizeConditionVector are ignored for CaloDiT-2 + // Conditions (dim) are energy (1), phi (1), theta (1) and geo (5) + // The energy range here is 1 GeV - 1TeV, phi goes from 0 to 2pi, + // and theta goes from 0.87 to 2.27. + // And, geo is one-hot encoding describing the 4 geometries the model + // is trained on. + // Order of the geo condition is Par04SiW (this one), Par04SciPb, ODD, FCCeeCLD + // As CaloDiT-2 is trained on these 4 detectors, it can be quickly adapted to + // any new detector (see CaloDiT-2 readme for adaptation) of your choice. Thus + // reusing the knowledge from these previous detectors. + // To use the adapted model, make the following changes for inference: + // genVector[3] = 0.0; (turning OFF Par04SiW) + // genVector[7] = 1.0; (turning ON a new detector) + genVector.assign(8, 0); + genVector[0] = aInitialEnergy / 1000; // convert to GeV + genVector[1] = aPhi; + genVector[2] = aTheta; + genVector[3] = 1.0; //Par04SiW + } // Run the inference fInferenceInterface->RunInference(genVector, aEnergies, size); - // After the inference rescale back to the initial energy (in this example the - // energies of cells were normalized to the energy of the particle) + // After the inference rescale back to the initial energy + + if (fModelType == "VAE") + // For VAE, energies of cells were normalized to the energy of the particle + { for (int i = 0; i < size; ++i) { aEnergies[i] = aEnergies[i] * aInitialEnergy; + } + } else if (fModelType == "CaloDiT-2") + // For CaloDiT-2, energies were scaled by a factor of 1000 + { + for (int i = 0; i < size; ++i){ + aEnergies[i] = aEnergies[i] * 1000; + } } } diff --git a/examples/extended/parameterisations/Par04/src/Par04MLFastSimModel.cc b/examples/extended/parameterisations/Par04/src/Par04MLFastSimModel.cc index 77a357664e..53fbd0dc20 100644 --- a/examples/extended/parameterisations/Par04/src/Par04MLFastSimModel.cc +++ b/examples/extended/parameterisations/Par04/src/Par04MLFastSimModel.cc @@ -90,18 +90,19 @@ void Par04MLFastSimModel::DoIt(const G4FastTrack& aFastTrack, G4FastStep& aFastS { // remove particle from further processing by G4 aFastStep.KillPrimaryTrack(); - aFastStep.SetPrimaryTrackPathLength(0.0); + aFastStep.ProposePrimaryTrackPathLength(0.); G4double energy = aFastTrack.GetPrimaryTrack()->GetKineticEnergy(); - aFastStep.SetTotalEnergyDeposited(energy); + aFastStep.ProposeTotalEnergyDeposited(energy); G4ThreeVector position = aFastTrack.GetPrimaryTrack()->GetPosition(); G4ThreeVector direction = aFastTrack.GetPrimaryTrack()->GetMomentumDirection(); - // calculate the incident angle - G4float angle = direction.theta(); + // calculate the incident angles + G4float theta = direction.theta(); + G4float phi = direction.phi(); // calculate how to deposit energy within the detector // get it from inference model - fInference->GetEnergies(fEnergies, energy, angle); + fInference->GetEnergies(fEnergies, energy, theta, phi); fInference->GetPositions(fPositions, position, direction); // deposit energy in the detector using calculated values of energy deposits diff --git a/examples/extended/parameterisations/Par04/src/Par04OnnxInference.cc b/examples/extended/parameterisations/Par04/src/Par04OnnxInference.cc index 26118e10b5..ed0d3226b8 100644 --- a/examples/extended/parameterisations/Par04/src/Par04OnnxInference.cc +++ b/examples/extended/parameterisations/Par04/src/Par04OnnxInference.cc @@ -28,13 +28,13 @@ # include "Par04InferenceInterface.hh" // for Par04InferenceInterface +# include // for Value, Session, Env # include // for copy, max # include // for assert # include // for size_t # include // for int64_t # include // for move -# include // for Value, Session, Env # ifdef USE_CUDA # include "cuda_runtime_api.h" # endif diff --git a/examples/extended/parameterisations/Par04/src/Par04TorchInference.cc b/examples/extended/parameterisations/Par04/src/Par04TorchInference.cc index 44d4d20388..b3c27f6d57 100644 --- a/examples/extended/parameterisations/Par04/src/Par04TorchInference.cc +++ b/examples/extended/parameterisations/Par04/src/Par04TorchInference.cc @@ -48,35 +48,44 @@ Par04TorchInference::Par04TorchInference(G4String modelPath) : Par04InferenceInt void Par04TorchInference::RunInference(std::vector aGenVector, std::vector& aEnergies, int aSize) { - // latentSize : size of the latent space - // 4 is the size of the condition vector - int latentSize = aGenVector.size() - 4; - // split into latent and condition vectors - std::vector latent; - for (int i = 0; i < latentSize; i++) { - latent.push_back(aGenVector[i]); - } - std::vector energy; - energy.push_back(aGenVector[latentSize + 1]); - std::vector angle; - energy.push_back(aGenVector[latentSize + 2]); - std::vector geo; - for (int i = latentSize + 2; i < latentSize + 4; i++) { - geo.push_back(aGenVector[i]); - } - - // convert vectors to tensors - torch::Tensor latentVector = torch::tensor(latent); - torch::Tensor eTensor = torch::tensor(energy); - torch::Tensor angleTensor = torch::tensor(angle); - torch::Tensor geoTensor = torch::tensor(geo); - std::vector genInput; - genInput.push_back(latentVector); - genInput.push_back(eTensor); - genInput.push_back(angleTensor); - genInput.push_back(geoTensor); + if (aGenVector.size()!=8) { + // VAE + // latentSize : size of the latent space + // 4 is the size of the condition vector + int latentSize = aGenVector.size() - 4; + // split into latent and condition vectors + std::vector latent; + for (int i = 0; i < latentSize; i++) { + latent.push_back(aGenVector[i]); + } + std::vector energy; + energy.push_back(aGenVector[latentSize + 1]); + std::vector angle; + angle.push_back(aGenVector[latentSize + 2]); + std::vector geo; + for (int i = latentSize + 2; i < latentSize + 4; i++) { + geo.push_back(aGenVector[i]); + } + + // convert vectors to tensors + torch::Tensor latentVector = torch::tensor(latent); + torch::Tensor eTensor = torch::tensor(energy); + torch::Tensor angleTensor = torch::tensor(angle); + torch::Tensor geoTensor = torch::tensor(geo); + + genInput.push_back(latentVector); + genInput.push_back(eTensor); + genInput.push_back(angleTensor); + genInput.push_back(geoTensor); + } else { + // CaloDiT-2 + torch::Tensor conditions = torch::tensor(aGenVector); + genInput.push_back(conditions); + } + // equivalent to torch.no_grad() + torch::NoGradGuard no_grad; at::Tensor outTensor = fModule.forward(genInput).toTensor().contiguous(); diff --git a/examples/extended/parameterisations/Par04/training/requirements.txt b/examples/extended/parameterisations/Par04/training/requirements.txt deleted file mode 100644 index 9ca6e61dc8..0000000000 --- a/examples/extended/parameterisations/Par04/training/requirements.txt +++ /dev/null @@ -1,12 +0,0 @@ -tensorflow==2.12.1 -numpy==1.23.1 -h5py==3.7.0 -matplotlib==3.5.2 -optuna==2.10.1 -mysqlclient==2.1.1 -pymysql==1.1.1 -scikit-learn==1.5.0 -scipy==1.11.1 -wandb==0.13.1 -tf2onnx==1.12.0 -onnxruntime==1.12.1 diff --git a/examples/extended/parameterisations/Par04/training_calodit/README.md b/examples/extended/parameterisations/Par04/training_calodit/README.md new file mode 100644 index 0000000000..d424b84115 --- /dev/null +++ b/examples/extended/parameterisations/Par04/training_calodit/README.md @@ -0,0 +1,13 @@ +## CaloDiT-2 + +CaloDiT-2 is transformer-based diffusion model, which can be easily adapted to a new detector geometry. +This Par04 repository contains the ONNX and TorchScript versions of the model and how to use them for +Par04-SiW detector. *Note that the virtual cylindrical mesh is less granular than VAE.* + +The source code for CaloDiT-2 can be found [here](https://gitlab.cern.ch/fastsim/diffusion4sim/-/tree/CaloDiT_v1?ref_type=tags). +It contains the training, adaptation, and distillation scripts along with the pretrained models. You can download the +pretrained models (not the .onnx/.pt files available with this repository), which acts as a checkpoint and finetune +it on the new dataset. + +You can also modify the virtual mesh size and hence the architecture if needed. But in that case, you won't be able +to use the pretrained models. Pretrained models adopt a mesh as in [CaloChallenge Dataset-2](https://calochallenge.github.io/homepage/). diff --git a/examples/extended/parameterisations/Par04/training/README.md b/examples/extended/parameterisations/Par04/training_vae/README.md similarity index 82% rename from examples/extended/parameterisations/Par04/training/README.md rename to examples/extended/parameterisations/Par04/training_vae/README.md index 6fd2593d20..7c0251faa3 100644 --- a/examples/extended/parameterisations/Par04/training/README.md +++ b/examples/extended/parameterisations/Par04/training_vae/README.md @@ -1,7 +1,8 @@ This repository contains the set of scripts used to train, generate and validate the generative model used in this example. -- root2h5.py: translation of ROOT file with showers to h5 files. +- root2h5_for_vae.py: translation of ROOT file with showers to h5 files usable in the VAE model. +- root2h5.py: translation of ROOT file with showers to h5 files, more general version (recommended). It allows to simulate non-discrete energies and stores showers in 3D tensors (R x phi x z). - core/constants.py: defines the set of common variables. - core/model.py: defines the VAE model class and a handler to construct the model. - utils/preprocess.py: defines the data loading and preprocessing functions. @@ -28,7 +29,7 @@ python3 setup.py The full simulation dataset can be downloaded from/linked to [Zenodo](https://zenodo.org/record/6082201#.Ypo5UeDRaL4). -If custom simulation is used, the output of full simulation must be translated to h5 files using `root2h5.py` script. Please see the header of that script to see what name of the root file is expected. +If custom simulation is used, the output of full simulation must be translated to h5 files using `root2h5_for_vae.py` script. This file is recommended for use with the provided VAE model. For all other usecases script `root2h5.py` is recommended, as it does not assume that simulation is run with discrete energies (e.g. GPS can be used within Geant4 simulation instead of the particle gun). ## Training @@ -50,6 +51,9 @@ training. ```--study-name``` specifies a study name. This name is used as an experiment name in W&B dashboard and as a name of directory for saving models. +See ```run.sh``` and ```condor.sub``` for training on HTCondor. +Note: wandb api key is hardcoded and needs to be added manually in order to log stats to weights and biases. + ## Hyperparameters tuning If you want to tune hyperparameters, specify in `tune_model.py` parameters to be tuned. There are three types of diff --git a/examples/extended/parameterisations/Par04/training_vae/condor.sub b/examples/extended/parameterisations/Par04/training_vae/condor.sub new file mode 100644 index 0000000000..552b6e18ea --- /dev/null +++ b/examples/extended/parameterisations/Par04/training_vae/condor.sub @@ -0,0 +1,12 @@ +executable = run.sh +arguments = test par04_check 0 $(ClusterID) $(ProcId) +output = output/test.$(ClusterID).$(ProcId).txt +error = error/test.$(ClusterID).$(ProcId).txt +log = log/test.$(ClusterID).$(ProcId).txt +requirements = (OpSysAndVer =?= "AlmaLinux9") ++JobFlavour = "workday" +request_gpus = 1 +request_cpus = 16 +requirements = TARGET.GPUs_DeviceName =?= "NVIDIA A100-PCIE-40GB" +queue 1 + diff --git a/examples/extended/parameterisations/Par04/training/convert.py b/examples/extended/parameterisations/Par04/training_vae/convert.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/convert.py rename to examples/extended/parameterisations/Par04/training_vae/convert.py diff --git a/examples/extended/parameterisations/Par04/training/core/constants.py b/examples/extended/parameterisations/Par04/training_vae/core/constants.py similarity index 96% rename from examples/extended/parameterisations/Par04/training/core/constants.py rename to examples/extended/parameterisations/Par04/training_vae/core/constants.py index 22cfa9bcd5..13b15665d6 100644 --- a/examples/extended/parameterisations/Par04/training/core/constants.py +++ b/examples/extended/parameterisations/Par04/training_vae/core/constants.py @@ -16,14 +16,14 @@ SIZE_Z = 3.4 MIN_ENERGY = 1 MAX_ENERGY = 1024 # Minimum and maximum primary particle angle to consider for training in degrees units. -MIN_ANGLE = 50 +MIN_ANGLE = 90 MAX_ANGLE = 90 """ Directories. """ # Directory to load the full simulation dataset. -INIT_DIR = "./dataset/" +INIT_DIR = "/eos/geant4/fastSim/Par04_public/HDF5_Zenodo/" # Directory to save VAE checkpoints GLOBAL_CHECKPOINT_DIR = "./checkpoint" # Directory to save model after conversion to a format that can be used in C++. diff --git a/examples/extended/parameterisations/Par04/training/core/model.py b/examples/extended/parameterisations/Par04/training_vae/core/model.py similarity index 95% rename from examples/extended/parameterisations/Par04/training/core/model.py rename to examples/extended/parameterisations/Par04/training_vae/core/model.py index e1fb9fdc8f..05eaa12beb 100644 --- a/examples/extended/parameterisations/Par04/training/core/model.py +++ b/examples/extended/parameterisations/Par04/training_vae/core/model.py @@ -10,6 +10,7 @@ from tensorflow.keras import backend as K from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint, History, Callback from tensorflow.keras.layers import BatchNormalization, Input, Dense, Layer, concatenate from tensorflow.keras.losses import BinaryCrossentropy, Reduction +from tensorflow.keras.utils import Sequence from tensorflow.keras.models import Model from tensorflow.python.data import Dataset from tensorflow.python.distribute.distribute_lib import Strategy @@ -47,6 +48,22 @@ class _KLDivergenceLayer(Layer): return inputs +class DataGenerator(Sequence): + def __init__(self, x_set, y_set, batch_size): + self.x, self.y = x_set, y_set + self.batch_size = batch_size + + def __len__(self): + return int(np.ceil(len(self.x[0]) / float(self.batch_size))) # x[0] for actual showers + + def __getitem__(self, idx): + batch_x = [] + for i in range(len(self.x)): + batch_x.append(self.x[i][idx * self.batch_size:(idx + 1) * self.batch_size]) + batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size] + return tuple(batch_x), batch_y + + class VAE(Model): def get_config(self): config = super().get_config() @@ -72,6 +89,7 @@ class VAEHandler: Class to handle building and training VAE models. """ _wandb_project_name: str = None + _wandb_run_name: str = None _wandb_tags: List[str] = field(default_factory=list) _original_dim: int = ORIGINAL_DIM latent_dim: int = LATENT_DIM @@ -114,7 +132,7 @@ class VAEHandler: } # Reinit flag is needed for hyperparameter tuning. Whenever new training is started, new Wandb run should be # created. - wandb.init(project=self._wandb_project_name, entity=WANDB_ENTITY, reinit=True, config=config, + wandb.init(name=self._wandb_run_name, project=self._wandb_project_name, entity=WANDB_ENTITY, reinit=True, config=config, tags=self._wandb_tags) def _build_and_compile_new_model(self) -> None: @@ -257,6 +275,7 @@ class VAEHandler: -> Tuple[Dataset, Dataset]: """ Splits data into train and validation set based on given lists of indexes. + Load batches to the GPU instead of entire dataset. """ @@ -280,24 +299,9 @@ class VAEHandler: val_x = (val_dataset, val_e_cond, val_angle_cond, val_geo_cond, val_noise) val_y = val_dataset - # Wrap data in Dataset objects. - # TODO(@mdragula): This approach requires loading the whole data set to RAM. It - # would be better to read the data partially when needed. Also one should bare in mind that using tf.Dataset - # slows down training process. - train_data = Dataset.from_tensor_slices((train_x, train_y)) - val_data = Dataset.from_tensor_slices((val_x, val_y)) - - # The batch size must now be set on the Dataset objects. - train_data = train_data.batch(self._batch_size) - val_data = val_data.batch(self._batch_size) - - # Disable AutoShard. - options = tf.data.Options() - options.experimental_distribute.auto_shard_policy = tf.data.experimental.AutoShardPolicy.DATA - train_data = train_data.with_options(options) - val_data = val_data.with_options(options) - - return train_data, val_data + train_gen = DataGenerator(train_x, train_y, self._batch_size) + val_gen = DataGenerator(val_x, val_y, self._batch_size) + return train_gen, val_gen def _k_fold_training(self, dataset: np.array, e_cond: np.array, angle_cond: np.array, geo_cond: np.array, noise: np.array, callbacks: List[Callback], verbose: bool = True) -> List[History]: diff --git a/examples/extended/parameterisations/Par04/training/generate.py b/examples/extended/parameterisations/Par04/training_vae/generate.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/generate.py rename to examples/extended/parameterisations/Par04/training_vae/generate.py diff --git a/examples/extended/parameterisations/Par04/training_vae/requirements.txt b/examples/extended/parameterisations/Par04/training_vae/requirements.txt new file mode 100644 index 0000000000..81ce013adb --- /dev/null +++ b/examples/extended/parameterisations/Par04/training_vae/requirements.txt @@ -0,0 +1,15 @@ +tensorflow==2.12.1 +tensorflow-probability==0.17.0 +keras==2.9.0 +numpy==1.23.5 +h5py==3.7.0 +matplotlib==3.5.2 +scikit-learn==1.1.1 +scipy==1.9.0 +wandb==0.13.1 +tf2onnx==1.14.0 +onnxruntime==1.16.3 +gast==0.4.0 +lz4==3.1 +idna==2.10 +protobuf==3.19 diff --git a/examples/extended/parameterisations/Par04/training_vae/root2h5.py b/examples/extended/parameterisations/Par04/training_vae/root2h5.py new file mode 100644 index 0000000000..bcdb7febae --- /dev/null +++ b/examples/extended/parameterisations/Par04/training_vae/root2h5.py @@ -0,0 +1,85 @@ +""" +Converts an EDM4HEP ROOT file to an HDF5 file, saving the shower energy in a 3D array and shower data in a 2D array. +Units: Energy values are stored in MeV and angles are stored in radians. + +""" + +#!/bin/env python +import sys +import argparse +import numpy as np +import os +import uproot +import h5py + + +def parse_args(argv): + p = argparse.ArgumentParser() + p.add_argument("--outputDir", '-o', type=str, default="./", help="Path to the output directory") + p.add_argument("--inputFile", '-i', type=str, required=True, help="Name of the EDM4hep file to translate") + p.add_argument("--numR", type=int, default=18, help="Number of cells in R") + p.add_argument("--numPhi", type=int, default=50, help="Number of cells in phi") + p.add_argument("--numZ", type=int, default=45, help="Number of cells in z") + p.add_argument("--samplingFraction", type=float, default=1., help="Sampling fraction to use to rescale cell energy. Defined as f=active/(active+absorber)") + args = p.parse_args() + return args + + +def main(argv): + # Parse commandline arguments + args = parse_args(argv) + input_file = args.inputFile + output_dir = args.outputDir + + # Number of cells in the r, phi & z directions + num_cells_R = args.numR + num_cells_phi = args.numPhi + num_cells_z = args.numZ + + # Sampling fraction that rescales energy of each cell + sampling_fraction = args.samplingFraction + + if os.stat(input_file).st_size > 0: + h5_file = h5py.File( + f"{output_dir}/{os.path.splitext(os.path.basename(input_file))[0]}.h5", "w" + ) + print(f"Creating output file {output_dir}/{os.path.splitext(os.path.basename(input_file))[0]}.h5") + # Read Root file + file = uproot.open(input_file) + energy_particle = file["global"]["EnergyMC"].array() + # For future once theta,phi are implemented in Par04 event/run action + #phi_particle = file["global"]["PhiMC"].array() + #theta_particle = file["global"]["ThetaMC"].array() + cell_r = file["virtualReadout"]["rhoCell"].array() + cell_phi = file["virtualReadout"]["phiCell"].array() + cell_energy = file["virtualReadout"]["EnergyCell"].array() + cell_z = file["virtualReadout"]["zCell"].array() + all_events = [] + num_showers = len(energy_particle) + # loop over events + for event in range(num_showers): + # Initialize a 3D array with shape nb_events, nb_cells in x,y,z (rho,phi,z) + shower = np.zeros((num_cells_R, num_cells_phi, num_cells_z)) + for cell in range(len(cell_r[event])): + # This if statement is added to avoid having cells outside of desired cylinder size + if ( + (cell_r[event][cell] < num_cells_R) + and (cell_phi[event][cell] < num_cells_phi) + and (cell_z[event][cell] < num_cells_z) + ): + shower[cell_r[event][cell]][cell_phi[event][cell]][ + cell_z[event][cell] + ] = cell_energy[event][cell] + all_events.append(shower) + # Save dataset + print(f"Creating datasets with shape {np.shape(energy_particle)} and {np.shape(all_events)} ") + h5_file.create_dataset("incident_energy", data=energy_particle, compression="gzip", compression_opts=9,) + # For future once theta,phi are implemented in Par04 event/run action + #h5_file.create_dataset("incident_phi", data=phi_particle, compression="gzip", compression_opts=9,) + #h5_file.create_dataset("incident_theta", data=theta_particle, compression="gzip", compression_opts=9,) + h5_file.create_dataset("showers", data=all_events, compression="gzip", compression_opts=9,) + h5_file.close() + + +if __name__ == "__main__": + exit(main(sys.argv[1:])) diff --git a/examples/extended/parameterisations/Par04/training/root2h5.py b/examples/extended/parameterisations/Par04/training_vae/root2h5_for_vae.py similarity index 85% rename from examples/extended/parameterisations/Par04/training/root2h5.py rename to examples/extended/parameterisations/Par04/training_vae/root2h5_for_vae.py index e290055230..36ec2b5684 100644 --- a/examples/extended/parameterisations/Par04/training/root2h5.py +++ b/examples/extended/parameterisations/Par04/training_vae/root2h5_for_vae.py @@ -72,7 +72,7 @@ def main(argv): h5_file = h5py.File( f"{output_dir}/{energy_particle}_Angle_{angle_particle}_{num_showers}showers_{file_id}.h5", "w" ) - # Read the Root file + # Read Root file file = uproot.open(file_name) energy_particle = file["global"]["EnergyMC"].array() cell_r = file["virtualReadout"]["rhoCell"].array() @@ -95,14 +95,20 @@ def main(argv): cell_z[event][ind] ] = cell_energy[event][ind] all_events.append(data) - # Save dataset + # first check if we indeed have only single E + if len(np.unique(np.array(energy_particle))) > 1: + print("ERROR: provided list of energies contains more than one incident energy") + exit(-1) + # Save dataset with Energy MC in GeV h5_file.create_dataset( - f"{energy_particle}", + f"{int(np.unique(np.array(energy_particle))[0]/1000)}", data=all_events, compression="gzip", compression_opts=9, ) h5_file.close() + print(f"Created a dataset for incident angle {angle_particle} with energy (and a dataset key)\ + {int(np.unique(np.array(energy_particle))[0]/1000)} GeV with a shape {np.shape(all_events)}") if __name__ == "__main__": diff --git a/examples/extended/parameterisations/Par04/training_vae/run.sh b/examples/extended/parameterisations/Par04/training_vae/run.sh new file mode 100644 index 0000000000..b7dbde0e03 --- /dev/null +++ b/examples/extended/parameterisations/Par04/training_vae/run.sh @@ -0,0 +1,15 @@ +#!/bin/bash +## To be run with 3 arguments defining the run name and the study name for wandb, and gpu_id + +source /cvmfs/sft.cern.ch/lcg/views/LCG_105_cuda/x86_64-el9-gcc11-opt/setup.sh + +nvidia-smi + +pip install numpy h5py matplotlib scipy scikit-learn wandb tf2onnx onnxruntime + +## Provide your wandb api key here +export WANDB_API_KEY= + +mkdir -p validation checkpoint conversion generation +python /afs/cern.ch/user/p/praikwar/public/par04/training/train.py --run-name $1 --study-name $2 --gpu-ids $3 + diff --git a/examples/extended/parameterisations/Par04/training/setup.py b/examples/extended/parameterisations/Par04/training_vae/setup.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/setup.py rename to examples/extended/parameterisations/Par04/training_vae/setup.py diff --git a/examples/extended/parameterisations/Par04/training/train.py b/examples/extended/parameterisations/Par04/training_vae/train.py similarity index 82% rename from examples/extended/parameterisations/Par04/training/train.py rename to examples/extended/parameterisations/Par04/training_vae/train.py index 1dde8d72c1..0a84ba3661 100644 --- a/examples/extended/parameterisations/Par04/training/train.py +++ b/examples/extended/parameterisations/Par04/training_vae/train.py @@ -10,6 +10,7 @@ def parse_args(): argument_parser.add_argument("--max-gpu-memory-allocation", type=int, default=MAX_GPU_MEMORY_ALLOCATION) argument_parser.add_argument("--gpu-ids", type=str, default=GPU_IDS) argument_parser.add_argument("--study-name", type=str, default="default_study_name") + argument_parser.add_argument("--run-name", type=str, default=None) # randomly chosen by wandb args = argument_parser.parse_args() return args @@ -19,8 +20,10 @@ def main(): args = parse_args() max_gpu_memory_allocation = args.max_gpu_memory_allocation gpu_ids = args.gpu_ids + print(f"Running on GPU ID {gpu_ids}") study_name = args.study_name - checkpoint_dir = f"{GLOBAL_CHECKPOINT_DIR}/{study_name}" + run_name = args.run_name + checkpoint_dir = f"{GLOBAL_CHECKPOINT_DIR}/{study_name}/{run_name}" # 1. Set GPU memory limits. GPULimiter(_gpu_ids=gpu_ids, _max_gpu_memory_allocation=max_gpu_memory_allocation)() @@ -35,7 +38,7 @@ def main(): # This import must be local because otherwise it is impossible to call GPULimiter. from core.model import VAEHandler - vae = VAEHandler(_wandb_project_name=study_name, _wandb_tags=["single training"], _checkpoint_dir=checkpoint_dir) + vae = VAEHandler(_wandb_project_name=study_name, _wandb_run_name=run_name, _wandb_tags=["single training"], _checkpoint_dir=checkpoint_dir) # 4. Train model. histories = vae.train(energies_train, diff --git a/examples/extended/parameterisations/Par04/training/tune_model.py b/examples/extended/parameterisations/Par04/training_vae/tune_model.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/tune_model.py rename to examples/extended/parameterisations/Par04/training_vae/tune_model.py diff --git a/examples/extended/parameterisations/Par04/training/utils/gpu_limiter.py b/examples/extended/parameterisations/Par04/training_vae/utils/gpu_limiter.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/gpu_limiter.py rename to examples/extended/parameterisations/Par04/training_vae/utils/gpu_limiter.py diff --git a/examples/extended/parameterisations/Par04/training/utils/hyperparameter_tuner.py b/examples/extended/parameterisations/Par04/training_vae/utils/hyperparameter_tuner.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/hyperparameter_tuner.py rename to examples/extended/parameterisations/Par04/training_vae/utils/hyperparameter_tuner.py diff --git a/examples/extended/parameterisations/Par04/training/utils/observables.py b/examples/extended/parameterisations/Par04/training_vae/utils/observables.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/observables.py rename to examples/extended/parameterisations/Par04/training_vae/utils/observables.py diff --git a/examples/extended/parameterisations/Par04/training/utils/optimizer.py b/examples/extended/parameterisations/Par04/training_vae/utils/optimizer.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/optimizer.py rename to examples/extended/parameterisations/Par04/training_vae/utils/optimizer.py diff --git a/examples/extended/parameterisations/Par04/training/utils/plotters.py b/examples/extended/parameterisations/Par04/training_vae/utils/plotters.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/plotters.py rename to examples/extended/parameterisations/Par04/training_vae/utils/plotters.py diff --git a/examples/extended/parameterisations/Par04/training/utils/preprocess.py b/examples/extended/parameterisations/Par04/training_vae/utils/preprocess.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/utils/preprocess.py rename to examples/extended/parameterisations/Par04/training_vae/utils/preprocess.py diff --git a/examples/extended/parameterisations/Par04/training/validate.py b/examples/extended/parameterisations/Par04/training_vae/validate.py similarity index 100% rename from examples/extended/parameterisations/Par04/training/validate.py rename to examples/extended/parameterisations/Par04/training_vae/validate.py diff --git a/examples/extended/parameterisations/Par04/vis.mac b/examples/extended/parameterisations/Par04/vis.mac index 5b0d30c37a..ba6e4f0922 100644 --- a/examples/extended/parameterisations/Par04/vis.mac +++ b/examples/extended/parameterisations/Par04/vis.mac @@ -1,86 +1,16 @@ -/Par04/detector/setDetectorInnerRadius 80 cm -/Par04/detector/setDetectorLength 4 m -/Par04/detector/setNbOfLayers 90 +/control/execute common_settings_lowgran.mac +# Overwrite the sensitivity of the absorber to account for the passive material /Par04/detector/setAbsorber 0 G4_W 1.4 mm false -/Par04/detector/setAbsorber 1 G4_Si 0.3 mm true -/Par04/mesh/setSizeOfRhoCells 2.325 mm -/Par04/mesh/setSizeOfZCells 3.4 mm -/Par04/mesh/setNbOfRhoCells 18 -/Par04/mesh/setNbOfPhiCells 50 -/Par04/mesh/setNbOfZCells 45 -/Par04/detector/print -# Use default detector dimensions and initialize +# Initialize /run/initialize -# If inference model is active, de-activate it because it needs configuration -/param/InActivateModel inferenceModel +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac -# Open a viewer -/vis/open -# This opens the default viewer - see examples/basic/B1/vis.mac for a -# more comprehensive overview of options. Also the documentation. -# -# Disable auto refresh and quieten vis messages whilst scene and -# trajectories are established: -/vis/viewer/set/autoRefresh false -/vis/verbose errors -# -# Draw geometry: -/vis/drawVolume worlds -# -# Specify view angle: -/vis/viewer/set/viewpointThetaPhi 0 90 deg -/vis/viewer/set/targetPoint 0 800 0 mm -# -# Specify zoom value: -/vis/viewer/zoom 10 -# -# Specify style (surface or wireframe): -#/vis/viewer/set/style wireframe -# -# Draw coordinate axes: -#/vis/scene/add/axes 0 0 0 1 m -# -# Draw smooth trajectories at end of event, showing trajectory points -# as markers 2 pixels wide: -#/vis/scene/add/trajectories smooth -/vis/scene/add/trajectories -/vis/modeling/trajectories/create/drawByCharge -/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true -/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 -# (if too many tracks cause core dump => /tracking/storeTrajectory 0) -# -# Draw hits at end of event: -/vis/scene/add/hits -# -# To draw only gammas: -#/vis/filtering/trajectories/create/particleFilter -#/vis/filtering/trajectories/particleFilter-0/add gamma -# -# To invert the above, drawing all particles except gammas, -# keep the above two lines but also add: -#/vis/filtering/trajectories/particleFilter-0/invert true -# -# Many other options are available with /vis/modeling and /vis/filtering. -# For example, to select colour by particle ID: -#/vis/modeling/trajectories/create/drawByParticleID -#/vis/modeling/trajectories/drawByParticleID-0/set e- blue -# -# Create an attribute filter to draw only particles with certain (high) momentum -/vis/filtering/trajectories/create/attributeFilter -# Select attribute "IMag" -/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag -# Select trajectories with 25 MeV <= IMag < 1000 GeV -/vis/filtering/trajectories/attributeFilter-0/addInterval 25 MeV 1000 GeV -# -# To superimpose all of the events from a given run: -/vis/scene/endOfEventAction accumulate -# -# Re-establish auto refreshing and verbosity: -/vis/viewer/set/autoRefresh true -/vis/verbose warnings -# -# For file-based drivers, use this to create an empty detector view: -#/vis/viewer/flush -/vis/viewer/set/background 1 1 1 +## dynamically set readout mesh from particle direction +/param/ActivateModel defineMesh +## we do not use ML fast sim +/param/InActivateModel inferenceModel +/param/InActivateModel dummyModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/Par04/vis_lwtnn_vae.mac b/examples/extended/parameterisations/Par04/vis_lwtnn_vae.mac new file mode 100644 index 0000000000..a4b2b11ed9 --- /dev/null +++ b/examples/extended/parameterisations/Par04/vis_lwtnn_vae.mac @@ -0,0 +1,28 @@ +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac + +# Fast Simulation +# Inference Setup +## dimension of the latent vector (encoded vector in a Variational Autoencoder model) +/Par04/inference/setSizeLatentVector 10 +## size of the condition vector (energy, angle and geometry) +/Par04/inference/setSizeConditionVector 4 +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/Generator.json +/Par04/inference/setInferenceLibrary LWTNN +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 2.325 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 18 +/Par04/inference/setNbOfPhiCells 50 +/Par04/inference/setNbOfZCells 45 +## Dynamic readout mesh from particle direction needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/Par04/vis_onnx.mac b/examples/extended/parameterisations/Par04/vis_onnx.mac deleted file mode 100644 index c32f00d268..0000000000 --- a/examples/extended/parameterisations/Par04/vis_onnx.mac +++ /dev/null @@ -1,109 +0,0 @@ -/Par04/detector/setDetectorInnerRadius 80 cm -/Par04/detector/setDetectorLength 4 m -/Par04/detector/setNbOfLayers 90 -/Par04/detector/setAbsorber 0 G4_W 1.4 mm true -/Par04/detector/setAbsorber 1 G4_Si 0.3 mm true -/Par04/mesh/setSizeOfRhoCells 2.325 mm -/Par04/mesh/setSizeOfZCells 3.4 mm -/Par04/mesh/setNbOfRhoCells 18 -/Par04/mesh/setNbOfPhiCells 50 -/Par04/mesh/setNbOfZCells 45 -/Par04/detector/print - -# Use default detector dimensions and initialize -/run/initialize - -# If inference model is active, de-activate it because it needs configuration -/param/InActivateModel inferenceModel - -# Open a viewer -/vis/open -# This opens the default viewer - see examples/basic/B1/vis.mac for a -# more comprehensive overview of options. Also the documentation. -# -# Disable auto refresh and quieten vis messages whilst scene and -# trajectories are established: -/vis/viewer/set/autoRefresh false -/vis/verbose errors -# -# Draw geometry: -/vis/drawVolume worlds -# -# Specify view angle: -/vis/viewer/set/viewpointThetaPhi 0 90 deg -/vis/viewer/set/targetPoint 0 800 0 mm -# -# Specify zoom value: -/vis/viewer/zoom 10 -# -# Specify style (surface or wireframe): -#/vis/viewer/set/style wireframe -# -# Draw coordinate axes: -#/vis/scene/add/axes 0 0 0 1 m -# -# Draw smooth trajectories at end of event, showing trajectory points -# as markers 2 pixels wide: -#/vis/scene/add/trajectories smooth -/vis/scene/add/trajectories -/vis/modeling/trajectories/create/drawByCharge -/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true -/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 -# (if too many tracks cause core dump => /tracking/storeTrajectory 0) -# -# Draw hits at end of event: -/vis/scene/add/hits -# -# To draw only gammas: -#/vis/filtering/trajectories/create/particleFilter -#/vis/filtering/trajectories/particleFilter-0/add gamma -# -# To invert the above, drawing all particles except gammas, -# keep the above two lines but also add: -#/vis/filtering/trajectories/particleFilter-0/invert true -# -# Many other options are available with /vis/modeling and /vis/filtering. -# For example, to select colour by particle ID: -#/vis/modeling/trajectories/create/drawByParticleID -#/vis/modeling/trajectories/drawByParticleID-0/set e- blue -# -# Create an attribute filter to draw only particles with certain (high) momentum -/vis/filtering/trajectories/create/attributeFilter -# Select attribute "IMag" -/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag -# Select trajectories with 25 MeV <= IMag < 1000 GeV -/vis/filtering/trajectories/attributeFilter-0/addInterval 25 MeV 1000 GeV -# -# To superimpose all of the events from a given run: -/vis/scene/endOfEventAction accumulate -# -# Re-establish auto refreshing and verbosity: -/vis/viewer/set/autoRefresh true -/vis/verbose warnings -# -# For file-based drivers, use this to create an empty detector view: -#/vis/viewer/flush -/vis/viewer/set/background 1 1 1 - -# Fast Simulation -# Inference Setup -## dimension of the latent vector (encoded vector in a Variational Autoencoder model) -/Par04/inference/setSizeLatentVector 10 -## size of the condition vector (energy, angle and geometry) -/Par04/inference/setSizeConditionVector 4 -## path to the model which is set to download by cmake -/Par04/inference/setModelPathName MLModels/Generator.onnx -/Par04/inference/setProfileFlag 1 -/Par04/inference/setOptimizationFlag 0 -/Par04/inference/setInferenceLibrary ONNX -## set mesh size for inference == mesh size of a full sim that -## was used for training; it coincides with readout mesh size -/Par04/inference/setSizeOfRhoCells 2.325 mm -/Par04/inference/setSizeOfZCells 3.4 mm -/Par04/inference/setNbOfRhoCells 18 -/Par04/inference/setNbOfPhiCells 50 -/Par04/inference/setNbOfZCells 45 -## Dynamic readout mesh from particle direction needs to be the first fast sim model! -/param/ActivateModel defineMesh -## ML fast sim, configured with the inference setup /Par04/inference -/param/ActivateModel inferenceModel diff --git a/examples/extended/parameterisations/Par04/vis_onnx_calodit.mac b/examples/extended/parameterisations/Par04/vis_onnx_calodit.mac new file mode 100644 index 0000000000..4ce19d498c --- /dev/null +++ b/examples/extended/parameterisations/Par04/vis_onnx_calodit.mac @@ -0,0 +1,28 @@ +/control/execute common_settings_lowgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac + +# Fast Simulation +# Inference Setup +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/cd.onnx +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType CaloDiT-2 +/Par04/inference/setProfileFlag 1 +/Par04/inference/setOptimizationFlag 0 +/Par04/inference/setInferenceLibrary ONNX +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 4.65 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 9 +/Par04/inference/setNbOfPhiCells 16 +/Par04/inference/setNbOfZCells 45 +## Dynamic readout mesh from particle direction needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/Par04/vis_onnx_vae.mac b/examples/extended/parameterisations/Par04/vis_onnx_vae.mac new file mode 100644 index 0000000000..f72aacad22 --- /dev/null +++ b/examples/extended/parameterisations/Par04/vis_onnx_vae.mac @@ -0,0 +1,32 @@ +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac + +# Fast Simulation +# Inference Setup +## dimension of the latent vector (encoded vector in a Variational Autoencoder model) +/Par04/inference/setSizeLatentVector 10 +## size of the condition vector (energy, angle and geometry) +/Par04/inference/setSizeConditionVector 4 +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/Generator.onnx +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType VAE +/Par04/inference/setProfileFlag 1 +/Par04/inference/setOptimizationFlag 0 +/Par04/inference/setInferenceLibrary ONNX +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 2.325 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 18 +/Par04/inference/setNbOfPhiCells 50 +/Par04/inference/setNbOfZCells 45 +## Dynamic readout mesh from particle direction needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/Par04/vis_torch.mac b/examples/extended/parameterisations/Par04/vis_torch.mac deleted file mode 100644 index bb05786953..0000000000 --- a/examples/extended/parameterisations/Par04/vis_torch.mac +++ /dev/null @@ -1,108 +0,0 @@ -/Par04/detector/setDetectorInnerRadius 80 cm -/Par04/detector/setDetectorLength 4 m -/Par04/detector/setNbOfLayers 90 -/Par04/detector/setAbsorber 0 G4_W 1.4 mm true -/Par04/detector/setAbsorber 1 G4_Si 0.3 mm true -/Par04/mesh/setSizeOfRhoCells 2.325 mm -/Par04/mesh/setSizeOfZCells 3.4 mm -/Par04/mesh/setNbOfRhoCells 18 -/Par04/mesh/setNbOfPhiCells 50 -/Par04/mesh/setNbOfZCells 45 -/Par04/detector/print - -# Use default detector dimensions and initialize -/run/initialize - -# If inference model is active, de-activate it because it needs configuration -/param/InActivateModel inferenceModel - -# Open a viewer -/vis/open -# This opens the default viewer - see examples/basic/B1/vis.mac for a -# more comprehensive overview of options. Also the documentation. -# -# Disable auto refresh and quieten vis messages whilst scene and -# trajectories are established: -/vis/viewer/set/autoRefresh false -/vis/verbose errors -# -# Draw geometry: -/vis/drawVolume worlds -# -# Specify view angle: -/vis/viewer/set/viewpointThetaPhi 0 90 deg -/vis/viewer/set/targetPoint 0 800 0 mm -# -# Specify zoom value: -/vis/viewer/zoom 10 -# -# Specify style (surface or wireframe): -#/vis/viewer/set/style wireframe -# -# Draw coordinate axes: -#/vis/scene/add/axes 0 0 0 1 m -# -# Draw smooth trajectories at end of event, showing trajectory points -# as markers 2 pixels wide: -#/vis/scene/add/trajectories smooth -/vis/scene/add/trajectories -/vis/modeling/trajectories/create/drawByCharge -/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true -/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 -# (if too many tracks cause core dump => /tracking/storeTrajectory 0) -# -# Draw hits at end of event: -/vis/scene/add/hits -# -# To draw only gammas: -#/vis/filtering/trajectories/create/particleFilter -#/vis/filtering/trajectories/particleFilter-0/add gamma -# -# To invert the above, drawing all particles except gammas, -# keep the above two lines but also add: -#/vis/filtering/trajectories/particleFilter-0/invert true -# -# Many other options are available with /vis/modeling and /vis/filtering. -# For example, to select colour by particle ID: -#/vis/modeling/trajectories/create/drawByParticleID -#/vis/modeling/trajectories/drawByParticleID-0/set e- blue -# -# Create an attribute filter to draw only particles with certain (high) momentum -/vis/filtering/trajectories/create/attributeFilter -# Select attribute "IMag" -/vis/filtering/trajectories/attributeFilter-0/setAttribute IMag -# Select trajectories with 25 MeV <= IMag < 1000 GeV -/vis/filtering/trajectories/attributeFilter-0/addInterval 25 MeV 1000 GeV -# -# To superimpose all of the events from a given run: -/vis/scene/endOfEventAction accumulate -# -# Re-establish auto refreshing and verbosity: -/vis/viewer/set/autoRefresh true -/vis/verbose warnings -# -# For file-based drivers, use this to create an empty detector view: -#/vis/viewer/flush -/vis/viewer/set/background 1 1 1 - -# Fast Simulation -# Inference Setup -## dimension of the latent vector (encoded vector in a Variational Autoencoder model) -/Par04/inference/setSizeLatentVector 10 -## size of the condition vector (energy, angle and geometry) -/Par04/inference/setSizeConditionVector 4 -## path to the model which is set to download by cmake -/Par04/inference/setModelPathName MLModels/Generator.pt -/Par04/inference/setInferenceLibrary TORCH -## set mesh size for inference == mesh size of a full sim that -## was used for training; it coincides with readout mesh size -/Par04/inference/setSizeOfRhoCells 2.325 mm -/Par04/inference/setSizeOfZCells 3.4 mm -/Par04/inference/setNbOfRhoCells 18 -/Par04/inference/setNbOfPhiCells 50 -/Par04/inference/setNbOfZCells 45 - -## Dynamic readout mesh from particle direction needs to be the first fast sim model! -/param/ActivateModel defineMesh -## ML fast sim, configured with the inference setup /Par04/inference -/param/ActivateModel inferenceModel diff --git a/examples/extended/parameterisations/Par04/vis_torch_calodit.mac b/examples/extended/parameterisations/Par04/vis_torch_calodit.mac new file mode 100644 index 0000000000..5a10410db2 --- /dev/null +++ b/examples/extended/parameterisations/Par04/vis_torch_calodit.mac @@ -0,0 +1,27 @@ +/control/execute common_settings_lowgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac + +# Fast Simulation +# Inference Setup +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/cd_cpu.pt +## Set ML model to use (VAE, CaloDiT-2) +/Par04/inference/setModelType CaloDiT-2 +/Par04/inference/setInferenceLibrary TORCH +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 4.65 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 9 +/Par04/inference/setNbOfPhiCells 16 +/Par04/inference/setNbOfZCells 45 + +## Dynamic readout mesh from particle direction needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/Par04/vis_torch_vae.mac b/examples/extended/parameterisations/Par04/vis_torch_vae.mac new file mode 100644 index 0000000000..9d1d878ed8 --- /dev/null +++ b/examples/extended/parameterisations/Par04/vis_torch_vae.mac @@ -0,0 +1,29 @@ +/control/execute common_settings_highgran.mac +# Initialize +/run/initialize + +/control/execute common_settings_postInit.mac +/control/execute common_settings_vis.mac + +# Fast Simulation +# Inference Setup +## dimension of the latent vector (encoded vector in a Variational Autoencoder model) +/Par04/inference/setSizeLatentVector 10 +## size of the condition vector (energy, angle and geometry) +/Par04/inference/setSizeConditionVector 4 +## path to the model which is set to download by cmake +/Par04/inference/setModelPathName MLModels/Generator.pt +/Par04/inference/setInferenceLibrary TORCH +## set mesh size for inference == mesh size of a full sim that +## was used for training; it coincides with readout mesh size +/Par04/inference/setSizeOfRhoCells 2.325 mm +/Par04/inference/setSizeOfZCells 3.4 mm +/Par04/inference/setNbOfRhoCells 18 +/Par04/inference/setNbOfPhiCells 50 +/Par04/inference/setNbOfZCells 45 + +## Dynamic readout mesh from particle direction needs to be the first fast sim model! +/param/ActivateModel defineMesh +## ML fast sim, configured with the inference setup /Par04/inference +/param/ActivateModel inferenceModel +/run/beamOn 1 diff --git a/examples/extended/parameterisations/gflash/gflash1/test.out b/examples/extended/parameterisations/gflash/gflash1/test.out index 520bdfad46..b804f69cf6 100644 --- a/examples/extended/parameterisations/gflash/gflash1/test.out +++ b/examples/extended/parameterisations/gflash/gflash1/test.out @@ -16,7 +16,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 @@ -37,23 +37,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", @@ -172,7 +173,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 ======== @@ -825,6 +826,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 @@ -841,6 +843,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 @@ -860,7 +863,7 @@ Max 2J for sampling of angular correlations 10 ****************************************** -Internal Real Elapsed Time is: 0.0056569 +Internal Real Elapsed Time is: 0.00753893 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -875,7 +878,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00379183 +Internal Real Elapsed Time is: 0.00641362 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -890,7 +893,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00347966 +Internal Real Elapsed Time is: 0.00518322 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -905,9 +908,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00381001 +Internal Real Elapsed Time is: 0.00427171 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 3 ----- 11977 hits are stored in ExGflashHitsCollection @@ -920,9 +923,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00368722 +Internal Real Elapsed Time is: 0.00451389 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 4 ----- 12044 hits are stored in ExGflashHitsCollection @@ -935,9 +938,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00370244 +Internal Real Elapsed Time is: 0.00418766 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 5 ----- 11953 hits are stored in ExGflashHitsCollection @@ -950,9 +953,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00373412 +Internal Real Elapsed Time is: 0.00415901 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 6 ----- 11893 hits are stored in ExGflashHitsCollection @@ -965,8 +968,8 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00380406 -Internal System Elapsed Time: 0.01 +Internal Real Elapsed Time is: 0.00461844 +Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 7 ----- @@ -980,9 +983,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.0036579 +Internal Real Elapsed Time is: 0.00419817 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 8 ----- 11916 hits are stored in ExGflashHitsCollection @@ -995,9 +998,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00358365 +Internal Real Elapsed Time is: 0.00444736 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 9 ----- 11949 hits are stored in ExGflashHitsCollection @@ -1008,10 +1011,10 @@ Internal GetUserElapsed Time: 0.01 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00432309 +Internal Real Elapsed Time /event is: 0.00550356 ****************************************** -Total Real Elapsed Time is: 1.50034 -Total System Elapsed Time: 0.09 -Total GetUserElapsed Time: 1.31 +Total Real Elapsed Time is: 1.69091 +Total System Elapsed Time: 0.12 +Total GetUserElapsed Time: 1.42 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflash2/test.out b/examples/extended/parameterisations/gflash/gflash2/test.out index 1e68f4679e..44e5866a55 100644 --- a/examples/extended/parameterisations/gflash/gflash2/test.out +++ b/examples/extended/parameterisations/gflash/gflash2/test.out @@ -16,7 +16,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,23 +38,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", @@ -174,7 +175,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 ======== @@ -827,6 +828,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 @@ -843,6 +845,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 @@ -862,7 +865,7 @@ Max 2J for sampling of angular correlations 10 ****************************************** -Internal Real Elapsed Time is: 0.00649272 +Internal Real Elapsed Time is: 0.00691178 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -877,7 +880,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.0037377 +Internal Real Elapsed Time is: 0.00408786 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -892,9 +895,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00342772 +Internal Real Elapsed Time is: 0.00438374 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 2 ----- 11919 hits are stored in ExGflashHitsCollection @@ -907,9 +910,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00347269 +Internal Real Elapsed Time is: 0.00456295 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 3 ----- 11895 hits are stored in ExGflashHitsCollection @@ -922,9 +925,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00363357 +Internal Real Elapsed Time is: 0.00412716 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 4 ----- 11988 hits are stored in ExGflashHitsCollection @@ -937,7 +940,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00346036 +Internal Real Elapsed Time is: 0.00417529 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -952,7 +955,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00385562 +Internal Real Elapsed Time is: 0.00519619 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -967,7 +970,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00348421 +Internal Real Elapsed Time is: 0.004361 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -982,9 +985,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00348102 +Internal Real Elapsed Time is: 0.00422025 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 8 ----- 11973 hits are stored in ExGflashHitsCollection @@ -997,9 +1000,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00349447 +Internal Real Elapsed Time is: 0.00413604 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 9 ----- 11967 hits are stored in ExGflashHitsCollection @@ -1010,10 +1013,10 @@ Internal GetUserElapsed Time: 0 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00428223 +Internal Real Elapsed Time /event is: 0.00512914 ****************************************** -Total Real Elapsed Time is: 1.55633 -Total System Elapsed Time: 0.12 -Total GetUserElapsed Time: 1.34 +Total Real Elapsed Time is: 1.63756 +Total System Elapsed Time: 0.11 +Total GetUserElapsed Time: 1.39 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflash3/test.out b/examples/extended/parameterisations/gflash/gflash3/test.out index abed3cbd3c..a0782bf4f6 100644 --- a/examples/extended/parameterisations/gflash/gflash3/test.out +++ b/examples/extended/parameterisations/gflash/gflash3/test.out @@ -16,7 +16,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,23 +38,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", @@ -151,7 +152,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 ======== @@ -804,6 +805,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 @@ -820,6 +822,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 @@ -839,9 +842,9 @@ Max 2J for sampling of angular correlations 10 ****************************************** -Internal Real Elapsed Time is: 0.00557047 +Internal Real Elapsed Time is: 0.00641403 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 0 ----- 12125 hits are stored in ExGflashHitsCollection @@ -854,9 +857,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00360352 +Internal Real Elapsed Time is: 0.00425449 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 1 ----- 11954 hits are stored in ExGflashHitsCollection @@ -869,7 +872,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00347984 +Internal Real Elapsed Time is: 0.00409789 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -884,7 +887,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00352701 +Internal Real Elapsed Time is: 0.00410361 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -899,7 +902,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00362603 +Internal Real Elapsed Time is: 0.00426683 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -914,7 +917,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00355562 +Internal Real Elapsed Time is: 0.00421226 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -929,7 +932,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.0036316 +Internal Real Elapsed Time is: 0.00427462 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -944,7 +947,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.0035182 +Internal Real Elapsed Time is: 0.00422214 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -959,9 +962,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00346151 +Internal Real Elapsed Time is: 0.00418904 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 8 ----- 11973 hits are stored in ExGflashHitsCollection @@ -974,9 +977,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00354113 +Internal Real Elapsed Time is: 0.00445065 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 9 ----- 11967 hits are stored in ExGflashHitsCollection @@ -987,10 +990,10 @@ Internal GetUserElapsed Time: 0.01 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00416833 +Internal Real Elapsed Time /event is: 0.00494284 ****************************************** -Total Real Elapsed Time is: 1.56107 -Total System Elapsed Time: 0.1 -Total GetUserElapsed Time: 1.33 +Total Real Elapsed Time is: 1.67379 +Total System Elapsed Time: 0.11 +Total GetUserElapsed Time: 1.39 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflasha/test.out b/examples/extended/parameterisations/gflash/gflasha/test.out index 1aced12bd2..5bfaa5197c 100644 --- a/examples/extended/parameterisations/gflash/gflasha/test.out +++ b/examples/extended/parameterisations/gflash/gflasha/test.out @@ -16,7 +16,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 @@ -37,23 +37,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", @@ -171,7 +172,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 ======== @@ -824,6 +825,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 @@ -840,6 +842,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 @@ -860,9 +863,9 @@ Max 2J for sampling of angular correlations 10 ... open analysis file : gflash01.root - done ****************************************** -Run Real Elapsed Time is: 0.308874 +Run Real Elapsed Time is: 0.397952 Run System Elapsed Time: 0 -Run GetUserElapsed Time: 0.31 +Run GetUserElapsed Time: 0.4 ****************************************** number of event = 100 ... write file : gflash01.root - done @@ -873,9 +876,9 @@ number of event = 100 ... open analysis file : gflash00.root - done ****************************************** -Run Real Elapsed Time is: 15.9412 -Run System Elapsed Time: 0.01 -Run GetUserElapsed Time: 15.91 +Run Real Elapsed Time is: 17.3564 +Run System Elapsed Time: 0.02 +Run GetUserElapsed Time: 17.32 ****************************************** number of event = 100 ... write file : gflash00.root - done @@ -884,7 +887,7 @@ Graphics systems deleted. Visualization Manager deleting... ****************************************** -Total Real Elapsed Time is: 18.3026 -Total System Elapsed Time: 0.12 -Total GetUserElapsed Time: 17.49 +Total Real Elapsed Time is: 19.4344 +Total System Elapsed Time: 0.16 +Total GetUserElapsed Time: 19.09 ****************************************** diff --git a/examples/extended/persistency/P01/p01-write.out b/examples/extended/persistency/P01/p01-write.out index 4eb884eff9..78a022f0a3 100644 --- a/examples/extended/persistency/P01/p01-write.out +++ b/examples/extended/persistency/P01/p01-write.out @@ -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 @@ -30,23 +30,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", @@ -178,7 +179,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 ======== @@ -831,6 +832,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 @@ -847,6 +849,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 @@ -2282,7 +2285,7 @@ writing Event_1 Run terminated. Run Summary Number of events processed : 1 - User=0.150000s Real=4.466915s Sys=0.190000s + User=0.190000s Real=6.433365s Sys=0.180000s Region -- -- appears in world volume This region is in the mass world. @@ -2688,13 +2691,13 @@ writing Event_4 Run terminated. Run Summary Number of events processed : 3 - User=0.010000s Real=0.003265s Sys=0.000000s + User=0.000000s Real=0.003841s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:1) -UserDetectorConstruction deleted 0x1cb6b30 -UserPhysicsList deleted 0x1cb7c60 +UserDetectorConstruction deleted 0xf601c0 +UserPhysicsList deleted 0xf612f0 UserActionInitialization deleted 0 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 diff --git a/examples/extended/persistency/P03/batch.out b/examples/extended/persistency/P03/batch.out index 357111f6ec..1295f4bd10 100644 --- a/examples/extended/persistency/P03/batch.out +++ b/examples/extended/persistency/P03/batch.out @@ -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 @@ -59,7 +59,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 ======== @@ -520,12 +520,12 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000355s Sys=0.000000s + User=0.000000s Real=0.000429s Sys=0.000000s G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1570cb0 -UserPhysicsList deleted 0x1571788 -UserActionInitialization deleted 0x15e15a0 +UserDetectorConstruction deleted 0x1e45360 +UserPhysicsList deleted 0x1e45e38 +UserActionInitialization deleted 0x1eb6670 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/persistency/gdml/G01/g01.out b/examples/extended/persistency/gdml/G01/g01.out index 2c12742677..e890d43804 100644 --- a/examples/extended/persistency/gdml/G01/g01.out +++ b/examples/extended/persistency/gdml/G01/g01.out @@ -48,7 +48,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 @@ -75,23 +75,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", @@ -167,7 +168,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 ======== @@ -820,6 +821,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 @@ -836,6 +838,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 @@ -1242,7 +1245,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002609s Sys=0.000000s + User=0.000000s Real=0.002287s Sys=0.000000s /gun/direction 0 0 -1 /run/beamOn 20 @@ -1609,7 +1612,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.001981s Sys=0.000000s + User=0.000000s Real=0.002010s Sys=0.000000s /tracking/verbose 0 /gun/direction 0.3 0.2 1 /run/beamOn 20 @@ -1649,7 +1652,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000952s Sys=0.000000s + User=0.000000s Real=0.000927s Sys=0.000000s /gun/direction 0.3 -0.2 1 /run/beamOn 20 @@ -1688,7 +1691,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000883s Sys=0.000000s + User=0.000000s Real=0.000846s Sys=0.000000s /gun/direction -0.3 0.2 0.6 /run/beamOn 20 @@ -1727,14 +1730,14 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000928s Sys=0.000000s + User=0.000000s Real=0.000852s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:4) -UserDetectorConstruction deleted 0x8bb660 -UserPhysicsList deleted 0x8bbb00 -UserActionInitialization deleted 0xa4b9a0 +UserDetectorConstruction deleted 0x2690840 +UserPhysicsList deleted 0x2690ce0 +UserActionInitialization deleted 0x2821580 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/persistency/gdml/G04/g04.out b/examples/extended/persistency/gdml/G04/g04.out index 6b7394a3a1..7e01f8651e 100644 --- a/examples/extended/persistency/gdml/G04/g04.out +++ b/examples/extended/persistency/gdml/G04/g04.out @@ -22,7 +22,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 @@ -60,23 +60,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", @@ -149,7 +150,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 ======== @@ -802,6 +803,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 @@ -818,6 +820,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 @@ -1088,7 +1091,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.001018s Sys=0.000000s + User=0.000000s Real=0.000729s Sys=0.000000s /gun/direction 0 0 -1 /run/beamOn 20 @@ -1340,7 +1343,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000702s Sys=0.000000s + User=0.000000s Real=0.000465s Sys=0.000000s /tracking/verbose 0 /gun/direction 0.3 0.2 1 /run/beamOn 20 @@ -1393,7 +1396,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000133s Sys=0.000000s + User=0.000000s Real=0.000059s Sys=0.000000s /gun/direction 0.3 -0.2 1 /run/beamOn 20 @@ -1445,7 +1448,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000090s Sys=0.000000s + User=0.000000s Real=0.000063s Sys=0.000000s /gun/direction -0.3 0.2 0.6 /run/beamOn 20 @@ -1497,14 +1500,14 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000112s Sys=0.000000s + User=0.000000s Real=0.000058s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:4) -UserDetectorConstruction deleted 0x1149e90 -UserPhysicsList deleted 0x114a210 -UserActionInitialization deleted 0x12d9cb0 +UserDetectorConstruction deleted 0x23a3020 +UserPhysicsList deleted 0x23a33a0 +UserActionInitialization deleted 0x2533c50 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/physicslists/extensibleFactory/extensibleFactory.out b/examples/extended/physicslists/extensibleFactory/extensibleFactory.out index 0c5c4c8d05..14b84e0e24 100644 --- a/examples/extended/physicslists/extensibleFactory/extensibleFactory.out +++ b/examples/extended/physicslists/extensibleFactory/extensibleFactory.out @@ -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 @@ -33,23 +33,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", @@ -141,6 +142,7 @@ Checking overlaps for volume Screen:0 (G4Box) ... OK! Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -168,7 +170,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 ======== @@ -581,6 +583,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -731,6 +747,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -740,6 +759,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -761,19 +783,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -784,6 +793,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -794,6 +806,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -827,6 +842,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 @@ -843,6 +859,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 diff --git a/examples/extended/physicslists/factory/factory-environment.out b/examples/extended/physicslists/factory/factory-environment.out index 5beb412820..c5598ea350 100644 --- a/examples/extended/physicslists/factory/factory-environment.out +++ b/examples/extended/physicslists/factory/factory-environment.out @@ -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 @@ -34,23 +34,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", @@ -173,7 +174,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 ======== @@ -820,6 +821,7 @@ CoulombScat: for pi- XStype:1 applyCuts: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 @@ -836,6 +838,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 diff --git a/examples/extended/physicslists/factory/factory.out b/examples/extended/physicslists/factory/factory.out index 597da6e155..1dfed2876e 100644 --- a/examples/extended/physicslists/factory/factory.out +++ b/examples/extended/physicslists/factory/factory.out @@ -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 @@ -33,23 +33,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", @@ -170,7 +171,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 ======== @@ -834,6 +835,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 @@ -850,6 +852,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 diff --git a/examples/extended/physicslists/genericPL/genericPL.out b/examples/extended/physicslists/genericPL/genericPL.out index c91fb05237..5f24c8f4f4 100644 --- a/examples/extended/physicslists/genericPL/genericPL.out +++ b/examples/extended/physicslists/genericPL/genericPL.out @@ -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", @@ -169,7 +170,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 ======== @@ -822,6 +823,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 @@ -838,6 +840,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 diff --git a/examples/extended/polarisation/Pol01/pol01.out b/examples/extended/polarisation/Pol01/pol01.out index 467c6abab9..12e6bf166d 100644 --- a/examples/extended/polarisation/Pol01/pol01.out +++ b/examples/extended/polarisation/Pol01/pol01.out @@ -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 @@ -80,7 +80,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 ======== @@ -221,7 +221,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.030000s Real=0.033533s Sys=0.000000s + User=0.030000s Real=0.039831s Sys=0.000000s The run consists of 10000 gamma of 10 MeV through 1.75 mm of G4_Fe (density: 7.874 g/cm3 ) diff --git a/examples/extended/radioactivedecay/Activation/Activation.cc b/examples/extended/radioactivedecay/Activation/Activation.cc index 642a580d60..aa99f62384 100644 --- a/examples/extended/radioactivedecay/Activation/Activation.cc +++ b/examples/extended/radioactivedecay/Activation/Activation.cc @@ -82,7 +82,7 @@ int main(int argc, char** argv) G4ParticleHPManager::GetInstance()->SetNeglectDoppler(false); G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel(false); - G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(false); + G4ParticleHPManager::GetInstance()->SetUseNRESP71Model(true); // initialize visualization G4VisManager* visManager = nullptr; diff --git a/examples/extended/radioactivedecay/Activation/Activation.out b/examples/extended/radioactivedecay/Activation/Activation.out index 029789918b..06dc0e8c36 100644 --- a/examples/extended/radioactivedecay/Activation/Activation.out +++ b/examples/extended/radioactivedecay/Activation/Activation.out @@ -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 @@ -72,7 +72,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 ======== @@ -134,7 +134,7 @@ Screening factor 1 Do not adjust final state 1 Produce fission fragments 0 Use WendtFissionModel 0 - Use NRESP71Model 0 + Use NRESP71Model 1 Use DBRC 0 PHP use Poisson 0 PHP check 1 @@ -182,47 +182,49 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.060000s Real=0.052622s Sys=0.000000s + User=0.060000s Real=0.060633s Sys=0.000000s The run is 1000 neutron of 25 meV through 1 cm of G4_Co (density: 8.9 g/cm3 ) Process calls frequency : - NoProcess= 1079 RadioactiveDecay= 2826 Rayl= 105 - Transportation= 13096 annihil= 34 compt= 1512 - conv= 39 eIoni= 5084 hadElastic= 137 - ionIoni= 2021 msc= 555 nCapture= 942 - phot= 699 + NoProcess= 1105 RadioactiveDecay= 3429 Rayl= 52 + Transportation= 13236 annihil= 27 compt= 1501 + conv= 29 eIoni= 4965 hadElastic= 155 + ionIoni= 2636 msc= 593 nCapture= 950 + phot= 158 List of generated particles (with meanLife != 0): - Co59: 137 Emean = 37.021 meV ( 0.92289 meV --> 139.73 meV) stable - Co60: 942 Emean = 249.76 eV ( 2.062 eV --> 500.93 eV ) mean life = 7.6098 y - Ni60: 942 Emean = 15.907 eV ( 15.907 eV --> 15.907 eV ) stable - anti_nu_e: 942 Emean = 213.42 keV ( 16.915 keV --> 312.25 keV) stable - e+: 39 Emean = 1.6217 MeV ( 230.88 keV --> 3.7304 MeV) stable - e-: 3190 Emean = 319.82 keV ( 154.19 eV --> 6.0632 MeV) stable - gamma: 5734 Emean = 1.6484 MeV ( 58.59 keV --> 7.4329 MeV) stable + Co59: 155 Emean = 35.504 meV ( 0.021479 meV --> 164.63 meV) stable + Co60: 949 Emean = 97.24 eV ( 30.755 meV --> 506.18 eV ) mean life = 7.6098 y + Co60[58.590]: 582 Emean = 254.75 eV ( 6.8923 eV --> 505 eV ) mean life = 15.101 min + Ni60: 950 Emean = 15.907 eV ( 15.907 eV --> 15.907 eV ) stable + anti_nu_e: 950 Emean = 219.7 keV ( 21.084 keV --> 1.1105 MeV) stable + e+: 29 Emean = 1.6925 MeV ( 282.63 keV --> 4.1111 MeV) stable + e-: 3207 Emean = 304.33 keV ( 4.0223 eV --> 6.9829 MeV) stable + gamma: 5254 Emean = 1.8064 MeV ( 13.022 eV --> 7.4914 MeV) stable - Mean energy deposit per event = 1.0046 MeV rms = 1.2885 MeV - Mean energy flow per event = 8.7035 MeV rms = 2.5081 MeV + Mean energy deposit per event = 959.25 keV rms = 1.1706 MeV + Mean energy flow per event = 8.8306 MeV rms = 2.3312 MeV List of particles emerging from the target : - anti_nu_e: 942 Emean = 213.42 keV ( 16.915 keV --> 312.25 keV) Eflow/event = 201.05 keV - e+: 5 Emean = 2.1817 MeV ( 1.3041 MeV --> 3.5298 MeV) Eflow/event = 10.909 keV - e-: 45 Emean = 1.6265 MeV ( 51.039 keV --> 4.8626 MeV) Eflow/event = 73.191 keV - gamma: 4996 Emean = 1.685 MeV ( 49.496 keV --> 7.4329 MeV) Eflow/event = 8.4184 MeV - neutron: 58 Emean = 26.112 meV ( 13.981 meV --> 50.243 meV) Eflow/event = 1.5145 meV + anti_nu_e: 950 Emean = 219.7 keV ( 21.084 keV --> 1.1105 MeV) Eflow/event = 208.72 keV + e+: 2 Emean = 812.75 keV ( 322.67 keV --> 1.3028 MeV) Eflow/event = 1.6255 keV + e-: 44 Emean = 1.4348 MeV ( 53.541 keV --> 4.8392 MeV) Eflow/event = 63.129 keV + gamma: 5067 Emean = 1.6888 MeV ( 58.59 keV --> 7.4914 MeV) Eflow/event = 8.5572 MeV + neutron: 50 Emean = 26.802 meV ( 13.373 meV --> 44.165 meV) Eflow/event = 1.3401 meV histo Id for populations : - Co59 id = 26 - Co60 id = 24 - Ni60 id = 25 + Co59 id = 27 + Co60 id = 25 + Co60[58.590] id = 24 + Ni60 id = 26 --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 396244875, 1312832229 + Current couple of seeds = 904182171, 944670533 ---------------------------------------- ================== Deleting memory pools =================== -Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.025 MB +Number of memory pools allocated: 10 of which, static: 0 +Dynamic pools deleted: 10 / Total memory freed: 0.023 MB ============================================================ diff --git a/examples/extended/radioactivedecay/Activation/History b/examples/extended/radioactivedecay/Activation/History index 901310d3ce..5ea6d9bfb7 100644 --- a/examples/extended/radioactivedecay/Activation/History +++ b/examples/extended/radioactivedecay/Activation/History @@ -4,6 +4,9 @@ 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-05-20 Michel Maire (activation-V11-03-00) +- Activation.cc - SetUseNRESP71Model(true) + ## 2024-02-14 Michel Maire (activation-V11-02-00) - PhysicsList: add G4HadronElasticPhysicsXS - RadioactiveDecayPhysic: add Triton diff --git a/examples/extended/radioactivedecay/rdecay01/rdecay01.out b/examples/extended/radioactivedecay/rdecay01/rdecay01.out index a28ec87a73..09fef94d43 100644 --- a/examples/extended/radioactivedecay/rdecay01/rdecay01.out +++ b/examples/extended/radioactivedecay/rdecay01/rdecay01.out @@ -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 @@ -116,7 +116,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000974s Sys=0.000000s + User=0.000000s Real=0.000878s Sys=0.000000s ======================== run summary ====================== The run was 1 Co60 of 0 eV @@ -190,7 +190,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.390000s Real=0.387319s Sys=0.000000s + User=0.470000s Real=0.469320s Sys=0.000000s ======================== run summary ====================== The run was 100000 Co60 of 0 eV @@ -264,7 +264,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.980000s Real=0.987309s Sys=0.000000s + User=1.040000s Real=1.048726s Sys=0.000000s ======================== run summary ====================== The run was 100000 Co60 of 0 eV @@ -346,7 +346,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.720000s Real=0.742043s Sys=0.020000s + User=0.810000s Real=0.836070s Sys=0.020000s ======================== run summary ====================== The run was 100000 Ca47 of 0 eV diff --git a/examples/extended/radioactivedecay/rdecay02/rdecay02.out b/examples/extended/radioactivedecay/rdecay02/rdecay02.out index ae048109cc..4b759a1753 100644 --- a/examples/extended/radioactivedecay/rdecay02/rdecay02.out +++ b/examples/extended/radioactivedecay/rdecay02/rdecay02.out @@ -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 @@ -99,7 +99,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 ======== @@ -753,6 +753,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 @@ -769,6 +770,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 @@ -831,7 +833,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.350000s Real=0.355993s Sys=0.000000s + User=0.400000s Real=0.402979s Sys=0.000000s The run is 10000 Ne24 of 0 eV through : Target : Length = 1 cm Radius = 5 mm Material = G4_CESIUM_IODIDE diff --git a/examples/extended/runAndEvent/RE01/sample.out b/examples/extended/runAndEvent/RE01/sample.out index 77380a2903..8ceaddafac 100644 --- a/examples/extended/runAndEvent/RE01/sample.out +++ b/examples/extended/runAndEvent/RE01/sample.out @@ -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", @@ -128,7 +129,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 ======== @@ -792,6 +793,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 @@ -808,6 +810,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 @@ -915,495 +918,820 @@ Primary particle PDG=2 deltaMass(MeV)=5.6 is larger than the tolerance(MeV)=1 Tracks in tracking region have been processed. -- Stage 0 over. -Source track ID 6623 (gamma,3.8465780030405[GeV]) at (140.50971005937,479.85104082312,-280.91213101867) +Source track ID 1386 (gamma,1.2241218471838[GeV]) at (140.51941674139,479.84819841139,-280.93069908374) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 3.5534533520064 [GeV] -Cell[8,10] 0.23385719860468 [GeV] -Cell[8,8] 0.0091086583751989 [GeV] -Cell[7,9] 0.023894233943512 [GeV] -Cell[7,8] 0.0015901045389493 [GeV] -Cell[8,7] 0.00083691817895267 [GeV] -Cell[8,11] 0.0077029539405665 [GeV] -Cell[7,10] 0.0024308494348004 [GeV] -Cell[7,11] 0.00019728582479839 [GeV] -Cell[5,46] 0.0012231039047852 [GeV] -Cell[3,36] 0.0033211317430961 [GeV] -Cell[8,6] 0.0001157710482763 [GeV] -Cell[9,8] 0.00024943645449412 [GeV] -Cell[9,11] 0.0005079990382268 [GeV] -### Total energy deposition in calorimeter by a source track in 14 cells : 3.8384889970367 (GeV) +Cell[8,9] 1.1399977917645 [GeV] +Cell[8,10] 0.057105253944588 [GeV] +Cell[8,7] 0.00046924476387787 [GeV] +Cell[8,8] 0.0061253514230819 [GeV] +Cell[16,47] 0.00044359889961844 [GeV] +Cell[7,9] 0.0053946930452657 [GeV] +Cell[6,8] 0.0010385073933756 [GeV] +Cell[8,11] 0.0013701470678126 [GeV] +Cell[6,26] 0.0032597686201502 [GeV] +Cell[6,25] 1.6013516505055e-05 [GeV] +Cell[17,37] 0.00089857804214923 [GeV] +Cell[17,38] 0.0008162311991455 [GeV] +Cell[18,24] 0.0014387671968179 [GeV] +Cell[9,35] 0.00048970780138016 [GeV] +Cell[5,18] 0.0040998375563387 [GeV] +Cell[5,17] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 16 cells : 1.2234744911446 (GeV) -Source track ID 6554 (e+,69.719268978598[GeV]) at (140.74944194875,479.7807776382,-280.93497653188) +Source track ID 1399 (gamma,0.33053441472593[GeV]) at (139.91891316424,480.02364289578,-280.91639727164) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 64.050334552484 [GeV] -Cell[8,10] 3.6599782456493 [GeV] -Cell[8,8] 0.36554721725559 [GeV] -Cell[7,9] 0.72496017318244 [GeV] -Cell[7,8] 0.053906742182318 [GeV] -Cell[8,7] 0.022944016376224 [GeV] -Cell[8,11] 0.080548867932673 [GeV] -Cell[7,10] 0.32524265205565 [GeV] -Cell[7,11] 0.025926481591876 [GeV] -Cell[8,6] 0.0034463895609718 [GeV] -Cell[9,8] 0.0079355535143937 [GeV] -Cell[9,11] 0.0096526875960894 [GeV] -Cell[7,20] 0.00069947612537943 [GeV] -Cell[4,41] 0.00051779406308269 [GeV] -Cell[9,10] 0.010538602796034 [GeV] -Cell[7,41] 0.0018533557464783 [GeV] +Cell[8,9] 0.28995356154937 [GeV] +Cell[8,10] 0.037158464694038 [GeV] +Cell[8,11] 0.0034223884825217 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.33053441472593 (GeV) + +Source track ID 1400 (gamma,0.26372854905924[GeV]) at (139.91149563776,480.02580491928,-280.9139363847) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 0.20127909420045 [GeV] +Cell[8,10] 0.059781048029033 [GeV] +Cell[8,8] 0.0012627561435977 [GeV] +Cell[8,11] 0.0014056506861584 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.26372854905924 (GeV) + +Source track ID 1401 (gamma,0.44212469274955[GeV]) at (139.74750372954,480.07357269627,-280.92055337353) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 0.35226165294786 [GeV] +Cell[8,10] 0.068106671420358 [GeV] +Cell[8,8] 0.00051099891 [GeV] +Cell[8,11] 0.00051099891 [GeV] +Cell[7,10] 0.0013071482443127 [GeV] +Cell[12,32] 0.0025057828885589 [GeV] +Cell[12,31] 0.00033177131601031 [GeV] +Cell[9,14] 0.00027301320570263 [GeV] +Cell[2,33] 0.0015491481965146 [GeV] +Cell[1,40] 0.0052940179094926 [GeV] +Cell[1,35] 0.00051099891 [GeV] +Cell[0,26] 0.00515172362821 [GeV] +Cell[9,1] 0.00062563204430229 [GeV] +### Total energy deposition in calorimeter by a source track in 13 cells : 0.43893955853132 (GeV) + +Source track ID 1392 (e-,22.822121022393[GeV]) at (139.68652787623,480.0913183238,-280.91748315049) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 20.768194837584 [GeV] +Cell[8,10] 1.5707464968862 [GeV] +Cell[8,7] 0.005490427121682 [GeV] +Cell[8,8] 0.092692992888532 [GeV] +Cell[7,9] 0.094521445419475 [GeV] +Cell[8,11] 0.03307044787489 [GeV] +Cell[7,10] 0.070976416329031 [GeV] +Cell[9,7] 0.00097287091332935 [GeV] +Cell[9,8] 0.0013878670338509 [GeV] +Cell[7,31] 0.0017568559725899 [GeV] +Cell[7,33] 0.0019619469396978 [GeV] +Cell[7,8] 0.020305164235821 [GeV] +Cell[8,6] 0.0025906668971404 [GeV] +Cell[9,15] 0.0004468106549879 [GeV] +Cell[6,19] 0.00092052713316822 [GeV] +Cell[8,25] 0.0022260248890486 [GeV] +Cell[4,25] 0.00080772595273551 [GeV] +Cell[9,9] 0.0052556802935745 [GeV] +Cell[8,5] 0.00077471100529636 [GeV] +Cell[9,11] 0.00033586693866909 [GeV] +Cell[8,12] 0.0015460029950445 [GeV] +Cell[10,43] 0.0012474699709202 [GeV] +Cell[10,44] 0.001244600955156 [GeV] +Cell[9,3] 0.00034152639347474 [GeV] +Cell[7,7] 0.0029499830552712 [GeV] +Cell[10,36] 0.0015954747791488 [GeV] +Cell[4,42] 0.00062167440231251 [GeV] +Cell[8,13] 0.00049157271040502 [GeV] +Cell[7,25] 0.0012382186697229 [GeV] +Cell[12,33] 0.00084728885391073 [GeV] +Cell[10,27] 0.00045954376782937 [GeV] +Cell[8,28] 0.00042550752760207 [GeV] +Cell[6,5] 0.0051686121683294 [GeV] +Cell[6,32] 0.0022732271360524 [GeV] +Cell[12,20] 0.00029452533825228 [GeV] +Cell[2,34] 0.00096578168276645 [GeV] +Cell[10,34] 0.001096275227907 [GeV] +Cell[10,35] 0.00094966025390968 [GeV] +Cell[11,32] 0.00046221181293379 [GeV] +Cell[11,31] 2.1997200383339e-06 [GeV] +Cell[11,33] 2.5023542402778e-06 [GeV] +Cell[16,25] 1.4159337908495e-05 [GeV] +Cell[16,26] 9.4022548873909e-06 [GeV] +Cell[6,9] 2.6612820802256e-06 [GeV] +Cell[10,25] 2.0272523979656e-06 [GeV] +Cell[10,45] 6.7883573486824e-06 [GeV] +Cell[11,45] 0.00013157846160402 [GeV] +Cell[9,5] 0.00020988909320629 [GeV] +Cell[7,11] 0.00055175881237144 [GeV] +Cell[6,43] 0.0011671400988286 [GeV] +Cell[7,39] 0.0066147992941623 [GeV] +Cell[4,32] 0.00079793687841565 [GeV] +Cell[9,10] 0.0021898490665691 [GeV] +Cell[10,0] 0.00044980138663686 [GeV] +Cell[10,1] 3.532139435265e-07 [GeV] +Cell[9,4] 0.00064073901718464 [GeV] +Cell[7,32] 7.6467195168334e-05 [GeV] +Cell[5,6] 0.0013158330295484 [GeV] +Cell[11,6] 8.7651542067839e-05 [GeV] +Cell[14,41] 0.0017161501217925 [GeV] +Cell[13,36] 0.0014046899241948 [GeV] +Cell[12,36] 0.0016209944391389 [GeV] +Cell[10,7] 0.00011128276813108 [GeV] +Cell[8,46] 0.00087700077441076 [GeV] +Cell[7,22] 0.0011820453559381 [GeV] +Cell[11,37] 7.5396699539851e-06 [GeV] +Cell[11,36] 4.8808295787239e-09 [GeV] +Cell[11,35] 1.1498927960929e-09 [GeV] +Cell[9,6] 0.00020450290165173 [GeV] +Cell[4,40] 3.7524645740717e-05 [GeV] +Cell[4,41] 0.0022690738767233 [GeV] +Cell[6,46] 0.00020673106820404 [GeV] +Cell[6,28] 0.00051099891 [GeV] +Cell[3,39] 0.00075671488019597 [GeV] +Cell[6,39] 0.001381811602987 [GeV] +Cell[8,47] 0.0021481128528396 [GeV] +Cell[7,14] 0.00018074401487146 [GeV] +Cell[0,10] 0.00048932158922323 [GeV] +Cell[2,42] 0.0010586951975093 [GeV] +Cell[9,12] 0.00025756061974018 [GeV] +Cell[4,21] 0.0030308032279085 [GeV] +Cell[8,34] 0.00051099891 [GeV] +Cell[7,36] 0.00091923979808316 [GeV] +Cell[5,32] 0.002719594536997 [GeV] +Cell[10,30] 0.00064877477442579 [GeV] +Cell[8,32] 0.0025371205286221 [GeV] +Cell[5,34] 0.0022701582206763 [GeV] +### Total energy deposition in calorimeter by a source track in 87 cells : 22.742986669554 (GeV) + +Source track ID 1394 (gamma,0.10874927675838[GeV]) at (144.16487077257,478.76558986118,-281.06540779776) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 0.10511727988148 [GeV] +Cell[8,10] 0.003120997966904 [GeV] +Cell[7,8] 0.00032395947425722 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.10856223732264 (GeV) + +Source track ID 1395 (gamma,8.0352163993887e-05[GeV]) at (-327.27320795222,378.01090904452,-443.10300574966) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[7,17] 8.0352163993887e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 8.0352163993887e-05 (GeV) + +Source track ID 1396 (gamma,0.081645719370657[GeV]) at (144.84220923391,478.56110834902,-281.0466542964) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 0.076753089151493 [GeV] +Cell[8,10] 0.0005447279733337 [GeV] +Cell[8,8] 0.0043479022458299 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.081645719370657 (GeV) + +Source track ID 1393 (e+,3.8416176418244[GeV]) at (145.23910870028,478.44080229841,-281.05561108882) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 3.5758918135184 [GeV] +Cell[8,10] 0.14383682993771 [GeV] +Cell[8,7] 0.0012506173811084 [GeV] +Cell[8,8] 0.01186009171194 [GeV] +Cell[7,9] 0.01116522899903 [GeV] +Cell[8,11] 0.0038770772295167 [GeV] +Cell[7,10] 0.0058959560321178 [GeV] +Cell[9,7] 0.0029796871640534 [GeV] +Cell[9,8] 0.00042699186776035 [GeV] +Cell[7,8] 0.00039609959741186 [GeV] +Cell[9,9] 0.0059014594175437 [GeV] +Cell[9,3] 0.00025238850763063 [GeV] +Cell[6,9] 0.00051099891 [GeV] +Cell[9,5] 0.00088747330606705 [GeV] +Cell[7,17] 0.0035673721785941 [GeV] +Cell[11,2] 1.3336765114218e-05 [GeV] +Cell[10,2] 0.0012586204433826 [GeV] +Cell[12,13] 0.00015490795825147 [GeV] +Cell[9,47] 0.00083721758575968 [GeV] +Cell[5,35] 0.00051099891 [GeV] +Cell[11,38] 0.00052525166020877 [GeV] +Cell[12,8] 0.00050066498220474 [GeV] +Cell[1,42] 0.012620261382139 [GeV] +Cell[4,26] 0.00051558022929161 [GeV] +Cell[6,30] 0.0068477775336979 [GeV] +Cell[1,43] 0.0058651523932048 [GeV] +Cell[12,38] 0.0054127540368338 [GeV] +Cell[2,47] 0.00082850372259683 [GeV] +Cell[17,24] 0.0044999412424718 [GeV] +### Total energy deposition in calorimeter by a source track in 29 cells : 3.809091054604 (GeV) + +Source track ID 1390 (gamma,5.0519175726275[GeV]) at (140.85298150652,479.75039093337,-280.9398103326) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 4.6503757427903 [GeV] +Cell[8,10] 0.27776305939374 [GeV] +Cell[8,8] 0.040289177197967 [GeV] +Cell[7,9] 0.021268798628043 [GeV] +Cell[8,11] 0.0064745141941284 [GeV] +Cell[7,10] 0.012117482475765 [GeV] +Cell[9,8] 0.0020264313098545 [GeV] +Cell[7,8] 0.008029167302376 [GeV] +Cell[9,11] 0.0013153546949031 [GeV] +Cell[8,12] 0.0022228508115239 [GeV] +Cell[7,7] 0.00037908011259315 [GeV] +Cell[10,27] 0.00051099891 [GeV] +Cell[7,11] 0.00072823307612721 [GeV] +Cell[7,32] 0.00088194850693324 [GeV] +Cell[3,39] 0.0010768653644219 [GeV] +Cell[5,35] 0.00058660292530357 [GeV] +Cell[8,33] 0.00051099891 [GeV] +Cell[11,17] 9.8539105994989e-05 [GeV] +Cell[4,31] 0.0001413078643922 [GeV] +Cell[9,28] 0.00071474753686792 [GeV] +Cell[3,38] 0.00035621126164283 [GeV] +Cell[11,43] 0.00073867791217439 [GeV] +Cell[1,30] 0.00054935062182933 [GeV] +Cell[10,29] 0.0013347418511797 [GeV] +Cell[9,19] 0.00034659747707041 [GeV] +Cell[9,34] 0.00072934296611584 [GeV] +Cell[7,35] 0.0014811567945155 [GeV] +Cell[6,21] 0.00088849259073036 [GeV] +Cell[7,13] 0.00016550347135251 [GeV] +Cell[6,11] 0.0020710147967332 [GeV] +Cell[6,24] 0.00095093468910171 [GeV] +Cell[9,24] 0.00086474523821339 [GeV] +Cell[10,33] 0.0043082833481351 [GeV] +### Total energy deposition in calorimeter by a source track in 33 cells : 5.04229695413 (GeV) + +Source track ID 1293 (e+,39.395257460613[GeV]) at (140.98372758177,479.7119850047,-280.93572334947) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 36.194250191447 [GeV] +Cell[8,10] 2.4013224596327 [GeV] +Cell[8,7] 0.015203788406827 [GeV] +Cell[8,8] 0.21104289911425 [GeV] +Cell[7,9] 0.22258387603508 [GeV] +Cell[6,8] 0.0035358391864363 [GeV] +Cell[8,11] 0.040944158759659 [GeV] +Cell[6,25] 0.00074990693246848 [GeV] +Cell[9,35] 0.0018655449514046 [GeV] +Cell[5,17] 0.00020789781547279 [GeV] +Cell[7,10] 0.10063345181342 [GeV] +Cell[12,31] 0.001025443112001 [GeV] +Cell[9,8] 0.004564293738766 [GeV] +Cell[7,8] 0.020477747476143 [GeV] +Cell[8,6] 0.0015993459598335 [GeV] +Cell[9,9] 0.0087274925551265 [GeV] +Cell[9,11] 0.0094362223103285 [GeV] +Cell[8,12] 0.0079093844230548 [GeV] +Cell[7,7] 0.0024275622140668 [GeV] +Cell[8,13] 0.00045427521795583 [GeV] +Cell[7,11] 0.01591425925477 [GeV] +Cell[6,43] 5.6307367398176e-06 [GeV] +Cell[9,10] 0.018175670484255 [GeV] +Cell[10,0] 0.00037870136304917 [GeV] +Cell[10,7] 0.0023064834608557 [GeV] +Cell[6,28] 0.0010473164698417 [GeV] +Cell[7,14] 0.0012279954062509 [GeV] +Cell[5,32] 0.00056766161063294 [GeV] +Cell[10,30] 0.0020965235321047 [GeV] +Cell[11,38] 0.0012393754069457 [GeV] +Cell[11,17] 1.332139249314e-05 [GeV] +Cell[9,19] 0.00071270500683072 [GeV] +Cell[7,13] 0.00080877720608981 [GeV] +Cell[6,11] 0.0022844867724037 [GeV] +Cell[6,24] 0.00041132845086793 [GeV] +Cell[8,41] 0.00051099891 [GeV] +Cell[7,44] 0.00085676751204962 [GeV] +Cell[7,27] 0.0012863309716943 [GeV] +Cell[3,35] 0.00062652252757998 [GeV] +Cell[9,36] 0.0011971209157206 [GeV] +Cell[6,40] 0.0031402919049772 [GeV] +Cell[6,41] 0.00040195559808219 [GeV] +Cell[7,41] 0.0026862091785298 [GeV] +Cell[8,29] 0.00050410069060956 [GeV] +Cell[7,12] 0.0026176551070842 [GeV] +Cell[7,38] 0.001222974513111 [GeV] +Cell[9,46] 0.00055463519769218 [GeV] +Cell[9,29] 0.00030867223580039 [GeV] +Cell[7,30] 0.00051099891 [GeV] +Cell[10,20] 0.00026624639541469 [GeV] +Cell[6,42] 0.0040836866138104 [GeV] +Cell[16,19] 7.3522519477006e-05 [GeV] +Cell[9,22] 0.00031932605285261 [GeV] +Cell[12,46] 2.480570692569e-07 [GeV] +Cell[11,16] 2.5882036425173e-10 [GeV] +Cell[11,18] 1.0779062563415e-08 [GeV] +Cell[13,24] 0.0019174395590945 [GeV] +Cell[8,14] 0.0017719329199527 [GeV] +Cell[7,6] 0.0015454749028327 [GeV] +Cell[12,40] 0.00112411156652 [GeV] +Cell[10,10] 0.00078139922160869 [GeV] +Cell[0,41] 0.00038755091873417 [GeV] +Cell[16,24] 0.00038496004082135 [GeV] +Cell[6,33] 0.0018623130524657 [GeV] +Cell[8,18] 0.0032534037532843 [GeV] +Cell[6,31] 0.0026607198756189 [GeV] +Cell[5,27] 0.00029848304958092 [GeV] +Cell[12,29] 0.00034221544014043 [GeV] +Cell[4,7] 0.00055571948803055 [GeV] +Cell[5,7] 0.00041830336798011 [GeV] +Cell[10,42] 0.0012737934292945 [GeV] +Cell[9,25] 0.00015592559479779 [GeV] +Cell[4,29] 0.0020594809608658 [GeV] +Cell[5,25] 0.00027459383151517 [GeV] +Cell[8,4] 0.00075560221449569 [GeV] +Cell[6,44] 0.0022230561208744 [GeV] +Cell[6,20] 0.0012135834239072 [GeV] +Cell[5,23] 0.0037603121290335 [GeV] +Cell[9,2] 0.00067236771117372 [GeV] +### Total energy deposition in calorimeter by a source track in 79 cells : 39.347013035078 (GeV) + +Source track ID 1296 (e-,0.0021436947413121[GeV]) at (250.83361039665,432.53034563529,-1541.7982668792) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[2,7] 0.0016326958313121 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0016326958313121 (GeV) + +Source track ID 1288 (e-,0.0011324990571344[GeV]) at (405.67065086284,292.28637160928,1507.795884417) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[17,4] 0.00062150014713444 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00062150014713444 (GeV) + +Source track ID 1263 (mu+,97.448762854296[GeV]) at (421.37969181145,269.14523092355,1659.1054133794) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[18,4] 0.17102632590196 [GeV] +Cell[19,4] 0.81303123788887 [GeV] +Cell[19,3] 0.010109558085528 [GeV] +Cell[19,5] 0.0068605231451215 [GeV] +Cell[19,7] 0.00034106378721493 [GeV] +Cell[19,2] 0.00068890277281856 [GeV] +Cell[18,5] 0.0011425754294285 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 1.0032001870109 (GeV) + +Source track ID 1264 (mu-,49.168427355672[GeV]) at (-249.99422815634,-433.01603421642,234.29991678666) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[12,32] 0.57607547825556 [GeV] +Cell[12,31] 0.013418874654506 [GeV] +Cell[11,32] 0.38118511043359 [GeV] +Cell[11,31] 0.015641074165263 [GeV] +Cell[13,32] 0.500259329469 [GeV] +Cell[14,32] 0.79366306642313 [GeV] +Cell[15,32] 0.65796332051963 [GeV] +Cell[16,32] 0.73972815715061 [GeV] +Cell[17,32] 0.010493493748366 [GeV] +Cell[16,31] 0.0095106825185937 [GeV] +Cell[15,31] 0.0096616848486511 [GeV] +Cell[17,31] 0.0013520370311849 [GeV] +Cell[14,31] 0.019627888926207 [GeV] +Cell[13,31] 0.0069572679535149 [GeV] +### Total energy deposition in calorimeter by a source track in 14 cells : 3.7355374660978 (GeV) + +Source track ID 1260 (gamma,0.17435926984906[GeV]) at (-435.6188635721,245.43065354628,445.72699849644) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[12,20] 0.16320066897959 [GeV] +Cell[12,19] 0.0086677026600676 [GeV] +Cell[12,21] 0.0005061133021949 [GeV] +Cell[13,18] 0.0019847849072039 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.17435926984906 (GeV) + +Source track ID 971 (pi+,0.27582872485507[GeV]) at (249.41658777574,433.34901147032,23.935256556926) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[10,7] 0.17161122880233 [GeV] +Cell[9,6] 0.000575478189611 [GeV] +Cell[10,8] 0.00085118492971565 [GeV] +Cell[10,6] 0.0078844900923955 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.18092238201405 (GeV) + +Source track ID 1158 (gamma,0.12620965025075[GeV]) at (-487.28250032429,-112.05250946637,703.88980977417) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[13,24] 0.00077663689442378 [GeV] +Cell[13,25] 0.12190372890194 [GeV] +Cell[11,0] 0.00047230772606587 [GeV] +Cell[13,20] 0.001166135902965 [GeV] +Cell[13,26] 0.00081052091492655 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.12512933034032 (GeV) + +Source track ID 1159 (gamma,0.088297327870564[GeV]) at (61.272146679425,-496.23152261953,76.525352742285) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[10,36] 0.064624979900636 [GeV] +Cell[12,8] 0.00052341924414104 [GeV] +Cell[9,36] 0.00031428249388561 [GeV] +Cell[10,26] 0.00038878582993237 [GeV] +Cell[10,37] 0.022323647321901 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.088175114790497 (GeV) + +Source track ID 976 (pi+,0.88670819997628[GeV]) at (5.2665684467288,499.97226248743,750.10380032295) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[5,17] 2.9164454666898e-05 [GeV] +Cell[12,32] 0.00036148724287011 [GeV] +Cell[12,33] 7.0413485673271e-08 [GeV] +Cell[11,32] 4.2208872173433e-07 [GeV] +Cell[11,31] 6.1662311054533e-08 [GeV] +Cell[10,0] 3.5258304945955e-06 [GeV] +Cell[11,36] 0.0007633948538212 [GeV] +Cell[12,38] 0.00061283538477226 [GeV] +Cell[9,28] 0.0027175530232836 [GeV] +Cell[16,19] 0.0032097485852784 [GeV] +Cell[17,4] 0.0022476637527923 [GeV] +Cell[19,7] 2.6949457271257e-05 [GeV] +Cell[14,32] 0.00051099891 [GeV] +Cell[11,0] 1.5875575627433e-09 [GeV] +Cell[13,11] 0.073631551123112 [GeV] +Cell[16,44] 1.602003260632e-05 [GeV] +Cell[16,46] 0.0023503433118963 [GeV] +Cell[16,45] 0.0001394225835229 [GeV] +Cell[17,28] 7.3736503545661e-06 [GeV] +Cell[17,20] 7.53363079275e-06 [GeV] +Cell[17,21] 0.00021141867689403 [GeV] +Cell[13,13] 0.011287570974471 [GeV] +Cell[13,12] 0.3763948505016 [GeV] +Cell[14,11] 0.00023441145377137 [GeV] +Cell[14,12] 1.0213899076916e-07 [GeV] +Cell[14,2] 0.0050273304470559 [GeV] +Cell[14,1] 3.5917299101129e-08 [GeV] +Cell[13,43] 2.1823626593687e-07 [GeV] +Cell[13,42] 3.3203832572326e-08 [GeV] +Cell[10,39] 6.0385875956854e-05 [GeV] +Cell[4,18] 8.2422578067053e-05 [GeV] +Cell[5,19] 0.0019934059000765 [GeV] +Cell[5,20] 1.1722554518201e-09 [GeV] +Cell[11,14] 2.2737655090168e-06 [GeV] +Cell[10,38] 1.1484013230074e-06 [GeV] +Cell[10,47] 4.1233554522933e-06 [GeV] +Cell[11,47] 6.2884202586588e-05 [GeV] +Cell[14,13] 0.0027972110663905 [GeV] +Cell[17,41] 0.0023787663122133 [GeV] +Cell[17,42] 0.00082561225359734 [GeV] +Cell[17,40] 0.0025169939283339 [GeV] +Cell[13,2] 0.0071806393474654 [GeV] +Cell[15,2] 0.00035925691207988 [GeV] +Cell[14,3] 0.0012669470589086 [GeV] +Cell[11,29] 9.6488036786354e-05 [GeV] +Cell[9,37] 2.0926658180542e-07 [GeV] +Cell[0,6] 1.265833270736e-07 [GeV] +Cell[1,14] 4.0180049836636e-07 [GeV] +Cell[2,44] 1.256306131836e-07 [GeV] +Cell[2,45] 8.5326330441831e-06 [GeV] +Cell[12,45] 0.0004775739140249 [GeV] +Cell[15,38] 0.0017815589535032 [GeV] +Cell[15,37] 0.0024766482829243 [GeV] +Cell[13,30] 0.00051099891 [GeV] +Cell[13,38] 0.00073776270358865 [GeV] +Cell[11,27] 0.00040279751621323 [GeV] +Cell[15,39] 0.0031033607448064 [GeV] +Cell[9,27] 0.0013827228202246 [GeV] +Cell[11,21] 0.0046748965167126 [GeV] +Cell[14,9] 0.020561030073159 [GeV] +Cell[14,8] 0.0079196301608912 [GeV] +Cell[11,39] 0.0010606657293881 [GeV] +Cell[12,39] 1.925869086449e-06 [GeV] +Cell[15,10] 0.00036642047325643 [GeV] +Cell[15,11] 0.00039153775537602 [GeV] +Cell[14,10] 0.0030602628870475 [GeV] +Cell[17,39] 2.0638715907239e-05 [GeV] +Cell[15,9] 3.3207713218872e-05 [GeV] +Cell[16,10] 0.001203461208049 [GeV] +Cell[16,9] 6.0690558878832e-05 [GeV] +Cell[14,7] 0.0039915938348765 [GeV] +Cell[7,46] 7.1800996578531e-05 [GeV] +Cell[7,45] 0.0021028428719917 [GeV] +Cell[3,18] 9.1573866666295e-07 [GeV] +Cell[3,31] 6.2144932715569e-05 [GeV] +Cell[3,32] 1.3720221475069e-06 [GeV] +Cell[15,20] 0.00026980626773991 [GeV] +Cell[15,19] 6.7787043462886e-09 [GeV] +Cell[16,20] 0.0014138033661533 [GeV] +Cell[15,8] 0.0004742251958229 [GeV] +Cell[17,3] 0.002500345578367 [GeV] +Cell[16,4] 7.1981998906949e-06 [GeV] +Cell[16,3] 2.8013550404467e-06 [GeV] +Cell[16,2] 3.9102700793592e-07 [GeV] +Cell[17,2] 1.7355487216264e-09 [GeV] +Cell[18,25] 0.0016685240340831 [GeV] +Cell[18,26] 8.7939230584198e-06 [GeV] +Cell[16,16] 4.562089771207e-05 [GeV] +Cell[15,15] 0.00013115795143415 [GeV] +Cell[15,16] 0.0039761770088693 [GeV] +Cell[13,44] 0.00072783861579418 [GeV] +Cell[14,6] 0.0029920166300235 [GeV] +Cell[16,5] 0.00036843654276811 [GeV] +Cell[15,6] 0.0013674326409717 [GeV] +Cell[15,7] 3.0540801024245e-05 [GeV] +Cell[17,35] 4.1029206709936e-05 [GeV] +Cell[16,35] 1.0962846048642e-05 [GeV] +Cell[15,46] 0.0016656785062087 [GeV] +Cell[15,47] 0.00076667689880748 [GeV] +Cell[18,20] 2.8107053367421e-08 [GeV] +Cell[14,5] 1.0656851169188e-05 [GeV] +Cell[13,9] 1.3638032117456e-05 [GeV] +Cell[13,7] 7.5953669147566e-06 [GeV] +Cell[13,8] 0.00084081973627065 [GeV] +Cell[9,40] 3.9851868728874e-05 [GeV] +Cell[11,7] 6.6435939224903e-06 [GeV] +Cell[17,9] 5.8627305552363e-06 [GeV] +Cell[18,8] 6.0604641330428e-06 [GeV] +Cell[19,8] 0.0011266615527045 [GeV] +Cell[19,9] 0.00042471472961745 [GeV] +### Total energy deposition in calorimeter by a source track in 110 cells : 0.57684051015507 (GeV) + +Source track ID 1042 (pi-,0.65418864298607[GeV]) at (-90.663817441502,-491.71137083347,1126.0796220732) +Original primary track ID 41 (unknown,2.6699951779791[GeV]) +Cell[8,7] 9.6370502046739e-07 [GeV] +Cell[8,8] 1.3124008546583e-12 [GeV] +Cell[6,26] 0.00018121716529925 [GeV] +Cell[17,37] 0.002233250797902 [GeV] +Cell[17,38] 0.00054909226236225 [GeV] +Cell[9,7] 0.0013309541516473 [GeV] +Cell[16,25] 9.1002098808531e-05 [GeV] +Cell[9,6] 0.00070801754518106 [GeV] +Cell[9,34] 2.1041065134341e-05 [GeV] +Cell[12,40] 0.0012445788870125 [GeV] +Cell[8,18] 5.4525996441953e-05 [GeV] +Cell[19,7] 0.0036661239284107 [GeV] +Cell[14,32] 8.7281658270963e-05 [GeV] +Cell[15,32] 5.8363862603983e-07 [GeV] +Cell[15,31] 0.00036582439618996 [GeV] +Cell[14,31] 0.0004194913306881 [GeV] +Cell[13,18] 0.00074292571836497 [GeV] +Cell[13,11] 2.4802924979099e-05 [GeV] +Cell[16,46] 6.6822394728661e-11 [GeV] +Cell[16,45] 0.0013457702895311 [GeV] +Cell[17,21] 0.00090861174257426 [GeV] +Cell[13,13] 0.0065091684198005 [GeV] +Cell[13,12] 0.00060967752843476 [GeV] +Cell[14,12] 0.00051099891 [GeV] +Cell[14,13] 0.0014497877528595 [GeV] +Cell[17,41] 0.003141779030497 [GeV] +Cell[17,42] 5.6112653401215e-05 [GeV] +Cell[14,3] 4.8427318688482e-09 [GeV] +Cell[15,38] 0.001263697223591 [GeV] +Cell[15,37] 1.3942013083579e-08 [GeV] +Cell[13,30] 0.00018104447235123 [GeV] +Cell[15,39] 3.4679600503296e-08 [GeV] +Cell[14,8] 0.002716455185598 [GeV] +Cell[12,39] 3.7641355665187e-05 [GeV] +Cell[17,39] 2.5248660165744e-05 [GeV] +Cell[14,7] 0.0039173130272671 [GeV] +Cell[16,2] 1.5107438404812e-05 [GeV] +Cell[18,26] 0.0010128824436806 [GeV] +Cell[16,16] 0.0018293877985607 [GeV] +Cell[15,16] 0.00076821486670383 [GeV] +Cell[14,6] 0.00071467458796986 [GeV] +Cell[16,35] 6.304789605565e-05 [GeV] +Cell[18,20] 0.0007376016498763 [GeV] +Cell[19,8] 0.0040420865956236 [GeV] +Cell[15,34] 0.33415956382069 [GeV] +Cell[16,42] 3.3571316162124e-06 [GeV] +Cell[15,3] 1.0755761322798e-05 [GeV] +Cell[13,0] 0.000657762570327 [GeV] +Cell[15,33] 0.0027531751475008 [GeV] +Cell[11,4] 0.00076159841920162 [GeV] +Cell[17,17] 1.5130198094994e-05 [GeV] +Cell[16,17] 0.0033641895191542 [GeV] +Cell[16,18] 0.0011150738918072 [GeV] +Cell[15,35] 0.0092309021471763 [GeV] +Cell[17,13] 0.0019594915344878 [GeV] +Cell[15,30] 0.0019542793479332 [GeV] +Cell[15,36] 0.00064261348877767 [GeV] +Cell[18,35] 0.00064008073232932 [GeV] +Cell[17,15] 0.00021992906865876 [GeV] +Cell[16,15] 0.00077203744476276 [GeV] +Cell[17,16] 0.00019283092298429 [GeV] +Cell[16,1] 6.7665164533537e-06 [GeV] +Cell[17,27] 0.00015557629445084 [GeV] +Cell[17,26] 0.0016875112956579 [GeV] +Cell[17,25] 1.4608497003792e-05 [GeV] +Cell[18,27] 3.7525533331291e-06 [GeV] +Cell[18,28] 6.228219717741e-12 [GeV] +Cell[13,40] 2.5243100477383e-05 [GeV] +Cell[1,15] 5.808152249665e-05 [GeV] +Cell[8,30] 2.0008467399748e-05 [GeV] +Cell[9,33] 0.0026508280002364 [GeV] +Cell[16,0] 0.00055677026214546 [GeV] +Cell[13,16] 0.0065608238251677 [GeV] +Cell[13,15] 0.0001007272592343 [GeV] +Cell[12,16] 9.6439025810469e-07 [GeV] +Cell[12,17] 6.9493660703301e-08 [GeV] +Cell[13,17] 0.0020388560029302 [GeV] +Cell[13,14] 0.0011299760462113 [GeV] +Cell[14,17] 0.00029005203170786 [GeV] +Cell[14,16] 7.2308872873006e-05 [GeV] +Cell[13,19] 0.00011063322019254 [GeV] +Cell[19,6] 6.42378004992e-05 [GeV] +Cell[17,23] 0.0014666808831279 [GeV] +Cell[17,22] 8.8186078528111e-05 [GeV] +Cell[18,22] 1.2609823410571e-05 [GeV] +Cell[17,45] 3.9181001717225e-05 [GeV] +Cell[16,34] 0.0022266772529964 [GeV] +Cell[16,33] 0.0061099182223824 [GeV] +Cell[18,21] 0.00040661907505682 [GeV] +Cell[15,45] 1.579675127482e-05 [GeV] +Cell[16,36] 0.0015090788489553 [GeV] +Cell[18,46] 4.6222963701439e-05 [GeV] +Cell[18,45] 0.0018824615024067 [GeV] +Cell[19,15] 1.4106236340012e-06 [GeV] +Cell[15,17] 0.00040228645093521 [GeV] +Cell[16,7] 1.0026394826127e-05 [GeV] +Cell[16,8] 0.003370963873286 [GeV] +Cell[12,27] 2.8461424808484e-06 [GeV] +Cell[12,26] 6.7830820514018e-05 [GeV] +Cell[12,25] 0.0001220441755496 [GeV] +Cell[12,12] 4.4711120426655e-06 [GeV] +Cell[13,29] 1.854655565694e-07 [GeV] +Cell[13,10] 1.0726806574894e-05 [GeV] +Cell[15,43] 3.9493897929788e-10 [GeV] +Cell[14,42] 1.0485865720966e-07 [GeV] +Cell[14,34] 0.00022367330249767 [GeV] +Cell[14,35] 0.00023280976853448 [GeV] +### Total energy deposition in calorimeter by a source track in 107 cells : 0.43583141953046 (GeV) + +Source track ID 967 (gamma,0.23818895051853[GeV]) at (-24.111052240173,-499.41831880686,-17.911064377671) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[9,35] 0.21011077568971 [GeV] +Cell[10,36] 0.0063049748733111 [GeV] +Cell[10,34] 0.0019224268120187 [GeV] +Cell[10,35] 0.00059810183773919 [GeV] Cell[9,34] 0.00051099891 [GeV] -Cell[7,35] 0.00079789905275333 [GeV] -Cell[5,33] 0.00088802736854914 [GeV] -Cell[4,34] 0.0011645646773668 [GeV] -Cell[5,44] 0.0011879119446397 [GeV] -Cell[5,43] 0.00049866443301155 [GeV] -Cell[7,13] 0.0034851457250303 [GeV] -Cell[7,12] 0.0038487043173177 [GeV] -Cell[7,32] 0.00051099891 [GeV] -Cell[2,41] 0.00066619599110062 [GeV] -Cell[3,42] 0.00054309104857699 [GeV] -Cell[8,12] 0.0047109660558629 [GeV] -Cell[1,20] 0.0016553813424519 [GeV] -Cell[5,34] 0.00085786889377824 [GeV] -Cell[9,36] 0.0044069620561346 [GeV] -Cell[10,11] 0.00086116721551743 [GeV] -Cell[8,23] 0.004125233700472 [GeV] -Cell[7,29] 0.00061357610370401 [GeV] -Cell[5,35] 0.0024023916674633 [GeV] -Cell[10,25] 0.0013676503667821 [GeV] -Cell[6,36] 0.0017858045485646 [GeV] -Cell[8,35] 0.00051099891 [GeV] -Cell[3,35] 0.011122079806793 [GeV] -Cell[2,44] 0.00051099891 [GeV] -Cell[12,23] 0.00091913094921269 [GeV] -Cell[7,7] 0.01261069864535 [GeV] -Cell[12,34] 0.00046082577520398 [GeV] -Cell[8,32] 0.0032673590756706 [GeV] -Cell[8,30] 0.0037135323887394 [GeV] -Cell[10,3] 0.00017458637549689 [GeV] -Cell[7,38] 0.00051099891 [GeV] -Cell[1,10] 0.0004722396983188 [GeV] -Cell[14,25] 0.00026812578427133 [GeV] -Cell[9,3] 0.00049964552594286 [GeV] -Cell[0,41] 0.0026612226782053 [GeV] -Cell[9,46] 6.4033007087005e-05 [GeV] -Cell[9,47] 0.0017374796135451 [GeV] -Cell[8,47] 1.6041431808844e-07 [GeV] -Cell[8,0] 1.7891065065328e-05 [GeV] -Cell[9,0] 8.75688939459e-08 [GeV] -Cell[5,41] 0.00046327284974913 [GeV] -Cell[15,33] 0.0011194377461195 [GeV] -Cell[6,12] 0.0023489397662309 [GeV] -Cell[9,9] 0.0087182756613751 [GeV] -Cell[11,35] 0.0013006895454615 [GeV] -Cell[9,21] 0.00097280978665895 [GeV] -Cell[13,40] 0.0022427492548755 [GeV] -Cell[8,44] 0.0004983813566426 [GeV] -Cell[11,38] 0.0072147586574105 [GeV] -Cell[8,25] 0.00051099891 [GeV] -Cell[7,43] 0.00033632302109265 [GeV] -Cell[11,29] 0.00090916532998569 [GeV] -Cell[8,27] 0.0013183217393611 [GeV] -Cell[6,35] 0.00012187631014277 [GeV] -Cell[3,38] 0.003069070120452 [GeV] -Cell[8,16] 0.0021859079547358 [GeV] -Cell[9,16] 0.00028591831359302 [GeV] -Cell[9,17] 0.0011164054833085 [GeV] -Cell[8,18] 0.00078024810390207 [GeV] -Cell[8,19] 0.0031195139982978 [GeV] -Cell[7,18] 3.8434930615949e-08 [GeV] -Cell[5,23] 0.0036655287208555 [GeV] -Cell[8,13] 0.0079882723794694 [GeV] -Cell[9,22] 0.0015064566138524 [GeV] -Cell[9,23] 0.00076109550772885 [GeV] -Cell[9,45] 0.000599519265224 [GeV] -Cell[13,13] 0.00036187701547071 [GeV] -Cell[0,0] 0.00098436633435069 [GeV] -Cell[8,42] 0.00056984193177024 [GeV] -Cell[10,9] 0.00046252792908598 [GeV] -Cell[1,31] 0.0012543392067266 [GeV] -Cell[5,30] 0.00074471013480283 [GeV] -Cell[8,36] 0.001762459956268 [GeV] -Cell[8,5] 0.0020587975830726 [GeV] -Cell[8,14] 0.00072472846970924 [GeV] -Cell[8,28] 0.0032423272230255 [GeV] -Cell[8,26] 0.0050044851226431 [GeV] -Cell[7,22] 0.00073274475713681 [GeV] -Cell[9,1] 0.0001312670666304 [GeV] -Cell[10,47] 0.00081445360977364 [GeV] -Cell[7,16] 0.0010577397517573 [GeV] -Cell[7,15] 0.00023642941211061 [GeV] -Cell[9,18] 0.00094778405835887 [GeV] -Cell[4,39] 0.00073401157921687 [GeV] -Cell[9,20] 0.00051031528636034 [GeV] -Cell[10,20] 0.00066259730185244 [GeV] -Cell[11,46] 0.00051099891 [GeV] -Cell[9,7] 0.00047525938882548 [GeV] -Cell[7,6] 0.00074714486845564 [GeV] -Cell[6,9] 9.5456477993139e-09 [GeV] -Cell[10,4] 0.00018039448116633 [GeV] -Cell[9,4] 1.8026383941105e-09 [GeV] -Cell[10,13] 0.0020556692748318 [GeV] -Cell[10,12] 0.00070266820958292 [GeV] -Cell[7,23] 2.6225825713482e-06 [GeV] -Cell[2,45] 2.3913562472444e-06 [GeV] -Cell[5,24] 9.6466054674238e-07 [GeV] -Cell[3,0] 4.9923421320386e-05 [GeV] -Cell[4,0] 2.3089267176601e-07 [GeV] -Cell[4,32] 0.0025973627063884 [GeV] -Cell[3,30] 0.003226271928774 [GeV] -Cell[8,22] 1.03584204453e-07 [GeV] -Cell[12,36] 0.0032642236361808 [GeV] -Cell[1,26] 0.0014260298933404 [GeV] -Cell[5,22] 0.0004691605368917 [GeV] -Cell[6,10] 0.00051099891 [GeV] -Cell[12,38] 0.00094464782859872 [GeV] -Cell[10,37] 0.0003285230873427 [GeV] -Cell[4,19] 0.00067707198294957 [GeV] -Cell[9,12] 0.00051479901124133 [GeV] -Cell[12,2] 0.0011343436733802 [GeV] -Cell[9,29] 0.00013712014653068 [GeV] -### Total energy deposition in calorimeter by a source track in 128 cells : 69.516554822425 (GeV) +Cell[9,36] 0.017832440291828 [GeV] +Cell[7,12] 0.00039823319392183 [GeV] +Cell[10,5] 0.00025322255335983 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.23793117416189 (GeV) -Source track ID 6518 (mu+,97.449344601546[GeV]) at (421.3757939956,269.15133333234,1659.0683118854) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[18,4] 0.2165993923155 [GeV] -Cell[19,4] 0.9813211064088 [GeV] -Cell[19,3] 0.01752855857036 [GeV] -Cell[19,2] 0.0027351741786362 [GeV] -Cell[19,5] 0.0088981099726522 [GeV] -Cell[18,5] 0.00038678244109962 [GeV] -Cell[18,3] 0.00088998805409817 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 1.2283591119411 (GeV) - -Source track ID 6519 (mu-,49.166679704381[GeV]) at (-250.07082424008,-432.97180377466,234.27840045436) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[11,31] 0.18760074220434 [GeV] -Cell[11,32] 0.4596491664581 [GeV] -Cell[12,32] 0.7810631460444 [GeV] -Cell[13,32] 0.69154288511634 [GeV] -Cell[14,32] 0.58022255917757 [GeV] -Cell[15,32] 0.81280022353079 [GeV] -Cell[16,32] 0.7589476537431 [GeV] -Cell[17,32] 0.024272589676169 [GeV] -Cell[16,31] 0.0076055052816986 [GeV] -Cell[15,31] 0.025300919257646 [GeV] -Cell[14,31] 0.0085891970223694 [GeV] -Cell[13,31] 0.025332153732844 [GeV] -Cell[14,34] 0.0047942181951865 [GeV] -Cell[12,31] 0.057530920977088 [GeV] -Cell[13,33] 0.00051099891 [GeV] -Cell[11,33] 0.00051099891 [GeV] -Cell[11,30] 0.0025668051576796 [GeV] -### Total energy deposition in calorimeter by a source track in 17 cells : 4.4288406833953 (GeV) - -Source track ID 6515 (gamma,0.17435926984906[GeV]) at (-435.61886517745,245.43065069692,445.72703260998) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[12,20] 0.15253807295169 [GeV] -Cell[12,19] 0.0072358115036947 [GeV] -Cell[11,45] 0.00045484822495325 [GeV] -Cell[13,38] 0.012328725462865 [GeV] -Cell[12,29] 0.00021894577887175 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.17277640392207 (GeV) - -Source track ID 939 (pi+,0.27484672788792[GeV]) at (293.31690001895,404.92616137176,16.35346740117) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,7] 0.022720170102628 [GeV] -Cell[10,6] 0.14743034461029 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.17015051471291 (GeV) - -Source track ID 6438 (gamma,0.12620965025075[GeV]) at (-487.28250034958,-112.05250935639,703.88980977326) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[15,32] 0.00051099891 [GeV] -Cell[13,25] 0.11780695069028 [GeV] -Cell[17,9] 0.0017370996602276 [GeV] -Cell[13,24] 0.0056436020802422 [GeV] -Cell[13,26] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.12620965025075 (GeV) - -Source track ID 6439 (gamma,0.088297327870564[GeV]) at (61.272146773217,-496.23152260795,76.525352610031) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,37] 0.014004008520953 [GeV] -Cell[10,36] 0.073907921512596 [GeV] -Cell[10,35] 0.00038539783701608 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.088297327870564 (GeV) - -Source track ID 1204 (neutron,0.94192352976[GeV]) at (-688.70907760583,-1944.9878455368,2000) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[19,33] 0.0023581529577287 [GeV] -Cell[18,33] 1.6580677993261e-08 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0023581695384067 (GeV) - -Source track ID 1206 (gamma,0.00022507342824232[GeV]) at (1328.7582180439,465.88206592059,2000) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[19,2] 0.00022507342824232 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00022507342824232 (GeV) - -Source track ID 944 (pi+,0.88628388833403[GeV]) at (5.3091400234856,499.97181223766,749.93786349223) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[13,11] 0.069560364102971 [GeV] -Cell[14,11] 0.19089785232347 [GeV] -Cell[14,10] 0.071903925881724 [GeV] -Cell[15,10] 0.21310963830312 [GeV] -Cell[16,10] 0.28205269399599 [GeV] -Cell[17,10] 0.00051099891 [GeV] -Cell[16,9] 0.00060825616025795 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.82864372967753 (GeV) - -Source track ID 1016 (pi-,0.65414730827215[GeV]) at (-90.418467554931,-491.75654619437,1128.4625779548) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[15,34] 0.10996104153776 [GeV] -Cell[16,34] 0.002332951282721 [GeV] -Cell[16,35] 0.13060384757152 [GeV] -Cell[12,10] 0.0010487536000952 [GeV] -Cell[17,35] 0.11008570367996 [GeV] -Cell[17,36] 0.00069503637783103 [GeV] -Cell[18,35] 3.0879164114594e-11 [GeV] -Cell[19,19] 0.067180465222053 [GeV] -Cell[19,18] 0.000259941066999 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.42216774036983 (GeV) - -Source track ID 935 (gamma,0.23818895051853[GeV]) at (-24.111052240173,-499.41831880686,-17.911064377671) +Source track ID 968 (gamma,0.33413532464401[GeV]) at (245.8933673121,435.35784351717,97.500310757389) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,36] 1.9208691532689e-05 [GeV] -Cell[10,37] 0.0018234255154654 [GeV] -Cell[10,7] 0.00051099891 [GeV] -Cell[10,36] 0.0024788711388328 [GeV] -Cell[10,35] 0.0017909780686192 [GeV] -Cell[9,35] 0.23089737749961 [GeV] -Cell[10,34] 0.00026363319822951 [GeV] -Cell[9,37] 0.00040445749623723 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.23818895051853 (GeV) +Cell[9,3] 0.00033621026613016 [GeV] +Cell[10,7] 0.019746552873385 [GeV] +Cell[9,19] 0.00033099246184734 [GeV] +Cell[10,8] 0.2944034137964 [GeV] +Cell[10,6] 0.00051402265609443 [GeV] +Cell[10,9] 0.0081156559293979 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.32344684798325 (GeV) -Source track ID 936 (gamma,0.33413532464401[GeV]) at (245.8933673121,435.35784351717,97.500310757389) +Source track ID 873 (pi-,1.7948126653739[GeV]) at (442.077343006,-233.59713782655,-1862.2865910881) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[5,33] 0.00061753632306828 [GeV] -Cell[10,9] 0.00066992656177912 [GeV] -Cell[10,7] 0.041327104379567 [GeV] -Cell[10,6] 0.0017404289581889 [GeV] -Cell[10,8] 0.28052723543081 [GeV] -Cell[11,8] 0.0046929415822484 [GeV] -Cell[11,6] 0.00084354880769046 [GeV] -Cell[16,17] 0.0030486678367191 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.33346738988007 (GeV) +Cell[6,26] 0.00051099891 [GeV] +Cell[7,33] 0.0015003800753893 [GeV] +Cell[0,10] 0.00038005636656651 [GeV] +Cell[1,30] 0.00051099891 [GeV] +Cell[2,7] 1.8248974811286e-09 [GeV] +Cell[0,44] 0.65990350070701 [GeV] +Cell[0,43] 0.0038662061844099 [GeV] +Cell[0,45] 0.012740227040418 [GeV] +Cell[0,46] 3.2187483884059e-05 [GeV] +Cell[4,9] 0.008702451457619 [GeV] +Cell[4,10] 1.2405629269779e-05 [GeV] +Cell[4,20] 2.2478395578219e-05 [GeV] +Cell[5,46] 0.00043296703559861 [GeV] +Cell[4,47] 0.00073163004304229 [GeV] +Cell[4,46] 4.8427515923777e-07 [GeV] +Cell[4,45] 0.00028574144467359 [GeV] +Cell[1,19] 5.013172449253e-07 [GeV] +Cell[7,34] 0.00031652263824071 [GeV] +Cell[0,33] 0.0039015843163373 [GeV] +Cell[0,32] 0.00034063698871403 [GeV] +Cell[1,33] 9.5940195024014e-09 [GeV] +Cell[0,31] 1.0337273124605e-08 [GeV] +Cell[2,2] 9.7384909167886e-09 [GeV] +Cell[2,8] 2.7223024164869e-07 [GeV] +Cell[3,7] 1.6345594974609e-07 [GeV] +Cell[3,8] 8.4495535702445e-08 [GeV] +Cell[0,34] 1.2219106960856e-05 [GeV] +Cell[5,26] 0.00033949060927718 [GeV] +Cell[0,13] 0.0015377750158759 [GeV] +Cell[0,42] 0.012933770572632 [GeV] +Cell[5,10] 0.0013841908717274 [GeV] +Cell[0,28] 0.00051099891 [GeV] +Cell[7,29] 0.00028700621609215 [GeV] +Cell[1,6] 0.00018945372638089 [GeV] +### Total energy deposition in calorimeter by a source track in 34 cells : 0.71138741592451 (GeV) -Source track ID 828 (pi-,1.7949214868522[GeV]) at (442.59574259039,-232.61343177224,-1861.3605430156) +Source track ID 706 (gamma,0.59980090891317[GeV]) at (255.7012546861,-429.67065102466,-1133.3038278159) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,11] 0.00037375240594645 [GeV] -Cell[3,36] 0.00036965814389317 [GeV] -Cell[1,20] 0.0012663466817622 [GeV] -Cell[0,41] 2.04661804446e-07 [GeV] -Cell[9,47] 4.1603878489695e-06 [GeV] -Cell[8,47] 0.0021351607370275 [GeV] -Cell[8,0] 0.00012389246529347 [GeV] -Cell[3,38] 3.5612084730019e-09 [GeV] -Cell[9,18] 0.0021434471111224 [GeV] -Cell[4,32] 4.077143385075e-07 [GeV] -Cell[4,19] 1.3623322813601e-06 [GeV] -Cell[0,44] 0.42699455837514 [GeV] -Cell[0,43] 0.0085573005523306 [GeV] -Cell[0,45] 0.0059757053490134 [GeV] -Cell[0,42] 0.0029621944837486 [GeV] -Cell[1,17] 1.826643710956e-09 [GeV] -Cell[2,17] 3.4162073870903e-07 [GeV] -Cell[5,16] 2.8213328885613e-05 [GeV] -Cell[6,11] 1.7239075305042e-09 [GeV] -Cell[0,46] 0.0045168476090297 [GeV] -Cell[1,43] 0.0026500975447641 [GeV] -Cell[0,36] 0.0017014631853574 [GeV] -Cell[0,35] 0.0047403691667764 [GeV] -Cell[0,38] 1.3976449583424e-05 [GeV] -Cell[1,9] 0.00028801488048646 [GeV] -Cell[2,9] 0.0027810640182769 [GeV] -Cell[2,10] 0.00036003089577684 [GeV] -Cell[1,11] 5.9416342458007e-07 [GeV] -Cell[2,8] 1.6043422192524e-08 [GeV] -Cell[1,46] 2.6007390043787e-06 [GeV] -Cell[0,28] 0.00090146667793044 [GeV] -Cell[1,29] 0.00040078237815806 [GeV] -Cell[1,28] 5.7749388215598e-06 [GeV] -Cell[2,20] 0.00014318999555462 [GeV] -Cell[2,21] 0.0014296703152374 [GeV] -Cell[2,22] 1.4269988241722e-08 [GeV] -Cell[3,19] 9.1300142230466e-08 [GeV] -Cell[4,18] 1.3435052100476e-05 [GeV] -Cell[4,21] 0.0022230387447528 [GeV] -Cell[1,42] 0.0065361618473956 [GeV] -Cell[0,47] 5.6190946213974e-05 [GeV] -Cell[1,35] 0.0011805642450255 [GeV] -Cell[1,34] 7.1185885417435e-08 [GeV] -Cell[2,34] 0.0022230608412412 [GeV] -Cell[1,41] 4.1183769225768e-05 [GeV] -Cell[1,21] 0.0049968039518294 [GeV] -Cell[2,19] 0.00057817173959177 [GeV] -Cell[1,19] 0.00087804060992323 [GeV] -Cell[3,26] 0.0057110663538039 [GeV] -Cell[3,24] 5.4283174016746e-05 [GeV] -Cell[3,23] 0.0012288922452688 [GeV] -Cell[3,22] 0.00037517795028009 [GeV] -Cell[2,18] 7.9519101541337e-06 [GeV] -Cell[0,2] 1.1895474744961e-07 [GeV] -Cell[3,15] 2.194719039835e-06 [GeV] -Cell[3,16] 5.3134901099838e-07 [GeV] -Cell[4,20] 2.3817156616133e-06 [GeV] -Cell[2,36] 6.5432044502813e-06 [GeV] -Cell[2,37] 7.2129368132551e-05 [GeV] -Cell[2,38] 6.7493586107048e-07 [GeV] -Cell[0,33] 4.5762981200824e-05 [GeV] -Cell[0,32] 0.0018327661043287 [GeV] -Cell[1,44] 1.0619308000059e-08 [GeV] -Cell[0,39] 0.0009016569870053 [GeV] -### Total energy deposition in calorimeter by a source track in 64 cells : 0.49984164354013 (GeV) +Cell[8,7] 0.00051099891 [GeV] +Cell[7,11] 0.0015580503854181 [GeV] +Cell[5,6] 0.0019481798645657 [GeV] +Cell[4,40] 0.48150832125822 [GeV] +Cell[3,39] 0.0080088420743716 [GeV] +Cell[5,20] 0.00051099891 [GeV] +Cell[3,18] 0.00093266830106042 [GeV] +Cell[1,15] 0.00037171881097956 [GeV] +Cell[0,33] 0.00060339140763098 [GeV] +Cell[0,42] 0.00021192241405354 [GeV] +Cell[4,39] 0.035447724840369 [GeV] +Cell[3,40] 0.034511502572533 [GeV] +Cell[2,10] 0.000728114102452 [GeV] +Cell[4,14] 0.0012764011984466 [GeV] +Cell[4,6] 0.0010264645138543 [GeV] +Cell[4,5] 0.0010432243888092 [GeV] +Cell[5,16] 0.00098408218251263 [GeV] +Cell[3,5] 0.00039164266082461 [GeV] +Cell[3,25] 0.0024915649056018 [GeV] +Cell[8,16] 0.00042191833170389 [GeV] +Cell[2,6] 0.00091061032466347 [GeV] +Cell[0,17] 0.00019992951527296 [GeV] +Cell[6,35] 0.00093280947043269 [GeV] +Cell[4,16] 0.00024799292987023 [GeV] +Cell[3,42] 0.0045694930659733 [GeV] +Cell[3,41] 0.00051099891 [GeV] +Cell[0,1] 0.00050878786312858 [GeV] +Cell[1,3] 0.00018115220551225 [GeV] +Cell[0,3] 0.00026893699727523 [GeV] +Cell[1,2] 0.00039236087143929 [GeV] +Cell[2,4] 0.001155154884502 [GeV] +Cell[5,22] 0.00051099891 [GeV] +Cell[4,1] 0.0011735546172808 [GeV] +Cell[1,29] 0.0008658905931462 [GeV] +Cell[1,4] 0.0035200876212603 [GeV] +Cell[6,2] 0.0005598702597993 [GeV] +Cell[0,12] 0.0013561784649083 [GeV] +Cell[4,22] 0.00022704260863462 [GeV] +Cell[3,19] 0.00049724795928401 [GeV] +Cell[0,16] 0.0006028560821028 [GeV] +### Total energy deposition in calorimeter by a source track in 40 cells : 0.59367968618789 (GeV) -Source track ID 684 (gamma,0.59980090891317[GeV]) at (255.70125327728,-429.67065186306,-1133.303820694) +Source track ID 707 (gamma,0.053266099197347[GeV]) at (183.99447996577,464.9150797104,-1027.4557779304) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[4,41] 0.002545591015112 [GeV] -Cell[4,39] 0.047621040252696 [GeV] -Cell[6,9] 0.0010786222371745 [GeV] -Cell[1,26] 0.00051099891 [GeV] -Cell[6,10] 0.0004115399894048 [GeV] -Cell[2,8] 0.00051099891 [GeV] -Cell[4,40] 0.49837392625259 [GeV] -Cell[3,39] 0.026182158548232 [GeV] -Cell[3,40] 0.01058502233427 [GeV] -Cell[0,5] 0.0021645326866285 [GeV] -Cell[6,22] 0.00051099891 [GeV] -Cell[10,17] 0.0010100013268937 [GeV] -Cell[4,33] 0.0013609049051925 [GeV] -Cell[4,38] 0.00080755269705299 [GeV] -Cell[0,16] 0.0004813449783437 [GeV] -Cell[1,25] 0.00042781373754118 [GeV] -Cell[0,13] 0.00043292632281203 [GeV] -Cell[4,5] 0.0010723963441677 [GeV] -Cell[2,29] 0.00093314833973471 [GeV] -Cell[4,11] 0.00030783135390124 [GeV] -Cell[3,6] 0.00050802037121581 [GeV] -### Total energy deposition in calorimeter by a source track in 21 cells : 0.59783737042296 (GeV) +Cell[4,9] 0.053266099197347 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.053266099197347 (GeV) -Source track ID 685 (gamma,0.053266099197347[GeV]) at (183.99446413148,464.91508597697,-1027.4557021808) +Source track ID 704 (gamma,0.39597382458922[GeV]) at (-372.59430050452,-333.42688438629,-1802.3851739937) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[3,38] 0.00041492874320582 [GeV] -Cell[3,39] 0.0009283199770906 [GeV] -Cell[4,9] 0.050898260220886 [GeV] -Cell[4,8] 0.00051359134616495 [GeV] -Cell[4,43] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.053266099197347 (GeV) +Cell[0,6] 0.0003184114406798 [GeV] +Cell[1,15] 0.00051099891 [GeV] +Cell[0,45] 0.00060905338859254 [GeV] +Cell[0,42] 0.00091299779927509 [GeV] +Cell[0,28] 0.0028717379813213 [GeV] +Cell[3,5] 0.00051099891 [GeV] +Cell[1,29] 0.0020667675593854 [GeV] +Cell[0,29] 0.36663532347112 [GeV] +Cell[0,24] 0.0010925471739606 [GeV] +Cell[0,30] 0.0010091385939151 [GeV] +Cell[9,13] 0.00093861039872488 [GeV] +Cell[1,38] 0.0010822632503733 [GeV] +Cell[0,35] 0.00080064226778844 [GeV] +Cell[0,14] 0.0010204732458562 [GeV] +### Total energy deposition in calorimeter by a source track in 14 cells : 0.38037996439099 (GeV) -Source track ID 682 (gamma,0.39597382458922[GeV]) at (-372.59429924259,-333.42688579646,-1802.38518998) +Source track ID 705 (gamma,0.02130681471934[GeV]) at (476.42903462967,151.70819016071,-84.417513936522) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[1,9] 0.00051559173950169 [GeV] -Cell[0,28] 0.0006368602080598 [GeV] -Cell[1,29] 0.0017564646538241 [GeV] -Cell[1,28] 0.00050307579060895 [GeV] -Cell[4,40] 0.00023747907790277 [GeV] -Cell[0,16] 0.00050772611477281 [GeV] -Cell[0,29] 0.3830618460093 [GeV] -Cell[2,14] 0.0013540192352079 [GeV] -Cell[2,46] 0.00037549034975464 [GeV] -Cell[0,30] 0.0013616457915531 [GeV] -Cell[0,12] 0.00039337925555304 [GeV] -Cell[0,31] 0.0025546970281212 [GeV] -### Total energy deposition in calorimeter by a source track in 12 cells : 0.39325827525416 (GeV) - -Source track ID 683 (gamma,0.02130681471934[GeV]) at (476.42903752248,151.70818107603,-84.417601490281) -Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,2] 0.018365773679676 [GeV] -Cell[2,31] 0.0029410410396638 [GeV] +Cell[9,1] 0.00051099891 [GeV] +Cell[9,2] 0.02079581580934 [GeV] ### Total energy deposition in calorimeter by a source track in 2 cells : 0.02130681471934 (GeV) -Source track ID 681 (gamma,0.19239638056034[GeV]) at (-414.65189432954,279.39900953462,-1130.2072849692) +Source track ID 703 (gamma,0.19239638056034[GeV]) at (-414.65188046506,279.39903011068,-1130.2071828496) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[4,19] 0.13685430902834 [GeV] -Cell[3,19] 0.042014603756006 [GeV] -Cell[4,20] 0.010646684911011 [GeV] -Cell[3,20] 0.0010425857483212 [GeV] -Cell[3,18] 0.0013423770918827 [GeV] -Cell[2,27] 0.00049582002477516 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.19239638056034 (GeV) +Cell[4,18] 0.0044513969391881 [GeV] +Cell[3,19] 0.0019669276424694 [GeV] +Cell[4,19] 0.18597805597863 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.19239638056029 (GeV) -Source track ID 675 (gamma,0.25162621009879[GeV]) at (499.02634667799,-31.188224079301,957.00760450311) +Source track ID 697 (gamma,0.25162621009879[GeV]) at (499.02634687063,-31.188220996858,957.00755438739) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[12,23] 0.0005155755368154 [GeV] -Cell[14,47] 0.2179645741778 [GeV] -Cell[16,42] 0.0027659211256653 [GeV] -Cell[11,19] 0.00051099891 [GeV] -Cell[15,47] 0.01013243353862 [GeV] -Cell[16,14] 0.0014514227428402 [GeV] -Cell[15,45] 0.0014897458347399 [GeV] -Cell[14,46] 0.0096429185184953 [GeV] -Cell[15,0] 0.0052605608506809 [GeV] -Cell[14,0] 0.00087006104313166 [GeV] -Cell[13,20] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 0.25111521118879 (GeV) +Cell[16,25] 0.0016429276588353 [GeV] +Cell[14,13] 0.00051099891 [GeV] +Cell[15,46] 0.00081545413307741 [GeV] +Cell[15,47] 0.057142742405288 [GeV] +Cell[17,25] 0.0038269604061745 [GeV] +Cell[14,47] 0.18294245405901 [GeV] +Cell[15,0] 0.00068186446394604 [GeV] +Cell[14,46] 0.00088693333811753 [GeV] +Cell[16,27] 0.00050422701919372 [GeV] +Cell[18,37] 0.00072662880208722 [GeV] +### Total energy deposition in calorimeter by a source track in 10 cells : 0.24968119119573 (GeV) -Source track ID 620 (gamma,0.23940053141976[GeV]) at (-378.30991455717,-326.92752797485,1067.9855949372) +Source track ID 638 (gamma,0.23940053141976[GeV]) at (-378.30990928642,-326.92753407399,1067.9855608469) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[10,35] 0.00011190032779548 [GeV] -Cell[15,34] 0.00051099891 [GeV] -Cell[15,29] 0.23474365335267 [GeV] -Cell[16,15] 0.00051099891 [GeV] -Cell[15,28] 0.00072885738971372 [GeV] -Cell[18,12] 0.0010757598934142 [GeV] -Cell[14,19] 0.00067431201684406 [GeV] -Cell[15,30] 0.00075253132608087 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.23910901212652 (GeV) +Cell[15,46] 0.00053975247382097 [GeV] +Cell[18,21] 0.00071598213295161 [GeV] +Cell[15,29] 0.23445938445892 [GeV] +Cell[15,28] 0.0014348179577825 [GeV] +Cell[15,41] 0.0011787697956798 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.23832870681915 (GeV) -Source track ID 366 (e-,0.2126275228085[GeV]) at (-466.23708194769,180.61833632525,167.06497412647) +Source track ID 351 (gamma,0.41164872010706[GeV]) at (-456.42208426017,204.15406192285,168.6781868994) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[10,9] 0.00024619549907321 [GeV] -Cell[10,20] 0.00051099891 [GeV] -Cell[11,30] 0.00064523434344906 [GeV] -Cell[10,21] 0.18221323999868 [GeV] -Cell[11,21] 0.016660335159383 [GeV] -Cell[11,22] 0.011231565811885 [GeV] -Cell[10,22] 0.00060895417603091 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.2121165238985 (GeV) +Cell[10,20] 0.36281414998404 [GeV] +Cell[11,21] 0.0015121523496092 [GeV] +Cell[11,20] 0.032690984564254 [GeV] +Cell[10,21] 0.003895487329808 [GeV] +Cell[10,19] 0.0019851432732134 [GeV] +Cell[11,19] 0.0082613384893644 [GeV] +Cell[10,22] 0.00048946411677482 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.41164872010706 (GeV) -Source track ID 367 (e+,0.19335657045858[GeV]) at (-444.44827726544,229.05398672754,171.69446548141) +Source track ID 352 (gamma,0.17556583448629[GeV]) at (-370.26452040878,336.01217972933,-37.728263366524) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[10,20] 0.16197886534168 [GeV] -Cell[11,19] 0.010674277932598 [GeV] -Cell[11,21] 0.0019575774542643 [GeV] -Cell[11,20] 0.015156378575914 [GeV] -Cell[10,19] 0.0037136068158413 [GeV] -Cell[11,5] 0.00038686324828199 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.19386756936858 (GeV) +Cell[9,19] 0.00092654289974395 [GeV] +Cell[9,18] 0.16889017149122 [GeV] +Cell[10,18] 0.0039580446726972 [GeV] +Cell[9,17] 0.0017910754226316 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.17556583448629 (GeV) -Source track ID 355 (gamma,0.00013012212321756[GeV]) at (-390.83587743918,311.84502065345,-42.262617068866) +Source track ID 350 (gamma,0.41324573943274[GeV]) at (303.44001238969,-397.39672731534,976.47730315274) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,18] 0.00013012212321756 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00013012212321756 (GeV) - -Source track ID 350 (e-,0.16990503221102[GeV]) at (-410.13026194408,285.99504932373,-43.692611852756) -Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,18] 0.0020109142814934 [GeV] -Cell[9,20] 0.035664735184756 [GeV] -Cell[10,20] 0.0013903383895445 [GeV] -Cell[10,19] 0.000659175982878 [GeV] -Cell[9,19] 0.1207269172777 [GeV] -Cell[9,31] 0.0086286633310833 [GeV] -Cell[6,32] 0.00031328885356299 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.16939403330102 (GeV) - -Source track ID 349 (gamma,0.00020625855055821[GeV]) at (-390.0924459549,312.77449321983,1.547899289119) -Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[10,18] 0.00020625855055821 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00020625855055821 (GeV) - -Source track ID 347 (gamma,0.41324573943274[GeV]) at (303.44001238969,-397.39672731534,976.47730315274) -Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[12,19] 0.00016864400576726 [GeV] -Cell[14,40] 0.09358047468647 [GeV] -Cell[14,41] 0.022446751493745 [GeV] -Cell[15,41] 0.14735089095849 [GeV] -Cell[15,40] 0.13915854943881 [GeV] -Cell[16,41] 0.004023266430466 [GeV] -Cell[15,42] 0.0012366345704611 [GeV] -Cell[15,4] 0.00071491025782558 [GeV] -Cell[12,18] 0.0041589194716075 [GeV] -Cell[13,19] 8.824592001968e-06 [GeV] -Cell[13,18] 0.00039787352709601 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 0.41324573943274 (GeV) +Cell[11,32] 0.00035388880968856 [GeV] +Cell[14,41] 0.011422871002913 [GeV] +Cell[16,19] 0.00018369580179118 [GeV] +Cell[16,24] 0.0020757805204327 [GeV] +Cell[16,32] 0.0076818577762315 [GeV] +Cell[14,1] 0.00076339032496514 [GeV] +Cell[11,47] 0.00017480037791259 [GeV] +Cell[16,20] 0.0011814849534745 [GeV] +Cell[17,13] 0.00051099891 [GeV] +Cell[15,41] 0.023070276644819 [GeV] +Cell[14,40] 0.26309050203734 [GeV] +Cell[15,40] 0.096793325824707 [GeV] +Cell[14,19] 0.00038391775647296 [GeV] +Cell[14,18] 0.0018005735819991 [GeV] +Cell[11,9] 0.0030039070690015 [GeV] +Cell[18,7] 0.00053950462951464 [GeV] +### Total energy deposition in calorimeter by a source track in 16 cells : 0.41303077602127 (GeV) Source track ID 306 (gamma,0.00048969154015137[GeV]) at (-322.52983188736,382.06610362961,-252.65755529257) Original primary track ID 43 (unknown,52.984237098069[GeV]) @@ -1412,54 +1740,58 @@ Cell[8,17] 0.00048969154015137 [GeV] Source track ID 307 (neutron,1.0143763312966[GeV]) at (-451.39383360382,215.04326770315,222.90888235516) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[11,29] 8.0009717703433e-07 [GeV] -Cell[12,2] 1.936650427524e-06 [GeV] -Cell[11,30] 8.7703645738202e-05 [GeV] -Cell[12,29] 8.5494743639174e-06 [GeV] -Cell[13,20] 0.0045528282995109 [GeV] -Cell[14,19] 2.3195458147484e-05 [GeV] -Cell[11,20] 4.2069731571246e-06 [GeV] -Cell[13,19] 0.0092225361156542 [GeV] -Cell[13,18] 0.0029212345737533 [GeV] -Cell[13,21] 0.0013969495267084 [GeV] -Cell[14,20] 0.00013019837211425 [GeV] -Cell[14,17] 0.0015871260939463 [GeV] -Cell[13,15] 1.2432229123078e-06 [GeV] -Cell[12,30] 3.0754283898204e-08 [GeV] -Cell[13,23] 0.0012821993062546 [GeV] -Cell[13,17] 0.00075819837911035 [GeV] -Cell[13,16] 1.4395670211798e-07 [GeV] -Cell[14,18] 0.00046259544135353 [GeV] -### Total energy deposition in calorimeter by a source track in 18 cells : 0.022441676341315 (GeV) +Cell[10,29] 0.00013927254698751 [GeV] +Cell[11,29] 8.3670095521029e-06 [GeV] +Cell[11,20] 0.065077748632007 [GeV] +Cell[11,28] 2.608160575619e-06 [GeV] +Cell[10,28] 4.90191965946e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.065232898268782 (GeV) -Source track ID 310 (neutron,0.94133480521796[GeV]) at (-129.42497864457,-482.95877143174,-330.45296106824) +Source track ID 313 (gamma,0.0044061386337994[GeV]) at (94.42097869908,491.00374619906,1576.7862290123) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[8,32] 3.5353343059796e-06 [GeV] -Cell[8,34] 0.0017549592527225 [GeV] -Cell[8,33] 1.0950216180504e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.001769444803209 (GeV) +Cell[18,5] 0.00035168432414106 [GeV] +Cell[17,10] 0.0040544543096584 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.0044061386337994 (GeV) -Source track ID 311 (gamma,0.0002049990694925[GeV]) at (-498.63750176487,-36.886878882418,-178.14004503128) +Source track ID 314 (neutron,0.94038512960324[GeV]) at (-386.39105909055,317.33570466445,-143.81897285072) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,24] 0.0002049990694925 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0002049990694925 (GeV) +Cell[9,19] 6.0778083861805e-06 [GeV] +Cell[9,18] 0.00081369178841669 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.00081976959680287 (GeV) + +Source track ID 315 (gamma,0.0004077543660834[GeV]) at (-364.2891679209,342.48124347984,-237.96514221725) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[8,18] 0.0004077543660834 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0004077543660834 (GeV) + +Source track ID 310 (neutron,0.94159371208998[GeV]) at (-133.83682952362,-481.75481633614,-321.11010851428) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[9,35] 1.3537791380713e-07 [GeV] +Cell[8,34] 0.0018632813091965 [GeV] +Cell[8,33] 0.00016486630600559 [GeV] +Cell[9,34] 6.8371577754078e-08 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.0020283513646937 (GeV) + +Source track ID 311 (gamma,0.00014098184704254[GeV]) at (-498.62826648134,-37.011509909914,-178.07878322612) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[9,24] 0.00014098184704254 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00014098184704254 (GeV) Source track ID 251 (gamma,0.0056427967396733[GeV]) at (494.13049068219,76.38755250811,1188.4412261799) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[16,1] 0.0007942153385643 [GeV] -Cell[15,1] 0.004848581401109 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0056427967396733 (GeV) +Cell[16,1] 0.0056427967396733 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0056427967396733 (GeV) Source track ID 252 (gamma,0.0052219633887345[GeV]) at (-442.96417515312,231.91105952696,-491.2134629091) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,20] 0.0047109644787345 [GeV] -Cell[9,35] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0052219633887345 (GeV) +Cell[7,20] 0.0052219633887345 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0052219633887345 (GeV) Source track ID 253 (gamma,0.0013327477574231[GeV]) at (-308.41678190003,393.54680616469,-407.02105335374) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,16] 0.0013327477574231 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0013327477574231 (GeV) +Cell[7,17] 0.00026207864799089 [GeV] +Cell[7,16] 0.0010706691094322 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.0013327477574231 (GeV) Source track ID 241 (gamma,0.0043968335052791[GeV]) at (-474.56634209732,157.43820041008,-287.52369011308) Original primary track ID 43 (unknown,52.984237098069[GeV]) @@ -1473,93 +1805,103 @@ Cell[9,25] 0.0017508924093049 [GeV] Source track ID 215 (pi+,1.0808886954416[GeV]) at (389.82820998448,-313.10376347194,505.54462039611) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[13,40] 6.5172209695447e-05 [GeV] -Cell[10,20] 0.00061311580736196 [GeV] -Cell[13,38] 0.0002811344629489 [GeV] -Cell[17,9] 4.8604366020299e-07 [GeV] -Cell[13,20] 3.2413896929029e-07 [GeV] -Cell[13,19] 1.156098041065e-06 [GeV] -Cell[13,18] 2.541211909886e-05 [GeV] -Cell[12,42] 0.24741785975021 [GeV] -Cell[13,42] 0.65988479451906 [GeV] -Cell[13,41] 0.015303973016671 [GeV] -Cell[18,9] 6.7283941676578e-05 [GeV] -Cell[18,8] 4.463295581445e-07 [GeV] -Cell[12,40] 0.0018564139851561 [GeV] -Cell[12,41] 0.062463535579025 [GeV] -Cell[12,43] 5.6902469422084e-06 [GeV] -Cell[13,39] 0.0011292176491281 [GeV] -Cell[13,43] 0.016090659247578 [GeV] -Cell[14,42] 0.0090670766400779 [GeV] -Cell[14,43] 0.0049926739652739 [GeV] -### Total energy deposition in calorimeter by a source track in 19 cells : 1.0192664257501 (GeV) +Cell[14,41] 0.0038084435952624 [GeV] +Cell[13,43] 0.0052293884758801 [GeV] +Cell[13,42] 0.30262645068749 [GeV] +Cell[13,44] 1.2747477740049e-11 [GeV] +Cell[13,40] 0.00041739152346963 [GeV] +Cell[15,43] 9.0229929367069e-07 [GeV] +Cell[14,42] 0.45110080385708 [GeV] +Cell[15,41] 2.1958198090033e-08 [GeV] +Cell[14,40] 4.9975454253399e-06 [GeV] +Cell[12,42] 0.13745475555391 [GeV] +Cell[15,42] 1.9835202851937e-07 [GeV] +Cell[13,41] 0.0011418591106718 [GeV] +Cell[14,43] 0.010343383395238 [GeV] +Cell[12,43] 8.3852192762834e-05 [GeV] +Cell[12,44] 2.0335210138001e-10 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 0.91221244876281 (GeV) Source track ID 212 (gamma,0.028595474656773[GeV]) at (328.1859462591,377.21874910722,-300.64113703351) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[8,7] 0.0022317963700302 [GeV] -Cell[8,6] 0.026363678286743 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.028595474656773 (GeV) +Cell[8,7] 0.00051099891 [GeV] +Cell[8,6] 0.027087313498968 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.027598312408968 (GeV) Source track ID 213 (gamma,0.46372847760985[GeV]) at (-465.99474696938,181.24264342847,-913.38295933636) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[4,19] 9.3146639809238e-05 [GeV] -Cell[1,11] 0.00049062335462267 [GeV] -Cell[4,21] 0.009530164695601 [GeV] -Cell[4,20] 0.004629171130998 [GeV] -Cell[9,2] 0.0010681114401677 [GeV] -Cell[5,21] 0.43377558807646 [GeV] -Cell[5,20] 0.012374839770864 [GeV] -Cell[7,31] 0.00042209551068558 [GeV] -Cell[4,22] 0.0006147327326068 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.46299847335181 (GeV) +Cell[1,40] 0.00051099891 [GeV] +Cell[7,33] 0.00051099891 [GeV] +Cell[4,21] 0.0018278437950326 [GeV] +Cell[6,40] 0.00038457524773389 [GeV] +Cell[4,29] 0.00057753368254537 [GeV] +Cell[5,20] 0.03965875834689 [GeV] +Cell[4,39] 0.0014373525343999 [GeV] +Cell[5,22] 0.0071589648622838 [GeV] +Cell[5,21] 0.40589652961957 [GeV] +Cell[4,44] 0.0022175500725329 [GeV] +Cell[4,37] 0.00074699613960225 [GeV] +Cell[4,43] 0.00091432893635923 [GeV] +Cell[5,39] 0.00051099891 [GeV] +Cell[3,43] 0.00016705406203934 [GeV] +Cell[4,28] 0.001203627045004 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 0.463724111074 (GeV) Source track ID 210 (gamma,0.21067608644927[GeV]) at (-247.62061538533,-434.37775131352,-1046.3393876227) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[4,32] 0.17854831324934 [GeV] -Cell[3,19] 0.00048232670062254 [GeV] -Cell[1,44] 0.0010152873093943 [GeV] -Cell[4,33] 0.0011567257851051 [GeV] -Cell[4,31] 0.029473433404806 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.21067608644927 (GeV) +Cell[4,32] 0.19557422212352 [GeV] +Cell[4,31] 0.0054467409483342 [GeV] +Cell[6,41] 0.00051099891 [GeV] +Cell[4,9] 0.00047142053422663 [GeV] +Cell[4,45] 0.000342239338287 [GeV] +Cell[3,7] 0.00051099891 [GeV] +Cell[3,37] 0.0006749712531959 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.20353159201756 (GeV) Source track ID 208 (gamma,0.06726801612498[GeV]) at (-461.11390251385,-193.32348255824,-562.35052722159) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,27] 0.057469559451214 [GeV] -Cell[7,26] 0.0022762416470576 [GeV] -Cell[6,27] 0.0075222150267081 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.06726801612498 (GeV) +Cell[6,26] 0.0063728392488975 [GeV] +Cell[8,33] 0.0010069726036918 [GeV] +Cell[7,27] 0.051888437896243 [GeV] +Cell[7,26] 0.0012341106329083 [GeV] +Cell[6,27] 0.0067656557432393 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.06726801612498 (GeV) Source track ID 209 (gamma,1.2213291054873[GeV]) at (-495.81010252032,64.593670268736,-1525.2871340715) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[0,41] 0.00079730273778333 [GeV] -Cell[1,31] 0.00066412042705423 [GeV] -Cell[4,32] 0.00051099891 [GeV] -Cell[3,30] 0.00057002947185793 [GeV] -Cell[2,10] 0.00051099891 [GeV] -Cell[2,21] 0.0038101294347327 [GeV] -Cell[2,22] 0.5198322791657 [GeV] -Cell[1,41] 0.00020154151931011 [GeV] -Cell[2,36] 0.0016825282670577 [GeV] -Cell[2,23] 0.57341127604101 [GeV] -Cell[1,16] 0.001063464343294 [GeV] -Cell[6,6] 0.00076922107168026 [GeV] -Cell[4,15] 0.00030616342124997 [GeV] -Cell[1,22] 0.052610841688001 [GeV] -Cell[1,23] 0.044909028090773 [GeV] -Cell[3,31] 0.0020286904532975 [GeV] -Cell[1,8] 0.0033036895135469 [GeV] -Cell[8,39] 0.00084540935138706 [GeV] -Cell[2,6] 0.00096652610168626 [GeV] -Cell[3,4] 0.00097678581350825 [GeV] -Cell[1,47] 0.00034827085911107 [GeV] -Cell[1,37] 0.00051099891 [GeV] -Cell[1,1] 0.00064869064216774 [GeV] -### Total energy deposition in calorimeter by a source track in 23 cells : 1.2112789851442 (GeV) +Cell[2,47] 0.00051099891 [GeV] +Cell[4,31] 0.0014683506113141 [GeV] +Cell[8,41] 0.0024010401425592 [GeV] +Cell[6,42] 0.00098789348869348 [GeV] +Cell[4,39] 0.001583792351775 [GeV] +Cell[2,10] 0.0012977410740162 [GeV] +Cell[1,4] 0.00051099891 [GeV] +Cell[2,23] 0.72136256148148 [GeV] +Cell[2,22] 0.4078564424526 [GeV] +Cell[1,47] 0.00095472907484497 [GeV] +Cell[1,0] 0.0015202205208793 [GeV] +Cell[1,23] 0.041754022016288 [GeV] +Cell[3,44] 0.0014828276259303 [GeV] +Cell[2,0] 0.00027840880939972 [GeV] +Cell[0,18] 0.00056905038273957 [GeV] +Cell[1,22] 0.021801958247446 [GeV] +Cell[5,15] 0.0017903492159128 [GeV] +Cell[2,20] 0.00029604971610475 [GeV] +Cell[2,21] 0.00011911486591898 [GeV] +Cell[2,24] 0.00044521457588226 [GeV] +Cell[3,46] 0.00051099891 [GeV] +Cell[0,5] 0.00045012516531987 [GeV] +Cell[3,11] 0.00023740646248472 [GeV] +Cell[2,1] 0.00058269718472662 [GeV] +Cell[5,44] 0.0039724429129978 [GeV] +Cell[1,9] 0.0025345140836045 [GeV] +### Total energy deposition in calorimeter by a source track in 26 cells : 1.2172799491929 (GeV) Source track ID 93 (proton,1.0787784795135[GeV]) at (346.96497473307,-360.02125813412,-1899.6771592578) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[0,41] 0.14050646651355 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.14050646651355 (GeV) +Cell[0,41] 0.14041087657492 [GeV] +Cell[0,42] 9.5589938629899e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.14050646651355 (GeV) Source track ID 95 (gamma,0.00028999105909401[GeV]) at (433.86188770913,-248.52336387846,-1813.4551067917) Original primary track ID 43 (unknown,52.984237098069[GeV]) @@ -1569,11 +1911,11 @@ Cell[0,44] 0.00028999105909401 [GeV] >>> Summary of Event 0 Tracker hits -------------------------------------------------------------- -382 hits are stored in RE01TrackerHitsCollection. +477 hits are stored in RE01TrackerHitsCollection. Calorimeter hits -------------------------------------------------------------- -361 hits are stored in RE01CalorimeterHitsCollection. - Total energy deposition in calorimeter : 87.815950583255 (GeV) +503 hits are stored in RE01CalorimeterHitsCollection. + Total energy deposition in calorimeter : 86.836934229777 (GeV) Trajectories in tracker -------------------------------------------------------------- diff --git a/examples/extended/runAndEvent/RE02/run.out b/examples/extended/runAndEvent/RE02/run.out index d61e39adc1..8623937736 100644 --- a/examples/extended/runAndEvent/RE02/run.out +++ b/examples/extended/runAndEvent/RE02/run.out @@ -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 @@ -40,23 +40,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", @@ -256,7 +257,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 ======== @@ -922,6 +923,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 @@ -938,6 +940,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 @@ -1373,7 +1376,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.000000s Real=0.001490s Sys=0.000000s + User=0.000000s Real=0.001358s Sys=0.000000s PrimitiveScorer RUN PhantomSD,totalEDep Number of entries 10 PrimitiveScorer RUN PhantomSD,protonEDep @@ -1604,9 +1607,9 @@ Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x190b020 -UserPhysicsList deleted 0x190b090 -UserActionInitialization deleted 0x1b1bd70 +UserDetectorConstruction deleted 0x26296d0 +UserPhysicsList deleted 0x2629740 +UserActionInitialization deleted 0x283b730 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/runAndEvent/RE02/run3.out b/examples/extended/runAndEvent/RE02/run3.out index 065e1fdbd9..df23a18af5 100644 --- a/examples/extended/runAndEvent/RE02/run3.out +++ b/examples/extended/runAndEvent/RE02/run3.out @@ -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 @@ -40,23 +40,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", @@ -254,7 +255,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 ======== @@ -920,6 +921,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 @@ -936,6 +938,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 @@ -1053,89 +1056,89 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10000 - User=5.180000s Real=5.213054s Sys=0.030000s + User=5.470000s Real=5.486529s Sys=0.020000s PrimitiveScorer RUN PhantomSD,totalEDep - Number of entries 50804 + Number of entries 51200 PrimitiveScorer RUN PhantomSD,protonEDep - Number of entries 23 + Number of entries 12 PrimitiveScorer RUN PhantomSD,protonNStep - Number of entries 23 + Number of entries 12 PrimitiveScorer RUN PhantomSD,chargedPassCellFlux - Number of entries 19957 + Number of entries 19904 PrimitiveScorer RUN PhantomSD,chargedCellFlux - Number of entries 50697 + Number of entries 51107 PrimitiveScorer RUN PhantomSD,chargedSurfFlux - Number of entries 11637 + Number of entries 11593 PrimitiveScorer RUN PhantomSD,gammaSurfCurr000 - Number of entries 33 + Number of entries 45 PrimitiveScorer RUN PhantomSD,gammaSurfCurr001 - Number of entries 343 + Number of entries 341 PrimitiveScorer RUN PhantomSD,gammaSurfCurr002 - Number of entries 50268 + Number of entries 50655 PrimitiveScorer RUN PhantomSD,gammaSurfCurr003 - Number of entries 70765 + Number of entries 72139 ============================================================= Number of event processed : 10000 ============================================================= #Z Cell# totalEDep protonEDep protonNStep chargedPassCellFlux chargedCellFlux chargedSurfFlux gammaSurfCurr000 gammaSurfCurr001 gammaSurfCurr002 gammaSurfCurr003 - 0 35.7216 MeV 0 eV 0 2326.52 /cm2 2471 /cm2 1961.15 /cm2 0 /cm2 25 /cm2 650 /cm2 350 /cm2 - 1 425.192 MeV 0 eV 0 2942.63 /cm2 4114.81 /cm2 3535.55 /cm2 0 /cm2 25 /cm2 1050 /cm2 650 /cm2 - 2 52.1509 MeV 0 eV 0 3519.46 /cm2 3695.71 /cm2 4334.07 /cm2 25 /cm2 25 /cm2 2775 /cm2 2950 /cm2 - 3 284.129 MeV 0 eV 0 1424.45 /cm2 2678.64 /cm2 8279.42 /cm2 0 /cm2 25 /cm2 3525 /cm2 3350 /cm2 - 4 20.423 MeV 0 eV 0 1167.96 /cm2 1384.68 /cm2 1064.03 /cm2 0 /cm2 0 /cm2 2625 /cm2 3400 /cm2 - 5 99.294 MeV 0 eV 0 305.657 /cm2 903.709 /cm2 1686.36 /cm2 0 /cm2 0 /cm2 2500 /cm2 3225 /cm2 - 6 9.08869 MeV 0 eV 0 393.932 /cm2 519.818 /cm2 966.717 /cm2 0 /cm2 0 /cm2 1925 /cm2 2575 /cm2 - 7 63.7845 MeV 0 eV 0 123.618 /cm2 574.705 /cm2 495.059 /cm2 0 /cm2 0 /cm2 1900 /cm2 2325 /cm2 - 8 5.71923 MeV 0 eV 0 331.774 /cm2 378.501 /cm2 472.994 /cm2 0 /cm2 0 /cm2 1475 /cm2 2050 /cm2 - 9 62.4351 MeV 0 eV 0 177.701 /cm2 530.879 /cm2 368.873 /cm2 0 /cm2 25 /cm2 1150 /cm2 1750 /cm2 - 10 4.30008 MeV 0 eV 0 158.471 /cm2 243.955 /cm2 345.594 /cm2 0 /cm2 25 /cm2 775 /cm2 1625 /cm2 - 11 11.6094 MeV 0 eV 0 13.3018 /cm2 100.392 /cm2 332.981 /cm2 0 /cm2 0 /cm2 775 /cm2 1525 /cm2 - 12 3.88103 MeV 0 eV 0 272.994 /cm2 273.909 /cm2 2006.58 /cm2 0 /cm2 0 /cm2 875 /cm2 1350 /cm2 - 13 7.45344 MeV 0 eV 0 18.9722 /cm2 56.3679 /cm2 90.9955 /cm2 0 /cm2 0 /cm2 525 /cm2 850 /cm2 - 14 1.40502 MeV 0 eV 0 71.1227 /cm2 73.8323 /cm2 125.332 /cm2 0 /cm2 0 /cm2 550 /cm2 925 /cm2 - 15 6.67361 MeV 0 eV 0 5.06011 /cm2 46.2935 /cm2 0 /cm2 0 /cm2 0 /cm2 300 /cm2 1000 /cm2 - 16 1.1569 MeV 0 eV 0 72.6906 /cm2 76.7841 /cm2 27.4544 /cm2 0 /cm2 0 /cm2 300 /cm2 875 /cm2 - 17 12.4094 MeV 0 eV 0 47.0025 /cm2 117.077 /cm2 54.7689 /cm2 0 /cm2 0 /cm2 375 /cm2 775 /cm2 - 18 585.332 keV 0 eV 0 35.8038 /cm2 38.3393 /cm2 135.652 /cm2 0 /cm2 0 /cm2 200 /cm2 675 /cm2 - 19 11.8576 MeV 0 eV 0 46.8932 /cm2 112.93 /cm2 859.563 /cm2 0 /cm2 0 /cm2 275 /cm2 650 /cm2 - 20 1.92772 MeV 0 eV 0 115.519 /cm2 123.818 /cm2 39.3933 /cm2 0 /cm2 0 /cm2 300 /cm2 375 /cm2 - 21 3.68472 MeV 0 eV 0 3.76577 /cm2 27.2891 /cm2 1496.62 /cm2 0 /cm2 0 /cm2 100 /cm2 350 /cm2 - 22 76.2615 keV 0 eV 0 1.47038 /cm2 1.47038 /cm2 629.69 /cm2 0 /cm2 0 /cm2 125 /cm2 325 /cm2 - 23 6.19307 MeV 0 eV 0 0 /cm2 49.5238 /cm2 0 /cm2 0 /cm2 0 /cm2 150 /cm2 375 /cm2 - 24 790.143 keV 0 eV 0 24.53 /cm2 39.7879 /cm2 27.6534 /cm2 0 /cm2 0 /cm2 125 /cm2 300 /cm2 - 25 1.38191 MeV 0 eV 0 8.23385 /cm2 10.7029 /cm2 145.791 /cm2 0 /cm2 0 /cm2 100 /cm2 275 /cm2 - 26 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 250 /cm2 - 27 4.68987 MeV 0 eV 0 27.5757 /cm2 50.6241 /cm2 0 /cm2 0 /cm2 0 /cm2 125 /cm2 225 /cm2 - 28 769.298 keV 0 eV 0 58.084 /cm2 58.084 /cm2 54.7533 /cm2 0 /cm2 0 /cm2 125 /cm2 150 /cm2 - 29 1.6506 MeV 0 eV 0 9.33237 /cm2 13.4868 /cm2 59.1387 /cm2 0 /cm2 0 /cm2 75 /cm2 150 /cm2 - 30 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 75 /cm2 - 31 1.31762 MeV 0 eV 0 0 /cm2 10.5278 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 125 /cm2 - 32 193.272 keV 0 eV 0 17.2885 /cm2 17.2885 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 125 /cm2 - 33 3.31464 MeV 0 eV 0 10.4735 /cm2 30.5116 /cm2 70.6508 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2 - 34 283.455 keV 0 eV 0 24.39 /cm2 24.39 /cm2 49.6407 /cm2 0 /cm2 0 /cm2 50 /cm2 150 /cm2 - 35 1.18493 MeV 0 eV 0 0 /cm2 9.79246 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 125 /cm2 - 36 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 75 /cm2 - 37 1.37607 MeV 0 eV 0 0 /cm2 13.4782 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 100 /cm2 - 38 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 - 39 409.736 keV 0 eV 0 0 /cm2 2.06153 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 - 40 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 - 41 510.999 keV 0 eV 0 0 /cm2 2.38192 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2 - 42 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2 - 43 564.21 keV 0 eV 0 0 /cm2 3.56506 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2 - 44 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 - 45 3.61494 MeV 0 eV 0 0 /cm2 37.0363 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 - 46 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 47 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2 + 0 36.0192 MeV 0 eV 0 2484.24 /cm2 2554.54 /cm2 2262.84 /cm2 0 /cm2 50 /cm2 475 /cm2 425 /cm2 + 1 477.233 MeV 0 eV 0 3312.6 /cm2 4519.22 /cm2 4514.54 /cm2 0 /cm2 150 /cm2 1175 /cm2 625 /cm2 + 2 51.2333 MeV 0 eV 0 3493.35 /cm2 3636.76 /cm2 5393.07 /cm2 0 /cm2 0 /cm2 3500 /cm2 2975 /cm2 + 3 258.81 MeV 0 eV 0 1416.03 /cm2 2437.05 /cm2 5574.32 /cm2 25 /cm2 75 /cm2 3125 /cm2 3100 /cm2 + 4 14.204 MeV 294.818 keV 1 825.873 /cm2 912.937 /cm2 5582.7 /cm2 0 /cm2 0 /cm2 3200 /cm2 3150 /cm2 + 5 110.445 MeV 0 eV 0 350.907 /cm2 976.636 /cm2 902.086 /cm2 0 /cm2 25 /cm2 2725 /cm2 2475 /cm2 + 6 5.56325 MeV 0 eV 0 337.275 /cm2 388.76 /cm2 52.5696 /cm2 0 /cm2 0 /cm2 2050 /cm2 2450 /cm2 + 7 54.2737 MeV 0 eV 0 132.748 /cm2 482.09 /cm2 1114.01 /cm2 0 /cm2 0 /cm2 1575 /cm2 2100 /cm2 + 8 4.71674 MeV 0 eV 0 288.23 /cm2 308.854 /cm2 198.321 /cm2 0 /cm2 0 /cm2 1025 /cm2 2250 /cm2 + 9 41.7749 MeV 0 eV 0 32.9845 /cm2 345.305 /cm2 489.602 /cm2 0 /cm2 0 /cm2 1150 /cm2 2150 /cm2 + 10 4.14519 MeV 0 eV 0 152.08 /cm2 233.807 /cm2 405.879 /cm2 0 /cm2 25 /cm2 625 /cm2 1775 /cm2 + 11 36.4327 MeV 0 eV 0 65.5539 /cm2 350.751 /cm2 189.493 /cm2 0 /cm2 0 /cm2 575 /cm2 1425 /cm2 + 12 4.61645 MeV 0 eV 0 296.234 /cm2 310.809 /cm2 2098.33 /cm2 0 /cm2 0 /cm2 450 /cm2 1225 /cm2 + 13 27.9623 MeV 0 eV 0 103.93 /cm2 267.021 /cm2 100.304 /cm2 0 /cm2 0 /cm2 375 /cm2 1150 /cm2 + 14 1.40196 MeV 0 eV 0 74.8104 /cm2 79.8285 /cm2 57.807 /cm2 0 /cm2 0 /cm2 450 /cm2 850 /cm2 + 15 11.4502 MeV 0 eV 0 3.10148 /cm2 98.2034 /cm2 104.184 /cm2 0 /cm2 0 /cm2 175 /cm2 625 /cm2 + 16 679.308 keV 0 eV 0 6.05193 /cm2 41.8132 /cm2 27.8523 /cm2 0 /cm2 0 /cm2 350 /cm2 725 /cm2 + 17 10.2657 MeV 0 eV 0 12.9069 /cm2 91.7206 /cm2 25.4038 /cm2 0 /cm2 0 /cm2 325 /cm2 550 /cm2 + 18 2.82774 MeV 0 eV 0 99.3237 /cm2 157.71 /cm2 342.387 /cm2 0 /cm2 0 /cm2 250 /cm2 625 /cm2 + 19 14.1741 MeV 0 eV 0 41.1108 /cm2 132.077 /cm2 420.651 /cm2 0 /cm2 25 /cm2 375 /cm2 575 /cm2 + 20 1.50079 MeV 0 eV 0 109.624 /cm2 111.835 /cm2 94.0227 /cm2 0 /cm2 0 /cm2 325 /cm2 625 /cm2 + 21 3.0406 MeV 0 eV 0 1.25698 /cm2 19.5645 /cm2 32.9726 /cm2 0 /cm2 0 /cm2 200 /cm2 525 /cm2 + 22 101.092 keV 0 eV 0 0 /cm2 2.04781 /cm2 26.4168 /cm2 0 /cm2 0 /cm2 75 /cm2 425 /cm2 + 23 4.67597 MeV 0 eV 0 14.0569 /cm2 53.4406 /cm2 0 /cm2 0 /cm2 0 /cm2 100 /cm2 250 /cm2 + 24 1.76872 MeV 0 eV 0 126.04 /cm2 126.079 /cm2 114.127 /cm2 0 /cm2 0 /cm2 150 /cm2 175 /cm2 + 25 2.85404 MeV 0 eV 0 6.38096 /cm2 26.273 /cm2 83.0867 /cm2 0 /cm2 0 /cm2 75 /cm2 75 /cm2 + 26 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 125 /cm2 125 /cm2 + 27 735.625 keV 0 eV 0 0 /cm2 3.47511 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 150 /cm2 + 28 522.231 keV 0 eV 0 6.23521 /cm2 23.5445 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 150 /cm2 + 29 5.41074 MeV 0 eV 0 1.55916 /cm2 57.1606 /cm2 263.944 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2 + 30 622.974 keV 0 eV 0 0 /cm2 32.7824 /cm2 32.5291 /cm2 0 /cm2 0 /cm2 50 /cm2 200 /cm2 + 31 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 175 /cm2 + 32 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 125 /cm2 + 33 206.559 keV 0 eV 0 0 /cm2 0.449707 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 125 /cm2 + 34 425.828 keV 0 eV 0 0 /cm2 14.4908 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 100 /cm2 + 35 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 36 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 37 510.999 keV 0 eV 0 0 /cm2 2.86381 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 50 /cm2 + 38 166.554 keV 0 eV 0 0 /cm2 5.25934 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 + 39 1.00102 MeV 0 eV 0 0.443486 /cm2 8.53915 /cm2 763.305 /cm2 0 /cm2 25 /cm2 50 /cm2 25 /cm2 + 40 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 41 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 42 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 43 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 25 /cm2 + 44 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 + 45 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 46 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 47 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 48 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 49 2.15526 MeV 0 eV 0 0 /cm2 19.3365 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 50 151.376 keV 0 eV 0 9.06367 /cm2 9.78306 /cm2 28.4335 /cm2 0 /cm2 0 /cm2 75 /cm2 0 /cm2 - 51 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 75 /cm2 0 /cm2 - 52 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2 + 49 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 50 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 51 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 52 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 53 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 54 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 - 55 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 - 56 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 - 57 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 54 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 55 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 56 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 57 510.999 keV 0 eV 0 0 /cm2 3.88337 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 0 /cm2 58 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 59 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 60 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 @@ -1144,8 +1147,8 @@ Run Summary 63 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 64 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 65 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 66 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 - 67 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 + 66 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 25 /cm2 + 67 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 50 /cm2 68 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 69 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 70 0 eV 0 eV 0 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 0 /cm2 @@ -1284,9 +1287,9 @@ Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x2706020 -UserPhysicsList deleted 0x2706090 -UserActionInitialization deleted 0x2916d70 +UserDetectorConstruction deleted 0xbdd6d0 +UserPhysicsList deleted 0xbdd740 +UserActionInitialization deleted 0xdef730 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. @@ -1309,10 +1312,10 @@ Pool ID '15G4HCofThisEvent', size : 0.000961 MB Pool ID '7G4Track', size : 0.0192 MB Pool ID '18G4TouchableHistory', size : 0.00288 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB -Pool ID '10G4Fragment', size : 0.00192 MB -Pool ID '17G4ReactionProduct', size : 0.00192 MB +Pool ID '10G4Fragment', size : 0.000961 MB +Pool ID '17G4ReactionProduct', size : 0.000961 MB Number of memory pools allocated: 12 of which, static: 0 -Dynamic pools deleted: 12 / Total memory freed: 0.071 MB +Dynamic pools deleted: 12 / Total memory freed: 0.069 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/runAndEvent/RE02/run4.out b/examples/extended/runAndEvent/RE02/run4.out index c1b6166741..bfcf8840dc 100644 --- a/examples/extended/runAndEvent/RE02/run4.out +++ b/examples/extended/runAndEvent/RE02/run4.out @@ -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 @@ -40,23 +40,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", @@ -256,7 +257,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 ======== @@ -922,6 +923,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 @@ -938,6 +940,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 @@ -1055,7 +1058,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10000 - User=0.060000s Real=0.057423s Sys=0.000000s + User=0.060000s Real=0.060058s Sys=0.000000s PrimitiveScorer RUN PhantomSD,totalEDep Number of entries 81 PrimitiveScorer RUN PhantomSD,protonEDep @@ -1286,9 +1289,9 @@ Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1290020 -UserPhysicsList deleted 0x1290090 -UserActionInitialization deleted 0x14a0d70 +UserDetectorConstruction deleted 0xf906d0 +UserPhysicsList deleted 0xf90740 +UserActionInitialization deleted 0x11a2730 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/runAndEvent/RE03/run.out b/examples/extended/runAndEvent/RE03/run.out index a7dc991223..826240403e 100644 --- a/examples/extended/runAndEvent/RE03/run.out +++ b/examples/extended/runAndEvent/RE03/run.out @@ -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 @@ -30,23 +30,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", @@ -148,7 +149,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 ======== @@ -801,6 +802,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 @@ -817,6 +819,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 @@ -888,7 +891,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 2000 - User=2.540000s Real=2.541976s Sys=0.000000s + User=2.690000s Real=2.703055s Sys=0.010000s /control/doifInteractive /vis/enable # ######################################## @@ -909,9 +912,9 @@ Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. Deleting G4Run (id:0) -UserDetectorConstruction deleted 0x1b32e90 -UserPhysicsList deleted 0x1b2f1e0 -UserActionInitialization deleted 0x1cedf70 +UserDetectorConstruction deleted 0x1c89530 +UserPhysicsList deleted 0x1c85880 +UserActionInitialization deleted 0x1e45430 UserWorkerInitialization deleted 0 UserWorkerThreadInitialization deleted 0 UserRunAction deleted. diff --git a/examples/extended/runAndEvent/RE04/exampleRE04.out b/examples/extended/runAndEvent/RE04/exampleRE04.out index 8318266d0f..7e49c4628b 100644 --- a/examples/extended/runAndEvent/RE04/exampleRE04.out +++ b/examples/extended/runAndEvent/RE04/exampleRE04.out @@ -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 @@ -30,23 +30,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", @@ -186,7 +187,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 ======== @@ -839,6 +840,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 @@ -855,6 +857,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 diff --git a/examples/extended/runAndEvent/RE05/exampleRE05.out b/examples/extended/runAndEvent/RE05/exampleRE05.out index 1e0c671c26..0a88ac5fe7 100644 --- a/examples/extended/runAndEvent/RE05/exampleRE05.out +++ b/examples/extended/runAndEvent/RE05/exampleRE05.out @@ -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 @@ -27,6 +27,7 @@ G4HEPEvtInterface - pythia_event.data is open. Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... Registering graphics systems... @@ -36,23 +37,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", @@ -123,7 +125,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 ======== @@ -536,6 +538,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -686,6 +702,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -695,6 +714,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -716,19 +738,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -739,6 +748,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -749,6 +761,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -782,6 +797,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 @@ -798,6 +814,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 @@ -818,49 +835,49 @@ Max 2J for sampling of angular correlations 10 Total energy deposition in calorimeter : 3.5748134062361 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 1 - 21 hits are stored in RE05TrackerHitsCollection. - 8 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 4.6734817433016 (GeV) + 15 hits are stored in RE05TrackerHitsCollection. + 6 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 4.6734817428012 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 2 - 33 hits are stored in RE05TrackerHitsCollection. - 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 3.7029419169493 (GeV) + 34 hits are stored in RE05TrackerHitsCollection. + 5 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 5.1636544693669 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 3 - 35 hits are stored in RE05TrackerHitsCollection. + 5 hits are stored in RE05TrackerHitsCollection. 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 3.1530185371827 (GeV) + Total energy deposition in calorimeter : 3.6605590164036 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 4 - 5 hits are stored in RE05TrackerHitsCollection. - 5 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 3.5670912102456 (GeV) + 141 hits are stored in RE05TrackerHitsCollection. + 7 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 5.3788558772416 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 5 - 19 hits are stored in RE05TrackerHitsCollection. - 9 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 5.7763505803279 (GeV) + 8 hits are stored in RE05TrackerHitsCollection. + 6 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 3.7645759918068 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 6 - 46 hits are stored in RE05TrackerHitsCollection. - 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 3.1761886223465 (GeV) + 10 hits are stored in RE05TrackerHitsCollection. + 4 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 4.1945780335012 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 7 - 5 hits are stored in RE05TrackerHitsCollection. - 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 5.6583811393675 (GeV) + 12 hits are stored in RE05TrackerHitsCollection. + 4 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 3.1725947693521 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 8 - 5 hits are stored in RE05TrackerHitsCollection. - 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 3.7803961237203 (GeV) + 14 hits are stored in RE05TrackerHitsCollection. + 16 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 9.5027682535213 (GeV) 1 hits are stored in RE05MuonHitsCollection. >>> Event 9 - 5 hits are stored in RE05TrackerHitsCollection. + 19 hits are stored in RE05TrackerHitsCollection. 6 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 7.1710137462645 (GeV) + Total energy deposition in calorimeter : 4.955222508858 (GeV) 1 hits are stored in RE05MuonHitsCollection. Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/runAndEvent/RE06/exampleRE06.out b/examples/extended/runAndEvent/RE06/exampleRE06.out index 59ae4f0f7a..877e0c5a0b 100644 --- a/examples/extended/runAndEvent/RE06/exampleRE06.out +++ b/examples/extended/runAndEvent/RE06/exampleRE06.out @@ -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 @@ -30,23 +30,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", @@ -254,7 +255,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 ======== @@ -907,6 +908,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 @@ -923,6 +925,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 @@ -994,7 +997,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.540000s Real=0.995063s Sys=0.460000s + User=0.620000s Real=1.125040s Sys=0.510000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1002,124 +1005,124 @@ Region : Calor-A Production thresholds : gamma 1 mm e- 1 mm e+ 1 mm Energy deposition in an event : - Absorber 2.42169 GeV Gap 302.918 MeV + Absorber 2.70407 GeV Gap 337.831 MeV Number of secondaries in an event : - gamma in Absorber 556.3 in Gap 28.3 - e- in Absorber 939.1 in Gap 120 - e+ in Absorber 53.9 in Gap 1.9 + gamma in Absorber 711.6 in Gap 42 + e- in Absorber 1192.1 in Gap 145.5 + e+ in Absorber 72.5 in Gap 3.1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 101.833 keV in Gap 6.20089 keV - e- in Absorber 130.866 eV in Gap 165.969 eV - e+ in Absorber 11.3344 keV in Gap 7.84123 keV + gamma in Absorber 101.949 keV in Gap 6.20089 keV + e- in Absorber 130.866 eV in Gap 172.905 eV + e+ in Absorber 42.4147 keV in Gap 213.517 keV Total track length of e+/e- in an event : - Absorber 76.822 cm Gap 50.1492 cm + Absorber 96.7986 cm Gap 68.3906 cm Total number of steps of e+/e- in an event : - Absorber 2386.8 Gap 394.7 + Absorber 3013.6 Gap 473.1 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 2580.27 532.4 821.9 46.3 1126.55 2253.2 - 1 91.2453 33.6 150.5 6.1 89.9529 328.4 - 2 34.4061 13.7 57.2 2.8 32.0999 130.4 - 3 11.8643 3.7 17.4 0.5 14.1903 39.8 - 4 3.38482 0.6 5.1 0 4.34337 16.5 - 5 2.03521 0.5 3.9 0.1 1.34564 6.9 - 6 0.718482 0 1.2 0 0.461247 2.7 - 7 0.100751 0.1 0.6 0 0.225343 1.7 - 8 0.0361343 0 0.1 0 0.114935 0.2 - 9 0.013764 0 0.1 0 0.0210382 0.1 - 10 0.377102 0 0.5 0 0.298689 0.8 - 11 0.116515 0 0.6 0 0.105668 0.8 - 12 0.00713993 0 0 0 0 0 - 13 0.000722828 0 0 0 0 0 - 14 0.0043876 0 0 0 0 0 - 15 0.00278669 0 0 0 0 0 - 16 0.00836591 0 0 0 0 0 - 17 0.00447624 0 0 0 0 0 - 18 0.000987112 0 0 0 0 0 - 19 0.00469177 0 0 0 0 0 + 0 2850.78 678.6 1032.3 63 1448.01 2796.1 + 1 126.019 51.9 188.6 8.6 142.6 439.3 + 2 42.9854 16 75.3 2.7 39.8608 158.3 + 3 14.3064 4.4 25 0.6 15.0421 59.6 + 4 4.22226 1.6 9.3 0.5 3.32133 18 + 5 1.93061 0.7 3.6 0.1 1.259 8.5 + 6 1.17729 0.3 1.2 0.1 1.23967 3.3 + 7 0.219093 0.1 1.2 0 0.275677 1.8 + 8 0.163387 0 0.7 0 0.25233 1 + 9 0.00577226 0 0 0 0.00178371 0.2 + 10 0.0799026 0 0.4 0 0.0327993 0.6 + 11 0.00110093 0 0 0 0 0 + 12 7.78385e-05 0 0 0 0 0 + 13 0.000848143 0 0 0 0 0 + 14 0.0121606 0 0 0 0 0 + 15 1.71888e-05 0 0 0 0 0 + 16 0.000156085 0 0 0 0 0 + 17 0.000361168 0 0 0 0 0 + 18 0.000221478 0 0 0 0 0 + 19 0.000174818 0 0 0 0 0 ############################################################ Region : Calor-B Production thresholds : gamma 1 mm e- 1 mm e+ 1 mm Energy deposition in an event : - Absorber 2.95827 GeV Gap 369.904 MeV + Absorber 2.39823 GeV Gap 317.373 MeV Number of secondaries in an event : - gamma in Absorber 854 in Gap 54.9 - e- in Absorber 1429.2 in Gap 187.1 - e+ in Absorber 89.3 in Gap 2.9 + gamma in Absorber 542.7 in Gap 33.7 + e- in Absorber 920 in Gap 124.2 + e+ in Absorber 53.3 in Gap 2 Minimum kinetic energy of generated secondaries : - gamma in Absorber 101.828 keV in Gap 6.20705 keV - e- in Absorber 62.827 eV in Gap 119.169 eV - e+ in Absorber 2.38156 keV in Gap 380.659 keV + gamma in Absorber 101.809 keV in Gap 6.22502 keV + e- in Absorber 170.718 eV in Gap 107.631 eV + e+ in Absorber 16.6066 keV in Gap 461.763 keV Total track length of e+/e- in an event : - Absorber 1.14877 m Gap 82.3885 cm + Absorber 75.056 cm Gap 57.5007 cm Total number of steps of e+/e- in an event : - Absorber 3620.3 Gap 618 + Absorber 2361.2 Gap 435.3 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 3108.94 835.2 1227.6 79.2 1736.07 3394.8 - 1 146.017 50.6 245.4 9.1 159.13 531.2 - 2 44.8946 12.6 81.4 2.4 48.4299 177.2 - 3 16.2843 5.3 34.1 0.7 15.4472 78.2 - 4 5.30191 1.8 12.3 0.3 7.08338 23.4 - 5 2.0179 0.6 4.4 0.2 1.94811 9.9 - 6 1.3847 0.5 3 0 0.960561 7.7 - 7 0.838736 0.6 1.8 0.1 1.02795 3.5 - 8 0.422767 0 1.6 0 0.374688 2.2 - 9 0.475617 0.2 1.7 0 1.07563 3.8 - 10 0.143774 0 0.2 0 0.306198 0.9 - 11 0.550743 0.9 0.9 0.1 0.307846 1.8 - 12 0.272676 0.2 0.8 0.1 0.120862 1.5 - 13 0.289341 0.2 0.2 0 0.142694 0.7 - 14 0.036804 0 0 0 0 0 - 15 0.0180681 0 0 0 0 0 - 16 0.0568851 0 0.3 0 0.00900029 0.4 - 17 0.0423549 0.1 0.2 0 0.0396885 0.4 - 18 0.0570844 0 0.1 0 0.0172872 0.2 - 19 0.0107743 0 0 0 0 0 + 0 2566.32 518.6 795.3 45.3 1164.75 2239.5 + 1 105.056 43 159.9 7.8 111.24 364.3 + 2 25.5951 8.4 46.8 1.1 31.5297 101.7 + 3 9.20745 4.5 20.2 0.7 8.56591 42.7 + 4 4.877 0.8 10 0.2 4.74488 21.6 + 5 2.15542 0.8 4 0.2 1.60064 12.7 + 6 0.565136 0.1 2.2 0 0.722399 3.7 + 7 0.641893 0.1 2.1 0 0.347027 3.4 + 8 0.25314 0 1.1 0 0.284717 2 + 9 0.120573 0 0.4 0 0.300169 0.6 + 10 0.233876 0.1 0.3 0 0.167548 0.7 + 11 0.149204 0 0.5 0 0.100446 0.6 + 12 0.095167 0 0.7 0 0.0456664 0.9 + 13 0.0441171 0 0.4 0 0.0546666 0.5 + 14 0 0 0 0 0 0 + 15 0.0294934 0 0.1 0 0.0140905 0.3 + 16 8.41813e-05 0 0 0 0 0 + 17 0.000123824 0 0 0 0 0 + 18 0.250381 0 0.2 0 1.09765 1.3 + 19 0.00044772 0 0 0 0 0 ############################################################ Region : Calor-C Production thresholds : gamma 10 cm e- 10 cm e+ 10 cm Energy deposition in an event : - Absorber 7.09786 GeV Gap 687.757 MeV + Absorber 8.751 GeV Gap 847.942 MeV Number of secondaries in an event : - gamma in Absorber 1035.3 in Gap 116.9 - e- in Absorber 1864 in Gap 215.5 - e+ in Absorber 289.5 in Gap 12.6 + gamma in Absorber 1384.6 in Gap 148.3 + e- in Absorber 2468.3 in Gap 275.2 + e+ in Absorber 390.3 in Gap 14 Minimum kinetic energy of generated secondaries : - gamma in Absorber 260.431 keV in Gap 56.4763 keV - e- in Absorber 143.501 eV in Gap 144.427 eV - e+ in Absorber 3.46324 keV in Gap 56.2915 keV + gamma in Absorber 118.084 keV in Gap 56.5909 keV + e- in Absorber 109.656 eV in Gap 124.574 eV + e+ in Absorber 975.666 eV in Gap 281.431 keV Total track length of e+/e- in an event : - Absorber 3.01904 m Gap 2.0351 m + Absorber 4.04446 m Gap 2.80442 m Total number of steps of e+/e- in an event : - Absorber 5352.7 Gap 973.4 + Absorber 7138.1 Gap 1296.1 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 7170.19 1031.4 1437.2 256.2 4395.95 4748.1 - 1 405.767 83.4 383.9 31.2 436.629 965.6 - 2 131.098 23.6 150 9.3 144.113 365 - 3 50.9057 9 62 3.7 52.3869 143.5 - 4 15.0404 2.5 24 1 11.971 47 - 5 6.58612 0.9 8.8 0.3 7.7964 22.1 - 6 2.19211 0.4 4.5 0.3 1.6842 13.1 - 7 1.51931 0.3 1.9 0.1 1.45622 4.2 - 8 0.691316 0.5 1.5 0 0.537554 8.1 - 9 0.483281 0 0.9 0 0.326743 1.9 - 10 0.277488 0 1.4 0 0.109473 2.1 - 11 0.0679053 0 0.5 0 0.0221866 0.7 - 12 0.173357 0 0.7 0 0.108586 1.3 - 13 0.185184 0 0.4 0 0.683643 0.7 - 14 0.175893 0 0.7 0 0.158422 1.2 - 15 0.0706875 0 0.2 0 0.137136 0.2 - 16 0.0150955 0 0.1 0 0.000435554 0.2 - 17 0.00999203 0 0 0 0 0 - 18 0.00577292 0 0 0 0 0 - 19 0.0100291 0 0 0 0 0 + 0 8828.44 1388.6 1925.4 350.4 6030.67 6416.9 + 1 477.44 95.9 490.3 35.2 494.419 1193.8 + 2 177.955 28.7 179 11.5 186.535 449.6 + 3 64.4017 11.8 76.6 4.1 85.3648 198.1 + 4 23.3254 3.2 33.8 1.4 23.4107 85.3 + 5 15.6954 2.9 17.1 1.3 17.8865 45 + 6 4.56029 0.6 7.6 0.3 3.44897 14.2 + 7 2.69568 0.2 4.2 0 2.58738 12.2 + 8 1.20203 0 2.8 0 1.56313 4.6 + 9 0.784399 0.2 1.4 0.1 0.561756 2.1 + 10 0.0898057 0 0.6 0 0.0784377 0.8 + 11 0.311001 0 0.6 0 0.575846 1.2 + 12 0.342194 0.4 0.9 0 0.17089 1.5 + 13 0.520608 0 1.5 0 0.327777 1.9 + 14 0.350679 0.4 0.4 0 0.213531 0.6 + 15 0.31262 0 0.2 0 0.209469 0.6 + 16 0.00123551 0 0 0 0 0 + 17 0.123535 0 0.2 0 0.492155 0.4 + 18 0.105275 0 0.3 0 0.191893 4.6 + 19 0.128181 0 0.2 0 0.0950651 0.2 ############################################################ /run/dumpCouples @@ -1277,7 +1280,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=1.120000s Real=2.014252s Sys=0.900000s + User=0.550000s Real=0.979191s Sys=0.420000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1285,124 +1288,124 @@ Region : Calor-A Production thresholds : gamma 200 um e- 200 um e+ 200 um Energy deposition in an event : - Absorber 3.84392 GeV Gap 465.474 MeV + Absorber 2.83566 GeV Gap 347.838 MeV Number of secondaries in an event : - gamma in Absorber 1757 in Gap 100.4 - e- in Absorber 2900.5 in Gap 387.5 - e+ in Absorber 143.9 in Gap 5.1 + gamma in Absorber 1042.2 in Gap 56.6 + e- in Absorber 1802.1 in Gap 245.4 + e+ in Absorber 84.9 in Gap 2.9 Minimum kinetic energy of generated secondaries : - gamma in Absorber 47.474 keV in Gap 2.83783 keV - e- in Absorber 29.3256 eV in Gap 28.9408 eV - e+ in Absorber 4.99997 keV in Gap 62.1039 keV + gamma in Absorber 47.473 keV in Gap 2.83638 keV + e- in Absorber 14.3142 eV in Gap 147.645 eV + e+ in Absorber 7.13843 keV in Gap 219.875 keV Total track length of e+/e- in an event : - Absorber 1.90424 m Gap 1.3525 m + Absorber 1.15586 m Gap 76.1056 cm Total number of steps of e+/e- in an event : - Absorber 7221 Gap 1151.5 + Absorber 4411.5 Gap 705.8 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 3957.85 1684.5 2635.5 129.4 2860.46 6863.7 - 1 232.728 116.9 413.3 12.9 273.439 968.4 - 2 76.7977 37.4 145.9 4.3 78.7729 328.8 - 3 23.391 10 51.8 1.3 24.8084 114 - 4 10.4567 4.9 23.9 0.6 10.8817 54 - 5 4.2205 1.5 8.3 0.2 4.54518 18.1 - 6 1.36865 0.9 3.5 0.2 1.65301 10.3 - 7 1.02498 0.7 2.1 0.1 1.12978 9.2 - 8 0.691699 0.5 1.3 0 0.505418 2.6 - 9 0.428036 0.1 0.7 0 0.266878 1.2 - 10 0.12471 0 0.5 0 0.0726948 0.7 - 11 0.0946391 0 0.6 0 0.142306 0.8 - 12 0.0526746 0 0.3 0 0.0175067 0.3 - 13 0.024331 0 0.1 0 0.0349845 0.1 - 14 0.0590595 0 0.2 0 0.0112962 0.3 - 15 0.00547128 0 0 0 0 0 - 16 0.00654085 0 0 0 0 0 - 17 0.0171805 0 0 0 0 0 - 18 0.0240157 0 0 0 0 0 - 19 0.00764502 0 0 0 0 0 + 0 2963.1 989.8 1645.6 73.5 1659.94 4162.3 + 1 147.799 74.2 260.7 9.7 178.807 622.1 + 2 42.1445 19.9 79.5 2.6 46.9817 187.6 + 3 17.4205 9.1 35.4 1.1 18.4622 80.4 + 4 7.17398 2.5 14.2 0.5 7.39549 32.1 + 5 3.68765 2.1 6.5 0.3 3.66092 13.7 + 6 0.894966 0.7 2.7 0.1 0.747951 11.9 + 7 0.127011 0 0.7 0 0.0807241 0.9 + 8 0.214353 0 0.6 0 0.15626 3.2 + 9 0.0100934 0 0 0 0 0 + 10 0.00391631 0 0 0 0 0 + 11 0.00566392 0 0.1 0 0.00221507 0.1 + 12 0.0461113 0 0.2 0 0.03693 0.3 + 13 0.00106955 0 0 0 0 0 + 14 0.208522 0.1 0.6 0 0.156779 1 + 15 0.0195224 0 0 0 0 0 + 16 0.00269595 0 0 0 0 0 + 17 0.0431418 0 0.1 0 0.0173754 0.2 + 18 0.00109563 0 0 0 0 0 + 19 0.0563455 0 0.1 0 0.028964 0.2 ############################################################ Region : Calor-B Production thresholds : gamma 2 mm e- 2 mm e+ 2 mm Energy deposition in an event : - Absorber 8.08444 GeV Gap 857.842 MeV + Absorber 2.76229 GeV Gap 335.012 MeV Number of secondaries in an event : - gamma in Absorber 3498.1 in Gap 209.7 - e- in Absorber 5789.1 in Gap 616.1 - e+ in Absorber 409.2 in Gap 15.3 + gamma in Absorber 681.7 in Gap 36.2 + e- in Absorber 1140.7 in Gap 130.8 + e+ in Absorber 72.5 in Gap 2.4 Minimum kinetic energy of generated secondaries : - gamma in Absorber 16.0002 keV in Gap 8.70487 keV - e- in Absorber 73.7231 eV in Gap 114.614 eV - e+ in Absorber 2.02202 keV in Gap 12.1072 keV + gamma in Absorber 120.889 keV in Gap 8.72758 keV + e- in Absorber 141.983 eV in Gap 412.687 eV + e+ in Absorber 30.8724 keV in Gap 207.416 keV Total track length of e+/e- in an event : - Absorber 4.69068 m Gap 3.1447 m + Absorber 96.1739 cm Gap 62.8435 cm Total number of steps of e+/e- in an event : - Absorber 14596.1 Gap 2093.9 + Absorber 2905.4 Gap 464.7 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 7905.53 3332 4707.2 357.6 6689.31 12931.3 - 1 685.59 264.1 1068.7 45.3 754.141 2380.8 - 2 218.654 67.8 368.6 13 249.095 807.1 - 3 79.6316 28.4 148.4 5.5 83.5976 321.4 - 4 27.7347 8.1 57.4 1.7 31.9434 126.8 - 5 12.3319 3.7 23.9 0.6 13.7259 59.9 - 6 4.14562 1.5 9.4 0.4 4.14978 20.6 - 7 2.25199 0.4 6.8 0.1 1.70708 10.7 - 8 1.49989 0.3 3.6 0.1 1.10868 6.3 - 9 0.875425 0.2 2.7 0 1.05476 4.4 - 10 0.67684 0.2 1.2 0.1 1.37669 2.8 - 11 0.547241 0 1 0 0.375492 2.8 - 12 0.240573 0.1 1.1 0 0.272645 4.4 - 13 0.180987 0 1.1 0 0.266268 1.4 - 14 0.399726 0 0.4 0 0.285869 0.9 - 15 0.359575 0.2 0.6 0 0.685525 1.6 - 16 0.194484 0 0.3 0 0.415834 0.7 - 17 0.0650518 0 0.2 0 0.0683946 0.3 - 18 0.337613 0 0.8 0 0.232866 1 - 19 0.175892 0 0.3 0 0.705667 0.7 + 0 2920.15 658.7 973.3 64.5 1396.45 2683.6 + 1 117.29 41.1 190.2 7.5 129.991 448.5 + 2 39.0942 12.8 66.9 1.7 41.7315 153.9 + 3 13.2171 4 23.8 1.1 12.295 46.8 + 4 3.87248 0.9 9.5 0.1 3.53683 17.8 + 5 1.43015 0.3 3.4 0 2.90155 11.4 + 6 0.800517 0.1 1.3 0 0.775137 2.5 + 7 0.546051 0 1.8 0 1.35235 2.8 + 8 0.58345 0 0.9 0 0.987815 1.9 + 9 0.043697 0 0.2 0 0.0462441 0.3 + 10 0.00526182 0 0 0 0 0 + 11 0.015126 0 0 0 0 0 + 12 0.0137885 0 0 0 0 0 + 13 0.0220369 0 0 0 0 0 + 14 0.0200307 0 0 0 0 0 + 15 0.0174737 0 0 0 0 0 + 16 0.00685897 0 0 0 0 0 + 17 0.10166 0 0.2 0 0.0629398 0.2 + 18 0.061952 0 0 0 0.0384726 0.4 + 19 0.00642719 0 0 0 0 0 ############################################################ Region : Calor-C Production thresholds : gamma 2 cm e- 2 cm e+ 2 cm Energy deposition in an event : - Absorber 2.54453 GeV Gap 321.436 MeV + Absorber 3.54212 GeV Gap 416.691 MeV Number of secondaries in an event : - gamma in Absorber 322.1 in Gap 24.4 - e- in Absorber 605.6 in Gap 75.1 - e+ in Absorber 58 in Gap 2 + gamma in Absorber 691 in Gap 42.4 + e- in Absorber 1258.4 in Gap 147.7 + e+ in Absorber 116.7 in Gap 4.1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 334.804 keV in Gap 28.2137 keV - e- in Absorber 604.348 eV in Gap 551.06 eV - e+ in Absorber 37.012 keV in Gap 367.576 keV + gamma in Absorber 67.8494 keV in Gap 27.0563 keV + e- in Absorber 219.981 eV in Gap 160.68 eV + e+ in Absorber 2.71595 keV in Gap 407.467 keV Total track length of e+/e- in an event : - Absorber 63.0506 cm Gap 46.087 cm + Absorber 1.30854 m Gap 88.367 cm Total number of steps of e+/e- in an event : - Absorber 1522.6 Gap 281.7 + Absorber 3153.3 Gap 519.8 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 2727.64 313.7 472.9 51.3 933.386 1334.5 - 1 95.4862 25.6 130.9 6.3 115.485 308.9 - 2 24.9728 3.5 44.6 1.1 23.4405 87.1 - 3 10.2722 1.4 17.4 0.7 9.66982 38.9 - 4 5.04602 1.6 7.1 0.4 7.15918 17.1 - 5 1.47983 0.5 3.6 0.2 1.04648 6.4 - 6 0.582951 0.2 2.2 0 0.676506 5.5 - 7 0.0553151 0 0.6 0 0.0331421 0.7 - 8 0.113473 0 0.4 0 0.102399 0.6 - 9 0.0382176 0 0.5 0 0.0598195 0.8 - 10 0 0 0 0 0 0 - 11 0.144466 0 0.3 0 0.0744528 0.9 - 12 0 0 0 0 0 0 - 13 0.0119228 0 0 0 0 0 - 14 0.00635284 0 0 0 0 0 - 15 0 0 0 0 0 0 - 16 0.00274713 0 0 0 0 0 - 17 0.00380654 0 0 0 0 0 - 18 0.00598572 0 0 0 0 0 - 19 0.0277135 0 0.1 0 0.00652718 0.2 + 0 3659.65 665.3 981.1 102.2 1851.04 2711.2 + 1 190.897 45 257.5 12.1 219.624 575.2 + 2 64.2024 15 93.1 4.8 74.7189 223.3 + 3 24.7934 5.3 41.2 1.3 24.8479 90.5 + 4 8.74911 1.4 14.1 0 8.91146 31.9 + 5 4.29616 0.7 6.5 0.3 6.06486 13 + 6 1.29309 0 3.6 0 0.695292 5.7 + 7 1.12855 0.2 2.8 0.1 1.55253 8.9 + 8 1.77623 0.4 2.8 0 2.02816 5.6 + 9 0.388738 0 0.8 0 0.526416 1.6 + 10 0.0834162 0 0.3 0 0.0143209 0.4 + 11 0.242683 0.1 0.2 0 0.153981 0.5 + 12 0.145594 0 0.5 0 0.0867264 0.7 + 13 0.237011 0 0.6 0 0.237085 0.9 + 14 0.040348 0 0.2 0 0.00465136 0.3 + 15 0.120766 0 0.3 0 0.0552859 0.4 + 16 0.0101183 0 0 0 0 0 + 17 0.602465 0 0.1 0 1.32449 2.3 + 18 0.00203614 0 0 0 0 0 + 19 0.00197612 0 0 0 0 0 ############################################################ /run/dumpCouples @@ -1591,7 +1594,7 @@ Index : 12 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.120000s Real=0.224280s Sys=0.100000s + User=0.200000s Real=0.345383s Sys=0.150000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1599,124 +1602,124 @@ Region : Calor-A Production thresholds : gamma 200 um e- 200 um e+ 200 um Energy deposition in an event : - Absorber 608.196 MeV Gap 270.646 MeV + Absorber 575.777 MeV Gap 246.326 MeV Number of secondaries in an event : - gamma in Absorber 55.9 in Gap 14 - e- in Absorber 362.2 in Gap 181 - e+ in Absorber 1.9 in Gap 0.4 + gamma in Absorber 34.4 in Gap 7.4 + e- in Absorber 246.1 in Gap 134 + e+ in Absorber 1.1 in Gap 0.1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 3.35589 keV in Gap 1.56874 keV - e- in Absorber 124.26 eV in Gap 123.6 eV - e+ in Absorber 160.955 keV in Gap 18.0452 MeV + gamma in Absorber 3.25433 keV in Gap 1.55219 keV + e- in Absorber 126.613 eV in Gap 110.907 eV + e+ in Absorber 409.061 keV in Gap 4.46785 MeV Total track length of e+/e- in an event : - Absorber 52.8075 cm Gap 52.0575 cm + Absorber 34.4524 cm Gap 31.2791 cm Total number of steps of e+/e- in an event : - Absorber 706.8 Gap 382.7 + Absorber 489.6 Gap 273.3 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 818.375 56.3 299.4 1.3 864.642 683.8 - 1 36.0004 8.1 76 0.4 119.331 143.9 - 2 9.86892 2 49.4 0.2 26.9781 80 - 3 7.65975 2.7 35.4 0.4 23.1286 62.7 - 4 2.77331 0.2 25.9 0 5.67475 39.8 - 5 0.825943 0 19.5 0 1.01504 27 - 6 1.18126 0.3 13.1 0 2.05881 16.9 - 7 0.843504 0 5.9 0 2.59335 10.1 - 8 0.322087 0.2 7 0 0.44421 10 - 9 0.0676444 0 3.6 0 0.0306476 4.6 - 10 0.327275 0 1.7 0 1.57756 2.6 - 11 0.0309123 0 1.1 0 0.0193186 1.2 - 12 0.457483 0.1 0.9 0 1.09652 1.5 - 13 0.0205688 0 0.9 0 0.00661115 1.5 - 14 0.0650148 0 2.4 0 0.0439673 2.7 - 15 0.00947718 0 0.7 0 0.003327 0.8 - 16 0 0 0 0 0 0 - 17 0 0 0 0 0 0 - 18 0 0 0 0 0 0 - 19 0 0 0 0 0 0 + 0 764.391 34.4 244.3 0.6 577.87 546.1 + 1 13.9384 4.5 40.1 0.4 40.6603 73.2 + 2 5.79542 1.6 27.7 0.2 15.816 43.1 + 3 1.55797 0.1 15.6 0 4.47555 23.3 + 4 0.686927 0.1 11 0 1.02661 14.3 + 5 0.877866 0.1 12.2 0 1.58203 18.3 + 6 0.792711 0.2 7.6 0 1.64789 10.5 + 7 0.411212 0 3.5 0 0.766434 4.7 + 8 0.815051 0.3 2.7 0 2.9435 4.7 + 9 0.234954 0 2.8 0 0.338857 3.3 + 10 5.80045 0 2.7 0 1.38605 5.1 + 11 1.62293 0.1 1.9 0 4.06188 3.7 + 12 0.654533 0 1.5 0 1.64735 2.2 + 13 0.493855 0 1.8 0 1.05756 4.2 + 14 5.05067 0.2 1.2 0 0.353123 1.7 + 15 2.24204 0 0.9 0 0.00255921 0.9 + 16 0.215265 0 1.3 0 0.638846 1.7 + 17 0.169163 0 0.4 0 0.27243 0.7 + 18 1.09527 0 0.1 0 0.177734 0.2 + 19 3.50536 0.2 0.1 0 0.0542183 0.1 ############################################################ Region : Calor-B Production thresholds : gamma 2 mm e- 2 mm e+ 2 mm Energy deposition in an event : - Absorber 739.893 MeV Gap 315.147 MeV + Absorber 621.322 MeV Gap 274.466 MeV Number of secondaries in an event : - gamma in Absorber 73.8 in Gap 20.5 - e- in Absorber 367.7 in Gap 160.3 - e+ in Absorber 3.9 in Gap 0.9 + gamma in Absorber 43.3 in Gap 12 + e- in Absorber 233.2 in Gap 114.5 + e+ in Absorber 2.1 in Gap 0.7 Minimum kinetic energy of generated secondaries : - gamma in Absorber 9.5971 keV in Gap 3.99421 keV - e- in Absorber 100.083 eV in Gap 100.26 eV - e+ in Absorber 137.311 keV in Gap 758.405 keV + gamma in Absorber 9.84225 keV in Gap 4.11333 keV + e- in Absorber 101.333 eV in Gap 100.722 eV + e+ in Absorber 319.453 keV in Gap 4.332 MeV Total track length of e+/e- in an event : - Absorber 75.4908 cm Gap 71.4091 cm + Absorber 48.1563 cm Gap 49.3446 cm Total number of steps of e+/e- in an event : - Absorber 786.2 Gap 375.2 + Absorber 502.3 Gap 266.2 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 968.916 69.7 153.2 3.3 1229.15 571.6 - 1 33.7326 13.7 100 0.8 95.7972 175.8 - 2 18.8256 3.7 68 0.2 52.9851 108.1 - 3 12.6331 2.7 58.7 0.3 36.1202 88.4 - 4 10.3934 2.8 42.6 0.2 30.1007 65.4 - 5 3.19368 0.8 29.9 0 7.8269 46.2 - 6 2.35623 0.3 20.2 0 5.36009 30.2 - 7 0.871173 0 15.2 0 1.4167 18.5 - 8 0.967451 0.1 13.1 0 2.1366 18.7 - 9 1.93528 0.3 9 0 5.76937 14.6 - 10 0.19451 0 4.6 0 0.149811 6.5 - 11 0.167671 0 3.9 0 0.165557 4.6 - 12 0.234829 0 2.7 0 0.300632 3.2 - 13 0.0785538 0 1.5 0 0.0575466 1.6 - 14 0.0547539 0 2.1 0 0.030932 2.6 - 15 0.0070759 0 0.3 0 0.00224288 0.3 - 16 0.0230335 0 0.6 0 0.012212 0.6 - 17 0.28352 0.2 0.3 0 1.23291 1.4 - 18 0.00871783 0 0.7 0 0.00270047 1.1 - 19 0.160236 0 1.2 0 0.377934 1.8 + 0 818 39.4 99.9 1.3 746.796 372.4 + 1 39.4111 8.1 64.1 0.6 122.763 119.3 + 2 18.3631 5 53.9 0.6 54.5989 91.5 + 3 3.44326 0.6 35.6 0.1 6.65907 47.2 + 4 8.4111 1.1 27.6 0.2 23.57 43.3 + 5 3.88479 0.7 22.2 0 10.3705 34 + 6 0.965063 0.1 16.2 0 1.30842 20.9 + 7 0.821905 0.1 12.3 0 1.52561 15.9 + 8 0.512916 0 5.8 0 0.823926 8.3 + 9 0.562149 0 2.6 0 2.08018 4.5 + 10 0.134172 0 2 0 0.318204 2.6 + 11 0.057325 0 0.9 0 0.0331847 1.7 + 12 0.0882873 0 1.6 0 0.0903957 1.8 + 13 0.0823406 0 0.5 0 0.131977 0.6 + 14 0.0371493 0 0.2 0 0.0900934 0.4 + 15 0.259993 0.1 0.8 0 0.621535 1.6 + 16 0.0314221 0 0.6 0 0.0283921 0.6 + 17 0.0140535 0 0.3 0 0.00747123 0.4 + 18 0.000281842 0 0.1 0 2.82416e-05 0.1 + 19 0.00869693 0 0.4 0 0.00257629 0.5 ############################################################ Region : Calor-C Production thresholds : gamma 2 cm e- 2 cm e+ 2 cm Energy deposition in an event : - Absorber 554.95 MeV Gap 238.1 MeV + Absorber 1.1896 GeV Gap 530.828 MeV Number of secondaries in an event : - gamma in Absorber 16.1 in Gap 4.7 - e- in Absorber 104.4 in Gap 44.5 - e+ in Absorber 1 in Gap 0.3 + gamma in Absorber 162.3 in Gap 50.4 + e- in Absorber 764 in Gap 329.8 + e+ in Absorber 12.7 in Gap 3 Minimum kinetic energy of generated secondaries : - gamma in Absorber 29.4715 keV in Gap 11.3115 keV - e- in Absorber 113.317 eV in Gap 213.084 eV - e+ in Absorber 127.362 keV in Gap 1.41664 MeV + gamma in Absorber 28.2732 keV in Gap 10.6084 keV + e- in Absorber 114.882 eV in Gap 102.524 eV + e+ in Absorber 127.307 keV in Gap 174.899 keV Total track length of e+/e- in an event : - Absorber 21.9947 cm Gap 21.472 cm + Absorber 1.57928 m Gap 1.65443 m Total number of steps of e+/e- in an event : - Absorber 216.1 Gap 99.9 + Absorber 1484.2 Gap 687.1 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 762.971 15.8 33.1 0.8 354.935 128.3 - 1 10.7408 2.6 26.2 0.2 28.915 50.2 - 2 5.90965 0.8 20.8 0.1 17.2398 34.2 - 3 6.14448 0.8 16.7 0.1 17.6463 27.2 - 4 4.48029 0.6 19.1 0.1 9.98982 28.2 - 5 0.823136 0.1 11.8 0 2.05909 17.4 - 6 0.348168 0 4 0 0.442899 6.6 - 7 0.301383 0 5.5 0 0.585086 7.2 - 8 0.102101 0 1.9 0 0.141412 2.6 - 9 0.798325 0.1 2.6 0 1.99961 5 - 10 0.180387 0 2.4 0 0.248122 3.1 - 11 0.182263 0 3.3 0 0.385687 4.2 - 12 0.0565773 0 1 0 0.0730827 1 - 13 2.00106e-10 0 0.1 0 2e-10 0.1 - 14 0.00409616 0 0.1 0 0.00184329 0.3 - 15 0 0 0 0 0 0 - 16 0 0 0 0 0 0 - 17 0 0 0 0 0 0 - 18 0.00862973 0 0.3 0 0.00406043 0.4 - 19 0 0 0 0 0 0 + 0 1531.94 176.9 264.7 12.9 2705.92 873 + 1 106.344 22.9 231.8 1.6 320.181 404.5 + 2 32.5403 6.5 179.5 0.4 86.5132 289.7 + 3 20.0802 2.5 129.8 0.2 49.2776 185.4 + 4 10.7408 1.5 83.4 0.4 29.7205 128 + 5 6.20689 1.2 61.7 0.1 14.8886 86.8 + 6 3.76655 0.6 44.2 0 7.72238 61.6 + 7 1.79242 0 31.5 0 2.32748 46.3 + 8 1.24356 0.1 22.2 0 2.32407 31 + 9 0.814645 0 13.3 0 1.14151 18.7 + 10 2.66915 0.4 9.6 0.1 8.35209 14.2 + 11 0.493277 0.1 8.1 0 0.57284 10.5 + 12 0.498615 0 4.6 0 1.62982 6.4 + 13 0.270022 0 2.1 0 0.931885 4.8 + 14 0.136728 0 0.9 0 0.187154 1.4 + 15 0.36038 0 1.2 0 0.840519 2 + 16 0.0352882 0 1.9 0 0.014608 2.1 + 17 0.197701 0 0.8 0 0.419855 1.5 + 18 0.167776 0 1.8 0 0.417066 2.2 + 19 0.110245 0 0.4 0 0.316966 0.8 ############################################################ /run/dumpCouples @@ -1934,7 +1937,7 @@ Index : 12 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.210000s Real=0.387092s Sys=0.170000s + User=0.270000s Real=0.470357s Sys=0.200000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1942,40 +1945,40 @@ Region : Calor-A Production thresholds : gamma 10 um e- 10 um e+ 10 um Energy deposition in an event : - Absorber 510.625 MeV Gap 233.201 MeV + Absorber 606.163 MeV Gap 266.975 MeV Number of secondaries in an event : - gamma in Absorber 38.8 in Gap 11.4 - e- in Absorber 876.1 in Gap 905.5 - e+ in Absorber 0.7 in Gap 0.2 + gamma in Absorber 66.6 in Gap 19 + e- in Absorber 1119.2 in Gap 1057.5 + e+ in Absorber 2.7 in Gap 0.6 Minimum kinetic energy of generated secondaries : - gamma in Absorber 1.01847 keV in Gap 1.02631 keV - e- in Absorber 11.5567 eV in Gap 196.441 eV - e+ in Absorber 372.879 keV in Gap 1.2134 MeV + gamma in Absorber 994.818 eV in Gap 998.836 eV + e- in Absorber 386.423 meV in Gap 152.645 eV + e+ in Absorber 295.231 keV in Gap 232.935 keV Total track length of e+/e- in an event : - Absorber 31.6662 cm Gap 33.8659 cm + Absorber 55.6217 cm Gap 52.4239 cm Total number of steps of e+/e- in an event : - Absorber 1262.2 Gap 1262.2 + Absorber 1750.3 Gap 1583.8 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 711.208 41.3 1614.1 0.3 551.683 2223.5 - 1 14.8852 3.5 58.1 0.2 49.6525 110.9 - 2 9.55605 3.1 39.4 0.2 30.7959 78.3 - 3 1.66472 0.2 20.6 0 3.66742 30.1 - 4 0.849207 0.1 13.6 0 1.38731 19 - 5 0.890677 0.1 9.2 0 3.40972 14.3 - 6 0.168755 0 3.4 0 0.179859 5.3 - 7 0.091003 0 2.6 0 0.0621448 3 - 8 2.35649 1.1 8.2 0.2 9.51429 17.3 - 9 0.487692 0 3.5 0 0.994889 5.7 - 10 1.34448 0.8 3.6 0 3.40889 9 - 11 0.119288 0 1.2 0 0.314249 1.9 - 12 0.0523241 0 0.6 0 0.100011 1 - 13 0.0912935 0 0.9 0 0.121939 1.6 - 14 0.0275297 0 1.1 0 0.0122107 1.3 - 15 0.0196972 0 1 0 0.0118705 1.2 - 16 0.0112293 0 0.3 0 0.00446319 0.8 - 17 0.00160243 0 0.2 0 0.000356861 0.2 + 0 801.631 65.4 1798 1.8 855.953 2670.1 + 1 38.4627 11.6 143.5 0.8 126.761 275.7 + 2 20.1441 5.1 92.9 0.4 62.6187 174.2 + 3 5.56859 1.8 48.1 0.2 16.4842 75 + 4 1.47068 0.3 28.6 0.1 2.83095 40.4 + 5 2.38754 0.8 20.7 0 7.21028 32.6 + 6 0.653013 0.2 11.4 0 1.32667 14.7 + 7 0.820385 0.2 7.9 0 1.76127 12.9 + 8 0.693419 0 9.7 0 1.13998 12.7 + 9 0.267111 0 3.4 0 0.582186 7 + 10 0.648886 0.1 5.2 0 3.182 8.9 + 11 0.207036 0 2.2 0 0.404439 3.3 + 12 0.0713958 0 2 0 0.111104 2.5 + 13 0.0122014 0 0.4 0 0.00780025 0.8 + 14 0.01894 0 1.1 0 0.00765056 1.4 + 15 0.0803049 0.1 1.6 0 0.075067 1.9 + 16 0 0 0 0 0 0 + 17 0 0 0 0 0 0 18 0 0 0 0 0 0 19 0 0 0 0 0 0 ############################################################ @@ -1983,83 +1986,83 @@ Region : Calor-B Production thresholds : gamma 100 um e- 100 um e+ 100 um Energy deposition in an event : - Absorber 541.9 MeV Gap 239.191 MeV + Absorber 567.191 MeV Gap 247.323 MeV Number of secondaries in an event : - gamma in Absorber 36.2 in Gap 11.2 - e- in Absorber 325.7 in Gap 179.5 - e+ in Absorber 0.9 in Gap 0.6 + gamma in Absorber 46.8 in Gap 11.6 + e- in Absorber 380 in Gap 205.3 + e+ in Absorber 2.2 in Gap 0 Minimum kinetic energy of generated secondaries : - gamma in Absorber 2.40503 keV in Gap 1.18173 keV - e- in Absorber 119.16 eV in Gap 146.118 eV - e+ in Absorber 370.199 keV in Gap 3.94281 MeV + gamma in Absorber 2.34352 keV in Gap 1.16739 keV + e- in Absorber 137.678 eV in Gap 125.4 eV + e+ in Absorber 343.904 keV in Gap 2.88022e+295 J Total track length of e+/e- in an event : - Absorber 37.5745 cm Gap 35.6307 cm + Absorber 43.7138 cm Gap 39.6934 cm Total number of steps of e+/e- in an event : - Absorber 601.6 Gap 343.8 + Absorber 709.2 Gap 399.8 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 752.112 40.9 367.1 1 649.87 728.2 - 1 18.1804 4.5 39 0.3 59.4319 76.9 - 2 4.29336 0.9 30.7 0.1 9.31145 46.1 - 3 1.23788 0.1 20.4 0 2.45292 26.4 - 4 0.793337 0.2 12.3 0 1.40886 16.9 - 5 0.727625 0.2 8.1 0 1.31132 11.3 - 6 1.44078 0.1 9.5 0 3.06443 12.6 - 7 0.410863 0.1 4.7 0 0.733444 6.8 - 8 0.587051 0 5 0 1.64125 7.1 - 9 0.129322 0.1 2 0 0.170959 2.9 - 10 0.377001 0.2 1.9 0 1.05757 3.2 - 11 0.345705 0.1 1.6 0.1 0.706984 3.2 - 12 0.362561 0 1.5 0 0.809468 2 - 13 0.0594071 0 0.8 0 0.0616228 0.8 - 14 0.0162491 0 0.3 0 0.0108237 0.6 - 15 0 0 0 0 0 0 - 16 0 0 0 0 0 0 + 0 781.503 50 400.5 1.9 745.269 820.6 + 1 13.2575 3.9 53 0.1 37.4332 89.7 + 2 8.46213 2.1 39 0 22.9913 63 + 3 3.73733 0.9 28.9 0.1 8.45938 43.8 + 4 0.912075 0.1 19.5 0 1.18745 26.1 + 5 2.52632 0.8 11.8 0 7.37214 19.6 + 6 0.597819 0.1 7.8 0 0.835391 10 + 7 1.73323 0.1 7.9 0.1 6.70692 12.1 + 8 0.430983 0.3 5.4 0 1.12051 7.3 + 9 0.348034 0 3.4 0 0.767832 4.5 + 10 0.442103 0 2.2 0 0.990039 4.2 + 11 0.287719 0.1 3 0 0.570979 4.2 + 12 0.12142 0 1.3 0 0.206878 1.6 + 13 0.0165188 0 0.2 0 0.0116574 0.4 + 14 0.0109927 0 0.2 0 0.0166068 0.2 + 15 0.0452321 0 0.5 0 0.0570681 0.8 + 16 0.00525868 0 0 0 0.00456925 0.2 17 0 0 0 0 0 0 - 18 0.00330086 0 0.1 0 0.00205198 0.1 - 19 0.0145283 0 0.2 0 0.00802342 0.3 + 18 0.0252881 0 0.2 0 0.0232185 0.2 + 19 0.0152968 0 0.1 0 0.0140335 0.1 ############################################################ Region : Calor-C Production thresholds : gamma 1 mm e- 1 mm e+ 1 mm Energy deposition in an event : - Absorber 731.906 MeV Gap 312.913 MeV + Absorber 698.185 MeV Gap 314.382 MeV Number of secondaries in an event : - gamma in Absorber 77.8 in Gap 21.2 - e- in Absorber 436.7 in Gap 188.1 - e+ in Absorber 4.9 in Gap 0.8 + gamma in Absorber 67.8 in Gap 18.5 + e- in Absorber 360.1 in Gap 168 + e+ in Absorber 4.6 in Gap 0.8 Minimum kinetic energy of generated secondaries : - gamma in Absorber 6.92739 keV in Gap 3.2755 keV - e- in Absorber 102.336 eV in Gap 101.698 eV - e+ in Absorber 143.694 keV in Gap 2.6419 MeV + gamma in Absorber 6.96267 keV in Gap 3.06525 keV + e- in Absorber 104.976 eV in Gap 114.095 eV + e+ in Absorber 191.702 keV in Gap 1.26354 MeV Total track length of e+/e- in an event : - Absorber 77.8674 cm Gap 71.852 cm + Absorber 64.7581 cm Gap 60.0443 cm Total number of steps of e+/e- in an event : - Absorber 917.1 Gap 436.2 + Absorber 764.8 Gap 388.1 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 942.81 73.4 202.2 3.7 1201.53 654.7 - 1 63.9756 18.9 121.7 1.2 198.025 250.6 - 2 15.2508 3.3 83.4 0.4 45.2253 139.2 - 3 9.50328 1.9 69.6 0.3 26.1341 101.3 - 4 2.83396 0 43.7 0 4.13875 60.7 - 5 2.10473 0.2 28.2 0 3.56547 42.4 - 6 2.19998 0.3 25.2 0.1 3.76041 34.6 - 7 1.51154 0.2 16.1 0 3.54783 22.1 - 8 1.51961 0.3 13.7 0 3.10899 18.3 - 9 2.21893 0.4 7.8 0 6.87701 11.6 - 10 0.415969 0.1 4.9 0 0.660756 6.8 - 11 0.0997394 0 2.8 0 0.0669837 4.1 - 12 0.162904 0 1.9 0 0.23258 2.1 - 13 0.0425091 0 1.2 0 0.0237488 1.7 - 14 0.12772 0 0.8 0 0.252074 1.1 - 15 0.000444056 0 0.1 0 6.10673e-05 0.3 - 16 0.00663893 0 0.5 0 0.00198153 0.6 - 17 0 0 0 0 0 0 - 18 0 0 0 0 0 0 - 19 0 0 0 0 0 0 + 0 869.246 55.6 162.5 2.5 931.446 538.1 + 1 53.6053 11.7 89.9 0.8 127.983 163 + 2 28.5714 7.3 70.9 0.7 68.73 121.9 + 3 9.02162 1.9 48.3 0.3 28.5598 76.5 + 4 9.77999 2.4 37.8 0.3 27.2344 62.7 + 5 10.5435 1.6 28.8 0.2 20.0328 46.5 + 6 8.64256 1.8 23.1 0.1 22.5607 39.3 + 7 1.79536 0.4 16.8 0 3.41375 24.1 + 8 1.10326 0.1 12.6 0 1.84577 16.7 + 9 2.22267 0.4 5.9 0.2 4.99711 12.9 + 10 0.605731 0.1 5.5 0 1.24799 12 + 11 0.121493 0 5 0 0.0675938 7.1 + 12 2.0792 0.7 4 0.1 2.18219 6.4 + 13 4.11296 0.5 3 0.1 3.09519 5.6 + 14 0.0673716 0 1.4 0 0.0414427 2.3 + 15 0.67562 0 1.7 0 1.4409 3.9 + 16 1.70864 0.3 1.5 0 0.492992 1.9 + 17 2.63045 0.3 1.8 0 0.385472 2.4 + 18 2.05144 0.2 2.1 0 0.958647 2.9 + 19 2.31859 0 1.5 0 0.0275319 1.6 ############################################################ /run/dumpCouples diff --git a/examples/extended/runAndEvent/RE07/processes.out b/examples/extended/runAndEvent/RE07/processes.out index a811a6d153..d55ae1cdba 100644 --- a/examples/extended/runAndEvent/RE07/processes.out +++ b/examples/extended/runAndEvent/RE07/processes.out @@ -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 diff --git a/examples/extended/runAndEvent/RE07/specialized.out b/examples/extended/runAndEvent/RE07/specialized.out index 3aa8f86067..999da98021 100644 --- a/examples/extended/runAndEvent/RE07/specialized.out +++ b/examples/extended/runAndEvent/RE07/specialized.out @@ -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 diff --git a/examples/extended/runAndEvent/RE07/tracking.out b/examples/extended/runAndEvent/RE07/tracking.out index 6de7e3fa3c..f7bf544d4c 100644 --- a/examples/extended/runAndEvent/RE07/tracking.out +++ b/examples/extended/runAndEvent/RE07/tracking.out @@ -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 diff --git a/examples/extended/visualization/movies/movies.out b/examples/extended/visualization/movies/movies.out index 5e0e68eb31..7c3c543c5e 100644 --- a/examples/extended/visualization/movies/movies.out +++ b/examples/extended/visualization/movies/movies.out @@ -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 @@ -30,23 +30,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", @@ -162,7 +163,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 ======== @@ -815,6 +816,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 @@ -831,6 +833,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 diff --git a/examples/extended/visualization/userVisAction/userVisAction.out b/examples/extended/visualization/userVisAction/userVisAction.out index 396042fa1c..5ec8a67ba6 100644 --- a/examples/extended/visualization/userVisAction/userVisAction.out +++ b/examples/extended/visualization/userVisAction/userVisAction.out @@ -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 @@ -29,23 +29,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", @@ -97,6 +98,7 @@ Checking overlaps for volume Shape2:0 (G4Trd) ... OK! Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -124,7 +126,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 ======== @@ -537,6 +539,20 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) +----------------------------------------------------------------------- + Hadronic Processes for neutron + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nKiller ----------------------------------------------------------------------- Hadronic Processes for B- Process: hadElastic @@ -687,6 +703,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for kaon- Process: hadElastic @@ -696,6 +715,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: FTFP: 3 GeV ---> 100 TeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + Process: kaon-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for lambda @@ -717,19 +739,6 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV Process: muMinusCaptureAtRest ------------------------------------------------------------------------ - Hadronic Processes for neutron - Process: hadElastic - Model: hElasticCHIPS: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV - Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV - Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV - Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi+ Process: hadElastic @@ -740,6 +749,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi+ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV ----------------------------------------------------------------------- Hadronic Processes for pi- Process: hadElastic @@ -750,6 +762,9 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Model: BertiniCascade: 1 GeV ---> 12 GeV Model: Binary Cascade: 0 eV ---> 1.5 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + Process: pi-ChargeEx + Model: ChargeExchange: 0 eV ---> 100 TeV + Cr_sctns: : 0 eV ---> 100 TeV Process: hBertiniCaptureAtRest ----------------------------------------------------------------------- Hadronic Processes for proton @@ -783,6 +798,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 @@ -799,6 +815,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 @@ -843,7 +860,7 @@ Max 2J for sampling of angular correlations 10 --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Dose in scoring volume : 5.1095 nanoGy +- 146.776 picoGy + Dose in scoring volume : 5.17549 nanoGy +- 147.903 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/packaging/rpm/geant4.spec b/packaging/rpm/geant4.spec index 9bef8f8bbf..4b3cbbae9e 100644 --- a/packaging/rpm/geant4.spec +++ b/packaging/rpm/geant4.spec @@ -1,7 +1,7 @@ -%global geant4_version 11.3.2 +%global geant4_version 11.4.0-beta %global NEUTRONHPDATA G4NDL.4.7.1 -%global LEDATA G4EMLOW.8.6.1 +%global LEDATA G4EMLOW.8.7 %global LEVELGAMMADATA G4PhotonEvaporation.6.1 %global RADIOACTIVEDATA G4RadioactiveDecay.6.1.2 %global PARTICLEXSDATA G4PARTICLEXS.4.1 @@ -264,6 +264,9 @@ tar xzf %{SOURCE15} -C %{buildroot}/%{_datadir}/%{name}/data %endif %changelog +* Thu Jun 26 2025 Gabriele Cosmo - 11.4.0-b +- Update to version 11.4.0-beta + * Fri Apr 25 2025 Gabriele Cosmo - 11.3.2 - Update to version 11.3.2 diff --git a/source/analysis/History b/source/analysis/History index 94b1b4727a..0e6d482fab 100644 --- a/source/analysis/History +++ b/source/analysis/History @@ -6,11 +6,19 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-14 I. Hrivnacova (analysis-V11-02-09) +## 2025-05-05 I. Hrivnacova (analysis-V11-03-03) +- New implementation of generic 'G4Analysis::GetHnType()'' and 'IsProfile()' functions + which does not rely on the histogram/profile name position in the long + type name provided via tools 's_class()' + +## 2025-03-21 Ben Morgan (analysis-V11-03-02) +- Modernize g4tools macro-based for loops with range-based for + +## 2025-03-14 I. Hrivnacova (analysis-V11-03-01) - Removed false warnings about non-existing ntuple and debug messages when filling inactivated ntuple -## 2025-01-09 Ben Morgan +## 2025-01-09 Ben Morgan (analysis-V11-03-00) - Qualify use of `G4Accumulables` namespace to avoid clashes and order dependence of inclusion of headers. @@ -968,7 +976,7 @@ May 4, 2016 I. Hrivnacova (analysis-V10-02-02) April 18, 2016 I. Hrivnacova (analysis-V10-02-01) - Updated to g4tools 1.27.0 (Guy Barrand): Fixed incompatibility with ROOT 5.x and 6.x formats reported in ROOT forum: - https://root.cern.ch/phpBB3/viewtopic.php?t=21315 + https://root.cern/phpBB3/viewtopic.php?t=21315 December 8, 2015 I. Hrivnacova (analysis-V10-02-00) - Fixed definition of /analysis/ntuple command directory diff --git a/source/analysis/History.fix-auto b/source/analysis/History.fix-auto index 4916cab5c4..b01428112a 100644 --- a/source/analysis/History.fix-auto +++ b/source/analysis/History.fix-auto @@ -679,7 +679,7 @@ May 4, 2016 I. Hrivnacova (analysis-V10-02-02) April 18, 2016 I. Hrivnacova (analysis-V10-02-01) - Updated to g4tools 1.27.0 (Guy Barrand): Fixed incompatibility with ROOT 5.x and 6.x formats reported in ROOT forum: - https://root.cern.ch/phpBB3/viewtopic.php?t=21315 + https://root.cern/phpBB3/viewtopic.php?t=21315 December 8, 2015 I. Hrivnacova (analysis-V10-02-00) - Fixed definition of /analysis/ntuple command directory diff --git a/source/analysis/hntools/src/G4PlotManager.cc b/source/analysis/hntools/src/G4PlotManager.cc index b615271e61..4fb5bb4a9e 100644 --- a/source/analysis/hntools/src/G4PlotManager.cc +++ b/source/analysis/hntools/src/G4PlotManager.cc @@ -46,8 +46,7 @@ namespace { void HD_style(tools::sg::plots& a_plots,float a_line_width) { std::vector plotters; a_plots.plotters(plotters); - tools_vforcit(tools::sg::plotter*,plotters,it) { - tools::sg::plotter* _plotter = *it; + for (auto* _plotter : plotters) { _plotter->bins_style(0).line_width = a_line_width; _plotter->inner_frame_style().line_width = a_line_width; _plotter->grid_style().line_width = a_line_width; @@ -105,9 +104,7 @@ void regions_style(tools::sg::plots& a_plots,float a_plotter_scale = 1) { std::vector plotters; a_plots.plotters(plotters); - tools_vforcit(tools::sg::plotter*,plotters,it) { - tools::sg::plotter* _plotter = *it; - + for (auto* _plotter : plotters) { _plotter->left_margin = _plotter->left_margin * wfac; _plotter->right_margin = _plotter->right_margin * wfac; _plotter->bottom_margin = _plotter->bottom_margin * hfac; @@ -121,7 +118,6 @@ void regions_style(tools::sg::plots& a_plots,float a_plotter_scale = 1) { _plotter->x_axis().label_height = _plotter->x_axis().label_height * hfac * label_cooking; _plotter->y_axis().label_height = _plotter->y_axis().label_height * hfac * label_cooking; - } } diff --git a/source/analysis/management/include/G4AnalysisUtilities.hh b/source/analysis/management/include/G4AnalysisUtilities.hh index d49b1815a9..4828d7103a 100644 --- a/source/analysis/management/include/G4AnalysisUtilities.hh +++ b/source/analysis/management/include/G4AnalysisUtilities.hh @@ -93,7 +93,16 @@ G4String GetHnType() G4String hnTypeLong = HT::s_class(); // tools::histo::h1d -> h1 etc. - return hnTypeLong.substr(14, 2); + std::size_t lastColon = hnTypeLong.rfind(":"); + if (lastColon != G4String::npos && lastColon + 1 < hnTypeLong.length()) { + G4String potentialType = hnTypeLong.substr(lastColon + 1); + if (potentialType.length() >= 2 && + (potentialType.substr(0, 1) == "h" || potentialType.substr(0, 1) == "p")) { + return potentialType.substr(0, 2); + } + } + G4cerr << "Warning: Could not extract short hnType for " << hnTypeLong << G4endl; + return ""; } template @@ -101,9 +110,9 @@ G4bool IsProfile() { // tools::histo::h1d etc. G4String hnTypeLong = HT::s_class(); - - // tools::histo::h1d -> h1 etc. - return hnTypeLong[14] == 'p'; + std::size_t length = hnTypeLong.length(); + return (length >= 3 && hnTypeLong.substr(length - 3) == "p1d") || + (length >= 3 && hnTypeLong.substr(length - 3) == "p2d"); } // String conversion diff --git a/source/analysis/root/src/G4RootPNtupleManager.cc b/source/analysis/root/src/G4RootPNtupleManager.cc index 808bc90394..05fab8d51a 100644 --- a/source/analysis/root/src/G4RootPNtupleManager.cc +++ b/source/analysis/root/src/G4RootPNtupleManager.cc @@ -179,8 +179,8 @@ void G4RootPNtupleManager::CreateNtupleFromMain( } else { std::vector basketSizes; - tools_vforcit(tools::wroot::branch*, ntupleDescription->GetMainBranches(), it) { - basketSizes.push_back((*it)->basket_size()); + for (const auto* branch : ntupleDescription->GetMainBranches()) { + basketSizes.push_back(branch->basket_size()); } auto basketEntries = fMainNtupleManager->GetBasketEntries(); diff --git a/source/event/History b/source/event/History index 4e52733cb3..7b57b7bdd6 100644 --- a/source/event/History +++ b/source/event/History @@ -6,7 +6,7 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-13 Gabriele Cosmo (event-V11-02-10) +## 2025-02-13 Gabriele Cosmo (event-V11-03-00) - Fixed cut&paste error in G4StackManager::TransferStackedTracks(..), reported by Coverity. diff --git a/source/externals/clhep/History b/source/externals/clhep/History index b962ad38a4..6e0619dc02 100644 --- a/source/externals/clhep/History +++ b/source/externals/clhep/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-04 Gabriele Cosmo (clhep-V11-02-00) +## 2025-02-04 Gabriele Cosmo (clhep-V11-03-00) - Properly export static symbols in RandFlat for DLL build support on Windows. ## 2023-10-13 Gabriele Cosmo (clhep-V11-01-03) diff --git a/source/externals/g4tools/History b/source/externals/g4tools/History index 1c7a0594d4..038e8e4b1d 100644 --- a/source/externals/g4tools/History +++ b/source/externals/g4tools/History @@ -6,7 +6,39 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-07 Gabriele Cosmo (g4tools-V11-02-06) +## 2025-06-17 Guy Barrand (g4tools-V11-03-04) +- toolx/Qt/glarea: bug: Qt5: in mouseMoveEvent() for Qt5, correct a bad cut/paste when creating the + mouse_move_event (instead of "x,shift,control,y" have "x,y,shift,control"). +- tools/version: pass to 6.5.1 + +## 2025-06-16 Guy Barrand (g4tools-V11-03-03) +- tools/sg/event: have a new position_modifiers class to handle the shift, control key modifiers and mouse position. + It is inherited by mouse_[down,up,move]_event and the wheel_rotate_event class. +- toolx/Qt,Windows/glarea,pixwin, toolx/Xt/[sg,zb]_viewer, toolx/X11/zb_viewer: handle the shift and control + modifiers in the mouse_[down,up,move]_event and wheel_rotation_event. +- tools/version: pass to 6.5.0 + +## 2025-06-06 Guy Barrand (g4tools-V11-03-02) +- tools/rroot/ntuple: fix bugzilla 2657: in initialize(), line 708, pass the message from + "warning" to "error" and "return false" if the name of a booking column is not found in the file. +- tools/rcsv_ntuple: initialize(read with binding): check if given binding variables names are in the read from file column names. + If not, return an error; then have the same behaviour than for root ntuple reading with binding. +- tools/hdf5/ntuple: initialize(read with binding): check if given binding variables names are in the read from file column names. + If not, return an error; then have the same behaviour than for root ntuple reading with binding. +- tools/version: pass to 6.4.1. + +## 2025-06-02 Guy Barrand (g4tools-V11-03-01) +- toolx/Qt,Windows,Xt,X11/sg_viewer and zb_viewer: implement window_size, and render_area_size methods. + (These may return different sizes, for example with Qt/OpenGL on Mac and Windows). +- tools/offscreen/sg_viewer: implement window_size, and render_area_size methods. +- tools/sg/event: handle the mouse position in the wheel_rotate_event class. +- toolx/Qt/glarea,pixwin: set the mouse position in the wheel_rotation_event. +- toolx/Windows/glarea,pixwin: set the mouse position in the wheel_rotation_event. +- toolx/Xt/sg_viewer: set the mouse position in the wheel_rotation_event. +- toolx/X11/zb_viewer: set the mouse position in the wheel_rotation_event. +- tools/version: pass to 6.4.0 + +## 2025-04-07 Gabriele Cosmo (g4tools-V11-03-00) - Fixed compilation errors on Windows in glarea header, triggered when enabling GL WIN32 support, as reported in problem report #2599. diff --git a/source/externals/g4tools/History_tools b/source/externals/g4tools/History_tools index fe115efd4e..cc53c8a06e 100644 --- a/source/externals/g4tools/History_tools +++ b/source/externals/g4tools/History_tools @@ -1,3 +1,35 @@ +6.5.1: +- toolx/Qt/glarea: bug: Qt5: in mouseMoveEvent() for Qt5, correct a bad cut/paste when creating the + mouse_move_event (instead of "x,shift,control,y" have "x,y,shift,control"). +- tools/version: pass to 6.5.1 + +6.5.0: +- tools/sg/event: have a new position_modifiers class to handle the shift, control key modifiers and mouse position. + It is inherited by mouse_[down,up,move]_event and the wheel_rotate_event class. +- toolx/Qt,Windows/glarea,pixwin, toolx/Xt/[sg,zb]_viewer, toolx/X11/zb_viewer: handle the shift and control + modifiers in the mouse_[down,up,move]_event and wheel_rotation_event. +- tools/version: pass to 6.5.0 + +6.4.1: +- tools/rroot/ntuple: fix Geant4 bugzilla 2657: in initialize(), line 708, pass the message from + "warning" to "error" and "return false" if the name of a booking column is not found in the file. +- tools/rcsv_ntuple: initialize(read with binding): check if given binding variables names are in the read from file column names. + If not, return an error; then have the same behaviour than for root ntuple reading with binding. +- tools/hdf5/ntuple: initialize(read with binding): check if given binding variables names are in the read from file column names. + If not, return an error; then have the same behaviour than for root ntuple reading with binding. +- tools/version: pass to 6.4.1. + +6.4.0: +- toolx/Qt,Windows,Xt,X11/sg_viewer and zb_viewer: implement window_size, and render_area_size methods. + (These may return different sizes, for example with Qt/OpenGL on Mac and Windows). +- tools/offscreen/sg_viewer: implement window_size, and render_area_size methods. +- tools/sg/event: handle the mouse position in the wheel_rotate_event class. +- toolx/Qt/glarea,pixwin: set the mouse position in the wheel_rotation_event. +- toolx/Windows/glarea,pixwin: set the mouse position in the wheel_rotation_event. +- toolx/Xt/sg_viewer: set the mouse position in the wheel_rotation_event. +- toolx/X11/zb_viewer: set the mouse position in the wheel_rotation_event. +- tools/version: pass to 6.4.0 + 6.3.3: - wroot/file: in compress_buffer(): to fix bugzilla-2625: arrange to have a greater output buffer size when using deflate(), and check at end, that in case of some diff --git a/source/externals/g4tools/include/tools/offscreen/sg_viewer b/source/externals/g4tools/include/tools/offscreen/sg_viewer index 496dd460cf..8dac7a9c90 100644 --- a/source/externals/g4tools/include/tools/offscreen/sg_viewer +++ b/source/externals/g4tools/include/tools/offscreen/sg_viewer @@ -75,6 +75,16 @@ public: m_session.to_render(this); } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + void set_device_interactor(sg::device_interactor*) {} public: diff --git a/source/externals/g4tools/include/tools/rcsv_ntuple b/source/externals/g4tools/include/tools/rcsv_ntuple index d13f17f7c9..5e48d49279 100644 --- a/source/externals/g4tools/include/tools/rcsv_ntuple +++ b/source/externals/g4tools/include/tools/rcsv_ntuple @@ -477,6 +477,7 @@ public: } } } + size_t num = m_cols.size(); if(!num) { a_out << "tools::rcsv::ntuple::initialize :" @@ -664,9 +665,27 @@ public: a_out << "tools::rcsv::ntuple::initialize(booking) :" << " zero columns." << std::endl; + m_sep = 0; + m_sz = 0; + m_rows = -1; + m_hippo = false; return false; } + {tools_vforcit(column_binding,a_bd.columns(),it) { + if(!find_named(m_cols,(*it).name())) { + a_out << "tools::rcsv::ntuple::initialize :" + << " error : for column binding with name " << sout((*it).name()) << ", no ntuple column found." + << std::endl; + safe_clear(m_cols); + m_sep = 0; + m_sz = 0; + m_rows = -1; + m_hippo = false; + return false; + } + }} + //a_out << "tools::rroot::ntuple::initialize :" // << " number of columns " << num << "." // << std::endl; diff --git a/source/externals/g4tools/include/tools/rroot/ntuple b/source/externals/g4tools/include/tools/rroot/ntuple index 5d56002c82..a31ea6c212 100644 --- a/source/externals/g4tools/include/tools/rroot/ntuple +++ b/source/externals/g4tools/include/tools/rroot/ntuple @@ -705,8 +705,10 @@ public: {tools_vforcit(column_binding,a_bd.columns(),it) { if(!find_named(m_cols,(*it).name())) { a_out << "tools::rroot::ntuple::initialize :" - << " warning : for column binding with name " << sout((*it).name()) << ", no ntuple column found." + << " error : for column binding with name " << sout((*it).name()) << ", no ntuple column found." << std::endl; + safe_clear(m_cols); + return false; } }} diff --git a/source/externals/g4tools/include/tools/sg/event b/source/externals/g4tools/include/tools/sg/event index 33d2fe71f7..0ca4317c18 100644 --- a/source/externals/g4tools/include/tools/sg/event +++ b/source/externals/g4tools/include/tools/sg/event @@ -104,8 +104,44 @@ protected: unsigned int m_h; }; -class mouse_down_event : public event { +class position_modifiers { +public: + position_modifiers(int a_x,int a_y,bool a_shift_modifier,bool a_control_modifier) + :m_x(a_x) + ,m_y(a_y) + ,m_shift_modifier(a_shift_modifier) + ,m_control_modifier(a_control_modifier) + {} + virtual ~position_modifiers(){} +public: + position_modifiers(const position_modifiers& a_from) + :m_x(a_from.m_x) + ,m_y(a_from.m_y) + ,m_shift_modifier(a_from.m_shift_modifier) + ,m_control_modifier(a_from.m_control_modifier) + {} + position_modifiers& operator=(const position_modifiers& a_from){ + m_x = a_from.m_x; + m_y = a_from.m_y; + m_shift_modifier = a_from.m_shift_modifier; + m_control_modifier = a_from.m_control_modifier; + return *this; + } +public: + int x() const {return m_x;} + int y() const {return m_y;} + bool shift_modifier() const {return m_shift_modifier;} + bool control_modifier() const {return m_control_modifier;} +protected: + int m_x; + int m_y; + bool m_shift_modifier; + bool m_control_modifier; +}; + +class mouse_down_event : public event, public position_modifiers { typedef event parent; + typedef position_modifiers parent_pos_mod; public: #ifdef TOOLS_SG_EVENT_ID_CAST static cid id_class() {return parent::id_class()+2;} @@ -122,33 +158,25 @@ public: #endif virtual event* copy() const {return new mouse_down_event(*this);} public: - mouse_down_event(int a_x,int a_y) //signed because of wall. - :m_x(a_x) - ,m_y(a_y) + mouse_down_event(int a_x,int a_y,bool a_shift_modifier,bool a_control_modifier) + :parent_pos_mod(a_x,a_y,a_shift_modifier,a_control_modifier) {} virtual ~mouse_down_event(){} public: mouse_down_event(const mouse_down_event& a_from) - :event(a_from) - ,m_x(a_from.m_x) - ,m_y(a_from.m_y) + :parent(a_from) + ,parent_pos_mod(a_from) {} mouse_down_event& operator=(const mouse_down_event& a_from){ - event::operator=(a_from); - m_x = a_from.m_x; - m_y = a_from.m_y; + parent::operator=(a_from); + parent_pos_mod::operator=(a_from); return *this; } -public: - int x() const {return m_x;} - int y() const {return m_y;} -protected: - int m_x; - int m_y; }; -class mouse_up_event : public event { +class mouse_up_event : public event, public position_modifiers { typedef event parent; + typedef position_modifiers parent_pos_mod; public: #ifdef TOOLS_SG_EVENT_ID_CAST static cid id_class() {return parent::id_class()+3;} @@ -165,33 +193,25 @@ public: #endif virtual event* copy() const {return new mouse_up_event(*this);} public: - mouse_up_event(int a_x,int a_y) //signed because of wall. - :m_x(a_x) - ,m_y(a_y) + mouse_up_event(int a_x,int a_y,bool a_shift_modifier,bool a_control_modifier) + :parent_pos_mod(a_x,a_y,a_shift_modifier,a_control_modifier) {} virtual ~mouse_up_event(){} public: mouse_up_event(const mouse_up_event& a_from) - :event(a_from) - ,m_x(a_from.m_x) - ,m_y(a_from.m_y) + :parent(a_from) + ,parent_pos_mod(a_from) {} mouse_up_event& operator=(const mouse_up_event& a_from){ - event::operator=(a_from); - m_x = a_from.m_x; - m_y = a_from.m_y; + parent::operator=(a_from); + parent_pos_mod::operator=(a_from); return *this; } -public: - int x() const {return m_x;} - int y() const {return m_y;} -protected: - int m_x; - int m_y; }; -class mouse_move_event : public event { +class mouse_move_event : public event, public position_modifiers { typedef event parent; + typedef position_modifiers parent_pos_mod; public: #ifdef TOOLS_SG_EVENT_ID_CAST static cid id_class() {return parent::id_class()+4;} @@ -208,11 +228,10 @@ public: #endif virtual event* copy() const {return new mouse_move_event(*this);} public: - mouse_move_event(int a_x,int a_y, //signed because of wall. + mouse_move_event(int a_x,int a_y,bool a_shift_modifier,bool a_control_modifier, int a_ox,int a_oy, bool a_touch) //for sliders. - :m_x(a_x) - ,m_y(a_y) + :parent_pos_mod(a_x,a_y,a_shift_modifier,a_control_modifier) ,m_ox(a_ox) ,m_oy(a_oy) ,m_touch(a_touch) @@ -220,17 +239,15 @@ public: virtual ~mouse_move_event(){} public: mouse_move_event(const mouse_move_event& a_from) - :event(a_from) - ,m_x(a_from.m_x) - ,m_y(a_from.m_y) + :parent(a_from) + ,parent_pos_mod(a_from) ,m_ox(a_from.m_ox) ,m_oy(a_from.m_oy) ,m_touch(a_from.m_touch) {} mouse_move_event& operator=(const mouse_move_event& a_from){ - event::operator=(a_from); - m_x = a_from.m_x; - m_y = a_from.m_y; + parent::operator=(a_from); + parent_pos_mod::operator=(a_from); m_ox = a_from.m_ox; m_oy = a_from.m_oy; @@ -239,14 +256,10 @@ public: return *this; } public: - int x() const {return m_x;} - int y() const {return m_y;} int ox() const {return m_ox;} int oy() const {return m_oy;} bool is_touch() const {return m_touch;} protected: - int m_x; - int m_y; int m_ox; int m_oy; //+ = up. // etc : @@ -385,8 +398,9 @@ protected: key_code m_key; }; -class wheel_rotate_event : public event { +class wheel_rotate_event : public event, public position_modifiers { typedef event parent; + typedef position_modifiers parent_pos_mod; public: #ifdef TOOLS_SG_EVENT_ID_CAST static cid id_class() {return parent::id_class()+8;} @@ -403,17 +417,20 @@ public: #endif virtual event* copy() const {return new wheel_rotate_event(*this);} public: - wheel_rotate_event(int a_angle) - :m_angle(a_angle) + wheel_rotate_event(int a_angle,int a_x,int a_y,bool a_shift_modifier,bool a_control_modifier) + :parent_pos_mod(a_x,a_y,a_shift_modifier,a_control_modifier) + ,m_angle(a_angle) {} virtual ~wheel_rotate_event(){} public: wheel_rotate_event(const wheel_rotate_event& a_from) - :event(a_from) + :parent(a_from) + ,parent_pos_mod(a_from) ,m_angle(a_from.m_angle) {} wheel_rotate_event& operator=(const wheel_rotate_event& a_from){ - event::operator=(a_from); + parent::operator=(a_from); + parent_pos_mod::operator=(a_from); m_angle = a_from.m_angle; return *this; } diff --git a/source/externals/g4tools/include/tools/version b/source/externals/g4tools/include/tools/version index ac398748da..3ac8280ce9 100644 --- a/source/externals/g4tools/include/tools/version +++ b/source/externals/g4tools/include/tools/version @@ -5,13 +5,13 @@ #define tools_version #define TOOLS_MAJOR_VERSION 6 -#define TOOLS_MINOR_VERSION 3 -#define TOOLS_PATCH_VERSION 3 -#define TOOLS_VERSION "6.3.3" -#define TOOLS_VERSION_VRP "v6r3p3" +#define TOOLS_MINOR_VERSION 5 +#define TOOLS_PATCH_VERSION 1 +#define TOOLS_VERSION "6.5.1" +#define TOOLS_VERSION_VRP "v6r5p1" namespace tools { -inline unsigned int version() {return 60303;} +inline unsigned int version() {return 60501;} } #endif diff --git a/source/externals/g4tools/include/toolx/Qt/glarea b/source/externals/g4tools/include/toolx/Qt/glarea index 8d03cfdfce..76f743a649 100644 --- a/source/externals/g4tools/include/toolx/Qt/glarea +++ b/source/externals/g4tools/include/toolx/Qt/glarea @@ -60,34 +60,54 @@ public: } virtual void mousePressEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_down_event _event(a_event->x(),a_event->y()); + tools::sg::mouse_down_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier); #else - tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y()); + tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); #endif m_interactor->mouse_press(_event); } virtual void mouseReleaseEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_up_event _event(a_event->x(),a_event->y()); + tools::sg::mouse_up_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier); #else - tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y()); + tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); #endif m_interactor->mouse_release(_event); } virtual void mouseMoveEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),0,0,false); + tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier,0,0,false); #else - tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),0,0,false); + tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier,0,0,false); #endif m_interactor->mouse_move(_event); } virtual void wheelEvent(QWheelEvent* a_event) { if(!m_interactor) return; - tools::sg::wheel_rotate_event _event(a_event->angleDelta().y()); + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + +#if QT_VERSION < 0x050f00 //5.15.00 + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y(),a_event->x(),a_event->y(),shift_modifier,control_modifier); +#else + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y(),a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); +#endif m_interactor->wheel_rotate(_event); } diff --git a/source/externals/g4tools/include/toolx/Qt/pixwin b/source/externals/g4tools/include/toolx/Qt/pixwin index 77eef3c3b2..4475182525 100644 --- a/source/externals/g4tools/include/toolx/Qt/pixwin +++ b/source/externals/g4tools/include/toolx/Qt/pixwin @@ -59,28 +59,40 @@ public: } virtual void mousePressEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_down_event _event(a_event->x(),a_event->y()); + tools::sg::mouse_down_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier); #else - tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y()); + tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); #endif m_interactor->mouse_press(_event); } virtual void mouseReleaseEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_up_event _event(a_event->x(),a_event->y()); + tools::sg::mouse_up_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier); #else - tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y()); + tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); #endif m_interactor->mouse_release(_event); } virtual void mouseMoveEvent(QMouseEvent* a_event) { if(!m_interactor) return; + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + #if QT_VERSION < 0x060000 - tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),0,0,false); + tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),shift_modifier,control_modifier,0,0,false); #else - tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),0,0,false); + tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier,0,0,false); #endif m_interactor->mouse_move(_event); } @@ -91,7 +103,15 @@ public: //} virtual void wheelEvent(QWheelEvent* a_event) { if(!m_interactor) return; - tools::sg::wheel_rotate_event _event(a_event->angleDelta().y()); + + bool shift_modifier = a_event->modifiers() & ::Qt::ShiftModifier; + bool control_modifier = a_event->modifiers() & ::Qt::ControlModifier; + +#if QT_VERSION < 0x050f00 //5.15.00 + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y(),a_event->x(),a_event->y(),shift_modifier,control_modifier); +#else + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y(),a_event->position().x(),a_event->position().y(),shift_modifier,control_modifier); +#endif m_interactor->wheel_rotate(_event); } diff --git a/source/externals/g4tools/include/toolx/Qt/sg_viewer b/source/externals/g4tools/include/toolx/Qt/sg_viewer index 31e4d4a8e2..064375606a 100644 --- a/source/externals/g4tools/include/toolx/Qt/sg_viewer +++ b/source/externals/g4tools/include/toolx/Qt/sg_viewer @@ -76,6 +76,18 @@ public: if(!m_glarea) return; m_glarea->update(); } + + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_glarea) {a_w = 0;a_h = 0;return false;} + a_w = (unsigned int)m_glarea->width(); + a_h = (unsigned int)m_glarea->height(); + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + public: QWidget* shell() {return m_shell;} void set_own_shell(bool a_value) {m_own_shell = a_value;} diff --git a/source/externals/g4tools/include/toolx/Qt/zb_viewer b/source/externals/g4tools/include/toolx/Qt/zb_viewer index 02803d0404..607fbf13f5 100644 --- a/source/externals/g4tools/include/toolx/Qt/zb_viewer +++ b/source/externals/g4tools/include/toolx/Qt/zb_viewer @@ -80,6 +80,17 @@ public: m_render_area->repaint(); //immediate. } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_render_area) {a_w = 0;a_h = 0;return false;} + a_w = (unsigned int)m_render_area->width(); + a_h = (unsigned int)m_render_area->height(); + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + void set_device_interactor(tools::sg::device_interactor* a_interactor) { //we do not have ownership. if(!m_render_area) return; m_render_area->set_device_interactor(a_interactor); diff --git a/source/externals/g4tools/include/toolx/Windows/glarea b/source/externals/g4tools/include/toolx/Windows/glarea index 71b1242e34..d1b64c91f0 100644 --- a/source/externals/g4tools/include/toolx/Windows/glarea +++ b/source/externals/g4tools/include/toolx/Windows/glarea @@ -74,7 +74,6 @@ public: ,m_interactor(0) { register_class(); - // The WS_BORDER is needed. Else probleme of size at startup. RECT rect; ::GetClientRect(m_parent,&rect); //printf("debug : glarea : ca : %d %d\n",rect.right-rect.left,rect.bottom-rect.top); @@ -248,7 +247,9 @@ protected: glarea* _this = (glarea*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::mouse_down_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_down_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier); _this->m_interactor->mouse_press(event); } else { RECT rect; @@ -262,7 +263,9 @@ protected: glarea* _this = (glarea*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::mouse_up_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_up_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier); _this->m_interactor->mouse_release(event); } else { RECT rect; @@ -275,12 +278,16 @@ protected: case WM_MOUSEMOVE:{ glarea* _this = (glarea*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { + WPARAM state = a_wparam; + bool ldown = ((state & MK_LBUTTON)==MK_LBUTTON)?true:false; if(_this->m_interactor) { - tools::sg::mouse_move_event event(LOWORD(a_lparam),HIWORD(a_lparam),0,0,false); - _this->m_interactor->mouse_move(event); + if(ldown) { + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_move_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier,0,0,false); + _this->m_interactor->mouse_move(event); + } } else { - WPARAM state = a_wparam; - bool ldown = ((state & MK_LBUTTON)==MK_LBUTTON)?true:false; RECT rect; ::GetClientRect(a_hwnd,&rect); unsigned int h = rect.bottom-rect.top; @@ -294,7 +301,13 @@ protected: glarea* _this = (glarea*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::wheel_rotate_event event(GET_WHEEL_DELTA_WPARAM(a_wparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + POINT p; + p.x = LOWORD(a_lparam); + p.y = HIWORD(a_lparam); + if(!::ScreenToClient(a_hwnd,&p)) {} + tools::sg::wheel_rotate_event event(GET_WHEEL_DELTA_WPARAM(a_wparam),int(p.x),int(p.y),shift_modifier,control_modifier); _this->m_interactor->wheel_rotate(event); } } diff --git a/source/externals/g4tools/include/toolx/Windows/pixwin b/source/externals/g4tools/include/toolx/Windows/pixwin index 9238f8050e..10618ee8b6 100644 --- a/source/externals/g4tools/include/toolx/Windows/pixwin +++ b/source/externals/g4tools/include/toolx/Windows/pixwin @@ -195,7 +195,9 @@ protected: pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::mouse_down_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_down_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier); _this->m_interactor->mouse_press(event); } else { RECT rect; @@ -209,7 +211,9 @@ protected: pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::mouse_up_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_up_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier); _this->m_interactor->mouse_release(event); } else { RECT rect; @@ -222,12 +226,16 @@ protected: case WM_MOUSEMOVE:{ pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { + WPARAM state = a_wparam; + bool ldown = ((state & MK_LBUTTON)==MK_LBUTTON)?true:false; if(_this->m_interactor) { - tools::sg::mouse_move_event event(LOWORD(a_lparam),HIWORD(a_lparam),0,0,false); - _this->m_interactor->mouse_move(event); + if(ldown) { + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + tools::sg::mouse_move_event event(LOWORD(a_lparam),HIWORD(a_lparam),shift_modifier,control_modifier,0,0,false); + _this->m_interactor->mouse_move(event); + } } else { - WPARAM state = a_wparam; - bool ldown = ((state & MK_LBUTTON)==MK_LBUTTON)?true:false; RECT rect; ::GetClientRect(a_hwnd,&rect); unsigned int h = rect.bottom-rect.top; @@ -241,7 +249,13 @@ protected: pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); if(_this) { if(_this->m_interactor) { - tools::sg::wheel_rotate_event event(GET_WHEEL_DELTA_WPARAM(a_wparam)); + bool shift_modifier = ::GetKeyState(VK_SHIFT) & 0x8000; + bool control_modifier = ::GetKeyState(VK_CONTROL) & 0x8000; + POINT p; + p.x = LOWORD(a_lparam); + p.y = HIWORD(a_lparam); + if(!::ScreenToClient(a_hwnd,&p)) {} + tools::sg::wheel_rotate_event event(GET_WHEEL_DELTA_WPARAM(a_wparam),int(p.x),int(p.y),shift_modifier,control_modifier); _this->m_interactor->wheel_rotate(event); } } diff --git a/source/externals/g4tools/include/toolx/Windows/sg_viewer b/source/externals/g4tools/include/toolx/Windows/sg_viewer index 33677e5c63..f44688fa2a 100644 --- a/source/externals/g4tools/include/toolx/Windows/sg_viewer +++ b/source/externals/g4tools/include/toolx/Windows/sg_viewer @@ -58,6 +58,18 @@ public: void win_render() {m_glarea.wm_paint();} + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_glarea.hwnd()) {a_w = 0;a_h = 0;return false;} + RECT wrect; + ::GetWindowRect(m_glarea.hwnd(),&wrect); + a_w = wrect.right-wrect.left; + a_h = wrect.bottom-wrect.top; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent_viewer::width(); + a_h = parent_viewer::height(); + } public: void set_device_interactor(tools::sg::device_interactor* a_interactor) { //we do not have ownership. diff --git a/source/externals/g4tools/include/toolx/Windows/zb_viewer b/source/externals/g4tools/include/toolx/Windows/zb_viewer index dacd1eda52..0ac86c48fd 100644 --- a/source/externals/g4tools/include/toolx/Windows/zb_viewer +++ b/source/externals/g4tools/include/toolx/Windows/zb_viewer @@ -78,6 +78,20 @@ public: } void win_render() {parent_render_area::wm_paint();} + + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!parent_render_area::m_hwnd) {a_w = 0;a_h = 0;return false;} + RECT wrect; + ::GetWindowRect(parent_render_area::m_hwnd,&wrect); + a_w = wrect.right-wrect.left; + a_h = wrect.bottom-wrect.top; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent_viewer::width(); + a_h = parent_viewer::height(); + } + void set_device_interactor(tools::sg::device_interactor* a_interactor) { //we do not have ownership. parent_render_area::set_device_interactor(a_interactor); } diff --git a/source/externals/g4tools/include/toolx/X11/sg_viewer b/source/externals/g4tools/include/toolx/X11/sg_viewer index 206c40f852..9570e3b54a 100644 --- a/source/externals/g4tools/include/toolx/X11/sg_viewer +++ b/source/externals/g4tools/include/toolx/X11/sg_viewer @@ -100,6 +100,19 @@ public: } } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_win) {a_w = 0;a_h = 0;return false;} + int width,height; + if(!m_session.window_size(m_win,width,height)) {a_w = 0;a_h = 0;return false;} + a_w = (unsigned int)width; + a_h = (unsigned int)height; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + public: void set_device_interactor(tools::sg::device_interactor*) {} protected: diff --git a/source/externals/g4tools/include/toolx/X11/zb_viewer b/source/externals/g4tools/include/toolx/X11/zb_viewer index dd064725db..b6a93b7441 100644 --- a/source/externals/g4tools/include/toolx/X11/zb_viewer +++ b/source/externals/g4tools/include/toolx/X11/zb_viewer @@ -24,30 +24,32 @@ private: public: virtual bool dispatch(XEvent& a_event) { if(parent::dispatch(a_event)) return true; + bool shift_modifier = a_event.xkey.state & ShiftMask; + bool control_modifier = a_event.xkey.state & ControlMask; if(a_event.type==ButtonPress && a_event.xbutton.button==1) { if(!m_viewer.device_interactor()) return false; - tools::sg::mouse_down_event event(a_event.xbutton.x,a_event.xbutton.y); + tools::sg::mouse_down_event event(a_event.xbutton.x,a_event.xbutton.y,shift_modifier,control_modifier); m_viewer.device_interactor()->mouse_press(event); return true; } else if(a_event.type==ButtonRelease && a_event.xbutton.button==1) { if(!m_viewer.device_interactor()) return false; - tools::sg::mouse_up_event event(a_event.xbutton.x,a_event.xbutton.y); + tools::sg::mouse_up_event event(a_event.xbutton.x,a_event.xbutton.y,shift_modifier,control_modifier); m_viewer.device_interactor()->mouse_release(event); return true; } else if(a_event.type==MotionNotify) { if(!m_viewer.device_interactor()) return false; if((a_event.xmotion.state & Button1MotionMask)==Button1MotionMask) { - tools::sg::mouse_move_event event(a_event.xmotion.x,a_event.xmotion.y,0,0,false); + tools::sg::mouse_move_event event(a_event.xmotion.x,a_event.xmotion.y,shift_modifier,control_modifier,0,0,false); m_viewer.device_interactor()->mouse_move(event); } } else if((a_event.type==ButtonPress)&&(a_event.xbutton.button==4)) { // mouse scrollwheel down : if(!m_viewer.device_interactor()) return false; - tools::sg::wheel_rotate_event event(8); //8=cooking. + tools::sg::wheel_rotate_event event(8,a_event.xbutton.x,a_event.xbutton.y,shift_modifier,control_modifier); //8=cooking. m_viewer.device_interactor()->wheel_rotate(event); return true; } else if((a_event.type==ButtonPress)&&(a_event.xbutton.button==5)) { // mouse scrollwheel up : if(!m_viewer.device_interactor()) return false; - tools::sg::wheel_rotate_event event(-8); //8=cooking. + tools::sg::wheel_rotate_event event(-8,a_event.xbutton.x,a_event.xbutton.y,shift_modifier,control_modifier); //8=cooking. m_viewer.device_interactor()->wheel_rotate(event); return true; } @@ -135,6 +137,19 @@ public: m_out_buffer.clear(); } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_win) {a_w = 0;a_h = 0;return false;} + int width,height; + if(!m_session.window_size(m_win,width,height)) {a_w = 0;a_h = 0;return false;} + a_w = (unsigned int)width; + a_h = (unsigned int)height; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} public: tools::sg::device_interactor* device_interactor() {return m_interactor;} diff --git a/source/externals/g4tools/include/toolx/Xt/sg_viewer b/source/externals/g4tools/include/toolx/Xt/sg_viewer index b89536cc70..be4b040e46 100644 --- a/source/externals/g4tools/include/toolx/Xt/sg_viewer +++ b/source/externals/g4tools/include/toolx/Xt/sg_viewer @@ -108,6 +108,17 @@ public: if(m_glarea) OpenGLArea::paint(m_glarea); } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_glarea) {a_w = 0;a_h = 0;return false;} + a_w = (unsigned int)m_glarea->core.width; + a_h = (unsigned int)m_glarea->core.height; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + public: void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. protected: @@ -138,23 +149,29 @@ protected: _this->m_interactor->key_release(event); }return; case ButtonPress:{ + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; if(xevent->xbutton.button==Button4) { //4=wheel down, or move down double touch on trackpad = zoom in. - tools::sg::wheel_rotate_event event(8); //8=cooking. + tools::sg::wheel_rotate_event event(8,xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); //8=cooking. _this->m_interactor->wheel_rotate(event); } else if(xevent->xbutton.button==Button5) { //5=wheel up, or move up double touch on trackpad = zoom out. - tools::sg::wheel_rotate_event event(-8); //8=cooking. + tools::sg::wheel_rotate_event event(-8,xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); //8=cooking. _this->m_interactor->wheel_rotate(event); } else { - tools::sg::mouse_down_event event(xevent->xbutton.x,xevent->xbutton.y); + tools::sg::mouse_down_event event(xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); _this->m_interactor->mouse_press(event); } }return; case ButtonRelease:{ - tools::sg::mouse_up_event event(xevent->xbutton.x,xevent->xbutton.y); + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; + tools::sg::mouse_up_event event(xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); _this->m_interactor->mouse_release(event); }return; case MotionNotify:{ - tools::sg::mouse_move_event event(xevent->xmotion.x,xevent->xmotion.y,0,0,false); + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; + tools::sg::mouse_move_event event(xevent->xmotion.x,xevent->xmotion.y,shift_modifier,control_modifier,0,0,false); _this->m_interactor->mouse_move(event); }return; default:return;} diff --git a/source/externals/g4tools/include/toolx/Xt/zb_viewer b/source/externals/g4tools/include/toolx/Xt/zb_viewer index fba439add5..ff6afa07d8 100644 --- a/source/externals/g4tools/include/toolx/Xt/zb_viewer +++ b/source/externals/g4tools/include/toolx/Xt/zb_viewer @@ -116,6 +116,17 @@ public: if(m_image_area) ImageArea::paint(m_image_area); } + bool window_size(unsigned int& a_w,unsigned int& a_h) { + if(!m_image_area) {a_w = 0;a_h = 0;return false;} + a_w = m_image_area->core.width; + a_h = m_image_area->core.height; + return true; + } + void render_area_size(unsigned int& a_w,unsigned int& a_h) { + a_w = parent::width(); + a_h = parent::height(); + } + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. protected: static void resize_cbk(Widget a_widget,XtPointer a_tag,XtPointer){ @@ -157,26 +168,32 @@ protected: _this->m_interactor->key_release(event); }return; case ButtonPress:{ + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; if(xevent->xbutton.button==Button4) { //4=wheel down, or move down double touch on trackpad = zoom in. - tools::sg::wheel_rotate_event event(8); //8=cooking. + tools::sg::wheel_rotate_event event(8,xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); //8=cooking. _this->m_interactor->wheel_rotate(event); } else if(xevent->xbutton.button==Button5) { //5=wheel up, or move up double touch on trackpad = zoom out. - tools::sg::wheel_rotate_event event(-8); //8=cooking. + tools::sg::wheel_rotate_event event(-8,xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); //8=cooking. _this->m_interactor->wheel_rotate(event); } else if(xevent->xbutton.button==Button1) { - tools::sg::mouse_down_event event(xevent->xbutton.x,xevent->xbutton.y); + tools::sg::mouse_down_event event(xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); _this->m_interactor->mouse_press(event); } }return; case ButtonRelease:{ if(xevent->xbutton.button==Button1) { - tools::sg::mouse_up_event event(xevent->xbutton.x,xevent->xbutton.y); + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; + tools::sg::mouse_up_event event(xevent->xbutton.x,xevent->xbutton.y,shift_modifier,control_modifier); _this->m_interactor->mouse_release(event); } }return; case MotionNotify:{ if((xevent->xmotion.state & Button1MotionMask)==Button1MotionMask) { - tools::sg::mouse_move_event event(xevent->xmotion.x,xevent->xmotion.y,0,0,false); + bool shift_modifier = xevent->xkey.state & ShiftMask; + bool control_modifier = xevent->xkey.state & ControlMask; + tools::sg::mouse_move_event event(xevent->xmotion.x,xevent->xmotion.y,shift_modifier,control_modifier,0,0,false); _this->m_interactor->mouse_move(event); } }return; diff --git a/source/externals/g4tools/include/toolx/hdf5/ntuple b/source/externals/g4tools/include/toolx/hdf5/ntuple index 54e4ac3961..a137c00cad 100644 --- a/source/externals/g4tools/include/toolx/hdf5/ntuple +++ b/source/externals/g4tools/include/toolx/hdf5/ntuple @@ -967,6 +967,25 @@ public: } #undef TOOLX_HDF5_NTUPLE_READ_BINDING_CREATE_COL #undef TOOLX_HDF5_NTUPLE_READ_BINDING_CREATE_VEC_COL + + size_t num = m_cols.size(); + if(!num) { + a_out << "toolx::hdf5::ntuple::ntuple(read with binding) :" + << " zero columns." + << std::endl; + return false; + } + + {tools_vforcit(tools::column_binding,a_bd.columns(),it) { + if(!tools::find_named(m_cols,(*it).name())) { + a_out << "toolx::hdf5::ntuple::ntuple(read with binding) :" + << " error : for column binding with name " << tools::sout((*it).name()) << ", no ntuple column found." + << std::endl; + tools::safe_clear(m_cols); + return false; + } + }} + return true; } diff --git a/source/externals/zlib/CMakeLists.txt b/source/externals/zlib/CMakeLists.txt index aefd0e9c2f..c7b10e45a3 100644 --- a/source/externals/zlib/CMakeLists.txt +++ b/source/externals/zlib/CMakeLists.txt @@ -73,11 +73,6 @@ configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/zconf.h.cmakein # ----- # - Geant4 specific part to integrate # -# Intel/Clang may warn about -Wdeprecated-non-prototype, but per https://github.com/madler/zlib/issues/633 -# we suppress this warning if the compiler supports the flag -include(CheckCCompilerFlag) -check_c_compiler_flag("-Wno-deprecated-non-prototype" G4ZLIB_NEEDS_DNP) - # Headers listed under Sources are internal zlib headers # Private headers are in src! set(ZLIB_PUBLIC_HDRS @@ -121,10 +116,6 @@ foreach(__g4zlib_target G4zlib G4zlib-static) PRIVATE $ ) - - if(G4ZLIB_NEEDS_DNP) - target_compile_options(${__g4zlib_target} PRIVATE "-Wno-deprecated-non-prototype") - endif() endif() endforeach() diff --git a/source/externals/zlib/History b/source/externals/zlib/History index 195b151efe..57a867b614 100644 --- a/source/externals/zlib/History +++ b/source/externals/zlib/History @@ -6,8 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-01 Gabriele Cosmo (zlib-V11-02-00) -- Fix in zutil.h to remove redundant block on macOS and allow for porting +## 2025-05-02 Ben Morgan (zlib-V11-03-01) +- Import zlib 1.3.1 sources, retaining prior Geant4 patches. + +## 2025-04-01 Gabriele Cosmo (zlib-V11-03-00) +- Fix in zutil.h to comment out redundant block on macOS and allow for porting on macOS-15.4 and clang-17.0.0. ## 2023-06-15 Ben Morgan (zlib-V11-01-00) diff --git a/source/externals/zlib/include/deflate.h b/source/externals/zlib/include/deflate.h index 1a06cd5f25..300c6ada62 100644 --- a/source/externals/zlib/include/deflate.h +++ b/source/externals/zlib/include/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2018 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -23,6 +23,10 @@ # define GZIP #endif +/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at + the cost of a larger memory footprint */ +/* #define LIT_MEM */ + /* =========================================================================== * Internal compression state. */ @@ -217,7 +221,14 @@ typedef struct internal_state { /* Depth of each subtree used as tie breaker for trees of equal frequency */ +#ifdef LIT_MEM +# define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ +#else +# define LIT_BUFS 4 uchf *sym_buf; /* buffer for distances and literals/lengths */ +#endif uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for @@ -239,7 +250,7 @@ typedef struct internal_state { * - I can't count above 4 */ - uInt sym_next; /* running index in sym_buf */ + uInt sym_next; /* running index in symbol buffer */ uInt sym_end; /* symbol table full when sym_next reaches this */ ulg opt_len; /* bit length of current block with optimal trees */ @@ -291,14 +302,14 @@ typedef struct internal_state { memory checker errors from longest match routines */ /* in trees.c */ -void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); -int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); -void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_init(deflate_state *s); +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last); +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); +void ZLIB_INTERNAL _tr_align(deflate_state *s); +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) @@ -318,6 +329,25 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, extern const uch ZLIB_INTERNAL _dist_code[]; #endif +#ifdef LIT_MEM +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#else # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->sym_buf[s->sym_next++] = 0; \ @@ -337,6 +367,7 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#endif #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ diff --git a/source/externals/zlib/include/gzguts.h b/source/externals/zlib/include/gzguts.h index 57faf37165..eba72085bb 100644 --- a/source/externals/zlib/include/gzguts.h +++ b/source/externals/zlib/include/gzguts.h @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -7,9 +7,8 @@ # ifndef _LARGEFILE_SOURCE # define _LARGEFILE_SOURCE 1 # endif -# ifdef _FILE_OFFSET_BITS -# undef _FILE_OFFSET_BITS -# endif +# undef _FILE_OFFSET_BITS +# undef _TIME_BITS #endif #ifdef HAVE_HIDDEN @@ -119,8 +118,8 @@ /* gz* functions always use library allocation functions */ #ifndef STDC - extern voidp malloc OF((uInt size)); - extern void free OF((voidpf ptr)); + extern voidp malloc(uInt size); + extern void free(voidpf ptr); #endif /* get errno and strerror definition */ @@ -138,10 +137,10 @@ /* provide prototypes for these when building zlib without LFS */ #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); #endif /* default memLevel */ @@ -203,17 +202,13 @@ typedef struct { typedef gz_state FAR *gz_statep; /* shared functions */ -void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +void ZLIB_INTERNAL gz_error(gz_statep, int, const char *); #if defined UNDER_CE -char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +char ZLIB_INTERNAL *gz_strwinerror(DWORD error); #endif /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t value -- needed when comparing unsigned to z_off64_t, which is signed (possible z_off64_t types off_t, off64_t, and long are all signed) */ -#ifdef INT_MAX -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) -#else -unsigned ZLIB_INTERNAL gz_intmax OF((void)); -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) -#endif +unsigned ZLIB_INTERNAL gz_intmax(void); +#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) diff --git a/source/externals/zlib/include/inffast.h b/source/externals/zlib/include/inffast.h index e5c1aa4ca8..49c6d156c5 100644 --- a/source/externals/zlib/include/inffast.h +++ b/source/externals/zlib/include/inffast.h @@ -8,4 +8,4 @@ subject to change. Applications should only use zlib.h. */ -void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start); diff --git a/source/externals/zlib/include/inftrees.h b/source/externals/zlib/include/inftrees.h index f53665311c..396f74b5da 100644 --- a/source/externals/zlib/include/inftrees.h +++ b/source/externals/zlib/include/inftrees.h @@ -41,8 +41,8 @@ typedef struct { examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes - returns returns 852, and "enough 30 6 15" for distance codes returns 592. - The initial root table size (9 or 6) is found in the fifth argument of the + returns 852, and "enough 30 6 15" for distance codes returns 592. The + initial root table size (9 or 6) is found in the fifth argument of the inflate_table() calls in inflate.c and infback.c. If the root table size is changed, then these maximum sizes would be need to be recalculated and updated. */ @@ -57,6 +57,6 @@ typedef enum { DISTS } codetype; -int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, - unsigned FAR *bits, unsigned short FAR *work)); +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/source/externals/zlib/include/zlib.h b/source/externals/zlib/include/zlib.h index 953cb5012d..8d4b932eaf 100644 --- a/source/externals/zlib/include/zlib.h +++ b/source/externals/zlib/include/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.13, October 13th, 2022 + version 1.3.1, January 22nd, 2024 - Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.13" -#define ZLIB_VERNUM 0x12d0 +#define ZLIB_VERSION "1.3.1" +#define ZLIB_VERNUM 0x1310 #define ZLIB_VER_MAJOR 1 -#define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 13 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 1 #define ZLIB_VER_SUBREVISION 0 /* @@ -78,8 +78,8 @@ extern "C" { even in the case of corrupted input. */ -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); struct internal_state; @@ -217,7 +217,7 @@ typedef gz_header FAR *gz_headerp; /* basic functions */ -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +ZEXTERN const char * ZEXPORT zlibVersion(void); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check @@ -225,12 +225,12 @@ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); */ /* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default - allocation functions. + allocation functions. total_in, total_out, adler, and msg are initialized. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all @@ -247,7 +247,7 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); */ -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -320,8 +320,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was @@ -360,7 +360,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -375,7 +375,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by @@ -383,7 +383,8 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); read or consumed. The allocation of a sliding window will be deferred to the first call of inflate (if the decompression does not complete on the first call). If zalloc and zfree are set to Z_NULL, inflateInit updates - them to use default allocation functions. + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the @@ -397,7 +398,7 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); */ -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce @@ -517,7 +518,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); */ -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending @@ -535,12 +536,12 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); */ /* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); This is another version of deflateInit with more compression options. The fields zalloc, zfree and opaque must be initialized before by the caller. @@ -607,9 +608,9 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. When using the zlib format, this @@ -651,9 +652,9 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, not perform any compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by deflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -673,8 +674,8 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, stream state is inconsistent. */ -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -691,20 +692,20 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate the internal compression state. The stream will leave the compression level and any other attributes that may have been - set unchanged. + set unchanged. total_in, total_out, adler, and msg are initialized. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2(). This can be @@ -729,7 +730,7 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, Then no more input data should be provided before the deflateParams() call. If this is done, the old level and strategy will be applied to the data compressed before deflateParams(), and the new level and strategy will be - applied to the the data compressed after deflateParams(). + applied to the data compressed after deflateParams(). deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if @@ -740,11 +741,11 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, retried with more output space. */ -ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain)); +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); /* Fine tune deflate's internal compression parameters. This should only be used by someone who understands the algorithm used by zlib's deflate for @@ -757,8 +758,8 @@ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, + uLong sourceLen); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or @@ -772,9 +773,9 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, than Z_FINISH or Z_NO_FLUSH are used. */ -ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, - unsigned *pending, - int *bits)); +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); /* deflatePending() returns the number of bytes and bits of output that have been generated, but not yet provided in the available output. The bytes not @@ -787,9 +788,9 @@ ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits @@ -804,8 +805,8 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, source stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); /* deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called @@ -821,16 +822,17 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, gzip file" and give up. If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent. */ /* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized @@ -883,9 +885,9 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, deferred until inflate() is called. */ -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, @@ -906,9 +908,9 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, inflate(). */ -ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, - Bytef *dictionary, - uInt *dictLength)); +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by inflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -921,7 +923,7 @@ ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, stream state is inconsistent. */ -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); /* Skips invalid compressed data until a possible full flush point (see above for the description of deflate with Z_FULL_FLUSH) can be found, or until all @@ -934,14 +936,14 @@ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); inflateSync returns Z_OK if a possible full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. - In the success case, the application may save the current current value of - total_in which indicates where valid compressed data was found. In the - error case, the application may repeatedly call inflateSync, providing more - input each time, until success or end of the input data. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -956,18 +958,19 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, destination. */ -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, - int windowBits)); +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); /* This function is the same as inflateReset, but it also permits changing the wrap and window size requests. The windowBits parameter is interpreted @@ -980,9 +983,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, the windowBits parameter is invalid. */ -ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); /* This function inserts bits in the inflate input stream. The intent is that this function is used to start inflating at a bit position in the @@ -1001,7 +1004,7 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, stream state was inconsistent. */ -ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); /* This function returns two values, one in the lower 16 bits of the return value, and the other in the remaining upper bits, obtained by shifting the @@ -1029,8 +1032,8 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); source stream state was inconsistent. */ -ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - gz_headerp head)); +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); /* inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after @@ -1070,8 +1073,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, */ /* -ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); Initialize the internal stream state for decompression using inflateBack() calls. The fields zalloc, zfree and opaque in strm must be initialized @@ -1091,13 +1094,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, the version of the header file. */ -typedef unsigned (*in_func) OF((void FAR *, - z_const unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); -ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); /* inflateBack() does a raw inflate with a single call using a call-back interface for input and output. This is potentially more efficient than @@ -1165,7 +1168,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, cannot return Z_OK. */ -ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); /* All memory allocated by inflateBackInit() is freed. @@ -1173,7 +1176,7 @@ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); state was inconsistent. */ -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); /* Return flags indicating compile-time options. Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: @@ -1226,8 +1229,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); you need special options. */ -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1241,9 +1244,9 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, buffer. */ -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -1257,15 +1260,15 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, Z_STREAM_ERROR if the level parameter is invalid. */ -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); /* compressBound() returns an upper bound on the compressed size after compress() or compress2() on sourceLen bytes. It would be used before a compress() or compress2() call to allocate the destination buffer. */ -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1282,8 +1285,8 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, buffer with the uncompressed data up to that point. */ -ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong *sourceLen)); +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); /* Same as uncompress, except that sourceLen is a pointer, where the length of the source is *sourceLen. On return, *sourceLen is the number of @@ -1302,7 +1305,7 @@ ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); Open the gzip (.gz) file at path for reading and decompressing, or compressing and writing. The mode parameter is as in fopen ("rb" or "wb") @@ -1339,7 +1342,7 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); file could not be opened. */ -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); /* Associate a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (if the file has @@ -1362,7 +1365,7 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); will not detect if fd is invalid (unless fd is -1). */ -ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); /* Set the internal buffer size used by this library's functions for file to size. The default buffer size is 8192 bytes. This function must be called @@ -1378,7 +1381,7 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); too late. */ -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); /* Dynamically update the compression level and strategy for file. See the description of deflateInit2 for the meaning of these parameters. Previously @@ -1389,7 +1392,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); or Z_MEM_ERROR if there is a memory allocation error. */ -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); /* Read and decompress up to len uncompressed bytes from file into buf. If the input file is not in gzip format, gzread copies the given number of @@ -1419,8 +1422,8 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); Z_STREAM_ERROR. */ -ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, - gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); /* Read and decompress up to nitems items of size size from file into buf, otherwise operating as gzread() does. This duplicates the interface of @@ -1445,14 +1448,14 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, file, resetting and retrying on end-of-file, when size is not 1. */ -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); /* Compress and write the len uncompressed bytes at buf to file. gzwrite returns the number of uncompressed bytes written or 0 in case of error. */ -ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, - z_size_t nitems, gzFile file)); +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); /* Compress and write nitems items of size size from buf to file, duplicating the interface of stdio's fwrite(), with size_t request and return types. If @@ -1465,7 +1468,7 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, is returned, and the error state is set to Z_STREAM_ERROR. */ -ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); /* Convert, format, compress, and write the arguments (...) to file under control of the string format, as in fprintf. gzprintf returns the number of @@ -1480,7 +1483,7 @@ ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); This can be determined using zlibCompileFlags(). */ -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); /* Compress and write the given null-terminated string s to file, excluding the terminating null character. @@ -1488,7 +1491,7 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); gzputs returns the number of characters written, or -1 in case of error. */ -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); /* Read and decompress bytes from file into buf, until len-1 characters are read, or until a newline character is read and transferred to buf, or an @@ -1502,13 +1505,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); buf are indeterminate. */ -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); /* Compress and write c, converted to an unsigned char, into file. gzputc returns the value that was written, or -1 in case of error. */ -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +ZEXTERN int ZEXPORT gzgetc(gzFile file); /* Read and decompress one byte from file. gzgetc returns this byte or -1 in case of end of file or error. This is implemented as a macro for speed. @@ -1517,7 +1520,7 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); points to has been clobbered or not. */ -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); /* Push c back onto the stream for file to be read as the first character on the next read. At least one character of push-back is always allowed. @@ -1529,7 +1532,7 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); gzseek() or gzrewind(). */ -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); /* Flush all pending output to file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function @@ -1545,8 +1548,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); */ /* -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); Set the starting position to offset relative to whence for the next gzread or gzwrite on file. The offset represents a number of bytes in the @@ -1564,7 +1567,7 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, would be before the current position. */ -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +ZEXTERN int ZEXPORT gzrewind(gzFile file); /* Rewind file. This function is supported only for reading. @@ -1572,7 +1575,7 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); */ /* -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); Return the starting position for the next gzread or gzwrite on file. This position represents a number of bytes in the uncompressed data stream, @@ -1583,7 +1586,7 @@ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); */ /* -ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); Return the current compressed (actual) read or write offset of file. This offset includes the count of bytes that precede the gzip stream, for example @@ -1592,7 +1595,7 @@ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); be used for a progress indicator. On error, gzoffset() returns -1. */ -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +ZEXTERN int ZEXPORT gzeof(gzFile file); /* Return true (1) if the end-of-file indicator for file has been set while reading, false (0) otherwise. Note that the end-of-file indicator is set @@ -1607,7 +1610,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); has grown since the previous end of file was detected. */ -ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +ZEXTERN int ZEXPORT gzdirect(gzFile file); /* Return true (1) if file is being copied directly while reading, or false (0) if file is a gzip stream being decompressed. @@ -1628,7 +1631,7 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); gzip file reading and decompression, which may not be desired.) */ -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose(gzFile file); /* Flush all pending output for file, if necessary, close file and deallocate the (de)compression state. Note that once file is closed, you @@ -1641,8 +1644,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); last read ended in the middle of a gzip stream, or Z_OK on success. */ -ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); -ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); /* Same as gzclose(), but gzclose_r() is only for use when reading, and gzclose_w() is only for use when writing or appending. The advantage to @@ -1653,7 +1656,7 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); zlib library. */ -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); /* Return the error message for the last error which occurred on file. errnum is set to zlib error number. If an error occurred in the file system @@ -1669,7 +1672,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); functions above that do not distinguish those cases in their return values. */ -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +ZEXTERN void ZEXPORT gzclearerr(gzFile file); /* Clear the error and end-of-file flags for file. This is analogous to the clearerr() function in stdio. This is useful for continuing to read a gzip @@ -1686,7 +1689,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); library. */ -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. An Adler-32 value is in the range of a 32-bit @@ -1706,15 +1709,15 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); if (adler != original_adler) error(); */ -ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); /* Same as adler32(), but with a size_t length. */ /* -ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, - z_off_t len2)); +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for @@ -1724,7 +1727,7 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, negative, the result has no meaning or utility. */ -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. @@ -1742,30 +1745,30 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, - z_size_t len)); +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); /* Same as crc32(), but with a size_t length. */ /* -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); Combine two CRC-32 check values into one. For two sequences of bytes, seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. + len2. len2 must be non-negative. */ /* -ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); Return the operator corresponding to length len2, to be used with - crc32_combine_op(). + crc32_combine_op(). len2 must be non-negative. */ -ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); /* Give the same result as crc32_combine(), using op in place of len2. op is is generated from len2 by crc32_combine_gen(). This will be faster than @@ -1778,20 +1781,20 @@ ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); #ifdef Z_PREFIX_SET # define z_deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) @@ -1836,7 +1839,7 @@ struct gzFile_s { unsigned char *next; z_off64_t pos; }; -ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ #ifdef Z_PREFIX_SET # undef z_gzgetc # define z_gzgetc(g) \ @@ -1853,13 +1856,13 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ * without large file support, _LFS64_LARGEFILE must also be true */ #ifdef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) @@ -1881,50 +1884,50 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ # define crc32_combine_gen crc32_combine_gen64 # endif # ifndef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); # endif #else - ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); - ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); - ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); - ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif #else /* Z_SOLO */ - ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif /* !Z_SOLO */ /* undocumented functions */ -ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); -ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); -ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); -ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF((z_streamp)); -ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); -ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); #if defined(_WIN32) && !defined(Z_SOLO) -ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, - const char *mode)); +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) # ifndef Z_SOLO -ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, - const char *format, - va_list va)); +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); # endif #endif diff --git a/source/externals/zlib/include/zutil.h b/source/externals/zlib/include/zutil.h index 17a3f3d589..3f6bc5e049 100644 --- a/source/externals/zlib/include/zutil.h +++ b/source/externals/zlib/include/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -56,7 +56,7 @@ typedef unsigned long ulg; extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] +#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] #define ERR_RETURN(strm,err) \ return (strm->msg = ERR_MSG(err), (err)) @@ -157,18 +157,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define OS_CODE 19 #endif -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX -# if defined(_WIN32_WCE) -# define fdopen(fd,mode) NULL /* No fdopen() */ -# else -# define fdopen(fd,type) _fdopen(fd,type) -# endif -#endif - #if defined(__BORLANDC__) && !defined(MSDOS) #pragma warn -8004 #pragma warn -8008 @@ -178,9 +166,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* provide prototypes for these when building zlib without LFS */ #if !defined(_WIN32) && \ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); #endif /* common defaults */ @@ -219,16 +207,16 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); + void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); + int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); + void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); #endif /* Diagnostic functions */ #ifdef ZLIB_DEBUG # include extern int ZLIB_INTERNAL z_verbose; - extern void ZLIB_INTERNAL z_error OF((char *m)); + extern void ZLIB_INTERNAL z_error(char *m); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} @@ -245,9 +233,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #endif #ifndef Z_SOLO - voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, - unsigned size)); - void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); + voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, + unsigned size); + void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); #endif #define ZALLOC(strm, items, size) \ diff --git a/source/externals/zlib/src/adler32.c b/source/externals/zlib/src/adler32.c index d0be4380a3..04b81d29ba 100644 --- a/source/externals/zlib/src/adler32.c +++ b/source/externals/zlib/src/adler32.c @@ -7,8 +7,6 @@ #include "zutil.h" -local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); - #define BASE 65521U /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ @@ -60,11 +58,7 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); #endif /* ========================================================================= */ -uLong ZEXPORT adler32_z(adler, buf, len) - uLong adler; - const Bytef *buf; - z_size_t len; -{ +uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) { unsigned long sum2; unsigned n; @@ -131,20 +125,12 @@ uLong ZEXPORT adler32_z(adler, buf, len) } /* ========================================================================= */ -uLong ZEXPORT adler32(adler, buf, len) - uLong adler; - const Bytef *buf; - uInt len; -{ +uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) { return adler32_z(adler, buf, len); } /* ========================================================================= */ -local uLong adler32_combine_(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) { unsigned long sum1; unsigned long sum2; unsigned rem; @@ -169,18 +155,10 @@ local uLong adler32_combine_(adler1, adler2, len2) } /* ========================================================================= */ -uLong ZEXPORT adler32_combine(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off_t len2; -{ +uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) { return adler32_combine_(adler1, adler2, len2); } -uLong ZEXPORT adler32_combine64(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) { return adler32_combine_(adler1, adler2, len2); } diff --git a/source/externals/zlib/src/compress.c b/source/externals/zlib/src/compress.c index 2ad5326c14..f43bacf7ab 100644 --- a/source/externals/zlib/src/compress.c +++ b/source/externals/zlib/src/compress.c @@ -19,13 +19,8 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ -int ZEXPORT compress2(dest, destLen, source, sourceLen, level) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; - int level; -{ +int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -65,12 +60,8 @@ int ZEXPORT compress2(dest, destLen, source, sourceLen, level) /* =========================================================================== */ -int ZEXPORT compress(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); } @@ -78,9 +69,7 @@ int ZEXPORT compress(dest, destLen, source, sourceLen) If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ -uLong ZEXPORT compressBound(sourceLen) - uLong sourceLen; -{ +uLong ZEXPORT compressBound(uLong sourceLen) { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13; } diff --git a/source/externals/zlib/src/crc32.c b/source/externals/zlib/src/crc32.c index f8357b083f..6c38f5c04c 100644 --- a/source/externals/zlib/src/crc32.c +++ b/source/externals/zlib/src/crc32.c @@ -103,19 +103,6 @@ # define ARMCRC32 #endif -/* Local functions. */ -local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); -local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); - -#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) - local z_word_t byte_swap OF((z_word_t word)); -#endif - -#if defined(W) && !defined(ARMCRC32) - local z_crc_t crc_word OF((z_word_t data)); - local z_word_t crc_word_big OF((z_word_t data)); -#endif - #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) /* Swap the bytes in a z_word_t to convert between little and big endian. Any @@ -123,9 +110,7 @@ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); instruction, if one is available. This assumes that word_t is either 32 bits or 64 bits. */ -local z_word_t byte_swap(word) - z_word_t word; -{ +local z_word_t byte_swap(z_word_t word) { # if W == 8 return (word & 0xff00000000000000) >> 56 | @@ -146,24 +131,77 @@ local z_word_t byte_swap(word) } #endif +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Table of powers of x for combining CRC-32s, filled in by make_crc_table() + * below. + */ + local z_crc_t FAR x2n_table[32]; +#else +/* ========================================================================= + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). + */ +# include "crc32.h" +#endif + /* CRC polynomial. */ #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ -#ifdef DYNAMIC_CRC_TABLE +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp(z_crc_t a, z_crc_t b) { + z_crc_t m, p; + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp(z_off64_t n, unsigned k) { + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Build the tables for byte-wise and braided CRC-32 calculations, and a table + * of powers of x for combining CRC-32s. + */ local z_crc_t FAR crc_table[256]; -local z_crc_t FAR x2n_table[32]; -local void make_crc_table OF((void)); #ifdef W local z_word_t FAR crc_big_table[256]; local z_crc_t FAR crc_braid_table[W][256]; local z_word_t FAR crc_braid_big_table[W][256]; - local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); + local void braid(z_crc_t [][256], z_word_t [][256], int, int); #endif #ifdef MAKECRCH - local void write_table OF((FILE *, const z_crc_t FAR *, int)); - local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); - local void write_table64 OF((FILE *, const z_word_t FAR *, int)); + local void write_table(FILE *, const z_crc_t FAR *, int); + local void write_table32hi(FILE *, const z_word_t FAR *, int); + local void write_table64(FILE *, const z_word_t FAR *, int); #endif /* MAKECRCH */ /* @@ -176,7 +214,6 @@ local void make_crc_table OF((void)); /* Definition of once functionality. */ typedef struct once_s once_t; -local void once OF((once_t *, void (*)(void))); /* Check for the availability of atomics. */ #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ @@ -196,10 +233,7 @@ struct once_s { invoke once() at the same time. The state must be a once_t initialized with ONCE_INIT. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!atomic_load(&state->done)) { if (atomic_flag_test_and_set(&state->begun)) while (!atomic_load(&state->done)) @@ -222,10 +256,7 @@ struct once_s { /* Test and set. Alas, not atomic, but tries to minimize the period of vulnerability. */ -local int test_and_set OF((int volatile *)); -local int test_and_set(flag) - int volatile *flag; -{ +local int test_and_set(int volatile *flag) { int was; was = *flag; @@ -234,10 +265,7 @@ local int test_and_set(flag) } /* Run the provided init() function once. This is not thread-safe. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!state->done) { if (test_and_set(&state->begun)) while (!state->done) @@ -279,8 +307,7 @@ local once_t made = ONCE_INIT; combinations of CRC register values and incoming bytes. */ -local void make_crc_table() -{ +local void make_crc_table(void) { unsigned i, j, n; z_crc_t p; @@ -447,11 +474,7 @@ local void make_crc_table() Write the 32-bit values in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table(out, table, k) - FILE *out; - const z_crc_t FAR *table; - int k; -{ +local void write_table(FILE *out, const z_crc_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -464,11 +487,7 @@ local void write_table(out, table, k) Write the high 32-bits of each value in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table32hi(out, table, k) -FILE *out; -const z_word_t FAR *table; -int k; -{ +local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -484,11 +503,7 @@ int k; bits. If not, then the type cast and format string can be adjusted accordingly. */ -local void write_table64(out, table, k) - FILE *out; - const z_word_t FAR *table; - int k; -{ +local void write_table64(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -498,8 +513,7 @@ local void write_table64(out, table, k) } /* Actually do the deed. */ -int main() -{ +int main(void) { make_crc_table(); return 0; } @@ -511,12 +525,7 @@ int main() Generate the little and big-endian braid tables for the given n and z_word_t size w. Each array must have room for w blocks of 256 elements. */ -local void braid(ltl, big, n, w) - z_crc_t ltl[][256]; - z_word_t big[][256]; - int n; - int w; -{ +local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) { int k; z_crc_t i, p, q; for (k = 0; k < w; k++) { @@ -531,69 +540,13 @@ local void braid(ltl, big, n, w) } #endif -#else /* !DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Tables for byte-wise and braided CRC-32 calculations, and a table of powers - * of x for combining CRC-32s, all made by make_crc_table(). - */ -#include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Routines used for CRC calculation. Some are also required for the table - * generation above. - */ - -/* - Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, - reflected. For speed, this requires that a not be zero. - */ -local z_crc_t multmodp(a, b) - z_crc_t a; - z_crc_t b; -{ - z_crc_t m, p; - - m = (z_crc_t)1 << 31; - p = 0; - for (;;) { - if (a & m) { - p ^= b; - if ((a & (m - 1)) == 0) - break; - } - m >>= 1; - b = b & 1 ? (b >> 1) ^ POLY : b >> 1; - } - return p; -} - -/* - Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been - initialized. - */ -local z_crc_t x2nmodp(n, k) - z_off64_t n; - unsigned k; -{ - z_crc_t p; - - p = (z_crc_t)1 << 31; /* x^0 == 1 */ - while (n) { - if (n & 1) - p = multmodp(x2n_table[k & 31], p); - n >>= 1; - k++; - } - return p; -} - /* ========================================================================= * This function can be used by asm versions of crc32(), and to force the * generation of the CRC tables in a threaded application. */ -const z_crc_t FAR * ZEXPORT get_crc_table() -{ +const z_crc_t FAR * ZEXPORT get_crc_table(void) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -619,11 +572,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table() #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ #define Z_BATCH_MIN 800 /* fewest words in a final batch */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { z_crc_t val; z_word_t crc1, crc2; const z_word_t *word; @@ -723,18 +673,14 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) least-significant byte of the word as the first byte of data, without any pre or post conditioning. This is used to combine the CRCs of each braid. */ -local z_crc_t crc_word(data) - z_word_t data; -{ +local z_crc_t crc_word(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data >> 8) ^ crc_table[data & 0xff]; return (z_crc_t)data; } -local z_word_t crc_word_big(data) - z_word_t data; -{ +local z_word_t crc_word_big(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data << 8) ^ @@ -745,11 +691,8 @@ local z_word_t crc_word_big(data) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { /* Return initial CRC, if requested. */ if (buf == Z_NULL) return 0; @@ -781,8 +724,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) words = (z_word_t const *)buf; /* Do endian check at execution time instead of compile time, since ARM - processors can change the endianess at execution time. If the - compiler knows what the endianess will be, it can optimize out the + processors can change the endianness at execution time. If the + compiler knows what the endianness will be, it can optimize out the check and the unused branch. */ endian = 1; if (*(unsigned char *)&endian) { @@ -1069,20 +1012,13 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - uInt len; -{ +unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, + uInt len) { return crc32_z(crc, buf, len); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine64(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -1090,18 +1026,12 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off_t len2; -{ +uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { return crc32_combine64(crc1, crc2, (z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen64(len2) - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -1109,17 +1039,11 @@ uLong ZEXPORT crc32_combine_gen64(len2) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen(len2) - z_off_t len2; -{ +uLong ZEXPORT crc32_combine_gen(z_off_t len2) { return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_op(crc1, crc2, op) - uLong crc1; - uLong crc2; - uLong op; -{ +uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/source/externals/zlib/src/deflate.c b/source/externals/zlib/src/deflate.c index 1ce562e4ab..4d8969fc8e 100644 --- a/source/externals/zlib/src/deflate.c +++ b/source/externals/zlib/src/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.13 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; + " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -60,9 +60,6 @@ const char deflate_copyright[] = copyright string in the executable of your product. */ -/* =========================================================================== - * Function prototypes. - */ typedef enum { need_more, /* block not completed, need more input or more output */ block_done, /* block flush performed */ @@ -70,29 +67,16 @@ typedef enum { finish_done /* finish done, accept no more input or output */ } block_state; -typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +typedef block_state (*compress_func)(deflate_state *s, int flush); /* Compression function. Returns the block state after the call. */ -local int deflateStateCheck OF((z_streamp strm)); -local void slide_hash OF((deflate_state *s)); -local void fill_window OF((deflate_state *s)); -local block_state deflate_stored OF((deflate_state *s, int flush)); -local block_state deflate_fast OF((deflate_state *s, int flush)); +local block_state deflate_stored(deflate_state *s, int flush); +local block_state deflate_fast(deflate_state *s, int flush); #ifndef FASTEST -local block_state deflate_slow OF((deflate_state *s, int flush)); -#endif -local block_state deflate_rle OF((deflate_state *s, int flush)); -local block_state deflate_huff OF((deflate_state *s, int flush)); -local void lm_init OF((deflate_state *s)); -local void putShortMSB OF((deflate_state *s, uInt b)); -local void flush_pending OF((z_streamp strm)); -local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -local uInt longest_match OF((deflate_state *s, IPos cur_match)); - -#ifdef ZLIB_DEBUG -local void check_match OF((deflate_state *s, IPos start, IPos match, - int length)); +local block_state deflate_slow(deflate_state *s, int flush); #endif +local block_state deflate_rle(deflate_state *s, int flush); +local block_state deflate_huff(deflate_state *s, int flush); /* =========================================================================== * Local data @@ -195,9 +179,12 @@ local const config configuration_table[10] = { * bit values at the expense of memory usage). We slide even when level == 0 to * keep the hash table consistent if we switch back to level > 0 later. */ -local void slide_hash(s) - deflate_state *s; -{ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + __attribute__((no_sanitize("memory"))) +# endif +#endif +local void slide_hash(deflate_state *s) { unsigned n, m; Posf *p; uInt wsize = s->w_size; @@ -221,30 +208,177 @@ local void slide_hash(s) #endif } +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) { + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(deflate_state *s) { + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize + MAX_DIST(s)) { + + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + /* ========================================================================= */ -int ZEXPORT deflateInit_(strm, level, version, stream_size) - z_streamp strm; - int level; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, + int stream_size) { return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */ } /* ========================================================================= */ -int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, - version, stream_size) - z_streamp strm; - int level; - int method; - int windowBits; - int memLevel; - int strategy; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size) { deflate_state *s; int wrap = 1; static const char my_version[] = ZLIB_VERSION; @@ -363,7 +497,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, * symbols from which it is being constructed. */ - s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); s->pending_buf_size = (ulg)s->lit_bufsize * 4; if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || @@ -373,8 +507,14 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, deflateEnd (strm); return Z_MEM_ERROR; } +#ifdef LIT_MEM + s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); + s->l_buf = s->pending_buf + (s->lit_bufsize << 2); + s->sym_end = s->lit_bufsize - 1; +#else s->sym_buf = s->pending_buf + s->lit_bufsize; s->sym_end = (s->lit_bufsize - 1) * 3; +#endif /* We avoid equality with lit_bufsize*3 because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. @@ -390,9 +530,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -local int deflateStateCheck(strm) - z_streamp strm; -{ +local int deflateStateCheck(z_streamp strm) { deflate_state *s; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -413,11 +551,8 @@ local int deflateStateCheck(strm) } /* ========================================================================= */ -int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) - z_streamp strm; - const Bytef *dictionary; - uInt dictLength; -{ +int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { deflate_state *s; uInt str, n; int wrap; @@ -482,11 +617,8 @@ int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) - z_streamp strm; - Bytef *dictionary; - uInt *dictLength; -{ +int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { deflate_state *s; uInt len; @@ -504,9 +636,7 @@ int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateResetKeep(strm) - z_streamp strm; -{ +int ZEXPORT deflateResetKeep(z_streamp strm) { deflate_state *s; if (deflateStateCheck(strm)) { @@ -541,10 +671,32 @@ int ZEXPORT deflateResetKeep(strm) return Z_OK; } +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init(deflate_state *s) { + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + /* ========================================================================= */ -int ZEXPORT deflateReset(strm) - z_streamp strm; -{ +int ZEXPORT deflateReset(z_streamp strm) { int ret; ret = deflateResetKeep(strm); @@ -554,10 +706,7 @@ int ZEXPORT deflateReset(strm) } /* ========================================================================= */ -int ZEXPORT deflateSetHeader(strm, head) - z_streamp strm; - gz_headerp head; -{ +int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) { if (deflateStateCheck(strm) || strm->state->wrap != 2) return Z_STREAM_ERROR; strm->state->gzhead = head; @@ -565,11 +714,7 @@ int ZEXPORT deflateSetHeader(strm, head) } /* ========================================================================= */ -int ZEXPORT deflatePending(strm, pending, bits) - unsigned *pending; - int *bits; - z_streamp strm; -{ +int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; if (pending != Z_NULL) *pending = strm->state->pending; @@ -579,19 +724,21 @@ int ZEXPORT deflatePending(strm, pending, bits) } /* ========================================================================= */ -int ZEXPORT deflatePrime(strm, bits, value) - z_streamp strm; - int bits; - int value; -{ +int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { deflate_state *s; int put; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; +#ifdef LIT_MEM + if (bits < 0 || bits > 16 || + (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#else if (bits < 0 || bits > 16 || s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; +#endif do { put = Buf_size - s->bi_valid; if (put > bits) @@ -606,11 +753,7 @@ int ZEXPORT deflatePrime(strm, bits, value) } /* ========================================================================= */ -int ZEXPORT deflateParams(strm, level, strategy) - z_streamp strm; - int level; - int strategy; -{ +int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) { deflate_state *s; compress_func func; @@ -655,13 +798,8 @@ int ZEXPORT deflateParams(strm, level, strategy) } /* ========================================================================= */ -int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) - z_streamp strm; - int good_length; - int max_lazy; - int nice_length; - int max_chain; -{ +int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, + int nice_length, int max_chain) { deflate_state *s; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -697,10 +835,7 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) * * Shifts are used to approximate divisions, for speed. */ -uLong ZEXPORT deflateBound(strm, sourceLen) - z_streamp strm; - uLong sourceLen; -{ +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { deflate_state *s; uLong fixedlen, storelen, wraplen; @@ -756,7 +891,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen) /* if not default parameters, return one of the conservative bounds */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen; + return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + + wraplen; /* default settings: return tight bound for that case -- ~0.03% overhead plus a small constant */ @@ -769,10 +905,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ -local void putShortMSB(s, b) - deflate_state *s; - uInt b; -{ +local void putShortMSB(deflate_state *s, uInt b) { put_byte(s, (Byte)(b >> 8)); put_byte(s, (Byte)(b & 0xff)); } @@ -783,9 +916,7 @@ local void putShortMSB(s, b) * applications may wish to modify it to avoid allocating a large * strm->next_out buffer and copying into it. (See also read_buf()). */ -local void flush_pending(strm) - z_streamp strm; -{ +local void flush_pending(z_streamp strm) { unsigned len; deflate_state *s = strm->state; @@ -816,10 +947,7 @@ local void flush_pending(strm) } while (0) /* ========================================================================= */ -int ZEXPORT deflate(strm, flush) - z_streamp strm; - int flush; -{ +int ZEXPORT deflate(z_streamp strm, int flush) { int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; @@ -1131,9 +1259,7 @@ int ZEXPORT deflate(strm, flush) } /* ========================================================================= */ -int ZEXPORT deflateEnd(strm) - z_streamp strm; -{ +int ZEXPORT deflateEnd(z_streamp strm) { int status; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1157,11 +1283,10 @@ int ZEXPORT deflateEnd(strm) * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ -int ZEXPORT deflateCopy(dest, source) - z_streamp dest; - z_streamp source; -{ +int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { #ifdef MAXSEG_64K + (void)dest; + (void)source; return Z_STREAM_ERROR; #else deflate_state *ds; @@ -1185,7 +1310,7 @@ int ZEXPORT deflateCopy(dest, source) ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { @@ -1196,10 +1321,15 @@ int ZEXPORT deflateCopy(dest, source) zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +#ifdef LIT_MEM + ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); + ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); +#else ds->sym_buf = ds->pending_buf + ds->lit_bufsize; +#endif ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; @@ -1209,66 +1339,6 @@ int ZEXPORT deflateCopy(dest, source) #endif /* MAXSEG_64K */ } -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->next_in buffer and copying from it. - * (See also flush_pending()). - */ -local unsigned read_buf(strm, buf, size) - z_streamp strm; - Bytef *buf; - unsigned size; -{ - unsigned len = strm->avail_in; - - if (len > size) len = size; - if (len == 0) return 0; - - strm->avail_in -= len; - - zmemcpy(buf, strm->next_in, len); - if (strm->state->wrap == 1) { - strm->adler = adler32(strm->adler, buf, len); - } -#ifdef GZIP - else if (strm->state->wrap == 2) { - strm->adler = crc32(strm->adler, buf, len); - } -#endif - strm->next_in += len; - strm->total_in += len; - - return len; -} - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -local void lm_init(s) - deflate_state *s; -{ - s->window_size = (ulg)2L*s->w_size; - - CLEAR_HASH(s); - - /* Set the default configuration parameters: - */ - s->max_lazy_match = configuration_table[s->level].max_lazy; - s->good_match = configuration_table[s->level].good_length; - s->nice_match = configuration_table[s->level].nice_length; - s->max_chain_length = configuration_table[s->level].max_chain; - - s->strstart = 0; - s->block_start = 0L; - s->lookahead = 0; - s->insert = 0; - s->match_length = s->prev_length = MIN_MATCH-1; - s->match_available = 0; - s->ins_h = 0; -} - #ifndef FASTEST /* =========================================================================== * Set match_start to the longest match starting at the given string and @@ -1279,10 +1349,7 @@ local void lm_init(s) * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ @@ -1430,10 +1497,7 @@ local uInt longest_match(s, cur_match) /* --------------------------------------------------------------------------- * Optimized version for FASTEST only */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ @@ -1494,19 +1558,23 @@ local uInt longest_match(s, cur_match) /* =========================================================================== * Check that the match at match_start is indeed a match. */ -local void check_match(s, start, match, length) - deflate_state *s; - IPos start, match; - int length; -{ +local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ - if (zmemcmp(s->window + match, - s->window + start, length) != EQUAL) { - fprintf(stderr, " start %u, match %u, length %d\n", - start, match, length); + Bytef *back = s->window + (int)match, *here = s->window + start; + IPos len = length; + if (match == (IPos)-1) { + /* match starts one byte before the current window -- just compare the + subsequent length-1 bytes */ + back++; + here++; + len--; + } + if (zmemcmp(back, here, len) != EQUAL) { + fprintf(stderr, " start %u, match %d, length %d\n", + start, (int)match, length); do { - fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); - } while (--length != 0); + fprintf(stderr, "(%02x %02x)", *back++, *here++); + } while (--len != 0); z_error("invalid match"); } if (z_verbose > 1) { @@ -1518,137 +1586,6 @@ local void check_match(s, start, match, length) # define check_match(s, start, match, length) #endif /* ZLIB_DEBUG */ -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -local void fill_window(s) - deflate_state *s; -{ - unsigned n; - unsigned more; /* Amount of free space at the end of the window. */ - uInt wsize = s->w_size; - - Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); - - /* Deal with !@#$% 64K limit: */ - if (sizeof(int) <= 2) { - if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - more = wsize; - - } else if (more == (unsigned)(-1)) { - /* Very unlikely, but possible on 16 bit machine if - * strstart == 0 && lookahead == 1 (input done a byte at time) - */ - more--; - } - } - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s->strstart >= wsize + MAX_DIST(s)) { - - zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); - s->match_start -= wsize; - s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ - s->block_start -= (long) wsize; - if (s->insert > s->strstart) - s->insert = s->strstart; - slide_hash(s); - more += wsize; - } - if (s->strm->avail_in == 0) break; - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - Assert(more >= 2, "more < 2"); - - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); - s->lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s->lookahead + s->insert >= MIN_MATCH) { - uInt str = s->strstart - s->insert; - s->ins_h = s->window[str]; - UPDATE_HASH(s, s->ins_h, s->window[str + 1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - while (s->insert) { - UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); -#ifndef FASTEST - s->prev[str & s->w_mask] = s->head[s->ins_h]; -#endif - s->head[s->ins_h] = (Pos)str; - str++; - s->insert--; - if (s->lookahead + s->insert < MIN_MATCH) - break; - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - if (s->high_water < s->window_size) { - ulg curr = s->strstart + (ulg)(s->lookahead); - ulg init; - - if (s->high_water < curr) { - /* Previous high water mark below current data -- zero WIN_INIT - * bytes or up to end of window, whichever is less. - */ - init = s->window_size - curr; - if (init > WIN_INIT) - init = WIN_INIT; - zmemzero(s->window + curr, (unsigned)init); - s->high_water = curr + init; - } - else if (s->high_water < (ulg)curr + WIN_INIT) { - /* High water mark at or above current data, but below current data - * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - * to end of window, whichever is less. - */ - init = (ulg)curr + WIN_INIT - s->high_water; - if (init > s->window_size - s->high_water) - init = s->window_size - s->high_water; - zmemzero(s->window + s->high_water, (unsigned)init); - s->high_water += init; - } - } - - Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - "not enough room for search"); -} - /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. @@ -1691,10 +1628,7 @@ local void fill_window(s) * copied. It is most efficient with large input and output buffers, which * maximizes the opportunities to have a single copy from next_in to next_out. */ -local block_state deflate_stored(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_stored(deflate_state *s, int flush) { /* Smallest worthy block size when not flushing or finishing. By default * this is 32K. This can be as small as 507 bytes for memLevel == 1. For * large input and output buffers, the stored block size will be larger. @@ -1878,10 +1812,7 @@ local block_state deflate_stored(s, flush) * new strings in the dictionary only for unmatched strings or for short * matches. It is used only for the fast compression options. */ -local block_state deflate_fast(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_fast(deflate_state *s, int flush) { IPos hash_head; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ @@ -1980,10 +1911,7 @@ local block_state deflate_fast(s, flush) * evaluation for matches: a match is finally adopted only if there is * no better match at the next window position. */ -local block_state deflate_slow(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_slow(deflate_state *s, int flush) { IPos hash_head; /* head of hash chain */ int bflush; /* set if current block must be flushed */ @@ -2111,10 +2039,7 @@ local block_state deflate_slow(s, flush) * one. Do not maintain a hash table. (It will be regenerated if this run of * deflate switches away from Z_RLE.) */ -local block_state deflate_rle(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_rle(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ uInt prev; /* byte at distance one to match */ Bytef *scan, *strend; /* scan goes up to strend for length of run */ @@ -2185,10 +2110,7 @@ local block_state deflate_rle(s, flush) * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. * (It will be regenerated if this run of deflate switches away from Huffman.) */ -local block_state deflate_huff(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_huff(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ for (;;) { diff --git a/source/externals/zlib/src/gzclose.c b/source/externals/zlib/src/gzclose.c index caeb99a317..48d6a86f04 100644 --- a/source/externals/zlib/src/gzclose.c +++ b/source/externals/zlib/src/gzclose.c @@ -8,9 +8,7 @@ /* gzclose() is in a separate file so that it is linked in only if it is used. That way the other gzclose functions can be used instead to avoid linking in unneeded compression or decompression routines. */ -int ZEXPORT gzclose(file) - gzFile file; -{ +int ZEXPORT gzclose(gzFile file) { #ifndef NO_GZCOMPRESS gz_statep state; diff --git a/source/externals/zlib/src/gzlib.c b/source/externals/zlib/src/gzlib.c index 55da46a453..983153cc8e 100644 --- a/source/externals/zlib/src/gzlib.c +++ b/source/externals/zlib/src/gzlib.c @@ -1,5 +1,5 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -15,10 +15,6 @@ #endif #endif -/* Local functions */ -local void gz_reset OF((gz_statep)); -local gzFile gz_open OF((const void *, int, const char *)); - #if defined UNDER_CE /* Map the Windows error number in ERROR to a locale-dependent error message @@ -30,9 +26,7 @@ local gzFile gz_open OF((const void *, int, const char *)); The gz_strwinerror function does not change the current setting of GetLastError. */ -char ZLIB_INTERNAL *gz_strwinerror(error) - DWORD error; -{ +char ZLIB_INTERNAL *gz_strwinerror(DWORD error) { static char buf[1024]; wchar_t *msgbuf; @@ -72,9 +66,7 @@ char ZLIB_INTERNAL *gz_strwinerror(error) #endif /* UNDER_CE */ /* Reset gzip file state */ -local void gz_reset(state) - gz_statep state; -{ +local void gz_reset(gz_statep state) { state->x.have = 0; /* no output data available */ if (state->mode == GZ_READ) { /* for reading ... */ state->eof = 0; /* not at end of file */ @@ -90,11 +82,7 @@ local void gz_reset(state) } /* Open a gzip file either by name or file descriptor. */ -local gzFile gz_open(path, fd, mode) - const void *path; - int fd; - const char *mode; -{ +local gzFile gz_open(const void *path, int fd, const char *mode) { gz_statep state; z_size_t len; int oflag; @@ -269,26 +257,17 @@ local gzFile gz_open(path, fd, mode) } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen64(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen64(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzdopen(fd, mode) - int fd; - const char *mode; -{ +gzFile ZEXPORT gzdopen(int fd, const char *mode) { char *path; /* identifier for error messages */ gzFile gz; @@ -306,19 +285,13 @@ gzFile ZEXPORT gzdopen(fd, mode) /* -- see zlib.h -- */ #ifdef WIDECHAR -gzFile ZEXPORT gzopen_w(path, mode) - const wchar_t *path; - const char *mode; -{ +gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) { return gz_open(path, -2, mode); } #endif /* -- see zlib.h -- */ -int ZEXPORT gzbuffer(file, size) - gzFile file; - unsigned size; -{ +int ZEXPORT gzbuffer(gzFile file, unsigned size) { gz_statep state; /* get internal structure and check integrity */ @@ -335,16 +308,14 @@ int ZEXPORT gzbuffer(file, size) /* check and set requested size */ if ((size << 1) < size) return -1; /* need to be able to double it */ - if (size < 2) - size = 2; /* need two bytes to check magic header */ + if (size < 8) + size = 8; /* needed to behave well with flushing */ state->want = size; return 0; } /* -- see zlib.h -- */ -int ZEXPORT gzrewind(file) - gzFile file; -{ +int ZEXPORT gzrewind(gzFile file) { gz_statep state; /* get internal structure */ @@ -365,11 +336,7 @@ int ZEXPORT gzrewind(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzseek64(file, offset, whence) - gzFile file; - z_off64_t offset; - int whence; -{ +z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) { unsigned n; z_off64_t ret; gz_statep state; @@ -442,11 +409,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzseek(file, offset, whence) - gzFile file; - z_off_t offset; - int whence; -{ +z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) { z_off64_t ret; ret = gzseek64(file, (z_off64_t)offset, whence); @@ -454,9 +417,7 @@ z_off_t ZEXPORT gzseek(file, offset, whence) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gztell64(file) - gzFile file; -{ +z_off64_t ZEXPORT gztell64(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -471,9 +432,7 @@ z_off64_t ZEXPORT gztell64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gztell(file) - gzFile file; -{ +z_off_t ZEXPORT gztell(gzFile file) { z_off64_t ret; ret = gztell64(file); @@ -481,9 +440,7 @@ z_off_t ZEXPORT gztell(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzoffset64(file) - gzFile file; -{ +z_off64_t ZEXPORT gzoffset64(gzFile file) { z_off64_t offset; gz_statep state; @@ -504,9 +461,7 @@ z_off64_t ZEXPORT gzoffset64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzoffset(file) - gzFile file; -{ +z_off_t ZEXPORT gzoffset(gzFile file) { z_off64_t ret; ret = gzoffset64(file); @@ -514,9 +469,7 @@ z_off_t ZEXPORT gzoffset(file) } /* -- see zlib.h -- */ -int ZEXPORT gzeof(file) - gzFile file; -{ +int ZEXPORT gzeof(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -531,10 +484,7 @@ int ZEXPORT gzeof(file) } /* -- see zlib.h -- */ -const char * ZEXPORT gzerror(file, errnum) - gzFile file; - int *errnum; -{ +const char * ZEXPORT gzerror(gzFile file, int *errnum) { gz_statep state; /* get internal structure and check integrity */ @@ -552,9 +502,7 @@ const char * ZEXPORT gzerror(file, errnum) } /* -- see zlib.h -- */ -void ZEXPORT gzclearerr(file) - gzFile file; -{ +void ZEXPORT gzclearerr(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -578,11 +526,7 @@ void ZEXPORT gzclearerr(file) memory). Simply save the error message as a static string. If there is an allocation failure constructing the error message, then convert the error to out of memory. */ -void ZLIB_INTERNAL gz_error(state, err, msg) - gz_statep state; - int err; - const char *msg; -{ +void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { /* free previously allocated message and clear */ if (state->msg != NULL) { if (state->err != Z_MEM_ERROR) @@ -619,21 +563,20 @@ void ZLIB_INTERNAL gz_error(state, err, msg) #endif } -#ifndef INT_MAX /* portably return maximum value for an int (when limits.h presumed not available) -- we need to do this to cover cases where 2's complement not used, since C standard permits 1's complement and sign-bit representations, otherwise we could just use ((unsigned)-1) >> 1 */ -unsigned ZLIB_INTERNAL gz_intmax() -{ - unsigned p, q; - - p = 1; +unsigned ZLIB_INTERNAL gz_intmax(void) { +#ifdef INT_MAX + return INT_MAX; +#else + unsigned p = 1, q; do { q = p; p <<= 1; p++; } while (p > q); return q >> 1; -} #endif +} diff --git a/source/externals/zlib/src/gzread.c b/source/externals/zlib/src/gzread.c index dd77381596..4168cbc887 100644 --- a/source/externals/zlib/src/gzread.c +++ b/source/externals/zlib/src/gzread.c @@ -5,25 +5,12 @@ #include "gzguts.h" -/* Local functions */ -local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); -local int gz_avail OF((gz_statep)); -local int gz_look OF((gz_statep)); -local int gz_decomp OF((gz_statep)); -local int gz_fetch OF((gz_statep)); -local int gz_skip OF((gz_statep, z_off64_t)); -local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); - /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from state->fd, and update state->eof, state->err, and state->msg as appropriate. This function needs to loop on read(), since read() is not guaranteed to read the number of bytes requested, depending on the type of descriptor. */ -local int gz_load(state, buf, len, have) - gz_statep state; - unsigned char *buf; - unsigned len; - unsigned *have; -{ +local int gz_load(gz_statep state, unsigned char *buf, unsigned len, + unsigned *have) { int ret; unsigned get, max = ((unsigned)-1 >> 2) + 1; @@ -53,9 +40,7 @@ local int gz_load(state, buf, len, have) If strm->avail_in != 0, then the current data is moved to the beginning of the input buffer, and then the remainder of the buffer is loaded with the available data from the input file. */ -local int gz_avail(state) - gz_statep state; -{ +local int gz_avail(gz_statep state) { unsigned got; z_streamp strm = &(state->strm); @@ -88,9 +73,7 @@ local int gz_avail(state) case, all further file reads will be directly to either the output buffer or a user buffer. If decompressing, the inflate state will be initialized. gz_look() will return 0 on success or -1 on failure. */ -local int gz_look(state) - gz_statep state; -{ +local int gz_look(gz_statep state) { z_streamp strm = &(state->strm); /* allocate read buffers and inflate memory */ @@ -170,9 +153,7 @@ local int gz_look(state) data. If the gzip stream completes, state->how is reset to LOOK to look for the next gzip stream or raw data, once state->x.have is depleted. Returns 0 on success, -1 on failure. */ -local int gz_decomp(state) - gz_statep state; -{ +local int gz_decomp(gz_statep state) { int ret = Z_OK; unsigned had; z_streamp strm = &(state->strm); @@ -224,9 +205,7 @@ local int gz_decomp(state) looked for to determine whether to copy or decompress. Returns -1 on error, otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the end of the input file has been reached and all data has been processed. */ -local int gz_fetch(state) - gz_statep state; -{ +local int gz_fetch(gz_statep state) { z_streamp strm = &(state->strm); do { @@ -254,10 +233,7 @@ local int gz_fetch(state) } /* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ -local int gz_skip(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_skip(gz_statep state, z_off64_t len) { unsigned n; /* skip over len bytes or reach end-of-file, whichever comes first */ @@ -289,11 +265,7 @@ local int gz_skip(state, len) input. Return the number of bytes read. If zero is returned, either the end of file was reached, or there was an error. state->err must be consulted in that case to determine which. */ -local z_size_t gz_read(state, buf, len) - gz_statep state; - voidp buf; - z_size_t len; -{ +local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) { z_size_t got; unsigned n; @@ -370,11 +342,7 @@ local z_size_t gz_read(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzread(file, buf, len) - gzFile file; - voidp buf; - unsigned len; -{ +int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -406,12 +374,7 @@ int ZEXPORT gzread(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfread(buf, size, nitems, file) - voidp buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) { z_size_t len; gz_statep state; @@ -442,9 +405,7 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file) #else # undef gzgetc #endif -int ZEXPORT gzgetc(file) - gzFile file; -{ +int ZEXPORT gzgetc(gzFile file) { unsigned char buf[1]; gz_statep state; @@ -469,17 +430,12 @@ int ZEXPORT gzgetc(file) return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; } -int ZEXPORT gzgetc_(file) -gzFile file; -{ +int ZEXPORT gzgetc_(gzFile file) { return gzgetc(file); } /* -- see zlib.h -- */ -int ZEXPORT gzungetc(c, file) - int c; - gzFile file; -{ +int ZEXPORT gzungetc(int c, gzFile file) { gz_statep state; /* get internal structure */ @@ -487,6 +443,10 @@ int ZEXPORT gzungetc(c, file) return -1; state = (gz_statep)file; + /* in case this was just opened, set up the input buffer */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + /* check that we're reading and that there's no (serious) error */ if (state->mode != GZ_READ || (state->err != Z_OK && state->err != Z_BUF_ERROR)) @@ -536,11 +496,7 @@ int ZEXPORT gzungetc(c, file) } /* -- see zlib.h -- */ -char * ZEXPORT gzgets(file, buf, len) - gzFile file; - char *buf; - int len; -{ +char * ZEXPORT gzgets(gzFile file, char *buf, int len) { unsigned left, n; char *str; unsigned char *eol; @@ -600,9 +556,7 @@ char * ZEXPORT gzgets(file, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzdirect(file) - gzFile file; -{ +int ZEXPORT gzdirect(gzFile file) { gz_statep state; /* get internal structure */ @@ -620,9 +574,7 @@ int ZEXPORT gzdirect(file) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_r(file) - gzFile file; -{ +int ZEXPORT gzclose_r(gzFile file) { int ret, err; gz_statep state; diff --git a/source/externals/zlib/src/gzwrite.c b/source/externals/zlib/src/gzwrite.c index eb8a0e5893..435b4621b5 100644 --- a/source/externals/zlib/src/gzwrite.c +++ b/source/externals/zlib/src/gzwrite.c @@ -5,18 +5,10 @@ #include "gzguts.h" -/* Local functions */ -local int gz_init OF((gz_statep)); -local int gz_comp OF((gz_statep, int)); -local int gz_zero OF((gz_statep, z_off64_t)); -local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); - /* Initialize state for writing a gzip file. Mark initialization by setting state->size to non-zero. Return -1 on a memory allocation failure, or 0 on success. */ -local int gz_init(state) - gz_statep state; -{ +local int gz_init(gz_statep state) { int ret; z_streamp strm = &(state->strm); @@ -70,10 +62,7 @@ local int gz_init(state) deflate() flush value. If flush is Z_FINISH, then the deflate() state is reset to start a new gzip stream. If gz->direct is true, then simply write to the output file without compressing, and ignore flush. */ -local int gz_comp(state, flush) - gz_statep state; - int flush; -{ +local int gz_comp(gz_statep state, int flush) { int ret, writ; unsigned have, put, max = ((unsigned)-1 >> 2) + 1; z_streamp strm = &(state->strm); @@ -151,10 +140,7 @@ local int gz_comp(state, flush) /* Compress len zeros to output. Return -1 on a write error or memory allocation failure by gz_comp(), or 0 on success. */ -local int gz_zero(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_zero(gz_statep state, z_off64_t len) { int first; unsigned n; z_streamp strm = &(state->strm); @@ -184,11 +170,7 @@ local int gz_zero(state, len) /* Write len bytes from buf to file. Return the number of bytes written. If the returned value is less than len, then there was an error. */ -local z_size_t gz_write(state, buf, len) - gz_statep state; - voidpc buf; - z_size_t len; -{ +local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { z_size_t put = len; /* if len is zero, avoid unnecessary operations */ @@ -252,11 +234,7 @@ local z_size_t gz_write(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzwrite(file, buf, len) - gzFile file; - voidpc buf; - unsigned len; -{ +int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -280,12 +258,8 @@ int ZEXPORT gzwrite(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) - voidpc buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, + gzFile file) { z_size_t len; gz_statep state; @@ -310,10 +284,7 @@ z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) } /* -- see zlib.h -- */ -int ZEXPORT gzputc(file, c) - gzFile file; - int c; -{ +int ZEXPORT gzputc(gzFile file, int c) { unsigned have; unsigned char buf[1]; gz_statep state; @@ -358,10 +329,7 @@ int ZEXPORT gzputc(file, c) } /* -- see zlib.h -- */ -int ZEXPORT gzputs(file, s) - gzFile file; - const char *s; -{ +int ZEXPORT gzputs(gzFile file, const char *s) { z_size_t len, put; gz_statep state; @@ -388,8 +356,7 @@ int ZEXPORT gzputs(file, s) #include /* -- see zlib.h -- */ -int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) -{ +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { int len; unsigned left; char *next; @@ -460,8 +427,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) return len; } -int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) { va_list va; int ret; @@ -474,13 +440,10 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - gzFile file; - const char *format; - int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, + int a4, int a5, int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, int a15, int a16, + int a17, int a18, int a19, int a20) { unsigned len, left; char *next; gz_statep state; @@ -562,10 +525,7 @@ int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, #endif /* -- see zlib.h -- */ -int ZEXPORT gzflush(file, flush) - gzFile file; - int flush; -{ +int ZEXPORT gzflush(gzFile file, int flush) { gz_statep state; /* get internal structure */ @@ -594,11 +554,7 @@ int ZEXPORT gzflush(file, flush) } /* -- see zlib.h -- */ -int ZEXPORT gzsetparams(file, level, strategy) - gzFile file; - int level; - int strategy; -{ +int ZEXPORT gzsetparams(gzFile file, int level, int strategy) { gz_statep state; z_streamp strm; @@ -609,7 +565,7 @@ int ZEXPORT gzsetparams(file, level, strategy) strm = &(state->strm); /* check that we're writing and that there's no error */ - if (state->mode != GZ_WRITE || state->err != Z_OK) + if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) return Z_STREAM_ERROR; /* if no change is requested, then do nothing */ @@ -636,9 +592,7 @@ int ZEXPORT gzsetparams(file, level, strategy) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_w(file) - gzFile file; -{ +int ZEXPORT gzclose_w(gzFile file) { int ret = Z_OK; gz_statep state; diff --git a/source/externals/zlib/src/infback.c b/source/externals/zlib/src/infback.c index babeaf1806..e7b25b307a 100644 --- a/source/externals/zlib/src/infback.c +++ b/source/externals/zlib/src/infback.c @@ -15,9 +15,6 @@ #include "inflate.h" #include "inffast.h" -/* function prototypes */ -local void fixedtables OF((struct inflate_state FAR *state)); - /* strm provides memory allocation functions in zalloc and zfree, or Z_NULL to use the library memory allocation functions. @@ -25,13 +22,9 @@ local void fixedtables OF((struct inflate_state FAR *state)); windowBits is in the range 8..15, and window is a user-supplied window and output buffer that is 2**windowBits bytes. */ -int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) -z_streamp strm; -int windowBits; -unsigned char FAR *window; -const char *version; -int stream_size; -{ +int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, const char *version, + int stream_size) { struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -80,9 +73,7 @@ int stream_size; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -248,13 +239,8 @@ struct inflate_state FAR *state; inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ -int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) -z_streamp strm; -in_func in; -void FAR *in_desc; -out_func out; -void FAR *out_desc; -{ +int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -632,9 +618,7 @@ void FAR *out_desc; return ret; } -int ZEXPORT inflateBackEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateBackEnd(z_streamp strm) { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) return Z_STREAM_ERROR; ZFREE(strm, strm->state); diff --git a/source/externals/zlib/src/inffast.c b/source/externals/zlib/src/inffast.c index 1fec7f363f..9354676e78 100644 --- a/source/externals/zlib/src/inffast.c +++ b/source/externals/zlib/src/inffast.c @@ -47,10 +47,7 @@ requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ -void ZLIB_INTERNAL inflate_fast(strm, start) -z_streamp strm; -unsigned start; /* inflate()'s starting value for strm->avail_out */ -{ +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) { struct inflate_state FAR *state; z_const unsigned char FAR *in; /* local strm->next_in */ z_const unsigned char FAR *last; /* have enough input while in < last */ diff --git a/source/externals/zlib/src/inflate.c b/source/externals/zlib/src/inflate.c index 8acbef44e9..94ecff015a 100644 --- a/source/externals/zlib/src/inflate.c +++ b/source/externals/zlib/src/inflate.c @@ -91,20 +91,7 @@ # endif #endif -/* function prototypes */ -local int inflateStateCheck OF((z_streamp strm)); -local void fixedtables OF((struct inflate_state FAR *state)); -local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, - unsigned copy)); -#ifdef BUILDFIXED - void makefixed OF((void)); -#endif -local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, - unsigned len)); - -local int inflateStateCheck(strm) -z_streamp strm; -{ +local int inflateStateCheck(z_streamp strm) { struct inflate_state FAR *state; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -116,9 +103,7 @@ z_streamp strm; return 0; } -int ZEXPORT inflateResetKeep(strm) -z_streamp strm; -{ +int ZEXPORT inflateResetKeep(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -142,9 +127,7 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateReset(strm) -z_streamp strm; -{ +int ZEXPORT inflateReset(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -155,10 +138,7 @@ z_streamp strm; return inflateResetKeep(strm); } -int ZEXPORT inflateReset2(strm, windowBits) -z_streamp strm; -int windowBits; -{ +int ZEXPORT inflateReset2(z_streamp strm, int windowBits) { int wrap; struct inflate_state FAR *state; @@ -195,12 +175,8 @@ int windowBits; return inflateReset(strm); } -int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) -z_streamp strm; -int windowBits; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size) { int ret; struct inflate_state FAR *state; @@ -239,22 +215,17 @@ int stream_size; return ret; } -int ZEXPORT inflateInit_(strm, version, stream_size) -z_streamp strm; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit_(z_streamp strm, const char *version, + int stream_size) { return inflateInit2_(strm, DEF_WBITS, version, stream_size); } -int ZEXPORT inflatePrime(strm, bits, value) -z_streamp strm; -int bits; -int value; -{ +int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; state = (struct inflate_state FAR *)strm->state; if (bits < 0) { state->hold = 0; @@ -278,9 +249,7 @@ int value; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -342,7 +311,7 @@ struct inflate_state FAR *state; a.out > inffixed.h */ -void makefixed() +void makefixed(void) { unsigned low, size; struct inflate_state state; @@ -396,11 +365,7 @@ void makefixed() output will fall in the output data, making match copies simpler and faster. The advantage may be dependent on the size of the processor's data caches. */ -local int updatewindow(strm, end, copy) -z_streamp strm; -const Bytef *end; -unsigned copy; -{ +local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) { struct inflate_state FAR *state; unsigned dist; @@ -622,10 +587,7 @@ unsigned copy; will return Z_BUF_ERROR if it has not reached the end of the stream. */ -int ZEXPORT inflate(strm, flush) -z_streamp strm; -int flush; -{ +int ZEXPORT inflate(z_streamp strm, int flush) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -1301,9 +1263,7 @@ int flush; return ret; } -int ZEXPORT inflateEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateEnd(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1315,11 +1275,8 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) -z_streamp strm; -Bytef *dictionary; -uInt *dictLength; -{ +int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { struct inflate_state FAR *state; /* check state */ @@ -1338,11 +1295,8 @@ uInt *dictLength; return Z_OK; } -int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) -z_streamp strm; -const Bytef *dictionary; -uInt dictLength; -{ +int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { struct inflate_state FAR *state; unsigned long dictid; int ret; @@ -1373,10 +1327,7 @@ uInt dictLength; return Z_OK; } -int ZEXPORT inflateGetHeader(strm, head) -z_streamp strm; -gz_headerp head; -{ +int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) { struct inflate_state FAR *state; /* check state */ @@ -1401,11 +1352,8 @@ gz_headerp head; called again with more data and the *have state. *have is initialized to zero for the first call. */ -local unsigned syncsearch(have, buf, len) -unsigned FAR *have; -const unsigned char FAR *buf; -unsigned len; -{ +local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, + unsigned len) { unsigned got; unsigned next; @@ -1424,9 +1372,7 @@ unsigned len; return next; } -int ZEXPORT inflateSync(strm) -z_streamp strm; -{ +int ZEXPORT inflateSync(z_streamp strm) { unsigned len; /* number of bytes to look at or looked at */ int flags; /* temporary to save header status */ unsigned long in, out; /* temporary to save total_in and total_out */ @@ -1441,7 +1387,7 @@ z_streamp strm; /* if first time, start search in bit buffer */ if (state->mode != SYNC) { state->mode = SYNC; - state->hold <<= state->bits & 7; + state->hold >>= state->bits & 7; state->bits -= state->bits & 7; len = 0; while (state->bits >= 8) { @@ -1482,9 +1428,7 @@ z_streamp strm; block. When decompressing, PPP checks that at the end of input packet, inflate is waiting for these length bytes. */ -int ZEXPORT inflateSyncPoint(strm) -z_streamp strm; -{ +int ZEXPORT inflateSyncPoint(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1492,10 +1436,7 @@ z_streamp strm; return state->mode == STORED && state->bits == 0; } -int ZEXPORT inflateCopy(dest, source) -z_streamp dest; -z_streamp source; -{ +int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) { struct inflate_state FAR *state; struct inflate_state FAR *copy; unsigned char FAR *window; @@ -1539,10 +1480,7 @@ z_streamp source; return Z_OK; } -int ZEXPORT inflateUndermine(strm, subvert) -z_streamp strm; -int subvert; -{ +int ZEXPORT inflateUndermine(z_streamp strm, int subvert) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1557,10 +1495,7 @@ int subvert; #endif } -int ZEXPORT inflateValidate(strm, check) -z_streamp strm; -int check; -{ +int ZEXPORT inflateValidate(z_streamp strm, int check) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1572,9 +1507,7 @@ int check; return Z_OK; } -long ZEXPORT inflateMark(strm) -z_streamp strm; -{ +long ZEXPORT inflateMark(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) @@ -1585,9 +1518,7 @@ z_streamp strm; (state->mode == MATCH ? state->was - state->length : 0)); } -unsigned long ZEXPORT inflateCodesUsed(strm) -z_streamp strm; -{ +unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return (unsigned long)-1; state = (struct inflate_state FAR *)strm->state; diff --git a/source/externals/zlib/src/inftrees.c b/source/externals/zlib/src/inftrees.c index 57d2793bec..98cfe16445 100644 --- a/source/externals/zlib/src/inftrees.c +++ b/source/externals/zlib/src/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.13 Copyright 1995-2022 Mark Adler "; + " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,14 +29,9 @@ const char inflate_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) -codetype type; -unsigned short FAR *lens; -unsigned codes; -code FAR * FAR *table; -unsigned FAR *bits; -unsigned short FAR *work; -{ +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work) { unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */ @@ -62,7 +57,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 194, 65}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/source/externals/zlib/src/trees.c b/source/externals/zlib/src/trees.c index 5f305c4722..6a523ef34e 100644 --- a/source/externals/zlib/src/trees.c +++ b/source/externals/zlib/src/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2021 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -122,39 +122,116 @@ struct static_tree_desc_s { int max_length; /* max bit length for the codes */ }; -local const static_tree_desc static_l_desc = +#ifdef NO_INIT_GLOBAL_POINTERS +# define TCONST +#else +# define TCONST const +#endif + +local TCONST static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; -local const static_tree_desc static_d_desc = +local TCONST static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; -local const static_tree_desc static_bl_desc = +local TCONST static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== - * Local (static) routines in this file. + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} -local void tr_static_init OF((void)); -local void init_block OF((deflate_state *s)); -local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); -local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); -local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); -local void build_tree OF((deflate_state *s, tree_desc *desc)); -local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local int build_bl_tree OF((deflate_state *s)); -local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, - int blcodes)); -local void compress_block OF((deflate_state *s, const ct_data *ltree, - const ct_data *dtree)); -local int detect_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned code, int len)); -local void bi_windup OF((deflate_state *s)); -local void bi_flush OF((deflate_state *s)); +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(unsigned code, int len) { + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(deflate_state *s) { + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(deflate_state *s) { + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent + 7) & ~7; +#endif +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) { + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits - 1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, + "inconsistent bit counts"); + Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); + + for (n = 0; n <= max_code; n++) { + int len = tree[n].Len; + if (len == 0) continue; + /* Now reverse the bits */ + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); + + Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", + n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); + } +} #ifdef GEN_TREES_H -local void gen_trees_header OF((void)); +local void gen_trees_header(void); #endif #ifndef ZLIB_DEBUG @@ -167,27 +244,12 @@ local void gen_trees_header OF((void)); send_bits(s, tree[c].Code, tree[c].Len); } #endif -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -#define put_short(s, w) { \ - put_byte(s, (uch)((w) & 0xff)); \ - put_byte(s, (uch)((ush)(w) >> 8)); \ -} - /* =========================================================================== * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ #ifdef ZLIB_DEBUG -local void send_bits OF((deflate_state *s, int value, int length)); - -local void send_bits(s, value, length) - deflate_state *s; - int value; /* value to send */ - int length; /* number of bits */ -{ +local void send_bits(deflate_state *s, int value, int length) { Tracevv((stderr," l %2d v %4x ", length, value)); Assert(length > 0 && length <= 15, "invalid length"); s->bits_sent += (ulg)length; @@ -229,8 +291,7 @@ local void send_bits(s, value, length) /* =========================================================================== * Initialize the various 'constant' tables. */ -local void tr_static_init() -{ +local void tr_static_init(void) { #if defined(GEN_TREES_H) || !defined(STDC) static int static_init_done = 0; int n; /* iterates over tree elements */ @@ -323,8 +384,7 @@ local void tr_static_init() ((i) == (last)? "\n};\n\n" : \ ((i) % (width) == (width) - 1 ? ",\n" : ", ")) -void gen_trees_header() -{ +void gen_trees_header(void) { FILE *header = fopen("trees.h", "w"); int i; @@ -373,12 +433,26 @@ void gen_trees_header() } #endif /* GEN_TREES_H */ +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(deflate_state *s) { + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->sym_next = s->matches = 0; +} + /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ -void ZLIB_INTERNAL _tr_init(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_init(deflate_state *s) { tr_static_init(); s->l_desc.dyn_tree = s->dyn_ltree; @@ -401,24 +475,6 @@ void ZLIB_INTERNAL _tr_init(s) init_block(s); } -/* =========================================================================== - * Initialize a new block. - */ -local void init_block(s) - deflate_state *s; -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; - - s->dyn_ltree[END_BLOCK].Freq = 1; - s->opt_len = s->static_len = 0L; - s->sym_next = s->matches = 0; -} - #define SMALLEST 1 /* Index within the heap array of least frequent node in the Huffman tree */ @@ -448,11 +504,7 @@ local void init_block(s) * when the heap property is re-established (each father smaller than its * two sons). */ -local void pqdownheap(s, tree, k) - deflate_state *s; - ct_data *tree; /* the tree to restore */ - int k; /* node to move down */ -{ +local void pqdownheap(deflate_state *s, ct_data *tree, int k) { int v = s->heap[k]; int j = k << 1; /* left son of k */ while (j <= s->heap_len) { @@ -483,10 +535,7 @@ local void pqdownheap(s, tree, k) * The length opt_len is updated; static_len is also updated if stree is * not null. */ -local void gen_bitlen(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void gen_bitlen(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; int max_code = desc->max_code; const ct_data *stree = desc->stat_desc->static_tree; @@ -561,48 +610,9 @@ local void gen_bitlen(s, desc) } } -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes(tree, max_code, bl_count) - ct_data *tree; /* the tree to decorate */ - int max_code; /* largest code with non zero frequency */ - ushf *bl_count; /* number of codes at each bit length */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - unsigned code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - code = (code + bl_count[bits - 1]) << 1; - next_code[bits] = (ush)code; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, - "inconsistent bit counts"); - Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); - - for (n = 0; n <= max_code; n++) { - int len = tree[n].Len; - if (len == 0) continue; - /* Now reverse the bits */ - tree[n].Code = (ush)bi_reverse(next_code[len]++, len); - - Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", - n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); - } -} +#ifdef DUMP_BL_TREE +# include +#endif /* =========================================================================== * Construct one Huffman tree and assigns the code bit strings and lengths. @@ -612,10 +622,7 @@ local void gen_codes(tree, max_code, bl_count) * and corresponding code. The length opt_len is updated; static_len is * also updated if stree is not null. The field max_code is set. */ -local void build_tree(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void build_tree(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; const ct_data *stree = desc->stat_desc->static_tree; int elems = desc->stat_desc->elems; @@ -700,11 +707,7 @@ local void build_tree(s, desc) * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ -local void scan_tree(s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void scan_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -745,11 +748,7 @@ local void scan_tree(s, tree, max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -local void send_tree(s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void send_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -796,9 +795,7 @@ local void send_tree(s, tree, max_code) * Construct the Huffman tree for the bit lengths and return the index in * bl_order of the last bit length code to send. */ -local int build_bl_tree(s) - deflate_state *s; -{ +local int build_bl_tree(deflate_state *s) { int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ @@ -831,10 +828,8 @@ local int build_bl_tree(s) * lengths of the bit length codes, the literal tree and the distance tree. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. */ -local void send_all_trees(s, lcodes, dcodes, blcodes) - deflate_state *s; - int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ +local void send_all_trees(deflate_state *s, int lcodes, int dcodes, + int blcodes) { int rank; /* index in bl_order */ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); @@ -860,12 +855,8 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) /* =========================================================================== * Send a stored block */ -void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); @@ -884,9 +875,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) /* =========================================================================== * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) */ -void ZLIB_INTERNAL _tr_flush_bits(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) { bi_flush(s); } @@ -894,9 +883,7 @@ void ZLIB_INTERNAL _tr_flush_bits(s) * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. */ -void ZLIB_INTERNAL _tr_align(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_align(deflate_state *s) { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef ZLIB_DEBUG @@ -905,16 +892,108 @@ void ZLIB_INTERNAL _tr_align(s) bi_flush(s); } +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(deflate_state *s, const ct_data *ltree, + const ct_data *dtree) { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned sx = 0; /* running index in symbol buffers */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->sym_next != 0) do { +#ifdef LIT_MEM + dist = s->d_buf[sx]; + lc = s->l_buf[sx++]; +#else + dist = s->sym_buf[sx++] & 0xff; + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; + lc = s->sym_buf[sx++]; +#endif + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check for no overlay of pending_buf on needed symbols */ +#ifdef LIT_MEM + Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); +#else + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +#endif + + } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "block list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local int detect_data_type(deflate_state *s) { + /* block_mask is the bit mask of block-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long block_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("allow-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "block-listed" or "allow-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static * trees or store, and write out the encoded block. */ -void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block, or NULL if too old */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ @@ -1011,14 +1090,15 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int ZLIB_INTERNAL _tr_tally(s, dist, lc) - deflate_state *s; - unsigned dist; /* distance of matched string */ - unsigned lc; /* match length - MIN_MATCH or unmatched char (dist==0) */ -{ +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { +#ifdef LIT_MEM + s->d_buf[s->sym_next] = (ush)dist; + s->l_buf[s->sym_next++] = (uch)lc; +#else s->sym_buf[s->sym_next++] = (uch)dist; s->sym_buf[s->sym_next++] = (uch)(dist >> 8); s->sym_buf[s->sym_next++] = (uch)lc; +#endif if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; @@ -1035,147 +1115,3 @@ int ZLIB_INTERNAL _tr_tally(s, dist, lc) } return (s->sym_next == s->sym_end); } - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block(s, ltree, dtree) - deflate_state *s; - const ct_data *ltree; /* literal tree */ - const ct_data *dtree; /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned sx = 0; /* running index in sym_buf */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (s->sym_next != 0) do { - dist = s->sym_buf[sx++] & 0xff; - dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; - lc = s->sym_buf[sx++]; - if (dist == 0) { - send_code(s, lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= (unsigned)base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and sym_buf is ok: */ - Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); - - } while (sx < s->sym_next); - - send_code(s, END_BLOCK, ltree); -} - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "block list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -local int detect_data_type(s) - deflate_state *s; -{ - /* block_mask is the bit mask of block-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - unsigned long block_mask = 0xf3ffc07fUL; - int n; - - /* Check for non-textual ("block-listed") bytes. */ - for (n = 0; n <= 31; n++, block_mask >>= 1) - if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) - return Z_BINARY; - - /* Check for textual ("allow-listed") bytes. */ - if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 - || s->dyn_ltree[13].Freq != 0) - return Z_TEXT; - for (n = 32; n < LITERALS; n++) - if (s->dyn_ltree[n].Freq != 0) - return Z_TEXT; - - /* There are no "block-listed" or "allow-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -local unsigned bi_reverse(code, len) - unsigned code; /* the value to invert */ - int len; /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -local void bi_flush(s) - deflate_state *s; -{ - if (s->bi_valid == 16) { - put_short(s, s->bi_buf); - s->bi_buf = 0; - s->bi_valid = 0; - } else if (s->bi_valid >= 8) { - put_byte(s, (Byte)s->bi_buf); - s->bi_buf >>= 8; - s->bi_valid -= 8; - } -} - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -local void bi_windup(s) - deflate_state *s; -{ - if (s->bi_valid > 8) { - put_short(s, s->bi_buf); - } else if (s->bi_valid > 0) { - put_byte(s, (Byte)s->bi_buf); - } - s->bi_buf = 0; - s->bi_valid = 0; -#ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent + 7) & ~7; -#endif -} diff --git a/source/externals/zlib/src/uncompr.c b/source/externals/zlib/src/uncompr.c index f9532f46c1..5e256663b4 100644 --- a/source/externals/zlib/src/uncompr.c +++ b/source/externals/zlib/src/uncompr.c @@ -24,12 +24,8 @@ Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. */ -int ZEXPORT uncompress2(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong *sourceLen; -{ +int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong *sourceLen) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -83,11 +79,7 @@ int ZEXPORT uncompress2(dest, destLen, source, sourceLen) err; } -int ZEXPORT uncompress(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return uncompress2(dest, destLen, source, &sourceLen); } diff --git a/source/externals/zlib/src/zconf.h.cmakein b/source/externals/zlib/src/zconf.h.cmakein index 247ba2461d..0abe3bc9d8 100644 --- a/source/externals/zlib/src/zconf.h.cmakein +++ b/source/externals/zlib/src/zconf.h.cmakein @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -243,7 +243,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -298,14 +302,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -522,7 +518,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/source/externals/zlib/src/zconf.h.in b/source/externals/zlib/src/zconf.h.in index 3197da7a83..62adc8d843 100644 --- a/source/externals/zlib/src/zconf.h.in +++ b/source/externals/zlib/src/zconf.h.in @@ -1,8 +1,9 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #ifndef ZCONF_H #define ZCONF_H @@ -37,6 +38,9 @@ # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound @@ -237,7 +241,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -292,14 +300,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have @@ -348,6 +348,9 @@ # ifdef FAR # undef FAR # endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ @@ -466,11 +469,18 @@ typedef uLong FAR uLongf; # undef _LARGEFILE64_SOURCE #endif -#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# if defined(Z_HAVE_UNISTD_H) # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include /* for off_t */ @@ -506,7 +516,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/source/externals/zlib/src/zutil.c b/source/externals/zlib/src/zutil.c index 9543ae825e..b1c5d2d3c6 100644 --- a/source/externals/zlib/src/zutil.c +++ b/source/externals/zlib/src/zutil.c @@ -24,13 +24,11 @@ z_const char * const z_errmsg[10] = { }; -const char * ZEXPORT zlibVersion() -{ +const char * ZEXPORT zlibVersion(void) { return ZLIB_VERSION; } -uLong ZEXPORT zlibCompileFlags() -{ +uLong ZEXPORT zlibCompileFlags(void) { uLong flags; flags = 0; @@ -121,9 +119,7 @@ uLong ZEXPORT zlibCompileFlags() # endif int ZLIB_INTERNAL z_verbose = verbose; -void ZLIB_INTERNAL z_error(m) - char *m; -{ +void ZLIB_INTERNAL z_error(char *m) { fprintf(stderr, "%s\n", m); exit(1); } @@ -132,9 +128,7 @@ void ZLIB_INTERNAL z_error(m) /* exported to allow conversion of error code to string for compress() and * uncompress() */ -const char * ZEXPORT zError(err) - int err; -{ +const char * ZEXPORT zError(int err) { return ERR_MSG(err); } @@ -148,22 +142,14 @@ const char * ZEXPORT zError(err) #ifndef HAVE_MEMCPY -void ZLIB_INTERNAL zmemcpy(dest, source, len) - Bytef* dest; - const Bytef* source; - uInt len; -{ +void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) { if (len == 0) return; do { *dest++ = *source++; /* ??? to be unrolled */ } while (--len != 0); } -int ZLIB_INTERNAL zmemcmp(s1, s2, len) - const Bytef* s1; - const Bytef* s2; - uInt len; -{ +int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) { uInt j; for (j = 0; j < len; j++) { @@ -172,10 +158,7 @@ int ZLIB_INTERNAL zmemcmp(s1, s2, len) return 0; } -void ZLIB_INTERNAL zmemzero(dest, len) - Bytef* dest; - uInt len; -{ +void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) { if (len == 0) return; do { *dest++ = 0; /* ??? to be unrolled */ @@ -216,8 +199,7 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { voidpf buf; ulg bsize = (ulg)items*size; @@ -242,8 +224,7 @@ voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) return buf; } -void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { int n; (void)opaque; @@ -279,14 +260,12 @@ void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { (void)opaque; return _halloc((long)items, size); } -void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; _hfree(ptr); } @@ -299,25 +278,18 @@ void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) #ifndef MY_ZCALLOC /* Any system without a special alloc function */ #ifndef STDC -extern voidp malloc OF((uInt size)); -extern voidp calloc OF((uInt items, uInt size)); -extern void free OF((voidpf ptr)); +extern voidp malloc(uInt size); +extern voidp calloc(uInt items, uInt size); +extern void free(voidpf ptr); #endif -voidpf ZLIB_INTERNAL zcalloc(opaque, items, size) - voidpf opaque; - unsigned items; - unsigned size; -{ +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { (void)opaque; return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } -void ZLIB_INTERNAL zcfree(opaque, ptr) - voidpf opaque; - voidpf ptr; -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; free(ptr); } diff --git a/source/geometry/magneticfield/History b/source/geometry/magneticfield/History index fc53b8f734..e3cd6ae70e 100644 --- a/source/geometry/magneticfield/History +++ b/source/geometry/magneticfield/History @@ -6,7 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-11 Gabriele Cosmo (field-V11-02-07) +## 2025-06-13 Gabriele Cosmo (field-V11-03-02) +- Fixed compilation warning in G4QSStepper and minor code formatting. + +## 2025-06-02 John Apostolakis & Mattias Portnoy (field-V11-03-01) +- Changed implementation of QSS integration method to QSS v2 + by Mattias Portnoy (Univ. of Buenos Aires) + +## 2025-03-11 Gabriele Cosmo (field-V11-03-00) - Added missing guard in G4TMagFieldEquation header and minor cleanup. Fixes [GitHub PR #83](https://github.com/Geant4/geant4/pull/83). diff --git a/source/geometry/magneticfield/include/G4ChordFinder.hh b/source/geometry/magneticfield/include/G4ChordFinder.hh index 323991de9b..acfb9e1bbf 100644 --- a/source/geometry/magneticfield/include/G4ChordFinder.hh +++ b/source/geometry/magneticfield/include/G4ChordFinder.hh @@ -46,6 +46,7 @@ class G4VFSALIntegrationStepper; class G4MagneticField; class G4CachedMagneticField; class G4HelixHeum; +class G4QSStepper; class G4ChordFinder { @@ -151,7 +152,7 @@ class G4ChordFinder G4MagIntegratorStepper* fNewFSALStepperOwned = nullptr; std::unique_ptr fLongStepper; G4CachedMagneticField* fCachedField = nullptr; - // G4VFSALIntegrationStepper* fOldFSALStepperOwned = nullptr; + G4QSStepper* fQssStepperOwned = nullptr; G4EquationOfMotion* fEquation = nullptr; }; diff --git a/source/geometry/magneticfield/include/G4QSSDriver.hh b/source/geometry/magneticfield/include/G4QSSDriver.hh index cd4641528f..4872b47277 100644 --- a/source/geometry/magneticfield/include/G4QSSDriver.hh +++ b/source/geometry/magneticfield/include/G4QSSDriver.hh @@ -57,9 +57,6 @@ class G4QSSDriver : public G4InterpolationDriver void OnComputeStep(const G4FieldTrack* track) override { Base::OnComputeStep(track); -#ifdef GEANT4_DUMP_STEPPER_STATS - this->GetStepper()->stats.steps++; -#endif } void SetPrecision(G4double dq_rel, G4double dq_min); diff --git a/source/geometry/magneticfield/include/G4QSSMessenger.hh b/source/geometry/magneticfield/include/G4QSSMessenger.hh index e53c600096..fa249d53eb 100644 --- a/source/geometry/magneticfield/include/G4QSSMessenger.hh +++ b/source/geometry/magneticfield/include/G4QSSMessenger.hh @@ -68,9 +68,11 @@ class G4QSSMessenger : public G4UImessenger public: - G4double dQMin = 0; - G4double dQRel = 0; + G4double dQMin = 0.00001; + G4double dQRel = 0.001; G4double trialProposedStepModifier = 1.0; + G4int maxSubsteps = 5000; + G4int QssOrder = 2; private: @@ -80,6 +82,7 @@ class G4QSSMessenger : public G4UImessenger G4UIcmdWithADouble* dQRelCmd; G4UIcmdWithAString* stepperSelectorCmd; G4UIcmdWithADouble* trialProposedStepModifierCmd; + G4UIcmdWithAnInteger* maxSubstepsCmd; }; #endif // GEANT4_G4QSSMessenger_H diff --git a/source/geometry/magneticfield/include/G4QSStepper.hh b/source/geometry/magneticfield/include/G4QSStepper.hh index 77179145f6..c893c8ba7c 100644 --- a/source/geometry/magneticfield/include/G4QSStepper.hh +++ b/source/geometry/magneticfield/include/G4QSStepper.hh @@ -26,560 +26,181 @@ // G4QSStepper // // QSS Integrator Stepper - -// Authors: Lucio Santi, Rodrigo Castro (Univ. Buenos Aires) - 2018-2021 +// +// Authors - version 1 : Lucio Santi, Rodrigo Castro (Univ. Buenos Aires) - 2018-2021 +// - version 2 : Mattias Portnoy (Univ. Buenos Aires) - 2024 // -------------------------------------------------------------------- -#ifndef QSS_Stepper_HH -#define QSS_Stepper_HH 1 + +#ifndef G4QSS_STEPPER_HH +#define G4QSS_STEPPER_HH 1 #include "G4FieldTrack.hh" -#include "G4FieldUtils.hh" -#include "G4LineSection.hh" #include "G4MagIntegratorStepper.hh" -#include "G4QSS2.hh" -#include "G4QSS3.hh" -#include "G4QSSDriver.hh" #include "G4QSSMessenger.hh" -#include "G4VIntegrationDriver.hh" -#include "G4qss_misc.hh" +#include "G4QSSubstepStruct.hh" #include -#include -// Maximum allowed number of QSS substeps per integration step -#define QSS_MAX_SUBSTEPS 1000 - -template class G4QSStepper : public G4MagIntegratorStepper { + public: - G4QSStepper(G4EquationOfMotion* EqRhs, - G4int numberOfVariables = 6, - G4bool primary = true); - ~G4QSStepper() override; + G4QSStepper( G4EquationOfMotion* equation, + G4int num_integration_vars, + G4int num_state_vars, + G4bool isFSAL, + G4int verbosity=0 ); - void Stepper(const G4double y[], - const G4double dydx[], - G4double h, - G4double yout[], - G4double yerr[]) override; - - void Stepper(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double dydxOutput[]); - - // For calculating the output at the tau fraction of Step - // - inline void SetupInterpolation() {} - inline void Interpolate(G4double tau, G4double yOut[]); - - G4double DistChord() const override; - - G4int IntegratorOrder() const override { return method->order(); } - - void reset(const G4FieldTrack* track); - - void SetPrecision(G4double dq_rel, G4double dq_min); - // precision parameters for QSS method - - static G4QSStepper* build_QSS2(G4EquationOfMotion* EqRhs, - G4int numberOfVariables = 6, - G4bool primary = true); - - static G4QSStepper* build_QSS3(G4EquationOfMotion* EqRhs, - G4int numberOfVariables = 6, - G4bool primary = true); - - inline G4EquationOfMotion* GetSpecificEquation() { return GetEquationOfMotion(); } - - inline const field_utils::State& GetYOut() const { return fyOut; } - - inline G4double GetLastStepLength() { return fLastStepLength; } - - private: - - G4QSStepper(QSS* method, - G4EquationOfMotion* EqRhs, + G4QSStepper(G4EquationOfMotion *EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - void initialize_data_structs(); - static QSS_simulator build_simulator(); + virtual ~G4QSStepper(); + + inline constexpr G4double Cubic_Function(const QSStateVector* states, + G4int index, G4double delta_t); + + inline constexpr G4double Parabolic_Function(const QSStateVector* states, + G4int index, G4double delta_t); + + inline constexpr G4double Linear_Function(const QSStateVector* states, + G4int index, G4double delta_t); + + /* 0 means position type, 1 means velocity type. */ + inline constexpr int INDEX_TYPE(G4int i); + + inline void set_qss_order(G4int order); + + // auxiliary methods + + inline void momentum_to_velocity(const G4double* momentum, G4double* out); + + void set_relativistic_coeff(const G4double* momentum); + + inline void velocity_to_momentum(G4double *y); + + // Key methods + + void initialize(const G4double y[]); + + inline void compare_time_and_update(G4int index, G4int i); + + inline G4int get_next_sync_index(); inline void update_field(); - inline void save_substep(G4double time, G4double length); - inline void realloc_substeps(); - inline void get_state_from_poly(G4double* x, G4double* tx, - G4double time, G4double* state); + inline G4double extrapolate_polynomial(QSStateVector* states, + G4int index, G4double delta_t, G4int order); + inline void extrapolate_all_states_to_t(Substep* substep, + G4double t, G4double* yOut); - inline void recompute_derivatives(int index); - inline void update_time(); + /* Moves all the x states of variable index to the current time t. */ + inline void update_x(G4int index, G4double t); - inline G4double get_coeff() { return fCoeff_local; } + /* Moves all the q states of variable index to the current t. */ + inline void update_q(G4int index, G4double t); - inline void set_coeff(G4double coeff) { fCoeff_local = coeff; } + inline void update_x_position_derivates_using_q(G4int index); + inline void update_x_velocity_derivates_using_q(G4int index); + inline void update_x_derivates_using_q(G4int index); + inline void update_sync_time_one_coefficient(G4int index); - inline void set_charge(G4double q) - { - f_charge_c2 = q * cLight_local * cLight_local; // 89875.5178737; - } + /* Updates when does the x,q distance goes beyond the quantum. + Uses polynomial roots-finding formulas. */ + void update_sync_time(G4int index); - inline G4double get_qc2() { return f_charge_c2; } + /* Key method called by driver. */ + void Stepper( const G4double y[], + const G4double /*dydx*/ [], + G4double h, + G4double yout[], + G4double /* yerr */ [] ) override; - inline void set_mg() { fMassGamma = f_mass * fGamma2; } + /* Obligatory G4InterpolationDriver methods. */ + inline G4int IntegratorOrder() const override; + inline G4EquationOfMotion* GetSpecificEquation(); + inline const field_utils::State& GetYOut() const; - inline void set_gamma2(G4double gamma2) { fGamma2 = gamma2; } - inline void set_velocity(G4double v) { fVelocity = v; } + void Interpolate(G4double tau,G4double yOut[]); - inline void velocity_to_momentum(G4double* state); + inline G4double DistChord() const override; - inline void set_gamma(G4double p_sq) - { - set_gamma2(std::sqrt(p_sq / (f_mass * f_mass) + 1)); - set_mg(); - set_coeff(get_qc2() / fMassGamma); - } + inline void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, G4double yOutput[], G4double yError[], + G4double /*dydxOutput*/ []); + + inline void SetupInterpolation(); + + /* obligatory qss driver methods. */ + + inline void reset(const G4FieldTrack* track); + + inline void SetPrecision(G4double dq_rel, G4double dq_min); + + inline G4double GetLastStepLength(); private: - QSS_simulator simulator; - QSS* method; + // Constants - // State + static constexpr int DERIVATIVE_0 = 0; + static constexpr int DERIVATIVE_1 = 1; + static constexpr int DERIVATIVE_2 = 2; + static constexpr int DERIVATIVE_3 = 3; + + static constexpr int VX = 3; + static constexpr int VY = 4; + static constexpr int VZ = 5; + + static constexpr int POSITION_IDX = 0; + static constexpr int VELOCITY_IDX = 3; + static constexpr int NUMBER_OF_VARIABLES_QSS = 6; + + static constexpr G4double INFTY = 1e+20; + + /* Used to check if field changed from last update field during substeps. */ + G4bool fField_changed = true; + G4bool fTrack_changed = true; + + G4int qss_order = 2; + + Substeps substeps; + Substep current_substep; + const G4FieldTrack* fCurrent_track = nullptr; + QSStateVector dq_vector; + + // Invariants for this track -- during propagation // - G4double fLastStepLength; - field_utils::State fyIn, fyOut; + G4double fCharge; + G4double fCharge_c2; + G4double fRestMass; + G4double fGamma; + G4double fCoeff; // coeff; + + // Cached values -- for tiny speed up + // + G4double fMassOverC ; // was mass_times_gamma_over_speed_of_light; + G4double fInv_mass_over_c; + + /* used by interpolation driver, need to copy state here + when stepper finished. */ + G4double fYout[12]; + + // QSS parameters separated into velocity and position + // + G4double dqrel[2] = {0.0,0.0}; + G4double dqmin[2] = {0.001,0.001}; - G4double f_mass; - static constexpr G4double cLight_local = 299.792458; // should use CLHEP - G4double f_charge_c2; - G4double fMassGamma; - G4double fGamma2; - G4double fCoeff_local; G4double fVelocity; + G4double fFinal_t; }; -using G4QSStepper_QSS2 = G4QSStepper; -using G4QSStepper_QSS3 = G4QSStepper; +// ---------------------------------------------------------------------------- +// Inline methods +// ---------------------------------------------------------------------------- -template -inline G4QSStepper::G4QSStepper(QSS* qss, G4EquationOfMotion* EqRhs, - G4int noIntegrationVariables, G4bool) - : G4MagIntegratorStepper(EqRhs, noIntegrationVariables), - simulator(qss->getSimulator()), - method(qss) -{ - SetIsQSS(true); // Replaces virtual method IsQSS - fLastStepLength = -1.0; - - f_mass = 0; - f_charge_c2 = 0; - fMassGamma = 0; - fGamma2 = 0; - fCoeff_local = 0; - fVelocity = 0; - - this->initialize_data_structs(); - this->SetPrecision(1e-4, 1e-7); // Default values -} - -template -inline G4QSStepper::~G4QSStepper() -{ - for (auto & i : simulator->SD) { free(i); } - - free(SUBSTEPS(this->simulator)); - free(this->simulator); -} - -template -inline void G4QSStepper::Stepper(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double /*dydxOutput*/[]) -{ - Stepper(yInput, dydx, hstep, yOutput, yError); -} - -template -inline void G4QSStepper::update_time() -{ - auto* const sim = this->simulator; - - sim->time = sim->nextStateTime[0]; - sim->minIndex = 0; - - if (sim->nextStateTime[1] < sim->time) { - sim->time = sim->nextStateTime[1]; - sim->minIndex = 1; - } - if (sim->nextStateTime[2] < sim->time) { - sim->time = sim->nextStateTime[2]; - sim->minIndex = 2; - } - if (sim->nextStateTime[3] < sim->time) { - sim->time = sim->nextStateTime[3]; - sim->minIndex = 3; - } - if (sim->nextStateTime[4] < sim->time) { - sim->time = sim->nextStateTime[4]; - sim->minIndex = 4; - } - if (sim->nextStateTime[5] < sim->time) { - sim->time = sim->nextStateTime[5]; - sim->minIndex = 5; - } -} - -template -inline void G4QSStepper::Stepper(const G4double yInput[], - const G4double /*DyDx*/[], - G4double max_length, - G4double yOut[], - G4double[] /*yErr[]*/) -{ - G4double elapsed; - G4double t, prev_time = 0; - G4double length = 0.; - G4int index; - - const G4int coeffs = method->order() + 1; - G4double* tq = simulator->tq; - G4double* tx = simulator->tx; - G4double* dQRel = simulator->dQRel; - G4double* dQMin = simulator->dQMin; - G4double* lqu = simulator->lqu; - G4double* x = simulator->x; - G4int** SD = simulator->SD; - G4int cf0, infCf0; - - CUR_SUBSTEP(simulator) = 0; - - this->save_substep(0, length); - - this->update_time(); - t = simulator->time; - index = simulator->minIndex; - - while (length < max_length && t < Qss_misc::INF && CUR_SUBSTEP(simulator) < QSS_MAX_SUBSTEPS) { - cf0 = index * coeffs; - elapsed = t - tx[index]; - method->advance_time_x(cf0, elapsed); - tx[index] = t; - lqu[index] = dQRel[index] * std::fabs(x[cf0]); - if (lqu[index] < dQMin[index]) { - lqu[index] = dQMin[index]; - } - method->update_quantized_state(index); - tq[index] = t; - method->next_time(index, t); - for (G4int i = 0; i < 3; i++) { - G4int j = SD[index][i]; - elapsed = t - tx[j]; - infCf0 = j * coeffs; - if (elapsed > 0) { - x[infCf0] = method->evaluate_x_poly(infCf0, elapsed, x); - tx[j] = t; - } - } - - this->update_field(); - this->recompute_derivatives(index); - method->recompute_next_times(SD[index], t); - - if (t > prev_time) { - length += fVelocity * (t - prev_time); - if (length <= max_length) { this->save_substep(t, length); } - else { break; } - } - - this->update_time(); - prev_time = t; - t = simulator->time; - index = simulator->minIndex; - } - - if(CUR_SUBSTEP(simulator) >= QSS_MAX_SUBSTEPS) { - max_length = length; - } - - auto* const substep = &LAST_SUBSTEP_STRUCT(simulator); - t = substep->start_time + (max_length - substep->len) / fVelocity; - - this->get_state_from_poly(substep->x, substep->tx, t, yOut); - - velocity_to_momentum(yOut); - - const G4int numberOfVariables = GetNumberOfVariables(); - for (G4int i = 0; i < numberOfVariables; ++i) { - // Store Input and Final values, for possible use in calculating chord - fyIn[i] = yInput[i]; - fyOut[i] = yOut[i]; - } - - fLastStepLength = max_length; -} - -template -inline G4double G4QSStepper::DistChord() const -{ - G4double yMid[6]; - const_cast*>(this)->Interpolate(0.5, yMid); - - const G4ThreeVector begin = makeVector(fyIn, field_utils::Value3D::Position); - const G4ThreeVector end = makeVector(fyOut, field_utils::Value3D::Position); - const G4ThreeVector mid = makeVector(yMid, field_utils::Value3D::Position); - - return G4LineSection::Distline(mid, begin, end); -} - -template -inline void G4QSStepper::Interpolate(G4double tau, G4double yOut[]) -{ - G4double length = tau * fLastStepLength; - G4int idx = 0, j = LAST_SUBSTEP(simulator); - G4double end_time; - - if (j >= 15) { - G4int i = 0, k = j; - idx = j >> 1; - while (idx < k && i < j - 1) { - if (length < SUBSTEP_LEN(simulator, idx)) { - j = idx; - } else if (length >= SUBSTEP_LEN(simulator, idx + 1)) { - i = idx; - } else { - break; - } - - idx = (i + j) >> 1; - } - } - else { - for (; idx < j && length >= SUBSTEP_LEN(simulator, idx + 1); idx++) {;} - } - - auto* const substep = &SUBSTEP_STRUCT(simulator, idx); - end_time = substep->start_time + (length - substep->len) / fVelocity; - - this->get_state_from_poly(substep->x, substep->tx, end_time, yOut); - - velocity_to_momentum(yOut); -} - -template -inline void G4QSStepper::reset(const G4FieldTrack* track) -{ - using Qss_misc::PXidx; - using Qss_misc::PYidx; - using Qss_misc::PZidx; - using Qss_misc::VXidx; - using Qss_misc::VYidx; - using Qss_misc::VZidx; - - G4ThreeVector pos = track->GetPosition(); - G4ThreeVector momentum = track->GetMomentum(); - - f_mass = track->GetRestMass(); - set_charge(track->GetCharge()); - set_gamma(momentum.mag2()); - G4double c_mg = cLight_local / fMassGamma; - set_velocity(momentum.mag() * c_mg); - - method->reset_state(PXidx, pos.getX()); - method->reset_state(PYidx, pos.getY()); - method->reset_state(PZidx, pos.getZ()); - - method->reset_state(VXidx, momentum.getX() * c_mg); - method->reset_state(VYidx, momentum.getY() * c_mg); - method->reset_state(VZidx, momentum.getZ() * c_mg); - - this->update_field(); - method->full_definition(get_coeff()); - - method->recompute_all_state_times(0); - - simulator->time = 0; -} - -template -inline void G4QSStepper::SetPrecision(G4double dq_rel, G4double dq_min) -{ - G4double* dQMin = simulator->dQMin; - G4double* dQRel = simulator->dQRel; - G4int n_vars = simulator->states; - - if (dq_min <= 0) { dq_min = dq_rel * 1e-3; } - - for (G4int i = 0; i < n_vars; ++i) { - dQRel[i] = dq_rel; - dQMin[i] = dq_min; - } -} - -template -inline void G4QSStepper::initialize_data_structs() -{ - auto sim = this->simulator; - auto states = (G4int*)calloc(Qss_misc::VAR_IDX_END, sizeof(G4int)); - - sim->states = Qss_misc::VAR_IDX_END; - sim->it = 0.; - - for (unsigned int i = 0; i < Qss_misc::VAR_IDX_END; i++) { - sim->SD[i] = (G4int*)malloc(3 * sizeof(G4int)); - } - - sim->SD[0][states[0]++] = 3; - sim->SD[0][states[0]++] = 4; - sim->SD[0][states[0]++] = 5; - - sim->SD[1][states[1]++] = 3; - sim->SD[1][states[1]++] = 4; - sim->SD[1][states[1]++] = 5; - - sim->SD[2][states[2]++] = 3; - sim->SD[2][states[2]++] = 4; - sim->SD[2][states[2]++] = 5; - - sim->SD[3][states[3]++] = 0; - sim->SD[3][states[3]++] = 4; - sim->SD[3][states[3]++] = 5; - - sim->SD[4][states[4]++] = 1; - sim->SD[4][states[4]++] = 3; - sim->SD[4][states[4]++] = 5; - - sim->SD[5][states[5]++] = 2; - sim->SD[5][states[5]++] = 3; - sim->SD[5][states[5]++] = 4; - - free(states); -} - -template -inline QSS_simulator G4QSStepper::build_simulator() -{ - QSS_simulator sim = (QSS_simulator)malloc(sizeof(*sim)); - MAX_SUBSTEP(sim) = Qss_misc::MIN_SUBSTEPS; - SUBSTEPS(sim) = (QSSSubstep)malloc(Qss_misc::MIN_SUBSTEPS * sizeof(*SUBSTEPS(sim))); - return sim; -} - -template -inline void G4QSStepper::recompute_derivatives(G4int index) -{ - const G4int coeffs = method->order() + 1; - G4double e; - G4int idx = 0; - - e = simulator->time - simulator->tq[0]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[0] = simulator->time; - - idx += coeffs; - e = simulator->time - simulator->tq[1]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[1] = simulator->time; - - idx += coeffs; - e = simulator->time - simulator->tq[2]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[2] = simulator->time; - - idx += coeffs; - e = simulator->time - simulator->tq[3]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[3] = simulator->time; - - idx += coeffs; - e = simulator->time - simulator->tq[4]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[4] = simulator->time; - - idx += coeffs; - e = simulator->time - simulator->tq[5]; - if (likely(e > 0)) { method->advance_time_q(idx, e); } - simulator->tq[5] = simulator->time; - - method->dependencies(index, get_coeff()); -} - -template -inline void G4QSStepper::update_field() -{ - using Qss_misc::PXidx; - using Qss_misc::PYidx; - using Qss_misc::PZidx; - - const G4int order1 = method->order() + 1; - G4double* const _field = simulator->alg; - G4double* const _point = _field + order1; - - _point[PXidx] = simulator->x[PXidx]; - _point[PYidx] = simulator->x[PYidx * order1]; - _point[PZidx] = simulator->x[PZidx * order1]; - - this->GetEquationOfMotion()->GetFieldValue(_point, _field); -} - -template -inline void G4QSStepper::save_substep(G4double time, G4double length) -{ - memcpy(CUR_SUBSTEP_X(simulator), simulator->x, - (Qss_misc::VAR_IDX_END * (Qss_misc::MAX_QSS_STEPPER_ORDER + 2)) * sizeof(G4double)); - - CUR_SUBSTEP_START(simulator) = time; - CUR_SUBSTEP_LEN(simulator) = length; - CUR_SUBSTEP(simulator)++; - - if (unlikely(CUR_SUBSTEP(simulator) == MAX_SUBSTEP(simulator))) { - this->realloc_substeps(); - } -} - -template -inline void G4QSStepper::realloc_substeps() -{ - const G4int prev_index = MAX_SUBSTEP(simulator), new_index = 2 * prev_index; - - MAX_SUBSTEP(simulator) = new_index; - SUBSTEPS(simulator) = - (QSSSubstep)realloc(SUBSTEPS(simulator), new_index * sizeof(*SUBSTEPS(simulator))); -} - -template -inline void G4QSStepper::get_state_from_poly( - G4double* x, G4double* tx, G4double time, G4double* state) -{ - unsigned int coeff_index = 0, i; - const unsigned int x_order = method->order(), x_order1 = x_order + 1; - - for (i = 0; i < Qss_misc::VAR_IDX_END; ++i) { - assert(tx[i] <= time); - state[i] = method->evaluate_x_poly(coeff_index, time - tx[i], x); - coeff_index += x_order1; - } -} - -template -inline void G4QSStepper::velocity_to_momentum(G4double* state) -{ - using Qss_misc::VXidx; - using Qss_misc::VYidx; - using Qss_misc::VZidx; - G4double coeff = fMassGamma / cLight_local; - - state[VXidx] *= coeff; - state[VYidx] *= coeff; - state[VZidx] *= coeff; -} +#include "G4QSStepper.icc" #endif diff --git a/source/geometry/magneticfield/include/G4QSStepper.icc b/source/geometry/magneticfield/include/G4QSStepper.icc new file mode 100644 index 0000000000..28779f71c4 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSStepper.icc @@ -0,0 +1,386 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSStepper inline methods implementation +// +// Authors - version 1 : Lucio Santi, Rodrigo Castro (Univ. Buenos Aires) - 2018-2021 +// - version 2 : Mattias Portnoy (Univ. Buenos Aires) - 2024 +// ---------------------------------------------------------------------------- + +inline +constexpr G4double G4QSStepper::Cubic_Function(const QSStateVector* states, + G4int index, G4double delta_t) +{ + return states[DERIVATIVE_0][index] + (states[DERIVATIVE_1][index] + states[DERIVATIVE_2][index] * delta_t / 2 + states[DERIVATIVE_3][index] * delta_t * delta_t / 6) * delta_t; +} + +// ---------------------------------------------------------------------------- + +inline +constexpr G4double G4QSStepper::Parabolic_Function(const QSStateVector* states, + G4int index, G4double delta_t) +{ + return states[DERIVATIVE_0][index] + (states[DERIVATIVE_1][index] + states[DERIVATIVE_2][index] * delta_t / 2) * delta_t; +} + +// ---------------------------------------------------------------------------- + +inline +constexpr G4double G4QSStepper::Linear_Function(const QSStateVector* states, + G4int index, G4double delta_t) +{ + return states[DERIVATIVE_0][index] + states[DERIVATIVE_1][index] * delta_t; +} + +// ---------------------------------------------------------------------------- + +inline +constexpr G4int G4QSStepper::INDEX_TYPE(G4int i) +{ + return i >> 2; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::set_qss_order(G4int order) +{ + qss_order=order; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::momentum_to_velocity(const G4double* momentum, G4double* out) +{ + out[0] = momentum[0] * fInv_mass_over_c; + out[1] = momentum[1] * fInv_mass_over_c; + out[2] = momentum[2] * fInv_mass_over_c; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::compare_time_and_update(G4int index, G4int i) +{ + if (current_substep.sync_t[i] < current_substep.sync_t[index]) { index = i;} +} + +// ---------------------------------------------------------------------------- + +inline +G4int G4QSStepper::IntegratorOrder() const +{ + return qss_order; +} + +// ---------------------------------------------------------------------------- + +inline +G4EquationOfMotion* G4QSStepper::GetSpecificEquation() +{ + return GetEquationOfMotion(); +} + +// ---------------------------------------------------------------------------- + +inline +const field_utils::State& G4QSStepper::GetYOut() const +{ + return fYout; +} + +// ---------------------------------------------------------------------------- + +inline +G4double G4QSStepper::DistChord() const +{ + return 0.; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::Stepper(const G4double yInput[], + const G4double dydx[], G4double hstep, + G4double yOutput[], G4double yError[], G4double /*dydxOutput*/ []) +{ + Stepper(yInput, dydx, hstep, yOutput, yError); +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::SetupInterpolation() +{ +} + +inline +void G4QSStepper::reset(const G4FieldTrack *track) +{ + fTrack_changed = true; //// Cannot rely on addresses --- OLD was track != fCurrent_track; + fCurrent_track = track; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::SetPrecision(G4double dq_rel, G4double dq_min) +{ + dqmin[0] = dq_min; + dqmin[1] = dq_min; + dqrel[0] = dq_rel; + dqrel[1] = dq_rel; +} + +// ---------------------------------------------------------------------------- + +inline +G4double G4QSStepper::GetLastStepLength() +{ + return current_substep.t * fVelocity; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::velocity_to_momentum(G4double *y) +{ + y[3] *= fMassOverC; + y[4] *= fMassOverC; + y[5] *= fMassOverC; +} + +// ---------------------------------------------------------------------------- + +inline +G4int G4QSStepper::get_next_sync_index() +{ + + // Goes through each index and get the one with the closest sync t. + // Unrolled loop for tiny speedup. + + G4int index = 0; + compare_time_and_update(index,1); + compare_time_and_update(index,2); + compare_time_and_update(index,3); + compare_time_and_update(index,4); + compare_time_and_update(index,5); + return index; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_field() +{ + G4double old_field[3] = { current_substep.b_field[0], + current_substep.b_field[1], + current_substep.b_field[2] }; + GetEquationOfMotion()->GetFieldValue(current_substep.state_x[DERIVATIVE_0], + current_substep.b_field ); + fField_changed = false; + for (G4int i = 0; i < 3 && ! fField_changed; ++i) + { + fField_changed = fField_changed || old_field[i] != current_substep.b_field[i]; + } +} + +// ---------------------------------------------------------------------------- + +inline +G4double G4QSStepper::extrapolate_polynomial(QSStateVector* states, + G4int index, G4double delta_t, G4int order) +{ + if (delta_t == 0 || order == 0) { return states[DERIVATIVE_0][index]; } + + switch (order) + { + case 2: + return Parabolic_Function(states,index,delta_t); + break; + case 3: + return Cubic_Function(states,index,delta_t); + break; + case 1: + return Linear_Function(states,index,delta_t); + break; + default: + // TODO check how to raise error + return 146546; + } +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::extrapolate_all_states_to_t(Substep* substep, + G4double t, G4double* yOut) +{ + for (G4int j = 0; j < 6; ++j) + { + G4double t_j = substep->state_tx[j]; + G4double delta_tj = t - t_j; + yOut[j] = extrapolate_polynomial(&substep->state_x[DERIVATIVE_0], j, delta_tj, substep->extrapolation_method); + } +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_x(G4int index, G4double t) +{ + G4double delta_t = t - current_substep.state_tx[index]; + if (delta_t == 0) { return; } + + //current_substep.state_x[DERIVATE_1][index] += current_substep.state_x[DERIVATE_2][index] * delta_t; + switch (qss_order) + { + case 2: + current_substep.state_x[DERIVATIVE_0][index] = Parabolic_Function(current_substep.state_x,index,delta_t); + current_substep.state_x[DERIVATIVE_1][index] = Linear_Function((¤t_substep.state_x[DERIVATIVE_1]),index,delta_t); + break; + case 3: + current_substep.state_x[DERIVATIVE_0][index] = Cubic_Function(current_substep.state_x,index,delta_t); + current_substep.state_x[DERIVATIVE_1][index] = Parabolic_Function((¤t_substep.state_x[DERIVATIVE_1]),index,delta_t); + current_substep.state_x[DERIVATIVE_2][index] = Linear_Function((¤t_substep.state_x[DERIVATIVE_2]),index,delta_t); + break; + case 1: + current_substep.state_x[DERIVATIVE_0][index] = Linear_Function(current_substep.state_x,index,delta_t); + break; + default: + break; + } + current_substep.state_tx[index] = t; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_q(G4int index, G4double t) +{ + G4double delta_t = t - current_substep.state_tq[index]; + if (delta_t == 0) { return; } + switch (qss_order) + { + case 2: + current_substep.state_q[DERIVATIVE_0][index] = Linear_Function(current_substep.state_q,index,delta_t); + break; + case 3: + current_substep.state_q[DERIVATIVE_0][index] = Parabolic_Function(current_substep.state_q,index,delta_t); + current_substep.state_q[DERIVATIVE_1][index] = Linear_Function((¤t_substep.state_q[DERIVATIVE_1]),index,delta_t); + break; + case 1: + break; + } + current_substep.state_tq[index] = t; + +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_x_position_derivates_using_q(G4int index) +{ + // assumes index is position index + + current_substep.state_x[DERIVATIVE_1][index] = + current_substep.state_q[DERIVATIVE_0][index+VELOCITY_IDX]; + current_substep.state_x[DERIVATIVE_2][index] = + current_substep.state_q[DERIVATIVE_1][index+VELOCITY_IDX]; + current_substep.state_x[DERIVATIVE_3][index] = + current_substep.state_q[DERIVATIVE_2][index+VELOCITY_IDX]; +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_x_velocity_derivates_using_q(G4int index) +{ + // asumes index is velocity index + + G4int modulo = VELOCITY_IDX; + G4int index_pos = (index+modulo+1)%modulo; + G4int index_neg = (index+modulo-1)%modulo; + + G4double b1 = current_substep.b_field[index_pos]; + G4double b2 = current_substep.b_field[index_neg]; + for (G4int derivate_order = 0; derivate_order < qss_order; ++derivate_order) + { + current_substep.state_x[derivate_order+1][index] = + fCoeff* ( + current_substep.state_q[derivate_order][index_pos+VELOCITY_IDX] * b2 - + current_substep.state_q[derivate_order][index_neg+VELOCITY_IDX] * b1 + ); + } +} + +// ---------------------------------------------------------------------------- + +inline +void G4QSStepper::update_x_derivates_using_q(G4int index) +{ + // updates x using q with the Lorentz equation + + if (index < VELOCITY_IDX) + { + update_x_position_derivates_using_q(index); + } + else + { + update_x_velocity_derivates_using_q(index); + } +} + +// ---------------------------------------------------------------------------- + +/* Updates when does the x,q distance goes beyond the quantum. + For the special case of both polynomials being equal except + for higher coefficient- Such as after syncing */ +inline +void G4QSStepper::update_sync_time_one_coefficient(G4int index) +{ + G4double leading_poly_cofficient = current_substep.state_x[qss_order][index]; + if (leading_poly_cofficient == 0) + { + current_substep.sync_t[index] = INFTY; + } + else + { + G4double dq_leading_ratio = dq_vector[index]/fabs(leading_poly_cofficient); + switch (qss_order) + { + case 2: + current_substep.sync_t[index] = current_substep.state_tx[index] + sqrt(dq_leading_ratio); + break; + case 3: + current_substep.sync_t[index] = current_substep.state_tx[index] + cbrt(dq_leading_ratio); + break; + case 1: + current_substep.sync_t[index] = current_substep.state_tx[index] + dq_leading_ratio; + break; + } + } +} diff --git a/source/geometry/magneticfield/include/G4QSSubstepStruct.hh b/source/geometry/magneticfield/include/G4QSSubstepStruct.hh new file mode 100644 index 0000000000..9e15fdb0f8 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSSubstepStruct.hh @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Structs used by G4QSStepper +// +// Author: Mattias Portnoy (Univ. Buenos Aires) - 2024 +// -------------------------------------------------------------------- +#ifndef G4QSS_SUBSTEPSTRUCT_HH +#define G4QSS_SUBSTEPSTRUCT_HH 1 + +#include "G4FieldTrack.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4qss_misc.hh" + +#include +#include + +constexpr G4int MAX_QSS_ORDER=3; +typedef G4double QSStateVector[6]; + +struct Substep +{ + QSStateVector state_x[MAX_QSS_ORDER+1]; + QSStateVector state_q[MAX_QSS_ORDER]; + QSStateVector state_tx; + QSStateVector state_tq; + QSStateVector sync_t; + G4double t; + // simple id method so that substeps can have different orders in same step + G4int extrapolation_method; + G4double b_field[3]; +}; + +struct Substeps +{ + G4int _arrlength = 30; + Substep* _substeps = static_cast(malloc((_arrlength) * sizeof(Substep))); + G4int current_substep_index = -1; + + // Mimics the functionality of GNU method reallocarray + void* safe_reallocarray(void* ptr, size_t numMembers, size_t size) + { + if (size != 0 && numMembers > std::numeric_limits::max() / size) + { + return nullptr; + } + return realloc(ptr, numMembers * size); + } + + inline void resize() + { + _arrlength = fmax(_arrlength*2, 1500); + _substeps = static_cast(safe_reallocarray(_substeps, _arrlength, sizeof(Substep))); + if( _substeps == nullptr ) + { + G4ExceptionDescription ermsg; + ermsg << "QSS2: Size of state exceed available memory : number of elemets = " << _arrlength + << " size of each element= " << sizeof(Substep) << G4endl; + G4Exception( "G4QSSubstepStruct::resize", "GeomField0008", FatalException, ermsg ); + } + } + + inline Substep* create_susbtep() + { + current_substep_index++; + + if (unlikely( current_substep_index >= _arrlength )) + { + resize(); + } + return &(_substeps[current_substep_index]); + } + inline void save_substep(Substep* substep) + { + memcpy(create_susbtep(), substep, sizeof(Substep)); + } + + inline void reset() + { + current_substep_index = -1; + } + +}; + +#endif diff --git a/source/geometry/magneticfield/sources.cmake b/source/geometry/magneticfield/sources.cmake index acff00002e..52de316fcb 100644 --- a/source/geometry/magneticfield/sources.cmake +++ b/source/geometry/magneticfield/sources.cmake @@ -125,13 +125,14 @@ geant4_add_module(G4magneticfield # QSS - headers G4QSSDriver.hh G4QSSDriver.icc - G4QSSDriverCreator.hh G4QSStepper.hh + G4QSStepper.icc G4QSS2.hh G4QSS3.hh G4QSS_CustomStats.hh G4qss_misc.hh G4QSSMessenger.hh + G4QSSubstepStruct.hh SOURCES G4BFieldIntegrationDriver.cc G4BogackiShampine23.cc @@ -197,7 +198,6 @@ geant4_add_module(G4magneticfield G4NystromRK4.cc G4OldMagIntDriver.cc G4QuadrupoleMagField.cc - G4QSSDriverCreator.cc G4RepleteEofM.cc G4RKG3_Stepper.cc G4RK547FEq1.cc @@ -226,4 +226,4 @@ geant4_module_include_directories(G4magneticfield PUBLIC $ $ $ -) \ No newline at end of file +) diff --git a/source/geometry/magneticfield/src/G4ChordFinder.cc b/source/geometry/magneticfield/src/G4ChordFinder.cc index 60e08e613a..cf4dad0a32 100644 --- a/source/geometry/magneticfield/src/G4ChordFinder.cc +++ b/source/geometry/magneticfield/src/G4ChordFinder.cc @@ -62,7 +62,9 @@ #include "G4HelixHeum.hh" #include "G4BFieldIntegrationDriver.hh" -#include "G4QSSDriverCreator.hh" +#include "G4QSStepper.hh" +#include "G4QSSDriver.hh" +#include "G4AutoDelete.hh" #include "G4CachedMagneticField.hh" @@ -303,27 +305,19 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, } else if( useG4QSSDriver ) { - if( stepperDriverId == kQss2DriverType ) + if (stepperDriverId == kQss2DriverType) { - auto qssStepper2 = G4QSSDriverCreator::CreateQss2Stepper(pEquation); - if( gVerboseCtor ) - { - G4cout << "-- Created QSS-2 stepper" << G4endl; - } - fIntgrDriver = G4QSSDriverCreator::CreateDriver(qssStepper2); - } - else - { - auto qssStepper3 = G4QSSDriverCreator::CreateQss3Stepper(pEquation); - if( gVerboseCtor ) - { - G4cout << "-- Created QSS-3 stepper" << G4endl; - } - fIntgrDriver = G4QSSDriverCreator::CreateDriver(qssStepper3); + fQssStepperOwned= new G4QSStepper(pEquation); + auto qss_driver = new G4QSSDriver(fQssStepperOwned); + if( gVerboseCtor ) + { + G4cout << "-- Created QSS-2 stepper" << G4endl; + } + fIntgrDriver = qss_driver; } if( gVerboseCtor ) { - G4cout << "-- G4ChordFinder: Using QSS Driver." << G4endl; + G4cout << "-- G4ChordFinder: Using QSS Driver." << G4endl; } } else @@ -417,6 +411,7 @@ G4ChordFinder::~G4ChordFinder() delete fEquation; delete fRegularStepperOwned; delete fNewFSALStepperOwned; + delete fQssStepperOwned; delete fCachedField; delete fIntgrDriver; } diff --git a/source/geometry/magneticfield/src/G4QSSDriverCreator.cc b/source/geometry/magneticfield/src/G4QSSDriverCreator.cc deleted file mode 100644 index 54161bd449..0000000000 --- a/source/geometry/magneticfield/src/G4QSSDriverCreator.cc +++ /dev/null @@ -1,108 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -// G4QSSDriverCreator implementation -// -// Author: J.Apostolakis (CERN) - 2021-2023 -// -------------------------------------------------------------------- - -#include "G4QSSDriverCreator.hh" - -#include "G4MagIntegratorStepper.hh" -#include "G4VIntegrationDriver.hh" - -#include "G4QSSDriver.hh" -#include "G4QSStepper.hh" -#include "G4QSS2.hh" -#include "G4QSS3.hh" - -#include "G4Mag_UsualEqRhs.hh" - -#include - -G4VIntegrationDriver* -G4QSSDriverCreator::CreateDriver( G4MagIntegratorStepper* pStepper, G4double /*stepMin*/ ) -{ - G4VIntegrationDriver* driver = nullptr; -// pStepper->build_driver(stepMinimum, true); // Original - QSS - auto qss2stepper = dynamic_cast*>(pStepper); - if( qss2stepper != nullptr ) { - // driver = new G4QSSDriver>(qss2stepper); - driver = CreateDriver( qss2stepper ); - } - auto qss3stepper = dynamic_cast*>(pStepper); - if( qss3stepper != nullptr ) { - // driver = new G4QSSDriver>(qss3stepper); - driver= CreateDriver( qss3stepper ); - } - return driver; -} - -G4QSSDriver>* - G4QSSDriverCreator::CreateDriver( G4QSStepper* qss2stepper ) -{ - G4cout << "---- G4QSSDriver* G4QSSDriverCreator::CreateDriver(G4QSStepper* ) called.\n"; - return new G4QSSDriver>(qss2stepper); -} - -static constexpr G4int numOfVars= 6; - -G4QSSDriver>* - G4QSSDriverCreator::CreateDriver( G4QSStepper* qss3stepper ) -{ - G4cout << "---- G4QSSDriver* G4QSSDriverCreator::CreateDriver(G4QSStepper* ) called.\n"; - return new G4QSSDriver>(qss3stepper); -} - -G4QSStepper* G4QSSDriverCreator::G4QSSDriverCreator::CreateQss2Stepper(G4Mag_EqRhs* Equation) -{ - G4cout << "---- G4QSStepper* CreateQss2Stepper(G4Mag_EqRhs* ) CALLED\n"; - return G4QSStepper::build_QSS2( Equation, numOfVars, true); -} - -G4QSStepper* G4QSSDriverCreator::CreateQss3Stepper(G4Mag_EqRhs* Equation) -{ - G4cout << "---- G4QSStepper* CreateQss3Stepper(G4Mag_EqRhs* ) CALLED\n"; - return G4QSStepper::build_QSS3( Equation, numOfVars, true); -} - -G4VIntegrationDriver* G4QSSDriverCreator::CreateQss2Driver(G4Mag_EqRhs* Equation) -{ - assert( dynamic_cast(Equation) != nullptr ); - // assert( Equation->GetNumberOfVariables() == numOfVars ); - - auto qss2stepper = G4QSStepper::build_QSS2( Equation, numOfVars, true); - return CreateDriver( qss2stepper ); -} - -G4VIntegrationDriver* G4QSSDriverCreator:: -CreateQss3Driver(G4Mag_EqRhs *Equation) -{ - assert( dynamic_cast(Equation) != nullptr ); - // assert( Equation->GetNumberOfVariables() == numOfVars ); - - auto qss3stepper = G4QSStepper::build_QSS3( Equation, numOfVars, true); - return CreateDriver( qss3stepper ); -} diff --git a/source/geometry/magneticfield/src/G4QSSMessenger.cc b/source/geometry/magneticfield/src/G4QSSMessenger.cc index 4469e4baf3..57425329b9 100644 --- a/source/geometry/magneticfield/src/G4QSSMessenger.cc +++ b/source/geometry/magneticfield/src/G4QSSMessenger.cc @@ -55,6 +55,11 @@ G4QSSMessenger::G4QSSMessenger() stepperSelectorCmd->SetParameterName("choice", false); stepperSelectorCmd->SetCandidates("TemplatedDoPri OldRK45 G4QSS2"); + maxSubstepsCmd = new G4UIcmdWithAnInteger("/QSS/maxSubsteps",this); + maxSubstepsCmd->SetGuidance("Default is 5000"); + maxSubstepsCmd->SetDefaultValue(5000); + maxSubstepsCmd->SetParameterName("maxSubstepsCmd", false); + } G4QSSMessenger::~G4QSSMessenger() @@ -64,6 +69,7 @@ G4QSSMessenger::~G4QSSMessenger() delete dQRelCmd; delete stepperSelectorCmd; delete trialProposedStepModifierCmd; + delete maxSubstepsCmd; //qssStats.print(); } @@ -83,6 +89,10 @@ void G4QSSMessenger::SetNewValue(G4UIcommand *command, G4String newValue) dQRel = dQRelCmd->GetNewDoubleValue(newValue); } + if (command == maxSubstepsCmd){ + maxSubsteps = maxSubstepsCmd->GetNewIntValue(newValue); + } + if ( command == trialProposedStepModifierCmd ) { trialProposedStepModifier = trialProposedStepModifierCmd->GetNewDoubleValue(newValue); } diff --git a/source/geometry/magneticfield/src/G4QSStepper.cc b/source/geometry/magneticfield/src/G4QSStepper.cc index 61fbe64a30..1f56bba76d 100644 --- a/source/geometry/magneticfield/src/G4QSStepper.cc +++ b/source/geometry/magneticfield/src/G4QSStepper.cc @@ -22,44 +22,397 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// G4QSStepper implementation // -// Authors: Lucio Santi, Rodrigo Castro (Univ. Buenos Aires) - 2018-2021 +// G4QSStepper +// +// QSS Integrator Stepper +// +// Authors - version 1 : Lucio Santi, Rodrigo Castro (Univ. Buenos Aires) - 2018-2021 +// - version 2 : Mattias Portnoy (Univ. Buenos Aires) - 2024 // -------------------------------------------------------------------- #include "G4QSStepper.hh" +#include "G4PhysicalConstants.hh" -template<> -G4QSStepper_QSS3::G4QSStepper(G4EquationOfMotion *EqRhs, - G4int numberOfVariables, - G4bool primary) - : G4QSStepper(new G4QSS3(G4QSStepper_QSS3::build_simulator()), - EqRhs, numberOfVariables, primary) +// ---------------------------------------------------------------------------- + +G4QSStepper::G4QSStepper( G4EquationOfMotion* equation, + G4int num_integration_vars, + G4int num_state_vars, + G4bool isFSAL, + G4int /*verbosity*/ ): + G4MagIntegratorStepper(equation,num_integration_vars,num_state_vars,isFSAL) +{ + using std::memset; + + set_qss_order(G4QSSMessenger::instance()->QssOrder); + SetIsQSS(true); + + for (G4int i = 0; i < MAX_QSS_ORDER-1; ++i) + { + memset(¤t_substep.state_x[i], 0, sizeof(QSStateVector)); + memset(¤t_substep.state_q[i], 0, sizeof(QSStateVector)); + } + memset(¤t_substep.state_x[MAX_QSS_ORDER-1], 0, sizeof(QSStateVector)); + current_substep.b_field[0] = 0.0; + current_substep.b_field[1] = 0.0; + current_substep.b_field[2] = 0.0; +} + +// ---------------------------------------------------------------------------- + +G4QSStepper::G4QSStepper(G4EquationOfMotion *EqRhs, + G4int numberOfVariables, + G4bool primary) + : G4QSStepper(EqRhs,numberOfVariables, numberOfVariables, primary) { } -template<> -G4QSStepper_QSS2::G4QSStepper(G4EquationOfMotion *EqRhs, - G4int numberOfVariables, - G4bool primary) - : G4QSStepper(new G4QSS2(G4QSStepper_QSS2::build_simulator()), - EqRhs, numberOfVariables, primary) +// ---------------------------------------------------------------------------- + +G4QSStepper::~G4QSStepper() { + free(substeps._substeps); } -template<> -G4QSStepper_QSS2 *G4QSStepper_QSS2::build_QSS2(G4EquationOfMotion *EqRhs, - G4int noIntegrationVariables, - G4bool primary) +// ---------------------------------------------------------------------------- + +void G4QSStepper::set_relativistic_coeff(const G4double* momentum) { - return new G4QSStepper(EqRhs, noIntegrationVariables, primary); + G4double momentum2 = momentum[0]*momentum[0] + momentum[1]*momentum[1] + momentum[2]*momentum[2]; + fGamma = sqrt(momentum2/(fRestMass*fRestMass) + 1); + G4double mass_times_gamma = fRestMass * fGamma; + fMassOverC = mass_times_gamma * (1.0 / CLHEP::c_light); + fInv_mass_over_c = CLHEP::c_light * (1.0 / mass_times_gamma); + fCoeff = fCharge_c2 / mass_times_gamma; } -template<> -G4QSStepper_QSS3 *G4QSStepper_QSS3::build_QSS3(G4EquationOfMotion *EqRhs, - G4int noIntegrationVariables, - G4bool primary) +// ---------------------------------------------------------------------------- + +void G4QSStepper::initialize(const G4double y[]) { - return new G4QSStepper(EqRhs, noIntegrationVariables, primary); + using std::memcpy; + using std::memset; + + substeps.reset(); + + // OLD: if (track_change && fCurrent_track != nullptr) { + // Cannot rely on detecting an address change -> always load values! + if (fCurrent_track != nullptr) + { + fCharge = fCurrent_track->GetCharge(); + fCharge_c2 = fCharge * 89875.5178737; + fRestMass = fCurrent_track->GetRestMass(); + } + + // y contains postion in first 3 index and momentum on the next 3 + set_relativistic_coeff(&y[3]); + + G4double velocity_vector[3]; + momentum_to_velocity(&y[3], velocity_vector); + fVelocity = sqrt(velocity_vector[0]*velocity_vector[0] + velocity_vector[1]*velocity_vector[1] + velocity_vector[2]*velocity_vector[2] ); + + memcpy( + ¤t_substep.state_x[DERIVATIVE_0][POSITION_IDX], + y, + sizeof(G4double) * 3 + ); + + memcpy( + ¤t_substep.state_x[DERIVATIVE_0][VELOCITY_IDX], + &velocity_vector, + sizeof(G4double) * 3 + ); + + memcpy( + ¤t_substep.state_q[DERIVATIVE_0], + ¤t_substep.state_x[DERIVATIVE_0], + sizeof(QSStateVector) + ); + + for (G4int i = 1; i < qss_order; ++i) + { + std::fill_n(current_substep.state_q[i], NUMBER_OF_VARIABLES_QSS, 0.0); + } + + std::fill_n(current_substep.state_tx, NUMBER_OF_VARIABLES_QSS, 0.0); + std::fill_n(current_substep.state_tq, NUMBER_OF_VARIABLES_QSS, 0.0); + + current_substep.t = 0; + current_substep.extrapolation_method = qss_order; + + update_field(); + for (G4int i = 0; i < NUMBER_OF_VARIABLES_QSS; ++i) + { + dq_vector[i] = fmax(dqmin[INDEX_TYPE(i)], dqrel[INDEX_TYPE(i)] * fabs(current_substep.state_x[DERIVATIVE_0][i])); + update_x_derivates_using_q(i); + update_sync_time(i); + } +} + +// ---------------------------------------------------------------------------- + +void G4QSStepper::update_sync_time(G4int index) +{ + G4double &dq = dq_vector[index]; + G4double delta_sync_t = INFTY; + // polynomial coefficients in increasing order of power, constant, linear, quadratic, etc + G4double c, b, a, h; + + a = current_substep.state_x[DERIVATIVE_2][index]/2; + b = current_substep.state_x[DERIVATIVE_1][index] - current_substep.state_q[DERIVATIVE_1][index] ; + c = current_substep.state_x[DERIVATIVE_0][index] - current_substep.state_q[DERIVATIVE_0][index]; + + // third order polynomial. It's a long algorithm but not a complex one + if (qss_order == 3 && current_substep.state_x[DERIVATIVE_3][index] != 0.0) + { + // extra coefficient and h for the cubic polynomial and inclusion of the second order term from q + h = current_substep.state_x[DERIVATIVE_3][index]/6; + a -= current_substep.state_q[DERIVATIVE_2][index]/2; + + G4double q_cube = fCharge*fCharge*fCharge; + + // special case of | h * t3 | = dq + if (a == 0 && b == 0 && c == 0) + { + delta_sync_t = cbrt(fabs(dq/h)); + } + else + { + a /= h; + b /= h; + c /= h; + + G4double qLocal = (a * a - 3 * b) * (1.0 / 9.0); + G4double r_base = (2*a*a*a - 9*a*b + 27*c)*(1.0/54.0); + + G4double sqrt_q = sqrt(qLocal); + G4double sqrt_q_cube = sqrt(q_cube); + G4double a_over_3 = a/3; + for (G4double dQ : {dq,-dq}) + { + G4double r = r_base + dQ/(2*h); + // three real roots + if (r*r < q_cube) + { + G4double theta = acos(r/sqrt_q_cube); + G4double t1 = -2*sqrt_q*cos((1./3.)*theta) - a_over_3; + G4double t2 = -2*sqrt_q*cos((1./3.)*(theta+2*CLHEP::pi)) - a_over_3; + G4double t3 = -2*sqrt_q*cos((1./3.)*(theta-2*CLHEP::pi)) - a_over_3; + for (G4double t : {t1,t2,t3}) + { + if (t > 0) { delta_sync_t = fmin(delta_sync_t,t); } + } + } + // one real root + else + { + G4double A = -copysign(1,r) * cbrt(fabs(r) + sqrt(r*r - q_cube)); + G4double B = A == 0 ? 0 : qLocal/A; + G4double t1 = A + B - a_over_3; + if (t1 > 0) {delta_sync_t = fmin(delta_sync_t,t1);} + } + } + } + } + + // first order polynomial + else if (qss_order == 1 || a == 0) + { + // dq = | b * t + c | + if (b == 0) { delta_sync_t = INFTY; } + // (dq-c)/b > 0 <--> (b > 0 && dq > c) || (b < 0 && dq < c) + // so we use dq if any of the cases holds and -dq if not + else if ( (b > 0) == (dq > c) ) { delta_sync_t = (dq-c)/b; } + else { delta_sync_t = (-dq-c)/b; } + } + // second order polynomial + else { + if (b == 0) { + // dq = | a_x * t2 + c | + // identical to first order case but with sqrt + if ((a > 0) == (dq > c)) {delta_sync_t = sqrt((dq-c)/a);} + else {delta_sync_t = sqrt((-dq-c)/a);} + } + else + { + // check both discriminants for both dq and - dq + G4double a4 = 4*a; + G4double a2 = 2*a; + G4double discriminator_base = b*b - a4*c; + G4double discriminator_difference = a4*dq; + G4double discriminator_1 = discriminator_base + discriminator_difference; + G4double discriminator_2 = discriminator_base - discriminator_difference; + G4double fixed_solution_part = -b/a2; + + // simple trick to combine answers from all 4 solutions + for(G4double discriminator : {discriminator_1, discriminator_2}) + { + if (discriminator < 0) { continue; } + G4double variable_solution_part = sqrt(discriminator)/fabs(a2); + G4double t_local = fixed_solution_part - variable_solution_part; + + if (t_local <= 0 ) + { + t_local = fixed_solution_part + variable_solution_part; + } + if (t_local > 0) { delta_sync_t = fmin(delta_sync_t,t_local); } + } + } + } + + current_substep.sync_t[index] = current_substep.state_tx[index] + delta_sync_t; +} + +// ---------------------------------------------------------------------------- + +void G4QSStepper::Stepper( const G4double y[], + const G4double /*dydx*/ [], + G4double h, + G4double yout[], + G4double /* yerr */ [] ) +{ + using std::memcpy; + + initialize(y); + + const G4int QSS_MAX_SUBSTEPS = G4QSSMessenger::instance()->maxSubsteps; + + G4double t = 0; + + fFinal_t = h/fVelocity; + fFinal_t = fmin(fFinal_t,INFTY); + + while (t < fFinal_t && t < INFTY && substeps.current_substep_index < QSS_MAX_SUBSTEPS) + { + substeps.save_substep(¤t_substep); + + // get minimum that makes some variable get too far from its quantized version + G4int sync_index = get_next_sync_index(); + t = current_substep.sync_t[sync_index]; + t = fmin(t,fFinal_t); + current_substep.t = t; + + // sync both and update their data + // update x + update_x(sync_index,t); + + // sync q + current_substep.state_q[DERIVATIVE_0][sync_index] = current_substep.state_x[DERIVATIVE_0][sync_index]; + current_substep.state_q[DERIVATIVE_1][sync_index] = current_substep.state_x[DERIVATIVE_1][sync_index]; + current_substep.state_q[DERIVATIVE_2][sync_index] = current_substep.state_x[DERIVATIVE_2][sync_index]; + + current_substep.state_tq[sync_index] = current_substep.state_tx[sync_index]; + + dq_vector[sync_index] = fmax(dqmin[INDEX_TYPE(sync_index)], dqrel[INDEX_TYPE(sync_index)] * fabs(current_substep.state_x[DERIVATIVE_0][sync_index])); + + + // Somehow this seems to be faster than the one below + update_sync_time(sync_index); + // the trick belows work but seems to be slower + //update_sync_time_one_coefficient(sync_index); + + + // only update field if we actually changed position, not velocity + // previous version called this every time which is unnecessary if field constant, and we bite the bullet if not + if (sync_index < VELOCITY_IDX) { update_field(); } + + // we need to update the affected derivates of the other states + G4double &tIndex = current_substep.state_tx[sync_index]; + + + // if we update position but magnetic field hasn't change then no other variables are affected! + if(sync_index < VELOCITY_IDX && ! fField_changed) { continue; } + + // as qs are in different ts, we need to extrapolate the needed qs + // we always need to extrapolate the velocity ones (because the lorentz equation) + update_q(VX,tIndex); + update_q(VY,tIndex); + update_q(VZ,tIndex); + + + // check which equations are altered by this update according to lorentz eq + + // b-field changed, need to update velocity states derivates + if (sync_index < VELOCITY_IDX) + { + for (G4int i = VELOCITY_IDX; i < 6; ++i) + { + update_x(i,tIndex); + update_x_velocity_derivates_using_q(i); + update_sync_time(i); + } + } + + // velocity changed, need the other velocity states derivates and the corresponding position one + else + { + G4int indexDep1 = (sync_index + 2)%VELOCITY_IDX + VELOCITY_IDX; + G4int indexDep2 = (sync_index + 1)%VELOCITY_IDX + VELOCITY_IDX; + G4int index_class = sync_index - VELOCITY_IDX; + update_q(index_class,tIndex); // not updated before so we need to update it + for (G4int i : {indexDep1, indexDep2, index_class}) + { + update_x(i,tIndex); + update_x_derivates_using_q(i); + update_sync_time(i); + } + } + } + if(substeps.current_substep_index >= QSS_MAX_SUBSTEPS) + { + fFinal_t = current_substep.t; + } + + for (G4int i = 0; i < NUMBER_OF_VARIABLES_QSS; ++i) + { + update_x(i, fFinal_t); + } + memcpy(yout, ¤t_substep.state_x[DERIVATIVE_0], sizeof(QSStateVector)); + + velocity_to_momentum(yout); + + // fyout is used by interpolation driver, so we have to do this + memcpy(fYout,yout,NUMBER_OF_VARIABLES_QSS*sizeof(G4double)); +} + +// ---------------------------------------------------------------------------- + +void G4QSStepper::Interpolate(G4double tau,G4double yOut[]) +{ + G4double target_t = current_substep.t * tau; + G4int i = 0; + G4double t = current_substep.t * tau;; + // linear search + if (substeps.current_substep_index < 20) + { + while(i < substeps.current_substep_index && substeps._substeps[i+1].t <= target_t ) + { + i++; + } + } + // binary search + else + { + G4int high_i = substeps.current_substep_index; + G4int low_i = 0; + G4int idx = high_i >> 1; + while(low_i < high_i-1) + { + if(target_t < substeps._substeps[idx].t) + { + high_i = idx; + } + else + { + low_i = idx; + } + idx = (low_i+high_i) >> 1; + } + i = low_i; + } + + extrapolate_all_states_to_t(&substeps._substeps[i], t, yOut); + + velocity_to_momentum(yOut); } diff --git a/source/geometry/management/History b/source/geometry/management/History index 12a9eed177..ace2f7277d 100644 --- a/source/geometry/management/History +++ b/source/geometry/management/History @@ -6,29 +6,46 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-29 Gabriele Cosmo (geommng-V11-02-08) +## 2025-03-29 Gabriele Cosmo (geommng-V11-03-08) - In G4GeometryManager, removed redundant declaration of method ChooseSequentialOptimisation(). -## 2025-03-05 Gabriele Cosmo (geommng-V11-02-07) +## 2025-03-24 Evgueni Tcherniaev (geommng-V11-03-07) +- G4VSolid: Set seed in EvaluateCubicVolume() and EvaluateSurfaceArea() to + ensure reproducibility of the resulting value. + +## 2025-03-05 Gabriele Cosmo (geommng-V11-03-06) - Applied clang-tidy to G4GeometryManager and some code cleanup. Moved additional checks/warnings under verbosity level. +- Additional readability clang-tidy fixes to code. -## 2025-03-03 Gabriele Cosmo +## 2025-03-03 Gabriele Cosmo (geommng-V11-03-05) - In G4VSolid::EstimateCubicVolume(..), initialise local variable to zero to silence invalid false positive warnings reported in compilation of CMSSW. -## 2025-02-25 John Apostolakis +## 2025-02-25 John Apostolakis (geommng-V11-03-04) +- Enabled voxelisation parallelism by default in G4GeometryManager, when + MT/tasks are enabled. Enabled also for potential 2nd (and later) calls. - In G4GeometryManager, fix in ConfigureParallelOptimisation() to reset logical volumes iterator; in ReportWorkerIsDoneOptimising(), added checks to report fatal error if incorrect number of volumes was voxelised, and warns if number of workers reporting is not as expected. In ConfigureParallelOptimisation(), reports on the times it was called. -## 2025-02-03 Gabriele Cosmo +## 2025-02-20 Gabriele Cosmo (geommng-V11-03-03) +- Applied clang-tidy fixes fixes (readability, modernization, performance, ...) + based on llvm version 19.1.17. + +## 2025-02-03 Gabriele Cosmo (geommng-V11-03-02) - G4UAdapter: removed fake default constructor, clearing compilation warnings on gcc-14. +## 2025-01-24 Evgueni Tcherniaev (geommng-V11-03-01) +- G4GeomTools: added HyperboloidSurfaceArea() + +## 2025-01-05 Evgueni Tcherniaev (geommng-V11-03-00) +- G4GeomTools: added HypeStereo() and TwistedTubeBoundingTrap() + ## 2024-08-26 Gabriele Cosmo (geommng-V11-02-06) - G4GeometryManager: temporarily disable default parallel optimisation. Fixed spelling for method OptimiseInParallel(..). diff --git a/source/geometry/management/include/G4AffineTransform.icc b/source/geometry/management/include/G4AffineTransform.icc index 019ce33a22..fa752cae29 100644 --- a/source/geometry/management/include/G4AffineTransform.icc +++ b/source/geometry/management/include/G4AffineTransform.icc @@ -393,7 +393,7 @@ G4double G4AffineTransform::operator [] (const G4int n) const inline G4bool G4AffineTransform::IsRotated() const { - return !(rxx==1.0 && ryy==1.0 && rzz==1.0); + return rxx!=1.0 || ryy!=1.0 || rzz!=1.0; } inline diff --git a/source/geometry/management/include/G4GeomTools.hh b/source/geometry/management/include/G4GeomTools.hh index 1aaed9e164..c56de18c18 100644 --- a/source/geometry/management/include/G4GeomTools.hh +++ b/source/geometry/management/include/G4GeomTools.hh @@ -47,7 +47,7 @@ class G4GeomTools public: // ================================================================== - // 2D Utilities + // 2D Utilities // ------------------------------------------------------------------ static G4double TriangleArea(G4double Ax, G4double Ay, @@ -108,11 +108,11 @@ class G4GeomTools std::vector& iout, G4double tolerance = 0.0); // Remove collinear and coincident points from 2D polygon. - // Indices of removed points are available in iout. + // Indices of removed points are available in iout. static G4bool DiskExtent(G4double rmin, G4double rmax, G4double startPhi, G4double delPhi, - G4TwoVector& pmin, G4TwoVector& pmax); + G4TwoVector& pmin, G4TwoVector& pmax); // Calculate bounding rectangle of a disk sector, // it returns false if input parameters do not meet the following: // rmin >= 0 @@ -122,7 +122,7 @@ class G4GeomTools static void DiskExtent(G4double rmin, G4double rmax, G4double sinPhiStart, G4double cosPhiStart, G4double sinPhiEnd, G4double cosPhiEnd, - G4TwoVector& pmin, G4TwoVector& pmax); + G4TwoVector& pmin, G4TwoVector& pmax); // Calculate bounding rectangle of a disk sector, // faster version without check of parameters @@ -136,7 +136,7 @@ class G4GeomTools // Compute the lateral surface area of an elliptic cone // ================================================================== - // 3D Utilities + // 3D Utilities // ------------------------------------------------------------------ static G4ThreeVector TriangleAreaNormal(const G4ThreeVector& A, @@ -187,7 +187,7 @@ class G4GeomTools static G4bool SphereExtent(G4double rmin, G4double rmax, G4double startTheta, G4double delTheta, G4double startPhi, G4double delPhi, - G4ThreeVector& pmin, G4ThreeVector& pmax); + G4ThreeVector& pmin, G4ThreeVector& pmax); // Calculate bounding box of a spherical sector, // it returns false if input parameters do not meet the following: // rmin >= 0 @@ -196,6 +196,28 @@ class G4GeomTools // delTheta > 0 + kCarTolerance // delPhi > 0 + kCarTolerance + static G4double HypeStereo(G4double r0, // radius at z = 0 + G4double r, // radius at z = h + G4double h); + // Calculate hyperbolic surface stereo + // Stereo is a half angle at the intersection point of the two + // lines in the tangent plane cross section + + static void TwistedTubeBoundingTrap(G4double twistAng, // twist angle + G4double endInnerRad, // inner radius at z = halfZ + G4double endOuterRad, // outer radius at z = halfZ + G4double dPhi, // delta phi + G4TwoVectorList& vertices); // corners of generic trap + // Find XY-coordinates of the corners of the generic trap + // that bounds specified twisted tube + + static G4double HyperboloidSurfaceArea(G4double dphi, // delta phi + G4double r0, // radius at z = 0 + G4double tanstereo, // tan(stereo) + G4double zmin, + G4double zmax); + // Calculate surface area of the hyperboloid between zmin and zmax + private: static G4bool CheckSnip(const G4TwoVectorList& contour, diff --git a/source/geometry/management/include/G4LogicalVolume.icc b/source/geometry/management/include/G4LogicalVolume.icc index efe3ad64f1..2dc33ad2e5 100644 --- a/source/geometry/management/include/G4LogicalVolume.icc +++ b/source/geometry/management/include/G4LogicalVolume.icc @@ -92,7 +92,7 @@ inline G4FastSimulationManager* G4LogicalVolume::GetFastSimulationManager () const { G4FastSimulationManager* fFSM = nullptr; - if(fRegion != nullptr) fFSM = fRegion->GetFastSimulationManager(); + if(fRegion != nullptr) { fFSM = fRegion->GetFastSimulationManager(); } return fFSM; } @@ -105,7 +105,7 @@ G4bool G4LogicalVolume::IsDaughter(const G4VPhysicalVolume* p) const { for (const auto & daughter : fDaughters) { - if (*daughter==*p) return true; + if (*daughter==*p) { return true; } } return false; } @@ -165,8 +165,9 @@ G4VSensitiveDetector* G4LogicalVolume::GetMasterSensitiveDetector() const inline G4UserLimits* G4LogicalVolume::GetUserLimits() const { - if(fUserLimits != nullptr) return fUserLimits; - if(fRegion != nullptr) return fRegion->GetUserLimits(); + if(fUserLimits != nullptr) { return fUserLimits; +} + if(fRegion != nullptr) { return fRegion->GetUserLimits(); } return nullptr; } @@ -268,7 +269,7 @@ inline G4bool G4LogicalVolume::IsRegion() const { G4bool reg = false; - if (fRegion != nullptr) reg = true; + if (fRegion != nullptr) { reg = true; } return reg; } diff --git a/source/geometry/management/include/G4Region.icc b/source/geometry/management/include/G4Region.icc index da8f87f82e..2c77c21610 100644 --- a/source/geometry/management/include/G4Region.icc +++ b/source/geometry/management/include/G4Region.icc @@ -216,7 +216,7 @@ G4MaterialCutsCouple* G4Region::FindCouple(G4Material* mat) { auto c = fMaterialCoupleMap.find(mat); G4MaterialCutsCouple* couple = nullptr; - if(c!=fMaterialCoupleMap.cend()) couple = (*c).second; + if(c!=fMaterialCoupleMap.cend()) { couple = (*c).second; } return couple; } diff --git a/source/geometry/management/include/G4VoxelLimits.icc b/source/geometry/management/include/G4VoxelLimits.icc index c8d21acb39..476521326a 100644 --- a/source/geometry/management/include/G4VoxelLimits.icc +++ b/source/geometry/management/include/G4VoxelLimits.icc @@ -70,15 +70,12 @@ G4double G4VoxelLimits::GetMaxExtent(const EAxis pAxis) const { return GetMaxXExtent(); } - else if (pAxis==kYAxis) + if (pAxis==kYAxis) { return GetMaxYExtent(); } - else - { - assert(pAxis==kZAxis); - return GetMaxZExtent(); - } + assert(pAxis==kZAxis); + return GetMaxZExtent(); } inline @@ -88,33 +85,30 @@ G4double G4VoxelLimits::GetMinExtent(const EAxis pAxis) const { return GetMinXExtent(); } - else if (pAxis==kYAxis) + if (pAxis==kYAxis) { return GetMinYExtent(); } - else - { - assert(pAxis==kZAxis); - return GetMinZExtent(); - } + assert(pAxis==kZAxis); + return GetMinZExtent(); } inline G4bool G4VoxelLimits::IsXLimited() const { - return !(fxAxisMin==-kInfinity&&fxAxisMax==kInfinity); + return fxAxisMin!=-kInfinity||fxAxisMax!=kInfinity; } inline G4bool G4VoxelLimits::IsYLimited() const { - return !(fyAxisMin==-kInfinity&&fyAxisMax==kInfinity); + return fyAxisMin!=-kInfinity||fyAxisMax!=kInfinity; } inline G4bool G4VoxelLimits::IsZLimited() const { - return !(fzAxisMin==-kInfinity&&fzAxisMax==kInfinity); + return fzAxisMin!=-kInfinity||fzAxisMax!=kInfinity; } inline @@ -130,15 +124,12 @@ G4bool G4VoxelLimits::IsLimited(const EAxis pAxis) const { return IsXLimited(); } - else if (pAxis==kYAxis) + if (pAxis==kYAxis) { return IsYLimited(); } - else - { - assert(pAxis==kZAxis); - return IsZLimited(); - } + assert(pAxis==kZAxis); + return IsZLimited(); } inline diff --git a/source/geometry/management/src/G4BoundingEnvelope.cc b/source/geometry/management/src/G4BoundingEnvelope.cc index 0340207b82..1bdd058b91 100644 --- a/source/geometry/management/src/G4BoundingEnvelope.cc +++ b/source/geometry/management/src/G4BoundingEnvelope.cc @@ -69,17 +69,17 @@ G4BoundingEnvelope(const std::vector& polygons) G4double xmax = -kInfinity, ymax = -kInfinity, zmax = -kInfinity; for (const auto & polygon : *fPolygons) { - for (auto ipoint = polygon->cbegin(); ipoint != polygon->cend(); ++ipoint) + for (const auto & ipoint : *polygon) { - G4double x = ipoint->x(); - if (x < xmin) xmin = x; - if (x > xmax) xmax = x; - G4double y = ipoint->y(); - if (y < ymin) ymin = y; - if (y > ymax) ymax = y; - G4double z = ipoint->z(); - if (z < zmin) zmin = z; - if (z > zmax) zmax = z; + G4double x = ipoint.x(); + if (x < xmin) { xmin = x; } + if (x > xmax) { xmax = x; } + G4double y = ipoint.y(); + if (y < ymin) { ymin = y; } + if (y > ymax) { ymax = y; } + G4double z = ipoint.z(); + if (z < zmin) { zmin = z; } + if (z > zmax) { zmax = z; } } } fMin.set(xmin,ymin,zmin); @@ -158,9 +158,9 @@ void G4BoundingEnvelope::CheckBoundingPolygons() for (std::size_t k=0; ksize(); - if (np == nsize) continue; - if (np == 1 && k==0) continue; - if (np == 1 && k==nbases-1) continue; + if (np == nsize) { continue; } + if (np == 1 && k==0) { continue; } + if (np == 1 && k==nbases-1) { continue; } std::ostringstream message; message << "Badly constructed polygons!" << "\nNumber of polygons: " << nbases @@ -204,12 +204,12 @@ BoundingBoxVsVoxelLimits(const EAxis pAxis, G4double zmin = fMin.z() + pTransform3D.dz(); G4double zmax = fMax.z() + pTransform3D.dz(); - if (xmin-kCarTolerance > xmaxlim) return true; - if (xmax+kCarTolerance < xminlim) return true; - if (ymin-kCarTolerance > ymaxlim) return true; - if (ymax+kCarTolerance < yminlim) return true; - if (zmin-kCarTolerance > zmaxlim) return true; - if (zmax+kCarTolerance < zminlim) return true; + if (xmin-kCarTolerance > xmaxlim) { return true; } + if (xmax+kCarTolerance < xminlim) { return true; } + if (ymin-kCarTolerance > ymaxlim) { return true; } + if (ymax+kCarTolerance < yminlim) { return true; } + if (zmin-kCarTolerance > zmaxlim) { return true; } + if (zmax+kCarTolerance < zminlim) { return true; } if (xmin >= xminlim && xmax <= xmaxlim && ymin >= yminlim && ymax <= ymaxlim && @@ -250,12 +250,12 @@ BoundingBoxVsVoxelLimits(const EAxis pAxis, // Check if the sphere surrounding the bounding box is outside // the voxel limits // - if (center.x()-radius > xmaxlim) return true; - if (center.y()-radius > ymaxlim) return true; - if (center.z()-radius > zmaxlim) return true; - if (center.x()+radius < xminlim) return true; - if (center.y()+radius < yminlim) return true; - if (center.z()+radius < zminlim) return true; + if (center.x()-radius > xmaxlim) { return true; } + if (center.y()-radius > ymaxlim) { return true; } + if (center.z()-radius > zmaxlim) { return true; } + if (center.x()+radius < xminlim) { return true; } + if (center.y()+radius < yminlim) { return true; } + if (center.z()+radius < zminlim) { return true; } return false; } @@ -289,12 +289,12 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, G4double zmin = fMin.z() + pTransform3D.dz(); G4double zmax = fMax.z() + pTransform3D.dz(); - if (xmin-kCarTolerance > xmaxlim) return false; - if (xmax+kCarTolerance < xminlim) return false; - if (ymin-kCarTolerance > ymaxlim) return false; - if (ymax+kCarTolerance < yminlim) return false; - if (zmin-kCarTolerance > zmaxlim) return false; - if (zmax+kCarTolerance < zminlim) return false; + if (xmin-kCarTolerance > xmaxlim) { return false; } + if (xmax+kCarTolerance < xminlim) { return false; } + if (ymin-kCarTolerance > ymaxlim) { return false; } + if (ymax+kCarTolerance < yminlim) { return false; } + if (zmin-kCarTolerance > zmaxlim) { return false; } + if (zmax+kCarTolerance < zminlim) { return false; } if (fPolygons == nullptr) { @@ -368,39 +368,39 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, { G4double coor; coor = cx*fMin.x() + cy*fMin.y() + cz*fMin.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMax.x() + cy*fMin.y() + cz*fMin.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMax.x() + cy*fMax.y() + cz*fMin.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMin.x() + cy*fMax.y() + cz*fMin.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMin.x() + cy*fMin.y() + cz*fMax.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMax.x() + cy*fMin.y() + cz*fMax.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMax.x() + cy*fMax.y() + cz*fMax.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } coor = cx*fMin.x() + cy*fMax.y() + cz*fMax.z() + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } } else { for (const auto & polygon : *fPolygons) { - for (auto ipoint=polygon->cbegin(); ipoint!=polygon->cend(); ++ipoint) + for (const auto & ipoint : *polygon) { - G4double coor = ipoint->x()*cx + ipoint->y()*cy + ipoint->z()*cz + cd; - if (coor < emin) emin = coor; - if (coor > emax) emax = coor; + G4double coor = ipoint.x()*cx + ipoint.y()*cy + ipoint.z()*cz + cd; + if (coor < emin) { emin = coor; } + if (coor > emax) { emax = coor; } } } } @@ -412,12 +412,12 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, // Check if the sphere surrounding the bounding box is outside // the voxel limits // - if (center.x()-radius > xmaxlim) return false; - if (center.y()-radius > ymaxlim) return false; - if (center.z()-radius > zmaxlim) return false; - if (center.x()+radius < xminlim) return false; - if (center.y()+radius < yminlim) return false; - if (center.z()+radius < zminlim) return false; + if (center.x()-radius > xmaxlim) { return false; } + if (center.y()-radius > ymaxlim) { return false; } + if (center.z()-radius > zmaxlim) { return false; } + if (center.x()+radius < xminlim) { return false; } + if (center.y()+radius < yminlim) { return false; } + if (center.z()+radius < zminlim) { return false; } // Transform polygons // @@ -452,11 +452,15 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, { baseA.resize(bases[k].second); for (G4int i = 0; i < bases[k].second; ++i) + { baseA[i] = vertices[bases[k].first + i]; + } baseB.resize(bases[k+1].second); for (G4int i = 0; i < bases[k+1].second; ++i) + { baseB[i] = vertices[bases[k+1].first + i]; + } // Find bounding box of current prism G4Segment3D prismAABB; @@ -471,52 +475,76 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, prismAABB.second.z()<= limits.GetMaxZExtent()) { if (extent.first.x() > prismAABB.first.x()) + { extent.first.setX( prismAABB.first.x() ); + } if (extent.first.y() > prismAABB.first.y()) + { extent.first.setY( prismAABB.first.y() ); + } if (extent.first.z() > prismAABB.first.z()) + { extent.first.setZ( prismAABB.first.z() ); + } if (extent.second.x() < prismAABB.second.x()) + { extent.second.setX(prismAABB.second.x()); + } if (extent.second.y() < prismAABB.second.y()) + { extent.second.setY(prismAABB.second.y()); + } if (extent.second.z() < prismAABB.second.z()) + { extent.second.setZ(prismAABB.second.z()); + } continue; } // Check if prismAABB is outside the voxel limits - if (prismAABB.first.x() > limits.GetMaxXExtent()) continue; - if (prismAABB.first.y() > limits.GetMaxYExtent()) continue; - if (prismAABB.first.z() > limits.GetMaxZExtent()) continue; - if (prismAABB.second.x() < limits.GetMinXExtent()) continue; - if (prismAABB.second.y() < limits.GetMinYExtent()) continue; - if (prismAABB.second.z() < limits.GetMinZExtent()) continue; + if (prismAABB.first.x() > limits.GetMaxXExtent()) { continue; } + if (prismAABB.first.y() > limits.GetMaxYExtent()) { continue; } + if (prismAABB.first.z() > limits.GetMaxZExtent()) { continue; } + if (prismAABB.second.x() < limits.GetMinXExtent()) { continue; } + if (prismAABB.second.y() < limits.GetMinYExtent()) { continue; } + if (prismAABB.second.z() < limits.GetMinZExtent()) { continue; } // Clip edges of the prism by adjusted G4VoxelLimits box std::vector vecEdges; CreateListOfEdges(baseA, baseB, vecEdges); - if (ClipEdgesByVoxel(vecEdges, limits, extent)) continue; + if (ClipEdgesByVoxel(vecEdges, limits, extent)) { continue; } // Some edges of the prism are completely outside of the voxel // limits, clip selected edges (see bits) of adjusted G4VoxelLimits // by the prism G4int bits = 0x000; if (limits.GetMinXExtent() < prismAABB.first.x()) + { bits |= 0x988; // 1001 1000 1000 + } if (limits.GetMaxXExtent() > prismAABB.second.x()) + { bits |= 0x622; // 0110 0010 0010 + } if (limits.GetMinYExtent() < prismAABB.first.y()) + { bits |= 0x311; // 0011 0001 0001 + } if (limits.GetMaxYExtent() > prismAABB.second.y()) + { bits |= 0xC44; // 1100 0100 0100 + } if (limits.GetMinZExtent() < prismAABB.first.z()) + { bits |= 0x00F; // 0000 0000 1111 + } if (limits.GetMaxZExtent() > prismAABB.second.z()) + { bits |= 0x0F0; // 0000 1111 0000 - if (bits == 0xFFF) continue; + } + if (bits == 0xFFF) { continue; } std::vector vecPlanes; CreateListOfPlanes(baseA, baseB, vecPlanes); @@ -530,7 +558,7 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, if (pAxis == kYAxis) { emin = extent.first.y(); emax = extent.second.y(); } if (pAxis == kZAxis) { emin = extent.first.z(); emax = extent.second.z(); } - if (emin > emax) return false; + if (emin > emax) { return false; } emin -= delta; emax += delta; G4double minlim = pVoxelLimits.GetMinExtent(pAxis); @@ -549,7 +577,7 @@ G4BoundingEnvelope::FindScaleFactor(const G4Transform3D& pTransform3D) const { if (pTransform3D.xx() == 1. && pTransform3D.yy() == 1. && - pTransform3D.zz() == 1.) return 1.; + pTransform3D.zz() == 1.) { return 1.; } G4double xx = pTransform3D.xx(); G4double yx = pTransform3D.yx(); @@ -613,14 +641,22 @@ TransformVertices(const G4Transform3D& pTransform3D, { G4ThreeVector offset = pTransform3D.getTranslation(); for (auto i = ia; i != iaend; ++i) + { for (auto k = (*i)->cbegin(); k != (*i)->cend(); ++k) + { pVertices.emplace_back((*k) + offset); + } + } } else { for (auto i = ia; i != iaend; ++i) + { for (auto k = (*i)->cbegin(); k != (*i)->cend(); ++k) + { pVertices.push_back(pTransform3D*G4Point3D(*k)); + } + } } } @@ -641,14 +677,14 @@ G4BoundingEnvelope::GetPrismAABB(const G4Polygon3D& pBaseA, for (const auto & it1 : pBaseA) { G4double x = it1.x(); - if (x < xmin) xmin = x; - if (x > xmax) xmax = x; + if (x < xmin) { xmin = x; } + if (x > xmax) { xmax = x; } G4double y = it1.y(); - if (y < ymin) ymin = y; - if (y > ymax) ymax = y; + if (y < ymin) { ymin = y; } + if (y > ymax) { ymax = y; } G4double z = it1.z(); - if (z < zmin) zmin = z; - if (z > zmax) zmax = z; + if (z < zmin) { zmin = z; } + if (z > zmax) { zmax = z; } } // Second base @@ -656,14 +692,14 @@ G4BoundingEnvelope::GetPrismAABB(const G4Polygon3D& pBaseA, for (const auto & it2 : pBaseB) { G4double x = it2.x(); - if (x < xmin) xmin = x; - if (x > xmax) xmax = x; + if (x < xmin) { xmin = x; } + if (x > xmax) { xmax = x; } G4double y = it2.y(); - if (y < ymin) ymin = y; - if (y > ymax) ymax = y; + if (y < ymin) { ymin = y; } + if (y > ymax) { ymax = y; } G4double z = it2.z(); - if (z < zmin) zmin = z; - if (z > zmax) zmax = z; + if (z < zmin) { zmin = z; } + if (z > zmax) { zmax = z; } } // Set bounding box @@ -735,8 +771,8 @@ G4BoundingEnvelope::CreateListOfPlanes(const G4Polygon3D& baseA, std::size_t nb = baseB.size(); G4Point3D pa(0.,0.,0.), pb(0.,0.,0.), p0; G4Normal3D norm; - for (std::size_t i=0; i& pEdges, G4Point3D p2 = pEdges[k].second; if (std::abs(p1.x()-p2.x())+ std::abs(p1.y()-p2.y())+ - std::abs(p1.z()-p2.z()) < kCarTolerance) continue; + std::abs(p1.z()-p2.z()) < kCarTolerance) { continue; } G4double d1, d2; // Clip current edge by X min d1 = pBox.GetMinXExtent() - p1.x(); diff --git a/source/geometry/management/src/G4GeomTools.cc b/source/geometry/management/src/G4GeomTools.cc index 2a7ff38be5..81adf5d768 100644 --- a/source/geometry/management/src/G4GeomTools.cc +++ b/source/geometry/management/src/G4GeomTools.cc @@ -53,7 +53,7 @@ G4double G4GeomTools::TriangleArea(const G4TwoVector& A, const G4TwoVector& B, const G4TwoVector& C) { - G4double Ax = A.x(), Ay = A.y(); + G4double Ax = A.x(), Ay = A.y(); return ((B.x()-Ax)*(C.y()-Ay) - (B.y()-Ay)*(C.x()-Ax))*0.5; } @@ -76,7 +76,8 @@ G4double G4GeomTools::QuadArea(const G4TwoVector& A, G4double G4GeomTools::PolygonArea(const G4TwoVectorList& p) { auto n = (G4int)p.size(); - if (n < 3) return 0.0; // degenerate polygon + if (n < 3) { return 0.0; // degenerate polygon +} G4double area = p[n-1].x()*p[0].y() - p[0].x()*p[n-1].y(); for(G4int i=1; i 0.) { - if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) < 0.) return false; - if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) < 0.) return false; - if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) < 0.) return false; + if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) < 0.) { return false; } + if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) < 0.) { return false; } + if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) < 0.) { return false; } } else { - if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) > 0.) return false; - if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) > 0.) return false; - if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) > 0.) return false; + if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) > 0.) { return false; } + if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) > 0.) { return false; } + if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) > 0.) { return false; } } return true; } @@ -125,15 +126,15 @@ G4bool G4GeomTools::PointInTriangle(const G4TwoVector& A, G4double Px = P.x(), Py = P.y(); if ((Bx-Ax)*(Cy-Ay) - (By-Ay)*(Cx-Ax) > 0.) { - if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) < 0.) return false; - if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) < 0.) return false; - if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) < 0.) return false; + if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) < 0.) { return false; } + if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) < 0.) { return false; } + if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) < 0.) { return false; } } else { - if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) > 0.) return false; - if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) > 0.) return false; - if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) > 0.) return false; + if ((Ax-Cx)*(Py-Cy) - (Ay-Cy)*(Px-Cx) > 0.) { return false; } + if ((Bx-Ax)*(Py-Ay) - (By-Ay)*(Px-Ax) > 0.) { return false; } + if ((Cx-Bx)*(Py-By) - (Cy-By)*(Px-Bx) > 0.) { return false; } } return true; } @@ -170,7 +171,7 @@ G4bool G4GeomTools::IsConvex(const G4TwoVectorList& polygon) G4bool gotNegative = false; G4bool gotPositive = false; auto n = (G4int)polygon.size(); - if (n <= 0) return false; + if (n <= 0) { return false; } for (G4int icur=0; icur 0) gotPositive = true; - if (gotNegative && gotPositive) return false; + if (std::abs(cross) < kCarTolerance) { return false; } + if (cross < 0) { gotNegative = true; } + if (cross > 0) { gotPositive = true; } + if (gotNegative && gotPositive) { return false; } } return true; } @@ -198,7 +199,7 @@ G4bool G4GeomTools::TriangulatePolygon(const G4TwoVectorList& polygon, G4bool reply = TriangulatePolygon(polygon,triangles); auto n = (G4int)triangles.size(); - for (G4int i=0; i 0.) - for (G4int i=0; i 0.) { + for (G4int i=0; i2; ) @@ -235,8 +237,8 @@ G4bool G4GeomTools::TriangulatePolygon(const G4TwoVectorList& polygon, if ((count--) <= 0) { delete [] V; - if (area < 0.) std::reverse(result.begin(),result.end()); - return false; + if (area < 0.) { std::reverse(result.begin(),result.end()); } + return false; } // three consecutive vertices in current polygon, @@ -253,13 +255,13 @@ G4bool G4GeomTools::TriangulatePolygon(const G4TwoVectorList& polygon, // remove vertex b from remaining polygon nv--; - for(G4int i=b; i xmax) continue; + if (Px < xmin || Px > xmax) { continue; } G4double Py = contour[V[i]].y(); - if (Py < ymin || Py > ymax) continue; - if (PointInTriangle(Ax,Ay,Bx,By,Cx,Cy,Px,Py)) return false; + if (Py < ymin || Py > ymax) { continue; } + if (PointInTriangle(Ax,Ay,Bx,By,Cx,Cy,Px,Py)) { return false; } } return true; } @@ -304,7 +306,7 @@ G4bool G4GeomTools::CheckSnip(const G4TwoVectorList& contour, void G4GeomTools::RemoveRedundantVertices(G4TwoVectorList& polygon, std::vector& iout, - G4double tolerance) + G4double tolerance) { iout.resize(0); // set tolerance squared @@ -317,7 +319,7 @@ void G4GeomTools::RemoveRedundantVertices(G4TwoVectorList& polygon, // Main loop: check every three consecutive points, if the points // are collinear then mark middle point for removal // - G4int icur = 0, iprev = 0, inext = 0, nout = 0; + G4int icur = 0, iprev = 0, inext = 0, nout = 0; for (G4int i=0; i= nv) inext -= nv; - if (polygon[inext].x() != removeIt) break; + if (inext >= nv) { inext -= nv; } + if (polygon[inext].x() != removeIt) { break; } } - if (iprev == inext) break; // degenerate polygon, stop + if (iprev == inext) { break; } // degenerate polygon, stop // Calculate parameters of triangle (iprev->icur->inext), // if triangle is too small or too narrow then mark current @@ -344,7 +346,7 @@ void G4GeomTools::RemoveRedundantVertices(G4TwoVectorList& polygon, G4TwoVector e1 = polygon[iprev] - polygon[icur]; G4TwoVector e2 = polygon[inext] - polygon[icur]; - // Check length of edges, then check height of the triangle + // Check length of edges, then check height of the triangle G4double leng1 = e1.mag2(); G4double leng2 = e2.mag2(); G4double leng3 = (e2-e1).mag2(); @@ -368,18 +370,18 @@ void G4GeomTools::RemoveRedundantVertices(G4TwoVectorList& polygon, icur = 0; if (nv - nout < 3) // degenerate polygon, remove all points { - for (G4int i=0; i= CLHEP::twopi) return true; + if (delPhi >= CLHEP::twopi) { return true; } DiskExtent(rmin,rmax, std::sin(startPhi),std::cos(startPhi), @@ -433,25 +435,25 @@ void G4GeomTools::DiskExtent(G4double rmin, G4double rmax, pmin.set(-rmax,-rmax); pmax.set( rmax, rmax); - if (std::abs(sinEnd-sinStart) < kCarTolerance && - std::abs(cosEnd-cosStart) < kCarTolerance) return; + if (std::abs(sinEnd-sinStart) < kCarTolerance && + std::abs(cosEnd-cosStart) < kCarTolerance) { return; } // get start and end quadrants // // 1 | 0 - // ---+--- + // ---+--- // 3 | 2 // G4int icase = (cosEnd < 0) ? 1 : 0; - if (sinEnd < 0) icase += 2; - if (cosStart < 0) icase += 4; - if (sinStart < 0) icase += 8; + if (sinEnd < 0) { icase += 2; } + if (cosStart < 0) { icase += 4; } + if (sinStart < 0) { icase += 8; } switch (icase) { // start quadrant 0 case 0: // start->end : 0->0 - if (sinEnd < sinStart) break; + if (sinEnd < sinStart) { break; } pmin.set(rmin*cosEnd,rmin*sinStart); pmax.set(rmax*cosStart,rmax*sinEnd ); break; @@ -473,7 +475,7 @@ void G4GeomTools::DiskExtent(G4double rmin, G4double rmax, pmax.set(rmax,std::max(rmax*sinStart,rmax*sinEnd)); break; case 5: // start->end : 1->1 - if (sinEnd > sinStart) break; + if (sinEnd > sinStart) { break; } pmin.set(rmax*cosEnd,rmin*sinEnd ); pmax.set(rmin*cosStart,rmax*sinStart); break; @@ -495,7 +497,7 @@ void G4GeomTools::DiskExtent(G4double rmin, G4double rmax, pmax.set(rmax,rmax); break; case 10: // start->end : 2->2 - if (sinEnd < sinStart) break; + if (sinEnd < sinStart) { break; } pmin.set(rmin*cosStart,rmax*sinStart); pmax.set(rmax*cosEnd,rmin*sinEnd ); break; @@ -517,7 +519,7 @@ void G4GeomTools::DiskExtent(G4double rmin, G4double rmax, pmax.set(rmax*cosEnd,std::max(rmin*sinStart,rmin*sinEnd)); break; case 15: // start->end : 3->3 - if (sinEnd > sinStart) break; + if (sinEnd > sinStart) { break; } pmin.set(rmax*cosStart,rmax*sinEnd); pmax.set(rmin*cosEnd,rmin*sinStart); break; @@ -573,8 +575,8 @@ G4double G4GeomTools::comp_ellint_2(G4double e) G4double a = 1.; G4double b = std::sqrt((1. - e)*(1. + e)); - if (b == 1.) return CLHEP::halfpi; - if (b == 0.) return 1.; + if (b == 1.) { return CLHEP::halfpi; } + if (b == 0.) { return 1.; } G4double x = 1.; G4double y = b; @@ -621,7 +623,7 @@ G4ThreeVector G4GeomTools::QuadAreaNormal(const G4ThreeVector& A, G4ThreeVector G4GeomTools::PolygonAreaNormal(const G4ThreeVectorList& p) { auto n = (G4int)p.size(); - if (n < 3) return {0,0,0}; // degerate polygon + if (n < 3) { return {0,0,0}; } // degerate polygon G4ThreeVector normal = p[n-1].cross(p[0]); for(G4int i=1; i= len2) return (B-P).mag(); // closest point is B + if (u >= len2) { return (B-P).mag(); } // closest point is B return ((u/len2)*AB - AP).mag(); // distance to line } @@ -663,10 +665,10 @@ G4GeomTools::ClosestPointOnSegment(const G4ThreeVector& P, G4ThreeVector AB = B - A; G4double u = AP.dot(AB); - if (u <= 0) return A; // closest point is A + if (u <= 0) { return A; } // closest point is A G4double len2 = AB.mag2(); - if (u >= len2) return B; // closest point is B + if (u >= len2) { return B; } // closest point is B G4double t = u/len2; return A + t*AB; // closest point on segment @@ -679,7 +681,7 @@ G4GeomTools::ClosestPointOnSegment(const G4ThreeVector& P, // The implementation is based on the algorithm published in // "Geometric Tools for Computer Graphics", Philip J Scheider and // David H Eberly, Elsevier Science (USA), 2003. -// +// // The algorithm is also available at: // http://www.geometrictools.com/Documentation/DistancePoint3Triangle3.pdf @@ -722,10 +724,11 @@ G4GeomTools::ClosestPointOnTriangle(const G4ThreeVector& P, */ G4int region = -1; - if (t0+t1 <= det) + if (t0+t1 <= det) { region = (t0 < 0) ? ((t1 < 0) ? 4 : 3) : ((t1 < 0) ? 5 : 0); - else + } else { region = (t0 < 0) ? 2 : ((t1 < 0) ? 6 : 1); + } switch (region) { @@ -736,8 +739,8 @@ G4GeomTools::ClosestPointOnTriangle(const G4ThreeVector& P, } case 1: // edge BC { - G4double numer = c + e - b - d; - if (numer <= 0) return C; + G4double numer = c + e - b - d; + if (numer <= 0) { return C; } G4double denom = a - 2*b + c; return (numer >= denom) ? B : C + (numer/denom)*(edge0-edge1); } @@ -758,7 +761,7 @@ G4GeomTools::ClosestPointOnTriangle(const G4ThreeVector& P, return (e >= 0) ? A : ((-e >= c) ? C : A + (-e/c)*edge1); case 4: // edge AB or AC - if (d < 0) return (-d >= a) ? B : A + (-d/a)*edge0; + if (d < 0) { return (-d >= a) ? B : A + (-d/a)*edge0; } return (e >= 0) ? A : ((-e >= c) ? C : A + (-e/c)*edge1); case 5: // edge AB @@ -777,7 +780,7 @@ G4GeomTools::ClosestPointOnTriangle(const G4ThreeVector& P, // same: (d >= 0) ? A : ((-d >= a) ? B : A + (-d/a)*edge0) return (tmp1 <= 0) ? B : (( d >= 0) ? A : A + (-d/a)*edge0); } - default: // impossible case + default: // impossible case return {kInfinity,kInfinity,kInfinity}; } } @@ -799,22 +802,22 @@ G4GeomTools::SphereExtent(G4double rmin, G4double rmax, // pmin.set(0,0,0); pmax.set(0,0,0); - if (rmin < 0) return false; - if (rmax <= rmin + kCarTolerance) return false; - if (delTheta <= 0 + kCarTolerance) return false; - if (delPhi <= 0 + kCarTolerance) return false; + if (rmin < 0) { return false; } + if (rmax <= rmin + kCarTolerance) { return false; } + if (delTheta <= 0 + kCarTolerance) { return false; } + if (delPhi <= 0 + kCarTolerance) { return false; } G4double stheta = startTheta; G4double dtheta = delTheta; - if (stheta < 0 && stheta > CLHEP::pi) return false; - if (stheta + dtheta > CLHEP::pi) dtheta = CLHEP::pi - stheta; - if (dtheta <= 0 + kCarTolerance) return false; + if (stheta < 0 && stheta > CLHEP::pi) { return false; } + if (stheta + dtheta > CLHEP::pi) { dtheta = CLHEP::pi - stheta; } + if (dtheta <= 0 + kCarTolerance) { return false; } // calculate extent // pmin.set(-rmax,-rmax,-rmax); pmax.set( rmax, rmax, rmax); - if (dtheta >= CLHEP::pi && delPhi >= CLHEP::twopi) return true; + if (dtheta >= CLHEP::pi && delPhi >= CLHEP::twopi) { return true; } G4double etheta = stheta + dtheta; G4double sinStart = std::sin(stheta); @@ -824,8 +827,8 @@ G4GeomTools::SphereExtent(G4double rmin, G4double rmax, G4double rhomin = rmin*std::min(sinStart,sinEnd); G4double rhomax = rmax; - if (stheta > CLHEP::halfpi) rhomax = rmax*sinStart; - if (etheta < CLHEP::halfpi) rhomax = rmax*sinEnd; + if (stheta > CLHEP::halfpi) { rhomax = rmax*sinStart; } + if (etheta < CLHEP::halfpi) { rhomax = rmax*sinEnd; } G4TwoVector xymin,xymax; DiskExtent(rhomin,rhomax, @@ -839,3 +842,95 @@ G4GeomTools::SphereExtent(G4double rmin, G4double rmax, pmax.set(xymax.x(),xymax.y(),zmax); return true; } + +/////////////////////////////////////////////////////////////////////// +// +// Calculate hyperbolic surface stereo + +G4double +G4GeomTools::HypeStereo(G4double r0, G4double r, G4double h) +{ + static const G4double kCarTolerance = + G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); + if (std::abs(r - r0) < kCarTolerance) { return 0.; } + return std::atan(std::sqrt((r - r0)*(r + r0))/std::abs(h)); +} + +/////////////////////////////////////////////////////////////////////// +// +// Find XY-coordinates of the corners of the bounding generic trap +// for the specified twisted tube + +void +G4GeomTools::TwistedTubeBoundingTrap(G4double twistAng, + G4double endInnerRad, + G4double endOuterRad, + G4double dPhi, + G4TwoVectorList& vertices) +{ + vertices.resize(8); + G4double rmin = std::abs(endInnerRad); + G4double rmax = std::abs(endOuterRad); + + // Set untwisted vertices + G4double phi = dPhi/2.; + G4double sinphi = std::sin(phi); + G4double cosphi = std::cos(phi); + G4double tanphi = std::tan(phi); + vertices[0].set(rmin*cosphi, rmin*sinphi); + vertices[1].set(rmax, rmax*tanphi); + vertices[2].set(rmax,-rmax*tanphi); + vertices[3].set(rmin*cosphi,-rmin*sinphi); + vertices[4] = vertices[0]; + vertices[5] = vertices[1]; + vertices[6] = vertices[2]; + vertices[7] = vertices[3]; + + // Twist vertices + G4double ang = twistAng/2.; + for(auto i = 0; i < 4; ++i) + { + vertices[i].rotate(-ang); // vertices at -halfz + vertices[i + 4].rotate(ang); // vertices at +halfz + } +} + +/////////////////////////////////////////////////////////////////////// +// +// Calculate surface area of hyperboloid between zmin and zmax + +G4double +G4GeomTools::HyperboloidSurfaceArea(G4double dphi, G4double r0, G4double tanstereo, + G4double zmin, G4double zmax) +{ + static const G4double kCarTolerance = + G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); + + G4double a = std::abs(r0); // radius at z = 0 + G4double t = std::abs(tanstereo); // tan(stereo) + G4double phi = std::abs(dphi); // delta phi + + // Check spesial cases: cylindrical and conical surfaces + if (t < kCarTolerance) { return a*std::abs(zmax - zmin)*phi; } // cylinder + G4double rmin = std::hypot(t*zmin, a); // radius at zmin + G4double rmax = std::hypot(t*zmax, a); // radius at zmax + if (a < kCarTolerance) // cone + { + G4double smin = rmin*std::hypot(rmin, zmin); + G4double smax = rmax*std::hypot(rmax, zmax); + return (zmin*zmax < 0.) ? (smin + smax)*phi/2. : std::abs(smax - smin)*phi/2.; + } + // Find surface area + G4double tt = t*t; + G4double aa = a*a; + G4double cc = aa/tt; + G4double k = std::sqrt(aa + cc)/cc; + + G4double hmin = std::abs(zmin); + G4double smin = a*(hmin*std::hypot(1., k*hmin) + std::asinh(k*hmin)/k); + if (zmax == -zmin) { return smin*phi; } + + G4double hmax = std::abs(zmax); + G4double smax = a*(hmax*std::hypot(1., k*hmax) + std::asinh(k*hmax)/k); + return (zmin*zmax < 0.) ? (smin + smax)*phi/2. :std::abs(smax - smin)*phi/2.; +} diff --git a/source/geometry/management/src/G4GeometryManager.cc b/source/geometry/management/src/G4GeometryManager.cc index f2f21ddfae..a07fca2b4e 100644 --- a/source/geometry/management/src/G4GeometryManager.cc +++ b/source/geometry/management/src/G4GeometryManager.cc @@ -78,7 +78,7 @@ namespace // Data structures / mutexes for parallel optimisation G4ThreadLocal G4GeometryManager* G4GeometryManager::fgInstance = nullptr; // Static *global* class data -G4bool G4GeometryManager::fParallelVoxelOptimisationRequested = false; +G4bool G4GeometryManager::fParallelVoxelOptimisationRequested = true; // Records User choice to use parallel voxel optimisation (or not) G4bool G4GeometryManager::fOptimiseInParallelConfigured = false; diff --git a/source/geometry/management/src/G4LogicalCrystalVolume.cc b/source/geometry/management/src/G4LogicalCrystalVolume.cc index a797d3ba8b..435831ebab 100644 --- a/source/geometry/management/src/G4LogicalCrystalVolume.cc +++ b/source/geometry/management/src/G4LogicalCrystalVolume.cc @@ -102,14 +102,14 @@ void G4LogicalCrystalVolume::SetMillerOrientation(G4int h, G4ThreeVector norm = (h*GetBasis(0)+k*GetBasis(1)+l*GetBasis(2)).unit(); - if (verboseLevel>1) G4cout << " norm = " << norm << G4endl; + if (verboseLevel>1) { G4cout << " norm = " << norm << G4endl; } // Aligns geometry +Z axis with lattice (hkl) normal fOrient = G4RotationMatrix::IDENTITY; fOrient.rotateZ(rot).rotateY(norm.theta()).rotateZ(norm.phi()); fInverse = fOrient.inverse(); - if (verboseLevel>1) G4cout << " fOrient = " << fOrient << G4endl; + if (verboseLevel>1) { G4cout << " fOrient = " << fOrient << G4endl; } // FIXME: Is this equivalent to (phi,theta,rot) Euler angles??? } diff --git a/source/geometry/management/src/G4LogicalVolume.cc b/source/geometry/management/src/G4LogicalVolume.cc index 02da06bb47..96a91b2098 100644 --- a/source/geometry/management/src/G4LogicalVolume.cc +++ b/source/geometry/management/src/G4LogicalVolume.cc @@ -512,10 +512,11 @@ G4LogicalVolume::IsAncestor(const G4VPhysicalVolume* aVolume) const G4bool isDaughter = IsDaughter(aVolume); if (!isDaughter) { - for (auto itDau = fDaughters.cbegin(); itDau != fDaughters.cend(); ++itDau) + for (const auto & daughter : fDaughters) { - isDaughter = (*itDau)->GetLogicalVolume()->IsAncestor(aVolume); - if (isDaughter) break; + isDaughter = daughter->GetLogicalVolume()->IsAncestor(aVolume); + if (isDaughter) { break; +} } } return isDaughter; @@ -531,9 +532,8 @@ G4LogicalVolume::IsAncestor(const G4VPhysicalVolume* aVolume) const G4int G4LogicalVolume::TotalVolumeEntities() const { G4int vols = 1; - for (auto itDau = fDaughters.cbegin(); itDau != fDaughters.cend(); ++itDau) + for (auto physDaughter : fDaughters) { - G4VPhysicalVolume* physDaughter = (*itDau); vols += physDaughter->GetMultiplicity() *physDaughter->GetLogicalVolume()->TotalVolumeEntities(); } @@ -599,9 +599,8 @@ G4double G4LogicalVolume::GetMass(G4bool forced, // and if required by the propagate flag, add the real daughter's // one computed recursively - for (auto itDau = fDaughters.cbegin(); itDau != fDaughters.cend(); ++itDau) + for (const auto & physDaughter : fDaughters) { - G4VPhysicalVolume* physDaughter = (*itDau); G4LogicalVolume* logDaughter = physDaughter->GetLogicalVolume(); G4double subMass = 0.0; G4VSolid* daughterSolid = nullptr; @@ -679,7 +678,8 @@ G4bool G4LogicalVolume::ChangeDaughtersType(EVolume aType) // void G4LogicalVolume::SetVisAttributes (const G4VisAttributes& VA) { - if (G4Threading::IsWorkerThread()) return; + if (G4Threading::IsWorkerThread()) { return; +} fVisAttributes = std::make_shared(VA); } @@ -689,6 +689,7 @@ void G4LogicalVolume::SetVisAttributes (const G4VisAttributes& VA) // void G4LogicalVolume::SetVisAttributes (const G4VisAttributes* pVA) { - if (G4Threading::IsWorkerThread()) return; + if (G4Threading::IsWorkerThread()) { return; +} fVisAttributes = std::shared_ptr(pVA,[](const G4VisAttributes*){}); } diff --git a/source/geometry/management/src/G4LogicalVolumeStore.cc b/source/geometry/management/src/G4LogicalVolumeStore.cc index 6f3d4ae6e1..c0cd8c16fc 100644 --- a/source/geometry/management/src/G4LogicalVolumeStore.cc +++ b/source/geometry/management/src/G4LogicalVolumeStore.cc @@ -90,10 +90,10 @@ void G4LogicalVolumeStore::Clean() G4LogicalVolumeStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { if (fgNotifier != nullptr) { fgNotifier->NotifyDeRegistration(); } - if (*pos != nullptr) { (*pos)->Lock(); delete *pos; } + if (pos != nullptr) { pos->Lock(); delete pos; } } store->bmap.clear(); store->mvalid = false; @@ -118,19 +118,19 @@ void G4LogicalVolumeStore::SetNotifier(G4VStoreNotifier* pNotifier) void G4LogicalVolumeStore::UpdateMap() { G4AutoLock l(&mapMutex); // to avoid thread contention at initialisation - if (mvalid) return; + if (mvalid) { return; } bmap.clear(); - for(auto pos=GetInstance()->cbegin(); pos!=GetInstance()->cend(); ++pos) + for(const auto & pos : *GetInstance()) { - const G4String& vol_name = (*pos)->GetName(); + const G4String& vol_name = pos->GetName(); auto it = bmap.find(vol_name); if (it != bmap.cend()) { - it->second.push_back(*pos); + it->second.push_back(pos); } else { - std::vector vol_vec { *pos }; + std::vector vol_vec { pos }; bmap.insert(std::make_pair(vol_name, vol_vec)); } } @@ -228,10 +228,7 @@ G4LogicalVolumeStore::GetVolume(const G4String& name, G4bool verbose, { return pos->second[pos->second.size()-1]; } - else - { - return pos->second[0]; - } + return pos->second[0]; } if (verbose) { diff --git a/source/geometry/management/src/G4PhysicalVolumeStore.cc b/source/geometry/management/src/G4PhysicalVolumeStore.cc index 80285dd93c..9df8c6de49 100644 --- a/source/geometry/management/src/G4PhysicalVolumeStore.cc +++ b/source/geometry/management/src/G4PhysicalVolumeStore.cc @@ -92,10 +92,10 @@ void G4PhysicalVolumeStore::Clean() G4PhysicalVolumeStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { if (fgNotifier != nullptr) { fgNotifier->NotifyDeRegistration(); } - delete *pos; + delete pos; } store->bmap.clear(); store->mvalid = false; @@ -120,19 +120,19 @@ void G4PhysicalVolumeStore::SetNotifier(G4VStoreNotifier* pNotifier) void G4PhysicalVolumeStore::UpdateMap() { G4AutoLock l(&mapMutex); // to avoid thread contention at initialisation - if (mvalid) return; + if (mvalid) { return; } bmap.clear(); - for(auto pos=GetInstance()->cbegin(); pos!=GetInstance()->cend(); ++pos) + for(const auto & pos : *GetInstance()) { - const G4String& vol_name = (*pos)->GetName(); + const G4String& vol_name = pos->GetName(); auto it = bmap.find(vol_name); if (it != bmap.cend()) { - it->second.push_back(*pos); + it->second.push_back(pos); } else { - std::vector vol_vec { *pos }; + std::vector vol_vec { pos }; bmap.insert(std::make_pair(vol_name, vol_vec)); } } @@ -233,10 +233,7 @@ G4PhysicalVolumeStore::GetVolume(const G4String& name, G4bool verbose, { return pos->second[pos->second.size()-1]; } - else - { - return pos->second[0]; - } + return pos->second[0]; } if (verbose) { diff --git a/source/geometry/management/src/G4ReflectedSolid.cc b/source/geometry/management/src/G4ReflectedSolid.cc index 1345d903ab..30248e6d85 100644 --- a/source/geometry/management/src/G4ReflectedSolid.cc +++ b/source/geometry/management/src/G4ReflectedSolid.cc @@ -454,16 +454,13 @@ G4ReflectedSolid::CreatePolyhedron () const polyhedron->Transform(*fDirectTransform3D); return polyhedron; } - else - { - std::ostringstream message; - message << "Solid - " << GetName() - << " - original solid has no" << G4endl - << "corresponding polyhedron. Returning NULL!"; - G4Exception("G4ReflectedSolid::CreatePolyhedron()", - "GeomMgt1001", JustWarning, message); - return nullptr; - } + std::ostringstream message; + message << "Solid - " << GetName() + << " - original solid has no" << G4endl + << "corresponding polyhedron. Returning NULL!"; + G4Exception("G4ReflectedSolid::CreatePolyhedron()", + "GeomMgt1001", JustWarning, message); + return nullptr; } ///////////////////////////////////////////////////////// diff --git a/source/geometry/management/src/G4Region.cc b/source/geometry/management/src/G4Region.cc index df5723ab94..413eea41ad 100644 --- a/source/geometry/management/src/G4Region.cc +++ b/source/geometry/management/src/G4Region.cc @@ -65,7 +65,6 @@ const G4RegionManager& G4Region::GetSubInstanceManager() G4Region::G4Region(const G4String& pName) : fName(pName) { - instanceID = subInstanceManager.CreateSubInstance(); G4MT_fsmanager = nullptr; G4MT_rsaction = nullptr; @@ -205,7 +204,7 @@ void G4Region::ScanVolumeTree(G4LogicalVolume* lv, G4bool region) // Stop recursion here if no further daughters are involved // - if(noDaughters==0) return; + if(noDaughters==0) { return; } G4VPhysicalVolume* daughterPVol = lv->GetDaughter(0); if (daughterPVol->IsParameterised()) @@ -397,9 +396,9 @@ void G4Region::UpdateMaterialList() // Loop over the root logical volumes and rebuild the list // of materials from scratch // - for (auto pLV=fRootVolumes.cbegin(); pLV!=fRootVolumes.cend(); ++pLV) + for (const auto & rootVolume : fRootVolumes) { - ScanVolumeTree(*pLV, true); + ScanVolumeTree(rootVolume, true); } } @@ -412,9 +411,13 @@ void G4Region::UpdateMaterialList() void G4Region::SetWorld(G4VPhysicalVolume* wp) { if(wp == nullptr) - { fWorldPhys = nullptr; } + { + fWorldPhys = nullptr; + } else - { if(BelongsTo(wp)) fWorldPhys = wp; } + { + if(BelongsTo(wp)) { fWorldPhys = wp; } + } return; } @@ -487,16 +490,16 @@ G4Region* G4Region::GetParentRegion(G4bool& unique) const // Loop over all logical volumes in the store // - for(auto lvItr=lvStore->cbegin(); lvItr!=lvStore->cend(); ++lvItr) + for(const auto & lvol : *lvStore) { - std::size_t nD = (*lvItr)->GetNoDaughters(); - G4Region* aR = (*lvItr)->GetRegion(); + std::size_t nD = lvol->GetNoDaughters(); + G4Region* aR = lvol->GetRegion(); // Loop over all daughters of each logical volume // for(std::size_t iD=0; iDGetDaughter(iD)->GetLogicalVolume()->GetRegion()==this) + if(lvol->GetDaughter(iD)->GetLogicalVolume()->GetRegion()==this) { if(parent != nullptr) { diff --git a/source/geometry/management/src/G4RegionStore.cc b/source/geometry/management/src/G4RegionStore.cc index a7183a0730..6006994d13 100644 --- a/source/geometry/management/src/G4RegionStore.cc +++ b/source/geometry/management/src/G4RegionStore.cc @@ -93,10 +93,10 @@ void G4RegionStore::Clean() G4RegionStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { if (fgNotifier != nullptr) { fgNotifier->NotifyDeRegistration(); } - delete *pos; + delete pos; } store->bmap.clear(); store->mvalid = false; @@ -121,19 +121,19 @@ void G4RegionStore::SetNotifier(G4VStoreNotifier* pNotifier) void G4RegionStore::UpdateMap() { G4AutoLock l(&mapMutex); // to avoid thread contention at initialisation - if (mvalid) return; + if (mvalid) { return; } bmap.clear(); - for(auto pos=GetInstance()->cbegin(); pos!=GetInstance()->cend(); ++pos) + for(const auto & pos : *GetInstance()) { - const G4String& reg_name = (*pos)->GetName(); + const G4String& reg_name = pos->GetName(); auto it = bmap.find(reg_name); if (it != bmap.cend()) { - it->second.push_back(*pos); + it->second.push_back(pos); } else { - std::vector reg_vec { *pos }; + std::vector reg_vec { pos }; bmap.insert(std::make_pair(reg_name, reg_vec)); } } @@ -226,9 +226,9 @@ G4RegionStore* G4RegionStore::GetInstance() // G4bool G4RegionStore::IsModified() const { - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) + for (const auto & i : *GetInstance()) { - if ((*i)->IsModified()) { return true; } + if (i->IsModified()) { return true; } } return false; } @@ -240,9 +240,9 @@ G4bool G4RegionStore::IsModified() const // void G4RegionStore::ResetRegionModified() { - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) + for (const auto & i : *GetInstance()) { - (*i)->RegionModified(false); + i->RegionModified(false); } } @@ -252,11 +252,11 @@ void G4RegionStore::ResetRegionModified() // void G4RegionStore::UpdateMaterialList(G4VPhysicalVolume* currentWorld) { - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) + for (const auto & i : *GetInstance()) { - if((*i)->IsInMassGeometry() || (*i)->IsInParallelGeometry() + if(i->IsInMassGeometry() || i->IsInParallelGeometry() || (currentWorld != nullptr)) - { (*i)->UpdateMaterialList(); } + { i->UpdateMaterialList(); } } } @@ -319,8 +319,8 @@ void G4RegionStore::SetWorldVolume() { // Reset all pointers first // - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) - { (*i)->SetWorld(nullptr); } + for (const auto & i : *GetInstance()) + { i->SetWorld(nullptr); } // Find world volumes // @@ -334,8 +334,8 @@ void G4RegionStore::SetWorldVolume() // Now 'fPhys' is a world volume, set it to regions that belong to it. // - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) - { (*i)->SetWorld(fPhys); } + for (const auto & i : *GetInstance()) + { i->SetWorld(fPhys); } } } diff --git a/source/geometry/management/src/G4SmartVoxelHeader.cc b/source/geometry/management/src/G4SmartVoxelHeader.cc index f7ccb5a93c..3d98d2fa71 100644 --- a/source/geometry/management/src/G4SmartVoxelHeader.cc +++ b/source/geometry/management/src/G4SmartVoxelHeader.cc @@ -195,14 +195,11 @@ G4bool G4SmartVoxelHeader::operator == (const G4SmartVoxelHeader& pHead) const { return false; } - else + leftHeader = leftProxy->GetHeader(); + rightHeader = rightProxy->GetHeader(); + if (!(*leftHeader == *rightHeader)) { - leftHeader = leftProxy->GetHeader(); - rightHeader = rightProxy->GetHeader(); - if (!(*leftHeader == *rightHeader)) - { - return false; - } + return false; } } else @@ -211,23 +208,18 @@ G4bool G4SmartVoxelHeader::operator == (const G4SmartVoxelHeader& pHead) const { return false; } - else + leftNode = leftProxy->GetNode(); + rightNode = rightProxy->GetNode(); + if (!(*leftNode == *rightNode)) { - leftNode = leftProxy->GetNode(); - rightNode = rightProxy->GetNode(); - if (!(*leftNode == *rightNode)) - { - return false; - } + return false; } } } return true; } - else - { - return false; - } + + return false; } // *************************************************************************** diff --git a/source/geometry/management/src/G4SmartVoxelStat.cc b/source/geometry/management/src/G4SmartVoxelStat.cc index 029b3b6697..a9612e8359 100644 --- a/source/geometry/management/src/G4SmartVoxelStat.cc +++ b/source/geometry/management/src/G4SmartVoxelStat.cc @@ -127,7 +127,7 @@ void G4SmartVoxelStat::CountHeadsAndNodes( const G4SmartVoxelHeader* head ) for(std::size_t i=0; iGetSlice(i); - if (proxy == lastProxy) continue; + if (proxy == lastProxy) { continue; } lastProxy = proxy; diff --git a/source/geometry/management/src/G4SolidStore.cc b/source/geometry/management/src/G4SolidStore.cc index 24ed5d9bd3..18dc6a5281 100644 --- a/source/geometry/management/src/G4SolidStore.cc +++ b/source/geometry/management/src/G4SolidStore.cc @@ -89,10 +89,10 @@ void G4SolidStore::Clean() G4SolidStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { if (fgNotifier != nullptr) { fgNotifier->NotifyDeRegistration(); } - delete *pos; + delete pos; } store->bmap.clear(); store->mvalid = false; @@ -117,19 +117,19 @@ void G4SolidStore::SetNotifier(G4VStoreNotifier* pNotifier) void G4SolidStore::UpdateMap() { G4AutoLock l(&mapMutex); // to avoid thread contention at initialisation - if (mvalid) return; + if (mvalid) { return; } bmap.clear(); - for(auto pos=GetInstance()->cbegin(); pos!=GetInstance()->cend(); ++pos) + for(const auto & pos : *GetInstance()) { - const G4String& sol_name = (*pos)->GetName(); + const G4String& sol_name = pos->GetName(); auto it = bmap.find(sol_name); if (it != bmap.cend()) { - it->second.push_back(*pos); + it->second.push_back(pos); } else { - std::vector sol_vec { *pos }; + std::vector sol_vec { pos }; bmap.insert(std::make_pair(sol_name, sol_vec)); } } @@ -227,10 +227,7 @@ G4VSolid* G4SolidStore::GetSolid(const G4String& name, G4bool verbose, { return pos->second[pos->second.size()-1]; } - else - { - return pos->second[0]; - } + return pos->second[0]; } if (verbose) { diff --git a/source/geometry/management/src/G4TouchableHistory.cc b/source/geometry/management/src/G4TouchableHistory.cc index 5ab2f74cca..a1e5f4b620 100644 --- a/source/geometry/management/src/G4TouchableHistory.cc +++ b/source/geometry/management/src/G4TouchableHistory.cc @@ -65,12 +65,8 @@ G4TouchableHistory::GetTranslation(G4int depth) const { return ftlate; } - else - { - *ctrans = - fhistory.GetTransform(CalculateHistoryIndex(depth)).NetTranslation(); - return *ctrans; - } + *ctrans = fhistory.GetTransform(CalculateHistoryIndex(depth)).NetTranslation(); + return *ctrans; } const G4RotationMatrix* @@ -86,9 +82,6 @@ G4TouchableHistory::GetRotation(G4int depth) const { return &frot; } - else - { - *rotM = fhistory.GetTransform(CalculateHistoryIndex(depth)).NetRotation(); - return rotM; - } + *rotM = fhistory.GetTransform(CalculateHistoryIndex(depth)).NetRotation(); + return rotM; } diff --git a/source/geometry/management/src/G4VSolid.cc b/source/geometry/management/src/G4VSolid.cc index cfa9dc374a..e2bc828b61 100644 --- a/source/geometry/management/src/G4VSolid.cc +++ b/source/geometry/management/src/G4VSolid.cc @@ -224,22 +224,20 @@ G4double G4VSolid::EstimateCubicVolume(G4int nStat, G4double epsilon) const EInside in; // values needed for CalculateExtent signature - - G4VoxelLimits limit; // Unlimited + G4VoxelLimits limit; // unlimited G4AffineTransform origin; // min max extents of pSolid along X,Y,Z - CalculateExtent(kXAxis,limit,origin,minX,maxX); CalculateExtent(kYAxis,limit,origin,minY,maxY); CalculateExtent(kZAxis,limit,origin,minZ,maxZ); // limits - if(nStat < 100) { nStat = 100; } if(epsilon > 0.01) { epsilon = 0.01; } halfepsilon = 0.5*epsilon; + G4QuickRand(1234567890); // set seed for(auto i = 0; i < nStat; ++i ) { px = minX-halfepsilon+(maxX-minX+epsilon)*G4QuickRand(); @@ -350,6 +348,7 @@ G4double G4VSolid::EstimateSurfaceArea(G4int nstat, G4double ell) const // Calculate surface area // + G4QuickRand(1234567890); // set seed G4int icount = 0; for(auto i = 0; i < npoints; ++i) { diff --git a/source/geometry/management/src/G4VoxelLimits.cc b/source/geometry/management/src/G4VoxelLimits.cc index 230a320602..23601e0336 100644 --- a/source/geometry/management/src/G4VoxelLimits.cc +++ b/source/geometry/management/src/G4VoxelLimits.cc @@ -43,20 +43,20 @@ void G4VoxelLimits::AddLimit( const EAxis pAxis, { if ( pAxis == kXAxis ) { - if ( pMin > fxAxisMin ) fxAxisMin = pMin ; - if ( pMax < fxAxisMax ) fxAxisMax = pMax ; + if ( pMin > fxAxisMin ) { fxAxisMin = pMin ; } + if ( pMax < fxAxisMax ) { fxAxisMax = pMax ; } } else if ( pAxis == kYAxis ) { - if ( pMin > fyAxisMin ) fyAxisMin = pMin ; - if ( pMax < fyAxisMax ) fyAxisMax = pMax ; + if ( pMin > fyAxisMin ) { fyAxisMin = pMin ; } + if ( pMax < fyAxisMax ) { fyAxisMax = pMax ; } } else { assert( pAxis == kZAxis ) ; - if ( pMin > fzAxisMin ) fzAxisMin = pMin ; - if ( pMax < fzAxisMax ) fzAxisMax = pMax ; + if ( pMin > fzAxisMin ) { fzAxisMin = pMin ; } + if ( pMax < fzAxisMax ) { fzAxisMax = pMax ; } } } @@ -223,18 +223,18 @@ G4int G4VoxelLimits::OutCode( const G4ThreeVector& pVec ) const if ( IsXLimited() ) { - if ( pVec.x() < fxAxisMin ) code |= 0x01 ; - if ( pVec.x() > fxAxisMax ) code |= 0x02 ; + if ( pVec.x() < fxAxisMin ) { code |= 0x01 ; } + if ( pVec.x() > fxAxisMax ) { code |= 0x02 ; } } if ( IsYLimited() ) { - if ( pVec.y() < fyAxisMin ) code |= 0x04 ; - if ( pVec.y() > fyAxisMax ) code |= 0x08 ; + if ( pVec.y() < fyAxisMin ) { code |= 0x04 ; } + if ( pVec.y() > fyAxisMax ) { code |= 0x08 ; } } if (IsZLimited()) { - if ( pVec.z() < fzAxisMin ) code |= 0x10 ; - if ( pVec.z() > fzAxisMax ) code |= 0x20 ; + if ( pVec.z() < fzAxisMin ) { code |= 0x10 ; } + if ( pVec.z() > fzAxisMax ) { code |= 0x20 ; } } return code; } diff --git a/source/geometry/navigation/History b/source/geometry/navigation/History index cbdfc75f0e..2b44fde51c 100644 --- a/source/geometry/navigation/History +++ b/source/geometry/navigation/History @@ -6,6 +6,16 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-15 Gabriele Cosmo (geomnav-V11-03-01) +- Reorganised and enriched comments in headers to follow Doxygen style. +- Removed declared but not implemented methods in G4VoxelNavigation, + G4ParameterisedNavigation, G4VoxelSafety and G4PathFinder. + +## 2025-05-14 A. Tolosa-Delgado (geomnav-V11-03-00) +- Extended UI command /geometry/test/run to support optional overlap check + mode. Depending on the selected mode, it invokes either TestRecursiveOverlap + (default, as before) or TestOverlapInTree + ## 2024-11-22 Gabriele Cosmo (geomnav-V11-02-03) - In G4MultiLevelLocator::EstimateIntersectionPoint(), moved repeated assertion on invalid intersection within G4DEBUG_FIELD, to avoid excess of warning diff --git a/source/geometry/navigation/include/G4AuxiliaryNavServices.hh b/source/geometry/navigation/include/G4AuxiliaryNavServices.hh index 5d4288c396..2788af7762 100644 --- a/source/geometry/navigation/include/G4AuxiliaryNavServices.hh +++ b/source/geometry/navigation/include/G4AuxiliaryNavServices.hh @@ -23,52 +23,64 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4AuxiliaryNavServices +// G4AuxiliaryNavServices // // Class description: // // Utility class for navigation. -// History: -// - Created: Paul Kent, Aug 96 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #ifndef G4AuxiliaryNavServices_hh -#define G4AuxiliaryNavServices_hh +#define G4AuxiliaryNavServices_hh 1 #include "G4Types.hh" #include "G4ThreeVector.hh" #include "G4VSolid.hh" #include "G4AffineTransform.hh" +/** + * @brief G4AuxiliaryNavServices a utility class for navigation. + */ + class G4AuxiliaryNavServices { + public: - public: // with description + /** + * Is the track (point, direction) inside the solid 'sampleSolid' ? + * @param[in] sampleSolid Pointer to the shape to check. + * @param[in,out] localPoint Point in local coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in] sampleTransform Affine transformation in space. + * @param[in] pLocatedOnEdge Flag specifying if point is located on edge. + * @returns True if we are going to enter the volume, which is the case + * if the point is inside, or the point is on the surface and + * the direction points inside or along it. Else returns false. + */ + static G4bool CheckPointOnSurface( const G4VSolid* sampleSolid, + const G4ThreeVector& localPoint, + const G4ThreeVector* globalDirection, + const G4AffineTransform& sampleTransform, + const G4bool locatedOnEdge); - static G4bool CheckPointOnSurface( const G4VSolid* sampleSolid, - const G4ThreeVector& localPoint, - const G4ThreeVector* globalDirection, - const G4AffineTransform& sampleTransform, - const G4bool locatedOnEdge); - // - // Is the track (point, direction) inside the solid 'sampleSolid' ? - // Returns true if we are going to enter the volume, - // which is the case if: - // - the point is inside - // - the point is on the surface and the direction points inside - // or along it. - // Else returns false. + /** + * Is the track (point, direction) exiting the solid 'sampleSolid' ? + * @returns True if we are going to exit the volume. + * @param[in] sampleSolid Pointer to the shape to check. + * @param[in,out] localPoint Point in local coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in] sampleTransform Affine transformation in space. + */ + static G4bool CheckPointExiting( const G4VSolid* sampleSolid, + const G4ThreeVector& localPoint, + const G4ThreeVector* globalDirection, + const G4AffineTransform& sampleTransform ); - static G4bool CheckPointExiting( const G4VSolid* sampleSolid, - const G4ThreeVector& localPoint, - const G4ThreeVector* globalDirection, - const G4AffineTransform& sampleTransform ); - // - // Is the track (point, direction) exiting the solid 'sampleSolid' ? - // Returns true if we are going to exit the volume. - - static void ReportTolerances(); - // Print global values of Cartesian, Radial and Angle Tolerances + /** + * Prints global values of Cartesian, Radial and Angle Tolerances. + */ + static void ReportTolerances(); }; #include "G4AuxiliaryNavServices.icc" diff --git a/source/geometry/navigation/include/G4AuxiliaryNavServices.icc b/source/geometry/navigation/include/G4AuxiliaryNavServices.icc index ab18b2bd61..00f15c740f 100644 --- a/source/geometry/navigation/include/G4AuxiliaryNavServices.icc +++ b/source/geometry/navigation/include/G4AuxiliaryNavServices.icc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4AuxiliaryNavServices Inline implementation +// Class G4AuxiliaryNavServices Inline implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- inline G4bool diff --git a/source/geometry/navigation/include/G4BrentLocator.hh b/source/geometry/navigation/include/G4BrentLocator.hh index 146d419be0..db4807d14f 100644 --- a/source/geometry/navigation/include/G4BrentLocator.hh +++ b/source/geometry/navigation/include/G4BrentLocator.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4BrentLocator +// G4BrentLocator // // class description: // @@ -32,27 +32,45 @@ // for finding the intersection point by means of a 'depth' algorithm in case // of slow progress (intersection is not found after 100 trials). -// History: -// ------- -// 27.10.08 - Tatiana Nikitina: First implementation using -// LocateIntersectionPoint() from -// G4PropagatorInField class +// Author: Tatiana Nikitina (CERN), 27 October 2008 // --------------------------------------------------------------------------- - #ifndef G4BRENTLOCATOR_HH -#define G4BRENTLOCATOR_HH +#define G4BRENTLOCATOR_HH 1 #include "G4VIntersectionLocator.hh" +/** + * @brief G4BrentLocator implements the calculation of the intersection point + * with a boundary when G4PropagationInField is used. Second order locator based + * on Brent Method for finding the intersection point by means of a 'depth' + * algorithm in case of slow progress (intersection is not found after 100 + * trials). + */ class G4BrentLocator : public G4VIntersectionLocator { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4BrentLocator(G4Navigator *theNavigator); - // Constructor ~G4BrentLocator() override; - // Default destructor + /** + * If such an intersection exists, this method calculates the intersection + * point of the true path of the particle with the surface of the current + * volume (or of one of its daughters). + * Should use lateral displacement as measure of convergence. + * @note Changes the safety! + * @param[in] curveStartPointTangent Start point tangent track. + * @param[in] curveEndPointTangent End point tangent track. + * @param[in] trialPoint Trial point. + * @param[out] intersectPointTangent Intersection point tangent track. + * @param[out] recalculatedEndPoint Flagging if end point was recomputed. + * @param[in,out] fPreviousSafety Previous safety distance. + * @param[in,out] fPreviousSftOrigin Previous safety point origin. + * @returns Whether intersection exists or not. + */ G4bool EstimateIntersectionPoint( const G4FieldTrack& curveStartPointTangent, // A const G4FieldTrack& curveEndPointTangent, // B @@ -61,16 +79,13 @@ class G4BrentLocator : public G4VIntersectionLocator G4bool& recalculatedEndPoint, // Out G4double& fPreviousSafety, // In/Out G4ThreeVector& fPreviousSftOrigin) override; // In/Out - // If such an intersection exists, this function calculates the - // intersection point of the true path of the particle with the surface - // of the current volume (or of one of its daughters). - // Should use lateral displacement as measure of convergence private: static const G4int max_depth = 4; + + /** Used to store intermediate track values in case of too slow progress. */ G4FieldTrack* ptrInterMedFT[max_depth+1]; - // Used to store intermediate tracks values in case of too slow progress }; #endif diff --git a/source/geometry/navigation/include/G4DrawVoxels.hh b/source/geometry/navigation/include/G4DrawVoxels.hh index 24742b8405..0e16962248 100644 --- a/source/geometry/navigation/include/G4DrawVoxels.hh +++ b/source/geometry/navigation/include/G4DrawVoxels.hh @@ -23,18 +23,16 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4DrawVoxels +// G4DrawVoxels // // Class description: // // Utility class for the visualization of voxels in the detector geometry. -// Define G4DrawVoxelsDebug in the environment at compilation for debugging -// information printed to G4cout. -// 29/07/1999 First comitted version - L.G. +// Original author: L.G., 29 July 1999 // -------------------------------------------------------------------- #ifndef G4DrawVoxels_HH -#define G4DrawVoxels_HH +#define G4DrawVoxels_HH 1 #include "G4VisAttributes.hh" #include "G4VoxelLimits.hh" @@ -43,23 +41,44 @@ class G4SmartVoxelHeader; class G4LogicalVolume; -// *********************************************************************** +/** + * @brief G4DrawVoxels is a utility class for the visualization of voxels + * in the detector geometry. + */ class G4DrawVoxels { - public: // with description + public: + /** + * Constructor. It initialises the members data to default colors. + */ G4DrawVoxels(); - // Constructor. It initialises the members data to default colors - // Copy constructor and assignment operator not supported (array - // fvoxelcolours ...). + /** + * Copy constructor and assignment operator not allowed. + */ + G4DrawVoxels(const G4DrawVoxels&) = delete; + G4DrawVoxels operator=(const G4DrawVoxels&) = delete; + + /** + * Default Destructor. + */ ~G4DrawVoxels() = default; - // Destructor NOT virtual. Not a base class. + /** + * Draws voxels for the specified logical volume. + */ void DrawVoxels(const G4LogicalVolume* lv) const; + + /** + * Creates polyhedra for the specified logical volume. + */ G4PlacedPolyhedronList* CreatePlacedPolyhedra(const G4LogicalVolume*) const; + /** + * Visualisation attributes control. Allow changing colors of the drawing. + */ void SetVoxelsVisAttributes(G4VisAttributes&, G4VisAttributes&, G4VisAttributes&); @@ -72,14 +91,8 @@ class G4DrawVoxels G4VoxelLimits&, G4PlacedPolyhedronList*) const; - G4DrawVoxels(const G4DrawVoxels&) = delete; - G4DrawVoxels operator=(const G4DrawVoxels&) = delete; - // Copy constructor and assignment operator not allowed - private: - // Member data - // G4VisAttributes fVoxelsVisAttributes[3]; G4VisAttributes fBoundingBoxVisAttributes; }; diff --git a/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh b/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh index da45fa097c..339b72d8fc 100644 --- a/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh +++ b/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ErrorPropagationNavigator +// G4ErrorPropagationNavigator // // Class Description: // @@ -31,50 +31,78 @@ // on the target surface for error propagation. It overloads ComputeStep() // and ComputeSafety() methods. -// Created. P. Arce, September 2004 +// Author: Pedro Arce (CIEMAT), September 2004 // -------------------------------------------------------------------- - #ifndef G4ErrorPropagationNavigator_hh #define G4ErrorPropagationNavigator_hh 1 #include "G4Navigator.hh" #include "G4ThreeVector.hh" +/** + * @brief G4ErrorPropagationNavigator is a class for performing double + * navigation in the detector geometry and on the target surface for error + * propagation. It overloads ComputeStep() and ComputeSafety() methods. + */ + class G4ErrorPropagationNavigator : public G4Navigator { public: + /** + * Constructor and Destructor. + */ G4ErrorPropagationNavigator() = default; - ~G4ErrorPropagationNavigator() override = default; + ~G4ErrorPropagationNavigator() override = default; - G4double ComputeStep (const G4ThreeVector &pGlobalPoint, - const G4ThreeVector &pDirection, + /** + * Calls the navigation in the detector geometry and then checks + * if the distance to surface is smaller than the proposed step. + * @param[in] pGlobalPoint The point in global coordinates system. + * @param[in] pDirection The normalised vector direction. + * @param[in] pCurrentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @returns Length from current point to next boundary surface along + * @p pDirection. + */ + G4double ComputeStep (const G4ThreeVector& pGlobalPoint, + const G4ThreeVector& pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety) override; - // Calls the navigation in the detector geometry and then checks - // if the distance to surface is smaller than the proposed step - G4double ComputeSafety(const G4ThreeVector &globalpoint, + /** + * Calls the navigation in the detector geometry and then checks + * if the distance to surface is smaller than the proposed safety. + * @param[in] globalpoint The point in global coordinates system. + * The point must be within the current volume. + * @param[in] pProposedMaxLength The proposed maximum length is used + * to avoid volume safety calculations. + * @param[in] keepState Flag to instruct keeping the state (default true) + * to ensure minimum side effects from the call. + * @returns Length from current point to closest boundary surface. + * The value returned is usually an underestimate. + */ + G4double ComputeSafety(const G4ThreeVector& globalpoint, const G4double pProposedMaxLength = DBL_MAX, const G4bool keepState = true) override; - // Calls the navigation in the detector geometry and then checks - // if the distance to surface is smaller than the proposed safety + /** + * Returns Exit Surface Normal and validity too. Can only be called if + * the Navigator's last Step has crossed a volume geometrical boundary. + * Normal points out of the volume exited and/or into the volume entered. + * @param[in] point Point in global coordinates system to compare to. + * @param[in,out] valid Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ G4ThreeVector GetGlobalExitNormal(const G4ThreeVector& point, G4bool* valid) override; - // Return Exit Surface Normal and validity too. Can only be called if - // the Navigator's last Step has crossed a volume geometrical boundary. - // Normal points out of the volume exited and/or into the volume entered. - G4double TargetSafetyFromPoint( const G4ThreeVector &pGlobalpoint ); - // Isotropic safety for 'Target' - - //-- NOT implemented, as it is difficult to define the coordinate system: - // G4ThreeVector GetLocalExitNormal(G4bool* valid); - // G4ThreeVector GetLocalExitNormalAndCheck(const G4ThreeVector& point, - // G4bool* valid); - // Convention: - // The *local* normal is in the coordinate system of the *final* volume. + /** + * Computes the isotropic safety for 'Target'. + * @param[in] pGlobalpoint Point in global coordinates system. + * @returns The isotropic safety value. + */ + G4double TargetSafetyFromPoint( const G4ThreeVector& pGlobalpoint ); }; #endif diff --git a/source/geometry/navigation/include/G4GeomTestVolume.hh b/source/geometry/navigation/include/G4GeomTestVolume.hh index c3bbc94584..bfb7e42a51 100644 --- a/source/geometry/navigation/include/G4GeomTestVolume.hh +++ b/source/geometry/navigation/include/G4GeomTestVolume.hh @@ -23,57 +23,80 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GeomTestVolume +// G4GeomTestVolume // // Class description: // // Checks for inconsistencies in the geometric boundaries of a physical // volume and the boundaries of all its immediate daughters. -// Author: G.Cosmo, CERN +// Author: Gabriele Cosmo (CERN), 22 August 2013 // -------------------------------------------------------------------- #ifndef G4GeomTestVolume_hh -#define G4GeomTestVolume_hh +#define G4GeomTestVolume_hh 1 #include "G4ThreeVector.hh" class G4VPhysicalVolume; class G4GeomTestLogger; +/** + * @brief G4GeomTestVolume allows to check for inconsistencies in the + * geometric boundaries of a physical volume and the boundaries of all + * its immediate daughters. + */ + class G4GeomTestVolume { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4GeomTestVolume( G4VPhysicalVolume *theTarget, G4double theTolerance = 0.0, // mm G4int numberOfPoints = 10000, G4bool theVerbosity = true); ~G4GeomTestVolume(); - // Constructor and destructor + /** + * Gets/Sets error tolerance (default set to 0*mm). + */ G4double GetTolerance() const; void SetTolerance(G4double tolerance); - // Get/Set error tolerance (default set to 0*mm) + + /** + * Gets/Sets number of points to check (default set to 10000). + */ G4int GetResolution() const; void SetResolution(G4int points); - // Get/Set number of points to check (default set to 10000) + + /** + * Gets/Sets verbosity mode (default set to true). + */ G4bool GetVerbosity() const; void SetVerbosity(G4bool verbosity); - // Get/Set verbosity mode (default set to true) + + /** + * Get/Set maximum number of errors to report (default set to 1). + */ G4int GetErrorsThreshold() const; void SetErrorsThreshold(G4int max); - // Get/Set maximum number of errors to report (default set to 1) + /** + * Checks for overlaps in the volume tree without duplication in + * identical logical volumes. + */ void TestOverlapInTree() const; - // Check overlaps in the volume tree without - // dublication in identical logical volumes + /** + * Activates overlaps check, propagating recursively to the daughters, + * with possibility of specifying the initial level in the volume tree + * and the depth (default is the whole tree). + * @note Depending on the complexity of the geometry, this may require + * long computational time. + */ void TestRecursiveOverlap( G4int sLevel=0, G4int depth=-1 ); - // Activate overlaps check, propagating recursively to the daughters, - // with possibility of specifying the initial level in the volume tree - // and the depth (default is the whole tree). - // Be careful: depending on the complexity of the geometry, this - // could require long computational time private: diff --git a/source/geometry/navigation/include/G4GeometryMessenger.hh b/source/geometry/navigation/include/G4GeometryMessenger.hh index 826b2e50c1..4ac91c7a01 100644 --- a/source/geometry/navigation/include/G4GeometryMessenger.hh +++ b/source/geometry/navigation/include/G4GeometryMessenger.hh @@ -23,41 +23,52 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GeometryMessenger +// G4GeometryMessenger // // Class description: // // A messenger defining commands for debugging, verifying // and controlling the detector geometry and navigation. -// Author: G.Cosmo, CERN. +// Author: Gabriele Cosmo (CERN), 24 October 2001. // -------------------------------------------------------------------- #ifndef G4GeometryMessenger_hh -#define G4GeometryMessenger_hh +#define G4GeometryMessenger_hh 1 #include "G4Types.hh" #include "G4UImessenger.hh" #include "G4ThreeVector.hh" +#include + class G4UIdirectory; class G4UIcommand; class G4UIcmdWithoutParameter; class G4UIcmdWithABool; class G4UIcmdWithAnInteger; class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWithAString; class G4TransportationManager; class G4GeomTestVolume; -#include +/** + * @brief G4GeometryMessenger is a messenger defining commands for debugging, + * verifying and controlling the detector geometry and navigation. + */ class G4GeometryMessenger : public G4UImessenger { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4GeometryMessenger(G4TransportationManager* tman); ~G4GeometryMessenger() override; - // Constructor and destructor + /** + * Sets/gets values for UI command. + */ void SetNewValue( G4UIcommand* command, G4String newValues ) override; G4String GetCurrentValue( G4UIcommand* command ) override; @@ -70,10 +81,18 @@ class G4GeometryMessenger : public G4UImessenger void SetCheckMode(const G4String& newValue); void SetPushFlag(const G4String& newValue); void RecursiveOverlapTest(); + void TreeOverlapTest(); + + struct OverlapMode + { + inline static const G4String placed = "placed"; + inline static const G4String logical = "logical"; + }; G4UIdirectory *geodir, *navdir, *testdir; G4UIcmdWithABool *chkCmd, *pchkCmd, *verCmd, *parCmd; - G4UIcmdWithoutParameter *recCmd, *resCmd; + G4UIcmdWithoutParameter *resCmd; + G4UIcmdWithAString *recCmd; G4UIcmdWithADoubleAndUnit *tolCmd; G4UIcmdWithAnInteger *verbCmd, *rslCmd, *rcsCmd, *rcdCmd, *errCmd; diff --git a/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh b/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh index 228d0c2444..c97dfd54d3 100644 --- a/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh +++ b/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GlobalMagFieldMessenger +// G4GlobalMagFieldMessenger // // Class description: // @@ -38,7 +38,7 @@ // The field value can be changed either interactively via // the UI command or via SetFieldValue() function. -// Author: Ivana Hrivnacova, 28/08/2013 (ivana@ipno.in2p3.fr) +// Author: Ivana Hrivnacova (IN2P3/IJCLab Orsay), 28 August 2013 // -------------------------------------------------------------------- #ifndef G4GlobalMagFieldMessenger_hh #define G4GlobalMagFieldMessenger_hh 1 @@ -51,19 +51,39 @@ class G4UIdirectory; class G4UIcmdWith3VectorAndUnit; class G4UIcmdWithAnInteger; +/** + * @brief G4GlobalMagFieldMessenger, a global uniform magnetic field messenger + * class. It creates/deletes the global uniform magnetic field and + * activates/inactivates it according to the set field value. + * The field value can be changed either interactively via the UI command or + * via the SetFieldValue() function. + */ + class G4GlobalMagFieldMessenger : public G4UImessenger { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4GlobalMagFieldMessenger(const G4ThreeVector& value = G4ThreeVector()); ~G4GlobalMagFieldMessenger() override; + /** + * Setter for UI command. + */ void SetNewValue(G4UIcommand*, G4String) override; - void SetFieldValue(const G4ThreeVector& value); + /** + * Setter and accessor for the field value. + */ + void SetFieldValue(const G4ThreeVector& value); G4ThreeVector GetFieldValue() const; - inline void SetVerboseLevel(G4int verboseLevel); + /** + * Verbosity control. + */ + inline void SetVerboseLevel(G4int verboseLevel); inline G4int GetVerboseLevel() const; private: @@ -78,12 +98,18 @@ class G4GlobalMagFieldMessenger : public G4UImessenger G4UIcmdWithAnInteger* fSetVerboseCmd = nullptr; }; +// -------------------------------------------------------------------- // inline functions +// -------------------------------------------------------------------- -inline void G4GlobalMagFieldMessenger::SetVerboseLevel(G4int verboseLevel) -{ fVerboseLevel = verboseLevel; } +inline void G4GlobalMagFieldMessenger::SetVerboseLevel(G4int verboseLevel) +{ + fVerboseLevel = verboseLevel; +} inline G4int G4GlobalMagFieldMessenger::GetVerboseLevel() const -{ return fVerboseLevel; } +{ + return fVerboseLevel; +} #endif diff --git a/source/geometry/navigation/include/G4LocatorChangeLogger.hh b/source/geometry/navigation/include/G4LocatorChangeLogger.hh index a9c9629601..0f6d692f88 100644 --- a/source/geometry/navigation/include/G4LocatorChangeLogger.hh +++ b/source/geometry/navigation/include/G4LocatorChangeLogger.hh @@ -30,70 +30,90 @@ // Aggregate the records of changes in an endpoint of a locator. // Its key use is in playing these back in case of a problem. -// Author: John Apostolakis, 04.09.19 - First version +// Author: John Apostolakis (CERN), 04 September 2019 // -------------------------------------------------------------------- #ifndef G4LOCATOR_CHANGE_LOGGER_HH -#define G4LOCATOR_CHANGE_LOGGER_HH +#define G4LOCATOR_CHANGE_LOGGER_HH 1 #include #include "G4LocatorChangeRecord.hh" #include "G4FieldTrack.hh" +/** + * @brief G4LocatorChangeLogger aggregates the records of changes in an + * endpoint of a locator. Its key use is in playing these back in case of + * a problem. + */ + class G4LocatorChangeLogger : public std::vector { public: - G4LocatorChangeLogger( const std::string& name ) : fName(name) {} + /** + * Constructor. + */ + G4LocatorChangeLogger( const std::string& name ); - void AddRecord( G4LocatorChangeRecord && chngRecord ); - void AddRecord( const G4LocatorChangeRecord & chngRecord ); + /** + * Move or add a record. + */ + inline void AddRecord( G4LocatorChangeRecord && chngRecord ); + inline void AddRecord( const G4LocatorChangeRecord & chngRecord ); - // Create a new record with full information - inline - void AddRecord( G4LocatorChangeRecord::EChangeLocation codeLocation, - G4int iter, - unsigned int count, - const G4FieldTrack & fieldTrack ); + /** + * Create a new record with full information. + */ + inline void AddRecord( G4LocatorChangeRecord::EChangeLocation codeLocation, + G4int iter, unsigned int count, + const G4FieldTrack& fieldTrack ); + /** + * Streaming operator dumping record. + */ friend std::ostream& operator << ( std::ostream& os, const G4LocatorChangeLogger& logR ); + + /** + * Streams object contents to an output stream. + */ std::ostream& StreamInfo(std::ostream& os) const; + /** + * Prints the changes in start, end points in columns. One event per row. + */ static std::ostream& ReportEndChanges ( std::ostream& os, const G4LocatorChangeLogger& startA, const G4LocatorChangeLogger& endB ); - // Print the changes in start, end points in columns - // One event per row private: - const std::string fName; + const std::string fName; }; -// -------------- +// -------------------------------------------------------------------- // Inline methods -// -------------- +// -------------------------------------------------------------------- void G4LocatorChangeLogger:: AddRecord( G4LocatorChangeRecord::EChangeLocation codeLocation, G4int iter, unsigned int count, const G4FieldTrack & fieldTrack ) { - this->push_back(G4LocatorChangeRecord(codeLocation, iter, count, fieldTrack)); + push_back(G4LocatorChangeRecord(codeLocation, iter, count, fieldTrack)); } inline void G4LocatorChangeLogger:: AddRecord( const G4LocatorChangeRecord& chngRecord ) { - this->push_back( chngRecord ); + push_back( chngRecord ); } inline void G4LocatorChangeLogger:: AddRecord( G4LocatorChangeRecord && chngRecord ) { - this->push_back( chngRecord ); + push_back( chngRecord ); } #endif diff --git a/source/geometry/navigation/include/G4LocatorChangeRecord.hh b/source/geometry/navigation/include/G4LocatorChangeRecord.hh index eb02d5f8e2..f592b6e008 100644 --- a/source/geometry/navigation/include/G4LocatorChangeRecord.hh +++ b/source/geometry/navigation/include/G4LocatorChangeRecord.hh @@ -30,14 +30,19 @@ // Record the changes in an endpoint of a locator. // Its key use is in playing these back in case of a problem. -// Author: John Apostolakis, 27.08.19 - First version +// Author: John Apostolakis (CERN), 27 August 2019 // -------------------------------------------------------------------- #ifndef G4LOCATOR_CHANGE_RECORD_HH -#define G4LOCATOR_CHANGE_RECORD_HH +#define G4LOCATOR_CHANGE_RECORD_HH 1 #include #include "G4FieldTrack.hh" +/** + * @brief G4LocatorChangeRecord records the changes in an endpoint of a locator. + * Its key use is in playing these back in case of a problem. + */ + class G4LocatorChangeRecord { public: @@ -48,36 +53,41 @@ class G4LocatorChangeRecord kInsertingMidPoint, kRecalculatedBagn, // 2 kLevelPop }; - static const char* fNameChangeLocation[]; - static const char* GetNameChangeLocation( EChangeLocation ); - + /** + * Constructor. + */ G4LocatorChangeRecord( EChangeLocation codeLocation, G4int iter, unsigned int count, - const G4FieldTrack& fieldTrack ) - : fCodeLocation( codeLocation), fIteration(iter), fEventCount(count), - fFieldTrack( fieldTrack ) {} + const G4FieldTrack& fieldTrack ); + + /** + * Default copy and move constructors. + */ G4LocatorChangeRecord( const G4LocatorChangeRecord & ) = default; G4LocatorChangeRecord( G4LocatorChangeRecord && ) = default; // No set methods -> create a new record for each entry (more reliable) - // void SetLocation( EChangeLocation loc ) { fCodeLocation= loc; } - // void SetLength( double len ) { fLength= len; } - // void SetCount( int cnt ) { fEventCount= cnt; } - // void SetIteration( int iter ) { fIteration= iter; } + /** + * Accessors. + */ inline EChangeLocation GetLocation() const { return fCodeLocation; } inline unsigned int GetCount() const { return fEventCount; } inline G4int GetIteration() const { return fIteration; } inline G4double GetLength() const { return fFieldTrack.GetCurveLength(); } + /** + * Streaming operators, using StreamInfo(). + */ friend std::ostream& operator<< ( std::ostream& os, const G4LocatorChangeRecord& r ); - // Streaming operator, using StreamInfo(). - friend std::ostream& operator<< ( std::ostream& os, const std::vector & vecR ); - + + /** + * Streams object contents to an output stream. + */ std::ostream& StreamInfo(std::ostream& os) const; static std::ostream& ReportVector ( std::ostream& os, @@ -88,8 +98,11 @@ class G4LocatorChangeRecord const std::vector & startA, const std::vector & endB ); + static const char* GetNameChangeLocation( EChangeLocation ); + private: + static const char* fNameChangeLocation[]; EChangeLocation fCodeLocation = kInvalidCL; G4int fIteration = -1; unsigned int fEventCount = 0; diff --git a/source/geometry/navigation/include/G4MultiLevelLocator.hh b/source/geometry/navigation/include/G4MultiLevelLocator.hh index 24eca7bfbb..77e6a3983f 100644 --- a/source/geometry/navigation/include/G4MultiLevelLocator.hh +++ b/source/geometry/navigation/include/G4MultiLevelLocator.hh @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4MultiLevelLocator +// G4MultiLevelLocator // -// class description: +// Class description: // // Implementing the calculation of the intersection point with a boundary when // PropagationInField is used. Derived from method LocateIntersectionPoint() @@ -33,66 +33,88 @@ // intersection point by means of a 'depth' algorithm in case of slow progress // (intersection is not found after 100 trials). -// History: -// ------- -// 27.10.08 - Tatiana Nikitina: Derived from LocateIntersectionPoint() from -// G4PropagatorInField class +// Author: Tatiana Nikitina (CERN), 27 October 2008 // --------------------------------------------------------------------------- - #ifndef G4MULTILEVELLOCATOR_HH -#define G4MULTILEVELLOCATOR_HH +#define G4MULTILEVELLOCATOR_HH 1 #include "G4VIntersectionLocator.hh" +/** + * @brief G4MultiLevelLocator implements the calculation of the intersection + * point with a boundary when G4PropagationInField is used. Derived from method + * LocateIntersectionPoint() from G4PropagatorInField, it is based on a linear + * method for finding the intersection point by means of a 'depth' algorithm + * in case of slow progress (intersection is not found after 100 trials). + */ + class G4MultiLevelLocator : public G4VIntersectionLocator { - public: // with description + public: - G4MultiLevelLocator(G4Navigator *theNavigator); - // Constructor - ~G4MultiLevelLocator() override; - // Default destructor + /** + * Constructor and Destructor. + */ + G4MultiLevelLocator(G4Navigator *theNavigator); + ~G4MultiLevelLocator() override; - G4bool EstimateIntersectionPoint( - const G4FieldTrack& curveStartPointTangent, // A - const G4FieldTrack& curveEndPointTangent, // B - const G4ThreeVector& trialPoint, // E - G4FieldTrack& intersectPointTangent, // Output - G4bool& recalculatedEndPoint, // Out - G4double& fPreviousSafety, // In/Out - G4ThreeVector& fPreviousSftOrigin) override; // In/Out - // If such an intersection exists, this function calculates the - // intersection point of the true path of the particle with the surface - // of the current volume (or of one of its daughters). - // Should use lateral displacement as measure of convergence + /** + * If such an intersection exists, this method calculates the intersection + * point of the true path of the particle with the surface of the current + * volume (or of one of its daughters). + * Should use lateral displacement as measure of convergence. + * @param[in] curveStartPointTangent Start point tangent track. + * @param[in] curveEndPointTangent End point tangent track. + * @param[in] trialPoint Trial point. + * @param[out] intersectPointTangent Intersection point tangent track. + * @param[out] recalculatedEndPoint Flagging if end point was recomputed. + * @param[in,out] fPreviousSafety Previous safety distance. + * @param[in,out] fPreviousSftOrigin Previous safety point origin. + * @returns Whether intersection exists or not. + */ + G4bool EstimateIntersectionPoint( + const G4FieldTrack& curveStartPointTangent, // A + const G4FieldTrack& curveEndPointTangent, // B + const G4ThreeVector& trialPoint, // E + G4FieldTrack& intersectPointTangent, // Output + G4bool& recalculatedEndPoint, // Out + G4double& fPreviousSafety, // In/Out + G4ThreeVector& fPreviousSftOrigin) override; // In/Out - void ReportStatistics(); + /** + * Dumps statistics. + */ + void ReportStatistics(); - inline void SetMaxSteps(unsigned int valMax) { fMaxSteps= valMax; } - inline void SetWarnSteps(unsigned int valWarn) { fWarnSteps= valWarn; } + /** + * Setters. + */ + inline void SetMaxSteps(unsigned int valMax) { fMaxSteps = valMax; } + inline void SetWarnSteps(unsigned int valWarn) { fWarnSteps = valWarn; } - private: + private: - void ReportFieldValue( const G4FieldTrack& locationPV, - const char* nameLoc, - const G4EquationOfMotion* equation ); + void ReportFieldValue( const G4FieldTrack& locationPV, + const char* nameLoc, + const G4EquationOfMotion* equation ); - // Invariants -- parameters - // ==================================== - static const G4int max_depth = 10; - unsigned int fMaxSteps = 10000; // Effort abandoned; signal is looping - unsigned int fWarnSteps = 1000; // Warn about many steps (but succeeded) + // Invariants -- parameters + // ==================================== + static const G4int max_depth = 10; + unsigned int fMaxSteps = 10000; // Effort abandoned; signal is looping + unsigned int fWarnSteps = 1000; // Warn about many steps (but succeeded) - // State - varies during simulation - // ==================================== - G4FieldTrack* ptrInterMedFT[max_depth+1]; - // Used to store intermediate tracks values in case of too slow progress - - unsigned long int fNumCalls = 0; - unsigned long int fNumAdvanceFull = 0, - fNumAdvanceGood = 0, - fNumAdvanceTrials = 0; - // Counters for statistics & debugging + // State - varies during simulation + // ==================================== + G4FieldTrack* ptrInterMedFT[max_depth+1]; // Used to store intermediate + // tracks values in case of too + // slow progress + // Counters for statistics & debugging + // ==================================== + unsigned long int fNumCalls = 0; + unsigned long int fNumAdvanceFull = 0, + fNumAdvanceGood = 0, + fNumAdvanceTrials = 0; }; #endif diff --git a/source/geometry/navigation/include/G4MultiNavigator.hh b/source/geometry/navigation/include/G4MultiNavigator.hh index 7c2243dab1..de8c95a672 100644 --- a/source/geometry/navigation/include/G4MultiNavigator.hh +++ b/source/geometry/navigation/include/G4MultiNavigator.hh @@ -23,18 +23,17 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4MultiNavigator +// G4MultiNavigator // // Class description: // // Utility class for polling the navigators of several geometries to // identify the next boundary. -// History: -// - Created. John Apostolakis, November 2006 +// Author: John Apostolakis (CERN), November 2006 // -------------------------------------------------------------------- #ifndef G4MULTINAVIGATOR_HH -#define G4MULTINAVIGATOR_HH +#define G4MULTINAVIGATOR_HH 1 #include @@ -51,152 +50,243 @@ enum ELimited { kDoNot,kUnique,kSharedTransport,kSharedOther,kUndefLimited }; class G4TransportationManager; class G4VPhysicalVolume; +/** + * @brief G4MultiNavigator is a utility class for polling the navigators + * of several geometries to identify the next boundary. + */ + class G4MultiNavigator : public G4Navigator { - public: // with description + public: - friend std::ostream& operator << (std::ostream& os, const G4Navigator& n); + friend std::ostream& operator << (std::ostream& os, const G4Navigator& n); - G4MultiNavigator(); - // Constructor - initialisers and setup. + /** + * Constructor and default Destructor. + */ + G4MultiNavigator(); + ~G4MultiNavigator() override = default; - ~G4MultiNavigator() override; - // Destructor. No actions. + /** + * Computes the distance to the next boundary of any geometry. + * @param[in] pGlobalPoint The point in global coordinates system. + * @param[in] pDirection The normalised vector direction. + * @param[in] pCurrentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @returns Length from current point to next boundary surface along + * @p pDirection. + */ + G4double ComputeStep( const G4ThreeVector& pGlobalPoint, + const G4ThreeVector& pDirection, + const G4double pCurrentProposedStepLength, + G4double& pNewSafety ) override; - G4double ComputeStep( const G4ThreeVector& pGlobalPoint, - const G4ThreeVector& pDirection, - const G4double pCurrentProposedStepLength, - G4double& pNewSafety ) override; - // Return the distance to the next boundary of any geometry + /** + * Gets values for a single geometry. + * @param[in] navigatorId The navigator identifier. + * @param[in,out] pnewSafety New safety for this geometry. + * @param[in,out] minStepLast The last minimum step returned. + * @param[in,out] limitedStep The step characterisation returned. + * @returns The step size for the geometry associated to 'navigatorId'. + */ + G4double ObtainFinalStep( G4int navigatorId, + G4double& pNewSafety, // for this geom + G4double& minStepLast, + ELimited& limitedStep ); - G4double ObtainFinalStep( G4int navigatorId, - G4double& pNewSafety, // for this geom - G4double& minStepLast, - ELimited& limitedStep ); - // Get values for a single geometry + /** + * Finds which geometries are registered for this particles, and keeps info. + */ + void PrepareNavigators(); - void PrepareNavigators(); - // Find which geometries are registered for this particles, and keep info - void PrepareNewTrack( const G4ThreeVector& position, - const G4ThreeVector direction ); - // Prepare Navigators and locate + /** + * Prepares Navigators and locates. + * @param[in] position The position point in global coordinates system. + * @param[in] direction The normalised vector direction. + */ + void PrepareNewTrack( const G4ThreeVector& position, + const G4ThreeVector direction ); - G4VPhysicalVolume* ResetHierarchyAndLocate( const G4ThreeVector& point, - const G4ThreeVector& direction, - const G4TouchableHistory& h ) override; - // Reset the geometrical hierarchy for all geometries. - // Use the touchable history for the first (mass) geometry. - // Return the volume in the first (mass) geometry. - // - // Important Note: In order to call this the geometries MUST be closed. + /** + * Resets the geometrical hierarchy for all geometries. + * Use the touchable history for the first (mass) geometry. + * @note In order to call this the geometries MUST be closed. + * @param[in] point The point in global coordinates system. + * @param[in] direction The normalised vector direction. + * @param[in] h The touchable history to be used for initialisation. + * @returns The pointer to the volume in the first (mass) geometry. + */ + G4VPhysicalVolume* ResetHierarchyAndLocate( const G4ThreeVector& point, + const G4ThreeVector& direction, + const G4TouchableHistory& h ) override; - G4VPhysicalVolume* LocateGlobalPointAndSetup( const G4ThreeVector& point, - const G4ThreeVector* direction = nullptr, - const G4bool pRelativeSearch = true, - const G4bool ignoreDirection = true) override; - // Locate in all geometries. - // Return the volume in the first (mass) geometry - // Maintain vector of other volumes, to be returned separately - // - // Important Note: In order to call this the geometry MUST be closed. + /** + * Locates the point in all geometries. + * Maintains a vector of other volumes, to be returned separately. + * @note In order to call this the geometry MUST be closed. + * @param[in] point The point in global coordinates system. + * @param[in] direction The normalised vector direction. + * @param[in] pRelativeSearch Flag to specify where search starts from. + * @param[in] ignoreDirection Flag to specify if to use direction or not. + * @returns The volume in the first (mass) geometry. + */ + G4VPhysicalVolume* LocateGlobalPointAndSetup( const G4ThreeVector& point, + const G4ThreeVector* direction = nullptr, + const G4bool pRelativeSearch = true, + const G4bool ignoreDirection = true) override; - void LocateGlobalPointWithinVolume( const G4ThreeVector& position ) override; - // Relocate in all geometries for point that has not changed volume - // (ie is within safety in all geometries or is distance less that - // along the direction of a computed step. + /** + * Relocates in all geometries for point that has not changed volume, + * i.e. is within safety in all geometries or its distance is less that + * along the direction of a computed step. + * @param[in] position The position point in global coordinates system. + */ + void LocateGlobalPointWithinVolume( const G4ThreeVector& position ) override; - G4double ComputeSafety( const G4ThreeVector& globalpoint, - const G4double pProposedMaxLength = DBL_MAX, - const G4bool keepState = false ) override; - // Calculate the isotropic distance to the nearest boundary - // in any geometry from the specified point in the global coordinate - // system. The geometry must be closed. + /** + * Calculates the isotropic distance to the nearest boundary in any + * geometry from the specified point in the global coordinates system. + * @note The geometry must be closed. + * @param[in] globalpoint The point in global coordinates system. + * The point must be within the current volume. + * @param[in] pProposedMaxLength The proposed maximum length is used + * to avoid volume safety calculations. + * @param[in] keepState Flag to instruct keeping the state (default false) + * to ensure minimum side effects from the call. + * @returns Length from current point to closest boundary surface. + * The value returned is usually an underestimate. + */ + G4double ComputeSafety( const G4ThreeVector& globalpoint, + const G4double pProposedMaxLength = DBL_MAX, + const G4bool keepState = false ) override; - G4TouchableHandle CreateTouchableHistoryHandle() const override; - // Returns a reference counted handle to a touchable history. + /** + * Returns a reference counted handle to a touchable history. + */ + G4TouchableHandle CreateTouchableHistoryHandle() const override; - G4ThreeVector GetLocalExitNormal( G4bool* obtained ) override; // const - G4ThreeVector GetLocalExitNormalAndCheck( const G4ThreeVector &E_Pt, - G4bool* obtained ) override; // const - G4ThreeVector GetGlobalExitNormal( const G4ThreeVector &E_Pt, - G4bool* obtained ) override; // const - // Return Exit Surface Normal and validity too. - // Can only be called if the Navigator's last Step either - // - has just crossed a volume geometrical boundary and relocated, or - // - has arrived at a boundary in a ComputeStep - // It returns the Normal to the surface pointing out of the volume that - // was left behind and/or into the volume that was entered. - // Convention:x - // The *local* normal is in the coordinate system of the *final* volume. - // Restriction: - // Normals are not available for replica volumes (returns obtained= false) + /** + * Obtains the Normal vector to a surface (in local coordinates) + * pointing out of previous volume and into current volume + * Convention: the *local* normal is in the coordinate system of the + * *final* volume. The method takes full care about how to calculate + * this normal, but if the surfaces are not convex it will return + * valid=false. + * @param[in,out] obtained Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ + G4ThreeVector GetLocalExitNormal( G4bool* obtained ) override; - public: // without description + /** + * Obtains the Normal vector to a surface (in local coordinates) + * pointing out of previous volume and into current volume, and + * checks the current point against expected 'local' value. + * Convention: the *local* normal is in the coordinate system of the + * *final* volume. The method takes full care about how to calculate + * this normal, but if the surfaces are not convex it will return + * valid=false. + * @param[in] point Point in global coordinates system to compare to. + * @param[in,out] obtained Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ + G4ThreeVector GetLocalExitNormalAndCheck( const G4ThreeVector& point, + G4bool* obtained ) override; - inline G4Navigator* GetNavigator( G4int n ) const - { - if( (n>fNoActiveNavigators) || (n<0) ) { n=0; } - return fpNavigator[n]; - } + /** + * Obtains the Normal vector to a surface (in global coordinates) + * pointing out of previous volume and into current volume + * The method takes full care about how to calculate the normal, + * but if the surfaces are not convex it will return valid=false. + * @param[in] point Point in global coordinates system to compare to. + * @param[in,out] obtained Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ + G4ThreeVector GetGlobalExitNormal( const G4ThreeVector& point, + G4bool* obtained ) override; - protected: // with description + /** + * Returns a pointer to a navigator, given its index. + */ + inline G4Navigator* GetNavigator( G4int n ) const; - void ResetState() override; - // Utility method to reset the navigator state machine. + protected: - void SetupHierarchy() override; - // Renavigate & reset hierarchy described by current history - // o Reset volumes - // o Recompute transforms and/or solids of replicated/parameterised - // volumes. + /** + * Utility method to reset the navigator state machine. + */ + void ResetState() override; - void WhichLimited(); // Flag which processes limited the step - void PrintLimited(); // Auxiliary, debugging printing - void CheckMassWorld(); + /** + * Renavigates & resets hierarchy described by the current history, + * i.e. resets volumes and recomputes transforms and/or solids of + * replicated/parameterised volumes. + */ + void SetupHierarchy() override; - private: + /** + * Flags which processes limited the step. + */ + void WhichLimited(); - // STATE Information + /** + * Auxiliary, debugging printing. + */ + void PrintLimited(); - G4int fNoActiveNavigators = 0; - static const G4int fMaxNav = 16; - G4VPhysicalVolume* fLastMassWorld = nullptr; + /** + * Checks if mass world pointed has been changed => issues and exception. + */ + void CheckMassWorld(); - G4Navigator* fpNavigator[fMaxNav]; - // Global state (retained during stepping for one track + private: - // State after a step computation - // - ELimited fLimitedStep[fMaxNav]; - G4bool fLimitTruth[fMaxNav]; - G4double fCurrentStepSize[fMaxNav]; - G4double fNewSafety[ fMaxNav ]; // Safety for starting point - G4int fNoLimitingStep = -1; // How many geometries limited the step - G4int fIdNavLimiting = -1; // Id of Navigator limiting step + // STATE Information - // Lowest values - determine step length, and safety - // - G4double fMinStep = -kInfinity; // As reported by Navigators - G4double fMinSafety = -kInfinity; - G4double fTrueMinStep = -kInfinity; // Corrected if fMinStep>=proposed + G4int fNoActiveNavigators = 0; + static const G4int fMaxNav = 16; + G4VPhysicalVolume* fLastMassWorld = nullptr; - // State after calling 'locate' - // - G4VPhysicalVolume* fLocatedVolume[fMaxNav]; - G4ThreeVector fLastLocatedPosition; + /** Global state (retained during stepping for one track). */ + G4Navigator* fpNavigator[fMaxNav]; - // Cache of safety information - // - G4ThreeVector fSafetyLocation; - // point where ComputeSafety is called - G4double fMinSafety_atSafLocation = -1.0; - // - corresponding value of safety - G4ThreeVector fPreStepLocation; - // point where last ComputeStep called - G4double fMinSafety_PreStepPt = -1.0; - // - corresponding value of safety + // State after a step computation + // + ELimited fLimitedStep[fMaxNav]; + G4bool fLimitTruth[fMaxNav]; + G4double fCurrentStepSize[fMaxNav]; + G4double fNewSafety[ fMaxNav ]; // Safety for starting point + G4int fNoLimitingStep = -1; // How many geometries limited the step + G4int fIdNavLimiting = -1; // Id of Navigator limiting step - G4TransportationManager* pTransportManager; // Cache for frequent use + // Lowest values - determine step length, and safety + // + G4double fMinStep = -kInfinity; // As reported by Navigators + G4double fMinSafety = -kInfinity; + G4double fTrueMinStep = -kInfinity; // Corrected if fMinStep>=proposed + + // State after calling 'locate' + // + G4VPhysicalVolume* fLocatedVolume[fMaxNav]; + G4ThreeVector fLastLocatedPosition; + + // Cache of safety information + // + G4ThreeVector fSafetyLocation; // point where ComputeSafety() is called + G4double fMinSafety_atSafLocation = -1.0; // - corresponding value of safety + G4ThreeVector fPreStepLocation; // point where last ComputeStep() called + G4double fMinSafety_PreStepPt = -1.0; // - corresponding value of safety + + G4TransportationManager* pTransportManager; // Cache for frequent use }; +// -------------------------------------------------------------------- +// Inline methods +// -------------------------------------------------------------------- + +inline G4Navigator* G4MultiNavigator::GetNavigator( G4int n ) const +{ + if( (n>fNoActiveNavigators) || (n<0) ) { n=0; } + return fpNavigator[n]; +} + #endif diff --git a/source/geometry/navigation/include/G4NavigationLogger.hh b/source/geometry/navigation/include/G4NavigationLogger.hh index f9f4f89567..69c5251596 100644 --- a/source/geometry/navigation/include/G4NavigationLogger.hh +++ b/source/geometry/navigation/include/G4NavigationLogger.hh @@ -23,18 +23,17 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4NavigationLogger +// G4NavigationLogger // // Class description: // // Simple utility class for use by navigation systems // for verbosity and check-mode. -// History: -// - Created. Gabriele Cosmo, November 2010 +// Author: Gabriele Cosmo (CERN), November 2010 // -------------------------------------------------------------------- #ifndef G4NAVIGATIONLOGGER_HH -#define G4NAVIGATIONLOGGER_HH +#define G4NAVIGATIONLOGGER_HH 1 #include "G4NavigationHistory.hh" #include "G4VPhysicalVolume.hh" @@ -42,26 +41,41 @@ #include "G4VSolid.hh" #include "G4ThreeVector.hh" +/** + * @brief G4NavigationLogger is a simple utility class for use by the + * navigation systems for verbosity and check-mode. + */ + class G4NavigationLogger { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4NavigationLogger(const G4String& id); ~G4NavigationLogger(); + /** + * Reports about first check - mother safety. + */ void PreComputeStepLog (const G4VPhysicalVolume* motherPhysical, G4double motherSafety, const G4ThreeVector& localPoint) const; - // Report about first check - mother safety + /** + * Reports about a candidate daughter. + */ void AlongComputeStepLog(const G4VSolid* sampleSolid, const G4ThreeVector& samplePoint, const G4ThreeVector& sampleDirection, const G4ThreeVector& localDirection, G4double sampleSafety, G4double sampleStep) const; - // Report about a candidate daughter + /** + * Checks suspicious distance to a candidate daughter. + */ void CheckDaughterEntryPoint(const G4VSolid* sampleSolid, const G4ThreeVector& samplePoint, const G4ThreeVector& sampleDirection, @@ -70,62 +84,79 @@ class G4NavigationLogger const G4ThreeVector& localDirection, G4double motherStep, G4double sampleStep) const; - // Check suspicious distance to a candidate daughter + /** + * Reports exit distance from mother. + */ void PostComputeStepLog (const G4VSolid* motherSolid, const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, G4double motherStep, G4double motherSafety) const; - // Report exit distance from mother + /** + * Reports about safety computation. + */ void ComputeSafetyLog (const G4VSolid* solid, const G4ThreeVector& point, G4double safety, G4bool isMotherVolume, // For labeling G4int banner= -1) const; - // Report about safety computation (daughter?) + /** + * Reports about a new minimum distance to candidate daughter. + */ void PrintDaughterLog (const G4VSolid* sampleSolid, const G4ThreeVector& samplePoint, G4double sampleSafety, G4bool onlySafety, const G4ThreeVector& sampleDirection, - G4double sampleStep ) const; - // Report about a new minimum distance to candidate daughter + G4double sampleStep) const; + /** + * Reports issue with normal from Solid - for ComputeStep(). + */ G4bool CheckAndReportBadNormal(const G4ThreeVector& unitNormal, const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, G4double step, const G4VSolid* solid, - const char* msg ) const; - // Report issue with normal from Solid - for ComputeStep() + const char* msg) const; + /** + * Reports issue with normal from Rotation - for ComputeStep(). + */ G4bool CheckAndReportBadNormal(const G4ThreeVector& unitNormal, const G4ThreeVector& originalNormal, const G4RotationMatrix& rotationM, - const char* msg ) const; - // Report issue with normal from Rotation - for ComputeStep() + const char* msg) const; + /** + * Reports if point wrongly located outside mother volume. + */ void ReportOutsideMother(const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, const G4VPhysicalVolume* motherPV, - G4double tDist = 30.0*CLHEP::cm ) const; - // Report if point wrongly located outside mother volume + G4double tDist = 30.0*CLHEP::cm) const; - void ReportVolumeAndIntersection( std::ostream& ostrm, + /** + * Auxiliary method to report information about volume + * and position/direction + */ + void ReportVolumeAndIntersection(std::ostream& ostrm, const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, - const G4VPhysicalVolume* physical ) const; - // Auxiliary method to report information about volume - // and position/direction + const G4VPhysicalVolume* physical) const; - public: // without description - + /** + * Verbosity control. + */ inline G4int GetVerboseLevel() const { return fVerbose; } inline void SetVerboseLevel(G4int level) { fVerbose = level; } + /** + * Accessors/modifiers. + */ inline G4double GetMinTriggerDistance() const {return fMinTriggerDistance;} inline void SetMinTriggerDistance(G4double d) {fMinTriggerDistance= d;} inline G4bool GetReportSoftWarnings() const {return fReportSoftWarnings;} diff --git a/source/geometry/navigation/include/G4Navigator.hh b/source/geometry/navigation/include/G4Navigator.hh index 9088ca8cf9..6d80e5737c 100644 --- a/source/geometry/navigation/include/G4Navigator.hh +++ b/source/geometry/navigation/include/G4Navigator.hh @@ -33,7 +33,8 @@ // reference system. The navigator maintains a transformation history and // other information to optimise the tracking time performance. -// - Created. Paul Kent, Jul 95/96 +// Original author: Paul Kent (CERN), July 1995-1996 +// // - Made Navigator Abstract G. Cosmo, Nov 2003 // - Added check mode G. Cosmo, Mar 2004 // - Zero step protections J.A. / G.C., Nov 2004 @@ -63,416 +64,592 @@ class G4VPhysicalVolume; class G4SafetyCalculator; +/** + * @brief G4Navigator is a class for use by the tracking management, able to + * obtain/calculate dynamic tracking time information such as the distance to + * the next volume, or to find the physical volume containing a given point in + * the world reference system. The navigator maintains a transformation history + * and other information to optimise the tracking time performance. + */ + class G4Navigator { public: friend std::ostream& operator << (std::ostream &os, const G4Navigator &n); + /** + * Constructor - initialisers and setup. + */ G4Navigator(); - // Constructor - initialisers and setup. + /** + * Copy constructor & assignment operator not allowed. + */ G4Navigator(const G4Navigator&) = delete; G4Navigator& operator=(const G4Navigator&) = delete; - // Copy constructor & assignment operator not allowed. + /** + * Destructor. + */ virtual ~G4Navigator(); - // Destructor. No actions. + /** + * Calculates the distance to the next boundary intersected along the + * specified NORMALISED vector direction and from the specified point in + * the global coordinate system. + * LocateGlobalPointAndSetup() or LocateGlobalPointWithinVolume() must + * have been called with the same global point prior to this call. + * The isotropic distance to the nearest boundary is also calculated + * (usually an underestimate). The current proposed Step length is used + * to avoid intersection calculations: if it can be determined that the + * nearest boundary is >pCurrentProposedStepLength away, kInfinity + * is returned together with the computed isotropic safety distance. + * @note Geometry must be closed. + * @param[in] pGlobalPoint The point in global coordinates system. + * @param[in] pDirection The normalised vector direction. + * @param[in] pCurrentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @returns Length from current point to next boundary surface along + * @p pDirection. + */ virtual G4double ComputeStep(const G4ThreeVector& pGlobalPoint, const G4ThreeVector& pDirection, const G4double pCurrentProposedStepLength, G4double& pNewSafety); - // Calculate the distance to the next boundary intersected - // along the specified NORMALISED vector direction and - // from the specified point in the global coordinate - // system. LocateGlobalPointAndSetup or LocateGlobalPointWithinVolume - // must have been called with the same global point prior to this call. - // The isotropic distance to the nearest boundary is also - // calculated (usually an underestimate). The current - // proposed Step length is used to avoid intersection - // calculations: if it can be determined that the nearest - // boundary is >pCurrentProposedStepLength away, kInfinity - // is returned together with the computed isotropic safety - // distance. Geometry must be closed. + /** + * Same as ComputeStep() above, but does not affect/modify the state + * of the Navigator. + */ G4double CheckNextStep(const G4ThreeVector& pGlobalPoint, const G4ThreeVector& pDirection, const G4double pCurrentProposedStepLength, G4double& pNewSafety); - // Same as above, but do not disturb the state of the Navigator. + /** + * Resets the geometrical hierarchy and searches for the volumes deepest + * in the hierarchy containing the point in the global coordinates space. + * The direction is used to check if a volume is entered. + * The search begin is the geometrical hierarchy at the location of the + * last located point, or the endpoint of the previous Step if + * SetGeometricallyLimitedStep() has been called immediately before. + * @note: In order to call this the geometry MUST be closed. + * @param[in] point The point in global coordinates system. + * @param[in] direction The normalised vector direction. + * @param[in] h The touchable history to be used for initialisation. + * @returns The pointer to the physical volume where point is located. + */ virtual G4VPhysicalVolume* ResetHierarchyAndLocate(const G4ThreeVector& point, const G4ThreeVector& direction, const G4TouchableHistory& h); - // Resets the geometrical hierarchy and search for the volumes deepest - // in the hierarchy containing the point in the global coordinate space. - // The direction is used to check if a volume is entered. - // The search begin is the geometrical hierarchy at the location of the - // last located point, or the endpoint of the previous Step if - // SetGeometricallyLimitedStep() has been called immediately before. - // - // Important Note: In order to call this the geometry MUST be closed. - + /** + * Searches the geometrical hierarchy for the volumes deepest in hierarchy + * containing the point in the global coordinate space. Two main cases + * are: + * i) If pRelativeSearch=false it makes use of no previous/state + * information. Returns the physical volume containing the point, + * with all previous mothers correctly set up. + * ii) If pRelativeSearch is set to true, the search begin is the + * geometrical hierarchy at the location of the last located point, + * or the endpoint of previous Step if SetGeometricallyLimitedStep() + * has been called immediately before. + * The direction is used (to check if a volume is entered) if either + * - the argument ignoreDirection is false, or + * - the Navigator has determined that it is on an edge shared by two + * or more volumes (this is state information). + * @note In order to call this the geometry MUST be closed. + * @param[in] point The point in global coordinates system. + * @param[in] direction The normalised vector direction. + * @param[in] pRelativeSearch Flag to specify where search starts from. + * @param[in] ignoreDirection Flag to specify if to use direction or not. + * @returns The pointer to the physical volume where point is located. + */ virtual G4VPhysicalVolume* LocateGlobalPointAndSetup(const G4ThreeVector& point, const G4ThreeVector* direction = nullptr, const G4bool pRelativeSearch = true, const G4bool ignoreDirection = true); - // Search the geometrical hierarchy for the volumes deepest in hierarchy - // containing the point in the global coordinate space. Two main cases - // are: - // i) If pRelativeSearch=false it makes use of no previous/state - // information. Returns the physical volume containing the point, - // with all previous mothers correctly set up. - // ii) If pRelativeSearch is set to true, the search begin is the - // geometrical hierarchy at the location of the last located point, - // or the endpoint of previous Step if SetGeometricallyLimitedStep() - // has been called immediately before. - // The direction is used (to check if a volume is entered) if either - // - the argument ignoreDirection is false, or - // - the Navigator has determined that it is on an edge shared by two - // or more volumes. (This is state information.) - // - // Important Note: In order to call this the geometry MUST be closed. + /** + * Notifies the Navigator that a track has moved to the new Global point + * 'position', that is known to be within the current safety. + * No check is performed to ensure that it is within the volume. + * This method can be called instead of LocateGlobalPointAndSetup() ONLY + * if the caller is certain that the new global point (position) is inside + * the same volume as the previous position. Usually this can be guaranteed + * only if the point is within safety. + * @param[in] position The position point in global coordinates system. + */ virtual void LocateGlobalPointWithinVolume(const G4ThreeVector& position); - // Notify the Navigator that a track has moved to the new Global point - // 'position', that is known to be within the current safety. - // No check is performed to ensure that it is within the volume. - // This method can be called instead of LocateGlobalPointAndSetup ONLY if - // the caller is certain that the new global point (position) is inside - // the same volume as the previous position. - // Usually this can be guaranteed only if the point is within safety. + /** + * It first searches the geometrical hierarchy like the above method + * LocateGlobalPointAndSetup(), then it uses the volume found and its + * navigation history to update the touchable handle. + * @param[in] position The point in global coordinates system. + * @param[in] direction The normalised vector direction. + * @param[in,out] oldTouchableToUpdate Touchable handle to update. + * @param[in] RelativeSearch Flag to specify where search starts from. + */ inline void LocateGlobalPointAndUpdateTouchableHandle( const G4ThreeVector& position, const G4ThreeVector& direction, G4TouchableHandle& oldTouchableToUpdate, const G4bool RelativeSearch = true); - // First, search the geometrical hierarchy like the above method - // LocateGlobalPointAndSetup(). Then use the volume found and its - // navigation history to update the touchable. - + /** + * Same as the method above LocateGlobalPointAndUpdateTouchableHandle(), + * except that a pointer to G4VTouchable is used for updating the touchable. + */ inline void LocateGlobalPointAndUpdateTouchable( const G4ThreeVector& position, const G4ThreeVector& direction, G4VTouchable* touchableToUpdate, const G4bool RelativeSearch = true); - // First, search the geometrical hierarchy like the above method - // LocateGlobalPointAndSetup(). Then use the volume found and its - // navigation history to update the touchable. + /** + * Same as the method above LocateGlobalPointAndUpdateTouchable(), + * except that direction is not specified. + */ inline void LocateGlobalPointAndUpdateTouchable( const G4ThreeVector& position, G4VTouchable* touchableToUpdate, const G4bool RelativeSearch = true); - // Same as the method above but missing direction. + /** + * Informs the navigator that the previous Step calculated by the + * geometry was taken in its entirety. + */ inline void SetGeometricallyLimitedStep(); - // Inform the navigator that the previous Step calculated - // by the geometry was taken in its entirety. + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the global coordinate system. + * @note The geometry must be closed. + * @param[in] globalpoint The point in global coordinates system. + * The point must be within the current volume. + * @param[in] pProposedMaxLength The proposed maximum length is used + * to avoid volume safety calculations. + * @param[in] keepState Flag to instruct keeping the state (default true) + * to ensure minimum side effects from the call. + * @returns Length from current point to closest boundary surface. + * The value returned is usually an underestimate. + */ virtual G4double ComputeSafety(const G4ThreeVector& globalpoint, const G4double pProposedMaxLength = DBL_MAX, const G4bool keepState = true); - // Calculate the isotropic distance to the nearest boundary from the - // specified point in the global coordinate system. - // The globalpoint utilised must be within the current volume. - // The value returned is usually an underestimate. - // The proposed maximum length is used to avoid volume safety - // calculations. The geometry must be closed. - // To ensure minimum side effects from the call, keepState must be true. + /** + * Returns the current world (topmost) volume. + */ inline G4VPhysicalVolume* GetWorldVolume() const; - // Return the current world (`topmost') volume. + /** + * Sets the world (topmost) volume. This must be positioned at the + * origin (0,0,0) and unrotated. + */ inline void SetWorldVolume(G4VPhysicalVolume* pWorld); - // Set the world (`topmost') volume. This must be positioned at - // origin (0,0,0) and unrotated. + /** + * Touchable creation method. + * @note Caller has deletion responsibility. + * @returns A pointer to the allocated touchable history. + */ inline G4TouchableHistory* CreateTouchableHistory() const; - inline G4TouchableHistory* CreateTouchableHistory(const G4NavigationHistory*) const; - // `Touchable' creation methods: caller has deletion responsibility. + /** + * Touchable creation method, given a history. + * @note Caller has deletion responsibility. + * @param[in] h Pointer to a navigation history to copy from. + * @returns A pointer to the allocated touchable history. + */ + inline G4TouchableHistory* CreateTouchableHistory(const G4NavigationHistory* h) const; + + /** + * Returns a reference counted handle to a touchable history. + */ virtual G4TouchableHandle CreateTouchableHistoryHandle() const; - // Returns a reference counted handle to a touchable history. + /** + * Obtains the Normal vector to a surface (in local coordinates) + * pointing out of previous volume and into current volume + * Convention: the *local* normal is in the coordinate system of the + * *final* volume. The method takes full care about how to calculate + * this normal, but if the surfaces are not convex it will return + * valid=false. + * @note Can only be called if the Navigator's last Step has crossed a + * volume geometrical boundary. + * @note Normals are not available for replica volumes (i.e. valid=false). + * @param[in,out] valid Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ virtual G4ThreeVector GetLocalExitNormal(G4bool* valid); + + /** + * Obtains the Normal vector to a surface (in local coordinates) + * pointing out of previous volume and into current volume, and + * checks the current point against expected 'local' value. + * Convention: the *local* normal is in the coordinate system of the + * *final* volume. The method takes full care about how to calculate + * this normal, but if the surfaces are not convex it will return + * valid=false. + * @note Can only be called if the Navigator's last Step has crossed a + * volume geometrical boundary. + * @note Normals are not available for replica volumes (i.e. valid=false). + * @param[in] point Point in global coordinates system to compare to. + * @param[in,out] valid Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ virtual G4ThreeVector GetLocalExitNormalAndCheck(const G4ThreeVector& point, G4bool* valid); + /** + * Obtains the Normal vector to a surface (in global coordinates) + * pointing out of previous volume and into current volume + * The method takes full care about how to calculate the normal, + * but if the surfaces are not convex it will return valid=false. + * @note Can only be called if the Navigator's last Step has crossed a + * volume geometrical boundary. + * @note Normals are not available for replica volumes (i.e. valid=false). + * @param[in] point Point in global coordinates system to compare to. + * @param[in,out] valid Flag indicating if normal is valid. + * @returns A Exit Surface Normal vector and validity too. + */ virtual G4ThreeVector GetGlobalExitNormal(const G4ThreeVector& point, G4bool* valid); - // Return Exit Surface Normal and validity too. - // Can only be called if the Navigator's last Step has crossed a - // volume geometrical boundary. - // It returns the Normal to the surface pointing out of the volume that - // was left behind and/or into the volume that was entered. - // Convention: - // The *local* normal is in the coordinate system of the *final* volume. - // Restriction: - // Normals are not available for replica volumes (returns valid= false) - // These methods takes full care about how to calculate this normal, - // but if the surfaces are not convex it will return valid=false. + /** + * Verbosity control. + * @note If level>0 && G4VERBOSE, printout can occur. + */ inline G4int GetVerboseLevel() const; inline void SetVerboseLevel(G4int level); - // Get/Set Verbose(ness) level. - // [if level>0 && G4VERBOSE, printout can occur] + /** + * Verify if the navigator is active. + */ inline G4bool IsActive() const; - // Verify if the navigator is active. + + /** + * Activate/inactivate the navigator. + */ inline void Activate(G4bool flag); - // Activate/inactivate the navigator. + /** + * The purpose of this function is to inform the caller if the track is + * entering a daughter volume while exiting from the current volume. + * @note It is not guaranteed to work if SetGeometricallyLimitedStep() + * was not called when it should have been called. + * @returns True only in case when the Step has caused the track to arrive + * at a boundary of a daughter. False, in all other cases. + */ inline G4bool EnteredDaughterVolume() const; - // The purpose of this function is to inform the caller if the track is - // entering a daughter volume while exiting from the current volume. - // This method returns - // - True only in case 1) above, that is when the Step has caused - // the track to arrive at a boundary of a daughter. - // - False in cases 2), 3) and 4), i.e. in all other cases. - // This function is not guaranteed to work if SetGeometricallyLimitedStep() - // was not called when it should have been called. - inline G4bool ExitedMotherVolume() const; - // Verify if the step has exited the mother volume. + /** + * Verify if the step has exited the mother volume. + */ + inline G4bool ExitedMotherVolume() const; + + /** + * Run navigation in "check-mode", therefore using additional verifications + * and more strict correctness conditions. + * @note Is effective only with G4VERBOSE set. + */ inline void CheckMode(G4bool mode); - // Run navigation in "check-mode", therefore using additional - // verifications and more strict correctness conditions. - // Is effective only with G4VERBOSE set. + + /** + * Set/unset verbosity for pushed tracks (default is true). + */ inline G4bool IsCheckModeActive() const; inline void SetPushVerbosity(G4bool mode); - // Set/unset verbosity for pushed tracks (default is true). + /** + * Prints the internal state of the Navigator (for debugging). + * The level of detail is according to the verbosity. + */ void PrintState() const; - // Print the internal state of the Navigator (for debugging). - // The level of detail is according to the verbosity. + /** + * Obtains the transformations Global/Local (and inverse). + * @note Clients of these methods must copy the data + * if they need to keep it. + */ inline const G4AffineTransform& GetGlobalToLocalTransform() const; inline const G4AffineTransform GetLocalToGlobalTransform() const; - // Obtain the transformations Global/Local (and inverse). - // Clients of these methods must copy the data if they need to keep it. + /** + * Obtains mother to daughter transformation. + */ G4AffineTransform GetMotherToDaughterTransform(G4VPhysicalVolume* dVolume, G4int dReplicaNo, EVolume dVolumeType ); - // Obtain mother to daughter transformation. + /** + * Resets stack and minimum or navigator state machine necessary for reset + * as needed by LocalGlobalPointAndSetup(). + * @note Does not perform clears, resizes, or reset fLastLocatedPointLocal. + */ inline void ResetStackAndState(); - // Reset stack and minimum or navigator state machine necessary for reset - // as needed by LocalGlobalPointAndSetup. - // Does not perform clears, resizes, or reset fLastLocatedPointLocal. + /** + * Reports on severity of error and number of zero steps, + * in case Navigator is stuck and is returning zero steps. + * Values: 1 (small problem), 5 (correcting), + * 9 (ready to abandon), 10 (abandoned) + * @param[in,out] noZeroSteps Returns the number of zero steps in case + * pointer is not null. + * @returns The error severity. + */ inline G4int SeverityOfZeroStepping( G4int* noZeroSteps ) const; - // Report on severity of error and number of zero steps, - // in case Navigator is stuck and is returning zero steps. - // Values: 1 (small problem), 5 (correcting), - // 9 (ready to abandon), 10 (abandoned) + /** + * Returns the local coordinate of the point in the reference system + * of its containing volume that was found by LocalGlobalPointAndSetup(). + * The local coordinate of the last located track. + */ inline G4ThreeVector GetCurrentLocalCoordinate() const; - // Return the local coordinate of the point in the reference system - // of its containing volume that was found by LocalGlobalPointAndSetup. - // The local coordinate of the last located track. + /** + * Computes and returns the local->global translation/rotation + * of current volume. + */ inline G4ThreeVector NetTranslation() const; inline G4RotationMatrix NetRotation() const; - // Compute+return the local->global translation/rotation of current volume. + /** + * Enables best-possible evaluation of isotropic safety. + */ inline void EnableBestSafety( G4bool value = false ); - // Enable best-possible evaluation of isotropic safety. + /** + * Accessor & modifier for custom external navigation. + */ inline G4VExternalNavigation* GetExternalNavigation() const; void SetExternalNavigation(G4VExternalNavigation* externalNav); - // Accessor & modifier for custom external navigation. + /** + * Gets/sets alternative navigator for voxel volumes. + */ inline G4VoxelNavigation& GetVoxelNavigator(); void SetVoxelNavigation(G4VoxelNavigation* voxelNav); - // Alternative navigator for voxel volumes. + /** + * Cloning feature for use in MT applications to clone the navigator, + * including external sub-navigator. + * @note Client has responsibility for ownership of the returned + * allocated pointer. + * @returns A pointer to the cloned navigator object. + */ inline G4Navigator* Clone() const; - // Cloning feature for use in MT applications to clone - // navigator, including external sub-navigator. - // Client has responsibility for ownership of returned allocated pointer. - inline G4ThreeVector GetLastStepEndPoint() const { return fStepEndPoint;} - // Get endpoint of last step. + /** + * Gets endpoint of last step. + */ + inline G4ThreeVector GetLastStepEndPoint() const; + /** + * Derived navigators which rely on LocateGlobalPointAndSetup() need to + * inform size of step, to maintain logic about arriving on boundary + * for challenging cases. + * Required in order to cope with multiple trials at boundaries + * => Locate with use direction rather than simple, fast logic. + */ void InformLastStep(G4double lastStep, G4bool entersDaughtVol, G4bool exitsMotherVol ); - // Derived navigators which rely on LocateGlobalPointAndSetup() need to - // inform size of step, to maintain logic about arriving on boundary - // for challenging cases. - // Required in order to cope with multiple trials at boundaries - // => Locate with use direction rather than simple, fast logic. protected: + /** + * Saves the state: fValidExitNormal, fExitNormal, fExiting, fEntering, + * fBlockedPhysicalVolume, fBlockedReplicaNo, fLastStepWasZero, + * fLastLocatedPointLocal, fLocatedOutsideWorld, fEnteredDaughter, + * fExitedMother, fPreviousSftOrigin, fPreviousSafety. + */ void SetSavedState(); - // ( fValidExitNormal, fExitNormal, fExiting, fEntering, - // fBlockedPhysicalVolume, fBlockedReplicaNo, fLastStepWasZero); - // Extended to include: - // ( fLastLocatedPointLocal, fLocatedOutsideWorld; - // fEnteredDaughter, fExitedMother - // fPreviousSftOrigin, sPreviousSafety) Safety Sphere. + /** + * Copy aspects of the state, to enable a non-state changing + * call to ComputeStep(). + */ void RestoreSavedState(); - // Copy aspects of the state, to enable a non-state changing - // call to ComputeStep(). + /** + * Utility method to reset the navigator state machine. + */ virtual void ResetState(); - // Utility method to reset the navigator state machine. - inline G4ThreeVector ComputeLocalPoint(const G4ThreeVector& rGlobPoint) const; - // Return position vector in local coordinate system, given a position - // vector in world coordinate system. + /** + * Returns position vector in local coordinate system, given a position + * vector in world coordinate system. + */ + inline G4ThreeVector ComputeLocalPoint(const G4ThreeVector& rGlobP) const; + /** + * Returns the local direction of the specified vector in the reference + * system of the volume that was found by LocalGlobalPointAndSetup(). + * The Local Coordinates of point in world coordinate system. + */ inline G4ThreeVector ComputeLocalAxis(const G4ThreeVector& pVec) const; - // Return the local direction of the specified vector in the reference - // system of the volume that was found by LocalGlobalPointAndSetup. - // The Local Coordinates of point in world coordinate system. + /** + * Characterises the type of volume - normal/replicated/parameterised. + */ inline EVolume VolumeType(const G4VPhysicalVolume *pVol) const; - // Characterise `type' of volume - normal/replicated/parameterised. + /** + * Characterises the daughters of given logical volume. + */ inline EVolume CharacteriseDaughters(const G4LogicalVolume *pLog) const; - // Characterise daughter of logical volume. + /** + * Gets regular structure ID of first daughter. + */ inline G4int GetDaughtersRegularStructureId(const G4LogicalVolume *pLv) const; - // Get regular structure ID of first daughter. + /** + * Renavigates & resets hierarchy described by the current history: + * Resets volumes and recomputes transforms and/or solids of + * replicated/parameterised volumes. + */ virtual void SetupHierarchy(); - // Renavigate & reset hierarchy described by current history: - // o Reset volumes and recompute transforms and/or solids of - // replicated/parameterised volumes. + /** + * Utility method to trigger overlaps check on a volume with reported + * overlaps ordered by relevance. Used in ComputeStep() when loopings + * with zero step are detected. + */ G4bool CheckOverlapsIterative(G4VPhysicalVolume* vol); - // Utility method to trigger overlaps check on a volume with reported - // overlaps ordered by relevance. Used in ComputeStep() when loopings - // with zero step are detected. private: + /** + * Logs and checks for steps larger than the tolerance. + */ void ComputeStepLog(const G4ThreeVector& pGlobalpoint, G4double moveLenSq) const; - // Log and checks for steps larger than the tolerance. protected: - G4double kCarTolerance, fMinStep, fSqTol; - // Cached tolerances. + G4double kCarTolerance, fMinStep, fSqTol; // Cached tolerances. - // - // BEGIN State information + // BEGIN State information ------------------------------------------------ // + /** Transformation and history of the current path + through the geometrical hierarchy. */ G4NavigationHistory fHistory; - // Transformation and history of the current path - // through the geometrical hierarchy. + /** Endpoint of last ComputeStep(). + Can be used for optimisation (e.g. when computing safety). */ G4ThreeVector fStepEndPoint; - // Endpoint of last ComputeStep - // can be used for optimisation (e.g. when computing safety). + + /** Position of the end-point of the last call to ComputeStep() + in last local coordinates. */ G4ThreeVector fLastStepEndPointLocal; - // Position of the end-point of the last call to ComputeStep - // in last Local coordinates. + /** Verbosity level [if > 0, printout can occur]. */ G4int fVerbose = 0; - // Verbose(ness) level [if > 0, printout can occur]. + /** A memory of whether in this Step a daughter volume is entered + (set in Compute & Locate). + After Compute: it expects to enter a daughter + After Locate: it has entered a daughter. */ G4bool fEnteredDaughter; - // A memory of whether in this Step a daughter volume is entered - // (set in Compute & Locate). - // After Compute: it expects to enter a daughter - // After Locate: it has entered a daughter. + /** A similar memory whether the Step exited current "mother" volume + completely, not entering daughter. */ G4bool fExitedMother; - // A similar memory whether the Step exited current "mother" volume - // completely, not entering daughter. + /** Set true if last Step was limited by geometry. */ G4bool fWasLimitedByGeometry = false; - // Set true if last Step was limited by geometry. private: + /** Position of the last located point relative to its containing volume. + This is coupled with the Boolean member 'fLocatedOutsideWorld'. */ G4ThreeVector fLastLocatedPointLocal; - // Position of the last located point relative to its containing volume. - // This is coupled with the bool member fLocatedOutsideWorld; + /** Leaving volume normal, in the volume containing the exited + volume's coordinate system. + This is closely coupled with 'fValidExitNormal', which signals whether + we have a (valid) normal for volume we're leaving. */ G4ThreeVector fExitNormal; - // Leaving volume normal, in the volume containing the exited - // volume's coordinate system. - // This is closely coupled with fValidExitNormal, which signals whether - // we have a (valid) normal for volume we're leaving. + /** Leaving volume normal, in its own coordinate system. */ G4ThreeVector fGrandMotherExitNormal; - // Leaving volume normal, in its own coordinate system. - G4ThreeVector fExitNormalGlobalFrame; - // Leaving volume normal, in the global coordinate system. + /** Leaving volume normal, in the global coordinate system. */ + G4ThreeVector fExitNormalGlobalFrame; + + /** Memory of last safety origin & value. Used in ComputeStep() to ensure + that origin of current Step is in the same volume as the point of the + last relocation. */ G4ThreeVector fPreviousSftOrigin; G4double fPreviousSafety; - // Memory of last safety origin & value. Used in ComputeStep() to ensure - // that origin of current Step is in the same volume as the point of the - // last relocation. + /** Memory of the mother volume during previous step. + Intended use: inform user in case of stuck track. */ G4VPhysicalVolume* fLastMotherPhys = nullptr; - // Memory of the mother volume during previous step. - // Intended use: inform user in case of stuck track. + /** Identifies the volume and copy / replica number that is blocked + (after exiting -- because the exit direction is along the exit normal) + or a candidate for entry (after compute step). */ G4VPhysicalVolume* fBlockedPhysicalVolume; G4int fBlockedReplicaNo; - // Identifies the volume and copy / replica number that is blocked - // (after exiting -- because the exit direction is along the exit normal) - // or a candidate for entry (after compute step). + /** Count zero steps, as one or two can occur due to changing momentum at + a boundary or at an edge common between volumes; several zero steps + are likely a problem in the geometry description or in the navigation. + Number of preceding moves that were Zero. + Reset to 0 after finite step. */ G4int fNumberZeroSteps; - // Count zero steps, as one or two can occur due to changing momentum at - // a boundary or at an edge common between volumes; several zero steps - // are likely a problem in the geometry description or in the navigation. - // Number of preceding moves that were Zero. Reset to 0 after finite step. + + /** After this many failed/zero steps, act (push etc). */ G4int fActionThreshold_NoZeroSteps = 10; - // After this many failed/zero steps, act (push etc). + + /** After this many failed/zero steps, abandon track. */ G4int fAbandonThreshold_NoZeroSteps = 25; - // After this many failed/zero steps, abandon track. + /** States if the navigator is activated or not. */ G4bool fActive = false; - // States if the navigator is activated or not. + /** Whether ComputeStep() was called since the last call to a Locate(). + Uses: distinguish parts of state which differ before/after calls + to ComputeStep() or one of the Locate() methods; avoid two consecutive + calls to compute-step (illegal). */ G4bool fLastTriedStepComputation = false; - // Whether ComputeStep() was called since the last call to a Locate(). - // Uses: distinguish parts of state which differ before/after calls - // to ComputeStep() or one of the Locate() methods; avoid two consecutive - // calls to compute-step (illegal). + /** Entering/Exiting volumes blocking/setup. + o If exiting, volume ptr & replica number (set & used by Locate..()) + used for blocking on redescent of geometry; + o If entering, volume ptr & replica number (set by ComputeStep(), + used by Locate..()) of volume for 'automatic' entry. */ G4bool fEntering, fExiting; - // Entering/Exiting volumes blocking/setup. - // o If exiting, volume ptr & replica number (set & used by Locate..()) - // used for blocking on redescent of geometry; - // o If entering, volume ptr & replica number (set by ComputeStep(), - // used by Locate..()) of volume for 'automatic' entry. + /** Set true if have leaving volume normal. */ G4bool fValidExitNormal; - // Set true if have leaving volume normal. - G4bool fLastStepWasZero; - // Whether the last ComputeStep moved Zero. Used to check for edges. - G4bool fLocatedOnEdge; - // Whether the Navigator has detected an edge. - G4bool fLocatedOutsideWorld; - // Whether the last call to Locate methods left the world. - - G4bool fChangedGrandMotherRefFrame; - // Whether frame is changed. - G4bool fCalculatedExitNormal; - // Has it been computed since the last call to ComputeStep(). - // Covers both Global and GrandMother. - // END State information + /** Whether the last ComputeStep moved Zero. Used to check for edges. */ + G4bool fLastStepWasZero; + + /** Whether the Navigator has detected an edge. */ + G4bool fLocatedOnEdge; + + /** Whether the last call to Locate methods left the world. */ + G4bool fLocatedOutsideWorld; + + /** Whether frame is changed. */ + G4bool fChangedGrandMotherRefFrame; + + /** Has it been computed since the last call to ComputeStep(). + Covers both Global and GrandMother. */ + G4bool fCalculatedExitNormal; + // + // END State information -------------------------------------------------- // Optional State information (created/used as needed) // @@ -498,15 +675,15 @@ class G4Navigator G4double sPreviousSafety; } fSaveState; + // ======================================================================== // BEGIN -- Tracking Invariants - // =========================================== + /** A link to the topmost physical volume in the detector. + Must be positioned at the origin and unrotated. */ G4VPhysicalVolume* fTopPhysical = nullptr; - // A link to the topmost physical volume in the detector. - // Must be positioned at the origin and unrotated. // Helpers/Utility classes - // + G4NormalNavigation fnormalNav; G4VoxelNavigation* fpvoxelNav; G4ParameterisedNavigation fparamNav; @@ -517,13 +694,15 @@ class G4Navigator G4SafetyCalculator* fpSafetyCalculator = nullptr; // Utility information - // + + /** Check-mode flag [if true, more strict checks are performed]. */ G4bool fCheck = false; - // Check-mode flag [if true, more strict checks are performed]. + + /** Push flags [if true, means a stuck particle has been pushed]. */ G4bool fPushed = false, fWarnPush = true; - // Push flags [if true, means a stuck particle has been pushed]. // End -- Tracking Invariants + // ======================================================================== }; #include "G4Navigator.icc" diff --git a/source/geometry/navigation/include/G4Navigator.icc b/source/geometry/navigation/include/G4Navigator.icc index 4fa5e71c3e..bdb755be53 100644 --- a/source/geometry/navigation/include/G4Navigator.icc +++ b/source/geometry/navigation/include/G4Navigator.icc @@ -25,6 +25,7 @@ // // G4Navigator class Inline implementation // +// Author: Paul Kent (CERN), July 1995-1996 // -------------------------------------------------------------------- // ******************************************************************** @@ -487,3 +488,13 @@ G4Navigator* G4Navigator::Clone() const } return clone_nav; } + +// ******************************************************************** +// GetLastStepEndPoint +// ******************************************************************** +// +inline +G4ThreeVector G4Navigator::GetLastStepEndPoint() const +{ + return fStepEndPoint; +} diff --git a/source/geometry/navigation/include/G4NormalNavigation.hh b/source/geometry/navigation/include/G4NormalNavigation.hh index 3da142c262..dbdd0ce1d4 100644 --- a/source/geometry/navigation/include/G4NormalNavigation.hh +++ b/source/geometry/navigation/include/G4NormalNavigation.hh @@ -23,18 +23,17 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4NormalNavigation +// G4NormalNavigation // // Class description: // // Utility for navigation in volumes containing only G4PVPlacement // daughter volumes. -// History: -// - Created. Paul Kent, Aug 96 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #ifndef G4NORMALNAVIGATION_HH -#define G4NORMALNAVIGATION_HH +#define G4NORMALNAVIGATION_HH 1 #include @@ -49,52 +48,100 @@ class G4NavigationLogger; +/** + * @brief G4NormalNavigation is a concrete utility class for navigation in + * volumes containing only G4PVPlacement daughter volumes. + */ + class G4NormalNavigation : public G4VNavigation { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4NormalNavigation(); - // Constructor - ~G4NormalNavigation() override; - // Destructor - inline G4bool LevelLocate( G4NavigationHistory &history, - const G4VPhysicalVolume *blockedVol, + /** + * Searches positioned volumes in mother at current top level of history + * for volume containing @p globalPoint. Do not test against @p blockedVol. + * If a containing volume is found, push it onto navigation history state + * and return true, else return false (the point lying in the mother but + * not any of the daughters). + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in] pLocatedOnEdge Flag specifying if point is located on edge. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ + inline G4bool LevelLocate( G4NavigationHistory& history, + const G4VPhysicalVolume* blockedVol, const G4int blockedNum, - const G4ThreeVector &globalPoint, + const G4ThreeVector& globalPoint, const G4ThreeVector* globalDirection, const G4bool pLocatedOnEdge, - G4ThreeVector &localPoint) final; - // Search positioned volumes in mother at current top level of history - // for volume containing globalPoint. Do not test the blocked volume. - // If a containing volume is found, `stack' the new volume and return - // true, else return false (the point lying in the mother but not any - // of the daughters). localPoint = global point in local system on entry, - // point in new system on exit. + G4ThreeVector& localPoint) final; - G4double ComputeStep( const G4ThreeVector &localPoint, - const G4ThreeVector &localDirection, + /** + * Computes the length of a step to the next boundary. + * Does not test against @p pBlockedPhysical. Identifies the next candidate + * volume (if a daughter of the current volume), and returns it in: + * pBlockedPhysical, blockedReplicaNo. + * @param[in] localPoint Local point. + * @param[in] localDirection Pointer to local direction or null pointer. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @returns Length from current point to next boundary surface along + * @p localDirection. + */ + G4double ComputeStep( const G4ThreeVector& localPoint, + const G4ThreeVector& localDirection, const G4double currentProposedStepLength, - G4double &newSafety, - G4NavigationHistory &history, - G4bool &validExitNormal, - G4ThreeVector &exitNormal, - G4bool &exiting, - G4bool &entering, - G4VPhysicalVolume *(*pBlockedPhysical), - G4int &blockedReplicaNo ) final; + G4double& newSafety, + G4NavigationHistory& history, + G4bool& validExitNormal, + G4ThreeVector& exitNormal, + G4bool& exiting, + G4bool& entering, + G4VPhysicalVolume* (*pBlockedPhysical), + G4int& blockedReplicaNo ) final; - G4double ComputeSafety( const G4ThreeVector &globalpoint, - const G4NavigationHistory &history, + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the local coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] localPoint Local point. + * @param[in] history Navigation history. + * @param[in] pMaxLength Maximum step length beyond which volumes + * need not be checked. + * @returns Length from current point to closest surface. + */ + G4double ComputeSafety( const G4ThreeVector& localpoint, + const G4NavigationHistory& history, const G4double pMaxLength=DBL_MAX ) final; + /** + * Verbosity control. + * @note If level>0 && G4VERBOSE, printout can occur. + */ G4int GetVerboseLevel() const final; void SetVerboseLevel(G4int level) final; - // Get/Set Verbose(ness) level. - // [if level>0 && G4VERBOSE, printout can occur] private: + G4NavigationLogger* fLogger; }; diff --git a/source/geometry/navigation/include/G4NormalNavigation.icc b/source/geometry/navigation/include/G4NormalNavigation.icc index cd088e83d4..9e3f59e712 100644 --- a/source/geometry/navigation/include/G4NormalNavigation.icc +++ b/source/geometry/navigation/include/G4NormalNavigation.icc @@ -25,6 +25,7 @@ // // G4NormalNavigation Inline Implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- // ******************************************************************** diff --git a/source/geometry/navigation/include/G4ParameterisedNavigation.hh b/source/geometry/navigation/include/G4ParameterisedNavigation.hh index ee50e243b5..e7ab54b05a 100644 --- a/source/geometry/navigation/include/G4ParameterisedNavigation.hh +++ b/source/geometry/navigation/include/G4ParameterisedNavigation.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ParameterisedNavigation +// G4ParameterisedNavigation // // Class description: // @@ -31,11 +31,10 @@ // volume for which voxels for the replicated volumes have been constructed. // [Voxels MUST be along one axis only: NOT refined] -// History: -// - Created. Paul Kent, Aug 96 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #ifndef G4PARAMETERISEDNAVIGATION_HH -#define G4PARAMETERISEDNAVIGATION_HH +#define G4PARAMETERISEDNAVIGATION_HH 1 #include "G4Types.hh" @@ -51,16 +50,46 @@ #include "G4ThreeVector.hh" #include "G4BlockingList.hh" +/** + * @brief G4ParameterisedNavigation is a concrete utility class for navigation + * in volumes containing a single G4PVParameterised volume for which voxels for + * the replicated volumes have been constructed. + * @note Voxels MUST be along one axis only: NOT refined. + */ + class G4ParameterisedNavigation : public G4VoxelNavigation { - public: // with description + public: + /** + * Constructor and default Destructor. + */ G4ParameterisedNavigation(); ~G4ParameterisedNavigation() override; + /** + * Locates voxel node based on given point. If no parameterisation axis + * is specified, adopt default location strategy as for placements. + * @param[in] pHead Pointer to header of nodes to look through. + * @param[in] localPoint Local point + * @returns Pointer to the node where the given point is located. + */ inline G4SmartVoxelNode* ParamVoxelLocate( G4SmartVoxelHeader* pHead, const G4ThreeVector& localPoint ); + /** + * Searches positioned volumes in mother at current top level of @p history + * for volume containing @p globalPoint. Do not test against @p blockedVol. + * If a containing volume is found, push it onto navigation history state. + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked replica volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Global direction vector. + * @param[in] pLocatedOnEdge Flag specifying if point is located on edge. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ G4bool LevelLocate( G4NavigationHistory& history, const G4VPhysicalVolume* blockedVol, const G4int blockedNum, @@ -69,8 +98,29 @@ class G4ParameterisedNavigation : public G4VoxelNavigation const G4bool pLocatedOnEdge, G4ThreeVector& localPoint ) override; - G4double ComputeStep( const G4ThreeVector& globalPoint, - const G4ThreeVector& globalDirection, + /** + * Computes the length of a step to the next boundary. + * Does not test against @p pBlockedPhysical. Identifies the next candidate + * volume (if a daughter of the current volume), and returns it in: + * pBlockedPhysical, blockedReplicaNo. + * @param[in] localPoint Local point. + * @param[in] localDirection Local direction vector. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @returns Length from current point to next boundary surface along + * @p localDirection. + */ + G4double ComputeStep( const G4ThreeVector& localPoint, + const G4ThreeVector& localDirection, const G4double currentProposedStepLength, G4double& newSafety, G4NavigationHistory& history, @@ -81,34 +131,69 @@ class G4ParameterisedNavigation : public G4VoxelNavigation G4VPhysicalVolume *(*pBlockedPhysical), G4int& blockedReplicaNo ) override; + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the local coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] localPoint Local point. + * @param[in] history Navigation history. + * @param[in] pMaxLength Maximum step length beyond which volumes + * need not be checked. + * @returns Length from current point to closest surface. + */ G4double ComputeSafety( const G4ThreeVector& localPoint, const G4NavigationHistory& history, const G4double pProposedMaxLength=DBL_MAX ) override; + /** + * Updates internal navigation state to take into account that location + * has been moved, but remains within the @p motherPhysical volume. + * @param[in] motherPhysical Current physical volume. + * @param[in] localPoint Local point. + */ void RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, const G4ThreeVector& localPoint ) override; private: + /** + * Computes safety from specified point to voxel boundaries using already + * located point. + * @param[in] localPoint Local point. + * @param[in] pAxis Axis of parameterisation. + * @returns Safety length from current point to voxel boundary. + */ G4double ComputeVoxelSafety( const G4ThreeVector& localPoint, const EAxis pAxis ) const; + + /** + * Finds the next voxel from the current voxel and point in the specified + * direction. + * @param[in] localPoint Local point. + * @param[in] localDirection Direction along which compute the distance. + * @param[in] currentStep Current step size. + * @param[in] pAxis Axis of parameterisation. + * @returns false if all voxels considered + * [current Step ends inside same voxel or leaves all voxels] + * true otherwise + * [the information on the next voxel is saved]. + */ G4bool LocateNextVoxel( const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, const G4double currentStep, const EAxis pAxis ); - private: - - // Necessary to resolve cases with nested parameterisations + /** + * Calls virtual 'Compute' methods, and copies information if nested. + * Method necessary to resolve cases with nested parameterisations. + * @param[in] num Copy number of parameterisation. + * @param[in] apparentPhys Potentially a PhysV or PhysT. + * @param[in] curParam Pointer to the parameterisation algorithm. + * @returns A pointer to the computed parameterised solid. + */ inline G4VSolid* IdentifyAndPlaceSolid( G4int num, G4VPhysicalVolume* apparentPhys, G4VPVParameterisation* curParam ); - // Call virtual 'Compute' methods, and copy information if nested. - // 'ApparentPhys' is potentially a PhysV or PhysT. - - G4VPhysicalVolume* CreateVolumeWithParent(G4VPhysicalVolume* curPhysical, - const G4NavigationHistory& hist ); - // Create necessary parent touchable and physical with parent. private: diff --git a/source/geometry/navigation/include/G4ParameterisedNavigation.icc b/source/geometry/navigation/include/G4ParameterisedNavigation.icc index 8d75440d46..76961b8af0 100644 --- a/source/geometry/navigation/include/G4ParameterisedNavigation.icc +++ b/source/geometry/navigation/include/G4ParameterisedNavigation.icc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ParameterisedNavigation Inline implementation +// Class G4ParameterisedNavigation Inline implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- // ******************************************************************** @@ -33,8 +34,8 @@ // inline G4VSolid* G4ParameterisedNavigation:: IdentifyAndPlaceSolid( G4int num, - G4VPhysicalVolume *apparentPhys, // PhysV or PhysT - G4VPVParameterisation *curParam ) + G4VPhysicalVolume* apparentPhys, // PhysV or PhysT + G4VPVParameterisation* curParam ) { G4VSolid *sampleSolid; diff --git a/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh b/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh index d7fa4ad57b..e43b5e69cb 100644 --- a/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh +++ b/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh @@ -23,14 +23,14 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PartialPhantomParameterisation +// G4PartialPhantomParameterisation // // Class description: // // Describes partial regular parameterisations, i.e. the voxels do not -// completely fill the container in the three dimensions +// completely fill the container in the three dimensions. -// - Created: P.Arce, September 2010 +// Author: Pedro Arce (CIEMAT), September 2010 // -------------------------------------------------------------------- #ifndef G4PartialPhantomParameterisation_hh #define G4PartialPhantomParameterisation_hh 1 @@ -49,10 +49,19 @@ class G4VPhysicalVolume; class G4VSolid; class G4Material; +/** + * @brief G4PartialPhantomParameterisation describes partial regular + * parameterisations, i.e. the voxels do not completely fill the container + * in the three dimensions. + */ + class G4PartialPhantomParameterisation : public G4PhantomParameterisation { public: + /** + * Default Constructor and Destructor. + */ G4PartialPhantomParameterisation() = default; ~G4PartialPhantomParameterisation() override = default; @@ -62,10 +71,15 @@ class G4PartialPhantomParameterisation : public G4PhantomParameterisation G4VPhysicalVolume *currentVol, const G4VTouchable *parentTouch = nullptr) override; + /** + * Gets the voxel number corresponding to the point in the container + * frame. Use 'localDir' to avoid precision problems at the surfaces. + * @param[in] localPoint Point in local coordinates system. + * @param[in] localDir Local direction to overcome precision issues. + * @returns The voxel number for the specified point. + */ G4int GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ) override; - // Get the voxel number corresponding to the point in the container - // frame. Use 'localDir' to avoid precision problems at the surfaces. G4ThreeVector GetTranslation(const G4int copyNo ) const; @@ -75,12 +89,12 @@ class G4PartialPhantomParameterisation : public G4PhantomParameterisation G4Material* GetMaterial( std::size_t nx, std::size_t ny, std::size_t nz) const; G4Material* GetMaterial( std::size_t copyNo ) const; - void SetFilledIDs( std::multimap fid ) + inline void SetFilledIDs( std::multimap fid ) { fFilledIDs = std::move(fid); } - void SetFilledMins( std::map< G4int, std::map > fmins ) + inline void SetFilledMins( std::map< G4int, std::map > fmins ) { fFilledMins = std::move(fmins); } @@ -89,12 +103,16 @@ class G4PartialPhantomParameterisation : public G4PhantomParameterisation private: + /** + * Converts the copyNo to voxel numbers in x, y and z. + */ void ComputeVoxelIndices(const G4int copyNo, std::size_t& nx, std::size_t& ny, std::size_t& nz ) const; - // Convert the copyNo to voxel numbers in x, y and z. + /** + * Checks that the copy number is within limits. + */ void CheckCopyNo( const G4long copyNo ) const; - // Check that the copy number is within limits. private: diff --git a/source/geometry/navigation/include/G4PathFinder.hh b/source/geometry/navigation/include/G4PathFinder.hh index 72e5c4ac0d..fe163c9c52 100644 --- a/source/geometry/navigation/include/G4PathFinder.hh +++ b/source/geometry/navigation/include/G4PathFinder.hh @@ -23,318 +23,365 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PathFinder +// G4PathFinder // // Class description: // // This class directs the lock-stepped propagation of a track in the -// 'mass' and other parallel geometries. It ensures that tracking +// 'mass' and other parallel geometries. It ensures that tracking // in a magnetic field sees these parallel geometries at each trial step, // and that the earliest boundary limits the step. // -// For the movement in field, it relies on the class G4PropagatorInField +// In field, it relies on the class G4PropagatorInField. -// History: -// ------- -// 7.10.05 John Apostolakis, Draft design -// 26.04.06 John Apostolakis, Revised design and first implementation -// --------------------------------------------------------------------------- +// Author: John Apostolakis (CERN), 7 October 2005 +// --------------------------------------------------------------------- #ifndef G4PATHFINDER_HH #define G4PATHFINDER_HH 1 #include + #include "G4Types.hh" - #include "G4FieldTrack.hh" - -class G4TransportationManager; -class G4Navigator; - #include "G4MultiNavigator.hh" #include "G4TouchableHandle.hh" +class G4TransportationManager; +class G4Navigator; class G4PropagatorInField; +/** + * @brief G4PathFinder directs the lock-stepped propagation of a track in the + * 'mass' and other parallel geometries. It ensures that tracking in a magnetic + * field sees these parallel geometries at each trial step and that the earliest + * boundary limits the step. + */ + class G4PathFinder { + public: - public: // with description + /** + * Retrieves singleton instance and creates it if not existing. + */ + static G4PathFinder* GetInstance(); - static G4PathFinder* GetInstance(); - // Retrieve singleton instance and create it if not existing. + /** + * Retrieve singleton instance pointer. + */ + static G4PathFinder* GetInstanceIfExist(); - static G4PathFinder* GetInstanceIfExist(); - // Retrieve singleton instance pointer. + /** + * Destructor, called only by G4RunManagerKernel. + */ + ~G4PathFinder(); - G4double ComputeStep( const G4FieldTrack& pFieldTrack, - G4double pCurrentProposedStepLength, - G4int navigatorId, // Identifies the geometry - G4int stepNo, // See next step/check - G4double& pNewSafety, // Only for this geometry - ELimited& limitedStep, - G4FieldTrack& EndState, - G4VPhysicalVolume* currentVolume ); - // Compute the next geometric Step -- curved or linear - // If it is called with a larger 'stepNo' it will execute a new step; - // if 'stepNo' is same as last call, then the results for - // the geometry with Id. number 'navigatorId' will be returned. + /** + * Computes the next geometric Step, curved or linear. + * If it is called with a larger 'stepNo' it will execute a new step; + * if 'stepNo' is same as last call, then the results for the geometry + * with Id number 'navigatorId' will be returned. + * @param[in,out] pFieldTrack Field track to be filled. + * @param[in] pCurrentProposedStepLength Current proposed step length. + * @param[in] navigatorId Identifier of the geometry. + * @param[in] stepNo Step number; see next step/check. + * @param[in, out] pNewSafety New safety for this geometry. + * @param[in, out] limitedStep Step characterisation to be returned. + * @param[in, out] EndState Field track end state. + * @param[in] currentVolume Pointer to the current volume. + * @returns Step length. + */ + G4double ComputeStep( const G4FieldTrack& pFieldTrack, + G4double pCurrentProposedStepLength, + G4int navigatorId, // Identifies the geometry + G4int stepNo, // See next step/check + G4double& pNewSafety, // Only for this geometry + ELimited& limitedStep, + G4FieldTrack& EndState, + G4VPhysicalVolume* currentVolume ); - void Locate( const G4ThreeVector& position, - const G4ThreeVector& direction, - G4bool relativeSearch = true); - // Make primary relocation of global point in all navigators, - // and update them. + /** + * Makes primary relocation of the global point in all navigators, + * and updates them. + * @param[in] position Point in global coordinates system. + * @param[in] direction Global direction vector. + * @param[in] relativeSearch If set to true (default), the search begins + * is the geometrical hierarchy at the location of the last + * located point. + */ + void Locate( const G4ThreeVector& position, + const G4ThreeVector& direction, + G4bool relativeSearch = true); - void ReLocate( const G4ThreeVector& position ); - // Make secondary relocation of global point (within safety only) - // in all navigators, and update them. + /** + * Makes secondary relocation of the global point (within safety only) + * in all navigators, and updates them. + * @param[in] position Point in global coordinates system. + */ + void ReLocate( const G4ThreeVector& position ); - void PrepareNewTrack( const G4ThreeVector& position, - const G4ThreeVector& direction, - G4VPhysicalVolume* massStartVol = nullptr); - // Check and cache set of active navigators. + /** + * Checks and caches the set of active navigators. + * @param[in] position Point in global coordinates system. + * @param[in] direction Global direction vector. + * @param[in] massStartVol Pointer to the mass geometry world. + */ + void PrepareNewTrack( const G4ThreeVector& position, + const G4ThreeVector& direction, + G4VPhysicalVolume* massStartVol = nullptr); - void EndTrack(); - // Signal end of tracking of current track. - // Reset internal state - // Inform TransportationManager to use 'ordinary' Navigator + /** + * Signals the end of tracking of the current track. Resets internal state + * and informs G4TransportationManager to use 'ordinary' Navigator. + */ + void EndTrack(); + /** + * Creates a touchable handle for the specified navigator. + * @param[in] navId The navigator identifier. + * @returns A touchable handle of the geometry. + */ G4TouchableHandle CreateTouchableHandle( G4int navId ) const; + + /** + * Returns the located volume for the specified navigator. + * @param[in] navId The navigator identifier. + * @returns A pointer to the located volume in the geometry. + */ inline G4VPhysicalVolume* GetLocatedVolume( G4int navId ) const; - // ----------------------------------------------------------------- + // ----------------------------------------------------------------- - inline G4bool IsParticleLooping() const; + /** + * Returns the minimum value of safety after last ComputeStep(). + */ + inline G4double GetCurrentSafety() const; - inline G4double GetCurrentSafety() const; - // Minimum value of safety after last ComputeStep - inline G4double GetMinimumStep() const; - // Get the minimum step size from the last ComputeStep call - // - in case full step is taken, this is kInfinity - inline unsigned int GetNumberGeometriesLimitingStep() const; + /** + * Gets the minimum step size from the last ComputeStep() call. + * @note In case full step is taken, this is kInfinity. + */ + inline G4double GetMinimumStep() const; - G4double ComputeSafety( const G4ThreeVector& globalPoint); - // Recompute safety for the relevant point the endpoint of the last step!! - // Maintain vector of individual safety values (for next method) + /** + * Returns the number of all geometries limiting the step. + */ + inline unsigned int GetNumberGeometriesLimitingStep() const; - G4double ObtainSafety( G4int navId, G4ThreeVector& globalCenterPoint ); - // Obtain safety for navigator/geometry navId for last point 'computed' - // --> last point for which ComputeSafety was called - // Returns the point (center) for which this safety is valid + /** + * Recomputes the safety for the relevant point, i.e. the endpoint of the + * last step. Maintains a vector of individual safety values (used by next + * method below). + * @param[in] globalPoint Point in global coordinates system. + * @returns The safety value for the specified point in the geometry. + */ + G4double ComputeSafety( const G4ThreeVector& globalPoint); - void EnableParallelNavigation( G4bool enableChoice = true ); - // Must call it to ensure that PathFinder is prepared, - // especially for curved tracks. If true it switches PropagatorInField - // to use MultiNavigator. Must call it with false to undo (=PiF use - // Navigator for tracking!) + /** + * Obtains the safety for the specified navigator/geometry for last point + * 'computed' (i.e., the last point for which ComputeSafety() was called). + * @param[in] navId The navigator identifier. + * @param[in,out] globalCenterPoint The point (center) for which this + * safety is valid. + * @returns The safety value in the specified geometry. + */ + inline G4double ObtainSafety(G4int navId, G4ThreeVector& globalCenterPoint); - inline G4int SetVerboseLevel(G4int lev = -1); + /** + * To enable parallel navigation. Must call it to ensure that G4PathFinder + * is prepared, especially for curved tracks. + * If true it switches G4PropagatorInField to use G4MultiNavigator. + * Must call it with false to undo (i.e. G4PropagatorInField uses classic + * G4Navigator for tracking in such case). + * @param[in] enableChoice Flag to enable/disable parallel navigation. + */ + void EnableParallelNavigation( G4bool enableChoice = true ); - public: // with description + /** + * To control the level of verbosity. Default is no verbosity. + */ + inline G4int SetVerboseLevel(G4int lev = -1); - inline G4int GetMaxLoopCount() const; - inline void SetMaxLoopCount( G4int new_max ); - // A maximum for the number of steps that a (looping) particle can take + /** + * To get/set the maximum for the number of steps that a (looping) + * particle can take. + */ + inline G4int GetMaxLoopCount() const; + inline void SetMaxLoopCount( G4int new_max ); - public: // without description + /** + * Signals that the point location will be moved. + * @note Internal use primarily. + */ + inline void MovePoint(); - inline void MovePoint(); - // Signal that location will be moved -- internal use primarily + // To provide best compatibility between Coupled and normal Transportation + // the next two methods are provided... - // To provide best compatibility between Coupled and Old Transportation - // the next two methods are provided: + /** + * Obtains the last safety needed in ComputeStep() for the specified + * geometry 'navId' (i.e. the last point at which ComputeStep() has + * recalculated the safety). Returns the point (center) for which this + * safety is valid and also the minimum safety over all navigators. + * @param[in] navId The navigator identifier. + * @param[in,out] globCenterPoint The point (center) for which this + * safety is valid. + * @param[in,out] minSafety The minimum safety over all navigators. + * @returns The safety value in the specified geometry. + */ + inline G4double LastPreSafety( G4int navId, G4ThreeVector& globCenterPoint, + G4double& minSafety ); - G4double LastPreSafety( G4int navId, G4ThreeVector& globalCenterPoint, - G4double& minSafety ); - // Obtain last safety needed in ComputeStep (for geometry navId) - // --> last point at which ComputeStep recalculated safety - // Returns the point (center) for which this safety is valid - // and also the minimum safety over all navigators (i.e. full) + /** + * Tells G4PathFinder to copy PostStep Safety to PreSafety + * for use at the next step. + */ + void PushPostSafetyToPreSafety(); - void PushPostSafetyToPreSafety(); - // Tell PathFinder to copy PostStep Safety to PreSafety - // (for use at next step) + /** + * Utility to convert ELimited specification to a string. + */ + G4String& LimitedString( ELimited lim ); - G4String& LimitedString( ELimited lim ); - // Convert ELimited to string + private: - ~G4PathFinder(); - // Destructor + /** + * Private singleton constructor. + */ + G4PathFinder(); - protected: // without description + /** + * Returns pointer to the specified navigator. + */ + inline G4Navigator* GetNavigator(G4int n) const; - G4double DoNextLinearStep( const G4FieldTrack& FieldTrack, - G4double proposedStepLength); + /** + * Performs a linear step. + * @param[in,out] FieldTrack Field track to be filled. + * @param[in] proposedStepLength Current proposed step length. + * @returns The minimum linear step to undertake. + */ + G4double DoNextLinearStep( const G4FieldTrack& FieldTrack, + G4double proposedStepLength); - G4double DoNextCurvedStep( const G4FieldTrack& FieldTrack, - G4double proposedStepLength, - G4VPhysicalVolume* pCurrentPhysVolume); + /** + * Performs a curved step. + * @param[in,out] FieldTrack Field track to be filled. + * @param[in] proposedStepLength Current proposed step length. + * @param[in] pCurrentPhysVolume Pointer to the current volume of interest. + * @returns The minimum step to undertake. + */ + G4double DoNextCurvedStep( const G4FieldTrack& FieldTrack, + G4double proposedStepLength, + G4VPhysicalVolume* pCurrentPhysVolume); - void WhichLimited(); - void PrintLimited(); - // Print key details out for debugging + /** + * Prints key details out for debugging. + */ + void WhichLimited(); + void PrintLimited(); - inline G4bool UseSafetyForOptimization( G4bool ); - // Whether use safety to discard unneccesary calls to navigator + /** + * Helper method to report movement (likely of initial point). + */ + void ReportMove( const G4ThreeVector& OldV, + const G4ThreeVector& NewV, + const G4String& Quantity ) const; - void ReportMove( const G4ThreeVector& OldV, - const G4ThreeVector& NewV, - const G4String& Quantity ) const; - // Helper method to report movement (likely of initial point) + private: - protected: + // ---------------------------------------------------------------------- + // DATA Members + // ---------------------------------------------------------------------- - G4PathFinder(); // Singleton + /** Object that enables G4PropagatorInField to see many geometries. */ + G4MultiNavigator* fpMultiNavigator; - inline G4Navigator* GetNavigator(G4int n) const; + G4int fNoActiveNavigators = 0; + G4bool fNewTrack = false; // Flag a new track (ensure first step) - private: + static const G4int fMaxNav = 16; - // ---------------------------------------------------------------------- - // DATA Members - // ---------------------------------------------------------------------- + // Global state (retained during stepping for one track) - G4MultiNavigator* fpMultiNavigator; - // Object that enables G4PropagatorInField to see many geometries + G4Navigator* fpNavigator[fMaxNav]; - G4int fNoActiveNavigators = 0; - G4bool fNewTrack = false; // Flag a new track (ensure first step) + // ---- State changed in a step computation + // + ELimited fLimitedStep[fMaxNav]; + G4bool fLimitTruth[fMaxNav]; + G4double fCurrentStepSize[fMaxNav]; + G4int fNoGeometriesLimiting = 0; // How many processes contribute to limit - static const G4int fMaxNav = 16; + /** Last initial position for which safety evaluated. */ + G4ThreeVector fPreSafetyLocation; + /* Corresponding value of full safety. */ + G4double fPreSafetyMinValue = -1.0; - // Global state (retained during stepping for one track) + /** Safeties for the above point. */ + G4double fPreSafetyValues[ fMaxNav ]; - G4Navigator* fpNavigator[fMaxNav]; + // This part of the state can be retained for several calls --> CARE - // State changed in a step computation + /** Point where last ComputeStep() called. */ + G4ThreeVector fPreStepLocation; + /** Corresponding value of full safety. */ + G4double fMinSafety_PreStepPt = -1.0; - ELimited fLimitedStep[fMaxNav]; - G4bool fLimitTruth[fMaxNav]; - G4double fCurrentStepSize[fMaxNav]; - G4int fNoGeometriesLimiting = 0; // How many processes contribute to limit + /** Safeties for the above point. + * @note This changes at each step, so it can differ when steps + * inside min-safety are made. */ + G4double fCurrentPreStepSafety[ fMaxNav ]; - G4ThreeVector fPreSafetyLocation; - // last initial position for which safety evaluated - G4double fPreSafetyMinValue = -1.0; - // - corresponding value of full safety - G4double fPreSafetyValues[ fMaxNav ]; - // Safeties for the above point + /** Whether PreSafety coincides with PreStep point. */ + G4bool fPreStepCenterRenewed = false; - // This part of the state can be retained for several calls --> CARE + G4double fMinStep = -1.0; // As reported by Navigators -- can be kInfinity + G4double fTrueMinStep = -1.0; // Corrected in case >= proposed - G4ThreeVector fPreStepLocation; - // point where last ComputeStep called - G4double fMinSafety_PreStepPt = -1.0; - // - corresponding value of full safety - G4double fCurrentPreStepSafety[ fMaxNav ]; - // Safeties for the above point. - // This changes at each step, so it can differ when steps - // inside min-safety are made + // ---- State after calling 'locate' + // + G4VPhysicalVolume* fLocatedVolume[fMaxNav]; + G4ThreeVector fLastLocatedPosition; - G4bool fPreStepCenterRenewed = false; - // Whether PreSafety coincides with PreStep point + // ---- State after calling 'ComputeStep' + // (other member variables will be affected) + // + G4FieldTrack fEndState; // Point, velocity, ... at proposed step end + G4bool fFieldExertedForce = false; // In current proposed step - G4double fMinStep = -1.0; // As reported by Navigators -- can be kInfinity - G4double fTrueMinStep = -1.0; // Corrected in case >= proposed + G4bool fRelocatedPoint = false; // Signals that point was or is being moved + // from the position of the last location or + // the endpoint resulting from ComputeStep() + // -- invalidates fEndState - // State after calling 'locate' - // - G4VPhysicalVolume* fLocatedVolume[fMaxNav]; - G4ThreeVector fLastLocatedPosition; + // ---- State for 'ComputeSafety' and related methods + // + /** Point where ComputeSafety() is called. */ + G4ThreeVector fSafetyLocation; + /** Corresponding value of safety. */ + G4double fMinSafety_atSafLocation = -1.0; + /** Safeties for last ComputeSafety(). */ + G4double fNewSafetyComputed[ fMaxNav ]; - // State after calling 'ComputeStep' - // (others member variables will be affected) - // - G4FieldTrack fEndState; // Point, velocity, ... at proposed step end - G4bool fFieldExertedForce = false; // In current proposed step + // ---- State for Step numbers + // + G4int fLastStepNo = -1, fCurrentStepNo = -1; - G4bool fRelocatedPoint = false; // Signals that point was or is being moved - // from the position of the last location or - // the endpoint resulting from ComputeStep() - // -- invalidates fEndState + G4int fVerboseLevel = 0; // For debugging purposes - // State for 'ComputeSafety' and related methods - // - G4ThreeVector fSafetyLocation; - // point where ComputeSafety is called - G4double fMinSafety_atSafLocation = -1.0; - // - corresponding value of safety - G4double fNewSafetyComputed[ fMaxNav ]; - // Safeties for last ComputeSafety + G4TransportationManager* fpTransportManager; // Cache for frequent use + G4PropagatorInField* fpFieldPropagator; - // State for Step numbers - // - G4int fLastStepNo = -1, fCurrentStepNo = -1; + G4double kCarTolerance; - G4int fVerboseLevel = 0; // For debugging purposes - - G4TransportationManager* fpTransportManager; // Cache for frequent use - G4PropagatorInField* fpFieldPropagator; - - G4double kCarTolerance; - - static G4ThreadLocal G4PathFinder* fpPathFinder; + static G4ThreadLocal G4PathFinder* fpPathFinder; }; // ******************************************************************** // Inline methods. // ******************************************************************** -inline G4VPhysicalVolume* G4PathFinder::GetLocatedVolume( G4int navId ) const -{ - G4VPhysicalVolume* vol = nullptr; - if( (navId < fMaxNav) && (navId >= 0) ) { vol= fLocatedVolume[navId]; } - return vol; -} - -inline G4int G4PathFinder::SetVerboseLevel(G4int newLevel) -{ - G4int old = fVerboseLevel; - fVerboseLevel = newLevel; - return old; -} - -inline G4double G4PathFinder::GetMinimumStep() const -{ - return fMinStep; -} - -inline unsigned int G4PathFinder::GetNumberGeometriesLimitingStep() const -{ - unsigned int noGeometries = fNoGeometriesLimiting; - return noGeometries; -} - -inline G4double G4PathFinder::GetCurrentSafety() const -{ - return fMinSafety_PreStepPt; -} - -inline void G4PathFinder::MovePoint() -{ - fRelocatedPoint = true; -} - -inline G4Navigator* G4PathFinder::GetNavigator(G4int n) const -{ - if( (n>fNoActiveNavigators) || (n<0) ) { n=0; } - return fpNavigator[n]; -} - -inline G4double -G4PathFinder::ObtainSafety( G4int navId, G4ThreeVector& globalCenterPoint ) -{ - globalCenterPoint = fSafetyLocation; - return fNewSafetyComputed[ navId ]; -} - -inline G4double -G4PathFinder::LastPreSafety( G4int navId, G4ThreeVector& globalCenterPoint, - G4double& minSafety ) -{ - globalCenterPoint = fPreSafetyLocation; - minSafety = fPreSafetyMinValue; - return fPreSafetyValues[ navId ]; -} +#include "G4PathFinder.icc" #endif diff --git a/source/geometry/navigation/include/G4PathFinder.icc b/source/geometry/navigation/include/G4PathFinder.icc new file mode 100644 index 0000000000..a8601cfd2d --- /dev/null +++ b/source/geometry/navigation/include/G4PathFinder.icc @@ -0,0 +1,86 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4PathFinder inlined function members implementation +// +// Author: John Apostolakis (CERN), 7 October 2005 +// -------------------------------------------------------------------- + +inline G4VPhysicalVolume* G4PathFinder::GetLocatedVolume( G4int navId ) const +{ + G4VPhysicalVolume* vol = nullptr; + if( (navId < fMaxNav) && (navId >= 0) ) { vol= fLocatedVolume[navId]; } + return vol; +} + +inline G4int G4PathFinder::SetVerboseLevel(G4int newLevel) +{ + G4int old = fVerboseLevel; + fVerboseLevel = newLevel; + return old; +} + +inline G4double G4PathFinder::GetMinimumStep() const +{ + return fMinStep; +} + +inline unsigned int G4PathFinder::GetNumberGeometriesLimitingStep() const +{ + unsigned int noGeometries = fNoGeometriesLimiting; + return noGeometries; +} + +inline G4double G4PathFinder::GetCurrentSafety() const +{ + return fMinSafety_PreStepPt; +} + +inline void G4PathFinder::MovePoint() +{ + fRelocatedPoint = true; +} + +inline G4Navigator* G4PathFinder::GetNavigator(G4int n) const +{ + if( (n>fNoActiveNavigators) || (n<0) ) { n=0; } + return fpNavigator[n]; +} + +inline G4double +G4PathFinder::ObtainSafety( G4int navId, G4ThreeVector& globalCenterPoint ) +{ + globalCenterPoint = fSafetyLocation; + return fNewSafetyComputed[ navId ]; +} + +inline G4double +G4PathFinder::LastPreSafety( G4int navId, G4ThreeVector& globalCenterPoint, + G4double& minSafety ) +{ + globalCenterPoint = fPreSafetyLocation; + minSafety = fPreSafetyMinValue; + return fPreSafetyValues[ navId ]; +} diff --git a/source/geometry/navigation/include/G4PhantomParameterisation.hh b/source/geometry/navigation/include/G4PhantomParameterisation.hh index fa46873f94..81f820b9f4 100644 --- a/source/geometry/navigation/include/G4PhantomParameterisation.hh +++ b/source/geometry/navigation/include/G4PhantomParameterisation.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PhantomParameterisation +// G4PhantomParameterisation // // Class description: // @@ -32,11 +32,10 @@ // class must be placed inside a volume that is completely filled by these // boxes. -// History: -// - Created: P.Arce, May 2007 +// Author: Pedro Arce (CIEMAT), May 2007 //--------------------------------------------------------------------- #ifndef G4PhantomParameterisation_HH -#define G4PhantomParameterisation_HH +#define G4PhantomParameterisation_HH 1 #include @@ -65,10 +64,20 @@ class G4Hype; class G4Polycone; class G4Polyhedra; +/** + * @brief G4PhantomParameterisation describes regular parameterisations: a set + * of boxes of equal dimension in the x, y and z dimensions. + * The G4PVParameterised volume using this class must be placed inside a volume + * that is completely filled by these boxes. + */ + class G4PhantomParameterisation : public G4VPVParameterisation { public: + /** + * Constructor and Destructor. + */ G4PhantomParameterisation(); ~G4PhantomParameterisation() override; @@ -79,8 +88,9 @@ class G4PhantomParameterisation : public G4VPVParameterisation G4Material* ComputeMaterial(const G4int repNo, G4VPhysicalVolume* currentVol, const G4VTouchable* parentTouch=nullptr) override; - // Dummy declarations ... - + /** + * Dummy declarations ... + */ void ComputeDimensions (G4Box &, const G4int, const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&, const G4int, @@ -108,17 +118,22 @@ class G4PhantomParameterisation : public G4VPVParameterisation void ComputeDimensions (G4Polyhedra&, const G4int, const G4VPhysicalVolume*) const override {} + /** + * Saves as container solid the parent of the voxels. + * Checks that the voxels fill it completely. + */ void BuildContainerSolid( G4VPhysicalVolume* pPhysicalVol ); void BuildContainerSolid( G4VSolid* pMotherSolid ); - // Save as container solid the parent of the voxels. Check that the - // voxels fill it completely. + + /** + * Gets the voxel number corresponding to the point in the container + * frame. Uses 'localDir' to avoid precision problems at the surfaces. + */ virtual G4int GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ); - // Get the voxel number corresponding to the point in the container - // frame. Use 'localDir' to avoid precision problems at the surfaces. - // Set and Get methods + /** Set and Get methods */ inline void SetMaterials(std::vector& mates ); @@ -150,47 +165,56 @@ class G4PhantomParameterisation : public G4VPVParameterisation G4Material* GetMaterial( std::size_t nx, std::size_t ny, std::size_t nz) const; G4Material* GetMaterial( std::size_t copyNo ) const; + /** + * Checks that the voxels fill it completely. + */ void CheckVoxelsFillContainer( G4double contX, G4double contY, G4double contZ ) const; - // Check that the voxels fill it completely. private: + /** + * Converts the copyNo to voxel numbers in x, y and z. + */ void ComputeVoxelIndices(const G4int copyNo, std::size_t& nx, std::size_t& ny, std::size_t& nz ) const; - // Convert the copyNo to voxel numbers in x, y and z. + /** + * Checks that the copy number is within limits. + */ void CheckCopyNo( const G4long copyNo ) const; - // Check that the copy number is within limits. protected: + /** Half dimension of voxels (assume they are boxes). */ G4double fVoxelHalfX = 0.0, fVoxelHalfY = 0.0, fVoxelHalfZ = 0.0; - // Half dimension of voxels (assume they are boxes). + + /** Number of voxel in x, y and z dimensions. */ std::size_t fNoVoxelsX = 0, fNoVoxelsY = 0, fNoVoxelsZ = 0; - // Number of voxel in x, y and z dimensions. + + /** Number of voxels in x times number of voxels in y (for speed-up). */ std::size_t fNoVoxelsXY = 0; - // Number of voxels in x times number of voxels in y (for speed-up). + + /** Total number of voxels (for speed-up). */ std::size_t fNoVoxels = 0; - // Total number of voxels (for speed-up). + /** List of materials of the voxels. */ std::vector fMaterials; - // List of materials of the voxels. + + /** Index in fMaterials that correspond to each voxel. */ std::size_t* fMaterialIndices = nullptr; - // Index in fMaterials that correspond to each voxel. + /** Saves as container solid the parent of the voxels. */ G4VSolid* fContainerSolid = nullptr; - // Save as container solid the parent of the voxels. - // Check that the voxels fill it completely. + /** Save position of container wall for speed-up. */ G4double fContainerWallX=0.0, fContainerWallY=0.0, fContainerWallZ=0.0; - // Save position of container wall for speed-up. + /** Relative surface tolerance. */ G4double kCarTolerance; - // Relative surface tolerance. + /** Flag to skip surface when two voxel have same material or not. */ G4bool bSkipEqualMaterials = true; - // Flag to skip surface when two voxel have same material or not }; #include "G4PhantomParameterisation.icc" diff --git a/source/geometry/navigation/include/G4PhantomParameterisation.icc b/source/geometry/navigation/include/G4PhantomParameterisation.icc index 05a697df5d..66e5834de1 100644 --- a/source/geometry/navigation/include/G4PhantomParameterisation.icc +++ b/source/geometry/navigation/include/G4PhantomParameterisation.icc @@ -25,7 +25,9 @@ // // class G4PhantomParameterisation Inline implementation // -//-------------------------------------------------------------------- +// Author: Pedro Arce (CIEMAT), May 2007 +//--------------------------------------------------------------------- + inline void G4PhantomParameterisation:: SetVoxelDimensions( G4double halfx, G4double halfy, G4double halfz ) @@ -36,7 +38,7 @@ SetVoxelDimensions( G4double halfx, G4double halfy, G4double halfz ) } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline void G4PhantomParameterisation::SetNoVoxels( std::size_t nx, std::size_t ny, @@ -49,98 +51,98 @@ void G4PhantomParameterisation::SetNoVoxels( std::size_t nx, fNoVoxels = nx*ny*nz; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline void G4PhantomParameterisation::SetMaterials( std::vector& mates ) { fMaterials = mates; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline void G4PhantomParameterisation::SetMaterialIndices( std::size_t* matInd ) { fMaterialIndices = matInd; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline G4double G4PhantomParameterisation::GetVoxelHalfX() const { return fVoxelHalfX; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline G4double G4PhantomParameterisation::GetVoxelHalfY() const { return fVoxelHalfY; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline G4double G4PhantomParameterisation::GetVoxelHalfZ() const { return fVoxelHalfZ; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::size_t G4PhantomParameterisation::GetNoVoxelsX() const { return fNoVoxelsX; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::size_t G4PhantomParameterisation::GetNoVoxelsY() const { return fNoVoxelsY; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::size_t G4PhantomParameterisation::GetNoVoxelsZ() const { return fNoVoxelsZ; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::size_t G4PhantomParameterisation::GetNoVoxels() const { return fNoVoxels; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::vector G4PhantomParameterisation::GetMaterials() const { return fMaterials; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline std::size_t* G4PhantomParameterisation::GetMaterialIndices() const { return fMaterialIndices; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline G4VSolid* G4PhantomParameterisation::GetContainerSolid() const { return fContainerSolid; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline G4bool G4PhantomParameterisation::SkipEqualMaterials() const { return bSkipEqualMaterials; } -//-------------------------------------------------------------------- +//--------------------------------------------------------------------- inline void G4PhantomParameterisation::SetSkipEqualMaterials( G4bool skip ) { diff --git a/source/geometry/navigation/include/G4PropagatorInField.hh b/source/geometry/navigation/include/G4PropagatorInField.hh index 70d8f79e55..205305094e 100644 --- a/source/geometry/navigation/include/G4PropagatorInField.hh +++ b/source/geometry/navigation/include/G4PropagatorInField.hh @@ -23,22 +23,21 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4PropagatorInField +// G4PropagatorInField // -// class description: +// Class description: // // This class performs the navigation/propagation of a particle/track // in a magnetic field. The field is in general non-uniform. // For the calculation of the path, it relies on the class G4ChordFinder. +// It utilises an ODE solver (with the Runge-Kutta method) to evolve the +// particle, and drives it until the particle has traveled a set distance +// or it enters a new volume. -// History: -// ------- -// 25.10.96 John Apostolakis, design and implementation -// 25.03.97 John Apostolakis, adaptation for G4Transportation and cleanup -// 8.11.02 John Apostolakis, changes to enable use of safety in intersecting +// Author: John Apostolakis (CERN), 25 October 1996 // --------------------------------------------------------------------------- #ifndef G4PropagatorInField_hh -#define G4PropagatorInField_hh 1 +#define G4PropagatorInField_hh 1 #include "G4Types.hh" @@ -54,268 +53,372 @@ class G4Navigator; class G4VPhysicalVolume; class G4VCurvedTrajectoryFilter; +/** + * @brief G4PropagatorInField performs the navigation/propagation of a + * particle/track in a magnetic field. The field is in general non-uniform. + * For the calculation of the path, it relies on the class G4ChordFinder. + * It utilises an ODE solver (with the Runge-Kutta method) to evolve the + * particle, and drives it until the particle has traveled a set distance + * or it enters a new volume. + */ + class G4PropagatorInField { + public: - public: // with description + /** + * Constructor and Destructor. + */ + G4PropagatorInField( G4Navigator* theNavigator, + G4FieldManager* detectorFieldMgr, + G4VIntersectionLocator* vLocator = nullptr ); + ~G4PropagatorInField(); - G4PropagatorInField( G4Navigator* theNavigator, - G4FieldManager* detectorFieldMgr, - G4VIntersectionLocator* vLocator = nullptr ); - ~G4PropagatorInField(); + /** + * Computes the next geometric Step. + * @param[in,out] pFieldTrack Field track to be filled. + * @param[in] pCurrentProposedStepLength Current proposed step length. + * @param[in,out] pNewSafety New safety. + * @param[in] pPhysVol Pointer to the current volume. + * @param[in] canRelaxDeltaChord To enable relaxing delta-chord parameter. + * @returns Step length. + */ + G4double ComputeStep( G4FieldTrack& pFieldTrack, + G4double pCurrentProposedStepLength, + G4double& pNewSafety, + G4VPhysicalVolume* pPhysVol = nullptr, + G4bool canRelaxDeltaChord = false); - G4double ComputeStep( G4FieldTrack& pFieldTrack, - G4double pCurrentProposedStepLength, - G4double& pNewSafety, - G4VPhysicalVolume* pPhysVol = nullptr, - G4bool canRelaxDeltaChord = false); - // Compute the next geometric Step + /** + * Returning the state after the Step. + */ + inline G4ThreeVector EndPosition() const; + inline G4ThreeVector EndMomentumDir() const; + inline G4bool IsParticleLooping() const; - inline G4ThreeVector EndPosition() const; - inline G4ThreeVector EndMomentumDir() const; - inline G4bool IsParticleLooping() const; - // Return the state after the Step + /** + * Returning the relative accuracy for the current Step. + */ + inline G4double GetEpsilonStep() const; - inline G4double GetEpsilonStep() const; - // Relative accuracy for current Step (Calc.) - inline void SetEpsilonStep(G4double newEps); - // The ratio DeltaOneStep()/h_current_step + /** + * Setting the relative accuracy for the current Step. + * The ratio DeltaOneStep()/h_current_step. + */ + inline void SetEpsilonStep(G4double newEps); - G4FieldManager* FindAndSetFieldManager(G4VPhysicalVolume* pCurrentPhysVol); - // Set (and return) the correct field manager (global or local), - // if it exists. - // Should be called before ComputeStep is called; - // Currently, ComputeStep will call it, if it has not been called. + /** + * Sets (and returns) the correct field manager (global or local), + * if it exists. + * @note Should be called before ComputeStep is called; + * Currently, ComputeStep() will call it, if it has not been called. + * @param[in] pCurrentPhysVol Pointer to the current volume. + * @returns The pointer to the field manager. + */ + G4FieldManager* FindAndSetFieldManager(G4VPhysicalVolume* pCurrentPhysVol); - inline G4ChordFinder* GetChordFinder(); + /** + * Returning the pointer to the chord finder. + */ + inline G4ChordFinder* GetChordFinder(); - G4int SetVerboseLevel( G4int verbose ); - inline G4int GetVerboseLevel() const; - inline G4int Verbose() const; - inline void CheckMode(G4bool mode); + /** + * Verbosity control. + */ + G4int SetVerboseLevel( G4int verbose ); + inline G4int GetVerboseLevel() const; + inline G4int Verbose() const; - inline void SetVerboseTrace( G4bool enable ); - inline G4bool GetVerboseTrace(); - // Tracing key parts of Compute Step + /** + * Enabling check mode for further diagnostics. + */ + inline void CheckMode(G4bool mode); + + /** + * Accessor/modifier for tracing key parts of ComputeStep(). + */ + inline void SetVerboseTrace( G4bool enable ); + inline G4bool GetVerboseTrace(); - inline G4int GetMaxLoopCount() const; - inline void SetMaxLoopCount( G4int new_max ); - // A maximum for the number of substeps that a particle can take. - // Above this number it is signaled as 'looping'. + /** + * Accessor/modifier for controlling the maximum for the number of + * substeps that a particle can take. Above this number it is signaled + * as 'looping'. + */ + inline G4int GetMaxLoopCount() const; + inline void SetMaxLoopCount( G4int new_max ); - void printStatus( const G4FieldTrack& startFT, - const G4FieldTrack& currentFT, - G4double requestStep, - G4double safety, - G4int step, - G4VPhysicalVolume* startVolume); - // Print Method - useful mostly for debugging. + /** + * Print method, useful mostly for debugging. + */ + void printStatus( const G4FieldTrack& startFT, + const G4FieldTrack& currentFT, + G4double requestStep, + G4double safety, + G4int step, + G4VPhysicalVolume* startVolume); - inline G4FieldTrack GetEndState() const; + /** + * Accessor for retrieving the field track. + */ + inline G4FieldTrack GetEndState() const; - inline G4double GetMinimumEpsilonStep() const; // Min for relative accuracy - inline void SetMinimumEpsilonStep( G4double newEpsMin ); // of any step - inline G4double GetMaximumEpsilonStep() const; - inline void SetMaximumEpsilonStep( G4double newEpsMax ); - // The 4 above methods are now obsolescent but *for now* will work - // They are being replaced by same-name methods in G4FieldManager, - // allowing the specialisation in different volumes. - // Their new behaviour is to change the values for the global field - // manager + /** + * Methods to control values for the global field manager. + * @deprecated The four methods below are now obsolescent but *for now* + * will work. They are being replaced by same-name methods in + * G4FieldManager, allowing the specialisation in different volumes. + */ + inline G4double GetMinimumEpsilonStep() const; // Min for relative accuracy + inline void SetMinimumEpsilonStep( G4double newEpsMin ); // of any step + inline G4double GetMaximumEpsilonStep() const; + inline void SetMaximumEpsilonStep( G4double newEpsMax ); - void SetLargestAcceptableStep( G4double newBigDist ); - G4double GetLargestAcceptableStep(); - void ResetLargestAcceptableStep(); - // Obtain / change the size of the largest step the method will undertake - // Reset method uses the world volume's + /** + * Methods to obtain / change the size of the largest step the method + * will undertake. The Reset method uses the world volume's. + */ + void SetLargestAcceptableStep( G4double newBigDist ); + G4double GetLargestAcceptableStep(); + void ResetLargestAcceptableStep(); - G4double GetMaxStepSizeMultiplier(); - void SetMaxStepSizeMultiplier(G4double vm); - // Control extra Multiplier parameter for limiting long steps. - G4double GetMinBigDistance(); - void SetMinBigDistance(G4double val); - // Control minimum 'directional' distance in case of too-large step + /** + * Methods to control extra Multiplier parameter for limiting long steps. + */ + G4double GetMaxStepSizeMultiplier(); + void SetMaxStepSizeMultiplier(G4double vm); - void SetTrajectoryFilter(G4VCurvedTrajectoryFilter* filter); - // Set the filter that examines & stores 'intermediate' - // curved trajectory points. Currently only position is stored. + /** + * Methods to Control minimum 'directional' distance in case of + * too-large step. + */ + G4double GetMinBigDistance(); + void SetMinBigDistance(G4double val); - std::vector* GimmeTrajectoryVectorAndForgetIt() const; - // Access the points which have passed by the filter. - // Responsibility for deleting the points lies with the client. - // This method MUST BE called exactly ONCE per step. + /** + * Sets the filter that examines & stores 'intermediate' + * curved trajectory points. + * @note Currently only position is stored. + */ + void SetTrajectoryFilter(G4VCurvedTrajectoryFilter* filter); - void ClearPropagatorState(); - // Clear all the State of this class and its current associates - // --> the current field manager & chord finder will also be called + /** + * Accesses the points which have passed by the filter. + * @note Responsibility for deleting the points lies with the client. + * This method MUST BE called exactly ONCE per step. + */ + std::vector* GimmeTrajectoryVectorAndForgetIt() const; - inline void SetDetectorFieldManager( G4FieldManager* newGlobalFieldManager ); - // Update this (dangerous) state -- for the time being + /** + * Clears the State of this class and its current associates. + * @note The current field manager & chord finder will also be called. + */ + void ClearPropagatorState(); + + /** + * Setter for global field manager. Updates the state. + */ + inline void SetDetectorFieldManager( G4FieldManager* newGlobalFieldManager ); - inline void SetUseSafetyForOptimization( G4bool ); - inline G4bool GetUseSafetyForOptimization(); - // Toggle & view parameter for using safety to discard - // unneccesary calls to navigator (thus 'optimising' performance) - inline G4bool IntersectChord( const G4ThreeVector& StartPointA, - const G4ThreeVector& EndPointB, - G4double& NewSafety, - G4double& LinearStepLength, - G4ThreeVector& IntersectionPoint); - // Intersect the chord from StartPointA to EndPointB - // and return whether an intersection occurred - // NOTE: Safety is changed! + /** + * Toggles & views parameter for using safety to discard unneccesary calls + * to the navigator (thus 'optimising' performance). + */ + inline void SetUseSafetyForOptimization( G4bool ); + inline G4bool GetUseSafetyForOptimization(); - inline G4bool IsFirstStepInVolume(); - inline G4bool IsLastStepInVolume(); - inline void PrepareNewTrack(); - - inline G4VIntersectionLocator* GetIntersectionLocator(); - inline void SetIntersectionLocator(G4VIntersectionLocator* pLocator ); - // Change or get the object which calculates the exact - // intersection point with the next boundary + /** + * Intersects the chord from StartPointA to EndPointB and returns + * whether an intersection occurred. + * @note Safety is changed! + */ + inline G4bool IntersectChord( const G4ThreeVector& StartPointA, + const G4ThreeVector& EndPointB, + G4double& NewSafety, + G4double& LinearStepLength, + G4ThreeVector& IntersectionPoint); - inline G4int GetIterationsToIncreaseChordDistance() const; - inline void SetIterationsToIncreaseChordDistance(G4int numIters); - // Control the parameter which enables the temporary 'relaxation' - // which ensures that chord segments are short enough so that - // their sagitta is small than delta-chord parameter. - // The Set method increases the value of delta-chord temporarily, - // doubling it once the number of iterations substeps reach - // value of 'IncreaseChordDistanceThreshold'. It is also doubled - // again every time the iteration count reaches a multiple of this - // value. - // Note: delta-chord is reset to its original value at the end of - // each call to ComputeStep. + /** + * Returns if it is the first step in the volume. + */ + inline G4bool IsFirstStepInVolume(); - public: // without description + /** + * Returns if it is the last step in the volume. + */ + inline G4bool IsLastStepInVolume(); - inline G4double GetDeltaIntersection() const; - inline G4double GetDeltaOneStep() const; + /** + * Initialises track flags. + */ + inline void PrepareNewTrack(); - inline G4FieldManager* GetCurrentFieldManager(); - inline G4EquationOfMotion* GetCurrentEquationOfMotion(); - // Auxiliary methods - their results can/will change during propagation + /** + * Changes or gets the object which calculates the exact intersection + * point with the next boundary. + */ + inline G4VIntersectionLocator* GetIntersectionLocator(); + inline void SetIntersectionLocator(G4VIntersectionLocator* pLocator ); - inline void SetNavigatorForPropagating(G4Navigator* SimpleOrMultiNavigator); - inline G4Navigator* GetNavigatorForPropagating(); + /** + * Controls the parameter which enables the temporary 'relaxation' which + * ensures that chord segments are short enough so that their sagitta is + * small than delta-chord parameter. + * The Set method increases the value of delta-chord temporarily, doubling + * it once the number of iterations substeps reach value of + * 'IncreaseChordDistanceThreshold'. It is also doubled again every time + * the iteration count reaches a multiple of this value. + * @note The delta-chord is reset to its original value at the end of + * each call to ComputeStep(). + */ + inline G4int GetIterationsToIncreaseChordDistance() const; + inline void SetIterationsToIncreaseChordDistance(G4int numIters); - inline void SetThresholdNoZeroStep( G4int noAct, - G4int noHarsh, - G4int noAbandon ); - inline G4int GetThresholdNoZeroSteps( G4int i ); + /** + * Accessors. + */ + inline G4double GetDeltaIntersection() const; + inline G4double GetDeltaOneStep() const; - inline G4double GetZeroStepThreshold(); - inline void SetZeroStepThreshold( G4double newLength ); + /** + * Auxiliary methods. + * @note Their results can/will change during propagation. + */ + inline G4FieldManager* GetCurrentFieldManager(); + inline G4EquationOfMotion* GetCurrentEquationOfMotion(); + + /** + * Accessor and modifier for navigator. + */ + inline void SetNavigatorForPropagating(G4Navigator* SimpleOrMultiNavigator); + inline G4Navigator* GetNavigatorForPropagating(); + + /** + * Accessors and modifiers for no-zero steps threshold. + */ + inline void SetThresholdNoZeroStep( G4int noAct, + G4int noHarsh, + G4int noAbandon ); + inline G4int GetThresholdNoZeroSteps( G4int i ); + inline G4double GetZeroStepThreshold(); + inline void SetZeroStepThreshold( G4double newLength ); - void RefreshIntersectionLocator(); - // Update the Locator with parameters from this class - // and from current field manager + /** + * Updates the Locator with parameters from this class and from current + * field manager. + */ + void RefreshIntersectionLocator(); - protected: // without description + protected: - void PrintStepLengthDiagnostic( G4double currentProposedStepLength, - G4double decreaseFactor, - G4double stepTrial, - const G4FieldTrack& aFieldTrack); + /** + * Logging methods. + */ + void PrintStepLengthDiagnostic( G4double currentProposedStepLength, + G4double decreaseFactor, + G4double stepTrial, + const G4FieldTrack& aFieldTrack); + void ReportLoopingParticle( G4int count, G4double StepTaken, + G4double stepRequest, const char* methodName, + const G4ThreeVector& momentumVec, + G4VPhysicalVolume* physVol); + void ReportStuckParticle(G4int noZeroSteps, G4double proposedStep, + G4double lastTriedStep, G4VPhysicalVolume* physVol); - void ReportLoopingParticle( G4int count, G4double StepTaken, - G4double stepRequest, const char* methodName, - const G4ThreeVector& momentumVec, - G4VPhysicalVolume* physVol); - void ReportStuckParticle(G4int noZeroSteps, G4double proposedStep, - G4double lastTriedStep, G4VPhysicalVolume* physVol); + private: - private: + // ---------------------------------------------------------------------- + // DATA Members + // ---------------------------------------------------------------------- - // ---------------------------------------------------------------------- - // DATA Members - // ---------------------------------------------------------------------- + // ================================================================== + // INVARIANTS - Must not change during tracking - // ================================================================== - // INVARIANTS - Must not change during tracking + // ** PARAMETERS ----------- + G4int fMax_loop_count = 1000; + // Limit for the number of sub-steps taken in one call to ComputeStep + G4int fIncreaseChordDistanceThreshold = 100; + G4bool fUseSafetyForOptimisation = true; + // (false) is less sensitive to incorrect safety - // ** PARAMETERS ----------- - G4int fMax_loop_count = 1000; - // Limit for the number of sub-steps taken in one call to ComputeStep - G4int fIncreaseChordDistanceThreshold = 100; - G4bool fUseSafetyForOptimisation = true; - // (false) is less sensitive to incorrect safety + // Thresholds for identifying "abnormal" cases - which cause looping + // + G4int fActionThreshold_NoZeroSteps = 2; // Threshold # - above it act + G4int fSevereActionThreshold_NoZeroSteps = 10; // Threshold # to act harshly + G4int fAbandonThreshold_NoZeroSteps = 50; // Threshold # to abandon + G4double fZeroStepThreshold = 0.0; + // Threshold *length* for counting of tiny or 'zero' steps - // Thresholds for identifying "abnormal" cases - which cause looping - // - G4int fActionThreshold_NoZeroSteps = 2; // Threshold # - above it act - G4int fSevereActionThreshold_NoZeroSteps = 10; // Threshold # to act harshly - G4int fAbandonThreshold_NoZeroSteps = 50; // Threshold # to abandon - G4double fZeroStepThreshold = 0.0; - // Threshold *length* for counting of tiny or 'zero' steps + // Parameters related to handling of very large steps which + // occur typically in large volumes with vacuum or very thin gas + // + G4double fLargestAcceptableStep; + // Maximum size of a step - for optimization (and to avoid problems) + G4double fMaxStepSizeMultiplier = 3; + // Multiplier for directional exit distance used as extra long-step limit + G4double fMinBigDistance= 100. ; // * CLHEP::mm + // Minimum distance added to directional exit distance + // ** End of PARAMETERS ----- - // Parameters related to handling of very large steps which - // occur typically in large volumes with vacuum or very thin gas - G4double fLargestAcceptableStep; - // Maximum size of a step - for optimization (and to avoid problems) - G4double fMaxStepSizeMultiplier = 3; - // Multiplier for directional exit distance used as extra long-step limit - G4double fMinBigDistance= 100. ; // * CLHEP::mm - // Minimum distance added to directional exit distance - // ** End of PARAMETERS ----- + G4double kCarTolerance; + // Geometrical tolerance defining surface thickness - G4double kCarTolerance; - // Geometrical tolerance defining surface thickness + G4bool fAllocatedLocator; // Book-keeping - G4bool fAllocatedLocator; // Book-keeping + // -------------------------------------------------------- + // ** Dependent Objects - to which work is delegated - // -------------------------------------------------------- - // ** Dependent Objects - to which work is delegated + G4FieldManager* fDetectorFieldMgr; + // The Field Manager of the whole Detector. (default) - G4FieldManager* fDetectorFieldMgr; - // The Field Manager of the whole Detector. (default) + G4VIntersectionLocator* fIntersectionLocator; + // Refines candidate intersection - G4VIntersectionLocator* fIntersectionLocator; - // Refines candidate intersection + G4VCurvedTrajectoryFilter* fpTrajectoryFilter = nullptr; + // The filter encapsulates the algorithm which selects which + // intermediate points should be stored in a trajectory. + // When it is NULL, no intermediate points will be stored. + // Else PIF::ComputeStep must submit (all) intermediate + // points it calculates, to this filter. (jacek 04/11/2002) - G4VCurvedTrajectoryFilter* fpTrajectoryFilter = nullptr; - // The filter encapsulates the algorithm which selects which - // intermediate points should be stored in a trajectory. - // When it is NULL, no intermediate points will be stored. - // Else PIF::ComputeStep must submit (all) intermediate - // points it calculates, to this filter. (jacek 04/11/2002) + G4Navigator* fNavigator; + // Set externally - only by tracking / run manager + // + // ** End of Dependent Objects ---------------------------- - G4Navigator* fNavigator; - // Set externally - only by tracking / run manager - // - // ** End of Dependent Objects ---------------------------- + // End of INVARIANTS + // ================================================================== - // End of INVARIANTS - // ================================================================== + // STATE information + // ----------------- + G4FieldManager* fCurrentFieldMgr; + // The Field Manager of the current volume (may be the global) + G4bool fSetFieldMgr = false; // Has it been set for the current step? - // STATE information - // ----------------- - G4FieldManager* fCurrentFieldMgr; - // The Field Manager of the current volume (may be the global) - G4bool fSetFieldMgr = false; // Has it been set for the current step? + // Parameters of current step + // + G4double fEpsilonStep; // Relative accuracy of current Step + G4FieldTrack End_PointAndTangent; // End point storage + G4bool fParticleIsLooping = false; + G4int fNoZeroStep = 0; // Count of zero Steps - // Parameters of current step - G4double fEpsilonStep; // Relative accuracy of current Step - G4FieldTrack End_PointAndTangent; // End point storage - G4bool fParticleIsLooping = false; - G4int fNoZeroStep = 0; // Count of zero Steps + // State used for Optimisation + // + G4double fFull_CurveLen_of_LastAttempt = -1; + G4double fLast_ProposedStepLength = -1; + // Previous step information -- for use in adjust step size + G4ThreeVector fPreviousSftOrigin; + G4double fPreviousSafety = 0.0; + // Last safety origin & value: for optimisation - // State used for Optimisation - G4double fFull_CurveLen_of_LastAttempt = -1; - G4double fLast_ProposedStepLength = -1; - // Previous step information -- for use in adjust step size - G4ThreeVector fPreviousSftOrigin; - G4double fPreviousSafety = 0.0; - // Last safety origin & value: for optimisation + G4int fVerboseLevel = 0; + G4bool fVerbTracePiF = false; + G4bool fCheck = false; + // For debugging purposes - G4int fVerboseLevel = 0; - G4bool fVerbTracePiF = false; - G4bool fCheck = false; - // For debugging purposes - - G4bool fFirstStepInVolume = true; - G4bool fLastStepInVolume = true; - G4bool fNewTrack = true; + G4bool fFirstStepInVolume = true; + G4bool fLastStepInVolume = true; + G4bool fNewTrack = true; }; // Inline methods diff --git a/source/geometry/navigation/include/G4PropagatorInField.icc b/source/geometry/navigation/include/G4PropagatorInField.icc index d9bdaa62a1..04542b4096 100644 --- a/source/geometry/navigation/include/G4PropagatorInField.icc +++ b/source/geometry/navigation/include/G4PropagatorInField.icc @@ -23,15 +23,14 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PropagatorInField Inline implementation +// Class G4PropagatorInField Inline implementation // // To create an object of this type, must have: // - an object that calculates the Curved paths // - the navigator to find (linear) intersections // - and also must know the value of the maximum displacement allowed // -// 25.10.96 John Apostolakis, design and implementation -// 25.03.97 John Apostolakis, adaptation for G4Transportation and cleanup +// Author: John Apostolakis (CERN), 25 October 1996 // ------------------------------------------------------------------------ // ------------------------------------------------------------------------ diff --git a/source/geometry/navigation/include/G4RegularNavigation.hh b/source/geometry/navigation/include/G4RegularNavigation.hh index 95047cf1d5..378a52d57f 100644 --- a/source/geometry/navigation/include/G4RegularNavigation.hh +++ b/source/geometry/navigation/include/G4RegularNavigation.hh @@ -23,19 +23,18 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4RegularNavigation +// G4RegularNavigation // // Class description: // // Utility for fast navigation in volumes containing a regular // parameterisation. If two contiguous voxels have the same material, -// navigation does not stop at the surface +// navigation does not stop at the surface. -// History: -// - Created. P. Arce, May 2007 +// Author: Pedro Arce (CIEMAT), May 2007 // -------------------------------------------------------------------- #ifndef G4RegularNavigation_HH -#define G4RegularNavigation_HH +#define G4RegularNavigation_HH 1 #include @@ -48,13 +47,33 @@ class G4VPhysicalVolume; class G4Navigator; class G4NavigationHistory; +/** + * @brief G4RegularNavigation is a concrete utility class for fast navigation + * in volumes containing a regular parameterisation. If two contiguous voxels + * have the same material, navigation does not stop at the surface. + */ + class G4RegularNavigation : public G4VNavigation { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4RegularNavigation(); ~G4RegularNavigation() override; + /** + * Locates a point using its position with respect to regular + * parameterisation container volume. + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked replica volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Global direction vector. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ G4bool LevelLocate( G4NavigationHistory& history, const G4VPhysicalVolume* blockedVol, const G4int blockedNum, @@ -62,11 +81,15 @@ class G4RegularNavigation : public G4VNavigation const G4ThreeVector* globalDirection, const G4bool pLocatedOnEdge, G4ThreeVector& localPoint ) final; - // Locate point using its position with respect to regular - // parameterisation container volume. - G4double ComputeStep( const G4ThreeVector& globalPoint, - const G4ThreeVector& globalDirection, + /** + * Method never called because to be called the daughter has to be a + * 'regular' volume. This would only happen if the track is in the + * mother of voxels volume. But the voxels fill completely their mother, + * so when a track enters the mother it automatically enters a voxel. + */ + G4double ComputeStep( const G4ThreeVector& localPoint, + const G4ThreeVector& localDirection, const G4double currentProposedStepLength, G4double& newSafety, G4NavigationHistory& history, @@ -76,14 +99,32 @@ class G4RegularNavigation : public G4VNavigation G4bool& entering, G4VPhysicalVolume *(*pBlockedPhysical), G4int& blockedReplicaNo ) final; - // Method never called because to be called the daughter has to be a - // 'regular' volume. This would only happen if the track is in the - // mother of voxels volume. But the voxels fill completely their mother, - // so when a track enters the mother it automatically enters a voxel. + /** + * Computes the step skipping surfaces when they separate voxels with + * equal materials. Loops to voxels until a different material is found: + * invokes G4NormalNavigation::ComputeStep() in each voxel and moves the + * point to the next voxel. + * @param[in] localPoint Local point. + * @param[in] localDirection Local direction vector. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @param[in] pCurrentPhysical Pointer to current volume. + * @returns Length from current point to next boundary surface along + * the direction. + */ G4double ComputeStepSkippingEqualMaterials( G4ThreeVector& localPoint, - const G4ThreeVector& globalDirection, + const G4ThreeVector& localDirection, const G4double currentProposedStepLength, G4double& newSafety, G4NavigationHistory& history, @@ -94,40 +135,48 @@ class G4RegularNavigation : public G4VNavigation G4VPhysicalVolume *(*pBlockedPhysical), G4int& blockedReplicaNo, G4VPhysicalVolume* pCurrentPhysical); - // Compute the step skipping surfaces when they separate voxels with - // equal materials. Loop to voxels until a different material is found: - // invokes G4NormalNavigation::ComputeStep() in each voxel and move the - // point to the next voxel. + /** + * Method never called because to be called the daughter has to be a + * 'regular' volume. This would only happen if the track is in the + * mother of voxels volume. But the voxels fill completely their mother, + * so when a track enters the mother it automatically enters a voxel. + */ G4double ComputeSafety( const G4ThreeVector& localPoint, const G4NavigationHistory& history, const G4double pProposedMaxLength = DBL_MAX ) final; - // Method never called because to be called the daughter has to be a - // 'regular' volume. This would only happen if the track is in the - // mother of voxels volume. But the voxels fill completely their mother, - // so when a track enters the mother it automatically enters a voxel. - public: // without description - - void SetNormalNavigation( G4NormalNavigation* fnormnav ) - { fnormalNav = fnormnav; } + /** + * Setter for normal navigation. + */ + void SetNormalNavigation( G4NormalNavigation* fnormnav ); private: + /** Cached pointer to normal navigation. */ G4NormalNavigation* fnormalNav = nullptr; - G4double kCarTolerance; + + /** Surface tolerance. */ + G4double kCarTolerance; + + /** Cached minimum step. */ G4double fMinStep; + /** Whether the last ComputeStep moved Zero. Used to check for edges. */ G4bool fLastStepWasZero = false; - // Whether the last ComputeStep moved Zero. Used to check for edges. + + /** Number of preceding moves that were 0. Reset to 0 after finite step. */ G4int fNumberZeroSteps = 0; - // Number of preceding moves that were Zero. Reset to 0 after finite step + + /** After this many failed/zero steps, act (push etc). */ G4int fActionThreshold_NoZeroSteps = 2; - // After this many failed/zero steps, act (push etc) + + /** After this many failed/zero steps, abandon track. */ G4int fAbandonThreshold_NoZeroSteps = 25; - // After this many failed/zero steps, abandon track + + /** Maximum number of steps a track can travel skipping voxels + (if there are more, track is assumed to be stuck and it is killed). */ G4int fNoStepsAllowed = 10000; - // Maximum number of steps a track can travel skipping voxels (if there are more, track is assumed to be stuck and it is killed) }; #endif diff --git a/source/geometry/navigation/include/G4RegularNavigationHelper.hh b/source/geometry/navigation/include/G4RegularNavigationHelper.hh index 7165cc1aad..76b7876c83 100644 --- a/source/geometry/navigation/include/G4RegularNavigationHelper.hh +++ b/source/geometry/navigation/include/G4RegularNavigationHelper.hh @@ -23,43 +23,76 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4RegularNavigationHelper +// G4RegularNavigationHelper // // Class description: // // Utility class for navigation on regular structures, providing step // lengths counting for each regular voxel of the structure. -// Author: Pedro Arce, November 2008 +// Author: Pedro Arce (CIEMAT), November 2008 // -------------------------------------------------------------------- #ifndef G4RegularNavigationHelper_HH -#define G4RegularNavigationHelper_HH +#define G4RegularNavigationHelper_HH 1 #include + #include "globals.hh" #include "G4ThreadLocalSingleton.hh" using G4RegularNavigationHelper_theStepLengths_t = std::vector< std::pair >; +/** + * @brief G4RegularNavigationHelper is a singleton utility class for navigation + * on regular structures, providing step lengths counting for each regular voxel + * of the structure. + */ + class G4RegularNavigationHelper { friend class G4ThreadLocalSingleton; public: + /** + * Singleton instance accessor. + */ static G4RegularNavigationHelper* Instance(); - ~G4RegularNavigationHelper(); - - void ClearStepLengths(); - void AddStepLength( G4int copyNo, G4double slen ); - const std::vector< std::pair > & GetStepLengths(); - std::vector< std::pair > theStepLengths; + /** + * Default Destructor. + */ + ~G4RegularNavigationHelper() = default; + + /** + * Resets the state. + */ + void ClearStepLengths(); + + /** + * Stores step in container, associated to given voxel. + * @param[in] copyNo Voxel number. + * @param[in] slen Value of step length to store. + */ + void AddStepLength( G4int copyNo, G4double slen ); + + /** + * Returns the collection of stored steps per voxels. + */ + const std::vector< std::pair > & GetStepLengths(); private: - G4RegularNavigationHelper(); + /** + * Private default Constructor. + */ + G4RegularNavigationHelper() = default; + + private: + + /** The collection of steps associated to voxels. */ + std::vector< std::pair > theStepLengths; }; #endif diff --git a/source/geometry/navigation/include/G4ReplicaNavigation.hh b/source/geometry/navigation/include/G4ReplicaNavigation.hh index 78c16c47cb..88a5196f88 100644 --- a/source/geometry/navigation/include/G4ReplicaNavigation.hh +++ b/source/geometry/navigation/include/G4ReplicaNavigation.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ReplicaNavigation +// G4ReplicaNavigation // // Class description: // @@ -31,11 +31,10 @@ // volume for which voxels for the replicated volumes have been constructed. // [Voxels MUST be along one axis only: NOT refined] -// History: -// - Created: Paul Kent, Aug 96 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #ifndef G4REPLICANAVIGATION_HH -#define G4REPLICANAVIGATION_HH +#define G4REPLICANAVIGATION_HH 1 #include @@ -54,12 +53,13 @@ class G4VSolid; struct G4ExitNormal { - // Bucket to hold value of Normal (3-vector), - // bools for calculated and leave-behind or 'validConvex', - // and exiting side. + /** + * @brief G4ExitNormal, a bucket to hold value of Normal (3-vector), Booleans + * for calculated and leave-behind or 'validConvex', and exiting side.. + */ + /** Identity of 'Side' of Replicas. Used by DistanceToOut methods. */ enum ESide {kNull,kRMin,kRMax,kSPhi,kEPhi,kPX,kMX,kPY,kMY,kPZ,kMZ,kMother}; - // Identity of 'Side' of Replicas. Used by DistanceToOut methods. G4ThreeVector exitNormal; G4bool calculated; // Normal @@ -75,13 +75,35 @@ struct G4ExitNormal { exitNormal= norm; calculated= calc; validConvex=valid; exitSide=side;} }; +/** + * @brief G4ReplicaNavigation is a utility class for navigation in volumes + * containing a single G4PVParameterised volume for which voxels for the + * replicated volumes have been constructed. + * @note Voxels MUST be along one axis only: NOT refined. + */ + class G4ReplicaNavigation { public: + /** + * Constructor and default Destructor. + */ G4ReplicaNavigation(); ~G4ReplicaNavigation() = default; + /** + * Searches positioned volumes in mother at current top level of @p history + * for volume containing @p globalPoint. Do not test against @p blockedVol. + * If a containing volume is found, push it onto navigation history state. + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked replica volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ inline G4bool LevelLocate( G4NavigationHistory& history, const G4VPhysicalVolume* blockedVol, const G4int blockedNum, @@ -90,6 +112,29 @@ class G4ReplicaNavigation const G4bool pLocatedOnEdge, G4ThreeVector& localPoint ); + /** + * Computes the length of a step to the next boundary. + * Do not test against @p pBlockedPhysical. Identify the next candidate + * volume (if a daughter of the current volume), and return it in: + * pBlockedPhysical, blockedReplicaNo. + * @param[in] globalPoint Global point. + * @param[in] globalDirection Global direction vector. + * @param[in] localPoint Local point. + * @param[in] localDirection Local direction vector. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @returns Length from current point to next boundary surface along + * @p localDirection. + */ G4double ComputeStep( const G4ThreeVector& globalPoint, const G4ThreeVector& globalDirection, const G4ThreeVector& localPoint, @@ -105,77 +150,157 @@ class G4ReplicaNavigation G4VPhysicalVolume* (*pBlockedPhysical), G4int &blockedReplicaNo ); + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the local/global coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] globalPoint Global point. + * @param[in] localPoint Local point. + * @param[in] history Navigation history. + * @param[in] pProposedMaxLength Maximum step length beyond which volumes + * need not be checked. + * @returns Length from current point to closest surface. + */ G4double ComputeSafety( const G4ThreeVector& globalPoint, const G4ThreeVector& localPoint, const G4NavigationHistory& history, const G4double pProposedMaxLength = DBL_MAX ) const; + /** + * Locates the specified point in the local/global coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] history Navigation history. + * @param[in] globalPoint Global point. + * @param[in] localPoint Local point. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] notKnownInside Flag to indicate whether exiting replica. + * @returns If point is located inside the current replica volume. + */ EInside BackLocate( G4NavigationHistory &history, const G4ThreeVector& globalPoint, G4ThreeVector& localPoint, const G4bool& exiting, G4bool& notKnownInside ) const; + /** + * Setups transformation and transform point into local system. + */ void ComputeTransformation( const G4int replicaNo, G4VPhysicalVolume* pVol, - G4ThreeVector& point ) const; + G4ThreeVector& point ) const; + + /** + * Setups transformation into local system. + */ void ComputeTransformation( const G4int replicaNo, G4VPhysicalVolume* pVol ) const; + /** + * Computes if local point point is inside the reference volume or not. + * @param[in] pVol Pointer to the reference volume. + * @param[in] replicaNo Replica number of current volume. + * @param[in] localPoint Point in local coordinates system. + * @returns If point is inside referenced replica volume or not. + */ EInside Inside( const G4VPhysicalVolume* pVol, const G4int replicaNo, const G4ThreeVector& localPoint ) const; + + /** + * Estimates the isotropic distance to exit the reference volume from + * the provided local point. + * @param[in] pVol Pointer to the reference volume. + * @param[in] replicaNo Replica number of current volume. + * @param[in] localPoint Point in local coordinates system. + * @returns The isotropic distance to exit. + */ G4double DistanceToOut( const G4VPhysicalVolume* pVol, const G4int replicaNo, - const G4ThreeVector &localPoint ) const; + const G4ThreeVector& localPoint ) const; + + /** + * Calculates the distance to exit the reference volume from the provided + * local point, given its direction. + * @param[in] pVol Pointer to the reference volume. + * @param[in] replicaNo Replica number of current volume. + * @param[in] localPoint Point in local coordinates system. + * @param[in] localDirection The local direction. + * @param[in,out] candidateNormal The candidate exit notmal. + * @returns The distance to exit. + */ G4double DistanceToOut( const G4VPhysicalVolume* pVol, const G4int replicaNo, const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, G4ExitNormal& candidateNormal ) const; + /** + * Verbosity control. + * @note If level>0 && G4VERBOSE, printout can occur. + */ inline G4int GetVerboseLevel() const; inline void SetVerboseLevel(G4int level); - // Get/Set Verbose(ness) level. - // [if level>0 && G4VERBOSE, printout can occur] + /** + * Run navigation in "check-mode", therefore using additional + * verifications and more strict correctness conditions. + * @note Is effective only with G4VERBOSE set. + * @param[in] mode Flag to enable/disable check-mode. + */ inline void CheckMode(G4bool mode); - // Run navigation in "check-mode", therefore using additional - // verifications and more strict correctness conditions. - // Is effective only with G4VERBOSE set. private: + /** + * Locates voxel node based on given point. + * @param[in] pHead Pointer to header of nodes to look through. + * @param[in] localPoint Local point + * @param[in] blocked Flag to indicate if volume is blocked or not. + * @returns Pointer to the node where the given point is located. + */ inline G4int VoxelLocate( const G4SmartVoxelHeader* pHead, const G4ThreeVector& localPoint, const G4int blocked=-1 ) const; + /** + * Computes distance to exit for phi replica. + */ G4double DistanceToOutPhi( const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, const G4double width, G4ExitNormal& foundNormal ) const; + /** + * Computes distance to exit for radial replica. + */ G4double DistanceToOutRad( const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, const G4double width, const G4double offset, const G4int replicaNo, G4ExitNormal& foundNormal ) const; + + /** + * Sets phi rotation of target volume. + */ inline void SetPhiTransformation( const G4double ang, - G4VPhysicalVolume* pVol=nullptr ) const; + G4VPhysicalVolume* pVol = nullptr ) const; + private: - // Invariants - unaltered during navigation + // Invariants - unaltered during navigation ------------------------------- // ********** + /** Check mode. */ G4bool fCheck = false; + + /** Verbosity. */ G4int fVerbose = 0; - // Configuration parameters + /** Local cached constants. */ G4double kCarTolerance, kRadTolerance, kAngTolerance, halfkCarTolerance, halfkRadTolerance, halfkAngTolerance, fMinStep; - // Local copy of constants }; #include "G4ReplicaNavigation.icc" diff --git a/source/geometry/navigation/include/G4ReplicaNavigation.icc b/source/geometry/navigation/include/G4ReplicaNavigation.icc index e96487d184..bdbb4b57e3 100644 --- a/source/geometry/navigation/include/G4ReplicaNavigation.icc +++ b/source/geometry/navigation/include/G4ReplicaNavigation.icc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ReplicaNavigation Inline implementation +// Class G4ReplicaNavigation inline implementations // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- // ******************************************************************** diff --git a/source/geometry/navigation/include/G4SafetyCalculator.hh b/source/geometry/navigation/include/G4SafetyCalculator.hh index 24c1ba98af..7ec4c44c44 100644 --- a/source/geometry/navigation/include/G4SafetyCalculator.hh +++ b/source/geometry/navigation/include/G4SafetyCalculator.hh @@ -27,16 +27,15 @@ // // Class description: // -// A class that provides an estimate of the isotropic safety - the -// minimum distance from a global point to the nearest boundary -// of the current volume or the nearest daughter volumes. -// This estimate can be an underestimate, either because a solid -// provides an underestimate (for speed) or in order to avoid -// substantial additional computations. -// +// A class that provides an estimate of the isotropic safety, the minimum +// distance from a global point to the nearest boundary of the current volume +// or the nearest daughter volumes. +// This estimate can be an underestimate, either because a solid provides an +// underestimate (for speed) or in order to avoid substantial additional +// computations. // Obtains from the navigator the current transformation history. -// Author: John Apostolakis, CERN - February 2023 +// Author: John Apostolakis (CERN), February 2023 // -------------------------------------------------------------------- #ifndef G4SafetyCalculator_HH #define G4SafetyCalculator_HH 1 @@ -64,38 +63,61 @@ class G4VPhysicalVolume; +/** + * @brief G4SafetyCalculator is a class that provides an estimate of the + * isotropic safety (the minimum distance from a global point to the nearest + * boundary of the current volume or the nearest daughter volumes). + */ + class G4SafetyCalculator { public: + /** + * Constructor, initialisers and setup. + */ G4SafetyCalculator( const G4Navigator& navigator, const G4NavigationHistory& navHistory ); - // Constructor - initialisers and setup. + /** + * Copy constructor & assignment operator not allowed. + */ G4SafetyCalculator(const G4SafetyCalculator&) = delete; G4SafetyCalculator& operator=(const G4SafetyCalculator&) = delete; - // Copy constructor & assignment operator not allowed. + /** + * Destructor. No actions. + */ ~G4SafetyCalculator() = default; - // Destructor. No actions. + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the global coordinate system. + * @param[in] globalPoint The point in global coordinates; it *must* be + * located exactly within the current volume (it also must + * *not* be in a daughter volume. + * @param[in] physicalVolume Current volume. + * @param[in] pProposedMaxLength The calculation will not look beyond + * the proposed maximum length to avoid extra volume safety + * calculations. + * @param[in] verbose Flag to enable verbosity (default is false). + * @returns An underestimate of the safety distance (and typically will be + * if complex volumes are involved. + */ G4double SafetyInCurrentVolume(const G4ThreeVector& globalpoint, G4VPhysicalVolume* physicalVolume, const G4double pProposedMaxLength = DBL_MAX, G4bool verbose = false ); - // Calculate the isotropic distance to the nearest boundary from the - // specified point in the global coordinate system. - // The globalpoint utilised *must* be located exactly within the - // current volume (it also must *not* be in a daughter volume). - // The value returned can be an underestimate (and typically will be - // if complex volumes are involved). - // The calculation will not look beyond the proposed maximum length - // to avoid extra volume safety calculations. The geometry must be closed. + /** + * Accessor & modifier for custom external navigation. + */ G4VExternalNavigation* GetExternalNavigation() const; void SetExternalNavigation(G4VExternalNavigation* externalNav); - // Accessor & modifier for custom external navigation. + /** + * Compares estimates of the safety, and reports if found difference(s). + */ void CompareSafetyValues( G4double oldSafety, G4double newValue, G4VPhysicalVolume* motherPhysical, @@ -104,56 +126,72 @@ class G4SafetyCalculator G4double maxLength, G4bool enteredVolume, G4bool exitedVolume ); - // Compare estimates of the safety, and report if difference(s) found. protected: + /** + * Prepare state of sub-navigators by informing them of current point. + * @param[in] pointLocal Point in local coordinates. + * @param[in] motherPhysical Pointer to current volume where to relocate + * in case an external custom navigator is used. + */ void QuickLocateWithinVolume(const G4ThreeVector& pointLocal, - G4VPhysicalVolume* motherPhysical); - // Prepare state of sub-navigators by informing them of current point. + G4VPhysicalVolume* motherPhysical); + /** + * Computes point in local coordinates system, given a position + * vector in world coordinate system. + * @param[in] rGlobPoint Point in global coordinates. + * @returns The point in local coordinates system. + */ inline G4ThreeVector ComputeLocalPoint(const G4ThreeVector& rGlobPoint) const; - // Return position vector in local coordinate system, given a position - // vector in world coordinate system. + /** + * Computes the local direction of the specified vector in the reference + * system of the volume that was found by LocateGlobalPointAndSetup(). + * @param[in] pVec Vector in global coordinates. + * @returns The local direction of the specified vector in global + * coordinates. + */ inline G4ThreeVector ComputeLocalAxis(const G4ThreeVector& pVec) const; - // Return the local direction of the specified vector in the reference - // system of the volume that was found by LocalGlobalPointAndSetup(). - // The Local Coordinates of point in world coordinate system. + /** + * Characterises the daughter of logical volume. + */ inline EVolume CharacteriseDaughters(const G4LogicalVolume* pLog) const; - // Characterise daughter of logical volume. + /** + * Gets regular structure ID of first daughter. + */ inline G4int GetDaughtersRegularStructureId(const G4LogicalVolume* pLv) const; - // Get regular structure ID of first daughter. private: - // BEGIN -- Tracking Invariants part 1 - // + // BEGIN -- Tracking Invariants part 1 ------------------------------------ + + /** Associated navigator. Needed for optimisation. */ const G4Navigator& fNavigator; - // Associated navigator. Needed for details of current state, - // for optimisation + /** Associated navigator's navigation history. Transformation and history + of the current path through the geometrical hierarchy. */ const G4NavigationHistory& fNavHistory; - // Associated navigator's navigation history. Transformation and history - // of the current path through the geometrical hierarchy. - // - // END -- Tracking Invariants part 1 + // END -- Tracking Invariants part 1 ------------------------------------ + + /** Cached tolerance. */ G4double fkCarTolerance; - // Cached tolerance. - // BEGIN State information - // - G4ThreeVector fPreviousSftOrigin; - G4double fPreviousSafety = 0.0; - // Memory of last safety origin & value. Used in ComputeStep to ensure - // that origin of current Step is in the same volume as the point of the - // last relocation. + // BEGIN State information ------------------------------------------------ - // Helpers/Utility classes - their state can change - // + /** Previous safety origin. */ + G4ThreeVector fPreviousSftOrigin; + + /** Memory of last safety origin & value. Used in ComputeStep() to ensure + that origin of current Step is in the same volume as the point of the + last relocation. */ + G4double fPreviousSafety = 0.0; + + /** Helpers/Utility classes - their state can change. */ G4NormalNavigation fnormalNav; G4VoxelNavigation fvoxelNav; G4ParameterisedNavigation fparamNav; @@ -164,41 +202,7 @@ class G4SafetyCalculator }; // Auxiliary inline methods -- copied from G4Navigator - -// Return local coordinates given point in the world coord system. // -inline G4ThreeVector -G4SafetyCalculator::ComputeLocalPoint(const G4ThreeVector& pGlobalPoint) const -{ - return fNavHistory.GetTopTransform().TransformPoint(pGlobalPoint); -} - -// Returns local direction given vector direction in world coord system. -// -inline G4ThreeVector -G4SafetyCalculator::ComputeLocalAxis(const G4ThreeVector& pVec) const -{ - return fNavHistory.GetTopTransform().TransformAxis(pVec); -} - -inline EVolume -G4SafetyCalculator::CharacteriseDaughters(const G4LogicalVolume* pLog) const -{ - return pLog->CharacteriseDaughters(); -} - -inline G4int -G4SafetyCalculator::GetDaughtersRegularStructureId(const G4LogicalVolume* pLog) const -{ - G4int regId = 0; - G4VPhysicalVolume *pVol; - - if ( pLog->GetNoDaughters() == 1 ) - { - pVol = pLog->GetDaughter(0); - regId = pVol->GetRegularStructureId(); - } - return regId; -} +#include "G4SafetyCalculator.icc" #endif diff --git a/source/geometry/magneticfield/include/G4QSSDriverCreator.hh b/source/geometry/navigation/include/G4SafetyCalculator.icc similarity index 62% rename from source/geometry/magneticfield/include/G4QSSDriverCreator.hh rename to source/geometry/navigation/include/G4SafetyCalculator.icc index f26b488012..b30e058a8e 100644 --- a/source/geometry/magneticfield/include/G4QSSDriverCreator.hh +++ b/source/geometry/navigation/include/G4SafetyCalculator.icc @@ -23,42 +23,43 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4QSSDriverCreator +// G4SafetyCalculator inlined function members implementation // -// QSS driver creator +// Author: John Apostolakis (CERN), February 2023 +// ---------------------------------------------------------------------------- -// Author: J.Apostolakis (CERN) - October 2021 -// ------------------------------------------------------------------- -#ifndef QSS_DriverCreator_HH -#define QSS_DriverCreator_HH 1 +// Return local coordinates given point in the world coord system. +// +inline G4ThreeVector +G4SafetyCalculator::ComputeLocalPoint(const G4ThreeVector& pGlobalPoint) const +{ + return fNavHistory.GetTopTransform().TransformPoint(pGlobalPoint); +} -#include "G4QSStepper.hh" -#include "G4QSSDriver.hh" +// Returns local direction given vector direction in world coord system. +// +inline G4ThreeVector +G4SafetyCalculator::ComputeLocalAxis(const G4ThreeVector& pVec) const +{ + return fNavHistory.GetTopTransform().TransformAxis(pVec); +} -class G4Mag_EqRhs; -class G4QSS2; -class G4QSS3; +inline EVolume +G4SafetyCalculator::CharacteriseDaughters(const G4LogicalVolume* pLog) const +{ + return pLog->CharacteriseDaughters(); +} -class G4QSSDriverCreator -{ - public: - - static G4VIntegrationDriver* CreateDriver( G4MagIntegratorStepper* pStepper, - G4double /*stepMinimum*/ ); +inline G4int +G4SafetyCalculator::GetDaughtersRegularStructureId(const G4LogicalVolume* pLog) const +{ + G4int regId = 0; + G4VPhysicalVolume *pVol; - static G4QSSDriver>* - CreateDriver( G4QSStepper* qss2stepper ); - - static G4QSSDriver>* - CreateDriver( G4QSStepper* qss3stepper ); - - static G4QSStepper* CreateQss2Stepper(G4Mag_EqRhs* Equation); - - static G4QSStepper* CreateQss3Stepper(G4Mag_EqRhs* Equation); - - static G4VIntegrationDriver* CreateQss2Driver(G4Mag_EqRhs* Equation); - - static G4VIntegrationDriver* CreateQss3Driver(G4Mag_EqRhs* Equation); -}; - -#endif + if ( pLog->GetNoDaughters() == 1 ) + { + pVol = pLog->GetDaughter(0); + regId = pVol->GetRegularStructureId(); + } + return regId; +} diff --git a/source/geometry/navigation/include/G4SafetyHelper.hh b/source/geometry/navigation/include/G4SafetyHelper.hh index 7997c8d1e9..4a65617b04 100644 --- a/source/geometry/navigation/include/G4SafetyHelper.hh +++ b/source/geometry/navigation/include/G4SafetyHelper.hh @@ -23,14 +23,14 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4SafetyHelper +// G4SafetyHelper // // Class description: // // This class is a helper for physics processes which require -// knowledge of the safety, and the step size for the 'mass' geometry +// knowledge of the safety, and the step size for the 'mass' geometry. -// First version: J.Apostolakis, July 5th, 2006 +// Author: John Apostolakis (CERN), 5 July 2006 // -------------------------------------------------------------------- #ifndef G4SAFETYHELPER_HH #define G4SAFETYHELPER_HH 1 @@ -43,49 +43,94 @@ class G4PathFinder; +/** + * @brief G4SafetyHelper is a helper class for physics processes which require + * knowledge of the safety, and the step size for the 'mass' geometry. + */ + class G4SafetyHelper { - public: // with description + public: + /** + * Constructor and default Destructor. + */ G4SafetyHelper(); - ~G4SafetyHelper(); - // Constructor and destructor + ~G4SafetyHelper() = default; + /** + * Computes the distance in the mass geometry. + * @param[in] position Point in global coordinates. + * @param[in] direction Direction. + * @param[in] currentMaxStep Proposed step length to nearest boundary. + * @param[in,out] newSafety New safety. + * @returns The linear step for mass geometry. + */ G4double CheckNextStep( const G4ThreeVector& position, const G4ThreeVector& direction, const G4double currentMaxStep, G4double& newSafety ); - // Return linear step for mass geometry + /** + * Computes the safety distance for all geometries. + * @param[in] pGlobalPoint Point in global coordinates. + * @param[in] maxRadius Radius of interest (e.g. maximum displacement). + * Giving this, one can reduce the average computational + * cost. If not provided, the real isotropic safety is computed. + * @returns The safety distance for all geometries. + */ G4double ComputeSafety( const G4ThreeVector& pGlobalPoint, G4double maxRadius = DBL_MAX ); - // Return safety for all geometries. - // - // The 2nd argument is the radius of your interest (e.g. maximum - // displacement). Giving this you can reduce the average computational - // cost. If the second argument is not given, this is the real - // isotropic safety + /** + * Locates the point for all geometries. + * @param[in] pGlobalPoint Point in global coordinates. + * @param[in] direction Direction. + */ void Locate(const G4ThreeVector& pGlobalPoint, const G4ThreeVector& direction); - // Locate the point for all geometries + /** + * Relocates the point in the volume of interest. + * @param[in] pGlobalPoint Point in global coordinates. + */ void ReLocateWithinVolume(const G4ThreeVector& pGlobalPoint ); - // Relocate the point in the volume of interest + /** + * Enables navigation in parallel geometries. + * @param[in] parallel Flag to have parallel worlds considered. + * Alternative is to use single (mass) navigator directly. + */ inline void EnableParallelNavigation(G4bool parallel); - // To have parallel worlds considered, must be true. - // Alternative is to use single (mass) Navigator directly + /** + * Checks for new navigator for tracking, and reinitialises pointer. + */ void InitialiseNavigator(); - // Check for new navigator for tracking, and reinitialise pointer + /** + * Verbosity control. + * @param[in] lev The new verbosity level to enable. + * @returns The old verbosity level. + */ inline G4int SetVerboseLevel( G4int lev ); + + /** + * Retrieves the world volume of the mass geometry. + * @returns The pointer to the mass geometry world volume. + */ inline G4VPhysicalVolume* GetWorldVolume(); + + /** + * Sets the safety value for the given position. + * @param[in] val The safety value. + * @param[in] pos The position. + */ inline void SetCurrentSafety(G4double val, const G4ThreeVector& pos); - public: // without description - + /** + * Initialises all data and navigator. + */ void InitialiseHelper(); private: @@ -93,54 +138,28 @@ class G4SafetyHelper G4PathFinder* fpPathFinder = nullptr; G4Navigator* fpMassNavigator = nullptr; + /** Flag whether to use PathFinder or single (mass) navigator directly. + By default, one geometry only. */ G4bool fUseParallelGeometries = false; - // Flag whether to use PathFinder or single (mass) Navigator directly - // By default, one geometry only - G4bool fFirstCall = true; - // Flag of first call - G4int fVerbose = 0; - // Whether to print warning in case of move outside safety - // State used during tracking -- for optimisation + /** Flag of first call. */ + G4bool fFirstCall = true; + + /** Whether to print warning in case of move outside safety. */ + G4int fVerbose = 0; + + // State used during tracking -- for optimisation ------------------------- G4ThreeVector fLastSafetyPosition; G4double fLastSafety = 0.0; - // const G4double fRecomputeFactor = 0.0; - // parameter for further optimisation: - // if ( move < fact*safety ) do fast recomputation of safety - - // End State (tracking) + // End State (tracking) --------------------------------------------------- }; // -------------------------------------------------------------------- // Inline definitions // -------------------------------------------------------------------- -inline G4int G4SafetyHelper::SetVerboseLevel( G4int lev ) -{ - G4int oldlv = fVerbose; - fVerbose = lev; - return oldlv; -} - -inline -void G4SafetyHelper::EnableParallelNavigation(G4bool parallel) -{ - fUseParallelGeometries = parallel; -} - -inline -G4VPhysicalVolume* G4SafetyHelper::GetWorldVolume() -{ - return fpMassNavigator->GetWorldVolume(); -} - -inline -void G4SafetyHelper::SetCurrentSafety(G4double val, const G4ThreeVector& pos) -{ - fLastSafety = val; - fLastSafetyPosition = pos; -} +#include "G4SafetyHelper.icc" #endif diff --git a/source/geometry/navigation/include/G4SafetyHelper.icc b/source/geometry/navigation/include/G4SafetyHelper.icc new file mode 100644 index 0000000000..fb0d496eba --- /dev/null +++ b/source/geometry/navigation/include/G4SafetyHelper.icc @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4SafetyHelper inlined function members implementation +// +// Author: John Apostolakis (CERN), 5 July 2006 +// ---------------------------------------------------------------------------- + +inline G4int G4SafetyHelper::SetVerboseLevel( G4int lev ) +{ + G4int oldlv = fVerbose; + fVerbose = lev; + return oldlv; +} + +inline +void G4SafetyHelper::EnableParallelNavigation(G4bool parallel) +{ + fUseParallelGeometries = parallel; +} + +inline +G4VPhysicalVolume* G4SafetyHelper::GetWorldVolume() +{ + return fpMassNavigator->GetWorldVolume(); +} + +inline +void G4SafetyHelper::SetCurrentSafety(G4double val, const G4ThreeVector& pos) +{ + fLastSafety = val; + fLastSafetyPosition = pos; +} diff --git a/source/geometry/navigation/include/G4SimpleLocator.hh b/source/geometry/navigation/include/G4SimpleLocator.hh index bca1561650..a5bcb70bae 100644 --- a/source/geometry/navigation/include/G4SimpleLocator.hh +++ b/source/geometry/navigation/include/G4SimpleLocator.hh @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4SimpleLocator +// G4SimpleLocator // -// class description: +// Class description: // // Implementing the calculation of the intersection point with a boundary when // PropagationInField is used. Derived from method LocateIntersectionPoint() @@ -34,24 +34,45 @@ // no 'depth' algorithm is used in case of slow progress for finding the // intersection point. -// 27.10.08 - Tatiana Nikitina: Derived from LocateIntersectionPoint() from -// G4PropagatorInField class +// Author: Tatiana Nikitina (CERN), 27 October 20008. // --------------------------------------------------------------------------- - #ifndef G4SIMPLELOCATOR_HH -#define G4SIMPLELOCATOR_HH +#define G4SIMPLELOCATOR_HH 1 #include "G4VIntersectionLocator.hh" +/** + * @brief G4SimpleLocator implements the calculation of the intersection point + * with a boundary when G4PropagationInField is used. It is based on a linear + * method for finding the intersection point; the difference compared to + * G4MultiLevelLocator is that no 'depth' algorithm is used in case of slow + * progress for finding the intersection point. + */ + class G4SimpleLocator : public G4VIntersectionLocator { - public: // with description + public: + /** + * Constructor and default Destructor. + */ G4SimpleLocator(G4Navigator* aNavigator); - // Constructor ~G4SimpleLocator() override; - // Default destructor + /** + * If such an intersection exists, this function calculates the + * intersection point of the true path of the particle with the surface + * of the current volume (or of one of its daughters). + * @note Should use lateral displacement as measure of convergence. + * @param[in] curveStartPointTangent Start point tangent track. + * @param[in] curveEndPointTangent End point tangent track. + * @param[in] trialPoint Trial point. + * @param[out] intersectPointTangent Intersection point tangent track. + * @param[out] recalculatedEndPoint Flagging if end point was recomputed. + * @param[in,out] fPreviousSafety Previous safety distance. + * @param[in,out] fPreviousSftOrigin Previous safety point origin. + * @returns Whether intersection exists or not. + */ G4bool EstimateIntersectionPoint( const G4FieldTrack& curveStartPointTangent, // A const G4FieldTrack& curveEndPointTangent, // B @@ -60,10 +81,6 @@ class G4SimpleLocator : public G4VIntersectionLocator G4bool& recalculatedEndPoint, // Out G4double& fPreviousSafety, // In/Out G4ThreeVector& fPreviousSftOrigin) override; // In/Out - // If such an intersection exists, this function calculates the - // intersection point of the true path of the particle with the surface - // of the current volume (or of one of its daughters). - // Should use lateral displacement as measure of convergence }; #endif diff --git a/source/geometry/navigation/include/G4TransportationManager.hh b/source/geometry/navigation/include/G4TransportationManager.hh index 27b8a272b0..53eb00d9d6 100644 --- a/source/geometry/navigation/include/G4TransportationManager.hh +++ b/source/geometry/navigation/include/G4TransportationManager.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4TransportationManager +// G4TransportationManager // // Class description: // @@ -34,11 +34,11 @@ // The class instance is created before main() is called, and // in turn creates the navigator and the rest. -// Created: 10 March 1997, J. Apostolakis -// Reviewed: 26 April 2006, G. Cosmo +// Created: John Apostolakis (CERN), 10 March 1997 +// Reviewed: Gabriele Cosmo (CERN), 26 April 2006 // -------------------------------------------------------------------- #ifndef G4TransportationManager_hh -#define G4TransportationManager_hh +#define G4TransportationManager_hh 1 #include "G4Navigator.hh" #include "G4SafetyHelper.hh" @@ -50,113 +50,163 @@ class G4GeometryMessenger; class G4FieldManager; class G4VPhysicalVolume; +/** + * @brief G4TransportationManager is a singleton class which stores the + * navigator used by the transportation process to do the geometrical tracking. + * It also stores a pointer to the propagator used in a (magnetic) field and + * to the field manager. + */ + class G4TransportationManager { - public: // with description + public: - static G4TransportationManager* GetTransportationManager(); - // Retrieve the static instance - static G4TransportationManager* GetInstanceIfExist(); - // Retrieve singleton instance pointer. + /** + * Retrieve the static instance. + */ + static G4TransportationManager* GetTransportationManager(); - inline G4PropagatorInField* GetPropagatorInField() const; - inline void SetPropagatorInField(G4PropagatorInField* newFieldPropagator); - inline G4FieldManager* GetFieldManager() const; - void SetFieldManager( G4FieldManager* newFieldManager ); - // Accessors for field handling + /** + * Retrieve singleton instance pointer. + */ + static G4TransportationManager* GetInstanceIfExist(); - inline G4Navigator* GetNavigatorForTracking() const; - void SetNavigatorForTracking( G4Navigator* newNavigator ); - // Accessors for the navigator for tracking + /** + * Accessors and modifiers for field handling. + */ + inline G4PropagatorInField* GetPropagatorInField() const; + inline void SetPropagatorInField(G4PropagatorInField* newFieldPropagator); + inline G4FieldManager* GetFieldManager() const; + void SetFieldManager( G4FieldManager* newFieldManager ); - inline void SetWorldForTracking(G4VPhysicalVolume* theWorld); - // Set the world volume for tracking - // This method is to be invoked by G4RunManagerKernel. + /** + * Accessor and modifier for the navigator for tracking. + */ + inline G4Navigator* GetNavigatorForTracking() const; + void SetNavigatorForTracking( G4Navigator* newNavigator ); - inline std::size_t GetNoActiveNavigators() const; - inline std::vector::iterator GetActiveNavigatorsIterator(); - // Return an iterator to the list of active navigators + /** + * Sets the world volume for tracking. + * This method is to be invoked by G4RunManagerKernel. + */ + inline void SetWorldForTracking(G4VPhysicalVolume* theWorld); - inline std::size_t GetNoWorlds() const; - inline std::vector::iterator GetWorldsIterator(); - // Return an iterator to the list of registered worlds + /** + * Accessors for the active navigators. + * @returns An iterator to the list of active navigators. + */ + inline std::vector::iterator GetActiveNavigatorsIterator(); + inline std::size_t GetNoActiveNavigators() const; - inline G4SafetyHelper* GetSafetyHelper() const; - // Return the pointer to the navigation safety helper instance + /** + * Accessors for the registered worlds. + * @returns An iterator to the list of registered worlds. + */ + inline std::vector::iterator GetWorldsIterator(); + inline std::size_t GetNoWorlds() const; - G4VPhysicalVolume* GetParallelWorld ( const G4String& worldName ); - // Return an exact copy of the tracking world volume. If already - // existing just return the pointer + /** + * Returns the pointer to the navigation safety helper instance. + * @returns Pointer to the navigation safety helper instance. + */ + inline G4SafetyHelper* GetSafetyHelper() const; - G4VPhysicalVolume* IsWorldExisting ( const G4String& worldName ); - // Verify existance or not of an istance of the world volume with - // same name in the collection + /** + * Returns an exact copy of the tracking world volume. + * If already existing just returns the pointer. + * @returns Pointer to the tracking world volume. + */ + G4VPhysicalVolume* GetParallelWorld ( const G4String& worldName ); - G4Navigator* GetNavigator ( const G4String& worldName ); - G4Navigator* GetNavigator ( G4VPhysicalVolume* aWorld ); - // Return a navigator associated to either the world volume name - // or the pointer to world physical volume. If not existing already - // create it and register it in the collection + /** + * Verifies existance or not of an istance of the world volume with + * same name in the collection. + * @returns Pointer to the tracking world volume. + */ + G4VPhysicalVolume* IsWorldExisting ( const G4String& worldName ); - G4bool RegisterWorld( G4VPhysicalVolume* aWorld ); - void DeRegisterNavigator( G4Navigator* aNavigator ); - G4int ActivateNavigator( G4Navigator* aNavigator ); - void DeActivateNavigator( G4Navigator* aNavigator ); - void InactivateAll(); - // Methods for handling navigators. Navigator for tracking is always the - // first, i.e. position 0 in the collection and cannot be de-registered + /** + * Returns a navigator associated to either the world volume name + * or associated to the pointer to the world physical volume. + * If not existing already, creates it and registers it in the collection. + * @returns Pointer to a tracking navigator. + */ + G4Navigator* GetNavigator ( const G4String& worldName ); + G4Navigator* GetNavigator ( G4VPhysicalVolume* aWorld ); - static G4Navigator* GetFirstTrackingNavigator(); - static void SetFirstTrackingNavigator(G4Navigator *nav); - // Retrieve/set first navigator pointer for 'mass' geometry - // - // It will be used as a template for cloning the tracking - // navigator of additional threads. + /** + * Methods for handling navigators. Navigator for tracking is always the + * first (i.e. position 0 in the collection) and cannot be de-registered. + */ + G4bool RegisterWorld( G4VPhysicalVolume* aWorld ); + void DeRegisterNavigator( G4Navigator* aNavigator ); + G4int ActivateNavigator( G4Navigator* aNavigator ); + void DeActivateNavigator( G4Navigator* aNavigator ); + void InactivateAll(); - public: // without description + /** + * Accessor and modifier for the tracking navigator. + * Retrieves/sets the first navigator pointer for the 'mass' geometry. + * It will be used as a template for cloning the tracking navigator of + * additional threads. + */ + static G4Navigator* GetFirstTrackingNavigator(); + static void SetFirstTrackingNavigator(G4Navigator *nav); - void ClearParallelWorlds(); - // Clear collection of navigators and delete allocated objects - // associated with parallel worlds. Internal method called only - // by the RunManager when the entire geometry is rebuilt from scratch. + /** + * Clears collection of navigators and deletes the allocated objects + * associated with parallel worlds. Internal method, called only + * by the RunManager when the entire geometry is rebuilt from scratch. + */ + void ClearParallelWorlds(); - ~G4TransportationManager(); - // Destructor - - protected: - - G4TransportationManager(); - // Singleton. Protected constructor - - private: - - void ClearNavigators(); - // Clear collection of navigators and delete allocated objects - void DeRegisterWorld( G4VPhysicalVolume* aWorld ); - // Register/de-register an already allocated world volume. - // The pointed object is not deleted. - - private: - - std::vector fNavigators; - // The collection of all navigators registered - std::vector fActiveNavigators; - // The collection of only active navigators - std::vector fWorlds; - // The collection of worlds associated to the registered navigators - - G4PropagatorInField* fPropagatorInField; - G4FieldManager* fFieldManager; - G4GeometryMessenger* fGeomMessenger; - G4SafetyHelper* fSafetyHelper; - - static G4ThreadLocal G4TransportationManager* fTransportationManager; - - static G4Navigator* fFirstTrackingNavigator; + /** + * Destructor. Called internally only by G4RunManagerKernel. + */ + ~G4TransportationManager(); public: + /** Navigator identifier. Accessed by G4CoupledTransportation. */ static constexpr G4int kMassNavigatorId = 0; + + private: + + /** + * Private Constructor. + */ + G4TransportationManager(); + + /** + * Clears collection of navigators and deletes allocated objects. + */ + void ClearNavigators(); + + /** + * De-registers an already allocated world volume. + * The pointed object is not deleted. + */ + void DeRegisterWorld( G4VPhysicalVolume* aWorld ); + + private: + + /** The collection of all navigators registered. */ + std::vector fNavigators; + + /** The collection of only active navigators. */ + std::vector fActiveNavigators; + + /** The collection of worlds associated to the registered navigators. */ + std::vector fWorlds; + + G4PropagatorInField* fPropagatorInField; + G4FieldManager* fFieldManager; + G4GeometryMessenger* fGeomMessenger; + G4SafetyHelper* fSafetyHelper; + + static G4ThreadLocal G4TransportationManager* fTransportationManager; + + static G4Navigator* fFirstTrackingNavigator; }; #include "G4TransportationManager.icc" diff --git a/source/geometry/navigation/include/G4TransportationManager.icc b/source/geometry/navigation/include/G4TransportationManager.icc index c312c58883..18e4cd65bd 100644 --- a/source/geometry/navigation/include/G4TransportationManager.icc +++ b/source/geometry/navigation/include/G4TransportationManager.icc @@ -23,10 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4TransportationManager inlined function members implementation +// G4TransportationManager inlined function members implementation // -// Created : 10 March 1997, J. Apostolakis -// Reviewed: 26 April 2006, G. Cosmo +// Created: John Apostolakis (CERN), 10 March 1997 +// Reviewed: Gabriele Cosmo (CERN), 26 April 2006 // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- diff --git a/source/geometry/navigation/include/G4VExternalNavigation.hh b/source/geometry/navigation/include/G4VExternalNavigation.hh index 86b0161419..a252ca4e9f 100644 --- a/source/geometry/navigation/include/G4VExternalNavigation.hh +++ b/source/geometry/navigation/include/G4VExternalNavigation.hh @@ -30,10 +30,10 @@ // Pure virtual class to be specialised by the user for tracking with // an external navigation -// Authors: V.Vlachoudis, G.Cosmo - CERN, 2019 +// Authors: V.Vlachoudis, G.Cosmo (CERN), 2019 // -------------------------------------------------------------------- #ifndef G4VEXTERNALNAVIGATION_HH -#define G4VEXTERNALNAVIGATION_HH +#define G4VEXTERNALNAVIGATION_HH 1 #include "G4LogicalVolume.hh" #include "G4NavigationHistory.hh" @@ -42,31 +42,51 @@ #include "G4VPhysicalVolume.hh" #include "G4VSolid.hh" +/** + * @brief G4VExternalNavigation is a pure virtual class to be specialised + * by the user for tracking with an external navigation. + */ + class G4VExternalNavigation : public G4VNavigation { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4VExternalNavigation(); - // Constructor - ~G4VExternalNavigation() override; - // Destructor + /** + * Cloning method, pure virtual. + */ virtual G4VExternalNavigation* Clone() = 0; // Optional methods - may be necessary under particular circumstances + /** + * Special 'Inside' call that includes direction of next motion. + * Provided for potential optimisations. + * @param[in] solid Solid to be considered. + * @param[in] position Point to be checked. + * @param[in] direction Not used. + * @returns Whether the point is inside the solid or not. + */ virtual EInside Inside( const G4VSolid* solid, const G4ThreeVector& position, const G4ThreeVector& direction ); - // Special 'Inside' call that includes direction of next motion - // provided for potential optimisations. - void RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, - const G4ThreeVector& localPoint ) override; - // Update any relevant internal state to take account that - // - the location has been moved to 'localPoint' - // - it remains in the current (mother) physical volume 'motherPhysical' + /** + * Updates any relevant internal state to take account that the location + * has been moved to 'localPoint' and that it remains in the current + * (mother) physical volume 'motherPhysical'. + * @note Default action is do-nothing; only implemented by the concrete + * navigator class. + * @param[in] motherPhysical Volume to be considered. + * @param[in] localPoint Point to be checked. + */ + void RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, + const G4ThreeVector& localPoint ) override; }; #endif diff --git a/source/geometry/navigation/include/G4VIntersectionLocator.hh b/source/geometry/navigation/include/G4VIntersectionLocator.hh index 8141575813..066d7ee563 100644 --- a/source/geometry/navigation/include/G4VIntersectionLocator.hh +++ b/source/geometry/navigation/include/G4VIntersectionLocator.hh @@ -23,21 +23,20 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4VIntersectionLocator +// G4VIntersectionLocator // -// class description: +// Class description: // // Base class for the calculation of the intersection point with a boundary // when PropagationInField is used. // Gives possibility to choose the method of intersection; concrete locators // implemented are: G4SimpleLocator, G4MultiLevelLocator, G4BrentLocator. -// -// Key Method: EstimateIntersectionPoint() +// Key Method: EstimateIntersectionPoint(). -// 27.10.08 - John Apostolakis, Tatiana Nikitina: Design and implementation -// --------------------------------------------------------------------------- +// Authors: John Apostolakis, Tatiana Nikitina (CERN), 27 October 2008 +// -------------------------------------------------------------------- #ifndef G4VINTERSECTIONLOCATOR_HH -#define G4VINTERSECTIONLOCATOR_HH +#define G4VINTERSECTIONLOCATOR_HH 1 #include "G4Types.hh" #include "G4ThreeVector.hh" @@ -46,78 +45,114 @@ #include "G4Navigator.hh" #include "G4ChordFinder.hh" +/** + * @brief G4VIntersectionLocator is a base class for the calculation of the + * intersection point with a boundary when PropagationInField is used. + * It gives the possibility to choose the method of intersection. + */ + class G4VIntersectionLocator - { - public: // with description +{ + public: - G4VIntersectionLocator(G4Navigator *theNavigator); - // Constructor - virtual ~G4VIntersectionLocator(); - // Default destructor + /** + * Constructor and virtual Destructor. + */ + G4VIntersectionLocator(G4Navigator *theNavigator); + virtual ~G4VIntersectionLocator(); - virtual G4bool EstimateIntersectionPoint( - const G4FieldTrack& curveStartPointTangent, // A - const G4FieldTrack& curveEndPointTangent, // B - const G4ThreeVector& trialPoint, // E - G4FieldTrack& intersectPointTangent, // Output - G4bool& recalculatedEndPoint, // Out - G4double& fPreviousSafety, // In/Out - G4ThreeVector& fPreviousSftOrigin) = 0; // In/Out - // If such an intersection exists, this function calculates the - // intersection point of the true path of the particle with the surface - // of the current volume (or of one of its daughters). - // Should use lateral displacement as measure of convergence - // NOTE: changes the safety! + /** + * If such an intersection exists, this method calculates the intersection + * point of the true path of the particle with the surface of the current + * volume (or of one of its daughters). + * Should use lateral displacement as measure of convergence. + * @note Changes the safety! + * @param[in] curveStartPointTangent Start point tangent track. + * @param[in] curveEndPointTangent End point tangent track. + * @param[in] trialPoint Trial point. + * @param[out] intersectPointTangent Intersection point tangent track. + * @param[out] recalculatedEndPoint Flagging if end point was recomputed. + * @param[in,out] fPreviousSafety Previous safety distance. + * @param[in,out] fPreviousSftOrigin Previous safety point origin. + * @returns Whether intersection exists or not. + */ + virtual G4bool EstimateIntersectionPoint( + const G4FieldTrack& curveStartPointTangent, // A + const G4FieldTrack& curveEndPointTangent, // B + const G4ThreeVector& trialPoint, // E + G4FieldTrack& intersectPointTangent, // Output + G4bool& recalculatedEndPoint, // Out + G4double& fPreviousSafety, // In/Out + G4ThreeVector& fPreviousSftOrigin) = 0; // In/Out - void printStatus( const G4FieldTrack& startFT, - const G4FieldTrack& currentFT, - G4double requestStep, - G4double safety, - G4int stepNum); - // Print Method, useful mostly for debugging + /** + * Intersects the chord from StartPointA to EndPointB and returns + * whether an intersection occurred. + * @note Changes the safety! + * @param[in] StartPointA Chord starting point. + * @param[in] EndPointB Chord end point. + * @param[out] NewSafety New calculated safety distance. + * @param[in,out] PreviousSafety Previous safety distance. + * @param[in,out] PreviousSftOrigin Previous safety point origin. + * @param[out] LinearStepLength Linear chord length. + * @param[out] IntersectionPoint Intersection point. + * @param[in,out] calledNavigator Pointer to flag indicating if the + * navigator has been called or not. + * @returns Whether intersection exists or not. + */ + inline G4bool IntersectChord( const G4ThreeVector& StartPointA, + const G4ThreeVector& EndPointB, + G4double& NewSafety, + G4double& PreviousSafety, // In/Out + G4ThreeVector& PreviousSftOrigin, // In/Out + G4double& LinearStepLength, + G4ThreeVector& IntersectionPoint, + G4bool* calledNavigator = nullptr ); - inline G4bool IntersectChord( const G4ThreeVector& StartPointA, - const G4ThreeVector& EndPointB, - G4double& NewSafety, - G4double& PreviousSafety, // In/Out - G4ThreeVector& PreviousSftOrigin, // In/Out - G4double& LinearStepLength, - G4ThreeVector& IntersectionPoint, - G4bool* calledNavigator = nullptr ); - // Intersect the chord from StartPointA to EndPointB and return - // whether an intersection occurred. NOTE: changes the Safety! + /** + * Setters for parameters which must be set at each step, in case they are + * changed. + * @note This simple approach ensures that all scenarios are considered. + * Future refinement may identify which are invariant during a + * track, run or event. + */ + inline void SetEpsilonStepFor( G4double EpsilonStep ); + inline void SetDeltaIntersectionFor( G4double deltaIntersection ); + inline void SetNavigatorFor( G4Navigator* fNavigator ); + inline void SetChordFinderFor(G4ChordFinder* fCFinder ); - inline void SetEpsilonStepFor( G4double EpsilonStep ); - inline void SetDeltaIntersectionFor( G4double deltaIntersection ); - inline void SetNavigatorFor( G4Navigator* fNavigator ); - inline void SetChordFinderFor(G4ChordFinder* fCFinder ); - // These parameters must be set at each step, in case they were changed - // Note: This simple approach ensures that all scenarios are considered. - // Future refinement may identify which are invariant during a - // track, run or event - - inline void SetVerboseFor(G4int fVerbose); - inline G4int GetVerboseFor(); - // Controling verbosity enables checking of the locating of intersections - - public: // without description - - // Additional inline Set/Get methods for parameters, dependent objects + /** + * Verbosity control. + * Controlling verbosity enables checking of the locating of intersections. + */ + inline void SetVerboseFor(G4int fVerbose); + inline G4int GetVerboseFor(); + /** + * Additional inline Get/Set methods for parameters, dependent objects. + */ inline G4double GetDeltaIntersectionFor(); inline G4double GetEpsilonStepFor(); inline G4Navigator* GetNavigatorFor(); inline G4ChordFinder* GetChordFinderFor(); - inline void SetSafetyParametersFor(G4bool UseSafety ); - inline void AddAdjustementOfFoundIntersection(G4bool UseCorrection); - inline G4bool GetAdjustementOfFoundIntersection(); - // Methods to be made Obsolete - replaced by methods below + /** + * Adjustment flag accessor/modifier. + */ inline void AdjustIntersections(G4bool UseCorrection); inline G4bool AreIntersectionsAdjusted(){ return fUseNormalCorrection; } - // Change adjustment flag ( New Interface ) + /** + * Adjustment flag accessor/modifier. + * @deprecated Replaced by methods above. To be removed in future releases. + */ + inline void AddAdjustementOfFoundIntersection(G4bool UseCorrection); + inline G4bool GetAdjustementOfFoundIntersection(); + + /** + * Dumps status of propagator to any ostream. + */ static void printStatus( const G4FieldTrack& startFT, const G4FieldTrack& currentFT, G4double requestStep, @@ -125,47 +160,97 @@ class G4VIntersectionLocator G4int stepNum, std::ostream& oss, G4int verboseLevel ); - // Print Method for any ostream - e.g. cerr -- and for G4Exception + /** + * Dumps status of propagator to cout, useful mostly for debugging. + */ + void printStatus( const G4FieldTrack& startFT, + const G4FieldTrack& currentFT, + G4double requestStep, + G4double safety, + G4int stepNum); + + /** + * Sets/gets check mode. + * When enabled, uses additional verifications and stricter condictions + * for ensuring correctness. Effective only when G4VERBOSE is enabled. + */ inline void SetCheckMode( G4bool value ) { fCheckMode = value; } inline G4bool GetCheckMode() { return fCheckMode; } - protected: // with description + protected: + /** + * Returns new estimate for state after curveDist starting from + * CurrentStateA, to replace EstimtdEndStateB, and reports displacement + * (if field is compiled verbose). + * @param[in] CurrentStateA Start point tangent track. + * @param[in] EstimtdEndStateB Estimated end point tangent track. + * @param[in] linearDistSq Not used. + * @param[in] curveDist Not used. + * @returns New estimate for state. + */ G4FieldTrack ReEstimateEndpoint( const G4FieldTrack& CurrentStateA, const G4FieldTrack& EstimtdEndStateB, G4double linearDistSq, // not used - G4double curveDist ); // not used - // Return new estimate for state after curveDist starting from - // CurrentStateA, to replace EstimtdEndStateB, and report displacement - // (if field is compiled verbose) + G4double curveDist ); // not used + /** + * Checks whether EndB is too far from StartA to be reached and if, + * re-estimates new value for EndB (return in RevisedEndPoint). + * Reports error if EndB is before StartA (in curve length) + * In that case return errorCode = 2. + * @param[in] CurrentStartA Start point tangent track. + * @param[in] EstimatedEndB Estimated end point tangent track. + * @param[in] RevisedEndPoint Revised end point tangent track. + * @param[in] errorCode Error code (0=OK, 1=coincident points, 2=error). + * @returns true if end point has been revised. + */ G4bool CheckAndReEstimateEndpoint( const G4FieldTrack& CurrentStartA, const G4FieldTrack& EstimatedEndB, G4FieldTrack& RevisedEndPoint, - G4int & errorCode); - // Check whether EndB is too far from StartA to be reached - // and if, re-estimate new value for EndB (return in RevisedEndPoint) - // Report error if EndB is before StartA (in curve length) - // In that case return errorCode = 2. + G4int& errorCode); + /** + * Returns the surface normal. Position *must* be the intersection point + * from last call to G4Navigator's ComputeStep() (via IntersectChord). + * It tries to use cached (last) value in Navigator for speed, if it was + * kept and valid. The value returned is in global coordinates. + * @note It does NOT guarantee to obtain Normal. This can happen e.g. + * if the "Intersection" Point is not on a surface, potentially + * due to either inaccuracies in the transformations used, or + * issues with the Solid. + * @param[in] CurrentInt_Point Current point. + * @param[in,out] validNormal Flagging if normal is a valid vector. + * @returns The surface normal vector in local coordinates. + */ G4ThreeVector GetSurfaceNormal(const G4ThreeVector& CurrentInt_Point, G4bool& validNormal); - // Position *must* be the intersection point from last call - // to G4Navigator's ComputeStep (via IntersectChord ) - // Will try to use cached (last) value in Navigator for speed, - // if it was kept and valid. - // Value returned is in global coordinates. - // It does NOT guarantee to obtain Normal. This can happen eg if: - // - the "Intersection" Point is not on a surface, potentially due to - // - inaccuracies in the transformations used, or - // - issues with the Solid. + /** + * Returns the surface normal of the Intersecting Solid in global + * coordinates. + * @note This method is costlier then GetSurfaceNormal(). + * @param[in] CurrentInt_Point Current point. + * @param[in,out] validNormal Flagging if normal is a valid vector. + * @returns The surface normal vector in global coordinates. + */ G4ThreeVector GetGlobalSurfaceNormal(const G4ThreeVector& CurrentE_Point, G4bool& validNormal); - // Return the SurfaceNormal of Intersecting Solid in global coordinates - // Costlier then GetSurfaceNormal - + /** + * Optional method for adjustment of located intersection point using + * the surface-normal. + * @param[in] A Chord starting point. + * @param[in] CurrentE_Point E Chord point. + * @param[in] CurrentF_Point F Chord point. + * @param[in] MomentumDir Momentum direction. + * @param[in] IntersectAF First part intersecting? + * @param[in,out] IntersectionPoint Intersection point tangent track. + * @param[in,out] NewSafety New safety distance. + * @param[in,out] fPrevSafety Previous safety distance. + * @param[in,out] fPrevSftOrigin Previous safety point origin. + * @returns Whether intersection exists or not. + */ G4bool AdjustmentOfFoundIntersection(const G4ThreeVector& A, const G4ThreeVector& CurrentE_Point, const G4ThreeVector& CurrentF_Point, @@ -175,36 +260,54 @@ class G4VIntersectionLocator G4double& NewSafety, G4double& fPrevSafety, G4ThreeVector& fPrevSftOrigin ); - // Optional method for adjustment of located intersection point - // using the surface-normal + /** + * Prints a three-line report on the current "sub-step", + * i.e. trial intersection. + * @param[in] step_no Step number. + * @param[in] ChordAB_v AB chord. + * @param[in] ChordEF_v EF chord. + * @param[in] NewMomentumDir Momentum direction. + * @param[in] NormalAtEntry Normal vector at entry. + * @param[in] validNormal Validity flag for normal vector at E. + */ void ReportTrialStep( G4int step_no, const G4ThreeVector& ChordAB_v, const G4ThreeVector& ChordEF_v, const G4ThreeVector& NewMomentumDir, const G4ThreeVector& NormalAtEntry, G4bool validNormal ); - // Print a three-line report on the current "sub-step", ie trial - // intersection + /** + * Locates a point using the navigator and updates the state of Navigator. + * By default, it assumes that the point is inside the current volume, + * and returns true. + * In check mode, it checks whether the point is *inside* the volume. + * If it is inside, it returns true. + * If not, issues a warning and returns false. + * @param[in] pos The point to locate. + * @returns If a point is inside the volume or not. + */ G4bool LocateGlobalPointWithinVolumeAndCheck( const G4ThreeVector& pos ); - // Locate point using navigator - updates state of Navigator. - // By default, it assumes that the point is inside the current volume, - // and returns true. - // In check mode, checks whether the point is *inside* the volume. - // If it is inside, it returns true. - // If not, issues a warning and returns false. + /** + * Locates a point using the navigator and updates the state of Navigator, + * but report information about code location. + * If CheckMode > 1, report extra information. + * @param[in] pos The point to locate. + * @param[in] CodeLocationInfo String for code location info. + * @param[in] CheckMode Not used. + */ void LocateGlobalPointWithinVolumeCheckAndReport( const G4ThreeVector& pos, const G4String& CodeLocationInfo, G4int CheckMode ); - // As above, but report information about code location. - // If CheckMode > 1, report extra information. - - protected: // without description // Auxiliary methods -- to report issues + /** + * Builds error message (in ossMsg) to report that point 'B' has + * gone past 'A'. + */ void ReportReversedPoints( std::ostringstream& ossMsg, const G4FieldTrack& StartPointVel, const G4FieldTrack& EndPointVel, @@ -215,9 +318,10 @@ class G4VIntersectionLocator const G4ThreeVector& CurrentE_Point, const G4FieldTrack& ApproxIntersecPointV, G4int sbstp_no, G4int sbstp_no_p, G4int depth ); - // Build error messsage (in ossMsg) to report that point 'B' has - // gone past 'A' + /** + * Reports the current status / progress in finding the first intersection. + */ void ReportProgress( std::ostream& oss, const G4FieldTrack& StartPointVel, const G4FieldTrack& EndPointVel, @@ -226,26 +330,30 @@ class G4VIntersectionLocator const G4FieldTrack& B_PtVel, G4double safetyLast, G4int depth= -1 ); - // Report the current status / progress in finding the first intersection + /** + * Report case: trial point is 'close' to start, within tolerance. + */ void ReportImmediateHit( const char* MethodName, const G4ThreeVector& StartPosition, const G4ThreeVector& TrialPoint, G4double tolerance, unsigned long int numCalls ); - // Report case: trial point is 'close' to start, within tolerance - private: // no description + private: + /** + * Returns the SurfaceNormal of the Intersecting Solid in local coordinates. + */ G4ThreeVector GetLocalSurfaceNormal(const G4ThreeVector& CurrentE_Point, G4bool& validNormal); - // Return the SurfaceNormal of Intersecting Solid in local coordinates + /** + * Position *must* be the intersection point from last call + * to G4Navigator's ComputeStep (via IntersectChord). + */ G4ThreeVector GetLastSurfaceNormal( const G4ThreeVector& intersectPoint, - G4bool& validNormal) const; - // Position *must* be the intersection point from last call - // to G4Navigator's ComputeStep (via IntersectChord ) - // Temporary - will use the same method in the Navigator + G4bool& validNormal) const; protected: @@ -258,17 +366,18 @@ class G4VIntersectionLocator G4Navigator* fiNavigator; + /** + * Parameters set at each physical step by G4PropagatorInField. + */ G4ChordFinder* fiChordFinder = nullptr; // Overridden at each step G4double fiEpsilonStep = -1.0; // Overridden at each step G4double fiDeltaIntersection = -1.0; // Overridden at each step - // Parameters set at each physical step by calling method - // by G4PropagatorInField + /** Helper for location. */ G4Navigator *fHelpingNavigator; - // Helper for location + /** Touchable history hook. */ G4TouchableHistory *fpTouchable = nullptr; - // Touchable history hook }; #include "G4VIntersectionLocator.icc" diff --git a/source/geometry/navigation/include/G4VIntersectionLocator.icc b/source/geometry/navigation/include/G4VIntersectionLocator.icc index 57a58c9143..4180033abe 100644 --- a/source/geometry/navigation/include/G4VIntersectionLocator.icc +++ b/source/geometry/navigation/include/G4VIntersectionLocator.icc @@ -23,10 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Class G4VIntersectionLocator inline methods +// Class G4VIntersectionLocator inline methods implementation // -// 27.10.07 - John Apostolakis, Tatiana Nikitina -// --------------------------------------------------------------------------- +// Authors: John Apostolakis, Tatiana Nikitina (CERN), 27 October 2008 +// -------------------------------------------------------------------- inline G4double G4VIntersectionLocator::GetDeltaIntersectionFor() { diff --git a/source/geometry/navigation/include/G4VNavigation.hh b/source/geometry/navigation/include/G4VNavigation.hh index fbe2fa7e95..6fda131d33 100644 --- a/source/geometry/navigation/include/G4VNavigation.hh +++ b/source/geometry/navigation/include/G4VNavigation.hh @@ -23,16 +23,16 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4VNavigation +// G4VNavigation // // Class description: // // Navigation interface common between all navigator types. -// Author: G. Amadio - CERN, March 2022 +// Author: Guilherme Amadio (CERN), March 2022 // -------------------------------------------------------------------- #ifndef G4VNAVIGATION_HH -#define G4VNAVIGATION_HH +#define G4VNAVIGATION_HH 1 #include "G4ThreeVector.hh" @@ -47,105 +47,112 @@ class G4NavigationHistory; class G4VNavigation { - public: - /** Virtual Destructor. */ - virtual ~G4VNavigation() = default; + public: - /** - * Search positioned volumes in mother at current top level of @p history - * for volume containing @p globalPoint. Do not test against @p blockedVol. - * If a containing volume is found, push it onto navigation history state. - * @param[in,out] history Navigation history. - * @param[in,out] blockedVol Blocked volume that should be ignored in queries. - * @param[in,out] blockedNum Copy number for blocked replica volumes. - * @param[in,out] globalPoint Global point - * @param[in,out] globalDirection Pointer to global direction or null pointer. - * @param[in,out] localPoint = global point in local system on entry, point - * in new system on exit. - * @returns Whether a containing volume has been found. - */ - virtual G4bool LevelLocate(G4NavigationHistory& history, - const G4VPhysicalVolume* blockedVol, - const G4int blockedNum, - const G4ThreeVector& globalPoint, - const G4ThreeVector* globalDirection, - const G4bool pLocatedOnEdge, - G4ThreeVector& localPoint) = 0; + /** + * Virtual Destructor. + */ + virtual ~G4VNavigation() = default; - /** - * Compute the length of a step to the next boundary. - * Do not test against @p pBlockedPhysical. Identify the next candidate volume - * (if a daughter of current volume), and return it in pBlockedPhysical, - * blockedReplicaNo. - * @param[in] localPoint Local point - * @param[in] localDirection Pointer to local direction or null pointer. - * @param[in] currentProposedStepLength Current proposed step length. - * @param[in,out] newSafety New safety. - * @param[in,out] history Navigation history. - * @param[in,out] validExitNormal Flag to indicate whether exit normal is - * valid or not. - * @param[in,out] exitNormal Exit normal. - * @param[in,out] entering Flag to indicate whether we are entering a volume. - * @param[in,out] exiting Flag to indicate whether we are exiting a volume. - * @param[in,out] pBlockedPhysical Blocked physical volume that should be - * ignored in queries. - * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. - * @returns Length from current point to next boundary surface along @p - * localDirection. - */ - virtual G4double ComputeStep(const G4ThreeVector& localPoint, - const G4ThreeVector& localDirection, - const G4double currentProposedStepLength, - G4double& newSafety, - G4NavigationHistory& history, - G4bool& validExitNormal, - G4ThreeVector& exitNormal, - G4bool& exiting, - G4bool& entering, - G4VPhysicalVolume*(*pBlockedPhysical), - G4int& blockedReplicaNo) = 0; + /** + * Searches positioned volumes in mother at current top level of @p history + * for volume containing @p globalPoint. Do not test against @p blockedVol. + * If a containing volume is found, push it onto navigation history state. + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked replica volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ + virtual G4bool LevelLocate(G4NavigationHistory& history, + const G4VPhysicalVolume* blockedVol, + const G4int blockedNum, + const G4ThreeVector& globalPoint, + const G4ThreeVector* globalDirection, + const G4bool pLocatedOnEdge, + G4ThreeVector& localPoint) = 0; - /** - * Compute the distance to the closest surface. - * @param[in] globalPoint Global point. - * @param[in] history Navigation history. - * @param[in] pMaxLength Maximum step length beyond which volumes need not be - * checked. - * @returns Length from current point to closest surface. - */ - virtual G4double ComputeSafety(const G4ThreeVector& globalpoint, - const G4NavigationHistory& history, - const G4double pMaxLength = DBL_MAX) = 0; + /** + * Computes the length of a step to the next boundary. + * Do not test against @p pBlockedPhysical. Identify the next candidate + * volume (if a daughter of current volume), and return it in: + * pBlockedPhysical, blockedReplicaNo. + * @param[in] localPoint Local point. + * @param[in] localDirection Local vector direction. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @returns Length from current point to next boundary surface along + * @p localDirection. + */ + virtual G4double ComputeStep(const G4ThreeVector& localPoint, + const G4ThreeVector& localDirection, + const G4double currentProposedStepLength, + G4double& newSafety, + G4NavigationHistory& history, + G4bool& validExitNormal, + G4ThreeVector& exitNormal, + G4bool& exiting, + G4bool& entering, + G4VPhysicalVolume*(*pBlockedPhysical), + G4int& blockedReplicaNo) = 0; - /** - * Update internal navigation state to take into account that location - * has been moved, but remains within the @p motherPhysical volume. - * @param[in] motherPhysical Current physical volume. - * @param[in] localPoint Local point. - */ - virtual void RelocateWithinVolume(G4VPhysicalVolume* /* motherPhysical */, - const G4ThreeVector& /* localPoint */) - { - /* do nothing by default */ - } + /** + * Computes the distance to the closest surface. + * @param[in] localPoint Local point. + * @param[in] history Navigation history. + * @param[in] pMaxLength Maximum step length beyond which volumes + * need not be checked. + * @returns Length from current point to closest surface. + */ + virtual G4double ComputeSafety(const G4ThreeVector& localpoint, + const G4NavigationHistory& history, + const G4double pMaxLength = DBL_MAX) = 0; - /** Get current verbosity level */ - virtual G4int GetVerboseLevel() const { return fVerbose; } + /** + * Updates internal navigation state to take into account that location + * has been moved, but remains within the @p motherPhysical volume. + * @param[in] motherPhysical Current physical volume. + * @param[in] localPoint Local point. + */ + virtual void RelocateWithinVolume(G4VPhysicalVolume* /* motherPhysical */, + const G4ThreeVector& /* localPoint */) + { + /* do nothing by default */ + } - /** Set current verbosity level */ - virtual void SetVerboseLevel(G4int level) { fVerbose = level; } + /** + * Gets current verbosity level. + */ + virtual G4int GetVerboseLevel() const { return fVerbose; } - /** - * Set check mode. - * When enabled, forces navigator to run in "check mode", hence using - * additional verifications and stricter condictions for ensuring correctness. - * Effective only when G4VERBOSE is enabled. - */ - void CheckMode(G4bool mode) { fCheck = mode; } + /** + * Sets current verbosity level. + */ + virtual void SetVerboseLevel(G4int level) { fVerbose = level; } - protected: - G4int fVerbose = 0; - G4bool fCheck = false; + /** + * Sets check mode. + * When enabled, forces navigator to run in "check mode", hence using + * additional verifications and stricter condictions for ensuring + * correctness. Effective only when G4VERBOSE is enabled. + */ + void CheckMode(G4bool mode) { fCheck = mode; } + + protected: + + G4int fVerbose = 0; + G4bool fCheck = false; }; #endif diff --git a/source/geometry/navigation/include/G4VoxelNavigation.hh b/source/geometry/navigation/include/G4VoxelNavigation.hh index 2fb6caa801..364331f07f 100644 --- a/source/geometry/navigation/include/G4VoxelNavigation.hh +++ b/source/geometry/navigation/include/G4VoxelNavigation.hh @@ -23,18 +23,17 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4VoxelNavigation +// G4VoxelNavigation // // Class description: // // Utility for navigation in volumes containing only G4PVPlacement // daughter volumes for which voxels have been constructed. -// History: -// - Created: Paul Kent, Aug 96 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #ifndef G4VOXELNAVIGATION_HH -#define G4VOXELNAVIGATION_HH +#define G4VOXELNAVIGATION_HH 1 #include "geomdefs.hh" #include "G4VNavigation.hh" @@ -61,26 +60,75 @@ class G4VoxelSafety; #include "G4SmartVoxelNode.hh" #include "G4SmartVoxelHeader.hh" +/** + * @brief G4VoxelNavigation is a concrete utility class for navigation in + * volumes containing only G4PVPlacement daughter volumes for which voxels + * have been constructed. + */ + class G4VoxelNavigation : public G4VNavigation { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4VoxelNavigation(); ~G4VoxelNavigation() override; - G4SmartVoxelNode* VoxelLocate( G4SmartVoxelHeader* pHead, - const G4ThreeVector& localPoint ); + /** + * Locates voxel node based on given point. + * @param[in] pHead Pointer to header of nodes to look through. + * @param[in] localPoint Local point + * @returns Pointer to the node where the given point is located. + */ + inline G4SmartVoxelNode* VoxelLocate( G4SmartVoxelHeader* pHead, + const G4ThreeVector& localPoint ); - G4bool LevelLocate( G4NavigationHistory& history, - const G4VPhysicalVolume* blockedVol, - const G4int blockedNum, - const G4ThreeVector& globalPoint, - const G4ThreeVector* globalDirection, - const G4bool pLocatedOnEdge, - G4ThreeVector& localPoint ) override; + /** + * Searches positioned volumes in mother at current top level of @p history + * for volume containing @p globalPoint. Do not test against @p blockedVol. + * If a containing volume is found, push it onto navigation history state. + * @param[in,out] history Navigation history. + * @param[in,out] blockedVol Blocked volume to be ignored in queries. + * @param[in,out] blockedNum Copy number for blocked replica volumes. + * @param[in,out] globalPoint Point in global coordinates system. + * @param[in,out] globalDirection Pointer to global direction or null. + * @param[in] pLocatedOnEdge Flag specifying if point is located on edge. + * @param[in,out] localPoint Point in local coordinates system. + * @returns Whether a containing volume has been found. + */ + inline G4bool LevelLocate( G4NavigationHistory& history, + const G4VPhysicalVolume* blockedVol, + const G4int blockedNum, + const G4ThreeVector& globalPoint, + const G4ThreeVector* globalDirection, + const G4bool pLocatedOnEdge, + G4ThreeVector& localPoint ) override; - G4double ComputeStep( const G4ThreeVector& globalPoint, - const G4ThreeVector& globalDirection, + /** + * Computes the length of a step to the next boundary. + * Does not test against @p pBlockedPhysical. Identifies the next candidate + * volume (if a daughter of the current volume), and returns it in: + * pBlockedPhysical, blockedReplicaNo. + * @param[in] localPoint Local point. + * @param[in] localDirection Local direction vector. + * @param[in] currentProposedStepLength Current proposed step length. + * @param[in,out] newSafety New safety. + * @param[in,out] history Navigation history. + * @param[in,out] validExitNormal Flag to indicate whether exit normal is + * valid or not. + * @param[in,out] exitNormal Exit normal. + * @param[in,out] exiting Flag to indicate whether exiting a volume. + * @param[in,out] entering Flag to indicate whether entering a volume. + * @param[in,out] pBlockedPhysical Blocked physical volume that should be + * ignored in queries. + * @param[in,out] blockedReplicaNo Copy number for blocked replica volumes. + * @returns Length from current point to next boundary surface along + * @p localDirection. + */ + G4double ComputeStep( const G4ThreeVector& localPoint, + const G4ThreeVector& localDirection, const G4double currentProposedStepLength, G4double& newSafety, G4NavigationHistory& history, @@ -91,31 +139,66 @@ class G4VoxelNavigation : public G4VNavigation G4VPhysicalVolume* (*pBlockedPhysical), G4int& blockedReplicaNo ) override; - G4double ComputeSafety( const G4ThreeVector& globalpoint, + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the local coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] localPoint Local point. + * @param[in] history Navigation history. + * @param[in] pMaxLength Maximum step length beyond which volumes + * need not be checked. + * @returns Length from current point to closest surface. + */ + G4double ComputeSafety( const G4ThreeVector& localpoint, const G4NavigationHistory& history, const G4double pMaxLength = DBL_MAX ) override; - void RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, + /** + * Updates internal navigation state to take into account that location + * has been moved, but remains within the @p motherPhysical volume. + * @param[in] motherPhysical Current physical volume. + * @param[in] localPoint Local point. + */ + void RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, const G4ThreeVector& localPoint ) override; - G4int GetVerboseLevel() const override; + /** + * Verbosity control. + * @note If level>0 && G4VERBOSE, printout can occur. + */ + inline G4int GetVerboseLevel() const override; void SetVerboseLevel(G4int level) override; - // Get/Set Verbose(ness) level. - // [if level>0 && G4VERBOSE, printout can occur] + /** + * Enables best-possible evaluation of isotropic safety. + */ inline void EnableBestSafety( G4bool flag = false ); - // Enable best-possible evaluation of isotropic safety protected: + /** + * Computes safety from specified point to voxel boundaries using already + * located point. + * @param[in] localPoint Local point. + * @returns Safety length from current point to voxel boundary. + */ G4double ComputeVoxelSafety( const G4ThreeVector& localPoint ) const; + + /** + * Finds the next voxel from the current voxel and point in the specified + * direction. + * @param[in] localPoint Local point. + * @param[in] localDirection Direction along which compute the distance. + * @param[in] currentStep Current step size. + * @returns false if all voxels considered + * [current Step ends inside same voxel or leaves all voxels] + * true otherwise + * [the information on the next voxel is saved]. + */ G4bool LocateNextVoxel( const G4ThreeVector& localPoint, const G4ThreeVector& localDirection, const G4double currentStep ); - G4SmartVoxelNode* VoxelLocateLight( G4SmartVoxelHeader* pHead, - const G4ThreeVector& localPoint ) const; - private: // Logging functions void PreComputeStepLog (const G4VPhysicalVolume* motherPhysical, @@ -142,49 +225,50 @@ class G4VoxelNavigation : public G4VNavigation G4double sampleStep); protected: + /** Blocked volumes. */ G4BlockingList fBList; - // Blocked volumes - // - // BEGIN Voxel Stack information - // + // ----------------------------------------------------------------------- + // BEGIN Voxel Stack information + /** Voxels depth. + * @note fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel + * fVoxelDepth==-1 -> not in voxel. + */ G4int fVoxelDepth = -1; - // Note: fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel - // fVoxelDepth==-1 -> not in voxel + /** Voxel axes. */ std::vector fVoxelAxisStack; - // Voxel axes + /** No slices per voxel at each level. */ std::vector fVoxelNoSlicesStack; - // No slices per voxel at each level + /** Width of voxels at each level. */ std::vector fVoxelSliceWidthStack; - // Width of voxels at each level + /** Node no point is inside at each level. */ std::vector fVoxelNodeNoStack; - // Node no point is inside at each level + /** Voxel headers at each level. */ std::vector fVoxelHeaderStack; - // Voxel headers at each level + /** Node containing last located point. */ G4SmartVoxelNode* fVoxelNode = nullptr; - // Node containing last located point - // - // END Voxel Stack information - // + // END Voxel Stack information + // ----------------------------------------------------------------------- + /** Helper object for Voxel Safety. */ G4VoxelSafety* fpVoxelSafety = nullptr; - // Helper object for Voxel Safety + /** Surface tolerance. */ G4double fHalfTolerance; - // Surface tolerance + /** Flag for best safety. */ G4bool fBestSafety = false; + /** Verbosity logger. */ G4NavigationLogger* fLogger; - // Verbosity logger }; #include "G4VoxelNavigation.icc" diff --git a/source/geometry/navigation/include/G4VoxelNavigation.icc b/source/geometry/navigation/include/G4VoxelNavigation.icc index 08c67ea3a1..e096e7cf08 100644 --- a/source/geometry/navigation/include/G4VoxelNavigation.icc +++ b/source/geometry/navigation/include/G4VoxelNavigation.icc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4VoxelNavigation Inline implementation +// Class G4VoxelNavigation inline methods implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- // ******************************************************************** diff --git a/source/geometry/navigation/include/G4VoxelSafety.hh b/source/geometry/navigation/include/G4VoxelSafety.hh index bd3b0a4f76..a872c5a7b5 100644 --- a/source/geometry/navigation/include/G4VoxelSafety.hh +++ b/source/geometry/navigation/include/G4VoxelSafety.hh @@ -23,19 +23,18 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// -// class G4VoxelSafety +// G4VoxelSafety // // Class description: // // Utility for isotropic safety in volumes containing only G4PVPlacement // daughter volumes for which voxels have been constructed. +// Implementation extracted and modified/adapted from G4VoxelNavigation class. -// History: -// - Created. John Apostolakis, 30 April 2010 +// Author: John Apostolakis (CERN), 30 April 2010 // -------------------------------------------------------------------- #ifndef G4VOXELSAFETY_HH -#define G4VOXELSAFETY_HH +#define G4VOXELSAFETY_HH 1 #include "geomdefs.hh" #include "G4NavigationHistory.hh" @@ -52,75 +51,104 @@ class G4SmartVoxelNode; class G4SmartVoxelHeader; +/** + * @brief G4VoxelSafety is an utility class for the handling isotropic safety + * in volumes containing only G4PVPlacement daughter volumes for which voxels + * have been constructed. + */ + class G4VoxelSafety { - public: // with description + public: + /** + * Constructor and Destructor. + */ G4VoxelSafety(); ~G4VoxelSafety(); - G4SmartVoxelNode* VoxelLocate( G4SmartVoxelHeader* pHead, - const G4ThreeVector& localPoint ); - - G4double ComputeSafety( const G4ThreeVector& localPoint, + /** + * Calculates the isotropic distance to the nearest boundary from the + * specified point in the local coordinate system. + * The localpoint utilised must be within the current volume. + * @param[in] localPoint Local point. + * @param[in] currentPhysical Current physical volume. + * @param[in] maxLength Maximum length beyond which volumes are not checked. + * @returns Isotropic distance of given point to closest surface. + */ + G4double ComputeSafety( const G4ThreeVector& localPoint, const G4VPhysicalVolume& currentPhysical, - G4double maxLength = DBL_MAX ); + G4double maxLength = DBL_MAX ); + /** + * Verbosity control. + * @note If level>0 && G4VERBOSE, printout can occur. + */ inline G4int GetVerboseLevel() const { return fVerbose; } inline void SetVerboseLevel(G4int level) { fVerbose = level; } - // - // If level>0 && G4VERBOSE, printout can occur protected: - G4double SafetyForVoxelHeader( const G4SmartVoxelHeader* pHead, - const G4ThreeVector& localPoint, - G4double maxLength, - const G4VPhysicalVolume& currentPhysical, - G4double distUpperDepth = 0.0, - G4double previousMinSafety = DBL_MAX - ); + /** + * Cycles through levels of headers to process each node level. + * @param[in] pHead Voxel header. + * @param[in] localPoint Local point. + * @param[in] maxLength Maximum length beyond which volumes are not checked. + * @param[in] currentPhysical Current volume (used for debug printout). + * @param[in] distUpperDepth Upper square distance from voxel. + * @param[in] previousMinSafety Minimum distance beyond which not to look. + * @returns Isotropic distance of the point to closest volume in all nodes. + */ + G4double SafetyForVoxelHeader( const G4SmartVoxelHeader* pHead, + const G4ThreeVector& localPoint, + G4double maxLength, + const G4VPhysicalVolume& currentPhysical, + G4double distUpperDepth = 0.0, + G4double previousMinSafety = DBL_MAX ); - G4double SafetyForVoxelNode( const G4SmartVoxelNode *curVoxelNode, - const G4ThreeVector& localPoint ); + /** + * Calculates the safety for volumes included in current Voxel Node. + * @param[in] curVoxelNode Voxel node. + * @param[in] localPoint Local point. + * @returns Isotropic distance of given point to closest volume in node. + */ + G4double SafetyForVoxelNode( const G4SmartVoxelNode* curVoxelNode, + const G4ThreeVector& localPoint ); - G4SmartVoxelNode* VoxelLocateLight( G4SmartVoxelHeader* pHead, - const G4ThreeVector& localPoint ) const; private: - // BEGIN State - values used during computation of Safety - // - G4BlockingList fBlockList; - // Blocked volumes + // ---- BEGIN State - values used during computation of Safety ------------ + /** Blocked volumes */ + G4BlockingList fBlockList; + + /** Cached pointer to mother logical volume */ G4LogicalVolume* fpMotherLogical = nullptr; - // BEGIN Voxel Stack information - // + // ---- BEGIN Voxel Stack information ------------------------------------- + + /** Voxel depth + * @note fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel + * fVoxelDepth==-1 -> not in voxel. + */ G4int fVoxelDepth = -1; - // Note: fVoxelDepth==0+ => fVoxelAxisStack(0+) contains axes of voxel - // fVoxelDepth==-1 -> not in voxel + /** Voxel axes */ std::vector fVoxelAxisStack; - // Voxel axes + /** No slices per voxel at each level */ std::vector fVoxelNoSlicesStack; - // No slices per voxel at each level + /** Width of voxels at each level */ std::vector fVoxelSliceWidthStack; - // Width of voxels at each level + /** Node no point is inside at each level */ std::vector fVoxelNodeNoStack; - // Node no point is inside at each level + /** Voxel headers at each level */ std::vector fVoxelHeaderStack; - // Voxel headers at each level - G4SmartVoxelNode* fVoxelNode = nullptr; - // Node containing last located point - - // - // END Voxel Stack information + // ----- END Voxel Stack information -------------------------------------- G4bool fCheck = false; G4int fVerbose = 0; diff --git a/source/geometry/navigation/sources.cmake b/source/geometry/navigation/sources.cmake index 84e7383122..bcbb4426d1 100644 --- a/source/geometry/navigation/sources.cmake +++ b/source/geometry/navigation/sources.cmake @@ -24,6 +24,7 @@ geant4_add_module(G4navigation G4ParameterisedNavigation.icc G4PartialPhantomParameterisation.hh G4PathFinder.hh + G4PathFinder.icc G4PhantomParameterisation.hh G4PhantomParameterisation.icc G4PropagatorInField.hh @@ -33,7 +34,9 @@ geant4_add_module(G4navigation G4ReplicaNavigation.hh G4ReplicaNavigation.icc G4SafetyCalculator.hh + G4SafetyCalculator.icc G4SafetyHelper.hh + G4SafetyHelper.icc G4SimpleLocator.hh G4TransportationManager.hh G4TransportationManager.icc diff --git a/source/geometry/navigation/src/G4AuxiliaryNavServices.cc b/source/geometry/navigation/src/G4AuxiliaryNavServices.cc index d89deb35b4..aaabe130e4 100644 --- a/source/geometry/navigation/src/G4AuxiliaryNavServices.cc +++ b/source/geometry/navigation/src/G4AuxiliaryNavServices.cc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4AuxiliaryNavServices implementation +// Class G4AuxiliaryNavServices implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #include "G4AuxiliaryNavServices.hh" diff --git a/source/geometry/navigation/src/G4BrentLocator.cc b/source/geometry/navigation/src/G4BrentLocator.cc index 9df3a645d5..145434b9c6 100644 --- a/source/geometry/navigation/src/G4BrentLocator.cc +++ b/source/geometry/navigation/src/G4BrentLocator.cc @@ -23,11 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4BrentLocator implementation +// Class G4BrentLocator implementation // -// 27.10.08 - Tatiana Nikitina. -// 04.10.11 - John Apostolakis, revised convergence to use Surface Normal -// --------------------------------------------------------------------------- +// Author: Tatiana Nikitina (CERN), 27 October 2008 +// -------------------------------------------------------------------- #include diff --git a/source/geometry/navigation/src/G4DrawVoxels.cc b/source/geometry/navigation/src/G4DrawVoxels.cc index 0683701bb1..a68d79fed0 100644 --- a/source/geometry/navigation/src/G4DrawVoxels.cc +++ b/source/geometry/navigation/src/G4DrawVoxels.cc @@ -23,11 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4DrawVoxels implementation +// Class G4DrawVoxels implementation // -// Define G4DrawVoxelsDebug for debugging information on G4cout -// -// 29/07/1999 first comitted version L.G. +// Original author: L.G., 29 July 1999 // -------------------------------------------------------------------- #include "G4DrawVoxels.hh" @@ -42,7 +40,8 @@ #define voxel_width 0 -// Private Constructor +// -------------------------------------------------------------------- +// Constructor // G4DrawVoxels::G4DrawVoxels() { @@ -52,6 +51,7 @@ G4DrawVoxels::G4DrawVoxels() fBoundingBoxVisAttributes.SetColour(G4Colour(.3,0.,.2)); } +// -------------------------------------------------------------------- // Methods that allow changing colors of the drawing // void G4DrawVoxels::SetVoxelsVisAttributes(G4VisAttributes& VA_voxelX, diff --git a/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc b/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc index 991a25e7c6..b35ed315cb 100644 --- a/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc +++ b/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ErrorPropagationNavigator implementation +// Class G4ErrorPropagationNavigator implementation // -// Author: Pedro Arce, CIEMAT +// Author: Pedro Arce (CIEMAT), September 2004 // -------------------------------------------------------------------- #include "G4ErrorPropagationNavigator.hh" @@ -39,8 +39,8 @@ #include "G4ErrorCylSurfaceTarget.hh" G4double G4ErrorPropagationNavigator:: -ComputeStep ( const G4ThreeVector &pGlobalPoint, - const G4ThreeVector &pDirection, +ComputeStep ( const G4ThreeVector& pGlobalPoint, + const G4ThreeVector& pDirection, const G4double pCurrentProposedStepLength, G4double &pNewSafety ) { @@ -135,7 +135,7 @@ TargetSafetyFromPoint( const G4ThreeVector& pGlobalpoint ) //------------------------------------------------------------------- G4double G4ErrorPropagationNavigator:: -ComputeSafety( const G4ThreeVector &pGlobalPoint, +ComputeSafety( const G4ThreeVector& pGlobalPoint, const G4double pMaxLength, const G4bool keepState ) { diff --git a/source/geometry/navigation/src/G4GeomTestVolume.cc b/source/geometry/navigation/src/G4GeomTestVolume.cc index 0985c15693..b0435a9b66 100644 --- a/source/geometry/navigation/src/G4GeomTestVolume.cc +++ b/source/geometry/navigation/src/G4GeomTestVolume.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GeomTestVolume implementation +// Class G4GeomTestVolume implementation // -// Author: G.Cosmo, CERN +// Author: Gabriele Cosmo (CERN), 22 August 2013 // -------------------------------------------------------------------- #include @@ -196,7 +196,7 @@ void G4GeomTestVolume::TestRecursiveOverlap( G4int slevel, G4int depth ) std::set tested; const G4LogicalVolume *logical = target->GetLogicalVolume(); - auto nDaughter = (G4int)logical->GetNoDaughters(); + auto nDaughter = (G4int)logical->GetNoDaughters(); for( auto iDaughter=0; iDaughterGetDaughter(iDaughter); diff --git a/source/geometry/navigation/src/G4GeometryMessenger.cc b/source/geometry/navigation/src/G4GeometryMessenger.cc index 7657b2db93..36ad4bc327 100644 --- a/source/geometry/navigation/src/G4GeometryMessenger.cc +++ b/source/geometry/navigation/src/G4GeometryMessenger.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GeometryMessenger implementation +// Class G4GeometryMessenger implementation // -// Author: G.Cosmo, CERN +// Author: Gabriele Cosmo (CERN), 24 October 2001. // -------------------------------------------------------------------- #include @@ -44,6 +44,7 @@ #include "G4UIcmdWithABool.hh" #include "G4UIcmdWithAnInteger.hh" #include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" #include "G4GeomTestVolume.hh" @@ -161,7 +162,7 @@ G4GeometryMessenger::G4GeometryMessenger(G4TransportationManager* tman) parCmd->SetParameterName("check_parallel",true); parCmd->SetDefaultValue(true); - recCmd = new G4UIcmdWithoutParameter( "/geometry/test/run", this ); + recCmd = new G4UIcmdWithAString( "/geometry/test/run", this ); recCmd->SetGuidance( "Start running the recursive overlap check." ); recCmd->SetGuidance( "Volumes are recursively asked to verify for overlaps" ); recCmd->SetGuidance( "for points generated on the surface against their" ); @@ -170,6 +171,18 @@ G4GeometryMessenger::G4GeometryMessenger(G4TransportationManager* tman) recCmd->SetGuidance( "daughters, etc." ); recCmd->SetGuidance( "NOTE: it may take a very long time," ); recCmd->SetGuidance( " depending on the geometry complexity !"); + recCmd->SetGuidance("Specify the overlap check mode."); + recCmd->SetGuidance(" placed: Check overlaps in all placed volumes (default)"); + recCmd->SetGuidance(" This includes every instance of repeated placements"); + recCmd->SetGuidance(" logical: Check overlaps only among daughters of each logical volume."); + recCmd->SetGuidance(" This avoids duplicate reports and improves performance."); + recCmd->SetParameterName("check_mode",true); + + const std::string candidates_list = OverlapMode::placed + + " " + OverlapMode::logical; + + recCmd->SetCandidates(candidates_list.c_str()); + recCmd->SetDefaultValue(OverlapMode::placed.c_str()); recCmd->AvailableForStates(G4State_Idle); } @@ -183,9 +196,7 @@ G4GeometryMessenger::~G4GeometryMessenger() delete errCmd; delete parCmd; delete tolCmd; delete verbCmd; delete pchkCmd; delete chkCmd; delete geodir; delete navdir; delete testdir; - for(auto* tvolume: tvolumes) { - delete tvolume; - } + for (const auto* tvolume: tvolumes) { delete tvolume; } } // @@ -202,11 +213,12 @@ G4GeometryMessenger::Init() // const auto noWorlds = tmanager->GetNoWorlds(); const auto fWorld = tmanager->GetWorldsIterator(); - for(size_t i=0;iTestRecursiveOverlap( recLevel, recDepth ); } } + +// +// Tree Overlap Test +// +void +G4GeometryMessenger::TreeOverlapTest() +{ + // Close geometry if necessary + // + CheckGeometry(); + + // Make test on single line supplied by user recursively + // + if (checkParallelWorlds) + { + for(const auto* tvolume: tvolumes) + { + tvolume->TestOverlapInTree(); + } + } + else + { + tvolumes.front()->TestOverlapInTree(); + } +} + diff --git a/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc b/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc index 5ac5126b52..601775d3b0 100644 --- a/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc +++ b/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc @@ -23,11 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4GlobalMagFieldMessenger +// Class G4GlobalMagFieldMessenger implementation // -// Implementation of the G4GlobalMagFieldMessenger class -// -// Author: Ivana Hrivnacova, 28/08/2013 (ivana@ipno.in2p3.fr) +// Author: Ivana Hrivnacova (IN2P3/IJCLab Orsay), 28 August 2013 // -------------------------------------------------------------------- #include "G4GlobalMagFieldMessenger.hh" diff --git a/source/geometry/navigation/src/G4LocatorChangeLogger.cc b/source/geometry/navigation/src/G4LocatorChangeLogger.cc index ed8a0bb6be..669bdc1f2d 100644 --- a/source/geometry/navigation/src/G4LocatorChangeLogger.cc +++ b/source/geometry/navigation/src/G4LocatorChangeLogger.cc @@ -25,16 +25,23 @@ // // G4LocatorChangeLogger class implementation // -// Author: John Apostolakis, 04.09.19 - First version +// Author: John Apostolakis (CERN), 04 September 2019 // -------------------------------------------------------------------- #include #include #include -// #include #include "G4LocatorChangeLogger.hh" +// -------------------------------------------------------------------- +// Constructor +// +G4LocatorChangeLogger::G4LocatorChangeLogger( const std::string& name ) + : fName(name) +{ +} + // -------------------------------------------------------------------- // Streaming operator dumping record // diff --git a/source/geometry/navigation/src/G4LocatorChangeRecord.cc b/source/geometry/navigation/src/G4LocatorChangeRecord.cc index 33037f50ab..715eab5701 100644 --- a/source/geometry/navigation/src/G4LocatorChangeRecord.cc +++ b/source/geometry/navigation/src/G4LocatorChangeRecord.cc @@ -25,13 +25,12 @@ // // G4LocatorChangeRecord class implementation // -// Author: John Apostolakis, 28.08.19 - First version +// Author: John Apostolakis (CERN), 27 August 2019 // -------------------------------------------------------------------- #include #include #include -// #include #include "G4LocatorChangeRecord.hh" @@ -43,6 +42,20 @@ const char * G4LocatorChangeRecord::fNameChangeLocation[] = "InsertingMidPoint", "RecalculatedB-2ndHalf", // 2 "Level Pop" }; +// -------------------------------------------------------------------- +// +G4LocatorChangeRecord:: +G4LocatorChangeRecord( EChangeLocation codeLocation, + G4int iter, + unsigned int count, + const G4FieldTrack& fieldTrack ) + : fCodeLocation( codeLocation), + fIteration(iter), + fEventCount(count), + fFieldTrack( fieldTrack ) +{ +} + // -------------------------------------------------------------------- // std::ostream& G4LocatorChangeRecord::ReportVector ( std::ostream& os, diff --git a/source/geometry/navigation/src/G4MultiLevelLocator.cc b/source/geometry/navigation/src/G4MultiLevelLocator.cc index a31c87b1cc..4f71498ad2 100644 --- a/source/geometry/navigation/src/G4MultiLevelLocator.cc +++ b/source/geometry/navigation/src/G4MultiLevelLocator.cc @@ -25,9 +25,8 @@ // // Class G4MultiLevelLocator implementation // -// 27.10.08 - Tatiana Nikitina. -// 04.10.11 - John Apostolakis, revised convergence to use Surface Normal -// --------------------------------------------------------------------------- +// Author: Tatiana Nikitina (CERN), 27 October 2008 +// -------------------------------------------------------------------- #include diff --git a/source/geometry/navigation/src/G4MultiNavigator.cc b/source/geometry/navigation/src/G4MultiNavigator.cc index fc6ed186b1..8e053541ab 100644 --- a/source/geometry/navigation/src/G4MultiNavigator.cc +++ b/source/geometry/navigation/src/G4MultiNavigator.cc @@ -25,15 +25,13 @@ // // class G4MultiNavigator Implementation // -// Author: John Apostolakis, November 2006 +// Author: John Apostolakis (CERN), November 2006 // -------------------------------------------------------------------- #include #include "G4MultiNavigator.hh" -class G4FieldManager; - #include "G4SystemOfUnits.hh" #include "G4Navigator.hh" #include "G4PropagatorInField.hh" @@ -73,10 +71,6 @@ G4MultiNavigator::G4MultiNavigator() // ----------------------------------------------------------------------- -G4MultiNavigator::~G4MultiNavigator() = default; - -// ----------------------------------------------------------------------- - G4double G4MultiNavigator::ComputeStep(const G4ThreeVector& pGlobalPoint, const G4ThreeVector& pDirection, const G4double proposedStepLength, diff --git a/source/geometry/navigation/src/G4NavigationLogger.cc b/source/geometry/navigation/src/G4NavigationLogger.cc index c11e4a0602..2c05a985cd 100644 --- a/source/geometry/navigation/src/G4NavigationLogger.cc +++ b/source/geometry/navigation/src/G4NavigationLogger.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4NavigationLogger Implementation +// Class G4NavigationLogger Implementation // -// Author: G.Cosmo, 2010 +// Author: Gabriele Cosmo (CERN), November 2010 // -------------------------------------------------------------------- #include @@ -36,6 +36,11 @@ using CLHEP::millimeter; +namespace G4NavigationLogger_Namespace +{ + const G4String EInsideNames[3] = { "kOutside", "kSurface", "kInside" }; +} + G4NavigationLogger::G4NavigationLogger(const G4String& id) : fId(id) { @@ -710,13 +715,6 @@ G4NavigationLogger::ReportOutsideMother(const G4ThreeVector& localPoint, // 2. Inconsistency - Too many distances are zero (or will be rounded to zero) -// if( std::fabs(distToOut) < kCarTolerance -// && std::fabs(distToInPos) < kCarTolerance ) -// { - // If both distanceToIn and distanceToOut (p,v) are zero for - // one direction, the particle could get stuck! -// } - G4ExceptionDescription msg; msg.precision(10); @@ -770,11 +768,10 @@ G4NavigationLogger::ReportOutsideMother(const G4ThreeVector& localPoint, G4Exception( fMethod, "GeomNav0003", exceptionType, msg); } -namespace G4NavigationLogger_Namespace -{ - const G4String EInsideNames[3] = { "kOutside", "kSurface", "kInside" }; -} - +// ******************************************************************** +// ReportVolumeAndIntersection +// ******************************************************************** +// void G4NavigationLogger:: ReportVolumeAndIntersection( std::ostream& os, const G4ThreeVector& localPoint, diff --git a/source/geometry/navigation/src/G4Navigator.cc b/source/geometry/navigation/src/G4Navigator.cc index ab9ad29d41..5e480d95db 100644 --- a/source/geometry/navigation/src/G4Navigator.cc +++ b/source/geometry/navigation/src/G4Navigator.cc @@ -25,9 +25,9 @@ // // G4Navigator class Implementation // -// Original author: Paul Kent, July 95/96 -// Responsible 1996-present: John Apostolakis, Gabriele Cosmo -// Additional revisions by: Pedro Arce, Vladimir Grichine +// Original author: Paul Kent (CERN), July 1995-1996 +// Responsible 1996-present: John Apostolakis, Gabriele Cosmo (CERN) +// Additional revisions by: Pedro Arce (CIEMAT), Vladimir Grichine (CERN) // -------------------------------------------------------------------- #include @@ -655,7 +655,9 @@ G4Navigator::LocateGlobalPointWithinVolume(const G4ThreeVector& pGlobalpoint) // // Save the state, in case this is a parasitic call // Save fValidExitNormal, fExitNormal, fExiting, fEntering, -// fBlockedPhysicalVolume, fBlockedReplicaNo, fLastStepWasZero; +// fBlockedPhysicalVolume, fBlockedReplicaNo, fLastStepWasZero, +// fLastLocatedPointLocal, fLocatedOutsideWorld, fEnteredDaughter, +// fExitedMother, fPreviousSftOrigin, fPreviousSafety. // ******************************************************************** // void G4Navigator::SetSavedState() diff --git a/source/geometry/navigation/src/G4NormalNavigation.cc b/source/geometry/navigation/src/G4NormalNavigation.cc index 03eca6b195..f4b9d724f3 100644 --- a/source/geometry/navigation/src/G4NormalNavigation.cc +++ b/source/geometry/navigation/src/G4NormalNavigation.cc @@ -23,10 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4NormalNavigation Implementation -// -// Author: P.Kent, 1996 +// Class G4NormalNavigation Implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #include "G4NormalNavigation.hh" diff --git a/source/geometry/navigation/src/G4ParameterisedNavigation.cc b/source/geometry/navigation/src/G4ParameterisedNavigation.cc index 23e04b6f80..2f1aa48689 100644 --- a/source/geometry/navigation/src/G4ParameterisedNavigation.cc +++ b/source/geometry/navigation/src/G4ParameterisedNavigation.cc @@ -25,19 +25,17 @@ // // class G4ParameterisedNavigation Implementation // -// Initial Author: P.Kent, 1996 +// Original author: Paul Kent (CERN), August 1996 +// // Revisions: -// J. Apostolakis 24 Nov 2005, Revised/fixed treatment of nested params -// J. Apostolakis 4 Feb 2005, Reintroducting multi-level parameterisation -// for materials only - see note 1 below -// G. Cosmo 11 Mar 2004, Added Check mode -// G. Cosmo 15 May 2002, Extended to 3-d voxelisation, made subclass -// J. Apostolakis 5 Mar 1998, Enabled parameterisation of mat & solid type +// - J. Apostolakis 5 Mar 1998, Enabled parameterisation of mat & solid type +// - G. Cosmo 15 May 2002, Extended to 3-d voxelisation, made subclass +// - G. Cosmo 11 Mar 2004, Added Check mode +// - J. Apostolakis 24 Nov 2005, Revised/fixed treatment of nested params // -------------------------------------------------------------------- -// Note 1: Design/implementation note for extensions - JAp, March 1st, 2005 -// We cannot make the solid, dimensions and transformation dependent on -// parent because the voxelisation will not have access to this. +// Note: We cannot make the solid, dimensions and transformation dependent on +// parent because the voxelisation will not have access to this. // So the following can NOT be done: // sampleSolid = curParam->ComputeSolid(num, curPhysical, pParentTouch); // sampleSolid->ComputeDimensions(curParam, num, curPhysical, pParentTouch); diff --git a/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc b/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc index 693d494034..b28efb263f 100644 --- a/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc +++ b/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PartialPhantomParameterisation implementation +// Class G4PartialPhantomParameterisation implementation // -// May 2007 Pedro Arce (CIEMAT), first version +// Author: Pedro Arce (CIEMAT), September 2010 // -------------------------------------------------------------------- #include "G4PartialPhantomParameterisation.hh" diff --git a/source/geometry/navigation/src/G4PathFinder.cc b/source/geometry/navigation/src/G4PathFinder.cc index 2e3ef18709..b17a6779a0 100644 --- a/source/geometry/navigation/src/G4PathFinder.cc +++ b/source/geometry/navigation/src/G4PathFinder.cc @@ -25,7 +25,7 @@ // // G4PathFinder Implementation // -// Original author: John Apostolakis, April 2006 +// Author: John Apostolakis (CERN), 7 October 2005 // -------------------------------------------------------------------- #include @@ -797,7 +797,7 @@ G4PathFinder::CreateTouchableHandle( G4int navId ) const } #endif - return {touchHist}; + return touchHist; } G4double diff --git a/source/geometry/navigation/src/G4PhantomParameterisation.cc b/source/geometry/navigation/src/G4PhantomParameterisation.cc index 54540d1514..2e7b309782 100644 --- a/source/geometry/navigation/src/G4PhantomParameterisation.cc +++ b/source/geometry/navigation/src/G4PhantomParameterisation.cc @@ -23,10 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PhantomParameterisation implementation -// -// May 2007 Pedro Arce, first version +// Class G4PhantomParameterisation implementation // +// Author: Pedro Arce (CIEMAT), May 2007 // -------------------------------------------------------------------- #include "G4PhantomParameterisation.hh" diff --git a/source/geometry/navigation/src/G4PropagatorInField.cc b/source/geometry/navigation/src/G4PropagatorInField.cc index 66a006b49d..18629355ad 100644 --- a/source/geometry/navigation/src/G4PropagatorInField.cc +++ b/source/geometry/navigation/src/G4PropagatorInField.cc @@ -23,16 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PropagatorInField Implementation +// Class G4PropagatorInField Implementation // -// This class implements an algorithm to track a particle in a -// non-uniform magnetic field. It utilises an ODE solver (with -// the Runge - Kutta method) to evolve the particle, and drives it -// until the particle has traveled a set distance or it enters a new -// volume. -// -// 14.10.96 John Apostolakis, design and implementation -// 17.03.97 John Apostolakis, renaming new set functions being added +// Author: John Apostolakis (CERN), 25 October 1996 // --------------------------------------------------------------------------- #include diff --git a/source/geometry/navigation/src/G4RegularNavigation.cc b/source/geometry/navigation/src/G4RegularNavigation.cc index c4f420d061..9e1d662989 100644 --- a/source/geometry/navigation/src/G4RegularNavigation.cc +++ b/source/geometry/navigation/src/G4RegularNavigation.cc @@ -23,10 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4RegularNavigation implementation -// -// Author: Pedro Arce, May 2007 +// Class G4RegularNavigation implementation // +// Author: Pedro Arce (CIEMAT), May 2007 // -------------------------------------------------------------------- #include "G4RegularNavigation.hh" @@ -423,3 +422,10 @@ G4RegularNavigation::LevelLocate( G4NavigationHistory& history, pPhysical, &parentTouchable) ); return true; } + +//------------------------------------------------------------------ +void +G4RegularNavigation::SetNormalNavigation( G4NormalNavigation* fnormnav ) +{ + fnormalNav = fnormnav; +} diff --git a/source/geometry/navigation/src/G4RegularNavigationHelper.cc b/source/geometry/navigation/src/G4RegularNavigationHelper.cc index 0c26b4c2cf..6c5eb1384c 100644 --- a/source/geometry/navigation/src/G4RegularNavigationHelper.cc +++ b/source/geometry/navigation/src/G4RegularNavigationHelper.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4RegularNavigationHelper implementation +// Class G4RegularNavigationHelper implementation // -// Author: Pedro Arce, November 2008 +// Author: Pedro Arce (CIEMAT), November 2008 // -------------------------------------------------------------------- #include "G4RegularNavigationHelper.hh" @@ -36,14 +36,6 @@ G4RegularNavigationHelper* G4RegularNavigationHelper::Instance() return theInstance.Instance(); } -// -------------------------------------------------------------------- -// -G4RegularNavigationHelper::G4RegularNavigationHelper() = default; - -// -------------------------------------------------------------------- -// -G4RegularNavigationHelper::~G4RegularNavigationHelper() = default; - // -------------------------------------------------------------------- // void G4RegularNavigationHelper::ClearStepLengths() diff --git a/source/geometry/navigation/src/G4ReplicaNavigation.cc b/source/geometry/navigation/src/G4ReplicaNavigation.cc index 2d36597a2f..a8193ccc0b 100644 --- a/source/geometry/navigation/src/G4ReplicaNavigation.cc +++ b/source/geometry/navigation/src/G4ReplicaNavigation.cc @@ -22,9 +22,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4ReplicaNavigation Implementation +// Class G4ReplicaNavigation Implementation // -// Author: P.Kent, 1996 +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- #include "G4ReplicaNavigation.hh" diff --git a/source/geometry/navigation/src/G4SafetyCalculator.cc b/source/geometry/navigation/src/G4SafetyCalculator.cc index 03766311c0..bcb45a457f 100644 --- a/source/geometry/navigation/src/G4SafetyCalculator.cc +++ b/source/geometry/navigation/src/G4SafetyCalculator.cc @@ -25,7 +25,7 @@ // // G4SafetyCalculator class Implementation // -// Author: John Apostolakis, CERN - February 2023 +// Author: John Apostolakis (CERN), February 2023 // -------------------------------------------------------------------- #include "G4SafetyCalculator.hh" diff --git a/source/geometry/navigation/src/G4SafetyHelper.cc b/source/geometry/navigation/src/G4SafetyHelper.cc index 6e28a3dd86..2e53da2547 100644 --- a/source/geometry/navigation/src/G4SafetyHelper.cc +++ b/source/geometry/navigation/src/G4SafetyHelper.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4SafetyHelper Implementation +// Class G4SafetyHelper Implementation // -// Original author: John Apostolakis, 2006 +// Author: John Apostolakis (CERN), 5 July 2006 // -------------------------------------------------------------------- #include "G4SafetyHelper.hh" @@ -71,8 +71,7 @@ void G4SafetyHelper::InitialiseHelper() fFirstCall = false; } -G4SafetyHelper::~G4SafetyHelper() = default; - +// -------------------------------------------------------------------- G4double G4SafetyHelper::CheckNextStep(const G4ThreeVector& position, const G4ThreeVector& direction, diff --git a/source/geometry/navigation/src/G4SimpleLocator.cc b/source/geometry/navigation/src/G4SimpleLocator.cc index ebb84fb9ea..b7519e305c 100644 --- a/source/geometry/navigation/src/G4SimpleLocator.cc +++ b/source/geometry/navigation/src/G4SimpleLocator.cc @@ -25,8 +25,7 @@ // // Class G4SimpleLocator implementation // -// 27.10.08 - Tatiana Nikitina, extracted from G4PropagatorInField class -// 04.10.11 - John Apostolakis, revised convergence to use Surface Normal +// Author: Tatiana Nikitina (CERN), 27 October 20008. // --------------------------------------------------------------------------- #include diff --git a/source/geometry/navigation/src/G4TransportationManager.cc b/source/geometry/navigation/src/G4TransportationManager.cc index 1b7e0abe61..ebb157b3a7 100644 --- a/source/geometry/navigation/src/G4TransportationManager.cc +++ b/source/geometry/navigation/src/G4TransportationManager.cc @@ -25,8 +25,8 @@ // // Class G4TransportationManager implementation // -// Created : J.Apostolakis, 1997 -// Reviewed: G.Cosmo, 2006 +// Created: John Apostolakis (CERN), 10 March 1997 +// Reviewed: Gabriele Cosmo (CERN), 26 April 2006 // -------------------------------------------------------------------- #include "G4TransportationManager.hh" @@ -44,8 +44,10 @@ G4ThreadLocal G4TransportationManager* G4TransportationManager::fTransportationManager = nullptr; -// The first registered navigator -- expect this to be the master thread's navigator -// If it has an external sub-navigator, it will be cloned for each worker thread. +// The first registered navigator. +// Expect this to be the master thread's navigator. If it has an external +// sub-navigator, it will be cloned for each worker thread. +// G4Navigator* G4TransportationManager::fFirstTrackingNavigator= nullptr; // ---------------------------------------------------------------------------- diff --git a/source/geometry/navigation/src/G4VExternalNavigation.cc b/source/geometry/navigation/src/G4VExternalNavigation.cc index bd05d8731d..821c23a0e9 100644 --- a/source/geometry/navigation/src/G4VExternalNavigation.cc +++ b/source/geometry/navigation/src/G4VExternalNavigation.cc @@ -25,7 +25,7 @@ // // G4VExternalNavigation Implementation // -// Authors: V.Vlachoudis, G.Cosmo - CERN, 2019 +// Authors: V.Vlachoudis, G.Cosmo (CERN), 2019 // -------------------------------------------------------------------- #include "G4VExternalNavigation.hh" @@ -55,8 +55,9 @@ EInside G4VExternalNavigation::Inside( const G4VSolid* solid, } // ******************************************************************** -// Inside call Inside() of a solid - +// RelocateWithinVolume +// ******************************************************************** +// void G4VExternalNavigation::RelocateWithinVolume( G4VPhysicalVolume* , // motherPhysical, const G4ThreeVector& ) // localPoint ) { diff --git a/source/geometry/navigation/src/G4VIntersectionLocator.cc b/source/geometry/navigation/src/G4VIntersectionLocator.cc index 054a615628..5206269bd0 100644 --- a/source/geometry/navigation/src/G4VIntersectionLocator.cc +++ b/source/geometry/navigation/src/G4VIntersectionLocator.cc @@ -25,7 +25,7 @@ // // Class G4VIntersectionLocator implementation // -// 27.10.08 - John Apostolakis, Tatiana Nikitina. +// Authors: John Apostolakis, Tatiana Nikitina (CERN), 27 October 2008 // --------------------------------------------------------------------------- #include diff --git a/source/geometry/navigation/src/G4VoxelNavigation.cc b/source/geometry/navigation/src/G4VoxelNavigation.cc index 382d1c0233..93718c55dc 100644 --- a/source/geometry/navigation/src/G4VoxelNavigation.cc +++ b/source/geometry/navigation/src/G4VoxelNavigation.cc @@ -23,11 +23,11 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4VoxelNavigation Implementation -// -// Author: P.Kent, 1996 +// Class G4VoxelNavigation Implementation // +// Author: Paul Kent (CERN), August 1996 // -------------------------------------------------------------------- + #include "G4VoxelNavigation.hh" #include "G4GeometryTolerance.hh" #include "G4VoxelSafety.hh" @@ -762,6 +762,10 @@ G4VoxelNavigation::ComputeSafety(const G4ThreeVector& localPoint, return ourSafety; } +// ******************************************************************** +// RelocateWithinVolume +// ******************************************************************** +// void G4VoxelNavigation::RelocateWithinVolume( G4VPhysicalVolume* motherPhysical, const G4ThreeVector& localPoint ) { diff --git a/source/geometry/navigation/src/G4VoxelSafety.cc b/source/geometry/navigation/src/G4VoxelSafety.cc index e9573cbc92..a93f3f7687 100644 --- a/source/geometry/navigation/src/G4VoxelSafety.cc +++ b/source/geometry/navigation/src/G4VoxelSafety.cc @@ -23,11 +23,11 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// Class G4VoxelSafety implementation // -// Author: John Apostolakis -// First version: 31 May 2010 -// +// Author: John Apostolakis (CERN), 30 April 2010 // -------------------------------------------------------------------- + #include "G4VoxelSafety.hh" #include "G4GeometryTolerance.hh" diff --git a/source/geometry/solids/Boolean/History b/source/geometry/solids/Boolean/History index ac07767d5d..bb5a4f7178 100644 --- a/source/geometry/solids/Boolean/History +++ b/source/geometry/solids/Boolean/History @@ -6,6 +6,15 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------ +## 2025-03-20 Evgueni Tcherniaev (geom-bool-V11-03-01) +- G4MultiUnion: some optimisation + o GetSurfaceArea(): used G4QuickRand() + o GetLocalPoint(), GetLocalVector(), GetGlobalPoint(), GetGlobalVector(): + direct usage of the transformation matrix elements + +## 2025-03-13 Evgueni Tcherniaev (geom-bool-V11-03-00) +- G4MultiUnion: fixed GetSurfaceArea() + ## 2024-07-26 Evgueni Tcherniaev (geom-bool-V11-02-03) - G4MultiUnion::GetCubicVolume(): used EstimateCubicVolume(). - G4BooleanSolid::SetCubVolStatistics(), G4BooleanSolid::SetCubVolEpsilon(): diff --git a/source/geometry/solids/Boolean/include/G4MultiUnion.hh b/source/geometry/solids/Boolean/include/G4MultiUnion.hh index 34471e0787..578987a834 100644 --- a/source/geometry/solids/Boolean/include/G4MultiUnion.hh +++ b/source/geometry/solids/Boolean/include/G4MultiUnion.hh @@ -224,7 +224,13 @@ G4ThreeVector G4MultiUnion::GetLocalPoint(const G4Transform3D& trans, // by the transformation. This is defined by multiplying the inverse // transformation with the global vector. - return trans.inverse()*G4Point3D(global); + G4double px = global.x() - trans.dx(); + G4double py = global.y() - trans.dy(); + G4double pz = global.z() - trans.dz(); + G4double x = trans.xx()*px + trans.yx()*py + trans.zx()*pz; + G4double y = trans.xy()*px + trans.yy()*py + trans.zy()*pz; + G4double z = trans.xz()*px + trans.yz()*py + trans.zz()*pz; + return { x, y, z }; } //______________________________________________________________________________ @@ -236,12 +242,13 @@ G4ThreeVector G4MultiUnion::GetLocalVector(const G4Transform3D& trans, // by the transformation. This is defined by multiplying the inverse // transformation with the global vector. - G4Rotate3D rot; - G4Translate3D transl ; - G4Scale3D scale; - - trans.getDecomposition(scale,rot,transl); - return rot.inverse()*G4Vector3D(global); + G4double vx = global.x(); + G4double vy = global.y(); + G4double vz = global.z(); + G4double x = trans.xx()*vx + trans.yx()*vy + trans.zx()*vz; + G4double y = trans.xy()*vx + trans.yy()*vy + trans.zy()*vz; + G4double z = trans.xz()*vx + trans.yz()*vy + trans.zz()*vz; + return { x, y, z }; } //______________________________________________________________________________ @@ -253,7 +260,13 @@ G4ThreeVector G4MultiUnion::GetGlobalPoint(const G4Transform3D& trans, // by the transformation. This is defined by multiplying this transformation // with the local vector. - return trans*G4Point3D(local); + G4double px = local.x(); + G4double py = local.y(); + G4double pz = local.z(); + G4double x = trans.xx()*px + trans.xy()*py + trans.xz()*pz + trans.dx(); + G4double y = trans.yx()*px + trans.yy()*py + trans.yz()*pz + trans.dy(); + G4double z = trans.zx()*px + trans.zy()*py + trans.zz()*pz + trans.dz(); + return { x, y, z }; } //______________________________________________________________________________ @@ -265,12 +278,13 @@ G4ThreeVector G4MultiUnion::GetGlobalVector(const G4Transform3D& trans, // transformation to the global one. This is defined by multiplying this // transformation with the local vector while ignoring the translation. - G4Rotate3D rot; - G4Translate3D transl ; - G4Scale3D scale; - - trans.getDecomposition(scale,rot,transl); - return rot*G4Vector3D(local); + G4double vx = local.x(); + G4double vy = local.y(); + G4double vz = local.z(); + G4double x = trans.xx()*vx + trans.xy()*vy + trans.xz()*vz; + G4double y = trans.yx()*vx + trans.yy()*vy + trans.yz()*vz; + G4double z = trans.zx()*vx + trans.zy()*vy + trans.zz()*vz; + return { x, y, z }; } #endif diff --git a/source/geometry/solids/Boolean/src/G4MultiUnion.cc b/source/geometry/solids/Boolean/src/G4MultiUnion.cc index fd8a50d4b8..5315682240 100644 --- a/source/geometry/solids/Boolean/src/G4MultiUnion.cc +++ b/source/geometry/solids/Boolean/src/G4MultiUnion.cc @@ -33,11 +33,11 @@ #include #include "G4MultiUnion.hh" -#include "Randomize.hh" #include "G4GeometryTolerance.hh" #include "G4BoundingEnvelope.hh" #include "G4AffineTransform.hh" #include "G4DisplacedSolid.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" @@ -799,7 +799,7 @@ G4double G4MultiUnion::GetSurfaceArea() { if (fSurfaceArea == 0.0) { - fSurfaceArea = EstimateSurfaceArea(1000000, 0.001); + fSurfaceArea = EstimateSurfaceArea(1000000, -1.); } return fSurfaceArea; } @@ -943,19 +943,16 @@ std::ostream& G4MultiUnion::StreamInfo(std::ostream& os) const G4ThreeVector G4MultiUnion::GetPointOnSurface() const { G4ThreeVector point; - G4long size = fSolids.size(); - do { - G4long rnd = G4RandFlat::shootInt(G4long(0), size); + G4long rnd = (G4long)(G4QuickRand()*size); G4VSolid& solid = *fSolids[rnd]; - point = solid.GetPointOnSurface(); + G4ThreeVector p = solid.GetPointOnSurface(); const G4Transform3D& transform = fTransformObjs[rnd]; - point = GetGlobalPoint(transform, point); + point = GetGlobalPoint(transform, p); } while (Inside(point) != EInside::kSurface); - return point; } diff --git a/source/geometry/solids/CSG/History b/source/geometry/solids/CSG/History index ba3df0dae6..3156cc6acf 100644 --- a/source/geometry/solids/CSG/History +++ b/source/geometry/solids/CSG/History @@ -6,11 +6,23 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-04 Ben Morgan (geom-csg-V11-02-04) +## 2025-04-04 Evgueni Tcherniaev (geom-csg-V11-03-04) +- G4Box: Code restructuring in DistanceToOut(). + +## 2025-03-11 Evgueni Tcherniaev (geom-csg-V11-03-03) +- G4Orb: Faster algorithm in GetPointOnSurface(). +- G4Para: Faster calculation of surface area in + GetSurfaceArea() and GetPointOnSurface(). + +## 2025-03-05 Evgueni Tcherniaev (geom-csg-V11-03-02) +- G4Box, G4Para, G4Trd: Code optimization in GetPointOnSurface(). +- G4Torus: Implemented uniform sampling of random points on surface. + +## 2025-03-04 Ben Morgan (geom-csg-V11-03-01) - Hide all ENorm/ESide enums in anonymous namespaces to prevent ODR warnings. - Identified in ATLAS Athena code built against v11.3.0. -## 2025-02-03 Gabriele Cosmo +## 2025-02-03 Gabriele Cosmo (geom-csg-V11-03-00) - Removed fake default constructor from G4U* wrappers, clearing compilation warnings on gcc-14. diff --git a/source/geometry/solids/CSG/src/G4Box.cc b/source/geometry/solids/CSG/src/G4Box.cc index 1d822229ad..62772de397 100644 --- a/source/geometry/solids/CSG/src/G4Box.cc +++ b/source/geometry/solids/CSG/src/G4Box.cc @@ -255,15 +255,13 @@ EInside G4Box::Inside(const G4ThreeVector& p) const // // Detect the side(s) and return corresponding normal -G4ThreeVector G4Box::SurfaceNormal( const G4ThreeVector& p) const +G4ThreeVector G4Box::SurfaceNormal(const G4ThreeVector& p) const { - G4ThreeVector norm(0,0,0); - G4double px = p.x(); - if (std::abs(std::abs(px) - fDx) <= delta) norm.setX(px < 0 ? -1. : 1.); - G4double py = p.y(); - if (std::abs(std::abs(py) - fDy) <= delta) norm.setY(py < 0 ? -1. : 1.); - G4double pz = p.z(); - if (std::abs(std::abs(pz) - fDz) <= delta) norm.setZ(pz < 0 ? -1. : 1.); + G4double px = p.x(), py = p.y(), pz = p.z(); + G4ThreeVector norm(0.,0.,0.); + if (std::abs(std::abs(px) - fDx) <= delta) norm.setX(std::copysign(1.,px)); + if (std::abs(std::abs(py) - fDy) <= delta) norm.setY(std::copysign(1.,py)); + if (std::abs(std::abs(pz) - fDz) <= delta) norm.setZ(std::copysign(1.,pz)); G4double nside = norm.mag2(); // number of sides = magnitude squared if (nside == 1) @@ -369,63 +367,56 @@ G4double G4Box::DistanceToIn(const G4ThreeVector& p) const // find normal at exit point, if required // - when leaving the surface, return 0 -G4double G4Box::DistanceToOut( const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcNorm, - G4bool* validNorm, G4ThreeVector* n) const +G4double G4Box::DistanceToOut(const G4ThreeVector& p, + const G4ThreeVector& v, + const G4bool calcNorm, + G4bool* validNorm, G4ThreeVector* n) const { + G4double px = p.x(), vx = v.x(); + G4double py = p.y(), vy = v.y(); + G4double pz = p.z(), vz = v.z(); + + if (!calcNorm) // calculation of normal is not needed + { + if ((std::abs(px) - fDx) >= -delta && px*vx > 0) return 0.; + if ((std::abs(py) - fDy) >= -delta && py*vy > 0) return 0.; + if ((std::abs(pz) - fDz) >= -delta && pz*vz > 0) return 0.; + G4double tx = (vx == 0) ? DBL_MAX : (std::copysign(fDx,vx) - px)/vx; + G4double ty = (vy == 0) ? DBL_MAX : (std::copysign(fDy,vy) - py)/vy; + G4double tz = (vz == 0) ? DBL_MAX : (std::copysign(fDz,vz) - pz)/vz; + G4double tmax = std::min(std::min(tx,ty),tz); + return tmax; + } + + *validNorm = true; // Check if point is on the surface and traveling away - // - if ((std::abs(p.x()) - fDx) >= -delta && p.x()*v.x() > 0) + if ((std::abs(px) - fDx) >= -delta && px*vx > 0) { - if (calcNorm) - { - *validNorm = true; - n->set((p.x() < 0) ? -1. : 1., 0., 0.); - } + n->set(std::copysign(1.,px), 0., 0.); return 0.; } - if ((std::abs(p.y()) - fDy) >= -delta && p.y()*v.y() > 0) + if ((std::abs(py) - fDy) >= -delta && py*vy > 0) { - if (calcNorm) - { - *validNorm = true; - n->set(0., (p.y() < 0) ? -1. : 1., 0.); - } + n->set(0., std::copysign(1.,py), 0.); return 0.; } - if ((std::abs(p.z()) - fDz) >= -delta && p.z()*v.z() > 0) + if ((std::abs(pz) - fDz) >= -delta && pz*vz > 0) { - if (calcNorm) - { - *validNorm = true; - n->set(0., 0., (p.z() < 0) ? -1. : 1.); - } + n->set(0., 0., std::copysign(1.,pz)); return 0.; } // Find intersection - // - G4double vx = v.x(); - G4double tx = (vx == 0) ? DBL_MAX : (std::copysign(fDx,vx) - p.x())/vx; + G4double tx = (vx == 0) ? DBL_MAX : (std::copysign(fDx,vx) - px)/vx; + G4double ty = (vy == 0) ? DBL_MAX : (std::copysign(fDy,vy) - py)/vy; + G4double tz = (vz == 0) ? DBL_MAX : (std::copysign(fDz,vz) - pz)/vz; + G4double tmax = std::min(std::min(tx, ty), tz); - G4double vy = v.y(); - G4double ty = (vy == 0) ? tx : (std::copysign(fDy,vy) - p.y())/vy; - G4double txy = std::min(tx,ty); - - G4double vz = v.z(); - G4double tz = (vz == 0) ? txy : (std::copysign(fDz,vz) - p.z())/vz; - G4double tmax = std::min(txy,tz); - - // Set normal, if required, and return distance - // - if (calcNorm) - { - *validNorm = true; - if (tmax == tx) n->set((v.x() < 0) ? -1. : 1., 0., 0.); - else if (tmax == ty) n->set(0., (v.y() < 0) ? -1. : 1., 0.); - else n->set(0., 0., (v.z() < 0) ? -1. : 1.); - } + // Find normal + G4double nx = std::copysign((G4double)(tmax == tx), vx); + G4double ny = std::copysign((G4double)(tmax == ty && nx == 0), vy); + G4double nz = std::copysign((G4double)(tmax == tz && nx == 0 && ny == 0), vz); + n->set(nx, ny, nz); return tmax; } @@ -508,12 +499,26 @@ G4ThreeVector G4Box::GetPointOnSurface() const G4double u = 2.*G4QuickRand() - 1.; G4double v = 2.*G4QuickRand() - 1.; + G4double x, y, z; if (select < sxy) - return { u*fDx, v*fDy, ((select < 0.5*sxy) ? -fDz : fDz) }; + { + x = u*fDx; + y = v*fDy; + z = (select < 0.5*sxy) ? -fDz : fDz; + } else if (select < sxy + sxz) - return { u*fDx, ((select < sxy + 0.5*sxz) ? -fDy : fDy), v*fDz }; + { + x = u*fDx; + y = (select < sxy + 0.5*sxz) ? -fDy : fDy; + z = v*fDz; + } else - return { ((select < sxy + sxz + 0.5*syz) ? -fDx : fDx), u*fDy, v*fDz }; + { + x = (select < sxy + sxz + 0.5*syz) ? -fDx : fDx; + y = u*fDy; + z = v*fDz; + } + return { x, y, z }; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4Orb.cc b/source/geometry/solids/CSG/src/G4Orb.cc index 941a5f58aa..617c797c2d 100644 --- a/source/geometry/solids/CSG/src/G4Orb.cc +++ b/source/geometry/solids/CSG/src/G4Orb.cc @@ -35,14 +35,11 @@ #include "G4TwoVector.hh" #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" -#include "G4GeometryTolerance.hh" #include "G4BoundingEnvelope.hh" +#include "G4QuickRand.hh" #include "G4VPVParameterisation.hh" -#include "G4RandomDirection.hh" -#include "Randomize.hh" - #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -216,7 +213,7 @@ G4bool G4Orb::CalculateExtent(const EAxis pAxis, sinCurPhi = sinCurPhi*cosStepPhi + cosCurPhi*sinStepPhi; cosCurPhi = cosCurPhi*cosStepPhi - sinTmpPhi*sinStepPhi; } - + // set bounding circles G4ThreeVectorList circles[NTHETA]; for (auto & circle : circles) { circle.resize(NPHI); } @@ -298,7 +295,7 @@ G4double G4Orb::DistanceToIn( const G4ThreeVector& p, // Avoid rounding errors due to precision issues seen on 64 bits systems. // Split long distances and recompute // - G4double Dmax = 32*fRmax; + G4double Dmax = 32*fRmax; if (dist > Dmax) { dist = dist - 1.e-8*dist - fRmax; // to stay outside after the move @@ -431,11 +428,19 @@ std::ostream& G4Orb::StreamInfo( std::ostream& os ) const ////////////////////////////////////////////////////////////////////////// // -// GetPointOnSurface +// Pick random point on the surface G4ThreeVector G4Orb::GetPointOnSurface() const { - return fRmax * G4RandomDirection(); + G4double u, v, b; + do + { + u = 2.*G4QuickRand() - 1.; + v = 2.*G4QuickRand() - 1.; + b = sqr(u) + sqr(v); + } while(b > 1.); + G4double a = 2.*std::sqrt(1. - b); + return { fRmax*a*u, fRmax*a*v, fRmax*(2.*b - 1.) }; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4Para.cc b/source/geometry/solids/CSG/src/G4Para.cc index ebb973053d..516034b36b 100644 --- a/source/geometry/solids/CSG/src/G4Para.cc +++ b/source/geometry/solids/CSG/src/G4Para.cc @@ -38,7 +38,7 @@ #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" #include "G4BoundingEnvelope.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4VPVParameterisation.hh" @@ -68,7 +68,7 @@ G4Para::G4Para( const G4String& pName, : G4CSGSolid(pName), halfCarTolerance(0.5*kCarTolerance) { // Find dimensions and trigonometric values - // + // fDx = (pt[3].x() - pt[2].x())*0.5; fDy = (pt[2].y() - pt[1].y())*0.5; fDz = pt[7].z(); @@ -266,7 +266,6 @@ void G4Para::MakePlanes() G4double G4Para::GetCubicVolume() { - // It is like G4Box, since para transformations keep the volume to be const if (fCubicVolume == 0) { fCubicVolume = 8*fDx*fDy*fDz; @@ -282,14 +281,9 @@ G4double G4Para::GetSurfaceArea() { if(fSurfaceArea == 0) { - G4ThreeVector vx(fDx, 0, 0); - G4ThreeVector vy(fDy*fTalpha, fDy, 0); - G4ThreeVector vz(fDz*fTthetaCphi, fDz*fTthetaSphi, fDz); - - G4double sxy = fDx*fDy; // (vx.cross(vy)).mag(); - G4double sxz = (vx.cross(vz)).mag(); - G4double syz = (vy.cross(vz)).mag(); - + G4double sxy = fDx*fDy; + G4double sxz = fDx*fDz*std::sqrt(1. + sqr(fTthetaSphi)); + G4double syz = fDy*fDz*std::sqrt(1. + sqr(fTalpha) + sqr(fTalpha*fTthetaSphi - fTthetaCphi)); fSurfaceArea = 8*(sxy+sxz+syz); } return fSurfaceArea; @@ -542,7 +536,7 @@ G4double G4Para::DistanceToIn(const G4ThreeVector& p, if ((std::abs(p.z()) - fDz) >= -halfCarTolerance && p.z()*v.z() >= 0) return kInfinity; G4double invz = (-v.z() == 0) ? DBL_MAX : -1./v.z(); - G4double dz = (invz < 0) ? fDz : -fDz; + G4double dz = (invz < 0) ? fDz : -fDz; G4double tzmin = (p.z() + dz)*invz; G4double tzmax = (p.z() - dz)*invz; @@ -738,7 +732,7 @@ G4double G4Para::DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, // Set normal, if required, and return distance // - if (calcNorm) + if (calcNorm) { *validNorm = true; if (iside < 0) @@ -847,51 +841,34 @@ std::ostream& G4Para::StreamInfo( std::ostream& os ) const G4ThreeVector G4Para::GetPointOnSurface() const { - G4double DyTalpha = fDy*fTalpha; - G4double DzTthetaSphi = fDz*fTthetaSphi; - G4double DzTthetaCphi = fDz*fTthetaCphi; + G4double sxy = fDx*fDy; + G4double sxz = fDx*fDz*std::sqrt(1. + sqr(fTthetaSphi)); + G4double syz = fDy*fDz*std::sqrt(1. + sqr(fTalpha) + sqr(fTalpha*fTthetaSphi - fTthetaCphi)); - // Set vertices - // - G4ThreeVector pt[8]; - pt[0].set(-DzTthetaCphi-DyTalpha-fDx, -DzTthetaSphi-fDy, -fDz); - pt[1].set(-DzTthetaCphi-DyTalpha+fDx, -DzTthetaSphi-fDy, -fDz); - pt[2].set(-DzTthetaCphi+DyTalpha-fDx, -DzTthetaSphi+fDy, -fDz); - pt[3].set(-DzTthetaCphi+DyTalpha+fDx, -DzTthetaSphi+fDy, -fDz); - pt[4].set( DzTthetaCphi-DyTalpha-fDx, DzTthetaSphi-fDy, fDz); - pt[5].set( DzTthetaCphi-DyTalpha+fDx, DzTthetaSphi-fDy, fDz); - pt[6].set( DzTthetaCphi+DyTalpha-fDx, DzTthetaSphi+fDy, fDz); - pt[7].set( DzTthetaCphi+DyTalpha+fDx, DzTthetaSphi+fDy, fDz); + G4double select = (sxy + sxz + syz)*G4QuickRand(); + G4double u = 2.*G4QuickRand() - 1.; + G4double v = 2.*G4QuickRand() - 1.; - // Set areas (-Z, -Y, +Y, -X, +X, +Z) - // - G4ThreeVector vx(fDx, 0, 0); - G4ThreeVector vy(DyTalpha, fDy, 0); - G4ThreeVector vz(DzTthetaCphi, DzTthetaSphi, fDz); - - G4double sxy = fDx*fDy; // (vx.cross(vy)).mag(); - G4double sxz = (vx.cross(vz)).mag(); - G4double syz = (vy.cross(vz)).mag(); - - G4double sface[6] = { sxy, syz, syz, sxz, sxz, sxy }; - for (G4int i=1; i<6; ++i) { sface[i] += sface[i-1]; } - - // Select face - // - G4double select = sface[5]*G4UniformRand(); - G4int k = 5; - if (select <= sface[4]) k = 4; - if (select <= sface[3]) k = 3; - if (select <= sface[2]) k = 2; - if (select <= sface[1]) k = 1; - if (select <= sface[0]) k = 0; - - // Generate point - // - G4int ip[6][3] = {{0,1,2}, {0,4,1}, {2,3,6}, {0,2,4}, {1,5,3}, {4,6,5}}; - G4double u = G4UniformRand(); - G4double v = G4UniformRand(); - return (1.-u-v)*pt[ip[k][0]] + u*pt[ip[k][1]] + v*pt[ip[k][2]]; + G4double x, y, z; + if (select < sxy) + { + x = u*fDx; + y = v*fDy; + z = (select < 0.5*sxy) ? -fDz : fDz; + } + else if (select < sxy + sxz) + { + x = u*fDx; + y = (select < sxy + 0.5*sxz) ? -fDy : fDy; + z = v*fDz; + } + else + { + x = (select < sxy + sxz + 0.5*syz) ? -fDx : fDx; + y = u*fDy; + z = v*fDz; + } + return { x + y*fTalpha + z*fTthetaCphi, y + z*fTthetaSphi, z }; } ////////////////////////////////////////////////////////////////////////// @@ -909,7 +886,7 @@ G4Polyhedron* G4Para::CreatePolyhedron () const G4double alpha = std::atan(fTalpha); G4double theta = std::atan(std::sqrt(fTthetaCphi*fTthetaCphi + fTthetaSphi*fTthetaSphi)); - + return new G4PolyhedronPara(fDx, fDy, fDz, alpha, theta, phi); } #endif diff --git a/source/geometry/solids/CSG/src/G4Torus.cc b/source/geometry/solids/CSG/src/G4Torus.cc index 52c750a23b..59c8f89877 100644 --- a/source/geometry/solids/CSG/src/G4Torus.cc +++ b/source/geometry/solids/CSG/src/G4Torus.cc @@ -48,9 +48,7 @@ #include "G4VPVParameterisation.hh" -#include "meshdefs.hh" - -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" @@ -1593,43 +1591,37 @@ std::ostream& G4Torus::StreamInfo( std::ostream& os ) const G4ThreeVector G4Torus::GetPointOnSurface() const { - G4double cosu, sinu,cosv, sinv, aOut, aIn, aSide, chose, phi, theta, rRand; + G4double rrmin = fRmin*fRmin; + G4double rrmax = fRmax*fRmax; + G4double smax = twopi*fRtor*fDPhi*fRmax; + G4double smin = twopi*fRtor*fDPhi*fRmin; + G4double sphi = (fDPhi >= twopi) ? 0. : pi*(rrmax - rrmin); - phi = G4RandFlat::shoot(fSPhi,fSPhi+fDPhi); - theta = G4RandFlat::shoot(0.,twopi); - - cosu = std::cos(phi); sinu = std::sin(phi); - cosv = std::cos(theta); sinv = std::sin(theta); - - // compute the areas - - aOut = (fDPhi)*twopi*fRtor*fRmax; - aIn = (fDPhi)*twopi*fRtor*fRmin; - aSide = pi*(fRmax*fRmax-fRmin*fRmin); - - if ((fSPhi == 0) && (fDPhi == twopi)){ aSide = 0; } - chose = G4RandFlat::shoot(0.,aOut + aIn + 2.*aSide); - - if(chose < aOut) + G4double u = G4QuickRand(); + G4double v = twopi*G4QuickRand();; + G4double select = (smax + smin + 2.*sphi)*G4QuickRand(); + G4double phi, r, ds; + if (select < 2.*sphi) { - return { (fRtor+fRmax*cosv)*cosu, (fRtor+fRmax*cosv)*sinu, fRmax*sinv }; - } - else if( (chose >= aOut) && (chose < aOut + aIn) ) - { - return { (fRtor+fRmin*cosv)*cosu, (fRtor+fRmin*cosv)*sinu, fRmin*sinv }; - } - else if( (chose >= aOut + aIn) && (chose < aOut + aIn + aSide) ) - { - rRand = GetRadiusInRing(fRmin,fRmax); - return { (fRtor+rRand*cosv)*std::cos(fSPhi), - (fRtor+rRand*cosv)*std::sin(fSPhi), rRand*sinv }; + // phi cut + phi = fSPhi + fDPhi*(G4double)(select < sphi); + r = std::sqrt(rrmin + (rrmax - rrmin)*u); + ds = fRtor + r*std::cos(v); } else - { - rRand = GetRadiusInRing(fRmin,fRmax); - return { (fRtor+rRand*cosv)*std::cos(fSPhi+fDPhi), - (fRtor+rRand*cosv)*std::sin(fSPhi+fDPhi), rRand*sinv }; + { + // toroidal surface (rejection sampling) + phi = fSPhi + fDPhi*u; + r = (select < 2.*sphi + smax) ? fRmax : fRmin; + ds = fRtor + r*std::cos(v); + for (auto i = 0; i < 10; ++i) + { + if ((fRtor + r)*G4QuickRand() < ds) break; + v = twopi*G4QuickRand(); + ds = fRtor + r*std::cos(v); + } } + return { ds*std::cos(phi), ds*std::sin(phi), r*std::sin(v) }; } /////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4Trd.cc b/source/geometry/solids/CSG/src/G4Trd.cc index da586300b7..60ce745cd1 100644 --- a/source/geometry/solids/CSG/src/G4Trd.cc +++ b/source/geometry/solids/CSG/src/G4Trd.cc @@ -724,79 +724,58 @@ std::ostream& G4Trd::StreamInfo( std::ostream& os ) const G4ThreeVector G4Trd::GetPointOnSurface() const { - // Set areas - // - G4double sxz = (fDx1 + fDx2)*fHx; - G4double syz = (fDy1 + fDy2)*fHy; - G4double ssurf[6] = { 4.*fDx1*fDy1, sxz, sxz, syz, syz, 4.*fDx2*fDy2 }; - ssurf[1] += ssurf[0]; - ssurf[2] += ssurf[1]; - ssurf[3] += ssurf[2]; - ssurf[4] += ssurf[3]; - ssurf[5] += ssurf[4]; + G4double sbot = 4.*fDx1*fDy1; // area of bottom base + G4double stop = 4.*fDx2*fDy2; // area of top base + G4double sbase = sbot + stop; + G4double sxz = (fDx1 + fDx2)*fHx; // area of Y face + G4double syz = (fDy1 + fDy2)*fHy; // area of X face + G4double stotal = sbase + 2.*(sxz + syz); + G4double select = stotal*G4QuickRand(); - // Select face - // - G4double select = ssurf[5]*G4QuickRand(); - G4int k = 5; - k -= (G4int)(select <= ssurf[4]); - k -= (G4int)(select <= ssurf[3]); - k -= (G4int)(select <= ssurf[2]); - k -= (G4int)(select <= ssurf[1]); - k -= (G4int)(select <= ssurf[0]); - - // Generate point on selected surface - // + G4ThreeVector p; G4double u = G4QuickRand(); G4double v = G4QuickRand(); - switch(k) + if (select < sbase) { - case 0: // base at -Z - { - return { (2.*u - 1.)*fDx1, (2.*v - 1.)*fDy1, -fDz }; - } - case 1: // X face at -Y - { - if (u + v > 1.) { u = 1. - u; v = 1. - v; } - G4ThreeVector p0(-fDx1,-fDy1,-fDz); - G4ThreeVector p1( fDx2,-fDy2, fDz); - return (select <= ssurf[0] + fDx1*fHx) ? - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector( fDx1,-fDy1,-fDz) : - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector(-fDx2,-fDy2, fDz); - } - case 2: // X face at +Y - { - if (u + v > 1.) { u = 1. - u; v = 1. - v; } - G4ThreeVector p0( fDx1, fDy1,-fDz); - G4ThreeVector p1(-fDx2, fDy2, fDz); - return (select <= ssurf[1] + fDx1*fHx) ? - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector(-fDx1, fDy1,-fDz) : - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector( fDx2, fDy2, fDz); - } - case 3: // Y face at -X - { - if (u + v > 1.) { u = 1. - u; v = 1. - v; } - G4ThreeVector p0(-fDx1, fDy1,-fDz); - G4ThreeVector p1(-fDx2,-fDy2, fDz); - return (select <= ssurf[2] + fDy1*fHy) ? - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector(-fDx1,-fDy1,-fDz) : - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector(-fDx2, fDy2, fDz); - } - case 4: // Y face at +X - { - if (u + v > 1.) { u = 1. - u; v = 1. - v; } - G4ThreeVector p0( fDx1,-fDy1,-fDz); - G4ThreeVector p1( fDx2, fDy2, fDz); - return (select <= ssurf[3] + fDy1*fHy) ? - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector( fDx1, fDy1,-fDz) : - (1. - u - v)*p0 + u*p1 + v*G4ThreeVector( fDx2,-fDy2, fDz); - } - case 5: // base at +Z - { - return { (2.*u - 1.)*fDx2, (2.*v - 1.)*fDy2, fDz }; - } + G4bool ifbottom = (select < sbot); + G4double x = (ifbottom) ? fDx1 : fDx2; + G4double y = (ifbottom) ? fDy1 : fDy2; + G4double z = (ifbottom) ? -fDz : fDz; + p.set((2.*u - 1.)*x, (2.*v - 1.)*y, z); } - return {0., 0., 0.}; + else if (select < sbase + 2.*sxz) + { + G4double ysign = (select < sbase + sxz) ? 1. : -1.; + if (ysign < 0.) select -= sxz; + if (u + v > 1.) + { + u = 1. - u; + v = 1. - v; + } + G4ThreeVector p0(-fDx1,-fDy1,-fDz); + G4ThreeVector p1( fDx2,-fDy2, fDz); + G4ThreeVector p2 = (select < sbase + fDx1*fHx) ? + G4ThreeVector( fDx1,-fDy1,-fDz) : G4ThreeVector(-fDx2,-fDy2, fDz); + p = p0*(1. - u - v) + p1*u + p2*v; + p.setY(ysign*p.y()); + } + else + { + G4double xsign = (select < sbase + 2.*sxz + syz) ? 1. : -1.; + if (xsign < 0.) select -= syz; + if (u + v > 1.) + { + u = 1. - u; + v = 1. - v; + } + G4ThreeVector p0(-fDx1, fDy1,-fDz); + G4ThreeVector p1(-fDx2,-fDy2, fDz); + G4ThreeVector p2 = (select < sbase + 2.*sxz + fDy1*fHy) ? + G4ThreeVector(-fDx1,-fDy1,-fDz) : G4ThreeVector(-fDx2, fDy2, fDz); + p = p0*(1. - u - v) + p1*u + p2*v; + p.setX(xsign*p.x()); + } + return p; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/specific/History b/source/geometry/solids/specific/History index 4117c98328..8e1ff45f74 100644 --- a/source/geometry/solids/specific/History +++ b/source/geometry/solids/specific/History @@ -6,14 +6,36 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-07 Soon Yung Jun (geom-specific-V11-02-09) +## 2025-03-13 Evgueni Tcherniaev (geom-specific-V11-03-06) +- G4PolyPhiFace.cc, G4PolyconeSide.cc, G4PolyhedraSide.cc, G4TwistedTubs.cc, + G4VCSGfaceted.cc, G4VTwistedFaceted.cc: used G4QuickRand() +- G4EllipticalCone.cc, G4EllipticalTube.cc, G4Voxelizer.cc: + removed unnecessary headers + +## 2025-03-07 Soon Yung Jun (geom-specific-V11-03-05) - G4Polyhedra, G4UPolyhedra: Verify the validity of the delta phi to restore visualization of HepPolyhedronPgon -## 2025-02-03 Gabriele Cosmo +## 2025-02-23 Evgueni Tcherniaev (geom-specific-V11-03-04) +- G4Ellipsoid, G4EllipticalTibe: Code optimization in GetPointOnSurface(). +- G4TessellatedSolid, G4TriangularFacet, G4QuadrangularFacet: + use G4QuickRand(). + +## 2025-02-19 Evgueni Tcherniaev (geom-specific-V11-03-03) +- G4EllipticalCone: Code optimization in GetPointOnSurface(); + SetSemiAxis(), SetZCut() moved to *.cc +- G4Hype: Code optimization in GetPointOnSurface(). + +## 2025-02-16 Evgueni Tcherniaev (geom-specific-V11-03-02) +- G4Paraboloid: Implemented uniform sampling of random points. + +## 2025-02-03 Gabriele Cosmo (geom-specific-V11-03-01) - Removed fake default constructor from G4U* wrappers, clearing compilation warnings on gcc-14. +## 2025-01-25 Evgueni Tcherniaev (geom-specific-V11-03-00) +- G4Hype: Revised surface area calculation and random point sampling. + ## 2024-10-01 Evgueni Tcherniaev (geom-specific-V11-02-08) - G4GenericTrap: Fixed minor defect reported by Coverity. diff --git a/source/geometry/solids/specific/include/G4EllipticalCone.hh b/source/geometry/solids/specific/include/G4EllipticalCone.hh index d6f65ecbe2..2da970388e 100644 --- a/source/geometry/solids/specific/include/G4EllipticalCone.hh +++ b/source/geometry/solids/specific/include/G4EllipticalCone.hh @@ -34,17 +34,17 @@ // xSemiAxis semi-axis, x, without dimentions // ySemiAxis semi-axis, y, without dimentions // zheight height, z -// zTopCut upper cut plane level, z +// zTopCut upper cut plane level, z // -// The height in Z corresponds to where the elliptical cone hits the +// The height in Z corresponds to where the elliptical cone hits the // Z-axis if it had no Z cut. Also the cone is centered at zero having a // base at zTopCut and another at -zTopCut. The semi-major axes at the Z=0 // plane are given by xSemiAxis*zheight and ySemiAxis*zheight so that the -// curved surface of our cone satisfies the equation: +// curved surface of our cone satisfies the equation: // // *************************************************************************** // * * -// * (x/xSemiAxis)^2 + (y/ySemiAxis)^2 = (zheight - z)^2 * +// * (x/xSemiAxis)^2 + (y/ySemiAxis)^2 = (zheight - z)^2 * // * * // *************************************************************************** // @@ -52,7 +52,7 @@ // 1. halflength in Z = zTopCut // 2. Dx and Dy = halflength of ellipse axis at z = -zTopCut // 3. dx and dy = halflength of ellipse axis at z = zTopCut -// ! Attention : dx/dy=Dx/Dy +// ! Attention : dx/dy=Dx/Dy // // You need to find xSemiAxis,ySemiAxis and zheight: // @@ -87,7 +87,7 @@ class G4EllipticalCone : public G4VSolid { public: - + G4EllipticalCone(const G4String& pName, G4double pxSemiAxis, G4double pySemiAxis, @@ -97,21 +97,21 @@ class G4EllipticalCone : public G4VSolid ~G4EllipticalCone() override; // Access functions - // inline G4double GetSemiAxisMin () const; inline G4double GetSemiAxisMax () const; inline G4double GetSemiAxisX () const; inline G4double GetSemiAxisY () const; inline G4double GetZMax() const; inline G4double GetZTopCut() const; - inline void SetSemiAxis (G4double x, G4double y, G4double z); - inline void SetZCut (G4double newzTopCut); - G4double GetCubicVolume() override; - G4double GetSurfaceArea() override; + // Modifiers + void SetSemiAxis (G4double x, G4double y, G4double z); + void SetZCut (G4double newzTopCut); // Solid standard methods - // + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, @@ -137,7 +137,7 @@ class G4EllipticalCone : public G4VSolid G4double DistanceToOut(const G4ThreeVector& p) const override; G4GeometryType GetEntityType() const override; - + G4VSolid* Clone() const override; G4ThreeVector GetPointOnSurface() const override; @@ -145,37 +145,38 @@ class G4EllipticalCone : public G4VSolid std::ostream& StreamInfo(std::ostream& os) const override; // Visualisation functions - // G4Polyhedron* GetPolyhedron () const override; void DescribeYourselfTo(G4VGraphicsScene& scene) const override; G4VisExtent GetExtent() const override; G4Polyhedron* CreatePolyhedron() const override; - - G4EllipticalCone(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. + G4EllipticalCone(__void__&); + + // Copy constructor and assignment operator G4EllipticalCone(const G4EllipticalCone& rhs); - G4EllipticalCone& operator=(const G4EllipticalCone& rhs); - // Copy constructor and assignment operator. + G4EllipticalCone& operator=(const G4EllipticalCone& rhs); protected: - + mutable G4bool fRebuildPolyhedron = false; mutable G4Polyhedron* fpPolyhedron = nullptr; private: + // Algorithm for SurfaceNormal() following the original + // specification for points not on the surface G4ThreeVector ApproxSurfaceNormal(const G4ThreeVector& p) const; - // Algorithm for SurfaceNormal() following the original - // specification for points not on the surface private: G4double halfCarTol; G4double fCubicVolume = 0.0; G4double fSurfaceArea = 0.0; + G4double fMinZBaseArea = 0.0; + G4double fMaxZBaseArea = 0.0; G4double xSemiAxis, ySemiAxis, zheight, zTopCut; G4double cosAxisMin, invXX, invYY; }; diff --git a/source/geometry/solids/specific/include/G4EllipticalCone.icc b/source/geometry/solids/specific/include/G4EllipticalCone.icc index 95bd93cbf0..46df02063e 100644 --- a/source/geometry/solids/specific/include/G4EllipticalCone.icc +++ b/source/geometry/solids/specific/include/G4EllipticalCone.icc @@ -63,26 +63,3 @@ G4double G4EllipticalCone::GetZTopCut() const { return zTopCut; } - -inline -void G4EllipticalCone::SetSemiAxis (G4double newxSemiAxis, - G4double newySemiAxis, - G4double newzMax) -{ - xSemiAxis = newxSemiAxis; - ySemiAxis = newySemiAxis; - zheight = newzMax; - if (zTopCut > +zheight) { zTopCut = +zheight; } - G4double axmin = std::min(xSemiAxis,ySemiAxis); - cosAxisMin = axmin/std::sqrt(1. + axmin*axmin); - invXX = 1/(xSemiAxis*xSemiAxis); - invYY = 1/(ySemiAxis*ySemiAxis); - fRebuildPolyhedron = true; -} - -inline -void G4EllipticalCone::SetZCut (G4double newzTopCut) -{ - zTopCut = std::min(newzTopCut,zheight); - fRebuildPolyhedron = true; -} diff --git a/source/geometry/solids/specific/include/G4EllipticalTube.hh b/source/geometry/solids/specific/include/G4EllipticalTube.hh index 9127e85475..08e13bbf53 100644 --- a/source/geometry/solids/specific/include/G4EllipticalTube.hh +++ b/source/geometry/solids/specific/include/G4EllipticalTube.hh @@ -117,31 +117,33 @@ class G4EllipticalTube : public G4VSolid inline G4double GetDx() const; inline G4double GetDy() const; inline G4double GetDz() const; - + + // Modifiers + // inline void SetDx( G4double Dx ); inline void SetDy( G4double Dy ); inline void SetDz( G4double Dz ); - - G4EllipticalTube(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects + G4EllipticalTube(__void__&); + + // Copy constructor and assignment operator G4EllipticalTube(const G4EllipticalTube& rhs); G4EllipticalTube& operator=(const G4EllipticalTube& rhs); - // Copy constructor and assignment operator private: + // Check parameters and set pre-calculated values void CheckParameters(); - // Check parameters and set pre-calculated values + // Algorithm for SurfaceNormal() following the original + // specification for points not on the surface G4ThreeVector ApproxSurfaceNormal( const G4ThreeVector& p ) const; - // Algorithm for SurfaceNormal() following the original - // specification for points not on the surface + // Calculate surface area and cache it G4double GetCachedSurfaceArea() const; - // Calculate surface area and cache it private: @@ -152,7 +154,7 @@ class G4EllipticalTube : public G4VSolid G4double fDz; // half length in Z G4double fCubicVolume = 0.0; // volume - G4double fSurfaceArea = 0.0; // surface area + G4double fSurfaceArea = 0.0; // surface area // Cached pre-calculated values G4double fRsph; // R of bounding sphere diff --git a/source/geometry/solids/specific/include/G4EllipticalTube.icc b/source/geometry/solids/specific/include/G4EllipticalTube.icc index 30224e2c1d..3f2ae64956 100644 --- a/source/geometry/solids/specific/include/G4EllipticalTube.icc +++ b/source/geometry/solids/specific/include/G4EllipticalTube.icc @@ -50,7 +50,7 @@ void G4EllipticalTube::SetDx(G4double Dx) fDx = Dx; CheckParameters(); fCubicVolume = 0.; - fSurfaceArea = 0.; + fSurfaceArea = GetCachedSurfaceArea(); fRebuildPolyhedron = true; } @@ -60,7 +60,7 @@ void G4EllipticalTube::SetDy( G4double Dy ) fDy = Dy; CheckParameters(); fCubicVolume = 0.; - fSurfaceArea = 0.; + fSurfaceArea = GetCachedSurfaceArea(); fRebuildPolyhedron = true; } @@ -70,6 +70,6 @@ void G4EllipticalTube::SetDz( G4double Dz ) fDz = Dz; CheckParameters(); fCubicVolume = 0.; - fSurfaceArea = 0.; + fSurfaceArea = GetCachedSurfaceArea(); fRebuildPolyhedron = true; } diff --git a/source/geometry/solids/specific/include/G4Hype.hh b/source/geometry/solids/specific/include/G4Hype.hh index 9645dc0c90..247b2a470e 100644 --- a/source/geometry/solids/specific/include/G4Hype.hh +++ b/source/geometry/solids/specific/include/G4Hype.hh @@ -95,11 +95,11 @@ class G4Hype : public G4VSolid inline G4double GetInnerStereo () const; inline G4double GetOuterStereo () const; - inline void SetInnerRadius (G4double newIRad); - inline void SetOuterRadius (G4double newORad); - inline void SetZHalfLength (G4double newHLZ); - inline void SetInnerStereo (G4double newISte); - inline void SetOuterStereo (G4double newOSte); + void SetInnerRadius (G4double newIRad); + void SetOuterRadius (G4double newORad); + void SetZHalfLength (G4double newHLZ); + void SetInnerStereo (G4double newISte); + void SetOuterStereo (G4double newOSte); EInside Inside(const G4ThreeVector& p) const override; @@ -158,10 +158,6 @@ class G4Hype : public G4VSolid G4double r2, G4double tan2Phi, G4double s[2] ); // intersection with hyperbolic surface - private: - - G4double asinh(G4double arg); - protected: G4double innerRadius; @@ -172,25 +168,27 @@ class G4Hype : public G4VSolid // precalculated parameters, squared quantities - G4double tanInnerStereo; - G4double tanOuterStereo; + G4double tanInnerStereo; // tan of Inner Stereo angle + G4double tanOuterStereo; // tan of Outer Stereo angle G4double tanInnerStereo2; // squared tan of Inner Stereo angle G4double tanOuterStereo2; // squared tan of Outer Stereo angle G4double innerRadius2; // squared Inner Radius G4double outerRadius2; // squared Outer Radius G4double endInnerRadius2; // squared endcap Inner Radius G4double endOuterRadius2; // squared endcap Outer Radius - G4double endInnerRadius; // endcap Inner Radius - G4double endOuterRadius; // endcap Outer Radius + G4double endInnerRadius; // endcap Inner Radius + G4double endOuterRadius; // endcap Outer Radius // Used by distanceToOut - enum ESide {outerFace,innerFace,leftCap, rightCap}; + enum ESide { outerFace, innerFace, leftCap, rightCap }; private: G4double fCubicVolume = 0.0; G4double fSurfaceArea = 0.0; + G4double fInnerSurfaceArea = 0.0; + G4double fOuterSurfaceArea = 0.0; G4double fHalfTol; diff --git a/source/geometry/solids/specific/include/G4Hype.icc b/source/geometry/solids/specific/include/G4Hype.icc index 48118bc25d..d8736c272c 100644 --- a/source/geometry/solids/specific/include/G4Hype.icc +++ b/source/geometry/solids/specific/include/G4Hype.icc @@ -28,102 +28,48 @@ inline G4double G4Hype::GetInnerRadius () const - { - return innerRadius; - } +{ + return innerRadius; +} inline -G4double G4Hype::GetOuterRadius () const - { - return outerRadius; - } +G4double G4Hype::GetOuterRadius() const +{ + return outerRadius; +} inline -G4double G4Hype::GetZHalfLength () const - { - return halfLenZ; - } +G4double G4Hype::GetZHalfLength() const +{ + return halfLenZ; +} inline -G4double G4Hype::GetInnerStereo () const - { - return innerStereo; - } +G4double G4Hype::GetInnerStereo() const +{ + return innerStereo; +} inline -G4double G4Hype::GetOuterStereo () const - { - return outerStereo; - } - -inline -void G4Hype::SetInnerRadius (G4double newIRad) - { - innerRadius = newIRad; - innerRadius2 = newIRad*newIRad; - endInnerRadius2 = HypeInnerRadius2(halfLenZ); - endInnerRadius = std::sqrt(endInnerRadius2); - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } - -inline -void G4Hype::SetOuterRadius (G4double newORad) - { - outerRadius = newORad; - outerRadius2 = newORad*newORad; - endOuterRadius2 = HypeOuterRadius2(halfLenZ); - endOuterRadius = std::sqrt(endOuterRadius2); - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } - -inline -void G4Hype::SetZHalfLength (G4double newHLZ) - { - halfLenZ = newHLZ ; - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } - -inline -void G4Hype::SetInnerStereo (G4double newISte) - { - innerStereo = std::fabs(newISte); - tanInnerStereo = std::tan(innerStereo); - tanInnerStereo2 = tanInnerStereo*tanInnerStereo; - endInnerRadius2 = HypeInnerRadius2(halfLenZ); - endInnerRadius = std::sqrt(endInnerRadius2); - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } - -inline -void G4Hype::SetOuterStereo (G4double newOSte) - { - outerStereo = std::fabs(newOSte); - tanOuterStereo = std::tan(outerStereo); - tanOuterStereo2 = tanOuterStereo*tanOuterStereo; - endOuterRadius2 = HypeOuterRadius2(halfLenZ); - endOuterRadius = std::sqrt(endOuterRadius2); - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } +G4double G4Hype::GetOuterStereo() const +{ + return outerStereo; +} inline G4bool G4Hype::InnerSurfaceExists() const - { - return (innerRadius > DBL_MIN) || (innerStereo != 0); - } +{ + return (endInnerRadius2 > 0.); +} inline G4double G4Hype::HypeInnerRadius2(G4double zVal) const - { - return (tanInnerStereo2*zVal*zVal+innerRadius2); - } +{ + return (tanInnerStereo2*zVal*zVal + innerRadius2); +} inline G4double G4Hype::HypeOuterRadius2(G4double zVal) const - { - return (tanOuterStereo2*zVal*zVal+outerRadius2); - } +{ + return (tanOuterStereo2*zVal*zVal + outerRadius2); +} diff --git a/source/geometry/solids/specific/include/G4Paraboloid.hh b/source/geometry/solids/specific/include/G4Paraboloid.hh index be7f266ce6..bfd2a9b940 100644 --- a/source/geometry/solids/specific/include/G4Paraboloid.hh +++ b/source/geometry/solids/specific/include/G4Paraboloid.hh @@ -76,23 +76,16 @@ class G4Paraboloid : public G4VSolid ~G4Paraboloid() override; // Access functions - inline G4double GetZHalfLength() const; inline G4double GetRadiusMinusZ() const; inline G4double GetRadiusPlusZ() const; - inline G4double GetCubicVolume() override; - inline G4double GetSurfaceArea() override; - inline G4double CalculateSurfaceArea() const; - // Modifiers functions - - inline void SetZHalfLength(G4double dz); - inline void SetRadiusMinusZ(G4double R1); - inline void SetRadiusPlusZ(G4double R2); + void SetZHalfLength(G4double dz); + void SetRadiusMinusZ(G4double R1); + void SetRadiusPlusZ(G4double R2); // Solid standard methods - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, @@ -116,42 +109,45 @@ class G4Paraboloid : public G4VSolid std::ostream& StreamInfo(std::ostream& os) const override; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; + G4ThreeVector GetPointOnSurface() const override; // Visualisation functions - void DescribeYourselfTo(G4VGraphicsScene& scene) const override; G4Polyhedron* CreatePolyhedron() const override; G4Polyhedron* GetPolyhedron () const override; + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. G4Paraboloid(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + // Copy constructor and assignment operator. G4Paraboloid(const G4Paraboloid& rhs); G4Paraboloid& operator=(const G4Paraboloid& rhs); - // Copy constructor and assignment operator. - - protected: - - mutable G4bool fRebuildPolyhedron = false; - mutable G4Polyhedron* fpPolyhedron = nullptr; private: - // Making this mutable to allow GetPointOnSurface to have access to - // area function. - mutable G4double fSurfaceArea = 0.0; + G4double CalculateSurfaceArea() const; + + G4double fSurfaceArea = 0.0; G4double fCubicVolume = 0.0; - G4double dz, r1, r2; - G4double k1, k2; - // Defined to make some calculations easier to follow + // Cached values + G4double dz = 0.0; // half height + G4double r1 = 0.0; // radius at -dz + G4double r2 = 0.0; // radius at dz + G4double k1 = 0.0; // k1 = 0.5*(r2*r2 - r1*r1)/dz + G4double k2 = 0.0; // k2 = 0.5*(r2*r2 + r1*r1) + + mutable G4bool fRebuildPolyhedron = false; + mutable G4Polyhedron* fpPolyhedron = nullptr; }; #include "G4Paraboloid.icc" #endif // defined(G4GEOM_USE_UPARABOLOID) && defined(G4GEOM_USE_SYS_USOLIDS) -#endif // G4Paraboloid_HH +#endif // G4PARABOLOID_HH diff --git a/source/geometry/solids/specific/include/G4Paraboloid.icc b/source/geometry/solids/specific/include/G4Paraboloid.icc index 8c1dad288d..f77b2c2920 100644 --- a/source/geometry/solids/specific/include/G4Paraboloid.icc +++ b/source/geometry/solids/specific/include/G4Paraboloid.icc @@ -26,13 +26,13 @@ // Implementation of inline methods of G4Paraboloid // -------------------------------------------------------------------- -inline +inline G4double G4Paraboloid::GetZHalfLength() const { return dz; } -inline +inline G4double G4Paraboloid::GetRadiusPlusZ() const { return r2; @@ -43,121 +43,3 @@ G4double G4Paraboloid::GetRadiusMinusZ() const { return r1; } - -inline -void G4Paraboloid::SetZHalfLength(G4double pDz) -{ - if(pDz <= 0) - { - G4Exception("G4Paraboloid::SetZHalfLength()", "GeomSolids0002", - FatalException, "Invalid dimensions."); - } - else - { - dz = pDz; - k1 = (sqr(r2) - sqr(r1)) / (2 * dz); - k2 = (sqr(r2) + sqr(r1)) / 2; - - // This informs GetSurfaceArea() and GetCubicVolume() that it needs - // to recalculate buffered value. - // - fSurfaceArea = 0.; - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } -} - -inline -void G4Paraboloid::SetRadiusPlusZ(G4double pR2) -{ - if(pR2 <= 0 || pR2 <= r1) - { - G4Exception("G4Paraboloid::SetRadiusPlusZ()", "GeomSolids0002", - FatalException, "Invalid dimensions."); - } - else - { - r2 = pR2; - k1 = (sqr(r2) - sqr(r1)) / (2 * dz); - k2 = (sqr(r2) + sqr(r1)) / 2; - - // This informs GetSurfaceArea() and GetCubicVolume() that it needs - // to recalculate buffered value. - // - fSurfaceArea = 0.; - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } -} - -inline -void G4Paraboloid::SetRadiusMinusZ(G4double pR1) -{ - if(pR1 < 0 || pR1 >= r2) - { - G4Exception("G4Paraboloid::SetRadiusMinusZ()", "GeomSolids0002", - FatalException, "Invalid dimensions."); - } - else - { - r1 = pR1; - k1 = (sqr(r2) - sqr(r1)) / (2 * dz); - k2 = (sqr(r2) + sqr(r1)) / 2; - - // This informs GetSurfaceArea() and GetCubicVolume() that it needs - // to recalculate buffered value. - // - fSurfaceArea = 0.; - fCubicVolume = 0.; - fRebuildPolyhedron = true; - } -} - -inline -G4double G4Paraboloid::GetCubicVolume() -{ - if(fCubicVolume != 0. ) {;} - else - { - fCubicVolume = CLHEP::twopi * k2 * dz; - } - return fCubicVolume; -} - - -inline -G4double G4Paraboloid::CalculateSurfaceArea() const -{ - G4double h1, h2, A1, A2; - - h1 = k2/k1 + dz; - h2 = k2/k1 - dz; - - // Calculate surface area for the paraboloid full paraboloid - // cutoff at z = dz (not the cutoff area though). - - A1 = sqr(r2) + 4 * sqr(h1); - A1 *= sqr(A1); // Sets A1 = A1^3 - A1 = CLHEP::pi * r2 /6 / sqr(h1) * ( std::sqrt(A1) - r2 * r2 * r2); - - // Calculate surface area for the paraboloid full paraboloid - // cutoff at z = -dz (not the cutoff area though). - - A2 = sqr(r1) + 4 * sqr(h2); - A2 *= sqr(A2);// Sets A2 = A2^3 - - if(h2 != 0) - { A2 = CLHEP::pi * r1 /6 / sqr(h2) * ( std::sqrt(A2) - r1 * r1 * r1); } - else - { A2 = 0.; } - - return fSurfaceArea = A1 - A2 + (sqr(r1) + sqr(r2))*CLHEP::pi; -} - -inline -G4double G4Paraboloid::GetSurfaceArea() -{ - if(fSurfaceArea == 0.) CalculateSurfaceArea(); - - return fSurfaceArea; -} diff --git a/source/geometry/solids/specific/src/G4Ellipsoid.cc b/source/geometry/solids/specific/src/G4Ellipsoid.cc index 53a831961c..9a61840d84 100644 --- a/source/geometry/solids/specific/src/G4Ellipsoid.cc +++ b/source/geometry/solids/specific/src/G4Ellipsoid.cc @@ -42,7 +42,6 @@ #include "G4AffineTransform.hh" #include "G4GeometryTolerance.hh" #include "G4BoundingEnvelope.hh" -#include "G4RandomTools.hh" #include "G4QuickRand.hh" #include "G4VPVParameterisation.hh" @@ -822,8 +821,9 @@ G4ThreeVector G4Ellipsoid::GetPointOnSurface() const G4double Ztop = GetZTopCut(); // Calculate cut areas - G4double Hbot = 1. + Zbot / C; - G4double Htop = 1. - Ztop / C; + G4double invC = 1. / C; + G4double Hbot = 1. + Zbot * invC; + G4double Htop = 1. - Ztop * invC; G4double piAB = CLHEP::pi * A * B; G4double Sbot = piAB * Hbot * (2. - Hbot); G4double Stop = piAB * Htop * (2. - Htop); @@ -840,47 +840,46 @@ G4ThreeVector G4Ellipsoid::GetPointOnSurface() const // Select surface (0 - bottom cut, 1 - lateral surface, 2 - top cut) G4double select = (Sbot + Slat + Stop) * G4QuickRand(); G4int k = 0; - if (select > Sbot) k = 1; - if (select > Sbot + Slat) k = 2; + k += (G4int)(select > Sbot); + k += (G4int)(select > Sbot + Slat); - // Pick random point on selected surface (rejection sampling) + // Pick random point on selected surface + G4double phi = CLHEP::twopi * G4QuickRand(); + G4double cosphi = std::cos(phi); + G4double sinphi = std::sin(phi); G4ThreeVector p; switch (k) { - case 0: // bootom z-cut + case 0: // bootom z-cut, ellipse { G4double scale = std::sqrt(Hbot * (2. - Hbot)); - G4TwoVector rho = G4RandomPointInEllipse(A * scale, B * scale); - p.set(rho.x(), rho.y(), Zbot); + G4double rho = scale*std::sqrt(G4QuickRand()); + p.set(A * rho * cosphi, B * rho * sinphi, Zbot); break; } - case 1: // lateral surface + case 1: // lateral surface (rejection sampling) { G4double x, y, z; - G4double mu_max = std::max(std::max(A * B, A * C), B * C); - for (G4int i = 0; i < 1000; ++i) + G4double s_max = std::max(std::max(A * B, A * C), B * C); + for (G4int i = 0; i < 10000; ++i) { // generate random point on unit sphere - z = (Zbot + (Ztop - Zbot) * G4QuickRand()) / C; + z = (Zbot + (Ztop - Zbot) * G4QuickRand()) * invC; G4double rho = std::sqrt((1. + z) * (1. - z)); - G4double phi = CLHEP::twopi * G4QuickRand(); - x = rho * std::cos(phi); - y = rho * std::sin(phi); + x = rho * cosphi; + y = rho * sinphi; // check acceptance - G4double xbc = x * B * C; - G4double yac = y * A * C; - G4double zab = z * A * B; - G4double mu = std::sqrt(xbc * xbc + yac * yac + zab * zab); - if (mu_max * G4QuickRand() <= mu) break; + G4double ss = sqr(B * C * x) + sqr(A * C * y) + sqr(A * B * z); + if (sqr(s_max * G4QuickRand()) <= ss) break; } p.set(A * x, B * y, C * z); break; } - case 2: // top z-cut + case 2: // top z-cut, ellipse { G4double scale = std::sqrt(Htop * (2. - Htop)); - G4TwoVector rho = G4RandomPointInEllipse(A * scale, B * scale); - p.set(rho.x(), rho.y(), Ztop); + G4double rho = scale*std::sqrt(G4QuickRand()); + p.set(A * rho * cosphi, B * rho * sinphi, Ztop); break; } } diff --git a/source/geometry/solids/specific/src/G4EllipticalCone.cc b/source/geometry/solids/specific/src/G4EllipticalCone.cc index 123808e8ef..0445ea270b 100644 --- a/source/geometry/solids/specific/src/G4EllipticalCone.cc +++ b/source/geometry/solids/specific/src/G4EllipticalCone.cc @@ -37,21 +37,13 @@ #if !(defined(G4GEOM_USE_UELLIPTICALCONE) && defined(G4GEOM_USE_SYS_USOLIDS)) -#include "globals.hh" - #include "G4EllipticalCone.hh" -#include "G4RandomTools.hh" #include "G4GeomTools.hh" -#include "G4ClippablePolygon.hh" #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" #include "G4BoundingEnvelope.hh" -#include "G4GeometryTolerance.hh" - -#include "meshdefs.hh" - -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -101,6 +93,7 @@ G4EllipticalCone::G4EllipticalCone(const G4String& pName, SetSemiAxis( pxSemiAxis, pySemiAxis, pzMax ); SetZCut(pzTopCut); + GetSurfaceArea(); } ///////////////////////////////////////////////////////////////////////// @@ -131,6 +124,7 @@ G4EllipticalCone::~G4EllipticalCone() G4EllipticalCone::G4EllipticalCone(const G4EllipticalCone& rhs) : G4VSolid(rhs), halfCarTol(rhs.halfCarTol), fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea), + fMinZBaseArea(rhs.fMinZBaseArea), fMaxZBaseArea(rhs.fMaxZBaseArea), xSemiAxis(rhs.xSemiAxis), ySemiAxis(rhs.ySemiAxis), zheight(rhs.zheight), zTopCut(rhs.zTopCut), cosAxisMin(rhs.cosAxisMin), invXX(rhs.invXX), invYY(rhs.invYY) @@ -141,7 +135,7 @@ G4EllipticalCone::G4EllipticalCone(const G4EllipticalCone& rhs) // // Assignment operator -G4EllipticalCone& G4EllipticalCone::operator = (const G4EllipticalCone& rhs) +G4EllipticalCone& G4EllipticalCone::operator = (const G4EllipticalCone& rhs) { // Check assignment to self // @@ -155,6 +149,7 @@ G4EllipticalCone& G4EllipticalCone::operator = (const G4EllipticalCone& rhs) // halfCarTol = rhs.halfCarTol; fCubicVolume = rhs.fCubicVolume; fSurfaceArea = rhs.fSurfaceArea; + fMinZBaseArea = rhs.fMinZBaseArea; fMaxZBaseArea = rhs.fMaxZBaseArea; xSemiAxis = rhs.xSemiAxis; ySemiAxis = rhs.ySemiAxis; zheight = rhs.zheight; zTopCut = rhs.zTopCut; cosAxisMin = rhs.cosAxisMin; invXX = rhs.invXX; invYY = rhs.invYY; @@ -165,6 +160,41 @@ G4EllipticalCone& G4EllipticalCone::operator = (const G4EllipticalCone& rhs) return *this; } +///////////////////////////////////////////////////////////////////////// +// +// Set new semi axis + +void G4EllipticalCone::SetSemiAxis (G4double newxSemiAxis, + G4double newySemiAxis, + G4double newzMax) +{ + xSemiAxis = newxSemiAxis; + ySemiAxis = newySemiAxis; + zheight = newzMax; + if (zTopCut > zheight) { zTopCut = zheight; } + G4double axmin = std::min(xSemiAxis, ySemiAxis); + cosAxisMin = axmin/std::sqrt(1. + axmin*axmin); + invXX = 1./(xSemiAxis*xSemiAxis); + invYY = 1./(ySemiAxis*ySemiAxis); + fCubicVolume = 0.0; + fSurfaceArea = 0.0; + GetSurfaceArea(); + fRebuildPolyhedron = true; +} + +///////////////////////////////////////////////////////////////////////// +// +// Set new Z cut + +void G4EllipticalCone::SetZCut (G4double newzTopCut) +{ + zTopCut = std::min(newzTopCut, zheight); + fCubicVolume = 0.0; + fSurfaceArea = 0.0; + GetSurfaceArea(); + fRebuildPolyhedron = true; +} + ///////////////////////////////////////////////////////////////////////// // // Get bounding box @@ -173,7 +203,7 @@ void G4EllipticalCone::BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const { G4double zcut = GetZTopCut(); - G4double height = GetZMax(); + G4double height = GetZMax(); G4double xmax = GetSemiAxisX()*(height+zcut); G4double ymax = GetSemiAxisY()*(height+zcut); pMin.set(-xmax,-ymax,-zcut); @@ -228,7 +258,7 @@ G4EllipticalCone::CalculateExtent(const EAxis pAxis, static const G4double sinStep = 2.*sinHalf*cosHalf; static const G4double cosStep = 1. - 2.*sinHalf*sinHalf; G4double zcut = bmax.z(); - G4double height = GetZMax(); + G4double height = GetZMax(); G4double sxmin = GetSemiAxisX()*(height-zcut)/cosHalf; G4double symin = GetSemiAxisY()*(height-zcut)/cosHalf; G4double sxmax = bmax.x()/cosHalf; @@ -241,7 +271,7 @@ G4EllipticalCone::CalculateExtent(const EAxis pAxis, { baseA[k].set(sxmax*cosCur,symax*sinCur,-zcut); baseB[k].set(sxmin*cosCur,symin*sinCur, zcut); - + G4double sinTmp = sinCur; sinCur = sinCur*cosStep + cosCur*sinStep; cosCur = cosCur*cosStep - sinTmp*sinStep; @@ -369,7 +399,7 @@ G4double G4EllipticalCone::DistanceToIn( const G4ThreeVector& p, // can't intersect // if (sigz < 0) return kInfinity; - + // // Otherwise, we don't intersect unless we are // on the surface of the ellipse @@ -386,13 +416,13 @@ G4double G4EllipticalCone::DistanceToIn( const G4ThreeVector& p, // How far? // G4double q = -sigz/v.z(); - + // // Where does that place us? // G4double xi = p.x() + q*v.x(), yi = p.y() + q*v.y(); - + // // Is this on the surface (within ellipse)? // @@ -419,7 +449,7 @@ G4double G4EllipticalCone::DistanceToIn( const G4ThreeVector& p, // Check z = +dz planer surface // sigz = p.z() - zTopCut; - + if (sigz > -halfCarTol) { if (v.z() >= 0) @@ -458,79 +488,79 @@ G4double G4EllipticalCone::DistanceToIn( const G4ThreeVector& p, if (p.z() < -zTopCut - halfCarTol) { if (v.z() <= 0.0) - return distMin; + return distMin; G4double lambda = (-zTopCut - p.z())/v.z(); - - if ( sqr((lambda*v.x()+p.x())/xSemiAxis) + + + if ( sqr((lambda*v.x()+p.x())/xSemiAxis) + sqr((lambda*v.y()+p.y())/ySemiAxis) <= - sqr(zTopCut + zheight + halfCarTol) ) - { - return distMin = std::fabs(lambda); + sqr(zTopCut + zheight + halfCarTol) ) + { + return distMin = std::fabs(lambda); } } - if (p.z() > zTopCut + halfCarTol) + if (p.z() > zTopCut + halfCarTol) { if (v.z() >= 0.0) { return distMin; } G4double lambda = (zTopCut - p.z()) / v.z(); - if ( sqr((lambda*v.x() + p.x())/xSemiAxis) + + if ( sqr((lambda*v.x() + p.x())/xSemiAxis) + sqr((lambda*v.y() + p.y())/ySemiAxis) <= sqr(zheight - zTopCut + halfCarTol) ) { return distMin = std::fabs(lambda); } } - + if (p.z() > zTopCut - halfCarTol && p.z() < zTopCut + halfCarTol ) { - if (v.z() > 0.) + if (v.z() > 0.) { return kInfinity; } return distMin = 0.; } - + if (p.z() < -zTopCut + halfCarTol && p.z() > -zTopCut - halfCarTol) { if (v.z() < 0.) { return distMin = kInfinity; } - + return distMin = 0.; } - + #endif - // if we are here then it either intersects or grazes the curved surface + // if we are here then it either intersects or grazes the curved surface // or it does not intersect at all // G4double A = sqr(v.x()/xSemiAxis) + sqr(v.y()/ySemiAxis) - sqr(v.z()); - G4double B = 2*(v.x()*p.x()/sqr(xSemiAxis) + + G4double B = 2*(v.x()*p.x()/sqr(xSemiAxis) + v.y()*p.y()/sqr(ySemiAxis) + v.z()*(zheight-p.z())); - G4double C = sqr(p.x()/xSemiAxis) + sqr(p.y()/ySemiAxis) - + G4double C = sqr(p.x()/xSemiAxis) + sqr(p.y()/ySemiAxis) - sqr(zheight - p.z()); - + G4double discr = B*B - 4.*A*C; - + // if the discriminant is negative it never hits the curved object // if ( discr < -halfCarTol ) { return distMin; } - + // case below is when it hits or grazes the surface // if ( (discr >= -halfCarTol ) && (discr < halfCarTol ) ) { - return distMin = std::fabs(-B/(2.*A)); + return distMin = std::fabs(-B/(2.*A)); } - + G4double plus = (-B+std::sqrt(discr))/(2.*A); G4double minus = (-B-std::sqrt(discr))/(2.*A); - + // Special case::Point on Surface, Check norm.dot(v) if ( ( std::fabs(plus) < halfCarTol )||( std::fabs(minus) < halfCarTol ) ) @@ -548,10 +578,10 @@ G4double G4EllipticalCone::DistanceToIn( const G4ThreeVector& p, } } - // G4double lambda = std::fabs(plus) < std::fabs(minus) ? plus : minus; + // G4double lambda = std::fabs(plus) < std::fabs(minus) ? plus : minus; G4double lambda = 0; - if ( minus > halfCarTol && minus < distMin ) + if ( minus > halfCarTol && minus < distMin ) { lambda = minus ; // check normal vector n * v < 0 @@ -614,7 +644,7 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, { G4double distMin, lambda; enum surface_e {kPlaneSurf, kCurvedSurf, kNoSurf} surface; - + distMin = kInfinity; surface = kNoSurf; @@ -622,14 +652,14 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, { lambda = (-p.z() - zTopCut)/v.z(); - if ( (sqr((p.x() + lambda*v.x())/xSemiAxis) + - sqr((p.y() + lambda*v.y())/ySemiAxis)) < + if ( (sqr((p.x() + lambda*v.x())/xSemiAxis) + + sqr((p.y() + lambda*v.y())/ySemiAxis)) < sqr(zheight + zTopCut + halfCarTol) ) { distMin = std::fabs(lambda); if (!calcNorm) { return distMin; } - } + } distMin = std::fabs(lambda); surface = kPlaneSurf; } @@ -648,20 +678,20 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, distMin = std::fabs(lambda); surface = kPlaneSurf; } - - // if we are here then it either intersects or grazes the + + // if we are here then it either intersects or grazes the // curved surface... // G4double A = sqr(v.x()/xSemiAxis) + sqr(v.y()/ySemiAxis) - sqr(v.z()); - G4double B = 2.*(v.x()*p.x()/sqr(xSemiAxis) + + G4double B = 2.*(v.x()*p.x()/sqr(xSemiAxis) + v.y()*p.y()/sqr(ySemiAxis) + v.z()*(zheight-p.z())); G4double C = sqr(p.x()/xSemiAxis) + sqr(p.y()/ySemiAxis) - sqr(zheight - p.z()); - + G4double discr = B*B - 4.*A*C; - + if ( discr >= - halfCarTol && discr < halfCarTol ) - { + { if(!calcNorm) { return distMin = std::fabs(-B/(2.*A)); } } @@ -679,7 +709,7 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, else { // at least one solution is close to zero or negative - // so, take small positive solution or zero + // so, take small positive solution or zero // lambda = plus > -halfCarTol ? plus : 0; } @@ -701,7 +731,7 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, distMin = 0.0; surface = kCurvedSurf; } - } + } } } @@ -732,7 +762,7 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p, -( pexit.z() - zheight ) ); truenorm /= truenorm.mag(); *n= truenorm; - } + } break; default: // Should never reach this case ... @@ -840,77 +870,39 @@ std::ostream& G4EllipticalCone::StreamInfo( std::ostream& os ) const G4ThreeVector G4EllipticalCone::GetPointOnSurface() const { - G4double x0 = xSemiAxis*zheight; // x semi axis at z=0 - G4double y0 = ySemiAxis*zheight; // y semi axis at z=0 - G4double s0 = G4GeomTools::EllipticConeLateralArea(x0,y0,zheight); - G4double kmin = (zTopCut >= zheight ) ? 0. : (zheight - zTopCut)/zheight; - G4double kmax = (zTopCut >= zheight ) ? 2. : (zheight + zTopCut)/zheight; - - // Set areas (base at -Z, side surface, base at +Z) - // - G4double szmin = pi*x0*y0*kmax*kmax; - G4double szmax = pi*x0*y0*kmin*kmin; - G4double sside = s0*(kmax*kmax - kmin*kmin); - G4double ssurf[3] = { szmin, sside, szmax }; - for (auto i=1; i<3; ++i) { ssurf[i] += ssurf[i-1]; } - - // Select surface - // - G4double select = ssurf[2]*G4UniformRand(); - G4int k = 2; - if (select <= ssurf[1]) k = 1; - if (select <= ssurf[0]) k = 0; - - // Pick random point on selected surface - // - G4ThreeVector p; - switch(k) + G4double phi = twopi*G4QuickRand(); + G4double cosphi = std::cos(phi); + G4double sinphi = std::sin(phi); + G4double select = fSurfaceArea*G4QuickRand(); + if (select < fMinZBaseArea + fMaxZBaseArea) { - case 0: // base at -Z, uniform distribution, rejection sampling - { - G4double zh = zheight + zTopCut; - G4TwoVector rho = G4RandomPointInEllipse(zh*xSemiAxis,zh*ySemiAxis); - p.set(rho.x(),rho.y(),-zTopCut); - break; - } - case 1: // side surface, uniform distribution, rejection sampling - { - G4double zh = G4RandomRadiusInRing(zheight-zTopCut, zheight+zTopCut); - G4double a = x0; - G4double b = y0; - - G4double hh = zheight*zheight; - G4double aa = a*a; - G4double bb = b*b; - G4double R = std::max(a,b); - G4double mu_max = R*std::sqrt(hh + R*R); - - G4double x,y; - for (auto i=0; i<1000; ++i) - { - G4double phi = CLHEP::twopi*G4UniformRand(); - x = std::cos(phi); - y = std::sin(phi); - G4double xx = x*x; - G4double yy = y*y; - G4double E = hh + aa*xx + bb*yy; - G4double F = (aa-bb)*x*y; - G4double G = aa*yy + bb*xx; - G4double mu = std::sqrt(E*G - F*F); - if (mu_max*G4UniformRand() <= mu) break; - } - p.set(zh*xSemiAxis*x,zh*ySemiAxis*y,zheight-zh); - break; - } - case 2: // base at +Z, uniform distribution, rejection sampling - { - G4double zh = zheight - zTopCut; - G4TwoVector rho = G4RandomPointInEllipse(zh*xSemiAxis,zh*ySemiAxis); - p.set(rho.x(),rho.y(),zTopCut); - break; - } + // elliptical bases + G4double z = (select < fMinZBaseArea) ? -zTopCut : zTopCut; + G4double a = xSemiAxis*(zheight - z); + G4double b = ySemiAxis*(zheight - z); + G4double rho = std::sqrt(G4QuickRand()); + return { a*rho*cosphi, b*rho*sinphi, z }; + } + else + { + // lateral surface (rejection sampling) + G4double ucut = zTopCut/zheight; + G4double a = xSemiAxis; + G4double b = ySemiAxis; + G4double h = zheight; + G4double aa = a*a; + G4double bb = b*b; + G4double aabb = aa*bb + bb*cosphi*cosphi + aa*sinphi*sinphi; + G4double ss_max = 4.*ucut*ucut*(std::max(aa, bb) + aa*bb); + G4double u; + for (auto i = 0; i < 10000; ++i) + { + u = ucut*(2.*G4QuickRand() - 1.); + G4double ss = (1. - u)*(1. - u)*aabb; + if (ss_max*sqr(G4QuickRand()) <= ss) break; + } + return { a*h*(1. - u)*cosphi, b*h*(1 - u)*sinphi, h*u }; } - return p; } ///////////////////////////////////////////////////////////////////////// @@ -944,8 +936,9 @@ G4double G4EllipticalCone::GetSurfaceArea() G4double s0 = G4GeomTools::EllipticConeLateralArea(x0,y0,zheight); G4double kmin = (zTopCut >= zheight ) ? 0. : (zheight - zTopCut)/zheight; G4double kmax = (zTopCut >= zheight ) ? 2. : (zheight + zTopCut)/zheight; - fSurfaceArea = (kmax - kmin)*(kmax + kmin)*s0 - + CLHEP::pi*x0*y0*(kmin*kmin + kmax*kmax); + fMinZBaseArea = pi*x0*y0*kmax*kmax; + fMaxZBaseArea = pi*x0*y0*kmin*kmin; + fSurfaceArea = (kmax - kmin)*(kmax + kmin)*s0 + fMinZBaseArea + fMaxZBaseArea; } return fSurfaceArea; } diff --git a/source/geometry/solids/specific/src/G4EllipticalTube.cc b/source/geometry/solids/specific/src/G4EllipticalTube.cc index 00099ef9ac..a1d36b60b2 100644 --- a/source/geometry/solids/specific/src/G4EllipticalTube.cc +++ b/source/geometry/solids/specific/src/G4EllipticalTube.cc @@ -34,13 +34,10 @@ #if !(defined(G4GEOM_USE_UELLIPTICALTUBE) && defined(G4GEOM_USE_SYS_USOLIDS)) #include "G4GeomTools.hh" -#include "G4RandomTools.hh" -#include "G4ClippablePolygon.hh" #include "G4AffineTransform.hh" #include "G4VoxelLimits.hh" #include "G4BoundingEnvelope.hh" - -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -65,6 +62,7 @@ G4EllipticalTube::G4EllipticalTube( const G4String &name, : G4VSolid(name), fDx(Dx), fDy(Dy), fDz(Dz) { CheckParameters(); + fSurfaceArea = GetCachedSurfaceArea(); } ////////////////////////////////////////////////////////////////////////// @@ -106,7 +104,7 @@ G4EllipticalTube::G4EllipticalTube(const G4EllipticalTube& rhs) // // Assignment operator -G4EllipticalTube& G4EllipticalTube::operator = (const G4EllipticalTube& rhs) +G4EllipticalTube& G4EllipticalTube::operator = (const G4EllipticalTube& rhs) { // Check assignment to self // @@ -701,44 +699,37 @@ std::ostream& G4EllipticalTube::StreamInfo(std::ostream& os) const ////////////////////////////////////////////////////////////////////////// // -// Pick up a random point on the surface +// Pick up a random point on the surface G4ThreeVector G4EllipticalTube::GetPointOnSurface() const { - // Select surface (0 - base at -Z, 1 - base at +Z, 2 - lateral surface) + // Pick random point on selected surface // - G4double sbase = pi * fDx * fDy; - G4double ssurf = GetCachedSurfaceArea(); - G4double select = ssurf * G4UniformRand(); - - G4int k = 0; - if (select > sbase) k = 1; - if (select > 2. * sbase) k = 2; - - // Pick random point on selected surface (rejection sampling) - // - G4ThreeVector p; - switch (k) { - case 0: // base at -Z - { - G4TwoVector rho = G4RandomPointInEllipse(fDx, fDy); - p.set(rho.x(), rho.y(), -fDz); - break; - } - case 1: // base at +Z - { - G4TwoVector rho = G4RandomPointInEllipse(fDx, fDy); - p.set(rho.x(), rho.y(), fDz); - break; - } - case 2: // lateral surface - { - G4TwoVector rho = G4RandomPointOnEllipse(fDx, fDy); - p.set(rho.x(), rho.y(), (2. * G4UniformRand() - 1.) * fDz); - break; - } + G4double sbase = pi * fDx * fDy; // base area + G4double select = fSurfaceArea * G4QuickRand(); + G4double x, y, z; + if (select < 2. * sbase) + { // base (ellipse) + G4double phi = CLHEP::twopi * G4QuickRand(); + G4double rho = std::sqrt(G4QuickRand()); + x = rho * std::cos(phi); + y = rho * std::sin(phi); + z = (select < sbase) ? fDz : -fDz; } - return p; + else + { // lateral surface (rejection sampling) + G4double s_max = std::max(fDx, fDy); + for (auto i = 0; i < 10000; ++i) + { + G4double phi = CLHEP::twopi * G4QuickRand(); + x = std::cos(phi); + y = std::sin(phi); + G4double ss = sqr(fDy * x) + sqr(fDx * y); + if (sqr(s_max*G4QuickRand()) <= ss) break; + } + z = (2. * G4QuickRand() - 1.) * fDz; + } + return { fDx * x, fDy * y, z }; } diff --git a/source/geometry/solids/specific/src/G4Hype.cc b/source/geometry/solids/specific/src/G4Hype.cc index e676b2b959..9809756d1c 100644 --- a/source/geometry/solids/specific/src/G4Hype.cc +++ b/source/geometry/solids/specific/src/G4Hype.cc @@ -25,7 +25,7 @@ // // Implementation of G4Hype // -// Authors: +// Authors: // Ernesto Lamanna (Ernesto.Lamanna@roma1.infn.it) & // Francesco Safai Tehrani (Francesco.SafaiTehrani@roma1.infn.it) // Rome, INFN & University of Rome "La Sapienza", 9 June 1998. @@ -35,19 +35,15 @@ #if !(defined(G4GEOM_USE_UHYPE) && defined(G4GEOM_USE_SYS_USOLIDS)) +#include "G4GeomTools.hh" #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" #include "G4BoundingEnvelope.hh" #include "G4ClippablePolygon.hh" +#include "G4QuickRand.hh" #include "G4VPVParameterisation.hh" -#include "meshdefs.hh" - -#include - -#include "Randomize.hh" - #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -74,50 +70,48 @@ G4Hype::G4Hype(const G4String& pName, // Check z-len // - if (newHalfLenZ<=0) + if (newHalfLenZ <= 0) { std::ostringstream message; - message << "Invalid Z half-length - " << GetName() << G4endl - << " Invalid Z half-length: " - << newHalfLenZ/mm << " mm"; + message << "Invalid Z half-length in solid: " << GetName() << " !" + << "\nZ half-length: " << newHalfLenZ/mm << " mm"; G4Exception("G4Hype::G4Hype()", "GeomSolids0002", FatalErrorInArgument, message); } - halfLenZ=newHalfLenZ; + halfLenZ = newHalfLenZ; // Check radii // - if (newInnerRadius<0 || newOuterRadius<0) + if (newInnerRadius < 0 || newOuterRadius < 0 || newInnerRadius >= newOuterRadius) { std::ostringstream message; - message << "Invalid radii - " << GetName() << G4endl - << " Invalid radii ! Inner radius: " - << newInnerRadius/mm << " mm" << G4endl - << " Outer radius: " - << newOuterRadius/mm << " mm"; - G4Exception("G4Hype::G4Hype()", "GeomSolids0002", - FatalErrorInArgument, message); - } - if (newInnerRadius >= newOuterRadius) - { - std::ostringstream message; - message << "Outer > inner radius - " << GetName() << G4endl - << " Invalid radii ! Inner radius: " - << newInnerRadius/mm << " mm" << G4endl - << " Outer radius: " - << newOuterRadius/mm << " mm"; + message << "Invalid radii in solid: " << GetName() << " !" + << "\nInner radius: " << newInnerRadius/mm << " mm" + << "\nOuter radius: " << newOuterRadius/mm << " mm"; G4Exception("G4Hype::G4Hype()", "GeomSolids0002", FatalErrorInArgument, message); } - innerRadius=newInnerRadius; - outerRadius=newOuterRadius; + innerRadius = newInnerRadius; + outerRadius = newOuterRadius; - innerRadius2=innerRadius*innerRadius; - outerRadius2=outerRadius*outerRadius; - - SetInnerStereo( newInnerStereo ); - SetOuterStereo( newOuterStereo ); + innerRadius2 = innerRadius*innerRadius; + outerRadius2 = outerRadius*outerRadius; + + SetInnerStereo(newInnerStereo); + SetOuterStereo(newOuterStereo); + + // Check end radii + // + if (endInnerRadius > endOuterRadius) + { + std::ostringstream message; + message << "Inconsistent stereo angles in solid: " << GetName() << " !" + << "\nEnd inner radius: " << endInnerRadius/mm << " mm" + << "\nEnd outer radius: " << endOuterRadius/mm << " mm"; + G4Exception("G4Hype::G4Hype()", "GeomSolids0002", + FatalErrorInArgument, message); + } } // Fake default constructor - sets only member data and allocates memory @@ -150,13 +144,14 @@ G4Hype::G4Hype(const G4Hype& rhs) endInnerRadius2(rhs.endInnerRadius2), endOuterRadius2(rhs.endOuterRadius2), endInnerRadius(rhs.endInnerRadius), endOuterRadius(rhs.endOuterRadius), fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea), + fInnerSurfaceArea(rhs.fInnerSurfaceArea), fOuterSurfaceArea(rhs.fOuterSurfaceArea), fHalfTol(rhs.fHalfTol) { } // Assignment operator // -G4Hype& G4Hype::operator = (const G4Hype& rhs) +G4Hype& G4Hype::operator = (const G4Hype& rhs) { // Check assignment to self // @@ -177,6 +172,7 @@ G4Hype& G4Hype::operator = (const G4Hype& rhs) endInnerRadius2 = rhs.endInnerRadius2; endOuterRadius2 = rhs.endOuterRadius2; endInnerRadius = rhs.endInnerRadius; endOuterRadius = rhs.endOuterRadius; fCubicVolume = rhs.fCubicVolume; fSurfaceArea = rhs.fSurfaceArea; + fInnerSurfaceArea = rhs.fInnerSurfaceArea; fOuterSurfaceArea = rhs.fOuterSurfaceArea; fHalfTol = rhs.fHalfTol; fRebuildPolyhedron = false; delete fpPolyhedron; fpPolyhedron = nullptr; @@ -184,6 +180,86 @@ G4Hype& G4Hype::operator = (const G4Hype& rhs) return *this; } +// Set inner radius at z = 0 +// +void G4Hype::SetInnerRadius(G4double newIRad) +{ + innerRadius = newIRad; + innerRadius2 = newIRad*newIRad; + endInnerRadius2 = HypeInnerRadius2(halfLenZ); + endInnerRadius = std::sqrt(endInnerRadius2); + fCubicVolume = 0.; + fSurfaceArea = 0.; + fInnerSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, innerRadius, tanInnerStereo, -halfLenZ, halfLenZ); + fRebuildPolyhedron = true; +} + +// Set outer radius at z = 0 +// +void G4Hype::SetOuterRadius(G4double newORad) +{ + outerRadius = newORad; + outerRadius2 = newORad*newORad; + endOuterRadius2 = HypeOuterRadius2(halfLenZ); + endOuterRadius = std::sqrt(endOuterRadius2); + fCubicVolume = 0.; + fSurfaceArea = 0.; + fOuterSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, outerRadius, tanOuterStereo, -halfLenZ, halfLenZ); + fRebuildPolyhedron = true; +} + +// Set half z-length +// +void G4Hype::SetZHalfLength(G4double newHLZ) +{ + halfLenZ = newHLZ; + endInnerRadius2 = HypeInnerRadius2(halfLenZ); + endInnerRadius = std::sqrt(endInnerRadius2); + endOuterRadius2 = HypeOuterRadius2(halfLenZ); + endOuterRadius = std::sqrt(endOuterRadius2); + fCubicVolume = 0.; + fSurfaceArea = 0.; + fInnerSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, innerRadius, tanInnerStereo, -halfLenZ, halfLenZ); + fOuterSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, outerRadius, tanOuterStereo, -halfLenZ, halfLenZ); + fRebuildPolyhedron = true; +} + +// Set inner stereo angle +// +void G4Hype::SetInnerStereo(G4double newISte) +{ + innerStereo = std::abs(newISte); + tanInnerStereo = std::tan(innerStereo); + tanInnerStereo2 = tanInnerStereo*tanInnerStereo; + endInnerRadius2 = HypeInnerRadius2(halfLenZ); + endInnerRadius = std::sqrt(endInnerRadius2); + fCubicVolume = 0.; + fSurfaceArea = 0.; + fInnerSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, innerRadius, tanInnerStereo, -halfLenZ, halfLenZ); + fRebuildPolyhedron = true; +} + +// Set outer stereo angle +// +void G4Hype::SetOuterStereo(G4double newOSte) +{ + outerStereo = std::abs(newOSte); + tanOuterStereo = std::tan(outerStereo); + tanOuterStereo2 = tanOuterStereo*tanOuterStereo; + endOuterRadius2 = HypeOuterRadius2(halfLenZ); + endOuterRadius = std::sqrt(endOuterRadius2); + fCubicVolume = 0.; + fSurfaceArea = 0.; + fOuterSurfaceArea = + G4GeomTools::HyperboloidSurfaceArea(twopi, outerRadius, tanOuterStereo, -halfLenZ, halfLenZ); + fRebuildPolyhedron = true; +} + // Dispatch to parameterisation for replication mechanism dimension // computation & modification. // @@ -206,8 +282,7 @@ void G4Hype::BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const if (pMin.x() >= pMax.x() || pMin.y() >= pMax.y() || pMin.z() >= pMax.z()) { std::ostringstream message; - message << "Bad bounding box (min >= max) for solid: " - << GetName() << " !" + message << "Bad bounding box (min >= max) for solid: " << GetName() << " !" << "\npMin = " << pMin << "\npMax = " << pMax; G4Exception("G4Hype::BoundingLimits()", "GeomMgt0001", @@ -242,38 +317,38 @@ EInside G4Hype::Inside(const G4ThreeVector& p) const // const G4double absZ(std::fabs(p.z())); if (absZ > halfLenZ + fHalfTol) return kOutside; - + // // Check outer radius // const G4double oRad2(HypeOuterRadius2(absZ)); const G4double xR2( p.x()*p.x()+p.y()*p.y() ); - + if (xR2 > oRad2 + kCarTolerance*endOuterRadius) return kOutside; - + if (xR2 > oRad2 - kCarTolerance*endOuterRadius) return kSurface; - + if (InnerSurfaceExists()) { // // Check inner radius // const G4double iRad2(HypeInnerRadius2(absZ)); - + if (xR2 < iRad2 - kCarTolerance*endInnerRadius) return kOutside; - + if (xR2 < iRad2 + kCarTolerance*endInnerRadius) return kSurface; } - + // // We are inside in radius, now check endplate surface // if (absZ > halfLenZ - fHalfTol) return kSurface; - + return kInside; } -// Returns the normal unit vector to the Hyperbolical Surface at a point +// Returns the normal unit vector to the Hyperbolical Surface at a point // p on (or nearly on) the surface // G4ThreeVector G4Hype::SurfaceNormal( const G4ThreeVector& p ) const @@ -284,10 +359,10 @@ G4ThreeVector G4Hype::SurfaceNormal( const G4ThreeVector& p ) const const G4double absZ(std::fabs(p.z())); const G4double distZ(absZ - halfLenZ); const G4double dist2Z(distZ*distZ); - + const G4double xR2( p.x()*p.x()+p.y()*p.y() ); const G4double dist2Outer( std::fabs(xR2 - HypeOuterRadius2(absZ)) ); - + if (InnerSurfaceExists()) { // @@ -301,10 +376,10 @@ G4ThreeVector G4Hype::SurfaceNormal( const G4ThreeVector& p ) const // // Do the "endcaps" win? // - if (dist2Z < dist2Outer) + if (dist2Z < dist2Outer) return { 0.0, 0.0, (G4double)(p.z() < 0 ? -1.0 : 1.0) }; - - + + // // Outer surface wins // @@ -317,7 +392,7 @@ G4ThreeVector G4Hype::SurfaceNormal( const G4ThreeVector& p ) const // // Calculating the intersection of a line with the surfaces // is fairly straight forward. The difficult problem is dealing -// with the intersections of the surfaces in a consistent manner, +// with the intersections of the surfaces in a consistent manner, // and this accounts for the complicated logic. // G4double G4Hype::DistanceToIn( const G4ThreeVector& p, @@ -328,7 +403,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, // if (std::fabs(p.x()*v.y() - p.y()*v.x()) > endOuterRadius+kCarTolerance) return kInfinity; - + // // Take advantage of z symmetry, and reflect throught the // z=0 plane so that pz is always positive @@ -355,12 +430,12 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, G4bool couldMissOuter(true), couldMissInner(true), cantMissInnerCylinder(false); - + // // Check endplate intersection // G4double sigz = pz-halfLenZ; - + if (sigz > -fHalfTol) // equivalent to: if (pz > halfLenZ - fHalfTol) { // @@ -374,7 +449,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, // can't intersect anything // if (sigz > 0) return kInfinity; - + // // Otherwise, we may still hit a hyperbolic surface // if the point is on the hyperbolic surface (within tolerance) @@ -382,7 +457,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, G4double pr2 = p.x()*p.x() + p.y()*p.y(); if (pr2 > endOuterRadius2 + kCarTolerance*endOuterRadius) return kInfinity; - + if (InnerSurfaceExists()) { if (pr2 < endInnerRadius2 - kCarTolerance*endInnerRadius) @@ -405,7 +480,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, G4double q = -sigz/vz; G4double xi = p.x() + q*v.x(), yi = p.y() + q*v.y(); - + // // Is this on the endplate? If so, return s, unless // we are on the tolerant surface, in which case return 0 @@ -423,7 +498,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, // G4double dot1 = (xi*v.x() + yi*v.y())*endInnerRadius/std::sqrt(pr2); couldMissInner = (dot1 - halfLenZ*tanInnerStereo2*vz <= 0); - + if (pr2 > endInnerRadius2*(1 - 2*DBL_EPSILON) ) { // @@ -465,16 +540,16 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, } } } - + // // Check intersection with outer hyperbolic surface, save // distance to valid intersection into "best". - // + // G4double best = kInfinity; - + G4double q[2]; G4int n = IntersectHype( p, v, outerRadius2, tanOuterStereo2, q ); - + if (n > 0) { // @@ -493,7 +568,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, return 0; } } - + // // We are now certain that p is not on the tolerant surface. // Accept only position distance q @@ -508,16 +583,16 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, // checked the endplate intersection already // G4double zi = pz + q[i]*vz; - + if (zi < -halfLenZ) continue; if (zi > +halfLenZ && couldMissOuter) continue; - + // // Check normal // G4double xi = p.x() + q[i]*v.x(), yi = p.y() + q[i]*v.y(); - + if (xi*v.x() + yi*v.y() - zi*tanOuterStereo2*vz > 0) continue; best = q[i]; @@ -525,20 +600,20 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, } } } - - if (!InnerSurfaceExists()) return best; - + + if (!InnerSurfaceExists()) return best; + // // Check intersection with inner hyperbolic surface // - n = IntersectHype( p, v, innerRadius2, tanInnerStereo2, q ); + n = IntersectHype( p, v, innerRadius2, tanInnerStereo2, q ); if (n == 0) { if (cantMissInnerCylinder) return (sigz < fHalfTol) ? 0 : -sigz/vz; - + return best; } - + // // P on this surface? // @@ -554,7 +629,7 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, if (p.x()*v.x() + p.y()*v.y() - pz*tanInnerStereo2*vz > 0) return 0; } } - + // // No, so only positive q is valid. Search for a valid intersection // that is closer than the outer intersection (if it exists) @@ -586,14 +661,14 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, break; } } - + // // Done // return best; } -// Calculates distance to shape from outside, along perpendicular direction +// Calculates distance to shape from outside, along perpendicular direction // (if one exists). May be an underestimate. // // There are five (r,z) regions: @@ -601,8 +676,8 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, // endcap radii // 2. a point with r > outer endcap radius and with // a z position that is beyond the cone formed by the -// normal of the outer hyperbolic surface at the -// edge at which it meets the endcap. +// normal of the outer hyperbolic surface at the +// edge at which it meets the endcap. // 3. a point that is outside the outer surface and not in (1 or 2) // 4. a point that is inside the inner surface and not in (5) // 5. a point with radius < inner endcap radius and @@ -614,24 +689,24 @@ G4double G4Hype::DistanceToIn( const G4ThreeVector& p, G4double G4Hype::DistanceToIn(const G4ThreeVector& p) const { G4double absZ(std::fabs(p.z())); - + // // Check region // G4double r2 = p.x()*p.x() + p.y()*p.y(); G4double r = std::sqrt(r2); - + G4double sigz = absZ - halfLenZ; - + if (r < endOuterRadius) { if (sigz > -fHalfTol) { if (InnerSurfaceExists()) { - if (r > endInnerRadius) + if (r > endInnerRadius) return sigz < fHalfTol ? 0 : sigz; // Region 1 - + G4double dr = endInnerRadius - r; if (sigz > dr*tanInnerStereo2) { @@ -663,7 +738,7 @@ G4double G4Hype::DistanceToIn(const G4ThreeVector& p) const return answer < fHalfTol ? 0 : answer; } } - + if (InnerSurfaceExists()) { if (r2 < HypeInnerRadius2(absZ)+kCarTolerance*endInnerRadius) @@ -675,7 +750,7 @@ G4double G4Hype::DistanceToIn(const G4ThreeVector& p) const return answer < fHalfTol ? 0 : answer; } } - + // // We are left by elimination with region 3 // @@ -687,7 +762,7 @@ G4double G4Hype::DistanceToIn(const G4ThreeVector& p) const // // The situation here is much simplier than DistanceToIn(p,v). For // example, there is no need to even check whether an intersection -// point is inside the boundary of a surface, as long as all surfaces +// point is inside the boundary of a surface, as long as all surfaces // are checked and the smallest distance is used. // G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, @@ -696,7 +771,7 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, { static const G4ThreeVector normEnd1(0.0,0.0,+1.0); static const G4ThreeVector normEnd2(0.0,0.0,-1.0); - + // // Keep track of closest surface // @@ -734,22 +809,22 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, // sBest = (vz > DBL_MIN) ? (halfLenZ - pz)/vz : kInfinity; vBest = true; - + // // Check outer surface // G4double r2 = p.x()*p.x() + p.y()*p.y(); - + G4double q[2]; G4int n = IntersectHype( p, v, outerRadius2, tanOuterStereo2, q ); - + G4ThreeVector norm1, norm2; if (n > 0) { // // We hit somewhere. Are we on the surface? - // + // G4double dr2 = r2 - HypeOuterRadius2(pz); if (std::fabs(dr2) < endOuterRadius*kCarTolerance) { @@ -763,7 +838,7 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, return 0; } } - + // // Nope. Check closest positive intercept. // @@ -788,7 +863,7 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, } } } - + if (InnerSurfaceExists()) { // @@ -814,7 +889,7 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, return 0; } } - + // // Check closest positive // @@ -836,20 +911,20 @@ G4double G4Hype::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, } } } - + // // Done! // if (calcNorm) { *validNorm = vBest; - - if (nBest == &norm1 || nBest == &norm2) + + if (nBest == &norm1 || nBest == &norm2) *norm = nBest->unit(); else *norm = *nBest; } - + return sBest; } @@ -864,19 +939,19 @@ G4double G4Hype::DistanceToOut(const G4ThreeVector& p) const // G4double absZ(std::fabs(p.z())); G4double r(p.perp()); - + G4double sBest = halfLenZ - absZ; - + G4double tryOuter = ApproxDistInside( r, absZ, outerRadius, tanOuterStereo2 ); if (tryOuter < sBest) sBest = tryOuter; - + if (InnerSurfaceExists()) { G4double tryInner = ApproxDistOutside( r,absZ,innerRadius,tanInnerStereo ); if (tryInner < sBest) sBest = tryInner; } - + return sBest < 0.5*kCarTolerance ? 0 : sBest; } @@ -894,7 +969,7 @@ G4double G4Hype::DistanceToOut(const G4ThreeVector& p) const // intersection point is p + q*v, and if there are // two intersections, q[0] < q[1]. May be negative. // Returns: -// The number of intersections. If 0, the trajectory misses. +// The number of intersections. If 0, the trajectory misses. // // // Equation of a line: @@ -917,8 +992,8 @@ G4double G4Hype::DistanceToOut(const G4ThreeVector& p) const // // c = x0**2 + y0**2 - r**2 - (z0*tanPhi)**2 // -// -G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, +// +G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, G4double r2, G4double tan2Phi, G4double ss[2] ) { G4double x0 = p.x(), y0 = p.y(), z0 = p.z(); @@ -927,7 +1002,7 @@ G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, G4double a = tx*tx + ty*ty - tz*tz*tan2Phi; G4double b = 2*( x0*tx + y0*ty - z0*tz*tan2Phi ); G4double c = x0*x0 + y0*y0 - r2 - z0*z0*tan2Phi; - + if (std::fabs(a) < DBL_MIN) { // @@ -936,15 +1011,15 @@ G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, // if (std::fabs(b) < DBL_MIN) return 0; // Unless we travel through exact center - + ss[0] = c/b; return 1; } G4double radical = b*b - 4*a*c; - + if (radical < -DBL_MIN) return 0; // No solution - + if (radical < DBL_MIN) { // @@ -953,16 +1028,16 @@ G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, ss[0] = -b/a/2.0; return 1; } - + radical = std::sqrt(radical); - + G4double q = -0.5*( b + (b < 0 ? -radical : +radical) ); G4double sa = q/a; - G4double sb = c/q; + G4double sb = c/q; if (sa < sb) { ss[0] = sa; ss[1] = sb; } else { ss[0] = sb; ss[1] = sa; } return 2; } - + // ApproxDistOutside (static) // // Finds the approximate distance of a point outside @@ -972,12 +1047,12 @@ G4int G4Hype::IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, // matter how close the point is. // // Our hyperbola approaches the asymptotic limit at z = +/- infinity -// to the lines r = z*tanPhi. We call these lines the +// to the lines r = z*tanPhi. We call these lines the // asymptotic limit line. // // We need the distance of the 2d point p(r,z) to the // hyperbola r**2 = r0**2 + (z*tanPhi)**2. Find two -// points that bracket the true normal and use the +// points that bracket the true normal and use the // distance to the line that connects these two points. // The first such point is z=p.z. The second point is // the z position on the asymptotic limit line that @@ -995,19 +1070,19 @@ G4double G4Hype::ApproxDistOutside( G4double pr, G4double pz, // G4double z1 = pz; G4double r1 = std::sqrt( r0*r0 + z1*z1*tan2Phi ); - + // // Second point // G4double z2 = (pr*tanPhi + pz)/(1 + tan2Phi); G4double r2 = std::sqrt( r0*r0 + z2*z2*tan2Phi ); - + // // Line between them // G4double dr = r2-r1; G4double dz = z2-z1; - + G4double len = std::sqrt(dr*dr + dz*dz); if (len < DBL_MIN) { @@ -1019,7 +1094,7 @@ G4double G4Hype::ApproxDistOutside( G4double pr, G4double pz, dz = pz-z1; return std::sqrt( dr*dr + dz*dz ); } - + // // Distance // @@ -1049,11 +1124,11 @@ G4double G4Hype::ApproxDistInside( G4double pr, G4double pz, // Corresponding position and normal on hyperbolic // G4double rh = std::sqrt( r0*r0 + pz*pz*tan2Phi ); - + G4double dr = -rh; G4double dz = pz*tan2Phi; G4double len = std::sqrt(dr*dr + dz*dz); - + // // Answer // @@ -1074,16 +1149,14 @@ G4VSolid* G4Hype::Clone() const return new G4Hype(*this); } - -// // GetCubicVolume // G4double G4Hype::GetCubicVolume() { if (fCubicVolume == 0.) { - fCubicVolume = CLHEP::twopi*halfLenZ* - (2.*(outerRadius2 - innerRadius2) + endOuterRadius2 - endInnerRadius2)/3.; + fCubicVolume = + twopi*halfLenZ*(2.*(outerRadius2 - innerRadius2) + endOuterRadius2 - endInnerRadius2)/3.; } return fCubicVolume; } @@ -1094,30 +1167,7 @@ G4double G4Hype::GetSurfaceArea() { if (fSurfaceArea == 0.) { - G4double h = halfLenZ; - G4double innS = 2.*h*innerRadius; - if (std::abs(endInnerRadius - innerRadius) > kCarTolerance) - { - G4double A = innerRadius; - G4double AA = innerRadius2; - G4double RR = endInnerRadius2; - G4double CC = AA*h*h/(RR - AA); - G4double K = std::sqrt(AA + CC)/CC; - G4double Kh = K*h; - innS = A*(h*std::sqrt(1. + Kh*Kh) + std::asinh(Kh)/K); - } - G4double outS = 2.*h*outerRadius; - if (std::abs(endOuterRadius - outerRadius) > kCarTolerance) - { - G4double A = outerRadius; - G4double AA = outerRadius2; - G4double RR = endOuterRadius2; - G4double CC = AA*h*h/(RR - AA); - G4double K = std::sqrt(AA + CC)/CC; - G4double Kh = K*h; - outS = A*(h*std::sqrt(1. + Kh*Kh) + std::asinh(Kh)/K); - } - fSurfaceArea = CLHEP::twopi*(endOuterRadius2 - endInnerRadius2 + innS + outS); + fSurfaceArea = fInnerSurfaceArea + fOuterSurfaceArea + twopi*(endOuterRadius2 - endInnerRadius2); } return fSurfaceArea; } @@ -1143,130 +1193,70 @@ std::ostream& G4Hype::StreamInfo(std::ostream& os) const return os; } -// GetPointOnSurface +// Pick random point on surface // G4ThreeVector G4Hype::GetPointOnSurface() const { - G4double xRand, yRand, zRand, r2 , aOne, aTwo, aThree, chose, sinhu; - G4double phi, cosphi, sinphi, rBar2Out, rBar2In, alpha, t, rOut, rIn2, rOut2; + G4double sbases = twopi*(endOuterRadius2 - endInnerRadius2); + G4double stotal = fInnerSurfaceArea + fOuterSurfaceArea + sbases; + G4double select = stotal*G4QuickRand(); - // we use the formula of the area of a surface of revolution to compute - // the areas, using the equation of the hyperbola: - // x^2 + y^2 = (z*tanphi)^2 + r^2 - - rBar2Out = outerRadius2; - alpha = 2.*pi*rBar2Out*std::cos(outerStereo)/tanOuterStereo; - t = halfLenZ*tanOuterStereo/(outerRadius*std::cos(outerStereo)); - t = std::log(t+std::sqrt(sqr(t)+1)); - aOne = std::fabs(2.*alpha*(std::sinh(2.*t)/4.+t/2.)); - - - rBar2In = innerRadius2; - alpha = 2.*pi*rBar2In*std::cos(innerStereo)/tanInnerStereo; - t = halfLenZ*tanInnerStereo/(innerRadius*std::cos(innerStereo)); - t = std::log(t+std::sqrt(sqr(t)+1)); - aTwo = std::fabs(2.*alpha*(std::sinh(2.*t)/4.+t/2.)); - - aThree = pi*((outerRadius2+sqr(halfLenZ*tanOuterStereo) - -(innerRadius2+sqr(halfLenZ*tanInnerStereo)))); - - if(outerStereo == 0.) {aOne = std::fabs(2.*pi*outerRadius*2.*halfLenZ);} - if(innerStereo == 0.) {aTwo = std::fabs(2.*pi*innerRadius*2.*halfLenZ);} - - phi = G4RandFlat::shoot(0.,2.*pi); - cosphi = std::cos(phi); - sinphi = std::sin(phi); - sinhu = G4RandFlat::shoot(-1.*halfLenZ*tanOuterStereo/outerRadius, - halfLenZ*tanOuterStereo/outerRadius); - - chose = G4RandFlat::shoot(0.,aOne+aTwo+2.*aThree); - if(chose>=0. && chose < aOne) + G4double h = halfLenZ; + G4double phi = twopi*G4QuickRand(); + G4double cosphi = std::cos(phi); + G4double sinphi = std::sin(phi); + if (select < sbases) { - if(outerStereo != 0.) - { - zRand = outerRadius*sinhu/tanOuterStereo; - xRand = std::sqrt(sqr(sinhu)+1)*outerRadius*cosphi; - yRand = std::sqrt(sqr(sinhu)+1)*outerRadius*sinphi; - return { xRand, yRand, zRand }; - } - else - { - return { outerRadius*cosphi, outerRadius*sinphi, - G4RandFlat::shoot(-halfLenZ,halfLenZ) }; - } - } - else if(chose>=aOne && chose=aOne+aTwo && chose rOut2 ) ; - - zRand = halfLenZ; - return { xRand, yRand, zRand }; + // circular bases + G4double u = G4QuickRand(); + G4double rho = std::sqrt(u*endOuterRadius2 + (1. - u)*endInnerRadius2); + G4double z = (select < 0.5*sbases) ? -h : h; + return { rho*cosphi, rho*sinphi, z }; } else { - rIn2 = innerRadius2+tanInnerStereo2*halfLenZ*halfLenZ; - rOut2 = outerRadius2+tanOuterStereo2*halfLenZ*halfLenZ; - rOut = std::sqrt(rOut2) ; - - do // Loop checking, 13.08.2015, G.Cosmo + // lateral surfaces (rejection sampling) + G4double hh = h*h; + G4double rr = (select < stotal - fInnerSurfaceArea) ? outerRadius2 : innerRadius2; + G4double endrr = (select < stotal - fInnerSurfaceArea) ? endOuterRadius2 : endInnerRadius2; + G4double delrr = endrr - rr; + // max surface element: std::sqrt(aa*hh + (RR - aa)*(RR - aa + hh)*1.0) + G4double ss_max = rr*hh + delrr*(delrr + hh); + G4double u = 0.; + for (auto i = 0; i < 10000; ++i) { - xRand = G4RandFlat::shoot(-rOut,rOut) ; - yRand = G4RandFlat::shoot(-rOut,rOut) ; - r2 = xRand*xRand + yRand*yRand ; - } while ( r2 < rIn2 || r2 > rOut2 ) ; - - zRand = -1.*halfLenZ; - return { xRand, yRand, zRand }; + u = 2.*G4QuickRand() - 1.; + // surface element: std::sqrt(aa*hh + (RR - aa)*(RR - aa + hh)*uu) + G4double ss = rr*hh + delrr*(delrr + hh)*u*u; + if (ss_max*sqr(G4QuickRand()) <= ss) break; + } + G4double z = h*u; + G4double rho = std::sqrt(rr + delrr*u*u); + return { rho*cosphi, rho*sinphi, z }; } } // DescribeYourselfTo // -void G4Hype::DescribeYourselfTo (G4VGraphicsScene& scene) const +void G4Hype::DescribeYourselfTo (G4VGraphicsScene& scene) const { scene.AddSolid (*this); } // GetExtent // -G4VisExtent G4Hype::GetExtent() const +G4VisExtent G4Hype::GetExtent() const { // Define the sides of the box into which the G4Tubs instance would fit. // - return { -endOuterRadius, endOuterRadius, - -endOuterRadius, endOuterRadius, + return { -endOuterRadius, endOuterRadius, + -endOuterRadius, endOuterRadius, -halfLenZ, halfLenZ }; } // CreatePolyhedron // -G4Polyhedron* G4Hype::CreatePolyhedron() const +G4Polyhedron* G4Hype::CreatePolyhedron() const { return new G4PolyhedronHype(innerRadius, outerRadius, tanInnerStereo2, tanOuterStereo2, halfLenZ); @@ -1290,11 +1280,4 @@ G4Polyhedron* G4Hype::GetPolyhedron () const return fpPolyhedron; } -// asinh -// -G4double G4Hype::asinh(G4double arg) -{ - return std::log(arg+std::sqrt(sqr(arg)+1)); -} - #endif // !defined(G4GEOM_USE_UHYPE) || !defined(G4GEOM_USE_SYS_USOLIDS) diff --git a/source/geometry/solids/specific/src/G4Paraboloid.cc b/source/geometry/solids/specific/src/G4Paraboloid.cc index 7bf29dba9b..d49c9743d0 100644 --- a/source/geometry/solids/specific/src/G4Paraboloid.cc +++ b/source/geometry/solids/specific/src/G4Paraboloid.cc @@ -38,10 +38,7 @@ #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" #include "G4BoundingEnvelope.hh" - -#include "meshdefs.hh" - -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -70,7 +67,7 @@ G4Paraboloid::G4Paraboloid(const G4String& pName, std::ostringstream message; message << "Invalid dimensions. Negative Input Values or R1>=R2 - " << GetName(); - G4Exception("G4Paraboloid::G4Paraboloid()", "GeomSolids0002", + G4Exception("G4Paraboloid::G4Paraboloid()", "GeomSolids0002", FatalErrorInArgument, message, "Z half-length must be larger than zero or R1>=R2."); } @@ -86,6 +83,8 @@ G4Paraboloid::G4Paraboloid(const G4String& pName, k1 = (r2 * r2 - r1 * r1) / 2 / dz; k2 = (r2 * r2 + r1 * r1) / 2; + + fSurfaceArea = CalculateSurfaceArea(); } /////////////////////////////////////////////////////////////////////////////// @@ -94,7 +93,7 @@ G4Paraboloid::G4Paraboloid(const G4String& pName, // for usage restricted to object persistency. // G4Paraboloid::G4Paraboloid( __void__& a ) - : G4VSolid(a), dz(0.), r1(0.), r2(0.), k1(0.), k2(0.) + : G4VSolid(a) { } @@ -122,7 +121,7 @@ G4Paraboloid::G4Paraboloid(const G4Paraboloid& rhs) // // Assignment operator // -G4Paraboloid& G4Paraboloid::operator = (const G4Paraboloid& rhs) +G4Paraboloid& G4Paraboloid::operator = (const G4Paraboloid& rhs) { // Check assignment to self // @@ -142,6 +141,123 @@ G4Paraboloid& G4Paraboloid::operator = (const G4Paraboloid& rhs) return *this; } +/////////////////////////////////////////////////////////////////////////////// +// +// Set half height +// +void G4Paraboloid::SetZHalfLength(G4double pDz) +{ + if(pDz <= 0) + { + G4Exception("G4Paraboloid::SetZHalfLength()", "GeomSolids0002", + FatalException, "Invalid dimensions."); + } + else + { + dz = pDz; + k1 = (sqr(r2) - sqr(r1)) / (2 * dz); + k2 = (sqr(r2) + sqr(r1)) / 2; + fSurfaceArea = CalculateSurfaceArea(); + fCubicVolume = 0.; + fRebuildPolyhedron = true; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Set radius at z = dz +// +void G4Paraboloid::SetRadiusPlusZ(G4double pR2) +{ + if(pR2 <= 0 || pR2 <= r1) + { + G4Exception("G4Paraboloid::SetRadiusPlusZ()", "GeomSolids0002", + FatalException, "Invalid dimensions."); + } + else + { + r2 = pR2; + k1 = (sqr(r2) - sqr(r1)) / (2 * dz); + k2 = (sqr(r2) + sqr(r1)) / 2; + fSurfaceArea = CalculateSurfaceArea(); + fCubicVolume = 0.; + fRebuildPolyhedron = true; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Set radius at z = -dz +// +void G4Paraboloid::SetRadiusMinusZ(G4double pR1) +{ + if(pR1 < 0 || pR1 >= r2) + { + G4Exception("G4Paraboloid::SetRadiusMinusZ()", "GeomSolids0002", + FatalException, "Invalid dimensions."); + } + else + { + r1 = pR1; + k1 = (sqr(r2) - sqr(r1)) / (2 * dz); + k2 = (sqr(r2) + sqr(r1)) / 2; + fSurfaceArea = CalculateSurfaceArea(); + fCubicVolume = 0.; + fRebuildPolyhedron = true; + } +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Compute surface area of the solid +// +G4double G4Paraboloid::CalculateSurfaceArea() const +{ + // Surface area for a paraboloid of height hmax + G4double hmax = k2/k1 + dz; + G4double Amax = sqr(r2) + 4*sqr(hmax); + Amax *= std::sqrt(Amax); // set Amax = sqrt(Amax^3) + Amax = CLHEP::pi * r2 / 6 / sqr(hmax) * (Amax - r2 * r2 * r2); + + // Surface area for a paraboloid of height hmin + G4double Amin = 0.0; + if(r1 != 0) + { + G4double hmin = k2/k1 - dz; + Amin = sqr(r1) + 4*sqr(hmin); + Amin *= std::sqrt(Amin); // set Amin = sqrt(Amin^3) + Amin = CLHEP::pi * r1 / 6 / sqr(hmin) * (Amin - r1 * r1 * r1); + } + // Total surface area + return Amax - Amin + (sqr(r1) + sqr(r2))*CLHEP::pi; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Return surface area of the solid +// +G4double G4Paraboloid::GetSurfaceArea() +{ + if (fSurfaceArea == 0.) + { + fSurfaceArea = CalculateSurfaceArea(); + } + return fSurfaceArea; +} + +/////////////////////////////////////////////////////////////////////////////// +// +// Return volume of the solid +// +G4double G4Paraboloid::GetCubicVolume() +{ + if(fCubicVolume == 0.) + { + fCubicVolume = CLHEP::pi * (sqr(r1) + sqr(r2)) * dz; + } + return fCubicVolume; +} + /////////////////////////////////////////////////////////////////////////////// // // Get bounding box @@ -200,12 +316,12 @@ EInside G4Paraboloid::Inside(const G4ThreeVector& p) const G4double rho2 = p.perp2(), rhoSurfTimesTol2 = (k1 * p.z() + k2) * sqr(kCarTolerance), A = rho2 - ((k1 *p.z() + k2) + 0.25 * kCarTolerance * kCarTolerance); - + if(A < 0 && sqr(A) > rhoSurfTimesTol2) { // Actually checking rho < radius of paraboloid at z = p.z(). // We're either inside or in lower/upper cutoff area. - + if(std::fabs(p.z()) > dz - 0.5 * kCarTolerance) { // We're in the upper/lower cutoff area, sides have a paraboloid shape @@ -335,7 +451,7 @@ G4double G4Paraboloid::DistanceToIn( const G4ThreeVector& p, G4double tol2 = kCarTolerance*kCarTolerance; G4double tolh = 0.5*kCarTolerance; - if((r2 != 0.0) && p.z() > - tolh + dz) + if((r2 != 0.0) && p.z() > - tolh + dz) { // If the points is above check for intersection with upper edge. @@ -599,7 +715,7 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p, { // intersection = (A + std::sqrt(B + sqr(A))) / vRho2; // The above calculation has a precision problem: - // known problem of solving quadratic equation with small A + // known problem of solving quadratic equation with small A A = A/vRho2; B = (k1 * p.z() + k2 - rho2)/vRho2; @@ -625,10 +741,10 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p, } else if ( (rho2 < paraRho2 + kCarTolerance || sqr(rho2 - paraRho2 - 0.25 * tol2) < tol2 * paraRho2 ) - && std::fabs(p.z()) < dz + tolh) + && std::fabs(p.z()) < dz + tolh) { // If this is true we're somewhere in the border. - + G4ThreeVector normal = G4ThreeVector (p.x(), p.y(), -k1/2); if(std::fabs(p.z()) > dz - tolh) @@ -671,7 +787,7 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p, } } // - // Problem in the Logic :: Following condition for point on upper surface + // Problem in the Logic :: Following condition for point on upper surface // and Vz<0 will return 0 (Problem #1015), but // it has to return intersection with parabolic // surface or with lower plane surface (z = -dz) @@ -802,7 +918,7 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p, return kInfinity; } return 0; -} +} /////////////////////////////////////////////////////////////////////////////// // @@ -845,7 +961,7 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p) const return safe ; } -////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // G4EntityType // @@ -854,7 +970,7 @@ G4GeometryType G4Paraboloid::GetEntityType() const return {"G4Paraboloid"}; } -////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // Make a clone of the object // @@ -863,7 +979,7 @@ G4VSolid* G4Paraboloid::Clone() const return new G4Paraboloid(*this); } -////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // Stream object contents to an output stream // @@ -884,38 +1000,44 @@ std::ostream& G4Paraboloid::StreamInfo( std::ostream& os ) const return os; } -//////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // GetPointOnSurface // G4ThreeVector G4Paraboloid::GetPointOnSurface() const { - G4double A = (fSurfaceArea == 0)? CalculateSurfaceArea(): fSurfaceArea; - G4double z = G4RandFlat::shoot(0.,1.); - G4double phi = G4RandFlat::shoot(0., twopi); - if(pi*(sqr(r1) + sqr(r2))/A >= z) + G4double phi = twopi*G4QuickRand(); + G4double select = fSurfaceArea*G4QuickRand(); + G4double z, rho; + if (select < pi*(sqr(r1) + sqr(r2))) { - G4double rho; - if(pi * sqr(r1) / A > z) + if(select < pi*sqr(r1)) { - rho = r1 * std::sqrt(G4RandFlat::shoot(0., 1.)); - return { rho * std::cos(phi), rho * std::sin(phi), -dz }; + z = -dz; + rho = r1*std::sqrt(G4QuickRand()); } else { - rho = r2 * std::sqrt(G4RandFlat::shoot(0., 1)); - return { rho * std::cos(phi), rho * std::sin(phi), dz }; + z = dz; + rho = r2*std::sqrt(G4QuickRand()); } } else { - z = G4RandFlat::shoot(0., 1.)*2*dz - dz; - return { std::sqrt(z*k1 + k2)*std::cos(phi), - std::sqrt(z*k1 + k2)*std::sin(phi), z}; + // rejection sampling + G4double mu_max = dz*k1 + k2 + 0.25*k1; // max surface element squared + for (auto i = 0; i < 10000; ++i) + { + z = dz*(2*G4QuickRand() - 1); + G4double mu = z*k1 + k2 + 0.25*k1; // surface element squared + if (mu_max*sqr(G4QuickRand()) <= mu) break; + } + rho = std::sqrt(z*k1 + k2); } + return { rho*std::cos(phi), rho*std::sin(phi), z }; } -///////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// // // Methods for visualisation // diff --git a/source/geometry/solids/specific/src/G4PolyPhiFace.cc b/source/geometry/solids/specific/src/G4PolyPhiFace.cc index afd09a25dd..a734374be4 100644 --- a/source/geometry/solids/specific/src/G4PolyPhiFace.cc +++ b/source/geometry/solids/specific/src/G4PolyPhiFace.cc @@ -36,7 +36,7 @@ #include "G4SolidExtentList.hh" #include "G4GeometryTolerance.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4TwoVector.hh" // Constructor @@ -884,8 +884,8 @@ G4double G4PolyPhiFace::SurfaceTriangle( const G4ThreeVector& p1, v = p3 - p1; w = p1 - p2; - G4double lambda1 = G4UniformRand(); - G4double lambda2 = lambda1*G4UniformRand(); + G4double lambda1 = G4QuickRand(); + G4double lambda2 = lambda1*G4QuickRand(); *p4=p2 + lambda1*w + lambda2*v; return 0.5*(v.cross(w)).mag(); @@ -1220,7 +1220,7 @@ void G4PolyPhiFace::Triangulate() // Second Step: choose randomly one surface // - G4double chose = area*G4UniformRand(); + G4double chose = area*G4QuickRand(); // Third Step: Get a point on choosen surface // diff --git a/source/geometry/solids/specific/src/G4PolyconeSide.cc b/source/geometry/solids/specific/src/G4PolyconeSide.cc index eb41205639..348aa3f513 100644 --- a/source/geometry/solids/specific/src/G4PolyconeSide.cc +++ b/source/geometry/solids/specific/src/G4PolyconeSide.cc @@ -38,7 +38,7 @@ #include "G4SolidExtentList.hh" #include "G4GeometryTolerance.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" // This new field helps to use the class G4PlSideManager. // @@ -1171,8 +1171,8 @@ G4ThreeVector G4PolyconeSide::GetPointOnFace() G4double x,y,zz; G4double rr,phi,dz,dr; dr=r[1]-r[0];dz=z[1]-z[0]; - phi=startPhi+deltaPhi*G4UniformRand(); - rr=r[0]+dr*G4UniformRand(); + phi=startPhi+deltaPhi*G4QuickRand(); + rr=r[0]+dr*G4QuickRand(); x=rr*std::cos(phi); y=rr*std::sin(phi); @@ -1187,7 +1187,7 @@ G4ThreeVector G4PolyconeSide::GetPointOnFace() { if(dr==0.) // PolyconeSide has a Tube Form { - zz = z[0]+dz*G4UniformRand(); + zz = z[0]+dz*G4QuickRand(); } else { diff --git a/source/geometry/solids/specific/src/G4PolyhedraSide.cc b/source/geometry/solids/specific/src/G4PolyhedraSide.cc index bd945d5d5d..36f50990b5 100644 --- a/source/geometry/solids/specific/src/G4PolyhedraSide.cc +++ b/source/geometry/solids/specific/src/G4PolyhedraSide.cc @@ -37,7 +37,7 @@ #include "G4SolidExtentList.hh" #include "G4GeometryTolerance.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" // This new field helps to use the class G4PhSideManager. // @@ -1174,8 +1174,8 @@ G4double G4PolyhedraSide::SurfaceTriangle( const G4ThreeVector& p1, v = p3 - p1; w = p1 - p2; - G4double lambda1 = G4UniformRand(); - G4double lambda2 = lambda1*G4UniformRand(); + G4double lambda1 = G4QuickRand(); + G4double lambda2 = lambda1*G4QuickRand(); *p4=p2 + lambda1*w + lambda2*v; return 0.5*(v.cross(w)).mag(); @@ -1196,7 +1196,7 @@ G4PolyhedraSide::GetPointOnPlane( const G4ThreeVector& p0, const G4ThreeVector& aTwo = SurfaceTriangle(p2,p3,p0,&point2); *Area= aOne+aTwo; - chose = G4UniformRand()*(aOne+aTwo); + chose = G4QuickRand()*(aOne+aTwo); if( (chose>=0.) && (chose < aOne) ) { return (point1); @@ -1269,7 +1269,7 @@ G4ThreeVector G4PolyhedraSide::GetPointOnFace() // Choose randomly one of the surfaces and point on it // - G4double chose = area*G4UniformRand(); + G4double chose = area*G4QuickRand(); G4double Achose1=0., Achose2=0.; G4int i=0; do // Loop checking, 13.08.2015, G.Cosmo diff --git a/source/geometry/solids/specific/src/G4QuadrangularFacet.cc b/source/geometry/solids/specific/src/G4QuadrangularFacet.cc index e224569498..79c11672e4 100644 --- a/source/geometry/solids/specific/src/G4QuadrangularFacet.cc +++ b/source/geometry/solids/specific/src/G4QuadrangularFacet.cc @@ -38,8 +38,7 @@ // -------------------------------------------------------------------- #include "G4QuadrangularFacet.hh" -#include "geomdefs.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" using namespace std; @@ -321,7 +320,7 @@ G4ThreeVector G4QuadrangularFacet::GetPointOnFace() const { G4double s1 = fFacet1.GetArea(); G4double s2 = fFacet2.GetArea(); - return ((s1+s2)*G4UniformRand() < s1) ? + return ((s1 + s2)*G4QuickRand() < s1) ? fFacet1.GetPointOnFace() : fFacet2.GetPointOnFace(); } diff --git a/source/geometry/solids/specific/src/G4TessellatedSolid.cc b/source/geometry/solids/specific/src/G4TessellatedSolid.cc index 0b8d4aa3c7..7751bded3b 100644 --- a/source/geometry/solids/specific/src/G4TessellatedSolid.cc +++ b/source/geometry/solids/specific/src/G4TessellatedSolid.cc @@ -58,13 +58,13 @@ #include #include "geomdefs.hh" -#include "Randomize.hh" #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" #include "G4GeometryTolerance.hh" #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" #include "G4BoundingEnvelope.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4VisExtent.hh" @@ -2159,7 +2159,7 @@ G4ThreeVector G4TessellatedSolid::GetPointOnSurface() const { // Select randomly a facet and return a random point on it - auto i = (G4int) G4RandFlat::shoot(0., fFacets.size()); + auto i = (G4int)(fFacets.size()*G4QuickRand()); return fFacets[i]->GetPointOnFace(); } diff --git a/source/geometry/solids/specific/src/G4TriangularFacet.cc b/source/geometry/solids/specific/src/G4TriangularFacet.cc index 6749f2d7a0..2010ed7444 100644 --- a/source/geometry/solids/specific/src/G4TriangularFacet.cc +++ b/source/geometry/solids/specific/src/G4TriangularFacet.cc @@ -40,8 +40,7 @@ // -------------------------------------------------------------------- #include "G4TriangularFacet.hh" - -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4TessellatedGeometryAlgorithms.hh" using namespace std; @@ -776,9 +775,13 @@ G4bool G4TriangularFacet::Intersect (const G4ThreeVector& p, // G4ThreeVector G4TriangularFacet::GetPointOnFace() const { - G4double u = G4UniformRand(); - G4double v = G4UniformRand(); - if (u+v > 1.) { u = 1. - u; v = 1. - v; } + G4double u = G4QuickRand(); + G4double v = G4QuickRand(); + if (u + v > 1.) + { + u = 1. - u; + v = 1. - v; + } return GetVertex(0) + u*fE1 + v*fE2; } diff --git a/source/geometry/solids/specific/src/G4TwistedTubs.cc b/source/geometry/solids/specific/src/G4TwistedTubs.cc index e8e414fabd..3c9bdb8ada 100644 --- a/source/geometry/solids/specific/src/G4TwistedTubs.cc +++ b/source/geometry/solids/specific/src/G4TwistedTubs.cc @@ -41,14 +41,12 @@ #include "G4BoundingEnvelope.hh" #include "G4ClippablePolygon.hh" #include "G4VPVParameterisation.hh" -#include "meshdefs.hh" +#include "G4QuickRand.hh" #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" #include "G4VisExtent.hh" -#include "Randomize.hh" - #include "G4AutoLock.hh" namespace @@ -1024,7 +1022,7 @@ G4double G4TwistedTubs::GetSurfaceArea() G4ThreeVector G4TwistedTubs::GetPointOnSurface() const { - G4double z = G4RandFlat::shoot(fEndZ[0],fEndZ[1]); + G4double z = (fEndZ[1] - fEndZ[0])*G4QuickRand() + fEndZ[0] ; G4double phi , phimin, phimax ; G4double x , xmin, xmax ; G4double r , rmin, rmax ; @@ -1036,14 +1034,14 @@ G4ThreeVector G4TwistedTubs::GetPointOnSurface() const G4double a5 = fLowerEndcap->GetSurfaceArea() ; G4double a6 = fUpperEndcap->GetSurfaceArea() ; - G4double chose = G4RandFlat::shoot(0.,a1 + a2 + a3 + a4 + a5 + a6) ; + G4double chose = (a1 + a2 + a3 + a4 + a5 + a6)*G4QuickRand() ; if(chose < a1) { phimin = fOuterHype->GetBoundaryMin(z) ; phimax = fOuterHype->GetBoundaryMax(z) ; - phi = G4RandFlat::shoot(phimin,phimax) ; + phi = (phimax - phimin)*G4QuickRand() + phimin ; return fOuterHype->SurfacePoint(phi,z,true) ; @@ -1053,27 +1051,27 @@ G4ThreeVector G4TwistedTubs::GetPointOnSurface() const phimin = fInnerHype->GetBoundaryMin(z) ; phimax = fInnerHype->GetBoundaryMax(z) ; - phi = G4RandFlat::shoot(phimin,phimax) ; + phi = (phimax - phimin)*G4QuickRand() + phimin ; return fInnerHype->SurfacePoint(phi,z,true) ; } - else if ( (chose >= a1 + a2 ) && (chose < a1 + a2 + a3 ) ) + else if ( (chose >= a1 + a2 ) && (chose < a1 + a2 + a3 ) ) { - xmin = fLatterTwisted->GetBoundaryMin(z) ; + xmin = fLatterTwisted->GetBoundaryMin(z) ; xmax = fLatterTwisted->GetBoundaryMax(z) ; - x = G4RandFlat::shoot(xmin,xmax) ; - + x = (xmax - xmin)*G4QuickRand() + xmin ; + return fLatterTwisted->SurfacePoint(x,z,true) ; } else if ( (chose >= a1 + a2 + a3 ) && (chose < a1 + a2 + a3 + a4 ) ) { - xmin = fFormerTwisted->GetBoundaryMin(z) ; + xmin = fFormerTwisted->GetBoundaryMin(z) ; xmax = fFormerTwisted->GetBoundaryMax(z) ; - x = G4RandFlat::shoot(xmin,xmax) ; + x = (xmax - xmin)*G4QuickRand() + xmin ; return fFormerTwisted->SurfacePoint(x,z,true) ; } @@ -1081,11 +1079,11 @@ G4ThreeVector G4TwistedTubs::GetPointOnSurface() const { rmin = GetEndInnerRadius(0) ; rmax = GetEndOuterRadius(0) ; - r = std::sqrt(G4RandFlat::shoot()*(sqr(rmax)-sqr(rmin))+sqr(rmin)); + r = std::sqrt((sqr(rmax)-sqr(rmin))*G4QuickRand() + sqr(rmin)) ; - phimin = fLowerEndcap->GetBoundaryMin(r) ; + phimin = fLowerEndcap->GetBoundaryMin(r) ; phimax = fLowerEndcap->GetBoundaryMax(r) ; - phi = G4RandFlat::shoot(phimin,phimax) ; + phi = (phimax - phimin)*G4QuickRand() + phimin ; return fLowerEndcap->SurfacePoint(phi,r,true) ; } @@ -1093,11 +1091,11 @@ G4ThreeVector G4TwistedTubs::GetPointOnSurface() const { rmin = GetEndInnerRadius(1) ; rmax = GetEndOuterRadius(1) ; - r = rmin + (rmax-rmin)*std::sqrt(G4RandFlat::shoot()); + r = rmin + (rmax-rmin)*std::sqrt(G4QuickRand()) ; - phimin = fUpperEndcap->GetBoundaryMin(r) ; + phimin = fUpperEndcap->GetBoundaryMin(r) ; phimax = fUpperEndcap->GetBoundaryMax(r) ; - phi = G4RandFlat::shoot(phimin,phimax) ; + phi = (phimax - phimin)*G4QuickRand() + phimin ; return fUpperEndcap->SurfacePoint(phi,r,true) ; } diff --git a/source/geometry/solids/specific/src/G4VCSGfaceted.cc b/source/geometry/solids/specific/src/G4VCSGfaceted.cc index 137e77ee76..ce4b35f8a7 100644 --- a/source/geometry/solids/specific/src/G4VCSGfaceted.cc +++ b/source/geometry/solids/specific/src/G4VCSGfaceted.cc @@ -36,7 +36,7 @@ #include "G4VoxelLimits.hh" #include "G4AffineTransform.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4Polyhedron.hh" #include "G4VGraphicsScene.hh" @@ -605,7 +605,7 @@ G4ThreeVector G4VCSGfaceted::GetPointOnSurfaceGeneric( ) const // Second Step: choose randomly one surface // G4VCSGface **face1 = faces; - G4double chose = area*G4UniformRand(); + G4double chose = area*G4QuickRand(); G4double Achose1, Achose2; Achose1=0.; Achose2=0.; i=0; diff --git a/source/geometry/solids/specific/src/G4VTwistedFaceted.cc b/source/geometry/solids/specific/src/G4VTwistedFaceted.cc index 5a524e3398..6044c33ac6 100644 --- a/source/geometry/solids/specific/src/G4VTwistedFaceted.cc +++ b/source/geometry/solids/specific/src/G4VTwistedFaceted.cc @@ -39,13 +39,12 @@ #include "G4ClippablePolygon.hh" #include "G4VPVParameterisation.hh" #include "G4GeometryTolerance.hh" -#include "meshdefs.hh" #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" #include "G4VisExtent.hh" -#include "Randomize.hh" +#include "G4QuickRand.hh" #include "G4AutoLock.hh" @@ -1055,7 +1054,7 @@ G4ThreeVector G4VTwistedFaceted::GetPointInSolid(G4double z) const G4ThreeVector G4VTwistedFaceted::GetPointOnSurface() const { - G4double phi = G4RandFlat::shoot(-fPhiTwist/2.,fPhiTwist/2.); + G4double phi = fPhiTwist*(G4QuickRand() - 0.5); G4double u , umin, umax ; // variable for twisted surfaces G4double y ; // variable for flat surface (top and bottom) @@ -1080,59 +1079,51 @@ G4ThreeVector G4VTwistedFaceted::GetPointOnSurface() const G4cout << "Surface Upper = " << a6 << G4endl ; #endif - G4double chose = G4RandFlat::shoot(0.,a1 + a2 + a3 + a4 + a5 + a6) ; + G4double chose = (a1 + a2 + a3 + a4 + a5 + a6)*G4QuickRand() ; if(chose < a1) { umin = fSide0->GetBoundaryMin(phi) ; umax = fSide0->GetBoundaryMax(phi) ; - u = G4RandFlat::shoot(umin,umax) ; - - return fSide0->SurfacePoint(phi, u, true) ; // point on 0deg surface + u = umin + (umax - umin)*G4QuickRand(); + return fSide0->SurfacePoint(phi, u, true) ; // point on 0 deg surface } - else if( (chose >= a1) && (chose < a1 + a2 ) ) { umin = fSide90->GetBoundaryMin(phi) ; umax = fSide90->GetBoundaryMax(phi) ; - - u = G4RandFlat::shoot(umin,umax) ; - - return fSide90->SurfacePoint(phi, u, true); // point on 90deg surface + u = umin + (umax - umin)*G4QuickRand(); + return fSide90->SurfacePoint(phi, u, true); // point on 90 deg surface } else if( (chose >= a1 + a2 ) && (chose < a1 + a2 + a3 ) ) { umin = fSide180->GetBoundaryMin(phi) ; umax = fSide180->GetBoundaryMax(phi) ; - u = G4RandFlat::shoot(umin,umax) ; - + u = umin + (umax - umin)*G4QuickRand(); return fSide180->SurfacePoint(phi, u, true); // point on 180 deg surface } else if( (chose >= a1 + a2 + a3 ) && (chose < a1 + a2 + a3 + a4 ) ) { umin = fSide270->GetBoundaryMin(phi) ; umax = fSide270->GetBoundaryMax(phi) ; - u = G4RandFlat::shoot(umin,umax) ; + u = umin + (umax - umin)*G4QuickRand(); return fSide270->SurfacePoint(phi, u, true); // point on 270 deg surface } else if( (chose >= a1 + a2 + a3 + a4 ) && (chose < a1 + a2 + a3 + a4 + a5 ) ) { - y = G4RandFlat::shoot(-fDy1,fDy1) ; + y = fDy1*(2.*G4QuickRand() - 1.); umin = fLowerEndcap->GetBoundaryMin(y) ; umax = fLowerEndcap->GetBoundaryMax(y) ; - u = G4RandFlat::shoot(umin,umax) ; - + u = umin + (umax - umin)*G4QuickRand(); return fLowerEndcap->SurfacePoint(u,y,true); // point on lower endcap } else { - y = G4RandFlat::shoot(-fDy2,fDy2) ; + y = fDy2*(2.*G4QuickRand() - 1.); umin = fUpperEndcap->GetBoundaryMin(y) ; umax = fUpperEndcap->GetBoundaryMax(y) ; - u = G4RandFlat::shoot(umin,umax) ; - - return fUpperEndcap->SurfacePoint(u,y,true) ; // point on upper endcap - + u = umin + (umax - umin)*G4QuickRand(); + return fUpperEndcap->SurfacePoint(u,y,true); // point on upper endcap } } diff --git a/source/geometry/solids/specific/src/G4Voxelizer.cc b/source/geometry/solids/specific/src/G4Voxelizer.cc index 880c77499f..808b8c440b 100644 --- a/source/geometry/solids/specific/src/G4Voxelizer.cc +++ b/source/geometry/solids/specific/src/G4Voxelizer.cc @@ -39,12 +39,9 @@ #include "G4CSGSolid.hh" #include "G4GeometryTolerance.hh" #include "G4Orb.hh" -#include "G4PhysicalConstants.hh" #include "G4SolidStore.hh" #include "G4Types.hh" #include "G4Voxelizer.hh" -#include "Randomize.hh" -#include "geomdefs.hh" using namespace std; diff --git a/source/geometry/volumes/History b/source/geometry/volumes/History index 1b9f0c1057..f4ef9ce6c2 100644 --- a/source/geometry/volumes/History +++ b/source/geometry/volumes/History @@ -6,6 +6,15 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-10 Seth R Johnson (geomvol-V11-03-02) +- Only delete surfaces if the geometry is not closed + +## 2025-05-23 Gabriele Cosmo (geomvol-V11-03-01) +- Reorganised and enriched comments in headers to follow Doxygen style. + +## 2025-02-23 Gabriele Cosmo (geomvol-V11-03-00) +- Applied clang-tidy fixes for readability, based on llvm version 19.1.7. + ## 2024-09-10 Ivana Hrivnacova (geomvol-V11-02-04) - Coverity fix in G4ReflectionFactory: Do not pass the same G4VisAttributes object to the reflected LV diff --git a/source/geometry/volumes/include/G4AssemblyStore.hh b/source/geometry/volumes/include/G4AssemblyStore.hh index ceabee7bdc..d4b6b0019d 100644 --- a/source/geometry/volumes/include/G4AssemblyStore.hh +++ b/source/geometry/volumes/include/G4AssemblyStore.hh @@ -38,42 +38,71 @@ // If much additional functionality is added, should consider containment // instead of inheritance for std::vector. -// 9.10.2018 G.Cosmo - Initial version +// Author: Gabriele Cosmo (CERN), 9 October 2018 // -------------------------------------------------------------------- #ifndef G4ASSEMBLYSTORE_HH -#define G4ASSEMBLYSTORE_HH +#define G4ASSEMBLYSTORE_HH 1 #include + #include "G4Types.hh" #include "G4String.hh" #include "G4VStoreNotifier.hh" class G4AssemblyVolume; +/** + * @brief G4AssemblyStore is a container for all assemblies, with functionality + * derived from std::vector. The class is a singleton. + * All assemblies are registered with G4AssemblyStore, and removed on their + * destruction. + */ + class G4AssemblyStore : public std::vector { public: + /** + Adds the assembly to the collection. + */ static void Register(G4AssemblyVolume* pAssembly); - // Add the assembly to the collection. + + /** + Removes the assembly from the collection. + */ static void DeRegister(G4AssemblyVolume* pAssembly); - // Remove the assembly from the collection. + + /** + Gets a pointer to the unique G4AssemblyStore, creating it if necessary. + */ static G4AssemblyStore* GetInstance(); - // Get a ptr to the unique G4AssemblyStore, creating it if necessary. + + /** + Assigns a notifier for allocation/deallocation of assemblies. + */ static void SetNotifier(G4VStoreNotifier* pNotifier); - // Assign a notifier for allocation/deallocation of assemblies. + + /** + Deletes all assemblies from the store. + */ static void Clean(); - // Delete all assemblies from the store. + /** + Returns an assembly through its Id number specification. + */ G4AssemblyVolume* GetAssembly(unsigned int id, G4bool verbose=true) const; - // Returns an assembly through its Id number specification. - protected: + private: + /** + Private singleton constructor. + */ G4AssemblyStore(); - // Protected singleton constructor. + + /** + Private destructor. Takes care to delete allocated assemblies. + */ virtual ~G4AssemblyStore(); - // Destructor: takes care to delete allocated assemblies. private: diff --git a/source/geometry/volumes/include/G4AssemblyTriplet.hh b/source/geometry/volumes/include/G4AssemblyTriplet.hh index 4b66635900..f51fafe608 100644 --- a/source/geometry/volumes/include/G4AssemblyTriplet.hh +++ b/source/geometry/volumes/include/G4AssemblyTriplet.hh @@ -28,20 +28,18 @@ // Class description: // // A class to help place logical or assembly volumes inside a generic -// containers (like STL vector ) together with information about its rotation, +// container (like STL vector) together with information about its rotation, // placement and eventually reflection. // How to interpret the rotation and translation depends on the class which // uses a container of these triplets. The first class using G4AssemblyTriplet -// is G4AssemblyVolume class. +// is G4AssemblyVolume. // The pointer to the logical or assembly volume is copied so this class // does not take its ownership and does not delete the object behind. -// Radovan Chytracek: created - November 2000 -// Ivana Hrivnacova: extended to support assembly of assemblies -// of volumes and reflections, March 2006 +// Author: Radovan Chytracek (CERN), November 2000 // ---------------------------------------------------------------------- #ifndef G4_ASSEMBLYTRIPLET_HH -#define G4_ASSEMBLYTRIPLET_HH +#define G4_ASSEMBLYTRIPLET_HH 1 #include "G4ThreeVector.hh" #include "G4RotationMatrix.hh" @@ -49,81 +47,130 @@ class G4LogicalVolume; class G4AssemblyVolume; +/** + * @brief G4AssemblyTriplet is a helper class for placing logical or assembly + * volumes inside a generic container together with information about its + * rotation, placement and eventually reflection. + * How to interpret the rotation and translation depends on the class which + * uses a container of these triplets. The first class using G4AssemblyTriplet + * is G4AssemblyVolume. + * The pointer to the logical or assembly volume is copied so this class + * does not take its ownership and does not delete the object behind. + */ + class G4AssemblyTriplet { public: + /** + Default constructor. + */ G4AssemblyTriplet(); - // Default constructor + /** + * An explicit constructor for a logical volume. + * @param[in] pVolume Pointer to the logical volume. + * @param[in] translation Translation vector. + * @param[in] pRotation Pointer to the rotation matrix. + * @param[in] isReflection Flag to specify if volume is reflected. + */ G4AssemblyTriplet( G4LogicalVolume* pVolume, G4ThreeVector& translation, G4RotationMatrix* pRotation, G4bool isReflection = false ); - // An explicit constructor for a logical volume + /** + * An explicit constructor for an assembly volume. + * @param[in] pAssembly Pointer to the assembly volume. + * @param[in] translation Translation vector. + * @param[in] pRotation Pointer to the rotation matrix. + * @param[in] isReflection Flag to specify if volume is reflected. + */ G4AssemblyTriplet( G4AssemblyVolume* pAssembly, G4ThreeVector& translation, G4RotationMatrix* pRotation, G4bool isReflection = false ); - // An explicit constructor for an assembly volume + /** + Copy constructor. + */ G4AssemblyTriplet( const G4AssemblyTriplet& second ); - // Copy constructor + /** + Destructor. + */ ~G4AssemblyTriplet(); - // Destructor + /** + Assignment operator. + */ G4AssemblyTriplet& operator=( const G4AssemblyTriplet& second ); - // Assignment operator + /** + Retrieves the logical volume reference. + */ inline G4LogicalVolume* GetVolume() const; - // Retrieve the logical volume reference + /** + Updates the logical volume reference. + */ inline void SetVolume( G4LogicalVolume* pVolume ); - // Update the logical volume reference + /** + Retrieves the assembly volume reference. + */ inline G4AssemblyVolume* GetAssembly() const; - // Retrieve the assembly volume reference + /** + Updates the assembly volume reference. + */ inline void SetAssembly( G4AssemblyVolume* pAssembly ); - // Update the assembly volume reference + /** + Retrieves the logical volume translation. + */ inline G4ThreeVector GetTranslation() const; - // Retrieve the logical volume translation + /** + Updates the logical volume translation. + */ inline void SetTranslation( G4ThreeVector& pVolume ); - // Update the logical volume translation + /** + Retrieves the logical volume rotation. + */ inline G4RotationMatrix* GetRotation() const; - // Retrieve the logical volume rotation + /** + Updates the logical volume rotation. + */ inline void SetRotation( G4RotationMatrix* pVolume ); - // Update the logical volume rotation + /** + Returns true if the logical or assembly volume has reflection. + */ inline G4bool IsReflection() const; - // Return true if the logical or assembly volume has reflection private: + /** A logical volume. */ G4LogicalVolume* fVolume = nullptr; - // A logical volume + /** A logical volume translation. */ G4ThreeVector fTranslation; - // A logical volume translation + /** A logical volume rotation. */ G4RotationMatrix* fRotation = nullptr; - // A logical volume rotation // Member data for handling assemblies of assemblies and reflections + /** An assembly volume. */ G4AssemblyVolume* fAssembly = nullptr; - // An assembly volume + /** True if the logical or assembly volume has reflection. */ G4bool fIsReflection = false; - // True if the logical or assembly volume has reflection }; #include "G4AssemblyTriplet.icc" -#endif // G4_ASSEMBLYTRIPLET_HH +#endif diff --git a/source/geometry/volumes/include/G4AssemblyTriplet.icc b/source/geometry/volumes/include/G4AssemblyTriplet.icc index 29bc41acee..aa8df393e4 100644 --- a/source/geometry/volumes/include/G4AssemblyTriplet.icc +++ b/source/geometry/volumes/include/G4AssemblyTriplet.icc @@ -25,6 +25,7 @@ // // Class G4AssemblyTriplet - inline implementation // +// Author: Radovan Chytracek (CERN), November 2000 // ---------------------------------------------------------------------- inline diff --git a/source/geometry/volumes/include/G4AssemblyVolume.hh b/source/geometry/volumes/include/G4AssemblyVolume.hh index e56d326238..3fc594a71b 100644 --- a/source/geometry/volumes/include/G4AssemblyVolume.hh +++ b/source/geometry/volumes/include/G4AssemblyVolume.hh @@ -36,12 +36,10 @@ // when placement is done. They are seen as independent physical volumes in // space. -// Radovan Chytracek, John Apostolakis, Gabriele Cosmo: created - November 2000 -// Ivana Hrivnacova: extended to support assembly of assemblies -// of volumes and reflections - March 2006 +// Authors: R.Chytracek, J.Apostolakis, G.Cosmo (CERN), November 2000 // ---------------------------------------------------------------------- #ifndef G4_ASSEMBLYVOLUME_HH -#define G4_ASSEMBLYVOLUME_HH +#define G4_ASSEMBLYVOLUME_HH 1 #include @@ -50,117 +48,183 @@ class G4VPhysicalVolume; +/** + * @brief G4AssemblyVolume is a helper class to make the build process of + * geometry easier. It allows one to combine several volumes together in an + * arbitrary way in 3D space and then work with the result as with a single + * logical volume for placement. + * The resulting objects are independent copies of each of the assembled + * logical volumes. The placements are not, however, bound one to each other + * when placement is done. They are seen as independent physical volumes in + * space. + */ + class G4AssemblyVolume { public: + /** + * Default Constructor. + */ G4AssemblyVolume(); + + /** + * Constructor. + * The rotation matrix passed as argument can be nullptr (identity) or an + * address even of an object on the upper stack frame. During assembly + * imprint, a new matrix is created anyway and it is kept track of it so + * it can be automatically deleted later at the end of the application. + * This policy is adopted since user has no control on the way the + * rotations are combined. + * @param[in] volume Pointer to the logical volume of the assembly. + * @param[in] translation Translation vector of the assembly. + * @param[in] rotation Pointer to the rotation matrix of the assembly. + */ G4AssemblyVolume( G4LogicalVolume* volume, G4ThreeVector& translation, G4RotationMatrix* rotation); + + /** + * Destructor. + * At destruction all the generated physical volumes and associated + * rotation matrices of the imprints will be destroyed. + */ ~G4AssemblyVolume(); - // - // Constructors & destructor. - // At destruction all the generated physical volumes and associated - // rotation matrices of the imprints will be destroyed. - // - // The rotation matrix passed as argument can be nullptr (identity) or an - // address even of an object on the upper stack frame. During assembly - // imprint, a new matrix is created anyway and it is kept track of it so - // it can be automatically deleted later at the end of the application. - // This policy is adopted since user has no control on the way the - // rotations are combined. + /** + * Places the given volume 'pPlacedVolume' inside the assembly. + * + * The adopted approach: + * + * - Place it w.r.t. the assembly coordinate system. + * This step is applied to each of the participating volumes. + * + * The other possible approaches: + * + * - Place w.r.t. the firstly added volume. + * When placed the first, the virtual coordinate system becomes + * the coordinate system of the first one. + * Every next volume being added into the assembly will be placed + * w.r.t to the first one. + * + * - Place w.r.t the last placed volume. + * When placed the first, the virtual coordinate system becomes + * the coordinate system of the first one. + * Every next volume being added into the assembly will be placed + * w.r.t to the previous one. + * + * The rotation matrix passed as argument can be nullptr (identity) or an + * address even of an object on the upper stack frame. During assembly + * imprint, a new matrix is created anyway and it is kept track of it so + * it can be automatically deleted later at the end of the application. + * This policy is adopted since user has no control on the way the + * rotations are combined. + * @param[in] pPlacedVolume Pointer to the logical volume of the volume + * to be added to the assembly. + * @param[in] translation Translation vector of the volume. + * @param[in] rotation Pointer to the rotation matrix of the volume. + */ void AddPlacedVolume( G4LogicalVolume* pPlacedVolume, G4ThreeVector& translation, G4RotationMatrix* rotation); - // - // Place the given volume 'pPlacedVolume' inside the assembly. - // - // The adopted approach: - // - // - Place it w.r.t. the assembly coordinate system. - // This step is applied to each of the participating volumes. - // - // The other possible approaches: - // - // - Place w.r.t. the firstly added volume. - // When placed the first, the virtual coordinate system becomes - // the coordinate system of the first one. - // Every next volume being added into the assembly will be placed - // w.r.t to the first one. - // - // - Place w.r.t the last placed volume. - // When placed the first, the virtual coordinate system becomes - // the coordinate system of the first one. - // Every next volume being added into the assembly will be placed - // w.r.t to the previous one. - // - // The rotation matrix passed as argument can be nullptr (identity) or an - // address even of an object on the upper stack frame. During assembly - // imprint, a new matrix is created anyway and it is kept track of it so - // it can be automatically deleted later at the end of the application. - // This policy is adopted since user has no control on the way the - // rotations are combined. + /** + * The same as previous method, except that it takes the complete 3D + * transformation in space as its argument. + * @param[in] pPlacedVolume Pointer to the logical volume of the volume + * to be added to the assembly. + * @param[in] transformation The 3D transformation in space. + */ void AddPlacedVolume( G4LogicalVolume* pPlacedVolume, G4Transform3D& transformation); - // - // The same as previous, but takes complete 3D transformation in space - // as its argument. + /** + * The same as previous method, but takes an assembly volume as argument. + * @param[in] pAssembly Pointer to the assembly volume to be added + * to the assembly. + * @param[in] transformation The 3D transformation in space. + */ void AddPlacedAssembly( G4AssemblyVolume* pAssembly, G4Transform3D& transformation); - // - // The same as previous AddPlacedVolume(), but takes an assembly volume - // as its argument. + /** + * The same as previous method, but takes an assembly volume + * as its argument with translation and rotation. + * @param[in] pAssembly Pointer to the assembly volume to be added + * to the assembly. + * @param[in] translation Translation vector of the volume. + * @param[in] rotation Pointer to the rotation matrix of the volume. + */ void AddPlacedAssembly( G4AssemblyVolume* pAssembly, G4ThreeVector& translation, G4RotationMatrix* rotation); - // - // The same as above AddPlacedVolume(), but takes an assembly volume - // as its argument with translation and rotation. + /** + * Creates instance of an assembly volume inside the given mother volume. + * @param[in] pMotherLV Pointer to the logical volume of the assembly. + * @param[in] translationInMother Translation vector of the imprint. + * @param[in] pRotationInMother Pointer to the rotation of the imprint. + * @param[in] copyNumBase Optional index to assign to the imprint. + * @param[in] surfCheck Flag to enable overlaps checking while imprinting. + */ void MakeImprint( G4LogicalVolume* pMotherLV, G4ThreeVector& translationInMother, G4RotationMatrix* pRotationInMother, G4int copyNumBase = 0, G4bool surfCheck = false ); - // - // Creates instance of an assembly volume inside the given mother volume. + /** + * The same as previous Imprint() method, but takes a complete 3D + * transformation in space as its argument. + * @param[in] pMotherLV Pointer to the logical volume of the assembly. + * @param[in] transformation The 3D transformation in space of the imprint. + * @param[in] copyNumBase Optional index to assign to the imprint. + * @param[in] surfCheck Flag to enable overlaps checking while imprinting. + */ void MakeImprint( G4LogicalVolume* pMotherLV, G4Transform3D& transformation, G4int copyNumBase = 0, G4bool surfCheck = false ); - // - // The same as previous Imprint() method, but takes complete 3D - // transformation in space as its argument. + /** + * To access the physical volumes imprinted through an iterator. + */ inline std::vector::iterator GetVolumesIterator(); + + /** + * Returns the total number of imprinted volumes of the assembly. + */ inline std::size_t TotalImprintedVolumes() const; - // - // Methods to access the physical volumes imprinted with the assembly. + + /** + * To access the 3D transformation in space for each imprint, given the ID. + */ inline G4Transform3D& GetImprintTransformation(unsigned int imprintID); - // Method to access transformation for each imprint + /** + * To access the created triplets in the assembly through an iterator. + */ inline std::vector::iterator GetTripletsIterator(); + + /** + * Returns the total number of triplets in the assembly. + */ inline std::size_t TotalTriplets() const; - // - // Methods to access the triplets which are part of the assembly + /** + * Returns the number of currently made imprints. + */ inline unsigned int GetImprintsCount() const; - // - // Return the number of made imprints. + /** + * Returns the number of existing instances of G4AssemblyVolume class. + */ unsigned int GetInstanceCount() const; - // - // Return the number of existing instance of G4AssemblyVolume class. + /** + * Returns the instance number of the assembly. + */ inline unsigned int GetAssemblyID() const; - // - // Return instance number of this concrete object. protected: @@ -170,59 +234,54 @@ class G4AssemblyVolume void InstanceCountPlus(); void InstanceCountMinus(); + // Internal counting mechanism, used to compute unique the names of + // physical volumes created by MakeImprint() methods. + // inline void SetImprintsCount( unsigned int value ); inline void ImprintsCountPlus(); inline void ImprintsCountMinus(); - // - // Internal counting mechanism, used to compute unique the names of - // physical volumes created by MakeImprint() methods. private: + /** + * Function for placement of the given assembly in the given mother + * (called recursively if the assembly contains an assembly). + */ void MakeImprint( G4AssemblyVolume* pAssembly, G4LogicalVolume* pMotherLV, G4Transform3D& transformation, G4int copyNumBase = 0, G4bool surfCheck = false ); - // - // Function for placement of the given assembly in the given mother - // (called recursively if the assembly contains an assembly). private: + /** Participating volumes represented as a vector of + * . */ std::vector fTriplets; - // - // Participating volumes represented as a vector of - // . + /** We need to keep list of physical volumes created by MakeImprint() + * in order to be able to cleanup the objects when not needed anymore. + * This requires the user to keep assembly objects in memory during the + * whole job or during the life-time of G4Navigator, logical volume store + * and physical volume store keep pointers to physical volumes generated + * by the assembly volume. + * When an assembly object is about to die it will destroy all its + * generated physical volumes and rotation matrices as well ! */ std::vector fPVStore; - // - // We need to keep list of physical volumes created by MakeImprint() - // in order to be able to cleanup the objects when not needed anymore. - // This requires the user to keep assembly objects in memory during the - // whole job or during the life-time of G4Navigator, logical volume store - // and physical volume store keep pointers to physical volumes generated - // by the assembly volume. - // When an assembly object is about to die it will destroy all its - // generated physical volumes and rotation matrices as well ! + /** Number of imprints of the given assembly volume. */ unsigned int fImprintsCounter; - // - // Number of imprints of the given assembly volume. + /** Class instance counter. */ static G4ThreadLocal unsigned int fsInstanceCounter; - // - // Class instance counter. + /** Assembly object ID derived from instance counter at construction time. */ unsigned int fAssemblyID = 0; - // - // Assembly object ID derived from instance counter at construction time. + /** Container of transformations for each imprint (used in GDML). */ std::map fImprintsTransf; - // - // Container of transformations for each imprint (used in GDML) }; #include "G4AssemblyVolume.icc" -#endif // G4_ASSEMBLYVOLUME_HH +#endif diff --git a/source/geometry/volumes/include/G4AssemblyVolume.icc b/source/geometry/volumes/include/G4AssemblyVolume.icc index 57ca6aa509..a13362be29 100644 --- a/source/geometry/volumes/include/G4AssemblyVolume.icc +++ b/source/geometry/volumes/include/G4AssemblyVolume.icc @@ -25,6 +25,7 @@ // // Class G4AssemblyVolume - inline implementation // +// Authors: R.Chytracek, J.Apostolakis, G.Cosmo (CERN), November 2000 // ---------------------------------------------------------------------- inline diff --git a/source/geometry/volumes/include/G4EnhancedVecAllocator.hh b/source/geometry/volumes/include/G4EnhancedVecAllocator.hh index 5e3d741821..be95801613 100644 --- a/source/geometry/volumes/include/G4EnhancedVecAllocator.hh +++ b/source/geometry/volumes/include/G4EnhancedVecAllocator.hh @@ -23,13 +23,13 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// G4EnhancedVecAllocator +// // Class Description: // // A class for fast allocation of STL vectors through a static pool. // It's meant to be used as alternative allocator for STL vectors. -// ---------------- G4EnhancedVecAllocator ---------------- -// // Original author: X.Dong (NorthEastern Univ.), November 2009 // Reviewed implementation: G.Cosmo (CERN), December 2009 // ------------------------------------------------------------ @@ -53,11 +53,11 @@ typedef struct class G4AllocStats { - // -------------------------------------------------------------------- - // Utility class, placeholder for global data on allocation. - // Initialisation to zero of the data below *must* be added ONCE only - // directly in the client code, where this allocator is to be applied - // -------------------------------------------------------------------- + /** + * @brief Utility class, placeholder for global data on allocation. + * Initialisation to zero of the data below *must* be added ONCE only + * directly in the client code, where this allocator is to be applied + */ public: @@ -66,6 +66,12 @@ class G4AllocStats static G4ThreadLocal G4int numCat; }; +/** + * @brief G4EnhancedVecAllocator is a class for fast allocation of STL vectors + * through a static pool. It's meant to be used as alternative allocator + * for STL vectors. + */ + template class G4EnhancedVecAllocator : public std::allocator<_Tp> { diff --git a/source/geometry/volumes/include/G4GeometryWorkspace.hh b/source/geometry/volumes/include/G4GeometryWorkspace.hh index 36917e24f3..526b2918fc 100644 --- a/source/geometry/volumes/include/G4GeometryWorkspace.hh +++ b/source/geometry/volumes/include/G4GeometryWorkspace.hh @@ -53,27 +53,54 @@ #include "G4LogicalVolume.hh" #include "G4Region.hh" +/** + * @brief G4GeometryWorkspace is a class managing the per-thread state of the + * geometry, spanning those which have a per-thread state and their dependents. + * In particular, it owns the arrays that implement 'split' classes and owns + * classes/objects which are owned by the split classes. + */ + class G4GeometryWorkspace { public: using pool_type = G4TWorkspacePool; + /** + * Constructor and default Destructor. + */ G4GeometryWorkspace(); ~G4GeometryWorkspace() = default; + /** + * Methods for the handling of the workspace. + * To take/release ownership and destroy. + */ void UseWorkspace(); // Take ownership void ReleaseWorkspace(); // Release ownership void DestroyWorkspace(); // Release ownership and destroy + /** + * Initialisation of the workspace. + * To be called at start of each run (especially 2nd and further runs). + */ void InitialiseWorkspace(); - // To be called at start of each run (especially 2nd and further runs) + /** + * Static accessor returning the global geometry pool. + */ static pool_type* GetPool(); protected: // Implementation methods + /** + * Initialises the workspace for all physical volumes in the store. + */ void InitialisePhysicalVolumes(); + + /** + * Creates a clone of the solid for the given replica in this thread. + */ G4bool CloneReplicaSolid( G4PVReplica* ); private: // Helper pointers - can be per instance or shared diff --git a/source/geometry/volumes/include/G4LogicalBorderSurface.hh b/source/geometry/volumes/include/G4LogicalBorderSurface.hh index 627a80323a..6244fd9d9b 100644 --- a/source/geometry/volumes/include/G4LogicalBorderSurface.hh +++ b/source/geometry/volumes/include/G4LogicalBorderSurface.hh @@ -30,7 +30,7 @@ // A Logical Surface class for surfaces defined by the boundary // of two physical volumes. -// Author: John Apostolakis, CERN - 17-06-1997 +// Author: John Apostolakis (CERN), 17 June 1997 // -------------------------------------------------------------------- #ifndef G4LogicalBorderSurface_hh #define G4LogicalBorderSurface_hh 1 @@ -47,25 +47,39 @@ using G4LogicalBorderSurfaceTable = std::map, G4LogicalBorderSurface*>; +/** + * @brief G4LogicalBorderSurface is a Logical Surface class for surfaces + * defined by the boundary of two physical volumes. + */ + class G4LogicalBorderSurface : public G4LogicalSurface { public: + /** + * Constructor and Destructor. + */ G4LogicalBorderSurface( const G4String& name, G4VPhysicalVolume* vol1, G4VPhysicalVolume* vol2, G4SurfaceProperty* surfaceProperty ); ~G4LogicalBorderSurface() override; - // Constructor and destructor + /** + * Copy constructor and assignment operator are not allowed. + */ G4LogicalBorderSurface(const G4LogicalBorderSurface&) = delete; G4LogicalBorderSurface& operator=(const G4LogicalBorderSurface&) = delete; - // Copy constructor and assignment operator not allowed. + /** + * Equality operators. + */ G4bool operator==( const G4LogicalBorderSurface& right ) const; G4bool operator!=( const G4LogicalBorderSurface& right ) const; - // Operators + /** + * Generic accessors and setters. + */ static G4LogicalBorderSurface* GetSurface( const G4VPhysicalVolume* vol1, const G4VPhysicalVolume* vol2 ); inline void SetPhysicalVolumes( G4VPhysicalVolume* vol1, @@ -73,17 +87,16 @@ class G4LogicalBorderSurface : public G4LogicalSurface inline const G4VPhysicalVolume* GetVolume1() const; inline const G4VPhysicalVolume* GetVolume2() const; inline std::size_t GetIndex() const; - // Generic accessors - inline void SetVolume1( G4VPhysicalVolume* vol1 ); inline void SetVolume2( G4VPhysicalVolume* vol2 ); - // To use with care! + /** + * Handling of the table of surfaces. + */ static void CleanSurfaceTable(); static const G4LogicalBorderSurfaceTable* GetSurfaceTable(); static std::size_t GetNumberOfBorderSurfaces(); static void DumpInfo(); - // To handle the table of surfaces private: @@ -92,8 +105,8 @@ class G4LogicalBorderSurface : public G4LogicalSurface std::size_t Index; // Creation order index - static G4LogicalBorderSurfaceTable *theBorderSurfaceTable; - // The static Table of BorderSurfaces + /** The static Table of BorderSurfaces. */ + static G4LogicalBorderSurfaceTable* theBorderSurfaceTable; }; // ******************************************************************** diff --git a/source/geometry/volumes/include/G4LogicalBorderSurface.icc b/source/geometry/volumes/include/G4LogicalBorderSurface.icc index 279f59acf7..80025d30fa 100644 --- a/source/geometry/volumes/include/G4LogicalBorderSurface.icc +++ b/source/geometry/volumes/include/G4LogicalBorderSurface.icc @@ -25,7 +25,8 @@ // // G4LogicalBorderSurface inline implementation // -// ---------------------------------------------------------------------- +// Author: John Apostolakis (CERN), 17 June 1997 +// -------------------------------------------------------------------- inline void G4LogicalBorderSurface::SetPhysicalVolumes( G4VPhysicalVolume* vol1, diff --git a/source/geometry/volumes/include/G4LogicalSkinSurface.hh b/source/geometry/volumes/include/G4LogicalSkinSurface.hh index 7535f539b2..d8d72631a5 100644 --- a/source/geometry/volumes/include/G4LogicalSkinSurface.hh +++ b/source/geometry/volumes/include/G4LogicalSkinSurface.hh @@ -30,7 +30,7 @@ // A Logical Surface class for the surface surrounding a single logical // volume. -// Author: John Apostolakis, CERN - 16-06-1997 +// Author: John Apostolakis (CERN), 16 June 1997 // -------------------------------------------------------------------- #ifndef G4LogicalSkinSurface_hh #define G4LogicalSkinSurface_hh 1 @@ -45,42 +45,57 @@ class G4LogicalSkinSurface; using G4LogicalSkinSurfaceTable = std::map; +/** + * @brief G4LogicalSkinSurface is a Logical Surface class for the surface + * surrounding a single logical volume. + */ + class G4LogicalSkinSurface : public G4LogicalSurface { public: + /** + * Constructor and Destructor. + */ G4LogicalSkinSurface( const G4String& name, G4LogicalVolume* vol, G4SurfaceProperty* surfaceProperty ); ~G4LogicalSkinSurface() override; - // Constructor and destructor. + /** + * Copy constructor and assignment operator are not allowed. + */ G4LogicalSkinSurface(const G4LogicalSkinSurface&) = delete; G4LogicalSkinSurface& operator=(const G4LogicalSkinSurface&) = delete; - // Assignment and copying not allowed. + /** + * Equality operators. + */ G4bool operator==(const G4LogicalSkinSurface &right) const; G4bool operator!=(const G4LogicalSkinSurface &right) const; - // Operators. + /** + * Generic accessors and setters. + */ static G4LogicalSkinSurface* GetSurface(const G4LogicalVolume* vol); inline const G4LogicalVolume* GetLogicalVolume() const; inline void SetLogicalVolume(G4LogicalVolume* vol); - // Accessors. + /** + * Handling of the table of surfaces. + */ static void CleanSurfaceTable(); static const G4LogicalSkinSurfaceTable* GetSurfaceTable(); static std::size_t GetNumberOfSkinSurfaces(); - static void DumpInfo(); // const - // To handle with the table of surfaces. + static void DumpInfo(); private: + /** Logical Volume pointer on side 1. */ G4LogicalVolume* LogVolume; - // Logical Volume pointer on side 1. + /** The static Table of SkinSurfaces. */ static G4LogicalSkinSurfaceTable *theSkinSurfaceTable; - // The static Table of SkinSurfaces. }; // ******************************************************************** diff --git a/source/geometry/volumes/include/G4LogicalSkinSurface.icc b/source/geometry/volumes/include/G4LogicalSkinSurface.icc index 339797f06c..21a78702a7 100644 --- a/source/geometry/volumes/include/G4LogicalSkinSurface.icc +++ b/source/geometry/volumes/include/G4LogicalSkinSurface.icc @@ -23,8 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4LogicalSkinSurface inline implementation +// Class G4LogicalSkinSurface inline implementation // +// Author: John Apostolakis (CERN), 16 June 1997 // ---------------------------------------------------------------------- inline diff --git a/source/geometry/volumes/include/G4PVParameterised.hh b/source/geometry/volumes/include/G4PVParameterised.hh index f24aff4980..4beb778dbf 100644 --- a/source/geometry/volumes/include/G4PVParameterised.hh +++ b/source/geometry/volumes/include/G4PVParameterised.hh @@ -30,19 +30,39 @@ // Represents many touchable detector elements differing in their // positioning and dimensions. Both are calculated by means // of a G4VParameterisation object. The positioning is assumed to -// be dominant along a cartesian axis (specified). +// be dominant along a specified Cartesian axis. -// 29.07.95, P.Kent - first non-stub version +// Author: Paul Kent (CERN), 29 July 1995 - first non-stub version // ---------------------------------------------------------------------- #ifndef G4PVPARAMETERISED_HH #define G4PVPARAMETERISED_HH 1 #include "G4PVReplica.hh" +/** + * @brief G4PVParameterised represents many touchable detector elements + * differing in their positioning and dimensions. Both are calculated by means + * of a G4VParameterisation object. The positioning is assumed to be dominant + * along a specified Cartesian axis. + */ + class G4PVParameterised : public G4PVReplica { public: + /** + * Replicates the volume 'nReplicas' times using the paramaterisation + * 'pParam', within the mother volume 'pMotherLogical'. + * The positioning of the replicas is dominant along the specified axis. + * @param[in] pName The volume name. + * @param[in] pLogical Pointer to the logical volume of the replica. + * @param[in] pMotherLogical Pointer to the logical volume of the mother. + * @param[in] pAxis The axis along which do the replication. + * @param[in] nReplicas The number of copies to replicate. + * @param[in] pParam Pointer to the provided parameterisation algorithm. + * @param[in] pSurfChk Boolean flag, if true activates check for overlaps + * with existing volumes (false by default). + */ G4PVParameterised(const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMotherLogical, @@ -50,11 +70,19 @@ class G4PVParameterised : public G4PVReplica const G4int nReplicas, G4VPVParameterisation* pParam, G4bool pSurfChk = false); - // Replicate the volume nReplicas Times using the paramaterisation pParam, - // within the mother volume pMotherLogical. - // The positioning of the replicas is dominant along the specified axis. - // pSurfChk if true activates check for overlaps with existing volumes. + /** + * Similar to the constructor above, except for the mother pointer's type + * being here a G4VPhysicalVolume. + * @param[in] pName The volume name. + * @param[in] pLogical Pointer to the logical volume of the replica. + * @param[in] pMother Pointer to the physical volume of the mother. + * @param[in] pAxis The axis along which do the replication. + * @param[in] nReplicas The number of copies to replicate. + * @param[in] pParam Pointer to the provided parameterisation algorithm. + * @param[in] pSurfChk Boolean flag, if true activates check for overlaps + * with existing volumes (false by default). + */ G4PVParameterised(const G4String& pName, G4LogicalVolume* pLogical, G4VPhysicalVolume* pMother, @@ -62,47 +90,74 @@ class G4PVParameterised : public G4PVReplica const G4int nReplicas, G4VPVParameterisation* pParam, G4bool pSurfChk = false); - // Almost exactly similar to first constructor, changing only mother - // pointer's type to PhysicalVolume. + /** + * Fake default constructor for usage restricted to direct object + * persistency for clients requiring preallocation of memory for + * persistifiable objects. + */ G4PVParameterised(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + /** + * Virtual empty Destructor. + */ ~G4PVParameterised() override; - // Virtual empty destructor. + /** + * Returns true to identify if it is a parameterised physical volume. + */ G4bool IsParameterised() const override; - // Returns true to identify it is a parameterised physical volume. + /** + * Returns the volume type characterisation. + */ EVolume VolumeType() const final; + /** + * Returns the current pointer to the parameterisation algorithm. + */ G4VPVParameterisation* GetParameterisation() const override; - // Returns the current pointer to the parameterisation. + /** + * Fills arguments with the attributes from the base replica. + * @param[in,out] axis Axis of parameterisation returned. + * @param[in,out] nReplicas The number of replica copies. + * @param[in,out] width Width of the replica object. + * @param[in,out] offset Potential offset in replication. + * @param[in,out] consuming Flag of replica characterisation (always false + * for parameterisations). + */ void GetReplicationData(EAxis& axis, G4int& nReplicas, G4double& width, G4double& offset, G4bool& consuming) const override; - // Fills arguments with the attributes from the base replica. + /** + * Sets code and can prepare for special type of regular volumes. + */ void SetRegularStructureId( G4int code ) override; - // Method sets code and can prepare for special type of regular volumes. + /** + * Verifies if each instance of the parameterised volume is overlapping + * with other instances or with the mother volume. Provides default + * resolution for the number of points to be generated and verified. + * A tolerance for the precision of the overlap check can be specified, + * by default it is set to maximum precision. + * Reports a maximum of overlaps errors according to parameter in input. + * @param[in] res The number of points to generate on volume's surface. + * @param[in] tol The precision tolerance for the overlap check, below + * which to ignore overlaps (deafult is maximim precision). + * @param[in] verbose Verbosity mode (default is true). + * @param[in] maxErr Maximum of overlaps errors to report (default is 1). + * @returns True if an overlap occurs. + */ G4bool CheckOverlaps(G4int res = 1000, G4double tol = 0., G4bool verbose = true, G4int maxErr = 1) override; - // Verifies if each instance of the parameterised volume is overlapping - // with other instances or with the mother volume. Provides default - // resolution for the number of points to be generated and verified. - // A tolerance for the precision of the overlap check can be specified, - // by default it is set to maximum precision. - // Reports a maximum of overlaps errors according to parameter in input. - // Returns true if an overlap occurs. private: + /** The pointer to the parameterisation algorithm. */ G4VPVParameterisation* fparam = nullptr; }; diff --git a/source/geometry/volumes/include/G4PVPlacement.hh b/source/geometry/volumes/include/G4PVPlacement.hh index 4164393d89..654f1d9ba2 100644 --- a/source/geometry/volumes/include/G4PVPlacement.hh +++ b/source/geometry/volumes/include/G4PVPlacement.hh @@ -30,7 +30,7 @@ // Class representing a single volume positioned within and relative // to a mother volume. -// 24.07.95 P.Kent, First non-stub version. +// Author: Paul Kent (CERN), 24 July 1995 - first non-stub version // ---------------------------------------------------------------------- #ifndef G4PVPLACEMENT_HH #define G4PVPLACEMENT_HH 1 @@ -38,10 +38,36 @@ #include "G4VPhysicalVolume.hh" #include "G4Transform3D.hh" +/** + * @brief G4PVPlacement represents a single volume positioned within and + * relative to a mother volume. + */ + class G4PVPlacement : public G4VPhysicalVolume { public: + /** + * Initialises a single volume, positioned in a frame which is rotated by + * '*pRot' and traslated by 'tlate', relative to the coordinate system of + * the mother volume 'pMotherLogical'. + * If 'pRot=nullptr' the volume is unrotated with respect to its mother. + * The physical volume is added to the mother's logical volume. + * This is a very natural way of defining a physical volume, and is + * especially useful when creating subdetectors: the mother volumes are + * not placed until a later stage of the assembly program. + * @param[in] pRot The pointer to the rotation in the mother volume. + * @param[in] tlate Traslation vector in the mother volume. + * @param[in] pCurrentLogical Pointer to its logical volume. + * @param[in] pName The volume name. + * @param[in] pMotherLogical Pointer to the logical volume of the mother. + * @param[in] pMany Flag to identify if the volume is meant to be + * considered an overlapping structure, or not. - not used. + * @param[in] pCopyNo The optional custom copy number. Should be set to 0 + * for the first volume of a given type. + * @param[in] pSurfChk Boolean flag, if true activates check for overlaps + * with existing volumes (false by default). + */ G4PVPlacement(G4RotationMatrix* pRot, const G4ThreeVector& tlate, G4LogicalVolume* pCurrentLogical, @@ -50,20 +76,30 @@ class G4PVPlacement : public G4VPhysicalVolume G4bool pMany, G4int pCopyNo, G4bool pSurfChk = false); - // Initialise a single volume, positioned in a frame which is rotated by - // *pRot and traslated by tlate, relative to the coordinate system of the - // mother volume pMotherLogical. - // If pRot=nullptr the volume is unrotated with respect to its mother. - // The physical volume is added to the mother's logical volume. - // Arguments particular to G4PVPlacement: - // pMany Currently NOT used. For future use to identify if the volume - // is meant to be considered an overlapping structure, or not. - // pCopyNo should be set to 0 for the first volume of a given type. - // pSurfChk if true activates check for overlaps with existing volumes. - // This is a very natural way of defining a physical volume, and is - // especially useful when creating subdetectors: the mother volumes are - // not placed until a later stage of the assembly program. + /** + * Additional constructor, which expects a G4Transform3D object that + * represents the direct rotation and translation of the solid (NOT of the + * frame). The G4Transform3D argument should be constructed by: + * i) First rotating it to align the solid to the system of + * reference of its mother volume *pMotherLogical, and + * ii) Then placing the solid at the location Transform3D.getTranslation(), + * with respect to the origin of the system of coordinates of the + * mother volume. + * This construct is useful for the people who prefer to think in terms + * of moving objects in a given reference frame. + * All other arguments are the same as for the previous constructor. + * @param[in] Transform3D The transformation in the 3D space. + * @param[in] pCurrentLogical Pointer to its logical volume. + * @param[in] pName The volume name. + * @param[in] pMotherLogical Pointer to the logical volume of the mother. + * @param[in] pMany Flag to identify if the volume is meant to be + * considered an overlapping structure, or not. - not used. + * @param[in] pCopyNo The optional custom copy number. Should be set to 0 + * for the first volume of a given type. + * @param[in] pSurfChk Boolean flag, if true activates check for overlaps + * with existing volumes (false by default). + */ G4PVPlacement(const G4Transform3D& Transform3D, G4LogicalVolume* pCurrentLogical, const G4String& pName, @@ -71,18 +107,12 @@ class G4PVPlacement : public G4VPhysicalVolume G4bool pMany, G4int pCopyNo, G4bool pSurfChk = false); - // Additional constructor, which expects a G4Transform3D that represents - // the direct rotation and translation of the solid (NOT of the frame). - // The G4Transform3D argument should be constructed by: - // i) First rotating it to align the solid to the system of - // reference of its mother volume *pMotherLogical, and - // ii) Then placing the solid at the location Transform3D.getTranslation(), - // with respect to the origin of the system of coordinates of the - // mother volume. - // [ This is useful for the people who prefer to think in terms - // of moving objects in a given reference frame. ] - // All other arguments are the same as for the previous constructor. + /** + * A simple variation of the first constructor, only specifying the + * mother volume as a pointer to its physical volume instead of its + * logical volume. The effect is exactly the same. + */ G4PVPlacement(G4RotationMatrix* pRot, const G4ThreeVector& tlate, const G4String& pName, @@ -91,10 +121,11 @@ class G4PVPlacement : public G4VPhysicalVolume G4bool pMany, G4int pCopyNo, G4bool pSurfChk = false); - // A simple variation of the 1st constructor, only specifying the - // mother volume as a pointer to its physical volume instead of its - // logical volume. The effect is exactly the same. + /** + * Utilises both variations above (from first and third constructors). + * The effect is the same as for the second constructor. + */ G4PVPlacement(const G4Transform3D& Transform3D, const G4String& pName, G4LogicalVolume* pLogical, @@ -102,36 +133,51 @@ class G4PVPlacement : public G4VPhysicalVolume G4bool pMany, G4int pCopyNo, G4bool pSurfChk = false); - // Utilises both variations above (from 2nd and 3rd constructor). - // The effect is the same as for the 2nd constructor. - - ~G4PVPlacement() override; - // Default destructor. - - inline G4int GetCopyNo() const override { return fcopyNo; } - - void SetCopyNo(G4int CopyNo) override; - // Gets and sets the copy number of the volume. - - G4bool CheckOverlaps(G4int res = 1000, G4double tol = 0., - G4bool verbose = true, G4int maxErr = 1) override; - // Verifies if the placed volume is overlapping with existing - // daughters or with the mother volume. Provides default resolution - // for the number of points to be generated and verified. - // A tolerance for the precision of the overlap check can be specified, - // by default it is set to maximum precision. - // Reports a maximum of overlaps errors according to parameter in input. - // Returns true if the volume is overlapping. + /** + * Fake default constructor for usage restricted to direct object + * persistency for clients requiring preallocation of memory for + * persistifiable objects. + */ G4PVPlacement(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + /** + * Default Destructor. + */ + ~G4PVPlacement() override; + + /** + * Copy constructor and assignment operator not allowed. + */ G4PVPlacement(const G4PVPlacement&) = delete; G4PVPlacement& operator=(const G4PVPlacement&) = delete; - // Copy constructor and assignment operator not allowed. + /** + * Returns/sets the copy number associated to the volume. + */ + inline G4int GetCopyNo() const override { return fcopyNo; } + void SetCopyNo(G4int CopyNo) override; + + /** + * Verifies if the placed volume is overlapping with existing daughters + * or with the mother volume. Provides default resolution for the number + * of points to be generated and verified. + * A tolerance for the precision of the overlap check can be specified, + * by default it is set to maximum precision. + * Reports a maximum of overlaps errors according to parameter in input. + * @param[in] res The number of points to generate on volume's surface. + * @param[in] tol The precision tolerance for the overlap check, below + * which to ignore overlaps (deafult is maximim precision). + * @param[in] verbose Verbosity mode (default is true). + * @param[in] maxErr Maximum of overlaps errors to report (default is 1). + * @returns True if an overlap occurs. + */ + G4bool CheckOverlaps(G4int res = 1000, G4double tol = 0., + G4bool verbose = true, G4int maxErr = 1) override; + + /** + * Stub methods, unused for placed volumes. + */ G4bool IsMany() const override; G4bool IsReplicated() const override; G4bool IsParameterised() const override; @@ -141,17 +187,26 @@ class G4PVPlacement : public G4VPhysicalVolume G4double& width, G4double& offset, G4bool& consuming) const override; + + /** + * Used only for specialised repeated volumes. Always false with Id 0. + */ G4bool IsRegularStructure() const override; G4int GetRegularStructureId() const override; + /** + * Returns the volume type characterisation. + */ EVolume VolumeType() const override; private: + /** + * Auxiliary function for 2nd constructor (one with G4Transform3D). + * Creates a new RotMatrix on the heap (using "new") and copies + * its argument into it. + */ static G4RotationMatrix* NewPtrRotMatrix(const G4RotationMatrix& RotMat); - // Auxiliary function for 2nd constructor (one with G4Transform3D). - // Creates a new RotMatrix on the heap (using "new") and copies - // its argument into it. private: diff --git a/source/geometry/volumes/include/G4PVReplica.hh b/source/geometry/volumes/include/G4PVReplica.hh index 2c353837f0..71268c1a6b 100644 --- a/source/geometry/volumes/include/G4PVReplica.hh +++ b/source/geometry/volumes/include/G4PVReplica.hh @@ -31,37 +31,9 @@ // positioning. The elements' positions are calculated by means of a simple // linear formula, and the elements completely fill the containing mother // volume. -// -// G4PVReplica(const G4String& pName, -// G4LogicalVolume *pLogical, -// G4LogicalVolume *pMother, -// const EAxis pAxis, -// const G4int nReplicas, -// const G4double width, -// const G4double offset=0); -// -// Replication may occur along: -// -// o Cartesian axes (kXAxis,kYAxis,kZAxis) -// -// The replications, of specified width have coordinates of -// form (-width*(nReplicas-1)*0.5+n*width,0,0) where n=0.. nReplicas-1 -// for the case of kXAxis, and are unrotated. -// -// o Radial axis (cylindrical polar) (kRho) -// -// The replications are cons/tubs sections, centred on the origin -// and are unrotated. -// They have radii of width*n+offset to width*(n+1)+offset -// where n=0..nReplicas-1 -// -// o Phi axis (cylindrical polar) (kPhi) -// The replications are `phi sections' or wedges, and of cons/tubs form -// They have phi of offset+n*width to offset+(n+1)*width where -// n=0..nReplicas-1 -// 29.07.95 P.Kent - First non-stub version -// 13.01.13 G.Cosmo, A.Dotti - Modified for thread-safety for MT +// Original author: Paul Kent (CERN), 29 July 1995 - First non-stub version +// - G.Cosmo, A.Dotti (CERN), 13 January 2013 - Modified for MT thread-safety // ---------------------------------------------------------------------- #ifndef G4PVREPLICA_HH #define G4PVREPLICA_HH 1 @@ -71,25 +43,65 @@ class G4ReplicaData { - // Encapsulates the fields of the class G4PVReplica that may not be - // read-only. G4PVReplica inherits from the class G4VPhysicalVolume. - // The fields from the ancestor that may not be read-only are handled - // by the ancestor class. + /** + * @brief G4ReplicaData encapsulates the fields of the class G4PVReplica that + * may not be read-only. G4PVReplica inherits from the class G4VPhysicalVolume. + * The fields from the ancestor that may not be read-only are handled + * by the ancestor class. + */ -public: + public: - void initialize() {} + void initialize() {} - G4int fcopyNo = -1; + G4int fcopyNo = -1; }; +/** Implementation detail for use of G4ReplicaData objects. */ using G4PVRManager = G4GeomSplitter; -// Implementation detail for use of G4ReplicaData objects + +/** + * @brief G4PVReplica represents many touchable detector elements differing + * only in their positioning. The elements' positions are calculated by means + * of a simple linear formula, and the elements completely fill the containing + * mother volume. + * + * Replication may occur along: + * + * o Cartesian axes (kXAxis,kYAxis,kZAxis) + * + * The replications, of specified width have coordinates of + * form (-width*(nReplicas-1)*0.5+n*width,0,0) where n=0.. nReplicas-1 + * for the case of kXAxis, and are unrotated. + * + * o Radial axis (cylindrical polar) (kRho) + * + * The replications are cons/tubs sections, centred on the origin + * and are unrotated. + * They have radii of width*n+offset to width*(n+1)+offset + * where n=0..nReplicas-1 + * + * o Phi axis (cylindrical polar) (kPhi) + * The replications are `phi sections' or wedges, and of cons/tubs form + * They have phi of offset+n*width to offset+(n+1)*width where + * n=0..nReplicas-1 + */ class G4PVReplica : public G4VPhysicalVolume { public: + /** + * Replicates the volume 'nReplicas' times along the specified axis + * within the mother volume 'pMother' and filling completely the mother. + * @param[in] pName The volume name. + * @param[in] pLogical Pointer to the logical volume of the replica. + * @param[in] pMother Pointer to the logical volume of the mother. + * @param[in] pAxis The axis along which do the replication. + * @param[in] nReplicas The number of copies to replicate. + * @param[in] width The witdh of the replicated object along the axis. + * @param[in] offset The optional offset distance from mother's border. + */ G4PVReplica(const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMother, @@ -98,6 +110,17 @@ class G4PVReplica : public G4VPhysicalVolume const G4double width, const G4double offset = 0.); + /** + * Similar to the constructor above, except for the mother pointer's type + * being here a G4VPhysicalVolume. + * @param[in] pName The volume name. + * @param[in] pLogical Pointer to the logical volume of the replica. + * @param[in] pMother Pointer to the physical volume of the mother. + * @param[in] pAxis The axis along which do the replication. + * @param[in] nReplicas The number of copies to replicate. + * @param[in] width The witdh of the replicated object along the axis. + * @param[in] offset The optional offset distance from mother's border. + */ G4PVReplica(const G4String& pName, G4LogicalVolume* pLogical, G4VPhysicalVolume* pMother, @@ -106,78 +129,135 @@ class G4PVReplica : public G4VPhysicalVolume const G4double width, const G4double offset = 0.); + /** + * Fake default constructor for usage restricted to direct object + * persistency for clients requiring preallocation of memory for + * persistifiable objects. + */ G4PVReplica(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + /** + * Copy constructor and assignment operator not allowed. + */ G4PVReplica(const G4PVReplica&) = delete; G4PVReplica& operator=(const G4PVReplica&) = delete; - // Copy constructor and assignment operator not allowed + /** + * Default Destructor. + */ ~G4PVReplica() override; + /** + * Returns the volume type characterisation. + */ EVolume VolumeType() const override; + /** + * Not used. + */ G4bool IsMany() const override; + + /** + * Returns true. + */ G4bool IsReplicated() const override; + /** + * Accessor/modifier for optional handling of the copy-number. + */ G4int GetCopyNo() const override; void SetCopyNo(G4int CopyNo) override; + + /** + * Returns false and nullptr. + */ G4bool IsParameterised() const override; G4VPVParameterisation* GetParameterisation() const override; + + /** + * Returns the number of replications. + */ G4int GetMultiplicity() const override; + + /** + * Fills arguments with the attributes from the base replica. + * @param[in,out] axis Axis of parameterisation returned. + * @param[in,out] nReplicas The number of replica copies. + * @param[in,out] width Width of the replica object. + * @param[in,out] offset Potential offset in replication. + * @param[in,out] consuming Flag of replica characterisation (always true + * for pure replicas). + */ void GetReplicationData(EAxis& axis, - G4int& nReplicas, - G4double& width, - G4double& offset, - G4bool& consuming) const override; + G4int& nReplicas, + G4double& width, + G4double& offset, + G4bool& consuming) const override; + /** + * Sets a unique code for each type of regular structure. + * @note It must be called only during detector construction. + * It can also be used to prepare any corresponding special + * navigation 'conditions'. + */ virtual void SetRegularStructureId( G4int code ); - // This method must set a unique code for each type of regular structure. - // - It must be called only during detector construction. - // - It can also be used to prepare any corresponding special - // navigation 'conditions'. + /** + * Accessors for specialised geometries. + */ G4bool IsRegularStructure() const override; G4int GetRegularStructureId() const override; - // Accessors for specialised geometries // Methods for handling of MT instances + /** + * Returns the MT instance ID. + */ inline G4int GetInstanceID() const { return instanceID; } - // Returns the instance ID. + /** + * Returns the private data instance manager. + */ static const G4PVRManager& GetSubInstanceManager(); - // Returns the private data instance manager. + /** + * This method is similar to the constructor. It is used by each worker + * thread to achieve the partial effect as that of the master thread. + */ void InitialiseWorker(G4PVReplica* pMasterObject); - // This method is similar to the constructor. It is used by each worker - // thread to achieve the partial effect as that of the master thread. + /** + * This method is similar to the destructor. It is used by each worker + * thread to achieve the partial effect as that of the master thread. + */ void TerminateWorker(G4PVReplica* pMasterObject); - // This method is similar to the destructor. It is used by each worker - // thread to achieve the partial effect as that of the master thread. protected: + /** + * Constructor for derived type(s): PVParameterised, PVDivision, ... + * Does not set mother or register in mother volume -- leaves it to + * derived type. + */ G4PVReplica(const G4String& pName, G4int nReplicas, EAxis pAxis, G4LogicalVolume* pLogical, G4LogicalVolume* pMotherLogical); - // Constructor for derived type(s): PVParameterised, PVDivision, ... - // Does not set mother or register in mother volume -- leaves it to - // derived type private: + /** + * Performs sanity checks on parameters and initialises data. + */ void CheckAndSetParameters(const EAxis pAxis, const G4int nReplicas, const G4double width, const G4double offset); + /** + * Checks that this volume is the only daughter of its proposed mother + * volume. + */ void CheckOnlyDaughter(G4LogicalVolume* pMotherLogical); - // Check that this volume is the only daughter of its proposed mother - // volume protected: @@ -189,30 +269,31 @@ class G4PVReplica : public G4VPhysicalVolume G4int fRegularVolsId = 0; - G4int instanceID; - // This new field is used as instance ID. - G4GEOM_DLL static G4PVRManager subInstanceManager; - // This new field helps to use the class G4PVRManager introduced above. + G4int instanceID; // Used as instance ID + G4GEOM_DLL static G4PVRManager subInstanceManager; // Uses G4PVRManager }; -// NOTE: -// The type G4PVRManager is introduced to encapsulate the methods used by -// both the master thread and worker threads to allocate memory space for -// the fields encapsulated by the class G4ReplicaData. When each thread -// initializes the value for these fields, it refers to them using a macro -// definition defined below. For every G4PVReplica instance, there is -// a corresponding G4ReplicaData instance. All G4ReplicaData instances are -// organized by the class G4PVRManager as an array. -// The field "int instanceID" is added to the class G4PVReplica. -// The value of this field in each G4LogicalVolume instance is the subscript -// of the corresponding G4ReplicaData instance. -// In order to use the class G4PVRManager, we add a static member in the -// class G4LogicalVolume as follows: "static G4PVRManager subInstanceManager". -// For the master thread, the array for G4ReplicaData instances grows -// dynamically along with G4PVReplica instances arecreated. -// For each worker thread, it copies the array of G4ReplicaData instances -// from the master thread. -// In addition, it invokes a method similiar to the constructor explicitly -// to achieve the partial effect for each instance in the array. +/** + * @note: + * + * The type G4PVRManager is introduced to encapsulate the methods used by + * both the master thread and worker threads to allocate memory space for + * the fields encapsulated by the class G4ReplicaData. When each thread + * initializes the value for these fields, it refers to them using a macro + * definition defined below. For every G4PVReplica instance, there is + * a corresponding G4ReplicaData instance. All G4ReplicaData instances are + * organized by the class G4PVRManager as an array. + * The field "int instanceID" is added to the class G4PVReplica. + * The value of this field in each G4LogicalVolume instance is the subscript + * of the corresponding G4ReplicaData instance. + * In order to use the class G4PVRManager, we add a static member in the + * class G4LogicalVolume as follows: "static G4PVRManager subInstanceManager". + * For the master thread, the array for G4ReplicaData instances grows + * dynamically along with G4PVReplica instances arecreated. + * For each worker thread, it copies the array of G4ReplicaData instances + * from the master thread. + * In addition, it invokes a method similiar to the constructor explicitly + * to achieve the partial effect for each instance in the array. + */ #endif diff --git a/source/geometry/volumes/include/G4ReflectionFactory.hh b/source/geometry/volumes/include/G4ReflectionFactory.hh index 24d8abc4aa..3bcd01f157 100644 --- a/source/geometry/volumes/include/G4ReflectionFactory.hh +++ b/source/geometry/volumes/include/G4ReflectionFactory.hh @@ -28,38 +28,18 @@ // Class description: // // Class providing functions for volumes placements with a general -// transfomation that can contain reflection. +// transfomation that can contain a reflection. // Reflection is then applied to a solid: a new G4ReflectedSolid // instance is created and is placed with a transformation containing // pure rotation and translation only. // The pair of constituent and reflected logical volumes is -// considered as a generalized logical volume that is addressed +// considered as a generalised logical volume that is addressed // by user specifying the constituent logical volume. -// -// Decomposition of a general transformation that can include reflection -// in a "reflection-free" transformation: -// -// x(inM') = TG*x(inM) TG - general transformation -// = T*(R*x(inM)) T - "reflection-free" transformation -// = T* x(inReflM) -// -// Daughters transformation: -// When a volume V containing daughter D with transformation TD -// is placed in mother M with a general tranformation TGV, -// the TGV is decomposed. New reflected volume ReflV containing -// a new daughter ReflD with reflected transformation ReflTD is created: -// -// x(inV) = TD * x(inD); -// x(inM) = TGV * x(inV) -// = TV * R * x(inV) -// = TV * R * TD * x(inD) -// = TV * R*TD*R-1 * R*x(inD) -// = TV * ReflTD * x(inReflD) -// Author: Ivana Hrivnacova (Ivana.Hrivnacova@cern.ch), 16.10.2001 +// Author: Ivana Hrivnacova (IN2P3/IJCLab Orsay), 16 October 2001 // -------------------------------------------------------------------- #ifndef G4_REFLECTION_FACTORY_HH -#define G4_REFLECTION_FACTORY_HH +#define G4_REFLECTION_FACTORY_HH 1 #include "G4Types.hh" #include "G4Transform3D.hh" @@ -75,18 +55,78 @@ class G4VPVDivisionFactory; using G4PhysicalVolumesPair = std::pair; using G4ReflectedVolumesMap = std::map >; +/** + * @brief G4ReflectionFactory provides functions for volumes placements with + * a general transfomation that can contain a reflection. + * Reflection is then applied to a solid: a new G4ReflectedSolid instance is + * created and is placed with a transformation containing pure rotation and + * translation only. + * The pair of constituent and reflected logical volumes is considered as a + * generalised logical volume that is addressed by user specifying the + * constituent logical volume. + * + * Decomposition of a general transformation that can include reflection + * in a "reflection-free" transformation: + * + * x(inM') = TG*x(inM) TG - general transformation + * = T*(R*x(inM)) T - "reflection-free" transformation + * = T* x(inReflM) + * + * Daughters transformation: + * When a volume V containing daughter D with transformation TD + * is placed in mother M with a general tranformation TGV, + * the TGV is decomposed. New reflected volume ReflV containing + * a new daughter ReflD with reflected transformation ReflTD is created: + * + * x(inV) = TD * x(inD); + * x(inM) = TGV * x(inV) + * = TV * R * x(inV) + * = TV * R * TD * x(inD) + * = TV * R*TD*R-1 * R*x(inD) + * = TV * ReflTD * x(inReflD) + */ + class G4ReflectionFactory { using LogicalVolumesMapIterator = G4ReflectedVolumesMap::const_iterator; public: - virtual ~G4ReflectionFactory(); - // Virtual destructor. + /** + * Destructor. + */ + ~G4ReflectionFactory(); + /** + * Copy constructor and assignment operator not allowed. + */ + G4ReflectionFactory(const G4ReflectionFactory&) = delete; + G4ReflectionFactory& operator=(const G4ReflectionFactory&) = delete; + + /** + * Gets pointer to the instance of the singleton. + */ static G4ReflectionFactory* Instance(); - // Gets pointer to the instance of the singleton. + /** + * Evaluates the passed transformation; if it contains reflection + * it performs its decomposition, creates new reflected solid and + * logical volume (or retrieves them from a map if the reflected + * objects were already created), transforms the daughters (if present) + * and places it in the given mother. + * @param[in] transform3D The transformation in 3D space that can contain + * a reflection. + * @param[in] pName The volume name. + * @param[in] LV Pointer to the logical volume to be placed. + * @param[in] motherLV Pointer to the logical volume of the mother. + * @param[in] isMany Not used. + * @param[in] copyNo The optional custom copy number. + * @param[in] surfCheck Boolean flag, if true activates check for overlaps + * with existing volumes (false by default). + * @returns A pair of physical volumes; the second physical volume + * is a placement in a reflected mother or nullptr if mother + * logical volume was not reflected. + */ G4PhysicalVolumesPair Place(const G4Transform3D& transform3D, const G4String& name, G4LogicalVolume* LV, @@ -94,15 +134,20 @@ class G4ReflectionFactory G4bool isMany, G4int copyNo, G4bool surfCheck = false); - // Evaluates the passed transformation; if it contains reflection - // it performs its decomposition, creates new reflected solid and - // logical volume (or retrieves them from a map if the reflected - // objects were already created), transforms the daughters (if present) - // and place it in the given mother. - // The result is a pair of physical volumes; - // the second physical volume is a placement in a reflected mother - // or 0 if mother LV was not reflected. + /** + * Creates a replica in the given mother. + * @param[in] name The volume name. + * @param[in] LV Pointer to the logical volume to be replicated. + * @param[in] motherLV Pointer to the logical volume of the mother. + * @param[in] axis The axis along which do the replication. + * @param[in] nofReplicas The number of copies to replicate. + * @param[in] width The witdh of the replicated object along the axis. + * @param[in] offset The optional offset distance from mother's border. + * @returns A pair of physical volumes; the second physical volume is + * a replica in a reflected mother or nullptr if the mother + * logical volume was not reflected. + */ G4PhysicalVolumesPair Replicate(const G4String& name, G4LogicalVolume* LV, G4LogicalVolume* motherLV, @@ -110,11 +155,14 @@ class G4ReflectionFactory G4int nofReplicas, G4double width, G4double offset = 0.); - // Creates replica in the given mother. - // The result is a pair of physical volumes; - // the second physical volume is a replica in a reflected mother - // or 0 if mother LV was not reflected. + /** + * Methods to create a division in the given mother, along with the + * possible specifications for creating a division. + * @returns A pair of physical volumes; the second physical volume is + * a division in a reflected mother or nullptr if mother + * logical volume was not reflected. + */ G4PhysicalVolumesPair Divide(const G4String& name, G4LogicalVolume* LV, G4LogicalVolume* motherLV, @@ -134,103 +182,134 @@ class G4ReflectionFactory EAxis axis, G4double width, G4double offset); - // Creates division in the given mother. - // The result is a pair of physical volumes; - // the second physical volume is a division in a reflected mother - // or nullptr if mother LV was not reflected. - void SetVerboseLevel(G4int verboseLevel); + /** + * Verbosity control. + */ + void SetVerboseLevel(G4int verboseLevel); G4int GetVerboseLevel() const; - // Sets/gets verbosity level. - void SetVolumesNameExtension(const G4String& nameExtension); + /** + * Sets/returns the name extension for the reflected solids and + * logical volumes. + */ + void SetVolumesNameExtension(const G4String& nameExtension); const G4String& GetVolumesNameExtension() const; - // Returns the name extension for the reflected solids - // and logical volumes. - void SetScalePrecision(G4double scaleValue); + /** + * Sets/gets the precision factor for the scale consistency check. + * The default value is set to 10*kCarTolerance. + */ + void SetScalePrecision(G4double scaleValue); G4double GetScalePrecision() const; - // Sets/gets precision factor for the scale consistency check - // The default value is set to 10*kCarTolerance. + /** + * Returns the consituent volume of the given reflected volume. + * Returns nullptr if the given reflected volume was not found. + */ G4LogicalVolume* GetConstituentLV(G4LogicalVolume* reflLV) const; - // Returns the consituent volume of the given reflected volume, - // nullptr if the given reflected volume was not found. + /** + * Returns the reflected volume of the given consituent volume. + * Returns nullptr if the given volume was not reflected. + */ G4LogicalVolume* GetReflectedLV(G4LogicalVolume* lv) const; - // Returns the reflected volume of the given consituent volume, - // nullptr if the given volume was not reflected. + /** + * Returns true if the given volume has been already reflected + * (i.e. is in the map of constituent volumes). + */ G4bool IsConstituent(G4LogicalVolume* lv) const; - // Returns true if the given volume has been already reflected - // (is in the map of constituent volumes). + /** + * Returns true if the given volume is a reflected volume + * (i.e. is in the map reflected volumes). + */ G4bool IsReflected(G4LogicalVolume* lv) const; - // Returns true if the given volume is a reflected volume - // (is in the map reflected volumes). + /** + * Returns a handle to the internal map of volumes which have + * been reflected, after that placement or replication is performed. + */ const G4ReflectedVolumesMap& GetReflectedVolumesMap() const; - // Returns a handle to the internal map of volumes which have - // been reflected, after that placement or replication is performed. + /** + * Clears the maps of constituent and reflected volumes. + * @note To be used exclusively when volumes are removed from the stores. + */ void Clean(); - // Clear maps of constituent and reflected volumes. - // To be used exclusively when volumes are removed from the stores. - - G4ReflectionFactory(const G4ReflectionFactory&) = delete; - G4ReflectionFactory& operator=(const G4ReflectionFactory&) = delete; - // Disabled copy constructor and assignment operator. - - protected: - - G4ReflectionFactory(); - // Protected singleton constructor. private: + /** + * Private singleton constructor. + */ + G4ReflectionFactory(); + + /** + * Gets/creates the reflected solid and logical volume + * and copies + transforms logical volumes of daughters. + */ G4LogicalVolume* ReflectLV(G4LogicalVolume* LV, G4bool surfCheck = false); - // Gets/creates the reflected solid and logical volume - // and copies + transforms LV daughters. + /** + * Creates the reflected solid and logical volume + * and adds the logical volumes pair in the maps. + */ G4LogicalVolume* CreateReflectedLV(G4LogicalVolume* LV); - // Creates the reflected solid and logical volume - // and add the logical volumes pair in the maps. + /** + * Reflects daughters recursively. + */ void ReflectDaughters(G4LogicalVolume* LV, G4LogicalVolume* refLV, G4bool surfCheck = false); - // Reflects daughters recursively. + /** + * Copies and transforms daughter of G4PVPlacement type of + * a constituent volume into a reflected volume. + */ void ReflectPVPlacement(G4VPhysicalVolume* PV, G4LogicalVolume* refLV, G4bool surfCheck = false); - // Copies and transforms daughter of PVPlacement type of - // a constituent volume into a reflected volume. + /** + * Copies and transforms daughter of G4PVReplica type of + * a constituent volume into a reflected volume. + */ void ReflectPVReplica(G4VPhysicalVolume* PV, G4LogicalVolume* refLV); - // Copies and transforms daughter of PVReplica type of - // a constituent volume into a reflected volume. + /** + * Copies and transforms daughter of G4PVDivision type of + * a constituent volume into a reflected volume. + */ void ReflectPVDivision(G4VPhysicalVolume* PV, G4LogicalVolume* refLV); - // Copies and transforms daughter of PVDivision type of - // a constituent volume into a reflected volume. + /** + * Not yet implemented. + * Should copy and transform daughter of G4PVParameterised type of + * a constituent volume into a reflected volume. + */ void ReflectPVParameterised(G4VPhysicalVolume* PV, G4LogicalVolume* refLV, G4bool surfChk = false); - // Not implemented yet. - // Should copy and transform daughter of PVReplica type of - // a constituent volume into a reflected volume. + /** + * Returns true if the scale is negative, false otherwise. + */ G4bool IsReflection(const G4Scale3D& scale) const; - // Returns true if the scale is negative, false otherwise. + /** + * Checks if scale correspond to fScale, if not gives exception. + */ void CheckScale(const G4Scale3D& scale) const; - // Checks if scale correspond to fScale, if not gives exception. + /** + * Checks if the division factory is instanciated, if not gives exception. + */ G4VPVDivisionFactory* GetPVDivisionFactory() const; - // Checks if the division factory is instanciated, - // if not gives exception. - void PrintConstituentLVMap(); - // Temporary - for debugging purpose. + /** + * Dump method, for debugging purpose. + */ + void PrintConstituentLVMap() const; private: diff --git a/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh b/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh index 8227979cae..54a61fd570 100644 --- a/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh +++ b/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh @@ -34,7 +34,7 @@ // * volume type is similar to G4PVPlacement -- not replicated // * external navigator may provide 'many'/Boolean operation -// Author: J.Apostolakis, CERN - October 2019 +// Author: John Apostolakis (CERN), October 2019 // ---------------------------------------------------------------------- #ifndef G4VEXTERNALPHYSICSVOLUME_HH #define G4VEXTERNALPHYSICSVOLUME_HH 1 @@ -42,41 +42,74 @@ #include "G4VPhysicalVolume.hh" #include "G4Transform3D.hh" +/** + * @brief G4VExternalPhysicalVolume is a base class to represent a physical + * volume managed by an external sub-navigator. + */ + class G4VExternalPhysicalVolume : public G4VPhysicalVolume { public: + /** + * Constructor implementing G4VPhysicalVolume signature. + * @param[in] pRot The pointer to the rotation in the mother volume. + * @param[in] tlate Traslation vector in the mother volume. + * @param[in] pCurrentLogical Pointer to its logical volume. + * @param[in] pName The volume name. + * @param[in] pMotherLogical Pointer to the logical volume of the mother. + */ G4VExternalPhysicalVolume( G4RotationMatrix* pRot, const G4ThreeVector& tlate, G4LogicalVolume* pCurrentLogical, const G4String& pName, G4VPhysicalVolume* pMother ); + /** + * Fake default constructor for usage restricted to direct object + * persistency for clients requiring preallocation of memory for + * persistifiable objects. + */ + G4VExternalPhysicalVolume(__void__&); + + /** + * Copy constructor and assignment operator not allowed. + */ G4VExternalPhysicalVolume(const G4VExternalPhysicalVolume&) = delete; G4VExternalPhysicalVolume& operator=(const G4VExternalPhysicalVolume&) = delete; - // Forbidden copy constructor and assignment operator. + /** + * Default Destructor. + */ ~G4VExternalPhysicalVolume() override; - // Default destructor. + /** + * Verifies if the placed volume is overlapping with existing daughters + * or with the mother volume. Provides default resolution for the number + * of points to be generated and verified. + * A tolerance for the precision of the overlap check can be specified, + * by default it is set to maximum precision. + * Reports a maximum of overlaps errors according to parameter in input. + * @param[in] res The number of points to generate on volume's surface. + * @param[in] tol The precision tolerance for the overlap check, below + * which to ignore overlaps (deafult is maximim precision). + * @param[in] verbose Verbosity mode (default is true). + * @param[in] maxErr Maximum of overlaps errors to report (default is 1). + * @returns True if an overlap occurs. + */ G4bool CheckOverlaps(G4int res=1000, G4double tol=0., G4bool verbose=true, G4int maxErr=1) override = 0; - // Verifies if the placed volume is overlapping with existing - // daughters or with the mother volume. Provides default resolution - // for the number of points to be generated and verified. - // A tolerance for the precision of the overlap check can be specified, - // by default it is set to maximum precision. - // Reports a maximum of overlaps errors according to parameter in input. - // Returns true if the volume is overlapping. - - G4VExternalPhysicalVolume(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + /** + * Returns the volume type characterisation, i.e. kExternal. + */ EVolume VolumeType() const final; + + /** + * Stub methods, unused for placed volumes. + */ G4bool IsMany() const final; - + void SetMany(G4bool overlap); G4bool IsReplicated() const final; G4bool IsParameterised() const final; G4VPVParameterisation* GetParameterisation() const final; @@ -86,14 +119,12 @@ class G4VExternalPhysicalVolume : public G4VPhysicalVolume G4double& offset, G4bool& consuming) const final; - // Methods for use with Regular Navigation - // + /** + * Used only for specialised repeated volumes. Always false with Id 0. + */ G4bool IsRegularStructure() const final; G4int GetRegularStructureId() const final; - void SetMany(G4bool overlap); - // Set the 'many' flag - private: G4bool fMany = false; diff --git a/source/geometry/volumes/src/G4AssemblyStore.cc b/source/geometry/volumes/src/G4AssemblyStore.cc index a7632cda40..a39bb17a98 100644 --- a/source/geometry/volumes/src/G4AssemblyStore.cc +++ b/source/geometry/volumes/src/G4AssemblyStore.cc @@ -27,7 +27,7 @@ // // Implementation for singleton container // -// 9.10.2018 G.Cosmo, CERN - Initial version +// Author: Gabriele Cosmo (CERN), 9 October 2018 // -------------------------------------------------------------------- #include "G4AssemblyVolume.hh" diff --git a/source/geometry/volumes/src/G4AssemblyVolume.cc b/source/geometry/volumes/src/G4AssemblyVolume.cc index 6c8f23daad..55ad479b95 100644 --- a/source/geometry/volumes/src/G4AssemblyVolume.cc +++ b/source/geometry/volumes/src/G4AssemblyVolume.cc @@ -25,7 +25,7 @@ // // Class G4AssemblyVolume - implementation // -// Author: Radovan Chytracek, CERN - November 2000 +// Authors: R.Chytracek, J.Apostolakis, G.Cosmo (CERN), November 2000 // -------------------------------------------------------------------- #include "G4AssemblyVolume.hh" diff --git a/source/geometry/volumes/src/G4LogicalBorderSurface.cc b/source/geometry/volumes/src/G4LogicalBorderSurface.cc index 5e1f78e468..0c861f5854 100644 --- a/source/geometry/volumes/src/G4LogicalBorderSurface.cc +++ b/source/geometry/volumes/src/G4LogicalBorderSurface.cc @@ -23,16 +23,14 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4LogicalBorderSurface Implementation +// Class G4LogicalBorderSurface Implementation // -// A Logical Surface class for surfaces defined by the boundary -// of two physical volumes. -// -// Author: John Apostolakis, CERN - 26-06-1997 +// Author: John Apostolakis (CERN), 17 June 1997 // -------------------------------------------------------------------- #include "G4LogicalBorderSurface.hh" #include "G4VPhysicalVolume.hh" +#include "G4GeometryManager.hh" G4LogicalBorderSurfaceTable* G4LogicalBorderSurface::theBorderSurfaceTable = nullptr; @@ -106,7 +104,7 @@ G4LogicalBorderSurface::GetSurface(const G4VPhysicalVolume* vol1, if (theBorderSurfaceTable != nullptr) { auto pos = theBorderSurfaceTable->find(std::make_pair(vol1,vol2)); - if(pos != theBorderSurfaceTable->cend()) return pos->second; + if(pos != theBorderSurfaceTable->cend()) { return pos->second; } } return nullptr; } @@ -136,13 +134,19 @@ void G4LogicalBorderSurface::DumpInfo() // -------------------------------------------------------------------- void G4LogicalBorderSurface::CleanSurfaceTable() { - if (theBorderSurfaceTable != nullptr) + if (theBorderSurfaceTable == nullptr) { return; } + + // Do nothing if geometry is closed + if (G4GeometryManager::GetInstance()->IsGeometryClosed()) { - for(const auto & pos : *theBorderSurfaceTable) - { - delete pos.second; - } - theBorderSurfaceTable->clear(); + G4cout << "WARNING - Attempt to clear the border surface store" + << " while geometry closed !" << G4endl; + return; } - return; + + for (const auto& pos : *theBorderSurfaceTable) + { + delete pos.second; + } + theBorderSurfaceTable->clear(); } diff --git a/source/geometry/volumes/src/G4LogicalSkinSurface.cc b/source/geometry/volumes/src/G4LogicalSkinSurface.cc index ff03023c2f..afe07cdede 100644 --- a/source/geometry/volumes/src/G4LogicalSkinSurface.cc +++ b/source/geometry/volumes/src/G4LogicalSkinSurface.cc @@ -23,16 +23,14 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4LogicalSkinSurface Implementation +// Class G4LogicalSkinSurface Implementation // -// A Logical Surface class for the surface surrounding a single -// logical volume. -// -// Author: John Apostolakis, CERN - 26-06-1997 +// Author: John Apostolakis (CERN), 16 June 1997 // -------------------------------------------------------------------- #include "G4LogicalSkinSurface.hh" #include "G4LogicalVolume.hh" +#include "G4GeometryManager.hh" G4LogicalSkinSurfaceTable *G4LogicalSkinSurface::theSkinSurfaceTable = nullptr; @@ -100,7 +98,7 @@ G4LogicalSkinSurface::GetSurface(const G4LogicalVolume* vol) if (theSkinSurfaceTable != nullptr) { auto pos = theSkinSurfaceTable->find(vol); - if(pos != theSkinSurfaceTable->cend()) return pos->second; + if(pos != theSkinSurfaceTable->cend()) { return pos->second; } } return nullptr; } @@ -130,13 +128,19 @@ void G4LogicalSkinSurface::DumpInfo() // -------------------------------------------------------------------- void G4LogicalSkinSurface::CleanSurfaceTable() { - if (theSkinSurfaceTable != nullptr) + if (theSkinSurfaceTable == nullptr) { return; } + + // Do nothing if geometry is closed + if (G4GeometryManager::GetInstance()->IsGeometryClosed()) { - for(const auto & pos : *theSkinSurfaceTable) - { - delete pos.second; - } - theSkinSurfaceTable->clear(); + G4cout << "WARNING - Attempt to clear the skin surface store" + << " while geometry closed !" << G4endl; + return; } - return; + + for (const auto& pos : *theSkinSurfaceTable) + { + delete pos.second; + } + theSkinSurfaceTable->clear(); } diff --git a/source/geometry/volumes/src/G4PVParameterised.cc b/source/geometry/volumes/src/G4PVParameterised.cc index 15f43ab397..b572f942df 100644 --- a/source/geometry/volumes/src/G4PVParameterised.cc +++ b/source/geometry/volumes/src/G4PVParameterised.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PVParameterised implementation +// Class G4PVParameterised implementation // -// 29.07.95, P.Kent - first non-stub version +// Author: Paul Kent (CERN), 29 July 1995 - first non-stub version // ---------------------------------------------------------------------- #include "G4PVParameterised.hh" @@ -62,7 +62,8 @@ G4PVParameterised::G4PVParameterised( const G4String& pName, #ifdef G4VERBOSE if ((pMotherPhysical != nullptr) && (pMotherPhysical->IsParameterised())) { - std::ostringstream message, hint; + std::ostringstream message; + std::ostringstream hint; message << "A parameterised volume is being placed" << G4endl << "inside another parameterised volume !"; hint << "To make sure that no overlaps are generated," << G4endl @@ -176,9 +177,10 @@ G4PVParameterised::CheckOverlaps(G4int res, G4double tol, G4int trials = 0; G4bool retval = false; - G4VSolid *solidA = nullptr, *solidB = nullptr; + G4VSolid* solidA = nullptr; + G4VSolid* solidB = nullptr; G4LogicalVolume* motherLog = GetMotherLogical(); - G4VSolid *motherSolid = motherLog->GetSolid(); + G4VSolid* motherSolid = motherLog->GetSolid(); std::vector points; if (verbose) diff --git a/source/geometry/volumes/src/G4PVPlacement.cc b/source/geometry/volumes/src/G4PVPlacement.cc index 8136a0e0b8..37af1b29bd 100644 --- a/source/geometry/volumes/src/G4PVPlacement.cc +++ b/source/geometry/volumes/src/G4PVPlacement.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PVPlacement Implementation +// Class G4PVPlacement Implementation // -// 24.07.95 P.Kent, First non-stub version. +// Author: Paul Kent (CERN), 24 July 1995 - first non-stub version // ---------------------------------------------------------------------- #include "G4PVPlacement.hh" @@ -81,8 +81,10 @@ G4PVPlacement::G4PVPlacement( const G4Transform3D& Transform3D, { G4LogicalVolume* motherLogical = pMother->GetLogicalVolume(); if (pLogical == motherLogical) + { G4Exception("G4PVPlacement::G4PVPlacement()", "GeomVol0002", FatalException, "Cannot place a volume inside itself!"); + } SetMotherLogical(motherLogical); motherLogical->AddDaughter(this); if (pSurfChk) { CheckOverlaps(); } @@ -282,8 +284,12 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, // and find the bonding box // std::vector points(res); - G4double xmin = kInfinity, ymin = kInfinity, zmin = kInfinity; - G4double xmax = -kInfinity, ymax = -kInfinity, zmax = -kInfinity; + G4double xmin = kInfinity; + G4double ymin = kInfinity; + G4double zmin = kInfinity; + G4double xmax = -kInfinity; + G4double ymax = -kInfinity; + G4double zmax = -kInfinity; G4AffineTransform Tm(GetRotation(), GetTranslation()); for (G4int i = 0; i < res; ++i) { @@ -307,11 +313,11 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, for (G4int i = 0; i < res; ++i) { G4ThreeVector mp = points[i]; - if (motherSolid->Inside(mp) != kOutside) continue; + if (motherSolid->Inside(mp) != kOutside) { continue; } G4double distin = motherSolid->DistanceToIn(mp); - if (distin < tol) continue; // too small overlap + if (distin < tol) { continue; } // too small overlap ++overlapCount; - if (distin <= overlapSize) continue; + if (distin <= overlapSize) { continue; } overlapSize = distin; overlapPoint = mp; } @@ -346,12 +352,13 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, // Checking overlaps with each 'sister' volumes // G4VSolid* previous = nullptr; - G4ThreeVector pmin_local(0.,0.,0.), pmax_local(0.,0.,0.); + G4ThreeVector pmin_local(0.,0.,0.); + G4ThreeVector pmax_local(0.,0.,0.); for (std::size_t k = 0; k < motherLog->GetNoDaughters(); ++k) { G4VPhysicalVolume* daughter = motherLog->GetDaughter((G4int)k); - if (daughter == this) continue; + if (daughter == this) { continue; } G4bool check_encapsulation = true; G4AffineTransform Td(daughter->GetRotation(), daughter->GetTranslation()); @@ -367,29 +374,29 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, G4ThreeVector offset = Td.NetTranslation(); G4ThreeVector pmin(pmin_local + offset); G4ThreeVector pmax(pmax_local + offset); - if (pmin.x() >= xmax) continue; - if (pmin.y() >= ymax) continue; - if (pmin.z() >= zmax) continue; - if (pmax.x() <= xmin) continue; - if (pmax.y() <= ymin) continue; - if (pmax.z() <= zmin) continue; + if (pmin.x() >= xmax) { continue; } + if (pmin.y() >= ymax) { continue; } + if (pmin.z() >= zmax) { continue; } + if (pmax.x() <= xmin) { continue; } + if (pmax.y() <= ymin) { continue; } + if (pmax.z() <= zmin) { continue; } for (G4int i = 0; i < res; ++i) { G4ThreeVector p = points[i]; - if (p.x() <= pmin.x()) continue; - if (p.x() >= pmax.x()) continue; - if (p.y() <= pmin.y()) continue; - if (p.y() >= pmax.y()) continue; - if (p.z() <= pmin.z()) continue; - if (p.z() >= pmax.z()) continue; + if (p.x() <= pmin.x()) { continue; } + if (p.x() >= pmax.x()) { continue; } + if (p.y() <= pmin.y()) { continue; } + if (p.y() >= pmax.y()) { continue; } + if (p.z() <= pmin.z()) { continue; } + if (p.z() >= pmax.z()) { continue; } G4ThreeVector md = p - offset; if (daughterSolid->Inside(md) == kInside) { check_encapsulation = false; G4double distout = daughterSolid->DistanceToOut(md); - if (distout < tol) continue; // too small overlap + if (distout < tol) { continue; } // too small overlap ++overlapCount; - if (distout <= overlapSize) continue; + if (distout <= overlapSize) { continue; } overlapSize = distout; overlapPoint = md; } @@ -397,18 +404,20 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, } else // transformation with rotation { - G4ThreeVector pmin(pmin_local), pmax(pmax_local); + G4ThreeVector pmin(pmin_local); + G4ThreeVector pmax(pmax_local); G4ThreeVector dcenter = Td.TransformPoint(0.5*(pmin + pmax)); G4double dradius = 0.5*((pmax - pmin).mag()); - if ((scenter - dcenter).mag2() >= (sradius + dradius)*(sradius + dradius)) continue; - if (dcenter.x() - dradius >= xmax) continue; - if (dcenter.y() - dradius >= ymax) continue; - if (dcenter.z() - dradius >= zmax) continue; - if (dcenter.x() + dradius <= xmin) continue; - if (dcenter.y() + dradius <= ymin) continue; - if (dcenter.z() + dradius <= zmin) continue; + if ((scenter - dcenter).mag2() >= (sradius + dradius)*(sradius + dradius)) { continue; } + if (dcenter.x() - dradius >= xmax) { continue; } + if (dcenter.y() - dradius >= ymax) { continue; } + if (dcenter.z() - dradius >= zmax) { continue; } + if (dcenter.x() + dradius <= xmin) { continue; } + if (dcenter.y() + dradius <= ymin) { continue; } + if (dcenter.z() + dradius <= zmin) { continue; } - G4ThreeVector pbox[8] = { + G4ThreeVector pbox[8] = + { G4ThreeVector(pmin.x(), pmin.y(), pmin.z()), G4ThreeVector(pmax.x(), pmin.y(), pmin.z()), G4ThreeVector(pmin.x(), pmax.y(), pmin.z()), @@ -418,8 +427,12 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, G4ThreeVector(pmin.x(), pmax.y(), pmax.z()), G4ThreeVector(pmax.x(), pmax.y(), pmax.z()) }; - G4double dxmin = kInfinity, dymin = kInfinity, dzmin = kInfinity; - G4double dxmax = -kInfinity, dymax = -kInfinity, dzmax = -kInfinity; + G4double dxmin = kInfinity; + G4double dymin = kInfinity; + G4double dzmin = kInfinity; + G4double dxmax = -kInfinity; + G4double dymax = -kInfinity; + G4double dzmax = -kInfinity; for (const auto & i : pbox) { G4ThreeVector p = Td.TransformPoint(i); @@ -430,29 +443,29 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, dymax = std::max(dymax, p.y()); dzmax = std::max(dzmax, p.z()); } - if (dxmin >= xmax) continue; - if (dymin >= ymax) continue; - if (dzmin >= zmax) continue; - if (dxmax <= xmin) continue; - if (dymax <= ymin) continue; - if (dzmax <= zmin) continue; + if (dxmin >= xmax) { continue; } + if (dymin >= ymax) { continue; } + if (dzmin >= zmax) { continue; } + if (dxmax <= xmin) { continue; } + if (dymax <= ymin) { continue; } + if (dzmax <= zmin) { continue; } for (G4int i = 0; i < res; ++i) { G4ThreeVector p = points[i]; - if (p.x() >= dxmax) continue; - if (p.x() <= dxmin) continue; - if (p.y() >= dymax) continue; - if (p.y() <= dymin) continue; - if (p.z() >= dzmax) continue; - if (p.z() <= dzmin) continue; + if (p.x() >= dxmax) { continue; } + if (p.x() <= dxmin) { continue; } + if (p.y() >= dymax) { continue; } + if (p.y() <= dymin) { continue; } + if (p.z() >= dzmax) { continue; } + if (p.z() <= dzmin) { continue; } G4ThreeVector md = Td.InverseTransformPoint(p); if (daughterSolid->Inside(md) == kInside) { check_encapsulation = false; G4double distout = daughterSolid->DistanceToOut(md); - if (distout < tol) continue; // too small overlap + if (distout < tol) { continue; } // too small overlap ++overlapCount; - if (distout <= overlapSize) continue; + if (distout <= overlapSize) { continue; } overlapSize = distout; overlapPoint = md; } diff --git a/source/geometry/volumes/src/G4PVReplica.cc b/source/geometry/volumes/src/G4PVReplica.cc index 06c5abd14b..1e45d60eec 100644 --- a/source/geometry/volumes/src/G4PVReplica.cc +++ b/source/geometry/volumes/src/G4PVReplica.cc @@ -23,9 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// class G4PVReplica Implementation +// Class G4PVReplica Implementation // -// 29.07.95, P.Kent - First non-stub version +// Original author: Paul Kent (CERN), 29 July 1995 - First non-stub version +// - G.Cosmo, A.Dotti (CERN), 13 January 2013 - Modified for MT thread-safety // ---------------------------------------------------------------------- #include "G4PVReplica.hh" diff --git a/source/geometry/volumes/src/G4ReflectionFactory.cc b/source/geometry/volumes/src/G4ReflectionFactory.cc index f6dac85330..2f519d2a90 100644 --- a/source/geometry/volumes/src/G4ReflectionFactory.cc +++ b/source/geometry/volumes/src/G4ReflectionFactory.cc @@ -46,7 +46,7 @@ // = TV * R*TD*R-1 * R*x(inD) // = TV * ReflTD * x(inReflD) // -// Author: Ivana Hrivnacova (Ivana.Hrivnacova@cern.ch), 16.10.2001 +// Author: Ivana Hrivnacova (IN2P3/IJCLab Orsay), 16 October 2001 // -------------------------------------------------------------------- #include "G4ReflectionFactory.hh" @@ -146,8 +146,7 @@ G4ReflectionFactory::Place( const G4Transform3D& transform3D, if (!IsReflection(scale)) { - if (fVerboseLevel>0) - G4cout << "Scale positive" << G4endl; + if (fVerboseLevel>0) { G4cout << "Scale positive" << G4endl; } G4VPhysicalVolume* pv1 = new G4PVPlacement(pureTransform3D, LV, name, @@ -171,8 +170,7 @@ G4ReflectionFactory::Place( const G4Transform3D& transform3D, // reflection IS present in transform3D // - if (fVerboseLevel>0) - G4cout << "scale negative" << G4endl; + if (fVerboseLevel>0) { G4cout << "scale negative" << G4endl; } G4VPhysicalVolume* pv1 = new G4PVPlacement(pureTransform3D, ReflectLV(LV, surfCheck), name, @@ -403,7 +401,7 @@ G4LogicalVolume* G4ReflectionFactory::CreateReflectedLV(G4LogicalVolume* LV) // consistency check // - if (fReflectedLVMap.find(LV) != fReflectedLVMap.end()) + if (fReflectedLVMap.find(LV) != fReflectedLVMap.cend()) { std::ostringstream message; message << "Invalid reflection for volume: " @@ -498,14 +496,12 @@ void G4ReflectionFactory::ReflectPVPlacement(G4VPhysicalVolume* dPV, G4LogicalVolume* refDLV; - if (fVerboseLevel>0) - G4cout << "Daughter: " << dPV << " " << dLV->GetName(); + if (fVerboseLevel>0) { G4cout << "Daughter: " << dPV << " " << dLV->GetName(); } if (!IsReflected(dLV)) { - if (fVerboseLevel>0) - G4cout << " will be reflected." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reflected." << G4endl; } // get reflected volume if already created refDLV = GetReflectedLV(dLV); @@ -530,8 +526,7 @@ void G4ReflectionFactory::ReflectPVPlacement(G4VPhysicalVolume* dPV, } else { - if (fVerboseLevel>0) - G4cout << " will be reconstitued." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reconstitued." << G4endl; } refDLV = GetConstituentLV(dLV); @@ -563,13 +558,11 @@ void G4ReflectionFactory::ReflectPVReplica(G4VPhysicalVolume* dPV, G4LogicalVolume* refDLV; - if (fVerboseLevel>0) - G4cout << "Daughter: " << dPV << " " << dLV->GetName(); + if (fVerboseLevel>0) { G4cout << "Daughter: " << dPV << " " << dLV->GetName(); } if (!IsReflected(dLV)) { - if (fVerboseLevel>0) - G4cout << " will be reflected." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reflected." << G4endl; } // get reflected volume if already created // @@ -593,8 +586,7 @@ void G4ReflectionFactory::ReflectPVReplica(G4VPhysicalVolume* dPV, } else { - if (fVerboseLevel>0) - G4cout << " will be reconstitued." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reconstitued." << G4endl; } refDLV = GetConstituentLV(dLV); @@ -622,13 +614,11 @@ void G4ReflectionFactory::ReflectPVDivision(G4VPhysicalVolume* dPV, G4LogicalVolume* refDLV; - if (fVerboseLevel>0) - G4cout << "Daughter: " << dPV << " " << dLV->GetName(); + if (fVerboseLevel>0) { G4cout << "Daughter: " << dPV << " " << dLV->GetName(); } if (!IsReflected(dLV)) { - if (fVerboseLevel>0) - G4cout << " will be reflected." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reflected." << G4endl; } // get reflected volume if already created // @@ -651,8 +641,7 @@ void G4ReflectionFactory::ReflectPVDivision(G4VPhysicalVolume* dPV, } else { - if (fVerboseLevel>0) - G4cout << " will be reconstitued." << G4endl; + if (fVerboseLevel>0) { G4cout << " will be reconstitued." << G4endl; } refDLV = GetConstituentLV(dLV); @@ -666,7 +655,7 @@ void G4ReflectionFactory::ReflectPVParameterised(G4VPhysicalVolume* dPV, G4LogicalVolume*, G4bool) { // Not implemented. - // Should copy and transform daughter of PVReplica type of + // Should copy and transform daughter of G4PVParameterised type of // a constituent volume into a reflected volume. // --- @@ -688,7 +677,7 @@ G4ReflectionFactory::GetConstituentLV(G4LogicalVolume* reflLV) const auto it = fReflectedLVMap.find(reflLV); - if (it == fReflectedLVMap.end()) return nullptr; + if (it == fReflectedLVMap.cend()) { return nullptr; } return (*it).second; } @@ -704,7 +693,7 @@ G4ReflectionFactory::GetReflectedLV(G4LogicalVolume* lv) const auto it = fConstituentLVMap.find(lv); - if (it == fConstituentLVMap.end()) return nullptr; + if (it == fConstituentLVMap.cend()) { return nullptr; } return (*it).second; } @@ -717,7 +706,7 @@ G4bool G4ReflectionFactory::IsConstituent(G4LogicalVolume* lv) const // (is in the map of constituent volumes). // --- - return (fConstituentLVMap.find(lv) != fConstituentLVMap.end()); + return (fConstituentLVMap.find(lv) != fConstituentLVMap.cend()); } //_____________________________________________________________________________ @@ -728,7 +717,7 @@ G4bool G4ReflectionFactory::IsReflected(G4LogicalVolume* lv) const // (is in the map reflected volumes). // --- - return (fReflectedLVMap.find(lv) != fReflectedLVMap.end()); + return (fReflectedLVMap.find(lv) != fReflectedLVMap.cend()); } //_____________________________________________________________________________ @@ -759,13 +748,12 @@ void G4ReflectionFactory::Clean() //_____________________________________________________________________________ -void G4ReflectionFactory::PrintConstituentLVMap() +void G4ReflectionFactory::PrintConstituentLVMap() const { // temporary - for debugging purpose // --- - LogicalVolumesMapIterator it; - for (it = fConstituentLVMap.begin(); it != fConstituentLVMap.end(); ++it) + for (auto it=fConstituentLVMap.cbegin(); it!=fConstituentLVMap.cend(); ++it) { G4cout << "lv: " << (*it).first << " lv_refl: " << (*it).second << G4endl; } @@ -780,12 +768,17 @@ void G4ReflectionFactory::CheckScale(const G4Scale3D& scale) const // if not give exception. // --- - if (!IsReflection(scale)) return; + if (!IsReflection(scale)) { return; +} G4double diff = 0.; for (auto i=0; i<4; ++i) - for (auto j=0; j<4; ++j) + { + for (auto j=0; j<4; ++j) + { diff += std::abs(scale(i,j) - fScale(i,j)); + } + } if (diff > fScalePrecision) { diff --git a/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc b/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc index 99cdc295a3..135bf9b7a7 100644 --- a/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc +++ b/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4VExternalPhysicalVolume Implementation +// Class G4VExternalPhysicalVolume Implementation // -// Author: J.Apostolakis, CERN - October 2019 +// Author: John Apostolakis (CERN), October 2019 // ---------------------------------------------------------------------- #include "G4VExternalPhysicalVolume.hh" diff --git a/source/global/HEPNumerics/include/G4VSIntegration.hh b/source/global/HEPNumerics/include/G4VSIntegration.hh new file mode 100644 index 0000000000..6b3c39c4c2 --- /dev/null +++ b/source/global/HEPNumerics/include/G4VSIntegration.hh @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4VSIntegration +// +// Class description: +// +// Numerical algorithm for integration of probability density function +// and sampling of the energy. Parameters of the algorithm should +// be defined by consumer class via the InitialiseIntegrator(..) method. +// The method is effective for the case of functions with a peak and long +// tail. Tunning of parameters may increase efficiency of the algorithm. +// The default set of parameters is optimized for the pre-compound model. +// +// Created 03.03.2025 V.Ivanchenko +// +// -------------------------------------------------------------------- + +#ifndef G4VSIntegration_HH +#define G4VSIntegration_HH 1 + +#include "globals.hh" + +class G4VSIntegration +{ + public: + G4VSIntegration() = default; + + virtual ~G4VSIntegration() = default; + + // this method should be implemented in a consumer class + virtual G4double ProbabilityDensityFunction(G4double) = 0; + + virtual const G4String& ModelName() const; + + // initialisation before run called once + // accuracy - accuracy of integration + // fact1 - value < 1 to define energy E1: Pmax*fact = P(E1) + // and E2: P(E1)*fact = P(E2) + // fact2 - value > 1 provides tolerance for max cross section + // deltaE - the default step in energy + // dmin, dmax - min and max values of step + void InitialiseIntegrator(G4double accuracy, G4double fact1, G4double fact2, + G4double de, G4double dmin, G4double dmax); + + // compute integral of probability density function + G4double ComputeIntegral(const G4double emin, const G4double emax); + + // sample value according to probability density function + // it is assumed that ComputeIntegral(emin, emax) was executed + G4double SampleValue(); + + G4VSIntegration(const G4VSIntegration&) = delete; + G4VSIntegration& operator=(const G4VSIntegration&) = delete; + G4bool operator==(const G4VSIntegration &right) const = delete; + G4bool operator!=(const G4VSIntegration &right) const = delete; + + void SetVerbose(G4int verb) { fVerbose = verb; } + +private: + + G4double fAcc{0.001}; // accuracy of integration + G4double fMinDelta{0.1}; // minimal step integration + G4double fMaxDelta{2.0}; // maximal step integration + G4double fDelta{1.0}; // the default step + G4double fFactor1{0.25}; + G4double fFactor2{1.05}; + + // parameters describing function + G4double fEmin{0.0}; + G4double fEmax{0.0}; + G4double fE1{0.0}; + G4double fP1{0.0}; + G4double fE2{0.0}; + G4double fP2{0.0}; + G4double fPmax{0.0}; + + G4int fVerbose{0}; + G4int fWarnLimit{4}; + G4int fnWarn{0}; + + G4String dummy{""}; +}; + +#endif diff --git a/source/global/HEPNumerics/sources.cmake b/source/global/HEPNumerics/sources.cmake index d765955735..78a3f9301d 100644 --- a/source/global/HEPNumerics/sources.cmake +++ b/source/global/HEPNumerics/sources.cmake @@ -23,6 +23,7 @@ geant4_add_module(G4hepnumerics G4StatAnalysis.hh G4StatAnalysis.icc G4VGaussianQuadrature.hh + G4VSIntegration.hh SOURCES G4AnalyticalPolSolver.cc G4ChebyshevApproximation.cc @@ -36,6 +37,11 @@ geant4_add_module(G4hepnumerics G4JTPolynomialSolver.cc G4SimpleIntegration.cc G4StatDouble.cc - G4VGaussianQuadrature.cc) + G4VGaussianQuadrature.cc + G4VSIntegration.cc) -geant4_module_link_libraries(G4hepnumerics PUBLIC G4globman) +geant4_module_link_libraries(G4hepnumerics + PUBLIC + G4globman + PRIVATE + G4heprandom) diff --git a/source/global/HEPNumerics/src/G4VSIntegration.cc b/source/global/HEPNumerics/src/G4VSIntegration.cc new file mode 100644 index 0000000000..56be1ddc03 --- /dev/null +++ b/source/global/HEPNumerics/src/G4VSIntegration.cc @@ -0,0 +1,234 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4VSIntegration +// +// Created 03.03.2025 V.Ivanchenko +// +// -------------------------------------------------------------------- + +#include "G4VSIntegration.hh" +#include "Randomize.hh" +#include "G4Log.hh" + +void +G4VSIntegration::InitialiseIntegrator(G4double acc, G4double f1, G4double f2, + G4double de, G4double dmin, G4double dmax) +{ + if (acc > 0.0) { fAcc = acc; } + if (f1 > 0.0 && f1 < 1.0) { fFactor1 = f1; } + if (f2 > 1.0 && f2 < 5.0) { fFactor2 = f2; } + if (de > 0.0) { fDelta = de; } + fMinDelta = (dmin <= de && dmin > 0.0) ? dmin : de; + fMaxDelta = (dmax > de) ? dmax : de; + if (fVerbose > 2) { + G4cout << "### G4VSIntegration::InitialiseIntegrator: " + << "fAcc=" << fAcc << " fFact1=" << fFactor1 + << " fFact2=" << fFactor2 << " dE=" << fDelta + << " dEmin=" << fMinDelta << " dEmax=" << fMaxDelta << G4endl; + } +} + +G4double +G4VSIntegration::ComputeIntegral(const G4double emin, const G4double emax) +{ + G4double res = 0.0; + if (emin >= emax) { return res; } + fEmin = emin; + fEmax = emax; + + // preparing smart binning + G4int nbin = G4lrint((emax - emin)/fDelta) + 1; + nbin = std::max(nbin, 4); + G4double edelta = (emax - emin)/static_cast(nbin); + nbin += nbin; + + // prepare integration + G4double x(emin), y(0.0); + fPmax = ProbabilityDensityFunction(x); + G4double problast = fPmax; +#ifdef G4VERBOSE + if (fVerbose > 1) { + G4cout << "### G4VSIntegration::ComputeIntegral: " + << "Pmax=" << fPmax << " Emin=" << emin + << " Emax=" << emax << " dE=" << edelta << " nbin=" << nbin + << G4endl; + } +#endif + + fE1 = fE2 = emax; + fP1 = fP2 = 0.0; + G4bool endpoint = false; + x += edelta; + for (G4int i=0; i<=nbin; ++i) { + // the last point - may be earlier due to dynamic interval + if (x >= emax) { + edelta += emax - x; + x = emax; + endpoint = true; + } + y = ProbabilityDensityFunction(x); +#ifdef G4VERBOSE + if (fVerbose > 2) { + G4cout << " " << i << ". E=" << x << " prob=" << y + << " Edel=" << edelta << G4endl; + } +#endif + if (y >= fPmax) { + fPmax = y; + // for the case of 2nd maximum + fP1 = fP2 = 0.0; + fE1 = fE2 = emax; + } else if (!endpoint) { + if (0.0 == fP1) { + // definition of the 2nd area + if (y < fFactor1*fPmax) { + fE1 = x; + fP1 = y; + } + // for the case of 2nd maximum in the 2nd area + } else if (y > fP1) { + fP2 = 0.0; + fP1 = y; + fE2 = emax; + // definition of the 3d area + } else if (0.0 == fP2 && y < fFactor1*fP1) { + fE2 = x; + fP2 = y; + // extra maximum inside the 3d area + } else if (0.0 < fP2 && y > fP2) { + fP2 = y; + } + } + + G4double del = (y + problast)*edelta*0.5; + res += del; + // end of the loop + if (del < fAcc*res || endpoint) { break; } + problast = y; + + // smart next step definition + if (del != res && del > 0.8*res && 0.7*edelta > fMinDelta) { + edelta *= 0.7; + } else if (del < 0.1*res && 1.5*edelta < fMaxDelta) { + edelta *= 1.5; + } + x += edelta; + } +#ifdef G4VERBOSE + if (fVerbose > 1) { + G4cout << "### G4VSIntegration::ComputeIntegral: " + << "I=" << res << " E1=" << fE1 << " E2=" << fE2 + << " Pmax=" << fPmax << " P1=" << fP1 << " P2=" << fP2 + << G4endl; + } +#endif + return res; +} + +G4double G4VSIntegration::SampleValue() +{ + // should never happen + if (fEmin >= fEmax) { return fEmin; } + + fPmax *= fFactor2; + + // two regions with flat and one with exponential majorant + G4double b = 1.0; + G4double p3 = 0.0; + G4double Q3 = 0.0; + + // 2d and 3d areas may be considered + if (fP2 > 0.0 && fE2 < fEmax) { + Q3 = 2*ProbabilityDensityFunction(fEmax - 0.5*(fEmax - fE2)); + // exclude 3d area from sampling + if (4*Q3 > fP2 || Q3 <= 0.0) { + fE2 = fEmax; + // 3d area is considered + } else { + b = 2*G4Log(fP2/Q3)/(fEmax - fE2); + p3 = (fP2 - Q3)/b; + } + } + G4double p1 = (fE1 - fEmin)*fPmax; + G4double p2 = (fE2 - fE1)*fP1; + if (p2 < 1.e-8*p1) { + p2 = 0.0; + p1 = (fE2 - fEmin)*fPmax; + fE1 = fE2; + } + G4double sum = p1 + p2 + p3; + G4double del1 = (fE1 - fEmin)/p1; + G4double del2 = (p2 > 0.0) ? (fE2 - fE1)/p2 : 0.0; + + CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine(); + const G4int nmax = 1000; + G4double e, gmax, gg; + G4int n = 0; + do { + ++n; + G4double q = rndm->flat(); + G4double p = sum*q; + G4int idx = 0; + if (p <= p1) { + gmax = fPmax; + e = del1*p + fEmin; + } else if (p <= p1 + p2) { + gmax = fP1; + e = del2*(p - p1) + fE1; + idx = 1; + } else { + G4double x = 1.0 - rndm->flat()*(1.0 - Q3/fP2); + e = fE2 - G4Log(x)/b; + gmax = fP2*x; + idx = 2; + } + gg = ProbabilityDensityFunction(e); + if ((gg > gmax || n >= nmax) && fVerbose > 0) { + ++fnWarn; + if (fnWarn < fWarnLimit) { + G4cout << "### G4VSIntegration::SampleValue() for " << ModelName() + << " in area=" << idx << " n=" << n << " gg/gmax=" << gg/gmax + << " prob=" << gg << " gmax=" << gmax << G4endl; + G4cout << " E=" << e << " Emin=" << fEmin << " Emax=" << fEmax + << " E1=" << fE1 << " E2=" << fE2 << " Fmax=" << fPmax + << " F1=" << fP1 << G4endl; + } + } + } while(gmax*rndm->flat() > gg && n < nmax); +#ifdef G4VERBOSE + if (fVerbose > 1) { + G4cout << "### G4VSIntegration::SampleValue for " << ModelName() + << " E=" << e << " Ntry=" << n + << " Emin=" << fEmin << " Emax=" << fEmax << G4endl; + } +#endif + return e; +} + +const G4String& G4VSIntegration::ModelName() const +{ + return dummy; +} diff --git a/source/global/HEPRandom/include/G4QuickRand.hh b/source/global/HEPRandom/include/G4QuickRand.hh index 34aa961e85..38b83edc01 100644 --- a/source/global/HEPRandom/include/G4QuickRand.hh +++ b/source/global/HEPRandom/include/G4QuickRand.hh @@ -31,13 +31,13 @@ #include "G4Types.hh" #include -inline G4double G4QuickRand() +inline G4double G4QuickRand(uint32_t seed = 0) { - static const G4double f = 1. / 4294967296.; // 2^-32 + static const G4double f = 1. / 4294967296.; // 2^-32 // Algorithm "xor" from p.4 of G.Marsaglia, "Xorshift RNGs" static G4ThreadLocal uint32_t y = 2463534242; - uint32_t x = y; + uint32_t x = uint32_t(seed == 0) * y + seed; x ^= x << 13; x ^= x >> 17; x ^= x << 5; diff --git a/source/global/History b/source/global/History index c25a187b0f..13350a977c 100644 --- a/source/global/History +++ b/source/global/History @@ -6,24 +6,69 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-09 Gabriele Cosmo (global-V11-02-28) -- Updated tag IDs for geant4-11-03-patch-02. +## 2025-06-26 Gabriele Cosmo (global-V11-03-16) +- Updated tag IDs for geant4-11-03-ref-06. -## 2025-04-06 Alvaro Tolosa-Delgado +## 2025-06-10 Vladimir Ivantchenko (global-V11-03-15) +- G4VSIntegration - for 11.4beta verbose level set to zero. + +## 2025-05-28 Gabriele Cosmo (global-V11-03-14) +- Updated tag IDs for geant4-11-03-ref-05. + +## 2025-05-19 Vladimir Ivantchenko (global-V11-03-13) +- G4VSIntegration - improved warning printout by addition of model name, + added extra protections for the case, when probability density function + has several peaks, change upper limit on number of warnings in each instance + of the class from 10 to 4, fixed a bug in sampling of tail of the distribution. + +## 2025-05-15 Vladimir Ivantchenko (global-V11-03-12) +- G4VSIntegration - improved warning printout and add a limit on + number of warnings + +## 2025-03-28 Gabriele Cosmo (global-V11-03-11) +- Updated tag IDs for geant4-11-03-ref-04. + +## 2025-04-06 Alvaro Tolosa-Delgado (global-V11-03-10) - Add Scintillation, Cherenkov, Transition Radiation and Synchrotron Radiation processes to G4PhysicsModelCatalog::Initialize() -## 2025-03-21 Gabriele Cosmo (global-V11-02-27) -- Updated tag IDs for geant4-11-03-patch-01. +## 2025-03-31 Vladimir Ivantchenko (global-V11-03-09) +- G4VSIntegration - fixed Coverity report (cosmetics) -## 2025-03-20 Gabriele Cosmo +## 2025-03-28 Gabriele Cosmo (global-V11-03-08) +- Updated tag IDs for geant4-11-03-ref-03. + +## 2025-03-25 Vladimir Ivantchenko (global-V11-03-07) +- G4VSIntegration - fixed minor inaccuracy in binning + +## 2025-03-24 Evgueni Tcherniaev (global-V11-03-06) +- G4QuickRand: Added a possibility to set a seed. + +## 2025-03-20 Gabriele Cosmo (global-V11-03-05) - In G4ThreadLocalSingleton, removed unprotected left-over debug inclusion of G4BackTrace header. Addressing problem report #2649. -## 2025-01-31 Ben Morgan +## 2025-03-03 Vladimir Ivantchenko (global-V11-03-04) +- G4VSIntegration - added new utility class for integration of probability + density function and sampling of final state dynamically. This is useful + for the case, when sampling tables cannot be prepared and stored, instead + computations are performed for each case again and again. + +## 2025-02-28 Gabriele Cosmo (global-V11-03-03) +- Updated tag IDs for geant4-11-03-ref-02. + +## 2025-01-31 Ben Morgan (global-V11-03-02) +- Migrate `tests/` to `tests/ctests_source` for use in CI and Nightly. - Correct logic error in G4PhysicsTable when reading data in binary mode on Windows platforms, identified by migrated unit tests. +## 2025-01-29 Gabriele Cosmo (global-V11-03-01) +- Updated tag IDs for geant4-11-03-ref-01. + +## 2025-01-10 Ben Morgan (global-V11-03-00) +- Factor common ieee754 union and helper functions out of G4Log and G4Exp to + remove duplication. + ## 2024-11-22 Gabriele Cosmo (global-V11-02-26) - Updated tag IDs for geant4-11-03-ref-00. diff --git a/source/global/management/include/G4Exp.hh b/source/global/management/include/G4Exp.hh index d5296acd21..f7eb1c4dc2 100644 --- a/source/global/management/include/G4Exp.hh +++ b/source/global/management/include/G4Exp.hh @@ -64,7 +64,7 @@ #else # include "G4Types.hh" - +# include "G4IEEE754.hh" # include # include @@ -97,54 +97,6 @@ namespace G4ExpConsts const G4float LOG2EF = 1.44269504088896341f; - //---------------------------------------------------------------------------- - // Used to switch between different type of interpretations of the data - // (64 bits) - // - union ieee754 - { - ieee754()= default; - ieee754(G4double thed) { d = thed; }; - ieee754(uint64_t thell) { ll = thell; }; - ieee754(G4float thef) { f[0] = thef; }; - ieee754(uint32_t thei) { i[0] = thei; }; - G4double d; - G4float f[2]; - uint32_t i[2]; - uint64_t ll; - uint16_t s[4]; - }; - - //---------------------------------------------------------------------------- - // Converts an unsigned long long to a double - // - inline G4double uint642dp(uint64_t ll) - { - ieee754 tmp; - tmp.ll = ll; - return tmp.d; - } - - //---------------------------------------------------------------------------- - // Converts an int to a float - // - inline G4float uint322sp(G4int x) - { - ieee754 tmp; - tmp.i[0] = x; - return tmp.f[0]; - } - - //---------------------------------------------------------------------------- - // Converts a float to an int - // - inline uint32_t sp2uint32(G4float x) - { - ieee754 tmp; - tmp.f[0] = x; - return tmp.i[0]; - } - //---------------------------------------------------------------------------- /** * A vectorisable floor implementation, not only triggered by fast-math. @@ -156,7 +108,7 @@ namespace G4ExpConsts // no problem since exp is defined between -708 and 708. Int is enough for // it! int32_t ret = int32_t(x); - ret -= (sp2uint32(x) >> 31); + ret -= (G4IEEE754::sp2uint32(x) >> 31); return ret; } @@ -169,7 +121,7 @@ namespace G4ExpConsts inline G4float fpfloor(const G4float x) { int32_t ret = int32_t(x); - ret -= (sp2uint32(x) >> 31); + ret -= (G4IEEE754::sp2uint32(x) >> 31); return ret; } } // namespace G4ExpConsts @@ -211,7 +163,7 @@ inline G4double G4Exp(G4double initial_x) x = 1.0 + 2.0 * x; // Build 2^n in double. - x *= G4ExpConsts::uint642dp((((uint64_t) n) + 1023) << 52); + x *= G4IEEE754::uint642dp((((uint64_t) n) + 1023) << 52); if(initial_x > G4ExpConsts::EXP_LIMIT) x = std::numeric_limits::infinity(); @@ -252,7 +204,7 @@ inline G4float G4Expf(G4float initial_x) z += x + 1.0f; /* multiply by power of 2 */ - z *= G4ExpConsts::uint322sp((n + 0x7f) << 23); + z *= G4IEEE754::uint322sp((n + 0x7f) << 23); if(initial_x > G4ExpConsts::MAXLOGF) z = std::numeric_limits::infinity(); @@ -262,17 +214,6 @@ inline G4float G4Expf(G4float initial_x) return z; } -//------------------------------------------------------------------------------ - -void expv(const uint32_t size, G4double const* __restrict__ iarray, - G4double* __restrict__ oarray); -void G4Expv(const uint32_t size, G4double const* __restrict__ iarray, - G4double* __restrict__ oarray); -void expfv(const uint32_t size, G4float const* __restrict__ iarray, - G4float* __restrict__ oarray); -void G4Expfv(const uint32_t size, G4float const* __restrict__ iarray, - G4float* __restrict__ oarray); - #endif /* WIN32 */ #endif diff --git a/source/global/management/include/G4IEEE754.hh b/source/global/management/include/G4IEEE754.hh new file mode 100644 index 0000000000..3bf3688fac --- /dev/null +++ b/source/global/management/include/G4IEEE754.hh @@ -0,0 +1,94 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#ifndef G4IEEE754_hh +#define G4IEEE754_hh 1 + +#include "G4Types.hh" + +#include + +namespace G4IEEE754 +{ +//---------------------------------------------------------------------------- +// Used to switch between different type of interpretations of the data +// (64 bits) +// +union ieee754 +{ + ieee754() = default; + ieee754(G4double thed) { d = thed; }; + ieee754(uint64_t thell) { ll = thell; }; + ieee754(G4float thef) { f[0] = thef; }; + ieee754(uint32_t thei) { i[0] = thei; }; + G4double d; + G4float f[2]; + uint32_t i[2]; + uint64_t ll; + uint16_t s[4]; +}; + +//---------------------------------------------------------------------------- +// Converts a double to an unsigned long long +// +inline uint64_t dp2uint64(G4double x) +{ + ieee754 tmp; + tmp.d = x; + return tmp.ll; +} + +//---------------------------------------------------------------------------- +// Converts an unsigned long long to a double +// +inline G4double uint642dp(uint64_t ll) +{ + ieee754 tmp; + tmp.ll = ll; + return tmp.d; +} + +//---------------------------------------------------------------------------- +// Converts an int to a float +// +inline G4float uint322sp(G4int x) +{ + ieee754 tmp; + tmp.i[0] = x; + return tmp.f[0]; +} + +//---------------------------------------------------------------------------- +// Converts a float to an int +// +inline uint32_t sp2uint32(G4float x) +{ + ieee754 tmp; + tmp.f[0] = x; + return tmp.i[0]; +} +} // namespace G4IEEE754 + +#endif diff --git a/source/global/management/include/G4Log.hh b/source/global/management/include/G4Log.hh index 1401117ea1..f18dfceb3a 100644 --- a/source/global/management/include/G4Log.hh +++ b/source/global/management/include/G4Log.hh @@ -64,7 +64,7 @@ #else # include "G4Types.hh" - +# include "G4IEEE754.hh" # include # include @@ -78,24 +78,6 @@ namespace G4LogConsts const G4double SQRTH = 0.70710678118654752440; const G4float MAXNUMF = 3.4028234663852885981170418348451692544e38f; - //---------------------------------------------------------------------------- - // Used to switch between different type of interpretations of the data - // (64 bits) - // - union ieee754 - { - ieee754()= default; - ieee754(G4double thed) { d = thed; }; - ieee754(uint64_t thell) { ll = thell; }; - ieee754(G4float thef) { f[0] = thef; }; - ieee754(uint32_t thei) { i[0] = thei; }; - G4double d; - G4float f[2]; - uint32_t i[2]; - uint64_t ll; - uint16_t s[4]; - }; - inline G4double get_log_px(const G4double x) { const G4double PX1log = 1.01875663804580931796E-4; @@ -140,51 +122,11 @@ namespace G4LogConsts return qx; } - //---------------------------------------------------------------------------- - // Converts a double to an unsigned long long - // - inline uint64_t dp2uint64(G4double x) - { - ieee754 tmp; - tmp.d = x; - return tmp.ll; - } - - //---------------------------------------------------------------------------- - // Converts an unsigned long long to a double - // - inline G4double uint642dp(uint64_t ll) - { - ieee754 tmp; - tmp.ll = ll; - return tmp.d; - } - - //---------------------------------------------------------------------------- - // Converts an int to a float - // - inline G4float uint322sp(G4int x) - { - ieee754 tmp; - tmp.i[0] = x; - return tmp.f[0]; - } - - //---------------------------------------------------------------------------- - // Converts a float to an int - // - inline uint32_t sp2uint32(G4float x) - { - ieee754 tmp; - tmp.f[0] = x; - return tmp.i[0]; - } - //---------------------------------------------------------------------------- /// Like frexp but vectorising and the exponent is a double. inline G4double getMantExponent(const G4double x, G4double& fe) { - uint64_t n = dp2uint64(x); + uint64_t n = G4IEEE754::dp2uint64(x); // Shift to the right up to the beginning of the exponent. // Then with a mask, cut off the sign bit @@ -202,14 +144,14 @@ namespace G4LogConsts const uint64_t p05 = 0x3FE0000000000000ULL; // dp2uint64(0.5); n |= p05; - return uint642dp(n); + return G4IEEE754::uint642dp(n); } //---------------------------------------------------------------------------- /// Like frexp but vectorising and the exponent is a float. inline G4float getMantExponentf(const G4float x, G4float& fe) { - uint32_t n = sp2uint32(x); + uint32_t n = G4IEEE754::sp2uint32(x); int32_t e = (n >> 23) - 127; fe = e; @@ -218,7 +160,7 @@ namespace G4LogConsts n &= 0x807fffff; // ~0x7f800000; n |= p05f; - return uint322sp(n); + return G4IEEE754::uint322sp(n); } } // namespace G4LogConsts @@ -335,17 +277,6 @@ inline G4float G4Logf(G4float x) return res; } -//------------------------------------------------------------------------------ - -void logv(const uint32_t size, G4double const* __restrict__ iarray, - G4double* __restrict__ oarray); -void G4Logv(const uint32_t size, G4double const* __restrict__ iarray, - G4double* __restrict__ oarray); -void logfv(const uint32_t size, G4float const* __restrict__ iarray, - G4float* __restrict__ oarray); -void G4Logfv(const uint32_t size, G4float const* __restrict__ iarray, - G4float* __restrict__ oarray); - #endif /* WIN32 */ #endif /* LOG_H_ */ diff --git a/source/global/management/include/G4Version.hh b/source/global/management/include/G4Version.hh index 25845f105c..e8677d230d 100644 --- a/source/global/management/include/G4Version.hh +++ b/source/global/management/include/G4Version.hh @@ -43,7 +43,7 @@ /// |--> patch number (single digit) /// #ifndef G4VERSION_NUMBER - #define G4VERSION_NUMBER 1132 + #define G4VERSION_NUMBER 1140 #endif /// @def G4VERSION_REFERENCE_TAG @@ -55,11 +55,11 @@ /// (taking December as 0, the start of new development of the next major/minor release). /// #ifndef G4VERSION_REFERENCE_TAG - #define G4VERSION_REFERENCE_TAG -1 + #define G4VERSION_REFERENCE_TAG 00 #endif #ifndef G4VERSION_TAG - #define G4VERSION_TAG "$Name: geant4-11-03-patch-02 $" + #define G4VERSION_TAG "$Name: geant4-11-04-beta-01 $" #endif // as variables @@ -68,10 +68,10 @@ #include "G4Types.hh" #ifdef G4MULTITHREADED -static const G4String G4Version = "$Name: geant4-11-03-patch-02 [MT]$"; +static const G4String G4Version = "$Name: geant4-11-04-beta-01 [MT]$"; #else -static const G4String G4Version = "$Name: geant4-11-03-patch-02 $"; +static const G4String G4Version = "$Name: geant4-11-04-beta-01 $"; #endif -static const G4String G4Date = "(25-April-2025)"; +static const G4String G4Date = "(26-June-2025)"; #endif diff --git a/source/global/management/sources.cmake b/source/global/management/sources.cmake index 506e029766..b7fe46b4ec 100644 --- a/source/global/management/sources.cmake +++ b/source/global/management/sources.cmake @@ -54,6 +54,7 @@ geant4_add_module(G4globman G4GeometryTolerance.hh G4GlobalConfig.hh.in G4ios.hh + G4IEEE754.hh G4LockcoutDestination.hh G4Log.hh G4MasterForwardcoutDestination.hh diff --git a/source/graphics_reps/History b/source/graphics_reps/History index ac01b2b9a5..61a72b688d 100644 --- a/source/graphics_reps/History +++ b/source/graphics_reps/History @@ -6,6 +6,19 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-29 John Allison (greps-V11-03-01) +- Use "// clang-format off/on" on the following carefully crafted files: + - G4Colour.hh/cc, G4VisAttributes.hh/cc, G4VisExtent.cc. + +## 2025-01-06 John Allison (greps-V11-03-00) +- Co-works: visman-V11-03-00, modeling-V11-03-00, interfaces-V11-03-00, + opengl-V11-03-00, visQt3D-V11-03-00, vis_toolssg-V11-03-00, + openinventor-V11-03-00. +- Re-instate the transparency slider (see lengthy explanation in + visualization/management/History). +- G4VGraphicsScene.hh: + - Add fMaxGeometryDepth and access functions. + ## 2024-09-13 John Allison (greps-V11-02-06) - G4AttDef.hh: Deprecate output operator<< that uses pointer. - G4VMarker.cc: Minor improvements to messages in output operator<<. diff --git a/source/graphics_reps/include/G4Colour.hh b/source/graphics_reps/include/G4Colour.hh index d78708e6c2..6b1bfccf53 100644 --- a/source/graphics_reps/include/G4Colour.hh +++ b/source/graphics_reps/include/G4Colour.hh @@ -91,8 +91,7 @@ class G4Colour { public: // With description - G4Colour (G4double r_ = 1., G4double g_ = 1., G4double b_ = 1., - G4double a_ = 1.); + G4Colour (G4double r = 1., G4double gr = 1., G4double b = 1., G4double a = 1.); G4Colour (G4ThreeVector); // Converts the components of the 3-vector into red, green, blue. @@ -167,10 +166,12 @@ private: }; -inline G4double G4Colour::GetRed () const {return red;} -inline G4double G4Colour::GetGreen () const {return green;} -inline G4double G4Colour::GetBlue () const {return blue;} -inline G4double G4Colour::GetAlpha () const {return alpha;} +// clang-format off +inline G4double G4Colour::GetRed() const {return red;} +inline G4double G4Colour::GetGreen() const {return green;} +inline G4double G4Colour::GetBlue() const {return blue;} +inline G4double G4Colour::GetAlpha() const {return alpha;} + inline G4Colour G4Colour::White() {return G4Colour(1.0, 1.0, 1.0);} inline G4Colour G4Colour::Gray() {return G4Colour(0.5, 0.5, 0.5);} inline G4Colour G4Colour::Grey() {return G4Colour(0.5, 0.5, 0.5);} @@ -182,6 +183,7 @@ inline G4Colour G4Colour::Blue() {return G4Colour(0.0, 0.0, 1.0);} inline G4Colour G4Colour::Cyan() {return G4Colour(0.0, 1.0, 1.0);} inline G4Colour G4Colour::Magenta() {return G4Colour(1.0, 0.0, 1.0);} inline G4Colour G4Colour::Yellow() {return G4Colour(1.0, 1.0, 0.0);} +// clang-format on inline G4bool G4Colour::GetColor(const G4String& key, G4Colour& result) {return G4Colour::GetColour(key, result);} diff --git a/source/graphics_reps/include/G4VGraphicsScene.hh b/source/graphics_reps/include/G4VGraphicsScene.hh index 002d24bc2e..3f02f73d7d 100644 --- a/source/graphics_reps/include/G4VGraphicsScene.hh +++ b/source/graphics_reps/include/G4VGraphicsScene.hh @@ -166,6 +166,12 @@ public: // With description // The concrete class should overload this or a null extent will be returned. // See G4VScenHandler for example. + // Utilities + G4int GetMaxGeometryDepth() const {return fMaxGeometryDepth;} + void SetMaxGeometryDepth(G4int maxDepth) {fMaxGeometryDepth = maxDepth;} + +protected: + G4int fMaxGeometryDepth = 0; }; #endif diff --git a/source/graphics_reps/include/G4VisAttributes.hh b/source/graphics_reps/include/G4VisAttributes.hh index ac1eab9af5..30d41b38d2 100644 --- a/source/graphics_reps/include/G4VisAttributes.hh +++ b/source/graphics_reps/include/G4VisAttributes.hh @@ -143,6 +143,7 @@ public: // With description private: + // clang-format off G4bool fVisible; // Visibility flag G4bool fDaughtersInvisible; // Make daughters invsibile. G4Colour fColour; @@ -160,6 +161,7 @@ private: G4double fStartTime, fEndTime; // Time range. const std::vector* fAttValues; // For picking, etc. const std::map* fAttDefs; // Corresponding definitions. + // clang-format on }; #include "G4VisAttributes.icc" diff --git a/source/graphics_reps/src/G4Colour.cc b/source/graphics_reps/src/G4Colour.cc index 0d47129e9a..fa75954b25 100644 --- a/source/graphics_reps/src/G4Colour.cc +++ b/source/graphics_reps/src/G4Colour.cc @@ -32,46 +32,26 @@ #include "G4Threading.hh" -G4Colour::G4Colour (G4double r, G4double gr, G4double b, G4double a): -red (r), green (gr), blue (b), alpha (a) -{ - if( red > 1.0 ){red = 1.0;} if( red < 0.0 ){red = 0.0;} - if( green > 1.0 ){green = 1.0;} if( green < 0.0 ){green = 0.0;} - if( blue > 1.0 ){blue = 1.0;} if( blue < 0.0 ){blue = 0.0;} - if( alpha > 1.0 ){alpha = 1.0;} if( alpha < 0.0 ){alpha = 0.0;} +#include + +namespace { + auto clamp = [](double rgba){return std::clamp(rgba, 0., 1.);}; } +// clang-format off +G4Colour::G4Colour (G4double r, G4double gr, G4double b, G4double a): +red(clamp(r)), green(clamp(gr)), blue(clamp(b)), alpha(clamp(a)) +{} + G4Colour::G4Colour (G4ThreeVector v): -red (v.x()), green (v.y()), blue (v.z()), alpha (1.) -{ - if( red > 1.0 ){red = 1.0;} if( red < 0.0 ){red = 0.0;} - if( green > 1.0 ){green = 1.0;} if( green < 0.0 ){green = 0.0;} - if( blue > 1.0 ){blue = 1.0;} if( blue < 0.0 ){blue = 0.0;} -} +red(clamp(v.x())), green(clamp(v.y())), blue(clamp(v.z())), alpha (1.) +{} -void G4Colour::SetRed (G4double r) -{ - red = r; - if( red > 1.0 ){red = 1.0;} if( red < 0.0 ){red = 0.0;} -} - -void G4Colour::SetGreen (G4double gr) -{ - green = gr; - if( green > 1.0 ){green = 1.0;} if( green < 0.0 ){green = 0.0;} -} - -void G4Colour::SetBlue (G4double b) -{ - blue = b; - if( blue > 1.0 ){blue = 1.0;} if( blue < 0.0 ){blue = 0.0;} -} - -void G4Colour::SetAlpha (G4double a) -{ - alpha = a; - if( alpha > 1.0 ){alpha = 1.0;} if( alpha < 0.0 ){alpha = 0.0;} -} +void G4Colour::SetRed (G4double r) {red = clamp(r);} +void G4Colour::SetGreen (G4double gr) {green = clamp(gr);} +void G4Colour::SetBlue (G4double b) {blue = clamp(b);} +void G4Colour::SetAlpha (G4double a) {alpha = clamp(a);} +// clang-format on G4Colour::operator G4ThreeVector() { return G4ThreeVector(red,green,blue); @@ -141,6 +121,7 @@ void G4Colour::InitialiseColourMap() fInitColourMap = true; + // clang-format off // Standard colours AddToMap("white", G4Colour::White()); AddToMap("grey", G4Colour::Grey()); @@ -153,6 +134,7 @@ void G4Colour::InitialiseColourMap() AddToMap("cyan", G4Colour::Cyan()); AddToMap("magenta", G4Colour::Magenta()); AddToMap("yellow", G4Colour::Yellow()); + // clang-format off } G4bool G4Colour::GetColour(const G4String& key, G4Colour& result) diff --git a/source/graphics_reps/src/G4VisAttributes.cc b/source/graphics_reps/src/G4VisAttributes.cc index c34b270354..e71014051a 100644 --- a/source/graphics_reps/src/G4VisAttributes.cc +++ b/source/graphics_reps/src/G4VisAttributes.cc @@ -274,6 +274,7 @@ std::ostream& operator << (std::ostream& os, const G4VisAttributes& a) G4bool G4VisAttributes::operator != (const G4VisAttributes& a) const { + // clang-format off if ( (fVisible != a.fVisible) || (fDaughtersInvisible != a.fDaughtersInvisible) || @@ -289,6 +290,7 @@ G4bool G4VisAttributes::operator != (const G4VisAttributes& a) const { (fAttDefs != a.fAttDefs) ) return true; + // clang-format on if (fForceDrawingStyle) { if (fForcedStyle != a.fForcedStyle) return true; diff --git a/source/graphics_reps/src/G4VisExtent.cc b/source/graphics_reps/src/G4VisExtent.cc index c814c9debf..aebd2fb682 100644 --- a/source/graphics_reps/src/G4VisExtent.cc +++ b/source/graphics_reps/src/G4VisExtent.cc @@ -101,9 +101,6 @@ G4bool G4VisExtent::operator != (const G4VisExtent& e) const { G4VisExtent& G4VisExtent::Transform (const G4Transform3D& transform) { - const auto& rotation = transform.getRotation(); - const auto& translation = transform.getTranslation(); - G4ThreeVector nnn(fXmin,fYmin,fZmin); G4ThreeVector nnx(fXmin,fYmin,fZmax); G4ThreeVector nxn(fXmin,fYmax,fZmin); @@ -113,14 +110,22 @@ G4VisExtent& G4VisExtent::Transform (const G4Transform3D& transform) G4ThreeVector xxn(fXmax,fYmax,fZmin); G4ThreeVector xxx(fXmax,fYmax,fZmax); - nnn.transform(rotation); nnn += translation; - nnx.transform(rotation); nnx += translation; - nxn.transform(rotation); nxn += translation; - nxx.transform(rotation); nxx += translation; - xnn.transform(rotation); xnn += translation; - xnx.transform(rotation); xnx += translation; - xxn.transform(rotation); xxn += translation; - xxx.transform(rotation); xxx += translation; + const auto& rotation = transform.getRotation(); + const auto& translation = transform.getTranslation(); + + auto apply_transform = [&rotation, &translation](G4ThreeVector& v) { + v.transform(rotation); + v += translation; + }; + + apply_transform(nnn); + apply_transform(nnx); + apply_transform(nxn); + apply_transform(nxx); + apply_transform(xnn); + apply_transform(xnx); + apply_transform(xxn); + apply_transform(xxx); fXmin = DBL_MAX; fYmin = DBL_MAX; diff --git a/source/intercoms/History b/source/intercoms/History index 6b6eeca876..a9fe73e2ad 100644 --- a/source/intercoms/History +++ b/source/intercoms/History @@ -6,6 +6,16 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-04-11 Makoto Asai (intercoms-V11-03-00) +- G4UImanager, G4UIcontrolMessenger + - Introducing "@@" keyword that can be placed in any UI command that takes + a macro file name. It creates a temporal macro file with following commands + until /control/endRecord command comes. This “@@” mechanism works recursively. + - If a file name is enclosed in a pair of "@", that macro file is created. + - This mechanism works for both interactive mode and batch mode. When used in + interactive mode with Qt GUI, you can use up-arrow, tab-key and clickable + menu in left-side bar to complement a command. + ## 2024-07-29 John Allison (intercoms-V11-02-07) - G4UImanager::ApplyCommand: - Replace `isMaster` by `G4Threading::IsMasterThread()`. diff --git a/source/intercoms/include/G4UImanager.hh b/source/intercoms/include/G4UImanager.hh index 0f15e1c657..62011ff324 100644 --- a/source/intercoms/include/G4UImanager.hh +++ b/source/intercoms/include/G4UImanager.hh @@ -244,6 +244,11 @@ class G4UImanager : public G4VStateDependent inline bool IsLastCommandOutputTreated() { return fLastCommandOutputTreated; } inline void SetLastCommandOutputTreated() { fLastCommandOutputTreated = true; } + void StartRecording(G4String fn, G4bool ifAppend, + G4bool ifTemp=false, G4String assocCmd="**NOCMD**"); + void RecordCommand(const G4String& aCommand); + G4int EndRecording(); + protected: G4UImanager(); @@ -293,6 +298,12 @@ class G4UImanager : public G4VStateDependent G4int lastRC = 0; G4bool fLastCommandOutputTreated = true; + + G4int fRecordDepth = -1; + std::vector fRecordFile; + std::vector> fRecordFileName; + std::vector fAccosiatedCommand; + }; #endif diff --git a/source/intercoms/include/private/G4UIcontrolMessenger.hh b/source/intercoms/include/private/G4UIcontrolMessenger.hh index c71accb316..18c3724ebf 100644 --- a/source/intercoms/include/private/G4UIcontrolMessenger.hh +++ b/source/intercoms/include/private/G4UIcontrolMessenger.hh @@ -62,6 +62,8 @@ // /control/ifInteractive // /control/doifBatch // /control/doifInteractive +// /control/recordToMacro +// /control/endRecord // Author: Makoto Asai, SLAC - 2001 // -------------------------------------------------------------------- @@ -119,6 +121,8 @@ class G4UIcontrolMessenger : public G4UImessenger G4UIcmdWithAString* ifInteractiveCommand = nullptr; G4UIcmdWithAString* doifBatchCommand = nullptr; G4UIcmdWithAString* doifInteractiveCommand = nullptr; + G4UIcommand* recordToMacroCommand = nullptr; + G4UIcmdWithoutParameter* endRecordCommand = nullptr; }; #endif diff --git a/source/intercoms/src/G4UIcontrolMessenger.cc b/source/intercoms/src/G4UIcontrolMessenger.cc index fffb87781f..1ada6c0fb2 100644 --- a/source/intercoms/src/G4UIcontrolMessenger.cc +++ b/source/intercoms/src/G4UIcontrolMessenger.cc @@ -344,6 +344,24 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() "Execute a UI command if program is running in interactive mode."); doifInteractiveCommand->SetParameterName("UIcommand", false); doifInteractiveCommand->SetToBeBroadcasted(false); + + recordToMacroCommand = new G4UIcommand("/control/recordToMacro",this); + recordToMacroCommand->SetGuidance( + "Record the following UI command(s) into a macro file instead of executing it/them."); + recordToMacroCommand->SetGuidance( + "Recording lasts until a command \"/control/endRecord\" comes."); + recordToMacroCommand->SetGuidance( + "if is set to true (default false), commands are appended to the existing file."); + auto* recordToMacroCommandParam = new G4UIparameter("fileName",'s',false); + recordToMacroCommand->SetParameter(recordToMacroCommandParam); + recordToMacroCommandParam = new G4UIparameter("ifAppend",'b',true); + recordToMacroCommandParam->SetDefaultValue(false); + recordToMacroCommand->SetParameter(recordToMacroCommandParam); + recordToMacroCommand->SetToBeBroadcasted(false); + + endRecordCommand = new G4UIcmdWithoutParameter("/control/endRecord", this); + endRecordCommand->SetGuidance("Stop recording to a macro"); + endRecordCommand->SetToBeBroadcasted(false); } // -------------------------------------------------------------------- @@ -381,6 +399,8 @@ G4UIcontrolMessenger::~G4UIcontrolMessenger() delete ifInteractiveCommand; delete doifBatchCommand; delete doifInteractiveCommand; + delete recordToMacroCommand; + delete endRecordCommand; delete controlDirectory; } @@ -701,6 +721,15 @@ void G4UIcontrolMessenger::SetNewValue(G4UIcommand* command, G4String newValue) UI->ApplyCommand(newValue); } } + if (command == recordToMacroCommand) { + G4Tokenizer next(newValue); + const G4String& fn = next(); + G4bool ifAppend = StoB(next()); + UI->StartRecording(fn,ifAppend); + } + if (command == endRecordCommand) { + UI->ApplyCommand("/control/endRecord"); + } } // -------------------------------------------------------------------- diff --git a/source/intercoms/src/G4UImanager.cc b/source/intercoms/src/G4UImanager.cc index e412e763bd..15df1bc176 100644 --- a/source/intercoms/src/G4UImanager.cc +++ b/source/intercoms/src/G4UImanager.cc @@ -43,10 +43,12 @@ #include "G4UIcontrolMessenger.hh" #include "G4UIsession.hh" #include "G4UnitsMessenger.hh" +#include "G4Filesystem.hh" #include "G4ios.hh" #include #include +#include G4bool G4UImanager::doublePrecisionStr = false; G4int G4UImanager::igThreadID = -1; @@ -445,9 +447,14 @@ G4int G4UImanager::ApplyCommand(const G4String& aCmd) // -------------------------------------------------------------------- G4int G4UImanager::ApplyCommand(const char* aCmd) { - const G4String& aCommand = SolveAlias(aCmd); - if (aCommand.empty()) { - return fAliasNotFound; + G4String aCommand = aCmd; + if(fRecordDepth<0) + { + // while recording a command to a macro file, skip solving and record the command as-is + aCommand = SolveAlias(aCmd); + if (aCommand.empty()) { + return fAliasNotFound; + } } if (verboseLevel != 0) { if (G4Threading::IsMasterThread()) { @@ -458,6 +465,36 @@ G4int G4UImanager::ApplyCommand(const char* aCmd) G4String commandString; G4String commandParameter; + std::size_t iAt = aCommand.find('@'); + if (iAt != std::string::npos) { + G4String commandStr1 = aCommand.substr(0,iAt); + G4String commandStr2 = aCommand.substr(iAt+1,aCommand.length() - (iAt + 1)); + std::size_t iAt2 = commandStr2.find('@'); + G4String tmpFileName; + G4bool tmpFile = false; + if (iAt2 != std::string::npos) { + if(iAt2 == 0) { + // Two '@'s are connected. temporal file will be created + tmpFileName = "tmptmp_"; + tmpFileName += G4UIcommand::ConvertToString(fRecordDepth+1); + tmpFileName += ".tmpmac"; + tmpFile = true; + } else { + tmpFileName = commandStr2.substr(0,iAt2); + } + } else { + return fAliasNotFound; + } + G4String commandStr3 = commandStr2.substr(iAt2+1,commandStr2.length()-(iAt2+1)); + G4String revisedCommand = commandStr1; + revisedCommand += " "; + revisedCommand += tmpFileName; + revisedCommand += " "; + revisedCommand += commandStr3; + StartRecording(tmpFileName,false,tmpFile,revisedCommand); + return fCommandSucceeded; + } + std::size_t i = aCommand.find(' '); if (i != std::string::npos) { commandString = aCommand.substr(0, i); @@ -527,6 +564,16 @@ G4int G4UImanager::ApplyCommand(const char* aCmd) } histVec.push_back(aCommand); + if(fRecordDepth>=0) { + if(aCommand == "/control/endRecord") { + EndRecording(); + return fCommandSucceeded; + } else if(commandString != "/control/recordToMacro") { + RecordCommand(aCommand); + return fCommandSucceeded; + } + } + targetCommand->ResetFailure(); G4int commandFailureCode = targetCommand->DoIt(commandParameter); if (commandFailureCode == 0) { @@ -877,6 +924,7 @@ void G4UImanager::SetThreadIgnoreInit(G4bool flg) threadCout->SetIgnoreInit(flg); } +// -------------------------------------------------------------------- G4UIsession* G4UImanager::GetBaseSession() const { // There may be no session - pure batch mode (session == nullptr) @@ -896,3 +944,59 @@ G4UIsession* G4UImanager::GetBaseSession() const } return baseSession; } + +// -------------------------------------------------------------------- +void G4UImanager::StartRecording(G4String fn, G4bool ifAppend, G4bool ifTemp, G4String assocCmd) +{ + fRecordDepth++; + fRecordFileName.push_back(std::pair(fn,ifTemp)); + fAccosiatedCommand.push_back(assocCmd); + G4cout << "G4UImanager::StartRecording [" << fRecordDepth << "] " << fn << G4endl; + auto mode = std::ios_base::out; + if(ifAppend) mode = std::ios_base::app; + auto rf = new std::ofstream; + rf->open(fn,mode); + fRecordFile.push_back(rf); +} + +// -------------------------------------------------------------------- +void G4UImanager::RecordCommand(const G4String& aCommand) +{ + *(fRecordFile[fRecordDepth]) << aCommand << G4endl; +} + +// -------------------------------------------------------------------- +G4int G4UImanager::EndRecording() +{ + G4int retVal = fCommandSucceeded; + fRecordFile[fRecordDepth]->close(); + delete fRecordFile[fRecordDepth]; + fRecordFile.pop_back(); + G4String assocCmd = fAccosiatedCommand[fRecordDepth]; + fAccosiatedCommand.pop_back(); + G4cout << "G4UImanager::EndRecording [" << fRecordDepth << "] " + << fRecordFileName[fRecordDepth].first << G4endl; + fRecordDepth--; + if(assocCmd!="**NOCMD**") { + retVal = ApplyCommand(assocCmd); + } + if(fRecordDepth<0) { + while(fRecordFileName.size()>0) { + G4String fn = fRecordFileName.back().first; + G4bool ifTemp = fRecordFileName.back().second; + fRecordFileName.pop_back(); + if(ifTemp) { + std::error_code ec; + G4bool res = G4fs::remove(fn.c_str(), ec); + if(!res) { + G4ExceptionDescription ed; + ed << "Error removing temporary macro file " << fn << " : " + << ec.message(); + G4Exception("G4UImanager::EndRecording()", "UIMAN0801", JustWarning, ed); + } + } + } + } + return retVal; +} + diff --git a/source/interfaces/History b/source/interfaces/History index 7f6088a759..71770392a3 100644 --- a/source/interfaces/History +++ b/source/interfaces/History @@ -6,6 +6,51 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-12 Andrea Barresi (interfaces-V11-03-05) +- G4UIQt: + - Improved pick info window size + +## 2025-04-15 John Allison (interfaces-V11-03-04) +- G4UIQt: + - Simplify and improve touchable dump. + - Uses QScrollArea instead of QMessage. + +## 2025-03-22 John Allison (interfaces-V11-03-03) +- G4UIQt: + - Thanks, Igor - I now understand lambda's better. + - Simplify with another use of capture by value (please test on MSVC). + - Tidy changes in previous tag. + +## 2025-03-20 Igor Semeniouk (interfaces-V11-03-02) +- G4UIQt: Fix compilation problem with Windows MSVC compiler + - replace explicit variables lists with default capture in lambda's + +## 2025-03-06 John Allison (interfaces-V11-03-01) +- G4UIQt: + - Introduce Time Window tab. + - This exploits generic time windowing recently introduced in modeling an + management. + - Try it with example B1. Hit “Prepare”, then “Go”. It is more spectacular + if you prepare, say, 100 events. + - However, it doesn’t work with OGL in Qt6. (Try it with Qt5 if you can.) + TSG works fine with both Qt5 and Qt6, except line width is not implemented. + - I have noticed that in Qt5, mouse events seem to processed in strict order. + Values of boxes don’t get updated until the windowing is finished. But with + Qt6, events seem to be processed in parallel. Values in other boxes are + continuously updated during time evolution. How do they do that? Is each + slot executed on a different thread? This could cause the problem with OGL, + but I don’t have sufficient knowledge of Qt protocols. + - Change "bar" to "toolbar" to avoid conflict with G4PhysicalConstants. + +## 2025-01-06 John Allison (interfaces-V11-03-00) +- Co-works: visman-V11-03-00, modeling-V11-03-00, opengl-V11-03-00, + visQt3D-V11-03-00, vis_toolssg-V11-03-00, openinventor-V11-03-00, + greps-V11-03-00. +- G4UIQt: + - Re-instate the transparency slider (see lengthy explanation in + visualization/management/History). + - Tidy. + ## 2024-10-25 John Allison (interfaces-V11-02-10) - G4UIQt.cc: - G4UIQt::FilterOutput(): Fix compilation error, see Bug Report 2633. diff --git a/source/interfaces/implementation/include/G4UIQt.hh b/source/interfaces/implementation/include/G4UIQt.hh index 029c86f374..90015bf953 100644 --- a/source/interfaces/implementation/include/G4UIQt.hh +++ b/source/interfaces/implementation/include/G4UIQt.hh @@ -44,6 +44,7 @@ class QLineEdit; class G4UIsession; class QListWidget; class QTreeWidgetItem; +class QSlider; class QTextEdit; class QTextBrowser; class QLabel; @@ -252,7 +253,7 @@ public: G4int ReceiveG4cerr(const G4String&) override; // G4String GetCommand(Widget); - private: +private: void SecondaryLoop(const G4String&); // a VIRER void CreateHelpWidget(); void InitHelpTreeAndVisParametersWidget(); @@ -279,6 +280,9 @@ public: void SceneTreeItemDoubleClicked(QTreeWidgetItem*); void SceneTreeItemExpanded(QTreeWidgetItem*); void SceneTreeItemCollapsed(QTreeWidgetItem*); + void SliderValueChanged(G4int value); + void SliderReleased(); + void SliderRadioButtonClicked(G4int buttonNo); // Class for trapping special mouse events on new scene tree struct NewSceneTreeItemTreeWidget: public QTreeWidget { void mousePressEvent(QMouseEvent*) override; @@ -302,6 +306,7 @@ public: #endif QWidget* CreateVisParametersTBWidget(); QWidget* CreateHelpTBWidget(); + QWidget* CreateTimeWindowWidget(); G4UIDockWidget* CreateCoutTBWidget(); QWidget* CreateHistoryTBWidget(); G4UIDockWidget* CreateUITabWidget(); @@ -339,12 +344,15 @@ public: QListWidget* fHistoryTBTableList; QTreeWidget* fHelpTreeWidget; QWidget* fHelpTBWidget; + QWidget* fTimeWindowWidget; QWidget* fHistoryTBWidget; G4UIDockWidget* fCoutDockWidget; G4UIDockWidget* fUIDockWidget; QWidget* fSceneTreeWidget; QWidget* fNewSceneTreeWidget; NewSceneTreeItemTreeWidget* fNewSceneTreeItemTreeWidget; + G4int fMaxPVDepth; + QSlider* fNewSceneTreeSlider; QWidget* fViewerPropertiesWidget; QWidget* fPickInfosWidget; QLineEdit* fHelpLine; diff --git a/source/interfaces/implementation/src/G4UIQt.cc b/source/interfaces/implementation/src/G4UIQt.cc index 6941b09623..db9e1bbcd9 100644 --- a/source/interfaces/implementation/src/G4UIQt.cc +++ b/source/interfaces/implementation/src/G4UIQt.cc @@ -41,6 +41,12 @@ #include "G4UIparameter.hh" #include "G4SceneTreeItem.hh" #include "G4AttCheck.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +#include +#include +#include #include #include @@ -56,8 +62,6 @@ #include #include #include - -#include #include #include #include @@ -82,6 +86,9 @@ #include #include +#include +#include +#include #include #include @@ -127,12 +134,15 @@ G4UIQt::G4UIQt(G4int argc, char** argv) fHistoryTBTableList(nullptr), fHelpTreeWidget(nullptr), fHelpTBWidget(nullptr), + fTimeWindowWidget(nullptr), fHistoryTBWidget(nullptr), fCoutDockWidget(nullptr), fUIDockWidget(nullptr), fSceneTreeWidget(nullptr), fNewSceneTreeWidget(nullptr), fNewSceneTreeItemTreeWidget(nullptr), + fMaxPVDepth(0), + fNewSceneTreeSlider(nullptr), fViewerPropertiesWidget(nullptr), fPickInfosWidget(nullptr), fHelpLine(nullptr), @@ -228,14 +238,6 @@ G4UIQt::G4UIQt(G4int argc, char** argv) fMainWindow->addDockWidget(Qt::LeftDockWidgetArea, CreateUITabWidget()); fMainWindow->addDockWidget(Qt::BottomDockWidgetArea, CreateCoutTBWidget()); - // Create the new scene tree stuff - fNewSceneTreeWidget = new QWidget; - fNewSceneTreeWidget->setStyleSheet ("padding: 0px "); - fNewSceneTreeWidget->setLayout(new QVBoxLayout); - fNewSceneTreeWidget->layout()->setContentsMargins(5,5,5,5); - fNewSceneTreeWidget->setWindowTitle("some name"/*QString(GetName().data())*/); - // Add it to the "old" fSceneTreeWidget - fSceneTreeWidget->layout()->addWidget(fNewSceneTreeWidget); CreateNewSceneTreeWidget(); // add defaults icons @@ -1459,40 +1461,90 @@ void G4UIQt::CreateIcons() namespace { G4SceneTreeItem* ConvertToG4SceneTreeItem(QTreeWidgetItem* item) { - auto qVariant = item->data(0, Qt::UserRole); - std::istringstream iss(qVariant.toString().toStdString()); - void* itemAddress; iss >> itemAddress; - return static_cast(itemAddress); + auto qVariant = item->data(0, Qt::UserRole); + std::istringstream iss(qVariant.toString().toStdString()); + void* itemAddress; iss >> itemAddress; + return static_cast(itemAddress); } QColor ConvertG4ColourToQColor(const G4Colour& g4Colour) { - return QColor((int)(g4Colour.GetRed()*255), - (int)(g4Colour.GetGreen()*255), - (int)(g4Colour.GetBlue()*255), - (int)(g4Colour.GetAlpha()*255)); + return QColor((int)(g4Colour.GetRed()*255), + (int)(g4Colour.GetGreen()*255), + (int)(g4Colour.GetBlue()*255), + (int)(g4Colour.GetAlpha()*255)); } G4Colour ConvertQColorToG4Colour(const QColor& qColor) { - return G4Color(qColor.red()/255., - qColor.green()/255., - qColor.blue()/255., - qColor.alpha()/255.); + return G4Color(qColor.red()/255., + qColor.green()/255., + qColor.blue()/255., + qColor.alpha()/255.); } + + // Some file-local variables + G4int thisSceneTreePVDepth = -1; + const G4int maxInherentSliderValue = 100; + G4double transparencyByDepthValue = 0.; + G4int transparencyByDepthOption = 1; } void G4UIQt::CreateNewSceneTreeWidget() { - auto vLayout = fNewSceneTreeWidget->layout(); - // reduce margins - vLayout->setContentsMargins(0,0,0,0); + fNewSceneTreeWidget = new QWidget; + fNewSceneTreeWidget->setStyleSheet ("padding: 0px "); + fNewSceneTreeWidget->setLayout(new QVBoxLayout); + fNewSceneTreeWidget->layout()->setContentsMargins(0,0,0,0); + fNewSceneTreeWidget->setWindowTitle("some name"/*QString(GetName().data())*/); + // Add it to the "old" fSceneTreeWidget + fSceneTreeWidget->layout()->addWidget(fNewSceneTreeWidget); + // Add scene tree fNewSceneTreeItemTreeWidget = new NewSceneTreeItemTreeWidget; fNewSceneTreeItemTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); - vLayout->addWidget(fNewSceneTreeItemTreeWidget); + fNewSceneTreeWidget->layout()->addWidget(fNewSceneTreeItemTreeWidget); + + // Add transparency slider (design borrowed from old scene tree in G4OpenGLQtViewer) + // Helper widgets + auto helpWidget = new QWidget(); + auto helpLayout = new QVBoxLayout(); + auto zero = new QLabel(); zero->setText("Show\nall"); + auto one = new QLabel(); one->setText("Hide\nall"); + auto depthWidget = new QWidget(); + auto showBox = new QWidget(depthWidget); + auto showBoxLayout = new QHBoxLayout(); + // Slider + fNewSceneTreeSlider = new QSlider(Qt::Horizontal); + fNewSceneTreeSlider->setMaximum(maxInherentSliderValue); + fNewSceneTreeSlider->setMinimum(0); + fNewSceneTreeSlider->setTickPosition(QSlider::TicksAbove); + fNewSceneTreeSlider->setTickInterval(10); + // Slider buttons + auto buttonBox = new QWidget(); + auto buttonBoxlayout = new QHBoxLayout(); + buttonBox->setLayout(buttonBoxlayout); + auto unwrapButtonWidget = new QRadioButton("Unwrap"); + unwrapButtonWidget->setChecked(true); // Initial state + auto fadeButtonWidget = new QRadioButton("Fade"); + auto xrayButtonWidget = new QRadioButton("X-ray"); + buttonBoxlayout->addWidget(unwrapButtonWidget); + buttonBoxlayout->addWidget(fadeButtonWidget); + buttonBoxlayout->addWidget(xrayButtonWidget); + buttonBoxlayout->setContentsMargins(0,0,0,0); + buttonBox->setLayout(buttonBoxlayout); + // Layout + showBoxLayout->setContentsMargins(0,0,0,0); + showBoxLayout->addWidget(zero); + showBoxLayout->addWidget(fNewSceneTreeSlider); + showBoxLayout->addWidget(one); + showBox->setLayout(showBoxLayout); + helpLayout->addWidget(showBox); + helpWidget->setLayout(helpLayout); + helpLayout->setContentsMargins(0,0,0,0); + helpLayout->addWidget(buttonBox); + fNewSceneTreeWidget->layout()->addWidget(helpWidget); - // A click on the item is handled here. // A click on the check box makes the volume visible/invisible connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemClicked, [&](QTreeWidgetItem* item){SceneTreeItemClicked(item);}); @@ -1505,8 +1557,22 @@ void G4UIQt::CreateNewSceneTreeWidget() [&](QTreeWidgetItem* item){SceneTreeItemExpanded(item);}); connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemCollapsed, [&](QTreeWidgetItem* item){SceneTreeItemCollapsed(item);}); + + // Connect the slider + connect(fNewSceneTreeSlider, &QSlider::valueChanged, + [&](int value){SliderValueChanged(value);}); + connect(fNewSceneTreeSlider, &QSlider::sliderReleased, + [&]{SliderReleased();}); + + // Connect the slider buttons + connect(unwrapButtonWidget, &QRadioButton::clicked, + [&]{SliderRadioButtonClicked(1);}); // Unwrap + connect(fadeButtonWidget, &QRadioButton::clicked, + [&]{SliderRadioButtonClicked(2);}); // Fade + connect(xrayButtonWidget, &QRadioButton::clicked, + [&]{SliderRadioButtonClicked(3);}); // X-ray } - + void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root) { // G4debug << "\nG4UIQt::UpdateSceneTree: scene tree summary\n"; @@ -1517,6 +1583,7 @@ void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root) // Clear the existing GUI-side tree fNewSceneTreeItemTreeWidget->clear(); // (I think this deletes everything - the top level items and their children.) + fMaxPVDepth = 0; // Build a new GUI-side tree fNewSceneTreeItemTreeWidget->setHeaderLabel (root.GetDescription().c_str()); @@ -1553,6 +1620,7 @@ void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root) item->setExpanded(model.IsExpanded()); if (model.GetType() == G4SceneTreeItem::pvmodel) { + thisSceneTreePVDepth = -1; // First item is the model - touchables hang from it BuildPVQTree(model,item); } } @@ -1561,6 +1629,8 @@ void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root) // Build Physical Volume tree of touchables void G4UIQt::BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwItem) { + if (fMaxPVDepth < thisSceneTreePVDepth) fMaxPVDepth = thisSceneTreePVDepth; + thisSceneTreePVDepth++; const auto& g4stChildren = g4stItem.GetChildren(); for (const auto& g4stChild: g4stChildren) { QStringList qStringList; @@ -1612,6 +1682,7 @@ void G4UIQt::BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwI // Continue recursively BuildPVQTree(g4stChild,newQTWItem); } + thisSceneTreePVDepth--; } void G4UIQt::SceneTreeItemClicked(QTreeWidgetItem* item) @@ -1664,7 +1735,8 @@ void G4UIQt::SceneTreeItemClicked(QTreeWidgetItem* item) msgBox.setText ("This action makes this volume and all descendants invisible." " To see descendants, right-click and select daughtersInvisible/false" - " and check visibility of descendants individually."); + " and check visibility of descendants individually. If this gets out" + " of hand, \"/vis/viewer/clearVisAttributesModifiers\" and start again."); msgBox.setInformativeText ("To suppress this message click \"Discard\" or \"Don't Save\""); msgBox.setStandardButtons(QMessageBox::Discard | QMessageBox::Ok); @@ -1735,6 +1807,41 @@ void G4UIQt::SceneTreeItemCollapsed(QTreeWidgetItem* item) } } +void G4UIQt::SliderValueChanged(G4int value) +{ + transparencyByDepthValue = value; + std::ostringstream oss; + oss << fMaxPVDepth*transparencyByDepthValue/maxInherentSliderValue + << ' ' << transparencyByDepthOption; + auto uiMan = G4UImanager::GetUIpointer(); + // Suppress command echoing during sliding + auto keepVerbose = uiMan->GetVerboseLevel(); + uiMan->SetVerboseLevel(0); + uiMan->ApplyCommand("/vis/viewer/set/transparencyByDepth " + oss.str()); + uiMan->SetVerboseLevel(keepVerbose); +} + +void G4UIQt::SliderReleased() +{ + transparencyByDepthValue = fNewSceneTreeSlider->value(); + std::ostringstream oss; + oss << fMaxPVDepth*transparencyByDepthValue/maxInherentSliderValue + << ' ' << transparencyByDepthOption; + auto uiMan = G4UImanager::GetUIpointer(); + // Don't suppress command echoing in this case + uiMan->ApplyCommand("/vis/viewer/set/transparencyByDepth " + oss.str()); +} + +void G4UIQt::SliderRadioButtonClicked(G4int buttonNo) { + transparencyByDepthOption = buttonNo; + std::ostringstream oss; + oss << fMaxPVDepth*transparencyByDepthValue/maxInherentSliderValue + << ' ' << transparencyByDepthOption; + auto uiMan = G4UImanager::GetUIpointer(); + // Don't suppress command echoing in this case + uiMan->ApplyCommand("/vis/viewer/set/transparencyByDepth " + oss.str()); +} + void G4UIQt::NewSceneTreeItemTreeWidget::mousePressEvent(QMouseEvent* ev) { #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) @@ -1871,27 +1978,29 @@ void G4UIQt::NewSceneTreeItemTreeWidget::ActWithoutParameter { // Special case: dump if (action == "dump") { - static G4bool wanted = true; - if (wanted) { - QMessageBox msgBox; - std::ostringstream oss; - oss << G4AttCheck(sceneTreeItem->GetAttValues(), sceneTreeItem->GetAttDefs()); - // Just the first 1000 characters, otherwise it spreads off screen - msgBox.setText((oss.str().substr(0,1000)+"...").c_str()); - msgBox.setInformativeText - ("To suppress this message click \"Discard\" or \"Don't Save\"." - "\nTo get a complete dump to session output click \"Ok\"," - "\nElse click \"Close\"."); - msgBox.setStandardButtons - (QMessageBox::Discard | QMessageBox::Close | QMessageBox::Ok); - msgBox.setDefaultButton(QMessageBox::Ok); - auto result = msgBox.exec(); - if (result == QMessageBox::Discard) { - wanted = false; - } else if (result == QMessageBox::Close) { - return; - } - } + + auto widget = new QWidget; + widget->setWindowTitle(sceneTreeItem->GetDescription().c_str()); + auto layout = new QVBoxLayout; + widget->setLayout(layout); + + auto label = new QLabel; + label->setAlignment(Qt::AlignHCenter); + std::ostringstream oss; + oss << "" << sceneTreeItem->GetPVPath() << "
Full dump printed to G4cout
"; + label->setText(oss.str().c_str()); + label->setTextFormat(Qt::RichText); + layout->addWidget(label); + + auto scrollArea = new QScrollArea; + auto content = new QLabel; + std::ostringstream oss1; + oss1 << G4AttCheck(sceneTreeItem->GetAttValues(), sceneTreeItem->GetAttDefs()); + content->setText(oss1.str().c_str()); + scrollArea->setWidget(content); + layout->addWidget(scrollArea); + + widget->show(); } auto uiMan = G4UImanager::GetUIpointer(); uiMan->ApplyCommand("/vis/set/touchable" + sceneTreeItem->GetPVPath()); @@ -2023,6 +2132,579 @@ QWidget* G4UIQt::CreateHelpTBWidget() return fHelpTBWidget; } +/** Create widget to set and manipulate time window and other effects + */ +namespace { // For use in CreateTimeWindowWidget() + + auto cm2ns = [](double scale) // lambda function for use below (with severe rounding) + {return std::pow(10., std::floor(std::log10((scale*cm/c_light)/ns)));}; + + // Some values depend on the scale of the detector + double detectorScale = 100.; // cm + double detectorTimescaleNano = cm2ns(detectorScale); // ns (correponding time, rounded) + + // Time slice interval + double timeSliceInterval = detectorTimescaleNano/100; // ns + double timeSliceIntervalSpinBoxSingleStep = detectorTimescaleNano/100.; // ns + double timeSliceIntervalSpinBoxMaximum = detectorTimescaleNano*100; // ns + + // Duration of time window + double duration = detectorTimescaleNano/10; // ns + const double durationSpinBoxSingleStep = detectorTimescaleNano/10.; // ns + const double durationSpinBoxMaximum = detectorTimescaleNano*1000; // ns + + // Parameters of time evolution feature + double startTime = 0.; // ns + double timeSliderValue = 0.; // ns + double timeSliderMinimum = 0.; // ns + double timeSliderMaximum = detectorTimescaleNano; // ns + double timeSliderIncrement = detectorTimescaleNano/100; // ns + double timeSliderIncrementSpinBoxSingleStep = detectorTimescaleNano/100.; // ns + double timeSliderIncrementSpinBoxMaximum = detectorTimescaleNano; // ns + + // Other spin boxes + const double spinBoxSingleStep = detectorTimescaleNano/10.; // ns + const double spinBoxMaximum = detectorTimescaleNano*1000; // ns +} + +QWidget* G4UIQt::CreateTimeWindowWidget() +{ + // Layout + const int topMargins = 5; // Margin around layouts enclosed in top widget (the panels) + const int panelLeftRightMargins = 5; // Margin around layouts enclosed in the panels + const int panelTopBottomMargins = 0; // Margin around layouts enclosed in the panels + + // Top level widget + fTimeWindowWidget = new QWidget; + auto topLayout = new QVBoxLayout(fTimeWindowWidget); + topLayout->setContentsMargins(topMargins, topMargins, topMargins, topMargins); + + // Some spin boxes with names in the top space, so we can change value + auto timeSliceIntervalSpinBox = new QDoubleSpinBox; + auto durationSpinBox = new QDoubleSpinBox; + auto timeSliderIncrementSpinBox = new QDoubleSpinBox; + auto timeSliderMinSpinBox = new QDoubleSpinBox; + auto timeSliderMaxSpinBox = new QDoubleSpinBox; + auto timeSliderValueSpinBox = new QDoubleSpinBox; + + { // Header + auto header = new QLabel; + header->setAlignment(Qt::AlignHCenter); + header->setText("Time window control"); + topLayout->addWidget(header); + } // Header + + // Prepare Events Panel + auto prepareEventsPanel = new QLabel; + prepareEventsPanel->setFrameStyle(QFrame::Panel); + auto prepareEventsLayout = new QVBoxLayout(prepareEventsPanel); + prepareEventsLayout->setContentsMargins + (panelLeftRightMargins, panelTopBottomMargins, panelLeftRightMargins, panelTopBottomMargins); + topLayout->addWidget(prepareEventsPanel); + topLayout->setStretchFactor(prepareEventsPanel, 10); + + { // Place stuff in the Prepare Events Panel + + static int nEvents = 1; + + { // Header + auto prepareTitle = new QLabel; + prepareTitle->setFixedHeight(20); + prepareTitle->setAlignment(Qt::AlignHCenter); + prepareTitle->setText("Prepare event(s)"); + prepareEventsLayout->addWidget(prepareTitle); + } // Header + + { // Detector scale + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Detector scale"); + layout->addWidget(label); + auto spinBox = new QDoubleSpinBox; + spinBox->setRange(0., detectorScale*1000); + spinBox->setValue(detectorScale); + spinBox->setSingleStep(detectorScale/10.); + spinBox->setSuffix(" cm"); + spinBox->setToolTip + ("This is rough guidance for the default values of" + "\nsome of the parameters below, so that they better" + "\ncorrespond to the physical dimensions of the detector." + "\nIt sets the default values, but you can still make" + "\nyour own adjustments."); + layout->addWidget(spinBox); + prepareEventsLayout->addWidget(widget); + connect(spinBox, QOverload::of(&QDoubleSpinBox::valueChanged), [=](double scale){ + detectorTimescaleNano = cm2ns(scale); + + timeSliceInterval = detectorTimescaleNano/100; // ns + timeSliceIntervalSpinBox->setRange(0., timeSliceIntervalSpinBoxMaximum); // ns + timeSliceIntervalSpinBox->setSingleStep(timeSliceInterval); // ns + timeSliceIntervalSpinBox->setValue(timeSliceInterval); // ns + + duration = detectorTimescaleNano/10.; + durationSpinBox->setRange(0., detectorTimescaleNano*100.); + durationSpinBox->setSingleStep(detectorTimescaleNano/100.); + durationSpinBox->setValue(duration); + + timeSliderIncrementSpinBox->setRange(0., detectorTimescaleNano/100.); + timeSliderIncrementSpinBox->setValue(detectorTimescaleNano/100.); + + timeSliderMaxSpinBox->setRange(0., detectorTimescaleNano); + timeSliderMaxSpinBox->setSingleStep(detectorTimescaleNano/10.); + timeSliderMaxSpinBox->setValue(detectorTimescaleNano); + }); + } // Detector scale + + { // Events box + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Number of events"); + layout->addWidget(label); + auto spinBox = new QSpinBox; + spinBox->setRange(1, 9999); + layout->addWidget(spinBox); + prepareEventsLayout->addWidget(widget); + connect(spinBox, QOverload::of(&QSpinBox::valueChanged), [](int n){ + nEvents = n; + }); + } // Events box + + { // Time slice interval (the trajectory slices) + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Time slice interval"); + layout->addWidget(label); + timeSliceIntervalSpinBox->setRange(0., timeSliceIntervalSpinBoxMaximum); + timeSliceIntervalSpinBox->setValue(timeSliceInterval); + timeSliceIntervalSpinBox->setSingleStep(timeSliceIntervalSpinBoxSingleStep); + timeSliceIntervalSpinBox->setDecimals(3); + timeSliceIntervalSpinBox->setSuffix(" ns"); + timeSliceIntervalSpinBox->setToolTip + ("This should be about 1/100 of the time taken for" + "\nlight to travel across the field of view."); + layout->addWidget(timeSliceIntervalSpinBox); + prepareEventsLayout->addWidget(widget); + connect(timeSliceIntervalSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double dt){ + timeSliceInterval = dt; + }); + + } // Time slice interval (the trajectory slices) + + { // Prepare and and display event(s) + auto button = new QPushButton("Prepare"); + prepareEventsLayout->addWidget(button); + button->setToolTip + ("Or do it yourself. You will need:" + "\n /vis/scene/add/trajectories rich" + "\nCreate a trajectories model, then" + "\n /vis/modeling/trajectories//default/setTimeSliceInterval 0.01 ns" + "\nthen set colours, step points, linewidth, etc., as desired," + "\nand /run/beamOn one or more events." + ); + connect(button, &QPushButton::clicked, this, [](){ + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/scene/add/trajectories rich"); + static G4int modelNo = 0; // Seems we have to create a new model every time + G4String modelName = "fromGUI-" + G4UIcommand::ConvertToString(modelNo++); + ui->ApplyCommand + ("/vis/modeling/trajectories/create/drawByCharge " + modelName); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setTimeSliceInterval " + + G4UIcommand::ConvertToString(timeSliceInterval) + " ns "); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setLineWidth 5"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setDrawStepPts true"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setStepPtsSize 10"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setStepPtsFillStyle filled"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setDrawAuxPts true"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setAuxPtsSize 10"); + ui->ApplyCommand + ("/vis/modeling/trajectories/" + modelName + "/default/setAuxPtsFillStyle filled"); + ui->ApplyCommand + ("/run/beamOn " + G4UIcommand::ConvertToString(nEvents)); + }); + } // Prepare and and display event(s) + + { // Blank widget with non-zero stretch (squashes others up) + auto spacer = new QWidget; + prepareEventsLayout->addWidget(spacer); + prepareEventsLayout->setStretchFactor(spacer, 1); + } // Blank widget with non-zero stretch (squashes others up) + + } // Place stuff in the Prepare Events Panel + + // Time Parameters Panel + auto timeParametersPanel = new QLabel; + timeParametersPanel->setFrameStyle(QFrame::Panel); + auto timeParametersLayout = new QVBoxLayout(timeParametersPanel); + timeParametersLayout->setContentsMargins + (panelLeftRightMargins, panelTopBottomMargins, panelLeftRightMargins, panelTopBottomMargins); + topLayout->addWidget(timeParametersPanel); + topLayout->setStretchFactor(timeParametersPanel, 10); + auto startTimeSpinBox = new QDoubleSpinBox; + + { // Place stuff in the Time Parameters Panel + + { // Header + auto header = new QLabel; + header->setFixedHeight(20); + header->setAlignment(Qt::AlignHCenter); + header->setText("Time parameters"); + timeParametersLayout->addWidget(header); + } // Header + + { // Start time + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Start time"); + layout->addWidget(label); + startTimeSpinBox->setRange(0., spinBoxMaximum); + startTimeSpinBox->setSingleStep(spinBoxSingleStep); + startTimeSpinBox->setDecimals(3); + startTimeSpinBox->setSuffix(" ns"); + startTimeSpinBox->setToolTip("Start of time window"); + layout->addWidget(startTimeSpinBox); + timeParametersLayout->addWidget(widget); + connect(startTimeSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double st){ + startTime = st; + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + }); + } // Start time + + { // Duration + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Duration"); + layout->addWidget(label); + durationSpinBox->setRange(0., durationSpinBoxMaximum); + durationSpinBox->setValue(duration); + durationSpinBox->setSingleStep(durationSpinBoxSingleStep); + durationSpinBox->setDecimals(3); + durationSpinBox->setSuffix(" ns"); + durationSpinBox->setToolTip + ("Duration of time window, typically" + "\n10x the time slice interval."); + layout->addWidget(durationSpinBox); + timeParametersLayout->addWidget(widget); + connect(durationSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double d){ + duration = d; + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + }); + } // Duration + + { // Fade factor + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Fade factor"); + layout->addWidget(label); + auto spinBox = new QDoubleSpinBox; + spinBox->setRange(0., 1.); + spinBox->setValue(1.); + spinBox->setSingleStep(spinBoxSingleStep); + spinBox->setToolTip + ("Factor by which time-sliced objects fade over" + "\nthe duration of the window, giving an impression" + "\nof direction of motion."); + layout->addWidget(spinBox); + timeParametersLayout->addWidget(widget); + connect(spinBox, QOverload::of(&QDoubleSpinBox::valueChanged), [](double f){ + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/fadeFactor " + + G4UIcommand::ConvertToString(f)); + }); + } // Duration + + { // Display head time + auto widget = new QRadioButton("Display head time"); + widget->setChecked(false); + widget->setToolTip + ("Displays the time corresponding to end/head of" + "\nthe time window. The font size, position and" + "\ncolour can be set with /vis/viewer/set/timeWindow/"); + timeParametersLayout->addWidget(widget); + connect(widget, &QRadioButton::clicked, [=](){ + G4String checked = "false"; + if (widget->isChecked()) checked = "true"; + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/displayHeadTime " + checked); + }); + } // Display head time + + { // Apply + auto button = new QPushButton("Apply"); + button->setToolTip("Applies the above settings"); + timeParametersLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [](){ + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + }); + } // Apply + + { // Blank widget with non-zero stretch (squashes others up) + auto spacer = new QWidget; + timeParametersLayout->addWidget(spacer); + timeParametersLayout->setStretchFactor(spacer, 1); + } // Blank widget with non-zero stretch (squashes others up) + + } // Place stuff in the Time Parameters Panel + + // Time Evolution Panel + auto timeEvolutionPanel = new QLabel; + timeEvolutionPanel->setFrameStyle(QFrame::Panel); + auto timeEvolutionLayout = new QVBoxLayout(timeEvolutionPanel); + timeEvolutionLayout->setContentsMargins + (panelLeftRightMargins, panelTopBottomMargins, panelLeftRightMargins, panelTopBottomMargins); + topLayout->addWidget(timeEvolutionPanel); + topLayout->setStretchFactor(timeEvolutionPanel, 15); + + { // Place stuff in the Time Evolution Panel + + const int sliderIntMaximum = 1000; + const int sliderIntTickInterval = 100; + static int sliderIntValue = 0; + static double desiredfps = 10.; // fps + static G4bool stopRun = false; + auto timeEvolutionSlider = new QSlider(Qt::Horizontal); + + { // Header + auto header = new QLabel; + header->setFixedHeight(20); + header->setAlignment(Qt::AlignHCenter); + header->setText("Time evolution"); + timeEvolutionLayout->addWidget(header); + } // Header + + { // Time slider increment + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Increment"); + layout->addWidget(label); + timeSliderIncrementSpinBox->setRange(0., timeSliderIncrementSpinBoxMaximum); + timeSliderIncrementSpinBox->setValue(timeSliderIncrement); + timeSliderIncrementSpinBox->setSingleStep(timeSliderIncrementSpinBoxSingleStep); + timeSliderIncrementSpinBox->setDecimals(3); + timeSliderIncrementSpinBox->setSuffix(" ns"); + timeSliderIncrementSpinBox->setToolTip("Time step of the time evolution sequence"); + layout->addWidget(timeSliderIncrementSpinBox); + timeEvolutionLayout->addWidget(widget); + connect(timeSliderIncrementSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double inc){ + timeSliderIncrement = inc; + }); + } // Slider increment + + { // Slider labels + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + timeEvolutionLayout->addWidget(widget); + auto label1 = new QLabel("min"); + label1->setAlignment(Qt::AlignBottom | Qt::AlignHCenter); + layout->addWidget(label1); + auto label2 = new QLabel("value"); + label2->setAlignment(Qt::AlignBottom | Qt::AlignHCenter); + layout->addWidget(label2); + auto label3 = new QLabel("max"); + label3->setAlignment(Qt::AlignBottom | Qt::AlignHCenter); + layout->addWidget(label3); + } // Slider labels + + { // Slider values + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + timeEvolutionLayout->addWidget(widget); + timeSliderMinSpinBox->setRange(0., spinBoxMaximum); + timeSliderMinSpinBox->setSingleStep(spinBoxSingleStep); + timeSliderMinSpinBox->setDecimals(3); + timeSliderMinSpinBox->setSuffix(" ns"); + layout->addWidget(timeSliderMinSpinBox); + connect(timeSliderMinSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double smin){ + timeSliderMinimum = smin; + }); + timeSliderValueSpinBox->setRange(0., spinBoxMaximum); + timeSliderValueSpinBox->setSingleStep(spinBoxSingleStep); + timeSliderValueSpinBox->setDecimals(3); + timeSliderValueSpinBox->setSuffix(" ns"); + layout->addWidget(timeSliderValueSpinBox); + connect(timeSliderValueSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double sv){ + timeSliderValue = sv; + }); + timeSliderMaxSpinBox->setRange(0., spinBoxMaximum); + timeSliderMaxSpinBox->setSingleStep(spinBoxSingleStep); + timeSliderMaxSpinBox->setValue(timeSliderMaximum); + timeSliderMaxSpinBox->setDecimals(3); + timeSliderMaxSpinBox->setSuffix(" ns"); + layout->addWidget(timeSliderMaxSpinBox); + connect(timeSliderMaxSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double smax){ + timeSliderMaximum = smax; + }); + } // Slider values + + { // Slider + timeEvolutionSlider->setMaximum(sliderIntMaximum); + timeEvolutionSlider->setMinimum(0); + timeEvolutionSlider->setTickPosition(QSlider::TicksAbove); + timeEvolutionSlider->setTickInterval(sliderIntTickInterval); + timeEvolutionSlider->setToolTip + ("Move time window. Click on a position or slide" + "\nwith middle button/3-finger pad gesture."); + timeEvolutionLayout->addWidget(timeEvolutionSlider); + connect(timeEvolutionSlider, &QSlider::valueChanged, [=](int value){ + sliderIntValue = value; + startTime = timeSliderMinimum + + sliderIntValue * (timeSliderMaximum - timeSliderMinimum) / sliderIntMaximum; + startTimeSpinBox->setValue(startTime); + timeSliderValueSpinBox->setValue(startTime); + auto ui = G4UImanager::GetUIpointer(); + // Suppress command echoing during sliding + auto keepVerbose = ui->GetVerboseLevel(); + ui->SetVerboseLevel(0); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + ui->SetVerboseLevel(keepVerbose); + }); + connect(timeEvolutionSlider, &QSlider::sliderReleased, [=](){ + sliderIntValue = timeEvolutionSlider->value(); + startTime = timeSliderMinimum + + sliderIntValue * (timeSliderMaximum - timeSliderMinimum) / sliderIntMaximum; + startTimeSpinBox->setValue(startTime); + timeSliderValueSpinBox->setValue(startTime); + auto ui = G4UImanager::GetUIpointer(); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + }); + connect(timeEvolutionSlider, &QSlider::sliderPressed, [=](){ + stopRun = true; + sliderIntValue = timeEvolutionSlider->value(); + startTime = timeSliderMinimum + + sliderIntValue * (timeSliderMaximum - timeSliderMinimum) / sliderIntMaximum; + startTimeSpinBox->setValue(startTime); + }); + } // Slider + + { // Desired frames per second + auto widget = new QWidget; + auto layout = new QHBoxLayout(widget); + layout->setContentsMargins(0,0,0,0); + auto label = new QLabel; + label->setText("Desired fps"); + layout->addWidget(label); + auto fpsSpinBox = new QDoubleSpinBox; + fpsSpinBox->setRange(1., 99.); + fpsSpinBox->setSingleStep(1.); + fpsSpinBox->setValue(10.); + fpsSpinBox->setSuffix(" fps"); + fpsSpinBox->setToolTip + ("Desired frames per second. Since re-rendering each" + "\nframe is CPU-intensive, this might not be achieved."); + layout->addWidget(fpsSpinBox); + timeEvolutionLayout->addWidget(widget); + connect(fpsSpinBox, QOverload::of(&QDoubleSpinBox::valueChanged), + [](double fps){ + desiredfps = fps; + }); + } // Desired frames per second + + { // Run + auto button = new QPushButton("Go"); + button->setToolTip("Run the time evolution sequence"); + timeEvolutionLayout->addWidget(button); + connect(button, &QPushButton::clicked, [=](){ + auto ui = G4UImanager::GetUIpointer(); + // Suppress command echoing during sliding + auto keepVerbose = ui->GetVerboseLevel(); + ui->SetVerboseLevel(0); + for (startTime = timeSliderMinimum; + startTime <= timeSliderMaximum; startTime += timeSliderIncrement) { + if (stopRun) break; + auto a = std::chrono::steady_clock::now(); + startTimeSpinBox->setValue(startTime); + timeSliderValueSpinBox->setValue(startTime); + sliderIntValue = sliderIntMaximum + * (startTime - timeSliderMinimum) / (timeSliderMaximum - timeSliderMinimum); + timeEvolutionSlider->setValue(sliderIntValue); + ui->ApplyCommand("/vis/viewer/set/timeWindow/startTime " + + G4UIcommand::ConvertToString(startTime) + " ns " + + G4UIcommand::ConvertToString(duration) + " ns"); + auto b = std::chrono::steady_clock::now(); + auto timeTaken = b - a; + auto desiredTime = std::chrono::duration(1./desiredfps); + auto timeLeft = desiredTime - timeTaken; + if (timeLeft > std::chrono::duration::zero()) { + std::this_thread::sleep_for(timeLeft); + } + } + stopRun = false; + ui->SetVerboseLevel(keepVerbose); + }); + } // Run + + { // Blank widget with non-zero stretch (squashes others up) + auto spacer = new QWidget; + timeEvolutionLayout->addWidget(spacer); + timeEvolutionLayout->setStretchFactor(spacer, 1); + } // Blank widget with non-zero stretch (squashes others up) + + } // Place stuff in the Time Evolution Panel + + { // Further information + auto header = new QLabel; + header->setAlignment(Qt::AlignHCenter); + header->setText + ("Further time window commands are" + "\navailable in /vis/viewer/set/timeWindow/." + "\n\nYou can capture views, including" + "\nrotation and zooming, with /vis/viewer/save," + "\nand play back with /vis/viewer/interpolate." + "\n\nSee examples/extended/visualization/movies."); + topLayout->addWidget(header); + } // Further information + + { // Blank widget (adds small space at bottom) + auto spacer = new QWidget; + topLayout->addWidget(spacer); + topLayout->setStretchFactor(spacer, 1); + } // Blank widget (adds small space at bottom) + + return fTimeWindowWidget; +} + /** Create the Cout ToolBox Widget */ G4UIDockWidget* G4UIQt::CreateCoutTBWidget() @@ -2137,12 +2819,14 @@ G4UIDockWidget* G4UIQt::CreateUITabWidget() // the left dock fUITabWidget->addTab(CreateSceneTreeWidget(), "Scene tree"); fUITabWidget->addTab(CreateHelpTBWidget(), "Help"); + fUITabWidget->addTab(CreateTimeWindowWidget(), "Time"); fUITabWidget->addTab(CreateHistoryTBWidget(), "History"); fUITabWidget->setCurrentWidget(fHelpTBWidget); fUITabWidget->setTabToolTip(0, "Tree of scene items"); fUITabWidget->setTabToolTip(1, "Help widget"); - fUITabWidget->setTabToolTip(2, "All commands history"); + fUITabWidget->setTabToolTip(2, "Time window widdget"); + fUITabWidget->setTabToolTip(3, "All commands history"); connect(fUITabWidget, SIGNAL(currentChanged(int)), SLOT(ToolBoxActivated(int))); fUIDockWidget = new G4UIDockWidget(""); @@ -5033,11 +5717,14 @@ void G4UIQt::CreatePickInfosDialog() if (fPickInfosDialog != nullptr) { return; } + fPickInfosDialog = new QDialog(); - fPickInfosDialog->setWindowTitle("Pick infos"); + QSize screenSize = QGuiApplication::primaryScreen()->geometry().size(); + fPickInfosDialog->resize(screenSize.width() * 0.3, screenSize.height() * 0.3); fPickInfosDialog->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - + fPickInfosDialog->setWindowFlags(Qt::WindowStaysOnTopHint); + if (fPickInfosWidget == nullptr) { fPickInfosWidget = new QWidget(); auto layoutPickInfos = new QVBoxLayout(); @@ -5051,7 +5738,6 @@ void G4UIQt::CreatePickInfosDialog() layoutDialog->addWidget(fPickInfosWidget); layoutDialog->setContentsMargins(0, 0, 0, 0); fPickInfosDialog->setLayout(layoutDialog); - fPickInfosDialog->setWindowFlags(Qt::WindowStaysOnTopHint); } void G4UIQt::CreateEmptyViewerPropertiesWidget() @@ -5193,13 +5879,13 @@ void G4UIQt::SetIconPickSelected() fZoomInSelected = false; fZoomOutSelected = false; - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "pick") { i->setChecked(true); @@ -5228,13 +5914,13 @@ void G4UIQt::SetIconZoomInSelected() fPickSelected = false; fZoomOutSelected = false; - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "zoom_in") { i->setChecked(true); @@ -5263,13 +5949,13 @@ void G4UIQt::SetIconZoomOutSelected() fPickSelected = false; fZoomInSelected = false; - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "zoom_out") { i->setChecked(true); @@ -5293,13 +5979,13 @@ void G4UIQt::SetIconSolidSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "solid") { i->setChecked(true); @@ -5320,13 +6006,13 @@ void G4UIQt::SetIconWireframeSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "wireframe") { i->setChecked(true); @@ -5347,13 +6033,13 @@ void G4UIQt::SetIconHLRSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "hidden_line_removal") { i->setChecked(true); @@ -5374,14 +6060,14 @@ void G4UIQt::SetIconHLHSRSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "hidden_line_and_surface_removal") { i->setChecked(true); @@ -5402,13 +6088,13 @@ void G4UIQt::SetIconPerspectiveSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "perspective") { i->setChecked(true); @@ -5423,14 +6109,14 @@ void G4UIQt::SetIconOrthoSelected() { // Theses actions should be in the app toolbar - QToolBar* bar = fToolbarApp; + QToolBar* toolbar = fToolbarApp; if (! fDefaultIcons) { - bar = fToolbarUser; + toolbar = fToolbarUser; } - if (bar == nullptr) return; + if (toolbar == nullptr) return; - QList list = bar->actions(); + QList list = toolbar->actions(); for (auto i : list) { if (i->data().toString() == "ortho") { i->setChecked(true); diff --git a/source/materials/History b/source/materials/History index d3dc54bf2f..88f23a8b8f 100644 --- a/source/materials/History +++ b/source/materials/History @@ -6,7 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-11 Ben Morgan (materials-V11-02-09) +## 2025-02-11 Ben Morgan (materials-V11-03-00) +- Migrate unit tests under tests/ to dedicated category under ctests_source so + they are run regularly and always available to developers. + - See materials_tests-V11-03-00 - Make ios flags for Store/Retrieve of G4ExtDEDXTable consistent to avoid issues on Windows platforms. diff --git a/source/parameterisations/channeling/History b/source/parameterisations/channeling/History index 8668b7f616..7155e9dd5b 100644 --- a/source/parameterisations/channeling/History +++ b/source/parameterisations/channeling/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-06 Dmitri Konstantinov (fastsimchanneling-V11-02-05) +## 2025-04-06 Dmitri Konstantinov (fastsimchanneling-V11-03-00) - In G4VChannelingFastSimCrystalData::IonizationLosses(), fixed bug in the electron ionization loss correction formula. Issue was spotted by PVS-Studio static analysis. diff --git a/source/persistency/gdml/History b/source/persistency/gdml/History index 64fd53b9c2..0dfec46fc2 100644 --- a/source/persistency/gdml/History +++ b/source/persistency/gdml/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-13 Witek Pokorski (gdml-V11-03-00) +- Fixing the Problem 2322 by explicitely adding '0x' string before the address + in case of WIN32 platform. + ## 2024-06-20 Gabriele Cosmo (gdml-V11-02-04, 03) - Disabled schema validation by default, as XercesC currently does support only 'http' (see: https://issues.apache.org/jira/browse/XERCESC-2220). diff --git a/source/persistency/gdml/src/G4GDMLWrite.cc b/source/persistency/gdml/src/G4GDMLWrite.cc index 51cb5c42cc..6ecaba7f61 100644 --- a/source/persistency/gdml/src/G4GDMLWrite.cc +++ b/source/persistency/gdml/src/G4GDMLWrite.cc @@ -136,6 +136,9 @@ G4String G4GDMLWrite::GenerateName(const G4String& name, const void* const ptr) stream << name; if(addPointerToName) { +#ifdef WIN32 + stream << "0x"; +#endif stream << ptr; }; diff --git a/source/physics_lists/builders/History b/source/physics_lists/builders/History index 5b88c24355..f66d671b88 100644 --- a/source/physics_lists/builders/History +++ b/source/physics_lists/builders/History @@ -6,6 +6,13 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-16 Vladimir Ivanchenko (phys-builders-V11-03-00) +- G4HadronPHPBuilder - G4ParticleHPCapture and G4ParticleHPCaptureData are + substituted by G4NeutronRadCaptureHP and G4NeutronHPCaptureData. The + first allows using full list of updated PhotonEvaporation data set, the + second is only change of the name, the data are the same. Fixed + problem report #2660. + ## 2023-10-19 Jean-Christophe David (phys-builders-V11-01-03) - G4HadronicBuilder: added two methods - BuildINCLXX and BuildAntiLightIonsINCLXX. diff --git a/source/physics_lists/builders/include/G4NeutronPHPBuilder.hh b/source/physics_lists/builders/include/G4NeutronPHPBuilder.hh index 1e11be4eb5..180eb088b8 100644 --- a/source/physics_lists/builders/include/G4NeutronPHPBuilder.hh +++ b/source/physics_lists/builders/include/G4NeutronPHPBuilder.hh @@ -40,14 +40,14 @@ #include "G4ParticleHPInelasticData.hh" #include "G4ParticleHPFission.hh" #include "G4ParticleHPFissionData.hh" -#include "G4ParticleHPCapture.hh" -#include "G4ParticleHPCaptureData.hh" +#include "G4NeutronRadCaptureHP.hh" +#include "G4NeutronHPCaptureData.hh" class G4NeutronPHPBuilder : public G4VNeutronBuilder { public: G4NeutronPHPBuilder(); - virtual ~G4NeutronPHPBuilder() {} + ~G4NeutronPHPBuilder() override = default; public: virtual void Build(G4HadronElasticProcess * aP) final override; @@ -89,8 +89,8 @@ class G4NeutronPHPBuilder : public G4VNeutronBuilder G4ParticleHPInelasticData * theHPInelasticData; G4ParticleHPFission * theHPFission; G4ParticleHPFissionData * theHPFissionData; - G4ParticleHPCapture * theHPCapture; - G4ParticleHPCaptureData * theHPCaptureData; + G4NeutronRadCaptureHP* theHPCapture; + G4NeutronHPCaptureData* theHPCaptureData; }; diff --git a/source/physics_lists/builders/src/G4NeutronPHPBuilder.cc b/source/physics_lists/builders/src/G4NeutronPHPBuilder.cc index 4782e4c568..4ce6b4e20c 100644 --- a/source/physics_lists/builders/src/G4NeutronPHPBuilder.cc +++ b/source/physics_lists/builders/src/G4NeutronPHPBuilder.cc @@ -76,10 +76,10 @@ Build(G4NeutronFissionProcess * aP) void G4NeutronPHPBuilder:: Build(G4NeutronCaptureProcess * aP) { - if(theHPCapture==0) theHPCapture = new G4ParticleHPCapture; + if (theHPCapture==nullptr) theHPCapture = new G4NeutronRadCaptureHP; theHPCapture->SetMinEnergy(theMin); theHPCapture->SetMaxEnergy(theMax); - if(theHPCaptureData==0) theHPCaptureData = new G4ParticleHPCaptureData; + if(theHPCaptureData==0) theHPCaptureData = new G4NeutronHPCaptureData; aP->AddDataSet(theHPCaptureData); aP->RegisterMe(theHPCapture); } diff --git a/source/physics_lists/constructors/electromagnetic/History b/source/physics_lists/constructors/electromagnetic/History index 30fdcfe2c1..7dbe87b6c4 100644 --- a/source/physics_lists/constructors/electromagnetic/History +++ b/source/physics_lists/constructors/electromagnetic/History @@ -6,6 +6,48 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-22 Vladimir Ivanchenko (phys-ctor-em-V11-03-08) +- G4EmDNABuilder - fixed upper energy limit for ionisation of hydrogen. + +## 2025-06-20 Vladimir Ivanchenko (phys-ctor-em-V11-03-07) +- G4EmDNABuilder - fixed enegy limits for excitation model for light ions, + for increase/decrease models. This modification provides a correct + printout and does not change any DNA physics result. + +## 2025-06-13 Vladimir Ivanchenko (phys-ctor-em-V11-03-06) +- G4EmDNABuilder - fixed upper limit of energy increase/decrease processes, + they should the same as for ionisation and excitation processes + +## 2025-06-05 Vladimir Ivanchenko (phys-ctor-em-V11-03-05) +- G4EmDNABuilder - 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. + +## 2025-05-25 Vladimir Ivanchenko (phys-ctor-em-V11-03-04) +- G4GeneralGammaProcess - updated destructor according to modification in + electromagnetic/utils + +## 2025-05-22 Sebastien Incerti (phys-ctor-em-V11-03-03) +- G4EmDNABuilder - replaced G4DNABornIonisationModel by + G4DNABornIonisationModel1 for proton ionisation + +## 2025-05-21 Vladimir Ivanchenko (phys-ctor-em-V11-03-02) +- G4EmDNAPhysics_option6 - disable "fast" flag in order to have comparisons + with Opt4 in the same set of general DNA parameters. +- G4EmDNAPhysics_stationary_X constructor - added disclaimer saying that + these constructors are obsolete. + +## 2025-02-12 Vladimir Ivanchenko (phys-ctor-em-V11-03-01) +- G4EmDNABuilder - use new version of Born ionisation model. + +## 2025-02-12 Vladimir Ivanchenko (phys-ctor-em-V11-03-00) +- G4EmDNABuilder, G4EmDNAPhysicsActivator - introduce usage of the new ion + ionisation model in DNA Opt8 physics configuration +- G4EmDNAPhysics, G4EmDNAPhysics_option2, G4EmDNAPhysics_option4, + G4EmDNAPhysics_option6, G4EmDNAPhysics_option8 - update interface to + G4EmDNABuilder. + ## 2024-10-18 Vladimir Ivanchenko (phys-ctor-em-V11-02-12) - G4EmStandardPhysics_option3 - return back positron annihilation lost in previous MR. diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmDNABuilder.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmDNABuilder.hh index a3fda9e2d4..37d54e9f0b 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmDNABuilder.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmDNABuilder.hh @@ -83,7 +83,7 @@ public: const G4Region* reg = nullptr); static void ConstructDNAIonPhysics(const G4double emax, - const G4bool stationary, + const G4int opt, const G4Region* reg = nullptr); static void ConstructDNALightIonPhysics(G4ParticleDefinition* part, diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNABuilder.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNABuilder.cc index 1426261121..5b225f90b4 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNABuilder.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNABuilder.cc @@ -91,6 +91,7 @@ #include "G4DNASancheExcitationModel.hh" #include "G4DNAEmfietzoglouIonisationModel.hh" #include "G4DNACPA100IonisationModel.hh" +#include "G4DNABornIonisationModel.hh" #include "G4DNABornIonisationModel1.hh" #include "G4DNAMeltonAttachmentModel.hh" #include "G4DNAIonElasticModel.hh" @@ -98,6 +99,8 @@ #include "G4DNABornExcitationModel.hh" #include "G4DNARuddIonisationModel.hh" #include "G4DNARuddIonisationExtendedModel.hh" +#include "G4DNARuddIonisationDynamicModel.hh" +#include "G4DNAGeneralIonIonisationModel.hh" #include "G4DNADingfelderChargeDecreaseModel.hh" #include "G4DNADingfelderChargeIncreaseModel.hh" #include "G4DNARPWBAExcitationModel.hh" @@ -106,6 +109,8 @@ static const G4double lowEnergyRPWBA = 100*CLHEP::MeV; static const G4double lowEnergyMSC = 1*CLHEP::MeV; static const G4double lowEnergyProtonIoni = 2*CLHEP::MeV; +static const G4double highEnergyMillerGrean = 0.5*CLHEP::MeV; +static const G4double highEnergyChargeExchange = 100*CLHEP::MeV; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -314,7 +319,7 @@ G4EmDNABuilder::ConstructDNAElectronPhysics(const G4double emaxDNA, G4double emaxT = 7.4*CLHEP::eV; // limit for CPA100 models G4double emaxCPA100 = 250*CLHEP::keV; - if(4 == opt) { + if (4 == opt || 8 == opt) { emaxE = 10.*CLHEP::keV; emaxT = 10.*CLHEP::eV; } else if(5 < opt) { @@ -329,9 +334,9 @@ G4EmDNABuilder::ConstructDNAElectronPhysics(const G4double emaxDNA, // *** Elastic scattering *** auto pElasticProcess = FindOrBuildElastic(part, "e-_G4DNAElastic"); - G4VEmModel* elast = nullptr; + G4VEmModel* elast; G4VEmModel* elast2 = nullptr; - if(4 == opt) { + if(4 == opt || 8 == opt) { elast = new G4DNAUeharaScreenedRutherfordElasticModel(); } else if(5 < opt) { auto mod = new G4DNACPA100ElasticModel(); @@ -359,7 +364,7 @@ G4EmDNABuilder::ConstructDNAElectronPhysics(const G4double emaxDNA, modE->SelectStationary(stationary); modE->SetHighEnergyLimit(emaxE); } - G4VEmModel* modB = nullptr; + G4VEmModel* modB; G4VEmModel* modB2 = nullptr; if(6 == opt) { auto mod = new G4DNACPA100ExcitationModel(); @@ -392,21 +397,16 @@ G4EmDNABuilder::ConstructDNAElectronPhysics(const G4double emaxDNA, modE->SelectStationary(stationary); modE->SetHighEnergyLimit(emaxE); } - G4VEmModel* modI = nullptr; + G4VEmModel* modI; G4VEmModel* modI2 = nullptr; - if(6 == opt) { + if (6 == opt) { auto mod = new G4DNACPA100IonisationModel(); mod->SelectStationary(stationary); mod->SelectFasterComputation(fast); modI = mod; - auto mod1 = new G4DNABornIonisationModel(); - mod1->SelectStationary(stationary); - modI2 = mod1; + modI2 = new G4DNABornIonisationModel1(); } else { - auto mod = new G4DNABornIonisationModel1(); - mod->SelectStationary(stationary); - mod->SelectFasterComputation(fast); - modI = mod; + modI = new G4DNABornIonisationModel1(); } modI->SetLowEnergyLimit(emaxE); modI->SetHighEnergyLimit(emaxDNA); @@ -446,6 +446,8 @@ G4EmDNABuilder::ConstructDNAProtonPhysics(const G4double e1DNA, G4EmParameters* param = G4EmParameters::Instance(); const G4double emax = param->MaxKinEnergy(); G4ParticleDefinition* part = G4Proton::Proton(); + G4double e2DNA = (8 == opt) ? + std::min(lowEnergyRPWBA, emax) : std::min(e1DNA, lowEnergyRPWBA); // *** Elastic scattering *** auto pElasticProcess = FindOrBuildElastic(part, "proton_G4DNAElastic"); @@ -455,7 +457,6 @@ G4EmDNABuilder::ConstructDNAProtonPhysics(const G4double e1DNA, pElasticProcess->AddEmModel(-1, modE, reg); // *** Excitation *** - G4double e2DNA = std::min(e1DNA, lowEnergyRPWBA); auto theDNAExc = FindOrBuildExcitation(part, "proton_G4DNAExcitation"); auto modMGE = new G4DNAMillerGreenExcitationModel(); modMGE->SetHighEnergyLimit(e2DNA); @@ -479,28 +480,24 @@ G4EmDNABuilder::ConstructDNAProtonPhysics(const G4double e1DNA, // *** Ionisation *** auto theDNAIoni = FindOrBuildIonisation(part, "proton_G4DNAIonisation"); - G4VEmModel* modRI = nullptr; - if(2 == opt) { - auto mod = new G4DNARuddIonisationExtendedModel(); - mod->SelectStationary(stationary); - modRI = mod; + G4VEmModel* modRI; + if (2 == opt) { + modRI = new G4DNARuddIonisationExtendedModel(); + } else if (8 == opt) { + modRI = new G4DNARuddIonisationDynamicModel(); } else { - auto mod = new G4DNARuddIonisationModel(); - mod->SelectStationary(stationary); - modRI = mod; + modRI = new G4DNARuddIonisationModel(); } - modRI->SetHighEnergyLimit(e1DNA); + modRI->SetHighEnergyLimit(e2DNA); theDNAIoni->AddEmModel(-1, modRI, reg); - if(e2DNA < lowEnergyRPWBA) { - auto modI = new G4DNABornIonisationModel1(); - modI->SelectFasterComputation(fast); - modI->SelectStationary(stationary); + if (e2DNA < lowEnergyRPWBA) { + G4VEmModel* modI = new G4DNABornIonisationModel1(); modI->SetLowEnergyLimit(e2DNA); modI->SetHighEnergyLimit(lowEnergyRPWBA); theDNAIoni->AddEmModel(-2, modI, reg); } - if(lowEnergyRPWBA < emaxIonDNA) { + if (lowEnergyRPWBA < emaxIonDNA) { auto modJ = new G4DNARPWBAIonisationModel(); modJ->SelectFasterComputation(fast); modJ->SelectStationary(stationary); @@ -515,25 +512,26 @@ G4EmDNABuilder::ConstructDNAProtonPhysics(const G4double e1DNA, auto modDCD = new G4DNADingfelderChargeDecreaseModel(); modDCD->SelectStationary(stationary); modDCD->SetLowEnergyLimit(0.0); - modDCD->SetHighEnergyLimit(emax); + modDCD->SetHighEnergyLimit(highEnergyChargeExchange); theDNAChargeDecreaseProcess->AddEmModel(-1, modDCD, reg); - FindOrBuildCapture(0.1*CLHEP::keV, part); + // *** Tracking cut *** + G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV; + FindOrBuildCapture(cut, part); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4EmDNABuilder::ConstructDNAIonPhysics(const G4double emaxIonDNA, - const G4bool stationary, + const G4int opt, const G4Region* reg) { G4ParticleDefinition* part = G4GenericIon::GenericIon(); // *** Ionisation *** auto theDNAIoni = FindOrBuildIonisation(part, "GenericIon_G4DNAIonisation"); - auto mod = new G4DNARuddIonisationExtendedModel(); - mod->SelectStationary(stationary); + G4VEmModel* mod = new G4DNAGeneralIonIonisationModel(); mod->SetHighEnergyLimit(emaxIonDNA); theDNAIoni->AddEmModel(-1, mod, reg); @@ -541,7 +539,8 @@ G4EmDNABuilder::ConstructDNAIonPhysics(const G4double emaxIonDNA, FindOrBuildNuclearStopping(part, CLHEP::MeV); // *** Tracking cut *** - FindOrBuildCapture(1*CLHEP::keV, part); + G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV; + FindOrBuildCapture(cut, part); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -555,9 +554,13 @@ G4EmDNABuilder::ConstructDNALightIonPhysics(G4ParticleDefinition* part, const G4bool stationary, const G4Region* reg) { - G4EmParameters* param = G4EmParameters::Instance(); - const G4double emax = param->MaxKinEnergy(); const G4String& name = part->GetParticleName(); + G4double elim1 = emaxIonDNA; + G4double elim2 = emaxIonDNA; + if (part->GetParticleName() == "hydrogen") { + elim1 = highEnergyMillerGrean; + elim2 = highEnergyChargeExchange; + } // *** Elastic *** auto theDNAElastic = FindOrBuildElastic(part, name + "_G4DNAElastic"); @@ -571,23 +574,21 @@ G4EmDNABuilder::ConstructDNALightIonPhysics(G4ParticleDefinition* part, auto modMGE = new G4DNAMillerGreenExcitationModel(); modMGE->SelectStationary(stationary); modMGE->SetLowEnergyLimit(0.0); - modMGE->SetHighEnergyLimit(emaxIonDNA); + modMGE->SetHighEnergyLimit(elim1); theDNAExc->AddEmModel(-1, modMGE, reg); // *** Ionisation *** auto theDNAIoni = FindOrBuildIonisation(part, name + "_G4DNAIonisation"); - G4VEmModel* modRI = nullptr; - if(2 == opt) { - auto mod = new G4DNARuddIonisationExtendedModel(); - mod->SelectStationary(stationary); - modRI = mod; + G4VEmModel* modRI; + if (2 == opt) { + modRI = new G4DNARuddIonisationExtendedModel(); + } else if (8 == opt) { + modRI = new G4DNARuddIonisationDynamicModel(); } else { - auto mod = new G4DNARuddIonisationModel(); - mod->SelectStationary(stationary); - modRI = mod; + modRI = new G4DNARuddIonisationModel(); } - modRI->SetHighEnergyLimit(emaxIonDNA); - theDNAIoni->AddEmModel(-1, modRI, reg); + modRI->SetHighEnergyLimit(elim2); + theDNAIoni->AddEmModel(-2, modRI, reg); // *** Charge increase *** if(2 > charge) { @@ -596,7 +597,7 @@ G4EmDNABuilder::ConstructDNALightIonPhysics(G4ParticleDefinition* part, auto modDCI = new G4DNADingfelderChargeIncreaseModel(); modDCI->SelectStationary(stationary); modDCI->SetLowEnergyLimit(0.0); - modDCI->SetHighEnergyLimit(emax); + modDCI->SetHighEnergyLimit(elim2); theDNAChargeIncrease->AddEmModel(-1, modDCI, reg); } @@ -607,12 +608,13 @@ G4EmDNABuilder::ConstructDNALightIonPhysics(G4ParticleDefinition* part, auto modDCD = new G4DNADingfelderChargeDecreaseModel(); modDCD->SelectStationary(stationary); modDCD->SetLowEnergyLimit(0.0); - modDCD->SetHighEnergyLimit(emax); + modDCD->SetHighEnergyLimit(elim2); theDNAChargeDecrease->AddEmModel(-1, modDCD, reg); } // *** Tracking cut *** - FindOrBuildCapture(1*CLHEP::keV, part); + G4double cut = (8 == opt) ? 0.05*CLHEP::keV : 1*CLHEP::keV; + FindOrBuildCapture(cut, part); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics.cc index 19e605bfc1..0788dbd09a 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics.cc @@ -98,7 +98,7 @@ void G4EmDNAPhysics::ConstructProcess() G4EmParameters* param = G4EmParameters::Instance(); const G4double emaxDNA = 1.*CLHEP::MeV; const G4double emaxIonDNA = 300.*CLHEP::MeV; - const G4double emaxLightIonDNA = 400.*CLHEP::MeV; + const G4double emaxLightIonDNA = 300.*CLHEP::MeV; const G4double eminBorn = 500.*CLHEP::keV; const G4bool fast = param->DNAFast(); const G4bool st = param->DNAStationary(); @@ -119,7 +119,7 @@ void G4EmDNAPhysics::ConstructProcess() // DNA physics G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, 0, fast, st); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, 0, fast, st); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, 0); G4ParticleDefinition* part = genericIonsManager->GetIon("hydrogen"); G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 0, emaxIonDNA, fast, st); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysicsActivator.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysicsActivator.cc index acfed92d08..76ea5e1686 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysicsActivator.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysicsActivator.cc @@ -170,7 +170,7 @@ void G4EmDNAPhysicsActivator::ConstructProcess() DeactivateHadronProcesses(prot, emaxIonDNA, emax, reg); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, opt, fast, st, reg); DeactivateIonProcesses(gion, emaxIonDNA, emax, reg); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st, reg); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, opt, reg); DeactivateIonProcesses(alpha2, emaxLightIonDNA, emax, reg); G4EmDNABuilder::ConstructDNALightIonPhysics(alpha2, 2, opt, emaxLightIonDNA, fast, st, reg); DeactivateHadronProcesses(alpha1, emaxLightIonDNA, emax, reg); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option2.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option2.cc index 17a73c3e4c..1fbc9aaeda 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option2.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option2.cc @@ -62,7 +62,7 @@ void G4EmDNAPhysics_option2::ConstructProcess() G4EmParameters* param = G4EmParameters::Instance(); const G4double emaxDNA = 1.*CLHEP::MeV; const G4double emaxIonDNA = 300.*CLHEP::MeV; - const G4double emaxLightIonDNA = 400.*CLHEP::MeV; + const G4double emaxLightIonDNA = 300.*CLHEP::MeV; const G4double eminBorn = 500.*CLHEP::keV; const G4bool fast = param->DNAFast(); const G4bool st = param->DNAStationary(); @@ -83,7 +83,7 @@ void G4EmDNAPhysics_option2::ConstructProcess() // DNA physics G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, 2, fast, st); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, 2, fast, st); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, 2); G4ParticleDefinition* part = genericIonsManager->GetIon("hydrogen"); G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 2, emaxIonDNA, fast, st); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option4.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option4.cc index 01af7921e5..687ff421b5 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option4.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option4.cc @@ -59,7 +59,7 @@ void G4EmDNAPhysics_option4::ConstructProcess() G4EmParameters* param = G4EmParameters::Instance(); const G4double emaxDNA = 1.*CLHEP::MeV; const G4double emaxIonDNA = 300.*CLHEP::MeV; - const G4double emaxLightIonDNA = 400.*CLHEP::MeV; + const G4double emaxLightIonDNA = 300.*CLHEP::MeV; const G4double eminBorn = 500.*CLHEP::keV; const G4bool fast = param->DNAFast(); const G4bool st = param->DNAStationary(); @@ -80,7 +80,7 @@ void G4EmDNAPhysics_option4::ConstructProcess() // DNA physics G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, 4, fast, st); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, 4, fast, st); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, 4); G4ParticleDefinition* part = genericIonsManager->GetIon("hydrogen"); G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 4, emaxIonDNA, fast, st); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option6.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option6.cc index c6527667a5..4a39238f78 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option6.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option6.cc @@ -61,7 +61,7 @@ G4EmDNAPhysics_option6::G4EmDNAPhysics_option6(G4int ver, const G4String& nam) : G4EmDNAPhysics(ver, nam) { G4EmParameters* param = G4EmParameters::Instance(); - param->SetDNAFast(true); + param->SetDNAFast(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -72,7 +72,7 @@ void G4EmDNAPhysics_option6::ConstructProcess() G4EmParameters* param = G4EmParameters::Instance(); const G4double emaxDNA = 1.*CLHEP::MeV; const G4double emaxIonDNA = 300.*CLHEP::MeV; - const G4double emaxLightIonDNA = 400.*CLHEP::MeV; + const G4double emaxLightIonDNA = 300.*CLHEP::MeV; const G4double eminBorn = 500.*CLHEP::keV; const G4bool fast = param->DNAFast(); const G4bool st = param->DNAStationary(); @@ -93,7 +93,7 @@ void G4EmDNAPhysics_option6::ConstructProcess() // DNA physics G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, 6, fast, st); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, 6, fast, st); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, 6); G4ParticleDefinition* part = genericIonsManager->GetIon("hydrogen"); G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 6, emaxIonDNA, fast, st); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option8.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option8.cc index 2d240fea37..0cf7d8315e 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option8.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_option8.cc @@ -49,10 +49,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option8); G4EmDNAPhysics_option8::G4EmDNAPhysics_option8(G4int ver, const G4String& nam) : G4EmDNAPhysics(ver, nam) -{ - G4EmParameters* param = G4EmParameters::Instance(); - param->SetDNAFast(true); -} +{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -62,7 +59,7 @@ void G4EmDNAPhysics_option8::ConstructProcess() G4EmParameters* param = G4EmParameters::Instance(); const G4double emaxDNA = 1.*CLHEP::MeV; const G4double emaxIonDNA = 300.*CLHEP::MeV; - const G4double emaxLightIonDNA = 400.*CLHEP::MeV; + const G4double emaxLightIonDNA = 300.*CLHEP::MeV; const G4double eminBorn = 500.*CLHEP::keV; const G4bool fast = param->DNAFast(); const G4bool st = param->DNAStationary(); @@ -83,7 +80,7 @@ void G4EmDNAPhysics_option8::ConstructProcess() // DNA physics G4EmDNABuilder::ConstructDNAElectronPhysics(emaxDNA, 8, fast, st); G4EmDNABuilder::ConstructDNAProtonPhysics(eminBorn, emaxIonDNA, 8, fast, st); - G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, st); + G4EmDNABuilder::ConstructDNAIonPhysics(emaxIonDNA, 8); G4ParticleDefinition* part = genericIonsManager->GetIon("hydrogen"); G4EmDNABuilder::ConstructDNALightIonPhysics(part, 0, 8, emaxIonDNA, fast, st); diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option2.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option2.cc index 47d922675a..c52f9a4fa0 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option2.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option2.cc @@ -39,9 +39,11 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option2); G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver, const G4String& nam) : G4EmDNAPhysics_option2(ver, nam) { + G4cout << "!!! G4EmDNAPhysics_stationary_option2 physics constructor is instantiated." << G4endl; + G4cout << " This constructor is obsolete and will be removed in the next major Geant4 release." + << G4endl; G4EmParameters* param = G4EmParameters::Instance(); param->SetDNAStationary(true); - param->SetDNAFast(true); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option4.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option4.cc index f38f92a55d..b3b6f50451 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option4.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option4.cc @@ -39,6 +39,9 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option4); G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver, const G4String& nam) : G4EmDNAPhysics_option4(ver, nam) { + G4cout << "!!! G4EmDNAPhysics_stationary_option4 physics constructor is instantiated." << G4endl; + G4cout << " This constructor is obsolete and will be removed in the next major Geant4 release." + << G4endl; G4EmParameters* param = G4EmParameters::Instance(); param->SetDNAStationary(true); } diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option6.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option6.cc index 52a43a9393..13e7c4e73a 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option6.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAPhysics_stationary_option6.cc @@ -36,6 +36,9 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option6); G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver, const G4String& nam) : G4EmDNAPhysics_option6(ver, nam) { + G4cout << "!!! G4EmDNAPhysics_stationary_option6 physics constructor is instantiated." << G4endl; + G4cout << " This constructor is obsolete and will be removed in the next major Geant4 release." + << G4endl; G4EmParameters* param = G4EmParameters::Instance(); param->SetDNAStationary(true); } diff --git a/source/physics_lists/constructors/electromagnetic/src/G4GammaGeneralProcess.cc b/source/physics_lists/constructors/electromagnetic/src/G4GammaGeneralProcess.cc index dbb31be6b8..7a5ef26256 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4GammaGeneralProcess.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4GammaGeneralProcess.cc @@ -100,12 +100,7 @@ G4GammaGeneralProcess::G4GammaGeneralProcess(const G4String& pname): //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4GammaGeneralProcess::~G4GammaGeneralProcess() -{ - if(isTheMaster) { - delete theHandler; - theHandler = nullptr; - } -} +{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/History b/source/physics_lists/constructors/gamma_lepto_nuclear/History index b67ea5ec22..f23e4e80eb 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/History +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2024-12-10 Douglas M Wright (phys-ctor-glnuclear-V11-03-00) +- G4EmExtraPhysics removed LEND photonuclear, is now done in G4HadronPhysicsLEND + ## 2024-10-28 Alexei Sytov (phys-ctor-glnuclear-V11-02-01) - Added new physics G4CoherentPairProductionPhysics related to the process G4CoherentPairProduction of coherent pair production by diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/include/G4EmExtraPhysics.hh b/source/physics_lists/constructors/gamma_lepto_nuclear/include/G4EmExtraPhysics.hh index 0b059f8d7f..0657b5cb54 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/include/G4EmExtraPhysics.hh +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/include/G4EmExtraPhysics.hh @@ -35,6 +35,8 @@ // 19.06.2006 V.Ivanchenko add mu-nuclear process // 16.10.2012 A.Ribon: renamed G4EmExtraBertiniPhysics as G4EmExtraPhysics // 31.01.2018 V. Grichine: add neutrino-electron process and xsc +// 19.11.2024 D.M.Wright: Removed function ConstructLENDGammaNuclear since +// its functionality was moved to G4HadronPhysicsLEND // //---------------------------------------------------------------------------- // @@ -87,9 +89,6 @@ private: void ConstructGammaElectroNuclear(); - void ConstructLENDGammaNuclear(G4CascadeInterface* cascade, - G4HadronInelasticProcess* gnuc); - G4bool gnActivated{true}; G4bool eActivated{true}; G4bool gLENDActivated{false}; diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/sources.cmake b/source/physics_lists/constructors/gamma_lepto_nuclear/sources.cmake index 492a3f462c..8eaecd9521 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/sources.cmake +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/sources.cmake @@ -51,6 +51,7 @@ geant4_module_link_libraries(G4phys_ctor_glnuclear G4phys_builders G4phys_ctor_em G4phys_ctor_factory + G4phys_ctor_hinelastic G4procman G4parameterisation G4geometrymng diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc b/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc index aa0244545e..37c8f0ac93 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc @@ -40,6 +40,10 @@ // 29.01.2018 V.Grichine, adding neutrinos // 07.05.2019 V.Grichine, adding muon neutrino nucleus interactions // 03.11.2022 V. Grichne update for tau-neutrino nucleus processes +// 19.11.2024 D.M.Wright: Removed function ConstructLENDGammaNuclear since +// its functionality was moved to G4HadronPhysicsLEND +// Also fiedx bug that prevented LEND photonuclear process +// when G4GammaGeneralProcess was present // /////////////////////////////////////////////////////////////// @@ -74,8 +78,7 @@ #include "G4CascadeInterface.hh" #include "G4LowEGammaNuclearModel.hh" -#include "G4LENDorBERTModel.hh" -#include "G4LENDCombinedCrossSection.hh" +#include "G4HadronPhysicsLEND.hh" // used to access const maxLEND_Energy #include "G4GammaConversionToMuons.hh" #include "G4AnnihiToMuPair.hh" @@ -333,13 +336,12 @@ void G4EmExtraPhysics::ConstructGammaElectroNuclear() auto gproc = dynamic_cast(emManager->GetGammaGeneralProcess()); - // LEND may be activated if the general process is not activated if (gproc != nullptr) { gproc->AddHadProcess(gnuc); } else { ph->RegisterProcess(gnuc, G4Gamma::Gamma()); - if (gLENDActivated) { ConstructLENDGammaNuclear(cascade, gnuc); } } + if (gLENDActivated) cascade->SetMinEnergy(maxLEND_Energy - overlapLEND_Energy); if (eActivated) { auto enuc = new G4ElectronNuclearProcess(); @@ -352,23 +354,3 @@ void G4EmExtraPhysics::ConstructGammaElectroNuclear() ph->RegisterProcess(pnuc, G4Positron::Positron()); } } - -void G4EmExtraPhysics::ConstructLENDGammaNuclear( - G4CascadeInterface* cascade, G4HadronInelasticProcess* gnuc) -{ - if (G4FindDataDir("G4LENDDATA") == nullptr ) { - G4String message = "\n Skipping activation of Low Energy Nuclear Data (LEND) model for gamma nuclear interactions.\n The LEND model needs data files and they are available from ftp://gdo-nuclear.ucllnl.org/GND_after2013/GND_v1.3.tar.gz.\n Please set the environment variable G4LENDDATA to point to the directory named v1.3 extracted from the archive file.\n"; - G4Exception( "G4EmExtraPhysics::ConstructLENDGammaNuclear()" - , "G4LENDBertiniGammaElectroNuclearBuilder001" - , JustWarning , message); - return; - } - - cascade->SetMinEnergy(19.9*MeV); - auto theLowE = new G4LENDorBERTModel( G4Gamma::Gamma() ); - theLowE->DumpLENDTargetInfo(true); - theLowE->SetMaxEnergy(20*MeV); - gnuc->RegisterMe(theLowE); - auto theXSLowE = new G4LENDCombinedCrossSection( G4Gamma::Gamma() ); - gnuc->AddDataSet(theXSLowE); -} diff --git a/source/physics_lists/constructors/hadron_elastic/History b/source/physics_lists/constructors/hadron_elastic/History index 4c68ef26b6..432c38377d 100644 --- a/source/physics_lists/constructors/hadron_elastic/History +++ b/source/physics_lists/constructors/hadron_elastic/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-04-15 Vladimir Ivanchenko (phys-ctor-helastic-V11-03-00) +- G4ChargeExchangePhysics - fixed usage of the messenger + ## 2024-07-03 Robert Hatcher (phys-ctor-helastic-V11-02-00) - Add self registration of G4ThermalNeutrons with the constructor factory diff --git a/source/physics_lists/constructors/hadron_elastic/include/G4ChargeExchangePhysics.hh b/source/physics_lists/constructors/hadron_elastic/include/G4ChargeExchangePhysics.hh index 65d9b22897..041cb225fc 100644 --- a/source/physics_lists/constructors/hadron_elastic/include/G4ChargeExchangePhysics.hh +++ b/source/physics_lists/constructors/hadron_elastic/include/G4ChargeExchangePhysics.hh @@ -41,11 +41,13 @@ #include "globals.hh" #include "G4VPhysicsConstructor.hh" +class G4ChargeExchangeMessenger; + class G4ChargeExchangePhysics : public G4VPhysicsConstructor { public: explicit G4ChargeExchangePhysics(G4int ver = 1); - ~G4ChargeExchangePhysics() override = default; + ~G4ChargeExchangePhysics() override; void ConstructParticle() override; @@ -61,6 +63,8 @@ public: private: + G4ChargeExchangeMessenger* theMessenger; + G4double fLowEnergyLimit; G4double fXSFactor{1.0}; }; diff --git a/source/physics_lists/constructors/hadron_elastic/src/G4ChargeExchangePhysics.cc b/source/physics_lists/constructors/hadron_elastic/src/G4ChargeExchangePhysics.cc index 665177a840..5e8765c837 100644 --- a/source/physics_lists/constructors/hadron_elastic/src/G4ChargeExchangePhysics.cc +++ b/source/physics_lists/constructors/hadron_elastic/src/G4ChargeExchangePhysics.cc @@ -54,6 +54,7 @@ #include "G4KaonZeroLong.hh" #include "G4HadronicParameters.hh" #include "G4HadronInelasticProcess.hh" +#include "G4ChargeExchangeMessenger.hh" #include "G4SystemOfUnits.hh" // factory @@ -67,12 +68,18 @@ G4ChargeExchangePhysics::G4ChargeExchangePhysics(G4int ver) { // because it is an addition, the type of this constructor is 0 G4HadronicParameters::Instance()->SetVerboseLevel(ver); + theMessenger = new G4ChargeExchangeMessenger(this); if (ver > 1) { G4cout << "### ChargeExchangePhysics above " << fLowEnergyLimit/CLHEP::GeV << " GeV." << G4endl; } } +G4ChargeExchangePhysics::~G4ChargeExchangePhysics() +{ + delete theMessenger; +} + void G4ChargeExchangePhysics::ConstructParticle() { G4MesonConstructor pMesonConstructor; diff --git a/source/physics_lists/constructors/hadron_inelastic/History b/source/physics_lists/constructors/hadron_inelastic/History index f22517960d..17d6313dd2 100644 --- a/source/physics_lists/constructors/hadron_inelastic/History +++ b/source/physics_lists/constructors/hadron_inelastic/History @@ -4,6 +4,14 @@ 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-06-13 Vladimir Ivanchenko (phys-ctor-hinelastic-V11-03-01) +- G4HadrocPhysicsQBBC - disable General Neutron Process, which address problem reports + #2558 and #2559 + +## 2024-12-10 Douglas M Wright(phys-ctor-hinelastic-V11-03-00) +- Add G4HadronPhysicsLEND to define neutron and photon induced processes from LEND +- G4HadronPhysicsShielding remove LEND neutron process, now down in class above + ## 2024-11-08 Alberto Ribon (phys-ctor-hinelastic-V11-02-02) - README : updated information for the coming release 11.3. diff --git a/source/physics_lists/constructors/hadron_inelastic/include/G4HadronPhysicsLEND.hh b/source/physics_lists/constructors/hadron_inelastic/include/G4HadronPhysicsLEND.hh new file mode 100644 index 0000000000..6be5a93782 --- /dev/null +++ b/source/physics_lists/constructors/hadron_inelastic/include/G4HadronPhysicsLEND.hh @@ -0,0 +1,63 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// Description: Create all hadronic (neutron and photon) processes using LEND which is valid up to 20 MeV +// +// Author: Douglas M Wright, LLNL 2022-04-25 +// +//---------------------------------------------------------------------------- +// + +#ifndef G4HadronPhysicsLEND_h +#define G4HadronPhysicsLEND_h 1 + +#include "G4VPhysicsConstructor.hh" + +const G4double maxLEND_Energy = 20*CLHEP::MeV; +const G4double overlapLEND_Energy = 0.1*CLHEP::MeV; + +class G4HadronPhysicsLEND : public G4VPhysicsConstructor +{ +public: + G4HadronPhysicsLEND(G4int verbose =1, const G4String& eval=""); + ~G4HadronPhysicsLEND() override = default; + + void ConstructProcess() override; + void ConstructParticle() override; + + // copy constructor and hide assignment operator + G4HadronPhysicsLEND(G4HadronPhysicsLEND &) = delete; + G4HadronPhysicsLEND & operator = + (const G4HadronPhysicsLEND &right) = delete; + +private: + G4String evaluation; + G4int verbose; +}; + +#endif diff --git a/source/physics_lists/constructors/hadron_inelastic/sources.cmake b/source/physics_lists/constructors/hadron_inelastic/sources.cmake index 2958bda8a0..5e24f11ca1 100644 --- a/source/physics_lists/constructors/hadron_inelastic/sources.cmake +++ b/source/physics_lists/constructors/hadron_inelastic/sources.cmake @@ -12,6 +12,7 @@ geant4_add_module(G4phys_ctor_hinelastic G4HadronPhysicsFTFP_BERT_TRV.hh G4HadronPhysicsFTFQGSP_BERT.hh G4HadronPhysicsINCLXX.hh + G4HadronPhysicsLEND.hh G4HadronPhysicsNuBeam.hh G4HadronPhysicsQGS_BIC.hh G4HadronPhysicsQGSP_BERT.hh @@ -34,6 +35,7 @@ geant4_add_module(G4phys_ctor_hinelastic G4HadronPhysicsFTFP_BERT_TRV.cc G4HadronPhysicsFTFQGSP_BERT.cc G4HadronPhysicsINCLXX.cc + G4HadronPhysicsLEND.cc G4HadronPhysicsNuBeam.cc G4HadronPhysicsQGS_BIC.cc G4HadronPhysicsQGSP_BERT.cc @@ -55,6 +57,10 @@ geant4_module_link_libraries(G4phys_ctor_hinelastic G4run PRIVATE G4baryons + G4had_gamma_nuclear + G4phys_ctor_em + G4emutils + G4had_lend G4had_fission G4had_par_hp G4had_preequ_exciton diff --git a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC.cc b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC.cc index 2acd3f1b6d..b7c9ffa581 100644 --- a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC.cc +++ b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC.cc @@ -86,7 +86,7 @@ G4HadronInelasticQBBC::G4HadronInelasticQBBC(G4int ver) SetPhysicsType(bHadronInelastic); auto param = G4HadronicParameters::Instance(); param->SetEnableBCParticles(true); - param->SetEnableNeutronGeneralProcess(true); + param->SetEnableNeutronGeneralProcess(false); param->SetVerboseLevel(ver); } diff --git a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsLEND.cc b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsLEND.cc new file mode 100644 index 0000000000..9d42139408 --- /dev/null +++ b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsLEND.cc @@ -0,0 +1,132 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// Description: Create all hadronic (neutron and photon) processes using LEND which is valid up to 20 MeV +// +// Author: Douglas M Wright, LLNL 2022-04-25 +// +//---------------------------------------------------------------------------- +// + +#include "G4HadronPhysicsLEND.hh" +#include "G4PhysListUtil.hh" + +#include "G4NeutronBuilder.hh" +#include "G4NeutronLENDBuilder.hh" + +#include "G4PhysicsListHelper.hh" +#include "G4LENDorBERTModel.hh" +//#include "G4LENDCombinedModel.hh" +#include "G4LENDCombinedCrossSection.hh" + +#include "G4CrossSectionDataSetRegistry.hh" +#include "G4GammaNuclearXS.hh" + +#include "G4LossTableManager.hh" +#include "G4GammaGeneralProcess.hh" + +#include "G4PhysicsConstructorFactory.hh" +G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsLEND); + +G4HadronPhysicsLEND::G4HadronPhysicsLEND(G4int verb, const G4String& eva) + : G4VPhysicsConstructor("hadron inelastic LEND") +{ + verbose = verb; + evaluation = eva; +} + +void G4HadronPhysicsLEND::ConstructProcess() +{ + //....neutron-induced reactions + + //....create neutron processes if they do not exist + if( G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron()) == nullptr ){ + auto neutron_processes = new G4NeutronBuilder( true ); // Fission on + AddBuilder(neutron_processes); + neutron_processes->Build(); + } + + //....get pointers to neutron processes so can add LEND model + auto* neutron_inelastic = (G4HadronInelasticProcess*)G4PhysListUtil::FindInelasticProcess( G4Neutron::Neutron() ); + auto* neutron_capture = (G4NeutronCaptureProcess*)G4PhysListUtil::FindCaptureProcess( G4Neutron::Neutron() ); + auto* neutron_fission = (G4NeutronFissionProcess*)G4PhysListUtil::FindFissionProcess( G4Neutron::Neutron() ); + + auto* neutronLENDBuilder = new G4NeutronLENDBuilder(evaluation); + neutronLENDBuilder->Build(neutron_inelastic); + neutronLENDBuilder->Build(neutron_capture); + neutronLENDBuilder->Build(neutron_fission); + + //....photon-induced reactions + + //....use gamma hadronic process if it exists + // check Inelastic process using G4PhysListUtil + // then check for GammaNuclear in G4GammaGeneralProcess + auto* gamma_inelastic = (G4HadronInelasticProcess*)G4PhysListUtil::FindInelasticProcess( G4Gamma::Gamma() ); + + if( gamma_inelastic == nullptr){ + G4LossTableManager* emManager = G4LossTableManager::Instance(); + auto gproc = dynamic_cast(emManager->GetGammaGeneralProcess()); + if (gproc != nullptr) { + G4HadronicProcess* gnuc = gproc->GetGammaNuclear(); + if (gnuc != nullptr ) + gamma_inelastic = (G4HadronInelasticProcess*)gnuc; + } + } + //....did not find existing process, so create photonuclear process + if( gamma_inelastic == nullptr){ + //std::cout << "DMW: HadPhysLEND = gamma inelastic pointer not found\n"; + gamma_inelastic = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Gamma() ); + G4PhysicsListHelper* plHelper = G4PhysicsListHelper::GetPhysicsListHelper(); + plHelper->RegisterProcess(gamma_inelastic, G4Gamma::Gamma()); + + //....need these XS or LENDonly crashes + auto xsreg = G4CrossSectionDataSetRegistry::Instance(); + G4VCrossSectionDataSet* xs = nullptr; + xs = xsreg->GetCrossSectionDataSet("GammaNuclearXS"); + if(nullptr == xs) xs = new G4GammaNuclearXS(); + gamma_inelastic->AddDataSet(xs); + } + + //....add LEND photonuclear models + auto* theGammaReactionLowE = new G4LENDorBERTModel( G4Gamma::Gamma() ); // checks if LEND has data for specified reaction + // (note uses G4LENDCombinedModel) + // if not, uses Bertini cascade + //auto* theGammaReactionLowE = new G4LENDCombinedModel( G4Gamma::Gamma() ); // uses LEND only + theGammaReactionLowE->SetMaxEnergy(maxLEND_Energy); + theGammaReactionLowE->DumpLENDTargetInfo(true); + gamma_inelastic->RegisterMe(theGammaReactionLowE); + + G4LENDCombinedCrossSection* theGammaCrossSectionLowE = new G4LENDCombinedCrossSection( G4Gamma::Gamma() ); + gamma_inelastic->AddDataSet(theGammaCrossSectionLowE); +} + +void G4HadronPhysicsLEND::ConstructParticle() +{ + G4Neutron::Neutron(); + G4Gamma::Gamma(); +} diff --git a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsShielding.cc b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsShielding.cc index c1d7090339..949edf88b8 100644 --- a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsShielding.cc +++ b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronPhysicsShielding.cc @@ -33,12 +33,13 @@ // // Modified: // -// 2020.05.07 A.Ribon used the newly introduced G4HyperonBuilder -// 2019.08.01 A.Ribon replaced explicit numbers for the energy transition -// region with values taken from G4HadronicParameters -// 2014.08.05 K.L.Genser added provisions for modifing the Bertini to -// FTF transition energy region -// +// 2020.05.07 A.Ribon: Used the newly introduced G4HyperonBuilder +// 2019.08.01 A.Ribon: Replaced explicit numbers for the energy transition +// region with values taken from G4HadronicParameters +// 2014.08.05 K.L.Genser: Added provisions for modifing the Bertini to +// FTF transition energy region +// 2024.11.19 D.M.Wright: Removed LEND inelastic neutron model, +// is now done in G4HadronPhysicsLEND //---------------------------------------------------------------------------- // #include @@ -82,7 +83,7 @@ #include "G4ParticleHPBGGNucleonInelasticXS.hh" #include "G4ParticleHPJENDLHEInelasticData.hh" #include "G4ParticleHPInelasticData.hh" -#include "G4NeutronLENDBuilder.hh" +#include "G4HadronPhysicsLEND.hh" // used to access const maxLEND_Energy #include "G4BGGNucleonInelasticXS.hh" #include "G4CrossSectionDataSetRegistry.hh" @@ -119,7 +120,7 @@ G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name) G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4bool qe) : G4HadronPhysicsFTFP_BERT(name, qe), useLEND_(false), evaluation_("") { - minBERT_neutron = 19.9*CLHEP::MeV; + minBERT_neutron = maxLEND_Energy - overlapLEND_Energy; } G4HadronPhysicsShielding::G4HadronPhysicsShielding(const G4String& name, G4int verb) @@ -162,11 +163,7 @@ void G4HadronPhysicsShielding::Neutron() bertneu->SetMaxEnergy(maxBERT_neutron); bertneu->SetMinEnergy(minBERT_neutron); neu->RegisterMe(bertneu); - if(useLEND_) { - auto hpneu = new G4NeutronLENDBuilder(evaluation_); - AddBuilder(hpneu); - neu->RegisterMe(hpneu); - } else { + if( ! useLEND_) { auto hpneu = new G4NeutronPHPBuilder; AddBuilder(hpneu); neu->RegisterMe(hpneu); diff --git a/source/physics_lists/constructors/limiters/History b/source/physics_lists/constructors/limiters/History index b0eeda9c8d..5defc13355 100644 --- a/source/physics_lists/constructors/limiters/History +++ b/source/physics_lists/constructors/limiters/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-01-24 Igor Semeniouk (phys-ctor-limiters-V11-02-01) +## 2025-01-24 Igor Semeniouk (phys-ctor-limiters-V11-03-00) - Fix adding AddBiasingProcessLimiter when parallel word for all not use - Ignore G4GenericBiasingPhysics::XXXAddPDGRange if PDGlow > PDGhigh. diff --git a/source/physics_lists/lists/History b/source/physics_lists/lists/History index 754ef8c389..5d6368f303 100644 --- a/source/physics_lists/lists/History +++ b/source/physics_lists/lists/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2024-04-23 Alberto Ribon (phys-list-V11-02-04) +## 2025-04-23 Alberto Ribon (phys-lists-V11-03-03) - FTFP_BERT_ATL : removed the special FTF tune for ATLAS (introduced in phys-lists-V11-01-05 to overcome the problem of too optimistic (i.e. narrow) pion shower energy resolution). @@ -18,6 +18,20 @@ It must **not** be used as a substitute for writing good git commit messages! or the UI command (before run-initialization): /process/had/models/ftf/selectTuneByIndex 4 +## 2025-04-15 Vladimir Ivanchenko (phys-list-V11-03-02) +- QBBC - added G4ChargeExchangePhysics + +## 2025-03-03 Dmitri Konstantinov (phys-list-V11-03-01) +- 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 prevent unintended simulation results. + +## 2024-12-10 Douglas M Wright (phys-list-V11-03-00) +- Shielding: Simplify logic tree for inelastic models + and move all LEND hadronic inelastic processes to G4HadronPhysicsLEND + ## 2024-11-04 Vladimir Ivantchenko (phys-list-V11-02-03) - G4PhysListFactory - use std::size_t diff --git a/source/physics_lists/lists/src/G4PhysListFactory.cc b/source/physics_lists/lists/src/G4PhysListFactory.cc index dd853b042d..ebb5ff01e9 100644 --- a/source/physics_lists/lists/src/G4PhysListFactory.cc +++ b/source/physics_lists/lists/src/G4PhysListFactory.cc @@ -206,11 +206,13 @@ G4PhysListFactory::GetReferencePhysList(const G4String& name) else if(had_name == "ShieldingM_HPT") {p = new Shielding(verbose,"HP","M"); p->RegisterPhysics(new G4ThermalNeutrons);} else { - p = new FTFP_BERT(verbose); G4ExceptionDescription ed; - ed << "PhysicsList " << had_name << " is not known;" - << " the default FTFP_BERT is created"; - G4Exception("G4PhysListFactory: ","pl0003",JustWarning,ed,""); + ed << "ERROR: The requested physics list " << had_name + << " is NOT available in the Physics List Factory.\n" + << "Please choose a valid physics list.\n"; + + G4Exception("G4PhysListFactory", "pl0003", FatalException, ed); + return nullptr; } if(nullptr != p) { if(0 < em_opt && had_name != "LBE") { diff --git a/source/physics_lists/lists/src/QBBC.cc b/source/physics_lists/lists/src/QBBC.cc index 9ab61acfa9..3b2e991f89 100644 --- a/source/physics_lists/lists/src/QBBC.cc +++ b/source/physics_lists/lists/src/QBBC.cc @@ -88,6 +88,8 @@ QBBC::QBBC( G4int ver, const G4String&) RegisterPhysics( new G4HadronInelasticQBBC(ver)); + RegisterPhysics( new G4ChargeExchangePhysics(ver) ); + // Neutron tracking cut RegisterPhysics( new G4NeutronTrackingCut(ver) ); } diff --git a/source/physics_lists/lists/src/Shielding.cc b/source/physics_lists/lists/src/Shielding.cc index bdcd93afb1..e892485d9d 100644 --- a/source/physics_lists/lists/src/Shielding.cc +++ b/source/physics_lists/lists/src/Shielding.cc @@ -42,6 +42,8 @@ // fragments // 06.08.2019 A.Ribon: Replacing explicit values for the energy transition // region with values from G4HadronicParameters +// 19.11.2024 D.M.Wright: Simplify logic tree for inelastic models and +// move LEND hadronic inelastic processes to G4HadronPhysicsLEND // //---------------------------------------------------------------------------- // @@ -59,11 +61,12 @@ #include "G4IonElasticPhysics.hh" #include "G4StoppingPhysics.hh" #include "G4HadronElasticPhysicsHP.hh" -#include "G4HadronElasticPhysicsLEND.hh" #include "G4ParticleHPManager.hh" +#include "G4HadronElasticPhysicsLEND.hh" +#include "G4HadronPhysicsLEND.hh" #include "G4HadronPhysicsShielding.hh" -#include "G4HadronPhysicsShieldingLEND.hh" + #include "G4HadronicParameters.hh" #include @@ -97,12 +100,13 @@ Shielding::Shielding(G4int verbose, const G4String& n_model, // EM Physics RegisterPhysics( new G4EmStandardPhysics(verbose)); - // Synchroton Radiation & GN Physics + // Synchroton Radiation & Gamma Nuclear Physics G4EmExtraPhysics* emExtraPhysics = new G4EmExtraPhysics(verbose); - if ( LEN_model == "LEND" ) { - // Use LEND model for Gamma Nuclear + + // Adjust energy bounds of gamma nuclear models from G4EmExtraPhysics + if ( LEN_model == "LEND" ) emExtraPhysics->LENDGammaNuclear(true); - } + RegisterPhysics( emExtraPhysics ); // Decays @@ -110,16 +114,11 @@ Shielding::Shielding(G4int verbose, const G4String& n_model, RegisterPhysics( new G4RadioactiveDecayPhysics(verbose) ); // Hadron Elastic scattering - if ( LEN_model == "HP" ) - { + if ( LEN_model == "HP" ) { RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) ); - } - else if ( LEN_model == "LEND" ) - { + } else if ( LEN_model == "LEND" ) { RegisterPhysics( new G4HadronElasticPhysicsLEND(verbose,evaluation)); - } - else - { + } else { if(verbose > 0) { G4cout << "Shielding Physics List: Warning!" <GetMinEnergyTransitionFTF_Cascade(), - G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade()); + HadPhysEmin = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade(); + HadPhysEmax = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade(); } - if ( LEN_model == "LEND" ) { - delete hpc; - if (HadrPhysVariant == "M") { - // The variant "M" has a special, dedicated energy transition region - // between the string model and cascade model, therefore the recommended - // values from G4HadronicParameters are intentionally not used. - hpc = new G4HadronPhysicsShieldingLEND("hInelastic ShieldingLEND", verbose, - 9.5*CLHEP::GeV, 9.9*CLHEP::GeV); - } else { - hpc = new G4HadronPhysicsShieldingLEND("hInelastic ShieldingLEND", verbose, - G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade(), - G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade()); - } - } else { - //G4cout << "Shielding Physics List: Warning." <UseLEND(); + RegisterPhysics( hpc ); - if ( LEN_model == "HP" ) { - //Activate prodcuton of fission fragments in neutronHP - G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( true ); - } - + // Activate production of fission fragments in NeutronHP + if ( LEN_model == "HP" ) + G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( true ); + + // Add LEND processes (neutron and photon induced) + if ( LEN_model == "LEND" ) + RegisterPhysics( new G4HadronPhysicsLEND(verbose, evaluation)); + // Stopping Physics RegisterPhysics( new G4StoppingPhysics(verbose) ); diff --git a/source/processes/cuts/History b/source/processes/cuts/History index 1b7004ec14..5246e11870 100644 --- a/source/processes/cuts/History +++ b/source/processes/cuts/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-03-25 Ivana Hrivnacova (proccuts-V11-02-00) +## 2025-03-25 Ivana Hrivnacova (proccuts-V11-03-00) - In G4ProductionCutsTable::UpdateCoupleTable: Make sure that the couple tables are updated if userEnergyCuts vectors are set diff --git a/source/processes/decay/History b/source/processes/decay/History index efe028c369..f8de04d26d 100644 --- a/source/processes/decay/History +++ b/source/processes/decay/History @@ -1,12 +1,11 @@ # Category decay History 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! +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-04-03 Alvaro Tolosa-Delgado (decay-V11-02-00) +## 2025-04-03 Alvaro Tolosa-Delgado (decay-V11-03-00) - Remove approximation in calculation of G4Decay path length, fix issue #2645 ## 2021-12-10 Ben Morgan (decay-V11-00-00) diff --git a/source/processes/electromagnetic/dna/History b/source/processes/electromagnetic/dna/History index f304673c58..f3d839c727 100644 --- a/source/processes/electromagnetic/dna/History +++ b/source/processes/electromagnetic/dna/History @@ -6,7 +6,56 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-01-14 Ben Morgan (emdna-V11-02-18) +## 2025-05-28 Hoang Tran (emdna-V11-03-12) +- Fixed COVERTY issues on new moleculecounter imple + +## 2025-05-20 Hoang Tran (emdna-V11-03-11) +- Fixed FPE on G4ChemReboundTransportation::calculateNextCoordinate + +## 2025-05-19 Vladimir Ivanchenko (emdna-V11-03-10) +- G4DNARuddIonisationModel, G4DNABornIonisationModel1, G4DNABornIonisationModel2 + fixed definition of the stationary code via G4EmParameters + +## 2025-05-05 Hoang Tran (emdna-V11-03-09) +- Replaced the shared_ptr with unique_ptr and raw for manager counters. + +## 2025-04-23 Hoang Tran (emdna-V11-03-08) +- Replaced the G4MoleculeCounter singleton with G4MoleculeCounterManager for managing counters. + +## 2025-04-17 Vladimir Ivanchenko (emdna-V11-03-07) +- G4DNARuddIonisationDynamicModel - disable atomic deexcitation in stationary + mode, use G4VSItegration as a base class. +- G4DNABornIonisationModel - new implementation of the Born model using + G4DNASamplingTable class, use stationary and fast flags from EM parameters. +- G4DNABornIonisationModel1 - use stationary and fast flags from EM parameters. +- G4DNASamplingTable - new class allowing share sampling data between threads. + +## 2025-04-01 Hoang Tran (emdna-V11-03-06) +- update IRT-syn model for high LET applications. +- Correct the G4DNAScavengerProcess for IRT-syn model +- Created G4ChemReboundTransportation to handle the rebound + transportation of the molecule. + +## 2025-03-31 Hoang Tran (emdna-V11-03-05) +- G4PhysChemIO - removed G4Analysis class and G4analysismng module +dependency from G4emdna-utils + +## 2025-03-12 Vladimir Ivanchenko (emdna-V11-03-04) +- G4DNARuddIonisationDynamicModel - minor fix for alpha particles + +## 2025-02-26 Vladimir Ivanchenko (emdna-V11-03-03) +- G4DNARuddIonisationModel - added forgotten definition of stationary mode. + +## 2025-02-24 Vladimir Ivanchenko (emdna-V11-03-02) +- G4DNARuddIonisationDynamicModel - use G4Track and not G4DynamicParticle, allow + to store radicals if chemistry is activated, update for ions with full electron + shell + +## 2025-02-12 Vladimir Ivanchenko (emdna-V11-03-01) +- Added new G4DNARuddIonisationDynamicModel, which use charge from G4DynamicParticle. + The model is applicable for all ions. + +## 2025-01-14 Ben Morgan (emdna-V11-03-00) - Remove obsolete/commented references to G4AllocatorList. ## 2024-10-31 Hoang Tran (emdna-V11-02-17) diff --git a/source/processes/electromagnetic/dna/management/include/G4MoleculeLocator.hh b/source/processes/electromagnetic/dna/management/include/G4MoleculeLocator.hh new file mode 100644 index 0000000000..12942851b1 --- /dev/null +++ b/source/processes/electromagnetic/dna/management/include/G4MoleculeLocator.hh @@ -0,0 +1,68 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +// Author: Christian Velten (2025) + +#ifndef G4MOLECULELOCATOR_HH +#define G4MOLECULELOCATOR_HH 1 +#pragma once + +#include "G4TouchableHandle.hh" +#include "G4ThreadLocalSingleton.hh" + +#include + +class G4Track; +class G4ITNavigator; + +class G4MoleculeLocator final +{ + friend class G4ThreadLocalSingleton; + public: + static G4MoleculeLocator* Instance(); + + ~G4MoleculeLocator() = default; + + private: + G4MoleculeLocator(); + G4MoleculeLocator(const G4MoleculeLocator&) = delete; + G4MoleculeLocator(G4MoleculeLocator&&) = delete; + G4MoleculeLocator& operator=(const G4MoleculeLocator&) = delete; + G4MoleculeLocator& operator=(G4MoleculeLocator&&) = delete; + + G4ThreadLocalStatic G4MoleculeLocator* fpInstance; + + G4bool fIsInitialized{false}; + std::unique_ptr fNavigator; + + void Initialize(); + + public: + void LocateMoleculeSetStateAndTouchable(G4Track*); + G4TouchableHandle LocateMoleculeTrack(const G4Track*); +}; + +#endif diff --git a/source/processes/electromagnetic/dna/management/include/G4Scheduler.hh b/source/processes/electromagnetic/dna/management/include/G4Scheduler.hh index c1cc19687b..608518c562 100644 --- a/source/processes/electromagnetic/dna/management/include/G4Scheduler.hh +++ b/source/processes/electromagnetic/dna/management/include/G4Scheduler.hh @@ -186,6 +186,12 @@ class G4Scheduler : public G4VScheduler, public G4VStateDependent { fpUserScavenger = std::move(scavengerMaterial); } + inline G4bool IsInteractionStep(){ + return fInteractionStep; + } + inline void SetInteractionStep(G4bool InteractionStep){ + fInteractionStep = InteractionStep; + } protected: void DoProcess(); @@ -220,6 +226,7 @@ class G4Scheduler : public G4VScheduler, public G4VStateDependent G4bool fUseDefaultTimeSteps; G4double fTimeTolerance; G4double fGlobalTime; + G4double fTmpGlobalTime; G4double fStartTime; G4double fStopTime; G4double fEndTime; diff --git a/source/processes/electromagnetic/dna/management/include/G4TrackList.hh b/source/processes/electromagnetic/dna/management/include/G4TrackList.hh index d47f6c54be..97d1f81354 100644 --- a/source/processes/electromagnetic/dna/management/include/G4TrackList.hh +++ b/source/processes/electromagnetic/dna/management/include/G4TrackList.hh @@ -48,6 +48,7 @@ #include "G4FastList.hh" #include "G4ManyFastLists.hh" +#include "G4AllocatorList.hh" #include "G4Track.hh" #include "G4IT.hh" diff --git a/source/processes/electromagnetic/dna/management/include/G4VDNAMesh.hh b/source/processes/electromagnetic/dna/management/include/G4VDNAMesh.hh index 26cd8b7618..0631325f4c 100644 --- a/source/processes/electromagnetic/dna/management/include/G4VDNAMesh.hh +++ b/source/processes/electromagnetic/dna/management/include/G4VDNAMesh.hh @@ -75,13 +75,20 @@ class G4VDNAMesh }; struct hashFunc { - size_t operator()(const Index& k) const - { - size_t h1 = std::hash()(k.x); - size_t h2 = std::hash()(k.y); - size_t h3 = std::hash()(k.z); - return (h1 ^ (h2 << 1)) ^ h3; - } + size_t operator()(const Index& k) const + { + size_t h1 = std::hash()(k.x); + size_t h2 = std::hash()(k.y); + size_t h3 = std::hash()(k.z); + + // Combine the hashes using a consistent and well-distributed technique + size_t seed = 0; + seed ^= h1 + 0x9e3779b9 + (seed << 6) + (seed >> 2); + seed ^= h2 + 0x9e3779b9 + (seed << 6) + (seed >> 2); + seed ^= h3 + 0x9e3779b9 + (seed << 6) + (seed >> 2); + + return seed; + } }; }; #endif diff --git a/source/processes/electromagnetic/dna/management/sources.cmake b/source/processes/electromagnetic/dna/management/sources.cmake index 36df728c29..8de2e68879 100644 --- a/source/processes/electromagnetic/dna/management/sources.cmake +++ b/source/processes/electromagnetic/dna/management/sources.cmake @@ -78,6 +78,7 @@ geant4_add_module(G4emdna-man G4VUserBrownianAction.hh G4VDNAMesh.hh G4VUserPulseInfo.hh + G4MoleculeLocator.hh SOURCES G4AllITFinder.cc G4ITBox.cc @@ -127,7 +128,8 @@ geant4_add_module(G4emdna-man G4VITTrackHolder.cc G4VScheduler.cc G4DNABoundingBox.cc - G4VUserPulseInfo.cc) + G4VUserPulseInfo.cc + G4MoleculeLocator.cc) geant4_module_link_libraries(G4emdna-man PUBLIC diff --git a/source/processes/electromagnetic/dna/management/src/G4MoleculeLocator.cc b/source/processes/electromagnetic/dna/management/src/G4MoleculeLocator.cc new file mode 100644 index 0000000000..6bac1ed4b2 --- /dev/null +++ b/source/processes/electromagnetic/dna/management/src/G4MoleculeLocator.cc @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4MoleculeLocator.hh" + +#include "G4IT.hh" +#include "G4ITTransportationManager.hh" +#include "G4Track.hh" +#include "G4TrackingInformation.hh" + +G4ThreadLocal G4MoleculeLocator* G4MoleculeLocator::fpInstance = nullptr; + +G4MoleculeLocator::G4MoleculeLocator() +{ + fNavigator = std::make_unique(); +} + +G4MoleculeLocator* G4MoleculeLocator::Instance() +{ + if (fpInstance == nullptr) { + static G4ThreadLocalSingleton instance; + fpInstance = instance.Instance(); + } + if (!fpInstance->fIsInitialized) { + fpInstance->Initialize(); + } + return fpInstance; +} + +void G4MoleculeLocator::Initialize() +{ + fNavigator->SetWorldVolume(G4ITTransportationManager::GetTransportationManager() + ->GetNavigatorForTracking() + ->GetWorldVolume()); + fIsInitialized = true; +} + +G4TouchableHandle G4MoleculeLocator::LocateMoleculeTrack(const G4Track* pTrack) +{ + G4IT* pITrack = GetIT(pTrack); + + if (pITrack == nullptr) { + G4Exception("G4MoleculeLocator::LocateMoleculeSetStateAndTouchable", "NOT_AN_IT", FatalErrorInArgument, + "The track passed to this method appears to not hold an IT (molecule) object!"); + } + + std::unique_ptr tmpStateHolder; + if (pITrack->GetTrackingInfo()->GetNavigatorState() != nullptr) + fNavigator->SetNavigatorState(pITrack->GetTrackingInfo()->GetNavigatorState()); + else { + fNavigator->NewNavigatorState(); + tmpStateHolder = std::unique_ptr(fNavigator->GetNavigatorState()); + // will be deleted once method goes out of scope + } + + G4ThreeVector direction = pTrack->GetMomentumDirection(); + + fNavigator->LocateGlobalPointAndSetup(pTrack->GetPosition(), &direction, false, false); + + G4TouchableHandle touchable = fNavigator->CreateTouchableHistory(); + return touchable; +} + +void G4MoleculeLocator::LocateMoleculeSetStateAndTouchable(G4Track* pTrack) +{ + G4IT* pITrack = GetIT(pTrack); + + if (pITrack == nullptr) { + G4Exception("G4MoleculeLocator::LocateMoleculeSetStateAndTouchable", "NOT_AN_IT", FatalErrorInArgument, + "The track passed to this method appears to not hold an IT (molecule) object!"); + } + + fNavigator->NewNavigatorState(); + GetIT(pTrack)->GetTrackingInfo()->SetNavigatorState(fNavigator->GetNavigatorState()); + + G4ThreeVector direction = pTrack->GetMomentumDirection(); + + fNavigator->LocateGlobalPointAndSetup(pTrack->GetPosition(), &direction, false, false); + + G4TouchableHandle touchable = fNavigator->CreateTouchableHistory(); + pTrack->SetTouchableHandle(touchable); + pTrack->SetNextTouchableHandle(touchable); +} diff --git a/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc b/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc index 26b4b4987d..c9219acba4 100644 --- a/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc +++ b/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc @@ -155,6 +155,7 @@ void G4Scheduler::Create() fDefinedMinTimeStep = -1.; fReachedUserTimeLimit = false; fStopTime = -1.; + fTmpGlobalTime = -1.; fpMessenger = new G4SchedulerMessenger(this); fReactionSet = G4ITReactionSet::Instance(); fMaxTimeStep = DBL_MAX; @@ -378,6 +379,7 @@ G4double G4Scheduler::GetNextWatchedTime() const void G4Scheduler::SynchronizeTracks() { + fTmpGlobalTime = fGlobalTime; fGlobalTime = fTrackContainer.GetNextTime(); G4double tmpGlobalTime = fGlobalTime; G4double nextWatchedTime = -1; @@ -499,7 +501,7 @@ void G4Scheduler::Stepping() fTSTimeStep = DBL_MAX; fILTimeStep = DBL_MAX; - fInteractionStep = false; + //fInteractionStep = false; fReachedUserTimeLimit = false; fITStepStatus = eUndefined; @@ -612,7 +614,7 @@ void G4Scheduler::Stepping() // Give the priority to the IL { fInteractionStep = true; - fReactionSet->CleanAllReaction(); + //fReactionSet->CleanAllReaction(); fTimeStep = fILTimeStep; fITStepStatus = eInteractionWithMedium; fpStepProcessor->PrepareLeadingTracks(); diff --git a/source/processes/electromagnetic/dna/management/src/G4TrackList.cc b/source/processes/electromagnetic/dna/management/src/G4TrackList.cc index d35d3bee53..646b9acb44 100644 --- a/source/processes/electromagnetic/dna/management/src/G4TrackList.cc +++ b/source/processes/electromagnetic/dna/management/src/G4TrackList.cc @@ -64,6 +64,8 @@ G4FastListNode* G4FastList::__GetNode(G4Track* __track) template<> void G4FastList::DeleteObject(G4Track* __track) { + if (G4AllocatorList::GetAllocatorListIfExist() == nullptr) return; + auto __step = const_cast(__track->GetStep()); if (__step != nullptr) { diff --git a/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel.hh index f58a3aa582..991a9487fc 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel.hh @@ -23,22 +23,125 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/* - * G4DNABornIonisationModel.hh - * - * Created on: 13 mai 2015 - * Author: matkara - */ +// Created 25.03.2025 V.Ivanchenko +// on base of the G4DNABornIonisationModel1 of S.Incerti & M.Karamitros +// +// Simulation of ionisation for electrons and protons +// -#ifndef SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MODELS_INCLUDE_G4DNABORNIONISATIONMODEL_HH_ -#define SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MODELS_INCLUDE_G4DNABORNIONISATIONMODEL_HH_ +#ifndef G4DNABornIonisationModel_h +#define G4DNABornIonisationModel_h 1 -#include "G4DNABornIonisationModel1.hh" -#include "G4DNABornIonisationModel2.hh" +#include "G4VEmModel.hh" +#include "G4VSIntegration.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4DNAWaterIonisationStructure.hh" + +class G4DNAChemistryManager; +class G4VAtomDeexcitation; +class G4DNACrossSectionDataSet; +class G4DNASamplingTable; + +class G4DNABornIonisationModel : public G4VEmModel, public G4VSIntegration +{ +public: + + G4DNABornIonisationModel(const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNABornIonisationModel"); + + ~G4DNABornIonisationModel() override; + + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; + + G4double ProbabilityDensityFunction(G4double ekin) override; + + G4double CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double ekin, + G4double emin, + G4double emax) override; + + void SampleSecondaries(std::vector*, + const G4MaterialCutsCouple*, + const G4DynamicParticle*, + G4double tmin, G4double maxEnergy) override; + + void StartTracking(G4Track*) override; + + void SelectFasterComputation(G4bool input) { fasterCode = input; }; + + void SelectStationary(G4bool input) { statCode = input; }; + + void SelectSPScaling(G4bool input) { spScaling = input; }; + + G4DNABornIonisationModel & operator=(const G4DNABornIonisationModel &right) = delete; + G4DNABornIonisationModel(const G4DNABornIonisationModel&) = delete; + +private: + + void LoadData(); + + G4int SelectShell(); + + G4double SampleCumulative(); + + G4double SampleDifferential(); + +protected: + + G4ParticleChangeForGamma* fParticleChangeForGamma; + +private: + + // Water density table + static const std::vector* fpWaterDensity; + + // data + static G4DNACrossSectionDataSet* xsdata_e; + static G4DNACrossSectionDataSet* xsdata_p; + G4DNACrossSectionDataSet* xsdata{nullptr}; + + // sampling data + static G4DNASamplingTable* sampling_e; + static G4DNASamplingTable* sampling_p; + G4DNASamplingTable* sampling; + + const G4ParticleDefinition* fParticle{nullptr}; + const G4Track* fTrack{nullptr}; + + G4DNAChemistryManager* fChemistry{nullptr}; + + // Deexcitation manager to produce fluo photons and e- + G4VAtomDeexcitation* fAtomDeexcitation; + + // limits of x-section table + G4double fLowEnergy{0.0}; + G4double fHighEnergy{0.0}; + G4double fpLimitEnergy{0.0}; + G4double feLimitEnergy{0.0}; + + // tracking cut + G4double fAbsorptionEnergy{0.0}; + + G4double fMass{0.0}; + G4double fPrimaryEnergy{0.0}; + G4double fMaxEnergy{0.0}; + G4double fTemp[5] = {0.0}; + + G4int fSelectedShell{0}; + G4int verbose{0}; + + G4bool isFirst{false}; + G4bool isInitialised{false}; + G4bool isElectron{false}; + G4bool fasterCode{false}; + G4bool statCode{false}; + G4bool spScaling{true}; + + // Final state + G4DNAWaterIonisationStructure waterStructure; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -#ifndef G4DNABornIonisationModel -#define G4DNABornIonisationModel G4DNABornIonisationModel1 -//#define G4DNABornIonisationModel G4DNABornIonisationModel2 #endif - -#endif /* SOURCE_PROCESSES_ELECTROMAGNETIC_DNA_MODELS_INCLUDE_G4DNABORNIONISATIONMODEL_HH_ */ diff --git a/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel1.hh b/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel1.hh index 9fdf7e9e4e..5e59efac68 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel1.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNABornIonisationModel1.hh @@ -43,6 +43,7 @@ #include "G4VAtomDeexcitation.hh" #include "G4NistManager.hh" +class G4DNAChemistryManager; class G4DNABornIonisationModel1 : public G4VEmModel { @@ -75,11 +76,12 @@ public: G4int /*level*/, const G4ParticleDefinition*, G4double /*kineticEnergy*/) override; - + void StartTracking(G4Track*) override; + G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell); G4double TransferedEnergy(G4ParticleDefinition * aParticleDefinition, - G4double incomingParticleEnergy, G4int shell, G4double random) ; + G4double incomingParticleEnergy, G4int shell, G4double random); inline void SelectFasterComputation(G4bool input); @@ -93,28 +95,27 @@ protected: private: - G4bool fasterCode; - G4bool statCode; - G4bool spScaling; + G4bool fasterCode{false}; + G4bool statCode{false}; + G4bool spScaling{true}; // Water density table const std::vector* fpMolWaterDensity; // Deexcitation manager to produce fluo photons and e- - G4VAtomDeexcitation* fAtomDeexcitation; + G4VAtomDeexcitation* fAtomDeexcitation; + + const G4Track* fTrack{nullptr}; + G4DNAChemistryManager* fChemistry{nullptr}; + std::map > lowEnergyLimit; std::map > highEnergyLimit; - // TODO : -// std::map > fEnergyLimits; - - G4bool isInitialised{false}; G4int verboseLevel; // Cross section - using MapFile = std::map>; MapFile tableFile; // useful ? @@ -163,29 +164,27 @@ private: VecMap eProbaShellMap[6]; // for cumulated dcs VecMap pProbaShellMap[6]; // for cumulated dcs - // Partial cross section - + // Partial cross section G4int RandomSelect(G4double energy,const G4String& particle ); - }; inline void G4DNABornIonisationModel1::SelectFasterComputation (G4bool input) { - fasterCode = input; + fasterCode = input; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... inline void G4DNABornIonisationModel1::SelectStationary (G4bool input) { - statCode = input; + statCode = input; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... inline void G4DNABornIonisationModel1::SelectSPScaling (G4bool input) { - spScaling = input; + spScaling = input; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh b/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh index 0305f45eeb..73044c2e96 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh @@ -63,12 +63,13 @@ class G4DNAEventScheduler : public IEventScheduler G4DNAEventScheduler& operator=(const G4DNAEventScheduler& right) = delete; void Initialize(const G4DNABoundingBox& boundingBox, G4int pixel); void InitializeInMesh(); - void Voxelizing(); + void Voxelizing(const G4DNABoundingBox& boundingBox); void ReVoxelizing(G4int); void SetEndTime(const G4double&); G4double GetStartTime() const; G4double GetEndTime() const; G4double GetTimeStep() const; + G4double GetGlobalTime() const; void SetStartTime(G4double time); inline void SetVerbose(G4int verbose) { fVerbose = verbose; } @@ -93,7 +94,8 @@ class G4DNAEventScheduler : public IEventScheduler G4int GetPixels() const; void SetUserMeshAction(std::unique_ptr); static G4bool CheckingReactionRadius(G4double resolution); - + void ParticleBasedCounter(); + void ResetCounter(); private: G4int fVerbose = 0; G4bool fInitialized = false; diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAIndependentReactionTimeStepper.hh b/source/processes/electromagnetic/dna/models/include/G4DNAIndependentReactionTimeStepper.hh index 91966f35bf..899b6ff028 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAIndependentReactionTimeStepper.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAIndependentReactionTimeStepper.hh @@ -38,6 +38,7 @@ #include "G4ITTrackHolder.hh" #include "G4ITReaction.hh" #include "G4ReferenceCast.hh" +#include class G4VDNAReactionModel; class G4DNAMolecularReactionTable; @@ -66,20 +67,19 @@ class G4DNAIndependentReactionTimeStepper : public G4VITTimeStepComputer G4VDNAReactionModel* GetReactionModel(); std::unique_ptr FindReaction( - G4ITReactionSet* pReactionSet, const G4double& currentStepTime = 0, - const G4double& previousStepTime = 0, - const G4bool& reachedUserStepTimeLimit = false); + G4ITReactionSet* pReactionSet, + G4double& currentStepTime, + const G4double globalTime); void SetReactionProcess(G4VITReactionProcess* pReactionProcess); void SetVerbose(G4int); private: void InitializeForNewTrack(); class Utils; - void CheckAndRecordResults(const Utils& utils); + void CheckAndRecordResults(G4double reactionTime, const Utils& utils); G4double GetTimeToEncounter(const G4Track& trackA, const G4Track& trackB); - G4bool fHasAlreadyReachedNullTime = false; const G4DNAMolecularReactionTable*& fMolecularReactionTable = reference_cast(fpReactionTable); G4VDNAReactionModel* fReactionModel = nullptr; @@ -88,18 +88,24 @@ class G4DNAIndependentReactionTimeStepper : public G4VITTimeStepComputer G4int fVerbose = 0; G4double fRCutOff = G4IRTUtils::GetRCutOff(); G4VITReactionProcess* fpReactionProcess = nullptr; - std::map fSampledPositions; + std::vector fSecondaries; + std::unordered_map fSampledPositions; std::set fCheckedTracks; + void InitializeReactions(G4double currentGlobalTime); + G4bool fIsInitialized = false; + G4double GetNextReactionTime(); + const G4ITReaction* GetNextReaction(); class Utils { public: Utils(const G4Track& tA, const G4Track& tB); ~Utils() = default; - const G4Track& fTrackA; - const G4Track& fTrackB; - const G4Molecule* fpMoleculeA; - const G4Molecule* fpMoleculeB; + + G4Track* fpTrackA{nullptr}; + G4Track* fpTrackB{nullptr}; + const G4Molecule* fpMoleculeA{nullptr}; + const G4Molecule* fpMoleculeB{nullptr}; }; }; #endif diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAMakeReaction.hh b/source/processes/electromagnetic/dna/models/include/G4DNAMakeReaction.hh index ebeea38fe1..fd15b8b51b 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAMakeReaction.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAMakeReaction.hh @@ -33,6 +33,7 @@ class G4DNAMolecularReactionTable; class G4VDNAReactionModel; class G4ITReactionSet; class G4VITTimeStepComputer; +class G4DNAScavengerMaterial; class G4DNAMakeReaction : public G4VITReactionProcess { @@ -59,5 +60,7 @@ protected: G4VDNAReactionModel* fpReactionModel; G4VITTimeStepComputer* fpTimeStepper; G4double fTimeStep; + G4DNAScavengerMaterial* fpScavengerMaterial{nullptr}; + }; #endif \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationDynamicModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationDynamicModel.hh new file mode 100644 index 0000000000..6e2afc173a --- /dev/null +++ b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationDynamicModel.hh @@ -0,0 +1,177 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created 11.02.2025 V.Ivanchenko & M. Vologzhin +// on base of previous Rudd models +// +// Rudd model of ion ionisation using dynamic mass and charge of an ion +// + +#ifndef G4DNARuddIonisationDynamicModel_h +#define G4DNARuddIonisationDynamicModel_h 1 + +#include "G4VEmModel.hh" +#include "G4VSIntegration.hh" +#include "G4ParticleChangeForGamma.hh" + +#include "G4DNAWaterIonisationStructure.hh" +#include + +class G4DNAChemistryManager; +class G4VAtomDeexcitation; +class G4DNACrossSectionDataSet; +class G4Pow; + +class G4DNARuddIonisationDynamicModel : public G4VEmModel, public G4VSIntegration +{ +public: + + explicit G4DNARuddIonisationDynamicModel(const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNARuddIonisationDynamicModel"); + + ~G4DNARuddIonisationDynamicModel() override; + + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; + + G4double ProbabilityDensityFunction(G4double ekin) override; + + G4double CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double ekin, + G4double emin, + G4double emax) override; + + void SampleSecondaries(std::vector*, + const G4MaterialCutsCouple*, + const G4DynamicParticle*, + G4double tmin, + G4double maxEnergy) override; + + void StartTracking(G4Track*) override; + + G4DNARuddIonisationDynamicModel & operator= + (const G4DNARuddIonisationDynamicModel &right) = delete; + G4DNARuddIonisationDynamicModel(const G4DNARuddIonisationDynamicModel&) = delete; + +private: + + void LoadData(); + + void SetParticle(const G4ParticleDefinition*); + + G4int SelectShell(); + + G4double MaxEnergy(); + + G4double SampleElectronEnergy(); + + G4double CorrectionFactor(); + + G4double S_1s(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, + G4double shellNumber); + + G4double S_2s(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, + G4double shellNumber); + + + G4double S_2p(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, + G4double shellNumber); + + G4double Rh(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, + G4double shellNumber); + +protected: + + G4ParticleChangeForGamma* fParticleChangeForGamma{nullptr}; + +private: + + // Water density table + static const std::vector* fpWaterDensity; + + // data for protons + static G4DNACrossSectionDataSet* xsdata_hydrogen; + static G4DNACrossSectionDataSet* xsdata_helium; + static G4DNACrossSectionDataSet* xsdata_p; + + // run time data + G4DNACrossSectionDataSet* xsdata{nullptr}; + + const G4ParticleDefinition* fParticle{nullptr}; + const G4Track* fTrack{nullptr}; + + G4DNAChemistryManager* fChemistry{nullptr}; + G4Pow* fGpow; + + //deexcitation manager to produce fluo photons and e- + G4VAtomDeexcitation* fAtomDeexcitation{nullptr}; + + // low-energy limit of proton x-section table + G4double fLowestEnergy{0.0}; + + // tracking cut + G4double fAbsorptionEnergy{0.0}; + + G4double fMass{0.0}; + G4double fMassRate{1.0}; + G4double fScaledEnergy{0.0}; + + G4double slaterEffectiveCharge[3] = {0.0}; + G4double sCoefficient[3] = {0.0}; + G4double fTemp[5] = {0.0}; + + G4double F1{0.0}; + G4double F2{0.0}; + G4double alphaConst{0.0}; + G4double bEnergy{0.0}; + G4double u{0.0}; + G4double v{0.0}; + G4double wc{0.0}; + + G4int fSelectedShell{0}; + G4int verbose{0}; + + G4bool isFirst{false}; + G4bool isInitialised{false}; + G4bool isIon{false}; + G4bool isHelium{false}; + G4bool statCode{false}; + G4bool useDNAWaterStructure{true}; + + // energy levels of water molecule + G4DNAWaterIonisationStructure waterStructure; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +#endif diff --git a/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh index 71a8d12e8a..9015aa2247 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh @@ -71,8 +71,6 @@ public: G4double tmin, G4double maxEnergy) override; - void SelectStationary(G4bool val) { statCode = val; }; - // method for unit tests G4double ComputeProbabilityFunction(const G4ParticleDefinition*, G4double kine, G4double deltae, G4int shell); diff --git a/source/processes/electromagnetic/dna/models/sources.cmake b/source/processes/electromagnetic/dna/models/sources.cmake index 0a2eca3b06..7baf920deb 100644 --- a/source/processes/electromagnetic/dna/models/sources.cmake +++ b/source/processes/electromagnetic/dna/models/sources.cmake @@ -3,7 +3,6 @@ # Define the Geant4 Module. geant4_add_module(G4emdna-models PUBLIC_HEADERS - G4ChemEquilibrium.hh G4DNABornAngle.hh G4DNABornExcitationModel.hh G4DNABornExcitationModel1.hh @@ -53,6 +52,7 @@ geant4_add_module(G4emdna-models G4DNARPWBAIonisationModel.hh G4DNARelativisticIonisationModel.hh G4DNARuddAngle.hh + G4DNARuddIonisationDynamicModel.hh G4DNARuddIonisationExtendedModel.hh G4DNARuddIonisationModel.hh G4DNASancheExcitationModel.hh @@ -81,10 +81,10 @@ geant4_add_module(G4emdna-models G4VLEPTSModel.hh G4VUpdateSystemModel.hh SOURCES - G4ChemEquilibrium.cc G4DNABornAngle.cc G4DNABornExcitationModel1.cc G4DNABornExcitationModel2.cc + G4DNABornIonisationModel.cc G4DNABornIonisationModel1.cc G4DNABornIonisationModel2.cc G4DNACPA100ElasticModel.cc @@ -128,6 +128,7 @@ geant4_add_module(G4emdna-models G4DNARPWBAIonisationModel.cc G4DNARelativisticIonisationModel.cc G4DNARuddAngle.cc + G4DNARuddIonisationDynamicModel.cc G4DNARuddIonisationExtendedModel.cc G4DNARuddIonisationModel.cc G4DNASancheExcitationModel.cc @@ -167,6 +168,7 @@ geant4_module_link_libraries(G4emdna-models G4emlowenergy G4emutils G4globman + G4hepnumerics G4heprandom G4leptons G4materials diff --git a/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel.cc new file mode 100644 index 0000000000..fbdcf1e087 --- /dev/null +++ b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel.cc @@ -0,0 +1,386 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// + +#include "G4DNABornIonisationModel.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4VAtomDeexcitation.hh" +#include "G4UAtomicDeexcitation.hh" +#include "G4LossTableManager.hh" +#include "G4EmParameters.hh" +#include "G4NistManager.hh" +#include "G4DNACrossSectionDataSet.hh" +#include "G4DNAChemistryManager.hh" +#include "G4DNAMolecularMaterial.hh" +#include "G4DNABornAngle.hh" +#include "G4DNASamplingTable.hh" +#include "G4LogLogInterpolation.hh" +#include "G4DeltaAngle.hh" +#include "G4Log.hh" +#include "G4Exp.hh" +#include "G4Electron.hh" +#include "G4Proton.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNACrossSectionDataSet* G4DNABornIonisationModel::xsdata_e = nullptr; +G4DNACrossSectionDataSet* G4DNABornIonisationModel::xsdata_p = nullptr; +G4DNASamplingTable* G4DNABornIonisationModel::sampling_e = nullptr; +G4DNASamplingTable* G4DNABornIonisationModel::sampling_p = nullptr; +const std::vector* G4DNABornIonisationModel::fpWaterDensity = nullptr; + +namespace +{ + G4double scaleFactor = (1.e-22 / 3.343) * CLHEP::m*CLHEP::m; + G4double tolerance = 10*CLHEP::eV; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNABornIonisationModel::G4DNABornIonisationModel(const G4ParticleDefinition*, + const G4String& nam) : + G4VEmModel(nam) +{ + SetDeexcitationFlag(true); + + // Define default angular generator + SetAngularDistribution(new G4DNABornAngle()); + + fasterCode = G4EmParameters::Instance()->DNAFast(); + + if (nullptr == xsdata_p) { + isFirst = true; + LoadData(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNABornIonisationModel::~G4DNABornIonisationModel() +{ + if (isFirst) { + delete xsdata_e; + xsdata_e = nullptr; + delete xsdata_p; + xsdata_p = nullptr; + delete sampling_e; + sampling_e = nullptr; + delete sampling_p; + sampling_p = nullptr; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNABornIonisationModel::LoadData() +{ + // initialisation of static data once + G4String fileElectron("dna/sigma_ionisation_e_born"); + xsdata_e = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata_e->LoadData(fileElectron); + + G4String fileProton("dna/sigma_ionisation_p_born"); + xsdata_p = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata_p->LoadData(fileProton); + + // to avoid possible threading problem fill this vector only once + auto water = G4NistManager::Instance()->FindMaterial("G4_WATER"); + fpWaterDensity = + G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(water); + + G4bool verb = true; + sampling_e = new G4DNASamplingTable(100); + sampling_p = new G4DNASamplingTable(100); + + if (fasterCode) { + G4String eb = "/dna/sigmadiff_cumulated_ionisation_e_born.dat"; + sampling_e->LoadData(eb, CLHEP::eV, 1.0, verb); + G4String pb = "/dna/sigmadiff_cumulated_ionisation_p_born.dat"; + sampling_p->LoadData(pb, CLHEP::eV, 1.0, verb); + } else { + G4String eb = "/dna/sigmadiff_ionisation_e_born.dat"; + sampling_e->LoadData(eb, CLHEP::eV, scaleFactor, verb); + G4String pb = "/dna/sigmadiff_ionisation_p_born.dat"; + sampling_p->LoadData(pb, CLHEP::eV, scaleFactor, verb); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNABornIonisationModel::Initialise(const G4ParticleDefinition* p, + const G4DataVector&) +{ + if (isInitialised) { return; } + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; + + if (p == G4Electron::Electron()) { + fParticle = p; + xsdata = xsdata_e; + sampling = sampling_e; + fLowEnergy = 8*CLHEP::eV; + fHighEnergy = 1*CLHEP::MeV; + feLimitEnergy = 19*CLHEP::eV; + fAbsorptionEnergy = 6*CLHEP::eV; + fMass = CLHEP::electron_mass_c2; + isElectron = true; + } else if (p == G4Proton::Proton()) { + fParticle = p; + xsdata = xsdata_p; + sampling = sampling_p; + fLowEnergy = 100*CLHEP::keV; + fHighEnergy = 100*CLHEP::MeV; + fpLimitEnergy = 70*CLHEP::MeV; + fAbsorptionEnergy = 50*CLHEP::eV; + fMass = CLHEP::proton_mass_c2; + isElectron = false; + } else { + G4ExceptionDescription ed; + ed << "Born ionisation model is used for " << p->GetParticleName(); + G4Exception("G4DNABornIonisationModel::Initialise","em0003", + FatalException, ed, " it is not available."); + } + verbose = G4EmParameters::Instance()->WorkerVerbose(); + + // defined stationary mode + statCode = G4EmParameters::Instance()->DNAStationary(); + + // initialise atomic de-excitation + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + + // chemistry + auto chem = G4DNAChemistryManager::Instance(); + if (chem->IsChemistryActivated()) { + fChemistry = chem; + } + + InitialiseIntegrator(0.1, 0.25, 1.05, 1*CLHEP::eV, 0.2*CLHEP::eV, 10*CLHEP::keV); + if (verbose > 1) { + G4cout << "Born ionisation model is initialized for " + << fParticle->GetParticleName() << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNABornIonisationModel::StartTracking(G4Track* track) +{ + fTrack = track; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4DNABornIonisationModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition*, + G4double ekin, G4double, G4double) +{ + // check if model is applicable for given material + G4double density = (material->GetIndex() < fpWaterDensity->size()) + ? (*fpWaterDensity)[material->GetIndex()] : 0.0; + if (0.0 == density) { return 0.0; } + + // check on kinetic energy (not scaled energy) to stop low-energy ion + const G4double xSecMax = 1.e+10*CLHEP::barn; + if (ekin < fAbsorptionEnergy) { return xSecMax; } + + G4double e = std::min(ekin, fHighEnergy); + G4double sigma = (e > fLowEnergy) ? xsdata->FindValue(e) + : xsdata->FindValue(fLowEnergy) * e / fLowEnergy; + + sigma *= density; + + // ICRU49 electronic SP scaling - ZF, SI + if (!isElectron && spScaling && e < fpLimitEnergy) { + const G4double A = 1.39241700556072800000e-9; + const G4double B = -8.52610412942622630000e-2; + sigma *= G4Exp(A*(ekin/CLHEP::eV) + B); + } + if (verbose > 1) { + G4cout << "G4DNABornIonisationModel for " << fParticle->GetParticleName() + << " Ekin(keV)=" << ekin/CLHEP::keV + << " sigma(cm^2)=" << sigma/CLHEP::cm2 << G4endl; + } + return sigma; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNABornIonisationModel::SampleSecondaries(std::vector* fvect, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* dynParticle, + G4double, G4double) +{ + fPrimaryEnergy = dynParticle->GetKineticEnergy(); + // proton shoud be stopped - check on kinetic energy + // electrons never have such low energy + if (fPrimaryEnergy <= fAbsorptionEnergy) { + fParticleChangeForGamma->SetProposedKineticEnergy(0.); + fParticleChangeForGamma->ProposeTrackStatus(fStopButAlive); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(fPrimaryEnergy); + return; + } + + fSelectedShell = SelectShell(); + G4double bindingEnergy = waterStructure.IonisationEnergy(fSelectedShell); + + //SI: additional protection if tcs interpolation method is modified + if (fPrimaryEnergy < bindingEnergy) { return; } + + // compute max energy + if (isElectron) { + fMaxEnergy = 0.5*(fPrimaryEnergy - bindingEnergy); + } else { + G4double tau = fPrimaryEnergy/fMass; + fMaxEnergy = 2.0*CLHEP::electron_mass_c2*tau*(tau + 2.0); + } + // SI: The following protection is necessary to avoid infinite loops : + // e- ionisation cross section has non zero partial xs at 18 eV for shell 2. + // e- has zero cumulated partial xs at 18 eV for shell 2. + // This is due to the fact that the max allowed transfered energy is + // (18+10.79)/2=17.025 eV and only transfered energies strictly above this + // value have non zero partial cross section starting at transition energy 17.12 eV. + if (fasterCode && isElectron && 2 == fSelectedShell && fPrimaryEnergy < feLimitEnergy) { + do { + fSelectedShell = SelectShell(); + } while (2 == fSelectedShell); + } + + G4double esec = fasterCode ? SampleCumulative() : SampleDifferential(); + G4double esum = 0.0; + + // sample deexcitation + // here we assume that H2O electronic levels are the same as Oxygen. + // this can be considered true with a rough 10% error in energy on K-shell, + G4int Z = 8; + G4ThreeVector deltaDir = + GetAngularDistribution()->SampleDirectionForShell(dynParticle, esec, Z, + fSelectedShell, + couple->GetMaterial()); + + // SI: only atomic deexcitation from K shell is considered + if (fAtomDeexcitation != nullptr && fSelectedShell == 4) { + auto as = G4AtomicShellEnumerator(0); + auto ashell = fAtomDeexcitation->GetAtomicShell(Z, as); + fAtomDeexcitation->GenerateParticles(fvect, ashell, Z, 0, 0); + + // compute energy sum from de-excitation + for (auto const & ptr : *fvect) { + esum += ptr->GetKineticEnergy(); + } + } + // check energy balance + // remaining excitation energy of water molecule + G4double exc = std::max(bindingEnergy - esum, 0.0); + + // remaining projectile energy + G4double scatteredEnergy = fPrimaryEnergy - bindingEnergy - esec; + if (scatteredEnergy < -tolerance || exc < -tolerance) { + G4cout << "G4DNABornIonisationModel::SampleSecondaries: " + << "final E(keV)=" << scatteredEnergy/CLHEP::keV << " Ein(keV)=" + << fPrimaryEnergy/CLHEP::keV << " " << fParticle->GetParticleName() + << " Edelta(keV)=" << esec/CLHEP::keV << " MeV, Exc(keV)=" << exc/CLHEP::keV + << G4endl; + } + scatteredEnergy = std::max(scatteredEnergy, 0.0); + + // projectile + if (!statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(exc); + } else { + fParticleChangeForGamma->SetProposedKineticEnergy(fPrimaryEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(fPrimaryEnergy - scatteredEnergy); + } + + // delta-electron + auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDir, esec); + fvect->push_back(dp); + + // create radical + if (nullptr != fChemistry) { + fChemistry->CreateWaterMolecule(eIonizedMolecule, fSelectedShell, fTrack); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int G4DNABornIonisationModel::SelectShell() +{ + G4double sum = 0.0; + G4double xs; + G4double e = std::min(fPrimaryEnergy, fHighEnergy); + for (G4int i=0; i<5; ++i) { + auto ptr = xsdata->GetComponent(i); + xs = (e > fLowEnergy) ? ptr->FindValue(e) + : ptr->FindValue(fLowEnergy) * e/fLowEnergy; + sum += xs; + fTemp[i] = sum; + } + sum *= G4UniformRand(); + for (G4int i=0; i<5; ++i) { + if (sum <= fTemp[i]) { return i; } + } + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNABornIonisationModel::SampleCumulative() +{ + G4double e = sampling->SampleCumulative(fPrimaryEnergy, fSelectedShell); + if (verbose > 1) { + G4cout << "G4DNABornIonisationModel::SampleCumulative: " + << fParticle->GetParticleName() + << " Ekin(keV)=" << fPrimaryEnergy/CLHEP::keV + << " Ee(keV)=" << e/CLHEP::keV << G4endl; + } + return e; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNABornIonisationModel::SampleDifferential() +{ + G4double xs = ComputeIntegral(0.0, fMaxEnergy); + G4double e = (xs > 0.0) ? SampleValue() : G4UniformRand()*fMaxEnergy; + if (verbose > 1) { + G4cout << "G4DNABornIonisationModel::SampleDifferential: " + << fParticle->GetParticleName() + << " Ekin(keV)=" << fPrimaryEnergy/CLHEP::keV + << " Ee(keV)=" << e/CLHEP::keV << G4endl; + } + return e; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNABornIonisationModel::ProbabilityDensityFunction(G4double ekin) +{ + return sampling->GetValue(fPrimaryEnergy, ekin, fSelectedShell); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel1.cc b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel1.cc index f4b8c6f28c..4f88c717e6 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel1.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel1.cc @@ -29,6 +29,7 @@ #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4UAtomicDeexcitation.hh" +#include "G4EmParameters.hh" #include "G4LossTableManager.hh" #include "G4DNAChemistryManager.hh" #include "G4DNAMolecularMaterial.hh" @@ -68,17 +69,7 @@ G4VEmModel(nam) // Define default angular generator SetAngularDistribution(new G4DNABornAngle()); - // Selection of computation method - - fasterCode = false; - - // Selection of stationary mode - - statCode = false; - - // Selection of SP scaling - - spScaling = true; + fasterCode = G4EmParameters::Instance()->DNAFast(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -123,7 +114,7 @@ void G4DNABornIonisationModel1::Initialise(const G4ParticleDefinition* particle, G4String proton; G4double scaleFactor = (1.e-22 / 3.343) * m*m; - + const char *path = G4FindDataDir("G4LEDATA"); // *** ELECTRON @@ -295,25 +286,36 @@ void G4DNABornIonisationModel1::Initialise(const G4ParticleDefinition* particle, << G4endl; } - // Initialize water density pointer - + if (isInitialised) { return; } + fParticleChangeForGamma = GetParticleChangeForGamma(); + + // Initialize water density pointer fpMolWaterDensity = G4DNAMolecularMaterial::Instance()-> GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); - // AD + statCode = G4EmParameters::Instance()->DNAStationary(); - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + // AD + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - // - - if (isInitialised) - { return;} - fParticleChangeForGamma = GetParticleChangeForGamma(); + // chemistry + auto chem = G4DNAChemistryManager::Instance(); + if (chem->IsChemistryActivated()) { + fChemistry = chem; + } isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +void G4DNABornIonisationModel1::StartTracking(G4Track* track) +{ + fTrack = track; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + G4double G4DNABornIonisationModel1::CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* particleDefinition, G4double ekin, @@ -450,20 +452,19 @@ void G4DNABornIonisationModel1::SampleSecondaries(std::vectorGetDefinition()==G4Electron::ElectronDefinition()); - + } else { + do { + ionizationShell = RandomSelect(k,particleName); + } while (k<19*eV && ionizationShell==2 && particle->GetDefinition()==G4Electron::ElectronDefinition()); + } G4double bindingEnergy = 0; bindingEnergy = waterStructure.IonisationEnergy(ionizationShell); @@ -481,8 +482,6 @@ void G4DNABornIonisationModel1::SampleSecondaries(std::vectorGetDefinition(),k,ionizationShell); } - // - G4int Z = 8; G4ThreeVector deltaDirection = @@ -587,17 +586,10 @@ void G4DNABornIonisationModel1::SampleSecondaries(std::vectorProposeLocalEnergyDeposit(k-scatteredEnergy); } - // TEST ////////////////////////// - // if (secondaryKinetic<0) abort(); - // if (scatteredEnergy<0) abort(); - // if (k-scatteredEnergy-secondaryKinetic-deexSecEnergy<0) abort(); - // if (k-scatteredEnergy<0) abort(); - ///////////////////////////////// - - const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); - G4DNAChemistryManager::Instance()->CreateWaterMolecule(eIonizedMolecule, - ionizationShell, - theIncomingTrack); + // create radical + if (nullptr != fChemistry) { + fChemistry->CreateWaterMolecule(eIonizedMolecule, ionizationShell, fTrack); + } } } @@ -696,50 +688,6 @@ G4double G4DNABornIonisationModel1::RandomizeEjectedElectronEnergy(G4ParticleDef return 0; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -// The following section is not used anymore but is kept for memory -// GetAngularDistribution()->SampleDirectionForShell is used instead - -/* - void G4DNABornIonisationModel1::RandomizeEjectedElectronDirection(G4ParticleDefinition* particleDefinition, - G4double k, - G4double secKinetic, - G4double & cosTheta, - G4double & phi ) - { - if (particleDefinition == G4Electron::ElectronDefinition()) - { - phi = twopi * G4UniformRand(); - if (secKinetic < 50.*eV) cosTheta = (2.*G4UniformRand())-1.; - else if (secKinetic <= 200.*eV) - { - if (G4UniformRand() <= 0.1) cosTheta = (2.*G4UniformRand())-1.; - else cosTheta = G4UniformRand()*(std::sqrt(2.)/2); - } - else - { - G4double sin2O = (1.-secKinetic/k) / (1.+secKinetic/(2.*electron_mass_c2)); - cosTheta = std::sqrt(1.-sin2O); - } - } - - else if (particleDefinition == G4Proton::ProtonDefinition()) - { - G4double maxSecKinetic = 4.* (electron_mass_c2 / proton_mass_c2) * k; - phi = twopi * G4UniformRand(); - - // cosTheta = std::sqrt(secKinetic / maxSecKinetic); - - // Restriction below 100 eV from Emfietzoglou (2000) - - if (secKinetic>100*eV) cosTheta = std::sqrt(secKinetic / maxSecKinetic); - else cosTheta = (2.*G4UniformRand())-1.; - - } - } - */ - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4DNABornIonisationModel1::DifferentialCrossSection(G4ParticleDefinition * particleDefinition, G4double k, diff --git a/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel2.cc b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel2.cc index 198ded6e88..ca48d215ee 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel2.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNABornIonisationModel2.cc @@ -32,6 +32,7 @@ #include "G4LossTableManager.hh" #include "G4DNAChemistryManager.hh" #include "G4DNAMolecularMaterial.hh" +#include "G4EmParameters.hh" #include "G4DNABornAngle.hh" #include "G4DeltaAngle.hh" #include "G4Exp.hh" @@ -91,13 +92,7 @@ G4VEmModel(nam) G4DNABornIonisationModel2::~G4DNABornIonisationModel2() { - // Cross section - - - delete fTableData; - - // Final state - + delete fTableData; fVecm.clear(); } @@ -248,13 +243,14 @@ void G4DNABornIonisationModel2::Initialise(const G4ParticleDefinition* particle, fpMolWaterDensity = G4DNAMolecularMaterial::Instance()-> GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); - // AD - - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - if (isInitialised) { return;} fParticleChangeForGamma = GetParticleChangeForGamma(); + statCode = G4EmParameters::Instance()->DNAStationary(); + + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + isInitialised = true; } diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc b/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc index 39b9100715..13f7e18274 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc @@ -44,79 +44,58 @@ G4DNAEventScheduler::G4DNAEventScheduler() , fpUpdateSystem(new G4DNAUpdateSystemModel()) {} -void G4DNAEventScheduler::ClearAndReChargeCounter() -{ - fCounterMap.clear(); - if(fTimeToRecord.empty()) - { - G4String WarMessage = "fTimeToRecord is empty "; - G4Exception("G4DNAEventScheduler::ClearAndReChargeCounter()", - "TimeToRecord is empty", JustWarning, WarMessage); - } - fLastRecoredTime = fTimeToRecord.begin(); - - if(G4VMoleculeCounter::Instance()->InUse()) // copy from MoleculeCounter - { - G4MoleculeCounter::RecordedMolecules species; - species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); - if(species.get() == nullptr) - { - return; - } - if(species->empty()) - { - G4MoleculeCounter::Instance()->ResetCounter(); - return; - } - for(auto time_mol : fTimeToRecord) - { - if(time_mol > fStartTime) - { - continue; - } - - for(auto molecule : *species) - { - G4int n_mol = G4MoleculeCounter::Instance()->GetNMoleculesAtTime( - molecule, time_mol); - - if(n_mol < 0) - { - G4cerr << "G4DNAEventScheduler::ClearAndReChargeCounter() ::N " - "molecules not valid < 0 " - << G4endl; - G4Exception("", "N<0", FatalException, ""); - } - fCounterMap[time_mol][molecule] = n_mol; - } - fLastRecoredTime++; - } - G4MoleculeCounter::Instance()->ResetCounter(); // reset - G4MoleculeCounter::Instance()->Use(false); // no more used - } - else - { - G4ExceptionDescription exceptionDescription; - exceptionDescription << "G4VMoleculeCounter is not used"; - G4Exception("G4DNAEventScheduler::ClearAndReChargeCounter()", - "G4DNAEventScheduler010", JustWarning, exceptionDescription); - } -} - [[maybe_unused]] void G4DNAEventScheduler::AddTimeToRecord(const G4double& time) { if(fTimeToRecord.find(time) == fTimeToRecord.end()) { fTimeToRecord.insert(time); } + fLastRecoredTime = fTimeToRecord.begin(); } G4DNAEventScheduler::~G4DNAEventScheduler() = default; -void G4DNAEventScheduler::Voxelizing() +void G4DNAEventScheduler::Voxelizing(const G4DNABoundingBox& boundingBox) { - auto pMainList = G4ITTrackHolder::Instance()->GetMainList(); std::map TrackKeyMap; + if(fpMesh == nullptr){ + fpMesh = std::make_unique(boundingBox, fPixel); + }else + { + auto newMesh = new G4DNAMesh(fpMesh->GetBoundingBox(), fPixel); + + auto begin = fpMesh->begin();//old mesh, should be homogeneous + auto end = fpMesh->end(); + for(; begin != end; begin++) + { + auto numberOfBoxes = fPixel*fPixel*fPixel; + const auto& mapData = std::get<2>(*begin); + for(auto it : mapData) + { + if(it.second == 0) continue; + + G4int base_mol = std::floor((G4double)it.second / numberOfBoxes); + G4int remainder = (G4int)it.second % numberOfBoxes; + for(G4int i = 0; i < remainder; i++) + { + auto oldIndex = std::get<0>(*begin); + auto idx = newMesh->GetRandomIndex(oldIndex, fpMesh->GetResolution()); + TrackKeyMap[idx][it.first] += base_mol + 1; + } + } + } + fpMesh.reset(newMesh); + } + + if(!CheckingReactionRadius(fpMesh->GetResolution())) + { + G4String WarMessage = "resolution is not good : " + + std::to_string(fpMesh->GetResolution() / nm); + G4Exception("G4DNAEventScheduler::InitializeInMesh()", "WrongResolution", + JustWarning, WarMessage); + } + + auto pMainList = G4ITTrackHolder::Instance()->GetMainList(); for(auto track : *pMainList) { auto molType = GetMolecule(track)->GetMolecularConfiguration(); @@ -146,7 +125,9 @@ void G4DNAEventScheduler::Voxelizing() { TrackKeyMap[key][molType] = 1; } + track->SetTrackStatus(fStopAndKill);//kill the track } + G4ITReactionSet::Instance()->CleanAllReaction(); for(auto& it : TrackKeyMap) { @@ -212,9 +193,12 @@ void G4DNAEventScheduler::Reset() fRunning = true; fReactionNumber = 0; fJumpingNumber = 0; - fpEventSet->RemoveEventSet(); - fpMesh->Reset(); + if(fpMesh != nullptr) { + fpMesh->Reset(); + fpMesh.reset(); + //reset for each event + } fpGillespieReaction->ResetEquilibrium(); } @@ -224,16 +208,6 @@ void G4DNAEventScheduler::Initialize(const G4DNABoundingBox& boundingBox, if(!fInitialized) { fPixel = pixel; - fpMesh = std::make_unique(boundingBox, pixel); - - if(!CheckingReactionRadius(fpMesh->GetResolution())) - { - G4String WarMessage = "resolution is not good : " + - std::to_string(fpMesh->GetResolution() / nm); - G4Exception("G4DNAEventScheduler::InitializeInMesh()", "WrongResolution", - JustWarning, WarMessage); - } - // Scavenger(); auto pScavengerMaterial = dynamic_cast( @@ -250,14 +224,17 @@ void G4DNAEventScheduler::Initialize(const G4DNABoundingBox& boundingBox, } } - Voxelizing(); + Voxelizing(boundingBox); + fEndTime = std::min(G4ITTrackHolder::Instance()->GetNextTime(), G4Scheduler::Instance()->GetEndTime()-1*ps); + + //G4cout<<"fEndTime" <GetNextTime() : "<GetNextTime()<SetVoxelMesh(*fpMesh); fpGillespieReaction->SetEventSet(fpEventSet.get()); fpGillespieReaction->SetTimeStep(0);// reset fTimeStep = 0 in fpGillespieReaction fpGillespieReaction->Initialize(); fpGillespieReaction->CreateEvents(); fpUpdateSystem->SetMesh(fpMesh.get()); - ClearAndReChargeCounter(); fInitialized = true; } @@ -305,6 +282,8 @@ void G4DNAEventScheduler::ResetInMesh() G4double G4DNAEventScheduler::GetStartTime() const { return fStartTime; } +G4double G4DNAEventScheduler::GetGlobalTime() const { return fGlobalTime; } + G4double G4DNAEventScheduler::GetEndTime() const { return fEndTime; } [[maybe_unused]] G4double G4DNAEventScheduler::GetTimeStep() const @@ -338,6 +317,7 @@ void G4DNAEventScheduler::Run() { RunInMesh(); } + fInitialized = false; if(fVerbose > 2) { if(!fRunning) @@ -361,7 +341,6 @@ void G4DNAEventScheduler::Run() } G4cout << " Computing Time : " << localtimer << G4endl; } - Reset(); } void G4DNAEventScheduler::RunInMesh() @@ -377,7 +356,7 @@ void G4DNAEventScheduler::RunInMesh() << " the Mesh has " << fPixel << " x " << fPixel << " x " << fPixel << " voxels with Resolution " << G4BestUnit(resolution, "Length") << " during next " - << G4BestUnit(resolution * resolution * C / (6 * D), "Time") + << G4BestUnit(fGlobalTime + resolution * resolution * C / (6 * D), "Time") << G4endl; } @@ -501,6 +480,8 @@ void G4DNAEventScheduler::Stepping() // this event loop // get selected time step fTimeStep = (*selected)->GetTime(); + if(fTimeStep + fStartTime >fEndTime){ return;} + // selected data auto pJumping = (*selected)->GetJumpingData(); auto pReaction = (*selected)->GetReactionData(); @@ -564,9 +545,15 @@ void G4DNAEventScheduler::SetEndTime(const G4double& endTime) void G4DNAEventScheduler::RecordTime() { + if(fLastRecoredTime == fTimeToRecord.end()) + { + return; + } auto recordTime = *fLastRecoredTime; if(fGlobalTime >= recordTime && fCounterMap[recordTime].empty()) { + if(fpMesh == nullptr) return; + //G4cout<<"recordTime for meso: "<begin(); auto end = fpMesh->end(); for(; begin != end; begin++) @@ -671,4 +658,63 @@ void G4DNAEventScheduler::LastRegisterForCounter() } } +} + +void G4DNAEventScheduler::ParticleBasedCounter() { + if(fLastRecoredTime == fTimeToRecord.end()) + { + return; + } + auto recordTime = *fLastRecoredTime; + if (recordTime < G4Scheduler::Instance()->GetGlobalTime()) { + + //check meso if exist + + if(fpMesh != nullptr){ + //G4cout<<"there is a mesh"<begin(); + auto end = fpMesh->end(); + for(; begin != end; begin++) + { + const auto& mapData = std::get<2>(*begin); + if(mapData.empty()) + { + continue; + } + for(const auto& it : mapData) + { + fCounterMap[recordTime][it.first] += it.second; + } + } + } + + //then particle based + auto pMainList = G4ITTrackHolder::Instance()->GetMainList(); + for (auto track: *pMainList) { + auto molType = GetMolecule(track)->GetMolecularConfiguration(); + + auto pScavengerMaterial = + dynamic_cast(G4Scheduler::Instance()->GetScavengerMaterial()); + if (pScavengerMaterial != nullptr + && pScavengerMaterial->find(molType)) // avoid voxelize the scavenger + { + continue; + } + fCounterMap[recordTime][molType]++; + } + fLastRecoredTime++; + //PrintRecordTime(); + } +} + +void G4DNAEventScheduler::ResetCounter() +{ + fCounterMap.clear(); + if(fTimeToRecord.empty()) + { + G4String WarMessage = "fTimeToRecord is empty "; + G4Exception("G4DNAEventScheduler::ClearAndReChargeCounter()", + "TimeToRecord is empty", JustWarning, WarMessage); + } + fLastRecoredTime = fTimeToRecord.begin(); } \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAIRT.cc b/source/processes/electromagnetic/dna/models/src/G4DNAIRT.cc index 813b774628..94dfce2281 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAIRT.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAIRT.cc @@ -44,6 +44,7 @@ #include "G4ITTrackHolder.hh" #include "G4ITReaction.hh" #include "G4Scheduler.hh" +#include "G4MoleculeCounterManager.hh" using namespace std; @@ -399,7 +400,10 @@ std::unique_ptr G4DNAIRT::MakeReaction(const G4Track& trackA const auto pMoleculeA = GetMolecule(trackA)->GetMolecularConfiguration(); const auto pMoleculeB = GetMolecule(trackB)->GetMolecularConfiguration(); const auto pReactionData = fMolReactionTable->GetReactionData(pMoleculeA, pMoleculeB); - + // Notify molecule (reaction) counter + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { + G4MoleculeCounterManager::Instance()->RecordReaction(pReactionData, trackA.GetGlobalTime()); + } G4double globalTime = G4Scheduler::Instance()->GetGlobalTime(); G4double effectiveReactionRadius = pReactionData->GetEffectiveReactionRadius(); diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAIndependentReactionTimeStepper.cc b/source/processes/electromagnetic/dna/models/src/G4DNAIndependentReactionTimeStepper.cc index 4e4eb3ff35..e66dbe7f06 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAIndependentReactionTimeStepper.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAIndependentReactionTimeStepper.cc @@ -45,10 +45,11 @@ using namespace std; using namespace CLHEP; G4DNAIndependentReactionTimeStepper::Utils::Utils(const G4Track& trackA, const G4Track& trackB) - : fTrackA(trackA), fTrackB(trackB) + : fpTrackA(const_cast(&trackA)), fpTrackB(const_cast(&trackB)) { fpMoleculeA = GetMolecule(trackA); - fpMoleculeB = GetMolecule(trackA); + fpMoleculeB = GetMolecule(trackB); + fUserMinTimeStep = 1 * CLHEP::ps; } G4DNAIndependentReactionTimeStepper::G4DNAIndependentReactionTimeStepper() @@ -58,30 +59,31 @@ G4DNAIndependentReactionTimeStepper::G4DNAIndependentReactionTimeStepper() void G4DNAIndependentReactionTimeStepper::Prepare() { - G4VITTimeStepComputer::Prepare(); - fSampledPositions.clear(); - BuildChemicalMoleculeFinder() + //fVerbose = G4Scheduler::Instance()->GetVerbose(); + if (G4Scheduler::Instance()->IsInteractionStep()) { + fReactionSet->CleanAllReaction(); + fIsInitialized = false; + fSampledPositions.clear(); + fSecondaries.clear(); + InitializeForNewTrack(); + } } void G4DNAIndependentReactionTimeStepper::InitializeForNewTrack() { - if (fReactants != nullptr) { - fReactants.reset(); - } - fSampledMinTimeStep = DBL_MAX; - fHasAlreadyReachedNullTime = false; + fCheckedTracks.clear(); + BuildChemicalMoleculeFinder() } G4double G4DNAIndependentReactionTimeStepper::CalculateStep(const G4Track& trackA, - const G4double& userMinTimeStep) + const G4double& /*userMinTimeStep*/) { auto pMoleculeA = GetMolecule(trackA); - InitializeForNewTrack(); - fUserMinTimeStep = userMinTimeStep; + fSampledMinTimeStep = DBL_MAX; fCheckedTracks.insert(trackA.GetTrackID()); #ifdef G4VERBOSE - if (fVerbose != 0) { + if (fVerbose > 1) { G4cout << "________________________________________________________________" "_______" << G4endl; @@ -96,7 +98,7 @@ G4double G4DNAIndependentReactionTimeStepper::CalculateStep(const G4Track& track const auto pReactantList = fMolecularReactionTable->CanReactWith(pMolConfA); if (pReactantList == nullptr) { - if(fVerbose > 1) { + if (fVerbose > 1) { G4ExceptionDescription msg; msg << "G4DNAIndependentReactionTimeStepper::CalculateStep will return infinity " "for the reaction because the molecule " @@ -111,7 +113,7 @@ G4double G4DNAIndependentReactionTimeStepper::CalculateStep(const G4Track& track auto nbReactives = (G4int)pReactantList->size(); if (nbReactives == 0) { - if(fVerbose != 0){ + if (fVerbose > 1) { G4ExceptionDescription msg; msg << "G4DNAIndependentReactionTimeStepper::CalculateStep will " "return infinity " @@ -125,13 +127,10 @@ G4double G4DNAIndependentReactionTimeStepper::CalculateStep(const G4Track& track } return DBL_MAX; } - fReactants = std::make_shared>(); fReactionModel->Initialise(pMolConfA, trackA); for (G4int i = 0; i < nbReactives; ++i) { auto pMoleculeB = (*pReactantList)[i]; G4int key = pMoleculeB->GetMoleculeID(); - - // fRCutOff = G4IRTUtils::GetRCutOff(1 * ps); fRCutOff = G4IRTUtils::GetRCutOff(); //______________________________________________________________ // Retrieve reaction range @@ -157,115 +156,107 @@ G4double G4DNAIndependentReactionTimeStepper::CalculateStep(const G4Track& track "::CalculateStep()", "G4DNAIndependentReactionTimeStepper007", FatalException, exceptionDescription); } + if (fCheckedTracks.find(pTrackB->GetTrackID()) != fCheckedTracks.end()) { + continue; + } + + Utils utils(trackA, *pTrackB); + auto pMolB = GetMolecule(pTrackB); + auto pMolConfB = pMolB->GetMolecularConfiguration(); + G4double distance = (trackA.GetPosition() - pTrackB->GetPosition()).mag(); + if (distance * distance < Reff * Reff) { + auto reactionData = fMolecularReactionTable->GetReactionData(pMolConfA, pMolConfB); + if (G4Scheduler::Instance()->GetGlobalTime() == G4Scheduler::Instance()->GetStartTime()) { + if (reactionData->GetProbability() > G4UniformRand()) { + fSampledMinTimeStep = 0.; + } + } + } else { - if (fCheckedTracks.find(pTrackB->GetTrackID()) != fCheckedTracks.end()) { + G4double tempMinET = GetTimeToEncounter(trackA, *pTrackB); + if (tempMinET < 0 || tempMinET > G4Scheduler::Instance()->GetEndTime()) { continue; } - - Utils utils(trackA, *pTrackB); - - auto pMolB = GetMolecule(pTrackB); - auto pMolConfB = pMolB->GetMolecularConfiguration(); - G4double distance = (trackA.GetPosition() - pTrackB->GetPosition()).mag(); - if (distance * distance < Reff * Reff) { - auto reactionData = fMolecularReactionTable->GetReactionData(pMolConfA, pMolConfB); - if (G4Scheduler::Instance()->GetGlobalTime() == G4Scheduler::Instance()->GetStartTime()) { - if (reactionData->GetProbability() > G4UniformRand()) { - if (!fHasAlreadyReachedNullTime) { - fReactants->clear(); - fHasAlreadyReachedNullTime = true; - } - fSampledMinTimeStep = 0.; - CheckAndRecordResults(utils); - } - } - } - else { - G4double tempMinET = GetTimeToEncounter(trackA, *pTrackB); - if (tempMinET < 0 || tempMinET > G4Scheduler::Instance()->GetEndTime()) { - continue; - } - if (tempMinET >= fSampledMinTimeStep) { - continue; - } - fSampledMinTimeStep = tempMinET; - fReactants->clear(); - CheckAndRecordResults(utils); + fSampledMinTimeStep = tempMinET; + if (tempMinET < fUserMinTimeStep) { + fSampledMinTimeStep = fUserMinTimeStep; } } + CheckAndRecordResults(fSampledMinTimeStep, utils); } } - -#ifdef G4VERBOSE - if (fVerbose != 0) { - G4cout << "G4DNAIndependentReactionTimeStepper::CalculateStep will finally " - "return :" - << G4BestUnit(fSampledMinTimeStep, "Time") << G4endl; - - if (fVerbose > 1) { - G4cout << "Selected reactants for trackA: " << pMoleculeA->GetName() << " (" - << trackA.GetTrackID() << ") are: "; - - vector::iterator it; - for (it = fReactants->begin(); it != fReactants->end(); it++) { - G4Track* trackB = *it; - G4cout << GetMolecule(trackB)->GetName() << " (" << trackB->GetTrackID() << ") \t "; - } - G4cout << G4endl; - } - } -#endif return fSampledMinTimeStep; } -void G4DNAIndependentReactionTimeStepper::CheckAndRecordResults(const Utils& utils) +void G4DNAIndependentReactionTimeStepper::CheckAndRecordResults(G4double reactionTime, + const Utils& utils) { - if (utils.fTrackB.GetTrackStatus() != fAlive) { + if (utils.fpTrackB->GetTrackStatus() != fAlive) { return; } - if (&utils.fTrackB == &utils.fTrackA) { + if (&utils.fpTrackB == &utils.fpTrackA) { G4ExceptionDescription msg; msg << "A track is reacting with itself" - " (which is impossible) ie fpTrackA == trackB" - << G4endl; + " (which is impossible) ie fpTrackA == trackB" + << G4endl; msg << "Molecule A is of type : " << utils.fpMoleculeA->GetName() - << " with trackID : " << utils.fTrackA.GetTrackID() - << " and B : " << utils.fpMoleculeB->GetName() - << " with trackID : " << utils.fTrackB.GetTrackID() << G4endl; + << " with trackID : " << utils.fpTrackA->GetTrackID() + << " and B : " << utils.fpMoleculeB->GetName() + << " with trackID : " << utils.fpTrackB->GetTrackID() << G4endl; G4Exception("G4DNAIndependentReactionTimeStepper::RetrieveResults", - "G4DNAIndependentReactionTimeStepper003", FatalErrorInArgument, - msg); + "G4DNAIndependentReactionTimeStepper003", FatalErrorInArgument, msg); } - if (fabs(utils.fTrackB.GetGlobalTime() - utils.fTrackA.GetGlobalTime()) - > utils.fTrackA.GetGlobalTime() * (1. - 1. / 100)) + if (fabs(utils.fpTrackB->GetGlobalTime() - utils.fpTrackA->GetGlobalTime()) + > utils.fpTrackA->GetGlobalTime() * (1. - 1. / 100)) { // DEBUG G4ExceptionDescription msg; msg << "The interacting tracks are not synchronized in time" << G4endl; msg << "trackB->GetGlobalTime() != fpTrackA.GetGlobalTime()" << G4endl; - msg << "fpTrackA : trackID : " << utils.fTrackA.GetTrackID() - << "\t Name :" << utils.fpMoleculeA->GetName() - << "\t fpTrackA->GetGlobalTime() = " - << G4BestUnit(utils.fTrackA.GetGlobalTime(), "Time") << G4endl; + msg << "fpTrackA : trackID : " << utils.fpTrackA->GetTrackID() + << "\t Name :" << utils.fpMoleculeA->GetName() + << "\t fpTrackA->GetGlobalTime() = " << G4BestUnit(utils.fpTrackA->GetGlobalTime(), "Time") + << G4endl; - msg << "trackB : trackID : " << utils.fTrackB.GetTrackID() - << "\t Name :" << utils.fpMoleculeB->GetName() - << "\t trackB->GetGlobalTime() = " - << G4BestUnit(utils.fTrackB.GetGlobalTime(), "Time") << G4endl; + msg << "trackB : trackID : " << utils.fpTrackB->GetTrackID() + << "\t Name :" << utils.fpMoleculeB->GetName() + << "\t trackB->GetGlobalTime() = " << G4BestUnit(utils.fpTrackB->GetGlobalTime(), "Time") + << G4endl; G4Exception("G4DNAIndependentReactionTimeStepper::RetrieveResults", - "G4DNAIndependentReactionTimeStepper004", FatalErrorInArgument, - msg); + "G4DNAIndependentReactionTimeStepper004", FatalErrorInArgument, msg); } - fReactants->push_back(const_cast(&utils.fTrackB)); + if (reactionTime < 0) { + // DEBUG + G4ExceptionDescription msg; + msg << "The interacting tracks are not in good time" << G4endl; + + msg << "fpTrackA : trackID : " << utils.fpTrackA->GetTrackID() + << "\t Name :" << utils.fpMoleculeA->GetName() + << "\t fpTrackA->GetGlobalTime() = " << G4BestUnit(utils.fpTrackA->GetGlobalTime(), "Time") + << G4endl; + + msg << "trackB : trackID : " << utils.fpTrackB->GetTrackID() + << "\t Name :" << utils.fpMoleculeB->GetName() + << "\t trackB->GetGlobalTime() = " << G4BestUnit(utils.fpTrackB->GetGlobalTime(), "Time") + << G4endl; + + G4Exception("G4DNAIndependentReactionTimeStepper::CheckAndRecordResults", + "G4DNAIndependentReactionTimeStepper1", FatalErrorInArgument, msg); + } + + G4double globalTime = G4Scheduler::Instance()->GetGlobalTime(); + + fReactionSet->AddReaction(reactionTime + globalTime, utils.fpTrackA, utils.fpTrackB); + fSampledPositions[utils.fpTrackA->GetTrackID()] = utils.fpTrackA->GetPosition(); + fSampledPositions[utils.fpTrackB->GetTrackID()] = utils.fpTrackB->GetPosition(); } std::unique_ptr G4DNAIndependentReactionTimeStepper::FindReaction( - G4ITReactionSet* pReactionSet, const G4double& currentStepTime, - const G4double& /*previousStepTime*/, const G4bool& /*reachedUserStepTimeLimit*/) + G4ITReactionSet* pReactionSet, G4double& currentStepTime, const G4double globalTime) { if (pReactionSet == nullptr) { return nullptr; @@ -278,16 +269,13 @@ std::unique_ptr G4DNAIndependentReactionTimeStepper::FindRea for (auto reaction_i = reactionPerTime.begin(); reaction_i != reactionPerTime.end(); reaction_i = reactionPerTime.begin()) { - if ((*reaction_i)->GetTime() > currentStepTime) { - fReactionSet->CleanAllReaction(); - return nullptr; - } - G4Track* pTrackA = (*reaction_i)->GetReactants().first; + currentStepTime = DBL_MAX; if (pTrackA->GetTrackStatus() == fStopAndKill) { continue; } G4Track* pTrackB = (*reaction_i)->GetReactant(pTrackA); + currentStepTime = DBL_MAX; if (pTrackB->GetTrackStatus() == fStopAndKill) { continue; } @@ -295,24 +283,27 @@ std::unique_ptr G4DNAIndependentReactionTimeStepper::FindRea if (pTrackB == pTrackA) { G4ExceptionDescription msg; msg << "The IT reaction process sent back a reaction " - "between trackA and trackB. "; + "between trackA and trackB. "; msg << "The problem is trackA == trackB"; G4Exception("G4DNAIndependentReactionTimeStepper::FindReaction", - "G4DNAIndependentReactionTimeStepper02", FatalErrorInArgument, - msg); + "G4DNAIndependentReactionTimeStepper02", FatalErrorInArgument, msg); } + G4double reactionTime = (*reaction_i)->GetTime(); + currentStepTime = reactionTime - globalTime; + if(fVerbose > 1) + G4cout << " reaction Time : " << reactionTime << " currentStepTime : " << currentStepTime + << " globalTime : " << globalTime << " " << pTrackA->GetTrackID() << " + " + << pTrackB->GetTrackID() << G4endl; + pReactionSet->SelectThisReaction(*reaction_i); - if (fpReactionProcess != nullptr - && fpReactionProcess->TestReactibility(*pTrackA, *pTrackB, currentStepTime, false)) - { + if (fpReactionProcess != nullptr) { if ((fSampledPositions.find(pTrackA->GetTrackID()) == fSampledPositions.end() && (fSampledPositions.find(pTrackB->GetTrackID()) == fSampledPositions.end()))) { G4ExceptionDescription msg; msg << "The positions of trackA and trackB have no counted "; G4Exception("G4DNAIndependentReactionTimeStepper::FindReaction", - "G4DNAIndependentReactionTimeStepper0001", FatalErrorInArgument, - msg); + "G4DNAIndependentReactionTimeStepper0001", FatalErrorInArgument, msg); } pTrackA->SetPosition(fSampledPositions[pTrackA->GetTrackID()]); @@ -321,6 +312,13 @@ std::unique_ptr G4DNAIndependentReactionTimeStepper::FindRea if (pReactionChange == nullptr) { return nullptr; } + G4int nbSecondaries = pReactionChange->GetNumberOfSecondaries(); + if (nbSecondaries > 0) { + const std::vector* productsVector = pReactionChange->GetfSecondary(); + for (const auto& it : *productsVector) { + fSecondaries.push_back(it); + } + } return pReactionChange; } } @@ -354,19 +352,44 @@ void G4DNAIndependentReactionTimeStepper::SetReactionProcess(G4VITReactionProces { fpReactionProcess = pReactionProcess; } -G4double G4DNAIndependentReactionTimeStepper::CalculateMinTimeStep(G4double /*currentGlobalTime*/, - G4double definedMinTimeStep) +G4double G4DNAIndependentReactionTimeStepper::CalculateMinTimeStep(G4double currentGlobalTime, + G4double /*definedMinTimeStep*/) { G4double fTSTimeStep = DBL_MAX; - fCheckedTracks.clear(); + // fUserMinTimeStep = definedMinTimeStep; + if (!fIsInitialized) { + InitializeReactions(currentGlobalTime); + } + G4int nbPreviousSecondaries = (G4int)fSecondaries.size(); + if (nbPreviousSecondaries > 0) { + InitializeForNewTrack(); + for (const auto& it : fSecondaries) { + CalculateStep(*it, fUserMinTimeStep); + } + fSecondaries.clear(); + } + fTSTimeStep = GetNextReactionTime() - currentGlobalTime; + if (fTSTimeStep < 0) { + G4ExceptionDescription msg; + msg << "fTSTimeStep < 0" << ": fTSTimeStep : " << fTSTimeStep + << " GetNextReactionTime() : " << GetNextReactionTime() + << " currentGlobalTime : " << currentGlobalTime << G4endl; + G4Exception("G4DNAIndependentReactionTimeStepper::CalculateMinTimeStep", + "G4DNAIndependentReactionTimeStepper002", FatalErrorInArgument, msg); + } + return fTSTimeStep; +} + +void G4DNAIndependentReactionTimeStepper::InitializeReactions(G4double /*currentGlobalTime*/) +{ + fCheckedTracks.clear(); for (auto pTrack : *fpTrackContainer->GetMainList()) { if (pTrack == nullptr) { G4ExceptionDescription msg; msg << "No track found."; - G4Exception("G4DNAIndependentReactionTimeStepper::CalculateMinTimeStep", - "G4DNAIndependentReactionTimeStepper006", FatalErrorInArgument, - msg); + G4Exception("G4DNAIndependentReactionTimeStepper::InitializeReactions", + "G4DNAIndependentReactionTimeStepper030", FatalErrorInArgument, msg); continue; } @@ -374,36 +397,32 @@ G4double G4DNAIndependentReactionTimeStepper::CalculateMinTimeStep(G4double /*cu if (trackStatus == fStopAndKill || trackStatus == fStopButAlive) { continue; } - - G4double sampledMinTimeStep = CalculateStep(*pTrack, definedMinTimeStep); - G4TrackVectorHandle reactants = GetReactants(); - - if (sampledMinTimeStep < fTSTimeStep) { - fTSTimeStep = sampledMinTimeStep; - if (reactants) { - fReactionSet->AddReactions(fTSTimeStep, const_cast(pTrack), std::move(reactants)); - - fSampledPositions[pTrack->GetTrackID()] = pTrack->GetPosition(); - for (const auto& it : *fReactants) { - auto pTrackB = it; - fSampledPositions[pTrackB->GetTrackID()] = pTrackB->GetPosition(); - } - ResetReactants(); - } - } - else if (fTSTimeStep == sampledMinTimeStep && G4bool(reactants)) { - fReactionSet->AddReactions(fTSTimeStep, const_cast(pTrack), std::move(reactants)); - - fSampledPositions[pTrack->GetTrackID()] = pTrack->GetPosition(); - for (const auto& it : *fReactants) { - auto pTrackB = it; - fSampledPositions[pTrackB->GetTrackID()] = pTrackB->GetPosition(); - } - ResetReactants(); - } - else if (reactants) { - ResetReactants(); - } + CalculateStep(*pTrack, fUserMinTimeStep); } - return fTSTimeStep; + if (fVerbose > 0) + G4cout << "InitializeReactions : reaction events : " + << fReactionSet->GetReactionsPerTime().size() << ". The previous time step : " + << G4BestUnit(G4Scheduler::Instance()->GetPreviousTimeStep(), "Time") << G4endl; + fIsInitialized = true; } + +G4double G4DNAIndependentReactionTimeStepper::GetNextReactionTime() +{ + G4double output = DBL_MAX; + auto nextReaction = GetNextReaction(); + if (nextReaction != nullptr) { + output = GetNextReaction()->GetTime(); + } + return output; +} + +const G4ITReaction* G4DNAIndependentReactionTimeStepper::GetNextReaction() +{ + G4ITReaction* output = nullptr; + G4ITReactionPerTime& reactionPerTime = fReactionSet->GetReactionsPerTime(); + auto reaction_i = reactionPerTime.begin(); + if (reaction_i != reactionPerTime.end()) { + output = (reaction_i->get()); + } + return output; +} \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAMakeReaction.cc b/source/processes/electromagnetic/dna/models/src/G4DNAMakeReaction.cc index 9c66e4e144..2d03ad4c9a 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAMakeReaction.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAMakeReaction.cc @@ -37,6 +37,8 @@ #include "G4DNAIndependentReactionTimeStepper.hh" #include "G4Scheduler.hh" #include "G4UnitsTable.hh" +#include "G4DNAScavengerMaterial.hh" +#include "G4MoleculeCounterManager.hh" G4DNAMakeReaction::G4DNAMakeReaction() : @@ -45,6 +47,8 @@ G4DNAMakeReaction::G4DNAMakeReaction() , fpTimeStepper(nullptr) , fTimeStep(0) { + fpScavengerMaterial = dynamic_cast( + G4Scheduler::Instance()->GetScavengerMaterial()); } G4DNAMakeReaction::G4DNAMakeReaction(G4VDNAReactionModel* pReactionModel) @@ -83,6 +87,10 @@ G4DNAMakeReaction::MakeReaction(const G4Track &trackA, const auto pReactionData = fMolReactionTable->GetReactionData(pMoleculeA, pMoleculeB); const G4int nbProducts = pReactionData->GetNbProducts(); + // Notify molecule (reaction) counter + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { + G4MoleculeCounterManager::Instance()->RecordReaction(pReactionData, trackA.GetGlobalTime()); + } if (nbProducts != 0) { const G4double D1 = pMoleculeA->GetDiffusionCoefficient(); @@ -98,7 +106,18 @@ G4DNAMakeReaction::MakeReaction(const G4Track &trackA, for (G4int j = 0; j < nbProducts; ++j) { - auto pProduct = new G4Molecule(pReactionData->GetProduct(j)); + auto product = pReactionData->GetProduct(j); + + if(fpScavengerMaterial != nullptr) { + auto isScavenger = fpScavengerMaterial->find(product); + if (isScavenger) { + fpScavengerMaterial->AddNumberMoleculePerVolumeUnitForMaterialConf( + product, trackA.GetGlobalTime()); + continue; + } + } + + auto pProduct = new G4Molecule(product); auto pProductTrack = pProduct->BuildTrack(trackA.GetGlobalTime(), (reactionSite + randP)/2); pProductTrack->SetTrackStatus(fAlive); G4ITTrackHolder::Instance()->Push(pProductTrack); @@ -181,27 +200,30 @@ void G4DNAMakeReaction::UpdatePositionForReaction(G4Track& trackA, } } + std::vector> G4DNAMakeReaction::FindReaction(G4ITReactionSet* pReactionSet, const G4double currentStepTime, - const G4double /*globalTime*/, + const G4double globalTime, const G4bool /*reachedUserStepTimeLimit*/) { - std::vector> ReactionInfo; - ReactionInfo.clear(); - auto stepper = dynamic_cast(fpTimeStepper); - if(stepper == nullptr){ - return ReactionInfo; - }else - { - do{ - auto pReactionChange = stepper-> - FindReaction(pReactionSet,currentStepTime); - if (pReactionChange != nullptr) - { - ReactionInfo.push_back(std::move(pReactionChange)); - } - }while (!pReactionSet->GetReactionsPerTime().empty()); - } + std::vector> ReactionInfo; + auto stepper = dynamic_cast(fpTimeStepper); + if (stepper == nullptr) { + return ReactionInfo; + }else { + G4double StepTime = 0; + do { + auto pReactionChange = stepper->FindReaction(pReactionSet, StepTime, globalTime); + if (pReactionChange != nullptr) { +// G4cout<<" time : "<GetTrackA()->GetTrackID() +// <<" + "<GetTrackB()->GetTrackID()< G4DNAMolecularReaction::MakeReaction(const G const auto pMoleculeB = GetMolecule(trackB)->GetMolecularConfiguration(); const auto pReactionData = fMolReactionTable->GetReactionData(pMoleculeA, pMoleculeB); - + // Notify molecule (reaction) counter + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { + G4MoleculeCounterManager::Instance()->RecordReaction(pReactionData, trackA.GetGlobalTime()); + } const G4int nbProducts = pReactionData->GetNbProducts(); if (nbProducts != 0) diff --git a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationDynamicModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationDynamicModel.cc new file mode 100644 index 0000000000..1ced163d5a --- /dev/null +++ b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationDynamicModel.cc @@ -0,0 +1,556 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created 11.02.2025 V.Ivanchenko & M. Vologzhin +// on base of previous Rudd models +// +// Russian Goverment grant No 075-15-2024-667 23.08.2024 +// + +#include "G4DNARuddIonisationDynamicModel.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4VAtomDeexcitation.hh" +#include "G4UAtomicDeexcitation.hh" +#include "G4LossTableManager.hh" +#include "G4NistManager.hh" +#include "G4DNAChemistryManager.hh" +#include "G4DNAMolecularMaterial.hh" +#include "G4LogLogInterpolation.hh" +#include "G4ProductionCutsTable.hh" + +#include "G4DNAGenericIonsManager.hh" +#include "G4DNACrossSectionDataSet.hh" +#include "G4NistManager.hh" + +#include "G4IonTable.hh" +#include "G4DNARuddAngle.hh" +#include "G4DeltaAngle.hh" +#include "G4Exp.hh" +#include "G4Log.hh" +#include "G4Pow.hh" +#include "G4Alpha.hh" +#include "G4Proton.hh" +#include "G4Electron.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNACrossSectionDataSet* G4DNARuddIonisationDynamicModel::xsdata_hydrogen = nullptr; +G4DNACrossSectionDataSet* G4DNARuddIonisationDynamicModel::xsdata_helium = nullptr; +G4DNACrossSectionDataSet* G4DNARuddIonisationDynamicModel::xsdata_p = nullptr; +const std::vector* G4DNARuddIonisationDynamicModel::fpWaterDensity = nullptr; + +namespace +{ + const G4double scaleFactor = CLHEP::m*CLHEP::m; + const G4double tolerance = 1*CLHEP::eV; + const G4double Ry = 13.6*CLHEP::eV; + + // Following values provided by M. Dingfelder (priv. comm) + const G4double Bj[5] = {12.60*CLHEP::eV, 14.70*CLHEP::eV, 18.40*CLHEP::eV, + 32.20*CLHEP::eV, 539*CLHEP::eV}; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNARuddIonisationDynamicModel::G4DNARuddIonisationDynamicModel(const G4ParticleDefinition*, + const G4String& nam) + : G4VEmModel(nam) +{ + fGpow = G4Pow::GetInstance(); + fLowestEnergy = 100*CLHEP::eV; + fAbsorptionEnergy = 50*CLHEP::eV; + + // Mark this model as "applicable" for atomic deexcitation + SetDeexcitationFlag(true); + + // Define default angular generator + SetAngularDistribution(new G4DNARuddAngle()); + + if (nullptr == xsdata_p) { + isFirst = true; + LoadData(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4DNARuddIonisationDynamicModel::~G4DNARuddIonisationDynamicModel() +{ + if (isFirst) { + delete xsdata_p; + delete xsdata_hydrogen; + delete xsdata_helium; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNARuddIonisationDynamicModel::LoadData() +{ + // initialisation of static data once + G4String filename = "dna/sigma_ionisation_p_rudd"; + xsdata_p = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata_p->LoadData(filename); + + filename = "dna/sigma_ionisation_h_rudd"; + xsdata_hydrogen = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata_hydrogen->LoadData(filename); + + filename = "dna/sigma_ionisation_he_rudd"; + xsdata_helium = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata_helium->LoadData(filename); + + // to avoid possible threading problem fill this vector only once + auto water = G4NistManager::Instance()->FindMaterial("G4_WATER"); + fpWaterDensity = + G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(water); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNARuddIonisationDynamicModel::Initialise(const G4ParticleDefinition* p, + const G4DataVector&) +{ + if (p != fParticle) { SetParticle(p); } + + // particle change object may be externally set + if (nullptr == fParticleChangeForGamma) { + fParticleChangeForGamma = GetParticleChangeForGamma(); + } + const G4String& pname = p->GetParticleName(); + + // the same definition of generic ion as in G4VEmProcess class + if (p->GetParticleType() == "nucleus" && p->GetParticleSubType() == "generic") { + if (pname != "deuteron" && pname != "triton" && + pname != "He3" && pname != "alpha" && pname != "alpha+" && + pname != "helium" && pname != "hydrogen") { + isIon = true; + } + } + + // initialisation once in each thread + if (!isInitialised) { + isInitialised = true; + xsdata = xsdata_p; + + if (pname == "helium") { + isHelium = true; + xsdata = xsdata_helium; + slaterEffectiveCharge[0]=1.7; + slaterEffectiveCharge[1]=1.15; + slaterEffectiveCharge[2]=1.15; + sCoefficient[0]=0.5; + sCoefficient[1]=0.25; + sCoefficient[2]=0.25; + fLowestEnergy = 1*CLHEP::keV; + } else if (pname == "alpha+") { + isHelium = true; + // The following values are provided by M. Dingfelder (priv. comm) + slaterEffectiveCharge[0]=2.0; + slaterEffectiveCharge[1]=2.0; + slaterEffectiveCharge[2]=2.0; + sCoefficient[0]=0.7; + sCoefficient[1]=0.15; + sCoefficient[2]=0.15; + } else if (pname == "hydrogen") { + xsdata = xsdata_hydrogen; + } + + // defined stationary mode + statCode = G4EmParameters::Instance()->DNAStationary(); + + // initialise atomic de-excitation + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + + // chemistry + auto chem = G4DNAChemistryManager::Instance(); + if (chem->IsChemistryActivated()) { + fChemistry = chem; + } + + InitialiseIntegrator(0.1, 0.25, 1.05, 1*CLHEP::eV, 0.2*CLHEP::eV, 10*CLHEP::keV); + + if (verbose > 0) { + G4cout << "### G4DNARuddIonisationDynamicModel::Initialise(..) " + << fParticle->GetParticleName() << G4endl; + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNARuddIonisationDynamicModel::SetParticle(const G4ParticleDefinition* p) +{ + fParticle = p; + fMass = p->GetPDGMass(); + fMassRate = CLHEP::proton_mass_c2/fMass; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNARuddIonisationDynamicModel::StartTracking(G4Track* track) +{ + fTrack = track; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double +G4DNARuddIonisationDynamicModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* part, + G4double kinE, + G4double, G4double) +{ + // check if model is applicable for given material + G4double density = (material->GetIndex() < fpWaterDensity->size()) + ? (*fpWaterDensity)[material->GetIndex()] : 0.0; + if (0.0 == density) { return 0.0; } + + // check on kinetic energy (not scaled energy) to stop low-energy ion + if (kinE < fAbsorptionEnergy) { return DBL_MAX; } + + // ion may be different + if (fParticle != part) { SetParticle(part); } + G4double q = fTrack->GetDynamicParticle()->GetCharge()*inveplus; + + // cross section for scaled energy + G4double e = kinE*fMassRate; + + auto xs = xsdata; + if (0.0 == q) { xs = isHelium ? xsdata_helium : xsdata_hydrogen; } + + G4double sigma = (e > fLowestEnergy) ? xs->FindValue(e) + : xs->FindValue(fLowestEnergy) * e / fLowestEnergy; + + sigma *= density; + if (q > 1.5) { sigma *= q * q; } + + if (verbose > 1) { + G4cout << "G4DNARuddIonisationDynamicModel for " << part->GetParticleName() + << " Ekin(keV)=" << kinE/CLHEP::keV + << " sigma(cm^2)=" << sigma/CLHEP::cm2 << G4endl; + } + return sigma; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void +G4DNARuddIonisationDynamicModel::SampleSecondaries(std::vector* fvect, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* dpart, + G4double, G4double) +{ + const G4ParticleDefinition* pd = dpart->GetDefinition(); + if (fParticle != pd) { SetParticle(pd); } + + // stop ion with energy below low energy limit + G4double kinE = dpart->GetKineticEnergy(); + // ion shoud be stopped - check on kinetic energy and not scaled energy + if (kinE <= fAbsorptionEnergy) { + fParticleChangeForGamma->SetProposedKineticEnergy(0.); + fParticleChangeForGamma->ProposeTrackStatus(fStopButAlive); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE); + return; + } + + fScaledEnergy = kinE*fMassRate; + fSelectedShell = SelectShell(); + G4double bindingEnergy = (useDNAWaterStructure) + ? waterStructure.IonisationEnergy(fSelectedShell) : Bj[fSelectedShell]; + + //Si: additional protection if tcs interpolation method is modified + if (kinE < bindingEnergy) { return; } + + G4double esec = SampleElectronEnergy(); + G4double esum = 0.0; + + // sample deexcitation + // here we assume that H2O electronic levels are the same as Oxygen. + // this can be considered true with a rough 10% error in energy on K-shell, + G4int Z = 8; + G4ThreeVector deltaDir = + GetAngularDistribution()->SampleDirectionForShell(dpart, esec, Z, + fSelectedShell, + couple->GetMaterial()); + + // SI: only atomic deexcitation from K shell is considered + if (fAtomDeexcitation != nullptr && fSelectedShell == 4) { + auto as = G4AtomicShellEnumerator(0); + auto ashell = fAtomDeexcitation->GetAtomicShell(Z, as); + fAtomDeexcitation->GenerateParticles(fvect, ashell, Z, 0, 0); + + // compute energy sum from de-excitation + for (auto const & ptr : *fvect) { + esum += ptr->GetKineticEnergy(); + } + } + // check energy balance + // remaining excitation energy of water molecule + G4double exc = std::max(bindingEnergy - esum, 0.0); + + // remaining projectile energy + G4double scatteredEnergy = kinE - bindingEnergy - esec; + if(scatteredEnergy < -tolerance || exc < -tolerance) { + G4cout << "G4DNARuddIonisationDynamicModel::SampleSecondaries: " + << "negative final E(keV)=" << scatteredEnergy/CLHEP::keV << " Ein(keV)=" + << kinE/CLHEP::keV << " " << pd->GetParticleName() + << " Edelta(keV)=" << esec/CLHEP::keV << " MeV, Exc(keV)=" << exc/CLHEP::keV + << G4endl; + } + scatteredEnergy = std::max(scatteredEnergy, 0.0); + + // projectile + if (!statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(exc); + } else { + fParticleChangeForGamma->SetProposedKineticEnergy(kinE); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE - scatteredEnergy); + } + + // delta-electron + auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDir, esec); + fvect->push_back(dp); + + // create radical + if (nullptr != fChemistry) { + fChemistry->CreateWaterMolecule(eIonizedMolecule, fSelectedShell, fTrack); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int G4DNARuddIonisationDynamicModel::SelectShell() +{ + G4double sum = 0.0; + G4double xs; + for (G4int i=0; i<5; ++i) { + auto ptr = xsdata->GetComponent(i); + xs = (fScaledEnergy > fLowestEnergy) ? ptr->FindValue(fScaledEnergy) + : ptr->FindValue(fLowestEnergy)*fScaledEnergy/fLowestEnergy; + sum += xs; + fTemp[i] = sum; + } + sum *= G4UniformRand(); + for (G4int i=0; i<5; ++i) { + if (sum <= fTemp[i]) { return i; } + } + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double +G4DNARuddIonisationDynamicModel::MaxEnergy() +{ + // kinematic limit + G4double tau = fScaledEnergy/CLHEP::proton_mass_c2; + G4double gam = 1.0 + tau; + G4double emax = 2.0*CLHEP::electron_mass_c2*tau*(tau + 2.0); + + // Initialisation of sampling + G4double A1, B1, C1, D1, E1, A2, B2, C2, D2; + if (fSelectedShell == 4) { + //Data For Liquid Water K SHELL from Dingfelder (Protons in Water) + A1 = 1.25; + B1 = 0.5; + C1 = 1.00; + D1 = 1.00; + E1 = 3.00; + A2 = 1.10; + B2 = 1.30; + C2 = 1.00; + D2 = 0.00; + alphaConst = 0.66; + } else { + //Data For Liquid Water from Dingfelder (Protons in Water) + A1 = 1.02; + B1 = 82.0; + C1 = 0.45; + D1 = -0.80; + E1 = 0.38; + A2 = 1.07; + // Value provided by M. Dingfelder (priv. comm) + B2 = 11.6; + C2 = 0.60; + D2 = 0.04; + alphaConst = 0.64; + } + bEnergy = Bj[fSelectedShell]; + G4double v2 = 0.25*emax/(bEnergy*gam*gam); + v = std::sqrt(v2); + u = Ry/bEnergy; + wc = 4.*v2 - 2.*v - 0.25*u; + + G4double L1 = (C1 * fGpow->powA(v, D1)) / (1. + E1 * fGpow->powA(v, (D1 + 4.))); + G4double L2 = C2 * fGpow->powA(v, D2); + G4double H1 = (A1 * G4Log(1. + v2)) / (v2 + (B1 / v2)); + G4double H2 = (A2 / v2) + (B2 / (v2 * v2)); + + F1 = L1 + H1; + F2 = (L2 * H2) / (L2 + H2); + return emax; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double +G4DNARuddIonisationDynamicModel::SampleElectronEnergy() +{ + // sampling is performed for proton projectile + G4double emax = MaxEnergy(); + + ComputeIntegral(0.0, emax); + G4double e = SampleValue(); + if (verbose > 1) { + G4cout << "G4DNARuddIonisationDynamicModel::SampleElectronEnergy: " + << fParticle->GetParticleName() + << " Escaled(keV)=" << fScaledEnergy/CLHEP::keV << " Ee(keV)=" << e/CLHEP::keV + << G4endl; + } + return e; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::ProbabilityDensityFunction(G4double e) +{ + // Shells ids are 0 1 2 3 4 (4 is k shell) + // !!Attention, "energyTransfer" here is the energy transfered to the electron which means + // that the secondary kinetic energy is w = energyTransfer - bindingEnergy + // + // ds S F1(nu) + w * F2(nu) + // ---- = G(k) * ---- ------------------------------------------- + // dw Bj (1+w)^3 * [1 + exp{alpha * (w - wc) / nu}] + // + // w is the secondary electron kinetic Energy in eV + // + // All the other parameters can be found in Rudd's Papers + // + // M.Eugene Rudd, 1988, User-Friendly model for the energy distribution of + // electrons from protons or electron collisions. Nucl. Tracks Rad. Meas.Vol 16 N0 2/3 pp 219-218 + // + G4double w = e/bEnergy; + G4double x = alphaConst*(w - wc)/v; + G4double y = (x > -15.) ? 1.0 + G4Exp(x) : 1.0; + + G4double res = CorrectionFactor() * (F1 + w*F2) / + (fGpow->powN((1. + w)/u, 3) * y); + + if (isHelium) { + G4double energyTransfer = e + bEnergy; + G4double Zeff = 2.0 - + (sCoefficient[0] * S_1s(fScaledEnergy, energyTransfer, slaterEffectiveCharge[0], 1.) + + sCoefficient[1] * S_2s(fScaledEnergy, energyTransfer, slaterEffectiveCharge[1], 2.) + + sCoefficient[2] * S_2p(fScaledEnergy, energyTransfer, slaterEffectiveCharge[2], 2.) ); + + res *= Zeff * Zeff; + } + return std::max(res, 0.0); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::S_1s(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, + G4double shellNumber) +{ + // 1 - e^(-2r) * ( 1 + 2 r + 2 r^2) + // Dingfelder, in Chattanooga 2005 proceedings, formula (7) + + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = 1. - G4Exp(-2 * r) * ( ( 2. * r + 2. ) * r + 1. ); + return value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::S_2s(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, + G4double shellNumber) +{ + // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 2 r^4) + // Dingfelder, in Chattanooga 2005 proceedings, formula (8) + + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = + 1. - G4Exp(-2 * r) * (((2. * r * r + 2.) * r + 2.) * r + 1.); + + return value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::S_2p(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, + G4double shellNumber) +{ + // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 4/3 r^3 + 2/3 r^4) + // Dingfelder, in Chattanooga 2005 proceedings, formula (9) + + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = + 1. - G4Exp(-2 * r) * (((( 2./3. * r + 4./3.) * r + 2.) * r + 2.) * r + 1.); + + return value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::Rh(G4double ekin, G4double etrans, + G4double q, G4double shell) +{ + // The following values are provided by M. Dingfelder (priv. comm) + // Dingfelder, in Chattanooga 2005 proceedings, p 4 + + G4double escaled = CLHEP::electron_mass_c2/fMass * ekin; + const G4double H = 13.60569172 * CLHEP::eV; + G4double value = 2.0*std::sqrt(escaled / H)*q*H /(etrans*shell); + + return value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4DNARuddIonisationDynamicModel::CorrectionFactor() +{ + // ZF Shortened + G4double res = 1.0; + if (fSelectedShell < 4) { + const G4double ln10 = fGpow->logZ(10); + G4double x = 2.0*((G4Log(fScaledEnergy/CLHEP::eV)/ln10) - 4.2); + // The following values are provided by M. Dingfelder (priv. comm) + res = 0.6/(1.0 + G4Exp(x)) + 0.9; + } + return res; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc index 82e88c2621..4f5bd3e18c 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc @@ -91,7 +91,7 @@ G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel(const G4Parti G4DNARuddIonisationExtendedModel::~G4DNARuddIonisationExtendedModel() { - if(isFirst) { + if (isFirst) { for(auto & i : xsdata) { delete i; } } } @@ -222,7 +222,8 @@ void G4DNARuddIonisationExtendedModel::Initialise(const G4ParticleDefinition* p, statCode = G4EmParameters::Instance()->DNAStationary(); // initialise atomic de-excitation - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); if (verbose > 0) { G4cout << "### G4DNARuddIonisationExtendedModel::Initialise(..) " << pname @@ -330,17 +331,18 @@ G4DNARuddIonisationExtendedModel::SampleSecondaries(std::vectorGetParticleName() << " Edelta(keV)=" << esec/CLHEP::keV << " MeV, Exc(keV)=" << exc/CLHEP::keV << G4endl; } + scatteredEnergy = std::max(scatteredEnergy, 0.0); // projectile if (!statCode) { diff --git a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationModel.cc index a4fe6ec5d9..e6066d1eb4 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationModel.cc @@ -258,7 +258,22 @@ void G4DNARuddIonisationModel::Initialise(const G4ParticleDefinition* particle, SetHighEnergyLimit(highEnergyLimit[alphaPlusPlus]); } - if( verboseLevel>0 ) + if (isInitialised) { return; } + + // defined stationary mode + statCode = G4EmParameters::Instance()->DNAStationary(); + + // Initialize water density pointer + fpWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); + + // atomic de-excitation + if (!statCode) + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; + + if (verboseLevel > 0) { G4cout << "Rudd ionisation model is initialized " << G4endl << "Energy range: " @@ -267,19 +282,6 @@ void G4DNARuddIonisationModel::Initialise(const G4ParticleDefinition* particle, << particle->GetParticleName() << G4endl; } - - // Initialize water density pointer - fpWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); - - // - - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - - if (isInitialised) - { return;} - fParticleChangeForGamma = GetParticleChangeForGamma(); - isInitialised = true; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAUpdateSystemModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNAUpdateSystemModel.cc index 4ba1c150b7..5d741721bd 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAUpdateSystemModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAUpdateSystemModel.cc @@ -32,6 +32,8 @@ #include "G4DNAScavengerMaterial.hh" #include "G4Scheduler.hh" +#include "G4MoleculeCounterManager.hh" + G4DNAUpdateSystemModel::G4DNAUpdateSystemModel() = default; void G4DNAUpdateSystemModel::SetMesh(G4DNAMesh* pMesh) { fpMesh = pMesh; } @@ -53,9 +55,9 @@ void G4DNAUpdateSystemModel::KillMolecule(const Index& index, MolType type) FatalErrorInArgument, exceptionDescription); } iter->second--; - if(G4VMoleculeCounter::Instance()->InUse()) + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { - G4VMoleculeCounter::Instance()->RemoveAMoleculeAtTime(type, fGlobalTime); + G4MoleculeCounterManager::Instance()->RemoveMoleculeWithoutTrack(type, fGlobalTime); } } else @@ -131,9 +133,9 @@ void G4DNAUpdateSystemModel::CreateMolecule(const Index& index, MolType type) node[type] = 1; } - if(G4VMoleculeCounter::Instance()->InUse()) + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { - G4VMoleculeCounter::Instance()->AddAMoleculeAtTime(type, fGlobalTime); + G4MoleculeCounterManager::Instance()->AddMoleculeWithoutTrack(type, fGlobalTime); } } diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4Molecule.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4Molecule.hh index 7d25b2396a..feda507d09 100644 --- a/source/processes/electromagnetic/dna/molecules/management/include/G4Molecule.hh +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4Molecule.hh @@ -205,7 +205,7 @@ public: */ void PrintState() const; - G4Track * BuildTrack(G4double globalTime, const G4ThreeVector& Position); + G4Track* BuildTrack(G4double globalTime, const G4ThreeVector &Position, const G4Track * = nullptr); G4double GetKineticEnergy() const; diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounter.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounter.hh index 07848e3e8e..9b231e480f 100644 --- a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounter.hh +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounter.hh @@ -24,14 +24,15 @@ // ******************************************************************** // // Author: Mathieu Karamitros +// Modified by Christian Velten (2024) // The code is developed in the framework of the ESA AO7146 // // We would be very happy hearing from you, send us your feedback! :) // // In order for Geant4-DNA to be maintained and still open-source, -// article citations are crucial. -// If you use Geant4-DNA chemistry and you publish papers about your software, +// article citations are crucial. +// If you use Geant4-DNA chemistry and you publish papers about your software, // in addition to the general paper on Geant4-DNA: // // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 @@ -40,111 +41,62 @@ // reference papers on chemistry: // // J. Comput. Phys. 274 (2014) 841-882 -// Prog. Nucl. Sci. Tec. 2 (2011) 503-508 +// Prog. Nucl. Sci. Tec. 2 (2011) 503-508 #pragma once -#include "G4VMoleculeCounter.hh" +#include "G4MolecularConfiguration.hh" +#include "G4VUserMoleculeCounter.hh" + #include -#include -#include #include //------------------------------------------------------------------------------ -namespace G4 { -namespace MoleculeCounter { -struct TimePrecision +struct G4MoleculeCounterIndex : public G4VMoleculeCounter::G4VMoleculeCounterIndex { - bool operator()(const double& a, const double& b) const; - static G4ThreadLocal double fPrecision; -}; -} -} -using NbMoleculeAgainstTime = std::map; -using RecordedTimes = std::unique_ptr>; - -//------------------------------------------------------------------------------ - -class G4MoleculeCounter : public G4VMoleculeCounter -{ - //---------------------------------------------------------------------------- -public: - using ReactantList = std::vector; - using CounterMapType = std::map; - using RecordedMolecules = std::unique_ptr; - - static G4MoleculeCounter* Instance(); - - void Initialize() override; - void ResetCounter() override; - - /* The dynamics of the given molecule won't be saved into memory.*/ - void DontRegister(const G4MoleculeDefinition*) override; - bool IsRegistered(const G4MoleculeDefinition*) override; - void RegisterAll() override; - - //---------------------------------------------------------------------------- - - int GetNMoleculesAtTime(Reactant* molecule, double time); - const NbMoleculeAgainstTime& GetNbMoleculeAgainstTime(Reactant* molecule); - - RecordedMolecules GetRecordedMolecules(); - RecordedTimes GetRecordedTimes(); - - void SetVerbose(G4int); - G4int GetVerbose(); - - /* It sets the min time difference in between two time slices. */ - static void SetTimeSlice(double); - - void Dump(); - - G4bool IsTimeCheckedForConsistency() const; - void CheckTimeForConsistency(G4bool flag); - -#ifdef MOLECULE_COUNTER_TESTING -public: -#else -protected: -#endif - void AddAMoleculeAtTime(Reactant*, - G4double time, - const G4ThreeVector* position = nullptr, - int number = 1) override; - void RemoveAMoleculeAtTime(Reactant*, - G4double time, - const G4ThreeVector* position = nullptr, - int number = 1) override; - - //---------------------------------------------------------------------------- -protected: - G4bool SearchTimeMap(Reactant* molecule); - int SearchUpperBoundTime(double time, bool sameTypeOfMolecule); - -protected: - G4MoleculeCounter(); - ~G4MoleculeCounter() override; - - CounterMapType fCounterMap; - std::map fDontRegister; - - G4int fVerbose; - G4bool fCheckTimeIsConsistentWithScheduler; - - struct Search + const G4MolecularConfiguration* Molecule; + G4MoleculeCounterIndex() : Molecule(nullptr) {} + explicit G4MoleculeCounterIndex(const G4MolecularConfiguration* molecule) : Molecule(molecule) + {} + ~G4MoleculeCounterIndex() override = default; + G4bool operator<(G4VMoleculeCounterIndex const& other) const override { - Search() - { - fLowerBoundSet = false; - } - CounterMapType::iterator fLastMoleculeSearched; - NbMoleculeAgainstTime::iterator fLowerBoundTime; - bool fLowerBoundSet; - }; + return std::less{}(Molecule, static_cast(other).Molecule); + } + G4bool operator==(G4VMoleculeCounterIndex const& other) const override + { + return std::equal_to{}(Molecule, static_cast(other).Molecule); + } + G4String GetInfo() const override + { + G4String null = "null"; + if (Molecule == nullptr) { + return null; + } + else { + G4String name = Molecule->GetName(); + G4String info = "Molecule: " + name; + return info; + } + } + const G4MolecularConfiguration* GetMolecule() const override { return Molecule; } +}; - std::unique_ptr fpLastSearch; +class G4MoleculeCounter : public G4VUserMoleculeCounter +{ + //---------------------------------------------------------------------------- + public: + G4MoleculeCounter(); + G4MoleculeCounter(G4String); + ~G4MoleculeCounter() override = default; - friend class G4Molecule; - friend class G4VMoleculeCounter; -}; \ No newline at end of file + void InitializeUser() override; + + public: + std::unique_ptr BuildIndex(const G4Track*) const override; + std::unique_ptr BuildIndex(const G4Track*, + const G4StepPoint*) const override; + std::unique_ptr + BuildSimpleIndex(const G4MolecularConfiguration*) const override; +}; diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManager.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManager.hh new file mode 100644 index 0000000000..e160fa9415 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManager.hh @@ -0,0 +1,250 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +// Author: Christian Velten (2025) + +#ifndef G4MOLECULECOUNTERMANAGER_HH +#define G4MOLECULECOUNTERMANAGER_HH 1 + +#include "G4Exception.hh" +#include "G4Threading.hh" +#include "G4Types.hh" +#include "G4VMoleculeCounter.hh" +#include "G4VMoleculeReactionCounter.hh" +#include "G4ios.hh" + +#include +#include +#include + +class G4Event; +class G4Run; +class G4Step; +class G4StepPoint; +class G4Track; +class G4MoleculeCounterManagerMessenger; + +class G4MoleculeCounterManager final +{ + private: + struct Private + { + explicit Private() = default; + }; + + public: + G4MoleculeCounterManager(Private); + ~G4MoleculeCounterManager(); + + private: + G4bool fInstancesRegistered{false}; + void RegisterInstance(); + + public: + static G4MoleculeCounterManager* Instance(); + static G4MoleculeCounterManager* GetInstanceIfExists(); + static void DeleteInstance(); + + void Initialize(); + + // + // Management + + G4int RegisterCounter(std::unique_ptr); + G4int RegisterCounter(std::unique_ptr); + void DeregisterAllCounters(); + + private: + template + G4int RegisterCounter(std::map&, std::unique_ptr, std::function); + void InitializeMaster(); + void InitializeWorker(); + + public: + // methods to receive forwarding from G4DNAChemistryManager + void BeginOfEventAction(const G4Event*); + void BeginOfRunAction(const G4Run*); + void EndOfEventAction(const G4Event*); + void EndOfRunAction(const G4Run*); + // Dumping counters + void DumpMasterCounters() const; + void DumpWorkerCounters() const; + // Accumulation of counters into master + void AbsorbWorkerManagerCounters(const G4MoleculeCounterManager* = nullptr); + + // + // Calls to Molecule Counters + public: + // [[deprecated("This should only be used for IRT and may be replaced as well.")]] + void AddMoleculeWithoutTrack(const G4MolecularConfiguration*, G4double, G4int = 1); + // [[deprecated("This should only be used for IRT and may be replaced as well.")]] + void RemoveMoleculeWithoutTrack(const G4MolecularConfiguration*, G4double, G4int = 1); + + void AddMolecule(const G4Track*, G4double, G4int = 1); + void RemoveMolecule(const G4Track*, G4double, G4int = 1); + + void AddMolecule(const G4Track*, const G4StepPoint*, G4double, G4int = 1); + void RemoveMolecule(const G4Track*, const G4StepPoint*, G4double, G4int = 1); + + void ActivateCounterAtTimes(G4int, G4double, G4double, G4bool = true, G4bool = true); + + // + // Calls to Molecule Reaction Counters + + // [[deprecated("TBD")]] + void RecordReaction(const G4DNAMolecularReactionData*, G4double, G4int = 1); + // void RecordReaction(const G4Track*, const G4Track*, const G4DNAMolecularReactionData*, G4double, + // G4int = 1); + + void ActivateReactionCounterAtTimes(G4int, G4double, G4double, G4bool = true, G4bool = true); + + // + // Other Calls to both types or only one (e.g., BroadcastIgnoreMolecule) + + void ResetCounters(); + + void NotifyOfStep(const G4Step*); + void NotifyOfFinalize(); + + // These will be broadcast to all counters registered at time of call + void BroadcastIgnoreMolecule(const G4MoleculeDefinition*); + void BroadcastIgnoreReactant(const G4MolecularConfiguration*); + void BroadcastRegisterAllMoleculesAndReactants(); + + private: + static const G4MoleculeCounterManager* fpMasterInstance; + static std::vector fWorkerInstances; + G4ThreadLocalStatic std::unique_ptr fpInstance; + + std::unique_ptr fpMessenger; + + G4int fVerbosity; + G4bool fIsInitialized; + G4bool fIsActive; + static std::atomic fResetCountersBeforeEvent; + static std::atomic fResetCountersBeforeRun; + static std::atomic fResetMasterCounterWithWorkers; + static std::atomic fAccumulateCounterIntoMaster; + + std::map fCounters{}; + std::map fReactionCounters{}; + + public: + G4bool GetIsActive() const { return fIsActive; } + void SetIsActive(G4bool flag) { fIsActive = flag; } + + G4int GetVerbosity() const { return fVerbosity; } + void SetVerbosity(G4int v) { fVerbosity = v; } + + G4bool GetResetCountersBeforeEvent() const; + void SetResetCountersBeforeEvent(G4bool = true); + + G4bool GetResetCountersBeforeRun() const; + void SetResetCountersBeforeRun(G4bool = true); + + G4bool GetResetMasterCounterWithWorkers() const; + void SetResetMasterCounterWithWorkers(G4bool = true); + + G4bool GetAccumulateCounterIntoMaster() const; + void SetAccumulateCounterIntoMaster(G4bool = true); + + std::vector GetMoleculeCounters() const; + std::vector GetMoleculeCounters(G4String) const; + template + const T* GetMoleculeCounter(G4int) const; + G4VMoleculeCounter* GetEditableMoleculeCounter(G4int) const; + + std::vector GetMoleculeReactionCounters() const; + std::vector GetMoleculeReactionCounters(G4String) const; + G4VMoleculeReactionCounter* GetEditableMoleculeReactionCounter(G4int) const; + template + const T* GetMoleculeReactionCounter(G4int) const; + + private: + G4ThreadLocalStatic std::atomic fBeginOfEventTriggered; + static std::atomic fBeginOfRunTriggered; +}; + +//------------------------------------------------------------------------------ + +template +G4int G4MoleculeCounterManager::RegisterCounter(std::map& map, + std::unique_ptr counter, + std::function idProvider) +{ + // this template allows for more than one counter type to be registered in the same way without + // duplicating code; see public methods for G4VMoleculeCounter and G4VMoleculeReactionCounter + + if (fVerbosity > 0) { + G4cout << "G4MoleculeCounterManager::RegisterCounter (" + << (G4Threading::IsMasterThread() ? "master" : "worker") << ")" << G4endl; + } + + if (counter->GetManagedId() >= 0) { + G4ExceptionDescription description; + description << "Trying to add a counter whose id was already altered to be non-negative!\n"; + description << " Id: " << counter->GetManagedId() << "\n"; + description << "Name: " << counter->GetName(); + G4Exception("G4MoleculeCounterManager::RegisterCounter", "MOLMAN002", FatalErrorInArgument, + description); + } + + T* sp = counter.release(); + // Set managed Id + sp->SetManagedId(idProvider()); + + map.emplace(sp->GetManagedId(), sp); + + return sp->GetManagedId(); +} + +//------------------------------------------------------------------------------ + +template +const T* G4MoleculeCounterManager::GetMoleculeCounter(G4int id) const +{ + static_assert(std::is_base_of::value, + "T must be derived from G4VMoleculeCounter!"); + auto base_ptr = GetEditableMoleculeCounter(id); + if (base_ptr == nullptr) return nullptr; + const T* ptr = dynamic_cast(base_ptr); + return ptr; +} + +template +const T* G4MoleculeCounterManager::GetMoleculeReactionCounter(G4int id) const +{ + static_assert(std::is_base_of::value, + "T must be derived from G4VMoleculeReactionCounter!"); + auto base_ptr = GetEditableMoleculeReactionCounter(id); + if (base_ptr == nullptr) return nullptr; + const T* ptr = dynamic_cast(base_ptr); + return ptr; +} + +//------------------------------------------------------------------------------ + +#endif // G4MOLECULECOUNTERMANAGER_HH diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManagerMessenger.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManagerMessenger.hh new file mode 100644 index 0000000000..b99fe03c4b --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterManagerMessenger.hh @@ -0,0 +1,61 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Author: Christian Velten (2025) + +#ifndef G4MOLECULECOUNTERMANAGERMESSENGER_HH +#define G4MOLECULECOUNTERMANAGERMESSENGER_HH 1 + +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" +#include "G4UImessenger.hh" + +#include + +class G4MoleculeCounterManager; + +class G4MoleculeCounterManagerMessenger : public G4UImessenger +{ + public: + explicit G4MoleculeCounterManagerMessenger(G4MoleculeCounterManager*); + ~G4MoleculeCounterManagerMessenger() override = default; + void SetNewValue(G4UIcommand*, G4String) override; + + private: + void InitializeCommands(); + + private: + G4MoleculeCounterManager* fpManager{nullptr}; + std::unique_ptr fpManagerDir; + std::unique_ptr fpActiveCmd; + std::unique_ptr fpResetBeforeEventCmd; + std::unique_ptr fpResetBeforeRunCmd; + std::unique_ptr fpAccumulateIntoMasterCmd; + std::unique_ptr fpVerboseCmd; +}; + +#endif // G4MOLECULECOUNTERMANAGERMESSENGER_HH diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTemplates.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTemplates.hh new file mode 100644 index 0000000000..a5b595caf5 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTemplates.hh @@ -0,0 +1,157 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#ifndef G4MOLECULECOUNTERTEMPLATES_HH +#define G4MOLECULECOUNTERTEMPLATES_HH 1 + +#include "G4Types.hh" +#include "G4VMoleculeCounter.hh" + +#include +#include +#include + +namespace G4 +{ +namespace MoleculeCounter +{ + +//------------------------------------------------------------------------------ + +template +G4String GetTemplateTypeName() +{ + return G4String(typeid(T).name()); +} + +//------------------------------------------------------------------------------ + +template +G4bool Contains(const std::set& _set, const T& _value) +{ + return std::binary_search(_set.cbegin(), _set.cend(), _value); +} + +template +G4bool Contains(const std::vector& _vector, const T& _value) +{ + auto p = std::find(_vector.cbegin(), _vector.cend(), _value); + return p != _vector.cend(); +} + +template +G4bool ContainsKey(const std::map& _map, const T& _key) +{ + auto keys = GetMapIndices(_map); + return Contains(keys, _key); +} + +//------------------------------------------------------------------------------ + +template +const std::vector GetMapIndices(const std::map& _map) +{ + std::vector output; + for (auto const& it : _map) + output.push_back(it.first); + return output; +} + +//------------------------------------------------------------------------------ + +template +void DumpCounterMapIndices(const std::map& map, G4bool includeEmpty = false) +{ + G4cout << "--- BEGIN COUNTER MAP INDEX DUMP ---" << G4endl; + auto i = 0; + for (auto const& it : map) { + if (!includeEmpty && it.second.size() == 0) continue; + G4cout << i++ << ": " << it.first.GetInfo() << G4endl; + } + G4cout << "--- END COUNTER MAP INDEX DUMP ---" << G4endl; +} + +//------------------------------------------------------------------------------ + +template +void DumpCounterMapContents(const std::map& map, + G4bool includeEmpty = false) +{ + G4cout << "--- BEGIN COUNTER MAP DUMP ---" << G4endl; + for (auto const& it : map) { + if (!includeEmpty && it.second.size() == 0) continue; + G4cout << " :: " << it.first.GetInfo() << G4endl; + for (auto const& it2 : it.second) { + G4cout << std::setw(3) << std::setprecision(3) << " " << G4BestUnit(it2.first, "Time") + << " " << std::setw(5) << it2.second << G4endl; + } + } + G4cout << "--- END COUNTER MAP DUMP ---" << G4endl; +} + +//------------------------------------------------------------------------------ + +template +std::set GetRecordedTimes(const std::map& map) +{ + std::set output{}; + for (const auto& it : map) { + G4cerr << it.second.size() << G4endl; + for (const auto& it2 : it.second) { + output.insert(it2.first); + } + } + return output; +} + +//------------------------------------------------------------------------------ + +template +typename std::map::iterator +FindClosestEntryForKey(std::map& map, TKey key) +{ + if (map.empty()) return map.end(); + + auto it_lb = map.lower_bound(key); + + if (it_lb == map.begin()) return it_lb; + if (it_lb == map.end()) return --it_lb; + + auto prev_it = std::prev(it_lb); + + if (std::abs(it_lb->first - key) < std::abs(prev_it->first - key)) + return it_lb; + else + return prev_it; +} + +//------------------------------------------------------------------------------ + +} // namespace MoleculeCounter +} // namespace G4 + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTimeComparer.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTimeComparer.hh new file mode 100644 index 0000000000..b1441af6e9 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeCounterTimeComparer.hh @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#ifndef G4MOLECULECOUNTERTIMECOMPARER_HH +#define G4MOLECULECOUNTERTIMECOMPARER_HH 1 + +#include "G4SystemOfUnits.hh" +#include "G4Types.hh" + +#include +#include + +class G4MoleculeCounterTimeComparer +{ + public: + enum TimeComparerType + { + FixedPrecision, + VariablePrecision + }; + + public: + G4MoleculeCounterTimeComparer(); + virtual ~G4MoleculeCounterTimeComparer() = default; + + G4MoleculeCounterTimeComparer(const G4MoleculeCounterTimeComparer&); + G4MoleculeCounterTimeComparer& operator=(const G4MoleculeCounterTimeComparer&); + + void SetFixedPrecision(G4double); + void SetVariablePrecision(const std::vector&, const std::vector&); + void SetVariablePrecision(const std::map&); + + G4double GetPrecisionAtTime(G4double) const; + + bool operator()(const G4double&, const G4double&) const; + + private: + TimeComparerType fType; + G4double fPrecision{1 * picosecond}; + std::map fVariablePrecision{}; + + public: // Factory + static G4MoleculeCounterTimeComparer CreateWithFixedPrecision(G4double); + static G4MoleculeCounterTimeComparer CreateWithVariablePrecision(const std::map&); +}; + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeTableMessenger.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeTableMessenger.hh index 135596e8cf..c1b029ac13 100644 --- a/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeTableMessenger.hh +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4MoleculeTableMessenger.hh @@ -32,7 +32,6 @@ #include class G4UIcmdWithAString; -class G4DNAMolecularReactionTable; class G4UIcmdWithoutParameter; class G4UIcmdWithADoubleAndUnit; class G4UIcmdWithAnInteger; diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounter.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounter.hh index 038bebdcd2..6bea35ff66 100644 --- a/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounter.hh +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounter.hh @@ -27,80 +27,133 @@ // Geant4 // // Created by Mathieu Karamitros on 02/11/2016. +// Modified by Christian Velten on 10/27/2024. // // +#ifndef G4VMOLECULECOUNTER_HH +#define G4VMOLECULECOUNTER_HH 1 -#pragma once +#include "G4MoleculeCounterTimeComparer.hh" +#include "G4VMoleculeCounterInternalBase.hh" -#include -#include -#include "G4ThreeVector.hh" +#include +#include class G4MolecularConfiguration; - class G4MoleculeDefinition; +class G4Track; +class G4StepPoint; -class G4VMoleculeCounter +//------------------------------------------------------------------------------ + +class G4VMoleculeCounter : public G4VMoleculeCounterInternalBase { -protected: - static G4ThreadLocal G4VMoleculeCounter* fpInstance; - G4bool fUse = false; + template + friend class G4VUserMoleculeCounter; - G4VMoleculeCounter() = default; - - virtual ~G4VMoleculeCounter() = default; - -public: - static void SetInstance(G4VMoleculeCounter*); - - static void DeleteInstance(); - - using Reactant = const G4MolecularConfiguration; - - /* - * If no instance of G4VMoleculeCounter is provided - * then use G4MoleculeCounter - */ - static G4VMoleculeCounter* Instance(); - - static void InitializeInstance(); - - /* - * If the molecule counter is used, it will be called - * at every creation/deletion of a molecule to - * to increase/decrease the number at a given time. - */ - void Use(G4bool flag = true); - - G4bool InUse(); - - //---------------------------------------------------- - - virtual void Initialize() = 0; - - virtual void ResetCounter() = 0; - - virtual void AddAMoleculeAtTime(Reactant*, - G4double time, - const G4ThreeVector* position = nullptr, - int number = 1) = 0; - - virtual void RemoveAMoleculeAtTime(Reactant*, - G4double time, - const G4ThreeVector* position = nullptr, - int number = 1) = 0; - - /* The dynamics of the given molecule won't be recorded. */ - virtual void DontRegister(const G4MoleculeDefinition*) + public: + enum MoleculeCounterType { - } - - virtual bool IsRegistered(const G4MoleculeDefinition*) + Other, + Basic, + Mesoscopic, + }; + struct G4VMoleculeCounterIndex : public G4VMoleculeCounterIndexInterface { - return false; - } + virtual ~G4VMoleculeCounterIndex() = default; + virtual G4bool operator<(G4VMoleculeCounterIndex const&) const = 0; + virtual G4bool operator==(G4VMoleculeCounterIndex const&) const = 0; + virtual G4String GetInfo() const = 0; + virtual const G4MolecularConfiguration* GetMolecule() const = 0; + }; - virtual void RegisterAll() - { - } -}; \ No newline at end of file + private: + G4VMoleculeCounter(); + G4VMoleculeCounter(const G4String&, MoleculeCounterType = MoleculeCounterType::Other); + G4VMoleculeCounter(G4VMoleculeCounter const&) = delete; + void operator=(G4VMoleculeCounter const& x) = delete; + + public: + ~G4VMoleculeCounter() override = default; + + public: + virtual std::unique_ptr BuildIndex(const G4Track*) const = 0; + virtual std::unique_ptr BuildIndex(const G4Track*, + const G4StepPoint*) const = 0; + virtual std::unique_ptr BuildSimpleIndex(const G4MolecularConfiguration*) const = 0; + + virtual void AddMolecule(std::unique_ptr, G4double, G4int = 1) = 0; + virtual void RemoveMolecule(std::unique_ptr, G4double, G4int = 1) = 0; + + virtual std::set GetRecordedMolecules() const = 0; + std::set GetRecordedTimes() const override = 0; + + virtual void SchedulerFinalizedTracking() = 0; + + protected: + MoleculeCounterType fType{MoleculeCounterType::Other}; + + G4bool fSensitiveToStepping{false}; + G4bool fNegativeCountsAreFatal{true}; + + std::set fIgnoredMolecules{}; + std::set fIgnoredReactants{}; + + public: + MoleculeCounterType GetType() const; + + G4bool GetSensitiveToStepping() const; + void SetSensitiveToStepping(G4bool = true); + + G4bool GetNegativeCountsAreFatal() const; + + // Ignore certain molecules from counting + void IgnoreMolecule(const G4MoleculeDefinition*); + void IgnoreReactant(const G4MolecularConfiguration*); + void RegisterAll(); + + G4bool IsReactantIgnored(const G4MoleculeDefinition*) const; + G4bool IsReactantIgnored(const G4MolecularConfiguration*) const; + + protected: + void SetNegativeCountsAreFatal(G4bool); +}; + +//------------------------------------------------------------------------------ + +inline G4VMoleculeCounter::MoleculeCounterType G4VMoleculeCounter::GetType() const +{ + return fType; +} + +inline G4bool G4VMoleculeCounter::GetSensitiveToStepping() const +{ + return fSensitiveToStepping; +} + +inline G4bool G4VMoleculeCounter::GetNegativeCountsAreFatal() const +{ + return fNegativeCountsAreFatal; +} +inline void G4VMoleculeCounter::SetNegativeCountsAreFatal(G4bool flag) +{ + fNegativeCountsAreFatal = flag; +} + +inline void G4VMoleculeCounter::IgnoreMolecule(const G4MoleculeDefinition* molecule) +{ + fIgnoredMolecules.insert(molecule); +} + +inline void G4VMoleculeCounter::IgnoreReactant(const G4MolecularConfiguration* reactant) +{ + fIgnoredReactants.insert(reactant); +} + +inline void G4VMoleculeCounter::RegisterAll() +{ + fIgnoredMolecules.clear(); + fIgnoredReactants.clear(); +} + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounterInternalBase.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounterInternalBase.hh new file mode 100644 index 0000000000..ddabc7671f --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeCounterInternalBase.hh @@ -0,0 +1,264 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#ifndef G4VMoleculeCounterInternalBaseBASE_HH +#define G4VMoleculeCounterInternalBaseBASE_HH 1 + +#include "G4Exception.hh" +#include "G4MoleculeCounterTimeComparer.hh" +#include "G4String.hh" +#include "G4Types.hh" +#include "G4UnitsTable.hh" +#include "G4ios.hh" + +#include +#include +#include +#include + +//------------------------------------------------------------------------------ +namespace G4 +{ +namespace MoleculeCounter +{ +struct FixedTimeComparer +{ + G4bool operator()(const G4double& a, const G4double& b) const; + static G4ThreadLocal G4double fPrecision; +}; +} // namespace MoleculeCounter +} // namespace G4 + +//------------------------------------------------------------------------------ + +using InnerCounterMapType = std::map; + +//------------------------------------------------------------------------------ + +class G4VMoleculeCounterInternalBase +{ + friend class G4VMoleculeCounter; + friend class G4VMoleculeReactionCounter; + // only allow these classes to derive + + public: + struct G4VMoleculeCounterIndexInterface + { + virtual ~G4VMoleculeCounterIndexInterface() = default; + virtual G4String GetInfo() const = 0; + }; + + private: + G4VMoleculeCounterInternalBase(); + G4VMoleculeCounterInternalBase(const G4String&); + G4VMoleculeCounterInternalBase(G4VMoleculeCounterInternalBase const&) = delete; + void operator=(G4VMoleculeCounterInternalBase const& x) = delete; + + public: + virtual ~G4VMoleculeCounterInternalBase() = default; + + public: + virtual void Initialize() = 0; + virtual void InitializeUser() = 0; + virtual void ResetCounter() = 0; + virtual void Dump() const = 0; + virtual void DumpCounterMapIndices() const = 0; + + virtual std::set GetRecordedTimes() const = 0; + + virtual void AbsorbCounter(const G4VMoleculeCounterInternalBase*) = 0; + + private: + static G4ThreadLocal G4int _createdCounters; + + protected: + G4bool fIsInitialized{false}; + + G4int fId; + G4int fManagedId{-1}; + G4String fName{}; + + G4int fVerbose{0}; + + G4double fActiveLowerBound{0}, fActiveUpperBound{std::numeric_limits::max()}; + G4bool fActiveLowerBoundInclusive{true}, fActiveUpperBoundInclusive{true}; + + G4bool fCheckTimeIsConsistentWithScheduler{true}; + G4bool fCheckRecordedTimesAreConsistent{true}; + + G4MoleculeCounterTimeComparer fTimeComparer{}; + + public: + G4int GetId() const; + void SetManagedId(G4int); + G4int GetManagedId() const; + const G4String& GetName() const; + + G4int GetVerbose() const; + void SetVerbose(G4int); + + // Set counter active w.r.t. time + G4double GetActiveLowerBound() const; + void SetActiveLowerBound(G4double, G4bool = true); + G4double GetActiveUpperBound() const; + void SetActiveUpperBound(G4double, G4bool = true); + G4bool GetActiveLowerBoundInclusive() const; + G4bool GetActiveUpperBoundInclusive() const; + G4bool IsTimeBelowLowerBound(G4double) const; + G4bool IsTimeAboveUpperBound(G4double) const; + G4bool IsActiveAtGlobalTime(G4double) const; + + G4bool GetCheckTimeConsistencyWithScheduler() const; // w.r.t. scheduler time + void SetCheckTimeConsistencyWithScheduler(G4bool = true); + G4bool GetCheckRecordedTimeConsistency() const; // w.r.t last recorded time + void SetCheckRecordedTimeConsistency(G4bool = true); + + const G4MoleculeCounterTimeComparer& GetTimeComparer() const; + void SetTimeComparer(const G4MoleculeCounterTimeComparer&); + + public: + static void SetFixedTimePrecision(G4double); +}; + +//------------------------------------------------------------------------------ + +inline G4int G4VMoleculeCounterInternalBase::GetId() const +{ + return fId; +} + +inline void G4VMoleculeCounterInternalBase::SetManagedId(G4int id) +{ + if (fManagedId > -1) { + G4ExceptionDescription description; + description << "Someone is trying to change the managed id of this counter but it was already " + "changed from -1!\n"; + description << " Id: " << fManagedId << "\n"; + description << "Name: " << fName << "\n"; + G4Exception("G4VMoleculeCounterInternalBase::SetManagedId", "MOLCTR000", FatalException, description); + } + fManagedId = id; +} +inline G4int G4VMoleculeCounterInternalBase::GetManagedId() const +{ + return fManagedId; +} + +inline const G4String& G4VMoleculeCounterInternalBase::GetName() const +{ + return fName; +} + +inline G4int G4VMoleculeCounterInternalBase::GetVerbose() const +{ + return fVerbose; +} +inline void G4VMoleculeCounterInternalBase::SetVerbose(G4int verbose) +{ + fVerbose = verbose; +} + +inline G4double G4VMoleculeCounterInternalBase::GetActiveLowerBound() const +{ + return fActiveLowerBound; +} +inline void G4VMoleculeCounterInternalBase::SetActiveLowerBound(G4double time, G4bool inclusive) +{ + fActiveLowerBound = time; + fActiveLowerBoundInclusive = inclusive; +} + +inline G4double G4VMoleculeCounterInternalBase::GetActiveUpperBound() const +{ + return fActiveUpperBound; +} +inline void G4VMoleculeCounterInternalBase::SetActiveUpperBound(G4double time, G4bool inclusive) +{ + fActiveUpperBound = time; + fActiveUpperBoundInclusive = inclusive; +} + +inline G4bool G4VMoleculeCounterInternalBase::GetActiveLowerBoundInclusive() const +{ + return fActiveLowerBoundInclusive; +} +inline G4bool G4VMoleculeCounterInternalBase::GetActiveUpperBoundInclusive() const +{ + return fActiveUpperBoundInclusive; +} + +inline G4bool G4VMoleculeCounterInternalBase::IsTimeBelowLowerBound(G4double time) const +{ + return (fActiveLowerBoundInclusive && time < fActiveLowerBound) + || (!fActiveLowerBoundInclusive && time <= fActiveLowerBound); +} +inline G4bool G4VMoleculeCounterInternalBase::IsTimeAboveUpperBound(G4double time) const +{ + return (fActiveUpperBoundInclusive && time > fActiveUpperBound) + || (!fActiveUpperBoundInclusive && time >= fActiveUpperBound); +} +inline G4bool G4VMoleculeCounterInternalBase::IsActiveAtGlobalTime(G4double time) const +{ + return !(IsTimeBelowLowerBound(time) || IsTimeAboveUpperBound(time)); +} + +inline G4bool G4VMoleculeCounterInternalBase::GetCheckTimeConsistencyWithScheduler() const +{ + return fCheckTimeIsConsistentWithScheduler; +} +inline void G4VMoleculeCounterInternalBase::SetCheckTimeConsistencyWithScheduler(G4bool flag) +{ + fCheckTimeIsConsistentWithScheduler = flag; +} + +inline G4bool G4VMoleculeCounterInternalBase::GetCheckRecordedTimeConsistency() const +{ + return fCheckRecordedTimesAreConsistent; +} +inline void G4VMoleculeCounterInternalBase::SetCheckRecordedTimeConsistency(G4bool flag) +{ + fCheckRecordedTimesAreConsistent = flag; +} + +inline const G4MoleculeCounterTimeComparer& G4VMoleculeCounterInternalBase::GetTimeComparer() const +{ + return fTimeComparer; +} + +inline void G4VMoleculeCounterInternalBase::SetTimeComparer(const G4MoleculeCounterTimeComparer& comparer) +{ + if (fIsInitialized) { + G4Exception("G4VMoleculeCounterInternalBase::SetTimeComparer()", "AlreadyInitialized", JustWarning, + "Molecule counter was already initialized, assigning the time comparer now may " + "have no effect!"); + } + fTimeComparer = comparer; +} + +//------------------------------------------------------------------------------ + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeReactionCounter.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeReactionCounter.hh new file mode 100644 index 0000000000..fc4f3b9812 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4VMoleculeReactionCounter.hh @@ -0,0 +1,92 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) +#ifndef G4VMOLECULEREACTIONCOUNTER_HH +#define G4VMOLECULEREACTIONCOUNTER_HH 1 + +#include "G4VMoleculeCounterInternalBase.hh" + +#include +#include + +class G4Track; +class G4DNAMolecularReactionData; + +//------------------------------------------------------------------------------ + +class G4VMoleculeReactionCounter : public G4VMoleculeCounterInternalBase +{ + template + friend class G4VUserMoleculeReactionCounter; + + public: + enum MoleculeReactionCounterType + { + Other, + Basic, + }; + struct G4VMoleculeReactionCounterIndex + { + virtual ~G4VMoleculeReactionCounterIndex() = default; + virtual G4bool operator<(G4VMoleculeReactionCounterIndex const&) const = 0; + virtual G4bool operator==(G4VMoleculeReactionCounterIndex const&) const = 0; + virtual G4String GetInfo() const = 0; + virtual const G4DNAMolecularReactionData* GetReactionData() const = 0; + }; + + private: + G4VMoleculeReactionCounter(); + G4VMoleculeReactionCounter(const G4String&, MoleculeReactionCounterType = + MoleculeReactionCounterType::Basic); + G4VMoleculeReactionCounter(G4VMoleculeReactionCounter const&) = delete; + void operator=(G4VMoleculeReactionCounter const& x) = delete; + + public: + ~G4VMoleculeReactionCounter() override = default; + + public: + // virtual std::unique_ptr BuildIndex(const G4Track*, const G4Track*, const G4DNAMolecularReactionData*) const = 0; + virtual std::unique_ptr BuildSimpleIndex(const G4DNAMolecularReactionData*) const = 0; + + virtual void RecordReaction(std::unique_ptr, G4double, G4int = 1) = 0; + + virtual std::set GetRecordedReactions() const = 0; + + protected: + MoleculeReactionCounterType fType{MoleculeReactionCounterType::Basic}; + + public: + MoleculeReactionCounterType GetType() const; +}; + +//------------------------------------------------------------------------------ + +inline G4VMoleculeReactionCounter::MoleculeReactionCounterType G4VMoleculeReactionCounter::GetType() const +{ + return fType; +} + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/include/G4VUserMoleculeCounter.hh b/source/processes/electromagnetic/dna/molecules/management/include/G4VUserMoleculeCounter.hh new file mode 100644 index 0000000000..93be137860 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/include/G4VUserMoleculeCounter.hh @@ -0,0 +1,764 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#ifndef G4VUSERMOLECULECOUNTER_HH +#define G4VUSERMOLECULECOUNTER_HH 1 + +#include "G4MoleculeCounterManager.hh" +#include "G4MolecularConfiguration.hh" +#include "G4MoleculeCounterTemplates.hh" +#include "G4Scheduler.hh" +#include "G4UnitsTable.hh" +#include "G4VMoleculeCounter.hh" + +//------------------------------------------------------------------------------ + +template +class G4VUserMoleculeCounter : public G4VMoleculeCounter +{ + static_assert(std::is_base_of::value, + "TIndex must be derived from G4VMoleculeCounter::G4VMoleculeCounterIndex! " + "No forward declaration is allowed."); + + protected: + struct Search; + + public: + G4VUserMoleculeCounter(); + G4VUserMoleculeCounter(G4String, MoleculeCounterType = MoleculeCounterType::Other); + ~G4VUserMoleculeCounter() override = default; + + public: + void Initialize() final; + void InitializeUser() override = 0; + void ResetCounter() override; + void Dump() const override; + void DumpCounterMapIndices() const override; + + void AbsorbCounter(const G4VMoleculeCounterInternalBase*) override; + + std::unique_ptr BuildIndex(const G4Track*) const override = 0; + std::unique_ptr BuildIndex(const G4Track*, const G4StepPoint*) const override = 0; + std::unique_ptr BuildSimpleIndex(const G4MolecularConfiguration*) const override = 0; + + void AddMolecule(std::unique_ptr, G4double, G4int = 1) override; + void RemoveMolecule(std::unique_ptr, G4double, G4int = 1) override; + + std::set GetRecordedMolecules() const override; + std::set GetRecordedTimes() const override; + + void SchedulerFinalizedTracking() override; + + protected: + std::map fCounterMap{}; + std::map fShadowCounterMap{}; + + public: + const std::map& GetCounterMap() const { return fCounterMap; } + std::vector GetMapIndices() const; + + virtual G4int GetNbMoleculesAtTime(const TIndex&, G4double) const; + virtual G4int GetNbMoleculesAtTime(Search&, const TIndex&, G4double) const; + virtual std::vector GetNbMoleculesAtTimes(const TIndex&, const std::vector&) const; + + //-SEARCH----------------------------------------------------------------------- + protected: + struct Search + { + Search() : fLowerBoundSet(false) {} + typename std::map::const_iterator fLastIndexSearched; + InnerCounterMapType::const_iterator fLowerBoundTime; + G4bool fLowerBoundSet; + }; + G4bool SearchIndexUpdated(Search&, const TIndex&) const; + G4int SearchUpperBoundTime(Search&, G4double, G4bool) const; +}; + +//------------------------------------------------------------------------------ + +// #include "G4VUserMoleculeCounter.icc" + +//------------------------------------------------------------------------------ + +template +G4VUserMoleculeCounter::G4VUserMoleculeCounter() : G4VMoleculeCounter() +{} + +//------------------------------------------------------------------------------ + +template +G4VUserMoleculeCounter::G4VUserMoleculeCounter(G4String name, MoleculeCounterType type) + : G4VMoleculeCounter(name, type) +{} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::Initialize() +{ + InitializeUser(); + fIsInitialized = true; +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeCounter::GetNbMoleculesAtTime(const TIndex& index, G4double time) const +{ + Search search = {}; + return GetNbMoleculesAtTime(search, index, time); +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeCounter::GetNbMoleculesAtTime(Search& search, const TIndex& index, + G4double time) const +{ + G4bool sameIndex = !SearchIndexUpdated(search, index); + return SearchUpperBoundTime(search, time, sameIndex); +} + +//------------------------------------------------------------------------------ + +template +std::vector +G4VUserMoleculeCounter::GetNbMoleculesAtTimes(const TIndex& index, + const std::vector& times) const +{ + Search search = {}; + std::vector counts = {}; + for (auto time : times) + counts.push_back(GetNbMoleculesAtTime(search, index, time)); + return counts; +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::AddMolecule( + std::unique_ptr pIndex, G4double time, G4int number) +{ + const TIndex* mapIndex = dynamic_cast(pIndex.get()); + + if(mapIndex == nullptr) + { + G4ExceptionDescription errMsg; + errMsg << "mapIndex is not found "<< G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AddMolecule"), + "mapIndex == nullptr", FatalException, errMsg); + }else{ + if (G4::MoleculeCounter::Contains(fIgnoredMolecules, mapIndex->GetMolecule()->GetDefinition()) + || G4::MoleculeCounter::Contains(fIgnoredReactants, mapIndex->GetMolecule())) + { + return; + } + + if (fCheckTimeIsConsistentWithScheduler && G4Scheduler::Instance()->IsRunning() + && std::fabs(time - G4Scheduler::Instance()->GetGlobalTime()) + > G4Scheduler::Instance()->GetTimeTolerance()) + { + G4ExceptionDescription errMsg; + errMsg << "Time of species " << mapIndex->GetMolecule()->GetName() << " is " + << G4BestUnit(time, "Time") << "while the global time is " + << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AddMolecule"), + "TIME_DONT_MATCH", FatalException, errMsg); + } + + if (IsTimeAboveUpperBound(time)) { + if (fVerbose > 3) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::AddMolecule : " << mapIndex->GetMolecule()->GetName() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + G4cout << ":: [IsTimeAboveUpperBound] Skipping since IsTimeAboveUpperBound == true" + << G4endl; + } + return; + } + else if (IsTimeBelowLowerBound(time)) { + // put into shadow counter + auto [it, indexIsNew] = fShadowCounterMap.emplace(*mapIndex, number); + if (!indexIsNew) it->second += number; + if (fVerbose > 3) { + G4cout << ":: [IsTimeBelowLowerBound] Adding " << mapIndex->GetInfo() + << " shadow count: " << it->second - number << " + " << number << G4endl; + } + return; + } + + if (fVerbose > 1) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::AddMolecule : " << mapIndex->GetMolecule()->GetName() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + } + + // within time bounds && not-ignored molecule + // -> continue + + auto it_shadow = fShadowCounterMap.find(*mapIndex); + auto [it, indexIsNew] = fCounterMap.emplace(*mapIndex, InnerCounterMapType{fTimeComparer}); + + if (it_shadow != fShadowCounterMap.end()) { + // entry found in shadow counter + if (indexIsNew) { + // mapIndex is new, initialize with shadow counter + it->second[fActiveLowerBound] = it_shadow->second; + } + else { + // mapIndex existed, we need to add the shadow count to it + // this happens if we are in a subsequent event and have just crossed over the lower + // activity bound the counter has then already entries from the previous event + InnerCounterMapType::iterator it_time; + G4bool timeIsNew; + std::tie(it_time, timeIsNew) = it->second.emplace(fActiveLowerBound, 0); + do { + it_time->second += it_shadow->second; + } while (++it_time != it->second.end()); + } + // either way, remove the shadow count + fShadowCounterMap.erase(it_shadow); + } + + // map for index existed (and was not empty) + if (G4MoleculeCounterManager::Instance()->GetResetCountersBeforeEvent()) + // can only do consistency check if the counters are cleared for each event (= chem run) + { + auto end = it->second.rbegin(); + auto init_n = end == it->second.rend() ? 0 : end->second; + + auto [it_time, timeIsNew] = it->second.emplace(time, init_n); + it_time->second += number; + + if (fCheckRecordedTimesAreConsistent + && !(end->first <= time + || std::fabs(end->first - time) <= fTimeComparer.GetPrecisionAtTime(time))) + // Case 1 = new time comes after last recorded data + // Case 2 = new time is about the same as the last recorded one + { + G4ExceptionDescription errMsg; + errMsg << "Time of species " << mapIndex->GetMolecule()->GetName() << " is " + << G4BestUnit(time, "Time") << "while the global time is " + << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") + << "(last counter time: " << G4BestUnit(end->first, "Time") << ")" << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::AddMolecule"), + "TIME_DONT_MATCH", FatalException, errMsg); + } + } + else // counters are not (automatically) reset by manager + { + // since counters are not cleared after chemical run (i.e., after event) + // there will already be numbers in the map, so... + // (1) find the closest time + // (2) emplace entry using closest value as init + number + // (3) add number to all "future" entries as well + if (it->second.empty()) { + it->second.emplace(time, number); + } + else { // at least one element exists, so we can try to find the closest key + auto it_closest = G4::MoleculeCounter::FindClosestEntryForKey(it->second, time); + auto [it_time, _] = it->second.emplace(time, it_closest->second); + do { + it_time->second += number; + } while (++it_time != it->second.end()); + } + } + } +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::RemoveMolecule( + std::unique_ptr pIndex, G4double time, G4int number) +{ + const TIndex* mapIndex = dynamic_cast(pIndex.get()); + + if(mapIndex == nullptr) + { + G4ExceptionDescription errMsg; + errMsg << "mapIndex is not found "<< G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AddMolecule"), + "mapIndex == nullptr", FatalException, errMsg); + }else{ + if (G4::MoleculeCounter::Contains(fIgnoredMolecules, mapIndex->GetMolecule()->GetDefinition()) + || G4::MoleculeCounter::Contains(fIgnoredReactants, mapIndex->GetMolecule())) + { + return; + } + + if (fCheckTimeIsConsistentWithScheduler && G4Scheduler::Instance()->IsRunning() + && std::fabs(time - G4Scheduler::Instance()->GetGlobalTime()) + > G4Scheduler::Instance()->GetTimeTolerance()) + { + G4ExceptionDescription errMsg; + errMsg << "Time of species " << mapIndex->GetMolecule()->GetName() << " is " + << G4BestUnit(time, "Time") << "while the global time is " + << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RemoveMolecule"), + "TIME_DONT_MATCH", FatalException, errMsg); + } + + if (IsTimeBelowLowerBound(time)) { + auto it = fShadowCounterMap.find(*mapIndex); + if (it == fShadowCounterMap.end()) { + G4ExceptionDescription errMsg; + errMsg << "There was no " << mapIndex->GetMolecule()->GetName() + << " recorded at the time or even before the time asked" << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RemoveMolecule"), + "", FatalErrorInArgument, errMsg); + } + else { + if (fVerbose > 3) { + G4cout << ":: [IsTimeBelowLowerBound] Removing " << mapIndex->GetInfo() + << " shadow count: " << it->second << " - " << number << G4endl; + } + it->second -= number; + return; + } + } + else if (IsTimeAboveUpperBound(time)) { + // if the "active" counter was not filled, add the shadow counter to it at the lower bound + // only needed for remove since remove will always be called at the end when the molecule is + // destroyed + auto [it, indexIsNew] = fCounterMap.emplace(*mapIndex, InnerCounterMapType{fTimeComparer}); + if (indexIsNew || it->second.empty()) { + auto it_shadow = fShadowCounterMap.find(*mapIndex); + if (it_shadow != fShadowCounterMap.end()) { + it->second[fActiveLowerBound] = it_shadow->second; + if (fVerbose > 3) { + G4cout << ":: [IsTimeAboveUpperBound] Set " << mapIndex->GetInfo() + << " Map[ActiveLowerBound] with shadow count:" << it_shadow->second << G4endl; + } + fShadowCounterMap.erase(it_shadow); + } + else if (fVerbose > 3) { + G4cout << ":: [IsTimeAboveUpperBound] Not updating with shadow count since" + " no shadow count was found!" + << G4endl; + } + } + else if (fVerbose > 3) { + G4cout << ":: [IsTimeAboveUpperBound] Not updating with shadow count" + " since it already exists " + << G4endl; + } + return; + } + + if (fVerbose > 2) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::RemoveMolecule : " << mapIndex->GetMolecule()->GetName() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + } + + // within time bounds && not-ignored molecule + // -> continue + + auto it_shadow = fShadowCounterMap.find(*mapIndex); + auto it = fCounterMap.find(*mapIndex); + + if (it_shadow != fShadowCounterMap.end()) { + // entry found in shadow counter + if (it == fCounterMap.end()) { + // no mapIndex found, initialize with shadow counter + G4bool indexIsNew = false; + std::tie(it, indexIsNew) = + fCounterMap.emplace(*mapIndex, InnerCounterMapType{fTimeComparer}); + if (!indexIsNew) { + G4ExceptionDescription errMsg; + errMsg << "We tried to emplace the index after it was found to not exist, but now it " + "says it existed!?" + << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RemoveMolecule"), + "NONSENSICAL", FatalErrorInArgument, errMsg); + } + it->second[fActiveLowerBound] = it_shadow->second; + } + else { // it != fCounterMap.end() + // mapIndex exists, we need to add the shadow count to it + // this happens if we are in a subsequent event and have just crossed over the lower + // activity bound the counter has then already entries from the previous event + auto [it_time, _] = it->second.emplace(fActiveLowerBound, 0); + do { + it_time->second += it_shadow->second; + } while (++it_time != it->second.end()); + } + + // either way, remove the shadow count + fShadowCounterMap.erase(it_shadow); + + // if (it_shadow != fShadowCounterMap.end()) { + // G4bool indexIsNew = false; + // // auto [it_, indexIsNew] = fCounterMap.emplace(*mapIndex, + // // InnerCounterMapType{fTimeComparer}); + // std::tie(it, indexIsNew) = fCounterMap.emplace(*mapIndex, + // InnerCounterMapType{fTimeComparer}); if (!indexIsNew) { + // G4ExceptionDescription errMsg; + // errMsg << "We tried to emplace the index after it was found to not exist, but now it + // " + // "says it existed!?" + // << G4endl; + // G4Exception(G4String("G4VUserMoleculeCounter<" + // + G4::MoleculeCounter::GetTemplateTypeName() + // + ">::RemoveMolecule"), + // "NONSENSICAL", FatalErrorInArgument, errMsg); + // } + // it->second[fActiveLowerBound] = it_shadow->second; + // // it = it_; + // if (fVerbose > 3) { + // G4cout << ":: Initialize " << mapIndex->GetInfo() + // << " Map[ActiveLowerBound] with shadow count:" << it_shadow->second << + // G4endl; + // } + // fShadowCounterMap.erase(it_shadow); + // } + } + + InnerCounterMapType& nbMolPerTime = it->second; + InnerCounterMapType::iterator it_time; + G4bool isNewTime = false; + G4double oldTime = 0; + + if (G4MoleculeCounterManager::Instance()->GetResetCountersBeforeEvent()) { + auto end = nbMolPerTime.rbegin(); // get last entry + oldTime = end->first; + + // CHECK: no molecules have been recorded for this index + if (end == nbMolPerTime.rend()) { + if (fVerbose > 2) { + mapIndex->GetMolecule()->PrintState(); + Dump(); + } + G4ExceptionDescription errMsg; + errMsg << "There was no " << mapIndex->GetMolecule()->GetName() + << " recorded at the time or even before the time asked" << G4endl; + G4Exception("G4VUserMoleculeCounter::RemoveMolecule", "", FatalErrorInArgument, errMsg); + } + // CHECK: current time is less (by more than counter precision) than the most recently + // recorded index + if (fCheckRecordedTimesAreConsistent + && time - end->first < -fTimeComparer.GetPrecisionAtTime(time)) + { + if (fVerbose > 2) { + mapIndex->GetMolecule()->PrintState(); + Dump(); + } + G4ExceptionDescription errMsg; + errMsg << "Is time going back?? " << mapIndex->GetMolecule()->GetName() + << " is being removed at time " << G4BestUnit(time, "Time") + << "while last recorded time was " << G4BestUnit(end->first, "Time") << "."; + G4Exception("G4VUserMoleculeCounter::RemoveMolecule", "RETURN_TO_THE_FUTUR", + FatalErrorInArgument, errMsg); + } + std::tie(it_time, isNewTime) = nbMolPerTime.emplace(time, end->second); + // auto oldNumber = it_time->second; + it_time->second -= number; + // if (time > 0.001) + // G4cout << "(t=" << time << ")=" << number << " | old_it(t=" << it_time->first + // << ") = " << oldNumber << " | timeIsNew=" << isNewTime + // << " | new_it(t=" << it_time->first << ") = " << it_time->second << G4endl; + } + else { + // since counters are not cleared after chemical run (i.e., after event) + // there will already be numbers in the map, so... + // (1) find the closest time + // (2) emplace entry using closest value as init - number + // (3) remove number from all "future" entries as well + auto it_closest = G4::MoleculeCounter::FindClosestEntryForKey(nbMolPerTime, time); + std::tie(it_time, isNewTime) = nbMolPerTime.emplace(time, it_closest->second); + auto _it = it_time; + do { + _it->second -= number; + } while (++_it != it->second.end()); + } + + // Check that count at new time is >= 0 + // This currently throws tons of errors for non-basic counters. + // auto it_time = nbMolPerTime.find(time); + if (it_time == nbMolPerTime.end() || it_time->second < 0) { + if (fVerbose > 2) Dump(); + G4ExceptionDescription errMsg; + errMsg << "After removal of " << number << " species of " + << mapIndex->GetMolecule()->GetName() << " the final number at time " + << G4BestUnit(time, "Time") << " is less than zero and so not valid." + << "\nIndex was :" << mapIndex->GetInfo() << "\nGlobal time is " + << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") + << "\nPrevious selected time is " << G4BestUnit(oldTime, "Time") << G4endl; + if (fNegativeCountsAreFatal) { + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RemoveMolecule"), + "N_INF_0", FatalException, errMsg); + } + else if (fVerbose > 0) { + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RemoveMolecule"), + "N_INF_0", JustWarning, errMsg); + } + } + } +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::SchedulerFinalizedTracking() +{ + // Add record to fCounterMap for each fShadowCounterMap index unless they exist already + for (auto& it_shadow : fShadowCounterMap) { + auto [it, indexIsNew] = + fCounterMap.emplace(it_shadow.first, InnerCounterMapType{fTimeComparer}); + if (indexIsNew || it->second.empty()) { + it->second[fActiveLowerBound] = it_shadow.second; + if (fVerbose > 3) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::SchedulerEndedTracking : " << "setting map index '" + << it_shadow.first.GetInfo() << "' from shadow counter to n = " << it_shadow.second + << G4endl; + } + } + else if (fVerbose > 2) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::SchedulerEndedTracking : " + << "encountered dangling shadow counter iterator for index '" + << it_shadow.first.GetInfo() << "'" << G4endl; + } + } + fShadowCounterMap.clear(); +} + +//------------------------------------------------------------------------------ + +template +std::vector G4VUserMoleculeCounter::GetMapIndices() const +{ + if (fVerbose > 2) { + G4cout << "Entering in G4VUserMoleculeCounter::GetMapIndices" << G4endl; + } + return G4::MoleculeCounter::GetMapIndices(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +std::set G4VUserMoleculeCounter::GetRecordedMolecules() const +{ + if (fVerbose > 2) { + G4cout << "Entering in G4MoleculeCounter::RecordMolecules" << G4endl; + } + std::set output{}; + for (const auto& it : fCounterMap) { + output.insert(it.first.GetMolecule()); + } + return output; +} + +//------------------------------------------------------------------------------ + +template +std::set G4VUserMoleculeCounter::GetRecordedTimes() const +{ + return G4::MoleculeCounter::GetRecordedTimes(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::Dump() const +{ + DumpCounterMapIndices(); + G4::MoleculeCounter::DumpCounterMapContents(fCounterMap); +} + +template +void G4VUserMoleculeCounter::DumpCounterMapIndices() const +{ + G4::MoleculeCounter::DumpCounterMapIndices(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::ResetCounter() +{ + if (fVerbose > 1) { + G4cout << "G4VUserMoleculeCounter<" << G4::MoleculeCounter::GetTemplateTypeName() << ">(" + << GetName() << ")::ResetCounter" << G4endl; + } + fCounterMap.clear(); +} + +//------------------------------------------------------------------------------ + +template +G4bool G4VUserMoleculeCounter::SearchIndexUpdated(Search& search, const TIndex& index) const +{ + if (search.fLowerBoundSet && !(search.fLastIndexSearched->first < index) + && !(index < search.fLastIndexSearched->first)) + { + return true; + } + + auto mol_it = fCounterMap.find(index); + search.fLastIndexSearched = mol_it; + + if (mol_it != fCounterMap.end()) { + search.fLowerBoundTime = search.fLastIndexSearched->second.end(); + search.fLowerBoundSet = true; + } + else { + search.fLowerBoundSet = false; + } + + return false; +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeCounter::SearchUpperBoundTime(Search& search, G4double time, + G4bool sameIndex) const +{ + auto mol_it = search.fLastIndexSearched; + if (mol_it == fCounterMap.end()) { + return 0; + } + + InnerCounterMapType const& timeMap = mol_it->second; + if (timeMap.empty()) { + return 0; + } + + if (sameIndex) { + if (search.fLowerBoundSet && search.fLowerBoundTime != timeMap.end()) { + if (search.fLowerBoundTime->first < time) { + auto upperToLast = search.fLowerBoundTime; + upperToLast++; + + if (upperToLast == timeMap.end()) { + return search.fLowerBoundTime->second; + } + + if (upperToLast->first > time) { + return search.fLowerBoundTime->second; + } + } + } + } + + auto up_time_it = timeMap.upper_bound(time); + + if (up_time_it == timeMap.end()) { + auto last_time = timeMap.rbegin(); + return last_time->second; + } + if (up_time_it == timeMap.begin()) { + return 0; + } + + up_time_it--; + + search.fLowerBoundTime = up_time_it; + search.fLowerBoundSet = true; + + return search.fLowerBoundTime->second; +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeCounter::AbsorbCounter(const G4VMoleculeCounterInternalBase* pCounterBase) +{ + if (pCounterBase == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "Could not cast the pointer to type G4VUserMoleculeCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">!\n" + << "Because the pointer is nullptr!" << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "BAD_REFERENCE", FatalException, errMsg); + } + + auto pCounter = dynamic_cast const*>(pCounterBase); + + if (pCounter == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "Could not cast the pointer to type G4VUserMoleculeCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">!\n" + << "Because the objects aren't of the same type!" << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "BAD_REFERENCE", FatalException, errMsg); + } + + if (pCounter->GetType() != GetType()) { + G4ExceptionDescription errMsg; + errMsg << "You are trying to absorb a counter with different type!" << G4endl; + G4Exception(G4String("G4VUserMoleculeCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "TYPE_DIFF", JustWarning, errMsg); + } + + for (auto const& worker_it : pCounter->GetCounterMap()) { + auto [master_it, indexIsNew] = + fCounterMap.emplace(worker_it.first, InnerCounterMapType{fTimeComparer}); + + G4int currentNumber = 0, previousNumber = 0; + for (auto const& [time, number] : worker_it.second) { + currentNumber = number - previousNumber; + previousNumber = number; + + if (master_it->second.empty()) { + master_it->second.emplace(time, currentNumber); + } + else { // at least one element exists, so we can try to find the closest key + auto it_closest = G4::MoleculeCounter::FindClosestEntryForKey(master_it->second, time); + auto [it, _] = master_it->second.emplace(time, it_closest->second); + do { + it->second += currentNumber; + } while (++it != master_it->second.end()); + } + } + } +} + +//------------------------------------------------------------------------------ + +#endif diff --git a/source/processes/electromagnetic/dna/molecules/management/sources.cmake b/source/processes/electromagnetic/dna/molecules/management/sources.cmake index 355f87b158..56b9aaf016 100644 --- a/source/processes/electromagnetic/dna/molecules/management/sources.cmake +++ b/source/processes/electromagnetic/dna/molecules/management/sources.cmake @@ -7,37 +7,49 @@ geant4_add_module(G4emdna-molman G4MolecularConfiguration.hh G4MolecularDissociationChannel.hh G4MolecularDissociationTable.hh - G4MoleculeCounter.hh G4MoleculeDefinition.hh G4MoleculeFinder.hh G4MoleculeHandleManager.hh G4Molecule.hh G4MoleculeIterator.hh G4MoleculeTable.hh + G4MoleculeTableMessenger.hh G4Serialize.hh G4VMolecularDissociationDisplacer.hh + G4MoleculeCounterManager.hh + G4MoleculeCounterManagerMessenger.hh + G4MoleculeCounterTemplates.hh + G4VMoleculeCounterInternalBase.hh G4VMoleculeCounter.hh - G4MoleculeTableMessenger.hh + G4VMoleculeReactionCounter.hh + G4VUserMoleculeCounter.hh + G4MoleculeCounter.hh + G4MoleculeCounterTimeComparer.hh SOURCES G4MolecularConfiguration.cc G4MolecularDissociationChannel.cc G4MolecularDissociationTable.cc - G4MoleculeCounter.cc G4Molecule.cc G4MoleculeDefinition.cc G4MoleculeHandleManager.cc G4MoleculeTable.cc + G4MoleculeTableMessenger.cc G4Serialize.cc G4VMolecularDissociationDisplacer.cc + G4MoleculeCounterManager.cc + G4MoleculeCounterManagerMessenger.cc + G4VMoleculeCounterInternalBase.cc G4VMoleculeCounter.cc - G4MoleculeTableMessenger.cc) + G4VMoleculeReactionCounter.cc + G4MoleculeCounter.cc + G4MoleculeCounterTimeComparer.cc) geant4_module_link_libraries(G4emdna-molman PUBLIC G4emdna-man G4globman G4partman + G4intercoms PRIVATE G4heprandom - G4intercoms G4track) diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4Molecule.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4Molecule.cc index e0aa112c57..b7891cadc2 100644 --- a/source/processes/electromagnetic/dna/molecules/management/src/G4Molecule.cc +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4Molecule.cc @@ -48,12 +48,13 @@ #include "G4Molecule.hh" #include "G4MolecularConfiguration.hh" +#include "G4MoleculeLocator.hh" #include "Randomize.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4Track.hh" -#include "G4VMoleculeCounter.hh" - +//#include "G4DNAChemistryManager.hh" +#include "G4MoleculeCounterManager.hh" using namespace std; G4Allocator*& aMoleculeAllocator() @@ -154,12 +155,23 @@ G4Molecule::~G4Molecule() { if (fpTrack != nullptr) { - if (G4VMoleculeCounter::Instance()->InUse()) + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { - G4VMoleculeCounter::Instance()-> - RemoveAMoleculeAtTime(fpMolecularConfiguration, - fpTrack->GetGlobalTime(), - &(fpTrack->GetPosition())); + switch (fpTrack->GetTrackStatus()) + { + case fAlive: + case fPostponeToNextEvent: + case fStopButAlive: + case fSuspend: + // do not remove molecule count if the track is not being killed + break; + case fStopAndKill: + case fKillTrackAndSecondaries: + default: + G4MoleculeCounterManager::Instance()->RemoveMolecule(fpTrack, + fpTrack->GetGlobalTime()); + break; + } } fpTrack = nullptr; } @@ -360,8 +372,9 @@ void G4Molecule::PrintState() const //______________________________________________________________________________ -G4Track* G4Molecule::BuildTrack(G4double globalTime, - const G4ThreeVector& position) +G4Track *G4Molecule::BuildTrack(G4double globalTime, + const G4ThreeVector &position, + const G4Track *parentTrack) { if (fpTrack != nullptr) { @@ -386,18 +399,35 @@ G4Track* G4Molecule::BuildTrack(G4double globalTime, fpMolecularConfiguration->GetDefinition(), MomentumDirection, KineticEnergy); - if (G4VMoleculeCounter::Instance()->InUse()) - { - G4VMoleculeCounter::Instance()-> - AddAMoleculeAtTime(fpMolecularConfiguration, - globalTime, - &(fpTrack->GetPosition())); - } - - //Set the Track + // Set the Track fpTrack = new G4Track(dynamicParticle, globalTime, position); fpTrack->SetUserInformation(this); + // Copy over touchable handle (see G4VEmProcess) + if (parentTrack == nullptr || parentTrack->GetTouchable() == nullptr || + position != parentTrack->GetPosition()) + { + // If (1) no track or touchable handle exists, or + // If (2) the new position is inconsistent with the track's position + // create a new touchable from the position: + // this way the subsequent calls *should* properly see its location (i.e. PV) + G4MoleculeLocator::Instance()->LocateMoleculeSetStateAndTouchable(fpTrack); + } + else + { + fpTrack->SetTouchableHandle(parentTrack->GetTouchableHandle()); + } + + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + { + G4MoleculeCounterManager::Instance()->AddMolecule(fpTrack, + fpTrack->GetGlobalTime()); + // G4VMoleculeCounter::Instance()-> + // AddAMoleculeAtTime(fpMolecularConfiguration, + // globalTime, + // &(fpTrack->GetPosition())); + } + return fpTrack; } diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounter.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounter.cc index 7cfc910931..2724e2bf71 100644 --- a/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounter.cc +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounter.cc @@ -23,486 +23,52 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// Author: Mathieu Karamitros +// Modified by Christian Velten on 10/27/2024. // #include "G4MoleculeCounter.hh" #include "G4MolecularConfiguration.hh" -#include "G4MoleculeDefinition.hh" +#include "G4Molecule.hh" #include "G4MoleculeTable.hh" -#include "G4Scheduler.hh" // TODO: remove this dependency -#include "G4SystemOfUnits.hh" -#include "G4UIcommand.hh" -#include "G4UnitsTable.hh" #include -#include - -using namespace std; - -namespace G4{ -namespace MoleculeCounter { - -bool TimePrecision::operator()(const double& a, const double& b) const -{ - if (std::fabs(a - b) < fPrecision) - { - return false; - } - - return a < b; -} - -G4ThreadLocal double TimePrecision::fPrecision = 0.5 * picosecond; -} -} //------------------------------------------------------------------------------ -G4MoleculeCounter* G4MoleculeCounter::Instance() + +G4MoleculeCounter::G4MoleculeCounter() : G4VUserMoleculeCounter() {} + +G4MoleculeCounter::G4MoleculeCounter(G4String name) + : G4VUserMoleculeCounter(name, MoleculeCounterType::Basic) +{} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounter::InitializeUser() {} + +//------------------------------------------------------------------------------ + +std::unique_ptr +G4MoleculeCounter::BuildIndex(const G4Track* aTrack) const { - if (fpInstance == nullptr) - { - fpInstance = new G4MoleculeCounter(); - } - return dynamic_cast(fpInstance); + return std::make_unique(GetMolecule(aTrack)->GetMolecularConfiguration()); } //------------------------------------------------------------------------------ -G4MoleculeCounter::G4MoleculeCounter() +std::unique_ptr +G4MoleculeCounter::BuildIndex(const G4Track* aTrack, const G4StepPoint*) const { - fVerbose = 0; - fCheckTimeIsConsistentWithScheduler = true; + return BuildIndex(aTrack); } //------------------------------------------------------------------------------ -G4MoleculeCounter::~G4MoleculeCounter() = default; - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::Initialize() +std::unique_ptr +G4MoleculeCounter::BuildSimpleIndex(const G4MolecularConfiguration* configuration) const { - auto mol_iterator = G4MoleculeTable::Instance()->GetConfigurationIterator(); - while ((mol_iterator)()) - { - if (!IsRegistered(mol_iterator.value()->GetDefinition())) - { - continue; - } - - fCounterMap[mol_iterator.value()]; // initialize the second map - } + return std::make_unique(configuration); } //------------------------------------------------------------------------------ - -void G4MoleculeCounter::SetTimeSlice(double timeSlice) -{ - G4::MoleculeCounter::TimePrecision::fPrecision = timeSlice; -} - -//------------------------------------------------------------------------------ - -G4bool G4MoleculeCounter::SearchTimeMap(Reactant* molecule) -{ - if (fpLastSearch == nullptr) - { - fpLastSearch = std::make_unique(); - } - else - { - if (fpLastSearch->fLowerBoundSet && - fpLastSearch->fLastMoleculeSearched->first == molecule) - { - return true; - } - } - - auto mol_it = fCounterMap.find(molecule); - fpLastSearch->fLastMoleculeSearched = mol_it; - - if (mol_it != fCounterMap.end()) - { - fpLastSearch->fLowerBoundTime = fpLastSearch->fLastMoleculeSearched->second - .end(); - fpLastSearch->fLowerBoundSet = true; - } - else - { - fpLastSearch->fLowerBoundSet = false; - } - - return false; -} - -//------------------------------------------------------------------------------ - -int G4MoleculeCounter::SearchUpperBoundTime(double time, - bool sameTypeOfMolecule) -{ - auto mol_it = fpLastSearch->fLastMoleculeSearched; - if (mol_it == fCounterMap.end()) - { - return 0; - } - - NbMoleculeAgainstTime& timeMap = mol_it->second; - if (timeMap.empty()) - { - return 0; - } - - if (sameTypeOfMolecule) - { - if (fpLastSearch->fLowerBoundSet && fpLastSearch->fLowerBoundTime != timeMap.end()) - { - if (fpLastSearch->fLowerBoundTime->first < time) - { - auto upperToLast = fpLastSearch->fLowerBoundTime; - upperToLast++; - - if (upperToLast == timeMap.end()) - { - return fpLastSearch->fLowerBoundTime->second; - } - - if (upperToLast->first > time) - { - return fpLastSearch->fLowerBoundTime->second; - } - } - } - } - - auto up_time_it = timeMap.upper_bound(time); - - if (up_time_it == timeMap.end()) - { - auto last_time = timeMap.rbegin(); - return last_time->second; - } - if (up_time_it == timeMap.begin()) - { - return 0; - } - - up_time_it--; - - fpLastSearch->fLowerBoundTime = up_time_it; - fpLastSearch->fLowerBoundSet = true; - - return fpLastSearch->fLowerBoundTime->second; -} - -//------------------------------------------------------------------------------ - -int G4MoleculeCounter::GetNMoleculesAtTime(Reactant* molecule, - double time) -{ - G4bool sameTypeOfMolecule = SearchTimeMap(molecule); - return SearchUpperBoundTime(time, sameTypeOfMolecule); -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::AddAMoleculeAtTime(Reactant* molecule, - G4double time, - const G4ThreeVector* /*position*/, - int number) -{ - if (fDontRegister[molecule->GetDefinition()]) - { - return; - } - - if (fVerbose != 0) - { - G4cout << "G4MoleculeCounter::AddAMoleculeAtTime : " << molecule->GetName() - << " at time : " << G4BestUnit(time, "Time") << G4endl; - } - - auto counterMap_i = fCounterMap.find(molecule); - - if (counterMap_i == fCounterMap.end()) - { - fCounterMap[molecule][time] = number; - } - else if (counterMap_i->second.empty()) - { - counterMap_i->second[time] = number; - } - else - { - auto end = counterMap_i->second.rbegin(); - - if (end->first <= time || - fabs(end->first - time) <= G4::MoleculeCounter::TimePrecision::fPrecision) - // Case 1 = new time comes after last recorded data - // Case 2 = new time is about the same as the last recorded one - { - double newValue = end->second + number; - counterMap_i->second[time] = newValue; - } - else - { - // if(fabs(time - G4Scheduler::Instance()->GetGlobalTime()) > - // G4Scheduler::Instance()->GetTimeTolerance()) - { - G4ExceptionDescription errMsg; - errMsg << "Time of species " - << molecule->GetName() << " is " - << G4BestUnit(time, "Time") << " while " - << " global time is " - << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") - << G4endl; - G4Exception("G4MoleculeCounter::AddAMoleculeAtTime", - "TIME_DONT_MATCH", - FatalException, errMsg); - } - } - } -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::RemoveAMoleculeAtTime(const G4MolecularConfiguration* pMolecule, - G4double time, - const G4ThreeVector* /*position*/, - int number) -{ - if (fDontRegister[pMolecule->GetDefinition()]) - { - return; - } - - if (fVerbose != 0) - { - G4cout << "G4MoleculeCounter::RemoveAMoleculeAtTime : " - << pMolecule->GetName() << " at time : " << G4BestUnit(time, "Time") - << G4endl; - } - - if (fCheckTimeIsConsistentWithScheduler) - { - if (fabs(time - G4Scheduler::Instance()->GetGlobalTime()) > - G4Scheduler::Instance()->GetTimeTolerance()) - { - G4ExceptionDescription errMsg; - errMsg << "Time of species " - << pMolecule->GetName() << " is " - << G4BestUnit(time, "Time") << " while " - << " global time is " - << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") - << G4endl; - G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime", - "TIME_DONT_MATCH", - FatalException, errMsg); - } - } - - NbMoleculeAgainstTime& nbMolPerTime = fCounterMap[pMolecule]; - - if (nbMolPerTime.empty()) - { - pMolecule->PrintState(); - Dump(); - G4String errMsg = - "You are trying to remove molecule " + pMolecule->GetName() + - " from the counter while this kind of molecules has not been registered yet"; - G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime", "", - FatalErrorInArgument, errMsg); - - return; - } - - auto it = nbMolPerTime.rbegin(); - - if (it == nbMolPerTime.rend()) - { - it--; - - G4String errMsg = - "There was no " + pMolecule->GetName() + " recorded at the time or even before the time asked"; - G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime", "", - FatalErrorInArgument, errMsg); - } - - if (time - it->first < -G4::MoleculeCounter::TimePrecision::fPrecision) - { - Dump(); - G4ExceptionDescription errMsg; - errMsg << "Is time going back?? " << pMolecule->GetName() - << " is being removed at time " << G4BestUnit(time, "Time") - << " while last recorded time was " - << G4BestUnit(it->first, "Time") << "."; - G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime", - "RETURN_TO_THE_FUTUR", - FatalErrorInArgument, - errMsg); - } - - double finalN = it->second - number; - - if (finalN < 0) - { - Dump(); - G4ExceptionDescription errMsg; - errMsg << "After removal of " << number << " species of " - << pMolecule->GetName() << " the final number at time " - << G4BestUnit(time, "Time") << " is less than zero and so not valid." - << " Global time is " - << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") - << ". Previous selected time is " - << G4BestUnit(it->first, "Time") - << G4endl; - G4Exception("G4MoleculeCounter::RemoveAMoleculeAtTime", - "N_INF_0", - FatalException, errMsg); - } - - nbMolPerTime[time] = finalN; -} - -//------------------------------------------------------------------------------ - -G4MoleculeCounter::RecordedMolecules G4MoleculeCounter::GetRecordedMolecules() -{ - if (fVerbose > 1) - { - G4cout << "Entering in G4MoleculeCounter::RecordMolecules" << G4endl; - } - - RecordedMolecules output(new ReactantList()); - - for (const auto & it : fCounterMap) - { - output->push_back(it.first); - } - return output; -} - -//------------------------------------------------------------------------------ - -RecordedTimes G4MoleculeCounter::GetRecordedTimes() -{ - RecordedTimes output(new std::set); - - for(const auto& it : fCounterMap) - { - for(const auto& it2 : it.second) - { - //time = it2->first; - output->insert(it2.first); - } - } - - return output; -} - -//------------------------------------------------------------------------------ - -// >>DEV<< -//void G4MoleculeCounter::SignalReceiver(G4SpeciesInCM* /*speciesInCM*/, -// size_t moleculeID, -// int /*number*/, -// G4SpeciesInCM::SpeciesChange speciesChange, -// int diff) -//{ -// switch(speciesChange) -// { -// case G4SpeciesInCM::eAdd: -// AddAMoleculeAtTime(G4MoleculeTable::Instance()->GetConfiguration((int)moleculeID), -// G4Scheduler::Instance()->GetGlobalTime(), -// diff); -// break; -// case G4SpeciesInCM::eRemove: -// RemoveAMoleculeAtTime(G4MoleculeTable::Instance()->GetConfiguration((int)moleculeID), -// G4Scheduler::Instance()->GetGlobalTime(), -// diff); -// break; -// } -//} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::Dump() -{ - for (const auto& it : fCounterMap) - { - auto pReactant = it.first; - - G4cout << " --- > For " << pReactant->GetName() << G4endl; - - for (const auto& it2 : it.second) - { - G4cout << " " << G4BestUnit(it2.first, "Time") - << " " << it2.second << G4endl; - } - } -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::ResetCounter() -{ - if (fVerbose != 0) - { - G4cout << " ---> G4MoleculeCounter::ResetCounter" << G4endl; - } - fCounterMap.clear(); - fpLastSearch.reset(nullptr); -} - -//------------------------------------------------------------------------------ - -const NbMoleculeAgainstTime& G4MoleculeCounter::GetNbMoleculeAgainstTime(Reactant* molecule) -{ - return fCounterMap[molecule]; -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::SetVerbose(G4int level) -{ - fVerbose = level; -} - -//------------------------------------------------------------------------------ - -G4int G4MoleculeCounter::GetVerbose() -{ - return fVerbose; -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::DontRegister(const G4MoleculeDefinition* molDef) -{ - fDontRegister[molDef] = true; -} - -//------------------------------------------------------------------------------ - -bool G4MoleculeCounter::IsRegistered(const G4MoleculeDefinition* molDef) -{ - return fDontRegister.find(molDef) == fDontRegister.end(); -} - -//------------------------------------------------------------------------------ - -void G4MoleculeCounter::RegisterAll() -{ - fDontRegister.clear(); -} - -G4bool G4MoleculeCounter::IsTimeCheckedForConsistency() const -{ - return fCheckTimeIsConsistentWithScheduler; -} - -void G4MoleculeCounter::CheckTimeForConsistency(G4bool flag) -{ - fCheckTimeIsConsistentWithScheduler = flag; -} - diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManager.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManager.cc new file mode 100644 index 0000000000..4e0baef012 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManager.cc @@ -0,0 +1,711 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4MoleculeCounterManager.hh" + +#include "G4AutoLock.hh" +#include "G4MoleculeCounterManagerMessenger.hh" +#include "G4MoleculeCounterTemplates.hh" +#include "G4StateManager.hh" +#include "G4Step.hh" +#include "G4Threading.hh" + +//------------------------------------------------------------------------------ + +static G4Mutex managerInstance; +static G4Mutex masterInstanceMutex; +static G4Mutex workerInstancesMutex; + +const G4MoleculeCounterManager* G4MoleculeCounterManager::fpMasterInstance = nullptr; +std::vector G4MoleculeCounterManager::fWorkerInstances = {}; +G4ThreadLocal std::unique_ptr G4MoleculeCounterManager::fpInstance = nullptr; + +//------------------------------------------------------------------------------ + +G4ThreadLocal std::atomic G4MoleculeCounterManager::fBeginOfEventTriggered(false); +std::atomic G4MoleculeCounterManager::fBeginOfRunTriggered(false); + +//------------------------------------------------------------------------------ + +// +// CTOR & INSTANCE +// + +G4MoleculeCounterManager::G4MoleculeCounterManager(G4MoleculeCounterManager::Private) + : fVerbosity(0), fIsInitialized(false), fIsActive(true) +{ + fpMessenger = std::make_unique(this); +} + +G4MoleculeCounterManager::~G4MoleculeCounterManager() +{ + // The manager owns all the counters as raw pointers, clean up: + DeregisterAllCounters(); + + if (fVerbosity > 0) { + if (GetResetCountersBeforeRun() && !fBeginOfRunTriggered.load()) { + G4Exception("G4MoleculeCounterManager::~G4MoleculeCounterManager", "MOLMAN000", JustWarning, + "The molecule counter manager was configured to reset counters before each run" + " but the BeginOfRunAction was never triggered!\n" + "Ensure that the user code calls either the G4DNAChemistryManager's or " + "G4MoleculeCounterManager's Run methods!"); + } + if (GetResetCountersBeforeEvent() && !fBeginOfEventTriggered.load() + && (!G4Threading::IsMultithreadedApplication() || G4Threading::IsWorkerThread())) + { + // ignore, if this is the master of a MT application + G4Exception("G4MoleculeCounterManager::~G4MoleculeCounterManager", "MOLMAN000", JustWarning, + "The molecule counter manager was configured to reset counters before each event" + " but the BeginOfEventAction was never triggered!\n" + "This can occurr if this thread is never processing an event but:\n" + "Ensure that the user code calls either the G4DNAChemistryManager's or " + "G4MoleculeCounterManager's Event methods!"); + } + } + + // Handle the recorded master and worker instances + if (G4Threading::IsMasterThread()) { + // This is the master's dtor: set the master const* to nullptr (as it will point to nothing of use) + G4AutoLock lockMaster(&masterInstanceMutex); + fpMasterInstance = nullptr; + } + else { + // This is a worker's dtor: make sure that this worker is still in the list of instances. + // If not, throw a warning (something fishy going on?) + // Either way, set this worker's const* to nullptr in the list of instances. + G4AutoLock lock(&workerInstancesMutex); + auto it = std::find(fWorkerInstances.begin(), fWorkerInstances.end(), this); + if (it == fWorkerInstances.end()) { + G4Exception( + "G4MoleculeCounterManager::~G4MoleculeCounterManager", "MOLMAN_DTOR", JustWarning, + "The destroyed instance of G4MoleculeCounterManager has not been registered as a worker!"); + } + else { + (*it) = nullptr; + } + } +} + +void G4MoleculeCounterManager::RegisterInstance() +{ + if (fInstancesRegistered) { + G4Exception("G4MoleculeCounterManager::RegisterInstance", "MOLMAN000", FatalException, + "Instances were already registered once!"); + } + else { + if (G4Threading::IsMasterThread()) { + G4AutoLock lock(&masterInstanceMutex); + if (fpMasterInstance != nullptr) { + G4Exception("G4MoleculeCounterManager::RegisterInstance", "MOLMAN000", FatalException, + "Master instance was set already!"); + } + fpMasterInstance = Instance(); + } + else { + G4AutoLock lock(&workerInstancesMutex); + fWorkerInstances.push_back(Instance()); + } + fInstancesRegistered = true; + } +} + +G4MoleculeCounterManager* G4MoleculeCounterManager::Instance() +{ + if (fpInstance == nullptr) { + G4AutoLock lock(&managerInstance); + fpInstance = std::make_unique(G4MoleculeCounterManager::Private()); + fpInstance->RegisterInstance(); + } + return fpInstance.get(); +} + +G4MoleculeCounterManager* G4MoleculeCounterManager::GetInstanceIfExists() +{ + return fpInstance.get(); +} + +void G4MoleculeCounterManager::DeleteInstance() +{ + G4AutoLock lock(&managerInstance); + + if (fpInstance != nullptr) { + fpInstance.reset(); + // this should (test!) trigger the dtor, which will delete/deregister the counters + } +} + +// --------------------------------------------------------------------- + +// +// Initialization +// + +void G4MoleculeCounterManager::Initialize() +{ + if (fVerbosity > 0) { + G4cout << "G4MoleculeCounterManager::Initialize (" + << (G4Threading::IsMasterThread() ? "master" : "worker") << ")" << G4endl; + } + + if (G4Threading::IsMultithreadedApplication()) { + if (G4Threading::IsWorkerThread()) + InitializeWorker(); + else + InitializeMaster(); + } + else { + InitializeMaster(); + } +} + +void G4MoleculeCounterManager::InitializeMaster() +{ + if (fIsInitialized) return; + for (auto& counter : fCounters) + counter.second->Initialize(); +} + +void G4MoleculeCounterManager::InitializeWorker() +{ + if (fIsInitialized) return; + for (auto& counter : fCounters) + counter.second->Initialize(); +} + +// --------------------------------------------------------------------- + +// +// Add & Remove Molecules +// + +void G4MoleculeCounterManager::AddMoleculeWithoutTrack(const G4MolecularConfiguration* molecule, + G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + counter->AddMolecule(counter->BuildSimpleIndex(molecule), time, n); + } +} + +void G4MoleculeCounterManager::RemoveMoleculeWithoutTrack(const G4MolecularConfiguration* molecule, + G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + counter->RemoveMolecule(counter->BuildSimpleIndex(molecule), time, n); + } +} + +void G4MoleculeCounterManager::AddMolecule(const G4Track* aTrack, G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + counter->AddMolecule(counter->BuildIndex(aTrack), time, n); + } +} + +void G4MoleculeCounterManager::RemoveMolecule(const G4Track* aTrack, G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + counter->RemoveMolecule(counter->BuildIndex(aTrack), time, n); + } +} + +void G4MoleculeCounterManager::AddMolecule(const G4Track* aTrack, const G4StepPoint* aStepPoint, + G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + if (counter->GetSensitiveToStepping()) { + counter->AddMolecule(counter->BuildIndex(aTrack, aStepPoint), time, n); + } + } +} + +void G4MoleculeCounterManager::RemoveMolecule(const G4Track* aTrack, const G4StepPoint* aStepPoint, + G4double time, G4int n) +{ + for (auto& [id, counter] : fCounters) { + if (counter->GetSensitiveToStepping()) { + counter->RemoveMolecule(counter->BuildIndex(aTrack, aStepPoint), time, n); + } + } +} + +// --------------------------------------------------------------------- + +void G4MoleculeCounterManager::RecordReaction(const G4DNAMolecularReactionData* reactionData, + G4double time, G4int n) +{ + for (auto& [id, counter] : fReactionCounters) { + counter->RecordReaction(counter->BuildSimpleIndex(reactionData), time, n); + } +} + +// --------------------------------------------------------------------- + +// +// Notification of Step or Finalization (must be implemented in a custom G4ITTrackingInteractivity! +// + +/* Example: + void ChemistrySteppingAction::UserSteppingAction(const G4Step* aStep) + { + if (G4MoleculeCounterManager::Instance()->GetIsActive()) + G4MoleculeCounterManager::Instance()->NotifyOfStep(aStep); + } + */ + +void G4MoleculeCounterManager::NotifyOfStep(const G4Step* aStep) +{ + const G4Track* aTrack = aStep->GetTrack(); + + for (auto& [id, counter] : fCounters) { + auto preStepIndex = counter->BuildIndex(aTrack, aStep->GetPreStepPoint()); + auto postStepIndex = counter->BuildIndex(aTrack, aStep->GetPostStepPoint()); + + if (!(*preStepIndex == *postStepIndex)) { +#ifdef G4VERBOSE + if (GetVerbosity() > 1) { + G4cout << "G4MoleculeCounterManager::NotifyOfStep for counter " << counter->GetName() + << ":\n-- Pre = " << preStepIndex->GetInfo() << "\n" + << "-- Post = " << postStepIndex->GetInfo() << G4endl; + } +#endif + counter->RemoveMolecule(std::move(preStepIndex), aTrack->GetGlobalTime(), 1); + counter->AddMolecule(std::move(postStepIndex), aTrack->GetGlobalTime(), 1); + } + } +} + +void G4MoleculeCounterManager::NotifyOfFinalize() +{ + for (auto& [id, counter] : fCounters) { + counter->SchedulerFinalizedTracking(); + } +} + +// +// Broadcast Functions +// + +void G4MoleculeCounterManager::BroadcastIgnoreMolecule(const G4MoleculeDefinition* molecule) +{ + for (auto& [id, counter] : fCounters) { + counter->IgnoreMolecule(molecule); + } +} + +void G4MoleculeCounterManager::BroadcastIgnoreReactant(const G4MolecularConfiguration* molecule) +{ + for (auto& [id, counter] : fCounters) { + counter->IgnoreReactant(molecule); + } +} + +void G4MoleculeCounterManager::BroadcastRegisterAllMoleculesAndReactants() +{ + for (auto& [id, counter] : fCounters) { + counter->RegisterAll(); + } +} + +//------------------------------------------------------------------------------ + +// +// Manager Functions +// + +G4int G4MoleculeCounterManager::RegisterCounter(std::unique_ptr counter) +{ + auto idProvider = [&]() { + if (fCounters.size() == 0) return 0; + auto indices = G4::MoleculeCounter::GetMapIndices(fCounters); + auto lastIndex = *indices.rbegin(); + return ++lastIndex; + }; + + return RegisterCounter(fCounters, std::move(counter), idProvider); +} + +//------------------------------------------------------------------------------ + +G4int G4MoleculeCounterManager::RegisterCounter(std::unique_ptr counter) +{ + auto idProvider = [&] { + if (fReactionCounters.size() == 0) return 0; + auto indices = G4::MoleculeCounter::GetMapIndices(fReactionCounters); + auto lastIndex = *indices.rbegin(); + return ++lastIndex; + }; + + return RegisterCounter(fReactionCounters, std::move(counter), idProvider); +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::DeregisterAllCounters() +{ + for (auto& [id, ctr] : fCounters) { + delete ctr; + } + fCounters.clear(); + + for (auto& [id, ctr] : fReactionCounters) { + delete ctr; + } + fReactionCounters.clear(); +} + +//------------------------------------------------------------------------------ + +// +// Manipulate Counters +// + +void G4MoleculeCounterManager::ResetCounters() +{ + if (fVerbosity > 0) { + G4cout << "G4MoleculeCounterManager::ResetCounters (" + << (G4Threading::IsMasterThread() ? "master" : "worker") << ")" << G4endl; + } + + for (auto& [id, counter] : fCounters) + counter->ResetCounter(); + for (auto& [id, counter] : fReactionCounters) + counter->ResetCounter(); +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::ActivateCounterAtTimes(G4int id, G4double aboveTime, + G4double belowTime, G4bool aboveTimeInclusive, + G4bool belowTimeInclusive) +{ + if (fVerbosity > 0) { + G4cout << "G4MoleculeCounterManager::ActivateCounterAtTimes (" + << (G4Threading::IsMasterThread() ? "master" : "worker") << ")" << G4endl; + } + + auto counter = GetEditableMoleculeCounter(id); + counter->SetActiveLowerBound(aboveTime, aboveTimeInclusive); + counter->SetActiveUpperBound(belowTime, belowTimeInclusive); +} + +void G4MoleculeCounterManager::ActivateReactionCounterAtTimes(G4int id, G4double aboveTime, + G4double belowTime, + G4bool aboveTimeInclusive, + G4bool belowTimeInclusive) +{ + if (fVerbosity > 0) { + G4cout << "G4MoleculeCounterManager::ActivateReactionCounterAtTimes (" + << (G4Threading::IsMasterThread() ? "master" : "worker") << ")" << G4endl; + } + + auto counter = GetEditableMoleculeReactionCounter(id); + counter->SetActiveLowerBound(aboveTime, aboveTimeInclusive); + counter->SetActiveUpperBound(belowTime, belowTimeInclusive); +} + +//------------------------------------------------------------------------------ + +G4VMoleculeCounter* G4MoleculeCounterManager::GetEditableMoleculeCounter(G4int id) const +{ + auto it = fCounters.find(id); + if (it == fCounters.end()) { + G4ExceptionDescription description; + description << "No molecule counter with Id = " << id << " was found!\n"; + G4Exception("G4MoleculeCounterManager::GetMoleculeCounter", "MOLMAN001", FatalErrorInArgument, + description); + return nullptr; + }else{ + return it->second; + } +} + +std::vector G4MoleculeCounterManager::GetMoleculeCounters() const +{ + std::vector output; + output.reserve(fCounters.size()); + for (auto& [id, counter] : fCounters) + output.push_back(counter); + return output; +} + +std::vector G4MoleculeCounterManager::GetMoleculeCounters(G4String name) const +{ + std::vector output; + for (auto& [id, counter] : fCounters) { + if (name == counter->GetName()) output.push_back(counter); + } + return output; +} + +//------------------------------------------------------------------------------ + +G4VMoleculeReactionCounter* +G4MoleculeCounterManager::GetEditableMoleculeReactionCounter(G4int id) const +{ + auto it = fReactionCounters.find(id); + if (it == fReactionCounters.end()) { + G4ExceptionDescription description; + description << "No molecule reaction counter with Id = " << id << " was found!\n"; + G4Exception("G4MoleculeCounterManager::GetMoleculeReactionCounter", "MOLMAN001", + FatalErrorInArgument, description); + return nullptr; + }else + { + return it->second; + } +} + +std::vector +G4MoleculeCounterManager::GetMoleculeReactionCounters() const +{ + std::vector output; + output.reserve(fReactionCounters.size()); + for (auto& [id, counter] : fReactionCounters) + output.push_back(counter); + return output; +} + +std::vector +G4MoleculeCounterManager::GetMoleculeReactionCounters(G4String name) const +{ + std::vector output; + for (auto& [id, counter] : fReactionCounters) { + if (name == counter->GetName()) output.push_back(counter); + } + return output; +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::BeginOfEventAction(const G4Event*) +{ + fBeginOfEventTriggered = true; + + if (GetResetCountersBeforeEvent()) { + // trigger reset if: + // * is not an MT app (master = worker) + // * is an MT app, master, and we want to reset the master + // * is an MT app and worker + if (!G4Threading::IsMultithreadedApplication() + || (G4Threading::IsMultithreadedApplication() && G4Threading::IsMasterThread() + && GetResetMasterCounterWithWorkers()) + || (G4Threading::IsMultithreadedApplication() && G4Threading::IsWorkerThread())) + ResetCounters(); + } +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::BeginOfRunAction(const G4Run*) +{ + fBeginOfRunTriggered = true; + + if (GetResetCountersBeforeRun()) { + // trigger reset if: + // * is not an MT app (master = worker) + // * is an MT app, master, and we want to reset the master + // * is an MT app and worker + if (!G4Threading::IsMultithreadedApplication() + || (G4Threading::IsMultithreadedApplication() && G4Threading::IsMasterThread() + && GetResetMasterCounterWithWorkers()) + || (G4Threading::IsMultithreadedApplication() && G4Threading::IsWorkerThread())) + ResetCounters(); + } +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::EndOfEventAction(const G4Event*) +{ + // EndOfEvent is never triggered on the master of a G4MT + if (GetAccumulateCounterIntoMaster() && GetResetCountersBeforeEvent() + && G4Threading::IsMultithreadedApplication() && G4Threading::IsWorkerThread()) + { + AbsorbWorkerManagerCounters(this); + } +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::EndOfRunAction(const G4Run*) +{ + if (GetAccumulateCounterIntoMaster() && GetResetCountersBeforeRun() + && !GetResetCountersBeforeEvent() && + // if ResetBeforeEvent, AbsorbWorkerManagerCounters will have been triggered already + G4Threading::IsMultithreadedApplication() && G4Threading::IsMasterThread()) + AbsorbWorkerManagerCounters(); +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::AbsorbWorkerManagerCounters( + const G4MoleculeCounterManager* selectedWorker) +{ + if (selectedWorker == nullptr && !G4Threading::IsMasterThread()) { + // Can only call without worker from master thread! + G4ExceptionDescription description; + description << "This method may only be called from the master thread!"; + G4Exception("G4MoleculeCounterManager::AbsorbWorkerManagerCounters", "MOLMAN999", + FatalException, description); + } + + // prevent changes to any of the instances + G4AutoLock lockMaster(&masterInstanceMutex); + G4AutoLock lockWorker(&workerInstancesMutex); + + for (auto const& worker : fWorkerInstances) { + if (selectedWorker == nullptr || worker != selectedWorker) continue; + + for (auto& [id, masterCounter] : fpMasterInstance->fCounters) { + // acquire worker counter + auto workerCounter = worker->GetMoleculeCounter(id); + masterCounter->AbsorbCounter(workerCounter); + } + + for (auto& [id, masterCounter] : fpMasterInstance->fReactionCounters) { + // acquire worker counter + auto workerCounter = worker->GetMoleculeReactionCounter(id); + masterCounter->AbsorbCounter(workerCounter); + } + } +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::DumpMasterCounters() const +{ + G4AutoLock lock(&masterInstanceMutex); + + for (auto const& pCounter : fpMasterInstance->GetMoleculeCounters()) { + G4cout << "=========================================================================== \n" + << " >> [MASTER] Dumping Molecule Counter `" << pCounter->GetName() << "`\n" + << G4endl; + pCounter->Dump(); + G4cout << "\n=========================================================================== " + << G4endl; + } + + for (auto const& pCounter : fpMasterInstance->GetMoleculeReactionCounters()) { + G4cout << "=========================================================================== \n" + << " >> [MASTER] Dumping Molecule Reaction Counter `" << pCounter->GetName() << "`\n" + << G4endl; + pCounter->Dump(); + G4cout << "\n=========================================================================== " + << G4endl; + } +} + +//------------------------------------------------------------------------------ + +void G4MoleculeCounterManager::DumpWorkerCounters() const +{ + G4AutoLock lock(&workerInstancesMutex); + + for (auto const& worker : G4MoleculeCounterManager::fWorkerInstances) { + for (auto const& pCounter : worker->GetMoleculeCounters()) { + G4cout << "=========================================================================== \n" + << " >> [WORKER<" << worker << ">] Dumping Molecule Counter `" << pCounter->GetName() + << "`\n" + << G4endl; + pCounter->Dump(); + G4cout << "\n=========================================================================== " + << G4endl; + } + + for (auto const& pCounter : worker->GetMoleculeReactionCounters()) { + G4cout << "=========================================================================== \n" + << " >> [WORKER<" << worker << ">] Dumping Molecule Reaction Counter `" + << pCounter->GetName() << "`\n" + << G4endl; + pCounter->Dump(); + G4cout << "\n=========================================================================== " + << G4endl; + } + } +} + +//------------------------------------------------------------------------------ + +std::atomic G4MoleculeCounterManager::fResetCountersBeforeEvent(false); +std::atomic G4MoleculeCounterManager::fResetCountersBeforeRun(false); +std::atomic G4MoleculeCounterManager::fAccumulateCounterIntoMaster(true); +std::atomic G4MoleculeCounterManager::fResetMasterCounterWithWorkers(false); + +G4bool G4MoleculeCounterManager::GetResetCountersBeforeEvent() const +{ + return fResetCountersBeforeEvent.load(); +} +void G4MoleculeCounterManager::SetResetCountersBeforeEvent(G4bool flag) +{ + if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_PreInit) { + fResetCountersBeforeEvent = flag; + } + else + G4Exception("G4DNAChemistryManager::SetResetCountersBeforeEvent", "WRONG_STATE", FatalException, + "This flag may only be set during the PreInit state!"); +} + +G4bool G4MoleculeCounterManager::GetResetCountersBeforeRun() const +{ + return fResetCountersBeforeRun.load(); +} +void G4MoleculeCounterManager::SetResetCountersBeforeRun(G4bool flag) +{ + if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_PreInit) + fResetCountersBeforeRun = flag; + else + G4Exception("G4DNAChemistryManager::SetResetCountersBeforeRun", "WRONG_STATE", FatalException, + "This flag may only be set during the PreInit state!"); +} + +G4bool G4MoleculeCounterManager::GetAccumulateCounterIntoMaster() const +{ + return fAccumulateCounterIntoMaster.load(); +} +void G4MoleculeCounterManager::SetAccumulateCounterIntoMaster(G4bool flag) +{ + if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_PreInit) + fAccumulateCounterIntoMaster = flag; + else + G4Exception("G4DNAChemistryManager::SetAccumulateCounterIntoMaster", "WRONG_STATE", + FatalException, "This flag may only be set during the PreInit state!"); +} + +G4bool G4MoleculeCounterManager::GetResetMasterCounterWithWorkers() const +{ + return fResetMasterCounterWithWorkers.load(); +} +void G4MoleculeCounterManager::SetResetMasterCounterWithWorkers(G4bool flag) +{ + if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_PreInit) + fResetMasterCounterWithWorkers = flag; + else + G4Exception("G4DNAChemistryManager::SetResetMasterCounterWithWorkers", "WRONG_STATE", + FatalException, "This flag may only be set during the PreInit state!"); +} + +//------------------------------------------------------------------------------ diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManagerMessenger.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManagerMessenger.cc new file mode 100644 index 0000000000..eb80b5716b --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterManagerMessenger.cc @@ -0,0 +1,88 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4MoleculeCounterManagerMessenger.hh" + +#include "G4MoleculeCounterManager.hh" + +G4MoleculeCounterManagerMessenger::G4MoleculeCounterManagerMessenger( + G4MoleculeCounterManager* manager) + : G4UImessenger(), fpManager(manager) +{ + fpManagerDir = std::make_unique("/chem/moleculecounters/", false); + fpManagerDir->SetGuidance("Molecule Counter Manager Commands"); + fpManagerDir->AvailableForStates(G4State_PreInit); + + InitializeCommands(); +} + +void G4MoleculeCounterManagerMessenger::InitializeCommands() +{ + fpActiveCmd = std::make_unique("/chem/moleculecounters/active", this); + fpActiveCmd->AvailableForStates(G4State_PreInit); + + fpResetBeforeEventCmd = + std::make_unique("/chem/moleculecounters/resetBeforeEvent", this); + fpResetBeforeEventCmd->AvailableForStates(G4State_PreInit); + + fpResetBeforeRunCmd = + std::make_unique("/chem/moleculecounters/resetBeforeRun", this); + fpResetBeforeRunCmd->AvailableForStates(G4State_PreInit); + + fpAccumulateIntoMasterCmd = + std::make_unique("/chem/moleculecounters/accumulateIntoMaster", this); + fpAccumulateIntoMasterCmd->AvailableForStates(G4State_PreInit); + + fpVerboseCmd = std::make_unique("/chem/moleculecounters/verbose", this); + fpVerboseCmd->SetDefaultValue(0); + fpVerboseCmd->AvailableForStates(G4State_Idle, G4State_Init, G4State_PreInit, G4State_EventProc, + G4State_GeomClosed); +} + +void G4MoleculeCounterManagerMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fpActiveCmd.get()) { + auto value = fpActiveCmd->ConvertToBool(newValue); + fpManager->SetIsActive(value); + } + else if (command == fpResetBeforeEventCmd.get()) { + auto value = fpResetBeforeEventCmd->ConvertToBool(newValue); + fpManager->SetResetCountersBeforeEvent(value); + } + else if (command == fpResetBeforeRunCmd.get()) { + auto value = fpResetBeforeRunCmd->ConvertToBool(newValue); + fpManager->SetResetCountersBeforeRun(value); + } + else if (command == fpAccumulateIntoMasterCmd.get()) { + auto value = fpAccumulateIntoMasterCmd->ConvertToBool(newValue); + fpManager->SetAccumulateCounterIntoMaster(value); + } + else if (command == fpVerboseCmd.get()) { + auto value = fpVerboseCmd->ConvertToInt(newValue); + fpManager->SetVerbosity(value); + } +} diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterTimeComparer.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterTimeComparer.cc new file mode 100644 index 0000000000..4c537adee1 --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4MoleculeCounterTimeComparer.cc @@ -0,0 +1,140 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4MoleculeCounterTimeComparer.hh" + +#include "G4Exception.hh" + +G4MoleculeCounterTimeComparer::G4MoleculeCounterTimeComparer() + : fType(TimeComparerType::FixedPrecision) +{} + +G4MoleculeCounterTimeComparer::G4MoleculeCounterTimeComparer( + const G4MoleculeCounterTimeComparer& other) +{ + *this = other; +} + +G4MoleculeCounterTimeComparer& +G4MoleculeCounterTimeComparer::operator=(const G4MoleculeCounterTimeComparer& other) +{ + switch (other.fType) { + case TimeComparerType::VariablePrecision: + SetVariablePrecision(other.fVariablePrecision); + break; + case TimeComparerType::FixedPrecision: + default: + SetFixedPrecision(other.fPrecision); + break; + } + return *this; +} + +void G4MoleculeCounterTimeComparer::SetFixedPrecision(G4double precision) +{ + fType = TimeComparerType::FixedPrecision; + fPrecision = precision; +} + +void G4MoleculeCounterTimeComparer::SetVariablePrecision( + const std::vector& globalTimeHighEdges, const std::vector& resolutions) +{ + fType = TimeComparerType::VariablePrecision; + fVariablePrecision.clear(); + for (auto key = globalTimeHighEdges.cbegin(), val = resolutions.cbegin(); + key != globalTimeHighEdges.cend() && val != resolutions.cend(); ++key, ++val) + { + fVariablePrecision.emplace(*key, *val); + } + + if (fVariablePrecision.empty()) { + G4Exception("G4MoleculeCounterTimeComparer::SetVariablePrecision()", + "G4MoleculeCounterTimeComparer", FatalException, "Precision map cannot be empty!"); + } +} + +void G4MoleculeCounterTimeComparer::SetVariablePrecision( + const std::map& resolutionMap) +{ + fType = TimeComparerType::VariablePrecision; + fVariablePrecision = resolutionMap; + + if (fVariablePrecision.empty()) { + G4Exception("G4MoleculeCounterTimeComparer::SetVariablePrecision()", + "G4MoleculeCounterTimeComparer", FatalException, "Precision map cannot be empty!"); + } +} + +G4double G4MoleculeCounterTimeComparer::GetPrecisionAtTime(G4double time) const +{ + if (fType == G4MoleculeCounterTimeComparer::FixedPrecision) + return fPrecision; + else + return fVariablePrecision.upper_bound(time)->second; +} + +G4bool G4MoleculeCounterTimeComparer::operator()(const G4double& a, const G4double& b) const +{ + if (fType == G4MoleculeCounterTimeComparer::FixedPrecision) { + if (std::fabs(a - b) < fPrecision) { + return false; + } + } + else if (fType == G4MoleculeCounterTimeComparer::VariablePrecision) { + const auto it_a = fVariablePrecision.upper_bound(a); + const auto it_b = fVariablePrecision.upper_bound(b); + auto precision = fVariablePrecision.crbegin()->second; + if (it_a != fVariablePrecision.cend() && it_b != fVariablePrecision.cend()) + precision = std::min(it_a->second, it_b->second); + if (std::fabs(a - b) < precision) { + return false; + } + } + else { + G4Exception("G4MoleculeCounterTimeComparer::operator()", "G4MoleculeCounterTimeComparer", + FatalException, "Unknown comparison type"); + } + return a < b; +} + +// --------------------------------------------------------------------- + +G4MoleculeCounterTimeComparer +G4MoleculeCounterTimeComparer::CreateWithFixedPrecision(G4double precision) +{ + auto obj = G4MoleculeCounterTimeComparer(); + obj.SetFixedPrecision(precision); + return obj; +} + +G4MoleculeCounterTimeComparer +G4MoleculeCounterTimeComparer::CreateWithVariablePrecision(const std::map& map) +{ + auto obj = G4MoleculeCounterTimeComparer(); + obj.SetVariablePrecision(map); + return obj; +} diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounter.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounter.cc index 781cb18939..1a07d794db 100644 --- a/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounter.cc +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounter.cc @@ -27,82 +27,46 @@ // Geant4 // // Created by Mathieu Karamitros on 02/11/2016. +// Modified by Christian Velten on 10/27/2024. // // #include "G4VMoleculeCounter.hh" -#include "G4MoleculeCounter.hh" -G4ThreadLocal -G4VMoleculeCounter* G4VMoleculeCounter::fpInstance = nullptr; + +#include "G4MoleculeCounterTemplates.hh" +#include "G4ios.hh" //------------------------------------------------------------------------------ -void -G4VMoleculeCounter::SetInstance(G4VMoleculeCounter* pCounterInstance) +G4VMoleculeCounter::G4VMoleculeCounter() : G4VMoleculeCounterInternalBase() {} + +G4VMoleculeCounter::G4VMoleculeCounter(const G4String& name, MoleculeCounterType type) + : G4VMoleculeCounterInternalBase(name), fType(type) +{} + +//------------------------------------------------------------------------------ + +void G4VMoleculeCounter::SetSensitiveToStepping(G4bool flag) { - if (fpInstance != nullptr) - { - G4ExceptionDescription errMsg; - errMsg << "The G4MoleculeCounter was already initialized." << G4endl - << "The previous instance will be deleted in order to use yours." << G4endl - << "However this can generate conflicts. Make sure you call G4MoleculeCounter::SetInstance" - "at the beginning of your application." - << "A good place would be ActionInitialization::Build & BuildForMaster" - << G4endl; - - G4Exception("G4MoleculeCounter::SetInstance", - "SINGLETON_ALREADY_INITIALIZED", - JustWarning, errMsg); - delete fpInstance; - fpInstance = nullptr; - } - - fpInstance = pCounterInstance; + if (fType == MoleculeCounterType::Basic && flag) { + G4ExceptionDescription errMsg; + errMsg << "Cannot set a molecule counter of type 'Basic' to be sensitive to stepping!" + << G4endl; + G4Exception("G4VMoleculeCounter::SetSensitiveToStepping", "NOT_ALLOWED", FatalException, errMsg); + } + fSensitiveToStepping = flag; } //------------------------------------------------------------------------------ -G4VMoleculeCounter* G4VMoleculeCounter::Instance() +G4bool G4VMoleculeCounter::IsReactantIgnored(const G4MoleculeDefinition* molecule) const { - if (fpInstance == nullptr) - { - fpInstance = new G4MoleculeCounter(); - } - return fpInstance; + return G4::MoleculeCounter::Contains(fIgnoredMolecules, molecule); } //------------------------------------------------------------------------------ -void G4VMoleculeCounter::DeleteInstance() +G4bool G4VMoleculeCounter::IsReactantIgnored(const G4MolecularConfiguration* reactant) const { - if (fpInstance != nullptr) - { - delete fpInstance; - fpInstance = nullptr; - } + return G4::MoleculeCounter::Contains(fIgnoredReactants, reactant); } - -//------------------------------------------------------------------------------ - -void G4VMoleculeCounter::InitializeInstance() -{ - if (fpInstance != nullptr) - { - fpInstance->Initialize(); - } -} - -//------------------------------------------------------------------------------ - -void G4VMoleculeCounter::Use(G4bool flag) -{ - fUse = flag; -} - -//------------------------------------------------------------------------------ - -G4bool G4VMoleculeCounter::InUse() -{ - return fUse; -} - diff --git a/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounterInternalBase.cc b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounterInternalBase.cc new file mode 100644 index 0000000000..c71858b7aa --- /dev/null +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeCounterInternalBase.cc @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4VMoleculeCounterInternalBase.hh" + +namespace G4 +{ +namespace MoleculeCounter +{ + +G4bool FixedTimeComparer::operator()(const G4double& a, const G4double& b) const +{ + if (std::fabs(a - b) < fPrecision) { + return false; + } + return a < b; +} + +G4ThreadLocal G4double FixedTimeComparer::fPrecision = 0.1 * picosecond; +} // namespace MoleculeCounter +} // namespace G4 + +G4ThreadLocal G4int G4VMoleculeCounterInternalBase::_createdCounters = 0; + +//------------------------------------------------------------------------------ + +G4VMoleculeCounterInternalBase::G4VMoleculeCounterInternalBase() : fId(_createdCounters++) {} + +G4VMoleculeCounterInternalBase::G4VMoleculeCounterInternalBase(const G4String& name) + : fId(_createdCounters++), fName(name) +{} + +//------------------------------------------------------------------------------ + +void G4VMoleculeCounterInternalBase::SetFixedTimePrecision(G4double precision) +{ + G4::MoleculeCounter::FixedTimeComparer::fPrecision = precision; +} diff --git a/source/processes/hadronic/models/lend/include/G4GIDI_map.hh b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeReactionCounter.cc similarity index 76% rename from source/processes/hadronic/models/lend/include/G4GIDI_map.hh rename to source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeReactionCounter.cc index d032935b3a..3bba73c8e9 100644 --- a/source/processes/hadronic/models/lend/include/G4GIDI_map.hh +++ b/source/processes/electromagnetic/dna/molecules/management/src/G4VMoleculeReactionCounter.cc @@ -23,29 +23,17 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/* -# <> -# <> -*/ -#ifndef G4GIDI_map_h_included -#define G4GIDI_map_h_included 1 +// Author: Christian Velten (2025) -#include -//using namespace std; +#include "G4VMoleculeReactionCounter.hh" -#include +//------------------------------------------------------------------------------ -class G4GIDI_map { +G4VMoleculeReactionCounter::G4VMoleculeReactionCounter() : G4VMoleculeCounterInternalBase() {} - public: - GIDI::statusMessageReporting smr; - GIDI::MCGIDI_map *map; +G4VMoleculeReactionCounter::G4VMoleculeReactionCounter(const G4String& name, MoleculeReactionCounterType type) + : G4VMoleculeCounterInternalBase(name), fType(type) +{} - G4GIDI_map( const std::string &dataDirectory ); - ~G4GIDI_map( ); - std::string path( void ); - std::string fileName( void ); -}; - -#endif // End of G4GIDI_map_h_included +//------------------------------------------------------------------------------ diff --git a/source/processes/electromagnetic/dna/processes/include/G4ChemReboundTransportation.hh b/source/processes/electromagnetic/dna/processes/include/G4ChemReboundTransportation.hh new file mode 100644 index 0000000000..32efc343e2 --- /dev/null +++ b/source/processes/electromagnetic/dna/processes/include/G4ChemReboundTransportation.hh @@ -0,0 +1,92 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef TRANSPORTATION_H +#define TRANSPORTATION_H + +#include "G4DNABoundingBox.hh" +#include "G4ITReaction.hh" +#include "G4ITTransportation.hh" +#include "G4MolecularConfiguration.hh" + +class G4Molecule; +class G4VUserBrownianAction; + +class G4ChemReboundTransportation : public G4ITTransportation +{ + using MolConf = const G4MolecularConfiguration*; + +public: + explicit G4ChemReboundTransportation(const G4String& aName = "ChemReboundTransportation", + const G4DNABoundingBox* = nullptr, G4int verbosityLevel = 0); + ~G4ChemReboundTransportation() override = default; + G4ChemReboundTransportation(const G4ChemReboundTransportation&) = delete; + G4ChemReboundTransportation& operator=(const G4ChemReboundTransportation&) = delete; + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void StartTracking(G4Track* aTrack) override; + void ComputeStep(const G4Track&, const G4Step&, G4double, G4double&) override; + G4double AlongStepGetPhysicalInteractionLength(const G4Track& /*track*/, + G4double /*previousStepSize*/, + G4double /*currentMinimumStep*/, + G4double& /*currentSafety*/, + G4GPILSelection* /*selection*/) override; + + G4VParticleChange* PostStepDoIt(const G4Track& track, const G4Step&) override; + G4VParticleChange* AlongStepDoIt(const G4Track& track, const G4Step&) override; + + inline void SetBoundary(const G4DNABoundingBox*); + static G4double calculateNextCoordinate(G4double nextPos, G4double high, G4double low); + G4double GetTimeToBoundary(const G4Track& track); + +protected: + //________________________________________________________________ + // Process information + struct G4ITBrownianState : public G4ITTransportationState + { + public: + G4ITBrownianState(); + ~G4ITBrownianState() override = default; + G4String GetType() override { return "Rebound"; } + + G4bool fTimeStepReachedLimit; + G4double fRandomNumber; + }; + G4ITReactionSet* fReactionSet = G4ITReactionSet::Instance(); + + G4Material* fNistWater = nullptr; + G4double fMaximumTimeStep = 0; + G4double fInternalMinTimeStep; + const G4DNABoundingBox* fpBoundingBox = nullptr; + G4ThreeVector BouncingAction(const G4ThreeVector& nextPosition); + G4double calculateDistanceFromTimeStep(MolConf mol, G4double timeStep); +}; + +inline void G4ChemReboundTransportation::SetBoundary(const G4DNABoundingBox* pBounding) +{ + fpBoundingBox = pBounding; +} + +#endif diff --git a/source/processes/electromagnetic/dna/processes/include/G4DNAScavengerProcess.hh b/source/processes/electromagnetic/dna/processes/include/G4DNAScavengerProcess.hh index 8d7e35918a..c2406befac 100644 --- a/source/processes/electromagnetic/dna/processes/include/G4DNAScavengerProcess.hh +++ b/source/processes/electromagnetic/dna/processes/include/G4DNAScavengerProcess.hh @@ -28,6 +28,8 @@ #define G4DNASCAVENGERPROCESS_HH #include "G4VITProcess.hh" +#include "G4MoleculeTable.hh" + class G4DNAMolecularReactionData; class G4MolecularConfiguration; class G4DNABoundingBox; @@ -100,5 +102,8 @@ class G4DNAScavengerProcess : public G4VITProcess MolType fpMaterialConf; const G4DNABoundingBox* fpBoundingBox; G4DNAScavengerMaterial* fpScavengerMaterial{nullptr}; + MolType fH3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + MolType fH2O = G4MoleculeTable::Instance()->GetConfiguration("H2O"); + MolType fHOm = G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); }; #endif // FLASH1_G4DNASCAVENGERPROCESS_HH diff --git a/source/processes/electromagnetic/dna/processes/sources.cmake b/source/processes/electromagnetic/dna/processes/sources.cmake index 09f5f70a6a..25bbc70b83 100644 --- a/source/processes/electromagnetic/dna/processes/sources.cmake +++ b/source/processes/electromagnetic/dna/processes/sources.cmake @@ -26,6 +26,7 @@ geant4_add_module(G4emdna-processes G4DNADoubleIonisation.hh G4DNATripleIonisation.hh G4DNAQuadrupleIonisation.hh + G4ChemReboundTransportation.hh SOURCES G4DNAAttachment.cc G4DNABrownianTransportation.cc @@ -48,7 +49,8 @@ geant4_add_module(G4emdna-processes G4DNAPolyNucleotideReactionProcess.cc G4DNADoubleIonisation.cc G4DNATripleIonisation.cc - G4DNAQuadrupleIonisation.cc) + G4DNAQuadrupleIonisation.cc + G4ChemReboundTransportation.cc) geant4_module_link_libraries(G4emdna-processes PUBLIC diff --git a/source/processes/electromagnetic/dna/processes/src/G4ChemReboundTransportation.cc b/source/processes/electromagnetic/dna/processes/src/G4ChemReboundTransportation.cc new file mode 100644 index 0000000000..e22638a318 --- /dev/null +++ b/source/processes/electromagnetic/dna/processes/src/G4ChemReboundTransportation.cc @@ -0,0 +1,404 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// + +#include "G4ChemReboundTransportation.hh" + +#include "G4DNAMolecularMaterial.hh" +#include "G4H3O.hh" +#include "G4ITNavigator.hh" +#include "G4ITSafetyHelper.hh" // Not used yet +#include "G4LowEnergyEmProcessSubType.hh" +#include "G4Molecule.hh" +#include "G4NistManager.hh" +#include "G4ParticleTable.hh" +#include "G4RandomDirection.hh" +#include "G4SafetyHelper.hh" +#include "G4SystemOfUnits.hh" +#include "G4TrackingInformation.hh" +#include "G4UnitsTable.hh" +#include "G4VUserBrownianAction.hh" +#include "Randomize.hh" + +#include +using namespace std; + +#ifndef State +# define State(theXInfo) (GetState()->theXInfo) +#endif + +static G4double InvErfc(G4double x) +{ + return CLHEP::HepStat::inverseErf(1. - x); +} + +#ifndef State +# define State(theXInfo) (GetState()->theXInfo) +#endif +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ChemReboundTransportation::G4ChemReboundTransportation(const G4String& aName, + const G4DNABoundingBox* pB, + G4int verbosity) + : G4ITTransportation(aName, verbosity), fpBoundingBox(pB) +{ + fVerboseLevel = 0; + fpState = std::make_shared(); + SetProcessSubType(fLowEnergyBrownianTransportation); + fNistWater = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"); + fInternalMinTimeStep = 1 * CLHEP::ps; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ChemReboundTransportation::G4ITBrownianState::G4ITBrownianState() +{ + fTimeStepReachedLimit = false; + fRandomNumber = -1; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChemReboundTransportation::StartTracking(G4Track* track) +{ + fpState = std::make_shared(); + SetInstantiateProcessState(false); + G4ITTransportation::StartTracking(track); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChemReboundTransportation::BuildPhysicsTable(const G4ParticleDefinition& particle) +{ + fpSafetyHelper->InitialiseHelper(); + G4ITTransportation::BuildPhysicsTable(particle); + + if (fpBoundingBox == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "fpBoundingBox is nullptr"; + G4Exception( + "ChemReboundTransportation::BuildPhysicsTable" + "ChemReboundTransportation", + "ChemReboundTransportation", FatalErrorInArgument, errMsg); + } + G4double halfSize = + std::min({fpBoundingBox->halfSideLengthInX(), fpBoundingBox->halfSideLengthInY(), + fpBoundingBox->halfSideLengthInZ()}); + fMaximumTimeStep = (halfSize * halfSize) / (60 * G4H3O::Definition()->GetDiffusionCoefficient()); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChemReboundTransportation::ComputeStep(const G4Track& track, const G4Step& step, + const G4double timeStep, G4double& spaceStep) +{ + if (GetIT(track)->GetTrackingInfo()->IsLeadingStep()) { + G4ExceptionDescription exceptionDescription; + exceptionDescription << "ComputeStep is called while the track has" + "the minimum interaction time"; + exceptionDescription << " so it should not recompute a timeStep "; + G4Exception("ChemReboundTransportation::ComputeStep", "ChemReboundTransportation0001", + FatalErrorInArgument, exceptionDescription); + } + State(fGeometryLimitedStep) = false; + if (timeStep == 0) { + State(fTransportEndPosition) = track.GetPosition(); + spaceStep = 0.; + } + else { + auto molConf = GetMolecule(track)->GetMolecularConfiguration(); + spaceStep = calculateDistanceFromTimeStep(molConf, timeStep); + } + State(fTransportEndPosition) = + BouncingAction(track.GetPosition() + spaceStep * G4RandomDirection()); + State(fEndPointDistance) = (track.GetPosition() - State(fTransportEndPosition)).mag(); + if (fVerboseLevel > 1) + // if(GetMolecule(track)->GetName() == "e_aq^-1") + { + G4cout << G4endl; + G4cout << "ComputeStep: timeStep : " << G4BestUnit(timeStep, "Time") + << " State(theInteractionTimeLeft) : " << State(theInteractionTimeLeft) + << " State(fEndPointDistance) : " << G4BestUnit(State(fEndPointDistance), "Length") + << " trackID : " << track.GetTrackID() + << " Molecule name: " << "track.GetPosition() : " << track.GetPosition() + << " State(fTransportEndPosition) : " << State(fTransportEndPosition) << " " + << GetMolecule(track)->GetName() << " Diffusion length : " << G4endl; + } + State(fCandidateEndGlobalTime) = step.GetPreStepPoint()->GetGlobalTime() + timeStep; + State(fEndGlobalTimeComputed) = true; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* G4ChemReboundTransportation::PostStepDoIt(const G4Track& track, + const G4Step& step) +{ + G4ITTransportation::PostStepDoIt(track, step); + +#ifdef G4VERBOSE + // DEBUG + if (fVerboseLevel > 1) + // if(GetMolecule(track)->GetName() == "e_aq^-1") + if (GetIT(track)->GetTrackingInfo()->IsLeadingStep()) { + G4cout << "ChemReboundTransportation::PostStepDoIt() :" << " trackID : " << track.GetTrackID() + << " Molecule name: " << "prePosition : " << step.GetPreStepPoint()->GetPosition() + << " postPostion : " << step.GetPostStepPoint()->GetPosition() << " " + << GetMolecule(track)->GetName() + << " Diffusion length : " << G4BestUnit(step.GetStepLength(), "Length") + << " within time step : " << G4BestUnit(step.GetDeltaTime(), "Time") + << "\t Current global time : " << G4BestUnit(track.GetGlobalTime(), "Time") + << " track.GetMomentumDirection() : " << track.GetMomentumDirection() << G4endl; + } +#endif + return &fParticleChange; +} + +G4double G4ChemReboundTransportation::AlongStepGetPhysicalInteractionLength( + const G4Track& track, G4double /*previousStepSize*/, G4double /*currentMinimumStep*/, + G4double& /*currentSafety*/, G4GPILSelection* /*selection*/) +{ + if (!fpBoundingBox->contains(track.GetPosition())) { + G4ExceptionDescription errMsg; + errMsg << "Point is out of box : " << *fpBoundingBox + << " of particle : " << GetIT(track)->GetName() << "(" << track.GetTrackID() + << ") : " << track.GetPosition(); + G4Exception( + "ChemReboundTransportation::AlongStepGetPhysicalInteractionLength" + "ChemReboundTransportation", + "ChemReboundTransportation", FatalErrorInArgument, errMsg); + } + if (fNistWater != track.GetMaterial()) { + G4ExceptionDescription errMsg; + errMsg << "This is not water"; + G4Exception( + "ChemReboundTransportation::AlongStepGetPhysicalInteractionLength" + "ChemReboundTransportation", + "ChemReboundTransportation", FatalErrorInArgument, errMsg); + } + + G4double geometryStepLength = DBL_MAX; + State(theInteractionTimeLeft) = DBL_MAX; + + auto molConf = GetMolecule(track)->GetMolecularConfiguration(); + G4ITReactionPerTime& reactionPerTime = fReactionSet->GetReactionsPerTime(); + auto reaction_i = reactionPerTime.begin(); + if (reaction_i == reactionPerTime.end()) { + State(fGeometryLimitedStep) = false; + State(theInteractionTimeLeft) = fMaximumTimeStep; + if (fVerboseLevel > 1) { + G4cout << "out of reaction " << G4BestUnit(State(theInteractionTimeLeft), "Time") << G4endl; + } + } + else { + G4Track* pTrackA = (*reaction_i)->GetReactants().first; + G4Track* pTrackB = (*reaction_i)->GetReactant(pTrackA); + + if (&track == pTrackA || &track == pTrackB) { + State(theInteractionTimeLeft) = GetTimeToBoundary(track); + State(fTimeStepReachedLimit) = false; + State(fGeometryLimitedStep) = false; + + if (fVerboseLevel > 1) + G4cout << "Molecule A is of type : " << GetMolecule(track)->GetName() + << " with trackID : " << track.GetTrackID() + << " fMaximumTimeStep : " << G4BestUnit(fMaximumTimeStep, "Time") + << " State(theInteractionTimeLeft) : " + << G4BestUnit(State(theInteractionTimeLeft), "Time") << G4endl; + + if (State(theInteractionTimeLeft) < fInternalMinTimeStep) { + State(fTimeStepReachedLimit) = true; + State(theInteractionTimeLeft) = fInternalMinTimeStep; + } + else if (State(theInteractionTimeLeft) > fMaximumTimeStep) { + State(fTimeStepReachedLimit) = true; + State(theInteractionTimeLeft) = fMaximumTimeStep; + } + } + else { + State(fGeometryLimitedStep) = false; + State(theInteractionTimeLeft) = DBL_MAX; + } + } + + geometryStepLength = calculateDistanceFromTimeStep(molConf, State(theInteractionTimeLeft)); + State(fTransportEndPosition) = + geometryStepLength * track.GetMomentumDirection() + track.GetPosition(); + State(fTimeStepReachedLimit) = true; + State(fCandidateEndGlobalTime) = track.GetGlobalTime() + State(theInteractionTimeLeft); + State(fEndGlobalTimeComputed) = true; + +#ifdef G4VERBOSE + if (fVerboseLevel > 1) { + G4cout << "ChemReboundTransportation::AlongStepGetPhysicalInteractionLength = " + << G4BestUnit(geometryStepLength, "Length") << " " + << G4BestUnit(State(theInteractionTimeLeft), "Time") + << " | trackID = " << track.GetTrackID() << G4endl; + } +#endif + return geometryStepLength; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* G4ChemReboundTransportation::AlongStepDoIt(const G4Track& track, + const G4Step& step) +{ + if (GetIT(track)->GetTrackingInfo()->IsLeadingStep()) { + G4double spaceStep = DBL_MAX; + auto molConf = GetMolecule(track)->GetMolecularConfiguration(); + spaceStep = calculateDistanceFromTimeStep(molConf, State(theInteractionTimeLeft)); + + State(fGeometryLimitedStep) = false; + State(fTransportEndPosition) = + BouncingAction(track.GetPosition() + spaceStep * G4RandomDirection()); + State(fEndPointDistance) = spaceStep; + if (fVerboseLevel > 1) + // if(GetMolecule(track)->GetName() == "e_aq^-1") + + { + G4cout << "ChemReboundTransportation::AlongStepDoIt() :" << " trackID : " + << track.GetTrackID() + << " Molecule name: " << "prePosition : " << step.GetPreStepPoint()->GetPosition() + << " postPostion : " << step.GetPostStepPoint()->GetPosition() << " " + << GetMolecule(track)->GetName() << " State(theInteractionTimeLeft) : " + << G4BestUnit(State(theInteractionTimeLeft), "Time") + << " Diffusion length : " << G4BestUnit(step.GetStepLength(), "Length") + << " within time step : " << G4BestUnit(step.GetDeltaTime(), "Time") + << "\t Current global time : " << G4BestUnit(track.GetGlobalTime(), "Time") + << " track.GetMomentumDirection() : " << track.GetMomentumDirection() << G4endl; + } + } + + G4ITTransportation::AlongStepDoIt(track, step); + + return &fParticleChange; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ThreeVector G4ChemReboundTransportation::BouncingAction(const G4ThreeVector& nextPosition) +{ + // from Karamitros, Mathieu et al.2020,arXiv:2006.14225 (2020) + // https://doi.org/10.48550/arXiv.2006.14225 + + G4ThreeVector output; + + G4double RxM = fpBoundingBox->Getxhi(); + G4double RyM = fpBoundingBox->Getyhi(); + G4double RzM = fpBoundingBox->Getzhi(); + G4double Rxm = fpBoundingBox->Getxlo(); + G4double Rym = fpBoundingBox->Getylo(); + G4double Rzm = fpBoundingBox->Getzlo(); + + G4double x = calculateNextCoordinate(nextPosition.getX(), RxM, Rxm); + G4double y = calculateNextCoordinate(nextPosition.getY(), RyM, Rym); + G4double z = calculateNextCoordinate(nextPosition.getZ(), RzM, Rzm); + output.set(x, y, z); + return output; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4ChemReboundTransportation::calculateNextCoordinate(G4double nextPos, G4double high, + G4double low) +{ + // from Karamitros, Mathieu et al.2020,arXiv:2006.14225 (2020) + + G4double length = high - low; + if (std::abs(length) < 1e-10) { + return low; + } + + G4double relativePos = std::abs(nextPos - low); + if (!std::isfinite(relativePos)) { + return low; // no crash + } + + G4double n = relativePos / length; + if (!std::isfinite(n)) { + return low; + } + + G4double truncVal = std::floor(n);//n is already positive + G4double h = truncVal; + if(truncVal > 2.0){ + h = std::fmod(truncVal, 2.0); + } + + G4double mod = relativePos; + + if(relativePos > length) { + mod = std::fmod(relativePos, length); + } + + return low + h * length + (1 - 2 * h) * std::abs(mod); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4ChemReboundTransportation::calculateDistanceFromTimeStep(MolConf mol, G4double timeStep) +{ + G4double diffuCoeff = mol->GetDiffusionCoefficient(); + if (mol->GetDiffusionCoefficient() <= 0) { + G4ExceptionDescription exceptionDescription; + exceptionDescription << "GetDiffusionCoefficient is negative"; + G4Exception("ChemReboundTransportation::calculateDistanceFromTimeStep", + "ChemReboundTransportation030", FatalErrorInArgument, exceptionDescription); + } + G4double sqrt_2Dt = sqrt(2 * diffuCoeff * timeStep); + G4double x = G4RandGauss::shoot(0, sqrt_2Dt); + G4double y = G4RandGauss::shoot(0, sqrt_2Dt); + G4double z = G4RandGauss::shoot(0, sqrt_2Dt); + return sqrt(x * x + y * y + z * z); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double G4ChemReboundTransportation::GetTimeToBoundary(const G4Track& track) +{ + if (!fpBoundingBox->contains(track.GetPosition())) { + G4ExceptionDescription errMsg; + errMsg << "Point is out of box : " << *fpBoundingBox + << " of particle : " << GetIT(track)->GetName() << "(" << track.GetTrackID() + << ") : " << track.GetPosition(); + G4Exception( + "BoundedBrownianAction::GetTimeToBoundary" + "BoundedBrownianAction", + "BoundedBrownianAction", FatalErrorInArgument, errMsg); + } + auto diffusionCoefficient = GetMolecule(track)->GetDiffusionCoefficient(); + + auto dx = std::min(track.GetPosition().getX() - fpBoundingBox->Getxlo(), + fpBoundingBox->Getxhi() - track.GetPosition().getX()); + auto dy = std::min(track.GetPosition().getY() - fpBoundingBox->Getylo(), + fpBoundingBox->Getyhi() - track.GetPosition().getY()); + auto dz = std::min(track.GetPosition().getZ() - fpBoundingBox->Getzlo(), + fpBoundingBox->Getzhi() - track.GetPosition().getZ()); + + std::vector distanceVector{dx, dy, dz}; + G4double MinTime = DBL_MAX; + for (const auto& it : distanceVector) { + G4double distance = it; + auto random = G4UniformRand(); + auto minTime = 1 / (4 * diffusionCoefficient) * pow(distance / InvErfc(random), 2); + + if (MinTime > minTime) { + MinTime = minTime; + } + } + return MinTime; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/dna/processes/src/G4DNAElectronHoleRecombination.cc b/source/processes/electromagnetic/dna/processes/src/G4DNAElectronHoleRecombination.cc index e2abd4083e..6e8653d0c7 100644 --- a/source/processes/electromagnetic/dna/processes/src/G4DNAElectronHoleRecombination.cc +++ b/source/processes/electromagnetic/dna/processes/src/G4DNAElectronHoleRecombination.cc @@ -44,7 +44,7 @@ #include "G4MoleculeFinder.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" -#include "G4VMoleculeCounter.hh" +#include "G4MoleculeCounterManager.hh" #include @@ -182,21 +182,17 @@ void G4DNAElectronHoleRecombination::MakeReaction(const G4Track& track) if (pSelectedReactant != nullptr) { - if (G4VMoleculeCounter::Instance()->InUse()) + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { - G4VMoleculeCounter::Instance()-> - RemoveAMoleculeAtTime(GetMolecule(track)->GetMolecularConfiguration(), - track.GetGlobalTime(), - &(track.GetPosition())); + G4MoleculeCounterManager::Instance()-> + RemoveMolecule(&track, track.GetGlobalTime()); } GetMolecule(track)->ChangeConfigurationToLabel("H2Ovib"); - if (G4VMoleculeCounter::Instance()->InUse()) + if (G4MoleculeCounterManager::Instance()->GetIsActive()) { - G4VMoleculeCounter::Instance()-> - AddAMoleculeAtTime(GetMolecule(track)->GetMolecularConfiguration(), - track.GetGlobalTime(), - &(track.GetPosition())); + G4MoleculeCounterManager::Instance()-> + AddMolecule(&track, track.GetGlobalTime()); } // fParticleChange.ProposeTrackStatus(fStopAndKill); diff --git a/source/processes/electromagnetic/dna/processes/src/G4DNAScavengerProcess.cc b/source/processes/electromagnetic/dna/processes/src/G4DNAScavengerProcess.cc index d725593ffe..86599a75e1 100644 --- a/source/processes/electromagnetic/dna/processes/src/G4DNAScavengerProcess.cc +++ b/source/processes/electromagnetic/dna/processes/src/G4DNAScavengerProcess.cc @@ -28,7 +28,6 @@ #include #include #include "G4Molecule.hh" -#include "G4DNAMolecularMaterial.hh" #include "G4MolecularConfiguration.hh" #include "G4UnitsTable.hh" #include "G4TrackingInformation.hh" @@ -38,6 +37,7 @@ #include "G4DNAScavengerMaterial.hh" #include "G4MoleculeFinder.hh" #include "G4Scheduler.hh" +#include "G4ChemicalMoleculeFinder.hh" #ifndef State # define State(theXInfo) (GetState()->theXInfo) @@ -124,10 +124,6 @@ G4double G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength( { G4Molecule* molecule = GetMolecule(track); auto molConf = molecule->GetMolecularConfiguration(); - // reset - fpMolecularConfiguration = nullptr; - fpMaterialConf = nullptr; - // this because process for moleculeDifinition not for configuration // TODO: need change this auto it = fConfMap.find(molConf); @@ -135,6 +131,8 @@ G4double G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength( { return DBL_MAX; } + fpMolecularConfiguration = nullptr; + fpMaterialConf = nullptr; fpMolecularConfiguration = molConf; auto MaterialMap = it->second; @@ -150,20 +148,24 @@ G4double G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength( G4double numMol = fpScavengerMaterial->GetNumberMoleculePerVolumeUnitForMaterialConf( matConf); - if(numMol == 0.0) // ie : not found - { - continue; - } - if(verboseLevel > 1) - { - G4cout << " Material of " << matConf->GetName() << " : " << numMol - << G4endl; - } - // auto data = fReactionMap[mat_it]; + if(numMol == 0 && matConf != fH2O){ + continue;} auto data = mat_it.second; auto reactionRate = data->GetObservedReactionRateConstant(); //_const G4double propensity = numMol * reactionRate / (fpBoundingBox->Volume() * Avogadro); + + if(fH2O == matConf){ + auto factor = reactionRate; + propensity = factor; + } + + if(verboseLevel > 1) + { + G4cout << " Material of " << matConf->GetName() << " : " << propensity + << G4endl; + } + auto reactionData = std::make_pair(mat_it.first, propensity); if(propensity == 0) { @@ -185,6 +187,13 @@ G4double G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength( fpMaterialConf = rSelectedIter->second.first; + + auto type = fConfMap[fpMolecularConfiguration][fpMaterialConf]->GetReactionType(); + if(!fpScavengerMaterial->IsEquilibrium(type)) + { + return DBL_MAX; + } + State(fIsInGoodMaterial) = true; G4double previousTimeStep(-1.); @@ -219,12 +228,6 @@ G4double G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength( #ifdef G4VERBOSE if(verboseLevel > 2) { - G4cout << "G4DNAScavengerProcess::PostStepGetPhysicalInteractionLength:: " - << molConf->GetName() << G4endl; - G4cout << "theNumberOfInteractionLengthLeft : " - << fpState->theNumberOfInteractionLengthLeft << G4endl; - G4cout << "currentInteractionLength : " << fpState->currentInteractionLength - << G4endl; G4cout << "Material : " << fpMaterialConf->GetName() << " ID: " << track.GetTrackID() << " Track Time : " << track.GetGlobalTime() @@ -249,50 +252,51 @@ G4VParticleChange* G4DNAScavengerProcess::PostStepDoIt(const G4Track& track, { G4Molecule* molecule = GetMolecule(track); auto molConf = molecule->GetMolecularConfiguration(); - if(fpMolecularConfiguration != molConf) - { - fReturnedValue = DBL_MAX; - fParticleChange.Initialize(track); - State(fPreviousTimeAtPreStepPoint) = -1; - return &fParticleChange; - } std::vector products; #ifdef G4VERBOSE if(verboseLevel > 1) { - G4cout << "___________" << G4endl; - G4cout << ">>> Beginning of G4DNAScavengerProcess verbose" << G4endl; - G4cout << ">>> Returned value : " << G4BestUnit(fReturnedValue, "Time") - << G4endl; - G4cout << ">>> Time Step : " - << G4BestUnit(G4VScheduler::Instance()->GetTimeStep(), "Time") - << G4endl; - G4cout << ">>> Global Time : " - << G4BestUnit(G4VScheduler::Instance()->GetGlobalTime(), "Time") - << G4endl; - G4cout << ">>> Global Time Track : " - << G4BestUnit(track.GetGlobalTime(), "Time") << G4endl; - G4cout << ">>> Track Position : " << track.GetPosition() << G4endl; - G4cout << ">>> Reaction : " << molecule->GetName() << "(" - << track.GetTrackID() << ") + " << fpMaterialConf->GetName() - << G4endl; - G4cout << ">>> End of G4DNAScavengerProcess verbose <<<" << G4endl; + G4cout << ">>> Beginning of G4DNAScavengerProcess verbose>>> Returned value : " << G4BestUnit(fReturnedValue, "Time") + <<"molecule: "<GetName()<GetName()<< G4endl; } #endif G4double reactionTime = track.GetGlobalTime(); - auto data = fConfMap[fpMolecularConfiguration][fpMaterialConf]; + auto data = fConfMap[molConf][fpMaterialConf]; + + if(data == nullptr) + { + G4ExceptionDescription exceptionDescription; + exceptionDescription + << "No reaction data for scavenger reaction between : "<GetName() + <<" + "<GetName()<SetEquilibrium(data, track.GetGlobalTime()); auto nbSecondaries = data->GetNbProducts(); for(G4int j = 0; j < nbSecondaries; ++j) { + auto product = data->GetProduct(j); + auto isScavenger = fpScavengerMaterial->find(product); + if(isScavenger){ + fpScavengerMaterial-> + AddNumberMoleculePerVolumeUnitForMaterialConf(product,track.GetGlobalTime()); + continue; + } auto pProduct = new G4Molecule(data->GetProduct(j)); auto pProductTrack = pProduct->BuildTrack(reactionTime, track.GetPosition()); pProductTrack->SetTrackStatus(fAlive); G4ITTrackHolder::Instance()->Push(pProductTrack); - G4MoleculeFinder::Instance()->Push(pProductTrack); + if(!G4ChemicalMoleculeFinder::Instance()->IsOctreeUsed()){ + G4MoleculeFinder::Instance()->Push(pProductTrack); + } products.push_back(pProductTrack); } @@ -318,8 +322,28 @@ G4VParticleChange* G4DNAScavengerProcess::PostStepDoIt(const G4Track& track, if(verboseLevel != 0) { - G4cout << GetIT(products.at(i))->GetName() << " (" - << products.at(i)->GetTrackID() << ")"; + auto product = data->GetProduct(i); + auto isScavenger = fpScavengerMaterial->find(product); + if(isScavenger) + { + G4cout<GetName()<<" (B)"; + } + else + { + auto trackSize = products.size(); + if(trackSize > 0) + { + for(G4int it = 0; it < (G4int)trackSize; ++it) + { + if((verboseLevel != 0) && it != 0) + { + G4cout << " + "; + } + G4cout << GetIT(products.at(it))->GetName() << " (" + << products.at(it)->GetTrackID() << ")"; + } + } + } } #endif } @@ -346,5 +370,12 @@ G4VParticleChange* G4DNAScavengerProcess::PostStepDoIt(const G4Track& track, fpScavengerMaterial->ReduceNumberMoleculePerVolumeUnitForMaterialConf( fpMaterialConf, reactionTime); State(fPreviousTimeAtPreStepPoint) = -1; + + if(fpMaterialConf == fH3Op + || fpMaterialConf == fH2O + || fpMaterialConf == fHOm) { // these scavengers are not changed + G4Scheduler::Instance()->SetInteractionStep(false); + } + return &fParticleChange; } diff --git a/source/processes/electromagnetic/dna/models/include/G4ChemEquilibrium.hh b/source/processes/electromagnetic/dna/utils/include/G4ChemEquilibrium.hh similarity index 100% rename from source/processes/electromagnetic/dna/models/include/G4ChemEquilibrium.hh rename to source/processes/electromagnetic/dna/utils/include/G4ChemEquilibrium.hh diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAChemistryManager.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAChemistryManager.hh index 6805ba0cce..dedff05f8c 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNAChemistryManager.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAChemistryManager.hh @@ -53,7 +53,10 @@ #include "G4UImessenger.hh" #include "G4VStateDependent.hh" +#include "G4MoleculeCounterManager.hh" + class G4Track; +class G4Run; class G4DNAWaterExcitationStructure; class G4DNAWaterIonisationStructure; class G4Molecule; @@ -150,9 +153,6 @@ public: * in standalone. */ void UseAsStandalone(G4bool flag); - G4bool IsCounterResetWhenRunEnds() const; - - void ResetCounterWhenRunEnds(G4bool resetCounterWhenRunEnds); void ForceMasterReinitialization(); void TagThreadForReinitialization(); @@ -199,8 +199,17 @@ public: void PushMolecule(std::unique_ptr pMolecule, G4double time, - const G4ThreeVector& position, - G4int parentID); + const G4ThreeVector &position, + G4int parentID, + const G4Track *parentTrack = nullptr); + + //============================================================================ + // Methods called by RunManagers to notify of Runs & Events + //============================================================================ + void BeginOfEventAction(const G4Event*); + void BeginOfRunAction(const G4Run*); + void EndOfEventAction(const G4Event*); + void EndOfRunAction(const G4Run*); protected: void HandleStandaloneInitialization(); @@ -251,5 +260,4 @@ private: G4bool fGeometryClosed{false}; G4int fVerbose{0}; - G4bool fResetCounterWhenRunEnds{true}; }; diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAMesh.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAMesh.hh index d3cd5f53b5..ad6a4fc74f 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNAMesh.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAMesh.hh @@ -53,6 +53,7 @@ class G4DNAMesh : public G4VDNAMesh Voxel& GetVoxel(const Index& index); // GetorCreateVoxel size_t size() { return fVoxelVector.size(); }; Index ConvertIndex(const Index& index, const G4int&) const; + Index GetRandomIndex(const Index&, const G4double& resolution) const; std::vector FindNeighboringVoxels(const Index& index) const; void Reset(); Data& GetVoxelMapList(const Index& index); diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNASamplingTable.hh b/source/processes/electromagnetic/dna/utils/include/G4DNASamplingTable.hh new file mode 100644 index 0000000000..6181ce6dc0 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/include/G4DNASamplingTable.hh @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created 25.03.2025 V.Ivanchenko +// on base of codes of S.Incerti & M.Karamitros +// +// Double differential cross section data structure +// + +#ifndef G4DNASamplingTable_HH +#define G4DNASamplingTable_HH 1 + +#include "globals.hh" +#include + +class G4DNASamplingTable +{ +public: + explicit G4DNASamplingTable(std::size_t npoint); + ~G4DNASamplingTable(); + + void LoadData(const G4String& filename, G4double factorE, G4double scaleFactor, + G4bool verbose); + + G4double GetValue(G4double ekinPrimary, G4double ekinSecondary, G4int shell) const; + + G4double SampleCumulative(G4double ekinPrimary, G4int shell) const; + + G4DNASamplingTable(const G4DNASamplingTable & copy) = delete; + G4DNASamplingTable& operator=(const G4DNASamplingTable& right) = delete; + +private: + + G4int GetIndex(const std::vector&, G4double x) const; + + G4double VecInterpolation(const std::vector* ener, + const std::vector* val, G4double energy) const; + + G4double Interpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) const; + + G4int fNpoints{0}; + std::vector fPrimaryEnergy; + std::vector* > fSecEnergy; + std::vector* > fPDF[5]; + +}; +#endif diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAScavengerMaterial.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAScavengerMaterial.hh index 97f2a28957..c64c92ae9f 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNAScavengerMaterial.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAScavengerMaterial.hh @@ -30,9 +30,10 @@ #include "G4ios.hh" #include #include -#include "G4MoleculeCounter.hh" +#include "G4VMoleculeCounterInternalBase.hh" #include "G4VScavengerMaterial.hh" #include "G4MoleculeTable.hh" +#include "G4ChemEquilibrium.hh" class G4Material; class G4MolecularConfiguration; @@ -42,7 +43,7 @@ class G4DNAScavengerMaterial : public G4VScavengerMaterial { public: using NbMoleculeInTime = - std::map; + std::map; using MolType = const G4MolecularConfiguration*; using MaterialMap = std::map; using ReactantList = std::vector; @@ -80,9 +81,7 @@ class G4DNAScavengerMaterial : public G4VScavengerMaterial { return it->second > 0; } - return false; - } void SetCounterAgainstTime() { fCounterAgainstTime = true; } @@ -103,9 +102,13 @@ class G4DNAScavengerMaterial : public G4VScavengerMaterial int64_t GetNMoleculesAtTime(MolType molecule, G4double time); G4bool SearchTimeMap(MolType molecule); int64_t SearchUpperBoundTime(G4double time, G4bool sameTypeOfMolecule); + void ResetEquilibrium(); + G4bool SetEquilibrium(const G4DNAMolecularReactionData* pReaction, + G4double time); + G4bool IsEquilibrium(const G4int& reactionType) const; - private: - G4VChemistryWorld* fpChemistryInfo; +private: + G4VChemistryWorld* fpChemistryInfo = nullptr; G4bool fIsInitialized; MaterialMap fScavengerTable; CounterMapType fCounterMap; @@ -125,5 +128,6 @@ class G4DNAScavengerMaterial : public G4VScavengerMaterial std::unique_ptr fpLastSearch; void WaterEquilibrium(); + std::map> fEquilibriumProcesses; }; #endif // G4DNASCAVENGERMATERIAL_HH diff --git a/source/processes/electromagnetic/dna/utils/include/G4MoleculeReactionCounter.hh b/source/processes/electromagnetic/dna/utils/include/G4MoleculeReactionCounter.hh new file mode 100644 index 0000000000..2b63be720b --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/include/G4MoleculeReactionCounter.hh @@ -0,0 +1,80 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Author: Christian Velten (2025) + +#ifndef G4MoleculeReactionCounter_hh +#define G4MoleculeReactionCounter_hh 1 + +#include "G4DNAMolecularReactionTable.hh" +#include "G4VUserMoleculeReactionCounter.hh" + +//------------------------------------------------------------------------------ + +struct G4MoleculeReactionCounterIndex : public G4VMoleculeReactionCounter::G4VMoleculeReactionCounterIndex +{ + const G4DNAMolecularReactionData* ReactionData; + + G4MoleculeReactionCounterIndex() : ReactionData(nullptr) {} + explicit G4MoleculeReactionCounterIndex(const G4DNAMolecularReactionData* reaction) : ReactionData(reaction) {} + ~G4MoleculeReactionCounterIndex() override = default; + + G4bool operator<(G4VMoleculeReactionCounterIndex const& other) const override + { + return std::less{}(ReactionData, static_cast(other).ReactionData); + } + G4bool operator==(G4VMoleculeReactionCounterIndex const& other) const override + { + return std::equal_to{}(ReactionData, static_cast(other).ReactionData); + } + G4String FormattedReactionString(const G4DNAMolecularReactionData* reactionData) const; + + G4String GetInfo() const override + { + G4String null = "This reaction data is null"; + if (ReactionData == nullptr) + return null; + else + return FormattedReactionString(ReactionData); + } + const G4DNAMolecularReactionData* GetReactionData() const override { return ReactionData; } +}; + +class G4MoleculeReactionCounter : public G4VUserMoleculeReactionCounter +{ + //---------------------------------------------------------------------------- + public: + G4MoleculeReactionCounter(); + G4MoleculeReactionCounter(G4String); + ~G4MoleculeReactionCounter() override = default; + + void InitializeUser() override; + + public: + std::unique_ptr BuildSimpleIndex(const G4DNAMolecularReactionData*) const override; +}; + +#endif // G4MoleculeReactionCounter_hh diff --git a/source/processes/electromagnetic/dna/utils/include/G4PhysChemIO.hh b/source/processes/electromagnetic/dna/utils/include/G4PhysChemIO.hh index 095ed0906a..bd867f85f9 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4PhysChemIO.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4PhysChemIO.hh @@ -97,64 +97,6 @@ protected: }; //------------------------------------------------------------------------------ - -class G4Analysis: public G4VPhysChemIO -{ -public: - G4Analysis(G4VAnalysisManager*); - ~G4Analysis() override; - - void InitializeMaster() override{} - void InitializeThread() override{} - void InitializeFile() override; - - void NewRun() override{} - void NewEvent() override{} - - /** - * Method used by DNA physics model to create a water molecule. - * The ElectronicModification is a flag telling wheter the molecule - * is ionized or excited, the electronic level is calculated by the - * model and the IncomingTrack is the track responsible for the creation - * of this molecule, for instance an electron. - */ - void CreateWaterMolecule(G4int electronicModif, - G4int /*electronicLevel*/, - G4double energy, - const G4Track* /*theIncomingTrack*/) override; - - /** - * Same idea as the previous method but for solvated electron. - * This method should be used by the physics model of the ElectronSolvatation - * process. - */ - void CreateSolvatedElectron(const G4Track* /*theIncomingTrack*/, - G4ThreeVector* finalPosition = nullptr) override; - - //============================================================================ - // FILE OPERATIONS - //============================================================================ - - /** - * Tells the chemMan to write into a file - * the position and electronic state of the water molecule - * and the position thermalized or not of the solvated electron - */ - void WriteInto(const G4String&, std::ios_base::openmode mode = - std::ios_base::out) override; - void AddEmptyLineInOutputFile() override{} - - /** - * Close the file specified with WriteInto - */ - void CloseFile() override; - -protected: - G4VAnalysisManager* fpAnalysisManager; - int fNtupleID; - G4bool fFileInitialized; -}; - } #endif // G4PHYSCHEMIO_HH_ diff --git a/source/processes/electromagnetic/dna/utils/include/G4VChemistryWorld.hh b/source/processes/electromagnetic/dna/utils/include/G4VChemistryWorld.hh index 3929e678eb..36a20269ce 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4VChemistryWorld.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4VChemistryWorld.hh @@ -30,6 +30,7 @@ #include #include +#include "globals.hh" class G4DNABoundingBox; class G4Material; class G4MolecularConfiguration; @@ -72,9 +73,14 @@ class G4VChemistryWorld { return fpChemistryBoundary.get(); } + + std::map GetChemicalComponent() const + { + return fpChemicalComponent; + } protected: std::unique_ptr fpChemistryBoundary; - std::map fpChemicalComponent; + std::map fpChemicalComponent; }; #endif diff --git a/source/processes/electromagnetic/dna/utils/include/G4VUserMoleculeReactionCounter.hh b/source/processes/electromagnetic/dna/utils/include/G4VUserMoleculeReactionCounter.hh new file mode 100644 index 0000000000..510b6469dd --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/include/G4VUserMoleculeReactionCounter.hh @@ -0,0 +1,437 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#ifndef G4VUSERMOLECULEREACTIONCOUNTER_HH +#define G4VUSERMOLECULEREACTIONCOUNTER_HH 1 + +#include "G4DNAChemistryManager.hh" +#include "G4MoleculeCounterTemplates.hh" +#include "G4Scheduler.hh" +#include "G4UnitsTable.hh" +#include "G4VMoleculeReactionCounter.hh" + +//------------------------------------------------------------------------------ + +template +class G4VUserMoleculeReactionCounter : public G4VMoleculeReactionCounter +{ + static_assert(std::is_base_of::value, + "TIndex must be derived from G4VMoleculeReactionCounter::G4VMoleculeReactionCounterIndex! " + "No forward declaration is allowed."); + + protected: + struct Search; + + public: + G4VUserMoleculeReactionCounter(); + G4VUserMoleculeReactionCounter(const G4String&, + MoleculeReactionCounterType = MoleculeReactionCounterType::Basic); + ~G4VUserMoleculeReactionCounter() override = default; + + public: + void Initialize() final; + void InitializeUser() override = 0; + void ResetCounter() override; + void Dump() const override; + void DumpCounterMapIndices() const override; + + void AbsorbCounter(const G4VMoleculeCounterInternalBase*) override; + + std::unique_ptr BuildSimpleIndex(const G4DNAMolecularReactionData*) const override = 0; + + void RecordReaction(std::unique_ptr, G4double, G4int = 1) override; + + std::set GetRecordedReactions() const override; + std::set GetRecordedTimes() const override; + + protected: + std::map fCounterMap{}; + + public: + const std::map& GetCounterMap() const { return fCounterMap; } + std::vector GetMapIndices() const; + + virtual G4int GetNbReactionsAtTime(const TIndex&, G4double) const; + virtual G4int GetNbReactionsAtTime(Search&, const TIndex&, G4double) const; + virtual std::vector GetNbReactionsAtTimes(const TIndex&, + const std::vector&) const; + + //-SEARCH----------------------------------------------------------------------- + protected: + struct Search + { + Search() : fLowerBoundSet(false) {} + typename std::map::const_iterator fLastIndexSearched; + InnerCounterMapType::const_iterator fLowerBoundTime; + G4bool fLowerBoundSet; + }; + G4bool SearchIndexUpdated(Search&, const TIndex&) const; + G4int SearchUpperBoundTime(Search&, G4double, G4bool) const; +}; + +//------------------------------------------------------------------------------ + +// #include "G4VUserMoleculeReactionCounter.icc" + +//------------------------------------------------------------------------------ + +template +G4VUserMoleculeReactionCounter::G4VUserMoleculeReactionCounter() : G4VMoleculeReactionCounter() +{} + +//------------------------------------------------------------------------------ + +template +G4VUserMoleculeReactionCounter::G4VUserMoleculeReactionCounter(const G4String& name, + MoleculeReactionCounterType type) + : G4VMoleculeReactionCounter(name, type) +{} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeReactionCounter::Initialize() +{ + InitializeUser(); + fIsInitialized = true; +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeReactionCounter::GetNbReactionsAtTime(const TIndex& index, G4double time) const +{ + Search search = {}; + return GetNbReactionsAtTime(search, index, time); +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeReactionCounter::GetNbReactionsAtTime(Search& search, + const TIndex& index, + G4double time) const +{ + G4bool sameIndex = !SearchIndexUpdated(search, index); + return SearchUpperBoundTime(search, time, sameIndex); +} + +//------------------------------------------------------------------------------ + +template +std::vector G4VUserMoleculeReactionCounter::GetNbReactionsAtTimes( + const TIndex& index, const std::vector& times) const +{ + Search search = {}; + std::vector counts = {}; + for (auto time : times) + counts.push_back(GetNbReactionsAtTime(search, index, time)); + return counts; +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeReactionCounter::RecordReaction( + std::unique_ptr pIndex, + G4double time, G4int number) +{ + const TIndex* mapIndex = dynamic_cast(pIndex.get()); + + if (IsTimeAboveUpperBound(time)) { + if (fVerbose > 3) { + G4cout << "G4VUserMoleculeReactionCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">(" << GetName() + << ")::RecordReaction : " << mapIndex->GetReactionData()->GetReactionID() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + G4cout << ":: [IsTimeAboveUpperBound] Skipping since IsTimeAboveUpperBound == true" << G4endl; + } + return; + } + else if (IsTimeBelowLowerBound(time)) { + if (fVerbose > 3) { + G4cout << "G4VUserMoleculeReactionCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">(" << GetName() + << ")::RecordReaction : " << mapIndex->GetReactionData()->GetReactionID() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + G4cout << ":: [IsTimeBelowLowerBound] Skipping since IsTimeBelowLowerBound == true" << G4endl; + } + return; + } + + if (fVerbose > 2) { + G4cout << "G4VUserMoleculeReactionCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">(" << GetName() + << ")::RecordReaction : " << mapIndex->GetReactionData()->GetReactionID() + << " at time : " << G4BestUnit(time, "Time") << G4endl; + } + + auto [it, indexIsNew] = fCounterMap.emplace(*mapIndex, InnerCounterMapType{fTimeComparer}); + + if (indexIsNew || it->second.empty()) { + it->second.emplace(time, number); + // it->second[time] = number; + } + else { + if (G4MoleculeCounterManager::Instance()->GetResetCountersBeforeEvent()) + // can only do consistency check if the counters are cleared before each event + { + auto end = it->second.rbegin(); + + if ((end->first <= time || std::fabs(end->first - time) <= fTimeComparer.GetPrecisionAtTime(time))) + // Case 1 = new time comes after last recorded data + // Case 2 = new time is about the same as the last recorded one + { + // it->second[time] = end->second + number; + auto [it_time, _] = it->second.emplace(time, end->second); + it_time->second += number; + } + else { + G4ExceptionDescription errMsg; + errMsg << "Time of reaction " << mapIndex->GetReactionData()->GetReactionID() << " is " + << G4BestUnit(time, "Time") << "while the global time is " + << G4BestUnit(G4Scheduler::Instance()->GetGlobalTime(), "Time") + << "(last counter time: " << G4BestUnit(end->first, "Time") << ")" << G4endl; + G4Exception(G4String("G4VUserMoleculeReactionCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + + ">::RecordReaction"), + "TIME_DONT_MATCH", FatalException, errMsg); + } + } + else { + // since counters are not cleared after chemical run (i.e., after event) + // there will already be numbers in the map, so... + // (1) find the closest time + // (2) emplace entry using closest value as init + number + // (3) add number to all "future" entries as well + auto it_closest = G4::MoleculeCounter::FindClosestEntryForKey(it->second, time); + auto [it_new, _] = it->second.emplace(time, it_closest->second); + do { + it_new->second += number; + } while (++it_new != it->second.end()); + } + } +} + +//------------------------------------------------------------------------------ + +template +std::vector G4VUserMoleculeReactionCounter::GetMapIndices() const +{ + if (fVerbose > 2) { + G4cout << "Entering in G4VUserMoleculeReactionCounter::GetMapIndices" << G4endl; + } + return G4::MoleculeCounter::GetMapIndices(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +std::set G4VUserMoleculeReactionCounter::GetRecordedReactions() const +{ + if (fVerbose > 2) { + G4cout << "Entering in G4VUserMoleculeReactionCounter::GetRecordedReactions" << G4endl; + } + std::set output{}; + for (const auto& it : fCounterMap) { + output.insert(it.first.GetReactionData()); + } + return output; +} + +//------------------------------------------------------------------------------ + +template +std::set G4VUserMoleculeReactionCounter::GetRecordedTimes() const +{ + return G4::MoleculeCounter::GetRecordedTimes(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeReactionCounter::Dump() const +{ + DumpCounterMapIndices(); + G4::MoleculeCounter::DumpCounterMapContents(fCounterMap); +} + +template +void G4VUserMoleculeReactionCounter::DumpCounterMapIndices() const +{ + G4::MoleculeCounter::DumpCounterMapIndices(fCounterMap); +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeReactionCounter::ResetCounter() +{ + if (fVerbose > 1) { + G4cout << "G4VUserMoleculeReactionCounter<" << G4::MoleculeCounter::GetTemplateTypeName() + << ">(" << GetName() << ")::ResetCounter" << G4endl; + } + fCounterMap.clear(); +} + +//------------------------------------------------------------------------------ + +template +G4bool G4VUserMoleculeReactionCounter::SearchIndexUpdated(Search& search, const TIndex& index) const +{ + if (search.fLowerBoundSet && !(search.fLastIndexSearched->first < index) + && !(index < search.fLastIndexSearched->first)) + { + return true; + } + + auto mol_it = fCounterMap.find(index); + search.fLastIndexSearched = mol_it; + + if (mol_it != fCounterMap.end()) { + search.fLowerBoundTime = search.fLastIndexSearched->second.end(); + search.fLowerBoundSet = true; + } + else { + search.fLowerBoundSet = false; + } + + return false; +} + +//------------------------------------------------------------------------------ + +template +G4int G4VUserMoleculeReactionCounter::SearchUpperBoundTime(Search& search, G4double time, G4bool sameIndex) const +{ + auto mol_it = search.fLastIndexSearched; + if (mol_it == fCounterMap.end()) { + return 0; + } + + InnerCounterMapType const& timeMap = mol_it->second; + if (timeMap.empty()) { + return 0; + } + + if (sameIndex) { + if (search.fLowerBoundSet && search.fLowerBoundTime != timeMap.end()) { + if (search.fLowerBoundTime->first < time) { + auto upperToLast = search.fLowerBoundTime; + upperToLast++; + + if (upperToLast == timeMap.end()) { + return search.fLowerBoundTime->second; + } + + if (upperToLast->first > time) { + return search.fLowerBoundTime->second; + } + } + } + } + + auto up_time_it = timeMap.upper_bound(time); + + if (up_time_it == timeMap.end()) { + auto last_time = timeMap.rbegin(); + return last_time->second; + } + if (up_time_it == timeMap.begin()) { + return 0; + } + + up_time_it--; + + search.fLowerBoundTime = up_time_it; + search.fLowerBoundSet = true; + + return search.fLowerBoundTime->second; +} + +//------------------------------------------------------------------------------ + +template +void G4VUserMoleculeReactionCounter::AbsorbCounter( + const G4VMoleculeCounterInternalBase* pCounterBase) +{ + if (pCounterBase == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "Could not cast the pointer to type G4VUserMoleculeReactionCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">!\n" + << "Because the pointer is nullptr!" << G4endl; + G4Exception(G4String("G4VUserMoleculeReactionCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "BAD_REFERENCE", FatalException, errMsg); + } + + auto pCounter = dynamic_cast const*>(pCounterBase); + + if (pCounter == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "Could not cast the pointer to type G4VUserMoleculeReactionCounter<" + << G4::MoleculeCounter::GetTemplateTypeName() << ">!\n" + << "Because the objects aren't of the same type!" << G4endl; + G4Exception(G4String("G4VUserMoleculeReactionCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "BAD_REFERENCE", FatalException, errMsg); + } + + if (pCounter->GetType() != GetType()) { + G4ExceptionDescription errMsg; + errMsg << "You are trying to absorb a counter with different type!" << G4endl; + G4Exception(G4String("G4VUserMoleculeReactionCounter<" + + G4::MoleculeCounter::GetTemplateTypeName() + ">::AbsorbCounter"), + "TYPE_DIFF", JustWarning, errMsg); + } + + for (auto const& worker_it : pCounter->GetCounterMap()) { + auto [master_it, indexIsNew] = + fCounterMap.emplace(worker_it.first, InnerCounterMapType{fTimeComparer}); + + G4int currentNumber = 0, previousNumber = 0; + for (auto const& [time, number] : worker_it.second) { + currentNumber = number - previousNumber; + previousNumber = number; + + if (master_it->second.empty()) { + master_it->second.emplace(time, currentNumber); + } + else { // at least one element exists, so we can try to find the closest key + auto it_closest = G4::MoleculeCounter::FindClosestEntryForKey(master_it->second, time); + auto [it, _] = master_it->second.emplace(time, it_closest->second); + do { + it->second += currentNumber; + } while (++it != master_it->second.end()); + } + } + } +} + +//------------------------------------------------------------------------------ + +#endif diff --git a/source/processes/electromagnetic/dna/utils/sources.cmake b/source/processes/electromagnetic/dna/utils/sources.cmake index a73ce1a2cd..d476a61213 100644 --- a/source/processes/electromagnetic/dna/utils/sources.cmake +++ b/source/processes/electromagnetic/dna/utils/sources.cmake @@ -18,6 +18,7 @@ geant4_add_module(G4emdna-utils G4DNAPTBExcitationStructure.hh G4DNAPTBIonisationStructure.hh G4DNARevertProbability.hh + G4DNASamplingTable.hh G4DNAWaterExcitationStructure.hh G4DNAWaterIonisationStructure.hh G4ErrorFunction.hh @@ -36,6 +37,9 @@ geant4_add_module(G4emdna-utils G4DNAEventSet.hh G4ChemicalMoleculeFinder.hh G4DNAMaterialManager.hh + G4MoleculeReactionCounter.hh + G4VUserMoleculeReactionCounter.hh + G4ChemEquilibrium.hh SOURCES G4DNAChemistryManager.cc G4DNACPA100LogLogInterpolation.cc @@ -51,6 +55,7 @@ geant4_add_module(G4emdna-utils G4DNAEmfietzoglouWaterIonisationStructure.cc G4DNAPTBExcitationStructure.cc G4DNAPTBIonisationStructure.cc + G4DNASamplingTable.cc G4DNAWaterExcitationStructure.cc G4DNAWaterIonisationStructure.cc G4ErrorFunction.cc @@ -59,14 +64,15 @@ geant4_add_module(G4emdna-utils G4ReactionTableMessenger.cc G4VDNAReactionModel.cc G4VUserChemistryList.cc - # physchemIO G4VPhysChemIO.cc G4PhysChemIO.cc G4IRTUtils.cc G4DNAScavengerMaterial.cc G4DNAMesh.cc G4DNAEventSet.cc - G4DNAMaterialManager.cc) + G4DNAMaterialManager.cc + G4ChemEquilibrium.cc + G4MoleculeReactionCounter.cc) geant4_module_link_libraries(G4emdna-utils PUBLIC @@ -77,8 +83,8 @@ geant4_module_link_libraries(G4emdna-utils G4intercoms G4partman PRIVATE - G4analysismng G4emdna-moltypes + G4emutils G4geometrymng G4heprandom G4ions diff --git a/source/processes/electromagnetic/dna/models/src/G4ChemEquilibrium.cc b/source/processes/electromagnetic/dna/utils/src/G4ChemEquilibrium.cc similarity index 98% rename from source/processes/electromagnetic/dna/models/src/G4ChemEquilibrium.cc rename to source/processes/electromagnetic/dna/utils/src/G4ChemEquilibrium.cc index e1b64c175e..f4004f3a39 100644 --- a/source/processes/electromagnetic/dna/models/src/G4ChemEquilibrium.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4ChemEquilibrium.cc @@ -36,6 +36,7 @@ G4ChemEquilibrium::G4ChemEquilibrium(const G4int& type, const G4double& time) void G4ChemEquilibrium::Initialize() { + Reset(); MolType H2O = G4MoleculeTable::Instance()->GetConfiguration("H2O"); MolType H3OpB = @@ -95,6 +96,9 @@ void G4ChemEquilibrium::PrintInfo() const void G4ChemEquilibrium::SetEquilibrium(Reaction pReaction) { + if(pReaction == nullptr){ + return; + } if(pReaction->GetReactionType() != fRectionType) { std::vector molVector; @@ -113,7 +117,8 @@ void G4ChemEquilibrium::SetEquilibrium(Reaction pReaction) { fAddEquilibrium = true; fEquilibriumTime = fGlobalTime; - if(fVerbose >1) { + if(fVerbose >1) + { G4cout << "Reaction type : " << pReaction->GetReactionType() << " : " << pReaction->GetReactant1()->GetName() << " + " << pReaction->GetReactant2()->GetName() << G4endl; diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc index 989aa4ac42..e24072977d 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc @@ -46,6 +46,7 @@ #include "G4H2O.hh" #include "G4MolecularConfiguration.hh" #include "G4Molecule.hh" +#include "G4MoleculeCounterManager.hh" #include "G4MoleculeFinder.hh" #include "G4MoleculeTable.hh" #include "G4PhysChemIO.hh" @@ -186,7 +187,8 @@ void G4DNAChemistryManager::Clear() G4DNAMolecularReactionTable::DeleteInstance(); G4MolecularConfiguration::DeleteManager(); - G4VMoleculeCounter::DeleteInstance(); + if (G4MoleculeCounterManager::GetInstanceIfExists() != nullptr) + G4MoleculeCounterManager::DeleteInstance(); } //------------------------------------------------------------------------------ @@ -325,11 +327,9 @@ void G4DNAChemistryManager::Run() } G4MoleculeTable::Instance()->Finalize(); + G4Scheduler::Instance()->Process(); - if (fResetCounterWhenRunEnds) - { - G4VMoleculeCounter::Instance()->ResetCounter(); - } + CloseFile(); } @@ -418,6 +418,10 @@ void G4DNAChemistryManager::InitializeMaster() G4Scheduler::Instance(); // creates a concrete object of the scheduler + + if (G4MoleculeCounterManager::GetInstanceIfExists() != nullptr) + G4MoleculeCounterManager::Instance()->Initialize(); + fMasterInitialized = true; } @@ -484,9 +488,10 @@ void G4DNAChemistryManager::InitializeThread() G4Scheduler::Instance()->Initialize(); - fpThreadData->fThreadInitialized = true; + if (G4MoleculeCounterManager::GetInstanceIfExists() != nullptr) + G4MoleculeCounterManager::Instance()->Initialize(); - G4VMoleculeCounter::InitializeInstance(); + fpThreadData->fThreadInitialized = true; InitializeFile(); } @@ -647,8 +652,9 @@ void G4DNAChemistryManager::CreateWaterMolecule(ElectronicModification modificat } } - G4Track* pH2OTrack = pH2OMolecule->BuildTrack(picosecond + delayedTime, - pIncomingTrack->GetPosition()); + G4Track *pH2OTrack = pH2OMolecule->BuildTrack(picosecond + delayedTime, + pIncomingTrack->GetPosition(), + pIncomingTrack); pH2OTrack->SetParentID(pIncomingTrack->GetTrackID()); pH2OTrack->SetTrackStatus(fStopButAlive); @@ -683,8 +689,9 @@ void G4DNAChemistryManager::CreateSolvatedElectron(const G4Track* pIncomingTrack PushMolecule(std::make_unique(G4Electron_aq::Definition()), picosecond + delayedTime, - pFinalPosition != nullptr ? *pFinalPosition : pIncomingTrack->GetPosition(), - pIncomingTrack->GetTrackID()); + pFinalPosition ? *pFinalPosition : pIncomingTrack->GetPosition(), + pIncomingTrack->GetTrackID(), + pIncomingTrack); } } @@ -692,13 +699,14 @@ void G4DNAChemistryManager::CreateSolvatedElectron(const G4Track* pIncomingTrack void G4DNAChemistryManager::PushMolecule(std::unique_ptr pMolecule, double time, - const G4ThreeVector& position, - int parentID) + const G4ThreeVector &position, + int parentID, + const G4Track *parentTrack) { assert(fActiveChemistry && "To inject chemical species, the chemistry must be activated. " "Check chemistry activation before injecting species."); - G4Track* pTrack = pMolecule->BuildTrack(time, position); + G4Track* pTrack = pMolecule->BuildTrack(time, position, parentTrack); pTrack->SetTrackStatus(fAlive); pTrack->SetParentID(parentID); pMolecule.release(); @@ -767,16 +775,30 @@ void G4DNAChemistryManager::SetVerbose(G4int verbose) //------------------------------------------------------------------------------ -G4bool G4DNAChemistryManager::IsCounterResetWhenRunEnds() const +void G4DNAChemistryManager::BeginOfEventAction(const G4Event* pEvent) { - return fResetCounterWhenRunEnds; + G4MoleculeCounterManager::Instance()->BeginOfEventAction(pEvent); } //------------------------------------------------------------------------------ -void G4DNAChemistryManager::ResetCounterWhenRunEnds(G4bool resetCounterWhenRunEnds) +void G4DNAChemistryManager::BeginOfRunAction(const G4Run* pRun) { - fResetCounterWhenRunEnds = resetCounterWhenRunEnds; + G4MoleculeCounterManager::Instance()->BeginOfRunAction(pRun); +} + +//------------------------------------------------------------------------------ + +void G4DNAChemistryManager::EndOfEventAction(const G4Event* pEvent) +{ + G4MoleculeCounterManager::Instance()->EndOfEventAction(pEvent); +} + +//------------------------------------------------------------------------------ + +void G4DNAChemistryManager::EndOfRunAction(const G4Run* pRun) // for potential future use +{ + G4MoleculeCounterManager::Instance()->EndOfRunAction(pRun); } //------------------------------------------------------------------------------ diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAEventSet.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAEventSet.cc index 89a4a4bcab..2ecf881400 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAEventSet.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAEventSet.cc @@ -65,6 +65,10 @@ void Event::PrintEvent() const G4bool comparatorEventSet::operator()(std::unique_ptr const& rhs, std::unique_ptr const& lhs) const { + if(rhs->GetTime() == lhs->GetTime()) + { + return rhs->GetIndex() < lhs->GetIndex(); + } return rhs->GetTime() < lhs->GetTime(); } diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAMesh.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAMesh.cc index 92ffe1fce4..9bcec97406 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAMesh.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAMesh.cc @@ -26,6 +26,7 @@ #include #include #include "G4ITTrackHolder.hh" +#include "Randomize.hh" std::ostream& operator<<(std::ostream& stream, const G4VDNAMesh::Index& rhs) { @@ -232,3 +233,32 @@ G4VDNAMesh::Index G4DNAMesh::ConvertIndex(const Index& index, } return Index{ dx, dy, dz }; } + +G4VDNAMesh::Index G4DNAMesh:: GetRandomIndex(const Index& oldIndex, const G4double& OldReso) const +{ + G4double x_min = oldIndex.x * OldReso; + G4double x_max = (oldIndex.x + 1) * OldReso; + G4double y_min = oldIndex.y * OldReso; + G4double y_max = (oldIndex.y + 1) * OldReso; + G4double z_min = oldIndex.z * OldReso; + G4double z_max = (oldIndex.z + 1) * OldReso; + + G4int i_max = std::floor(x_max / fResolution); + G4int j_max = std::floor(y_max / fResolution); + G4int k_max = std::floor(z_max / fResolution); + + G4int i_min = std::floor(x_min / fResolution); + G4int j_min = std::floor(y_min / fResolution); + G4int k_min = std::floor(z_min / fResolution); + + G4double r1 = G4UniformRand(); + G4double r2 = G4UniformRand(); + G4double r3 = G4UniformRand(); + + G4int i_n = i_min + (G4int)std::floor(r1 * (i_max - i_min + 1)); + G4int j_n = j_min + (G4int)std::floor(r2 * (j_max - j_min + 1)); + G4int k_n = k_min + (G4int)std::floor(r3 * (k_max - k_min + 1)); + + return Index{ i_n, j_n, k_n }; +} + diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAMolecularReactionTable.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAMolecularReactionTable.cc index fdd34a34df..74c10119cd 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAMolecularReactionTable.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAMolecularReactionTable.cc @@ -292,15 +292,20 @@ void G4DNAMolecularReactionData::SetReactionType(G4int type) fDiffusionRate = 4 * pi * sumDiffCoeff * fReactionRadius * Avogadro; if (fpReactant1 == fpReactant2) fDiffusionRate/=2; fActivationRate = fDiffusionRate * fObservedReactionRate / (fDiffusionRate - fObservedReactionRate); - fProbability = Rs / (Rs + (fDiffusionRate / fActivationRate) * (fReactionRadius + Rs)); - + if(fActivationRate > 0) { + fProbability = + Rs / (Rs + (fDiffusionRate / fActivationRate) * (fReactionRadius + Rs)); + } }else{ // Type IV fEffectiveReactionRadius = -fOnsagerRadius/(1-exp(fOnsagerRadius/fReactionRadius)); fDiffusionRate = 4 * pi * sumDiffCoeff * fEffectiveReactionRadius * Avogadro; if (fpReactant1 == fpReactant2) fDiffusionRate/=2; fActivationRate = fDiffusionRate * fObservedReactionRate / (fDiffusionRate - fObservedReactionRate); - fProbability = Rs / (Rs + (fDiffusionRate / fActivationRate) * (fEffectiveReactionRadius + Rs)); + if(fActivationRate > 0) { + fProbability = + Rs / (Rs + (fDiffusionRate / fActivationRate) * (fEffectiveReactionRadius + Rs)); + } } } diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNASamplingTable.cc b/source/processes/electromagnetic/dna/utils/src/G4DNASamplingTable.cc new file mode 100644 index 0000000000..5980dea5d6 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/src/G4DNASamplingTable.cc @@ -0,0 +1,221 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// + +#include "G4DNASamplingTable.hh" +#include "G4EmParameters.hh" +#include "Randomize.hh" +#include "G4Log.hh" +#include "G4Exp.hh" + +#include +#include +#include + + +G4DNASamplingTable::G4DNASamplingTable(std::size_t npoints) +{ + fPrimaryEnergy.reserve(npoints); + fSecEnergy.reserve(npoints); + for (G4int i=0; i<5; ++i) { (fPDF[i]).reserve(npoints); } +} + +G4DNASamplingTable::~G4DNASamplingTable() +{ + for (auto & p : fSecEnergy) { delete p; } + for (G4int i=0; i<5; ++i) { + for (auto & p : fPDF[i]) { delete p; } + } +} + +void G4DNASamplingTable::LoadData(const G4String& fname, G4double factE, + G4double fact, G4bool verbose) +{ + std::ostringstream ost; + ost << G4EmParameters::Instance()->GetDirLEDATA() << "/" << fname; + std::ifstream fin(ost.str().c_str()); + if (!fin.is_open()) { + G4ExceptionDescription ed; + ed << "File <" << ost.str().c_str() << "> is not opened!"; + G4Exception("G4DNASamplingTable::LoadDifferential ", "em0003", + FatalException, ed, ""); + return; + } + + G4double t, e, sig; + G4double e0{0.0}; + G4int ntmax{0}; + G4int nt{0}; + std::vector* v = nullptr; + std::vector* vPDF[5]; + for (;;) { + fin >> e; + if (fin.eof()) { break; } + if (e != e0 || nullptr == v) { + fPrimaryEnergy.push_back(e*factE); + e0 = e; + ++fNpoints; + v = new std::vector; + fSecEnergy.push_back(v); + for (G4int i=0; i<5; ++i) { + vPDF[i] = new std::vector; + (fPDF[i]).push_back(vPDF[i]); + } + ntmax = std::max(ntmax, nt); + nt = 0; + } + fin >> t; + v->push_back(t*factE); + ++nt; + for (G4int i=0; i<5; ++i) { + fin >> sig; + sig *= fact; + (vPDF[i])->push_back(sig); + } + if (fin.eof()) { break; } + } + if (verbose) { + G4cout << "G4DNASamplingTable::LoadData from file:" << G4endl; + G4cout << fname << G4endl; + G4cout << " Nenergy= " << fNpoints << " NmaxT= " << ntmax << G4endl; + } + if (fNpoints > 0) { --fNpoints; } +} + +G4double G4DNASamplingTable::GetValue(G4double ekinPrimary, + G4double ekinSec, G4int shell) const +{ + std::vector* e1{nullptr}; + std::vector* e2{nullptr}; + std::vector* s1{nullptr}; + std::vector* s2{nullptr}; + G4int idx = GetIndex(fPrimaryEnergy, ekinPrimary); + if (idx == -1) { + e1 = fSecEnergy[0]; + s1 = (fPDF[shell])[0]; + } else if (idx > fNpoints) { + e1 = fSecEnergy[fNpoints]; + s1 = (fPDF[shell])[fNpoints]; + } else { + e1 = fSecEnergy[idx]; + s1 = (fPDF[shell])[idx]; + e2 = fSecEnergy[idx + 1]; + s2 = (fPDF[shell])[idx + 1]; + } + // edge cases + G4double res1 = VecInterpolation(e1, s1, ekinSec); + if (nullptr == e2) { return res1; } + + // ordinary case + G4double res2 = VecInterpolation(e2, s2, ekinSec); + G4double res = Interpolate(fPrimaryEnergy[idx], fPrimaryEnergy[idx + 1], + ekinPrimary, res1, res2); + return res; +} + +G4int G4DNASamplingTable::GetIndex(const std::vector& v, G4double x) const +{ + G4int idx; + if (x <= v[0]) { idx = -1; } + else if (x >= v.back()) { idx = (G4int)v.size(); } + else { + std::size_t i = std::upper_bound(v.cbegin(), v.cend(), x) - v.cbegin() - 1; + idx = (G4int)i; + } + return idx; +} + +G4double G4DNASamplingTable::VecInterpolation(const std::vector* ener, + const std::vector* val, + G4double e) const +{ + G4int idx = GetIndex(*ener, e); + G4double res; + if (idx == -1) { res = (*val)[0]; } + else if (e >= ener->back()) { res = val->back(); } + else { + res = Interpolate((*ener)[idx], (*ener)[idx + 1], e, (*val)[idx], (*val)[idx + 1]); + } + return res; +} + +G4double G4DNASamplingTable::Interpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) const +{ + G4double res; + // special case + if (e1 == e2) { + res = 0.5 * (xs1 + xs2); + + // Log-log interpolation by default + } else if (e1 > 0.0 && e2 > 0.0 && xs1 > 0.0 && xs2 > 0.0) { + G4double y = G4Log(xs1) + G4Log(e/e1) * G4Log(xs2/xs1)/G4Log(e2/e1); + res = G4Exp(y); + + // Lin-Log interpolation + } else if (xs1 > 0.0 && xs2 > 0.0) { + G4double y = G4Log(xs1) + (e - e1) * G4Log(xs2/xs1)/(e2 - e1); + res = G4Exp(y); + + // Lin-Lin interpolation + } else { + res = xs1 + (e - e1) * (xs2 - xs1)/(e2 - e1); + } + return res; +} + +G4double +G4DNASamplingTable::SampleCumulative(G4double ekinPrimary, G4int shell) const +{ + std::vector* e1{nullptr}; + std::vector* e2{nullptr}; + std::vector* s1{nullptr}; + std::vector* s2{nullptr}; + G4int idx = GetIndex(fPrimaryEnergy, ekinPrimary); + if (idx == -1) { + e1 = fSecEnergy[0]; + s1 = (fPDF[shell])[0]; + } else if (idx > fNpoints) { + e1 = fSecEnergy[fNpoints]; + s1 = (fPDF[shell])[fNpoints]; + } else { + e1 = fSecEnergy[idx]; + s1 = (fPDF[shell])[idx]; + e2 = fSecEnergy[idx + 1]; + s2 = (fPDF[shell])[idx + 1]; + } + G4double q = G4UniformRand(); + + // edge cases + G4double res1 = VecInterpolation(s1, e1, q); + if (nullptr == e2) { return res1; } + + // ordinary case + G4double res2 = VecInterpolation(s2, e2, q); + G4double res = Interpolate(fPrimaryEnergy[idx], fPrimaryEnergy[idx + 1], + ekinPrimary, res1, res2); + return res; +} diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAScavengerMaterial.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAScavengerMaterial.cc index 7287e1b8fa..4b774381b1 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAScavengerMaterial.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAScavengerMaterial.cc @@ -60,6 +60,19 @@ void G4DNAScavengerMaterial::Initialize() G4cout << "G4DNAScavengerMaterial existed but empty" << G4endl; } Reset(); + + fEquilibriumProcesses.emplace( + std::make_pair(6, std::make_unique(6, 10 * CLHEP::us)));//reactionType6 and 10 * us + fEquilibriumProcesses.emplace( + std::make_pair(7, std::make_unique(7, 10 * CLHEP::us)));//reactionType6 and 10 * us + fEquilibriumProcesses.emplace( + std::make_pair(8, std::make_unique(8, 10 * CLHEP::us)));//reactionType6 and 10 * us + for(auto& it : fEquilibriumProcesses) + { + it.second->Initialize(); + it.second->SetVerbose(fVerbose); + } + fIsInitialized = true; } @@ -68,10 +81,7 @@ G4DNAScavengerMaterial::GetNumberMoleculePerVolumeUnitForMaterialConf(MolType ma { // no change these molecules if (fH2O == matConf) { - G4ExceptionDescription exceptionDescription; - exceptionDescription << "matConf : " << matConf->GetName(); - G4Exception("G4DNAScavengerMaterial::GetNumberMoleculePerVolumeUnitForMaterialConf", - "G4DNAScavengerMaterial001", FatalErrorInArgument, exceptionDescription); + return 0; } auto iter = fScavengerTable.find(matConf); @@ -118,7 +128,7 @@ void G4DNAScavengerMaterial::AddNumberMoleculePerVolumeUnitForMaterialConf(MolTy // no change these molecules if (fH2O == matConf || fH3Op == matConf || // pH has no change - G4MoleculeTable::Instance()->GetConfiguration("OHm(B)") == matConf) + fHOm == matConf) { // G4cout<<"moletype : "<GetName()<second.rbegin(); if (end->first <= time - || fabs(end->first - time) <= G4::MoleculeCounter::TimePrecision::fPrecision) { + || fabs(end->first - time) <= G4::MoleculeCounter::FixedTimeComparer::fPrecision) { G4double newValue = end->second + number; counterMap_i->second[time] = newValue; if (newValue != (floor)(fScavengerTable[molecule])) // protection { - G4String errMsg = "You are trying to add wrong molecule "; + G4String errMsg = "You are trying to add wrong molecule : "; + G4cout<< " newValue : "<GetName() + << " at time : " << G4BestUnit(time, "Time") + << " with number : " << number + <<" (floor)(fScavengerTable[molecule]) : "<<(floor)(fScavengerTable[molecule]) + << " and the final number is not valid." << G4endl; G4Exception("AddAMoleculeAtTime", "", FatalErrorInArgument, errMsg); } } @@ -427,4 +444,37 @@ G4double G4DNAScavengerMaterial::GetpH() fScavengerTable[fHOm] = 0; } return -pH; +} + +G4bool G4DNAScavengerMaterial::SetEquilibrium(const G4DNAMolecularReactionData* pReaction, + G4double time) +{ + for(auto& it : fEquilibriumProcesses) + { + it.second->SetGlobalTime(time); + it.second->SetEquilibrium(pReaction); + if(it.second->IsStatusChanged()) return true; + } + return false; +} + +void G4DNAScavengerMaterial::ResetEquilibrium() +{ + for(auto& it : fEquilibriumProcesses) + { + it.second->Reset(); + } +} + +G4bool G4DNAScavengerMaterial::IsEquilibrium(const G4int& reactionType) const +{ + auto reaction = fEquilibriumProcesses.find(reactionType); + if(reaction == fEquilibriumProcesses.end()) + { + return true; + }else + { + return (reaction->second->GetEquilibriumStatus()); + } + } \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/utils/src/G4MoleculeReactionCounter.cc b/source/processes/electromagnetic/dna/utils/src/G4MoleculeReactionCounter.cc new file mode 100644 index 0000000000..36c7bd328f --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/src/G4MoleculeReactionCounter.cc @@ -0,0 +1,79 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Author: Christian Velten (2025) + +#include "G4MoleculeReactionCounter.hh" + +//------------------------------------------------------------------------------ + +G4String G4MoleculeReactionCounterIndex::FormattedReactionString(const G4DNAMolecularReactionData* reactionData) const +{ + const G4MolecularConfiguration* reactant1 = reactionData->GetReactant1(); + const G4MolecularConfiguration* reactant2 = reactionData->GetReactant2(); + + const std::vector* products = reactionData->GetProducts(); + + G4String reactionLhs = ""; + if (reactant1 != nullptr) { + reactionLhs += reactant1->GetUserID(); + if (reactant2 != nullptr) reactionLhs += " + "; + } + if (reactant2 != nullptr) reactionLhs += reactant2->GetUserID(); + + G4String reactionRhs = ""; + for (auto it = products->cbegin(); it != products->cend(); ++it) { + if (*it != nullptr) { + if (it != products->cbegin() && reactionRhs.size() > 0) reactionRhs += " + "; + reactionRhs += (*it)->GetUserID(); + } + } + + G4String reactionString = reactionLhs + " -> " + reactionRhs; + + return reactionString; +} + +//------------------------------------------------------------------------------ + +G4MoleculeReactionCounter::G4MoleculeReactionCounter() : G4VUserMoleculeReactionCounter() {} + +G4MoleculeReactionCounter::G4MoleculeReactionCounter(G4String name) + : G4VUserMoleculeReactionCounter(std::move(name), MoleculeReactionCounterType::Basic) +{} + +//------------------------------------------------------------------------------ + +void G4MoleculeReactionCounter::InitializeUser() {} + +//------------------------------------------------------------------------------ + +std::unique_ptr +G4MoleculeReactionCounter::BuildSimpleIndex(const G4DNAMolecularReactionData* reactionData) const +{ + return std::make_unique(reactionData); +} + +//------------------------------------------------------------------------------ diff --git a/source/processes/electromagnetic/dna/utils/src/G4PhysChemIO.cc b/source/processes/electromagnetic/dna/utils/src/G4PhysChemIO.cc index 59de847aaf..d2683cd10f 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4PhysChemIO.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4PhysChemIO.cc @@ -33,7 +33,6 @@ #include "G4PhysChemIO.hh" #include "G4SystemOfUnits.hh" #include "G4Track.hh" -#include "G4VAnalysisManager.hh" using namespace std; @@ -42,7 +41,6 @@ using namespace std; namespace G4PhysChemIO{ FormattedText::FormattedText(){ - fRunID = -1; fEventID = -1; fFileInitialized = false; } @@ -154,155 +152,4 @@ void FormattedText::CreateSolvatedElectron(const G4Track* theIncomingTrack, fOfstream << G4endl; } -//------------------------------------------------------------------------------ -// -// Using G4analysis -// - -G4Analysis::G4Analysis(G4VAnalysisManager* analysisManager): -fpAnalysisManager(analysisManager) -{ - fFileInitialized = false; - fNtupleID = -1; -} - -//------------------------------------------------------------------------------ - -G4Analysis::~G4Analysis() -{ - fpAnalysisManager = nullptr; -} - -//------------------------------------------------------------------------------ - -void G4Analysis::InitializeFile() -{ - if (fFileInitialized) return; - - fNtupleID = fpAnalysisManager->CreateNtuple("PhysChem","PhysChem"); - fpAnalysisManager->CreateNtupleIColumn(fNtupleID, "ParentID"); - fpAnalysisManager->CreateNtupleSColumn(fNtupleID, "Molecule"); - - //---------------------------------------------------------------------------- - // valid for H2O only - fpAnalysisManager->CreateNtupleIColumn(fNtupleID, "ElectronicModif"); - // ionization = 0 / excitation = 1 / diss att = 2 - fpAnalysisManager->CreateNtupleIColumn(fNtupleID, "level"); - // valid for ion and exc only - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "Energy_eV"); - // valid for ion and exc only - - //---------------------------------------------------------------------------- - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "x_parent_nm"); - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "y_parent_nm"); - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "z_parent_nm"); - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "x_nm"); - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "y_nm"); - fpAnalysisManager->CreateNtupleDColumn(fNtupleID, "z_nm"); - fpAnalysisManager->FinishNtuple(fNtupleID); - - fFileInitialized = true; -} - -//------------------------------------------------------------------------------ - -void G4Analysis::WriteInto(const G4String& output, - ios_base::openmode) -{ - fpAnalysisManager->OpenFile(output); - fFileInitialized = false; -} - -//------------------------------------------------------------------------------ - -void G4Analysis::CloseFile() -{ -// fpAnalysisManager->Write(); -// fpAnalysisManager->CloseFile(); -} - -//------------------------------------------------------------------------------ - -void G4Analysis::CreateWaterMolecule(G4int modification, - G4int electronicLevel, - G4double energy, - const G4Track* theIncomingTrack) -{ - if(!fFileInitialized) InitializeFile(); - - // parent ID - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 0, - theIncomingTrack->GetTrackID()); - - // molecule type - fpAnalysisManager->FillNtupleSColumn(fNtupleID, 1, "H2O"); - - //---------------------------------------------------------------------------- - // valid for H2O only - - // electronic modif - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 2, modification); - // ionization = 0 / excitation = 1 / diss att = 2 - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 3, electronicLevel); - fpAnalysisManager->FillNtupleDColumn(fNtupleID, 4, energy / eV); - - //---------------------------------------------------------------------------- - const G4ThreeVector& parentPos = theIncomingTrack->GetPosition(); - - fpAnalysisManager->FillNtupleDColumn(fNtupleID,5,(parentPos.x())/nanometer); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,6,(parentPos.y())/nanometer); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,7,(parentPos.z())/nanometer); - - fpAnalysisManager->FillNtupleDColumn(fNtupleID,8,(parentPos.x())/nanometer); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,9,(parentPos.y())/nanometer); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,10,(parentPos.z())/nanometer); - fpAnalysisManager->AddNtupleRow(fNtupleID); -} - -//------------------------------------------------------------------------------ - -void G4Analysis::CreateSolvatedElectron(const G4Track* electronTrack, - G4ThreeVector* finalPosition) -{ - if(!fFileInitialized) InitializeFile(); - - // parent ID - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 0, - electronTrack->GetTrackID()); - - // molecule type - fpAnalysisManager->FillNtupleSColumn(fNtupleID, 1, "e_aq"); - - //---------------------------------------------------------------------------- - // valid for H2O only - - // electronic modif - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 2, -1); // electronic modif - fpAnalysisManager->FillNtupleIColumn(fNtupleID, 3, -1); // electronic level - fpAnalysisManager->FillNtupleDColumn(fNtupleID, 4, - electronTrack->GetKineticEnergy() / eV); - - //---------------------------------------------------------------------------- - const G4ThreeVector& parentPos = electronTrack->GetPosition(); - const double i_nm = 1./nanometer; - - fpAnalysisManager->FillNtupleDColumn(fNtupleID,5, parentPos.x() *i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,6, parentPos.y() *i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,7, parentPos.z() *i_nm); - - if (finalPosition != nullptr) - { - fpAnalysisManager->FillNtupleDColumn(fNtupleID,8, finalPosition->x()*i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,9, finalPosition->y()*i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,10, finalPosition->z()*i_nm); - } - else - { - fpAnalysisManager->FillNtupleDColumn(fNtupleID,8, parentPos.x() *i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,9, parentPos.y() *i_nm); - fpAnalysisManager->FillNtupleDColumn(fNtupleID,10, parentPos.z() *i_nm); - } - - fpAnalysisManager->AddNtupleRow(fNtupleID); -} } diff --git a/source/processes/electromagnetic/lowenergy/History b/source/processes/electromagnetic/lowenergy/History index d45a4a5dd7..6d040bdce8 100644 --- a/source/processes/electromagnetic/lowenergy/History +++ b/source/processes/electromagnetic/lowenergy/History @@ -6,11 +6,20 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-07 L. Pandola (emlowen-V11-02-08) -- Fix residual Coverity defect on G4ShellData +## 2025-05-25 V. Ivanchenko (emlowen-V11-03-03) +- G4LivermorePhotoElectricModel - reorganisation of initialisation and data + destruction. +- G4AtomicTransitionManager, G4UAtomicDeexcitation - use std::size_t and few + other cosmetic changes. -## 2025-01-09 L. Pandola -- Fix Coverity warnings in Penenelope models, G4ShellData, G4FluoData and +## 2025-04-01 V. Ivanchenko (emlowen-V11-03-02) +- G4hIonEffChargeSquare - fixed Coverity warning. + +## 2025-02-07 L. Pandola (emlowen-V11-03-01) +- Fix residual Coverity defect on G4ShellData. + +## 2025-01-09 L. Pandola (emlowen-V11-03-00) +- Fix Coverity warnings in Penenelope models, G4ShellData, G4FluoData and G4AugerTransition ## 2024-12-02 A. Ribon (emlowen-V11-02-07) diff --git a/source/processes/electromagnetic/lowenergy/include/G4AtomicDeexcitation.hh b/source/processes/electromagnetic/lowenergy/include/G4AtomicDeexcitation.hh index 30a5012667..625ef61bc7 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4AtomicDeexcitation.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4AtomicDeexcitation.hh @@ -49,7 +49,7 @@ class G4AtomicDeexcitation { public: ///constructor - explicit G4AtomicDeexcitation(); + G4AtomicDeexcitation(); ~G4AtomicDeexcitation(); /// Returns a vector contains the photons generated by radiative transitions diff --git a/source/processes/electromagnetic/lowenergy/include/G4AtomicTransitionManager.hh b/source/processes/electromagnetic/lowenergy/include/G4AtomicTransitionManager.hh index 99fbf0fb24..24fd0c2a52 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4AtomicTransitionManager.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4AtomicTransitionManager.hh @@ -61,19 +61,21 @@ public: /// function Instance() static G4AtomicTransitionManager* Instance(); + ~G4AtomicTransitionManager(); + /// needs to be called once from other code before start of run void Initialise(); /// Z is the atomic number of the element, shellIndex is the /// index (in EADL) of the shell - G4AtomicShell* Shell(G4int Z, size_t shellIndex) const; + G4AtomicShell* Shell(G4int Z, std::size_t shellIndex) const; /// Z is the atomic number of the element, shellIndex is the /// index (in EADL) of the final shell for the transition /// This function gives, upon Z and the Index of the initial shell where /// the vacancy is, the radiative transition that can happen (originating /// shell, energy, probability) - const G4FluoTransition* ReachableShell(G4int Z, size_t shellIndex) const; + const G4FluoTransition* ReachableShell(G4int Z, std::size_t shellIndex) const; /// This function gives, upon Z and the Index of the initial shell where /// the vacancy is, the NON-radiative transition that can happen with @@ -98,26 +100,25 @@ public: /// Gives the sum of the probabilities of radiative transition towards the /// shell whose index is shellIndex G4double - TotalRadiativeTransitionProbability(G4int Z, size_t shellIndex) const; + TotalRadiativeTransitionProbability(G4int Z, std::size_t shellIndex) const; /// Gives the sum of the probabilities of non radiative transition from the /// shell whose index is shellIndex G4double - TotalNonRadiativeTransitionProbability(G4int Z, size_t shellIndex) const; + TotalNonRadiativeTransitionProbability(G4int Z, std::size_t shellIndex) const; /// Verbosity control void SetVerboseLevel(G4int vl) {verboseLevel = vl;}; G4int GetVerboseLevel(){return verboseLevel;}; -private: - explicit G4AtomicTransitionManager(); - - ~G4AtomicTransitionManager(); - // Hide copy constructor and assignment operator - G4AtomicTransitionManager& operator=(const G4AtomicTransitionManager& right); - G4AtomicTransitionManager(const G4AtomicTransitionManager&); - + G4AtomicTransitionManager& operator= + (const G4AtomicTransitionManager& right) = delete; + G4AtomicTransitionManager(const G4AtomicTransitionManager&) = delete; + +private: + G4AtomicTransitionManager(); + static G4AtomicTransitionManager* instance; // since Augereffect data r stored as a table in G4AugerData, we have // here a pointer to an element of that class itself. diff --git a/source/processes/electromagnetic/lowenergy/include/G4LivermorePhotoElectricModel.hh b/source/processes/electromagnetic/lowenergy/include/G4LivermorePhotoElectricModel.hh index f68e4c40df..f97cd6bb4e 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4LivermorePhotoElectricModel.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4LivermorePhotoElectricModel.hh @@ -67,8 +67,6 @@ public: const G4MaterialCutsCouple*, const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; - void InitialiseForElement(const G4ParticleDefinition*, G4int Z) override; - [[maybe_unused]] inline void SetLimitNumberOfShells(G4int n) { nShellLimit = n; }; G4double GetBindingEnergy(G4int Z, G4int shell); @@ -82,7 +80,7 @@ protected: private: void ReadData(const G4int Z); - const G4String& FindDirectoryPath(); + void FindDirectoryPath(); void InitialiseOnFly(G4int Z); diff --git a/source/processes/electromagnetic/lowenergy/include/G4UAtomicDeexcitation.hh b/source/processes/electromagnetic/lowenergy/include/G4UAtomicDeexcitation.hh index 0b80acf4f4..76bac54360 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4UAtomicDeexcitation.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4UAtomicDeexcitation.hh @@ -60,8 +60,8 @@ class G4Material; class G4UAtomicDeexcitation : public G4VAtomDeexcitation { public: - explicit G4UAtomicDeexcitation(); - virtual ~G4UAtomicDeexcitation(); + G4UAtomicDeexcitation(); + ~G4UAtomicDeexcitation() override; //================================================================= // methods that are requested to be implemented by the interface diff --git a/source/processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc b/source/processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc index 34e8b9cb0a..a9b58883fe 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4AtomicTransitionManager.cc @@ -39,6 +39,7 @@ #include "G4FluoData.hh" #include "G4AugerData.hh" #include "G4AutoLock.hh" + namespace { G4Mutex AtomicTransitionManagerMutex = G4MUTEX_INITIALIZER; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -48,7 +49,8 @@ G4AtomicTransitionManager* G4AtomicTransitionManager::instance = nullptr; G4AtomicTransitionManager* G4AtomicTransitionManager::Instance() { if (instance == nullptr) { - instance = new G4AtomicTransitionManager(); + static G4AtomicTransitionManager man; + instance = &man; } return instance; } @@ -65,29 +67,20 @@ G4AtomicTransitionManager::~G4AtomicTransitionManager() { delete augerData; - for (auto& pos : shellTable){ - std::vectorvec = pos.second; - std::size_t vecSize = vec.size(); - for (std::size_t i=0; i< vecSize; ++i){ - G4AtomicShell* shell = vec[i]; - delete shell; - } + for (auto const & pos : shellTable) { + std::vector vec = pos.second; + for (auto const & p : vec) { delete p; } } - for (auto& ppos : transitionTable) - { - std::vectorvec = ppos.second; - std::size_t vecSize=vec.size(); - - for (std::size_t i=0; i< vecSize; ++i){ - G4FluoTransition* transition = vec[i]; - delete transition; - } - } + for (auto const & ppos : transitionTable) { + std::vector vec = ppos.second; + for (auto const & p : vec) { delete p; } + } } + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4AtomicShell* -G4AtomicTransitionManager::Shell(G4int Z, size_t shellIndex) const +G4AtomicTransitionManager::Shell(G4int Z, std::size_t shellIndex) const { auto pos = shellTable.find(Z); @@ -98,7 +91,7 @@ G4AtomicTransitionManager::Shell(G4int Z, size_t shellIndex) const else { - size_t lastShell = v.size(); + std::size_t lastShell = v.size(); G4ExceptionDescription ed; ed << "No de-excitation for Z= " << Z << " shellIndex= " << shellIndex @@ -118,7 +111,7 @@ G4AtomicTransitionManager::Shell(G4int Z, size_t shellIndex) const G4Exception("G4AtomicTransitionManager::Shell()","de0001", FatalException,ed,""); } - return 0; + return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -127,7 +120,7 @@ G4AtomicTransitionManager::Shell(G4int Z, size_t shellIndex) const // the vacancy is, the radiative transition that can happen (originating // shell, energy, probability) const G4FluoTransition* -G4AtomicTransitionManager::ReachableShell(G4int Z,size_t shellIndex) const +G4AtomicTransitionManager::ReachableShell(G4int Z, std::size_t shellIndex) const { auto pos = transitionTable.find(Z); if (pos!= transitionTable.end()) @@ -215,7 +208,7 @@ G4int G4AtomicTransitionManager::NumberOfReachableAugerShells(G4int Z)const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4AtomicTransitionManager::TotalRadiativeTransitionProbability( - G4int Z, size_t shellIndex) const + G4int Z, std::size_t shellIndex) const { auto pos = transitionTable.find(Z); G4double totalRadTransProb = 0.0; @@ -229,7 +222,7 @@ G4double G4AtomicTransitionManager::TotalRadiativeTransitionProbability( G4FluoTransition* transition = v[shellIndex]; G4DataVector transProb = transition->TransitionProbabilities(); - for (size_t j=0; j 1.0 || prob < 0.0) { diff --git a/source/processes/electromagnetic/lowenergy/src/G4FluoData.cc b/source/processes/electromagnetic/lowenergy/src/G4FluoData.cc index 33a402d181..afd4486dfc 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4FluoData.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4FluoData.cc @@ -160,7 +160,7 @@ G4double G4FluoData::StartShellEnergy(G4int initIndex, G4int vacancyIndex) const if (pos != energyMap.end()) { G4DataVector dataSet = *((*pos).second); - + G4int nData = (G4int)dataSet.size(); if (initIndex >= 0 && initIndex < nData) { @@ -189,7 +189,7 @@ G4double G4FluoData::StartShellProb(G4int initIndex, G4int vacancyIndex) const if (pos != probabilityMap.end()) { G4DataVector dataSet = *((*pos).second); - + G4int nData = (G4int)dataSet.size(); if (initIndex >= 0 && initIndex < nData) { diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc index 46417695d5..fcb2c2bf34 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc @@ -46,7 +46,6 @@ #include "G4SystemOfUnits.hh" #include "G4VAtomDeexcitation.hh" #include "G4EmParameters.hh" -#include //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -69,7 +68,8 @@ namespace //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(const G4String& nam) : G4VEmModel(nam) +G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(const G4String& nam) + : G4VEmModel(nam) { verboseLevel = 0; // Verbosity scale: @@ -95,6 +95,21 @@ G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(const G4String& nam // For water fSandiaCof.resize(4, 0.0); + + FindDirectoryPath(); + + if (fCrossSection == nullptr) { + fCrossSection = new G4ElementData(ZMAXPE); + fCrossSection->SetName("PhotoEffXS"); + fCrossSectionLE = new G4ElementData(ZMAXPE); + fCrossSectionLE->SetName("PhotoEffLowXS"); + for (G4int i = 0; i < ZMAXPE; ++i) { + fParamHigh[i] = nullptr; + fParamLow[i] = nullptr; + fNShells[i] = 0; + fNShellsUsed[i] = 0; + } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -103,14 +118,10 @@ G4LivermorePhotoElectricModel::~G4LivermorePhotoElectricModel() { if (isInitializer) { for (G4int i = 0; i < ZMAXPE; ++i) { - if (fParamHigh[i]) { - delete fParamHigh[i]; - fParamHigh[i] = nullptr; - } - if (fParamLow[i]) { - delete fParamLow[i]; - fParamLow[i] = nullptr; - } + delete fParamHigh[i]; + fParamHigh[i] = nullptr; + delete fParamLow[i]; + fParamLow[i] = nullptr; } } } @@ -129,7 +140,6 @@ void G4LivermorePhotoElectricModel::Initialise(const G4ParticleDefinition*, if (isInitializer) { G4AutoLock l(&livPhotoeffMutex); - FindDirectoryPath(); if (fWater == nullptr) { fWater = G4Material::GetMaterial("G4_WATER", false); if (fWater == nullptr) { @@ -140,13 +150,6 @@ void G4LivermorePhotoElectricModel::Initialise(const G4ParticleDefinition*, } } - if (fCrossSection == nullptr) { - fCrossSection = new G4ElementData(ZMAXPE); - fCrossSection->SetName("PhotoEffXS"); - fCrossSectionLE = new G4ElementData(ZMAXPE); - fCrossSectionLE->SetName("PhotoEffLowXS"); - } - const G4ElementTable* elemTable = G4Element::GetElementTable(); std::size_t numElems = (*elemTable).size(); for (std::size_t ie = 0; ie < numElems; ++ie) { @@ -188,7 +191,8 @@ G4LivermorePhotoElectricModel::CrossSectionPerVolume(const G4Material* material, G4double, G4double) { fCurrSection = 0.0; - if (fWater && (material == fWater || material->GetBaseMaterial() == fWater)) { + if (nullptr != fWater && + (material == fWater || material->GetBaseMaterial() == fWater)) { if (energy <= fWaterEnergyLimit) { fWater->GetSandiaTable()->GetSandiaCofWater(energy, fSandiaCof); @@ -475,7 +479,7 @@ void G4LivermorePhotoElectricModel::SampleSecondaries(std::vectorLivermoreDataDir() == "livermore"); - G4int number = G4EmParameters::Instance()->NumberForFreeVector(); - auto pv = new G4PhysicsFreeVector(spline); + auto param = G4EmParameters::Instance(); + G4bool spline = (param->LivermoreDataDir() == "livermore"); + G4int number = param->NumberForFreeVector(); // fDataDirectory will be defined after these lines std::ostringstream ost; - ost << FindDirectoryPath() << "pe-cs-" << Z << ".dat"; + ost << fDataDirectory << "pe-cs-" << Z << ".dat"; std::ifstream fin(ost.str().c_str()); if (!fin.is_open()) { G4ExceptionDescription ed; @@ -532,6 +535,7 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) G4cout << "File " << ost.str().c_str() << " is opened by G4LivermorePhotoElectricModel" << G4endl; } + auto pv = new G4PhysicsFreeVector(spline); pv->Retrieve(fin, true); pv->ScaleVector(MeV, barn); pv->FillSecondDerivatives(); @@ -540,7 +544,6 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) fin.close(); // read high-energy fit parameters - fParamHigh[Z] = new std::vector; G4int n1 = 0; G4int n2 = 0; G4double x; @@ -581,6 +584,7 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) } fNShells[Z] = n1; + fParamHigh[Z] = new std::vector; fParamHigh[Z]->reserve(7 * n1 + 1); fParamHigh[Z]->push_back(x * MeV); for (G4int i = 0; i < n1; ++i) { @@ -598,7 +602,6 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) fin1.close(); // read low-energy fit parameters - fParamLow[Z] = new std::vector; G4int n1_low = 0; G4int n2_low = 0; G4double x_low; @@ -639,6 +642,7 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) } fNShells[Z] = n1_low; + fParamLow[Z] = new std::vector; fParamLow[Z]->reserve(7 * n1_low + 1); fParamLow[Z]->push_back(x_low * MeV); for (G4int i = 0; i < n1_low; ++i) { @@ -706,6 +710,7 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) << G4endl; G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, "G4LEDATA version should be G4EMLOW8.0 or later."); + delete pv1; return; } if (verboseLevel > 3) { @@ -744,20 +749,6 @@ G4double G4LivermorePhotoElectricModel::GetBindingEnergy(G4int Z, G4int shell) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void -G4LivermorePhotoElectricModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) -{ - if (fCrossSection == nullptr) { - fCrossSection = new G4ElementData(ZMAXPE); - fCrossSection->SetName("PhotoEffXS"); - fCrossSectionLE = new G4ElementData(ZMAXPE); - fCrossSectionLE->SetName("PhotoEffLowXS"); - } - ReadData(Z); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void G4LivermorePhotoElectricModel::InitialiseOnFly(G4int Z) { if (fCrossSection->GetElementData(Z) == nullptr && Z > 0 && Z < ZMAXPE) { diff --git a/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungFS.cc b/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungFS.cc index 6505221150..e2e7495418 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungFS.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungFS.cc @@ -605,7 +605,7 @@ G4double G4PenelopeBremsstrahlungFS::SampleGammaEnergy(G4double energy,const G4M const G4double cut) const { std::pair theKey = std::make_pair(mat,cut); - if (!(fSamplingTable->count(theKey)) || !(fPBcut->count(theKey)) || + if (!(fSamplingTable->count(theKey)) || !(fPBcut->count(theKey)) || !(fReducedXSTable->count(theKey))) { G4ExceptionDescription ed; diff --git a/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungModel.cc b/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungModel.cc index 011fa319d8..a79394d613 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4PenelopeBremsstrahlungModel.cc @@ -257,7 +257,7 @@ G4double G4PenelopeBremsstrahlungModel::CrossSectionPerVolume(const G4Material* { G4cout << "G4PenelopeBremsstrahlungModel " << G4endl; G4cout << "Mean free path for gamma emission > " << cutEnergy/keV << " keV at " << - energy/keV << " keV = " << + energy/keV << " keV = " << (crossPerVolume? (1./crossPerVolume)/mm : DBL_MAX) << " mm" << G4endl; } diff --git a/source/processes/electromagnetic/lowenergy/src/G4PenelopeComptonModel.cc b/source/processes/electromagnetic/lowenergy/src/G4PenelopeComptonModel.cc index 98dc679134..b30abcfe7a 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4PenelopeComptonModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4PenelopeComptonModel.cc @@ -236,7 +236,7 @@ G4double G4PenelopeComptonModel::CrossSectionPerVolume(const G4Material* materia if (fVerboseLevel > 2) G4cout << "Compton mean free path at " << energy/keV << " keV for material " << - material->GetName() << " = " << + material->GetName() << " = " << (csvolume ? (1./csvolume)/mm : DBL_MAX) << " mm" << G4endl; return csvolume; } diff --git a/source/processes/electromagnetic/lowenergy/src/G4PenelopeIonisationModel.cc b/source/processes/electromagnetic/lowenergy/src/G4PenelopeIonisationModel.cc index ace3b09557..a7221e1651 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4PenelopeIonisationModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4PenelopeIonisationModel.cc @@ -323,12 +323,12 @@ G4double G4PenelopeIonisationModel::CrossSectionPerVolume(const G4Material* mate { G4cout << "G4PenelopeIonisationModel " << G4endl; G4cout << "Mean free path for delta emission > " << cutEnergy/keV << " keV at " << - energy/keV << " keV = " << + energy/keV << " keV = " << (crossPerVolume ? (1./crossPerVolume)/mm : DBL_MAX) << " mm" << G4endl; if (theXS) totalCross = (theXS->GetTotalCrossSection(energy))*moleculeDensity; G4cout << "Total free path for ionisation (no threshold) at " << - energy/keV << " keV = " << + energy/keV << " keV = " << (totalCross ? (1./totalCross)/mm : DBL_MAX) << " mm" << G4endl; } return crossPerVolume; diff --git a/source/processes/electromagnetic/lowenergy/src/G4ShellData.cc b/source/processes/electromagnetic/lowenergy/src/G4ShellData.cc index df7c216b53..592c1a5243 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4ShellData.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4ShellData.cc @@ -108,7 +108,7 @@ const std::vector& G4ShellData::ShellVector(G4int Z) const { if (Z < zMin || Z > zMax) G4Exception("G4ShellData::ShellVector()","de0001",JustWarning,"Z outside boundaries"); - auto pos = occupancyPdfMap.find(Z); + auto pos = occupancyPdfMap.find(Z); std::vector* dataSet = (*pos).second; return *dataSet; } @@ -200,12 +200,12 @@ void G4ShellData::PrintData() const G4int id = (G4int) (*ids)[i]; G4double e = (*energies)[i] / keV; G4cout << i << ") "; - - if (occupancyData) + + if (occupancyData) { G4cout << " Occupancy: "; } - else + else { G4cout << " Shell id: "; } @@ -213,7 +213,7 @@ void G4ShellData::PrintData() const << e << " keV "; if (occupancyData) { - auto posOcc = occupancyPdfMap.find(Z); + auto posOcc = occupancyPdfMap.find(Z); G4double prob = 0.; if (posOcc != occupancyPdfMap.end()) { diff --git a/source/processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.cc b/source/processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.cc index 488e250f89..1711c46c1a 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4hIonEffChargeSquare.cc @@ -241,7 +241,7 @@ G4double G4hIonEffChargeSquare::IonEffChargeSquare( } else { // v1 is ion velocity in vF unit - G4double v1{0.0}, v2{0.0}; + G4double v1{0.01}, v2{0.0}; if (vF > 0.0) { v1 = std::sqrt( reducedEnergy / (25.0 * keV) )/ vF; v2 = 1.0/ (vF*vF); diff --git a/source/processes/electromagnetic/muons/History b/source/processes/electromagnetic/muons/History index 8c36db6cd6..241cfa43df 100644 --- a/source/processes/electromagnetic/muons/History +++ b/source/processes/electromagnetic/muons/History @@ -6,9 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-12 V.Ivanchenko (emmuons-V11-03-00) +- G4RiGeMuPairProductionModel, G4RiGeAngularGenerator - G.Depaola & R.Pacheco + provided fixes to the angular distribution of electrons and positrons. +- G4MuPairProduction - enable RiGe model via G4EmParameters + ## 2023-10-31 V.Ivanchenko (emmuons-V11-01-04) - G4RiGeMuPairProductionModel, G4RiGeAngularGenerator - a new 5D model for e+e- - pair production by muons + pair production by muons (authors G.Depaola & R.Pacheco) - fixed declaration of virtual destructors in several header files - G4MuPairProductionModel - minor clean-up for better code readability diff --git a/source/processes/electromagnetic/muons/include/G4RiGeAngularGenerator.hh b/source/processes/electromagnetic/muons/include/G4RiGeAngularGenerator.hh index cf821de1fc..93af2d4dc9 100644 --- a/source/processes/electromagnetic/muons/include/G4RiGeAngularGenerator.hh +++ b/source/processes/electromagnetic/muons/include/G4RiGeAngularGenerator.hh @@ -31,7 +31,7 @@ // // File name: G4RiGeAngularGenerator // -// Authors: Girardo Depaola & Ricardo Pacheco +// Authors: Gerardo Depaola & Ricardo Pacheco // // Creation date: 29 October 2024 // @@ -59,15 +59,15 @@ public: G4double gEnergy, G4int Z, const G4Material* mat = nullptr) override; - G4LorentzVector Sample5DPairDirections(const G4DynamicParticle* dp, - G4ThreeVector& dirElectron, - G4ThreeVector& dirPositron, - const G4double gEnergy, const G4double q2, - const G4double gMomentum, - G4double muFinalMomentum, - G4double muFinalEnergy, - const G4double* randNumbs, - const G4double* W); + void Sample5DPairDirections(const G4DynamicParticle* dp, + G4ThreeVector& dirElectron, + G4ThreeVector& dirPositron, + const G4double gEnergy, const G4double q2, + const G4double gMomentum, + G4double muFinalMomentum, + G4double muFinalEnergy, + const G4double* randNumbs, + const G4double* W); void PhiRotation(G4ThreeVector& dir, G4double phi); diff --git a/source/processes/electromagnetic/muons/src/G4MuPairProduction.cc b/source/processes/electromagnetic/muons/src/G4MuPairProduction.cc index f57209fe83..8463b28bfa 100644 --- a/source/processes/electromagnetic/muons/src/G4MuPairProduction.cc +++ b/source/processes/electromagnetic/muons/src/G4MuPairProduction.cc @@ -73,6 +73,7 @@ #include "G4Positron.hh" #include "G4VEmModel.hh" #include "G4MuPairProductionModel.hh" +#include "G4RiGeMuPairProductionModel.hh" #include "G4ElementData.hh" #include "G4EmParameters.hh" @@ -113,18 +114,22 @@ void G4MuPairProduction::InitialiseEnergyLossProcess( isInitialised = true; theParticle = part; + G4EmParameters* param = G4EmParameters::Instance(); G4VEmModel* mod = EmModel(0); - if(nullptr == mod) { + if (nullptr == mod) { lowestKinEnergy = std::max(lowestKinEnergy, part->GetPDGMass()*8.0); - auto ptr = new G4MuPairProductionModel(part); - ptr->SetLowestKineticEnergy(lowestKinEnergy); - mod = ptr; + if (param->UseRiGePairProductionModel()) { + mod = new G4MuPairProductionModel(part); + } else { + auto ptr = new G4MuPairProductionModel(part); + ptr->SetLowestKineticEnergy(lowestKinEnergy); + mod = ptr; + } SetEmModel(mod); } G4VEmFluctuationModel* fm = nullptr; - G4EmParameters* param = G4EmParameters::Instance(); mod->SetLowEnergyLimit(param->MinKinEnergy()); mod->SetHighEnergyLimit(param->MaxKinEnergy()); mod->SetSecondaryThreshold(param->MuHadBremsstrahlungTh()); diff --git a/source/processes/electromagnetic/muons/src/G4RiGeAngularGenerator.cc b/source/processes/electromagnetic/muons/src/G4RiGeAngularGenerator.cc index 39d325b35b..7425c0c523 100644 --- a/source/processes/electromagnetic/muons/src/G4RiGeAngularGenerator.cc +++ b/source/processes/electromagnetic/muons/src/G4RiGeAngularGenerator.cc @@ -31,7 +31,7 @@ // // File name: G4RiGeAngularGenerator // -// Authors: Girardo Depaola & Ricardo Pacheco +// Authors: Gerardo Depaola & Ricardo Pacheco // // Creation date: 27 October 2024 // @@ -85,8 +85,7 @@ G4double G4RiGeAngularGenerator::SampleCosTheta(G4double primKinEnergy, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4LorentzVector -G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, +void G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, G4ThreeVector& dirElectron, G4ThreeVector& dirPositron, const G4double gEnergy, const G4double q2, @@ -96,10 +95,9 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, const G4double* randNumbs, const G4double* W) { - G4double muEnergy = dp->GetKineticEnergy(); + G4double muKinEnergy = dp->GetKineticEnergy(); G4ThreeVector muMomentumVector = dp->GetMomentum(); G4double muMomentum = muMomentumVector.mag(); - G4LorentzVector muFinalFourMomentum(muEnergy, muMomentumVector); // Electron mass G4double eMass = CLHEP::electron_mass_c2; @@ -108,6 +106,9 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, // Muon mass G4double muMass = dp->GetDefinition()->GetPDGMass(); + G4double muEnergy = muKinEnergy + muMass; + G4LorentzVector muFinalFourMomentum(muMomentumVector, muEnergy); + G4double mint3 = 0.; G4double maxt3 = CLHEP::pi; G4double Cmin = std::cos(maxt3); @@ -126,20 +127,7 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, G4ThreeVector dirGamma; dirGamma.set(sintg*cospg, sintg*sinpg, costg); - G4LorentzVector gFourMomentum(gEnergy, dirGamma*gMomentum); - - G4double Ap = muMomentum*muMomentum + muFinalMomentum*muFinalMomentum + gMomentum*gMomentum; - G4double A = Ap - 2.*muMomentum*gMomentum*costg; - G4double B = 2.*muFinalMomentum*gMomentum*sintg*cospg; - G4double C = 2.*muFinalMomentum*gMomentum*costg - 2.*muMomentum*muFinalMomentum; - G4double absB = std::abs(B); - G4double t1interval = (1./(A + C + absB*mint3) - 1./(A + C + absB*maxt3))/absB; - G4double t1 = (-(A + C) + 1./(1./(A + C + absB*mint3) - absB*t1interval*randNumbs[0]))/absB; - G4double sint1 = std::sin(t1); - G4double cost1 = std::cos(t1); - - G4ThreeVector dirMuon; - dirMuon.set(sint1, 0., cost1); + G4LorentzVector gFourMomentum(dirGamma*gMomentum, gEnergy); G4double cost5 = -1. + 2.*randNumbs[6]; G4double phi5 = CLHEP::twopi*randNumbs[8]; @@ -187,10 +175,7 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, G4ThreeVector dirGamma; dirGamma.set(sint*cosp, sint*sinp, cost); - G4LorentzVector gFourMomentum(gEnergy, dirGamma*gMomentum); - - G4ThreeVector dirMuon; - dirMuon.set(sint3, 0., cost3); + G4LorentzVector gFourMomentum(dirGamma*gMomentum, gEnergy); G4double cost5 = -1. + 2.*randNumbs[6]; G4double phi5 = CLHEP::twopi*randNumbs[8]; @@ -233,17 +218,18 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, G4double pEnergy = muEnergy - muFEnergy - eEnergy; G4double pMomentum = std::sqrt(pEnergy*pEnergy - eMass*eMass); - G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFinalEnergy; - G4double B3 = -2.*muMomentum*muFinalMomentum; + G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFEnergy; + G4double B3 = -2.*std::sqrt(muEnergy*muEnergy - muMass*muMass)*muFMomentum; G4double cost3interval = G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3; + G4double expanCost3r6 = G4Exp(B3*cost3interval*randNumbs[5]); G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6; G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3)); G4ThreeVector muFinalMomentumVector(muFMomentum*sint3, 0., muFMomentum*cost3); - G4LorentzVector muFourMomentum(muMomentum, muMomentumVector); - muFinalFourMomentum.set(muFEnergy, muFinalMomentumVector); + G4LorentzVector muFourMomentum(muMomentumVector, muEnergy); + muFinalFourMomentum.set(muFinalMomentumVector, muFEnergy); G4LorentzVector auxVec1 = muFourMomentum - muFinalFourMomentum; G4double A5 = auxVec1.mag2() - 2.*eEnergy*(muEnergy - muFEnergy) + 2.*muMomentumVector[2]*eMomentum - 2.*muFMomentum*eMomentum*cost3; @@ -308,9 +294,10 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, G4double eEnergy = muEnergy - muFEnergy - pEnergy; G4double eMomentum = std::sqrt(eEnergy*eEnergy - eMass*eMass); - G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFinalEnergy; - G4double B3 = -2.*muMomentum*muFMomentum; + G4double A3 = -2.*muMass*muMass + 2.*muEnergy*muFEnergy; + G4double B3 = -2.*std::sqrt(muEnergy*muEnergy - muMass*muMass)*muFMomentum; G4double cost3interval = G4Log((A3 + B3*Cmax)/(A3 + B3*Cmin))/B3; + G4double expanCost3r6 = G4Exp(B3*cost3interval*randNumbs[5]); G4double cost3 = A3*(expanCost3r6 - 1.)/B3 + Cmin*expanCost3r6; G4double sint3 = std::sqrt((1. - cost3)*(1. + cost3)); @@ -319,8 +306,8 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, muFinalMomentumVector.set(muFMomentum*sint3*cosp3, muFMomentum*sint3*sinp3, muFMomentum*cost3); - G4LorentzVector muFourMomentum(muMomentum, muMomentumVector); - muFinalFourMomentum.set(muFEnergy, muFinalMomentumVector); + G4LorentzVector muFourMomentum(muMomentumVector, muEnergy); + muFinalFourMomentum.set(muFinalMomentumVector, muFEnergy); G4LorentzVector auxVec1 = muFourMomentum - muFinalFourMomentum; G4double A6 = auxVec1.mag2() - 2.*pEnergy*(muEnergy - muFEnergy) + 2.*muMomentumVector[2]*pMomentum - 2.*muFMomentum*pMomentum*cost3; @@ -360,7 +347,6 @@ G4RiGeAngularGenerator::Sample5DPairDirections(const G4DynamicParticle* dp, PhiRotation(dirElectron, phi3); PhiRotation(dirPositron, phi3); } - return muFinalFourMomentum; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -395,7 +381,8 @@ G4LorentzVector G4RiGeAngularGenerator::eDP2(G4double x1, G4double x2, } G4double QJM = std::sqrt(QJM2); - G4LorentzVector x6(std::sqrt(x2 + QJM2), QJM*sint*cosp, QJM*sint*sinp, QJM*x4); + + G4LorentzVector x6(QJM*sint*cosp, QJM*sint*sinp, QJM*x4, std::sqrt(x2 + QJM2)); return x6; } @@ -404,7 +391,7 @@ G4LorentzVector G4RiGeAngularGenerator::eDP2(G4double x1, G4double x2, G4LorentzVector G4RiGeAngularGenerator::pDP2(G4double x3, const G4LorentzVector& x6) { - G4LorentzVector x7(x3 + x6.vect().dot(x6.vect()), -x6.vect()); + G4LorentzVector x7(-x6.vect(), std::sqrt(x3 + x6.vect().dot(x6.vect()))); return x7; } diff --git a/source/processes/electromagnetic/muons/src/G4RiGeMuPairProductionModel.cc b/source/processes/electromagnetic/muons/src/G4RiGeMuPairProductionModel.cc index 8624a38d9a..1007014fb8 100644 --- a/source/processes/electromagnetic/muons/src/G4RiGeMuPairProductionModel.cc +++ b/source/processes/electromagnetic/muons/src/G4RiGeMuPairProductionModel.cc @@ -534,6 +534,7 @@ void G4RiGeMuPairProductionModel::SampleSecondaries(std::vectorGetKineticEnergy(); + G4double totEnergy = aDynamicParticle->GetTotalEnergy(); G4double particleMomentum = aDynamicParticle->GetTotalMomentum(); G4ThreeVector particleMomentumVector = aDynamicParticle->GetMomentum(); G4ThreeVector partDirection = aDynamicParticle->GetMomentumDirection(); @@ -660,7 +661,7 @@ void G4RiGeMuPairProductionModel::SampleSecondaries(std::vectorSample5DPairDirections(aDynamicParticle, eDirection, pDirection, gEnergy, Q2, gMomentum, particleFinalMomentum, particleFinalEnergy, randNumbs, W); - + */ // create G4DynamicParticle object for e+e- auto aParticle1 = new G4DynamicParticle(theElectron, eDirection, eEnergy); auto aParticle2 = new G4DynamicParticle(thePositron, pDirection, pEnergy); diff --git a/source/processes/electromagnetic/pii/History b/source/processes/electromagnetic/pii/History index 80f406e918..a15d78f8dd 100644 --- a/source/processes/electromagnetic/pii/History +++ b/source/processes/electromagnetic/pii/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-02-13 Gabriele Cosmo (empii-V11-03-00) +- Use "const G4String&" in G4hImpactIonisation::InitializeMe() to avoid + unnecessary copy. + ## 2023-08-29 Ben Morgan (empii-V11-01-00) - Fix Coverity warnings diff --git a/source/processes/electromagnetic/pii/src/G4hImpactIonisation.cc b/source/processes/electromagnetic/pii/src/G4hImpactIonisation.cc index a8c25a868a..a17605c46f 100644 --- a/source/processes/electromagnetic/pii/src/G4hImpactIonisation.cc +++ b/source/processes/electromagnetic/pii/src/G4hImpactIonisation.cc @@ -121,7 +121,7 @@ void G4hImpactIonisation::InitializeMe() eMinPixe = 1.* keV; eMaxPixe = 200. * MeV; - G4String defaultPixeModel("ecpssr"); + const G4String& defaultPixeModel("ecpssr"); modelK = defaultPixeModel; modelL = defaultPixeModel; modelM = defaultPixeModel; diff --git a/source/processes/electromagnetic/standard/History b/source/processes/electromagnetic/standard/History index 0d2ad1b855..f181657953 100644 --- a/source/processes/electromagnetic/standard/History +++ b/source/processes/electromagnetic/standard/History @@ -6,10 +6,33 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-07 Igor Semeniouk (emstand-V11-02-22) +## 2025-04-25 V.Ivanchenko (emstand-V11-03-06) +- G4LowPAIH2O - fixed Coverity warnings + +## 2025-04-23 V.Ivanchenko (emstand-V11-03-05) +- G4UrbanMscModel - L.Urban propose a small change for Opt3 case, which may + improve performance. Should not affect any result. + +## 2025-03-12 V.Ivanchenko (emstand-V11-03-04) +- G4LowPAIH2O - removed compilation warnings due to explicit types conversion + problems reported by J.Allison + +## 2025-03-11 V.Grichine (emstand-V11-03-03) +- G4LowPAIH2O class with G4LowDataH2O.hh data file for dE/dx in water for p and e-. + +## 2025-02-26 V.Ivanchenko (emstand-V11-03-02) +- G4UrbanMscModel - L.Urban propose cosmetic change for Opt3 case and updated + comments to the code. Should not affect any result. + +## 2025-02-07 Igor Semeniouk (emstand-V11-03-01) - G4OrePowellAtRestModel - Add missing decay plane rotation ( random x axis phi ) +## 2025-01-19 V.Ivanchenko (emstand-V11-03-00) +- G4eBremsstrahlungRelModel - This is a reversion of !4755 (merged just before the + release 11.3). This implementation needed for EM design toward parallel + initialisation of EM physics. + ## 2024-11-08 V.Ivanchenko (emstand-V11-02-21) - G4BraggModel - fixed problem of 4.12 MeV mu+ range reported in the Forum #12312. diff --git a/source/processes/electromagnetic/standard/include/G4LowDataH2O.hh b/source/processes/electromagnetic/standard/include/G4LowDataH2O.hh new file mode 100644 index 0000000000..d75641b8c6 --- /dev/null +++ b/source/processes/electromagnetic/standard/include/G4LowDataH2O.hh @@ -0,0 +1,554 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4LowDataH2O.hh -- header file +// +// GEANT 4 class header file --- Copyright CERN 1995 +// CERB Geneva Switzerland +// +// for information related to this code, please, contact +// CERN, CN Division, ASD Group +// +// Preparation of ionizing collision cross section according to Photo Absorption +// Ionization (PAI) model for simulation of ionization energy losses in very thin +// layers of water for low energy protons and electrons. +// +// Author: Vladimir.Grichine@cern.ch +// +// History: +// +// 2.12.24, V. Grichine: 1st version + +#ifndef G4LOWDATAH2O_HH +#define G4LOWDATAH2O_HH + +#include "G4LowPAIH2O.hh" + +// The data array size + +const G4int G4LowPAIH2O:: theBin = 1007; + +///////////////////////////////////////// +// +// Transfer energies in Geant4 units (MeV) + +const G4double G4LowPAIH2O::theEsum[1007] = { + +1.00084e-07, 1.00315e-07, 1.00778e-07, 1.01243e-07, 1.01711e-07, 1.01945e-07, +1.02416e-07, 1.02888e-07, 1.03363e-07, 1.0384e-07, 1.0408e-07, 1.0456e-07, +1.05043e-07, 1.05528e-07, 1.06015e-07, 1.06504e-07, 1.06996e-07, 1.07242e-07, +1.07737e-07, 1.08235e-07, 1.08734e-07, 1.09348e-07, 1.0974e-07, 1.10247e-07, +1.10756e-07, 1.11267e-07, 1.11781e-07, 1.12296e-07, 1.12815e-07, 1.13336e-07, +1.13859e-07, 1.14384e-07, 1.14912e-07, 1.15443e-07, 1.15975e-07, 1.16511e-07, +1.17049e-07, 1.17589e-07, 1.18132e-07, 1.18677e-07, 1.19225e-07, 1.19775e-07, +1.20328e-07, 1.20883e-07, 1.21441e-07, 1.22283e-07, 1.22786e-07, 1.23414e-07, +1.23984e-07, 1.24557e-07, 1.25131e-07, 1.25999e-07, 1.2658e-07, 1.27165e-07, +1.27752e-07, 1.28341e-07, 1.29231e-07, 1.29827e-07, 1.30427e-07, 1.31331e-07, +1.31937e-07, 1.32546e-07, 1.33465e-07, 1.34081e-07, 1.347e-07, 1.35633e-07, +1.36259e-07, 1.36888e-07, 1.37837e-07, 1.38473e-07, 1.39433e-07, 1.40077e-07, +1.41048e-07, 1.41699e-07, 1.42353e-07, 1.4334e-07, 1.44333e-07, 1.44999e-07, +1.46005e-07, 1.46678e-07, 1.47695e-07, 1.48377e-07, 1.49405e-07, 1.5044e-07, +1.51135e-07, 1.52183e-07, 1.53238e-07, 1.53945e-07, 1.55012e-07, 1.56087e-07, +1.56807e-07, 1.57894e-07, 1.58989e-07, 1.60091e-07, 1.61201e-07, 1.61945e-07, +1.63067e-07, 1.64197e-07, 1.65336e-07, 1.66482e-07, 1.67636e-07, 1.68798e-07, +1.69968e-07, 1.71146e-07, 1.72332e-07, 1.73527e-07, 1.74729e-07, 1.75941e-07, +1.7716e-07, 1.78388e-07, 1.79625e-07, 1.8087e-07, 1.82124e-07, 1.83809e-07, +1.85083e-07, 1.86366e-07, 1.87658e-07, 1.89394e-07, 1.90707e-07, 1.92029e-07, +1.93806e-07, 1.95149e-07, 1.96955e-07, 1.9832e-07, 2.00155e-07, 2.01542e-07, +2.03407e-07, 2.04817e-07, 2.06712e-07, 2.08145e-07, 2.10071e-07, 2.12015e-07, +2.13977e-07, 2.1546e-07, 2.17453e-07, 2.19466e-07, 2.21496e-07, 2.23546e-07, +2.25614e-07, 2.27702e-07, 2.29809e-07, 2.31935e-07, 2.34081e-07, 2.36248e-07, +2.38433e-07, 2.40639e-07, 2.42866e-07, 2.45678e-07, 2.47951e-07, 2.50245e-07, +2.53143e-07, 2.55485e-07, 2.58444e-07, 2.60835e-07, 2.63856e-07, 2.66911e-07, +2.69381e-07, 2.725e-07, 2.75655e-07, 2.78847e-07, 2.82076e-07, 2.85342e-07, +2.88646e-07, 2.91989e-07, 2.9537e-07, 2.9879e-07, 3.0225e-07, 3.06455e-07, +3.10003e-07, 3.13593e-07, 3.17956e-07, 3.22379e-07, 3.26112e-07, 3.30648e-07, +3.35248e-07, 3.39912e-07, 3.44641e-07, 3.49435e-07, 3.54296e-07, 3.59225e-07, +3.65062e-07, 3.7014e-07, 3.75289e-07, 3.81387e-07, 3.87584e-07, 3.93882e-07, +4.00282e-07, 4.06786e-07, 4.13396e-07, 4.15304e-07, 4.16262e-07, 4.18183e-07, +4.19147e-07, 4.20113e-07, 4.22052e-07, 4.23025e-07, 4.24e-07, 4.24978e-07, +4.2694e-07, 4.27924e-07, 4.2891e-07, 4.29899e-07, 4.31883e-07, 4.32879e-07, +4.33877e-07, 4.34877e-07, 4.36884e-07, 4.37891e-07, 4.38901e-07, 4.39912e-07, +4.40927e-07, 4.42962e-07, 4.43983e-07, 4.45006e-07, 4.46032e-07, 4.48091e-07, +4.49124e-07, 4.50159e-07, 4.51197e-07, 4.52237e-07, 4.54325e-07, 4.55372e-07, +4.56422e-07, 4.57474e-07, 4.58528e-07, 4.59585e-07, 4.61707e-07, 4.62771e-07, +4.63838e-07, 4.64907e-07, 4.65979e-07, 4.67053e-07, 4.6813e-07, 4.70291e-07, +4.71375e-07, 4.72461e-07, 4.7355e-07, 4.74642e-07, 4.75736e-07, 4.77932e-07, +4.79034e-07, 4.80138e-07, 4.81245e-07, 4.82355e-07, 4.83467e-07, 4.85698e-07, +4.8794e-07, 4.90192e-07, 4.92455e-07, 4.9359e-07, 4.95868e-07, 4.98157e-07, +5.00456e-07, 5.0161e-07, 5.03926e-07, 5.06251e-07, 5.08588e-07, 5.09761e-07, +5.12114e-07, 5.14477e-07, 5.16852e-07, 5.19238e-07, 5.20435e-07, 5.22837e-07, +5.2525e-07, 5.27675e-07, 5.3011e-07, 5.32557e-07, 5.35015e-07, 5.36249e-07, +5.38724e-07, 5.41211e-07, 5.43709e-07, 5.46218e-07, 5.4874e-07, 5.51273e-07, +5.53817e-07, 5.53894e-07, 5.58941e-07, 5.61521e-07, 5.64113e-07, 5.66717e-07, +5.69333e-07, 5.71961e-07, 5.74601e-07, 5.77253e-07, 5.79918e-07, 5.82594e-07, +5.85284e-07, 5.87985e-07, 5.90699e-07, 5.93426e-07, 5.96165e-07, 5.98917e-07, +6.01681e-07, 6.04458e-07, 6.07248e-07, 6.11458e-07, 6.1428e-07, 6.17115e-07, +6.19964e-07, 6.22825e-07, 6.257e-07, 6.30037e-07, 6.32945e-07, 6.35867e-07, +6.38802e-07, 6.41751e-07, 6.46199e-07, 6.49182e-07, 6.52178e-07, 6.56699e-07, +6.5973e-07, 6.62775e-07, 6.65835e-07, 6.7045e-07, 6.73545e-07, 6.78213e-07, +6.81344e-07, 6.84489e-07, 6.89233e-07, 6.92415e-07, 6.97214e-07, 7.00433e-07, +7.03666e-07, 7.08543e-07, 7.11814e-07, 7.16748e-07, 7.20056e-07, 7.25047e-07, +7.30073e-07, 7.33443e-07, 7.38527e-07, 7.41936e-07, 7.47079e-07, 7.52257e-07, +7.55729e-07, 7.60968e-07, 7.6448e-07, 7.69779e-07, 7.75115e-07, 7.80488e-07, +7.84091e-07, 7.89526e-07, 7.94999e-07, 8.00509e-07, 8.04204e-07, 8.09779e-07, +8.15392e-07, 8.21044e-07, 8.26735e-07, 8.32465e-07, 8.38236e-07, 8.44046e-07, +8.49897e-07, 8.55788e-07, 8.6172e-07, 8.67694e-07, 8.73708e-07, 8.79764e-07, +8.85862e-07, 8.92003e-07, 8.98186e-07, 9.04412e-07, 9.10681e-07, 9.19108e-07, +9.25478e-07, 9.31894e-07, 9.38353e-07, 9.47036e-07, 9.536e-07, 9.6021e-07, +9.69095e-07, 9.75812e-07, 9.84842e-07, 9.91668e-07, 1.00084e-06, 1.00778e-06, +1.01711e-06, 1.02416e-06, 1.03363e-06, 1.0408e-06, 1.05043e-06, 1.06015e-06, +1.06996e-06, 1.07737e-06, 1.08734e-06, 1.0974e-06, 1.10756e-06, 1.11781e-06, +1.12815e-06, 1.13859e-06, 1.14912e-06, 1.15976e-06, 1.17049e-06, 1.18132e-06, +1.19225e-06, 1.20328e-06, 1.21441e-06, 1.22847e-06, 1.23984e-06, 1.24557e-06, +1.25131e-06, 1.25999e-06, 1.2658e-06, 1.27165e-06, 1.27752e-06, 1.28341e-06, +1.29231e-06, 1.29827e-06, 1.30427e-06, 1.31331e-06, 1.31937e-06, 1.32546e-06, +1.33465e-06, 1.34081e-06, 1.347e-06, 1.35633e-06, 1.36259e-06, 1.36888e-06, +1.37837e-06, 1.38473e-06, 1.39433e-06, 1.40077e-06, 1.41048e-06, 1.41699e-06, +1.42353e-06, 1.4334e-06, 1.44333e-06, 1.44999e-06, 1.46004e-06, 1.46678e-06, +1.47695e-06, 1.48377e-06, 1.49405e-06, 1.50441e-06, 1.51129e-06, 1.52183e-06, +1.53238e-06, 1.53945e-06, 1.55012e-06, 1.56087e-06, 1.56807e-06, 1.57894e-06, +1.58989e-06, 1.60091e-06, 1.612e-06, 1.61945e-06, 1.63067e-06, 1.64197e-06, +1.65336e-06, 1.66482e-06, 1.67636e-06, 1.68798e-06, 1.69968e-06, 1.71146e-06, +1.72332e-06, 1.73527e-06, 1.7473e-06, 1.75941e-06, 1.7716e-06, 1.78388e-06, +1.79625e-06, 1.8087e-06, 1.82124e-06, 1.83809e-06, 1.85083e-06, 1.86366e-06, +1.87658e-06, 1.89394e-06, 1.90707e-06, 1.92029e-06, 1.93806e-06, 1.95149e-06, +1.96955e-06, 1.9832e-06, 2.00155e-06, 2.01542e-06, 2.03407e-06, 2.04817e-06, +2.06712e-06, 2.08145e-06, 2.10071e-06, 2.12015e-06, 2.13977e-06, 2.1546e-06, +2.17447e-06, 2.19465e-06, 2.21496e-06, 2.23546e-06, 2.25614e-06, 2.27702e-06, +2.29809e-06, 2.31935e-06, 2.34081e-06, 2.36247e-06, 2.38433e-06, 2.40639e-06, +2.42866e-06, 2.45678e-06, 2.47951e-06, 2.50245e-06, 2.53143e-06, 2.55485e-06, +2.58444e-06, 2.60835e-06, 2.63856e-06, 2.66911e-06, 2.69381e-06, 2.725e-06, +2.75655e-06, 2.78847e-06, 2.82076e-06, 2.85342e-06, 2.88646e-06, 2.91989e-06, +2.9537e-06, 2.9879e-06, 3.0225e-06, 3.06455e-06, 3.10003e-06, 3.13593e-06, +3.17955e-06, 3.22379e-06, 3.26112e-06, 3.30648e-06, 3.35248e-06, 3.39912e-06, +3.4464e-06, 3.49435e-06, 3.54296e-06, 3.59225e-06, 3.65062e-06, 3.7014e-06, +3.75289e-06, 3.81387e-06, 3.87584e-06, 3.93882e-06, 4.00282e-06, 4.06786e-06, +4.13396e-06, 4.20113e-06, 4.27924e-06, 4.34877e-06, 4.42962e-06, 4.51197e-06, +4.59585e-06, 4.6813e-06, 4.76833e-06, 4.85698e-06, 4.95868e-06, 5.06252e-06, +5.16852e-06, 5.27669e-06, 5.38724e-06, 5.51272e-06, 5.64113e-06, 5.77253e-06, +5.90699e-06, 6.04458e-06, 6.19964e-06, 6.35867e-06, 6.52178e-06, 6.7045e-06, +6.89233e-06, 7.08543e-06, 7.11814e-06, 7.20056e-06, 7.30073e-06, 7.38527e-06, +7.47079e-06, 7.55729e-06, 7.6448e-06, 7.75115e-06, 7.84091e-06, 7.94999e-06, +8.04204e-06, 8.15392e-06, 8.26735e-06, 8.38236e-06, 8.49897e-06, 8.6172e-06, +8.73708e-06, 8.85863e-06, 8.98186e-06, 9.10681e-06, 9.25478e-06, 9.38353e-06, +9.536e-06, 9.69095e-06, 9.84841e-06, 1.00084e-05, 1.01711e-05, 1.03363e-05, +1.05043e-05, 1.06996e-05, 1.08734e-05, 1.10756e-05, 1.12815e-05, 1.14912e-05, +1.17049e-05, 1.19225e-05, 1.21441e-05, 1.23984e-05, 1.2658e-05, 1.29231e-05, +1.31937e-05, 1.347e-05, 1.37837e-05, 1.41048e-05, 1.44333e-05, 1.47695e-05, +1.51135e-05, 1.55012e-05, 1.58989e-05, 1.63067e-05, 1.67636e-05, 1.72332e-05, +1.7654e-05, 1.82124e-05, 1.87658e-05, 1.93806e-05, 2.00155e-05, 2.06712e-05, +2.13977e-05, 2.18265e-05, 2.24077e-05, 2.30044e-05, 2.3617e-05, 2.42459e-05, +2.48915e-05, 2.55543e-05, 2.62348e-05, 2.69334e-05, 2.76507e-05, 2.8387e-05, +2.91429e-05, 2.99189e-05, 3.07157e-05, 3.15336e-05, 3.23733e-05, 3.32354e-05, +3.41204e-05, 3.5029e-05, 3.59618e-05, 3.69194e-05, 3.79025e-05, 3.89119e-05, +3.99481e-05, 4.10118e-05, 4.21039e-05, 4.32251e-05, 4.43762e-05, 4.55579e-05, +4.6771e-05, 4.80165e-05, 4.92951e-05, 5.06078e-05, 5.19555e-05, 5.3339e-05, +5.47594e-05, 5.62176e-05, 5.77146e-05, 5.92515e-05, 6.08293e-05, 6.24491e-05, +6.41121e-05, 6.58193e-05, 6.75721e-05, 6.93714e-05, 7.12187e-05, 7.31152e-05, +7.50622e-05, 7.70611e-05, 7.91131e-05, 8.12198e-05, 8.33827e-05, 8.56031e-05, +8.78826e-05, 9.02228e-05, 9.26254e-05, 9.50919e-05, 9.76241e-05, 0.000100224, +0.000102893, 0.000105633, 0.000108445, 0.000111333, 0.000114298, 0.000117342, +0.000120466, 0.000123674, 0.000126968, 0.000130349, 0.00013382, 0.000137383, +0.000141042, 0.000144797, 0.000148653, 0.000152612, 0.000156676, 0.000160848, +0.000165131, 0.000169528, 0.000174043, 0.000178677, 0.000183435, 0.00018832, +0.000193335, 0.000198483, 0.000203769, 0.000209195, 0.000214765, 0.000220484, +0.000226356, 0.000232383, 0.000238572, 0.000244925, 0.000251447, 0.000258143, +0.000265017, 0.000272074, 0.000279319, 0.000286757, 0.000294393, 0.000302232, +0.000310281, 0.000318543, 0.000327026, 0.000335734, 0.000344674, 0.000353853, +0.000363275, 0.000372949, 0.00038288, 0.000393076, 0.000403544, 0.00041429, +0.000425322, 0.000436648, 0.000448275, 0.000460212, 0.000472467, 0.000485049, +0.000497965, 0.000511226, 0.000524839, 0.000538815, 0.000553163, 0.000567894, +0.000583016, 0.000598541, 0.00061448, 0.000630843, 0.000647642, 0.000664888, +0.000682593, 0.00070077, 0.000719431, 0.000738589, 0.000758257, 0.000778448, +0.000799178, 0.000820459, 0.000842307, 0.000864737, 0.000887764, 0.000911405, +0.000935675, 0.000960591, 0.000986171, 0.00101243, 0.00103939, 0.00106707, +0.00109548, 0.00112466, 0.0011546, 0.00118535, 0.00121692, 0.00124932, +0.00128259, 0.00131674, 0.00135181, 0.0013878, 0.00142476, 0.0014627, 0.00150165, +0.00154164, 0.00158269, 0.00162484, 0.00166811, 0.00171253, 0.00175813, +0.00180495, 0.00185301, 0.00190235, 0.00195301, 0.00200502, 0.00205841, +0.00211322, 0.0021695, 0.00222727, 0.00228658, 0.00234747, 0.00240998, +0.00247416, 0.00254004, 0.00260768, 0.00267712, 0.00274841, 0.0028216, +0.00289674, 0.00297387, 0.00305306, 0.00313436, 0.00321783, 0.00330352, +0.00339149, 0.0034818, 0.00357452, 0.0036697, 0.00376742, 0.00386775, 0.00397074, +0.00407648, 0.00418503, 0.00429648, 0.00441089, 0.00452835, 0.00464893, +0.00477273, 0.00489982, 0.0050303, 0.00516425, 0.00530177, 0.00544295, +0.00558789, 0.00573669, 0.00588946, 0.00604629, 0.0062073, 0.00637259, +0.00654229, 0.0067165, 0.00689536, 0.00707898, 0.00726748, 0.00746101, +0.00765969, 0.00786366, 0.00807306, 0.00828804, 0.00850874, 0.00873532, +0.00896794, 0.00920675, 0.00945191, 0.00970361, 0.00996201, 0.0102273, +0.0104996, 0.0107792, 0.0110663, 0.0113609, 0.0116635, 0.0119741, 0.0122929, +0.0126203, 0.0129564, 0.0133014, 0.0136556, 0.0140192, 0.0143925, 0.0147758, +0.0151692, 0.0155732, 0.0159879, 0.0164136, 0.0168507, 0.0172994, 0.0177601, +0.018233, 0.0187186, 0.019217, 0.0197288, 0.0202541, 0.0207935, 0.0213472, +0.0219156, 0.0224992, 0.0230984, 0.0237135, 0.0243449, 0.0249932, 0.0256588, +0.026342, 0.0270435, 0.0277636, 0.028503, 0.029262, 0.0300412, 0.0308412, +0.0316624, 0.0325056, 0.0333712, 0.0342598, 0.0351721, 0.0361087, 0.0370703, +0.0380574, 0.0390709, 0.0401113, 0.0411794, 0.042276, 0.0434017, 0.0445575, +0.045744, 0.0469622, 0.0482127, 0.0494966, 0.0508146, 0.0521678, 0.053557, +0.0549831, 0.0564473, 0.0579504, 0.0594936, 0.0610779, 0.0627043, 0.0643741, +0.0660883, 0.0678482, 0.0696549, 0.0715097, 0.073414, 0.0753689, 0.0773759, +0.0794364, 0.0815517, 0.0837234, 0.0859528, 0.0882417, 0.0905915, 0.0930039, +0.0954805, 0.098023, 0.100633, 0.103313, 0.106064, 0.108889, 0.111788, 0.114765, +0.117821, 0.120959, 0.12418, 0.127486, 0.130881, 0.134366, 0.137945, 0.141618, +0.145389, 0.149261, 0.153235, 0.157316, 0.161505, 0.165806, 0.170221, 0.174754, +0.179407, 0.184185, 0.18909, 0.194125, 0.199294, 0.204601, 0.21005, 0.215643, +0.221385, 0.227281, 0.233333, 0.239546, 0.245925, 0.252474, 0.259197, 0.266099, +0.273185, 0.28046, 0.287929, 0.295596, 0.303467, 0.311549, 0.319845, 0.328362, +0.337106, 0.346083, 0.355299, 0.36476, 0.374473, 0.384445, 0.394682, 0.405192, +0.415982, 0.42706, 0.438432, 0.450107, 0.462093, 0.474398, 0.487031 + +}; + +//////////////////////////////////////////////////// +// +// Energy Loss Fuction (ELF) for water + +const G4double G4LowPAIH2O::theELFsum[1007] = { + +0.343701, 0.338322, 0.331699, 0.32522, 0.32051, 0.313544, 0.304649, 0.297559, +0.289704, 0.282644, 0.274489, 0.264361, 0.255236, 0.245748, 0.236871, 0.228919, +0.221906, 0.214845, 0.206271, 0.198028, 0.190106, 0.182071, 0.173805, 0.166123, +0.159188, 0.151848, 0.14468, 0.138038, 0.132675, 0.127068, 0.121363, 0.116174, +0.110695, 0.10539, 0.100535, 0.0958877, 0.0916441, 0.0878014, 0.0841337, +0.0806099, 0.0774056, 0.0731865, 0.0718562, 0.0685493, 0.065072, 0.0645778, +0.0627131, 0.0611187, 0.0595864, 0.0582351, 0.0570597, 0.0556476, 0.0545836, +0.0535382, 0.0526438, 0.051649, 0.0505599, 0.0496273, 0.0489336, 0.0479354, +0.0472902, 0.0466596, 0.0457391, 0.0451427, 0.0444471, 0.0437851, 0.0432295, +0.0426777, 0.0419665, 0.0414367, 0.0408504, 0.0403443, 0.0397835, 0.0392967, +0.0389018, 0.0383693, 0.0378514, 0.0374829, 0.0369796, 0.0367081, 0.0362265, +0.0358779, 0.0355725, 0.035119, 0.0348648, 0.0344976, 0.0341371, 0.0338999, +0.0335476, 0.0332797, 0.0330546, 0.0327189, 0.0323864, 0.032056, 0.0318024, +0.0316622, 0.0313428, 0.031206, 0.0309285, 0.0307598, 0.0305957, 0.0303611, +0.0301941, 0.0301014, 0.0298693, 0.0297723, 0.0296079, 0.0294363, 0.029396, +0.0294251, 0.0293818, 0.0294662, 0.0296168, 0.0297788, 0.0301786, 0.0307169, +0.0315479, 0.0327722, 0.0342432, 0.036205, 0.0384716, 0.0420536, 0.0476498, +0.0574523, 0.0721343, 0.106124, 0.117998, 0.120116, 0.109687, 0.0915872, +0.066625, 0.0458, 0.0343237, 0.0254945, 0.0204653, 0.0164614, 0.0138845, +0.0121716, 0.0110882, 0.0102305, 0.0153323, 0.00922561, 0.00907538, 0.00912068, +0.0092554, 0.00966081, 0.0100684, 0.0106331, 0.0111436, 0.0117403, 0.0122232, +0.0128286, 0.0133119, 0.013764, 0.0139136, 0.0137185, 0.0130353, 0.012035, +0.0109236, 0.0100244, 0.00902829, 0.00812679, 0.00734715, 0.00657945, 0.00593111, +0.00533323, 0.0047942, 0.00429417, 0.00387625, 0.00348138, 0.0031574, 0.00290842, +0.00278184, 0.00275416, 0.00287829, 0.00334779, 0.00401539, 0.00521023, +0.00708225, 0.0097644, 0.0140521, 0.0183347, 0.0250544, 0.0399675, 0.0587405, +0.0840311, 0.121028, 0.160966, 0.203027, 0.211079, 0.217312, 0.227821, 0.235095, +0.24169, 0.252298, 0.258592, 0.262752, 0.265536, 0.276661, 0.275552, 0.274533, +0.269661, 0.270219, 0.265797, 0.257128, 0.245891, 0.23504, 0.223146, 0.208363, +0.193196, 0.17773, 0.164163, 0.153071, 0.141107, 0.126677, 0.113678, 0.101827, +0.0886036, 0.0743801, 0.0618476, 0.0499254, 0.0367243, 0.0261855, 0.0232968, +0.0202302, 0.0176638, 0.0151418, 0.0124048, 0.0100069, 0.00849212, 0.00721195, +0.00611224, 0.00488681, 0.00485658, 0.00444412, 0.00363214, 0.00325423, +0.00293729, 0.0027827, 0.00264948, 0.00258351, 0.00253143, 0.00246953, +0.00243187, 0.00237879, 0.00223043, 0.00214095, 0.00207511, 0.00203558, +0.00199335, 0.00192966, 0.00183032, 0.00172071, 0.00158785, 0.00147243, +0.0013439, 0.00124105, 0.00114029, 0.001058, 0.000975114, 0.000892649, +0.000830566, 0.000773989, 0.000723575, 0.000665725, 0.000616754, 0.000579494, +0.000523586, 0.00049199, 0.000472557, 0.000449239, 0.000431062, 0.000409861, +0.000388832, 0.000370606, 0.000354888, 0.000338291, 0.000326973, 0.000321925, +0.000319208, 0.000317914, 0.000318873, 0.000322065, 0.000328313, 0.000335467, +0.000345962, 0.000356796, 0.000369682, 0.000388372, 0.000408962, 0.00043066, +0.000452471, 0.000489845, 0.000529109, 0.000572854, 0.000621666, 0.000680914, +0.000740288, 0.000816467, 0.000908885, 0.00100946, 0.00114474, 0.00128348, +0.00141561, 0.00156923, 0.00168858, 0.00174342, 0.00175514, 0.00166801, +0.0015318, 0.00105924, 0.000840322, 0.000657855, 0.000473997, 0.00029131, +0.000168926, 0.000140695, 0.000128445, 0.000124845, 0.000123977, 0.000122763, +0.00012008, 0.00010938, 0.000100936, 9.46588e-05, 8.99595e-05, 8.5502e-05, +7.99431e-05, 7.54954e-05, 7.22003e-05, 6.93847e-05, 6.79397e-05, 6.70749e-05, +6.62253e-05, 6.61113e-05, 6.77887e-05, 7.05426e-05, 7.2218e-05, 7.40878e-05, +7.84424e-05, 8.32266e-05, 8.84459e-05, 9.52342e-05, 0.00010135, 0.000110116, +0.000119698, 0.000127913, 0.000142122, 0.000154316, 0.000173446, 0.000199033, +0.000235344, 0.000266991, 0.000299439, 0.00031852, 0.000321345, 0.000320485, +0.00031236, 0.000282171, 0.000224058, 0.000134947, 9.34181e-05, 6.87239e-05, +5.10966e-05, 3.96443e-05, 3.55887e-05, 2.50008e-05, 1.97753e-05, 1.67933e-05, +1.43874e-05, 1.22857e-05, 1.07103e-05, 9.9882e-06, 9.55529e-06, 9.45036e-06, +9.63188e-06, 9.96535e-06, 1.01485e-05, 1.03076e-05, 1.0405e-05, 1.04779e-05, +1.03146e-05, 1.01275e-05, 9.76685e-06, 9.32094e-06, 8.1128e-06, 5.18542e-06, +3.36972e-06, 2.28825e-06, 1.77385e-06, 1.48604e-06, 1.30301e-06, 1.1547e-06, +1.09367e-06, 1.128e-06, 1.23206e-06, 1.46642e-06, 1.73534e-06, 2.03945e-06, +2.32915e-06, 2.59852e-06, 2.71171e-06, 2.81681e-06, 2.88823e-06, 2.95867e-06, +3.01136e-06, 3.02957e-06, 2.99639e-06, 2.90383e-06, 2.75796e-06, 2.53457e-06, +2.20994e-06, 1.87411e-06, 1.52972e-06, 1.18165e-06, 9.14966e-07, 7.1684e-07, +5.77823e-07, 4.91715e-07, 4.44251e-07, 4.19278e-07, 3.98474e-07, 3.79573e-07, +3.6493e-07, 3.49207e-07, 3.36684e-07, 3.22787e-07, 3.05344e-07, 2.88179e-07, +2.71379e-07, 2.52029e-07, 2.31401e-07, 2.11463e-07, 1.92818e-07, 1.75395e-07, +1.56274e-07, 1.39251e-07, 1.24357e-07, 1.14166e-07, 1.09005e-07, 1.07229e-07, +1.07939e-07, 1.09923e-07, 1.14802e-07, 1.20729e-07, 1.2667e-07, 1.30778e-07, +1.34412e-07, 1.353e-07, 1.35255e-07, 1.33352e-07, 1.30877e-07, 1.24656e-07, +1.1523e-07, 9.82685e-08, 7.80301e-08, 6.22455e-08, 5.11626e-08, 4.26378e-08, +3.49651e-08, 2.85412e-08, 2.52526e-08, 2.26017e-08, 2.10365e-08, 2.03456e-08, +1.85169e-08, 1.784e-08, 1.72669e-08, 1.64828e-08, 1.50933e-08, 1.42117e-08, +1.36272e-08, 1.3309e-08, 1.31507e-08, 1.34033e-08, 1.24588e-08, 1.1836e-08, +1.1246e-08, 1.04646e-08, 9.5612e-09, 8.13265e-09, 6.5166e-09, 5.36704e-09, +4.39996e-09, 3.7338e-09, 3.23547e-09, 2.88829e-09, 2.63234e-09, 2.41013e-09, +2.23222e-09, 2.04846e-09, 1.90159e-09, 1.75712e-09, 1.57936e-09, 1.46947e-09, +1.37036e-09, 1.31071e-09, 1.21947e-09, 1.05641e-09, 8.98271e-10, 7.69237e-10, +6.52693e-10, 6.09908e-10, 5.94159e-10, 5.8809e-10, 5.80861e-10, 6.03393e-10, +6.19614e-10, 6.27668e-10, 6.43036e-10, 6.66392e-10, 7.14854e-10, 7.68705e-10, +8.35919e-10, 8.92526e-10, 9.57347e-10, 1.02921e-09, 1.09379e-09, 1.1597e-09, +1.21236e-09, 1.28534e-09, 1.35021e-09, 1.42768e-09, 1.48883e-09, 1.56739e-09, +1.63815e-09, 1.70417e-09, 1.78093e-09, 1.85677e-09, 1.93572e-09, 2.01793e-09, +2.1132e-09, 2.19675e-09, 2.28431e-09, 2.35885e-09, 2.42877e-09, 2.50647e-09, +2.60432e-09, 2.76878e-09, 2.97722e-09, 3.21569e-09, 3.40185e-09, 3.68834e-09, +4.14105e-09, 4.40767e-09, 4.77438e-09, 5.17213e-09, 5.58864e-09, 5.96795e-09, +6.38569e-09, 6.85652e-09, 7.24103e-09, 7.60813e-09, 7.70074e-09, 7.84358e-09, +8.16024e-09, 8.84067e-09, 1.37338e-08, 2.60346e-08, 4.4736e-08, 7.19727e-08, +1.18248e-07, 2.25675e-07, 7.52606e-07, 3.45946e-05, 0.000184565, 0.000635798, +0.00103903, 0.0019317, 0.0182683, 0.0322752, 0.0456558, 0.0590582, 0.0728399, +0.0887233, 0.105449, 0.120398, 0.137241, 0.147511, 0.150233, 0.144037, 0.133044, +0.119254, 0.102717, 0.0833649, 0.0724089, 0.073295, 0.085751, 0.105138, 0.125623, +0.143651, 0.15568, 0.163681, 0.170532, 0.176964, 0.183206, 0.190715, 0.199072, +0.206747, 0.214796, 0.224665, 0.235198, 0.247949, 0.261726, 0.278921, 0.299982, +0.324028, 0.349266, 0.377322, 0.406436, 0.438649, 0.470931, 0.498468, 0.524826, +0.548057, 0.567545, 0.58861, 0.623154, 0.745122, 0.731576, 0.795212, 0.864073, +0.916613, 0.925369, 0.899703, 0.244356, 0.252615, 0.261018, 0.269569, 0.27827, +0.28712, 0.296119, 0.305263, 0.31455, 0.323972, 0.333522, 0.343189, 0.35296, +0.362819, 0.372747, 0.382722, 0.392719, 0.402707, 0.412654, 0.422523, 0.43227, +0.44185, 0.451211, 0.460298, 0.46905, 0.477403, 0.48529, 0.492639, 0.499376, +0.504367, 0.509777, 0.514929, 0.518523, 0.521151, 0.522737, 0.523212, 0.522524, +0.520632, 0.517512, 0.513156, 0.507572, 0.500784, 0.492833, 0.483774, 0.473678, +0.462625, 0.450709, 0.438027, 0.424686, 0.410794, 0.39646, 0.381793, 0.366898, +0.351875, 0.336819, 0.321818, 0.306951, 0.292288, 0.272404, 0.258131, 0.244245, +0.230786, 0.217783, 0.205262, 0.193237, 0.18172, 0.170717, 0.160228, 0.15025, +0.140775, 0.131796, 0.123299, 0.11527, 0.107696, 0.100558, 0.0938403, 0.0875248, +0.0815935, 0.0760284, 0.0708116, 0.0659252, 0.0613519, 0.0570747, 0.0530771, +0.0493433, 0.0458578, 0.0426059, 0.0395735, 0.0367473, 0.0341144, 0.0316626, +0.0293804, 0.0272569, 0.0252818, 0.0234452, 0.0217382, 0.0201519, 0.0186783, +0.0173098, 0.0160392, 0.0148597, 0.0137651, 0.0127495, 0.0118075, 0.0109337, +0.0101236, 0.00937242, 0.00867615, 0.00803086, 0.00743288, 0.00687884, +0.00636558, 0.00589016, 0.00544984, 0.00504208, 0.00466452, 0.00431495, +0.00399133, 0.00369177, 0.0034145, 0.00315789, 0.00292042, 0.00336515, +0.00310903, 0.00287178, 0.0026521, 0.00244876, 0.00226062, 0.00208661, +0.00192571, 0.00177698, 0.00163954, 0.00151256, 0.00139527, 0.00128696, +0.00118696, 0.00109464, 0.00100944, 0.000930809, 0.000858257, 0.000791323, +0.000729578, 0.000672625, 0.000620099, 0.000571659, 0.000526992, 0.000485805, +0.000447831, 0.000412821, 0.000380545, 0.000350791, 0.000323363, 0.000298079, +0.000274774, 0.000253293, 0.000233492, 0.000215242, 0.000198421, 0.000182917, +0.000168626, 0.000155455, 0.000143316, 0.000132126, 0.000121813, 0.000112308, +0.000103546, 9.547e-05, 8.8026e-05, 8.11643e-05, 7.48394e-05, 6.90091e-05, +6.36347e-05, 5.86803e-05, 5.4113e-05, 4.99025e-05, 4.60209e-05, 4.24422e-05, +3.91429e-05, 3.6101e-05, 3.32964e-05, 3.07105e-05, 2.83261e-05, 2.61275e-05, +2.41002e-05, 2.22307e-05, 2.05068e-05, 1.8917e-05, 1.74509e-05, 1.60987e-05, +1.48518e-05, 1.37016e-05, 1.26409e-05, 1.16625e-05, 1.07601e-05, 9.92771e-06, +9.1599e-06, 8.45163e-06, 7.79829e-06, 7.19558e-06, 6.63956e-06, 6.12673e-06, +5.65369e-06, 5.21733e-06, 4.81479e-06, 4.44345e-06, 4.10087e-06, 3.78481e-06, +3.49321e-06, 3.22417e-06, 2.97593e-06, 2.74688e-06, 2.53553e-06, 2.34051e-06, +2.16054e-06, 1.99446e-06, 1.8412e-06, 1.69976e-06, 1.56922e-06, 1.44874e-06, +1.33754e-06, 1.23491e-06, 1.14018e-06, 1.05274e-06, 9.72031e-07, 8.97527e-07, +8.28751e-07, 7.65262e-07, 7.06652e-07, 6.52544e-07, 6.02591e-07, 5.56473e-07, +5.13895e-07, 4.74583e-07, 4.38287e-07, 4.04775e-07, 3.73831e-07, 3.45259e-07, +3.18877e-07, 2.94515e-07, 2.7202e-07, 2.51246e-07, 2.32063e-07, 2.14348e-07, +1.97988e-07, 1.8288e-07, 1.68927e-07, 1.56041e-07, 1.4414e-07, 1.33148e-07, +1.22997e-07, 1.13621e-07, 1.04961e-07, 9.69623e-08, 8.95744e-08, 8.27505e-08, +7.64473e-08, 7.06252e-08, 6.52472e-08, 6.02795e-08, 5.56907e-08, 5.14518e-08, +4.75361e-08, 4.39188e-08, 4.05772e-08, 3.74902e-08, 3.46383e-08, 3.20037e-08, +2.95698e-08, 2.73212e-08, 2.52438e-08, 2.33245e-08, 2.15513e-08, 1.99131e-08, +1.83995e-08, 1.70011e-08, 1.5709e-08, 1.45153e-08, 1.34123e-08, 1.23933e-08, +1.14517e-08, 1.05817e-08, 9.77786e-09, 9.03513e-09, 8.34886e-09, 7.71475e-09, +7.12884e-09, 6.58746e-09, 6.08722e-09, 5.62498e-09, 5.19787e-09, 4.80321e-09, +4.43853e-09, 4.10156e-09, 3.79018e-09, 3.50245e-09, 3.23657e-09, 2.99089e-09, +2.76387e-09, 2.55408e-09, 2.36023e-09, 2.18109e-09, 2.01556e-09, 1.8626e-09, +1.72125e-09, 1.59062e-09, 1.46992e-09, 1.35838e-09, 1.2553e-09, 1.16005e-09, +1.07203e-09, 9.90691e-10, 9.15525e-10, 8.46063e-10, 7.81873e-10, 7.22554e-10, +6.67737e-10, 6.1708e-10, 5.70266e-10, 5.27005e-10, 4.87027e-10, 4.50082e-10, +4.15937e-10, 3.84386e-10, 3.55229e-10, 3.28284e-10, 3.03384e-10, 2.80373e-10, +2.59107e-10, 2.39455e-10, 2.21293e-10, 2.04509e-10, 1.88999e-10, 1.74665e-10, +1.61418e-10, 1.49176e-10, 1.37863e-10, 1.27408e-10, 1.17745e-10, 1.08816e-10, +1.00564e-10, 9.29376e-11, 8.58897e-11, 7.93764e-11, 7.33571e-11, 6.77943e-11, +6.26534e-11, 5.79023e-11, 5.35116e-11, 4.94538e-11, 4.57038e-11, 4.22381e-11, +3.90353e-11, 3.60753e-11, 3.33399e-11, 3.08118e-11, 2.84755e-11, 2.63163e-11, +2.43209e-11, 2.24767e-11, 2.07724e-11, 1.91974e-11, 1.77418e-11, 1.63965e-11, +1.51533e-11, 1.40043e-11, 1.29425e-11, 1.19612e-11, 1.10542e-11, 1.02161e-11, +9.44151e-12, 8.72564e-12, 8.06406e-12, 7.45264e-12, 6.88758e-12, 6.36536e-12, +5.88274e-12, 5.43672e-12, 5.02451e-12, 4.64356e-12, 4.29149e-12, 3.96612e-12, +3.66541e-12 + +}; + +////////////////////////////// +// +// Rutherford term (\int of ELF*omega) of the PAI model for water + +const G4double G4LowPAIH2O::theRuthSum[1007] = { + +0, 0.000783401, 0.00231191, 0.00379636, 0.00524157, 0.00594579, 0.00730817, +0.00862143, 0.00988839, 0.0111095, 0.0116985, 0.0128262, 0.0138996, 0.0149204, +0.0158897, 0.0168116, 0.0176908, 0.0181112, 0.0189103, 0.0196636, 0.0203729, +0.021186, 0.0216702, 0.0222506, 0.0227922, 0.0232961, 0.0237622, 0.0241923, +0.024591, 0.0249609, 0.0253014, 0.0256139, 0.025899, 0.0261568, 0.026389, +0.0265973, 0.0267833, 0.026949, 0.027096, 0.0272252, 0.0273377, 0.0274322, +0.0275132, 0.0275827, 0.0276361, 0.0277017, 0.0277353, 0.0277681, 0.0277901, +0.0278054, 0.0278147, 0.0278197, 0.0278173, 0.0278101, 0.0277985, 0.0277827, +0.0277521, 0.0277273, 0.027699, 0.0276512, 0.0276159, 0.0275781, 0.0275166, +0.0274727, 0.0274261, 0.0273525, 0.0273011, 0.0272477, 0.0271642, 0.0271063, +0.0270167, 0.0269551, 0.0268601, 0.0267951, 0.0267287, 0.026627, 0.0265231, +0.0264526, 0.0263451, 0.0262724, 0.0261621, 0.0260875, 0.0259747, 0.0258608, +0.0257841, 0.0256682, 0.0255515, 0.0254732, 0.025355, 0.0252364, 0.025157, +0.0250375, 0.0249173, 0.0247964, 0.0246752, 0.0245945, 0.0244731, 0.0243519, +0.0242309, 0.0241101, 0.0239897, 0.0238696, 0.0237499, 0.0236308, 0.0235123, +0.0233943, 0.023277, 0.0231601, 0.0230442, 0.0229297, 0.0228169, 0.0227057, +0.0225968, 0.0224554, 0.0223529, 0.0222551, 0.0221633, 0.0220523, 0.0219796, +0.0219197, 0.0218604, 0.0218367, 0.0218475, 0.0219083, 0.0220998, 0.0224082, +0.0230219, 0.0235228, 0.024142, 0.0245011, 0.0247757, 0.0248363, 0.0247485, +0.0246141, 0.0243745, 0.0240981, 0.0237967, 0.0234813, 0.0231588, 0.0228334, +0.0225333, 0.022234, 0.0219117, 0.0215947, 0.0212845, 0.0209824, 0.0206894, +0.0203363, 0.0200645, 0.0198027, 0.0194883, 0.0192469, 0.0189576, 0.0187351, +0.0184661, 0.018203, 0.0179929, 0.017726, 0.0174531, 0.017175, 0.0168925, +0.0166056, 0.0163156, 0.0160235, 0.0157299, 0.015436, 0.0151422, 0.0147915, +0.0145013, 0.014213, 0.0138709, 0.0135342, 0.0132585, 0.0129349, 0.0126208, +0.0123193, 0.0120337, 0.0117686, 0.0115317, 0.0113322, 0.0111617, 0.0110782, +0.0110721, 0.0112368, 0.0116636, 0.0124264, 0.0136592, 0.0154631, 0.0178602, +0.0186456, 0.019052, 0.0198976, 0.0203379, 0.0207921, 0.0217337, 0.0222207, +0.0227174, 0.0232199, 0.0242497, 0.0247726, 0.0252907, 0.0257995, 0.0268004, +0.027293, 0.0277682, 0.0282184, 0.029062, 0.0294548, 0.0298151, 0.0301393, +0.0304269, 0.0309315, 0.0311538, 0.0313486, 0.0315121, 0.0317741, 0.0318756, +0.0319479, 0.0319883, 0.0319978, 0.0319606, 0.0319133, 0.0318389, 0.0317495, +0.0316536, 0.0315517, 0.0313376, 0.0312253, 0.0311076, 0.0309859, 0.0308616, +0.0307351, 0.0306065, 0.0303482, 0.0302194, 0.0300899, 0.0299595, 0.029829, +0.0296985, 0.0294387, 0.0293095, 0.0291807, 0.0290523, 0.0289245, 0.0287971, +0.0285437, 0.028292, 0.0280423, 0.0277946, 0.0276715, 0.0274268, 0.027184, +0.0269429, 0.0268229, 0.026584, 0.0263467, 0.0261111, 0.0259939, 0.0257606, +0.0255291, 0.0252993, 0.0250713, 0.024958, 0.0247326, 0.024509, 0.0242873, +0.0240673, 0.0238492, 0.0236329, 0.0235254, 0.0233118, 0.0231001, 0.0228903, +0.0226823, 0.022476, 0.0222716, 0.022069, 0.022063, 0.0216692, 0.021472, +0.0212766, 0.021083, 0.0208912, 0.0207011, 0.0205129, 0.0203264, 0.0201416, +0.0199586, 0.0197774, 0.0195979, 0.0194202, 0.0192441, 0.0190699, 0.0188974, +0.0187266, 0.0185577, 0.0183905, 0.0181431, 0.0179803, 0.0178194, 0.0176605, +0.0175035, 0.0173486, 0.0171198, 0.0169697, 0.0168216, 0.0166752, 0.0165303, +0.0163153, 0.016173, 0.0160307, 0.0158173, 0.0156757, 0.0155346, 0.0153939, +0.0151843, 0.0150458, 0.0148403, 0.0147048, 0.0145705, 0.0143715, 0.0142403, +0.0140457, 0.0139174, 0.0137902, 0.0136017, 0.0134774, 0.013293, 0.0131715, +0.0129913, 0.0128135, 0.0126964, 0.0125226, 0.0124081, 0.0122383, 0.0120709, +0.0119605, 0.0117969, 0.0116891, 0.0115292, 0.0113716, 0.0112162, 0.0111138, +0.0109619, 0.0108123, 0.0106647, 0.0105675, 0.0104234, 0.0102814, 0.0101415, +0.0100036, 0.00986787, 0.00973419, 0.00960257, 0.00947294, 0.00934516, +0.00921914, 0.00909482, 0.00897207, 0.00885071, 0.0087305, 0.0086115, 0.0084939, +0.00837777, 0.00826314, 0.00811266, 0.00800156, 0.00789193, 0.00778377, +0.00764184, 0.00753708, 0.00743375, 0.00729816, 0.0071981, 0.0070668, 0.00696991, +0.00684278, 0.00674896, 0.00662588, 0.00653504, 0.00641585, 0.0063279, +0.00621249, 0.00609919, 0.00598796, 0.00590586, 0.00579813, 0.00569234, +0.00558847, 0.00548648, 0.00538636, 0.00528806, 0.00519155, 0.00509681, +0.00500379, 0.00491247, 0.00482282, 0.00473481, 0.00464841, 0.00454262, +0.00445973, 0.00441886, 0.00437835, 0.0043183, 0.00427872, 0.00423951, +0.00420066, 0.00416216, 0.00410507, 0.00406745, 0.00403017, 0.00397489, +0.00393846, 0.00390236, 0.00384883, 0.00381354, 0.00377859, 0.00372675, +0.00369258, 0.00365873, 0.00360853, 0.00357545, 0.0035264, 0.00349407, +0.00344613, 0.00341454, 0.00338323, 0.00333682, 0.00329104, 0.00326086, +0.00321613, 0.00318664, 0.00314292, 0.00311411, 0.00307138, 0.00302924, +0.00300172, 0.00296029, 0.00291967, 0.00289291, 0.00285321, 0.00281407, +0.00278827, 0.00275001, 0.00271228, 0.00267507, 0.00263837, 0.00261418, +0.00257831, 0.00254294, 0.00250805, 0.00247364, 0.0024397, 0.00240622, +0.00237321, 0.00234065, 0.00230854, 0.00227686, 0.00224562, 0.00221481, +0.00218442, 0.00215445, 0.00212489, 0.00209574, 0.00206698, 0.00202926, +0.00200141, 0.00197395, 0.00194687, 0.00191134, 0.00188511, 0.00185925, +0.00182531, 0.00180027, 0.00176741, 0.00174316, 0.00171134, 0.00168786, +0.00165706, 0.00163432, 0.00160449, 0.00158248, 0.00155359, 0.00152524, +0.0014974, 0.00147685, 0.00144998, 0.00142343, 0.00139745, 0.00137195, +0.00134691, 0.00132232, 0.00129819, 0.00127449, 0.00125123, 0.00122839, +0.00120597, 0.00118396, 0.00116235, 0.00113589, 0.00111516, 0.00109481, +0.00106989, 0.00105036, 0.00102645, 0.00100771, 0.000984776, 0.00096236, +0.000944795, 0.000923289, 0.000902272, 0.000881734, 0.000861663, 0.000842049, +0.000822882, 0.000804151, 0.000785846, 0.000767958, 0.000750477, 0.000730025, +0.000713407, 0.000697168, 0.000678168, 0.000659686, 0.00064467, 0.000627101, +0.000610011, 0.000593386, 0.000577215, 0.000561484, 0.000546182, 0.000531297, +0.000514444, 0.000500424, 0.000486786, 0.000471344, 0.000456392, 0.000441914, +0.000427896, 0.000414322, 0.000401179, 0.000388453, 0.000374402, 0.000362525, +0.000349412, 0.000336774, 0.000324593, 0.000312852, 0.000301536, 0.000290629, +0.00027883, 0.00026751, 0.000256649, 0.000246235, 0.000236233, 0.000225601, +0.000215447, 0.000205751, 0.000196491, 0.000187648, 0.000178381, 0.000169572, +0.0001612, 0.000152547, 0.000144823, 0.000139991, 0.000140589, 0.000146924, +0.000163174, 0.00027459, 0.000556121, 0.000987089, 0.00156066, 0.00241699, +0.00328156, 0.00451532, 0.00569793, 0.00729826, 0.0090396, 0.0108219, 0.0125318, +0.0140779, 0.015413, 0.016505, 0.0173227, 0.0179117, 0.0184991, 0.0190787, +0.0199878, 0.0211842, 0.0226481, 0.0243037, 0.0260656, 0.0278894, 0.0297607, +0.0319413, 0.0338936, 0.0361926, 0.0385534, 0.040971, 0.0434633, 0.0460499, +0.0487535, 0.0519478, 0.0553268, 0.0589571, 0.0628979, 0.067179, 0.0723321, +0.0778967, 0.0839009, 0.0903606, 0.0972024, 0.105039, 0.113101, 0.121291, +0.130311, 0.139594, 0.149138, 0.162421, 0.175168, 0.190137, 0.206066, 0.221952, +0.237589, 0.239452, 0.233554, 0.22817, 0.223279, 0.21886, 0.214892, 0.211355, +0.208231, 0.205504, 0.203155, 0.20117, 0.199533, 0.198228, 0.197241, 0.196558, +0.196165, 0.196047, 0.196192, 0.196584, 0.19721, 0.198054, 0.199103, 0.200341, +0.201752, 0.203318, 0.205023, 0.206849, 0.208777, 0.210786, 0.212842, 0.214926, +0.217038, 0.219155, 0.221242, 0.223276, 0.225233, 0.227086, 0.228812, 0.230385, +0.231782, 0.23298, 0.233958, 0.234697, 0.235181, 0.235394, 0.235326, 0.234967, +0.234312, 0.233357, 0.232103, 0.230551, 0.228707, 0.22658, 0.224178, 0.221515, +0.218602, 0.215457, 0.212095, 0.208462, 0.204579, 0.200534, 0.196346, 0.192033, +0.187615, 0.183109, 0.178532, 0.173902, 0.169233, 0.164542, 0.159841, 0.155145, +0.150466, 0.145815, 0.141203, 0.136638, 0.13213, 0.127686, 0.123312, 0.119015, +0.114801, 0.110672, 0.106635, 0.10269, 0.098842, 0.0950917, 0.0914411, 0.0878912, +0.0844426, 0.0810957, 0.0778502, 0.0747058, 0.0716619, 0.0687174, 0.0658712, +0.063122, 0.0604682, 0.0579081, 0.05544, 0.0530619, 0.0507717, 0.0485675, +0.046447, 0.0444081, 0.0424485, 0.040566, 0.0387584, 0.0370233, 0.0353586, +0.0337619, 0.0322311, 0.0307639, 0.0293582, 0.0280118, 0.0267226, 0.0254886, +0.0243077, 0.023178, 0.0220975, 0.0210643, 0.0200767, 0.0191328, 0.0182309, +0.0173779, 0.016571, 0.015799, 0.0150607, 0.0143549, 0.0136801, 0.0130353, +0.0124192, 0.0118306, 0.0112686, 0.0107319, 0.0102196, 0.00973068, 0.00926409, +0.00881894, 0.0083943, 0.00798931, 0.00760313, 0.00723493, 0.00688394, 0.0065494, +0.00623059, 0.00592681, 0.00563739, 0.0053617, 0.00509911, 0.00484903, +0.00461089, 0.00438416, 0.0041683, 0.00396282, 0.00376724, 0.0035811, 0.00340396, +0.00323541, 0.00307504, 0.00292246, 0.00277732, 0.00263926, 0.00250794, +0.00238305, 0.00226428, 0.00215134, 0.00204394, 0.00194183, 0.00184475, +0.00175246, 0.00166472, 0.00158132, 0.00150205, 0.0014267, 0.00135509, +0.00128704, 0.00122237, 0.00116091, 0.00110251, 0.00104702, 0.000994296, +0.000944203, 0.000896612, 0.000851398, 0.000808446, 0.000767644, 0.000728884, +0.000692067, 0.000657096, 0.000623879, 0.00059233, 0.000562366, 0.000533908, +0.000506881, 0.000481213, 0.000456838, 0.00043369, 0.000411709, 0.000390836, +0.000371015, 0.000352195, 0.000334325, 0.000317357, 0.000301246, 0.000285949, +0.000271426, 0.000257637, 0.000244546, 0.000232118, 0.000220318, 0.000209116, +0.000198482, 0.000188387, 0.000178803, 0.000169705, 0.000161069, 0.00015287, +0.000145088, 0.000137701, 0.000130689, 0.000124033, 0.000117714, 0.000111717, +0.000106025, 0.000100622, 9.54938e-05, 9.06262e-05, 8.60062e-05, 8.16212e-05, +7.74592e-05, 7.35091e-05, 6.976e-05, 6.62017e-05, 6.28245e-05, 5.96193e-05, +5.65774e-05, 5.36904e-05, 5.09504e-05, 4.835e-05, 4.58822e-05, 4.35401e-05, +4.13173e-05, 3.92079e-05, 3.7206e-05, 3.53062e-05, 3.35033e-05, 3.17923e-05, +3.01685e-05, 2.86276e-05, 2.71653e-05, 2.57776e-05, 2.44607e-05, 2.3211e-05, +2.20251e-05, 2.08997e-05, 1.98318e-05, 1.88184e-05, 1.78567e-05, 1.69441e-05, +1.60781e-05, 1.52563e-05, 1.44765e-05, 1.37365e-05, 1.30343e-05, 1.2368e-05, +1.17357e-05, 1.11357e-05, 1.05664e-05, 1.00261e-05, 9.51346e-06, 9.02701e-06, +8.56541e-06, 8.1274e-06, 7.71178e-06, 7.31739e-06, 6.94317e-06, 6.58807e-06, +6.25112e-06, 5.9314e-06, 5.62801e-06, 5.34014e-06, 5.06699e-06, 4.8078e-06, +4.56186e-06, 4.3285e-06, 4.10707e-06, 3.89696e-06, 3.69759e-06, 3.50843e-06, +3.32893e-06, 3.15861e-06, 2.99701e-06, 2.84367e-06, 2.69817e-06, 2.56011e-06, +2.42912e-06, 2.30482e-06, 2.18689e-06, 2.07498e-06, 1.9688e-06, 1.86806e-06, +1.77246e-06, 1.68176e-06, 1.5957e-06, 1.51404e-06, 1.43655e-06, 1.36304e-06, +1.29328e-06, 1.22709e-06, 1.16429e-06, 1.1047e-06, 1.04816e-06, 9.94518e-07, +9.43617e-07, 8.95321e-07, 8.49496e-07, 8.06016e-07, 7.64762e-07, 7.25618e-07, +6.88477e-07, 6.53238e-07, 6.19801e-07, 5.88076e-07, 5.57974e-07, 5.29413e-07, +5.02314e-07, 4.76602e-07, 4.52205e-07, 4.29057e-07, 4.07094e-07, 3.86255e-07, +3.66483e-07, 3.47723e-07, 3.29922e-07, 3.13033e-07, 2.97009e-07, 2.81805e-07, +2.67378e-07, 2.53691e-07, 2.40704e-07, 2.28381e-07, 2.1669e-07, 2.05597e-07, +1.95071e-07, 1.85085e-07, 1.7561e-07, 1.66619e-07, 1.58089e-07, 1.49996e-07, +1.42317e-07, 1.35031e-07, 1.28118e-07, 1.21559e-07, 1.15335e-07, 1.09431e-07, +1.03828e-07, 9.85126e-08, 9.3469e-08, 8.86837e-08, 8.41433e-08, 7.98354e-08, +7.5748e-08, 7.18699e-08, 6.81903e-08, 6.46991e-08, 6.13866e-08, 5.82437e-08, +5.52617e-08, 5.24324e-08, 4.97479e-08, 4.72009e-08, 4.47842e-08, 4.24913e-08, +4.03158e-08, 3.82516e-08, 3.62932e-08, 3.4435e-08, 3.26719e-08, 3.09991e-08, +2.9412e-08, 2.79061e-08, 2.64773e-08, 2.51216e-08 + +}; + +#endif + +////////////////////// end of G4LowDataH2O header file //////////////// diff --git a/source/processes/electromagnetic/standard/include/G4LowPAIH2O.hh b/source/processes/electromagnetic/standard/include/G4LowPAIH2O.hh new file mode 100644 index 0000000000..a0b33cf828 --- /dev/null +++ b/source/processes/electromagnetic/standard/include/G4LowPAIH2O.hh @@ -0,0 +1,267 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4LowPAIxs.hh -- header file +// +// GEANT 4 class header file --- Copyright CERN 1995 +// CERB Geneva Switzerland +// +// for information related to this code, please, contact +// CERN, CN Division, ASD Group +// +// Preparation of ionizing collision cross section according to Photo Absorption +// Ionization (PAI) model for simulation of ionization energy losses in very thin +// layers of water for low energy protons and electrons. +// +// Author: Vladimir.Grichine@cern.ch +// +// History: +// + +// 2.12.24, V. Grichine: 1st version + +#ifndef G4LOWPAIH2O_HH +#define G4LOWPAIH2O_HH + +#include "G4ios.hh" +#include "globals.hh" +#include "Randomize.hh" +#include "G4PhysicsLogVector.hh" +#include "G4DataVector.hh" +#include "G4PhysicsTable.hh" +#include "G4VEmModel.hh" +#include "G4VEmFluctuationModel.hh" + +class G4MaterialCutsCouple; +class G4Material; +class G4SandiaTable; +class G4PhysicsLogVector; +class G4PhysicsTable; +class G4ParticleDefinition; +class G4ParticleChangeForLoss; + +class G4LowPAIH2O : + public G4VEmModel , public G4VEmFluctuationModel +{ +public: + // Constructors + + explicit G4LowPAIH2O( const G4ParticleDefinition* p = nullptr, + const G4String& nam = "lowpaih2o"); + + ~G4LowPAIH2O() override; + + G4LowPAIH2O & operator=(const G4LowPAIH2O &right) = delete; + G4LowPAIH2O(const G4LowPAIH2O&) = delete; + + // methods + + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; + + void InitialiseLocal(const G4ParticleDefinition*, + G4VEmModel* masterModel) override; + + G4double CrossSectionPerVolume(const G4Material*, + const G4ParticleDefinition*, + G4double kineticEnergy, + G4double cutEnergy, + G4double maxEnergy) override; + + G4double CrossSectionPerAtom( + const G4ParticleDefinition*, + G4double kineticEnergy, G4double Z, + G4double A, + G4double cutEnergy, + G4double maxEnergy); + + virtual G4double ComputeCrossSectionPerElectron( + const G4ParticleDefinition*, + G4double kineticEnergy, + G4double cutEnergy, + G4double maxEnergy); + + void SampleSecondaries(std::vector*, + const G4MaterialCutsCouple*, + const G4DynamicParticle*, + G4double tmin, + G4double maxEnergy) override; + + G4double SampleFluctuations(const G4MaterialCutsCouple*, + const G4DynamicParticle*, + const G4double tcut, + const G4double tmax, + const G4double length, + const G4double meanLoss) override; + void CorrectionsAlongStep(const G4MaterialCutsCouple*, + const G4DynamicParticle*, + const G4double& length, + G4double& eloss) override; + + + G4double Dispersion(const G4Material*, const G4DynamicParticle*, + const G4double, const G4double, const G4double) override {return 0.;}; + + inline G4double ComputeMeanFreePath( const G4ParticleDefinition*, + G4double kineticEnergy, + const G4Material*, + G4double cutEnergy = 0.0, + G4double maxEnergy = DBL_MAX); + void Initialize(); + void InitRuthELF(); + + void BuildPhysicsTable(const G4ParticleDefinition* pd); + void BuildPrEnergyTable(); + void BuildElEnergyTable(); + G4double GetPrTransfer( G4double Tkin); + G4double CorrectPrTransfer( G4double Tkin); + G4double CorrectElTransfer( G4double Tkin); + + G4double GetElTransfer( G4double Tkin); + G4double GetPrMFP( G4double Tkin); + G4double GetPrdNdx( G4double Tkin); + G4double GetElMFP( G4double Tkin); + G4double GetEldNdx( G4double Tkin); + G4double PrPAId2Ndxdw( G4double omega ); + G4double ElPAId2Ndxdw( G4double omega ); + + void SetBe2( G4double be2 ){ fBe2 = be2; }; + G4double GetBe2(){ return fBe2; }; + void SetOmega( G4double ww ){ fOmega = ww; }; + G4double GetOmega(){ return fOmega;}; + void SetBias( G4double bb ){ fBias = bb; }; + G4double GetBias(){ return fBias;}; + + G4double GetElectronTmax( G4double Tkin ); + G4double GetProtonTmax( G4double Tkin ); + + inline G4double GetSumELF( G4double energy ); + inline G4double GetSumRuth( G4double energy ); + +private: + + // Local class members + G4int fTotBin{0}; + G4int fBinTr{0}; + G4int fBias{0}; + G4double fCof{0.0}; + G4double fBeta{0.0}; + G4double fBe2{0.0}; + G4double fTkin{0.0}; + + G4double fBmin{0.0}; + G4double fBmax{0.0}; + G4double fWmin{0.0}; + G4double fWmax{0.0}; + G4double fOmega{0.0}; + G4double fElectronDensity{0.0}; + G4double fNat{0.0}; + G4double fNel{0.0}; + G4double fMass{0.0}; + + static const G4int theBin; + static const G4double theEsum[1007], theELFsum[1007], theRuthSum[1007]; + + G4DataVector fEsum; + G4DataVector fELFsum, fRuthSum; + G4DataVector fPrWmaxVector; + + G4Material* fMat{nullptr}; + + G4PhysicsLogVector* fBetaVector{nullptr}; + G4PhysicsTable* fPrEnergyTable{nullptr}; + G4PhysicsTable* fElEnergyTable{nullptr}; + G4PhysicsLogVector* fTransferVector{nullptr}; + + G4ParticleDefinition* theElectron{nullptr}; + G4ParticleDefinition* theProton{nullptr}; + G4ParticleChangeForLoss* fParticleChange{nullptr}; +}; + +/////////////////////////////////////////////////////////////////// +//////////////// Inline methods ////////////////////////////////// +//////////////////////////////////////////////////////////////////// + + +/////////////////// fast (STL) get ELF ///////////////// + +G4double G4LowPAIH2O::GetSumELF( G4double energy ) +{ + G4double ee = energy; // /CLHEP::eV; + G4double elf(0.), y1(0.), y2(0.), x1(0.), x2(0.), aa(0.); + + std::size_t nlow = std::lower_bound( fEsum.begin(), fEsum.end(), ee ) - fEsum.begin(); + + x1 = fEsum[nlow-1]; + x2 = fEsum[nlow]; + y1 = fELFsum[nlow-1]; + y2 = fELFsum[nlow]; + aa = (y2-y1)/(x2-x1); + elf = y1 + aa*(ee-x1); + return elf; +} + +/////////////////////// fast (STL) get Rutherford ///////////////////// + +G4double G4LowPAIH2O::GetSumRuth( G4double energy ) +{ + G4double ee = energy; // /CLHEP::eV; + G4double ruth(0.), y1(0.), y2(0.), x1(0.), x2(0.), aa(0.); + + std::size_t nlow = std::lower_bound( fEsum.begin(), fEsum.end(), ee ) - fEsum.begin(); + + x1 = fEsum[nlow-1]; + x2 = fEsum[nlow]; + y1 = fRuthSum[nlow-1]; + y2 = fRuthSum[nlow]; + aa = (y2-y1)/(x2-x1); + ruth = y1 + aa*(ee-x1); + + return ruth; +} + +/////////////////////////////////////////////// + +G4double G4LowPAIH2O::ComputeMeanFreePath( const G4ParticleDefinition* pd, + G4double Tkin, + const G4Material*, + G4double, // cutEnergy, // = 0.0, + G4double ) //maxEnergy ) // = DBL_MAX) +{ + G4double dndx(0.), mfp(DBL_MAX); + + if ( pd == theProton ) dndx = GetPrdNdx(Tkin); + else if( pd == theElectron ) dndx = GetEldNdx(Tkin); + else return DBL_MAX; + + if( dndx > 0.) mfp = 1./dndx; + else mfp = DBL_MAX; + + mfp *= fBias; + return mfp; +} + +#endif + +///////////////// end of G4LowPAIH2O header file ////////////////// diff --git a/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh b/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh index ae8480d280..99aad881e2 100644 --- a/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh +++ b/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh @@ -53,7 +53,6 @@ #define G4eBremsstrahlungRelModel_h 1 #include "G4VEmModel.hh" -#include class G4ParticleChangeForLoss; @@ -219,10 +218,9 @@ private: std::vector fLPMFuncPhi; }; // - static std::shared_ptr gLPMFuncs(); - static std::shared_ptr> gElementData(); - std::shared_ptr fLPMFuncs; - std::shared_ptr> fElementData; + static LPMFuncs gLPMFuncs; + static std::vector gElementData; + }; #endif diff --git a/source/processes/electromagnetic/standard/sources.cmake b/source/processes/electromagnetic/standard/sources.cmake index c32716adbe..dc5a4baa39 100644 --- a/source/processes/electromagnetic/standard/sources.cmake +++ b/source/processes/electromagnetic/standard/sources.cmake @@ -37,6 +37,8 @@ geant4_add_module(G4emstandard G4LindhardSorensenData.hh G4LindhardSorensenIonModel.hh G4LossFluctuationDummy.hh + G4LowPAIH2O.hh + G4LowDataH2O.hh G4ModifiedTsai.hh G4MollerBhabhaModel.hh G4MottData.hh @@ -121,6 +123,7 @@ geant4_add_module(G4emstandard G4LindhardSorensenData.cc G4LindhardSorensenIonModel.cc G4LossFluctuationDummy.cc + G4LowPAIH2O.cc G4ModifiedTsai.cc G4MollerBhabhaModel.cc G4NuclearStopping.cc diff --git a/source/processes/electromagnetic/standard/src/G4LowPAIH2O.cc b/source/processes/electromagnetic/standard/src/G4LowPAIH2O.cc new file mode 100644 index 0000000000..dfdd5b1907 --- /dev/null +++ b/source/processes/electromagnetic/standard/src/G4LowPAIH2O.cc @@ -0,0 +1,891 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// +// G4LowPAIH2O.cc -- class implementation file +// +// GEANT 4 class implementation file +// +// For information related to this code, please, contact +// the Geant4 Collaboration. +// +// R&D: Vladimir.Grichine@cern.ch +// +// History: +// +// 20.07.23 V. Grichine, 1st version +// + +#include "G4LowPAIH2O.hh" +#include "G4LowDataH2O.hh" + +#include "globals.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4ios.hh" +#include "G4ParticleDefinition.hh" +#include "G4Integrator.hh" +#include "G4PhysicsLogVector.hh" +#include "G4PhysicsTable.hh" +#include "Randomize.hh" +#include "G4Poisson.hh" +#include "G4RandomDirection.hh" +#include "G4Electron.hh" +#include "G4Proton.hh" +#include "G4ParticleChangeForLoss.hh" +#include "G4NistManager.hh" +#include "G4Material.hh" +#include "G4MaterialCutsCouple.hh" +#include "G4VEmAngularDistribution.hh" + + +using namespace std; +using namespace CLHEP; + +////////////////////////////////////////////////////////////////// +// +// Constructor + +G4LowPAIH2O::G4LowPAIH2O( const G4ParticleDefinition* p, + const G4String& nam ) + : G4VEmModel(nam) , G4VEmFluctuationModel(nam) +{ + fCof = fine_structure_const/hbarc/pi; + fBeta = 0.5; + fBe2 = fBeta*fBeta; + fTkin = eV * 1.; + fBias = 1.; // + G4NistManager* man = G4NistManager::Instance(); + fMat = man->FindOrBuildMaterial("G4_WATER"); + // (?) + fElectronDensity = fMat->GetElectronDensity(); + fNat = fMat->GetTotNbOfAtomsPerVolume(); + // G4cout<<"fNat = "<GetTotNbOfElectPerVolume(); + // G4cout<<"fNel = "<clearAndDestroy(); + delete fPrEnergyTable; + } + if(fElEnergyTable) + { + fElEnergyTable->clearAndDestroy(); + delete fElEnergyTable; + } +} + +////////////////////////////////////////// + +void G4LowPAIH2O::Initialise( const G4ParticleDefinition* pd, + const G4DataVector& ) +{ + if(nullptr == fParticleChange) + { + fParticleChange = GetParticleChangeForLoss(); + } + // InitRuthELF(); + BuildPhysicsTable( pd ); + return; +} + +//////////////////////////////// + +void G4LowPAIH2O::InitialiseLocal(const G4ParticleDefinition* pd, + G4VEmModel* masterModel) +{ + if(nullptr == fParticleChange) + { + fParticleChange = GetParticleChangeForLoss(); + } + SetElementSelectors(masterModel->GetElementSelectors()); + BuildPhysicsTable( pd ); + return; +} + +//////////////////////////////////////////// + +void G4LowPAIH2O::Initialize() +{ + if( nullptr == fParticleChange ) + { + fParticleChange = GetParticleChangeForLoss(); + } + return; +} + +/////////////////////////////////////////////////////////// +// +// Reading static const arrays to local data vectors for fast searching + +void G4LowPAIH2O::InitRuthELF() +{ + G4int i(0), nn(0); + G4double ee(0.), elf(0.), ruth(0.); + + nn = theBin; + + for( i = 0; i < nn; ++i ) + { + ee = theEsum[i]; + elf = theELFsum[i]; + ruth = theRuthSum[i]; + fEsum.push_back(ee); + fELFsum.push_back(elf); + fRuthSum.push_back(ruth); + } + G4cout<GetParticleName()<GetParticleName()< integral; + fPrEnergyTable = new G4PhysicsTable(); + + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + be = fBetaVector->GetLowEdgeEnergy(iBeta); + be2 = be*be; + SetBe2(be2); + gg = sqrt( 1./( 1. - be2 ) ); + tp = ( gg - 1.)*mp; + fWmax = GetProtonTmax(tp); + if( fWmax <= fWmin ) fWmax = fWmin*1.01; + fTransferVector = new G4PhysicsLogVector( fWmin, fWmax, fBinTr ); + fPrWmaxVector.push_back(fWmax); + sum = 0.; + fTransferVector->PutValue(fBinTr-1,sum); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + tmp = integral.Legendre10( this, &G4LowPAIH2O::PrPAId2Ndxdw, + fTransferVector->GetLowEdgeEnergy(iTransfer), + fTransferVector->GetLowEdgeEnergy(iTransfer+1) + ); + sum += tmp*fCof/be2; + // G4cout<PutValue(iTransfer,sum); + } + fPrEnergyTable->insertAt(iBeta, fTransferVector); + } + return; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetPrTransfer( G4double Tkin) +{ + // std::size_t + G4int iBeta(0), iTransfer(0); + G4double be(0.), be2(0.), gg(1.), mp = proton_mass_c2; + G4double rr1(0.), rr2(0.), tr1(0.), tr2(0.), transfer(0.); + G4double mean1(0.), mean2(0.); + gg = 1. + Tkin/mp; + be2 = 1. - 1./gg/gg; + if( be2 < 0. ) be2 = 0.; + be = sqrt(be2); + + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + if( be <= fBetaVector->GetLowEdgeEnergy(iBeta) ) break; + } + if (iBeta == 0 || iBeta == fTotBin-1) + { + rr1 = G4UniformRand()*(*(*fPrEnergyTable)(iBeta))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fPrEnergyTable)(iBeta))(iTransfer) >= rr1 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fPrEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fPrEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fPrEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + transfer = tr1 + (tr2-tr1)*G4UniformRand(); + } + } + else + { + rr1 = G4UniformRand()*(*(*fPrEnergyTable)(iBeta-1))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fPrEnergyTable)(iBeta-1))(iTransfer) >= rr1 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fPrEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fPrEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fPrEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + mean1 = tr1 + (tr2-tr1)*G4UniformRand(); + } + rr2 = G4UniformRand()*(*(*fPrEnergyTable)(iBeta))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fPrEnergyTable)(iBeta))(iTransfer) >= rr2 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fPrEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fPrEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fPrEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + mean2 = tr1 + (tr2-tr1)*G4UniformRand(); + } + transfer = mean1 + ( mean2 - mean1 )*G4UniformRand(); + } + transfer *= CorrectPrTransfer( Tkin ); + // G4cout< dE/dx + +G4double G4LowPAIH2O::CorrectPrTransfer( G4double Tkin) +{ + // tuning + G4double Tref = keV * 100.; // 100.; // + G4double T2 = Tref * 1.; //1.1; // + G4double T1 = Tref * 1.; // 0.9; // 0.8; // + G4double rat2 = Tkin/T2; + G4double rat1 = Tkin/T1; + G4double yy(0.); + G4double kk = 0.22; // 0.24; // + if( Tkin >= T2 ) yy = kk/pow( rat2, 0.15); // + else if( Tkin <= T1) yy = kk/pow( rat1, 0.75); // + else yy = kk * 1.; // 1.2; // 1.1; // + + return yy; +} + +///////////////////////////// +// +// Correction for dN/dx -> dE/dx + +G4double G4LowPAIH2O::CorrectElTransfer( G4double Tkin) +{ + // tuning + G4double Tref = eV * 70.; // 100.; // + G4double T2 = Tref * 1.; //1.1; // + G4double T1 = Tref * 1.; // 0.9; // 0.8; // + G4double rat2 = Tkin/T2; + G4double rat1 = T1/Tkin; // Tkin/T1; // + G4double yy(0.); + G4double kk = 0.6; // 0.55; // 0.22; // + if( Tkin >= T2 ) yy = kk/pow( rat2, 0.2); // 0.4); // + else if( Tkin <= T1) yy = kk*pow( rat1, 0.9); // 0.75); // + else yy = kk * 1.; // 1.2; // 1.1; // + + return yy; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetPrdNdx( G4double Tkin) +{ + // std::size_t + G4int iBeta(0); + G4double be(0.), be2(0.), gg(1.), mp = proton_mass_c2; + G4double rr1(0.), rr2(0.), dndx(0.); + gg = 1. + Tkin/mp; + be2 = 1. - 1./gg/gg; + if(be2 < 0.) be2 = 0.; + be = sqrt(be2); + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + if( be <= fBetaVector->GetLowEdgeEnergy(iBeta) ) break; + } + if (iBeta <= 0 ) + { + dndx = (*(*fPrEnergyTable)(0))(0); + } + else if (iBeta >= fTotBin-1) + { + dndx = (*(*fPrEnergyTable)(fTotBin-1))(0); + } + else + { + rr1 = (*(*fPrEnergyTable)(iBeta-1))(0); + rr2 = (*(*fPrEnergyTable)(iBeta))(0); + dndx = rr1 +(rr2-rr1)*G4UniformRand(); + } + return dndx; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetPrMFP( G4double Tkin) +{ + G4double dndx = GetPrdNdx(Tkin); + G4double mfp(0.); + if( dndx > 0.) mfp = 1./dndx; + else mfp = DBL_MAX; + return mfp; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetEldNdx( G4double Tkin) +{ + // std::size_t + G4int iBeta(0); + G4double be(0.), be2(0.), gg(1.), me = electron_mass_c2; + G4double rr1(0.), rr2(0.), dndx(0.); + gg = 1. + Tkin/me; + be2 = 1. - 1./gg/gg; + if(be2 < 0.) be2 = 0.; + be = sqrt(be2); + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + if( be <= fBetaVector->GetLowEdgeEnergy(iBeta) ) break; + } + if (iBeta <= 0 ) + { + dndx = (*(*fElEnergyTable)(0))(0); + } + else if (iBeta >= fTotBin-1) + { + dndx = (*(*fElEnergyTable)(fTotBin-1))(0); + } + else + { + rr1 = (*(*fElEnergyTable)(iBeta-1))(0); + rr2 = (*(*fElEnergyTable)(iBeta))(0); + dndx = rr1 + ( rr2 - rr1 )*G4UniformRand(); + } + return dndx; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetElMFP( G4double Tkin) +{ + G4double dndx = GetEldNdx(Tkin); + G4double mfp(0.); + if( dndx > 0.) mfp = 1./dndx; + else mfp = DBL_MAX; + return mfp; +} + +//////////////////////////////////////////////// + +void G4LowPAIH2O::BuildElEnergyTable() +{ + // G4cout<<"G4LowPAIH2O::BuildElEnergyTable is called"< integral; + fElEnergyTable = new G4PhysicsTable(); + + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + be = fBetaVector->GetLowEdgeEnergy(iBeta); + be2 = be*be; + SetBe2(be2); + gg = sqrt( 1./( 1. - be2 ) ); + tp = ( gg - 1.)*me; + fWmax = GetElectronTmax(tp); + if( fWmax <= fWmin ) fWmax = fWmin*1.01; + fTransferVector = new G4PhysicsLogVector( fWmin, fWmax, fBinTr ); + + sum = 0.; + fTransferVector->PutValue( fBinTr-1, sum ); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + tmp = integral.Legendre10( this, &G4LowPAIH2O::ElPAId2Ndxdw, + fTransferVector->GetLowEdgeEnergy(iTransfer), + fTransferVector->GetLowEdgeEnergy(iTransfer+1) + ); + + sum += tmp; // *fCof/be2; + + fTransferVector->PutValue( iTransfer, sum ); + } + fElEnergyTable->insertAt( iBeta, fTransferVector ); + } + return; +} + +///////////////////////////////////////////////////// +// +// return d2Ndxdw (?) collision electron limit + +G4double G4LowPAIH2O::ElPAId2Ndxdw( G4double omega ) +{ + G4double be2 = GetBe2(); + omega *= 1.7; // tune from p to e- + + G4double elf = GetSumELF(omega); + G4double ruth = GetSumRuth(omega); + G4double me = electron_mass_c2; + + G4double d2Ndxdw = elf; // 0.; // + + d2Ndxdw *= log( 2*me*be2/omega ); + + d2Ndxdw += ruth; + + d2Ndxdw *= fCof/be2; + + d2Ndxdw *= 1.3; // norm to max exp + + return d2Ndxdw; +} + +//////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetElTransfer( G4double Tkin) +{ + // std::size_t + G4int iBeta, iTransfer; + G4double be(0.), be2(0.), gg(1.), me = electron_mass_c2; + G4double rr1(0.), rr2(0.), tr1(0.), tr2(0.), transfer(0.); + G4double mean1(0.), mean2(0.); + gg = 1. + Tkin/me; + be2 = 1. - 1./gg/gg; + if( be2 < 0.) be2 = 0.; + be = sqrt(be2); + + for( iBeta = 0; iBeta < fTotBin; ++iBeta ) + { + if( be <= fBetaVector->GetLowEdgeEnergy(iBeta) ) break; + } + if (iBeta == 0 || iBeta == fTotBin-1) + { + rr1 = G4UniformRand()*(*(*fElEnergyTable)(iBeta))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fElEnergyTable)(iBeta))(iTransfer) >= rr1 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fElEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fElEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fElEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + transfer = tr1 + (tr2-tr1)*G4UniformRand(); + } + } + else + { + rr1 = G4UniformRand()*(*(*fElEnergyTable)(iBeta-1))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fElEnergyTable)(iBeta-1))(iTransfer) >= rr1 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fElEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fElEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fElEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + mean1 = tr1 + (tr2-tr1)*G4UniformRand(); + } + rr2 = G4UniformRand()*(*(*fElEnergyTable)(iBeta))(0); + + for( iTransfer = fBinTr-2; iTransfer >= 0; --iTransfer) + { + if( (*(*fElEnergyTable)(iBeta))(iTransfer) >= rr2 ) break; + } + if( iTransfer == 0 || iTransfer == fBinTr-2 ) + { + transfer = (*fElEnergyTable)(iBeta-1)->GetLowEdgeEnergy(iTransfer); + } + else + { + tr1 = (*fElEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer-1); + tr2 = (*fElEnergyTable)(iBeta)->GetLowEdgeEnergy(iTransfer); + mean2 = tr1 + (tr2-tr1)*G4UniformRand(); + } + transfer = mean1 +(mean2-mean1)*G4UniformRand(); + } + transfer *= CorrectElTransfer( Tkin ); + if( transfer < 0. ) return 0.; + // G4cout<* vdp, + const G4MaterialCutsCouple*, // matCC, + const G4DynamicParticle* dp, + G4double, // tmin, + G4double) // maxEnergy ) +{ + G4double kineticEnergy = dp->GetKineticEnergy(); + const G4ParticleDefinition* pd = dp->GetDefinition(); + + G4double deltaTkin(0.); + if( pd == theProton ) deltaTkin = GetPrTransfer(kineticEnergy); + else if( pd == theElectron ) deltaTkin = GetElTransfer(kineticEnergy); + else + { + G4cout<<" G4LowPAIH2O::SampleSecondaries is not applicable for " + <GetParticleName()<GetMomentumDirection(); + fMass = pd->GetPDGMass(); + G4double totalMomentum = sqrt( kineticEnergy*( kineticEnergy + 2.*fMass ) ); + + if( !(deltaTkin <= 0.) && !(deltaTkin > 0)) + { + G4cout<<"G4LowPAIH2O::SampleSecondaries; deltaTkin = "< deltaTkin) kineticEnergy -= deltaTkin; + else + { + deltaTkin = kineticEnergy; + kineticEnergy = 0.; + } + G4double momD = sqrt( deltaTkin*( deltaTkin + 2.*electron_mass_c2 ) ); + G4ThreeVector dirD = G4RandomDirection(); // low e- cloud + + G4ThreeVector dir = totalMomentum*direction - dirD*momD; + direction = dir.unit(); + fParticleChange->SetProposedKineticEnergy(kineticEnergy); + fParticleChange->SetProposedMomentumDirection(direction); + + if( deltaTkin < eV * 1.) // 10.) // + { + fParticleChange->ProposeLocalEnergyDeposit(deltaTkin); + } + else + { + auto deltaRay = new G4DynamicParticle( theElectron, dirD, deltaTkin ); + vdp->push_back( deltaRay ); + } + return; +} + +///////////////////////////////////////// + +G4double G4LowPAIH2O::SampleFluctuations(const G4MaterialCutsCouple*, + const G4DynamicParticle* dp, + const G4double, // tcut, + const G4double, // tmax, + const G4double length, + const G4double) // meanLoss ) +{ + G4double eloss(0.), mfp(0.), sumW(0.), sumL(0.), transfer(0.); + G4double Tkin = dp->GetKineticEnergy(); + const G4ParticleDefinition* pd = dp->GetDefinition(); + + if( pd != theProton && pd != theElectron) + { + eloss = 0.; + return eloss; + } + + if( pd == theProton ) + { + do + { + mfp = GetPrMFP(Tkin); + sumL += RandExponential::shoot(mfp); + transfer = GetPrTransfer(Tkin); + sumW += transfer; + // nn++; + if( Tkin >= transfer ) Tkin -= transfer; + else + { + transfer = Tkin; + Tkin = 0.; + } + } + while( sumL <= length && Tkin >= keV * 0.01 ); // + } + else if( pd == theElectron ) // e- + { + do + { + mfp = GetElMFP(Tkin); + sumL += RandExponential::shoot(mfp); + transfer = GetElTransfer(Tkin); + sumW += transfer; + Tkin -= transfer; + } + while( sumL <= length && Tkin >= 0. ); + } + eloss = sumW; + if(eloss < 0.) { eloss = 0.; } + fParticleChange->SetProposedKineticEnergy( Tkin ); + fParticleChange->ProposeLocalEnergyDeposit( eloss ); + // G4cout<GetKineticEnergy(); + const G4ParticleDefinition* pd = dp->GetDefinition(); + + if ( pd == theProton ) mfp = GetPrMFP(Tkin); + else if( pd == theElectron ) mfp = GetElMFP(Tkin); + else + { + eloss = 0.; + return; + } + G4int NN = static_cast(RandPoisson::shoot(length/mfp)); + + if( pd == theProton ) + { + for (G4int nn = 0; nn < NN; ++nn ) + { + sumW += GetPrTransfer( Tkin ); + } + } + else // e- + { + for (G4int nn = 0; nn < NN; ++nn ) + { + sumW += GetElTransfer( Tkin ); + } + } + if( sumW < Tkin ) eloss = sumW; + else eloss = Tkin; + // G4cout<ProposeLocalEnergyDeposit(eloss); + fParticleChange->SetProposedKineticEnergy(Tkin); + return; +} + +///////////////////////////////////////////// +// +// Transition from secondary e- to radicals + +G4double G4LowPAIH2O::GetElectronTmax( G4double tt ) +{ + fTkin = tt; + return tt*0.5; + + // algorithm below is doing the same + /* + G4double tmax(0.), cof(1.); + G4double mt = eV * 18.; // 32.; // 30.; // 50.; // + G4double dt = eV * 10.; // 5.; // 20.; // 25.; // + + G4double lim1 = 0.5; // 0.6; // + G4double lim2 = 1.; // 0.8; // + G4double dlim = (lim2-lim1)*0.5; + + G4double xx = ( tt - mt )/dt; + + if( xx > 0.) tmax = tt*( lim1 + dlim*exp(-xx) ); + else tmax = tt*( lim2 - dlim*exp(+xx) ); + + dt = mt *0.5; // eV * 38.; // 27.; // + + if(tt > mt+dt) tmax = tt*0.5; + else if (tt < mt-dt) tmax = tt; + else + { + cof = 1. - (tt-mt+dt)*0.25/dt; + tmax = tt*cof; + } + tmax = tt * 0.5; // + + if( tmax > tt ) tmax = tt; + + return tmax; + */ +} + +///////////////////////////////////////////////////// + +G4double G4LowPAIH2O::GetProtonTmax( G4double Tkin ) +{ + G4double mp = proton_mass_c2; + G4double Et = eV * 13.6; // + G4double tau = Tkin/mp; + G4double gamma = tau + 1.0; + G4double bg2 = tau*( tau + 2.0 ); + // G4double beta2 = bg2/(gamma*gamma); + G4double me = electron_mass_c2; + G4double rateMass = me/mp; + + if( Tkin < Et ) rateMass = 1.; + + G4double Tmax = 2.0*me*bg2 + /( 1. + 2.*gamma*rateMass + rateMass*rateMass ); + + return Tmax; +} + +// +// +////////////////////////////////////////////////// diff --git a/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc b/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc index bb1c134adf..4dea8be054 100644 --- a/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc +++ b/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc @@ -464,8 +464,7 @@ G4double G4UrbanMscModel::ComputeTruePathLengthLimit( : ComputeSafety(sp->GetPosition(), tPathLength); // stop here if small step or range is less than safety - if((tPathLength == currentRange && tPathLength < presafety) || - tPathLength < tlimitminfix) { + if(tPathLength == currentRange && tPathLength < presafety) { latDisplasment = false; return ConvertTrueToGeom(tPathLength, currentMinimalStep); } @@ -522,7 +521,9 @@ G4double G4UrbanMscModel::ComputeTruePathLengthLimit( << geomlimit < geommin)) { // geomlimit is a geometrical step length @@ -533,13 +534,24 @@ G4double G4UrbanMscModel::ComputeTruePathLengthLimit( tgeom = (stepStatus == fGeomBoundary) ? geomlimit/facgeom : facrange*rangeinit + stepmin; } + else if(geomlimit > geombig) { + // range smaller than distance to boundary + // here tgeom is the true path length + tgeom = currentRange; + } + else if((geomlimit < geommin) && (geomlimit > 0.)) { + // geomlimit small (smaller than geommin=1 um) + // here true pathlength ~ geom path length + tgeom = geomlimit; + } //step limit tlimit = (currentRange > presafety) ? std::max(facrange*rangeinit, facsafety*presafety) : currentRange; //lower limit for tlimit - tlimit = std::min(std::max(tlimit,tlimitmin), tgeom); + tlimit = std::max(tlimit, tlimitmin); + tlimit = std::min(tlimit, tgeom); /* G4cout << "tgeom= " << tgeom << " geomlimit= " << geomlimit << " tlimit= " << tlimit << " presafety= " << presafety << G4endl; diff --git a/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc b/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc index fa87473824..f4a15f92d0 100644 --- a/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc +++ b/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc @@ -113,26 +113,10 @@ const G4double G4eBremsstrahlungRelModel::gFinelLowZet[] = { }; // LPM supression functions evaluated at initialisation time -std::shared_ptr G4eBremsstrahlungRelModel::gLPMFuncs() -{ - // We have to use shared pointer for the LPMFuncs as it is manipulated (content deleted) - // by the G4eBremsstrahlungRelModel used in the main thread and this - // model is owned (well deleted) by (at least in some cases) - // a G4SeltzerBergerModel which is owned by the G4LossTableManager - // which owned by a G4ThreadLocalSingleton - // which is a static global and thus deleted after this instance - // is deleted. - static auto _instance = std::make_shared(); - return _instance; -} +G4eBremsstrahlungRelModel::LPMFuncs G4eBremsstrahlungRelModel::gLPMFuncs; // special data structure per element i.e. per Z -std::shared_ptr> G4eBremsstrahlungRelModel::gElementData() -{ - // Same code comment as for gLPMFuncs. - static auto _instance = std::make_shared>(); - return _instance; -} +std::vector G4eBremsstrahlungRelModel::gElementData; static std::once_flag applyOnce; @@ -143,7 +127,7 @@ namespace G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(const G4ParticleDefinition* p, const G4String& nam) -: G4VEmModel(nam), fLPMFuncs(gLPMFuncs()), fElementData(gElementData()) +: G4VEmModel(nam) { fGammaParticle = G4Gamma::Gamma(); // @@ -163,13 +147,13 @@ G4eBremsstrahlungRelModel::~G4eBremsstrahlungRelModel() { if (fIsInitializer) { // clear ElementData container - for (auto const & ptr : *fElementData) { delete ptr; } - fElementData->clear(); + for (auto const & ptr : gElementData) { delete ptr; } + gElementData.clear(); // clear LPMFunctions (if any) - if (fLPMFuncs->fIsInitialized) { - fLPMFuncs->fLPMFuncG.clear(); - fLPMFuncs->fLPMFuncPhi.clear(); - fLPMFuncs->fIsInitialized = false; + if (gLPMFuncs.fIsInitialized) { + gLPMFuncs.fLPMFuncG.clear(); + gLPMFuncs.fLPMFuncPhi.clear(); + gLPMFuncs.fIsInitialized = false; } } } @@ -188,10 +172,10 @@ void G4eBremsstrahlungRelModel::Initialise(const G4ParticleDefinition* p, std::call_once(applyOnce, [this]() { fIsInitializer = true; }); // for all treads and derived classes - if (fIsInitializer || fElementData->empty()) { + if (fIsInitializer || gElementData.empty()) { G4AutoLock l(&theBremRelMutex); - if (fElementData->empty()) { - fElementData->resize(gMaxZet+1, nullptr); + if (gElementData.empty()) { + gElementData.resize(gMaxZet+1, nullptr); } InitialiseElementData(); InitLPMFunctions(); @@ -463,7 +447,7 @@ G4eBremsstrahlungRelModel::ComputeRelDXSectionPerAtom(G4double gammaEnergy) // evaluate LPM functions (combined with the Ter-Mikaelian effect) G4double funcGS, funcPhiS, funcXiS; ComputeLPMfunctions(funcXiS, funcGS, funcPhiS, gammaEnergy); - const ElementData* elDat = (*fElementData)[fCurrentIZ]; + const ElementData* elDat = gElementData[fCurrentIZ]; const G4double term1 = funcXiS*(dum0*funcGS+(onemy+2.0*dum0)*funcPhiS); dxsec = term1*elDat->fZFactor1+onemy*elDat->fZFactor2; // @@ -507,7 +491,7 @@ G4eBremsstrahlungRelModel::ComputeDXSectionPerAtom(G4double gammaEnergy) const G4double y = gammaEnergy/fPrimaryTotalEnergy; const G4double onemy = 1.-y; const G4double dum0 = onemy+0.75*y*y; - const ElementData* elDat = (*fElementData)[fCurrentIZ]; + const ElementData* elDat = gElementData[fCurrentIZ]; // use complete screening and L_el, L_inel from Dirac-Fock model instead of TF if (fCurrentIZ < 5 || fIsUseCompleteScreening) { dxsec = dum0*elDat->fZFactor1; @@ -584,7 +568,7 @@ G4eBremsstrahlungRelModel::SampleSecondaries(std::vector* vd dp->GetLogKineticEnergy(),tmin,tmax); // fCurrentIZ = elm->GetZasInt(); - const ElementData* elDat = (*fElementData)[fCurrentIZ]; + const ElementData* elDat = gElementData[fCurrentIZ]; const G4double funcMax = elDat->fZFactor1+elDat->fZFactor2; // get the random engine G4double rndm[2]; @@ -654,7 +638,7 @@ void G4eBremsstrahlungRelModel::InitialiseElementData() for (auto const & elem : *elemTable) { const G4double zet = elem->GetZ(); const G4int izet = std::min(elem->GetZasInt(), gMaxZet); - if (nullptr == (*fElementData)[izet]) { + if (nullptr == gElementData[izet]) { auto elemData = new ElementData(); const G4double fc = elem->GetfCoulomb(); G4double Fel = 1.; @@ -678,7 +662,7 @@ void G4eBremsstrahlungRelModel::InitialiseElementData() elemData->fILVarS1 = 1./G4Log(elemData->fVarS1); elemData->fGammaFactor = 100.0*electron_mass_c2/z13; elemData->fEpsilonFactor = 100.0*electron_mass_c2/z23; - (*fElementData)[izet] = elemData; + gElementData[izet] = elemData; } } } @@ -692,7 +676,7 @@ void G4eBremsstrahlungRelModel::ComputeLPMfunctions(G4double& funcXiS, const G4double redegamma = egamma/fPrimaryTotalEnergy; const G4double varSprime = std::sqrt(0.125*redegamma*fLPMEnergy/ ((1.0-redegamma)*fPrimaryTotalEnergy)); - const ElementData* elDat = (*fElementData)[fCurrentIZ]; + const ElementData* elDat = gElementData[fCurrentIZ]; const G4double varS1 = elDat->fVarS1; const G4double condition = sqrt2*varS1; G4double funcXiSprime = 2.0; @@ -767,15 +751,15 @@ void G4eBremsstrahlungRelModel::ComputeLPMGsPhis(G4double& funcGS, // s goes up to 2 with ds = 0.01 to be the default bining void G4eBremsstrahlungRelModel::InitLPMFunctions() { - if (!fLPMFuncs->fIsInitialized) { - const G4int num = fLPMFuncs->fSLimit*fLPMFuncs->fISDelta+1; - fLPMFuncs->fLPMFuncG.resize(num); - fLPMFuncs->fLPMFuncPhi.resize(num); + if (!gLPMFuncs.fIsInitialized) { + const G4int num = gLPMFuncs.fSLimit*gLPMFuncs.fISDelta+1; + gLPMFuncs.fLPMFuncG.resize(num); + gLPMFuncs.fLPMFuncPhi.resize(num); for (G4int i = 0; i < num; ++i) { - const G4double sval=i/fLPMFuncs->fISDelta; - ComputeLPMGsPhis(fLPMFuncs->fLPMFuncG[i],fLPMFuncs->fLPMFuncPhi[i],sval); + const G4double sval=i/gLPMFuncs.fISDelta; + ComputeLPMGsPhis(gLPMFuncs.fLPMFuncG[i],gLPMFuncs.fLPMFuncPhi[i],sval); } - fLPMFuncs->fIsInitialized = true; + gLPMFuncs.fIsInitialized = true; } } @@ -783,14 +767,14 @@ void G4eBremsstrahlungRelModel::GetLPMFunctions(G4double& lpmGs, G4double& lpmPhis, const G4double sval) { - if (sval < fLPMFuncs->fSLimit) { - G4double val = sval*fLPMFuncs->fISDelta; + if (sval < gLPMFuncs.fSLimit) { + G4double val = sval*gLPMFuncs.fISDelta; const G4int ilow = (G4int)val; val -= ilow; - lpmGs = (fLPMFuncs->fLPMFuncG[ilow+1]-fLPMFuncs->fLPMFuncG[ilow])*val - + fLPMFuncs->fLPMFuncG[ilow]; - lpmPhis = (fLPMFuncs->fLPMFuncPhi[ilow+1]-fLPMFuncs->fLPMFuncPhi[ilow])*val - + fLPMFuncs->fLPMFuncPhi[ilow]; + lpmGs = (gLPMFuncs.fLPMFuncG[ilow+1]-gLPMFuncs.fLPMFuncG[ilow])*val + + gLPMFuncs.fLPMFuncG[ilow]; + lpmPhis = (gLPMFuncs.fLPMFuncPhi[ilow+1]-gLPMFuncs.fLPMFuncPhi[ilow])*val + + gLPMFuncs.fLPMFuncPhi[ilow]; } else { G4double ss = sval*sval; ss *= ss; diff --git a/source/processes/electromagnetic/utils/History b/source/processes/electromagnetic/utils/History index 427b675ebe..1459e04118 100644 --- a/source/processes/electromagnetic/utils/History +++ b/source/processes/electromagnetic/utils/History @@ -6,12 +6,38 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-04 G.Cosmo (emutils-V11-02-21) +## 2025-06-11 V.Ivanchenko (emutils-V11-03-07) +- G4VXRayModel - updated new base class for X-ray processes + +## 2025-05-25 V.Ivanchenko (emutils-V11-03-06) +- G4EmUtility, G4EmDataHandler, G4EmDataRegistry - removed minor memory leaks + at exit and improved destruction at exit + +## 2025-05-12 V.Ivanchenko (emutils-V11-03-05) +- G4EmParametersMessenger - added UI command to enable/disable 5D pair + production model by muons. + +## 2025-04-29 V.Ivanchenko (emutils-V11-03-04) +- G4VXRayModel - new base class +- G4OpticalParameters, G4OpticalParametersMessenger, G4LossTableManager + configure and use this new class + +## 2025-04-04 G.Cosmo (emutils-V11-03-03) - Fix in G4EmTableType header to make self-consistent. Reported in [GitHub PR#85](https://github.com/Geant4/geant4/pull/85). -## 2025-03-27 V.Ivanchenko +## 2025-03-27 V.Ivanchenko (emutils-V11-03-02) - G4VAtomDeexcitation - fixed problem #2650 - allowed to simulate PIXE +- G4VEnergyLossProcess - cosmetic change + +## 2025-03-25 V.Ivanchenko (emutils-V11-03-01) +- G4EmParameters, G4EmParametersMessenger, G4EmUtility, G4LossTableBuilder, + G4VEnergyLossProcess - implemented a new option to enable/disable + fluctuation of energy loss per G4Region + +## 2025-02-12 V.Ivanchenko (emutils-V11-03-00) +- G4VEmProcess - added call StartTracking(...) for all used models, which + is needed for models, which needs access to G4Track pointer ## 2024-10-31 V.Ivanchenko (emutils-V11-02-20) - G4EmCalculator - fixed Coverity warning diff --git a/source/processes/electromagnetic/utils/include/G4EmDataHandler.hh b/source/processes/electromagnetic/utils/include/G4EmDataHandler.hh index 74ecc4e78d..d75c23f257 100644 --- a/source/processes/electromagnetic/utils/include/G4EmDataHandler.hh +++ b/source/processes/electromagnetic/utils/include/G4EmDataHandler.hh @@ -61,6 +61,7 @@ class G4ParticleDefinition; class G4VEmProcess; class G4VEnergyLossProcess; +class G4EmDataRegistry; class G4EmDataHandler { @@ -168,6 +169,7 @@ public: private: + G4EmDataRegistry* fRegistry; std::vector data; std::vector* fMaxXS; std::vector* fXSpeaks; @@ -176,8 +178,8 @@ private: std::size_t tLength{0}; std::size_t eLength{0}; G4CrossSectionType fXSType{fEmNoIntegral}; - G4String fName; G4bool fUseBaseParticleTable{false}; + G4String fName; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/utils/include/G4EmDataRegistry.hh b/source/processes/electromagnetic/utils/include/G4EmDataRegistry.hh index 8c7b548bb1..dd19121395 100644 --- a/source/processes/electromagnetic/utils/include/G4EmDataRegistry.hh +++ b/source/processes/electromagnetic/utils/include/G4EmDataRegistry.hh @@ -52,6 +52,9 @@ class G4EmDataRegistry // register a new handler void Register(G4EmDataHandler*); + // register a new handler + void DeRegister(G4EmDataHandler*); + // hide assignment operator G4EmDataRegistry& operator=(const G4EmDataRegistry &right) = delete; G4EmDataRegistry(const G4EmDataRegistry&) = delete; diff --git a/source/processes/electromagnetic/utils/include/G4EmExtraParameters.hh b/source/processes/electromagnetic/utils/include/G4EmExtraParameters.hh index 5d787e4a8a..4b613f2f8a 100644 --- a/source/processes/electromagnetic/utils/include/G4EmExtraParameters.hh +++ b/source/processes/electromagnetic/utils/include/G4EmExtraParameters.hh @@ -126,6 +126,8 @@ public: G4double factor, G4double energyLimit); + G4String CheckRegion(const G4String&) const; + // initialisation methods void DefineRegParamForLoss(G4VEnergyLossProcess*) const; void DefineRegParamForEM(G4VEmProcess*) const; @@ -136,8 +138,6 @@ public: private: - G4String CheckRegion(const G4String&) const; - void PrintWarning(G4ExceptionDescription& ed) const; G4EmExtraParametersMessenger* theMessenger; diff --git a/source/processes/electromagnetic/utils/include/G4EmParameters.hh b/source/processes/electromagnetic/utils/include/G4EmParameters.hh index cdd9263e03..6290720e09 100644 --- a/source/processes/electromagnetic/utils/include/G4EmParameters.hh +++ b/source/processes/electromagnetic/utils/include/G4EmParameters.hh @@ -407,10 +407,14 @@ public: // create and access saturation class G4EmSaturation* GetEmSaturation(); + // defined fluctuations per G4Region + void SetFluctuationsForRegion(const G4String& regionName, G4bool flag); + // initialisation methods void DefineRegParamForLoss(G4VEnergyLossProcess*) const; void DefineRegParamForEM(G4VEmProcess*) const; void DefineRegParamForDeex(G4VAtomDeexcitation*) const; + void DefineFluctuationFlags(std::vector* theFluctFlags); const G4String& GetDirLEDATA() const; @@ -499,6 +503,7 @@ private: G4PositronAtRestModelType fPositronium; G4String fDirLEDATA; + std::vector > fluctRegions; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/utils/include/G4EmParametersMessenger.hh b/source/processes/electromagnetic/utils/include/G4EmParametersMessenger.hh index c220cedec0..2c6add5c60 100644 --- a/source/processes/electromagnetic/utils/include/G4EmParametersMessenger.hh +++ b/source/processes/electromagnetic/utils/include/G4EmParametersMessenger.hh @@ -107,6 +107,7 @@ private: G4UIcmdWithABool* mscPCmd; G4UIcmdWithABool* pepicsCmd; G4UIcmdWithABool* f3gCmd; + G4UIcmdWithABool* fRiGeCmd; G4UIcmdWithADoubleAndUnit* minEnCmd; G4UIcmdWithADoubleAndUnit* maxEnCmd; @@ -144,6 +145,8 @@ private: G4UIcmdWithAString* nffCmd; G4UIcmdWithAString* ssCmd; G4UIcmdWithAString* fluc1Cmd; + G4UIcmdWithAString* fluc2Cmd; + G4UIcmdWithAString* fluc3Cmd; G4UIcmdWithAString* posiCmd; G4UIcommand* dumpCmd; diff --git a/source/processes/electromagnetic/utils/include/G4EmUtility.hh b/source/processes/electromagnetic/utils/include/G4EmUtility.hh index b894eee95d..42df435227 100644 --- a/source/processes/electromagnetic/utils/include/G4EmUtility.hh +++ b/source/processes/electromagnetic/utils/include/G4EmUtility.hh @@ -78,6 +78,11 @@ public: const G4DataVector& cuts, const G4double emin, const G4double emax); + + // fluctuations per G4Region + static void FillFluctFlags(std::vector >& reg, + std::vector* flags); + }; #endif diff --git a/source/processes/electromagnetic/utils/include/G4LossTableBuilder.hh b/source/processes/electromagnetic/utils/include/G4LossTableBuilder.hh index fd4c808896..4d43285563 100644 --- a/source/processes/electromagnetic/utils/include/G4LossTableBuilder.hh +++ b/source/processes/electromagnetic/utils/include/G4LossTableBuilder.hh @@ -92,6 +92,8 @@ public: static const std::vector* GetDensityFactors(); + static const std::vector* GetFluctuationFlags(); + static G4bool GetFlag(std::size_t idx); static G4bool GetBaseMaterialFlag(); @@ -116,6 +118,7 @@ private: static std::vector* theDensityFactor; static std::vector* theDensityIdx; static std::vector* theFlag; + static std::vector* theFluct; }; inline void G4LossTableBuilder::SetSplineFlag(G4bool flag) diff --git a/source/processes/electromagnetic/utils/include/G4LossTableManager.hh b/source/processes/electromagnetic/utils/include/G4LossTableManager.hh index 1cda35b469..c807ed079a 100644 --- a/source/processes/electromagnetic/utils/include/G4LossTableManager.hh +++ b/source/processes/electromagnetic/utils/include/G4LossTableManager.hh @@ -73,6 +73,7 @@ class G4EmCorrections; class G4LossTableBuilder; class G4VAtomDeexcitation; class G4VSubCutProducer; +class G4VXRayModel; class G4LossTableManager { @@ -172,6 +173,10 @@ public: void DeRegister(G4VEmFluctuationModel* p); + void Register(G4VXRayModel* p); + + void DeRegister(G4VXRayModel* p); + void RegisterExtraParticle(const G4ParticleDefinition* aParticle, G4VEnergyLossProcess* p); @@ -296,6 +301,7 @@ private: std::vector emp_vector; std::vector mod_vector; std::vector fmod_vector; + std::vector xray_vector; std::vector p_vector; std::map > loss_map; diff --git a/source/processes/electromagnetic/utils/include/G4OpticalParameters.hh b/source/processes/electromagnetic/utils/include/G4OpticalParameters.hh index 0438633dc3..47794b25a0 100644 --- a/source/processes/electromagnetic/utils/include/G4OpticalParameters.hh +++ b/source/processes/electromagnetic/utils/include/G4OpticalParameters.hh @@ -56,6 +56,7 @@ #include "G4ThreeVector.hh" #include "G4Threading.hh" #include +#include class G4OpticalParametersMessenger; class G4StateManager; @@ -73,6 +74,12 @@ enum G4OpticalProcessIndex kNoProcess ///< Number of processes, no selected process }; +enum G4XRayModelType +{ + kCerenkovDefault = 0, // default model + kScintillationDefault, // default model +}; + /// Return the name for a given optical process index G4String G4OpticalProcessName(G4int); @@ -177,6 +184,11 @@ class G4OpticalParameters void SetMieVerboseLevel(G4int); G4int GetMieVerboseLevel() const; + // active volumes + const std::vector >& + ActiveVolumes() const; + void SetActiveVolume(const G4String& name, G4XRayModelType type); + private: G4OpticalParameters(); void Initialise(); @@ -244,6 +256,9 @@ class G4OpticalParameters G4bool boundaryInvokeSD; G4int boundaryVerboseLevel; + //////////////// active volumes + std::vector > xrayVolumes; + #ifdef G4MULTITHREADED static G4Mutex opticalParametersMutex; #endif diff --git a/source/processes/electromagnetic/utils/include/G4OpticalParametersMessenger.hh b/source/processes/electromagnetic/utils/include/G4OpticalParametersMessenger.hh index 258114464f..58e0595c42 100644 --- a/source/processes/electromagnetic/utils/include/G4OpticalParametersMessenger.hh +++ b/source/processes/electromagnetic/utils/include/G4OpticalParametersMessenger.hh @@ -149,6 +149,7 @@ class G4OpticalParametersMessenger : public G4UImessenger G4UIcmdWithAnInteger* fMieVerboseLevelCmd; G4UIcommand* fDumpCmd; + G4UIcommand* fXRayCmd; }; #endif // G4OpticalParametersMessenger_h diff --git a/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh b/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh index e72f919de0..224b894088 100644 --- a/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh +++ b/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh @@ -284,8 +284,10 @@ public: void ActivateSecondaryBiasing(const G4String& region, G4double factor, G4double energyLimit); - inline void SetLossFluctuations(G4bool val); + // obsolete method will be removed in the next major release + void SetLossFluctuations(G4bool); + // interpolation of cross section inline void SetSpline(G4bool val); inline void SetCrossSectionType(G4CrossSectionType val); inline G4CrossSectionType CrossSectionType() const; @@ -294,7 +296,7 @@ public: void SetIonisation(G4bool val); inline G4bool IsIonisationProcess() const; - // Redefine parameteters for stepping control + // Redefine parameteters of stepping control void SetLinearLossLimit(G4double val); void SetStepFunction(G4double v1, G4double v2); void SetLowestEnergyLimit(G4double); @@ -311,6 +313,7 @@ public: void SetInverseRangeTable(G4PhysicsTable* p); void SetLambdaTable(G4PhysicsTable* p); + // set properties of cross section shape void SetTwoPeaksXS(std::vector*); void SetEnergyOfCrossSectionMax(std::vector*); @@ -446,6 +449,7 @@ private: const std::vector* theDensityIdx = nullptr; const std::vector* theDensityFactor = nullptr; const G4DataVector* theCuts = nullptr; + const std::vector* theFluctuationFlags = nullptr; std::vector* theEnergyOfCrossSectionMax = nullptr; std::vector* fXSpeaks = nullptr; @@ -517,8 +521,9 @@ private: G4bool weightFlag = false; G4bool isMaster = false; G4bool baseMat = false; + + // flags allowing define table parameters individual for the process G4bool actLinLossLimit = false; - G4bool actLossFluc = false; G4bool actBinning = false; G4bool actMinKinEnergy = false; G4bool actMaxKinEnergy = false; @@ -859,14 +864,6 @@ G4VEnergyLossProcess::SecondaryParticle() const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4VEnergyLossProcess::SetLossFluctuations(G4bool val) -{ - lossFluctuationFlag = val; - actLossFluc = true; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - inline void G4VEnergyLossProcess::SetSpline(G4bool val) { spline = val; diff --git a/source/processes/electromagnetic/utils/include/G4VXRayModel.hh b/source/processes/electromagnetic/utils/include/G4VXRayModel.hh new file mode 100644 index 0000000000..de758b20d7 --- /dev/null +++ b/source/processes/electromagnetic/utils/include/G4VXRayModel.hh @@ -0,0 +1,121 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ------------------------------------------------------------------- +// +// GEANT4 Class header file +// +// +// File name: G4VXRayModel +// +// Author: Vladimir Ivanchenko +// +// Creation date: 28.04.2025 +// +// +// Class Description: +// +// Abstract interface to a X-Ray production model + +// ------------------------------------------------------------------- +// + +#ifndef G4VXRayModel_h +#define G4VXRayModel_h 1 + +#include "globals.hh" +#include + +class G4LogicalVolume; +class G4ParticleDefinition; +class G4DynamicParticle; +class G4LossTableManager; +class G4Track; +class G4Step; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4VXRayModel +{ + +public: + + explicit G4VXRayModel(const G4String& nam); + + G4VXRayModel(const G4VXRayModel&); + + virtual ~G4VXRayModel(); + + // return minimal beta for Cerenkov in these volumes + G4double Initialise(std::vector*); + virtual G4double InitialiseModel() = 0; + + // check applicability and propose step limit, which may be DBL_MAX + // if these methods return "false", then sampling of X-rays not possible + G4bool StepLimit(const G4LogicalVolume*, const G4Track&, + G4double preStepBeta, G4double& limit); + virtual G4bool StepLimitForVolume(G4double& limit) = 0; + + // sampling is called if StepLimit(..) returns "true" + // produced X-rays are inside vector out + // each photon has time, position, and other parameters within the step + virtual void SampleXRays(std::vector& out, const G4Step&) = 0; + + // for automatic documentation + virtual void ModelDescription(std::ostream& outFile) const; + + const G4String& GetName() const { return pName; }; + + G4int GetType() const { return pTypeInt; }; + + // hide assignment operator + G4VXRayModel& operator=(const G4VXRayModel& right) = delete; + +private: + + void Register(); + +protected: + + std::vector* pLogicalVolumes{nullptr}; + G4LossTableManager* pEmManager{nullptr}; + const G4LogicalVolume* pCurrentLV{nullptr}; + const G4Track* pCurrentTrack{nullptr}; + G4double pBetaMin{1.0}; + G4double pPreStepBeta{0.0}; + G4double pMaxBetaChange{0.1}; + + G4int pMaxPhotons{100}; + G4int pNumPhotons{0}; + + G4int pTypeInt{0}; + G4int pVerbose{1}; + G4bool isMaster{false}; + const G4String pName; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +#endif diff --git a/source/processes/electromagnetic/utils/sources.cmake b/source/processes/electromagnetic/utils/sources.cmake index 5822fb5090..fc196b1342 100644 --- a/source/processes/electromagnetic/utils/sources.cmake +++ b/source/processes/electromagnetic/utils/sources.cmake @@ -53,6 +53,7 @@ geant4_add_module(G4emutils G4VMultipleScattering.hh G4VPositronAtRestModel.hh G4VSubCutProducer.hh + G4VXRayModel.hh G4ionEffectiveCharge.hh SOURCES G4AngleDirect.cc @@ -92,6 +93,7 @@ geant4_add_module(G4emutils G4VEnergyLossProcess.cc G4VMscModel.cc G4VMultipleScattering.cc + G4VXRayModel.cc G4ionEffectiveCharge.cc) geant4_module_link_libraries(G4emutils diff --git a/source/processes/electromagnetic/utils/src/G4EmDataHandler.cc b/source/processes/electromagnetic/utils/src/G4EmDataHandler.cc index 8d67585679..81bab290a7 100644 --- a/source/processes/electromagnetic/utils/src/G4EmDataHandler.cc +++ b/source/processes/electromagnetic/utils/src/G4EmDataHandler.cc @@ -56,7 +56,8 @@ G4EmDataHandler::G4EmDataHandler(std::size_t n, const G4String& nam) data.resize(n, nullptr); fMaxXS = new std::vector; fXSpeaks = new std::vector; - G4EmDataRegistry::Instance()->Register(this); + fRegistry = G4EmDataRegistry::Instance(); + fRegistry->Register(this); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -77,7 +78,7 @@ G4EmDataHandler::~G4EmDataHandler() } } } - + fRegistry->DeRegister(this); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -98,7 +99,9 @@ void G4EmDataHandler::UpdateTable(G4PhysicsTable* ptr, std::size_t idx) { // update table pointer but not delete previous if (idx < tLength) { - if (ptr != data[idx]) { data[idx] = ptr; } + if (ptr != data[idx]) { + data[idx] = ptr; + } data[idx] = G4PhysicsTableHelper::PreparePhysicsTable(data[idx]); } else { G4cout << "### G4EmDataHandler::UpdateTable fail for idx=" << idx diff --git a/source/processes/electromagnetic/utils/src/G4EmDataRegistry.cc b/source/processes/electromagnetic/utils/src/G4EmDataRegistry.cc index 2b6f07afe7..f5dcf08173 100644 --- a/source/processes/electromagnetic/utils/src/G4EmDataRegistry.cc +++ b/source/processes/electromagnetic/utils/src/G4EmDataRegistry.cc @@ -62,7 +62,11 @@ G4EmDataRegistry::G4EmDataRegistry() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4EmDataRegistry::~G4EmDataRegistry() -{} +{ + for (auto const & p : fDataHandlers) { + delete p; + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -95,6 +99,20 @@ void G4EmDataRegistry::Register(G4EmDataHandler* ptr) fDataHandlers.push_back(ptr); } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDataRegistry::DeRegister(G4EmDataHandler* ptr) +{ + if (nullptr == ptr) { return; } + std::size_t n = fDataHandlers.size(); + for (std::size_t i = 0; i < n; ++i) { + if (fDataHandlers[i] == ptr) { + fDataHandlers[i] = nullptr; + return; + } + } +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4EmDataHandler* G4EmDataRegistry::EmDataHandler(const G4String& nam) diff --git a/source/processes/electromagnetic/utils/src/G4EmParameters.cc b/source/processes/electromagnetic/utils/src/G4EmParameters.cc index 169de1a037..19b33beaaa 100644 --- a/source/processes/electromagnetic/utils/src/G4EmParameters.cc +++ b/source/processes/electromagnetic/utils/src/G4EmParameters.cc @@ -50,6 +50,7 @@ #include "G4EmExtraParameters.hh" #include "G4EmLowEParameters.hh" #include "G4EmParametersMessenger.hh" +#include "G4EmUtility.hh" #include "G4NistManager.hh" #include "G4RegionStore.hh" #include "G4Region.hh" @@ -719,7 +720,7 @@ G4double G4EmParameters::MaxEnergyFor5DMuPair() const void G4EmParameters::SetLinearLossLimit(G4double val) { if(IsLocked()) { return; } - if(val > 0.0 && val < 0.5) { + if(val > 0.0 && val < 1.0) { linLossLimit = val; } else { G4ExceptionDescription ed; @@ -1365,6 +1366,22 @@ const G4String& G4EmParameters::GetDirLEDATA() const return fDirLEDATA; } +void G4EmParameters::SetFluctuationsForRegion(const G4String& nam, G4bool flag) +{ + if (IsLocked()) { return; } + G4String ss = fBParameters->CheckRegion(nam); + if (!fluctRegions.empty()) { + for (auto const& p : fluctRegions) { if (p.first == ss) { return; } } + } + fluctRegions.push_back(std::make_pair(ss, flag)); +} + +void G4EmParameters::DefineFluctuationFlags(std::vector* theFlags) +{ + if (fluctRegions.empty()) { return; } + G4EmUtility::FillFluctFlags(fluctRegions, theFlags); +} + void G4EmParameters::StreamInfo(std::ostream& os) const { G4long prec = os.precision(5); @@ -1417,7 +1434,7 @@ void G4EmParameters::StreamInfo(std::ostream& os) const os << "5D gamma conversion limit for muon pair " << max5DEnergyForMuPair/CLHEP::GeV << " GeV\n"; } - os << "Use Ricardo-Gerardo pair production model " + os << "Use RiGe 5D e+e- pair production model by muons " << fUseRiGePairProductionModel << "\n"; os << "Livermore data directory " << fCParameters->LivermoreDataDir() << "\n"; @@ -1442,11 +1459,29 @@ void G4EmParameters::StreamInfo(std::ostream& os) const os << "Lowest muon/hadron kinetic energy " < 0 && (n/2)*2 == n) { + os << "\n" << " "; + } + ++n; + } + } + os << "\n"; + } os << "Use built-in Birks satuaration " << birks << "\n"; os << "Build CSDA range enabled " <AvailableForStates(G4State_PreInit); f3gCmd->SetToBeBroadcasted(false); + fRiGeCmd = new G4UIcmdWithABool("/process/em/PairProd5D",this); + fRiGeCmd->SetGuidance("Enable/disable 5D model for e+e- pair production by muons"); + fRiGeCmd->SetParameterName("ee5D",true); + fRiGeCmd->SetDefaultValue(false); + fRiGeCmd->AvailableForStates(G4State_PreInit); + fRiGeCmd->SetToBeBroadcasted(false); + minEnCmd = new G4UIcmdWithADoubleAndUnit("/process/eLoss/minKinEnergy",this); minEnCmd->SetGuidance("Set the min kinetic energy for EM tables"); minEnCmd->SetParameterName("emin",true); @@ -452,6 +459,18 @@ G4EmParametersMessenger::G4EmParametersMessenger(G4EmParameters* ptr) fluc1Cmd->AvailableForStates(G4State_PreInit); fluc1Cmd->SetToBeBroadcasted(false); + fluc2Cmd = new G4UIcmdWithAString("/process/eLoss/enableFluctForRegion",this); + fluc2Cmd->SetGuidance("Enable dEdx fluctuations for G4Region"); + fluc2Cmd->SetParameterName("Fluc2",true); + fluc2Cmd->AvailableForStates(G4State_PreInit); + fluc2Cmd->SetToBeBroadcasted(false); + + fluc3Cmd = new G4UIcmdWithAString("/process/eLoss/disableFluctForRegion",this); + fluc3Cmd->SetGuidance("Disable dEdx fluctuations for G4Region"); + fluc3Cmd->SetParameterName("Fluc3",true); + fluc3Cmd->AvailableForStates(G4State_PreInit); + fluc3Cmd->SetToBeBroadcasted(false); + posiCmd = new G4UIcmdWithAString("/process/em/setPositronAtRestModel",this); posiCmd->SetGuidance("Define model of positron annihilation at rest"); posiCmd->SetParameterName("Posi",true); @@ -510,6 +529,7 @@ G4EmParametersMessenger::~G4EmParametersMessenger() delete mudatCmd; delete peKCmd; delete f3gCmd; + delete fRiGeCmd; delete mscPCmd; delete pepicsCmd; @@ -549,6 +569,8 @@ G4EmParametersMessenger::~G4EmParametersMessenger() delete nffCmd; delete ssCmd; delete fluc1Cmd; + delete fluc2Cmd; + delete fluc3Cmd; delete posiCmd; delete dumpCmd; @@ -605,6 +627,8 @@ void G4EmParametersMessenger::SetNewValue(G4UIcommand* command, theParameters->SetPhotoeffectBelowKShell(peKCmd->GetNewBoolValue(newValue)); } else if (command == f3gCmd) { theParameters->Set3GammaAnnihilationOnFly(f3gCmd->GetNewBoolValue(newValue)); + } else if (command == fRiGeCmd) { + theParameters->SetUseRiGePairProductionModel(fRiGeCmd->GetNewBoolValue(newValue)); } else if (command == mscPCmd) { theParameters->SetMscPositronCorrection(mscPCmd->GetNewBoolValue(newValue)); } else if (command == pepicsCmd) { @@ -743,6 +767,10 @@ void G4EmParametersMessenger::SetNewValue(G4UIcommand* command, if(newValue == "Dummy") { x = fDummyFluctuation; } else if(newValue == "Urban") { x = fUrbanFluctuation; } theParameters->SetFluctuationType(x); + } else if (command == fluc2Cmd) { + theParameters->SetFluctuationsForRegion(newValue, true); + } else if (command == fluc3Cmd) { + theParameters->SetFluctuationsForRegion(newValue, false); } else if (command == posiCmd) { G4PositronAtRestModelType x = fSimplePositronium; if (newValue == "Allison") { x = fAllisonPositronium; } diff --git a/source/processes/electromagnetic/utils/src/G4EmUtility.cc b/source/processes/electromagnetic/utils/src/G4EmUtility.cc index 9549596ddc..5b27857a9c 100644 --- a/source/processes/electromagnetic/utils/src/G4EmUtility.cc +++ b/source/processes/electromagnetic/utils/src/G4EmUtility.cc @@ -288,6 +288,7 @@ G4EmUtility::FillPeaksStructure(G4PhysicsTable* p, G4LossTableBuilder* bld) } // case of no 1st peak in all vectors if(!isDeep) { + for (G4int k=0; k >& reg, + std::vector* flags) +{ + G4RegionStore* regStore = G4RegionStore::GetInstance(); + G4ProductionCutsTable* theCoupleTable= + G4ProductionCutsTable::GetProductionCutsTable(); + std::size_t numOfCouples = theCoupleTable->GetTableSize(); + for (std::size_t i = 0; i < numOfCouples; ++i) { + auto couple = theCoupleTable->GetMaterialCutsCouple((G4int)i); + auto mat = const_cast(couple->GetMaterial()); + for (auto const& r : reg) { + const G4String& rname = r.first; + G4Region* region = regStore->GetRegion(rname, false); + if (nullptr != region) { + auto couple1 = region->FindCouple(mat); + if (couple1 == couple) { + (*flags)[couple->GetIndex()] = r.second; + break; + } + } + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc b/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc index 9e0df9df8b..62590e8a44 100644 --- a/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc +++ b/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc @@ -68,8 +68,9 @@ G4bool G4LossTableBuilder::baseMatFlag = false; std::vector* G4LossTableBuilder::theDensityFactor = nullptr; -std::vector* G4LossTableBuilder::theDensityIdx = nullptr; -std::vector* G4LossTableBuilder::theFlag = nullptr; +std::vector* G4LossTableBuilder::theDensityIdx = nullptr; +std::vector* G4LossTableBuilder::theFlag = nullptr; +std::vector* G4LossTableBuilder::theFluct = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -81,6 +82,7 @@ G4LossTableBuilder::G4LossTableBuilder(G4bool master) theDensityFactor = new std::vector; theDensityIdx = new std::vector; theFlag = new std::vector; + theFluct = new std::vector; } } @@ -92,9 +94,11 @@ G4LossTableBuilder::~G4LossTableBuilder() delete theDensityFactor; delete theDensityIdx; delete theFlag; + delete theFluct; theDensityFactor = nullptr; theDensityIdx = nullptr; theFlag = nullptr; + theFluct = nullptr; } } @@ -114,6 +118,13 @@ const std::vector* G4LossTableBuilder::GetDensityFactors() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +const std::vector* G4LossTableBuilder::GetFluctuationFlags() +{ + return theFluct; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + G4bool G4LossTableBuilder::GetFlag(std::size_t idx) { return (idx < theFlag->size()) ? (*theFlag)[idx] : false; @@ -304,8 +315,11 @@ void G4LossTableBuilder::InitialiseBaseMaterials(const G4PhysicsTable* table) if(nFlags != nCouples) { isInitialized = false; } if(isInitialized) { return; } - // reserve memory + // reserve and fill memory theFlag->resize(nCouples, true); + theFluct->resize(nCouples, theParameters->LossFluctuation()); + theParameters->DefineFluctuationFlags(theFluct); + theDensityFactor->resize(nCouples,1.0); theDensityIdx->resize(nCouples, 0); diff --git a/source/processes/electromagnetic/utils/src/G4LossTableManager.cc b/source/processes/electromagnetic/utils/src/G4LossTableManager.cc index cd48a23068..aeba7f429f 100644 --- a/source/processes/electromagnetic/utils/src/G4LossTableManager.cc +++ b/source/processes/electromagnetic/utils/src/G4LossTableManager.cc @@ -49,6 +49,7 @@ #include "G4VMultipleScattering.hh" #include "G4VEmProcess.hh" +#include "G4VXRayModel.hh" #include "G4EmParameters.hh" #include "G4EmSaturation.hh" @@ -59,6 +60,7 @@ #include "G4LossTableBuilder.hh" #include "G4VAtomDeexcitation.hh" #include "G4VSubCutProducer.hh" +#include "G4VXRayModel.hh" #include "G4PhysicsTable.hh" #include "G4ParticleDefinition.hh" @@ -102,6 +104,7 @@ G4LossTableManager::~G4LossTableManager() for (auto const & p : msc_vector) { delete p; } for (auto const & p : emp_vector) { delete p; } for (auto const & p : p_vector) { delete p; } + for (auto const & p : xray_vector) { delete p; } std::size_t mod = mod_vector.size(); std::size_t fmod = fmod_vector.size(); @@ -342,6 +345,9 @@ void G4LossTableManager::DeRegister(G4VProcess* p) void G4LossTableManager::Register(G4VEmModel* p) { + if (nullptr == p) { return; } + std::size_t n = mod_vector.size(); + for (std::size_t i=0; i 1) { G4cout << "G4LossTableManager::Register G4VEmModel : " @@ -353,7 +359,6 @@ void G4LossTableManager::Register(G4VEmModel* p) void G4LossTableManager::DeRegister(G4VEmModel* p) { - //G4cout << "G4LossTableManager::DeRegister G4VEmModel : " << p << G4endl; std::size_t n = mod_vector.size(); for (std::size_t i=0; i 1) { G4cout << "G4LossTableManager::Register G4VEmFluctuationModel : " @@ -380,7 +388,37 @@ void G4LossTableManager::DeRegister(G4VEmFluctuationModel* p) { std::size_t n = fmod_vector.size(); for (std::size_t i=0; i 1) { + G4cout << "G4LossTableManager::Register G4VXRayModel : " + << p->GetName() << " " << xray_vector.size() << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void G4LossTableManager::DeRegister(G4VXRayModel* p) +{ + std::size_t n = xray_vector.size(); + for (std::size_t i=0; iPrepareModels(particle, p); } + if ( -1 == run ) { + if (nullptr != emConfigurator) { + emConfigurator->PrepareModels(particle, p); + } // initialise particles for given process for (G4int j=0; jPrepareModels(particle, p); } + if (nullptr != emConfigurator) { + emConfigurator->PrepareModels(particle, p); + } } ResetParameters(); diff --git a/source/processes/electromagnetic/utils/src/G4OpticalParameters.cc b/source/processes/electromagnetic/utils/src/G4OpticalParameters.cc index 7e7ba3aa41..51a6aac26b 100644 --- a/source/processes/electromagnetic/utils/src/G4OpticalParameters.cc +++ b/source/processes/electromagnetic/utils/src/G4OpticalParameters.cc @@ -470,6 +470,22 @@ G4int G4OpticalParameters::GetMieVerboseLevel() const return mieVerboseLevel; } +const std::vector >& +G4OpticalParameters::ActiveVolumes() const +{ + return xrayVolumes; +} + +void G4OpticalParameters::SetActiveVolume(const G4String& lvname, + G4XRayModelType type) +{ + if(IsLocked()) { + return; + } + xrayVolumes.push_back(std::make_pair(type, lvname)); +} + + void G4OpticalParameters::PrintWarning(G4ExceptionDescription& ed) const { G4Exception("G4EmParameters", "Optical0020", JustWarning, ed); diff --git a/source/processes/electromagnetic/utils/src/G4OpticalParametersMessenger.cc b/source/processes/electromagnetic/utils/src/G4OpticalParametersMessenger.cc index bb50406f87..0a243e6cf6 100644 --- a/source/processes/electromagnetic/utils/src/G4OpticalParametersMessenger.cc +++ b/source/processes/electromagnetic/utils/src/G4OpticalParametersMessenger.cc @@ -111,6 +111,18 @@ G4OpticalParametersMessenger::G4OpticalParametersMessenger( fDumpCmd = new G4UIcommand("/process/optical/printParameters", this); fDumpCmd->SetGuidance("Print all optical parameters."); + fDumpCmd->SetToBeBroadcasted(false); + + fXRayCmd = new G4UIcommand("/process/optical/XRayModel", this); + fXRayCmd->SetGuidance("Add XRay model per G4LogicalVolume."); + fXRayCmd->SetGuidance(" lvName : G4LogicalVolume name"); + fXRayCmd->SetGuidance(" xrayType : X-Ray model type"); + fXRayCmd->AvailableForStates(G4State_PreInit); + fXRayCmd->SetToBeBroadcasted(false); + auto lvName = new G4UIparameter("lvName",'s',false); + fXRayCmd->SetParameter(lvName); + auto xrayT = new G4UIparameter("xrayT",'s',false); + fXRayCmd->SetParameter(xrayT); // Cerenkov //////////////////// fCerenkovMaxPhotonsCmd = @@ -291,6 +303,7 @@ G4OpticalParametersMessenger::~G4OpticalParametersMessenger() delete fActivateProcessCmd; delete fVerboseCmd; delete fDumpCmd; + delete fXRayCmd; delete fCerenkovMaxPhotonsCmd; delete fCerenkovMaxBetaChangeCmd; delete fCerenkovStackPhotonsCmd; @@ -329,6 +342,31 @@ void G4OpticalParametersMessenger::SetNewValue(G4UIcommand* command, G4bool value = G4UIcommand::ConvertToBool(flag); params->SetProcessActivation(pn, value); } + else if(command == fXRayCmd) + { + std::istringstream is(newValue.data()); + G4String lv; + G4String sss; + is >> lv >> sss; + G4XRayModelType type; + if (sss == "CerenkovDefault") + { + type = kCerenkovDefault; + } + else if (sss == "ScintillationDefault") + { + type = kScintillationDefault; + } + else + { + G4cout << "G4OpticalParametersMessenger::SetNewValue: " + << " fail for /process/optical/XRayModel \n" + << " type " << sss << " is unknown, no model assigned." + << G4endl; + return; + } + params->SetActiveVolume(lv, type); + } else if(command == fVerboseCmd) { params->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValue)); diff --git a/source/processes/electromagnetic/utils/src/G4VEmProcess.cc b/source/processes/electromagnetic/utils/src/G4VEmProcess.cc index a83410c9a7..9f4f4ac13e 100644 --- a/source/processes/electromagnetic/utils/src/G4VEmProcess.cc +++ b/source/processes/electromagnetic/utils/src/G4VEmProcess.cc @@ -111,8 +111,7 @@ G4VEmProcess::G4VEmProcess(const G4String& name, G4ProcessType type): G4VEmProcess::~G4VEmProcess() { - if(isTheMaster) { - delete theData; + if (isTheMaster) { delete theEnergyOfCrossSectionMax; } delete modelManager; @@ -353,6 +352,10 @@ void G4VEmProcess::StartTracking(G4Track* track) biasManager->ResetForcedInteraction(); } } + for (G4int i=0; iStartTracking(track); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -369,6 +372,9 @@ G4double G4VEmProcess::PostStepGetPhysicalInteractionLength( preStepKinEnergy = track.GetKineticEnergy(); const G4double scaledEnergy = preStepKinEnergy*massRatio; SelectModel(scaledEnergy, currentCoupleIndex); + + // In models applied to ions the dynamic charge is needed + if (isIon) { currentModel->ChargeSquareRatio(track); } /* G4cout << "PostStepGetPhysicalInteractionLength: idx= " << currentCoupleIndex << " couple: " << currentCouple << G4endl; diff --git a/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc b/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc index 540c9a5f25..8ab8e5f7d9 100644 --- a/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc +++ b/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc @@ -128,6 +128,7 @@ G4VEnergyLossProcess::G4VEnergyLossProcess(const G4String& name, G4LossTableBuilder* bld = lManager->GetTableBuilder(); theDensityFactor = bld->GetDensityFactors(); theDensityIdx = bld->GetCoupleIndexes(); + theFluctuationFlags = bld->GetFluctuationFlags(); scTracks.reserve(10); secParticles.reserve(12); @@ -139,7 +140,6 @@ G4VEnergyLossProcess::G4VEnergyLossProcess(const G4String& name, G4VEnergyLossProcess::~G4VEnergyLossProcess() { if (isMaster) { - if(nullptr == baseParticle) { delete theData; } delete theEnergyOfCrossSectionMax; if(nullptr != fXSpeaks) { for(auto const & v : *fXSpeaks) { delete v; } @@ -227,7 +227,7 @@ G4VEnergyLossProcess::PreparePhysicsTable(const G4ParticleDefinition& part) InitialiseEnergyLossProcess(particle, baseParticle); // parameters of the process - if(!actLossFluc) { lossFluctuationFlag = theParameters->LossFluctuation(); } + lossFluctuationFlag = theParameters->LossFluctuation(); useCutAsFinalRange = theParameters->UseCutAsFinalRange(); if(!actMinKinEnergy) { minKinEnergy = theParameters->MinKinEnergy(); } if(!actMaxKinEnergy) { maxKinEnergy = theParameters->MaxKinEnergy(); } @@ -310,13 +310,6 @@ G4VEnergyLossProcess::PreparePhysicsTable(const G4ParticleDefinition& part) if(isIonisation) { subcutProducer = lManager->SubCutProducer(); } - if(1 == nSCoffRegions) { - if((*scoffRegions)[0]->GetName() == "DefaultRegionForTheWorld") { - delete scoffRegions; - scoffRegions = nullptr; - nSCoffRegions = 0; - } - } if(1 < verboseLevel) { G4cout << "G4VEnergyLossProcess::PrepearPhysicsTable() is done " @@ -809,7 +802,7 @@ G4VParticleChange* G4VEnergyLossProcess::AlongStepDoIt(const G4Track& track, if (useDeexcitation) { atomDeexcitation->AlongStepDeexcitation(scTracks, step, eloss, (G4int)currentCoupleIndex); - if(scTracks.size() > 0) { FillSecondariesAlongStep(weight); } + if (!scTracks.empty()) { FillSecondariesAlongStep(weight); } eloss = std::max(eloss, 0.0); } fParticleChange.SetProposedKineticEnergy(0.0); @@ -871,7 +864,7 @@ G4VParticleChange* G4VEnergyLossProcess::AlongStepDoIt(const G4Track& track, if(eloss >= preStepKinEnergy) { eloss = preStepKinEnergy; - } else if (lossFluctuationFlag) { + } else if ((*theFluctuationFlags)[currentCoupleIndex]) { const G4double tmax = currentModel->MaxSecondaryKinEnergy(dynParticle); const G4double tcut = std::min(cut, tmax); G4VEmFluctuationModel* fluc = currentModel->GetModelOfFluctuations(); @@ -1423,7 +1416,15 @@ void G4VEnergyLossProcess::SetIonisation(G4bool val) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - void G4VEnergyLossProcess::SetLinearLossLimit(G4double val) +void G4VEnergyLossProcess::SetLossFluctuations(G4bool) +{ + G4cout << "### G4VEnergyLossProcess::SetLossFluctuations has no effect and " + << "will be removed for the next major release" << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4VEnergyLossProcess::SetLinearLossLimit(G4double val) { if(0.0 < val && val < 1.0) { linLossLimit = val; @@ -1435,11 +1436,11 @@ void G4VEnergyLossProcess::SetIonisation(G4bool val) void G4VEnergyLossProcess::SetStepFunction(G4double v1, G4double v2) { - if(0.0 < v1 && 0.0 < v2) { + if(0.0 < v1 && 1.0 >= v1 && 0.0 < v2) { dRoverRange = std::min(1.0, v1); finalRange = std::min(v2, 1.e+50); } else { - PrintWarning("SetStepFunctionV1", v1); + PrintWarning("SetStepFunctionV1", v1); PrintWarning("SetStepFunctionV2", v2); } } diff --git a/examples/extended/parallel/TBB/B2b/src/B2TrackerHit.cc b/source/processes/electromagnetic/utils/src/G4VXRayModel.cc similarity index 54% rename from examples/extended/parallel/TBB/B2b/src/B2TrackerHit.cc rename to source/processes/electromagnetic/utils/src/G4VXRayModel.cc index 7fc9ee65ef..8065034bb4 100644 --- a/examples/extended/parallel/TBB/B2b/src/B2TrackerHit.cc +++ b/source/processes/electromagnetic/utils/src/G4VXRayModel.cc @@ -23,84 +23,102 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// ------------------------------------------------------------------- +// +// GEANT4 Class file +// +// File name: G4VXRayModel +// +// Author: Vladimir Ivanchenko +// +// Creation date: 28.04.2025 +// +// ------------------------------------------------------------------- // -/// \file B2TrackerHit.cc -/// \brief Implementation of the B2TrackerHit class -#include "B2TrackerHit.hh" - -#include "G4Circle.hh" -#include "G4Colour.hh" -#include "G4UnitsTable.hh" -#include "G4VVisManager.hh" -#include "G4VisAttributes.hh" - -#include - -G4ThreadLocal G4Allocator* B2TrackerHitAllocator = 0; +#include "G4VXRayModel.hh" +#include "G4LogicalVolume.hh" +#include "G4LossTableManager.hh" +#include "G4ParticleDefinition.hh" +#include "G4DynamicParticle.hh" +#include "G4OpticalParameters.hh" +#include "G4Track.hh" +#include //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2TrackerHit::B2TrackerHit() - : G4VHit(), fTrackID(-1), fChamberNb(-1), fEdep(0.), fPos(G4ThreeVector()) -{} - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -B2TrackerHit::~B2TrackerHit() {} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -B2TrackerHit::B2TrackerHit(const B2TrackerHit& right) : G4VHit() +G4VXRayModel::G4VXRayModel(const G4String& nam) + : pName(nam) { - fTrackID = right.fTrackID; - fChamberNb = right.fChamberNb; - fEdep = right.fEdep; - fPos = right.fPos; + Register(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const B2TrackerHit& B2TrackerHit::operator=(const B2TrackerHit& right) +G4VXRayModel::G4VXRayModel(const G4VXRayModel& right) + : pLogicalVolumes(nullptr), + pCurrentLV(nullptr), + pCurrentTrack(nullptr), + pBetaMin(1.0), + pPreStepBeta(0.0), + pMaxBetaChange(0.1), + pMaxPhotons(100), + pTypeInt(0), + pVerbose(1), + isMaster(false), + pName(right.pName) { - fTrackID = right.fTrackID; - fChamberNb = right.fChamberNb; - fEdep = right.fEdep; - fPos = right.fPos; - - return *this; + Register(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool B2TrackerHit::operator==(const B2TrackerHit& right) const +G4VXRayModel::~G4VXRayModel() { - return (this == &right) ? true : false; + pEmManager->DeRegister(this); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void B2TrackerHit::Draw() +void G4VXRayModel::Register() { - G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if (pVVisManager) { - G4Circle circle(fPos); - circle.SetScreenSize(4.); - circle.SetFillStyle(G4Circle::filled); - G4Colour colour(1., 0., 0.); - G4VisAttributes attribs(colour); - circle.SetVisAttributes(attribs); - pVVisManager->Draw(circle); - } + pEmManager = G4LossTableManager::Instance(); + pEmManager->Register(this); + isMaster = pEmManager->IsMaster(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void B2TrackerHit::Print() +G4double G4VXRayModel::Initialise(std::vector* ptr) { - G4cout << " trackID: " << fTrackID << " chamberNb: " << fChamberNb << "Edep: " << std::setw(7) - << G4BestUnit(fEdep, "Energy") << " Position: " << std::setw(7) - << G4BestUnit(fPos, "Length") << G4endl; + pLogicalVolumes = ptr; + auto params = G4OpticalParameters::Instance(); + pMaxBetaChange = params->GetCerenkovMaxBetaChange(); + pMaxPhotons = params->GetCerenkovMaxPhotonsPerStep(); + pVerbose = params->GetCerenkovVerboseLevel(); + + pBetaMin = InitialiseModel(); + return pBetaMin; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool G4VXRayModel::StepLimit(const G4LogicalVolume* lv, const G4Track& track, + G4double preStepBeta, G4double& limit) +{ + if (preStepBeta <= pBetaMin) { return false; } + pCurrentLV = lv; + pCurrentTrack = &track; + pPreStepBeta = preStepBeta; + return StepLimitForVolume(limit); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4VXRayModel::ModelDescription(std::ostream& outFile) const +{ + outFile << "The description for this model has not been written yet.\n"; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/xrays/History b/source/processes/electromagnetic/xrays/History index 16a2bc4fe4..cfa07a2bc5 100644 --- a/source/processes/electromagnetic/xrays/History +++ b/source/processes/electromagnetic/xrays/History @@ -6,6 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +##2025-05-07 Soon Yung Jun (xrays-V11-03-00) +- 1) G4Scintillation: Build the scintillation integral tables for materials + that have non-empty material property tables and add BuildInverseCdfTable. + 2) G4Cerenkov: Build the Cerenkov integral only for materials that have + non-empty material property tables + ##2024-09-03 Dmitri Konstantinov (xrays-V11-02-04) - G4VTRModel: Added empty implementation {} to GenerateSecondaries method to resolve linker error encountered when compiling against Geant4 with clang diff --git a/source/processes/electromagnetic/xrays/include/G4Cerenkov.hh b/source/processes/electromagnetic/xrays/include/G4Cerenkov.hh index 419f1e84bb..dde2b5927a 100644 --- a/source/processes/electromagnetic/xrays/include/G4Cerenkov.hh +++ b/source/processes/electromagnetic/xrays/include/G4Cerenkov.hh @@ -50,6 +50,8 @@ #include "G4MaterialPropertyVector.hh" #include "G4VProcess.hh" +#include + class G4Material; class G4ParticleDefinition; class G4PhysicsTable; @@ -168,6 +170,7 @@ class G4Cerenkov : public G4VProcess protected: G4PhysicsTable* thePhysicsTable; + std::map fIndexMPT; private: G4double fMaxBetaChange; diff --git a/source/processes/electromagnetic/xrays/include/G4Scintillation.hh b/source/processes/electromagnetic/xrays/include/G4Scintillation.hh index cee41c6762..166d76af0f 100644 --- a/source/processes/electromagnetic/xrays/include/G4Scintillation.hh +++ b/source/processes/electromagnetic/xrays/include/G4Scintillation.hh @@ -55,6 +55,8 @@ #include "G4OpticalPhoton.hh" #include "G4VRestDiscreteProcess.hh" +#include + class G4PhysicsTable; class G4Step; class G4Track; @@ -185,11 +187,18 @@ class G4Scintillation : public G4VRestDiscreteProcess void SetVerboseLevel(G4int); // sets verbosity + private: + void BuildInverseCdfTable(const G4MaterialPropertyVector* MPV, + G4PhysicsFreeVector* vec) const; + // Build the inverse cumulative distribution function (C.D.F.) table + // for the scintillation photon energy spectrum + private: G4PhysicsTable* fIntegralTable1; G4PhysicsTable* fIntegralTable2; G4PhysicsTable* fIntegralTable3; + std::map fIndexMPT; G4EmSaturation* fEmSaturation; const G4ParticleDefinition* opticalphoton = diff --git a/source/processes/electromagnetic/xrays/src/G4Cerenkov.cc b/source/processes/electromagnetic/xrays/src/G4Cerenkov.cc index d4bf747ca0..8fc16eb8fe 100644 --- a/source/processes/electromagnetic/xrays/src/G4Cerenkov.cc +++ b/source/processes/electromagnetic/xrays/src/G4Cerenkov.cc @@ -149,9 +149,20 @@ void G4Cerenkov::BuildPhysicsTable(const G4ParticleDefinition&) const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable(); std::size_t numOfMaterials = G4Material::GetNumberOfMaterials(); - thePhysicsTable = new G4PhysicsTable(numOfMaterials); + // Find the number of materials that have non-empty material property tables + std::size_t numOfMaterialsWithMPT = 0; + for(std::size_t i = 0; i < numOfMaterials; ++i) + { + if(((*theMaterialTable)[i])->GetMaterialPropertiesTable()) + { + ++numOfMaterialsWithMPT; + } + } + + thePhysicsTable = new G4PhysicsTable(numOfMaterialsWithMPT); // loop over materials + std::size_t indexMPT = 0; for(std::size_t i = 0; i < numOfMaterials; ++i) { G4PhysicsFreeVector* cerenkovIntegral = nullptr; @@ -202,12 +213,13 @@ void G4Cerenkov::BuildPhysicsTable(const G4ParticleDefinition&) } } } + // The Cerenkov integral for a given material will be inserted in + // thePhysicsTable according to the position of the material in + // the material table. + thePhysicsTable->insertAt(indexMPT, cerenkovIntegral); + fIndexMPT.insert(std::make_pair(i, indexMPT)); + ++indexMPT; } - - // The Cerenkov integral for a given material will be inserted in - // thePhysicsTable according to the position of the material in - // the material table. - thePhysicsTable->insertAt(i, cerenkovIntegral); } } @@ -411,7 +423,11 @@ G4double G4Cerenkov::PostStepGetPhysicalInteractionLength( std::size_t materialIndex = aMaterial->GetIndex(); // If Physics Vector is not defined no Cerenkov photons - if(!(*thePhysicsTable)[materialIndex]) + const G4MaterialTable* materialTable = G4Material::GetMaterialTable(); + G4MaterialPropertiesTable* MPT = + ((*materialTable)[materialIndex])->GetMaterialPropertiesTable(); + // if(!(*thePhysicsTable)[materialIndex]) + if(!MPT) { return StepLimit; } @@ -518,7 +534,23 @@ G4double G4Cerenkov::GetAverageNumberOfPhotons( std::size_t materialIndex = aMaterial->GetIndex(); // Retrieve the Cerenkov Angle Integrals for this material - G4PhysicsVector* CerenkovAngleIntegrals = ((*thePhysicsTable)(materialIndex)); + auto it = fIndexMPT.find(materialIndex); + + std::size_t indexMPT = 0; + if(it != fIndexMPT.end()) + { + indexMPT = it->second; + } + else + { + G4ExceptionDescription ed; + ed << "G4MaterialPropertiesTable for " << aMaterial->GetName() + << " is not found!" << G4endl; + G4Exception("G4Cerenkov::GetAverageNumberOfPhotons", "Cerenkov01", + FatalException, ed); + } + + G4PhysicsVector* CerenkovAngleIntegrals = ((*thePhysicsTable)(indexMPT)); std::size_t length = CerenkovAngleIntegrals->GetVectorLength(); if(0 == length) diff --git a/source/processes/electromagnetic/xrays/src/G4Scintillation.cc b/source/processes/electromagnetic/xrays/src/G4Scintillation.cc index 5ae8a1db3b..bc58ff89c6 100644 --- a/source/processes/electromagnetic/xrays/src/G4Scintillation.cc +++ b/source/processes/electromagnetic/xrays/src/G4Scintillation.cc @@ -177,42 +177,27 @@ void G4Scintillation::Initialise() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4Scintillation::BuildPhysicsTable(const G4ParticleDefinition&) { - if(fIntegralTable1 != nullptr) - { - fIntegralTable1->clearAndDestroy(); - delete fIntegralTable1; - fIntegralTable1 = nullptr; - } - if(fIntegralTable2 != nullptr) - { - fIntegralTable2->clearAndDestroy(); - delete fIntegralTable2; - fIntegralTable2 = nullptr; - } - if(fIntegralTable3 != nullptr) - { - fIntegralTable3->clearAndDestroy(); - delete fIntegralTable3; - fIntegralTable3 = nullptr; - } - const G4MaterialTable* materialTable = G4Material::GetMaterialTable(); std::size_t numOfMaterials = G4Material::GetNumberOfMaterials(); - // create new physics table - if(!fIntegralTable1) - fIntegralTable1 = new G4PhysicsTable(numOfMaterials); - if(!fIntegralTable2) - fIntegralTable2 = new G4PhysicsTable(numOfMaterials); - if(!fIntegralTable3) - fIntegralTable3 = new G4PhysicsTable(numOfMaterials); - + // Find the number of materials that have non-empty material property tables + std::size_t numOfMaterialsWithMPT = 0; for(std::size_t i = 0; i < numOfMaterials; ++i) { - auto vector1 = new G4PhysicsFreeVector(); - auto vector2 = new G4PhysicsFreeVector(); - auto vector3 = new G4PhysicsFreeVector(); + if(((*materialTable)[i])->GetMaterialPropertiesTable()) + { + ++numOfMaterialsWithMPT; + } + } + // create new physics table + fIntegralTable1 = new G4PhysicsTable(numOfMaterialsWithMPT); + fIntegralTable2 = new G4PhysicsTable(numOfMaterialsWithMPT); + fIntegralTable3 = new G4PhysicsTable(numOfMaterialsWithMPT); + + std::size_t indexMPT = 0; + for(std::size_t i = 0; i < numOfMaterials; ++i) + { // Retrieve vector of scintillation wavelength intensity for // the material from the material's optical properties table. G4MaterialPropertiesTable* MPT = @@ -220,117 +205,47 @@ void G4Scintillation::BuildPhysicsTable(const G4ParticleDefinition&) if(MPT) { - G4MaterialPropertyVector* MPV = - MPT->GetProperty(kSCINTILLATIONCOMPONENT1); - if(MPV) - { - // Retrieve the first intensity point in vector - // of (photon energy, intensity) pairs - G4double currentIN = (*MPV)[0]; - if(currentIN >= 0.0) - { - // Create first (photon energy, Scintillation Integral pair - G4double currentPM = MPV->Energy(0); - G4double currentCII = 0.0; - vector1->InsertValues(currentPM, currentCII); + auto vector1 = new G4PhysicsFreeVector(); + auto vector2 = new G4PhysicsFreeVector(); + auto vector3 = new G4PhysicsFreeVector(); - // Set previous values to current ones prior to loop - G4double prevPM = currentPM; - G4double prevCII = currentCII; - G4double prevIN = currentIN; + BuildInverseCdfTable(MPT->GetProperty(kSCINTILLATIONCOMPONENT1), vector1); + BuildInverseCdfTable(MPT->GetProperty(kSCINTILLATIONCOMPONENT2), vector2); + BuildInverseCdfTable(MPT->GetProperty(kSCINTILLATIONCOMPONENT3), vector3); - // loop over all (photon energy, intensity) - // pairs stored for this material - for(std::size_t ii = 1; ii < MPV->GetVectorLength(); ++ii) - { - currentPM = MPV->Energy(ii); - currentIN = (*MPV)[ii]; - currentCII = - prevCII + 0.5 * (currentPM - prevPM) * (prevIN + currentIN); + fIntegralTable1->insertAt(indexMPT, vector1); + fIntegralTable2->insertAt(indexMPT, vector2); + fIntegralTable3->insertAt(indexMPT, vector3); - vector1->InsertValues(currentPM, currentCII); - - prevPM = currentPM; - prevCII = currentCII; - prevIN = currentIN; - } - } - } - - MPV = MPT->GetProperty(kSCINTILLATIONCOMPONENT2); - if(MPV) - { - // Retrieve the first intensity point in vector - // of (photon energy, intensity) pairs - G4double currentIN = (*MPV)[0]; - if(currentIN >= 0.0) - { - // Create first (photon energy, Scintillation Integral pair - G4double currentPM = MPV->Energy(0); - G4double currentCII = 0.0; - vector2->InsertValues(currentPM, currentCII); - - // Set previous values to current ones prior to loop - G4double prevPM = currentPM; - G4double prevCII = currentCII; - G4double prevIN = currentIN; - - // loop over all (photon energy, intensity) - // pairs stored for this material - for(std::size_t ii = 1; ii < MPV->GetVectorLength(); ++ii) - { - currentPM = MPV->Energy(ii); - currentIN = (*MPV)[ii]; - currentCII = - prevCII + 0.5 * (currentPM - prevPM) * (prevIN + currentIN); - - vector2->InsertValues(currentPM, currentCII); - - prevPM = currentPM; - prevCII = currentCII; - prevIN = currentIN; - } - } - } - MPV = MPT->GetProperty(kSCINTILLATIONCOMPONENT3); - if(MPV) - { - // Retrieve the first intensity point in vector - // of (photon energy, intensity) pairs - G4double currentIN = (*MPV)[0]; - if(currentIN >= 0.0) - { - // Create first (photon energy, Scintillation Integral pair - G4double currentPM = MPV->Energy(0); - G4double currentCII = 0.0; - vector3->InsertValues(currentPM, currentCII); - - // Set previous values to current ones prior to loop - G4double prevPM = currentPM; - G4double prevCII = currentCII; - G4double prevIN = currentIN; - - // loop over all (photon energy, intensity) - // pairs stored for this material - for(std::size_t ii = 1; ii < MPV->GetVectorLength(); ++ii) - { - currentPM = MPV->Energy(ii); - currentIN = (*MPV)[ii]; - currentCII = - prevCII + 0.5 * (currentPM - prevPM) * (prevIN + currentIN); - - vector3->InsertValues(currentPM, currentCII); - - prevPM = currentPM; - prevCII = currentCII; - prevIN = currentIN; - } - } - } + fIndexMPT.insert(std::make_pair(i, indexMPT)); + ++indexMPT; + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void G4Scintillation::BuildInverseCdfTable(const G4MaterialPropertyVector* MPV, + G4PhysicsFreeVector* vec) const +// Build the inverse cumulative distribution function (C.D.F.) vector for the +// scintillation photon spectrum from a given G4MaterialPropertyVector. +// The resulting C.D.F. is stored in a G4PhysicsFreeVector, with values +// representing the inverse C.D.F. as a function of photon energy. +{ + if(MPV && (*MPV)[0] >= 0.0) + { + std::vector cdf(MPV->GetVectorLength()); + cdf.front() = 0.0; + for (std::size_t ii = 1; ii < MPV->GetVectorLength() ; ++ii) + { + cdf[ii] = cdf[ii - 1] + 0.5 * (MPV->Energy(ii) - MPV->Energy(ii-1)) + * ((*MPV)[ii] + (*MPV)[ii - 1]); + } + // Normalize for the inverse C.D.F. vector + for (std::size_t ii = 0; ii < MPV->GetVectorLength(); ++ii) + { + cdf[ii] = cdf[ii] / cdf.back(); + vec->InsertValues(cdf[ii], MPV->Energy(ii)); } - fIntegralTable1->insertAt(i, vector1); - fIntegralTable2->insertAt(i, vector2); - fIntegralTable3->insertAt(i, vector3); } } @@ -448,7 +363,21 @@ G4VParticleChange* G4Scintillation::PostStepDoIt(const G4Track& aTrack, aParticleChange.ProposeTrackStatus(fSuspend); } - G4int materialIndex = (G4int)aMaterial->GetIndex(); + std::size_t materialIndex = aMaterial->GetIndex(); + auto it = fIndexMPT.find(materialIndex); + + std::size_t indexMPT = 0; + if(it != fIndexMPT.end()) + { + indexMPT = it->second; + } + else + { + G4ExceptionDescription ed; + ed << "G4MaterialPropertiesTable for " << aMaterial->GetName() + << " is not found!" << G4endl; + G4Exception("G4Scintillation::PostStepDoIt", "Scint04", FatalException, ed); + } // Retrieve the Scintillation Integral for this material // new G4PhysicsFreeVector allocated to hold CII's @@ -484,8 +413,7 @@ G4VParticleChange* G4Scintillation::PostStepDoIt(const G4Track& aTrack, riseTime = MPT->GetConstProperty(kSCINTILLATIONRISETIME1); } scintType = Fast; - scintIntegral = - (G4PhysicsFreeVector*) ((*fIntegralTable1)(materialIndex)); + scintIntegral = (G4PhysicsFreeVector*) ((*fIntegralTable1)(indexMPT)); } else if(scnt == 1) { @@ -511,8 +439,7 @@ G4VParticleChange* G4Scintillation::PostStepDoIt(const G4Track& aTrack, riseTime = MPT->GetConstProperty(kSCINTILLATIONRISETIME2); } scintType = Medium; - scintIntegral = - (G4PhysicsFreeVector*) ((*fIntegralTable2)(materialIndex)); + scintIntegral = (G4PhysicsFreeVector*) ((*fIntegralTable2)(indexMPT)); } else if(scnt == 2) { @@ -530,24 +457,20 @@ G4VParticleChange* G4Scintillation::PostStepDoIt(const G4Track& aTrack, riseTime = MPT->GetConstProperty(kSCINTILLATIONRISETIME3); } scintType = Slow; - scintIntegral = - (G4PhysicsFreeVector*) ((*fIntegralTable3)(materialIndex)); + scintIntegral = (G4PhysicsFreeVector*) ((*fIntegralTable3)(indexMPT)); } if(!scintIntegral) continue; - G4double CIImax = scintIntegral->GetMaxValue(); for(std::size_t i = 0; i < numPhot; ++i) { // Determine photon energy - G4double CIIvalue = G4UniformRand() * CIImax; - G4double sampledEnergy = scintIntegral->GetEnergy(CIIvalue); + G4double sampledEnergy = scintIntegral->Value(G4UniformRand()); if(verboseLevel > 1) { G4cout << "sampledEnergy = " << sampledEnergy << G4endl; - G4cout << "CIIvalue = " << CIIvalue << G4endl; } // Generate random photon direction diff --git a/source/processes/hadronic/cross_sections/History b/source/processes/hadronic/cross_sections/History index 01124c1dae..0138b19494 100644 --- a/source/processes/hadronic/cross_sections/History +++ b/source/processes/hadronic/cross_sections/History @@ -6,6 +6,41 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-24 Vladimir Ivanchenko (hadr-cross-V11-03-05) +- G4CrossSectionFactory, G4CrossSectionFactoryRegistry, G4CrossSectionFactory, + G4ElectroNuclearCrossSection, G4ChipsAntiBaryonElasticXS - fixed memory leak + at exit; value of memory leak is limited but may shadow real problem. + +## 2025-05-22 Vladimir Ivanchenko (hadr-cross-V11-03-04) +- G4ChargeExchangeXS - added extra method for sampling of scattering angle, + update parameterisation using new fit to data. + +## 2025-04-15 Vladimir Ivanchenko (hadr-cross-V11-03-03) +- G4ChargeExchangeXS - fixed selection of reaction for compound materials, + for that extra public and private methods are added. + +## 2025-03-31 Vladimir Ivanchenko (hadr-cross-V11-03-02) +- G4ParticleInelasticXS - fixed trivial Coverity warning. +- G4EMDissociationCrossSection - fixed several technical inaccuracy of the + code to address Coverity warning and to use G4Pow correctly. +- G4EMDissociationSpectrum - added protection against beta=0, which should never + happen but needed for Coverity; use G4Pow more correctly. + +## 2025-03-20 Vladimir Ivanchenko (hadr-cross-V11-03-01) +- G4NeutronInelasticXS, G4ParticleInelasticXS - enabled option for initialisation + for all Z values, which remove possible lazy initialisation if these cross + sections are used by any other model. +- G4NeutronElasticXS, G4NeutronCaptureXS - removed option to initilise all + data, because these cross sections are not used by other hadronic model. + In summary, for simple applications initialisation CPU time is increased + for about 10%, for complex applications this increase will not be seen. + No locks will be set by these cross section classes in the run time. + +## 2025-02-10 Vladimir Ivanchenko (hadr-cross-V11-03-00) +- G4NeutronElasticXS, G4NeutronInelasticXS, G4ParticleInelasticXS - added + an option to download data for all elements in class constructor + avoiding lazy initialisation in run time + ## 2024-11-15 Vladimir Ivanchenko (hadr-cross-V11-02-18) - G4ChargeExchangeXS - handle special case of positive meson scattering off Hydrogen, the cross section is propotional to the percent of deuterons diff --git a/source/processes/hadronic/cross_sections/include/G4ChargeExchangeXS.hh b/source/processes/hadronic/cross_sections/include/G4ChargeExchangeXS.hh index adbf8aea1b..3225cbb1ae 100644 --- a/source/processes/hadronic/cross_sections/include/G4ChargeExchangeXS.hh +++ b/source/processes/hadronic/cross_sections/include/G4ChargeExchangeXS.hh @@ -79,8 +79,13 @@ public: void CrossSectionDescription(std::ostream&) const final; const G4ParticleDefinition* - SampleSecondaryType(const G4ParticleDefinition*, - const G4int Z, const G4int A); + SampleSecondaryType(const G4ParticleDefinition*, const G4Material*, + G4int Z, G4int A, G4double etot); + + G4double GetPartialPionXS(G4int idx); + + G4double GetPionTFactor(G4int idx, const G4ParticleDefinition* part, + G4double pEtot); void SetEnergyLimit(G4double val) { fEnergyLimit = val; }; @@ -93,6 +98,9 @@ public: private: + G4double GetCrossSection(const G4ParticleDefinition*, const G4Material*, + G4int Z, G4double etot); + G4double ComputeDeuteronFraction(const G4Material*); G4Pow* g4calc; diff --git a/source/processes/hadronic/cross_sections/include/G4CrossSectionFactory.hh b/source/processes/hadronic/cross_sections/include/G4CrossSectionFactory.hh index 6bb2827056..4db1c8e823 100644 --- a/source/processes/hadronic/cross_sections/include/G4CrossSectionFactory.hh +++ b/source/processes/hadronic/cross_sections/include/G4CrossSectionFactory.hh @@ -34,24 +34,31 @@ class G4VBaseXSFactory { - public: + G4VBaseXSFactory() + { + fRegistry = G4CrossSectionFactoryRegistry::Instance(); + } + + virtual ~G4VBaseXSFactory() = default; + virtual G4VCrossSectionDataSet* Instantiate() = 0; +protected: + G4CrossSectionFactoryRegistry* fRegistry; }; - //Generic template XS-factory template class G4CrossSectionFactory : public G4VBaseXSFactory { public: G4CrossSectionFactory(const G4String& name) { - G4CrossSectionFactoryRegistry::Instance()->Register(name,this); + fRegistry->Register(name, this); } - - virtual G4VCrossSectionDataSet* Instantiate() + + G4VCrossSectionDataSet* Instantiate() override { G4ExceptionDescription msg; msg<<"Factory mode: "< class G4CrossSectionFactory : public G4VBaseXSFactory { public: - G4CrossSectionFactory(const G4String& name) - { - G4CrossSectionFactoryRegistry::Instance()->Register(name,this); - } - - virtual G4VCrossSectionDataSet* Instantiate() - { - return new T(); - } + G4CrossSectionFactory(const G4String& name) + { + fRegistry->Register(name, this); + } + + G4VCrossSectionDataSet* Instantiate() override + { + return new T(); + } }; //Partial specialized template for singleton, shared factory @@ -82,32 +89,32 @@ public: template class G4CrossSectionFactory : public G4VBaseXSFactory { public: - G4CrossSectionFactory(const G4String& name) - { - G4CrossSectionFactoryRegistry::Instance()->Register(name,this); - } - - virtual G4VCrossSectionDataSet* Instantiate() - { - static T* shared = new T(); - return shared; - } + G4CrossSectionFactory(const G4String& name) + { + fRegistry->Register(name,this); + } + + G4VCrossSectionDataSet* Instantiate() override + { + static T* shared = new T(); + return shared; + } }; //Partial specialized template for singleton, shared factory // each call to Instantiate returns pointer to static thread-local object template class G4CrossSectionFactory : public G4VBaseXSFactory { - G4CrossSectionFactory(const G4String& name) - { - G4CrossSectionFactoryRegistry::Instance()->Register(name,this); - } - - virtual G4VCrossSectionDataSet* Instantiate() - { - static G4ThreadLocal T* shared = new T(); - return shared; - } + G4CrossSectionFactory(const G4String& name) + { + fRegistry->Register(name,this); + } + + G4VCrossSectionDataSet* Instantiate() override + { + static G4ThreadLocal T* shared = new T(); + return shared; + } }; diff --git a/source/processes/hadronic/cross_sections/include/G4CrossSectionFactoryRegistry.hh b/source/processes/hadronic/cross_sections/include/G4CrossSectionFactoryRegistry.hh index 9bc5453e3d..8a13e9b9db 100644 --- a/source/processes/hadronic/cross_sections/include/G4CrossSectionFactoryRegistry.hh +++ b/source/processes/hadronic/cross_sections/include/G4CrossSectionFactoryRegistry.hh @@ -47,19 +47,27 @@ class G4VBaseXSFactory; class G4CrossSectionFactoryRegistry { - friend std::ostream& operator<<(std::ostream&, const G4CrossSectionFactoryRegistry&); -private: - std::map factories; - static G4CrossSectionFactoryRegistry* instance; //Note this is shared among threads - G4CrossSectionFactoryRegistry(); - G4CrossSectionFactoryRegistry(const G4CrossSectionFactoryRegistry& ); - G4CrossSectionFactoryRegistry& operator=(const G4CrossSectionFactoryRegistry&); - //Disable copy-ctr and assignement operator + friend std::ostream& operator<<(std::ostream&, const G4CrossSectionFactoryRegistry&); public: - static G4CrossSectionFactoryRegistry* Instance(); - G4VBaseXSFactory* GetFactory( const G4String& name , G4bool abortIfNotFound = true) const; - //Search a cross-section factory by name, by default rise an exception if factory is not found - void Register( const G4String& name , G4VBaseXSFactory* factory ); + static G4CrossSectionFactoryRegistry* Instance(); + ~G4CrossSectionFactoryRegistry() = default; + + G4VBaseXSFactory* GetFactory( const G4String& name, G4bool abortIfNotFound = true) const; + + //Search a cross-section factory by name, by default rise an exception if factory is not found + void Register( const G4String& name, G4VBaseXSFactory* factory ); + + void DeRegister( G4VBaseXSFactory* factory ); + + G4CrossSectionFactoryRegistry(const G4CrossSectionFactoryRegistry&) = delete; + G4CrossSectionFactoryRegistry& operator=(const G4CrossSectionFactoryRegistry&) = delete; + +private: + + G4CrossSectionFactoryRegistry(); + + std::map factories; + static G4CrossSectionFactoryRegistry* instance; //Note this is shared among threads }; std::ostream& operator<<(std::ostream& msg, const G4CrossSectionFactoryRegistry& rhs); diff --git a/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh b/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh index ecbc2c8b9f..19133f9224 100644 --- a/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh +++ b/source/processes/hadronic/cross_sections/include/G4ElectroNuclearCrossSection.hh @@ -60,16 +60,16 @@ class G4ElectroNuclearCrossSection : public G4VCrossSectionDataSet public: G4ElectroNuclearCrossSection(); - virtual ~G4ElectroNuclearCrossSection(); + ~G4ElectroNuclearCrossSection() override; static const char* Default_Name() {return "ElectroNuclearXS";} - virtual void CrossSectionDescription(std::ostream&) const; + void CrossSectionDescription(std::ostream&) const override; - virtual G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, - const G4Material*); - virtual G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z, - const G4Material* mat); + G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, + const G4Material*) override; + G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z, + const G4Material* mat) override; G4double GetEquivalentPhotonEnergy(); @@ -77,6 +77,10 @@ public: G4double GetEquivalentPhotonQ2(G4double nu); + G4ElectroNuclearCrossSection& operator= + (const G4ElectroNuclearCrossSection &right) = delete; + G4ElectroNuclearCrossSection(const G4ElectroNuclearCrossSection&) = delete; + private: G4int GetFunctions(G4double a, G4double* x, G4double* y, G4double* z); diff --git a/source/processes/hadronic/cross_sections/include/G4NeutronElasticXS.hh b/source/processes/hadronic/cross_sections/include/G4NeutronElasticXS.hh index 7b01e61154..f173fd1793 100644 --- a/source/processes/hadronic/cross_sections/include/G4NeutronElasticXS.hh +++ b/source/processes/hadronic/cross_sections/include/G4NeutronElasticXS.hh @@ -44,8 +44,8 @@ #include "G4VCrossSectionDataSet.hh" #include "globals.hh" +#include "G4ElementData.hh" #include "G4PhysicsVector.hh" -#include class G4DynamicParticle; class G4ParticleDefinition; @@ -58,7 +58,7 @@ public: G4NeutronElasticXS(); - ~G4NeutronElasticXS() final; + ~G4NeutronElasticXS() override = default; static const char* Default_Name() {return "G4NeutronElasticXS";} @@ -97,7 +97,7 @@ public: G4double ElementCrossSection(G4double kinEnergy, G4double loge, G4int Z); - G4NeutronElasticXS & operator=(const G4NeutronElasticXS &right) = delete; + G4NeutronElasticXS& operator=(const G4NeutronElasticXS &right) = delete; G4NeutronElasticXS(const G4NeutronElasticXS&) = delete; private: @@ -108,25 +108,30 @@ private: const G4String& FindDirectoryPath(); - inline G4PhysicsVector* GetPhysicsVector(G4int Z); + inline const G4PhysicsVector* GetPhysicsVector(G4int Z); - G4VComponentCrossSection* ggXsection = nullptr; + G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn); + + G4VComponentCrossSection* ggXsection{nullptr}; const G4ParticleDefinition* neutron; - G4bool isFirst = false; + G4bool isInitializer{false}; static const G4int MAXZEL = 93; - static G4PhysicsVector* data[MAXZEL]; + static G4ElementData* data; static G4double coeff[MAXZEL]; static G4String gDataDirectory; - static G4bool fLock; }; -inline +inline const G4PhysicsVector* G4NeutronElasticXS::GetPhysicsVector(G4int Z) { - if(nullptr == data[Z]) { InitialiseOnFly(Z); } - return data[Z]; + const G4PhysicsVector* pv = data->GetElementData(Z); + if (pv == nullptr) { + InitialiseOnFly(Z); + pv = data->GetElementData(Z); + } + return pv; } #endif diff --git a/source/processes/hadronic/cross_sections/include/G4ParticleInelasticXS.hh b/source/processes/hadronic/cross_sections/include/G4ParticleInelasticXS.hh index b3cde2e8ad..b4eb5b2abf 100644 --- a/source/processes/hadronic/cross_sections/include/G4ParticleInelasticXS.hh +++ b/source/processes/hadronic/cross_sections/include/G4ParticleInelasticXS.hh @@ -107,6 +107,8 @@ private: void Initialise(G4int Z); + void InitialiseOnFly(G4int Z); + inline const G4PhysicsVector* GetPhysicsVector(G4int Z); G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn); @@ -130,7 +132,7 @@ const G4PhysicsVector* G4ParticleInelasticXS::GetPhysicsVector(G4int Z) { const G4PhysicsVector* pv = data[index]->GetElementData(Z); if (pv == nullptr) { - Initialise(Z); + InitialiseOnFly(Z); pv = data[index]->GetElementData(Z); } return pv; diff --git a/source/processes/hadronic/cross_sections/src/G4ChargeExchangeXS.cc b/source/processes/hadronic/cross_sections/src/G4ChargeExchangeXS.cc index 4721bab969..c3ae5563ff 100644 --- a/source/processes/hadronic/cross_sections/src/G4ChargeExchangeXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4ChargeExchangeXS.cc @@ -53,14 +53,22 @@ namespace { // V. Lyubovitsky parameterisation - const G4double piA[5] = {430., 36., 1.37, 2.0, 60.}; // A - const G4double pAP[5] = {1.04, 1.26, 1.35, 0.94, 0.94}; // 2 - 2alphaP + const G4double piA[5] = {122., 78.8, 59.4, 24.0, 213.5}; // A + const G4double pAP[5] = {1.23, 1.53, 1.35, 0.94, 0.94}; // 2 - 2alphaP const G4double pC0[5] = {12.7, 6.0, 6.84, 6.5, 8.0}; // c0 const G4double pC1[5] = {1.57, 1.6, 1.7, 1.23, 2.6}; // c1 const G4double pG0[5] = {2.55, 4.6, 3.7, 5.5, 4.6}; // g0 const G4double pG1[5] = {-0.23, -0.5, 0., 0., -2.}; // g1 - const G4double beta_prime_pi = 0.0410; + // parameterisation of intranuclear absorption + const G4double beta_prime_pi = 0.0036; + + // For unit conversion + const G4double inv1e7 = 0.1/(CLHEP::GeV*CLHEP::GeV); + const G4double fact = 1e-30*CLHEP::cm2; + const G4double pfact = 0.1/CLHEP::GeV; + const G4double kfact = 56.3*fact; + const G4double csmax = 1e-16; } G4ChargeExchangeXS::G4ChargeExchangeXS() @@ -96,20 +104,25 @@ G4bool G4ChargeExchangeXS::IsElementApplicable(const G4DynamicParticle*, } G4double -G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, - G4int ZZ, const G4Material* mat) +G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* dp, + G4int Z, const G4Material* mat) +{ + G4double pE = dp->GetTotalEnergy(); + return (pE > fEnergyLimit) ? + GetCrossSection(dp->GetDefinition(), mat, Z, pE) : 0.0; +} + +G4double G4ChargeExchangeXS::GetCrossSection(const G4ParticleDefinition* part, + const G4Material* mat, + G4int ZZ, G4double pEtot) { G4double result = 0.0; - const G4double pE = aParticle->GetTotalEnergy(); - if (pE <= fEnergyLimit) { return result; } - - auto part = aParticle->GetDefinition(); G4int pdg = part->GetPDGEncoding(); // Get or calculate the proton mass, particle mass, and s(Lorentz invariant) G4double tM = CLHEP::proton_mass_c2; G4double pM = part->GetPDGMass(); - G4double lorentz_s = tM*tM + 2*tM*pE + pM*pM; + G4double lorentz_s = tM*tM + 2*tM*pEtot + pM*pM; if (lorentz_s <= (tM + pM)*(tM + pM)) { return result; } const G4int Z = std::min(ZZ, ZMAXNUCLEARDATA); @@ -117,20 +130,15 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, if (verboseLevel > 1) { G4cout << "### G4ChargeExchangeXS: " << part->GetParticleName() - << " Z=" << Z << " A=" << A << " Etot(GeV)=" << pE/CLHEP::GeV + << " Z=" << Z << " A=" << A << " Etot(GeV)=" << pEtot/CLHEP::GeV << " s(GeV^2)=" << lorentz_s/(CLHEP::GeV*CLHEP::GeV) << G4endl; } - // For unit conversion - const G4double inv1e7 = 0.1/(CLHEP::GeV*CLHEP::GeV); - const G4double fact = 1e-30*CLHEP::cm2; - const G4double pfact = 0.1/CLHEP::GeV; - const G4double kfact = 56.3*fact; - const G4double csmax = 1e-16; + // The approximation of Glauber-Gribov formula -> extend it from interaction with // proton to nuclei Z^(2/3). The factor g4calc->powA(A,-beta_prime_pi*G4Log(A)) - // takes into account absorption of pi0 and eta + // takes into account absorption of mesons within the nucleus // pi- + p -> n + meson (0- pi0, 1- eta, 2- eta', 3- omega, 4- f2(1270)) if (pdg == -211) { @@ -138,7 +146,7 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, G4double x = lorentz_s*inv1e7; G4double logX = G4Log(x); G4double logA = g4calc->logZ(A); - G4double xf = g4calc->powZ(A, -beta_prime_pi*logA); + G4double xf = fact*g4calc->powZ(A, -beta_prime_pi*(logA + 2*logA)); G4double sum = 0.0; for (G4int i=0; i<5; ++i) { G4double xg = std::max(1.0 + pG0[i] + pG1[i]*logX, 0.0); @@ -147,7 +155,7 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, sum += xs; fXSecPion[i] = sum; } - result = sum*fact; + result = sum; } // pi+ + n -> p + meson (0- pi0, 1- eta, 2- eta', 3- omega, 4- f2(1270)) @@ -156,7 +164,7 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, G4double x = lorentz_s*inv1e7; G4double logX = G4Log(x); G4double logA = g4calc->logZ(A); - G4double xf = g4calc->powZ(A, -beta_prime_pi*logA); + G4double xf = fact*g4calc->powZ(A, -beta_prime_pi*(logA + 2*logA)); // hydrogen target case Z = A = 1 // the cross section is defined by fraction of deuteron and tritium @@ -169,19 +177,19 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, sum += xs; fXSecPion[i] = sum; } - result = sum*fact; + result = sum; } // Kaon x-sections depend on the primary particles momentum // K- + p -> Kbar + n else if (pdg == -321) { - G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact; + G4double p_momentum = std::sqrt(pEtot*pEtot - pM*pM)*pfact; result = g4calc->Z23(Z)*g4calc->powA(p_momentum, -1.60)*kfact; } // K+ + n -> Kbar + p else if (pdg == 321) { - G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact; + G4double p_momentum = std::sqrt(pEtot*pEtot - pM*pM)*pfact; G4double n23 = g4calc->Z23(A-Z); // hydrogen target case Z = A = 1 // the cross section is defined by fraction of deuteron and tritium @@ -192,13 +200,14 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, // KL else if (pdg == 130) { // Cross section of KL = 0.5*(Cross section of K+ + Cross section of K-) - const G4double p_momentum = std::sqrt(pE*pE - pM*pM)*pfact; + const G4double p_momentum = std::sqrt(pEtot*pEtot - pM*pM)*pfact; result = 0.5*(g4calc->Z23(Z) + g4calc->Z23(A-Z))* g4calc->powA(p_momentum, -1.60)*kfact; } result *= fFactor; if (verboseLevel > 1) { - G4cout << " Done for " << part->GetParticleName() << " Etot(GeV)=" << pE/CLHEP::GeV + G4cout << " Done for " << part->GetParticleName() << " Etot(GeV)=" + << pEtot/CLHEP::GeV << " res(mb)=" << result/CLHEP::millibarn << G4endl; } return result; @@ -206,8 +215,12 @@ G4ChargeExchangeXS::GetElementCrossSection(const G4DynamicParticle* aParticle, const G4ParticleDefinition* G4ChargeExchangeXS::SampleSecondaryType(const G4ParticleDefinition* part, - const G4int Z, const G4int A) + const G4Material* mat, + G4int Z, G4int A, G4double etot) { + // recompute x-section for the element in complex material + GetCrossSection(part, mat, Z, etot); + const G4ParticleDefinition* pd = nullptr; G4int pdg = std::abs(part->GetPDGEncoding()); @@ -265,3 +278,26 @@ G4ChargeExchangeXS::ComputeDeuteronFraction(const G4Material* mat) } return 0.0; } + +G4double G4ChargeExchangeXS::GetPartialPionXS(G4int idx) +{ + G4double res = 0.0; + if (0 == idx) { res = fXSecPion[0]; } + else if (0 < idx && 5 > idx) { + res = fXSecPion[idx] - fXSecPion[idx - 1]; + } + return res; +} + +G4double G4ChargeExchangeXS::GetPionTFactor(G4int idx, + const G4ParticleDefinition* p, + G4double pEtot) +{ + if (idx < 0 || idx > 4) { return 0.0; } + G4double tM = CLHEP::proton_mass_c2; + G4double pM = p->GetPDGMass(); + G4double logX = G4Log((tM*tM + 2*tM*pEtot + pM*pM)*inv1e7); + G4double xg = std::max(pG0[idx] + pG1[idx]*logX, -1.0); + G4double xc = std::max(pC0[idx] + pC1[idx]*logX, 0.0); + return xc*xg; +} diff --git a/source/processes/hadronic/cross_sections/src/G4CrossSectionDataSetRegistry.cc b/source/processes/hadronic/cross_sections/src/G4CrossSectionDataSetRegistry.cc index b4b9a601a2..6d1ff1a010 100644 --- a/source/processes/hadronic/cross_sections/src/G4CrossSectionDataSetRegistry.cc +++ b/source/processes/hadronic/cross_sections/src/G4CrossSectionDataSetRegistry.cc @@ -64,7 +64,6 @@ G4_REFERENCE_XS_FACTORY(G4ChipsPionMinusInelasticXS); G4_REFERENCE_XS_FACTORY(G4ChipsPionMinusElasticXS); G4_REFERENCE_XS_FACTORY(G4ChipsAntiBaryonInelasticXS); G4_REFERENCE_XS_FACTORY(G4ChipsAntiBaryonElasticXS); -G4_REFERENCE_XS_FACTORY(G4ElectroNuclearCrossSection); G4ThreadLocal G4CrossSectionDataSetRegistry* G4CrossSectionDataSetRegistry::instance = nullptr; @@ -164,8 +163,8 @@ G4VCrossSectionDataSet* G4CrossSectionDataSetRegistry::GetCrossSectionDataSet(const G4String& name, G4bool warning) { - for (auto & xsec : xSections) { - if(nullptr != xsec && xsec->GetName() == name) { return xsec; } + for (auto const & xsec : xSections) { + if (nullptr != xsec && xsec->GetName() == name) { return xsec; } } // check if factory exists... // @@ -174,7 +173,7 @@ G4CrossSectionDataSetRegistry::GetCrossSectionDataSet(const G4String& name, // This throws if factory is not found, add second parameter // to false to avoid this G4VBaseXSFactory* factory = factories->GetFactory(name, warning ); - if ( factory ) { + if (nullptr != factory ) { return factory->Instantiate(); } else { G4VCrossSectionDataSet* ptr = nullptr; diff --git a/source/processes/hadronic/cross_sections/src/G4CrossSectionFactoryRegistry.cc b/source/processes/hadronic/cross_sections/src/G4CrossSectionFactoryRegistry.cc index c009589d1d..9737a1f700 100644 --- a/source/processes/hadronic/cross_sections/src/G4CrossSectionFactoryRegistry.cc +++ b/source/processes/hadronic/cross_sections/src/G4CrossSectionFactoryRegistry.cc @@ -32,73 +32,63 @@ #include "G4AutoLock.hh" #include "globals.hh" -//This is used to lock on shared resource -// G4TypeMutex() +namespace +{ + G4Mutex regMutex = G4MUTEX_INITIALIZER; +} -G4CrossSectionFactoryRegistry* G4CrossSectionFactoryRegistry::instance = 0; G4CrossSectionFactoryRegistry* G4CrossSectionFactoryRegistry::Instance() { - G4AutoLock l(G4TypeMutex()); - if (!instance) - new G4CrossSectionFactoryRegistry(); - return instance; + static G4CrossSectionFactoryRegistry reg; + return ® } G4CrossSectionFactoryRegistry::G4CrossSectionFactoryRegistry() -{ - instance = this; -} - -G4CrossSectionFactoryRegistry::G4CrossSectionFactoryRegistry(const G4CrossSectionFactoryRegistry&) -{ - G4Exception("G4CrossSectionFactoryRegistry::G4CrossSectionFactoryRegistry", - "CrossSection004",FatalException,"Use of copy constructor not allowed"); -} -G4CrossSectionFactoryRegistry& G4CrossSectionFactoryRegistry::operator=(const G4CrossSectionFactoryRegistry&) -{ - G4Exception("G4CrossSectionFactoryRegistry::G4CrossSectionFactoryRegistry", - "CrossSection004",FatalException,"Use of assignment operator not allowed"); - return *this; -} +{} void G4CrossSectionFactoryRegistry::Register( const G4String& name, G4VBaseXSFactory* factory ) { - G4AutoLock l(G4TypeMutex()); - if ( factories.find(name) != factories.end() ) - { - G4ExceptionDescription msg; - msg <<"Cross section factory with name: "<()); - std::map::const_iterator it = factories.find(name); - if ( it != factories.end() ) return it->second; - else - { - if ( abortIfNotFound ) - { - G4ExceptionDescription msg; - msg <<"Cross section factory with name: "<(0); + } + l.unlock(); } +G4VBaseXSFactory* +G4CrossSectionFactoryRegistry::GetFactory( const G4String& name, G4bool abortIfNotFound ) const +{ + G4VBaseXSFactory* ptr = nullptr; + auto it = factories.find(name); + if ( it != factories.end() ) { + ptr = it->second; + } else if ( abortIfNotFound ) { + G4ExceptionDescription msg; + msg << "Cross section factory with name: " << name << " not found."; + G4Exception("G4CrossSectionFactoryRegistry::GetFactory(...)", + "CrossSection003", FatalException, msg); + } + return ptr; +} std::ostream& operator<<(std::ostream& msg, const G4CrossSectionFactoryRegistry& rhs) { - msg<<"Factory Registry "<<&rhs<<" has factories: ["; - for ( std::map::const_iterator it =rhs.factories.begin() ; - it != rhs.factories.end() ; ++it ) + msg<<"Factory Registry "<<&rhs<<" has factories: ["; + for ( std::map::const_iterator it =rhs.factories.begin(); + it != rhs.factories.end() ; ++it ) { msg<<(*it).first<<":"<<(*it).second<<","; } diff --git a/source/processes/hadronic/cross_sections/src/G4EMDissociationCrossSection.cc b/source/processes/hadronic/cross_sections/src/G4EMDissociationCrossSection.cc index ece57959bf..fd92a4d416 100644 --- a/source/processes/hadronic/cross_sections/src/G4EMDissociationCrossSection.cc +++ b/source/processes/hadronic/cross_sections/src/G4EMDissociationCrossSection.cc @@ -102,28 +102,16 @@ G4EMDissociationCrossSection::~G4EMDissociationCrossSection() ///////////////////////////////////////////////////////////////////////////// // G4bool -G4EMDissociationCrossSection::IsElementApplicable(const G4DynamicParticle* part, +G4EMDissociationCrossSection::IsElementApplicable(const G4DynamicParticle*, G4int /*ZZ*/, const G4Material*) { -// -// The condition for the applicability of this class is that the projectile -// must be an ion and the target must have more than one nucleon. In reality -// the value of A for either the projectile or target could be much higher, -// since for cases where both he projectile and target are medium to small -// Z, the probability of the EMD process is, I think, VERY small. -// - if (G4ParticleTable::GetParticleTable()->GetIonTable()->IsIon(part->GetDefinition())) { - return true; - } else { - return false; - } + return true; } ////////////////////////////////////////////////////////////////////////////// // G4double G4EMDissociationCrossSection::GetElementCrossSection - (const G4DynamicParticle* theDynamicParticle, G4int Z, - const G4Material*) + (const G4DynamicParticle* theDynamicParticle, G4int Z, const G4Material*) { // VI protection for Hydrogen if(1 >= Z) { return 0.0; } diff --git a/source/processes/hadronic/cross_sections/src/G4EMDissociationSpectrum.cc b/source/processes/hadronic/cross_sections/src/G4EMDissociationSpectrum.cc index 13aa3d0898..f34255a119 100644 --- a/source/processes/hadronic/cross_sections/src/G4EMDissociationSpectrum.cc +++ b/source/processes/hadronic/cross_sections/src/G4EMDissociationSpectrum.cc @@ -79,44 +79,46 @@ G4EMDissociationSpectrum::~G4EMDissociationSpectrum () //////////////////////////////////////////////////////////////////////////////// // G4double G4EMDissociationSpectrum::GetGeneralE1Spectrum - (G4double Eg, G4double b, G4double bmin) + (G4double Eg, G4double b0, G4double bmin) { + G4double b = std::max(b0, 1.e-6); G4double b2 = b*b; - G4double gg = 1.0/std::sqrt(1.0-b2); - G4double xi = Eg * bmin / gg / b / hbarc; + G4double gg = 1.0/std::sqrt(1.0 - b2); + G4double xi = Eg * bmin / (gg * b * hbarc); G4double K0 = bessel->K0(xi); G4double K1 = bessel->K1(xi); - G4double n = 2.0 * fine_structure_const / pi / b2 / Eg * + G4double n = 2.0 * fine_structure_const / (pi * b2 * Eg) * (xi*K0*K1 - xi*xi*b2/2.0*(K1*K1-K0*K0)); return n; } //////////////////////////////////////////////////////////////////////////////// // G4double G4EMDissociationSpectrum::GetGeneralE2Spectrum - (G4double Eg, G4double b, G4double bmin) + (G4double Eg, G4double b0, G4double bmin) { + G4double b = std::max(b0, 1.e-6); G4double b2 = b * b; G4double b4 = b2 * b2; - G4double gg = 1.0/std::sqrt(1.0-b2); - G4double xi = Eg * bmin / gg / b / hbarc; + G4double gg = 1.0/std::sqrt(1.0-b2); + G4double xi = Eg * bmin / (gg * b * hbarc); G4double K0 = bessel->K0(xi); G4double K1 = bessel->K1(xi); - G4double n = 2.0 * fine_structure_const / pi / b4 / Eg * - (2.0*(1.0-b2)*K1*K1 + xi*G4Pow::GetInstance()->powA((2.0-b2),2.0)*K0*K1 - + G4double n = 2.0 * fine_structure_const / (pi * b4 * Eg) * + (2.0*(1.0-b2)*K1*K1 + xi*(2.0-b2)*(2.0-b2)*K0*K1 - xi*xi*b4/2.0*(K1*K1-K0*K0)); return n; } //////////////////////////////////////////////////////////////////////////////// // G4double G4EMDissociationSpectrum::GetClosestApproach - (const G4double AP, const G4double ZP, G4double AT, G4double ZT, G4double b) + (const G4double AP, const G4double ZP, G4double AT, G4double ZT, G4double b0) { - G4double bsq = b * b; - G4double gg = 1.0/std::sqrt(1-bsq); - G4double AProot3 = G4Pow::GetInstance()->powA(AP,1.0/3.0); - G4double ATroot3 = G4Pow::GetInstance()->powA(AT,1.0/3.0); + G4double b = std::max(b0, 1.e-6); + G4double bsq = b * b; + G4double gg = 1.0/std::sqrt(1. - bsq); + G4double AProot3 = G4Pow::GetInstance()->A13(AP); + G4double ATroot3 = G4Pow::GetInstance()->A13(AT); G4double bc = 1.34 * fermi * (AProot3+ATroot3 - 0.75 *(1.0/AProot3+1.0/ATroot3)); -// G4double a0 = ZP * ZT * classic_electr_radius/bsq; G4double a0 = ZP * ZT * elm_coupling / (AT*AP*amu_c2/(AT+AP)) / bsq; G4double bmin = 1.25 * bc + halfpi*a0/gg; return bmin; diff --git a/source/processes/hadronic/cross_sections/src/G4ElectroNuclearCrossSection.cc b/source/processes/hadronic/cross_sections/src/G4ElectroNuclearCrossSection.cc index 5c49a52b49..1dd0a02ab5 100644 --- a/source/processes/hadronic/cross_sections/src/G4ElectroNuclearCrossSection.cc +++ b/source/processes/hadronic/cross_sections/src/G4ElectroNuclearCrossSection.cc @@ -46,9 +46,9 @@ #include "G4ElectroNuclearCrossSection.hh" // factory -#include "G4CrossSectionFactory.hh" +//#include "G4CrossSectionFactory.hh" // -G4_DECLARE_XS_FACTORY(G4ElectroNuclearCrossSection); +//G4_DECLARE_XS_FACTORY(G4ElectroNuclearCrossSection); // //A. Dotti 2-May-2013 diff --git a/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc b/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc index 338ef99dd3..9bdde651b9 100644 --- a/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc @@ -53,10 +53,11 @@ #include #include -G4PhysicsVector* G4NeutronElasticXS::data[] = {nullptr}; -G4double G4NeutronElasticXS::coeff[] = {0.0}; +G4ElementData* G4NeutronElasticXS::data = nullptr; +G4double G4NeutronElasticXS::coeff[] = {1.0}; G4String G4NeutronElasticXS::gDataDirectory = ""; -G4bool G4NeutronElasticXS::fLock = true; + +static std::once_flag applyOnce; namespace { @@ -67,8 +68,7 @@ G4NeutronElasticXS::G4NeutronElasticXS() : G4VCrossSectionDataSet(Default_Name()), neutron(G4Neutron::Neutron()) { - // verboseLevel = 0; - if (verboseLevel > 0){ + if (verboseLevel > 0) { G4cout << "G4NeutronElasticXS::G4NeutronElasticXS Initialise for Z < " << MAXZEL << G4endl; } @@ -77,16 +77,10 @@ G4NeutronElasticXS::G4NeutronElasticXS() if (ggXsection == nullptr) ggXsection = new G4ComponentGGHadronNucleusXsc(); SetForAllAtomsAndEnergies(true); - FindDirectoryPath(); -} - -G4NeutronElasticXS::~G4NeutronElasticXS() -{ - if (isFirst) { - for(G4int i=0; iSetName("nElastic"); + FindDirectoryPath(); } } @@ -130,9 +124,10 @@ G4NeutronElasticXS::ComputeCrossSectionPerElement(G4double ekin, G4double loge, return ElementCrossSection(ekin, loge, elm->GetZasInt()); } -G4double G4NeutronElasticXS::ElementCrossSection(G4double ekin, G4double loge, G4int ZZ) +G4double +G4NeutronElasticXS::ElementCrossSection(G4double ekin, G4double loge, G4int ZZ) { - G4int Z = (ZZ >= MAXZEL) ? MAXZEL - 1 : ZZ; + G4int Z = std::min(ZZ, MAXZEL-1); auto pv = GetPhysicsVector(Z); G4double xs = (ekin <= pv->GetMaxEnergy()) ? pv->LogVectorValue(ekin, loge) @@ -152,19 +147,21 @@ G4double G4NeutronElasticXS::ElementCrossSection(G4double ekin, G4double loge, G G4double G4NeutronElasticXS::ComputeIsoCrossSection(G4double ekin, G4double loge, const G4ParticleDefinition*, - G4int Z, G4int A, + G4int ZZ, G4int A, const G4Isotope*, const G4Element*, const G4Material*) { + G4int Z = std::min(ZZ, MAXZEL-1); return ElementCrossSection(ekin, loge, Z)*A/aeff[Z]; } G4double G4NeutronElasticXS::GetIsoCrossSection(const G4DynamicParticle* aParticle, - G4int Z, G4int A, + G4int ZZ, G4int A, const G4Isotope*, const G4Element*, const G4Material*) { + G4int Z = std::min(ZZ, MAXZEL-1); return ElementCrossSection(aParticle->GetKineticEnergy(), aParticle->GetLogKineticEnergy(), Z)*A/aeff[Z]; @@ -176,7 +173,6 @@ const G4Isotope* G4NeutronElasticXS::SelectIsotope( G4int nIso = (G4int)anElement->GetNumberOfIsotopes(); const G4Isotope* iso = anElement->GetIsotope(0); - //G4cout << "SelectIsotope NIso= " << nIso << G4endl; if(1 == nIso) { return iso; } const G4double* abundVector = anElement->GetRelativeAbundanceVector(); @@ -209,19 +205,17 @@ G4NeutronElasticXS::BuildPhysicsTable(const G4ParticleDefinition& p) FatalException, ed, ""); return; } - if (fLock || isFirst) { + // initialise static tables only once + std::call_once(applyOnce, [this]() { isInitializer = true; }); + + if (isInitializer) { G4AutoLock l(&nElasticXSMutex); - if (fLock) { - isFirst = true; - fLock = false; - FindDirectoryPath(); - } // Access to elements const G4ElementTable* table = G4Element::GetElementTable(); - for ( auto & elm : *table ) { + for ( auto const & elm : *table ) { G4int Z = std::max( 1, std::min( elm->GetZasInt(), MAXZEL-1) ); - if ( nullptr == data[Z] ) { Initialise(Z); } + if ( nullptr == data->GetElementData(Z) ) { Initialise(Z); } } l.unlock(); } @@ -247,40 +241,49 @@ void G4NeutronElasticXS::InitialiseOnFly(G4int Z) void G4NeutronElasticXS::Initialise(G4int Z) { - if(data[Z] != nullptr) { return; } - - // upload data from file - data[Z] = new G4PhysicsLogVector(); + if (nullptr != data->GetElementData(Z)) { return; } + // upload element data std::ostringstream ost; - ost << FindDirectoryPath() << Z ; - std::ifstream filein(ost.str().c_str()); - if (!filein.is_open()) { - G4ExceptionDescription ed; - ed << "Data file <" << ost.str().c_str() - << "> is not opened!"; - G4Exception("G4NeutronElasticXS::Initialise(..)","had014", - FatalException, ed, "Check G4PARTICLEXSDATA"); - return; - } - if(verboseLevel > 1) { - G4cout << "file " << ost.str() - << " is opened by G4NeutronElasticXS" << G4endl; - } - - // retrieve data from DB - if(!data[Z]->Retrieve(filein, true)) { - G4ExceptionDescription ed; - ed << "Data file <" << ost.str().c_str() - << "> is not retrieved!"; - G4Exception("G4NeutronElasticXS::Initialise(..)","had015", - FatalException, ed, "Check G4PARTICLEXSDATA"); - return; - } + ost << FindDirectoryPath() << Z; + G4PhysicsVector* v = RetrieveVector(ost, true); + data->InitialiseForElement(Z, v); + // smooth transition - G4double sig1 = (*(data[Z]))[data[Z]->GetVectorLength()-1]; - G4double ehigh = data[Z]->GetMaxEnergy(); - G4double sig2 = ggXsection->GetElasticElementCrossSection(neutron, - ehigh, Z, aeff[Z]); + G4double sig1 = (*v)[v->GetVectorLength()-1]; + G4double ehigh = v->GetMaxEnergy(); + G4double sig2 = + ggXsection->GetElasticElementCrossSection(neutron, ehigh, Z, aeff[Z]); coeff[Z] = (sig2 > 0.) ? sig1/sig2 : 1.0; } + +G4PhysicsVector* +G4NeutronElasticXS::RetrieveVector(std::ostringstream& ost, G4bool warn) +{ + G4PhysicsLogVector* v = nullptr; + std::ifstream filein(ost.str().c_str()); + if (!filein.is_open()) { + if (warn) { + G4ExceptionDescription ed; + ed << "Data file <" << ost.str().c_str() + << "> is not opened!"; + G4Exception("G4NeutronElasticXS::RetrieveVector(..)","had014", + FatalException, ed, "Check G4PARTICLEXSDATA"); + } + } else { + if (verboseLevel > 1) { + G4cout << "File " << ost.str() + << " is opened by G4NeutronElasticXS" << G4endl; + } + // retrieve data from DB + v = new G4PhysicsLogVector(); + if (!v->Retrieve(filein, true)) { + G4ExceptionDescription ed; + ed << "Data file <" << ost.str().c_str() + << "> is not retrieved!"; + G4Exception("G4NeutronElasticXS::RetrieveVector(..)","had015", + FatalException, ed, "Check G4PARTICLEXSDATA"); + } + } + return v; +} diff --git a/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc b/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc index c050a38627..367957c6cd 100644 --- a/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc @@ -78,15 +78,17 @@ G4NeutronInelasticXS::G4NeutronInelasticXS() << MAXZINEL << G4endl; } loglowElimit = G4Log(lowElimit); + ggXsection = + G4CrossSectionDataSetRegistry::Instance()->GetComponentCrossSection("Glauber-Gribov"); + if (ggXsection == nullptr) + ggXsection = new G4ComponentGGHadronNucleusXsc(); + if (nullptr == data) { data = new G4ElementData(MAXZINEL); data->SetName("nInelastic"); FindDirectoryPath(); + for (G4int Z=1; ZGetComponentCrossSection("Glauber-Gribov"); - if(ggXsection == nullptr) - ggXsection = new G4ComponentGGHadronNucleusXsc(); SetForAllAtomsAndEnergies(true); } @@ -199,19 +201,28 @@ G4NeutronInelasticXS::IsoCrossSection(G4double eKin, G4double logE, G4double ekin = eKin; G4double loge = logE; - /* - G4cout << "G4NeutronInelasticXS::IsoCrossSection Z= " - << Z << " A= " << A << G4endl; - G4cout << " Amin= " << amin[Z] << " Amax= " << amax[Z] - << " E(MeV)= " << ekin << " Ncomp=" - << data->GetNumberOfComponents(Z) << G4endl; - */ + // Check initialisation GetPhysicsVector(Z); +#ifdef G4VERBOSE + if (verboseLevel > 2) { + G4cout << "G4NeutronInelasticXS::IsoCrossSection Z= " + << Z << " A= " << A << G4endl; + G4cout << " Amin= " << amin[Z] << " Amax= " << amax[Z] + << " E(MeV)= " << ekin << " Ncomp=" + << data->GetNumberOfComponents(Z) << G4endl; + } +#endif + // use isotope cross section if applicable if (ekin <= elimit && data->GetNumberOfComponents(Z) > 0) { auto pviso = data->GetComponentDataByID(Z, A); if (nullptr != pviso) { + // very low energy limit + if (ekin < lowElimit) { + ekin = lowElimit; + loge = loglowElimit; + } const G4double e0 = pviso->Energy(0); if (ekin > e0) { xs = pviso->LogVectorValue(ekin, loge); @@ -277,8 +288,6 @@ const G4Isotope* G4NeutronInelasticXS::SelectIsotope( if(nn < nIso) { temp.resize(nIso, 0.); } for (j=0; jGetIsotope(j)->GetN() - // << " abund= " << abundVector[j] << G4endl; sum += abundVector[j]*IsoCrossSection(kinEnergy, logE, Z, anElement->GetIsotope((G4int)j)->GetN()); temp[j] = sum; diff --git a/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc b/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc index 0c78de8433..6264f73e09 100644 --- a/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc @@ -71,6 +71,7 @@ G4ParticleInelasticXS::G4ParticleInelasticXS(const G4ParticleDefinition* part) particle(part), elimit(20*CLHEP::MeV) { + auto xsr = G4CrossSectionDataSetRegistry::Instance(); if (nullptr == part) { G4Exception("G4ParticleInelasticXS::G4ParticleInelasticXS(..)","had015", FatalException, "NO particle definition in constructor"); @@ -81,7 +82,6 @@ G4ParticleInelasticXS::G4ParticleInelasticXS(const G4ParticleDefinition* part) G4cout << "G4ParticleInelasticXS::G4ParticleInelasticXS for " << particleName << " on atoms with Z < " << MAXZINELP << G4endl; } - auto xsr = G4CrossSectionDataSetRegistry::Instance(); if (particleName == "proton") { highEnergyXsection = xsr->GetComponentCrossSection("Glauber-Gribov"); if(highEnergyXsection == nullptr) { @@ -100,6 +100,10 @@ G4ParticleInelasticXS::G4ParticleInelasticXS(const G4ParticleDefinition* part) if (1 < index) { SetMaxKinEnergy(25.6*CLHEP::PeV); } } } + // this should never happens but ... + if (nullptr == highEnergyXsection) { + highEnergyXsection = xsr->GetComponentCrossSection("Glauber-Gribov"); + } SetForAllAtomsAndEnergies(true); if (gDataDirectory.empty()) { gDataDirectory = G4HadronicParameters::Instance()->GetDirPARTICLEXS(); @@ -109,6 +113,7 @@ G4ParticleInelasticXS::G4ParticleInelasticXS(const G4ParticleDefinition* part) if (data[index] == nullptr) { data[index] = new G4ElementData(MAXZINELP); data[index]->SetName(pname[index] + "PartInel"); + for (G4int Z=1; Z nIso) { nIso = n; } G4int Z = std::min( elm->GetZasInt(), MAXZINELP-1); if ( nullptr == (data[index])->GetElementData(Z) ) { - Initialise(Z); + InitialiseOnFly(Z); } } temp.resize(nIso, 0.0); } +void G4ParticleInelasticXS::InitialiseOnFly(G4int Z) +{ + G4AutoLock l(&pInelasticXSMutex); + Initialise(Z); + l.unlock(); +} + void G4ParticleInelasticXS::Initialise(G4int Z) { if ( nullptr != (data[index])->GetElementData(Z) ) { return; } - G4AutoLock l(&pInelasticXSMutex); - if ( nullptr == (data[index])->GetElementData(Z) ) { - // upload element data - std::ostringstream ost; - ost << gDataDirectory << "/" << pname[index] << "/inel" << Z; - G4PhysicsVector* v = RetrieveVector(ost, true); - data[index]->InitialiseForElement(Z, v); + // upload element data + std::ostringstream ost; + ost << gDataDirectory << "/" << pname[index] << "/inel" << Z; + G4PhysicsVector* v = RetrieveVector(ost, true); + data[index]->InitialiseForElement(Z, v); - // upload isotope data - G4bool noComp = true; - if (amin[Z] < amax[Z]) { - - for (G4int A=amin[Z]; A<=amax[Z]; ++A) { - std::ostringstream ost1; - ost1 << gDataDirectory << "/" << pname[index] << "/inel" << Z << "_" << A; - G4PhysicsVector* v1 = RetrieveVector(ost1, false); - if (nullptr != v1) { - if (noComp) { - G4int nmax = amax[Z] - A + 1; - data[index]->InitialiseForComponent(Z, nmax); - noComp = false; - } - data[index]->AddComponent(Z, A, v1); + // upload isotope data + G4bool noComp = true; + if (amin[Z] < amax[Z]) { + for (G4int A=amin[Z]; A<=amax[Z]; ++A) { + std::ostringstream ost1; + ost1 << gDataDirectory << "/" << pname[index] << "/inel" << Z << "_" << A; + G4PhysicsVector* v1 = RetrieveVector(ost1, false); + if (nullptr != v1) { + if (noComp) { + G4int nmax = amax[Z] - A + 1; + data[index]->InitialiseForComponent(Z, nmax); + noComp = false; } + data[index]->AddComponent(Z, A, v1); } } - // no components case - if (noComp) { data[index]->InitialiseForComponent(Z, 0); } - - // smooth transition - G4double sig1 = (*v)[v->GetVectorLength()-1]; - G4double ehigh = v->GetMaxEnergy(); - G4double sig2 = highEnergyXsection->GetInelasticElementCrossSection( - particle, ehigh, Z, aeff[Z]); - coeff[Z][index] = (sig2 > 0.) ? sig1/sig2 : 1.0; } - l.unlock(); + // no components case + if (noComp) { data[index]->InitialiseForComponent(Z, 0); } + + // smooth transition + G4double sig1 = (*v)[v->GetVectorLength()-1]; + G4double ehigh = v->GetMaxEnergy(); + G4double sig2 = highEnergyXsection->GetInelasticElementCrossSection( + particle, ehigh, Z, aeff[Z]); + coeff[Z][index] = (sig2 > 0.) ? sig1/sig2 : 1.0; } G4PhysicsVector* diff --git a/source/processes/hadronic/management/History b/source/processes/hadronic/management/History index 518770868a..076da54c91 100644 --- a/source/processes/hadronic/management/History +++ b/source/processes/hadronic/management/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-03 Vladimir Ivanchenko (hadr-man-V11-03-00) +- G4HadronicProcess - removed warning for the case when K0 and antiK0 are + transformed into KS or KL. + ## 2024-10-19 Vladimir Ivanchenko (hadr-man-V11-02-02) - G4HadronicProcessStore - fixed minor memory leak at exit by addition of G4ThreadLocalSingleton pattern and removed deletion of extra processes diff --git a/source/processes/hadronic/management/include/G4HadronicProcess.hh b/source/processes/hadronic/management/include/G4HadronicProcess.hh index 4c838bc95a..07b091c792 100644 --- a/source/processes/hadronic/management/include/G4HadronicProcess.hh +++ b/source/processes/hadronic/management/include/G4HadronicProcess.hh @@ -246,7 +246,6 @@ private: // counters G4int nMatWarn = 0; - G4int nKaonWarn = 0; G4int nICelectrons = 0; G4int matIdx = 0; diff --git a/source/processes/hadronic/management/src/G4HadronicProcess.cc b/source/processes/hadronic/management/src/G4HadronicProcess.cc index 971d75ce28..9042089157 100644 --- a/source/processes/hadronic/management/src/G4HadronicProcess.cc +++ b/source/processes/hadronic/management/src/G4HadronicProcess.cc @@ -454,14 +454,6 @@ G4HadronicProcess::PostStepDoIt(const G4Track& aTrack, const G4Step&) if ( G4UniformRand() > 0.5 ) { newPart = G4KaonZeroShort::Definition(); } else { newPart = G4KaonZeroLong::Definition(); } dynamicParticle->SetDefinition( newPart ); - if ( nKaonWarn < 1 ) { - ++nKaonWarn; - G4ExceptionDescription ed; - ed << " Hadronic model " << theInteraction->GetModelName() << G4endl; - ed << " created " << part->GetParticleName() << G4endl; - ed << " -> forced to be " << newPart->GetParticleName() << G4endl; - G4Exception( "G4HadronicProcess::PostStepDoIt", "had007", JustWarning, ed ); - } } } } diff --git a/source/processes/hadronic/models/cascade/History b/source/processes/hadronic/models/cascade/History index e4f3a0204f..fb0fc1abc4 100644 --- a/source/processes/hadronic/models/cascade/History +++ b/source/processes/hadronic/models/cascade/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-22 Alberto Ribon (hadr-casc-V11-02-05) +## 2025-04-22 Alberto Ribon (hadr-casc-V11-03-00) - G4CascadeFinalStateAlgorithm, G4NucleiModel : introduced the possibility to retrieve either the behavior of these classes as in Geant4 version 11.3 (default) or as in 11.2 according to the value of boolean flags in diff --git a/source/processes/hadronic/models/coherent_elastic/History b/source/processes/hadronic/models/coherent_elastic/History index a82b21c620..270549d667 100644 --- a/source/processes/hadronic/models/coherent_elastic/History +++ b/source/processes/hadronic/models/coherent_elastic/History @@ -6,6 +6,24 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-15 Vladimir Ivanchenko (hadr-cohe-V11-03-03) +- 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 backward); use similar parameterisation and code for + both models. + +## 2025-05-01 Vladimir Ivanchenko (hadr-cohe-V11-03-02) +- G4ChargeExchange - fixed Coverity warning + +## 2025-04-27 Vladimir Ivanchenko (hadr-cohe-V11-03-01) +- G4ChargeExchange - fixed problem in final state generation for the case of + unstable meson production omega(782) and f2(1270). + +## 2025-04-15 Vladimir Ivanchenko (hadr-cohe-V11-03-00) +- G4ChargeExchange - fixed problem in kinematic computations, allowed recoil + nucleus to be in an excited state. + ## 2024-11-15 Vladimir Ivanchenko (hadr-cohe-V11-02-03) - G4ChargeExchange - fixed problem of the Hydrogen target; change event weight if cross section biasing factor is applied diff --git a/source/processes/hadronic/models/coherent_elastic/src/G4ChargeExchange.cc b/source/processes/hadronic/models/coherent_elastic/src/G4ChargeExchange.cc index e19d2f007d..4334bac07b 100644 --- a/source/processes/hadronic/models/coherent_elastic/src/G4ChargeExchange.cc +++ b/source/processes/hadronic/models/coherent_elastic/src/G4ChargeExchange.cc @@ -60,7 +60,6 @@ namespace { constexpr G4int maxN = 1000; - constexpr G4double emin = 2*136.9*CLHEP::MeV; } G4ChargeExchange::G4ChargeExchange(G4ChargeExchangeXS* ptr) @@ -102,21 +101,25 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( // is not possible on proton, only on deuteron if (1 == Z && (211 == projPDG || 321 == projPDG)) { A = 2; } - if (verboseLevel > 1) + if (verboseLevel > 1) { G4cout << "G4ChargeExchange for " << part->GetParticleName() << " PDGcode= " << projPDG << " on nucleus Z= " << Z << " A= " << A << " N= " << A - Z << G4endl; + } G4double mass1 = G4NucleiProperties::GetNuclearMass(A, Z); G4LorentzVector lv0 = aTrack.Get4Momentum(); - G4double etot = mass1 + lv0.e(); // select final state const G4ParticleDefinition* theSecondary = - fXSection->SampleSecondaryType(part, Z, A); + fXSection->SampleSecondaryType(part, aTrack.GetMaterial(), + Z, A, aTrack.GetTotalEnergy()); G4int pdg = theSecondary->GetPDGEncoding(); + if (verboseLevel > 1) + G4cout << " Secondary " << theSecondary->GetParticleName() << " pdg=" << pdg << G4endl; + // omega(782) and f2(1270) G4bool isShortLived = (pdg == 223 || pdg == 225); @@ -141,62 +144,86 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( else if (Z == 1 && A == 3) { theRecoil = G4Triton::Triton(); } else if (Z == 2 && A == 3) { theRecoil = G4He3::He3(); } else if (Z == 2 && A == 4) { theRecoil = G4Alpha::Alpha(); } - else if (nist->GetIsotopeAbundance(Z, A) > 0.0) { - theRecoil = G4ParticleTable::GetParticleTable() - ->GetIonTable()->GetIon(Z, A, 0.0); - } // check if there is enough energy for the final state // and sample mass of produced state - const G4double mass0 = theSecondary->GetPDGMass(); - G4double mass3 = (nullptr == theRecoil) ? - G4NucleiProperties::GetNuclearMass(A, Z) : theRecoil->GetPDGMass(); - G4double mass2 = mass0; - if (isShortLived && - !SampleMass(mass2, theSecondary->GetPDGWidth(), etot - mass3)) { - return &theParticleChange; - } - - // not possible kinematically - if (etot <= mass2 + mass3) { - return &theParticleChange; - } - // sample kinematics G4LorentzVector lv1(0.0, 0.0, 0.0, mass1); G4LorentzVector lv = lv0 + lv1; - G4ThreeVector bst = lv.boostVector(); - G4double ss = lv.mag2(); + G4double m0 = lv.mag(); + const G4double mass0 = theSecondary->GetPDGMass(); + G4double mass2 = mass0; + G4double mass3; + G4bool ok = false; + + if (verboseLevel > 1) { + G4cout << " Secondary meson " << theSecondary->GetParticleName() + << " mass(MeV)=" << mass2 << " pdg=" << pdg + << " Final Z=" << Z << " isShortLived=" << isShortLived + << " " << lv + << G4endl; + } + // fixed recoil mass + if (nullptr != theRecoil) { + mass3 = theRecoil->GetPDGMass(); + ok = (m0 > mass2 + mass3); + + // excited nuclear state + } else { + G4double mass30 = G4NucleiProperties::GetNuclearMass(A, Z); + const G4double eFermi = 10*CLHEP::MeV; + for (G4int i=0; i<10; ++i) { + mass3 = mass30 + eFermi*G4UniformRand(); + if (m0 > mass2 + mass3) { + ok = true; + break; + } + } + } + if (isShortLived) { + const G4double elim = 300*CLHEP::MeV; + ok = false; + for (G4int i=0; i<10; ++i) { + if (SampleMass(mass2, theSecondary->GetPDGWidth(), elim)) { + if (m0 > mass2 + mass3) { + ok = true; + break; + } + } + } + } + + // not possible kinematically + if (!ok) { return &theParticleChange; } // tmax = 4*momCMS^2 - G4double e2 = ss + mass2*mass2 - mass3*mass3; - G4double tmax = e2*e2/ss - 4*mass2*mass2; - + G4double e2 = (m0*m0 + mass2*mass2 - mass3*mass3)/(2*m0); + G4double momentumCMS = std::sqrt(e2*e2 - mass2*mass2); + + G4double tmax = 4*(momentumCMS*momentumCMS); G4double t = SampleT(theSecondary, A, tmax); G4double phi = G4UniformRand()*CLHEP::twopi; G4double cost = 1. - 2.0*t/tmax; - if (cost > 1.0) { cost = 1.0; } - else if(cost < -1.0) { cost = -1.0; } + // if cos(theta) negative, there is a numerical problem + // instead of making scattering backward, make in this case + // no scattering + if (std::abs(cost) > 1.0) { cost = 1.0; } G4double sint = std::sqrt((1.0-cost)*(1.0+cost)); - if (verboseLevel>1) { + if (verboseLevel > 1) { G4cout << " t= " << t << " tmax(GeV^2)= " << tmax/(GeV*GeV) << " cos(t)=" << cost << " sin(t)=" << sint << G4endl; } - G4double momentumCMS = 0.5*std::sqrt(tmax); G4LorentzVector lv2(momentumCMS*sint*std::cos(phi), momentumCMS*sint*std::sin(phi), - momentumCMS*cost, - std::sqrt(momentumCMS*momentumCMS + mass2*mass2)); + momentumCMS*cost, e2); // kinematics in the final state, may be a warning should be added if + G4ThreeVector bst = lv.boostVector(); lv2.boost(bst); - if (lv2.e() < mass2) { - lv2.setE(mass2); - } lv -= lv2; if (lv.e() < mass3) { lv.setE(mass3); @@ -205,6 +232,7 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( // prepare secondary particles theParticleChange.SetStatusChange(stopAndKill); theParticleChange.SetEnergyChange(0.0); + theParticleChange.SetWeightChange(fXSWeightFactor); if (!isShortLived) { auto aSec = new G4DynamicParticle(theSecondary, lv2); @@ -218,8 +246,9 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( auto p = (*products)[i]; auto lvp = p->Get4Momentum(); lvp.boost(bst1); - p->Set4Momentum(lvp); - theParticleChange.AddSecondary(p, secID); + auto pnew = new G4DynamicParticle(*p); + pnew->Set4Momentum(lvp); + theParticleChange.AddSecondary(pnew, secID); } delete products; } @@ -229,7 +258,7 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( auto aRec = new G4DynamicParticle(theRecoil, lv); theParticleChange.AddSecondary(aRec, secID); } else { - // recoil is an unstable fragment + // recoil is a fragment, which may be unstable G4Fragment frag(A, Z, lv); auto products = fHandler->BreakItUp(frag); for (auto & prod : *products) { @@ -243,43 +272,50 @@ G4HadFinalState* G4ChargeExchange::ApplyYourself( } G4double G4ChargeExchange::SampleT(const G4ParticleDefinition*, - const G4int A, const G4double tmax) const + const G4int A, const G4double ltmax) const { + const G4double GeV2 = CLHEP::GeV*CLHEP::GeV; + const G4double numLimit = 18.; + + G4double tmax = ltmax/GeV2; + if (verboseLevel > 1) { + G4cout << "G4ChargeExchange::SampleT tmax(GeV^2)=" << tmax << G4endl; + } + G4double aa, bb, cc, dd; G4Pow* g4pow = G4Pow::GetInstance(); - if (A <= 62.) { - aa = g4pow->powZ(A, 1.63); - bb = 14.5*g4pow->powZ(A, 0.66); - cc = 1.4*g4pow->powZ(A, 0.33); + G4double a13 = g4pow->Z13(A); + if (A <= 62) { + aa = (A*A); + bb = 14.5*a13*a13; + cc = 1.4*a13; dd = 10.; } else { aa = g4pow->powZ(A, 1.33); - bb = 60.*g4pow->powZ(A, 0.33); + bb = 60.*a13; cc = 0.4*g4pow->powZ(A, 0.40); dd = 10.; } - G4double x1 = (1.0 - G4Exp(-tmax*bb))*aa/bb; - G4double x2 = (1.0 - G4Exp(-tmax*dd))*cc/dd; - - G4double t; - G4double y = bb; - if(G4UniformRand()*(x1 + x2) < x2) y = dd; - - for (G4int i=0; i 1.0) { cost = 1.0; } - else if(cost < -1.0) { cost = -1.0; } + // if cos(theta) negative, there is a numerical problem + // instead of making scattering backward, make in this case + // no scattering + if (std::abs(cost) > 1.0) { cost = 1.0; } G4double sint = std::sqrt((1.0-cost)*(1.0+cost)); @@ -209,7 +211,7 @@ G4HadronElastic::SampleInvariantT(const G4ParticleDefinition* part, G4double mom, G4int, G4int A) { const G4double plabLowLimit = 400.0*CLHEP::MeV; - const G4double GeV2 = GeV*GeV; + const G4double GeV2 = CLHEP::GeV*CLHEP::GeV; const G4double z07in13 = std::pow(0.7, 0.3333333333); const G4double numLimit = 18.; @@ -263,7 +265,7 @@ G4HadronElastic::SampleInvariantT(const G4ParticleDefinition* part, G4double q2 = 1.0 - G4Exp(-std::min(dd*tmax, numLimit)); G4double s1 = q1*aa; G4double s2 = q2*cc; - if((s1 + s2)*G4UniformRand() < s2) { + if ((s1 + s2)*G4UniformRand() < s2) { q1 = q2; bb = dd; } diff --git a/source/processes/hadronic/models/de_excitation/History b/source/processes/hadronic/models/de_excitation/History index 7fed14b46e..52d9ad6dfd 100644 --- a/source/processes/hadronic/models/de_excitation/History +++ b/source/processes/hadronic/models/de_excitation/History @@ -6,7 +6,78 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2024-12-22 Vladimir Ivanchenko (hadr-deex-V11-02-19) +## 2025-06-18 Vladimir Ivanchenko (hadr-deex-V11-03-14) +- G4ExcitationHandler - fix initialisation of the new Fermi-BreakUp model +- G4FermiBreakUpAN - delete primary fragment, if decay is sucsessful - fixed + infinite loop in the new Fermi-BreakUp model + +## 2025-06-04 Vladimir Ivanchenko (hadr-deex-V11-03-13) +- G4PhotonEvaporation, G4VEmissionProbability - check life time of final excitation + level, special treatment ground and the next level, attempt to fix #2660 + +## 2025-06-04 Vladimir Ivanchenko (hadr-deex-V11-03-12) +- G4FermiBreakUpAN - A.Novikov propose minor fix for final state generation +- G4DeexPrecoParameters - use the same set of parameters as in 11.3.2 +- G4EvaporationProbability - fixed computation of inverse x-section + +## 2025-05-22 Vladimir Ivanchenko (hadr-deex-V11-03-11) +- G4DeexPrecoUtility - a new class, which provide the same computation to avoid + code duplication +- G4DeexPrecoParameters - use conservative set of parameters +- G4VEmissionProbability - update parameters of integration of the probability + density function +- G4CoulombBarrier - code clean-up +- G4EvaporationProbability, G4ProtonEvaporationProbability, + G4DeuteronEvaporationProbability, G4TritonEvaporationProbability, + G4He3EvaporationProbability, G4AlphaEvaporationProbability + used G4DeexPrecoUtility + +## 2025-05-01 Vladimir Ivanchenko (hadr-deex-V11-03-10) +- G4DeexPrecoParameters - added forgotten method +- G4VFermiFragmentAN, G4FermiBreakUpAN - fix Coverity warnings + +## 2025-04-25 Vladimir Ivanchenko (hadr-deex-V11-03-09) +- G4FermiDataTypes - A. Novikov fixed compilation warnings at MAC + +## 2025-04-04 Vladimir Ivanchenko (hadr-deex-V11-03-08) +- G4FermiBreakUpAN - new alternative FermiBreakUp model and supported classes + provided in github PR #84 by A. Novikov, Yandex and MIPT (January 2025) under + supervision of A. Svetlichnyi, INR RAS and MIPT. The model is based on + J.P. Bondorf et al., Physics Reports, 257(3):133–221. +- G4ExcitationHandler, G4DeexPrecoParameters - updated initialisation + to switch between different FermiBreakUp models + +## 2025-03-31 Vladimir Ivanchenko (hadr-deex-V11-03-07) +- G4LevelReader - attempt to fix Coverity warning. + +## 2025-03-18 Vladimir Ivanchenko (hadr-deex-V11-03-06) +- G4GEMChannelVI, G4EvaporationGEMFactoryVI, G4DeexPrecoParameters - new GEM + de-excitation model with 83 decay channels (in the default 68 channels). +- G4Evaporation - improved debug printout. + +## 2025-03-17 Vladimir Ivanchenko (hadr-deex-V11-03-05) +- G4StatMFMicroPartition - code cleanup, removed non-informative printout, + which may be repeated many times, instead stop MF model and return to + de-excitation handler. + +## 2025-03-05 Vladimir Ivanchenko (hadr-deex-V11-03-04) +- G4VEmissionProbability - use the new utility class G4VSIntegration, which + allows to simplify code, results are practically not affected. + +## 2025-02-15 Vladimir Ivanchenko (hadr-deex-V11-03-03) +- G4VEmissionProbability, G4EvaporationProbability, G4GEMProbabilityVI - updated + algorithms of integration of probabilities and sampling of kinetic energy of + emitted fragment (expected more accurate spectra). + +## 2025-01-26 Vladimir Ivanchenko (hadr-deex-V11-03-02) +- G4DeexPrecoParameters - added extra enumerator to choose variant of the + pre-compound model. + +## 2025-01-14 Vladimir Ivanchenko (hadr-deex-V11-03-01) +- G4NucLevel, G4PhotonEvaporation - use explicit type conversion from double + to float; use const arguments where possible. + +## 2024-12-22 Vladimir Ivanchenko (hadr-deex-V11-03-00) - G4ExcitationHandler, G4GammaTransition, G4PhotonEvaporation fixed problem #2584 - removed production of unphysical states diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc index b2360f235f..e2bd3b6a9c 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4AlphaEvaporationProbability.cc @@ -34,6 +34,7 @@ // 17-11-2010 V.Ivanchenko integer Z and A #include "G4AlphaEvaporationProbability.hh" +#include "G4DeexPrecoUtility.hh" G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() : G4EvaporationProbability(4,2,1.0) @@ -41,34 +42,7 @@ G4AlphaEvaporationProbability::G4AlphaEvaporationProbability() : G4double G4AlphaEvaporationProbability::CalcAlphaParam(const G4Fragment& fr) { - // Data comes from - // Dostrovsky, Fraenkel and Friedlander - // Physical Review, vol 116, num. 3 1959 - // - // const G4int size = 5; - // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; - // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06}; - - G4int aZ = fr.GetZ_asInt() - GetZ(); - G4double C; - - if (aZ <= 30) - { - C = 0.10; - } - else if (aZ <= 50) - { - C = 0.1 - (aZ-30)*0.001; - } - else if (aZ < 70) - { - C = 0.08 - (aZ-50)*0.001; - } - else - { - C = 0.06; - } - return 1.0 + C; + return 1.0 + G4DeexPrecoUtility::AlphaCValue(fr.GetZ_asInt() - 2); } G4double G4AlphaEvaporationProbability::CalcBetaParam(const G4Fragment &) diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc index 0f20b83180..b739a63e8a 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4DeuteronEvaporationProbability.cc @@ -33,6 +33,7 @@ // 17-11-2010 V.Ivanchenko integer Z and A #include "G4DeuteronEvaporationProbability.hh" +#include "G4DeexPrecoUtility.hh" G4DeuteronEvaporationProbability::G4DeuteronEvaporationProbability() : G4EvaporationProbability(2,1,3.0) @@ -40,25 +41,7 @@ G4DeuteronEvaporationProbability::G4DeuteronEvaporationProbability() : G4double G4DeuteronEvaporationProbability::CalcAlphaParam(const G4Fragment& fr) { - // Data comes from - // Dostrovsky, Fraenkel and Friedlander - // Physical Review, vol 116, num. 3 1959 - // - // const G4int size = 5; - // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; - // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10}; - // C for deuteron is equal to C for protons divided by 2 - - G4int aZ = fr.GetZ_asInt()-GetZ(); - G4double C; - - if (aZ <= 70) { - C = 0.10; - } else { - C = ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - - 0.66612e-01)*aZ + 0.98375; - } - return 1.0 + C*0.5; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(fr.GetZ_asInt() - 1)*0.5; } G4double G4DeuteronEvaporationProbability::CalcBetaParam(const G4Fragment&) diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc index 659cc0889f..3808decf6d 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4Evaporation.cc @@ -214,7 +214,7 @@ void G4Evaporation::BreakFragment(G4FragmentVector* theResult, // loop over evaporation channels for(i=0; iGetEmissionProbability(theResidualNucleus); - if(fVerbose > 1 && prob > 0.0) { + if (fVerbose > 1 && prob > 0.0) { G4cout << " Channel# " << i << " prob= " << prob << G4endl; } totprob += prob; @@ -273,7 +273,10 @@ void G4Evaporation::BreakFragment(G4FragmentVector* theResult, if (probabilities[i] >= totprob) { break; } } - if(fVerbose > 1) { G4cout << "$$$ Channel # " << i << G4endl; } + if (fVerbose > 1) { + G4cout << "$$$ Selected Channel# " << i << " MaxChannel=" + << maxchannel << G4endl; + } G4Fragment* frag = (*theChannels)[i]->EmittedFragment(theResidualNucleus); if(fVerbose > 2 && frag) { G4cout << " " << *frag << G4endl; } diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc index 48edaabde7..b98248108a 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4EvaporationProbability.cc @@ -91,9 +91,9 @@ G4EvaporationProbability::G4EvaporationProbability(G4int anA, G4int aZ, } if (0 == aZ) { - ResetIntegrator(30, 0.15*CLHEP::MeV, 0.02); + ResetIntegrator(0.15*CLHEP::MeV, 0.01); } else { - ResetIntegrator(30, 0.25*CLHEP::MeV, 0.03); + ResetIntegrator(0.20*CLHEP::MeV, 0.01); } } @@ -169,37 +169,44 @@ G4double G4EvaporationProbability::TotalProbability( return pProbability; } -G4double G4EvaporationProbability::ComputeProbability(G4double K, G4double CB) +G4double G4EvaporationProbability::ComputeProbability(G4double kinE, G4double CB) { + const G4double Kmin = 20*CLHEP::keV; + G4double K = std::max(kinE, Kmin); // abnormal case - should never happens if(pMass < pEvapMass + pResMass + K) { return 0.0; } - G4double pEvapM2 = pEvapMass*pEvapMass; - G4double mres = std::sqrt(pMass*pMass + pEvapM2 - 2.*pMass*(pEvapMass + K)); + G4double K1 = pMass - pEvapMass - K; + G4double mres = std::sqrt(K1*K1 - K*(2*pEvapMass + K)); G4double excRes = mres - pResMass; if (excRes < 0.0) { return 0.0; } - G4double K1 = (pMass*(K + pEvapMass) - pEvapM2)/mres - pEvapMass; - K1 = std::max(K1, 0.0); - G4double xs = CrossSection(K1, CB); + G4double K2 = 0.5*(pMass + pEvapMass + mres)*(pMass - pEvapMass - mres)/mres; + G4double xs = CrossSection(K2, CB); if (xs <= 0.0) { return 0.0; } a1 = pNuclearLevelData->GetLevelDensity(resZ, resA, excRes); G4double E0 = std::max(freeU - delta0, 0.0); G4double E1 = std::max(excRes - delta1, 0.0); - G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K1*xs; + G4double prob = pcoeff*G4Exp(2.0*(std::sqrt(a1*E1) - std::sqrt(a0*E0)))*K*xs; return prob; } G4double -G4EvaporationProbability::CrossSection(G4double K, G4double CB) +G4EvaporationProbability::CrossSection(G4double kine, G4double CB) { + const G4double Kmin = 20*CLHEP::keV; + G4double K = std::max(kine, Kmin); // compute power once if (OPTxs > 1 && 0 < index && resA != lastA) { lastA = resA; muu = G4KalbachCrossSection::ComputePowerParameter(resA, index); } if (OPTxs == 1) { + const G4double lim = 2*CLHEP::MeV; + G4double e1 = lowEnergyLimitMeV[theZ]; + if (e1 == 0.0) { e1 = lim; } + K = std::max(K, e1); recentXS = fXSection->GetElementCrossSection(K, resZ)/CLHEP::millibarn; } else if (OPTxs == 2) { diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc index 0d8f81b8c3..c0fa4600a4 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4He3EvaporationProbability.cc @@ -34,6 +34,7 @@ // 17-11-2010 V.Ivanchenko integer Z and A #include "G4He3EvaporationProbability.hh" +#include "G4DeexPrecoUtility.hh" G4He3EvaporationProbability::G4He3EvaporationProbability() : G4EvaporationProbability(3,2,2.0) @@ -41,35 +42,7 @@ G4He3EvaporationProbability::G4He3EvaporationProbability() : G4double G4He3EvaporationProbability::CalcAlphaParam(const G4Fragment& fr) { - // Data comes from - // Dostrovsky, Fraenkel and Friedlander - // Physical Review, vol 116, num. 3 1959 - // - // const G4int size = 5; - // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; - // G4double Calpha[5] = { 0.10, 0.10, 0.10, 0.08, 0.06}; - // C for He3 is equal to C for alpha times 4/3 - - G4int aZ = fr.GetZ_asInt() - GetZ(); - G4double C; - - if (aZ <= 30) - { - C = 0.10; - } - else if (aZ <= 50) - { - C = 0.1 - (aZ - 30)*0.001; - } - else if (aZ < 70) - { - C = 0.08 - (aZ - 50)*0.001; - } - else - { - C = 0.06; - } - return 1.0 + C*4/3.0; + return 1.0 + G4DeexPrecoUtility::AlphaCValue(fr.GetZ_asInt() - 2)*4.0/3.0; } G4double G4He3EvaporationProbability::CalcBetaParam(const G4Fragment & ) diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc index 8aea042117..d1cbb2baaa 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4ProtonEvaporationProbability.cc @@ -34,31 +34,19 @@ // 17-11-2010 V.Ivanchenko integer Z and A #include "G4ProtonEvaporationProbability.hh" +#include "G4DeexPrecoUtility.hh" G4ProtonEvaporationProbability::G4ProtonEvaporationProbability() : G4EvaporationProbability(1,1,2.0) {} G4double -G4ProtonEvaporationProbability::CalcAlphaParam(const G4Fragment& fragment) +G4ProtonEvaporationProbability::CalcAlphaParam(const G4Fragment& fr) { - // Data comes from - // Dostrovsky, Fraenkel and Friedlander - // Physical Review, vol 116, num. 3 1959 - // - // const G4int size = 5; - // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; - // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10}; - - G4int aZ = fragment.GetZ_asInt()-GetZ(); - G4double C = (aZ <= 70) ? 0.10 : - ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - 0.66612e-01)*aZ - + 0.98375; - - return 1.0 + C; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(fr.GetZ_asInt() - 1); } -G4double G4ProtonEvaporationProbability::CalcBetaParam(const G4Fragment & ) +G4double G4ProtonEvaporationProbability::CalcBetaParam(const G4Fragment& ) { return 0.0; } diff --git a/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc b/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc index 57c5e01e09..59e8f7aa20 100644 --- a/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc +++ b/source/processes/hadronic/models/de_excitation/evaporation/src/G4TritonEvaporationProbability.cc @@ -34,6 +34,7 @@ // 17-11-2010 V.Ivanchenko integer Z and A #include "G4TritonEvaporationProbability.hh" +#include "G4DeexPrecoUtility.hh" G4TritonEvaporationProbability::G4TritonEvaporationProbability() : G4EvaporationProbability(3,1,2.0) @@ -41,21 +42,7 @@ G4TritonEvaporationProbability::G4TritonEvaporationProbability() : G4double G4TritonEvaporationProbability::CalcAlphaParam(const G4Fragment& fr) { - // Data comes from - // Dostrovsky, Fraenkel and Friedlander - // Physical Review, vol 116, num. 3 1959 - // - // const G4int size = 5; - // G4double Zlist[5] = { 10.0, 20.0, 30.0, 50.0, 70.0}; - // G4double Cp[5] = { 0.50, 0.28, 0.20, 0.15, 0.10}; - // C for triton is equal to C for protons divided by 3 - - G4int aZ = fr.GetZ_asInt()-GetZ(); - G4double C = (aZ <= 70) ? 0.10 : - ((((0.15417e-06*aZ) - 0.29875e-04)*aZ + 0.21071e-02)*aZ - - 0.66612e-01)*aZ + 0.98375; - - return 1.0 + C/3.0; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(fr.GetZ_asInt() - 1)/3.0; } G4double G4TritonEvaporationProbability::CalcBetaParam(const G4Fragment& ) diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiBreakUpAN.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiBreakUpAN.hh new file mode 100644 index 0000000000..30be0fbc01 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiBreakUpAN.hh @@ -0,0 +1,102 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN is an alternative realisation of Fermi Break Up +// de-excitation by A. Novikov, Yandex and MIPT (January 2025) +// under supervision of Aleksandr Svetlichnyi, INR RAS and MIPT +// +// The model originally developed in J.P. Bondorf, A.S. Botvina, A.S. Iljinov, +// I.N. Mishustin, and K. Sneppen, "Statistical multifragmentation of nuclei." +// Physics Reports, 257(3):133–221, Jun 1995. +// https://doi.org/10.1016/0370-1573(94)00097-M, doi:10.1016/0370-1573(94)00097-m. +// + +#ifndef G4FERMIBREAKUPAN_HH +#define G4FERMIBREAKUPAN_HH + +#include "G4FermiDataTypes.hh" +#include "G4FermiParticle.hh" +#include "G4FermiSplitter.hh" +#include "G4VFermiBreakUp.hh" +#include "globals.hh" + +#include + +class G4FermiBreakUpAN : public G4VFermiBreakUp +{ + private: + class PossibleSplits + { + private: + using NucleiSplits = std::vector; + + public: + PossibleSplits() = default; + PossibleSplits& operator=(PossibleSplits&&) noexcept = default; + + PossibleSplits(const G4FermiAtomicMass maxAtomicMass); + + const NucleiSplits& GetSplits(const G4FermiAtomicMass atomicMass, + const G4FermiChargeNumber chargeNumber) const; + + void InsertSplits(const G4FermiAtomicMass atomicMass, + const G4FermiChargeNumber chargeNumber, + NucleiSplits&& splits); + + private: + std::vector splits_; + }; + + public: + explicit G4FermiBreakUpAN(G4int verbosity = 0); + ~G4FermiBreakUpAN() override = default; + + void Initialise() override; + + // check if the Fermi Break Up model can be used + G4bool IsApplicable(G4int Z, G4int A, G4double eexc) const override; + + // vector of products is added to the provided vector + // if no decay channel is found out for the primary fragment + // then it is added to the results vector + // if primary decays then it is deleted + void BreakFragment(G4FragmentVector* results, G4Fragment* theNucleus) override; + + std::vector BreakItUp(const G4FermiParticle& nucleus) const; + + private: + std::vector SplitToParticles(const G4FermiParticle& sourceParticle, + const G4FermiFragmentVector& split) const; + + // improve performance, reusing allocated memory + mutable std::vector weights_; + PossibleSplits splits_; + + G4int secID_; + G4int verbosity_ = 0; +}; + +#endif // G4FERMIBREAKUP_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiDataTypes.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiDataTypes.hh new file mode 100644 index 0000000000..76ca13aba4 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiDataTypes.hh @@ -0,0 +1,186 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMIDATATYPES_HH +#define G4FERMIDATATYPES_HH + +#include "G4LorentzVector.hh" +#include "G4ThreeVector.hh" +#include "globals.hh" + +namespace +{ + static constexpr G4int MAX_Z = 9; + static constexpr G4int MAX_A = 17; +} + +class G4FermiAtomicMass +{ + public: + using ValueType = std::uint32_t; + + G4FermiAtomicMass() = default; + + explicit constexpr G4FermiAtomicMass(ValueType mass) : mass_(mass) {} + + G4FermiAtomicMass(const G4FermiAtomicMass& other) = default; + + G4FermiAtomicMass(G4FermiAtomicMass&& other) = default; + + G4FermiAtomicMass& operator=(const G4FermiAtomicMass& other) = default; + + G4FermiAtomicMass& operator=(G4FermiAtomicMass&& other) = default; + + constexpr operator std::uint32_t() const { return mass_; } + + constexpr operator G4int() const { return mass_; } + + constexpr operator G4double() const { return mass_; } + + G4bool operator<(const G4FermiAtomicMass& other) const { return mass_ < other.mass_; } + + G4bool operator>(const G4FermiAtomicMass& other) const { return mass_ > other.mass_; } + + G4bool operator<=(const G4FermiAtomicMass& other) const { return mass_ <= other.mass_; } + + G4bool operator>=(const G4FermiAtomicMass& other) const { return mass_ >= other.mass_; } + + G4bool operator==(const G4FermiAtomicMass& other) const { return mass_ == other.mass_; } + + G4bool operator!=(const G4FermiAtomicMass& other) const { return mass_ != other.mass_; } + + private: + ValueType mass_; +}; + +class G4FermiChargeNumber +{ + public: + using ValueType = std::uint32_t; + + G4FermiChargeNumber() = default; + + explicit constexpr G4FermiChargeNumber(ValueType charge) : charge_(charge) {} + + G4FermiChargeNumber(const G4FermiChargeNumber& other) = default; + + G4FermiChargeNumber(G4FermiChargeNumber&& other) = default; + + G4FermiChargeNumber& operator=(const G4FermiChargeNumber& other) = default; + + G4FermiChargeNumber& operator=(G4FermiChargeNumber&& other) = default; + + constexpr operator std::uint32_t() const { return charge_; } + + constexpr operator G4int() const { return charge_; } + + constexpr operator G4double() const { return charge_; } + + G4bool operator<(const G4FermiChargeNumber& other) const { return charge_ < other.charge_; } + + G4bool operator>(const G4FermiChargeNumber& other) const { return charge_ > other.charge_; } + + G4bool operator<=(const G4FermiChargeNumber& other) const { return charge_ <= other.charge_; } + + G4bool operator>=(const G4FermiChargeNumber& other) const { return charge_ >= other.charge_; } + + G4bool operator==(const G4FermiChargeNumber& other) const { return charge_ == other.charge_; } + + G4bool operator!=(const G4FermiChargeNumber& other) const { return charge_ != other.charge_; } + + private: + ValueType charge_; +}; + +struct G4FermiNucleiData +{ + G4FermiAtomicMass atomicMass; + G4FermiChargeNumber chargeNumber; + + G4bool operator<(const G4FermiNucleiData& other) const + { + return atomicMass < other.atomicMass + || (atomicMass == other.atomicMass && chargeNumber < other.chargeNumber); + } + + G4bool operator==(const G4FermiNucleiData& other) const + { + return atomicMass == other.atomicMass && chargeNumber == other.chargeNumber; + } + + G4bool operator!=(const G4FermiNucleiData& other) const + { + return atomicMass != other.atomicMass || chargeNumber != other.chargeNumber; + } +}; + +namespace std +{ +template<> +struct hash +{ + std::size_t operator()(const G4FermiNucleiData& key) const + { + auto mass = G4int(key.atomicMass); + auto charge = G4int(key.chargeNumber); + return (mass * (mass + 1)) / 2 + charge; + } +}; + +std::string to_string(G4FermiAtomicMass mass); +std::string to_string(G4FermiChargeNumber charge); + +std::ostream& operator<<(std::ostream& out, const G4FermiAtomicMass& mass); +std::istream& operator>>(std::istream& in, G4FermiAtomicMass& mass); + +std::ostream& operator<<(std::ostream& out, const G4FermiChargeNumber& charge); +std::istream& operator>>(std::istream& in, G4FermiChargeNumber& charge); +} // namespace std + +constexpr G4FermiAtomicMass operator""_m(unsigned long long mass) +{ + return G4FermiAtomicMass(static_cast(mass)); +} + +constexpr G4FermiChargeNumber operator""_c(unsigned long long charge) +{ + return G4FermiChargeNumber(static_cast(charge)); +} + +#define FERMI_ASSERT_MSG(COND, MSG) \ + if (!(COND)) { \ + G4ExceptionDescription ed; \ + ed << "assertion failed: \"" << #COND << '\"' << " at " << __FILE__ << ':' << __LINE__ \ + << '\n' \ + << MSG; \ + G4Exception("G4FermiBreakUpAN: ", "fermi03", FatalException, ed, ""); \ +} + +#endif // G4FERMIDATATYPES_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiFragmentPoolAN.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiFragmentPoolAN.hh new file mode 100644 index 0000000000..72a663965f --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiFragmentPoolAN.hh @@ -0,0 +1,124 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMIFRAGMENTPOOLAN_HH +#define G4FERMIFRAGMENTPOOLAN_HH + +#include "G4FermiDataTypes.hh" +#include "G4VFermiFragmentAN.hh" +#include "globals.hh" + +class G4FermiFragmentPoolAN +{ + private: + using Container = std::vector; + + public: + class DefaultPoolANSource : private std::vector + { + private: + using PoolANContainer = std::vector; + + public: + DefaultPoolANSource(); + + void Initialize(); + + using PoolANContainer::begin; + using PoolANContainer::cbegin; + using PoolANContainer::cend; + using PoolANContainer::end; + }; + + class IteratorRange + { + public: + using const_iterator = Container::const_iterator; + + IteratorRange(const_iterator begin, const_iterator end) : begin_(begin), end_(end) {} + + const_iterator begin() const { return begin_; } + const_iterator end() const { return end_; } + + private: + const_iterator begin_; + const_iterator end_; + }; + + std::size_t Count(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) const; + + std::size_t Count(G4FermiNucleiData nuclei) const + { + return Count(nuclei.atomicMass, nuclei.chargeNumber); + } + + IteratorRange GetFragments(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const; + + IteratorRange GetFragments(G4FermiNucleiData nuclei) const + { + return GetFragments(nuclei.atomicMass, nuclei.chargeNumber); + } + + template + void Initialize(const DataSource& dataSource) + { + Initialize(dataSource.begin(), dataSource.end()); + } + + template + void Initialize(Iter begin, Iter end) + { + fragments_.clear(); + static_assert( + std::is_same_v, G4VFermiFragmentAN*>, + "invalid iterator"); + for (auto it = begin; it != end; ++it) { + AddFragment(**it); + } + } + + void AddFragment(const G4VFermiFragmentAN& fragment); + + static G4FermiFragmentPoolAN& Instance() + { + static G4FermiFragmentPoolAN pool; + return pool; + } + + private: + G4FermiFragmentPoolAN(); + + static inline const Container EmptyContainer_ = {}; + + std::vector fragments_; +}; + +#endif // G4FERMIFRAGMENTPOOL_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiIntegerPartition.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiIntegerPartition.hh new file mode 100644 index 0000000000..0c8e3f1649 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiIntegerPartition.hh @@ -0,0 +1,94 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4INTEGERPARTITION_HH +#define G4INTEGERPARTITION_HH + +#include "globals.hh" +#include + +using G4FermiPartition = std::vector; + +class G4integerPartition +{ + public: + class Iterator; + + Iterator begin() const; + + Iterator end() const; + + G4integerPartition(std::uint32_t number, std::uint32_t termsCount, std::uint32_t base = 1); + + private: + std::uint32_t number_; + std::uint32_t termsCount_; + std::uint32_t base_; +}; + +class G4integerPartition::Iterator +{ + public: + friend class G4integerPartition; + + using difference_type = std::int64_t; + using value_type = G4FermiPartition; + using reference = const G4FermiPartition&; + using pointer = const G4FermiPartition*; + using iterator_category = std::forward_iterator_tag; + + Iterator(const Iterator&) = default; + + Iterator& operator=(const Iterator&) = default; + + pointer operator->() const; + + reference operator*() const; + + Iterator& operator++(); + + Iterator operator++(int); + + G4bool operator==(const Iterator& other) const; + + G4bool operator!=(const Iterator& other) const; + + private: + // represents end partition + Iterator() = default; + + Iterator(std::uint32_t number, std::uint32_t termsCount, std::uint32_t base); + + void NextPartition(); + + G4FermiPartition partition_; +}; + +#endif // G4intEGERPARTITION_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiNucleiProperties.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiNucleiProperties.hh new file mode 100644 index 0000000000..a66a03e0b8 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiNucleiProperties.hh @@ -0,0 +1,101 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMINUCLEIPROPERTIES_HH +#define G4FERMINUCLEIPROPERTIES_HH + +#include "G4FermiDataTypes.hh" +#include "globals.hh" +#include + +// Caches values from larger G4NucleiProperties(x5-10 speed boost) +class G4FermiNucleiProperties +{ + public: + void Initialize() { *this = G4FermiNucleiProperties(); } + + template + void Initialize(const DataSource& dataSource) + { + Initialize(dataSource.begin(), dataSource.end()); + } + + template + void Initialize(Iter begin, Iter end) + { + nucleiMasses_.clear(); + static_assert( + std::is_same_v>, + "invalid iterator"); + for (auto it = begin; it != end; ++it) { + InsertNuclei(it->first.atomicMass, it->first.chargeNumber, it->second); + } + } + + static G4double GetNuclearMass(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) + { + return Instance().GetNuclearMassImpl(atomicMass, chargeNumber); + } + + static G4bool IsStable(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) + { + return Instance().IsStableImpl(atomicMass, chargeNumber); + } + + void InsertNuclei(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, G4double mass, + G4bool isStable = true); + + static G4FermiNucleiProperties& Instance() + { + static G4FermiNucleiProperties properties; + return properties; + } + + private: + G4FermiNucleiProperties(); + + G4double GetNuclearMassImpl(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const; + + G4bool IsStableImpl(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) const; + + struct G4FermiMassData + { + G4double mass; + + G4bool isStable = false; // is nuclei stable + + G4bool isCached = false; // value has been inserted earlier + }; + + mutable std::vector nucleiMasses_; +}; + +#endif // G4FERMINUCLEIPROPERTIES_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiParticle.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiParticle.hh new file mode 100644 index 0000000000..3ed2b40086 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiParticle.hh @@ -0,0 +1,75 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMIPARTICLE_HH +#define G4FERMIPARTICLE_HH + +#include "G4FermiDataTypes.hh" + +class G4FermiParticle +{ + public: + G4FermiParticle() = delete; + + G4FermiParticle(const G4FermiParticle&) = default; + G4FermiParticle(G4FermiParticle&&) = default; + + G4FermiParticle& operator=(const G4FermiParticle&) = default; + G4FermiParticle& operator=(G4FermiParticle&&) = default; + + G4FermiParticle(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + const G4LorentzVector& momentum); + + G4FermiAtomicMass GetAtomicMass() const; + + G4FermiChargeNumber GetChargeNumber() const; + + const G4LorentzVector& GetMomentum() const; + + G4double GetExcitationEnergy() const; + + G4bool IsStable() const; + + private: + void RecalculateExcitationEnergy(); + + G4FermiAtomicMass atomicMass_; + G4FermiChargeNumber chargeNumber_; + G4LorentzVector momentum_; + + G4double excitationEnergy_ = 0; +}; + +namespace std +{ +ostream& operator<<(ostream&, const G4FermiParticle&); +} // namespace std + +#endif // G4FERMIPARTICLE_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiPhaseDecay.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiPhaseDecay.hh new file mode 100644 index 0000000000..5c018cb7c0 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiPhaseDecay.hh @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMIPHASEDECAY_HH +#define G4FERMIPHASEDECAY_HH + +#include "G4HadPhaseSpaceKopylov.hh" + +class G4FermiPhaseDecay +{ + public: + std::vector CalculateDecay(const G4LorentzVector& totalMomentum, + const std::vector& fragmentsMass) const + { + std::vector results; + KopylovDecay().Generate(totalMomentum.m(), fragmentsMass, results); + return results; + } + + private: + static G4HadPhaseSpaceKopylov& KopylovDecay() + { + static G4HadPhaseSpaceKopylov phaseDecay; + return phaseDecay; + } +}; + +#endif // G4FERMIPHASEDECAY_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiSplitter.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiSplitter.hh new file mode 100644 index 0000000000..2631b8c8b5 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiSplitter.hh @@ -0,0 +1,54 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMISPLITTER_HH +#define G4FERMISPLITTER_HH + +#include "G4FermiDataTypes.hh" +#include "G4VFermiFragmentAN.hh" +#include "globals.hh" + +class G4FermiSplitter +{ + public: + static G4double DecayWeight(const G4FermiFragmentVector& split, G4FermiAtomicMass atomicMass, + G4double totalEnergy); + + static G4double SplitFactor(const G4FermiFragmentVector& split, G4FermiAtomicMass atomicMass); + + static G4double KineticFactor(const G4FermiFragmentVector& split, G4double totalEnergy); + + static void GenerateSplits(G4FermiNucleiData nucleiData, + std::vector& splits); + + static std::vector GenerateSplits(G4FermiNucleiData nucleiData); +}; + +#endif // G4FERMISPLITTER_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiStableFragment.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiStableFragment.hh new file mode 100644 index 0000000000..16520304c6 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiStableFragment.hh @@ -0,0 +1,50 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMISTABLEFRAGMENT_HH +#define G4FERMISTABLEFRAGMENT_HH + +#include "G4VFermiFragmentAN.hh" + +class G4FermiStableFragment : public G4VFermiFragmentAN +{ + public: + + G4FermiStableFragment(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy); + + void AppendDecayFragments(const G4LorentzVector& momentum, + std::vector& fragments) const override; + + private: + void DoInitialize() override; +}; + +#endif // G4FERMISTABLEFRAGMENT_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiUnstableFragment.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiUnstableFragment.hh new file mode 100644 index 0000000000..9ce293f429 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4FermiUnstableFragment.hh @@ -0,0 +1,90 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4FERMIUNSTABLEFRAGMENT_HH +#define G4FERMIUNSTABLEFRAGMENT_HH + +#include "G4VFermiFragmentAN.hh" + +class G4FermiUnstableFragment : public G4VFermiFragmentAN +{ + public: + G4FermiUnstableFragment(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy, + std::vector&& decayData); + + void AppendDecayFragments(const G4LorentzVector& momentum, + std::vector& particles) const override; + + private: + void DoInitialize() override; + + std::vector decayData_; + + std::vector masses_; +}; + +#define FERMI_ADD_UNSTABLE_FRAGMENT(NAME, FRAGMENTS) \ + inline G4FermiUnstableFragment NAME(G4FermiAtomicMass atomicMass, \ + G4FermiChargeNumber chargeNumber, G4int polarization, \ + G4double excitationEnergy) \ + { \ + return G4FermiUnstableFragment(atomicMass, chargeNumber, polarization, excitationEnergy, \ + FRAGMENTS); \ + } + +// He5 ----> alpha + neutron +FERMI_ADD_UNSTABLE_FRAGMENT(He5Fragment, std::vector({ + G4FermiNucleiData{4_m, 2_c}, + G4FermiNucleiData{1_m, 0_c}, + })) + +// B9 ----> alpha + alpha + proton +FERMI_ADD_UNSTABLE_FRAGMENT(B9Fragment, std::vector({ + G4FermiNucleiData{4_m, 2_c}, + G4FermiNucleiData{4_m, 2_c}, + G4FermiNucleiData{1_m, 1_c}, + })) + +// Be8 ----> alpha + alpha +FERMI_ADD_UNSTABLE_FRAGMENT(Be8Fragment, std::vector({ + G4FermiNucleiData{4_m, 2_c}, + G4FermiNucleiData{4_m, 2_c}, + })) + +// Li5 ----> alpha + proton +FERMI_ADD_UNSTABLE_FRAGMENT(Li5Fragment, std::vector({ + G4FermiNucleiData{4_m, 2_c}, + G4FermiNucleiData{1_m, 1_c}, + })) + +#undef FERMI_ADD_UNSTABLE_FRAGMENT + +#endif // G4FERMIUNSTABLEFRAGMENT_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiBreakUp.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiBreakUp.hh index 2436f782c6..5e1872af8c 100644 --- a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiBreakUp.hh +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiBreakUp.hh @@ -44,18 +44,18 @@ public: G4VFermiBreakUp() {}; virtual ~G4VFermiBreakUp() = default; - virtual void Initialise() = 0; + virtual void Initialise() {}; // check if the Fermi Break Up model can be used - // mass is an effective mass of a fragment - virtual G4bool IsApplicable(G4int Z, G4int A, G4double eexc) const = 0; + virtual G4bool IsApplicable(G4int /*Z*/, G4int /*A*/, G4double /*Eexc*/) const + { return false; }; // vector of products is added to the provided vector // if no decay channel is found out for the primary fragment // then it is added to the results vector // if primary decays then it is deleted - virtual void BreakFragment(G4FragmentVector* results, - G4Fragment* theNucleus) = 0; + virtual void BreakFragment(G4FragmentVector* /*results*/, + G4Fragment* /*theNucleus*/) {}; G4VFermiBreakUp(const G4VFermiBreakUp &right) = delete; const G4VFermiBreakUp & operator=(const G4VFermiBreakUp &right) = delete; diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiFragmentAN.hh b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiFragmentAN.hh new file mode 100644 index 0000000000..0cb8ddeb52 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/include/G4VFermiFragmentAN.hh @@ -0,0 +1,91 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#ifndef G4VFERMIFRAGMENTAN_HH +#define G4VFERMIFRAGMENTAN_HH + +#include "G4FermiDataTypes.hh" +#include "G4FermiParticle.hh" + +#include "globals.hh" +#include + +class G4VFermiFragmentAN; + +using G4FermiFragmentVector = std::vector; + +class G4VFermiFragmentAN +{ + public: + G4VFermiFragmentAN(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy); + + G4VFermiFragmentAN(const G4VFermiFragmentAN&) = delete; + + G4VFermiFragmentAN& operator=(const G4VFermiFragmentAN&) = delete; + + ~G4VFermiFragmentAN() = default; + + void Initialize(); + + std::vector GetDecayFragments(const G4LorentzVector& momentum) const; + + virtual void AppendDecayFragments(const G4LorentzVector& momentum, + std::vector& particles) const = 0; + + G4FermiAtomicMass GetAtomicMass() const; + + G4FermiChargeNumber GetChargeNumber() const; + + G4int GetPolarization() const; + + G4double GetExcitationEnergy() const; + + G4double GetMass() const; + + G4double GetTotalEnergy() const; + + protected: + virtual void DoInitialize() = 0; + + G4FermiAtomicMass atomicMass_; // A + G4FermiChargeNumber chargeNumber_; // Z + G4int polarization_; + + G4double groudStateMass_; + G4double excitationEnergy_; +}; + +namespace std +{ +ostream& operator<<(ostream&, const G4VFermiFragmentAN&); +} // namespace std + +#endif // G4VFERMIFRAGMENTAN_HH diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/sources.cmake b/source/processes/hadronic/models/de_excitation/fermi_breakup/sources.cmake index 6f027b0167..2775215078 100644 --- a/source/processes/hadronic/models/de_excitation/fermi_breakup/sources.cmake +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/sources.cmake @@ -4,20 +4,41 @@ geant4_add_module(G4hadronic_deex_fermi_breakup PUBLIC_HEADERS G4FermiBreakUpUtil.hh + G4FermiBreakUpAN.hh G4FermiBreakUpVI.hh G4FermiChannels.hh + G4FermiDataTypes.hh G4FermiFragment.hh + G4FermiFragmentPoolAN.hh G4FermiFragmentsPoolVI.hh + G4FermiIntegerPartition.hh + G4FermiNucleiProperties.hh G4FermiPair.hh + G4FermiParticle.hh + G4FermiPhaseDecay.hh G4FermiPhaseSpaceDecay.hh + G4FermiSplitter.hh + G4FermiStableFragment.hh + G4FermiUnstableFragment.hh G4VFermiBreakUp.hh + G4VFermiFragmentAN.hh SOURCES G4FermiBreakUpUtil.cc + G4FermiBreakUpAN.cc G4FermiBreakUpVI.cc + G4FermiDataTypes.cc G4FermiFragment.cc + G4FermiFragmentPoolAN.cc G4FermiFragmentsPoolVI.cc + G4FermiIntegerPartition.cc + G4FermiNucleiProperties.cc G4FermiPair.cc - G4FermiPhaseSpaceDecay.cc) + G4FermiParticle.cc + G4FermiPhaseSpaceDecay.cc + G4FermiSplitter.cc + G4FermiStableFragment.cc + G4FermiUnstableFragment.cc + G4VFermiFragmentAN.cc) geant4_module_link_libraries(G4hadronic_deex_fermi_breakup PUBLIC @@ -26,5 +47,6 @@ geant4_module_link_libraries(G4hadronic_deex_fermi_breakup G4hepgeometry G4heprandom PRIVATE + G4baryons G4hadronic_deex_management G4partman) diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpAN.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpAN.cc new file mode 100644 index 0000000000..9dbdcddd23 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpAN.cc @@ -0,0 +1,298 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4FermiBreakUpAN.hh" + +#include "G4FermiDataTypes.hh" +#include "G4FermiFragmentPoolAN.hh" +#include "G4FermiNucleiProperties.hh" +#include "G4FermiParticle.hh" +#include "G4FermiPhaseDecay.hh" +#include "G4FermiSplitter.hh" +#include "G4VFermiFragmentAN.hh" + +#include "G4BaryonConstructor.hh" +#include "G4NucleiProperties.hh" +#include "G4PhysicalConstants.hh" +#include "G4PhysicsModelCatalog.hh" +#include "G4ThreeVector.hh" +#include "Randomize.hh" + +#include +#include + +#ifdef G4VERBOSE +# define G4FERMI_VERBOSE 1 +#else +# define G4FERMI_VERBOSE 0 +#endif + +#define FERMI_LOG_MSG(verbosity, level, msg) \ + do { \ + if (G4FERMI_VERBOSE) { \ + if ((verbosity) >= (level)) { \ + G4cout << __FILE__ << ':' << __LINE__ << " in function \"" << __FUNCTION__ << "\"\n" \ + << msg << G4endl; \ + } \ + } \ + } while (0) + +constexpr G4int FERMI_DEBUG = 2; + +#define FERMI_LOG_WARN(verbosity, msg) FERMI_LOG_MSG(verbosity, FERMI_WARN, msg) +#define FERMI_LOG_DEBUG(verbosity, msg) FERMI_LOG_MSG(verbosity, FERMI_DEBUG, msg) + +namespace +{ +constexpr const char* SPACES_OFFSET = " "; + +std::size_t SampleWeightDistribution(const std::vector& weights) +{ + const auto totalWeight = std::accumulate(weights.begin(), weights.end(), 0.); + FERMI_ASSERT_MSG(totalWeight > 0., "Invalid weights: all values are zero"); + + const auto targetWeight = G4RandFlat::shoot() * totalWeight; + G4double cummulativeWeight = 0; + for (std::size_t i = 0; i < weights.size(); ++i) { + cummulativeWeight += weights[i]; + + if (cummulativeWeight >= targetWeight) { + return i; + } + } + + return weights.size() - 1; +} + +G4String LogProducts(const std::vector& particles) +{ + std::ostringstream out; + + out << "[\n"; + for (const auto& particle : particles) { + out << SPACES_OFFSET << particle << ";\n"; + } + out << "]"; + + return std::move(out).str(); +} + +G4LorentzVector ChangeFrameOfReference(const G4LorentzVector& vec, const G4ThreeVector& boost) +{ + auto copy = vec; + copy.boost(boost); + return copy; +} + +G4String LogSplit(const G4FermiFragmentVector& split) +{ + std::ostringstream out; + + out << "[\n"; + for (const auto fragmentPtr : split) { + out << SPACES_OFFSET << *fragmentPtr << ";\n"; + } + out << "]"; + + return std::move(out).str(); +} + +std::size_t GetSlot(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) +{ + const auto mass = static_cast(atomicMass); + const auto charge = static_cast(chargeNumber); + return (mass * (mass + 1)) / 2 + charge; +} +} // namespace + +G4FermiBreakUpAN::PossibleSplits::PossibleSplits(const G4FermiAtomicMass maxAtomicMass) +{ + const auto maxMass = static_cast(maxAtomicMass); + splits_.resize(maxMass * (maxMass + 1) / 2); +} + +const std::vector& +G4FermiBreakUpAN::PossibleSplits::GetSplits(const G4FermiAtomicMass atomicMass, + const G4FermiChargeNumber chargeNumber) const +{ + const auto slot = GetSlot(atomicMass, chargeNumber); + return splits_.at(slot); +} + +void G4FermiBreakUpAN::PossibleSplits::InsertSplits(const G4FermiAtomicMass atomicMass, + const G4FermiChargeNumber chargeNumber, + std::vector&& splits) +{ + const auto slot = GetSlot(atomicMass, chargeNumber); + + if (slot >= splits_.size()) { + splits_.resize(slot + static_cast(atomicMass)); + } + + splits_[slot] = std::move(splits); +} + +G4FermiBreakUpAN::G4FermiBreakUpAN(G4int verbosity) + : splits_(G4FermiAtomicMass(MAX_A)), + secID_(G4PhysicsModelCatalog::GetModelID("model_G4FermiBreakUpVI")), + verbosity_(verbosity) +{} + +std::vector G4FermiBreakUpAN::BreakItUp(const G4FermiParticle& particle) const +{ + FERMI_LOG_DEBUG(verbosity_, "Breaking up particle: " << particle); + + if (particle.GetExcitationEnergy() < 0.) { + FERMI_LOG_DEBUG(verbosity_, "G4FermiParticle is stable with excitation energy = " + << particle.GetExcitationEnergy()); + return {particle}; + } + + const auto& splits = splits_.GetSplits(particle.GetAtomicMass(), particle.GetChargeNumber()); + FERMI_LOG_DEBUG(verbosity_, + "Selecting Split for " << particle << " from " << splits.size() << " splits"); + if (splits.empty()) { + FERMI_LOG_DEBUG(verbosity_, "No splits found"); + return {particle}; + } + + // get phase space weights for every split + // we can't cache them, because calculations is probabilistic + weights_.resize(splits.size()); + std::transform(splits.begin(), splits.end(), weights_.begin(), + [atomicMass = particle.GetAtomicMass(), + totalEnergy = particle.GetMomentum().m()](const auto& split) { + return G4FermiSplitter::DecayWeight(split, atomicMass, totalEnergy); + }); + + if (std::all_of(weights_.begin(), weights_.end(), [](auto weight) { return weight == 0.; })) { + FERMI_LOG_DEBUG(verbosity_, "Every split has zero weight"); + return {particle}; + } + + const auto& chosenSplit = splits[SampleWeightDistribution(weights_)]; + FERMI_LOG_DEBUG(verbosity_, + "From " << splits.size() << " splits chosen split: " << LogSplit(chosenSplit)); + + return SplitToParticles(particle, chosenSplit); +} + +void G4FermiBreakUpAN::Initialise() +{ + if (G4NucleiProperties::GetNuclearMass(2, 0) <= 0.) { + G4BaryonConstructor pCBar; + pCBar.ConstructParticle(); + } + G4FermiNucleiProperties::Instance().Initialize(); + + { + auto pool = G4FermiFragmentPoolAN::DefaultPoolANSource(); + pool.Initialize(); + G4FermiFragmentPoolAN::Instance().Initialize(pool); + } + + // order is important here, we use G4FermiFragmentPool to create splits! + splits_ = PossibleSplits(); + for (auto a = 1; a < MAX_A; ++a) { + for (auto z = 0; z <= a; ++z) { + const auto atomicMass = G4FermiAtomicMass(a); + const auto chargeNumber = G4FermiChargeNumber(z); + + splits_.InsertSplits(atomicMass, chargeNumber, + G4FermiSplitter::GenerateSplits({atomicMass, chargeNumber})); + } + } +} + +G4bool G4FermiBreakUpAN::IsApplicable(G4int Z, G4int A, G4double /* eexc */) const +{ + return Z < MAX_Z && A < MAX_A; +} + +void G4FermiBreakUpAN::BreakFragment(G4FragmentVector* results, G4Fragment* theNucleus) +{ + if (theNucleus == nullptr || results == nullptr) { + G4ExceptionDescription ed; + ed << "G4Fragment or result G4FragmentVector is not set in FermiBreakUp"; + G4Exception("G4FermiBreakUpAN::BreakFragment()", "Fermi003", FatalErrorInArgument, ed); + return; + } + + const auto particle = + G4FermiParticle(G4FermiAtomicMass(theNucleus->GetA_asInt()), + G4FermiChargeNumber(theNucleus->GetZ_asInt()), theNucleus->GetMomentum()); + const auto fragments = BreakItUp(particle); + + // decay impossible + if (fragments.size() <= 1) { return; } + + const auto creationTime = theNucleus->GetCreationTime(); + // primary should be deleted + delete theNucleus; + + for (const auto& fragment : fragments) { + auto fr = new G4Fragment(static_cast(fragment.GetAtomicMass()), + static_cast(fragment.GetChargeNumber()), + fragment.GetMomentum()); + results->push_back(fr); + fr->SetCreationTime(creationTime); + fr->SetCreatorModelID(secID_); + } +} + +std::vector +G4FermiBreakUpAN::SplitToParticles(const G4FermiParticle& sourceParticle, + const G4FermiFragmentVector& split) const +{ + std::vector splitMasses(split.size()); + std::transform(split.begin(), split.end(), splitMasses.begin(), + std::mem_fn(&G4VFermiFragmentAN::GetTotalEnergy)); + + G4FermiPhaseDecay phaseSampler; + std::vector particlesMomentum + = phaseSampler.CalculateDecay(sourceParticle.GetMomentum(), splitMasses); + + if (particlesMomentum.empty()) { + return {sourceParticle}; + } + + // Go back to the Lab Frame + std::vector particleSplit; + particleSplit.reserve(2 * split.size()); + const auto boostVector = sourceParticle.GetMomentum().boostVector(); + for (std::size_t fragmentIdx = 0; fragmentIdx < split.size(); ++fragmentIdx) { + const auto fragmentMomentum = + ChangeFrameOfReference(particlesMomentum[fragmentIdx], boostVector); + split[fragmentIdx]->AppendDecayFragments(fragmentMomentum, particleSplit); + } + + FERMI_LOG_DEBUG(verbosity_, "Break up products: " << LogProducts(particleSplit)); + return particleSplit; +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpVI.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpVI.cc index 4442f287ee..0eebb799de 100644 --- a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpVI.cc +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiBreakUpVI.cc @@ -71,7 +71,7 @@ void G4FermiBreakUpVI::Initialise() fElim = param->GetFBUEnergyLimit(); fTimeLim = param->GetMaxLifeTime(); if (verbose > 1) { - G4cout << "### G4FermiBreakUpVI::Initialise(): the pool is initilized=" + G4cout << "### G4FermiBreakUpVI::Initialise(): the pool is initialized=" << fPool->IsInitialized() << " fTolerance(eV)=" << fTolerance/CLHEP::eV << " Elim(MeV)=" << fElim/CLHEP::MeV << G4endl; } diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiDataTypes.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiDataTypes.cc new file mode 100644 index 0000000000..43998f2ed0 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiDataTypes.cc @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4FermiDataTypes.hh" + +std::string std::to_string(G4FermiAtomicMass mass) +{ + return std::to_string(G4FermiAtomicMass::ValueType(mass)); +} + +std::string std::to_string(G4FermiChargeNumber charge) +{ + return std::to_string(G4FermiChargeNumber::ValueType(charge)); +} + +std::ostream& std::operator<<(std::ostream& out, const G4FermiAtomicMass& mass) +{ + out << G4FermiAtomicMass::ValueType(mass); + return out; +} + +std::istream& std::operator>>(std::istream& in, G4FermiAtomicMass& mass) +{ + G4FermiAtomicMass::ValueType val; + in >> val; + mass = G4FermiAtomicMass(val); + return in; +} + +std::ostream& std::operator<<(std::ostream& out, const G4FermiChargeNumber& charge) +{ + out << G4FermiChargeNumber::ValueType(charge); + return out; +} + +std::istream& std::operator>>(std::istream& in, G4FermiChargeNumber& charge) +{ + G4FermiChargeNumber::ValueType val; + in >> val; + charge = G4FermiChargeNumber(val); + return in; +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiFragmentPoolAN.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiFragmentPoolAN.cc new file mode 100644 index 0000000000..7a7f61b551 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiFragmentPoolAN.cc @@ -0,0 +1,236 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// +// +// Created by Artem Novikov on 30.01.2024. +// + +#include "G4FermiFragmentPoolAN.hh" +#include "G4FermiDataTypes.hh" +#include "G4VFermiFragmentAN.hh" +#include "G4FermiStableFragment.hh" +#include "G4FermiUnstableFragment.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" + +namespace +{ + std::size_t GetSlot(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) + { + const auto mass = static_cast(atomicMass); + const auto charge = static_cast(chargeNumber); + return (mass * (mass + 1)) / 2 + charge; + } +} // namespace + +G4FermiFragmentPoolAN::G4FermiFragmentPoolAN() +{ + auto pool = G4FermiFragmentPoolAN::DefaultPoolANSource(); + pool.Initialize(); + Initialize(pool); +} + +std::size_t G4FermiFragmentPoolAN::Count(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const +{ + // if (unlikely(static_cast(atomicMass) < static_cast(chargeNumber))) + if (static_cast(atomicMass) < static_cast(chargeNumber)) { + return 0; + } + + const auto slot = GetSlot(atomicMass, chargeNumber); + // if (unlikely(slot >= fragments_.size())) { + if (slot >= fragments_.size()) { + return 0; + } + + return fragments_[slot].size(); +} + +G4FermiFragmentPoolAN::IteratorRange +G4FermiFragmentPoolAN::GetFragments(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const +{ + // if (unlikely(static_cast(atomicMass) < static_cast(chargeNumber))) + if (static_cast(atomicMass) < static_cast(chargeNumber)) { + return {EmptyContainer_.begin(), EmptyContainer_.end()}; + } + + const auto slot = GetSlot(atomicMass, chargeNumber); + if (slot >= fragments_.size()) { + return {EmptyContainer_.begin(), EmptyContainer_.end()}; + } + + return {fragments_[slot].begin(), fragments_[slot].end()}; +} + +void G4FermiFragmentPoolAN::AddFragment(const G4VFermiFragmentAN& fragment) +{ + const auto slot = GetSlot(fragment.GetAtomicMass(), fragment.GetChargeNumber()); + if (slot >= fragments_.size()) { + fragments_.resize(slot + static_cast(fragment.GetAtomicMass())); + } + fragments_[slot].push_back(&fragment); +} + +G4FermiFragmentPoolAN::DefaultPoolANSource::DefaultPoolANSource() +{ +#define FERMI_CONCAT(x, y) x##y +#define FERMI_INSTANTIATE_MACRO(x, y) FERMI_CONCAT(x, y) + +#define FERMI_ADD_FRAGMENT_IMPL(NAME, VALUE) \ + static auto NAME = VALUE; \ + push_back(&NAME); + +// automatic unique names are added +#define FERMI_ADD_FRAGMENT(VALUE) \ + FERMI_ADD_FRAGMENT_IMPL(FERMI_INSTANTIATE_MACRO(G4VFermiFragmentAN, __COUNTER__), VALUE) + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(1_m, 0_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(1_m, 1_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(2_m, 1_c, 3, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(3_m, 1_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(3_m, 2_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(4_m, 2_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(He5Fragment(5_m, 2_c, 4, 16.76 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(Li5Fragment(5_m, 3_c, 4, 16.66 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(6_m, 2_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(6_m, 3_c, 3, 0.00 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(6_m, 3_c, 1, 3.56 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(7_m, 3_c, 4, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(7_m, 3_c, 2, 0.48 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(7_m, 4_c, 4, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(7_m, 4_c, 2, 0.43 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(8_m, 3_c, 5, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(8_m, 3_c, 3, 0.98 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(Be8Fragment(8_m, 4_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(9_m, 4_c, 4, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(B9Fragment(9_m, 5_c, 4, 0.00 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 4_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 4_c, 5, 3.37 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 4_c, 8, 5.96 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 4_c, 1, 6.18 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 4_c, 5, 6.26 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 5_c, 7, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 5_c, 3, 0.72 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 5_c, 1, 1.74 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 5_c, 3, 2.15 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 5_c, 5, 3.59 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 6_c, 3, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(10_m, 6_c, 5, 3.35 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 4, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 2, 2.13 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 6, 4.44 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 4, 5.02 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 10, 6.76 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 6, 7.29 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 4, 7.98 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 5_c, 6, 8.56 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 4, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 2, 2.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 6, 4.32 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 4, 4.80 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 2, 6.34 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 8, 6.48 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 6, 6.90 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 4, 7.50 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 4, 8.10 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 6, 8.42 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(11_m, 6_c, 8, 8.66 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 5_c, 3, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 5_c, 5, 0.95 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 5_c, 5, 1.67 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 5_c, 4, 2.65 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 6_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(12_m, 6_c, 5, 4.44 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(13_m, 6_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(13_m, 6_c, 2, 3.09 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(13_m, 6_c, 4, 3.68 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(13_m, 6_c, 6, 3.85 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(13_m, 7_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 6_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 6_c, 3, 6.09 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 6_c, 8, 6.69 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 6_c, 6, 6.96 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 6_c, 5, 7.34 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 3, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 1, 2.31 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 3, 3.95 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 1, 4.92 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 5, 5.11 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 3, 5.69 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 7, 5.83 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 3, 6.20 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 7, 6.44 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(14_m, 7_c, 5, 7.03 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 8, 5.28 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 4, 6.32 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 10, 7.22 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 8, 7.57 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 2, 8.31 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 4, 8.57 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 14, 9.15 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 14, 9.79 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 7_c, 8, 10.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 8_c, 2, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 8_c, 8, 5.22 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 8_c, 4, 6.18 * CLHEP::MeV)); + + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 8_c, 10, 6.83 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(15_m, 8_c, 8, 7.28 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 7_c, 5, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 7_c, 1, 0.12 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 7_c, 7, 0.30 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 7_c, 3, 0.40 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 8_c, 1, 0.00 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 8_c, 8, 6.10 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 8_c, 5, 6.92 * CLHEP::MeV)); + FERMI_ADD_FRAGMENT(G4FermiStableFragment(16_m, 8_c, 3, 7.12 * CLHEP::MeV)); + +#undef FERMI_ADD_FRAGMENT +#undef FERMI_ADD_FRAGMENT_IMPL +#undef FERMI_INSTANTIATE_MACRO +#undef FERMI_CONCAT +} + +void G4FermiFragmentPoolAN::DefaultPoolANSource::Initialize() +{ + for (auto & fragmentPtr : *this) { + fragmentPtr->Initialize(); + } +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiIntegerPartition.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiIntegerPartition.cc new file mode 100644 index 0000000000..418164d334 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiIntegerPartition.cc @@ -0,0 +1,117 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#include "G4FermiIntegerPartition.hh" + +G4integerPartition::G4integerPartition(std::uint32_t number, std::uint32_t termsCount, + std::uint32_t base) + : number_(number), termsCount_(termsCount), base_(base) +{} + +G4integerPartition::Iterator G4integerPartition::begin() const +{ + return {number_, termsCount_, base_}; +} + +G4integerPartition::Iterator G4integerPartition::end() const +{ + return {}; +} + +/////////////////////////////////// ITERATOR ////////////////////////////// + +G4integerPartition::Iterator::pointer G4integerPartition::Iterator::operator->() const +{ + return &partition_; +} + +G4integerPartition::Iterator::reference G4integerPartition::Iterator::operator*() const +{ + return partition_; +} + +G4integerPartition::Iterator& G4integerPartition::Iterator::operator++() +{ + NextPartition(); + return *this; +} + +G4integerPartition::Iterator G4integerPartition::Iterator::operator++(int) +{ + auto copy = *this; + NextPartition(); + return copy; +} + +G4bool G4integerPartition::Iterator::operator==(const G4integerPartition::Iterator& other) const +{ + return partition_ == other.partition_; +} + +G4bool G4integerPartition::Iterator::operator!=(const G4integerPartition::Iterator& other) const +{ + return partition_ != other.partition_; +} + +G4integerPartition::Iterator::Iterator(std::uint32_t number, std::uint32_t termsCount, + std::uint32_t base) + : partition_(termsCount, 0) +{ + // No possible partitions + if (number < base * termsCount || termsCount == 0 || number == 0) { + return; + } + + std::fill(partition_.begin(), partition_.end(), base); + partition_[0] = number - base * (termsCount - 1); +} + +void G4integerPartition::Iterator::NextPartition() +{ + std::uint32_t accumulated = 0; + for (auto partitionLast = std::next(partition_.begin()); partitionLast != partition_.end(); + ++partitionLast) + { + if (partition_.front() >= *partitionLast + 2) { + --partition_.front(); + ++(*partitionLast); + + auto newValue = *partitionLast; + std::fill(std::next(partition_.begin()), partitionLast, newValue); + partition_.front() += + accumulated - newValue * (std::distance(partition_.begin(), partitionLast) - 1); + return; + } + accumulated += *partitionLast; + } + + // last partition + partition_.clear(); +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiNucleiProperties.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiNucleiProperties.cc new file mode 100644 index 0000000000..ffa47329d9 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiNucleiProperties.cc @@ -0,0 +1,106 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4FermiNucleiProperties.hh" + +#include +#include +#include + +namespace +{ +std::size_t GetSlot(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber) +{ + const auto mass = static_cast(atomicMass); + const auto charge = static_cast(chargeNumber); + return (mass * (mass + 1)) / 2 + charge; +} +} // namespace + +G4FermiNucleiProperties::G4FermiNucleiProperties() +{ + for (auto a = 1; a < MAX_A; ++a) { + for (auto z = 0; z <= a; ++z) { + const auto atomicMass = G4FermiAtomicMass(a); + const auto chargeNumber = G4FermiChargeNumber(z); + + const auto mass = G4NucleiProperties::GetNuclearMass(a, z); + if (mass > 0.) { + InsertNuclei(atomicMass, chargeNumber, mass, G4NucleiProperties::IsInStableTable(a, z)); + } + } + } +} + +G4double G4FermiNucleiProperties::GetNuclearMassImpl(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const +{ + FERMI_ASSERT_MSG(static_cast(atomicMass) + >= static_cast(chargeNumber), + "invalid nuclei A = " << atomicMass << ", Z = " << chargeNumber); + + const auto slot = GetSlot(atomicMass, chargeNumber); + if (slot < nucleiMasses_.size() && nucleiMasses_[slot].isCached) { + return nucleiMasses_[slot].mass; + } + + return G4NucleiProperties::GetNuclearMass(G4int(atomicMass), G4int(chargeNumber)); +} + +G4bool G4FermiNucleiProperties::IsStableImpl(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber) const +{ + if (atomicMass < 1_m || chargeNumber < 0_c + || static_cast(chargeNumber) + > static_cast(atomicMass)) + { + return false; + } + + const auto slot = GetSlot(atomicMass, chargeNumber); + + return slot < nucleiMasses_.size() && nucleiMasses_[slot].isStable; +} + +void G4FermiNucleiProperties::InsertNuclei(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber, G4double mass, + G4bool isStable) +{ + const auto slot = GetSlot(atomicMass, chargeNumber); + if (slot >= nucleiMasses_.size()) { + nucleiMasses_.resize(slot + static_cast(atomicMass)); + } + + nucleiMasses_[slot] = G4FermiMassData{ + mass, // mass + isStable, // isStable + true, // isCached + }; +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiParticle.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiParticle.cc new file mode 100644 index 0000000000..c5ff0f9aff --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiParticle.cc @@ -0,0 +1,111 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#include "G4FermiParticle.hh" + +#include "G4FermiDataTypes.hh" +#include "G4FermiNucleiProperties.hh" + +#include + +#include + +G4FermiParticle::G4FermiParticle(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + const G4LorentzVector& momentum) + : atomicMass_(atomicMass), chargeNumber_(chargeNumber), momentum_(momentum) +{ + FERMI_ASSERT_MSG(static_cast(atomicMass_) + >= static_cast(chargeNumber), + "imposible particle: A = " << atomicMass_ << ", Z = " << chargeNumber); + + RecalculateExcitationEnergy(); +} + +G4FermiAtomicMass G4FermiParticle::GetAtomicMass() const +{ + return atomicMass_; +} + +G4FermiChargeNumber G4FermiParticle::GetChargeNumber() const +{ + return chargeNumber_; +} + +const G4LorentzVector& G4FermiParticle::GetMomentum() const +{ + return momentum_; +} + +G4double G4FermiParticle::GetExcitationEnergy() const +{ + return excitationEnergy_; +} + +G4bool G4FermiParticle::IsStable() const +{ + return excitationEnergy_ <= 0.; +} + +void G4FermiParticle::RecalculateExcitationEnergy() +{ + excitationEnergy_ = + momentum_.mag() - G4FermiNucleiProperties::GetNuclearMass(atomicMass_, chargeNumber_); + if (excitationEnergy_ < 0.) { + if (excitationEnergy_ < -10.0 * CLHEP::eV) { + G4ExceptionDescription ed; + ed << "Excitation energy is too negative: " << excitationEnergy_ / CLHEP::MeV << " MeV"; + G4Exception("G4FermiParticle::RecalculateExcitationEnergy()", "Fermi001", JustWarning, ed); + } + excitationEnergy_ = 0.; + } +} + +std::ostream& std::operator<<(std::ostream& out, const G4FermiParticle& particle) +{ + const auto oldFlags = out.flags(); + const auto oldUserPrecision = out.precision(); + + out.setf(std::ios::floatfield); + out << "FermiParticle: { A = " << particle.GetAtomicMass() + << ", Z = " << particle.GetChargeNumber(); + + out.setf(std::ios::scientific, std::ios::floatfield); + out << std::setprecision(3) << ", U = " << particle.GetExcitationEnergy() / CLHEP::MeV << " MeV" + << ", IsGroundState = " << (particle.IsStable() ? "yes" : "no") << ", P = (" + << particle.GetMomentum().x() / CLHEP::MeV << ", " << particle.GetMomentum().y() / CLHEP::MeV + << ", " << particle.GetMomentum().z() / CLHEP::MeV + << ") MeV, E = " << particle.GetMomentum().t() / CLHEP::MeV << " MeV}" + << " }"; + + out.setf(oldFlags, std::ios::floatfield); + out.precision(oldUserPrecision); + + return out; +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiPhaseSpaceDecay.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiPhaseSpaceDecay.cc index 9fc51e28cd..a468c640bf 100644 --- a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiPhaseSpaceDecay.cc +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiPhaseSpaceDecay.cc @@ -36,12 +36,12 @@ #include "G4FermiPhaseSpaceDecay.hh" +#include "Randomize.hh" #include "G4RandomDirection.hh" #include "G4Pow.hh" -#include -#include -#include +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" G4FermiPhaseSpaceDecay::G4FermiPhaseSpaceDecay() { diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiSplitter.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiSplitter.cc new file mode 100644 index 0000000000..d8939ab9f5 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiSplitter.cc @@ -0,0 +1,304 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative de-excitation model +// by A. Novikov (January 2025) +// + +#include "G4FermiSplitter.hh" + +#include "G4FermiDataTypes.hh" +#include "G4FermiFragmentPoolAN.hh" +#include "G4FermiIntegerPartition.hh" +#include "G4VFermiFragmentAN.hh" + +#include + +#include +#include +#include +#include + +namespace +{ +// Kappa = V/V_0 it is used in calculation of Coulomb energy, Kappa is dimensionless +constexpr G4double Kappa = 1.0; + +// Nuclear radius R0 (is a model parameter) +constexpr G4double R0 = 1.3 * CLHEP::fermi; + +G4double CoulombBarrier(const G4FermiFragmentVector& split) +{ + // Coulomb Barrier (MeV) for given channel with K fragments. + static const G4double COEF = + (3. / 5.) * (CLHEP::elm_coupling / R0) * std::cbrt(1. / (1. + Kappa)); + + std::uint32_t atomicMassSum = 0.; + std::uint32_t chargeSum = 0.; + G4double CoulombEnergy = 0.; + for (const auto fragmentPtr : split) { + auto mass = static_cast(fragmentPtr->GetAtomicMass()); + auto charge = static_cast(fragmentPtr->GetChargeNumber()); + CoulombEnergy += std::pow(charge, 2) / std::cbrt(static_cast(mass)); + atomicMassSum += mass; + chargeSum += charge; + } + + CoulombEnergy -= + std::pow(static_cast(chargeSum), 2) / std::cbrt(static_cast(atomicMassSum)); + return -COEF * CoulombEnergy; +} + +G4double SpinFactor(const G4FermiFragmentVector& split) +{ + G4double factor = 1; + + for (const auto fragmentPtr : split) { + factor *= fragmentPtr->GetPolarization(); + } + + return factor; +} + +G4double KineticEnergy(const G4FermiFragmentVector& split, G4double totalEnergy) +{ + auto kineticEnergy = totalEnergy; + for (const auto fragmentPtr : split) { + kineticEnergy -= fragmentPtr->GetTotalEnergy(); + } + + // skip columb calculation for optimization purposes + if (kineticEnergy <= 0.) { + return kineticEnergy; + } + + return kineticEnergy - CoulombBarrier(split); +} + +G4double MassFactor(const G4FermiFragmentVector& split) +{ + G4double massSum = 0.; + G4double massProduct = 1.; + for (const auto fragmentPtr : split) { + const auto fragmentMass = fragmentPtr->GetMass(); + massProduct *= fragmentMass; + massSum += fragmentMass; + } + auto massFactor = massProduct / massSum; + massFactor *= std::sqrt(massFactor); + return massFactor; +} + +std::size_t Factorial(const std::size_t n) +{ + std::size_t factorial = 1; + for (std::size_t i = 2; i <= n; ++i) { + factorial *= i; + } + return factorial; +} + +G4double ConfigurationFactor(const G4FermiFragmentVector& split) +{ + // get all mass numbers and count repetitions + std::vector masses(split.size()); + std::transform(split.begin(), split.end(), masses.begin(), + std::mem_fn(&G4VFermiFragmentAN::GetAtomicMass)); + std::sort(masses.begin(), masses.end()); + + // avoid overflow with floats + // TODO: optimize with ints maybe + G4double factor = 1; + + std::size_t repeatCount = 1; // we skip first, so start with 1 + for (std::size_t i = 1; i < masses.size(); ++i) { + if (masses[i] != masses[i - 1]) { + factor *= static_cast(Factorial(repeatCount)); + repeatCount = 0; + } + ++repeatCount; + } + factor *= static_cast(Factorial(repeatCount)); + + return factor; +} + +G4double ConstFactor(G4FermiAtomicMass atomicMass, std::size_t fragmentsCount) +{ + static const G4double COEF = + std::pow(R0 / CLHEP::hbarc, 3) * Kappa * std::sqrt(2.0 / CLHEP::pi) / 3.0; + + return std::pow(COEF * static_cast(atomicMass), fragmentsCount - 1); +} + +G4double GammaFactor(std::size_t fragmentsCount) +{ + G4double gamma = 1.0; + G4double arg = 3.0 * static_cast(fragmentsCount - 1) / 2.0 - 1.0; + while (arg > 1.1) { + gamma *= arg; + arg -= 1; + } + + if (fragmentsCount % 2 == 0) { + gamma *= std::sqrt(CLHEP::pi); + } + + return gamma; +} +} // namespace + +G4double G4FermiSplitter::DecayWeight(const G4FermiFragmentVector& split, + G4FermiAtomicMass atomicMass, G4double totalEnergy) +{ + const auto kineticEnergy = KineticEnergy(split, totalEnergy); // in MeV + + // Check that there is enough energy to produce K fragments + if (kineticEnergy <= 0.) { + return 0.; + } + + const auto power = 3.0 * static_cast(split.size() - 1) / 2.0 - 1.; + const auto kineticFactor = std::pow(kineticEnergy, power); + + // Spin factor S_n + const auto spinFactor = SpinFactor(split); + + // Calculate MassFactor + const auto massFactor = MassFactor(split); + + // This is the constant (doesn't depend on energy) part + const auto coef = ConstFactor(atomicMass, split.size()); + + // Calculation of 1/gamma(3(k-1)/2) + const auto gamma = GammaFactor(split.size()); + + // Permutation Factor G_n + const auto permutationFactor = ConfigurationFactor(split); + + return coef * kineticFactor * massFactor * spinFactor / (permutationFactor * gamma); +} + +namespace +{ +constexpr std::size_t ExpectedSplitSize = 100; + +void ThrowOnInvalidInputs(G4FermiNucleiData nucleiData) +{ + FERMI_ASSERT_MSG(nucleiData.atomicMass > 0_m && nucleiData.chargeNumber >= 0_c, + "Non valid arguments A = " << nucleiData.atomicMass + << " Z = " << nucleiData.chargeNumber); + + FERMI_ASSERT_MSG(static_cast(nucleiData.chargeNumber) + <= static_cast(nucleiData.atomicMass), + "Non physical arguments = " << nucleiData.atomicMass + << " Z = " << nucleiData.chargeNumber); +} + +std::vector PossibleSplits(const G4FermiPartition& massPartition, + const G4FermiPartition& chargePartition) +{ + auto& fragmentPool = G4FermiFragmentPoolAN::Instance(); + const auto fragmentCount = massPartition.size(); + + // count all possible splits due to multiplicity of fragments + std::size_t splitsCount = 1; + for (std::size_t fragmentIdx = 0; fragmentIdx < fragmentCount; ++fragmentIdx) { + splitsCount *= fragmentPool.Count(G4FermiAtomicMass(massPartition[fragmentIdx]), + G4FermiChargeNumber(chargePartition[fragmentIdx])); + if (splitsCount == 0) { + return {}; + } + } + + // allocate in advance + std::vector splits(splitsCount, G4FermiFragmentVector(fragmentCount)); + + // incrementally build splits + // !! chosen order matters, because later there we need to remove duplicates + std::size_t groupSize = splitsCount; + for (std::size_t fragmentIdx = 0; fragmentIdx < fragmentCount; ++fragmentIdx) { + const auto fragmentRange = + fragmentPool.GetFragments(G4FermiAtomicMass(massPartition[fragmentIdx]), + G4FermiChargeNumber(chargePartition[fragmentIdx])); + // no remainder here! + const std::size_t multiplicity = std::distance(fragmentRange.begin(), fragmentRange.end()); + groupSize /= multiplicity; + + for (std::size_t offset = 0; offset < splitsCount;) { + for (const auto fragmentPtr : fragmentRange) { + for (std::size_t pos = 0; pos < groupSize; ++pos) { + splits[offset + pos][fragmentIdx] = fragmentPtr; + } + offset += groupSize; + } + } + } + + // remove duplicate splits + for (auto& split : splits) { + std::sort(split.begin(), split.end(), std::greater<>()); + // greater, because they already partially sorted as greater due to integer partition + } + const auto uniqueEndIt = std::unique(splits.begin(), splits.end()); + splits.resize(uniqueEndIt - splits.begin()); + + return splits; +} +} // namespace + +std::vector G4FermiSplitter::GenerateSplits(G4FermiNucleiData nucleiData) +{ + std::vector splits; + GenerateSplits(nucleiData, splits); + return splits; +} + +void G4FermiSplitter::GenerateSplits(G4FermiNucleiData nucleiData, + std::vector& splits) +{ + ThrowOnInvalidInputs(nucleiData); + + splits.reserve(ExpectedSplitSize); + + // let's split nucleus into 2, ..., A fragments + const auto maxFragmentsCount = static_cast(nucleiData.atomicMass); + + for (std::uint32_t fragmentCount = 2; fragmentCount <= maxFragmentsCount; ++fragmentCount) { + // Form all possible partition by combination of A partitions and Z partitions (Z partitions + // include null parts) + for (auto& massPartition : G4integerPartition(nucleiData.atomicMass, fragmentCount, 1)) { + for (auto& chargePartition : G4integerPartition(nucleiData.chargeNumber, fragmentCount, 0)) { + // Some splits are invalid, some nuclei doesn't exist + if (auto partitionSplits = PossibleSplits(massPartition, chargePartition); + !partitionSplits.empty()) { + splits.insert(splits.end(), std::make_move_iterator(partitionSplits.begin()), + std::make_move_iterator(partitionSplits.end())); + } + } + } + } +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiStableFragment.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiStableFragment.cc new file mode 100644 index 0000000000..36ed4917eb --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiStableFragment.cc @@ -0,0 +1,44 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4FermiStableFragment.hh" + +G4FermiStableFragment::G4FermiStableFragment(G4FermiAtomicMass atomicMass, G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy) + : G4VFermiFragmentAN(atomicMass, chargeNumber, polarization, excitationEnergy) +{} + +void G4FermiStableFragment::AppendDecayFragments(const G4LorentzVector& momentum, + std::vector& fragments) const +{ + fragments.emplace_back(G4FermiParticle(GetAtomicMass(), GetChargeNumber(), momentum)); +} + +void G4FermiStableFragment::DoInitialize() {} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiUnstableFragment.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiUnstableFragment.cc new file mode 100644 index 0000000000..04ff58b2a2 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4FermiUnstableFragment.cc @@ -0,0 +1,66 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4FermiUnstableFragment.hh" + +#include "G4FermiNucleiProperties.hh" +#include "G4FermiPhaseDecay.hh" + +G4FermiUnstableFragment::G4FermiUnstableFragment(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy, + std::vector&& decayData) + : G4VFermiFragmentAN(atomicMass, chargeNumber, polarization, excitationEnergy), + decayData_(std::move(decayData)) +{} + +void G4FermiUnstableFragment::AppendDecayFragments(const G4LorentzVector& momentum, + std::vector& fragments) const +{ + G4FermiPhaseDecay phaseDecay; + auto fragmentsMomentum = phaseDecay.CalculateDecay(momentum, masses_); + + const auto boostVector = momentum.boostVector(); + + for (std::size_t i = 0; i < decayData_.size(); ++i) { + fragments.emplace_back(decayData_[i].atomicMass, decayData_[i].chargeNumber, + fragmentsMomentum[i].boost(boostVector)); + } +} + +void G4FermiUnstableFragment::DoInitialize() +{ + masses_.clear(); + masses_.reserve(decayData_.size()); + for (const auto& decayFragment : decayData_) { + masses_.emplace_back(G4FermiNucleiProperties::GetNuclearMass(decayFragment.atomicMass, + decayFragment.chargeNumber)); + } +} diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4VFermiFragmentAN.cc b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4VFermiFragmentAN.cc new file mode 100644 index 0000000000..d5f4e5bc09 --- /dev/null +++ b/source/processes/hadronic/models/de_excitation/fermi_breakup/src/G4VFermiFragmentAN.cc @@ -0,0 +1,110 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4FermiBreakUpAN alternative FermiBreakUp model +// by A. Novikov (January 2025) +// + +#include "G4VFermiFragmentAN.hh" +#include "G4FermiNucleiProperties.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "Randomize.hh" + +#include + +G4VFermiFragmentAN::G4VFermiFragmentAN(G4FermiAtomicMass atomicMass, + G4FermiChargeNumber chargeNumber, + G4int polarization, G4double excitationEnergy) + : atomicMass_(atomicMass), + chargeNumber_(chargeNumber), + polarization_(polarization), + excitationEnergy_(excitationEnergy) +{ + groudStateMass_ = CLHEP::proton_mass_c2; +} + +void G4VFermiFragmentAN::Initialize() +{ + groudStateMass_ = G4FermiNucleiProperties::GetNuclearMass(atomicMass_, chargeNumber_); + DoInitialize(); +} + +std::vector +G4VFermiFragmentAN::GetDecayFragments(const G4LorentzVector& momentum) const +{ + std::vector result; + AppendDecayFragments(momentum, result); + return result; +} + +G4FermiAtomicMass G4VFermiFragmentAN::GetAtomicMass() const +{ + return atomicMass_; +} + +G4FermiChargeNumber G4VFermiFragmentAN::GetChargeNumber() const +{ + return chargeNumber_; +} + +G4int G4VFermiFragmentAN::GetPolarization() const +{ + return polarization_; +} + +G4double G4VFermiFragmentAN::GetExcitationEnergy() const +{ + return excitationEnergy_; +} + +G4double G4VFermiFragmentAN::GetMass() const +{ + return groudStateMass_; +} + +G4double G4VFermiFragmentAN::GetTotalEnergy() const +{ + return GetMass() + GetExcitationEnergy(); +} + +std::ostream& std::operator<<(std::ostream& out, const G4VFermiFragmentAN& fragment) +{ + const auto oldFlags = out.flags(); + const auto oldUserPrecision = out.precision(); + + out.setf(std::ios::floatfield); + out << "FermiFragment: { A = " << fragment.GetAtomicMass() + << ", Z = " << fragment.GetChargeNumber() << ", pol = " << fragment.GetPolarization(); + + out.setf(std::ios::scientific, std::ios::floatfield); + out << std::setprecision(3) << ", U = " << fragment.GetExcitationEnergy() / CLHEP::MeV << " }"; + + out.setf(oldFlags, std::ios::floatfield); + out.precision(oldUserPrecision); + + return out; +} diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMChannelVI.hh b/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMChannelVI.hh index d2a23d9b76..e6c71bcc9b 100644 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMChannelVI.hh +++ b/source/processes/hadronic/models/de_excitation/gem_evaporation/include/G4GEMChannelVI.hh @@ -31,13 +31,18 @@ #define G4GEMChannelVI_h 1 #include "G4VEvaporationChannel.hh" +#include "G4VSIntegration.hh" class G4PairingCorrection; class G4VCoulombBarrier; class G4LevelManager; -class G4GEMProbabilityVI; +class G4NuclearLevelData; +class G4HadronNucleonXsc; +class G4InterfaceToXS; +class G4ParticleDefinition; +class G4Pow; -class G4GEMChannelVI : public G4VEvaporationChannel +class G4GEMChannelVI : public G4VEvaporationChannel, public G4VSIntegration { public: @@ -47,10 +52,16 @@ public: void Initialise() override; + G4double ProbabilityDensityFunction(G4double ekin) override; + G4double GetEmissionProbability(G4Fragment* theNucleus) override; G4Fragment* EmittedFragment(G4Fragment* theNucleus) override; + const G4String& ModelName() const override; + + G4double GetCurrentXS() { return recentXS; }; + void Dump() const override; G4GEMChannelVI(const G4GEMChannelVI & right) = delete; @@ -60,37 +71,56 @@ public: private: + G4double CrossSection(G4double ekin); + + G4double CorrectExcitation(G4double energy, const G4LevelManager*); + + G4NuclearLevelData* nData; const G4VCoulombBarrier* cBarrier; const G4PairingCorrection* pairingCorrection; - G4GEMProbabilityVI* fProbability; + const G4LevelManager* lManagerEvap{nullptr}; + const G4LevelManager* lManagerRes{nullptr}; + G4HadronNucleonXsc* fHNXsc{nullptr}; + G4InterfaceToXS* fXSection{nullptr}; + G4Pow* g4pow; + const G4ParticleDefinition* fProton; + const G4ParticleDefinition* fNeutron; - G4double fEvapMass; - G4double fEvapMass2; - G4double fMass{0.0}; - G4double fResMass{0.0}; - G4double fExc{0.0}; + G4double fEvapMass; // ground state mass of the evaporated fragment + G4double fEvapMass2; // ground state mass of the evaporated fragment square + G4double fMass{0.0}; // mass of the initial fragment + G4double fResMass{0.0}; // ground state mass of the residual fragment + G4double fResA13{0.0}; // + G4double fFragExc{0.0}; // excitation energy of the evaporated fragment + G4double fEvapExc{0.0}; // excitation energy of the evaporated fragment + G4double fResExc{0.0}; // excitation energy of the residual fragment G4double bCoulomb{0.0}; + G4double fLimEXS{0.0}; + G4double fDeltaEvap{0.0}; + G4double fE0{0.0}; + G4double fE1{0.0}; + G4double a0{0.0}; + G4double a1{0.0}; + G4double delta0{0.0}; + G4double delta1{0.0}; + G4double recentXS{0.0}; + G4double fEnergyLimitXS{0.0}; + G4double fTolerance; G4double fCoeff; - G4int A; - G4int Z; + G4int evapA; + G4int evapZ; G4int resA{0}; G4int resZ{0}; G4int fragA{0}; G4int fragZ{0}; G4int fVerbose{1}; - G4int nProb{1}; + G4int nProbEvap{1}; + G4int nProbRes{1}; + G4int indexC{7}; G4int secID; - G4int indexC; - - // evaporation fragment data - struct evapData { - G4double exc{0.0}; // excitation - G4double ekin1{0.0}; // min kinetic energy - G4double ekin2{0.0}; // max kinetic energy - G4double prob{0.0}; // probability - }; - evapData fEData[10]; + + G4String fModelName; }; #endif diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/sources.cmake b/source/processes/hadronic/models/de_excitation/gem_evaporation/sources.cmake index 26b030d8b9..1e66e0ba9e 100644 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/sources.cmake +++ b/source/processes/hadronic/models/de_excitation/gem_evaporation/sources.cmake @@ -231,7 +231,12 @@ geant4_module_link_libraries(G4hadronic_deex_gem_evaporation G4hadronic_deex_fission G4hadronic_deex_management G4hadronic_deex_util + G4hepnumerics G4heprandom G4partman PRIVATE - G4hadronic_util) + G4baryons + G4ions + G4hadronic_util + G4hadronic_xsect + G4ions) diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4EvaporationGEMFactoryVI.cc b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4EvaporationGEMFactoryVI.cc index 5f001ea6df..ece3655331 100644 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4EvaporationGEMFactoryVI.cc +++ b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4EvaporationGEMFactoryVI.cc @@ -39,7 +39,7 @@ std::vector* G4EvaporationGEMFactoryVI::GetChannel() { std::vector * theChannel = new std::vector; - theChannel->reserve(81); + theChannel->reserve(83); theChannel->push_back( thePhotonEvaporation ); // Photon Channel theChannel->push_back( new G4CompetitiveFission() ); // Fission Channel diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMChannelVI.cc b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMChannelVI.cc index 1a102fcc8b..18d4c01c29 100644 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMChannelVI.cc +++ b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMChannelVI.cc @@ -32,6 +32,7 @@ #include "G4GEMProbabilityVI.hh" #include "G4VCoulombBarrier.hh" #include "G4CoulombBarrier.hh" +#include "G4DeexPrecoUtility.hh" #include "G4PairingCorrection.hh" #include "G4NuclearLevelData.hh" #include "G4LevelManager.hh" @@ -39,165 +40,310 @@ #include "G4RandomDirection.hh" #include "G4PhysicsModelCatalog.hh" #include "Randomize.hh" +#include "G4Exp.hh" +#include "G4Log.hh" +#include "G4Pow.hh" + +#include "G4Neutron.hh" +#include "G4Proton.hh" +#include "G4Deuteron.hh" +#include "G4Triton.hh" +#include "G4He3.hh" +#include "G4Alpha.hh" +#include "G4InterfaceToXS.hh" +#include "G4IsotopeList.hh" +#include "G4HadronNucleonXsc.hh" +#include "G4NuclearRadii.hh" namespace { const G4double minExc = 1.0*CLHEP::MeV; const G4int nProbMax = 10; + G4double prob[nProbMax] = {0.0}; } G4GEMChannelVI::G4GEMChannelVI(G4int theA, G4int theZ) - : A(theA), Z(theZ) + : evapA(theA), evapZ(theZ) { - G4NuclearLevelData* nData = G4NuclearLevelData::GetInstance(); + nData = G4NuclearLevelData::GetInstance(); pairingCorrection = nData->GetPairingCorrection(); - const G4LevelManager* lManager = nullptr; - if (A > 4) { lManager = nData->GetLevelManager(Z, A); } - fEvapMass = G4NucleiProperties::GetNuclearMass(A, Z); + if (evapZ > 2) { lManagerEvap = nData->GetLevelManager(evapZ, evapA); } + fEvapMass = G4NucleiProperties::GetNuclearMass(evapA, evapZ); fEvapMass2 = fEvapMass*fEvapMass; - cBarrier = new G4CoulombBarrier(A, Z); - fProbability = new G4GEMProbabilityVI(A, Z, lManager); + cBarrier = new G4CoulombBarrier(evapA, evapZ); - fCoeff = CLHEP::millibarn/((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc)); + fTolerance = 50*CLHEP::keV; + fCoeff = fEvapMass*CLHEP::millibarn + /((CLHEP::pi*CLHEP::hbarc)*(CLHEP::pi*CLHEP::hbarc)); + + std::ostringstream ss; + ss << "GEMVI_" << "Z" << evapZ << "_A" << evapA; + fModelName = ss.str(); + + fNeutron = G4Neutron::Neutron(); + fProton = G4Proton::Proton(); secID = G4PhysicsModelCatalog::GetModelID("model_G4GEMChannelVI"); - if (Z == 0 && A == 1) { + const G4ParticleDefinition* part = nullptr; + if (evapZ == 0 && evapA == 1) { indexC = 0; fCoeff *= 2.0; - } else if (Z == 1 && A == 1) { + part = fNeutron; + } else if (evapZ == 1 && evapA == 1) { indexC = 1; fCoeff *= 2.0; - } else if (Z == 1 && A == 2) { + part = fProton; + } else if (evapZ == 1 && evapA == 2) { indexC = 2; fCoeff *= 3.0; - } else if (Z == 1 && A == 3) { + part = G4Deuteron::Deuteron(); + } else if (evapZ == 1 && evapA == 3) { indexC = 3; fCoeff *= 2.0; - } else if (Z == 2 && A == 3) { + part = G4Triton::Triton(); + } else if (evapZ == 2 && evapA == 3) { indexC = 4; fCoeff *= 2.0; - } else if (Z == 2 && A == 4) { + part = G4He3::He3(); + } else if (evapZ == 2 && evapA == 4) { indexC = 5; - } else { - indexC = 6; + part = G4Alpha::Alpha(); } + g4pow = G4Pow::GetInstance(); + + //G4double de = (0 == indexC) ? 0.15*CLHEP::MeV : 0.25*CLHEP::MeV; + G4double de = 0.125*CLHEP::MeV; + InitialiseIntegrator(0.01, 0.25, 1.1, de, 0.1*CLHEP::MeV, 2*CLHEP::MeV); + + if (indexC <= 6) { fXSection = new G4InterfaceToXS(part, indexC); } + else { fHNXsc = new G4HadronNucleonXsc(); } } G4GEMChannelVI::~G4GEMChannelVI() { delete cBarrier; - delete fProbability; + delete fHNXsc; + delete fXSection; } void G4GEMChannelVI::Initialise() { - fProbability->Initialise(); G4VEvaporationChannel::Initialise(); } G4double G4GEMChannelVI::GetEmissionProbability(G4Fragment* fragment) { - fProbability->ResetProbability(); fragZ = fragment->GetZ_asInt(); fragA = fragment->GetA_asInt(); - resZ = fragZ - Z; - resA = fragA - A; - if(resA < A || resA < resZ || resZ < 0 || (resA == A && resZ < Z)) { - return 0.0; - } + resZ = fragZ - evapZ; + resA = fragA - evapA; + // to avoid double counting + if (resA < evapA || resA < resZ || resZ < 1 || + (resA == evapA && resZ < evapZ)) { return 0.0; } - fExc = fragment->GetExcitationEnergy(); - fMass = fragment->GetGroundStateMass() + fExc; + fFragExc = fragment->GetExcitationEnergy(); + fMass = fragment->GetGroundStateMass() + fFragExc; fResMass = G4NucleiProperties::GetNuclearMass(resA, resZ); + fResA13 = g4pow->Z13(resA); // limit for the case when both evaporation and residual // fragments are in ground states if (fMass <= fEvapMass + fResMass) { return 0.0; } - if (Z > 0) { + a0 = nData->GetLevelDensity(fragZ, fragA, fFragExc); + delta0 = nData->GetPairingCorrection(fragZ, fragA); + delta1 = nData->GetPairingCorrection(resZ, resA); + fE0 = std::max(fFragExc - delta0, 0.0); + + if (indexC > 0) { bCoulomb = cBarrier->GetCoulombBarrier(resA, resZ, 0.0); - } - G4double de = fMass - fEvapMass - fResMass - bCoulomb; - nProb = (G4int)(de/minExc); - if (nProb <= 1 || indexC < 6 || resA <= 4) { - nProb = 1; + fLimEXS = 2*bCoulomb; } else { - nProb = std::min(nProb, nProbMax); + fLimEXS = lowEnergyLimitMeV[resZ]; + if (0.0 == fLimEXS) { fLimEXS = CLHEP::MeV; } } + G4double de = fMass - fEvapMass - fResMass - 0.5*bCoulomb; + if (de <= 0.0) { return 0.0; } + nProbEvap = 1; + fDeltaEvap = de; + if (7 == indexC) { + G4int n = (G4int)(de/minExc) + 1; + nProbEvap = std::min(n, nProbMax); + if (nProbEvap > 1) { fDeltaEvap /= (G4double)(nProbEvap - 1); } + } + if (2 < fVerbose) { G4cout << "## G4GEMChannelVI::GetEmissionProbability fragZ=" - << fragZ << " fragA=" << fragA << " Z=" << Z << " A=" << A - << " Eex(MeV)=" << fExc << " nProb=" << nProb - << G4endl; + << fragZ << " fragA=" << fragA << " Z=" << evapZ << " A=" << evapA + << " Eex(MeV)=" << fFragExc << " nProbEvap=" << nProbEvap + << " nProbRes=" << nProbRes << " CB=" << bCoulomb + << " Elim=" << fEnergyLimitXS << G4endl; } - fProbability->SetDecayKinematics(resZ, resA, fResMass, fMass); - G4double sump = 0.0; - for (G4int i=0; i= e2) { - nProb = i; - break; - } - sump += fProbability->TotalProbability(*fragment, e1, e2, bCoulomb, fExc, exc); - fEData[i].exc = exc; - fEData[i].ekin1 = e1; - fEData[i].ekin2 = e2; - fEData[i].prob = sump; + + // m1 is the mass of emitted excited fragment + // e2 - free energy in the 2-body decay + G4double sump = 0.0; + for (G4int i=0; i 0.5*bCoulomb) ? ComputeIntegral(0.5*bCoulomb, e2) : 0.0; + sump += p; + prob[i] = sump; } + sump /= (G4double)nProbEvap; return sump; } +G4double G4GEMChannelVI::ProbabilityDensityFunction(G4double e) +{ + // e is free energy + G4double m1 = fEvapMass + fEvapExc; + fResExc = fMass - m1 - fResMass - e; + if (fResExc <= 0.0 || 0.0 == e) { return 0.0; } + fE1 = std::max(fResExc - delta1, 0.0); + a1 = nData->GetLevelDensity(resZ, resA, fResExc); + G4double m2 = fResMass + fResExc; + G4double elab = 0.5*(fMass + m1 + m2)*(fMass - m1 - m2)/m2; + G4double xs = CrossSection(elab); + G4double res = + fCoeff*G4Exp(2.0*(std::sqrt(a1*fE1) - std::sqrt(a0*fE0)))*elab*xs; + + //G4cout << "e=" << e << " elab=" << elab << " xs=" << xs << " sig=" << res << G4endl; + return res; +} + +G4double G4GEMChannelVI::CrossSection(G4double e) +{ + if (indexC <= 5) { + G4int Z = std::min(resZ, ZMAXNUCLEARDATA); + G4double e1 = std::max(e, fLimEXS); + recentXS = fXSection->GetElementCrossSection(e1, Z)/CLHEP::millibarn; + if (e1 > e) { + recentXS *= (e1/e) * + G4DeexPrecoUtility::CorrectionFactor(indexC, Z, fResA13, bCoulomb, e, e1); + } + } else { + const G4double cInel = 2.4; + const G4double cTotal = 2.0; + + if (e <= 0.5*bCoulomb) { return 0.0; } + + G4double pTkin = e/(G4double)evapA; + + G4int evapN = evapA - evapZ; + G4int resN = resA - resZ; + + G4double tR = G4NuclearRadii::Radius(resZ, resA); + G4double pR = G4NuclearRadii::Radius(evapZ, evapA); + + fHNXsc->HadronNucleonXscNS(fProton, fProton, pTkin); + G4double xs1 = fHNXsc->GetInelasticHadronNucleonXsc(); + fHNXsc->HadronNucleonXscNS(fNeutron, fProton, pTkin); + G4double xs2 = fHNXsc->GetInelasticHadronNucleonXsc(); + // nn x-section assumed to be the same as pp + G4double xs = (evapZ*resZ + evapN*resN)*xs1 + (evapZ*resN + evapN*resZ)*xs2; + + G4double R2 = cTotal*CLHEP::pi*( pR*pR + tR*tR ); // basically 2piRR + recentXS = R2*G4Log(1.0 + cInel*xs/R2)*(1. - 0.5*bCoulomb/e)/cInel; + } + return recentXS; +} + G4Fragment* G4GEMChannelVI::EmittedFragment(G4Fragment* theNucleus) { // assumed, that TotalProbability(...) was already called // if value iz zero no possiblity to sample final state G4Fragment* evFragment = nullptr; - G4LorentzVector lv0 = theNucleus->GetMomentum(); - G4double ekin; - G4double exc = 0.0; - G4double probMax = std::max(fEData[nProb - 1].prob, 0.0); - if (0.0 >= probMax) { - ekin = std::max(0.5*(fMass*fMass - fResMass*fResMass + fEvapMass2) - /fMass - fEvapMass, 0.0); - } else if (1 == nProb) { - ekin = fProbability->SampleEnergy(fEData[0].ekin1, fEData[0].ekin2, - bCoulomb, fExc, 0.0); - } else { - G4double p = G4UniformRand()*probMax; - G4int i{1}; - for (; iGetLevelManager(resZ, resA); + G4double e2 = fMass - fEvapMass - fResMass; + fEvapExc = 0.0; + + // sample excitation of the evaporation fragment + if (nProbEvap > 1) { + G4double q = prob[nProbEvap - 1]; + if (q > 0.0) { + q *= G4UniformRand(); + for (G4int i=0; i < nProbEvap; ++i) { + if (q <= prob[i]) { + G4double e1 = (0 == i) ? 0.0 : + fDeltaEvap*((i - 1) + (q - prob[i - 1])/(prob[i] - prob[i - 1])); + fEvapExc = CorrectExcitation(e1, lManagerEvap); + e2 -= fEvapExc; + e2 = std::max(e2, 0.0); + } + } } - G4double e1 = fEData[i - 1].exc; - G4double e2 = fEData[i].exc; - G4double p1 = fEData[i - 1].prob; - G4double p2 = fEData[i].prob; - exc = e1 + (e2 - e1)*(p - p1)/(p2 - p1); - ekin = fProbability->SampleEnergy(fEData[i].ekin1, fEData[i].ekin2, - bCoulomb, fExc, exc); } - G4double m1 = fEvapMass + exc; + if (ComputeIntegral(bCoulomb, e2) <= 0.0) { return evFragment; } + + // sample free energy + G4double e = SampleValue(); + // compute excitation of the residual fragment + fResExc = CorrectExcitation(e2 - e, lManagerRes); + + // final kinematics + G4double m1 = fEvapMass + fEvapExc; + G4double m2 = fResMass + fResExc; + + G4double ekin = 0.5*e*(e + 2*m2)/(e + m1 + m2); G4LorentzVector lv(std::sqrt(ekin*(ekin + 2.0*m1)) *G4RandomDirection(), ekin + m1); + G4LorentzVector lv0 = theNucleus->GetMomentum(); lv.boost(lv0.boostVector()); - evFragment = new G4Fragment(A, Z, lv); - lv0 -= lv; + evFragment = new G4Fragment(evapA, evapZ, lv); evFragment->SetCreatorModelID(secID); + + // residual + lv0 -= lv; theNucleus->SetZandA_asInt(resZ, resA); theNucleus->SetMomentum(lv0); theNucleus->SetCreatorModelID(secID); return evFragment; -} +} + +G4double +G4GEMChannelVI::CorrectExcitation(G4double exc, const G4LevelManager* man) +{ + if (exc <= 0.0 || nullptr == man) { return 0.0; } + std::size_t idx = man->NearestLevelIndex(exc); + + // choose ground state + if (0 == idx) { return 0.0; } + + // possible discrete level + G4double elevel = man->LevelEnergy(idx); + std::size_t ntrans{0}; + if (std::abs(elevel - exc) < fTolerance) { + auto level = man->GetLevel(idx); + if (nullptr != level) { + ntrans = level->NumberOfTransitions(); + G4int idxfl = man->FloatingLevel(idx); + // for floating level check levels with the same energy + if (idxfl > 0) { + auto newlevel = man->GetLevel(idx - 1); + G4double newenergy = man->LevelEnergy(idx - 1); + if (nullptr != newlevel && std::abs(elevel - newenergy) < fTolerance) { + std::size_t newntrans = newlevel->NumberOfTransitions(); + if (newntrans > 0) { + elevel = newenergy; + ntrans = newntrans; + } + } + } + if (0 < ntrans) { return elevel; } + } + } + return exc; +} + +const G4String& G4GEMChannelVI::ModelName() const +{ + return fModelName; +} void G4GEMChannelVI::Dump() const {} diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbabilityVI.cc b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbabilityVI.cc index d1eaaf41b4..624653edba 100644 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbabilityVI.cc +++ b/source/processes/hadronic/models/de_excitation/gem_evaporation/src/G4GEMProbabilityVI.cc @@ -54,9 +54,9 @@ G4GEMProbabilityVI::G4GEMProbabilityVI(G4int anA, G4int aZ, const G4LevelManager A13 = pG4pow->Z13(theA); if(0 == aZ) { - ResetIntegrator(30, 0.25*CLHEP::MeV, 0.02); + ResetIntegrator(0.25*CLHEP::MeV, 0.005); } else { - ResetIntegrator(30, 0.5*CLHEP::MeV, 0.03); + ResetIntegrator(0.5*CLHEP::MeV, 0.005); } } diff --git a/source/processes/hadronic/models/de_excitation/handler/src/G4ExcitationHandler.cc b/source/processes/hadronic/models/de_excitation/handler/src/G4ExcitationHandler.cc index 0c3f5de353..b770055803 100644 --- a/source/processes/hadronic/models/de_excitation/handler/src/G4ExcitationHandler.cc +++ b/source/processes/hadronic/models/de_excitation/handler/src/G4ExcitationHandler.cc @@ -80,6 +80,7 @@ #include "G4Evaporation.hh" #include "G4PhotonEvaporation.hh" #include "G4StatMF.hh" +#include "G4FermiBreakUpAN.hh" #include "G4FermiBreakUpVI.hh" #include "G4NuclearLevelData.hh" #include "G4PhysicsModelCatalog.hh" @@ -93,7 +94,7 @@ G4ExcitationHandler::G4ExcitationHandler() nist = G4NistManager::Instance(); theMultiFragmentation = new G4StatMF(); - theFermiModel = new G4FermiBreakUpVI(); + theFermiModel = nullptr; thePhotonEvaporation = new G4PhotonEvaporation(); SetEvaporation(new G4Evaporation(thePhotonEvaporation), true); theResults.reserve(60); @@ -123,6 +124,9 @@ G4ExcitationHandler::~G4ExcitationHandler() void G4ExcitationHandler::SetParameters() { + // initialisation only once + if (isInitialised) { return; } + G4NuclearLevelData* ndata = G4NuclearLevelData::GetInstance(); auto param = ndata->GetParameters(); isActive = true; @@ -143,52 +147,70 @@ void G4ExcitationHandler::SetParameters() // allowing local debug printout fVerbose = std::max(fVerbose, param->GetVerbose()); if (isActive) { + // photon evaporation initialisation if (nullptr == thePhotonEvaporation) { SetPhotonEvaporation(new G4PhotonEvaporation()); } + thePhotonEvaporation->Initialise(); + + // FermiBreakUp initialisation if (nullptr == theFermiModel) { - SetFermiModel(new G4FermiBreakUpVI()); + auto type = param->GetFermiBreakUpType(); + if (type == bModelVI) { + theFermiModel = new G4FermiBreakUpVI(); + } else if (type == bModelAN) { + theFermiModel = new G4FermiBreakUpAN(fVerbose); + } else { + theFermiModel = new G4VFermiBreakUp(); + } + SetFermiModel(theFermiModel); } + theFermiModel->Initialise(); + + // multi-fragmentation initialisation if (nullptr == theMultiFragmentation) { SetMultiFragmentation(new G4StatMF()); } + + // evaporation initialisation if (nullptr == theEvaporation) { SetEvaporation(new G4Evaporation(thePhotonEvaporation), true); } + theEvaporation->SetPhotonEvaporation(thePhotonEvaporation); + theEvaporation->SetFermiBreakUp(theFermiModel); + SetDeexChannelsType(param->GetDeexChannelsType()); + theEvaporation->InitialiseChannels(); } - theFermiModel->SetVerbose(fVerbose); - if(fVerbose > 1) { + if (fVerbose > 1) { G4cout << "G4ExcitationHandler::SetParameters() done " << this << G4endl; } } void G4ExcitationHandler::Initialise() { - if(isInitialised) { return; } - if(fVerbose > 1) { + // initialisation only once + if (isInitialised) { return; } + if (fVerbose > 1) { G4cout << "G4ExcitationHandler::Initialise() started " << this << G4endl; } G4DeexPrecoParameters* param = G4NuclearLevelData::GetInstance()->GetParameters(); - isInitialised = true; SetParameters(); - if(isActive) { - theFermiModel->Initialise(); - theEvaporation->InitialiseChannels(); - } + // dump level is controlled by parameter class param->Dump(); + isInitialised = true; } void G4ExcitationHandler::SetEvaporation(G4VEvaporation* ptr, G4bool flag) { - if(nullptr != ptr && ptr != theEvaporation) { + if (!isInitialised && nullptr != ptr && ptr != theEvaporation) { + delete theEvaporation; theEvaporation = ptr; - theEvaporation->SetPhotonEvaporation(thePhotonEvaporation); - theEvaporation->SetFermiBreakUp(theFermiModel); isEvapLocal = flag; if(fVerbose > 1) { - G4cout << "G4ExcitationHandler::SetEvaporation() " << ptr << " done for " << this << G4endl; + G4cout << "G4ExcitationHandler::SetEvaporation() " << ptr + << " done for " << this << G4endl; } } } @@ -196,7 +218,7 @@ void G4ExcitationHandler::SetEvaporation(G4VEvaporation* ptr, G4bool flag) void G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation* ptr) { - if(nullptr != ptr && ptr != theMultiFragmentation) { + if (!isInitialised && nullptr != ptr && ptr != theMultiFragmentation) { delete theMultiFragmentation; theMultiFragmentation = ptr; } @@ -204,25 +226,19 @@ G4ExcitationHandler::SetMultiFragmentation(G4VMultiFragmentation* ptr) void G4ExcitationHandler::SetFermiModel(G4VFermiBreakUp* ptr) { - if(nullptr != ptr && ptr != theFermiModel) { + if (!isInitialised && nullptr != ptr && ptr != theFermiModel) { delete theFermiModel; theFermiModel = ptr; - if(nullptr != theEvaporation) { - theEvaporation->SetFermiBreakUp(theFermiModel); - } } } void G4ExcitationHandler::SetPhotonEvaporation(G4VEvaporationChannel* ptr) { - if(nullptr != ptr && ptr != thePhotonEvaporation) { + if (!isInitialised && nullptr != ptr && ptr != thePhotonEvaporation) { delete thePhotonEvaporation; thePhotonEvaporation = ptr; - if(nullptr != theEvaporation) { - theEvaporation->SetPhotonEvaporation(ptr); - } - if(fVerbose > 1) { + if (fVerbose > 1) { G4cout << "G4ExcitationHandler::SetPhotonEvaporation() " << ptr << " for handler " << this << G4endl; } @@ -232,7 +248,7 @@ G4ExcitationHandler::SetPhotonEvaporation(G4VEvaporationChannel* ptr) void G4ExcitationHandler::SetDeexChannelsType(G4DeexChannelType val) { G4Evaporation* evap = static_cast(theEvaporation); - if(fVerbose > 1) { + if (fVerbose > 1) { G4cout << "G4ExcitationHandler::SetDeexChannelsType " << val << " for " << this << G4endl; } diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh b/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh index a08b3150c9..df0d1361d3 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh @@ -55,6 +55,20 @@ enum G4DeexChannelType fDummy }; +enum G4PreCompoundType +{ + eDefault = 0, + eDeexcitation, + ePrecoInterface +}; + +enum G4FermiBreakUpType +{ + bModelVI = 0, + bModelAN, + bDummy +}; + class G4StateManager; class G4DeexParametersMessenger; @@ -105,8 +119,10 @@ public: inline G4int GetMinAForPreco() const; + // should be renamed inline G4int GetPrecoModelType() const; + // should be renamed inline G4int GetDeexModelType() const; inline G4int GetTwoJMAX() const; @@ -141,8 +157,11 @@ public: inline G4DeexChannelType GetDeexChannelsType() const; - // Set methods + inline G4PreCompoundType GetPreCompoundType() const; + inline G4FermiBreakUpType GetFermiBreakUpType() const; + + // Set methods void SetLevelDensity(G4double); void SetR0(G4double); @@ -173,8 +192,10 @@ public: void SetMinAForPreco(G4int); + // should be renamed void SetPrecoModelType(G4int); + // should be renamed void SetDeexModelType(G4int); void SetTwoJMAX(G4int); @@ -199,7 +220,7 @@ public: void SetStoreICLevelData(G4bool); - // obsolete method (use previous) + // obsolete method (use SetStoreICLevelData) void SetStoreAllLevels(G4bool); void SetInternalConversionFlag(G4bool); @@ -212,6 +233,10 @@ public: void SetDeexChannelsType(G4DeexChannelType); + void SetPreCompoundType(G4PreCompoundType); + + void SetFermiBreakUpType(G4FermiBreakUpType); + G4DeexPrecoParameters(const G4DeexPrecoParameters & right) = delete; const G4DeexPrecoParameters& operator= (const G4DeexPrecoParameters &right) = delete; @@ -289,6 +314,8 @@ private: // type of a set of de-exitation channels G4DeexChannelType fDeexChannelType; + G4PreCompoundType fPreCompoundType; + G4FermiBreakUpType fFermiBreakUpType; }; inline G4double G4DeexPrecoParameters::GetLevelDensity() const @@ -446,4 +473,14 @@ inline G4DeexChannelType G4DeexPrecoParameters::GetDeexChannelsType() const return fDeexChannelType; } +inline G4PreCompoundType G4DeexPrecoParameters::GetPreCompoundType() const +{ + return fPreCompoundType; +} + +inline G4FermiBreakUpType G4DeexPrecoParameters::GetFermiBreakUpType() const +{ + return fFermiBreakUpType; +} + #endif diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4NucLevel.hh b/source/processes/hadronic/models/de_excitation/management/include/G4NucLevel.hh index 7a7b8fafab..3d602b43a7 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4NucLevel.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4NucLevel.hh @@ -64,23 +64,23 @@ public: inline std::size_t NumberOfTransitions() const; - inline std::size_t FinalExcitationIndex(std::size_t idx) const; + inline std::size_t FinalExcitationIndex(const std::size_t idx) const; - inline G4int TransitionType(std::size_t idx) const; + inline G4int TransitionType(const std::size_t idx) const; inline G4double GetTimeGamma() const; inline G4float GammaProbability(std::size_t idx) const; - inline G4float GammaCumProbability(std::size_t idx) const; + inline G4float GammaCumProbability(const std::size_t idx) const; - inline G4float MultipolarityRatio(std::size_t idx) const; + inline G4float MultipolarityRatio(const std::size_t idx) const; - inline std::size_t SampleGammaTransition(G4double rndm) const; + inline std::size_t SampleGammaTransition(const G4double rndm) const; - inline G4int SampleShell(std::size_t idx, G4double rndm) const; + inline G4int SampleShell(const std::size_t idx, const G4double rndm) const; - inline const std::vector* ShellProbabilty(std::size_t idx) const; + inline const std::vector* ShellProbabilty(const std::size_t idx) const; void StreamInfo(std::ostream& os) const; @@ -139,7 +139,8 @@ inline G4float G4NucLevel::MultipolarityRatio(const std::size_t idx) const inline std::size_t G4NucLevel::SampleGammaTransition(const G4double rndm) const { - G4float x = rndm; + // this method called if length > 1 + const G4float x = (G4float)rndm; std::size_t idx = 0; for(; idx* prob = fShellProbability[idx]; G4int i(-1); if(nullptr != prob) { - G4int nn = (G4int)prob->size(); - G4float x = rndm; + const G4int nn = (G4int)prob->size(); + const G4float x = (G4float)rndm; for(i=0; i* -G4NucLevel::ShellProbabilty(std::size_t idx) const +G4NucLevel::ShellProbabilty(const std::size_t idx) const { return fShellProbability[idx]; } diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4VEmissionProbability.hh b/source/processes/hadronic/models/de_excitation/management/include/G4VEmissionProbability.hh index 479d4d97fa..67e2e10cc3 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4VEmissionProbability.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4VEmissionProbability.hh @@ -39,17 +39,20 @@ #include "globals.hh" #include "G4Fragment.hh" +#include "G4VSIntegration.hh" class G4NuclearLevelData; class G4Pow; -class G4VEmissionProbability +class G4VEmissionProbability : G4VSIntegration { public: explicit G4VEmissionProbability(G4int Z, G4int A); - virtual ~G4VEmissionProbability() = default; + ~G4VEmissionProbability() override = default; + + G4double ProbabilityDensityFunction(G4double energy) override; virtual void Initialise(); @@ -93,7 +96,7 @@ public: protected: - void ResetIntegrator(size_t nbin, G4double de, G4double eps); + void ResetIntegrator(G4double de, G4double eps); G4double IntegrateProbability(G4double elow, G4double ehigh, G4double CB); @@ -120,18 +123,8 @@ private: G4double fExc = 0.0; G4double fExcRes = 0.0; - - G4double fE1 = 0.0; - G4double fE2 = 0.0; - G4double fP2 = 0.0; - - G4double emin = 0.0; - G4double emax = 0.0; G4double eCoulomb = 0.0; - G4double accuracy = 0.005; - G4double probmax = 0.0; - G4double elimit; - + G4double fMaxLifeTime = 1.0; G4bool fFD = false; }; diff --git a/source/processes/hadronic/models/de_excitation/management/sources.cmake b/source/processes/hadronic/models/de_excitation/management/sources.cmake index 918397d24c..efd083b65f 100644 --- a/source/processes/hadronic/models/de_excitation/management/sources.cmake +++ b/source/processes/hadronic/models/de_excitation/management/sources.cmake @@ -26,6 +26,7 @@ geant4_module_link_libraries(G4hadronic_deex_management PUBLIC G4globman G4hadronic_util + G4hepnumerics G4intercoms PRIVATE G4hadronic_deex_util diff --git a/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc b/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc index 44b2ca1e1e..3d249aa559 100644 --- a/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc +++ b/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc @@ -90,6 +90,8 @@ void G4DeexPrecoParameters::Initialise() fMinExPerNucleounForMF = 200*CLHEP::GeV; fDeexChannelType = fCombined; + fPreCompoundType = eDefault; + fFermiBreakUpType = bModelVI; fDeexType = 3; fTwoJMAX = 10; @@ -299,16 +301,31 @@ void G4DeexPrecoParameters::SetDeexChannelsType(G4DeexChannelType val) fDeexChannelType = val; } +void G4DeexPrecoParameters::SetPreCompoundType(G4PreCompoundType val) +{ + if(IsLocked()) { return; } + fPreCompoundType = val; +} + +void G4DeexPrecoParameters::SetFermiBreakUpType(G4FermiBreakUpType val) +{ + if(IsLocked()) { return; } + fFermiBreakUpType = val; +} + std::ostream& G4DeexPrecoParameters::StreamInfo(std::ostream& os) const { static const G4String namm[5] = {"Evaporation","GEM","Evaporation+GEM","GEMVI","Dummy"}; - static const G4int nmm[5] = {8, 68, 68, 31, 0}; + static const G4int nmm[5] = {8, 68, 68, 83, 0}; + static const G4String nfbu[3] = {"ModelVI", "ModelAN", "Dummy"}; G4int idx = fDeexChannelType; + G4int jdx = fFermiBreakUpType; G4long prec = os.precision(5); os << "=======================================================================" << "\n"; os << "====== Geant4 Native Pre-compound Model Parameters ========" << "\n"; os << "=======================================================================" << "\n"; + os << "Type of pre-compound model " << fPreCompoundType << "\n"; os << "Type of pre-compound inverse x-section " << fPrecoType << "\n"; os << "Pre-compound model active " << (!fPrecoDummy) << "\n"; os << "Pre-compound excitation low energy " @@ -327,6 +344,7 @@ std::ostream& G4DeexPrecoParameters::StreamInfo(std::ostream& os) const os << "Type of de-excitation inverse x-section " << fDeexType << "\n"; os << "Type of de-excitation factory " << namm[idx] << "\n"; os << "Number of de-excitation channels " << nmm[idx] << "\n"; + os << "Type of Fermi BreakUp model " << nfbu[jdx] << "\n"; os << "Min excitation energy " << G4BestUnit(fMinExcitation, "Energy") << "\n"; os << "Min energy per nucleon for multifragmentation " diff --git a/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc b/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc index c1446da3d0..3b37f20136 100644 --- a/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc +++ b/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc @@ -394,7 +394,7 @@ G4LevelReader::LevelManager(G4int Z, G4int A, std::ifstream& infile) << " isOK=" << isTransOK << G4endl; } - if (0.0f < fNorm1) { fNorm1 = 1.0f/fNorm1; } + fNorm1 = (FLT_MIN < fNorm1) ? 1.0f/fNorm1 : 0.0f; for (k=0; kGetParameters(); pVerbose = param->GetVerbose(); fFD = param->GetDiscreteExcitationFlag(); + fMaxLifeTime = param->GetMaxLifeTime(); pTolerance = param->GetMinExcitation(); pWidth = param->GetNuclearLevelWidth(); } -void G4VEmissionProbability::ResetIntegrator(size_t, G4double de, G4double eps) +void G4VEmissionProbability::ResetIntegrator(G4double de, G4double eps) { - if(de > 0.0) { elimit = de; } - if(eps > 0.0) { accuracy = eps; } + InitialiseIntegrator(eps, 0.25, 1.10, de, 0.1*CLHEP::MeV, 2*CLHEP::MeV); } G4double G4VEmissionProbability::EmissionProbability(const G4Fragment&, G4double) @@ -78,158 +78,34 @@ G4double G4VEmissionProbability::IntegrateProbability(G4double elow, G4double cb) { pProbability = 0.0; - if(elow >= ehigh) { return pProbability; } + if (elow >= ehigh) { return pProbability; } - emin = elow; - emax = ehigh; eCoulomb = cb; + pProbability = ComputeIntegral(elow, ehigh); - const G4double edeltamin = 0.1*CLHEP::MeV; - const G4double edeltamax = 2*CLHEP::MeV; - G4double edelta = std::min(std::min(elimit, edeltamax), edeltamin); - G4double xbin = (emax - emin)/edelta + 1.0; - G4int ibin = std::max((G4int)xbin, 4); - - // providing smart binning - G4int nbin = ibin*5; - edelta = (emax - emin)/ibin; - - G4double x(emin), y(0.0); - G4double edelmicro = edelta*0.02; - probmax = ComputeProbability(x + edelmicro, eCoulomb); - G4double problast = probmax; - if(pVerbose > 1) { - G4cout << "### G4VEmissionProbability::IntegrateProbability: " - << "probmax=" << probmax << " Emin=" << emin - << " Emax=" << emax << " QB=" << cb << " nbin=" << nbin - << G4endl; - } - fE1 = fE2 = fP2 = 0.0; - G4double emax0 = emax - edelmicro; - G4bool endpoint = false; - for(G4int i=0; i= emax0) { - x = emax0; - endpoint = true; - } - y = ComputeProbability(x, eCoulomb); - if(pVerbose > 2) { - G4cout << " " << i << ". E= " << x << " prob= " << y - << " Edel= " << edelta << G4endl; - } - if(y >= probmax) { - probmax = y; - } else if(0.0 == fE1 && 2*y < probmax) { - fE1 = x; - } - - G4double del = (y + problast)*edelta*0.5; - pProbability += del; - // end of the loop - if(del < accuracy*pProbability || endpoint) { break; } - problast = y; - - // smart step definition - if(del != pProbability && del > 0.8*pProbability && - 0.7*edelta > edeltamin) { - edelta *= 0.7; - } else if(del < 0.1*pProbability && 1.5*edelta < edeltamax) { - edelta *= 1.5; - } - } - if(fE1 > emin && fE1 < emax) { - fE2 = std::max(0.5*(fE1 + emax), emax - edelta); - fP2 = 2*ComputeProbability(fE2, eCoulomb); - } - - if(pVerbose > 1) { - G4cout << " Probability= " << pProbability << " probmax= " - << probmax << " emin=" << emin << " emax=" << emax - << " E1=" << fE1 << " E2=" << fE2 << G4endl; + if (pVerbose > 1) { + G4cout << "G4VEmissionProbability::IntegrateProbability Probability=" + << pProbability << " Z=" << theZ << " A=" << theA << G4endl; } return pProbability; } G4double G4VEmissionProbability::SampleEnergy() { - static const G4double fact = 1.05; - static const G4double alim = 0.05; - static const G4double blim = 20.; - probmax *= fact; - - // two regions with flat and exponential majorant - G4double del = emax - emin; - G4double p1 = 1.0; - G4double p2 = 0.0; - G4double a0 = 0.0; - G4double a1 = 1.0; - G4double x; - if(fE1 > 0.0 && fP2 > 0.0 && fP2 < 0.5*probmax) { - a0 = G4Log(probmax/fP2)/(fE2 - fE1); - del= fE1 - emin; - p1 = del; - x = a0*(emax - fE1); - if(x < blim) { - a1 = (x > alim) ? 1.0 - G4Exp(-x) : x*(1.0 - 0.5*x); - } - p2 = a1/a0; - p1 /= (p1 + p2); - p2 = 1.0 - p1; - } - - if(pVerbose > 1) { - G4cout << "### G4VEmissionProbability::SampleEnergy: " - << " Emin= " << emin << " Emax= " << emax - << "/n E1=" << fE1 << " p1=" << p1 - << " probmax=" << probmax << " P2=" << fP2 << G4endl; - } - - CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine(); - const G4int nmax = 1000; - G4double ekin, gg, gmax; - G4int n = 0; - do { - ++n; - G4double q = rndm->flat(); - if (p2 == 0.0) { - gmax = probmax; - ekin = del*q + emin; - } else if (q <= p1) { - gmax = probmax; - ekin = del*q/p1 + emin; - } else { - ekin = fE1 - G4Log(1.0 - (q - p1)*a1/p2)/a0; - x = a0*(ekin - fE1); - gmax = fP2; - if(x < blim) { - gmax = probmax*((x > alim) ? G4Exp(-x) : 1.0 - x*(1.0 - 0.5*x)); - } - } - gg = ComputeProbability(ekin, eCoulomb); - if(pVerbose > 2) { - G4cout << " " << n - << ". prob= " << gg << " probmax= " << probmax - << " Ekin= " << ekin << G4endl; - } - if((gg > gmax || n > nmax) && pVerbose > 1) { - G4cout << "### G4VEmissionProbability::SampleEnergy for Z= " << theZ - << " A= " << theA << " Eex(MeV)=" << fExc << " p1=" << p1 - << "\n Warning n= " << n - << " prob/gmax=" << gg/gmax - << " prob=" << gg << " gmax=" << gmax << " probmax=" << probmax - << "\n Ekin= " << ekin << " Emin= " << emin - << " Emax= " << emax << G4endl; - } - } while(gmax*rndm->flat() > gg && n < nmax); + G4double ekin = SampleValue(); G4double enew = FindRecoilExcitation(ekin); - if(pVerbose > 1) { - G4cout << "### SampleEnergy: Efinal= " + if (pVerbose > 1) { + G4cout << "### G4VEmissionProbability::SampleEnergy: Efin(MeV)= " << enew << " E=" << ekin << " Eexc=" << fExcRes << G4endl; } return enew; } +G4double G4VEmissionProbability::ProbabilityDensityFunction(G4double e) +{ + return ComputeProbability(e, eCoulomb); +} + G4double G4VEmissionProbability::FindRecoilExcitation(const G4double e) { G4double mass = pEvapMass + fExc; @@ -241,7 +117,7 @@ G4double G4VEmissionProbability::FindRecoilExcitation(const G4double e) fExcRes = mres - pResMass; - if(pVerbose > 1) { + if (pVerbose > 1) { G4cout << "### FindRecoilExcitation for resZ= " << resZ << " resA= " << resA << " evaporated Z= " << theZ << " A= " << theA @@ -253,7 +129,7 @@ G4double G4VEmissionProbability::FindRecoilExcitation(const G4double e) fExcRes = 0.0; return std::max(0.5*(m02 + m12 - m22)/pMass - mass, 0.0); } - if(!fFD) { return e; } + if (!fFD) { return e; } // select final state excitation auto lManager = pNuclearLevelData->GetLevelManager(resZ, resA); @@ -264,20 +140,19 @@ G4double G4VEmissionProbability::FindRecoilExcitation(const G4double e) // find level std::size_t idx = lManager->NearestLevelIndex(fExcRes); - auto level = lManager->GetLevel(idx); + auto level = lManager->GetLevel(idx); + G4double ltime = level->GetTimeGamma(); + G4double elevel = lManager->LevelEnergy(idx); - // unstable level - if (level->GetTimeGamma() == 0.0) { return e; } + G4double efinal = e; // is possible to use level energy? - G4double elevel = lManager->LevelEnergy(idx); - if (std::abs(elevel - fExcRes) > pWidth || pMass < mass + pResMass + elevel) { - return e; + if ((idx <= 1 || std::abs(elevel - fExcRes) <= pWidth || ltime >= fMaxLifeTime) && + (pMass >= mass + pResMass + elevel)) { + G4double massR = pResMass + elevel; + G4double mr2 = massR*massR; + fExcRes = elevel; + efinal = std::max(0.5*(m02 + m12 - mr2)/pMass - mass, 0.0); } - - // long-lived level - G4double massR = pResMass + elevel; - G4double mr2 = massR*massR; - fExcRes = elevel; - return std::max(0.5*(m02 + m12 - mr2)/pMass - mass, 0.0); + return efinal; } diff --git a/source/processes/hadronic/models/de_excitation/multifragmentation/src/G4StatMFMicroPartition.cc b/source/processes/hadronic/models/de_excitation/multifragmentation/src/G4StatMFMicroPartition.cc index 89f3076c11..a24ae58640 100644 --- a/source/processes/hadronic/models/de_excitation/multifragmentation/src/G4StatMFMicroPartition.cc +++ b/source/processes/hadronic/models/de_excitation/multifragmentation/src/G4StatMFMicroPartition.cc @@ -177,7 +177,9 @@ G4double G4StatMFMicroPartition::CalcPartitionTemperature(G4double U, // If this happens, T = 0 MeV, which means that probability for this // partition will be 0 - if (std::fabs(U + FreeInternalE0 - PartitionEnergy) < 0.003) return -1.0; + if (std::abs(U + FreeInternalE0 - PartitionEnergy) < 0.003) { + return -1.0; + } // Calculate temperature by midpoint method @@ -189,23 +191,26 @@ G4double G4StatMFMicroPartition::CalcPartitionTemperature(G4double U, G4double Da = (U + FreeInternalE0 - GetPartitionEnergy(Ta))/U; G4double Db = (U + FreeInternalE0 - GetPartitionEnergy(Tb))/U; - G4int maxit = 0; - // Loop checking, 05-Aug-2015, Vladimir Ivanchenko - while (Da*Db > 0.0 && maxit < 1000) - { - ++maxit; + if (Da*Db < 0.0) { + G4bool yes = false; + for (G4int i = 0; i < 1000; ++i) { Tb += 0.5*Tb; Db = (U + FreeInternalE0 - GetPartitionEnergy(Tb))/U; + if (Da*Db >= 0.0) { + yes = true; + break; + } } + if (!yes) { return -1.0; } + } + G4double eps = 1.0e-10*std::abs(Ta-Tb); - G4double eps = 1.0e-14*std::abs(Ta-Tb); - - for (G4int i = 0; i < 1000; i++) + for (G4int i = 0; i < 1000; ++i) { Tmid = (Ta+Tb)/2.0; - if (std::fabs(Ta-Tb) <= eps) return Tmid; + if (std::abs(Ta-Tb) <= eps) { return Tmid; } G4double Dmid = (U + FreeInternalE0 - GetPartitionEnergy(Tmid))/U; - if (std::fabs(Dmid) < 0.003) return Tmid; + if (std::abs(Dmid) < 0.003) { return Tmid; } if (Da*Dmid < 0.0) { Tb = Tmid; @@ -217,12 +222,7 @@ G4double G4StatMFMicroPartition::CalcPartitionTemperature(G4double U, Da = Dmid; } } - // if we arrive here the temperature could not be calculated - G4cout << "G4StatMFMicroPartition::CalcPartitionTemperature: I can't calculate the temperature" - << G4endl; - // and set probability to 0 returning T < 0 - return -1.0; - + return -1.0; } G4double G4StatMFMicroPartition::CalcPartitionProbability(G4double U, @@ -234,70 +234,50 @@ G4double G4StatMFMicroPartition::CalcPartitionProbability(G4double U, _Temperature = T; G4Pow* g4calc = G4Pow::GetInstance(); + G4int n = (G4int)_thePartition.size(); // Factorial of fragment multiplicity - G4double Fact = 1.0; - unsigned int i; - for (i = 0; i < _thePartition.size() - 1; i++) - { - G4double f = 1.0; - for (unsigned int ii = i+1; i< _thePartition.size(); i++) - { - if (_thePartition[i] == _thePartition[ii]) f++; - } - Fact *= f; - } + G4double Fact = g4calc->factorial(n); G4double ProbDegeneracy = 1.0; G4double ProbA32 = 1.0; - - for (i = 0; i < _thePartition.size(); i++) - { - ProbDegeneracy *= GetDegeneracyFactor(_thePartition[i]); - ProbA32 *= _thePartition[i]*std::sqrt((G4double)_thePartition[i]); - } - - // Compute entropy G4double PartitionEntropy = 0.0; - for (i = 0; i < _thePartition.size(); i++) - { - // interaction entropy for alpha - if (_thePartition[i] == 4) - { - PartitionEntropy += - 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i]); - } - // interaction entropy for Af > 4 - else if (_thePartition[i] > 4) - { - PartitionEntropy += - 2.0*T*_thePartition[i]/InvLevelDensity(_thePartition[i]) - - G4StatMFParameters::DBetaDT(T) * g4calc->Z23(_thePartition[i]); - } + G4double db = G4StatMFParameters::DBetaDT(T); + + for (G4int i = 0; i < n; ++i) { + G4int par = _thePartition[i]; + ProbDegeneracy *= GetDegeneracyFactor(par); + ProbA32 *= _thePartition[i]*std::sqrt((G4double)par); + + // interaction entropy for alpha + if (par == 4) { + PartitionEntropy += 2.0 * T * par/InvLevelDensity(par); } + // interaction entropy for Af > 4 + else if (par > 4) { + PartitionEntropy += 2.0 * T * par/InvLevelDensity(par) - db * g4calc->Z23(par); + } + } // Thermal Wave Lenght = std::sqrt(2 pi hbar^2 / nucleon_mass T) G4double ThermalWaveLenght3 = 16.15*fermi/std::sqrt(T); ThermalWaveLenght3 = ThermalWaveLenght3*ThermalWaveLenght3*ThermalWaveLenght3; // Translational Entropy - G4double kappa = 1. + elm_coupling*(g4calc->Z13((G4int)_thePartition.size())-1.0) - /(G4StatMFParameters::Getr0()*g4calc->Z13(theA)); - kappa = kappa*kappa*kappa; - kappa -= 1.; - G4double V0 = (4./3.)*pi*theA*G4StatMFParameters::Getr0()*G4StatMFParameters::Getr0()* - G4StatMFParameters::Getr0(); - G4double FreeVolume = kappa*V0; - G4double TranslationalS = std::max(0.0, G4Log(ProbA32/Fact) + - (_thePartition.size()-1.0)*G4Log(FreeVolume/ThermalWaveLenght3) + - 1.5*(_thePartition.size()-1.0) - 1.5*g4calc->logZ(theA)); + G4double r0 = G4StatMFParameters::Getr0(); + G4double kappa = 1. + elm_coupling*(g4calc->Z13(n) - 1.0)/(r0*g4calc->Z13(theA)); + G4double V0 = (4./3.)*pi*theA*r0*r0*r0; + G4double FreeVolume = (kappa*kappa*kappa - 1.0)*V0; + G4double TranslationalS = G4Log(ProbA32/Fact) + + (n - 1)*G4Log(FreeVolume/ThermalWaveLenght3) + + 1.5*(n - 1) - 1.5*g4calc->logZ(theA); + TranslationalS = std::max(TranslationalS, 0.0); PartitionEntropy += G4Log(ProbDegeneracy) + TranslationalS; _Entropy = PartitionEntropy; // And finally compute probability of fragment configuration - G4double exponent = PartitionEntropy-SCompound; - if (exponent > 300.0) exponent = 300.0; + G4double exponent = std::min(PartitionEntropy - SCompound, 200.); return _Probability = G4Exp(exponent); } @@ -318,40 +298,37 @@ G4StatMFChannel * G4StatMFMicroPartition::ChooseZ(G4int A0, G4int Z0, G4double M // Gives fragments charges { std::vector FragmentsZ; + G4int n = (G4int)_thePartition.size(); G4int ZBalance = 0; - do - { - G4double CC = G4StatMFParameters::GetGamma0()*8.0; - G4int SumZ = 0; - for (unsigned int i = 0; i < _thePartition.size(); i++) - { - G4double ZMean; - G4double Af = _thePartition[i]; - if (Af > 1.5 && Af < 4.5) ZMean = 0.5*Af; - else ZMean = Af*Z0/A0; - G4double ZDispersion = std::sqrt(Af * MeanT/CC); - G4int Zf; - do - { - Zf = static_cast(G4RandGauss::shoot(ZMean,ZDispersion)); - } - // Loop checking, 05-Aug-2015, Vladimir Ivanchenko - while (Zf < 0 || Zf > Af); - FragmentsZ.push_back(Zf); - SumZ += Zf; - } - ZBalance = Z0 - SumZ; - } + do { + G4double CC = G4StatMFParameters::GetGamma0()*8.0; + G4int SumZ = 0; + for (G4int i = 0; i < n; ++i) { + G4double ZMean; + G4double Af = _thePartition[i]; + if (Af > 1.5 && Af < 4.5) { ZMean = 0.5*Af; } + else ZMean = Af*Z0/A0; + G4double ZDispersion = std::sqrt(Af * MeanT/CC); + G4int Zf; + do { + Zf = static_cast(G4RandGauss::shoot(ZMean, ZDispersion)); + } + // Loop checking, 05-Aug-2015, Vladimir Ivanchenko + while (Zf < 0 || Zf > Af); + FragmentsZ.push_back(Zf); + SumZ += Zf; + } + ZBalance = Z0 - SumZ; + } // Loop checking, 05-Aug-2015, Vladimir Ivanchenko while (std::abs(ZBalance) > 1); FragmentsZ[0] += ZBalance; G4StatMFChannel * theChannel = new G4StatMFChannel; - for (unsigned int i = 0; i < _thePartition.size(); i++) - { - theChannel->CreateFragment(_thePartition[i],FragmentsZ[i]); - } + for (G4int i = 0; i < n; ++i) { + theChannel->CreateFragment(_thePartition[i], FragmentsZ[i]); + } return theChannel; } diff --git a/source/processes/hadronic/models/de_excitation/photon_evaporation/src/G4PhotonEvaporation.cc b/source/processes/hadronic/models/de_excitation/photon_evaporation/src/G4PhotonEvaporation.cc index 62f2ea68c8..8079960024 100644 --- a/source/processes/hadronic/models/de_excitation/photon_evaporation/src/G4PhotonEvaporation.cc +++ b/source/processes/hadronic/models/de_excitation/photon_evaporation/src/G4PhotonEvaporation.cc @@ -244,8 +244,8 @@ G4PhotonEvaporation::GetEmissionProbability(G4Fragment* nucleus) // ignore gamma de-excitation for highly excited levels if(A >= MAXGRDATA) { A = MAXGRDATA-1; } - static const G4float GREfactor = 5.0f; - G4double edelta = (G4double)(GREfactor*GRWidth[A] + GREnergy[A]); + static const G4double GREfactor = 5.0; + G4double edelta = GREfactor*(G4double)GRWidth[A] + (G4double)GREnergy[A]; if (fVerbose > 2) G4cout << " GREnergy=" << GREnergy[A] << " GRWidth="<= Z) { res = 0.42; } + else if (20 >= Z) { res = 0.42 + (Z - 10)*0.016; } + else if (30 >= Z) { res = 0.58 + (Z - 20)*0.01; } + else if (50 >= Z) { res = 0.68 + (Z - 30)*0.0045; } + else if (70 > Z) { res = 0.77 + (Z - 50)*0.0015; } + else { res = 0.8; } + return res; +} + +G4double G4DeexPrecoUtility::AlphaKValue(const G4int Z) +{ + G4double res; + if (10 >= Z) { res = 0.68; } + else if (20 >= Z) { res = 0.68 + (Z - 10)*0.014; } + else if (30 >= Z) { res = 0.82 + (Z - 20)*0.009; } + else if (50 >= Z) { res = 0.91 + (Z - 30)*0.003; } + else if (70 > Z) { res = 0.97 + (Z - 50)*0.0005; } + else { res = 0.98; } + return res; +} + +G4double G4DeexPrecoUtility::ProtonCValue(const G4int Z) +{ + G4double res; + if (10 >= Z) { res = 0.50; } + else if (20 >= Z) { res = 0.50 - (Z - 10)*0.022; } + else if (30 >= Z) { res = 0.28 - (Z - 20)*0.008; } + else if (50 >= Z) { res = 0.20 - (Z - 30)*0.0025; } + else if (70 > Z) { res = 0.15 - (Z - 50)*0.0025; } + else { res = 0.1; } + return res; +} + +G4double G4DeexPrecoUtility::AlphaCValue(const G4int Z) +{ + G4double res; + if (30 >= Z) { res = 0.10; } + else if (50 >= Z) { res = 0.10 - (Z - 30)*0.001; } + else if (70 >= Z) { res = 0.08 + (Z - 50)*0.001; } + else { res = 0.06; } + return res; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + diff --git a/source/processes/hadronic/models/em_dissociation/History b/source/processes/hadronic/models/em_dissociation/History index 3ede4ae384..e9f1f85593 100644 --- a/source/processes/hadronic/models/em_dissociation/History +++ b/source/processes/hadronic/models/em_dissociation/History @@ -4,6 +4,11 @@ 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-03-31 Vladimir Ivanchenko (hadr-emd-V11-03-01) +- G4EMDissociation : next attempt to fix Coverity warnings + +## 2025-03-20 Vladimir Ivanchenko (hadr-emd-V11-03-00) +- G4EMDissociation : fixed Coverity warnings ## 2022-04-04 Vladimir Ivanchenko (hadr-emd-V11-00-01) - G4EMDissociation : make consistent with G4Fragment modifications diff --git a/source/processes/hadronic/models/em_dissociation/src/G4EMDissociation.cc b/source/processes/hadronic/models/em_dissociation/src/G4EMDissociation.cc index c4ca2b59b8..8fff20bf0d 100644 --- a/source/processes/hadronic/models/em_dissociation/src/G4EMDissociation.cc +++ b/source/processes/hadronic/models/em_dissociation/src/G4EMDissociation.cc @@ -164,6 +164,7 @@ G4HadFinalState *G4EMDissociation::ApplyYourself G4double E = theTrack.GetKineticEnergy()/AP; G4double MP = theTrack.GetTotalEnergy() - E*AP; G4double b = pP.beta(); + if (b <= DBL_MIN) { return &theParticleChange; } G4double AT = theTarget.GetA_asInt(); G4double ZT = theTarget.GetZ_asInt(); G4double MT = G4NucleiProperties::GetNuclearMass(AT,ZT); @@ -188,8 +189,8 @@ G4HadFinalState *G4EMDissociation::ApplyYourself // Initialise the variables which will be used with the phase-space decay and // to boost the secondaries from the interaction. - G4ParticleDefinition *typeNucleon = NULL; - G4ParticleDefinition *typeDaughter = NULL; + G4ParticleDefinition *typeNucleon = nullptr; + G4ParticleDefinition *typeDaughter = nullptr; G4double Eg = 0.0; G4double mass = 0.0; G4ThreeVector boost = G4ThreeVector(0.0, 0.0, 0.0); @@ -212,8 +213,7 @@ G4HadFinalState *G4EMDissociation::ApplyYourself // or the target. G4int secID = -1; // Creator model ID for the secondaries - if (G4UniformRand() < - totCrossSectionP / (totCrossSectionP + totCrossSectionT)) { + if (G4UniformRand() * (totCrossSectionP + totCrossSectionT) < totCrossSectionP) { // It was the projectile which underwent EM dissociation. Define the Lorentz // boost to be applied to the secondaries, and sample whether a proton or a @@ -345,7 +345,7 @@ G4HadFinalState *G4EMDissociation::ApplyYourself pp = std::sqrt(pp); G4double costheta = 2.*G4UniformRand()-1.0; G4double sintheta = std::sqrt((1.0 - costheta)*(1.0 + costheta)); - G4double phi = 2.0*pi*G4UniformRand()*rad; + G4double phi = 2.0*pi*G4UniformRand(); G4ThreeVector direction(sintheta*std::cos(phi),sintheta*std::sin(phi),costheta); G4DynamicParticle *dynamicNucleon = new G4DynamicParticle(typeNucleon, direction*pp); diff --git a/source/processes/hadronic/models/inclxx/History b/source/processes/hadronic/models/inclxx/History index 7e68445fd0..6fdea98f9e 100644 --- a/source/processes/hadronic/models/inclxx/History +++ b/source/processes/hadronic/models/inclxx/History @@ -6,6 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-16 Ben Morgan (hadr-inclxx-V11-03-01) +- Replace the URL root.cern.ch with canonical root.cern + - Fixes [GitHub PR 87](https://github.com/Geant4/geant4/pull/87) + - Pure documentation, no functional change + +## 2025-02-13 Gabriele Cosmo (hadr-inclxx-V11-03-00) +- Fixed one more reported Coverity defect for use of std::move() in G4INCLCascade. + ## 2024-09-02 Gabriele Cosmo (hadr-inclxx-V11-02-01) - Fixed reported Coverity defects for use of std::move(). diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc index 44c53d5e86..0668dd2bbb 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc @@ -444,7 +444,7 @@ namespace G4INCL { sum = read_file(dataPathppbark, probabilities, particle_types); rdm = ((1.-rdm)/kaonicFSprob)*sum; //2670 normalize by the sum of probabilities in the file //now get the line number in the file where the FS particles are stored: - G4int n = findStringNumber(rdm, probabilities)-1; + G4int n = findStringNumber(rdm, std::move(probabilities))-1; if ( n < 0 ) return theEventInfo; for (G4int j = 0; j < static_cast(particle_types[n].size()); j++) { if (particle_types[n][j] == "pi0") { diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLClusterDecay.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLClusterDecay.cc index 1468b67d62..c0876d29d6 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLClusterDecay.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLClusterDecay.cc @@ -245,7 +245,7 @@ namespace G4INCL { * historical GENBOD routine [CERN report 68-15 (1968)]. The ROOT * implementation is documented at the following URL: * - * http://root.cern.ch/root/html/TGenPhaseSpace.html#TGenPhaseSpace + * http://root.cern/root/html/TGenPhaseSpace.html#TGenPhaseSpace */ void phaseSpaceDecayLegacy(Cluster * const c, ClusterDecayType theDecayMode, ParticleList *decayProducts) { const G4int theA = c->getA(); diff --git a/source/processes/hadronic/models/lend/History b/source/processes/hadronic/models/lend/History index 3bcf8baa59..5ad2524e9a 100644 --- a/source/processes/hadronic/models/lend/History +++ b/source/processes/hadronic/models/lend/History @@ -6,6 +6,21 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-05-14 Bret Beck, Caleb Matoon, Godfree Gert, Douglas M Wright (hadr-lend-V11-03-02) +- Fixes aimed for high impact issues identified by Coverity. + +## 2025-02-04 Bret Beck, Caleb Matoon, Godfree Gert, Douglas M Wright (hadr-lend-V11-03-01) +- Major update of GIDIplus interface with refactored c++ code including: + o uses official GNDS formatted data + o added feature for high-fidelity gamma cascades following reactions such as neutron capture and inelastic scattering + +## 2024-12-10 Douglas M Wright (hadr-lend-V11-03-00) +- Collect all inelastic models (neutron and gamma induced) into G4HadronPhysicsLEND + o update and simplify Shielding and G4EmExtraPhysics accordingly + o fixed two bugs: + - G4EmExtraPhysics failed to load photonuclear from LEND if G4GammaGeneralProcess existed + - G4LENDCombinedModel photofission check energy function was not connected to the base class which results in a crash + ## 2024-08-21 Gabriele Cosmo (hadr-lend-V11-02-05) - Fixed reported Coverity defects for: o pointless expression condition in ptwXY_div_ptwXY() operator; diff --git a/source/processes/hadronic/models/lend/Readme.txt b/source/processes/hadronic/models/lend/Readme.txt new file mode 100644 index 0000000000..d82935855f --- /dev/null +++ b/source/processes/hadronic/models/lend/Readme.txt @@ -0,0 +1,4 @@ +LEND directory with G4GIDI and GIDI+ assembled on 2025-03-25 13:27:37 +G4GIDI git hash = 62db2f9b95bcd850c8821e70db50c4c94874cc4d +G4GIDI git describe = G4GIDI.1.1.0-13-g62db2f9 +GIDI+ git describe = GIDI_plus.3.32.0-21-g25ae8f5 diff --git a/source/processes/hadronic/models/lend/include/G4GIDI.hh b/source/processes/hadronic/models/lend/include/G4GIDI.hh index f114a15b7a..c50e88cd84 100644 --- a/source/processes/hadronic/models/lend/include/G4GIDI.hh +++ b/source/processes/hadronic/models/lend/include/G4GIDI.hh @@ -24,63 +24,153 @@ // ******************************************************************** // -#ifndef G4GIDI_h_included -#define G4GIDI_h_included 1 - -#include -#include #include -//using namespace std; +#include -#include "G4Types.hh" -#include "G4GIDI_Misc.hh" -#include "G4GIDI_map.hh" -#include "G4GIDI_target.hh" -#include "G4GIDI_mass.hh" +#include +#include + +#ifndef G4GIDI_hh_included +#define G4GIDI_hh_included 1 + +#define channelID std::string + +extern PoPI::Database G4GIDI_pops; + +class G4GIDI_Product { + + public: + int A, Z, m; + double kineticEnergy, px, py, pz; + double birthTimeSec; +}; + +class G4GIDI_target { + + private: + MCGIDI::Protare *m_MCGIDI_protare; + std::string m_target; + std::string m_fileName; + int m_targetZ; + int m_targetA; + int m_targetM; + double m_targetMass; + MCGIDI::DomainHash m_domainHash; + MCGIDI::URR_protareInfos m_URR_protareInfos; + std::vector m_elasticIndices; + std::vector m_captureIndices; + std::vector m_fissionIndices; + std::vector m_othersIndices; + MCGIDI::Probabilities::ProbabilityBase2d const *m_elasticAngular; + + public: + G4GIDI_target( PoPI::Database const &a_pops, MCGIDI::DomainHash const &a_domainHash, GIDI::Protare const &a_GIDI_protare, + MCGIDI::Protare *a_MCGIDI_protare ); + ~G4GIDI_target( ); + + std::string const *getName( ) const { return( &m_target ); } + std::string const *getFilename( ) const { return( &m_fileName ); } + int getZ( ) const { return( m_targetZ ); } + int getA( ) const { return( m_targetA ); } + int getM( ) const { return( m_targetM ); } + double getMass( ) const { return( m_targetMass ); } + +// int getTemperatures( double *a_temperatures ) const ; +// int readTemperature( int index ); + +// std::string getEqualProbableBinSampleMethod( ); +// int setEqualProbableBinSampleMethod( std::string const &a_method ); + + std::vector const &elasticIndices( ) { return( m_elasticIndices ); } + std::vector const &captureIndices( ) { return( m_captureIndices ); } + std::vector const &fissionIndices( ) { return( m_fissionIndices ); } + std::vector const &othersIndices( ) { return( m_othersIndices ); } + + int getNumberOfChannels( ) const ; + int getNumberOfProductionChannels( ) const ; + channelID getChannelsID( int channelIndex ) const ; + std::vector *getChannelIDs( ) const ; + std::vector *getProductionChannelIDs( ) const ; + +// std::vector *getEnergyGridAtTIndex( int index ); + + double getTotalCrossSectionAtE( double a_energy, double a_temperature ) const ; + double getElasticCrossSectionAtE( double a_energy, double a_temperature ) const ; + double getCaptureCrossSectionAtE( double a_energy, double a_temperature ) const ; + double getFissionCrossSectionAtE( double a_energy, double a_temperature ) const ; + double getOthersCrossSectionAtE( double a_energy, double a_temperature ) const ; + double sumChannelCrossSectionAtE( std::vector const &a_indices, double a_energy, double a_temperature ) const ; + double sumChannelCrossSectionAtE( int a_nIndices, int const *a_indices, double a_energy, double a_temperature ) const ; + int sampleChannelCrossSectionAtE( std::vector const &a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const ; + int sampleChannelCrossSectionAtE( int a_nIndices, int const *a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const ; + + double getElasticFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const ; + std::vector *getCaptureFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const ; + std::vector *getFissionFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const ; + std::vector *getOthersFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const ; + std::vector *getFinalState( std::vector const &a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const ; + std::vector *getFinalState( int a_nIndices, int const *a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const ; + +// double getReactionsThreshold( int a_index ) const ; +// void getReactionsDomain( int a_index, double *a_EMin, double *a_EMax ) const ; +}; class G4GIDI { private: - G4int projectileID; - std::string projectile; - std::list dataDirectories; - std::vector targets; - - G4int init( G4int ip ); + G4int m_projectileIP; + std::string m_projectile; + std::vector m_maps; + std::vector m_protares; public: - G4GIDI( G4int ip, const std::string &dataDirectory ); - G4GIDI( G4int ip, std::list &dataDirectory ); + G4GIDI( G4int a_ip, std::string const &a_dataDirectory ); + G4GIDI( G4int a_ip, std::list const &a_dataDirectory ); ~G4GIDI( ); - G4int numberOfDataDirectories( void ); - G4int addDataDirectory( const std::string &dataDirectory ); - G4int removeDataDirectory( const std::string &dataDirectory ); - std::string getDataDirectoryAtIndex( G4int index ); - std::vector *getDataDirectories( void ); + G4int projectileIP( ) const { return( m_projectileIP ); } - G4bool isThisDataAvailable( const std::string &lib_name, G4int iZ, G4int iA, G4int iM = 0 ); - G4bool isThisDataAvailable( const std::string &lib_name, const std::string &targetName ); + G4int numberOfDataDirectories( ) const { return( static_cast( m_maps.size( ) ) ); } + G4int addDataDirectory( std::string const &a_dataDirectory ); + G4int removeDataDirectory( std::string const &a_dataDirectory ); + std::string const getDataDirectoryAtIndex( G4int a_index ) const ; + std::vector *getDataDirectories( ) const ; - char *dataFilename( const std::string &lib_name, G4int iZ, G4int iA, G4int iM = 0 ); - char *dataFilename( const std::string &lib_name, const std::string &targetName ); + bool isThisDataAvailable( std::string const &a_lib_name, G4int a_Z, G4int a_A, G4int a_M = 0 ) const ; + bool isThisDataAvailable( std::string const &a_lib_name, std::string const &a_targetName ) const ; - std::vector *getNamesOfAvailableLibraries( G4int iZ, G4int iA, G4int iM = 0 ); - std::vector *getNamesOfAvailableLibraries( const std::string &targetName ); + std::string dataFilename( std::string const &lib_name, G4int a_Z, G4int a_A, G4int a_M = 0 ) const ; + std::string dataFilename( std::string const &lib_name, std::string const &a_targetName ) const ; - std::vector *getNamesOfAvailableTargets( void ); + std::vector *getNamesOfAvailableLibraries( G4int a_Z, G4int a_A, G4int a_M = 0 ) const ; + std::vector *getNamesOfAvailableLibraries( std::string const &a_targetName ) const ; - G4GIDI_target *readTarget( const std::string &lib_name, G4int iZ, G4int iA, G4int iM = 0, G4bool bind = true ); - G4GIDI_target *readTarget( const std::string &lib_name, const std::string &targetName, G4bool bind = true ); + std::vector *getNamesOfAvailableTargets( ) const ; - G4GIDI_target *getAlreadyReadTarget( G4int iZ, G4int iA, G4int iM = 0 ); - G4GIDI_target *getAlreadyReadTarget( const std::string &targetName ); + G4GIDI_target *readTarget( std::string const &lib_name, G4int a_Z, G4int a_A, G4int a_M = 0, bool a_bind = true ); + G4GIDI_target *readTarget( std::string const &lib_name, std::string const &a_targetName, bool a_bind = true ); - G4int freeTarget( G4int iZ, G4int iA, G4int iM = 0 ); - G4int freeTarget( const std::string &targetSymbol ); - G4int freeTarget( G4GIDI_target *target ); + G4GIDI_target *getAlreadyReadTarget( G4int a_Z, G4int a_A, G4int a_M = 0 ); + G4GIDI_target *getAlreadyReadTarget( std::string const &a_targetName ); - std::vector *getListOfReadTargetsNames( void ); + G4int freeTarget( G4int a_Z, G4int a_A, G4int a_M = 0 ); + G4int freeTarget( std::string const &a_targetSymbol ); + G4int freeTarget( G4GIDI_target *a_target ); + + std::vector *getListOfReadTargetsNames( ); }; -#endif // End of G4GIDI_h_included +std::string G4GIDI_version( ); +int G4GIDI_versionMajor( ); +int G4GIDI_versionMinor( ); +int G4GIDI_versionPatchLevel( ); +std::string G4GIDI_GitHash( ); +void G4GIDI_initialize( std::string const &a_dataPath ); +std::string G4GIDI_Misc_Z_toSymbol( int a_Z ); +std::string G4GIDI_Misc_Z_A_m_ToName( int a_Z, int a_A, int a_M ); + +#endif // End of G4GIDI_hh_included diff --git a/source/processes/hadronic/models/lend/include/G4GIDI_Misc.hh b/source/processes/hadronic/models/lend/include/G4GIDI_Misc.hh deleted file mode 100644 index 3bbb6f9d17..0000000000 --- a/source/processes/hadronic/models/lend/include/G4GIDI_Misc.hh +++ /dev/null @@ -1,39 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -/* -# <> -# <> -*/ -#ifndef G4GIDI_Misc_h_included -#define G4GIDI_Misc_h_included 1 - -#include - -char *G4GIDI_Misc_Z_A_m_ToName( int iZ, int iA, int im = 0 ); -char *G4GIDI_Misc_channelCompound( char *particle1, char *particle2 ); -int getNamesOfAvailableTargets_walker( GIDI::MCGIDI_mapEntry *entry, int level, void *userData ); - -#endif // End of G4GIDI_Misc_h_included diff --git a/source/processes/hadronic/models/lend/include/G4GIDI_target.hh b/source/processes/hadronic/models/lend/include/G4GIDI_target.hh deleted file mode 100644 index c647eb5149..0000000000 --- a/source/processes/hadronic/models/lend/include/G4GIDI_target.hh +++ /dev/null @@ -1,115 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -/* -# <> -# <> -*/ -#ifndef G4GIDI_target_h_included -#define G4GIDI_target_h_included 1 - -#include -#include - -//using namespace std; - -#include - -#include - -typedef struct crossSectionData_s crossSectionData; -typedef struct G4GIDI_Product_s G4GIDI_Product; - -struct crossSectionData_s { - int start, end; - std::vector crossSection; -}; - -#define channelID std::string - -struct G4GIDI_Product_s { - int A, Z, m; - double kineticEnergy, px, py, pz; - double birthTimeSec; -}; - -class G4GIDI_target { - - public: - void init( const char *fileName ); - std::string equalProbableBinSampleMethod; - int nElasticIndices, nCaptureIndices, nFissionIndices, nOthersIndices; - int *elasticIndices, *captureIndices, *fissionIndices, *othersIndices; - - public: - GIDI::statusMessageReporting smr; - int projectilesPOPID; - std::string name; - std::string sourceFilename; - double mass; - GIDI::MCGIDI_target *target; - - G4GIDI_target( const char *fileName ); - G4GIDI_target( std::string const &fileName ); - ~G4GIDI_target( ); - - std::string *getName( void ); - std::string *getFilename( void ); - int getZ( void ); - int getA( void ); - int getM( void ); - double getMass( void ); - int getTemperatures( double *temperatures ); - int readTemperature( int index ); - std::string getEqualProbableBinSampleMethod( void ); - int setEqualProbableBinSampleMethod( std::string method ); - - int getNumberOfChannels( void ); - int getNumberOfProductionChannels( void ); - channelID getChannelsID( int channelIndex ); - std::vector *getChannelIDs( void ); - std::vector *getProductionChannelIDs( void ); - - std::vector *getEnergyGridAtTIndex( int index ); - - double getTotalCrossSectionAtE( double e_in, double temperature ); - double getElasticCrossSectionAtE( double e_in, double temperature ); - double getCaptureCrossSectionAtE( double e_in, double temperature ); - double getFissionCrossSectionAtE( double e_in, double temperature ); - double getOthersCrossSectionAtE( double e_in, double temperature ); - double sumChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature ); - int sampleChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature, double (*rng)( void * ), void *rngState ); - - double getElasticFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ); - std::vector *getCaptureFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ); - std::vector *getFissionFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ); - std::vector *getOthersFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ); - std::vector *getFinalState( int nIndices, int *indices, double e_in, double temperature, double (*rng)( void * ), void *rngState ); - - double getReactionsThreshold( int index ); - double getReactionsDomain( int index, double *EMin, double *EMax ); -}; - -#endif // End of G4GIDI_target_h_included diff --git a/source/processes/hadronic/models/lend/include/G4LENDCombinedModel.hh b/source/processes/hadronic/models/lend/include/G4LENDCombinedModel.hh index 2e1655e6c8..dd6ff79455 100644 --- a/source/processes/hadronic/models/lend/include/G4LENDCombinedModel.hh +++ b/source/processes/hadronic/models/lend/include/G4LENDCombinedModel.hh @@ -35,8 +35,9 @@ // Derived calculational constants // GIDI is developped at Lawrence Livermore National Laboratory // Class Description - End - -// 170912 First implementation done by T. Koi (SLAC/EPP) +// +// 2012-09-17 T. Koi (SLAC/EPP): First implementation +// 2024-07-17 D.M.Wright (LLNL): Added GetFatalEnergyCheckLevels() #include "G4LENDModel.hh" @@ -59,7 +60,10 @@ class G4LENDCombinedModel : public G4LENDModel G4bool HasData( const G4DynamicParticle* , G4int iZ , G4int iA , G4int iM, const G4Isotope* , const G4Element* , const G4Material* ); - + + G4LENDModel* channel_selected; // used in GetFatalEnergyCheckLevels() + virtual const std::pair GetFatalEnergyCheckLevels() const; + private: G4LENDCombinedCrossSection* crossSection; G4LENDElastic* elastic; diff --git a/source/processes/hadronic/models/lend/include/GIDI.hpp b/source/processes/hadronic/models/lend/include/GIDI.hpp new file mode 100644 index 0000000000..cb4ab7a675 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/GIDI.hpp @@ -0,0 +1,5484 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef GIDI_hpp_included +#define GIDI_hpp_included 1 + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include "GIDI_data.hpp" + +namespace GIDI { + +class SetupInfo; +class Form; +class Suite; +class FissionFragmentData; +class OutputChannel; +class Protare; +class ProtareSingle; +class ParticleInfo; +class MultiGroupCalulationInformation; +namespace GRIN { +class GRIN_continuumGammas; +} + +typedef std::set ExcludeReactionsSet; + +namespace Functions { + class XYs1d; + class Xs_pdf_cdf1d; + class Branching1d; + class Function2dForm; +} // End namespace Functions. + +namespace Map { + class ProtareBase; + class TNSL; + class Map; +} // End of namespace Map. + +typedef bool (*MapWalkCallBack)( Map::ProtareBase const *a_protareEntry, std::string const &a_library, void *a_userData, int a_level ); + +namespace Construction { + class Settings; +} // End of namespace Construction. + +namespace Documentation_1_10 { + class Suite; +} // End of namespace Documentation_1_10. + +namespace ExternalFiles { + class Suite; +} // End of namespace ExternalFiles + +namespace Table { + class Column; +} // End of namespace Table + +namespace Styles { + class Suite; + class MultiGroup; + class HeatedMultiGroup; +} // End of namespace Styles. + +typedef Form *(*parseSuite)( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); + +enum class GNDS_FileType { uninitialized, unknown, pops, protare, covarianceSuite, map }; + +class GNDS_FileTypeInfo { + + private: + GNDS_FileType m_GNDS_fileType; + std::string m_projectileID; + std::string m_targetID; + std::string m_evaluation; + std::string m_interaction; + + public: + GNDS_FileTypeInfo( ); + GNDS_FileTypeInfo( GNDS_FileType a_GNDS_fileType, std::string a_projectileID = "", std::string a_targetID = "", std::string a_evaluation = "", + std::string a_interaction = "" ); + GNDS_FileTypeInfo( GNDS_FileTypeInfo const &a_GNDS_fileTypeInfo ); + GNDS_FileTypeInfo &operator=( GNDS_FileTypeInfo const &a_rhs ); + + GNDS_FileType GNDS_fileType( ) const { return( m_GNDS_fileType ); } + void setGNDS_fileType( GNDS_FileType a_GNDS_fileType ) { m_GNDS_fileType = a_GNDS_fileType; } + std::string const &projectileID( ) const { return( m_projectileID ); } + std::string const &targetID( ) const { return( m_targetID ); } + std::string const &evaluation( ) const { return( m_evaluation ); } + std::string const &interaction( ) const { return( m_interaction ); } +}; + +enum class ProtareType { single, composite, TNSL }; + +enum class FormType { generic, lazyParsingHelperForm, group, groups, transportable, flux, fluxes, externalFile, style, + reaction, product, delayedNeutron, fissionFragmentData, rate, + physicalQuantity, axisDomain, axis, grid, axes, + flattenedArrayData, array3d, array, + // 1d functions. + constant1d, XYs1d, Ys1d, polynomial1d, Legendre1d, gridded1d, reference1d, xs_pdf_cdf1d, regions1d, + resonancesWithBackground1d, resonanceBackground1d, resonanceBackgroundRegion1d, URR_probabilityTables1d, + fissionEnergyRelease1d, branching1d, branching1dPids, thermalNeutronScatteringLaw1d, unspecified1d, + // 2d functions. + XYs2d, recoil2d, isotropic2d, discreteGamma2d, primaryGamma2d, regions2d, gridded2d, + generalEvaporation2d, simpleMaxwellianFission2d, evaporation2d, Watt2d, MadlandNix2d, + weighted_function2d, weightedFunctionals2d, NBodyPhaseSpace2d, + // 3d functions. + XYs3d, regions3d, gridded3d, + // distributions. + angularTwoBody, KalbachMann, uncorrelated, unspecified, reference3d, multiGroup3d, + energyAngular, energyAngularMC, angularEnergy, angularEnergyMC, LLNL_angularEnergy, + coherentPhotonScattering, incoherentPhotonScattering, incoherentBoundToFreePhotonScattering, thermalNeutronScatteringLaw, branching3d, + coherentElastic, incoherentElastic, incoherentInelastic, CoulombPlusNuclearElastic3d, LLNLLegendre, + // Sums stuff. + crossSectionSum, multiplicitySum, summands, + // ACE style URR stuff currently in the applicationData node. + ACE_URR_probabilityTable, ACE_URR_incidentEnergy, + // Table stuff. + table, columnHeaders, column, + // Non-GNDS compliant GRIN forms. + GRIN_inelasticIncidentEnergy, GRIN_captureLevelProbability }; + +enum class Frame { lab, centerOfMass }; +enum class TransportCorrectionType { None, Pendlebury, LLNL, Ferguson }; +enum class FileType { XML, HDF }; + +#define GIDI_emptyFileNameChars "" + +#define GIDI_mapFormatVersion_0_1Chars "0.1" +#define GIDI_mapFormatVersion_0_2Chars "0.2" + +#define GIDI_LLNL_Chars "LLNL" +#define GIDI_LLNL_multiGroupReactions_Chars "LLNL::multiGroupReactions" +#define GIDI_LLNL_multiGroupDelayedNeutrons_Chars "LLNL::multiGroupDelayedNeutrons" +#define GIDI_LLNL_URR_probability_tables_Chars "LLNL::URR_probability_tables" +#define GIDI_LLNL_pointwiseAverageProductEnergies "LLNL::pointwiseAverageProductEnergies" +#define GIDI_LLNL_GRIN_continuumGammas "LLNL::GRIN_continuumGammas" + +#define GIDI_mapChars "map" +#define GIDI_importChars "import" +#define GIDI_protareChars "protare" +#define GIDI_TNSLChars "TNSL" + +#define GIDI_formatChars "format" + +#define GIDI_topLevelChars "reactionSuite" +#define GIDI_covarianceSuiteChars "covarianceSuite" + +#define GIDI_externalFilesChars "externalFiles" +#define GIDI_externalFileChars "externalFile" + +#define GIDI_documentationChars "documentation" +#define GIDI_documentations_1_10_Chars "documentations" +#define GIDI_stylesChars "styles" +#define GIDI_PoPsChars "PoPs" +#define GIDI_reactionsChars "reactions" +#define GIDI_reactionChars "reaction" +#define GIDI_orphanProductsChars "orphanProducts" +#define GIDI_orphanProductChars "orphanProduct" +#define GIDI_incompleteReactionsChars "incompleteReactions" +#define GIDI_fissionComponentsChars "fissionComponents" +#define GIDI_fissionComponentChars "fissionComponent" +#define GIDI_ACE_URR_probabilityTablesChars "probabilityTables" +#define GIDI_ACE_URR_probabilityTableChars "probabilityTable" +#define GIDI_LLNL_photoAtomicIncoherentDoppler_Chars "LLNL::photoAtomicIncoherentDoppler" + +#define GIDI_tableChars "table" +#define GIDI_rowsChars "rows" +#define GIDI_columnsChars "columns" +#define GIDI_columnHeadersChars "columnHeaders" +#define GIDI_columnChars "column" +#define GIDI_nameChars "name" +#define GIDI_typesChars "types" +#define GIDI_dataChars "data" +#define GIDI_sepChars "sep" + +#define GIDI_applicationDataChars "applicationData" +#define GIDI_institutionChars "institution" +#define GIDI_nuclearPlusCoulombInterferenceChars "nuclearPlusCoulombInterference" + +#define GIDI_sumsChars "sums" +#define GIDI_sumsCrossSectionsChars "crossSections" +#define GIDI_sumsMultiplicitiesChars "multiplicities" +#define GIDI_sumsAddChars "add" +#define GIDI_sumsSummandsChars "summands" +#define GIDI_crossSectionSumsChars "crossSectionSums" +#define GIDI_crossSectionSumChars "crossSectionSum" +#define GIDI_multiplicitySumsChars "multiplicitySums" +#define GIDI_multiplicitySumChars "multiplicitySum" + +#define GIDI_doubleDifferentialCrossSectionChars "doubleDifferentialCrossSection" +#define GIDI_crossSectionChars "crossSection" +#define GIDI_availableEnergyChars "availableEnergy" +#define GIDI_availableMomentumChars "availableMomentum" + +#define GIDI_QChars "Q" +#define GIDI_productsChars "products" +#define GIDI_productChars "product" + +#define GIDI_multiplicityChars "multiplicity" +#define GIDI_distributionChars "distribution" +#define GIDI_averageEnergyChars "averageProductEnergy" +#define GIDI_averageMomentumChars "averageProductMomentum" +#define GIDI_outputChannelChars "outputChannel" + +#define GIDI_fissionFragmentDataChars "fissionFragmentData" +#define GIDI_delayedNeutronsChars "delayedNeutrons" +#define GIDI_delayedNeutronChars "delayedNeutron" +#define GIDI_fissionEnergyReleasesChars "fissionEnergyReleases" +#define GIDI_fissionEnergyReleaseChars "fissionEnergyRelease" +#define GIDI_rateChars "rate" + +#define GIDI_groupsChars "groups" +#define GIDI_groupChars "group" +#define GIDI_fluxesChars "fluxes" + +#define GIDI_evaluatedStyleChars "evaluated" +#define GIDI_crossSectionReconstructedStyleChars "crossSectionReconstructed" +#define GIDI_angularDistributionReconstructedStyleChars "angularDistributionReconstructed" +#define GIDI_CoulombPlusNuclearElasticMuCutoffStyleChars "CoulombPlusNuclearElasticMuCutoff" +#define GIDI_averageProductDataStyleChars "averageProductData" +#define GIDI_MonteCarlo_cdfStyleChars "MonteCarlo_cdf" +#define GIDI_multiGroupStyleChars "multiGroup" +#define GIDI_transportablesChars "transportables" +#define GIDI_transportableChars "transportable" +#define GIDI_realizationChars "realization" +#define GIDI_heatedStyleChars "heated" +#define GIDI_griddedCrossSectionStyleChars "griddedCrossSection" +#define GIDI_URR_probabilityTablesStyleChars "URR_probabilityTables" +#define GIDI_heatedMultiGroupStyleChars "heatedMultiGroup" +#define GIDI_SnElasticUpScatterStyleChars "SnElasticUpScatter" +#define GIDI_projectileEnergyDomainChars "projectileEnergyDomain" + +// array monikers and allowed values. +#define GIDI_arrayChars "array" +#define GIDI_noneChars "none" +#define GIDI_valuesChars "values" +#define GIDI_shapeChars "shape" + +#define GIDI_compressionChars "compression" +#define GIDI_diagonalChars "diagonal" +#define GIDI_startingIndices "startingIndices" +#define GIDI_flattenedChars "flattened" +#define GIDI_startsChars "starts" +#define GIDI_lengthsChars "lengths" +#define GIDI_embeddedChars "embedded" + +#define GIDI_symmetryChars "symmetry" +#define GIDI_lowerChars "lower" +#define GIDI_upperChars "upper" + +#define GIDI_permutationChars "permutation" +#define GIDI_plusOneChars "+1" +#define GIDI_minusOneChars "-1" + +#define GIDI_storageOrderChars "storageOrder" +#define GIDI_rowMajorChars "rowMajor" +#define GIDI_columnMajorChars "columnMajor" + +#define GIDI_offsetChars "offset" +#define GIDI_startIndexChars "startIndex" + +// 1d Function monikers. +#define GIDI_constant1dChars "constant1d" +#define GIDI_XYs1dChars "XYs1d" +#define GIDI_Ys1dChars "Ys1d" +#define GIDI_polynomial1dChars "polynomial1d" +#define GIDI_LegendreChars "Legendre" +#define GIDI_regions1dChars "regions1d" +#define GIDI_gridded1dChars "gridded1d" +#define GIDI_referenceChars "reference" +#define GIDI_xs_pdf_cdf1dChars "xs_pdf_cdf1d" +#define GIDI_branching1dChars "branching1d" +#define GIDI_TNSL1dChars "thermalNeutronScatteringLaw1d" + +// 2d Function monikers. +#define GIDI_XYs2dChars "XYs2d" +#define GIDI_recoilChars "recoil" +#define GIDI_isotropic2dChars "isotropic2d" +#define GIDI_discreteGammaChars "discreteGamma" +#define GIDI_primaryGammaChars "primaryGamma" +#define GIDI_generalEvaporationChars "generalEvaporation" +#define GIDI_simpleMaxwellianFissionChars "simpleMaxwellianFission" +#define GIDI_evaporationChars "evaporation" +#define GIDI_WattChars "Watt" +#define GIDI_MadlandNixChars "MadlandNix" +#define GIDI_weightedFunctionalsChars "weightedFunctionals" +#define GIDI_NBodyPhaseSpaceChars "NBodyPhaseSpace" +#define GIDI_regions2dChars "regions2d" +#define GIDI_gridded2dChars "gridded2d" + +// 3d Function monikers. +#define GIDI_XYs3dChars "XYs3d" +#define GIDI_gridded3dChars "gridded3d" + +// Double differentials +#define GIDI_optionsChars "options" +#define GIDI_S_alpha_betaChars "S_alpha_beta" +#define GIDI_S_tableChars "S_table" +#define GIDI_formFactorChars "formFactor" +#define GIDI_realAnomalousFactorChars "realAnomalousFactor" +#define GIDI_imaginaryAnomalousFactorChars "imaginaryAnomalousFactor" +#define GIDI_scatteringFactorChars "scatteringFactor" +#define GIDI_ComptonProfileChars "ComptonProfile" +#define GIDI_boundAtomCrossSectionChars "boundAtomCrossSection" +#define GIDI_characteristicCrossSectionChars "characteristicCrossSection" +#define GIDI_DebyeWallerIntegralChars "DebyeWallerIntegral" +#define GIDI_DebyeWallerChars "DebyeWaller" +#define GIDI_massChars "mass" +#define GIDI_freeAtomCrossSectionChars "freeAtomCrossSection" +#define GIDI_e_criticalChars "e_critical" +#define GIDI_e_maxChars "e_max" +#define GIDI_T_effectiveChars "T_effective" +#define GIDI_UChars "U" +#define GIDI_thetaChars "theta" +#define GIDI_gChars "g" + +// Distribution forms. +#define GIDI_multiGroup3dChars "multiGroup3d" +#define GIDI_angularTwoBodyChars "angularTwoBody" +#define GIDI_uncorrelatedChars "uncorrelated" +#define GIDI_angularChars "angular" +#define GIDI_energyChars "energy" +#define GIDI_KalbachMannChars "KalbachMann" +#define GIDI_energyAngularChars "energyAngular" +#define GIDI_energyAngularMCChars "energyAngularMC" +#define GIDI_angularEnergyChars "angularEnergy" +#define GIDI_angularEnergyMCChars "angularEnergyMC" +#define GIDI_LLNLAngularEnergyChars "LLNLAngularEnergy" +#define GIDI_LLNLAngularOfAngularEnergyChars "LLNLAngularOfAngularEnergy" +#define GIDI_LLNLAngularEnergyOfAngularEnergyChars "LLNLAngularEnergyOfAngularEnergy" +#define GIDI_coherentPhotonScatteringChars "coherentPhotonScattering" +#define GIDI_incoherentPhotonScatteringChars "incoherentPhotonScattering" +#define GIDI_incoherentBoundToFreePhotonScatteringChars "incoherentBoundToFreePhotonScattering" +#define GIDI_TNSL_coherentElasticChars "thermalNeutronScatteringLaw_coherentElastic" +#define GIDI_TNSL_incoherentElasticChars "thermalNeutronScatteringLaw_incoherentElastic" +#define GIDI_TNSL_incoherentInelasticChars "thermalNeutronScatteringLaw_incoherentInelastic" +#define GIDI_thermalNeutronScatteringLawChars "thermalNeutronScatteringLaw" +#define GIDI_branching3dChars "branching3d" +#define GIDI_unspecifiedChars "unspecified" + +#define GIDI_scatteringAtomsChars "scatteringAtoms" +#define GIDI_scatteringAtomChars "scatteringAtom" + +#define GIDI_resonancesWithBackgroundChars "resonancesWithBackground" +#define GIDI_resonancesChars "resonances" +#define GIDI_resonanceBackground1dChars "background" +#define GIDI_resolvedRegionChars "resolvedRegion" +#define GIDI_unresolvedRegionChars "unresolvedRegion" +#define GIDI_fastRegionChars "fastRegion" + +#define GIDI_CoulombPlusNuclearElasticChars "CoulombPlusNuclearElastic" +#define GIDI_RutherfordScatteringChars "RutherfordScattering" +#define GIDI_nuclearPlusInterferenceChars "nuclearPlusInterference" + +#define GIDI_URR_probabilityTables1dChars "URR_probabilityTables1d" +#define GIDI_LLNLLegendreChars "LLNLLegendre" + +#define GIDI_axesChars "axes" +#define GIDI_axisChars "axis" +#define GIDI_gridChars "grid" +#define GIDI_fluxNodeChars "flux" + +#define GIDI_function1dsChars "function1ds" +#define GIDI_function2dsChars "function2ds" +#define GIDI_uncertaintyChars "uncertainty" +#define GIDI_fChars "f" +#define GIDI_rChars "r" +#define GIDI_aChars "a" +#define GIDI_bChars "b" +#define GIDI_EFL_Chars "EFL" +#define GIDI_EFH_Chars "EFH" +#define GIDI_T_M_Chars "T_M" +#define GIDI_weightedChars "weighted" + +#define GIDI_promptProductKEChars "promptProductKE" +#define GIDI_promptNeutronKEChars "promptNeutronKE" +#define GIDI_delayedNeutronKEChars "delayedNeutronKE" +#define GIDI_promptGammaEnergyChars "promptGammaEnergy" +#define GIDI_delayedGammaEnergyChars "delayedGammaEnergy" +#define GIDI_delayedBetaEnergyChars "delayedBetaEnergy" +#define GIDI_neutrinoEnergyChars "neutrinoEnergy" +#define GIDI_nonNeutrinoEnergyChars "nonNeutrinoEnergy" +#define GIDI_totalEnergyChars "totalEnergy" + +#define GIDI_trueChars "true" +#define GIDI_fissionGenreChars "fissionGenre" +#define GIDI_libraryChars "library" +#define GIDI_startChars "start" +#define GIDI_projectileChars "projectile" +#define GIDI_targetChars "target" +#define GIDI_evaluationChars "evaluation" +#define GIDI_interactionChars "interaction" +#define GIDI_standardTargetChars "standardTarget" +#define GIDI_standardEvaluationChars "standardEvaluation" +#define GIDI_projectileFrameChars "projectileFrame" +#define GIDI_ENDF_MT_Chars "ENDF_MT" +#define GIDI_dateChars "date" +#define GIDI_derivedFromChars "derivedFrom" +#define GIDI_versionChars "version" +#define GIDI_temperatureChars "temperature" +#define GIDI_muCutoffChars "muCutoff" +#define GIDI_lMaxChars "lMax" +#define GIDI_parametersChars "parameters" +#define GIDI_upperCalculatedGroupChars "upperCalculatedGroup" +#define GIDI_calculatedAtThermalChars "calculatedAtThermal" +#define GIDI_asymmetricChars "asymmetric" +#define GIDI_valueTypeChars "valueType" + +#define GIDI_productFrameChars "productFrame" +#define GIDI_interpolationChars "interpolation" +#define GIDI_interpolationQualifierChars "interpolationQualifier" +#define GIDI_outerDomainValueChars "outerDomainValue" +#define GIDI_indexChars "index" +#define GIDI_labelChars "label" +#define GIDI_unitChars "unit" +#define GIDI_hrefChars "href" +#define GIDI_initialChars "initial" +#define GIDI_finalChars "final" +#define GIDI_minChars "min" +#define GIDI_maxChars "max" +#define GIDI_valueChars "value" +#define GIDI_domainMinChars "domainMin" +#define GIDI_domainMaxChars "domainMax" +#define GIDI_finalStateChars "finalState" +#define GIDI_numberOfProductsChars "numberOfProducts" +#define GIDI_pathChars "path" +#define GIDI_styleChars "style" +#define GIDI_genreChars "genre" +#define GIDI_processChars "process" +#define GIDI_pidChars "pid" +#define GIDI_countChars "count" + +#define GIDI_inverseSpeedChars "inverseSpeed" + +#define GIDI_centerOfMassChars "centerOfMass" +#define GIDI_labChars "lab" +#define GIDI_twoBodyChars "twoBody" +#define GIDI_NBodyChars "NBody" + +// Allowed values for the 'conserve' attribute +#define GIDI_conserveNumberChars "number" +#define GIDI_conserveEnergyOutChars "energyOut" + +// GRIN. +#define GIDI_GRIN_continuumGammasChars "GRIN_continuumGammas" +#define GIDI_captureNeutronSeparationEnergyChars "captureNeutronSeparationEnergy" +#define GIDI_maximumIncidentEnergyChars "maximumIncidentEnergy" +#define GIDI_inelasticIncidentEnergiesChars "inelasticIncidentEnergies" +#define GIDI_inelasticIncidentEnergyChars "inelasticIncidentEnergy" +#define GIDI_captureLevelProbabilitiesChars "captureLevelProbabilities" +#define GIDI_captureLevelProbabilityChars "captureLevelProbability" +#define GIDI_probabilityChars "probability" +#define GIDI_spinUnitChars "spinUnit" +#define GIDI_capturePrimaryToContinuaChars "capturePrimaryToContinua" + +typedef std::pair stringAndDoublePair; +typedef std::vector stringAndDoublePairs; +typedef std::map ParticleSubstitution; + +#ifdef _WIN32 +#define GIDI_FILE_SEPARATOR "\\" +#else +#define GIDI_FILE_SEPARATOR "/" +#endif + +std::vector vectorOfStrings( std::string const &a_string ); + +/* +============================================================ +========================= Exception ======================== +============================================================ +*/ +class Exception : public std::runtime_error { + + public : + explicit Exception( std::string const &a_message ); +}; + +namespace Construction { + +/* ********************************************************************************************************* + * This enum allows a user to limit the data read in by various constructors. Limiting the data speeds up the reading + * and parsing, and uses less memory. + ***********************************************************************************************************/ + +enum class ParseMode : int { all, /**< Read and parse all data. */ + multiGroupOnly, /**< Only read and parse data needed for multi-group transport. */ + MonteCarloContinuousEnergy, /**< Only read and parse data needed for continuous energy Monte Carlo. */ + excludeProductMatrices, /**< Read and parse all data but multi-group product matrices. */ + readOnly, /**< Only read and parse all the data but do no calculations. Useful for reading an incomplete GNDS file. */ + outline, /**< Does parse any component data (e.g., cross section, multiplicity, distribution). */ + noParsing /**< Only timing development, must be used with caution. The mode allows one to test the io time without any parsing of the **HAPI::File**. */ }; + +enum class PhotoMode : int { nuclearAndAtomic, /**< Instructs method Map::protare to create a Protare with both photo-nuclear and photo-atomic data when the projectile is photon. */ + nuclearOnly, /**< Instructs method Map::protare to create a Protare with only photo-nuclear data when the projectile is photon. */ + atomicOnly /**< Instructs method Map::protare to create a Protare with only photo-atomic data when the projectile is photon. */ }; + +/* ********************************************************************************************************* + * This enum specifies what fission redisual products will be added to the list of products produced in a fission reaction. + ***********************************************************************************************************/ + +enum class FissionResiduals : int { + none, /**< No additional product is produced to the fission reaction. */ + ENDL99120, /**< A LLNL ENDL 99120 fission product will be produced with multiplicity 2. */ + ENDL99125 /**< A LLNL ENDL 99125 fission product will be produced with multiplicity 2. */ }; + +/* +============================================================ +========================= Settings ========================= +============================================================ +*/ +class Settings { + + private: + ParseMode m_parseMode; /**< Parameter used by various constructors to limit data read into. */ + PhotoMode m_photoMode; /**< Determines whether photo-nuclear and/or photo-atomic are included a Protare when the projectile is photon. */ + int m_useSystem_strtod; /**< Flag passed to the function nfu_stringToListOfDoubles of the numericalFunctions library. */ + bool m_lazyParsing; /**< It **true**, **Component** suites are lazy parsed. */ + bool m_decayPositronium; /**< If **true**, whenever a positron is created, it is assumed to immediately form positronium and decay into 2 511 KeV photons. Ergo, the photons are produced in the reaction and not a positron. */ + bool m_usePhotoAtomicIncoherentDoppler; + FissionResiduals m_fissionResiduals; /**< This member specifies what fission redisual products will be added to the list of products produced in a fission reaction. */ + bool m_GRIN_continuumGammas; /**< If true and institution/LLNL::GRIN_continuumGammas are loaded and used in MCGIDI. */ + + public: + Settings( ParseMode a_parseMode, PhotoMode a_photoMode ); + Settings( Settings const &a_settings ); + + ParseMode parseMode( ) const { return( m_parseMode ); } /**< Returns the value of the *m_parseMode* member. */ + + PhotoMode photoMode( ) const { return( m_photoMode ); } /**< Returns the value of the *m_photoMode* member. */ + void setPhotoMode( PhotoMode a_photoMode ) { m_photoMode = a_photoMode; } + /**< Set the *m_photoMode* member to *a_photoMode*. */ + + bool lazyParsing( ) const { return( m_lazyParsing ); } /**< Returns the value of the *m_lazyParsing* member. */ + void setLazyParsing( bool a_lazyParsing ) { m_lazyParsing = a_lazyParsing; } + /**< Set the *m_lazyParsing* member to *a_lazyParsing*. */ + + bool decayPositronium( ) const { return( m_decayPositronium ); } /**< Returns the value of the *m_decayPositronium* member. */ + void setDecayPositronium( bool a_decayPositronium ) { m_decayPositronium = a_decayPositronium; } + /**< Set the *m_decayPositronium* member to *a_decayPositronium*. */ + + FissionResiduals fissionResiduals( ) const { return( m_fissionResiduals ); } /**< Returns the value of the *m_fissionResiduals* member. */ + void setFissionResiduals( FissionResiduals a_fissionResiduals ) { m_fissionResiduals = a_fissionResiduals ; } + /**< Set the *m_fissionResiduals* member to *a_fissionResiduals*. */ + + bool GRIN_continuumGammas( void ) const { return( m_GRIN_continuumGammas ); } /**< Returns the value of the *m_GRIN_continuumGammas* member. */ + void setGRIN_continuumGammas( bool a_GRIN_continuumGammas ) { m_GRIN_continuumGammas = a_GRIN_continuumGammas; } + /**< Set the *m_GRIN_continuumGammas* member to *a_GRIN_continuumGammas*. */ + + int useSystem_strtod( ) const { return( m_useSystem_strtod ); } /**< Returns the value of the *m_useSystem_strtod* member. */ + void setUseSystem_strtod( bool a_useSystem_strtod ) { m_useSystem_strtod = a_useSystem_strtod ? 1 : 0; } + /**< Set the *m_useSystem_strtod* member to *a_useSystem_strtod*. */ + + bool usePhotoAtomicIncoherentDoppler( ) const { return( m_usePhotoAtomicIncoherentDoppler ); } + void setUsePhotoAtomicIncoherentDoppler( bool a_usePhotoAtomicIncoherentDoppler ) { m_usePhotoAtomicIncoherentDoppler = a_usePhotoAtomicIncoherentDoppler; } +}; + +} // End namespace Construction. + +/* +============================================================ +========================= SetupInfo ======================== +============================================================ +*/ +class SetupInfo { + + public: + ProtareSingle *m_protare; + ParticleSubstitution *m_particleSubstitution; + LUPI::FormatVersion m_formatVersion; + Styles::MultiGroup *m_multiGroup; + Styles::HeatedMultiGroup *m_heatedMultiGroup; + bool m_isENDL_C_9; + int m_outputChannelLevel; + std::string m_initialState; + + SetupInfo( ProtareSingle *a_protare ) : + m_protare( a_protare ), + m_particleSubstitution( nullptr ), + m_formatVersion( ), + m_multiGroup( nullptr ), + m_heatedMultiGroup( nullptr ), + m_isENDL_C_9( false ), + m_outputChannelLevel( 0 ), + m_initialState( "" ) { + + } + + SetupInfo( SetupInfo const &a_setupInfo ) : + m_protare( a_setupInfo.m_protare ), + m_particleSubstitution( a_setupInfo.m_particleSubstitution ), + m_formatVersion( a_setupInfo.m_formatVersion ), + m_multiGroup( a_setupInfo.m_multiGroup ), + m_heatedMultiGroup( a_setupInfo.m_heatedMultiGroup ), + m_isENDL_C_9( a_setupInfo.m_isENDL_C_9 ), + m_outputChannelLevel( a_setupInfo.m_outputChannelLevel ), + m_initialState( a_setupInfo.m_initialState ) { + + } + ~SetupInfo( ) { } +}; + +/* +============================================================ +=========================== Form =========================== +============================================================ +*/ +class Form : public GUPI::Ancestry { + + friend class Table::Column; + + private: + Suite *m_parent; /**< The parent for the form. */ + FormType m_type; /**< The type of the form. */ + std::string m_keyName; /**< The key name used when the **Form** resides in a **Suite**. */ + mutable std::string m_keyValue; /**< The value associated with the key. */ + std::string m_label; /**< The label for the form. */ + + public: + Form( FormType a_type ); + Form( std::string const &a_moniker, FormType a_type, std::string const &a_label ); + Form( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_suite = nullptr ); + Form( Form const &a_form ); + virtual ~Form( ); + Form &operator=( Form const &a_rhs ); + + Suite *parent( ) const { return( m_parent ); } /**< Returns the value of the *m_parent* member. */ + + std::string const &label( ) const { return( m_label ); } /**< Returns the value of the *m_label* member. */ + void setLabel( std::string const &a_label ); + virtual std::string actualMoniker( ) const { return( moniker( ) ); } /**< Returns the value of the moniker. */ + + std::string const &keyName( ) const ; + void setKeyName( std::string const &a_keyName ); + std::string const &keyValue( ) const ; + virtual void setKeyValue( std::string const &a_keyName ) const ; + + FormType type( ) const { return( m_type ); } /**< Returns the value of the *m_type* member. */ + Form const *sibling( std::string a_label ) const ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + std::string xlinkItemKey( ) const { + + if( m_label == "" ) return( "" ); + return( buildXLinkItemKey( GIDI_labelChars, m_label ) ); + } /**< Returns the value of *this*'s key. */ +}; + +/* +============================================================ +================== LazyParsingHelperForm =================== +============================================================ +*/ +class LazyParsingHelperForm : public Form { + + private: + Construction::Settings m_construction; + HAPI::Node const m_node; + SetupInfo m_setupInfo; + PoPI::Database const *m_pops; + PoPI::Database const *m_internalPoPs; + std::string m_name; + Styles::Suite const *m_styles; + parseSuite m_parser; + + public: + LazyParsingHelperForm( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + Styles::Suite const *a_styles, parseSuite a_parser ); + ~LazyParsingHelperForm( ); + + std::string actualMoniker( ) const { return( m_name ); } /**< Returns the value of the *m_name* member which is the moniker of the actual form. */ + + Form *parse( ); +}; + +/* +============================================================ +===================== PhysicalQuantity ===================== +============================================================ +*/ +class PhysicalQuantity : public Form { + + private: + double m_value; /**< The value for the physical quantity. */ + std::string m_unit; /**< The unit for the physical quantity. */ + + public: + PhysicalQuantity( HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + PhysicalQuantity( double a_value, std::string a_unit ); + PhysicalQuantity( PhysicalQuantity const &a_physicalQuantity ) : + Form( FormType::physicalQuantity ), + m_value( a_physicalQuantity.value( ) ), + m_unit( a_physicalQuantity.unit( ) ) { } + ~PhysicalQuantity( ); + PhysicalQuantity &operator=( PhysicalQuantity const &a_rhs ); + + double value( ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + std::string const &unit( ) const { return( m_unit ); } /**< Returns the value of the *m_unit* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + + friend std::ostream &operator<<( std::ostream& a_os, PhysicalQuantity const &a_physicalQuantity ); +}; + +/* +============================================================ +======================= ParticleInfo ======================= +============================================================ +*/ +class ParticleInfo { + + public: + static std::string const IDPortion( std::string const &a_id ); + static std::string const qualifierPortion( std::string const &a_id ); + + private: + std::string m_id; /**< The particle's PoPs id. */ + std::string m_qualifier; /**< The particle's qualifier. For example the "1s1/2" in "Th{1s1/2}". */ + std::string m_pid; /**< The same as *m_id* unless particle is an alias, then the final particle's id. */ + PhysicalQuantity m_mass; /**< The mass of the particle including nuclear excitation energy. */ + PhysicalQuantity m_excitationEnergy; /**< If the particle is a PoPI::Nuclide or PoPI::Nucleus, this is it nuclear excitation energy. Otherwise, it is 0. */ + + public: + ParticleInfo( std::string const &a_id, std::string const &a_pid, double a_mass, double a_excitationEnergy = 0.0 ); + ParticleInfo( std::string const &a_id, PoPI::Database const &a_globalPoPs, PoPI::Database const &a_internalPoPs, bool a_requiredInGlobalPoPs ); + ParticleInfo( ParticleInfo const &a_particleInfo ); + ParticleInfo &operator=( ParticleInfo const &a_rhs ); + + std::string const &ID( ) const { return( m_id ); } /**< Returns a const reference to *m_id* member. */ + std::string const &qualifier( ) const { return( m_qualifier ); } /**< Returns a const reference to *m_qualifier**. */ + std::string const &pid( ) const { return( m_pid ); } /**< Returns a const reference to *m_pid* member. */ + bool isAlias( ) const { return( m_pid != "" ); } /**< Returns true if particle id is an alias and false otherwise. */ + + PhysicalQuantity const &mass( ) const { return( m_mass ); } /**< Returns a const reference to *m_mass* member. */ + PhysicalQuantity const &excitationEnergy( ) const { return( m_excitationEnergy ); } /**< Returns a const reference to *m_excitationEnergy* member. */ + double mass( std::string const &a_unit ) const ; +}; + +/* +============================================================ +======================== AxisDomain ======================== +============================================================ +*/ +class AxisDomain : public Form { + + private: + double m_minimum; /**< The minimum value for the domain. */ + double m_maximum; /**< The maximum value for the domain. */ + std::string m_unit; /**< The unit for the domain. */ + + public: + AxisDomain( HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + AxisDomain( double m_minimum, double m_maximum, std::string const &a_unit ); + ~AxisDomain( ); + + double minimum( ) const { return( m_minimum ); } /**< Returns the value of the *m_minimum* member. */ + double maximum( ) const { return( m_maximum ); } /**< Returns the value of the *m_maximum* member. */ + std::string const &unit( ) const { return( m_unit ); } /**< Returns the value of the *m_unit* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +=========================== Axis =========================== +============================================================ +*/ +class Axis : public Form { + + private: + int m_index; /**< The index for the axis. */ + std::string m_unit; /**< The unit for the axis. */ + std::string m_href; /**< The **GNDS**'s href if instance points to another Axis or Grid instance. */ + + public: + Axis( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type = FormType::axis ); + Axis( int a_index, std::string a_label, std::string a_unit, FormType a_type = FormType::axis ); + Axis( Axis const &a_axis ); + virtual ~Axis( ); + + int index( ) const { return( m_index ); } /**< Returns the value of the *m_index* member. */ + std::string const &unit( ) const { return( m_unit ); } /**< Returns the value of the *m_unit* member. */ + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Grid =========================== +============================================================ +*/ +class Grid : public Axis { + + private: + std::string m_style; /**< The **GNDS grid**'s style. */ + std::string m_keyName; /**< **FIXME**. */ + std::string m_keyValue; /**< **FIXME**. */ + std::string m_valueType; /**< The type of data in m_values. Can be "Integer32". */ + std::string m_interpolation; + nf_Buffer m_values; /**< The **GNDS grid**'s values. */ + + public: + Grid( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ); + Grid( Grid const &a_grid ); + + std::size_t size( ) const { return( m_values.size( ) ); } /**< Returns the number of values in the *m_values* member. */ + inline double &operator[]( std::size_t a_index ) noexcept { return( m_values[a_index] ); } /**< Returns the value at m_values[a_index]. */ + + std::string const &style( ) const { return( m_style ); } /**< Returns the value of the *m_style* member. */ + std::string keyName( ) const { return( m_keyName ); } /**< Returns the value of the *m_keyName* member. */ + std::string keyValue( ) const { return( m_keyValue ); } /**< Returns the value of the *m_keyValue* member. */ + std::string valueType( ) const { return( m_valueType ); } /**< Returns the value of the *m_valueType* member. */ + + std::string const &interpolation( ) const { return( m_interpolation ); } + + nf_Buffer const &values( ) const { return( m_values ); } /**< Returns the value of the *m_values* member. */ + nf_Buffer const &data( ) const { return( m_values ); } /**< Returns the value of the *m_values* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Axes =========================== +============================================================ +*/ +class Axes : public Form { + + private: + std::vector m_axes; /**< Stores the list of Axis nodes. */ + + public: + Axes( ); + Axes( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ); + Axes( Axes const &a_axes ); + ~Axes( ); + Axes &operator=( Axes const &a_rhs ); + + std::size_t size( ) const { return( m_axes.size( ) ); } /**< Returns the number of *Axis* instances in *this*. */ + Axis const *operator[]( std::size_t a_index ) const { return( (m_axes[a_index]) ); } /**< Returns m_axes[a_index]. */ + std::size_t dimension( ) const { return( m_axes.size( ) - 1 ); } /**< Returns the dimension of the instance. */ + + void append( Axis *a_axis ) { m_axes.push_back( a_axis ); } /**< Appends *a_axis* to the* list of *Axis* nodes. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + + static Axes makeAxes( std::vector> const &a_labelsAndUnits ); +}; + +namespace Array { + +/* +============================================================ +========================= FullArray ======================== +============================================================ +*/ + +class FullArray { + + public: + FullArray( std::vector a_shape ); + FullArray( std::vector a_shape, std::vector a_flattenedValues ); + ~FullArray( ) {} + + std::vector m_shape; /**< The shape of the array. */ + std::vector m_flattenedValues; /**< A *std::vector* representing the flattened arrary. */ + + std::size_t size( ) const { return( m_flattenedValues.size( ) ); } +}; + +/* +============================================================ +=========================== Array ========================== +============================================================ +*/ + +class Array : public Form { + + private: + std::vector m_shape; /**< The shape of the array. */ + std::string m_compression; /**< The compression of the array. Allowed values are *none*, *diagonal*, *flattened* or *embedded*. */ + std::string m_symmetry; /**< The symmetry of the array. Allowed values are *none*, *lower* or *upper*. */ + std::string m_permutation; /**< The permutation of the array. Allowed values are *none*, *-1*, and *1*. */ + std::string m_storageOrder; /**< The storage order of the array. Allowed values are *row-major* or *colunn-major*. */ + nf_Buffer m_values; /**< The list of *values* of the array. */ + nf_Buffer m_starts; /**< If *compression* is *flattened*, this is the *starts* node. If *compression* is *diagonal* this is the *startingIndices* node. Otherwise, this member is not used. */ + nf_Buffer m_length; /**< If *compression* is *flattened*, this is the *lengths* node, otherwise, not used. */ + nf_Buffer m_offset; /**< The offset of the array. Only used if *this* array is embedded into another array. */ + std::vector m_array; /**< The list of embedded arrays. This is only used if *compression* is *embedded*. */ + + public: + Array( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ); + ~Array( ); + + std::size_t dimension( ) const { return( m_shape.size( ) ); } /**< Returns the dimension of the array. */ + std::size_t size( ) const ; + std::vector const &shape( ) const { return( m_shape ); } /**< Returns a const reference to member *m_shape*. */ + FullArray constructArray( ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +} // End namespace Array. + +/* +============================================================ +====================== FlattenedArrayData ================== +============================================================ +*/ +class FlattenedArrayData : public Form { + + public: + std::vector m_shape; /**< The shape of the flattened array. */ + std::size_t m_numberOfStarts; /**< The number of start values. */ + std::size_t m_numberOfLengths; /**< The number of length values. */ + nf_Buffer m_starts; /**< The start values. */ + nf_Buffer m_lengths; /**< The length values. */ + nf_Buffer m_dValues; /**< The given array data. */ +// int32_t *m_starts; /**< The start values. */ +// int32_t *m_lengths; /**< The length values. */ +// std::vector m_dValues; /**< The given array data. */ + + FlattenedArrayData( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_dimensions, int a_useSystem_strtod ); + ~FlattenedArrayData( ); + + std::vector const &shape( ) const { return( m_shape ); } + void setToValueInFlatRange( int a_start, int a_end, double a_value ); + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================= Array3d ========================== +============================================================ +*/ +class Array3d : public Form { + + private: + FlattenedArrayData m_array; /**< The 3d array as a FlattenedArrayData instance. */ + + public: + Array3d( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ); + ~Array3d( ); + + std::size_t size( ) const { return( m_array.m_shape.back( ) ); } /**< The length of the 3d diminsion. */ + + Matrix matrix( std::size_t a_index ) const ; + + void modifiedMultiGroupElasticForTNSL( int maxTNSL_index ); + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { m_array.toXMLList( a_writeInfo, a_indent ); } +}; + +namespace Functions { + +/* +============================================================ +====================== FunctionForm ====================== +============================================================ +*/ +class FunctionForm : public Form { + + private: + int m_dimension; /**< The dimension of the function (i.e., the number of independent axes. */ + Axes m_axes; /**< The axes node for the function. */ + ptwXY_interpolation m_interpolation; /**< The interpolation for functions highest independent axis and its dependent axis. */ + std::string m_interpolationString; /**< The interpolation for functions highest independent axis and its dependent axis. */ + int m_index; /**< Currently not used. */ + double m_outerDomainValue; /**< If function is part of a higher dimensional function, this is the next higher dimensions domain value. */ + + public: + FunctionForm( std::string const &a_moniker, FormType a_type, int a_dimension, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + FunctionForm( std::string const &a_moniker, FormType a_type, int a_dimension, Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + FunctionForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, int a_dimension, Suite *a_suite = nullptr ); + FunctionForm( FunctionForm const &a_form ); + ~FunctionForm( ); + FunctionForm &operator=( FunctionForm const &a_rhs ); + + int dimension( ) const { return( m_dimension ); } /**< Returns the value of the *m_dimension* member. */ + + int index( ) const { return( m_index ); } /**< Returns the value of the *m_index* member. */ + double outerDomainValue( ) const { return( m_outerDomainValue ); } /**< Returns the value of the *m_outerDomainValue* member. */ + void setOuterDomainValue( double a_outerDomainValue ) { m_outerDomainValue = a_outerDomainValue; } + Axes const &axes( ) const { return( m_axes ); } /**< Returns a const reference to the *m_axes* member. */ + Axes &axes( ) { return( m_axes ); } /**< Returns a reference to the *m_axes* member. */ + + ptwXY_interpolation interpolation( ) const { return( m_interpolation ); } /**< Returns the value of the *m_interpolation* member. */ + void setInterpolation( ptwXY_interpolation a_interpolation ); + std::string interpolationString( ) const { return( m_interpolationString ); } /**< Returns the value of the *m_interpolationString* member. */ + + virtual double domainMin( ) const = 0; + virtual double domainMax( ) const = 0; + + virtual void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { toXMLList_func( a_writeInfo, a_indent, false, false ); } +}; + +/* +============================================================ +======================= Function1dForm ===================== +============================================================ +*/ +class Function1dForm : public FunctionForm { + + public: + Function1dForm( std::string const &a_moniker, FormType a_type, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function1dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function1dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_suite = nullptr ); + Function1dForm( Function1dForm const &a_form ); + ~Function1dForm( ); + Function1dForm &operator=( Function1dForm const &a_rhs ); + + virtual double evaluate( double a_x1 ) const = 0; + virtual void mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const ; + virtual XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + virtual void write( FILE *a_file, std::string const &a_format ) const ; + void print( std::string const &a_format ) const ; +}; + +/* +============================================================ +========================= Constant1d ======================= +============================================================ +*/ +class Constant1d : public Function1dForm { + + private: + double m_value; /**< The constant value of the function. */ + double m_domainMin; /**< The minimum domain value the function is valid. */ + double m_domainMax; /**< The maximum domain value the function is valid. */ + + public: + Constant1d( Axes const &a_axes, double value, double a_domainMin, double a_domainMax, int a_index = 0, double a_outerDomainValue = 0.0 ); + Constant1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Constant1d( ); + + double value( ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + double domainMin( ) const { return( m_domainMin ); } /**< Returns the value of the *m_domainMin* member. */ + double domainMax( ) const { return( m_domainMax ); } /**< Returns the value of the *m_domainMax* member. */ + + double evaluate( double a_x1 ) const ; + void mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== XYs1d =========================== +============================================================ +*/ +class XYs1d : public Function1dForm { + + private: + mutable ptwXYPoints *m_ptwXY; /**< The ptwXYPoints instance that stores points and is used to do calculations. */ + + public: + XYs1d( ); + XYs1d( Axes const &a_axes, ptwXY_interpolation m_interpolation, int a_index = 0, double a_outerDomainValue = 0.0 ); + XYs1d( Axes const &a_axes, ptwXY_interpolation m_interpolation, std::vector const &a_values, int a_index = 0, + double a_outerDomainValue = 0.0 ); + XYs1d( Axes const &a_axes, ptwXY_interpolation m_interpolation, std::vector const &a_xs, + std::vector const &a_ys, int a_index = 0, double a_outerDomainValue = 0.0 ); + XYs1d( Axes const &a_axes, ptwXYPoints *a_ptwXY, int a_index = 0, double a_outerDomainValue = 0.0 ); + XYs1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + XYs1d( XYs1d const &a_XYs1d ); + ~XYs1d( ); + XYs1d &operator=( XYs1d const &a_rhs ); + + std::size_t size( ) const { return( ptwXY_length( nullptr, m_ptwXY ) ); } /**< Returns the number of points (i.e., x,y pairs) in this. */ + ptwXYPoints const *ptwXY( ) const { return( m_ptwXY ); } /**< Returns the value of the *m_ptwXY* member. */ + ptwXYPoints *ptwXY( ) { return( m_ptwXY ); } /**< Returns the value of the *m_ptwXY* member. */ + + std::pair operator[]( std::size_t a_index ) const ; + XYs1d operator+( XYs1d const &a_XYs1d ) const ; + XYs1d &operator+=( XYs1d const &a_XYs1d ); + XYs1d operator-( XYs1d const &a_XYs1d ) const ; + XYs1d &operator-=( XYs1d const &a_XYs1d ); + XYs1d operator*( double a_value ) const ; + XYs1d operator*( XYs1d const &a_XYs1d ) const ; + XYs1d &operator*=( double a_value ); + XYs1d &operator*=( XYs1d const &a_XYs1d ); + + double domainMin( ) const { return( (*this)[0].first ); } /**< Returns first x1 value of this. */ + double domainMax( ) const { return( (*this)[size( )-1].first ); } /**< Returns last x1 value of this. */ + std::vector xs( ) const ; + std::vector ys( ) const ; + std::vector ysMappedToXs( std::vector const &a_xs, std::size_t *a_offset ) const ; + XYs1d domainSlice( double a_domainMin, double a_domainMax, bool a_fill ) const ; + XYs1d domainSliceMax( double a_domainMax ) const ; + + double evaluate( double a_x1 ) const ; + void mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + double integrate( double a_dommainMin, double a_dommainMax ); + double normalize( ); + Xs_pdf_cdf1d toXs_pdf_cdf1d( ); + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; + void write( FILE *a_file, std::string const &a_format ) const ; + + static XYs1d *makeConstantXYs1d( Axes const &a_axes, double a_domainMin, double a_domainMax, double a_value ); +}; + +/* +============================================================ +=========================== Ys1d =========================== +============================================================ +*/ +class Ys1d : public Function1dForm { + + private: + std::size_t m_start; /**< The index in the grid for the x1 value for the first y value in *m_Ys*. */ + std::vector m_Ys; /**< This list of y values. */ + + public: + Ys1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index = 0, double a_outerDomainValue = 0.0 ); + Ys1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::size_t a_start, std::vector const &a_Ys, int a_index = 0, double a_outerDomainValue = 0.0 ); + Ys1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + Ys1d( Ys1d const &a_Ys1d ); + ~Ys1d( ); + + std::size_t size( ) const { return( m_Ys.size( ) ); } /**< Returns the number of values in *m_Ys*. */ + + double operator[]( std::size_t a_index ) const { return( m_Ys[a_index] ); } /**< Returns the y value at *m_Ys*[a_index]. */ + void push_back( double a_y ) { m_Ys.push_back( a_y ); } + Ys1d operator+( Ys1d const &a_Ys1d ) const ; + Ys1d &operator+=( Ys1d const &a_Ys1d ); + + double domainMin( ) const ; + double domainMax( ) const ; + std::size_t start( ) const { return( m_start ); } /**< Returns the value of the *m_start* member. */ + void setStart( std::size_t a_start ) { m_start = a_start; } /**< Sets the *m_start* member to *a_start. */ + std::size_t length( ) const { return( m_start + m_Ys.size( ) ); } /**< Returns the sum of m_start and size( ). */ + std::vector const &Ys( ) const { return( m_Ys ); } /**< Returns a reference to the list of y-values. */ + std::vector &Ys( ) { return( m_Ys ); } /**< Returns a reference to the list of y-values. */ + + double evaluate( double a_x1 ) const ; + void set( std::size_t a_index, double a_value ) { m_Ys[a_index] = a_value; } /**< Set the value at *m_Ys*[a_index] to a_value. */ + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; + void write( FILE *a_file, std::string const &a_format ) const ; +}; + +/* +============================================================ +======================= Polynomial1d ======================= +============================================================ +*/ +class Polynomial1d : public Function1dForm { + + private: + double m_domainMin; /**< The minimum domain value the function is valid. */ + double m_domainMax; /**< The maximum domain value the function is valid. */ + std::vector m_coefficients; /**< The coefficients of the polynomial. */ + + public: + Polynomial1d( Axes const &a_axes, double a_domainMin, double a_domainMax, std::vector const &a_coefficients, int a_index = 0, double a_outerDomainValue = 0.0 ); + Polynomial1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + Polynomial1d( Polynomial1d const &a_polynomial1d ); + ~Polynomial1d( ); + + double domainMin( ) const { return( m_domainMin ); } /**< Returns the value of the *m_domainMin* member. */ + double domainMax( ) const { return( m_domainMax ); } /**< Returns the value of the *m_domainMax* member. */ + + std::vector const &coefficients( ) const { return( m_coefficients ); } /**< Returns the value of the *m_coefficients* member. */ + + double evaluate( double a_x1 ) const ; + void mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================= Legendre1d ======================= +============================================================ +*/ +class Legendre1d : public Function1dForm { + + private: + std::vector m_coefficients; /**< The Legendre coefficients. */ + + public: + Legendre1d( Axes const &a_axes, int a_index = 0, double a_outerDomainValue = 0.0 ); + Legendre1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + Legendre1d( Legendre1d const &a_Legendre1d ); + ~Legendre1d( ); + + double domainMin( ) const { return( -1.0 ); } /**< Returns the value of the *domainMin* which is always -1.0. */ + double domainMax( ) const { return( 1.0 ); } /**< Returns the value of the *domainMax* which is always 1.0. */ + + std::vector const &coefficients( ) const { return( m_coefficients ); } /**< Returns the value of the *m_coefficients* member. */ + std::vector &coefficients( ) { return( m_coefficients ); } /**< Returns the value of the *m_coefficients* member. */ + + double evaluate( double a_x1 ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== Gridded1d ======================= +============================================================ +*/ +class Gridded1d : public Function1dForm { + + private: + Vector m_grid; /**< The grid for the gridded 1d function. Can be a link. */ + Vector m_data; /**< The value of the function on the grid. */ +// BRB should have ... instead of m_data. + + public: + Gridded1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Gridded1d( ); + + double domainMin( ) const { return( m_grid[0] ); } /**< Returns the value of the *domainMin*. */ + double domainMax( ) const { return( m_grid[m_grid.size( )-1] ); } /**< Returns the value of the *domainMax*. */ + + Vector const &grid( ) const { return( m_grid ); } /**< Returns the value of the *m_grid* member. */ + Vector const &data( ) const { return( m_data ); } /**< Returns the value of the *m_data* member. */ + void setData( Vector const &a_data ) { m_data = a_data; } /**< Sets the *m_data* member to *a_data*. */ + + void modifiedMultiGroupElasticForTNSL( int a_maxTNSL_index ); + double evaluate( double a_x1 ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; + void write( FILE *a_file, std::string const &a_format ) const ; +}; + +/* +============================================================ +======================== Reference1d ======================= +============================================================ +*/ +class Reference1d : public Function1dForm { + + private: + std::string m_xlink; /**< Link to the other function. */ + + public: + Reference1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Reference1d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + std::string const &xlink( ) const { return( m_xlink ); } /**< Returns the value of the *m_xlink* member. */ + double evaluate( double a_x1 ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= Xs_pdf_cdf1d ======================= +============================================================ +*/ +class Xs_pdf_cdf1d : public Function1dForm { + + private: + std::vector m_xs; /**< List of x1 values. */ + std::vector m_pdf; /**< The pdf evaluated at the x1 values. */ + std::vector m_cdf; /**< The cdf evaluated at the x1 values. */ +// BRB m_xs, m_pdf and m_cdf need to be a class like ListOfDoubles. + + public: + Xs_pdf_cdf1d( ); + Xs_pdf_cdf1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::vector const &a_Xs, + std::vector const &a_pdf, std::vector const &a_cdf, int a_index = 0, double a_outerDomainValue = 0.0 ); + Xs_pdf_cdf1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Xs_pdf_cdf1d( ); + Xs_pdf_cdf1d &operator=( Xs_pdf_cdf1d const &a_rhs ); + + double domainMin( ) const { return( m_xs[0] ); } /**< Returns the value of the *domainMin*. */ + double domainMax( ) const { return( m_xs[m_xs.size( )-1] ); } /**< Returns the value of the *domainMax*. */ + + std::vector const &Xs( ) const { return( m_xs ); } /**< Returns the value of the *m_xs* member. */ + std::vector const &pdf( ) const { return( m_pdf ); } /**< Returns the value of the *m_pdf* member. */ + std::vector const &cdf( ) const { return( m_cdf ); } /**< Returns the value of the *m_cdf* member. */ + double evaluate( double a_x1 ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== Regions1d ======================= +============================================================ +*/ +class Regions1d : public Function1dForm { + + private: + std::vector m_Xs; /**< List of *x1* domain values that bounds each region. */ + std::vector m_function1ds; /**< List of regions. */ + + public: + Regions1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Regions1d( ); + + std::size_t size( ) const { return( m_function1ds.size( ) ); } /**< Returns number of regions. */ + Function1dForm const *operator[]( std::size_t a_index ) const { return( m_function1ds[a_index] ); } /**< Returns the region at index *a_index* - 1. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + void append( Function1dForm *a_function ); + double evaluate( double a_x1 ) const ; + void mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const ; + XYs1d *asXYs1d( bool a_asLinlin, double a_accuray, double a_lowerEps, double a_upperEps ) const ; + + std::vector const &Xs( ) const { return( m_Xs ); } /**< Returns the value of the *m_Xs* member. */ + std::vector const &function1ds( ) const { return( m_function1ds ); } /**< Returns the value of the *m_function1ds* member. */ + std::vector &function1ds( ) { return( m_function1ds ); } /**< Returns the value of the *m_function1ds* member. */ + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; + void write( FILE *a_file, std::string const &a_format ) const ; +}; + +/* +============================================================ +========================= Branching1d ====================== +============================================================ +*/ +class Branching1d : public Function1dForm { + + private: + std::string m_initialState; /**< The nuclide level that decays, emitting a photon. */ + double m_multiplicity; /**< The average number of photons emitted when transitioning from the initial to the final state. */ + + public: + Branching1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Branching1d( ); + + std::string const &initialState( ) const { return( m_initialState ); } /**< Returns the value of the *m_initialState* member. */ + + double multiplicity( ) const { return( m_multiplicity ); } /**< Returns the value of the *m_multiplicity* member. */ + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; +}; + +/* +============================================================ +================ ResonanceBackgroundRegion1d =============== +============================================================ +*/ + +class ResonanceBackgroundRegion1d : public Function1dForm { + + private: + Function1dForm *m_function1d; /**< The 1-d function representing *this*. */ + + public: + ResonanceBackgroundRegion1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~ResonanceBackgroundRegion1d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +=================== ResonanceBackground1d ================== +============================================================ +*/ +class ResonanceBackground1d : public Function1dForm { + + private: + ResonanceBackgroundRegion1d *m_resolvedRegion; /**< The 1-d function for the resolved region. */ + ResonanceBackgroundRegion1d *m_unresolvedRegion; /**< The 1-d function for the unresolved region. */ + ResonanceBackgroundRegion1d *m_fastRegion; /**< The 1-d function for the fast region. */ + + public: + ResonanceBackground1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~ResonanceBackground1d( ); + + Function1dForm const *resolvedRegion( ) const { return( m_resolvedRegion ); } /**< Returns the value of the *m_resolvedRegion* member. */ + Function1dForm const *unresolvedRegion( ) const { return( m_unresolvedRegion ); } /**< Returns the value of the *m_unresolvedRegion* member. */ + Function1dForm const *fastRegion( ) const { return( m_fastRegion ); } /**< Returns the value of the *m_fastRegion* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +================= ResonancesWithBackground1d =============== +============================================================ +*/ +class ResonancesWithBackground1d : public Function1dForm { + + private: + std::string m_resonances; /**< The reference to the resonance data for *this*.*/ + ResonanceBackground1d m_background; /**< The background .*/ + + public: + ResonancesWithBackground1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~ResonancesWithBackground1d( ); + + double domainMin( ) const { return( m_background.domainMin( ) ); } /**< Returns *this* function's domain mimimun value. */ + double domainMax( ) const { return( m_background.domainMax( ) ); } /**< Returns *this* function's domain mimimun value. */ + + double evaluate( double a_x1 ) const { return( m_background.evaluate( a_x1 ) ); } /**< Returns the value *this* evaluated at *a_x1*. */ + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +================= URR_probabilityTables1d ================== +============================================================ +*/ +class URR_probabilityTables1d : public Function1dForm { + + private: + Function2dForm *m_function2d; /**< The URR probability tables. */ + + public: + URR_probabilityTables1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~URR_probabilityTables1d( ); + + Function2dForm const *function2d( ) const { return( m_function2d ); } /**< Returns the pointer to the *m_function2d* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +=============== ThermalNeutronScatteringLaw1d ================ +============================================================ +*/ +class ThermalNeutronScatteringLaw1d : public Function1dForm { + + private: + std::string m_href; /**< xlink to the IncoherentPhotoAtomicScattering instance under the *m_doubleDifferentialCrossSection* node. */ + + public: + ThermalNeutronScatteringLaw1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~ThermalNeutronScatteringLaw1d( ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; +}; + +/* +============================================================ +====================== Unspecified1d ======================= +============================================================ +*/ +class Unspecified1d : public Function1dForm { + + public: + Unspecified1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Unspecified1d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x1 ) const ; + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +======================= Function2dForm ===================== +============================================================ +*/ +class Function2dForm : public FunctionForm { + + public: + Function2dForm( std::string const &a_moniker, FormType a_type, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function2dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function2dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_suite = nullptr ); + Function2dForm( Function2dForm const &a_form ); + ~Function2dForm( ); + + virtual double evaluate( double a_x2, double a_x1 ) const = 0; +}; + +/* +============================================================ +=========================== XYs2d ========================== +============================================================ +*/ +class XYs2d : public Function2dForm { + + private: + std::string m_interpolationQualifier; /**< The interpolation qualifier for *this*. */ + std::vector m_Xs; /**< The list of *x2* values for each function. */ + std::vector m_function1ds; /**< The list of 1d functions. */ + + public: + XYs2d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index = 0, double a_outerDomainValue = 0.0 ); + XYs2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~XYs2d( ); + + std::string interpolationQualifier( ) const { return( m_interpolationQualifier ); } /**< Returns the value of the *m_interpolationQualifier* member. */ + void setInterpolationQualifier( std::string a_interpolationQualifier ) { m_interpolationQualifier = a_interpolationQualifier; } + /**< Sets the *m_interpolationQualifier* member to *a_interpolationQualifier*. */ + + double domainMin( ) const ; + double domainMax( ) const ; + double evaluate( double a_x2, double a_x1 ) const ; + + std::vector const &Xs( ) const { return( m_Xs ); } /**< Returns the value of the *m_Xs* member. */ + std::vector const &function1ds( ) const { return( m_function1ds ); } /**< Returns the value of the *m_function1ds* member. */ + std::vector &function1ds( ) { return( m_function1ds ); } /**< Returns the value of the *m_function1ds* member. */ + void append( Function1dForm *a_function1d ); + + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================= Recoil2d ========================= +============================================================ +*/ +class Recoil2d : public Function2dForm { + + private: + std::string m_xlink; /**< Link to the recoil product. */ + + public: + Recoil2d( std::string const &a_label, std::string const &a_href ); + Recoil2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Recoil2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + std::string const &xlink( ) const { return( m_xlink ); } /**< Returns the value of the *m_xlink* member. */ + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================= Isotropic2d ====================== +============================================================ +*/ +class Isotropic2d : public Function2dForm { + + public: + Isotropic2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Isotropic2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ) ); } +}; + +/* +============================================================ +======================= DiscreteGamma2d ==================== +============================================================ +*/ +class DiscreteGamma2d : public Function2dForm { + + private: + double m_domainMin; /**< The minimum domain value the function is valid. */ + double m_domainMax; /**< The maximum domain value the function is valid. */ + double m_value; /**< The energy of the discrete gamma. */ + + public: + DiscreteGamma2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~DiscreteGamma2d( ); + + double domainMin( ) const { return( m_domainMin ); } /**< Returns the value of the *m_domainMin* member. */ + double domainMax( ) const { return( m_domainMax ); } /**< Returns the value of the *m_domainMax* member. */ + double value( ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +======================= PrimaryGamma2d ==================== +============================================================ +*/ +class PrimaryGamma2d : public Function2dForm { + + private: + double m_domainMin; /**< The minimum domain value the function is valid. */ + double m_domainMax; /**< The maximum domain value the function is valid. */ + double m_value; /**< The binding energy needed to calculate the energy of the primary gamma. */ + std::string m_finalState; /**< The nuclear state the compound is in after the primary photon (gamma) is emitted. */ + + public: + PrimaryGamma2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~PrimaryGamma2d( ); + + double domainMin( ) const { return( m_domainMin ); } /**< Returns the value of the *m_domainMin* member. */ + double domainMax( ) const { return( m_domainMax ); } /**< Returns the value of the *m_domainMax* member. */ + double value( ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + std::string const &finalState( ) const { return( m_finalState ); } /**< Returns a reference to the *m_finalState* member. */ + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +=================== GeneralEvaporation2d =================== +============================================================ +*/ +class GeneralEvaporation2d : public Function2dForm { + + private: + PhysicalQuantity m_U; /**< The *U* value for the general evaporation function. */ + Function1dForm *m_theta; /**< The *theta* function for the general evaporation function. */ + Function1dForm *m_g; /**< The *g* function for the general evaporation function. */ + + public: + GeneralEvaporation2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~GeneralEvaporation2d( ); + + double U( ) const { return( m_U.value( ) ); } /**< Returns the GNDS *U* value for *this*. */ + Function1dForm const *theta( ) const { return( m_theta ); } /**< Returns the value of the *m_theta* member. */ + Function1dForm const *g( ) const { return( m_g ); } /**< Returns the value of the *m_g* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +================= SimpleMaxwellianFission2d ================ +============================================================ +*/ +class SimpleMaxwellianFission2d : public Function2dForm { + + private: + PhysicalQuantity m_U; /**< The *U* value for the simple Maxwellian function. */ + Function1dForm *m_theta; /**< The *theta* function for the simple Maxwellian function. */ + + public: + SimpleMaxwellianFission2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~SimpleMaxwellianFission2d( ); + + double U( ) const { return( m_U.value( ) ); } /**< Returns the GNDS *U* value for *this*. */ + Function1dForm const *theta( ) const { return( m_theta ); } /**< Returns the value of the *m_theta* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +====================== Evaporation2d ======================= +============================================================ +*/ +class Evaporation2d : public Function2dForm { + + private: + PhysicalQuantity m_U; /**< The *U* value for the evaporation function. */ + Function1dForm *m_theta; /**< The *theta* function for the evaporation function. */ + + public: + Evaporation2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Evaporation2d( ); + + double U( ) const { return( m_U.value( ) ); } /**< Returns the *m_U* value for *this*. */ + Function1dForm const *theta( ) const { return( m_theta ); } /**< Returns the value of the *m_theta* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== Watt2d ========================== +============================================================ +*/ +class Watt2d : public Function2dForm { + + private: + PhysicalQuantity m_U; /**< The *U* value for the Watt function. */ + Function1dForm *m_a; /**< The *a* function for the Watt function. */ + Function1dForm *m_b; /**< The *b* function for the Watt function. */ + + public: + Watt2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Watt2d( ); + + double U( ) const { return( m_U.value( ) ); } /**< Returns the GNDS *U* value for *this*. */ + Function1dForm const *a( ) const { return( m_a ); } /**< Returns the value of the *m_a* member. */ + Function1dForm const *b( ) const { return( m_b ); } /**< Returns the value of the *m_b* member. */ + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +======================= MadlandNix2d ======================= +============================================================ +*/ +class MadlandNix2d : public Function2dForm { + + private: + PhysicalQuantity m_EFL; /**< The *EFL* value for the Madland/Nix function. */ + PhysicalQuantity m_EFH; /**< The *EFH* value for the Madland/Nix function. */ + Function1dForm *m_T_M; /**< The *T_M* function for the Madland/Nix function. */ + + public: + MadlandNix2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~MadlandNix2d( ); + + double EFL( ) const { return( m_EFL.value( ) ); } /**< Returns the GNDS *EFL* value for *this*. */ + double EFH( ) const { return( m_EFH.value( ) ); } /**< Returns the GNDS *EFH* value for *this*. */ + Function1dForm const *T_M( ) const { return( m_T_M ); } /**< Returns the value of the *m_T_M* member. */ + + + double domainMin( ) const ; + double domainMax( ) const ; + + double evaluate( double a_x2, double a_x1 ) const ; + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +=================== Weighted_function2d ==================== +============================================================ +*/ +class Weighted_function2d : public Function2dForm { + + private: + Function1dForm *m_weight; /**< The weight for this function. */ + Function2dForm *m_energy; /**< The energy functional. */ + + public: + Weighted_function2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Weighted_function2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + Function1dForm const *weight( ) const { return( m_weight ); } /**< Returns the value of the *m_weight* member. */ + Function2dForm const *energy( ) const { return( m_energy ); } /**< Returns the value of the *m_energy* member. */ + double evaluate( double a_x2, double a_x1 ) const ; +}; + +/* +============================================================ +================== WeightedFunctionals2d =================== +============================================================ +*/ +class WeightedFunctionals2d : public Function2dForm { + + private: + std::vector m_weighted_function2d; /**< The list of Weighted_function2d. */ + + public: + WeightedFunctionals2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~WeightedFunctionals2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + std::vector const &weighted_function2d( ) const { return( m_weighted_function2d ); } /**< Returns the value of the *m_weighted_function2d* member. */ + double evaluate( double a_x2, double a_x1 ) const ; +}; + +/* +============================================================ +==================== NBodyPhaseSpace2d ===================== +============================================================ +*/ +class NBodyPhaseSpace2d : public Function2dForm { + + private: + int m_numberOfProducts; /**< The number of products for the NBodyPhaseSpace function. */ + PhysicalQuantity m_mass; /**< The mass for the NBodyPhaseSpace function. */ + + public: + NBodyPhaseSpace2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~NBodyPhaseSpace2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + int numberOfProducts( ) const { return( m_numberOfProducts ); } /**< Returns the value of the *m_numberOfProducts* member. */ + PhysicalQuantity const &mass( ) const { return( m_mass ); } /**< Returns the value of the *m_mass* member. */ + + double evaluate( double a_x2, double a_x1 ) const ; +}; + +/* +============================================================ +========================== Regions2d ======================= +============================================================ +*/ +class Regions2d : public Function2dForm { + + private: + std::vector m_Xs; /**< List of *x2* domain values that bounds each region. */ + std::vector m_function2ds; /**< List of 2d regions. */ + + public: + Regions2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Regions2d( ); + + double domainMin( ) const ; + double domainMax( ) const ; + + void append( Function2dForm *a_function ); + double evaluate( double a_x2, double a_x1 ) const ; + + std::vector const &Xs( ) const { return( m_Xs ); } /**< Returns the value of the *m_Xs* member. */ + std::vector const &function2ds( ) const { return( m_function2ds ); } /**< Returns the value of the *m_function2ds* member. */ + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== Gridded2d ======================= +============================================================ +*/ +class Gridded2d : public Function2dForm { + + private: + Array::Array m_array; /**< The multi-group transfer matrix. */ + + public: + Gridded2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Gridded2d( ); + + double domainMin( ) const { return( 0.0 ); } /**< Not properly implemented. */ + double domainMax( ) const { return( 0.0 ); } /**< Not properly implemented. */ + double evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { return( 0.0 ); } /**< Not properly implemented. */ + + Array::Array const &array( ) const { return( m_array ); } /**< Returns the value of the *m_array* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= Function3dForm ===================== +============================================================ +*/ +class Function3dForm : public FunctionForm { + + public: + Function3dForm( std::string const &a_moniker, FormType a_type, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function3dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ); + Function3dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_suite = nullptr ); + Function3dForm( Function3dForm const &a_form ); + ~Function3dForm( ); + + virtual double evaluate( double a_x3, double a_x2, double a_x1 ) const = 0; +}; + +/* +============================================================ +=========================== XYs3d ========================== +============================================================ +*/ +class XYs3d : public Function3dForm { + + private: + std::string m_interpolationQualifier; /**< The interpolation qualifier for *this*. */ + std::vector m_Xs; /**< The list of *x3* values for each function. */ + std::vector m_function2ds; /**< The list of 2d functions. */ + + public: + XYs3d( Axes const &a_axes, ptwXY_interpolation a_interpolation = ptwXY_interpolationLinLin, int a_index = 0, double a_outerDomainValue = 0.0 ); + XYs3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~XYs3d( ); + + std::string interpolationQualifier( ) const { return( m_interpolationQualifier ); } /**< Returns the value of the *m_interpolationQualifier* member. */ + void setInterpolationQualifier( std::string a_interpolationQualifier ) { m_interpolationQualifier = a_interpolationQualifier; } + /**< Sets the *m_interpolationQualifier* member to *a_interpolationQualifier*. */ + + double domainMin( ) const ; + double domainMax( ) const ; + double evaluate( double a_x3, double a_x2, double a_x1 ) const ; + + std::vector const &Xs( ) const { return( m_Xs ); } /**< Returns the value of the *m_Xs* member. */ + std::vector const &function2ds( ) const { return( m_function2ds ); } /**< Returns a const reference to the *m_function2ds* member. */ + + void append( Function2dForm *a_function2d ); /**< Appends the 2d function *a_function2d* to the end the *this*. */ + void toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const ; +}; + +/* +============================================================ +========================== Gridded3d ======================= +============================================================ +*/ +class Gridded3d : public Function3dForm { + + private: + Array3d m_data; /**< The multi-group transfer matrix. */ + + public: + Gridded3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Gridded3d( ); + + double domainMin( ) const { return( 0.0 ); } /**< Not properly implemented. */ + double domainMax( ) const { return( 0.0 ); } /**< Not properly implemented. */ + double evaluate( LUPI_maybeUnused double a_x3, LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { return( 0.0 ); } /**< Not properly implemented. */ + + Array3d const &data( ) const { return( m_data ); } /**< Returns the value of the *m_data* member. */ + + void modifiedMultiGroupElasticForTNSL( int maxTNSL_index ); + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +} // End namespace Functions. + +/* +============================================================ +=========== DoubleDifferentialCrossSection stuff =========== +============================================================ +*/ +namespace DoubleDifferentialCrossSection { + +/* +============================================================ +============================= Base ========================= +============================================================ +*/ +class Base : public Form { + + public: + Base( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_parent ); +}; + +/* +============================================================ +================ CoherentPhotoAtomicScattering ============= +============================================================ +*/ +class CoherentPhotoAtomicScattering : public Base { + + private: + Functions::Function1dForm *m_formFactor; /**< The form factor for coherent photo-atomic scattering. */ + Functions::Function1dForm *m_realAnomalousFactor; /**< The real anomalous factor of coherent photo-atomic scattering. */ + Functions::Function1dForm *m_imaginaryAnomalousFactor; /**< The imaginary anomalous factor of coherent photo-atomic scattering. */ + + public: + CoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~CoherentPhotoAtomicScattering( ); + + Functions::Function1dForm *formFactor( ) { return( m_formFactor ); } /**< Returns the value of the *m_formFactor* member. */ + Functions::Function1dForm const *formFactor( ) const { return( m_formFactor ); } /**< Returns the value of the *m_formFactor* member. */ + Functions::Function1dForm *realAnomalousFactor( ) { return( m_realAnomalousFactor ); } /**< Returns the value of the *m_realAnomalousFactor* member. */ + Functions::Function1dForm const *realAnomalousFactor( ) const { return( m_realAnomalousFactor ); } /**< Returns the value of the *m_realAnomalousFactor* member. */ + Functions::Function1dForm *imaginaryAnomalousFactor( ) { return( m_imaginaryAnomalousFactor ); } /**< Returns the value of the *m_imaginaryAnomalousFactor* member. */ + Functions::Function1dForm const *imaginaryAnomalousFactor( ) const { return( m_imaginaryAnomalousFactor ); } /**< Returns the value of the *m_imaginaryAnomalousFactor* member. */ +}; + +/* +============================================================ +============== IncoherentPhotoAtomicScattering ============= +============================================================ +*/ +class IncoherentPhotoAtomicScattering : public Base { + + private: + Functions::Function1dForm *m_scatteringFactor; /**< The scattering factor for incoherent photo-atomic scattering. */ + + public: + IncoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~IncoherentPhotoAtomicScattering( ); + + Functions::Function1dForm const *scatteringFactor( ) const { return( m_scatteringFactor); } /**< Returns the value of the *m_scatteringFactor* member. */ +}; + +/* +======================================================================= +============== IncoherentBoundToFreePhotoAtomicScattering ============= +======================================================================= +*/ +class IncoherentBoundToFreePhotoAtomicScattering : public Base { + + private: + Functions::Function1dForm *m_ComptonProfile; + + public: + IncoherentBoundToFreePhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~IncoherentBoundToFreePhotoAtomicScattering( ); + + Functions::Function1dForm *ComptonProfile( ) { return( m_ComptonProfile); } + Functions::Function1dForm const *ComptonProfile( ) const { return( m_ComptonProfile); } +}; + +namespace n_ThermalNeutronScatteringLaw { + +/* +============================================================ +========================== S_table ========================= +============================================================ +*/ +class S_table : public Form { + + + private: + Functions::Function2dForm *m_function2d; /**< The cumulative scattering factor \f$S(T,E)\f$. */ + + public: + S_table( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~S_table( ); + + Functions::Function2dForm *function2d( ) { return( m_function2d ); } /**< Returns the value of the *m_function2d* member. */ + Functions::Function2dForm const *function2d( ) const { return( m_function2d ); } /**< Returns the value of the *m_function2d* member. */ +}; + +/* +============================================================ +====================== CoherentElastic ===================== +============================================================ +*/ +class CoherentElastic : public Base { + + private: + S_table m_S_table; /**< The cumulative scattering factor \f$S(T,E)\f$. */ + + public: + CoherentElastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~CoherentElastic( ); + + S_table const &s_table( ) const { return( m_S_table ); } /**< Returns the value of the *m_S_table* member. */ +}; + +/* +============================================================ +=================== DebyeWallerIntegral ==================== +============================================================ +*/ +class DebyeWallerIntegral : public Form { + + + private: + Functions::Function1dForm *m_function1d; /**< The 1-d function representing the Debye-Waller integral function \f$W(T)\f$. */ + + public: + DebyeWallerIntegral( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~DebyeWallerIntegral( ); + + Functions::Function1dForm *function1d( ) { return( m_function1d ); } /**< Returns the value of the *m_function1d* member. */ + Functions::Function1dForm const *function1d( ) const { return( m_function1d ); } /**< Returns the value of the *m_function1d* member. */ +}; + +/* +============================================================ +====================== IncoherentElastic ===================== +============================================================ +*/ +class IncoherentElastic : public Base { + + private: + PhysicalQuantity m_boundAtomCrossSection; /**< The characteristic bound cross section. */ + DebyeWallerIntegral m_DebyeWallerIntegral; /**< The Debye-Waller integral function \f$W(T)\f$. */ + + public: + IncoherentElastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~IncoherentElastic( ); + + PhysicalQuantity const &boundAtomCrossSection( ) { return( m_boundAtomCrossSection ); } /**< Returns the value of the *m_boundAtomCrossSection* member. */ + DebyeWallerIntegral const &debyeWallerIntegral( ) const { return( m_DebyeWallerIntegral ); } /**< Returns the value of the *m_DebyeWallerIntegral* member. */ +}; + +/* +============================================================ +========================== Options ========================= +============================================================ +*/ + +class Options : public Form { + + private: + bool m_calculatedAtThermal; /**< If *true* calculate at 0.0253 eV/k. */ + bool m_asymmetric; /**< If *true* S(alpha,beta) is asymmetric, otherwise it is symmetric. */ + + public: + Options( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Options( ); + + bool calculatedAtThermal( ) { return( m_calculatedAtThermal ); } /**< Returns the value of the *m_calculatedAtThermal* member. */ + bool asymmetric( ) { return( m_asymmetric ); } /**< Returns the value of the *m_asymmetric* member. */ +}; + +/* +============================================================ +======================== T_effective ======================= +============================================================ +*/ +class T_effective : public Form { + + private: + Functions::Function1dForm *m_function1d; /**< The 1-d function representing effective temperature \f$T_{\rm eff}(T)\f$. */ + + public: + T_effective( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~T_effective( ); + + Functions::Function1dForm const *function1d( ) const { return( m_function1d ); } /**< Returns the value of the *m_function1d* member. */ +}; + +/* +============================================================ +====================== ScatteringAtom ====================== +============================================================ +*/ +class ScatteringAtom : public Form { + + private: + PhysicalQuantity m_mass; /**< The mass of the atom. */ + PhysicalQuantity m_freeAtomCrossSection; /**< The free atom scattering cross section. */ + PhysicalQuantity m_e_critical; /**< The energy value above which the static model of elastic scattering is adequate. */ + PhysicalQuantity m_e_max; /**< The upper energy limit for the constant. */ + T_effective m_T_effective; /**< The effective temperatures for the shortcollision-time approximation given as a function of moderator temperature for the atom. */ + + public: + ScatteringAtom( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~ScatteringAtom( ); + + PhysicalQuantity const &mass( ) const { return( m_mass ); } /**< Returns the value of the *m_mass* member. */ + PhysicalQuantity const &freeAtomCrossSection( ) const { return( m_freeAtomCrossSection ); } /**< Returns the value of the *m_freeAtomCrossSection* member. */ + PhysicalQuantity const &e_critical( ) const { return( m_e_critical ); } /**< Returns the value of the *m_e_critical* member. */ + PhysicalQuantity const &e_max( ) const { return( m_e_max ); } /**< Returns the value of the *m_e_max* member. */ + T_effective const &t_effective( ) const { return( m_T_effective ); } /**< Returns the value of the *m_T_effective* member. */ +}; + +/* +============================================================ +======================= S_alpha_beta ======================= +============================================================ +*/ +class S_alpha_beta : public Form { + + private: + Functions::Function3dForm *m_function3d; /**< The \f$S(T,\alpha,\beta)\f$ function. */ + + public: + S_alpha_beta( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~S_alpha_beta( ); + + Functions::Function3dForm *function3d( ) { return( m_function3d ); } /**< Returns the value of the *m_function3d* member. */ +}; + +} // End namespace n_ThermalNeutronScatteringLaw. + +} // End namespace DoubleDifferentialCrossSection. + +namespace Distributions { + +/* +============================================================ +========================= Distribution ===================== +============================================================ +*/ +class Distribution : public Form { + + private: + Frame m_productFrame; /**< The product frame for the distribution form. */ + + public: + Distribution( std::string const &a_moniker, FormType a_type, std::string const &a_label, Frame a_productFrame ); + Distribution( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_parent ); + + Frame productFrame( ) const { return( m_productFrame ); } /**< Returns the value of the *m_productFrame* member. */ + void toXMLNodeStarter( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +======================= AngularTwoBody ===================== +============================================================ +*/ +class AngularTwoBody : public Distribution { + + private: + Functions::Function2dForm *m_angular; /**< The P(mu|E) distribution as a Function2dForm. */ + + public: + AngularTwoBody( std::string const &a_label, Frame a_productFrame, Functions::Function2dForm *a_angular = nullptr ); + AngularTwoBody( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~AngularTwoBody( ); + + Functions::Function2dForm const *angular( ) const { return( m_angular ); } /**< Returns the value of the *m_angular* member as a const pointer. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +========================= KalbachMann ====================== +============================================================ +*/ +class KalbachMann : public Distribution { + + private: + Functions::Function2dForm *m_f; /**< The P(E'|E) distribution as a Function2dForm. */ + Functions::Function2dForm *m_r; /**< The Kalbach/Mann r(E,E') function as a Function2dForm. */ + Functions::Function2dForm *m_a; /**< The Kalbach/Mann a(E,E') function as a Function2dForm. */ + + public: + KalbachMann( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~KalbachMann( ); + + Functions::Function2dForm const *f( ) const { return( m_f ); } /**< Returns the value of the *m_f* member. */ + Functions::Function2dForm const *r( ) const { return( m_r ); } /**< Returns the value of the *m_r* member. */ + Functions::Function2dForm const *a( ) const { return( m_a ); } /**< Returns the value of the *m_a* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== EnergyAngular ===================== +============================================================ +*/ +class EnergyAngular : public Distribution { + + private: + Functions::Function3dForm *m_energyAngular; /**< The P(E',mu|E) distribution as a Function3dForm. */ + + public: + EnergyAngular( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~EnergyAngular( ); + + Functions::Function3dForm const *energyAngular( ) const { return( m_energyAngular ); } /**< Returns the value of the *m_energyAngular* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= EnergyAngularMC ==================== +============================================================ +*/ +class EnergyAngularMC : public Distribution { + + private: + Functions::Function2dForm *m_energy; /**< The P(E'|E) distribution as a Function2dForm. */ + Functions::Function3dForm *m_energyAngular; /**< The P(mu|E,E') distribution as a Function3dForm. */ + + public: + EnergyAngularMC( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~EnergyAngularMC( ); + + Functions::Function2dForm const *energy( ) const { return( m_energy ); } /**< Returns the value of the *m_energy* member. */ + Functions::Function3dForm const *energyAngular( ) const { return( m_energyAngular ); } /**< Returns the value of the *m_energyAngular* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== AngularEnergy ===================== +============================================================ +*/ +class AngularEnergy : public Distribution { + + private: + Functions::Function3dForm *m_angularEnergy; /**< The P(mu,E'|E) distribution as a Function3dForm. */ + + public: + AngularEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~AngularEnergy( ); + + Functions::Function3dForm const *angularEnergy( ) const { return( m_angularEnergy ); } /**< Returns the value of the *m_angularEnergy* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= AngularEnergyMC ==================== +============================================================ +*/ +class AngularEnergyMC : public Distribution { + + private: + Functions::Function2dForm *m_angular; /**< The P(mu|E) distribution as a Function2dForm. */ + Functions::Function3dForm *m_angularEnergy; /**< The P(E'|E,mu) distribution as a Function3dForm. */ + + public: + AngularEnergyMC( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~AngularEnergyMC( ); + + Functions::Function2dForm const *angular( ) const { return( m_angular ); } /**< Returns the value of the *m_angular* member. */ + Functions::Function3dForm const *angularEnergy( ) const { return( m_angularEnergy ); } /**< Returns the value of the *m_angularEnergy* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================= Uncorrelated ===================== +============================================================ +*/ +class Uncorrelated : public Distribution { + + private: + Functions::Function2dForm *m_angular; /**< The P(mu|E) distribution as a Function2dForm. */ + Functions::Function2dForm *m_energy; /**< The P(E'|E) distribution as a Function2dForm. */ + + public: + Uncorrelated( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Uncorrelated( ); + + Functions::Function2dForm const *angular( ) const { return( m_angular ); } /**< Returns the value of the *m_angular* member. */ + Functions::Function2dForm const *energy( ) const { return( m_energy ); } /**< Returns the value of the *m_energy* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================= MultiGroup3d ===================== +============================================================ +*/ +class MultiGroup3d : public Distribution { + + private: + Functions::Gridded3d m_gridded3d; /**< The multi-group Legendre distribution as a Gridded3d instance. */ + + public: + MultiGroup3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + Functions::Gridded3d const &data( ) const { return( m_gridded3d ); } /**< Returns the value of the *m_gridded3d* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +====================== LLNLAngularEnergy =================== +============================================================ +*/ +class LLNLAngularEnergy : public Distribution { + + private: + Functions::Function2dForm *m_angular; /**< The P(mu|E) distribution as a Function2dForm. */ + Functions::Function3dForm *m_angularEnergy; /**< The P(E'|E,mu) distribution as a Function3dForm. */ + + public: + LLNLAngularEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~LLNLAngularEnergy( ); + + Functions::Function2dForm const *angular( ) const { return( m_angular ); } /**< Returns the value of the *m_angular* member. */ + Functions::Function3dForm const *angularEnergy( ) const { return( m_angularEnergy ); } /**< Returns the value of the *m_angularEnergy* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +============== CoherentPhotoAtomicScattering =============== +============================================================ +*/ +class CoherentPhotoAtomicScattering : public Distribution { + + private: + std::string m_href; /**< xlink to the IncoherentPhotoAtomicScattering instance under the *m_doubleDifferentialCrossSection* node. */ + + public: + CoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ +}; + +/* +============================================================ +============== IncoherentPhotoAtomicScattering ============= +============================================================ +*/ +class IncoherentPhotoAtomicScattering : public Distribution { + + private: + std::string m_href; /**< xlink to the IncoherentPhotoAtomicScattering instance under the *m_doubleDifferentialCrossSection* node. */ + + public: + IncoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ +}; + +/* +============================================================ +======== IncoherentBoundToFreePhotoAtomicScattering ======== +============================================================ +*/ +class IncoherentBoundToFreePhotoAtomicScattering : public Distribution { + + private: + std::string m_href; /**< xlink to the IncoherentPhotoAtomicScattering instance under the *m_doubleDifferentialCrossSection* node. */ + + public: + IncoherentBoundToFreePhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ +}; + +/* +============================================================ +=============== ThermalNeutronScatteringLaw ================ +============================================================ +*/ +class ThermalNeutronScatteringLaw : public Distribution { + + private: + std::string m_href; /**< xlink to the IncoherentPhotoAtomicScattering instance under the *m_doubleDifferentialCrossSection* node. */ + + public: + ThermalNeutronScatteringLaw( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ +}; + +/* +============================================================ +======================== Branching3d ======================= +============================================================ +*/ +class Branching3d : public Distribution { + + private: + std::string m_initialState; /**< The nuclide level that decays, emitting a photon. */ + + public: + Branching3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &initialState( ) const { return( m_initialState ); } /**< Returns the value of the *m_initialState* member. */ +}; + +/* +============================================================ +======================= Reference3d ======================== +============================================================ +*/ +class Reference3d : public Distribution { + + private: + std::string m_href; /**< Link to the other function. */ + + public: + Reference3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_xlink* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +================ CoulombPlusNuclearElastic ================= +============================================================ +*/ + +class CoulombPlusNuclearElastic : public Distribution { + + private: + std::string m_href; /**< Link to the other function. */ + + public: + CoulombPlusNuclearElastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_xlink* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= LLNLLegendre ======================= +============================================================ +*/ + +class LLNLLegendre : public Distribution { +// +// This class is woefully inadequate but some form is needed by the method Product::isCompleteParticle. +// + + public: + LLNLLegendre( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================= Unspecified ====================== +============================================================ +*/ +class Unspecified : public Distribution { + + public: + Unspecified( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +} // End of namespace Distributions. + +/* +============================================================ +=========================== Suite ========================== +============================================================ +*/ +class Suite : public GUPI::Ancestry { + + public: + typedef std::vector
Forms; /**< The typedef the the *m_forms* member. */ + + private: + std::string m_keyName; /**< The name of the key used to look up items in the suite. */ + mutable Forms m_forms; /**< The list of nodes stored within *this*. */ + std::map m_map; /**< A map of *this* node labels to their index in *m_forms*. */ + Styles::Suite const *m_styles; /**< The Styles::Suite for the Protare that *this* resides in. */ + bool m_allowsLazyParsing; /**< If **true**, the suite allows its elements to be lazy parsed. */ + std::string m_href; /**< xlink to the to a Suite that has the elements for this Suite. */ + + // FIXME should we make public or private copy constructor? + + public: + Suite( std::string const &a_keyName = GIDI_labelChars ); + Suite( std::string const &a_moniker, std::string const &a_keyName ); + Suite( Construction::Settings const &a_construction, std::string const &a_moniker, std::string const &a_keyName, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, parseSuite a_parseSuite, + Styles::Suite const *a_styles, bool a_allowsLazyParsing = false ); + ~Suite( ); + + std::string const &keyName( ) const { return( m_keyName ); } /**< Returns a *const* reference to the *m_keyName* member. */ + std::size_t size( ) const { return( m_forms.size( ) ); } /**< Returns the number of node contained by *this*. */ + typedef Forms::iterator iterator; + typedef Forms::const_iterator const_iterator; + iterator begin( ) { return m_forms.begin( ); } /**< The C++ *begin iterator* for *this*. */ + const_iterator begin( ) const { return m_forms.begin( ); } /**< The C++ const *begin iterator* for *this*. */ + iterator end( ) { return m_forms.end( ); } /**< The C++ *end iterator* for *this*. */ + const_iterator end( ) const { return m_forms.end( ); } /**< The C++ const *end iterator* for *this*. */ + int operator[]( std::string const &a_label ) const ; + template T *get( std::size_t a_Index ); + template T const *get( std::size_t a_Index ) const ; + template T *get( std::string const &a_label ); + template T const *get( std::string const &a_label ) const ; + template T *getViaLineage( std::string const &a_label ); + template T *pop( std::size_t a_Index ); + template T *pop( std::string const &a_label ); + + Styles::Suite const *styles( ) { return( m_styles ); } /**< Returns the value of the *m_styles* member. */ + std::string const &href( ) const { return( m_href ); } /**< Returns a reference to the *m_ref* member. */ + + void parse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + parseSuite a_parseSuite, Styles::Suite const *a_styles ); + void add( Form *a_form ); + iterator find( std::string const &a_label, bool a_convertLazyParsingHelperForm = false ); + const_iterator find( std::string const &a_label, bool a_convertLazyParsingHelperForm = false ) const ; + bool has( std::string const &a_label ) const { return( find( a_label ) != m_forms.end( ) ); } + Form *checkLazyParsingHelperForm( std::size_t a_index ); + Form *checkLazyParsingHelperForm( std::size_t a_index ) const ; + iterator checkLazyParsingHelperFormIterator( iterator a_iter ) ; + const_iterator checkLazyParsingHelperFormIterator( const_iterator a_iter ) const ; + + void modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ); + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + std::vector findAllOfMoniker( std::string const &a_moniker ) ; + std::vector findAllOfMoniker( std::string const &a_moniker ) const ; + Form const *findInstanceOfTypeInLineage( std::string const &_label, std::string const &a_moniker ) const ; + Form *findInstanceOfTypeInLineage( Styles::Suite const &a_styles, std::string const &_label, std::string const &a_moniker ) ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + void printFormLabels( std::string const &a_header ) const ; +}; + +/* *********************************************************************************************************//** + * Returns the node at index *a_index*. + * + * @param a_index [in] The index of the node to return. + * + * @return The node at index *a_index*. + ***********************************************************************************************************/ + +template T *Suite::get( std::size_t a_index ) { + + Form *__form = checkLazyParsingHelperForm( a_index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::get( std::size_t ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node at index *a_index*. + * + * @param a_index [in] The index of the node to return. + * + * @return The node at index *a_index*. + ***********************************************************************************************************/ + +template T const *Suite::get( std::size_t a_index ) const { + + Form *__form = checkLazyParsingHelperForm( a_index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::get( std::size_t ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node with label *a_label*. + * + * @param a_label [in] The label of the node to return. + * + * @return The node with label *a_label*. + ***********************************************************************************************************/ + +template T *Suite::get( std::string const &a_label ) { + + int index = (*this)[a_label]; + Form *__form = checkLazyParsingHelperForm( index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::get( std::string const & ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node with label *a_label*. + * + * @param a_label [in] The label of the node to return. + * + * @return The node with label *a_label*. + ***********************************************************************************************************/ + +template T const *Suite::get( std::string const &a_label ) const { + + int index = (*this)[a_label]; + Form *__form = checkLazyParsingHelperForm( index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::get( std::string const & ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Removes the form at index *a_index* and returns it. It is up to the calling function to delete the form, + * otherwise there will be memory leak. + * + * @param a_index [in] The index of the node to return. + * + * @return The node at index *a_index*. + ***********************************************************************************************************/ + +template T *Suite::pop( std::size_t a_index ) { + + Form *__form = checkLazyParsingHelperForm( a_index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::pop( std::size_t ): invalid cast" ); + + for( std::size_t index = a_index + 1; index < m_forms.size( ); ++index ) { + m_forms[index-1] = m_forms[index]; + m_map[m_forms[index-1]->label( )] = index - 1; + } + m_forms.resize( m_forms.size( ) - 1 ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Removes the form with label *a_label* and returns it. It is up to the calling function to delete the form, + * otherwise there will be memory leak. + * + * @param a_label [in] The label of the node to return. + * + * @return The node at index *a_label*. + ***********************************************************************************************************/ + +template T *Suite::pop( std::string const &a_label ) { + + int index = (*this)[a_label]; // This will throw an exception if *a_label* is not in *this*. + Form *__form = checkLazyParsingHelperForm( index ); + T *object = dynamic_cast( __form ); + + if( object == nullptr ) throw Exception( "GIDI::Suite::pop( std::size_t ): invalid cast" ); + + for( std::size_t index2 = index + 1; index2 < m_forms.size( ); ++index2 ) { + m_forms[index2-1] = m_forms[index2]; + m_map[m_forms[index2-1]->label( )] = index2 - 1; + } + m_forms.resize( m_forms.size( ) - 1 ); + + return( object ); + +} + +/* +============================================================ +======================== Component ========================= +============================================================ +*/ +class Component : public Suite { + + public: + Component( Construction::Settings const &a_construction, std::string const &a_moniker, std::string const &a_keyName, + HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + parseSuite a_parseSuite, Styles::Suite const *a_styles ); + Component( std::string const &a_moniker, std::string const &a_keyName = GIDI_labelChars ); +}; + +namespace Table { + +/* +============================================================ +========================== Column ========================== +============================================================ +*/ + +class Column : public Form { + + private: + std::string m_index; /**< The index of the column. */ + std::string m_name; /**< The name of the column. */ + std::string m_unit; /**< The unit of the data in the column. */ + std::string m_types; /**< The types of the data in the column. */ + + public: + Column( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~Column( ); + + std::string const &index( ) const { return( m_index ); } /**< Returns a *const* reference of the *m_index* member. */ + std::string const &name( ) const { return( m_name ); } /**< Returns a *const* reference of the *m_name* member. */ + std::string const &unit( ) const { return( m_unit ); } /**< Returns a *const* reference of the *m_unit* member. */ + std::string const &types( ) const { return( m_types ); } /**< Returns a *const* reference of the *m_types* member. */ + + void setKeyValue( std::string const &a_keyName ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Data =========================== +============================================================ +*/ + +class Data : public GUPI::Ancestry { + + private: + std::string m_sep; + std::string m_body; + + public: + Data( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Data( ); + + std::string const &sep( ) const { return( m_sep ); } /**< Returns a *const* reference of the *m_sep* member. */ + std::string const &body( ) const { return( m_body ); } /**< Returns a *const* reference of the *m_body* member. */ + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Table ========================== +============================================================ +*/ + +class Table : public Form { + + private: + int m_rows; /**< The number of rows in the table. */ + int m_coluns; /**< The number of columns in the table. */ + std::string m_storageOrder; /**< The storageOrder for the data in the table. */ + Suite m_columnHeaders; /**< The column header for the table. */ + Data m_data; /**< The data for the table. */ + + public: + Table( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Table( ); + + int rows( ) const { return( m_rows ); } /**< Returns the value of the *m_rows* member. */ + int columns( ) const { return( m_coluns ); } /**< Returns the value of the *m_coluns* member. */ + std::string const &storageOrder( ) const { return( m_storageOrder ); } /**< Returns the value of the *m_storageOrder* member. */ + Suite const &columnHeaders( ) const { return( m_columnHeaders ); } /**< Returns the value of the *m_columnHeaders* member. */ + Data const &data( ) const { return( m_data ); } /**< Returns the value of the *m_data* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +} // End Table namespace. + +/* +============================================================ +=========================== Flux =========================== +============================================================ +*/ +class Flux : public Form { + + private: + Functions::Function2dForm *m_flux; /**< The flux f(E,mu). */ + + public: + Flux( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Flux( ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================== Group =========================== +============================================================ +*/ +class Group : public Form { + + private: + Grid m_grid; /**< Multi-group boundaries for this Group. */ + + public: + Group( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops ); + Group( Group const &a_group ); + + std::size_t size( ) const { return( m_grid.size( ) ); } /**< Returns the number of multi-group boundaries. */ + inline double &operator[]( std::size_t a_index ) { return( m_grid[a_index] ); } /**< Returns the multi-group boundary at index *a_index*. */ + std::vector data( ) const { return( m_grid.data().vector() ); } /**< Returns the multi-group boundaries. */ + Grid const &grid( ) const { return( m_grid ); } /**< Returns the value of the *m_grid* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +====================== Transportable ======================= +============================================================ +*/ +class Transportable : public Form { + + private: + std::string m_conserve; /**< Conservation flag for the transfer matrices for this particle. Currently, only "*number*" is allowed. */ + Group m_group; /**< Multi-group boundaries for this Transportable. */ + + public: + Transportable( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, Suite *a_parent ); + Transportable( Transportable const &a_transportable ); + + std::string pid( ) const { return( label( ) ); } /**< Returns the value of the particle id for the *Transportable*. */ + std::string const &conserve( ) const { return( m_conserve ); } /**< Returns a const reference to member *m_conserve*. */ + Group const &group( ) const { return( m_group ); } /**< Returns the value of the *m_group* member. */ + std::vector groupBoundaries( ) const { return( m_group.data( ) ); } /**< Returns the multi-group boundaries for this transportable particle. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= ExternalFile ======================= +============================================================ +*/ + +class ExternalFile : public Form { + + private: + std::string m_path; /**< The path to the external file. */ + + public: + ExternalFile( std::string const &a_label, std::string const &a_path ); + ExternalFile( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~ExternalFile( ); + + std::string const &path( ) const { return( m_path ); } + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +==================== Documentation_1_10 ==================== +============================================================ +*/ + +namespace Documentation_1_10 { + +class Documentation : public Form { + + private: + std::string m_label; /**< The label for the documentation. */ + std::string m_text; /**< The documentation text. */ + + public: + Documentation( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~Documentation( ) { } + + std::string const &label( ) const { return m_label; } /**< Returns a const reference to the *m_label* member. */ + std::string const &text( ) const { return m_text; } /**< Returns a const reference to the *m_text* member. */ + +}; + +/* +============================================================ +=========================== Suite ========================== +============================================================ +*/ +class Suite : public GIDI::Suite { + + public: + Suite( ); + + void parse( HAPI::Node const &a_node, SetupInfo &a_setupInfo ); +}; + +} // End of namespace Documentation_1_10. + +/* +============================================================ +===================== ExternalFiles stuff ================== +============================================================ +*/ + +namespace ExternalFiles { + +/* +============================================================ +========================== Suite =========================== +============================================================ +*/ +class Suite : public GIDI::Suite { + + public: + void registerBinaryFiles(std::string a_parentDir, SetupInfo &a_setupInfo); + +}; + +} // End of namespace ExternalFiles. + +/* +============================================================ +========================= Styles stuff ===================== +============================================================ +*/ + +namespace Styles { + +/* +============================================================ +========================== Base ============================ +============================================================ +*/ +class Base : public Form { + + private: + std::string m_date; /**< The GNDS <**date**> attribute. */ + std::string m_label; /**< The GNDS <**label**> attribute. */ + std::string m_derivedStyle; /**< The GNDS <**derivedFrom**> attribute. */ + GUPI::Documentation *m_documentation; + + public: + Base( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~Base( ); + + std::string const &date( ) const { return( m_date ); } /**< Returns the value of the *m_date* member. */ + std::string const &label( ) const { return( m_label ); } /**< Returns the value of the *m_label* member. */ + std::string const &derivedStyle( ) const { return( m_derivedStyle ); } /**< Returns the value of the *m_derivedStyle* member. */ + bool hasDocumentation( ) { return ( m_documentation != nullptr ); } + GUPI::Documentation *documentation( ) { return ( m_documentation ); } + virtual PhysicalQuantity const &temperature( ) const = 0; + Base const *getDerivedStyle( ) const ; + Base const *getDerivedStyle( std::string const &a_moniker ) const ; + + std::string baseXMLAttributes( GUPI::WriteInfo &a_writeInfo ) const ; +}; + +/* +============================================================ +======================== Evaluated ========================= +============================================================ +*/ +class Evaluated : public Base { + + private: + std::string m_library; /**< The GNDS <**library**> attribute. */ + std::string m_version; /**< The GNDS <**version**> attribute. */ + PhysicalQuantity m_temperature; /**< The GNDS <**temperature**> node data. */ + AxisDomain m_projectileEnergyDomain; /**< The GNDS <**projectileEnergyDomain**> node data. */ + + public: + Evaluated( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + + PhysicalQuantity const &temperature( ) const { return( m_temperature ); } /**< Returns the value of the *m_temperature* member. */ + AxisDomain const &projectileEnergyDomain( ) const { return( m_projectileEnergyDomain ); } + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +================ CrossSectionReconstructed ================= +============================================================ +*/ +class CrossSectionReconstructed : public Base { + + private: + PhysicalQuantity *m_temperature; /**< The GNDS <**temperature**> node data. */ + + public: + CrossSectionReconstructed( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~CrossSectionReconstructed( ); + + PhysicalQuantity const &temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +============= AngularDistributionReconstructed ============= +============================================================ +*/ +class AngularDistributionReconstructed : public Base { + + private: + PhysicalQuantity *m_temperature; /**< The GNDS <**temperature**> node data. */ + + public: + AngularDistributionReconstructed( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~AngularDistributionReconstructed( ); + + PhysicalQuantity const &temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +============= CoulombPlusNuclearElasticMuCutoff ============ +============================================================ +*/ +class CoulombPlusNuclearElasticMuCutoff : public Base { + + private: + double m_muCutoff; /**< The GNDS <**muCutoff**> attribute. */ + + public: + CoulombPlusNuclearElasticMuCutoff( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + + PhysicalQuantity const &temperature( ) const ; + double muCutoff( ) const { return( m_muCutoff ); } /**< Returns the value of the *m_muCutoff* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= Realization ======================== +============================================================ +*/ +class Realization : public Base { + + public: + Realization( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + + PhysicalQuantity const & temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +=================== AverageProductData ===================== +============================================================ +*/ +class AverageProductData : public Base { + + private: + PhysicalQuantity *m_temperature; /**< The GNDS <**temperature**> node data. */ + + public: + AverageProductData( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + ~AverageProductData( ); + + PhysicalQuantity const &temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +===================== MonteCarlo_cdf ======================= +============================================================ +*/ +class MonteCarlo_cdf : public Base { + + public: + MonteCarlo_cdf( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + + PhysicalQuantity const &temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== MultiGroup ======================== +============================================================ +*/ +class MultiGroup : public Base { + + private: + int m_maximumLegendreOrder; /**< The GNDS <**lMax**> attribute. */ + GIDI::Suite m_transportables; /**< The GNDS <**transportables**> node. */ + + public: + MultiGroup( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, GIDI::Suite *a_parent ); + ~MultiGroup( ); + + int maximumLegendreOrder( ) const { return( m_maximumLegendreOrder ); } /**< Returns the value of the *m_maximumLegendreOrder* member. */ + PhysicalQuantity const &temperature( ) const ; + + std::vector groupBoundaries( std::string const &a_productID ) const ; + GIDI::Suite const &transportables( ) const { return( m_transportables ); } /**< Returns the value of the *m_transportables* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================= Heated =========================== +============================================================ +*/ +class Heated : public Base { + + private: + PhysicalQuantity m_temperature; /**< The GNDS <**temperature**> node data. */ + + public: + Heated( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ); + PhysicalQuantity const & temperature( ) const { return( m_temperature ); } /**< Returns the value of the *m_temperature* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +===================== HeatedMultiGroup ===================== +============================================================ +*/ +class HeatedMultiGroup : public Base { + + private: + GIDI::Suite m_transportables; /**< The GNDS <**transportables**> node. For GNDS 2.0 and above. */ + Flux m_flux; /**< The GNDS <**flux**> node. */ + Functions::Gridded1d m_inverseSpeed; /**< The GNDS <**inverseSpeed**> node data. */ + std::string m_parameters; /**< The GNDS <**parameters**> attribute. Only used for GNDS 1.10. */ + + public: + HeatedMultiGroup( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, GIDI::Suite *a_parent ); + ~HeatedMultiGroup( ); + + PhysicalQuantity const &temperature( ) const ; + + GIDI::Suite const &transportables( ) const { return( m_transportables ); } /**< Returns a const reference to *m_transportables*. */ + Transportable const &transportable( std::string const &a_ID ) const ; + std::vector groupBoundaries( std::string const &a_ID ) const ; + Flux const &flux( ) const { return( m_flux ); } /**< Returns a const reference to member *m_flux*. */ + std::string const ¶meters( ) const { return( m_parameters ); } /**< Returns a const reference to member *m_parameters*. Only used for GNDS 1.10. */ + + Vector inverseSpeedData( ) const { return( m_inverseSpeed.data( ) ); } /**< Returns the value of the *m_inverseSpeed* data. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +==================== SnElasticUpScatter ==================== +============================================================ +*/ +class SnElasticUpScatter : public Base { + + private: + int m_upperCalculatedGroup; /**< The GNDS <**upperCalculatedGroup**> attribute. */ + + public: + SnElasticUpScatter( HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, GIDI::Suite *a_parent ); + ~SnElasticUpScatter( ); + + PhysicalQuantity const &temperature( ) const ; + int upperCalculatedGroup( ) const { return( m_upperCalculatedGroup ); } /**< Returns the value of the *m_upperCalculatedGroup* data. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +==================== GriddedCrossSection =================== +============================================================ +*/ +class GriddedCrossSection : public Base { + + private: + Grid m_grid; /**< The GNDS <**grid**> node. */ + + public: + GriddedCrossSection( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, GIDI::Suite *a_parent ); + ~GriddedCrossSection( ); + + PhysicalQuantity const &temperature( ) const ; + Grid const &grid( ) const { return( m_grid ); } /**< Returns the value of the *m_grid*. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +=================== URR_probabilityTables ================== +============================================================ +*/ +class URR_probabilityTables : public Base { + + public: + URR_probabilityTables( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, GIDI::Suite *a_parent ); + ~URR_probabilityTables( ); + + PhysicalQuantity const &temperature( ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +========================== Suite =========================== +============================================================ +*/ +class Suite : public GIDI::Suite { + + public: + Suite( ); + + std::string const *findLabelInLineage( GIDI::Suite const &a_suite, std::string const &a_label ) const ; +}; + +/* +============================================================ +===================== TemperatureInfo ====================== +============================================================ +*/ + +class TemperatureInfo { + + private: + PhysicalQuantity m_temperature; /**< The temperature for this TemperatureInfo. */ + std::string m_heatedCrossSection; /**< The label for the *heatedCrossSection* data for this temperature. */ + std::string m_griddedCrossSection; /**< The label for the *griddedCrossSection* data for this temperature. */ + std::string m_URR_probabilityTables; /**< The label for the *URR_probabilityTables* data for this temperature. */ + std::string m_heatedMultiGroup; /**< The label for the *heatedMultiGroup* data for this temperature. */ + std::string m_SnElasticUpScatter; /**< The label for the *SnElasticUpScatter* data for this temperature. */ + + public: + TemperatureInfo( ); + TemperatureInfo( PhysicalQuantity const &a_temperature, std::string const &a_heatedCrossSection, std::string const &a_griddedCrossSection, + std::string const &a_URR_probabilityTables, std::string const &a_heatedMultiGroup, std::string const &a_SnElasticUpScatter ); + + PhysicalQuantity const &temperature( ) const { return( m_temperature ); } /**< Returns the value of the *m_temperature*. */ + std::string const &heatedCrossSection( ) const { return( m_heatedCrossSection ); } /**< Returns the value of the *m_heatedCrossSection*. */ + std::string const &griddedCrossSection( ) const { return( m_griddedCrossSection ); } /**< Returns the value of the *m_griddedCrossSection*. */ + std::string const &URR_probabilityTables( ) const { return( m_URR_probabilityTables ); } /**< Returns the value of the *m_URR_probabilityTables*. */ + std::string const &heatedMultiGroup( ) const { return( m_heatedMultiGroup ); } /**< Returns the value of the *m_heatedMultiGroup*. */ + std::string const &SnElasticUpScatter( ) const { return( m_SnElasticUpScatter ); } /**< Returns the value of the *m_SnElasticUpScatter*. */ + + void print( ) const ; +}; + +typedef std::vector TemperatureInfos; + +} // End of namespace Styles. + +/* +========================================================= +*/ +template T *Suite::getViaLineage( std::string const &a_label ) { + + std::string const *label = m_styles->findLabelInLineage( (Styles::Suite &) *this, a_label ); + + return( get( *label ) ); +} + +/* +============================================================ +==================== Transporting stuff ==================== +============================================================ +*/ + +namespace Transporting { + +class ProcessedFlux; + +enum class Mode { multiGroup, multiGroupWithSnElasticUpScatter, MonteCarloContinuousEnergy }; +enum class DelayedNeutrons { off, on }; +enum class Conserve { number, energyOut }; + +/* +============================================================ +========================== MultiGroup ====================== +============================================================ +*/ +class MultiGroup { + + private: + std::string m_label; /**< The label for the multi-group. */ + std::vector m_boundaries; /**< The list of boundaries for the multi-group. */ + + public: + MultiGroup( ); + MultiGroup( std::string const &a_label, int a_length, double const *a_values ); + MultiGroup( std::string const &a_label, std::vector const &a_boundaries ); + MultiGroup( Group const &a_group ); + MultiGroup( MultiGroup const &a_multiGroup ); + ~MultiGroup( ); + MultiGroup &operator=( MultiGroup const &a_rhs ); + + double operator[]( int const a_index ) const { return( m_boundaries[a_index] ); } /**< Returns the multi-group boundary at index *a_index*. */ + std::size_t size( ) const { return( m_boundaries.size( ) ); } /**< Returns the number of multi-group boundaries. */ + int numberOfGroups( ) const { return( (int) ( m_boundaries.size( ) - 1 ) ); } /**< Returns the number of multi-group groups. */ + std::vector const &boundaries( ) const { return( m_boundaries ); } /**< Returns the value of the *m_boundaries* member. */ + double const *pointer( ) const { return( &(m_boundaries[0]) ); } /**< Returns a pointer to the beginning of the multi-group boundaries. */ + + void set( std::string const &a_label, std::vector const &a_boundaries ); + std::string const &label( ) const { return( m_label ); } /**< Returns the value of the *m_label* member. */ + int multiGroupIndexFromEnergy( double a_energy, bool a_encloseOutOfRange ) const ; + void print( std::string const &a_indent, bool a_outline = false, int a_valuesPerLine = 10 ) const ; +}; + +/* +============================================================ +==================== Groups_from_bdfls ===================== +============================================================ +*/ +class Groups_from_bdfls { + + private: + std::vector m_multiGroups; /**< List of MultiGroup's read in from the bdfls file. */ + + public: + Groups_from_bdfls( std::string const &a_fileName ); + Groups_from_bdfls( char const *a_fileName ); + ~Groups_from_bdfls( ); + + MultiGroup viaLabel( std::string const &a_label ) const ; + MultiGroup getViaGID( int a_gid ) const; + std::vector labels( ) const; + std::vector GIDs( ) const; + void print( bool a_outline = true, int a_valuesPerLine = 10 ) const; + + private: + void initialize( char const *a_fileName ); +}; + +/* +============================================================ +========================= Flux_order ======================= +============================================================ +*/ +class Flux_order { + + private: + int m_order; /**< The Legendre order of the flux. */ + std::vector m_energies; /**< List of flux energies. */ + std::vector m_fluxes; /**< List of flux values - one for each element of m_energies. */ + + public: + Flux_order( int a_order, int a_length, double const *a_energies, double const *a_fluxes ); + Flux_order( int a_order, std::vector const &a_energies, std::vector const &a_fluxes ); + Flux_order( Flux_order const &a_fluxOrder ); + ~Flux_order( ); + + int order( ) const { return( m_order ); } /**< Returns the value of the *m_order* member. */ + int size( ) const { return( (int) m_energies.size( ) ); } /**< Returns the number of energy, flux pairs. */ + double const *energies( ) const { return( &(m_energies[0]) ); } /**< Returns a pointer to the beginning of the energy data. */ + std::vector const &v_energies( ) const { return( m_energies ); } /**< Returns the value of the *m_energies* member. */ + double const *fluxes( ) const { return( &(m_fluxes[0]) ); } /**< Returns a pointer to the beginning of the flux data. */ + std::vector const &v_fluxes( ) const { return( m_fluxes ); } /**< Returns the value of the *m_fluxes* member. */ + void print( int a_valuesPerLine = 10 ) const; +}; + +/* +============================================================ +============================ Flux ========================== +============================================================ +*/ +class Flux { + + private: + std::string m_label; /**< Label for the flux. */ + double m_temperature; /**< Temperature of the material that produced this flux. */ + std::vector m_fluxOrders; /**< List of fluxes for each Legendre order, *l*, sorted by Legendre order starting with *l* = 0. */ + + public: + Flux( std::string const &a_label, double a_temperature_MeV ); + Flux( char const *a_label, double a_temperature_MeV ); + Flux( Flux const &a_flux ); + ~Flux( ); + + Flux_order const &operator[]( int a_order ) const { return( m_fluxOrders[a_order] ); } /**< Returns the Flux_order for Legendre order *a_order*. */ + int maxOrder( ) const { return( (int) m_fluxOrders.size( ) - 1 ); } /**< Returns the maximum number of Legendre orders for *this*. */ + int size( ) const { return( (int) m_fluxOrders.size( ) ); } /**< Returns the number of stored Legendre orders. */ + + std::string const &label( ) const { return( m_label ); } /**< Returns the value of the *m_label* member. */ + double temperature( ) const { return( m_temperature ); } /**< Returns the value of the *m_temperature* member. */ + void addFluxOrder( Flux_order const &a_fluxOrder ); + ProcessedFlux process( std::vector const &a_multiGroup ) const ; + void print( std::string const &a_indent, bool a_outline = true, int a_valuesPerLine = 10 ) const ; +}; + +/* +============================================================ +===================== Fluxes_from_bdfls ==================== +============================================================ +*/ +class Fluxes_from_bdfls { + + private: + std::vector m_fluxes; /**< The list of Flux read in from the *bdfls* file. */ + + public: + Fluxes_from_bdfls( std::string const &a_fileName, double a_temperature_MeV ); + Fluxes_from_bdfls( char const *a_fileName, double a_temperature_MeV ); + ~Fluxes_from_bdfls( ); + + Flux getViaFID( int a_fid ) const ; + Functions::XYs3d *get3dViaFID( int a_fid ) const ; + std::vector labels( ) const ; + std::vector FIDs( ) const ; + void print( bool a_outline = true, int a_valuesPerLine = 10 ) const ; + + private: + void initialize( char const *a_fileName, double a_temperature_MeV ); +}; + +/* +============================================================ +======================= ProcessedFlux ====================== +============================================================ +*/ +class ProcessedFlux { + + private: + double m_temperature; /**< The temperature of the material that produced the flux. */ + std::vector m_multiGroupFlux; /**< The Legendre order = 0 multi-grouped flux. */ + + public: + ProcessedFlux( double a_temperature, std::vector const &a_multiGroupFlux ); + ProcessedFlux( ProcessedFlux const &a_processedFlux ); + ~ProcessedFlux( ); + + double temperature( ) const { return( m_temperature ); } /**< Returns the value of the *m_temperature* member. */ + std::vector const &multiGroupFlux( ) const { return( m_multiGroupFlux ); } /**< Returns the value of the *m_multiGroupFlux* member. */ +}; + +/* +============================================================ +========================= Particle ========================= +============================================================ +*/ +class Particle { + + private: + std::string m_pid; /**< The PoPs id for the particle. */ + Transporting::Mode m_mode; /**< Indicates the type of transport the user is likely, but not guaranteed, to do. */ + Transporting::Conserve m_conserve; /**< Indicates the conservation option for this transportable. */ + MultiGroup m_multiGroup; /**< Coarse multi-group to collapse to. */ + MultiGroup m_fineMultiGroup; /**< Fine multi-group to collapse from. For internal use only. */ + std::vector m_collapseIndices; /**< Indices for collapsing to m_multiGroup. */ + std::vector m_fluxes; /**< One flux for each temperature. */ + std::vector m_processedFluxes; /**< One processed flux for each temperature. */ + + public: + Particle( std::string const &a_pid, MultiGroup const &a_multiGroup, Functions::Function3dForm const &a_fluxes, + Transporting::Mode a_mode = Transporting::Mode::multiGroup ); + Particle( std::string const &a_pid, Transporting::Mode a_mode = Transporting::Mode::multiGroup ); + Particle( std::string const &a_pid, MultiGroup const &a_multiGroup, Transporting::Mode a_mode = Transporting::Mode::multiGroup ); + Particle( Particle const &a_particle ); + ~Particle( ); + + std::string const &pid( ) const { return( m_pid ); } /**< Returns the value of the *m_pid* member. */ + Transporting::Mode mode( ) const { return( m_mode ); } /**< Returns the value of the *m_mode* member. */ + Transporting::Conserve conserve( ) const { return( m_conserve ); } /**< Returns the value of the *m_conserve* member. */ + int multiGroupIndexFromEnergy( double a_e_in, bool a_encloseOutOfRange ) const { return( m_multiGroup.multiGroupIndexFromEnergy( a_e_in, a_encloseOutOfRange ) ); } + /**< Returns the coarse multi-group index corresponding to energy *a_e_in*. See MultiGroup::multiGroupIndexFromEnergy. */ + int numberOfGroups( ) const { return( m_multiGroup.numberOfGroups( ) ); } /**< Returns the number of coarse multi-group groups. */ + MultiGroup multiGroup( ) const { return( m_multiGroup ); } /**< Returns the value of the *m_multiGroup* member. */ + MultiGroup fineMultiGroup( ) const { return( m_fineMultiGroup ); } /**< Returns the value of the *m_fineMultiGroup* member. */ + int appendFlux( Flux const &a_flux ); + ProcessedFlux const *nearestProcessedFluxToTemperature( double a_temperature ) const; + std::vector const &collapseIndices( ) const { return( m_collapseIndices ); } /**< Returns the value of the *m_collapseIndices* member. */ + + void process( Transportable const &a_transportable, double a_epsilon = 1e-6 ); + void print( std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== Particles ========================= +============================================================ +*/ +class Particles { + + private: + std::map m_particles; + + public: + Particles( ); + ~Particles( ); + + std::map &particles( ) { return( m_particles ); } /**< Returns the value of the *m_particles* member. */ + std::map const &particles( ) const { return( m_particles ); } /**< Returns the value of the *m_particles* member. */ + Particle const *particle( std::string const &a_particleID ) const; + bool add( Particle const &a_particle ); + bool remove( std::string const &a_particleID ); + void clear( ) { m_particles.clear( ); } + bool hasParticle( std::string const &a_id ) const ; + + void process( Protare const &a_protare, std::string const &a_label ); + + std::vector sortedIDs( bool a_orderIsAscending = true ) const ; + + void print( ) const ; +}; + +/* +============================================================ +========================= Settings ========================= +============================================================ +*/ +class Settings { + + private: + std::string m_projectileID; /**< The PoPs id of the projectile. */ + DelayedNeutrons m_delayedNeutrons; /**< If **true**, include delayed neutrons when returning or setting up data. */ + bool m_nuclearPlusCoulombInterferenceOnly; /**< If **true**, for charge particle as projectile and elastic scattering, the Rutherford term is excluded from the elastic reaction. */ + bool m_throwOnError; /**< For methods that have an argument of type *LUPI:StatusMessageReporting**, if this member is true, an error will cause a thorw; otherwise, the error will be ignored and reported to the *LUPI:StatusMessageReporting** instance. */ + bool m_zeroDepositionIfAllProductsTracked; /**< For a reaction, if **true* and all products are tracked, then the deposition energy will be set to zero, independent of that the data may yield. Otherwise, the data results are returned. */ + + public: + Settings( std::string const &a_projectileID, DelayedNeutrons a_delayedNeutrons ); + ~Settings( ); + + std::string const &projectileID( ) const { return( m_projectileID ); } /**< Returns the value of the *m_projectileID* member. */ + + DelayedNeutrons delayedNeutrons( ) const { return( m_delayedNeutrons ); } /**< Returns the value of the *m_delayedNeutrons* member. */ + void setDelayedNeutrons( DelayedNeutrons a_delayedNeutrons ) { m_delayedNeutrons = a_delayedNeutrons; } /**< Sets the *m_delayedNeutrons* member to *a_delayedNeutrons*. */ + + bool nuclearPlusCoulombInterferenceOnly( ) const { return( m_nuclearPlusCoulombInterferenceOnly ); } /**< Returns the value of the *m_nuclearPlusCoulombInterferenceOnly* member. */ + void setNuclearPlusCoulombInterferenceOnly( bool a_nuclearPlusCoulombInterferenceOnly ) + { m_nuclearPlusCoulombInterferenceOnly = a_nuclearPlusCoulombInterferenceOnly; } /**< Sets the *m_nuclearPlusCoulombInterferenceOnly* to *a_nuclearPlusCoulombInterferenceOnly*. */ + + bool zeroDepositionIfAllProductsTracked( ) const { return( m_zeroDepositionIfAllProductsTracked ); } /**< Returns the value of the *m_zeroDepositionIfAllProductsTracked* member. */ + void setZeroDepositionIfAllProductsTracked( bool a_zeroDepositionIfAllProductsTracked ) + { m_zeroDepositionIfAllProductsTracked = a_zeroDepositionIfAllProductsTracked; } /**< Sets the *m_zeroDepositionIfAllProductsTracked* to *a_zeroDepositionIfAllProductsTracked*. */ + + bool throwOnError( ) const { return( m_throwOnError ); } + void setThrowOnError( bool a_throwOnError ) { m_throwOnError = a_throwOnError; } + + Vector multiGroupZeroVector( Particles const &a_particles, bool a_collapse = true ) const ; + Matrix multiGroupZeroMatrix( Particles const &a_particles, std::string const &a_particleID, bool a_collapse = true ) const ; + +// void print( ) const ; +}; + +/* +============================================================ +============================ MG ============================ +============================================================ +*/ +class MG : public Settings { + + private: + Mode m_mode; /**< Specifies the type of data to use or retrieve for transport codes. */ + bool m_useMultiGroupSummedData; /**< If **true** and multi-grouped summed data available in protare, use it instead of summing data over reactions. */ + + public: + MG( std::string const &a_projectileID, Mode a_mode, DelayedNeutrons a_delayedNeutrons ); + + Mode mode( ) const { return( m_mode ); } /**< Returns the value of the *m_mode* member. */ + void setMode( Mode a_mode ) { m_mode = a_mode; } /**< Sets the *m_mode* member to *a_mode*. */ + + bool useMultiGroupSummedData( ) const { return( m_useMultiGroupSummedData ); } /**< Returns the value of the *m_useMultiGroupSummedData* member. */ + void setUseMultiGroupSummedData( bool a_useMultiGroupSummedData ) { m_useMultiGroupSummedData = a_useMultiGroupSummedData; } + /**< Sets the *m_useMultiGroupSummedData* member to *a_useMultiGroupSummedData*. */ + + Form const *form( LUPI::StatusMessageReporting &a_smr, GIDI::Suite const &a_suite, Styles::TemperatureInfo const &a_temperatureInfo, + std::string a_dataType ) const ; +}; + +} // End of namespace Transporting. + +namespace GRIN { + +/* +============================================================ +================= InelasticIncidentEnergy ================== +============================================================ +*/ + +class InelasticIncidentEnergy : public Form { + + private: + double m_energy; + std::string m_unit; + Table::Table m_table; + + public: + InelasticIncidentEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~InelasticIncidentEnergy( ); + + double energy( ) const { return( m_energy ); } + std::string const &unit( ) const { return( m_unit ); } + Table::Table const &table( ) const { return( m_table ); } +}; + +/* +============================================================ +================= CaptureLevelProbability ================== +============================================================ +*/ + +class CaptureLevelProbability : public Form { + + private: + double m_probabilty; + double m_spin; + std::string m_spinUnit; + int m_parity; + std::string m_capturePrimaryToContinua; + Table::Table m_table; + + public: + CaptureLevelProbability( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~CaptureLevelProbability( ); + + double probabilty( ) const { return( m_probabilty ); } + double spin( ) const { return( m_spin ); } + std::string const &spinUnit( ) const { return( m_spinUnit ); } + int parity( ) const { return( m_parity ); } + std::string const &capturePrimaryToContinua( ) const { return( m_capturePrimaryToContinua ); } + Table::Table const &table( ) const { return( m_table ); } +}; + +/* +============================================================ +=================== GRIN_continuumGammas =================== +============================================================ +*/ + +class GRIN_continuumGammas : public GUPI::Ancestry { + + private: + PhysicalQuantity m_captureNeutronSeparationEnergy; + PhysicalQuantity m_maximumCaptureIncidentEnergy; + PoPI::Database m_pops; + Suite m_inelasticIncidentEnergies; + Suite m_captureLevelProbabilities; + std::string m_captureResidualId; /**< The GNDS PoPs' id of the heavy capture residual particle. */ + int m_captureResidualIntid; /**< The intid of the heavy capture residual particle. */ + int m_captureResidualIndex; /**< The PoPI index of the heavy capture residual particle. */ + double m_captureResidualMass; /**< The mass if the heavy capture residual particle. */ + + public: + GRIN_continuumGammas( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, ProtareSingle const &a_protare, Styles::Suite const *a_styles ); + ~GRIN_continuumGammas( ); + + PhysicalQuantity const &captureNeutronSeparationEnergy( ) const { return( m_captureNeutronSeparationEnergy ); } + PhysicalQuantity const &maximumCaptureIncidentEnergy( ) const { return( m_maximumCaptureIncidentEnergy ); } + PoPI::Database const &pops( ) const { return( m_pops ); } + Suite const &inelasticIncidentEnergies( ) const { return( m_inelasticIncidentEnergies ); } + Suite const &captureLevelProbabilities( ) const { return( m_captureLevelProbabilities ); } + std::string captureResidualId( ) const { return( m_captureResidualId ); } /**< Returns the value of the *m_captureResidualId* member. */ + int captureResidualIntid( ) const { return( m_captureResidualIntid ); } /**< Returns the value of the *m_captureResidualIntid* member. */ + int captureResidualIndex( ) const { return( m_captureResidualIndex ); } /**< Returns the value of the *m_captureResidualIndex* member. */ + double captureResidualMass( ) const { return( m_captureResidualMass ); } /**< Returns the value of the *m_captureResidualMass* member. */ + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; +}; + +} // End of namespace GRIN. + +/* +============================================================ +========================= Product ========================== +============================================================ +*/ +class Product : public Form { + + private: + ParticleInfo m_particle; /**< The products *ParticleInfo* data. */ + ParticleInfo m_GNDS_particle; /**< The products *ParticleInfo* data. This is the product's equivalent of the Protare::m_GNDS_target member. */ + + int m_productMultiplicity; /**< Product integer multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer. */ + bool m_treatProductAsIfInfinityMass; /**< If **true**, the product is photo-atomic or TNSL target and should be handled as if it has infinite mass. Ths is, energy and momentum data are returned with 0 value. */ + Component m_multiplicity; /**< The GNDS <**multiplicity**> node. */ + Component m_distribution; /**< The GNDS <**distribution**> node. */ + Component m_averageEnergy; /**< The GNDS <**averageEnergy**> node. */ + Component m_averageMomentum; /**< The GNDS <**averageMomentum**> node. */ + OutputChannel *m_outputChannel; /**< The GNDS <**outputChannel**> node if present. */ + + public: + Product( PoPI::Database const &a_pops, std::string const &a_productID, std::string const &a_label ); + Product( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, Suite *a_parent, Styles::Suite const *a_styles ); + ~Product( ); + + ParticleInfo const &particle( ) const { return( m_particle ); } /**< Returns the value of the *m_particle* member. */ + void setParticle( ParticleInfo const &a_particle ) { m_particle = a_particle; } /**< Sets *m_particle* to *a_particle*. */ + std::string pid( ) const { return( m_particle.ID( ) ); } + ParticleInfo const &GNDS_particle( ) const { return( m_GNDS_particle ); } /**< Returns a const reference to the *m_GNDS_particle* member. */ + ParticleInfo &GNDS_particle( ) { return( m_GNDS_particle ); } /**< Returns the value of the *m_GNDS_particle* member. */ + int depth( ) const ; + + Component &multiplicity( ) { return( m_multiplicity ); } /**< Returns a reference to the *m_multiplicity* member. */ + Component const &multiplicity( ) const { return( m_multiplicity ); } /**< Returns a const reference to the *m_multiplicity* member. */ + Component &distribution( ) { return( m_distribution ); } /**< Returns a reference to the *m_distribution* member. */ + Component const &distribution( ) const { return( m_distribution ); } /**< Returns a reference to the *m_distribution* member. */ + Component &averageEnergy( ) { return( m_averageEnergy ); } /**< Returns a reference to the *m_averageEnergy* member. */ + Component const &averageEnergy( ) const { return( m_averageEnergy ); } /**< Returns a const reference to the *m_averageEnergy* member. */ + Component &averageMomentum( ) { return( m_averageMomentum ); } /**< Returns a reference to the *m_averageMomentum* member. */ + Component const &averageMomentum( ) const { return( m_averageMomentum ); } /**< Returns a const reference to the *m_averageMomentum* member. */ + OutputChannel *outputChannel( ) const { return( m_outputChannel ); } /**< Returns a reference to the *m_outputChannel* member. */ + + void modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ); + + bool hasFission( ) const ; + bool isDelayedFissionNeutronComplete( bool a_isDelayedNeutron ) const ; + bool areAllProductsTracked( Transporting::Particles const &a_particles ) const ; + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int productMultiplicity( std::string const &a_productID ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + bool a_final ) const ; + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, + int a_order ) const ; + + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + void continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const ; + void mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const ; + + bool isCompleteParticle( ) const ; + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + void calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +====================== DelayedNeutron ====================== +============================================================ +*/ +class DelayedNeutron : public Form { + + private: + int m_delayedNeutronIndex; /**< If this is a delayed fission neutron, this is its index. */ + Suite m_rate; /**< The GNDS <**rate**> node. */ + Product m_product; /**< The GNDS <**product**> node. */ + + public: + DelayedNeutron( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent, Styles::Suite const *a_styles ); + ~DelayedNeutron( ); + + int delayedNeutronIndex( ) const { return( m_delayedNeutronIndex ); } + void setDelayedNeutronIndex( int a_delayedNeutronIndex ) { m_delayedNeutronIndex = a_delayedNeutronIndex; } + Suite &rate( ) { return( m_rate ); } + Suite const &rate( ) const { return( m_rate ); } + Product &product( ) { return( m_product ); } + Product const &product( ) const { return( m_product ); } + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + void productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int productMultiplicity( std::string const &a_productID ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + void continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const ; + void mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const ; + void calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=================== DelayedNeutronProduct ================== +============================================================ +*/ +class DelayedNeutronProduct { + + private: + int m_delayedNeutronIndex; /**< If this is a delayed fission neutron, this is its index. */ + PhysicalQuantity m_rate; + Product const *m_product; + + public: + DelayedNeutronProduct( int a_delayedNeutronIndex, PhysicalQuantity a_rate, Product const *a_product ) : + m_delayedNeutronIndex( a_delayedNeutronIndex ), + m_rate( a_rate ), + m_product( a_product ) { + } + DelayedNeutronProduct( DelayedNeutronProduct const &a_delayedNeutronProduct ) : + m_delayedNeutronIndex( a_delayedNeutronProduct.delayedNeutronIndex( ) ), + m_rate( a_delayedNeutronProduct.rate( ) ), + m_product( a_delayedNeutronProduct.product( ) ) { + } + ~DelayedNeutronProduct( ) {} + + int delayedNeutronIndex( ) const { return( m_delayedNeutronIndex ); } + PhysicalQuantity rate( ) const { return( m_rate ); } + Product const *product( ) const { return( m_product ); } +}; + +typedef std::vector DelayedNeutronProducts; + +/* +============================================================ +==================== FissionFragmentData =================== +============================================================ +*/ +class FissionFragmentData : public GUPI::Ancestry { + + private: + Suite m_delayedNeutrons; /**< The GNDS <**delayedNeutrons**> node. This members stores a list of DelayedNeutron instances. */ + Component m_fissionEnergyReleases; /**< The GNDS <**fissionEnergyReleases**> node. */ + + public: + FissionFragmentData( ); + FissionFragmentData( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Styles::Suite const *a_styles ); + ~FissionFragmentData( ); + + Suite &delayedNeutrons( ) { return( m_delayedNeutrons ); } + Suite const &delayedNeutrons( ) const { return( m_delayedNeutrons ); } + Component &fissionEnergyReleases( ) { return( m_fissionEnergyReleases ); } + Component const &fissionEnergyReleases( ) const { return( m_fissionEnergyReleases ); } + + bool isDelayedFissionNeutronComplete( ) const ; + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + void productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int productMultiplicity( std::string const &a_productID ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + bool a_final ) const ; + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + + void delayedNeutronProducts( DelayedNeutronProducts &a_delayedNeutronProducts ) const ; + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + void continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const ; + void mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const ; + void calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +======================= OutputChannel ====================== +============================================================ +*/ +class OutputChannel : public GUPI::Ancestry { + + private: + bool m_twoBody; /**< true if the output channel is two-body and false otherwise. */ + bool m_fissions; /**< true if the output channel is a fission channel and false otherwise. */ + std::string m_process; /**< The GNDS *process* attribute for the channel. */ + + Component m_Q; /**< The GNDS <**Q**> node. */ + Suite m_products; /**< The GNDS <**products**> node. */ + FissionFragmentData m_fissionFragmentData; /**< The GNDS <**fissionFragmentData**> node. */ + Construction::FissionResiduals m_fissionResiduals; /**< This member specifies what fission redisual products will be added to the list of products produced in a fission reaction. */ + + public: + OutputChannel( bool a_twoBody, bool a_fissions, std::string a_process ); + OutputChannel( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, Styles::Suite const *a_styles, bool a_isFission, bool a_addFissionResiduals ); + ~OutputChannel( ); + + bool twoBody( ) const { return( m_twoBody ); } /**< Returns the value of the *m_twoBody* member. */ + std::string process( ) const { return( m_process ); } /**< Returns the value of the *m_process* member. */ + int depth( ) const ; + + Component &Q( ) { return( m_Q ); } /**< Returns a reference to the *m_Q* member. */ + Component const &Q( ) const { return( m_Q ); } /**< Returns a reference to the *m_Q* member. */ + Suite &products( ) { return( m_products ); } /**< Returns a reference to the *m_products* member. */ + Suite const &products( ) const { return( m_products ); } /**< Returns a reference to the *m_products* member. */ + FissionFragmentData &fissionFragmentData( ) { return( m_fissionFragmentData ); } + FissionFragmentData const &fissionFragmentData( ) const { return( m_fissionFragmentData ); } + + Construction::FissionResiduals fissionResiduals( ) const { return( m_fissionResiduals ); } /**< Returns the value of the *m_fissionResiduals* member. */ + + void modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ); + bool areAllProductsTracked( Transporting::Particles const &a_particles ) const ; + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + bool isFission( ) const { return( m_fissions ); } /**< Returns true if the output channel is a fission output channel. */ + bool hasFission( ) const ; + bool isDelayedFissionNeutronComplete( ) const ; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int productMultiplicity( std::string const &a_productID ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + bool a_final ) const ; + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + + void delayedNeutronProducts( DelayedNeutronProducts &a_delayedNeutronProducts ) const { m_fissionFragmentData.delayedNeutronProducts( a_delayedNeutronProducts ); } + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + void continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const ; + void mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const ; + void calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +namespace DoubleDifferentialCrossSection { + +namespace n_ThermalNeutronScatteringLaw { + +/* +============================================================ +==================== IncoherentInelastic =================== +============================================================ +*/ +class IncoherentInelastic : public Base { + + private: + Options m_options; /**< Options for *this*. */ + Suite m_scatteringAtoms; /**< The list of atoms and there information. */ + S_alpha_beta m_S_alpha_beta; /**< The S(alpha,beta,T) function. */ + + public: + IncoherentInelastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ); + ~IncoherentInelastic( ); + + Options &options( ) { return( m_options ); } /**< Returns the value of the *m_options* */ + Suite &scatteringAtoms( ) { return( m_scatteringAtoms ); } /**< Returns the value of the *m_scatteringAtoms* */ + S_alpha_beta const &s_alpha_beta( ) const { return( m_S_alpha_beta ); } /**< Returns the value of the *m_S_alpha_beta* */ +}; + +} // End namespace n_ThermalNeutronScatteringLaw. + +} // End namespace DoubleDifferentialCrossSection. + +namespace ACE_URR { + +/* +============================================================ +====================== IncidentEnergy ====================== +============================================================ +*/ +class IncidentEnergy: public Form { + + private: + double m_value; + std::string m_unit; + Table::Table m_table; + + public: + IncidentEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~IncidentEnergy( ); + + double value( ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + std::string const &unit( ) const { return( m_unit ); } /**< Returns a *const* reference to the *m_unit* member. */ + Table::Table const &table( ) const { return( m_table ); } /**< Returns a *const* reference to the *m_table* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +/* +============================================================ +===================== ProbabilityTable ===================== +============================================================ +*/ +class ProbabilityTable : public Form { + + public: + typedef std::vector Forms; /**< The typedef the the *m_forms* member. */ + + private: + mutable Forms m_forms; /**< The list of nodes stored within *this*. */ + + public: + ProbabilityTable( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~ProbabilityTable( ); + + Forms &forms( ) { return( m_forms ); } /**< Returns a *const* reference to the *m_forms* member. */ + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const ; +}; + +} // End namespace ACE_URR. + +/* +============================================================ +========================= Reaction ========================= +============================================================ +*/ +class Reaction : public Form { + + friend class ProtareSingle; + + private: + mutable int m_reactionIndex; /**< The index of the reaction in the ProtareSingle. */ + bool m_active; /**< If true, this reaction is used for calcualtion (e.g., its cross section is added to the total for its protare), otherwise, this reaction is ignored. */ + int m_ENDF_MT; /**< The ENDF MT value for the reaction. */ + int m_ENDL_C; /**< The ENDL C value for the reaction. */ + int m_ENDL_S; /**< The ENDL S value for the reaction. */ + std::string m_fissionGenre; /**< If the reaction is fission, this is its genre. */ + double m_QThreshold; /**< Threshold value calculated from the Q and the protare's m_thresholdFactor. */ + double m_crossSectionThreshold; /**< Threshold value derived from cross section data via *evaluated* or *griddedCrossSection*. */ + double m_twoBodyThreshold; /**< This is the T_1 value needed by MCGIDI to do two-body kinematics (i.e., in the equation (K_{com,3_4} = m_2 * (K_1 - T_1) / (m_1 + m_2)). */ + bool m_isPairProduction; /**< Kludge! Currently needed because GNDS specification unclear about how to specify photo-atomic pair production reaction. */ + bool m_isPhotoAtomicIncoherentScattering; /**< **true** if the reaction is photo-atomic incoherent scattering and **false** otherwise. Helpful for MCGIDI. */ + bool m_RutherfordScatteringPresent; /**> For charged particle elastic scattering, this member is *true* if Rutherford scattering is present and *false* otherwise. */ + bool m_onlyRutherfordScatteringPresent; /**> For charged particle elastic scattering, this member is *true* if only Rutherford scattering is present and *false* otherwise. */ + bool m_nuclearPlusInterferencePresent; /**> For charged particle elastic scattering, this member is *true* if nuclear plus interference is present and *false* otherwise. */ + bool m_decayPositronium; /**< If **true**, whenever a positron is created, it is assumed to immediately form positronium and decay into 2 511 KeV photons. Ergo, the photons are produced in the reaction and not a positron. */ + + Component m_doubleDifferentialCrossSection; /**< The GNDS <**doubleDifferentialCrossSection**> node. */ + Component m_crossSection; /**< The GNDS <**crossSection**> node. */ + Component m_availableEnergy; /**< The GNDS <**availableEnergy**> node. */ + Component m_availableMomentum; /**< The GNDS <**availableMomentum**> node. */ + OutputChannel *m_outputChannel; /**< The reaction's output channel. */ + void setReactionIndex( int a_reactionIndex ) const + { m_reactionIndex = a_reactionIndex ; } /**< Sets *m_reactionIndex* to *a_reactionIndex*. */ + + public: + Reaction( int a_ENDF_MT, std::string a_fissionGenre ); + Reaction( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Protare const &a_protare, + Styles::Suite const *a_styles ); + ~Reaction( ); + + bool active( ) const { return( m_active ); } /**< Returns the value of the *m_active* member. */ + void setActive( bool a_active ) { m_active = a_active; } /**< Sets *m_active* to *a_active*. */ + int reactionIndex( ) const { return( m_reactionIndex ); } /**< Returns the value of the *m_reactionIndex* member. */ + int depth( ) const { return( m_outputChannel->depth( ) ); } /**< Returns the maximum product depth for this reaction. */ + int ENDF_MT( ) const { return( m_ENDF_MT ); } /**< Returns the value of the *m_ENDF_MT* member. */ + int ENDL_C( ) const { return( m_ENDL_C ); } /**< Returns the value of the *m_ENDL_C* member. */ + int ENDL_S( ) const { return( m_ENDL_S ); } /**< Returns the value of the *m_ENDL_S* member. */ + std::string const &fissionGenre( ) const { return( m_fissionGenre ); } + bool isPairProduction( ) const { return( m_isPairProduction ); } /**< Returns the value of the *m_isPairProduction* member. */ + bool isPhotoAtomicIncoherentScattering( ) const { return( m_isPhotoAtomicIncoherentScattering ); } /**< Returns the value of the *m_isPhotoAtomicIncoherentScattering* member. */ + bool RutherfordScatteringPresent( ) const { return( m_RutherfordScatteringPresent ); } + /**< Returns the value of *m_RutherfordScatteringPresent* member. */ + bool onlyRutherfordScatteringPresent( ) const { return( m_onlyRutherfordScatteringPresent ); } + /**< Returns the value of *m_onlyRutherfordScatteringPresent* member. */ + bool nuclearPlusInterferencePresent( ) const { return( m_nuclearPlusInterferencePresent ); } + /**< Returns the value of *m_nuclearPlusInterferencePresent* member. */ + + Component &doubleDifferentialCrossSection( ) { return( m_doubleDifferentialCrossSection ); } /**< Returns a reference to the *m_doubleDifferentialCrossSection* member. */ + Component const &doubleDifferentialCrossSection( ) const { return( m_doubleDifferentialCrossSection ); } /**< Returns a reference to the *m_doubleDifferentialCrossSection* member. */ + Component &crossSection( ) { return( m_crossSection ); } /**< Returns a reference to the *m_crossSection* member. */ + Component const &crossSection( ) const { return( m_crossSection ); } /**< Returns a reference to the *m_crossSection* member. */ + + Component &availableEnergy( ) { return( m_availableEnergy ); } /**< Returns a reference to the *m_availableEnergy* member. */ + Component const &availableEnergy( ) const { return( m_availableEnergy ); } /**< Returns a reference to the *m_availableEnergy* member. */ + Component &availableMomentum( ) { return( m_availableMomentum ); } /**< Returns a reference to the *m_availableMomentum* member. */ + Component const &availableMomentum( ) const { return( m_availableMomentum ); } /**< Returns a reference to the *m_availableMomentum* member. */ + + OutputChannel *outputChannel( ) const { return( m_outputChannel ); } /**< Returns a reference to the *m_outputChannel* member. */ + void setOutputChannel( OutputChannel *a_outputChannel ); + + void modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ); + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + std::string xlinkItemKey( ) const { return( GUPI::Ancestry::buildXLinkItemKey( GIDI_labelChars, label( ) ) ); } /**< Returns the result of calling "GUPI::Ancestry::buildXLinkItemKey( GIDI_labelChars, label() )". */ + + bool hasFission( ) const ; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int productMultiplicity( std::string const &a_productID ) const { + return( m_outputChannel->productMultiplicity( a_productID ) ); } /**< Returns the product multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer. */ + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + double threshold( ) const { return( m_QThreshold ); } /**< Returns the value of the *m_QThreshold* member. */ + double crossSectionThreshold( ) const { return( m_crossSectionThreshold ); } /**< Returns the value of the *m_crossSectionThreshold* member. */ + double twoBodyThreshold( ) const { return( m_twoBodyThreshold ); } /**< Returns the value of the *m_twoBodyThreshold* member. */ + + bool areAllProductsTracked( Transporting::Particles const &a_particles ) const ; + + Vector multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo ) + const ; + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + bool a_final ) const ; + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const ; + Matrix multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles, int a_order ) const ; + + Vector multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo ) + const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles ) const ; + + Vector multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo ) + const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + Transporting::Particles const &a_particles ) const ; + + Vector multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID, std::string const &a_projectileID ) const ; + + void delayedNeutronProducts( DelayedNeutronProducts &a_delayedNeutronProducts ) const ; + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + void continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const ; + void mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const ; + + bool modifyCrossSection( Functions::XYs1d const *a_offset, Functions::XYs1d const *a_slope, bool a_updateMultiGroup = false ); + bool modifiedCrossSection( Functions::XYs1d const *a_offset, Functions::XYs1d const *a_slope ); + void recalculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo ); + void calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation ); + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +namespace Sums { + +namespace Summand { + +/* +============================================================ +=========================== Base =========================== +============================================================ +*/ +class Base : public GUPI::Ancestry { + + private: + std::string m_href; /**< xlink for the summand. */ + + public: + Base( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Base( ); + + std::string const &href( ) const { return( m_href ); } /**< Returns the value of the *m_href* member. */ + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Add ============================ +============================================================ +*/ +class Add : public Base { + + public: + Add( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); +}; + +} // End of namespace Summand. + +/* +============================================================ +========================= Summands ========================= +============================================================ +*/ +class Summands : public Form { + + private: + std::vector m_summands; /**< List of summand for *this*. */ + + public: + Summands( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ); + ~Summands( ); + + std::size_t size( ) const { return( m_summands.size( ) ); } /**< Returns the number of summands in *this*. */ + Summand::Base const *operator[]( std::size_t a_index ) const { return( m_summands[a_index] ); } /**< Returns the summand at index *a_index*. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Base =========================== +============================================================ +*/ +class Base : public Form { + + private: + int m_ENDF_MT; /**< ENDF MT value for the sum. */ + Summands m_summands; /**< List of Summands for *this*. */ + + public: + Base( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + FormType a_type ); + + int ENDF_MT( ) const { return( m_ENDF_MT ); } /**< Returns the value of the *m_ENDF_MT* member. */ + Summands const &summands( ) const { return( m_summands ); } /**< Returns the value of the *m_summands* member. */ +}; + +/* +============================================================ +====================== CrossSectionSum ===================== +============================================================ +*/ +class CrossSectionSum : public Base { + + private: + Component m_Q; /**< The GNDS <**Q**> node. */ + Component m_crossSection; /**< The GNDS <**crossSection**> node. */ + + public: + CrossSectionSum( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ); + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + Component &Q( ) { return( m_Q ); } /**< Returns a reference to the *m_Q* member. */ + Component &crossSection( ) { return( m_crossSection ); } /**< Returns a reference to the *m_crossSection* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +====================== MultiplicitySum ===================== +============================================================ +*/ +class MultiplicitySum : public Base { + + private: + Suite m_multiplicity; /**< The GNDS <**multiplicity**> node. */ + + public: + MultiplicitySum( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ); + + Suite &multiplicity( ) { return( m_multiplicity ); } /**< Returns a reference to the *m_multiplicity* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Sums =========================== +============================================================ +*/ +class Sums : public GUPI::Ancestry { + + private: + Suite m_crossSectionSums; /**< The GNDS <**crossSectionSums**> node. */ + Suite m_multiplicitySums; /**< The GNDS <**multiplicitySums**> node. */ + + public: + Sums( ); + ~Sums( ); + + Suite &crossSectionSums( ) { return( m_crossSectionSums ); } /**< Returns the value of the *m_crossSectionSums* member. */ + Suite const &crossSectionSums( ) const { return( m_crossSectionSums ); } /**< Returns the value of the *m_crossSectionSums* member. */ + Suite &multiplicitySums( ) { return( m_multiplicitySums ); } /**< Returns the value of the *m_multiplicitySums* member. */ + Suite const &multiplicitySums( ) const { return( m_multiplicitySums ); } /**< Returns the value of the *m_multiplicitySums* member. */ + + void parse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ); + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +} // End of namespace Sums. + +/* +============================================================ +========================== Protare ========================= +============================================================ +*/ +class Protare : public GUPI::Ancestry { + + private: + ParticleInfo m_projectile; /**< Information about the projectile. */ + ParticleInfo m_target; /**< Information about the target. */ + ParticleInfo m_GNDS_target; /**< Information about the target as specified in the GNDS file. For example, for requested target 'H1' for a photo-atomic GNDS file, the GNDS target will be 'H'. */ + + protected: + void initialize( HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, bool a_targetRequiredInGlobalPoPs, + bool a_requiredInPoPs = true ); + + public: + Protare( ); + ~Protare( ); + + ParticleInfo const &projectile( ) const { return( m_projectile ); } /**< Returns the value of the *m_projectile* member. */ + void setProjectile( ParticleInfo const &a_projectile ) { m_projectile = a_projectile; } /**< Sets *m_projectile* to *a_projectile*. */ + ParticleInfo const &target( ) const { return( m_target ); } /**< Returns the value of the *m_target* member. */ + void setTarget( ParticleInfo const &a_target ) { + m_target = a_target; + if( m_GNDS_target.ID( ) == "" ) m_GNDS_target = a_target; } /**< Sets *m_target* to *a_target* and m_GNDS_target if it is an empty string. */ + ParticleInfo const &GNDS_target( ) const { return( m_GNDS_target ); } /**< Returns the value of the *m_GNDS_target* member. */ + + virtual ProtareType protareType( ) const = 0; /**< Returns the type of the protare. */ + virtual bool isTNSL_ProtareSingle( ) const { return( false ); } /**< Returns *true* if the instance is a ProtareSingle instance with only TNSL data and *false* otherwise. */ + virtual std::size_t numberOfProtares( ) const = 0; /**< Returns the number of protares contained in *this*. */ + virtual ProtareSingle *protare( std::size_t a_index ) = 0; /**< Returns the *a_index* - 1 Protare contained in *this*. */ + virtual ProtareSingle const *protare( std::size_t a_index ) const = 0; /**< Returns the *a_index* - 1 Protare contained in *this*. */ + + virtual LUPI::FormatVersion const &formatVersion( std::size_t a_index = 0 ) const = 0; + virtual std::string const &fileName( std::size_t a_index = 0 ) const = 0; + virtual std::string const &realFileName( std::size_t a_index = 0 ) const = 0; + + virtual std::vector libraries( std::size_t a_index = 0 ) const = 0; + virtual std::string const &evaluation( std::size_t a_index = 0 ) const = 0; + virtual Frame projectileFrame( std::size_t a_index = 0 ) const = 0; + virtual int numberOfLazyParsingHelperForms( ) const = 0; + virtual int numberOfLazyParsingHelperFormsReplaced( ) const = 0; + virtual double thresholdFactor( ) const = 0; + + virtual Documentation_1_10::Suite &documentations( ) = 0; + + virtual Styles::Base &style( std::string const a_label ) = 0; + virtual Styles::Suite &styles( ) = 0; + virtual Styles::Suite const &styles( ) const = 0; + + virtual int intid( std::string const &a_id ) const = 0; + virtual void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const = 0; + virtual int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const = 0; + + virtual Styles::TemperatureInfos temperatures( ) const = 0; + + virtual std::size_t numberOfReactions( ) const = 0; + virtual Reaction *reaction( std::size_t a_index ) = 0; + virtual Reaction const *reaction( std::size_t a_index ) const = 0; + virtual Reaction const *reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual std::size_t numberOfOrphanProducts( ) const = 0; + virtual Reaction *orphanProduct( std::size_t a_index ) = 0; + virtual Reaction const *orphanProduct( std::size_t a_index ) const = 0; + virtual void updateReactionIndices( int a_offset ) const = 0; + + virtual bool hasFission( ) const = 0; + virtual bool isDelayedFissionNeutronComplete( ) const = 0; + + virtual GUPI::Ancestry *findInAncestry3( std::string const &a_item ) = 0; + virtual GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const = 0; + + virtual std::vector groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const = 0; + virtual Vector multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const = 0; + + virtual Vector multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic = true, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Matrix multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual Vector multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual Vector multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + virtual Vector multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual Vector multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const = 0; + + virtual void TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::XYs1d &a_crossSectionSum ); + virtual void TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::Ys1d &a_crossSectionSum ); + virtual void TNSL_crossSectionSumCorrection( std::string const &a_label, Vector &a_crossSectionSum ); + + virtual stringAndDoublePairs muCutoffForCoulombPlusNuclearElastic( ) const = 0; + virtual DelayedNeutronProducts delayedNeutronProducts( ) const = 0; + virtual void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const = 0; + ExcludeReactionsSet reactionIndicesMatchingENDLCValues( std::set const &a_CValues, bool a_checkActiveState = true ); +}; + +/* +============================================================ +====================== ProtareSingle ======================= +============================================================ +*/ +class ProtareSingle : public Protare { + + private: + HAPI::File *m_doc; /**< If data read from file, this member is a pointer to the opened **HAPI::File** instance. */ + HAPI::DataManager *m_dataManager; /**< If data read from hybrid file, this member is a pointer to the **HAPI::DataManager** instance. */ + int m_numberOfLazyParsingHelperForms; /**< This counts the number of LazyParsingHelperForms instantiated. */ + int m_numberOfLazyParsingHelperFormsReplaced; /**< This counts the number of LazyParsingHelperForms replaced with the appropriate form. */ + LUPI::FormatVersion m_formatVersion; /**< Store the GNDS format version. */ + PoPI::Database m_internalPoPs; /**< The *PoPs* specified under the protare (e.g., reactionSuite) node. */ + + std::vector m_libraries; /**< The list of libraries *this* was found in. */ + std::string m_evaluation; /**< The protare's evaluation string. */ + std::string m_interaction; /**< The protare's interaction string. */ + std::string m_fileName; /**< The path to the protare's file. May be relative. */ + std::string m_realFileName; /**< The real path to the protare's file. Equivalent to the value returned by the C-function *realpath( m_fileName )* on Unix systems. */ + Frame m_projectileFrame; /**< The frame the projectile data are given in. */ + double m_projectileEnergyMin; /**< The projectile's minimum energy for which data are complete as specified in the evaluated style. */ + double m_projectileEnergyMax; /**< The projectile's maximum energy for which data are complete as specified in the evaluated style. */ + bool m_isTNSL_ProtareSingle; /**< If *this* is a ProtareSingle instance with TNSL data *true* and otherwise *false*. */ + bool m_isPhotoAtomic; /**< true if photo-atomic protare and false otherwise. */ + bool m_decayPositronium; /**< If **true**, whenever a positron is created, it is assumed to immediately form positronium and decay into 2 511 KeV photons. Ergo, the photons are produced in the reaction and not a positron. */ + + double m_thresholdFactor; /**< The non-relativistic factor that converts a Q-value into a threshold. */ + + PoPI::NuclideGammaBranchStateInfos m_nuclideGammaBranchStateInfos; /**< Simplified list of gamma branching data from nuclide level decays derived from the internal PoPI::Database. */ + + ExternalFiles::Suite m_externalFiles; /**< The GNDS <**externalFiles**> node. */ + Styles::Suite m_styles; /**< The GNDS <**styles**> node. */ + Documentation_1_10::Suite m_documentations; /**< The GNDS <**documentations**> node. */ + Suite m_reactions; /**< The GNDS <**reactions**> node. */ + Suite m_orphanProducts; /**< The GNDS <**orphanProducts**> node. */ + Suite m_incompleteReactions; /**< The GNDS <**incompleteReactions**> node. */ + + Sums::Sums m_sums; /**< The GNDS <**sums**> node. */ + Suite m_fissionComponents; /**< The GNDS <**fissionComponents**> node. */ + + bool m_RutherfordScatteringPresent; /**> For charged particle elastic scattering, this member is *true* if Rutherford scattering is present and *false* otherwise. */ + bool m_onlyRutherfordScatteringPresent; /**> For charged particle elastic scattering, this member is *true* if only Rutherford scattering is present and *false* otherwise. */ + +// The following are non-GNDS 2.0 data types that are stored in the applicationData node. + Reaction *m_nuclearPlusCoulombInterferenceOnlyReaction; /**< The nuclear + interference (ENDL C=9) reaction in the applicationData node. */ + Reaction *m_multiGroupSummedReaction; /**< This reaction contains the sum multi-group data from all other reactions. */ + OutputChannel *m_multiGroupSummedDelayedNeutrons; /**< This reaction contains the sum multi-group data from delayed neutrons. */ + Suite m_ACE_URR_probabilityTables; /**< This suite stores ACE style URR probability tables. */ + Suite m_photoAtomicIncoherentDoppler; /**< This suite stores the data for the impulse approximation photon doppler broadening reaction (MT 1534-1572) */ + Component m_pointwiseAverageProductEnergy; /**< This suite stores upscatter model B pointwise energy deposition data for the outgoing neutron. */ + GRIN::GRIN_continuumGammas *m_GRIN_continuumGammas; /**< This stores continuum gamma information from the GRIN project. */ + + void initialize( ); + void initialize( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + bool a_targetRequiredInGlobalPoPs, bool a_requiredInPoPs = true ); + + bool useMultiGroupSummedData( Transporting::MG const &a_settings, ExcludeReactionsSet const &a_reactionsToExclude ) const ; + bool useMultiGroupSummedDelayedNeutronsData( Transporting::MG const &a_settings ) const ; + + public: + ProtareSingle( PoPI::Database const &a_pops, std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_evaluation, + std::string const &a_interaction, std::string const &a_formatVersion = GNDS_formatVersion_1_10Chars ); + ProtareSingle( Construction::Settings const &a_construction, std::string const &a_fileName, FileType a_fileType, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution, std::vector const &a_libraries, std::string const &a_interaction, + bool a_targetRequiredInGlobalPoPs = true, bool a_requiredInPoPs = true ); + ProtareSingle( Construction::Settings const &a_construction, HAPI::Node const &a_protare, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution, std::vector const &a_libraries, std::string const &a_interaction, + bool a_targetRequiredInGlobalPoPs = true, bool a_requiredInPoPs = true ); + ~ProtareSingle( ); + + PoPI::NuclideGammaBranchStateInfos const &nuclideGammaBranchStateInfos( ) const { return( m_nuclideGammaBranchStateInfos ); } + /**< Returns the value of the *m_nuclideGammaBranchStateInfos* member. */ + + HAPI::DataManager *dataManager( ) { return( m_dataManager ); } /**< Returns the value of the *m_dataManager* member. */ + void setDataManager( HAPI::DataManager *a_dataManager ) { m_dataManager = a_dataManager; } + /**< Sets the member *m_dataManager* to *a_dataManager*. */ + void incrementNumberOfLazyParsingHelperForms( ) { ++m_numberOfLazyParsingHelperForms; } + /**> Increments the *m_numberOfLazyParsingHelperForms* member of this by 1. */ + void incrementNumberOfLazyParsingHelperFormsReplaced( ) { ++m_numberOfLazyParsingHelperFormsReplaced; } + /**> Increments the *m_numberOfLazyParsingHelperFormsReplaced* member of this by 1. */ + + double projectileEnergyMin( ) const { return( m_projectileEnergyMin ); } + double projectileEnergyMax( ) const { return( m_projectileEnergyMax ); } + bool isTNSL_ProtareSingle( ) const { return( m_isTNSL_ProtareSingle ); } /**< Returns *true* if the instance is a ProtareSingle instance with only TNSL data and *false* otherwise. */ + bool isPhotoAtomic( ) const { return( m_isPhotoAtomic ); } /**< Returns the value of the *m_isPhotoAtomic* member. */ + + Suite &reactions( ) { return( m_reactions ); } /**< Returns a reference to the *m_reactions* member. */ + Suite const &reactions( ) const { return( m_reactions ); } /**< Returns a *const* reference to the *m_reactions* member. */ + Suite &orphanProducts( ) { return( m_orphanProducts ); } /**< Returns a reference to the *m_orphanProducts* member. */ + Suite const &orphanProducts( ) const { return( m_orphanProducts ); } /**< Returns a *const* reference to the *m_orphanProducts* member. */ + Suite &incompleteReactions( ) { return( m_incompleteReactions ); } /**< Returns a reference to the *m_incompleteReactions* member. */ + Suite const &incompleteReactions( ) const { return( m_incompleteReactions ); } /**< Returns a *const* reference to the *m_incompleteReactions* member. */ + + Sums::Sums &sums( ) { return( m_sums ); } /**< Returns a reference to the *m_sums* member. */ + Sums::Sums const &sums( ) const { return( m_sums ); } /**< Returns a reference to the *m_sums* member. */ + Suite &fissionComponents( ) { return( m_fissionComponents ); } /**< Returns a reference to the *m_fissionComponents* member. */ + + bool RutherfordScatteringPresent( ) const { return( m_RutherfordScatteringPresent ); } + /**< Returns the value of *m_RutherfordScatteringPresent*. */ + bool onlyRutherfordScatteringPresent( ) const { return( m_onlyRutherfordScatteringPresent ); } + /**< Returns the value of *m_onlyRutherfordScatteringPresent*. */ + Reaction const *nuclearPlusCoulombInterferenceOnlyReaction( ) const { return( m_nuclearPlusCoulombInterferenceOnlyReaction ); } + /**< Returns the *m_nuclearPlusCoulombInterferenceOnlyReaction* member which is a pointer. */ + Reaction const *checkIf_nuclearPlusCoulombInterferenceWanted( Transporting::MG const &a_settings, Reaction const *a_reaction ) const ; + Reaction const *reactionToMultiGroup( Transporting::MG const &a_settings, std::size_t a_index, + ExcludeReactionsSet const &a_reactionsToExclude ) const ; + Reaction const *multiGroupSummedReaction( ) const { return( m_multiGroupSummedReaction ); } /**< Returns the *m_multiGroupSummedReaction* member which is a pointer. */ + OutputChannel const *multiGroupSummedDelayedNeutrons( ) const { return( m_multiGroupSummedDelayedNeutrons ); } /**< Returns the *m_multiGroupSummedReaction* member which is a pointer. */ + Suite const &ACE_URR_probabilityTables( ) const { return( m_ACE_URR_probabilityTables ); } /**< Returns a *const* reference to the *m_ACE_URR_probabilityTables* member. */ + Suite const &photoAtomicIncoherentDoppler( ) const { return( m_photoAtomicIncoherentDoppler ); } + GRIN::GRIN_continuumGammas const *GRIN_continuumGammas2( ) const { return( m_GRIN_continuumGammas ); } /**< Returns a *const* pointer to the *m_GRIN_continuumGammas* member. */ + +// The rest are virtual methods defined in the Protare class. + + ProtareType protareType( ) const { return( ProtareType::single ); } /**< Returns the type of the protare. */ + std::size_t numberOfProtares( ) const { return( 1 ); } /**< Returns 1. */ + ProtareSingle *protare( std::size_t a_index ); + ProtareSingle const *protare( std::size_t a_index ) const ; + + LUPI::FormatVersion const &formatVersion( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_formatVersion ); } /**< Returns the value of the *m_formatVersion* member. */ + std::string const &fileName( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_fileName ); } /**< Returns the value of the *m_fileName* member. */ + std::string const &realFileName( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_realFileName ); } /**< Returns the value of the *m_realFileName* member. */ + + std::vector libraries( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_libraries ); } /**< Returns the libraries that *this* resided in. */ + std::string const &evaluation( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_evaluation ); } /**< Returns the value of the *m_evaluation* member. */ + std::string const &interaction( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_interaction ); } /**< Returns the value of the *m_interaction* member. */ + Frame projectileFrame( LUPI_maybeUnused std::size_t a_index = 0 ) const { return( m_projectileFrame ); } /**< Returns the value of the *m_projectileFrame* member. */ + int numberOfLazyParsingHelperForms( ) const { return( m_numberOfLazyParsingHelperForms ); } + /**< Returns the value of the *m_numberOfLazyParsingHelperForms* member. */ + int numberOfLazyParsingHelperFormsReplaced( ) const { return( m_numberOfLazyParsingHelperFormsReplaced ); } + /**< Returns the value of the *m_numberOfLazyParsingHelperFormsReplaced* member. */ + double thresholdFactor( ) const { return( m_thresholdFactor ); } /**< Returns the value of the *m_thresholdFactor* member. */ + + Documentation_1_10::Suite &documentations( ) { return( m_documentations ); } /**< Returns the value of the *m_documentations* member. */ + + ExternalFile const &externalFile( std::string const a_label ) const { return( *m_externalFiles.get( a_label ) ); } /**< Returns the external file with label *a_label*. */ + ExternalFiles::Suite const &externalFiles( ) const { return( m_externalFiles ); } /**< Returns the value of the *m_externalFiles* member. */ + + Styles::Base &style( std::string const a_label ) { return( *m_styles.get( a_label ) ); } /**< Returns the style with label *a_label*. */ + Styles::Base const &style( std::string const a_label ) const { return( *m_styles.get( a_label ) ); } /**< Returns the const style with label *a_label*. */ + Styles::Suite &styles( ) { return( m_styles ); } /**< Returns the value of the *m_styles* member. */ + Styles::Suite const &styles( ) const { return( m_styles ); } /**< Returns a *const* reference to the *m_styles* member. */ + + PoPI::Database const &internalPoPs( ) const { return( m_internalPoPs ); } /**< Returns a *const* reference to the *m_internalPoPs* member. */ + PoPI::Database &internalPoPs( ) { return( m_internalPoPs ); } /**< Returns a reference to the *m_internalPoPs* member. */ + + int intid( std::string const &a_id ) const; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + Styles::TemperatureInfos temperatures( ) const ; + + std::size_t numberOfReactions( ) const { return( m_reactions.size( ) ); } /**< Returns the number of reactions in the **Protare**. */ + Reaction *reaction( std::size_t a_index ) { return( m_reactions.get( a_index ) ); } /**< Returns the *a_index* - 1 reaction. */ + Reaction const *reaction( std::size_t a_index ) const { return( m_reactions.get( a_index ) ); } /**< Returns the *a_index* - 1 reaction. */ + Reaction const *reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const; + std::size_t numberOfInactiveReactions( ) const ; + + std::size_t numberOfOrphanProducts( ) const { return( m_orphanProducts.size( ) ); } /**< Returns the number of orphan product reactions in the **Protare**. */ + Reaction *orphanProduct( std::size_t a_index ) { return( m_orphanProducts.get( a_index ) ); } /**< Returns the *a_index* - 1 orphan product reaction. */ + Reaction const *orphanProduct( std::size_t a_index ) const { return( m_orphanProducts.get( a_index ) ); } /**< Returns the *a_index* - 1 orphan product reaction. */ + + std::size_t numberOfIncompleteReactions( ) const { return( m_incompleteReactions.size( ) ); } /**< Returns the number of incomplete reactions in the **Protare**. */ + Reaction *incompleteReaction( std::size_t a_index ) { return( m_incompleteReactions.get( a_index ) ); } /**< Returns the *a_index* - 1 reaction. */ + Reaction const *incompleteReaction( std::size_t a_index ) const { return( m_incompleteReactions.get( a_index ) ); } /**< Returns the *a_index* - 1 reaction. */ + void updateReactionIndices( int a_offset ) const; + + bool hasFission( ) const ; + bool isDelayedFissionNeutronComplete( ) const ; + + GUPI::Ancestry *findInAncestry3( std::string const &a_item ); + GUPI::Ancestry const *findInAncestry3( std::string const &a_item ) const ; + + std::vector groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const ; + + Vector multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic = true, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Matrix multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + stringAndDoublePairs muCutoffForCoulombPlusNuclearElastic( ) const ; + DelayedNeutronProducts delayedNeutronProducts( ) const ; + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; + + void saveAs( std::string const &a_fileName ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +===================== ProtareComposite ===================== +============================================================ +*/ +class ProtareComposite : public Protare { + + private: + std::vector m_protares; /**< List of protares added to *this* instance. */ + + public: + ProtareComposite( Construction::Settings const &a_construction ); + ~ProtareComposite( ); + + std::vector &protares( ) { return( m_protares ); } /**< Returns the value of the *m_protares* member. */ + void append( Protare *a_protare ); + +// The rest are virtual methods defined in the Protare class. + + ProtareType protareType( ) const { return( ProtareType::composite ); } /**< Returns the type of the protare. */ + std::size_t numberOfProtares( ) const ; + ProtareSingle *protare( std::size_t a_index ); + ProtareSingle const *protare( std::size_t a_index ) const ; + + LUPI::FormatVersion const &formatVersion( std::size_t a_index = 0 ) const ; + std::string const &fileName( std::size_t a_index = 0 ) const ; + std::string const &realFileName( std::size_t a_index = 0 ) const ; + + std::vector libraries( std::size_t a_index = 0 ) const ; + std::string const &evaluation( std::size_t a_index = 0 ) const ; + Frame projectileFrame( std::size_t a_index = 0 ) const ; + int numberOfLazyParsingHelperForms( ) const ; + int numberOfLazyParsingHelperFormsReplaced( ) const ; + double thresholdFactor( ) const ; + + Documentation_1_10::Suite &documentations( ); + + Styles::Base &style( std::string const a_label ); + Styles::Suite &styles( ); + Styles::Suite const &styles( ) const ; + + int intid( std::string const &a_id ) const; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + Styles::TemperatureInfos temperatures( ) const ; + + std::size_t numberOfReactions( ) const ; + Reaction *reaction( std::size_t a_index ); + Reaction const *reaction( std::size_t a_index ) const ; + Reaction const *reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const; + std::size_t numberOfOrphanProducts( ) const ; + Reaction *orphanProduct( std::size_t a_index ); + Reaction const *orphanProduct( std::size_t a_index ) const ; + void updateReactionIndices( int a_offset ) const; + + bool hasFission( ) const ; + bool isDelayedFissionNeutronComplete( ) const ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } /**< Always returns *nullptr*. */ + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } /**< Always returns *nullptr*. */ + + std::vector groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const ; + + Vector multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic = true, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Matrix multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + stringAndDoublePairs muCutoffForCoulombPlusNuclearElastic( ) const ; + DelayedNeutronProducts delayedNeutronProducts( ) const ; + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; +}; + +/* +============================================================ +======================= ProtareTNSL ======================== +============================================================ +*/ +class ProtareTNSL : public Protare { + + private: + ProtareSingle *m_protare; /**< Protare with non thermal neutron scattering law data. */ + ProtareSingle *m_TNSL; /**< Protare with thermal neutron scattering law data. */ + Reaction *m_elasticReaction; /**< The elastic reaction from the non TNSL protare. */ + std::map m_maximumTNSL_MultiGroupIndex; /**< For each neutron multi-group data, this the number of valid groups for the TNSL data. */ + + public: + ProtareTNSL( Construction::Settings const &a_construction, ProtareSingle *a_protare, ProtareSingle *a_TNSL ); + ~ProtareTNSL( ); + + ProtareSingle *TNSL( ) { return( m_TNSL ); } /**< Returns the *m_TNSL* member. */ + ProtareSingle const *TNSL( ) const { return( m_TNSL ); } /**< Returns the *m_TNSL* member. */ + Reaction *elasticReaction( ) { return( m_elasticReaction ); } /**< Returns the *m_elasticReaction* member. */ + std::size_t maximumTNSL_MultiGroupIndex( Styles::TemperatureInfo const &a_temperatureInfo ) const ; + void combineVectors( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, Vector &a_vector, + Vector const &a_vectorElastic, Vector const &a_vectorTNSL ) const ; + void combineMatrices( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, Matrix &a_matrix, + Matrix const &a_matrixElastic, Matrix const &a_matrixTNSL ) const ; + +// The rest are virtual methods defined in the Protare class. + + ProtareType protareType( ) const { return( ProtareType::TNSL ); } /**< Returns the type of the protare. */ + std::size_t numberOfProtares( ) const { return( 2 ); } /**< Always returns 2. */ + ProtareSingle *protare( std::size_t a_index = 0 ); + ProtareSingle const *protare( std::size_t a_index = 0 ) const ; + + LUPI::FormatVersion const &formatVersion( std::size_t a_index = 0 ) const ; + std::string const &fileName( std::size_t a_index = 0 ) const ; + std::string const &realFileName( std::size_t a_index = 0 ) const ; + + std::vector libraries( std::size_t a_index = 0 ) const ; + std::string const &evaluation( std::size_t a_index = 0 ) const ; + Frame projectileFrame( std::size_t a_index = 0 ) const ; + int numberOfLazyParsingHelperForms( ) const ; + int numberOfLazyParsingHelperFormsReplaced( ) const ; + double thresholdFactor( ) const ; + + Documentation_1_10::Suite &documentations( ); + + Styles::Base &style( std::string const a_label ); + Styles::Suite &styles( ); + Styles::Suite const &styles( ) const ; + + int intid( std::string const &a_id ) const; + void productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const ; + int maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const ; + + Styles::TemperatureInfos temperatures( ) const ; + + std::size_t numberOfReactions( ) const ; + Reaction *reaction( std::size_t a_index ); + Reaction const *reaction( std::size_t a_index ) const ; + Reaction const *reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const; + std::size_t numberOfOrphanProducts( ) const ; + Reaction *orphanProduct( std::size_t a_index ); + Reaction const *orphanProduct( std::size_t a_index ) const ; + void updateReactionIndices( int a_offset ) const; + + bool hasFission( ) const ; + bool isDelayedFissionNeutronComplete( ) const ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } /**< Always returns *nullptr*. */ + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } /**< Always returns *nullptr*. */ + + std::vector groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_productID ) const ; + Vector multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const ; + + Vector multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic = true, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Matrix multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Matrix multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + Vector multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + Vector multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude = ExcludeReactionsSet {} ) const ; + + void TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::XYs1d &a_crossSectionSum ); + void TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::Ys1d &a_crossSectionSum ); + void TNSL_crossSectionSumCorrection( std::string const &a_label, Vector &a_crossSectionSum ) { + return( Protare::TNSL_crossSectionSumCorrection( a_label, a_crossSectionSum ) ); + } + + stringAndDoublePairs muCutoffForCoulombPlusNuclearElastic( ) const ; + DelayedNeutronProducts delayedNeutronProducts( ) const { return( m_protare->delayedNeutronProducts( ) ); } + void incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const ; +}; + +namespace Map { + +enum class EntryType { import, protare, TNSL }; +#define GIDI_MapInteractionNuclearChars "nuclear" +#define GIDI_MapInteractionAtomicChars "atomic" +#define GIDI_MapInteractionTNSLChars "thermalNeutronScatteringLaw" + +typedef std::vector FindProtareEntries; + +/* +============================================================ +========================= BaseEntry ======================== +============================================================ +*/ +class BaseEntry : public GUPI::Ancestry { + + public: + enum class PathForm { entered, cumulative, real }; + + private: + std::string m_name; /**< Designates the entry as either a protare or a map. */ + Map const *m_parent; /**< Pointer to map containing *this*. */ + std::string m_path; /**< Absolute or relative (to map file) path of the protare or map file. */ + std::string m_cumulativePath; /**< Currently not used. */ + + public: + BaseEntry( HAPI::Node const &a_node, std::string const &a_basePath, Map const *a_parent ); + virtual ~BaseEntry( ) = 0; + + std::string const &name( ) const { return( m_name ); } /**< Returns the value of the *m_name* member. */ + Map const *parent( ) const { return( m_parent ); } /**< Returns the value of the *m_parent* member. */ + std::string path( PathForm a_form = PathForm::real ) const ; + + virtual EntryType entryType( ) const = 0; + + void libraries( std::vector &a_libraries ) const ; + virtual ProtareBase const *findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, + std::string const &a_library = "", std::string const &a_evaluation = "" ) const = 0 ; + virtual void findProtareEntries( FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library = std::regex( ".*" ), + std::regex const &a_evaluation = std::regex( ".*" ) ) const = 0 ; + + virtual void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const = 0; +}; + +/* +============================================================ +========================== Import ========================== +============================================================ +*/ +class Import : public BaseEntry { + + private: + Map *m_map; /**< Map instance for this Import. */ + + public: + Import( HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *a_parent ); + ~Import( ); + + EntryType entryType( ) const { return( EntryType::import ); } /**< Returns EntryType::import. */ + + Map const *map( ) const { return( m_map ); } /**< Returns the value of the *m_map* member. */ + + ProtareBase const *findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, + std::string const &a_library = "", std::string const &a_evaluation = "" ) const ; + void findProtareEntries( FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library = std::regex( ".*" ), std::regex const &a_evaluation = std::regex( ".*" ) ) const ; + std::string protareFilename( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library = "", + std::string const &a_evaluation = "", PathForm a_form = PathForm::real ) const ; + bool isProtareAvailable( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library = "", + std::string const &a_evaluation = "" ) const { + return( protareFilename( a_projectileID, a_targetID, a_library, a_evaluation ) != GIDI_emptyFileNameChars ); } + /**< Returns the value of the *m_map* member. */ + std::vector availableEvaluations( std::string const &a_projectileID, std::string const &a_targetID ) const ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } /**< Always returns *nullptr*. */ + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } /**< Always returns *nullptr*. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +======================= ProtareBase ======================== +============================================================ +*/ +class ProtareBase : public BaseEntry { + + private: + std::string m_projectileID; /**< Projectile id for protare. */ + std::string m_targetID; /**< Target id for protare. */ + std::string m_evaluation; /**< Evaluation string for protare. */ + std::string m_interaction; /**< The interaction type for the protare. */ + + public: + ProtareBase( HAPI::Node const &a_node, std::string const &a_basePath, Map const *const a_map ); + ~ProtareBase( ); + + std::string const &projectileID( ) const { return( m_projectileID ); } /**< Returns the value of the *m_projectileID* member. */ + std::string const &targetID( ) const { return( m_targetID ); } /**< Returns the value of the *m_targetID* member. */ + std::string const &evaluation( ) const { return( m_evaluation ); } /**< Returns the value of the *m_evaluation* member. */ + std::string const &interaction( ) const { return( m_interaction ); } /**< Returns the value of the *m_interaction* member. */ + void setInteraction( std::string const &a_interaction ) { m_interaction = a_interaction; } /**< Set the *m_interaction* member to *a_interaction*. */ + + bool isMatch( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_evaluation = "" ) const ; + std::string const &library( ) const ; + std::string const &resolvedLibrary( ) const ; + + ProtareBase const *findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, + std::string const &a_library = "", std::string const &a_evaluation = "" ) const ; + void findProtareEntries( FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library = std::regex( ".*" ), std::regex const &a_evaluation = std::regex( ".*" ) ) const ; + virtual GIDI::Protare *protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution ) const = 0 ; + virtual GIDI::ProtareSingle *protareSingle( Construction::Settings const &a_construction, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution ) const = 0 ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } /**< Always returns *nullptr*. */ + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } /**< Always returns *nullptr*. */ +}; + +/* +============================================================ +========================= Protare ========================== +============================================================ +*/ +class Protare : public ProtareBase { + + private: + bool m_isPhotoAtomic; /**< true if photo-atomic protare and false otherwise. */ + + public: + Protare( HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *const a_parent ); + ~Protare( ); + + EntryType entryType( ) const { return( EntryType::protare ); } /**< Returns EntryType::protare. */ + + bool isPhotoAtomic( ) const { return( m_isPhotoAtomic ); } /**< Returns the value of the *m_isPhotoAtomic* member. */ + GIDI::Protare *protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution ) const ; + GIDI::ProtareSingle *protareSingle( Construction::Settings const &a_construction, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== TNSL =========================== +============================================================ +*/ +class TNSL : public ProtareBase { + + private: + std::string m_standardTarget; /**< The non-TNSL target. */ + std::string m_standardEvaluation; /**< The non-TNSL evaluation. */ + + public: + TNSL( HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *const a_parent ); + ~TNSL( ); + + EntryType entryType( ) const { return( EntryType::TNSL ); } /**< Returns EntryType::TNSL. */ + + std::string const &standardTarget( ) const { return( m_standardTarget ); } + std::string const &standardEvaluation( ) const { return( m_standardEvaluation ); } + GIDI::Protare *protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution ) const ; + GIDI::ProtareSingle *protareSingle( Construction::Settings const &a_construction, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution ) const ; + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +/* +============================================================ +=========================== Map ============================ +============================================================ +*/ +class Map : public GUPI::Ancestry { + + private: + Map const *m_parent; /**< Pointer to map containing *this* if this is an imported map. */ + std::string m_fileName; /**< Specified path to Map file. */ + std::string m_realFileName; /**< Absolute, real path to Map file. */ + std::string m_library; /**< The name of the library. */ + std::vector m_entries; /**< List of Map entries. */ + RISI::Projectiles m_projectiles; /**< **RISI::Projectiles** loaded when method RIS_load is called. */ + bool m_projectilesLoaded; /**< If **true** data for **m_projectiles** have been read in, otherwise they have not been read in. */ + + void initialize( std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ); + void initialize( HAPI::Node const &a_node, std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ); + + public: + Map( std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent = nullptr ); + Map( HAPI::Node const &a_node, std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent = nullptr ); + ~Map( ); + + Map const *parent( ) const { return( m_parent ); } /**< Returns the value of the *m_parent* member. */ + std::string const &fileName( ) const { return( m_fileName ); } /**< Returns the value of the *m_fileName* member. */ + std::string const &realFileName( ) const { return( m_realFileName ); } /**< Returns the value of the *m_realFileName* member. */ + + std::string const &library( ) const { return( m_library ); } /**< Returns the value of the *m_library* member. */ + std::string const &resolvedLibrary( ) const ; + void libraries( std::vector &a_libraries ) const ; + + std::size_t size( ) const { return( m_entries.size( ) ); } /**< Returns the number of entries in *this*. Does not descend map entries. */ + BaseEntry const *operator[]( std::size_t a_index ) const { return( m_entries[a_index] ); } + /**< Returns the map entry at index *a_index*. */ + + ProtareBase const *findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library = "", + std::string const &a_evaluation = "" ) const ; + void findProtareEntries( FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library = std::regex( ".*" ), std::regex const &a_evaluation = std::regex( ".*" ) ) const ; + std::string protareFilename( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library = "", + std::string const &a_evaluation = "", BaseEntry::PathForm a_form = BaseEntry::PathForm::real ) const ; + + bool isProtareAvailable( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library = "", + std::string const &a_evaluation = "" ) const { + return( protareFilename( a_projectileID, a_targetID, a_library, a_evaluation, BaseEntry::PathForm::entered ) != GIDI_emptyFileNameChars ); } + /**< Returns true if the map contains a Protare matching *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*, and false otherwise. */ + bool isTNSL_target( std::string const &a_targetID ) const ; + std::vector availableEvaluations( std::string const &a_projectileID, std::string const &a_targetID ) const ; + + GIDI::Protare *protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, std::string const &a_projectileID, + std::string const &a_targetID, std::string const &a_library = "", std::string const &a_evaluation = "", + bool a_targetRequiredInGlobalPoPs = true, bool a_requiredInPoPs = true ) const ; + + std::vector directory( std::string const &a_projectileID = "", std::string const &a_targetID = "", + std::string const &a_library = "", std::string const &a_evaluation = "" ) const ; + bool walk( MapWalkCallBack a_mapWalkCallBack, void *a_userData, int a_level = 0 ) const ; + + GUPI::Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } /**< Always returns *nullptr*. */ + GUPI::Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } /**< Always returns *nullptr*. */ + + void saveAs( std::string const &a_fileName ) const ; + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + + std::string RIS_fileName( ); + bool RIS_fileExist( ); + RISI::Projectiles const &RIS_load( std::string const &a_energyUnit ); + std::string replacementTarget( PoPI::Database const &a_pops, std::string const &a_projectile, std::string const &a_target ); +}; + +} // End of namespace Map. + +namespace Functions { +/* +============================================================ +================= FissionEnergyRelease ================== +============================================================ +*/ +class FissionEnergyRelease : public Function1dForm { + + private: + Function1dForm *m_promptProductKE; /**< The **ENDF** prompt total product kinetic energy released. */ + Function1dForm *m_promptNeutronKE; /**< The **ENDF** prompt neutron kinetic energy released. */ + Function1dForm *m_delayedNeutronKE; /**< The **ENDF** delayed neutron kinetic energy released. */ + Function1dForm *m_promptGammaEnergy; /**< The **ENDF** prompt gamma energy released. */ + Function1dForm *m_delayedGammaEnergy; /**< The **ENDF** delayed gamma energy released. */ + Function1dForm *m_delayedBetaEnergy; /**< The **ENDF** delayed beta kinetic energy released. */ + Function1dForm *m_neutrinoEnergy; /**< The **ENDF** neutrino energy released. */ + Function1dForm *m_nonNeutrinoEnergy; /**< The **ENDF** non neutrino energy released. */ + Function1dForm *m_totalEnergy; /**< The **ENDF** total energy released. */ + + void energyReleaseToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_moniker, std::string const &a_indent, Function1dForm *a_function1d ) const ; + + public: + FissionEnergyRelease( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + ~FissionEnergyRelease( ); + + double domainMin( ) const { return( m_nonNeutrinoEnergy->domainMin( ) ); } /**< Returns the minimum domain value for the energy released. */ + double domainMax( ) const { return( m_nonNeutrinoEnergy->domainMax( ) ); } /**< Returns the maximum domain value for the energy released. */ + double evaluate( double a_x1 ) const { return( m_nonNeutrinoEnergy->evaluate( a_x1 ) ); } /**< Returns the value of *m_nonNeutrinoEnergy* evaluated at *a_x1*. */ + Vector multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const ; + + Function1dForm const *promptProductKE( ) const { return( m_promptProductKE ); } /**< Returns the value of the *m_promptProductKE* member. */ + Function1dForm *promptProductKE( ) { return( m_promptProductKE ); } /**< Returns the value of the *m_promptProductKE* member. */ + Function1dForm const *promptNeutronKE( ) const { return( m_promptNeutronKE ); } /**< Returns the value of the *m_promptNeutronKE* member. */ + Function1dForm *promptNeutronKE( ) { return( m_promptNeutronKE ); } /**< Returns the value of the *m_promptNeutronKE* member. */ + Function1dForm const *delayedNeutronKE( ) const { return( m_delayedNeutronKE ); } /**< Returns the value of the *m_delayedNeutronKE* member. */ + Function1dForm *delayedNeutronKE( ) { return( m_delayedNeutronKE ); } /**< Returns the value of the *m_delayedNeutronKE* member. */ + Function1dForm const *promptGammaEnergy( ) const { return( m_promptGammaEnergy ); } /**< Returns the value of the *m_promptGammaEnergy* member. */ + Function1dForm *promptGammaEnergy( ) { return( m_promptGammaEnergy ); } /**< Returns the value of the *m_promptGammaEnergy* member. */ + Function1dForm const *delayedGammaEnergy( ) const { return( m_delayedGammaEnergy ); } /**< Returns the value of the *m_delayedGammaEnergy* member. */ + Function1dForm *delayedGammaEnergy( ) { return( m_delayedGammaEnergy ); } /**< Returns the value of the *m_delayedGammaEnergy* member. */ + Function1dForm const *delayedBetaEnergy( ) const { return( m_delayedBetaEnergy ); } /**< Returns the value of the *m_delayedBetaEnergy* member. */ + Function1dForm *delayedBetaEnergy( ) { return( m_delayedBetaEnergy ); } /**< Returns the value of the *m_delayedBetaEnergy* member. */ + Function1dForm const *neutrinoEnergy( ) const { return( m_neutrinoEnergy ); } /**< Returns the value of the *m_neutrinoEnergy* member. */ + Function1dForm *neutrinoEnergy( ) { return( m_neutrinoEnergy ); } /**< Returns the value of the *m_neutrinoEnergy* member. */ + Function1dForm const *nonNeutrinoEnergy( ) const { return( m_nonNeutrinoEnergy ); } /**< Returns the value of the *m_neutrinoEnergy* member. */ + Function1dForm *nonNeutrinoEnergy( ) { return( m_nonNeutrinoEnergy ); } /**< Returns the value of the *m_neutrinoEnergy* member. */ + Function1dForm const *totalEnergy( ) const { return( m_totalEnergy ); } /**< Returns the value of the *m_totalEnergy* member. */ + Function1dForm *totalEnergy( ) { return( m_totalEnergy ); } /**< Returns the value of the *m_totalEnergy* member. */ + + void toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; +}; + +} // End of namespace Functions. + +/* +============================================================ +========================== Groups ========================== +============================================================ +*/ +class Groups : public Suite { + + public: + Groups( ); + Groups( std::string const &a_fileName ); + + void addFile( std::string const &a_fileName ); +}; + +/* +============================================================ +========================== Fluxes ========================== +============================================================ +*/ +class Fluxes : public Suite { + + public: + Fluxes( ); + Fluxes( std::string const &a_fileName ); + + void addFile( std::string const &a_fileName ); +}; + +/* +============================================================ +============= MultiGroupCalulationInformation ============== +============================================================ +*/ + +class MultiGroupCalulationInformation { + + public: + Transporting::MultiGroup const &m_multiGroup; /**< The multi-group boundaries. */ + Transporting::Flux const &m_flux; /**< The flux weighting. */ + ptwXPoints *m_boundaries_xs; /**< This is an **ptwXPoints** representation of *m_heatedMultiGroupLabel* as needed by numerical functions. */ + ptwXYPoints *m_fluxes_xys; /**< This is an **ptwXYPoints** representation of *m_flux* as needed by numerical functions. */ + ptwXPoints *m_multiGroupFlux; /**< This is the grouped representation of *m_flux* as needed by numerical functions. */ + + MultiGroupCalulationInformation( Transporting::MultiGroup const &a_multiGroup, Transporting::Flux const &a_flux ); + ~MultiGroupCalulationInformation( ); +}; + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +Form *parseExternalFilesSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseStylesSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseTransportablesSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseReaction( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseOrphanProduct( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseFissionComponent( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseReactionType( std::string const &a_moniker, Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseSumsCrossSectionsSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseSumsMultiplicitiesSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseDoubleDifferentialCrossSectionSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseScatteringAtom( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseCrossSectionSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseDelayedNeutronsSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseFissionEnergyReleasesSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parsePhysicalQuantitySuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseAvailableSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseQSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseProductSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseMultiplicitySuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseDistributionSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseAverageEnergySuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseAverageMomentumSuite( Construction::Settings const &a_construction, Suite *parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pop, PoPI::Database const &a_internalPoPs, + std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseACE_URR_probabilityTables( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); +Form *parseColumnHeaders( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ); +Functions::Function1dForm *data1dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *parent ); +Functions::Function1dForm *data1dParseAllowEmpty( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); +void data1dListParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, std::vector &a_function1ds ); +Functions::Function2dForm *data2dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *parent ); +void data2dListParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, std::vector &a_function2ds ); +Functions::Function3dForm *data3dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *parent ); +void checkOuterDomainValues1d( std::vector &a_functions, std::vector &a_Xs ); +void checkOuterDomainValues2d( std::vector &a_functions, std::vector &a_Xs ); +void checkSequentialDomainLimits1d( std::vector &a_functions, std::vector &a_Xs ); +void checkSequentialDomainLimits2d( std::vector &a_functions, std::vector &a_Xs ); + +int parseFlattened1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Vector &data ); + +Vector collapse( Vector const &a_vector, Transporting::Settings const &a_settings, Transporting::Particles const &a_particles, double a_temperature ); +Matrix collapse( Matrix const &a_matrix, Transporting::Settings const &a_settings, Transporting::Particles const &a_particles, double a_temperature, + std::string const &a_productID ); + +Vector transportCorrect( Vector const &a_vector, Vector const &a_transportCorrection ); +Matrix transportCorrect( Matrix const &a_matrix, Vector const &a_transportCorrection ); + +Vector multiGroupXYs1d( Transporting::MultiGroup const &a_boundaries, Functions::XYs1d const &a_function, Transporting::Flux const &a_flux ); +Vector *multiGroupTwoXYs1ds( MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_function1, + Functions::XYs1d const &a_function2 ); +void calculate1dMultiGroupDataInComponent( ProtareSingle const *a_protare, std::string const &a_heatedMultiGroupLabel, + MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Component &a_component, Functions::XYs1d const &a_crossSection ); +void calculate1dMultiGroupFissionEnergyRelease( MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_weight, + Functions::Function1dForm const *a_evaluated, Functions::Function1dForm *a_gridded1d ); + + +int ENDL_CFromENDF_MT( int ENDF_MT, int *ENDL_C, int *ENDL_S ); + +GNDS_FileType GNDS_fileType( std::string const &a_fileName, GNDS_FileTypeInfo &a_GNDS_fileTypeInfo ); + +/* +* The following are in the file GIDI_misc.cpp. +*/ +long binarySearchVector( double a_x, std::vector const &a_Xs ); +void intsToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, std::vector a_values, std::string const &a_attributes ); +void parseValuesOfDoubles( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_vector ); +void parseValuesOfDoubles( HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_vector, int a_useSystem_strtod ); +void parseValuesOfInts( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, std::vector &a_vector ); +void parseValuesOfInts( HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_vector ); +void doublesToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, std::vector a_values, std::size_t a_start = 0, bool a_newLine = true, + std::string const &a_valueType = "" ); +Frame parseFrame( HAPI::Node const &a_node, SetupInfo &a_setupInfo, std::string const &a_name ); +std::string frameToString( Frame a_frame ); +std::string intToString( int a_value ); +std::string size_t_ToString( std::size_t a_value ); +std::string nodeWithValuesToDoubles( GUPI::WriteInfo &a_writeInfo, std::string const &a_nodeName, std::vector const &a_values ); +void excludeReactionsSetAdjust( ExcludeReactionsSet a_excludeReactionsSet, Protare const &a_protare ); + +Functions::Ys1d gridded1d2GIDI_Ys1d( Functions::Function1dForm const &a_function1d ); +Functions::Ys1d vector2GIDI_Ys1d( Axes const &a_axes, Vector const &a_vector ); + +std::string LLNL_gidToLabel( int a_gid ); +std::string LLNL_fidToLabel( int a_fid ); + +std::vector sortedListOfStrings( std::vector const &a_strings, bool a_orderIsAscending = true ); + +void energy2dToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_moniker, std::string const &a_indent, Functions::Function1dForm *a_function ); + +std::vector settingsFluxesFromFunction3d( Functions::Function3dForm const &a_function3d ); + +} // End of namespace GIDI. + +#endif // End of GIDI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/GIDI_data.hpp b/source/processes/hadronic/models/lend/include/GIDI_data.hpp new file mode 100644 index 0000000000..3184547e97 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/GIDI_data.hpp @@ -0,0 +1,174 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef GIDI_data_hpp_included +#define GIDI_data_hpp_included 1 + +#include +#include +#include + +namespace GIDI { + +/* +============================================================ +=========================== Data1d ========================= +============================================================ +*/ +class Data1d { // BRB: currently not used. + + private: + std::vector m_xs; + std::vector m_ys; + + public: + Data1d( std::size_t a_number, double const *const a_xs ); + Data1d( std::size_t a_number, double const *const a_xs, double const *const a_ys ); + Data1d( std::vector const &a_xs ); + Data1d( std::vector const &a_xs, std::vector const &a_ys ); + Data1d( Data1d const &a_1dData ); + ~Data1d( ); + + std::size_t size( ) const { return( m_xs.size( ) ); } + + Data1d operator+( double a_value ) const ; + Data1d &operator+=( double a_value ); + Data1d operator+( Data1d const &a_rhs ) const ; + Data1d &operator+=( Data1d const &a_rhs ); + + Data1d operator-( double a_value ) const ; + Data1d &operator-=( double a_value ); + Data1d operator-( Data1d const &a_rhs ) const ; + Data1d &operator-=( Data1d const &a_rhs ); + + Data1d operator*( double a_value ) const ; + Data1d &operator*=( double a_value ); + Data1d operator/( double a_value ) const ; + Data1d &operator/=( double a_value ); + + void print( std::string const &a_prefix ) const ; +}; + +/* +============================================================ +========================== Vector ========================== +============================================================ +*/ +class Vector { + + private: + std::vector m_vector; /**< The list of elements, each is a double instance. */ + + void writeWithBoundaries2( FILE *a_file, char const *a_format, std::vector const &a_boundaries, double a_epsilon ) const ; + + public: + Vector( std::size_t a_number = 0 ); + Vector( std::vector const &a_values ); + Vector( std::size_t a_number, double const *a_values ); + Vector( Vector const &a_vector ); + ~Vector( ); + + Vector &operator=( Vector const &a_rhs ); + + std::size_t size( ) const { return( m_vector.size( ) ); } /**< Returns a number of elements of *this*. */ + void resize( std::size_t a_number, double a_value = 0.0 ) { m_vector.resize( a_number, a_value ); } /**< Resizes *this* to *a_number* elements. For details, see std::vector.resize. */ + std::vector &data( ) { return( m_vector ); } + + double &operator[]( std::size_t a_index ) { return( m_vector[a_index] ); } /**< Returns a reference to the (*a_index*-1)th element. */ + double operator[]( std::size_t a_index ) const { return( m_vector[a_index] ); } /**< Returns a reference to the (*a_index*-1)th element. */ + + Vector operator+( double a_value ) const ; + Vector &operator+=( double a_value ); + Vector operator+( Vector const &a_rhs ) const ; + Vector &operator+=( Vector const &a_rhs ); + + Vector operator-( double a_value ) const ; + Vector &operator-=( double a_value ); + Vector operator-( Vector const &a_rhs ) const ; + Vector &operator-=( Vector const &a_rhs ); + + Vector operator*( double a_value ) const ; + Vector &operator*=( double a_value ); + + Vector operator/( double a_value ) const ; + Vector &operator/=( double a_value ); + + void reverse( ); + + void setToValueInFlatRange( std::size_t a_start, std::size_t a_end, double a_value ); + double sum( ); + void print( std::string const &a_prefix ) const ; + void write( FILE *a_file, std::string const &a_prefix ) const ; + void writeWithBoundaries( FILE *a_file, char const *a_format, std::vector const &a_boundaries, double a_epsilon ) const ; +}; + +/* +============================================================ +========================== Matrix ========================== +============================================================ +*/ +class Matrix { + + private: + std::vector m_matrix; /**< The list of rows, each is a Vector instance. */ + + public: + Matrix( std::size_t a_rows, std::size_t a_columns ); + Matrix( Matrix const &a_gidi_matrix ); + ~Matrix( ); + Matrix &operator=( Matrix const &a_rhs ); + + std::size_t size( ) const { return( m_matrix.size( ) ); } /**< Returns the number of rows or *this*. */ + + Vector &operator[]( std::size_t a_index ) { return( m_matrix[a_index] ); } /**< Returns a reference to the (*a_index*-1)th row. */ + Vector const &operator[]( std::size_t a_index ) const { return( m_matrix[a_index] ); } /**< Returns a reference to the (*a_index*-1)th row. */ + + /** Sets the cell at row **a_row** and column **a_column** to **a_value**. */ + void operator()( std::size_t a_row /**< The cell's row. */, + std::size_t a_column /**< The cell's row. */, + double a_value /**< The value to put in the cell. */ ) + { m_matrix[a_row][a_column] = a_value; } + + std::vector const &matrix( ) const { return( m_matrix ); } + + Matrix operator+( double a_value ) const ; + Matrix &operator+=( double a_value ); + Matrix operator+( Matrix const &a_rhs ) const ; + Matrix &operator+=( Matrix const &a_rhs ); + + Matrix operator-( double a_value ) const ; + Matrix &operator-=( double a_value ); + Matrix operator-( Matrix const &a_rhs ) const ; + Matrix &operator-=( Matrix const &a_rhs ); + + Matrix operator*( double a_value ) const ; + Matrix &operator*=( double a_value ); + + Matrix operator/( double a_value ) const ; + Matrix &operator/=( double a_value ); + + std::size_t numberOfColumns( ) const ; + /** Sets the cell at row **a_row** and column **a_column** to **a_value**. */ + void set( std::size_t a_row /**< The cell's row. */, + std::size_t a_column /**< The cell's row. */, + double a_value /**< The value to put in the cell. */ ) + { m_matrix[a_row][a_column] = a_value; } + /** Sets the row at **a_row** to **a_vector**. */ + void set( std::size_t a_row /**< The row to set. */, + Vector const &a_vector /**< The Vector to set at row **a_row**. */ ) + { m_matrix[a_row] = a_vector; } + void push_back( Vector const &a_vector ); + Matrix transpose( ); + void reverse( ); + void print( std::string const &a_prefixForRow ) const ; +}; + +} + +#endif // End of GIDI_data_hpp_included diff --git a/source/processes/hadronic/models/lend/include/GIDI_settings.hh b/source/processes/hadronic/models/lend/include/GIDI_settings.hh deleted file mode 100644 index e582760218..0000000000 --- a/source/processes/hadronic/models/lend/include/GIDI_settings.hh +++ /dev/null @@ -1,243 +0,0 @@ -/* -# <> -# <> -*/ - -#define GIDI_USE_BDFLS 0 - -#ifndef GIDI_settings_hpp_included -#define GIDI_settings_hpp_included 1 - -#include -#include -#include - -#include -#include -#include - -/* Disable Effective C++ warnings in GIDI header files. */ -#if defined( __INTEL_COMPILER ) -#pragma warning( push ) - -#if __INTEL_COMPILER > 1399 -#pragma warning( disable:2021 ) -#elif __INTEL_COMPILER > 1199 -#pragma warning( disable:2304 ) -#endif - -#endif - -#define GIDI_settings_projectileEnergyMode_continuousEnergy 1 -#define GIDI_settings_projectileEnergyMode_grouped ( 1 << 1 ) -#define GIDI_settings_projectileEnergyMode_fixedGrid ( 1 << 2 ) - -class GIDI_settings_group { - - private: - std::string mLabel; - std::vector mBoundaries; - - public: - GIDI_settings_group( std::string const &label = "empty", int size = 0 ); - GIDI_settings_group( std::string const &label, int length, double const *values ); - GIDI_settings_group( std::string const &label, std::vector const &boundaries ); - GIDI_settings_group( GIDI_settings_group const &group ); - GIDI_settings_group& operator=( const GIDI_settings_group &group ); - ~GIDI_settings_group( ); - - inline double operator[]( int const index ) const { return( mBoundaries[index] ); } - inline int size( void ) const { return( (int) mBoundaries.size( ) ); } - inline int getNumberOfGroups( void ) const { return( (int) ( mBoundaries.size( ) - 1 ) ); } - inline double const *pointer( void ) const { return( &(mBoundaries[0]) ); } - - void setFromCDoubleArray( int length, double *values ); - inline std::string getLabel( ) const { return( mLabel ); } - int getGroupIndexFromEnergy( double energy, bool encloseOutOfRange ) const; - inline bool isLabel( std::string &label ) const { return( label == mLabel ); } - void print( bool outline = false, int valuesPerLine = 10 ) const; - - private: - void initialize( std::string const &label, int size, int length, double const *values ); -}; - -#if GIDI_USE_BDFLS -#include - -class GIDI_settings_groups_from_bdfls { - - private: - std::vector mGroups; - - public: - GIDI_settings_groups_from_bdfls( std::string const &fileName ); - GIDI_settings_groups_from_bdfls( char const *fileName ); - GIDI_settings_groups_from_bdfls( cbdfls_file const *bdfls ); - ~GIDI_settings_groups_from_bdfls( ); - - GIDI_settings_group getViaGID( int gid ) const; - std::vector getLabels( void ) const; - std::vector getGIDs( void ) const; - void print( bool outline = true, int valuesPerLine = 10 ) const; - - private: - void initialize( char const *fileName ); - void initialize2( cbdfls_file const *bdfls ); -}; -#endif - -/** - This class stores the flux for one Legendre order (see class GIDI_settings_flux). -*/ -class GIDI_settings_flux_order { - - private: - int mOrder; /**< The Legendre order of the flux. */ - std::vector mEnergies; /**< List of flux energies. */ - std::vector mFluxes; /**< List of flux values - one for each element of mEnergies. */ - - public: - GIDI_settings_flux_order( int order /**< The Legendre order for this flux data. */ ); - GIDI_settings_flux_order( int order /**< The Legendre order for this flux data. */, - int length /**< The number or values in energies and fluxes. */, - double const *energies /**< List of energies where flux is given. */, - double const *fluxes /**< List of flux value for each energies value. */ ); - GIDI_settings_flux_order( int order /**< The Legendre order for this flux data. */, - std::vector const &energies /**< List of energies where flux is given. */, - std::vector const &fluxes /**< List of flux value for each energies value. */ ); - GIDI_settings_flux_order( GIDI_settings_flux_order const &fluxOrder /**< Legendre flux order to copy. */ ); - GIDI_settings_flux_order& operator=( const GIDI_settings_flux_order &fluxOrder ); - ~GIDI_settings_flux_order( ); - - inline int getOrder( void ) const { return( mOrder ); } - inline int size( void ) const { return( (int) mEnergies.size( ) ); } - inline double const *getEnergies( void ) const { return( &(mEnergies[0]) ); } - inline double const *getFluxes( void ) const { return( &(mFluxes[0]) ); } - void print( int valuesPerLine = 10 ) const; - - private: - void initialize( int order, int length, double const *energies, double const *fluxes ); -}; - -class GIDI_settings_flux { - - private: - std::string mLabel; /**< Label for the flux. */ - double mTemperature; - std::vector mFluxOrders; /**< List of fluxes for each Legendre order, l, sorted by Legendre order starting with l = 0. */ - - public: - GIDI_settings_flux( std::string const &label, double temperature_MeV ); - GIDI_settings_flux( char const *label, double temperature_MeV ); - GIDI_settings_flux( GIDI_settings_flux const &flux ); - GIDI_settings_flux& operator=( const GIDI_settings_flux &flux ); - ~GIDI_settings_flux( ); - - GIDI_settings_flux_order const *operator[]( int order ) const; - inline int getMaxOrder( void ) const { return( (int) mFluxOrders.size( ) - 1 ); } - inline int size( void ) const { return( (int) mFluxOrders.size( ) ); } - - inline std::string getLabel( ) const { return( mLabel ); } - inline bool isLabel( std::string const &label ) const { return( label == mLabel ); } - inline bool isLabel( char const *label ) const { return( label == mLabel ); } - inline double getTemperature( ) const { return( mTemperature ); } - void addFluxOrder( GIDI_settings_flux_order const &fluxOrder ); - void print( bool outline = true, int valuesPerLine = 10 ) const; -}; - -#if GIDI_USE_BDFLS -class GIDI_settings_fluxes_from_bdfls { - - private: - std::vector mFluxes; - - public: - GIDI_settings_fluxes_from_bdfls( std::string const &fileName, double temperature_MeV ); - GIDI_settings_fluxes_from_bdfls( char const *fileName, double temperature_MeV ); - GIDI_settings_fluxes_from_bdfls( cbdfls_file const *bdfls, double temperature_MeV ); - ~GIDI_settings_fluxes_from_bdfls( ); - - GIDI_settings_flux getViaFID( int fid ); - std::vector getLabels( void ); - std::vector getFIDs( void ); - void print( bool outline = true, int valuesPerLine = 10 ); - - private: - void initialize( char const *fileName, double temperature_MeV ); - void initialize2( cbdfls_file const *bdfls, double temperature_MeV ); -}; -#endif - -class GIDI_settings_processedFlux { - - private: - GIDI_settings_flux mFlux; - std::vector mFluxXY; /* Same as mFlux but stored as ptwXYPoints for each l-order. */ - std::vector mGroupedFlux; /* mFlux grouped using mGroupX, and stored as ptwXPoints for each l-order. */ - - public: - GIDI_settings_processedFlux( GIDI_settings_flux const &flux, GIDI::ptwXPoints *groupX ); - GIDI_settings_processedFlux( GIDI_settings_processedFlux const &flux ); - GIDI_settings_processedFlux& operator=( const GIDI_settings_processedFlux &flux ); - ~GIDI_settings_processedFlux( ); - - inline double getTemperature( ) const { return( mFlux.getTemperature( ) ); } - GIDI::ptwXPoints *groupFunction( GIDI::statusMessageReporting *smr, GIDI::ptwXPoints *groupX, GIDI::ptwXYPoints *ptwXY1, int order ) const; -}; - -class GIDI_settings_particle { - - private: - int mPoPId; - bool mTransporting; - int mEnergyMode; - GIDI_settings_group mGroup; - GIDI::ptwXPoints *mGroupX; /* Same as mGroup but stored as ptwXPoints. */ - std::vector mProcessedFluxes; - - public: - GIDI_settings_particle( int PoPId, bool transporting, int energyMode ); - GIDI_settings_particle( GIDI_settings_particle const &particle ); - int initialize( int PoPId, bool transporting, int energyMode ); - ~GIDI_settings_particle( ); - - int addFlux( GIDI::statusMessageReporting *smr, GIDI_settings_flux const &flux ); - GIDI_settings_processedFlux const *nearestFluxToTemperature( double temperature ) const; - inline int getGroupIndexFromEnergy( double e_in, bool encloseOutOfRange ) const { return( mGroup.getGroupIndexFromEnergy( e_in, encloseOutOfRange ) ); }; - inline int getNumberOfGroups( void ) const { return( mGroup.getNumberOfGroups( ) ); }; - inline int getPoPId( void ) const { return( mPoPId ); } - inline int getEnergyMode( void ) const { return( mEnergyMode ); } - inline bool getTransporting( void ) const { return( mTransporting ); } - inline GIDI_settings_group getGroup( void ) const { return( mGroup ); } - GIDI_settings_flux const *getFlux( double temperature ) const; - GIDI::ptwXPoints *groupFunction( GIDI::statusMessageReporting *smr, GIDI::ptwXYPoints *ptwXY1, double temperature, int order ) const; - void setGroup( GIDI_settings_group const &group ); - - inline bool isEnergyMode_continuous( void ) const { return( this->mEnergyMode & GIDI_settings_projectileEnergyMode_continuousEnergy ); } - inline bool isEnergyMode_grouped( void ) const { return( this->mEnergyMode & GIDI_settings_projectileEnergyMode_grouped ); } - inline bool isEnergyMode_fixedGrid( void ) const { return( this->mEnergyMode & GIDI_settings_projectileEnergyMode_fixedGrid ); } - - private: - GIDI_settings_flux const *getProcessedFlux( double temperature ) const; -}; - -class GIDI_settings { - - private: - std::map mParticles; - - public: - GIDI_settings( ); - ~GIDI_settings( ); - - int addParticle( GIDI_settings_particle const &particle ); - GIDI_settings_particle const *getParticle( int PoPId ) const; - int eraseParticle( int PoPId ); - void releaseMemory( ) { mParticles.clear( ); } -}; - -#if defined( __INTEL_COMPILER ) -#pragma warning( pop ) -#endif - -#endif // End of GIDI_settings_hpp_included diff --git a/source/processes/hadronic/models/lend/include/GUPI.hpp b/source/processes/hadronic/models/lend/include/GUPI.hpp new file mode 100644 index 0000000000..5333824644 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/GUPI.hpp @@ -0,0 +1,369 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef GUPI_hpp_included +#define GUPI_hpp_included 1 + +#include +#include + +#include +#include +#include + +namespace GUPI { + +class Entry; +class Suite; + +typedef Entry *(*GUPI_parseSuite)( Suite *a_parent, HAPI::Node const &a_node ); + +#define GUPI_documentationChars "documentation" +#define GUPI_titleChars "title" +#define GUPI_abstractChars "abstract" +#define GUPI_bodyChars "body" +#define GUPI_endfCompatibleChars "endfCompatible" +#define GUPI_doiChars "doi" +#define GUPI_publicationDateChars "publicationDate" +#define GUPI_versionChars "version" + +/* +============================================================ +======================== WriteInfo ========================= +============================================================ +*/ + +class WriteInfo { + + public: + std::list m_lines; + std::string m_incrementalIndent; + int m_valuesPerLine; + std::string m_sep; + + WriteInfo( std::string const &a_incrementalIndent = " ", int a_valuesPerLine = 100, std::string const &a_sep = " " ); + + std::string incrementalIndent( std::string const &indent ) { return( indent + m_incrementalIndent ); } + void push_back( std::string const &a_line ) { m_lines.push_back( a_line ); } + + void addNodeStarter( std::string const &indent, std::string const &a_moniker, std::string const &a_attributes = "" ) { + m_lines.push_back( indent + "<" + a_moniker + a_attributes + ">" ); } + void addNodeStarterEnder( std::string const &indent, std::string const &a_moniker, std::string const &a_attributes = "" ) { + m_lines.push_back( indent + "<" + a_moniker + a_attributes + "/>" ); } + void addNodeEnder( std::string const &a_moniker ) { m_lines.back( ) += ""; } + std::string addAttribute( std::string const &a_name, std::string const &a_value ) const { return( " " + a_name + "=\"" + a_value + "\"" ); } + + std::string nodeStarter( std::string const &indent, std::string const &a_moniker, std::string const &a_attributes = "" ) + { return( indent + "<" + a_moniker + a_attributes + ">" ); } + std::string nodeEnder( std::string const &a_moniker ) { return( "" ); } + + void print( ); + void clear( ) { m_lines.clear( ); } /**< Clears the contents of *m_lines*. */ +}; + +/* +============================================================ +========================= Ancestry ========================= +============================================================ +*/ +class Ancestry { + + public: + /* *********************************************************************************************************//** + * Constructs and returns the key name/value for the *this* node. + * + * @return The constructed key name/value. + ***********************************************************************************************************/ + static std::string buildXLinkItemKey( std::string const &a_name, std::string const &a_key ) { + + if( a_key.size( ) == 0 ) return( "" ); + return( "[@" + a_name + "='" + a_key + "']" ); + } + + private: + std::string m_moniker; /**< The node's name (i.e., moniker). */ + Ancestry *m_ancestor; /**< The parent node of *this*. */ + std::string m_attribute; /**< The name of the attribute in the node that uniquely identifies the node when the parent node containing other child nodes with the same moniker. */ + + Ancestry *findInAncestry2( std::size_t a_index, std::vector const &a_segments ); + Ancestry const *findInAncestry2( std::size_t a_index, std::vector const &a_segments ) const ; + + public: + Ancestry( std::string const &a_moniker, std::string const &a_attribute = "" ); + virtual ~Ancestry( ); + Ancestry &operator=( Ancestry const &a_ancestry ); + + std::string const &moniker( ) const { return( m_moniker ); } /**< Returns the value of the *m_moniker* member. */ + void setMoniker( std::string const &a_moniker ) { m_moniker = a_moniker; } /**< Set the value of the *m_moniker* member to *a_moniker*. */ + Ancestry *ancestor( ) { return( m_ancestor ); } /**< Returns the value of the *m_ancestor* member. */ + Ancestry const *ancestor( ) const { return( m_ancestor ); } /**< Returns the value of the *m_ancestor* member. */ + void setAncestor( Ancestry *a_ancestor ) { m_ancestor = a_ancestor; } /**< Sets the *m_ancestor* member to *a_ancestor*. */ + std::string attribute( ) const { return( m_attribute ); } /**< Returns the value of the *m_attribute* member. */ + + Ancestry *root( ); + Ancestry const *root( ) const ; + bool isChild( Ancestry *a_instance ) { return( this == a_instance->m_ancestor ); } /**< Returns true if *a_instance* is a child of *this*. */ + bool isParent( Ancestry *a_parent ) { return( this->m_ancestor == a_parent ); } /**< Returns true if *a_instance* is the parent of *this*. */ + bool isRoot( ) const { return( this->m_ancestor == nullptr ); } /**< Returns true if *this* is the root ancestor. */ + + Ancestry *findInAncestry( std::string const &a_href ); + Ancestry const *findInAncestry( std::string const &a_href ) const ; + + /* *********************************************************************************************************//** + * Used to tranverse **GNDS** nodes. This method returns a pointer to a derived class' *a_item* member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + virtual Ancestry *findInAncestry3( std::string const &a_item ) = 0; + virtual Ancestry const *findInAncestry3( std::string const &a_item ) const = 0; + + virtual LUPI_HOST void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + virtual std::string xlinkItemKey( ) const { return( "" ); } /**< Returns the value of *this*'s key. */ + std::string toXLink( ) const ; + + virtual void toXMLList( WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + void printXML( ) const ; +}; + +/* +============================================================ +========================== Entry =========================== +============================================================ +*/ +class Entry : public Ancestry { + + private: + std::string m_keyName; /**< The name of the key used by the parent suite to reference *this* entry. */ + std::string m_keyValue; /**< The key used by the parent suite to reference *this* entry. */ + + public: + Entry( std::string const &a_moniker, std::string const &a_keyName, std::string const &a_keyValue ); + Entry( HAPI::Node const &a_node, std::string const &a_keyName ); + ~Entry( ); + + std::string const &keyName( ) const { return( m_keyName ); } /**< Returns a const reference to the *m_keyName* member. */ + std::string const &keyValue( ) const { return( m_keyValue ); } /**< Returns a const reference to the *m_keyValue* member. */ + + Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + LUPI_HOST void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + std::string xlinkItemKey( ) const { + + if( m_keyValue == "" ) return( "" ); + return( buildXLinkItemKey( m_keyName, m_keyValue ) ); + } +}; + +/* +============================================================ +========================== Text ============================ +============================================================ +*/ + +class Text : public Ancestry { + + public: + enum class Encoding { + utf8, + ascii + }; + + enum class Markup { + none, + xml, + html, + latex + }; + + private: + std::string m_body; + Encoding m_encoding; + Markup m_markup; + std::string m_label; + + public: + Text( HAPI::Node const &a_node ); + ~Text( ); + + std::string const &body( ) const { return m_body; } + Encoding encoding( ) const { return m_encoding; } + Markup markup( ) const { return m_markup; } + std::string const &label( ) const { return m_label; } + + Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + +}; + +/* +============================================================ +===================== Documentation ======================== +============================================================ +*/ +class Documentation : public Ancestry { + + private: + std::string m_doi; /**< The name of the key used by the parent suite to reference *this* entry. */ + std::string m_publicationDate; /**< The key used by the parent suite to reference *this* entry. */ + std::string m_version; + + Text m_title; + Text m_abstract; + Text m_body; + + public: + // Documentation(std::string const &a_moniker, Text const &a_doi, std::string const &a_publicationDate, Text const &a_version); + Documentation(HAPI::Node const &a_node); + ~Documentation( ); + + std::string const &doi( ) const { return m_doi; } + std::string const &publicationDate( ) const { return m_publicationDate; } + std::string const &version( ) const { return m_version; } + + Text const &title( ) const { return m_title; } + Text const &abstract( ) const { return m_abstract; } + Text const &body( ) const { return m_body; } + + Ancestry *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) { return( nullptr ); } + Ancestry const *findInAncestry3( LUPI_maybeUnused std::string const &a_item ) const { return( nullptr ); } + +}; + +/* +============================================================ +=========================== Suite ========================== +============================================================ +*/ +class Suite : public Ancestry { + + public: + typedef std::vector Entries; /**< The typedef the the *m_entries* member. */ + + private: + std::string m_keyName; /**< The name of the key used to look up items in the suite. */ + mutable Entries m_entries; /**< The list of nodes stored within *this*. */ + std::map m_map; /**< A map of *this* node labels to their index in *m_entries*. */ + + Suite( Suite const *a_suite ); // FIXME, should we make public or private copy constructor? Making private for now. + + public: + Suite( std::string const &a_keyName ); + Suite( std::string const &a_moniker, std::string const &a_keyName ); + Suite( HAPI::Node const &a_node, std::string const &a_keyName, GUPI_parseSuite a_parseSuite ); + ~Suite( ); + + std::string const &keyName( ) const { return( m_keyName ); } /**< Returns a const reference to the *m_keyName* member. */ + std::size_t size( ) const { return( m_entries.size( ) ); } /**< Returns the number of node contained by *this*. */ + + int operator[]( std::string const &a_label ) const ; + typedef Entries::iterator iterator; + typedef Entries::const_iterator const_iterator; + iterator begin( ) { return m_entries.begin( ); } /**< The C++ begin iterator for *this*. */ + const_iterator begin( ) const { return m_entries.begin( ); } /**< The C++ const begin iterator for *this*. */ + iterator end( ) { return m_entries.end( ); } /**< The C++ end iterator for *this*. */ + const_iterator end( ) const { return m_entries.end( ); } /**< The C++ const end iterator for *this*. */ + + template T *get( std::size_t a_Index ); + template T const *get( std::size_t a_Index ) const ; + template T *get( std::string const &a_label ); + template T const *get( std::string const &a_label ) const ; + + void parse( HAPI::Node const &a_node, GUPI_parseSuite a_parseSuite ); + void add( Entry *a_entry ); + iterator find( std::string const &a_label ); + const_iterator find( std::string const &a_label ) const ; + bool has( std::string const &a_label ) const { return( find( a_label ) != m_entries.end( ) ); } + + Ancestry *findInAncestry3( std::string const &a_item ); + Ancestry const *findInAncestry3( std::string const &a_item ) const ; + std::vector findAllOfMoniker( std::string const &a_moniker ) ; + std::vector findAllOfMoniker( std::string const &a_moniker ) const ; + + void toXMLList( WriteInfo &a_writeInfo, std::string const &a_indent = "" ) const ; + void printEntryLabels( std::string const &a_header ) const ; +}; + +/* *********************************************************************************************************//** + * Returns the node at index *a_index*. + * + * @param a_index [in] The index of the node to return. + * + * @return The node at index *a_index*. + ***********************************************************************************************************/ + +template T *Suite::get( std::size_t a_index ) { + + Entry *entry = m_entries[a_index]; + T *object = dynamic_cast( entry ); + + if( object == nullptr ) throw LUPI::Exception( "GIDI::Suite::get( std::size_t ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node at index *a_index*. + * + * @param a_index [in] The index of the node to return. + * + * @return The node at index *a_index*. + ***********************************************************************************************************/ + +template T const *Suite::get( std::size_t a_index ) const { + + Entry *entry = m_entries[a_index]; + T *object = dynamic_cast( entry ); + + if( object == nullptr ) throw LUPI::Exception( "GIDI::Suite::get( std::size_t ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node with label *a_label*. + * + * @param a_label [in] The label of the node to return. + * + * @return The node with label *a_label*. + ***********************************************************************************************************/ + +template T *Suite::get( std::string const &a_label ) { + + int index = (*this)[a_label]; + Entry *entry = m_entries[index]; + T *object = dynamic_cast( entry ); + + if( object == nullptr ) throw LUPI::Exception( "GIDI::Suite::get( std::string const & ): invalid cast" ); + + return( object ); +} + +/* *********************************************************************************************************//** + * Returns the node with label *a_label*. + * + * @param a_label [in] The label of the node to return. + * + * @return The node with label *a_label*. + ***********************************************************************************************************/ + +template T const *Suite::get( std::string const &a_label ) const { + + int index = (*this)[a_label]; + Entry *entry = m_entries[index]; + T *object = dynamic_cast( entry ); + + if( object == nullptr ) throw LUPI::Exception( "GIDI::Suite::get( std::string const & ): invalid cast" ); + + return( object ); +} + +} // End of namespace GUPI. + +#endif // GUPI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/HAPI.hpp b/source/processes/hadronic/models/lend/include/HAPI.hpp new file mode 100644 index 0000000000..cc174b8fe7 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/HAPI.hpp @@ -0,0 +1,420 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef HAPI_hpp_included +#define HAPI_hpp_included 1 + +#include +#include +#include +#include + +#include +#include + +#define HAPI_USE_PUGIXML 1 + +#ifdef HAPI_USE_PUGIXML +#include +#endif + + +#ifdef HAPI_USE_HDF5 +#include +#endif + +#include + +namespace HAPI { + +enum class NodeInteralType { pugiXML, HDF5 }; + +// container classes for reading in from various data sources: + +/* +============================================================ +========================= Attribute ======================== +============================================================ + */ + +class Node_internal; +class Attribute { + + private: + Node_internal *m_node; + std::string m_name; + //std::string m_value; + + public: + inline Attribute() : m_node(nullptr), m_name() {} + + inline Attribute(Node_internal *a_node, std::string const a_name) : + m_node(a_node), + m_name(a_name) + { + } + ~Attribute() = default; + //std::string const &name() const { return( m_name ); } + inline std::string const value() const; + inline int as_int() const; + inline long as_long() const; + inline double as_double() const; +}; + +/* +============================================================ +=========================== Text =========================== +============================================================ + */ +class Text { + + private: + std::string m_text; + + public: + Text(); + Text(std::string const a_text); + ~Text(); + std::string const &get() const { return( m_text ); } +}; + +/* +============================================================ +================== Data_internal (base class) ============== +============================================================ + */ +class Data_internal { + + public: + Data_internal() { }; + virtual ~Data_internal() = 0; + //std::string const getDataType(); + //virtual template T read() = 0; + virtual void getDoubles(nf_Buffer &buffer) = 0; + virtual void getInts(nf_Buffer &buffer) = 0; + virtual int length() const = 0; +}; + +/* +============================================================ +=================== Node_internal (base class) ============= +============================================================ + */ +class Node_internal { + + private: + NodeInteralType m_type; + + public: + Node_internal( NodeInteralType a_type ); + Node_internal( Node_internal const &a_node ); + virtual ~Node_internal() = 0; + + NodeInteralType type( ) const { return( m_type ); } + + virtual std::string attribute(const char* name) = 0; + virtual int attribute_as_int(const char* name) = 0; + virtual long attribute_as_long(const char* name) = 0; + virtual double attribute_as_double(const char* name) = 0; + virtual Node_internal *child(const char* name) = 0; + virtual Node_internal *first_child() = 0; + virtual Node_internal *next_sibling() = 0; + virtual void to_next_sibling() = 0; + virtual Node_internal *copy() = 0; + virtual std::string name() const = 0; + virtual bool empty() const = 0; + virtual Text text() const = 0; + virtual Data_internal *data() const = 0; +}; + + +inline std::string const Attribute::value() const { return( m_node->attribute( m_name.c_str()) ); } +inline int Attribute::as_int() const { return( m_node->attribute_as_int(m_name.c_str()) ); } +inline long Attribute::as_long() const { return( m_node->attribute_as_long(m_name.c_str()) ); } +inline double Attribute::as_double() const { return( m_node->attribute_as_double(m_name.c_str()) ); } + +/* +============================================================ +=========================== Data =========================== +============================================================ + */ +class Data { + + private: + Data_internal *m_data; + + public: + Data(); + Data( Data_internal *a_data ); + ~Data(); + void getDoubles(nf_Buffer &buffer); + void getInts(nf_Buffer &buffer); + int length() const; +}; + +/* +============================================================ +============================ Node ========================== +============================================================ + */ +class Node { + + private: + Node_internal *m_node; + + public: + Node(); + Node( Node_internal *a_node ); + Node( Node const &a_node ); + ~Node(); + inline Attribute attribute(const char* a_name) const{ + return Attribute(m_node, a_name); + } + inline std::string attribute_as_string(const char* a_name) const{ + if(m_node == nullptr){ + return ""; + } + return m_node->attribute(a_name); + } + inline int attribute_as_int(const char* a_name) const{ + if(m_node == nullptr){ + return 0; + } + return m_node->attribute_as_int(a_name); + } + inline long attribute_as_long(const char* a_name) const{ + if(m_node == nullptr){ + return 0; + } + return m_node->attribute_as_long(a_name); + } + inline double attribute_as_double(const char* a_name) const{ + if(m_node == nullptr){ + return 0.0; + } + return m_node->attribute_as_double(a_name); + } + Node child(const char* name) const; + Node first_child() const; + Node next_sibling() const; + void to_next_sibling() const; + Node &operator=(const Node &other); + std::string name() const; + bool empty() const; + Text text() const; + Data data() const; +}; + + +/* +============================================================ +======================= File (base class) ================== +============================================================ + */ +class File { + + public: + File() { }; + virtual ~File() = 0; + virtual Node child(const char* name) = 0; + virtual Node first_child() = 0; + virtual std::string name() const = 0; +}; + + +/* +============================================================ +=============== Data Manager (for hybrid files) ============ +============================================================ + */ +class DataManager { + + public: + DataManager() {}; + virtual ~DataManager() {}; + static DataManager* m_instance; + + public: + virtual void getDoubles(nf_Buffer &result, size_t startIndex, size_t endIndex) = 0; + virtual void getInts(nf_Buffer &result, size_t startIndex, size_t endIndex) = 0; +}; + + +#ifdef HAPI_USE_PUGIXML +/* +============================================================ +===================== XML using Pugi ======================= +============================================================ + */ +class PugiXMLNode : public Node_internal { + + private: + pugi::xml_node m_node; + + public: + PugiXMLNode(); + PugiXMLNode(pugi::xml_node a_node); + PugiXMLNode(const PugiXMLNode &other); + virtual ~PugiXMLNode(); + + std::string attribute(const char* name); + int attribute_as_int(const char* name); + long attribute_as_long(const char* name); + double attribute_as_double(const char* name); + Node_internal *child(char const *name); + Node_internal *first_child(); + Node_internal *next_sibling(); + void to_next_sibling(); + Node_internal *copy(); + Node_internal &operator=(const PugiXMLNode &other); + std::string name() const; + bool empty() const; + Text text() const; + Data_internal *data() const; +}; + +class PugiXMLData : public Data_internal { + + private: + pugi::xml_node m_node; + int m_length; + + public: + PugiXMLData(); + PugiXMLData(pugi::xml_node a_node); + virtual ~PugiXMLData(); + void getDoubles(nf_Buffer &buffer); + void getInts(nf_Buffer &buffer); + int length() const; +}; + +class PugiXMLFile : public File { + + private: + std::string m_name; + pugi::xml_document m_doc; + + public: + PugiXMLFile(); + PugiXMLFile(char const *filename, std::string const &a_callingFunctionName); + virtual ~PugiXMLFile(); + Node child(char const *name); + Node first_child(); + std::string name() const; +}; +#endif + + +#ifdef HAPI_USE_HDF5 +/* +============================================================ +=========================== HDF ============================ +============================================================ + */ +typedef struct { + std::string name; + std::string xmlName; // HDF sometimes mangles names, need original name here + size_t index; + hid_t node_id; +} childInfo; + +class HDFNode : public Node_internal { + + private: + hid_t m_node_id; + hid_t m_parent_id; + size_t m_index; + std::vector m_siblings; + std::vector m_children; + + public: + HDFNode(); + HDFNode(hid_t a_node_id, hid_t a_parent_id, size_t a_index, std::vector a_siblings); + explicit HDFNode(hid_t a_file_id); + HDFNode(const HDFNode &other); + virtual ~HDFNode(); + + //Attribute attribute(char const *name); + std::string attribute(const char* name); + int attribute_as_int(const char* name); + long attribute_as_long(const char* name); + double attribute_as_double(const char* name); + Node_internal *child(char const *name); + Node_internal *first_child(); + Node_internal *next_sibling(); + void to_next_sibling(); + Node_internal *copy(); + Node_internal &operator=(const HDFNode &other); + std::string name() const; + bool empty() const; + Text text() const; + Data_internal *data() const; + +}; + +class HDFData : public Data_internal { + + private: + hid_t m_node_id; + hid_t m_dataspace_id; + int m_length; + + public: + HDFData(); + explicit HDFData(hid_t node_id); + virtual ~HDFData(); + void getDoubles(nf_Buffer &buffer); + void getInts(nf_Buffer &buffer); + int length() const; +}; + +class HDFFile : public File { + + private: + std::string m_name; + hid_t m_doc; + HDFNode *m_doc_as_node; + + public: + HDFFile(); + explicit HDFFile(char const *filename); + virtual ~HDFFile(); + Node child(char const *name); + Node first_child(); + std::string name() const; +}; + +class HDFDataManager : public DataManager{ + + private: + std::string m_filename; + bool m_iDataPresent; + bool m_dDataPresent; + hid_t m_file_id; + hid_t m_dataset_ints, m_dataset_doubles; + hid_t m_dataspace_ints, m_dataspace_doubles; + + hsize_t m_stride[1], m_block[1]; + + size_t m_num_double_reads; + size_t m_num_double_elem; + size_t m_num_int_reads; + size_t m_num_int_elem; + + public: + HDFDataManager(std::string const &filename); + virtual ~HDFDataManager(); + virtual void getDoubles(nf_Buffer &result, size_t startIndex, size_t endIndex); + virtual void getInts(nf_Buffer &result, size_t startIndex, size_t endIndex); +}; +#endif + +} // end of namespace 'HAPI' + +#endif // End of HAPI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/LUPI.hpp b/source/processes/hadronic/models/lend/include/LUPI.hpp new file mode 100644 index 0000000000..439bfcdb9f --- /dev/null +++ b/source/processes/hadronic/models/lend/include/LUPI.hpp @@ -0,0 +1,446 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef LUPI_hpp_included +#define LUPI_hpp_included 1 + +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 + #include + #include +#endif + +#include +#include + +#define LUPI_XML_verionEncoding "" + +#ifndef LUPI_PATH_MAX +#define LUPI_PATH_MAX ( 4 * 4096 ) +#endif + +#if defined (GIDIP_HAVE_COMPILER_FLOATING_POINT_EXCEPTIONS) +void LUPI_FPE_enable( char const *a_file, int a_line ); +void LUPI_FPE_disable_and_clear( char const *a_file, int a_line ); +void LUPI_FPE_test( char const *a_file, int a_line ); +#endif + +namespace LUPI { + +#ifdef _WIN32 +#define LUPI_FILE_SEPARATOR "\\" +#else +#define LUPI_FILE_SEPARATOR "/" +#endif + +#define GNDS_formatVersion_1_10Chars "1.10" +#define GNDS_formatVersion_2_0Chars "2.0" +#define GNDS_formatVersion_2_0_LLNL_4Chars "2.0.LLNL_4" + +void deprecatedFunction( std::string const &a_functionName, std::string const &a_replacementName, std::string const &a_asOf ); + +/* +============================================================ +====================== FormatVersion ======================= +============================================================ +*/ +class FormatVersion { + + private: + std::string m_format; /**< The GNDS format version. */ + int m_major; /**< The GNDS format major value as an integer. */ + int m_minor; /**< The GNDS format minor value as an integer. */ + std::string m_patch; /**< The GNDS format patch string. This will be an empty string except for unofficial formats. */ + + public: + FormatVersion( ); + FormatVersion( std::string const &a_formatVersion ); + FormatVersion( FormatVersion const &a_formatVersion ); + FormatVersion &operator=( FormatVersion const &a_rhs ); + + std::string const &format( ) const { return( m_format ); } + int major( ) const { return( m_major ); } + int minor( ) const { return( m_minor ); } + std::string const &patch( ) const { return( m_patch ); } + + bool setFormat( std::string const &a_formatVersion ); + bool supported( ) const ; +}; + +/* +============================================================ +========================= Exception ======================== +============================================================ +*/ +class Exception : public std::runtime_error { + + public : + explicit Exception( std::string const &a_message ); +}; + +/* +============================================================ +================== StatusMessageReporting ================== +============================================================ +*/ + +class StatusMessageReporting { + + public: + enum class Status { ok, info, warning, error }; + + private: + statusMessageReporting m_smr; + + public: + StatusMessageReporting( ); + ~StatusMessageReporting( ); + + statusMessageReporting *smr( ) { return( &m_smr ); } + bool isOk( ) { return( smr_isOk( &m_smr ) ); } + bool isInfo( ) { return( smr_isInfo( &m_smr ) ); } + bool isWarning( ) { return( smr_isWarning( &m_smr ) ); } + bool isError( ) { return( smr_isError( &m_smr ) ); } + void clear( ) { smr_release( &m_smr ); } + std::string constructMessage( std::string a_prefix, int a_reports = 1, bool a_clear = false ); + std::string constructFullMessage( std::string a_prefix, int a_reports = 1, bool a_clear = false ); +}; + +/* +============================================================ +====================== ArgumentParser ====================== +============================================================ +*/ + +enum class ArgumentType { True, False, Count, Store, Append, Positional }; + +class ArgumentBase; + +class ArgumentParser { + + private: + std::string m_codeName; /**< The name of the code that is using **ArgumentParser**. */ + std::string m_descriptor; /**< The descriptor that is printed when help (i.e., '-h') is entered. */ + std::vector m_arguments; /**< The list of arguments (positional and optional) supported. */ + + void add2( ArgumentBase *a_argumentBase ); + + public: + ArgumentParser( std::string const &a_codeName, std::string const &a_descriptor = "" ); + ~ArgumentParser( ); + + std::string const &codeName( ) const { return( m_codeName ); } + std::string const &descriptor( ) const { return( m_descriptor ); } + template T *add( std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded = 1, int a_maximumNeeded = 1 ); + ArgumentBase *add( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, + int a_minimumNeeded = -2, int a_maximumNeeded = -2 ); + void addAlias( std::string const &a_name, std::string const &a_alias ); + void addAlias( ArgumentBase const * const a_argumentBase, std::string const &a_alias ); + bool hasName( std::string const &a_name ) const ; + bool isOptionalArgument( std::string const &a_name ) const ; + void parse( int a_argc, char **a_argv, bool a_printArguments = true ); + template T *get( std::size_t a_name ); + void help( ) const ; + void usage( ) const ; + virtual void printStatus( std::string a_indent ) const ; +}; + +/* *********************************************************************************************************//** + * Creates a new argument, adds the argument to *this* and returns a pointer the the newly created argument. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The argument's description, displayed when the help option is enetered. + * @param a_minimumNeeded [in] The minimum number of required time *this* argument must be entered. + * @param a_maximumNeeded [in] The maximum number of required time *this* argument must be entered. + * + * @return A pointer to the created argument. + ***********************************************************************************************************/ + +template T *ArgumentParser::add( std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded, int a_maximumNeeded ) { + + T *argument = new T( a_name, a_descriptor, a_minimumNeeded, a_maximumNeeded ); + add2( argument ); + + return( argument ); +} + +/* +============================================================ +======================= ArgumentBase ======================= +============================================================ +*/ + +class ArgumentBase { + + private: + ArgumentType m_argumentType; /**< The enum for arguent type of *this*. */ + std::vector m_names; /**< The allowed names for *this*. */ + std::string m_descriptor; /**< The desciption printed help. */ + int m_minimumNeeded; /**< Minimum number of times *this* argument is required on the command line. */ + int m_maximumNeeded; /**< Maximum number of times *this* argument is required on the command line. */ + int m_counts; /**< The number of time this argument was entered on the command line. */ + std::vector m_values; /**< list of values entered for this argument. Only used for types Store, Append and Positional. */ + + void addAlias( std::string const &a_name ); /**< Adds the alias *a_name* to *this*. */ + virtual std::string printStatus2( ) const ; /**< For internal use. Called by method **printStatus**. */ + virtual void printStatus3( std::string const &a_indent ) const ; + + friend void ArgumentParser::addAlias( std::string const &a_name, std::string const &a_alias ); + + public: + ArgumentBase( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded, int a_maximumNeeded ); + virtual ~ArgumentBase( ) = 0 ; + + ArgumentType argumentType( ) const { return( m_argumentType ); } + std::string const &name( ) const { return( m_names[0] ); } + std::vector const &names( ) { return( m_names ); } + bool hasName( std::string const &a_name ) const ; + std::string const &descriptor( ) const { return( m_descriptor ); } + int minimumNeeded( ) const { return( m_minimumNeeded ); } + int maximumNeeded( ) const { return( m_maximumNeeded ); } + int counts( ) const { return( m_counts ); } + + virtual std::string const &value( std::size_t a_index = 0 ) const ; + std::vector const &values( ) const { return( m_values ); } + virtual bool isOptionalArgument( ) const { return( true ); } + virtual bool requiresAValue( ) const { return( false ); } + virtual int parse( ArgumentParser const &a_argumentParser, int a_index, int a_argc, char **a_argv ); + std::string usage( bool a_requiredOption ) const ; + void printStatus( std::string a_indent ) const ; +}; + +/* +============================================================ +======================= OptionBoolean ====================== +============================================================ +*/ + +class OptionBoolean : public ArgumentBase { + + private: + bool m_default; + + public: + OptionBoolean( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, bool a_default ); + virtual ~OptionBoolean( ) = 0 ; + + bool _default( ) const { return( m_default ); } + std::string printStatus2( ) const ; +}; + +/* +============================================================ +======================== OptionTrue ======================== +============================================================ +*/ + +class OptionTrue : public OptionBoolean { + + public: + OptionTrue( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 0, int a_maximumNeeded = -1 ); + ~OptionTrue( ) { } +}; + +/* +============================================================ +======================= OptionFalse ======================== +============================================================ +*/ + +class OptionFalse : public OptionBoolean { + + public: + OptionFalse( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 0, int a_maximumNeeded = -1 ); + ~OptionFalse( ) { } +}; + +/* +============================================================ +====================== OptionCounter ======================= +============================================================ +*/ + +class OptionCounter : public ArgumentBase { + + public: + OptionCounter( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 0, int a_maximumNeeded = -1 ); + ~OptionCounter( ) { } + + std::string printStatus2( ) const ; +}; + +/* +============================================================ +======================= OptionStore ======================== +============================================================ +*/ + +class OptionStore : public ArgumentBase { + + public: + OptionStore( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 0, int a_maximumNeeded = -1 ); + ~OptionStore( ) { } + + std::string const &value( std::size_t a_index = 0 ) const ; + bool requiresAValue( ) const { return( true ); } + void printStatus3( std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================= OptionAppend ======================= +============================================================ +*/ + +class OptionAppend : public ArgumentBase { + + public: + OptionAppend( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 0, int a_maximumNeeded = -1 ); + ~OptionAppend( ) { } + + bool requiresAValue( ) const { return( true ); } + void printStatus3( std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== Positional ======================== +============================================================ +*/ + +class Positional : public ArgumentBase { + + public: + Positional( std::string const &a_name, std::string const &a_descriptor = "", int a_minimumNeeded = 1, int a_maximumNeeded = 1 ); + ~Positional( ) { } + + bool isOptionalArgument( ) const { return( false ); } + bool requiresAValue( ) const { return( true ); } + void printStatus3( std::string const &a_indent ) const ; +}; + +/* +============================================================ +======================== DeltaTime ========================= +============================================================ +*/ + +#ifndef _WIN32 + +#define LUPI_DeltaTime_toStringFormatIncremental "incremental: CPU %8.3fs, wall %8.3fs" +#define LUPI_DeltaTime_toStringFormatTotal "total: CPU %8.3fs, wall %8.3fs" + +class DeltaTime { + + private: + double m_CPU_time; + double m_wallTime; + double m_CPU_timeIncremental; + double m_wallTimeIncremental; + + public: + DeltaTime( ); + DeltaTime( double a_CPU_time, double a_wallTime, double a_CPU_timeIncremental, double a_wallTimeIncremental ); + DeltaTime( DeltaTime const &deltaTime ); + ~DeltaTime( ) { } + + double CPU_time( ) const { return( m_CPU_time ); } + double wallTime( ) const { return( m_wallTime ); } + double CPU_timeIncremental( ) const { return( m_CPU_timeIncremental ); } + double wallTimeIncremental( ) const { return( m_wallTimeIncremental ); } + std::string toString( std::string a_formatIncremental = LUPI_DeltaTime_toStringFormatIncremental, + std::string a_format = LUPI_DeltaTime_toStringFormatTotal, std::string a_sep = "; " ); +}; + +/* +============================================================ +========================== Timer =========================== +============================================================ +*/ + +class Timer { + + private: + clock_t m_CPU_time; + struct timeval m_wallTime; + clock_t m_CPU_timeIncremental; + struct timeval m_wallTimeIncremental; + + public: + Timer( ); + ~Timer( ) { } + + DeltaTime deltaTime( ); + DeltaTime deltaTimeAndReset( ); + void reset( ); +}; + +#endif // End of not _WIN32 defined. + +namespace FileInfo { // Should be using std::filesystem stuff but this requires C++ 17. + +std::string realPath( std::string const &a_path ); +std::string _basename( std::string const &a_path ); +std::string basenameWithoutExtension( std::string const &a_path ); +std::string _dirname( std::string const &a_path ); +bool exists( std::string const &a_path ); +bool isDirectory( std::string const &a_path ); +bool createDirectories( std::string const &a_path ); + +/* +============================================================ +========================= FileStat ========================= +============================================================ +*/ +class FileStat { + + private: + std::string m_path; /**< The path that is stat-ed. */ + struct stat m_stat; /**< The stat for the path. */ + + public: + FileStat( std::string const &a_path ); + + std::string const &path( ) const { return( m_path ); } /**< Returns a reference to the **m_path** member. */ + struct stat const &statRef( ) const { return( m_stat ); } /**< Returns a reference to the **m_stat** member. */ + + bool exists( ); + bool isDirectory( ) const { return( ( m_stat.st_mode & S_IFMT ) == S_IFDIR ); } /**< Returns *true* if the path is a directory and *false* otherwise. */ + bool isRegularFile( ) const { return( ( m_stat.st_mode & S_IFMT ) == S_IFREG ); } /**< Returns *true* if the path is a regular file and *false* otherwise. */ +}; + +} // End of namespace FileInfo. + +// Miscellaneous functions + +namespace Misc { + +std::string stripString( std::string const &a_string, bool a_left = true, bool a_right = true ); +std::vector splitString( std::string const &a_string, char a_delimiter, bool a_strip = false ); +std::vector splitString( std::string const &a_string, std::string const &a_delimiter, bool a_strip = false ); +std::vector splitXLinkString( std::string const &a_string ); +bool stringToInt( std::string const &a_string, int &a_value ); + +std::string argumentsToString( char const *a_format, ... ); +std::string doubleToString3( char const *a_format, double a_value, bool a_reduceBits = false ); +std::string doubleToShortestString( double a_value, int a_significantDigits = 15, int a_favorEFormBy = 0 ); + +void printCommand( std::string const &a_indent, int a_argc, char **a_argv ); + +} // End of namespace Misc. + +} // End of namespace LUPI. + +#endif // LUPI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/LUPI_dataBuffer.hpp b/source/processes/hadronic/models/lend/include/LUPI_dataBuffer.hpp new file mode 100644 index 0000000000..c2332aa636 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/LUPI_dataBuffer.hpp @@ -0,0 +1,462 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef LUPI_data_buffer_hpp_included +#define LUPI_data_buffer_hpp_included 1 + +#include + +#include +#include + +namespace LUPI { + +/* +============================================================ +========================= DataBuffer ======================= +============================================================ +*/ +class DataBuffer { + + public: + std::size_t m_intIndex; + std::size_t m_floatIndex; + std::size_t m_doubleIndex; + std::size_t m_charIndex; + std::size_t m_longIndex; + + int *m_intData; + float *m_floatData; + double *m_doubleData; + char *m_charData; + std::uint64_t *m_longData; + + // For unpacking into pre-allocated memory + char *m_placementStart; + char *m_placement; + std::size_t m_maxPlacementSize; + + // If m_sharedPlacementStart is not a nullPtr, place int and double vector information here + // m_sharedMaxPlacementSize is how much shared memory will be used. + char *m_sharedPlacementStart; + char *m_sharedPlacement; + std::size_t m_sharedMaxPlacementSize; + + enum class Mode { Count, Pack, Unpack, Reset, Memory }; + + LUPI_HOST_DEVICE DataBuffer( void ) : + m_intIndex( 0 ), + m_floatIndex( 0 ), + m_doubleIndex( 0 ), + m_charIndex( 0 ), + m_longIndex( 0 ), + m_intData( nullptr ), + m_floatData( nullptr ), + m_doubleData( nullptr ), + m_charData( nullptr ), + m_longData( nullptr ), + m_placementStart( nullptr ), + m_placement( nullptr ), + m_maxPlacementSize( 0 ), + m_sharedPlacementStart( nullptr ), + m_sharedPlacement( nullptr ), + m_sharedMaxPlacementSize( 0 ) { + } + + LUPI_HOST_DEVICE DataBuffer( DataBuffer const &rhs ) : + m_intIndex( 0 ), + m_floatIndex( 0 ), + m_doubleIndex( 0 ), + m_charIndex( 0 ), + m_longIndex( 0 ), + m_intData( nullptr ), + m_floatData( nullptr ), + m_doubleData( nullptr ), + m_charData( nullptr ), + m_longData( nullptr ), + m_placementStart( nullptr ), + m_placement( nullptr ), + m_maxPlacementSize( 0 ), + m_sharedPlacementStart( nullptr ), + m_sharedPlacement( nullptr ), + m_sharedMaxPlacementSize( 0 ) { + + if( rhs.m_placementStart == nullptr ) m_placementStart = rhs.m_placementStart; // Only to stop compiler warning of unused variable as cannot get [[maybe_unused]] to work. + + } + + LUPI_HOST_DEVICE ~DataBuffer( ) { + + delete [] m_intData; + delete [] m_floatData; + delete [] m_doubleData; + delete [] m_charData; + delete [] m_longData; + } + + LUPI_HOST_DEVICE void zeroIndexes( void ) { + + m_intIndex = m_floatIndex = m_doubleIndex = m_charIndex = m_longIndex = 0; + } + + LUPI_HOST_DEVICE void copyIndexes( DataBuffer const &a_input ) { + + m_intIndex = a_input.m_intIndex; + m_floatIndex = a_input.m_floatIndex; + m_doubleIndex = a_input.m_doubleIndex; + m_charIndex = a_input.m_charIndex; + m_longIndex = a_input.m_longIndex; + } + + LUPI_HOST_DEVICE void simpleCopy( DataBuffer const &a_input ) { + + m_intIndex = a_input.m_intIndex; + m_floatIndex = a_input.m_floatIndex; + m_doubleIndex = a_input.m_doubleIndex; + m_charIndex = a_input.m_charIndex; + m_longIndex = a_input.m_longIndex; + + m_intData = a_input.m_intData; + m_floatData = a_input.m_floatData; + m_doubleData = a_input.m_doubleData; + m_charData = a_input.m_charData; + m_longData = a_input.m_longData; + + m_placementStart = a_input.m_placementStart; + m_placement = a_input.m_placement; + m_maxPlacementSize = a_input.m_maxPlacementSize; + m_sharedPlacementStart = a_input.m_sharedPlacementStart; + m_sharedPlacement = a_input.m_sharedPlacement; + m_sharedMaxPlacementSize = a_input.m_sharedMaxPlacementSize; + } + + // Useful for temporary buffers that we don't want destroying the data in the destructor + LUPI_HOST_DEVICE void nullOutPointers( void ) { + + m_intData = nullptr; + m_floatData = nullptr; + m_doubleData = nullptr; + m_charData = nullptr; + m_longData = nullptr; + } + + LUPI_HOST_DEVICE void allocateBuffers( void ) { + + m_intData = new int[m_intIndex]; + m_floatData = new float[m_floatIndex]; + m_doubleData = new double[m_doubleIndex]; + m_charData = new char[m_charIndex]; + m_longData = new std::uint64_t[m_longIndex]; + } + + LUPI_HOST_DEVICE void freeMemory( void ) { + + delete [] m_intData; + delete [] m_floatData; + delete [] m_doubleData; + delete [] m_charData; + delete [] m_longData; + zeroIndexes( ); + nullOutPointers( ); + } + + LUPI_HOST_DEVICE bool compareIndexes( LUPI_maybeUnused char const *a_file, LUPI_maybeUnused int a_line, DataBuffer const &a_input ) { + + return( ( a_input.m_intIndex == m_intIndex ) && ( a_input.m_floatIndex == m_floatIndex ) && + ( a_input.m_doubleIndex == m_doubleIndex ) && + ( a_input.m_charIndex == m_charIndex ) && ( a_input.m_longIndex == m_longIndex ) ); + } + + LUPI_HOST_DEVICE void incrementPlacement(std::size_t a_delta) { + + std::size_t sub = a_delta % 8; + if (sub != 0) a_delta += (8-sub); + m_placement += a_delta; + } + + LUPI_HOST_DEVICE void incrementSharedPlacement(std::size_t a_delta) { + + std::size_t sub = a_delta % 8; + if (sub != 0) a_delta += (8-sub); + m_sharedPlacement += a_delta; + } + + // Returns true if data buffer has not gone over any memory limits + LUPI_HOST_DEVICE bool validate() { + + if (m_placementStart == 0 && m_sharedPlacementStart == 0) return true; + if (m_placement > m_maxPlacementSize + m_placementStart) return false; + if (m_sharedPlacement > m_sharedMaxPlacementSize + m_sharedPlacementStart) return false; + return true; + } + +#if defined(__CUDACC__) || defined (__HIP__) + #ifdef __CUDACC__ + #define LUPI_GPU_MALLOC cudaMalloc + #define LUPI_GPU_MEMCPY cudaMemcpy + #define LUPI_GPU_HTOD cudaMemcpyHostToDevice + #else + #define LUPI_GPU_MALLOC hipMalloc + #define LUPI_GPU_MEMCPY hipMemcpy + #define LUPI_GPU_HTOD hipMemcpyHostToDevice + #endif + // Copy this host object to the device and return its pointer + LUPI_HOST DataBuffer *copyToDevice(std::size_t a_cpuSize, char *&a_protarePtr) { + + DataBuffer *devicePtr = nullptr; + DataBuffer buf_tmp; + + buf_tmp.copyIndexes(*this); + buf_tmp.m_maxPlacementSize = a_cpuSize; + + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_intData, sizeof(int) * m_intIndex) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_intData, m_intData, sizeof(int) * m_intIndex, LUPI_GPU_HTOD ) ); + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_floatData, sizeof(float) * m_floatIndex ) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_floatData, m_floatData, sizeof(float) * m_floatIndex, LUPI_GPU_HTOD ) ); + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_doubleData, sizeof(double) * m_doubleIndex ) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_doubleData, m_doubleData, sizeof(double) * m_doubleIndex, LUPI_GPU_HTOD ) ); + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_charData, sizeof(char) * m_charIndex ) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_charData, m_charData, sizeof(char) * m_charIndex, LUPI_GPU_HTOD ) ); + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_longData, sizeof(std::uint64_t) * m_longIndex ) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( buf_tmp.m_longData, m_longData, sizeof(std::uint64_t) * m_longIndex, LUPI_GPU_HTOD ) ); + + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &buf_tmp.m_placementStart, buf_tmp.m_maxPlacementSize ) ); + // Set to 0 for easier byte comparisons. This may be removed after testing is done + //gpuErrorCheck( cudaMemset( (void *) buf_tmp.m_placementStart, 0, buf_tmp.m_maxPlacementSize ) ); + buf_tmp.m_placement = buf_tmp.m_placementStart; + + a_protarePtr = buf_tmp.m_placementStart; + + gpuErrorCheck( LUPI_GPU_MALLOC( (void **) &devicePtr, sizeof(DataBuffer) ) ); + gpuErrorCheck( LUPI_GPU_MEMCPY( devicePtr, &buf_tmp, sizeof(DataBuffer), LUPI_GPU_HTOD ) ); + + // Don't need destructor trying to free the device memory. + buf_tmp.nullOutPointers( ); + + return devicePtr; + } + #undef LUPI_GPU_MALLOC + #undef LUPI_GPU_MEMCPY + #undef LUPI_GPU_HTOD +#endif + + private: + DataBuffer &operator=( DataBuffer const &tmp ); // disable assignment operator + +}; + +} // End of namespace LUPI. + +#define DATA_MEMBER_SIMPLE(member, buffer, index, mode) \ + {if ( mode == LUPI::DataBuffer::Mode::Count ) {(index)++; } \ + else if ( mode == LUPI::DataBuffer::Mode::Pack ) {(buffer)[ (index)++ ] = (member); } \ + else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {member = (buffer)[ (index)++ ]; } \ + else if ( mode == LUPI::DataBuffer::Mode::Reset ) {(index)++; member = 0; }} + +#define DATA_MEMBER_CAST(member, buf, mode, someType) \ + {if ( mode == LUPI::DataBuffer::Mode::Count ) {((buf).m_intIndex)++; } \ + else if ( mode == LUPI::DataBuffer::Mode::Pack ) {(buf).m_intData[ ((buf).m_intIndex)++ ] = (int)(member); } \ + else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {member = (someType) (buf).m_intData[ ((buf).m_intIndex)++ ]; } \ + else if ( mode == LUPI::DataBuffer::Mode::Reset ) {((buf).m_intIndex)++; member = (someType) 0; }} + +#define DATA_MEMBER_CHAR( member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_charData, (buf).m_charIndex, mode) +#define DATA_MEMBER_INT( member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_intData, (buf).m_intIndex, mode) +#define DATA_MEMBER_FLOAT(member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_floatData, (buf).m_floatIndex, mode) +#define DATA_MEMBER_DOUBLE(member, buf, mode) DATA_MEMBER_SIMPLE(member, (buf).m_doubleData, (buf).m_doubleIndex, mode) + +#define DATA_MEMBER_STRING(member, buf, mode) \ + {if ( mode == LUPI::DataBuffer::Mode::Count ) {((buf).m_charIndex) += member.size(); ((buf).m_intIndex)++; } \ + else if ( mode == LUPI::DataBuffer::Mode::Pack ) {std::size_t array_size = member.size(); \ + (buf).m_intData[((buf).m_intIndex)++] = array_size; \ + for (std::size_t size_index = 0; size_index < array_size; size_index++)\ + {(buf).m_charData[ ((buf).m_charIndex)++ ] = (member[size_index]); }} \ + else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (buf).m_intData[((buf).m_intIndex)++]; \ + member.resize(array_size, &(buf).m_placement); \ + for (std::size_t size_index = 0; size_index < array_size; size_index++) \ + {member[size_index] = (buf).m_charData[ ((buf).m_charIndex)++ ]; }} \ + else if ( mode == LUPI::DataBuffer::Mode::Reset ) {std::size_t array_size = member.size(); \ + for (std::size_t size_index = 0; size_index < array_size; size_index++) \ + {((buf).m_charIndex)++; member[size_index] = '\0'; }} \ + else if ( mode == LUPI::DataBuffer::Mode::Memory ) { (buf).incrementPlacement(sizeof(char) * (member.size()+1)); } } + +#define DATA_MEMBER_STD_STRING(member, buf, mode) { \ + if ( mode == LUPI::DataBuffer::Mode::Count ) \ + {((buf).m_charIndex) += member.size(); ((buf).m_intIndex)++; } \ + else if ( mode == LUPI::DataBuffer::Mode::Pack ) {std::size_t array_size = member.size(); \ + (buf).m_intData[((buf).m_intIndex)++] = array_size; \ + for (std::size_t size_index = 0; size_index < array_size; size_index++)\ + {(buf).m_charData[((buf).m_charIndex)++] = (member[size_index]); }} \ + else if ( mode == LUPI::DataBuffer::Mode::Unpack ) {std::size_t array_size = (buf).m_intData[((buf).m_intIndex)++]; \ + member.resize(array_size); \ + for (std::size_t size_index = 0; size_index < array_size; size_index++) \ + {member[size_index] = (buf).m_charData[ ((buf).m_charIndex)++ ]; }} } + +#if LUPI_WARP_SIZE > 1 && defined(LUPI_ON_GPU) +#define DATA_MEMBER_VECTOR_FLOAT(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \ + std::size_t bufferIndex = (buf).m_floatIndex; \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \ + { \ + std::size_t thrMemberId = member_index + LUPI_THREADID; \ + if (thrMemberId >= vector_size) continue; \ + member[thrMemberId] = (buf).m_floatData[bufferIndex + LUPI_THREADID]; \ + } \ + (buf).m_floatIndex += vector_size; \ + } +#define DATA_MEMBER_VECTOR_DOUBLE(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \ + std::size_t bufferIndex = (buf).m_doubleIndex; \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \ + { \ + std::size_t thrMemberId = member_index + LUPI_THREADID; \ + if (thrMemberId >= vector_size) continue; \ + member[thrMemberId] = (buf).m_doubleData[bufferIndex + LUPI_THREADID]; \ + } \ + (buf).m_doubleIndex += vector_size; \ + } +#else +#define DATA_MEMBER_VECTOR_FLOAT(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \ + if ((buf).m_sharedPlacement == nullptr) { \ + member.resize(vector_size, &(buf).m_placement); \ + } else { \ + member.resize(vector_size, &(buf).m_sharedPlacement); \ + } \ + }\ + if ( mode == LUPI::DataBuffer::Mode::Memory ) { \ + (buf).incrementSharedPlacement(sizeof(float) * member.capacity()); \ + } \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index++ ) \ + { \ + DATA_MEMBER_FLOAT(member[member_index], (buf), mode); \ + } \ + } +#define DATA_MEMBER_VECTOR_DOUBLE(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \ + if ((buf).m_sharedPlacement == nullptr) { \ + member.resize(vector_size, &(buf).m_placement); \ + } else { \ + member.resize(vector_size, &(buf).m_sharedPlacement); \ + } \ + }\ + if ( mode == LUPI::DataBuffer::Mode::Memory ) { \ + (buf).incrementSharedPlacement(sizeof(double) * member.capacity()); \ + } \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index++ ) \ + { \ + DATA_MEMBER_DOUBLE(member[member_index], (buf), mode); \ + } \ + } +#endif + +#if LUPI_WARP_SIZE > 1 && defined(LUPI_ON_GPU) +#define DATA_MEMBER_VECTOR_INT(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \ + std::size_t bufferIndex = (buf).m_intIndex; \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \ + { \ + std::size_t thrMemberId = member_index + LUPI_THREADID; \ + if (thrMemberId >= vector_size) continue; \ + member[thrMemberId] = (buf).m_intData[bufferIndex + LUPI_THREADID]; \ + } \ + (buf).m_intIndex += vector_size; \ + } +#else +#define DATA_MEMBER_VECTOR_INT(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \ + if ((buf).m_sharedPlacement == nullptr) { \ + member.resize(vector_size, &(buf).m_placement); \ + } else { \ + member.resize(vector_size, &(buf).m_sharedPlacement); \ + } \ + }\ + if ( mode == LUPI::DataBuffer::Mode::Memory ) { \ + (buf).incrementSharedPlacement(sizeof(int) * member.capacity()); \ + } \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index++ ) \ + { \ + DATA_MEMBER_INT(member[member_index], (buf), mode); \ + } \ + } +#endif + +#if LUPI_WARP_SIZE > 1 && defined(LUPI_ON_GPU) +#define DATA_MEMBER_VECTOR_BOOL(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) member.resize(vector_size, &(buf).m_placement); \ + std::size_t bufferIndex = (buf).m_intIndex; \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) \ + { \ + std::size_t thrMemberId = member_index + LUPI_THREADID; \ + if (thrMemberId >= vector_size) continue; \ + member[thrMemberId] = (buf).m_intData[bufferIndex + LUPI_THREADID]; \ + } \ + (buf).m_intIndex += vector_size; \ + } +#else +#define DATA_MEMBER_VECTOR_BOOL(member, buf, mode) \ + { \ + std::size_t vector_size = member.size(); \ + DATA_MEMBER_INT(vector_size, (buf), mode); \ + if ( mode == LUPI::DataBuffer::Mode::Unpack ) { \ + if ((buf).m_sharedPlacement == nullptr) { \ + member.resize(vector_size, &(buf).m_placement); \ + } else { \ + member.resize(vector_size, &(buf).m_sharedPlacement); \ + } \ + }\ + if ( mode == LUPI::DataBuffer::Mode::Memory ) { \ + (buf).incrementSharedPlacement(sizeof(int) * member.capacity()); \ + } \ + for ( std::size_t member_index = 0; member_index < vector_size; member_index++ ) \ + { \ + DATA_MEMBER_CAST(member[member_index], (buf), mode, bool); \ + } \ + } +#endif + +#if LUPI_WARP_SIZE > 1 && defined(LUPI_ON_GPU) +#define DATA_MEMBER_CHAR_ARRAY( member, buf, mode ) { \ + std::size_t array_size = sizeof( member ); \ + std::size_t bufferIndex = (buf).m_charIndex; \ + for ( std::size_t member_index = 0; member_index < array_size; member_index += LUPI_WARP_SIZE, bufferIndex += LUPI_WARP_SIZE ) { \ + std::size_t thrMemberId = member_index + LUPI_THREADID; \ + if( thrMemberId >= array_size ) continue; \ + member[thrMemberId] = (buf).m_charData[bufferIndex + LUPI_THREADID]; \ + } \ + (buf).m_charIndex += array_size; \ + } +#else +#define DATA_MEMBER_CHAR_ARRAY( member, buf, mode ) { \ + std::size_t array_size = sizeof( member ); \ + for ( std::size_t member_index = 0; member_index < array_size; member_index++ ) DATA_MEMBER_CHAR( member[member_index], (buf), mode ); \ + } +#endif + +#endif // End of LUPI_data_buffer_hpp_included diff --git a/source/processes/hadronic/models/lend/include/LUPI_declareMacro.hpp b/source/processes/hadronic/models/lend/include/LUPI_declareMacro.hpp new file mode 100644 index 0000000000..9617db4417 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/LUPI_declareMacro.hpp @@ -0,0 +1,90 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef LUPI_declare_macro_hpp_included +#define LUPI_declare_macro_hpp_included + +#include + +// Default, if LUPI_HIP_INLINE is not defined, is to use an attribute function +// to inform HIP not to inline the function. +// This is quite useful for the publicly installed header files for code robustness +// However, when compiling the source, one should be able to disable +// this within the library itself for faster code. To do so +// the define -DLUPI_HIP_INLINE can be added to the compiler flags, and +// the define will evaluate to nothing, so the compiler is welcome to do +// its optimizations. + +#ifdef LUPI_HIP_INLINE + #define LUPI_HIP_INLINE_ATTRIBUTE +#else + #define LUPI_HIP_INLINE_ATTRIBUTE __attribute__ ((noinline)) +#endif + +#define gpuErrorCheck(ans) { gpuAssert((ans), __FILE__, __LINE__); } + +#if defined(__HIP_DEVICE_COMPILE__) || defined(__CUDA_ARCH__) + #define LUPI_ON_GPU 1 +#endif + +#ifdef __CUDACC__ + #include + #define LUPI_HOST __host__ + #define LUPI_DEVICE __device__ + #define LUPI_HOST_DEVICE __host__ __device__ + #define LUPI_THROW(arg) printf("%s", arg) + #define LUPI_WARP_SIZE 32 + #define LUPI_THREADID threadIdx.x +inline void gpuAssert(cudaError_t code, const char *file, int line, bool abort=true) +{ + if (code != cudaSuccess) + { + fprintf(stderr,"GPUASSERT: %s File: %s line: %d\n", cudaGetErrorString(code), file, line); + if (abort) exit(code); + } +} + +#elif HAVE_OPENMP_TARGET + #define LUPI_HOST + #define LUPI_DEVICE + #define LUPI_HOST_DEVICE + #define LUPI_THROW(arg) printf("%s", arg) + #define LUPI_WARP_SIZE 1 + #define LUPI_THREADID +inline void gpuAssert(int code, const char *file, int line, bool abort=true) {} +#elif defined(__HIP__) + #include + #include + #include + #include + + #define LUPI_HOST __host__ + #define LUPI_DEVICE __device__ + #define LUPI_HOST_DEVICE LUPI_HIP_INLINE_ATTRIBUTE __host__ __device__ + #define LUPI_THROW(arg) + #define LUPI_WARP_SIZE 1 + #define LUPI_THREADID hipThreadIdx_x +inline void gpuAssert(hipError_t code, const char *file, int line, bool do_abort=true) +{ + if (code == hipSuccess) { return; } + printf("GPUassert code %d: %s %s %d\n", code, hipGetErrorString(code), file, line); + if (do_abort) { abort(); } +} + +#else + #define LUPI_HOST + #define LUPI_DEVICE + #define LUPI_HOST_DEVICE + #define LUPI_THROW(arg) throw arg + #define LUPI_WARP_SIZE 1 + #define LUPI_THREADID +inline void gpuAssert(LUPI_maybeUnused int code, LUPI_maybeUnused const char *file, LUPI_maybeUnused int line, LUPI_maybeUnused bool abort=true) {} +#endif + +#endif // End of LUPI_declare_macro_hpp_included diff --git a/source/processes/hadronic/models/lend/include/LUPI_defines.hpp b/source/processes/hadronic/models/lend/include/LUPI_defines.hpp new file mode 100644 index 0000000000..d4088b4ecc --- /dev/null +++ b/source/processes/hadronic/models/lend/include/LUPI_defines.hpp @@ -0,0 +1,19 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef LUPI_defines_hpp_included +#define LUPI_defines_hpp_included 1 + +#if __cplusplus > 201402L + #define LUPI_maybeUnused [[maybe_unused]] +#else + #define LUPI_maybeUnused +#endif + +#endif // LUPI_defines_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI.h b/source/processes/hadronic/models/lend/include/MCGIDI.h deleted file mode 100644 index cba1ed629d..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI.h +++ /dev/null @@ -1,780 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_h_included -#define MCGIDI_h_included - -#define MCGIDI_VERSION_MAJOR 1 -#define MCGIDI_VERSION_MINOR 0 -#define MCGIDI_VERSION_PATCHLEVEL 0 - -#include -#include -#include - -#include -#include -#include - -#include "MCGIDI_mass.h" -#include "MCGIDI_map.h" - -/* Disable Effective C++ warnings in GIDI code. */ -#if __INTEL_COMPILER > 1399 -#pragma warning( disable:2021 ) -#pragma warning( disable:593 ) -#pragma warning( disable:111 ) -#elif __INTEL_COMPILER > 1199 -#pragma warning( disable:2304 ) -#endif - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -typedef struct MCGIDI_GammaBranching_s MCGIDI_GammaBranching; -typedef struct MCGIDI_POP_s MCGIDI_POP; -typedef struct MCGIDI_POPs_s MCGIDI_POPs; -typedef struct MCGIDI_particle_s MCGIDI_particle; -typedef struct MCGIDI_target_s MCGIDI_target; -typedef struct MCGIDI_target_heated_info_s MCGIDI_target_heated_info; -typedef struct MCGIDI_target_heated_sorted_s MCGIDI_target_heated_sorted; -typedef struct MCGIDI_target_heated_s MCGIDI_target_heated; -typedef struct MCGIDI_reaction_s MCGIDI_reaction; -typedef struct MCGIDI_outputChannel_s MCGIDI_outputChannel; -typedef struct MCGIDI_product_s MCGIDI_product; -typedef struct MCGIDI_distribution_s MCGIDI_distribution; -typedef struct MCGIDI_KalbachMann_s MCGIDI_KalbachMann; -typedef struct MCGIDI_KalbachMann_ras_s MCGIDI_KalbachMann_ras; -typedef struct MCGIDI_pdfOfX_s MCGIDI_pdfOfX; -typedef struct MCGIDI_pdfsOfXGivenW_s MCGIDI_pdfsOfXGivenW; -typedef struct MCGIDI_pdfsOfXGivenW_sampled_s MCGIDI_pdfsOfXGivenW_sampled; -typedef struct MCGIDI_angular_s MCGIDI_angular; -typedef struct MCGIDI_energyWeightedFunctional_s MCGIDI_energyWeightedFunctional; -typedef struct MCGIDI_energyWeightedFunctionals_s MCGIDI_energyWeightedFunctionals; -typedef struct MCGIDI_energyNBodyPhaseSpace_s MCGIDI_energyNBodyPhaseSpace; -typedef struct MCGIDI_energy_s MCGIDI_energy; -typedef struct MCGIDI_energyAngular_s MCGIDI_energyAngular; -typedef struct MCGIDI_angularEnergy_s MCGIDI_angularEnergy; - -typedef struct MCGIDI_decaySamplingInfo_s MCGIDI_decaySamplingInfo; -typedef struct MCGIDI_productsInfo_s MCGIDI_productsInfo; -typedef struct MCGIDI_productInfo_s MCGIDI_productInfo; -typedef struct MCGIDI_sampledProductsData_s MCGIDI_sampledProductsData; -typedef struct MCGIDI_sampledProductsDatas_s MCGIDI_sampledProductsDatas; - -#if defined __cplusplus - } - } -#endif - -enum MCGIDI_quantityLookupMode { - MCGIDI_quantityLookupMode_pointwise /**< Pointwise data are used to determine a quantity's value an energy E. */, - MCGIDI_quantityLookupMode_grouped /**< Grouped data are used to determine a quantity's value an energy E. */ -}; - -class MCGIDI_quantitiesLookupModes { - - private: - int mProjectilesPOPID; - double mProjectileEnergy; - int mGroupIndex; - double mProjectileEnergyForGroupIndex; - double mTemperature; - enum MCGIDI_quantityLookupMode mCrossSectionMode; - enum MCGIDI_quantityLookupMode mMultiplicityMode; - - public: - MCGIDI_quantitiesLookupModes( int projectilesPOPID ); - ~MCGIDI_quantitiesLookupModes( ); - - inline double getProjectileEnergy( void ) const { return( mProjectileEnergy ); } - void setProjectileEnergy( double e_in ) { mProjectileEnergy = e_in; } - - inline int getGroupIndex( void ) const { return( mGroupIndex ); } - int setGroupIndex( GIDI_settings const &settings, bool encloseOutOfRange ); - - inline double getTemperature( void ) const { return( mTemperature ); } - void setTemperature( double temperature ) { mTemperature = temperature; } - - enum MCGIDI_quantityLookupMode getMode( std::string const &quantity ) const; - enum MCGIDI_quantityLookupMode getCrossSectionMode( void ) const { return( mCrossSectionMode ); }; - std::vector getListOfLookupQuanities( ) const; - void setMode( std::string const &quantity, enum MCGIDI_quantityLookupMode mode ); - void setCrossSectionMode( enum MCGIDI_quantityLookupMode mode ) { mCrossSectionMode = mode; }; - void setModeAll( enum MCGIDI_quantityLookupMode mode ); -}; - -typedef struct MCGIDI_samplingMultiplicityBias_s MCGIDI_samplingMultiplicityBias; - -struct MCGIDI_samplingMultiplicityBias_s { - int PoPID; - double multiplicityFactor; -}; - -class MCGIDI_samplingMethods { - - public: - MCGIDI_samplingMethods( ); - ~MCGIDI_samplingMethods( ); -}; - -class MCGIDI_samplingSettings { - - private: // This is user input. - enum GIDI::xDataTOM_frame mWantFrame; - bool mWantVelocities; - double (*mRng)( void * ); - void *mRngState; - std::vector mSamplingMultiplicityBiases; - - public: // Temporary variables used in MCGIDI sampling routines. - enum GIDI::xDataTOM_frame mGotFrame; - GIDI::MCGIDI_POP *mPoP; - double mMu; - double mEp; - - public: - MCGIDI_samplingSettings( enum GIDI::xDataTOM_frame frame, bool wantVelocities, double (*rng)( void * ), void *rngState ); - ~MCGIDI_samplingSettings( ); - - inline double getProductMultiplicityBias( int PoPID ) const { - for( int i1 = 0; i1 < (int) mSamplingMultiplicityBiases.size( ); ++i1 ) { - if( PoPID == mSamplingMultiplicityBiases[i1].PoPID ) return( mSamplingMultiplicityBiases[i1].multiplicityFactor ); - } - return( 1. ); } - int setProductMultiplicityBias( GIDI::statusMessageReporting *smr, int PoPID, double fractor ); -}; - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -enum MCGIDI_transportability { /**< This enum is used to give the transportability status for a particle in a reaction or target. */ - MCGIDI_transportability_unknown, /**< Particle is not a product of this reaction or target. */ - MCGIDI_transportability_none, /**< Particle is a product but has not distribution data. */ - MCGIDI_transportability_partial, /**< Particle is a product and has some distribution data. */ - MCGIDI_transportability_full }; /**< Particle is a product and all needed distribution data. */ - -#if defined __cplusplus - } - } -#endif - -typedef std::map transportabilitiesMap; - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -#define MCGIDI_crossSectionType_grouped 1 -#define MCGIDI_crossSectionType_pointwise 2 - -#define MCGIDI_nullReaction -10001 - -#define MCGIDI_speedOfLight_cm_sec 2.99792458e10 -#define MCGIDI_AMU2MeV 931.494028 - -enum MCGIDI_reactionType { - MCGIDI_reactionType_unknown_e, /* This should never happen. */ - MCGIDI_reactionType_null_e, /* Only occurs when sampling with from grouped cross sections and the projectile is below threshold. */ - MCGIDI_reactionType_elastic_e, /* A nuclear elastic reaction. */ - MCGIDI_reactionType_scattering_e, /* A nuclear reaction where the projectile and target are products as well as gammas, - excluding reactions that are MCGIDI_reactionType_elastic_e and - MCGIDI_reactionType_nuclearLevelTransition_e. */ - MCGIDI_reactionType_nuclearIsomerTransmutation_e, /* A nuclear that changes N or Z and is not one of the others.*/ - MCGIDI_reactionType_nuclearLevelTransition_e, /* Reaction in which the residual is the same isotope as the target but in a - different nuclear level. Mainly for meta-stables. */ - MCGIDI_reactionType_capture_e, /* A nuclear capture reaction. */ - MCGIDI_reactionType_fission_e, /* A nuclear fission reaction. */ - MCGIDI_reactionType_sumOfRemainingOutputChannels_e, /* ENDF MT 5 reactions. */ - MCGIDI_reactionType_atomic_e -}; - -enum MCGIDI_channelGenre { MCGIDI_channelGenre_undefined_e, MCGIDI_channelGenre_twoBody_e, MCGIDI_channelGenre_uncorrelated_e, - MCGIDI_channelGenre_sumOfRemaining_e, MCGIDI_channelGenre_twoBodyDecay_e, MCGIDI_channelGenre_uncorrelatedDecay_e }; - -enum MCGIDI_productMultiplicityType { MCGIDI_productMultiplicityType_invalid_e, MCGIDI_productMultiplicityType_unknown_e, MCGIDI_productMultiplicityType_integer_e, - MCGIDI_productMultiplicityType_energyDependent_e, MCGIDI_productMultiplicityType_gammaBranching_e, MCGIDI_productMultiplicityType_mixed_e }; - -enum MCGIDI_distributionType { MCGIDI_distributionType_none_e, MCGIDI_distributionType_unknown_e, MCGIDI_distributionType_angular_e, - MCGIDI_distributionType_KalbachMann_e, MCGIDI_distributionType_uncorrelated_e, MCGIDI_distributionType_energyAngular_e, - MCGIDI_distributionType_angularEnergy_e }; - -enum MCGIDI_angularType { MCGIDI_angularType_isotropic, MCGIDI_angularType_recoil, MCGIDI_angularType_linear }; - -enum MCGIDI_energyType { MCGIDI_energyType_unknown, MCGIDI_energyType_primaryGamma, MCGIDI_energyType_discreteGamma, - MCGIDI_energyType_linear, MCGIDI_energyType_generalEvaporation, MCGIDI_energyType_simpleMaxwellianFission, MCGIDI_energyType_evaporation, - MCGIDI_energyType_Watt, MCGIDI_energyType_MadlandNix, MCGIDI_energyType_NBodyPhaseSpace, MCGIDI_energyType_weightedFunctional }; - -extern const char *MCGIDI_productGenre_unknown, *MCGIDI_productGenre_twoBody_angular, *MCGIDI_productGenre_twoBody_formFactor, - *MCGIDI_productGenre_NBody_angular_energy, *MCGIDI_productGenre_NBody_pairProduction; - -#define MCGIDI_particleLevel_continuum -1 -#define MCGIDI_particleLevel_sum -2 - -struct MCGIDI_GammaBranching_s { - MCGIDI_POP *finalLevel; - double probability; -}; - -struct MCGIDI_POP_s { - MCGIDI_POP *next; - MCGIDI_POP *parent; - char *name; - int globalPoPsIndex; /* Index of particle in the PoPs library if particle can be return to packages using */ - int Z, A, level, m; /* this library. Otherwise, -1. */ - double mass_MeV; - double level_MeV; - int numberOfGammaBranchs; - MCGIDI_GammaBranching *gammas; -}; - -struct MCGIDI_POPs_s { - int numberOfPOPs, size, increment; - MCGIDI_POP *first, *last, **sorted; -}; - -struct MCGIDI_particle_s { - MCGIDI_particle *prior; - MCGIDI_particle *next; - int ordinal; - int Z, A, m; - double mass_MeV; - char *name; -}; - -struct MCGIDI_decaySamplingInfo_s { - enum xDataTOM_frame frame; /* The frame the product data are in. */ - int isVelocity; /* See struct MCGIDI_sampledProductsData_s for meaning. This is user input. */ - double (*rng)( void * ); /* User supplied rng. */ - void *rngState; /* User supplied rng state. */ - MCGIDI_POP *pop; /* pop for the sampled product. */ - double mu; /* mu = cos( theta ) for the sampled product. Frame is given by frame member. */ - double Ep; /* Energy of the product. Frame is given by frame member. */ -}; - -struct MCGIDI_productInfo_s { - int globalPoPsIndex; - enum MCGIDI_productMultiplicityType productMultiplicityType; - int multiplicity; - int transportable; -}; - -struct MCGIDI_productsInfo_s { - int numberOfProducts; - int numberOfAllocatedProducts; - MCGIDI_productInfo *productInfo; -}; - -struct MCGIDI_sampledProductsData_s { - int isVelocity; /* If true, px_vx, py_vy and pz_vz are velocities otherwise momenta. */ - MCGIDI_POP *pop; - double kineticEnergy; - double px_vx; - double py_vy; - double pz_vz; - int delayedNeutronIndex; - double delayedNeutronRate; - double birthTimeSec; /* Some products, like delayed fission neutrons, are to appear (be born) later. */ -}; - -struct MCGIDI_sampledProductsDatas_s { - int numberOfProducts; - int numberAllocated; - int incrementSize; - MCGIDI_sampledProductsData *products; -}; - -struct MCGIDI_pdfOfX_s { - int numberOfXs; - double *Xs; - double *pdf; - double *cdf; -}; - -struct MCGIDI_pdfsOfXGivenW_s { - int numberOfWs; - ptwXY_interpolation interpolationWY, interpolationXY; - double *Ws; - MCGIDI_pdfOfX *dist; -}; - -struct MCGIDI_pdfsOfXGivenW_sampled_s { - statusMessageReporting *smr; - ptwXY_interpolation interpolationWY, interpolationXY; - int iW, iX1, iX2; - double x, w, frac; -}; - -struct MCGIDI_angular_s { - enum xDataTOM_frame frame; - enum MCGIDI_angularType type; - MCGIDI_angular *recoilProduct; - MCGIDI_pdfsOfXGivenW dists; - double projectileMass_MeV, targetMass_MeV, productMass_MeV, residualMass_MeV; -}; - -struct MCGIDI_energyWeightedFunctional_s { - ptwXYPoints *weight; - MCGIDI_energy *energy; -}; - -struct MCGIDI_energyWeightedFunctionals_s { - int numberOfWeights; - MCGIDI_energyWeightedFunctional weightedFunctional[4]; /* ??????????? Hardwired for no good reason. Will handle up to a (z,4n) reaction. */ -}; - -struct MCGIDI_energyNBodyPhaseSpace_s { - int numberOfProducts; - double mass, massFactor, e_inCOMFactor, Q_MeV; -}; - -struct MCGIDI_energy_s { - enum xDataTOM_frame frame; - enum MCGIDI_energyType type; - double gammaEnergy_MeV; - double primaryGammaMassFactor; - double e_inCOMFactor; - MCGIDI_pdfsOfXGivenW dists; - double U; - ptwXYPoints *theta, *Watt_a, *Watt_b; - ptwXY_interpolation gInterpolation; - MCGIDI_pdfOfX g; - MCGIDI_energyWeightedFunctionals weightedFunctionals; - MCGIDI_energyNBodyPhaseSpace NBodyPhaseSpace; -}; - -struct MCGIDI_energyAngular_s { - enum xDataTOM_frame frame; - MCGIDI_pdfsOfXGivenW pdfOfEpGivenE; - MCGIDI_pdfsOfXGivenW *pdfOfMuGivenEAndEp; /* The number of MCGIDI_pdfsOfXGivenW allocated is given by pdfOfEpGivenE.numberOfWs. */ -}; - -struct MCGIDI_angularEnergy_s { - enum xDataTOM_frame frame; - MCGIDI_pdfsOfXGivenW pdfOfMuGivenE; - MCGIDI_pdfsOfXGivenW *pdfOfEpGivenEAndMu; /* The number of MCGIDI_pdfsOfXGivenW allocated is given by pdfOfMuGivenE.numberOfWs. */ -}; - -struct MCGIDI_KalbachMann_ras_s { - double *rs; - double *as; -}; - -struct MCGIDI_KalbachMann_s { - enum xDataTOM_frame frame; - double energyToMeVFactor, massFactor, Sa, Sb, Ma, mb; /* Needed if a(E,E') is caluclated from the formula. */ - MCGIDI_pdfsOfXGivenW dists; /* Sa currently not used. */ - MCGIDI_KalbachMann_ras *ras; -}; - -struct MCGIDI_distribution_s { - MCGIDI_product *product; - enum MCGIDI_distributionType type; - MCGIDI_angular *angular; /* All distribution forms must have a frame member. */ - MCGIDI_energy *energy; - MCGIDI_energyAngular *energyAngular; - MCGIDI_angularEnergy *angularEnergy; - MCGIDI_KalbachMann *KalbachMann; -}; - -struct MCGIDI_outputChannel_s { - enum MCGIDI_channelGenre genre; - MCGIDI_reaction *reaction; /* This is only used for output channels. */ - MCGIDI_product *parent; /* This is only used for decay channels. */ - int QIsFloat; - double Q; - int numberOfProducts; - MCGIDI_product *products; -}; - -struct MCGIDI_product_s { - MCGIDI_POP *pop; - char *label; - MCGIDI_outputChannel *outputChannel; - int multiplicity; /* If 0, the multiplicity is either 'energyDependent' or 'partialProduction'. */ - int delayedNeutronIndex; - double delayedNeutronRate; - ptwXYPoints *multiplicityVsEnergy; - ptwXYPoints *norms; - int numberOfPiecewiseMultiplicities; - ptwXYPoints **piecewiseMultiplicities; - MCGIDI_distribution distribution; - MCGIDI_outputChannel decayChannel; -}; - -struct MCGIDI_reaction_s { - MCGIDI_target_heated *target; - int ENDF_MT, ENDL_C, ENDL_S; - enum MCGIDI_reactionType reactionType; - char const *outputChannelStr; - xDataTOM_attributionList attributes; /* Do not free, owned by attributes. */ - int domainValuesPresent; /* True if cross section data defined so EMin and EMax are value. */ - int thresholdGroupIndex; /* For grouped data, the group index where threshold starts. */ - double thresholdGroupDomain; /* This is groupEnergy[thresholdGroupIndex+1] - EMin. */ - double thresholdGroupedDeltaCrossSection; /* The adjusted group cross section in group thresholdGroupIndex. */ - double EMin, EMax, finalQ; /* BRB, EMin is used as threshold. However, some reactions, especially charged particle */ - ptwXYPoints *crossSection; /* have effective thresholds much higher than EMin, may need to handle these differently??????? */ - ptwXPoints *crossSectionGrouped; - MCGIDI_outputChannel outputChannel; - MCGIDI_productsInfo productsInfo; /* See MCGIDI_reaction_ParseDetermineReactionProducts for description. */ - transportabilitiesMap *transportabilities; -}; - -struct MCGIDI_target_heated_s { - int ordinal; - char *path; /* Partial path of input file. */ - char *absPath; /* Full absolute path of input file. */ - MCGIDI_POPs pops; - MCGIDI_POP *projectilePOP; - MCGIDI_POP *targetPOP; - xDataTOM_attributionList attributes; - char *contents; - double temperature_MeV; - double EMin, EMax; - ptwXYPoints *crossSection; - ptwXPoints *crossSectionGrouped; - ptwXPoints *crossSectionGroupedForSampling; - int numberOfReactions; - MCGIDI_reaction *reactions; - transportabilitiesMap *transportabilities; -}; - -struct MCGIDI_target_heated_info_s { - int ordinal; - double temperature; - char *path; /* Full path of input file. */ - char *contents; - MCGIDI_target_heated *heatedTarget; -}; - -struct MCGIDI_target_s { - char *path; /* Full path of input file. */ - char *absPath; /* Full absolute path of input file. */ - MCGIDI_POP *projectilePOP; - MCGIDI_POP *targetPOP; - xDataTOM_attributionList attributes; - int nHeatedTargets, nReadHeatedTargets; - MCGIDI_target_heated *baseHeatedTarget; /* The lowest temperature whose contents is "all" data, (e.g, not just "crossSection"). */ - MCGIDI_target_heated_info *heatedTargets; /* List of heated targets in order by temperature. */ - MCGIDI_target_heated_info **readHeatedTargets; /* List of "read in" heated targets in order by temperature. */ -}; - -char const *MCGIDI_version( void ); -int MCGIDI_versionMajor( void ); -int MCGIDI_versionMinor( void ); -int MCGIDI_versionPatchLevel( void ); - -/* -* Routines in MCGIDI_target.c -*/ -MCGIDI_target *MCGIDI_target_new( statusMessageReporting *smr ); -int MCGIDI_target_initialize( statusMessageReporting *smr, MCGIDI_target *target ); -MCGIDI_target *MCGIDI_target_newRead( statusMessageReporting *smr, const char *fileName ); -int MCGIDI_target_readFromMapViaPoPIDs( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ); -int MCGIDI_target_readFromMap( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_map *map, const char *evaluation, const char *projectileName, - const char *targetName ); -MCGIDI_target *MCGIDI_target_newReadFromMapViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ); -MCGIDI_target *MCGIDI_target_newReadFromMap( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, const char *projectileName, - const char *targetName ); -MCGIDI_target *MCGIDI_target_free( statusMessageReporting *smr, MCGIDI_target *target ); -int MCGIDI_target_release( statusMessageReporting *smr, MCGIDI_target *target ); -int MCGIDI_target_read( statusMessageReporting *smr, MCGIDI_target *target, const char *fileName ); -char const *MCGIDI_target_getAttributesValue( statusMessageReporting *smr, MCGIDI_target *target, char const *name ); -int MCGIDI_target_getTemperatures( statusMessageReporting *smr, MCGIDI_target *target, double *temperatures ); -int MCGIDI_target_readHeatedTarget( statusMessageReporting *smr, MCGIDI_target *target, int index ); -MCGIDI_target_heated *MCGIDI_target_getHeatedTargetAtIndex_ReadIfNeeded( statusMessageReporting *smr, MCGIDI_target *target, int index ); -MCGIDI_target_heated *MCGIDI_target_getHeatedTargetAtTIndex( statusMessageReporting *smr, MCGIDI_target *target, int index ); - -int MCGIDI_target_numberOfReactions( statusMessageReporting *smr, MCGIDI_target *target ); -enum MCGIDI_reactionType MCGIDI_target_getReactionTypeAtIndex( statusMessageReporting *smr, MCGIDI_target *target, int index ); -MCGIDI_reaction *MCGIDI_target_getReactionAtIndex( MCGIDI_target *target, int index ); -MCGIDI_reaction *MCGIDI_target_getReactionAtIndex_smr( statusMessageReporting *smr, MCGIDI_target *target, int index ); -int MCGIDI_target_numberOfProductionReactions( statusMessageReporting *smr, MCGIDI_target *target ); - -transportabilitiesMap const *MCGIDI_target_getUniqueProducts( statusMessageReporting *smr, MCGIDI_target *target ); -int MCGIDI_target_recast( statusMessageReporting *smr, MCGIDI_target *target, GIDI_settings &settings ); - -int MCGIDI_target_getDomain( statusMessageReporting *smr, MCGIDI_target *target, double *EMin, double *EMax ); -double MCGIDI_target_getTotalCrossSectionAtTAndE( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_quantitiesLookupModes &modes, - bool sampling ); -double MCGIDI_target_getIndexReactionCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target *target, int index, MCGIDI_quantitiesLookupModes &modes, - bool sampling ); -int MCGIDI_target_sampleReaction( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_quantitiesLookupModes &modes, double totalXSec, - double (*userrng)( void * ), void *rngState ); -int MCGIDI_target_sampleNullReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target *target, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productDatas ); -int MCGIDI_target_sampleIndexReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target *target, int index, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productData ); -double MCGIDI_target_getIndexReactionFinalQ( statusMessageReporting *smr, MCGIDI_target *target, int index, MCGIDI_quantitiesLookupModes &modes ); - -/* -* Routines in MCGIDI_target_heated.c -*/ -MCGIDI_target_heated *MCGIDI_target_heated_new( statusMessageReporting *smr ); -int MCGIDI_target_heated_initialize( statusMessageReporting *smr, MCGIDI_target_heated *target ); -MCGIDI_target_heated *MCGIDI_target_heated_newRead( statusMessageReporting *smr, const char *fileName ); -MCGIDI_target_heated *MCGIDI_target_heated_free( statusMessageReporting *smr, MCGIDI_target_heated *target ); -int MCGIDI_target_heated_release( statusMessageReporting *smr, MCGIDI_target_heated *target ); -int MCGIDI_target_heated_read( statusMessageReporting *smr, MCGIDI_target_heated *target, const char *fileName ); -int MCGIDI_target_heated_numberOfReactions( statusMessageReporting *smr, MCGIDI_target_heated *target ); -int MCGIDI_target_heated_numberOfProductionReactions( statusMessageReporting *smr, MCGIDI_target_heated *target ); -MCGIDI_reaction *MCGIDI_target_heated_getReactionAtIndex( MCGIDI_target_heated *target, int index ); -MCGIDI_reaction *MCGIDI_target_heated_getReactionAtIndex_smr( statusMessageReporting *smr, MCGIDI_target_heated *target, int index ); -#if 0 -MCGIDI_reaction *MCGIDI_target_heated_getProductionReactionAtIndex( MCGIDI_target_heated *target, int index ); -#endif -MCGIDI_POP *MCGIDI_target_heated_getPOPForProjectile( statusMessageReporting *smr, MCGIDI_target_heated *target ); -MCGIDI_POP *MCGIDI_target_heated_getPOPForTarget( statusMessageReporting *smr, MCGIDI_target_heated *target ); -double MCGIDI_target_heated_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_target_heated *target ); -double MCGIDI_target_heated_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_target_heated *target ); -int MCGIDI_target_heated_getEnergyGrid( statusMessageReporting *smr, MCGIDI_target_heated *target, double **energyGrid ); -double MCGIDI_target_heated_getTotalCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, MCGIDI_quantitiesLookupModes &modes, - bool sampling ); -double MCGIDI_target_heated_getIndexReactionCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes, bool sampling ); -int MCGIDI_target_heated_sampleIndexReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productData ); -double MCGIDI_target_heated_getReactionsThreshold( statusMessageReporting *smr, MCGIDI_target_heated *target, int index ); -int MCGIDI_target_heated_getReactionsDomain( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, double *EMin, double *EMax ); -double MCGIDI_target_heated_getIndexReactionFinalQ( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes ); - -transportabilitiesMap const *MCGIDI_target_heated_getUniqueProducts( statusMessageReporting *smr, MCGIDI_target_heated *target ); -int MCGIDI_target_heated_recast( statusMessageReporting *smr, MCGIDI_target_heated *target, GIDI_settings &settings ); - -/* -* Routines in MCGIDI_reaction.c -*/ -MCGIDI_reaction *MCGIDI_reaction_new( statusMessageReporting *smr ); -int MCGIDI_reaction_initialize( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -MCGIDI_reaction *MCGIDI_reaction_free( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -int MCGIDI_reaction_release( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -int MCGIDI_reaction_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_target_heated *target, - MCGIDI_POPs *pops, MCGIDI_reaction *reaction ); -enum MCGIDI_reactionType MCGIDI_reaction_getReactionType( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -MCGIDI_target_heated *MCGIDI_reaction_getTargetHeated( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -double MCGIDI_reaction_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -double MCGIDI_reaction_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -int MCGIDI_reaction_getDomain( statusMessageReporting *smr, MCGIDI_reaction *reaction, double *EMin, double *EMax ); -int MCGIDI_reaction_fixDomains( statusMessageReporting *smr, MCGIDI_reaction *reaction, double EMin, double EMax, nfu_status *status ); -double MCGIDI_reaction_getCrossSectionAtE( statusMessageReporting *smr, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &modes, bool sampling ); -double MCGIDI_reaction_getFinalQ( statusMessageReporting *smr, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &modes ); -int MCGIDI_reaction_getENDF_MTNumber( MCGIDI_reaction *reaction ); -int MCGIDI_reaction_getENDL_CSNumbers( MCGIDI_reaction *reaction, int *S ); -int MCGIDI_reaction_recast( statusMessageReporting *smr, MCGIDI_reaction *reaction, GIDI_settings &settings, - GIDI_settings_particle const *projectileSettings, double temperature_MeV, ptwXPoints *totalGroupedCrossSection ); - -MCGIDI_productsInfo *MCGIDI_reaction_getProductsInfo( MCGIDI_reaction *reaction ); -int MCGIDI_productsInfo_getNumberOfUniqueProducts( MCGIDI_productsInfo *productsInfo ); -int MCGIDI_productsInfo_getPoPsIndexAtIndex( MCGIDI_productsInfo *productsInfo, int index ); -enum MCGIDI_productMultiplicityType MCGIDI_productsInfo_getMultiplicityTypeAtIndex( MCGIDI_productsInfo *productsInfo, int index ); -int MCGIDI_productsInfo_getIntegerMultiplicityAtIndex( MCGIDI_productsInfo *productsInfo, int index ); -int MCGIDI_productsInfo_getTransportableAtIndex( MCGIDI_productsInfo *productsInfo, int index ); - -/* -* Routines in MCGIDI_pop.c -*/ -MCGIDI_POPs *MCGIDI_POPs_new( statusMessageReporting *smr, int size ); -int MCGIDI_POPs_initial( statusMessageReporting *smr, MCGIDI_POPs *pops, int size ); -void *MCGIDI_POPs_free( MCGIDI_POPs *pops ); -int MCGIDI_POPs_release( MCGIDI_POPs *pops ); -MCGIDI_POP *MCGIDI_POPs_addParticleIfNeeded( statusMessageReporting *smr, MCGIDI_POPs *pops, char const *name, double mass_MeV, - double level_MeV, MCGIDI_POP *parent, int globalParticle ); -int MCGIDI_POPs_findParticleIndex( MCGIDI_POPs *pops, char const *name ); -MCGIDI_POP *MCGIDI_POPs_findParticle( MCGIDI_POPs *pops, char const *name ); -void MCGIDI_POPs_writeSortedList( MCGIDI_POPs *pops, FILE *f ); -void MCGIDI_POPs_printSortedList( MCGIDI_POPs *pops ); - -MCGIDI_POP *MCGIDI_POP_new( statusMessageReporting *smr, char const *name, double mass_MeV, double level_MeV, MCGIDI_POP *parent ); -MCGIDI_POP *MCGIDI_POP_free( MCGIDI_POP *pop ); -MCGIDI_POP *MCGIDI_POP_release( MCGIDI_POP *pop ); -double MCGIDI_POP_getMass_MeV( MCGIDI_POP *pop ); - -/* -* Routines in MCGIDI_particle.c -*/ -MCGIDI_particle *MCGIDI_particle_new( statusMessageReporting *smr ); -int MCGIDI_particle_initialize( statusMessageReporting *smr, MCGIDI_particle *particle ); -MCGIDI_particle *MCGIDI_particle_free( statusMessageReporting *smr, MCGIDI_particle *particle ); -int MCGIDI_particle_release( statusMessageReporting *smr, MCGIDI_particle *particle ); -int MCGIDI_particle_freeInternalList( statusMessageReporting *smr ); -MCGIDI_particle *MCGIDI_particle_getInternalID( statusMessageReporting *smr, const char * const name, MCGIDI_POPs *pops ); -int MCGIDI_particle_printInternalSortedList( statusMessageReporting *smr ); - -/* -* Routines in MCGIDI_outputChannel.c -*/ -MCGIDI_outputChannel *MCGIDI_outputChannel_new( statusMessageReporting *smr ); -int MCGIDI_outputChannel_initialize( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -MCGIDI_outputChannel *MCGIDI_outputChannel_free( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -int MCGIDI_outputChannel_release( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -int MCGIDI_outputChannel_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_POPs *pops, MCGIDI_outputChannel *outputChannel, - MCGIDI_reaction *reaction, MCGIDI_product *parent ); -int MCGIDI_outputChannel_numberOfProducts( MCGIDI_outputChannel *outputChannel ); -MCGIDI_product *MCGIDI_outputChannel_getProductAtIndex( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, int i ); -int MCGIDI_outputChannel_getDomain( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, double *EMin, double *EMax ); -MCGIDI_target_heated *MCGIDI_outputChannel_getTargetHeated( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -double MCGIDI_outputChannel_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -double MCGIDI_outputChannel_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ); -double MCGIDI_outputChannel_getQ_MeV( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, double e_in ); -double MCGIDI_outputChannel_getFinalQ( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, double e_in ); -int MCGIDI_outputChannel_sampleProductsAtE( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productDatas, double *masses ); - -/* -* Routines in MCGIDI_product.c -*/ -MCGIDI_product *MCGIDI_product_new( statusMessageReporting *smr ); -int MCGIDI_product_initialize( statusMessageReporting *smr, MCGIDI_product *product ); -MCGIDI_product *MCGIDI_product_free( statusMessageReporting *smr, MCGIDI_product *product ); -int MCGIDI_product_release( statusMessageReporting *smr, MCGIDI_product *product ); -int MCGIDI_product_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_outputChannel *outputChannel, - MCGIDI_POPs *pops, MCGIDI_product *product, int *delayedNeutronIndex ); -int MCGIDI_product_getDomain( statusMessageReporting *smr, MCGIDI_product *product, double *EMin, double *EMax ); -int MCGIDI_product_setTwoBodyMasses( statusMessageReporting *smr, MCGIDI_product *product, double projectileMass_MeV, double targetMass_MeV, - double productMass_MeV, double residualMass_MeV ); -double MCGIDI_product_getMass_MeV( statusMessageReporting *smr, MCGIDI_product *product ); -MCGIDI_target_heated *MCGIDI_product_getTargetHeated( statusMessageReporting *smr, MCGIDI_product *product ); -double MCGIDI_product_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_product *product ); -double MCGIDI_product_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_product *product ); -int MCGIDI_product_sampleMultiplicity( statusMessageReporting *smr, MCGIDI_product *product, double e_in, double r ); -int MCGIDI_product_sampleMu( statusMessageReporting *smr, MCGIDI_product *product, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -int MCGIDI_sampledProducts_initialize( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas, int incrementSize ); -int MCGIDI_sampledProducts_release( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas ); -int MCGIDI_sampledProducts_remalloc( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas ); -int MCGIDI_sampledProducts_addProduct( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas, - MCGIDI_sampledProductsData *sampledProductsData ); -int MCGIDI_sampledProducts_number( MCGIDI_sampledProductsDatas *sampledProductsDatas ); -MCGIDI_sampledProductsData *MCGIDI_sampledProducts_getProductAtIndex( MCGIDI_sampledProductsDatas *sampledProductsDatas, int index ); - -/* -* Routines in MCGIDI_distribution.c -*/ -MCGIDI_distribution *MCGIDI_distribution_new( statusMessageReporting *smr ); -int MCGIDI_distribution_initialize( statusMessageReporting *smr, MCGIDI_distribution *distribution ); -MCGIDI_distribution *MCGIDI_distribution_free( statusMessageReporting *smr, MCGIDI_distribution *distribution ); -int MCGIDI_distribution_release( statusMessageReporting *smr, MCGIDI_distribution *distribution ); -int MCGIDI_distribution_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product, MCGIDI_POPs *pops, ptwXYPoints *norms ); - -/* -* Routines in MCGIDI_angular.c -*/ -MCGIDI_angular *MCGIDI_angular_new( statusMessageReporting *smr ); -int MCGIDI_angular_initialize( statusMessageReporting *smr, MCGIDI_angular *angular ); -MCGIDI_angular *MCGIDI_angular_free( statusMessageReporting *smr, MCGIDI_angular *angular ); -int MCGIDI_angular_release( statusMessageReporting *smr, MCGIDI_angular *angular ); -int MCGIDI_angular_setTwoBodyMasses( statusMessageReporting *smr, MCGIDI_angular *angular, double projectileMass_MeV, double targetMass_MeV, - double productMass_MeV, double residualMass_MeV ); -int MCGIDI_angular_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms ); -int MCGIDI_angular_sampleMu( statusMessageReporting *smr, MCGIDI_angular *angular, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_energy.c -*/ -MCGIDI_energy *MCGIDI_energy_new( statusMessageReporting *smr ); -int MCGIDI_energy_initialize( statusMessageReporting *smr, MCGIDI_energy *energy ); -MCGIDI_energy *MCGIDI_energy_free( statusMessageReporting *smr, MCGIDI_energy *energy ); -int MCGIDI_energy_release( statusMessageReporting *smr, MCGIDI_energy *energy ); -int MCGIDI_energy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms, - enum MCGIDI_energyType energyType, double gammaEnergy_MeV ); -int MCGIDI_energy_sampleEnergy( statusMessageReporting *smr, MCGIDI_energy *energy, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_energyAngular.c -*/ -int MCGIDI_energyAngular_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); -MCGIDI_energyAngular *MCGIDI_energyAngular_new( statusMessageReporting *smr ); -int MCGIDI_energyAngular_initialize( statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular ); -MCGIDI_energyAngular *MCGIDI_energyAngular_free( statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular ); -int MCGIDI_energyAngular_release( statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular ); -int MCGIDI_energyAngular_sampleDistribution( statusMessageReporting *smr, MCGIDI_distribution *distribution, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_angularEnergy.c -*/ -MCGIDI_angularEnergy *MCGIDI_angularEnergy_new( statusMessageReporting *smr ); -int MCGIDI_angularEnergy_initialize( statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular ); -MCGIDI_angularEnergy *MCGIDI_angularEnergy_free( statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular ); -int MCGIDI_angularEnergy_release( statusMessageReporting *smr, MCGIDI_angularEnergy *energyAngular ); -int MCGIDI_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); -int MCGIDI_angularEnergy_sampleDistribution( statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_KalbachMann.c -*/ -MCGIDI_KalbachMann *MCGIDI_KalbachMann_new( statusMessageReporting *smr, ptwXY_interpolation interpolationWY, ptwXY_interpolation interpolationXY ); -int MCGIDI_KalbachMann_initialize( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann, ptwXY_interpolation interpolationWY, ptwXY_interpolation interpolationXY ); -MCGIDI_KalbachMann *MCGIDI_KalbachMann_free( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann ); -int MCGIDI_KalbachMann_release( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann ); -int MCGIDI_KalbachMann_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); -int MCGIDI_KalbachMann_sampleEp( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_uncorrelated.c -*/ -int MCGIDI_uncorrelated_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms, - enum MCGIDI_energyType energyType, double gammaEnergy_MeV ); -int MCGIDI_uncorrelated_sampleDistribution( statusMessageReporting *smr, MCGIDI_distribution *distribution, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ); - -/* -* Routines in MCGIDI_LLNLAngular_angularEnergy.c -*/ -int MCGIDI_LLNLAngular_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); - -/* -* Routines in MCGIDI_kinetics.c -*/ -int MCGIDI_kinetics_2BodyReaction( statusMessageReporting *smr, MCGIDI_angular *angular, double K, double mu, double phi, - MCGIDI_sampledProductsData *outgoingData ); -int MCGIDI_kinetics_COMKineticEnergy2LabEnergyAndMomentum( statusMessageReporting *smr, double beta, double e_kinetic_com, double mu, double phi, - double m3cc, double m4cc, MCGIDI_sampledProductsData *outgoingData ); -int MCGIDI_kinetics_COM2Lab( statusMessageReporting *smr, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, double masses[3] ); - -/* -* Routines in MCGIDI_sampling.c -*/ -int MCGIDI_sampling_pdfsOfXGivenW_initialize( statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists ); -int MCGIDI_sampling_pdfsOfXGivenW_release( statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists ); -int MCGIDI_sampling_pdfsOfX_release( statusMessageReporting *smr, MCGIDI_pdfOfX *dist ); -int MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( MCGIDI_pdfsOfXGivenW *dists, MCGIDI_pdfsOfXGivenW_sampled *sampled, double r ); -int MCGIDI_sampling_sampleX_from_pdfOfX( MCGIDI_pdfOfX *dist, MCGIDI_pdfsOfXGivenW_sampled *sampled, double r ); -int MCGIDI_sampling_doubleDistribution( statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *pdfOfWGivenV, MCGIDI_pdfsOfXGivenW *pdfOfXGivenVAndW, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo ); -int MCGIDI_sampling_interpolationValues( statusMessageReporting *smr, ptwXY_interpolation interpolation, double *ws, double y1, double y2, double *y ); -double MCGIDI_sampling_ptwXY_getValueAtX( ptwXYPoints *ptwXY, double x1 ); - -/* -* Routines in MCGIDI_misc.c -*/ -int MCGIDI_misc_NumberOfZSymbols( void ); -const char *MCGIDI_misc_ZToSymbol( int iZ ); -int MCGIDI_misc_symbolToZ( const char *Z ); -int MCGIDI_miscNameToZAm( statusMessageReporting *smr, const char *name, int *Z, int *A, int *m, int *level ); -xDataTOM_Int MCGIDI_misc_binarySearch( xDataTOM_Int n, double *ds, double d ); -int MCGIDI_misc_PQUStringToDouble( statusMessageReporting *smr, char const *str, char const *unit, double conversion, double *value ); -int MCGIDI_misc_PQUStringToDoubleInUnitOf( statusMessageReporting *smr, char const *str, char const *toUnit, double *value ); -void MCGIDI_misc_updateTransportabilitiesMap( transportabilitiesMap *transportabilities, int PoPID, enum MCGIDI_transportability transportability ); -void MCGIDI_misc_updateTransportabilitiesMap2( transportabilitiesMap *transportabilities, int PoPID, int transportable ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI.hpp b/source/processes/hadronic/models/lend/include/MCGIDI.hpp new file mode 100644 index 0000000000..1ff5b25cba --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI.hpp @@ -0,0 +1,1915 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_hpp_included +#define MCGIDI_hpp_included 1 + +#define MCGIDI_USE_DOUBLES 1 +#ifndef MCGIDI_USE_DOUBLES + #define MCGIDI_FLOAT float + #define DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE DATA_MEMBER_VECTOR_FLOAT +#else + #define MCGIDI_FLOAT double + #define DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE DATA_MEMBER_VECTOR_DOUBLE +#endif + +#define _USE_MATH_DEFINES +#include "math.h" + +#include +#include +#include + +#ifdef MCGIDI_USE_VIRTUAL_FUNCTIONS + #define MCGIDI_VIRTUAL_FUNCTION virtual + #define MCGIDI_TRUE_VIRTUAL = 0 +#else + #define MCGIDI_VIRTUAL_FUNCTION + #define MCGIDI_TRUE_VIRTUAL +#endif + +#if defined(HAVE_HIP) && defined(__HIP_DEVICE_COMPILE__) + #define MCGIDI_PRINTF(...) +#else + #define MCGIDI_PRINTF printf +#endif + +namespace MCGIDI { + +class Protare; +class ProtareSingle; +class ProtareComposite; +class ProtareTNSL; +class Reaction; +class OutputChannel; +class ACE_URR_probabilityTables; + +} // End of namespace MCGIDI. + +#include +#include "MCGIDI_sampling.hpp" +#include "MCGIDI_vector.hpp" +#include "MCGIDI_string.hpp" + +namespace MCGIDI { + +#define MCGIDI_nullReaction -10001 + +// FIXME, this should not be used once physicalQuantity can handle changing units. +#define MCGIDI_speedOfLight_cm_sh 299.792458 +#define MCGIDI_speedOfLight_cm_sec ( MCGIDI_speedOfLight_cm_sh * 1e8 ) +#define MCGIDI_classicalElectronRadius 0.2817940322010228 // Classical electron radius in unit of sqrt( b ). + +#define MCGIDI_particleBeta( a_mass_unitOfEnergy, a_kineticEnergy ) \ + ( (a_mass_unitOfEnergy) == 0.0 ? 1 : sqrt( (a_kineticEnergy) * ( (a_kineticEnergy) + 2.0 * (a_mass_unitOfEnergy) ) ) / ( (a_kineticEnergy) + (a_mass_unitOfEnergy) ) ) + +LUPI_HOST_DEVICE double particleKineticEnergy( double a_mass_unitOfEnergy, double a_particleBeta ); +LUPI_HOST_DEVICE double particleKineticEnergyFromBeta2( double a_mass_unitOfEnergy, double a_particleBeta2 ); // a_particleBeta2 = a_particleBeta^2. +LUPI_HOST_DEVICE double boostSpeed( double a_massProjectile, double a_kineticEnergyProjectile, double a_massTarget ); +LUPI_HOST_DEVICE int muCOM_From_muLab( double a_muLab, double a_boostBeta, double a_productBeta, double &a_muPlus, double &a_JacobianPlus, double &a_muMinus, double &a_JacobianMinus ); + +enum class ProtareType { single, composite, TNSL }; + +namespace Transporting { + +enum class URR_mode { none, pdfs, ACE_URR_probabilityTables }; + +namespace LookupMode { + + enum class Data1d { continuousEnergy, multiGroup }; + enum class Distribution { pdf_cdf, epbs }; + +} // End of namespace LookupMode. + +namespace Reaction { + + enum class Type { Reactions, OrphanProducts }; + +} // End of namespace Reaction. + +/* +============================================================ +============================ MC ============================ +============================================================ +*/ +class MC : public GIDI::Transporting::Settings { + + private: + GIDI::Styles::Suite const *m_styles; /**< FIXME. */ + std::string m_label; /**< FIXME. */ + double m_energyDomainMax; /**< All reactions with a threshold greater than or equal to this value are ignored. */ + bool m_ignoreENDF_MT5; /**< If true, the ENDF MT 5 reaction is ignored. */ + bool m_sampleNonTransportingParticles; /**< If true, all products are sampled, otherwise only transporting particles are sampled. */ + bool m_useSlowerContinuousEnergyConversion; /**< If true, the old slower conversion of GIDI::ProtareSingle to MCGIDI::HeatedCrossSectionContinuousEnergy is used. */ + bool m_addExpectedValueData; /**< If true, exected value data are included in the construction of a HeatedCrossSectionContinuousEnergy class. */ + LookupMode::Data1d m_crossSectionLookupMode; /**< Determines how cross sections are evaluated. */ + LookupMode::Data1d m_other1dDataLookupMode; /**< Determines how 1d data other than cross sections are evaluated. */ + LookupMode::Distribution m_distributionLookupMode; /**< Determines how distributions are evaluated and sampled. Currently, only pdf_cdf is allowed. */ + Sampling::Upscatter::Model m_upscatterModel; /**< FIXME. */ + std::string m_upscatterModelALabel; /**< FIXME. */ + URR_mode m_URR_mode; /**< Selects if URR data are to be used, and it so, which type. */ + bool m_wantTerrellPromptNeutronDistribution; /**< If true, prompt fission neutron distributions are sampled from the Terrell mode. */ + bool m_wantRawTNSL_distributionSampling; /**< If true, the TNSL neutron distributions for coherent and incoherent elastic scattering are sampled from the double differential data. Otherwise, they are sampled from the distribution data. */ + std::vector m_fixedGridPoints; /**< FIXME. */ + bool m_makePhotonEmissionProbabilitiesOne; /**< If true, all photon emission probabilities are set to 1.0 (i.e., all ICCs are set to 0.0). Default is false. */ + bool m_zeroNuclearLevelEnergyWidth; /**< If true, all NuclideGammaBranchStateInfo.m_nuclearLevelEnergyWidth members are set to 0.0. Default is false. */ + + public: + LUPI_HOST MC( PoPI::Database const &a_pops, std::string const &a_projectileID, GIDI::Styles::Suite const *a_styles, std::string const &a_label, + GIDI::Transporting::DelayedNeutrons a_delayedNeutrons, double energyDomainMax ); + LUPI_HOST MC( PoPI::Database const &a_pops, GIDI::Protare const &a_protare, std::string const &a_label, + GIDI::Transporting::DelayedNeutrons a_delayedNeutrons, double energyDomainMax ); + + LUPI_HOST GIDI::Styles::Suite const *styles( ) const { return( m_styles ); } /**< Returns the value of the **m_styles**. */ + LUPI_HOST void styles( GIDI::Styles::Suite const *a_styles ) { m_styles = a_styles; } /**< This is needed for ProtareTNSL, but should be avoided otherwise. FIXME, need to have a better way. */ + + LUPI_HOST std::string label( ) const { return( m_label ); } + +// FIXME (1) should this not be something like +// GIDI::Styles::Suite const &suite( ) const { return( *m_styles ); } /**< Returns a reference to **m_styles**. */ + LUPI_HOST double energyDomainMax( ) const { return( m_energyDomainMax ); } /**< Returns the value of the **m_energyDomainMax**. */ + + LUPI_HOST bool ignoreENDF_MT5( ) const { return( m_ignoreENDF_MT5 ); } /**< Returns the value of the **m_ignoreENDF_MT5**. */ + LUPI_HOST void set_ignoreENDF_MT5( bool a_ignoreENDF_MT5 ) { m_ignoreENDF_MT5 = a_ignoreENDF_MT5; } + LUPI_HOST void setIgnoreENDF_MT5( bool a_ignoreENDF_MT5 ) { set_ignoreENDF_MT5( a_ignoreENDF_MT5 ); } + /**< This function is deprecated. Use **set_ignoreENDF_MT5** instead. */ + + LUPI_HOST bool sampleNonTransportingParticles( ) const { return( m_sampleNonTransportingParticles); } + LUPI_HOST void sampleNonTransportingParticles( bool a_sampleNonTransportingParticles ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::sampleNonTransportingParticles", "MCGIDI::Transporting::MC::setSampleNonTransportingParticles", "" ); + setSampleNonTransportingParticles( a_sampleNonTransportingParticles ); } + LUPI_HOST void setSampleNonTransportingParticles( bool a_sampleNonTransportingParticles ) { m_sampleNonTransportingParticles = a_sampleNonTransportingParticles; } + + LUPI_HOST bool useSlowerContinuousEnergyConversion( ) const { return( m_useSlowerContinuousEnergyConversion ); } + LUPI_HOST void setUseSlowerContinuousEnergyConversion( bool a_useSlowerContinuousEnergyConversion ) { + m_useSlowerContinuousEnergyConversion = a_useSlowerContinuousEnergyConversion; } + + LUPI_HOST bool addExpectedValueData( ) const { return( m_addExpectedValueData ); } /**< Returns the value of the *m_addExpectedValueData* member. */ + LUPI_HOST void setAddExpectedValueData( bool a_addExpectedValueData ) { m_addExpectedValueData = a_addExpectedValueData; } /**< Set the *m_addExpectedValueData* member to *a_addExpectedValueData*. */ + + LUPI_HOST LookupMode::Data1d crossSectionLookupMode( ) const { return( m_crossSectionLookupMode ); } /**< Returns the value of the **m_crossSectionLookupMode**. */ + LUPI_HOST void setCrossSectionLookupMode( LookupMode::Data1d a_crossSectionLookupMode ); + LUPI_HOST void crossSectionLookupMode( LookupMode::Data1d a_crossSectionLookupMode ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::crossSectionLookupMode", "MCGIDI::Transporting::MC::setCrossSectionLookupMode", "" ); + setCrossSectionLookupMode( a_crossSectionLookupMode ); } /**< See method **setCrossSectionLookupMode**. This method is deprecated. */ + + LUPI_HOST LookupMode::Data1d other1dDataLookupMode( ) const { return( m_other1dDataLookupMode ); } /**< Returns the value of the **m_other1dDataLookupMode**. */ + LUPI_HOST void setOther1dDataLookupMode( LookupMode::Data1d a_other1dDataLookupMode ); + LUPI_HOST void other1dDataLookupMode( LookupMode::Data1d a_other1dDataLookupMode ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::other1dDataLookupMode", "MCGIDI::Transporting::MC::setOther1dDataLookupMode", "" ); + setOther1dDataLookupMode( a_other1dDataLookupMode ); } /**< See method **setOther1dDataLookupMode**. This method is deprecated. */ + + LUPI_HOST LookupMode::Distribution distributionLookupMode( ) const { return( m_distributionLookupMode ); } /**< Returns the value of the **m_distributionLookupMode**. */ + LUPI_HOST void setDistributionLookupMode( LookupMode::Distribution a_distributionLookupMode ); + LUPI_HOST void distributionLookupMode( LookupMode::Distribution a_distributionLookupMode ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::distributionLookupMode", "MCGIDI::Transporting::MC::setDistributionLookupMode", "" ); + setDistributionLookupMode( a_distributionLookupMode ); } /**< See method **setDistributionLookupMode**. This method is deprecated. */ + + LUPI_HOST Sampling::Upscatter::Model upscatterModel( ) const { return( m_upscatterModel ); } /**< Returns the value of the **m_upscatterModel**. */ + LUPI_HOST void set_upscatterModelA( std::string const &a_upscatterModelALabel ); + LUPI_HOST void setUpscatterModelA( std::string const &a_upscatterModelALabel ) { set_upscatterModelA( a_upscatterModelALabel ); } + /**< See method **set_upscatterModelA**. */ + LUPI_HOST std::string upscatterModelALabel( ) const { return( m_upscatterModelALabel ); } /**< Returns the value of the **m_upscatterModelALabel**. */ + LUPI_HOST void setUpscatterModelB( ) { m_upscatterModel = Sampling::Upscatter::Model::B; } /**< Set member *m_upscatterModel* to Sampling::Upscatter::Model::B. */ + LUPI_HOST void setUpscatterModelBSnLimits( ) { m_upscatterModel = Sampling::Upscatter::Model::BSnLimits; } /**< Set member *m_upscatterModel* to Sampling::Upscatter::Model::BSnLimits. */ + LUPI_HOST void setUpscatterModelDBRC( ) { m_upscatterModel = Sampling::Upscatter::Model::DBRC; } /**< Set member *m_upscatterModel* to Sampling::Upscatter::Model::DBRC. */ + + LUPI_HOST bool want_URR_probabilityTables( ) const { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::want_URR_probabilityTables", "MCGIDI::Transporting::MC::_URR_mode", "" ); + return( m_URR_mode != URR_mode::none ); } /**< Returns *false* if *m_URR_mode* is **URR_mode::none** and *true* otherwise. This method is deprecated. Please use **_URR_mode** instead. */ + LUPI_HOST void want_URR_probabilityTables( bool a_want_URR_probabilityTables ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::want_URR_probabilityTables", "MCGIDI::Transporting::MC::setURR_mode", "" ); + m_URR_mode = URR_mode::none; + if( a_want_URR_probabilityTables ) m_URR_mode = URR_mode::pdfs; + } /**< If *a_want_URR_probabilityTables* is *true* sets *m_URR_mode* to **URR_mode::pdfs**, otherwise set it to **URR_mode::none**. This method is deprecated. Please use **setURR_mode** instead. */ + + LUPI_HOST URR_mode _URR_mode( ) const { return( m_URR_mode ); } /**< Returns the value of the **m_URR_mode** member. */ + LUPI_HOST void setURR_mode( URR_mode a_URR_mode ) { m_URR_mode = a_URR_mode; } /**< This methods sets member *m_URR_mode* to *a_URR_mode*. */ + + LUPI_HOST bool wantTerrellPromptNeutronDistribution( ) const { return( m_wantTerrellPromptNeutronDistribution ); } + /**< Returns the value of the **m_wantTerrellPromptNeutronDistribution** member. */ + LUPI_HOST void setWantTerrellPromptNeutronDistribution( bool a_wantTerrellPromptNeutronDistribution ) { + m_wantTerrellPromptNeutronDistribution = a_wantTerrellPromptNeutronDistribution; + } /**< Set the *m_wantTerrellPromptNeutronDistribution* member to *a_wantTerrellPromptNeutronDistribution*. */ + LUPI_HOST void wantTerrellPromptNeutronDistribution( bool a_wantTerrellPromptNeutronDistribution ) { + LUPI::deprecatedFunction( "MCGIDI::Transporting::MC::wantTerrellPromptNeutronDistribution", "MCGIDI::Transporting::MC::setWantTerrellPromptNeutronDistribution", "" ); + setWantTerrellPromptNeutronDistribution( a_wantTerrellPromptNeutronDistribution ); + } /**< See method *setWantTerrellPromptNeutronDistribution*. This method is deprecated. */ + + LUPI_HOST bool wantRawTNSL_distributionSampling( ) const { return( m_wantRawTNSL_distributionSampling ); } + LUPI_HOST bool wantRawTNSL_distributionSampling( ) { return( m_wantRawTNSL_distributionSampling ); } + LUPI_HOST void set_wantRawTNSL_distributionSampling( bool a_wantRawTNSL_distributionSampling ) { + m_wantRawTNSL_distributionSampling = a_wantRawTNSL_distributionSampling; } + + LUPI_HOST std::vector fixedGridPoints( ) const { return( m_fixedGridPoints ); } + LUPI_HOST void fixedGridPoints( std::vector a_fixedGridPoints ) { m_fixedGridPoints = a_fixedGridPoints; } + + LUPI_HOST bool makePhotonEmissionProbabilitiesOne( ) const { return( m_makePhotonEmissionProbabilitiesOne ); } + /**< Returns the value of the **m_makePhotonEmissionProbabilitiesOne** member. */ + LUPI_HOST void setMakePhotonEmissionProbabilitiesOne( bool a_makePhotonEmissionProbabilitiesOne ) { m_makePhotonEmissionProbabilitiesOne = a_makePhotonEmissionProbabilitiesOne; } + /**< Sets member *m_makePhotonEmissionProbabilitiesOne* to *a_makePhotonEmissionProbabilitiesOne*. */ + LUPI_HOST bool zeroNuclearLevelEnergyWidth( ) const { return( m_zeroNuclearLevelEnergyWidth ); } + /**< Returns the value of the **m_zeroNuclearLevelEnergyWidth** member. */ + LUPI_HOST void setZeroNuclearLevelEnergyWidth( bool a_zeroNuclearLevelEnergyWidth ) { m_zeroNuclearLevelEnergyWidth = a_zeroNuclearLevelEnergyWidth ; } + /**< Sets member *m_zeroNuclearLevelEnergyWidth* to *a_zeroNuclearLevelEnergyWidth*. */ + + LUPI_HOST void process( GIDI::Protare const &a_protare ); +}; + +} // End of namespace Transporting. + +enum class TwoBodyOrder { notApplicable, firstParticle, secondParticle }; + +/* +============================================================ +============= ACE_URR_probabilityTablesFromGIDI ============ +============================================================ +*/ + +class ACE_URR_probabilityTablesFromGIDI { + + public: + LUPI_HOST ACE_URR_probabilityTablesFromGIDI( ); + LUPI_HOST ~ACE_URR_probabilityTablesFromGIDI( ); + + std::map m_ACE_URR_probabilityTables; // The string is the reaction's label. +}; + +/* +============================================================ +========================= SetupInfo ======================== +============================================================ +*/ +class SetupInfo { + + public: + ProtareSingle &m_protare; /**< The protare the data are loaded into. */ + GIDI::ProtareSingle const &m_GIDI_protare; /**< The GIDI protare the data are loaded from. */ + PoPI::Database const &m_popsUser; /**< The PoPs from the user. */ + PoPI::Database const &m_pops; /**< The PoPs from the GNDS protare. */ + int m_neutronIndex; + int m_photonIndex; + LUPI::FormatVersion m_formatVersion; + double m_Q; + double m_product1Mass; + double m_product2Mass; + double m_domainMin; + double m_domainMax; + TwoBodyOrder m_twoBodyOrder; + bool m_isPairProduction; + bool m_isPhotoAtomicIncoherentScattering; + std::string m_distributionLabel; /**< Set by the ProtareSingle constructor to the distribution label to use for all products. */ + std::map m_particleIntids; /**< A list of the particle intids for the transportable particles. */ + std::map m_particleIndices; /**< A list of the particle indices for the transportable particles. */ + GIDI::Reaction const *m_reaction; /**< A pointer to the current reaction whose data are being filled from the GIDI::ProtareSingle reaction. */ + Transporting::Reaction::Type m_reactionType; + int m_initialStateIndex; /**< If not -1, then reaction contains a branching gamma data with this index for the data in m_nuclideGammaBranchStateInfos member of its **ProtareSingle** instance. */ + bool m_hasFinalStatePhotons; /**< If **true**, the reaction has a photon with finalState attribute. */ + std::map m_initialStateIndices; /**< If not -1, then reaction contains a branching gamma data with this index for the data in m_nuclideGammaBranchStateInfos member of its **ProtareSingle** instance. */ + std::map m_stateNamesToIndices; /**< A map of nuclide PoPs ids to their index in the ProtareSingle::m_nuclideGammaBranchStateInfos member. */ + std::map m_nuclearLevelEnergies; /**< A map of nuclide PoPs id to their nuclear level energy. */ + std::map m_ACE_URR_probabilityTablesFromGIDI; + GIDI::GRIN::GRIN_continuumGammas const *m_GRIN_continuumGammas; + + LUPI_HOST SetupInfo( ProtareSingle &a_protare, GIDI::ProtareSingle const &a_GIDI_protare, PoPI::Database const &a_popsUser, + PoPI::Database const &a_pops ); + LUPI_HOST ~SetupInfo( ); +}; + +/* +============================================================ +=========================== Others ========================= +============================================================ +*/ +LUPI_HOST int MCGIDI_popsIntid( PoPI::Database const &a_pops, std::string const &a_ID ); +LUPI_HOST int MCGIDI_popsIndex( PoPI::Database const &a_pops, std::string const &a_ID ); + +#if 0 +/* *********************************************************************************************************//** + * This function does a binary search of *a_Xs* for the *index* for which *a_Xs*[*index*] <= *a_x* < *a_Xs*[*index*+1]. + * The values of *a_Xs* must be ascending (i.e., *a_Xs*[i] < *a_Xs*[i+1]). + * + * + * Returns -2 if a_x < a_Xs[0] or 0 if a_boundIndex is true, + * -1 if a_x > last point of a_Xs or a_Xs.size( ) - 1 if a_boundIndex is true, or + * the lower index of a_Xs which bound a_x otherwise. + * + * Note, when *a_boundIndex* is false the returned *index* can be negative and when it is true + * the return value will be a valid index of *a_Xs*, including its last point. The index of the last + * point is only returned when *a_boundIndex* is true and *a_x* is great than the last point of *a_Xs*. + * + * @param a_x [in] The values whose bounding index within *a_Xs* is to be determined. + * @param a_Xs [in] The list of ascending values. + * @param a_boundIndex [in] If true, out-of-bounds values a treated as end points. + * + * @return The *index*. + ***********************************************************************************************************/ +#endif + +LUPI_HOST_DEVICE inline int binarySearchVector( double a_x, Vector const &a_Xs, bool a_boundIndex = false ) { + + int lower = 0, middle, upper = (int) a_Xs.size( ) - 1; + + if( a_x < a_Xs[0] ) { + if( a_boundIndex ) return( 0 ); + return( -2 ); + } + + if( a_x > a_Xs[upper] ) { + if( a_boundIndex ) return( upper ); + return( -1 ); + } + + while( 1 ) { + middle = ( lower + upper ) >> 1; + if( middle == lower ) break; + if( a_x < a_Xs[middle] ) { + upper = middle; } + else { + lower = middle; + } + } + return( lower ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE inline int binarySearchVectorBounded( double a_x, Vector const &a_Xs, int a_lower, + int a_upper, bool a_boundIndex ) { + + int middle; + + if( a_x < a_Xs[a_lower] ) { + if( a_boundIndex ) return( 0 ); + return( -2 ); + } + + if( a_x > a_Xs[a_upper] ) { + if( a_boundIndex ) return( a_upper ); + return( -1 ); + } + + while( 1 ) { + middle = ( a_lower + a_upper ) >> 1; + if( middle == a_lower ) break; + if( a_x < a_Xs[middle] ) { + a_upper = middle; } + else { + a_lower = middle; + } + } + return( a_lower ); +} + +} // End of namespace MCGIDI. + +#include "MCGIDI_functions.hpp" +#include "MCGIDI_distributions.hpp" + +namespace MCGIDI { + +enum class ChannelType { none, twoBody, uncorrelatedBodies }; + +/* +============================================================ +===================== MultiGroupHash ======================= +============================================================ +*/ +class MultiGroupHash { + + private: + Vector m_boundaries; /**< The list of multi-group boundaries. */ + + LUPI_HOST void initialize( GIDI::Protare const &a_protare, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, std::string a_particleID ); + + public: + LUPI_HOST MultiGroupHash( std::vector a_boundaries ); + LUPI_HOST MultiGroupHash( GIDI::Protare const &a_protare, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_particleID = "" ); + LUPI_HOST MultiGroupHash( GIDI::Protare const &a_protare, GIDI::Transporting::Particles const &a_particles ); + + LUPI_HOST_DEVICE Vector const &boundaries( ) const { return( m_boundaries ); } /**< Returns a reference to **m_styles**. */ + LUPI_HOST_DEVICE int index( double a_domain ) const { + int _index = binarySearchVector( a_domain, m_boundaries ); + + if( _index == -2 ) return( 0 ); + if( _index == -1 ) return( m_boundaries.size( ) - 2 ); + return( _index ); + } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== URR_protareInfo ===================== +============================================================ +*/ +class URR_protareInfo { + + public: + bool m_inURR; + double m_rng_Value; + + LUPI_HOST_DEVICE URR_protareInfo( ) : m_inURR( false ), m_rng_Value( 0.0 ) { } + LUPI_HOST_DEVICE URR_protareInfo( URR_protareInfo const &a_URR_protareInfo ) { + m_inURR = a_URR_protareInfo.m_inURR; + m_rng_Value = a_URR_protareInfo.m_rng_Value; + } + LUPI_HOST_DEVICE URR_protareInfo &operator=( URR_protareInfo const &a_rhs ) { + + if( this != &a_rhs ) { + m_inURR = a_rhs.inURR( ); + m_rng_Value = a_rhs.rng_Value( ); + } + + return( *this ); + } + + LUPI_HOST_DEVICE bool inURR( ) const { return( m_inURR ); } + LUPI_HOST_DEVICE double rng_Value( ) const { return( m_rng_Value ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +===================== URR_protareInfos ===================== +============================================================ +*/ +class URR_protareInfos { + + private: + Vector m_URR_protareInfos; + + public: + LUPI_HOST_DEVICE URR_protareInfos( ) : m_URR_protareInfos( ) { } + LUPI_HOST URR_protareInfos( Vector &a_protares ); + + LUPI_HOST void setup( Vector &a_protares ); + + LUPI_HOST_DEVICE std::size_t size( ) const { return( m_URR_protareInfos.size( ) ); } + LUPI_HOST_DEVICE URR_protareInfo const &operator[]( std::size_t a_index ) const { return( m_URR_protareInfos[a_index] ); } /**< Returns the instance of *m_URR_protareInfos* at index *a_index*. */ +template + inline LUPI_HOST_DEVICE void updateProtare( MCGIDI::Protare const *a_protare, double a_energy, RNG && a_rng ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE long internalSize( ) const { return m_URR_protareInfos.internalSize( ); } +}; + +/* +============================================================ +================= ACE_URR_probabilityTable ================= +============================================================ +*/ + +class ACE_URR_probabilityTable { + + public: + double m_energy; /**< The projectile energy where the data are specified. */ + Vector m_propabilities; /**< The probability for each cross section. */ + Vector m_crossSections; /**< The cross section for each probability. */ + + LUPI_HOST_DEVICE ACE_URR_probabilityTable( ); + LUPI_HOST ACE_URR_probabilityTable( double a_energy, std::vector const &a_propabilities, std::vector const &a_crossSection ); + LUPI_HOST_DEVICE ~ACE_URR_probabilityTable( ); + + LUPI_HOST_DEVICE double energy( ) const { return( m_energy ); } + LUPI_HOST_DEVICE double sample( double a_rng_Value ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +================= ACE_URR_probabilityTables ================ +============================================================ +*/ + +class ACE_URR_probabilityTables { + + public: + Vector m_energies; /**< List of energies where probabilities tables are given. */ + Vector m_ACE_URR_probabilityTables; /**< List of probabilities tables. One for each energy in *m_energies*. */ + + LUPI_HOST_DEVICE ACE_URR_probabilityTables( ); + LUPI_HOST_DEVICE ACE_URR_probabilityTables( std::size_t a_capacity ); + LUPI_HOST_DEVICE ~ACE_URR_probabilityTables( ); + + LUPI_HOST_DEVICE std::size_t capacity( ) const { return( m_energies.capacity( ) ); } + /**< Returns the number of energies allocated to store probability tables. */ + LUPI_HOST_DEVICE std::size_t size( ) const { return( m_energies.size( ) ); } + /**< Returns the number of energies that have URR probability tables. */ + LUPI_HOST_DEVICE void reserve( std::size_t a_capacity ); + LUPI_HOST_DEVICE void push_back( ACE_URR_probabilityTable *a_ACE_URR_probabilityTable ); + + LUPI_HOST_DEVICE double domainMin( ) const { return( m_energies[0] ); } /**< Returns the minimum energy where URR data are specified. */ + LUPI_HOST_DEVICE double domainMax( ) const { return( m_energies.back( ) ); } /**< Returns the maximum energy where URR data are specified. */ + LUPI_HOST_DEVICE double sample( double a_energy, double a_rng_Value ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======== HeatedReactionCrossSectionContinuousEnergy ======== +============================================================ +*/ + +class HeatedReactionCrossSectionContinuousEnergy { + + private: + int m_offset; /**< The offset relative to the cross section grid of the first cross section value in *m_crossSections*. */ + double m_threshold; /**< The threshold for the reaction. */ + Vector m_crossSections; /**< The reaction's cross section. */ + Transporting::URR_mode m_URR_mode; /**< The URR data (i.e., mode) *this* has. */ + Probabilities::ProbabilityBase2d *m_URR_probabilityTables; /**< Pointer to pdf URR probabilities if they were loaded. */ + ACE_URR_probabilityTables *m_ACE_URR_probabilityTables; /**< The ACE URR probability tables for the reaction's cross section, if they were loaded. */ + + public: + LUPI_HOST_DEVICE HeatedReactionCrossSectionContinuousEnergy( ); + LUPI_HOST HeatedReactionCrossSectionContinuousEnergy( int a_offset, double a_threshold, Vector &a_crossSection ); + LUPI_HOST HeatedReactionCrossSectionContinuousEnergy( double a_threshold, GIDI::Functions::Ys1d const &a_crossSection, + Probabilities::ProbabilityBase2d *a_URR_probabilityTables, ACE_URR_probabilityTables *a_ACE_URR_probabilityTables ); + LUPI_HOST_DEVICE ~HeatedReactionCrossSectionContinuousEnergy( ); + + LUPI_HOST_DEVICE double threshold( ) const { return( m_threshold ); } /**< Returns the value of the **m_threshold**. */ + LUPI_HOST_DEVICE int offset( ) const { return( m_offset ); } /**< Returns the value of the **m_offset**. */ + LUPI_HOST Vector const &crossSections( ) const { return( m_crossSections ); } /**< Returns a reference to the member **m_crossSections**. */ + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const { + return( ( m_URR_probabilityTables != nullptr ) || ( m_ACE_URR_probabilityTables != nullptr ) ); + } /**< Returns true if URR probability tables data present and false otherwise. */ + LUPI_HOST_DEVICE Transporting::URR_mode URR_mode( ) const { return( m_URR_mode ); } /**< Returns the value of **m_URR_mode**. */ + LUPI_HOST_DEVICE double URR_domainMin( ) const ; + LUPI_HOST_DEVICE double URR_domainMax( ) const ; + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d *URR_probabilityTables( ) const { return( m_URR_probabilityTables ); } /**< Returns the value of the *m_URR_probabilityTables*. */ + LUPI_HOST_DEVICE ACE_URR_probabilityTables *_ACE_URR_probabilityTables( ) const { return( m_ACE_URR_probabilityTables ); } /**< Returns the value of the *m_ACE_URR_probabilityTables*. */ + LUPI_HOST_DEVICE double crossSection( std::size_t a_index ) const { + int index = static_cast( a_index ) - m_offset; + if( index < 0 ) return( 0.0 ); + if( index >= static_cast( m_crossSections.size( ) ) ) return( 0.0 ); + + return( m_crossSections[index] ); + } + LUPI_HOST GIDI::Functions::XYs1d crossSectionAsGIDI_XYs1d( double a_temperature, Vector const &a_energies ) const ; + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +=================== ContinuousEnergyGain =================== +============================================================ +*/ +class ContinuousEnergyGain { + + private: + int m_particleIntid; + int m_particleIndex; + int m_userParticleIndex; + Vector m_gain; + + public: + LUPI_HOST_DEVICE ContinuousEnergyGain( ); + LUPI_HOST ContinuousEnergyGain( int a_particleIntid, int a_particleIndex, std::size_t a_size ); + + LUPI_HOST ContinuousEnergyGain &operator=( ContinuousEnergyGain const &a_continuousEnergyGain ); + + LUPI_HOST_DEVICE int particleIntid( ) const { return( m_particleIntid); } /**< Returns the value of the *m_particleIntid* member of *this*. */ + LUPI_HOST_DEVICE int particleIndex( ) const { return( m_particleIndex ); } /**< Returns the value of the *m_particleIndex* member of *this*. */ + LUPI_HOST_DEVICE int userParticleIndex( ) const { return( m_userParticleIndex ); } /**< Returns the value of the *m_userParticleIndex* member of *this*. */ + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + if( a_particleIndex == m_particleIndex ) m_userParticleIndex = a_userParticleIndex; } + /**< Sets member *m_userParticleIndex* to *a_userParticleIndex* if particle's index matchs *m_particleIndex*. */ + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + if( a_particleIntid == m_particleIntid ) m_userParticleIndex = a_userParticleIndex; } + /**< Sets member *m_userParticleIntid* to *a_userParticleIndex* if particle's intid matchs *m_particleIntid*. */ + LUPI_HOST_DEVICE Vector const &gain( ) const { return( m_gain ); } + LUPI_HOST void adjustGain( int a_energy_index, double a_gain ) { m_gain[a_energy_index] += a_gain; } + LUPI_HOST_DEVICE double gain( int a_energy_index, double a_energy_fraction ) const ; + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +=========== HeatedCrossSectionContinuousEnergy ============= +============================================================ +*/ +class HeatedCrossSectionContinuousEnergy { + + private: + double m_temperature; /**< The target temperature of the data. */ + Vector m_hashIndices; /**< The indicies for the energy hash function. */ + Vector m_energies; /**< Energy grid for cross sections. */ + Vector m_totalCrossSection; /**< The total cross section. */ + Vector m_depositionEnergy; /**< The total continuous energy, deposition-energy cross section (related to the kinetic energy of the untracked outgoing particles). */ + Vector m_depositionMomentum; /**< The total continuous energy, deposition-momentum cross section. */ + Vector m_productionEnergy; /**< The total continuous energy, Q-value cross section. */ + Vector m_gains; /**< The total continuous energy, gain cross section for each tracked particle. */ + Transporting::URR_mode m_URR_mode; /**< The URR data (i.e., mode) *this* has. */ + Vector m_reactionsInURR_region; /**< A list of reactions within or below the upper URR regions. This is empty unless URR probability tables present and used. */ + Vector m_reactionCrossSections; + /**< Reaction cross section data for each reaction. */ + ACE_URR_probabilityTables *m_ACE_URR_probabilityTables; /**< The ACE URR probability tables for the summed URR cross section, if they were loaded. */ + + public: + LUPI_HOST_DEVICE HeatedCrossSectionContinuousEnergy( ); + LUPI_HOST HeatedCrossSectionContinuousEnergy( SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, + DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, std::vector const &a_reactions, + std::vector const &a_orphanProducts, bool a_fixedGrid, bool a_zeroReactions ); + LUPI_HOST_DEVICE ~HeatedCrossSectionContinuousEnergy( ); + + LUPI_HOST_DEVICE int evaluationInfo( int a_hashIndex, double a_energy, double *a_energyFraction ) const ; + + LUPI_HOST HeatedReactionCrossSectionContinuousEnergy const *reactionCrossSection( int a_index ) const + { return( m_reactionCrossSections[a_index] ); } /**< Returns the reaction cross section at index *a_index*. */ + + LUPI_HOST_DEVICE double temperature( ) const { return( m_temperature ); } /**< Returns the value of the **m_temperature** member. */ + LUPI_HOST_DEVICE double minimumEnergy( ) const { return( m_energies[0] ); } /**< Returns the minimum cross section domain. */ + LUPI_HOST_DEVICE double maximumEnergy( ) const { return( m_energies.back( ) ); } /**< Returns the maximum cross section domain. */ + LUPI_HOST_DEVICE int numberOfReactions( ) const { return( (int) m_reactionCrossSections.size( ) ); } + /**< Returns the number of reaction cross section. */ + + LUPI_HOST_DEVICE int thresholdOffset( int a_reactionIndex ) const { return( m_reactionCrossSections[a_reactionIndex]->offset( ) ); } + /**< Returns the offset for the cross section for the reaction with index *a_reactionIndex*. */ + LUPI_HOST_DEVICE double threshold( int a_reactionIndex ) const { return( m_reactionCrossSections[a_reactionIndex]->threshold( ) ); } + /**< Returns the threshold for the reaction with index *a_reactionIndex*. */ + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const ; + LUPI_HOST_DEVICE double URR_domainMin( ) const ; + LUPI_HOST_DEVICE double URR_domainMax( ) const ; + LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const { return( m_reactionCrossSections[a_index]->hasURR_probabilityTables( ) ); } + + LUPI_HOST_DEVICE Vector &totalCrossSection( ) { return( m_totalCrossSection ); } /**< Returns a reference to member *m_totalCrossSection*. */ + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, int a_hashIndex, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST GIDI::Functions::XYs1d crossSectionAsGIDI_XYs1d( ) const ; + + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, int a_hashIndex, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection2( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, double a_energy, int a_energyIndex, double a_energyFraction, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, double a_energy ) const ; + LUPI_HOST GIDI::Functions::XYs1d reactionCrossSectionAsGIDI_XYs1d( int a_reactionIndex ) const ; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_energy ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_energy ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_energy ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_energy, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_energy, int a_particleIntid ) const ; + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + LUPI_HOST_DEVICE Vector const &energies( ) const { return( m_energies ); } /**< Returns a reference to **m_styles**. */ + + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +============ HeatedCrossSectionsContinuousEnergy =========== +============================================================ +*/ +class HeatedCrossSectionsContinuousEnergy { + + private: + Vector m_temperatures; /**< The list of temperatures that have **HeatedCrossSectionContinuousEnergy** data. */ + Vector m_thresholds; /**< The threshold for each reaction. */ + Vector m_heatedCrossSections; /**< One **HeatedCrossSectionContinuousEnergy** instance for each temperature in *m_temperature*. */ + + public: + LUPI_HOST_DEVICE HeatedCrossSectionsContinuousEnergy( ); + LUPI_HOST_DEVICE ~HeatedCrossSectionsContinuousEnergy( ); + + LUPI_HOST void update( LUPI::StatusMessageReporting &a_smr, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::vector const &a_reactions, + std::vector const &a_orphanProducts, bool a_fixedGrid, bool a_zeroReactions ); + + LUPI_HOST_DEVICE double minimumEnergy( ) const { return( m_heatedCrossSections[0]->minimumEnergy( ) ); } + /**< Returns the minimum cross section domain. */ + LUPI_HOST_DEVICE double maximumEnergy( ) const { return( m_heatedCrossSections[0]->maximumEnergy( ) ); } + /**< Returns the maximum cross section domain. */ + LUPI_HOST_DEVICE Vector const &temperatures( ) const { return( m_temperatures ); } /**< Returns the value of the **m_temperatures**. */ + Vector &heatedCrossSections( ) { return( m_heatedCrossSections ); } + + LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const { return( m_thresholds[a_index] ); } /**< Returns the threshold for the reaction at index *a_index*. */ + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const { return( m_heatedCrossSections[0]->hasURR_probabilityTables( ) ); } + LUPI_HOST_DEVICE double URR_domainMin( ) const { return( m_heatedCrossSections[0]->URR_domainMin( ) ); } + LUPI_HOST_DEVICE double URR_domainMax( ) const { return( m_heatedCrossSections[0]->URR_domainMax( ) ); } + LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const { return( m_heatedCrossSections[0]->reactionHasURR_probabilityTables( a_index ) ); } + + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, int a_hashIndex, + double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, std::size_t a_numberAllocated, + double *a_crossSectionVector ) const ; + LUPI_HOST GIDI::Functions::XYs1d crossSectionAsGIDI_XYs1d( double a_temperature ) const ; + + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, int a_hashIndex, + double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, double a_temperature, double a_energy_in ) const ; + LUPI_HOST GIDI::Functions::XYs1d reactionCrossSectionAsGIDI_XYs1d( int a_reactionIndex, double a_temperature ) const ; + + template + inline LUPI_HOST_DEVICE int sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, int a_hashIndex, + double a_temperature, double a_energy, double a_crossSection, RNG && a_rng) const ; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const ; + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +====================== MultiGroupGain ====================== +============================================================ +*/ +class MultiGroupGain { + + private: + int m_particleIntid; + int m_particleIndex; + int m_userParticleIndex; + Vector m_gain; + + public: + LUPI_HOST_DEVICE MultiGroupGain( ); + LUPI_HOST MultiGroupGain( int a_particleIntid, int a_particleIndex, GIDI::Vector const &a_gain ); + + LUPI_HOST MultiGroupGain &operator=( MultiGroupGain const &a_multiGroupGain ); + + LUPI_HOST_DEVICE int particleIntid( ) const { return( m_particleIntid ); } /**< Returns the value of the *m_particleIntid* member of *this*. */ + LUPI_HOST_DEVICE int particleIndex( ) const { return( m_particleIndex ); } /**< Returns the value of the *m_particleIndex* member of *this*. */ + LUPI_HOST_DEVICE int userParticleIndex( ) const { return( m_userParticleIndex ); } /**< Returns the value of the *m_userParticleIndex* member of *this*. */ + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + if( a_particleIndex == m_particleIndex ) m_userParticleIndex = a_userParticleIndex; } + /**< Sets member *m_userParticleIndex* to *a_userParticleIndex* if particle's index matchs *m_particleIndex*. */ + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + if( a_particleIntid == m_particleIntid ) m_userParticleIndex = a_userParticleIndex; } + /**< Sets member *m_userParticleIntid* to *a_userParticleIndex* if particle's intid matchs *m_particleIntid*. */ + LUPI_HOST_DEVICE Vector const &gain( ) const { return( m_gain ); } + LUPI_HOST_DEVICE double gain( int a_hashIndex ) const { return( m_gain[a_hashIndex] ); } + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void write( FILE *a_file ) const ; +}; + +/* +============================================================ +=========== HeatedReactionCrossSectionMultiGroup =========== +============================================================ +*/ +class HeatedReactionCrossSectionMultiGroup { + + private: + double m_threshold; + int m_offset; + Vector m_crossSections; // Multi-group reaction cross section + double m_augmentedThresholdCrossSection; // Augmented cross section at m_offset for rejecting when projectile energy is below m_threshold. + // This value is added to m_crossSections[m_offset] when sampling an isotope or reaction. + + public: + LUPI_HOST_DEVICE HeatedReactionCrossSectionMultiGroup( ); + LUPI_HOST HeatedReactionCrossSectionMultiGroup( SetupInfo &a_setupInfo, Transporting::MC const &a_settings, int a_offset, + std::vector const &a_crossSection, double a_threshold ); + + LUPI_HOST_DEVICE double operator[]( std::size_t a_index ) const { return( m_crossSections[a_index] ); } /**< Returns the value of the cross section at multi-group index *a_index*. */ + LUPI_HOST_DEVICE double threshold( ) const { return( m_threshold ); } /**< Returns the value of the **m_threshold**. */ + LUPI_HOST_DEVICE int offset( ) const { return( m_offset ); } /**< Returns the value of the **m_offset**. */ + LUPI_HOST_DEVICE double crossSection( std::size_t a_index, bool a_sampling = false ) const { + int index = (int)a_index - m_offset; + if( index < 0 ) return( 0 ); + if( index >= (int)m_crossSections.size( ) ) return( 0 ); + + double _crossSection( m_crossSections[index] ); + if( a_sampling && ( index == 0 ) ) { + _crossSection += m_augmentedThresholdCrossSection; + } + return( _crossSection ); + } + LUPI_HOST_DEVICE double augmentedThresholdCrossSection( ) const { return( m_augmentedThresholdCrossSection ); } /**< Returns the value of the **m_augmentedThresholdCrossSection**. */ + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void write( FILE *a_file, int a_reactionIndex ) const ; +}; + +/* +============================================================ +============== HeatedCrossSectionMultiGroup ============== +============================================================ +*/ +class HeatedCrossSectionMultiGroup { + + private: + Vector m_totalCrossSection; /**< The total multi-group cross section. */ + Vector m_augmentedCrossSection; /**< The total multi-group cross section used for sampling with rejection (i.e., null-reactions). */ + Vector m_depositionEnergy; /**< The total multi-group, deposition-energy cross section (related to the kinetic energy of the untracked outgoing particles). */ + Vector m_depositionMomentum; /**< The total multi-group, deposition-momentum cross section. */ + Vector m_productionEnergy; /**< The total multi-group, Q-value cross section. */ + Vector m_gains; /**< The total multi-group, gain cross section for each tracked particle. */ + Vector m_reactionCrossSections; + + public: + LUPI_HOST_DEVICE HeatedCrossSectionMultiGroup( ); + LUPI_HOST HeatedCrossSectionMultiGroup( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, SetupInfo &a_setupInfo, + Transporting::MC const &a_settings, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, + GIDI::Transporting::Particles const &a_particles, std::vector const &a_reactions, std::string const &a_label, + bool a_zeroReactions, GIDI::ExcludeReactionsSet const &a_reactionsToExclude ); + LUPI_HOST_DEVICE ~HeatedCrossSectionMultiGroup( ); + + LUPI_HOST_DEVICE HeatedReactionCrossSectionMultiGroup *operator[]( std::size_t a_index ) const { return( m_reactionCrossSections[a_index] ); } + /**< Returns the HeatedReactionCrossSectionMultiGroup for the reaction at index *a_index *a_index*. */ + LUPI_HOST_DEVICE int numberOfReactions( ) const { return( (int) m_reactionCrossSections.size( ) ); } + /**< Returns the number of reactions stored in *this*. */ + + LUPI_HOST_DEVICE int thresholdOffset( int a_index ) const { return( m_reactionCrossSections[a_index]->offset( ) ); } + /**< Returns the offset for the cross section for the reaction with index *a_index*. */ + LUPI_HOST_DEVICE double threshold( int a_index ) const { return( m_reactionCrossSections[a_index]->threshold( ) ); } + + LUPI_HOST_DEVICE Vector &totalCrossSection( ) { return( m_totalCrossSection ); } /**< Returns a reference to member *m_totalCrossSection*. */ + LUPI_HOST_DEVICE double crossSection( int a_hashIndex, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double augmentedCrossSection( int a_hashIndex ) const { return( m_augmentedCrossSection[a_hashIndex] ); } + /**< Returns the value of the of the augmented cross section the reaction at index *a_index*. */ + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, int a_hashIndex, bool a_sampling = false ) const { + return( m_reactionCrossSections[a_reactionIndex]->crossSection( a_hashIndex, a_sampling ) ); } + /**< Returns the reaction's cross section for the reaction at index *a_reactionIndex* and multi-group index *a_hashIndex*. */ + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex ) const { return( m_depositionEnergy[a_hashIndex] ); } + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex ) const { return( m_depositionMomentum[a_hashIndex] ); } + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex ) const { return( m_productionEnergy[a_hashIndex] ); } + LUPI_HOST_DEVICE double gain( int a_hashIndex, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, int a_particleIntid ) const ; + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void write( FILE *a_file ) const ; +}; + +/* +============================================================ +============== HeatedCrossSectionsMultiGroup ============== +============================================================ +*/ +class HeatedCrossSectionsMultiGroup { + + private: + Vector m_temperatures; + Vector m_thresholds; + Vector m_multiGroupThresholdIndex; /**< This is the group where threshold starts, -1 otherwise. */ + Vector m_projectileMultiGroupBoundariesCollapsed; + Vector m_heatedCrossSections; + + public: + LUPI_HOST_DEVICE HeatedCrossSectionsMultiGroup( ); + LUPI_HOST_DEVICE ~HeatedCrossSectionsMultiGroup( ); + + LUPI_HOST_DEVICE double minimumEnergy( ) const { return( m_projectileMultiGroupBoundariesCollapsed[0] ); } + LUPI_HOST_DEVICE double maximumEnergy( ) const { return( m_projectileMultiGroupBoundariesCollapsed.back( ) ); } + LUPI_HOST_DEVICE Vector const &temperatures( ) const { return( m_temperatures ); } /**< Returns the value of the **m_temperatures**. */ + + LUPI_HOST void update( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::vector const &a_reactions, + std::vector const &a_orphanProducts, bool a_zeroReactions, GIDI::ExcludeReactionsSet const &a_reactionsToExclude ); + + LUPI_HOST_DEVICE int multiGroupThresholdIndex( std::size_t a_index ) const { return( m_multiGroupThresholdIndex[a_index] ); } + /**< Returns the threshold for the reaction at index *a_index*. */ + LUPI_HOST_DEVICE Vector const &projectileMultiGroupBoundariesCollapsed( ) const { return( m_projectileMultiGroupBoundariesCollapsed ); } + /**< Returns the value of the **m_projectileMultiGroupBoundariesCollapsed**. */ + LUPI_HOST_DEVICE Vector const &heatedCrossSections( ) const { return( m_heatedCrossSections ); } + + LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const { return( m_thresholds[a_index] ); } /**< Returns the threshold for the reaction at index *a_index*. */ + + LUPI_HOST_DEVICE double crossSection( int a_hashIndex, double a_temperature, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, std::size_t a_numberAllocated, + double *a_crossSectionVector ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, int a_hashIndex, double a_temperature, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, double a_temperature, double a_energy_in ) const ; + template + inline LUPI_HOST_DEVICE int sampleReaction( int a_hashIndex, double a_temperature, double a_energy_in, double a_crossSection, RNG &&rng) const; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, int a_particleIntid ) const ; + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void write( FILE *a_file, int a_temperatureIndex ) const ; + LUPI_HOST void print( ) const ; +}; + +/* +============================================================ +================== NuclideGammaBranchInfo ================== +============================================================ +*/ +class NuclideGammaBranchInfo { + + private: + double m_probability; /**< The probability that the level decays to state *m_residualStateIndex*. */ + double m_photonEmissionProbability; /**< The conditional probability the the decay emitted a photon. */ + double m_gammaEnergy; /**< The energy of the emitted photon. */ + int m_residualStateIndex; /**< The state the residual is left in after photon decay. */ + bool m_residualStateKindIsContinuum; /**< True if the kind of the residual state (i.e., nuclide) is 'continuum' and false otherwise. */ + + public: + LUPI_HOST_DEVICE NuclideGammaBranchInfo( ); + LUPI_HOST NuclideGammaBranchInfo( PoPI::NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo, + std::map &a_stateNamesToIndices, bool a_makePhotonEmissionProbabilitiesOne ); + + LUPI_HOST_DEVICE double probability( ) const { return( m_probability ); } /**< Returns the value of the **m_probability**. */ + LUPI_HOST_DEVICE double photonEmissionProbability( ) const { return( m_photonEmissionProbability ); } /**< Returns the value of the **m_photonEmissionProbability**. */ + LUPI_HOST_DEVICE double gammaEnergy( ) const { return( m_gammaEnergy ); } /**< Returns the value of the **m_gammaEnergy**. */ + LUPI_HOST_DEVICE int residualStateIndex( ) const { return( m_residualStateIndex ); } /**< Returns the value of the **m_residualStateIndex**. */ + LUPI_HOST_DEVICE bool residualStateKindIsContinuum( ) const { return( m_residualStateKindIsContinuum ); } /**< Returns the value of the **m_residualStateKindIsContinuum. **. */ + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +============== NuclideGammaBranchStateInfo ================= +============================================================ +*/ +class NuclideGammaBranchStateInfo { + + private: + char m_state[16]; /**< The GNDS PoPs id for the nuclide. */ + int m_intid; /**< The GNDS PoPs intid for the nuclide. */ + double m_nuclearLevelEnergy; /**< The nuclear level excitation energy of the level (state). */ + double m_nuclearLevelEnergyWidth; /**< This is 0.0 except for GRIN realized continuum levels where this is the energy width from this level to the next higher level. */ + double m_multiplicity; /**< The average multiplicity of photons emitted including the emission from sub-levels. */ + double m_averageGammaEnergy; /**< The average energy of photons emitted including the emission from sub-levels. */ + Vector m_branchIndices; /**< The list of indices into the ProtareSingle.m_branches member that this level decays to. */ + + public: + LUPI_HOST_DEVICE NuclideGammaBranchStateInfo( ); + LUPI_HOST NuclideGammaBranchStateInfo( PoPI::NuclideGammaBranchStateInfo const &a_nuclideGammaBranchingInfo, + std::vector &a_nuclideGammaBranchInfos, + std::map &a_stateNamesToIndices, bool a_makePhotonEmissionProbabilitiesOne, + bool a_ignoreNuclearLevelEnergy ); + + LUPI_HOST_DEVICE char const *state( ) const { return( m_state ); } /**< Returns a pointer to the **m_state** member. */ + LUPI_HOST_DEVICE int intid( ) const { return( m_intid ); } /**< Returns a pointer to the **m_intid** member. */ + LUPI_HOST_DEVICE double nuclearLevelEnergy( ) const { return( m_nuclearLevelEnergy ); } /**< Returns the value of the **m_nuclearLevelEnergy** member. */ + LUPI_HOST_DEVICE double nuclearLevelEnergyWidth( ) const { return( m_nuclearLevelEnergyWidth ); } + /**< Returns the value of the *m_nuclearLevelEnergyWidth* member. */ + LUPI_HOST_DEVICE double multiplicity( ) const { return( m_multiplicity ); } /**< Returns the value of the **m_multiplicity** member. */ + LUPI_HOST_DEVICE double averageGammaEnergy( ) const { return( m_averageGammaEnergy ); } /**< Returns the value of the **m_averageGammaEnergy** member. */ + LUPI_HOST_DEVICE Vector const &branchIndices( ) const { return( m_branchIndices ); } /**< Returns the value of the **m_branchIndices** member. */ + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST void print( ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + std::string const &a_energyFormat, std::string const &a_dFormat ) const ; +}; + +/* +============================================================ +=============== GRIN_levelsAndProbabilities ================ +============================================================ +*/ + +class GRIN_levelsAndProbabilities { + + public: + Vector m_levels; /**< The list of nuclide indices for the nuclides in *m_state* as stored in member ProtareSingle::m_nuclideGammaBranchStateInfos. */ + Vector m_summedProbabilities; /**< The running sum of the probability for choosing a state from m_states. */ + Vector m_isModelledLevel; /**< The entry for each item in *m_levels* which is true if the level is a modelled level and false otherwise. */ + + public: + LUPI_HOST_DEVICE GRIN_levelsAndProbabilities( ); + LUPI_HOST GRIN_levelsAndProbabilities( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + GIDI::Table::Table const &a_table, bool a_normalize ); + LUPI_HOST_DEVICE ~GRIN_levelsAndProbabilities( ); + + LUPI_HOST void set( std::vector const &a_levels, std::vector const &a_probabilities ); + + template + inline LUPI_HOST_DEVICE int sampleInelasticLevel( double a_energy, RNG && a_rng ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +================= GRIN_inelasticForEnergy ================== +============================================================ +*/ + +class GRIN_inelasticForEnergy { + + private: + Vector m_indices; + Vector m_thresholds; + GRIN_levelsAndProbabilities m_levelsAndProbabilities; + + public: + LUPI_HOST_DEVICE GRIN_inelasticForEnergy( ); + LUPI_HOST GRIN_inelasticForEnergy( SetupInfo &a_setupInfo, double a_projectileMass, double a_targetMass, + PoPI::Database const &a_pops, GIDI::GRIN::InelasticIncidentEnergy const *inelasticIncidentEnergy ); + LUPI_HOST_DEVICE ~GRIN_inelasticForEnergy( ); + + LUPI_HOST_DEVICE int sampleLevelIndex( double a_projectileEnergy, double a_random ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== GRIN_inelastic ====================== +============================================================ +*/ + +class GRIN_inelastic { + + private: + int m_neutronIndex; + int m_neutronUserParticleIndex; + double m_neutronMass; + + int m_targetIntid; + int m_targetIndex; + int m_targetUserParticleIndex; + double m_targetMass; + + Vector m_energies; + Vector m_inelasticForEnergy; + + public: + LUPI_HOST_DEVICE GRIN_inelastic( ); + LUPI_HOST GRIN_inelastic( SetupInfo &a_setupInfo, GIDI::GRIN::GRIN_continuumGammas const &GRIN_continuumGammas ); + LUPI_HOST_DEVICE ~GRIN_inelastic( ); + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + + template + inline LUPI_HOST_DEVICE bool sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +================= GRIN_captureToCompound ================ +============================================================ +*/ + +class GRIN_captureToCompound { + + private: + int m_index; /**< This is the index into ProtareSingle.m_nuclideGammaBranchStateInfos of the compound level forms by the capture. */ + GRIN_levelsAndProbabilities m_continuumIndices; /**< This is the list of the levels the compound can decay to minus the known levels. */ + + public: + LUPI_HOST_DEVICE GRIN_captureToCompound( ); + LUPI_HOST GRIN_captureToCompound( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, std::string a_compoundId ); + LUPI_HOST_DEVICE ~GRIN_captureToCompound( ); + + LUPI_HOST_DEVICE int index( ) const { return( m_index ); } + template + inline LUPI_HOST_DEVICE int sampleCaptureLevel( ProtareSingle const *a_protare, double a_energy, RNG && a_rng, bool a_checkEnergy ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=============== GRIN_captureLevelProbability =============== +============================================================ +*/ + +/* +* The m_capturePrimaryToContinua are the modelled primary capture nuclides needed when one of the nuclide in +* *m_levelsAndProbabilities* is not selected. The nuclide in *m_capturePrimaryToContinua* whose nuclear level +* energy as found in *m_nuclearLevelEnergies* is closest but below the * neutron separation energy plus the +* kinetic energy in the com frame is to be used when a nuclide in *m_levelsAndProbabilities* is not selected. +* the ints in *m_capturePrimaryToContinua* are indicies into ProtareSingle.m_nuclideGammaBranchStateInfos. +*/ + +class GRIN_captureLevelProbability { + + private: + GRIN_levelsAndProbabilities m_knownLevelsAndProbabilities; /**< These are the known primary capture nuclide as probabilites. The probabilites do not sum to one since not all are know. */ + Vector m_captureToCompounds; /**< This is a list of nuclides that have the same spin/parity as the input channel and the needed nuclear excitation level. */ + + public: + LUPI_HOST_DEVICE GRIN_captureLevelProbability( ); + LUPI_HOST GRIN_captureLevelProbability( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + GIDI::GRIN::CaptureLevelProbability const *a_captureLevelProbability ); + LUPI_HOST_DEVICE ~GRIN_captureLevelProbability( ); + + template + inline LUPI_HOST_DEVICE int sampleCaptureLevel( ProtareSingle const *a_protare, double a_energy, RNG && a_rng ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== GRIN_capture ======================== +============================================================ +*/ + +class GRIN_capture { + + private: + double m_captureNeutronSeparationEnergy; /**< For capture, the neutron separation energy as needed to emit primary gammas. */ + Vector m_summedProbabilities; /**< The running sum of the probabilites for the *m_captureLevelProbabilities* member data. */ + Vector m_captureLevelProbabilities; /**< The list of capture levels with probabilites. */ + int m_residualIntid; /**< The intid of the heavy residual particle. */ + int m_residualIndex; /**< The PoPI index of the heavy residual particle. */ + int m_residualUserIndex; /**< The user index of the heavy residual particle. */ + double m_residualMass; /**< The mass if the heavy residual particle. */ + + public: + LUPI_HOST_DEVICE GRIN_capture( ); + LUPI_HOST GRIN_capture( SetupInfo &a_setupInfo, GIDI::GRIN::GRIN_continuumGammas const &GRIN_continuumGammas ); + LUPI_HOST_DEVICE ~GRIN_capture( ); + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + template + inline LUPI_HOST_DEVICE bool sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================= Product ========================== +============================================================ +*/ +class Product { + + private: + String m_ID; + int m_intid; + int m_index; + int m_userParticleIndex; + String m_label; + bool m_isCompleteParticle; + double m_mass; + double m_excitationEnergy; + TwoBodyOrder m_twoBodyOrder; + int m_initialStateIndex; /**< If the product has branching photons, then this is the state index to start the branching. */ + Functions::Function1d *m_multiplicity; + Distributions::Distribution *m_distribution; +// still need *m_averageEnergy *m_averageMomentum; + + OutputChannel *m_outputChannel; + + public: + LUPI_HOST_DEVICE Product( ); + LUPI_HOST Product( GIDI::Product const *a_product, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, + bool a_isFission ); + LUPI_HOST Product( PoPI::Database const &a_pop, std::string const &a_ID, std::string const &a_label ); + LUPI_HOST_DEVICE ~Product( ); + + LUPI_HOST String const &ID( ) const { return( m_ID ); } /**< Returns a const reference to the *m_ID* member. */ + LUPI_HOST_DEVICE int intid( ) const { return( m_intid); } /**< Returns the value of the *m_intid* member. */ + LUPI_HOST_DEVICE int index( ) const { return( m_index); } /**< Returns the value of the *m_index* member. */ + LUPI_HOST_DEVICE int userParticleIndex( ) const { return( m_userParticleIndex ); } /**< Returns the value of the **m_userParticleIndex**. */ + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + LUPI_HOST void setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ); + LUPI_HOST_DEVICE String label( ) const { return( m_label ); } /**< Returns the value of the **m_label**. */ + LUPI_HOST_DEVICE bool isCompleteParticle( ) const { return( m_isCompleteParticle ); } /**< Returns the value of the **m_isCompleteParticle**. */ + LUPI_HOST_DEVICE double mass( ) const { return( m_mass ); } /**< Returns the value of the **m_mass**. */ + LUPI_HOST_DEVICE double excitationEnergy( ) const { return( m_excitationEnergy ); } /**< Returns the value of the **m_excitationEnergy**. */ + LUPI_HOST_DEVICE TwoBodyOrder twoBodyOrder( ) const { return( m_twoBodyOrder ); } /**< Returns the value of the **m_twoBodyOrder**. */ + LUPI_HOST_DEVICE double finalQ( double a_x1 ) const ; + LUPI_HOST_DEVICE bool hasFission( ) const ; + +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Functions::Function1d const *multiplicity( ) const { return( m_multiplicity ); } /**< Returns the value of the **m_multiplicity**. */ + LUPI_HOST void setMultiplicity( Functions::Function1d *a_multiplicity ) { m_multiplicity = a_multiplicity; } + LUPI_HOST_DEVICE double productAverageMultiplicity( int a_index, double a_projectileEnergy ) const ; + LUPI_HOST_DEVICE double productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const ; +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Distributions::Distribution const *distribution( ) const { return( m_distribution ); } /**< Returns the value of the **m_distribution**. */ + LUPI_HOST_DEVICE Distributions::Distribution *distribution( ) { return( m_distribution ); } /**< Returns the value of the **m_distribution**. */ + LUPI_HOST void distribution( Distributions::Distribution *a_distribution ) { m_distribution = a_distribution; } +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE OutputChannel *outputChannel( ) { return( m_outputChannel ); } /**< Returns the value of the **m_outputChannel**. */ + + template + inline LUPI_HOST_DEVICE void sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const ; + template + inline LUPI_HOST_DEVICE void sampleFinalState( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const ; + template + inline LUPI_HOST_DEVICE void angleBiasing( Reaction const *a_reaction, int a_pid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_probability, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const ; + template + inline LUPI_HOST_DEVICE void angleBiasingViaIntid( Reaction const *a_reaction, int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_probability, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== DelayedNeutron ====================== +============================================================ +*/ +class DelayedNeutron { + + private: + int m_delayedNeutronIndex; /**< If this is a delayed fission neutron, this is its index. */ + double m_rate; /**< The GNDS rate for the delayed neutron. */ + Product m_product; /**< The GNDS <**product**> node. */ + + public: + LUPI_HOST_DEVICE DelayedNeutron( ); + LUPI_HOST DelayedNeutron( int a_index, GIDI::DelayedNeutron const *a_delayedNeutron, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles ); + LUPI_HOST_DEVICE ~DelayedNeutron( ); + + LUPI_HOST_DEVICE int delayedNeutronIndex( ) const { return( m_delayedNeutronIndex ); } + LUPI_HOST_DEVICE double rate( ) const { return( m_rate ); } + LUPI_HOST_DEVICE Product const &product( ) const { return( m_product ); } + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================= OutputChannel ====================== +============================================================ +*/ +class OutputChannel { + + private: + ChannelType m_channelType; + int m_neutronIndex; /**< The index of the neutron in the use PoPs database. */ + bool m_isFission; + bool m_hasFinalStatePhotons; /**< If **true**, *this* channel has a photon with finalState attribute. */ + + Functions::Function1d_d1 *m_Q; /**< The Q-function for the output channel. Note, this is currently always the *evaluated* form even when running with multi-group data. */ + Vector m_products; + Functions::Function1d *m_totalDelayedNeutronMultiplicity; + Vector m_delayedNeutrons; + + public: + LUPI_HOST_DEVICE OutputChannel( ); + LUPI_HOST OutputChannel( GIDI::OutputChannel const *a_outputChannel, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles ); + LUPI_HOST_DEVICE ~OutputChannel( ); + + LUPI_HOST_DEVICE Product *operator[]( std::size_t a_index ) { return( m_products[a_index] ); } /**< Returns a pointer to the product at index *a_index*. */ + + LUPI_HOST_DEVICE bool isTwoBody( ) const { return( m_channelType == ChannelType::twoBody ); } /**< Returns true if output channel is two-body and false otherwise. */ + LUPI_HOST_DEVICE double finalQ( double a_x1 ) const ; + LUPI_HOST_DEVICE bool isFission( ) const { return( m_isFission ); } /**< Returns the value of the **m_isFission**. */ + LUPI_HOST_DEVICE bool hasFission( ) const ; +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Functions::Function1d_d1 *Q( ) { return( m_Q ); } /**< Returns the pointer of the **m_Q** member. */ + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + LUPI_HOST void setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ); +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Vector const &products( ) const { return( m_products ); } /**< Returns the value of the **m_products**. */ + + Vector delayedNeutrons( ) const { return( m_delayedNeutrons ); } + LUPI_HOST_DEVICE DelayedNeutron const *delayedNeutron( int a_index ) const { return( m_delayedNeutrons[a_index] ); } + + LUPI_HOST void moveProductsEtAlToReaction( std::vector &a_products, Functions::Function1d **a_totalDelayedNeutronMultiplicity, + std::vector &a_delayedNeutrons, std::vector &a_Qs ); +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + LUPI_HOST void addOrphanProductToProductList( std::vector &a_associatedOrphanProducts ) const ; + LUPI_HOST_DEVICE void addOrphanProductToProductList( Vector &a_associatedOrphanProducts ) const ; +#endif + + LUPI_HOST_DEVICE double productAverageMultiplicity( int a_index, double a_projectileEnergy ) const ; + LUPI_HOST_DEVICE double productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const ; + +template + inline LUPI_HOST_DEVICE void sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const; + template + inline LUPI_HOST_DEVICE void angleBiasing( Reaction const *a_reaction, int a_pid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_probability, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const ; + template + inline LUPI_HOST_DEVICE void angleBiasingViaIntid( Reaction const *a_reaction, int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_probability, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================= Reaction ========================= +============================================================ +*/ +class Reaction { + + private: + ProtareSingle *m_protareSingle; /**< The ProtareSingle this reaction resides in. */ + int m_reactionIndex; /**< The index of the reaction in the ProtareSingle. */ + int m_GIDI_reactionIndex; /**< The index of the reaction in the GIDI::ProtareSingle. */ + String m_label; /**< The **GNDS** label for the reaction. */ + int m_ENDF_MT; /**< The ENDF MT value for the reaction. */ + int m_ENDL_C; /**< The ENDL C value for the reaction. */ + int m_ENDL_S; /**< The ENDL S value for the reaction. */ + int m_initialStateIndex; /**< If not -1, then reaction contains a branching gamma data with this index for the data in m_nuclideGammaBranchStateInfos member of its **ProtareSingle** instance. */ + int m_neutronIndex; /**< The index of the neutron in the use PoPs database. */ + bool m_hasFission; /**< Is *true* if the reaction is a fission reaction and *false* otherwise. */ + double m_projectileMass; /**< The mass of the projectile. */ + double m_targetMass; /**< The mass of the target. */ + double m_crossSectionThreshold; /**< The threshold for the reaction. */ + double m_twoBodyThreshold; /**< This is the T_1 value needed to do two-body kinematics. */ + bool m_upscatterModelASupported; + bool m_hasFinalStatePhotons; /**< If **true**, *this* reaction has a photon with finalState attribute. */ + int m_fissionResiduaIntid; /**< The intid of the special ENDL 99120 or 99125 fission residual. */ + int m_fissionResiduaIndex; /**< The index of the special ENDL 99120 or 99125 fission residual. */ + int m_fissionResiduaUserIndex; /**< The user index of the special ENDL 99120 or 99125 fission residual. */ + GIDI::Construction::FissionResiduals m_fissionResiduals; /**< This member specifies what fission redisual products will be added to the list of products produced in a fission reaction. */ + double m_fissionResidualMass; /**< The mass of the special ENDL 99120 or 99125 fission residual. */ + Vector m_upscatterModelACrossSection; /**< The multi-group cross section to use for upscatter model A. */ + + Vector m_productIntids; /**< The list of all products *this* reaction can product by their intid. */ + Vector m_productIndices; /**< The list of all products *this* reaction can product by their index. */ + Vector m_userProductIndices; /**< The list of all products *this* reaction can product as user indices. */ + Vector m_productMultiplicities; /**< The list of all multiplicities for each product in *m_productIntids* . */ + Vector m_productIntidsTransportable; /**< The list of all transportabls products *this* reaction can product by their intid. */ + Vector m_productIndicesTransportable; /**< The list of all transportabls products *this* reaction can product by their index. */ + Vector m_userProductIndicesTransportable; /**< The list of all transportabls products *this* reaction can product as user indices. */ + + Vector m_Qs; /**< A list of Q-functions that is used when the C macro MCGIDI_USE_OUTPUT is defined. */ + Vector m_products; /**< A list of all transporting products directly or nested in **m_outputChannel** that is used instead of having **m_outputChannel** loop of all transporting products if the C macro MCGIDI_USE_OUTPUT_CHANNEL is not defined. */ + Functions::Function1d *m_totalDelayedNeutronMultiplicity; + Vector m_delayedNeutrons; /**< A list of all delayedNeutrons that can be used instead of having m_outputChannel loop of all transporting products. For *m_products* for more details. */ + /**< The total delayed neutron multiplicity used when the C macro MCGIDI_USE_OUTPUT is defined. */ +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + OutputChannel *m_outputChannel; /**< The output channel for this reaction. Only used if the C macro MCGIDI_USE_OUTPUT is defined. */ +#endif + Vector m_associatedOrphanProductIndices; /**< The indices in the Protare's m_orphanProducts member for the orphanProducts associated with this reaction. */ + Vector m_associatedOrphanProducts; /**< The list of products from the orphanProduct reaction. */ /* Do not delete entries as owned by orphanProduct reaction. */ +// Still need m_availableEnergy and m_availableMomentum. + +// GRIN specials: new non-GNDS GRIN stuff. + bool m_GRIN_specialSampleProducts; /**< This will be true if sampling products with GRIN special inelastic or capture data. */ + double m_GRIN_inelasticThreshold; /**< For inelastic, the a_projectileEnergy must be greater than this value + or use standard product sampling. This is needed, for example, as the Fe56 MT 91 cross section + starts below the MT 89 cross section. Ergo, below the threshold for the nuclear level energy + for the first simulated Fe56 nuclear level. */ + double m_GRIN_maximumCaptureIncidentEnergy; /**< For capture, the projectile energy must be less thans this value or use standard product sampling. */ + GRIN_inelastic *m_GRIN_inelastic; /**< A nullptr or a pointer to an instance of GIND_continuumInelatic (see below). */ + GRIN_capture *m_GRIN_capture; /**< A nullptr or a pointer to an instance of GIND_capture (see below). */ + + public: + LUPI_HOST_DEVICE Reaction( ); + LUPI_HOST Reaction( GIDI::Reaction const &a_reaction, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos ); + LUPI_HOST_DEVICE ~Reaction( ); + + inline LUPI_HOST_DEVICE void updateProtareSingleInfo( ProtareSingle *a_protareSingle, int a_reactionIndex ) { + m_protareSingle = a_protareSingle; + m_reactionIndex = a_reactionIndex; + } + LUPI_HOST_DEVICE ProtareSingle const *protareSingle( ) const { return( m_protareSingle ); } /**< Returns the value of the **m_protareSingle**. */ + LUPI_HOST_DEVICE int reactionIndex( ) const { return( m_reactionIndex ); } /**< Returns the value of the **m_reactionIndex**. */ + LUPI_HOST_DEVICE int GIDI_reactionIndex( ) const { return( m_GIDI_reactionIndex ); } /**< Returns the value of the **m_GIDI_reactionIndex** member. */ + LUPI_HOST_DEVICE String const &label( ) const { return( m_label ); } /**< Returns the value of the **m_label**. */ + LUPI_HOST_DEVICE int ENDF_MT( ) const { return( m_ENDF_MT ); } /**< Returns the value of the **m_ENDF_MT**. */ + LUPI_HOST_DEVICE int ENDL_C( ) const { return( m_ENDL_C ); } /**< Returns the value of the **m_ENDL_C**. */ + LUPI_HOST_DEVICE int ENDL_S( ) const { return( m_ENDL_S ); } /**< Returns the value of the **m_ENDL_S**. */ + LUPI_HOST_DEVICE int initialStateIndex( ) const { return( m_initialStateIndex ); } /**< Returns the value of the **m_initialStateIndex** member. */ + LUPI_HOST_DEVICE double finalQ( double a_energy ) const ; + LUPI_HOST_DEVICE bool hasFission( ) const { return( m_hasFission ); } /**< Returns the value of the **m_hasFission**. */ + LUPI_HOST_DEVICE double projectileMass( ) const { return( m_projectileMass ); } /**< Returns the value of the **m_projectileMass**. */ + LUPI_HOST_DEVICE double targetMass( ) const { return( m_targetMass ); } /**< Returns the value of the **m_targetMass**. */ + LUPI_HOST_DEVICE double crossSectionThreshold( ) const { return( m_crossSectionThreshold ); } /**< Returns the value of the **m_crossSectionThreshold**. */ + LUPI_HOST_DEVICE double twoBodyThreshold( ) const { return( m_twoBodyThreshold ); } /**< Returns the value of the *m_twoBodyThreshold* member. */ + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const ; + LUPI_HOST GIDI::Functions::XYs1d crossSectionAsGIDI_XYs1d( double a_temperature ) const ; + + LUPI_HOST_DEVICE Vector const &productIntids( ) const { return( m_productIntids ); } + LUPI_HOST_DEVICE Vector const &productIndices( ) const { return( m_productIndices ); } /**< Returns a const reference to the *m_productIntids* member. */ + LUPI_HOST_DEVICE Vector const &userProductIndices( ) const { return( m_userProductIndices ); } /**< Returns a const reference to the *m_productIndices* member. */ + LUPI_HOST_DEVICE MCGIDI_VectorSizeType numberOfProducts( ) const { return( m_products.size( ) ); } /**< Returns the number of products in the **m_products** member. */ + LUPI_HOST_DEVICE Product const *product( int a_index ) const { return( m_products[a_index] ); } + LUPI_HOST_DEVICE int productMultiplicity( int a_index ) const ; + LUPI_HOST_DEVICE int productMultiplicityViaIntid( int a_intid ) const ; + LUPI_HOST_DEVICE int productMultiplicities( int a_index ) const { + LUPI::deprecatedFunction( "MCGIDI::Reaction::productMultiplicities", "MCGIDI::Reaction::productMultiplicity", "" ); + return( productMultiplicity( a_index ) ); } /**< This method is deprecated. Please use **productMultiplicity** instead. */ + LUPI_HOST_DEVICE double productAverageMultiplicity( int a_index, double a_projectileEnergy ) const ; + LUPI_HOST_DEVICE double productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const ; + LUPI_HOST_DEVICE Vector const &productIntidsTransportable( ) const { return( m_productIntidsTransportable ); } + /**< Returns a const reference to the *m_productIntidsTransportable* member. */ + LUPI_HOST_DEVICE Vector const &productIndicesTransportable( ) const { return( m_productIndicesTransportable ); } + /**< Returns a const reference to the *m_productIndicesTransportable* member. */ + LUPI_HOST_DEVICE Vector const &userProductIndicesTransportable( ) const { return( m_userProductIndicesTransportable ); } + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + LUPI_HOST_DEVICE OutputChannel const *outputChannel( ) const { return( m_outputChannel ); } /**< Returns the value of the **m_outputChannel**. */ +#endif + LUPI_HOST_DEVICE Vector associatedOrphanProductIndices( ) const { return( m_associatedOrphanProductIndices ); } /**< Returns the value of the **m_associatedOrphanProductIndicex** member. */ + LUPI_HOST void addOrphanProductToProductList( std::vector &a_associatedOrphanProducts ) const ; + LUPI_HOST_DEVICE void addOrphanProductToProductList( Vector &a_associatedOrphanProducts ) const ; + LUPI_HOST_DEVICE void addOrphanProductToProductList( Vector &a_orphanProducts ) ; + LUPI_HOST void setOrphanProductData( std::vector const &a_associatedOrphanProductIndcies, + std::vector const &a_associatedOrphanProducts ); + LUPI_HOST_DEVICE bool upscatterModelASupported( ) const { return( m_upscatterModelASupported ); } + LUPI_HOST_DEVICE Vector const &upscatterModelACrossSection( ) const { return( m_upscatterModelACrossSection ); } + /**< Returns the value of the **m_upscatterModelACrossSection**. */ + + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + LUPI_HOST void setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ); + + template + inline LUPI_HOST_DEVICE void sampleProducts( Protare const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products, bool a_checkOrphanProducts = true ) const ; + template + inline LUPI_HOST_DEVICE static void sampleNullProducts( Protare const &a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ); + template + inline LUPI_HOST_DEVICE double angleBiasing( int a_pid, double a_temperature, double a_energy_in, double a_mu_lab, double &a_energy_out, + RNG && a_rng, double *a_cumulative_weight = nullptr, bool a_checkOrphanProducts = true ) const ; + template + inline LUPI_HOST_DEVICE double angleBiasingViaIntid( int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, double &a_energy_out, + RNG && a_rng, double *a_cumulative_weight = nullptr, bool a_checkOrphanProducts = true ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== Protare ========================= +============================================================ +*/ +class Protare { + + private: + ProtareType m_protareType; /**< The type of protare *this* is. */ + + String m_projectileID; /**< The PoPs id of the projectile. */ + int m_projectileIntid; /**< The PoPs intid of the projectile. */ + int m_projectileIndex; /**< The PoPs database index of the projectile. */ + int m_projectileUserIndex; /**< The projectile's index as specified by the user. */ + double m_projectileMass; /**< The mass of the projectile. */ + double m_projectileExcitationEnergy; /**< The nuclear excitation of the projectile. */ + + String m_targetID; /**< The PoPs intid of the target. */ + int m_targetIntid; /**< The PoPs index of the target. */ + int m_targetIndex; /**< The PoPs database index of the target. */ + int m_targetUserIndex; /**< The target's index as specified by the user. */ + double m_targetMass; /**< The mass of the target. */ + double m_targetExcitationEnergy; /**< The nuclear excitation of the target. */ + + int m_neutronIndex; /**< The neutron particle index from the user's pops database. */ + int m_userNeutronIndex; /**< The neutron particle index defined by the user. */ + int m_photonIndex; /**< The photon particle index from the user's pops database. */ + int m_userPhotonIndex; /**< The photon particle index defined by the user. */ + + String m_evaluation; /**< The evaluation string for the Protare. */ + GIDI::Frame m_projectileFrame; /**< The frame the projectile data are given in. */ + + Vector m_productIntids; /**< The list of all products *this* protare can product by their intid. */ + Vector m_productIndices; /**< The list of all products *this* reaction can product by their index. */ + Vector m_userProductIndices; /**< The list of all products *this* reaction can product as user indices. */ + Vector m_productIntidsTransportable; /**< The list of all transportabls products *this* protare can product by their intid. */ + Vector m_productIndicesTransportable; /**< The list of all transportabls products *this* reaction can product by their index. */ + Vector m_userProductIndicesTransportable; /**< The list of all transportabls products *this* reaction can product as user indices. */ + + bool m_isTNSL_ProtareSingle; /**< If *this* is a ProtareSingle instance with TNSL data *true* and otherwise *false*. */ + + LUPI_HOST void productIntidsAndIndices( std::set const &a_intids, std::set const &a_transportableIntids, + std::set const &a_indices, std::set const &a_transportableIndices ); + + public: + LUPI_HOST_DEVICE Protare( ProtareType a_protareType ); + LUPI_HOST Protare( ProtareType a_protareType, GIDI::Protare const &a_protare, Transporting::MC const &a_settings, PoPI::Database const &a_pops ); + virtual LUPI_HOST_DEVICE ~Protare( ); + + LUPI_HOST_DEVICE ProtareType protareType( ) const { return( m_protareType ); } /**< Returns the value of the **m_protareType** member. */ + + LUPI_HOST_DEVICE String const &projectileID( ) const { return( m_projectileID ); } /**< Returns the value of the **m_projectileID** member. */ + LUPI_HOST_DEVICE int projectileIntid( ) const { return( m_projectileIntid ); } /**< Returns the value of the **m_projectileIntid** member. */ + LUPI_HOST_DEVICE int projectileIndex( ) const { return( m_projectileIndex ); } /**< Returns the value of the **m_projectileIndex** member. */ + LUPI_HOST_DEVICE int projectileUserIndex( ) const { return( m_projectileUserIndex ); } /**< Returns the value of the **m_projectileUserIndex** member. */ + LUPI_HOST_DEVICE double projectileMass( ) const { return( m_projectileMass ); } /**< Returns the value of the **m_projectileMass** member. */ + LUPI_HOST_DEVICE double projectileExcitationEnergy( ) const { return( m_projectileExcitationEnergy ); } /**< Returns the value of the **m_projectileExcitationEnergy** member. */ + + LUPI_HOST_DEVICE String const &targetID( ) const { return( m_targetID ); } /**< Returns the value of the **m_targetID** member. */ + LUPI_HOST_DEVICE int targetIntid( ) const { return( m_targetIntid ); } /**< Returns the value of the **m_targetIntid** member. */ + LUPI_HOST_DEVICE int targetIndex( ) const { return( m_targetIndex ); } /**< Returns the value of the **m_targetIndex** member. */ + LUPI_HOST_DEVICE int targetUserIndex( ) const { return( m_targetUserIndex ); } /**< Returns the value of the **m_targetUserIndex** member. */ + LUPI_HOST_DEVICE double targetMass( ) const { return( m_targetMass ); } /**< Returns the value of the **m_targetMass** member. */ + LUPI_HOST_DEVICE double targetExcitationEnergy( ) const { return( m_targetExcitationEnergy ); } /**< Returns the value of the **m_targetExcitationEnergy** member. */ + + LUPI_HOST_DEVICE int photonIndex( ) const { return( m_photonIndex ); } /**< Returns the value of the **m_photonIndex** member. */ + LUPI_HOST_DEVICE int userPhotonIndex( ) const { return( m_userPhotonIndex ); } /**< Returns the value of the **m_userPhotonIndex** member. */ + LUPI_HOST_DEVICE String evaluation( ) const { return( m_evaluation ); } /**< Returns the value of the **m_evaluation** member. */ + LUPI_HOST GIDI::Frame projectileFrame( ) const { return( m_projectileFrame ); } /**< Returns the value of the **m_projectileFrame** member. */ + + LUPI_HOST Vector const &productIntids( bool a_transportablesOnly ) const ; + LUPI_HOST Vector const &productIndices( bool a_transportablesOnly ) const ; + LUPI_HOST Vector const &userProductIndices( bool a_transportablesOnly ) const ; + LUPI_HOST void setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ); + + LUPI_HOST_DEVICE bool isTNSL_ProtareSingle( ) const { return( m_isTNSL_ProtareSingle ); } /**< Returns the value of the **m_isTNSL_ProtareSingle** member. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE std::size_t numberOfProtares( ) const MCGIDI_TRUE_VIRTUAL; /**< Returns the number of protares contained in *this*. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE ProtareSingle const *protare( std::size_t a_index ) const MCGIDI_TRUE_VIRTUAL; /**< Returns the **a_index** - 1 Protare contained in *this*. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE ProtareSingle *protare( std::size_t a_index ) MCGIDI_TRUE_VIRTUAL; /**< Returns the **a_index** - 1 Protare contained in *this*. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE ProtareSingle const *protareWithReaction( int a_index ) const MCGIDI_TRUE_VIRTUAL; /**< Returns the *ProtareSingle* that contains the (*a_index* - 1) reaction. */ + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double minimumEnergy( ) const MCGIDI_TRUE_VIRTUAL; /**< Returns the minimum cross section domain. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double maximumEnergy( ) const MCGIDI_TRUE_VIRTUAL ; /**< Returns the maximum cross section domain. */ + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE Vector temperatures( std::size_t a_index = 0 ) const MCGIDI_TRUE_VIRTUAL ; /**< Returns the list of temperatures for the requested ProtareSingle. */ + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST Vector const &projectileMultiGroupBoundaries( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST Vector const &projectileMultiGroupBoundariesCollapsed( ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE std::size_t numberOfReactions( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE Reaction const *reaction( int a_index ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE std::size_t numberOfOrphanProducts( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE Reaction const *orphanProduct( int a_index ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE bool hasFission( ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE bool hasIncoherentDoppler( ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE int URR_index( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double URR_domainMin( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double URR_domainMax( ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const MCGIDI_TRUE_VIRTUAL ; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, + int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, + double *a_crossSectionVector ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, + double a_temperature, double a_energy, bool a_sampling = false ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, + double a_temperature, double a_energy ) const MCGIDI_TRUE_VIRTUAL; + template + inline MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE int sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, + double a_temperature, double a_energy, double a_crossSection, RNG && a_rng) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const MCGIDI_TRUE_VIRTUAL; + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const MCGIDI_TRUE_VIRTUAL; + + MCGIDI_VIRTUAL_FUNCTION LUPI_HOST_DEVICE Vector const &upscatterModelAGroupVelocities( ) const MCGIDI_TRUE_VIRTUAL; + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE void serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE void serializeCommon( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE long sizeOf( ) const ; + LUPI_HOST_DEVICE long memorySize( ); + LUPI_HOST_DEVICE void incrementMemorySize( long &a_totalMemory, long &a_sharedMemory ); + + friend ProtareSingle; + friend ProtareComposite; + friend ProtareTNSL; +}; + +/* +============================================================ +====================== ProtareSingle ======================= +============================================================ +*/ +class ProtareSingle : public Protare { + + private: + String m_interaction; /**< The protare's interaction string. */ + int m_URR_index; /**< The index of the protare in the URR_protareInfos list. If negative, not in list. */ + bool m_hasURR_probabilityTables; /**< *true* if URR probability tables present and *false* otherwise. */ + double m_URR_domainMin; /**< If URR probability tables present this is the minimum of the projectile energy domain for the tables. */ + double m_URR_domainMax; /**< If URR probability tables present this is the maximum of the projectile energy domain for the tables. */ + Vector m_projectileMultiGroupBoundaries; /**< The multi-group boundaries for the projectile. Only used if m_crossSectionLookupMode and/or m_other1dDataLookupMode is multiGroup. */ + Vector m_projectileMultiGroupBoundariesCollapsed; /**< The collased, multi-group boundaries for the projectile. Only used if m_crossSectionLookupMode and/or m_other1dDataLookupMode is multiGroup. */ + Vector m_upscatterModelAGroupVelocities; /**< The speed of the projectile at each multi-group boundary. Need by upscatter model A. */ + + Vector m_reactions; /**< The list of reactions. */ + Vector m_orphanProducts; /**< The list of orphan products. */ + bool m_isPhotoAtomic; /**< *true* if photo-atomic protare and false otherwise. */ + bool m_continuousEnergy; /**< If *true*, protare has continuous energy cross sections; otherwise, multi-group cross sections. */ + bool m_fixedGrid; /**< If *true*, continuous energy cross sections are fixed grid. */ + HeatedCrossSectionsContinuousEnergy m_heatedCrossSections; /**< Stores all cross section data for total and all reactions for all requested temperatures. */ + HeatedCrossSectionsMultiGroup m_heatedMultigroupCrossSections; /**< Stores all multi-group cross section data for total and all reactions for all requested temperatures. */ + + Vector m_nuclideGammaBranchStateInfos; /**< List of all gamma branches for a nuclide. */ + Vector m_branches; /**< Condensed data on a nuclide's gamma branch including the gamma's energy, probability and the nuclide's residual state. */ + + LUPI_HOST void setupNuclideGammaBranchStateInfos( SetupInfo &a_setupInfo, GIDI::ProtareSingle const &a_protare, + bool a_makePhotonEmissionProbabilitiesOne, bool a_zeroNuclearLevelEnergyWidth ); + + public: + LUPI_HOST_DEVICE ProtareSingle( ); + LUPI_HOST ProtareSingle( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, + std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset = 0, bool a_allowFixedGrid = true ); + LUPI_HOST_DEVICE ~ProtareSingle( ); + + LUPI_HOST_DEVICE bool isPhotoAtomic( ) const { return( m_isPhotoAtomic ); } + LUPI_HOST_DEVICE bool continuousEnergy( ) const { return( m_continuousEnergy ); } + LUPI_HOST_DEVICE bool fixedGrid( ) const { return( m_fixedGrid ); } + LUPI_HOST_DEVICE HeatedCrossSectionsContinuousEnergy const &heatedCrossSections( ) const { return( m_heatedCrossSections ); } /**< Returns a reference to the **m_heatedCrossSections** member. */ + LUPI_HOST_DEVICE HeatedCrossSectionsContinuousEnergy &heatedCrossSections( ) { return( m_heatedCrossSections ); } /**< Returns a reference to the **m_heatedCrossSections** member. */ + LUPI_HOST_DEVICE HeatedCrossSectionsMultiGroup const &heatedMultigroupCrossSections( ) const { return( m_heatedMultigroupCrossSections ); } /**< Returns a reference to the **m_heatedMultigroupCrossSections** member. */ + LUPI_HOST_DEVICE HeatedCrossSectionsMultiGroup &heatedMultigroupCrossSections( ) { return( m_heatedMultigroupCrossSections ); } /**< Returns a reference to the **m_heatedMultigroupCrossSections** member. */ + + LUPI_HOST_DEVICE const Vector &nuclideGammaBranchStateInfos( ) const { return( m_nuclideGammaBranchStateInfos ); } + /**< Returns a reference to the **m_nuclideGammaBranchStateInfos** member. */ + LUPI_HOST_DEVICE const Vector &branches( ) const { return( m_branches ); } + /**< Returns a reference to the **m_branches** member. */ + +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Vector const &reactions( ) const { return( m_reactions ); } /**< Returns the value of the **m_reactions** member. */ +// FIXME (1) see FIXME (1) in MC class. + LUPI_HOST_DEVICE Vector const &orphanProducts( ) const { return( m_orphanProducts ); } /**< Returns the value of the **m_orphanProducts** member. */ + + template + inline LUPI_HOST_DEVICE void sampleBranchingGammas( Sampling::Input &a_input, double a_projectileEnergy, int a_initialStateIndex, + RNG && a_rng, PUSHBACK && push_back, Sampling::ProductHandler &a_products ) const ; + LUPI_HOST void setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ); + +// The rest are virtual methods defined in the Protare class. + + LUPI_HOST_DEVICE std::size_t numberOfProtares( ) const { return( 1 ); } /**< Returns the number of protares contained in *this*. */ + LUPI_HOST_DEVICE ProtareSingle const *protare( std::size_t a_index ) const ; + LUPI_HOST_DEVICE ProtareSingle *protare( std::size_t a_index ); + LUPI_HOST_DEVICE ProtareSingle const *protareWithReaction( int a_index ) const ; + + LUPI_HOST_DEVICE double minimumEnergy( ) const { + if( m_continuousEnergy ) return( m_heatedCrossSections.minimumEnergy( ) ); + return( m_heatedMultigroupCrossSections.minimumEnergy( ) ); } /**< Returns the minimum cross section domain. */ + LUPI_HOST_DEVICE double maximumEnergy( ) const { + if( m_continuousEnergy ) return( m_heatedCrossSections.maximumEnergy( ) ); + return( m_heatedMultigroupCrossSections.maximumEnergy( ) ); } /**< Returns the maximum cross section domain. */ + LUPI_HOST_DEVICE Vector temperatures( std::size_t a_index = 0 ) const ; + + LUPI_HOST Vector const &projectileMultiGroupBoundaries( ) const { return( m_projectileMultiGroupBoundaries ); } + /**< Returns the value of the **m_projectileMultiGroupBoundaries** member. */ + LUPI_HOST Vector const &projectileMultiGroupBoundariesCollapsed( ) const { return( m_projectileMultiGroupBoundariesCollapsed ); } + /**< Returns the value of the **m_projectileMultiGroupBoundariesCollapsed** member. */ + + LUPI_HOST_DEVICE std::size_t numberOfReactions( ) const { return( m_reactions.size( ) ); } /**< Returns the number of reactions of *this*. */ + LUPI_HOST_DEVICE Reaction const *reaction( int a_index ) const { return( m_reactions[a_index] ); } /**< Returns the (a_index-1)^th reaction of *this*. */ + LUPI_HOST_DEVICE std::size_t numberOfOrphanProducts( ) const { return( m_orphanProducts.size( ) ); } /**< Returns the number of orphan products of *this*. */ + LUPI_HOST_DEVICE Reaction const *orphanProduct( int a_index ) const { return( m_orphanProducts[a_index] ); } /**< Returns the (a_index-1)^th orphan product of *this*. */ + + LUPI_HOST_DEVICE bool hasFission( ) const ; + LUPI_HOST_DEVICE String interaction( ) const { return( m_interaction ); } + LUPI_HOST_DEVICE bool hasIncoherentDoppler( ) const ; + + LUPI_HOST_DEVICE int URR_index( ) const { return( m_URR_index ); } + LUPI_HOST_DEVICE void URR_index( int a_URR_index ) { m_URR_index = a_URR_index; } + LUPI_HOST_DEVICE bool inURR( double a_energy ) const ; + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const { return( m_hasURR_probabilityTables ); } + LUPI_HOST_DEVICE double URR_domainMin( ) const { return( m_URR_domainMin ); } + LUPI_HOST_DEVICE double URR_domainMax( ) const { return( m_URR_domainMax ); } + LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const { return( m_heatedCrossSections.reactionHasURR_probabilityTables( a_index ) ); } + + LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const { + if( m_continuousEnergy ) return( m_heatedCrossSections.threshold( a_index ) ); + return( m_heatedMultigroupCrossSections.threshold( a_index ) ); } /**< Returns the threshold for the reaction at index *a_index*. */ + + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const ; + template + inline LUPI_HOST_DEVICE int sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const ; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const ; + + LUPI_HOST_DEVICE Vector const &upscatterModelAGroupVelocities( ) const { return( m_upscatterModelAGroupVelocities ); } /**< Returns a reference to the **m_upscatterModelAGroupVelocities** member. */ + + LUPI_HOST_DEVICE void serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE long sizeOf2( ) const { return sizeof(*this); } +}; + +/* +============================================================ +===================== ProtareComposite ===================== +============================================================ +*/ +class ProtareComposite : public Protare { + + private: + Vector m_protares; /**< List of protares added to *this* instance. */ + std::size_t m_numberOfReactions; /**< The sum of the number of reaction for all stored protares. */ + std::size_t m_numberOfOrphanProducts; /**< The sum of the number of reaction for all stored protares. */ + double m_minimumEnergy; /**< The maximum of the minimum cross section domains. */ + double m_maximumEnergy; /**< The minimum of the maximum cross section domains. */ + + public: + LUPI_HOST_DEVICE ProtareComposite( ); + LUPI_HOST ProtareComposite( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareComposite const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, + std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset = 0, bool a_allowFixedGrid = true ); + LUPI_HOST_DEVICE ~ProtareComposite( ); + + Vector protares( ) const { return( m_protares ); } /**< Returns the value of the **m_protares** member. */ + LUPI_HOST void setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ); + +// The rest are virtual methods defined in the Protare class. + + LUPI_HOST_DEVICE std::size_t numberOfProtares( ) const { return( m_protares.size( ) ); } /**< Returns the number of protares contained in *this*. */ + LUPI_HOST_DEVICE ProtareSingle const *protare( std::size_t a_index ) const ; + LUPI_HOST_DEVICE ProtareSingle *protare( std::size_t a_index ); + LUPI_HOST_DEVICE ProtareSingle const *protareWithReaction( int a_index ) const ; + + LUPI_HOST_DEVICE double minimumEnergy( ) const { return( m_minimumEnergy ); } /**< Returns the value of the **m_minimumEnergy** member. */ + LUPI_HOST_DEVICE double maximumEnergy( ) const { return( m_maximumEnergy ); } /**< Returns the value of the **m_maximumEnergy** member. */ + LUPI_HOST_DEVICE Vector temperatures( std::size_t a_index = 0 ) const ; + + LUPI_HOST Vector const &projectileMultiGroupBoundaries( ) const { return( m_protares[0]->projectileMultiGroupBoundaries( ) ); } + /**< Returns the value of the **m_projectileMultiGroupBoundaries** member. */ + LUPI_HOST Vector const &projectileMultiGroupBoundariesCollapsed( ) const { return( m_protares[0]->projectileMultiGroupBoundariesCollapsed( ) ); } + /**< Returns the value of the **m_projectileMultiGroupBoundariesCollapsed** member. */ + + LUPI_HOST_DEVICE std::size_t numberOfReactions( ) const { return( m_numberOfReactions ); } + /**< Returns the value of the **m_numberOfReactions** member. */ + LUPI_HOST_DEVICE Reaction const *reaction( int a_index ) const ; + LUPI_HOST_DEVICE std::size_t numberOfOrphanProducts( ) const { return( m_numberOfOrphanProducts ); } + /**< Returns the value of the **m_numberOfOrphanProducts** member. */ + LUPI_HOST_DEVICE Reaction const *orphanProduct( int a_index ) const ; + + LUPI_HOST_DEVICE bool hasFission( ) const ; + LUPI_HOST_DEVICE bool hasIncoherentDoppler( ) const ; + + LUPI_HOST_DEVICE int URR_index( ) const { return( -1 ); } + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const ; + LUPI_HOST_DEVICE double URR_domainMin( ) const ; + LUPI_HOST_DEVICE double URR_domainMax( ) const ; + LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const ; + + LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const ; + + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const ; + template + inline LUPI_HOST_DEVICE int sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const ; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const ; + + LUPI_HOST_DEVICE Vector const &upscatterModelAGroupVelocities( ) const { return( m_protares[0]->upscatterModelAGroupVelocities( ) ); } + /**< Returns a reference to the **m_upscatterModelAGroupVelocities** member. */ + + LUPI_HOST_DEVICE void serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE long sizeOf2( ) const { return sizeof(*this); } +}; + +/* +============================================================ +======================== ProtareTNSL ======================= +============================================================ +*/ +class ProtareTNSL : public Protare { + + private: + std::size_t m_numberOfTNSLReactions; /**< The number of reactions of the TNSL protare. */ + double m_TNSL_maximumEnergy; /**< The maximum energy of the cross section domain for the TNSL protare. */ + double m_TNSL_maximumTemperature; /**< The highest temperature for processed data for the TNSL protare. */ + ProtareSingle *m_protareWithElastic; /**< Protare with non thermal neutron scattering law data. */ + ProtareSingle *m_TNSL; /**< Protare with thermal neutron scattering law data. */ + ProtareSingle *m_protareWithoutElastic; /**< Same as *m_protare* but without elastic. */ + + public: + LUPI_HOST_DEVICE ProtareTNSL( ); + LUPI_HOST ProtareTNSL( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareTNSL const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, + std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset = 0, bool a_allowFixedGrid = true ); + LUPI_HOST_DEVICE ~ProtareTNSL( ); + + LUPI_HOST_DEVICE ProtareSingle const *protareWithElastic( ) const { return( m_protareWithElastic ); } /**< Returns the **m_protareWithElastic** member. */ + LUPI_HOST_DEVICE ProtareSingle const *TNSL( ) const { return( m_TNSL ); } /**< Returns the **m_TNSL** member. */ + LUPI_HOST_DEVICE ProtareSingle const *protareWithoutElastic( ) const { return( m_protareWithoutElastic ); } /**< Returns the **m_protareWithoutElastic** member. */ + + LUPI_HOST_DEVICE double TNSL_maximumEnergy( ) const { return( m_TNSL_maximumEnergy ); } + LUPI_HOST_DEVICE double TNSL_maximumTemperature( ) const { return( m_TNSL_maximumTemperature ); } + LUPI_HOST void setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ); + LUPI_HOST void setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ); + +// The rest are virtual methods defined in the Protare class. + + LUPI_HOST_DEVICE std::size_t numberOfProtares( ) const { return( 2 ); } /**< Always Returns 2. */ + LUPI_HOST_DEVICE ProtareSingle const *protare( std::size_t a_index ) const ; + LUPI_HOST_DEVICE ProtareSingle *protare( std::size_t a_index ); + LUPI_HOST_DEVICE ProtareSingle const *protareWithReaction( int a_index ) const ; + + LUPI_HOST_DEVICE double minimumEnergy( ) const { return( m_protareWithElastic->minimumEnergy( ) ); } /**< Returns the minimum cross section domain. */ + LUPI_HOST_DEVICE double maximumEnergy( ) const { return( m_protareWithElastic->maximumEnergy( ) ); } /**< Returns the maximum cross section domain. */ + LUPI_HOST_DEVICE Vector temperatures( std::size_t a_index = 0 ) const ; + + LUPI_HOST Vector const &projectileMultiGroupBoundaries( ) const { return( m_protareWithElastic->projectileMultiGroupBoundaries( ) ); } + /**< Returns the value of the **m_projectileMultiGroupBoundaries** member. */ + LUPI_HOST Vector const &projectileMultiGroupBoundariesCollapsed( ) const { return( m_protareWithElastic->projectileMultiGroupBoundariesCollapsed( ) ); } + /**< Returns the value of the **m_projectileMultiGroupBoundariesCollapsed** member. */ + + LUPI_HOST_DEVICE std::size_t numberOfReactions( ) const { return( m_TNSL->numberOfReactions( ) + m_protareWithElastic->numberOfReactions( ) ); } + LUPI_HOST_DEVICE Reaction const *reaction( int a_index ) const ; + LUPI_HOST_DEVICE std::size_t numberOfOrphanProducts( ) const { return( m_protareWithElastic->numberOfOrphanProducts( ) ); } + /**< Returns the number of orphan products in the normal ProtareSingle. */ + LUPI_HOST_DEVICE Reaction const *orphanProduct( int a_index ) const { return( m_protareWithElastic->orphanProduct( a_index ) ); } + /**< Returns the (a_index - 1 )^th orphan product in the normal ProtareSingle. */ + + LUPI_HOST_DEVICE bool hasFission( ) const { return( m_protareWithElastic->hasFission( ) ); } /* Returns the normal ProtareSingle's hasFission value. */ + LUPI_HOST_DEVICE bool hasIncoherentDoppler( ) const { return( false ); } /* Always returns false as this is a neutron as projectile and not a photon. */ + + LUPI_HOST_DEVICE int URR_index( ) const { return( -1 ); } + LUPI_HOST_DEVICE bool hasURR_probabilityTables( ) const { return( m_protareWithElastic->hasURR_probabilityTables( ) ); } + LUPI_HOST_DEVICE double URR_domainMin( ) const { return( m_protareWithElastic->URR_domainMin( ) ); } + LUPI_HOST_DEVICE double URR_domainMax( ) const { return( m_protareWithElastic->URR_domainMax( ) ); } + LUPI_HOST_DEVICE bool reactionHasURR_probabilityTables( int a_index ) const ; + + LUPI_HOST_DEVICE double threshold( std::size_t a_index ) const ; + + LUPI_HOST_DEVICE double crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE void crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling = false ) const ; + LUPI_HOST_DEVICE double reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const ; + template + inline LUPI_HOST_DEVICE int sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const ; + + LUPI_HOST_DEVICE double depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const ; + LUPI_HOST_DEVICE double gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const ; + LUPI_HOST_DEVICE double gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const ; + + LUPI_HOST_DEVICE Vector const &upscatterModelAGroupVelocities( ) const { return( m_protareWithElastic->upscatterModelAGroupVelocities( ) ); } + /**< Returns a reference to the **m_upscatterModelAGroupVelocities** member. */ + + LUPI_HOST_DEVICE void serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE long sizeOf2( ) const { return sizeof(*this); } +}; + +/* +============================================================ +=========================== Others ========================= +============================================================ +*/ +LUPI_HOST Protare *protareFromGIDIProtare( LUPI::StatusMessageReporting &a_smr, GIDI::Protare const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, GIDI::Transporting::Particles const &a_particles, + DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::set const &a_reactionsToExclude, + int a_reactionsToExcludeOffset = 0, bool a_allowFixedGrid = true ); +LUPI_HOST Vector GIDI_VectorDoublesToMCGIDI_VectorDoubles( GIDI::Vector a_vector ); +LUPI_HOST void addVectorItemsToSet( Vector const &a_from, std::set &a_to ); + +LUPI_HOST_DEVICE int distributionTypeToInt( Distributions::Type a_type ); +LUPI_HOST_DEVICE Distributions::Type intToDistributionType( int a_type ); +LUPI_HOST_DEVICE void serializeProducts( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_products ); +LUPI_HOST_DEVICE void serializeDelayedNeutrons( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_delayedNeutrons ); +LUPI_HOST_DEVICE void serializeQs( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_Qs ); +LUPI_HOST_DEVICE void serializeFissionResiduals( GIDI::Construction::FissionResiduals &a_fissionResiduals, + LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + +LUPI_HOST void convertACE_URR_probabilityTablesFromGIDI( GIDI::ProtareSingle const &a_protare, Transporting::MC &a_settings, SetupInfo &a_setupInfo ); +LUPI_HOST_DEVICE Transporting::URR_mode serializeURR_mode( Transporting::URR_mode a_URR_mode, LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +LUPI_HOST_DEVICE ACE_URR_probabilityTables *serializeACE_URR_probabilityTables( ACE_URR_probabilityTables *a_ACE_URR_probabilityTables, + LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + +LUPI_HOST_DEVICE Distributions::Distribution *serializeDistribution( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Distributions::Distribution *a_distribution ); + +LUPI_HOST std::vector vectorToSTD_vector( Vector a_input ); +LUPI_HOST std::vector vectorToSTD_vector( Vector a_input ); + +} // End of namespace MCGIDI. + +#include "MCGIDI_headerSource.hpp" + +#endif // End of MCGIDI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_distributions.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_distributions.hpp new file mode 100644 index 0000000000..e7e6d6c8f5 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_distributions.hpp @@ -0,0 +1,463 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_distributions_hpp_included +#define MCGIDI_distributions_hpp_included 1 + +#include + +namespace MCGIDI { + +namespace Distributions { + +enum class Type { none, unspecified, angularTwoBody, KalbachMann, uncorrelated, branching3d, energyAngularMC, angularEnergyMC, + coherentPhotoAtomicScattering, incoherentPhotoAtomicScattering, incoherentPhotoAtomicScatteringElectron, incoherentBoundToFreePhotoAtomicScattering, pairProductionGamma, + coherentElasticTNSL, incoherentElasticTNSL }; + +/* +============================================================ +======================= Distribution ======================= +============================================================ +*/ +class Distribution { + + private: + Type m_type; /**< Specifies the Type of the distribution. */ + GIDI::Frame m_productFrame; /**< Specifies the frame the product data are given in. */ + double m_projectileMass; /**< The mass of the projectile. */ + double m_targetMass; /**< The mass of the target. */ + double m_productMass; /**< The mass of the first product. */ + + public: + LUPI_HOST_DEVICE Distribution( ); + LUPI_HOST Distribution( Type a_type, GIDI::Distributions::Distribution const &a_distribution, SetupInfo &a_setupInfo ); + LUPI_HOST Distribution( Type a_type, GIDI::Frame a_productFrame, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION ~Distribution( ) MCGIDI_TRUE_VIRTUAL; + + LUPI_HOST_DEVICE Type type( ) const { return( m_type ); } /**< Returns the value of the **m_type**. */ + LUPI_HOST_DEVICE GIDI::Frame productFrame( ) const { return( m_productFrame ); } /**< Returns the value of the **m_productFrame**. */ + + LUPI_HOST_DEVICE double projectileMass( ) const { return( m_projectileMass ); } /**< Returns the value of the **m_projectileMass**. */ + LUPI_HOST_DEVICE double targetMass( ) const { return( m_targetMass ); } /**< Returns the value of the **m_targetMass**. */ + LUPI_HOST_DEVICE double productMass( ) const { return( m_productMass ); } /**< Returns the value of the **m_productMass**. */ + + LUPI_HOST void setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ); + + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const MCGIDI_TRUE_VIRTUAL; + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== AngularTwoBody ====================== +============================================================ +*/ +class AngularTwoBody : public Distribution { + + private: + double m_residualMass; /**< The mass of the second product (often the residual). */ + double m_Q; /**< FIX ME. */ + double m_twoBodyThreshold; /**< This is the T_1 value needed to do two-body kinematics (i.e., in the equation (K_{com,3_4} = m_2 * (K_1 - T_1) / (m_1 + m_2)). */ + bool m_Upscatter; /**< Set to true if reaction is elastic which is the only reaction upscatter Model B is applied to. */ + Probabilities::ProbabilityBase2d_d1 *m_angular; /**< The 2d angular probability. */ + Sampling::Upscatter::ModelDBRC_data *m_modelDBRC_data; /**< The cross section and other data needed for neutron elastic upscatter model DBRC. */ + + template + LUPI_HOST_DEVICE bool upscatterModelB( double a_kineticLab, Sampling::Input &a_input, RNG && a_rng ) const ; + + public: + LUPI_HOST_DEVICE AngularTwoBody( ); + LUPI_HOST AngularTwoBody( GIDI::Distributions::AngularTwoBody const &a_angularTwoBody, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~AngularTwoBody( ); + + LUPI_HOST_DEVICE double residualMass( ) const { return( m_residualMass ); } /**< Returns the value of the **m_residualMass**. */ + LUPI_HOST_DEVICE double Q( ) const { return( m_Q ); } /**< Returns the value of the **m_Q**. */ + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *angular( ) const { return( m_angular ); } /**< Returns the value of the **m_angular**. */ + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + LUPI_HOST_DEVICE bool Upscatter( ) const { return( m_Upscatter ); } /**< Returns the value of the **m_Upscatter**. */ + LUPI_HOST void setModelDBRC_data2( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ); +}; + +/* +============================================================ +======================= Uncorrelated ======================= +============================================================ +*/ +class Uncorrelated : public Distribution { + + private: + Probabilities::ProbabilityBase2d_d1 *m_angular; /**< The angular probability P(mu|E). */ + Probabilities::ProbabilityBase2d *m_energy; /**< The energy probability P(E'|E). */ + + public: + LUPI_HOST_DEVICE Uncorrelated( ); + LUPI_HOST Uncorrelated( GIDI::Distributions::Uncorrelated const &a_uncorrelated, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~Uncorrelated( ); + + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *angular( ) const { return( m_angular ); } /**< Returns the value of the **m_angular**. */ + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d *energy( ) const { return( m_energy ); } /**< Returns the value of the **m_energy**. */ + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Branching3d ======================= +============================================================ +*/ +class Branching3d : public Distribution { + + private: + int m_initialStateIndex; + + public: + LUPI_HOST_DEVICE Branching3d( ); + LUPI_HOST Branching3d( GIDI::Distributions::Branching3d const &a_branching3d, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~Branching3d( ); + + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== EnergyAngularMC ===================== +============================================================ +*/ +class EnergyAngularMC : public Distribution { + + private: + Probabilities::ProbabilityBase2d_d1 *m_energy; /**< The energy probability P(E'|E). */ + Probabilities::ProbabilityBase3d *m_angularGivenEnergy; /**< The angular probability given E', P(mu|E,E'). */ + + public: + LUPI_HOST_DEVICE EnergyAngularMC( ); + LUPI_HOST EnergyAngularMC( GIDI::Distributions::EnergyAngularMC const &a_energyAngularMC, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~EnergyAngularMC( ); + + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *energy( ) const { return( m_energy ); } /**< Returns the value of the **m_energy**. */ + LUPI_HOST_DEVICE Probabilities::ProbabilityBase3d *angularGivenEnergy( ) const { return( m_angularGivenEnergy ); } /**< Returns the value of the **m_angularGivenEnergy**. */ + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== AngularEnergyMC ===================== +============================================================ +*/ +class AngularEnergyMC : public Distribution { + + private: + Probabilities::ProbabilityBase2d_d1 *m_angular; /**< The angular probability P(mu|E). */ + Probabilities::ProbabilityBase3d *m_energyGivenAngular; /**< The energy probability P(E'|E,mu). */ + + public: + LUPI_HOST_DEVICE AngularEnergyMC( ); + LUPI_HOST AngularEnergyMC( GIDI::Distributions::AngularEnergyMC const &a_angularEnergyMC, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~AngularEnergyMC( ); + + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *angular( ) const { return( m_angular ); } /**< Returns the value of the **m_angular**. */ + LUPI_HOST_DEVICE Probabilities::ProbabilityBase3d *energyGivenAngular( ) const { return( m_energyGivenAngular ); } /**< Returns the value of the **m_energyGivenAngular**. */ + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== KalbachMann ======================= +============================================================ +*/ +class KalbachMann : public Distribution { + + private: + double m_energyToMeVFactor; /**< The factor that converts energies to MeV. */ + double m_eb_massFactor; /**< FIX ME */ + Probabilities::ProbabilityBase2d_d1 *m_f; /**< The energy probability P(E'|E). */ + Functions::Function2d *m_r; /**< The Kalbach-Mann r(E,E') function. */ + Functions::Function2d *m_a; /**< The Kalbach-Mann a(E,E') function. */ + + public: + LUPI_HOST_DEVICE KalbachMann( ); + LUPI_HOST KalbachMann( GIDI::Distributions::KalbachMann const &a_KalbachMann, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~KalbachMann( ); + + LUPI_HOST_DEVICE double energyToMeVFactor( ) const { return( m_energyToMeVFactor ); } /**< Returns the value of the **m_energyToMeVFactor**. */ + LUPI_HOST_DEVICE double eb_massFactor( ) const { return( m_eb_massFactor ); } /**< Returns the value of the **m_eb_massFactor**. */ + LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *f( ) const { return( m_f ); } /**< Returns the value of the **m_f**. */ + LUPI_HOST_DEVICE Functions::Function2d *r( ) const { return( m_r ); } /**< Returns the value of the **m_r**. */ + LUPI_HOST_DEVICE Functions::Function2d *a( ) const { return( m_a ); } /**< Returns the value of the **m_a**. */ + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + LUPI_HOST_DEVICE double evaluate( double E_in_lab, double E_out, double mu ); +}; + +/* +============================================================ +=============== CoherentPhotoAtomicScattering ============== +============================================================ +*/ +class CoherentPhotoAtomicScattering : public Distribution { + + private: + bool m_anomalousDataPresent; /**< FIX ME */ + Vector m_energies; /**< FIX ME */ + Vector m_formFactor; /**< FIX ME */ + Vector m_a; /**< FIX ME */ + Vector m_integratedFormFactor; /**< FIX ME */ + Vector m_integratedFormFactorSquared; /**< FIX ME */ + Vector m_probabilityNorm1_1; /**< FIX ME */ + Vector m_probabilityNorm1_3; /**< FIX ME */ + Vector m_probabilityNorm1_5; /**< FIX ME */ + Vector m_probabilityNorm2_1; /**< FIX ME */ + Vector m_probabilityNorm2_3; /**< FIX ME */ + Vector m_probabilityNorm2_5; /**< FIX ME */ + Functions::Function1d_d1 *m_realAnomalousFactor; /**< The real part of the anomalous scattering factor. */ + Functions::Function1d_d1 *m_imaginaryAnomalousFactor; /**< The imaginary part of the anomalous scattering factor. */ + + LUPI_HOST_DEVICE double Z_a( double a_Z, double a_a ) const ; + + public: + LUPI_HOST_DEVICE CoherentPhotoAtomicScattering( ); + LUPI_HOST CoherentPhotoAtomicScattering( GIDI::Distributions::CoherentPhotoAtomicScattering const &a_coherentPhotoAtomicScattering, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~CoherentPhotoAtomicScattering( ); + + LUPI_HOST_DEVICE double evaluate( double a_energyIn, double a_mu ) const ; + LUPI_HOST_DEVICE double evaluateFormFactor( double a_energyIn, double a_mu ) const ; + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +============== IncoherentPhotoAtomicScattering ============= +============================================================ +*/ +class IncoherentPhotoAtomicScattering : public Distribution { + + private: + Vector m_energies; /**< FIX ME */ + Vector m_scatteringFactor; /**< FIX ME */ + Vector m_a; /**< FIX ME */ + + public: + LUPI_HOST_DEVICE IncoherentPhotoAtomicScattering( ); + LUPI_HOST IncoherentPhotoAtomicScattering( GIDI::Distributions::IncoherentPhotoAtomicScattering const &a_incoherentPhotoAtomicScattering, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~IncoherentPhotoAtomicScattering( ); + + LUPI_HOST_DEVICE double energyRatio( double a_energyIn, double a_mu ) const ; + LUPI_HOST_DEVICE double evaluateKleinNishina( double a_energyIn, double a_mu ) const ; + LUPI_HOST_DEVICE double evaluateScatteringFactor( double a_X ) const ; + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +/* + LUPI_HOST_DEVICE double evaluate( double E_in_lab, double mu ); +*/ +}; + +/* +======================================================================= +============== IncoherentBoundToFreePhotoAtomicScattering ============= +======================================================================= +*/ +class IncoherentBoundToFreePhotoAtomicScattering : public Distribution { + + private: + //Vector m_energies; + //Vector m_ComptonProfile; + Vector m_occupationNumber; + //Vector m_a; + Vector m_pz; + double m_bindingEnergy; + + public: + LUPI_HOST_DEVICE IncoherentBoundToFreePhotoAtomicScattering( ); + LUPI_HOST IncoherentBoundToFreePhotoAtomicScattering( GIDI::Distributions::IncoherentBoundToFreePhotoAtomicScattering const &a_incoherentPhotoAtomicScattering, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~IncoherentBoundToFreePhotoAtomicScattering( ); + LUPI_HOST_DEVICE double energyRatio( double a_energyIn, double a_mu ) const ; + LUPI_HOST_DEVICE double evaluateKleinNishina( double a_energyIn, double a_mu ) const ; + LUPI_HOST_DEVICE double evaluateOccupationNumber( double a_X, double a_mu ) const; + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========== IncoherentPhotoAtomicScatteringElectron ========= +============================================================ +*/ +class IncoherentPhotoAtomicScatteringElectron : public Distribution { + + public: + LUPI_HOST_DEVICE IncoherentPhotoAtomicScatteringElectron( ); + LUPI_HOST IncoherentPhotoAtomicScatteringElectron( SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~IncoherentPhotoAtomicScatteringElectron( ); + + template + LUPI_HOST_DEVICE void sample( double a_energy, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +==================== PairProductionGamma =================== +============================================================ +*/ +class PairProductionGamma : public Distribution { + + private: + bool m_firstSampled; /**< When sampling photons for pair production, the photons must be emitted back-to-back. The flag help do this. */ + + public: + LUPI_HOST_DEVICE PairProductionGamma( ); + LUPI_HOST PairProductionGamma( SetupInfo &a_setupInfo, bool a_firstSampled ); + LUPI_HOST_DEVICE ~PairProductionGamma( ); + + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +==================== CoherentElasticTNSL =================== +============================================================ +*/ +class CoherentElasticTNSL : public Distribution { + + private: + Interpolation m_temperatureInterpolation; + Vector m_temperatures; + Vector m_energies; + Vector m_S_table; + + public: + LUPI_HOST_DEVICE CoherentElasticTNSL( ); + LUPI_HOST CoherentElasticTNSL( GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::CoherentElastic const *a_coherentElasticTNSL, + SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~CoherentElasticTNSL( ) {} + + template + LUPI_HOST_DEVICE void sample( double a_energy, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +==================== IncoherentElasticTNSL =================== +============================================================ +*/ +class IncoherentElasticTNSL : public Distribution { + + private: + double m_temperatureToMeV_K; + Functions::Function1d_d1 *m_DebyeWallerIntegral; + + public: + LUPI_HOST_DEVICE IncoherentElasticTNSL( ); + LUPI_HOST IncoherentElasticTNSL( GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::IncoherentElastic const *a_incoherentElasticTNSL, + SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~IncoherentElasticTNSL( ) {} + + template + LUPI_HOST_DEVICE void sample( double a_energy, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + Functions::Function1d *DebyeWallerIntegral( ) { return( m_DebyeWallerIntegral ); } + Functions::Function1d const *DebyeWallerIntegral( ) const { return( m_DebyeWallerIntegral ); } +}; + +/* +============================================================ +======================= Unspecified ======================== +============================================================ +*/ +class Unspecified : public Distribution { + + public: + LUPI_HOST_DEVICE Unspecified( ); + LUPI_HOST Unspecified( GIDI::Distributions::Distribution const &a_distribution, SetupInfo &a_setupInfo ); + LUPI_HOST_DEVICE ~Unspecified( ); + + template + LUPI_HOST_DEVICE void sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== Others ========================== +============================================================ +*/ +LUPI_HOST Distribution *parseGIDI( GIDI::Suite const &a_distribution, SetupInfo &a_setupInfo, Transporting::MC const &a_settings ); +LUPI_HOST_DEVICE Type DistributionType( Distribution const *a_distribution ); + +} + +} + +#endif // End of MCGIDI_distributions_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_fromTOM.h b/source/processes/hadronic/models/lend/include/MCGIDI_fromTOM.h deleted file mode 100644 index 24081890d3..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI_fromTOM.h +++ /dev/null @@ -1,27 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_fromTOM_h_included -#define MCGIDI_fromTOM_h_included - -#include -#include "MCGIDI.h" - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -ptwXYPoints *MCGIDI_fromTOM_XYs_to_ptwXYPoints_linear( statusMessageReporting *smr, xDataTOM_XYs *XYs, enum ptwXY_interpolation_e interpolation ); -int MCGIDI_fromTOM_pdfsOfXGivenW( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_pdfsOfXGivenW *dists, ptwXYPoints *norms, - char const *toUnits[3] ); -int MCGIDI_fromTOM_pdfOfX( statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfOfX *dist, double *norm ); -int MCGIDI_fromTOM_interpolation( statusMessageReporting *smr, xDataTOM_element *element, int index, enum ptwXY_interpolation_e *interpolation ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_fromTOM_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_functions.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_functions.hpp new file mode 100644 index 0000000000..da3dd89b52 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_functions.hpp @@ -0,0 +1,825 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_functions_hpp_included +#define MCGIDI_functions_hpp_included 1 + +#include +#include +#include + +namespace MCGIDI { + +enum class Interpolation { LINLIN, LINLOG, LOGLIN, LOGLOG, FLAT, OTHER }; +enum class Function1dType { none, constant, XYs, polyomial, gridded, regions, branching, TerrellFissionNeutronMultiplicityModel }; +enum class Function2dType { none, XYs }; +enum class ProbabilityBase1dType { none, xs_pdf_cdf }; +enum class ProbabilityBase2dType { none, XYs, regions, isotropic, discreteGamma, primaryGamma, recoil, NBodyPhaseSpace, evaporation, + generalEvaporation, simpleMaxwellianFission, Watt, weightedFunctionals }; + +enum class ProbabilityBase3dType { none, XYs }; + +namespace Functions { + +/* +============================================================ +====================== FunctionBase ======================== +============================================================ +*/ +class FunctionBase { + + private: + int m_dimension; + double m_domainMin; + double m_domainMax; + Interpolation m_interpolation; + double m_outerDomainValue; + + public: + LUPI_HOST_DEVICE FunctionBase( ); + LUPI_HOST FunctionBase( GIDI::Functions::FunctionForm const &a_function ); + LUPI_HOST_DEVICE FunctionBase( int a_dimension, double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue = 0 ); + LUPI_HOST_DEVICE virtual ~FunctionBase( ) = 0; + + LUPI_HOST_DEVICE Interpolation interpolation( ) const { return( m_interpolation ); } + LUPI_HOST_DEVICE double domainMin( ) const { return( m_domainMin ); } + LUPI_HOST_DEVICE double domainMax( ) const { return( m_domainMax ); } + LUPI_HOST_DEVICE double outerDomainValue( ) const { return( m_outerDomainValue ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Function1d ======================== +============================================================ +*/ +class Function1d : public FunctionBase { + + protected: + Function1dType m_type; + + public: + LUPI_HOST_DEVICE Function1d( ); + LUPI_HOST_DEVICE Function1d( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue = 0 ); + LUPI_HOST_DEVICE ~Function1d( ); + + LUPI_HOST_DEVICE Function1dType type( ) const { return( m_type ); } + LUPI_HOST_DEVICE String typeString( ) const ; + + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION int sampleBoundingInteger( double a_x1, RNG && a_rng ) const ; + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double evaluate( double a_x1 ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== Function1d_d1 ======================= +============================================================ +*/ +class Function1d_d1 : public Function1d { + + public: + LUPI_HOST_DEVICE Function1d_d1( ) : + Function1d( ) { } + LUPI_HOST_DEVICE Function1d_d1( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue = 0 ) : + Function1d( a_domainMin, a_domainMax, a_interpolation, a_outerDomainValue ) { } + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; +}; + +/* +============================================================ +====================== Function1d_d2 ======================= +============================================================ +*/ +class Function1d_d2 : public Function1d_d1 { + + public: + LUPI_HOST_DEVICE Function1d_d2( ) : + Function1d_d1( ) { } + LUPI_HOST_DEVICE Function1d_d2( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue = 0 ) : + Function1d_d1( a_domainMin, a_domainMax, a_interpolation, a_outerDomainValue ) { } + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; +}; + +/* +============================================================ +======================== Constant1d ======================== +============================================================ +*/ +class Constant1d : public Function1d_d2 { + + private: + double m_value; + + public: + LUPI_HOST_DEVICE Constant1d( ); + LUPI_HOST_DEVICE Constant1d( double a_domainMin, double a_domainMax, double a_value, double a_outerDomainValue = 0 ); + LUPI_HOST Constant1d( GIDI::Functions::Constant1d const &a_constant1d ); + LUPI_HOST_DEVICE ~Constant1d( ); + + LUPI_HOST_DEVICE double evaluate( LUPI_maybeUnused double a_x1 ) const { return( m_value ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=========================== XYs1d ========================== +============================================================ +*/ +class XYs1d : public Function1d_d2 { + + private: + Vector m_Xs; + Vector m_Ys; + + public: + LUPI_HOST_DEVICE XYs1d( ); + LUPI_HOST XYs1d( Interpolation a_interpolation, Vector a_Xs, Vector a_Ys, double a_outerDomainValue = 0 ); + LUPI_HOST XYs1d( GIDI::Functions::XYs1d const &a_XYs1d ); + LUPI_HOST_DEVICE ~XYs1d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================= Polynomial1d ======================= +============================================================ +*/ +class Polynomial1d : public Function1d_d2 { + + private: + Vector m_coefficients; + Vector m_coefficientsReversed; + + public: + LUPI_HOST_DEVICE Polynomial1d( ); + LUPI_HOST Polynomial1d( double a_domainMin, double a_domainMax, Vector const &a_coefficients, double a_outerDomainValue = 0 ); + LUPI_HOST Polynomial1d( GIDI::Functions::Polynomial1d const &a_polynomial1d ); + LUPI_HOST_DEVICE ~Polynomial1d( ); + + LUPI_HOST_DEVICE Vector const &coefficients( ) const { return( m_coefficients ); } + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================= Gridded1d ======================== +============================================================ +*/ +class Gridded1d : public Function1d_d2 { + + private: + Vector m_grid; + Vector m_data; + + public: + LUPI_HOST_DEVICE Gridded1d( ); + LUPI_HOST Gridded1d( GIDI::Functions::Gridded1d const &a_gridded1d ); + LUPI_HOST_DEVICE ~Gridded1d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================= Regions1d ======================== +============================================================ +*/ +class Regions1d : public Function1d_d1 { + + private: + Vector m_Xs; + Vector m_functions1d; + + public: + LUPI_HOST_DEVICE Regions1d( ); + LUPI_HOST Regions1d( GIDI::Functions::Regions1d const &a_regions1d ); + LUPI_HOST_DEVICE ~Regions1d( ); + + LUPI_HOST_DEVICE void append( Function1d_d2 *a_function1d ); + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Branching1d ======================= +============================================================ +*/ +class Branching1d : public Function1d_d2 { + + private: + int m_initialStateIndex; + + public: + LUPI_HOST_DEVICE Branching1d( ); + LUPI_HOST Branching1d( SetupInfo &a_setupInfo, GIDI::Functions::Branching1d const &a_branching1d ); + LUPI_HOST_DEVICE ~Branching1d( ); + + LUPI_HOST_DEVICE int initialStateIndex( ) const { return( m_initialStateIndex ); } + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========== TerrellFissionNeutronMultiplicityModel ========== +============================================================ +*/ +class TerrellFissionNeutronMultiplicityModel : public Function1d { + + private: + double m_width; + Function1d_d1 *m_multiplicity; + + public: + LUPI_HOST_DEVICE TerrellFissionNeutronMultiplicityModel( ); + LUPI_HOST TerrellFissionNeutronMultiplicityModel( double a_width, Function1d_d1 *a_multiplicity ); + LUPI_HOST_DEVICE ~TerrellFissionNeutronMultiplicityModel( ); + + template + LUPI_HOST_DEVICE int sampleBoundingInteger( double a_energy, RNG && a_rng ) const ; + LUPI_HOST_DEVICE double evaluate( double a_energy ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Function2d ======================== +============================================================ +*/ +class Function2d : public FunctionBase { + + protected: + Function2dType m_type; + + public: + LUPI_HOST_DEVICE Function2d( ); + LUPI_HOST Function2d( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue = 0 ); + LUPI_HOST_DEVICE ~Function2d( ); + + LUPI_HOST_DEVICE Function2dType type( ) const { return m_type; } + LUPI_HOST_DEVICE String typeString( ) const ; + + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double evaluate( double a_x2, double a_x1 ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=========================== XYs2d ========================== +============================================================ +*/ +class XYs2d : public Function2d { + + private: + Vector m_Xs; + Vector m_functions1d; + + public: + LUPI_HOST_DEVICE XYs2d( ); + LUPI_HOST XYs2d( GIDI::Functions::XYs2d const &a_XYs2d ); + LUPI_HOST_DEVICE ~XYs2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +LUPI_HOST Function1d *parseMultiplicityFunction1d( SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Suite const &a_suite ); +LUPI_HOST Function1d_d1 *parseFunction1d_d1( Transporting::MC const &a_settings, GIDI::Suite const &a_suite ); +LUPI_HOST Function1d_d1 *parseFunction1d_d1( GIDI::Functions::Function1dForm const *form1d ); +LUPI_HOST Function1d_d2 *parseFunction1d_d2( GIDI::Functions::Function1dForm const *form1d ); +LUPI_HOST Function2d *parseFunction2d( Transporting::MC const &a_settings, GIDI::Suite const &a_suite ); +LUPI_HOST Function2d *parseFunction2d( GIDI::Functions::Function2dForm const *form2d ); + +} // End of namespace Functions. + +/* +============================================================ +============================================================ +================== namespace Probabilities ================== +============================================================ +============================================================ +*/ +namespace Probabilities { + +/* +============================================================ +===================== ProbabilityBase ====================== +============================================================ +*/ +class ProbabilityBase : public Functions::FunctionBase { + + protected: + Vector m_Xs; + + public: + + LUPI_HOST_DEVICE ProbabilityBase( ); + LUPI_HOST ProbabilityBase( GIDI::Functions::FunctionForm const &a_probabilty ); + LUPI_HOST ProbabilityBase( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ); + LUPI_HOST_DEVICE ~ProbabilityBase( ); + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +===================== ProbabilityBase1d ==================== +============================================================ +*/ +class ProbabilityBase1d : public ProbabilityBase { + + protected: + ProbabilityBase1dType m_type; + + public: + LUPI_HOST_DEVICE ProbabilityBase1d( ); + LUPI_HOST ProbabilityBase1d( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ); + LUPI_HOST_DEVICE ~ProbabilityBase1d( ); + + LUPI_HOST_DEVICE ProbabilityBase1dType type( ) const { return m_type; } + LUPI_HOST_DEVICE String typeString( ) const ; + + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double evaluate( double a_x1 ) const MCGIDI_TRUE_VIRTUAL; + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double sample( double a_rngValue, RNG && a_rng ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================= Xs_pdf_cdf1d ======================= +============================================================ +*/ +class Xs_pdf_cdf1d : public ProbabilityBase1d { + + private: + Vector m_pdf; + Vector m_cdf; + + public: + LUPI_HOST_DEVICE Xs_pdf_cdf1d( ); + LUPI_HOST Xs_pdf_cdf1d( GIDI::Functions::Xs_pdf_cdf1d const &a_xs_pdf_cdf1d ); + LUPI_HOST_DEVICE ~Xs_pdf_cdf1d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +===================== ProbabilityBase2d ==================== +============================================================ +*/ +class ProbabilityBase2d : public ProbabilityBase { + + protected: + ProbabilityBase2dType m_type; + + public: + LUPI_HOST_DEVICE ProbabilityBase2d( ); + LUPI_HOST ProbabilityBase2d( GIDI::Functions::FunctionForm const &a_probabilty ); + LUPI_HOST ProbabilityBase2d( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ); + LUPI_HOST_DEVICE ~ProbabilityBase2d( ); + + LUPI_HOST_DEVICE ProbabilityBase2dType type( ) const { return m_type; } + LUPI_HOST_DEVICE String typeString( ) const ; + + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double evaluate( double a_x2, double a_x1 ) const MCGIDI_TRUE_VIRTUAL; + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double sample( double a_x2, double a_rngValue, RNG && a_rng ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=================== ProbabilityBase2d_d1 =================== +============================================================ +*/ +class ProbabilityBase2d_d1 : public ProbabilityBase2d { + + public: + LUPI_HOST_DEVICE ProbabilityBase2d_d1( ) : + ProbabilityBase2d( ) { } + LUPI_HOST ProbabilityBase2d_d1( GIDI::Functions::FunctionForm const &a_probabilty ) : + ProbabilityBase2d( a_probabilty ) { } + LUPI_HOST ProbabilityBase2d_d1( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ) : + ProbabilityBase2d( a_probabilty, a_Xs ) { } + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, double *a_x1_1, double *a_x1_2 ) const ; +}; + +/* +============================================================ +=================== ProbabilityBase2d_d2 =================== +============================================================ +*/ +class ProbabilityBase2d_d2 : public ProbabilityBase2d_d1 { + + public: + LUPI_HOST_DEVICE ProbabilityBase2d_d2( ) : + ProbabilityBase2d_d1( ) { } + LUPI_HOST ProbabilityBase2d_d2( GIDI::Functions::FunctionForm const &a_probabilty ) : + ProbabilityBase2d_d1( a_probabilty ) { } + LUPI_HOST ProbabilityBase2d_d2( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ) : + ProbabilityBase2d_d1( a_probabilty, a_Xs ) { } + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, double *a_x1_1, double *a_x1_2 ) const ; +}; + +/* +============================================================ +========================== XYs2d =========================== +============================================================ +*/ +class XYs2d : public ProbabilityBase2d_d2 { + + private: + Vector m_probabilities; + + public: + LUPI_HOST_DEVICE XYs2d( ); + LUPI_HOST XYs2d( GIDI::Functions::XYs2d const &a_XYs2d ); + LUPI_HOST_DEVICE ~XYs2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + template + LUPI_HOST_DEVICE double sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, double *a_x1_1, double *a_x1_2 ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Regions2d ========================= +============================================================ +*/ +class Regions2d : public ProbabilityBase2d_d1 { + + private: + Vector m_probabilities; + + public: + LUPI_HOST_DEVICE Regions2d( ); + LUPI_HOST Regions2d( GIDI::Functions::Regions2d const &a_regions2d ); + LUPI_HOST_DEVICE ~Regions2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +======================== Isotropic2d ======================= +============================================================ +*/ +class Isotropic2d : public ProbabilityBase2d_d2 { + + public: + LUPI_HOST_DEVICE Isotropic2d( ); + LUPI_HOST Isotropic2d( GIDI::Functions::Isotropic2d const &a_isotropic2d ); + LUPI_HOST_DEVICE ~Isotropic2d( ); + + LUPI_HOST_DEVICE double evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { return( 0.5 ); } + template + LUPI_HOST_DEVICE double sample( LUPI_maybeUnused double a_x2, double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { return( 1. - 2. * a_rngValue ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + ProbabilityBase2d::serialize( a_buffer, a_mode ); } +}; + +/* +============================================================ +====================== DiscreteGamma2d ===================== +============================================================ +*/ +class DiscreteGamma2d : public ProbabilityBase2d_d2 { + + private: + double m_value; + + public: + LUPI_HOST_DEVICE DiscreteGamma2d( ); + LUPI_HOST DiscreteGamma2d( GIDI::Functions::DiscreteGamma2d const &a_discreteGamma2d ); + LUPI_HOST_DEVICE ~DiscreteGamma2d( ); + + LUPI_HOST_DEVICE double evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { return( m_value ); } // FIXME This is wrong, should be something like 1 when domainMin <= a_x1 <= domainMax ), I think. I.e., should be a probability. + template + LUPI_HOST_DEVICE double sample( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { return( m_value ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== PrimaryGamma2d ===================== +============================================================ +*/ +class PrimaryGamma2d : public ProbabilityBase2d_d2 { + + private: + double m_primaryEnergy; + double m_massFactor; + String m_finalState; + int m_initialStateIndex; + + public: + LUPI_HOST_DEVICE PrimaryGamma2d( ); + LUPI_HOST PrimaryGamma2d( GIDI::Functions::PrimaryGamma2d const &a_primaryGamma2d, SetupInfo *a_setupInfo ); + LUPI_HOST_DEVICE ~PrimaryGamma2d( ); + + double primaryEnergy( ) const { return( m_primaryEnergy ); } /**< Returns the value of the *m_primaryEnergy* member. */ + double massFactor( ) const { return( m_massFactor ); } /**< Returns the value of the *m_massFactor* member. */ + String const &finalState( ) const { return( m_finalState ); } /**< Returns a const reference to the *m_finalState* member. */ + int initialStateIndex( ) const { return( m_initialStateIndex ); } /**< Returns the value of the *m_initialStateIndex* member. */ + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, LUPI_maybeUnused double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { return( m_primaryEnergy + a_x2 * m_massFactor ); } + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================= Recoil2d ========================= +============================================================ +*/ +class Recoil2d: public ProbabilityBase2d_d2 { + + private: + String m_xlink; + + public: + LUPI_HOST_DEVICE Recoil2d( ); + LUPI_HOST Recoil2d( GIDI::Functions::Recoil2d const &a_recoil2d ); + LUPI_HOST_DEVICE ~Recoil2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +==================== NBodyPhaseSpace2d ===================== +============================================================ +*/ +class NBodyPhaseSpace2d : public ProbabilityBase2d_d2 { + + private: + int m_numberOfProducts; + double m_mass; + double m_energy_in_COMFactor; + double m_massFactor; + double m_Q; + ProbabilityBase1d *m_dist; + + public: + LUPI_HOST_DEVICE NBodyPhaseSpace2d( ); + LUPI_HOST NBodyPhaseSpace2d( GIDI::Functions::NBodyPhaseSpace2d const &a_NBodyPhaseSpace2d, SetupInfo *a_setupInfo ); + LUPI_HOST_DEVICE ~NBodyPhaseSpace2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +====================== Evaporation2d ======================= +============================================================ +*/ +class Evaporation2d: public ProbabilityBase2d_d2 { + + private: + double m_U; + Functions::Function1d_d1 *m_theta; + + public: + LUPI_HOST_DEVICE Evaporation2d( ); + LUPI_HOST Evaporation2d( GIDI::Functions::Evaporation2d const &a_generalEvaporation2d ); + LUPI_HOST_DEVICE ~Evaporation2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=================== GeneralEvaporation2d =================== +============================================================ +*/ +class GeneralEvaporation2d: public ProbabilityBase2d_d2 { + + private: + Functions::Function1d_d1 *m_theta; + ProbabilityBase1d *m_g; + + public: + LUPI_HOST_DEVICE GeneralEvaporation2d( ); + LUPI_HOST GeneralEvaporation2d( GIDI::Functions::GeneralEvaporation2d const &a_generalEvaporation2d ); + LUPI_HOST_DEVICE ~GeneralEvaporation2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +================= SimpleMaxwellianFission2d ================ +============================================================ +*/ +class SimpleMaxwellianFission2d: public ProbabilityBase2d_d2 { + + private: + double m_U; + Functions::Function1d_d1 *m_theta; + + public: + LUPI_HOST_DEVICE SimpleMaxwellianFission2d( ); + LUPI_HOST SimpleMaxwellianFission2d( GIDI::Functions::SimpleMaxwellianFission2d const &a_simpleMaxwellianFission2d ); + LUPI_HOST_DEVICE ~SimpleMaxwellianFission2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== Watt2d ========================== +============================================================ +*/ +class Watt2d : public ProbabilityBase2d_d2 { + + private: + double m_U; + Functions::Function1d_d1 *m_a; + Functions::Function1d_d1 *m_b; + + public: + LUPI_HOST_DEVICE Watt2d( ); + LUPI_HOST Watt2d( GIDI::Functions::Watt2d const &a_Watt2d ); + LUPI_HOST_DEVICE ~Watt2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +=================== WeightedFunctionals2d ================== +============================================================ +*/ +class WeightedFunctionals2d: public ProbabilityBase2d { + + private: + Vector m_weight; + Vector m_energy; + + public: + LUPI_HOST_DEVICE WeightedFunctionals2d( ); + LUPI_HOST WeightedFunctionals2d( GIDI::Functions::WeightedFunctionals2d const &a_weightedFunctionals2d ); + LUPI_HOST_DEVICE ~WeightedFunctionals2d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +===================== ProbabilityBase3d ==================== +============================================================ +*/ +class ProbabilityBase3d : public ProbabilityBase { + + protected: + ProbabilityBase3dType m_type; + + public: + LUPI_HOST_DEVICE ProbabilityBase3d( ); + LUPI_HOST ProbabilityBase3d( GIDI::Functions::FunctionForm const &a_probabilty, Vector const &a_Xs ); + LUPI_HOST_DEVICE ~ProbabilityBase3d( ); + + LUPI_HOST_DEVICE ProbabilityBase3dType type( ) const { return m_type; } + LUPI_HOST_DEVICE String typeString( ) const ; + + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double evaluate( double a_x3, double a_x2, double a_x1 ) const MCGIDI_TRUE_VIRTUAL; + template + LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double sample( double a_x3, double a_x2_1, double a_x2_2, double a_rngValue, RNG && a_rng ) const MCGIDI_TRUE_VIRTUAL; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== XYs3d =========================== +============================================================ +*/ +class XYs3d : public ProbabilityBase3d { + + private: + Vector m_probabilities; + + public: + LUPI_HOST_DEVICE XYs3d( ); + LUPI_HOST XYs3d( GIDI::Functions::XYs3d const &a_XYs3d ); + LUPI_HOST_DEVICE ~XYs3d( ); + + LUPI_HOST_DEVICE double evaluate( double a_x3, double a_x2, double a_x1 ) const ; + template + LUPI_HOST_DEVICE double sample( double a_x3, double a_x2_1, double a_x2_2, double a_rngValue, RNG && a_rng ) const ; + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +LUPI_HOST ProbabilityBase1d *parseProbability1d( Transporting::MC const &a_settings, GIDI::Suite const &a_suite ); +LUPI_HOST ProbabilityBase1d *parseProbability1d( GIDI::Functions::Function1dForm const *form1d ); +LUPI_HOST ProbabilityBase2d *parseProbability2d( Transporting::MC const &a_settings, GIDI::Suite const &a_suite, SetupInfo *a_setupInfo ); +LUPI_HOST ProbabilityBase2d *parseProbability2d( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ); +LUPI_HOST ProbabilityBase2d_d1 *parseProbability2d_d1( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ); +LUPI_HOST ProbabilityBase2d_d2 *parseProbability2d_d2( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ); +LUPI_HOST ProbabilityBase3d *parseProbability3d( Transporting::MC const &a_settings, GIDI::Suite const &a_suite ); +LUPI_HOST ProbabilityBase3d *parseProbability3d( GIDI::Functions::Function3dForm const *form3d ); + + +} // End of namespace Probabilities. + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +LUPI_HOST_DEVICE Interpolation GIDI2MCGIDI_interpolation( ptwXY_interpolation a_interpolation ); + +LUPI_HOST_DEVICE Function1dType Function1dClass( Functions::Function1d *funct ); +LUPI_HOST_DEVICE Functions::Function1d *serializeFunction1d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function1d *a_function1d ); +LUPI_HOST_DEVICE Functions::Function1d_d1 *serializeFunction1d_d1( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Functions::Function1d_d1 *a_function1d ); +LUPI_HOST_DEVICE Functions::Function1d_d2 *serializeFunction1d_d2( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Functions::Function1d_d2 *a_function1d ); + +LUPI_HOST_DEVICE Function2dType Function2dClass( Functions::Function2d *funct ); +LUPI_HOST_DEVICE Functions::Function2d *serializeFunction2d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function2d *a_function2d ); + +LUPI_HOST_DEVICE ProbabilityBase1dType ProbabilityBase1dClass( Probabilities::ProbabilityBase1d *funct ); +LUPI_HOST_DEVICE Probabilities::ProbabilityBase1d *serializeProbability1d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase1d *a_probability1d ); + +LUPI_HOST_DEVICE ProbabilityBase2dType ProbabilityBase2dClass( Probabilities::ProbabilityBase2d *funct ); +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d *serializeProbability2d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Probabilities::ProbabilityBase2d *a_probability2d ); +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *serializeProbability2d_d1( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase2d_d1 *a_probability2d ); +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d2 *serializeProbability2d_d2( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase2d_d2 *a_probability2d ); + +LUPI_HOST_DEVICE ProbabilityBase3dType ProbabilityBase3dClass( Probabilities::ProbabilityBase3d *funct ); +LUPI_HOST_DEVICE Probabilities::ProbabilityBase3d *serializeProbability3d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase3d *a_probability3d ); + +} // End of namespace MCGIDI. + +#endif // End of MCGIDI_functions_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_headerSource.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_headerSource.hpp new file mode 100644 index 0000000000..1cf6d54011 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_headerSource.hpp @@ -0,0 +1,3402 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_headerSource_hpp_included +#define MCGIDI_headerSource_hpp_included 1 + +#include + + +#ifdef MCGIDI_USE_DOUBLES + #define crossSectionSumError 1e-8 +#else + #define crossSectionSumError 1e-6 +#endif + +// From file: MCGIDI_URR.cpp + +/* *********************************************************************************************************//** + * Updates *this* if *a_protare* has a non-negative *URR_index*. + * + * @param a_protare [in] The protare whose *URR_index* is used to see if *this* needs updating. + * @param a_energy [in] The energy of the projectile. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::URR_protareInfos::updateProtare( MCGIDI::Protare const *a_protare, double a_energy, RNG && a_rng ) { + + for( std::size_t i1 = 0; i1 < a_protare->numberOfProtares( ); ++i1 ) { + ProtareSingle *protareSingle = const_cast( a_protare->protare( i1 ) ); + + if( protareSingle->URR_index( ) >= 0 ) { + URR_protareInfo &URR_protare_info = m_URR_protareInfos[protareSingle->URR_index( )]; + + URR_protare_info.m_inURR = protareSingle->inURR( a_energy ); + if( URR_protare_info.inURR( ) ) URR_protare_info.m_rng_Value = a_rng( ); + } + } +} + + +/* *********************************************************************************************************//** + * This function samples an energy and cosine of the angle for a photon for Klein Nishina scattering (i.e, incoherent photo-atomic scattering). + * + * @param a_energyIn [in] The energy of the incoming photon. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energyOut [in] The energy of the scattered photon. + * @param a_mu [in] The cosine of the angle of the scattered photon's z-axis and the incoming photon's z-axis. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI_sampleKleinNishina( double a_energyIn, RNG && a_rng, double *a_energyOut, double *a_mu ) { +/* + Description + Sample the Klein-Nishina distribution. + The unit of energy is the rest mass of the electron. + Reference: R. N. Blomquist and E. N. Gelbard, Nuclear Science + and Engineering, 83, 380-384 (1983) + + This routine was taken from MCAPM which was from MCNP with only cosmetic changes. + + Input + a_energyIn - incident photon energy ( in electron rest mass units ) + *rng - user supplied random number generator + Output + *a_energyOut - exiting photon energy ( in electron rest mass units ) + *a_mu - exiting photon cosine +*/ + + double a1, b1, t1, s1, r1, mu, energyOut; + + a1 = 1.0 / a_energyIn; + b1 = 1.0 / ( 1.0 + 2.0 * a_energyIn ); + + if( a_energyIn < 3.0 ) { // Kahn''s method ( e < 1.5 MeV ) AECU-3259. + bool reject = true; + + t1 = 1.0 / ( 1.0 + 8.0 * b1 ); + do { + if( a_rng( ) <= t1 ) { + r1 = 2.0 * a_rng( ); + s1 = 1.0 / ( 1.0 + a_energyIn * r1 ); + mu = 1.0 - r1; + reject = a_rng( ) > 4.0 * s1 * ( 1.0 - s1 ); } + else { + s1 = ( 1.0 + 2.0 * a_energyIn * a_rng( ) ) * b1; + mu = 1.0 + a1 * ( 1.0 - 1.0 / s1 ); + reject = a_rng( ) > 0.5 * ( mu * mu + s1 ); + } + } while( reject ); + energyOut = a_energyIn / ( 1 + a_energyIn * ( 1 - mu ) ); } + else { // Koblinger''s method ( e > 1.5 MeV ) NSE 56, 218 ( 1975 ). + t1 = a_rng( ) * ( 4.0 * a1 + 0.5 * ( 1.0 - b1 * b1 ) - ( 1.0 - 2.0 * ( 1.0 + a_energyIn ) * ( a1 * a1 ) ) * log( b1 ) ); + if( t1 > 2.0 * a1 ) { + if( t1 > 4.0 * a1 ) { + if( t1 > 4.0 * a1 + 0.5 * ( 1.0 - b1 * b1 ) ) { + energyOut = a_energyIn * pow( b1, a_rng( ) ); + mu = 1.0 + a1 - 1.0 / energyOut; } + else { + energyOut = a_energyIn * sqrt( 1.0 - a_rng( ) * ( 1.0 - b1 * b1 ) ); + mu = 1.0 + a1 - 1.0 / energyOut; + } } + else { + energyOut = a_energyIn * ( 1.0 + a_rng( ) * ( b1 - 1.0 ) ); + mu = 1.0 + a1 - 1.0 / energyOut; } } + else { + r1 = 2.0 * a_rng( ); + mu = 1.0 - r1; + energyOut = 1.0 / ( a1 + r1 ); + } + } + + *a_mu = mu; + *a_energyOut = energyOut; + + return; +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data for the two outgoing particles in a two-body outgoing channel. + * First, is samples *mu*, the cosine of the product's outgoing angle, since this is for two-body interactions, *mu* + * is in the center-of-mass frame. It then calls kinetics_COMKineticEnergy2LabEnergyAndMomentum. + * + * @param a_X [in] The energy of the projectile in the lab frame. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::Distribution::sample( double a_X, MCGIDI::Sampling::Input &a_input, RNG && a_rng ) const { + + switch( type( ) ) { + case Distributions::Type::none: + break; + case Distributions::Type::unspecified: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::angularTwoBody: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::KalbachMann: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::uncorrelated: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::branching3d: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::energyAngularMC: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::angularEnergyMC: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::coherentPhotoAtomicScattering: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::incoherentPhotoAtomicScattering: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::pairProductionGamma: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::coherentElasticTNSL: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + case Distributions::Type::incoherentElasticTNSL: + static_cast( this )->sample( a_X, a_input, a_rng ); + break; + } +} + +// From file: MCGIDI_distributions.cpp + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [out] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::Distribution::angleBiasing( Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, + RNG && a_rng, double &a_energy_out ) const { + + double probability = 0.0; + a_energy_out = 0.0; + + switch( type( ) ) { + case Distributions::Type::none: + break; + case Distributions::Type::unspecified: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::angularTwoBody: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::KalbachMann: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::uncorrelated: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::branching3d: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::energyAngularMC: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::angularEnergyMC: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::coherentPhotoAtomicScattering: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::incoherentPhotoAtomicScattering: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::pairProductionGamma: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::coherentElasticTNSL: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + case Distributions::Type::incoherentElasticTNSL: + probability = static_cast( this )->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, + a_rng, a_energy_out ); + break; + } + + return( probability ); +} + +/* *********************************************************************************************************//** + * This function calculates the products outgoing data (i.e., energy, velocity/momentum) for the two products of + * a two-body interaction give the cosine of the first product's outgoing angle. + * + * @param a_beta [in] The velocity/speedOflight of the com frame relative to the lab frame. + * @param a_kinetic_com [in] Total kinetic energy (K1 + K2) in the COM frame. + * @param a_m3cc [in] The mass of the first product. + * @param a_m4cc [in] The mass of the second product. + * @param a_input [in] Sample options requested by user and where the products' outgoing data are returned. + ***********************************************************************************************************/ + +inline LUPI_HOST_DEVICE void kinetics_COMKineticEnergy2LabEnergyAndMomentum( double a_beta, double a_kinetic_com, + double a_m3cc, double a_m4cc, MCGIDI::Sampling::Input &a_input ) { +/* + Relativity: + E = K + m, E^2 = K^2 + 2 K m + m^2, E^2 - m^2 = p^2 = K^2 + 2 K m + + pc p v + ---- = v, --- = --- = beta = b + E E c + + K ( K + 2 m ) + b^2 = --------------- + ( K + m )^2 +*/ + double x, v_p, p, pp3, pp4, px3, py3, pz3, pz4, pz, p_perp2, E3, E4, gamma, m3cc2 = a_m3cc * a_m3cc, m4cc2 = a_m4cc * a_m4cc; + + p = sqrt( a_kinetic_com * ( a_kinetic_com + 2. * a_m3cc ) * ( a_kinetic_com + 2. * a_m4cc ) * + ( a_kinetic_com + 2. * ( a_m3cc + a_m4cc ) ) ) / ( 2. * ( a_kinetic_com + a_m3cc + a_m4cc ) ); + + py3 = p * sqrt( 1 - a_input.m_mu * a_input.m_mu ); + px3 = py3 * cos( a_input.m_phi ); + py3 *= sin( a_input.m_phi ); + pz = p * a_input.m_mu; + if( 1 ) { // FIXME Assuming the answer is wanted in the lab frame for now. + a_input.m_frame = GIDI::Frame::lab; + E3 = sqrt( p * p + m3cc2 ); + E4 = sqrt( p * p + m4cc2 ); + gamma = sqrt( 1. / ( 1. - a_beta * a_beta ) ); + pz3 = gamma * ( pz + a_beta * E3 ); + pz4 = gamma * ( -pz + a_beta * E4 ); } + else { // COM frame. + a_input.m_frame = GIDI::Frame::centerOfMass; + pz3 = pz; + pz4 = -pz; + } + + p_perp2 = px3 * px3 + py3 * py3; + + a_input.m_px_vx1 = px3; + a_input.m_py_vy1 = py3; + a_input.m_pz_vz1 = pz3; + pp3 = p_perp2 + pz3 * pz3; + x = ( a_m3cc > 0 ) ? pp3 / ( 2 * m3cc2 ) : 1.; + if( x < 1e-5 ) { + a_input.m_energyOut1 = a_m3cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); } + else { + a_input.m_energyOut1 = sqrt( m3cc2 + pp3 ) - a_m3cc; + } + a_input.m_px_vx2 = -px3; + a_input.m_py_vy2 = -py3; + a_input.m_pz_vz2 = pz4; + pp4 = p_perp2 + pz4 * pz4; + x = ( a_m4cc > 0 ) ? pp4 / ( 2 * m4cc2 ) : 1.; + if( x < 1e-5 ) { + a_input.m_energyOut2 = a_m4cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); } + else { + a_input.m_energyOut2 = sqrt( m4cc2 + pp4 ) - a_m4cc; + } + + if( a_input.wantVelocity( ) ) { + v_p = MCGIDI_speedOfLight_cm_sec / sqrt( pp3 + m3cc2 ); + a_input.m_px_vx1 *= v_p; + a_input.m_py_vy1 *= v_p; + a_input.m_pz_vz1 *= v_p; + + v_p = MCGIDI_speedOfLight_cm_sec / sqrt( pp4 + m4cc2 ); + a_input.m_px_vx2 *= v_p; + a_input.m_py_vy2 *= v_p; + a_input.m_pz_vz2 *= v_p; + } +} + + +/* *********************************************************************************************************//** + * This method samples the outgoing product data for the two outgoing particles in a two-body outgoing channel. + * First, is samples *mu*, the cosine of the product's outgoing angle, since this is for two-body interactions, *mu* + * is in the center-of-mass frame. It then calls kinetics_COMKineticEnergy2LabEnergyAndMomentum. + * + * @param a_X [in] The energy of the projectile in the lab frame. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::AngularTwoBody::sample( double a_X, MCGIDI::Sampling::Input &a_input, RNG && a_rng ) const { + + double initialMass = projectileMass( ) + targetMass( ), finalMass = productMass( ) + m_residualMass; + double beta = sqrt( a_X * ( a_X + 2. * projectileMass( ) ) ) / ( a_X + initialMass ); // beta = v/c. + double _x = targetMass( ) * ( a_X - m_twoBodyThreshold ) / ( finalMass * finalMass ); + double Kp; // Kp is the total kinetic energy for m3 and m4 in the COM frame. + + a_input.m_sampledType = Sampling::SampledType::firstTwoBody; + + if( m_Upscatter ) { + if( ( a_input.m_upscatterModel == Sampling::Upscatter::Model::B ) || ( a_input.m_upscatterModel == Sampling::Upscatter::Model::BSnLimits ) + || ( a_input.m_upscatterModel == Sampling::Upscatter::Model::DBRC ) ) { + if( upscatterModelB( a_X, a_input, a_rng ) ) return; + } + } + + if( _x < 2e-5 ) { + Kp = finalMass * _x * ( 1 - 0.5 * _x * ( 1 - _x ) ); } + else { // This is the relativistic formula derived from E^2 - (pc)^2 is frame independent. + Kp = sqrt( finalMass * finalMass + 2 * targetMass( ) * ( a_X - m_twoBodyThreshold ) ) - finalMass; + } + if( Kp < 0 ) Kp = 0.; // FIXME There needs to be a better test here. + + a_input.m_mu = m_angular->sample( a_X, a_rng( ), a_rng ); + a_input.m_phi = 2. * M_PI * a_rng( ); + kinetics_COMKineticEnergy2LabEnergyAndMomentum( beta, Kp, productMass( ), m_residualMass, a_input ); +} + + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [out] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::AngularTwoBody::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = 0.0; + + double initialMass = projectileMass( ) + targetMass( ), finalMass = productMass( ) + m_residualMass; + double _x = targetMass( ) * ( a_energy_in - m_twoBodyThreshold ) / ( finalMass * finalMass ); + double Kp; // Total kinetic energy of products in the center-of-mass. + + if( _x < 2e-5 ) { + Kp = finalMass * _x * ( 1 - 0.5 * _x * ( 1 - _x ) ); } + else { // This is the relativistic formula derived from E^2 - (pc)^2 which is frame independent (i.e., an invariant). + Kp = sqrt( finalMass * finalMass + 2.0 * targetMass( ) * ( a_energy_in - m_twoBodyThreshold ) ) - finalMass; + } + if( Kp < 0 ) Kp = 0.; // FIXME There needs to be a better test here. + + double energy_product_com = 0.5 * Kp * ( Kp + 2.0 * m_residualMass ) / ( Kp + productMass( ) + m_residualMass ); + + if( productMass( ) == 0.0 ) { + double boostBeta = sqrt( a_energy_in * ( a_energy_in + 2. * projectileMass( ) ) ) / ( a_energy_in + initialMass ); // Good, even for projectileMass = 0. + double one_mu_beta = 1.0 - a_mu_lab * boostBeta; + double mu_com = ( a_mu_lab - boostBeta ) / one_mu_beta; + double Jacobian = ( 1.0 - boostBeta * boostBeta ) / ( one_mu_beta * one_mu_beta ); + + a_energy_out = sqrt( 1.0 - boostBeta * boostBeta ) * energy_product_com * ( 1.0 + mu_com * boostBeta ); + + return( Jacobian * m_angular->evaluate( a_energy_in, mu_com ) ); + } + + double productBeta = MCGIDI_particleBeta( productMass( ), energy_product_com ); + double boostBeta = sqrt( a_energy_in * ( a_energy_in + 2. * projectileMass( ) ) ) / ( a_energy_in + initialMass ); // beta = v/c. + double muPlus = 0.0, JacobianPlus = 0.0, muMinus = 0.0, JacobianMinus = 0.0; + + int numberOfMus = muCOM_From_muLab( a_mu_lab, boostBeta, productBeta, muPlus, JacobianPlus, muMinus, JacobianMinus ); + + if( numberOfMus == 0 ) return( 0.0 ); + + double probability = JacobianPlus * m_angular->evaluate( a_energy_in, muPlus ); + + if( numberOfMus == 2 ) { + double probabilityMinus = JacobianMinus * m_angular->evaluate( a_energy_in, muMinus ); + probability += probabilityMinus; + if( probabilityMinus > a_rng( ) * probability ) { + muPlus = muMinus; + } + } + + double productBeta2 = productBeta * productBeta; + double productBetaLab2 = productBeta2 + boostBeta * boostBeta * ( 1.0 - productBeta2 * ( 1.0 - muPlus * muPlus ) ) + 2.0 * muPlus * productBeta * boostBeta; + productBetaLab2 /= 1.0 - muPlus * productBeta * boostBeta; + a_energy_out = MCGIDI::particleKineticEnergyFromBeta2( productMass( ), productBetaLab2 ); + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples a targets velocity for elastic upscattering for upscatter model B and then calculates the outgoing + * product data for the projectile and target. + * + * @param a_kineticLab [in] The kinetic energy of the projectile in the lab frame. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE bool MCGIDI::Distributions::AngularTwoBody::upscatterModelB( double a_kineticLab, Sampling::Input &a_input, RNG && a_rng ) const { + + const double Two_sqrtPi = 1.1283791670955125739; + const double C0 = 1.0410423479, C1 = 3.9626339162e-4, C2 =-1.8654539193e-3, C3 = 1.0264818153e-4; + double neutronMass = projectileMass( ); // Mass are in incident energy unit / c**2. + double _targetMass = targetMass( ); + double temperature = 1e-3 * a_input.m_temperature; // Assumes m_temperature is in keV/K. + double kineticLabMax = 1e4 * temperature; + + if( a_input.m_upscatterModel == Sampling::Upscatter::Model::BSnLimits ) { + double kineticLabMax200 = 200.0 * temperature; + + kineticLabMax = 1e3 * temperature * neutronMass / _targetMass; + if( kineticLabMax < kineticLabMax200 ) kineticLabMax = kineticLabMax200; + if( a_kineticLab >= 0.1 ) kineticLabMax = 0.9 * a_kineticLab; } + else { + if( kineticLabMax > 1e-2 ) { + kineticLabMax = 1e-2; + if( kineticLabMax < 100.0 * temperature ) { + kineticLabMax = 100.0 * temperature; + if( kineticLabMax > 10.0 ) kineticLabMax = 10.0; // Assumes energy is in MeV. + } + } + } + + if( a_kineticLab > kineticLabMax ) return( false ); // Only for low neutron energy. + + a_input.m_frame = GIDI::Frame::lab; + + double muProjectileTarget, relativeBeta, targetBeta; + double targetThermalBeta = MCGIDI_particleBeta( _targetMass, temperature ); + double neutronBeta = MCGIDI_particleBeta( neutronMass, a_kineticLab ); + + a_input.m_numberOfDBRC_rejections = 0; + bool continueLoop = false; + double crossSectionMax = 0.0; + if( a_input.m_upscatterModel == Sampling::Upscatter::Model::DBRC ) { + double targetThermalSpeed = m_modelDBRC_data->targetThermalSpeed( temperature ); // Non-relativistic calculations, unlike targetThermalBeta. + crossSectionMax = m_modelDBRC_data->crossSectionMax( a_kineticLab, targetThermalSpeed ); + } + do { + continueLoop = false; + ++a_input.m_numberOfDBRC_rejections; + do { + int MethodP1orP2 = 0; /* Assume P2 */ + if( a_rng( ) * ( neutronBeta + Two_sqrtPi * targetThermalBeta ) < neutronBeta ) MethodP1orP2 = 1; + muProjectileTarget = 1.0 - 2.0 * a_rng( ); + if( MethodP1orP2 == 0 ) { // x Exp( -x ) term. + targetBeta = targetThermalBeta * sqrt( -log( ( 1.0 - a_rng( ) ) * ( 1.0 - a_rng( ) ) ) ); } + else { // x^2 Exp( -x^2 ) term. + double x1; + do { + x1 = a_rng( ); + x1 = sqrt( -log( ( 1.0 - a_rng( ) ) * ( 1.0 - x1 * x1 ) ) ); + x1 = x1 / ( ( ( C3 * x1 + C2 ) * x1 + C1 ) * x1 + C0 ); + } while( x1 > 4.0 ); + targetBeta = targetThermalBeta * x1; + } + relativeBeta = sqrt( targetBeta * targetBeta + neutronBeta * neutronBeta - 2 * muProjectileTarget * targetBeta * neutronBeta ); + } while( relativeBeta < ( targetBeta + neutronBeta ) * a_rng( ) ); + if( a_input.m_upscatterModel == Sampling::Upscatter::Model::DBRC ) { + double relativeNeutronEnergy = 0.5 * productMass( ) * relativeBeta * relativeBeta; + if( m_modelDBRC_data->evaluate( relativeNeutronEnergy ) < a_rng( ) * crossSectionMax ) continueLoop = true; + } + } while( continueLoop ); + + double m1_12 = neutronMass / ( neutronMass + _targetMass ); + double m2_12 = _targetMass / ( neutronMass + _targetMass ); + + double cosRelative = 0.0; // Cosine of angle between projectile velocity and relative velocity. + if( relativeBeta != 0.0 ) cosRelative = ( neutronBeta - muProjectileTarget * targetBeta ) / relativeBeta; + if( cosRelative > 1.0 ) { + cosRelative = 1.0; } + else if( cosRelative < -1.0 ) { + cosRelative = -1.0; + } + double sinRelative = sqrt( 1.0 - cosRelative * cosRelative ); // Sine of angle between projectile velocity and relative velocity. + + a_input.m_relativeMu = cosRelative; + a_input.m_targetBeta = targetBeta; + a_input.m_relativeBeta = relativeBeta; + + double betaNeutronOut = m2_12 * relativeBeta; + double kineticEnergyRelative = particleKineticEnergy( neutronMass, betaNeutronOut ); + double muCOM = m_angular->sample( kineticEnergyRelative, a_rng( ), a_rng ); + double phiCOM = 2.0 * M_PI * a_rng( ); + double SCcom = sqrt( 1.0 - muCOM * muCOM ); + double SScom = SCcom * sin( phiCOM ); + SCcom *= cos( phiCOM ); + + a_input.m_pz_vz1 = betaNeutronOut * ( muCOM * cosRelative - SCcom * sinRelative ); + a_input.m_px_vx1 = betaNeutronOut * ( muCOM * sinRelative + SCcom * cosRelative ); + a_input.m_py_vy1 = betaNeutronOut * SScom; + + double massRatio = -neutronMass / _targetMass; + a_input.m_pz_vz2 = massRatio * a_input.m_pz_vz1; + a_input.m_px_vx2 = massRatio * a_input.m_px_vx1; + a_input.m_py_vy2 = massRatio * a_input.m_py_vy1; + + double vCOMz = m1_12 * neutronBeta + m2_12 * muProjectileTarget * targetBeta; // Boost from center-of-mass to lab frame. + double vCOMx = m2_12 * sqrt( 1.0 - muProjectileTarget * muProjectileTarget ) * targetBeta; + a_input.m_pz_vz1 += vCOMz; + a_input.m_px_vx1 += vCOMx; + a_input.m_pz_vz2 += vCOMz; + a_input.m_px_vx2 += vCOMx; + + double vx2_vy2 = a_input.m_px_vx1 * a_input.m_px_vx1 + a_input.m_py_vy1 * a_input.m_py_vy1; + double v2 = a_input.m_pz_vz1 * a_input.m_pz_vz1 + vx2_vy2; + a_input.m_mu = 0.0; + if( v2 != 0.0 ) a_input.m_mu = a_input.m_pz_vz1 / sqrt( v2 ); + a_input.m_phi = atan2( a_input.m_py_vy1, a_input.m_px_vx1 ); + + a_input.m_energyOut1 = MCGIDI::particleKineticEnergyFromBeta2( neutronMass, v2 ); + a_input.m_energyOut2 = MCGIDI::particleKineticEnergyFromBeta2( _targetMass, a_input.m_px_vx2 * a_input.m_px_vx2 + a_input.m_py_vy2 * a_input.m_py_vy2 + a_input.m_pz_vz2 * a_input.m_pz_vz2 ); + + a_input.m_px_vx1 *= MCGIDI_speedOfLight_cm_sec; + a_input.m_py_vy1 *= MCGIDI_speedOfLight_cm_sec; + a_input.m_pz_vz1 *= MCGIDI_speedOfLight_cm_sec; + + a_input.m_px_vx2 *= MCGIDI_speedOfLight_cm_sec; + a_input.m_py_vy2 *= MCGIDI_speedOfLight_cm_sec; + a_input.m_pz_vz2 *= MCGIDI_speedOfLight_cm_sec; + + if( !a_input.wantVelocity( ) ) { // Return momenta. + a_input.m_px_vx1 *= neutronMass; // Non-relativistic. + a_input.m_py_vy1 *= neutronMass; + a_input.m_pz_vz1 *= neutronMass; + + a_input.m_px_vx2 *= _targetMass; + a_input.m_py_vy2 *= _targetMass; + a_input.m_pz_vz2 *= _targetMass; + } + + double phi = 2.0 * M_PI * a_rng( ); + double sine = sin( phi ); + double cosine = cos( phi ); + + double saved = a_input.m_px_vx1; + a_input.m_px_vx1 = cosine * a_input.m_px_vx1 - sine * a_input.m_py_vy1; + a_input.m_py_vy1 = sine * saved + cosine * a_input.m_py_vy1; + + return( true ); +} + + +/* *********************************************************************************************************//** + * This method samples the outgoing product data by sampling the outgoing energy E' and mu from the uncorrelated + * E and mu probabilities. It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::Uncorrelated::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_mu = m_angular->sample( a_X, a_rng( ), a_rng ); + a_input.m_energyOut1 = m_energy->sample( a_X, a_rng( ), a_rng ); + a_input.m_phi = 2. * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::Uncorrelated::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + if( productFrame( ) != GIDI::Frame::lab ) { + a_energy_out = 0.0; + + double initialMass = projectileMass( ) + targetMass( ); + double boostBeta = sqrt( a_energy_in * ( a_energy_in + 2. * projectileMass( ) ) ) / ( a_energy_in + initialMass ); // Good, even for projectileMass = 0. + double energy_out_com = m_energy->sample( a_energy_in, a_rng( ), a_rng ); + + if( productMass( ) == 0.0 ) { + double one_mu_beta = 1.0 - a_mu_lab * boostBeta; + double mu_com = ( a_mu_lab - boostBeta ) / one_mu_beta; + double Jacobian = ( 1.0 - boostBeta * boostBeta ) / ( one_mu_beta * one_mu_beta ); + + a_energy_out = sqrt( 1.0 - boostBeta * boostBeta ) * energy_out_com * ( 1.0 + mu_com * boostBeta ); + + return( Jacobian * m_angular->evaluate( a_energy_in, mu_com ) ); + } + + double productBeta = MCGIDI_particleBeta( productMass( ), energy_out_com ); + double muPlus = 0.0, JacobianPlus = 0.0, muMinus = 0.0, JacobianMinus = 0.0; + int numberOfMus = muCOM_From_muLab( a_mu_lab, boostBeta, productBeta, muPlus, JacobianPlus, muMinus, JacobianMinus ); + + if( numberOfMus == 0 ) return( 0.0 ); + + double probability = JacobianPlus * m_angular->evaluate( a_energy_in, muPlus ); + + if( numberOfMus == 2 ) { + double probabilityMinus = JacobianMinus * m_angular->evaluate( a_energy_in, muMinus ); + + probability += probabilityMinus; + if( probabilityMinus > a_rng( ) * probability ) muPlus = muMinus; + } + + double productBeta2 = productBeta * productBeta; + double productBetaLab2 = productBeta2 + boostBeta * boostBeta * ( 1.0 - productBeta2 * ( 1.0 - muPlus * muPlus ) ) + 2.0 * muPlus * productBeta * boostBeta; + productBetaLab2 /= 1.0 - muPlus * productBeta * boostBeta; + a_energy_out = MCGIDI::particleKineticEnergyFromBeta2( productMass( ), productBetaLab2 ); + + return( probability ); + } + + a_energy_out = m_energy->sample( a_energy_in, a_rng( ), a_rng ); + return( m_angular->evaluate( a_energy_in, a_mu_lab ) ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing branching photons. + * + * @param a_X [in] The energy of the projectile in the lab frame. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::Branching3d::sample( LUPI_maybeUnused double a_X, LUPI_maybeUnused Sampling::Input &a_input, LUPI_maybeUnused RNG && a_rng ) const { + +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::Branching3d::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + LUPI_maybeUnused double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG && a_rng, LUPI_maybeUnused double &a_energy_out ) const { + + double probability = 0.0; + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data by sampling the outgoing energy E' from the probability P(E'|E) and then samples mu from + * the probability P(mu|E,E'). It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::EnergyAngularMC::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + double energyOut_1, energyOut_2; + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = m_energy->sample2dOf3d( a_X, a_rng( ), a_rng, &energyOut_1, &energyOut_2 ); + a_input.m_mu = m_angularGivenEnergy->sample( a_X, energyOut_1, energyOut_2, a_rng( ), a_rng ); + a_input.m_phi = 2. * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::EnergyAngularMC::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + double probability = 0.0; + + if( productFrame( ) == GIDI::Frame::centerOfMass ) { + a_energy_out = m_energy->sample( a_energy_in, a_rng( ), a_rng ); + + double initialMass = projectileMass( ) + targetMass( ); + double boostBeta = sqrt( a_energy_in * ( a_energy_in + 2. * projectileMass( ) ) ) / ( a_energy_in + initialMass ); // Good, even for projectileMass = 0. + double energy_out_com = m_energy->sample( a_energy_in, a_rng( ), a_rng ); + + if( productMass( ) == 0.0 ) { + double one_mu_beta = 1.0 - a_mu_lab * boostBeta; + double mu_com = ( a_mu_lab - boostBeta ) / one_mu_beta; + double Jacobian = ( 1.0 - boostBeta * boostBeta ) / ( one_mu_beta * one_mu_beta ); + + a_energy_out = sqrt( 1.0 - boostBeta * boostBeta ) * energy_out_com * ( 1.0 + mu_com * boostBeta ); + + return( Jacobian * m_angularGivenEnergy->evaluate( a_energy_in, energy_out_com, mu_com ) ); + } + + double productBeta = MCGIDI_particleBeta( productMass( ), energy_out_com ); + double muPlus = 0.0, JacobianPlus = 0.0, muMinus = 0.0, JacobianMinus = 0.0; + int numberOfMus = muCOM_From_muLab( a_mu_lab, boostBeta, productBeta, muPlus, JacobianPlus, muMinus, JacobianMinus ); + + if( numberOfMus == 0 ) return( 0.0 ); + + probability = JacobianPlus * m_angularGivenEnergy->evaluate( a_energy_in, energy_out_com, muPlus ); + + if( numberOfMus == 2 ) { + double probabilityMinus = JacobianMinus * m_angularGivenEnergy->evaluate( a_energy_in, energy_out_com, muMinus ); + + probability += probabilityMinus; + if( probabilityMinus > a_rng( ) * probability ) muPlus = muMinus; + } + + double productBeta2 = productBeta * productBeta; + double productBetaLab2 = productBeta2 + boostBeta * boostBeta * ( 1.0 - productBeta2 * ( 1.0 - muPlus * muPlus ) ) + 2.0 * muPlus * productBeta * boostBeta; + productBetaLab2 /= 1.0 - muPlus * productBeta * boostBeta; + a_energy_out = MCGIDI::particleKineticEnergyFromBeta2( productMass( ), productBetaLab2 ); } + else { + a_energy_out = m_energy->sample( a_energy_in, a_rng( ), a_rng ); + probability = m_angularGivenEnergy->evaluate( a_energy_in, a_energy_out, a_mu_lab ); + } + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data by sampling the outgoing mu from the probability P(mu|E) and then samples E' from + * the probability P(E'|E,mu). It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::AngularEnergyMC::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + double mu_1, mu_2; + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_mu = m_angular->sample2dOf3d( a_X, a_rng( ), a_rng, &mu_1, &mu_2 ); + a_input.m_energyOut1 = m_energyGivenAngular->sample( a_X, mu_1, mu_2, a_rng( ), a_rng ); + a_input.m_phi = 2. * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::AngularEnergyMC::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + if( productFrame( ) != GIDI::Frame::lab ) LUPI_THROW( "AngularEnergyMC::angleBiasing: center-of-mass not supported." ); + + a_energy_out = m_energyGivenAngular->sample( a_energy_in, a_mu_lab, a_mu_lab, a_rng( ), a_rng ); + return( m_angular->evaluate( a_energy_in, a_mu_lab ) ); +} + + +/* *********************************************************************************************************//** + * This method samples the outgoing product data using the Kalbach-Mann formalism. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::KalbachMann::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = m_f->sample( a_X, a_rng( ), a_rng ); + double rValue = m_r->evaluate( a_X, a_input.m_energyOut1 ); + double aValue = m_a->evaluate( a_X, a_input.m_energyOut1 ); + + // In the following: Cosh[ a mu ] + r Sinh[ a mu ] = ( 1 - r ) Cosh[ a mu ] + r ( Cosh[ a mu ] + Sinh[ a mu ] ). + if( a_rng( ) >= rValue ) { // Sample the '( 1 - r ) Cosh[ a mu ]' term. + double T = ( 2. * a_rng( ) - 1. ) * sinh( aValue ); + + a_input.m_mu = log( T + sqrt( T * T + 1. ) ) / aValue; } + else { // Sample the 'r ( Cosh[ a mu ] + Sinh[ a mu ] )' term. + double rng1 = a_rng( ), exp_a = exp( aValue ); + + a_input.m_mu = log( rng1 * exp_a + ( 1. - rng1 ) / exp_a ) / aValue; + } + if( a_input.m_mu < -1 ) a_input.m_mu = -1; + if( a_input.m_mu > 1 ) a_input.m_mu = 1; + + a_input.m_phi = 2. * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::KalbachMann::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = 0.0; + + double initialMass = projectileMass( ) + targetMass( ); + double energy_out_com = m_f->sample( a_energy_in, a_rng( ), a_rng ); + double productBeta = MCGIDI_particleBeta( productMass( ), energy_out_com ); + double boostBeta = sqrt( a_energy_in * ( a_energy_in + 2. * projectileMass( ) ) ) / ( a_energy_in + initialMass ); // beta = v/c. + + double muPlus = 0.0, JacobianPlus = 0.0, muMinus = 0.0, JacobianMinus = 0.0; + + int numberOfMus = muCOM_From_muLab( a_mu_lab, boostBeta, productBeta, muPlus, JacobianPlus, muMinus, JacobianMinus ); + + if( numberOfMus == 0 ) return( 0.0 ); + + double rAtEnergyEnergyPrime = m_r->evaluate( a_energy_in, energy_out_com ); + double aAtEnergyEnergyPrime = m_a->evaluate( a_energy_in, energy_out_com ); + double aMu = aAtEnergyEnergyPrime * muPlus; + + double probability = 0.5 * JacobianPlus; + if( productMass( ) == 0.0 ) { + probability *= 1.0 - rAtEnergyEnergyPrime + rAtEnergyEnergyPrime * aAtEnergyEnergyPrime * exp( aMu ) / sinh( aAtEnergyEnergyPrime ); } + else { + probability *= aAtEnergyEnergyPrime * ( cosh( aMu ) + rAtEnergyEnergyPrime * cosh( aMu ) ) / sinh( aAtEnergyEnergyPrime ); + } + + if( numberOfMus == 2 ) { + aMu = aAtEnergyEnergyPrime * muMinus; + + double probabilityMinus = 0.5 * JacobianMinus; + if( productMass( ) == 0.0 ) { + probabilityMinus *= 1.0 - rAtEnergyEnergyPrime + rAtEnergyEnergyPrime * aAtEnergyEnergyPrime * exp( aMu ) / sinh( aAtEnergyEnergyPrime ); } + else { + probabilityMinus *= aAtEnergyEnergyPrime * ( cosh( aMu ) + rAtEnergyEnergyPrime * cosh( aMu ) ) / sinh( aAtEnergyEnergyPrime ); + } + probability += probabilityMinus; + + if( probabilityMinus > a_rng( ) * probability ) muPlus = muMinus; + } + + double productBeta2 = productBeta * productBeta; + double productBetaLab2 = productBeta2 + boostBeta * boostBeta * ( 1.0 - productBeta2 * ( 1.0 - muPlus * muPlus ) ) + 2.0 * muPlus * productBeta * boostBeta; + productBetaLab2 /= 1.0 - muPlus * productBeta * boostBeta; + a_energy_out = MCGIDI::particleKineticEnergyFromBeta2( productMass( ), productBetaLab2 ); + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data from the coherent photo-atomic scattering law. + * It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile in the lab frame. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::CoherentPhotoAtomicScattering::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + a_input.m_energyOut1 = a_X; + + int lowerIndex = binarySearchVector( a_X, m_energies ); + + if( lowerIndex < 1 ) { + do { + a_input.m_mu = 1.0 - 2.0 * a_rng( ); + } while( ( 1.0 + a_input.m_mu * a_input.m_mu ) < 2.0 * a_rng( ) ); } + else { + double _a = m_a[lowerIndex]; + double X_i = m_energies[lowerIndex]; + double formFactor_i = m_formFactor[lowerIndex]; + double formFactor_X_i = formFactor_i * X_i; + double Z = a_X / X_i; + double realAnomalousFactor = 0.0; + double imaginaryAnomalousFactor = 0.0; + + if( m_anomalousDataPresent ) { + realAnomalousFactor = m_realAnomalousFactor->evaluate( a_X ); + imaginaryAnomalousFactor = m_imaginaryAnomalousFactor->evaluate( a_X ); + } + + double anomalousFactorSquared = realAnomalousFactor * realAnomalousFactor + imaginaryAnomalousFactor * imaginaryAnomalousFactor; + double normalization = m_integratedFormFactorSquared[lowerIndex] + formFactor_X_i * formFactor_X_i * Z_a( Z, 2.0 * _a + 2.0 ); + + anomalousFactorSquared = 0.0; + if( anomalousFactorSquared != 0.0 ) { + double integratedFormFactor_i = m_integratedFormFactor[lowerIndex] + formFactor_X_i * Z_a( Z, _a + 2.0 ); + + normalization += 2.0 * integratedFormFactor_i * realAnomalousFactor + 0.5 * anomalousFactorSquared * a_X * a_X; + } + + do { + double partialIntegral = a_rng( ) * normalization; + double X; + if( anomalousFactorSquared == 0.0 ) { + lowerIndex = binarySearchVector( partialIntegral, m_integratedFormFactorSquared ); + + if( lowerIndex == 0 ) { + X = sqrt( 2.0 * partialIntegral ) / m_formFactor[0]; } + else { + double remainer = partialIntegral - m_integratedFormFactorSquared[lowerIndex]; + double epsilon = 2.0 * m_a[lowerIndex] + 2.0; + + X_i = m_energies[lowerIndex]; + formFactor_i = m_formFactor[lowerIndex]; + formFactor_X_i = formFactor_i * X_i; + + remainer /= formFactor_X_i * formFactor_X_i; + if( fabs( epsilon ) < 1e-6 ) { + X = X_i * exp( remainer ); } + else { + X = X_i * pow( 1.0 + epsilon * remainer, 1.0 / epsilon ); + } + } } + else { // Currently not implemented. + X = 0.5 * a_X; + } + double X_E = X / a_X; + a_input.m_mu = 1.0 - 2.0 * X_E * X_E; + } while( ( 1.0 + a_input.m_mu * a_input.m_mu ) < 2.0 * a_rng( ) ); + } + + a_input.m_phi = 2.0 * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::CoherentPhotoAtomicScattering::angleBiasing( Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = a_energy_in; + + URR_protareInfos URR_protareInfos1; + double sigma = a_reaction->protareSingle( )->reactionCrossSection( a_reaction->reactionIndex( ), URR_protareInfos1, 0.0, a_energy_in ); + double formFactor = evaluateFormFactor( a_energy_in, a_mu_lab ); + double imaginaryAnomalousFactor = 0.0; + + if( m_anomalousDataPresent ) { + formFactor += m_realAnomalousFactor->evaluate( a_energy_in ); + imaginaryAnomalousFactor = m_imaginaryAnomalousFactor->evaluate( a_energy_in ); + } + + double probability = M_PI * MCGIDI_classicalElectronRadius * MCGIDI_classicalElectronRadius * ( 1.0 + a_mu_lab * a_mu_lab ) + * ( formFactor * formFactor + imaginaryAnomalousFactor * imaginaryAnomalousFactor ) / sigma; + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data by sampling the outgoing energy E' from the probability P(E'|E) and then samples mu from + * the probability P(mu|E,E'). It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentPhotoAtomicScattering::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + double k1 = a_X / PoPI_electronMass_MeV_c2; + double energyOut, mu, scatteringFactor; + + if( a_X >= m_energies.back( ) ) { + MCGIDI_sampleKleinNishina( k1, a_rng, &energyOut, &mu ); } + else { + double scatteringFactorMax = evaluateScatteringFactor( a_X ); + do { + MCGIDI_sampleKleinNishina( k1, a_rng, &energyOut, &mu ); + scatteringFactor = evaluateScatteringFactor( a_X * sqrt( 0.5 * ( 1.0 - mu ) ) ); + } while( scatteringFactor < a_rng( ) * scatteringFactorMax ); + } + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = energyOut * PoPI_electronMass_MeV_c2; + a_input.m_mu = mu; + a_input.m_phi = 2.0 * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing product data by sampling the outgoing energy E' from the probability P(E'|E) and then samples mu from + * the probability P(mu|E,E'). It also samples the outgoing phi uniformly between 0 and 2 pi. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_userrng [in] A random number generator that takes the state *a_rngState* and returns a double in the range [0.0, 1.0). + * @param a_rngState [in] The current state for the random number generator. + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentBoundToFreePhotoAtomicScattering::sample( double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + double energyOut, mu, occupationNumber; + // Convert incident photon energy [MeV] to units of rest mass energy of the electron + const double alpha_in = a_X / PoPI_electronMass_MeV_c2; + double alpha_ratio, occupation_pz, occupationNumberMax; + double quad_a = 0, quad_b = 0, quad_c = 0, pz = 0; // Initialize with dummy values to silence compiler warnings + + bool energetically_possible = false; + int ep_it = 0; + while( energetically_possible == false && ep_it < 1000 ){ + // Sample outgoing angle + occupationNumberMax = evaluateOccupationNumber( a_X, -1.0 ); + if( a_X >= 10.0 ) { // This condition is not yet correct + MCGIDI_sampleKleinNishina( alpha_in, a_rng, &energyOut, &mu ); } + else { + do { + MCGIDI_sampleKleinNishina( alpha_in, a_rng, &energyOut, &mu ); + occupationNumber = evaluateOccupationNumber( a_X, mu ); + } while( occupationNumber < occupationNumberMax * a_rng( ) ); + } + + // Sample electron momentum projection, pz + occupation_pz = occupationNumberMax*a_rng(); + int lowerIndex = binarySearchVector( occupation_pz, m_occupationNumber ); + if( lowerIndex == -1 ){ + pz = m_pz.back(); + } + else{ + pz = m_pz[lowerIndex] + (occupation_pz-m_occupationNumber[lowerIndex])*(m_pz[lowerIndex+1]-m_pz[lowerIndex])/(m_occupationNumber[lowerIndex+1]-m_occupationNumber[lowerIndex]); + } + + // Convert pz to outgoing photon energy + alpha_ratio = energyRatio(a_X, mu); + quad_a = pz*pz - (1/alpha_ratio)*(1/alpha_ratio); + quad_b = -2*alpha_in*( pz*pz * mu - (1/alpha_ratio)); + quad_c = alpha_in*alpha_in*( pz*pz - 1 ); + + if(quad_b*quad_b - 4*quad_a*quad_c > 0){ + energetically_possible = true; + } + ep_it = ep_it + 1; + } + + const double quad_1 = -quad_b/(2*quad_a) + sqrt( quad_b*quad_b - 4*quad_a*quad_c )/( 2*quad_a ); + const double quad_2 = -quad_b/(2*quad_a) - sqrt( quad_b*quad_b - 4*quad_a*quad_c )/( 2*quad_a ); + + // Select the correct outgoing energy based on the pz value + if(pz >= 0){ + if(quad_1 >= quad_2){ + energyOut = quad_1; + } + else{ + energyOut = quad_2; + } + } + else{ + if(quad_1 >= quad_2){ + energyOut = quad_2; + } + else{ + energyOut = quad_1; + } + } + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = energyOut * PoPI_electronMass_MeV_c2; + a_input.m_mu = mu; + a_input.m_phi = 2.0 * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); + +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentPhotoAtomicScattering::angleBiasing( Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + URR_protareInfos URR_protareInfos1; + double sigma = a_reaction->protareSingle( )->reactionCrossSection( a_reaction->reactionIndex( ), URR_protareInfos1, 0.0, a_energy_in ); + + double norm = M_PI * MCGIDI_classicalElectronRadius * MCGIDI_classicalElectronRadius / sigma; + + double one_minus_mu = 1.0 - a_mu_lab; + double k_in = a_energy_in / PoPI_electronMass_MeV_c2; + a_energy_out = a_energy_in / ( 1.0 + k_in * one_minus_mu ); + double k_out = a_energy_out / PoPI_electronMass_MeV_c2; + + double k_ratio = k_out / k_in; + double probability = evaluateScatteringFactor( a_energy_in * sqrt( 0.5 * one_minus_mu ) ); + probability *= k_ratio * k_ratio * ( 1.0 + a_mu_lab * a_mu_lab + k_in * k_out * one_minus_mu * one_minus_mu ) * norm; + + return( probability ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_userrng [in] A random number generator that takes the state *a_rngState* and returns a double in the range [0.0, 1.0). + * @param a_rngState [in] The current state for the random number generator. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentBoundToFreePhotoAtomicScattering::angleBiasing( Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, double a_mu_lab, RNG && a_rng, double &a_energy_out ) const { + + URR_protareInfos URR_protareInfos1; + double sigma = a_reaction->protareSingle( )->reactionCrossSection( a_reaction->reactionIndex( ), URR_protareInfos1, 0.0, a_energy_in ); + + double norm = M_PI * MCGIDI_classicalElectronRadius * MCGIDI_classicalElectronRadius / sigma; + + double one_minus_mu = 1.0 - a_mu_lab; + double alpha_in = a_energy_in / PoPI_electronMass_MeV_c2; + + double quad_a, quad_b, quad_c, alpha_ratio, pz, occupation_pz, occupationNumberMax; + + bool energetically_possible = false; + int ep_it = 0; + while( energetically_possible == false && ep_it < 1000 ){ + + // Sample electron momentum projection, pz + occupationNumberMax = evaluateOccupationNumber( a_energy_in, -1.0 ); + occupation_pz = occupationNumberMax*a_rng(); + int lowerIndex = binarySearchVector( occupation_pz, m_occupationNumber ); + pz = 0; + if( lowerIndex == -1 ){ + pz = m_pz.back(); + } + else{ + pz = m_pz[lowerIndex] + (occupation_pz-m_occupationNumber[lowerIndex])*(m_pz[lowerIndex+1]-m_pz[lowerIndex])/(m_occupationNumber[lowerIndex+1]-m_occupationNumber[lowerIndex]); + } + + // Convert pz to outgoing photon energy + alpha_ratio = energyRatio(a_energy_in, a_mu_lab); + quad_a = pz*pz - (1/alpha_ratio)*(1/alpha_ratio); + quad_b = -2*alpha_in*( pz*pz * a_mu_lab - (1/alpha_ratio)); + quad_c = alpha_in*alpha_in*( pz*pz - 1 ); + if(quad_b*quad_b - 4*quad_a*quad_c > 0){ + energetically_possible = true; + } + ep_it = ep_it + 1; + } + + const double quad_1 = -quad_b/(2*quad_a) + sqrt( quad_b*quad_b - 4*quad_a*quad_c )/( 2*quad_a ); + const double quad_2 = -quad_b/(2*quad_a) - sqrt( quad_b*quad_b - 4*quad_a*quad_c )/( 2*quad_a ); + + // Select the correct outgoing energy based on the pz value + double alpha_out = 0; + if(pz >= 0){ + if(quad_1 >= quad_2){ + alpha_out = quad_1; + } + else{ + alpha_out = quad_2; + } + } + else{ + if(quad_1 >= quad_2){ + alpha_out = quad_2; + } + else{ + alpha_out = quad_1; + } + } + alpha_ratio = alpha_out / alpha_in; + a_energy_out = alpha_out * PoPI_electronMass_MeV_c2; + double probability = evaluateOccupationNumber( a_energy_in, a_mu_lab ); + probability *= alpha_ratio * alpha_ratio * ( 1.0 + a_mu_lab * a_mu_lab + alpha_in * alpha_out * one_minus_mu * one_minus_mu ) * norm; + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method returns the outgoing electron energy and angle given that the photon when out at an angle of *a_input.m_mu*. + * Ergo, this method must be called directly after the photon has been sampled. + * + * @param a_energy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::sample( double a_energy, Sampling::Input &a_input, RNG && a_rng ) const { + + double halfTheta = 0.5 * acos( a_input.m_mu ); + double cot_psi = ( 1.0 + a_energy / PoPI_electronMass_MeV_c2 ) * tan( halfTheta ); + double psi = atan( 1.0 / cot_psi ); + + double deltaE_photon = a_energy - a_input.m_energyOut1; + double electronMomentum2 = deltaE_photon * ( deltaE_photon + 2.0 * PoPI_electronMass_MeV_c2 ); // Square of the electron outlgoing momentum. + + a_input.m_energyOut1 = electronMomentum2 / ( sqrt( electronMomentum2 + PoPI_electronMass_MeV_c2 * PoPI_electronMass_MeV_c2 ) + PoPI_electronMass_MeV_c2 ); + a_input.m_mu = cos( psi ); + a_input.m_phi = 2.0 * M_PI * a_rng( ); + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* causing a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * Currently, this method only returns 0.0 for the probability and outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + LUPI_maybeUnused double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = 0; + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing photon by assigning the electron rest mass energy as the photon's energy and, + * if m_firstSampled is true, randomly picking mu and phi. If m_firstSampled is false, the previous sampled particle + * that filled in a_input must be the other sampled photon, then, the mu and phi for the second-sampled photon is such that + * it is back-to-back with the other photon. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::PairProductionGamma::sample( LUPI_maybeUnused double a_X, Sampling::Input &a_input, RNG && a_rng ) const { + + if( m_firstSampled ) { + a_input.m_mu = 1.0 - 2.0 * a_rng( ); + a_input.m_phi = M_PI * a_rng( ); } + else { + a_input.m_mu *= -1.0; + a_input.m_phi += M_PI; + } + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = PoPI_electronMass_MeV_c2; + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::PairProductionGamma::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + LUPI_maybeUnused double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = PoPI_electronMass_MeV_c2; + return( 1.0 ); // 1.0 as there are two photons, each with 1/2 probability. +} + +/* *********************************************************************************************************//** + * This method samples the outgoing neutron data for coherent elastic TSNL from the Debye/Waller function. + * + * @param a_energy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::CoherentElasticTNSL::sample( double a_energy, Sampling::Input &a_input, + RNG && a_rng ) const { + + if( a_energy <= m_energies[0] ) { + a_input.m_mu = 1.0; } + else { + double temperature = 1e-3 * a_input.m_temperature; // Assumes m_temperature is in keV/K. + if( temperature < m_temperatures[0] ) temperature = m_temperatures[0]; + if( temperature > m_temperatures.back( ) ) temperature = m_temperatures.back( ); + std::size_t temperatureIndex = (std::size_t) MCGIDI::binarySearchVector( temperature, m_temperatures, true ); + double const *pointer1 = &m_S_table[temperatureIndex * m_energies.size( )]; + + double const *pointer2 = pointer1; + double fractionFirstTemperature = 1.0; + if( temperatureIndex != ( m_temperatures.size( ) - 1 ) ) { + fractionFirstTemperature = ( m_temperatures[temperatureIndex+1] - temperature ) / ( m_temperatures[temperatureIndex+1] - m_temperatures[temperatureIndex] ); + pointer2 += m_energies.size( ); + } + double fractionSecondTemperature = 1.0 - fractionFirstTemperature; + + int energyIndexMax = MCGIDI::binarySearchVector( a_energy, m_energies, true ); + if( a_energy == m_energies[energyIndexMax] ) --energyIndexMax; + + double randomTotal = a_rng( ) * ( fractionFirstTemperature * pointer1[energyIndexMax] + fractionSecondTemperature * pointer2[energyIndexMax] ); + int energyIndex = 0; + for( ; energyIndex < energyIndexMax; ++energyIndex ) { + if( randomTotal <= fractionFirstTemperature * pointer1[energyIndex] + fractionSecondTemperature * pointer2[energyIndex] ) break; + } + a_input.m_mu = 1.0 - 2.0 * m_energies[energyIndex] / a_energy; + } + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = a_energy; + a_input.m_phi = 2.0 * M_PI * a_rng( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::CoherentElasticTNSL::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + +// double temperature = 1e-3 * a_temperature; // Assumes a_temperature is in keV/K. + double probability = 0.0; + + a_energy_out = a_energy_in; + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method samples the outgoing neutron data for incoherent elastic TSNL from the Debye/Waller function. + * + * @param a_energy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentElasticTNSL::sample( double a_energy, Sampling::Input &a_input, + RNG && a_rng ) const { + + double temperature = 1e-3 * a_input.m_temperature / m_temperatureToMeV_K; // Assumes m_temperature is in keV/K. + double W_prime = m_DebyeWallerIntegral->evaluate( temperature ); + double twoEW = 2 * a_energy * W_prime; + double expOfTwice_twoEW = exp( -2 * twoEW ); + double sampled_cdf = a_rng( ); + + if( sampled_cdf > ( 1 - 1e-5 ) ) { + double Variable = ( 1.0 - sampled_cdf ) * ( 1.0 - expOfTwice_twoEW ); + a_input.m_mu = 1.0 - Variable * ( 1.0 + 0.5 * Variable ) / twoEW; } + else if( sampled_cdf < expOfTwice_twoEW ) { + a_input.m_mu = -1.0 + log( sampled_cdf / expOfTwice_twoEW * ( 1.0 - expOfTwice_twoEW ) + 1.0 ) / twoEW; } + else { + a_input.m_mu = 1.0 + log( expOfTwice_twoEW + sampled_cdf * ( 1.0 - expOfTwice_twoEW ) ) / twoEW; + } + + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_energyOut1 = a_energy; + a_input.m_phi = 2.0 * M_PI * a_rng( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] The temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentElasticTNSL::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, double a_temperature, + double a_energy_in, double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + double temperature = 1e-3 * a_temperature / m_temperatureToMeV_K; // Assumes a_temperature is in keV/K. + double W_prime = m_DebyeWallerIntegral->evaluate( temperature ); + double twoEW = 2 * a_energy_in * W_prime; + double probability = exp( -twoEW * ( 1.0 - a_mu_lab ) ) * twoEW / ( 1.0 - exp( -2 * twoEW ) ); + + a_energy_out = a_energy_in; + + return( probability ); +} + +/* *********************************************************************************************************//** + * The method sets all outgoing product data to 0.0 and set the sampledType to Sampling::unspecified. + * + * @param a_X [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Distributions::Unspecified::sample( LUPI_maybeUnused double a_X, Sampling::Input &a_input, LUPI_maybeUnused RNG && a_rng ) const { + + a_input.m_sampledType = Sampling::SampledType::unspecified; + a_input.m_energyOut1 = 0.; + a_input.m_mu = 0.; + a_input.m_phi = 0.; + a_input.m_frame = productFrame( ); +} + +/* *********************************************************************************************************//** + * Returns the probability for a projectile with energy *a_energy_in* to cause a particle to be emitted + * at angle *a_mu_lab* as seen in the lab frame. *a_energy_out* is the sampled outgoing energy. This one should never + * be called. If called, returns 0.0 for a probability. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * + * @return The probability of emitting outgoing particle into lab angle *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Distributions::Unspecified::angleBiasing( LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, + LUPI_maybeUnused double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG && a_rng, double &a_energy_out ) const { + + a_energy_out = 0.0; + return( 0.0 ); +} + + +// From file: MCGIDI_functions.cpp + +/* +============================================================ +*/ +template +LUPI_HOST_DEVICE int MCGIDI::Functions::Function1d::sampleBoundingInteger( double a_x1, RNG && a_rng ) const { + + if( type( ) == Function1dType::TerrellFissionNeutronMultiplicityModel ) + return( static_cast( this )->sampleBoundingInteger( a_x1, a_rng ) ); + + double d_value = evaluate( a_x1 ); + int iValue = (int) d_value; + if( iValue == d_value ) return( iValue ); + if( d_value - iValue > a_rng( ) ) ++iValue; + + return( iValue ); +} + +/* *********************************************************************************************************//** + * Sample the number of fission prompt neutrons using Terrell's modified Gaussian distribution. + * Method uses Red Cullen's algoritm (see UCRL-TR-222526). + * + * @param a_energy [in] The energy of the projectile. + * @param a_rng [in] The random number generator function the uses *a_rngState* to generator a double in the range [0, 1.0). + * @param a_rngState [in/out] The random number generator state. + * + * @return The sampled number of emitted, prompt neutrons for fission. + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE int MCGIDI::Functions::TerrellFissionNeutronMultiplicityModel::sampleBoundingInteger( double a_energy, RNG && a_rng ) const { + + const double Terrell_BSHIFT = -0.43287; + double width = M_SQRT2 * m_width; + double temp1 = m_multiplicity->evaluate( a_energy ) + 0.5; + double temp2 = temp1 / width; + double expo = exp( -temp2 * temp2 ); + double cshift = temp1 + Terrell_BSHIFT * m_width * expo / ( 1.0 - expo ); + + double multiplicity = 1.0; + do { + double rw = sqrt( -log( a_rng( ) ) ); + double theta = ( 2.0 * M_PI ) * a_rng(); + + multiplicity = width * rw * cos( theta ) + cshift; + } while ( multiplicity < 0.0 ); + + return( static_cast( floor( multiplicity ) ) ); +} + +/* *********************************************************************************************************//** + * Returns the x-value corresponding cumulative probability *a_rngValue*. + * + * @param a_rngValue [in] The x-value to evaluate the function at. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase1d::sample( double a_rngValue, RNG && a_rng ) const { + + return( static_cast( this )->sample( a_rngValue, a_rng ) ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::Xs_pdf_cdf1d::sample( double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { + + int lower = binarySearchVector( a_rngValue, m_cdf ); + double domainValue = 0; + + + if( lower < 0 ) { // This should never happen. + LUPI_THROW( "Xs_pdf_cdf1d::sample: lower < 0." ); + } + + if( interpolation( ) == Interpolation::FLAT ) { + double fraction = ( m_cdf[lower+1] - a_rngValue ) / ( m_cdf[lower+1] - m_cdf[lower] ); + domainValue = fraction * m_Xs[lower] + ( 1 - fraction ) * m_Xs[lower+1]; } + else { // Assumes lin-lin interpolation. + double slope = m_pdf[lower+1] - m_pdf[lower]; + + if( slope == 0.0 ) { + if( m_pdf[lower] == 0.0 ) { + domainValue = m_Xs[lower]; + if( lower == 0 ) domainValue = m_Xs[1]; } + else { + double fraction = ( m_cdf[lower+1] - a_rngValue ) / ( m_cdf[lower+1] - m_cdf[lower] ); + domainValue = fraction * m_Xs[lower] + ( 1 - fraction ) * m_Xs[lower+1]; + } } + else { + double d1, d2; + + slope = slope / ( m_Xs[lower+1] - m_Xs[lower] ); + d1 = a_rngValue - m_cdf[lower]; + d2 = m_cdf[lower+1] - a_rngValue; + if( d2 > d1 ) { // Closer to lower. + domainValue = m_Xs[lower] + ( sqrt( m_pdf[lower] * m_pdf[lower] + 2. * slope * d1 ) - m_pdf[lower] ) / slope; } + else { // Closer to lower + 1. + domainValue = m_Xs[lower+1] - ( m_pdf[lower+1] - sqrt( m_pdf[lower+1] * m_pdf[lower+1] - 2. * slope * d2 ) ) / slope; + } + } + } + return( domainValue ); +} + +/* *********************************************************************************************************//** + * This method samples an x1 from a pdf(x1|x2) given x2 and the cumulative value of the pdf as *a_rngValue*. + * + * @param a_x2 [in] The value of x2. + * @param a_rngValue [in] The value of the cumulative used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::none: + break; + case ProbabilityBase2dType::weightedFunctionals: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + default: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + } + + return( value ); +} + +/* *********************************************************************************************************//** + * Returns the value of x1, given x2 and the cumulative probability *a_rngValue*. + * + * @param a_x2 [in] Value of the outer most independent variable (i.e., *x2*). + * @param a_rngValue [in] The value of the cumulative probability used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The value *x1* where the cumulative probability is *a_rngValue* for x2 = *a_x2*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase2d_d1::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + case ProbabilityBase2dType::isotropic: + case ProbabilityBase2dType::discreteGamma: + case ProbabilityBase2dType::primaryGamma: + case ProbabilityBase2dType::recoil: + case ProbabilityBase2dType::NBodyPhaseSpace: + case ProbabilityBase2dType::evaporation: + case ProbabilityBase2dType::generalEvaporation: + case ProbabilityBase2dType::simpleMaxwellianFission: + case ProbabilityBase2dType::Watt: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::regions: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::none: + case ProbabilityBase2dType::weightedFunctionals: + LUPI_THROW( "ProbabilityBase2d_d1::sample: This should never happen." ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * This method returns two x1 values for use with ProbabilityBase3d functions. + * + * @param a_x2 [in] The value of x2. + * @param a_rngValue [in] The value of the cumulative value used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_x1_1 [in] The lower value of the x1 value. + * @param a_x1_2 [in] The upper value of the x1 value. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase2d_d1::sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, + double *a_x1_1, double *a_x1_2 ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + value = static_cast( this )->sample2dOf3d( a_x2, a_rngValue, a_rng, a_x1_1, a_x1_2 ); + break; + default: + LUPI_THROW( "ProbabilityBase2d_d1::sample2dOf3d: not implemented." ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * Returns the value of x1, given x2 and the cumulative probability *a_rngValue*. + * + * @param a_x2 [in] Value of the outer most independent variable (i.e., *x2*). + * @param a_rngValue [in] The value of the cumulative probability used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The value *x1* where the cumulative probability is *a_rngValue* for x2 = *a_x2*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase2d_d2::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::isotropic: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::discreteGamma: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::primaryGamma: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::recoil: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::NBodyPhaseSpace: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::evaporation: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::generalEvaporation: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::simpleMaxwellianFission: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::Watt: + value = static_cast( this )->sample( a_x2, a_rngValue, a_rng ); + break; + case ProbabilityBase2dType::none: + case ProbabilityBase2dType::weightedFunctionals: + case ProbabilityBase2dType::regions: + LUPI_THROW( "ProbabilityBase2d_d2::sample: This should never happen." ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * This method returns two x1 values for use with ProbabilityBase3d functions. + * + * @param a_x2 [in] The value of x2. + * @param a_rngValue [in] The value of the cumulative value used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_x1_1 [in] The lower value of the x1 value. + * @param a_x1_2 [in] The upper value of the x1 value. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase2d_d2::sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, + double *a_x1_1, double *a_x1_2 ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + value = static_cast( this )->sample2dOf3d( a_x2, a_rngValue, a_rng, a_x1_1, a_x1_2 ); + break; + default: + LUPI_THROW( "ProbabilityBase2d_d2::sample2dOf3d: not implemented." ); + } + + return( value ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::XYs2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { +/* +C Samples from a pdf(x1|x2). First determine which pdf(s) to sample from given x2. +C Then use rngValue to sample from pdf1(x1) and maybe pdf2(x1) and interpolate to +C determine x1. +*/ + double sampledValue = 0; + int lower = binarySearchVector( a_x2, m_Xs ); + + if( lower == -2 ) { + sampledValue = m_probabilities[0]->sample( a_rngValue, a_rng ); } + else if( lower == -1 ) { + sampledValue = m_probabilities.back( )->sample( a_rngValue, a_rng ); } + else { + double sampled1 = m_probabilities[lower]->sample( a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::FLAT ) { + sampledValue = sampled1; } + else { + double sampled2 = m_probabilities[lower+1]->sample( a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( m_Xs[lower+1] - a_x2 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = fraction * sampled1 + ( 1 - fraction ) * sampled2; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( m_Xs[lower+1] - a_x2 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = sampled2 * pow( sampled2 / sampled1, fraction ); } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( m_Xs[lower+1] / a_x2 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = fraction * sampled1 + ( 1 - fraction ) * sampled2; } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( m_Xs[lower+1] / a_x2 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = sampled2 * pow( sampled2 / sampled1, fraction ); } + else { // This should never happen. + LUPI_THROW( "XYs2d::sample: unsupported interpolation." ); + } + } + } + return( sampledValue ); +} + +/* *********************************************************************************************************//** + * This method returns two x1 values for use with ProbabilityBase3d functions. + * + * @param a_x2 [in] The value of x2. + * @param a_rngValue [in] The value of the cumulative value used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_x1_1 [in] The lower value of the x1 value. + * @param a_x1_2 [in] The upper value of the x1 value. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::XYs2d::sample2dOf3d( double a_x2, double a_rngValue, RNG && a_rng, + double *a_x1_1, double *a_x1_2 ) const { +/* +C Samples from a pdf(x1|x2). First determine which pdf(s) to sample from given x2. Then use rngValue to sample from pdf1(x1) +C and maybe pdf2(x1) and interpolate to determine x1. +*/ + double sampledValue = 0; + int lower = binarySearchVector( a_x2, m_Xs ); + + if( lower == -2 ) { + sampledValue = m_probabilities[0]->sample( a_rngValue, a_rng ); + *a_x1_2 = *a_x1_1 = sampledValue; } + else if( lower == -1 ) { + sampledValue = m_probabilities.back( )->sample( a_rngValue, a_rng ); + *a_x1_2 = *a_x1_1 = sampledValue; } + else { + *a_x1_1 = m_probabilities[lower]->sample( a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::FLAT ) { + sampledValue = *a_x1_2 = *a_x1_1; } + else { + *a_x1_2 = m_probabilities[lower+1]->sample( a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( m_Xs[lower+1] - a_x2 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = fraction * *a_x1_1 + ( 1 - fraction ) * *a_x1_2; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( m_Xs[lower+1] - a_x2 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = *a_x1_2 * pow( *a_x1_2 / *a_x1_1, fraction ); } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( m_Xs[lower+1] / a_x2 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = fraction * *a_x1_1 + ( 1 - fraction ) * *a_x1_2; } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( m_Xs[lower+1] / a_x2 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = *a_x1_2 * pow( *a_x1_2 / *a_x1_1 , fraction ); } + else { // This should never happen. + LUPI_THROW( "XYs2d::sample: unsupported interpolation." ); + } + } + } + return( sampledValue ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::Regions2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + int lower = binarySearchVector( a_x2, m_Xs ); + + if( lower < 0 ) { + if( lower == -1 ) { // a_x2 > last value of m_Xs. + return( m_probabilities.back( )->sample( a_x2, a_rngValue, a_rng ) ); + } + lower = 0; // a_x2 < first value of m_Xs. + } + + return( m_probabilities[lower]->sample( a_x2, a_rngValue, a_rng ) ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::Recoil2d::sample( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { + +#if !defined(__NVCC__) && !defined(__HIP__) + LUPI_THROW( "Recoil2d::sample: not implemented." ); +#endif + + return( 0.0 ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::NBodyPhaseSpace2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + return( ( m_energy_in_COMFactor * a_x2 + m_Q ) * m_massFactor * m_dist->sample( a_rngValue, a_rng ) ); +} + +inline LUPI_HOST_DEVICE static double MCGIDI_sampleEvaporation( double a_xMax, double a_rngValue ) { + + double b1, c1, xMid, norm, xMin = 0.; + + norm = 1 - ( 1 + a_xMax ) * exp( -a_xMax ); + b1 = 1. - norm * a_rngValue; + for( int i1 = 0; i1 < 16; i1++ ) { + xMid = 0.5 * ( xMin + a_xMax ); + c1 = ( 1 + xMid ) * exp( -xMid ); + if( b1 > c1 ) { + a_xMax = xMid; } + else { + xMin = xMid; + } + } + return( xMid ); +} + + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::Evaporation2d::sample( double a_x2, double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { + + double theta = m_theta->evaluate( a_x2 ); + + return( theta * MCGIDI_sampleEvaporation( ( a_x2 - m_U ) / theta, a_rngValue ) ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::GeneralEvaporation2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { + + return( m_theta->evaluate( a_x2 ) * m_g->sample( a_rngValue, a_rng ) ); +} + +inline LUPI_HOST_DEVICE static double MCGIDI_sampleSimpleMaxwellianFission( double a_xMax, double a_rngValue ) { + + double b1, c1, xMid, norm, xMin = 0., sqrt_xMid, sqrt_pi_2 = 0.5 * sqrt( M_PI ); + + sqrt_xMid = sqrt( a_xMax ); + norm = sqrt_pi_2 * erf( sqrt_xMid ) - sqrt_xMid * exp( -a_xMax ); + b1 = norm * a_rngValue; + for( int i1 = 0; i1 < 16; i1++ ) { + xMid = 0.5 * ( xMin + a_xMax ); + sqrt_xMid = sqrt( xMid ); + c1 = sqrt_pi_2 * erf( sqrt_xMid ) - sqrt_xMid * exp( -xMid ); + if( b1 < c1 ) { + a_xMax = xMid; } + else { + xMin = xMid; + } + } + return( xMid ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::SimpleMaxwellianFission2d::sample( double a_x2, double a_rngValue, LUPI_maybeUnused RNG && a_rng ) const { + + double theta = m_theta->evaluate( a_x2 ); + + return( theta * MCGIDI_sampleSimpleMaxwellianFission( ( a_x2 - m_U ) / theta, a_rngValue ) ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::Watt2d::sample( double a_x2, LUPI_maybeUnused double a_rngValue, RNG && a_rng ) const { +/* +* From MCAPM via Sample Watt Spectrum as in TART ( Kalos algorithm ). +*/ + double WattMin = 0., WattMax = a_x2 - m_U, x, y, z, energyOut, rand1, rand2; + double Watt_a = 1./m_a->evaluate( a_x2 ); // Kalos algorithm uses the inverse of the ‘a’ parameter stored in GNDS + double Watt_b = m_b->evaluate( a_x2 ); + + x = 1. + ( Watt_b / ( 8. * Watt_a ) ); + y = ( x + sqrt( x * x - 1. ) ) / Watt_a; + z = Watt_a * y - 1.; + do { + rand1 = -log( a_rng( ) ); + rand2 = -log( a_rng( ) ); + energyOut = y * rand1; + } while( ( ( rand2 - z * ( rand1 + 1. ) ) * ( rand2 - z * ( rand1 + 1. ) ) > Watt_b * y * rand1 ) || + ( energyOut < WattMin ) || ( energyOut > WattMax ) ); + return( energyOut ); +} + + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::WeightedFunctionals2d::sample( double a_x2, double a_rngValue, RNG && a_rng ) const { +/* +c This routine assumes that the weights sum to 1. +*/ + std::size_t i1; + std::size_t n1 = m_weight.size( ) - 1; // Take last point if others do not add to randomWeight. + double randomWeight = a_rng( ), cumulativeWeight = 0.; + + for( i1 = 0; i1 < n1; ++i1 ) { + cumulativeWeight += m_weight[i1]->evaluate( a_x2 ); + if( cumulativeWeight >= randomWeight ) break; + } + return( m_energy[i1]->sample( a_x2, a_rngValue, a_rng) ); +} + +/* *********************************************************************************************************//** + * This method samples an x1 from a pdf(x1|x2) given x2 and the cumulative value of the pdf as *a_rngValue*. + * + * @param a_x3 [in] The value of x3. + * @param a_x2_1 [in] The value of ?. + * @param a_x2_2 [in] The value of ?. + * @param a_rngValue [in] The value of the cumulative used to determine the x1 value. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::ProbabilityBase3d::sample( double a_x3, double a_x2_1, double a_x2_2, double a_rngValue, RNG && a_rng ) const { + + return( static_cast( this )->sample( a_x3, a_x2_1, a_x2_2, a_rngValue, a_rng ) ); +} + +template +LUPI_HOST_DEVICE double MCGIDI::Probabilities::XYs3d::sample( double a_x3, double a_x2_1, double a_x2_2, double a_rngValue, RNG && a_rng ) const { +/* +C Samples from a pdf(x1|x3,x2). First determine which pdf(s) to sample from given x3 +C Then use rngValue to sample from pdf2_1(x2) and maybe pdf2_2(x2) and interpolate to +C determine x1. +*/ + double sampledValue = 0; + int lower = binarySearchVector( a_x3, m_Xs ); + + if( lower == -2 ) { // x3 < first value of Xs. + sampledValue = m_probabilities[0]->sample( a_x2_1, a_rngValue, a_rng ); } + else if( lower == -1 ) { // x3 > last value of Xs. + sampledValue = m_probabilities.back( )->sample( a_x2_1, a_rngValue, a_rng ); } + else { + double sampled1 = m_probabilities[lower]->sample( a_x2_1, a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::FLAT ) { + sampledValue = sampled1; } + else { + double sampled2 = m_probabilities[lower+1]->sample( a_x2_2, a_rngValue, a_rng ); + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( m_Xs[lower+1] - a_x3 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = fraction * sampled1 + ( 1 - fraction ) * sampled2; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( m_Xs[lower+1] - a_x3 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + sampledValue = sampled2 * pow( sampled2 / sampled1, fraction ); } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( m_Xs[lower+1] / a_x3 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = fraction * sampled1 + ( 1 - fraction ) * sampled2; } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( m_Xs[lower+1] / a_x3 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + sampledValue = sampled2 * pow( sampled2 / sampled1, fraction ); } + else { // This should never happen. + LUPI_THROW( "XYs3d::sample: unsupported interpolation." ); + } + } + } + + return( sampledValue ); +} + + +// From file: MCGIDI_heatedCrossSections.cpp + + +template +LUPI_HOST_DEVICE int MCGIDI::HeatedCrossSectionsContinuousEnergy::sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const { + + int i1, sampled_reaction_index, temperatureIndex1, temperatureIndex2, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double sampleCrossSection = a_crossSection * a_rng( ); + + if( a_temperature <= m_temperatures[0] ) { + temperatureIndex1 = 0; + temperatureIndex2 = temperatureIndex1; } + else if( a_temperature >= m_temperatures.back( ) ) { + temperatureIndex1 = static_cast( m_temperatures.size( ) ) - 1; + temperatureIndex2 = temperatureIndex1; } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + temperatureIndex1 = i1 - 1; + temperatureIndex2 = i1; + } + + int numberOfReactions = m_heatedCrossSections[0]->numberOfReactions( ); + double energyFraction1, energyFraction2, crossSectionSum = 0.0; + + HeatedCrossSectionContinuousEnergy &heatedCrossSection1 = *m_heatedCrossSections[temperatureIndex1]; + int energyIndex1 = heatedCrossSection1.evaluationInfo( a_hashIndex, a_energy, &energyFraction1 ); + + if( temperatureIndex1 == temperatureIndex2 ) { + for( sampled_reaction_index = 0; sampled_reaction_index < numberOfReactions; ++sampled_reaction_index ) { + crossSectionSum += heatedCrossSection1.reactionCrossSection2( sampled_reaction_index, a_URR_protareInfos, a_URR_index, a_energy, + energyIndex1, energyFraction1 ); + if( crossSectionSum >= sampleCrossSection ) break; + } } + else { + double temperatureFraction2 = ( a_temperature - m_temperatures[temperatureIndex1] ) + / ( m_temperatures[temperatureIndex2] - m_temperatures[temperatureIndex1] ); + double temperatureFraction1 = 1.0 - temperatureFraction2; + HeatedCrossSectionContinuousEnergy &heatedCrossSection2 = *m_heatedCrossSections[temperatureIndex2]; + int energyIndex2 = heatedCrossSection2.evaluationInfo( a_hashIndex, a_energy, &energyFraction2 ); + + for( sampled_reaction_index = 0; sampled_reaction_index < numberOfReactions; ++sampled_reaction_index ) { + if( m_thresholds[sampled_reaction_index] >= a_energy ) continue; + crossSectionSum += temperatureFraction1 * heatedCrossSection1.reactionCrossSection2( sampled_reaction_index, a_URR_protareInfos, + a_URR_index, a_energy, energyIndex1, energyFraction1 ); + crossSectionSum += temperatureFraction2 * heatedCrossSection2.reactionCrossSection2( sampled_reaction_index, a_URR_protareInfos, + a_URR_index, a_energy, energyIndex2, energyFraction2 ); + if( crossSectionSum >= sampleCrossSection ) break; + } + } + + if( sampled_reaction_index == numberOfReactions ) { + if( crossSectionSum < ( 1.0 - crossSectionSumError ) * a_crossSection ) { +#if LUPI_ON_GPU + MCGIDI_PRINTF( "HeatedCrossSectionsContinuousEnergy::sampleReaction: crossSectionSum %.17e less than a_crossSection = %.17e.", + crossSectionSum, a_crossSection ); +#else + std::string errorString = "HeatedCrossSectionsContinuousEnergy::sampleReaction: crossSectionSum " + + LUPI::Misc::doubleToString3( "%.17e", crossSectionSum ) + " less than a_crossSection = " + + LUPI::Misc::doubleToString3( "%.17e", a_crossSection ) + "."; + LUPI_THROW( errorString.c_str( ) ); +#endif + } + for( sampled_reaction_index = 0; sampled_reaction_index < numberOfReactions; ++sampled_reaction_index ) { // This should rarely happen so just pick the first reaction with non-zero cross section. + if( heatedCrossSection1.reactionCrossSection2( sampled_reaction_index, a_URR_protareInfos, a_URR_index, a_energy, energyIndex1, + energyFraction1, true ) > 0 ) break; + } + } + + return( sampled_reaction_index ); +} + +/* *********************************************************************************************************//** + * Returns the requested reaction's multi-group cross section for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_crossSection [in] The index of the reaction. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::HeatedCrossSectionsMultiGroup::sampleReaction( int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, + RNG && a_rng ) const { + + int i1, sampled_reaction_index, temperatureIndex1, temperatureIndex2, numberOfTemperatures = static_cast( m_temperatures.size( ) ); + double sampleCrossSection = a_crossSection * a_rng( ); + + if( a_temperature <= m_temperatures[0] ) { + temperatureIndex1 = 0; + temperatureIndex2 = temperatureIndex1; } + else if( a_temperature >= m_temperatures.back( ) ) { + temperatureIndex1 = static_cast( m_temperatures.size( ) ) - 1; + temperatureIndex2 = temperatureIndex1; } + else { + for( i1 = 0; i1 < numberOfTemperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + temperatureIndex1 = i1 - 1; + temperatureIndex2 = i1; + } + + int numberOfReactions = m_heatedCrossSections[0]->numberOfReactions( ); + double crossSectionSum = 0; + HeatedCrossSectionMultiGroup &heatedCrossSection1 = *m_heatedCrossSections[temperatureIndex1]; + + if( temperatureIndex1 == temperatureIndex2 ) { + for( sampled_reaction_index = 0; sampled_reaction_index < numberOfReactions; ++sampled_reaction_index ) { + crossSectionSum += heatedCrossSection1.reactionCrossSection( sampled_reaction_index, a_hashIndex, true ); + if( crossSectionSum >= sampleCrossSection ) break; + } } + else { + double temperatureFraction2 = ( a_temperature - m_temperatures[temperatureIndex1] ) / ( m_temperatures[temperatureIndex2] - m_temperatures[temperatureIndex1] ); + double temperatureFraction1 = 1.0 - temperatureFraction2; + HeatedCrossSectionMultiGroup &heatedCrossSection2 = *m_heatedCrossSections[temperatureIndex2]; + + for( sampled_reaction_index = 0; sampled_reaction_index < numberOfReactions; ++sampled_reaction_index ) { + if( m_thresholds[sampled_reaction_index] >= a_energy ) continue; + crossSectionSum += temperatureFraction1 * heatedCrossSection1.reactionCrossSection( sampled_reaction_index, a_hashIndex, true ); + crossSectionSum += temperatureFraction2 * heatedCrossSection2.reactionCrossSection( sampled_reaction_index, a_hashIndex, true ); + if( crossSectionSum >= sampleCrossSection ) break; + } + } + + if( sampled_reaction_index == numberOfReactions ) return( MCGIDI_nullReaction ); + + if( m_multiGroupThresholdIndex[sampled_reaction_index] == a_hashIndex ) { + double energyAboveThreshold = a_energy - m_thresholds[sampled_reaction_index]; + + if( energyAboveThreshold <= ( a_rng( ) * ( m_projectileMultiGroupBoundariesCollapsed[a_hashIndex+1] - m_thresholds[sampled_reaction_index] ) ) ) + return( MCGIDI_nullReaction ); + } + + return( sampled_reaction_index ); +} + +// From file: MCGIDI_misc.cpp + +/* *********************************************************************************************************//** + * The function returns a normalized Maxwellian speed (i.e., v = |velocity|) in 3d (i.e., v^2 Exp( -v^2 )). + * Using formula in https://link.springer.com/content/pdf/10.1007%2Fs10955-011-0364-y.pdf. + * Author Nader M.A. Mohamed, title "Efficient Algorithm for Generating Maxwell Random Variables". + * + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The sampled normalized Maxwellian speed. + ***********************************************************************************************************/ + +template +inline LUPI_HOST_DEVICE double sampleBetaFromMaxwellian( RNG && a_rng ) { + + double _g = 2.0 / ( 1.37 * 0.5 * 1.772453850905516 ); // 1.772453850905516 = sqrt( pi ). + double beta, r1; + + do { + r1 = a_rng( ); + beta = sqrt( -2.0 * log( r1 ) ); + } while( _g * r1 * beta < a_rng( ) ); + + return( beta ); +} + +/* *********************************************************************************************************//** + * This function is used internally to sample a target's velocity (speed and cosine of angle relative to projectile) + * for a heated target using zero temperature, multi-grouped cross sections. + * + * @param a_protare [in] The Protare instance for the projectile and target. + * @param a_projectileEnergy [in] The energy of the projectile in the lab frame of the target. + * @param a_input [in] Contains needed input like the targets temperature. Also will have the target sampled velocity on return if return value is *true*. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return Returns *true* if target velocity is sampled and false otherwise. + ***********************************************************************************************************/ +namespace MCGIDI { +template +inline LUPI_HOST_DEVICE bool sampleTargetBetaForUpscatterModelA( Protare const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng ) { + + double projectileBeta = MCGIDI_particleBeta( a_protare->projectileMass( ), a_projectileEnergy ); + + double temperature = a_input.m_temperature * 1e-3; // FIXME Assumes m_temperature is in keV/k for now. + double targetThermalBeta = MCGIDI_particleBeta( a_protare->targetMass( ), temperature ); + + if( targetThermalBeta < 1e-4 * projectileBeta ) return( false ); + + double relativeBetaMin = projectileBeta - 2.0 * targetThermalBeta; + double relativeBetaMax = projectileBeta + 2.0 * targetThermalBeta; + + Vector const &upscatterModelAGroupVelocities = a_protare->upscatterModelAGroupVelocities( ); + int maxIndex = (int) upscatterModelAGroupVelocities.size( ) - 2; + int relativeBetaMinIndex = binarySearchVector( relativeBetaMin, upscatterModelAGroupVelocities, true ); + int relativeBetaMaxIndex = binarySearchVector( relativeBetaMax, upscatterModelAGroupVelocities, true ); + double targetBeta, relativeBeta, mu; + + if( relativeBetaMinIndex >= maxIndex ) relativeBetaMinIndex = maxIndex; + if( relativeBetaMaxIndex >= maxIndex ) relativeBetaMaxIndex = maxIndex; + + if( relativeBetaMinIndex == relativeBetaMaxIndex ) { + targetBeta = targetThermalBeta * sampleBetaFromMaxwellian( a_rng ); + mu = 1.0 - 2.0 * a_rng( ); + relativeBeta = sqrt( targetBeta * targetBeta + projectileBeta * projectileBeta - 2.0 * mu * targetBeta * projectileBeta ); } + else { + + Vector const &upscatterModelACrossSection = a_input.m_reaction->upscatterModelACrossSection( ); + double reactionRate; + double reactionRateMax = 0; + for( int i1 = relativeBetaMinIndex; i1 <= relativeBetaMaxIndex; ++i1 ) { + reactionRate = upscatterModelACrossSection[i1] * upscatterModelAGroupVelocities[i1+1]; + if( reactionRate > reactionRateMax ) reactionRateMax = reactionRate; + } + + do { + targetBeta = targetThermalBeta * sampleBetaFromMaxwellian( a_rng ); + mu = 1.0 - 2.0 * a_rng( ); + relativeBeta = sqrt( targetBeta * targetBeta + projectileBeta * projectileBeta - 2.0 * mu * targetBeta * projectileBeta ); + + int index = binarySearchVector( relativeBeta, upscatterModelAGroupVelocities, true ); + if( index > maxIndex ) index = maxIndex; + reactionRate = upscatterModelACrossSection[index] * relativeBeta; + } while( reactionRate < a_rng( ) * reactionRateMax ); + } + + a_input.m_projectileBeta = projectileBeta; + a_input.m_relativeMu = mu; + a_input.m_targetBeta = targetBeta; + a_input.m_relativeBeta = relativeBeta; + a_input.m_projectileEnergy = particleKineticEnergy( a_protare->projectileMass( ), relativeBeta ); + + return( true ); +} + +/* *********************************************************************************************************//** + * This function boost a particle from one frame to another frame. The frames have a relative speed *a_boostSpeed* + * and cosine of angle *a_boostMu* between their z-axes. BRB FIXME, currently it is the x-axis. + * + * @param a_input [in] Instance containing a random number generator that returns a double in the range [0, 1). + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_product [in] The particle to boost. + ***********************************************************************************************************/ + +template +inline LUPI_HOST_DEVICE void upScatterModelABoostParticle( Sampling::Input &a_input, RNG && a_rng, Sampling::Product &a_product ) { + + double C_rel = 1.0; + if( a_input.m_relativeBeta != 0.0 ) { + C_rel = ( a_input.m_projectileBeta - a_input.m_relativeMu * a_input.m_targetBeta ) / a_input.m_relativeBeta; + if( C_rel > 1.0 ) C_rel = 1.0; // Handle round-off issue. Probably should check who big the issue is. + } + double S_rel = sqrt( 1.0 - C_rel * C_rel ); + + double pz_vz = a_product.m_pz_vz; + a_product.m_pz_vz = C_rel * a_product.m_pz_vz + S_rel * a_product.m_px_vx; + a_product.m_px_vx = -S_rel * pz_vz + C_rel * a_product.m_px_vx; + + double targetSpeed = MCGIDI_speedOfLight_cm_sec * a_input.m_targetBeta; + a_product.m_pz_vz += a_input.m_relativeMu * targetSpeed; + a_product.m_px_vx += sqrt( 1.0 - a_input.m_relativeMu * a_input.m_relativeMu ) * targetSpeed; + + double phi = 2.0 * M_PI * a_rng( ); + double sine = sin( phi ); + double cosine = cos( phi ); + double px_vx = a_product.m_px_vx; + a_product.m_px_vx = cosine * a_product.m_px_vx - sine * a_product.m_py_vy; + a_product.m_py_vy = sine * px_vx + cosine * a_product.m_py_vy; + + double speed2 = a_product.m_px_vx * a_product.m_px_vx + a_product.m_py_vy * a_product.m_py_vy + a_product.m_pz_vz * a_product.m_pz_vz; + speed2 /= MCGIDI_speedOfLight_cm_sec * MCGIDI_speedOfLight_cm_sec; + + a_product.m_kineticEnergy = particleKineticEnergyFromBeta2( a_product.m_productMass, speed2 ); +} +} + + +// From file: MCGIDI_outputChannel.cpp + + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. + * + * @param a_protare [in] The Protare this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::OutputChannel::sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + + if( m_hasFinalStatePhotons ) { + double random = a_rng( ); + double cumulative = 0.0; + bool sampled = false; + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + cumulative += (*productIter)->multiplicity( )->evaluate( a_projectileEnergy ); + if( cumulative >= random ) { + (*productIter)->sampleFinalState( a_protare, a_projectileEnergy, a_input, a_rng, a_push_back, a_products ); + sampled = true; + break; + } + } + if( !sampled ) { // BRB: FIXME: still need to code for continuum photon. + } } + else { + for( Vector::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) + (*iter)->sampleProducts( a_protare, a_projectileEnergy, a_input, a_rng, a_push_back, a_products ); + } + + if( m_totalDelayedNeutronMultiplicity != nullptr ) { + double totalDelayedNeutronMultiplicity = m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + + if( a_rng( ) < totalDelayedNeutronMultiplicity ) { // Assumes that totalDelayedNeutronMultiplicity < 1.0, which it is. + double sum = 0.0; + + totalDelayedNeutronMultiplicity *= a_rng( ); + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1( delayedNeutron( i1 ) ); + Product const &product = delayedNeutron1->product( ); + + sum += product.multiplicity( )->evaluate( a_projectileEnergy ); + if( sum >= totalDelayedNeutronMultiplicity ) { + product.distribution( )->sample( a_projectileEnergy, a_input, a_rng ); + a_input.m_delayedNeutronIndex = delayedNeutron1->delayedNeutronIndex( ); + a_input.m_delayedNeutronDecayRate = delayedNeutron1->rate( ); + a_products.add( a_projectileEnergy, product.intid( ), product.index( ), product.userParticleIndex( ), product.mass( ), + a_input, a_rng, a_push_back, false ); + break; + } + } + } + } +} + +/* *********************************************************************************************************//** + * Returns the probability for a project with energy *a_energy_in* to cause this channel to emitted a particle of index + * *a_index* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_index [in] The index of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_weight [in] The probability of emitting outgoing particle into lab angle *a_mu_lab*. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The sum of the multiplicity for other outgoing particles with index *a_index*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::OutputChannel::angleBiasing( Reaction const *a_reaction, int a_index, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_weight, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const { + + for( Vector::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) + (*iter)->angleBiasing( a_reaction, a_index, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_index == m_neutronIndex ) ) { + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1( delayedNeutron( i1 ) ); + Product const &product = delayedNeutron1->product( ); + + product.angleBiasing( a_reaction, a_index, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); + } + } +} + +/* *********************************************************************************************************//** + * Returns the probability for a project with energy *a_energy_in* to cause this channel to emitted a particle of intid + * *a_intid* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_intid [in] The intid of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_weight [in] The probability of emitting outgoing particle into lab angle *a_mu_lab*. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The sum of the multiplicity for other outgoing particles with intid *a_intid*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::OutputChannel::angleBiasingViaIntid( Reaction const *a_reaction, int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_weight, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const { + + for( Vector::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) + (*iter)->angleBiasingViaIntid( a_reaction, a_intid, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_intid == PoPI::Intids::neutron ) ) { + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1( delayedNeutron( i1 ) ); + Product const &product = delayedNeutron1->product( ); + + product.angleBiasingViaIntid( a_reaction, a_intid, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); + } + } +} + + +// From file: MCGIDI_product.cpp + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. + * + * @param a_protare [in] The Protare this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Product::sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) { + m_outputChannel->sampleProducts( a_protare, a_projectileEnergy, a_input, a_rng, a_push_back, a_products ); } + else { +#endif + if( m_twoBodyOrder == TwoBodyOrder::secondParticle ) { + a_products.add( a_projectileEnergy, intid( ), index( ), userParticleIndex( ), mass( ), a_input, a_rng, a_push_back, m_intid == PoPI::Intids::photon ); } + else { + int _multiplicity = m_multiplicity->sampleBoundingInteger( a_projectileEnergy, a_rng ); + int __multiplicity = _multiplicity; + + for( ; _multiplicity > 0; --_multiplicity ) { + m_distribution->sample( a_projectileEnergy, a_input, a_rng ); + a_input.m_delayedNeutronIndex = -1; + a_input.m_delayedNeutronDecayRate = 0.0; + a_products.add( a_projectileEnergy, intid( ), index( ), userParticleIndex( ), mass( ), a_input, a_rng, a_push_back, m_intid == PoPI::Intids::photon ); + } + if( m_initialStateIndex >= 0 ) { + if( __multiplicity == 0 ) { + a_protare->sampleBranchingGammas( a_input, a_projectileEnergy, m_initialStateIndex, a_rng, a_push_back, a_products ); + } + } + } +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + } +#endif +} + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. In particular, the product is a capture reaction + * primary gamma what has a finalState attribute. This gamma is added as well as the gammas from the + * gamma cascade. + * + * @param a_protare [in] The Protare this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::Product::sampleFinalState( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + + m_distribution->sample( a_projectileEnergy, a_input, a_rng ); + a_input.m_delayedNeutronIndex = -1; + a_input.m_delayedNeutronDecayRate = 0.0; + a_products.add( a_projectileEnergy, m_intid, m_index, m_userParticleIndex, mass( ), a_input, a_rng, a_push_back, m_intid == PoPI::Intids::photon ); + + if( m_initialStateIndex >= 0 ) { + a_protare->sampleBranchingGammas( a_input, a_projectileEnergy, m_initialStateIndex, a_rng, a_push_back, a_products ); + } +} + +/* *********************************************************************************************************//** + * Returns the weight for a projectile with energy *a_energy_in* to cause this channel to emitted a particle of index + * *a_pid* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_index [in] The index of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_weight [in] The weight of emitting outgoing particle into lab angle *a_mu_lab*. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The sum of the multiplicity for other outgoing particles with index *a_index*. + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::Product::angleBiasing( Reaction const *a_reaction, int a_index, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_weight, double &a_energy_out, RNG && a_rng, double &a_cumulative_weight ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) { + m_outputChannel->angleBiasing( a_reaction, a_index, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); } + else { +#endif + if( m_index != a_index ) return; + + double probability = 0.0; + double energy_out = 0.0; + + if( a_cumulative_weight == 0.0 ) a_energy_out = 0.0; + + if( m_multiplicity->type( ) == Function1dType::branching ) { // Needs to handle F1_Branching. + } + else { + probability = m_distribution->angleBiasing( a_reaction, a_temperature, a_energy_in, a_mu_lab, a_rng, energy_out ); + } + + double weight = m_multiplicity->evaluate( a_energy_in ) * probability; + a_cumulative_weight += weight; + if( weight > a_rng( ) * a_cumulative_weight ) { + a_weight = weight; + a_energy_out = energy_out; + } +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + } +#endif +} + +/* *********************************************************************************************************//** + * Returns the weight for a projectile with energy *a_energy_in* to cause this channel to emitted a particle of intid + * *a_intid* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_reaction [in] The reaction containing the particle which this distribution describes. + * @param a_intid [in] The intid of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_weight [in] The weight of emitting outgoing particle into lab angle *a_mu_lab*. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The sum of the multiplicity for other outgoing particles with intid *a_intid*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Product::angleBiasingViaIntid( Reaction const *a_reaction, int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, + double &a_weight, double &a_energy_out, RNG && a_rng , double &a_cumulative_weight ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) { + m_outputChannel->angleBiasingViaIntid( a_reaction, a_intid, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); } + else { +#endif + if( m_intid != a_intid ) return; + + angleBiasing( a_reaction, m_index, a_temperature, a_energy_in, a_mu_lab, a_weight, a_energy_out, a_rng, a_cumulative_weight ); + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + } +#endif +} + + + +// From file: MCGIDI_protare.cpp + + +/* *********************************************************************************************************//** + * Samples a reaction of *this* and returns its index. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_crossSection [in] The total cross section at *a_temperature* and *a_energy*. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The index of the sampled reaction. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::Protare::sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, + double a_energy, double a_crossSection, RNG && a_rng ) const { + + int reactionIndex = -1; + + switch( protareType( ) ) { + case ProtareType::single: + reactionIndex = static_cast( this )->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, + a_crossSection, a_rng ); + break; + case ProtareType::composite: + reactionIndex = static_cast( this )->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, + a_crossSection, a_rng ); + break; + case ProtareType::TNSL: + reactionIndex = static_cast( this )->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, + a_crossSection, a_rng ); + break; + } + + return( reactionIndex ); +} + +/* *********************************************************************************************************//** + * Samples gammas from a nuclide electro-magnetic decay. + * + * @param a_input [in] Sample options requested by user. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_initialStateIndex [in] The index in *m_nuclideGammaBranchStateInfos* whose nuclide data are used for sampling. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled gammas to. + ***********************************************************************************************************/ +template +LUPI_HOST_DEVICE void MCGIDI::ProtareSingle::sampleBranchingGammas( Sampling::Input &a_input, double a_projectileEnergy, int a_initialStateIndex, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + + int initialStateIndex = a_initialStateIndex; + double energyLevelSampleWidthUpper = 0.0; // Used for GRIN continuum levels to add variaction to outgoing photons. + + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = nullptr; + if( initialStateIndex >= 0 ) nuclideGammaBranchStateInfo = m_nuclideGammaBranchStateInfos[initialStateIndex]; +// std::cout << initialStateIndex << " " << nuclideGammaBranchStateInfo->nuclearLevelEnergy( ) << std::endl; + while( initialStateIndex >= 0 ) { + Vector const &branchIndices = nuclideGammaBranchStateInfo->branchIndices( ); + + double random = a_rng( ); + double sum = 0.0; + initialStateIndex = -1; // Just in case the for loop never has "sum >= random". + for( std::size_t i1 = 0; i1 < branchIndices.size( ); ++i1 ) { + NuclideGammaBranchInfo *nuclideGammaBranchInfo = m_branches[branchIndices[i1]]; + + sum += nuclideGammaBranchInfo->probability( ); + if( sum >= random ) { + double energyLevelSampleWidthLower = 0.0; + initialStateIndex = nuclideGammaBranchInfo->residualStateIndex( ); + if( initialStateIndex >= 0 ) { + nuclideGammaBranchStateInfo = m_nuclideGammaBranchStateInfos[initialStateIndex]; + energyLevelSampleWidthLower = a_rng( ) * nuclideGammaBranchStateInfo->nuclearLevelEnergyWidth( ); + } + if( nuclideGammaBranchInfo->photonEmissionProbability( ) > a_rng( ) ) { + a_input.m_sampledType = Sampling::SampledType::photon; + a_input.m_dataInTargetFrame = false; + a_input.m_frame = GIDI::Frame::lab; + + a_input.m_energyOut1 = nuclideGammaBranchInfo->gammaEnergy( ) + energyLevelSampleWidthUpper - energyLevelSampleWidthLower; +// std::cout << a_input.m_energyOut1 << " " << nuclideGammaBranchInfo->gammaEnergy( ) << " " << energyLevelSampleWidthUpper << " " << energyLevelSampleWidthLower << std::endl; + a_input.m_mu = 1.0 - 2.0 * a_rng( ); + a_input.m_phi = 2.0 * M_PI * a_rng( ); + + a_products.add( a_projectileEnergy, PoPI::Intids::photon, m_photonIndex, userPhotonIndex( ), 0.0, a_input, a_rng, a_push_back, true ); + } + energyLevelSampleWidthUpper = energyLevelSampleWidthLower; + break; + } + } + } +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_rng*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_crossSection [in] The total cross section. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::ProtareSingle::sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, + double a_crossSection, RNG && a_rng ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.sampleReaction( a_URR_protareInfos, m_URR_index, a_hashIndex, a_temperature, a_energy, + a_crossSection, a_rng ) ); + + return( m_heatedMultigroupCrossSections.sampleReaction( a_hashIndex, a_temperature, a_energy, a_crossSection, a_rng ) ); +} + + +// From file: MCGIDI_protareComposite.cpp + +/* *********************************************************************************************************//** + * Samples a reaction of *this* and returns its index. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_crossSection [in] The total cross section at *a_temperature* and *a_energy*. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The index of the sampled reaction. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::ProtareComposite::sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + int reaction_index = 0; + double cross_section_sum = 0.0; + double cross_section_rng = a_rng( ) * a_crossSection; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + double cross_section = m_protares[i1]->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, true ); + + cross_section_sum += cross_section; + if( cross_section_sum > cross_section_rng ) { + int reaction_index2 = m_protares[i1]->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, cross_section, a_rng ); + + reaction_index += reaction_index2; + if( reaction_index2 == MCGIDI_nullReaction ) reaction_index = MCGIDI_nullReaction; + break; + } + reaction_index += m_protares[i1]->numberOfReactions( ); + } + + return( reaction_index ); +} + + +// From file: MCGIDI_protareTNSL.cpp + +/* *********************************************************************************************************//** + * Returns the total cross section. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_crossSection [in] The total cross section at *a_temperature* and *a_energy*. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return The index of the sampled reaction. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::ProtareTNSL::sampleReaction( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, double a_crossSection, RNG && a_rng ) const { + + int reactionIndex = 0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + double TNSL_crossSection = m_TNSL->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, true ); + + if( TNSL_crossSection > a_rng( ) * a_crossSection ) { + reactionIndex = m_TNSL->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, TNSL_crossSection, a_rng ); } + else { + reactionIndex = m_protareWithoutElastic->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_crossSection - TNSL_crossSection, a_rng ); + if( reactionIndex != MCGIDI_nullReaction ) reactionIndex += m_numberOfTNSLReactions + 1; + } } + else { + reactionIndex = m_protareWithElastic->sampleReaction( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_crossSection, a_rng ); + if( reactionIndex != MCGIDI_nullReaction ) reactionIndex += m_numberOfTNSLReactions; + } + + return( reactionIndex ); +} + + +// From file: MCGIDI_reaction.cpp + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. + * + * @param a_protare [in] The Protare this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + * @param a_checkOrphanProducts [in] If true, associated orphan products are also sampled. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Reaction::sampleProducts( Protare const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products, bool a_checkOrphanProducts ) const { + + double projectileEnergy = a_projectileEnergy; + + a_input.m_GRIN_intermediateResidual = -1; + a_input.m_reaction = this; + a_input.m_projectileMass = m_projectileMass; + a_input.m_targetMass = m_targetMass; + a_input.m_relativeMu = 0.0; + a_input.m_targetBeta = 0.0; + a_input.m_relativeBeta = MCGIDI_particleBeta( m_projectileMass, a_projectileEnergy ); + + a_input.m_dataInTargetFrame = false; + if( upscatterModelASupported( ) && ( a_input.m_upscatterModel == Sampling::Upscatter::Model::A ) ) { + + a_input.m_dataInTargetFrame = sampleTargetBetaForUpscatterModelA( m_protareSingle, a_projectileEnergy, a_input, a_rng ); + if( a_input.m_dataInTargetFrame ) projectileEnergy = a_input.m_projectileEnergy; + } + + if( m_GRIN_specialSampleProducts ) { + if( m_GRIN_capture != nullptr ) { + if( projectileEnergy < m_GRIN_maximumCaptureIncidentEnergy ) { + if( m_GRIN_capture->sampleProducts( (ProtareSingle const *) a_protare, projectileEnergy, a_input, a_rng, a_push_back, a_products ) ) { + return; + } + } } + else if( m_GRIN_inelastic != nullptr ) { + if( m_GRIN_inelastic->sampleProducts( (ProtareSingle const *) a_protare, projectileEnergy, a_input, a_rng, a_push_back, a_products ) ) { + return; + } + } + } + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->sampleProducts( m_protareSingle, projectileEnergy, a_input, a_rng, a_push_back, a_products ); +#else + if( m_hasFinalStatePhotons ) { + double random = a_rng( ); + double cumulative = 0.0; + bool sampled = false; + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + cumulative += (*productIter)->multiplicity( )->evaluate( projectileEnergy ); + if( cumulative >= random ) { + (*productIter)->sampleFinalState( m_protareSingle, projectileEnergy, a_input, a_rng, a_push_back, a_products ); + sampled = true; + break; + } + } + if( !sampled ) { // BRB: FIXME: still need to code for continuum photon. + } } + else { + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + (*productIter)->sampleProducts( m_protareSingle, projectileEnergy, a_input, a_rng, a_push_back, a_products ); + } + } + + if( m_totalDelayedNeutronMultiplicity != nullptr ) { + double totalDelayedNeutronMultiplicity = m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + + if( a_rng( ) < totalDelayedNeutronMultiplicity ) { // Assumes that totalDelayedNeutronMultiplicity < 1.0, which it is. + double sum = 0.0; + + totalDelayedNeutronMultiplicity *= a_rng( ); + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1 = m_delayedNeutrons[i1]; + Product const &product = delayedNeutron1->product( ); + + sum += product.multiplicity( )->evaluate( a_projectileEnergy ); + if( sum >= totalDelayedNeutronMultiplicity ) { + product.distribution( )->sample( a_projectileEnergy, a_input, a_rng ); + a_input.m_delayedNeutronIndex = delayedNeutron1->delayedNeutronIndex( ); + a_input.m_delayedNeutronDecayRate = delayedNeutron1->rate( ); + a_products.add( a_projectileEnergy, product.intid( ), product.index( ), product.userParticleIndex( ), product.mass( ), a_input, a_rng, a_push_back, false ); + break; + } + } + } + } + + if( m_fissionResiduaIntid != -1 ) { // Special treatment to add 2 ENDL 99120 or 99125 products. + a_input.m_sampledType = MCGIDI::Sampling::SampledType::unspecified; + a_input.m_frame = GIDI::Frame::lab; + a_input.m_energyOut1 = 0.0; + a_input.m_mu = 0.0; + a_input.m_phi = 0.0; + a_input.m_delayedNeutronIndex = -1; + a_input.m_delayedNeutronDecayRate = 0.0; + a_products.add( 0.0, m_fissionResiduaIntid, m_fissionResiduaIndex, m_fissionResiduaUserIndex, m_fissionResidualMass, a_input, a_rng, a_push_back, false ); + a_products.add( 0.0, m_fissionResiduaIntid, m_fissionResiduaIndex, m_fissionResiduaUserIndex, m_fissionResidualMass, a_input, a_rng, a_push_back, false ); + } + +#endif + + if( a_checkOrphanProducts ) { + for( auto productIter = m_associatedOrphanProducts.begin( ); productIter != m_associatedOrphanProducts.end( ); ++productIter ) { + (*productIter)->sampleProducts( m_protareSingle, projectileEnergy, a_input, a_rng, a_push_back, a_products ); + } + } +} + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. + * + * @param a_protare [in] The ProtareSingle this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE bool MCGIDI::GRIN_capture::sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + + std::size_t index = 0; + double random = a_rng( ); + for( ; index < m_summedProbabilities.size( ) - 1; ++index ) { + if( random < m_summedProbabilities[index] ) break; + } + GRIN_captureLevelProbability *GRIN_captureLevelProbability1 = m_captureLevelProbabilities[index]; + + double availableEnergy = m_captureNeutronSeparationEnergy + a_projectileEnergy; + int primaryCaptureLevelIndex = GRIN_captureLevelProbability1->sampleCaptureLevel( a_protare, availableEnergy, a_rng ); + NuclideGammaBranchStateInfo const *nuclideGammaBranchStateInfo = a_protare->nuclideGammaBranchStateInfos( )[primaryCaptureLevelIndex]; + + a_input.m_GRIN_intermediateResidual = nuclideGammaBranchStateInfo->intid( ); + + a_input.m_sampledType = Sampling::SampledType::photon; + a_input.m_dataInTargetFrame = false; + a_input.m_frame = GIDI::Frame::lab; + + a_input.m_energyOut1 = availableEnergy - nuclideGammaBranchStateInfo->nuclearLevelEnergy( ); + a_input.m_mu = 2 * a_rng( ) - 1.0; + a_input.m_phi = 2.0 * M_PI * a_rng( ); + + a_products.add( a_projectileEnergy, PoPI::Intids::photon, a_protare->photonIndex( ), a_protare->userPhotonIndex( ), + 0.0, a_input, a_rng, a_push_back, true ); + + a_protare->sampleBranchingGammas( a_input, a_projectileEnergy, primaryCaptureLevelIndex, a_rng, a_push_back, a_products ); + + if( m_residualIntid != -1 ) { + a_input.m_energyOut1 = 0.0; + a_input.m_mu = 0.0; + a_input.m_phi = 0.0; + a_products.add( a_projectileEnergy, m_residualIntid, m_residualIndex, m_residualUserIndex, m_residualMass, a_input, a_rng, a_push_back, false ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * This method adds sampled products to *a_products*. + * + * @param a_protare [in] The ProtareSingle this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE bool MCGIDI::GRIN_inelastic::sampleProducts( ProtareSingle const *a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) const { + + std::size_t index = 1; + for( ; index < m_energies.size( ); ++index ) { + if( m_energies[index] > a_projectileEnergy ) break; + } + --index; + + GRIN_inelasticForEnergy *inelasticForEnergy = m_inelasticForEnergy[index]; + int levelIndex = inelasticForEnergy->sampleLevelIndex( a_projectileEnergy, a_rng( ) ); + if( levelIndex < 0 ) return( false ); + + NuclideGammaBranchStateInfo const *nuclideGammaBranchStateInfo = a_protare->nuclideGammaBranchStateInfos( )[levelIndex]; + + a_input.m_GRIN_intermediateResidual = nuclideGammaBranchStateInfo->intid( ); + + double residualMass = m_targetMass + nuclideGammaBranchStateInfo->nuclearLevelEnergy( ); + double initialMass = m_neutronMass + m_targetMass; + double finalMass = m_neutronMass + residualMass; + double twoBodyThreshold = 0.5 * ( finalMass * finalMass - initialMass * initialMass ) / m_targetMass; + double betaBoast = sqrt( a_projectileEnergy * ( a_projectileEnergy + 2. * m_neutronMass ) ) + / ( a_projectileEnergy + m_neutronMass + m_targetMass ); // betaBoast = v/c. + double _x = m_targetMass * ( a_projectileEnergy - twoBodyThreshold ) / ( finalMass * finalMass ); + if( _x < 0 ) _x = 0.; // FIXME There needs to be a better test here. + double Kp; + if( _x < 2e-5 ) { + Kp = finalMass * _x * ( 1 - 0.5 * _x * ( 1 - _x ) ); } + else { // This is the relativistic formula derived from E^2 - (pc)^2 is frame independent. + Kp = sqrt( finalMass * finalMass + 2 * m_targetMass * ( a_projectileEnergy - twoBodyThreshold ) ) - finalMass; + } + if( Kp < 0 ) Kp = 0.; // FIXME There needs to be a better test here. + + a_input.m_sampledType = Sampling::SampledType::firstTwoBody; + a_input.m_mu = 1.0 - 2.0 * a_rng( ); + a_input.m_phi = 2. * M_PI * a_rng( ); + kinetics_COMKineticEnergy2LabEnergyAndMomentum( betaBoast, Kp, m_neutronMass, residualMass, a_input ); + + a_input.m_delayedNeutronIndex = -1; + a_input.m_delayedNeutronDecayRate = 0.0; + a_products.add( a_projectileEnergy, PoPI::Intids::neutron, m_neutronIndex, m_neutronUserParticleIndex, m_neutronMass, a_input, a_rng, + a_push_back, false ); + a_products.add( a_projectileEnergy, m_targetIntid, m_targetIndex, m_targetUserParticleIndex, + m_targetMass, a_input, a_rng, a_push_back, false ); + + a_protare->sampleBranchingGammas( a_input, a_projectileEnergy, levelIndex, a_rng, a_push_back, a_products ); + + return( true ); +} + +/* *********************************************************************************************************//** + * This method samples a capture state level and returns an index into the a_protare->m_nuclideGammaBranchStateInfos vector + * of the sampled state level. + * + * @param a_energy [in] The neutron separation energy plus the projectile energy. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return An integer of the sampled state in a_protare->m_nuclideGammaBranchStateInfos. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::GRIN_captureToCompound::sampleCaptureLevel( ProtareSingle const *a_protare, double a_energy, + RNG && a_rng, bool a_checkEnergy ) const { + + if( a_checkEnergy ) { + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = a_protare->nuclideGammaBranchStateInfos( )[m_index]; + if( nuclideGammaBranchStateInfo->nuclearLevelEnergy( ) < a_energy ) return( -1 ); + } + + double random = a_rng( ); + std::size_t index = 0; + for( ; index < m_continuumIndices.m_levels.size( ) - 1; ++index ) { + if( m_continuumIndices.m_summedProbabilities[index] >= random ) break; + } + return( m_continuumIndices.m_levels[index] ); +} + +/* *********************************************************************************************************//** + * This method samples a capture state level and returns an index into the a_protare->m_nuclideGammaBranchStateInfos vector + * of the sampled state level. + * + * @param a_protare [in] The ProtareSingle this Reaction belongs to. + * @param a_energy [in] The neutron separation energy plus the projectile energy. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * + * @return An integer of the sampled state in a_protare->m_nuclideGammaBranchStateInfos. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE int MCGIDI::GRIN_captureLevelProbability::sampleCaptureLevel( ProtareSingle const *a_protare, double a_energy, RNG && a_rng ) { + + double random = a_rng( ); + for( std::size_t index = 0; index < m_knownLevelsAndProbabilities.m_levels.size( ); ++index ) { + if( m_knownLevelsAndProbabilities.m_summedProbabilities[index] >= random ) { + return( m_knownLevelsAndProbabilities.m_levels[index] ); + } + } + + for( std::size_t i1 = 0; i1 < m_captureToCompounds.size( ) - 1; ++i1 ) { + GRIN_captureToCompound const *GRIN_captureToCompound1 = m_captureToCompounds[i1]; + + int index = GRIN_captureToCompound1->sampleCaptureLevel( a_protare, a_energy, a_rng, true ); + if( index > -1 ) return( index ); + } + + return( m_captureToCompounds.back( )->sampleCaptureLevel( a_protare, a_energy, a_rng, false ) ); +} + +/* *********************************************************************************************************//** + * This method adds a null product to *a_products*. When running in multi-group mode, a sampled reaction may be rejected if the threshold + * is in the multi-group that the projectile is in. If this happens, only null products should be returned. This type of behavior was need + * in MCAPM but is probably not needed for MCGIDI. + * + * @param a_protare [in] The Protare this Reaction belongs to. + * @param a_projectileEnergy [in] The energy of the projectile. + * @param a_input [in] Sample options requested by user. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_products [in] The object to add all sampled products to. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE void MCGIDI::Reaction::sampleNullProducts( Protare const &a_protare, double a_projectileEnergy, Sampling::Input &a_input, + RNG && a_rng, PUSHBACK && a_push_back, Sampling::ProductHandler &a_products ) { + + a_input.m_GRIN_intermediateResidual = -1; + a_input.m_sampledType = Sampling::SampledType::uncorrelatedBody; + a_input.m_dataInTargetFrame = false; + a_input.m_frame = GIDI::Frame::lab; + a_input.m_delayedNeutronIndex = -1; + a_input.m_delayedNeutronDecayRate = 0.0; + + a_input.m_energyOut1 = a_projectileEnergy; + a_input.m_mu = 1.0; + a_input.m_phi = 0.0; + + a_products.add( a_projectileEnergy, a_protare.projectileIntid( ), a_protare.projectileIndex( ), a_protare.projectileUserIndex( ), a_protare.projectileMass( ), a_input, a_rng, a_push_back, false ); +} + +/* *********************************************************************************************************//** + * Returns the weight for a project with energy *a_energy_in* to cause this reaction to emitted a particle of index + * *a_index* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_index [in] The index of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The cumulative multiplicity. + * @param a_checkOrphanProducts [in] If true, associated orphan products are also sampled. + * + * @return The weight that the particle is emitted into mu *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Reaction::angleBiasing( int a_index, double a_temperature, double a_energy_in, double a_mu_lab, double &a_energy_out, + RNG && a_rng, double *a_cumulative_weight, bool a_checkOrphanProducts ) const { + + double cumulative_weight1 = 0.0; + if( a_cumulative_weight == nullptr ) a_cumulative_weight = &cumulative_weight1; + double weight1 = 0.0; + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->angleBiasing( this, a_index, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); +#else + + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + (*productIter)->angleBiasing( this, a_index, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); + } + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_index == m_neutronIndex ) ) { + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1 = m_delayedNeutrons[i1]; + Product const &product = delayedNeutron1->product( ); + + product.angleBiasing( this, a_index, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); + } + } +#endif + + if( a_checkOrphanProducts ) { + for( auto productIter = m_associatedOrphanProducts.begin( ); productIter != m_associatedOrphanProducts.end( ); ++productIter ) { + (*productIter)->angleBiasing( this, a_index, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, + *a_cumulative_weight ); + } + } + + return( weight1 ); +} + +/* *********************************************************************************************************//** + * Returns the weight for a project with energy *a_energy_in* to cause this reaction to emitted a particle of intid + * *a_intid* at angle *a_mu_lab* as seen in the lab frame. If a particle is emitted, *a_energy_out* is its sampled outgoing energy. + * + * @param a_intid [in] The intid of the particle to emit. + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_energy_in [in] The energy of the incident particle. + * @param a_mu_lab [in] The desired mu in the lab frame for the emitted particle. + * @param a_energy_out [in] The energy of the emitted outgoing particle. + * @param a_rng [in] The random number generator function that returns a double in the range [0, 1.0). + * @param a_cumulative_weight [in] The cumulative multiplicity. + * @param a_checkOrphanProducts [in] If true, associated orphan products are also sampled. + * + * @return The weight that the particle is emitted into mu *a_mu_lab*. + ***********************************************************************************************************/ + +template +LUPI_HOST_DEVICE double MCGIDI::Reaction::angleBiasingViaIntid( int a_intid, double a_temperature, double a_energy_in, double a_mu_lab, double &a_energy_out, + RNG && a_rng, double *a_cumulative_weight, bool a_checkOrphanProducts ) const { + + double cumulative_weight1 = 0.0; + if( a_cumulative_weight == nullptr ) a_cumulative_weight = &cumulative_weight1; + double weight1 = 0.0; + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->angleBiasingViaIntid( this, a_intid, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); +#else + + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + (*productIter)->angleBiasingViaIntid( this, a_intid, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); + } + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_intid == PoPI::Intids::neutron ) ) { + for( std::size_t i1 = 0; i1 < (std::size_t) m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron const *delayedNeutron1 = m_delayedNeutrons[i1]; + Product const &product = delayedNeutron1->product( ); + + product.angleBiasingViaIntid( this, a_intid, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, *a_cumulative_weight ); + } + } +#endif + + if( a_checkOrphanProducts ) { + for( auto productIter = m_associatedOrphanProducts.begin( ); productIter != m_associatedOrphanProducts.end( ); ++productIter ) { + (*productIter)->angleBiasingViaIntid( this, a_intid, a_temperature, a_energy_in, a_mu_lab, weight1, a_energy_out, a_rng, + *a_cumulative_weight ); + } + } + + return( weight1 ); +} + +// From file: MCGIDI_sampling.cpp + +template +LUPI_HOST_DEVICE void MCGIDI::Sampling::ProductHandler::add( double a_projectileEnergy, int a_productIntid, int a_productIndex, int a_userProductIndex, + double a_productMass, Input &a_input, RNG && a_rng, PUSHBACK && a_push_back, bool a_isPhoton ) { + + Product product; + + if( a_isPhoton && ( a_input.m_sampledType != SampledType::unspecified ) ) a_input.m_sampledType = SampledType::photon; + + product.m_sampledType = a_input.m_sampledType; + product.m_isVelocity = a_input.wantVelocity( ); + product.m_productIntid = a_productIntid; + product.m_productIndex = a_productIndex; + product.m_userProductIndex = a_userProductIndex; + product.m_numberOfDBRC_rejections = a_input.m_numberOfDBRC_rejections; + product.m_productMass = a_productMass; + + product.m_delayedNeutronIndex = a_input.m_delayedNeutronIndex; + product.m_delayedNeutronDecayRate = a_input.m_delayedNeutronDecayRate; + product.m_birthTimeSec = 0.; + if( product.m_delayedNeutronDecayRate > 0. ) { + product.m_birthTimeSec = -log( a_rng( ) ) / product.m_delayedNeutronDecayRate; + } + + if( a_input.m_sampledType == SampledType::unspecified ) { + product.m_kineticEnergy = 0.0; + product.m_px_vx = 0.0; + product.m_py_vy = 0.0; + product.m_pz_vz = 0.0; } + else if( a_input.m_sampledType == SampledType::uncorrelatedBody ) { + if( a_input.m_frame == GIDI::Frame::centerOfMass ) { + a_input.m_frame = GIDI::Frame::lab; + + double massRatio = a_input.m_projectileMass + a_input.m_targetMass; + massRatio = a_input.m_projectileMass * a_productMass / ( massRatio * massRatio ); + double modifiedProjectileEnergy = massRatio * a_projectileEnergy; + + double sqrtModifiedProjectileEnergy = sqrt( modifiedProjectileEnergy ); + double sqrtEnergyOut_com = a_input.m_mu * sqrt( a_input.m_energyOut1 ); + + a_input.m_energyOut1 += modifiedProjectileEnergy + 2. * sqrtModifiedProjectileEnergy * sqrtEnergyOut_com; + if( a_input.m_energyOut1 != 0 ) a_input.m_mu = ( sqrtModifiedProjectileEnergy + sqrtEnergyOut_com ) / sqrt( a_input.m_energyOut1 ); + } + + product.m_kineticEnergy = a_input.m_energyOut1; + + double p_v = sqrt( a_input.m_energyOut1 * ( a_input.m_energyOut1 + 2. * a_productMass ) ); + if( product.m_isVelocity ) p_v *= MCGIDI_speedOfLight_cm_sec / ( a_input.m_energyOut1 + a_productMass ); + + product.m_pz_vz = p_v * a_input.m_mu; + p_v *= sqrt( 1. - a_input.m_mu * a_input.m_mu ); + product.m_px_vx = p_v * sin( a_input.m_phi ); + product.m_py_vy = p_v * cos( a_input.m_phi ); } + else if( a_input.m_sampledType == SampledType::firstTwoBody ) { + product.m_kineticEnergy = a_input.m_energyOut1; + product.m_px_vx = a_input.m_px_vx1; + product.m_py_vy = a_input.m_py_vy1; + product.m_pz_vz = a_input.m_pz_vz1; + a_input.m_sampledType = SampledType::secondTwoBody; } + else if( a_input.m_sampledType == SampledType::secondTwoBody ) { + product.m_kineticEnergy = a_input.m_energyOut2; + product.m_px_vx = a_input.m_px_vx2; + product.m_py_vy = a_input.m_py_vy2; + product.m_pz_vz = a_input.m_pz_vz2; } + else if( a_input.m_sampledType == SampledType::photon ) { + product.m_kineticEnergy = a_input.m_energyOut1; + + double pz_vz_factor = a_input.m_energyOut1; + if( product.m_isVelocity ) pz_vz_factor = MCGIDI_speedOfLight_cm_sec; + product.m_pz_vz = a_input.m_mu * pz_vz_factor; + + double v_perp = sqrt( 1.0 - a_input.m_mu * a_input.m_mu ) * pz_vz_factor; + product.m_px_vx = cos( a_input.m_phi ) * v_perp; + product.m_py_vy = sin( a_input.m_phi ) * v_perp; } + else { + product.m_kineticEnergy = a_input.m_energyOut2; + product.m_px_vx = a_input.m_px_vx2; + product.m_py_vy = a_input.m_py_vy2; + product.m_pz_vz = a_input.m_pz_vz2; + } + + if( a_input.m_dataInTargetFrame && ( a_input.m_sampledType != SampledType::photon ) ) upScatterModelABoostParticle( a_input, a_rng, product ); + + a_push_back( product ); +} + +#endif // End of MCGIDI_headerSource_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_map.h b/source/processes/hadronic/models/lend/include/MCGIDI_map.h deleted file mode 100644 index f952b25ba6..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI_map.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_map_h_included -#define MCGIDI_map_h_included - -#include - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -enum MCGIDI_map_status { MCGIDI_map_status_Ok, MCGIDI_map_status_memory, MCGIDI_map_status_mapParsing, - MCGIDI_map_status_UnknownType }; -enum MCGIDI_mapEntry_type { MCGIDI_mapEntry_type_target, MCGIDI_mapEntry_type_path }; - -typedef struct MCGIDI_map_s MCGIDI_map; -typedef struct MCGIDI_mapEntry_s MCGIDI_mapEntry; -typedef struct MCGIDI_map_smr_s MCGIDI_map_smr; - -struct MCGIDI_map_smr_s { - smr_userInterface smrUserInterface; - MCGIDI_map *map; -}; - -struct MCGIDI_mapEntry_s { - MCGIDI_mapEntry *next; - enum MCGIDI_mapEntry_type type; - MCGIDI_map *parent; - char *schema; - char *path; - char *evaluation; - char *projectile; - char *targetName; - int globalPoPsIndexProjectile, globalPoPsIndexTarget; - MCGIDI_map *map; -}; - -struct MCGIDI_map_s { - enum MCGIDI_map_status status; - MCGIDI_map_smr smrUserInterface; - char *path; - char *mapFileName; - int numberOfEntries; - MCGIDI_mapEntry *mapEntries; -}; - -MCGIDI_map *MCGIDI_map_new( statusMessageReporting *smr ); -int MCGIDI_map_initialize( statusMessageReporting *smr, MCGIDI_map *map ); -MCGIDI_map *MCGIDI_map_readFile( statusMessageReporting *smr, const char *basePath, const char *mapFileName ); -void *MCGIDI_map_free( statusMessageReporting *smr, MCGIDI_map *map ); -void MCGIDI_map_release( statusMessageReporting *smr, MCGIDI_map *map ); -MCGIDI_mapEntry *MCGIDI_map_getFirstEntry( MCGIDI_map *map ); -MCGIDI_mapEntry *MCGIDI_map_getNextEntry( MCGIDI_mapEntry *entry ); -int MCGIDI_map_addTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *method, const char *path, const char *evaluation, const char *projectile, const char *targetName ); -int MCGIDI_map_addPath( statusMessageReporting *smr, MCGIDI_map *map, const char *path ); -char *MCGIDI_map_findTargetViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, int projectile_PoPID, int target_PoPID ); -char *MCGIDI_map_findTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, const char *projectile, const char *targetName ); -MCGIDI_map *MCGIDI_map_findAllOfTargetViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, int projectile_PoPID, int target_PoPID ); -MCGIDI_map *MCGIDI_map_findAllOfTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *projectile, const char *targetName ); -char *MCGIDI_map_getFullPath( statusMessageReporting *smr, MCGIDI_map *map, const char *endPath ); -char *MCGIDI_map_getTargetsFullPath( statusMessageReporting *smr, MCGIDI_mapEntry *target ); -int MCGIDI_map_walkTree( statusMessageReporting *smr, MCGIDI_map *map, int (*handler)( MCGIDI_mapEntry *entry, int level, void *userData), void *userData ); -char *MCGIDI_map_toXMLString( statusMessageReporting *smr, MCGIDI_map *map ); -void MCGIDI_map_simpleWrite( FILE *f, MCGIDI_map *map ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_map_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_mass.h b/source/processes/hadronic/models/lend/include/MCGIDI_mass.h deleted file mode 100644 index 7e32307e62..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI_mass.h +++ /dev/null @@ -1,20 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_mass_h_included -#define MCGIDI_mass_h_included - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -double MCGIDI_particleMass_AMU( statusMessageReporting *smr, const char *name ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_mass_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_misc.h b/source/processes/hadronic/models/lend/include/MCGIDI_misc.h deleted file mode 100644 index 043999a92d..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI_misc.h +++ /dev/null @@ -1,47 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_misc_h_included -#define MCGIDI_misc_h_included - -#include -#include -#include "MCGIDI_private.h" - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -char const *MCGIDI_misc_pointerToTOMAttributeIfAllOk( statusMessageReporting *smr, char const *path, int required, - xDataTOM_attributionList *attributes, char const *name, char const *file, int line ); -char const *MCGIDI_misc_pointerToAttributeIfAllOk( statusMessageReporting *smr, xDataXML_element *element, char const *path, int required, - xDataTOM_attributionList *attributes, char const *name, char const *file, int line ); -int MCGIDI_misc_setMessageError_Element( statusMessageReporting *smr, void *userInterface, xDataXML_element *element, char const *file, int line, int code, - char const *fmt, ... ); -char *MCGIDI_misc_getAbsPath( statusMessageReporting *smr, char const *fileName ); -int MCGIDI_misc_copyXMLAttributesToTOM( statusMessageReporting *smr, xDataTOM_attributionList *TOM, xDataXML_attributionList *XML ); - -#define MCGIDI_misc_pointerToTOMAttributeIfAllOk2( smr, required, attributes, name ) \ - MCGIDI_misc_pointerToTOMAttributeIfAllOk( smr, NULL, required, attributes, name, __FILE__, __LINE__ ) -#define MCGIDI_misc_pointerToTOMAttributeIfAllOk3( smr, path, required, attributes, name ) \ - MCGIDI_misc_pointerToTOMAttributeIfAllOk( smr, path, required, attributes, name, __FILE__, __LINE__ ) - -#define MCGIDI_misc_pointerToAttributeIfAllOk2( smr, element, required, attributes, name ) \ - MCGIDI_misc_pointerToAttributeIfAllOk( smr, element, NULL, required, attributes, name, __FILE__, __LINE__ ) -#define MCGIDI_misc_pointerToAttributeIfAllOk3( smr, path, required, attributes, name ) \ - MCGIDI_misc_pointerToAttributeIfAllOk( smr, NULL, path, required, attributes, name, __FILE__, __LINE__ ) -enum xDataTOM_frame MCGIDI_misc_getProductFrame( statusMessageReporting *smr, xDataTOM_element *frameElement ); - -double MCGIDI_misc_getUnitConversionFactor( statusMessageReporting *smr, char const *fromUnit, char const *toUnit ); -ptwXYPoints *MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( statusMessageReporting *smr, xDataTOM_XYs *XYs, - ptwXY_interpolation interpolation, char const *units[2] ); -ptwXYPoints *MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( statusMessageReporting *smr, xDataTOM_element *linear, char const *toUnits[2] ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_misc_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_private.h b/source/processes/hadronic/models/lend/include/MCGIDI_private.h deleted file mode 100644 index fa1acf308c..0000000000 --- a/source/processes/hadronic/models/lend/include/MCGIDI_private.h +++ /dev/null @@ -1,20 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef MCGIDI_private_h_included -#define MCGIDI_private_h_included - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -#define MCGIDI_token_productFrame "productFrame" - -#if defined __cplusplus - } - } -#endif - -#endif /* End of MCGIDI_private_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_sampling.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_sampling.hpp new file mode 100644 index 0000000000..e3c48eabc5 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_sampling.hpp @@ -0,0 +1,305 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_sampling_hpp_included +#define MCGIDI_sampling_hpp_included 1 + +#include +#include +#include + +namespace MCGIDI { + +/* +============================================================ +======================= DomainHash ========================= +============================================================ +*/ +class DomainHash { + + private: + int m_bins; /**< The number of bins for the hash. */ + double m_domainMin; /**< The minimum domain value for the hash. */ + double m_domainMax; /**< The maximum domain value for the hash. */ + double m_u_domainMin; /**< The log of m_domainMin ). */ + double m_u_domainMax; /**< The log of m_domainMax ). */ + double m_inverse_du; /**< The value *m_bins* / ( *m_u_domainMax* - *m_u_domainMin* ). */ + + public: + LUPI_HOST_DEVICE DomainHash( ); + LUPI_HOST_DEVICE DomainHash( int a_bins, double a_domainMin, double a_domainMax ); + LUPI_HOST_DEVICE DomainHash( DomainHash const &a_domainHash ); + + LUPI_HOST_DEVICE int bins( ) const { return( m_bins ); } /**< Returns the value of the **m_bins**. */ + LUPI_HOST_DEVICE double domainMin( ) const { return( m_domainMin ); } /**< Returns the value of the **m_domainMax**. */ + LUPI_HOST_DEVICE double domainMax( ) const { return( m_domainMax ); } /**< Returns the value of the **m_domainMax**. */ + LUPI_HOST_DEVICE double u_domainMin( ) const { return( m_u_domainMin ); } /**< Returns the value of the **m_u_domainMin**. */ + LUPI_HOST_DEVICE double u_domainMax( ) const { return( m_u_domainMax ); } /**< Returns the value of the **m_u_domainMax**. */ + LUPI_HOST_DEVICE double inverse_du( ) const { return( m_inverse_du ); } /**< Returns the value of the **m_inverse_du**. */ + + LUPI_HOST_DEVICE int index( double a_domain ) const ; + LUPI_HOST_DEVICE Vector map( Vector const &a_domainValues ) const ; + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); + + LUPI_HOST void print( bool a_printValues ) const ; +}; + +namespace Sampling { + +enum class SampledType { firstTwoBody, secondTwoBody, uncorrelatedBody, unspecified, photon }; + +LUPI_HOST_DEVICE int evaluationForHashIndex( int a_hashIndex, Vector const &a_hashIndices, double a_energy, + Vector const &a_energies, double *a_energyFraction ); + +namespace Upscatter { + + enum class Model { none, A, B, BSnLimits, DBRC }; + +/* +============================================================ +===================== ModelDBRC_data ======================= +============================================================ +*/ + +class ModelDBRC_data { + + public: + double m_neutronMass; /**< The mass of the neutron. */ + double m_targetMass; /**< The mass of the target. */ + Vector m_energies; /**< The energy grid for the cross section. */ + Vector m_crossSections; /**< The cross sections corresponding to the energy grid. */ + Vector m_hashIndices; /**< The indicies for the energy hash function. */ + MCGIDI::DomainHash m_domainHash; /**< The hash "function". */ + + public: + LUPI_HOST_DEVICE ModelDBRC_data( ); + LUPI_HOST ModelDBRC_data( double a_neutronMass, double a_targetMass, Vector const &a_energies, Vector const &a_crossSections, + DomainHash const &a_domainHash ); + LUPI_HOST_DEVICE ~ModelDBRC_data( ); + + LUPI_HOST_DEVICE double evaluate( double a_energy ); + LUPI_HOST_DEVICE double targetThermalSpeed( double a_temperature ); + LUPI_HOST_DEVICE double crossSectionMax( double a_energy, double a_targetThermalSpeed ); + + LUPI_HOST_DEVICE void serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ); +}; + +LUPI_HOST_DEVICE ModelDBRC_data *serializeModelDBRC_data( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, ModelDBRC_data *a_modelDBRC_data ); + +} // End of namespace Upscatter. + +/* +============================================================ +================ ClientRandomNumberGenerator =============== +============================================================ +*/ +class ClientRandomNumberGenerator { + private: + double (*m_generator)( void * ); /**< User supplied generator. */ + void *m_state; /**< User supplied state. */ + + public: + LUPI_HOST_DEVICE ClientRandomNumberGenerator( double (*a_generator)( void * ), void *a_state ); + + LUPI_HOST_DEVICE double (*generator( ))( void * ) { return( m_generator ); } + LUPI_HOST_DEVICE void *state( ) { return( m_state ); } + LUPI_HOST_DEVICE double Double( ) { return( m_generator( m_state ) ); } + +// The following are deprecated. + LUPI_HOST_DEVICE double (*rng( ))( void * ) { return( generator( ) ); } + LUPI_HOST_DEVICE void *rngState( ) { return( state( ) ); } + LUPI_HOST_DEVICE double dRng( ) { return( Double( ) ); } +}; + +/* +============================================================ +=================== Client Code RNG Data =================== +============================================================ +*/ +class ClientCodeRNGData : public ClientRandomNumberGenerator { + + public: + LUPI_HOST_DEVICE ClientCodeRNGData( double (*a_generator)( void * ), void *a_state ); +}; + +/* +============================================================ +=========================== Input ========================== +============================================================ +*/ +class Input { + + private: + bool m_wantVelocity = true ; /**< See member m_isVelocity in class Product for meaning. This is user input. */ + + public: + double m_temperature = 0.0; /**< Set by user. */ + + Upscatter::Model m_upscatterModel = Upscatter::Model::none; /**< The upscatter model to use when sampling a target's velocity. */ + // The rest of the members are set by MCGIDI methods. + // These five are used for upscatter model A. + bool m_dataInTargetFrame = false; /**< **true if the data are in the target's frame and **false** otherwise. */ + double m_projectileBeta = 0.0; /**< The beta = speed / c of the projectile. */ + double m_relativeMu = 0.0; /**< BRB */ + double m_targetBeta = 0.0; /**< The beta = speed / c of the target. */ + double m_relativeBeta = 0.0; /**< The beta = speed / c of the relative speed between the projectile and the target.*/ + + double m_projectileEnergy = 0.0; /**< The energy of the projectile. */ + + SampledType m_sampledType = SampledType::uncorrelatedBody; /**< BRB */ + Reaction const *m_reaction = nullptr; /**< The current reaction whose products are being sampled. */ + + double m_projectileMass = 0.0; /**< The mass of the projectile. */ + double m_targetMass = 0.0; /**< The mass of the target. */ + + GIDI::Frame m_frame = GIDI::Frame::lab; /**< The frame the product data are returned in. */ + int m_numberOfDBRC_rejections = 0; /**< For the DBRC upscattering model, this is the number of rejections + 1 per product sample. */ + + double m_mu = 0.0; /**< The sampled mu = cos( theta ) for the product. */ + double m_phi = 0.0; /**< The sampled phi for the product. */ + + double m_energyOut1 = 0.0; /**< The sampled energy of the product. */ + double m_px_vx1 = 0.0; /**< Variable used for two-body sampling. */ + double m_py_vy1 = 0.0; /**< Variable used for two-body sampling. */ + double m_pz_vz1 = 0.0; /**< Variable used for two-body sampling. */ + + double m_energyOut2 = 0.0; /**< The sampled energy of the second product for a two-body interaction. */ + double m_px_vx2 = 0.0; /**< Variable used for two-body sampling. */ + double m_py_vy2 = 0.0; /**< Variable used for two-body sampling. */ + double m_pz_vz2 = 0.0; /**< Variable used for two-body sampling. */ + + int m_delayedNeutronIndex = -1; /**< If the product is a delayed neutron, this is its index. */ + double m_delayedNeutronDecayRate = 0.0; /**< If the product is a delayed neutron, this is its decay rate. */ + + int m_GRIN_intermediateResidual = -1; /**< For special GRIN product sampling, this is the GNDS intid of the intermediate residual. */ + + LUPI_HOST_DEVICE Input( bool a_wantVelocity, Upscatter::Model a_upscatterModel ); + + LUPI_HOST_DEVICE bool wantVelocity( ) const { return( m_wantVelocity ); } /**< BRB */ +}; + +/* +============================================================ +========================== Product ========================= +============================================================ +*/ +class Product { + + public: + SampledType m_sampledType; + bool m_isVelocity; /**< If true, m_px_vx, m_py_vy and m_pz_vz are velocities otherwise momenta. */ + int m_productIntid; /**< The intid of the sampled product. */ + int m_productIndex; /**< The index of the sampled product. */ + int m_userProductIndex; /**< The user particle index of the sampled product. */ + int m_numberOfDBRC_rejections; /**< For the DBRC upscattering model, this is the number of rejections + 1 per product sample. */ + double m_productMass; /**< The mass of the sampled product. */ + double m_kineticEnergy; /**< The kinetic energy of the sampled product. */ + double m_px_vx; /**< The velocity or momentum along the x-axis of the sampled product. */ + double m_py_vy; /**< The velocity or momentum along the y-axis of the sampled product. */ + double m_pz_vz; /**< The velocity or momentum along the z-axis of the sampled product. The z-axis is along the direction of the projectile's velolcity. */ + int m_delayedNeutronIndex; /**< If the product is a delayed neutron, this is its index. */ + double m_delayedNeutronDecayRate; /**< If the product is a delayed neutron, this is its decay rate. */ + double m_birthTimeSec; /**< Some products, like delayed fission neutrons, are to appear (be born) later. This is the time in seconds that such a particle should be born since the interaction. */ +}; + +/* +============================================================ +====================== ProductHandler ====================== +============================================================ +*/ +class ProductHandler { + + public: + LUPI_HOST_DEVICE ProductHandler( ) {} + LUPI_HOST_DEVICE ~ProductHandler( ) {} + + template + LUPI_HOST_DEVICE void add( double a_projectileEnergy, int a_productIntid, int a_productIndex, int a_userProductIndex, double a_productMass, Input &a_input, + RNG && a_rng, PUSHBACK && push_back, bool isPhoton ); +}; + +/* +============================================================ +================ StdVectorProductHandler =================== +============================================================ +*/ +#ifdef __CUDACC__ + +#define MCGIDI_CUDACC_numberOfProducts 1000 + +class StdVectorProductHandler : public ProductHandler { + + private: + std::size_t m_size; + Product m_products[1024]; + + public: + LUPI_HOST_DEVICE StdVectorProductHandler( ) : m_size( 0 ) { } + LUPI_HOST_DEVICE ~StdVectorProductHandler( ) { } + + LUPI_HOST_DEVICE std::size_t size( ) { return( m_size ); } + LUPI_HOST_DEVICE Product &operator[]( long a_index ) { return( m_products[a_index] ); } + LUPI_HOST_DEVICE void push_back( Product &a_product ) { + if( m_size < MCGIDI_CUDACC_numberOfProducts ) { + m_products[m_size] = a_product; + ++m_size; + } + } + LUPI_HOST_DEVICE void clear( ) { m_size = 0; } +}; + +#else +class StdVectorProductHandler : public ProductHandler { + + private: + std::vector m_products; /**< The list of products sampled. */ + + public: + LUPI_HOST_DEVICE StdVectorProductHandler( ) : m_products( ) { } + LUPI_HOST_DEVICE ~StdVectorProductHandler( ) { } + + LUPI_HOST_DEVICE std::size_t size( ) { return( m_products.size( ) ); } + LUPI_HOST_DEVICE Product &operator[]( long a_index ) { return( m_products[a_index] ); } + LUPI_HOST_DEVICE std::vector &products( ) { return( m_products ); } + LUPI_HOST_DEVICE void push_back( Product &a_product ) { m_products.push_back( a_product ); } + LUPI_HOST_DEVICE void clear( ) { m_products.clear( ); } +}; +#endif + +/* +============================================================ +============== MCGIDIVectorProductHandler ================== +============================================================ +*/ +class MCGIDIVectorProductHandler : public ProductHandler { + + private: + Vector m_products; /**< The list of products sampled. */ + + public: + LUPI_HOST_DEVICE MCGIDIVectorProductHandler( std::size_t a_size = 20 ) : + m_products( ) { + + m_products.reserve( a_size ); + } + LUPI_HOST_DEVICE ~MCGIDIVectorProductHandler( ) {} + + LUPI_HOST_DEVICE std::size_t size( ) { return( m_products.size( ) ); } + LUPI_HOST_DEVICE Product const &operator[]( std::size_t a_index ) const { return( m_products[a_index] ); } + LUPI_HOST_DEVICE Vector const &products( ) const { return( m_products ); } + LUPI_HOST_DEVICE void push_back( Product &a_product ) { m_products.push_back( a_product ); } + LUPI_HOST_DEVICE void clear( ) { m_products.clear( ); } +}; + +} // End of namespace Sampling. + +} // End of namespace MCGIDI. + +#endif // End of MCGIDI_sampling_hpp_included diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_string.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_string.hpp new file mode 100644 index 0000000000..07063fc30c --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_string.hpp @@ -0,0 +1,174 @@ +/* + # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT + # <> + */ + +#ifndef MCGIDI_STRING_HPP +#define MCGIDI_STRING_HPP + +/* Modified from Karsten Burger's version 2017 + * Made changes to make it more compatible with GPUs. + * Allow for data to be initialized to nullptr. + * + * Modified from public domain software: + * Karsten Burger 2014 + * + * Sourceforge project "Simple C++ String Class" + * http://sourceforge.net/projects/simplecstringclass/ + + * This a simple C++ string class based on class my_string by + * Christian Stigen Larsen, 2007, http://csl.name/programming/my_string/ + * + * It only uses the C-string functions and is thus independent of the + * standard C++ library. + * + * It is public domain, in the hope, that you find it useful. + * Please note that there is no guarantee of any kind: it is supplied + * without any warranty; without even the implied warranty of + * merchantability or fitness for a particular purpose. + * + * You can probably replace std::string with this one in many + * cases, but a lot of stuff is missing, and I would recommend + * you stick to std::string anyway. + * + * I want to point out that there is nothing fancy about this class. + * It keeps every string in its own buffer, and copies as often as + * needed. + * The data always contains a trailing NUL char. + * + * However, I believe that is a good approach. For instance, it + * uses malloc rather than new, which makes it possible to use + * realloc. On many systems, realloc will try to use up "invisible" + * space that was used by malloc to pad a string for memory alignment. + * That makes it potentially fast for small concatenations. + * + * I don't propose to use this class for anything practical, since + * we already have std::string, but it may be an interesting read + * for C++ novices at the very least. Also, additional functions can + * easily be expanded. + * + * Also I met a case, where I had to avoid std::string because of + * link problems with an application using mixed libraries, especially + * one compiled with an old Intel compiler icc 7. + * + * Bugs/suggestions to info [at) dr-burger ]dot[ com + * or via the Sourceforge project page. + */ + +#include // size_t +#include +#include + + /** @brief Simple C++ string class, useful as replacement for + std::string if this cannot be used, or just for fun. + + */ +namespace MCGIDI { + +class String +{ + + char* p; ///< The data + size_t allocated_; ///< The allocated memory size (including trailing NUL) + size_t size_; ///< The currently used memory size (excluding trailing NUL) + + public: + typedef size_t size_type; + static const size_type npos; + + LUPI_HOST_DEVICE String(); + LUPI_HOST_DEVICE ~String(); + LUPI_HOST_DEVICE String(const String&); + LUPI_HOST_DEVICE String(const char*); + + LUPI_HOST_DEVICE String& operator=(const char*); + LUPI_HOST_DEVICE String& operator=(const String&); + + LUPI_HOST_DEVICE String& operator+=(const String&); + LUPI_HOST_DEVICE String& operator+=(const char*); + LUPI_HOST_DEVICE String& operator+=(char); + LUPI_HOST_DEVICE void push_back(char); + + friend String + LUPI_HOST_DEVICE operator+(const String& lhs, const String& rhs); + + LUPI_HOST_DEVICE bool operator==(const char*) const; + LUPI_HOST_DEVICE bool operator==(const String&) const; + + LUPI_HOST_DEVICE void clear(); // set string to empty string (memory remains reserved) + LUPI_HOST_DEVICE void clearMemory(); // set string to empty string (memory is free'd) + + LUPI_HOST_DEVICE size_type size() const { return size_; } ///< size without terminating NUL + LUPI_HOST_DEVICE size_type length() const { return size_; } ///< as size() + + // size if fully used + LUPI_HOST_DEVICE size_type capacity() const { return allocated_-1; } + + // 8 byte alligned size + LUPI_HOST_DEVICE long internalSize() const { + long delta = allocated_; + long sub = delta % 8; + if (sub != 0) delta += (8-sub); + return delta * sizeof(char); + } + + LUPI_HOST_DEVICE bool empty() const { return size_ == 0; } + + LUPI_HOST_DEVICE const char* c_str() const { return p; } ///< raw data + + /** Reserve internal string memory so that n characters can be put into the + string (plus 1 for the NUL char). If there is already enough memory, + nothing happens, if not, the memory will be realloated to exactly this + amount. + */ + LUPI_HOST_DEVICE void reserve( size_type n, char ** address = nullptr); + + /** Resize string. If n is less than the current size, the string will be truncated. + If n is larger, then the memory will be reallocated to exactly this amount, and + the additional characters will be NUL characters. + */ + LUPI_HOST_DEVICE void resize( size_type n, char ** address = nullptr); + + /** Resize string. If n is less than the current size, the string will be truncated. + If n is larger, then the memory will be reallocated to exactly this amount, and + the additional characters will be c characters. + */ + LUPI_HOST_DEVICE void resize( size_type n, char c, char ** address = nullptr); + + /// swap contents + LUPI_HOST_DEVICE void swap( String& ); + + LUPI_HOST_DEVICE String substr(const size_type pos, size_type length) const; + + // unchecked access: + LUPI_HOST_DEVICE char& operator[](const size_type i) { return p[i]; } + LUPI_HOST_DEVICE char operator[](const size_type i) const { return p[i]; } + // checked access: + LUPI_HOST_DEVICE char& at(const size_type i); + LUPI_HOST_DEVICE char at(const size_type i) const; + + /// erase len characters at position pos + LUPI_HOST_DEVICE String& erase(size_type pos, size_type len); + /// Append n characters of a string + LUPI_HOST_DEVICE String& append(const char* str, size_type n); + + LUPI_HOST_DEVICE int compare( size_type pos, size_type len, const String& str ) const; + LUPI_HOST_DEVICE int compare( size_type pos, size_type len, const char* str ) const; + + private: + // reallocate the internal memory + LUPI_HOST_DEVICE void my_realloc( size_type n, char ** address = nullptr); + LUPI_HOST_DEVICE char* strdup_never_null(const char* other); + +}; +// class + +LUPI_HOST_DEVICE bool operator<(const String&, const String&); + +} + +#endif diff --git a/source/processes/hadronic/models/lend/include/MCGIDI_vector.hpp b/source/processes/hadronic/models/lend/include/MCGIDI_vector.hpp new file mode 100644 index 0000000000..d4fc958569 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/MCGIDI_vector.hpp @@ -0,0 +1,468 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef MCGIDI_VECTOR_HPP +#define MCGIDI_VECTOR_HPP + +#define CPU_MEM false +#define UVM_MEM true + +#ifdef HAVE_OPENMP_TARGET + #ifdef USE_OPENMP_NO_GPU + #define VAR_MEM false + #else + #define VAR_MEM true + #endif +#else + #define VAR_MEM false +#endif + +typedef int MCGIDI_VectorSizeType; + +#define MCGIDI_SWAP(a,b,type) {type ttttttttt=a;a=b;b=ttttttttt;} + +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) +#include +#include +#include +#endif + +#if defined(__HIP__) +#include +#include +#include +#include +#endif + +#include +#include +#include "cassert" +#include +#include +#include + +namespace MCGIDI { + +template +class Vector +{ + private: + T* _data; + std::size_t _capacity; + std::size_t _size; + bool _mem_type; + + public: + typedef T* iterator; + typedef T* const_iterator; + + LUPI_HOST_DEVICE Vector() : _data(0), _capacity(0), _size(0), _mem_type(CPU_MEM) {}; + LUPI_HOST_DEVICE Vector( std::size_t s, bool mem_flag = CPU_MEM ) : _data(0), _capacity(s), _size(s), _mem_type(mem_flag) + { + + if( s == 0 ){ _data = nullptr; return;} + switch ((int)_mem_type){ + case CPU_MEM: + _data = new T [_capacity]; + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + _data = new T [_capacity]; + break; + } + } + LUPI_HOST_DEVICE Vector( std::size_t s, const T& d, bool mem_flag = CPU_MEM ) : _data(0), _capacity(s), _size(s), _mem_type(mem_flag) + { + if( s == 0 ){ _data = nullptr; return;} + switch ( (int) _mem_type){ + case CPU_MEM: + _data = new T [_capacity]; + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + _data = new T [_capacity]; + break; + } + for (std::size_t ii = 0; ii < _capacity; ++ii) + _data[ii] = d; + } + + LUPI_HOST_DEVICE Vector(const Vector& aa ) + : _data(0), _capacity(aa._capacity), _size(aa._size), _mem_type(aa._mem_type) + { + if( _capacity == 0 ){ _data = nullptr; return; } + + switch ( (int) _mem_type){ + case CPU_MEM: + _data = new T [_capacity]; + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + _data = new T [_capacity]; + break; + } + + for (std::size_t ii=0; ii<_size; ++ii) + _data[ii] = aa._data[ii]; + } + + LUPI_HOST Vector(const std::vector& aa ) + : _data(0), _capacity(aa.size()), _size(aa.size()), _mem_type(CPU_MEM) + { + if( _capacity == 0 ){ _data = nullptr; return;} + + switch ( (int) _mem_type){ + case CPU_MEM: + _data = new T [_capacity]; + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + _data = new T [_capacity]; + break; + } + + for (std::size_t ii=0; ii<_size; ++ii) + _data[ii] = aa[ii]; + } + + LUPI_HOST_DEVICE ~Vector() { + switch ( (int) _mem_type){ + case CPU_MEM: + delete[] _data; + break; + case UVM_MEM: + for (std::size_t i=0; i < _size; ++i) + _data[i].~T(); +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaFree(_data); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipFree(_data); +#endif + break; + default: + delete[] _data; + break; + } + } + + LUPI_HOST_DEVICE iterator begin() { return _data; } + + LUPI_HOST_DEVICE const_iterator begin() const { return _data; } + + LUPI_HOST_DEVICE iterator end() { return _data + _size; } + + LUPI_HOST_DEVICE const_iterator end() const { return _data + _size; } + + /// Needed for copy-swap idiom + LUPI_HOST_DEVICE void swap(Vector& other) + { + MCGIDI_SWAP(_data, other._data, T*); + MCGIDI_SWAP(_capacity, other._capacity, std::size_t); + MCGIDI_SWAP(_size, other._size, std::size_t); + MCGIDI_SWAP(_mem_type, other._mem_type, bool); + } + + /// Implement assignment using copy-swap idiom + LUPI_HOST_DEVICE Vector& operator=(const Vector& aa) + { + if (&aa != this) + { + Vector temp(aa); + this->swap(temp); + } + return *this; + } + + LUPI_HOST Vector& operator=(const std::vector& aa) + { + Vector temp(aa); + this->swap(temp); + return *this; + } + + LUPI_HOST_DEVICE int get_mem_type() + { + return _mem_type; + } + + LUPI_HOST_DEVICE void push_back( const T& dataElem ) + { + assert( _size < _capacity ); + _data[_size] = dataElem; + _size++; + } + + LUPI_HOST_DEVICE const T& operator[]( std::size_t index ) const + { + // assert( index < _capacity ); + // assert( index >= 0); comment out pointless assertion size_t type is >= 0 by definition + return _data[index]; + } + + LUPI_HOST_DEVICE T& operator[]( std::size_t index ) + { + // assert( index < _capacity ); + // assert( index >= 0); comment out pointless assertion size_t type is >= 0 by definition + return _data[index]; + } + + LUPI_HOST_DEVICE std::size_t capacity() const + { + return _capacity; + } + + LUPI_HOST_DEVICE std::size_t size() const + { + return _size; + } + + LUPI_HOST_DEVICE T& back() + { + return _data[_size-1]; + } + + LUPI_HOST_DEVICE T& back() const + { + return _data[_size-1]; + } + + LUPI_HOST_DEVICE void reserve( std::size_t s, char ** address = nullptr, bool mem_flag = CPU_MEM ) + { + if (s == _capacity) return; + assert( _capacity == 0 ); + _capacity = s; + _mem_type = mem_flag; + if( s == 0 ){ _data = nullptr; return;} + switch ( (int) _mem_type){ + case CPU_MEM: + if (address == nullptr || *address == nullptr) _data = new T [_capacity]; + else { + _data = new(*address) T [_capacity]; + *address += sizeof(T) * _capacity; + } + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + if (address == nullptr || *address == nullptr) _data = new T [_capacity]; + else { + _data = new(*address) T [_capacity]; + *address += sizeof(T) * _capacity; + } + break; + } + } + + LUPI_HOST_DEVICE void resize( std::size_t s, char ** address = nullptr, bool mem_flag = CPU_MEM ) + { + if (_capacity != 0) { + assert( _capacity >= s); + _size = s; + return; + } + assert( _capacity == 0 ); + _capacity = s; + _size = s; + _mem_type = mem_flag; + if( s == 0 ){ _data = nullptr; return;} + switch ( (int) _mem_type){ + case CPU_MEM: + if (address == nullptr || *address == nullptr) { + _data = new T [_capacity]; + } + else { + _data = new(*address) T [_capacity]; + std::size_t delta = sizeof(T) * _capacity; + std::size_t sub = delta % 8; + if (sub != 0) delta += (8-sub); + *address += delta; + } + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + if (address == nullptr || *address == nullptr) _data = new T [_capacity]; + else { + _data = new(*address) T [_capacity]; + std::size_t delta = sizeof(T) * _capacity; + std::size_t sub = delta % 8; + if (sub != 0) delta += (8-sub); + *address += delta; + } + break; + } + } + + LUPI_HOST_DEVICE void resize( std::size_t s, const T& d, char ** address = nullptr, bool mem_flag = CPU_MEM ) + { + assert( _capacity == 0 ); + _capacity = s; + _size = s; + _mem_type = mem_flag; + if( s == 0 ){ _data = nullptr; return;} + switch ( (int) _mem_type){ + case CPU_MEM: + if (address == nullptr || *address == nullptr) _data = new T [_capacity]; + else { + _data = new(*address) T [_capacity]; + std::size_t delta = sizeof(T) * _capacity; + std::size_t sub = delta % 8; + if (sub != 0) delta += (8-sub); + *address += delta; + } + break; + case UVM_MEM: + { + void *ptr = nullptr; +#if defined(__CUDACC__) && !defined(__CUDA_ARCH__) + cudaMallocManaged(&ptr, _capacity*sizeof(T), cudaMemAttachGlobal); +#elif defined(__HIP__) && !defined(__HIP_DEVICE_COMPILE__) + hipMallocManaged(&ptr, _capacity*sizeof(T), hipMemAttachGlobal); +#endif + _data = new(ptr) T[_capacity]; + break; + } + default: + if (address == nullptr || *address == nullptr) _data = new T [_capacity]; + else { + _data = new(*address) T [_capacity]; + std::size_t delta = sizeof(T) * _capacity; + std::size_t sub = delta % 8; + if (sub != 0) delta += (8-sub); + *address += delta; + *address += sizeof(T) * _capacity; + } + break; + } + for (std::size_t ii = 0; ii < _capacity; ++ii) + _data[ii] = d; + } + + LUPI_HOST_DEVICE bool empty() const + { + return ( _size == 0 ); + } + + LUPI_HOST_DEVICE void eraseEnd( std::size_t NewEnd ) + { + assert( NewEnd <= _size ); + _size = NewEnd; + } + + LUPI_HOST_DEVICE void pop_back() + { + assert(_size > 0); + _size--; + } + + LUPI_HOST_DEVICE void clear() + { + _size = 0; + } + + LUPI_HOST_DEVICE void appendList( std::size_t listSize, T* list ) + { + assert( _size + listSize < _capacity ); + + for( std::size_t i = _size; i < _size + listSize; i++ ) + { + _data[i] = list[ i-_size ]; + } + + } + + //Atomically retrieve an availible index then increment that index some amount + LUPI_HOST_DEVICE std::size_t atomic_Index_Inc( std::size_t inc ) + { + if (_size+inc > _capacity) + {MCGIDI_PRINTF("inc too much (size %d, inc %d cap %d)\n", _size, inc, _capacity); abort(); } + assert(_size+inc <= _capacity); + std::size_t pos; + +// #include "mc_omp_atomic_capture.hh" + {pos = _size; _size = _size + inc;} + + return pos; + } + + // This will not work for a vector of base classes. + LUPI_HOST_DEVICE std::size_t internalSize() const { + std::size_t delta = sizeof(T) * _size; + std::size_t sub = delta % 8; + if (sub != 0) delta += (8-sub); + return delta; + } + + LUPI_HOST_DEVICE void forceCreate(std::size_t a_size, T* a_data) { + _capacity = a_size; + _size = a_size; + _data = a_data; + } +}; + +} +#endif diff --git a/source/processes/hadronic/models/lend/include/PoPI.hpp b/source/processes/hadronic/models/lend/include/PoPI.hpp new file mode 100644 index 0000000000..f274dd7b81 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/PoPI.hpp @@ -0,0 +1,1268 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef PoPI_hpp_included +#define PoPI_hpp_included 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace PoPI { + +#define PoPI_AMU2MeV_c2 931.494028 +#define PoPI_electronMass_MeV_c2 0.5109989461 + +#define PoPI_formatVersion_0_1_Chars "0.1" +#define PoPI_formatVersion_1_10_Chars "1.10" +#define PoPI_formatVersion_2_0_LLNL_3_Chars "2.0.LLNL_3" + +#define PoPI_PoPsChars "PoPs" + +#define PoPI_gaugeBosonChars "gaugeBoson" +#define PoPI_leptonChars "lepton" +#define PoPI_baryonChars "baryon" +#define PoPI_nuclidesChars "nuclides" +#define PoPI_nuclideChars "nuclide" +#define PoPI_nucleusChars "nucleus" +#define PoPI_unorthodoxChars "unorthodox" +#define PoPI_aliasesChars "aliases" + +/*! \enum Particle_class + * This enum represents the various type of allowed particle types. + */ + +enum class Particle_class { nuclide, /**< Specifies that the particle is a nuclide. */ + nucleus, /**< Specifies that the particle is a nucleus. */ + gaugeBoson, /**< Specifies that the particle is a gauge boson. */ + lepton, /**< Specifies that the particle is a lepton. */ + baryon, /**< Specifies that the particle is a baryon. */ + nuclideMetaStable, /**< Specifies that the particle is a nuclide meta-stable alias. */ + nucleusMetaStable, /**< Specifies that the particle is a nucleus meta-stable alias. */ + TNSL, /**< Specifies that the particle is a TNSL target. Currently not used. */ + ENDL_fissionProduct, /**< Specifies that the particle is an ENDL fissiont product (e.g., 99120, 99125). */ + unorthodox, /**< Specifies that the particle is an unorthodox. */ + alias, /**< Specifies that the particle is a alias. */ + chemicalElement, /**< Specifies that the particle is a chemicalElement. */ + isotope, /**< Specifies that the particle is a isotope. */ + unknown /**< Specifies that the particle is a unknown. */ }; + +#define PoPI_massChars "mass" +#define PoPI_spinChars "spin" +#define PoPI_parityChars "parity" +#define PoPI_chargeChars "charge" +#define PoPI_halflifeChars "halflife" + +#define PoPI_doubleChars "double" +#define PoPI_integerChars "integer" +#define PoPI_fractionChars "fraction" +#define PoPI_stringChars "string" +#define PoPI_shellChars "shell" +#define PoPI_decayDataChars "decayData" +#define PoPI_gammaDecayDataChars "gammaDecayData" + +#define PoPI_decayModeElectroMagnetic "electroMagnetic" + +#define PoPI_formatChars "format" +#define PoPI_labelChars "label" +#define PoPI_indexChars "index" +#define PoPI_pidChars "pid" +#define PoPI_nameChars "name" +#define PoPI_versionChars "version" +#define PoPI_aliasChars "alias" +#define PoPI_metaStableChars "metaStable" +#define PoPI_particleChars "particle" +#define PoPI_discreteChars "discrete" +#define PoPI_continuumChars "continuum" + +/*! \enum PQ_class + * This enum represents the various type of allowed physcial quantity types. + */ + +enum class PQ_class { Double, /**< Specifies that the physcial quantity is a double. */ + integer, /**< Specifies that the physcial quantity is an integer. */ + fraction, /**< Specifies that the physcial quantity is a fraction. */ + string, /**< Specifies that the physcial quantity is a string. */ + shell /**< Specifies that the physcial quantity is a shell. */ }; + +/*! \enum SpecialParticleID_mode + * This enum specifies how the light charged particle ids are handled. The light charged particles ids are familiarly known as + * p, d, t, h and a. + */ + +enum class SpecialParticleID_mode { familiar, /**< Treat ids as the familiar p, d, t, h and a. */ + nuclide, /**< Treat ids as the familiar p, d, t, h and a as h1, h2, h3, he3 and he4, respectively. */ + nucleus /**< Treat ids as the familiar p, d, t, h and a as H1, H2, H3, He3 and He4, respectively. */ }; + +class NuclideGammaBranchStateInfos; +class Base; +class SymbolBase; +class Decay; +class DecayMode; +class DecayData; +class Particle; +class MetaStable; +class Alias; +class Baryon; +class GaugeBoson; +class Lepton; +class Nuclide; +class Nucleus; +class Unorthodox; + +class Isotope; +class ChemicalElement; +class Database; + +void appendXMLEnd( std::vector &a_XMLList, std::string const &a_label ); + +int particleZ( Base const &a_particle, bool a_isNeutronProtonANucleon = false ); +int particleZ( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon = false ); +int particleZ( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon = false ); + +int particleA( Base const &a_particle, bool a_isNeutronProtonANucleon = false ); +int particleA( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon = false ); +int particleA( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon = false ); + +int particleZA( Base const &a_particle, bool a_isNeutronProtonANucleon = false ); +int particleZA( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon = false ); +int particleZA( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon = false ); + +int particleMetaStableIndex( Base const &a_particle ); +int particleMetaStableIndex( Database const &a_pops, int a_index ); +int particleMetaStableIndex( Database const &a_pops, std::string const &a_id ); + +std::string specialParticleID( SpecialParticleID_mode a_mode, std::string const &a_id ); +bool compareSpecialParticleIDs( std::string const &a_id1, std::string const &a_id2 ); + +struct IDs { + static std::string const photon; + static std::string const electron; + static std::string const neutron; + static std::string const proton; + static std::string const familiarPhoton; + static std::string const familiarDeuteron; + static std::string const familiarTriton; + static std::string const familiarHelion; + static std::string const familiarAlpha; + static std::string const FissionProductENDL99120; + static std::string const FissionProductENDL99125; + static std::string const anti; +}; + +struct Intids { + static int constexpr neutron = 1020000000; + static int constexpr photon = 1000000000; + static int constexpr electron = 1010000000; + static int constexpr FissionProductENDL99120 = 1990099120; + static int constexpr FissionProductENDL99125 = 1990099125; +}; + +extern std::map supportedNucleusAliases; + +typedef std::vector ParticleList; +typedef std::vector SymbolList; + +/* +============================================================ +======================== Exception ========================= +============================================================ +*/ + +class Exception : public std::runtime_error { + + public : + explicit Exception( std::string const &a_message ); + +}; + +/* +============================================================ +====================== ParseIntidInfo ====================== +============================================================ +*/ + +class ParseIntidInfo { + + private: + int m_intid; /**< The intid for the rest of the data. */ + Particle_class m_family; /**< The family of the particle. */ + bool m_isAnti; /**< **true** if particle is an anti-particle and **false** otherwise. */ +// The following are for nuclear like particles. + bool m_isNuclear; /**< *true* if the particle is a nuclear particle and *false* otherwise. */ + int m_AAA; /**< For a nuclear particle, its AAA value (i.e., atomic mass number). */ + int m_ZZZ; /**< For a nuclear particle, its ZZZ value (i.e., atomic number). */ + int m_III; /**< For a nuclear particle, its III value (nuclear excitation level index or meta-stable index. */ + int m_nuclearLevelIndex; /**< For a nuclear particle, nuclear excitation level index. */ + int m_metaStableIndex; /**< For a nuclear meta-stable particle, its meta-stable index. */ +// The following are for leptons. + int m_generation; /**< For a lepton, its generation. */ + bool m_isNeutrino; /**< For a lepton, **true** if leption is a neutrino and **false** otherwise. */ +// The follow are for baryons. + int m_baryonGroup; /**< For a baryon, its baryon group. */ + int m_baryonId; /**< For a baryon, its id within a baryon group. */ +// Other data. + int m_familyId; /**< For non-nuclear particles, the particle's indentifier within its family. */ + + public: + ParseIntidInfo( int a_intid, bool a_GRIN_mode = false ); + + int intid( ) { return( m_intid ); } /**< Returns the value of the *m_intid* member. */ + Particle_class family( ) { return( m_family ); } /**< Returns the value of the *m_family* member. */ + bool isAnti( ) { return( m_isAnti ); } /**< Returns the value of the *m_isAnti * member. */ + + bool isNuclear( ) { return( m_isNuclear ); } /**< Returns the value of the *m_isNuclear* member. */ + int AAA( ) { return( m_AAA ); } /**< Returns the value of the *m_AAA* member. */ + int ZZZ( ) { return( m_ZZZ ); } /**< Returns the value of the *m_ZZZ* member. */ + int III( ) { return( m_III ); } /**< Returns the value of the *m_III* member. */ + bool isNuclearMetaStable( ) { return( ( m_family == Particle_class::nuclideMetaStable ) || ( m_family == Particle_class::nucleusMetaStable ) ); } + /**< Returns **true** if particle is a nuclear meta-stable alias. */ + int metaStableIndex( ) { return( m_metaStableIndex ); } /**< Returns the value of the *m_metaStableIndex* member. */ + + int generation( ) { return( m_generation ); } /**< Returns the value of the *m_generation* member. */ + bool isNeutrino( ) { return( m_isNeutrino ); } /**< Returns the value of the *m_isNeutrino* member. */ + + int baryonGroup( ) { return( m_baryonGroup ); } /**< Returns the value of the *m_baryonGroup* member. */ + int baryonId( ) { return( m_baryonId ); } /**< Returns the value of the *m_baryonId * member. */ + + int familyId( ) { return( m_familyId ); } /**< Returns the value of the *m_familyId* member. */ + + std::string id( ); +}; + +/* +============================================================ +======================= ParseIdInfo ======================== +============================================================ +*/ + +class ParseIdInfo{ + + private: + bool m_isSupported; /**< If **true** the particle's id was parsed and the other member of *this* are valid. Otherwise, parsing of the particle's id is currently not supported. */ + std::string m_id; /**< The id for the particles. */ + bool m_isNuclear; /**< **true** if particle is a valid nuclear name (i.e., nuclide, nucleus of meta-stable) and **false** otherwise. */ + bool m_isNucleus; /**< **true** if particle is a nucleus and **false** otherwise. */ + bool m_isChemicalElement; /**< **true** if id is only a chemical element symbol. */ + bool m_isAnti; /**< **true** if particle is an anti-particle and **false** otherwise. */ + bool m_isMetaStable; /**< **true** if particle is a meta-stable alias and **false** otherwise. */ + std::string m_symbol; /**< The chemical element symbol part of *m_id*. This will always be the nuclide symbol even if *m_id* is for a nucleus. */ + int m_Z; /**< The atomic number of the *m_id*. */ + int m_A; /**< The atomic mass number of the *m_id*. */ + int m_index; /**< The nuclear level index of *m_id*. */ + std::string m_qualifier; + + std::string boolToString( bool a_value, std::string const &a_prefix ) const; + + public: + ParseIdInfo( std::string const &a_id ); + + bool isSupported( ) { return( m_isSupported ); } /**< Returns the value of the *m_isSupported. */ + std::string const &Id( ) { return( m_id ); } /**< Returns a reference to the *m_id* member. */ + bool isNuclear( ) { return( m_isNuclear ); } /**< Returns the value of the *m_isNuclear* member. */ + bool isNucleus( ) { return( m_isNucleus ); } /**< Returns the value of the *m_isNucleus* member. */ + bool isChemicalElement( ) { return( m_isChemicalElement ); } /**< Returns the value of the *m_isChemicalElement* member. */ + bool isAnti( ) { return( m_isAnti ); } /**< Returns the value of the *m_isAnti* member. */ + std::string const &symbol( ) { return( m_symbol); } /**< Returns a reference to the *m_symbol* member. */ + int Z( ) { return( m_Z ); } /**< Returns the value of the *m_Z* member. */ + int A( ) { return( m_A ); } /**< Returns the value of the *m_A* member. */ + int index( ) { return( m_index ); } /**< Returns the value of the *m_index* member. */ + std::string const &qualifier( ) { return( m_qualifier ); } /**< Returns a reference to the *m_qualifier* member. */ + + void print( bool a_terse, std::string const &a_indent = "" ) const ; +}; + +/*! \class Suite + * This is the base class for all suite like members. + */ + +/* +============================================================ +========================== Suite =========================== +============================================================ +*/ + +template +class Suite { + + private: + std::string m_moniker; /**< The moniker (i.e., name) of the suite. */ + std::vector m_items; /**< The list of all items in the suite. */ + + public: + Suite( std::string const &a_moniker ) : m_moniker( a_moniker ) { } + ~Suite( ); + void appendFromParentNode( HAPI::Node const &a_node, Database *a_DB, T2 *a_parent ); + void appendFromParentNode2( HAPI::Node const &a_node, T2 *a_parent ); + + std::string::size_type size( void ) const { return( m_items.size( ) ); } /**< Returns the number of items in the suite. */ + T &operator[]( int a_index ) const { return( *m_items[a_index] ); } /**< Returns the item at index *a_index*. */ + std::string const &moniker( void ) { return( m_moniker ); } /**< Returns the value of the *m_moniker* member. */ + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +template +Suite::~Suite( ) { + + std::string::size_type i1, _size = m_items.size( ); + + for( i1 = 0; i1 < _size; ++i1 ) delete m_items[i1]; + +// Ask Adam why next line does not work. +// for( std::vector::iterator iter = m_items.begin( ); iter != m_items.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Adds the children of *a_node* to the suite and to *a_DB*. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database** instance to add the constructed items to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +template +void Suite::appendFromParentNode( HAPI::Node const &a_node, Database *a_DB, T2 *a_parent ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + T *item = new T( child, a_DB, a_parent ); + m_items.push_back( item ); + } +} + +/* *********************************************************************************************************//** + * Adds the children of *a_node* to the suite. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +template +void Suite::appendFromParentNode2( HAPI::Node const &a_node, T2 *a_parent ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child = child.next_sibling( ) ) { + T *item = new T( child, a_parent ); + m_items.push_back( item ); + } +} + +/* *********************************************************************************************************//** + * Creates an XML representation of the suite. + * + * @param a_XMLList [in] The list the XML lines are added to. + * @param a_indent1 [in] The amount to indent the XML text. + ***********************************************************************************************************/ + +template +void Suite::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string::size_type _size = m_items.size( ); + std::string indent2 = a_indent1 + " "; + + if( _size == 0 ) return; + + std::string header = a_indent1 + "<" + m_moniker + ">"; + a_XMLList.push_back( header ); + for( std::string::size_type i1 = 0; i1 < _size; ++i1 ) m_items[i1]->toXMLList( a_XMLList, indent2 ); + + appendXMLEnd( a_XMLList, m_moniker ); +} + +/* +============================================================ +===================== PhysicalQuantity ===================== +============================================================ +*/ + +class PhysicalQuantity { + + private: + PQ_class m_class; /**< The class for the physical quanity. */ + std::string m_tag; /**< The name of the physical quanity. */ + std::string m_label; /**< The label for the physical quanity. */ + std::string m_valueString; /**< The string value of the physical quanity. */ + std::string m_unit; /**< The unit of the physical quanity. */ + + public: + PhysicalQuantity( HAPI::Node const &a_node, PQ_class a_class ); + virtual ~PhysicalQuantity( ); + + PQ_class Class( void ) const { return( m_class ); } /**< Returns the value of the *m_class* member. */ + std::string const &tag( void ) const { return( m_tag ); } /**< Returns the value of the *m_tag* member. */ + std::string const &label( void ) const { return( m_label ); } /**< Returns the value of the *m_label* member. */ + std::string const &valueString( void ) const { return( m_valueString ); } /**< Returns the value of the *valueString* member. */ + std::string const &unit( void ) const { return( m_unit ); } /**< Returns the value of the *m_unit* member. */ + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; + virtual std::string valueToString( void ) const = 0; +}; + +/* +============================================================ +========================= PQ_double ======================== +============================================================ +*/ + +class PQ_double : public PhysicalQuantity { + + private: + double m_value; /**< The double value of the physical quanity. */ + void initialize( ); + + public: + PQ_double( HAPI::Node const &a_node ); + PQ_double( HAPI::Node const &a_node, PQ_class a_class ); + virtual ~PQ_double( ); + + double value( void ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + double value( char const *a_unit ) const ; + double value( std::string const &a_unit ) const { return( value( a_unit.c_str( ) ) ); } + /**< Returns the value of the *m_value* member in units of *a_unit*. */ + virtual std::string valueToString( void ) const ; +}; + +/* +============================================================ +========================= PQ_integer ======================= +============================================================ +*/ + +class PQ_integer : public PhysicalQuantity { + + private: + int m_value; /**< The integer value of the physical quanity. */ + + public: + PQ_integer ( HAPI::Node const &a_node ); + virtual ~PQ_integer( ); + + int value( void ) const { return( m_value ); } /**< Returns the value of the *m_value* member. */ + int value( char const *a_unit ) const ; + int value( std::string const &a_unit ) const { return( value( a_unit.c_str( ) ) ); } + virtual std::string valueToString( void ) const ; +}; + +/* +============================================================== +========================= PQ_fraction ======================== +============================================================== +*/ + +class PQ_fraction : public PhysicalQuantity { + + public: + PQ_fraction( HAPI::Node const &a_node ); + virtual ~PQ_fraction( ); + + std::string value( void ) const ; + std::string value( char const *a_unit ) const ; + std::string value( std::string const &a_unit ) const { return( value( a_unit.c_str( ) ) ); } + /**< Returns the value of the *m_value* member in units of *a_unit*. */ + virtual std::string valueToString( void ) const ; +}; + +/* +============================================================ +========================= PQ_string ======================== +============================================================ +*/ + +class PQ_string : public PhysicalQuantity { + + public: + PQ_string( HAPI::Node const &a_node ); + virtual ~PQ_string( ); + + std::string value( void ) const { return( valueString( ) ); } /**< Returns the value returned by calling the **valueString** methods. */ + std::string value( char const *a_unit ) const ; + std::string value( std::string const &a_unit ) const { return( value( a_unit.c_str( ) ) ); } + /**< Returns the value of the *m_value* member in units of *a_unit*. */ + virtual std::string valueToString( void ) const ; +}; + +/* +============================================================ +========================= PQ_shell ========================= +============================================================ +*/ + +class PQ_shell : public PQ_double { + + public: + PQ_shell( HAPI::Node const &a_node ); + ~PQ_shell( ); +}; + +/* +============================================================ +========================= PQ_suite ========================= +============================================================ +*/ + +class PQ_suite : public std::vector { + + private: + std::string m_label; + + public: + PQ_suite( HAPI::Node const &a_node ); + ~PQ_suite( ); + + std::string &label( void ) { return( m_label ); } + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +================== NuclideGammaBranchInfo ================== +============================================================ +*/ + +class NuclideGammaBranchInfo { + + private: + double m_probability; /**< The probability that the level decays to state *m_residualState*. */ + double m_photonEmissionProbability; /**< The conditional probability the the decay emitted a photon. */ + double m_gammaEnergy; /**< The energy of the emitted photon. */ + std::string m_residualState; /**< The state the residual is left in after photon decay. */ + + public: + NuclideGammaBranchInfo( double a_probability, double a_photonEmissionProbability, double a_gammaEnergy, std::string const &a_residualState ); + NuclideGammaBranchInfo( NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo ); + + double probability( ) const { return( m_probability ); } /**< Returns the value of the *m_probability* member. */ + double photonEmissionProbability( ) const { return( m_photonEmissionProbability ); } + /**< Returns the value of the *m_photonEmissionProbability* member. */ + double gammaEnergy( ) const { return( m_gammaEnergy ); } /**< Returns the value of the *m_gammaEnergy* member. */ + std::string const &residualState( ) const { return( m_residualState ); } /**< Returns the value of the *m_residualState* member. */ +}; + +/* +============================================================== +================= NuclideGammaBranchStateInfo ================ +============================================================== +*/ + +class NuclideGammaBranchStateInfo { + + private: + std::string m_state; /**< The inital state the decay starts from. */ + int m_intid; /**< The intid for the inital state. */ + std::string m_kind; /**< The kind of the particle. Currently can be 'discrete' or 'continuum'. */ + double m_nuclearLevelEnergy; /**< The nuclear level excitation energy of the level (state). */ + double m_nuclearLevelEnergyWidth; /**< This is 0.0 except for GRIN realized continuum levels where this is the energy width from this level to the next higher level. */ + bool m_derivedCalculated; /**< For internal use to determine if other members have been set or not. */ + double m_multiplicity; /**< The average number of photons emitted when transitioning from the initial to the final state. Data derived from m_branches data. */ + double m_averageGammaEnergy; /**< The average energy per decay from the initial to the final state. Data derived from m_branches data. */ + std::vector m_branches; + + public: + NuclideGammaBranchStateInfo( std::string a_state, int a_intid, std::string const &a_kind, double a_nuclearLevelEnergy ); + + std::string const &state( ) const { return( m_state ); } /**< Returns the value of the *m_state* member. */ + int intid( ) const { return( m_intid ); } /**< Returns the value of the *m_intid* member. */ + std::string const &kind( ) const { return( m_kind ); } /**< Returns the value of the *m_kind* member. */ + double nuclearLevelEnergy( ) const { return( m_nuclearLevelEnergy ); } /**< Returns the value of the *m_nuclearLevelEnergy* member. */ + double nuclearLevelEnergyWidth( ) const { return( m_nuclearLevelEnergyWidth ); } + /**< Returns the value of the *m_nuclearLevelEnergyWidth* member. */ + void setNuclearLevelEnergyWidth( double a_nuclearLevelEnergyWidth ) { m_nuclearLevelEnergyWidth = a_nuclearLevelEnergyWidth; } + /**< Set the value of the *m_nuclearLevelEnergyWidth* member to *a_nuclearLevelEnergyWidth*. */ + bool derivedCalculated( ) const { return( m_derivedCalculated ); } /**< Returns the value of the *m_derivedCalculated* member. */ + double multiplicity( ) const { return( m_multiplicity ); } /**< Returns the value of the *m_multiplicity* member. */ + double averageGammaEnergy( ) const { return( m_averageGammaEnergy ); } /**< Returns the value of the *m_averageGammaEnergy* member. */ + std::vector const &branches( ) const { return( m_branches ); } + /**< Returns a reference to the *m_branches* member. */ + + void add( NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo ); + void calculateDerivedData( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ); +}; + +/* +============================================================== +================ NuclideGammaBranchStateInfos ================ +============================================================== +*/ + +class NuclideGammaBranchStateInfos { + + private: + std::vector m_nuclideGammaBranchStateInfos; + + public: + NuclideGammaBranchStateInfos( ); + ~NuclideGammaBranchStateInfos( ); + + std::size_t size( ) const { return( m_nuclideGammaBranchStateInfos.size( ) ); } + NuclideGammaBranchStateInfo *operator[]( std::size_t a_index ) { return( m_nuclideGammaBranchStateInfos[a_index] ); } + NuclideGammaBranchStateInfo const *operator[]( std::size_t a_index ) const { return( m_nuclideGammaBranchStateInfos[a_index] ); } + std::vector &nuclideGammaBranchStateInfos( ) { return( m_nuclideGammaBranchStateInfos ); } + void add( NuclideGammaBranchStateInfo *a_nuclideGammaBranchStateInfo ); + NuclideGammaBranchStateInfo *find( std::string const &a_state ); + NuclideGammaBranchStateInfo const *find( std::string const &a_state ) const ; +}; + +/* +============================================================ +=========================== Base =========================== +============================================================ +*/ + +class Base { + + private: + std::string m_id; /**< The **PoPs** id for the particle or **PoPs** symbol for a chemicalElement or isotope. */ + Particle_class m_class; /**< The **Particle_class** for the particle, chemicalElement or isotope. */ + int m_index; /**< The for the particle, chemicalElement or isotope. */ + int m_intid; /**< The unique integer id for a particle or a meta-stable alias. For a non meta-stable alias, an isotope or chemical element, this is -1. */ + + void setIntid( int a_intid ) { m_intid = a_intid; } /**< Sets the value of the *m_intid* member to *a_intid*. */ + + public: + Base( std::string const &a_id, Particle_class a_class ); + Base( HAPI::Node const &a_node, std::string const &a_label, Particle_class a_class ); + virtual ~Base( ); + + std::string const &ID( void ) const { return( m_id ); } /**< Returns a *const* reference to the *m_id* member of *this*. */ + int index( void ) const { return( m_index ); } /**< Returns the value of the *m_index* member of *this*. */ + void setIndex( int a_index ) { m_index = a_index; } /**< Sets the value of the *m_index* member of *this* to *a_index*. */ + int intid( ) const { return( m_intid ); } /**< Returns the value of the *m_intid* member. */ + Particle_class Class( void ) const { return( m_class ); } /**< Returns the value of the *m_class* member of *this*. */ + virtual bool isParticle( ) const { return( true ); } /**< Returns **true** if *this* is a **Particle** and **false** it *this* is a **ChemicalElement** or **Isotope** instance. */ + bool isAlias( void ) const { return( ( m_class == Particle_class::alias ) || isMetaStableAlias( ) ); } + /**< Returns **true** if *this* is an **Alias** or **MetaStable** instance and **false** otherwise. */ + bool isMetaStableAlias( void ) const { return( ( m_class == Particle_class::nuclideMetaStable ) || ( m_class == Particle_class::nucleusMetaStable ) ); } + /**< Returns **true** if *this* is a **MetaStable** instance and **false** otherwise. */ + + bool isGaugeBoson( ) const { return( m_class == Particle_class::gaugeBoson ); } /**< Returns **true** if *this* is a **GaugeBoson** instance and **false** otherwise. */ + bool isLepton( ) const { return( m_class == Particle_class::lepton ); } /**< Returns **true** if *this* is a **Lepton** instance and **false** otherwise. */ + bool isBaryon( ) const { return( m_class == Particle_class::baryon ); } /**< Returns **true** if *this* is a **Baryon** instance and **false** otherwise. */ + bool isUnorthodox( ) const { return( m_class == Particle_class::unorthodox ); } /**< Returns **true** if *this* is a **Unorthodox** instance and **false** otherwise. */ + bool isNucleus( ) const { return( m_class == Particle_class::nucleus ); } /**< Returns **true** if *this* is a **Nucleus** instance and **false** otherwise. */ + bool isNuclide( ) const { return( m_class == Particle_class::nuclide ); } /**< Returns **true** if *this* is a **Nuclide** instance and **false** otherwise. */ + bool isIsotope( ) const { return( m_class == Particle_class::isotope ); } /**< Returns **true** if *this* is a **Isotope** instance and **false** otherwise. */ + bool isChemicalElement( ) const { return( m_class == Particle_class::chemicalElement ); } + /**< Returns **true** if *this* is a **ChemicalElement** instance and **false** otherwise. */ + + friend MetaStable; + friend Alias; + friend Baryon; + friend GaugeBoson; + friend Lepton; + friend Nucleus; + friend Nuclide; + friend Unorthodox; +}; + +/* +============================================================ +========================== IDBase ========================== +============================================================ +*/ + +class IDBase : public Base { + + public: + IDBase( std::string const &a_id, Particle_class a_class ); + IDBase( HAPI::Node const &a_node, Particle_class a_class ); + virtual ~IDBase( ); // BRB This should be virtual but I cannot get it to work without crashing. + + int addToDatabase( Database *a_DB ); + double massValue2( Database const &a_DB, std::string const &a_unit ) const ; +}; + +/* +============================================================ +======================== SymbolBase ======================== +============================================================ +*/ + +class SymbolBase : public Base { + + public: + SymbolBase( HAPI::Node const &a_node, Particle_class a_class ); + ~SymbolBase( ); + + std::string const &symbol( ) const { return( ID( ) ); } /**< Returns the value of the symbol. */ + + int addToSymbols( Database *a_DB ); + bool isParticle( ) const { return( false ); } +}; + +/* +============================================================ +========================= Product ========================== +============================================================ +*/ + +class Product { + + private: + int m_id; + std::string m_pid; + std::string m_label; + + public: + Product( HAPI::Node const &a_node, Decay *a_DB ); + ~Product( ); + + int ID( ) const { return( m_id ); } + std::string const &pid( ) const { return( m_pid ); } + std::string const &label( ) const { return( m_label ); } + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +========================== Decay =========================== +============================================================ +*/ + +class Decay { + + private: + int m_index; + std::string m_mode; + bool m_complete; + Suite m_products; + + public: + Decay( HAPI::Node const &a_node, DecayMode const *a_decayMode ); + ~Decay( ); + + int index( void ) const { return( m_index ); } + std::string const &mode( ) const { return( m_mode ); } + bool complete( ) const { return( m_complete ); } + Suite const &products( void ) const { return( m_products ); } + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +======================== DecayMode ========================= +============================================================ +*/ + +class DecayMode { + + private: + std::string m_label; + std::string m_mode; + PQ_suite m_probability; + PQ_suite m_photonEmissionProbabilities; + Suite m_decayPath; + + public: + DecayMode( HAPI::Node const &a_node, DecayData const *a_decayData ); + ~DecayMode( ); + + std::string const &label( ) const { return( m_label ); } + std::string const &mode( ) const { return( m_mode ); } + PQ_suite const &probability( ) const { return( m_probability ); } + PQ_suite const &photonEmissionProbabilities( ) const { return( m_photonEmissionProbabilities ); } + Suite const &decayPath( ) const { return( m_decayPath ); } + + void calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo ) const ; + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +======================== DecayData ========================= +============================================================ +*/ + +class DecayData { + + private: + Suite m_decayModes; + + public: + DecayData( HAPI::Node const &a_node ); + ~DecayData( ); + + Suite const &decayModes( void ) const { return( m_decayModes ); } + + void calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo ) const ; + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +====================== GammaDecayData ====================== +============================================================ +*/ + +class GammaDecayData { + + private: + std::string m_kind; /**< The kind of the particle. Currently can be 'discrete' or 'continuum' but may be 'experimental', 'evaluated' or 'modelled' in the future. */ + int m_rows; /**< The number of nuclides listed. */ + int m_columns; /**< The number of items in a row. */ + std::vector m_ids; /**< The list of nulcides. */ + std::vector m_probabilities; /**< The list of probabilities for each nuclide. This must sum to 1. */ + std::vector m_photonEmissionProbabilities; /**< The list of photon emission probabilities for each nuclide. */ + + public: + GammaDecayData( HAPI::Node const &a_node ); + ~GammaDecayData( ); + + std::string const &kind( ) const { return( m_kind ); } /**< Returns a const reference to the *m_kind* member. */ + int rows( ) const { return( m_rows ); } + int colunms( ) const { return( m_columns ); } + std::vector const &ids( ) const { return( m_ids ); } + std::vector const &probabilities( ) const { return( m_probabilities ); } + std::vector const &photonEmissionProbabilities( ) const { return( m_photonEmissionProbabilities ); } + + void calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &nuclideGammaBranchStateInfo ) const ; +}; + +/* +============================================================ +========================= Particle ========================= +============================================================ +*/ + +class Particle : public IDBase { + + private: + std::string m_baseId; /**< The base part of the id (i.e., without the anti and quailifier). */ + std::string m_family; /**< The family of the particle. */ + std::string m_anti; /**< The string "_anti" if particle is an anti-particle and an empty string otherwise. */ + int m_hasNucleus; /**< Indicates if the particle is or contains a nucleus. 0 = no, -1 = yes and 1 = is nucleus. */ + PQ_suite m_mass; /**< A suite storing the mass physical quantities for the particle. */ + PQ_suite m_spin; /**< A suite storing the spin physical quantities for the particle. */ + PQ_suite m_parity; /**< A suite storing the parity physical quantities for the particle. */ + PQ_suite m_charge; /**< A suite storing the charge physical quantities for the particle. */ + PQ_suite m_halflife; /**< A suite storing the halflife physical quantities for the particle. */ + DecayData m_decayData; /**< Stores the decay data for the particle. */ + + void setHasNucleus( bool a_hasNucleus ) { m_hasNucleus = a_hasNucleus; } + + public: + Particle( HAPI::Node const &a_node, Particle_class a_class, std::string const &a_family, int a_hasNucleus = 0 ); + virtual ~Particle( ); + + std::string const &baseId( void ) const { return( m_baseId ); } /**< Returns a *const* reference to the *m_baseId* member. */ + std::string const &family( void ) const { return( m_family ); } /**< Returns a *const* reference to the *m_family* member. */ + bool isAnti( ) const { return( m_anti == IDs::anti ); } /**< Returns the value of the *m_anti* member. */ + int hasNucleus( void ) const { return( m_hasNucleus ); } /**< Returns the value of the *m_hasNucleus* member. */ + + virtual PQ_suite const &mass( void ) const { return( m_mass ); } /**< Returns a *const* reference to the *m_mass* member. */ + virtual double massValue( char const *a_unit ) const ; + double massValue( std::string const &a_unit ) const { return( massValue( a_unit.c_str( ) ) ); } + /**< Returns the value of massValue( a_unit.c_str( ) ). */ + + PQ_suite const &spin( ) const { return( m_spin ); } /**< Returns a *const* reference to the *m_spin* member. */ + PQ_suite const &parity( ) const { return( m_parity ); } /**< Returns a *const* reference to the *m_parity* member. */ + PQ_suite const &charge( ) const { return( m_charge ); } /**< Returns a *const* reference to the *m_charge* member. */ + PQ_suite const &halflife( ) const { return( m_halflife ); } /**< Returns a *const* reference to the *m_halflife* member. */ + DecayData const &decayData( ) const { return( m_decayData ); } /**< Returns a *const* reference to the *m_decayData* member. */ + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; + virtual std::string toXMLListExtraAttributes( void ) const ; + virtual void toXMLListExtraElements( std::vector &a_XMLList, std::string const &a_indent1 ) const ; + + friend class Unorthodox; +}; + +/* +============================================================ +======================== GaugeBoson ======================== +============================================================ +*/ + +class GaugeBoson : public Particle { + + public: + GaugeBoson( HAPI::Node const &a_node, Database *a_DB, Database *a_parent ); + virtual ~GaugeBoson( ); +}; + +/* +============================================================ +========================== Lepton ========================== +============================================================ +*/ + +class Lepton : public Particle { + + private: + std::string m_generation; /**< The generation of the lepton (i.e., electronic, muonic or tauonic). */ + + public: + Lepton( HAPI::Node const &a_node, Database *a_DB, Database *a_parent ); + virtual ~Lepton( ); + + std::string const &generation( void ) const { return( m_generation ); } + virtual std::string toXMLListExtraAttributes( void ) const ; +}; + +/* +============================================================ +========================== Baryon ========================== +============================================================ +*/ + +class Baryon : public Particle { + + public: + Baryon( HAPI::Node const &a_node, Database *a_DB, Database *a_parent ); + virtual ~Baryon( ); +}; + +/* +============================================================ +======================== Unorthodox ======================== +============================================================ +*/ + +class Unorthodox : public Particle { + + public: + Unorthodox( HAPI::Node const &a_node, Database *a_DB, Database *a_parent ); + virtual ~Unorthodox( ); +}; + +/* +============================================================ +========================== Nucleus ========================= +============================================================ +*/ + +class Nucleus : public Particle { + + private: + Nuclide *m_nuclide; /**< The parent nuclide of *this*. */ + int m_Z; /**< The atomic number of the parent nuclide. */ + int m_A; /**< The atomic mass number of the parent nuclide. */ + std::string m_levelName; /**< The string representationn of *m_levelIndex*. */ + int m_levelIndex; /**< The index of the excited nucleus state. */ + PQ_suite m_energy; /**< A suite storing the physical quantities representing the nucleus excited energy for the particle.. */ + + public: + Nucleus( HAPI::Node const &node, Database *a_DB, Nuclide *a_parent ); + virtual ~Nucleus( ); + + Nuclide const *nuclide( ) const { return( m_nuclide ); } /**< Returns a *const* reference to the *m_nuclide* member. */ + int Z( void ) const { return( m_Z ); } /**< Returns a *const* reference to the *m_Z* member. */ + int A( void ) const { return( m_A ); } /**< Returns a *const* reference to the *m_A* member. */ + std::string const &levelName( ) const { return( m_levelName ); } /**< Returns a *const* reference to the *m_levelName* member of *this*. */ + int levelIndex( void ) const { return( m_levelIndex ); } /**< Returns a *const* reference to the *m_levelIndex* member. */ + std::string const &atomsID( void ) const ; + + double massValue( char const *a_unit ) const ; + PQ_suite const &energy( void ) const { return( m_energy ); } /**< Returns a *const* reference to the *m_energy* member. */ + double energy( std::string const &a_unit ) const ; + virtual std::string toXMLListExtraAttributes( void ) const ; + virtual void toXMLListExtraElements( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +========================== Nuclide ========================= +============================================================ +*/ + +class Nuclide : public Particle { + + private: + Isotope *m_isotope; /**< A pointer to the parent isotope. */ + Nucleus m_nucleus; /**< The nucleus for *this* nuclide. */ + GammaDecayData m_gammaDecayData; /**< . */ + + public: + Nuclide( HAPI::Node const &a_node, Database *a_DB, Isotope *a_parent ); + virtual ~Nuclide( ); + + int Z( void ) const; + int A( void ) const; + std::string const &levelName( void ) const { return( m_nucleus.levelName( ) ); } + /**< Returns the result of calling m_nucleus.levelName( ). */ + int levelIndex( void ) const { return( m_nucleus.levelIndex( ) ); } /**< Returns the result of calling m_nucleus.levelIndex( ). */ + std::string const &atomsID( ) const ; + std::string const &kind( ) const { return( m_gammaDecayData.kind( ) ); } + GammaDecayData const &gammaDecayData( ) const { return( m_gammaDecayData ); } + + Isotope const *isotope( ) const { return( m_isotope ); } /**< Returns a *const* reference to the *m_isotope* member. */ + Nucleus const &nucleus( ) const { return( m_nucleus ); } /**< Returns a *const* reference to the *m_nucleus* member. */ + + PQ_suite const &baseMass( void ) const ; + double massValue( char const *a_unit ) const ; + double levelEnergy( std::string const &a_unit ) const { return( m_nucleus.energy( a_unit ) ); } + /**< Returns the result of calling m_nucleus.energy( a_unit ). */ + + void calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos, + bool a_alwaysAdd = false ) const ; + virtual void toXMLListExtraElements( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +========================= Isotope ========================== +============================================================ +*/ + +class Isotope : public SymbolBase { + + private: + ChemicalElement *m_chemicalElement; /**< A pointer to the parent chemical element. */ + int m_Z; /**< A atomic number for the isotope. */ + int m_A; /**< The atomic mass number for the isotope. */ + Suite m_nuclides; /**< The suite of nuclides for this isotope. */ + + public: + Isotope( HAPI::Node const &a_node, Database *a_DB, ChemicalElement *a_parent ); + virtual ~Isotope( ); + + ChemicalElement const *chemicalElement( ) const { return( m_chemicalElement ); } /**< Returns a *const* reference to the *m_isotope* member. */ + int Z( void ) const { return( m_Z ); } /**< Returns the value of the *m_Z* member. */ + int A( void ) const { return( m_A ); } /**< Returns the value of the *m_A* member. */ + Suite const &nuclides( ) const { return( m_nuclides ); } /**< Returns a *const* reference to the *m_nuclides* member. */ + + void calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const ; + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +===================== ChemicalElement ====================== +============================================================ +*/ + +class ChemicalElement : public SymbolBase { + + private: + int m_Z; /**< A atomic number for all isotopes in *thie* chemical element. */ + std::string m_name; /**< The name of the chemical element. */ + Suite m_isotopes; /**< The suite of isotopes for this chemical element. */ + + public: + ChemicalElement( HAPI::Node const &a_node, Database *a_DB, Database *a_parent ); + virtual ~ChemicalElement( ); + + int Z( void ) const { return( m_Z ); } /**< Returns the value of the *m_Z* member. */ + std::string const &name( void ) const { return( m_name ); } /**< Returns the value of the *m_name* member. */ + + Suite const &isotopes( ) const { return( m_isotopes ); } /**< Returns a *const* reference to the *m_isotopes* member. */ + + void calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const ; + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +=========================== Alias ========================== // FIXME, there should be an alias base class that Alias and MetaStable inherit from. +============================================================ +*/ + +class Alias : public IDBase { + + private: + std::string m_pid; /**< The id of the particle *this* is an alias for. */ + int m_pidIndex; /**< The index of the particle with id *m_pid*. */ + + public: + Alias( HAPI::Node const &a_node, Database *a_DB, Particle_class a_class = Particle_class::alias ); + virtual ~Alias( ); + + std::string const &pid( void ) const { return( m_pid ); } /**< Returns a *const* reference to the *m_pid* member of *this*. */ + int pidIndex( void ) const { return( m_pidIndex ); } /**< Returns a *const* reference to the *m_pidIndex* member of *this*. */ + void setPidIndex( int a_index ) { m_pidIndex = a_index; } /**< Set the member *m_pidIndex* to *a_index*. */ + + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +======================== MetaStable ======================== +============================================================ +*/ + +class MetaStable : public Alias { + + private: + int m_metaStableIndex; /**< The meta-stable index for *this*. */ + + public: + MetaStable( HAPI::Node const &a_node, Database *a_DB ); + virtual ~MetaStable( ); + + int metaStableIndex( void ) const { return( m_metaStableIndex ); } /**< Returns the value of the *m_metaStableIndex* member. */ + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; +}; + +/* +============================================================ +========================= Database ========================= +============================================================ +*/ + +class Database { + + private: + LUPI::FormatVersion m_formatVersion; /**< The **GNDS** **format** attribute of the first file read. */ + std::string m_name; /**< The **GNDS** **name** of the first file read in. */ + std::string m_version; /**< The **GNDS** **version** of the first file read in. */ + ParticleList m_list; /**< The internal list of the particles. */ + std::map m_idsMap; // Be careful with this as a map[key] will add key if it is not in the map. + std::map m_intidsMap; // Be careful with this as a map[key] will add key if it is not in the map. + /**< This maps each particle id to a unique index. */ + SymbolList m_symbolList; /**< The internal list of the symbols. */ + std::map m_symbolMap; // Be careful with this as a map[key] will add key if it is not in the map. + /**< This maps each symbol to a unique index. */ + + std::vector m_unresolvedAliases; /**< This is used internally to store aliases when a **PoPs** node is being parsed as the aliases onde is parsed before the particles are parsed. */ + std::vector m_aliases; /**< Represents the **PoPs** *aliases* node which contains a list of the **PoPs** **alias** and **metaStable** nodes. */ + + Suite m_gaugeBosons; /**< Represents the **PoPs** **gaugeBosons** node which contains a list of the **PoPs** **gaugeBoson** nodes. */ + Suite m_leptons; /**< Represents the **PoPs** **leptons** node which contains a list of the **PoPs** **lepton** nodes. */ + Suite m_baryons; /**< Represents the **PoPs** **baryons** node which contains a list of the **PoPs** **baryon** nodes. */ + Suite m_chemicalElements; /**< Represents the **PoPs** **chemicalElements** node which contains a list of the **PoPs** **chemicalElement** nodes. */ + Suite m_unorthodoxes; /**< Represents the **PoPs** **unorthodoxes** node which contains a list of the **PoPs** **unorthodox** nodes. */ + + public: + Database( ); + Database( std::string const &a_fileName ); + Database( HAPI::Node const &a_database ); + ~Database( ); + + LUPI::FormatVersion const &formatVersion( void ) const { return( m_formatVersion ); } /**< Returns a *const* *reference* to the *m_formatVersion* variable of *this*. */ + std::string const &name( void ) const { return( m_name ); } /**< Returns a *const* *reference* to the *m_name* variable of *this*. */ + std::string const &version( void ) const { return( m_version ); } /**< Returns a *const* *reference* to the *m_version* variable of *this*. */ + + std::vector unresolvedAliases( ) { return( m_unresolvedAliases ); } /**< Returns a *reference* to the *m_unresolvedAliases* member of *this*. */ + std::size_t numberOfUnresolvedAliases( ) { return( m_unresolvedAliases.size( ) ); } /**< Returns the number of unresolved aliases. */ + std::vector unresolvedAliasIds( ) const ; + std::vector &aliases( ) { return( m_aliases ); } /**< Returns a *const* *reference* to the *m_aliases* variable of *this*. */ + + void addFile( char const *a_fileName, bool a_warnIfDuplicate ); + void addFile( std::string const &a_fileName, bool a_warnIfDuplicate ); + void addDatabase( std::string const &a_string, bool a_warnIfDuplicate ); + void addDatabase( HAPI::Node const &a_database, bool a_warnIfDuplicate ); + void addAlias( Alias *a_alias ) { m_aliases.push_back( a_alias ); } /**< Added the **Alias** *a_alias* to *this*. */ + + std::string::size_type size( void ) const { return( m_list.size( ) ); } /**< Returns the number of particle in *this*. */ + ParticleList const &list( ) { return( m_list ); } /**< Returns a *const* *reference* to the *m_list* member. */ + SymbolList const &symbolList( ) { return( m_symbolList ); } /**< Returns a *const* *reference* to the *m_symbolList* member. */ + int operator[]( std::string const &a_id ) const ; + template T const &get( std::string const &a_id ) const ; + template T const &get( int a_index ) const ; + Particle const &particle( std::string const &a_id ) const { return( get( a_id ) ); } /**< Returns a *const* *reference* to the particle with id *a_id*. */ + Particle const &particle( int a_index ) const { return( get( a_index ) ); } /**< Returns a *const* *reference* to the particle with index *a_index*. */ + IDBase const &idBase( std::string const &a_id ) const { return( get( a_id ) ); } /**< Returns a *const* *reference* to a **IDBase** instance with id *a_id*. */ + IDBase const &idBase( int &a_index ) const { return( get( a_index ) ); } /**< Returns a *const* *reference* to a **IDBase** instance with id *a_index*. */ + ParticleList const &particleList( ) const { return( m_list ); } /**< Returns a *const* *reference* to the *m_list* variable of *this*. */ + SymbolList symbolList( ) const { return( m_symbolList ); } /**< Returns a *const* *reference* to the *m_symbolList* variable of *this*. */ + + bool exists( std::string const &a_id ) const ; + bool exists( int a_index ) const ; + bool existsIntid( int a_intid ) const ; + + Suite const &chemicalElements( ) const { return( m_chemicalElements ); } + /**< Returns a *const* *reference* to the *m_chemicalElements* variable of *this*. */ + + bool isParticle( std::string const &a_id ) const { return( get( a_id ).isParticle( ) ); } /**< Returns **true** if *a_id* is a particle and **false** otherwise. */ + bool isParticle( int a_index ) const { return( m_list[a_index]->isParticle( ) ); } /**< Returns **true** if *a_index* is a particle and **false** otherwise. */ + bool isAlias( std::string const &a_id ) const { return( get( a_id ).isAlias( ) ); } /**< Returns **true** if *a_id* is an alias and **false** otherwise. */ + bool isAlias( int a_index ) const { return( m_list[a_index]->isAlias( ) ); } /**< Returns **true** if *a_index* is an alias and **false** otherwise. */ + bool isMetaStableAlias( std::string const &a_id ) const { return( get( a_id ).isMetaStableAlias( ) ); } + /**< Returns **true** if *a_id* is a meta-stable and **false** otherwise. */ + bool isMetaStableAlias( int a_index ) const { return( m_list[a_index]->isMetaStableAlias( ) ); } + /**< Returns **true** if *a_index* is a meta-stable and **false** otherwise. */ + std::vector aliasReferences( std::string const &a_id ); + + std::string final( std::string const &a_id, bool a_returnAtMetaStableAlias = false ) const ; + int final( int a_index, bool a_returnAtMetaStableAlias = false ) const ; + + std::string chemicalElementSymbol( std::string const &a_id ) const ; + std::string isotopeSymbol( std::string const &a_id ) const ; + int intid( std::string const &a_id ) const ; + int intid( int a_index ) const ; + int indexFromIntid( int a_intid ) const ; + + int add( Base *a_item ); + int addSymbol( SymbolBase *a_item ); + + void calculateNuclideGammaBranchStateInfos( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos, Database const *a_pops2, + std::vector a_extraGammaBranchStates ) const ; + void calculateNuclideGammaBranchStateInfos2( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const ; + + double massValue( std::string const &a_id, std::string const &a_unit ) const ; + + void saveAs( std::string const &a_fileName ) const ; + void toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const ; + void print( bool a_printIndices ); +}; + +/* *********************************************************************************************************//** + * Returns the partile in *this* that has index *a_index*. + * + * @param a_index [in] The index of the particle to return. + * + * @return A *const* reference to the particle at index *a_index*. + ***********************************************************************************************************/ + +template T const &Database::get( int a_index ) const { + + Base *particle = m_list[a_index]; + if( particle == nullptr ) throw std::range_error( std::string( "particle not in database" ) ); + T const *object = dynamic_cast( particle ); + if( object == nullptr ) throw std::bad_cast( ); + + return( *object ); +} + +/* *********************************************************************************************************//** + * Returns the partile in *this* that has index *a_index*. + * + * @param a_id [in] The **PoPs** id of the particle to return. + * + * @return A *const* reference to the particle with id *a_id*. + ***********************************************************************************************************/ + +template T const &Database::get( std::string const &a_id ) const { + + int index = (*this)[a_id]; + Base *particle = m_list[index]; + T const *object = dynamic_cast( particle ); + if( object == nullptr ) throw std::bad_cast( ); + + return( *object ); +} + +double getPhysicalQuantityAsDouble( PhysicalQuantity const &a_physicalQuantity ); +double getPhysicalQuantityOfSuiteAsDouble( PQ_suite const &a_suite, bool a_allowEmpty = false, double a_emptyValue = 0.0 ); +bool supportedFormat( LUPI::FormatVersion const &a_formatVersion ); +std::string baseAntiQualifierFromID( std::string const &a_id, std::string &a_anti, std::string *a_qualifier = nullptr ); + +int maximumChemicalElementZ( ); +std::string chemicalElementInfoFromZ( int a_Z, bool a_wantSymbol, bool a_asNucleus = false ); +std::string const &chemicalElementSymbolFromZ( int a_Z ); +int Z_FromChemicalElementSymbol( std::string const &a_symbol ); + +int family2Integer( Particle_class a_family ); +int intidHelper( bool a_isAnti, Particle_class a_family, int a_SSSSSSS ); + +} + +#endif // End of PoPI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/PoPs.h b/source/processes/hadronic/models/lend/include/PoPs.h deleted file mode 100644 index f8e2645cf1..0000000000 --- a/source/processes/hadronic/models/lend/include/PoPs.h +++ /dev/null @@ -1,126 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef PoPs_h_included -#define PoPs_h_included - -/* Disable Effective C++ warnings in PoP code. */ -#if __INTEL_COMPILER > 1399 -#pragma warning( disable:593 ) -#endif - -#include -/* -* MPI stuff. -*/ -#ifdef PoPs_MPI -#include -#endif - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -#define POPS_VERSION_MAJOR 1 -#define POPS_VERSION_MINOR 0 -#define POPS_VERSION_PATCHLEVEL 5 - -#define PoPs_packageSymbol "PoPs (properties of particles)" -#define PoPs_packageName PoPs_packageSymbol " (properties of particles)" -typedef struct PoP_s PoP; - -enum PoPs_errorTokens { PoPs_errorToken_Okay, PoPs_errorToken_badName, PoPs_errorToken_badIndex, PoPs_errorToken_badUnitConversion }; -enum PoPs_genre { PoPs_genre_invalid, PoPs_genre_unknown, PoPs_genre_alias, PoPs_genre_photon, PoPs_genre_lepton, - PoPs_genre_quark, PoPs_genre_meson, PoPs_genre_baryon, PoPs_genre_nucleus, PoPs_genre_atom }; -/* -* In the following struct, 'index' is the index of the particle (proper or aliased) in the list of particles. If a particle -* is a proper particle its properIndex is -1. Otherwise, it is the index of the aliased particle's proper particle. If a proper -* particle does not have an aliased particle referring to it, aliasIndex is -1. If a proper particle has aliaes particles, -* its aliasIndex is the index of its first aliased particle. If a second alias is added to a proper particle, then its first -* aliased particle's aliasIndex is the index of that particle, and so on. The last aliased particle added has aliasIndex = -1. -*/ -struct PoP_s { /* Any changes here must be reflected in functions PoP_initialize and PoP_copyParticle and in file PoPs_Bcast.c logic. */ - int index, properIndex, aliasIndex; - enum PoPs_genre genre; - char const *name; - int Z, A, l; - double mass; /* Mass to be added to base. */ - char const *massUnit; -}; - -extern int PoPs_smr_ID; - -const char *PoPs_version( void ); -int PoPs_versionMajor( void ); -int PoPs_versionMinor( void ); -int PoPs_versionPatchLevel( void ); - -int PoPs_register( void ); -int PoPs_readDatabase( statusMessageReporting *smr, char const *fileName ); -int PoPs_release( statusMessageReporting *smr ); -PoP *PoPs_addParticleIfNeeded( statusMessageReporting *smr, PoP *pop ); -PoP *PoPs_copyAddParticleIfNeeded( statusMessageReporting *smr, PoP *pop ); -PoP *PoPs_addAliasIfNeeded( statusMessageReporting *smr, char const *name, char const *alias ); -int PoPs_numberOfParticle( void ); -int PoPs_particleIndex( char const *name ); -int PoPs_particleIndex_smr( statusMessageReporting *smr, char const *name, char const *file, int line, char const *func ); -char const *PoPs_getName_atIndex( statusMessageReporting *smr, int index ); -double PoPs_getMassInUnitOf( statusMessageReporting *smr, char const *name, char const *unit ); -double PoPs_getMassInUnitOf_atIndex( statusMessageReporting *smr, int index, char const *unit ); -enum PoPs_genre PoPs_getGenre( statusMessageReporting *smr, char const *name ); -enum PoPs_genre PoPs_getGenre_atIndex( statusMessageReporting *smr, int index ); -int PoPs_getZ_A_l( statusMessageReporting *smr, char const *name, int *Z, int *A, int *l ); -int PoPs_getZ_A_l_atIndex( statusMessageReporting *smr, int index, int *Z, int *A, int *l ); -int PoPs_hasNucleus( statusMessageReporting *smr, char const *name, int protonIsNucleus ); -int PoPs_hasNucleus_atIndex( statusMessageReporting *smr, int index, int protonIsNucleus ); -char const *PoPs_getAtomsName( statusMessageReporting *smr, char const *name ); -char const *PoPs_getAtomsName_atIndex( statusMessageReporting *smr, int index ); -int PoPs_getAtomsIndex( statusMessageReporting *smr, char const *name ); -int PoPs_getAtomsIndex_atIndex( statusMessageReporting *smr, int index ); -PoP *PoPs_getParticle_atIndex( int index ); - -char const *PoPs_genreTokenToString( enum PoPs_genre genre ); -void PoPs_print( int sorted ); -void PoPs_write( FILE *f, int sorted ); - -PoP *PoP_new( statusMessageReporting *smr ); -int PoP_initialize( statusMessageReporting *smr, PoP *pop ); -int PoP_release( PoP *pop ); -PoP *PoP_free( PoP *pop ); -int PoP_copyParticle( statusMessageReporting *smr, PoP *desc, PoP *src ); -PoP *PoP_makeParticle( statusMessageReporting *smr, enum PoPs_genre genre, char const *name, double mass, char const *massUnit ); -int PoP_setZ_A_l( statusMessageReporting *smr, PoP *pop, int Z, int A, int l ); -int PoP_getIndex( PoP *pop ); -char const *PoP_getName( PoP *pop ); - -int PoPs_particleReadDatabase( statusMessageReporting *smr, char const *name ); -PoP *PoPs_particleCreateLoadInfo( statusMessageReporting *smr, const char *name ); -int PoPs_particleLoadInfo( statusMessageReporting *smr, const char *name, PoP *pop ); - -double PoP_getMassInUnitOf( statusMessageReporting *smr, PoP *pop, char const *unit ); - -PoP *PoP_makeAlias( statusMessageReporting *smr, char const *name, char const *alias ); - -int PoPs_unitConversionRatio( char const *_from, char const *_to, double *ratio ); - -int lPoPs_addParticleIfNeeded( statusMessageReporting *smr, char const *name, char const *special ); - -/* -* MPI stuff. -*/ -#ifdef PoPs_MPI -int PoPs_Bcast( statusMessageReporting *smr, MPI_Comm comm, int bossRank ); -#endif - -/* Use the next function with caution as it is only for initial testing of the package and will soon be gone. */ -int PoPs_setBDFLS_File( char const *name ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of PoPs_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/PoPs_Bcast_private.h b/source/processes/hadronic/models/lend/include/PoPs_Bcast_private.h deleted file mode 100644 index 8ddd17728b..0000000000 --- a/source/processes/hadronic/models/lend/include/PoPs_Bcast_private.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef PoPs_Bcast_private_h_included -#define PoPs_Bcast_private_h_included - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - - -int PoPs_Bcast2( statusMessageReporting *smr, MPI_Comm comm, int bossRank, unitsDB *unitsRoot, PoPs *popsRoot ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of PoPs_Bcast_private_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/PoPs_data.h b/source/processes/hadronic/models/lend/include/PoPs_data.h deleted file mode 100644 index 17b3bd0d4c..0000000000 --- a/source/processes/hadronic/models/lend/include/PoPs_data.h +++ /dev/null @@ -1,3767 +0,0 @@ -/* -# <> -# <> -*/ - -#if defined __cplusplus - namespace GIDI { -#endif - -#define e_Mass 5.4857990943e-4 /* electron mass in AMU */ - -#define Al26_Mass 25.986891692 -#define Al26_e1Level_Mass 2.45095e-4 /* Al26 first nuclear level (228305 eV/c**2) in amu */ - -#define Cl34_Mass 33.973762819 -#define Cl34_e1Level_Mass 1.57124e-4 /* Cl34 first nuclear level (146360 eV/c**2) in amu */ - -#define Co58_Mass 5.7935752814e+01 -#define Co58_e1Level_Mass 2.67205e-05 /* Co58 first nuclear level (24890 eV/c**2) in amu */ - -#define Ag110_Mass 1.09906107231e+02 -#define Ag110_e2Level_Mass 1.2624e-04 /* Ag110 second nuclear level (117590 eV/c**2) in amu */ - -#define Cd115_Mass 1.14905430969e+02 -#define Cd115_e1Level_Mass 1.9431e-04 /* Cd155 first nuclear level (1.81e5 eV/c**2) in amu */ - -#define Te127_Mass 1.26905226336e+02 -#define Te127_e2Level_Mass 9.4751e-05 /* Te127 second nuclear level (88260 eV/c**2) in amu */ - -#define Te129_Mass 1.28906598238e+02 -#define Te129_e1Level_Mass 1.1302e-04 /* Te129 second nuclear level (105280 eV/c**2) in amu */ - -#define Pm148_Mass 1.47917474618e+02 -#define Pm148_e2Level_Mass 1.4804e-04 /* Pm148 second nuclear level (137900 eV/c**2) in amu */ - -#define Ho166_Mass 1.65932284162e+02 -#define Ho166_e1Level_Mass 6.4252e-06 /* Ho166first nuclear level (5985 eV/c**2) in amu */ - - -#define Am242_Mass 2.42059549159e+02 -#define Am242_e2Level_Mass 5.153e-05 /* Am242's second nuclear level (48000 eV/c**2) in amu */ - -#define Am244_Mass 2.44064284847e+02 -#define Am244_e1Level_Mass 9.4472e-05 /* Am244's second nuclear level (87999.9 eV/c**2) in amu */ - -#define Es254_Mass 2.54088022021e+02 -#define Es254_e2Level_Mass 9.0392e-05 /* Es254 second nuclear level (84200 eV/c**2) in amu */ - -#define Na24_Mass 23.990962782 -#define Na24_e1Level_Mass 5.07024e-04 /* Na24 first nuclear level (472290 eV/c**2) in amu */ - -#define Sc46_Mass 45.95517189 -#define Sc46_e1Level_Mass 1.52980e-04 /* Sc46 first nuclear level (142500 eV/c**2) in amu */ - -#define Mn52_Mass 51.945565464 -#define Mn52_e1Level_Mass 4.05478e-04 /* Mn52 first nuclear level (377700 eV/c**2) in amu */ - -#define Pb187_Mass 186.98391837 -#define Pb187_e1Level_Mass 8.69571e-05 /* Pb187 first nuclear level (8.1e4 eV/c**2/c**2) in amu */ -#define Pb191_Mass 190.978265 -#define Pb191_e1Level_Mass 1.48149e-04 /* Pb191 first nuclear level (1.38e5 eV/c**2/c**2) in amu */ -#define Pb193_Mass 192.976173234 -#define Pb193_e1Level_Mass 1.07354e-06 /* Pb193 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Pb195_Mass 194.97454205 -#define Pb195_e2Level_Mass 2.17822e-04 /* Pb195 second nuclear level (202900 eV/c**2/c**2) in amu */ -#define Pb197_Mass 196.973431124 -#define Pb197_e2Level_Mass 3.42793e-04 /* Pb197 second nuclear level (319310 eV/c**2/c**2) in amu */ -#define Pb199_Mass 198.97291665 -#define Pb199_e1Level_Mass 1.07354e-06 /* Pb199 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Pb201_Mass 200.972884511 -#define Pb201_e4Level_Mass 6.75366e-04 /* Pb201 fourth nuclear level (629100 eV/c**2/c**2) in amu */ -#define Pb202_Mass 201.972159133 -#define Pb202_e13Level_Mass 2.32938e-03 /* Pb202 13th nuclear level (2169800 eV/c**2/c**2) in amu */ -#define Pb203_Mass 202.973390521 -#define Pb203_e6Level_Mass 8.85888e-04 /* Pb203 sixth nuclear level (825200 eV/c**2/c**2) in amu */ -#define Pb204_Mass 203.973043589 -#define Pb204_e21Level_Mass 2.34654e-03 /* Pb204 21th nuclear level (2185790 eV/c**2/c**2) in amu */ -#define Pb207_Mass 206.975896887 -#define Pb207_e3Level_Mass 1.75353e-03 /* Pb207 third nuclear level (1633400 eV/c**2/c**2) in amu */ - -#define Tl186_Mass 185.978325 -#define Tl186_e1Level_Mass 1.07354e-06 /* Tl186 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl187_Mass 186.975905897 -#define Tl187_e2Level_Mass 3.59647e-04 /* Tl187 second nuclear level (335009 eV/c**2/c**2) in amu */ -#define Tl188_Mass 187.976009782 -#define Tl188_e1Level_Mass 1.07354e-06 /* Tl188 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl189_Mass 188.973588428 -#define Tl189_e1Level_Mass 2.76545e-04 /* Tl189 first nuclear level (257600 eV/c**2/c**2) in amu */ -#define Tl190_Mass 189.973877149 -#define Tl190_e1Level_Mass 1.07354e-06 /* Tl190 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl191_Mass 190.971786154 -#define Tl191_e1Level_Mass 1.07354e-06 /* Tl191 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl192_Mass 191.972225 -#define Tl192_e1Level_Mass 1.67473e-04 /* Tl192 first nuclear level (1.56e5 eV/c**2/c**2) in amu */ -#define Tl193_Mass 192.970672 -#define Tl193_e1Level_Mass 1.07354e-06 /* Tl193 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl194_Mass 193.9712 -#define Tl194_e1Level_Mass 1.07354e-06 /* Tl194 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Tl195_Mass 194.969774335 -#define Tl195_e2Level_Mass 5.18124e-04 /* Tl195 second nuclear level (482630 eV/c**2/c**2) in amu */ -#define Tl196_Mass 195.970481151 -#define Tl196_e6Level_Mass 4.23191e-04 /* Tl196 sixth nuclear level (394200 eV/c**2/c**2) in amu */ -#define Tl198_Mass 197.970483495 -#define Tl198_e7Level_Mass 5.83471e-04 /* Tl198 seventh nuclear level (543500 eV/c**2/c**2) in amu */ -#define Tl207_Mass 206.977419429 -#define Tl207_e2Level_Mass 1.44724e-03 /* Tl207 second nuclear level (1348100 eV/c**2/c**2) in amu */ - -#define Hg185_Mass 184.971899086 -#define Hg185_e4Level_Mass 1.06603e-04 /* Hg185 fourth nuclear level (99300 eV/c**2/c**2) in amu */ -#define Hg187_Mass 186.969814236 -#define Hg187_e1Level_Mass 1.07354e-06 /* Hg187 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Hg189_Mass 188.968190034 -#define Hg189_e2Level_Mass 1.07354e-06 /* Hg189 second nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Hg191_Mass 190.967157105 -#define Hg191_e1Level_Mass 1.07354e-06 /* Hg191 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Hg193_Mass 192.966665421 -#define Hg193_e3Level_Mass 1.51112e-04 /* Hg193 third nuclear level (140760 eV/c**2/c**2) in amu */ -#define Hg195_Mass 194.966720113 -#define Hg195_e3Level_Mass 1.89019e-04 /* Hg195 third nuclear level (176070 eV/c**2/c**2) in amu */ -#define Hg197_Mass 196.967212908 -#define Hg197_e4Level_Mass 3.20914e-04 /* Hg197 fourth nuclear level (298930 eV/c**2/c**2) in amu */ -#define Hg199_Mass 198.968279932 -#define Hg199_e7Level_Mass 5.71641e-04 /* Hg199 seventh nuclear level (532480 eV/c**2/c**2) in amu */ - -#define Au185_Mass 184.965789411 -#define Au185_e1Level_Mass 1.07354e-06 /* Au185 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Au187_Mass 186.964567541 -#define Au187_e2Level_Mass 1.29373e-04 /* Au187 second nuclear level (120510 eV/c**2/c**2) in amu */ -#define Au189_Mass 188.963948286 -#define Au189_e3Level_Mass 2.65412e-04 /* Au189 thrid nuclear level (247230 eV/c**2/c**2) in amu */ -#define Au193_Mass 192.964149715 -#define Au193_e4Level_Mass 3.11532e-04 /* Au193 fourth nuclear level (290190 eV/c**2/c**2) in amu */ -#define Au195_Mass 194.96503464 -#define Au195_e4Level_Mass 3.42010e-04 /* Au195 fourth nuclear level (318580 eV/c**2/c**2) in amu */ -#define Au196_Mass 195.966569813 -#define Au196_e3Level_Mass 9.08819e-05 /* Au196 third nuclear level (84656 eV/c**2/c**2) in amu */ -#define Au197_Mass 196.966568662 -#define Au197_e4Level_Mass 4.39240e-04 /* Au197 fourth nuclear level (409150 eV/c**2/c**2) in amu */ -#define Au200_Mass 199.970725647 -#define Au200_e11Level_Mass 1.03275e-03 /* Au200 11th nuclear level (9.62e5 eV/c**2/c**2) in amu */ - -#define Pt183_Mass 182.961596703 -#define Pt183_e1Level_Mass 3.70373e-05 /* Pt183 first nuclear level (34500 eV/c**2/c**2) in amu */ -#define Pt185_Mass 184.960619 -#define Pt185_e2Level_Mass 1.11015e-04 /* Pt185 second nuclear level (103410 eV/c**2/c**2) in amu */ -#define Pt193_Mass 192.962987401 -#define Pt193_e5Level_Mass 1.60795e-04 /* Pt193 fifth nuclear level (149780 eV/c**2/c**2) in amu */ -#define Pt195_Mass 194.964791134 -#define Pt195_e7Level_Mass 2.78370e-04 /* Pt195 seventh nuclear level (259300 eV/c**2/c**2) in amu */ -#define Pt197_Mass 196.967340182 -#define Pt197_e9Level_Mass 4.28977e-04 /* Pt197 nineth nuclear level (399590 eV/c**2/c**2) in amu */ -#define Pt199_Mass 198.970593094 -#define Pt199_e8Level_Mass 4.55183e-04 /* Pt199 eighth nuclear level (4.24e5 eV/c**2/c**2) in amu */ - -#define Os181_Mass 180.953244 -#define Os181_e1Level_Mass 5.28184e-05 /* Os181 first nuclear level (49200 eV/c**2/c**2) in amu */ -#define Os183_Mass 182.953126102 -#define Os183_e2Level_Mass 1.83265e-04 /* Os183 second nuclear level (170710 eV/c**2/c**2) in amu */ -#define Os189_Mass 188.95814747 -#define Os189_e1Level_Mass 3.30780e-05 /* Os189 first nuclear level (30812 eV/c**2/c**2) in amu */ -#define Os191_Mass 190.960929718 -#define Os191_e1Level_Mass 7.98523e-05 /* Os191 first nuclear level (74382 eV/c**2/c**2) in amu */ - -#define Np236_Mass 236.0465696 -#define Np236_e2Level_Mass 1.98606e-04 /* Np236 second nuclear level (1.85e5 eV/c**2/c**2) in amu */ - -/* -Special symbols for undefined elements. - Z Symbol - ----------- - 113 Uut - 114 Uuq Now Fl - 115 Uup - 116 Uuh Now Lv - 117 Uus - 118 Uuo -*/ - -struct PoPDatas { - char const *name; - enum PoPs_genre genre; - int Z, N, nuclearLevel; - double mass; -}; - -/* Most of the mass data from Ame2003 */ - - -#define Zn69_Mass 68.926550281 -#define Zn69_e1Level_Mass 4.68685e-04 /* Mn52 first nuclear level (436577 eV/c**2) in amu */ - -#define Y88_Mass 87.909501146 -#define Y88_e2Level_Mass 4.20829e-04 /* Y88 second nuclear level (3.92e5 eV/c**2) in amu */ -#define Y88_e3Level_Mass 7.24642e-04 /* Y88 third nuclear level (6.75e5 eV/c**2) in amu */ -#define Y89_Mass 88.905848295 -#define Y89_e1Level_Mass 9.75808e-04 /* Y89 first nuclear level (908960 eV/c**2) in amu */ -#define Y90_Mass 89.907151886 -#define Y90_e1Level_Mass 7.31803e-04 /* Y90 first nuclear level (681670 eV/c**2) in amu */ - -#define Rb86_Mass 85.911167419 -#define Rb86_e1Level_Mass 5.96890e-04 /* Rb86 first nuclear level (5.56e5 eV/c**2) in amu */ - -#define Zr89_Mass 8.89088895e+01 -#define Zr89_e1Level_Mass 6.31244e-04 /* Zr89 first nuclear level (5.88e5 eV/c**2) in amu */ - -#define Sr87_Mass 86.908877124 -#define Sr87_e1Level_Mass 4.17107e-04 /* Sr87 first nuclear level (388533 eV/c**2) in amu */ - -#define Rb90_Mass 89.914801694 -#define Rb90_e1Level_Mass 1.14869e-04 /* Rb90 first nuclear level (1.07e5 eV/c**2) in amu */ - -#define Nb93_Mass 92.906378058 -#define Nb93_e1Level_Mass 3.29900e-05 /* Nb93 first nuclear level (30730 eV/c**2) in amu */ - -#define In116_Mass 115.905259703 -#define In116_e1Level_Mass 1.36630e-04 /* In116 first nuclear level (127269.7 eV/c**2) in amu */ - -#define Sb124_Mass 123.905935743 -#define Sb124_e1Level_Mass 1.16619e-05 /* Sb124 first nuclear level (10863 eV/c**2/c**2) in amu */ -#define Sb124_e2Level_Mass 3.95558e-05 /* Sb124 second nuclear level (36846 eV/c**2/c**2) in amu */ - -#define Ho163_Mass 162.928733903 -#define Ho163_e1Level_Mass 3.19809e-04 /* Ho163 first nuclear level (297900 eV/c**2/c**2) in amu */ -#define Ho164_Mass 163.930233507 -#define Ho164_e1Level_Mass 1.50081e-04 /* Ho164 first nuclear level (139800 eV/c**2/c**2) in amu */ -#define Er167_Mass 166.932048159 -#define Er167_e1Level_Mass 2.23082e-04 /* Er167 first nuclear level (207800 eV/c**2/c**2) in amu */ - -#define Dy165_Mass 164.931703333 -#define Dy165_e1Level_Mass 1.16157e-04 /* Dy165 first nuclear level (108200 eV/c**2/c**2) in amu */ - - -#define Yb169_Mass 168.935189802 -#define Yb169_e1Level_Mass 2.59798e-05 /* Yb169 first nuclear level (24200 eV/c**2/c**2) in amu */ -#define Yb176_Mass 175.942571683 -#define Yb176_e1Level_Mass 1.12722e-03 /* Yb176 first nuclear level (1.05e6 eV/c**2/c**2) in amu */ -#define Yb177_Mass 176.945260822 -#define Yb177_e1Level_Mass 3.55880e-04 /* Yb177 first nuclear level (331500 eV/c**2/c**2) in amu */ - -#define Lu169_Mass 168.937651439 -#define Lu169_e1Level_Mass 3.11328e-05 /* Lu169 first nuclear level (2.9e4 eV/c**2/c**2) in amu */ -#define Lu171_Mass 170.937913136 -#define Lu171_e1Level_Mass 7.64363e-05 /* Lu171 first nuclear level (71200 eV/c**2/c**2) in amu */ -#define Lu172_Mass 171.939085669 -#define Lu172_e1Level_Mass 4.49815e-05 /* Lu172 first nuclear level (41900 eV/c**2/c**2) in amu */ -#define Lu174_Mass 173.94033748 -#define Lu174_e1Level_Mass 1.83361e-04 /* Lu174 first nuclear level (170800 eV/c**2/c**2) in amu */ -#define Lu176_Mass 175.94268631 -#define Lu176_e1Level_Mass 1.32046e-04 /* Lu176 first nuclear level (1.23e5 eV/c**2/c**2) in amu */ -#define Lu177_Mass 176.943758055 -#define Lu177_e1Level_Mass 1.04155e-03 /* Lu177 first nuclear level (970200 eV/c**2/c**2) in amu */ -#define Lu178_Mass 177.945954559 -#define Lu178_e1Level_Mass 1.28825e-04 /* Lu178 first nuclear level (1.2e5 eV/c**2/c**2) in amu */ - -#define Hf178_Mass 177.943698766 -#define Hf178_e1Level_Mass 1.23178e-03 /* Hf178 first nuclear level (1147400 eV/c**2/c**2) in amu */ -#define Hf179_Mass 178.945816145 -#define Hf179_e1Level_Mass 4.02579e-04 /* Hf179 first nuclear level (3.75e5 eV/c**2/c**2) in amu */ -#define Hf180_Mass 179.946549953 -#define Hf180_e1Level_Mass 1.22545e-03 /* Hf180 first nuclear level (1141500 eV/c**2/c**2) in amu */ -#define Hf182_Mass 181.950554096 -#define Hf182_e1Level_Mass 1.25916e-03 /* Hf182 first nuclear level (1172900 eV/c**2/c**2) in amu */ - -#define Ta180_Mass 179.947464831 -#define Ta180_e2Level_Mass 8.08379e-05 /* Ta180 second nuclear level (75300 eV/c**2/c**2) in amu */ -#define Ta182_Mass 181.950151849 -#define Ta182_e26Level_Mass 5.57781e-04 /* Ta182 26th nuclear level (519570 eV/c**2/c**2) in amu */ - -#define W179_Mass 178.947070447 -#define W179_e1Level_Mass 2.38219e-04 /* W179 first nuclear level (221900 eV/c**2/c**2) in amu */ -#define W183_Mass 182.950222951 -#define W183_e1Level_Mass 3.32262e-04 /* W183 first nuclear level (309500 eV/c**2/c**2) in amu */ -#define W185_Mass 184.953419264 -#define W185_e1Level_Mass 2.11918e-04 /* W185 first nuclear level (197400 eV/c**2/c**2) in amu */ - -#define Tm176_Mass 175.946994685 -#define Tm176_e1Level_Mass 1.12722e-03 /* Tm176 first nuclear level (1.05e6 eV/c**2/c**2) in amu */ - -#define Ir186_Mass 185.957946104 -#define Ir186_e1Level_Mass 1.07354e-06 /* Ir186 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Ir190_Mass 189.960545968 -#define Ir190_e1Level_Mass 2.79121e-05 /* Ir190 first nuclear level (2.6e4 eV/c**2/c**2) in amu */ -#define Ir190_e2Level_Mass 3.88086e-05 /* Ir190 second nuclear level (36150 eV/c**2/c**2) in amu */ -#define Ir190_e3Level_Mass 4.04082e-04 /* Ir190 third nuclear level (376400 eV/c**2/c**2) in amu */ -#define Ir190_e37Level_Mass 4.04082e-04 /* Ir190 37th nuclear level (376400 eV/c**2/c**2) in amu */ -#define Ir191_Mass 190.960594046 -#define Ir191_e3Level_Mass 1.83834e-04 /* Ir191 third nuclear level (171240 eV/c**2/c**2) in amu */ -#define Ir192_Mass 191.962605012 -#define Ir192_e3Level_Mass 6.08914e-05 /* Ir192 third nuclear level (56720 eV/c**2/c**2) in amu */ -#define Ir192_e7Level_Mass 1.80506e-04 /* Ir192 7th nuclear level (168140 eV/c**2/c**2) in amu */ -#define Ir192_e16Level_Mass 1.80506e-04 /* Ir192 16th nuclear level (168140 eV/c**2/c**2) in amu */ -#define Ir193_Mass 192.96292643 -#define Ir193_e2Level_Mass 8.61197e-05 /* Ir193 second nuclear level (80220 eV/c**2/c**2) in amu */ -#define Ir194_Mass 193.965078378 -#define Ir194_e7Level_Mass 1.57888e-04 /* Ir194 seventh nuclear level (147072 eV/c**2/c**2) in amu */ -#define Ir195_Mass 194.965979573 -#define Ir195_e2Level_Mass 1.07354e-04 /* Ir195 second nuclear level (1e5 eV/c**2/c**2) in amu */ -#define Ir196_Mass 195.968396542 -#define Ir196_e4Level_Mass 4.40153e-04 /* Ir196 first nuclear level (4.1e5 eV/c**2/c**2) in amu */ -#define Ir197_Mass 196.969653285 -#define Ir197_e2Level_Mass 1.23458e-04 /* Ir197 first nuclear level (1.15e5 eV/c**2/c**2) in amu */ - -#define Re182_Mass 181.95121008 -#define Re182_e1Level_Mass 1.07354e-06 /* Re182 first nuclear level (1e3 eV/c**2/c**2) in amu */ -#define Re184_Mass 183.952520756 -#define Re184_e5Level_Mass 2.01837e-04 /* Re184 fifth nuclear level (188010 eV/c**2/c**2) in amu */ -#define Re186_Mass 185.954986084 -#define Re186_e4Level_Mass 1.59958e-04 /* Re186 fourth nuclear level (1.49e5 eV/c**2/c**2) in amu */ -#define Re188_Mass 187.958114438 -#define Re188_e7Level_Mass 1.84724e-04 /* Re188 seventh nuclear level (172069 eV/c**2/c**2) in amu */ -#define Re190_Mass 189.961817977 -#define Re190_e3Level_Mass 2.25444e-04 /* Re190 third nuclear level (2.1e5 eV/c**2/c**2) in amu */ - -static struct PoPDatas PoPDatas[] = { - { "c12", PoPs_genre_nucleus, 6, 6, 0, 11.99671 }, /* Mass from Scott McKinley. */ -/* Needed by ENDF/B-VII.1 W186 but not in Wadi, et al. */ - { "Tm180", PoPs_genre_atom, 69, 111, 0, 179.95792495 }, - { "Pt203", PoPs_genre_atom, 78, 125, 0, 202.976969588582 }, - { "Na24_e1", PoPs_genre_atom, 11, 13, 1, Na24_Mass + Na24_e1Level_Mass }, -{ "Sc46_e1", PoPs_genre_atom, 21, 25, 1, Sc46_Mass + Sc46_e1Level_Mass }, -{ "Mn52_e1", PoPs_genre_atom, 25, 27, 1, Mn52_Mass + Mn52_e1Level_Mass }, -{ "Zn69_e1", PoPs_genre_atom, 30, 39, 1, Zn69_Mass + Zn69_e1Level_Mass }, -{ "Y88_e2", PoPs_genre_atom, 39, 49, 2, Y88_Mass + Y88_e2Level_Mass }, -{ "Y88_e3", PoPs_genre_atom, 39, 49, 3, Y88_Mass + Y88_e3Level_Mass }, -{ "Y89_e1", PoPs_genre_atom, 39, 50, 1, Y89_Mass + Y89_e1Level_Mass}, -{ "Y90_e1", PoPs_genre_atom, 39, 51, 1, Y90_Mass + Y90_e1Level_Mass }, -{ "Rb86_e1", PoPs_genre_atom, 37, 49, 1, Rb86_Mass + Rb86_e1Level_Mass }, -{ "Zr89_e1", PoPs_genre_atom, 40, 49, 1, Zr89_Mass + Zr89_e1Level_Mass }, -{ "Sr87_e1", PoPs_genre_atom, 38, 49, 1, Sr87_Mass + Sr87_e1Level_Mass }, -{ "Rb90_e1", PoPs_genre_atom, 37, 53, 1, Rb90_Mass + Rb90_e1Level_Mass }, -{ "Nb93_e1", PoPs_genre_atom, 41, 52, 1, Nb93_Mass + Nb93_e1Level_Mass }, -{ "In116_e1", PoPs_genre_atom, 49, 67, 1, In116_Mass + In116_e1Level_Mass }, -{ "Sb124_e1", PoPs_genre_atom, 51, 73, 1, Sb124_Mass + Sb124_e1Level_Mass }, -{ "Sb124_e2", PoPs_genre_atom, 51, 73, 2, Sb124_Mass + Sb124_e2Level_Mass }, -{ "Ho163_e1", PoPs_genre_atom, 67, 96, 1, Ho163_Mass + Ho163_e1Level_Mass }, -{ "Ho164_e1", PoPs_genre_atom, 67, 97, 1, Ho164_Mass + Ho164_e1Level_Mass }, -{ "Er167_e1", PoPs_genre_atom, 68, 99, 1, Er167_Mass + Er167_e1Level_Mass }, -{ "Dy165_e1", PoPs_genre_atom, 66, 99, 1, Dy165_Mass + Dy165_e1Level_Mass }, -{ "Hf178_e1", PoPs_genre_atom, 72, 106, 1, Hf178_Mass + Hf178_e1Level_Mass }, - -{ "Hf179_e1", PoPs_genre_atom, 72, 107, 1, Hf179_Mass + Hf179_e1Level_Mass }, -{ "Hf179_e5", PoPs_genre_atom, 72, 107, 5, Hf179_Mass + Hf179_e1Level_Mass }, - -{ "Hf180_e1", PoPs_genre_atom, 72, 108, 1, Hf180_Mass + Hf180_e1Level_Mass }, -{ "Hf180_e7", PoPs_genre_atom, 72, 108, 7, Hf180_Mass + Hf180_e1Level_Mass }, - -{ "Hf182_e1", PoPs_genre_atom, 72, 110, 7, Hf182_Mass + Hf182_e1Level_Mass }, - -{ "Ta180_e1", PoPs_genre_atom, 73, 107, 1, Ta180_Mass + Ta180_e2Level_Mass }, -{ "Ta180_e2", PoPs_genre_atom, 73, 107, 2, Ta180_Mass + Ta180_e2Level_Mass }, - -{ "Ta182_e26", PoPs_genre_atom, 73, 109, 26, Ta182_Mass + Ta182_e26Level_Mass }, -{ "Ta182_e1", PoPs_genre_atom, 73, 109, 1, Ta182_Mass + Ta182_e26Level_Mass }, - -{ "W179_e1", PoPs_genre_atom, 74, 105, 1, W179_Mass + W179_e1Level_Mass }, -{ "W179_e2", PoPs_genre_atom, 74, 105, 2, W179_Mass + W179_e1Level_Mass }, - -{ "W183_e1", PoPs_genre_atom, 74, 105, 1, W183_Mass + W183_e1Level_Mass }, -{ "W183_e7", PoPs_genre_atom, 74, 105, 7, W183_Mass + W183_e1Level_Mass }, - -{ "W185_e1", PoPs_genre_atom, 74, 105, 1, W185_Mass + W185_e1Level_Mass }, -{ "W185_e6", PoPs_genre_atom, 74, 105, 6, W185_Mass + W185_e1Level_Mass }, - -{ "Yb169_e1", PoPs_genre_atom, 70, 99, 1, Yb169_Mass + Yb169_e1Level_Mass }, -{ "Yb176_e1", PoPs_genre_atom, 70, 99, 1, Yb176_Mass + Yb176_e1Level_Mass }, -{ "Yb177_e1", PoPs_genre_atom, 70, 99, 1, Yb177_Mass + Yb177_e1Level_Mass }, -{ "Lu169_e1", PoPs_genre_atom, 71, 98, 1, Lu169_Mass + Lu169_e1Level_Mass }, -{ "Lu171_e1", PoPs_genre_atom, 71, 100, 1, Lu171_Mass + Lu171_e1Level_Mass }, -{ "Lu172_e1", PoPs_genre_atom, 71, 101, 1, Lu172_Mass + Lu172_e1Level_Mass }, -{ "Lu174_e1", PoPs_genre_atom, 71, 103, 1, Lu174_Mass + Lu174_e1Level_Mass }, -{ "Lu176_e1", PoPs_genre_atom, 71, 105, 1, Lu176_Mass + Lu176_e1Level_Mass }, -{ "Lu177_e1", PoPs_genre_atom, 71, 106, 1, Lu177_Mass + Lu177_e1Level_Mass }, -{ "Lu178_e1", PoPs_genre_atom, 71, 107, 1, Lu178_Mass + Lu178_e1Level_Mass }, -{ "Tm176_e1", PoPs_genre_atom, 69, 107, 1, Tm176_Mass + Tm176_e1Level_Mass }, -{ "Ir186_e1", PoPs_genre_atom, 77, 109, 1, Ir186_Mass + Ir186_e1Level_Mass }, -{ "Ir190_e1", PoPs_genre_atom, 77, 113, 1, Ir190_Mass + Ir190_e1Level_Mass }, -{ "Ir190_e2", PoPs_genre_atom, 77, 113, 2, Ir190_Mass + Ir190_e2Level_Mass }, -{ "Ir190_e3", PoPs_genre_atom, 77, 113, 3, Ir190_Mass + Ir190_e3Level_Mass }, -{ "Ir190_e37", PoPs_genre_atom, 77, 113, 37, Ir190_Mass + Ir190_e37Level_Mass }, -{ "Ir191_e3", PoPs_genre_atom, 77, 114, 3, Ir191_Mass + Ir191_e3Level_Mass }, -{ "Ir192_e3", PoPs_genre_atom, 77, 115, 7, Ir192_Mass + Ir192_e3Level_Mass }, -{ "Ir192_e7", PoPs_genre_atom, 77, 115, 7, Ir192_Mass + Ir192_e7Level_Mass }, -{ "Ir192_e16", PoPs_genre_atom, 77, 115, 7, Ir192_Mass + Ir192_e16Level_Mass }, -{ "Ir193_e2", PoPs_genre_atom, 77, 116, 2, Ir193_Mass + Ir193_e2Level_Mass }, -{ "Ir194_e7", PoPs_genre_atom, 77, 117, 7, Ir194_Mass + Ir194_e7Level_Mass }, -{ "Ir195_e2", PoPs_genre_atom, 77, 118, 2, Ir195_Mass + Ir195_e2Level_Mass }, -{ "Ir196_e4", PoPs_genre_atom, 77, 119, 4, Ir196_Mass + Ir196_e4Level_Mass }, -{ "Ir197_e2", PoPs_genre_atom, 77, 120, 2, Ir197_Mass + Ir197_e2Level_Mass }, -{ "Pb187_e1", PoPs_genre_atom, 82, 105, 1, Pb187_Mass + Pb187_e1Level_Mass }, -{ "Pb191_e1", PoPs_genre_atom, 82, 109, 1, Pb191_Mass + Pb191_e1Level_Mass }, -{ "Pb193_e1", PoPs_genre_atom, 82, 111, 1, Pb193_Mass + Pb193_e1Level_Mass }, -{ "Pb195_e2", PoPs_genre_atom, 82, 113, 2, Pb195_Mass + Pb195_e2Level_Mass }, -{ "Pb197_e2", PoPs_genre_atom, 82, 115, 2, Pb197_Mass + Pb197_e2Level_Mass }, -{ "Pb199_e1", PoPs_genre_atom, 82, 117, 1, Pb199_Mass + Pb199_e1Level_Mass }, -{ "Pb201_e4", PoPs_genre_atom, 82, 119, 4, Pb201_Mass + Pb201_e4Level_Mass }, -{ "Pb202_e13", PoPs_genre_atom, 82, 120, 13, Pb202_Mass + Pb202_e13Level_Mass }, -{ "Pb203_e6", PoPs_genre_atom, 82, 121, 6, Pb203_Mass + Pb203_e6Level_Mass }, -{ "Pb204_e21", PoPs_genre_atom, 82, 122, 21, Pb204_Mass + Pb204_e21Level_Mass }, -{ "Pb207_e3", PoPs_genre_atom, 82, 125, 3, Pb207_Mass + Pb207_e3Level_Mass }, -{ "Tl186_e1", PoPs_genre_atom, 81, 105, 1, Tl186_Mass + Tl186_e1Level_Mass }, -{ "Tl187_e2", PoPs_genre_atom, 81, 106, 2, Tl187_Mass + Tl187_e2Level_Mass }, -{ "Tl188_e1", PoPs_genre_atom, 81, 107, 1, Tl188_Mass + Tl188_e1Level_Mass }, -{ "Tl189_e1", PoPs_genre_atom, 81, 108, 1, Tl189_Mass + Tl189_e1Level_Mass }, -{ "Tl190_e1", PoPs_genre_atom, 81, 109, 1, Tl190_Mass + Tl190_e1Level_Mass }, -{ "Tl191_e1", PoPs_genre_atom, 81, 110, 1, Tl191_Mass + Tl191_e1Level_Mass }, -{ "Tl192_e1", PoPs_genre_atom, 81, 111, 1, Tl192_Mass + Tl192_e1Level_Mass }, -{ "Tl193_e1", PoPs_genre_atom, 81, 112, 1, Tl193_Mass + Tl193_e1Level_Mass }, -{ "Tl194_e1", PoPs_genre_atom, 81, 113, 1, Tl194_Mass + Tl194_e1Level_Mass }, -{ "Tl195_e2", PoPs_genre_atom, 81, 114, 2, Tl195_Mass + Tl195_e2Level_Mass }, -{ "Tl196_e6", PoPs_genre_atom, 81, 115, 6, Tl196_Mass + Tl196_e6Level_Mass }, -{ "Tl198_e7", PoPs_genre_atom, 81, 117, 7, Tl198_Mass + Tl198_e7Level_Mass }, -{ "Tl207_e2", PoPs_genre_atom, 81, 126, 2, Tl207_Mass + Tl207_e2Level_Mass }, -{ "Re182_e1", PoPs_genre_atom, 75, 107, 1, Re182_Mass + Re182_e1Level_Mass }, -{ "Re184_e5", PoPs_genre_atom, 75, 109, 5, Re184_Mass + Re184_e5Level_Mass }, -{ "Re186_e4", PoPs_genre_atom, 75, 111, 4, Re186_Mass + Re186_e4Level_Mass }, -{ "Re188_e7", PoPs_genre_atom, 75, 113, 7, Re188_Mass + Re188_e7Level_Mass }, -{ "Re190_e3", PoPs_genre_atom, 75, 115, 3, Re190_Mass + Re190_e3Level_Mass }, -{ "Hg185_e4", PoPs_genre_atom, 80, 105, 4, Hg185_Mass + Hg185_e4Level_Mass }, -{ "Hg187_e1", PoPs_genre_atom, 80, 107, 1, Hg187_Mass + Hg187_e1Level_Mass }, -{ "Hg189_e2", PoPs_genre_atom, 80, 109, 2, Hg189_Mass + Hg189_e2Level_Mass }, -{ "Hg191_e1", PoPs_genre_atom, 80, 111, 1, Hg191_Mass + Hg191_e1Level_Mass }, -{ "Hg193_e3", PoPs_genre_atom, 80, 113, 3, Hg193_Mass + Hg193_e3Level_Mass }, -{ "Hg195_e3", PoPs_genre_atom, 80, 115, 3, Hg195_Mass + Hg195_e3Level_Mass }, -{ "Hg197_e4", PoPs_genre_atom, 80, 117, 4, Hg197_Mass + Hg197_e4Level_Mass }, -{ "Hg199_e7", PoPs_genre_atom, 80, 119, 7, Hg199_Mass + Hg199_e7Level_Mass }, -{ "Au185_e1", PoPs_genre_atom, 79, 106, 1, Au185_Mass + Au185_e1Level_Mass}, -{ "Au187_e2", PoPs_genre_atom, 79, 108, 2, Au187_Mass + Au187_e2Level_Mass }, -{ "Au189_e3", PoPs_genre_atom, 79, 110, 3, Au189_Mass + Au189_e3Level_Mass }, -{ "Au193_e4", PoPs_genre_atom, 79, 114, 4, Au193_Mass + Au193_e4Level_Mass }, -{ "Au195_e4", PoPs_genre_atom, 79, 116, 4, Au195_Mass + Au195_e4Level_Mass }, -{ "Au196_e3", PoPs_genre_atom, 79, 117, 3, Au196_Mass + Au196_e3Level_Mass }, -{ "Au197_e4", PoPs_genre_atom, 79, 118, 4, Au197_Mass + Au197_e4Level_Mass }, -{ "Au200_e11", PoPs_genre_atom, 79, 121, 11, Au200_Mass + Au200_e11Level_Mass }, -{ "Pt183_e1", PoPs_genre_atom, 78, 105, 1, Pt183_Mass + Pt183_e1Level_Mass }, -{ "Pt185_e2", PoPs_genre_atom, 78, 107, 2, Pt185_Mass + Pt185_e2Level_Mass }, -{ "Pt193_e5", PoPs_genre_atom, 78, 115, 5, Pt193_Mass + Pt193_e5Level_Mass }, -{ "Pt195_e7", PoPs_genre_atom, 78, 117, 7, Pt195_Mass + Pt195_e7Level_Mass }, -{ "Pt197_e9", PoPs_genre_atom, 78, 119, 9, Pt197_Mass + Pt197_e9Level_Mass }, -{ "Pt199_e8", PoPs_genre_atom, 78, 121, 8, Pt199_Mass + Pt199_e8Level_Mass }, -{ "Os181_e1", PoPs_genre_atom, 76, 105, 1, Os181_Mass + Os181_e1Level_Mass }, -{ "Os183_e2", PoPs_genre_atom, 76, 107, 2, Os183_Mass + Os183_e2Level_Mass }, -{ "Os189_e1", PoPs_genre_atom, 76, 113, 1, Os189_Mass + Os189_e1Level_Mass }, -{ "Os191_e1", PoPs_genre_atom, 76, 115, 1, Os191_Mass + Os191_e1Level_Mass }, -{ "Np236_e2", PoPs_genre_atom, 93, 143, 2, Np236_Mass + Np236_e2Level_Mass }, - - { "Al26_e1", PoPs_genre_atom, 27, 31, 1, Al26_Mass + Al26_e1Level_Mass }, - { "Cl34_e1", PoPs_genre_atom, 27, 31, 1, Cl34_Mass + Cl34_e1Level_Mass }, - { "Co58_e1", PoPs_genre_atom, 27, 31, 1, Co58_Mass + Co58_e1Level_Mass }, - { "Ag110_e2", PoPs_genre_atom, 47, 63, 2, Ag110_Mass + Ag110_e2Level_Mass }, - { "Cd115_e1", PoPs_genre_atom, 48, 67, 1, Cd115_Mass + Cd115_e1Level_Mass }, - { "Te127_e2", PoPs_genre_atom, 52, 75, 2, Te127_Mass + Te127_e2Level_Mass }, - { "Te129_e1", PoPs_genre_atom, 52, 77, 1, Te129_Mass + Te129_e1Level_Mass }, - { "Pm148_e2", PoPs_genre_atom, 61, 87, 2, Pm148_Mass + Pm148_e2Level_Mass }, - { "Ho166_e1", PoPs_genre_atom, 67, 99, 1, Ho166_Mass + Ho166_e1Level_Mass }, - { "Am242_e2", PoPs_genre_atom, 95, 147, 2, Am242_Mass + Am242_e2Level_Mass }, - { "Am244_e1", PoPs_genre_atom, 95, 149, 1, Am244_Mass + Am244_e1Level_Mass }, - { "Es254_e2", PoPs_genre_atom, 99, 155, 2, Es254_Mass + Es254_e2Level_Mass }, -/* Mass data from LLNL's bdfls file. */ - { "FissionProductENDL99120", PoPs_genre_atom, 99, 21, 0, 117.5 }, - { "FissionProductENDL99121", PoPs_genre_atom, 99, 22, 0, 116.546 }, - { "FissionProductENDL99122", PoPs_genre_atom, 99, 23, 0, 118.544 }, - { "FissionProductENDL99125", PoPs_genre_atom, 99, 26, 0, 117.5 }, -/* Mass data from ?. */ - { "photon", PoPs_genre_photon, 0, 0, 0, 0. }, - { "e-", PoPs_genre_lepton, 0, 0, 0, e_Mass }, - { "e+", PoPs_genre_lepton, 0, 0, 0, e_Mass }, -/* The rest are mass data from Wadi, et al 2003. */ - { "n", PoPs_genre_baryon, 0, 1, 0, 1.00866491574e+00 }, - { "p", PoPs_genre_baryon, 1, 0, 0, 1.007276466812e+00 }, - { "h2", PoPs_genre_nucleus, 1, 1, 0, 2.01355321271e+00 }, - { "h3", PoPs_genre_nucleus, 1, 2, 0, 3.015500713e+00 }, - { "he3", PoPs_genre_nucleus, 2, 1, 0, 3.01493223469e+00 }, - { "he4", PoPs_genre_nucleus, 2, 2, 0, 4.0015061747e+00 }, - { "H_natural", PoPs_genre_atom, 1, -1, 0, 1.0079e+00 }, - { "H1", PoPs_genre_atom, 1, 0, 0, 1.00782503207e+00 }, - { "H2", PoPs_genre_atom, 1, 1, 0, 2.01410177785e+00 }, - { "H3", PoPs_genre_atom, 1, 2, 0, 3.01604927767e+00 }, - { "H4", PoPs_genre_atom, 1, 3, 0, 4.027806424e+00 }, - { "H5", PoPs_genre_atom, 1, 4, 0, 5.035311488e+00 }, - { "H6", PoPs_genre_atom, 1, 5, 0, 6.044942594e+00 }, - { "H7", PoPs_genre_atom, 1, 6, 0, 7.052749e+00 }, - { "He_natural", PoPs_genre_atom, 2, -1, 0, 4.0026e+00 }, - { "He3", PoPs_genre_atom, 2, 1, 0, 3.01602931914e+00 }, - { "He4", PoPs_genre_atom, 2, 2, 0, 4.00260325415e+00 }, - { "He5", PoPs_genre_atom, 2, 3, 0, 5.012223624e+00 }, - { "He6", PoPs_genre_atom, 2, 4, 0, 6.018889124e+00 }, - { "He7", PoPs_genre_atom, 2, 5, 0, 7.028020618e+00 }, - { "He8", PoPs_genre_atom, 2, 6, 0, 8.033921897e+00 }, - { "He9", PoPs_genre_atom, 2, 7, 0, 9.043950286e+00 }, - { "He10", PoPs_genre_atom, 2, 8, 0, 1.0052398837e+01 }, - { "Li_natural", PoPs_genre_atom, 3, -1, 0, 6.941e+00 }, - { "Li3", PoPs_genre_atom, 3, 0, 0, 3.030775e+00 }, - { "Li4", PoPs_genre_atom, 3, 1, 0, 4.027185558e+00 }, - { "Li5", PoPs_genre_atom, 3, 2, 0, 5.0125378e+00 }, - { "Li6", PoPs_genre_atom, 3, 3, 0, 6.015122794e+00 }, - { "Li7", PoPs_genre_atom, 3, 4, 0, 7.016004548e+00 }, - { "Li8", PoPs_genre_atom, 3, 5, 0, 8.022487362e+00 }, - { "Li9", PoPs_genre_atom, 3, 6, 0, 9.026789505e+00 }, - { "Li10", PoPs_genre_atom, 3, 7, 0, 1.0035481259e+01 }, - { "Li11", PoPs_genre_atom, 3, 8, 0, 1.1043797715e+01 }, - { "Li12", PoPs_genre_atom, 3, 9, 0, 1.205378e+01 }, - { "Be_natural", PoPs_genre_atom, 4, -1, 0, 9.01218e+00 }, - { "Be5", PoPs_genre_atom, 4, 1, 0, 5.04079e+00 }, - { "Be6", PoPs_genre_atom, 4, 2, 0, 6.019726317e+00 }, - { "Be7", PoPs_genre_atom, 4, 3, 0, 7.016929828e+00 }, - { "Be8", PoPs_genre_atom, 4, 4, 0, 8.005305103e+00 }, - { "Be9", PoPs_genre_atom, 4, 5, 0, 9.012182201e+00 }, - { "Be10", PoPs_genre_atom, 4, 6, 0, 1.0013533818e+01 }, - { "Be11", PoPs_genre_atom, 4, 7, 0, 1.1021657749e+01 }, - { "Be12", PoPs_genre_atom, 4, 8, 0, 1.2026920737e+01 }, - { "Be13", PoPs_genre_atom, 4, 9, 0, 1.3035693007e+01 }, - { "Be14", PoPs_genre_atom, 4, 10, 0, 1.404289292e+01 }, - { "Be15", PoPs_genre_atom, 4, 11, 0, 1.505346e+01 }, - { "Be16", PoPs_genre_atom, 4, 12, 0, 1.606192e+01 }, - { "B_natural", PoPs_genre_atom, 5, -1, 0, 1.081e+01 }, - { "B6", PoPs_genre_atom, 5, 1, 0, 6.04681e+00 }, - { "B7", PoPs_genre_atom, 5, 2, 0, 7.029917901e+00 }, - { "B8", PoPs_genre_atom, 5, 3, 0, 8.024607233e+00 }, - { "B9", PoPs_genre_atom, 5, 4, 0, 9.013328782e+00 }, - { "B10", PoPs_genre_atom, 5, 5, 0, 1.0012936992e+01 }, - { "B11", PoPs_genre_atom, 5, 6, 0, 1.1009305406e+01 }, - { "B12", PoPs_genre_atom, 5, 7, 0, 1.2014352104e+01 }, - { "B13", PoPs_genre_atom, 5, 8, 0, 1.3017780217e+01 }, - { "B14", PoPs_genre_atom, 5, 9, 0, 1.4025404009e+01 }, - { "B15", PoPs_genre_atom, 5, 10, 0, 1.5031103021e+01 }, - { "B16", PoPs_genre_atom, 5, 11, 0, 1.6039808829e+01 }, - { "B17", PoPs_genre_atom, 5, 12, 0, 1.7046989906e+01 }, - { "B18", PoPs_genre_atom, 5, 13, 0, 1.805617e+01 }, - { "B19", PoPs_genre_atom, 5, 14, 0, 1.906373e+01 }, - { "C_natural", PoPs_genre_atom, 6, -1, 0, 1.2011e+01 }, - { "C8", PoPs_genre_atom, 6, 2, 0, 8.037675025e+00 }, - { "C9", PoPs_genre_atom, 6, 3, 0, 9.031036689e+00 }, - { "C10", PoPs_genre_atom, 6, 4, 0, 1.0016853228e+01 }, - { "C11", PoPs_genre_atom, 6, 5, 0, 1.1011433613e+01 }, - { "C12", PoPs_genre_atom, 6, 6, 0, 1.2e+01 }, - { "C13", PoPs_genre_atom, 6, 7, 0, 1.300335483778e+01 }, - { "C14", PoPs_genre_atom, 6, 8, 0, 1.40032419887e+01 }, - { "C15", PoPs_genre_atom, 6, 9, 0, 1.5010599256e+01 }, - { "C16", PoPs_genre_atom, 6, 10, 0, 1.6014701252e+01 }, - { "C17", PoPs_genre_atom, 6, 11, 0, 1.7022586116e+01 }, - { "C18", PoPs_genre_atom, 6, 12, 0, 1.8026759354e+01 }, - { "C19", PoPs_genre_atom, 6, 13, 0, 1.9034805018e+01 }, - { "C20", PoPs_genre_atom, 6, 14, 0, 2.0040319754e+01 }, - { "C21", PoPs_genre_atom, 6, 15, 0, 2.104934e+01 }, - { "C23", PoPs_genre_atom, 6, 17, 0, 2.20572e+01 }, - { "N_natural", PoPs_genre_atom, 7, -1, 0, 1.40067e+01 }, - { "N10", PoPs_genre_atom, 7, 3, 0, 1.0041653674e+01 }, - { "N11", PoPs_genre_atom, 7, 4, 0, 1.1026090956e+01 }, - { "N12", PoPs_genre_atom, 7, 5, 0, 1.2018613197e+01 }, - { "N13", PoPs_genre_atom, 7, 6, 0, 1.3005738609e+01 }, - { "N14", PoPs_genre_atom, 7, 7, 0, 1.400307400478e+01 }, - { "N15", PoPs_genre_atom, 7, 8, 0, 1.500010889823e+01 }, - { "N16", PoPs_genre_atom, 7, 9, 0, 1.6006101658e+01 }, - { "N17", PoPs_genre_atom, 7, 10, 0, 1.7008450261e+01 }, - { "N18", PoPs_genre_atom, 7, 11, 0, 1.8014078959e+01 }, - { "N19", PoPs_genre_atom, 7, 12, 0, 1.9017028697e+01 }, - { "N20", PoPs_genre_atom, 7, 13, 0, 2.0023365807e+01 }, - { "N21", PoPs_genre_atom, 7, 14, 0, 2.102710824e+01 }, - { "N22", PoPs_genre_atom, 7, 15, 0, 2.2034394934e+01 }, - { "N23", PoPs_genre_atom, 7, 16, 0, 2.304122e+01 }, - { "N24", PoPs_genre_atom, 7, 17, 0, 2.405104e+01 }, - { "N25", PoPs_genre_atom, 7, 18, 0, 2.506066e+01 }, - { "O_natural", PoPs_genre_atom, 8, -1, 0, 1.59994e+01 }, - { "O12", PoPs_genre_atom, 8, 4, 0, 1.2034404895e+01 }, - { "O13", PoPs_genre_atom, 8, 5, 0, 1.3024812213e+01 }, - { "O14", PoPs_genre_atom, 8, 6, 0, 1.400859625e+01 }, - { "O15", PoPs_genre_atom, 8, 7, 0, 1.5003065617e+01 }, - { "O16", PoPs_genre_atom, 8, 8, 0, 1.599491461956e+01 }, - { "O17", PoPs_genre_atom, 8, 9, 0, 1.6999131703e+01 }, - { "O18", PoPs_genre_atom, 8, 10, 0, 1.7999161001e+01 }, - { "O19", PoPs_genre_atom, 8, 11, 0, 1.900358013e+01 }, - { "O20", PoPs_genre_atom, 8, 12, 0, 2.0004076742e+01 }, - { "O21", PoPs_genre_atom, 8, 13, 0, 2.1008655886e+01 }, - { "O22", PoPs_genre_atom, 8, 14, 0, 2.2009966947e+01 }, - { "O23", PoPs_genre_atom, 8, 15, 0, 2.3015687659e+01 }, - { "O24", PoPs_genre_atom, 8, 16, 0, 2.4020472917e+01 }, - { "O25", PoPs_genre_atom, 8, 17, 0, 2.502946e+01 }, - { "O26", PoPs_genre_atom, 8, 18, 0, 2.603834e+01 }, - { "O27", PoPs_genre_atom, 8, 19, 0, 2.704826e+01 }, - { "O28", PoPs_genre_atom, 8, 20, 0, 2.805781e+01 }, - { "F_natural", PoPs_genre_atom, 9, -1, 0, 1.8998403e+01 }, - { "F14", PoPs_genre_atom, 9, 5, 0, 1.403506e+01 }, - { "F15", PoPs_genre_atom, 9, 6, 0, 1.5018009103e+01 }, - { "F16", PoPs_genre_atom, 9, 7, 0, 1.6011465724e+01 }, - { "F17", PoPs_genre_atom, 9, 8, 0, 1.7002095237e+01 }, - { "F18", PoPs_genre_atom, 9, 9, 0, 1.8000937956e+01 }, - { "F19", PoPs_genre_atom, 9, 10, 0, 1.8998403224e+01 }, - { "F20", PoPs_genre_atom, 9, 11, 0, 1.9999981315e+01 }, - { "F21", PoPs_genre_atom, 9, 12, 0, 2.0999948951e+01 }, - { "F22", PoPs_genre_atom, 9, 13, 0, 2.2002998815e+01 }, - { "F23", PoPs_genre_atom, 9, 14, 0, 2.3003574631e+01 }, - { "F24", PoPs_genre_atom, 9, 15, 0, 2.4008115485e+01 }, - { "F25", PoPs_genre_atom, 9, 16, 0, 2.5012101747e+01 }, - { "F26", PoPs_genre_atom, 9, 17, 0, 2.6019615555e+01 }, - { "F27", PoPs_genre_atom, 9, 18, 0, 2.7026760086e+01 }, - { "F28", PoPs_genre_atom, 9, 19, 0, 2.803567e+01 }, - { "F29", PoPs_genre_atom, 9, 20, 0, 2.904326e+01 }, - { "F30", PoPs_genre_atom, 9, 21, 0, 3.00525e+01 }, - { "F31", PoPs_genre_atom, 9, 22, 0, 3.1060429e+01 }, - { "Ne_natural", PoPs_genre_atom, 10, -1, 0, 2.0179e+01 }, - { "Ne16", PoPs_genre_atom, 10, 6, 0, 1.6025761262e+01 }, - { "Ne17", PoPs_genre_atom, 10, 7, 0, 1.7017671504e+01 }, - { "Ne18", PoPs_genre_atom, 10, 8, 0, 1.8005708213e+01 }, - { "Ne19", PoPs_genre_atom, 10, 9, 0, 1.9001880248e+01 }, - { "Ne20", PoPs_genre_atom, 10, 10, 0, 1.999244017542e+01 }, - { "Ne21", PoPs_genre_atom, 10, 11, 0, 2.0993846684e+01 }, - { "Ne22", PoPs_genre_atom, 10, 12, 0, 2.1991385113e+01 }, - { "Ne23", PoPs_genre_atom, 10, 13, 0, 2.2994466904e+01 }, - { "Ne24", PoPs_genre_atom, 10, 14, 0, 2.3993610779e+01 }, - { "Ne25", PoPs_genre_atom, 10, 15, 0, 2.4997736888e+01 }, - { "Ne26", PoPs_genre_atom, 10, 16, 0, 2.6000461206e+01 }, - { "Ne27", PoPs_genre_atom, 10, 17, 0, 2.7007589903e+01 }, - { "Ne28", PoPs_genre_atom, 10, 18, 0, 2.8012071575e+01 }, - { "Ne29", PoPs_genre_atom, 10, 19, 0, 2.9019385933e+01 }, - { "Ne30", PoPs_genre_atom, 10, 20, 0, 3.0024801045e+01 }, - { "Ne31", PoPs_genre_atom, 10, 21, 0, 3.103311e+01 }, - { "Ne32", PoPs_genre_atom, 10, 22, 0, 3.204002e+01 }, - { "Ne33", PoPs_genre_atom, 10, 23, 0, 3.304938e+01 }, - { "Ne34", PoPs_genre_atom, 10, 24, 0, 3.4057028e+01 }, - { "Na_natural", PoPs_genre_atom, 11, -1, 0, 2.298977e+01 }, - { "Na18", PoPs_genre_atom, 11, 7, 0, 1.8025969e+01 }, - { "Na19", PoPs_genre_atom, 11, 8, 0, 1.9013877499e+01 }, - { "Na20", PoPs_genre_atom, 11, 9, 0, 2.0007351328e+01 }, - { "Na21", PoPs_genre_atom, 11, 10, 0, 2.0997655206e+01 }, - { "Na22", PoPs_genre_atom, 11, 11, 0, 2.1994436425e+01 }, - { "Na23", PoPs_genre_atom, 11, 12, 0, 2.298976928087e+01 }, - { "Na24", PoPs_genre_atom, 11, 13, 0, Na24_Mass }, - { "Na25", PoPs_genre_atom, 11, 14, 0, 2.4989953968e+01 }, - { "Na26", PoPs_genre_atom, 11, 15, 0, 2.5992633e+01 }, - { "Na27", PoPs_genre_atom, 11, 16, 0, 2.6994076788e+01 }, - { "Na28", PoPs_genre_atom, 11, 17, 0, 2.7998938e+01 }, - { "Na29", PoPs_genre_atom, 11, 18, 0, 2.9002861e+01 }, - { "Na30", PoPs_genre_atom, 11, 19, 0, 3.0008976e+01 }, - { "Na31", PoPs_genre_atom, 11, 20, 0, 3.1013585452e+01 }, - { "Na32", PoPs_genre_atom, 11, 21, 0, 3.202046656e+01 }, - { "Na33", PoPs_genre_atom, 11, 22, 0, 3.3026719756e+01 }, - { "Na34", PoPs_genre_atom, 11, 23, 0, 3.403517e+01 }, - { "Na35", PoPs_genre_atom, 11, 24, 0, 3.5042493e+01 }, - { "Na36", PoPs_genre_atom, 11, 25, 0, 3.605148e+01 }, - { "Na37", PoPs_genre_atom, 11, 26, 0, 3.705934e+01 }, - { "Mg_natural", PoPs_genre_atom, 12, -1, 0, 2.4305e+01 }, - { "Mg18", PoPs_genre_atom, 12, 6, 0, 1.80470024124726e+01 }, /* From ENDF/B-VII.1 'gamma + Mg24'. */ - { "Mg19", PoPs_genre_atom, 12, 7, 0, 1.903547e+01 }, - { "Mg20", PoPs_genre_atom, 12, 8, 0, 2.0018862545e+01 }, - { "Mg21", PoPs_genre_atom, 12, 9, 0, 2.101171291e+01 }, - { "Mg22", PoPs_genre_atom, 12, 10, 0, 2.1999573843e+01 }, - { "Mg23", PoPs_genre_atom, 12, 11, 0, 2.2994123669e+01 }, - { "Mg24", PoPs_genre_atom, 12, 12, 0, 2.3985041699e+01 }, - { "Mg25", PoPs_genre_atom, 12, 13, 0, 2.4985836917e+01 }, - { "Mg26", PoPs_genre_atom, 12, 14, 0, 2.5982592929e+01 }, - { "Mg27", PoPs_genre_atom, 12, 15, 0, 2.6984340585e+01 }, - { "Mg28", PoPs_genre_atom, 12, 16, 0, 2.7983876825e+01 }, - { "Mg29", PoPs_genre_atom, 12, 17, 0, 2.89886e+01 }, - { "Mg30", PoPs_genre_atom, 12, 18, 0, 2.9990434e+01 }, - { "Mg31", PoPs_genre_atom, 12, 19, 0, 3.0996546e+01 }, - { "Mg32", PoPs_genre_atom, 12, 20, 0, 3.1998975e+01 }, - { "Mg33", PoPs_genre_atom, 12, 21, 0, 3.3005254e+01 }, - { "Mg34", PoPs_genre_atom, 12, 22, 0, 3.4009456424e+01 }, - { "Mg35", PoPs_genre_atom, 12, 23, 0, 3.501734e+01 }, - { "Mg36", PoPs_genre_atom, 12, 24, 0, 3.6023e+01 }, - { "Mg37", PoPs_genre_atom, 12, 25, 0, 3.70314e+01 }, - { "Mg38", PoPs_genre_atom, 12, 26, 0, 3.803757e+01 }, - { "Mg39", PoPs_genre_atom, 12, 27, 0, 3.9046772e+01 }, - { "Mg40", PoPs_genre_atom, 12, 28, 0, 4.005393e+01 }, - { "Al_natural", PoPs_genre_atom, 13, -1, 0, 2.698154e+01 }, - { "Al21", PoPs_genre_atom, 13, 8, 0, 2.102804e+01 }, - { "Al22", PoPs_genre_atom, 13, 9, 0, 2.201952e+01 }, - { "Al23", PoPs_genre_atom, 13, 10, 0, 2.3007267432e+01 }, - { "Al24", PoPs_genre_atom, 13, 11, 0, 2.3999938865e+01 }, - { "Al25", PoPs_genre_atom, 13, 12, 0, 2.4990428095e+01 }, - { "Al26", PoPs_genre_atom, 13, 13, 0, 2.5986891692e+01 }, - { "Al27", PoPs_genre_atom, 13, 14, 0, 2.6981538627e+01 }, - { "Al28", PoPs_genre_atom, 13, 15, 0, 2.7981910306e+01 }, - { "Al29", PoPs_genre_atom, 13, 16, 0, 2.8980445046e+01 }, - { "Al30", PoPs_genre_atom, 13, 17, 0, 2.9982960256e+01 }, - { "Al31", PoPs_genre_atom, 13, 18, 0, 3.0983946619e+01 }, - { "Al32", PoPs_genre_atom, 13, 19, 0, 3.1988124489e+01 }, - { "Al33", PoPs_genre_atom, 13, 20, 0, 3.2990843336e+01 }, - { "Al34", PoPs_genre_atom, 13, 21, 0, 3.3996851837e+01 }, - { "Al35", PoPs_genre_atom, 13, 22, 0, 3.4999860235e+01 }, - { "Al36", PoPs_genre_atom, 13, 23, 0, 3.6006207204e+01 }, - { "Al37", PoPs_genre_atom, 13, 24, 0, 3.701067782e+01 }, - { "Al38", PoPs_genre_atom, 13, 25, 0, 3.8017231021e+01 }, - { "Al39", PoPs_genre_atom, 13, 26, 0, 3.902297e+01 }, - { "Al40", PoPs_genre_atom, 13, 27, 0, 4.003145e+01 }, - { "Al41", PoPs_genre_atom, 13, 28, 0, 4.103833e+01 }, - { "Al42", PoPs_genre_atom, 13, 29, 0, 4.204689e+01 }, - { "Si_natural", PoPs_genre_atom, 14, -1, 0, 2.80855e+01 }, - { "Si22", PoPs_genre_atom, 14, 8, 0, 2.203453e+01 }, - { "Si23", PoPs_genre_atom, 14, 9, 0, 2.302552e+01 }, - { "Si24", PoPs_genre_atom, 14, 10, 0, 2.4011545616e+01 }, - { "Si25", PoPs_genre_atom, 14, 11, 0, 2.5004105574e+01 }, - { "Si26", PoPs_genre_atom, 14, 12, 0, 2.5992329921e+01 }, - { "Si27", PoPs_genre_atom, 14, 13, 0, 2.6986704905e+01 }, - { "Si28", PoPs_genre_atom, 14, 14, 0, 2.797692653246e+01 }, - { "Si29", PoPs_genre_atom, 14, 15, 0, 2.89764947e+01 }, - { "Si30", PoPs_genre_atom, 14, 16, 0, 2.9973770171e+01 }, - { "Si31", PoPs_genre_atom, 14, 17, 0, 3.0975363227e+01 }, - { "Si32", PoPs_genre_atom, 14, 18, 0, 3.1974148082e+01 }, - { "Si33", PoPs_genre_atom, 14, 19, 0, 3.297800022e+01 }, - { "Si34", PoPs_genre_atom, 14, 20, 0, 3.3978575524e+01 }, - { "Si35", PoPs_genre_atom, 14, 21, 0, 3.4984583575e+01 }, - { "Si36", PoPs_genre_atom, 14, 22, 0, 3.5986599477e+01 }, - { "Si37", PoPs_genre_atom, 14, 23, 0, 3.699293608e+01 }, - { "Si38", PoPs_genre_atom, 14, 24, 0, 3.7995633601e+01 }, - { "Si39", PoPs_genre_atom, 14, 25, 0, 3.9002070013e+01 }, - { "Si40", PoPs_genre_atom, 14, 26, 0, 4.0005869121e+01 }, - { "Si41", PoPs_genre_atom, 14, 27, 0, 4.101456e+01 }, - { "Si42", PoPs_genre_atom, 14, 28, 0, 4.201979e+01 }, - { "Si43", PoPs_genre_atom, 14, 29, 0, 4.302866e+01 }, - { "Si44", PoPs_genre_atom, 14, 30, 0, 4.403526e+01 }, - { "P_natural", PoPs_genre_atom, 15, -1, 0, 3.097376e+01 }, - { "P24", PoPs_genre_atom, 15, 9, 0, 2.403435e+01 }, - { "P25", PoPs_genre_atom, 15, 10, 0, 2.502026e+01 }, - { "P26", PoPs_genre_atom, 15, 11, 0, 2.601178e+01 }, - { "P27", PoPs_genre_atom, 15, 12, 0, 2.6999230236e+01 }, - { "P28", PoPs_genre_atom, 15, 13, 0, 2.7992314761e+01 }, - { "P29", PoPs_genre_atom, 15, 14, 0, 2.8981800606e+01 }, - { "P30", PoPs_genre_atom, 15, 15, 0, 2.9978313789e+01 }, - { "P31", PoPs_genre_atom, 15, 16, 0, 3.0973761629e+01 }, - { "P32", PoPs_genre_atom, 15, 17, 0, 3.1973907274e+01 }, - { "P33", PoPs_genre_atom, 15, 18, 0, 3.2971725543e+01 }, - { "P34", PoPs_genre_atom, 15, 19, 0, 3.3973636257e+01 }, - { "P35", PoPs_genre_atom, 15, 20, 0, 3.4973314117e+01 }, - { "P36", PoPs_genre_atom, 15, 21, 0, 3.597825968e+01 }, - { "P37", PoPs_genre_atom, 15, 22, 0, 3.6979608946e+01 }, - { "P38", PoPs_genre_atom, 15, 23, 0, 3.7984156827e+01 }, - { "P39", PoPs_genre_atom, 15, 24, 0, 3.8986179475e+01 }, - { "P40", PoPs_genre_atom, 15, 25, 0, 3.9991296951e+01 }, - { "P41", PoPs_genre_atom, 15, 26, 0, 4.0994335435e+01 }, - { "P42", PoPs_genre_atom, 15, 27, 0, 4.2001007913e+01 }, - { "P43", PoPs_genre_atom, 15, 28, 0, 4.300619e+01 }, - { "P44", PoPs_genre_atom, 15, 29, 0, 4.401299e+01 }, - { "P45", PoPs_genre_atom, 15, 30, 0, 4.501922e+01 }, - { "P46", PoPs_genre_atom, 15, 31, 0, 4.602738e+01 }, - { "S_natural", PoPs_genre_atom, 16, -1, 0, 3.206e+01 }, - { "S26", PoPs_genre_atom, 16, 10, 0, 2.602788e+01 }, - { "S27", PoPs_genre_atom, 16, 11, 0, 2.7018833e+01 }, - { "S28", PoPs_genre_atom, 16, 12, 0, 2.8004372763e+01 }, - { "S29", PoPs_genre_atom, 16, 13, 0, 2.8996608049e+01 }, - { "S30", PoPs_genre_atom, 16, 14, 0, 2.9984903249e+01 }, - { "S31", PoPs_genre_atom, 16, 15, 0, 3.0979554728e+01 }, - { "S32", PoPs_genre_atom, 16, 16, 0, 3.1972070999e+01 }, - { "S33", PoPs_genre_atom, 16, 17, 0, 3.2971458759e+01 }, - { "S34", PoPs_genre_atom, 16, 18, 0, 3.3967866902e+01 }, - { "S35", PoPs_genre_atom, 16, 19, 0, 3.4969032161e+01 }, - { "S36", PoPs_genre_atom, 16, 20, 0, 3.596708076e+01 }, - { "S37", PoPs_genre_atom, 16, 21, 0, 3.6971125567e+01 }, - { "S38", PoPs_genre_atom, 16, 22, 0, 3.7971163317e+01 }, - { "S39", PoPs_genre_atom, 16, 23, 0, 3.8975134306e+01 }, - { "S40", PoPs_genre_atom, 16, 24, 0, 3.9975451728e+01 }, - { "S41", PoPs_genre_atom, 16, 25, 0, 4.0979582149e+01 }, - { "S42", PoPs_genre_atom, 16, 26, 0, 4.1981022419e+01 }, - { "S43", PoPs_genre_atom, 16, 27, 0, 4.298715479e+01 }, - { "S44", PoPs_genre_atom, 16, 28, 0, 4.399021339e+01 }, - { "S45", PoPs_genre_atom, 16, 29, 0, 4.4996508112e+01 }, - { "S46", PoPs_genre_atom, 16, 30, 0, 4.600075e+01 }, - { "S47", PoPs_genre_atom, 16, 31, 0, 4.700859e+01 }, - { "S48", PoPs_genre_atom, 16, 32, 0, 4.801417e+01 }, - { "S49", PoPs_genre_atom, 16, 33, 0, 4.9023619e+01 }, - { "Cl_natural", PoPs_genre_atom, 17, -1, 0, 3.5453e+01 }, - { "Cl28", PoPs_genre_atom, 17, 11, 0, 2.802851e+01 }, - { "Cl29", PoPs_genre_atom, 17, 12, 0, 2.901411e+01 }, - { "Cl30", PoPs_genre_atom, 17, 13, 0, 3.000477e+01 }, - { "Cl31", PoPs_genre_atom, 17, 14, 0, 3.0992413086e+01 }, - { "Cl32", PoPs_genre_atom, 17, 15, 0, 3.1985689901e+01 }, - { "Cl33", PoPs_genre_atom, 17, 16, 0, 3.2977451887e+01 }, - { "Cl34", PoPs_genre_atom, 17, 17, 0, Cl34_Mass }, - { "Cl35", PoPs_genre_atom, 17, 18, 0, 3.4968852682e+01 }, - { "Cl36", PoPs_genre_atom, 17, 19, 0, 3.5968306981e+01 }, - { "Cl37", PoPs_genre_atom, 17, 20, 0, 3.6965902591e+01 }, - { "Cl38", PoPs_genre_atom, 17, 21, 0, 3.7968010425e+01 }, - { "Cl39", PoPs_genre_atom, 17, 22, 0, 3.8968008164e+01 }, - { "Cl40", PoPs_genre_atom, 17, 23, 0, 3.9970415472e+01 }, - { "Cl41", PoPs_genre_atom, 17, 24, 0, 4.0970684525e+01 }, - { "Cl42", PoPs_genre_atom, 17, 25, 0, 4.1973254804e+01 }, - { "Cl43", PoPs_genre_atom, 17, 26, 0, 4.2974054403e+01 }, - { "Cl44", PoPs_genre_atom, 17, 27, 0, 4.3978281071e+01 }, - { "Cl45", PoPs_genre_atom, 17, 28, 0, 4.4980286886e+01 }, - { "Cl46", PoPs_genre_atom, 17, 29, 0, 4.598421004e+01 }, - { "Cl47", PoPs_genre_atom, 17, 30, 0, 4.698871e+01 }, - { "Cl48", PoPs_genre_atom, 17, 31, 0, 4.799495e+01 }, - { "Cl49", PoPs_genre_atom, 17, 32, 0, 4.900032e+01 }, - { "Cl50", PoPs_genre_atom, 17, 33, 0, 5.000784e+01 }, - { "Cl51", PoPs_genre_atom, 17, 34, 0, 5.101449e+01 }, - { "Ar_natural", PoPs_genre_atom, 18, -1, 0, 3.9948e+01 }, - { "Ar30", PoPs_genre_atom, 18, 12, 0, 3.002156e+01 }, - { "Ar31", PoPs_genre_atom, 18, 13, 0, 3.1012123e+01 }, - { "Ar32", PoPs_genre_atom, 18, 14, 0, 3.1997637984e+01 }, - { "Ar33", PoPs_genre_atom, 18, 15, 0, 3.2989925709e+01 }, - { "Ar34", PoPs_genre_atom, 18, 16, 0, 3.3980271244e+01 }, - { "Ar35", PoPs_genre_atom, 18, 17, 0, 3.4975257585e+01 }, - { "Ar36", PoPs_genre_atom, 18, 18, 0, 3.5967545105e+01 }, - { "Ar37", PoPs_genre_atom, 18, 19, 0, 3.696677632e+01 }, - { "Ar38", PoPs_genre_atom, 18, 20, 0, 3.7962732394e+01 }, - { "Ar39", PoPs_genre_atom, 18, 21, 0, 3.8964313231e+01 }, - { "Ar40", PoPs_genre_atom, 18, 22, 0, 3.996238312251e+01 }, - { "Ar41", PoPs_genre_atom, 18, 23, 0, 4.0964500611e+01 }, - { "Ar42", PoPs_genre_atom, 18, 24, 0, 4.1963045736e+01 }, - { "Ar43", PoPs_genre_atom, 18, 25, 0, 4.2965636056e+01 }, - { "Ar44", PoPs_genre_atom, 18, 26, 0, 4.3964924033e+01 }, - { "Ar45", PoPs_genre_atom, 18, 27, 0, 4.4968039956e+01 }, - { "Ar46", PoPs_genre_atom, 18, 28, 0, 4.5968094129e+01 }, - { "Ar47", PoPs_genre_atom, 18, 29, 0, 4.6972186792e+01 }, - { "Ar48", PoPs_genre_atom, 18, 30, 0, 4.797454e+01 }, - { "Ar49", PoPs_genre_atom, 18, 31, 0, 4.898052e+01 }, - { "Ar50", PoPs_genre_atom, 18, 32, 0, 4.998443e+01 }, - { "Ar51", PoPs_genre_atom, 18, 33, 0, 5.099163e+01 }, - { "Ar52", PoPs_genre_atom, 18, 34, 0, 5.199678e+01 }, - { "Ar53", PoPs_genre_atom, 18, 35, 0, 5.300494e+01 }, - { "K_natural", PoPs_genre_atom, 19, -1, 0, 3.90983e+01 }, - { "K32", PoPs_genre_atom, 19, 13, 0, 3.202192e+01 }, - { "K33", PoPs_genre_atom, 19, 14, 0, 3.300726e+01 }, - { "K34", PoPs_genre_atom, 19, 15, 0, 3.399841e+01 }, - { "K35", PoPs_genre_atom, 19, 16, 0, 3.4988009692e+01 }, - { "K36", PoPs_genre_atom, 19, 17, 0, 3.5981292235e+01 }, - { "K37", PoPs_genre_atom, 19, 18, 0, 3.6973375889e+01 }, - { "K38", PoPs_genre_atom, 19, 19, 0, 3.7969081184e+01 }, - { "K39", PoPs_genre_atom, 19, 20, 0, 3.8963706679e+01 }, - { "K40", PoPs_genre_atom, 19, 21, 0, 3.9963998475e+01 }, - { "K41", PoPs_genre_atom, 19, 22, 0, 4.0961825762e+01 }, - { "K42", PoPs_genre_atom, 19, 23, 0, 4.196240281e+01 }, - { "K43", PoPs_genre_atom, 19, 24, 0, 4.296071554e+01 }, - { "K44", PoPs_genre_atom, 19, 25, 0, 4.3961556804e+01 }, - { "K45", PoPs_genre_atom, 19, 26, 0, 4.4960699493e+01 }, - { "K46", PoPs_genre_atom, 19, 27, 0, 4.5961976864e+01 }, - { "K47", PoPs_genre_atom, 19, 28, 0, 4.6961678473e+01 }, - { "K48", PoPs_genre_atom, 19, 29, 0, 4.7965513535e+01 }, - { "K49", PoPs_genre_atom, 19, 30, 0, 4.8967450928e+01 }, - { "K50", PoPs_genre_atom, 19, 31, 0, 4.9972783355e+01 }, - { "K51", PoPs_genre_atom, 19, 32, 0, 5.097638e+01 }, - { "K52", PoPs_genre_atom, 19, 33, 0, 5.198261e+01 }, - { "K53", PoPs_genre_atom, 19, 34, 0, 5.298712e+01 }, - { "K54", PoPs_genre_atom, 19, 35, 0, 5.39942e+01 }, - { "K55", PoPs_genre_atom, 19, 36, 0, 5.499971e+01 }, - { "Ca_natural", PoPs_genre_atom, 20, -1, 0, 4.008e+01 }, - { "Ca34", PoPs_genre_atom, 20, 14, 0, 3.401412e+01 }, - { "Ca35", PoPs_genre_atom, 20, 15, 0, 3.500494e+01 }, - { "Ca36", PoPs_genre_atom, 20, 16, 0, 3.5993087063e+01 }, - { "Ca37", PoPs_genre_atom, 20, 17, 0, 3.6985870269e+01 }, - { "Ca38", PoPs_genre_atom, 20, 18, 0, 3.7976318452e+01 }, - { "Ca39", PoPs_genre_atom, 20, 19, 0, 3.8970719725e+01 }, - { "Ca40", PoPs_genre_atom, 20, 20, 0, 3.9962590983e+01 }, - { "Ca41", PoPs_genre_atom, 20, 21, 0, 4.0962278062e+01 }, - { "Ca42", PoPs_genre_atom, 20, 22, 0, 4.1958618014e+01 }, - { "Ca43", PoPs_genre_atom, 20, 23, 0, 4.2958766628e+01 }, - { "Ca44", PoPs_genre_atom, 20, 24, 0, 4.3955481754e+01 }, - { "Ca45", PoPs_genre_atom, 20, 25, 0, 4.4956186566e+01 }, - { "Ca46", PoPs_genre_atom, 20, 26, 0, 4.5953692587e+01 }, - { "Ca47", PoPs_genre_atom, 20, 27, 0, 4.6954546006e+01 }, - { "Ca48", PoPs_genre_atom, 20, 28, 0, 4.7952534177e+01 }, - { "Ca49", PoPs_genre_atom, 20, 29, 0, 4.8955674148e+01 }, - { "Ca50", PoPs_genre_atom, 20, 30, 0, 4.9957518962e+01 }, - { "Ca51", PoPs_genre_atom, 20, 31, 0, 5.0961499214e+01 }, - { "Ca52", PoPs_genre_atom, 20, 32, 0, 5.19651e+01 }, - { "Ca53", PoPs_genre_atom, 20, 33, 0, 5.297005e+01 }, - { "Ca54", PoPs_genre_atom, 20, 34, 0, 5.397435e+01 }, - { "Ca55", PoPs_genre_atom, 20, 35, 0, 5.498055e+01 }, - { "Ca56", PoPs_genre_atom, 20, 36, 0, 5.598557e+01 }, - { "Ca57", PoPs_genre_atom, 20, 37, 0, 5.6992356e+01 }, - { "Sc_natural", PoPs_genre_atom, 21, -1, 0, 4.49559e+01 }, - { "Sc36", PoPs_genre_atom, 21, 15, 0, 3.601492e+01 }, - { "Sc37", PoPs_genre_atom, 21, 16, 0, 3.700305e+01 }, - { "Sc38", PoPs_genre_atom, 21, 17, 0, 3.79947e+01 }, - { "Sc39", PoPs_genre_atom, 21, 18, 0, 3.8984790002e+01 }, - { "Sc40", PoPs_genre_atom, 21, 19, 0, 3.9977967407e+01 }, - { "Sc41", PoPs_genre_atom, 21, 20, 0, 4.0969251125e+01 }, - { "Sc42", PoPs_genre_atom, 21, 21, 0, 4.1965516429e+01 }, - { "Sc43", PoPs_genre_atom, 21, 22, 0, 4.2961150658e+01 }, - { "Sc44", PoPs_genre_atom, 21, 23, 0, 4.3959402752e+01 }, - { "Sc45", PoPs_genre_atom, 21, 24, 0, 4.4955911909e+01 }, - { "Sc46", PoPs_genre_atom, 21, 25, 0, Sc46_Mass }, - { "Sc47", PoPs_genre_atom, 21, 26, 0, 4.6952407508e+01 }, - { "Sc48", PoPs_genre_atom, 21, 27, 0, 4.7952231468e+01 }, - { "Sc49", PoPs_genre_atom, 21, 28, 0, 4.8950023975e+01 }, - { "Sc50", PoPs_genre_atom, 21, 29, 0, 4.9952187685e+01 }, - { "Sc51", PoPs_genre_atom, 21, 30, 0, 5.0953603368e+01 }, - { "Sc52", PoPs_genre_atom, 21, 31, 0, 5.1956675468e+01 }, - { "Sc53", PoPs_genre_atom, 21, 32, 0, 5.295961e+01 }, - { "Sc54", PoPs_genre_atom, 21, 33, 0, 5.3963264561e+01 }, - { "Sc55", PoPs_genre_atom, 21, 34, 0, 5.4968243949e+01 }, - { "Sc56", PoPs_genre_atom, 21, 35, 0, 5.597287e+01 }, - { "Sc57", PoPs_genre_atom, 21, 36, 0, 5.697779e+01 }, - { "Sc58", PoPs_genre_atom, 21, 37, 0, 5.798371e+01 }, - { "Sc59", PoPs_genre_atom, 21, 38, 0, 5.898922e+01 }, - { "Sc60", PoPs_genre_atom, 21, 39, 0, 5.999571e+01 }, - { "Ti_natural", PoPs_genre_atom, 22, -1, 0, 4.79e+01 }, - { "Ti38", PoPs_genre_atom, 22, 16, 0, 3.800977e+01 }, - { "Ti39", PoPs_genre_atom, 22, 17, 0, 3.900161e+01 }, - { "Ti40", PoPs_genre_atom, 22, 18, 0, 3.9990498838e+01 }, - { "Ti41", PoPs_genre_atom, 22, 19, 0, 4.0983145e+01 }, - { "Ti42", PoPs_genre_atom, 22, 20, 0, 4.1973030902e+01 }, - { "Ti43", PoPs_genre_atom, 22, 21, 0, 4.2968522499e+01 }, - { "Ti44", PoPs_genre_atom, 22, 22, 0, 4.3959690069e+01 }, - { "Ti45", PoPs_genre_atom, 22, 23, 0, 4.4958125616e+01 }, - { "Ti46", PoPs_genre_atom, 22, 24, 0, 4.5952631555e+01 }, - { "Ti47", PoPs_genre_atom, 22, 25, 0, 4.6951763088e+01 }, - { "Ti48", PoPs_genre_atom, 22, 26, 0, 4.7947946281e+01 }, - { "Ti49", PoPs_genre_atom, 22, 27, 0, 4.8947869982e+01 }, - { "Ti50", PoPs_genre_atom, 22, 28, 0, 4.9944791194e+01 }, - { "Ti51", PoPs_genre_atom, 22, 29, 0, 5.0946614955e+01 }, - { "Ti52", PoPs_genre_atom, 22, 30, 0, 5.1946897311e+01 }, - { "Ti53", PoPs_genre_atom, 22, 31, 0, 5.2949727171e+01 }, - { "Ti54", PoPs_genre_atom, 22, 32, 0, 5.3951052401e+01 }, - { "Ti55", PoPs_genre_atom, 22, 33, 0, 5.4955265056e+01 }, - { "Ti56", PoPs_genre_atom, 22, 34, 0, 5.5958199639e+01 }, - { "Ti57", PoPs_genre_atom, 22, 35, 0, 5.6963989137e+01 }, - { "Ti58", PoPs_genre_atom, 22, 36, 0, 5.796697e+01 }, - { "Ti59", PoPs_genre_atom, 22, 37, 0, 5.897293e+01 }, - { "Ti60", PoPs_genre_atom, 22, 38, 0, 5.997676e+01 }, - { "Ti61", PoPs_genre_atom, 22, 39, 0, 6.09832e+01 }, - { "Ti62", PoPs_genre_atom, 22, 40, 0, 6.198749e+01 }, - { "Ti63", PoPs_genre_atom, 22, 41, 0, 6.299442e+01 }, - { "V_natural", PoPs_genre_atom, 23, -1, 0, 5.09415e+01 }, - { "V40", PoPs_genre_atom, 23, 17, 0, 4.001109e+01 }, - { "V41", PoPs_genre_atom, 23, 18, 0, 4.099978e+01 }, - { "V42", PoPs_genre_atom, 23, 19, 0, 4.199123e+01 }, - { "V43", PoPs_genre_atom, 23, 20, 0, 4.298065e+01 }, - { "V44", PoPs_genre_atom, 23, 21, 0, 4.397411e+01 }, - { "V45", PoPs_genre_atom, 23, 22, 0, 4.4965775808e+01 }, - { "V46", PoPs_genre_atom, 23, 23, 0, 4.5960200481e+01 }, - { "V47", PoPs_genre_atom, 23, 24, 0, 4.695490894e+01 }, - { "V48", PoPs_genre_atom, 23, 25, 0, 4.7952253707e+01 }, - { "V49", PoPs_genre_atom, 23, 26, 0, 4.8948516101e+01 }, - { "V50", PoPs_genre_atom, 23, 27, 0, 4.9947158485e+01 }, - { "V51", PoPs_genre_atom, 23, 28, 0, 5.0943959507e+01 }, - { "V52", PoPs_genre_atom, 23, 29, 0, 5.1944775479e+01 }, - { "V53", PoPs_genre_atom, 23, 30, 0, 5.2944337979e+01 }, - { "V54", PoPs_genre_atom, 23, 31, 0, 5.3946439854e+01 }, - { "V55", PoPs_genre_atom, 23, 32, 0, 5.4947233701e+01 }, - { "V56", PoPs_genre_atom, 23, 33, 0, 5.5950530966e+01 }, - { "V57", PoPs_genre_atom, 23, 34, 0, 5.6952561432e+01 }, - { "V58", PoPs_genre_atom, 23, 35, 0, 5.7956834136e+01 }, - { "V59", PoPs_genre_atom, 23, 36, 0, 5.8960207407e+01 }, - { "V60", PoPs_genre_atom, 23, 37, 0, 5.9965026862e+01 }, - { "V61", PoPs_genre_atom, 23, 38, 0, 6.096848e+01 }, - { "V62", PoPs_genre_atom, 23, 39, 0, 6.197378e+01 }, - { "V63", PoPs_genre_atom, 23, 40, 0, 6.297755e+01 }, - { "V64", PoPs_genre_atom, 23, 41, 0, 6.398347e+01 }, - { "V65", PoPs_genre_atom, 23, 42, 0, 6.498792e+01 }, - { "Cr_natural", PoPs_genre_atom, 24, -1, 0, 5.1996e+01 }, - { "Cr42", PoPs_genre_atom, 24, 18, 0, 4.200643e+01 }, - { "Cr43", PoPs_genre_atom, 24, 19, 0, 4.299771e+01 }, - { "Cr44", PoPs_genre_atom, 24, 20, 0, 4.3985549e+01 }, - { "Cr45", PoPs_genre_atom, 24, 21, 0, 4.497964e+01 }, - { "Cr46", PoPs_genre_atom, 24, 22, 0, 4.5968358635e+01 }, - { "Cr47", PoPs_genre_atom, 24, 23, 0, 4.6962900046e+01 }, - { "Cr48", PoPs_genre_atom, 24, 24, 0, 4.7954031716e+01 }, - { "Cr49", PoPs_genre_atom, 24, 25, 0, 4.8951335721e+01 }, - { "Cr50", PoPs_genre_atom, 24, 26, 0, 4.9946044205e+01 }, - { "Cr51", PoPs_genre_atom, 24, 27, 0, 5.0944767431e+01 }, - { "Cr52", PoPs_genre_atom, 24, 28, 0, 5.1940507472e+01 }, - { "Cr53", PoPs_genre_atom, 24, 29, 0, 5.2940649386e+01 }, - { "Cr54", PoPs_genre_atom, 24, 30, 0, 5.3938880395e+01 }, - { "Cr55", PoPs_genre_atom, 24, 31, 0, 5.4940839672e+01 }, - { "Cr56", PoPs_genre_atom, 24, 32, 0, 5.5940653139e+01 }, - { "Cr57", PoPs_genre_atom, 24, 33, 0, 5.6943613013e+01 }, - { "Cr58", PoPs_genre_atom, 24, 34, 0, 5.7944353129e+01 }, - { "Cr59", PoPs_genre_atom, 24, 35, 0, 5.8948586367e+01 }, - { "Cr60", PoPs_genre_atom, 24, 36, 0, 5.9950076033e+01 }, - { "Cr61", PoPs_genre_atom, 24, 37, 0, 6.0954717204e+01 }, - { "Cr62", PoPs_genre_atom, 24, 38, 0, 6.195661319e+01 }, - { "Cr63", PoPs_genre_atom, 24, 39, 0, 6.296186e+01 }, - { "Cr64", PoPs_genre_atom, 24, 40, 0, 6.396441e+01 }, - { "Cr65", PoPs_genre_atom, 24, 41, 0, 6.497016e+01 }, - { "Cr66", PoPs_genre_atom, 24, 42, 0, 6.597338e+01 }, - { "Cr67", PoPs_genre_atom, 24, 43, 0, 6.697955e+01 }, - { "Mn_natural", PoPs_genre_atom, 25, -1, 0, 5.4938e+01 }, - { "Mn44", PoPs_genre_atom, 25, 19, 0, 4.400687e+01 }, - { "Mn45", PoPs_genre_atom, 25, 20, 0, 4.499451e+01 }, - { "Mn46", PoPs_genre_atom, 25, 21, 0, 4.598672e+01 }, - { "Mn47", PoPs_genre_atom, 25, 22, 0, 4.69761e+01 }, - { "Mn48", PoPs_genre_atom, 25, 23, 0, 4.796852e+01 }, - { "Mn49", PoPs_genre_atom, 25, 24, 0, 4.8959618005e+01 }, - { "Mn50", PoPs_genre_atom, 25, 25, 0, 4.995423823e+01 }, - { "Mn51", PoPs_genre_atom, 25, 26, 0, 5.0948210787e+01 }, - { "Mn52", PoPs_genre_atom, 25, 27, 0, Mn52_Mass }, - { "Mn53", PoPs_genre_atom, 25, 28, 0, 5.2941290117e+01 }, - { "Mn54", PoPs_genre_atom, 25, 29, 0, 5.3940358854e+01 }, - { "Mn55", PoPs_genre_atom, 25, 30, 0, 5.4938045141e+01 }, - { "Mn56", PoPs_genre_atom, 25, 31, 0, 5.593890491e+01 }, - { "Mn57", PoPs_genre_atom, 25, 32, 0, 5.6938285378e+01 }, - { "Mn58", PoPs_genre_atom, 25, 33, 0, 5.7939981549e+01 }, - { "Mn59", PoPs_genre_atom, 25, 34, 0, 5.8940440237e+01 }, - { "Mn60", PoPs_genre_atom, 25, 35, 0, 5.9942911246e+01 }, - { "Mn61", PoPs_genre_atom, 25, 36, 0, 6.0944652638e+01 }, - { "Mn62", PoPs_genre_atom, 25, 37, 0, 6.194842822e+01 }, - { "Mn63", PoPs_genre_atom, 25, 38, 0, 6.295023999e+01 }, - { "Mn64", PoPs_genre_atom, 25, 39, 0, 6.395424909e+01 }, - { "Mn65", PoPs_genre_atom, 25, 40, 0, 6.4956336065e+01 }, - { "Mn66", PoPs_genre_atom, 25, 41, 0, 6.596108e+01 }, - { "Mn67", PoPs_genre_atom, 25, 42, 0, 6.696414e+01 }, - { "Mn68", PoPs_genre_atom, 25, 43, 0, 6.79693e+01 }, - { "Mn69", PoPs_genre_atom, 25, 44, 0, 6.897284e+01 }, - { "Fe_natural", PoPs_genre_atom, 26, -1, 0, 5.5847e+01 }, - { "Fe45", PoPs_genre_atom, 26, 19, 0, 4.5014578e+01 }, - { "Fe46", PoPs_genre_atom, 26, 20, 0, 4.600081e+01 }, - { "Fe47", PoPs_genre_atom, 26, 21, 0, 4.699289e+01 }, - { "Fe48", PoPs_genre_atom, 26, 22, 0, 4.7980504e+01 }, - { "Fe49", PoPs_genre_atom, 26, 23, 0, 4.897361e+01 }, - { "Fe50", PoPs_genre_atom, 26, 24, 0, 4.9962988982e+01 }, - { "Fe51", PoPs_genre_atom, 26, 25, 0, 5.0956819538e+01 }, - { "Fe52", PoPs_genre_atom, 26, 26, 0, 5.1948113875e+01 }, - { "Fe53", PoPs_genre_atom, 26, 27, 0, 5.2945307942e+01 }, - { "Fe54", PoPs_genre_atom, 26, 28, 0, 5.3939610501e+01 }, - { "Fe55", PoPs_genre_atom, 26, 29, 0, 5.4938293357e+01 }, - { "Fe56", PoPs_genre_atom, 26, 30, 0, 5.5934937475e+01 }, - { "Fe57", PoPs_genre_atom, 26, 31, 0, 5.6935393969e+01 }, - { "Fe58", PoPs_genre_atom, 26, 32, 0, 5.7933275558e+01 }, - { "Fe59", PoPs_genre_atom, 26, 33, 0, 5.8934875464e+01 }, - { "Fe60", PoPs_genre_atom, 26, 34, 0, 5.9934071683e+01 }, - { "Fe61", PoPs_genre_atom, 26, 35, 0, 6.0936745281e+01 }, - { "Fe62", PoPs_genre_atom, 26, 36, 0, 6.1936767442e+01 }, - { "Fe63", PoPs_genre_atom, 26, 37, 0, 6.2940369091e+01 }, - { "Fe64", PoPs_genre_atom, 26, 38, 0, 6.3941201265e+01 }, - { "Fe65", PoPs_genre_atom, 26, 39, 0, 6.494538027e+01 }, - { "Fe66", PoPs_genre_atom, 26, 40, 0, 6.5946780638e+01 }, - { "Fe67", PoPs_genre_atom, 26, 41, 0, 6.6950947244e+01 }, - { "Fe68", PoPs_genre_atom, 26, 42, 0, 6.79537e+01 }, - { "Fe69", PoPs_genre_atom, 26, 43, 0, 6.895878e+01 }, - { "Fe70", PoPs_genre_atom, 26, 44, 0, 6.996146e+01 }, - { "Fe71", PoPs_genre_atom, 26, 45, 0, 7.096672e+01 }, - { "Fe72", PoPs_genre_atom, 26, 46, 0, 7.196962e+01 }, - { "Co_natural", PoPs_genre_atom, 27, -1, 0, 5.89332e+01 }, - { "Co47", PoPs_genre_atom, 27, 20, 0, 4.701149e+01 }, - { "Co48", PoPs_genre_atom, 27, 21, 0, 4.800176e+01 }, - { "Co49", PoPs_genre_atom, 27, 22, 0, 4.898972e+01 }, - { "Co50", PoPs_genre_atom, 27, 23, 0, 4.998154e+01 }, - { "Co51", PoPs_genre_atom, 27, 24, 0, 5.097072e+01 }, - { "Co52", PoPs_genre_atom, 27, 25, 0, 5.196359e+01 }, - { "Co53", PoPs_genre_atom, 27, 26, 0, 5.2954218896e+01 }, - { "Co54", PoPs_genre_atom, 27, 27, 0, 5.3948459635e+01 }, - { "Co55", PoPs_genre_atom, 27, 28, 0, 5.4941999029e+01 }, - { "Co56", PoPs_genre_atom, 27, 29, 0, 5.5939839278e+01 }, - { "Co57", PoPs_genre_atom, 27, 30, 0, 5.6936291373e+01 }, - { "Co58", PoPs_genre_atom, 27, 31, 0, Co58_Mass }, - { "Co59", PoPs_genre_atom, 27, 32, 0, 5.8933195048e+01 }, - { "Co60", PoPs_genre_atom, 27, 33, 0, 5.9933817059e+01 }, - { "Co61", PoPs_genre_atom, 27, 34, 0, 6.0932475763e+01 }, - { "Co62", PoPs_genre_atom, 27, 35, 0, 6.1934050563e+01 }, - { "Co63", PoPs_genre_atom, 27, 36, 0, 6.2933611611e+01 }, - { "Co64", PoPs_genre_atom, 27, 37, 0, 6.3935809908e+01 }, - { "Co65", PoPs_genre_atom, 27, 38, 0, 6.493647846e+01 }, - { "Co66", PoPs_genre_atom, 27, 39, 0, 6.5939762004e+01 }, - { "Co67", PoPs_genre_atom, 27, 40, 0, 6.6940889529e+01 }, - { "Co68", PoPs_genre_atom, 27, 41, 0, 6.7944873058e+01 }, - { "Co69", PoPs_genre_atom, 27, 42, 0, 6.894632e+01 }, - { "Co70", PoPs_genre_atom, 27, 43, 0, 6.9951e+01 }, - { "Co71", PoPs_genre_atom, 27, 44, 0, 7.09529e+01 }, - { "Co72", PoPs_genre_atom, 27, 45, 0, 7.195781e+01 }, - { "Co73", PoPs_genre_atom, 27, 46, 0, 7.296024e+01 }, - { "Co74", PoPs_genre_atom, 27, 47, 0, 7.396538e+01 }, - { "Co75", PoPs_genre_atom, 27, 48, 0, 7.496833e+01 }, - { "Ni_natural", PoPs_genre_atom, 28, -1, 0, 5.87e+01 }, - { "Ni48", PoPs_genre_atom, 28, 20, 0, 4.801975e+01 }, - { "Ni49", PoPs_genre_atom, 28, 21, 0, 4.900966e+01 }, - { "Ni50", PoPs_genre_atom, 28, 22, 0, 4.999593e+01 }, - { "Ni51", PoPs_genre_atom, 28, 23, 0, 5.098772e+01 }, - { "Ni52", PoPs_genre_atom, 28, 24, 0, 5.197568e+01 }, - { "Ni53", PoPs_genre_atom, 28, 25, 0, 5.296847e+01 }, - { "Ni54", PoPs_genre_atom, 28, 26, 0, 5.3957905495e+01 }, - { "Ni55", PoPs_genre_atom, 28, 27, 0, 5.4951330251e+01 }, - { "Ni56", PoPs_genre_atom, 28, 28, 0, 5.5942132022e+01 }, - { "Ni57", PoPs_genre_atom, 28, 29, 0, 5.6939793526e+01 }, - { "Ni58", PoPs_genre_atom, 28, 30, 0, 5.7935342907e+01 }, - { "Ni59", PoPs_genre_atom, 28, 31, 0, 5.8934346705e+01 }, - { "Ni60", PoPs_genre_atom, 28, 32, 0, 5.9930786372e+01 }, - { "Ni61", PoPs_genre_atom, 28, 33, 0, 6.0931056033e+01 }, - { "Ni62", PoPs_genre_atom, 28, 34, 0, 6.1928345115e+01 }, - { "Ni63", PoPs_genre_atom, 28, 35, 0, 6.2929669374e+01 }, - { "Ni64", PoPs_genre_atom, 28, 36, 0, 6.3927965959e+01 }, - { "Ni65", PoPs_genre_atom, 28, 37, 0, 6.4930084304e+01 }, - { "Ni66", PoPs_genre_atom, 28, 38, 0, 6.5929139334e+01 }, - { "Ni67", PoPs_genre_atom, 28, 39, 0, 6.6931569414e+01 }, - { "Ni68", PoPs_genre_atom, 28, 40, 0, 6.7931868789e+01 }, - { "Ni69", PoPs_genre_atom, 28, 41, 0, 6.8935610269e+01 }, - { "Ni70", PoPs_genre_atom, 28, 42, 0, 6.99365e+01 }, - { "Ni71", PoPs_genre_atom, 28, 43, 0, 7.0940736283e+01 }, - { "Ni72", PoPs_genre_atom, 28, 44, 0, 7.1942092682e+01 }, - { "Ni73", PoPs_genre_atom, 28, 45, 0, 7.294647e+01 }, - { "Ni74", PoPs_genre_atom, 28, 46, 0, 7.394807e+01 }, - { "Ni75", PoPs_genre_atom, 28, 47, 0, 7.495287e+01 }, - { "Ni76", PoPs_genre_atom, 28, 48, 0, 7.595533e+01 }, - { "Ni77", PoPs_genre_atom, 28, 49, 0, 7.696055e+01 }, - { "Ni78", PoPs_genre_atom, 28, 50, 0, 7.796318e+01 }, - { "Cu_natural", PoPs_genre_atom, 29, -1, 0, 6.3546e+01 }, - { "Cu52", PoPs_genre_atom, 29, 23, 0, 5.199718e+01 }, - { "Cu53", PoPs_genre_atom, 29, 24, 0, 5.298555e+01 }, - { "Cu54", PoPs_genre_atom, 29, 25, 0, 5.397671e+01 }, - { "Cu55", PoPs_genre_atom, 29, 26, 0, 5.496605e+01 }, - { "Cu56", PoPs_genre_atom, 29, 27, 0, 5.595856e+01 }, - { "Cu57", PoPs_genre_atom, 29, 28, 0, 5.6949211078e+01 }, - { "Cu58", PoPs_genre_atom, 29, 29, 0, 5.7944538499e+01 }, - { "Cu59", PoPs_genre_atom, 29, 30, 0, 5.8939498028e+01 }, - { "Cu60", PoPs_genre_atom, 29, 31, 0, 5.993736503e+01 }, - { "Cu61", PoPs_genre_atom, 29, 32, 0, 6.0933457821e+01 }, - { "Cu62", PoPs_genre_atom, 29, 33, 0, 6.1932583745e+01 }, - { "Cu63", PoPs_genre_atom, 29, 34, 0, 6.2929597474e+01 }, - { "Cu64", PoPs_genre_atom, 29, 35, 0, 6.3929764183e+01 }, - { "Cu65", PoPs_genre_atom, 29, 36, 0, 6.4927789485e+01 }, - { "Cu66", PoPs_genre_atom, 29, 37, 0, 6.592886881299999e+01 }, - { "Cu67", PoPs_genre_atom, 29, 38, 0, 6.6927730314e+01 }, - { "Cu68", PoPs_genre_atom, 29, 39, 0, 6.7929610889e+01 }, - { "Cu69", PoPs_genre_atom, 29, 40, 0, 6.8929429269e+01 }, - { "Cu70", PoPs_genre_atom, 29, 41, 0, 6.9932392343e+01 }, - { "Cu71", PoPs_genre_atom, 29, 42, 0, 7.0932676833e+01 }, - { "Cu72", PoPs_genre_atom, 29, 43, 0, 7.1935820307e+01 }, - { "Cu73", PoPs_genre_atom, 29, 44, 0, 7.2936675282e+01 }, - { "Cu74", PoPs_genre_atom, 29, 45, 0, 7.3939874862e+01 }, - { "Cu75", PoPs_genre_atom, 29, 46, 0, 7.49419e+01 }, - { "Cu76", PoPs_genre_atom, 29, 47, 0, 7.5945275026e+01 }, - { "Cu77", PoPs_genre_atom, 29, 48, 0, 7.694785e+01 }, - { "Cu78", PoPs_genre_atom, 29, 49, 0, 7.795196e+01 }, - { "Cu79", PoPs_genre_atom, 29, 50, 0, 7.895456e+01 }, - { "Cu80", PoPs_genre_atom, 29, 51, 0, 7.996087e+01 }, - { "Zn_natural", PoPs_genre_atom, 30, -1, 0, 6.538e+01 }, - { "Zn54", PoPs_genre_atom, 30, 24, 0, 5.399295e+01 }, - { "Zn55", PoPs_genre_atom, 30, 25, 0, 5.498398e+01 }, - { "Zn56", PoPs_genre_atom, 30, 26, 0, 5.597238e+01 }, - { "Zn57", PoPs_genre_atom, 30, 27, 0, 5.6964788e+01 }, - { "Zn58", PoPs_genre_atom, 30, 28, 0, 5.7954591555e+01 }, - { "Zn59", PoPs_genre_atom, 30, 29, 0, 5.8949263764e+01 }, - { "Zn60", PoPs_genre_atom, 30, 30, 0, 5.9941827035e+01 }, - { "Zn61", PoPs_genre_atom, 30, 31, 0, 6.0939510635e+01 }, - { "Zn62", PoPs_genre_atom, 30, 32, 0, 6.1934329764e+01 }, - { "Zn63", PoPs_genre_atom, 30, 33, 0, 6.2933211566e+01 }, - { "Zn64", PoPs_genre_atom, 30, 34, 0, 6.3929142222e+01 }, - { "Zn65", PoPs_genre_atom, 30, 35, 0, 6.4929240984e+01 }, - { "Zn66", PoPs_genre_atom, 30, 36, 0, 6.5926033419e+01 }, - { "Zn67", PoPs_genre_atom, 30, 37, 0, 6.6927127345e+01 }, - { "Zn68", PoPs_genre_atom, 30, 38, 0, 6.7924844154e+01 }, - { "Zn69", PoPs_genre_atom, 30, 39, 0, Zn69_Mass }, - { "Zn70", PoPs_genre_atom, 30, 40, 0, 6.9925319274e+01 }, - { "Zn71", PoPs_genre_atom, 30, 41, 0, 7.0927721599e+01 }, - { "Zn72", PoPs_genre_atom, 30, 42, 0, 7.1926857951e+01 }, - { "Zn73", PoPs_genre_atom, 30, 43, 0, 7.2929779104e+01 }, - { "Zn74", PoPs_genre_atom, 30, 44, 0, 7.392945860899999e+01 }, - { "Zn75", PoPs_genre_atom, 30, 45, 0, 7.4932936741e+01 }, - { "Zn76", PoPs_genre_atom, 30, 46, 0, 7.593329357e+01 }, - { "Zn77", PoPs_genre_atom, 30, 47, 0, 7.6936958967e+01 }, - { "Zn78", PoPs_genre_atom, 30, 48, 0, 7.7938440216e+01 }, - { "Zn79", PoPs_genre_atom, 30, 49, 0, 7.8942652e+01 }, - { "Zn80", PoPs_genre_atom, 30, 50, 0, 7.9944342348e+01 }, - { "Zn81", PoPs_genre_atom, 30, 51, 0, 8.095048e+01 }, - { "Zn82", PoPs_genre_atom, 30, 52, 0, 8.195442e+01 }, - { "Zn83", PoPs_genre_atom, 30, 53, 0, 8.296103e+01 }, - { "Ga_natural", PoPs_genre_atom, 31, -1, 0, 6.972e+01 }, - { "Ga56", PoPs_genre_atom, 31, 25, 0, 5.599491e+01 }, - { "Ga57", PoPs_genre_atom, 31, 26, 0, 5.698293e+01 }, - { "Ga58", PoPs_genre_atom, 31, 27, 0, 5.797425e+01 }, - { "Ga59", PoPs_genre_atom, 31, 28, 0, 5.896337e+01 }, - { "Ga60", PoPs_genre_atom, 31, 29, 0, 5.995706e+01 }, - { "Ga61", PoPs_genre_atom, 31, 30, 0, 6.0949446287e+01 }, - { "Ga62", PoPs_genre_atom, 31, 31, 0, 6.1944175238e+01 }, - { "Ga63", PoPs_genre_atom, 31, 32, 0, 6.2939294196e+01 }, - { "Ga64", PoPs_genre_atom, 31, 33, 0, 6.3936838747e+01 }, - { "Ga65", PoPs_genre_atom, 31, 34, 0, 6.493273475399999e+01 }, - { "Ga66", PoPs_genre_atom, 31, 35, 0, 6.593158901e+01 }, - { "Ga67", PoPs_genre_atom, 31, 36, 0, 6.6928201703e+01 }, - { "Ga68", PoPs_genre_atom, 31, 37, 0, 6.7927980084e+01 }, - { "Ga69", PoPs_genre_atom, 31, 38, 0, 6.8925573587e+01 }, - { "Ga70", PoPs_genre_atom, 31, 39, 0, 6.9926021972e+01 }, - { "Ga71", PoPs_genre_atom, 31, 40, 0, 7.0924701349e+01 }, - { "Ga72", PoPs_genre_atom, 31, 41, 0, 7.1926366268e+01 }, - { "Ga73", PoPs_genre_atom, 31, 42, 0, 7.2925174682e+01 }, - { "Ga74", PoPs_genre_atom, 31, 43, 0, 7.3926945762e+01 }, - { "Ga75", PoPs_genre_atom, 31, 44, 0, 7.4926500246e+01 }, - { "Ga76", PoPs_genre_atom, 31, 45, 0, 7.5928827626e+01 }, - { "Ga77", PoPs_genre_atom, 31, 46, 0, 7.69291543e+01 }, - { "Ga78", PoPs_genre_atom, 31, 47, 0, 7.793160818e+01 }, - { "Ga79", PoPs_genre_atom, 31, 48, 0, 7.893289326e+01 }, - { "Ga80", PoPs_genre_atom, 31, 49, 0, 7.9936515781e+01 }, - { "Ga81", PoPs_genre_atom, 31, 50, 0, 8.0937752355e+01 }, - { "Ga82", PoPs_genre_atom, 31, 51, 0, 8.194299e+01 }, - { "Ga83", PoPs_genre_atom, 31, 52, 0, 8.294698e+01 }, - { "Ga84", PoPs_genre_atom, 31, 53, 0, 8.395265e+01 }, - { "Ga85", PoPs_genre_atom, 31, 54, 0, 8.4957e+01 }, - { "Ga86", PoPs_genre_atom, 31, 55, 0, 8.596312e+01 }, - { "Ge_natural", PoPs_genre_atom, 32, -1, 0, 7.259e+01 }, - { "Ge58", PoPs_genre_atom, 32, 26, 0, 5.799101e+01 }, - { "Ge59", PoPs_genre_atom, 32, 27, 0, 5.898175e+01 }, - { "Ge60", PoPs_genre_atom, 32, 28, 0, 5.997019e+01 }, - { "Ge61", PoPs_genre_atom, 32, 29, 0, 6.096379e+01 }, - { "Ge62", PoPs_genre_atom, 32, 30, 0, 6.195465e+01 }, - { "Ge63", PoPs_genre_atom, 32, 31, 0, 6.294964e+01 }, - { "Ge64", PoPs_genre_atom, 32, 32, 0, 6.3941653e+01 }, - { "Ge65", PoPs_genre_atom, 32, 33, 0, 6.4939436406e+01 }, - { "Ge66", PoPs_genre_atom, 32, 34, 0, 6.5933843453e+01 }, - { "Ge67", PoPs_genre_atom, 32, 35, 0, 6.693273407e+01 }, - { "Ge68", PoPs_genre_atom, 32, 36, 0, 6.792809424e+01 }, - { "Ge69", PoPs_genre_atom, 32, 37, 0, 6.8927964533e+01 }, - { "Ge70", PoPs_genre_atom, 32, 38, 0, 6.9924247381e+01 }, - { "Ge71", PoPs_genre_atom, 32, 39, 0, 7.0924950954e+01 }, - { "Ge72", PoPs_genre_atom, 32, 40, 0, 7.1922075815e+01 }, - { "Ge73", PoPs_genre_atom, 32, 41, 0, 7.2923458945e+01 }, - { "Ge74", PoPs_genre_atom, 32, 42, 0, 7.3921177767e+01 }, - { "Ge75", PoPs_genre_atom, 32, 43, 0, 7.4922858948e+01 }, - { "Ge76", PoPs_genre_atom, 32, 44, 0, 7.5921402557e+01 }, - { "Ge77", PoPs_genre_atom, 32, 45, 0, 7.6923548591e+01 }, - { "Ge78", PoPs_genre_atom, 32, 46, 0, 7.7922852739e+01 }, - { "Ge79", PoPs_genre_atom, 32, 47, 0, 7.8925400995e+01 }, - { "Ge80", PoPs_genre_atom, 32, 48, 0, 7.9925372392e+01 }, - { "Ge81", PoPs_genre_atom, 32, 49, 0, 8.0928820467e+01 }, - { "Ge82", PoPs_genre_atom, 32, 50, 0, 8.1929549725e+01 }, - { "Ge83", PoPs_genre_atom, 32, 51, 0, 8.293462e+01 }, - { "Ge84", PoPs_genre_atom, 32, 52, 0, 8.393747e+01 }, - { "Ge85", PoPs_genre_atom, 32, 53, 0, 8.494303e+01 }, - { "Ge86", PoPs_genre_atom, 32, 54, 0, 8.594649e+01 }, - { "Ge87", PoPs_genre_atom, 32, 55, 0, 8.695251e+01 }, - { "Ge88", PoPs_genre_atom, 32, 56, 0, 8.795691e+01 }, - { "Ge89", PoPs_genre_atom, 32, 57, 0, 8.896383e+01 }, - { "As_natural", PoPs_genre_atom, 33, -1, 0, 7.49216e+01 }, - { "As60", PoPs_genre_atom, 33, 27, 0, 5.999313e+01 }, - { "As61", PoPs_genre_atom, 33, 28, 0, 6.098062e+01 }, - { "As62", PoPs_genre_atom, 33, 29, 0, 6.19732e+01 }, - { "As63", PoPs_genre_atom, 33, 30, 0, 6.296369e+01 }, - { "As64", PoPs_genre_atom, 33, 31, 0, 6.3957572e+01 }, - { "As65", PoPs_genre_atom, 33, 32, 0, 6.4949564e+01 }, - { "As66", PoPs_genre_atom, 33, 33, 0, 6.594471e+01 }, - { "As67", PoPs_genre_atom, 33, 34, 0, 6.6939186071e+01 }, - { "As68", PoPs_genre_atom, 33, 35, 0, 6.793676906899999e+01 }, - { "As69", PoPs_genre_atom, 33, 36, 0, 6.8932273675e+01 }, - { "As70", PoPs_genre_atom, 33, 37, 0, 6.9930924826e+01 }, - { "As71", PoPs_genre_atom, 33, 38, 0, 7.0927112428e+01 }, - { "As72", PoPs_genre_atom, 33, 39, 0, 7.1926752283e+01 }, - { "As73", PoPs_genre_atom, 33, 40, 0, 7.2923824844e+01 }, - { "As74", PoPs_genre_atom, 33, 41, 0, 7.3923928692e+01 }, - { "As75", PoPs_genre_atom, 33, 42, 0, 7.4921596478e+01 }, - { "As76", PoPs_genre_atom, 33, 43, 0, 7.5922394021e+01 }, - { "As77", PoPs_genre_atom, 33, 44, 0, 7.6920647286e+01 }, - { "As78", PoPs_genre_atom, 33, 45, 0, 7.7921827281e+01 }, - { "As79", PoPs_genre_atom, 33, 46, 0, 7.8920947934e+01 }, - { "As80", PoPs_genre_atom, 33, 47, 0, 7.9922533816e+01 }, - { "As81", PoPs_genre_atom, 33, 48, 0, 8.0922132287e+01 }, - { "As82", PoPs_genre_atom, 33, 49, 0, 8.1924504067e+01 }, - { "As83", PoPs_genre_atom, 33, 50, 0, 8.2924980024e+01 }, - { "As84", PoPs_genre_atom, 33, 51, 0, 8.3929058e+01 }, - { "As85", PoPs_genre_atom, 33, 52, 0, 8.493202e+01 }, - { "As86", PoPs_genre_atom, 33, 53, 0, 8.59365e+01 }, - { "As87", PoPs_genre_atom, 33, 54, 0, 8.69399e+01 }, - { "As88", PoPs_genre_atom, 33, 55, 0, 8.794494e+01 }, - { "As89", PoPs_genre_atom, 33, 56, 0, 8.894939e+01 }, - { "As90", PoPs_genre_atom, 33, 57, 0, 8.99555e+01 }, - { "As91", PoPs_genre_atom, 33, 58, 0, 9.096043e+01 }, - { "As92", PoPs_genre_atom, 33, 59, 0, 9.19668e+01 }, - { "Se_natural", PoPs_genre_atom, 34, -1, 0, 7.896e+01 }, - { "Se65", PoPs_genre_atom, 34, 31, 0, 6.496466e+01 }, - { "Se66", PoPs_genre_atom, 34, 32, 0, 6.595521e+01 }, - { "Se67", PoPs_genre_atom, 34, 33, 0, 6.695009e+01 }, - { "Se68", PoPs_genre_atom, 34, 34, 0, 6.7941798e+01 }, - { "Se69", PoPs_genre_atom, 34, 35, 0, 6.8939557817e+01 }, - { "Se70", PoPs_genre_atom, 34, 36, 0, 6.9933390644e+01 }, - { "Se71", PoPs_genre_atom, 34, 37, 0, 7.093224182199999e+01 }, - { "Se72", PoPs_genre_atom, 34, 38, 0, 7.1927112352e+01 }, - { "Se73", PoPs_genre_atom, 34, 39, 0, 7.2926765345e+01 }, - { "Se74", PoPs_genre_atom, 34, 40, 0, 7.3922476436e+01 }, - { "Se75", PoPs_genre_atom, 34, 41, 0, 7.4922523368e+01 }, - { "Se76", PoPs_genre_atom, 34, 42, 0, 7.5919213597e+01 }, - { "Se77", PoPs_genre_atom, 34, 43, 0, 7.6919914038e+01 }, - { "Se78", PoPs_genre_atom, 34, 44, 0, 7.791730909e+01 }, - { "Se79", PoPs_genre_atom, 34, 45, 0, 7.8918499098e+01 }, - { "Se80", PoPs_genre_atom, 34, 46, 0, 7.9916521271e+01 }, - { "Se81", PoPs_genre_atom, 34, 47, 0, 8.0917992474e+01 }, - { "Se82", PoPs_genre_atom, 34, 48, 0, 8.1916699401e+01 }, - { "Se83", PoPs_genre_atom, 34, 49, 0, 8.2919118473e+01 }, - { "Se84", PoPs_genre_atom, 34, 50, 0, 8.3918462354e+01 }, - { "Se85", PoPs_genre_atom, 34, 51, 0, 8.4922245053e+01 }, - { "Se86", PoPs_genre_atom, 34, 52, 0, 8.5924271579e+01 }, - { "Se87", PoPs_genre_atom, 34, 53, 0, 8.6928521358e+01 }, - { "Se88", PoPs_genre_atom, 34, 54, 0, 8.7931423998e+01 }, - { "Se89", PoPs_genre_atom, 34, 55, 0, 8.893645e+01 }, - { "Se90", PoPs_genre_atom, 34, 56, 0, 8.993996e+01 }, - { "Se91", PoPs_genre_atom, 34, 57, 0, 9.094596e+01 }, - { "Se92", PoPs_genre_atom, 34, 58, 0, 9.194992e+01 }, - { "Se93", PoPs_genre_atom, 34, 59, 0, 9.295629e+01 }, - { "Se94", PoPs_genre_atom, 34, 60, 0, 9.396049e+01 }, - { "Br_natural", PoPs_genre_atom, 35, -1, 0, 7.9904e+01 }, - { "Br67", PoPs_genre_atom, 35, 32, 0, 6.696479e+01 }, - { "Br68", PoPs_genre_atom, 35, 33, 0, 6.7958516e+01 }, - { "Br69", PoPs_genre_atom, 35, 34, 0, 6.8950106e+01 }, - { "Br70", PoPs_genre_atom, 35, 35, 0, 6.9944792e+01 }, - { "Br71", PoPs_genre_atom, 35, 36, 0, 7.093874e+01 }, - { "Br72", PoPs_genre_atom, 35, 37, 0, 7.1936644572e+01 }, - { "Br73", PoPs_genre_atom, 35, 38, 0, 7.2931691524e+01 }, - { "Br74", PoPs_genre_atom, 35, 39, 0, 7.392989103399999e+01 }, - { "Br75", PoPs_genre_atom, 35, 40, 0, 7.4925776207e+01 }, - { "Br76", PoPs_genre_atom, 35, 41, 0, 7.5924541469e+01 }, - { "Br77", PoPs_genre_atom, 35, 42, 0, 7.6921379082e+01 }, - { "Br78", PoPs_genre_atom, 35, 43, 0, 7.7921145706e+01 }, - { "Br79", PoPs_genre_atom, 35, 44, 0, 7.8918337087e+01 }, - { "Br80", PoPs_genre_atom, 35, 45, 0, 7.9918529296e+01 }, - { "Br81", PoPs_genre_atom, 35, 46, 0, 8.0916290563e+01 }, - { "Br82", PoPs_genre_atom, 35, 47, 0, 8.1916804119e+01 }, - { "Br83", PoPs_genre_atom, 35, 48, 0, 8.2915180421e+01 }, - { "Br84", PoPs_genre_atom, 35, 49, 0, 8.3916478974e+01 }, - { "Br85", PoPs_genre_atom, 35, 50, 0, 8.4915608403e+01 }, - { "Br86", PoPs_genre_atom, 35, 51, 0, 8.5918797577e+01 }, - { "Br87", PoPs_genre_atom, 35, 52, 0, 8.6920711324e+01 }, - { "Br88", PoPs_genre_atom, 35, 53, 0, 8.7924065926e+01 }, - { "Br89", PoPs_genre_atom, 35, 54, 0, 8.8926385334e+01 }, - { "Br90", PoPs_genre_atom, 35, 55, 0, 8.993062773699999e+01 }, - { "Br91", PoPs_genre_atom, 35, 56, 0, 9.0933968095e+01 }, - { "Br92", PoPs_genre_atom, 35, 57, 0, 9.1939258714e+01 }, - { "Br93", PoPs_genre_atom, 35, 58, 0, 9.294305e+01 }, - { "Br94", PoPs_genre_atom, 35, 59, 0, 9.394868e+01 }, - { "Br95", PoPs_genre_atom, 35, 60, 0, 9.495287e+01 }, - { "Br96", PoPs_genre_atom, 35, 61, 0, 9.595853e+01 }, - { "Br97", PoPs_genre_atom, 35, 62, 0, 9.69628e+01 }, - { "Kr_natural", PoPs_genre_atom, 36, -1, 0, 8.38e+01 }, - { "Kr69", PoPs_genre_atom, 36, 33, 0, 6.896518e+01 }, - { "Kr70", PoPs_genre_atom, 36, 34, 0, 6.9955259e+01 }, - { "Kr71", PoPs_genre_atom, 36, 35, 0, 7.0949625738e+01 }, - { "Kr72", PoPs_genre_atom, 36, 36, 0, 7.1942092038e+01 }, - { "Kr73", PoPs_genre_atom, 36, 37, 0, 7.2939289195e+01 }, - { "Kr74", PoPs_genre_atom, 36, 38, 0, 7.3933084369e+01 }, - { "Kr75", PoPs_genre_atom, 36, 39, 0, 7.4930945746e+01 }, - { "Kr76", PoPs_genre_atom, 36, 40, 0, 7.5925910078e+01 }, - { "Kr77", PoPs_genre_atom, 36, 41, 0, 7.692467e+01 }, - { "Kr78", PoPs_genre_atom, 36, 42, 0, 7.7920364783e+01 }, - { "Kr79", PoPs_genre_atom, 36, 43, 0, 7.8920082431e+01 }, - { "Kr80", PoPs_genre_atom, 36, 44, 0, 7.9916378965e+01 }, - { "Kr81", PoPs_genre_atom, 36, 45, 0, 8.0916592015e+01 }, - { "Kr82", PoPs_genre_atom, 36, 46, 0, 8.19134836e+01 }, - { "Kr83", PoPs_genre_atom, 36, 47, 0, 8.2914136099e+01 }, - { "Kr84", PoPs_genre_atom, 36, 48, 0, 8.3911506687e+01 }, - { "Kr85", PoPs_genre_atom, 36, 49, 0, 8.4912527331e+01 }, - { "Kr86", PoPs_genre_atom, 36, 50, 0, 8.5910610729e+01 }, - { "Kr87", PoPs_genre_atom, 36, 51, 0, 8.6913354862e+01 }, - { "Kr88", PoPs_genre_atom, 36, 52, 0, 8.7914446969e+01 }, - { "Kr89", PoPs_genre_atom, 36, 53, 0, 8.8917630581e+01 }, - { "Kr90", PoPs_genre_atom, 36, 54, 0, 8.9919516555e+01 }, - { "Kr91", PoPs_genre_atom, 36, 55, 0, 9.0923445215e+01 }, - { "Kr92", PoPs_genre_atom, 36, 56, 0, 9.192615621e+01 }, - { "Kr93", PoPs_genre_atom, 36, 57, 0, 9.2931274357e+01 }, - { "Kr94", PoPs_genre_atom, 36, 58, 0, 9.393436e+01 }, - { "Kr95", PoPs_genre_atom, 36, 59, 0, 9.493984e+01 }, - { "Kr96", PoPs_genre_atom, 36, 60, 0, 9.594307e+01 }, - { "Kr97", PoPs_genre_atom, 36, 61, 0, 9.694856e+01 }, - { "Kr98", PoPs_genre_atom, 36, 62, 0, 9.795191e+01 }, - { "Kr99", PoPs_genre_atom, 36, 63, 0, 9.89576e+01 }, - { "Kr100", PoPs_genre_atom, 36, 64, 0, 9.996114e+01 }, - { "Rb_natural", PoPs_genre_atom, 37, -1, 0, 8.54678e+01 }, - { "Rb71", PoPs_genre_atom, 37, 34, 0, 7.096532e+01 }, - { "Rb72", PoPs_genre_atom, 37, 35, 0, 7.195908e+01 }, - { "Rb73", PoPs_genre_atom, 37, 36, 0, 7.2950561e+01 }, - { "Rb74", PoPs_genre_atom, 37, 37, 0, 7.3944264751e+01 }, - { "Rb75", PoPs_genre_atom, 37, 38, 0, 7.493857e+01 }, - { "Rb76", PoPs_genre_atom, 37, 39, 0, 7.5935072226e+01 }, - { "Rb77", PoPs_genre_atom, 37, 40, 0, 7.6930408e+01 }, - { "Rb78", PoPs_genre_atom, 37, 41, 0, 7.7928141e+01 }, - { "Rb79", PoPs_genre_atom, 37, 42, 0, 7.892398946e+01 }, - { "Rb80", PoPs_genre_atom, 37, 43, 0, 7.992251925e+01 }, - { "Rb81", PoPs_genre_atom, 37, 44, 0, 8.0918995913e+01 }, - { "Rb82", PoPs_genre_atom, 37, 45, 0, 8.1918208598e+01 }, - { "Rb83", PoPs_genre_atom, 37, 46, 0, 8.2915109701e+01 }, - { "Rb84", PoPs_genre_atom, 37, 47, 0, 8.3914384821e+01 }, - { "Rb85", PoPs_genre_atom, 37, 48, 0, 8.4911789737e+01 }, - { "Rb86", PoPs_genre_atom, 37, 49, 0, Rb86_Mass }, - { "Rb87", PoPs_genre_atom, 37, 50, 0, 8.6909180526e+01 }, - { "Rb88", PoPs_genre_atom, 37, 51, 0, 8.7911315588e+01 }, - { "Rb89", PoPs_genre_atom, 37, 52, 0, 8.8912278016e+01 }, - { "Rb90", PoPs_genre_atom, 37, 53, 0, Rb90_Mass }, - { "Rb91", PoPs_genre_atom, 37, 54, 0, 9.0916536958e+01 }, - { "Rb92", PoPs_genre_atom, 37, 55, 0, 9.19197289e+01 }, - { "Rb93", PoPs_genre_atom, 37, 56, 0, 9.292204187599999e+01 }, - { "Rb94", PoPs_genre_atom, 37, 57, 0, 9.3926404946e+01 }, - { "Rb95", PoPs_genre_atom, 37, 58, 0, 9.4929302889e+01 }, - { "Rb96", PoPs_genre_atom, 37, 59, 0, 9.5934272637e+01 }, - { "Rb97", PoPs_genre_atom, 37, 60, 0, 9.6937351916e+01 }, - { "Rb98", PoPs_genre_atom, 37, 61, 0, 9.7941790668e+01 }, - { "Rb99", PoPs_genre_atom, 37, 62, 0, 9.8945379283e+01 }, - { "Rb100", PoPs_genre_atom, 37, 63, 0, 9.994987e+01 }, - { "Rb101", PoPs_genre_atom, 37, 64, 0, 1.00953196445e+02 }, - { "Rb102", PoPs_genre_atom, 37, 65, 0, 1.0195887e+02 }, - { "Sr_natural", PoPs_genre_atom, 38, -1, 0, 8.762e+01 }, - { "Sr73", PoPs_genre_atom, 38, 35, 0, 7.296597e+01 }, - { "Sr74", PoPs_genre_atom, 38, 36, 0, 7.395631e+01 }, - { "Sr75", PoPs_genre_atom, 38, 37, 0, 7.4949949568e+01 }, - { "Sr76", PoPs_genre_atom, 38, 38, 0, 7.5941766782e+01 }, - { "Sr77", PoPs_genre_atom, 38, 39, 0, 7.6937944782e+01 }, - { "Sr78", PoPs_genre_atom, 38, 40, 0, 7.793218e+01 }, - { "Sr79", PoPs_genre_atom, 38, 41, 0, 7.8929708e+01 }, - { "Sr80", PoPs_genre_atom, 38, 42, 0, 7.9924521013e+01 }, - { "Sr81", PoPs_genre_atom, 38, 43, 0, 8.0923211846e+01 }, - { "Sr82", PoPs_genre_atom, 38, 44, 0, 8.1918401639e+01 }, - { "Sr83", PoPs_genre_atom, 38, 45, 0, 8.2917556701e+01 }, - { "Sr84", PoPs_genre_atom, 38, 46, 0, 8.3913425275e+01 }, - { "Sr85", PoPs_genre_atom, 38, 47, 0, 8.4912932803e+01 }, - { "Sr86", PoPs_genre_atom, 38, 48, 0, 8.5909260204e+01 }, - { "Sr87", PoPs_genre_atom, 38, 49, 0, Sr87_Mass }, - { "Sr88", PoPs_genre_atom, 38, 50, 0, 8.7905612124e+01 }, - { "Sr89", PoPs_genre_atom, 38, 51, 0, 8.8907450675e+01 }, - { "Sr90", PoPs_genre_atom, 38, 52, 0, 8.9907737888e+01 }, - { "Sr91", PoPs_genre_atom, 38, 53, 0, 9.0910203095e+01 }, - { "Sr92", PoPs_genre_atom, 38, 54, 0, 9.1911037858e+01 }, - { "Sr93", PoPs_genre_atom, 38, 55, 0, 9.2914025634e+01 }, - { "Sr94", PoPs_genre_atom, 38, 56, 0, 9.3915361312e+01 }, - { "Sr95", PoPs_genre_atom, 38, 57, 0, 9.4919358766e+01 }, - { "Sr96", PoPs_genre_atom, 38, 58, 0, 9.5921696802e+01 }, - { "Sr97", PoPs_genre_atom, 38, 59, 0, 9.6926152923e+01 }, - { "Sr98", PoPs_genre_atom, 38, 60, 0, 9.7928452934e+01 }, - { "Sr99", PoPs_genre_atom, 38, 61, 0, 9.8933240926e+01 }, - { "Sr100", PoPs_genre_atom, 38, 62, 0, 9.9935351911e+01 }, - { "Sr101", PoPs_genre_atom, 38, 63, 0, 1.00940517888e+02 }, - { "Sr102", PoPs_genre_atom, 38, 64, 0, 1.01943018987e+02 }, - { "Sr103", PoPs_genre_atom, 38, 65, 0, 1.0294895e+02 }, - { "Sr104", PoPs_genre_atom, 38, 66, 0, 1.0395233e+02 }, - { "Sr105", PoPs_genre_atom, 38, 67, 0, 1.0495858e+02 }, - { "Y_natural", PoPs_genre_atom, 39, -1, 0, 8.89059e+01 }, - { "Y76", PoPs_genre_atom, 39, 37, 0, 7.595845e+01 }, - { "Y77", PoPs_genre_atom, 39, 38, 0, 7.6949645e+01 }, - { "Y78", PoPs_genre_atom, 39, 39, 0, 7.794361e+01 }, - { "Y79", PoPs_genre_atom, 39, 40, 0, 7.8937351634e+01 }, - { "Y80", PoPs_genre_atom, 39, 41, 0, 7.993428e+01 }, - { "Y81", PoPs_genre_atom, 39, 42, 0, 8.0929127468e+01 }, - { "Y82", PoPs_genre_atom, 39, 43, 0, 8.1926792451e+01 }, - { "Y83", PoPs_genre_atom, 39, 44, 0, 8.2922354243e+01 }, - { "Y84", PoPs_genre_atom, 39, 45, 0, 8.3920388264e+01 }, - { "Y85", PoPs_genre_atom, 39, 46, 0, 8.4916433039e+01 }, - { "Y86", PoPs_genre_atom, 39, 47, 0, 8.5914885576e+01 }, - { "Y87", PoPs_genre_atom, 39, 48, 0, 8.691087573e+01 }, - { "Y88", PoPs_genre_atom, 39, 49, 0, Y88_Mass }, - { "Y89", PoPs_genre_atom, 39, 50, 0, Y89_Mass }, - { "Y90", PoPs_genre_atom, 39, 51, 0, Y90_Mass }, - { "Y91", PoPs_genre_atom, 39, 52, 0, 9.0907304791e+01 }, - { "Y92", PoPs_genre_atom, 39, 53, 0, 9.1908949143e+01 }, - { "Y93", PoPs_genre_atom, 39, 54, 0, 9.2909582713e+01 }, - { "Y94", PoPs_genre_atom, 39, 55, 0, 9.3911595245e+01 }, - { "Y95", PoPs_genre_atom, 39, 56, 0, 9.491282062099999e+01 }, - { "Y96", PoPs_genre_atom, 39, 57, 0, 9.5915891343e+01 }, - { "Y97", PoPs_genre_atom, 39, 58, 0, 9.6918133995e+01 }, - { "Y98", PoPs_genre_atom, 39, 59, 0, 9.792220302e+01 }, - { "Y99", PoPs_genre_atom, 39, 60, 0, 9.8924636204e+01 }, - { "Y100", PoPs_genre_atom, 39, 61, 0, 9.9927756586e+01 }, - { "Y101", PoPs_genre_atom, 39, 62, 0, 1.0093031385e+02 }, - { "Y102", PoPs_genre_atom, 39, 63, 0, 1.01933555695e+02 }, - { "Y103", PoPs_genre_atom, 39, 64, 0, 1.0293673e+02 }, - { "Y104", PoPs_genre_atom, 39, 65, 0, 1.0394105e+02 }, - { "Y105", PoPs_genre_atom, 39, 66, 0, 1.0494487e+02 }, - { "Y106", PoPs_genre_atom, 39, 67, 0, 1.0594979e+02 }, - { "Y107", PoPs_genre_atom, 39, 68, 0, 1.0695414e+02 }, - { "Y108", PoPs_genre_atom, 39, 69, 0, 1.0795948e+02 }, - { "Zr_natural", PoPs_genre_atom, 40, -1, 0, 9.122e+01 }, - { "Zr78", PoPs_genre_atom, 40, 38, 0, 7.795523e+01 }, - { "Zr79", PoPs_genre_atom, 40, 39, 0, 7.894916e+01 }, - { "Zr80", PoPs_genre_atom, 40, 40, 0, 7.99404e+01 }, - { "Zr81", PoPs_genre_atom, 40, 41, 0, 8.0937210026e+01 }, - { "Zr82", PoPs_genre_atom, 40, 42, 0, 8.1931087e+01 }, - { "Zr83", PoPs_genre_atom, 40, 43, 0, 8.2928653801e+01 }, - { "Zr84", PoPs_genre_atom, 40, 44, 0, 8.392325e+01 }, - { "Zr85", PoPs_genre_atom, 40, 45, 0, 8.4921471182e+01 }, - { "Zr86", PoPs_genre_atom, 40, 46, 0, 8.5916473591e+01 }, - { "Zr87", PoPs_genre_atom, 40, 47, 0, 8.691481625199999e+01 }, - { "Zr88", PoPs_genre_atom, 40, 48, 0, 8.7910226904e+01 }, - { "Zr89", PoPs_genre_atom, 40, 49, 0, 8.89088895e+01 }, - { "Zr90", PoPs_genre_atom, 40, 50, 0, 8.9904704416e+01 }, - { "Zr91", PoPs_genre_atom, 40, 51, 0, 9.0905645767e+01 }, - { "Zr92", PoPs_genre_atom, 40, 52, 0, 9.1905040847e+01 }, - { "Zr93", PoPs_genre_atom, 40, 53, 0, 9.2906476006e+01 }, - { "Zr94", PoPs_genre_atom, 40, 54, 0, 9.3906315192e+01 }, - { "Zr95", PoPs_genre_atom, 40, 55, 0, 9.49080426e+01 }, - { "Zr96", PoPs_genre_atom, 40, 56, 0, 9.5908273386e+01 }, - { "Zr97", PoPs_genre_atom, 40, 57, 0, 9.6910953109e+01 }, - { "Zr98", PoPs_genre_atom, 40, 58, 0, 9.7912734892e+01 }, - { "Zr99", PoPs_genre_atom, 40, 59, 0, 9.8916512106e+01 }, - { "Zr100", PoPs_genre_atom, 40, 60, 0, 9.9917761889e+01 }, - { "Zr101", PoPs_genre_atom, 40, 61, 0, 1.00921140415e+02 }, - { "Zr102", PoPs_genre_atom, 40, 62, 0, 1.01922981285e+02 }, - { "Zr103", PoPs_genre_atom, 40, 63, 0, 1.02926599606e+02 }, - { "Zr104", PoPs_genre_atom, 40, 64, 0, 1.0392878e+02 }, - { "Zr105", PoPs_genre_atom, 40, 65, 0, 1.0493305e+02 }, - { "Zr106", PoPs_genre_atom, 40, 66, 0, 1.0593591e+02 }, - { "Zr107", PoPs_genre_atom, 40, 67, 0, 1.0694075e+02 }, - { "Zr108", PoPs_genre_atom, 40, 68, 0, 1.0794396e+02 }, - { "Zr109", PoPs_genre_atom, 40, 69, 0, 1.0894924e+02 }, - { "Zr110", PoPs_genre_atom, 40, 70, 0, 1.0995287e+02 }, - { "Nb_natural", PoPs_genre_atom, 41, -1, 0, 9.29064e+01 }, - { "Nb81", PoPs_genre_atom, 41, 40, 0, 8.094903e+01 }, - { "Nb82", PoPs_genre_atom, 41, 41, 0, 8.194313e+01 }, - { "Nb83", PoPs_genre_atom, 41, 42, 0, 8.2936705382e+01 }, - { "Nb84", PoPs_genre_atom, 41, 43, 0, 8.393357e+01 }, - { "Nb85", PoPs_genre_atom, 41, 44, 0, 8.4927912447e+01 }, - { "Nb86", PoPs_genre_atom, 41, 45, 0, 8.5925038326e+01 }, - { "Nb87", PoPs_genre_atom, 41, 46, 0, 8.6920361108e+01 }, - { "Nb88", PoPs_genre_atom, 41, 47, 0, 8.7918332163e+01 }, - { "Nb89", PoPs_genre_atom, 41, 48, 0, 8.8913418245e+01 }, - { "Nb90", PoPs_genre_atom, 41, 49, 0, 8.9911264845e+01 }, - { "Nb91", PoPs_genre_atom, 41, 50, 0, 9.0906996243e+01 }, - { "Nb92", PoPs_genre_atom, 41, 51, 0, 9.190719388799999e+01 }, - { "Nb93", PoPs_genre_atom, 41, 52, 0, Nb93_Mass }, - { "Nb94", PoPs_genre_atom, 41, 53, 0, 9.3907283888e+01 }, - { "Nb95", PoPs_genre_atom, 41, 54, 0, 9.4906835792e+01 }, - { "Nb96", PoPs_genre_atom, 41, 55, 0, 9.5908100647e+01 }, - { "Nb97", PoPs_genre_atom, 41, 56, 0, 9.6908098556e+01 }, - { "Nb98", PoPs_genre_atom, 41, 57, 0, 9.7910328412e+01 }, - { "Nb99", PoPs_genre_atom, 41, 58, 0, 9.8911618375e+01 }, - { "Nb100", PoPs_genre_atom, 41, 59, 0, 9.9914181619e+01 }, - { "Nb101", PoPs_genre_atom, 41, 60, 0, 1.00915252025e+02 }, - { "Nb102", PoPs_genre_atom, 41, 61, 0, 1.01918037614e+02 }, - { "Nb103", PoPs_genre_atom, 41, 62, 0, 1.02919143842e+02 }, - { "Nb104", PoPs_genre_atom, 41, 63, 0, 1.03922464701e+02 }, - { "Nb105", PoPs_genre_atom, 41, 64, 0, 1.04923936545e+02 }, - { "Nb106", PoPs_genre_atom, 41, 65, 0, 1.0592797e+02 }, - { "Nb107", PoPs_genre_atom, 41, 66, 0, 1.0693031e+02 }, - { "Nb108", PoPs_genre_atom, 41, 67, 0, 1.0793484e+02 }, - { "Nb109", PoPs_genre_atom, 41, 68, 0, 1.0893763e+02 }, - { "Nb110", PoPs_genre_atom, 41, 69, 0, 1.0994244e+02 }, - { "Nb111", PoPs_genre_atom, 41, 70, 0, 1.1094565e+02 }, - { "Nb112", PoPs_genre_atom, 41, 71, 0, 1.1195083e+02 }, - { "Nb113", PoPs_genre_atom, 41, 72, 0, 1.129547e+02 }, - { "Mo_natural", PoPs_genre_atom, 42, -1, 0, 9.594e+01 }, - { "Mo83", PoPs_genre_atom, 42, 41, 0, 8.294874e+01 }, - { "Mo84", PoPs_genre_atom, 42, 42, 0, 8.394009e+01 }, - { "Mo85", PoPs_genre_atom, 42, 43, 0, 8.493655e+01 }, - { "Mo86", PoPs_genre_atom, 42, 44, 0, 8.5930695904e+01 }, - { "Mo87", PoPs_genre_atom, 42, 45, 0, 8.6927326502e+01 }, - { "Mo88", PoPs_genre_atom, 42, 46, 0, 8.7921953241e+01 }, - { "Mo89", PoPs_genre_atom, 42, 47, 0, 8.8919480009e+01 }, - { "Mo90", PoPs_genre_atom, 42, 48, 0, 8.9913936896e+01 }, - { "Mo91", PoPs_genre_atom, 42, 49, 0, 9.0911750194e+01 }, - { "Mo92", PoPs_genre_atom, 42, 50, 0, 9.1906810991e+01 }, - { "Mo93", PoPs_genre_atom, 42, 51, 0, 9.290681261e+01 }, - { "Mo94", PoPs_genre_atom, 42, 52, 0, 9.3905088269e+01 }, - { "Mo95", PoPs_genre_atom, 42, 53, 0, 9.4905842129e+01 }, - { "Mo96", PoPs_genre_atom, 42, 54, 0, 9.5904679477e+01 }, - { "Mo97", PoPs_genre_atom, 42, 55, 0, 9.6906021465e+01 }, - { "Mo98", PoPs_genre_atom, 42, 56, 0, 9.7905408169e+01 }, - { "Mo99", PoPs_genre_atom, 42, 57, 0, 9.890771187e+01 }, - { "Mo100", PoPs_genre_atom, 42, 58, 0, 9.9907477336e+01 }, - { "Mo101", PoPs_genre_atom, 42, 59, 0, 1.00910347001e+02 }, - { "Mo102", PoPs_genre_atom, 42, 60, 0, 1.0191029736e+02 }, - { "Mo103", PoPs_genre_atom, 42, 61, 0, 1.02913207142e+02 }, - { "Mo104", PoPs_genre_atom, 42, 62, 0, 1.03913763625e+02 }, - { "Mo105", PoPs_genre_atom, 42, 63, 0, 1.0491697461e+02 }, - { "Mo106", PoPs_genre_atom, 42, 64, 0, 1.05918136802e+02 }, - { "Mo107", PoPs_genre_atom, 42, 65, 0, 1.06921692604e+02 }, - { "Mo108", PoPs_genre_atom, 42, 66, 0, 1.07923453e+02 }, - { "Mo109", PoPs_genre_atom, 42, 67, 0, 1.0892781e+02 }, - { "Mo110", PoPs_genre_atom, 42, 68, 0, 1.0992973e+02 }, - { "Mo111", PoPs_genre_atom, 42, 69, 0, 1.1093441e+02 }, - { "Mo112", PoPs_genre_atom, 42, 70, 0, 1.1193684e+02 }, - { "Mo113", PoPs_genre_atom, 42, 71, 0, 1.1294188e+02 }, - { "Mo114", PoPs_genre_atom, 42, 72, 0, 1.1394492e+02 }, - { "Mo115", PoPs_genre_atom, 42, 73, 0, 1.1495029e+02 }, - { "Tc_natural", PoPs_genre_atom, 43, -1, 0, 9.8e+01 }, - { "Tc85", PoPs_genre_atom, 43, 42, 0, 8.494883e+01 }, - { "Tc86", PoPs_genre_atom, 43, 43, 0, 8.594288e+01 }, - { "Tc87", PoPs_genre_atom, 43, 44, 0, 8.693653e+01 }, - { "Tc88", PoPs_genre_atom, 43, 45, 0, 8.7932678e+01 }, - { "Tc89", PoPs_genre_atom, 43, 46, 0, 8.8927167e+01 }, - { "Tc90", PoPs_genre_atom, 43, 47, 0, 8.9923556564e+01 }, - { "Tc91", PoPs_genre_atom, 43, 48, 0, 9.0918427639e+01 }, - { "Tc92", PoPs_genre_atom, 43, 49, 0, 9.1915260166e+01 }, - { "Tc93", PoPs_genre_atom, 43, 50, 0, 9.2910248984e+01 }, - { "Tc94", PoPs_genre_atom, 43, 51, 0, 9.3909657002e+01 }, - { "Tc95", PoPs_genre_atom, 43, 52, 0, 9.4907657084e+01 }, - { "Tc96", PoPs_genre_atom, 43, 53, 0, 9.5907871383e+01 }, - { "Tc97", PoPs_genre_atom, 43, 54, 0, 9.6906365358e+01 }, - { "Tc98", PoPs_genre_atom, 43, 55, 0, 9.7907215966e+01 }, - { "Tc99", PoPs_genre_atom, 43, 56, 0, 9.8906254747e+01 }, - { "Tc100", PoPs_genre_atom, 43, 57, 0, 9.990765778e+01 }, - { "Tc101", PoPs_genre_atom, 43, 58, 0, 1.00907314659e+02 }, - { "Tc102", PoPs_genre_atom, 43, 59, 0, 1.01909215019e+02 }, - { "Tc103", PoPs_genre_atom, 43, 60, 0, 1.02909181351e+02 }, - { "Tc104", PoPs_genre_atom, 43, 61, 0, 1.03911447454e+02 }, - { "Tc105", PoPs_genre_atom, 43, 62, 0, 1.04911660566e+02 }, - { "Tc106", PoPs_genre_atom, 43, 63, 0, 1.05914357927e+02 }, - { "Tc107", PoPs_genre_atom, 43, 64, 0, 1.06915079572e+02 }, - { "Tc108", PoPs_genre_atom, 43, 65, 0, 1.07918461226e+02 }, - { "Tc109", PoPs_genre_atom, 43, 66, 0, 1.08919982665e+02 }, - { "Tc110", PoPs_genre_atom, 43, 67, 0, 1.09923820483e+02 }, - { "Tc111", PoPs_genre_atom, 43, 68, 0, 1.1092569283e+02 }, - { "Tc112", PoPs_genre_atom, 43, 69, 0, 1.11929146493e+02 }, - { "Tc113", PoPs_genre_atom, 43, 70, 0, 1.1293159e+02 }, - { "Tc114", PoPs_genre_atom, 43, 71, 0, 1.1393588e+02 }, - { "Tc115", PoPs_genre_atom, 43, 72, 0, 1.1493869e+02 }, - { "Tc116", PoPs_genre_atom, 43, 73, 0, 1.1594337e+02 }, - { "Tc117", PoPs_genre_atom, 43, 74, 0, 1.1694648e+02 }, - { "Tc118", PoPs_genre_atom, 43, 75, 0, 1.1795148e+02 }, - { "Ru_natural", PoPs_genre_atom, 44, -1, 0, 1.0107e+02 }, - { "Ru87", PoPs_genre_atom, 44, 43, 0, 8.694918e+01 }, - { "Ru88", PoPs_genre_atom, 44, 44, 0, 8.794026e+01 }, - { "Ru89", PoPs_genre_atom, 44, 45, 0, 8.893611e+01 }, - { "Ru90", PoPs_genre_atom, 44, 46, 0, 8.992989e+01 }, - { "Ru91", PoPs_genre_atom, 44, 47, 0, 9.0926292e+01 }, - { "Ru92", PoPs_genre_atom, 44, 48, 0, 9.192012e+01 }, - { "Ru93", PoPs_genre_atom, 44, 49, 0, 9.2917052034e+01 }, - { "Ru94", PoPs_genre_atom, 44, 50, 0, 9.3911359711e+01 }, - { "Ru95", PoPs_genre_atom, 44, 51, 0, 9.4910412929e+01 }, - { "Ru96", PoPs_genre_atom, 44, 52, 0, 9.5907597835e+01 }, - { "Ru97", PoPs_genre_atom, 44, 53, 0, 9.69075547e+01 }, - { "Ru98", PoPs_genre_atom, 44, 54, 0, 9.7905287132e+01 }, - { "Ru99", PoPs_genre_atom, 44, 55, 0, 9.890593930199999e+01 }, - { "Ru100", PoPs_genre_atom, 44, 56, 0, 9.9904219476e+01 }, - { "Ru101", PoPs_genre_atom, 44, 57, 0, 1.00905582087e+02 }, - { "Ru102", PoPs_genre_atom, 44, 58, 0, 1.01904349312e+02 }, - { "Ru103", PoPs_genre_atom, 44, 59, 0, 1.02906323847e+02 }, - { "Ru104", PoPs_genre_atom, 44, 60, 0, 1.03905432701e+02 }, - { "Ru105", PoPs_genre_atom, 44, 61, 0, 1.04907752866e+02 }, - { "Ru106", PoPs_genre_atom, 44, 62, 0, 1.05907329433e+02 }, - { "Ru107", PoPs_genre_atom, 44, 63, 0, 1.06909905089e+02 }, - { "Ru108", PoPs_genre_atom, 44, 64, 0, 1.07910173465e+02 }, - { "Ru109", PoPs_genre_atom, 44, 65, 0, 1.08913203233e+02 }, - { "Ru110", PoPs_genre_atom, 44, 66, 0, 1.09914136041e+02 }, - { "Ru111", PoPs_genre_atom, 44, 67, 0, 1.10917696e+02 }, - { "Ru112", PoPs_genre_atom, 44, 68, 0, 1.11918965e+02 }, - { "Ru113", PoPs_genre_atom, 44, 69, 0, 1.12922487194e+02 }, - { "Ru114", PoPs_genre_atom, 44, 70, 0, 1.13924281e+02 }, - { "Ru115", PoPs_genre_atom, 44, 71, 0, 1.14928686173e+02 }, - { "Ru116", PoPs_genre_atom, 44, 72, 0, 1.1593081e+02 }, - { "Ru117", PoPs_genre_atom, 44, 73, 0, 1.1693558e+02 }, - { "Ru118", PoPs_genre_atom, 44, 74, 0, 1.1793782e+02 }, - { "Ru119", PoPs_genre_atom, 44, 75, 0, 1.1894284e+02 }, - { "Ru120", PoPs_genre_atom, 44, 76, 0, 1.1994531e+02 }, - { "Rh_natural", PoPs_genre_atom, 45, -1, 0, 1.029055e+02 }, - { "Rh89", PoPs_genre_atom, 45, 44, 0, 8.8948837e+01 }, - { "Rh90", PoPs_genre_atom, 45, 45, 0, 8.994287e+01 }, - { "Rh91", PoPs_genre_atom, 45, 46, 0, 9.093655e+01 }, - { "Rh92", PoPs_genre_atom, 45, 47, 0, 9.193198e+01 }, - { "Rh93", PoPs_genre_atom, 45, 48, 0, 9.292574e+01 }, - { "Rh94", PoPs_genre_atom, 45, 49, 0, 9.3921698e+01 }, - { "Rh95", PoPs_genre_atom, 45, 50, 0, 9.491589874e+01 }, - { "Rh96", PoPs_genre_atom, 45, 51, 0, 9.5914460631e+01 }, - { "Rh97", PoPs_genre_atom, 45, 52, 0, 9.6911336797e+01 }, - { "Rh98", PoPs_genre_atom, 45, 53, 0, 9.7910708158e+01 }, - { "Rh99", PoPs_genre_atom, 45, 54, 0, 9.8908132104e+01 }, - { "Rh100", PoPs_genre_atom, 45, 55, 0, 9.990812155e+01 }, - { "Rh101", PoPs_genre_atom, 45, 56, 0, 1.00906163625e+02 }, - { "Rh102", PoPs_genre_atom, 45, 57, 0, 1.01906843196e+02 }, - { "Rh103", PoPs_genre_atom, 45, 58, 0, 1.02905504292e+02 }, - { "Rh104", PoPs_genre_atom, 45, 59, 0, 1.03906655518e+02 }, - { "Rh105", PoPs_genre_atom, 45, 60, 0, 1.04905693821e+02 }, - { "Rh106", PoPs_genre_atom, 45, 61, 0, 1.05907287135e+02 }, - { "Rh107", PoPs_genre_atom, 45, 62, 0, 1.06906748423e+02 }, - { "Rh108", PoPs_genre_atom, 45, 63, 0, 1.07908728018e+02 }, - { "Rh109", PoPs_genre_atom, 45, 64, 0, 1.08908737289e+02 }, - { "Rh110", PoPs_genre_atom, 45, 65, 0, 1.09911136411e+02 }, - { "Rh111", PoPs_genre_atom, 45, 66, 0, 1.10911585913e+02 }, - { "Rh112", PoPs_genre_atom, 45, 67, 0, 1.11914394159e+02 }, - { "Rh113", PoPs_genre_atom, 45, 68, 0, 1.12915530627e+02 }, - { "Rh114", PoPs_genre_atom, 45, 69, 0, 1.13918806e+02 }, - { "Rh115", PoPs_genre_atom, 45, 70, 0, 1.14920334e+02 }, - { "Rh116", PoPs_genre_atom, 45, 71, 0, 1.15924062e+02 }, - { "Rh117", PoPs_genre_atom, 45, 72, 0, 1.1692598e+02 }, - { "Rh118", PoPs_genre_atom, 45, 73, 0, 1.1793007e+02 }, - { "Rh119", PoPs_genre_atom, 45, 74, 0, 1.1893211e+02 }, - { "Rh120", PoPs_genre_atom, 45, 75, 0, 1.1993641e+02 }, - { "Rh121", PoPs_genre_atom, 45, 76, 0, 1.2093872e+02 }, - { "Rh122", PoPs_genre_atom, 45, 77, 0, 1.2194321e+02 }, - { "Pd_natural", PoPs_genre_atom, 46, -1, 0, 1.064e+02 }, - { "Pd91", PoPs_genre_atom, 46, 45, 0, 9.094911e+01 }, - { "Pd92", PoPs_genre_atom, 46, 46, 0, 9.194042e+01 }, - { "Pd93", PoPs_genre_atom, 46, 47, 0, 9.293591e+01 }, - { "Pd94", PoPs_genre_atom, 46, 48, 0, 9.392877e+01 }, - { "Pd95", PoPs_genre_atom, 46, 49, 0, 9.492469e+01 }, - { "Pd96", PoPs_genre_atom, 46, 50, 0, 9.5918164359e+01 }, - { "Pd97", PoPs_genre_atom, 46, 51, 0, 9.6916479073e+01 }, - { "Pd98", PoPs_genre_atom, 46, 52, 0, 9.7912720902e+01 }, - { "Pd99", PoPs_genre_atom, 46, 53, 0, 9.8911767833e+01 }, - { "Pd100", PoPs_genre_atom, 46, 54, 0, 9.9908505886e+01 }, - { "Pd101", PoPs_genre_atom, 46, 55, 0, 1.00908289242e+02 }, - { "Pd102", PoPs_genre_atom, 46, 56, 0, 1.01905608544e+02 }, - { "Pd103", PoPs_genre_atom, 46, 57, 0, 1.02906087307e+02 }, - { "Pd104", PoPs_genre_atom, 46, 58, 0, 1.03904035834e+02 }, - { "Pd105", PoPs_genre_atom, 46, 59, 0, 1.0490508492e+02 }, - { "Pd106", PoPs_genre_atom, 46, 60, 0, 1.05903485715e+02 }, - { "Pd107", PoPs_genre_atom, 46, 61, 0, 1.06905133481e+02 }, - { "Pd108", PoPs_genre_atom, 46, 62, 0, 1.07903891701e+02 }, - { "Pd109", PoPs_genre_atom, 46, 63, 0, 1.08905950451e+02 }, - { "Pd110", PoPs_genre_atom, 46, 64, 0, 1.09905153254e+02 }, - { "Pd111", PoPs_genre_atom, 46, 65, 0, 1.10907670734e+02 }, - { "Pd112", PoPs_genre_atom, 46, 66, 0, 1.11907314058e+02 }, - { "Pd113", PoPs_genre_atom, 46, 67, 0, 1.12910152908e+02 }, - { "Pd114", PoPs_genre_atom, 46, 68, 0, 1.13910362638e+02 }, - { "Pd115", PoPs_genre_atom, 46, 69, 0, 1.14913683824e+02 }, - { "Pd116", PoPs_genre_atom, 46, 70, 0, 1.15914158662e+02 }, - { "Pd117", PoPs_genre_atom, 46, 71, 0, 1.16917841338e+02 }, - { "Pd118", PoPs_genre_atom, 46, 72, 0, 1.179189843e+02 }, - { "Pd119", PoPs_genre_atom, 46, 73, 0, 1.1892311e+02 }, - { "Pd120", PoPs_genre_atom, 46, 74, 0, 1.19924691878e+02 }, - { "Pd121", PoPs_genre_atom, 46, 75, 0, 1.2092887e+02 }, - { "Pd122", PoPs_genre_atom, 46, 76, 0, 1.2193055e+02 }, - { "Pd123", PoPs_genre_atom, 46, 77, 0, 1.2293493e+02 }, - { "Pd124", PoPs_genre_atom, 46, 78, 0, 1.2393688e+02 }, - { "Ag_natural", PoPs_genre_atom, 47, -1, 0, 1.07868e+02 }, - { "Ag93", PoPs_genre_atom, 47, 46, 0, 9.294978e+01 }, - { "Ag94", PoPs_genre_atom, 47, 47, 0, 9.394278e+01 }, - { "Ag95", PoPs_genre_atom, 47, 48, 0, 9.493548e+01 }, - { "Ag96", PoPs_genre_atom, 47, 49, 0, 9.593068e+01 }, - { "Ag97", PoPs_genre_atom, 47, 50, 0, 9.6923972412e+01 }, - { "Ag98", PoPs_genre_atom, 47, 51, 0, 9.7921566201e+01 }, - { "Ag99", PoPs_genre_atom, 47, 52, 0, 9.8917597178e+01 }, - { "Ag100", PoPs_genre_atom, 47, 53, 0, 9.991610425499999e+01 }, - { "Ag101", PoPs_genre_atom, 47, 54, 0, 1.00912802233e+02 }, - { "Ag102", PoPs_genre_atom, 47, 55, 0, 1.01911685e+02 }, - { "Ag103", PoPs_genre_atom, 47, 56, 0, 1.0290897272e+02 }, - { "Ag104", PoPs_genre_atom, 47, 57, 0, 1.03908629157e+02 }, - { "Ag105", PoPs_genre_atom, 47, 58, 0, 1.04906528661e+02 }, - { "Ag106", PoPs_genre_atom, 47, 59, 0, 1.05906668921e+02 }, - { "Ag107", PoPs_genre_atom, 47, 60, 0, 1.0690509682e+02 }, - { "Ag108", PoPs_genre_atom, 47, 61, 0, 1.07905955556e+02 }, - { "Ag109", PoPs_genre_atom, 47, 62, 0, 1.08904752292e+02 }, - { "Ag110", PoPs_genre_atom, 47, 63, 0, Ag110_Mass }, - { "Ag111", PoPs_genre_atom, 47, 64, 0, 1.10905291157e+02 }, - { "Ag112", PoPs_genre_atom, 47, 65, 0, 1.11907004814e+02 }, - { "Ag113", PoPs_genre_atom, 47, 66, 0, 1.12906566579e+02 }, - { "Ag114", PoPs_genre_atom, 47, 67, 0, 1.13908803704e+02 }, - { "Ag115", PoPs_genre_atom, 47, 68, 0, 1.14908762698e+02 }, - { "Ag116", PoPs_genre_atom, 47, 69, 0, 1.15911359933e+02 }, - { "Ag117", PoPs_genre_atom, 47, 70, 0, 1.16911684562e+02 }, - { "Ag118", PoPs_genre_atom, 47, 71, 0, 1.17914582768e+02 }, - { "Ag119", PoPs_genre_atom, 47, 72, 0, 1.18915665059e+02 }, - { "Ag120", PoPs_genre_atom, 47, 73, 0, 1.19918787384e+02 }, - { "Ag121", PoPs_genre_atom, 47, 74, 0, 1.20919848046e+02 }, - { "Ag122", PoPs_genre_atom, 47, 75, 0, 1.2192353e+02 }, - { "Ag123", PoPs_genre_atom, 47, 76, 0, 1.229249e+02 }, - { "Ag124", PoPs_genre_atom, 47, 77, 0, 1.2392864e+02 }, - { "Ag125", PoPs_genre_atom, 47, 78, 0, 1.2493043e+02 }, - { "Ag126", PoPs_genre_atom, 47, 79, 0, 1.259345e+02 }, - { "Ag127", PoPs_genre_atom, 47, 80, 0, 1.2693677e+02 }, - { "Ag128", PoPs_genre_atom, 47, 81, 0, 1.2794117e+02 }, - { "Ag129", PoPs_genre_atom, 47, 82, 0, 1.2894369e+02 }, - { "Ag130", PoPs_genre_atom, 47, 83, 0, 1.29950448e+02 }, - { "Cd_natural", PoPs_genre_atom, 48, -1, 0, 1.1241e+02 }, - { "Cd95", PoPs_genre_atom, 48, 47, 0, 9.494987e+01 }, - { "Cd96", PoPs_genre_atom, 48, 48, 0, 9.593977e+01 }, - { "Cd97", PoPs_genre_atom, 48, 49, 0, 9.693494e+01 }, - { "Cd98", PoPs_genre_atom, 48, 50, 0, 9.7927395546e+01 }, - { "Cd99", PoPs_genre_atom, 48, 51, 0, 9.892501e+01 }, - { "Cd100", PoPs_genre_atom, 48, 52, 0, 9.9920289525e+01 }, - { "Cd101", PoPs_genre_atom, 48, 53, 0, 1.00918681538e+02 }, - { "Cd102", PoPs_genre_atom, 48, 54, 0, 1.01914462258e+02 }, - { "Cd103", PoPs_genre_atom, 48, 55, 0, 1.02913419246e+02 }, - { "Cd104", PoPs_genre_atom, 48, 56, 0, 1.03909849475e+02 }, - { "Cd105", PoPs_genre_atom, 48, 57, 0, 1.04909467905e+02 }, - { "Cd106", PoPs_genre_atom, 48, 58, 0, 1.0590645941e+02 }, - { "Cd107", PoPs_genre_atom, 48, 59, 0, 1.06906617928e+02 }, - { "Cd108", PoPs_genre_atom, 48, 60, 0, 1.07904183683e+02 }, - { "Cd109", PoPs_genre_atom, 48, 61, 0, 1.08904982293e+02 }, - { "Cd110", PoPs_genre_atom, 48, 62, 0, 1.0990300207e+02 }, - { "Cd111", PoPs_genre_atom, 48, 63, 0, 1.10904178107e+02 }, - { "Cd112", PoPs_genre_atom, 48, 64, 0, 1.11902757809e+02 }, - { "Cd113", PoPs_genre_atom, 48, 65, 0, 1.12904401662e+02 }, - { "Cd114", PoPs_genre_atom, 48, 66, 0, 1.1390335854e+02 }, - { "Cd115", PoPs_genre_atom, 48, 67, 0, Cd115_Mass }, - { "Cd116", PoPs_genre_atom, 48, 68, 0, 1.15904755809e+02 }, - { "Cd117", PoPs_genre_atom, 48, 69, 0, 1.16907218618e+02 }, - { "Cd118", PoPs_genre_atom, 48, 70, 0, 1.1790691453e+02 }, - { "Cd119", PoPs_genre_atom, 48, 71, 0, 1.18909921597e+02 }, - { "Cd120", PoPs_genre_atom, 48, 72, 0, 1.19909850129e+02 }, - { "Cd121", PoPs_genre_atom, 48, 73, 0, 1.20912977363e+02 }, - { "Cd122", PoPs_genre_atom, 48, 74, 0, 1.21913332432e+02 }, - { "Cd123", PoPs_genre_atom, 48, 75, 0, 1.22917002999e+02 }, - { "Cd124", PoPs_genre_atom, 48, 76, 0, 1.23917647616e+02 }, - { "Cd125", PoPs_genre_atom, 48, 77, 0, 1.2492124637e+02 }, - { "Cd126", PoPs_genre_atom, 48, 78, 0, 1.25922353321e+02 }, - { "Cd127", PoPs_genre_atom, 48, 79, 0, 1.26926443864e+02 }, - { "Cd128", PoPs_genre_atom, 48, 80, 0, 1.27927762285e+02 }, - { "Cd129", PoPs_genre_atom, 48, 81, 0, 1.2893215e+02 }, - { "Cd130", PoPs_genre_atom, 48, 82, 0, 1.29933901937e+02 }, - { "Cd131", PoPs_genre_atom, 48, 83, 0, 1.3094067e+02 }, - { "Cd132", PoPs_genre_atom, 48, 84, 0, 1.3194555e+02 }, - { "In_natural", PoPs_genre_atom, 49, -1, 0, 1.1482e+02 }, - { "In97", PoPs_genre_atom, 49, 48, 0, 9.694954e+01 }, - { "In98", PoPs_genre_atom, 49, 49, 0, 9.794214e+01 }, - { "In99", PoPs_genre_atom, 49, 50, 0, 9.893422e+01 }, - { "In100", PoPs_genre_atom, 49, 51, 0, 9.9931110851e+01 }, - { "In101", PoPs_genre_atom, 49, 52, 0, 1.0092634e+02 }, - { "In102", PoPs_genre_atom, 49, 53, 0, 1.01924090238e+02 }, - { "In103", PoPs_genre_atom, 49, 54, 0, 1.02919914188e+02 }, - { "In104", PoPs_genre_atom, 49, 55, 0, 1.03918296171e+02 }, - { "In105", PoPs_genre_atom, 49, 56, 0, 1.0491467354e+02 }, - { "In106", PoPs_genre_atom, 49, 57, 0, 1.05913465411e+02 }, - { "In107", PoPs_genre_atom, 49, 58, 0, 1.069102951e+02 }, - { "In108", PoPs_genre_atom, 49, 59, 0, 1.0790969818e+02 }, - { "In109", PoPs_genre_atom, 49, 60, 0, 1.08907150507e+02 }, - { "In110", PoPs_genre_atom, 49, 61, 0, 1.09907165274e+02 }, - { "In111", PoPs_genre_atom, 49, 62, 0, 1.10905103278e+02 }, - { "In112", PoPs_genre_atom, 49, 63, 0, 1.11905532331e+02 }, - { "In113", PoPs_genre_atom, 49, 64, 0, 1.12904057761e+02 }, - { "In114", PoPs_genre_atom, 49, 65, 0, 1.13904913876e+02 }, - { "In115", PoPs_genre_atom, 49, 66, 0, 1.14903878484e+02 }, - { "In116", PoPs_genre_atom, 49, 67, 0, In116_Mass }, - { "In117", PoPs_genre_atom, 49, 68, 0, 1.16904513564e+02 }, - { "In118", PoPs_genre_atom, 49, 69, 0, 1.17906354367e+02 }, - { "In119", PoPs_genre_atom, 49, 70, 0, 1.1890584535e+02 }, - { "In120", PoPs_genre_atom, 49, 71, 0, 1.19907959608e+02 }, - { "In121", PoPs_genre_atom, 49, 72, 0, 1.20907845822e+02 }, - { "In122", PoPs_genre_atom, 49, 73, 0, 1.2191027601e+02 }, - { "In123", PoPs_genre_atom, 49, 74, 0, 1.22910438276e+02 }, - { "In124", PoPs_genre_atom, 49, 75, 0, 1.23913175231e+02 }, - { "In125", PoPs_genre_atom, 49, 76, 0, 1.24913600588e+02 }, - { "In126", PoPs_genre_atom, 49, 77, 0, 1.25916463857e+02 }, - { "In127", PoPs_genre_atom, 49, 78, 0, 1.26917353091e+02 }, - { "In128", PoPs_genre_atom, 49, 79, 0, 1.27920172328e+02 }, - { "In129", PoPs_genre_atom, 49, 80, 0, 1.2892169698e+02 }, - { "In130", PoPs_genre_atom, 49, 81, 0, 1.29924970049e+02 }, - { "In131", PoPs_genre_atom, 49, 82, 0, 1.30926851767e+02 }, - { "In132", PoPs_genre_atom, 49, 83, 0, 1.3193299026e+02 }, - { "In133", PoPs_genre_atom, 49, 84, 0, 1.3293781e+02 }, - { "In134", PoPs_genre_atom, 49, 85, 0, 1.3394415e+02 }, - { "In135", PoPs_genre_atom, 49, 86, 0, 1.3494933e+02 }, - { "Sn_natural", PoPs_genre_atom, 50, -1, 0, 1.1869e+02 }, - { "Sn99", PoPs_genre_atom, 50, 49, 0, 9.894933e+01 }, - { "Sn100", PoPs_genre_atom, 50, 50, 0, 9.9939044343e+01 }, - { "Sn101", PoPs_genre_atom, 50, 51, 0, 1.0093606e+02 }, - { "Sn102", PoPs_genre_atom, 50, 52, 0, 1.01930295324e+02 }, - { "Sn103", PoPs_genre_atom, 50, 53, 0, 1.029281e+02 }, - { "Sn104", PoPs_genre_atom, 50, 54, 0, 1.03923143223e+02 }, - { "Sn105", PoPs_genre_atom, 50, 55, 0, 1.04921349437e+02 }, - { "Sn106", PoPs_genre_atom, 50, 56, 0, 1.0591688062e+02 }, - { "Sn107", PoPs_genre_atom, 50, 57, 0, 1.06915644329e+02 }, - { "Sn108", PoPs_genre_atom, 50, 58, 0, 1.07911925378e+02 }, - { "Sn109", PoPs_genre_atom, 50, 59, 0, 1.08911283214e+02 }, - { "Sn110", PoPs_genre_atom, 50, 60, 0, 1.09907842791e+02 }, - { "Sn111", PoPs_genre_atom, 50, 61, 0, 1.1090773446e+02 }, - { "Sn112", PoPs_genre_atom, 50, 62, 0, 1.11904818207e+02 }, - { "Sn113", PoPs_genre_atom, 50, 63, 0, 1.12905170577e+02 }, - { "Sn114", PoPs_genre_atom, 50, 64, 0, 1.13902778869e+02 }, - { "Sn115", PoPs_genre_atom, 50, 65, 0, 1.14903342397e+02 }, - { "Sn116", PoPs_genre_atom, 50, 66, 0, 1.1590174053e+02 }, - { "Sn117", PoPs_genre_atom, 50, 67, 0, 1.16902951656e+02 }, - { "Sn118", PoPs_genre_atom, 50, 68, 0, 1.17901603167e+02 }, - { "Sn119", PoPs_genre_atom, 50, 69, 0, 1.1890330763e+02 }, - { "Sn120", PoPs_genre_atom, 50, 70, 0, 1.19902194676e+02 }, - { "Sn121", PoPs_genre_atom, 50, 71, 0, 1.2090423548e+02 }, - { "Sn122", PoPs_genre_atom, 50, 72, 0, 1.21903439046e+02 }, - { "Sn123", PoPs_genre_atom, 50, 73, 0, 1.22905720838e+02 }, - { "Sn124", PoPs_genre_atom, 50, 74, 0, 1.23905273946e+02 }, - { "Sn125", PoPs_genre_atom, 50, 75, 0, 1.24907784125e+02 }, - { "Sn126", PoPs_genre_atom, 50, 76, 0, 1.2590765328e+02 }, - { "Sn127", PoPs_genre_atom, 50, 77, 0, 1.26910360024e+02 }, - { "Sn128", PoPs_genre_atom, 50, 78, 0, 1.27910536624e+02 }, - { "Sn129", PoPs_genre_atom, 50, 79, 0, 1.28913479e+02 }, - { "Sn130", PoPs_genre_atom, 50, 80, 0, 1.29913967295e+02 }, - { "Sn131", PoPs_genre_atom, 50, 81, 0, 1.30916999769e+02 }, - { "Sn132", PoPs_genre_atom, 50, 82, 0, 1.31917815713e+02 }, - { "Sn133", PoPs_genre_atom, 50, 83, 0, 1.32923829249e+02 }, - { "Sn134", PoPs_genre_atom, 50, 84, 0, 1.33928291765e+02 }, - { "Sn135", PoPs_genre_atom, 50, 85, 0, 1.3493473e+02 }, - { "Sn136", PoPs_genre_atom, 50, 86, 0, 1.3593934e+02 }, - { "Sn137", PoPs_genre_atom, 50, 87, 0, 1.3694599e+02 }, - { "Sb_natural", PoPs_genre_atom, 51, -1, 0, 1.2175e+02 }, - { "Sb103", PoPs_genre_atom, 51, 52, 0, 1.0293969e+02 }, - { "Sb104", PoPs_genre_atom, 51, 53, 0, 1.03936472e+02 }, - { "Sb105", PoPs_genre_atom, 51, 54, 0, 1.04931486348e+02 }, - { "Sb106", PoPs_genre_atom, 51, 55, 0, 1.05928791e+02 }, - { "Sb107", PoPs_genre_atom, 51, 56, 0, 1.0692415e+02 }, - { "Sb108", PoPs_genre_atom, 51, 57, 0, 1.0792216e+02 }, - { "Sb109", PoPs_genre_atom, 51, 58, 0, 1.08918132426e+02 }, - { "Sb110", PoPs_genre_atom, 51, 59, 0, 1.09916753e+02 }, - { "Sb111", PoPs_genre_atom, 51, 60, 0, 1.10913163e+02 }, - { "Sb112", PoPs_genre_atom, 51, 61, 0, 1.11912398009e+02 }, - { "Sb113", PoPs_genre_atom, 51, 62, 0, 1.12909371672e+02 }, - { "Sb114", PoPs_genre_atom, 51, 63, 0, 1.13909269e+02 }, - { "Sb115", PoPs_genre_atom, 51, 64, 0, 1.14906598e+02 }, - { "Sb116", PoPs_genre_atom, 51, 65, 0, 1.15906793629e+02 }, - { "Sb117", PoPs_genre_atom, 51, 66, 0, 1.16904835941e+02 }, - { "Sb118", PoPs_genre_atom, 51, 67, 0, 1.17905528731e+02 }, - { "Sb119", PoPs_genre_atom, 51, 68, 0, 1.18903942009e+02 }, - { "Sb120", PoPs_genre_atom, 51, 69, 0, 1.19905072427e+02 }, - { "Sb121", PoPs_genre_atom, 51, 70, 0, 1.20903815686e+02 }, - { "Sb122", PoPs_genre_atom, 51, 71, 0, 1.21905173651e+02 }, - { "Sb123", PoPs_genre_atom, 51, 72, 0, 1.2290421397e+02 }, - { "Sb124", PoPs_genre_atom, 51, 73, 0, Sb124_Mass }, - { "Sb125", PoPs_genre_atom, 51, 74, 0, 1.24905253818e+02 }, - { "Sb126", PoPs_genre_atom, 51, 75, 0, 1.2590724748e+02 }, - { "Sb127", PoPs_genre_atom, 51, 76, 0, 1.26906923609e+02 }, - { "Sb128", PoPs_genre_atom, 51, 77, 0, 1.27909169001e+02 }, - { "Sb129", PoPs_genre_atom, 51, 78, 0, 1.28909148442e+02 }, - { "Sb130", PoPs_genre_atom, 51, 79, 0, 1.29911656324e+02 }, - { "Sb131", PoPs_genre_atom, 51, 80, 0, 1.30911982275e+02 }, - { "Sb132", PoPs_genre_atom, 51, 81, 0, 1.31914466896e+02 }, - { "Sb133", PoPs_genre_atom, 51, 82, 0, 1.3291525163e+02 }, - { "Sb134", PoPs_genre_atom, 51, 83, 0, 1.33920379744e+02 }, - { "Sb135", PoPs_genre_atom, 51, 84, 0, 1.34925165771e+02 }, - { "Sb136", PoPs_genre_atom, 51, 85, 0, 1.3593035e+02 }, - { "Sb137", PoPs_genre_atom, 51, 86, 0, 1.3693531e+02 }, - { "Sb138", PoPs_genre_atom, 51, 87, 0, 1.3794079e+02 }, - { "Sb139", PoPs_genre_atom, 51, 88, 0, 1.3894598e+02 }, - { "Te_natural", PoPs_genre_atom, 52, -1, 0, 1.276e+02 }, - { "Te105", PoPs_genre_atom, 52, 53, 0, 1.0494364e+02 }, - { "Te106", PoPs_genre_atom, 52, 54, 0, 1.05937504237e+02 }, - { "Te107", PoPs_genre_atom, 52, 55, 0, 1.06935006e+02 }, - { "Te108", PoPs_genre_atom, 52, 56, 0, 1.07929444597e+02 }, - { "Te109", PoPs_genre_atom, 52, 57, 0, 1.08927415515e+02 }, - { "Te110", PoPs_genre_atom, 52, 58, 0, 1.09922407316e+02 }, - { "Te111", PoPs_genre_atom, 52, 59, 0, 1.10921110692e+02 }, - { "Te112", PoPs_genre_atom, 52, 60, 0, 1.11917013672e+02 }, - { "Te113", PoPs_genre_atom, 52, 61, 0, 1.12915891e+02 }, - { "Te114", PoPs_genre_atom, 52, 62, 0, 1.13912089e+02 }, - { "Te115", PoPs_genre_atom, 52, 63, 0, 1.14911902e+02 }, - { "Te116", PoPs_genre_atom, 52, 64, 0, 1.1590846e+02 }, - { "Te117", PoPs_genre_atom, 52, 65, 0, 1.16908644719e+02 }, - { "Te118", PoPs_genre_atom, 52, 66, 0, 1.17905827581e+02 }, - { "Te119", PoPs_genre_atom, 52, 67, 0, 1.18906403645e+02 }, - { "Te120", PoPs_genre_atom, 52, 68, 0, 1.19904020222e+02 }, - { "Te121", PoPs_genre_atom, 52, 69, 0, 1.20904936424e+02 }, - { "Te122", PoPs_genre_atom, 52, 70, 0, 1.21903043898e+02 }, - { "Te123", PoPs_genre_atom, 52, 71, 0, 1.22904270029e+02 }, - { "Te124", PoPs_genre_atom, 52, 72, 0, 1.23902817896e+02 }, - { "Te125", PoPs_genre_atom, 52, 73, 0, 1.24904430731e+02 }, - { "Te126", PoPs_genre_atom, 52, 74, 0, 1.25903311696e+02 }, - { "Te127", PoPs_genre_atom, 52, 75, 0, Te127_Mass }, - { "Te128", PoPs_genre_atom, 52, 76, 0, 1.27904463056e+02 }, - { "Te129", PoPs_genre_atom, 52, 77, 0, Te129_Mass }, - { "Te130", PoPs_genre_atom, 52, 78, 0, 1.29906224399e+02 }, - { "Te131", PoPs_genre_atom, 52, 79, 0, 1.30908523864e+02 }, - { "Te132", PoPs_genre_atom, 52, 80, 0, 1.3190855316e+02 }, - { "Te133", PoPs_genre_atom, 52, 81, 0, 1.32910955306e+02 }, - { "Te134", PoPs_genre_atom, 52, 82, 0, 1.33911368737e+02 }, - { "Te135", PoPs_genre_atom, 52, 83, 0, 1.34916448592e+02 }, - { "Te136", PoPs_genre_atom, 52, 84, 0, 1.35920101246e+02 }, - { "Te137", PoPs_genre_atom, 52, 85, 0, 1.36925322954e+02 }, - { "Te138", PoPs_genre_atom, 52, 86, 0, 1.3792922e+02 }, - { "Te139", PoPs_genre_atom, 52, 87, 0, 1.3893473e+02 }, - { "Te140", PoPs_genre_atom, 52, 88, 0, 1.3993885e+02 }, - { "Te141", PoPs_genre_atom, 52, 89, 0, 1.4094465e+02 }, - { "Te142", PoPs_genre_atom, 52, 90, 0, 1.4194908e+02 }, - { "I_natural", PoPs_genre_atom, 53, -1, 0, 1.269045e+02 }, - { "I108", PoPs_genre_atom, 53, 55, 0, 1.07943475e+02 }, - { "I109", PoPs_genre_atom, 53, 56, 0, 1.08938149417e+02 }, - { "I110", PoPs_genre_atom, 53, 57, 0, 1.09935242e+02 }, - { "I111", PoPs_genre_atom, 53, 58, 0, 1.10930276e+02 }, - { "I112", PoPs_genre_atom, 53, 59, 0, 1.1192797e+02 }, - { "I113", PoPs_genre_atom, 53, 60, 0, 1.12923640583e+02 }, - { "I114", PoPs_genre_atom, 53, 61, 0, 1.1392185e+02 }, - { "I115", PoPs_genre_atom, 53, 62, 0, 1.14918048e+02 }, - { "I116", PoPs_genre_atom, 53, 63, 0, 1.15916808633e+02 }, - { "I117", PoPs_genre_atom, 53, 64, 0, 1.1691365e+02 }, - { "I118", PoPs_genre_atom, 53, 65, 0, 1.17913074e+02 }, - { "I119", PoPs_genre_atom, 53, 66, 0, 1.18910074e+02 }, - { "I120", PoPs_genre_atom, 53, 67, 0, 1.19910048173e+02 }, - { "I121", PoPs_genre_atom, 53, 68, 0, 1.20907366811e+02 }, - { "I122", PoPs_genre_atom, 53, 69, 0, 1.21907589284e+02 }, - { "I123", PoPs_genre_atom, 53, 70, 0, 1.22905588965e+02 }, - { "I124", PoPs_genre_atom, 53, 71, 0, 1.23906209852e+02 }, - { "I125", PoPs_genre_atom, 53, 72, 0, 1.24904630164e+02 }, - { "I126", PoPs_genre_atom, 53, 73, 0, 1.25905624153e+02 }, - { "I127", PoPs_genre_atom, 53, 74, 0, 1.26904472681e+02 }, - { "I128", PoPs_genre_atom, 53, 75, 0, 1.27905809443e+02 }, - { "I129", PoPs_genre_atom, 53, 76, 0, 1.28904987722e+02 }, - { "I130", PoPs_genre_atom, 53, 77, 0, 1.29906674247e+02 }, - { "I131", PoPs_genre_atom, 53, 78, 0, 1.30906124609e+02 }, - { "I132", PoPs_genre_atom, 53, 79, 0, 1.31907997381e+02 }, - { "I133", PoPs_genre_atom, 53, 80, 0, 1.32907796939e+02 }, - { "I134", PoPs_genre_atom, 53, 81, 0, 1.33909744465e+02 }, - { "I135", PoPs_genre_atom, 53, 82, 0, 1.34910048121e+02 }, - { "I136", PoPs_genre_atom, 53, 83, 0, 1.35914653993e+02 }, - { "I137", PoPs_genre_atom, 53, 84, 0, 1.3691787084e+02 }, - { "I138", PoPs_genre_atom, 53, 85, 0, 1.37922349591e+02 }, - { "I139", PoPs_genre_atom, 53, 86, 0, 1.38926099478e+02 }, - { "I140", PoPs_genre_atom, 53, 87, 0, 1.39931e+02 }, - { "I141", PoPs_genre_atom, 53, 88, 0, 1.4093503e+02 }, - { "I142", PoPs_genre_atom, 53, 89, 0, 1.4194018e+02 }, - { "I143", PoPs_genre_atom, 53, 90, 0, 1.4294456e+02 }, - { "I144", PoPs_genre_atom, 53, 91, 0, 1.4394999e+02 }, - { "Xe_natural", PoPs_genre_atom, 54, -1, 0, 1.313e+02 }, - { "Xe110", PoPs_genre_atom, 54, 56, 0, 1.09944278068e+02 }, - { "Xe111", PoPs_genre_atom, 54, 57, 0, 1.10941602e+02 }, - { "Xe112", PoPs_genre_atom, 54, 58, 0, 1.11935623112e+02 }, - { "Xe113", PoPs_genre_atom, 54, 59, 0, 1.12933341174e+02 }, - { "Xe114", PoPs_genre_atom, 54, 60, 0, 1.13927980306e+02 }, - { "Xe115", PoPs_genre_atom, 54, 61, 0, 1.1492629392e+02 }, - { "Xe116", PoPs_genre_atom, 54, 62, 0, 1.15921581087e+02 }, - { "Xe117", PoPs_genre_atom, 54, 63, 0, 1.16920358735e+02 }, - { "Xe118", PoPs_genre_atom, 54, 64, 0, 1.17916178655e+02 }, - { "Xe119", PoPs_genre_atom, 54, 65, 0, 1.18915410688e+02 }, - { "Xe120", PoPs_genre_atom, 54, 66, 0, 1.19911784244e+02 }, - { "Xe121", PoPs_genre_atom, 54, 67, 0, 1.20911461829e+02 }, - { "Xe122", PoPs_genre_atom, 54, 68, 0, 1.21908367632e+02 }, - { "Xe123", PoPs_genre_atom, 54, 69, 0, 1.2290848191e+02 }, - { "Xe124", PoPs_genre_atom, 54, 70, 0, 1.23905893003e+02 }, - { "Xe125", PoPs_genre_atom, 54, 71, 0, 1.24906395464e+02 }, - { "Xe126", PoPs_genre_atom, 54, 72, 0, 1.25904273634e+02 }, - { "Xe127", PoPs_genre_atom, 54, 73, 0, 1.26905183723e+02 }, - { "Xe128", PoPs_genre_atom, 54, 74, 0, 1.27903531275e+02 }, - { "Xe129", PoPs_genre_atom, 54, 75, 0, 1.28904779435e+02 }, - { "Xe130", PoPs_genre_atom, 54, 76, 0, 1.29903508007e+02 }, - { "Xe131", PoPs_genre_atom, 54, 77, 0, 1.30905082362e+02 }, - { "Xe132", PoPs_genre_atom, 54, 78, 0, 1.31904153457e+02 }, - { "Xe133", PoPs_genre_atom, 54, 79, 0, 1.32905910722e+02 }, - { "Xe134", PoPs_genre_atom, 54, 80, 0, 1.33905394464e+02 }, - { "Xe135", PoPs_genre_atom, 54, 81, 0, 1.34907227495e+02 }, - { "Xe136", PoPs_genre_atom, 54, 82, 0, 1.35907218794e+02 }, - { "Xe137", PoPs_genre_atom, 54, 83, 0, 1.36911562125e+02 }, - { "Xe138", PoPs_genre_atom, 54, 84, 0, 1.37913954475e+02 }, - { "Xe139", PoPs_genre_atom, 54, 85, 0, 1.38918792936e+02 }, - { "Xe140", PoPs_genre_atom, 54, 86, 0, 1.39921640943e+02 }, - { "Xe141", PoPs_genre_atom, 54, 87, 0, 1.40926648049e+02 }, - { "Xe142", PoPs_genre_atom, 54, 88, 0, 1.4192970959e+02 }, - { "Xe143", PoPs_genre_atom, 54, 89, 0, 1.4293511e+02 }, - { "Xe144", PoPs_genre_atom, 54, 90, 0, 1.4393851e+02 }, - { "Xe145", PoPs_genre_atom, 54, 91, 0, 1.4494407e+02 }, - { "Xe146", PoPs_genre_atom, 54, 92, 0, 1.4594775e+02 }, - { "Xe147", PoPs_genre_atom, 54, 93, 0, 1.4695356e+02 }, - { "Cs_natural", PoPs_genre_atom, 55, -1, 0, 1.329054e+02 }, - { "Cs112", PoPs_genre_atom, 55, 57, 0, 1.11950301e+02 }, - { "Cs113", PoPs_genre_atom, 55, 58, 0, 1.12944493274e+02 }, - { "Cs114", PoPs_genre_atom, 55, 59, 0, 1.1394145e+02 }, - { "Cs115", PoPs_genre_atom, 55, 60, 0, 1.1493591e+02 }, - { "Cs116", PoPs_genre_atom, 55, 61, 0, 1.15933367e+02 }, - { "Cs117", PoPs_genre_atom, 55, 62, 0, 1.16928670701e+02 }, - { "Cs118", PoPs_genre_atom, 55, 63, 0, 1.17926559494e+02 }, - { "Cs119", PoPs_genre_atom, 55, 64, 0, 1.18922377304e+02 }, - { "Cs120", PoPs_genre_atom, 55, 65, 0, 1.19920677253e+02 }, - { "Cs121", PoPs_genre_atom, 55, 66, 0, 1.20917229209e+02 }, - { "Cs122", PoPs_genre_atom, 55, 67, 0, 1.21916113434e+02 }, - { "Cs123", PoPs_genre_atom, 55, 68, 0, 1.22912996036e+02 }, - { "Cs124", PoPs_genre_atom, 55, 69, 0, 1.23912257798e+02 }, - { "Cs125", PoPs_genre_atom, 55, 70, 0, 1.2490972827e+02 }, - { "Cs126", PoPs_genre_atom, 55, 71, 0, 1.25909451977e+02 }, - { "Cs127", PoPs_genre_atom, 55, 72, 0, 1.26907417525e+02 }, - { "Cs128", PoPs_genre_atom, 55, 73, 0, 1.27907748866e+02 }, - { "Cs129", PoPs_genre_atom, 55, 74, 0, 1.28906064426e+02 }, - { "Cs130", PoPs_genre_atom, 55, 75, 0, 1.29906708552e+02 }, - { "Cs131", PoPs_genre_atom, 55, 76, 0, 1.30905463926e+02 }, - { "Cs132", PoPs_genre_atom, 55, 77, 0, 1.3190643426e+02 }, - { "Cs133", PoPs_genre_atom, 55, 78, 0, 1.32905451932e+02 }, - { "Cs134", PoPs_genre_atom, 55, 79, 0, 1.33906718475e+02 }, - { "Cs135", PoPs_genre_atom, 55, 80, 0, 1.34905977008e+02 }, - { "Cs136", PoPs_genre_atom, 55, 81, 0, 1.35907311576e+02 }, - { "Cs137", PoPs_genre_atom, 55, 82, 0, 1.36907089473e+02 }, - { "Cs138", PoPs_genre_atom, 55, 83, 0, 1.37911016704e+02 }, - { "Cs139", PoPs_genre_atom, 55, 84, 0, 1.38913363999e+02 }, - { "Cs140", PoPs_genre_atom, 55, 85, 0, 1.39917282354e+02 }, - { "Cs141", PoPs_genre_atom, 55, 86, 0, 1.40920045752e+02 }, - { "Cs142", PoPs_genre_atom, 55, 87, 0, 1.41924298927e+02 }, - { "Cs143", PoPs_genre_atom, 55, 88, 0, 1.4292735175e+02 }, - { "Cs144", PoPs_genre_atom, 55, 89, 0, 1.43932076914e+02 }, - { "Cs145", PoPs_genre_atom, 55, 90, 0, 1.4493552617e+02 }, - { "Cs146", PoPs_genre_atom, 55, 91, 0, 1.45940289423e+02 }, - { "Cs147", PoPs_genre_atom, 55, 92, 0, 1.46944155008e+02 }, - { "Cs148", PoPs_genre_atom, 55, 93, 0, 1.47949218153e+02 }, - { "Cs149", PoPs_genre_atom, 55, 94, 0, 1.4895293e+02 }, - { "Cs150", PoPs_genre_atom, 55, 95, 0, 1.4995817e+02 }, - { "Cs151", PoPs_genre_atom, 55, 96, 0, 1.5096219e+02 }, - { "Ba_natural", PoPs_genre_atom, 56, -1, 0, 1.3733e+02 }, - { "Ba114", PoPs_genre_atom, 56, 58, 0, 1.13950675405e+02 }, - { "Ba115", PoPs_genre_atom, 56, 59, 0, 1.1494737e+02 }, - { "Ba116", PoPs_genre_atom, 56, 60, 0, 1.1594138e+02 }, - { "Ba117", PoPs_genre_atom, 56, 61, 0, 1.16938499e+02 }, - { "Ba118", PoPs_genre_atom, 56, 62, 0, 1.1793304e+02 }, - { "Ba119", PoPs_genre_atom, 56, 63, 0, 1.18930659661e+02 }, - { "Ba120", PoPs_genre_atom, 56, 64, 0, 1.19926044974e+02 }, - { "Ba121", PoPs_genre_atom, 56, 65, 0, 1.20924054499e+02 }, - { "Ba122", PoPs_genre_atom, 56, 66, 0, 1.21919904e+02 }, - { "Ba123", PoPs_genre_atom, 56, 67, 0, 1.22918781036e+02 }, - { "Ba124", PoPs_genre_atom, 56, 68, 0, 1.23915093603e+02 }, - { "Ba125", PoPs_genre_atom, 56, 69, 0, 1.24914472912e+02 }, - { "Ba126", PoPs_genre_atom, 56, 70, 0, 1.25911250177e+02 }, - { "Ba127", PoPs_genre_atom, 56, 71, 0, 1.26911093797e+02 }, - { "Ba128", PoPs_genre_atom, 56, 72, 0, 1.27908317698e+02 }, - { "Ba129", PoPs_genre_atom, 56, 73, 0, 1.28908679439e+02 }, - { "Ba130", PoPs_genre_atom, 56, 74, 0, 1.29906320811e+02 }, - { "Ba131", PoPs_genre_atom, 56, 75, 0, 1.30906941118e+02 }, - { "Ba132", PoPs_genre_atom, 56, 76, 0, 1.31905061288e+02 }, - { "Ba133", PoPs_genre_atom, 56, 77, 0, 1.3290600749e+02 }, - { "Ba134", PoPs_genre_atom, 56, 78, 0, 1.33904508383e+02 }, - { "Ba135", PoPs_genre_atom, 56, 79, 0, 1.34905688591e+02 }, - { "Ba136", PoPs_genre_atom, 56, 80, 0, 1.35904575945e+02 }, - { "Ba137", PoPs_genre_atom, 56, 81, 0, 1.36905827384e+02 }, - { "Ba138", PoPs_genre_atom, 56, 82, 0, 1.37905247237e+02 }, - { "Ba139", PoPs_genre_atom, 56, 83, 0, 1.38908841341e+02 }, - { "Ba140", PoPs_genre_atom, 56, 84, 0, 1.39910604505e+02 }, - { "Ba141", PoPs_genre_atom, 56, 85, 0, 1.40914411009e+02 }, - { "Ba142", PoPs_genre_atom, 56, 86, 0, 1.4191645341e+02 }, - { "Ba143", PoPs_genre_atom, 56, 87, 0, 1.42920626719e+02 }, - { "Ba144", PoPs_genre_atom, 56, 88, 0, 1.43922952853e+02 }, - { "Ba145", PoPs_genre_atom, 56, 89, 0, 1.44927627032e+02 }, - { "Ba146", PoPs_genre_atom, 56, 90, 0, 1.45930219572e+02 }, - { "Ba147", PoPs_genre_atom, 56, 91, 0, 1.46934945e+02 }, - { "Ba148", PoPs_genre_atom, 56, 92, 0, 1.47937720047e+02 }, - { "Ba149", PoPs_genre_atom, 56, 93, 0, 1.4894258e+02 }, - { "Ba150", PoPs_genre_atom, 56, 94, 0, 1.4994568e+02 }, - { "Ba151", PoPs_genre_atom, 56, 95, 0, 1.5095081e+02 }, - { "Ba152", PoPs_genre_atom, 56, 96, 0, 1.5195427e+02 }, - { "Ba153", PoPs_genre_atom, 56, 97, 0, 1.5295961e+02 }, - { "La_natural", PoPs_genre_atom, 57, -1, 0, 1.389055e+02 }, - { "La117", PoPs_genre_atom, 57, 60, 0, 1.16950068e+02 }, - { "La118", PoPs_genre_atom, 57, 61, 0, 1.1794673e+02 }, - { "La119", PoPs_genre_atom, 57, 62, 0, 1.1894099e+02 }, - { "La120", PoPs_genre_atom, 57, 63, 0, 1.1993807e+02 }, - { "La121", PoPs_genre_atom, 57, 64, 0, 1.2093301e+02 }, - { "La122", PoPs_genre_atom, 57, 65, 0, 1.2193071e+02 }, - { "La123", PoPs_genre_atom, 57, 66, 0, 1.2292624e+02 }, - { "La124", PoPs_genre_atom, 57, 67, 0, 1.23924574275e+02 }, - { "La125", PoPs_genre_atom, 57, 68, 0, 1.24920816034e+02 }, - { "La126", PoPs_genre_atom, 57, 69, 0, 1.25919512667e+02 }, - { "La127", PoPs_genre_atom, 57, 70, 0, 1.26916375448e+02 }, - { "La128", PoPs_genre_atom, 57, 71, 0, 1.27915585177e+02 }, - { "La129", PoPs_genre_atom, 57, 72, 0, 1.28912692815e+02 }, - { "La130", PoPs_genre_atom, 57, 73, 0, 1.29912368724e+02 }, - { "La131", PoPs_genre_atom, 57, 74, 0, 1.3091007e+02 }, - { "La132", PoPs_genre_atom, 57, 75, 0, 1.31910101145e+02 }, - { "La133", PoPs_genre_atom, 57, 76, 0, 1.32908218e+02 }, - { "La134", PoPs_genre_atom, 57, 77, 0, 1.33908514011e+02 }, - { "La135", PoPs_genre_atom, 57, 78, 0, 1.34906976844e+02 }, - { "La136", PoPs_genre_atom, 57, 79, 0, 1.35907635536e+02 }, - { "La137", PoPs_genre_atom, 57, 80, 0, 1.36906493598e+02 }, - { "La138", PoPs_genre_atom, 57, 81, 0, 1.3790711193e+02 }, - { "La139", PoPs_genre_atom, 57, 82, 0, 1.38906353267e+02 }, - { "La140", PoPs_genre_atom, 57, 83, 0, 1.39909477645e+02 }, - { "La141", PoPs_genre_atom, 57, 84, 0, 1.40910962152e+02 }, - { "La142", PoPs_genre_atom, 57, 85, 0, 1.4191407913e+02 }, - { "La143", PoPs_genre_atom, 57, 86, 0, 1.4291606272e+02 }, - { "La144", PoPs_genre_atom, 57, 87, 0, 1.43919599647e+02 }, - { "La145", PoPs_genre_atom, 57, 88, 0, 1.44921645401e+02 }, - { "La146", PoPs_genre_atom, 57, 89, 0, 1.4592579346e+02 }, - { "La147", PoPs_genre_atom, 57, 90, 0, 1.46928235284e+02 }, - { "La148", PoPs_genre_atom, 57, 91, 0, 1.47932228868e+02 }, - { "La149", PoPs_genre_atom, 57, 92, 0, 1.48934734e+02 }, - { "La150", PoPs_genre_atom, 57, 93, 0, 1.4993877e+02 }, - { "La151", PoPs_genre_atom, 57, 94, 0, 1.5094172e+02 }, - { "La152", PoPs_genre_atom, 57, 95, 0, 1.5194625e+02 }, - { "La153", PoPs_genre_atom, 57, 96, 0, 1.5294962e+02 }, - { "La154", PoPs_genre_atom, 57, 97, 0, 1.539545e+02 }, - { "La155", PoPs_genre_atom, 57, 98, 0, 1.5495835e+02 }, - { "Ce_natural", PoPs_genre_atom, 58, -1, 0, 1.4012e+02 }, - { "Ce119", PoPs_genre_atom, 58, 61, 0, 1.1895276e+02 }, - { "Ce120", PoPs_genre_atom, 58, 62, 0, 1.1994664e+02 }, - { "Ce121", PoPs_genre_atom, 58, 63, 0, 1.2094342e+02 }, - { "Ce122", PoPs_genre_atom, 58, 64, 0, 1.2193791e+02 }, - { "Ce123", PoPs_genre_atom, 58, 65, 0, 1.229354e+02 }, - { "Ce124", PoPs_genre_atom, 58, 66, 0, 1.2393041e+02 }, - { "Ce125", PoPs_genre_atom, 58, 67, 0, 1.2492844e+02 }, - { "Ce126", PoPs_genre_atom, 58, 68, 0, 1.25923971e+02 }, - { "Ce127", PoPs_genre_atom, 58, 69, 0, 1.26922731e+02 }, - { "Ce128", PoPs_genre_atom, 58, 70, 0, 1.27918911e+02 }, - { "Ce129", PoPs_genre_atom, 58, 71, 0, 1.28918102e+02 }, - { "Ce130", PoPs_genre_atom, 58, 72, 0, 1.29914736e+02 }, - { "Ce131", PoPs_genre_atom, 58, 73, 0, 1.30914422e+02 }, - { "Ce132", PoPs_genre_atom, 58, 74, 0, 1.31911460487e+02 }, - { "Ce133", PoPs_genre_atom, 58, 75, 0, 1.3291151502e+02 }, - { "Ce134", PoPs_genre_atom, 58, 76, 0, 1.33908924821e+02 }, - { "Ce135", PoPs_genre_atom, 58, 77, 0, 1.34909151396e+02 }, - { "Ce136", PoPs_genre_atom, 58, 78, 0, 1.35907172422e+02 }, - { "Ce137", PoPs_genre_atom, 58, 79, 0, 1.36907805577e+02 }, - { "Ce138", PoPs_genre_atom, 58, 80, 0, 1.37905991321e+02 }, - { "Ce139", PoPs_genre_atom, 58, 81, 0, 1.38906652651e+02 }, - { "Ce140", PoPs_genre_atom, 58, 82, 0, 1.39905438706e+02 }, - { "Ce141", PoPs_genre_atom, 58, 83, 0, 1.4090827627e+02 }, - { "Ce142", PoPs_genre_atom, 58, 84, 0, 1.41909244205e+02 }, - { "Ce143", PoPs_genre_atom, 58, 85, 0, 1.4291238591e+02 }, - { "Ce144", PoPs_genre_atom, 58, 86, 0, 1.43913647336e+02 }, - { "Ce145", PoPs_genre_atom, 58, 87, 0, 1.44917233135e+02 }, - { "Ce146", PoPs_genre_atom, 58, 88, 0, 1.45918759009e+02 }, - { "Ce147", PoPs_genre_atom, 58, 89, 0, 1.46922673954e+02 }, - { "Ce148", PoPs_genre_atom, 58, 90, 0, 1.4792443241e+02 }, - { "Ce149", PoPs_genre_atom, 58, 91, 0, 1.48928399883e+02 }, - { "Ce150", PoPs_genre_atom, 58, 92, 0, 1.49930408931e+02 }, - { "Ce151", PoPs_genre_atom, 58, 93, 0, 1.50933976196e+02 }, - { "Ce152", PoPs_genre_atom, 58, 94, 0, 1.5193654e+02 }, - { "Ce153", PoPs_genre_atom, 58, 95, 0, 1.5294058e+02 }, - { "Ce154", PoPs_genre_atom, 58, 96, 0, 1.5394342e+02 }, - { "Ce155", PoPs_genre_atom, 58, 97, 0, 1.5494804e+02 }, - { "Ce156", PoPs_genre_atom, 58, 98, 0, 1.5595126e+02 }, - { "Ce157", PoPs_genre_atom, 58, 99, 0, 1.5695634e+02 }, - { "Pr_natural", PoPs_genre_atom, 59, -1, 0, 1.409077e+02 }, - { "Pr121", PoPs_genre_atom, 59, 62, 0, 1.20955364e+02 }, - { "Pr122", PoPs_genre_atom, 59, 63, 0, 1.2195181e+02 }, - { "Pr123", PoPs_genre_atom, 59, 64, 0, 1.2294596e+02 }, - { "Pr124", PoPs_genre_atom, 59, 65, 0, 1.2394296e+02 }, - { "Pr125", PoPs_genre_atom, 59, 66, 0, 1.2493783e+02 }, - { "Pr126", PoPs_genre_atom, 59, 67, 0, 1.2593531e+02 }, - { "Pr127", PoPs_genre_atom, 59, 68, 0, 1.2693083e+02 }, - { "Pr128", PoPs_genre_atom, 59, 69, 0, 1.27928791e+02 }, - { "Pr129", PoPs_genre_atom, 59, 70, 0, 1.28925095e+02 }, - { "Pr130", PoPs_genre_atom, 59, 71, 0, 1.2992359e+02 }, - { "Pr131", PoPs_genre_atom, 59, 72, 0, 1.30920259e+02 }, - { "Pr132", PoPs_genre_atom, 59, 73, 0, 1.31919255e+02 }, - { "Pr133", PoPs_genre_atom, 59, 74, 0, 1.32916330532e+02 }, - { "Pr134", PoPs_genre_atom, 59, 75, 0, 1.33915711737e+02 }, - { "Pr135", PoPs_genre_atom, 59, 76, 0, 1.34913111745e+02 }, - { "Pr136", PoPs_genre_atom, 59, 77, 0, 1.35912691611e+02 }, - { "Pr137", PoPs_genre_atom, 59, 78, 0, 1.36910705455e+02 }, - { "Pr138", PoPs_genre_atom, 59, 79, 0, 1.37910754636e+02 }, - { "Pr139", PoPs_genre_atom, 59, 80, 0, 1.38908938399e+02 }, - { "Pr140", PoPs_genre_atom, 59, 81, 0, 1.39909075874e+02 }, - { "Pr141", PoPs_genre_atom, 59, 82, 0, 1.40907652769e+02 }, - { "Pr142", PoPs_genre_atom, 59, 83, 0, 1.41910044806e+02 }, - { "Pr143", PoPs_genre_atom, 59, 84, 0, 1.42910816926e+02 }, - { "Pr144", PoPs_genre_atom, 59, 85, 0, 1.43913305245e+02 }, - { "Pr145", PoPs_genre_atom, 59, 86, 0, 1.449145117e+02 }, - { "Pr146", PoPs_genre_atom, 59, 87, 0, 1.45917644336e+02 }, - { "Pr147", PoPs_genre_atom, 59, 88, 0, 1.46918995992e+02 }, - { "Pr148", PoPs_genre_atom, 59, 89, 0, 1.47922135026e+02 }, - { "Pr149", PoPs_genre_atom, 59, 90, 0, 1.48923717651e+02 }, - { "Pr150", PoPs_genre_atom, 59, 91, 0, 1.49926672997e+02 }, - { "Pr151", PoPs_genre_atom, 59, 92, 0, 1.50928318618e+02 }, - { "Pr152", PoPs_genre_atom, 59, 93, 0, 1.51931499225e+02 }, - { "Pr153", PoPs_genre_atom, 59, 94, 0, 1.52933838905e+02 }, - { "Pr154", PoPs_genre_atom, 59, 95, 0, 1.53937518153e+02 }, - { "Pr155", PoPs_genre_atom, 59, 96, 0, 1.5494012e+02 }, - { "Pr156", PoPs_genre_atom, 59, 97, 0, 1.5594427e+02 }, - { "Pr157", PoPs_genre_atom, 59, 98, 0, 1.5694743e+02 }, - { "Pr158", PoPs_genre_atom, 59, 99, 0, 1.5795198e+02 }, - { "Pr159", PoPs_genre_atom, 59, 100, 0, 1.589555e+02 }, - { "Nd_natural", PoPs_genre_atom, 60, -1, 0, 1.4424e+02 }, - { "Nd124", PoPs_genre_atom, 60, 64, 0, 1.2395223e+02 }, - { "Nd125", PoPs_genre_atom, 60, 65, 0, 1.2494888e+02 }, - { "Nd126", PoPs_genre_atom, 60, 66, 0, 1.2594322e+02 }, - { "Nd127", PoPs_genre_atom, 60, 67, 0, 1.269405e+02 }, - { "Nd128", PoPs_genre_atom, 60, 68, 0, 1.2793539e+02 }, - { "Nd129", PoPs_genre_atom, 60, 69, 0, 1.28933188e+02 }, - { "Nd130", PoPs_genre_atom, 60, 70, 0, 1.29928506e+02 }, - { "Nd131", PoPs_genre_atom, 60, 71, 0, 1.30927247e+02 }, - { "Nd132", PoPs_genre_atom, 60, 72, 0, 1.31923321237e+02 }, - { "Nd133", PoPs_genre_atom, 60, 73, 0, 1.32922348e+02 }, - { "Nd134", PoPs_genre_atom, 60, 74, 0, 1.33918790181e+02 }, - { "Nd135", PoPs_genre_atom, 60, 75, 0, 1.3491818116e+02 }, - { "Nd136", PoPs_genre_atom, 60, 76, 0, 1.35914976035e+02 }, - { "Nd137", PoPs_genre_atom, 60, 77, 0, 1.36914567137e+02 }, - { "Nd138", PoPs_genre_atom, 60, 78, 0, 1.37911949961e+02 }, - { "Nd139", PoPs_genre_atom, 60, 79, 0, 1.38911978288e+02 }, - { "Nd140", PoPs_genre_atom, 60, 80, 0, 1.39909552e+02 }, - { "Nd141", PoPs_genre_atom, 60, 81, 0, 1.40909609854e+02 }, - { "Nd142", PoPs_genre_atom, 60, 82, 0, 1.41907723297e+02 }, - { "Nd143", PoPs_genre_atom, 60, 83, 0, 1.4290981429e+02 }, - { "Nd144", PoPs_genre_atom, 60, 84, 0, 1.43910087274e+02 }, - { "Nd145", PoPs_genre_atom, 60, 85, 0, 1.44912573636e+02 }, - { "Nd146", PoPs_genre_atom, 60, 86, 0, 1.45913116939e+02 }, - { "Nd147", PoPs_genre_atom, 60, 87, 0, 1.46916100441e+02 }, - { "Nd148", PoPs_genre_atom, 60, 88, 0, 1.47916893288e+02 }, - { "Nd149", PoPs_genre_atom, 60, 89, 0, 1.48920148842e+02 }, - { "Nd150", PoPs_genre_atom, 60, 90, 0, 1.49920890888e+02 }, - { "Nd151", PoPs_genre_atom, 60, 91, 0, 1.50923828929e+02 }, - { "Nd152", PoPs_genre_atom, 60, 92, 0, 1.51924682219e+02 }, - { "Nd153", PoPs_genre_atom, 60, 93, 0, 1.52927698232e+02 }, - { "Nd154", PoPs_genre_atom, 60, 94, 0, 1.53929477307e+02 }, - { "Nd155", PoPs_genre_atom, 60, 95, 0, 1.54932932e+02 }, - { "Nd156", PoPs_genre_atom, 60, 96, 0, 1.55935018114e+02 }, - { "Nd157", PoPs_genre_atom, 60, 97, 0, 1.5693903e+02 }, - { "Nd158", PoPs_genre_atom, 60, 98, 0, 1.579416e+02 }, - { "Nd159", PoPs_genre_atom, 60, 99, 0, 1.5894609e+02 }, - { "Nd160", PoPs_genre_atom, 60, 100, 0, 1.5994909e+02 }, - { "Nd161", PoPs_genre_atom, 60, 101, 0, 1.6095388e+02 }, - { "Pm_natural", PoPs_genre_atom, 61, -1, 0, 1.45e+02 }, - { "Pm126", PoPs_genre_atom, 61, 65, 0, 1.2595752e+02 }, - { "Pm127", PoPs_genre_atom, 61, 66, 0, 1.2695163e+02 }, - { "Pm128", PoPs_genre_atom, 61, 67, 0, 1.2794842e+02 }, - { "Pm129", PoPs_genre_atom, 61, 68, 0, 1.2894316e+02 }, - { "Pm130", PoPs_genre_atom, 61, 69, 0, 1.2994045e+02 }, - { "Pm131", PoPs_genre_atom, 61, 70, 0, 1.3093587e+02 }, - { "Pm132", PoPs_genre_atom, 61, 71, 0, 1.3193375e+02 }, - { "Pm133", PoPs_genre_atom, 61, 72, 0, 1.32929782e+02 }, - { "Pm134", PoPs_genre_atom, 61, 73, 0, 1.33928353e+02 }, - { "Pm135", PoPs_genre_atom, 61, 74, 0, 1.34924876e+02 }, - { "Pm136", PoPs_genre_atom, 61, 75, 0, 1.35923565829e+02 }, - { "Pm137", PoPs_genre_atom, 61, 76, 0, 1.36920479493e+02 }, - { "Pm138", PoPs_genre_atom, 61, 77, 0, 1.37919548281e+02 }, - { "Pm139", PoPs_genre_atom, 61, 78, 0, 1.38916804082e+02 }, - { "Pm140", PoPs_genre_atom, 61, 79, 0, 1.39916041789e+02 }, - { "Pm141", PoPs_genre_atom, 61, 80, 0, 1.40913555054e+02 }, - { "Pm142", PoPs_genre_atom, 61, 81, 0, 1.41912874471e+02 }, - { "Pm143", PoPs_genre_atom, 61, 82, 0, 1.42910932616e+02 }, - { "Pm144", PoPs_genre_atom, 61, 83, 0, 1.43912590843e+02 }, - { "Pm145", PoPs_genre_atom, 61, 84, 0, 1.44912749023e+02 }, - { "Pm146", PoPs_genre_atom, 61, 85, 0, 1.45914696305e+02 }, - { "Pm147", PoPs_genre_atom, 61, 86, 0, 1.46915138545e+02 }, - { "Pm148", PoPs_genre_atom, 61, 87, 0, Pm148_Mass }, - { "Pm149", PoPs_genre_atom, 61, 88, 0, 1.48918334155e+02 }, - { "Pm150", PoPs_genre_atom, 61, 89, 0, 1.49920983561e+02 }, - { "Pm151", PoPs_genre_atom, 61, 90, 0, 1.50921206973e+02 }, - { "Pm152", PoPs_genre_atom, 61, 91, 0, 1.51923496795e+02 }, - { "Pm153", PoPs_genre_atom, 61, 92, 0, 1.52924116889e+02 }, - { "Pm154", PoPs_genre_atom, 61, 93, 0, 1.53926463943e+02 }, - { "Pm155", PoPs_genre_atom, 61, 94, 0, 1.54928101267e+02 }, - { "Pm156", PoPs_genre_atom, 61, 95, 0, 1.55931056736e+02 }, - { "Pm157", PoPs_genre_atom, 61, 96, 0, 1.56933039369e+02 }, - { "Pm158", PoPs_genre_atom, 61, 97, 0, 1.57936561407e+02 }, - { "Pm159", PoPs_genre_atom, 61, 98, 0, 1.5893897e+02 }, - { "Pm160", PoPs_genre_atom, 61, 99, 0, 1.5994299e+02 }, - { "Pm161", PoPs_genre_atom, 61, 100, 0, 1.6094586e+02 }, - { "Pm162", PoPs_genre_atom, 61, 101, 0, 1.6195029e+02 }, - { "Pm163", PoPs_genre_atom, 61, 102, 0, 1.6295368e+02 }, - { "Sm_natural", PoPs_genre_atom, 62, -1, 0, 1.504e+02 }, - { "Sm128", PoPs_genre_atom, 62, 66, 0, 1.2795808e+02 }, - { "Sm129", PoPs_genre_atom, 62, 67, 0, 1.2895464e+02 }, - { "Sm130", PoPs_genre_atom, 62, 68, 0, 1.2994892e+02 }, - { "Sm131", PoPs_genre_atom, 62, 69, 0, 1.3094611e+02 }, - { "Sm132", PoPs_genre_atom, 62, 70, 0, 1.3194069e+02 }, - { "Sm133", PoPs_genre_atom, 62, 71, 0, 1.3293867e+02 }, - { "Sm134", PoPs_genre_atom, 62, 72, 0, 1.3393397e+02 }, - { "Sm135", PoPs_genre_atom, 62, 73, 0, 1.3493252e+02 }, - { "Sm136", PoPs_genre_atom, 62, 74, 0, 1.35928275527e+02 }, - { "Sm137", PoPs_genre_atom, 62, 75, 0, 1.36926971746e+02 }, - { "Sm138", PoPs_genre_atom, 62, 76, 0, 1.37923243961e+02 }, - { "Sm139", PoPs_genre_atom, 62, 77, 0, 1.38922296605e+02 }, - { "Sm140", PoPs_genre_atom, 62, 78, 0, 1.39918994687e+02 }, - { "Sm141", PoPs_genre_atom, 62, 79, 0, 1.40918476488e+02 }, - { "Sm142", PoPs_genre_atom, 62, 80, 0, 1.41915197641e+02 }, - { "Sm143", PoPs_genre_atom, 62, 81, 0, 1.42914628338e+02 }, - { "Sm144", PoPs_genre_atom, 62, 82, 0, 1.43911999478e+02 }, - { "Sm145", PoPs_genre_atom, 62, 83, 0, 1.44913410353e+02 }, - { "Sm146", PoPs_genre_atom, 62, 84, 0, 1.459130409e+02 }, - { "Sm147", PoPs_genre_atom, 62, 85, 0, 1.46914897923e+02 }, - { "Sm148", PoPs_genre_atom, 62, 86, 0, 1.47914822674e+02 }, - { "Sm149", PoPs_genre_atom, 62, 87, 0, 1.48917184735e+02 }, - { "Sm150", PoPs_genre_atom, 62, 88, 0, 1.49917275539e+02 }, - { "Sm151", PoPs_genre_atom, 62, 89, 0, 1.50919932409e+02 }, - { "Sm152", PoPs_genre_atom, 62, 90, 0, 1.51919732425e+02 }, - { "Sm153", PoPs_genre_atom, 62, 91, 0, 1.52922097356e+02 }, - { "Sm154", PoPs_genre_atom, 62, 92, 0, 1.53922209273e+02 }, - { "Sm155", PoPs_genre_atom, 62, 93, 0, 1.54924640161e+02 }, - { "Sm156", PoPs_genre_atom, 62, 94, 0, 1.55925527887e+02 }, - { "Sm157", PoPs_genre_atom, 62, 95, 0, 1.56928358717e+02 }, - { "Sm158", PoPs_genre_atom, 62, 96, 0, 1.57929991317e+02 }, - { "Sm159", PoPs_genre_atom, 62, 97, 0, 1.58933211271e+02 }, - { "Sm160", PoPs_genre_atom, 62, 98, 0, 1.5993514e+02 }, - { "Sm161", PoPs_genre_atom, 62, 99, 0, 1.6093883e+02 }, - { "Sm162", PoPs_genre_atom, 62, 100, 0, 1.6194122e+02 }, - { "Sm163", PoPs_genre_atom, 62, 101, 0, 1.6294536e+02 }, - { "Sm164", PoPs_genre_atom, 62, 102, 0, 1.6394828e+02 }, - { "Sm165", PoPs_genre_atom, 62, 103, 0, 1.6495298e+02 }, - { "Eu_natural", PoPs_genre_atom, 63, -1, 0, 1.5196e+02 }, - { "Eu130", PoPs_genre_atom, 63, 67, 0, 1.29963569e+02 }, - { "Eu131", PoPs_genre_atom, 63, 68, 0, 1.30957753e+02 }, - { "Eu132", PoPs_genre_atom, 63, 69, 0, 1.3195437e+02 }, - { "Eu133", PoPs_genre_atom, 63, 70, 0, 1.3294924e+02 }, - { "Eu134", PoPs_genre_atom, 63, 71, 0, 1.3394651e+02 }, - { "Eu135", PoPs_genre_atom, 63, 72, 0, 1.3494182e+02 }, - { "Eu136", PoPs_genre_atom, 63, 73, 0, 1.359396e+02 }, - { "Eu137", PoPs_genre_atom, 63, 74, 0, 1.3693557e+02 }, - { "Eu138", PoPs_genre_atom, 63, 75, 0, 1.37933709e+02 }, - { "Eu139", PoPs_genre_atom, 63, 76, 0, 1.3892979228e+02 }, - { "Eu140", PoPs_genre_atom, 63, 77, 0, 1.39928087607e+02 }, - { "Eu141", PoPs_genre_atom, 63, 78, 0, 1.4092493072e+02 }, - { "Eu142", PoPs_genre_atom, 63, 79, 0, 1.41923434945e+02 }, - { "Eu143", PoPs_genre_atom, 63, 80, 0, 1.42920297509e+02 }, - { "Eu144", PoPs_genre_atom, 63, 81, 0, 1.43918816823e+02 }, - { "Eu145", PoPs_genre_atom, 63, 82, 0, 1.44916265237e+02 }, - { "Eu146", PoPs_genre_atom, 63, 83, 0, 1.45917205817e+02 }, - { "Eu147", PoPs_genre_atom, 63, 84, 0, 1.46916746111e+02 }, - { "Eu148", PoPs_genre_atom, 63, 85, 0, 1.47918085895e+02 }, - { "Eu149", PoPs_genre_atom, 63, 86, 0, 1.48917931238e+02 }, - { "Eu150", PoPs_genre_atom, 63, 87, 0, 1.49919701819e+02 }, - { "Eu151", PoPs_genre_atom, 63, 88, 0, 1.50919850161e+02 }, - { "Eu152", PoPs_genre_atom, 63, 89, 0, 1.51921744534e+02 }, - { "Eu153", PoPs_genre_atom, 63, 90, 0, 1.52921230339e+02 }, - { "Eu154", PoPs_genre_atom, 63, 91, 0, 1.53922979237e+02 }, - { "Eu155", PoPs_genre_atom, 63, 92, 0, 1.5492289326e+02 }, - { "Eu156", PoPs_genre_atom, 63, 93, 0, 1.55924752249e+02 }, - { "Eu157", PoPs_genre_atom, 63, 94, 0, 1.56925423647e+02 }, - { "Eu158", PoPs_genre_atom, 63, 95, 0, 1.57927845302e+02 }, - { "Eu159", PoPs_genre_atom, 63, 96, 0, 1.58929088861e+02 }, - { "Eu160", PoPs_genre_atom, 63, 97, 0, 1.59931971e+02 }, - { "Eu161", PoPs_genre_atom, 63, 98, 0, 1.6093368e+02 }, - { "Eu162", PoPs_genre_atom, 63, 99, 0, 1.6193704e+02 }, - { "Eu163", PoPs_genre_atom, 63, 100, 0, 1.6293921e+02 }, - { "Eu164", PoPs_genre_atom, 63, 101, 0, 1.6394299e+02 }, - { "Eu165", PoPs_genre_atom, 63, 102, 0, 1.6494572e+02 }, - { "Eu166", PoPs_genre_atom, 63, 103, 0, 1.6594997e+02 }, - { "Eu167", PoPs_genre_atom, 63, 104, 0, 1.6695321e+02 }, - { "Gd_natural", PoPs_genre_atom, 64, -1, 0, 1.5725e+02 }, - { "Gd134", PoPs_genre_atom, 64, 70, 0, 1.3395537e+02 }, - { "Gd135", PoPs_genre_atom, 64, 71, 0, 1.3495257e+02 }, - { "Gd136", PoPs_genre_atom, 64, 72, 0, 1.3594734e+02 }, - { "Gd137", PoPs_genre_atom, 64, 73, 0, 1.3694502e+02 }, - { "Gd138", PoPs_genre_atom, 64, 74, 0, 1.3794012e+02 }, - { "Gd139", PoPs_genre_atom, 64, 75, 0, 1.3893824e+02 }, - { "Gd140", PoPs_genre_atom, 64, 76, 0, 1.39933674e+02 }, - { "Gd141", PoPs_genre_atom, 64, 77, 0, 1.40932126e+02 }, - { "Gd142", PoPs_genre_atom, 64, 78, 0, 1.41928116e+02 }, - { "Gd143", PoPs_genre_atom, 64, 79, 0, 1.4292674951e+02 }, - { "Gd144", PoPs_genre_atom, 64, 80, 0, 1.43922963e+02 }, - { "Gd145", PoPs_genre_atom, 64, 81, 0, 1.44921709252e+02 }, - { "Gd146", PoPs_genre_atom, 64, 82, 0, 1.45918310608e+02 }, - { "Gd147", PoPs_genre_atom, 64, 83, 0, 1.4691909442e+02 }, - { "Gd148", PoPs_genre_atom, 64, 84, 0, 1.47918114524e+02 }, - { "Gd149", PoPs_genre_atom, 64, 85, 0, 1.48919340915e+02 }, - { "Gd150", PoPs_genre_atom, 64, 86, 0, 1.49918658876e+02 }, - { "Gd151", PoPs_genre_atom, 64, 87, 0, 1.50920348482e+02 }, - { "Gd152", PoPs_genre_atom, 64, 88, 0, 1.51919790996e+02 }, - { "Gd153", PoPs_genre_atom, 64, 89, 0, 1.52921749543e+02 }, - { "Gd154", PoPs_genre_atom, 64, 90, 0, 1.53920865598e+02 }, - { "Gd155", PoPs_genre_atom, 64, 91, 0, 1.54922622022e+02 }, - { "Gd156", PoPs_genre_atom, 64, 92, 0, 1.55922122743e+02 }, - { "Gd157", PoPs_genre_atom, 64, 93, 0, 1.56923960135e+02 }, - { "Gd158", PoPs_genre_atom, 64, 94, 0, 1.57924103912e+02 }, - { "Gd159", PoPs_genre_atom, 64, 95, 0, 1.58926388658e+02 }, - { "Gd160", PoPs_genre_atom, 64, 96, 0, 1.59927054146e+02 }, - { "Gd161", PoPs_genre_atom, 64, 97, 0, 1.60929669211e+02 }, - { "Gd162", PoPs_genre_atom, 64, 98, 0, 1.61930984751e+02 }, - { "Gd163", PoPs_genre_atom, 64, 99, 0, 1.6293399e+02 }, - { "Gd164", PoPs_genre_atom, 64, 100, 0, 1.6393586e+02 }, - { "Gd165", PoPs_genre_atom, 64, 101, 0, 1.6493938e+02 }, - { "Gd166", PoPs_genre_atom, 64, 102, 0, 1.659416e+02 }, - { "Gd167", PoPs_genre_atom, 64, 103, 0, 1.6694557e+02 }, - { "Gd168", PoPs_genre_atom, 64, 104, 0, 1.6794836e+02 }, - { "Gd169", PoPs_genre_atom, 64, 105, 0, 1.6895287e+02 }, - { "Tb_natural", PoPs_genre_atom, 65, -1, 0, 1.589254e+02 }, - { "Tb136", PoPs_genre_atom, 65, 71, 0, 1.3596138e+02 }, - { "Tb137", PoPs_genre_atom, 65, 72, 0, 1.3695598e+02 }, - { "Tb138", PoPs_genre_atom, 65, 73, 0, 1.3795316e+02 }, - { "Tb139", PoPs_genre_atom, 65, 74, 0, 1.3894829e+02 }, - { "Tb140", PoPs_genre_atom, 65, 75, 0, 1.39945805049e+02 }, - { "Tb141", PoPs_genre_atom, 65, 76, 0, 1.40941448e+02 }, - { "Tb142", PoPs_genre_atom, 65, 77, 0, 1.41938744e+02 }, - { "Tb143", PoPs_genre_atom, 65, 78, 0, 1.42935121e+02 }, - { "Tb144", PoPs_genre_atom, 65, 79, 0, 1.43933045e+02 }, - { "Tb145", PoPs_genre_atom, 65, 80, 0, 1.44929274e+02 }, - { "Tb146", PoPs_genre_atom, 65, 81, 0, 1.45927246584e+02 }, - { "Tb147", PoPs_genre_atom, 65, 82, 0, 1.46924044585e+02 }, - { "Tb148", PoPs_genre_atom, 65, 83, 0, 1.47924271701e+02 }, - { "Tb149", PoPs_genre_atom, 65, 84, 0, 1.48923245909e+02 }, - { "Tb150", PoPs_genre_atom, 65, 85, 0, 1.49923659686e+02 }, - { "Tb151", PoPs_genre_atom, 65, 86, 0, 1.50923102543e+02 }, - { "Tb152", PoPs_genre_atom, 65, 87, 0, 1.51924074438e+02 }, - { "Tb153", PoPs_genre_atom, 65, 88, 0, 1.52923434588e+02 }, - { "Tb154", PoPs_genre_atom, 65, 89, 0, 1.53924678019e+02 }, - { "Tb155", PoPs_genre_atom, 65, 90, 0, 1.54923505236e+02 }, - { "Tb156", PoPs_genre_atom, 65, 91, 0, 1.55924747213e+02 }, - { "Tb157", PoPs_genre_atom, 65, 92, 0, 1.56924024604e+02 }, - { "Tb158", PoPs_genre_atom, 65, 93, 0, 1.57925413137e+02 }, - { "Tb159", PoPs_genre_atom, 65, 94, 0, 1.58925346757e+02 }, - { "Tb160", PoPs_genre_atom, 65, 95, 0, 1.59927167606e+02 }, - { "Tb161", PoPs_genre_atom, 65, 96, 0, 1.60927569919e+02 }, - { "Tb162", PoPs_genre_atom, 65, 97, 0, 1.61929488234e+02 }, - { "Tb163", PoPs_genre_atom, 65, 98, 0, 1.62930647536e+02 }, - { "Tb164", PoPs_genre_atom, 65, 99, 0, 1.63933350838e+02 }, - { "Tb165", PoPs_genre_atom, 65, 100, 0, 1.6493488e+02 }, - { "Tb166", PoPs_genre_atom, 65, 101, 0, 1.65937991959e+02 }, - { "Tb167", PoPs_genre_atom, 65, 102, 0, 1.6694005e+02 }, - { "Tb168", PoPs_genre_atom, 65, 103, 0, 1.6794364e+02 }, - { "Tb169", PoPs_genre_atom, 65, 104, 0, 1.6894622e+02 }, - { "Tb170", PoPs_genre_atom, 65, 105, 0, 1.6995025e+02 }, - { "Tb171", PoPs_genre_atom, 65, 106, 0, 1.709533e+02 }, - { "Dy_natural", PoPs_genre_atom, 66, -1, 0, 1.625e+02 }, - { "Dy138", PoPs_genre_atom, 66, 72, 0, 1.3796249e+02 }, - { "Dy139", PoPs_genre_atom, 66, 73, 0, 1.3895954e+02 }, - { "Dy140", PoPs_genre_atom, 66, 74, 0, 1.3995401e+02 }, - { "Dy141", PoPs_genre_atom, 66, 75, 0, 1.4095135e+02 }, - { "Dy142", PoPs_genre_atom, 66, 76, 0, 1.41946366e+02 }, - { "Dy143", PoPs_genre_atom, 66, 77, 0, 1.4294383e+02 }, - { "Dy144", PoPs_genre_atom, 66, 78, 0, 1.43939254e+02 }, - { "Dy145", PoPs_genre_atom, 66, 79, 0, 1.44937425e+02 }, - { "Dy146", PoPs_genre_atom, 66, 80, 0, 1.45932845369e+02 }, - { "Dy147", PoPs_genre_atom, 66, 81, 0, 1.469310915e+02 }, - { "Dy148", PoPs_genre_atom, 66, 82, 0, 1.47927149831e+02 }, - { "Dy149", PoPs_genre_atom, 66, 83, 0, 1.48927304787e+02 }, - { "Dy150", PoPs_genre_atom, 66, 84, 0, 1.49925585184e+02 }, - { "Dy151", PoPs_genre_atom, 66, 85, 0, 1.50926184601e+02 }, - { "Dy152", PoPs_genre_atom, 66, 86, 0, 1.519247183e+02 }, - { "Dy153", PoPs_genre_atom, 66, 87, 0, 1.5292576467e+02 }, - { "Dy154", PoPs_genre_atom, 66, 88, 0, 1.53924424457e+02 }, - { "Dy155", PoPs_genre_atom, 66, 89, 0, 1.54925753775e+02 }, - { "Dy156", PoPs_genre_atom, 66, 90, 0, 1.5592428311e+02 }, - { "Dy157", PoPs_genre_atom, 66, 91, 0, 1.56925466095e+02 }, - { "Dy158", PoPs_genre_atom, 66, 92, 0, 1.57924409487e+02 }, - { "Dy159", PoPs_genre_atom, 66, 93, 0, 1.58925739214e+02 }, - { "Dy160", PoPs_genre_atom, 66, 94, 0, 1.59925197517e+02 }, - { "Dy161", PoPs_genre_atom, 66, 95, 0, 1.60926933364e+02 }, - { "Dy162", PoPs_genre_atom, 66, 96, 0, 1.61926798447e+02 }, - { "Dy163", PoPs_genre_atom, 66, 97, 0, 1.62928731159e+02 }, - { "Dy164", PoPs_genre_atom, 66, 98, 0, 1.63929174751e+02 }, - { "Dy165", PoPs_genre_atom, 66, 99, 0, Dy165_Mass }, - { "Dy166", PoPs_genre_atom, 66, 100, 0, 1.65932806741e+02 }, - { "Dy167", PoPs_genre_atom, 66, 101, 0, 1.66935655462e+02 }, - { "Dy168", PoPs_genre_atom, 66, 102, 0, 1.67937128769e+02 }, - { "Dy169", PoPs_genre_atom, 66, 103, 0, 1.68940307614e+02 }, - { "Dy170", PoPs_genre_atom, 66, 104, 0, 1.6994239e+02 }, - { "Dy171", PoPs_genre_atom, 66, 105, 0, 1.709462e+02 }, - { "Dy172", PoPs_genre_atom, 66, 106, 0, 1.7194876e+02 }, - { "Dy173", PoPs_genre_atom, 66, 107, 0, 1.72953e+02 }, - { "Ho_natural", PoPs_genre_atom, 67, -1, 0, 1.649304e+02 }, - { "Ho140", PoPs_genre_atom, 67, 73, 0, 1.39968539e+02 }, - { "Ho141", PoPs_genre_atom, 67, 74, 0, 1.40963098e+02 }, - { "Ho142", PoPs_genre_atom, 67, 75, 0, 1.4195977e+02 }, - { "Ho143", PoPs_genre_atom, 67, 76, 0, 1.4295461e+02 }, - { "Ho144", PoPs_genre_atom, 67, 77, 0, 1.4395148e+02 }, - { "Ho145", PoPs_genre_atom, 67, 78, 0, 1.449472e+02 }, - { "Ho146", PoPs_genre_atom, 67, 79, 0, 1.4594464e+02 }, - { "Ho147", PoPs_genre_atom, 67, 80, 0, 1.46940056e+02 }, - { "Ho148", PoPs_genre_atom, 67, 81, 0, 1.47937718e+02 }, - { "Ho149", PoPs_genre_atom, 67, 82, 0, 1.48933774771e+02 }, - { "Ho150", PoPs_genre_atom, 67, 83, 0, 1.49933496182e+02 }, - { "Ho151", PoPs_genre_atom, 67, 84, 0, 1.50931688142e+02 }, - { "Ho152", PoPs_genre_atom, 67, 85, 0, 1.51931713714e+02 }, - { "Ho153", PoPs_genre_atom, 67, 86, 0, 1.52930198789e+02 }, - { "Ho154", PoPs_genre_atom, 67, 87, 0, 1.53930601579e+02 }, - { "Ho155", PoPs_genre_atom, 67, 88, 0, 1.54929103491e+02 }, - { "Ho156", PoPs_genre_atom, 67, 89, 0, 1.55929839e+02 }, - { "Ho157", PoPs_genre_atom, 67, 90, 0, 1.56928256188e+02 }, - { "Ho158", PoPs_genre_atom, 67, 91, 0, 1.57928941007e+02 }, - { "Ho159", PoPs_genre_atom, 67, 92, 0, 1.58927711959e+02 }, - { "Ho160", PoPs_genre_atom, 67, 93, 0, 1.59928729478e+02 }, - { "Ho161", PoPs_genre_atom, 67, 94, 0, 1.60927854776e+02 }, - { "Ho162", PoPs_genre_atom, 67, 95, 0, 1.61929095504e+02 }, - { "Ho163", PoPs_genre_atom, 67, 96, 0, Ho163_Mass }, - { "Ho164", PoPs_genre_atom, 67, 97, 0, Ho164_Mass }, - { "Ho165", PoPs_genre_atom, 67, 98, 0, 1.6493032207e+02 }, - { "Ho166", PoPs_genre_atom, 67, 99, 0, Ho166_Mass }, - { "Ho167", PoPs_genre_atom, 67, 100, 0, 1.66933132633e+02 }, - { "Ho168", PoPs_genre_atom, 67, 101, 0, 1.67935515708e+02 }, - { "Ho169", PoPs_genre_atom, 67, 102, 0, 1.68936872273e+02 }, - { "Ho170", PoPs_genre_atom, 67, 103, 0, 1.69939618929e+02 }, - { "Ho171", PoPs_genre_atom, 67, 104, 0, 1.7094146515e+02 }, - { "Ho172", PoPs_genre_atom, 67, 105, 0, 1.7194482e+02 }, - { "Ho173", PoPs_genre_atom, 67, 106, 0, 1.7294729e+02 }, - { "Ho174", PoPs_genre_atom, 67, 107, 0, 1.7395115e+02 }, - { "Ho175", PoPs_genre_atom, 67, 108, 0, 1.7495405e+02 }, - { "Er_natural", PoPs_genre_atom, 68, -1, 0, 1.6726e+02 }, - { "Er143", PoPs_genre_atom, 68, 75, 0, 1.4296634e+02 }, - { "Er144", PoPs_genre_atom, 68, 76, 0, 1.4396038e+02 }, - { "Er145", PoPs_genre_atom, 68, 77, 0, 1.4495739e+02 }, - { "Er146", PoPs_genre_atom, 68, 78, 0, 1.45952e+02 }, - { "Er147", PoPs_genre_atom, 68, 79, 0, 1.4694949e+02 }, - { "Er148", PoPs_genre_atom, 68, 80, 0, 1.4794455e+02 }, - { "Er149", PoPs_genre_atom, 68, 81, 0, 1.48942306e+02 }, - { "Er150", PoPs_genre_atom, 68, 82, 0, 1.49937913839e+02 }, - { "Er151", PoPs_genre_atom, 68, 83, 0, 1.50937448903e+02 }, - { "Er152", PoPs_genre_atom, 68, 84, 0, 1.51935050389e+02 }, - { "Er153", PoPs_genre_atom, 68, 85, 0, 1.52935063492e+02 }, - { "Er154", PoPs_genre_atom, 68, 86, 0, 1.53932783081e+02 }, - { "Er155", PoPs_genre_atom, 68, 87, 0, 1.54933208949e+02 }, - { "Er156", PoPs_genre_atom, 68, 88, 0, 1.55931064698e+02 }, - { "Er157", PoPs_genre_atom, 68, 89, 0, 1.56931916e+02 }, - { "Er158", PoPs_genre_atom, 68, 90, 0, 1.57929893474e+02 }, - { "Er159", PoPs_genre_atom, 68, 91, 0, 1.58930684066e+02 }, - { "Er160", PoPs_genre_atom, 68, 92, 0, 1.59929083292e+02 }, - { "Er161", PoPs_genre_atom, 68, 93, 0, 1.60929995309e+02 }, - { "Er162", PoPs_genre_atom, 68, 94, 0, 1.61928778264e+02 }, - { "Er163", PoPs_genre_atom, 68, 95, 0, 1.62930032749e+02 }, - { "Er164", PoPs_genre_atom, 68, 96, 0, 1.63929200229e+02 }, - { "Er165", PoPs_genre_atom, 68, 97, 0, 1.64930726003e+02 }, - { "Er166", PoPs_genre_atom, 68, 98, 0, 1.65930293061e+02 }, - { "Er167", PoPs_genre_atom, 68, 99, 0, Er167_Mass }, - { "Er168", PoPs_genre_atom, 68, 100, 0, 1.67932370224e+02 }, - { "Er169", PoPs_genre_atom, 68, 101, 0, 1.68934590364e+02 }, - { "Er170", PoPs_genre_atom, 68, 102, 0, 1.69935464312e+02 }, - { "Er171", PoPs_genre_atom, 68, 103, 0, 1.70938029808e+02 }, - { "Er172", PoPs_genre_atom, 68, 104, 0, 1.71939356113e+02 }, - { "Er173", PoPs_genre_atom, 68, 105, 0, 1.729424e+02 }, - { "Er174", PoPs_genre_atom, 68, 106, 0, 1.7394423e+02 }, - { "Er175", PoPs_genre_atom, 68, 107, 0, 1.7494777e+02 }, - { "Er176", PoPs_genre_atom, 68, 108, 0, 1.7595008e+02 }, - { "Er177", PoPs_genre_atom, 68, 109, 0, 1.7695405e+02 }, - { "Tm_natural", PoPs_genre_atom, 69, -1, 0, 1.689342e+02 }, - { "Tm145", PoPs_genre_atom, 69, 76, 0, 1.44970073e+02 }, - { "Tm146", PoPs_genre_atom, 69, 77, 0, 1.45966425e+02 }, - { "Tm147", PoPs_genre_atom, 69, 78, 0, 1.46960961e+02 }, - { "Tm148", PoPs_genre_atom, 69, 79, 0, 1.4795784e+02 }, - { "Tm149", PoPs_genre_atom, 69, 80, 0, 1.4895272e+02 }, - { "Tm150", PoPs_genre_atom, 69, 81, 0, 1.4994996e+02 }, - { "Tm151", PoPs_genre_atom, 69, 82, 0, 1.5094548349e+02 }, - { "Tm152", PoPs_genre_atom, 69, 83, 0, 1.51944422e+02 }, - { "Tm153", PoPs_genre_atom, 69, 84, 0, 1.52942012112e+02 }, - { "Tm154", PoPs_genre_atom, 69, 85, 0, 1.53941567808e+02 }, - { "Tm155", PoPs_genre_atom, 69, 86, 0, 1.54939199459e+02 }, - { "Tm156", PoPs_genre_atom, 69, 87, 0, 1.55938979933e+02 }, - { "Tm157", PoPs_genre_atom, 69, 88, 0, 1.56936973e+02 }, - { "Tm158", PoPs_genre_atom, 69, 89, 0, 1.57936979525e+02 }, - { "Tm159", PoPs_genre_atom, 69, 90, 0, 1.58934975e+02 }, - { "Tm160", PoPs_genre_atom, 69, 91, 0, 1.59935262801e+02 }, - { "Tm161", PoPs_genre_atom, 69, 92, 0, 1.60933549e+02 }, - { "Tm162", PoPs_genre_atom, 69, 93, 0, 1.61933994682e+02 }, - { "Tm163", PoPs_genre_atom, 69, 94, 0, 1.62932651124e+02 }, - { "Tm164", PoPs_genre_atom, 69, 95, 0, 1.6393356e+02 }, - { "Tm165", PoPs_genre_atom, 69, 96, 0, 1.64932435492e+02 }, - { "Tm166", PoPs_genre_atom, 69, 97, 0, 1.65933554131e+02 }, - { "Tm167", PoPs_genre_atom, 69, 98, 0, 1.66932851622e+02 }, - { "Tm168", PoPs_genre_atom, 69, 99, 0, 1.67934172776e+02 }, - { "Tm169", PoPs_genre_atom, 69, 100, 0, 1.6893421325e+02 }, - { "Tm170", PoPs_genre_atom, 69, 101, 0, 1.69935801397e+02 }, - { "Tm171", PoPs_genre_atom, 69, 102, 0, 1.7093642944e+02 }, - { "Tm172", PoPs_genre_atom, 69, 103, 0, 1.71938400044e+02 }, - { "Tm173", PoPs_genre_atom, 69, 104, 0, 1.72939603607e+02 }, - { "Tm174", PoPs_genre_atom, 69, 105, 0, 1.73942168605e+02 }, - { "Tm175", PoPs_genre_atom, 69, 106, 0, 1.74943836853e+02 }, - { "Tm176", PoPs_genre_atom, 69, 107, 0, Tm176_Mass }, - { "Tm177", PoPs_genre_atom, 69, 108, 0, 1.7694904e+02 }, - { "Tm178", PoPs_genre_atom, 69, 109, 0, 1.7795264e+02 }, - { "Tm179", PoPs_genre_atom, 69, 110, 0, 1.7895534e+02 }, - { "Yb_natural", PoPs_genre_atom, 70, -1, 0, 1.7304e+02 }, - { "Yb148", PoPs_genre_atom, 70, 78, 0, 1.4796742e+02 }, - { "Yb149", PoPs_genre_atom, 70, 79, 0, 1.4896404e+02 }, - { "Yb150", PoPs_genre_atom, 70, 80, 0, 1.4995842e+02 }, - { "Yb151", PoPs_genre_atom, 70, 81, 0, 1.50955400769e+02 }, - { "Yb152", PoPs_genre_atom, 70, 82, 0, 1.51950288919e+02 }, - { "Yb153", PoPs_genre_atom, 70, 83, 0, 1.5294948e+02 }, - { "Yb154", PoPs_genre_atom, 70, 84, 0, 1.53946393928e+02 }, - { "Yb155", PoPs_genre_atom, 70, 85, 0, 1.54945782332e+02 }, - { "Yb156", PoPs_genre_atom, 70, 86, 0, 1.55942818215e+02 }, - { "Yb157", PoPs_genre_atom, 70, 87, 0, 1.56942627848e+02 }, - { "Yb158", PoPs_genre_atom, 70, 88, 0, 1.57939865617e+02 }, - { "Yb159", PoPs_genre_atom, 70, 89, 0, 1.58940050099e+02 }, - { "Yb160", PoPs_genre_atom, 70, 90, 0, 1.59937552344e+02 }, - { "Yb161", PoPs_genre_atom, 70, 91, 0, 1.60937901678e+02 }, - { "Yb162", PoPs_genre_atom, 70, 92, 0, 1.6193576821e+02 }, - { "Yb163", PoPs_genre_atom, 70, 93, 0, 1.62936334305e+02 }, - { "Yb164", PoPs_genre_atom, 70, 94, 0, 1.63934489416e+02 }, - { "Yb165", PoPs_genre_atom, 70, 95, 0, 1.64935279e+02 }, - { "Yb166", PoPs_genre_atom, 70, 96, 0, 1.65933882042e+02 }, - { "Yb167", PoPs_genre_atom, 70, 97, 0, 1.66934949605e+02 }, - { "Yb168", PoPs_genre_atom, 70, 98, 0, 1.67933896895e+02 }, - { "Yb169", PoPs_genre_atom, 70, 99, 0, Yb169_Mass }, - { "Yb170", PoPs_genre_atom, 70, 100, 0, 1.69934761837e+02 }, - { "Yb171", PoPs_genre_atom, 70, 101, 0, 1.70936325799e+02 }, - { "Yb172", PoPs_genre_atom, 70, 102, 0, 1.71936381469e+02 }, - { "Yb173", PoPs_genre_atom, 70, 103, 0, 1.72938210787e+02 }, - { "Yb174", PoPs_genre_atom, 70, 104, 0, 1.73938862089e+02 }, - { "Yb175", PoPs_genre_atom, 70, 105, 0, 1.7494127645e+02 }, - { "Yb176", PoPs_genre_atom, 70, 106, 0, Yb176_Mass }, - { "Yb177", PoPs_genre_atom, 70, 107, 0, Yb177_Mass }, - { "Yb178", PoPs_genre_atom, 70, 108, 0, 1.7794664668e+02 }, - { "Yb179", PoPs_genre_atom, 70, 109, 0, 1.7895017e+02 }, - { "Yb180", PoPs_genre_atom, 70, 110, 0, 1.7995233e+02 }, - { "Yb181", PoPs_genre_atom, 70, 111, 0, 1.8095615e+02 }, - { "Lu_natural", PoPs_genre_atom, 71, -1, 0, 1.74967e+02 }, - { "Lu150", PoPs_genre_atom, 71, 79, 0, 1.49973228e+02 }, - { "Lu151", PoPs_genre_atom, 71, 80, 0, 1.50967577e+02 }, - { "Lu152", PoPs_genre_atom, 71, 81, 0, 1.5196412e+02 }, - { "Lu153", PoPs_genre_atom, 71, 82, 0, 1.52958767331e+02 }, - { "Lu154", PoPs_genre_atom, 71, 83, 0, 1.53957522e+02 }, - { "Lu155", PoPs_genre_atom, 71, 84, 0, 1.54954316216e+02 }, - { "Lu156", PoPs_genre_atom, 71, 85, 0, 1.55953032523e+02 }, - { "Lu157", PoPs_genre_atom, 71, 86, 0, 1.569500983e+02 }, - { "Lu158", PoPs_genre_atom, 71, 87, 0, 1.57949313283e+02 }, - { "Lu159", PoPs_genre_atom, 71, 88, 0, 1.58946628776e+02 }, - { "Lu160", PoPs_genre_atom, 71, 89, 0, 1.59946033e+02 }, - { "Lu161", PoPs_genre_atom, 71, 90, 0, 1.60943572e+02 }, - { "Lu162", PoPs_genre_atom, 71, 91, 0, 1.61943277288e+02 }, - { "Lu163", PoPs_genre_atom, 71, 92, 0, 1.62941179e+02 }, - { "Lu164", PoPs_genre_atom, 71, 93, 0, 1.63941339e+02 }, - { "Lu165", PoPs_genre_atom, 71, 94, 0, 1.64939406724e+02 }, - { "Lu166", PoPs_genre_atom, 71, 95, 0, 1.65939859e+02 }, - { "Lu167", PoPs_genre_atom, 71, 96, 0, 1.6693827e+02 }, - { "Lu168", PoPs_genre_atom, 71, 97, 0, 1.67938739111e+02 }, - { "Lu169", PoPs_genre_atom, 71, 98, 0, Lu169_Mass }, - { "Lu170", PoPs_genre_atom, 71, 99, 0, 1.69938474968e+02 }, - { "Lu171", PoPs_genre_atom, 71, 100, 0, Lu171_Mass }, - { "Lu172", PoPs_genre_atom, 71, 101, 0, Lu172_Mass }, - { "Lu173", PoPs_genre_atom, 71, 102, 0, 1.72938930602e+02 }, - { "Lu174", PoPs_genre_atom, 71, 103, 0, Lu174_Mass }, - { "Lu175", PoPs_genre_atom, 71, 104, 0, 1.74940771819e+02 }, - { "Lu176", PoPs_genre_atom, 71, 105, 0, Lu176_Mass }, - { "Lu177", PoPs_genre_atom, 71, 106, 0, Lu177_Mass }, - { "Lu178", PoPs_genre_atom, 71, 107, 0, Lu178_Mass }, - { "Lu179", PoPs_genre_atom, 71, 108, 0, 1.78947327443e+02 }, - { "Lu180", PoPs_genre_atom, 71, 109, 0, 1.7994988116e+02 }, - { "Lu181", PoPs_genre_atom, 71, 110, 0, 1.8095197e+02 }, - { "Lu182", PoPs_genre_atom, 71, 111, 0, 1.8195504e+02 }, - { "Lu183", PoPs_genre_atom, 71, 112, 0, 1.8295757e+02 }, - { "Lu184", PoPs_genre_atom, 71, 113, 0, 1.8396091e+02 }, - { "Hf_natural", PoPs_genre_atom, 72, -1, 0, 1.7849e+02 }, - { "Hf153", PoPs_genre_atom, 72, 81, 0, 1.5297069e+02 }, - { "Hf154", PoPs_genre_atom, 72, 82, 0, 1.5396486e+02 }, - { "Hf155", PoPs_genre_atom, 72, 83, 0, 1.5496339e+02 }, - { "Hf156", PoPs_genre_atom, 72, 84, 0, 1.55959364025e+02 }, - { "Hf157", PoPs_genre_atom, 72, 85, 0, 1.56958396e+02 }, - { "Hf158", PoPs_genre_atom, 72, 86, 0, 1.57954799366e+02 }, - { "Hf159", PoPs_genre_atom, 72, 87, 0, 1.5895399487e+02 }, - { "Hf160", PoPs_genre_atom, 72, 88, 0, 1.59950684379e+02 }, - { "Hf161", PoPs_genre_atom, 72, 89, 0, 1.60950274844e+02 }, - { "Hf162", PoPs_genre_atom, 72, 90, 0, 1.61947210498e+02 }, - { "Hf163", PoPs_genre_atom, 72, 91, 0, 1.62947089e+02 }, - { "Hf164", PoPs_genre_atom, 72, 92, 0, 1.63944367284e+02 }, - { "Hf165", PoPs_genre_atom, 72, 93, 0, 1.64944567e+02 }, - { "Hf166", PoPs_genre_atom, 72, 94, 0, 1.6594218e+02 }, - { "Hf167", PoPs_genre_atom, 72, 95, 0, 1.669426e+02 }, - { "Hf168", PoPs_genre_atom, 72, 96, 0, 1.67940568e+02 }, - { "Hf169", PoPs_genre_atom, 72, 97, 0, 1.68941259e+02 }, - { "Hf170", PoPs_genre_atom, 72, 98, 0, 1.69939609e+02 }, - { "Hf171", PoPs_genre_atom, 72, 99, 0, 1.70940492e+02 }, - { "Hf172", PoPs_genre_atom, 72, 100, 0, 1.71939448301e+02 }, - { "Hf173", PoPs_genre_atom, 72, 101, 0, 1.72940513e+02 }, - { "Hf174", PoPs_genre_atom, 72, 102, 0, 1.73940046178e+02 }, - { "Hf175", PoPs_genre_atom, 72, 103, 0, 1.74941509181e+02 }, - { "Hf176", PoPs_genre_atom, 72, 104, 0, 1.75941408631e+02 }, - { "Hf177", PoPs_genre_atom, 72, 105, 0, 1.76943220651e+02 }, - { "Hf178", PoPs_genre_atom, 72, 106, 0, Hf178_Mass }, - { "Hf179", PoPs_genre_atom, 72, 107, 0, Hf179_Mass }, - { "Hf180", PoPs_genre_atom, 72, 108, 0, Hf180_Mass }, - { "Hf181", PoPs_genre_atom, 72, 109, 0, 1.80949101246e+02 }, - { "Hf182", PoPs_genre_atom, 72, 110, 0, 1.81950554096e+02 }, - { "Hf183", PoPs_genre_atom, 72, 111, 0, 1.82953530439e+02 }, - { "Hf184", PoPs_genre_atom, 72, 112, 0, 1.83955446515e+02 }, - { "Hf185", PoPs_genre_atom, 72, 113, 0, 1.8495882e+02 }, - { "Hf186", PoPs_genre_atom, 72, 114, 0, 1.8596089e+02 }, - { "Hf187", PoPs_genre_atom, 72, 115, 0, 1.8696459e+02 }, - { "Hf188", PoPs_genre_atom, 72, 116, 0, 1.8796685e+02 }, - { "Ta_natural", PoPs_genre_atom, 73, -1, 0, 1.809479e+02 }, - { "Ta155", PoPs_genre_atom, 73, 82, 0, 1.54974592e+02 }, - { "Ta156", PoPs_genre_atom, 73, 83, 0, 1.55972303e+02 }, - { "Ta157", PoPs_genre_atom, 73, 84, 0, 1.56968192445e+02 }, - { "Ta158", PoPs_genre_atom, 73, 85, 0, 1.57966699e+02 }, - { "Ta159", PoPs_genre_atom, 73, 86, 0, 1.58963018173e+02 }, - { "Ta160", PoPs_genre_atom, 73, 87, 0, 1.59961486056e+02 }, - { "Ta161", PoPs_genre_atom, 73, 88, 0, 1.60958417e+02 }, - { "Ta162", PoPs_genre_atom, 73, 89, 0, 1.61957291859e+02 }, - { "Ta163", PoPs_genre_atom, 73, 90, 0, 1.62954330271e+02 }, - { "Ta164", PoPs_genre_atom, 73, 91, 0, 1.63953534e+02 }, - { "Ta165", PoPs_genre_atom, 73, 92, 0, 1.64950772514e+02 }, - { "Ta166", PoPs_genre_atom, 73, 93, 0, 1.65950512e+02 }, - { "Ta167", PoPs_genre_atom, 73, 94, 0, 1.66948093e+02 }, - { "Ta168", PoPs_genre_atom, 73, 95, 0, 1.67948047e+02 }, - { "Ta169", PoPs_genre_atom, 73, 96, 0, 1.68946011e+02 }, - { "Ta170", PoPs_genre_atom, 73, 97, 0, 1.69946175e+02 }, - { "Ta171", PoPs_genre_atom, 73, 98, 0, 1.70944476e+02 }, - { "Ta172", PoPs_genre_atom, 73, 99, 0, 1.71944895e+02 }, - { "Ta173", PoPs_genre_atom, 73, 100, 0, 1.7294375e+02 }, - { "Ta174", PoPs_genre_atom, 73, 101, 0, 1.73944454e+02 }, - { "Ta175", PoPs_genre_atom, 73, 102, 0, 1.74943737e+02 }, - { "Ta176", PoPs_genre_atom, 73, 103, 0, 1.75944857e+02 }, - { "Ta177", PoPs_genre_atom, 73, 104, 0, 1.76944472403e+02 }, - { "Ta178", PoPs_genre_atom, 73, 105, 0, 1.77945778221e+02 }, - { "Ta179", PoPs_genre_atom, 73, 106, 0, 1.78945929535e+02 }, - { "Ta180", PoPs_genre_atom, 73, 107, 0, Ta180_Mass }, - { "Ta181", PoPs_genre_atom, 73, 108, 0, 1.80947995763e+02 }, - { "Ta182", PoPs_genre_atom, 73, 109, 0, Ta182_Mass }, - { "Ta183", PoPs_genre_atom, 73, 110, 0, 1.82951372616e+02 }, - { "Ta184", PoPs_genre_atom, 73, 111, 0, 1.83954007966e+02 }, - { "Ta185", PoPs_genre_atom, 73, 112, 0, 1.84955559375e+02 }, - { "Ta186", PoPs_genre_atom, 73, 113, 0, 1.85958552023e+02 }, - { "Ta187", PoPs_genre_atom, 73, 114, 0, 1.8696053e+02 }, - { "Ta188", PoPs_genre_atom, 73, 115, 0, 1.879637e+02 }, - { "Ta189", PoPs_genre_atom, 73, 116, 0, 1.8896583e+02 }, - { "Ta190", PoPs_genre_atom, 73, 117, 0, 1.8996923e+02 }, - { "W_natural", PoPs_genre_atom, 74, -1, 0, 1.8385e+02 }, - { "W158", PoPs_genre_atom, 74, 84, 0, 1.57974562e+02 }, - { "W159", PoPs_genre_atom, 74, 85, 0, 1.58972918e+02 }, - { "W160", PoPs_genre_atom, 74, 86, 0, 1.59968478805e+02 }, - { "W161", PoPs_genre_atom, 74, 87, 0, 1.60967357e+02 }, - { "W162", PoPs_genre_atom, 74, 88, 0, 1.61963497417e+02 }, - { "W163", PoPs_genre_atom, 74, 89, 0, 1.62962523542e+02 }, - { "W164", PoPs_genre_atom, 74, 90, 0, 1.63958954382e+02 }, - { "W165", PoPs_genre_atom, 74, 91, 0, 1.64958279949e+02 }, - { "W166", PoPs_genre_atom, 74, 92, 0, 1.65955027253e+02 }, - { "W167", PoPs_genre_atom, 74, 93, 0, 1.66954816014e+02 }, - { "W168", PoPs_genre_atom, 74, 94, 0, 1.67951808394e+02 }, - { "W169", PoPs_genre_atom, 74, 95, 0, 1.6895177879e+02 }, - { "W170", PoPs_genre_atom, 74, 96, 0, 1.69949228482e+02 }, - { "W171", PoPs_genre_atom, 74, 97, 0, 1.70949451e+02 }, - { "W172", PoPs_genre_atom, 74, 98, 0, 1.71947292e+02 }, - { "W173", PoPs_genre_atom, 74, 99, 0, 1.72947689e+02 }, - { "W174", PoPs_genre_atom, 74, 100, 0, 1.73946079e+02 }, - { "W175", PoPs_genre_atom, 74, 101, 0, 1.74946717e+02 }, - { "W176", PoPs_genre_atom, 74, 102, 0, 1.75945634e+02 }, - { "W177", PoPs_genre_atom, 74, 103, 0, 1.76946643e+02 }, - { "W178", PoPs_genre_atom, 74, 104, 0, 1.77945876236e+02 }, - { "W179", PoPs_genre_atom, 74, 105, 0, W179_Mass }, - { "W180", PoPs_genre_atom, 74, 106, 0, 1.79946704459e+02 }, - { "W181", PoPs_genre_atom, 74, 107, 0, 1.80948197248e+02 }, - { "W182", PoPs_genre_atom, 74, 108, 0, 1.81948204156e+02 }, - { "W183", PoPs_genre_atom, 74, 109, 0, W183_Mass }, - { "W184", PoPs_genre_atom, 74, 110, 0, 1.83950931188e+02 }, - { "W185", PoPs_genre_atom, 74, 111, 0, W185_Mass }, - { "W186", PoPs_genre_atom, 74, 112, 0, 1.85954364127e+02 }, - { "W187", PoPs_genre_atom, 74, 113, 0, 1.86957160466e+02 }, - { "W188", PoPs_genre_atom, 74, 114, 0, 1.87958489105e+02 }, - { "W189", PoPs_genre_atom, 74, 115, 0, 1.88961912868e+02 }, - { "W190", PoPs_genre_atom, 74, 116, 0, 1.89963181378e+02 }, - { "W191", PoPs_genre_atom, 74, 117, 0, 1.909666e+02 }, - { "W192", PoPs_genre_atom, 74, 118, 0, 1.9196817e+02 }, - { "Re_natural", PoPs_genre_atom, 75, -1, 0, 1.86207e+02 }, - { "Re160", PoPs_genre_atom, 75, 85, 0, 1.59982115e+02 }, - { "Re161", PoPs_genre_atom, 75, 86, 0, 1.60977589119e+02 }, - { "Re162", PoPs_genre_atom, 75, 87, 0, 1.61976002e+02 }, - { "Re163", PoPs_genre_atom, 75, 88, 0, 1.62972080535e+02 }, - { "Re164", PoPs_genre_atom, 75, 89, 0, 1.63970323e+02 }, - { "Re165", PoPs_genre_atom, 75, 90, 0, 1.64967088557e+02 }, - { "Re166", PoPs_genre_atom, 75, 91, 0, 1.65965808e+02 }, - { "Re167", PoPs_genre_atom, 75, 92, 0, 1.66962601e+02 }, - { "Re168", PoPs_genre_atom, 75, 93, 0, 1.67961572608e+02 }, - { "Re169", PoPs_genre_atom, 75, 94, 0, 1.68958791096e+02 }, - { "Re170", PoPs_genre_atom, 75, 95, 0, 1.69958220071e+02 }, - { "Re171", PoPs_genre_atom, 75, 96, 0, 1.70955716e+02 }, - { "Re172", PoPs_genre_atom, 75, 97, 0, 1.71955422961e+02 }, - { "Re173", PoPs_genre_atom, 75, 98, 0, 1.72953243e+02 }, - { "Re174", PoPs_genre_atom, 75, 99, 0, 1.73953115e+02 }, - { "Re175", PoPs_genre_atom, 75, 100, 0, 1.74951381e+02 }, - { "Re176", PoPs_genre_atom, 75, 101, 0, 1.75951623e+02 }, - { "Re177", PoPs_genre_atom, 75, 102, 0, 1.76950328e+02 }, - { "Re178", PoPs_genre_atom, 75, 103, 0, 1.77950989e+02 }, - { "Re179", PoPs_genre_atom, 75, 104, 0, 1.78949987641e+02 }, - { "Re180", PoPs_genre_atom, 75, 105, 0, 1.79950789084e+02 }, - { "Re181", PoPs_genre_atom, 75, 106, 0, 1.80950067916e+02 }, - { "Re182", PoPs_genre_atom, 75, 107, 0, Re182_Mass }, - { "Re183", PoPs_genre_atom, 75, 108, 0, 1.82950819841e+02 }, - { "Re184", PoPs_genre_atom, 75, 109, 0, Re184_Mass }, - { "Re185", PoPs_genre_atom, 75, 110, 0, 1.84952954982e+02 }, - { "Re186", PoPs_genre_atom, 75, 111, 0, Re186_Mass }, - { "Re187", PoPs_genre_atom, 75, 112, 0, 1.86955753109e+02 }, - { "Re188", PoPs_genre_atom, 75, 113, 0, Re188_Mass }, - { "Re189", PoPs_genre_atom, 75, 114, 0, 1.88959229007e+02 }, - { "Re190", PoPs_genre_atom, 75, 115, 0, Re190_Mass }, - { "Re191", PoPs_genre_atom, 75, 116, 0, 1.90963125242e+02 }, - { "Re192", PoPs_genre_atom, 75, 117, 0, 1.9196596e+02 }, - { "Re193", PoPs_genre_atom, 75, 118, 0, 1.9296747e+02 }, - { "Re194", PoPs_genre_atom, 75, 119, 0, 1.9397042e+02 }, - { "Os_natural", PoPs_genre_atom, 76, -1, 0, 1.902e+02 }, - { "Os162", PoPs_genre_atom, 76, 86, 0, 1.61984431e+02 }, - { "Os163", PoPs_genre_atom, 76, 87, 0, 1.6298269e+02 }, - { "Os164", PoPs_genre_atom, 76, 88, 0, 1.63978035649e+02 }, - { "Os165", PoPs_genre_atom, 76, 89, 0, 1.64976762e+02 }, - { "Os166", PoPs_genre_atom, 76, 90, 0, 1.65972690753e+02 }, - { "Os167", PoPs_genre_atom, 76, 91, 0, 1.66971547969e+02 }, - { "Os168", PoPs_genre_atom, 76, 92, 0, 1.67967803678e+02 }, - { "Os169", PoPs_genre_atom, 76, 93, 0, 1.6896701927e+02 }, - { "Os170", PoPs_genre_atom, 76, 94, 0, 1.69963577028e+02 }, - { "Os171", PoPs_genre_atom, 76, 95, 0, 1.70963184819e+02 }, - { "Os172", PoPs_genre_atom, 76, 96, 0, 1.71960023303e+02 }, - { "Os173", PoPs_genre_atom, 76, 97, 0, 1.72959808409e+02 }, - { "Os174", PoPs_genre_atom, 76, 98, 0, 1.73957062202e+02 }, - { "Os175", PoPs_genre_atom, 76, 99, 0, 1.74956945835e+02 }, - { "Os176", PoPs_genre_atom, 76, 100, 0, 1.75954806e+02 }, - { "Os177", PoPs_genre_atom, 76, 101, 0, 1.76954965324e+02 }, - { "Os178", PoPs_genre_atom, 76, 102, 0, 1.77953251241e+02 }, - { "Os179", PoPs_genre_atom, 76, 103, 0, 1.78953816017e+02 }, - { "Os180", PoPs_genre_atom, 76, 104, 0, 1.79952378803e+02 }, - { "Os181", PoPs_genre_atom, 76, 105, 0, Os181_Mass }, - { "Os182", PoPs_genre_atom, 76, 106, 0, 1.81952110186e+02 }, - { "Os183", PoPs_genre_atom, 76, 107, 0, Os183_Mass }, - { "Os184", PoPs_genre_atom, 76, 108, 0, 1.83952489071e+02 }, - { "Os185", PoPs_genre_atom, 76, 109, 0, 1.84954042265e+02 }, - { "Os186", PoPs_genre_atom, 76, 110, 0, 1.85953838158e+02 }, - { "Os187", PoPs_genre_atom, 76, 111, 0, 1.86955750458e+02 }, - { "Os188", PoPs_genre_atom, 76, 112, 0, 1.87955838228e+02 }, - { "Os189", PoPs_genre_atom, 76, 113, 0, Os189_Mass }, - { "Os190", PoPs_genre_atom, 76, 114, 0, 1.89958447048e+02 }, - { "Os191", PoPs_genre_atom, 76, 115, 0, Os191_Mass }, - { "Os192", PoPs_genre_atom, 76, 116, 0, 1.9196148069e+02 }, - { "Os193", PoPs_genre_atom, 76, 117, 0, 1.92964151563e+02 }, - { "Os194", PoPs_genre_atom, 76, 118, 0, 1.93965182083e+02 }, - { "Os195", PoPs_genre_atom, 76, 119, 0, 1.94968126661e+02 }, - { "Os196", PoPs_genre_atom, 76, 120, 0, 1.95969639333e+02 }, - { "Ir_natural", PoPs_genre_atom, 77, -1, 0, 1.9222e+02 }, - { "Ir164", PoPs_genre_atom, 77, 87, 0, 1.63992201e+02 }, - { "Ir165", PoPs_genre_atom, 77, 88, 0, 1.6498752e+02 }, - { "Ir166", PoPs_genre_atom, 77, 89, 0, 1.65985824e+02 }, - { "Ir167", PoPs_genre_atom, 77, 90, 0, 1.66981665156e+02 }, - { "Ir168", PoPs_genre_atom, 77, 91, 0, 1.67979881e+02 }, - { "Ir169", PoPs_genre_atom, 77, 92, 0, 1.68976294942e+02 }, - { "Ir170", PoPs_genre_atom, 77, 93, 0, 1.69974965e+02 }, - { "Ir171", PoPs_genre_atom, 77, 94, 0, 1.70971626042e+02 }, - { "Ir172", PoPs_genre_atom, 77, 95, 0, 1.71970456e+02 }, - { "Ir173", PoPs_genre_atom, 77, 96, 0, 1.72967501739e+02 }, - { "Ir174", PoPs_genre_atom, 77, 97, 0, 1.73966861045e+02 }, - { "Ir175", PoPs_genre_atom, 77, 98, 0, 1.74964112895e+02 }, - { "Ir176", PoPs_genre_atom, 77, 99, 0, 1.75963648688e+02 }, - { "Ir177", PoPs_genre_atom, 77, 100, 0, 1.769613015e+02 }, - { "Ir178", PoPs_genre_atom, 77, 101, 0, 1.77961082e+02 }, - { "Ir179", PoPs_genre_atom, 77, 102, 0, 1.78959122266e+02 }, - { "Ir180", PoPs_genre_atom, 77, 103, 0, 1.79959229446e+02 }, - { "Ir181", PoPs_genre_atom, 77, 104, 0, 1.80957625297e+02 }, - { "Ir182", PoPs_genre_atom, 77, 105, 0, 1.81958076296e+02 }, - { "Ir183", PoPs_genre_atom, 77, 106, 0, 1.82956846458e+02 }, - { "Ir184", PoPs_genre_atom, 77, 107, 0, 1.83957476e+02 }, - { "Ir185", PoPs_genre_atom, 77, 108, 0, 1.84956698e+02 }, - { "Ir186", PoPs_genre_atom, 77, 109, 0, Ir186_Mass }, - { "Ir187", PoPs_genre_atom, 77, 110, 0, 1.86957363361e+02 }, - { "Ir188", PoPs_genre_atom, 77, 111, 0, 1.87958853121e+02 }, - { "Ir189", PoPs_genre_atom, 77, 112, 0, 1.88958718935e+02 }, - { "Ir190", PoPs_genre_atom, 77, 113, 0, Ir190_Mass }, - { "Ir191", PoPs_genre_atom, 77, 114, 0, Ir191_Mass }, - { "Ir192", PoPs_genre_atom, 77, 115, 0, Ir192_Mass }, - { "Ir193", PoPs_genre_atom, 77, 116, 0, Ir193_Mass }, - { "Ir194", PoPs_genre_atom, 77, 117, 0, Ir194_Mass }, - { "Ir195", PoPs_genre_atom, 77, 118, 0, Ir195_Mass }, - { "Ir196", PoPs_genre_atom, 77, 119, 0, Ir196_Mass }, - { "Ir197", PoPs_genre_atom, 77, 120, 0, Ir197_Mass }, - { "Ir198", PoPs_genre_atom, 77, 121, 0, 1.9797228e+02 }, - { "Ir199", PoPs_genre_atom, 77, 122, 0, 1.98973804583e+02 }, - { "Pt_natural", PoPs_genre_atom, 78, -1, 0, 1.9509e+02 }, - { "Pt166", PoPs_genre_atom, 78, 88, 0, 1.65994855e+02 }, - { "Pt167", PoPs_genre_atom, 78, 89, 0, 1.66992979e+02 }, - { "Pt168", PoPs_genre_atom, 78, 90, 0, 1.67988150742e+02 }, - { "Pt169", PoPs_genre_atom, 78, 91, 0, 1.68986715e+02 }, - { "Pt170", PoPs_genre_atom, 78, 92, 0, 1.69982495289e+02 }, - { "Pt171", PoPs_genre_atom, 78, 93, 0, 1.70981244542e+02 }, - { "Pt172", PoPs_genre_atom, 78, 94, 0, 1.71977347128e+02 }, - { "Pt173", PoPs_genre_atom, 78, 95, 0, 1.72976444754e+02 }, - { "Pt174", PoPs_genre_atom, 78, 96, 0, 1.73972818767e+02 }, - { "Pt175", PoPs_genre_atom, 78, 97, 0, 1.74972420552e+02 }, - { "Pt176", PoPs_genre_atom, 78, 98, 0, 1.75968944622e+02 }, - { "Pt177", PoPs_genre_atom, 78, 99, 0, 1.76968469481e+02 }, - { "Pt178", PoPs_genre_atom, 78, 100, 0, 1.77965648724e+02 }, - { "Pt179", PoPs_genre_atom, 78, 101, 0, 1.78965363404e+02 }, - { "Pt180", PoPs_genre_atom, 78, 102, 0, 1.79963031477e+02 }, - { "Pt181", PoPs_genre_atom, 78, 103, 0, 1.80963097285e+02 }, - { "Pt182", PoPs_genre_atom, 78, 104, 0, 1.81961170656e+02 }, - { "Pt183", PoPs_genre_atom, 78, 105, 0, Pt183_Mass }, - { "Pt184", PoPs_genre_atom, 78, 106, 0, 1.83959922251e+02 }, - { "Pt185", PoPs_genre_atom, 78, 107, 0, Pt185_Mass }, - { "Pt186", PoPs_genre_atom, 78, 108, 0, 1.85959350813e+02 }, - { "Pt187", PoPs_genre_atom, 78, 109, 0, 1.86960587e+02 }, - { "Pt188", PoPs_genre_atom, 78, 110, 0, 1.87959395391e+02 }, - { "Pt189", PoPs_genre_atom, 78, 111, 0, 1.88960833686e+02 }, - { "Pt190", PoPs_genre_atom, 78, 112, 0, 1.89959931655e+02 }, - { "Pt191", PoPs_genre_atom, 78, 113, 0, 1.90961676661e+02 }, - { "Pt192", PoPs_genre_atom, 78, 114, 0, 1.91961038005e+02 }, - { "Pt193", PoPs_genre_atom, 78, 115, 0, Pt193_Mass }, - { "Pt194", PoPs_genre_atom, 78, 116, 0, 1.93962680253e+02 }, - { "Pt195", PoPs_genre_atom, 78, 117, 0, Pt195_Mass }, - { "Pt196", PoPs_genre_atom, 78, 118, 0, 1.95964951521e+02 }, - { "Pt197", PoPs_genre_atom, 78, 119, 0, Pt197_Mass }, - { "Pt198", PoPs_genre_atom, 78, 120, 0, 1.9796789279e+02 }, - { "Pt199", PoPs_genre_atom, 78, 121, 0, Pt199_Mass }, - { "Pt200", PoPs_genre_atom, 78, 122, 0, 1.99971440677e+02 }, - { "Pt201", PoPs_genre_atom, 78, 123, 0, 2.00974512868e+02 }, - { "Pt202", PoPs_genre_atom, 78, 124, 0, 2.0197574e+02 }, - { "Au_natural", PoPs_genre_atom, 79, -1, 0, 1.969665e+02 }, - { "Au169", PoPs_genre_atom, 79, 90, 0, 1.6899808e+02 }, - { "Au170", PoPs_genre_atom, 79, 91, 0, 1.69996122e+02 }, - { "Au171", PoPs_genre_atom, 79, 92, 0, 1.70991878881e+02 }, - { "Au172", PoPs_genre_atom, 79, 93, 0, 1.71990035e+02 }, - { "Au173", PoPs_genre_atom, 79, 94, 0, 1.7298623738e+02 }, - { "Au174", PoPs_genre_atom, 79, 95, 0, 1.73984761e+02 }, - { "Au175", PoPs_genre_atom, 79, 96, 0, 1.74981274107e+02 }, - { "Au176", PoPs_genre_atom, 79, 97, 0, 1.75980099e+02 }, - { "Au177", PoPs_genre_atom, 79, 98, 0, 1.76976864908e+02 }, - { "Au178", PoPs_genre_atom, 79, 99, 0, 1.7797603192e+02 }, - { "Au179", PoPs_genre_atom, 79, 100, 0, 1.78973212812e+02 }, - { "Au180", PoPs_genre_atom, 79, 101, 0, 1.79972521124e+02 }, - { "Au181", PoPs_genre_atom, 79, 102, 0, 1.80970079048e+02 }, - { "Au182", PoPs_genre_atom, 79, 103, 0, 1.81969617874e+02 }, - { "Au183", PoPs_genre_atom, 79, 104, 0, 1.82967593034e+02 }, - { "Au184", PoPs_genre_atom, 79, 105, 0, 1.83967451524e+02 }, - { "Au185", PoPs_genre_atom, 79, 106, 0, Au185_Mass }, - { "Au186", PoPs_genre_atom, 79, 107, 0, 1.85965952703e+02 }, - { "Au187", PoPs_genre_atom, 79, 108, 0, Au187_Mass }, - { "Au188", PoPs_genre_atom, 79, 109, 0, 1.87965323661e+02 }, - { "Au189", PoPs_genre_atom, 79, 110, 0, Au189_Mass }, - { "Au190", PoPs_genre_atom, 79, 111, 0, 1.89964700339e+02 }, - { "Au191", PoPs_genre_atom, 79, 112, 0, 1.90963704225e+02 }, - { "Au192", PoPs_genre_atom, 79, 113, 0, 1.91964812953e+02 }, - { "Au193", PoPs_genre_atom, 79, 114, 0, Au193_Mass }, - { "Au194", PoPs_genre_atom, 79, 115, 0, 1.9396536525e+02 }, - { "Au195", PoPs_genre_atom, 79, 116, 0, Au195_Mass }, - { "Au196", PoPs_genre_atom, 79, 117, 0, Au196_Mass }, - { "Au197", PoPs_genre_atom, 79, 118, 0, Au197_Mass }, - { "Au198", PoPs_genre_atom, 79, 119, 0, 1.97968242303e+02 }, - { "Au199", PoPs_genre_atom, 79, 120, 0, 1.98968765193e+02 }, - { "Au200", PoPs_genre_atom, 79, 121, 0, Au200_Mass }, - { "Au201", PoPs_genre_atom, 79, 122, 0, 2.0097165724e+02 }, - { "Au202", PoPs_genre_atom, 79, 123, 0, 2.01973805838e+02 }, - { "Au203", PoPs_genre_atom, 79, 124, 0, 2.02975154542e+02 }, - { "Au204", PoPs_genre_atom, 79, 125, 0, 2.03977724e+02 }, - { "Au205", PoPs_genre_atom, 79, 126, 0, 2.0497987e+02 }, - { "Hg_natural", PoPs_genre_atom, 80, -1, 0, 2.0059e+02 }, - { "Hg171", PoPs_genre_atom, 80, 91, 0, 1.7100376e+02 }, - { "Hg172", PoPs_genre_atom, 80, 92, 0, 1.71998832686e+02 }, - { "Hg173", PoPs_genre_atom, 80, 93, 0, 1.72997242e+02 }, - { "Hg174", PoPs_genre_atom, 80, 94, 0, 1.73992863695e+02 }, - { "Hg175", PoPs_genre_atom, 80, 95, 0, 1.7499142327e+02 }, - { "Hg176", PoPs_genre_atom, 80, 96, 0, 1.7598735458e+02 }, - { "Hg177", PoPs_genre_atom, 80, 97, 0, 1.76986279158e+02 }, - { "Hg178", PoPs_genre_atom, 80, 98, 0, 1.77982483143e+02 }, - { "Hg179", PoPs_genre_atom, 80, 99, 0, 1.78981833861e+02 }, - { "Hg180", PoPs_genre_atom, 80, 100, 0, 1.79978266394e+02 }, - { "Hg181", PoPs_genre_atom, 80, 101, 0, 1.80977819311e+02 }, - { "Hg182", PoPs_genre_atom, 80, 102, 0, 1.81974689964e+02 }, - { "Hg183", PoPs_genre_atom, 80, 103, 0, 1.82974449841e+02 }, - { "Hg184", PoPs_genre_atom, 80, 104, 0, 1.83971713051e+02 }, - { "Hg185", PoPs_genre_atom, 80, 105, 0, Hg185_Mass }, - { "Hg186", PoPs_genre_atom, 80, 106, 0, 1.8596936179e+02 }, - { "Hg187", PoPs_genre_atom, 80, 107, 0, Hg187_Mass }, - { "Hg188", PoPs_genre_atom, 80, 108, 0, 1.87967577049e+02 }, - { "Hg189", PoPs_genre_atom, 80, 109, 0, Hg189_Mass }, - { "Hg190", PoPs_genre_atom, 80, 110, 0, 1.89966322449e+02 }, - { "Hg191", PoPs_genre_atom, 80, 111, 0, Hg191_Mass }, - { "Hg192", PoPs_genre_atom, 80, 112, 0, 1.91965634327e+02 }, - { "Hg193", PoPs_genre_atom, 80, 113, 0, Hg193_Mass }, - { "Hg194", PoPs_genre_atom, 80, 114, 0, 1.93965439409e+02 }, - { "Hg195", PoPs_genre_atom, 80, 115, 0, Hg195_Mass }, - { "Hg196", PoPs_genre_atom, 80, 116, 0, 1.95965832649e+02 }, - { "Hg197", PoPs_genre_atom, 80, 117, 0, Hg197_Mass }, - { "Hg198", PoPs_genre_atom, 80, 118, 0, 1.97966769032e+02 }, - { "Hg199", PoPs_genre_atom, 80, 119, 0, Hg199_Mass }, - { "Hg200", PoPs_genre_atom, 80, 120, 0, 1.99968326004e+02 }, - { "Hg201", PoPs_genre_atom, 80, 121, 0, 2.00970302268e+02 }, - { "Hg202", PoPs_genre_atom, 80, 122, 0, 2.01970643011e+02 }, - { "Hg203", PoPs_genre_atom, 80, 123, 0, 2.02972872484e+02 }, - { "Hg204", PoPs_genre_atom, 80, 124, 0, 2.03973493933e+02 }, - { "Hg205", PoPs_genre_atom, 80, 125, 0, 2.04976073386e+02 }, - { "Hg206", PoPs_genre_atom, 80, 126, 0, 2.05977514066e+02 }, - { "Hg207", PoPs_genre_atom, 80, 127, 0, 2.06982588545e+02 }, - { "Hg208", PoPs_genre_atom, 80, 128, 0, 2.0798594e+02 }, - { "Hg209", PoPs_genre_atom, 80, 129, 0, 2.0899104e+02 }, - { "Hg210", PoPs_genre_atom, 80, 130, 0, 2.0999451e+02 }, - { "Tl_natural", PoPs_genre_atom, 81, -1, 0, 2.0437e+02 }, - { "Tl176", PoPs_genre_atom, 81, 95, 0, 1.7600059e+02 }, - { "Tl177", PoPs_genre_atom, 81, 96, 0, 1.76996427286e+02 }, - { "Tl178", PoPs_genre_atom, 81, 97, 0, 1.77994897e+02 }, - { "Tl179", PoPs_genre_atom, 81, 98, 0, 1.78991089082e+02 }, - { "Tl180", PoPs_genre_atom, 81, 99, 0, 1.79989906e+02 }, - { "Tl181", PoPs_genre_atom, 81, 100, 0, 1.80986257447e+02 }, - { "Tl182", PoPs_genre_atom, 81, 101, 0, 1.81985667104e+02 }, - { "Tl183", PoPs_genre_atom, 81, 102, 0, 1.82982192802e+02 }, - { "Tl184", PoPs_genre_atom, 81, 103, 0, 1.83981873122e+02 }, - { "Tl185", PoPs_genre_atom, 81, 104, 0, 1.84978791305e+02 }, - { "Tl186", PoPs_genre_atom, 81, 105, 0, Tl186_Mass }, - { "Tl187", PoPs_genre_atom, 81, 106, 0, Tl187_Mass }, - { "Tl188", PoPs_genre_atom, 81, 107, 0, Tl188_Mass }, - { "Tl189", PoPs_genre_atom, 81, 108, 0, Tl189_Mass }, - { "Tl190", PoPs_genre_atom, 81, 109, 0, Tl190_Mass }, - { "Tl191", PoPs_genre_atom, 81, 110, 0, Tl191_Mass }, - { "Tl192", PoPs_genre_atom, 81, 111, 0, Tl192_Mass }, - { "Tl193", PoPs_genre_atom, 81, 112, 0, Tl193_Mass }, - { "Tl194", PoPs_genre_atom, 81, 113, 0, Tl194_Mass }, - { "Tl195", PoPs_genre_atom, 81, 114, 0, Tl195_Mass }, - { "Tl196", PoPs_genre_atom, 81, 115, 0, Tl196_Mass }, - { "Tl197", PoPs_genre_atom, 81, 116, 0, 1.96969574511e+02 }, - { "Tl198", PoPs_genre_atom, 81, 117, 0, Tl198_Mass }, - { "Tl199", PoPs_genre_atom, 81, 118, 0, 1.98969877e+02 }, - { "Tl200", PoPs_genre_atom, 81, 119, 0, 1.99970962672e+02 }, - { "Tl201", PoPs_genre_atom, 81, 120, 0, 2.00970818891e+02 }, - { "Tl202", PoPs_genre_atom, 81, 121, 0, 2.01972105808e+02 }, - { "Tl203", PoPs_genre_atom, 81, 122, 0, 2.0297234422e+02 }, - { "Tl204", PoPs_genre_atom, 81, 123, 0, 2.03973863522e+02 }, - { "Tl205", PoPs_genre_atom, 81, 124, 0, 2.04974427541e+02 }, - { "Tl206", PoPs_genre_atom, 81, 125, 0, 2.0597611032e+02 }, - { "Tl207", PoPs_genre_atom, 81, 126, 0, Tl207_Mass }, - { "Tl208", PoPs_genre_atom, 81, 127, 0, 2.079820187e+02 }, - { "Tl209", PoPs_genre_atom, 81, 128, 0, 2.08985358952e+02 }, - { "Tl210", PoPs_genre_atom, 81, 129, 0, 2.09990073689e+02 }, - { "Tl211", PoPs_genre_atom, 81, 130, 0, 2.10993477e+02 }, - { "Tl212", PoPs_genre_atom, 81, 131, 0, 2.11998228e+02 }, - { "Pb_natural", PoPs_genre_atom, 82, -1, 0, 2.072e+02 }, - { "Pb178", PoPs_genre_atom, 82, 96, 0, 1.78003830191e+02 }, - { "Pb179", PoPs_genre_atom, 82, 97, 0, 1.7900215e+02 }, - { "Pb180", PoPs_genre_atom, 82, 98, 0, 1.79997918173e+02 }, - { "Pb181", PoPs_genre_atom, 82, 99, 0, 1.80996623958e+02 }, - { "Pb182", PoPs_genre_atom, 82, 100, 0, 1.81992671842e+02 }, - { "Pb183", PoPs_genre_atom, 82, 101, 0, 1.82991874629e+02 }, - { "Pb184", PoPs_genre_atom, 82, 102, 0, 1.83988142339e+02 }, - { "Pb185", PoPs_genre_atom, 82, 103, 0, 1.84987609944e+02 }, - { "Pb186", PoPs_genre_atom, 82, 104, 0, 1.85984238945e+02 }, - { "Pb187", PoPs_genre_atom, 82, 105, 0, Pb187_Mass }, - { "Pb188", PoPs_genre_atom, 82, 106, 0, 1.87980874338e+02 }, - { "Pb189", PoPs_genre_atom, 82, 107, 0, 1.88980807e+02 }, - { "Pb190", PoPs_genre_atom, 82, 108, 0, 1.89978081517e+02 }, - { "Pb191", PoPs_genre_atom, 82, 109, 0, Pb191_Mass }, - { "Pb192", PoPs_genre_atom, 82, 110, 0, 1.91975785171e+02 }, - { "Pb193", PoPs_genre_atom, 82, 111, 0, Pb193_Mass }, - { "Pb194", PoPs_genre_atom, 82, 112, 0, 1.9397401207e+02 }, - { "Pb195", PoPs_genre_atom, 82, 113, 0, Pb195_Mass }, - { "Pb196", PoPs_genre_atom, 82, 114, 0, 1.95972774109e+02 }, - { "Pb197", PoPs_genre_atom, 82, 115, 0, Pb197_Mass }, - { "Pb198", PoPs_genre_atom, 82, 116, 0, 1.97972033959e+02 }, - { "Pb199", PoPs_genre_atom, 82, 117, 0, Pb199_Mass }, - { "Pb200", PoPs_genre_atom, 82, 118, 0, 1.99971826675e+02 }, - { "Pb201", PoPs_genre_atom, 82, 119, 0, Pb201_Mass }, - { "Pb202", PoPs_genre_atom, 82, 120, 0, Pb202_Mass }, - { "Pb203", PoPs_genre_atom, 82, 121, 0, Pb203_Mass }, - { "Pb204", PoPs_genre_atom, 82, 122, 0, Pb204_Mass }, - { "Pb205", PoPs_genre_atom, 82, 123, 0, 2.04974481755e+02 }, - { "Pb206", PoPs_genre_atom, 82, 124, 0, 2.05974465278e+02 }, - { "Pb207", PoPs_genre_atom, 82, 125, 0, Pb207_Mass }, - { "Pb208", PoPs_genre_atom, 82, 126, 0, 2.07976652071e+02 }, - { "Pb209", PoPs_genre_atom, 82, 127, 0, 2.0898109012e+02 }, - { "Pb210", PoPs_genre_atom, 82, 128, 0, 2.09984188527e+02 }, - { "Pb211", PoPs_genre_atom, 82, 129, 0, 2.10988736964e+02 }, - { "Pb212", PoPs_genre_atom, 82, 130, 0, 2.11991897543e+02 }, - { "Pb213", PoPs_genre_atom, 82, 131, 0, 2.12996581499e+02 }, - { "Pb214", PoPs_genre_atom, 82, 132, 0, 2.13999805408e+02 }, - { "Pb215", PoPs_genre_atom, 82, 133, 0, 2.15004807e+02 }, - { "Bi_natural", PoPs_genre_atom, 83, -1, 0, 2.089804e+02 }, - { "Bi184", PoPs_genre_atom, 83, 101, 0, 1.84001124e+02 }, - { "Bi185", PoPs_genre_atom, 83, 102, 0, 1.84997625e+02 }, - { "Bi186", PoPs_genre_atom, 83, 103, 0, 1.85996597625e+02 }, - { "Bi187", PoPs_genre_atom, 83, 104, 0, 1.86993157835e+02 }, - { "Bi188", PoPs_genre_atom, 83, 105, 0, 1.87992265154e+02 }, - { "Bi189", PoPs_genre_atom, 83, 106, 0, 1.88989199012e+02 }, - { "Bi190", PoPs_genre_atom, 83, 107, 0, 1.89988295129e+02 }, - { "Bi191", PoPs_genre_atom, 83, 108, 0, 1.90985786119e+02 }, - { "Bi192", PoPs_genre_atom, 83, 109, 0, 1.91985457954e+02 }, - { "Bi193", PoPs_genre_atom, 83, 110, 0, 1.92982959771e+02 }, - { "Bi194", PoPs_genre_atom, 83, 111, 0, 1.9398283396e+02 }, - { "Bi195", PoPs_genre_atom, 83, 112, 0, 1.94980650737e+02 }, - { "Bi196", PoPs_genre_atom, 83, 113, 0, 1.95980666509e+02 }, - { "Bi197", PoPs_genre_atom, 83, 114, 0, 1.96978864454e+02 }, - { "Bi198", PoPs_genre_atom, 83, 115, 0, 1.97979206e+02 }, - { "Bi199", PoPs_genre_atom, 83, 116, 0, 1.98977671961e+02 }, - { "Bi200", PoPs_genre_atom, 83, 117, 0, 1.99978131829e+02 }, - { "Bi201", PoPs_genre_atom, 83, 118, 0, 2.00977009036e+02 }, - { "Bi202", PoPs_genre_atom, 83, 119, 0, 2.01977742324e+02 }, - { "Bi203", PoPs_genre_atom, 83, 120, 0, 2.02976876001e+02 }, - { "Bi204", PoPs_genre_atom, 83, 121, 0, 2.03977812736e+02 }, - { "Bi205", PoPs_genre_atom, 83, 122, 0, 2.04977389366e+02 }, - { "Bi206", PoPs_genre_atom, 83, 123, 0, 2.0597849913e+02 }, - { "Bi207", PoPs_genre_atom, 83, 124, 0, 2.06978470679e+02 }, - { "Bi208", PoPs_genre_atom, 83, 125, 0, 2.07979742196e+02 }, - { "Bi209", PoPs_genre_atom, 83, 126, 0, 2.08980398734e+02 }, - { "Bi210", PoPs_genre_atom, 83, 127, 0, 2.09984120371e+02 }, - { "Bi211", PoPs_genre_atom, 83, 128, 0, 2.1098726946e+02 }, - { "Bi212", PoPs_genre_atom, 83, 129, 0, 2.11991285724e+02 }, - { "Bi213", PoPs_genre_atom, 83, 130, 0, 2.12994384666e+02 }, - { "Bi214", PoPs_genre_atom, 83, 131, 0, 2.13998711539e+02 }, - { "Bi215", PoPs_genre_atom, 83, 132, 0, 2.15001769776e+02 }, - { "Bi216", PoPs_genre_atom, 83, 133, 0, 2.16006305943e+02 }, - { "Bi217", PoPs_genre_atom, 83, 134, 0, 2.1700947e+02 }, - { "Bi218", PoPs_genre_atom, 83, 135, 0, 2.18014316e+02 }, - { "Po_natural", PoPs_genre_atom, 84, -1, 0, 2.09e+02 }, - { "Po188", PoPs_genre_atom, 84, 104, 0, 1.87999422048e+02 }, - { "Po189", PoPs_genre_atom, 84, 105, 0, 1.88998480562e+02 }, - { "Po190", PoPs_genre_atom, 84, 106, 0, 1.89995101185e+02 }, - { "Po191", PoPs_genre_atom, 84, 107, 0, 1.90994574485e+02 }, - { "Po192", PoPs_genre_atom, 84, 108, 0, 1.91991335149e+02 }, - { "Po193", PoPs_genre_atom, 84, 109, 0, 1.92991025275e+02 }, - { "Po194", PoPs_genre_atom, 84, 110, 0, 1.93988185606e+02 }, - { "Po195", PoPs_genre_atom, 84, 111, 0, 1.94988110728e+02 }, - { "Po196", PoPs_genre_atom, 84, 112, 0, 1.9598553458e+02 }, - { "Po197", PoPs_genre_atom, 84, 113, 0, 1.9698565963e+02 }, - { "Po198", PoPs_genre_atom, 84, 114, 0, 1.97983388616e+02 }, - { "Po199", PoPs_genre_atom, 84, 115, 0, 1.98983666063e+02 }, - { "Po200", PoPs_genre_atom, 84, 116, 0, 1.99981798604e+02 }, - { "Po201", PoPs_genre_atom, 84, 117, 0, 2.00982259764e+02 }, - { "Po202", PoPs_genre_atom, 84, 118, 0, 2.01980757541e+02 }, - { "Po203", PoPs_genre_atom, 84, 119, 0, 2.02981420103e+02 }, - { "Po204", PoPs_genre_atom, 84, 120, 0, 2.03980318121e+02 }, - { "Po205", PoPs_genre_atom, 84, 121, 0, 2.04981203322e+02 }, - { "Po206", PoPs_genre_atom, 84, 122, 0, 2.05980481099e+02 }, - { "Po207", PoPs_genre_atom, 84, 123, 0, 2.06981593173e+02 }, - { "Po208", PoPs_genre_atom, 84, 124, 0, 2.07981245702e+02 }, - { "Po209", PoPs_genre_atom, 84, 125, 0, 2.08982430435e+02 }, - { "Po210", PoPs_genre_atom, 84, 126, 0, 2.09982873673e+02 }, - { "Po211", PoPs_genre_atom, 84, 127, 0, 2.10986653154e+02 }, - { "Po212", PoPs_genre_atom, 84, 128, 0, 2.11988867969e+02 }, - { "Po213", PoPs_genre_atom, 84, 129, 0, 2.1299285728e+02 }, - { "Po214", PoPs_genre_atom, 84, 130, 0, 2.1399520135e+02 }, - { "Po215", PoPs_genre_atom, 84, 131, 0, 2.14999419988e+02 }, - { "Po216", PoPs_genre_atom, 84, 132, 0, 2.16001915035e+02 }, - { "Po217", PoPs_genre_atom, 84, 133, 0, 2.17006334796e+02 }, - { "Po218", PoPs_genre_atom, 84, 134, 0, 2.18008973037e+02 }, - { "Po219", PoPs_genre_atom, 84, 135, 0, 2.19013744e+02 }, - { "Po220", PoPs_genre_atom, 84, 136, 0, 2.20016602e+02 }, - { "At_natural", PoPs_genre_atom, 85, -1, 0, 2.1e+02 }, - { "At193", PoPs_genre_atom, 85, 108, 0, 1.92999843112e+02 }, - { "At194", PoPs_genre_atom, 85, 109, 0, 1.93998725085e+02 }, - { "At195", PoPs_genre_atom, 85, 110, 0, 1.94996268098e+02 }, - { "At196", PoPs_genre_atom, 85, 111, 0, 1.95995788077e+02 }, - { "At197", PoPs_genre_atom, 85, 112, 0, 1.96993189215e+02 }, - { "At198", PoPs_genre_atom, 85, 113, 0, 1.97992837202e+02 }, - { "At199", PoPs_genre_atom, 85, 114, 0, 1.98990532254e+02 }, - { "At200", PoPs_genre_atom, 85, 115, 0, 1.99990351264e+02 }, - { "At201", PoPs_genre_atom, 85, 116, 0, 2.00988416999e+02 }, - { "At202", PoPs_genre_atom, 85, 117, 0, 2.01988630236e+02 }, - { "At203", PoPs_genre_atom, 85, 118, 0, 2.02986941984e+02 }, - { "At204", PoPs_genre_atom, 85, 119, 0, 2.03987251326e+02 }, - { "At205", PoPs_genre_atom, 85, 120, 0, 2.04986074483e+02 }, - { "At206", PoPs_genre_atom, 85, 121, 0, 2.05986667036e+02 }, - { "At207", PoPs_genre_atom, 85, 122, 0, 2.06985783502e+02 }, - { "At208", PoPs_genre_atom, 85, 123, 0, 2.07986589977e+02 }, - { "At209", PoPs_genre_atom, 85, 124, 0, 2.08986173143e+02 }, - { "At210", PoPs_genre_atom, 85, 125, 0, 2.0998714771e+02 }, - { "At211", PoPs_genre_atom, 85, 126, 0, 2.10987496271e+02 }, - { "At212", PoPs_genre_atom, 85, 127, 0, 2.11990744771e+02 }, - { "At213", PoPs_genre_atom, 85, 128, 0, 2.12992936646e+02 }, - { "At214", PoPs_genre_atom, 85, 129, 0, 2.13996371733e+02 }, - { "At215", PoPs_genre_atom, 85, 130, 0, 2.1499865257e+02 }, - { "At216", PoPs_genre_atom, 85, 131, 0, 2.16002423257e+02 }, - { "At217", PoPs_genre_atom, 85, 132, 0, 2.17004718822e+02 }, - { "At218", PoPs_genre_atom, 85, 133, 0, 2.18008694336e+02 }, - { "At219", PoPs_genre_atom, 85, 134, 0, 2.19011161691e+02 }, - { "At220", PoPs_genre_atom, 85, 135, 0, 2.20015407682e+02 }, - { "At221", PoPs_genre_atom, 85, 136, 0, 2.2101805e+02 }, - { "At222", PoPs_genre_atom, 85, 137, 0, 2.2202233e+02 }, - { "At223", PoPs_genre_atom, 85, 138, 0, 2.2302519e+02 }, - { "Rn_natural", PoPs_genre_atom, 86, -1, 0, 2.22e+02 }, - { "Rn195", PoPs_genre_atom, 86, 109, 0, 1.95005437696e+02 }, - { "Rn196", PoPs_genre_atom, 86, 110, 0, 1.96002115223e+02 }, - { "Rn197", PoPs_genre_atom, 86, 111, 0, 1.97001584351e+02 }, - { "Rn198", PoPs_genre_atom, 86, 112, 0, 1.97998678663e+02 }, - { "Rn199", PoPs_genre_atom, 86, 113, 0, 1.98998370297e+02 }, - { "Rn200", PoPs_genre_atom, 86, 114, 0, 1.999956993e+02 }, - { "Rn201", PoPs_genre_atom, 86, 115, 0, 2.00995628335e+02 }, - { "Rn202", PoPs_genre_atom, 86, 116, 0, 2.01993263492e+02 }, - { "Rn203", PoPs_genre_atom, 86, 117, 0, 2.02993386687e+02 }, - { "Rn204", PoPs_genre_atom, 86, 118, 0, 2.0399142874e+02 }, - { "Rn205", PoPs_genre_atom, 86, 119, 0, 2.04991718799e+02 }, - { "Rn206", PoPs_genre_atom, 86, 120, 0, 2.05990214104e+02 }, - { "Rn207", PoPs_genre_atom, 86, 121, 0, 2.06990734225e+02 }, - { "Rn208", PoPs_genre_atom, 86, 122, 0, 2.0798964247e+02 }, - { "Rn209", PoPs_genre_atom, 86, 123, 0, 2.08990414742e+02 }, - { "Rn210", PoPs_genre_atom, 86, 124, 0, 2.09989696216e+02 }, - { "Rn211", PoPs_genre_atom, 86, 125, 0, 2.10990600523e+02 }, - { "Rn212", PoPs_genre_atom, 86, 126, 0, 2.11990703529e+02 }, - { "Rn213", PoPs_genre_atom, 86, 127, 0, 2.12993882668e+02 }, - { "Rn214", PoPs_genre_atom, 86, 128, 0, 2.13995362554e+02 }, - { "Rn215", PoPs_genre_atom, 86, 129, 0, 2.14998745483e+02 }, - { "Rn216", PoPs_genre_atom, 86, 130, 0, 2.1600027437e+02 }, - { "Rn217", PoPs_genre_atom, 86, 131, 0, 2.17003927675e+02 }, - { "Rn218", PoPs_genre_atom, 86, 132, 0, 2.18005601256e+02 }, - { "Rn219", PoPs_genre_atom, 86, 133, 0, 2.19009480204e+02 }, - { "Rn220", PoPs_genre_atom, 86, 134, 0, 2.20011393981e+02 }, - { "Rn221", PoPs_genre_atom, 86, 135, 0, 2.21015536782e+02 }, - { "Rn222", PoPs_genre_atom, 86, 136, 0, 2.22017577738e+02 }, - { "Rn223", PoPs_genre_atom, 86, 137, 0, 2.2302179e+02 }, - { "Rn224", PoPs_genre_atom, 86, 138, 0, 2.2402409e+02 }, - { "Rn225", PoPs_genre_atom, 86, 139, 0, 2.2502844e+02 }, - { "Rn226", PoPs_genre_atom, 86, 140, 0, 2.2603089e+02 }, - { "Rn227", PoPs_genre_atom, 86, 141, 0, 2.27035407e+02 }, - { "Rn228", PoPs_genre_atom, 86, 142, 0, 2.28037986e+02 }, - { "Fr_natural", PoPs_genre_atom, 87, -1, 0, 2.23e+02 }, - { "Fr199", PoPs_genre_atom, 87, 112, 0, 1.99007258147e+02 }, - { "Fr200", PoPs_genre_atom, 87, 113, 0, 2.0000657249e+02 }, - { "Fr201", PoPs_genre_atom, 87, 114, 0, 2.01003860867e+02 }, - { "Fr202", PoPs_genre_atom, 87, 115, 0, 2.02003372847e+02 }, - { "Fr203", PoPs_genre_atom, 87, 116, 0, 2.03000924647e+02 }, - { "Fr204", PoPs_genre_atom, 87, 117, 0, 2.04000653204e+02 }, - { "Fr205", PoPs_genre_atom, 87, 118, 0, 2.0499859396e+02 }, - { "Fr206", PoPs_genre_atom, 87, 119, 0, 2.05998666066e+02 }, - { "Fr207", PoPs_genre_atom, 87, 120, 0, 2.06996949414e+02 }, - { "Fr208", PoPs_genre_atom, 87, 121, 0, 2.07997138783e+02 }, - { "Fr209", PoPs_genre_atom, 87, 122, 0, 2.08995953555e+02 }, - { "Fr210", PoPs_genre_atom, 87, 123, 0, 2.09996407738e+02 }, - { "Fr211", PoPs_genre_atom, 87, 124, 0, 2.10995536544e+02 }, - { "Fr212", PoPs_genre_atom, 87, 125, 0, 2.11996202244e+02 }, - { "Fr213", PoPs_genre_atom, 87, 126, 0, 2.12996189081e+02 }, - { "Fr214", PoPs_genre_atom, 87, 127, 0, 2.13998971145e+02 }, - { "Fr215", PoPs_genre_atom, 87, 128, 0, 2.15000341497e+02 }, - { "Fr216", PoPs_genre_atom, 87, 129, 0, 2.1600319799e+02 }, - { "Fr217", PoPs_genre_atom, 87, 130, 0, 2.17004631951e+02 }, - { "Fr218", PoPs_genre_atom, 87, 131, 0, 2.18007578322e+02 }, - { "Fr219", PoPs_genre_atom, 87, 132, 0, 2.19009252149e+02 }, - { "Fr220", PoPs_genre_atom, 87, 133, 0, 2.20012327405e+02 }, - { "Fr221", PoPs_genre_atom, 87, 134, 0, 2.21014254762e+02 }, - { "Fr222", PoPs_genre_atom, 87, 135, 0, 2.2201755173e+02 }, - { "Fr223", PoPs_genre_atom, 87, 136, 0, 2.23019735857e+02 }, - { "Fr224", PoPs_genre_atom, 87, 137, 0, 2.24023249951e+02 }, - { "Fr225", PoPs_genre_atom, 87, 138, 0, 2.25025565414e+02 }, - { "Fr226", PoPs_genre_atom, 87, 139, 0, 2.26029386231e+02 }, - { "Fr227", PoPs_genre_atom, 87, 140, 0, 2.27031835938e+02 }, - { "Fr228", PoPs_genre_atom, 87, 141, 0, 2.28035729e+02 }, - { "Fr229", PoPs_genre_atom, 87, 142, 0, 2.29038450228e+02 }, - { "Fr230", PoPs_genre_atom, 87, 143, 0, 2.3004251e+02 }, - { "Fr231", PoPs_genre_atom, 87, 144, 0, 2.3104544e+02 }, - { "Fr232", PoPs_genre_atom, 87, 145, 0, 2.32049772e+02 }, - { "Ra_natural", PoPs_genre_atom, 88, -1, 0, 2.26e+02 }, - { "Ra202", PoPs_genre_atom, 88, 114, 0, 2.02009890686e+02 }, - { "Ra203", PoPs_genre_atom, 88, 115, 0, 2.03009271619e+02 }, - { "Ra204", PoPs_genre_atom, 88, 116, 0, 2.04006499668e+02 }, - { "Ra205", PoPs_genre_atom, 88, 117, 0, 2.0500626857e+02 }, - { "Ra206", PoPs_genre_atom, 88, 118, 0, 2.0600382727e+02 }, - { "Ra207", PoPs_genre_atom, 88, 119, 0, 2.07003798105e+02 }, - { "Ra208", PoPs_genre_atom, 88, 120, 0, 2.0800183994e+02 }, - { "Ra209", PoPs_genre_atom, 88, 121, 0, 2.09001991373e+02 }, - { "Ra210", PoPs_genre_atom, 88, 122, 0, 2.10000494978e+02 }, - { "Ra211", PoPs_genre_atom, 88, 123, 0, 2.11000897987e+02 }, - { "Ra212", PoPs_genre_atom, 88, 124, 0, 2.11999794499e+02 }, - { "Ra213", PoPs_genre_atom, 88, 125, 0, 2.13000383959e+02 }, - { "Ra214", PoPs_genre_atom, 88, 126, 0, 2.14000107894e+02 }, - { "Ra215", PoPs_genre_atom, 88, 127, 0, 2.15002719834e+02 }, - { "Ra216", PoPs_genre_atom, 88, 128, 0, 2.16003533035e+02 }, - { "Ra217", PoPs_genre_atom, 88, 129, 0, 2.17006320327e+02 }, - { "Ra218", PoPs_genre_atom, 88, 130, 0, 2.1800714023e+02 }, - { "Ra219", PoPs_genre_atom, 88, 131, 0, 2.19010085078e+02 }, - { "Ra220", PoPs_genre_atom, 88, 132, 0, 2.20011028384e+02 }, - { "Ra221", PoPs_genre_atom, 88, 133, 0, 2.21013917338e+02 }, - { "Ra222", PoPs_genre_atom, 88, 134, 0, 2.2201537453e+02 }, - { "Ra223", PoPs_genre_atom, 88, 135, 0, 2.23018502171e+02 }, - { "Ra224", PoPs_genre_atom, 88, 136, 0, 2.24020211821e+02 }, - { "Ra225", PoPs_genre_atom, 88, 137, 0, 2.25023611564e+02 }, - { "Ra226", PoPs_genre_atom, 88, 138, 0, 2.26025409823e+02 }, - { "Ra227", PoPs_genre_atom, 88, 139, 0, 2.27029177842e+02 }, - { "Ra228", PoPs_genre_atom, 88, 140, 0, 2.28031070292e+02 }, - { "Ra229", PoPs_genre_atom, 88, 141, 0, 2.29034957577e+02 }, - { "Ra230", PoPs_genre_atom, 88, 142, 0, 2.30037056394e+02 }, - { "Ra231", PoPs_genre_atom, 88, 143, 0, 2.3104122e+02 }, - { "Ra232", PoPs_genre_atom, 88, 144, 0, 2.32043638e+02 }, - { "Ra233", PoPs_genre_atom, 88, 145, 0, 2.3304806e+02 }, - { "Ra234", PoPs_genre_atom, 88, 146, 0, 2.34050704e+02 }, - { "Ac_natural", PoPs_genre_atom, 89, -1, 0, 2.27e+02 }, - { "Ac206", PoPs_genre_atom, 89, 117, 0, 2.0601450498e+02 }, - { "Ac207", PoPs_genre_atom, 89, 118, 0, 2.07011949748e+02 }, - { "Ac208", PoPs_genre_atom, 89, 119, 0, 2.08011551551e+02 }, - { "Ac209", PoPs_genre_atom, 89, 120, 0, 2.09009494863e+02 }, - { "Ac210", PoPs_genre_atom, 89, 121, 0, 2.10009435986e+02 }, - { "Ac211", PoPs_genre_atom, 89, 122, 0, 2.11007734835e+02 }, - { "Ac212", PoPs_genre_atom, 89, 123, 0, 2.12007813822e+02 }, - { "Ac213", PoPs_genre_atom, 89, 124, 0, 2.13006607643e+02 }, - { "Ac214", PoPs_genre_atom, 89, 125, 0, 2.14006901798e+02 }, - { "Ac215", PoPs_genre_atom, 89, 126, 0, 2.15006453625e+02 }, - { "Ac216", PoPs_genre_atom, 89, 127, 0, 2.16008720075e+02 }, - { "Ac217", PoPs_genre_atom, 89, 128, 0, 2.17009346914e+02 }, - { "Ac218", PoPs_genre_atom, 89, 129, 0, 2.18011641453e+02 }, - { "Ac219", PoPs_genre_atom, 89, 130, 0, 2.19012420389e+02 }, - { "Ac220", PoPs_genre_atom, 89, 131, 0, 2.20014762979e+02 }, - { "Ac221", PoPs_genre_atom, 89, 132, 0, 2.21015591248e+02 }, - { "Ac222", PoPs_genre_atom, 89, 133, 0, 2.22017843851e+02 }, - { "Ac223", PoPs_genre_atom, 89, 134, 0, 2.23019137468e+02 }, - { "Ac224", PoPs_genre_atom, 89, 135, 0, 2.24021722866e+02 }, - { "Ac225", PoPs_genre_atom, 89, 136, 0, 2.25023229585e+02 }, - { "Ac226", PoPs_genre_atom, 89, 137, 0, 2.26026098089e+02 }, - { "Ac227", PoPs_genre_atom, 89, 138, 0, 2.27027752127e+02 }, - { "Ac228", PoPs_genre_atom, 89, 139, 0, 2.28031021112e+02 }, - { "Ac229", PoPs_genre_atom, 89, 140, 0, 2.29033015243e+02 }, - { "Ac230", PoPs_genre_atom, 89, 141, 0, 2.30036294178e+02 }, - { "Ac231", PoPs_genre_atom, 89, 142, 0, 2.31038558786e+02 }, - { "Ac232", PoPs_genre_atom, 89, 143, 0, 2.32042027438e+02 }, - { "Ac233", PoPs_genre_atom, 89, 144, 0, 2.3304455e+02 }, - { "Ac234", PoPs_genre_atom, 89, 145, 0, 2.3404842e+02 }, - { "Ac235", PoPs_genre_atom, 89, 146, 0, 2.35051232e+02 }, - { "Ac236", PoPs_genre_atom, 89, 147, 0, 2.36055296e+02 }, - { "Th_natural", PoPs_genre_atom, 90, -1, 0, 2.320381e+02 }, - { "Th209", PoPs_genre_atom, 90, 119, 0, 2.09017715682e+02 }, - { "Th210", PoPs_genre_atom, 90, 120, 0, 2.10015075342e+02 }, - { "Th211", PoPs_genre_atom, 90, 121, 0, 2.11014928413e+02 }, - { "Th212", PoPs_genre_atom, 90, 122, 0, 2.12012980288e+02 }, - { "Th213", PoPs_genre_atom, 90, 123, 0, 2.1301301014e+02 }, - { "Th214", PoPs_genre_atom, 90, 124, 0, 2.1401149977e+02 }, - { "Th215", PoPs_genre_atom, 90, 125, 0, 2.1501173033e+02 }, - { "Th216", PoPs_genre_atom, 90, 126, 0, 2.16011062115e+02 }, - { "Th217", PoPs_genre_atom, 90, 127, 0, 2.17013114328e+02 }, - { "Th218", PoPs_genre_atom, 90, 128, 0, 2.18013284499e+02 }, - { "Th219", PoPs_genre_atom, 90, 129, 0, 2.19015536895e+02 }, - { "Th220", PoPs_genre_atom, 90, 130, 0, 2.20015747762e+02 }, - { "Th221", PoPs_genre_atom, 90, 131, 0, 2.21018183674e+02 }, - { "Th222", PoPs_genre_atom, 90, 132, 0, 2.22018468121e+02 }, - { "Th223", PoPs_genre_atom, 90, 133, 0, 2.23020811448e+02 }, - { "Th224", PoPs_genre_atom, 90, 134, 0, 2.24021466895e+02 }, - { "Th225", PoPs_genre_atom, 90, 135, 0, 2.25023951021e+02 }, - { "Th226", PoPs_genre_atom, 90, 136, 0, 2.26024903069e+02 }, - { "Th227", PoPs_genre_atom, 90, 137, 0, 2.2702770407e+02 }, - { "Th228", PoPs_genre_atom, 90, 138, 0, 2.28028741127e+02 }, - { "Th229", PoPs_genre_atom, 90, 139, 0, 2.2903176243e+02 }, - { "Th230", PoPs_genre_atom, 90, 140, 0, 2.30033133843e+02 }, - { "Th231", PoPs_genre_atom, 90, 141, 0, 2.31036304343e+02 }, - { "Th232", PoPs_genre_atom, 90, 142, 0, 2.32038055325e+02 }, - { "Th233", PoPs_genre_atom, 90, 143, 0, 2.33041581843e+02 }, - { "Th234", PoPs_genre_atom, 90, 144, 0, 2.3404360123e+02 }, - { "Th235", PoPs_genre_atom, 90, 145, 0, 2.35047510074e+02 }, - { "Th236", PoPs_genre_atom, 90, 146, 0, 2.3604987e+02 }, - { "Th237", PoPs_genre_atom, 90, 147, 0, 2.37053894e+02 }, - { "Th238", PoPs_genre_atom, 90, 148, 0, 2.38056496e+02 }, - { "Pa_natural", PoPs_genre_atom, 91, -1, 0, 2.31e+02 }, - { "Pa212", PoPs_genre_atom, 91, 121, 0, 2.12023204138e+02 }, - { "Pa213", PoPs_genre_atom, 91, 122, 0, 2.1302110934e+02 }, - { "Pa214", PoPs_genre_atom, 91, 123, 0, 2.14020918417e+02 }, - { "Pa215", PoPs_genre_atom, 91, 124, 0, 2.15019185865e+02 }, - { "Pa216", PoPs_genre_atom, 91, 125, 0, 2.16019109564e+02 }, - { "Pa217", PoPs_genre_atom, 91, 126, 0, 2.17018323986e+02 }, - { "Pa218", PoPs_genre_atom, 91, 127, 0, 2.18020041889e+02 }, - { "Pa219", PoPs_genre_atom, 91, 128, 0, 2.19019883143e+02 }, - { "Pa220", PoPs_genre_atom, 91, 129, 0, 2.20021875303e+02 }, - { "Pa221", PoPs_genre_atom, 91, 130, 0, 2.21021877983e+02 }, - { "Pa222", PoPs_genre_atom, 91, 131, 0, 2.22023742e+02 }, - { "Pa223", PoPs_genre_atom, 91, 132, 0, 2.23023962273e+02 }, - { "Pa224", PoPs_genre_atom, 91, 133, 0, 2.24025625738e+02 }, - { "Pa225", PoPs_genre_atom, 91, 134, 0, 2.25026130678e+02 }, - { "Pa226", PoPs_genre_atom, 91, 135, 0, 2.26027947753e+02 }, - { "Pa227", PoPs_genre_atom, 91, 136, 0, 2.27028805072e+02 }, - { "Pa228", PoPs_genre_atom, 91, 137, 0, 2.28031051376e+02 }, - { "Pa229", PoPs_genre_atom, 91, 138, 0, 2.29032096793e+02 }, - { "Pa230", PoPs_genre_atom, 91, 139, 0, 2.30034540754e+02 }, - { "Pa231", PoPs_genre_atom, 91, 140, 0, 2.3103588399e+02 }, - { "Pa232", PoPs_genre_atom, 91, 141, 0, 2.32038591592e+02 }, - { "Pa233", PoPs_genre_atom, 91, 142, 0, 2.33040247277e+02 }, - { "Pa234", PoPs_genre_atom, 91, 143, 0, 2.34043308058e+02 }, - { "Pa235", PoPs_genre_atom, 91, 144, 0, 2.35045443615e+02 }, - { "Pa236", PoPs_genre_atom, 91, 145, 0, 2.36048681284e+02 }, - { "Pa237", PoPs_genre_atom, 91, 146, 0, 2.37051145659e+02 }, - { "Pa238", PoPs_genre_atom, 91, 147, 0, 2.3805450271e+02 }, - { "Pa239", PoPs_genre_atom, 91, 148, 0, 2.3905726e+02 }, - { "Pa240", PoPs_genre_atom, 91, 149, 0, 2.4006098e+02 }, - { "U_natural", PoPs_genre_atom, 92, -1, 0, 2.38029e+02 }, - { "U217", PoPs_genre_atom, 92, 125, 0, 2.17024368791e+02 }, - { "U218", PoPs_genre_atom, 92, 126, 0, 2.18023535671e+02 }, - { "U219", PoPs_genre_atom, 92, 127, 0, 2.1902491916e+02 }, - { "U220", PoPs_genre_atom, 92, 128, 0, 2.20024723e+02 }, - { "U221", PoPs_genre_atom, 92, 129, 0, 2.21026399e+02 }, - { "U222", PoPs_genre_atom, 92, 130, 0, 2.22026086e+02 }, - { "U223", PoPs_genre_atom, 92, 131, 0, 2.230277386e+02 }, - { "U224", PoPs_genre_atom, 92, 132, 0, 2.24027604778e+02 }, - { "U225", PoPs_genre_atom, 92, 133, 0, 2.25029390717e+02 }, - { "U226", PoPs_genre_atom, 92, 134, 0, 2.26029338702e+02 }, - { "U227", PoPs_genre_atom, 92, 135, 0, 2.27031156367e+02 }, - { "U228", PoPs_genre_atom, 92, 136, 0, 2.28031374006e+02 }, - { "U229", PoPs_genre_atom, 92, 137, 0, 2.29033505939e+02 }, - { "U230", PoPs_genre_atom, 92, 138, 0, 2.30033939784e+02 }, - { "U231", PoPs_genre_atom, 92, 139, 0, 2.31036293704e+02 }, - { "U232", PoPs_genre_atom, 92, 140, 0, 2.32037156152e+02 }, - { "U233", PoPs_genre_atom, 92, 141, 0, 2.33039635207e+02 }, - { "U234", PoPs_genre_atom, 92, 142, 0, 2.34040952088e+02 }, - { "U235", PoPs_genre_atom, 92, 143, 0, 2.35043929918e+02 }, - { "U236", PoPs_genre_atom, 92, 144, 0, 2.36045568006e+02 }, - { "U237", PoPs_genre_atom, 92, 145, 0, 2.37048730184e+02 }, - { "U238", PoPs_genre_atom, 92, 146, 0, 2.38050788247e+02 }, - { "U239", PoPs_genre_atom, 92, 147, 0, 2.39054293299e+02 }, - { "U240", PoPs_genre_atom, 92, 148, 0, 2.40056591988e+02 }, - { "U241", PoPs_genre_atom, 92, 149, 0, 2.4106033e+02 }, - { "U242", PoPs_genre_atom, 92, 150, 0, 2.42062931e+02 }, - { "Np_natural", PoPs_genre_atom, 93, -1, 0, 2.37e+02 }, - { "Np225", PoPs_genre_atom, 93, 132, 0, 2.25033913933e+02 }, - { "Np226", PoPs_genre_atom, 93, 133, 0, 2.26035145e+02 }, - { "Np227", PoPs_genre_atom, 93, 134, 0, 2.27034956789e+02 }, - { "Np228", PoPs_genre_atom, 93, 135, 0, 2.2803618e+02 }, - { "Np229", PoPs_genre_atom, 93, 136, 0, 2.29036263808e+02 }, - { "Np230", PoPs_genre_atom, 93, 137, 0, 2.30037827597e+02 }, - { "Np231", PoPs_genre_atom, 93, 138, 0, 2.31038245085e+02 }, - { "Np232", PoPs_genre_atom, 93, 139, 0, 2.32040108e+02 }, - { "Np233", PoPs_genre_atom, 93, 140, 0, 2.33040740546e+02 }, - { "Np234", PoPs_genre_atom, 93, 141, 0, 2.34042895038e+02 }, - { "Np235", PoPs_genre_atom, 93, 142, 0, 2.35044063267e+02 }, - { "Np236", PoPs_genre_atom, 93, 143, 0, Np236_Mass }, - { "Np237", PoPs_genre_atom, 93, 144, 0, 2.37048173444e+02 }, - { "Np238", PoPs_genre_atom, 93, 145, 0, 2.38050946405e+02 }, - { "Np239", PoPs_genre_atom, 93, 146, 0, 2.39052939025e+02 }, - { "Np240", PoPs_genre_atom, 93, 147, 0, 2.40056162182e+02 }, - { "Np241", PoPs_genre_atom, 93, 148, 0, 2.41058252431e+02 }, - { "Np242", PoPs_genre_atom, 93, 149, 0, 2.4206164118e+02 }, - { "Np243", PoPs_genre_atom, 93, 150, 0, 2.43064279e+02 }, - { "Np244", PoPs_genre_atom, 93, 151, 0, 2.4406785e+02 }, - { "Pu_natural", PoPs_genre_atom, 94, -1, 0, 2.44e+02 }, - { "Pu228", PoPs_genre_atom, 94, 134, 0, 2.28038742328e+02 }, - { "Pu229", PoPs_genre_atom, 94, 135, 0, 2.29040150212e+02 }, - { "Pu230", PoPs_genre_atom, 94, 136, 0, 2.30039649886e+02 }, - { "Pu231", PoPs_genre_atom, 94, 137, 0, 2.31041101107e+02 }, - { "Pu232", PoPs_genre_atom, 94, 138, 0, 2.32041187097e+02 }, - { "Pu233", PoPs_genre_atom, 94, 139, 0, 2.33042997375e+02 }, - { "Pu234", PoPs_genre_atom, 94, 140, 0, 2.34043317076e+02 }, - { "Pu235", PoPs_genre_atom, 94, 141, 0, 2.3504528605e+02 }, - { "Pu236", PoPs_genre_atom, 94, 142, 0, 2.36046057964e+02 }, - { "Pu237", PoPs_genre_atom, 94, 143, 0, 2.37048409658e+02 }, - { "Pu238", PoPs_genre_atom, 94, 144, 0, 2.38049559894e+02 }, - { "Pu239", PoPs_genre_atom, 94, 145, 0, 2.39052163381e+02 }, - { "Pu240", PoPs_genre_atom, 94, 146, 0, 2.40053813545e+02 }, - { "Pu241", PoPs_genre_atom, 94, 147, 0, 2.41056851456e+02 }, - { "Pu242", PoPs_genre_atom, 94, 148, 0, 2.42058742611e+02 }, - { "Pu243", PoPs_genre_atom, 94, 149, 0, 2.43062003092e+02 }, - { "Pu244", PoPs_genre_atom, 94, 150, 0, 2.44064203907e+02 }, - { "Pu245", PoPs_genre_atom, 94, 151, 0, 2.45067747154e+02 }, - { "Pu246", PoPs_genre_atom, 94, 152, 0, 2.46070204627e+02 }, - { "Pu247", PoPs_genre_atom, 94, 153, 0, 2.4707407e+02 }, - { "Am_natural", PoPs_genre_atom, 95, -1, 0, 2.43e+02 }, - { "Am231", PoPs_genre_atom, 95, 136, 0, 2.3104556e+02 }, - { "Am232", PoPs_genre_atom, 95, 137, 0, 2.3204659e+02 }, - { "Am233", PoPs_genre_atom, 95, 138, 0, 2.33046348e+02 }, - { "Am234", PoPs_genre_atom, 95, 139, 0, 2.34047809e+02 }, - { "Am235", PoPs_genre_atom, 95, 140, 0, 2.35047946e+02 }, - { "Am236", PoPs_genre_atom, 95, 141, 0, 2.36049579e+02 }, - { "Am237", PoPs_genre_atom, 95, 142, 0, 2.37049996e+02 }, - { "Am238", PoPs_genre_atom, 95, 143, 0, 2.38051984324e+02 }, - { "Am239", PoPs_genre_atom, 95, 144, 0, 2.39053024479e+02 }, - { "Am240", PoPs_genre_atom, 95, 145, 0, 2.40055300179e+02 }, - { "Am241", PoPs_genre_atom, 95, 146, 0, 2.41056829144e+02 }, - { "Am242", PoPs_genre_atom, 95, 147, 0, Am242_Mass }, - { "Am243", PoPs_genre_atom, 95, 148, 0, 2.4306138108e+02 }, - { "Am244", PoPs_genre_atom, 95, 149, 0, Am244_Mass }, - { "Am245", PoPs_genre_atom, 95, 150, 0, 2.45066452114e+02 }, - { "Am246", PoPs_genre_atom, 95, 151, 0, 2.46069774619e+02 }, - { "Am247", PoPs_genre_atom, 95, 152, 0, 2.47072093e+02 }, - { "Am248", PoPs_genre_atom, 95, 153, 0, 2.48075752e+02 }, - { "Am249", PoPs_genre_atom, 95, 154, 0, 2.4907848e+02 }, - { "Cm_natural", PoPs_genre_atom, 96, -1, 0, 2.47e+02 }, - { "Cm233", PoPs_genre_atom, 96, 137, 0, 2.33050771232e+02 }, - { "Cm234", PoPs_genre_atom, 96, 138, 0, 2.34050159841e+02 }, - { "Cm235", PoPs_genre_atom, 96, 139, 0, 2.35051434e+02 }, - { "Cm236", PoPs_genre_atom, 96, 140, 0, 2.36051413e+02 }, - { "Cm237", PoPs_genre_atom, 96, 141, 0, 2.37052901e+02 }, - { "Cm238", PoPs_genre_atom, 96, 142, 0, 2.38053028697e+02 }, - { "Cm239", PoPs_genre_atom, 96, 143, 0, 2.39054957e+02 }, - { "Cm240", PoPs_genre_atom, 96, 144, 0, 2.40055529539e+02 }, - { "Cm241", PoPs_genre_atom, 96, 145, 0, 2.41057653001e+02 }, - { "Cm242", PoPs_genre_atom, 96, 146, 0, 2.42058835824e+02 }, - { "Cm243", PoPs_genre_atom, 96, 147, 0, 2.43061389114e+02 }, - { "Cm244", PoPs_genre_atom, 96, 148, 0, 2.44062752578e+02 }, - { "Cm245", PoPs_genre_atom, 96, 149, 0, 2.45065491249e+02 }, - { "Cm246", PoPs_genre_atom, 96, 150, 0, 2.46067223662e+02 }, - { "Cm247", PoPs_genre_atom, 96, 151, 0, 2.4707035354e+02 }, - { "Cm248", PoPs_genre_atom, 96, 152, 0, 2.48072348508e+02 }, - { "Cm249", PoPs_genre_atom, 96, 153, 0, 2.49075953413e+02 }, - { "Cm250", PoPs_genre_atom, 96, 154, 0, 2.50078356959e+02 }, - { "Cm251", PoPs_genre_atom, 96, 155, 0, 2.51082284605e+02 }, - { "Cm252", PoPs_genre_atom, 96, 156, 0, 2.5208487e+02 }, - { "Bk_natural", PoPs_genre_atom, 97, -1, 0, 2.47e+02 }, - { "Bk235", PoPs_genre_atom, 97, 138, 0, 2.3505658e+02 }, - { "Bk236", PoPs_genre_atom, 97, 139, 0, 2.3605733e+02 }, - { "Bk237", PoPs_genre_atom, 97, 140, 0, 2.37057003e+02 }, - { "Bk238", PoPs_genre_atom, 97, 141, 0, 2.38058281e+02 }, - { "Bk239", PoPs_genre_atom, 97, 142, 0, 2.39058279e+02 }, - { "Bk240", PoPs_genre_atom, 97, 143, 0, 2.40059759e+02 }, - { "Bk241", PoPs_genre_atom, 97, 144, 0, 2.4106023e+02 }, - { "Bk242", PoPs_genre_atom, 97, 145, 0, 2.42061981e+02 }, - { "Bk243", PoPs_genre_atom, 97, 146, 0, 2.43063007572e+02 }, - { "Bk244", PoPs_genre_atom, 97, 147, 0, 2.44065180774e+02 }, - { "Bk245", PoPs_genre_atom, 97, 148, 0, 2.45066361616e+02 }, - { "Bk246", PoPs_genre_atom, 97, 149, 0, 2.46068672947e+02 }, - { "Bk247", PoPs_genre_atom, 97, 150, 0, 2.4707030708e+02 }, - { "Bk248", PoPs_genre_atom, 97, 151, 0, 2.48073086e+02 }, - { "Bk249", PoPs_genre_atom, 97, 152, 0, 2.49074986657e+02 }, - { "Bk250", PoPs_genre_atom, 97, 153, 0, 2.5007831652e+02 }, - { "Bk251", PoPs_genre_atom, 97, 154, 0, 2.51080760172e+02 }, - { "Bk252", PoPs_genre_atom, 97, 155, 0, 2.5208431e+02 }, - { "Bk253", PoPs_genre_atom, 97, 156, 0, 2.5308688e+02 }, - { "Bk254", PoPs_genre_atom, 97, 157, 0, 2.540906e+02 }, - { "Cf_natural", PoPs_genre_atom, 98, -1, 0, 2.51e+02 }, - { "Cf237", PoPs_genre_atom, 98, 139, 0, 2.3706207e+02 }, - { "Cf238", PoPs_genre_atom, 98, 140, 0, 2.3806141e+02 }, - { "Cf239", PoPs_genre_atom, 98, 141, 0, 2.39062422e+02 }, - { "Cf240", PoPs_genre_atom, 98, 142, 0, 2.40062302e+02 }, - { "Cf241", PoPs_genre_atom, 98, 143, 0, 2.41063726e+02 }, - { "Cf242", PoPs_genre_atom, 98, 144, 0, 2.42063701552e+02 }, - { "Cf243", PoPs_genre_atom, 98, 145, 0, 2.43065427e+02 }, - { "Cf244", PoPs_genre_atom, 98, 146, 0, 2.44066000689e+02 }, - { "Cf245", PoPs_genre_atom, 98, 147, 0, 2.45068048612e+02 }, - { "Cf246", PoPs_genre_atom, 98, 148, 0, 2.46068805309e+02 }, - { "Cf247", PoPs_genre_atom, 98, 149, 0, 2.47071000589e+02 }, - { "Cf248", PoPs_genre_atom, 98, 150, 0, 2.48072184861e+02 }, - { "Cf249", PoPs_genre_atom, 98, 151, 0, 2.49074853537e+02 }, - { "Cf250", PoPs_genre_atom, 98, 152, 0, 2.50076406066e+02 }, - { "Cf251", PoPs_genre_atom, 98, 153, 0, 2.51079586788e+02 }, - { "Cf252", PoPs_genre_atom, 98, 154, 0, 2.52081625846e+02 }, - { "Cf253", PoPs_genre_atom, 98, 155, 0, 2.53085133145e+02 }, - { "Cf254", PoPs_genre_atom, 98, 156, 0, 2.54087322909e+02 }, - { "Cf255", PoPs_genre_atom, 98, 157, 0, 2.55091046e+02 }, - { "Cf256", PoPs_genre_atom, 98, 158, 0, 2.5609344e+02 }, - { "Es_natural", PoPs_genre_atom, 99, -1, 0, 2.52e+02 }, - { "Es120", PoPs_genre_atom, 99, 21, 0, 1.175e+02 }, - { "Es121", PoPs_genre_atom, 99, 22, 0, 1.16546e+02 }, - { "Es122", PoPs_genre_atom, 99, 23, 0, 1.18544e+02 }, - { "Es125", PoPs_genre_atom, 99, 26, 0, 1.175e+02 }, - { "Es240", PoPs_genre_atom, 99, 141, 0, 2.4006892e+02 }, - { "Es241", PoPs_genre_atom, 99, 142, 0, 2.41068538e+02 }, - { "Es242", PoPs_genre_atom, 99, 143, 0, 2.42069745e+02 }, - { "Es243", PoPs_genre_atom, 99, 144, 0, 2.43069548e+02 }, - { "Es244", PoPs_genre_atom, 99, 145, 0, 2.44070883e+02 }, - { "Es245", PoPs_genre_atom, 99, 146, 0, 2.45071324e+02 }, - { "Es246", PoPs_genre_atom, 99, 147, 0, 2.46072896e+02 }, - { "Es247", PoPs_genre_atom, 99, 148, 0, 2.47073656e+02 }, - { "Es248", PoPs_genre_atom, 99, 149, 0, 2.48075471e+02 }, - { "Es249", PoPs_genre_atom, 99, 150, 0, 2.49076411e+02 }, - { "Es250", PoPs_genre_atom, 99, 151, 0, 2.50078612e+02 }, - { "Es251", PoPs_genre_atom, 99, 152, 0, 2.51079992142e+02 }, - { "Es252", PoPs_genre_atom, 99, 153, 0, 2.52082978512e+02 }, - { "Es253", PoPs_genre_atom, 99, 154, 0, 2.53084824697e+02 }, - { "Es254", PoPs_genre_atom, 99, 155, 0, Es254_Mass }, - { "Es255", PoPs_genre_atom, 99, 156, 0, 2.55090273122e+02 }, - { "Es256", PoPs_genre_atom, 99, 157, 0, 2.56093598e+02 }, - { "Es257", PoPs_genre_atom, 99, 158, 0, 2.57095979e+02 }, - { "Es258", PoPs_genre_atom, 99, 159, 0, 2.5809952e+02 }, - { "Fm_natural", PoPs_genre_atom, 100, -1, 0, 2.57e+02 }, - { "Fm242", PoPs_genre_atom, 100, 142, 0, 2.4207343e+02 }, - { "Fm243", PoPs_genre_atom, 100, 143, 0, 2.43074353e+02 }, - { "Fm244", PoPs_genre_atom, 100, 144, 0, 2.44074084e+02 }, - { "Fm245", PoPs_genre_atom, 100, 145, 0, 2.45075385e+02 }, - { "Fm246", PoPs_genre_atom, 100, 146, 0, 2.46075299023e+02 }, - { "Fm247", PoPs_genre_atom, 100, 147, 0, 2.47076847e+02 }, - { "Fm248", PoPs_genre_atom, 100, 148, 0, 2.48077194714e+02 }, - { "Fm249", PoPs_genre_atom, 100, 149, 0, 2.49079034e+02 }, - { "Fm250", PoPs_genre_atom, 100, 150, 0, 2.50079521264e+02 }, - { "Fm251", PoPs_genre_atom, 100, 151, 0, 2.51081575017e+02 }, - { "Fm252", PoPs_genre_atom, 100, 152, 0, 2.52082466855e+02 }, - { "Fm253", PoPs_genre_atom, 100, 153, 0, 2.53085185236e+02 }, - { "Fm254", PoPs_genre_atom, 100, 154, 0, 2.5408685422e+02 }, - { "Fm255", PoPs_genre_atom, 100, 155, 0, 2.55089962202e+02 }, - { "Fm256", PoPs_genre_atom, 100, 156, 0, 2.56091773117e+02 }, - { "Fm257", PoPs_genre_atom, 100, 157, 0, 2.57095104724e+02 }, - { "Fm258", PoPs_genre_atom, 100, 158, 0, 2.58097076e+02 }, - { "Fm259", PoPs_genre_atom, 100, 159, 0, 2.59100595e+02 }, - { "Fm260", PoPs_genre_atom, 100, 160, 0, 2.60102678e+02 }, - { "Md_natural", PoPs_genre_atom, 101, -1, 0, 2.58e+02 }, - { "Md245", PoPs_genre_atom, 101, 144, 0, 2.45080829e+02 }, - { "Md246", PoPs_genre_atom, 101, 145, 0, 2.46081886e+02 }, - { "Md247", PoPs_genre_atom, 101, 146, 0, 2.47081635e+02 }, - { "Md248", PoPs_genre_atom, 101, 147, 0, 2.48082823e+02 }, - { "Md249", PoPs_genre_atom, 101, 148, 0, 2.49083013e+02 }, - { "Md250", PoPs_genre_atom, 101, 149, 0, 2.5008442e+02 }, - { "Md251", PoPs_genre_atom, 101, 150, 0, 2.51084839e+02 }, - { "Md252", PoPs_genre_atom, 101, 151, 0, 2.5208656e+02 }, - { "Md253", PoPs_genre_atom, 101, 152, 0, 2.5308728e+02 }, - { "Md254", PoPs_genre_atom, 101, 153, 0, 2.54089656e+02 }, - { "Md255", PoPs_genre_atom, 101, 154, 0, 2.55091082705e+02 }, - { "Md256", PoPs_genre_atom, 101, 155, 0, 2.56094059025e+02 }, - { "Md257", PoPs_genre_atom, 101, 156, 0, 2.57095541368e+02 }, - { "Md258", PoPs_genre_atom, 101, 157, 0, 2.58098431319e+02 }, - { "Md259", PoPs_genre_atom, 101, 158, 0, 2.59100509e+02 }, - { "Md260", PoPs_genre_atom, 101, 159, 0, 2.60103652e+02 }, - { "Md261", PoPs_genre_atom, 101, 160, 0, 2.61105721e+02 }, - { "Md262", PoPs_genre_atom, 101, 161, 0, 2.62108865e+02 }, - { "No_natural", PoPs_genre_atom, 102, -1, 0, 2.59e+02 }, - { "No248", PoPs_genre_atom, 102, 146, 0, 2.48086596e+02 }, - { "No249", PoPs_genre_atom, 102, 147, 0, 2.49087833e+02 }, - { "No250", PoPs_genre_atom, 102, 148, 0, 2.5008751e+02 }, - { "No251", PoPs_genre_atom, 102, 149, 0, 2.51089012e+02 }, - { "No252", PoPs_genre_atom, 102, 150, 0, 2.52088976521e+02 }, - { "No253", PoPs_genre_atom, 102, 151, 0, 2.53090678e+02 }, - { "No254", PoPs_genre_atom, 102, 152, 0, 2.54090955253e+02 }, - { "No255", PoPs_genre_atom, 102, 153, 0, 2.55093241131e+02 }, - { "No256", PoPs_genre_atom, 102, 154, 0, 2.56094282666e+02 }, - { "No257", PoPs_genre_atom, 102, 155, 0, 2.5709687719e+02 }, - { "No258", PoPs_genre_atom, 102, 156, 0, 2.58098207e+02 }, - { "No259", PoPs_genre_atom, 102, 157, 0, 2.59101031e+02 }, - { "No260", PoPs_genre_atom, 102, 158, 0, 2.60102643e+02 }, - { "No261", PoPs_genre_atom, 102, 159, 0, 2.61105749e+02 }, - { "No262", PoPs_genre_atom, 102, 160, 0, 2.62107301e+02 }, - { "No263", PoPs_genre_atom, 102, 161, 0, 2.63110552e+02 }, - { "No264", PoPs_genre_atom, 102, 162, 0, 2.64112345e+02 }, - { "Lr_natural", PoPs_genre_atom, 103, -1, 0, 2.6e+02 }, - { "Lr251", PoPs_genre_atom, 103, 148, 0, 2.5109436e+02 }, - { "Lr252", PoPs_genre_atom, 103, 149, 0, 2.52095371e+02 }, - { "Lr253", PoPs_genre_atom, 103, 150, 0, 2.5309521e+02 }, - { "Lr254", PoPs_genre_atom, 103, 151, 0, 2.54096454e+02 }, - { "Lr255", PoPs_genre_atom, 103, 152, 0, 2.55096681e+02 }, - { "Lr256", PoPs_genre_atom, 103, 153, 0, 2.56098629e+02 }, - { "Lr257", PoPs_genre_atom, 103, 154, 0, 2.57099555e+02 }, - { "Lr258", PoPs_genre_atom, 103, 155, 0, 2.58101814e+02 }, - { "Lr259", PoPs_genre_atom, 103, 156, 0, 2.59102901e+02 }, - { "Lr260", PoPs_genre_atom, 103, 157, 0, 2.60105504e+02 }, - { "Lr261", PoPs_genre_atom, 103, 158, 0, 2.61106883e+02 }, - { "Lr262", PoPs_genre_atom, 103, 159, 0, 2.62109634e+02 }, - { "Lr263", PoPs_genre_atom, 103, 160, 0, 2.63111293e+02 }, - { "Lr264", PoPs_genre_atom, 103, 161, 0, 2.64114038e+02 }, - { "Lr265", PoPs_genre_atom, 103, 162, 0, 2.65115839e+02 }, - { "Lr266", PoPs_genre_atom, 103, 163, 0, 2.66119305e+02 }, - { "Rf_natural", PoPs_genre_atom, 104, -1, 0, 2.61e+02 }, - { "Rf253", PoPs_genre_atom, 104, 149, 0, 2.53100689e+02 }, - { "Rf254", PoPs_genre_atom, 104, 150, 0, 2.54100184e+02 }, - { "Rf255", PoPs_genre_atom, 104, 151, 0, 2.5510134e+02 }, - { "Rf256", PoPs_genre_atom, 104, 152, 0, 2.56101166194e+02 }, - { "Rf257", PoPs_genre_atom, 104, 153, 0, 2.5710299e+02 }, - { "Rf258", PoPs_genre_atom, 104, 154, 0, 2.58103489e+02 }, - { "Rf259", PoPs_genre_atom, 104, 155, 0, 2.59105637e+02 }, - { "Rf260", PoPs_genre_atom, 104, 156, 0, 2.6010644e+02 }, - { "Rf261", PoPs_genre_atom, 104, 157, 0, 2.61108766556e+02 }, - { "Rf262", PoPs_genre_atom, 104, 158, 0, 2.62109925e+02 }, - { "Rf263", PoPs_genre_atom, 104, 159, 0, 2.63112547e+02 }, - { "Rf264", PoPs_genre_atom, 104, 160, 0, 2.64113985e+02 }, - { "Rf265", PoPs_genre_atom, 104, 161, 0, 2.65116704e+02 }, - { "Rf266", PoPs_genre_atom, 104, 162, 0, 2.66117956e+02 }, - { "Rf267", PoPs_genre_atom, 104, 163, 0, 2.67121529e+02 }, - { "Rf268", PoPs_genre_atom, 104, 164, 0, 2.68123644e+02 }, - { "Db_natural", PoPs_genre_atom, 105, -1, 0, 2.62e+02 }, - { "Db255", PoPs_genre_atom, 105, 150, 0, 2.55107398e+02 }, - { "Db256", PoPs_genre_atom, 105, 151, 0, 2.56108127e+02 }, - { "Db257", PoPs_genre_atom, 105, 152, 0, 2.57107722e+02 }, - { "Db258", PoPs_genre_atom, 105, 153, 0, 2.58109231e+02 }, - { "Db259", PoPs_genre_atom, 105, 154, 0, 2.5910961e+02 }, - { "Db260", PoPs_genre_atom, 105, 155, 0, 2.601113e+02 }, - { "Db261", PoPs_genre_atom, 105, 156, 0, 2.61112056e+02 }, - { "Db262", PoPs_genre_atom, 105, 157, 0, 2.62114084e+02 }, - { "Db263", PoPs_genre_atom, 105, 158, 0, 2.63114988e+02 }, - { "Db264", PoPs_genre_atom, 105, 159, 0, 2.64117404e+02 }, - { "Db265", PoPs_genre_atom, 105, 160, 0, 2.65118601e+02 }, - { "Db266", PoPs_genre_atom, 105, 161, 0, 2.66121029e+02 }, - { "Db267", PoPs_genre_atom, 105, 162, 0, 2.67122377e+02 }, - { "Db268", PoPs_genre_atom, 105, 163, 0, 2.68125445e+02 }, - { "Db269", PoPs_genre_atom, 105, 164, 0, 2.6912746e+02 }, - { "Db270", PoPs_genre_atom, 105, 165, 0, 2.70130712e+02 }, - { "Sg_natural", PoPs_genre_atom, 106, -1, 0, 2.63e+02 }, - { "Sg258", PoPs_genre_atom, 106, 152, 0, 2.58113168e+02 }, - { "Sg259", PoPs_genre_atom, 106, 153, 0, 2.591145e+02 }, - { "Sg260", PoPs_genre_atom, 106, 154, 0, 2.60114422071e+02 }, - { "Sg261", PoPs_genre_atom, 106, 155, 0, 2.61116117e+02 }, - { "Sg262", PoPs_genre_atom, 106, 156, 0, 2.62116398e+02 }, - { "Sg263", PoPs_genre_atom, 106, 157, 0, 2.63118322e+02 }, - { "Sg264", PoPs_genre_atom, 106, 158, 0, 2.64118931e+02 }, - { "Sg265", PoPs_genre_atom, 106, 159, 0, 2.65121114693e+02 }, - { "Sg266", PoPs_genre_atom, 106, 160, 0, 2.66122065e+02 }, - { "Sg267", PoPs_genre_atom, 106, 161, 0, 2.67124425e+02 }, - { "Sg268", PoPs_genre_atom, 106, 162, 0, 2.68125606e+02 }, - { "Sg269", PoPs_genre_atom, 106, 163, 0, 2.69128755e+02 }, - { "Sg270", PoPs_genre_atom, 106, 164, 0, 2.70130329e+02 }, - { "Sg271", PoPs_genre_atom, 106, 165, 0, 2.71133472e+02 }, - { "Sg272", PoPs_genre_atom, 106, 166, 0, 2.72135158e+02 }, - { "Sg273", PoPs_genre_atom, 106, 167, 0, 2.7313822e+02 }, - { "Bh260", PoPs_genre_atom, 107, 153, 0, 2.6012197e+02 }, - { "Bh261", PoPs_genre_atom, 107, 154, 0, 2.61121664e+02 }, - { "Bh262", PoPs_genre_atom, 107, 155, 0, 2.62122892e+02 }, - { "Bh263", PoPs_genre_atom, 107, 156, 0, 2.63123035e+02 }, - { "Bh264", PoPs_genre_atom, 107, 157, 0, 2.64124604e+02 }, - { "Bh265", PoPs_genre_atom, 107, 158, 0, 2.65125147e+02 }, - { "Bh266", PoPs_genre_atom, 107, 159, 0, 2.66126942e+02 }, - { "Bh267", PoPs_genre_atom, 107, 160, 0, 2.6712765e+02 }, - { "Bh268", PoPs_genre_atom, 107, 161, 0, 2.68129755e+02 }, - { "Bh269", PoPs_genre_atom, 107, 162, 0, 2.69130694e+02 }, - { "Bh270", PoPs_genre_atom, 107, 163, 0, 2.70133616e+02 }, - { "Bh271", PoPs_genre_atom, 107, 164, 0, 2.71135179e+02 }, - { "Bh272", PoPs_genre_atom, 107, 165, 0, 2.72138032e+02 }, - { "Bh273", PoPs_genre_atom, 107, 166, 0, 2.73139618e+02 }, - { "Bh274", PoPs_genre_atom, 107, 167, 0, 2.7414244e+02 }, - { "Bh275", PoPs_genre_atom, 107, 168, 0, 2.7514425e+02 }, - { "Hs263", PoPs_genre_atom, 108, 155, 0, 2.63128558e+02 }, - { "Hs264", PoPs_genre_atom, 108, 156, 0, 2.64128394885e+02 }, - { "Hs265", PoPs_genre_atom, 108, 157, 0, 2.65130085e+02 }, - { "Hs266", PoPs_genre_atom, 108, 158, 0, 2.66130097e+02 }, - { "Hs267", PoPs_genre_atom, 108, 159, 0, 2.67131789e+02 }, - { "Hs268", PoPs_genre_atom, 108, 160, 0, 2.68132162e+02 }, - { "Hs269", PoPs_genre_atom, 108, 161, 0, 2.69134056e+02 }, - { "Hs270", PoPs_genre_atom, 108, 162, 0, 2.7013465e+02 }, - { "Hs271", PoPs_genre_atom, 108, 163, 0, 2.71137657e+02 }, - { "Hs272", PoPs_genre_atom, 108, 164, 0, 2.72139052e+02 }, - { "Hs273", PoPs_genre_atom, 108, 165, 0, 2.73141986e+02 }, - { "Hs274", PoPs_genre_atom, 108, 166, 0, 2.74143131e+02 }, - { "Hs275", PoPs_genre_atom, 108, 167, 0, 2.75145952e+02 }, - { "Hs276", PoPs_genre_atom, 108, 168, 0, 2.76147208e+02 }, - { "Hs277", PoPs_genre_atom, 108, 169, 0, 2.77149841e+02 }, - { "Mt265", PoPs_genre_atom, 109, 156, 0, 2.65136151e+02 }, - { "Mt266", PoPs_genre_atom, 109, 157, 0, 2.66137299e+02 }, - { "Mt267", PoPs_genre_atom, 109, 158, 0, 2.67137307e+02 }, - { "Mt268", PoPs_genre_atom, 109, 159, 0, 2.68138728e+02 }, - { "Mt269", PoPs_genre_atom, 109, 160, 0, 2.69139055e+02 }, - { "Mt270", PoPs_genre_atom, 109, 161, 0, 2.70140657e+02 }, - { "Mt271", PoPs_genre_atom, 109, 162, 0, 2.71141139e+02 }, - { "Mt272", PoPs_genre_atom, 109, 163, 0, 2.72143738e+02 }, - { "Mt273", PoPs_genre_atom, 109, 164, 0, 2.73144913e+02 }, - { "Mt274", PoPs_genre_atom, 109, 165, 0, 2.74147492e+02 }, - { "Mt275", PoPs_genre_atom, 109, 166, 0, 2.75148647e+02 }, - { "Mt276", PoPs_genre_atom, 109, 167, 0, 2.76151156e+02 }, - { "Mt277", PoPs_genre_atom, 109, 168, 0, 2.7715242e+02 }, - { "Mt278", PoPs_genre_atom, 109, 169, 0, 2.78154812e+02 }, - { "Mt279", PoPs_genre_atom, 109, 170, 0, 2.79156193e+02 }, - { "Ds267", PoPs_genre_atom, 110, 157, 0, 2.67144341e+02 }, - { "Ds268", PoPs_genre_atom, 110, 158, 0, 2.68143795e+02 }, - { "Ds269", PoPs_genre_atom, 110, 159, 0, 2.69145124e+02 }, - { "Ds270", PoPs_genre_atom, 110, 160, 0, 2.7014472e+02 }, - { "Ds271", PoPs_genre_atom, 110, 161, 0, 2.71146062e+02 }, - { "Ds272", PoPs_genre_atom, 110, 162, 0, 2.72146317e+02 }, - { "Ds273", PoPs_genre_atom, 110, 163, 0, 2.73148863e+02 }, - { "Ds274", PoPs_genre_atom, 110, 164, 0, 2.74149492e+02 }, - { "Ds275", PoPs_genre_atom, 110, 165, 0, 2.75152176e+02 }, - { "Ds276", PoPs_genre_atom, 110, 166, 0, 2.76153034e+02 }, - { "Ds277", PoPs_genre_atom, 110, 167, 0, 2.77155647e+02 }, - { "Ds278", PoPs_genre_atom, 110, 168, 0, 2.78156469e+02 }, - { "Ds279", PoPs_genre_atom, 110, 169, 0, 2.79158861e+02 }, - { "Ds280", PoPs_genre_atom, 110, 170, 0, 2.80159795e+02 }, - { "Ds281", PoPs_genre_atom, 110, 171, 0, 2.81162061e+02 }, - { "Rg272", PoPs_genre_atom, 111, 161, 0, 2.72153615e+02 }, - { "Rg273", PoPs_genre_atom, 111, 162, 0, 2.73153682e+02 }, - { "Rg274", PoPs_genre_atom, 111, 163, 0, 2.74155713e+02 }, - { "Rg275", PoPs_genre_atom, 111, 164, 0, 2.75156142e+02 }, - { "Rg276", PoPs_genre_atom, 111, 165, 0, 2.76158493e+02 }, - { "Rg277", PoPs_genre_atom, 111, 166, 0, 2.77159519e+02 }, - { "Rg278", PoPs_genre_atom, 111, 167, 0, 2.78161604e+02 }, - { "Rg279", PoPs_genre_atom, 111, 168, 0, 2.79162468e+02 }, - { "Rg280", PoPs_genre_atom, 111, 169, 0, 2.80164473e+02 }, - { "Rg281", PoPs_genre_atom, 111, 170, 0, 2.81165372e+02 }, - { "Rg282", PoPs_genre_atom, 111, 171, 0, 2.82167486e+02 }, - { "Rg283", PoPs_genre_atom, 111, 172, 0, 2.83168415e+02 }, - { "Cn277", PoPs_genre_atom, 112, 165, 0, 2.77163943e+02 }, - { "Cn278", PoPs_genre_atom, 112, 166, 0, 2.78164312e+02 }, - { "Cn279", PoPs_genre_atom, 112, 167, 0, 2.79166546e+02 }, - { "Cn280", PoPs_genre_atom, 112, 168, 0, 2.80167039e+02 }, - { "Cn281", PoPs_genre_atom, 112, 169, 0, 2.81169286e+02 }, - { "Cn282", PoPs_genre_atom, 112, 170, 0, 2.82169765e+02 }, - { "Cn283", PoPs_genre_atom, 112, 171, 0, 2.83171792e+02 }, - { "Cn284", PoPs_genre_atom, 112, 172, 0, 2.84172384e+02 }, - { "Cn285", PoPs_genre_atom, 112, 173, 0, 2.85174105e+02 }, - { "Uut283", PoPs_genre_atom, 113, 170, 0, 2.83176451e+02 }, - { "Uut284", PoPs_genre_atom, 113, 171, 0, 2.8417808e+02 }, - { "Uut285", PoPs_genre_atom, 113, 172, 0, 2.85178732e+02 }, - { "Uut286", PoPs_genre_atom, 113, 173, 0, 2.86180481e+02 }, - { "Uut287", PoPs_genre_atom, 113, 174, 0, 2.87181045e+02 }, - { "Fl285", PoPs_genre_atom, 114, 171, 0, 2.85183698e+02 }, - { "Fl286", PoPs_genre_atom, 114, 172, 0, 2.86183855e+02 }, - { "Fl287", PoPs_genre_atom, 114, 173, 0, 2.87185599e+02 }, - { "Fl288", PoPs_genre_atom, 114, 174, 0, 2.88185689e+02 }, - { "Fl289", PoPs_genre_atom, 114, 175, 0, 2.89187279e+02 }, - { "Uup287", PoPs_genre_atom, 115, 172, 0, 2.87191186e+02 }, - { "Uup288", PoPs_genre_atom, 115, 173, 0, 2.88192492e+02 }, - { "Uup289", PoPs_genre_atom, 115, 174, 0, 2.89192715e+02 }, - { "Uup290", PoPs_genre_atom, 115, 175, 0, 2.90194141e+02 }, - { "Uup291", PoPs_genre_atom, 115, 176, 0, 2.91194384e+02 }, - { "Lv289", PoPs_genre_atom, 116, 173, 0, 2.89198862e+02 }, - { "Lv290", PoPs_genre_atom, 116, 174, 0, 2.9019859e+02 }, - { "Lv291", PoPs_genre_atom, 116, 175, 0, 2.91200011e+02 }, - { "Lv292", PoPs_genre_atom, 116, 176, 0, 2.92199786e+02 }, - { "Uus291", PoPs_genre_atom, 117, 174, 0, 2.91206564e+02 }, - { "Uus292", PoPs_genre_atom, 117, 175, 0, 2.92207549e+02 }, - { "Uuo293", PoPs_genre_atom, 118, 175, 0, 2.9321467e+02 } }; - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/include/PoPs_mass.h b/source/processes/hadronic/models/lend/include/PoPs_mass.h deleted file mode 100644 index 909524bc15..0000000000 --- a/source/processes/hadronic/models/lend/include/PoPs_mass.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef PoPs_mass_h_included -#define PoPs_mass_h_included - -#include - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -double PoPs_particleMass_AMU( statusMessageReporting *smr, char const *name ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of PoPs_mass_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/PoPs_private.h b/source/processes/hadronic/models/lend/include/PoPs_private.h deleted file mode 100644 index a6e9d444cd..0000000000 --- a/source/processes/hadronic/models/lend/include/PoPs_private.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef PoPs_private_h_included -#define PoPs_private_h_included - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -typedef struct unitsDB_s unitsDB; -typedef struct PoPs_s PoPs; - -struct unitsDB_s { - int numberOfUnits; - int allocated; - char const **unsorted; -}; - -struct PoPs_s { - int numberOfParticles; - int allocated; - PoP **pops; - PoP **sorted; -}; - -int PoPs_releasePrivate( statusMessageReporting *smr ); - -char const *unitsDB_addUnitIfNeeded( statusMessageReporting *smr, char const *unit ); -int unitsDB_index( statusMessageReporting *smr, char const *unit ); -char const *unitsDB_stringFromIndex( statusMessageReporting *smr, int index ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of PoPs_private_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/RISI.hpp b/source/processes/hadronic/models/lend/include/RISI.hpp new file mode 100644 index 0000000000..d34cef4d52 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/RISI.hpp @@ -0,0 +1,130 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef RISI_hpp_included +#define RISI_hpp_included 1 + +#include +#include + +#include + +namespace GIDI { + +namespace RISI { + +class Projectile; + +class Reaction { + + public: + double m_effectiveThreshold; /**< The effective threshold for the reaction. */ + std::vector m_products; /**< The list of final products for the reaction. */ + std::vector m_multiplicities; /**< The multiplicities for each product in *m_products*. */ + std::vector m_intermediates; /**< The list of intermediates products for the reaction. */ + std::string m_process; /**< The process for the reaction. */ + std::string m_reactionLabel; /**< The label of the reaction. */ + std::string m_convarianceFlag; /**< A flag indicating if covariance data are present for the reaction. */ + + public: + Reaction( double a_effectiveThreshold, std::vector const &a_products, std::vector const &a_multiplicities, + std::vector const &a_intermediates, std::string const &a_process, std::string const &reactionLabel, + std::string const &convarianceFlag ); + + void products( double a_energyMax, std::set &a_products ) const ; +}; + +class Protare { + + private: + int m_addMode; /**< Indicates which method **add** calls. */ + std::string m_projectile; /**< The PoPs id for the projectile. */ + std::string m_target; /**< The PoPs id for the target. */ + std::string m_evaluation; /**< The evaluation for the protare. */ + double m_energyConversionFactor; /**< Factor to convert from file energy units to user energy units. */ + + std::map m_aliases; /**< The list of meta-stable aliases in the protare. */ + std::vector m_reactions; /**< The list of **Reaction** instances for the protare. */ + + public: + Protare( std::string const &a_projectile, std::string const &a_target, std::string const &a_evaluation, + std::string const &a_protareEnergyUnit, std::string const &a_requestedEnergyUnit ); + ~Protare(); + + std::string const &projectile( ) { return( m_projectile ); } + std::string const &target( ) { return( m_target ); } + std::string const &evaluation( ) { return( m_evaluation ); } + + void Oops( std::vector const &a_elements ); + void addAlias( std::vector const &a_elements ); + void setAddingAliases( ) { m_addMode = 1; } /**< Tells **add** method to call the **addAlias** method. */ + void addReaction( std::vector const &a_elements ); + void setAddingReactions( ) { m_addMode = 2; } /**< Tells **add** method to call the **addReaction** method. */ + void add( std::vector const &a_elements ); + + void products( Projectile const *a_projectile, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const ; +}; + +class Target { + + private: + std::string m_id; + std::vector m_protares; + + public: + Target( std::string const &a_id ) : + m_id( a_id ) { + } + ~Target( ); + + void add( Protare *a_protare ); + void products( Projectile const *a_projectile, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const ; + void print( std::string const &a_indent = "" ) const ; +}; + +class Projectile { + + private: + std::string m_id; + std::map m_targets; + + public: + Projectile( std::string const &a_id ) : + m_id( a_id ) { + } + ~Projectile( ); + + void add( Protare *a_protare ); + void products( std::string const &a_target, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const ; + void print( std::string const &a_indent = "" ) const ; +}; + +class Projectiles { + + private: + std::map m_projectiles; + + public: + Projectiles( ) {} + ~Projectiles( ); + + void add( Protare *a_protare ); + void clear( ); + std::vector products( std::string const &a_projectile, std::vector const &a_seedTargets, int a_maxLevel, + double a_energyMax ) const ; + void print( std::string const &a_indent = "" ) const ; +}; + +void readRIS( std::string const &a_fileName, std::string const &a_energyUnit, Projectiles &a_projectiles ); + +} // End of namespace RISI. + +} // End of namespace GIDI. + +#endif // End of RISI_hpp_included diff --git a/source/processes/hadronic/models/lend/include/g4gidi_version.hh b/source/processes/hadronic/models/lend/include/g4gidi_version.hh new file mode 100644 index 0000000000..3f01c0cb7f --- /dev/null +++ b/source/processes/hadronic/models/lend/include/g4gidi_version.hh @@ -0,0 +1,5 @@ +#define G4GIDI_MAJOR 1 +#define G4GIDI_MINOR 1 +#define G4GIDI_PATCHLEVEL 13 +#define G4GIDI_VERSION "1.1.13" +#define G4GIDI_GIT "62db2f9b95bcd850c8821e70db50c4c94874cc4d" diff --git a/source/processes/hadronic/models/lend/include/nf_Legendre.h b/source/processes/hadronic/models/lend/include/nf_Legendre.h index b6d457d7bd..7aff5dff13 100644 --- a/source/processes/hadronic/models/lend/include/nf_Legendre.h +++ b/source/processes/hadronic/models/lend/include/nf_Legendre.h @@ -1,5 +1,9 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ @@ -11,16 +15,16 @@ #if defined __cplusplus extern "C" { - namespace GIDI { #endif #define nf_Legendre_minMaxOrder 4 -#define nf_Legendre_maxMaxOrder 64 +#define nf_Legendre_maxMaxOrder 128 #define nf_Legendre_sizeIncrement 8 typedef struct nf_Legendre_s nf_Legendre; struct nf_Legendre_s { + nfu_status status; int maxOrder; int allocated; /* Will never be less than nf_Legendre_minMaxOrder. */ double *Cls; @@ -31,21 +35,22 @@ typedef nfu_status (*nf_Legendre_GaussianQuadrature_callback)( double x, double /* * Methods in nf_Legendre.c */ -nf_Legendre *nf_Legendre_new( int initialSize, int maxOrder, double *Cls, nfu_status *status ); -nfu_status nf_Legendre_setup( nf_Legendre *nfL, int initialSize, int maxOrder ); -nfu_status nf_Legendre_release( nf_Legendre *nfL ); +nf_Legendre *nf_Legendre_new( statusMessageReporting *smr, int initialSize, int maxOrder, double *Cls ); +nfu_status nf_Legendre_initialize( statusMessageReporting *smr, nf_Legendre *nfL, int initialSize, int maxOrder ); +nfu_status nf_Legendre_release( statusMessageReporting *smr, nf_Legendre *nfL ); nf_Legendre *nf_Legendre_free( nf_Legendre *nfL ); -nf_Legendre *nf_Legendre_clone( nf_Legendre *nfL, nfu_status *status ); -nfu_status nf_Legendre_reallocateCls( nf_Legendre *Legendre, int size, int forceSmallerResize ); -int nf_Legendre_maxOrder( nf_Legendre *Legendre ); -int nf_Legendre_allocated( nf_Legendre *Legendre ); -double nf_Legendre_getCl( nf_Legendre *Legendre, int l, nfu_status *status ); -nfu_status nf_Legendre_setCl( nf_Legendre *Legendre, int l, double Cl ); -nfu_status nf_Legendre_normalize( nf_Legendre *Legendre ); -double nf_Legendre_evauluateAtMu( nf_Legendre *nfL, double mu, nfu_status *status ); +nf_Legendre *nf_Legendre_clone( statusMessageReporting *smr, nf_Legendre *nfL ); +nfu_status nf_Legendre_reallocateCls( statusMessageReporting *smr, nf_Legendre *Legendre, int size, int forceSmallerResize ); +nfu_status nf_Legendre_maxOrder( statusMessageReporting *smr, nf_Legendre *Legendre, int *maxOrder ); +nfu_status nf_Legendre_allocated( statusMessageReporting *smr, nf_Legendre *Legendre, int *allocated ); +nfu_status nf_Legendre_getCl( statusMessageReporting *smr, nf_Legendre *Legendre, int l, double *Cl ); +nfu_status nf_Legendre_setCl( statusMessageReporting *smr, nf_Legendre *Legendre, int l, double Cl ); +nfu_status nf_Legendre_normalize( statusMessageReporting *smr, nf_Legendre *Legendre ); +nfu_status nf_Legendre_evauluateAtMu( statusMessageReporting *smr, nf_Legendre *nfL, double mu, double *P ); double nf_Legendre_PofL_atMu( int l, double mu ); -ptwXYPoints *nf_Legendre_to_ptwXY( nf_Legendre *nfL, double accuracy, int biSectionMax, int checkForRoots, nfu_status *status ); -nf_Legendre *nf_Legendre_from_ptwXY( ptwXYPoints *ptwXY, int maxOrder, nfu_status *status ); +ptwXYPoints *nf_Legendre_to_ptwXY( statusMessageReporting *smr, nf_Legendre *nfL, double accuracy, int biSectionMax, + int checkForRoots ); +nf_Legendre *nf_Legendre_from_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY, int maxOrder ); /* * Methods in nf_Legendre_GaussianQuadrature.c @@ -54,7 +59,6 @@ nfu_status nf_Legendre_GaussianQuadrature( int degree, double x1, double x2, nf_ #if defined __cplusplus } - } #endif #endif /* End of nf_Legendre_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/nf_buffer.h b/source/processes/hadronic/models/lend/include/nf_buffer.h new file mode 100644 index 0000000000..443ac019c2 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/nf_buffer.h @@ -0,0 +1,128 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef nf_buffer_h_included +#define nf_buffer_h_included + + +#if defined __cplusplus + +#include + + +template +class nf_Buffer { + private: + T *m_data; + size_t m_length; + + public: + + using iterator = T*; + using const_iterator = T const *; + + inline + constexpr + nf_Buffer() noexcept : m_data(nullptr), m_length(0) {} + + inline + nf_Buffer(nf_Buffer const &c) : + m_data(new T[c.m_length]), + m_length(c.m_length) + { + for(size_t i = 0;i < m_length;++ i){ + m_data[i] = c.m_data[i]; + } + } + + inline + ~nf_Buffer() noexcept { + deallocate(); + } + + inline + constexpr + size_t size() const noexcept { return m_length; } + + inline + void clear(T value){ + for(size_t i = 0;i < m_length;++ i){ + m_data[i] = value; + } + } + + inline + void allocate(size_t length){ + deallocate(); + m_length = length; + m_data = new T[length]; + } + + inline + void deallocate() noexcept { + delete[] m_data; + m_length = 0; + } + + inline + void resize(size_t length){ + allocate(length); + } + + inline + std::vector vector() const { + return std::vector(cbegin(), cend()); + } + + inline + T* data() noexcept {return m_data;} + + inline + constexpr + T const * data() const noexcept {return m_data;} + + template + inline + T& operator[](I idx) noexcept {return m_data[idx];} + + template + inline + constexpr + T const & operator[](I idx) const noexcept {return m_data[idx];} + + + inline + iterator begin() noexcept { return m_data; } + + inline + constexpr + const_iterator begin() const noexcept { return m_data; } + + inline + iterator end() noexcept { return m_data + m_length; } + + inline + constexpr + const_iterator end() const noexcept { return m_data + m_length; } + + inline + constexpr + const_iterator cbegin() const noexcept { return m_data; } + + inline + constexpr + const_iterator cend() const noexcept { return m_data + m_length; } +}; + + + + +#endif + +#endif /* End of nf_buffer_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/nf_integration.h b/source/processes/hadronic/models/lend/include/nf_integration.h index 4b0a283f0c..3dede3867e 100644 --- a/source/processes/hadronic/models/lend/include/nf_integration.h +++ b/source/processes/hadronic/models/lend/include/nf_integration.h @@ -1,5 +1,9 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ @@ -11,7 +15,6 @@ #if defined __cplusplus extern "C" { - namespace GIDI { #endif #define nf_GnG_adaptiveQuadrature_MaxMaxDepth 20 @@ -24,7 +27,6 @@ nfu_status nf_GnG_adaptiveQuadrature( nf_GnG_adaptiveQuadrature_callback quadrat #if defined __cplusplus } - } #endif #endif /* End of nf_integration_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/nf_specialFunctions.h b/source/processes/hadronic/models/lend/include/nf_specialFunctions.h deleted file mode 100644 index 4868a156da..0000000000 --- a/source/processes/hadronic/models/lend/include/nf_specialFunctions.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef specialFunctions_h_included -#define specialFunctions_h_included - -#define _USE_MATH_DEFINES -#include -#include - -#include "nf_utilities.h" - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -double nf_polevl( double x, double coef[], int N ); -double nf_p1evl( double x, double coef[], int N ); -double nf_exponentialIntegral( int n, double x, nfu_status *status ); -double nf_gammaFunction( double x, nfu_status *status ); -double nf_logGammaFunction( double x, nfu_status *status ); -double nf_incompleteGammaFunction( double a, double x, nfu_status *status ); -double nf_incompleteGammaFunctionComplementary( double a, double x, nfu_status *status ); - -double nf_amc_log_factorial( int ); -double nf_amc_factorial( int ); -double nf_amc_wigner_3j( int, int, int, int, int, int ); -double nf_amc_wigner_6j( int, int, int, int, int, int ); -double nf_amc_wigner_9j( int, int, int, int, int, int, int, int, int ); -double nf_amc_racah( int, int, int, int, int, int ); -double nf_amc_clebsh_gordan( int, int, int, int, int ); -double nf_amc_z_coefficient( int, int, int, int, int, int ); -double nf_amc_zbar_coefficient( int, int, int, int, int, int ); -double nf_amc_reduced_matrix_element( int, int, int, int, int, int, int ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of ptwXY_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/nf_utilities.h b/source/processes/hadronic/models/lend/include/nf_utilities.h index 2bfd0050ea..18337f0dbf 100644 --- a/source/processes/hadronic/models/lend/include/nf_utilities.h +++ b/source/processes/hadronic/models/lend/include/nf_utilities.h @@ -1,17 +1,31 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #ifndef nf_utilities_h_included #define nf_utilities_h_included +#define _USE_MATH_DEFINES #include #include #include #include +#include -#define NUMERICALFUNCTIONS_SVN_VERSION 110+ +#include + +extern int nfu_SMR_libraryID; + +#ifdef __APPLE__ +#ifndef NFU_USEHEAP +#define NFU_USEHEAP 1 +#endif +#endif #define nf_floatToShortestString_trimZeros ( 1 << 0 ) #define nf_floatToShortestString_keepPeriod ( 1 << 1 ) @@ -19,40 +33,69 @@ #if defined __cplusplus extern "C" { - namespace GIDI { #endif -typedef enum nfu_status_e { nfu_Okay, nfu_mallocError, nfu_insufficientMemory, - nfu_badIndex, nfu_XNotAscending, nfu_badIndexForX, nfu_XOutsideDomain, - nfu_invalidInterpolation, nfu_badSelf, nfu_divByZero, nfu_unsupportedInterpolationConversion, - nfu_unsupportedInterpolation, nfu_empty, nfu_tooFewPoints, nfu_domainsNotMutual, - nfu_badInput, nfu_badNorm, nfu_badIntegrationInput, nfu_otherInterpolation, - nfu_failedToConverge, nfu_oddNumberOfValues } nfu_status; +typedef enum nfu_status_e { + nfu_Okay, + nfu_Error, + nfu_badSelf, + nfu_mallocError, + nfu_insufficientMemory, + nfu_badIndex, + nfu_XNotAscending, + nfu_badIndexForX, + nfu_XOutsideDomain, + nfu_invalidInterpolation, + nfu_divByZero, + nfu_unsupportedInterpolationConversion, + nfu_unsupportedInterpolation, + nfu_empty, + nfu_tooFewPoints, + nfu_domainsNotMutual, + nfu_badInput, + nfu_badNorm, + nfu_badIntegrationInput, + nfu_otherInterpolation, + nfu_flatInterpolation, + nfu_failedToConverge, + nfu_oddNumberOfValues, + nfu_badLogValue +} nfu_status; /* * Functions in nf_utilities.c */ +int nfu_setup( void ); double nfu_getNAN( void ); int nfu_isNAN( double d ); double nfu_getInfinity( double sign ); const char *nfu_statusMessage( nfu_status status ); void nfu_setMemoryDebugMode( int mode ); +void nfu_printMsg( char const *fmt, ... ); +void nfu_printErrorMsg( char const *fmt, ... ); + +/* +* These function are to be deleted when conversion to statusMessageReporting is completed. +*/ void *nfu_malloc( size_t size ); void *nfu_calloc( size_t size, size_t n ); void *nfu_realloc( size_t size, void *old ); void *nfu_free( void *p ); -void nfu_printMsg( char *fmt, ... ); -void nfu_printErrorMsg( char *fmt, ... ); - +/* +* Functions in nf_stringToInt32s.c +*/ +int32_t *nfu_stringToListOfInt32s( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, char **endCharacter ); +int nfu_stringToInt32( statusMessageReporting *smr, char const *str, char **endCharacter, int32_t *value ); /* * Functions in nf_stringToDoubles.c */ -nfu_status nfu_stringToListOfDoubles( char const *str, int64_t *numberConverted, double **doublePtr, char **endCharacter ); +double *nfu_stringToListOfDoubles( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter, int useSystem_strtod ); +double nf_strtod( char const *ptr, char **endCharacter ); char *nf_floatToShortestString( double value, int significantDigits, int favorEFormBy, int flags ); #if defined __cplusplus } - } #endif #endif /* End of nf_utilities_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/ptwX.h b/source/processes/hadronic/models/lend/include/ptwX.h index 3ed73a1859..e1f85ecc75 100644 --- a/source/processes/hadronic/models/lend/include/ptwX.h +++ b/source/processes/hadronic/models/lend/include/ptwX.h @@ -1,5 +1,9 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ @@ -13,7 +17,6 @@ #if defined __cplusplus extern "C" { - namespace GIDI { #endif #define ptwX_minimumSize 10 @@ -32,56 +35,57 @@ typedef /* * Routines in ptwX_core.c */ -ptwXPoints *ptwX_new( int64_t size, nfu_status *status ); -nfu_status ptwX_setup( ptwXPoints *ptwX, int64_t size ); -ptwXPoints *ptwX_create( int64_t size, int64_t length, double const *xs, nfu_status *status ); -ptwXPoints *ptwX_createLine( int64_t size, int64_t length, double slope, double offset, nfu_status *status ); -nfu_status ptwX_copy( ptwXPoints *dest, ptwXPoints *src ); -ptwXPoints *ptwX_clone( ptwXPoints *ptwX, nfu_status *status ); -ptwXPoints *ptwX_slice( ptwXPoints *ptwX, int64_t index1, int64_t index2, nfu_status *status ); -nfu_status ptwX_reallocatePoints( ptwXPoints *ptwX, int64_t size, int forceSmallerResize ); -nfu_status ptwX_clear( ptwXPoints *ptwX ); -nfu_status ptwX_release( ptwXPoints *ptwX ); +ptwXPoints *ptwX_new( statusMessageReporting *smr, int64_t size ); +nfu_status ptwX_initialize( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size ); +ptwXPoints *ptwX_create( statusMessageReporting *smr, int64_t size, int64_t length, double const *xs ); +ptwXPoints *ptwX_createLine( statusMessageReporting *smr, int64_t size, int64_t length, double slope, double offset ); +nfu_status ptwX_copy( statusMessageReporting *smr, ptwXPoints *dest, ptwXPoints *src ); +ptwXPoints *ptwX_clone( statusMessageReporting *smr, ptwXPoints *ptwX ); +ptwXPoints *ptwX_slice( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index1, int64_t index2 ); +nfu_status ptwX_reallocatePoints( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size, int forceSmallerResize ); +nfu_status ptwX_clear( statusMessageReporting *smr, ptwXPoints *ptwX ); +nfu_status ptwX_release( statusMessageReporting *smr, ptwXPoints *ptwX ); ptwXPoints *ptwX_free( ptwXPoints *ptwX ); -int64_t ptwX_length( ptwXPoints *ptwX ); -nfu_status ptwX_setData( ptwXPoints *ptwX, int64_t length, double const *xs ); -nfu_status ptwX_deletePoints( ptwXPoints *ptwX, int64_t i1, int64_t i2 ); -double *ptwX_getPointAtIndex( ptwXPoints *ptwX, int64_t index ); +int64_t ptwX_length( statusMessageReporting *smr, ptwXPoints *ptwX ); +nfu_status ptwX_setData( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t length, double const *xs ); +nfu_status ptwX_deletePoints( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2 ); +double *ptwX_getPointAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index ); double ptwX_getPointAtIndex_Unsafely( ptwXPoints *ptwX, int64_t index ); -nfu_status ptwX_setPointAtIndex( ptwXPoints *ptwX, int64_t index, double x ); -nfu_status ptwX_insertPointsAtIndex( ptwXPoints *ptwX, int64_t index, int64_t n1, double const *xs ); -int ptwX_ascendingOrder( ptwXPoints *ptwX ); -ptwXPoints *ptwX_fromString( char const *str, char **endCharacter, nfu_status *status ); -nfu_status ptwX_countOccurrences( ptwXPoints *ptwX, double value, int *count ); -nfu_status ptwX_reverse( ptwXPoints *ptwX ); -nfu_status ptwX_sort( ptwXPoints *ptwX, enum ptwX_sort_order order ); -nfu_status ptwX_closesDifference( ptwXPoints *ptwX, double value, int64_t *index, double *difference ); -nfu_status ptwX_closesDifferenceInRange( ptwXPoints *ptwX, int64_t i1, int64_t i2, double value, int64_t *index, double *difference ); -ptwXPoints *ptwX_unique( ptwXPoints *ptwX, int order, nfu_status *status ); +nfu_status ptwX_setPointAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, double x ); +nfu_status ptwX_insertPointsAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, int64_t n1, double const *xs ); +nfu_status ptwX_ascendingOrder( statusMessageReporting *smr, ptwXPoints *ptwX, int *order ); +ptwXPoints *ptwX_fromString( statusMessageReporting *smr, char const *str, char sep, char **endCharacter ); +int ptwX_countOccurrences( statusMessageReporting *smr, ptwXPoints *ptwX, double value ); +nfu_status ptwX_reverse( statusMessageReporting *smr, ptwXPoints *ptwX ); +nfu_status ptwX_sort( statusMessageReporting *smr, ptwXPoints *ptwX, enum ptwX_sort_order order ); +nfu_status ptwX_closesDifference( statusMessageReporting *smr, ptwXPoints *ptwX, double value, int64_t *index, double *difference ); +nfu_status ptwX_closesDifferenceInRange( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2, + double value, int64_t *index, double *difference ); +ptwXPoints *ptwX_unique( statusMessageReporting *smr, ptwXPoints *ptwX, int order ); -nfu_status ptwX_abs( ptwXPoints *ptwX ); -nfu_status ptwX_neg( ptwXPoints *ptwX ); -nfu_status ptwX_add_double( ptwXPoints *ptwX, double value ); -nfu_status ptwX_mul_double( ptwXPoints *ptwX, double value ); -nfu_status ptwX_slopeOffset( ptwXPoints *ptwX, double slope, double offset ); -nfu_status ptwX_add_ptwX( ptwXPoints *ptwX1, ptwXPoints *ptwX2 ); -nfu_status ptwX_sub_ptwX( ptwXPoints *ptwX1, ptwXPoints *ptwX2 ); +nfu_status ptwX_abs( statusMessageReporting *smr, ptwXPoints *ptwX ); +nfu_status ptwX_neg( statusMessageReporting *smr, ptwXPoints *ptwX ); +nfu_status ptwX_add_double( statusMessageReporting *smr, ptwXPoints *ptwX, double value ); +nfu_status ptwX_mul_double( statusMessageReporting *smr, ptwXPoints *ptwX, double value ); +nfu_status ptwX_slopeOffset( statusMessageReporting *smr, ptwXPoints *ptwX, double slope, double offset ); +nfu_status ptwX_add_ptwX( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2 ); +nfu_status ptwX_sub_ptwX( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2 ); -nfu_status ptwX_xMinMax( ptwXPoints *ptwX, double *xMin, double *xMax ); +nfu_status ptwX_range( statusMessageReporting *smr, ptwXPoints *ptwX, double *rangeMin, double *rangeMax ); -nfu_status ptwX_compare( ptwXPoints *ptwX1, ptwXPoints *ptwX2, int *comparison ); -int ptwX_close( ptwXPoints *ptwX1, ptwXPoints *ptwX2, int epsilonFactor, double epsilon, nfu_status *status ); +nfu_status ptwX_compare( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int *comparison ); +nfu_status ptwX_close( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int epsilonFactor, double epsilon, + int *index ); /* * Routines in ptwX_misc.c */ -void ptwX_simpleWrite( ptwXPoints const *ptwX, FILE *f, char const *format ); -void ptwX_simplePrint( ptwXPoints const *ptwX, char const *format ); +nfu_status ptwX_simpleWrite( statusMessageReporting *smr, ptwXPoints const *ptwX, FILE *f, char const *format ); +nfu_status ptwX_simplePrint( statusMessageReporting *smr, ptwXPoints const *ptwX, char const *format ); #if defined __cplusplus } - } #endif #endif /* End of ptwX_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/ptwXY.h b/source/processes/hadronic/models/lend/include/ptwXY.h index 5aa8436f43..985e5410fa 100644 --- a/source/processes/hadronic/models/lend/include/ptwXY.h +++ b/source/processes/hadronic/models/lend/include/ptwXY.h @@ -1,5 +1,9 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ @@ -14,7 +18,6 @@ #if defined __cplusplus extern "C" { - namespace GIDI { #endif #define ptwXY_minimumSize 10 /* This must be > 0 otherwise some logic will fail. */ @@ -31,9 +34,8 @@ typedef enum ptwXY_group_normType_e { ptwXY_group_normType_none, ptwXY_group_nor #define ptwXY_union_fill 1 /* If filling, union is filled with y value of first ptw. */ #define ptwXY_union_trim 2 /* If trimming, union in only over common domain of ptw1 and ptw2. */ #define ptwXY_union_mergeClosePoints 4 /* If true, union calls ptwXY_mergeClosePoints with eps = 4 * DBL_EPSILON. */ -typedef enum ptwXY_sigma_e { ptwXY_sigma_none, ptwXY_sigma_plusMinus, ptwXY_sigma_Minus, ptwXY_sigma_plus } ptwXY_sigma; -typedef enum ptwXY_interpolation_e { ptwXY_interpolationLinLin, ptwXY_interpolationLinLog, ptwXY_interpolationLogLin, ptwXY_interpolationLogLog, - ptwXY_interpolationFlat, ptwXY_interpolationOther } ptwXY_interpolation; +typedef enum ptwXY_interpolation_e { ptwXY_interpolationLinLin, ptwXY_interpolationLogLin, ptwXY_interpolationLinLog, + ptwXY_interpolationLogLog, ptwXY_interpolationFlat, ptwXY_interpolationOther } ptwXY_interpolation; /* * The function ptwXY_getPointsAroundX determines where an x fits into a ptwXY instance. It returns/sets the following. @@ -55,22 +57,15 @@ typedef enum ptwXY_interpolation_e { ptwXY_interpolationLinLin, ptwXY_interpolat * greaterThanXPoint is set to point's information for closes point with point's x > x */ typedef enum ptwXY_lessEqualGreaterX_e { ptwXY_lessEqualGreaterX_empty, ptwXY_lessEqualGreaterX_lessThan, ptwXY_lessEqualGreaterX_equal, - ptwXY_lessEqualGreaterX_between, ptwXY_lessEqualGreaterX_greater } ptwXY_lessEqualGreaterX; + ptwXY_lessEqualGreaterX_between, ptwXY_lessEqualGreaterX_greater, ptwXY_lessEqualGreaterX_Error } ptwXY_lessEqualGreaterX; typedef struct ptwXYPoint_s { double x, y; } ptwXYPoint; -typedef nfu_status (*ptwXY_createFromFunction_callback)( double x, double *y, void *argList ); -typedef nfu_status (*ptwXY_applyFunction_callback)( ptwXYPoint *point, void *argList ); -typedef nfu_status (*ptwXY_getValue_callback)( void *argList, double x, double *y, double x1, double y1, double x2, double y2 ); - -typedef struct { - char const *interpolationString; - ptwXY_getValue_callback getValueFunc; - void *argList; -} ptwXY_interpolationOtherInfo; +typedef nfu_status (*ptwXY_createFromFunction_callback)( statusMessageReporting *smr, double x, double *y, void *argList ); +typedef nfu_status (*ptwXY_applyFunction_callback)( statusMessageReporting *smr, ptwXYPoint *point, void *argList ); typedef struct ptwXYOverflowPoint_s { @@ -83,9 +78,8 @@ typedef typedef struct ptwXYPoints_s { nfu_status status; - ptwXY_sigma typeX, typeY; ptwXY_interpolation interpolation; - ptwXY_interpolationOtherInfo interpolationOtherInfo; + char const *interpolationString; int userFlag; double biSectionMax; double accuracy; @@ -103,27 +97,37 @@ typedef /* * Routines in ptwXY_core.c */ -ptwXYPoints *ptwXY_new( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, double biSectionMax, - double accuracy, int64_t primarySize, int64_t secondarySize, nfu_status *status, int userFlag ); -nfu_status ptwXY_setup( ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag ); -ptwXYPoints *ptwXY_create( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, - nfu_status *status, int userFlag ); -ptwXYPoints *ptwXY_createFrom_Xs_Ys( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, - double const *Ys, nfu_status *status, int userFlag ); +ptwXYPoints *ptwXY_new( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag ); +ptwXYPoints *ptwXY_new2( statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize ); +nfu_status ptwXY_initialize( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, + char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, + int userFlag ); +ptwXYPoints *ptwXY_create( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, + int userFlag ); +ptwXYPoints *ptwXY_create2( statusMessageReporting *smr, ptwXY_interpolation interpolation, + int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, int userFlag ); +ptwXYPoints *ptwXY_createFrom_Xs_Ys( statusMessageReporting *smr, ptwXY_interpolation interpolation, + char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, + int64_t length, double const *Xs, double const *Ys, int userFlag ); +ptwXYPoints *ptwXY_createFrom_Xs_Ys2( statusMessageReporting *smr, ptwXY_interpolation interpolation, + int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, double const *Ys, int userFlag ); -nfu_status ptwXY_copy( ptwXYPoints *dest, ptwXYPoints *src ); -ptwXYPoints *ptwXY_clone( ptwXYPoints *ptwXY, nfu_status *status ); -ptwXYPoints *ptwXY_cloneToInterpolation( ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo, nfu_status *status ); -ptwXYPoints *ptwXY_slice( ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize, nfu_status *status ); -ptwXYPoints *ptwXY_xSlice( ptwXYPoints *ptwXY, double xMin, double xMax, int64_t secondarySize, int fill, nfu_status *status ); -ptwXYPoints *ptwXY_xMinSlice( ptwXYPoints *ptwXY, double xMin, int64_t secondarySize, int fill, nfu_status *status ); -ptwXYPoints *ptwXY_xMaxSlice( ptwXYPoints *ptwXY, double xMax, int64_t secondarySize, int fill, nfu_status *status ); +nfu_status ptwXY_copy( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src ); +nfu_status ptwXY_copyPointsOnly( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src ); +ptwXYPoints *ptwXY_clone( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +ptwXYPoints *ptwXY_clone2( statusMessageReporting *smr, ptwXYPoints const *ptwXY ); +ptwXYPoints *ptwXY_cloneToInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo ); +ptwXYPoints *ptwXY_slice( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize ); +ptwXYPoints *ptwXY_domainSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + int64_t secondarySize, int fill ); +ptwXYPoints *ptwXY_domainMinSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, int64_t secondarySize, int fill ); +ptwXYPoints *ptwXY_domainMaxSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMax, int64_t secondarySize, int fill ); ptwXY_interpolation ptwXY_getInterpolation( ptwXYPoints *ptwXY ); char const *ptwXY_getInterpolationString( ptwXYPoints *ptwXY ); +nfu_status ptwXY_setInterpolationString( ptwXYPoints *ptwXY, char const *interpolationString ); nfu_status ptwXY_getStatus( ptwXYPoints *ptwXY ); int ptwXY_getUserFlag( ptwXYPoints *ptwXY ); void ptwXY_setUserFlag( ptwXYPoints *ptwXY, int userFlag ); @@ -132,155 +136,185 @@ double ptwXY_setAccuracy( ptwXYPoints *ptwXY, double accuracy ); double ptwXY_getBiSectionMax( ptwXYPoints *ptwXY ); double ptwXY_setBiSectionMax( ptwXYPoints *ptwXY, double biSectionMax ); -nfu_status ptwXY_reallocatePoints( ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize ); -nfu_status ptwXY_reallocateOverflowPoints( ptwXYPoints *ptwXY, int64_t size ); -nfu_status ptwXY_coalescePoints( ptwXYPoints *ptwXY, int64_t size, ptwXYPoint *newPoint, int forceSmallerResize ); -nfu_status ptwXY_simpleCoalescePoints( ptwXYPoints *ptwXY ); +nfu_status ptwXY_reallocatePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize ); +nfu_status ptwXY_reallocateOverflowPoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size ); +nfu_status ptwXY_coalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, ptwXYPoint *newPoint, + int forceSmallerResize ); +nfu_status ptwXY_simpleCoalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY ); -nfu_status ptwXY_clear( ptwXYPoints *ptwXY ); -nfu_status ptwXY_release( ptwXYPoints *ptwXY ); +nfu_status ptwXY_clear( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +nfu_status ptwXY_release( statusMessageReporting *smr, ptwXYPoints *ptwXY ); ptwXYPoints *ptwXY_free( ptwXYPoints *ptwXY ); -int64_t ptwXY_length( ptwXYPoints *ptwXY ); -int64_t ptwXY_getNonOverflowLength( ptwXYPoints const *ptwXY ); +int64_t ptwXY_length( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +int64_t ptwXY_getNonOverflowLength( statusMessageReporting *smr, ptwXYPoints const *ptwXY ); -nfu_status ptwXY_setXYData( ptwXYPoints *ptwXY, int64_t length, double const *xy ); -nfu_status ptwXY_setXYDataFromXsAndYs( ptwXYPoints *ptwXY, int64_t length, double const *x, double const *y ); -nfu_status ptwXY_deletePoints( ptwXYPoints *ptwXY, int64_t i1, int64_t i2 ); -ptwXYPoint *ptwXY_getPointAtIndex( ptwXYPoints *ptwXY, int64_t index ); -ptwXYPoint *ptwXY_getPointAtIndex_Unsafely( ptwXYPoints *ptwXY, int64_t index ); -nfu_status ptwXY_getXYPairAtIndex( ptwXYPoints *ptwXY, int64_t index, double *x, double *y ); -ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX( ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint ); -ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual( ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, - ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, ptwXYPoint **closePoint ); -nfu_status ptwXY_getValueAtX( ptwXYPoints *ptwXY, double x, double *y ); -nfu_status ptwXY_setValueAtX( ptwXYPoints *ptwXY, double x, double y ); -nfu_status ptwXY_setValueAtX_overrideIfClose( ptwXYPoints *ptwXY, double x, double y, double eps, int override ); -nfu_status ptwXY_mergeFromXsAndYs( ptwXYPoints *ptwXY, int length, double *xs, double *ys ); -nfu_status ptwXY_mergeFromXYs( ptwXYPoints *ptwXY, int length, double *xys ); -nfu_status ptwXY_appendXY( ptwXYPoints *ptwXY, double x, double y ); -nfu_status ptwXY_setXYPairAtIndex( ptwXYPoints *ptwXY, int64_t index, double x, double y ); +nfu_status ptwXY_startIndex( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, double a_x, int64_t *a_startIndex, int64_t *a_length ); +nfu_status ptwXY_setXYData( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *xy ); +nfu_status ptwXY_setXYDataFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *x, double const *y ); +nfu_status ptwXY_deletePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t i1, int64_t i2 ); +nfu_status ptwXY_getLowerIndexBoundingX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, int64_t *index ); +ptwXYPoint *ptwXY_getPointAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index ); +ptwXYPoint *ptwXY_getPointAtIndex_Unsafely( ptwXYPoints const *ptwXY, int64_t index ); +nfu_status ptwXY_getXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double *x, double *y ); +ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, + ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint ); +ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, + ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, + ptwXYPoint **closePoint ); +nfu_status ptwXY_getValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double *y ); +nfu_status ptwXY_setValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y ); +nfu_status ptwXY_setValueAtX_overrideIfClose( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y, double eps, int override ); +nfu_status ptwXY_mergeFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xs, double *ys ); +nfu_status ptwXY_mergeFromXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xys ); +nfu_status ptwXY_appendXY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y ); +nfu_status ptwXY_setXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double x, double y ); -nfu_status ptwXY_getSlopeAtX( ptwXYPoints *ptwXY, double x, const char side, double *slope ); +nfu_status ptwXY_getSlopeAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, char side, double *slope ); -double ptwXY_getXMinAndFrom( ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom ); -double ptwXY_getXMin( ptwXYPoints *ptwXY ); -double ptwXY_getXMaxAndFrom( ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom ); -double ptwXY_getXMax( ptwXYPoints *ptwXY ); -double ptwXY_getYMin( ptwXYPoints *ptwXY ); -double ptwXY_getYMax( ptwXYPoints *ptwXY ); +nfu_status ptwXY_domainMinAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value ); +nfu_status ptwXY_domainMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_domainMaxAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value ); +nfu_status ptwXY_domainMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_range( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMin, double *rangeMax ); +nfu_status ptwXY_rangeMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_rangeMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +char const *ptwXY_interpolationToString( ptwXY_interpolation interpolation ); +ptwXY_interpolation ptwXY_stringToInterpolation( char const *interpolationString ); /* * Methods in ptwXY_methods.c */ -nfu_status ptwXY_clip( ptwXYPoints *ptwXY1, double yMin, double yMax ); -nfu_status ptwXY_thicken( ptwXYPoints *ptwXY1, int sectionSubdivideMax, double dxMax, double fxMax ); -ptwXYPoints *ptwXY_thin( ptwXYPoints *ptwXY1, double accuracy, nfu_status *status ); -nfu_status ptwXY_trim( ptwXYPoints *ptwXY ); +nfu_status ptwXY_clip( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double rangeMin, double rangeMax ); +nfu_status ptwXY_thicken( statusMessageReporting *smr, ptwXYPoints *ptwXY1, int sectionSubdivideMax, + double dDomainMax, double fDomainMax ); +ptwXYPoints *ptwXY_thin( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double accuracy ); +ptwXYPoints *ptwXY_thinDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double epsilon ); +nfu_status ptwXY_trim( statusMessageReporting *smr, ptwXYPoints *ptwXY ); -ptwXYPoints *ptwXY_union( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int unionOptions ); +ptwXYPoints *ptwXY_union( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int unionOptions ); -nfu_status ptwXY_scaleOffsetXAndY( ptwXYPoints *ptwXY, double xScale, double xOffset, double yScale, double yOffset ); +nfu_status ptwXY_scaleOffsetXAndY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double xScale, double xOffset, + double yScale, double yOffset ); +nfu_status ptwXY_scaleAndOffsetDomainWith_ptwXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXYPoints *offset, ptwXYPoints *slope, int skipLastPoint ); /* * Functions in ptwXY_unitaryOperators.c */ -nfu_status ptwXY_abs( ptwXYPoints *ptwXY ); -nfu_status ptwXY_neg( ptwXYPoints *ptwXY ); +nfu_status ptwXY_abs( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +nfu_status ptwXY_neg( statusMessageReporting *smr, ptwXYPoints *ptwXY ); /* * Functions in ptwXY_binaryOperators.c */ -nfu_status ptwXY_slopeOffset( ptwXYPoints *ptwXY, double slope, double offset ); -nfu_status ptwXY_add_double( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_sub_doubleFrom( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_sub_fromDouble( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_mul_double( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_div_doubleFrom( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_div_fromDouble( ptwXYPoints *ptwXY, double value ); -nfu_status ptwXY_mod( ptwXYPoints *ptwXY, double m, int pythonMod ); +nfu_status ptwXY_slopeOffset( statusMessageReporting *smr, ptwXYPoints *ptwXY, double slope, double offset ); +nfu_status ptwXY_add_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_sub_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_sub_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_mul_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_div_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_div_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ); +nfu_status ptwXY_mod( statusMessageReporting *smr, ptwXYPoints *ptwXY, double m, int pythonMod ); -ptwXYPoints *ptwXY_binary_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double v1, double v2, double v1v2, nfu_status *status ); -ptwXYPoints *ptwXY_add_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ); -ptwXYPoints *ptwXY_sub_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ); -ptwXYPoints *ptwXY_mul_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ); -ptwXYPoints *ptwXY_mul2_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ); -ptwXYPoints *ptwXY_div_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide ); +ptwXYPoints *ptwXY_binary_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double v1, double v2, double v1v2 ); +ptwXYPoints *ptwXY_add_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); +ptwXYPoints *ptwXY_sub_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); +ptwXYPoints *ptwXY_mul_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); +ptwXYPoints *ptwXY_mul2_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); +ptwXYPoints *ptwXY_div_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide ); /* * Functions in ptwXY_functions.c */ -nfu_status ptwXY_pow( ptwXYPoints *ptwXY, double p ); -nfu_status ptwXY_exp( ptwXYPoints *ptwXY, double a ); -ptwXYPoints *ptwXY_convolution( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int mode ); +nfu_status ptwXY_pow( statusMessageReporting *smr, ptwXYPoints *ptwXY, double p ); +nfu_status ptwXY_exp( statusMessageReporting *smr, ptwXYPoints *ptwXY, double a ); +ptwXYPoints *ptwXY_convolution( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int mode ); +ptwXYPoints *ptwXY_inverse( statusMessageReporting *smr, ptwXYPoints *ptwXY ); /* * Functions in ptwXY_interpolation.c */ -nfu_status ptwXY_interpolatePoint( ptwXY_interpolation interpolation, double x, double *y, double x1, double y1, double x2, double y2 ); -ptwXYPoints *ptwXY_flatInterpolationToLinear( ptwXYPoints *ptwXY, double lowerEps, double upperEps, nfu_status *status ); -ptwXYPoints *ptwXY_toOtherInterpolation( ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, double accuracy, nfu_status *status ); -ptwXYPoints *ptwXY_unitbaseInterpolate( double w, double w1, ptwXYPoints *ptwXY1, double w2, ptwXYPoints *ptwXY2, nfu_status *status ); -ptwXYPoints *ptwXY_toUnitbase( ptwXYPoints *ptwXY, nfu_status *status ); -ptwXYPoints *ptwXY_fromUnitbase( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ); +nfu_status ptwXY_interpolatePoint( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x, double *y, + double x1, double y1, double x2, double y2 ); +ptwXYPoints *ptwXY_flatInterpolationToLinear( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps ); +ptwXYPoints *ptwXY_toOtherInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, + double accuracy ); +ptwXYPoints *ptwXY_unitbaseInterpolate( statusMessageReporting *smr, double w, double w1, ptwXYPoints *ptwXY1, + double w2, ptwXYPoints *ptwXY2, int scaleRange ); +ptwXYPoints *ptwXY_toUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, int scaleRange ); +ptwXYPoints *ptwXY_fromUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + int scaleRange ); /* * Functions in ptwXY_convenient.c */ -ptwXPoints *ptwXY_getXArray( ptwXYPoints *ptwXY, nfu_status *status ); -nfu_status ptwXY_dullEdges( ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly ); -nfu_status ptwXY_mergeClosePoints( ptwXYPoints *ptwXY, double epsilon ); -ptwXYPoints *ptwXY_intersectionWith_ptwX( ptwXYPoints *ptwXY, ptwXPoints *ptwX, nfu_status *status ); -nfu_status ptwXY_areDomainsMutual( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); -nfu_status ptwXY_tweakDomainsToMutualify( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int epsilonFactor, double epsilon ); -nfu_status ptwXY_mutualifyDomains( ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, int positiveXOnly1, - ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2 ); -nfu_status ptwXY_copyToC_XY( ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t allocatedSize, int64_t *numberOfPoints, double *xy ); -nfu_status ptwXY_valueTo_ptwXAndY( ptwXYPoints *ptwXY, double **xs, double **ys ); -ptwXYPoints *ptwXY_valueTo_ptwXY( double x1, double x2, double y, nfu_status *status ); -ptwXYPoints *ptwXY_createGaussianCenteredSigma1( double accuracy, nfu_status *status ); -ptwXYPoints *ptwXY_createGaussian( double accuracy, double xCenter, double sigma, double amplitude, double xMin, double xMax, - double dullEps, nfu_status *status ); +ptwXPoints *ptwXY_getXArray( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +ptwXPoints *ptwXY_ysMappedToXs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *Xs, int64_t *offset ); +nfu_status ptwXY_mapToXsAndAdd( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, int64_t a_offset, int64_t a_length, double const *a_Xs, + double *a_results, double a_scaleFractor ); +nfu_status ptwXY_dullEdges( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly ); +nfu_status ptwXY_mergeClosePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, double epsilon ); +ptwXYPoints *ptwXY_intersectionWith_ptwX( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *ptwX ); +nfu_status ptwXY_areDomainsMutual( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ); +nfu_status ptwXY_tweakDomainsToMutualify( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + int epsilonFactor, double epsilon ); +nfu_status ptwXY_mutualifyDomains( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, + int positiveXOnly1, ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2 ); +nfu_status ptwXY_copyToC_XY( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, + int64_t allocatedSize, int64_t *numberOfPoints, double *xy ); +nfu_status ptwXY_valuesToC_XsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, double **xs, double **ys ); +ptwXYPoints *ptwXY_valueTo_ptwXY( statusMessageReporting *smr, double x1, double x2, double y ); +ptwXYPoints *ptwXY_createGaussianCenteredSigma1( statusMessageReporting *smr, double accuracy ); +ptwXYPoints *ptwXY_createGaussian( statusMessageReporting *smr, double accuracy, double xCenter, double sigma, + double amplitude, double domainMin, double domainMax, double dullEps ); /* * Functions in ptwXY_misc.c */ +double ptwXY_limitAccuracy( double accuracy ); void ptwXY_update_biSectionMax( ptwXYPoints *ptwXY1, double oldLength ); -ptwXYPoints *ptwXY_createFromFunction( int n, double *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, - int biSectionMax, nfu_status *status ); -ptwXYPoints *ptwXY_createFromFunction2( ptwXPoints *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, - int biSectionMax, nfu_status *status ); -nfu_status ptwXY_applyFunction( ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, void *argList, int checkForRoots ); -ptwXYPoints *ptwXY_fromString( char const *str, ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, char **endCharacter, nfu_status *status ); +ptwXYPoints *ptwXY_createFromFunction( statusMessageReporting *smr, int n, double *xs, + ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax ); +ptwXYPoints *ptwXY_createFromFunction2( statusMessageReporting *smr, ptwXPoints *xs, ptwXY_createFromFunction_callback func, + void *argList, double accuracy, int checkForRoots, int biSectionMax ); +nfu_status ptwXY_applyFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, + void *argList, int checkForRoots ); +ptwXYPoints *ptwXY_fromString( statusMessageReporting *smr, char const *str, char sep, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, char **endCharacter, int useSystem_strtod ); void ptwXY_showInteralStructure( ptwXYPoints *ptwXY, FILE *f, int printPointersAsNull ); -void ptwXY_simpleWrite( ptwXYPoints *ptwXY, FILE *f, char *format ); -void ptwXY_simplePrint( ptwXYPoints *ptwXY, char *format ); +void ptwXY_simpleWrite( ptwXYPoints *ptwXY, FILE *f, char const *format ); +void ptwXY_simplePrint( ptwXYPoints *ptwXY, char const *format ); /* * Functions in ptwXY_integration.c */ -nfu_status ptwXY_f_integrate( ptwXY_interpolation interpolation, double x1, double y1, double x2, double y2, double *value ); -double ptwXY_integrate( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ); -double ptwXY_integrateDomain( ptwXYPoints *ptwXY, nfu_status *status ); -nfu_status ptwXY_normalize( ptwXYPoints *ptwXY1 ); -double ptwXY_integrateDomainWithWeight_x( ptwXYPoints *ptwXY, nfu_status *status ); -double ptwXY_integrateWithWeight_x( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ); -double ptwXY_integrateDomainWithWeight_sqrt_x( ptwXYPoints *ptwXY, nfu_status *status ); -double ptwXY_integrateWithWeight_sqrt_x( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ); -ptwXPoints *ptwXY_groupOneFunction( ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm, nfu_status *status ); -ptwXPoints *ptwXY_groupTwoFunctions( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, - ptwXPoints *ptwX_norm, nfu_status *status ); -ptwXPoints *ptwXY_groupThreeFunctions( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, - ptwXY_group_normType normType, ptwXPoints *ptwX_norm, nfu_status *status ); -ptwXPoints *ptwXY_runningIntegral( ptwXYPoints *ptwXY, nfu_status *status ); -double ptwXY_integrateWithFunction( ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, void *argList, - double xMin, double xMax, int degree, int recursionLimit, double tolerance, nfu_status *status ); +nfu_status ptwXY_f_integrate( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x1, double y1, + double x2, double y2, double *value ); +nfu_status ptwXY_integrate( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value ); +nfu_status ptwXY_integrateDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_normalize( statusMessageReporting *smr, ptwXYPoints *ptwXY1 ); +nfu_status ptwXY_integrateDomainWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_integrateWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + double *value ); +nfu_status ptwXY_integrateDomainWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ); +nfu_status ptwXY_integrateWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + double *value ); +ptwXPoints *ptwXY_groupOneFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, + ptwXY_group_normType normType, ptwXPoints *ptwX_norm ); +ptwXPoints *ptwXY_groupTwoFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm ); +ptwXPoints *ptwXY_groupThreeFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm ); +ptwXPoints *ptwXY_runningIntegral( statusMessageReporting *smr, ptwXYPoints *ptwXY ); +nfu_status ptwXY_integrateWithFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, + void *argList, double domainMin, double domainMax, int degree, int recursionLimit, double tolerance, + double *value ); +ptwXPoints *ptwXY_equalProbableBins( statusMessageReporting *smr, ptwXYPoints *ptwXY, int numberOfBins ); #if defined __cplusplus } - } #endif #endif /* End of ptwXY_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/pugiconfig.hpp b/source/processes/hadronic/models/lend/include/pugiconfig.hpp new file mode 100644 index 0000000000..88b2f2aee0 --- /dev/null +++ b/source/processes/hadronic/models/lend/include/pugiconfig.hpp @@ -0,0 +1,77 @@ +/** + * pugixml parser - version 1.13 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ + +#ifndef HEADER_PUGICONFIG_HPP +#define HEADER_PUGICONFIG_HPP + +// Uncomment this to enable wchar_t mode +// #define PUGIXML_WCHAR_MODE + +// Uncomment this to enable compact mode +// #define PUGIXML_COMPACT + +// Uncomment this to disable XPath +// #define PUGIXML_NO_XPATH + +// Uncomment this to disable STL +// #define PUGIXML_NO_STL + +// Uncomment this to disable exceptions +// #define PUGIXML_NO_EXCEPTIONS + +// Set this to control attributes for public classes/functions, i.e.: +// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL +// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL +// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall +// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead + +// Tune these constants to adjust memory-related behavior +// #define PUGIXML_MEMORY_PAGE_SIZE 32768 +// #define PUGIXML_MEMORY_OUTPUT_STACK 10240 +// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096 + +// Tune this constant to adjust max nesting for XPath queries +// #define PUGIXML_XPATH_DEPTH_LIMIT 1024 + +// Uncomment this to switch to header-only version +// #define PUGIXML_HEADER_ONLY + +// Uncomment this to enable long long support +// #define PUGIXML_HAS_LONG_LONG + +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/source/processes/hadronic/models/lend/include/pugixml.hpp b/source/processes/hadronic/models/lend/include/pugixml.hpp new file mode 100644 index 0000000000..050df154cc --- /dev/null +++ b/source/processes/hadronic/models/lend/include/pugixml.hpp @@ -0,0 +1,1506 @@ +/** + * pugixml parser - version 1.13 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ + +// Define version macro; evaluates to major * 1000 + minor * 10 + patch so that it's safe to use in less-than comparisons +// Note: pugixml used major * 100 + minor * 10 + patch format up until 1.9 (which had version identifier 190); starting from pugixml 1.10, the minor version number is two digits +#ifndef PUGIXML_VERSION +# define PUGIXML_VERSION 1130 // 1.13 +#endif + +// Include user configuration file (this can define various configuration macros) +#include "pugiconfig.hpp" + +#ifndef HEADER_PUGIXML_HPP +#define HEADER_PUGIXML_HPP + +// Include stddef.h for size_t and ptrdiff_t +#include + +// Include exception header for XPath +#if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS) +# include +#endif + +// Include STL headers +#ifndef PUGIXML_NO_STL +# include +# include +# include +#endif + +// Macro for deprecated features +#ifndef PUGIXML_DEPRECATED +# if defined(__GNUC__) +# define PUGIXML_DEPRECATED __attribute__((deprecated)) +# elif defined(_MSC_VER) && _MSC_VER >= 1300 +# define PUGIXML_DEPRECATED __declspec(deprecated) +# else +# define PUGIXML_DEPRECATED +# endif +#endif + +// If no API is defined, assume default +#ifndef PUGIXML_API +# define PUGIXML_API +#endif + +// If no API for classes is defined, assume default +#ifndef PUGIXML_CLASS +# define PUGIXML_CLASS PUGIXML_API +#endif + +// If no API for functions is defined, assume default +#ifndef PUGIXML_FUNCTION +# define PUGIXML_FUNCTION PUGIXML_API +#endif + +// If the platform is known to have long long support, enable long long functions +#ifndef PUGIXML_HAS_LONG_LONG +# if __cplusplus >= 201103 +# define PUGIXML_HAS_LONG_LONG +# elif defined(_MSC_VER) && _MSC_VER >= 1400 +# define PUGIXML_HAS_LONG_LONG +# endif +#endif + +// If the platform is known to have move semantics support, compile move ctor/operator implementation +#ifndef PUGIXML_HAS_MOVE +# if __cplusplus >= 201103 +# define PUGIXML_HAS_MOVE +# elif defined(_MSC_VER) && _MSC_VER >= 1600 +# define PUGIXML_HAS_MOVE +# endif +#endif + +// If C++ is 2011 or higher, add 'noexcept' specifiers +#ifndef PUGIXML_NOEXCEPT +# if __cplusplus >= 201103 +# define PUGIXML_NOEXCEPT noexcept +# elif defined(_MSC_VER) && _MSC_VER >= 1900 +# define PUGIXML_NOEXCEPT noexcept +# else +# define PUGIXML_NOEXCEPT +# endif +#endif + +// Some functions can not be noexcept in compact mode +#ifdef PUGIXML_COMPACT +# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT +#else +# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT PUGIXML_NOEXCEPT +#endif + +// If C++ is 2011 or higher, add 'override' qualifiers +#ifndef PUGIXML_OVERRIDE +# if __cplusplus >= 201103 +# define PUGIXML_OVERRIDE override +# elif defined(_MSC_VER) && _MSC_VER >= 1700 +# define PUGIXML_OVERRIDE override +# else +# define PUGIXML_OVERRIDE +# endif +#endif + +// If C++ is 2011 or higher, use 'nullptr' +#ifndef PUGIXML_NULL +# if __cplusplus >= 201103 +# define PUGIXML_NULL nullptr +# elif defined(_MSC_VER) && _MSC_VER >= 1600 +# define PUGIXML_NULL nullptr +# else +# define PUGIXML_NULL 0 +# endif +#endif + +// Character interface macros +#ifdef PUGIXML_WCHAR_MODE +# define PUGIXML_TEXT(t) L ## t +# define PUGIXML_CHAR wchar_t +#else +# define PUGIXML_TEXT(t) t +# define PUGIXML_CHAR char +#endif + +namespace pugi +{ + // Character type used for all internal storage and operations; depends on PUGIXML_WCHAR_MODE + typedef PUGIXML_CHAR char_t; + +#ifndef PUGIXML_NO_STL + // String type used for operations that work with STL string; depends on PUGIXML_WCHAR_MODE + typedef std::basic_string, std::allocator > string_t; +#endif +} + +// The PugiXML namespace +namespace pugi +{ + // Tree node types + enum xml_node_type + { + node_null, // Empty (null) node handle + node_document, // A document tree's absolute root + node_element, // Element tag, i.e. '' + node_pcdata, // Plain character data, i.e. 'text' + node_cdata, // Character data, i.e. '' + node_comment, // Comment tag, i.e. '' + node_pi, // Processing instruction, i.e. '' + node_declaration, // Document declaration, i.e. '' + node_doctype // Document type declaration, i.e. '' + }; + + // Parsing options + + // Minimal parsing mode (equivalent to turning all other flags off). + // Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. + const unsigned int parse_minimal = 0x0000; + + // This flag determines if processing instructions (node_pi) are added to the DOM tree. This flag is off by default. + const unsigned int parse_pi = 0x0001; + + // This flag determines if comments (node_comment) are added to the DOM tree. This flag is off by default. + const unsigned int parse_comments = 0x0002; + + // This flag determines if CDATA sections (node_cdata) are added to the DOM tree. This flag is on by default. + const unsigned int parse_cdata = 0x0004; + + // This flag determines if plain character data (node_pcdata) that consist only of whitespace are added to the DOM tree. + // This flag is off by default; turning it on usually results in slower parsing and more memory consumption. + const unsigned int parse_ws_pcdata = 0x0008; + + // This flag determines if character and entity references are expanded during parsing. This flag is on by default. + const unsigned int parse_escapes = 0x0010; + + // This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. + const unsigned int parse_eol = 0x0020; + + // This flag determines if attribute values are normalized using CDATA normalization rules during parsing. This flag is on by default. + const unsigned int parse_wconv_attribute = 0x0040; + + // This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. This flag is off by default. + const unsigned int parse_wnorm_attribute = 0x0080; + + // This flag determines if document declaration (node_declaration) is added to the DOM tree. This flag is off by default. + const unsigned int parse_declaration = 0x0100; + + // This flag determines if document type declaration (node_doctype) is added to the DOM tree. This flag is off by default. + const unsigned int parse_doctype = 0x0200; + + // This flag determines if plain character data (node_pcdata) that is the only child of the parent node and that consists only + // of whitespace is added to the DOM tree. + // This flag is off by default; turning it on may result in slower parsing and more memory consumption. + const unsigned int parse_ws_pcdata_single = 0x0400; + + // This flag determines if leading and trailing whitespace is to be removed from plain character data. This flag is off by default. + const unsigned int parse_trim_pcdata = 0x0800; + + // This flag determines if plain character data that does not have a parent node is added to the DOM tree, and if an empty document + // is a valid document. This flag is off by default. + const unsigned int parse_fragment = 0x1000; + + // This flag determines if plain character data is be stored in the parent element's value. This significantly changes the structure of + // the document; this flag is only recommended for parsing documents with many PCDATA nodes in memory-constrained environments. + // This flag is off by default. + const unsigned int parse_embed_pcdata = 0x2000; + + // The default parsing mode. + // Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, + // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol; + + // The full parsing mode. + // Nodes of all types are added to the DOM tree, character/reference entities are expanded, + // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype; + + // These flags determine the encoding of input data for XML document + enum xml_encoding + { + encoding_auto, // Auto-detect input encoding using BOM or < / class xml_object_range + { + public: + typedef It const_iterator; + typedef It iterator; + + xml_object_range(It b, It e): _begin(b), _end(e) + { + } + + It begin() const { return _begin; } + It end() const { return _end; } + + bool empty() const { return _begin == _end; } + + private: + It _begin, _end; + }; + + // Writer interface for node printing (see xml_node::print) + class PUGIXML_CLASS xml_writer + { + public: + virtual ~xml_writer() {} + + // Write memory chunk into stream/file/whatever + virtual void write(const void* data, size_t size) = 0; + }; + + // xml_writer implementation for FILE* + class PUGIXML_CLASS xml_writer_file: public xml_writer + { + public: + // Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio + xml_writer_file(void* file); + + virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE; + + private: + void* file; + }; + + #ifndef PUGIXML_NO_STL + // xml_writer implementation for streams + class PUGIXML_CLASS xml_writer_stream: public xml_writer + { + public: + // Construct writer from an output stream object + xml_writer_stream(std::basic_ostream >& stream); + xml_writer_stream(std::basic_ostream >& stream); + + virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE; + + private: + std::basic_ostream >* narrow_stream; + std::basic_ostream >* wide_stream; + }; + #endif + + // A light-weight handle for manipulating attributes in DOM tree + class PUGIXML_CLASS xml_attribute + { + friend class xml_attribute_iterator; + friend class xml_node; + + private: + xml_attribute_struct* _attr; + + typedef void (*unspecified_bool_type)(xml_attribute***); + + public: + // Default constructor. Constructs an empty attribute. + xml_attribute(); + + // Constructs attribute from internal pointer + explicit xml_attribute(xml_attribute_struct* attr); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators (compares wrapped attribute pointers) + bool operator==(const xml_attribute& r) const; + bool operator!=(const xml_attribute& r) const; + bool operator<(const xml_attribute& r) const; + bool operator>(const xml_attribute& r) const; + bool operator<=(const xml_attribute& r) const; + bool operator>=(const xml_attribute& r) const; + + // Check if attribute is empty + bool empty() const; + + // Get attribute name/value, or "" if attribute is empty + const char_t* name() const; + const char_t* value() const; + + // Get attribute value, or the default value if attribute is empty + const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; + + // Get attribute value as a number, or the default value if conversion did not succeed or attribute is empty + int as_int(int def = 0) const; + unsigned int as_uint(unsigned int def = 0) const; + double as_double(double def = 0) const; + float as_float(float def = 0) const; + + #ifdef PUGIXML_HAS_LONG_LONG + long long as_llong(long long def = 0) const; + unsigned long long as_ullong(unsigned long long def = 0) const; + #endif + + // Get attribute value as bool (returns true if first character is in '1tTyY' set), or the default value if attribute is empty + bool as_bool(bool def = false) const; + + // Set attribute name/value (returns false if attribute is empty or there is not enough memory) + bool set_name(const char_t* rhs); + bool set_value(const char_t* rhs, size_t sz); + bool set_value(const char_t* rhs); + + // Set attribute value with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") + bool set_value(int rhs); + bool set_value(unsigned int rhs); + bool set_value(long rhs); + bool set_value(unsigned long rhs); + bool set_value(double rhs); + bool set_value(double rhs, int precision); + bool set_value(float rhs); + bool set_value(float rhs, int precision); + bool set_value(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + bool set_value(long long rhs); + bool set_value(unsigned long long rhs); + #endif + + // Set attribute value (equivalent to set_value without error checking) + xml_attribute& operator=(const char_t* rhs); + xml_attribute& operator=(int rhs); + xml_attribute& operator=(unsigned int rhs); + xml_attribute& operator=(long rhs); + xml_attribute& operator=(unsigned long rhs); + xml_attribute& operator=(double rhs); + xml_attribute& operator=(float rhs); + xml_attribute& operator=(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + xml_attribute& operator=(long long rhs); + xml_attribute& operator=(unsigned long long rhs); + #endif + + // Get next/previous attribute in the attribute list of the parent node + xml_attribute next_attribute() const; + xml_attribute previous_attribute() const; + + // Get hash value (unique for handles to the same object) + size_t hash_value() const; + + // Get internal pointer + xml_attribute_struct* internal_object() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_attribute& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_attribute& lhs, bool rhs); +#endif + + // A light-weight handle for manipulating nodes in DOM tree + class PUGIXML_CLASS xml_node + { + friend class xml_attribute_iterator; + friend class xml_node_iterator; + friend class xml_named_node_iterator; + + protected: + xml_node_struct* _root; + + typedef void (*unspecified_bool_type)(xml_node***); + + public: + // Default constructor. Constructs an empty node. + xml_node(); + + // Constructs node from internal pointer + explicit xml_node(xml_node_struct* p); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators (compares wrapped node pointers) + bool operator==(const xml_node& r) const; + bool operator!=(const xml_node& r) const; + bool operator<(const xml_node& r) const; + bool operator>(const xml_node& r) const; + bool operator<=(const xml_node& r) const; + bool operator>=(const xml_node& r) const; + + // Check if node is empty. + bool empty() const; + + // Get node type + xml_node_type type() const; + + // Get node name, or "" if node is empty or it has no name + const char_t* name() const; + + // Get node value, or "" if node is empty or it has no value + // Note: For text node.value() does not return "text"! Use child_value() or text() methods to access text inside nodes. + const char_t* value() const; + + // Get attribute list + xml_attribute first_attribute() const; + xml_attribute last_attribute() const; + + // Get children list + xml_node first_child() const; + xml_node last_child() const; + + // Get next/previous sibling in the children list of the parent node + xml_node next_sibling() const; + xml_node previous_sibling() const; + + // Get parent node + xml_node parent() const; + + // Get root of DOM tree this node belongs to + xml_node root() const; + + // Get text object for the current node + xml_text text() const; + + // Get child, attribute or next/previous sibling with the specified name + xml_node child(const char_t* name) const; + xml_attribute attribute(const char_t* name) const; + xml_node next_sibling(const char_t* name) const; + xml_node previous_sibling(const char_t* name) const; + + // Get attribute, starting the search from a hint (and updating hint so that searching for a sequence of attributes is fast) + xml_attribute attribute(const char_t* name, xml_attribute& hint) const; + + // Get child value of current node; that is, value of the first child node of type PCDATA/CDATA + const char_t* child_value() const; + + // Get child value of child with specified name. Equivalent to child(name).child_value(). + const char_t* child_value(const char_t* name) const; + + // Set node name/value (returns false if node is empty, there is not enough memory, or node can not have name/value) + bool set_name(const char_t* rhs); + bool set_value(const char_t* rhs, size_t sz); + bool set_value(const char_t* rhs); + + // Add attribute with specified name. Returns added attribute, or empty attribute on errors. + xml_attribute append_attribute(const char_t* name); + xml_attribute prepend_attribute(const char_t* name); + xml_attribute insert_attribute_after(const char_t* name, const xml_attribute& attr); + xml_attribute insert_attribute_before(const char_t* name, const xml_attribute& attr); + + // Add a copy of the specified attribute. Returns added attribute, or empty attribute on errors. + xml_attribute append_copy(const xml_attribute& proto); + xml_attribute prepend_copy(const xml_attribute& proto); + xml_attribute insert_copy_after(const xml_attribute& proto, const xml_attribute& attr); + xml_attribute insert_copy_before(const xml_attribute& proto, const xml_attribute& attr); + + // Add child node with specified type. Returns added node, or empty node on errors. + xml_node append_child(xml_node_type type = node_element); + xml_node prepend_child(xml_node_type type = node_element); + xml_node insert_child_after(xml_node_type type, const xml_node& node); + xml_node insert_child_before(xml_node_type type, const xml_node& node); + + // Add child element with specified name. Returns added node, or empty node on errors. + xml_node append_child(const char_t* name); + xml_node prepend_child(const char_t* name); + xml_node insert_child_after(const char_t* name, const xml_node& node); + xml_node insert_child_before(const char_t* name, const xml_node& node); + + // Add a copy of the specified node as a child. Returns added node, or empty node on errors. + xml_node append_copy(const xml_node& proto); + xml_node prepend_copy(const xml_node& proto); + xml_node insert_copy_after(const xml_node& proto, const xml_node& node); + xml_node insert_copy_before(const xml_node& proto, const xml_node& node); + + // Move the specified node to become a child of this node. Returns moved node, or empty node on errors. + xml_node append_move(const xml_node& moved); + xml_node prepend_move(const xml_node& moved); + xml_node insert_move_after(const xml_node& moved, const xml_node& node); + xml_node insert_move_before(const xml_node& moved, const xml_node& node); + + // Remove specified attribute + bool remove_attribute(const xml_attribute& a); + bool remove_attribute(const char_t* name); + + // Remove all attributes + bool remove_attributes(); + + // Remove specified child + bool remove_child(const xml_node& n); + bool remove_child(const char_t* name); + + // Remove all children + bool remove_children(); + + // Parses buffer as an XML document fragment and appends all nodes as children of the current node. + // Copies/converts the buffer, so it may be deleted or changed after the function returns. + // Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory. + xml_parse_result append_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Find attribute using predicate. Returns first attribute for which predicate returned true. + template xml_attribute find_attribute(Predicate pred) const + { + if (!_root) return xml_attribute(); + + for (xml_attribute attrib = first_attribute(); attrib; attrib = attrib.next_attribute()) + if (pred(attrib)) + return attrib; + + return xml_attribute(); + } + + // Find child node using predicate. Returns first child for which predicate returned true. + template xml_node find_child(Predicate pred) const + { + if (!_root) return xml_node(); + + for (xml_node node = first_child(); node; node = node.next_sibling()) + if (pred(node)) + return node; + + return xml_node(); + } + + // Find node from subtree using predicate. Returns first node from subtree (depth-first), for which predicate returned true. + template xml_node find_node(Predicate pred) const + { + if (!_root) return xml_node(); + + xml_node cur = first_child(); + + while (cur._root && cur._root != _root) + { + if (pred(cur)) return cur; + + if (cur.first_child()) cur = cur.first_child(); + else if (cur.next_sibling()) cur = cur.next_sibling(); + else + { + while (!cur.next_sibling() && cur._root != _root) cur = cur.parent(); + + if (cur._root != _root) cur = cur.next_sibling(); + } + } + + return xml_node(); + } + + // Find child node by attribute name/value + xml_node find_child_by_attribute(const char_t* name, const char_t* attr_name, const char_t* attr_value) const; + xml_node find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const; + + #ifndef PUGIXML_NO_STL + // Get the absolute node path from root as a text string. + string_t path(char_t delimiter = '/') const; + #endif + + // Search for a node by path consisting of node names and . or .. elements. + xml_node first_element_by_path(const char_t* path, char_t delimiter = '/') const; + + // Recursively traverse subtree with xml_tree_walker + bool traverse(xml_tree_walker& walker); + + #ifndef PUGIXML_NO_XPATH + // Select single node by evaluating XPath query. Returns first node from the resulting node set. + xpath_node select_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + xpath_node select_node(const xpath_query& query) const; + + // Select node set by evaluating XPath query + xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + xpath_node_set select_nodes(const xpath_query& query) const; + + // (deprecated: use select_node instead) Select single node by evaluating XPath query. + PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const; + + #endif + + // Print subtree using a writer object + void print(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; + + #ifndef PUGIXML_NO_STL + // Print subtree to stream + void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; + void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, unsigned int depth = 0) const; + #endif + + // Child nodes iterators + typedef xml_node_iterator iterator; + + iterator begin() const; + iterator end() const; + + // Attribute iterators + typedef xml_attribute_iterator attribute_iterator; + + attribute_iterator attributes_begin() const; + attribute_iterator attributes_end() const; + + // Range-based for support + xml_object_range children() const; + xml_object_range children(const char_t* name) const; + xml_object_range attributes() const; + + // Get node offset in parsed file/string (in char_t units) for debugging purposes + ptrdiff_t offset_debug() const; + + // Get hash value (unique for handles to the same object) + size_t hash_value() const; + + // Get internal pointer + xml_node_struct* internal_object() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_node& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_node& lhs, bool rhs); +#endif + + // A helper for working with text inside PCDATA nodes + class PUGIXML_CLASS xml_text + { + friend class xml_node; + + xml_node_struct* _root; + + typedef void (*unspecified_bool_type)(xml_text***); + + explicit xml_text(xml_node_struct* root); + + xml_node_struct* _data_new(); + xml_node_struct* _data() const; + + public: + // Default constructor. Constructs an empty object. + xml_text(); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Check if text object is empty + bool empty() const; + + // Get text, or "" if object is empty + const char_t* get() const; + + // Get text, or the default value if object is empty + const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; + + // Get text as a number, or the default value if conversion did not succeed or object is empty + int as_int(int def = 0) const; + unsigned int as_uint(unsigned int def = 0) const; + double as_double(double def = 0) const; + float as_float(float def = 0) const; + + #ifdef PUGIXML_HAS_LONG_LONG + long long as_llong(long long def = 0) const; + unsigned long long as_ullong(unsigned long long def = 0) const; + #endif + + // Get text as bool (returns true if first character is in '1tTyY' set), or the default value if object is empty + bool as_bool(bool def = false) const; + + // Set text (returns false if object is empty or there is not enough memory) + bool set(const char_t* rhs, size_t sz); + bool set(const char_t* rhs); + + // Set text with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") + bool set(int rhs); + bool set(unsigned int rhs); + bool set(long rhs); + bool set(unsigned long rhs); + bool set(double rhs); + bool set(double rhs, int precision); + bool set(float rhs); + bool set(float rhs, int precision); + bool set(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + bool set(long long rhs); + bool set(unsigned long long rhs); + #endif + + // Set text (equivalent to set without error checking) + xml_text& operator=(const char_t* rhs); + xml_text& operator=(int rhs); + xml_text& operator=(unsigned int rhs); + xml_text& operator=(long rhs); + xml_text& operator=(unsigned long rhs); + xml_text& operator=(double rhs); + xml_text& operator=(float rhs); + xml_text& operator=(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + xml_text& operator=(long long rhs); + xml_text& operator=(unsigned long long rhs); + #endif + + // Get the data node (node_pcdata or node_cdata) for this object + xml_node data() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_text& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_text& lhs, bool rhs); +#endif + + // Child node iterator (a bidirectional iterator over a collection of xml_node) + class PUGIXML_CLASS xml_node_iterator + { + friend class xml_node; + + private: + mutable xml_node _wrap; + xml_node _parent; + + xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent); + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_node value_type; + typedef xml_node* pointer; + typedef xml_node& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_node_iterator(); + + // Construct an iterator which points to the specified node + xml_node_iterator(const xml_node& node); + + // Iterator operators + bool operator==(const xml_node_iterator& rhs) const; + bool operator!=(const xml_node_iterator& rhs) const; + + xml_node& operator*() const; + xml_node* operator->() const; + + xml_node_iterator& operator++(); + xml_node_iterator operator++(int); + + xml_node_iterator& operator--(); + xml_node_iterator operator--(int); + }; + + // Attribute iterator (a bidirectional iterator over a collection of xml_attribute) + class PUGIXML_CLASS xml_attribute_iterator + { + friend class xml_node; + + private: + mutable xml_attribute _wrap; + xml_node _parent; + + xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent); + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_attribute value_type; + typedef xml_attribute* pointer; + typedef xml_attribute& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_attribute_iterator(); + + // Construct an iterator which points to the specified attribute + xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent); + + // Iterator operators + bool operator==(const xml_attribute_iterator& rhs) const; + bool operator!=(const xml_attribute_iterator& rhs) const; + + xml_attribute& operator*() const; + xml_attribute* operator->() const; + + xml_attribute_iterator& operator++(); + xml_attribute_iterator operator++(int); + + xml_attribute_iterator& operator--(); + xml_attribute_iterator operator--(int); + }; + + // Named node range helper + class PUGIXML_CLASS xml_named_node_iterator + { + friend class xml_node; + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_node value_type; + typedef xml_node* pointer; + typedef xml_node& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_named_node_iterator(); + + // Construct an iterator which points to the specified node + xml_named_node_iterator(const xml_node& node, const char_t* name); + + // Iterator operators + bool operator==(const xml_named_node_iterator& rhs) const; + bool operator!=(const xml_named_node_iterator& rhs) const; + + xml_node& operator*() const; + xml_node* operator->() const; + + xml_named_node_iterator& operator++(); + xml_named_node_iterator operator++(int); + + xml_named_node_iterator& operator--(); + xml_named_node_iterator operator--(int); + + private: + mutable xml_node _wrap; + xml_node _parent; + const char_t* _name; + + xml_named_node_iterator(xml_node_struct* ref, xml_node_struct* parent, const char_t* name); + }; + + // Abstract tree walker class (see xml_node::traverse) + class PUGIXML_CLASS xml_tree_walker + { + friend class xml_node; + + private: + int _depth; + + protected: + // Get current traversal depth + int depth() const; + + public: + xml_tree_walker(); + virtual ~xml_tree_walker(); + + // Callback that is called when traversal begins + virtual bool begin(xml_node& node); + + // Callback that is called for each node traversed + virtual bool for_each(xml_node& node) = 0; + + // Callback that is called when traversal ends + virtual bool end(xml_node& node); + }; + + // Parsing status, returned as part of xml_parse_result object + enum xml_parse_status + { + status_ok = 0, // No error + + status_file_not_found, // File was not found during load_file() + status_io_error, // Error reading from file/stream + status_out_of_memory, // Could not allocate memory + status_internal_error, // Internal error occurred + + status_unrecognized_tag, // Parser could not determine tag type + + status_bad_pi, // Parsing error occurred while parsing document declaration/processing instruction + status_bad_comment, // Parsing error occurred while parsing comment + status_bad_cdata, // Parsing error occurred while parsing CDATA section + status_bad_doctype, // Parsing error occurred while parsing document type declaration + status_bad_pcdata, // Parsing error occurred while parsing PCDATA section + status_bad_start_element, // Parsing error occurred while parsing start element tag + status_bad_attribute, // Parsing error occurred while parsing element attribute + status_bad_end_element, // Parsing error occurred while parsing end element tag + status_end_element_mismatch,// There was a mismatch of start-end tags (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag) + + status_append_invalid_root, // Unable to append nodes since root type is not node_element or node_document (exclusive to xml_node::append_buffer) + + status_no_document_element // Parsing resulted in a document without element nodes + }; + + // Parsing result + struct PUGIXML_CLASS xml_parse_result + { + // Parsing status (see xml_parse_status) + xml_parse_status status; + + // Last parsed offset (in char_t units from start of input data) + ptrdiff_t offset; + + // Source document encoding + xml_encoding encoding; + + // Default constructor, initializes object to failed state + xml_parse_result(); + + // Cast to bool operator + operator bool() const; + + // Get error description + const char* description() const; + }; + + // Document class (DOM tree root) + class PUGIXML_CLASS xml_document: public xml_node + { + private: + char_t* _buffer; + + char _memory[192]; + + // Non-copyable semantics + xml_document(const xml_document&); + xml_document& operator=(const xml_document&); + + void _create(); + void _destroy(); + void _move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + + public: + // Default constructor, makes empty document + xml_document(); + + // Destructor, invalidates all node/attribute handles to this document + ~xml_document(); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + xml_document& operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + #endif + + // Removes all nodes, leaving the empty document + void reset(); + + // Removes all nodes, then copies the entire contents of the specified document + void reset(const xml_document& proto); + + #ifndef PUGIXML_NO_STL + // Load document from stream. + xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default); + #endif + + // (deprecated: use load_string instead) Load document from zero-terminated string. No encoding conversions are applied. + PUGIXML_DEPRECATED xml_parse_result load(const char_t* contents, unsigned int options = parse_default); + + // Load document from zero-terminated string. No encoding conversions are applied. + xml_parse_result load_string(const char_t* contents, unsigned int options = parse_default); + + // Load document from file + xml_parse_result load_file(const char* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + xml_parse_result load_file(const wchar_t* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer. Copies/converts the buffer, so it may be deleted or changed after the function returns. + xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). + // You should ensure that buffer data will persist throughout the document's lifetime, and free the buffer memory manually once document is destroyed. + xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). + // You should allocate the buffer with pugixml allocation function; document will free the buffer when it is no longer needed (you can't use it anymore). + xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Save XML document to writer (semantics is slightly different from xml_node::print, see documentation for details). + void save(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + + #ifndef PUGIXML_NO_STL + // Save XML document to stream (semantics is slightly different from xml_node::print, see documentation for details). + void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default) const; + #endif + + // Save XML to file + bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + bool save_file(const wchar_t* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + + // Get document element + xml_node document_element() const; + }; + +#ifndef PUGIXML_NO_XPATH + // XPath query return type + enum xpath_value_type + { + xpath_type_none, // Unknown type (query failed to compile) + xpath_type_node_set, // Node set (xpath_node_set) + xpath_type_number, // Number + xpath_type_string, // String + xpath_type_boolean // Boolean + }; + + // XPath parsing result + struct PUGIXML_CLASS xpath_parse_result + { + // Error message (0 if no error) + const char* error; + + // Last parsed offset (in char_t units from string start) + ptrdiff_t offset; + + // Default constructor, initializes object to failed state + xpath_parse_result(); + + // Cast to bool operator + operator bool() const; + + // Get error description + const char* description() const; + }; + + // A single XPath variable + class PUGIXML_CLASS xpath_variable + { + friend class xpath_variable_set; + + protected: + xpath_value_type _type; + xpath_variable* _next; + + xpath_variable(xpath_value_type type); + + // Non-copyable semantics + xpath_variable(const xpath_variable&); + xpath_variable& operator=(const xpath_variable&); + + public: + // Get variable name + const char_t* name() const; + + // Get variable type + xpath_value_type type() const; + + // Get variable value; no type conversion is performed, default value (false, NaN, empty string, empty node set) is returned on type mismatch error + bool get_boolean() const; + double get_number() const; + const char_t* get_string() const; + const xpath_node_set& get_node_set() const; + + // Set variable value; no type conversion is performed, false is returned on type mismatch error + bool set(bool value); + bool set(double value); + bool set(const char_t* value); + bool set(const xpath_node_set& value); + }; + + // A set of XPath variables + class PUGIXML_CLASS xpath_variable_set + { + private: + xpath_variable* _data[64]; + + void _assign(const xpath_variable_set& rhs); + void _swap(xpath_variable_set& rhs); + + xpath_variable* _find(const char_t* name) const; + + static bool _clone(xpath_variable* var, xpath_variable** out_result); + static void _destroy(xpath_variable* var); + + public: + // Default constructor/destructor + xpath_variable_set(); + ~xpath_variable_set(); + + // Copy constructor/assignment operator + xpath_variable_set(const xpath_variable_set& rhs); + xpath_variable_set& operator=(const xpath_variable_set& rhs); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT; + xpath_variable_set& operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Add a new variable or get the existing one, if the types match + xpath_variable* add(const char_t* name, xpath_value_type type); + + // Set value of an existing variable; no type conversion is performed, false is returned if there is no such variable or if types mismatch + bool set(const char_t* name, bool value); + bool set(const char_t* name, double value); + bool set(const char_t* name, const char_t* value); + bool set(const char_t* name, const xpath_node_set& value); + + // Get existing variable by name + xpath_variable* get(const char_t* name); + const xpath_variable* get(const char_t* name) const; + }; + + // A compiled XPath query object + class PUGIXML_CLASS xpath_query + { + private: + void* _impl; + xpath_parse_result _result; + + typedef void (*unspecified_bool_type)(xpath_query***); + + // Non-copyable semantics + xpath_query(const xpath_query&); + xpath_query& operator=(const xpath_query&); + + public: + // Construct a compiled object from XPath expression. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors. + explicit xpath_query(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL); + + // Constructor + xpath_query(); + + // Destructor + ~xpath_query(); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT; + xpath_query& operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Get query expression return type + xpath_value_type return_type() const; + + // Evaluate expression as boolean value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + bool evaluate_boolean(const xpath_node& n) const; + + // Evaluate expression as double value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + double evaluate_number(const xpath_node& n) const; + + #ifndef PUGIXML_NO_STL + // Evaluate expression as string value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + string_t evaluate_string(const xpath_node& n) const; + #endif + + // Evaluate expression as string value in the specified context; performs type conversion if necessary. + // At most capacity characters are written to the destination buffer, full result size is returned (includes terminating zero). + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty set instead. + size_t evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const; + + // Evaluate expression as node set in the specified context. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node set instead. + xpath_node_set evaluate_node_set(const xpath_node& n) const; + + // Evaluate expression as node set in the specified context. + // Return first node in document order, or empty node if node set is empty. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node instead. + xpath_node evaluate_node(const xpath_node& n) const; + + // Get parsing result (used to get compilation errors in PUGIXML_NO_EXCEPTIONS mode) + const xpath_parse_result& result() const; + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + }; + + #ifndef PUGIXML_NO_EXCEPTIONS + #if defined(_MSC_VER) + // C4275 can be ignored in Visual C++ if you are deriving + // from a type in the Standard C++ Library + #pragma warning(push) + #pragma warning(disable: 4275) + #endif + // XPath exception class + class PUGIXML_CLASS xpath_exception: public std::exception + { + private: + xpath_parse_result _result; + + public: + // Construct exception from parse result + explicit xpath_exception(const xpath_parse_result& result); + + // Get error message + virtual const char* what() const throw() PUGIXML_OVERRIDE; + + // Get parse result + const xpath_parse_result& result() const; + }; + #if defined(_MSC_VER) + #pragma warning(pop) + #endif + #endif + + // XPath node class (either xml_node or xml_attribute) + class PUGIXML_CLASS xpath_node + { + private: + xml_node _node; + xml_attribute _attribute; + + typedef void (*unspecified_bool_type)(xpath_node***); + + public: + // Default constructor; constructs empty XPath node + xpath_node(); + + // Construct XPath node from XML node/attribute + xpath_node(const xml_node& node); + xpath_node(const xml_attribute& attribute, const xml_node& parent); + + // Get node/attribute, if any + xml_node node() const; + xml_attribute attribute() const; + + // Get parent of contained node/attribute + xml_node parent() const; + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators + bool operator==(const xpath_node& n) const; + bool operator!=(const xpath_node& n) const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xpath_node& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xpath_node& lhs, bool rhs); +#endif + + // A fixed-size collection of XPath nodes + class PUGIXML_CLASS xpath_node_set + { + public: + // Collection type + enum type_t + { + type_unsorted, // Not ordered + type_sorted, // Sorted by document order (ascending) + type_sorted_reverse // Sorted by document order (descending) + }; + + // Constant iterator type + typedef const xpath_node* const_iterator; + + // We define non-constant iterator to be the same as constant iterator so that various generic algorithms (i.e. boost foreach) work + typedef const xpath_node* iterator; + + // Default constructor. Constructs empty set. + xpath_node_set(); + + // Constructs a set from iterator range; data is not checked for duplicates and is not sorted according to provided type, so be careful + xpath_node_set(const_iterator begin, const_iterator end, type_t type = type_unsorted); + + // Destructor + ~xpath_node_set(); + + // Copy constructor/assignment operator + xpath_node_set(const xpath_node_set& ns); + xpath_node_set& operator=(const xpath_node_set& ns); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT; + xpath_node_set& operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Get collection type + type_t type() const; + + // Get collection size + size_t size() const; + + // Indexing operator + const xpath_node& operator[](size_t index) const; + + // Collection iterators + const_iterator begin() const; + const_iterator end() const; + + // Sort the collection in ascending/descending order by document order + void sort(bool reverse = false); + + // Get first node in the collection by document order + xpath_node first() const; + + // Check if collection is empty + bool empty() const; + + private: + type_t _type; + + xpath_node _storage[1]; + + xpath_node* _begin; + xpath_node* _end; + + void _assign(const_iterator begin, const_iterator end, type_t type); + void _move(xpath_node_set& rhs) PUGIXML_NOEXCEPT; + }; +#endif + +#ifndef PUGIXML_NO_STL + // Convert wide string to UTF8 + std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const wchar_t* str); + std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const std::basic_string, std::allocator >& str); + + // Convert UTF8 to wide string + std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const char* str); + std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const std::basic_string, std::allocator >& str); +#endif + + // Memory allocation function interface; returns pointer to allocated memory or NULL on failure + typedef void* (*allocation_function)(size_t size); + + // Memory deallocation function interface + typedef void (*deallocation_function)(void* ptr); + + // Override default memory management functions. All subsequent allocations/deallocations will be performed via supplied functions. + void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate); + + // Get current memory management functions + allocation_function PUGIXML_FUNCTION get_memory_allocation_function(); + deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function(); +} + +#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) +namespace std +{ + // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_node_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_attribute_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_named_node_iterator&); +} +#endif + +#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) +namespace std +{ + // Workarounds for (non-standard) iterator category detection + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_node_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_attribute_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_named_node_iterator&); +} +#endif + +#endif + +// Make sure implementation is included in header-only mode +// Use macro expansion in #include to work around QMake (QTBUG-11923) +#if defined(PUGIXML_HEADER_ONLY) && !defined(PUGIXML_SOURCE) +# define PUGIXML_SOURCE "pugixml.cpp" +# include PUGIXML_SOURCE +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/source/processes/hadronic/models/lend/include/statusMessageReporting.h b/source/processes/hadronic/models/lend/include/statusMessageReporting.h index 8aaff3cbc4..98c808b95c 100644 --- a/source/processes/hadronic/models/lend/include/statusMessageReporting.h +++ b/source/processes/hadronic/models/lend/include/statusMessageReporting.h @@ -1,16 +1,24 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + #ifndef statusMessageReporting_h_included #define statusMessageReporting_h_included #include #include -#ifdef WIN32 +#ifdef _WIN32 #define __func__ __FUNCTION__ #endif #if defined __cplusplus extern "C" { - namespace GIDI { #endif #define smr_unknownID 0 @@ -22,8 +30,7 @@ #define smr_maximumNumberOfRegisteredLibraries 128 #define smr_maximumFileNameSize 1024 #define smr_codeNULL 0 -#define smr_codeFileIO -1 -#define smr_codeMemoryAllocating -2 +#define smr_codeMemoryAllocating 1 enum smr_status { smr_status_Ok = 0, smr_status_Info, smr_status_Warning, smr_status_Error }; typedef char *(*smr_userInterface)( void *userData ); @@ -40,7 +47,6 @@ typedef struct statusMessageReport { typedef struct statusMessageReporting { enum smr_status verbosity; - int append; /* If 0, only one report allowed, else add to next list. */ statusMessageReport report; } statusMessageReporting; @@ -49,13 +55,13 @@ int smr_cleanup( void ); int smr_registerLibrary( char const *libraryName ); int smr_numberOfRegisteredLibraries( void ); -char const *smr_getRegisteredLibrariesName( int ID ); +char const *smr_getRegisteredLibrarysName( int ID ); -statusMessageReporting *smr_new( statusMessageReporting *smr, enum smr_status verbosity, int append ); -int smr_initialize( statusMessageReporting *smr, enum smr_status verbosity, int append ); +statusMessageReporting *smr_new( statusMessageReporting *smr, enum smr_status verbosity ); +int smr_initialize( statusMessageReporting *smr, enum smr_status verbosity ); +statusMessageReporting *smr_clone( statusMessageReporting const *smr ); void smr_release( statusMessageReporting *smr ); void *smr_free( statusMessageReporting **smr ); -statusMessageReporting *smr_clone( statusMessageReporting *smr ); int smr_setReportInfo( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, ... ); int smr_vsetReportInfo( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args ); @@ -64,38 +70,37 @@ int smr_vsetReportWarning( statusMessageReporting *smr, void *userInterface, cha int smr_setReportError( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, ... ); int smr_vsetReportError( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args ); -enum smr_status smr_highestStatus( statusMessageReporting *smr ); -int smr_isOk( statusMessageReporting *smr ); -int smr_isInfo( statusMessageReporting *smr ); -int smr_isWarning( statusMessageReporting *smr ); -int smr_isError( statusMessageReporting *smr ); -int smr_isWarningOrError( statusMessageReporting *smr ); +enum smr_status smr_highestStatus( statusMessageReporting const *smr ); +int smr_isOk( statusMessageReporting const *smr ); +int smr_isInfo( statusMessageReporting const *smr ); +int smr_isWarning( statusMessageReporting const *smr ); +int smr_isError( statusMessageReporting const *smr ); +int smr_isWarningOrError( statusMessageReporting const *smr ); -int smr_isReportOk( statusMessageReport *report ); -int smr_isReportInfo( statusMessageReport *report ); -int smr_isReportWarning( statusMessageReport *report ); -int smr_isReportError( statusMessageReport *report ); -int smr_isReportWarningOrError( statusMessageReport *report ); +int smr_isReportOk( statusMessageReport const *report ); +int smr_isReportInfo( statusMessageReport const *report ); +int smr_isReportWarning( statusMessageReport const *report ); +int smr_isReportError( statusMessageReport const *report ); +int smr_isReportWarningOrError( statusMessageReport const *report ); -int smr_numberOfReports( statusMessageReporting *smr ); -statusMessageReport *smr_firstReport( statusMessageReporting *smr ); -statusMessageReport *smr_nextReport( statusMessageReport *report ); +int smr_numberOfReports( statusMessageReporting const *smr ); +statusMessageReport const *smr_firstReport( statusMessageReporting const *smr ); +statusMessageReport const *smr_nextReport( statusMessageReport const *report ); -enum smr_status smr_getVerbosity( statusMessageReporting *smr ); -int smr_getAppend( statusMessageReporting *smr ); +enum smr_status smr_getVerbosity( statusMessageReporting const *smr ); -int smr_getLibraryID( statusMessageReport *report ); -int smr_getCode( statusMessageReport *report ); -int smr_getLine( statusMessageReport *report ); -char const *smr_getFile( statusMessageReport *report ); -char const *smr_getFunction( statusMessageReport *report ); -char const *smr_getMessage( statusMessageReport *report ); -char *smr_copyMessage( statusMessageReport *report ); -char *smr_copyFullMessage( statusMessageReport *report ); +int smr_getLibraryID( statusMessageReport const *report ); +int smr_getCode( statusMessageReport const *report ); +int smr_getLine( statusMessageReport const *report ); +char const *smr_getFile( statusMessageReport const *report ); +char const *smr_getFunction( statusMessageReport const *report ); +char const *smr_getMessage( statusMessageReport const *report ); +char *smr_copyMessage( statusMessageReport const *report ); +char *smr_copyFullMessage( statusMessageReport const *report ); void smr_print( statusMessageReporting *smr, int clear ); void smr_write( statusMessageReporting *smr, FILE *f, int clear ); -void smr_reportPrint( statusMessageReport *report ); -void smr_reportWrite( statusMessageReport *report, FILE *f ); +void smr_reportPrint( statusMessageReport const *report ); +void smr_reportWrite( statusMessageReport const *report, FILE *f ); char const *smr_statusToString( enum smr_status status ); @@ -110,6 +115,7 @@ char *smr_allocateCopyStringN( statusMessageReporting *smr, char const *s, size_ #define smr_malloc2( smr, size, zero, forItem ) smr_malloc( smr, size, zero, forItem, __FILE__, __LINE__, __func__ ) #define smr_realloc2( smr, old, size, forItem ) smr_realloc( smr, old, size, forItem, __FILE__, __LINE__, __func__ ) +#define smr_freeMemory2( p ) smr_freeMemory( (void **) &p ) #define smr_allocateCopyString2( smr, s, forItem ) smr_allocateCopyString( smr, s, forItem, __FILE__, __LINE__, __func__ ) #define smr_allocateCopyStringN2( smr, s, n, forItem ) smr_allocateCopyStringN( smr, s, n, forItem, __FILE__, __LINE__, __func__ ) @@ -135,7 +141,6 @@ char *smr_allocateCopyStringN( statusMessageReporting *smr, char const *s, size_ #if defined __cplusplus } - } #endif #endif /* End of statusMessageReporting_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/xDataTOM.h b/source/processes/hadronic/models/lend/include/xDataTOM.h deleted file mode 100644 index 561f3b4ad9..0000000000 --- a/source/processes/hadronic/models/lend/include/xDataTOM.h +++ /dev/null @@ -1,356 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef xDataTOM_h_included -#define xDataTOM_h_included - -#include - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -typedef int xDataTOM_Int; - -/* Note: xDataTOM_interpolationFlag_flat must be last for current logic in xDataTOM_interpolation.c to work. */ -enum xDataTOM_interpolationFlag { xDataTOM_interpolationFlag_invalid, xDataTOM_interpolationFlag_linear, xDataTOM_interpolationFlag_log, - xDataTOM_interpolationFlag_byRegion, xDataTOM_interpolationFlag_flat }; -enum xDataTOM_interpolationQualifier { xDataTOM_interpolationQualifier_invalid, xDataTOM_interpolationQualifier_dependent, - xDataTOM_interpolationQualifier_none, xDataTOM_interpolationQualifier_unitBase, xDataTOM_interpolationQualifier_correspondingPoints }; -enum xDataTOM_frame { xDataTOM_frame_invalid, xDataTOM_frame_lab, xDataTOM_frame_centerOfMass }; -enum xDataTOM_subAxesType { xDataTOM_subAxesType_proxy, xDataTOM_subAxesType_intepolationAxes }; -enum xDataTOM_KalbachMannType { xDataTOM_KalbachMannType_fr, xDataTOM_KalbachMannType_fra }; - -typedef struct xDataTOM_interpolation_s xDataTOM_interpolation; -typedef struct xDataTOM_axis_s xDataTOM_axis; -typedef struct xDataTOM_axes_s xDataTOM_axes; -typedef struct xDataTOM_subAxes_s xDataTOM_subAxes; - -typedef struct xDataTOM_XYs_s xDataTOM_XYs; -typedef struct xDataTOM_regionsXYs_s xDataTOM_regionsXYs; -typedef struct xDataTOM_W_XYs_s xDataTOM_W_XYs; -typedef struct xDataTOM_V_W_XYs_s xDataTOM_V_W_XYs; - -typedef struct xDataTOM_LegendreSeries_s xDataTOM_LegendreSeries; -typedef struct xDataTOM_W_XYs_LegendreSeries_s xDataTOM_W_XYs_LegendreSeries; -typedef struct xDataTOM_regionsW_XYs_LegendreSeries_s xDataTOM_regionsW_XYs_LegendreSeries; -typedef struct xDataTOM_V_W_XYs_LegendreSeries_s xDataTOM_V_W_XYs_LegendreSeries; -typedef struct xDataTOM_KalbachMannCoefficients_s xDataTOM_KalbachMannCoefficients; -typedef struct xDataTOM_KalbachMann_s xDataTOM_KalbachMann; -typedef struct xDataTOM_polynomial_s xDataTOM_polynomial; - -typedef struct xDataTOM_xDataInfo_s xDataTOM_xDataInfo; - -typedef struct xDataTOM_attribute_s xDataTOM_attribute; -typedef struct xDataTOM_attributionList_s xDataTOM_attributionList; -typedef struct xDataTOM_elementListItem_s xDataTOM_elementListItem; -typedef struct xDataTOM_elementList_s xDataTOM_elementList; -typedef struct xDataTOM_element_s xDataTOM_element; -typedef struct xDataTOM_TOM_s xDataTOM_TOM; - -typedef int (*xDataTOM_sortElementFunc)( const void *, const void * ); - -struct xDataTOM_interpolation_s { - enum xDataTOM_interpolationFlag independent, dependent; - enum xDataTOM_interpolationQualifier qualifier; -}; - -struct xDataTOM_axis_s { - int index; - char *label; - char *unit; - xDataTOM_interpolation interpolation; -}; - -struct xDataTOM_axes_s { - int numberOfAxes; - xDataTOM_axis *axis; -}; - -struct xDataTOM_subAxes_s { - enum xDataTOM_subAxesType type; - int offset; - xDataTOM_axes *axes; - xDataTOM_interpolation interpolation; -}; - -struct xDataTOM_XYs_s { - int index, length; - double value, accuracy; - xDataTOM_subAxes subAxes; - double *data; -}; - -struct xDataTOM_regionsXYs_s { - int length; - xDataTOM_axes *axes; - xDataTOM_XYs *XYs; -}; - -struct xDataTOM_W_XYs_s { - int index, length; - double value; - xDataTOM_subAxes subAxes; - xDataTOM_XYs *XYs; -}; - -struct xDataTOM_V_W_XYs_s { - int length; - xDataTOM_subAxes subAxes; - xDataTOM_W_XYs *W_XYs; -}; - -struct xDataTOM_LegendreSeries_s { - int index, length; - double value; - double *LegendreSeries; -}; - -struct xDataTOM_W_XYs_LegendreSeries_s { - int index, length; - double value; - xDataTOM_subAxes subAxes; - xDataTOM_LegendreSeries *LegendreSeries; -}; - -struct xDataTOM_regionsW_XYs_LegendreSeries_s { - int length; - xDataTOM_axes *axes; - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries; -}; - -struct xDataTOM_V_W_XYs_LegendreSeries_s { - int length; - xDataTOM_subAxes subAxes; - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries; -}; - -struct xDataTOM_KalbachMannCoefficients_s { - int index, length; - double value; - double *coefficients; -}; - -struct xDataTOM_KalbachMann_s { - enum xDataTOM_KalbachMannType type; - int numberOfEnergies; - xDataTOM_subAxes subAxes; - xDataTOM_KalbachMannCoefficients *coefficients; -}; - -struct xDataTOM_polynomial_s { - int length; - xDataTOM_subAxes subAxes; - double *coefficients; -}; - -struct xDataTOM_xDataInfo_s { - const char *ID; - xDataTOM_element *element; - xDataTOM_axes axes; - void *data; -}; - -struct xDataTOM_attribute_s { - xDataTOM_attribute *next; - char *name; - char *value; -}; - -struct xDataTOM_attributionList_s { - int number; - xDataTOM_attribute *attributes; -}; - -struct xDataTOM_elementListItem_s { - xDataTOM_element *element; - const char *sortString; -}; - -struct xDataTOM_elementList_s { - int n; - xDataTOM_elementListItem *items; -}; - -struct xDataTOM_element_s { - int ordinal; /* Counting from 0. */ - int index; /* Value from "index" attribute if present or -1. */ - xDataTOM_element *parent; - xDataTOM_element *next; - char *name; - xDataTOM_attributionList attributes; - int numberOfChildren; - xDataTOM_element *children; - xDataTOM_xDataInfo xDataInfo; -}; - -struct xDataTOM_TOM_s { - char *fileName; - char *realFileName; - xDataTOM_element root; -}; - -/* -* Stuff in common/xDataTOM.c -*/ -xDataTOM_TOM *xDataTOM_importFile( statusMessageReporting *smr, const char *fileName ); -xDataTOM_TOM *xDataTOM_mallocTOM( statusMessageReporting *smr ); -int xDataTOM_initializeTOM( statusMessageReporting *smr, xDataTOM_TOM *doc ); -void *xDataTOM_freeTOM( statusMessageReporting *smr, xDataTOM_TOM **TOM ); -int xDataTOM_setFileNameTOM( statusMessageReporting *smr, xDataTOM_TOM *doc, const char *fileName ); -void xDataTOM_displayTree( statusMessageReporting *smr, xDataTOM_TOM *TOM, int printAttributes ); - -xDataTOM_element *xDataTOM_mallocElement( statusMessageReporting *smr, xDataTOM_element *parent, int ordinal, int index, char const *name ); -void xDataTOM_freeElement( xDataTOM_element **element ); -void xDataTOM_releaseElement( xDataTOM_element *element ); -xDataTOM_element *xDataTOM_addElementInElement( statusMessageReporting *smr, xDataTOM_element *parent, int index, char const *name ); -xDataTOM_element *xDataTOM_getDocumentsElement( xDataTOM_TOM *TOM ); -xDataTOM_element *xDataTOME_getFirstElement( xDataTOM_element *element ); -xDataTOM_element *xDataTOME_getNextElement( xDataTOM_element *element ); -xDataTOM_element *xDataTOME_getOneElementByName( statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required ); -int xDataTOM_numberOfElementsByName( statusMessageReporting *smr, xDataTOM_element *element, char const *name ); -int xDataTOME_addAttribute( statusMessageReporting *smr, xDataTOM_element *element, char const *name, char const *value ); -char const *xDataTOM_getAttributesValueInElement( xDataTOM_element *element, char const *name ); -int xDataTOME_copyAttributionList( statusMessageReporting *smr, xDataTOM_attributionList *desc, xDataTOM_element *element ); -int xDataTOME_convertAttributeToInteger( statusMessageReporting *smr, xDataTOM_element *element, char const *name, int *n ); -int xDataTOME_convertAttributeToDouble( statusMessageReporting *smr, xDataTOM_element *element, char const *name, double *d ); -int xDataTOME_convertAttributeToDoubleWithUnit( statusMessageReporting *smr, xDataTOM_element *element, char const *name, double *d, char *unit ); -int xDataTOME_getInterpolation( statusMessageReporting *smr, xDataTOM_element *element, int index, - enum xDataTOM_interpolationFlag *independent, enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier ); - -void xDataTOMAL_initial( statusMessageReporting *smr, xDataTOM_attributionList *attributes ); -void xDataTOMAL_release( xDataTOM_attributionList *attributes ); -int xDataTOMAL_addAttribute( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, char const *value ); -char const *xDataTOMAL_getAttributesValue( xDataTOM_attributionList *attributes, char const *name ); -int xDataTOMAL_copyAttributionList( statusMessageReporting *smr, xDataTOM_attributionList *desc, xDataTOM_attributionList *src ); -int xDataTOMAL_convertAttributeToInteger( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, int *n ); -int xDataTOMAL_convertAttributeToDouble( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, double *d ); - -void *xData_initializeData( statusMessageReporting *smr, xDataTOM_element *TE, char const *ID, size_t size ); -int xDataTOM_isXDataID( xDataTOM_element *TE, char const *ID ); - -/* -* Stuff in common/xDataTOMMisc.c -*/ -char *xDataTOMMisc_getAbsPath( statusMessageReporting *smr, const char *fileName ); -int xDataTOM_setMessageError_ReturnInt( int value, statusMessageReporting *smr, void *userData, const char *file, int line, int code, const char *fmt, ... ); -xDataTOM_element *xDataTOM_getLinksElement( statusMessageReporting *smr, xDataTOM_element *element, char const *link ); - -#define xDataTOMMisc_allocateCopyString2( smr, s, forItem ) xDataTOMMisc_allocateCopyString( smr, s, forItem, __FILE__, __LINE__ ) - -/* -* Stuff in common/xDataTOM_interpolation.c -*/ -int xDataTOM_interpolation_set( statusMessageReporting *smr, xDataTOM_interpolation *interpolation, enum xDataTOM_interpolationFlag independent, - enum xDataTOM_interpolationFlag dependent, enum xDataTOM_interpolationQualifier qualifier ); -int xDataTOM_interpolation_setFromString( statusMessageReporting *smr, xDataTOM_interpolation *interpolation, char const *str ); -int xDataTOM_interpolation_copy( statusMessageReporting *smr, xDataTOM_interpolation *desc, xDataTOM_interpolation *src ); - -/* -* Stuff in common/xDataTOM_axes.c -*/ -int xDataTOM_axes_initialize( statusMessageReporting *smr, xDataTOM_axes *axes, int numberOfAxes ); -int xDataTOM_axes_release( xDataTOM_axes *axes ); -char const *xDataTOM_axes_getLabel( statusMessageReporting *smr, xDataTOM_axes *axes, int index ); -char const *xDataTOM_axes_getUnit( statusMessageReporting *smr, xDataTOM_axes *axes, int index ); -int xDataTOM_axes_getInterpolation( statusMessageReporting *smr, xDataTOM_axes *axes, int index, enum xDataTOM_interpolationFlag *independent, - enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier ); - -int xDataTOM_subAxes_initialize( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset, - xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ); -int xDataTOM_subAxes_release( xDataTOM_subAxes *subAxes ); -char const *xDataTOM_subAxes_getLabel( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ); -char const *xDataTOM_subAxes_getUnit( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ); - -xDataTOM_axis *xDataTOM_axis_new( statusMessageReporting *smr, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation ); -int xDataTOM_axis_initialize( statusMessageReporting *smr, xDataTOM_axis *axis, int index, char const *label, char const *unit, - xDataTOM_interpolation *interpolation ); -xDataTOM_axis *xDataTOM_axis_release( statusMessageReporting *smr, xDataTOM_axis *axis ); -enum xDataTOM_frame xDataTOM_axis_stringToFrame( statusMessageReporting *smr, char const *frame ); -char const *xDataTOM_axis_frameToString( statusMessageReporting *smr, enum xDataTOM_frame frame ); - -/* -* Stuff in common/xDataTOM_XYs.c -*/ -int xDataTOM_XYs_free( xDataTOM_xDataInfo *xDI ); -int xDataTOM_XYs_release( xDataTOM_XYs *XYs ); -int xDataTOM_XYs_getData( xDataTOM_XYs *XYs, double **data ); -int xDataTOM_XYs_getDataFromXDataInfo( xDataTOM_xDataInfo *xDI, double **data ); - -/* -* Stuff in common/xDataTOM_regionsXYs.c -*/ -int xDataTOM_regionsXYs_free( xDataTOM_xDataInfo *xDI ); - -/* -* Stuff in common/xDataTOM_W_XYs.c -*/ -xDataTOM_W_XYs *xDataTOM_W_XYs_new( statusMessageReporting *smr, int index, int length, double value, xDataTOM_axes *axes, int axesOffset ); -int xDataTOM_W_XYs_initialize( statusMessageReporting *smr, xDataTOM_W_XYs *W_XYs, int index, int length, double value, xDataTOM_axes *axes, - int axesOffset ); -xDataTOM_W_XYs *xDataTOM_W_XYs_free( xDataTOM_W_XYs *W_XYs ); -int xDataTOM_W_XYs_freeFrom_xDataInfo( xDataTOM_xDataInfo *xDI ); -int xDataTOM_W_XYs_release( xDataTOM_W_XYs *W_XYs ); -xDataTOM_xDataInfo *xDataTOME_getXData( xDataTOM_element *TE ); -void *xDataTOME_getXDataIfID( statusMessageReporting *smr, xDataTOM_element *TE, char const *ID ); - -/* -* Stuff in common/xDataTOM_V_W_XYs.c -*/ -int xDataTOM_V_W_XYs_initialize( statusMessageReporting *smr, xDataTOM_V_W_XYs *V_W_XYs, int length, xDataTOM_axes *axes ); -int xDataTOM_V_W_XYs_free( xDataTOM_xDataInfo *xDI ); - -/* -* Stuff in common/xDataTOM_LegendreSeries.c -*/ -int xDataTOM_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_LegendreSeries *LegendreSeries, int index, int length, double value ); -int xDataTOM_LegendreSeries_release( xDataTOM_LegendreSeries *LegendreSeries ); - -/* -* Stuff in common/xDataTOM_W_XYs_LegendreSeries.c -*/ -int xDataTOM_W_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, int index, - int length, double value, enum xDataTOM_subAxesType subAxesType, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ); -int xDataTOM_W_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ); -int xDataTOM_W_XYs_LegendreSeries_release( xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries ); - -/* -* Stuff in common/xDataTOM_regionsW_XYs_LegendreSeries.c -*/ -int xDataTOM_regionsW_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries, - int length, xDataTOM_axes *axes ); -int xDataTOM_regionsW_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ); -int xDataTOM_regionsW_XYs_LegendreSeries_release( xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries ); - -/* -* Stuff in common/xDataTOM_V_W_XYs_LegendreSeries.c -*/ -int xDataTOM_V_W_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_V_W_XYs_LegendreSeries *V_W_XYs_LegendreSeries, - int length, xDataTOM_axes *axes ); -int xDataTOM_V_W_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ); - -/* -* Stuff in common/xDataTOM_KalbachMann.c -*/ -int xDataTOM_KalbachMann_initialize( statusMessageReporting *smr, xDataTOM_KalbachMann *KalbachMann, int length, xDataTOM_axes *axes ); -int xDataTOM_KalbachMann_free( xDataTOM_xDataInfo *xDI ); -int xDataTOM_KalbachMann_release( xDataTOM_KalbachMann *KalbachMann ); - -/* -* Stuff in common/xDataTOM_polynomial.c -*/ -int xDataTOM_polynomial_initialize( statusMessageReporting *smr, xDataTOM_polynomial *polynomial, int length, xDataTOM_axes *axes ); -int xDataTOM_polynomial_free( xDataTOM_xDataInfo *xDI ); -int xDataTOM_polynomial_release( xDataTOM_polynomial *polynomial ); -int xDataTOM_polynomial_getData( xDataTOM_polynomial *polynomial, double **data ); -int xDataTOM_polynomial_getDataFromXDataInfo( xDataTOM_xDataInfo *xDI, double **data ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of xDataTOM_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/xDataTOM_importXML_private.h b/source/processes/hadronic/models/lend/include/xDataTOM_importXML_private.h deleted file mode 100644 index 003b7ab344..0000000000 --- a/source/processes/hadronic/models/lend/include/xDataTOM_importXML_private.h +++ /dev/null @@ -1,250 +0,0 @@ -/* -# <> -# <> -*/ -#ifndef xDataTOM_importXML_private_h_included -#define xDataTOM_importXML_private_h_included - -#include -#include -#include - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -#ifndef XMLCALL -#define XMLCALL -#endif - -#ifndef XML_Char -#define XML_Char char -#endif - -#ifndef XML_Size -#define XML_Size long -#endif - -typedef struct xDataXMLType_s xDataXMLType; - -enum xDataXML_status { xDataXML_statusParsing = 1, xDataXML_statusCompleted, xDataXML_statusError }; -enum xDataXML_errorCodes { xDataXML_errNone, xDataXML_errXML_ParserCreate, xDataXML_errFileError, xDataXML_errXMLParser }; -enum xDataXML_itemMode { xDataXML_itemModeEnd = 0, xDataXML_itemModeElement, xDataXML_itemModeText }; -enum xDataXML_xDataType { xDataXML_xDataType_Ok, xDataXML_xDataType_ConvertingToData, xDataXML_xDataType_ConvertingToString }; - -typedef struct xDataTOM_importXMLTOM_s xDataTOM_importXMLTOM; -typedef struct xDataXML_attribute_s xDataXML_attribute; -typedef struct xDataXML_document_s xDataXML_document; -typedef struct xDataXML_docInfo_s xDataXML_docInfo; -typedef struct xDataXML_attributionList_s xDataXML_attributionList; -typedef struct xDataXML_element_s xDataXML_element; -typedef struct xDataXML_elementList_s xDataXML_elementList; -typedef struct xDataXML_elementListItem_s xDataXML_elementListItem; -typedef struct xDataXML_rootElement_s xDataXML_rootElement; -typedef struct xDataXML_text_s xDataXML_text; -typedef struct xDataXML_smr_s xDataXML_smr; -typedef struct xDataXML_item_s xDataXML_item; - -struct xDataXML_docInfo_s { - size_t line; - size_t column; -}; - -struct xDataXML_attribute_s { - char *name; - char *value; -}; - -struct xDataXML_attributionList_s { - int number; - size_t size; - xDataXML_attribute *attributes; -}; - -struct xDataXML_text_s { - xDataXML_docInfo docInfo; - size_t allocated; - size_t length; - char *text; -}; - -typedef int (*xDTXML_toDataFunction)( statusMessageReporting *smr, xDataXMLType *, xDataXML_attributionList *, char const * ); -typedef char *(*xDTXML_toStringFunction)( statusMessageReporting *smr, xDataXMLType * ); -typedef int (*xDTXML_releaseFunction)( statusMessageReporting *smr, xDataXMLType * ); - -struct xDataXML_elementListItem_s { - xDataXML_element *element; - const char *sortString; -}; - -struct xDataXML_elementList_s { - int n; - xDataXML_elementListItem *items; -}; - -struct xDataXMLType_s { - enum xDataXML_xDataType status; - const char *ID; - xDataXML_element *element; - xDTXML_toDataFunction toData; - xDTXML_toStringFunction toString; - xDTXML_releaseFunction release; - int indexPresent, startPresent, endPresent, lengthPresent; - xDataTOM_Int index, start, end, length; - void *data; -}; - -struct xDataXML_rootElement_s { - xDataXML_document *xData_doc; - xDataXML_element *parentElement; - xDataXML_rootElement *parentRoot; - int depth; - int numberOfElements; - xDataXML_element *children; - xDataXML_element *currentChild; -}; - -struct xDataXML_element_s { - xDataXML_docInfo docInfo; - int ordinal; /* Counting from 0. */ - int index; /* Value from "index" attribute if present or -1 */ - int accessed; /* For the convenience of the users, not used internally. */ - xDataXML_rootElement *parentRoot; - xDataXML_rootElement childrenRoot; - xDataXML_element *next; - char *name; /* Allocated in xData_parseAddElementToRoot. */ - char *fullName; /* Allocated in xData_parseAddElementToRoot. */ - xDataXML_attributionList attributes; /* attributes->abbributes is allocated in xData_parseAddElementToRoot. */ - xDataXMLType xDataTypeInfo; - size_t textOffset; - xDataXML_text text; -}; - -struct xDataXML_smr_s { - smr_userInterface smrUserInterface; - xDataXML_document *doc; -}; - -struct xDataXML_document_s { - enum xDataXML_status status; - enum xDataXML_errorCodes error; - enum XML_Error err; - XML_Size err_line, err_column; - char *fileName; - char *realFileName; - xDataXML_smr smrUserInterface; - statusMessageReporting *smr; - XML_Parser xmlParser; - xDataXML_rootElement root; - xDataXML_rootElement *currentRoot; -}; - -struct xDataXML_item_s { - xDataXML_element *parentElement; - xDataXML_element *element; - enum xDataXML_itemMode mode; - size_t textOffset; - size_t textLength; - char *text; -}; - -xDataTOM_TOM *xDataXML_importFile( statusMessageReporting *smr, char const *fileName ); -xDataXML_document *xDataXML_importFile2( statusMessageReporting *smr, char const *fileName ); -void *xDataXML_freeDoc( statusMessageReporting *smr, xDataXML_document *doc ); -int xDataXML_parseIsError( xDataXML_document *doc ); -xDataXML_element *xDataXML_getDocumentsElement( xDataXML_document *doc ); -xDataXML_element *xDataXML_getFirstElement( xDataXML_element *element ); -xDataXML_element *xDataXML_getNextElement( xDataXML_element *element ); -enum xDataXML_itemMode xDataXML_getFirstItem( xDataXML_element *element, xDataXML_item *item ); -enum xDataXML_itemMode xDataXML_getNextItem( xDataXML_item *item ); -int xDataXML_isAttributeInList( xDataXML_attributionList *attributes, char const *name ); -int xDataXML_isAttributeInElement( xDataXML_element *element, char const *name ); -char *xDataXML_getAttributesValue( xDataXML_attributionList *attributes, char const *name ); -char const *xDataXML_getAttributesValueInElement( xDataXML_element *element, char const *name ); -int xDataXML_attributeListLength( xDataXML_attributionList *attributes ); -xDataXML_attribute *xDataXML_attributeByIndex( xDataXML_attributionList *attributes, int index ); -int xDataXML_getCommonData( statusMessageReporting *smr, xDataXML_element *element, xDataTOM_Int *index, xDataTOM_Int *start, xDataTOM_Int *end, - xDataTOM_Int *length ); -int xDataXML_xDataTypeConvertAttributes( statusMessageReporting *smr, xDataXML_element *element ); -xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int( statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required ); -int xDataXML_convertAttributeToDouble( statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required ); -int xDataXML_numberOfElementsByTagName( statusMessageReporting *smr, xDataXML_element *element, char const *tagName ); -xDataXML_elementList *xDataXML_getElementsByTagName( statusMessageReporting *smr, xDataXML_element *element, char const *tagName ); -xDataXML_element *xDataXML_getOneElementByTagName( statusMessageReporting *smr, xDataXML_element *element, char *name, int required ); -void xDataXML_freeElementList( statusMessageReporting *smr, xDataXML_elementList *list ); -int xDataXML_is_xDataType( statusMessageReporting *smr, xDataXMLType *xDT, char const * const type, int setMsg ); -char const *xDataXML_getFileName( xDataXML_document *doc ); -char const *xDataXML_getRealFileName( xDataXML_document *doc ); -xDataXML_document *xDataXML_getElementsDocument( xDataXML_element *element ); -void *xDataXML_get_smrUserInterfaceFromDocument( xDataXML_document *doc ); -void *xDataXML_get_smrUserInterfaceFromElement( xDataXML_element *element ); -int xDataXML_stringTo_xDataTOM_Int( statusMessageReporting *smr, void *smrUserInterface, char const *c, xDataTOM_Int *value, char const *endings, char **e ); -int xDataXML_stringTo_double( statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e ); -int xDataXML_addToAccessed( statusMessageReporting *smr, xDataXML_element *element, int increment ); -int xDataXML_getAccessed( statusMessageReporting *smr, xDataXML_element *element ); -void *xDataXML_initializeData( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size ); - -/* -c Stuff in xDataTOM_importXML_axes.c -*/ -int xDataXML_axesElememtToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ); -int xDataXML_axesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ); - -/* -c Stuff in xDataTOM_importXML_XYs.c -*/ -int xDataXML_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); -int xDataXML_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, - enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ); -int xDataXML_stringToDoubles( statusMessageReporting *smr, xDataXML_element *XE, char const *s, int length, double *d ); - -/* -c Stuff in xDataTOM_importXML_regionsXYs.c -*/ -int xDataXML_regionsXYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -/* -c Stuff in xDataTOM_importXML_W_XYs.c -*/ -int xDataXML_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); -int xDataXML_W_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, int index, double value, xDataTOM_axes *axes, - int axesOffset ); - -/* -c Stuff in xDataTOM_importXML_V_W_XYs.c -*/ -int xDataXML_V_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -/* -c Stuff in xDataTOM_importXML_W_XYs_LegendreSeries.c -*/ -int xDataXML_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); -int xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_LegendreSeries *LegendreSeries ); - -/* -c Stuff in xDataTOM_importXML_regionsW_XYs_LegendreSeries.c -*/ -int xDataXML_regionsW_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -/* -c Stuff in xDataTOM_importXML_V_W_XYs_LegendreSeries.c -*/ -int xDataXML_V_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -/* -c Stuff in xDataTOM_importXML_polynomial.c -*/ -int xDataXML_polynomialToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -/* -c Stuff in xDataTOM_importXML_KalbachMann.c -*/ -int xDataXML_KalbachMannToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ); - -#if defined __cplusplus - } - } -#endif - -#endif /* End of xDataTOM_importXML_private_h_included. */ diff --git a/source/processes/hadronic/models/lend/include/xDataTOM_private.h b/source/processes/hadronic/models/lend/include/xDataTOM_private.h deleted file mode 100644 index 9c4c8532a5..0000000000 --- a/source/processes/hadronic/models/lend/include/xDataTOM_private.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -# <> -# <> -*/ - -#ifndef xDataTOM_private_h_included -#define xDataTOM_private_h_included - -#include "xDataTOM.h" - -#if defined __cplusplus - extern "C" { - namespace GIDI { -#endif - -extern int xDataTOM_smrLibraryID; -extern char const *xDataTOM_XYs_ID; -extern char const *xDataTOM_regionsXYs_ID; -extern char const *xDataTOM_W_XYs_ID; -extern char const *xDataTOM_V_W_XYs_ID; -extern char const *xDataTOM_W_XYs_LegendreSeries_ID; -extern char const *xDataTOM_regionsW_XYs_LegendreSeries_ID; -extern char const *xDataTOM_V_W_XYs_LegendreSeries_ID; -extern char const *xDataTOM_KalbachMann_ID; -extern char const *xDataTOM_polynomial_ID; - -#if defined __cplusplus - } - } -#endif - -#endif /* End of xDataTOM_private_h_included. */ diff --git a/source/processes/hadronic/models/lend/sources.cmake b/source/processes/hadronic/models/lend/sources.cmake index 4fbbfb654b..e7f770ed45 100644 --- a/source/processes/hadronic/models/lend/sources.cmake +++ b/source/processes/hadronic/models/lend/sources.cmake @@ -3,153 +3,221 @@ # Define the Geant4 Module. geant4_add_module(G4had_lend PUBLIC_HEADERS - G4GIDI.hh - G4GIDI_Misc.hh - G4GIDI_map.hh - G4GIDI_mass.hh - G4GIDI_target.hh - G4LENDCapture.hh G4LENDCaptureCrossSection.hh - G4LENDCrossSection.hh + G4LENDCapture.hh G4LENDCombinedCrossSection.hh - G4LENDGammaCrossSection.hh G4LENDCombinedModel.hh - G4LENDGammaModel.hh - G4LENDElastic.hh + G4LENDCrossSection.hh G4LENDElasticCrossSection.hh - G4LENDFission.hh + G4LENDElastic.hh G4LENDFissionCrossSection.hh + G4LENDFission.hh + G4LENDGammaCrossSection.hh + G4LENDGammaModel.hh G4LENDHeader.hh - G4LENDInelastic.hh G4LENDInelasticCrossSection.hh + G4LENDInelastic.hh G4LENDManager.hh G4LENDModel.hh G4LENDUsedTarget.hh - GIDI_settings.hh - MCGIDI.h - MCGIDI_fromTOM.h - MCGIDI_map.h - MCGIDI_mass.h - MCGIDI_misc.h - MCGIDI_private.h - PoPs.h - PoPs_Bcast_private.h - PoPs_data.h - PoPs_mass.h - PoPs_private.h + g4gidi_version.hh + G4GIDI.hh nf_Legendre.h nf_integration.h - nf_specialFunctions.h + nf_buffer.h nf_utilities.h ptwX.h ptwXY.h statusMessageReporting.h - xDataTOM.h - xDataTOM_importXML_private.h - xDataTOM_private.h + pugiconfig.hpp + pugixml.hpp + GIDI.hpp + GIDI_data.hpp + GUPI.hpp + HAPI.hpp + LUPI.hpp + LUPI_declareMacro.hpp + LUPI_defines.hpp + LUPI_dataBuffer.hpp + MCGIDI_distributions.hpp + MCGIDI_string.hpp + MCGIDI_functions.hpp + MCGIDI_sampling.hpp + MCGIDI_vector.hpp + MCGIDI_headerSource.hpp + MCGIDI.hpp + PoPI.hpp + RISI.hpp SOURCES - G4GIDI.cc - G4GIDI_Misc.cc - G4GIDI_map.cc - G4GIDI_mass.cc - G4GIDI_target.cc G4LENDCapture.cc G4LENDCaptureCrossSection.cc G4LENDCombinedCrossSection.cc - G4LENDGammaCrossSection.cc G4LENDCombinedModel.cc - G4LENDGammaModel.cc - G4LENDCrossSection.cc G4LENDElastic.cc G4LENDElasticCrossSection.cc G4LENDFission.cc G4LENDFissionCrossSection.cc + G4LENDGammaCrossSection.cc + G4LENDGammaModel.cc G4LENDInelastic.cc G4LENDInelasticCrossSection.cc + G4LENDUsedTarget.cc + G4LENDCrossSection.cc G4LENDManager.cc G4LENDModel.cc - G4LENDUsedTarget.cc + nf_Legendre.c + nf_Legendre_GaussianQuadrature.c + nf_GnG_adaptiveQuadrature.c + nf_stringToInt32s.c + nf_utilities.c + nf_stringToDoubles.c + ptwX_core.c + ptwX_misc.c + ptwXY_binaryOperators.c + ptwXY_convenient.c + ptwXY_core.c + ptwXY_functions.c + ptwXY_integration.c + ptwXY_interpolation.c + ptwXY_methods.c + ptwXY_misc.c + ptwXY_unitaryOperators.c + statusMessageReporting.c + pugixml.cc + G4GIDI_misc.cc + G4GIDI_target.cc + G4GIDI.cc + GIDI_1dData.cc + GIDI_URR_probabilityTables.cc + GIDI_XYs2d.cc + GIDI_XYs3d.cc + GIDI_array3d.cc + GIDI_axis.cc + GIDI_axisDomain.cc + GIDI_construction.cc + GIDI_delayedNeutron.cc + GIDI_group.cc + GIDI_exceptions.cc + GIDI_flux.cc + GIDI_grid.cc + GIDI_gridded2d.cc + GIDI_axes.cc + GIDI_regions1d.cc + GIDI_regions2d.cc + GIDI_styles.cc GIDI_settings.cc GIDI_settings_flux.cc - GIDI_settings_group.cc GIDI_settings_particle.cc - MCGIDI_KalbachMann.cc - MCGIDI_LLNLAngular_angularEnergy.cc - MCGIDI_angular.cc - MCGIDI_angularEnergy.cc - MCGIDI_distribution.cc - MCGIDI_energy.cc - MCGIDI_energyAngular.cc - MCGIDI_fromTOM.cc - MCGIDI_kinetics.cc - MCGIDI_map.cc - MCGIDI_mass.cc - MCGIDI_misc.cc - MCGIDI_outputChannel.cc - MCGIDI_particle.cc - MCGIDI_pop.cc + GIDI_suite.cc + GIDI_transportable.cc + GIDI_protare.cc + GIDI_misc.cc + GIDI_gridded3d.cc + GIDI_Legendre1d.cc + GIDI_URR_probabilityTables1d.cc + GIDI_Ys1d.cc + GIDI_arrays.cc + GIDI_branching1d.cc + GIDI_collapse.cc + GIDI_constant1d.cc + GIDI_GRIN_continuumGammas.cc + GIDI_misc1d.cc + GIDI_sums.cc + GIDI_table.cc + GIDI_map.cc + GIDI_form.cc + GIDI_XYs1d.cc + GIDI_GNDS_fileType.cc + GIDI_discreteGamma2d.cc + GIDI_distributions.cc + GIDI_documentation_1_10.cc + GIDI_doubleDifferentialCrossSection.cc + GIDI_energyFunctions2d.cc + GIDI_externalFile.cc + GIDI_externalFiles.cc + GIDI_fissionEnergyReleased.cc + GIDI_fissionFragmentData.cc + GIDI_gridded1d.cc + GIDI_product.cc + GIDI_isotropic2d.cc + GIDI_outputChannel.cc + GIDI_parseSuites.cc + GIDI_polynomial1d.cc + GIDI_primaryGamma2d.cc + GIDI_protareComposite.cc + GIDI_protareTNSL.cc + GIDI_recoil2d.cc + GIDI_reference1d.cc + GIDI_resonancesWithBackground1d.cc + GIDI_unspecified1d.cc + GIDI_xs_pdf_cdf1d.cc + GIDI_particleInfo.cc + GIDI_physicalQuantity.cc + GIDI_reaction.cc + GIDI_matrix.cc + GIDI_vector.cc + GIDI_settings_group.cc + GUPI_documentation.cc + GUPI_entry.cc + GUPI_suite.cc + GUPI_text.cc + GUPI_ancestry.cc + HAPI_Data.cc + HAPI_Data_internal.cc + HAPI_File.cc + HAPI_HDFData.cc + HAPI_HDFFile.cc + HAPI_HDFNode.cc + HAPI_Node.cc + HAPI_Node_internal.cc + HAPI_PugiXMLData.cc + HAPI_PugiXMLFile.cc + HAPI_PugiXMLNode.cc + HAPI_Text.cc + HAPI_HDFDataManager.cc + LUPI_misc.cc + LUPI_formatVersion.cc + LUPI_argumentParser.cc + LUPI_statusMessageReporting.cc + LUPI_times.cc + LUPI_file.cc + MCGIDI_delayedNeutron.cc + MCGIDI_domainHash.cc + MCGIDI_string.cc + MCGIDI_functions.cc + MCGIDI_settings.cc + MCGIDI_heatedCrossSections.cc + MCGIDI_nuclideGammaBranching.cc MCGIDI_product.cc - MCGIDI_quantitiesLookupMode.cc + MCGIDI_distributions.cc + MCGIDI_URR.cc + MCGIDI_outputChannel.cc + MCGIDI_misc.cc + MCGIDI_protare.cc + MCGIDI_GRIN.cc MCGIDI_reaction.cc + MCGIDI_protareTNSL.cc + MCGIDI_protareComposite.cc MCGIDI_sampling.cc - MCGIDI_samplingSettings.cc - MCGIDI_target.cc - MCGIDI_target_heated.cc - MCGIDI_uncorrelated.cc - MCGIDI_version.cc - PoPs.cc - PoPs_Bcast.cc - PoPs_data.cc - PoPs_mass.cc - lPoPs.cc - nf_GnG_adaptiveQuadrature.cc - nf_Legendre.cc - nf_Legendre_GaussianQuadrature.cc - nf_angularMomentumCoupling.cc - nf_exponentialIntegral.cc - nf_gammaFunctions.cc - nf_incompleteGammaFunctions.cc - nf_polevl.cc - nf_stringToDoubles.cc - nf_stringToDoubles_main.cc - nf_utilities.cc - ptwXY_binaryOperators.cc - ptwXY_convenient.cc - ptwXY_core.cc - ptwXY_functions.cc - ptwXY_integration.cc - ptwXY_interpolation.cc - ptwXY_methods.cc - ptwXY_misc.cc - ptwXY_unitaryOperators.cc - ptwX_core.cc - ptwX_misc.cc - statusMessageReporting.cc - xDataTOM.cc - xDataTOM_KalbachMann.cc - xDataTOM_LegendreSeries.cc - xDataTOM_Misc.cc - xDataTOM_V_W_XYs.cc - xDataTOM_V_W_XYs_LegendreSeries.cc - xDataTOM_W_XYs.cc - xDataTOM_W_XYs_LegendreSeries.cc - xDataTOM_XYs.cc - xDataTOM_axes.cc - xDataTOM_importXML.cc - xDataTOM_importXML_KalbachMann.cc - xDataTOM_importXML_V_W_XYs.cc - xDataTOM_importXML_V_W_XYs_LegendreSeries.cc - xDataTOM_importXML_W_XYs.cc - xDataTOM_importXML_W_XYs_LegendreSeries.cc - xDataTOM_importXML_XYs.cc - xDataTOM_importXML_axes.cc - xDataTOM_importXML_polynomial.cc - xDataTOM_importXML_regionsW_XYs_LegendreSeries.cc - xDataTOM_importXML_regionsXYs.cc - xDataTOM_interpolation.cc - xDataTOM_polynomial.cc - xDataTOM_regionsW_XYs_LegendreSeries.cc - xDataTOM_regionsXYs.cc) + PoPI_alias.cc + PoPI_base.cc + PoPI_intId.cc + PoPI_isotope.cc + PoPI_misc.cc + PoPI_nucleus.cc + PoPI_nuclide.cc + PoPI_nuclideGammaBranching.cc + PoPI_pq_suite.cc + PoPI_decayData.cc + PoPI_baryon.cc + PoPI_chemicalElement.cc + PoPI_database.cc + PoPI_gaugeBoson.cc + PoPI_lepton.cc + PoPI_particle.cc + PoPI_physicalQuantity.cc + PoPI_unorthodox.cc + RISI_read.cc) geant4_module_link_libraries(G4had_lend PUBLIC @@ -159,7 +227,6 @@ geant4_module_link_libraries(G4had_lend G4hadronic_xsect G4materials G4partman - ${G4EXPAT_LIBRARIES} # Almost certainly private, but needs checking PRIVATE G4baryons G4bosons @@ -167,4 +234,3 @@ geant4_module_link_libraries(G4had_lend G4hadronic_util G4heprandom G4ions) - diff --git a/source/processes/hadronic/models/lend/src/G4GIDI.cc b/source/processes/hadronic/models/lend/src/G4GIDI.cc index 68851695ba..be184f2886 100644 --- a/source/processes/hadronic/models/lend/src/G4GIDI.cc +++ b/source/processes/hadronic/models/lend/src/G4GIDI.cc @@ -24,341 +24,466 @@ // ******************************************************************** // -#include +#include -#include "G4GIDI.hh" +PoPI::Database G4GIDI_pops; +static bool G4GIDI_pops_initialized = false; -using namespace std; -using namespace GIDI; +/* *********************************************************************************************************//** + * Returns the familiar name for the projectile for *a_ip*. + * + * @param a_ip [in] One of the following ids for the projectile (0:photon, 1:neutron, 2:proton, 3:deutron, 4:triton, 5:helion or 6:alpha). + ***********************************************************************************************************/ -/* -*************************************************************** -*/ -G4GIDI::G4GIDI( G4int ip, const string &dataDirectory ) { +static std::string projectileStringFromID( int a_ip ) { - init( ip ); - addDataDirectory( dataDirectory ); -} -/* -*************************************************************** -*/ -G4GIDI::G4GIDI( G4int ip, list &dataDirectoryList ) { - - init( ip ); - for( auto iter = dataDirectoryList.begin( ); iter != dataDirectoryList.end( ); ++iter ) - addDataDirectory( *iter ); -} -/* -*************************************************************** -*/ -G4GIDI::~G4GIDI( void ) { - - G4GIDI_target *target; - auto iter = dataDirectories.cbegin(); - - while( targets.size( ) > 0 ) { - target = targets.back( ); - targets.pop_back( ); - delete target; - } // Loop checking, 11.06.2015, T. Koi - - while( iter != dataDirectories.cend() ) { - delete *iter; - dataDirectories.pop_front( ); - }// Loop checking, 11.06.2015, T. Koi -} -/* -*************************************************************** -*/ -G4int G4GIDI::init( G4int ip ) { - - projectileID = ip; - if( ip == 0 ) { - projectile = string( "g" ); } - else if( ip == 1 ) { - projectile = string( "n" ); } - else if( ip == 2 ) { - projectile = string( "p" ); } - else if( ip == 3 ) { - projectile = string( "d" ); } - else if( ip == 4 ) { - projectile = string( "t" ); } - else if( ip == 5 ) { - projectile = string( "h" ); } - else if( ip == 6 ) { - projectile = string( "a" ); } - else { - printf( "Invalid projectile ID = %d\n", ip ); - throw 1; - } - return( 0 ); -} -/* -*************************************************************** -*/ -G4int G4GIDI::numberOfDataDirectories( void ) { - - return (G4int)dataDirectories.size( ); -} -/* -*************************************************************** -*/ -G4int G4GIDI::addDataDirectory( const string &dataDirectory ) { - - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter ) { - if( (*iter)->path( ) == dataDirectory ) return( 0 ); - } - - G4GIDI_map *map = new G4GIDI_map( dataDirectory ); - dataDirectories.push_back( map ); - - return( 0 ); -} -/* -*************************************************************** -*/ -G4int G4GIDI::removeDataDirectory( const string &dataDirectory ) { - - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter ) { - if( dataDirectory == (*iter)->path( ) ) { - - } - } - return( 0 ); -} -/* -*************************************************************** -*/ -string G4GIDI::getDataDirectoryAtIndex( G4int index ) { - - unsigned i = (unsigned) index; - - if( index >= 0 ) { - if( i >= dataDirectories.size( ) ) return( "" ); - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter, --index ) - if( index == 0 ) return( (*iter)->fileName( ) ); + switch( a_ip ) { + case 0: + return( PoPI::IDs::photon ); + case 1: + return( PoPI::IDs::neutron ); + case 2: + return( PoPI::IDs::proton ); + case 3: + return( PoPI::IDs::familiarDeuteron ); + case 4: + return( PoPI::IDs::familiarTriton ); + case 5: + return( PoPI::IDs::familiarHelion ); + case 6: + return( PoPI::IDs::familiarAlpha ); + default: + throw LUPI::Exception( "Invalid projectile id " + std::to_string( a_ip ) ); } return( "" ); } -/* -*************************************************************** -*/ -vector *G4GIDI::getDataDirectories( void ) { - std::size_t i = 0; - vector *v = new vector( numberOfDataDirectories( ) ); +/* *********************************************************************************************************//** + * Initialize the G4GIDI stuff. + ***********************************************************************************************************/ - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter, ++i ) - (*v)[i] = string( (*iter)->fileName( ) ); - return( v ); +void G4GIDI_initialize( std::string const &a_dataPath ) { + + if( G4GIDI_pops_initialized ) return; + + G4GIDI_pops_initialized = true; + G4GIDI_pops.addFile( a_dataPath + "/" + "pops.xml", false ); + G4GIDI_pops.addFile( a_dataPath + "/" + "metastables_alias.xml", false ); } -/* -*************************************************************** -*/ -G4bool G4GIDI::isThisDataAvailable( const string &lib_name, G4int iZ, G4int iA, G4int iM ) { - G4bool b; - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ); +/*! \class G4GIDI + * A class to store map files for a particular projectile. + */ - if( targetName == nullptr ) return( false ); - string targetSymbol( targetName ); - b = isThisDataAvailable( lib_name, targetSymbol ); - smr_freeMemory( (void **) &targetName ); - return( b ); +/* *********************************************************************************************************//** + * @param a_ip [in] One of the following ids for the projectile (0:photon, 1:neutron, 2:proton, 3:deutron, 4:triton, 5:helion or 6:alpha). + * @param a_dataDirectory [in] A path to a map file to load. + ***********************************************************************************************************/ + +G4GIDI::G4GIDI( int a_ip, std::string const &a_dataDirectory ) : + m_projectileIP( a_ip ), + m_projectile( projectileStringFromID( a_ip ) ) { + + addDataDirectory( a_dataDirectory ); } -/* -*************************************************************** -*/ -G4bool G4GIDI::isThisDataAvailable( const string &lib_name, const string &targetName ) { - char *path = dataFilename( lib_name, targetName ); +/* *********************************************************************************************************//** + * + * @param a_id [in] This argument is ignored but needed for backwards compatibility. + * @param a_dataDirectories [in] A list of paths to a map files to load. + ***********************************************************************************************************/ - if( path != nullptr ) { - smr_freeMemory( (void **) &path ); - return( true ); +G4GIDI::G4GIDI( int a_ip, std::list const &a_dataDirectories ) : + m_projectileIP( a_ip ), + m_projectile( projectileStringFromID( a_ip ) ) { + + for( auto mapIter = a_dataDirectories.begin( ); mapIter != a_dataDirectories.end( ); ++mapIter ) { + addDataDirectory( *mapIter ); } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +G4GIDI::~G4GIDI( ) { + + for( auto mapIter = m_maps.begin( ); mapIter != m_maps.end( ); ++mapIter ) delete *mapIter; + for( auto protareIter = m_protares.begin( ); protareIter != m_protares.end( ); ++protareIter ) delete *protareIter; +} + +/* *********************************************************************************************************//** + * Adds the map file *a_dataDirectory* to *this*. + * + * @param a_dataDirectory [in] A path to a map file to load. + ***********************************************************************************************************/ + +int G4GIDI::addDataDirectory( std::string const &a_dataDirectory ) { + + for( auto mapIter = m_maps.begin( ); mapIter != m_maps.end( ); ++mapIter ) { + if( (*mapIter)->fileName( ) == a_dataDirectory ) return( 0 ); + } + + m_maps.push_back( new GIDI::Map::Map( a_dataDirectory, G4GIDI_pops ) ); + + return( 0 ); +} + +/* *********************************************************************************************************//** + * Removes the map file with path *a_dataDirectory* from *this*. + * + * @param a_dataDirectory [in] A path to a map file to unload. + ***********************************************************************************************************/ + +int G4GIDI::removeDataDirectory( std::string const &a_dataDirectory ) { + + std::size_t index = 0; + + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter, ++index ) { + if( a_dataDirectory == (*mapIter)->fileName( ) ) { + delete *mapIter; + + ++index; + for( ; index < m_maps.size( ); ++index ) m_maps[index-1] = m_maps[index]; + m_maps[index-1] = nullptr; + m_maps.resize( m_maps.size( ) - 1 ); + } + } + + return( 0 ); +} + +/* *********************************************************************************************************//** + * Removes the map file with path *a_dataDirectory* from *this*. + * + * @param a_dataDirectory [in] A path to a map file to unload. + ***********************************************************************************************************/ + +std::string const G4GIDI::getDataDirectoryAtIndex( int a_index ) const { + + std::string nullString; + + if( ( a_index < 0 ) || ( a_index >= static_cast( m_maps.size( ) ) ) ) return( nullString ); + + return( m_maps[a_index]->fileName( ) ); +} + +/* *********************************************************************************************************//** + * Returns a list of paths to all loaded map files. + * + * @return Returns a pointer that the user owns (i.e., the user is responsible for free-ing). + ***********************************************************************************************************/ + +std::vector *G4GIDI::getDataDirectories( ) const { + + std::vector *list = new std::vector( ); + + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter ) { + list->push_back( (*mapIter)->fileName( ) ); + } + + return( list ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the specified target exists in a map file and **false** otherwise. + * + * @param a_lib_name [in] The evaluation. Call be an empty string. + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return Boolean value. + ***********************************************************************************************************/ + +bool G4GIDI::isThisDataAvailable( std::string const &a_lib_name, int a_Z, int a_A, int a_M ) const { + + return( isThisDataAvailable( a_lib_name, G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ) ) ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the specified target exists in a map file and **false** otherwise. + * + * @param a_lib_name [in] The evaluation. Call be an empty string. + * @param a_targetName [in] The target PoPs id. + * + * @return Boolean value. + ***********************************************************************************************************/ + +bool G4GIDI::isThisDataAvailable( std::string const &a_lib_name, std::string const &a_targetName ) const { + + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter ) { + if( (*mapIter)->isProtareAvailable( m_projectile, a_targetName, "", a_lib_name ) ) return( true ); + } + return( false ); } -/* -*************************************************************** -*/ -char *G4GIDI::dataFilename( const string &lib_name, G4int iZ, G4int iA, G4int iM ) { - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ), *fileName; +/* *********************************************************************************************************//** + * Returns the file path to the specified target or **nullptr** if the target does not exists. + * + * @param a_lib_name [in] The evaluation. Call be an empty string. + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return A std::string of the protare's path. + ***********************************************************************************************************/ - if( targetName == nullptr ) return( nullptr ); - string targetSymbol( targetName ); - fileName = dataFilename( lib_name, targetSymbol ); - smr_freeMemory( (void **) &targetName ); - return( fileName ); +std::string G4GIDI::dataFilename( std::string const &a_lib_name, int a_Z, int a_A, int a_M ) const { + + return( dataFilename( a_lib_name, G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ) ) ); } -/* -*************************************************************** -*/ -char *G4GIDI::dataFilename( const string &lib_name, const string &targetSymbol ) { - char *path; +/* *********************************************************************************************************//** + * Returns the file path to the specified target or **nullptr** if the target does not exists. + * + * @param a_lib_name [in] The evaluation. Call be an empty string. + * @param a_targetName [in] The target PoPs id. + * + * @return Boolean value. + ***********************************************************************************************************/ - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter ) - if( ( path = MCGIDI_map_findTarget( nullptr, (*iter)->map, lib_name.c_str(), projectile.c_str( ), targetSymbol.c_str( ) ) ) != nullptr ) - return( path ); +std::string G4GIDI::dataFilename( std::string const &a_lib_name, std::string const &a_targetName ) const { - return( nullptr ); -} -/* -*************************************************************** -*/ -vector *G4GIDI::getNamesOfAvailableLibraries( G4int iZ, G4int iA, G4int iM ) { - - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ); - vector *listOfLibraries; - - if( targetName == nullptr ) return( new vector( ) ); - string targetSymbol( targetName ); - listOfLibraries = getNamesOfAvailableLibraries( targetSymbol ); - smr_freeMemory( (void **) &targetName ); - return( listOfLibraries ); -} -/* -*************************************************************** -*/ -vector *G4GIDI::getNamesOfAvailableLibraries( const string &targetName ) { - - vector *listOfLibraries = new vector( ); - - MCGIDI_map *map; - MCGIDI_mapEntry *entry; - - for( auto iter = dataDirectories.cbegin( ); iter != dataDirectories.cend( ); ++iter ) { - map = MCGIDI_map_findAllOfTarget( &((*iter)->smr), (*iter)->map, projectile.c_str( ), targetName.c_str( ) ); - for( entry = MCGIDI_map_getFirstEntry( map ); entry != nullptr; entry = MCGIDI_map_getNextEntry( entry ) ) { - listOfLibraries->push_back( entry->evaluation ); - } - MCGIDI_map_free( nullptr, map ); + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter ) { + std::string path = (*mapIter)->protareFilename( m_projectile, a_targetName, "", a_lib_name ); + if( path != "" ) return( path ); } - return( listOfLibraries ); + + return( "" ); } -/* -*************************************************************** -*/ -vector *G4GIDI::getNamesOfAvailableTargets( void ) { - vector *listOfTargets; +/* *********************************************************************************************************//** + * Determines target name from *a_Z*, *a_A* and *a_M* and calls **getNamesOfAvailableLibraries** with target's name, and returns + * its return value. + * + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return Pointer to vector. + ***********************************************************************************************************/ - listOfTargets = new vector( ); - if( listOfTargets == nullptr ) return( nullptr ); - for( auto iter_map = dataDirectories.cbegin( ); iter_map != dataDirectories.cend( ); ++iter_map ) { - if( MCGIDI_map_walkTree( nullptr, (*iter_map)->map, getNamesOfAvailableTargets_walker, (void *) listOfTargets ) != 0 ) { - delete listOfTargets; - return( nullptr ); +std::vector *G4GIDI::getNamesOfAvailableLibraries( G4int a_Z, G4int a_A, G4int a_M ) const { + + return( getNamesOfAvailableLibraries( G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ) ) ); +} + +/* *********************************************************************************************************//** + * Returns the list of all evaluations that have a target named *a_targetName*. User is responsible for freeing the returned list. + * + * @return Pointer to vector. + ***********************************************************************************************************/ + +std::vector *G4GIDI::getNamesOfAvailableLibraries( std::string const &a_targetName ) const { + + std::vector *listOfLibraries = new std::vector( ); + + for( auto mapIter = m_maps.cbegin( ); mapIter != m_maps.cend( ); ++mapIter ) { + std::vector entries; + (*mapIter)->findProtareEntries( entries, std::regex( m_projectile ), std::regex( a_targetName ) ); + for( auto entryIter = entries.begin( ); entryIter != entries.end( ); ++entryIter ) { + listOfLibraries->push_back( (*entryIter)->evaluation( ) ); } } - return( listOfTargets ); + + return( listOfLibraries ); } -/* -*************************************************************** -*/ -G4GIDI_target *G4GIDI::readTarget( const string &lib_name, G4int iZ, G4int iA, G4int iM, G4bool bind ) { - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ); - G4GIDI_target *target; +/* *********************************************************************************************************//** + * Returns the list of available targets for *this*. + * + * @return Returns a pointer that the user owns (i.e., the user is responsible for free-ing). + ***********************************************************************************************************/ - if( targetName == nullptr ) return( nullptr ); - string targetSymbol( targetName ); - target = readTarget( lib_name, targetSymbol, bind ); - smr_freeMemory( (void **) &targetName ); - return( target ); -} -/* -*************************************************************** -*/ -G4GIDI_target *G4GIDI::readTarget( const string &lib_name, const string &targetName, G4bool bind ) { +std::vector *G4GIDI::getNamesOfAvailableTargets( ) const { - for( auto iter_targets = targets.cbegin( ); iter_targets != targets.cend( ); ++iter_targets ) { - if( (*iter_targets)->name == targetName ) return( nullptr ); + std::vector *list = new std::vector( ); + std::set targetIDs; + + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter ) { + auto protareBases = (*mapIter)->directory( m_projectile ); + + for( auto protareBaseIter = protareBases.begin( ); protareBaseIter != protareBases.end( ); ++protareBaseIter ) { + targetIDs.insert( (*protareBaseIter)->targetID( ) ); + } } - char *path = dataFilename( lib_name, targetName ); - if( path == nullptr ) return( nullptr ); - G4GIDI_target *target = new G4GIDI_target( path ); - if( bind ) targets.push_back( target ); - smr_freeMemory( (void **) &path ); - return( target ); -} -/* -*************************************************************** -*/ -G4GIDI_target *G4GIDI::getAlreadyReadTarget( G4int iZ, G4int iA, G4int iM ) { - - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ); - G4GIDI_target *target; - - if( targetName == nullptr ) return( nullptr ); - string targetSymbol( targetName ); - target = getAlreadyReadTarget( targetSymbol ); - smr_freeMemory( (void **) &targetName ); - return( target ); -} -/* -*************************************************************** -*/ -G4GIDI_target *G4GIDI::getAlreadyReadTarget( const string &targetSymbol ) { - - for( auto iter_targets = targets.cbegin( ); iter_targets != targets.cend( ); ++iter_targets ) { - if( ( (*iter_targets)->name == targetSymbol ) ) return( *iter_targets ); + for( auto targetIter = targetIDs.begin( ); targetIter != targetIDs.end( ); ++targetIter ) { + (*list).push_back( (*targetIter) ); } + + return( list ); +} + +/* *********************************************************************************************************//** + * Returns the specified target or **nullptr** if the target does not exists. + * + * @param a_lib_name [in] The evaluation. Call be an empty string. + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return Boolean value. + ***********************************************************************************************************/ + +G4GIDI_target *G4GIDI::readTarget( std::string const &a_lib_name, int a_Z, int a_A, int a_M, bool bind ) { + + return( readTarget( a_lib_name, G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ), bind ) ); +} + +/* *********************************************************************************************************//** + * Returns the protare specified by *a_targetName* and the projectile for *this*. + * + * @param a_lib_name [in] The evaluation. Call be an empty std::string. + * @param a_targetName [in] The target PoPs id. + * @param a_bind [in] If *true*, read target is added to member *m_protares*. + * + * @return Boolean value. + ***********************************************************************************************************/ + +G4GIDI_target *G4GIDI::readTarget( std::string const &a_lib_name, std::string const &a_targetName, bool a_bind ) { + + for( auto iter_protare = m_protares.cbegin( ); iter_protare != m_protares.cend( ); ++iter_protare ) { + if( *(*iter_protare)->getName( ) == a_targetName ) return( nullptr ); + } + + GIDI::Construction::Settings construction( GIDI::Construction::ParseMode::all, GIDI::Construction::PhotoMode::nuclearOnly ); + construction.setGRIN_continuumGammas( true ); + + for( auto mapIter = m_maps.begin( ); mapIter!= m_maps.end( ); ++mapIter ) { + GIDI::Protare *GIDI_protare = (*mapIter)->protare( construction, G4GIDI_pops, m_projectile, a_targetName, "", a_lib_name ); + if( GIDI_protare != nullptr ) { + LUPI::StatusMessageReporting smr; + GIDI::Styles::TemperatureInfos temperatures = GIDI_protare->temperatures( ); + std::string label( temperatures[0].griddedCrossSection( ) ); + MCGIDI::Transporting::MC MC( G4GIDI_pops, m_projectile, &GIDI_protare->styles( ), label, GIDI::Transporting::DelayedNeutrons::off, 20 ); // FIXME: 20 + MC.setThrowOnError( false ); + MC.setSampleNonTransportingParticles( true ); + MCGIDI::DomainHash domainHash( 4000, 1e-8, 10 ); + std::set reactionsToExclude; + + GIDI::Transporting::Particles particles; + GIDI::Transporting::Particle neutron( PoPI::IDs::neutron ); + particles.add( neutron ); + + GIDI::Styles::TemperatureInfos temperatures1; + temperatures1.push_back( temperatures[0] ); + MCGIDI::Protare *MCGIDI_protare = MCGIDI::protareFromGIDIProtare( smr, *GIDI_protare, G4GIDI_pops, MC, particles, domainHash, + temperatures1, reactionsToExclude ); + if( !smr.isOk( ) ) throw LUPI::Exception( smr.constructFullMessage( "G4GIDI::readTarget:" ) ); + + G4GIDI_target *protare = new G4GIDI_target( G4GIDI_pops, domainHash, *GIDI_protare, MCGIDI_protare ); + delete GIDI_protare; + if( a_bind ) m_protares.push_back( protare ); + return( protare ); + } + } + return( nullptr ); } -/* -*************************************************************** -*/ -G4int G4GIDI::freeTarget( G4GIDI_target *target ) { - for( auto iter_targets = targets.cbegin( ); iter_targets != targets.cend( ); ++iter_targets ) { - if( *iter_targets == target ) { - targets.erase( iter_targets ); - delete target; +/* *********************************************************************************************************//** + * Determines target name from *a_Z*, *a_A* and *a_M* and calls **getAlreadyReadTarget** with target's name, and returns + * its return value. + * + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return Pointer to an **G4GIDI_target** instance of **nullptr**. + ***********************************************************************************************************/ + +G4GIDI_target *G4GIDI::getAlreadyReadTarget( G4int a_Z, G4int a_A, G4int a_M ) { + + return( getAlreadyReadTarget( G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ) ) ); +} + +/* *********************************************************************************************************//** + * Returns the pointer to the **G4GIDI_target** with name *a_targetName* in member *m_protares* or **nullptr** if one + * does not exists in *m_protares*. + * + * @param a_targetName [in] The name of the target. + * + * @return Pointer to an **G4GIDI_target** instance of **nullptr**. + ***********************************************************************************************************/ + +G4GIDI_target *G4GIDI::getAlreadyReadTarget( std::string const &a_targetName ) { + + for( auto iter_protare = m_protares.cbegin( ); iter_protare != m_protares.cend( ); ++iter_protare ) { + if( *(*iter_protare)->getName( ) == a_targetName ) return( *iter_protare ); + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * If *a_target* is in member *m_protares*, removed it from *m_protares*, delete it and return 0. Otherwise, + * do nothing and return 1. + * + * @param a_target [in] The evaluation. Call be an empty std::string. + * + * @return Integer value. + ***********************************************************************************************************/ + +G4int G4GIDI::freeTarget( G4GIDI_target *a_target ) { + + for( auto iter_protare = m_protares.cbegin( ); iter_protare != m_protares.cend( ); ++iter_protare ) { + if( *iter_protare == a_target ) { + m_protares.erase( iter_protare ); + delete a_target; return( 0 ); } } return( 1 ); } -/* -*************************************************************** -*/ -G4int G4GIDI::freeTarget( G4int iZ, G4int iA, G4int iM ) { - G4int status; - char *targetName = G4GIDI_Misc_Z_A_m_ToName( iZ, iA, iM ); +/* *********************************************************************************************************//** + * Determines target name from *a_Z*, *a_A* and *a_M* and calls **freeTarget** with target's name, and returns + * its return value. + * + * @param a_Z [in] The atomic number of the target. + * @param a_A [in] The mass number of the taret. + * @param a_M [in] The meta-stable index of the target. + * + * @return Integer value. + ***********************************************************************************************************/ - if( targetName == nullptr ) return( 1 ); - string targetSymbol( targetName ); - status = freeTarget( targetSymbol ); - smr_freeMemory( (void **) &targetName ); - return( status ); +G4int G4GIDI::freeTarget( G4int a_Z, G4int a_A, G4int a_M ) { + + return( freeTarget( G4GIDI_Misc_Z_A_m_ToName( a_Z, a_A, a_M ) ) ); } -/* -*************************************************************** -*/ -G4int G4GIDI::freeTarget( const string &targetSymbol ) { - for( auto iter_targets = targets.cbegin( ); iter_targets != targets.cend( ); ++iter_targets ) { - if( (*iter_targets)->name == targetSymbol ) return( freeTarget( *iter_targets ) ); +/* *********************************************************************************************************//** + * If target with name *targetSymbol* is in member *m_protares*, call **freeTarget** with target's pointer and return **freeTarget**'s return value. + * Otherwise, return 1. + * + * @return Integer value. + ***********************************************************************************************************/ + +G4int G4GIDI::freeTarget( std::string const &targetSymbol ) { + + for( auto iter_protare = m_protares.cbegin( ); iter_protare != m_protares.cend( ); ++iter_protare ) { + if( *(*iter_protare)->getName( ) == targetSymbol ) return( freeTarget( *iter_protare ) ); } return( 1 ); } -/* -*************************************************************** -*/ -vector *G4GIDI::getListOfReadTargetsNames( void ) { - vector *listOfTargets; +/* *********************************************************************************************************//** + * If target with name *targetSymbol* is in member *m_protares*, call **freeTarget** with target's pointer and return **freeTarget**'s return value. + * Otherwise, return 1. + * + * @return Integer value. + ***********************************************************************************************************/ - listOfTargets = new vector( ); - if( listOfTargets == nullptr ) return( nullptr ); - for( auto iter_targets = targets.cbegin( ); iter_targets != targets.cend( ); ++iter_targets ) { - listOfTargets->push_back( *(*iter_targets)->getName( ) ); +std::vector *G4GIDI::getListOfReadTargetsNames( void ) { + + std::vector *listOfTargets = new std::vector( ); + + for( auto iter_protare = m_protares.cbegin( ); iter_protare != m_protares.cend( ); ++iter_protare ) { + listOfTargets->push_back( *(*iter_protare)->getName( ) ); } + return( listOfTargets ); } diff --git a/source/processes/hadronic/models/lend/src/G4GIDI_Misc.cc b/source/processes/hadronic/models/lend/src/G4GIDI_Misc.cc deleted file mode 100644 index f10faa0816..0000000000 --- a/source/processes/hadronic/models/lend/src/G4GIDI_Misc.cc +++ /dev/null @@ -1,110 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -/* -# <> -# <> -*/ -#include -#include -#include -#include -#include -#include -#include -#include "G4GIDI_Misc.hh" -using namespace std; -using namespace GIDI; - -/* -*************************************************************** -*/ -char *G4GIDI_Misc_Z_A_m_ToName( int iZ, int iA, int im ) { - - const char *Z = MCGIDI_misc_ZToSymbol( iZ ); - char S[128], mS[32], *name; - - if( Z == NULL ) return( NULL ); - if( iA == 0 ) { - if( im != 0 ) return( NULL ); - snprintf( S, sizeof S, "%s_natural", Z ); } - else { - snprintf( S, sizeof S, "%s%d", Z, iA ); - if( im != 0 ) { - //snprintf( mS, sizeof mS, "_m%d", im ); - //TK 170509 - //Fix inconsistency of name of excited isomer between data and code - snprintf( mS, sizeof mS, "m%d", im ); - strcat( S, mS ); - } - } - name = (char *) smr_malloc2( NULL, strlen( S ) + 1, 0, "name" ); - if( name != NULL ) strcpy( name, S ); - return( name ); -} -/* -*************************************************************** -*/ -char *G4GIDI_Misc_channelCompound( char *particle1, char *particle2 ) { - - int Z1, A1, m1, Z2, A2, m2, level1, level2; - - if( MCGIDI_miscNameToZAm( NULL, particle1, &Z1, &A1, &m1, &level1 ) ) return( NULL ); - if( MCGIDI_miscNameToZAm( NULL, particle2, &Z2, &A2, &m2, &level2 ) ) return( NULL ); - if( A1 == 0 ) A2 = 0; - if( A2 == 0 ) A1 = 0; - return( G4GIDI_Misc_Z_A_m_ToName( Z1 + Z2, A1 + A2, 0 ) ); -} -#if 0 -/* -*************************************************************** -*/ -int G4GIDI_Misc_channelProductsCompare( tpia_channel *channel, int nProducts, char **productNames ) { - - int i; - tpia_product *product; - - if( channel->decayChannel.numberOfProducts != nProducts ) return( 0 ); - for( product = tpia_channel_getFirstProduct( channel ), i = 0; product != NULL; product = tpia_decayChannel_getNextProduct( product ), i++ ) { - if( strcmp( product->productID->name, productNames[i] ) ) return( 0 ); - } - return( 1 ); -} -#endif -/* -*************************************************************** -*/ -int getNamesOfAvailableTargets_walker( MCGIDI_mapEntry *entry, int /*level*/, void *userData ) { - - vector *listOfTargets = (vector *) userData; - vector::iterator iter; - - if( entry->type != MCGIDI_mapEntry_type_target ) return( 0 ); - for( iter = listOfTargets->begin( ); iter != listOfTargets->end( ); iter++ ) { - if( entry->targetName == iter->c_str( ) ) return( 0 ); - } - listOfTargets->push_back( entry->targetName ); - return( 0 ); -} diff --git a/source/processes/hadronic/models/lend/src/G4GIDI_mass.cc b/source/processes/hadronic/models/lend/src/G4GIDI_mass.cc deleted file mode 100644 index 2c47696e4c..0000000000 --- a/source/processes/hadronic/models/lend/src/G4GIDI_mass.cc +++ /dev/null @@ -1,900 +0,0 @@ -// -// ******************************************************************** -// * License and Disclaimer * -// * * -// * The Geant4 software is copyright of the Copyright Holders of * -// * the Geant4 Collaboration. It is provided under the terms and * -// * conditions of the Geant4 Software License, included in the file * -// * LICENSE and available at http://cern.ch/geant4/license . These * -// * include a list of copyright holders. * -// * * -// * Neither the authors of this software system, nor their employing * -// * institutes,nor the agencies providing financial support for this * -// * work make any representation or warranty, express or implied, * -// * regarding this software system or assume any liability for its * -// * use. Please see the license in the file LICENSE and URL above * -// * for the full disclaimer and the limitation of liability. * -// * * -// * This code implementation is the result of the scientific and * -// * technical work of the GEANT4 collaboration. * -// * By using, copying, modifying or distributing the software (or * -// * any work based on the software) you agree to acknowledge its * -// * use in resulting scientific publications, and indicate your * -// * acceptance of all terms of the Geant4 Software license. * -// ******************************************************************** -// -/* -# <> -# <> -*/ -#include -#include - -/* ******** WARNGING ******* - Some of the mass sumbols at the end are bogus???????? - ******** WARNGING ******* */ - -#include "G4GIDI_mass.hh" -#include "G4GIDI_Misc.hh" - -using namespace GIDI; - -struct ZAMass { - char const *symbol; - double mass; -}; - -static struct ZAMass ZAMasses[] = { - { "n", 1.008664915740000e+00 }, { "H_natural", 1.007900000000000e+00 }, { "H1", 1.007825032070000e+00 }, { "H2", 2.014101777850000e+00 }, - { "H3", 3.016049277670000e+00 }, { "H4", 4.027806424000000e+00 }, { "H5", 5.035311488000000e+00 }, { "H6", 6.044942594000000e+00 }, - { "H7", 7.052749000000000e+00 }, { "He_natural", 4.002600000000000e+00 }, { "He3", 3.016029319140000e+00 }, { "He4", 4.002603254150000e+00 }, - { "He5", 5.012223624000000e+00 }, { "He6", 6.018889124000000e+00 }, { "He7", 7.028020618000000e+00 }, { "He8", 8.033921897000001e+00 }, - { "He9", 9.043950285999999e+00 }, { "He10", 1.005239883700000e+01 }, { "Li_natural", 6.941000000000000e+00 }, { "Li3", 3.030775000000000e+00 }, - { "Li4", 4.027185558000000e+00 }, { "Li5", 5.012537800000000e+00 }, { "Li6", 6.015122794000000e+00 }, { "Li7", 7.016004548000000e+00 }, - { "Li8", 8.022487362000000e+00 }, { "Li9", 9.026789505000000e+00 }, { "Li10", 1.003548125900000e+01 }, { "Li11", 1.104379771500000e+01 }, - { "Li12", 1.205378000000000e+01 }, { "Be_natural", 9.012180000000001e+00 }, { "Be5", 5.040790000000000e+00 }, { "Be6", 6.019726317000000e+00 }, - { "Be7", 7.016929828000000e+00 }, { "Be8", 8.005305103000000e+00 }, { "Be9", 9.012182201000000e+00 }, { "Be10", 1.001353381800000e+01 }, - { "Be11", 1.102165774900000e+01 }, { "Be12", 1.202692073700000e+01 }, { "Be13", 1.303569300700000e+01 }, { "Be14", 1.404289292000000e+01 }, - { "Be15", 1.505346000000000e+01 }, { "Be16", 1.606192000000000e+01 }, { "B_natural", 1.081000000000000e+01 }, { "B6", 6.046810000000000e+00 }, - { "B7", 7.029917901000000e+00 }, { "B8", 8.024607232999999e+00 }, { "B9", 9.013328782000000e+00 }, { "B10", 1.001293699200000e+01 }, - { "B11", 1.100930540600000e+01 }, { "B12", 1.201435210400000e+01 }, { "B13", 1.301778021700000e+01 }, { "B14", 1.402540400900000e+01 }, - { "B15", 1.503110302100000e+01 }, { "B16", 1.603980882900000e+01 }, { "B17", 1.704698990600000e+01 }, { "B18", 1.805617000000000e+01 }, - { "B19", 1.906373000000000e+01 }, { "C_natural", 1.201100000000000e+01 }, { "C8", 8.037675025000000e+00 }, { "C9", 9.031036689000000e+00 }, - { "C10", 1.001685322800000e+01 }, { "C11", 1.101143361300000e+01 }, { "C12", 1.200000000000000e+01 }, { "C13", 1.300335483778000e+01 }, - { "C14", 1.400324198870000e+01 }, { "C15", 1.501059925600000e+01 }, { "C16", 1.601470125200000e+01 }, { "C17", 1.702258611600000e+01 }, - { "C18", 1.802675935400000e+01 }, { "C19", 1.903480501800000e+01 }, { "C20", 2.004031975400000e+01 }, { "C21", 2.104934000000000e+01 }, - { "C23", 2.205720000000000e+01 }, { "N_natural", 1.400670000000000e+01 }, { "N10", 1.004165367400000e+01 }, { "N11", 1.102609095600000e+01 }, - { "N12", 1.201861319700000e+01 }, { "N13", 1.300573860900000e+01 }, { "N14", 1.400307400478000e+01 }, { "N15", 1.500010889823000e+01 }, - { "N16", 1.600610165800000e+01 }, { "N17", 1.700845026100000e+01 }, { "N18", 1.801407895900000e+01 }, { "N19", 1.901702869700000e+01 }, - { "N20", 2.002336580700000e+01 }, { "N21", 2.102710824000000e+01 }, { "N22", 2.203439493400000e+01 }, { "N23", 2.304122000000000e+01 }, - { "N24", 2.405104000000000e+01 }, { "N25", 2.506066000000000e+01 }, { "O_natural", 1.599940000000000e+01 }, { "O12", 1.203440489500000e+01 }, - { "O13", 1.302481221300000e+01 }, { "O14", 1.400859625000000e+01 }, { "O15", 1.500306561700000e+01 }, { "O16", 1.599491461956000e+01 }, - { "O17", 1.699913170300000e+01 }, { "O18", 1.799916100100000e+01 }, { "O19", 1.900358013000000e+01 }, { "O20", 2.000407674200000e+01 }, - { "O21", 2.100865588600000e+01 }, { "O22", 2.200996694700000e+01 }, { "O23", 2.301568765900000e+01 }, { "O24", 2.402047291700000e+01 }, - { "O25", 2.502946000000000e+01 }, { "O26", 2.603834000000000e+01 }, { "O27", 2.704826000000000e+01 }, { "O28", 2.805781000000000e+01 }, - { "F_natural", 1.899840300000000e+01 }, { "F14", 1.403506000000000e+01 }, { "F15", 1.501800910300000e+01 }, { "F16", 1.601146572400000e+01 }, - { "F17", 1.700209523700000e+01 }, { "F18", 1.800093795600000e+01 }, { "F19", 1.899840322400000e+01 }, { "F20", 1.999998131500000e+01 }, - { "F21", 2.099994895100000e+01 }, { "F22", 2.200299881500000e+01 }, { "F23", 2.300357463100000e+01 }, { "F24", 2.400811548500000e+01 }, - { "F25", 2.501210174700000e+01 }, { "F26", 2.601961555500000e+01 }, { "F27", 2.702676008600000e+01 }, { "F28", 2.803567000000000e+01 }, - { "F29", 2.904326000000000e+01 }, { "F30", 3.005250000000000e+01 }, { "F31", 3.106042900000000e+01 }, { "Ne_natural", 2.017900000000000e+01 }, - { "Ne16", 1.602576126200000e+01 }, { "Ne17", 1.701767150400000e+01 }, { "Ne18", 1.800570821300000e+01 }, { "Ne19", 1.900188024800000e+01 }, - { "Ne20", 1.999244017542000e+01 }, { "Ne21", 2.099384668400000e+01 }, { "Ne22", 2.199138511300000e+01 }, { "Ne23", 2.299446690400000e+01 }, - { "Ne24", 2.399361077900000e+01 }, { "Ne25", 2.499773688800000e+01 }, { "Ne26", 2.600046120600000e+01 }, { "Ne27", 2.700758990300000e+01 }, - { "Ne28", 2.801207157500000e+01 }, { "Ne29", 2.901938593300000e+01 }, { "Ne30", 3.002480104500000e+01 }, { "Ne31", 3.103311000000000e+01 }, - { "Ne32", 3.204002000000000e+01 }, { "Ne33", 3.304938000000000e+01 }, { "Ne34", 3.405702800000000e+01 }, { "Na_natural", 2.298977000000000e+01 }, - { "Na18", 1.802596900000000e+01 }, { "Na19", 1.901387749900000e+01 }, { "Na20", 2.000735132800000e+01 }, { "Na21", 2.099765520600000e+01 }, - { "Na22", 2.199443642500000e+01 }, { "Na23", 2.298976928087000e+01 }, { "Na24", 2.399096278200000e+01 }, { "Na25", 2.498995396800000e+01 }, - { "Na26", 2.599263300000000e+01 }, { "Na27", 2.699407678800000e+01 }, { "Na28", 2.799893800000000e+01 }, { "Na29", 2.900286100000000e+01 }, - { "Na30", 3.000897600000000e+01 }, { "Na31", 3.101358545200000e+01 }, { "Na32", 3.202046656000000e+01 }, { "Na33", 3.302671975600000e+01 }, - { "Na34", 3.403517000000000e+01 }, { "Na35", 3.504249300000000e+01 }, { "Na36", 3.605148000000000e+01 }, { "Na37", 3.705934000000000e+01 }, - { "Mg_natural", 2.430500000000000e+01 }, { "Mg19", 1.903547000000000e+01 }, { "Mg20", 2.001886254500000e+01 }, { "Mg21", 2.101171291000000e+01 }, - { "Mg22", 2.199957384300000e+01 }, { "Mg23", 2.299412366900000e+01 }, { "Mg24", 2.398504169900000e+01 }, { "Mg25", 2.498583691700000e+01 }, - { "Mg26", 2.598259292900000e+01 }, { "Mg27", 2.698434058500000e+01 }, { "Mg28", 2.798387682500000e+01 }, { "Mg29", 2.898860000000000e+01 }, - { "Mg30", 2.999043400000000e+01 }, { "Mg31", 3.099654600000000e+01 }, { "Mg32", 3.199897500000000e+01 }, { "Mg33", 3.300525400000000e+01 }, - { "Mg34", 3.400945642400000e+01 }, { "Mg35", 3.501734000000000e+01 }, { "Mg36", 3.602300000000000e+01 }, { "Mg37", 3.703140000000000e+01 }, - { "Mg38", 3.803757000000000e+01 }, { "Mg39", 3.904677200000000e+01 }, { "Mg40", 4.005393000000000e+01 }, { "Al_natural", 2.698154000000000e+01 }, - { "Al21", 2.102804000000000e+01 }, { "Al22", 2.201952000000000e+01 }, { "Al23", 2.300726743200000e+01 }, { "Al24", 2.399993886500000e+01 }, - { "Al25", 2.499042809500000e+01 }, { "Al26", 2.598689169200000e+01 }, { "Al27", 2.698153862700000e+01 }, { "Al28", 2.798191030600000e+01 }, - { "Al29", 2.898044504600000e+01 }, { "Al30", 2.998296025600000e+01 }, { "Al31", 3.098394661900000e+01 }, { "Al32", 3.198812448900000e+01 }, - { "Al33", 3.299084333600000e+01 }, { "Al34", 3.399685183700000e+01 }, { "Al35", 3.499986023500000e+01 }, { "Al36", 3.600620720400000e+01 }, - { "Al37", 3.701067782000000e+01 }, { "Al38", 3.801723102100000e+01 }, { "Al39", 3.902297000000000e+01 }, { "Al40", 4.003145000000000e+01 }, - { "Al41", 4.103833000000000e+01 }, { "Al42", 4.204689000000000e+01 }, { "Si_natural", 2.808550000000000e+01 }, { "Si22", 2.203453000000000e+01 }, - { "Si23", 2.302552000000000e+01 }, { "Si24", 2.401154561600000e+01 }, { "Si25", 2.500410557400000e+01 }, { "Si26", 2.599232992100000e+01 }, - { "Si27", 2.698670490500000e+01 }, { "Si28", 2.797692653246000e+01 }, { "Si29", 2.897649470000000e+01 }, { "Si30", 2.997377017100000e+01 }, - { "Si31", 3.097536322700000e+01 }, { "Si32", 3.197414808200000e+01 }, { "Si33", 3.297800022000000e+01 }, { "Si34", 3.397857552400000e+01 }, - { "Si35", 3.498458357500000e+01 }, { "Si36", 3.598659947700000e+01 }, { "Si37", 3.699293608000000e+01 }, { "Si38", 3.799563360100000e+01 }, - { "Si39", 3.900207001300000e+01 }, { "Si40", 4.000586912100000e+01 }, { "Si41", 4.101456000000000e+01 }, { "Si42", 4.201979000000000e+01 }, - { "Si43", 4.302866000000000e+01 }, { "Si44", 4.403526000000000e+01 }, { "P_natural", 3.097376000000000e+01 }, { "P24", 2.403435000000000e+01 }, - { "P25", 2.502026000000000e+01 }, { "P26", 2.601178000000000e+01 }, { "P27", 2.699923023600000e+01 }, { "P28", 2.799231476100000e+01 }, - { "P29", 2.898180060600000e+01 }, { "P30", 2.997831378900000e+01 }, { "P31", 3.097376162900000e+01 }, { "P32", 3.197390727400000e+01 }, - { "P33", 3.297172554300000e+01 }, { "P34", 3.397363625700000e+01 }, { "P35", 3.497331411700000e+01 }, { "P36", 3.597825968000000e+01 }, - { "P37", 3.697960894600000e+01 }, { "P38", 3.798415682700000e+01 }, { "P39", 3.898617947500000e+01 }, { "P40", 3.999129695100000e+01 }, - { "P41", 4.099433543500000e+01 }, { "P42", 4.200100791300000e+01 }, { "P43", 4.300619000000000e+01 }, { "P44", 4.401299000000000e+01 }, - { "P45", 4.501922000000000e+01 }, { "P46", 4.602738000000000e+01 }, { "S_natural", 3.206000000000000e+01 }, { "S26", 2.602788000000000e+01 }, - { "S27", 2.701883300000000e+01 }, { "S28", 2.800437276300000e+01 }, { "S29", 2.899660804900000e+01 }, { "S30", 2.998490324900000e+01 }, - { "S31", 3.097955472800000e+01 }, { "S32", 3.197207099900000e+01 }, { "S33", 3.297145875900000e+01 }, { "S34", 3.396786690200000e+01 }, - { "S35", 3.496903216100000e+01 }, { "S36", 3.596708076000000e+01 }, { "S37", 3.697112556700000e+01 }, { "S38", 3.797116331700000e+01 }, - { "S39", 3.897513430600000e+01 }, { "S40", 3.997545172800000e+01 }, { "S41", 4.097958214900000e+01 }, { "S42", 4.198102241900000e+01 }, - { "S43", 4.298715479000000e+01 }, { "S44", 4.399021339000000e+01 }, { "S45", 4.499650811200000e+01 }, { "S46", 4.600075000000000e+01 }, - { "S47", 4.700859000000000e+01 }, { "S48", 4.801417000000000e+01 }, { "S49", 4.902361900000000e+01 }, { "Cl_natural", 3.545300000000000e+01 }, - { "Cl28", 2.802851000000000e+01 }, { "Cl29", 2.901411000000000e+01 }, { "Cl30", 3.000477000000000e+01 }, { "Cl31", 3.099241308600000e+01 }, - { "Cl32", 3.198568990100000e+01 }, { "Cl33", 3.297745188700000e+01 }, { "Cl34", 3.397376281900000e+01 }, { "Cl35", 3.496885268200000e+01 }, - { "Cl36", 3.596830698100000e+01 }, { "Cl37", 3.696590259100000e+01 }, { "Cl38", 3.796801042500000e+01 }, { "Cl39", 3.896800816400000e+01 }, - { "Cl40", 3.997041547200000e+01 }, { "Cl41", 4.097068452500000e+01 }, { "Cl42", 4.197325480400000e+01 }, { "Cl43", 4.297405440300000e+01 }, - { "Cl44", 4.397828107100000e+01 }, { "Cl45", 4.498028688600000e+01 }, { "Cl46", 4.598421004000000e+01 }, { "Cl47", 4.698871000000000e+01 }, - { "Cl48", 4.799495000000000e+01 }, { "Cl49", 4.900032000000000e+01 }, { "Cl50", 5.000784000000000e+01 }, { "Cl51", 5.101449000000000e+01 }, - { "Ar_natural", 3.994800000000000e+01 }, { "Ar30", 3.002156000000000e+01 }, { "Ar31", 3.101212300000000e+01 }, { "Ar32", 3.199763798400000e+01 }, - { "Ar33", 3.298992570900000e+01 }, { "Ar34", 3.398027124400000e+01 }, { "Ar35", 3.497525758500000e+01 }, { "Ar36", 3.596754510500000e+01 }, - { "Ar37", 3.696677632000000e+01 }, { "Ar38", 3.796273239400000e+01 }, { "Ar39", 3.896431323100000e+01 }, { "Ar40", 3.996238312251000e+01 }, - { "Ar41", 4.096450061100000e+01 }, { "Ar42", 4.196304573600000e+01 }, { "Ar43", 4.296563605600000e+01 }, { "Ar44", 4.396492403300000e+01 }, - { "Ar45", 4.496803995600000e+01 }, { "Ar46", 4.596809412900000e+01 }, { "Ar47", 4.697218679200000e+01 }, { "Ar48", 4.797454000000000e+01 }, - { "Ar49", 4.898052000000000e+01 }, { "Ar50", 4.998443000000000e+01 }, { "Ar51", 5.099163000000000e+01 }, { "Ar52", 5.199678000000000e+01 }, - { "Ar53", 5.300494000000000e+01 }, { "K_natural", 3.909830000000000e+01 }, { "K32", 3.202192000000000e+01 }, { "K33", 3.300726000000000e+01 }, - { "K34", 3.399841000000000e+01 }, { "K35", 3.498800969200000e+01 }, { "K36", 3.598129223500000e+01 }, { "K37", 3.697337588900000e+01 }, - { "K38", 3.796908118400000e+01 }, { "K39", 3.896370667900000e+01 }, { "K40", 3.996399847500000e+01 }, { "K41", 4.096182576200000e+01 }, - { "K42", 4.196240281000000e+01 }, { "K43", 4.296071554000000e+01 }, { "K44", 4.396155680400000e+01 }, { "K45", 4.496069949300000e+01 }, - { "K46", 4.596197686400000e+01 }, { "K47", 4.696167847300000e+01 }, { "K48", 4.796551353500000e+01 }, { "K49", 4.896745092800000e+01 }, - { "K50", 4.997278335500000e+01 }, { "K51", 5.097638000000000e+01 }, { "K52", 5.198261000000000e+01 }, { "K53", 5.298712000000000e+01 }, - { "K54", 5.399420000000000e+01 }, { "K55", 5.499971000000000e+01 }, { "Ca_natural", 4.008000000000000e+01 }, { "Ca34", 3.401412000000000e+01 }, - { "Ca35", 3.500494000000000e+01 }, { "Ca36", 3.599308706300000e+01 }, { "Ca37", 3.698587026900000e+01 }, { "Ca38", 3.797631845200000e+01 }, - { "Ca39", 3.897071972500000e+01 }, { "Ca40", 3.996259098300000e+01 }, { "Ca41", 4.096227806200000e+01 }, { "Ca42", 4.195861801400000e+01 }, - { "Ca43", 4.295876662800000e+01 }, { "Ca44", 4.395548175400000e+01 }, { "Ca45", 4.495618656600000e+01 }, { "Ca46", 4.595369258700000e+01 }, - { "Ca47", 4.695454600600000e+01 }, { "Ca48", 4.795253417700000e+01 }, { "Ca49", 4.895567414800000e+01 }, { "Ca50", 4.995751896200000e+01 }, - { "Ca51", 5.096149921400000e+01 }, { "Ca52", 5.196510000000000e+01 }, { "Ca53", 5.297005000000000e+01 }, { "Ca54", 5.397435000000000e+01 }, - { "Ca55", 5.498055000000000e+01 }, { "Ca56", 5.598557000000000e+01 }, { "Ca57", 5.699235600000000e+01 }, { "Sc_natural", 4.495590000000000e+01 }, - { "Sc36", 3.601492000000000e+01 }, { "Sc37", 3.700305000000000e+01 }, { "Sc38", 3.799470000000000e+01 }, { "Sc39", 3.898479000200000e+01 }, - { "Sc40", 3.997796740700000e+01 }, { "Sc41", 4.096925112500000e+01 }, { "Sc42", 4.196551642900000e+01 }, { "Sc43", 4.296115065800000e+01 }, - { "Sc44", 4.395940275200000e+01 }, { "Sc45", 4.495591190900000e+01 }, { "Sc46", 4.595517189000000e+01 }, { "Sc47", 4.695240750800000e+01 }, - { "Sc48", 4.795223146800000e+01 }, { "Sc49", 4.895002397500000e+01 }, { "Sc50", 4.995218768500000e+01 }, { "Sc51", 5.095360336800000e+01 }, - { "Sc52", 5.195667546800000e+01 }, { "Sc53", 5.295961000000000e+01 }, { "Sc54", 5.396326456100000e+01 }, { "Sc55", 5.496824394900000e+01 }, - { "Sc56", 5.597287000000000e+01 }, { "Sc57", 5.697779000000000e+01 }, { "Sc58", 5.798371000000000e+01 }, { "Sc59", 5.898922000000000e+01 }, - { "Sc60", 5.999571000000000e+01 }, { "Ti_natural", 4.790000000000000e+01 }, { "Ti38", 3.800977000000000e+01 }, { "Ti39", 3.900161000000000e+01 }, - { "Ti40", 3.999049883800000e+01 }, { "Ti41", 4.098314500000000e+01 }, { "Ti42", 4.197303090200000e+01 }, { "Ti43", 4.296852249900000e+01 }, - { "Ti44", 4.395969006900000e+01 }, { "Ti45", 4.495812561600000e+01 }, { "Ti46", 4.595263155500000e+01 }, { "Ti47", 4.695176308800000e+01 }, - { "Ti48", 4.794794628100000e+01 }, { "Ti49", 4.894786998200000e+01 }, { "Ti50", 4.994479119400000e+01 }, { "Ti51", 5.094661495500000e+01 }, - { "Ti52", 5.194689731100000e+01 }, { "Ti53", 5.294972717100000e+01 }, { "Ti54", 5.395105240100000e+01 }, { "Ti55", 5.495526505600000e+01 }, - { "Ti56", 5.595819963900000e+01 }, { "Ti57", 5.696398913700000e+01 }, { "Ti58", 5.796697000000000e+01 }, { "Ti59", 5.897293000000000e+01 }, - { "Ti60", 5.997676000000000e+01 }, { "Ti61", 6.098320000000000e+01 }, { "Ti62", 6.198749000000000e+01 }, { "Ti63", 6.299442000000000e+01 }, - { "V_natural", 5.094150000000000e+01 }, { "V40", 4.001109000000000e+01 }, { "V41", 4.099978000000000e+01 }, { "V42", 4.199123000000000e+01 }, - { "V43", 4.298065000000000e+01 }, { "V44", 4.397411000000000e+01 }, { "V45", 4.496577580800000e+01 }, { "V46", 4.596020048100000e+01 }, - { "V47", 4.695490894000000e+01 }, { "V48", 4.795225370700000e+01 }, { "V49", 4.894851610100000e+01 }, { "V50", 4.994715848500000e+01 }, - { "V51", 5.094395950700000e+01 }, { "V52", 5.194477547900000e+01 }, { "V53", 5.294433797900000e+01 }, { "V54", 5.394643985400000e+01 }, - { "V55", 5.494723370100000e+01 }, { "V56", 5.595053096600000e+01 }, { "V57", 5.695256143200000e+01 }, { "V58", 5.795683413600000e+01 }, - { "V59", 5.896020740700000e+01 }, { "V60", 5.996502686200000e+01 }, { "V61", 6.096848000000000e+01 }, { "V62", 6.197378000000000e+01 }, - { "V63", 6.297755000000000e+01 }, { "V64", 6.398347000000000e+01 }, { "V65", 6.498792000000000e+01 }, { "Cr_natural", 5.199600000000000e+01 }, - { "Cr42", 4.200643000000000e+01 }, { "Cr43", 4.299771000000000e+01 }, { "Cr44", 4.398554900000000e+01 }, { "Cr45", 4.497964000000000e+01 }, - { "Cr46", 4.596835863500000e+01 }, { "Cr47", 4.696290004600000e+01 }, { "Cr48", 4.795403171600000e+01 }, { "Cr49", 4.895133572100000e+01 }, - { "Cr50", 4.994604420500000e+01 }, { "Cr51", 5.094476743100000e+01 }, { "Cr52", 5.194050747200000e+01 }, { "Cr53", 5.294064938600000e+01 }, - { "Cr54", 5.393888039500000e+01 }, { "Cr55", 5.494083967200000e+01 }, { "Cr56", 5.594065313900000e+01 }, { "Cr57", 5.694361301300000e+01 }, - { "Cr58", 5.794435312900000e+01 }, { "Cr59", 5.894858636700000e+01 }, { "Cr60", 5.995007603300000e+01 }, { "Cr61", 6.095471720400000e+01 }, - { "Cr62", 6.195661319000000e+01 }, { "Cr63", 6.296186000000000e+01 }, { "Cr64", 6.396441000000000e+01 }, { "Cr65", 6.497016000000001e+01 }, - { "Cr66", 6.597338000000001e+01 }, { "Cr67", 6.697955000000000e+01 }, { "Mn_natural", 5.493800000000000e+01 }, { "Mn44", 4.400687000000000e+01 }, - { "Mn45", 4.499451000000000e+01 }, { "Mn46", 4.598672000000000e+01 }, { "Mn47", 4.697610000000000e+01 }, { "Mn48", 4.796852000000000e+01 }, - { "Mn49", 4.895961800500000e+01 }, { "Mn50", 4.995423823000000e+01 }, { "Mn51", 5.094821078700000e+01 }, { "Mn52", 5.194556546400000e+01 }, - { "Mn53", 5.294129011700000e+01 }, { "Mn54", 5.394035885400000e+01 }, { "Mn55", 5.493804514100000e+01 }, { "Mn56", 5.593890491000000e+01 }, - { "Mn57", 5.693828537800000e+01 }, { "Mn58", 5.793998154900000e+01 }, { "Mn59", 5.894044023700000e+01 }, { "Mn60", 5.994291124600000e+01 }, - { "Mn61", 6.094465263800000e+01 }, { "Mn62", 6.194842822000000e+01 }, { "Mn63", 6.295023999000000e+01 }, { "Mn64", 6.395424909000000e+01 }, - { "Mn65", 6.495633606500000e+01 }, { "Mn66", 6.596108000000000e+01 }, { "Mn67", 6.696414000000000e+01 }, { "Mn68", 6.796930000000000e+01 }, - { "Mn69", 6.897284000000001e+01 }, { "Fe_natural", 5.584700000000000e+01 }, { "Fe45", 4.501457800000000e+01 }, { "Fe46", 4.600081000000000e+01 }, - { "Fe47", 4.699289000000000e+01 }, { "Fe48", 4.798050400000000e+01 }, { "Fe49", 4.897361000000000e+01 }, { "Fe50", 4.996298898200000e+01 }, - { "Fe51", 5.095681953800000e+01 }, { "Fe52", 5.194811387500000e+01 }, { "Fe53", 5.294530794200000e+01 }, { "Fe54", 5.393961050100000e+01 }, - { "Fe55", 5.493829335700000e+01 }, { "Fe56", 5.593493747500000e+01 }, { "Fe57", 5.693539396900000e+01 }, { "Fe58", 5.793327555800000e+01 }, - { "Fe59", 5.893487546400000e+01 }, { "Fe60", 5.993407168300000e+01 }, { "Fe61", 6.093674528100000e+01 }, { "Fe62", 6.193676744200000e+01 }, - { "Fe63", 6.294036909100000e+01 }, { "Fe64", 6.394120126500000e+01 }, { "Fe65", 6.494538027000000e+01 }, { "Fe66", 6.594678063800001e+01 }, - { "Fe67", 6.695094724400001e+01 }, { "Fe68", 6.795370000000000e+01 }, { "Fe69", 6.895878000000000e+01 }, { "Fe70", 6.996146000000000e+01 }, - { "Fe71", 7.096672000000000e+01 }, { "Fe72", 7.196962000000001e+01 }, { "Co_natural", 5.893320000000000e+01 }, { "Co47", 4.701149000000000e+01 }, - { "Co48", 4.800176000000000e+01 }, { "Co49", 4.898972000000000e+01 }, { "Co50", 4.998154000000000e+01 }, { "Co51", 5.097072000000000e+01 }, - { "Co52", 5.196359000000000e+01 }, { "Co53", 5.295421889600000e+01 }, { "Co54", 5.394845963500000e+01 }, { "Co55", 5.494199902900000e+01 }, - { "Co56", 5.593983927800000e+01 }, { "Co57", 5.693629137300000e+01 }, { "Co58", 5.793575281400000e+01 }, { "Co59", 5.893319504800000e+01 }, - { "Co60", 5.993381705900000e+01 }, { "Co61", 6.093247576300000e+01 }, { "Co62", 6.193405056300000e+01 }, { "Co63", 6.293361161100000e+01 }, - { "Co64", 6.393580990800000e+01 }, { "Co65", 6.493647846000000e+01 }, { "Co66", 6.593976200400000e+01 }, { "Co67", 6.694088952900000e+01 }, - { "Co68", 6.794487305800000e+01 }, { "Co69", 6.894632000000000e+01 }, { "Co70", 6.995099999999999e+01 }, { "Co71", 7.095290000000000e+01 }, - { "Co72", 7.195780999999999e+01 }, { "Co73", 7.296024000000000e+01 }, { "Co74", 7.396538000000000e+01 }, { "Co75", 7.496832999999999e+01 }, - { "Ni_natural", 5.870000000000000e+01 }, { "Ni48", 4.801975000000000e+01 }, { "Ni49", 4.900966000000000e+01 }, { "Ni50", 4.999593000000000e+01 }, - { "Ni51", 5.098772000000000e+01 }, { "Ni52", 5.197568000000000e+01 }, { "Ni53", 5.296847000000000e+01 }, { "Ni54", 5.395790549500000e+01 }, - { "Ni55", 5.495133025100000e+01 }, { "Ni56", 5.594213202200000e+01 }, { "Ni57", 5.693979352600000e+01 }, { "Ni58", 5.793534290700000e+01 }, - { "Ni59", 5.893434670500000e+01 }, { "Ni60", 5.993078637200000e+01 }, { "Ni61", 6.093105603300000e+01 }, { "Ni62", 6.192834511500000e+01 }, - { "Ni63", 6.292966937400000e+01 }, { "Ni64", 6.392796595900000e+01 }, { "Ni65", 6.493008430400000e+01 }, { "Ni66", 6.592913933400000e+01 }, - { "Ni67", 6.693156941399999e+01 }, { "Ni68", 6.793186878900001e+01 }, { "Ni69", 6.893561026899999e+01 }, { "Ni70", 6.993650000000000e+01 }, - { "Ni71", 7.094073628300001e+01 }, { "Ni72", 7.194209268199999e+01 }, { "Ni73", 7.294647000000001e+01 }, { "Ni74", 7.394807000000000e+01 }, - { "Ni75", 7.495287000000000e+01 }, { "Ni76", 7.595533000000000e+01 }, { "Ni77", 7.696055000000000e+01 }, { "Ni78", 7.796317999999999e+01 }, - { "Cu_natural", 6.354600000000000e+01 }, { "Cu52", 5.199718000000000e+01 }, { "Cu53", 5.298555000000000e+01 }, { "Cu54", 5.397671000000000e+01 }, - { "Cu55", 5.496605000000000e+01 }, { "Cu56", 5.595856000000000e+01 }, { "Cu57", 5.694921107800000e+01 }, { "Cu58", 5.794453849900000e+01 }, - { "Cu59", 5.893949802800000e+01 }, { "Cu60", 5.993736503000000e+01 }, { "Cu61", 6.093345782100000e+01 }, { "Cu62", 6.193258374500000e+01 }, - { "Cu63", 6.292959747400000e+01 }, { "Cu64", 6.392976418300000e+01 }, { "Cu65", 6.492778948500001e+01 }, { "Cu66", 6.592886881299999e+01 }, - { "Cu67", 6.692773031400000e+01 }, { "Cu68", 6.792961088900000e+01 }, { "Cu69", 6.892942926900000e+01 }, { "Cu70", 6.993239234300000e+01 }, - { "Cu71", 7.093267683300000e+01 }, { "Cu72", 7.193582030700000e+01 }, { "Cu73", 7.293667528200000e+01 }, { "Cu74", 7.393987486200000e+01 }, - { "Cu75", 7.494190000000000e+01 }, { "Cu76", 7.594527502600000e+01 }, { "Cu77", 7.694785000000000e+01 }, { "Cu78", 7.795196000000000e+01 }, - { "Cu79", 7.895456000000000e+01 }, { "Cu80", 7.996087000000000e+01 }, { "Zn_natural", 6.538000000000000e+01 }, { "Zn54", 5.399295000000000e+01 }, - { "Zn55", 5.498398000000000e+01 }, { "Zn56", 5.597238000000000e+01 }, { "Zn57", 5.696478800000000e+01 }, { "Zn58", 5.795459155500000e+01 }, - { "Zn59", 5.894926376400000e+01 }, { "Zn60", 5.994182703500000e+01 }, { "Zn61", 6.093951063500000e+01 }, { "Zn62", 6.193432976400000e+01 }, - { "Zn63", 6.293321156600000e+01 }, { "Zn64", 6.392914222200000e+01 }, { "Zn65", 6.492924098400000e+01 }, { "Zn66", 6.592603341900001e+01 }, - { "Zn67", 6.692712734500000e+01 }, { "Zn68", 6.792484415400000e+01 }, { "Zn69", 6.892655028100000e+01 }, { "Zn70", 6.992531927400000e+01 }, - { "Zn71", 7.092772159899999e+01 }, { "Zn72", 7.192685795100000e+01 }, { "Zn73", 7.292977910400000e+01 }, { "Zn74", 7.392945860899999e+01 }, - { "Zn75", 7.493293674100001e+01 }, { "Zn76", 7.593329357000000e+01 }, { "Zn77", 7.693695896700000e+01 }, { "Zn78", 7.793844021600000e+01 }, - { "Zn79", 7.894265200000000e+01 }, { "Zn80", 7.994434234800001e+01 }, { "Zn81", 8.095048000000000e+01 }, { "Zn82", 8.195442000000000e+01 }, - { "Zn83", 8.296102999999999e+01 }, { "Ga_natural", 6.972000000000000e+01 }, { "Ga56", 5.599491000000000e+01 }, { "Ga57", 5.698293000000000e+01 }, - { "Ga58", 5.797425000000000e+01 }, { "Ga59", 5.896337000000000e+01 }, { "Ga60", 5.995706000000000e+01 }, { "Ga61", 6.094944628700000e+01 }, - { "Ga62", 6.194417523800000e+01 }, { "Ga63", 6.293929419600000e+01 }, { "Ga64", 6.393683874700000e+01 }, { "Ga65", 6.493273475399999e+01 }, - { "Ga66", 6.593158901000000e+01 }, { "Ga67", 6.692820170300000e+01 }, { "Ga68", 6.792798008400000e+01 }, { "Ga69", 6.892557358700000e+01 }, - { "Ga70", 6.992602197200000e+01 }, { "Ga71", 7.092470134900000e+01 }, { "Ga72", 7.192636626800000e+01 }, { "Ga73", 7.292517468200001e+01 }, - { "Ga74", 7.392694576200000e+01 }, { "Ga75", 7.492650024600000e+01 }, { "Ga76", 7.592882762600000e+01 }, { "Ga77", 7.692915429999999e+01 }, - { "Ga78", 7.793160818000000e+01 }, { "Ga79", 7.893289326000000e+01 }, { "Ga80", 7.993651578100000e+01 }, { "Ga81", 8.093775235500000e+01 }, - { "Ga82", 8.194298999999999e+01 }, { "Ga83", 8.294698000000000e+01 }, { "Ga84", 8.395265000000001e+01 }, { "Ga85", 8.495699999999999e+01 }, - { "Ga86", 8.596312000000000e+01 }, { "Ge_natural", 7.259000000000000e+01 }, { "Ge58", 5.799101000000000e+01 }, { "Ge59", 5.898175000000000e+01 }, - { "Ge60", 5.997019000000000e+01 }, { "Ge61", 6.096379000000000e+01 }, { "Ge62", 6.195465000000000e+01 }, { "Ge63", 6.294964000000000e+01 }, - { "Ge64", 6.394165300000000e+01 }, { "Ge65", 6.493943640600000e+01 }, { "Ge66", 6.593384345299999e+01 }, { "Ge67", 6.693273407000000e+01 }, - { "Ge68", 6.792809423999999e+01 }, { "Ge69", 6.892796453299999e+01 }, { "Ge70", 6.992424738100000e+01 }, { "Ge71", 7.092495095400000e+01 }, - { "Ge72", 7.192207581500000e+01 }, { "Ge73", 7.292345894499999e+01 }, { "Ge74", 7.392117776700000e+01 }, { "Ge75", 7.492285894800000e+01 }, - { "Ge76", 7.592140255699999e+01 }, { "Ge77", 7.692354859100000e+01 }, { "Ge78", 7.792285273900001e+01 }, { "Ge79", 7.892540099500000e+01 }, - { "Ge80", 7.992537239200000e+01 }, { "Ge81", 8.092882046699999e+01 }, { "Ge82", 8.192954972500000e+01 }, { "Ge83", 8.293462000000000e+01 }, - { "Ge84", 8.393747000000000e+01 }, { "Ge85", 8.494302999999999e+01 }, { "Ge86", 8.594649000000000e+01 }, { "Ge87", 8.695251000000000e+01 }, - { "Ge88", 8.795690999999999e+01 }, { "Ge89", 8.896383000000000e+01 }, { "As_natural", 7.492160000000000e+01 }, { "As60", 5.999313000000000e+01 }, - { "As61", 6.098062000000000e+01 }, { "As62", 6.197320000000000e+01 }, { "As63", 6.296369000000000e+01 }, { "As64", 6.395757200000000e+01 }, - { "As65", 6.494956400000000e+01 }, { "As66", 6.594471000000000e+01 }, { "As67", 6.693918607099999e+01 }, { "As68", 6.793676906899999e+01 }, - { "As69", 6.893227367500000e+01 }, { "As70", 6.993092482599999e+01 }, { "As71", 7.092711242800000e+01 }, { "As72", 7.192675228300000e+01 }, - { "As73", 7.292382484399999e+01 }, { "As74", 7.392392869200000e+01 }, { "As75", 7.492159647800000e+01 }, { "As76", 7.592239402100000e+01 }, - { "As77", 7.692064728600000e+01 }, { "As78", 7.792182728100001e+01 }, { "As79", 7.892094793400000e+01 }, { "As80", 7.992253381600000e+01 }, - { "As81", 8.092213228700000e+01 }, { "As82", 8.192450406700000e+01 }, { "As83", 8.292498002400001e+01 }, { "As84", 8.392905800000000e+01 }, - { "As85", 8.493201999999999e+01 }, { "As86", 8.593650000000000e+01 }, { "As87", 8.693989999999999e+01 }, { "As88", 8.794494000000000e+01 }, - { "As89", 8.894938999999999e+01 }, { "As90", 8.995550000000000e+01 }, { "As91", 9.096043000000000e+01 }, { "As92", 9.196680000000001e+01 }, - { "Se_natural", 7.895999999999999e+01 }, { "Se65", 6.496465999999999e+01 }, { "Se66", 6.595520999999999e+01 }, { "Se67", 6.695009000000000e+01 }, - { "Se68", 6.794179800000001e+01 }, { "Se69", 6.893955781699999e+01 }, { "Se70", 6.993339064400000e+01 }, { "Se71", 7.093224182199999e+01 }, - { "Se72", 7.192711235199999e+01 }, { "Se73", 7.292676534500001e+01 }, { "Se74", 7.392247643600000e+01 }, { "Se75", 7.492252336800000e+01 }, - { "Se76", 7.591921359700000e+01 }, { "Se77", 7.691991403800000e+01 }, { "Se78", 7.791730909000000e+01 }, { "Se79", 7.891849909800000e+01 }, - { "Se80", 7.991652127099999e+01 }, { "Se81", 8.091799247400000e+01 }, { "Se82", 8.191669940100000e+01 }, { "Se83", 8.291911847300000e+01 }, - { "Se84", 8.391846235400000e+01 }, { "Se85", 8.492224505300000e+01 }, { "Se86", 8.592427157900001e+01 }, { "Se87", 8.692852135800000e+01 }, - { "Se88", 8.793142399800000e+01 }, { "Se89", 8.893644999999999e+01 }, { "Se90", 8.993996000000000e+01 }, { "Se91", 9.094596000000000e+01 }, - { "Se92", 9.194992000000001e+01 }, { "Se93", 9.295629000000000e+01 }, { "Se94", 9.396048999999999e+01 }, { "Br_natural", 7.990400000000000e+01 }, - { "Br67", 6.696478999999999e+01 }, { "Br68", 6.795851600000000e+01 }, { "Br69", 6.895010600000001e+01 }, { "Br70", 6.994479200000001e+01 }, - { "Br71", 7.093874000000000e+01 }, { "Br72", 7.193664457200001e+01 }, { "Br73", 7.293169152400000e+01 }, { "Br74", 7.392989103399999e+01 }, - { "Br75", 7.492577620700000e+01 }, { "Br76", 7.592454146900000e+01 }, { "Br77", 7.692137908200000e+01 }, { "Br78", 7.792114570600000e+01 }, - { "Br79", 7.891833708700000e+01 }, { "Br80", 7.991852929600000e+01 }, { "Br81", 8.091629056300000e+01 }, { "Br82", 8.191680411900001e+01 }, - { "Br83", 8.291518042100000e+01 }, { "Br84", 8.391647897400000e+01 }, { "Br85", 8.491560840299999e+01 }, { "Br86", 8.591879757700001e+01 }, - { "Br87", 8.692071132400000e+01 }, { "Br88", 8.792406592600000e+01 }, { "Br89", 8.892638533400000e+01 }, { "Br90", 8.993062773699999e+01 }, - { "Br91", 9.093396809500000e+01 }, { "Br92", 9.193925871400000e+01 }, { "Br93", 9.294305000000000e+01 }, { "Br94", 9.394868000000000e+01 }, - { "Br95", 9.495287000000000e+01 }, { "Br96", 9.595853000000000e+01 }, { "Br97", 9.696280000000000e+01 }, { "Kr_natural", 8.380000000000000e+01 }, - { "Kr69", 6.896518000000000e+01 }, { "Kr70", 6.995525900000000e+01 }, { "Kr71", 7.094962573799999e+01 }, { "Kr72", 7.194209203800000e+01 }, - { "Kr73", 7.293928919500000e+01 }, { "Kr74", 7.393308436900000e+01 }, { "Kr75", 7.493094574600001e+01 }, { "Kr76", 7.592591007800000e+01 }, - { "Kr77", 7.692467000000001e+01 }, { "Kr78", 7.792036478300000e+01 }, { "Kr79", 7.892008243100000e+01 }, { "Kr80", 7.991637896500001e+01 }, - { "Kr81", 8.091659201500001e+01 }, { "Kr82", 8.191348360000001e+01 }, { "Kr83", 8.291413609900000e+01 }, { "Kr84", 8.391150668700000e+01 }, - { "Kr85", 8.491252733100001e+01 }, { "Kr86", 8.591061072900000e+01 }, { "Kr87", 8.691335486200001e+01 }, { "Kr88", 8.791444696900000e+01 }, - { "Kr89", 8.891763058100000e+01 }, { "Kr90", 8.991951655500000e+01 }, { "Kr91", 9.092344521500000e+01 }, { "Kr92", 9.192615621000000e+01 }, - { "Kr93", 9.293127435700001e+01 }, { "Kr94", 9.393436000000000e+01 }, { "Kr95", 9.493984000000000e+01 }, { "Kr96", 9.594307000000001e+01 }, - { "Kr97", 9.694856000000000e+01 }, { "Kr98", 9.795191000000000e+01 }, { "Kr99", 9.895760000000000e+01 }, { "Kr100", 9.996114000000000e+01 }, - { "Rb_natural", 8.546780000000000e+01 }, { "Rb71", 7.096532000000001e+01 }, { "Rb72", 7.195908000000000e+01 }, { "Rb73", 7.295056099999999e+01 }, - { "Rb74", 7.394426475100001e+01 }, { "Rb75", 7.493857000000000e+01 }, { "Rb76", 7.593507222600000e+01 }, { "Rb77", 7.693040800000000e+01 }, - { "Rb78", 7.792814100000000e+01 }, { "Rb79", 7.892398946000000e+01 }, { "Rb80", 7.992251924999999e+01 }, { "Rb81", 8.091899591300000e+01 }, - { "Rb82", 8.191820859800001e+01 }, { "Rb83", 8.291510970100001e+01 }, { "Rb84", 8.391438482100000e+01 }, { "Rb85", 8.491178973700001e+01 }, - { "Rb86", 8.591116741899999e+01 }, { "Rb87", 8.690918052600000e+01 }, { "Rb88", 8.791131558799999e+01 }, { "Rb89", 8.891227801600000e+01 }, - { "Rb90", 8.991480169400000e+01 }, { "Rb91", 9.091653695799999e+01 }, { "Rb92", 9.191972890000000e+01 }, { "Rb93", 9.292204187599999e+01 }, - { "Rb94", 9.392640494600001e+01 }, { "Rb95", 9.492930288900000e+01 }, { "Rb96", 9.593427263700001e+01 }, { "Rb97", 9.693735191600000e+01 }, - { "Rb98", 9.794179066800000e+01 }, { "Rb99", 9.894537928299999e+01 }, { "Rb100", 9.994987000000000e+01 }, { "Rb101", 1.009531964450000e+02 }, - { "Rb102", 1.019588700000000e+02 }, { "Sr_natural", 8.762000000000000e+01 }, { "Sr73", 7.296597000000000e+01 }, { "Sr74", 7.395631000000000e+01 }, - { "Sr75", 7.494994956799999e+01 }, { "Sr76", 7.594176678200000e+01 }, { "Sr77", 7.693794478200000e+01 }, { "Sr78", 7.793218000000000e+01 }, - { "Sr79", 7.892970800000001e+01 }, { "Sr80", 7.992452101300000e+01 }, { "Sr81", 8.092321184600000e+01 }, { "Sr82", 8.191840163900000e+01 }, - { "Sr83", 8.291755670100000e+01 }, { "Sr84", 8.391342527499999e+01 }, { "Sr85", 8.491293280300000e+01 }, { "Sr86", 8.590926020400001e+01 }, - { "Sr87", 8.690887712400000e+01 }, { "Sr88", 8.790561212400000e+01 }, { "Sr89", 8.890745067500001e+01 }, { "Sr90", 8.990773788800000e+01 }, - { "Sr91", 9.091020309500000e+01 }, { "Sr92", 9.191103785800000e+01 }, { "Sr93", 9.291402563400000e+01 }, { "Sr94", 9.391536131200000e+01 }, - { "Sr95", 9.491935876600000e+01 }, { "Sr96", 9.592169680200000e+01 }, { "Sr97", 9.692615292300000e+01 }, { "Sr98", 9.792845293400001e+01 }, - { "Sr99", 9.893324092600000e+01 }, { "Sr100", 9.993535191100000e+01 }, { "Sr101", 1.009405178880000e+02 }, { "Sr102", 1.019430189870000e+02 }, - { "Sr103", 1.029489500000000e+02 }, { "Sr104", 1.039523300000000e+02 }, { "Sr105", 1.049585800000000e+02 }, { "Y_natural", 8.890590000000000e+01 }, - { "Y76", 7.595845000000000e+01 }, { "Y77", 7.694964500000000e+01 }, { "Y78", 7.794361000000001e+01 }, { "Y79", 7.893735163400000e+01 }, - { "Y80", 7.993428000000000e+01 }, { "Y81", 8.092912746800000e+01 }, { "Y82", 8.192679245100000e+01 }, { "Y83", 8.292235424300000e+01 }, - { "Y84", 8.392038826400000e+01 }, { "Y85", 8.491643303900000e+01 }, { "Y86", 8.591488557600000e+01 }, { "Y87", 8.691087573000000e+01 }, - { "Y88", 8.790950114600000e+01 }, { "Y89", 8.890584829500000e+01 }, { "Y90", 8.990715188599999e+01 }, { "Y91", 9.090730479100000e+01 }, - { "Y92", 9.190894914300000e+01 }, { "Y93", 9.290958271300001e+01 }, { "Y94", 9.391159524500000e+01 }, { "Y95", 9.491282062099999e+01 }, - { "Y96", 9.591589134300000e+01 }, { "Y97", 9.691813399500001e+01 }, { "Y98", 9.792220302000000e+01 }, { "Y99", 9.892463620400000e+01 }, - { "Y100", 9.992775658600000e+01 }, { "Y101", 1.009303138500000e+02 }, { "Y102", 1.019335556950000e+02 }, { "Y103", 1.029367300000000e+02 }, - { "Y104", 1.039410500000000e+02 }, { "Y105", 1.049448700000000e+02 }, { "Y106", 1.059497900000000e+02 }, { "Y107", 1.069541400000000e+02 }, - { "Y108", 1.079594800000000e+02 }, { "Zr_natural", 9.122000000000000e+01 }, { "Zr78", 7.795523000000000e+01 }, { "Zr79", 7.894916000000001e+01 }, - { "Zr80", 7.994040000000000e+01 }, { "Zr81", 8.093721002600000e+01 }, { "Zr82", 8.193108700000001e+01 }, { "Zr83", 8.292865380100000e+01 }, - { "Zr84", 8.392325000000000e+01 }, { "Zr85", 8.492147118200000e+01 }, { "Zr86", 8.591647359100000e+01 }, { "Zr87", 8.691481625199999e+01 }, - { "Zr88", 8.791022690400000e+01 }, { "Zr89", 8.890888950000000e+01 }, { "Zr90", 8.990470441600000e+01 }, { "Zr91", 9.090564576700000e+01 }, - { "Zr92", 9.190504084700000e+01 }, { "Zr93", 9.290647600600001e+01 }, { "Zr94", 9.390631519199999e+01 }, { "Zr95", 9.490804260000000e+01 }, - { "Zr96", 9.590827338600000e+01 }, { "Zr97", 9.691095310900000e+01 }, { "Zr98", 9.791273489200000e+01 }, { "Zr99", 9.891651210600000e+01 }, - { "Zr100", 9.991776188900000e+01 }, { "Zr101", 1.009211404150000e+02 }, { "Zr102", 1.019229812850000e+02 }, { "Zr103", 1.029265996060000e+02 }, - { "Zr104", 1.039287800000000e+02 }, { "Zr105", 1.049330500000000e+02 }, { "Zr106", 1.059359100000000e+02 }, { "Zr107", 1.069407500000000e+02 }, - { "Zr108", 1.079439600000000e+02 }, { "Zr109", 1.089492400000000e+02 }, { "Zr110", 1.099528700000000e+02 }, { "Nb_natural", 9.290640000000000e+01 }, - { "Nb81", 8.094902999999999e+01 }, { "Nb82", 8.194313000000000e+01 }, { "Nb83", 8.293670538200000e+01 }, { "Nb84", 8.393357000000000e+01 }, - { "Nb85", 8.492791244700000e+01 }, { "Nb86", 8.592503832600001e+01 }, { "Nb87", 8.692036110799999e+01 }, { "Nb88", 8.791833216300000e+01 }, - { "Nb89", 8.891341824500000e+01 }, { "Nb90", 8.991126484500001e+01 }, { "Nb91", 9.090699624299999e+01 }, { "Nb92", 9.190719388799999e+01 }, - { "Nb93", 9.290637805800000e+01 }, { "Nb94", 9.390728388799999e+01 }, { "Nb95", 9.490683579200000e+01 }, { "Nb96", 9.590810064700000e+01 }, - { "Nb97", 9.690809855600000e+01 }, { "Nb98", 9.791032841200000e+01 }, { "Nb99", 9.891161837500000e+01 }, { "Nb100", 9.991418161900000e+01 }, - { "Nb101", 1.009152520250000e+02 }, { "Nb102", 1.019180376140000e+02 }, { "Nb103", 1.029191438420000e+02 }, { "Nb104", 1.039224647010000e+02 }, - { "Nb105", 1.049239365450000e+02 }, { "Nb106", 1.059279700000000e+02 }, { "Nb107", 1.069303100000000e+02 }, { "Nb108", 1.079348400000000e+02 }, - { "Nb109", 1.089376300000000e+02 }, { "Nb110", 1.099424400000000e+02 }, { "Nb111", 1.109456500000000e+02 }, { "Nb112", 1.119508300000000e+02 }, - { "Nb113", 1.129547000000000e+02 }, { "Mo_natural", 9.594000000000000e+01 }, { "Mo83", 8.294874000000000e+01 }, { "Mo84", 8.394009000000000e+01 }, - { "Mo85", 8.493655000000000e+01 }, { "Mo86", 8.593069590400000e+01 }, { "Mo87", 8.692732650200000e+01 }, { "Mo88", 8.792195324100000e+01 }, - { "Mo89", 8.891948000900000e+01 }, { "Mo90", 8.991393689600000e+01 }, { "Mo91", 9.091175019400001e+01 }, { "Mo92", 9.190681099100000e+01 }, - { "Mo93", 9.290681261000000e+01 }, { "Mo94", 9.390508826900000e+01 }, { "Mo95", 9.490584212900001e+01 }, { "Mo96", 9.590467947700000e+01 }, - { "Mo97", 9.690602146499999e+01 }, { "Mo98", 9.790540816900000e+01 }, { "Mo99", 9.890771187000000e+01 }, { "Mo100", 9.990747733600000e+01 }, - { "Mo101", 1.009103470010000e+02 }, { "Mo102", 1.019102973600000e+02 }, { "Mo103", 1.029132071420000e+02 }, { "Mo104", 1.039137636250000e+02 }, - { "Mo105", 1.049169746100000e+02 }, { "Mo106", 1.059181368020000e+02 }, { "Mo107", 1.069216926040000e+02 }, { "Mo108", 1.079234530000000e+02 }, - { "Mo109", 1.089278100000000e+02 }, { "Mo110", 1.099297300000000e+02 }, { "Mo111", 1.109344100000000e+02 }, { "Mo112", 1.119368400000000e+02 }, - { "Mo113", 1.129418800000000e+02 }, { "Mo114", 1.139449200000000e+02 }, { "Mo115", 1.149502900000000e+02 }, { "Tc_natural", 9.800000000000000e+01 }, - { "Tc85", 8.494883000000000e+01 }, { "Tc86", 8.594288000000000e+01 }, { "Tc87", 8.693653000000000e+01 }, { "Tc88", 8.793267800000000e+01 }, - { "Tc89", 8.892716700000000e+01 }, { "Tc90", 8.992355656399999e+01 }, { "Tc91", 9.091842763900000e+01 }, { "Tc92", 9.191526016600000e+01 }, - { "Tc93", 9.291024898400001e+01 }, { "Tc94", 9.390965700200000e+01 }, { "Tc95", 9.490765708399999e+01 }, { "Tc96", 9.590787138300000e+01 }, - { "Tc97", 9.690636535800000e+01 }, { "Tc98", 9.790721596600000e+01 }, { "Tc99", 9.890625474700001e+01 }, { "Tc100", 9.990765777999999e+01 }, - { "Tc101", 1.009073146590000e+02 }, { "Tc102", 1.019092150190000e+02 }, { "Tc103", 1.029091813510000e+02 }, { "Tc104", 1.039114474540000e+02 }, - { "Tc105", 1.049116605660000e+02 }, { "Tc106", 1.059143579270000e+02 }, { "Tc107", 1.069150795720000e+02 }, { "Tc108", 1.079184612260000e+02 }, - { "Tc109", 1.089199826650000e+02 }, { "Tc110", 1.099238204830000e+02 }, { "Tc111", 1.109256928300000e+02 }, { "Tc112", 1.119291464930000e+02 }, - { "Tc113", 1.129315900000000e+02 }, { "Tc114", 1.139358800000000e+02 }, { "Tc115", 1.149386900000000e+02 }, { "Tc116", 1.159433700000000e+02 }, - { "Tc117", 1.169464800000000e+02 }, { "Tc118", 1.179514800000000e+02 }, { "Ru_natural", 1.010700000000000e+02 }, { "Ru87", 8.694918000000000e+01 }, - { "Ru88", 8.794025999999999e+01 }, { "Ru89", 8.893611000000000e+01 }, { "Ru90", 8.992989000000000e+01 }, { "Ru91", 9.092629200000000e+01 }, - { "Ru92", 9.192012000000000e+01 }, { "Ru93", 9.291705203399999e+01 }, { "Ru94", 9.391135971100000e+01 }, { "Ru95", 9.491041292900000e+01 }, - { "Ru96", 9.590759783500000e+01 }, { "Ru97", 9.690755470000001e+01 }, { "Ru98", 9.790528713200000e+01 }, { "Ru99", 9.890593930199999e+01 }, - { "Ru100", 9.990421947599999e+01 }, { "Ru101", 1.009055820870000e+02 }, { "Ru102", 1.019043493120000e+02 }, { "Ru103", 1.029063238470000e+02 }, - { "Ru104", 1.039054327010000e+02 }, { "Ru105", 1.049077528660000e+02 }, { "Ru106", 1.059073294330000e+02 }, { "Ru107", 1.069099050890000e+02 }, - { "Ru108", 1.079101734650000e+02 }, { "Ru109", 1.089132032330000e+02 }, { "Ru110", 1.099141360410000e+02 }, { "Ru111", 1.109176960000000e+02 }, - { "Ru112", 1.119189650000000e+02 }, { "Ru113", 1.129224871940000e+02 }, { "Ru114", 1.139242810000000e+02 }, { "Ru115", 1.149286861730000e+02 }, - { "Ru116", 1.159308100000000e+02 }, { "Ru117", 1.169355800000000e+02 }, { "Ru118", 1.179378200000000e+02 }, { "Ru119", 1.189428400000000e+02 }, - { "Ru120", 1.199453100000000e+02 }, { "Rh_natural", 1.029055000000000e+02 }, { "Rh89", 8.894883700000000e+01 }, { "Rh90", 8.994287000000000e+01 }, - { "Rh91", 9.093655000000000e+01 }, { "Rh92", 9.193198000000000e+01 }, { "Rh93", 9.292574000000000e+01 }, { "Rh94", 9.392169800000001e+01 }, - { "Rh95", 9.491589874000000e+01 }, { "Rh96", 9.591446063100000e+01 }, { "Rh97", 9.691133679700000e+01 }, { "Rh98", 9.791070815800001e+01 }, - { "Rh99", 9.890813210400000e+01 }, { "Rh100", 9.990812155000000e+01 }, { "Rh101", 1.009061636250000e+02 }, { "Rh102", 1.019068431960000e+02 }, - { "Rh103", 1.029055042920000e+02 }, { "Rh104", 1.039066555180000e+02 }, { "Rh105", 1.049056938210000e+02 }, { "Rh106", 1.059072871350000e+02 }, - { "Rh107", 1.069067484230000e+02 }, { "Rh108", 1.079087280180000e+02 }, { "Rh109", 1.089087372890000e+02 }, { "Rh110", 1.099111364110000e+02 }, - { "Rh111", 1.109115859130000e+02 }, { "Rh112", 1.119143941590000e+02 }, { "Rh113", 1.129155306270000e+02 }, { "Rh114", 1.139188060000000e+02 }, - { "Rh115", 1.149203340000000e+02 }, { "Rh116", 1.159240620000000e+02 }, { "Rh117", 1.169259800000000e+02 }, { "Rh118", 1.179300700000000e+02 }, - { "Rh119", 1.189321100000000e+02 }, { "Rh120", 1.199364100000000e+02 }, { "Rh121", 1.209387200000000e+02 }, { "Rh122", 1.219432100000000e+02 }, - { "Pd_natural", 1.064000000000000e+02 }, { "Pd91", 9.094911000000000e+01 }, { "Pd92", 9.194042000000000e+01 }, { "Pd93", 9.293591000000001e+01 }, - { "Pd94", 9.392877000000000e+01 }, { "Pd95", 9.492469000000000e+01 }, { "Pd96", 9.591816435900000e+01 }, { "Pd97", 9.691647907300000e+01 }, - { "Pd98", 9.791272090200000e+01 }, { "Pd99", 9.891176783300000e+01 }, { "Pd100", 9.990850588600000e+01 }, { "Pd101", 1.009082892420000e+02 }, - { "Pd102", 1.019056085440000e+02 }, { "Pd103", 1.029060873070000e+02 }, { "Pd104", 1.039040358340000e+02 }, { "Pd105", 1.049050849200000e+02 }, - { "Pd106", 1.059034857150000e+02 }, { "Pd107", 1.069051334810000e+02 }, { "Pd108", 1.079038917010000e+02 }, { "Pd109", 1.089059504510000e+02 }, - { "Pd110", 1.099051532540000e+02 }, { "Pd111", 1.109076707340000e+02 }, { "Pd112", 1.119073140580000e+02 }, { "Pd113", 1.129101529080000e+02 }, - { "Pd114", 1.139103626380000e+02 }, { "Pd115", 1.149136838240000e+02 }, { "Pd116", 1.159141586620000e+02 }, { "Pd117", 1.169178413380000e+02 }, - { "Pd118", 1.179189843000000e+02 }, { "Pd119", 1.189231100000000e+02 }, { "Pd120", 1.199246918780000e+02 }, { "Pd121", 1.209288700000000e+02 }, - { "Pd122", 1.219305500000000e+02 }, { "Pd123", 1.229349300000000e+02 }, { "Pd124", 1.239368800000000e+02 }, { "Ag_natural", 1.078680000000000e+02 }, - { "Ag93", 9.294978000000000e+01 }, { "Ag94", 9.394278000000000e+01 }, { "Ag95", 9.493548000000000e+01 }, { "Ag96", 9.593068000000000e+01 }, - { "Ag97", 9.692397241200000e+01 }, { "Ag98", 9.792156620100000e+01 }, { "Ag99", 9.891759717799999e+01 }, { "Ag100", 9.991610425499999e+01 }, - { "Ag101", 1.009128022330000e+02 }, { "Ag102", 1.019116850000000e+02 }, { "Ag103", 1.029089727200000e+02 }, { "Ag104", 1.039086291570000e+02 }, - { "Ag105", 1.049065286610000e+02 }, { "Ag106", 1.059066689210000e+02 }, { "Ag107", 1.069050968200000e+02 }, { "Ag108", 1.079059555560000e+02 }, - { "Ag109", 1.089047522920000e+02 }, { "Ag110", 1.099061072310000e+02 }, { "Ag111", 1.109052911570000e+02 }, { "Ag112", 1.119070048140000e+02 }, - { "Ag113", 1.129065665790000e+02 }, { "Ag114", 1.139088037040000e+02 }, { "Ag115", 1.149087626980000e+02 }, { "Ag116", 1.159113599330000e+02 }, - { "Ag117", 1.169116845620000e+02 }, { "Ag118", 1.179145827680000e+02 }, { "Ag119", 1.189156650590000e+02 }, { "Ag120", 1.199187873840000e+02 }, - { "Ag121", 1.209198480460000e+02 }, { "Ag122", 1.219235300000000e+02 }, { "Ag123", 1.229249000000000e+02 }, { "Ag124", 1.239286400000000e+02 }, - { "Ag125", 1.249304300000000e+02 }, { "Ag126", 1.259345000000000e+02 }, { "Ag127", 1.269367700000000e+02 }, { "Ag128", 1.279411700000000e+02 }, - { "Ag129", 1.289436900000000e+02 }, { "Ag130", 1.299504480000000e+02 }, { "Cd_natural", 1.124100000000000e+02 }, { "Cd95", 9.494987000000000e+01 }, - { "Cd96", 9.593977000000000e+01 }, { "Cd97", 9.693494000000000e+01 }, { "Cd98", 9.792739554600000e+01 }, { "Cd99", 9.892501000000000e+01 }, - { "Cd100", 9.992028952500000e+01 }, { "Cd101", 1.009186815380000e+02 }, { "Cd102", 1.019144622580000e+02 }, { "Cd103", 1.029134192460000e+02 }, - { "Cd104", 1.039098494750000e+02 }, { "Cd105", 1.049094679050000e+02 }, { "Cd106", 1.059064594100000e+02 }, { "Cd107", 1.069066179280000e+02 }, - { "Cd108", 1.079041836830000e+02 }, { "Cd109", 1.089049822930000e+02 }, { "Cd110", 1.099030020700000e+02 }, { "Cd111", 1.109041781070000e+02 }, - { "Cd112", 1.119027578090000e+02 }, { "Cd113", 1.129044016620000e+02 }, { "Cd114", 1.139033585400000e+02 }, { "Cd115", 1.149054309690000e+02 }, - { "Cd116", 1.159047558090000e+02 }, { "Cd117", 1.169072186180000e+02 }, { "Cd118", 1.179069145300000e+02 }, { "Cd119", 1.189099215970000e+02 }, - { "Cd120", 1.199098501290000e+02 }, { "Cd121", 1.209129773630000e+02 }, { "Cd122", 1.219133324320000e+02 }, { "Cd123", 1.229170029990000e+02 }, - { "Cd124", 1.239176476160000e+02 }, { "Cd125", 1.249212463700000e+02 }, { "Cd126", 1.259223533210000e+02 }, { "Cd127", 1.269264438640000e+02 }, - { "Cd128", 1.279277622850000e+02 }, { "Cd129", 1.289321500000000e+02 }, { "Cd130", 1.299339019370000e+02 }, { "Cd131", 1.309406700000000e+02 }, - { "Cd132", 1.319455500000000e+02 }, { "In_natural", 1.148200000000000e+02 }, { "In97", 9.694954000000000e+01 }, { "In98", 9.794213999999999e+01 }, - { "In99", 9.893422000000000e+01 }, { "In100", 9.993111085100000e+01 }, { "In101", 1.009263400000000e+02 }, { "In102", 1.019240902380000e+02 }, - { "In103", 1.029199141880000e+02 }, { "In104", 1.039182961710000e+02 }, { "In105", 1.049146735400000e+02 }, { "In106", 1.059134654110000e+02 }, - { "In107", 1.069102951000000e+02 }, { "In108", 1.079096981800000e+02 }, { "In109", 1.089071505070000e+02 }, { "In110", 1.099071652740000e+02 }, - { "In111", 1.109051032780000e+02 }, { "In112", 1.119055323310000e+02 }, { "In113", 1.129040577610000e+02 }, { "In114", 1.139049138760000e+02 }, - { "In115", 1.149038784840000e+02 }, { "In116", 1.159052597030000e+02 }, { "In117", 1.169045135640000e+02 }, { "In118", 1.179063543670000e+02 }, - { "In119", 1.189058453500000e+02 }, { "In120", 1.199079596080000e+02 }, { "In121", 1.209078458220000e+02 }, { "In122", 1.219102760100000e+02 }, - { "In123", 1.229104382760000e+02 }, { "In124", 1.239131752310000e+02 }, { "In125", 1.249136005880000e+02 }, { "In126", 1.259164638570000e+02 }, - { "In127", 1.269173530910000e+02 }, { "In128", 1.279201723280000e+02 }, { "In129", 1.289216969800000e+02 }, { "In130", 1.299249700490000e+02 }, - { "In131", 1.309268517670000e+02 }, { "In132", 1.319329902600000e+02 }, { "In133", 1.329378100000000e+02 }, { "In134", 1.339441500000000e+02 }, - { "In135", 1.349493300000000e+02 }, { "Sn_natural", 1.186900000000000e+02 }, { "Sn99", 9.894933000000000e+01 }, { "Sn100", 9.993904434300001e+01 }, - { "Sn101", 1.009360600000000e+02 }, { "Sn102", 1.019302953240000e+02 }, { "Sn103", 1.029281000000000e+02 }, { "Sn104", 1.039231432230000e+02 }, - { "Sn105", 1.049213494370000e+02 }, { "Sn106", 1.059168806200000e+02 }, { "Sn107", 1.069156443290000e+02 }, { "Sn108", 1.079119253780000e+02 }, - { "Sn109", 1.089112832140000e+02 }, { "Sn110", 1.099078427910000e+02 }, { "Sn111", 1.109077344600000e+02 }, { "Sn112", 1.119048182070000e+02 }, - { "Sn113", 1.129051705770000e+02 }, { "Sn114", 1.139027788690000e+02 }, { "Sn115", 1.149033423970000e+02 }, { "Sn116", 1.159017405300000e+02 }, - { "Sn117", 1.169029516560000e+02 }, { "Sn118", 1.179016031670000e+02 }, { "Sn119", 1.189033076300000e+02 }, { "Sn120", 1.199021946760000e+02 }, - { "Sn121", 1.209042354800000e+02 }, { "Sn122", 1.219034390460000e+02 }, { "Sn123", 1.229057208380000e+02 }, { "Sn124", 1.239052739460000e+02 }, - { "Sn125", 1.249077841250000e+02 }, { "Sn126", 1.259076532800000e+02 }, { "Sn127", 1.269103600240000e+02 }, { "Sn128", 1.279105366240000e+02 }, - { "Sn129", 1.289134790000000e+02 }, { "Sn130", 1.299139672950000e+02 }, { "Sn131", 1.309169997690000e+02 }, { "Sn132", 1.319178157130000e+02 }, - { "Sn133", 1.329238292490000e+02 }, { "Sn134", 1.339282917650000e+02 }, { "Sn135", 1.349347300000000e+02 }, { "Sn136", 1.359393400000000e+02 }, - { "Sn137", 1.369459900000000e+02 }, { "Sb_natural", 1.217500000000000e+02 }, { "Sb103", 1.029396900000000e+02 }, { "Sb104", 1.039364720000000e+02 }, - { "Sb105", 1.049314863480000e+02 }, { "Sb106", 1.059287910000000e+02 }, { "Sb107", 1.069241500000000e+02 }, { "Sb108", 1.079221600000000e+02 }, - { "Sb109", 1.089181324260000e+02 }, { "Sb110", 1.099167530000000e+02 }, { "Sb111", 1.109131630000000e+02 }, { "Sb112", 1.119123980090000e+02 }, - { "Sb113", 1.129093716720000e+02 }, { "Sb114", 1.139092690000000e+02 }, { "Sb115", 1.149065980000000e+02 }, { "Sb116", 1.159067936290000e+02 }, - { "Sb117", 1.169048359410000e+02 }, { "Sb118", 1.179055287310000e+02 }, { "Sb119", 1.189039420090000e+02 }, { "Sb120", 1.199050724270000e+02 }, - { "Sb121", 1.209038156860000e+02 }, { "Sb122", 1.219051736510000e+02 }, { "Sb123", 1.229042139700000e+02 }, { "Sb124", 1.239059357430000e+02 }, - { "Sb125", 1.249052538180000e+02 }, { "Sb126", 1.259072474800000e+02 }, { "Sb127", 1.269069236090000e+02 }, { "Sb128", 1.279091690010000e+02 }, - { "Sb129", 1.289091484420000e+02 }, { "Sb130", 1.299116563240000e+02 }, { "Sb131", 1.309119822750000e+02 }, { "Sb132", 1.319144668960000e+02 }, - { "Sb133", 1.329152516300000e+02 }, { "Sb134", 1.339203797440000e+02 }, { "Sb135", 1.349251657710000e+02 }, { "Sb136", 1.359303500000000e+02 }, - { "Sb137", 1.369353100000000e+02 }, { "Sb138", 1.379407900000000e+02 }, { "Sb139", 1.389459800000000e+02 }, { "Te_natural", 1.276000000000000e+02 }, - { "Te105", 1.049436400000000e+02 }, { "Te106", 1.059375042370000e+02 }, { "Te107", 1.069350060000000e+02 }, { "Te108", 1.079294445970000e+02 }, - { "Te109", 1.089274155150000e+02 }, { "Te110", 1.099224073160000e+02 }, { "Te111", 1.109211106920000e+02 }, { "Te112", 1.119170136720000e+02 }, - { "Te113", 1.129158910000000e+02 }, { "Te114", 1.139120890000000e+02 }, { "Te115", 1.149119020000000e+02 }, { "Te116", 1.159084600000000e+02 }, - { "Te117", 1.169086447190000e+02 }, { "Te118", 1.179058275810000e+02 }, { "Te119", 1.189064036450000e+02 }, { "Te120", 1.199040202220000e+02 }, - { "Te121", 1.209049364240000e+02 }, { "Te122", 1.219030438980000e+02 }, { "Te123", 1.229042700290000e+02 }, { "Te124", 1.239028178960000e+02 }, - { "Te125", 1.249044307310000e+02 }, { "Te126", 1.259033116960000e+02 }, { "Te127", 1.269052263360000e+02 }, { "Te128", 1.279044630560000e+02 }, - { "Te129", 1.289065982380000e+02 }, { "Te130", 1.299062243990000e+02 }, { "Te131", 1.309085238640000e+02 }, { "Te132", 1.319085531600000e+02 }, - { "Te133", 1.329109553060000e+02 }, { "Te134", 1.339113687370000e+02 }, { "Te135", 1.349164485920000e+02 }, { "Te136", 1.359201012460000e+02 }, - { "Te137", 1.369253229540000e+02 }, { "Te138", 1.379292200000000e+02 }, { "Te139", 1.389347300000000e+02 }, { "Te140", 1.399388500000000e+02 }, - { "Te141", 1.409446500000000e+02 }, { "Te142", 1.419490800000000e+02 }, { "I_natural", 1.269045000000000e+02 }, { "I108", 1.079434750000000e+02 }, - { "I109", 1.089381494170000e+02 }, { "I110", 1.099352420000000e+02 }, { "I111", 1.109302760000000e+02 }, { "I112", 1.119279700000000e+02 }, - { "I113", 1.129236405830000e+02 }, { "I114", 1.139218500000000e+02 }, { "I115", 1.149180480000000e+02 }, { "I116", 1.159168086330000e+02 }, - { "I117", 1.169136500000000e+02 }, { "I118", 1.179130740000000e+02 }, { "I119", 1.189100740000000e+02 }, { "I120", 1.199100481730000e+02 }, - { "I121", 1.209073668110000e+02 }, { "I122", 1.219075892840000e+02 }, { "I123", 1.229055889650000e+02 }, { "I124", 1.239062098520000e+02 }, - { "I125", 1.249046301640000e+02 }, { "I126", 1.259056241530000e+02 }, { "I127", 1.269044726810000e+02 }, { "I128", 1.279058094430000e+02 }, - { "I129", 1.289049877220000e+02 }, { "I130", 1.299066742470000e+02 }, { "I131", 1.309061246090000e+02 }, { "I132", 1.319079973810000e+02 }, - { "I133", 1.329077969390000e+02 }, { "I134", 1.339097444650000e+02 }, { "I135", 1.349100481210000e+02 }, { "I136", 1.359146539930000e+02 }, - { "I137", 1.369178708400000e+02 }, { "I138", 1.379223495910000e+02 }, { "I139", 1.389260994780000e+02 }, { "I140", 1.399310000000000e+02 }, - { "I141", 1.409350300000000e+02 }, { "I142", 1.419401800000000e+02 }, { "I143", 1.429445600000000e+02 }, { "I144", 1.439499900000000e+02 }, - { "Xe_natural", 1.313000000000000e+02 }, { "Xe110", 1.099442780680000e+02 }, { "Xe111", 1.109416020000000e+02 }, { "Xe112", 1.119356231120000e+02 }, - { "Xe113", 1.129333411740000e+02 }, { "Xe114", 1.139279803060000e+02 }, { "Xe115", 1.149262939200000e+02 }, { "Xe116", 1.159215810870000e+02 }, - { "Xe117", 1.169203587350000e+02 }, { "Xe118", 1.179161786550000e+02 }, { "Xe119", 1.189154106880000e+02 }, { "Xe120", 1.199117842440000e+02 }, - { "Xe121", 1.209114618290000e+02 }, { "Xe122", 1.219083676320000e+02 }, { "Xe123", 1.229084819100000e+02 }, { "Xe124", 1.239058930030000e+02 }, - { "Xe125", 1.249063954640000e+02 }, { "Xe126", 1.259042736340000e+02 }, { "Xe127", 1.269051837230000e+02 }, { "Xe128", 1.279035312750000e+02 }, - { "Xe129", 1.289047794350000e+02 }, { "Xe130", 1.299035080070000e+02 }, { "Xe131", 1.309050823620000e+02 }, { "Xe132", 1.319041534570000e+02 }, - { "Xe133", 1.329059107220000e+02 }, { "Xe134", 1.339053944640000e+02 }, { "Xe135", 1.349072274950000e+02 }, { "Xe136", 1.359072187940000e+02 }, - { "Xe137", 1.369115621250000e+02 }, { "Xe138", 1.379139544750000e+02 }, { "Xe139", 1.389187929360000e+02 }, { "Xe140", 1.399216409430000e+02 }, - { "Xe141", 1.409266480490000e+02 }, { "Xe142", 1.419297095900000e+02 }, { "Xe143", 1.429351100000000e+02 }, { "Xe144", 1.439385100000000e+02 }, - { "Xe145", 1.449440700000000e+02 }, { "Xe146", 1.459477500000000e+02 }, { "Xe147", 1.469535600000000e+02 }, { "Cs_natural", 1.329054000000000e+02 }, - { "Cs112", 1.119503010000000e+02 }, { "Cs113", 1.129444932740000e+02 }, { "Cs114", 1.139414500000000e+02 }, { "Cs115", 1.149359100000000e+02 }, - { "Cs116", 1.159333670000000e+02 }, { "Cs117", 1.169286707010000e+02 }, { "Cs118", 1.179265594940000e+02 }, { "Cs119", 1.189223773040000e+02 }, - { "Cs120", 1.199206772530000e+02 }, { "Cs121", 1.209172292090000e+02 }, { "Cs122", 1.219161134340000e+02 }, { "Cs123", 1.229129960360000e+02 }, - { "Cs124", 1.239122577980000e+02 }, { "Cs125", 1.249097282700000e+02 }, { "Cs126", 1.259094519770000e+02 }, { "Cs127", 1.269074175250000e+02 }, - { "Cs128", 1.279077488660000e+02 }, { "Cs129", 1.289060644260000e+02 }, { "Cs130", 1.299067085520000e+02 }, { "Cs131", 1.309054639260000e+02 }, - { "Cs132", 1.319064342600000e+02 }, { "Cs133", 1.329054519320000e+02 }, { "Cs134", 1.339067184750000e+02 }, { "Cs135", 1.349059770080000e+02 }, - { "Cs136", 1.359073115760000e+02 }, { "Cs137", 1.369070894730000e+02 }, { "Cs138", 1.379110167040000e+02 }, { "Cs139", 1.389133639990000e+02 }, - { "Cs140", 1.399172823540000e+02 }, { "Cs141", 1.409200457520000e+02 }, { "Cs142", 1.419242989270000e+02 }, { "Cs143", 1.429273517500000e+02 }, - { "Cs144", 1.439320769140000e+02 }, { "Cs145", 1.449355261700000e+02 }, { "Cs146", 1.459402894230000e+02 }, { "Cs147", 1.469441550080000e+02 }, - { "Cs148", 1.479492181530000e+02 }, { "Cs149", 1.489529300000000e+02 }, { "Cs150", 1.499581700000000e+02 }, { "Cs151", 1.509621900000000e+02 }, - { "Ba_natural", 1.373300000000000e+02 }, { "Ba114", 1.139506754050000e+02 }, { "Ba115", 1.149473700000000e+02 }, { "Ba116", 1.159413800000000e+02 }, - { "Ba117", 1.169384990000000e+02 }, { "Ba118", 1.179330400000000e+02 }, { "Ba119", 1.189306596610000e+02 }, { "Ba120", 1.199260449740000e+02 }, - { "Ba121", 1.209240544990000e+02 }, { "Ba122", 1.219199040000000e+02 }, { "Ba123", 1.229187810360000e+02 }, { "Ba124", 1.239150936030000e+02 }, - { "Ba125", 1.249144729120000e+02 }, { "Ba126", 1.259112501770000e+02 }, { "Ba127", 1.269110937970000e+02 }, { "Ba128", 1.279083176980000e+02 }, - { "Ba129", 1.289086794390000e+02 }, { "Ba130", 1.299063208110000e+02 }, { "Ba131", 1.309069411180000e+02 }, { "Ba132", 1.319050612880000e+02 }, - { "Ba133", 1.329060074900000e+02 }, { "Ba134", 1.339045083830000e+02 }, { "Ba135", 1.349056885910000e+02 }, { "Ba136", 1.359045759450000e+02 }, - { "Ba137", 1.369058273840000e+02 }, { "Ba138", 1.379052472370000e+02 }, { "Ba139", 1.389088413410000e+02 }, { "Ba140", 1.399106045050000e+02 }, - { "Ba141", 1.409144110090000e+02 }, { "Ba142", 1.419164534100000e+02 }, { "Ba143", 1.429206267190000e+02 }, { "Ba144", 1.439229528530000e+02 }, - { "Ba145", 1.449276270320000e+02 }, { "Ba146", 1.459302195720000e+02 }, { "Ba147", 1.469349450000000e+02 }, { "Ba148", 1.479377200470000e+02 }, - { "Ba149", 1.489425800000000e+02 }, { "Ba150", 1.499456800000000e+02 }, { "Ba151", 1.509508100000000e+02 }, { "Ba152", 1.519542700000000e+02 }, - { "Ba153", 1.529596100000000e+02 }, { "La_natural", 1.389055000000000e+02 }, { "La117", 1.169500680000000e+02 }, { "La118", 1.179467300000000e+02 }, - { "La119", 1.189409900000000e+02 }, { "La120", 1.199380700000000e+02 }, { "La121", 1.209330100000000e+02 }, { "La122", 1.219307100000000e+02 }, - { "La123", 1.229262400000000e+02 }, { "La124", 1.239245742750000e+02 }, { "La125", 1.249208160340000e+02 }, { "La126", 1.259195126670000e+02 }, - { "La127", 1.269163754480000e+02 }, { "La128", 1.279155851770000e+02 }, { "La129", 1.289126928150000e+02 }, { "La130", 1.299123687240000e+02 }, - { "La131", 1.309100700000000e+02 }, { "La132", 1.319101011450000e+02 }, { "La133", 1.329082180000000e+02 }, { "La134", 1.339085140110000e+02 }, - { "La135", 1.349069768440000e+02 }, { "La136", 1.359076355360000e+02 }, { "La137", 1.369064935980000e+02 }, { "La138", 1.379071119300000e+02 }, - { "La139", 1.389063532670000e+02 }, { "La140", 1.399094776450000e+02 }, { "La141", 1.409109621520000e+02 }, { "La142", 1.419140791300000e+02 }, - { "La143", 1.429160627200000e+02 }, { "La144", 1.439195996470000e+02 }, { "La145", 1.449216454010000e+02 }, { "La146", 1.459257934600000e+02 }, - { "La147", 1.469282352840000e+02 }, { "La148", 1.479322288680000e+02 }, { "La149", 1.489347340000000e+02 }, { "La150", 1.499387700000000e+02 }, - { "La151", 1.509417200000000e+02 }, { "La152", 1.519462500000000e+02 }, { "La153", 1.529496200000000e+02 }, { "La154", 1.539545000000000e+02 }, - { "La155", 1.549583500000000e+02 }, { "Ce_natural", 1.401200000000000e+02 }, { "Ce119", 1.189527600000000e+02 }, { "Ce120", 1.199466400000000e+02 }, - { "Ce121", 1.209434200000000e+02 }, { "Ce122", 1.219379100000000e+02 }, { "Ce123", 1.229354000000000e+02 }, { "Ce124", 1.239304100000000e+02 }, - { "Ce125", 1.249284400000000e+02 }, { "Ce126", 1.259239710000000e+02 }, { "Ce127", 1.269227310000000e+02 }, { "Ce128", 1.279189110000000e+02 }, - { "Ce129", 1.289181020000000e+02 }, { "Ce130", 1.299147360000000e+02 }, { "Ce131", 1.309144220000000e+02 }, { "Ce132", 1.319114604870000e+02 }, - { "Ce133", 1.329115150200000e+02 }, { "Ce134", 1.339089248210000e+02 }, { "Ce135", 1.349091513960000e+02 }, { "Ce136", 1.359071724220000e+02 }, - { "Ce137", 1.369078055770000e+02 }, { "Ce138", 1.379059913210000e+02 }, { "Ce139", 1.389066526510000e+02 }, { "Ce140", 1.399054387060000e+02 }, - { "Ce141", 1.409082762700000e+02 }, { "Ce142", 1.419092442050000e+02 }, { "Ce143", 1.429123859100000e+02 }, { "Ce144", 1.439136473360000e+02 }, - { "Ce145", 1.449172331350000e+02 }, { "Ce146", 1.459187590090000e+02 }, { "Ce147", 1.469226739540000e+02 }, { "Ce148", 1.479244324100000e+02 }, - { "Ce149", 1.489283998830000e+02 }, { "Ce150", 1.499304089310000e+02 }, { "Ce151", 1.509339761960000e+02 }, { "Ce152", 1.519365400000000e+02 }, - { "Ce153", 1.529405800000000e+02 }, { "Ce154", 1.539434200000000e+02 }, { "Ce155", 1.549480400000000e+02 }, { "Ce156", 1.559512600000000e+02 }, - { "Ce157", 1.569563400000000e+02 }, { "Pr_natural", 1.409077000000000e+02 }, { "Pr121", 1.209553640000000e+02 }, { "Pr122", 1.219518100000000e+02 }, - { "Pr123", 1.229459600000000e+02 }, { "Pr124", 1.239429600000000e+02 }, { "Pr125", 1.249378300000000e+02 }, { "Pr126", 1.259353100000000e+02 }, - { "Pr127", 1.269308300000000e+02 }, { "Pr128", 1.279287910000000e+02 }, { "Pr129", 1.289250950000000e+02 }, { "Pr130", 1.299235900000000e+02 }, - { "Pr131", 1.309202590000000e+02 }, { "Pr132", 1.319192550000000e+02 }, { "Pr133", 1.329163305320000e+02 }, { "Pr134", 1.339157117370000e+02 }, - { "Pr135", 1.349131117450000e+02 }, { "Pr136", 1.359126916110000e+02 }, { "Pr137", 1.369107054550000e+02 }, { "Pr138", 1.379107546360000e+02 }, - { "Pr139", 1.389089383990000e+02 }, { "Pr140", 1.399090758740000e+02 }, { "Pr141", 1.409076527690000e+02 }, { "Pr142", 1.419100448060000e+02 }, - { "Pr143", 1.429108169260000e+02 }, { "Pr144", 1.439133052450000e+02 }, { "Pr145", 1.449145117000000e+02 }, { "Pr146", 1.459176443360000e+02 }, - { "Pr147", 1.469189959920000e+02 }, { "Pr148", 1.479221350260000e+02 }, { "Pr149", 1.489237176510000e+02 }, { "Pr150", 1.499266729970000e+02 }, - { "Pr151", 1.509283186180000e+02 }, { "Pr152", 1.519314992250000e+02 }, { "Pr153", 1.529338389050000e+02 }, { "Pr154", 1.539375181530000e+02 }, - { "Pr155", 1.549401200000000e+02 }, { "Pr156", 1.559442700000000e+02 }, { "Pr157", 1.569474300000000e+02 }, { "Pr158", 1.579519800000000e+02 }, - { "Pr159", 1.589555000000000e+02 }, { "Nd_natural", 1.442400000000000e+02 }, { "Nd124", 1.239522300000000e+02 }, { "Nd125", 1.249488800000000e+02 }, - { "Nd126", 1.259432200000000e+02 }, { "Nd127", 1.269405000000000e+02 }, { "Nd128", 1.279353900000000e+02 }, { "Nd129", 1.289331880000000e+02 }, - { "Nd130", 1.299285060000000e+02 }, { "Nd131", 1.309272470000000e+02 }, { "Nd132", 1.319233212370000e+02 }, { "Nd133", 1.329223480000000e+02 }, - { "Nd134", 1.339187901810000e+02 }, { "Nd135", 1.349181811600000e+02 }, { "Nd136", 1.359149760350000e+02 }, { "Nd137", 1.369145671370000e+02 }, - { "Nd138", 1.379119499610000e+02 }, { "Nd139", 1.389119782880000e+02 }, { "Nd140", 1.399095520000000e+02 }, { "Nd141", 1.409096098540000e+02 }, - { "Nd142", 1.419077232970000e+02 }, { "Nd143", 1.429098142900000e+02 }, { "Nd144", 1.439100872740000e+02 }, { "Nd145", 1.449125736360000e+02 }, - { "Nd146", 1.459131169390000e+02 }, { "Nd147", 1.469161004410000e+02 }, { "Nd148", 1.479168932880000e+02 }, { "Nd149", 1.489201488420000e+02 }, - { "Nd150", 1.499208908880000e+02 }, { "Nd151", 1.509238289290000e+02 }, { "Nd152", 1.519246822190000e+02 }, { "Nd153", 1.529276982320000e+02 }, - { "Nd154", 1.539294773070000e+02 }, { "Nd155", 1.549329320000000e+02 }, { "Nd156", 1.559350181140000e+02 }, { "Nd157", 1.569390300000000e+02 }, - { "Nd158", 1.579416000000000e+02 }, { "Nd159", 1.589460900000000e+02 }, { "Nd160", 1.599490900000000e+02 }, { "Nd161", 1.609538800000000e+02 }, - { "Pm_natural", 1.450000000000000e+02 }, { "Pm126", 1.259575200000000e+02 }, { "Pm127", 1.269516300000000e+02 }, { "Pm128", 1.279484200000000e+02 }, - { "Pm129", 1.289431600000000e+02 }, { "Pm130", 1.299404500000000e+02 }, { "Pm131", 1.309358700000000e+02 }, { "Pm132", 1.319337500000000e+02 }, - { "Pm133", 1.329297820000000e+02 }, { "Pm134", 1.339283530000000e+02 }, { "Pm135", 1.349248760000000e+02 }, { "Pm136", 1.359235658290000e+02 }, - { "Pm137", 1.369204794930000e+02 }, { "Pm138", 1.379195482810000e+02 }, { "Pm139", 1.389168040820000e+02 }, { "Pm140", 1.399160417890000e+02 }, - { "Pm141", 1.409135550540000e+02 }, { "Pm142", 1.419128744710000e+02 }, { "Pm143", 1.429109326160000e+02 }, { "Pm144", 1.439125908430000e+02 }, - { "Pm145", 1.449127490230000e+02 }, { "Pm146", 1.459146963050000e+02 }, { "Pm147", 1.469151385450000e+02 }, { "Pm148", 1.479174746180000e+02 }, - { "Pm149", 1.489183341550000e+02 }, { "Pm150", 1.499209835610000e+02 }, { "Pm151", 1.509212069730000e+02 }, { "Pm152", 1.519234967950000e+02 }, - { "Pm153", 1.529241168890000e+02 }, { "Pm154", 1.539264639430000e+02 }, { "Pm155", 1.549281012670000e+02 }, { "Pm156", 1.559310567360000e+02 }, - { "Pm157", 1.569330393690000e+02 }, { "Pm158", 1.579365614070000e+02 }, { "Pm159", 1.589389700000000e+02 }, { "Pm160", 1.599429900000000e+02 }, - { "Pm161", 1.609458600000000e+02 }, { "Pm162", 1.619502900000000e+02 }, { "Pm163", 1.629536800000000e+02 }, { "Sm_natural", 1.504000000000000e+02 }, - { "Sm128", 1.279580800000000e+02 }, { "Sm129", 1.289546400000000e+02 }, { "Sm130", 1.299489200000000e+02 }, { "Sm131", 1.309461100000000e+02 }, - { "Sm132", 1.319406900000000e+02 }, { "Sm133", 1.329386700000000e+02 }, { "Sm134", 1.339339700000000e+02 }, { "Sm135", 1.349325200000000e+02 }, - { "Sm136", 1.359282755270000e+02 }, { "Sm137", 1.369269717460000e+02 }, { "Sm138", 1.379232439610000e+02 }, { "Sm139", 1.389222966050000e+02 }, - { "Sm140", 1.399189946870000e+02 }, { "Sm141", 1.409184764880000e+02 }, { "Sm142", 1.419151976410000e+02 }, { "Sm143", 1.429146283380000e+02 }, - { "Sm144", 1.439119994780000e+02 }, { "Sm145", 1.449134103530000e+02 }, { "Sm146", 1.459130409000000e+02 }, { "Sm147", 1.469148979230000e+02 }, - { "Sm148", 1.479148226740000e+02 }, { "Sm149", 1.489171847350000e+02 }, { "Sm150", 1.499172755390000e+02 }, { "Sm151", 1.509199324090000e+02 }, - { "Sm152", 1.519197324250000e+02 }, { "Sm153", 1.529220973560000e+02 }, { "Sm154", 1.539222092730000e+02 }, { "Sm155", 1.549246401610000e+02 }, - { "Sm156", 1.559255278870000e+02 }, { "Sm157", 1.569283587170000e+02 }, { "Sm158", 1.579299913170000e+02 }, { "Sm159", 1.589332112710000e+02 }, - { "Sm160", 1.599351400000000e+02 }, { "Sm161", 1.609388300000000e+02 }, { "Sm162", 1.619412200000000e+02 }, { "Sm163", 1.629453600000000e+02 }, - { "Sm164", 1.639482800000000e+02 }, { "Sm165", 1.649529800000000e+02 }, { "Eu_natural", 1.519600000000000e+02 }, { "Eu130", 1.299635690000000e+02 }, - { "Eu131", 1.309577530000000e+02 }, { "Eu132", 1.319543700000000e+02 }, { "Eu133", 1.329492400000000e+02 }, { "Eu134", 1.339465100000000e+02 }, - { "Eu135", 1.349418200000000e+02 }, { "Eu136", 1.359396000000000e+02 }, { "Eu137", 1.369355700000000e+02 }, { "Eu138", 1.379337090000000e+02 }, - { "Eu139", 1.389297922800000e+02 }, { "Eu140", 1.399280876070000e+02 }, { "Eu141", 1.409249307200000e+02 }, { "Eu142", 1.419234349450000e+02 }, - { "Eu143", 1.429202975090000e+02 }, { "Eu144", 1.439188168230000e+02 }, { "Eu145", 1.449162652370000e+02 }, { "Eu146", 1.459172058170000e+02 }, - { "Eu147", 1.469167461110000e+02 }, { "Eu148", 1.479180858950000e+02 }, { "Eu149", 1.489179312380000e+02 }, { "Eu150", 1.499197018190000e+02 }, - { "Eu151", 1.509198501610000e+02 }, { "Eu152", 1.519217445340000e+02 }, { "Eu153", 1.529212303390000e+02 }, { "Eu154", 1.539229792370000e+02 }, - { "Eu155", 1.549228932600000e+02 }, { "Eu156", 1.559247522490000e+02 }, { "Eu157", 1.569254236470000e+02 }, { "Eu158", 1.579278453020000e+02 }, - { "Eu159", 1.589290888610000e+02 }, { "Eu160", 1.599319710000000e+02 }, { "Eu161", 1.609336800000000e+02 }, { "Eu162", 1.619370400000000e+02 }, - { "Eu163", 1.629392100000000e+02 }, { "Eu164", 1.639429900000000e+02 }, { "Eu165", 1.649457200000000e+02 }, { "Eu166", 1.659499700000000e+02 }, - { "Eu167", 1.669532100000000e+02 }, { "Gd_natural", 1.572500000000000e+02 }, { "Gd134", 1.339553700000000e+02 }, { "Gd135", 1.349525700000000e+02 }, - { "Gd136", 1.359473400000000e+02 }, { "Gd137", 1.369450200000000e+02 }, { "Gd138", 1.379401200000000e+02 }, { "Gd139", 1.389382400000000e+02 }, - { "Gd140", 1.399336740000000e+02 }, { "Gd141", 1.409321260000000e+02 }, { "Gd142", 1.419281160000000e+02 }, { "Gd143", 1.429267495100000e+02 }, - { "Gd144", 1.439229630000000e+02 }, { "Gd145", 1.449217092520000e+02 }, { "Gd146", 1.459183106080000e+02 }, { "Gd147", 1.469190944200000e+02 }, - { "Gd148", 1.479181145240000e+02 }, { "Gd149", 1.489193409150000e+02 }, { "Gd150", 1.499186588760000e+02 }, { "Gd151", 1.509203484820000e+02 }, - { "Gd152", 1.519197909960000e+02 }, { "Gd153", 1.529217495430000e+02 }, { "Gd154", 1.539208655980000e+02 }, { "Gd155", 1.549226220220000e+02 }, - { "Gd156", 1.559221227430000e+02 }, { "Gd157", 1.569239601350000e+02 }, { "Gd158", 1.579241039120000e+02 }, { "Gd159", 1.589263886580000e+02 }, - { "Gd160", 1.599270541460000e+02 }, { "Gd161", 1.609296692110000e+02 }, { "Gd162", 1.619309847510000e+02 }, { "Gd163", 1.629339900000000e+02 }, - { "Gd164", 1.639358600000000e+02 }, { "Gd165", 1.649393800000000e+02 }, { "Gd166", 1.659416000000000e+02 }, { "Gd167", 1.669455700000000e+02 }, - { "Gd168", 1.679483600000000e+02 }, { "Gd169", 1.689528700000000e+02 }, { "Tb_natural", 1.589254000000000e+02 }, { "Tb136", 1.359613800000000e+02 }, - { "Tb137", 1.369559800000000e+02 }, { "Tb138", 1.379531600000000e+02 }, { "Tb139", 1.389482900000000e+02 }, { "Tb140", 1.399458050490000e+02 }, - { "Tb141", 1.409414480000000e+02 }, { "Tb142", 1.419387440000000e+02 }, { "Tb143", 1.429351210000000e+02 }, { "Tb144", 1.439330450000000e+02 }, - { "Tb145", 1.449292740000000e+02 }, { "Tb146", 1.459272465840000e+02 }, { "Tb147", 1.469240445850000e+02 }, { "Tb148", 1.479242717010000e+02 }, - { "Tb149", 1.489232459090000e+02 }, { "Tb150", 1.499236596860000e+02 }, { "Tb151", 1.509231025430000e+02 }, { "Tb152", 1.519240744380000e+02 }, - { "Tb153", 1.529234345880000e+02 }, { "Tb154", 1.539246780190000e+02 }, { "Tb155", 1.549235052360000e+02 }, { "Tb156", 1.559247472130000e+02 }, - { "Tb157", 1.569240246040000e+02 }, { "Tb158", 1.579254131370000e+02 }, { "Tb159", 1.589253467570000e+02 }, { "Tb160", 1.599271676060000e+02 }, - { "Tb161", 1.609275699190000e+02 }, { "Tb162", 1.619294882340000e+02 }, { "Tb163", 1.629306475360000e+02 }, { "Tb164", 1.639333508380000e+02 }, - { "Tb165", 1.649348800000000e+02 }, { "Tb166", 1.659379919590000e+02 }, { "Tb167", 1.669400500000000e+02 }, { "Tb168", 1.679436400000000e+02 }, - { "Tb169", 1.689462200000000e+02 }, { "Tb170", 1.699502500000000e+02 }, { "Tb171", 1.709533000000000e+02 }, { "Dy_natural", 1.625000000000000e+02 }, - { "Dy138", 1.379624900000000e+02 }, { "Dy139", 1.389595400000000e+02 }, { "Dy140", 1.399540100000000e+02 }, { "Dy141", 1.409513500000000e+02 }, - { "Dy142", 1.419463660000000e+02 }, { "Dy143", 1.429438300000000e+02 }, { "Dy144", 1.439392540000000e+02 }, { "Dy145", 1.449374250000000e+02 }, - { "Dy146", 1.459328453690000e+02 }, { "Dy147", 1.469310915000000e+02 }, { "Dy148", 1.479271498310000e+02 }, { "Dy149", 1.489273047870000e+02 }, - { "Dy150", 1.499255851840000e+02 }, { "Dy151", 1.509261846010000e+02 }, { "Dy152", 1.519247183000000e+02 }, { "Dy153", 1.529257646700000e+02 }, - { "Dy154", 1.539244244570000e+02 }, { "Dy155", 1.549257537750000e+02 }, { "Dy156", 1.559242831100000e+02 }, { "Dy157", 1.569254660950000e+02 }, - { "Dy158", 1.579244094870000e+02 }, { "Dy159", 1.589257392140000e+02 }, { "Dy160", 1.599251975170000e+02 }, { "Dy161", 1.609269333640000e+02 }, - { "Dy162", 1.619267984470000e+02 }, { "Dy163", 1.629287311590000e+02 }, { "Dy164", 1.639291747510000e+02 }, { "Dy165", 1.649317033330000e+02 }, - { "Dy166", 1.659328067410000e+02 }, { "Dy167", 1.669356554620000e+02 }, { "Dy168", 1.679371287690000e+02 }, { "Dy169", 1.689403076140000e+02 }, - { "Dy170", 1.699423900000000e+02 }, { "Dy171", 1.709462000000000e+02 }, { "Dy172", 1.719487600000000e+02 }, { "Dy173", 1.729530000000000e+02 }, - { "Ho_natural", 1.649304000000000e+02 }, { "Ho140", 1.399685390000000e+02 }, { "Ho141", 1.409630980000000e+02 }, { "Ho142", 1.419597700000000e+02 }, - { "Ho143", 1.429546100000000e+02 }, { "Ho144", 1.439514800000000e+02 }, { "Ho145", 1.449472000000000e+02 }, { "Ho146", 1.459446400000000e+02 }, - { "Ho147", 1.469400560000000e+02 }, { "Ho148", 1.479377180000000e+02 }, { "Ho149", 1.489337747710000e+02 }, { "Ho150", 1.499334961820000e+02 }, - { "Ho151", 1.509316881420000e+02 }, { "Ho152", 1.519317137140000e+02 }, { "Ho153", 1.529301987890000e+02 }, { "Ho154", 1.539306015790000e+02 }, - { "Ho155", 1.549291034910000e+02 }, { "Ho156", 1.559298390000000e+02 }, { "Ho157", 1.569282561880000e+02 }, { "Ho158", 1.579289410070000e+02 }, - { "Ho159", 1.589277119590000e+02 }, { "Ho160", 1.599287294780000e+02 }, { "Ho161", 1.609278547760000e+02 }, { "Ho162", 1.619290955040000e+02 }, - { "Ho163", 1.629287339030000e+02 }, { "Ho164", 1.639302335070000e+02 }, { "Ho165", 1.649303220700000e+02 }, { "Ho166", 1.659322841620000e+02 }, - { "Ho167", 1.669331326330000e+02 }, { "Ho168", 1.679355157080000e+02 }, { "Ho169", 1.689368722730000e+02 }, { "Ho170", 1.699396189290000e+02 }, - { "Ho171", 1.709414651500000e+02 }, { "Ho172", 1.719448200000000e+02 }, { "Ho173", 1.729472900000000e+02 }, { "Ho174", 1.739511500000000e+02 }, - { "Ho175", 1.749540500000000e+02 }, { "Er_natural", 1.672600000000000e+02 }, { "Er143", 1.429663400000000e+02 }, { "Er144", 1.439603800000000e+02 }, - { "Er145", 1.449573900000000e+02 }, { "Er146", 1.459520000000000e+02 }, { "Er147", 1.469494900000000e+02 }, { "Er148", 1.479445500000000e+02 }, - { "Er149", 1.489423060000000e+02 }, { "Er150", 1.499379138390000e+02 }, { "Er151", 1.509374489030000e+02 }, { "Er152", 1.519350503890000e+02 }, - { "Er153", 1.529350634920000e+02 }, { "Er154", 1.539327830810000e+02 }, { "Er155", 1.549332089490000e+02 }, { "Er156", 1.559310646980000e+02 }, - { "Er157", 1.569319160000000e+02 }, { "Er158", 1.579298934740000e+02 }, { "Er159", 1.589306840660000e+02 }, { "Er160", 1.599290832920000e+02 }, - { "Er161", 1.609299953090000e+02 }, { "Er162", 1.619287782640000e+02 }, { "Er163", 1.629300327490000e+02 }, { "Er164", 1.639292002290000e+02 }, - { "Er165", 1.649307260030000e+02 }, { "Er166", 1.659302930610000e+02 }, { "Er167", 1.669320481590000e+02 }, { "Er168", 1.679323702240000e+02 }, - { "Er169", 1.689345903640000e+02 }, { "Er170", 1.699354643120000e+02 }, { "Er171", 1.709380298080000e+02 }, { "Er172", 1.719393561130000e+02 }, - { "Er173", 1.729424000000000e+02 }, { "Er174", 1.739442300000000e+02 }, { "Er175", 1.749477700000000e+02 }, { "Er176", 1.759500800000000e+02 }, - { "Er177", 1.769540500000000e+02 }, { "Tm_natural", 1.689342000000000e+02 }, { "Tm145", 1.449700730000000e+02 }, { "Tm146", 1.459664250000000e+02 }, - { "Tm147", 1.469609610000000e+02 }, { "Tm148", 1.479578400000000e+02 }, { "Tm149", 1.489527200000000e+02 }, { "Tm150", 1.499499600000000e+02 }, - { "Tm151", 1.509454834900000e+02 }, { "Tm152", 1.519444220000000e+02 }, { "Tm153", 1.529420121120000e+02 }, { "Tm154", 1.539415678080000e+02 }, - { "Tm155", 1.549391994590000e+02 }, { "Tm156", 1.559389799330000e+02 }, { "Tm157", 1.569369730000000e+02 }, { "Tm158", 1.579369795250000e+02 }, - { "Tm159", 1.589349750000000e+02 }, { "Tm160", 1.599352628010000e+02 }, { "Tm161", 1.609335490000000e+02 }, { "Tm162", 1.619339946820000e+02 }, - { "Tm163", 1.629326511240000e+02 }, { "Tm164", 1.639335600000000e+02 }, { "Tm165", 1.649324354920000e+02 }, { "Tm166", 1.659335541310000e+02 }, - { "Tm167", 1.669328516220000e+02 }, { "Tm168", 1.679341727760000e+02 }, { "Tm169", 1.689342132500000e+02 }, { "Tm170", 1.699358013970000e+02 }, - { "Tm171", 1.709364294400000e+02 }, { "Tm172", 1.719384000440000e+02 }, { "Tm173", 1.729396036070000e+02 }, { "Tm174", 1.739421686050000e+02 }, - { "Tm175", 1.749438368530000e+02 }, { "Tm176", 1.759469946850000e+02 }, { "Tm177", 1.769490400000000e+02 }, { "Tm178", 1.779526400000000e+02 }, - { "Tm179", 1.789553400000000e+02 }, { "Yb_natural", 1.730400000000000e+02 }, { "Yb148", 1.479674200000000e+02 }, { "Yb149", 1.489640400000000e+02 }, - { "Yb150", 1.499584200000000e+02 }, { "Yb151", 1.509554007690000e+02 }, { "Yb152", 1.519502889190000e+02 }, { "Yb153", 1.529494800000000e+02 }, - { "Yb154", 1.539463939280000e+02 }, { "Yb155", 1.549457823320000e+02 }, { "Yb156", 1.559428182150000e+02 }, { "Yb157", 1.569426278480000e+02 }, - { "Yb158", 1.579398656170000e+02 }, { "Yb159", 1.589400500990000e+02 }, { "Yb160", 1.599375523440000e+02 }, { "Yb161", 1.609379016780000e+02 }, - { "Yb162", 1.619357682100000e+02 }, { "Yb163", 1.629363343050000e+02 }, { "Yb164", 1.639344894160000e+02 }, { "Yb165", 1.649352790000000e+02 }, - { "Yb166", 1.659338820420000e+02 }, { "Yb167", 1.669349496050000e+02 }, { "Yb168", 1.679338968950000e+02 }, { "Yb169", 1.689351898020000e+02 }, - { "Yb170", 1.699347618370000e+02 }, { "Yb171", 1.709363257990000e+02 }, { "Yb172", 1.719363814690000e+02 }, { "Yb173", 1.729382107870000e+02 }, - { "Yb174", 1.739388620890000e+02 }, { "Yb175", 1.749412764500000e+02 }, { "Yb176", 1.759425716830000e+02 }, { "Yb177", 1.769452608220000e+02 }, - { "Yb178", 1.779466466800000e+02 }, { "Yb179", 1.789501700000000e+02 }, { "Yb180", 1.799523300000000e+02 }, { "Yb181", 1.809561500000000e+02 }, - { "Lu_natural", 1.749670000000000e+02 }, { "Lu150", 1.499732280000000e+02 }, { "Lu151", 1.509675770000000e+02 }, { "Lu152", 1.519641200000000e+02 }, - { "Lu153", 1.529587673310000e+02 }, { "Lu154", 1.539575220000000e+02 }, { "Lu155", 1.549543162160000e+02 }, { "Lu156", 1.559530325230000e+02 }, - { "Lu157", 1.569500983000000e+02 }, { "Lu158", 1.579493132830000e+02 }, { "Lu159", 1.589466287760000e+02 }, { "Lu160", 1.599460330000000e+02 }, - { "Lu161", 1.609435720000000e+02 }, { "Lu162", 1.619432772880000e+02 }, { "Lu163", 1.629411790000000e+02 }, { "Lu164", 1.639413390000000e+02 }, - { "Lu165", 1.649394067240000e+02 }, { "Lu166", 1.659398590000000e+02 }, { "Lu167", 1.669382700000000e+02 }, { "Lu168", 1.679387391110000e+02 }, - { "Lu169", 1.689376514390000e+02 }, { "Lu170", 1.699384749680000e+02 }, { "Lu171", 1.709379131360000e+02 }, { "Lu172", 1.719390856690000e+02 }, - { "Lu173", 1.729389306020000e+02 }, { "Lu174", 1.739403374800000e+02 }, { "Lu175", 1.749407718190000e+02 }, { "Lu176", 1.759426863100000e+02 }, - { "Lu177", 1.769437580550000e+02 }, { "Lu178", 1.779459545590000e+02 }, { "Lu179", 1.789473274430000e+02 }, { "Lu180", 1.799498811600000e+02 }, - { "Lu181", 1.809519700000000e+02 }, { "Lu182", 1.819550400000000e+02 }, { "Lu183", 1.829575700000000e+02 }, { "Lu184", 1.839609100000000e+02 }, - { "Hf_natural", 1.784900000000000e+02 }, { "Hf153", 1.529706900000000e+02 }, { "Hf154", 1.539648600000000e+02 }, { "Hf155", 1.549633900000000e+02 }, - { "Hf156", 1.559593640250000e+02 }, { "Hf157", 1.569583960000000e+02 }, { "Hf158", 1.579547993660000e+02 }, { "Hf159", 1.589539948700000e+02 }, - { "Hf160", 1.599506843790000e+02 }, { "Hf161", 1.609502748440000e+02 }, { "Hf162", 1.619472104980000e+02 }, { "Hf163", 1.629470890000000e+02 }, - { "Hf164", 1.639443672840000e+02 }, { "Hf165", 1.649445670000000e+02 }, { "Hf166", 1.659421800000000e+02 }, { "Hf167", 1.669426000000000e+02 }, - { "Hf168", 1.679405680000000e+02 }, { "Hf169", 1.689412590000000e+02 }, { "Hf170", 1.699396090000000e+02 }, { "Hf171", 1.709404920000000e+02 }, - { "Hf172", 1.719394483010000e+02 }, { "Hf173", 1.729405130000000e+02 }, { "Hf174", 1.739400461780000e+02 }, { "Hf175", 1.749415091810000e+02 }, - { "Hf176", 1.759414086310000e+02 }, { "Hf177", 1.769432206510000e+02 }, { "Hf178", 1.779436987660000e+02 }, { "Hf179", 1.789458161450000e+02 }, - { "Hf180", 1.799465499530000e+02 }, { "Hf181", 1.809491012460000e+02 }, { "Hf182", 1.819505540960000e+02 }, { "Hf183", 1.829535304390000e+02 }, - { "Hf184", 1.839554465150000e+02 }, { "Hf185", 1.849588200000000e+02 }, { "Hf186", 1.859608900000000e+02 }, { "Hf187", 1.869645900000000e+02 }, - { "Hf188", 1.879668500000000e+02 }, { "Ta_natural", 1.809479000000000e+02 }, { "Ta155", 1.549745920000000e+02 }, { "Ta156", 1.559723030000000e+02 }, - { "Ta157", 1.569681924450000e+02 }, { "Ta158", 1.579666990000000e+02 }, { "Ta159", 1.589630181730000e+02 }, { "Ta160", 1.599614860560000e+02 }, - { "Ta161", 1.609584170000000e+02 }, { "Ta162", 1.619572918590000e+02 }, { "Ta163", 1.629543302710000e+02 }, { "Ta164", 1.639535340000000e+02 }, - { "Ta165", 1.649507725140000e+02 }, { "Ta166", 1.659505120000000e+02 }, { "Ta167", 1.669480930000000e+02 }, { "Ta168", 1.679480470000000e+02 }, - { "Ta169", 1.689460110000000e+02 }, { "Ta170", 1.699461750000000e+02 }, { "Ta171", 1.709444760000000e+02 }, { "Ta172", 1.719448950000000e+02 }, - { "Ta173", 1.729437500000000e+02 }, { "Ta174", 1.739444540000000e+02 }, { "Ta175", 1.749437370000000e+02 }, { "Ta176", 1.759448570000000e+02 }, - { "Ta177", 1.769444724030000e+02 }, { "Ta178", 1.779457782210000e+02 }, { "Ta179", 1.789459295350000e+02 }, { "Ta180", 1.799474648310000e+02 }, - { "Ta181", 1.809479957630000e+02 }, { "Ta182", 1.819501518490000e+02 }, { "Ta183", 1.829513726160000e+02 }, { "Ta184", 1.839540079660000e+02 }, - { "Ta185", 1.849555593750000e+02 }, { "Ta186", 1.859585520230000e+02 }, { "Ta187", 1.869605300000000e+02 }, { "Ta188", 1.879637000000000e+02 }, - { "Ta189", 1.889658300000000e+02 }, { "Ta190", 1.899692300000000e+02 }, { "W_natural", 1.838500000000000e+02 }, { "W158", 1.579745620000000e+02 }, - { "W159", 1.589729180000000e+02 }, { "W160", 1.599684788050000e+02 }, { "W161", 1.609673570000000e+02 }, { "W162", 1.619634974170000e+02 }, - { "W163", 1.629625235420000e+02 }, { "W164", 1.639589543820000e+02 }, { "W165", 1.649582799490000e+02 }, { "W166", 1.659550272530000e+02 }, - { "W167", 1.669548160140000e+02 }, { "W168", 1.679518083940000e+02 }, { "W169", 1.689517787900000e+02 }, { "W170", 1.699492284820000e+02 }, - { "W171", 1.709494510000000e+02 }, { "W172", 1.719472920000000e+02 }, { "W173", 1.729476890000000e+02 }, { "W174", 1.739460790000000e+02 }, - { "W175", 1.749467170000000e+02 }, { "W176", 1.759456340000000e+02 }, { "W177", 1.769466430000000e+02 }, { "W178", 1.779458762360000e+02 }, - { "W179", 1.789470704470000e+02 }, { "W180", 1.799467044590000e+02 }, { "W181", 1.809481972480000e+02 }, { "W182", 1.819482041560000e+02 }, - { "W183", 1.829502229510000e+02 }, { "W184", 1.839509311880000e+02 }, { "W185", 1.849534192640000e+02 }, { "W186", 1.859543641270000e+02 }, - { "W187", 1.869571604660000e+02 }, { "W188", 1.879584891050000e+02 }, { "W189", 1.889619128680000e+02 }, { "W190", 1.899631813780000e+02 }, - { "W191", 1.909666000000000e+02 }, { "W192", 1.919681700000000e+02 }, { "Re_natural", 1.862070000000000e+02 }, { "Re160", 1.599821150000000e+02 }, - { "Re161", 1.609775891190000e+02 }, { "Re162", 1.619760020000000e+02 }, { "Re163", 1.629720805350000e+02 }, { "Re164", 1.639703230000000e+02 }, - { "Re165", 1.649670885570000e+02 }, { "Re166", 1.659658080000000e+02 }, { "Re167", 1.669626010000000e+02 }, { "Re168", 1.679615726080000e+02 }, - { "Re169", 1.689587910960000e+02 }, { "Re170", 1.699582200710000e+02 }, { "Re171", 1.709557160000000e+02 }, { "Re172", 1.719554229610000e+02 }, - { "Re173", 1.729532430000000e+02 }, { "Re174", 1.739531150000000e+02 }, { "Re175", 1.749513810000000e+02 }, { "Re176", 1.759516230000000e+02 }, - { "Re177", 1.769503280000000e+02 }, { "Re178", 1.779509890000000e+02 }, { "Re179", 1.789499876410000e+02 }, { "Re180", 1.799507890840000e+02 }, - { "Re181", 1.809500679160000e+02 }, { "Re182", 1.819512100800000e+02 }, { "Re183", 1.829508198410000e+02 }, { "Re184", 1.839525207560000e+02 }, - { "Re185", 1.849529549820000e+02 }, { "Re186", 1.859549860840000e+02 }, { "Re187", 1.869557531090000e+02 }, { "Re188", 1.879581144380000e+02 }, - { "Re189", 1.889592290070000e+02 }, { "Re190", 1.899618179770000e+02 }, { "Re191", 1.909631252420000e+02 }, { "Re192", 1.919659600000000e+02 }, - { "Re193", 1.929674700000000e+02 }, { "Re194", 1.939704200000000e+02 }, { "Os_natural", 1.902000000000000e+02 }, { "Os162", 1.619844310000000e+02 }, - { "Os163", 1.629826900000000e+02 }, { "Os164", 1.639780356490000e+02 }, { "Os165", 1.649767620000000e+02 }, { "Os166", 1.659726907530000e+02 }, - { "Os167", 1.669715479690000e+02 }, { "Os168", 1.679678036780000e+02 }, { "Os169", 1.689670192700000e+02 }, { "Os170", 1.699635770280000e+02 }, - { "Os171", 1.709631848190000e+02 }, { "Os172", 1.719600233030000e+02 }, { "Os173", 1.729598084090000e+02 }, { "Os174", 1.739570622020000e+02 }, - { "Os175", 1.749569458350000e+02 }, { "Os176", 1.759548060000000e+02 }, { "Os177", 1.769549653240000e+02 }, { "Os178", 1.779532512410000e+02 }, - { "Os179", 1.789538160170000e+02 }, { "Os180", 1.799523788030000e+02 }, { "Os181", 1.809532440000000e+02 }, { "Os182", 1.819521101860000e+02 }, - { "Os183", 1.829531261020000e+02 }, { "Os184", 1.839524890710000e+02 }, { "Os185", 1.849540422650000e+02 }, { "Os186", 1.859538381580000e+02 }, - { "Os187", 1.869557504580000e+02 }, { "Os188", 1.879558382280000e+02 }, { "Os189", 1.889581474700000e+02 }, { "Os190", 1.899584470480000e+02 }, - { "Os191", 1.909609297180000e+02 }, { "Os192", 1.919614806900000e+02 }, { "Os193", 1.929641515630000e+02 }, { "Os194", 1.939651820830000e+02 }, - { "Os195", 1.949681266610000e+02 }, { "Os196", 1.959696393330000e+02 }, { "Ir_natural", 1.922200000000000e+02 }, { "Ir164", 1.639922010000000e+02 }, - { "Ir165", 1.649875200000000e+02 }, { "Ir166", 1.659858240000000e+02 }, { "Ir167", 1.669816651560000e+02 }, { "Ir168", 1.679798810000000e+02 }, - { "Ir169", 1.689762949420000e+02 }, { "Ir170", 1.699749650000000e+02 }, { "Ir171", 1.709716260420000e+02 }, { "Ir172", 1.719704560000000e+02 }, - { "Ir173", 1.729675017390000e+02 }, { "Ir174", 1.739668610450000e+02 }, { "Ir175", 1.749641128950000e+02 }, { "Ir176", 1.759636486880000e+02 }, - { "Ir177", 1.769613015000000e+02 }, { "Ir178", 1.779610820000000e+02 }, { "Ir179", 1.789591222660000e+02 }, { "Ir180", 1.799592294460000e+02 }, - { "Ir181", 1.809576252970000e+02 }, { "Ir182", 1.819580762960000e+02 }, { "Ir183", 1.829568464580000e+02 }, { "Ir184", 1.839574760000000e+02 }, - { "Ir185", 1.849566980000000e+02 }, { "Ir186", 1.859579461040000e+02 }, { "Ir187", 1.869573633610000e+02 }, { "Ir188", 1.879588531210000e+02 }, - { "Ir189", 1.889587189350000e+02 }, { "Ir190", 1.899605459680000e+02 }, { "Ir191", 1.909605940460000e+02 }, { "Ir192", 1.919626050120000e+02 }, - { "Ir193", 1.929629264300000e+02 }, { "Ir194", 1.939650783780000e+02 }, { "Ir195", 1.949659795730000e+02 }, { "Ir196", 1.959683965420000e+02 }, - { "Ir197", 1.969696532850000e+02 }, { "Ir198", 1.979722800000000e+02 }, { "Ir199", 1.989738045830000e+02 }, { "Pt_natural", 1.950900000000000e+02 }, - { "Pt166", 1.659948550000000e+02 }, { "Pt167", 1.669929790000000e+02 }, { "Pt168", 1.679881507420000e+02 }, { "Pt169", 1.689867150000000e+02 }, - { "Pt170", 1.699824952890000e+02 }, { "Pt171", 1.709812445420000e+02 }, { "Pt172", 1.719773471280000e+02 }, { "Pt173", 1.729764447540000e+02 }, - { "Pt174", 1.739728187670000e+02 }, { "Pt175", 1.749724205520000e+02 }, { "Pt176", 1.759689446220000e+02 }, { "Pt177", 1.769684694810000e+02 }, - { "Pt178", 1.779656487240000e+02 }, { "Pt179", 1.789653634040000e+02 }, { "Pt180", 1.799630314770000e+02 }, { "Pt181", 1.809630972850000e+02 }, - { "Pt182", 1.819611706560000e+02 }, { "Pt183", 1.829615967030000e+02 }, { "Pt184", 1.839599222510000e+02 }, { "Pt185", 1.849606190000000e+02 }, - { "Pt186", 1.859593508130000e+02 }, { "Pt187", 1.869605870000000e+02 }, { "Pt188", 1.879593953910000e+02 }, { "Pt189", 1.889608336860000e+02 }, - { "Pt190", 1.899599316550000e+02 }, { "Pt191", 1.909616766610000e+02 }, { "Pt192", 1.919610380050000e+02 }, { "Pt193", 1.929629874010000e+02 }, - { "Pt194", 1.939626802530000e+02 }, { "Pt195", 1.949647911340000e+02 }, { "Pt196", 1.959649515210000e+02 }, { "Pt197", 1.969673401820000e+02 }, - { "Pt198", 1.979678927900000e+02 }, { "Pt199", 1.989705930940000e+02 }, { "Pt200", 1.999714406770000e+02 }, { "Pt201", 2.009745128680000e+02 }, - { "Pt202", 2.019757400000000e+02 }, { "Au_natural", 1.969665000000000e+02 }, { "Au169", 1.689980800000000e+02 }, { "Au170", 1.699961220000000e+02 }, - { "Au171", 1.709918788810000e+02 }, { "Au172", 1.719900350000000e+02 }, { "Au173", 1.729862373800000e+02 }, { "Au174", 1.739847610000000e+02 }, - { "Au175", 1.749812741070000e+02 }, { "Au176", 1.759800990000000e+02 }, { "Au177", 1.769768649080000e+02 }, { "Au178", 1.779760319200000e+02 }, - { "Au179", 1.789732128120000e+02 }, { "Au180", 1.799725211240000e+02 }, { "Au181", 1.809700790480000e+02 }, { "Au182", 1.819696178740000e+02 }, - { "Au183", 1.829675930340000e+02 }, { "Au184", 1.839674515240000e+02 }, { "Au185", 1.849657894110000e+02 }, { "Au186", 1.859659527030000e+02 }, - { "Au187", 1.869645675410000e+02 }, { "Au188", 1.879653236610000e+02 }, { "Au189", 1.889639482860000e+02 }, { "Au190", 1.899647003390000e+02 }, - { "Au191", 1.909637042250000e+02 }, { "Au192", 1.919648129530000e+02 }, { "Au193", 1.929641497150000e+02 }, { "Au194", 1.939653652500000e+02 }, - { "Au195", 1.949650346400000e+02 }, { "Au196", 1.959665698130000e+02 }, { "Au197", 1.969665686620000e+02 }, { "Au198", 1.979682423030000e+02 }, - { "Au199", 1.989687651930000e+02 }, { "Au200", 1.999707256470000e+02 }, { "Au201", 2.009716572400000e+02 }, { "Au202", 2.019738058380000e+02 }, - { "Au203", 2.029751545420000e+02 }, { "Au204", 2.039777240000000e+02 }, { "Au205", 2.049798700000000e+02 }, { "Hg_natural", 2.005900000000000e+02 }, - { "Hg171", 1.710037600000000e+02 }, { "Hg172", 1.719988326860000e+02 }, { "Hg173", 1.729972420000000e+02 }, { "Hg174", 1.739928636950000e+02 }, - { "Hg175", 1.749914232700000e+02 }, { "Hg176", 1.759873545800000e+02 }, { "Hg177", 1.769862791580000e+02 }, { "Hg178", 1.779824831430000e+02 }, - { "Hg179", 1.789818338610000e+02 }, { "Hg180", 1.799782663940000e+02 }, { "Hg181", 1.809778193110000e+02 }, { "Hg182", 1.819746899640000e+02 }, - { "Hg183", 1.829744498410000e+02 }, { "Hg184", 1.839717130510000e+02 }, { "Hg185", 1.849718990860000e+02 }, { "Hg186", 1.859693617900000e+02 }, - { "Hg187", 1.869698142360000e+02 }, { "Hg188", 1.879675770490000e+02 }, { "Hg189", 1.889681900340000e+02 }, { "Hg190", 1.899663224490000e+02 }, - { "Hg191", 1.909671571050000e+02 }, { "Hg192", 1.919656343270000e+02 }, { "Hg193", 1.929666654210000e+02 }, { "Hg194", 1.939654394090000e+02 }, - { "Hg195", 1.949667201130000e+02 }, { "Hg196", 1.959658326490000e+02 }, { "Hg197", 1.969672129080000e+02 }, { "Hg198", 1.979667690320000e+02 }, - { "Hg199", 1.989682799320000e+02 }, { "Hg200", 1.999683260040000e+02 }, { "Hg201", 2.009703022680000e+02 }, { "Hg202", 2.019706430110000e+02 }, - { "Hg203", 2.029728724840000e+02 }, { "Hg204", 2.039734939330000e+02 }, { "Hg205", 2.049760733860000e+02 }, { "Hg206", 2.059775140660000e+02 }, - { "Hg207", 2.069825885450000e+02 }, { "Hg208", 2.079859400000000e+02 }, { "Hg209", 2.089910400000000e+02 }, { "Hg210", 2.099945100000000e+02 }, - { "Tl_natural", 2.043700000000000e+02 }, { "Tl176", 1.760005900000000e+02 }, { "Tl177", 1.769964272860000e+02 }, { "Tl178", 1.779948970000000e+02 }, - { "Tl179", 1.789910890820000e+02 }, { "Tl180", 1.799899060000000e+02 }, { "Tl181", 1.809862574470000e+02 }, { "Tl182", 1.819856671040000e+02 }, - { "Tl183", 1.829821928020000e+02 }, { "Tl184", 1.839818731220000e+02 }, { "Tl185", 1.849787913050000e+02 }, { "Tl186", 1.859783250000000e+02 }, - { "Tl187", 1.869759058970000e+02 }, { "Tl188", 1.879760097820000e+02 }, { "Tl189", 1.889735884280000e+02 }, { "Tl190", 1.899738771490000e+02 }, - { "Tl191", 1.909717861540000e+02 }, { "Tl192", 1.919722250000000e+02 }, { "Tl193", 1.929706720000000e+02 }, { "Tl194", 1.939712000000000e+02 }, - { "Tl195", 1.949697743350000e+02 }, { "Tl196", 1.959704811510000e+02 }, { "Tl197", 1.969695745110000e+02 }, { "Tl198", 1.979704834950000e+02 }, - { "Tl199", 1.989698770000000e+02 }, { "Tl200", 1.999709626720000e+02 }, { "Tl201", 2.009708188910000e+02 }, { "Tl202", 2.019721058080000e+02 }, - { "Tl203", 2.029723442200000e+02 }, { "Tl204", 2.039738635220000e+02 }, { "Tl205", 2.049744275410000e+02 }, { "Tl206", 2.059761103200000e+02 }, - { "Tl207", 2.069774194290000e+02 }, { "Tl208", 2.079820187000000e+02 }, { "Tl209", 2.089853589520000e+02 }, { "Tl210", 2.099900736890000e+02 }, - { "Tl211", 2.109934770000000e+02 }, { "Tl212", 2.119982280000000e+02 }, { "Pb_natural", 2.072000000000000e+02 }, { "Pb178", 1.780038301910000e+02 }, - { "Pb179", 1.790021500000000e+02 }, { "Pb180", 1.799979181730000e+02 }, { "Pb181", 1.809966239580000e+02 }, { "Pb182", 1.819926718420000e+02 }, - { "Pb183", 1.829918746290000e+02 }, { "Pb184", 1.839881423390000e+02 }, { "Pb185", 1.849876099440000e+02 }, { "Pb186", 1.859842389450000e+02 }, - { "Pb187", 1.869839183700000e+02 }, { "Pb188", 1.879808743380000e+02 }, { "Pb189", 1.889808070000000e+02 }, { "Pb190", 1.899780815170000e+02 }, - { "Pb191", 1.909782650000000e+02 }, { "Pb192", 1.919757851710000e+02 }, { "Pb193", 1.929761732340000e+02 }, { "Pb194", 1.939740120700000e+02 }, - { "Pb195", 1.949745420500000e+02 }, { "Pb196", 1.959727741090000e+02 }, { "Pb197", 1.969734311240000e+02 }, { "Pb198", 1.979720339590000e+02 }, - { "Pb199", 1.989729166500000e+02 }, { "Pb200", 1.999718266750000e+02 }, { "Pb201", 2.009728845110000e+02 }, { "Pb202", 2.019721591330000e+02 }, - { "Pb203", 2.029733905210000e+02 }, { "Pb204", 2.039730435890000e+02 }, { "Pb205", 2.049744817550000e+02 }, { "Pb206", 2.059744652780000e+02 }, - { "Pb207", 2.069758968870000e+02 }, { "Pb208", 2.079766520710000e+02 }, { "Pb209", 2.089810901200000e+02 }, { "Pb210", 2.099841885270000e+02 }, - { "Pb211", 2.109887369640000e+02 }, { "Pb212", 2.119918975430000e+02 }, { "Pb213", 2.129965814990000e+02 }, { "Pb214", 2.139998054080000e+02 }, - { "Pb215", 2.150048070000000e+02 }, { "Bi_natural", 2.089804000000000e+02 }, { "Bi184", 1.840011240000000e+02 }, { "Bi185", 1.849976250000000e+02 }, - { "Bi186", 1.859965976250000e+02 }, { "Bi187", 1.869931578350000e+02 }, { "Bi188", 1.879922651540000e+02 }, { "Bi189", 1.889891990120000e+02 }, - { "Bi190", 1.899882951290000e+02 }, { "Bi191", 1.909857861190000e+02 }, { "Bi192", 1.919854579540000e+02 }, { "Bi193", 1.929829597710000e+02 }, - { "Bi194", 1.939828339600000e+02 }, { "Bi195", 1.949806507370000e+02 }, { "Bi196", 1.959806665090000e+02 }, { "Bi197", 1.969788644540000e+02 }, - { "Bi198", 1.979792060000000e+02 }, { "Bi199", 1.989776719610000e+02 }, { "Bi200", 1.999781318290000e+02 }, { "Bi201", 2.009770090360000e+02 }, - { "Bi202", 2.019777423240000e+02 }, { "Bi203", 2.029768760010000e+02 }, { "Bi204", 2.039778127360000e+02 }, { "Bi205", 2.049773893660000e+02 }, - { "Bi206", 2.059784991300000e+02 }, { "Bi207", 2.069784706790000e+02 }, { "Bi208", 2.079797421960000e+02 }, { "Bi209", 2.089803987340000e+02 }, - { "Bi210", 2.099841203710000e+02 }, { "Bi211", 2.109872694600000e+02 }, { "Bi212", 2.119912857240000e+02 }, { "Bi213", 2.129943846660000e+02 }, - { "Bi214", 2.139987115390000e+02 }, { "Bi215", 2.150017697760000e+02 }, { "Bi216", 2.160063059430000e+02 }, { "Bi217", 2.170094700000000e+02 }, - { "Bi218", 2.180143160000000e+02 }, { "Po_natural", 2.090000000000000e+02 }, { "Po188", 1.879994220480000e+02 }, { "Po189", 1.889984805620000e+02 }, - { "Po190", 1.899951011850000e+02 }, { "Po191", 1.909945744850000e+02 }, { "Po192", 1.919913351490000e+02 }, { "Po193", 1.929910252750000e+02 }, - { "Po194", 1.939881856060000e+02 }, { "Po195", 1.949881107280000e+02 }, { "Po196", 1.959855345800000e+02 }, { "Po197", 1.969856596300000e+02 }, - { "Po198", 1.979833886160000e+02 }, { "Po199", 1.989836660630000e+02 }, { "Po200", 1.999817986040000e+02 }, { "Po201", 2.009822597640000e+02 }, - { "Po202", 2.019807575410000e+02 }, { "Po203", 2.029814201030000e+02 }, { "Po204", 2.039803181210000e+02 }, { "Po205", 2.049812033220000e+02 }, - { "Po206", 2.059804810990000e+02 }, { "Po207", 2.069815931730000e+02 }, { "Po208", 2.079812457020000e+02 }, { "Po209", 2.089824304350000e+02 }, - { "Po210", 2.099828736730000e+02 }, { "Po211", 2.109866531540000e+02 }, { "Po212", 2.119888679690000e+02 }, { "Po213", 2.129928572800000e+02 }, - { "Po214", 2.139952013500000e+02 }, { "Po215", 2.149994199880000e+02 }, { "Po216", 2.160019150350000e+02 }, { "Po217", 2.170063347960000e+02 }, - { "Po218", 2.180089730370000e+02 }, { "Po219", 2.190137440000000e+02 }, { "Po220", 2.200166020000000e+02 }, { "At_natural", 2.100000000000000e+02 }, - { "At193", 1.929998431120000e+02 }, { "At194", 1.939987250850000e+02 }, { "At195", 1.949962680980000e+02 }, { "At196", 1.959957880770000e+02 }, - { "At197", 1.969931892150000e+02 }, { "At198", 1.979928372020000e+02 }, { "At199", 1.989905322540000e+02 }, { "At200", 1.999903512640000e+02 }, - { "At201", 2.009884169990000e+02 }, { "At202", 2.019886302360000e+02 }, { "At203", 2.029869419840000e+02 }, { "At204", 2.039872513260000e+02 }, - { "At205", 2.049860744830000e+02 }, { "At206", 2.059866670360000e+02 }, { "At207", 2.069857835020000e+02 }, { "At208", 2.079865899770000e+02 }, - { "At209", 2.089861731430000e+02 }, { "At210", 2.099871477100000e+02 }, { "At211", 2.109874962710000e+02 }, { "At212", 2.119907447710000e+02 }, - { "At213", 2.129929366460000e+02 }, { "At214", 2.139963717330000e+02 }, { "At215", 2.149986525700000e+02 }, { "At216", 2.160024232570000e+02 }, - { "At217", 2.170047188220000e+02 }, { "At218", 2.180086943360000e+02 }, { "At219", 2.190111616910000e+02 }, { "At220", 2.200154076820000e+02 }, - { "At221", 2.210180500000000e+02 }, { "At222", 2.220223300000000e+02 }, { "At223", 2.230251900000000e+02 }, { "Rn_natural", 2.220000000000000e+02 }, - { "Rn195", 1.950054376960000e+02 }, { "Rn196", 1.960021152230000e+02 }, { "Rn197", 1.970015843510000e+02 }, { "Rn198", 1.979986786630000e+02 }, - { "Rn199", 1.989983702970000e+02 }, { "Rn200", 1.999956993000000e+02 }, { "Rn201", 2.009956283350000e+02 }, { "Rn202", 2.019932634920000e+02 }, - { "Rn203", 2.029933866870000e+02 }, { "Rn204", 2.039914287400000e+02 }, { "Rn205", 2.049917187990000e+02 }, { "Rn206", 2.059902141040000e+02 }, - { "Rn207", 2.069907342250000e+02 }, { "Rn208", 2.079896424700000e+02 }, { "Rn209", 2.089904147420000e+02 }, { "Rn210", 2.099896962160000e+02 }, - { "Rn211", 2.109906005230000e+02 }, { "Rn212", 2.119907035290000e+02 }, { "Rn213", 2.129938826680000e+02 }, { "Rn214", 2.139953625540000e+02 }, - { "Rn215", 2.149987454830000e+02 }, { "Rn216", 2.160002743700000e+02 }, { "Rn217", 2.170039276750000e+02 }, { "Rn218", 2.180056012560000e+02 }, - { "Rn219", 2.190094802040000e+02 }, { "Rn220", 2.200113939810000e+02 }, { "Rn221", 2.210155367820000e+02 }, { "Rn222", 2.220175777380000e+02 }, - { "Rn223", 2.230217900000000e+02 }, { "Rn224", 2.240240900000000e+02 }, { "Rn225", 2.250284400000000e+02 }, { "Rn226", 2.260308900000000e+02 }, - { "Rn227", 2.270354070000000e+02 }, { "Rn228", 2.280379860000000e+02 }, { "Fr_natural", 2.230000000000000e+02 }, { "Fr199", 1.990072581470000e+02 }, - { "Fr200", 2.000065724900000e+02 }, { "Fr201", 2.010038608670000e+02 }, { "Fr202", 2.020033728470000e+02 }, { "Fr203", 2.030009246470000e+02 }, - { "Fr204", 2.040006532040000e+02 }, { "Fr205", 2.049985939600000e+02 }, { "Fr206", 2.059986660660000e+02 }, { "Fr207", 2.069969494140000e+02 }, - { "Fr208", 2.079971387830000e+02 }, { "Fr209", 2.089959535550000e+02 }, { "Fr210", 2.099964077380000e+02 }, { "Fr211", 2.109955365440000e+02 }, - { "Fr212", 2.119962022440000e+02 }, { "Fr213", 2.129961890810000e+02 }, { "Fr214", 2.139989711450000e+02 }, { "Fr215", 2.150003414970000e+02 }, - { "Fr216", 2.160031979900000e+02 }, { "Fr217", 2.170046319510000e+02 }, { "Fr218", 2.180075783220000e+02 }, { "Fr219", 2.190092521490000e+02 }, - { "Fr220", 2.200123274050000e+02 }, { "Fr221", 2.210142547620000e+02 }, { "Fr222", 2.220175517300000e+02 }, { "Fr223", 2.230197358570000e+02 }, - { "Fr224", 2.240232499510000e+02 }, { "Fr225", 2.250255654140000e+02 }, { "Fr226", 2.260293862310000e+02 }, { "Fr227", 2.270318359380000e+02 }, - { "Fr228", 2.280357290000000e+02 }, { "Fr229", 2.290384502280000e+02 }, { "Fr230", 2.300425100000000e+02 }, { "Fr231", 2.310454400000000e+02 }, - { "Fr232", 2.320497720000000e+02 }, { "Ra_natural", 2.260000000000000e+02 }, { "Ra202", 2.020098906860000e+02 }, { "Ra203", 2.030092716190000e+02 }, - { "Ra204", 2.040064996680000e+02 }, { "Ra205", 2.050062685700000e+02 }, { "Ra206", 2.060038272700000e+02 }, { "Ra207", 2.070037981050000e+02 }, - { "Ra208", 2.080018399400000e+02 }, { "Ra209", 2.090019913730000e+02 }, { "Ra210", 2.100004949780000e+02 }, { "Ra211", 2.110008979870000e+02 }, - { "Ra212", 2.119997944990000e+02 }, { "Ra213", 2.130003839590000e+02 }, { "Ra214", 2.140001078940000e+02 }, { "Ra215", 2.150027198340000e+02 }, - { "Ra216", 2.160035330350000e+02 }, { "Ra217", 2.170063203270000e+02 }, { "Ra218", 2.180071402300000e+02 }, { "Ra219", 2.190100850780000e+02 }, - { "Ra220", 2.200110283840000e+02 }, { "Ra221", 2.210139173380000e+02 }, { "Ra222", 2.220153745300000e+02 }, { "Ra223", 2.230185021710000e+02 }, - { "Ra224", 2.240202118210000e+02 }, { "Ra225", 2.250236115640000e+02 }, { "Ra226", 2.260254098230000e+02 }, { "Ra227", 2.270291778420000e+02 }, - { "Ra228", 2.280310702920000e+02 }, { "Ra229", 2.290349575770000e+02 }, { "Ra230", 2.300370563940000e+02 }, { "Ra231", 2.310412200000000e+02 }, - { "Ra232", 2.320436380000000e+02 }, { "Ra233", 2.330480600000000e+02 }, { "Ra234", 2.340507040000000e+02 }, { "Ac_natural", 2.270000000000000e+02 }, - { "Ac206", 2.060145049800000e+02 }, { "Ac207", 2.070119497480000e+02 }, { "Ac208", 2.080115515510000e+02 }, { "Ac209", 2.090094948630000e+02 }, - { "Ac210", 2.100094359860000e+02 }, { "Ac211", 2.110077348350000e+02 }, { "Ac212", 2.120078138220000e+02 }, { "Ac213", 2.130066076430000e+02 }, - { "Ac214", 2.140069017980000e+02 }, { "Ac215", 2.150064536250000e+02 }, { "Ac216", 2.160087200750000e+02 }, { "Ac217", 2.170093469140000e+02 }, - { "Ac218", 2.180116414530000e+02 }, { "Ac219", 2.190124203890000e+02 }, { "Ac220", 2.200147629790000e+02 }, { "Ac221", 2.210155912480000e+02 }, - { "Ac222", 2.220178438510000e+02 }, { "Ac223", 2.230191374680000e+02 }, { "Ac224", 2.240217228660000e+02 }, { "Ac225", 2.250232295850000e+02 }, - { "Ac226", 2.260260980890000e+02 }, { "Ac227", 2.270277521270000e+02 }, { "Ac228", 2.280310211120000e+02 }, { "Ac229", 2.290330152430000e+02 }, - { "Ac230", 2.300362941780000e+02 }, { "Ac231", 2.310385587860000e+02 }, { "Ac232", 2.320420274380000e+02 }, { "Ac233", 2.330445500000000e+02 }, - { "Ac234", 2.340484200000000e+02 }, { "Ac235", 2.350512320000000e+02 }, { "Ac236", 2.360552960000000e+02 }, { "Th_natural", 2.320381000000000e+02 }, - { "Th209", 2.090177156820000e+02 }, { "Th210", 2.100150753420000e+02 }, { "Th211", 2.110149284130000e+02 }, { "Th212", 2.120129802880000e+02 }, - { "Th213", 2.130130101400000e+02 }, { "Th214", 2.140114997700000e+02 }, { "Th215", 2.150117303300000e+02 }, { "Th216", 2.160110621150000e+02 }, - { "Th217", 2.170131143280000e+02 }, { "Th218", 2.180132844990000e+02 }, { "Th219", 2.190155368950000e+02 }, { "Th220", 2.200157477620000e+02 }, - { "Th221", 2.210181836740000e+02 }, { "Th222", 2.220184681210000e+02 }, { "Th223", 2.230208114480000e+02 }, { "Th224", 2.240214668950000e+02 }, - { "Th225", 2.250239510210000e+02 }, { "Th226", 2.260249030690000e+02 }, { "Th227", 2.270277040700000e+02 }, { "Th228", 2.280287411270000e+02 }, - { "Th229", 2.290317624300000e+02 }, { "Th230", 2.300331338430000e+02 }, { "Th231", 2.310363043430000e+02 }, { "Th232", 2.320380553250000e+02 }, - { "Th233", 2.330415818430000e+02 }, { "Th234", 2.340436012300000e+02 }, { "Th235", 2.350475100740000e+02 }, { "Th236", 2.360498700000000e+02 }, - { "Th237", 2.370538940000000e+02 }, { "Th238", 2.380564960000000e+02 }, { "Pa_natural", 2.310000000000000e+02 }, { "Pa212", 2.120232041380000e+02 }, - { "Pa213", 2.130211093400000e+02 }, { "Pa214", 2.140209184170000e+02 }, { "Pa215", 2.150191858650000e+02 }, { "Pa216", 2.160191095640000e+02 }, - { "Pa217", 2.170183239860000e+02 }, { "Pa218", 2.180200418890000e+02 }, { "Pa219", 2.190198831430000e+02 }, { "Pa220", 2.200218753030000e+02 }, - { "Pa221", 2.210218779830000e+02 }, { "Pa222", 2.220237420000000e+02 }, { "Pa223", 2.230239622730000e+02 }, { "Pa224", 2.240256257380000e+02 }, - { "Pa225", 2.250261306780000e+02 }, { "Pa226", 2.260279477530000e+02 }, { "Pa227", 2.270288050720000e+02 }, { "Pa228", 2.280310513760000e+02 }, - { "Pa229", 2.290320967930000e+02 }, { "Pa230", 2.300345407540000e+02 }, { "Pa231", 2.310358839900000e+02 }, { "Pa232", 2.320385915920000e+02 }, - { "Pa233", 2.330402472770000e+02 }, { "Pa234", 2.340433080580000e+02 }, { "Pa235", 2.350454436150000e+02 }, { "Pa236", 2.360486812840000e+02 }, - { "Pa237", 2.370511456590000e+02 }, { "Pa238", 2.380545027100000e+02 }, { "Pa239", 2.390572600000000e+02 }, { "Pa240", 2.400609800000000e+02 }, - { "U_natural", 2.380290000000000e+02 }, { "U217", 2.170243687910000e+02 }, { "U218", 2.180235356710000e+02 }, { "U219", 2.190249191600000e+02 }, - { "U220", 2.200247230000000e+02 }, { "U221", 2.210263990000000e+02 }, { "U222", 2.220260860000000e+02 }, { "U223", 2.230277386000000e+02 }, - { "U224", 2.240276047780000e+02 }, { "U225", 2.250293907170000e+02 }, { "U226", 2.260293387020000e+02 }, { "U227", 2.270311563670000e+02 }, - { "U228", 2.280313740060000e+02 }, { "U229", 2.290335059390000e+02 }, { "U230", 2.300339397840000e+02 }, { "U231", 2.310362937040000e+02 }, - { "U232", 2.320371561520000e+02 }, { "U233", 2.330396352070000e+02 }, { "U234", 2.340409520880000e+02 }, { "U235", 2.350439299180000e+02 }, - { "U236", 2.360455680060000e+02 }, { "U237", 2.370487301840000e+02 }, { "U238", 2.380507882470000e+02 }, { "U239", 2.390542932990000e+02 }, - { "U240", 2.400565919880000e+02 }, { "U241", 2.410603300000000e+02 }, { "U242", 2.420629310000000e+02 }, { "Np_natural", 2.370000000000000e+02 }, - { "Np225", 2.250339139330000e+02 }, { "Np226", 2.260351450000000e+02 }, { "Np227", 2.270349567890000e+02 }, { "Np228", 2.280361800000000e+02 }, - { "Np229", 2.290362638080000e+02 }, { "Np230", 2.300378275970000e+02 }, { "Np231", 2.310382450850000e+02 }, { "Np232", 2.320401080000000e+02 }, - { "Np233", 2.330407405460000e+02 }, { "Np234", 2.340428950380000e+02 }, { "Np235", 2.350440632670000e+02 }, { "Np236", 2.360465696000000e+02 }, - { "Np237", 2.370481734440000e+02 }, { "Np238", 2.380509464050000e+02 }, { "Np239", 2.390529390250000e+02 }, { "Np240", 2.400561621820000e+02 }, - { "Np241", 2.410582524310000e+02 }, { "Np242", 2.420616411800000e+02 }, { "Np243", 2.430642790000000e+02 }, { "Np244", 2.440678500000000e+02 }, - { "Pu_natural", 2.440000000000000e+02 }, { "Pu228", 2.280387423280000e+02 }, { "Pu229", 2.290401502120000e+02 }, { "Pu230", 2.300396498860000e+02 }, - { "Pu231", 2.310411011070000e+02 }, { "Pu232", 2.320411870970000e+02 }, { "Pu233", 2.330429973750000e+02 }, { "Pu234", 2.340433170760000e+02 }, - { "Pu235", 2.350452860500000e+02 }, { "Pu236", 2.360460579640000e+02 }, { "Pu237", 2.370484096580000e+02 }, { "Pu238", 2.380495598940000e+02 }, - { "Pu239", 2.390521633810000e+02 }, { "Pu240", 2.400538135450000e+02 }, { "Pu241", 2.410568514560000e+02 }, { "Pu242", 2.420587426110000e+02 }, - { "Pu243", 2.430620030920000e+02 }, { "Pu244", 2.440642039070000e+02 }, { "Pu245", 2.450677471540000e+02 }, { "Pu246", 2.460702046270000e+02 }, - { "Pu247", 2.470740700000000e+02 }, { "Am_natural", 2.430000000000000e+02 }, { "Am231", 2.310455600000000e+02 }, { "Am232", 2.320465900000000e+02 }, - { "Am233", 2.330463480000000e+02 }, { "Am234", 2.340478090000000e+02 }, { "Am235", 2.350479460000000e+02 }, { "Am236", 2.360495790000000e+02 }, - { "Am237", 2.370499960000000e+02 }, { "Am238", 2.380519843240000e+02 }, { "Am239", 2.390530244790000e+02 }, { "Am240", 2.400553001790000e+02 }, - { "Am241", 2.410568291440000e+02 }, { "Am242", 2.420595491590000e+02 }, { "Am243", 2.430613810800000e+02 }, { "Am244", 2.440642848470000e+02 }, - { "Am245", 2.450664521140000e+02 }, { "Am246", 2.460697746190000e+02 }, { "Am247", 2.470720930000000e+02 }, { "Am248", 2.480757520000000e+02 }, - { "Am249", 2.490784800000000e+02 }, { "Cm_natural", 2.470000000000000e+02 }, { "Cm233", 2.330507712320000e+02 }, { "Cm234", 2.340501598410000e+02 }, - { "Cm235", 2.350514340000000e+02 }, { "Cm236", 2.360514130000000e+02 }, { "Cm237", 2.370529010000000e+02 }, { "Cm238", 2.380530286970000e+02 }, - { "Cm239", 2.390549570000000e+02 }, { "Cm240", 2.400555295390000e+02 }, { "Cm241", 2.410576530010000e+02 }, { "Cm242", 2.420588358240000e+02 }, - { "Cm243", 2.430613891140000e+02 }, { "Cm244", 2.440627525780000e+02 }, { "Cm245", 2.450654912490000e+02 }, { "Cm246", 2.460672236620000e+02 }, - { "Cm247", 2.470703535400000e+02 }, { "Cm248", 2.480723485080000e+02 }, { "Cm249", 2.490759534130000e+02 }, { "Cm250", 2.500783569590000e+02 }, - { "Cm251", 2.510822846050000e+02 }, { "Cm252", 2.520848700000000e+02 }, { "Bk_natural", 2.470000000000000e+02 }, { "Bk235", 2.350565800000000e+02 }, - { "Bk236", 2.360573300000000e+02 }, { "Bk237", 2.370570030000000e+02 }, { "Bk238", 2.380582810000000e+02 }, { "Bk239", 2.390582790000000e+02 }, - { "Bk240", 2.400597590000000e+02 }, { "Bk241", 2.410602300000000e+02 }, { "Bk242", 2.420619810000000e+02 }, { "Bk243", 2.430630075720000e+02 }, - { "Bk244", 2.440651807740000e+02 }, { "Bk245", 2.450663616160000e+02 }, { "Bk246", 2.460686729470000e+02 }, { "Bk247", 2.470703070800000e+02 }, - { "Bk248", 2.480730860000000e+02 }, { "Bk249", 2.490749866570000e+02 }, { "Bk250", 2.500783165200000e+02 }, { "Bk251", 2.510807601720000e+02 }, - { "Bk252", 2.520843100000000e+02 }, { "Bk253", 2.530868800000000e+02 }, { "Bk254", 2.540906000000000e+02 }, { "Cf_natural", 2.510000000000000e+02 }, - { "Cf237", 2.370620700000000e+02 }, { "Cf238", 2.380614100000000e+02 }, { "Cf239", 2.390624220000000e+02 }, { "Cf240", 2.400623020000000e+02 }, - { "Cf241", 2.410637260000000e+02 }, { "Cf242", 2.420637015520000e+02 }, { "Cf243", 2.430654270000000e+02 }, { "Cf244", 2.440660006890000e+02 }, - { "Cf245", 2.450680486120000e+02 }, { "Cf246", 2.460688053090000e+02 }, { "Cf247", 2.470710005890000e+02 }, { "Cf248", 2.480721848610000e+02 }, - { "Cf249", 2.490748535370000e+02 }, { "Cf250", 2.500764060660000e+02 }, { "Cf251", 2.510795867880000e+02 }, { "Cf252", 2.520816258460000e+02 }, - { "Cf253", 2.530851331450000e+02 }, { "Cf254", 2.540873229090000e+02 }, { "Cf255", 2.550910460000000e+02 }, { "Cf256", 2.560934400000000e+02 }, - { "Es_natural", 2.520000000000000e+02 }, { "Es120", 1.175000000000000e+02 }, { "Es121", 1.165460000000000e+02 }, { "Es122", 1.185440000000000e+02 }, - { "Es125", 1.175000000000000e+02 }, { "Es240", 2.400689200000000e+02 }, { "Es241", 2.410685380000000e+02 }, { "Es242", 2.420697450000000e+02 }, - { "Es243", 2.430695480000000e+02 }, { "Es244", 2.440708830000000e+02 }, { "Es245", 2.450713240000000e+02 }, { "Es246", 2.460728960000000e+02 }, - { "Es247", 2.470736560000000e+02 }, { "Es248", 2.480754710000000e+02 }, { "Es249", 2.490764110000000e+02 }, { "Es250", 2.500786120000000e+02 }, - { "Es251", 2.510799921420000e+02 }, { "Es252", 2.520829785120000e+02 }, { "Es253", 2.530848246970000e+02 }, { "Es254", 2.540880220210000e+02 }, - { "Es255", 2.550902731220000e+02 }, { "Es256", 2.560935980000000e+02 }, { "Es257", 2.570959790000000e+02 }, { "Es258", 2.580995200000000e+02 }, - { "Fm_natural", 2.570000000000000e+02 }, { "Fm242", 2.420734300000000e+02 }, { "Fm243", 2.430743530000000e+02 }, { "Fm244", 2.440740840000000e+02 }, - { "Fm245", 2.450753850000000e+02 }, { "Fm246", 2.460752990230000e+02 }, { "Fm247", 2.470768470000000e+02 }, { "Fm248", 2.480771947140000e+02 }, - { "Fm249", 2.490790340000000e+02 }, { "Fm250", 2.500795212640000e+02 }, { "Fm251", 2.510815750170000e+02 }, { "Fm252", 2.520824668550000e+02 }, - { "Fm253", 2.530851852360000e+02 }, { "Fm254", 2.540868542200000e+02 }, { "Fm255", 2.550899622020000e+02 }, { "Fm256", 2.560917731170000e+02 }, - { "Fm257", 2.570951047240000e+02 }, { "Fm258", 2.580970760000000e+02 }, { "Fm259", 2.591005950000000e+02 }, { "Fm260", 2.601026780000000e+02 }, - { "Md_natural", 2.580000000000000e+02 }, { "Md245", 2.450808290000000e+02 }, { "Md246", 2.460818860000000e+02 }, { "Md247", 2.470816350000000e+02 }, - { "Md248", 2.480828230000000e+02 }, { "Md249", 2.490830130000000e+02 }, { "Md250", 2.500844200000000e+02 }, { "Md251", 2.510848390000000e+02 }, - { "Md252", 2.520865600000000e+02 }, { "Md253", 2.530872800000000e+02 }, { "Md254", 2.540896560000000e+02 }, { "Md255", 2.550910827050000e+02 }, - { "Md256", 2.560940590250000e+02 }, { "Md257", 2.570955413680000e+02 }, { "Md258", 2.580984313190000e+02 }, { "Md259", 2.591005090000000e+02 }, - { "Md260", 2.601036520000000e+02 }, { "Md261", 2.611057210000000e+02 }, { "Md262", 2.621088650000000e+02 }, { "No_natural", 2.590000000000000e+02 }, - { "No248", 2.480865960000000e+02 }, { "No249", 2.490878330000000e+02 }, { "No250", 2.500875100000000e+02 }, { "No251", 2.510890120000000e+02 }, - { "No252", 2.520889765210000e+02 }, { "No253", 2.530906780000000e+02 }, { "No254", 2.540909552530000e+02 }, { "No255", 2.550932411310000e+02 }, - { "No256", 2.560942826660000e+02 }, { "No257", 2.570968771900000e+02 }, { "No258", 2.580982070000000e+02 }, { "No259", 2.591010310000000e+02 }, - { "No260", 2.601026430000000e+02 }, { "No261", 2.611057490000000e+02 }, { "No262", 2.621073010000000e+02 }, { "No263", 2.631105520000000e+02 }, - { "No264", 2.641123450000000e+02 }, { "Lr_natural", 2.600000000000000e+02 }, { "Lr251", 2.510943600000000e+02 }, { "Lr252", 2.520953710000000e+02 }, - { "Lr253", 2.530952100000000e+02 }, { "Lr254", 2.540964540000000e+02 }, { "Lr255", 2.550966810000000e+02 }, { "Lr256", 2.560986290000000e+02 }, - { "Lr257", 2.570995550000000e+02 }, { "Lr258", 2.581018140000000e+02 }, { "Lr259", 2.591029010000000e+02 }, { "Lr260", 2.601055040000000e+02 }, - { "Lr261", 2.611068830000000e+02 }, { "Lr262", 2.621096340000000e+02 }, { "Lr263", 2.631112930000000e+02 }, { "Lr264", 2.641140380000000e+02 }, - { "Lr265", 2.651158390000000e+02 }, { "Lr266", 2.661193050000000e+02 }, { "Rf_natural", 2.610000000000000e+02 }, { "Rf253", 2.531006890000000e+02 }, - { "Rf254", 2.541001840000000e+02 }, { "Rf255", 2.551013400000000e+02 }, { "Rf256", 2.561011661940000e+02 }, { "Rf257", 2.571029900000000e+02 }, - { "Rf258", 2.581034890000000e+02 }, { "Rf259", 2.591056370000000e+02 }, { "Rf260", 2.601064400000000e+02 }, { "Rf261", 2.611087665560000e+02 }, - { "Rf262", 2.621099250000000e+02 }, { "Rf263", 2.631125470000000e+02 }, { "Rf264", 2.641139850000000e+02 }, { "Rf265", 2.651167040000000e+02 }, - { "Rf266", 2.661179560000000e+02 }, { "Rf267", 2.671215290000000e+02 }, { "Rf268", 2.681236440000000e+02 }, { "Db_natural", 2.620000000000000e+02 }, - { "Db255", 2.551073980000000e+02 }, { "Db256", 2.561081270000000e+02 }, { "Db257", 2.571077220000000e+02 }, { "Db258", 2.581092310000000e+02 }, - { "Db259", 2.591096100000000e+02 }, { "Db260", 2.601113000000000e+02 }, { "Db261", 2.611120560000000e+02 }, { "Db262", 2.621140840000000e+02 }, - { "Db263", 2.631149880000000e+02 }, { "Db264", 2.641174040000000e+02 }, { "Db265", 2.651186010000000e+02 }, { "Db266", 2.661210290000000e+02 }, - { "Db267", 2.671223770000000e+02 }, { "Db268", 2.681254450000000e+02 }, { "Db269", 2.691274600000000e+02 }, { "Db270", 2.701307120000000e+02 }, - { "Sg_natural", 2.630000000000000e+02 }, { "Sg258", 2.581131680000000e+02 }, { "Sg259", 2.591145000000000e+02 }, { "Sg260", 2.601144220710000e+02 }, - { "Sg261", 2.611161170000000e+02 }, { "Sg262", 2.621163980000000e+02 }, { "Sg263", 2.631183220000000e+02 }, { "Sg264", 2.641189310000000e+02 }, - { "Sg265", 2.651211146930000e+02 }, { "Sg266", 2.661220650000000e+02 }, { "Sg267", 2.671244250000000e+02 }, { "Sg268", 2.681256060000000e+02 }, - { "Sg269", 2.691287550000000e+02 }, { "Sg270", 2.701303290000000e+02 }, { "Sg271", 2.711334720000000e+02 }, { "Sg272", 2.721351580000000e+02 }, - { "Sg273", 2.731382200000000e+02 }, { "Bh260", 2.601219700000000e+02 }, { "Bh261", 2.611216640000000e+02 }, { "Bh262", 2.621228920000000e+02 }, - { "Bh263", 2.631230350000000e+02 }, { "Bh264", 2.641246040000000e+02 }, { "Bh265", 2.651251470000000e+02 }, { "Bh266", 2.661269420000000e+02 }, - { "Bh267", 2.671276500000000e+02 }, { "Bh268", 2.681297550000000e+02 }, { "Bh269", 2.691306940000000e+02 }, { "Bh270", 2.701336160000000e+02 }, - { "Bh271", 2.711351790000000e+02 }, { "Bh272", 2.721380320000000e+02 }, { "Bh273", 2.731396180000000e+02 }, { "Bh274", 2.741424400000000e+02 }, - { "Bh275", 2.751442500000000e+02 }, { "Hs263", 2.631285580000000e+02 }, { "Hs264", 2.641283948850000e+02 }, { "Hs265", 2.651300850000000e+02 }, - { "Hs266", 2.661300970000000e+02 }, { "Hs267", 2.671317890000000e+02 }, { "Hs268", 2.681321620000000e+02 }, { "Hs269", 2.691340560000000e+02 }, - { "Hs270", 2.701346500000000e+02 }, { "Hs271", 2.711376570000000e+02 }, { "Hs272", 2.721390520000000e+02 }, { "Hs273", 2.731419860000000e+02 }, - { "Hs274", 2.741431310000000e+02 }, { "Hs275", 2.751459520000000e+02 }, { "Hs276", 2.761472080000000e+02 }, { "Hs277", 2.771498410000000e+02 }, - { "Mt265", 2.651361510000000e+02 }, { "Mt266", 2.661372990000000e+02 }, { "Mt267", 2.671373070000000e+02 }, { "Mt268", 2.681387280000000e+02 }, - { "Mt269", 2.691390550000000e+02 }, { "Mt270", 2.701406570000000e+02 }, { "Mt271", 2.711411390000000e+02 }, { "Mt272", 2.721437380000000e+02 }, - { "Mt273", 2.731449130000000e+02 }, { "Mt274", 2.741474920000000e+02 }, { "Mt275", 2.751486470000000e+02 }, { "Mt276", 2.761511560000000e+02 }, - { "Mt277", 2.771524200000000e+02 }, { "Mt278", 2.781548120000000e+02 }, { "Mt279", 2.791561930000000e+02 }, { "Uun267", 2.671443410000000e+02 }, - { "Uun268", 2.681437950000000e+02 }, { "Uun269", 2.691451240000000e+02 }, { "Uun270", 2.701447200000000e+02 }, { "Uun271", 2.711460620000000e+02 }, - { "Uun272", 2.721463170000000e+02 }, { "Uun273", 2.731488630000000e+02 }, { "Uun274", 2.741494920000000e+02 }, { "Uun275", 2.751521760000000e+02 }, - { "Uun276", 2.761530340000000e+02 }, { "Uun277", 2.771556470000000e+02 }, { "Uun278", 2.781564690000000e+02 }, { "Uun279", 2.791588610000000e+02 }, - { "Uun280", 2.801597950000000e+02 }, { "Uun281", 2.811620610000000e+02 }, { "Uuu272", 2.721536150000000e+02 }, { "Uuu273", 2.731536820000000e+02 }, - { "Uuu274", 2.741557130000000e+02 }, { "Uuu275", 2.751561420000000e+02 }, { "Uuu276", 2.761584930000000e+02 }, { "Uuu277", 2.771595190000000e+02 }, - { "Uuu278", 2.781616040000000e+02 }, { "Uuu279", 2.791624680000000e+02 }, { "Uuu280", 2.801644730000000e+02 }, { "Uuu281", 2.811653720000000e+02 }, - { "Uuu282", 2.821674860000000e+02 }, { "Uuu283", 2.831684150000000e+02 }, { "Uub277", 2.771639430000000e+02 }, { "Uub278", 2.781643120000000e+02 }, - { "Uub279", 2.791665460000000e+02 }, { "Uub280", 2.801670390000000e+02 }, { "Uub281", 2.811692860000000e+02 }, { "Uub282", 2.821697650000000e+02 }, - { "Uub283", 2.831717920000000e+02 }, { "Uub284", 2.841723840000000e+02 }, { "Uub285", 2.851741050000000e+02 }, { "283", 2.831764510000000e+02 }, - { "284", 2.841780800000000e+02 }, { "285", 2.851787320000000e+02 }, { "286", 2.861804810000000e+02 }, { "287", 2.871810450000000e+02 }, - { "Uuq285", 2.851836980000000e+02 }, { "Uuq286", 2.861838550000000e+02 }, { "Uuq287", 2.871855990000000e+02 }, { "Uuq288", 2.881856890000000e+02 }, - { "Uuq289", 2.891872790000000e+02 }, { "287", 2.871911860000000e+02 }, { "288", 2.881924920000000e+02 }, { "289", 2.891927150000000e+02 }, - { "290", 2.901941410000000e+02 }, { "291", 2.911943840000000e+02 }, { "Uuh289", 2.891988620000000e+02 }, { "Uuh290", 2.901985900000000e+02 }, - { "Uuh291", 2.912000110000000e+02 }, { "Uuh292", 2.921997860000000e+02 }, { "Uuo291", 2.912065640000000e+02 }, { "Uuo292", 2.922075490000000e+02 }, - { "Uuo293", 2.932146700000000e+02 } }; - -/* -*************************************************************** -*/ -double G4GIDI_targetMass( const char *targetSymbol ) { - - int i, n = sizeof( ZAMasses ) / sizeof( ZAMasses[0] ); - double mass = -1.0; - - for( i = 0; i < n; i++ ) { - if( !strcmp( ZAMasses[i].symbol, targetSymbol ) ) { - mass = ZAMasses[i].mass; - break; - } - } - return( mass ); -} -/* -*************************************************************** -*/ -double G4GIDI_Z_AMass( int iZ, int iA ) { - - char *name = G4GIDI_Misc_Z_A_m_ToName( iZ, iA ); - double mass; - - if( name == NULL ) return( -1.0 ); - mass = G4GIDI_targetMass( name ); - smr_freeMemory( (void **) &name ); - return( mass ); -} diff --git a/source/processes/hadronic/models/lend/src/G4GIDI_misc.cc b/source/processes/hadronic/models/lend/src/G4GIDI_misc.cc new file mode 100644 index 0000000000..0b43871176 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/G4GIDI_misc.cc @@ -0,0 +1,137 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// + +#include +#include + +/* *********************************************************************************************************//** + * Returns the version string for the version of G4GIDI. + * + * @return A std::string. + ***********************************************************************************************************/ + +std::string G4GIDI_version( ) { + + std::string versionString( G4GIDI_VERSION ); + + return versionString; +} + +/* *********************************************************************************************************//** + * Returns the major version number for the version of G4GIDI. + * + * @return An int. + ***********************************************************************************************************/ + +int G4GIDI_versionMajor( ) { + + return G4GIDI_MAJOR; +} + +/* *********************************************************************************************************//** + * Returns the minor version number for the version of G4GIDI. + * + * @return An int. + ***********************************************************************************************************/ + +int G4GIDI_versionMinor( ) { + + return G4GIDI_MINOR; +} + +/* *********************************************************************************************************//** + * Returns the patch level number for the version of G4GIDI. + * + * @return An int. + ***********************************************************************************************************/ + +int G4GIDI_versionPatchLevel( ) { + + return G4GIDI_PATCHLEVEL; +} + +/* *********************************************************************************************************//** + * Returns the git repo hash for the G4GIDI repo for this version.. + * + * @return A std::string. + ***********************************************************************************************************/ + +std::string G4GIDI_GitHash( ) { + + return G4GIDI_GIT; +} + +static std::vector G4GIDI_chemicalElementSymbols { // Note, this is zero based. Ergo, "O" is at index 7 not 8. + "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", + "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", + "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", + "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", + "Nb", "Mo", "Tc", "Ru", "Rh", "Pd", "Ag", "Cd", "In", "Sn", + "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Pr", "Nd", + "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", + "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au", "Hg", + "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th", + "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", + "Md", "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", + "Rg", "Cn", "Nh", "Fl", "Mc", "Lv", "Ts", "Og" }; + +/* *********************************************************************************************************//** + * Returns the chemical elemental symbol for a specified atomic number *a_Z*. + * + * @param a_Z [in] The Z of the chemical element. + * + * @return The symbol as a std::string. + ***********************************************************************************************************/ + +std::string G4GIDI_Misc_Z_toSymbol( int a_Z ) { + + int Zm1 = a_Z - 1; + + if( ( Zm1 < 0 ) || ( Zm1 >= static_cast( G4GIDI_chemicalElementSymbols.size( ) ) ) ) { + throw LUPI::Exception( "G4GIDI_Misc_Z_toSymbol: invalid Z = " + std::to_string( a_Z ) + "." ); + } + + return( std::string( G4GIDI_chemicalElementSymbols[Zm1] ) ); +} + +/* *********************************************************************************************************//** + * Returns the PoPs for a specified atomic number *a_Z*, mass number *a_A* and meta-stable index *a_M*. + * + * @param a_Z [in] The Z of the chemical element. + * @param a_A [in] The A of the isotope. + * @param a_M [in] The meta-stable index of the nuclide. + * + * @return The symbol as a std::string. + ***********************************************************************************************************/ + +std::string G4GIDI_Misc_Z_A_m_ToName( int a_Z, int a_A, int a_M ) { + + std::string id( G4GIDI_Misc_Z_toSymbol( a_Z ) + std::to_string( a_A ) ); + + if( a_M > 0 ) id += "_" + std::to_string( a_M ); + + return( id ); +} diff --git a/source/processes/hadronic/models/lend/src/G4GIDI_target.cc b/source/processes/hadronic/models/lend/src/G4GIDI_target.cc index f1d0fe5627..5aa23a8560 100644 --- a/source/processes/hadronic/models/lend/src/G4GIDI_target.cc +++ b/source/processes/hadronic/models/lend/src/G4GIDI_target.cc @@ -23,442 +23,317 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/* -# <> -# <> -*/ -#include -#include -#include -#include "G4GIDI_target.hh" -#include "G4GIDI_mass.hh" -#include "G4GIDI_Misc.hh" +#include -using namespace std; -using namespace GIDI; +/*! \class G4GIDI_target + * A class to store map files for a particular projectile. + */ -/* -*************************************************************** -*/ -G4GIDI_target::G4GIDI_target( char const *fileName ) { +/* *********************************************************************************************************//** + * @param a_MCProtare [in] The MCGIDI protare. + ***********************************************************************************************************/ - init( fileName ); -} -/* -*************************************************************** -*/ -G4GIDI_target::G4GIDI_target( string const &fileName ) { +G4GIDI_target::G4GIDI_target( PoPI::Database const &a_pops, MCGIDI::DomainHash const &a_domainHash, GIDI::Protare const &a_GIDI_protare, + MCGIDI::Protare *a_MCGIDI_protare ) : + m_MCGIDI_protare( a_MCGIDI_protare ), + m_target( a_GIDI_protare.target( ).ID( ) ), + m_fileName( a_GIDI_protare.fileName( ) ), + m_targetZ( 0 ), + m_targetA( 0 ), + m_targetM( 0 ), + m_targetMass( 0.0 ), + m_domainHash( a_domainHash ), + m_elasticAngular( nullptr ) { - init( fileName.c_str( ) ); -} -/* -*************************************************************** -*/ -void G4GIDI_target::init( char const *fileName ) { - - int i, j, n, *p, *q, ir; - MCGIDI_reaction *reaction; - - smr_initialize( &smr, smr_status_Ok, 1 ); - sourceFilename = fileName; - target = MCGIDI_target_newRead( &smr, fileName ); - if( !smr_isOk( &smr ) ) { - smr_print( &smr, 1 ); - throw 1; + PoPI::Base const *targetAsBase = &a_pops.get( m_target ); + PoPI::Base const *targetAsBase2 = targetAsBase; + if( targetAsBase->isAlias( ) ) { + targetAsBase2 = &a_pops.get( a_pops.final( m_target ) ); + } + m_targetZ = PoPI::particleZ( *targetAsBase2, true ); + m_targetA = PoPI::particleA( *targetAsBase2, true ); + m_targetM = PoPI::particleMetaStableIndex( *targetAsBase ); + if( targetAsBase2->isParticle( ) ) { + PoPI::Particle const *targetAsParticle = static_cast( targetAsBase2 ); + m_targetMass = targetAsParticle->massValue( "amu" ); } - projectilesPOPID = target->projectilePOP->globalPoPsIndex; - name = target->targetPOP->name; - mass = G4GIDI_targetMass( target->targetPOP->name ); - equalProbableBinSampleMethod = "constant"; - elasticIndices = NULL; - nElasticIndices = nCaptureIndices = nFissionIndices = nOthersIndices = 0; - if( ( n = MCGIDI_target_numberOfReactions( &smr, target ) ) > 0 ) { - if( ( p = elasticIndices = (int *) smr_malloc2( &smr, n * sizeof( double ), 1, "elasticIndices" ) ) == NULL ) { - smr_print( &smr, 1 ); - throw 1; - } - for( i = 0; i < n; i++ ) { /* Find elastic channel(s). */ - reaction = MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, i ); - if( MCGIDI_reaction_getENDF_MTNumber( reaction ) == 2 ) { - *(p++) = i; - nElasticIndices++; - } - } - captureIndices = p; - for( i = 0; i < n; i++ ) { /* Find capture channel(s). */ - reaction = MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, i ); - if( MCGIDI_reaction_getENDF_MTNumber( reaction ) == 102 ) { - *(p++) = i; - nCaptureIndices++; - } - } + for( std::size_t reactionIndex = 0; reactionIndex < a_MCGIDI_protare->numberOfReactions( ); ++reactionIndex ) { + MCGIDI::Reaction const *reaction = a_MCGIDI_protare->reaction( reactionIndex ); - fissionIndices = p; - for( i = 0; i < n; i++ ) { /* Find fission channel(s). */ - reaction = MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, i ); - ir = MCGIDI_reaction_getENDF_MTNumber( reaction ); - if( ( ir != 18 ) && ( ir != 19 ) && ( ir != 20 ) && ( ir != 21 ) && ( ir != 38 ) ) continue; - *(p++) = i; - nFissionIndices++; + if( reaction->ENDF_MT( ) == 2 ) { + m_elasticIndices.push_back( static_cast( reactionIndex ) ); } + else if( reaction->ENDF_MT( ) == 18 ) { + m_fissionIndices.push_back( static_cast( reactionIndex ) ); } + else if( reaction->ENDF_MT( ) == 102 ) { + m_captureIndices.push_back( static_cast( reactionIndex ) ); } + else { + m_othersIndices.push_back( static_cast( reactionIndex ) ); } - othersIndices = p; - for( i = 0; i < n; i++ ) { /* Find other channel(s). */ - for( j = 0, q = elasticIndices; j < nElasticIndices; j++, q++ ) if( *q == i ) break; - if( j < nElasticIndices ) continue; - for( j = 0, q = captureIndices; j < nCaptureIndices; j++, q++ ) if( *q == i ) break; - if( j < nCaptureIndices ) continue; - for( j = 0, q = fissionIndices; j < nFissionIndices; j++, q++ ) if( *q == i ) break; - if( j < nFissionIndices ) continue; - *p = i; - p++; - nOthersIndices++; - } -#if 0 -printf( "elastic %d: ", nElasticIndices ); -for( i = 0; i < nElasticIndices; i++ ) printf( " %d", elasticIndices[i] ); -printf( "\ncapture %d: ", nCaptureIndices ); -for( i = 0; i < nCaptureIndices; i++ ) printf( " %d", captureIndices[i] ); -printf( "\nfission %d: ", nFissionIndices ); -for( i = 0; i < nFissionIndices; i++ ) printf( " %d", fissionIndices[i] ); -printf( "\nothers %d: ", nOthersIndices ); -for( i = 0; i < nOthersIndices; i++ ) printf( " %d", othersIndices[i] ); -printf( "\n" ); -#endif + } + + if( m_elasticIndices.size( ) > 0 ) { + MCGIDI::Reaction const *elastic = a_MCGIDI_protare->reaction( m_elasticIndices[0] ); + MCGIDI::Product const *firstProduct = elastic->product( 0 ); + MCGIDI::Distributions::AngularTwoBody const *angularTwoBody = static_cast( firstProduct->distribution( ) ); + m_elasticAngular = angularTwoBody->angular( ); } } -/* -*************************************************************** -*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + G4GIDI_target::~G4GIDI_target( ) { - MCGIDI_target_free( &smr, target ); - smr_freeMemory( (void **) &elasticIndices ); - smr_release( &smr ); + delete m_MCGIDI_protare; } -/* -*************************************************************** -*/ -string *G4GIDI_target::getName( void ) { return( &name ); } -/* -*************************************************************** -*/ -string *G4GIDI_target::getFilename( void ) { return( &sourceFilename ); } -/* -*************************************************************** -*/ -int G4GIDI_target::getZ( void ) { - - return( target->targetPOP->Z ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::getA( void ) { - - return( target->targetPOP->A ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::getM( void ) { - - return( target->targetPOP->m ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getMass( void ) { - return( mass ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::getTemperatures( double *temperatures ) { +/* *********************************************************************************************************//** + ***********************************************************************************************************/ - return( MCGIDI_target_getTemperatures( &smr, target, temperatures ) ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::readTemperature( int index ) { +int G4GIDI_target::getNumberOfChannels( ) const { - return( MCGIDI_target_readHeatedTarget( &smr, target, index ) ); + return( static_cast( m_MCGIDI_protare->numberOfReactions( ) ) ); } -/* -*************************************************************** -*/ -string G4GIDI_target::getEqualProbableBinSampleMethod( void ) { +/* *********************************************************************************************************//** + ***********************************************************************************************************/ - return( equalProbableBinSampleMethod ); +int G4GIDI_target::getNumberOfProductionChannels( ) const { + + return( static_cast( m_MCGIDI_protare->numberOfOrphanProducts( ) ) ); } -/* -*************************************************************** -*/ -int G4GIDI_target::setEqualProbableBinSampleMethod( string method ) { - if( method == "constant" ) { - equalProbableBinSampleMethod = "constant"; } - if( method == "linear" ) { - equalProbableBinSampleMethod = "linear"; } +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +channelID G4GIDI_target::getChannelsID( int channelIndex ) const { + + return( channelID( m_MCGIDI_protare->reaction( channelIndex )->label( ).c_str( ) ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getChannelIDs( ) const { + + std::vector *channelIDs = new std::vector( 0 ); + + for( std::size_t reactionIndex = 0; reactionIndex < m_MCGIDI_protare->numberOfReactions( ); ++reactionIndex ) { + MCGIDI::Reaction const *reaction = m_MCGIDI_protare->reaction( reactionIndex ); + channelIDs->push_back( reaction->label( ).c_str( ) ); + } + + return( channelIDs ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getProductionChannelIDs( ) const { + + std::vector *channelIDs = new std::vector( 0 ); + + for( std::size_t reactionIndex = 0; reactionIndex < m_MCGIDI_protare->numberOfOrphanProducts( ); ++reactionIndex ) { + MCGIDI::Reaction const *reaction = m_MCGIDI_protare->orphanProduct( reactionIndex ); + channelIDs->push_back( reaction->label( ).c_str( ) ); + } + + return( channelIDs ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getTotalCrossSectionAtE( double a_energy, double a_temperature ) const { + + int hashIndex = m_domainHash.index( a_energy ); + + return( m_MCGIDI_protare->crossSection( m_URR_protareInfos, hashIndex, a_temperature, a_energy ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getElasticCrossSectionAtE( double a_energy, double a_temperature ) const { + + return( sumChannelCrossSectionAtE( m_elasticIndices, a_energy, a_temperature ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getCaptureCrossSectionAtE( double a_energy, double a_temperature ) const { + + return( sumChannelCrossSectionAtE( m_captureIndices, a_energy, a_temperature ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getFissionCrossSectionAtE( double a_energy, double a_temperature ) const { + + return( sumChannelCrossSectionAtE( m_fissionIndices, a_energy, a_temperature ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getOthersCrossSectionAtE( double a_energy, double a_temperature ) const { + + return( sumChannelCrossSectionAtE( m_othersIndices, a_energy, a_temperature ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::sumChannelCrossSectionAtE( std::vector const &a_indices, double a_energy, double a_temperature ) const { + + int hashIndex = m_domainHash.index( a_energy ); + double crossSection = 0.0; + + for( auto indexIter = a_indices.begin( ); indexIter != a_indices.end( ); ++indexIter ) { + crossSection += m_MCGIDI_protare->reactionCrossSection( *indexIter, m_URR_protareInfos, hashIndex, a_temperature, a_energy ); + } + + return( crossSection ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::sumChannelCrossSectionAtE( int a_nIndices, int const *a_indices, double a_energy, double a_temperature ) const { + + std::vector indices( a_nIndices ); + for( int index = 0; index < a_nIndices; ++index ) indices[index] = a_indices[index]; + + return( sumChannelCrossSectionAtE( indices, a_energy, a_temperature ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +int G4GIDI_target::sampleChannelCrossSectionAtE( std::vector const &a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const { + + int index = 0; + int nIndices = static_cast( a_indices.size( ) ); + double crossSectionSample = sumChannelCrossSectionAtE( a_indices, a_energy, a_temperature ); + double crossSectionSum = 0.0; + + crossSectionSample *= a_rng( a_rngState ); + for( ; index < nIndices; ++index ) { + crossSectionSum += sumChannelCrossSectionAtE( 1, &a_indices[index], a_energy, a_temperature ); + if( crossSectionSum >= crossSectionSample ) break; + } + if( index == nIndices ) --index; // This should really be an error. + + return( a_indices[index] ); +} +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +int G4GIDI_target::sampleChannelCrossSectionAtE( int a_nIndices, int const *a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const { + + std::vector indices( a_nIndices ); + for( int index = 0; index < a_nIndices; ++index ) indices[index] = a_indices[index]; + + return( sampleChannelCrossSectionAtE( indices, a_energy, a_temperature, a_rng, a_rngState ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +double G4GIDI_target::getElasticFinalState( double a_energy, LUPI_maybeUnused double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const { + + return( m_elasticAngular->sample( a_energy, a_rng( a_rngState ), [&]() -> double { return a_rng( a_rngState ); } ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getCaptureFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const { + + return( getFinalState( m_captureIndices, a_energy, a_temperature, a_rng, a_rngState ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getFissionFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const { + + return( getFinalState( m_fissionIndices, a_energy, a_temperature, a_rng, a_rngState ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getOthersFinalState( double a_energy, double a_temperature, double (*a_rng)( void * ), void *a_rngState ) const { + + return( getFinalState( m_othersIndices, a_energy, a_temperature, a_rng, a_rngState ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::vector *G4GIDI_target::getFinalState( std::vector const &a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const { + + int reactionIndex; + + if( a_indices.size( ) == 0 ) return( NULL ); + if( a_indices.size( ) == 1 ) { + reactionIndex = a_indices[0]; } else { - return( 1 ); - } - return( 0 ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::getNumberOfChannels( void ) { - - return( MCGIDI_target_numberOfReactions( &smr, target ) ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::getNumberOfProductionChannels( void ) { - - return( MCGIDI_target_numberOfProductionReactions( &smr, target ) ); -} -/* -*************************************************************** -*/ -channelID G4GIDI_target::getChannelsID( int channelIndex ) { - - MCGIDI_reaction *reaction; - - if( ( reaction = MCGIDI_target_heated_getReactionAtIndex_smr( &smr, target->baseHeatedTarget, channelIndex ) ) == NULL ) { - smr_print( &smr, 1 ); - throw 1; - } - return( string( reaction->outputChannelStr ) ); /* Only works because channelID is defined to be string. */ -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getChannelIDs( void ) { - - int i, n = MCGIDI_target_numberOfReactions( &smr, target ); - MCGIDI_reaction *reaction; - vector *listOfChannels; - - listOfChannels = new vector( n ); - for( i = 0; i < n; i++ ) { - reaction = MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, i ); - (*listOfChannels)[i] = reaction->outputChannelStr; - } - return( listOfChannels ); -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getProductionChannelIDs( void ) { - - return( NULL ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getTotalCrossSectionAtE( double e_in, double temperature ) { - - MCGIDI_quantitiesLookupModes mode( projectilesPOPID ); - - mode.setProjectileEnergy( e_in ); - mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise ); - mode.setTemperature( temperature ); - - return( MCGIDI_target_getTotalCrossSectionAtTAndE( NULL, target, mode, true ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getElasticCrossSectionAtE( double e_in, double temperature ) { - - return( sumChannelCrossSectionAtE( nElasticIndices, elasticIndices, e_in, temperature ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getCaptureCrossSectionAtE( double e_in, double temperature ) { - - return( sumChannelCrossSectionAtE( nCaptureIndices, captureIndices, e_in, temperature ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getFissionCrossSectionAtE( double e_in, double temperature ) { - - return( sumChannelCrossSectionAtE( nFissionIndices, fissionIndices, e_in, temperature ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getOthersCrossSectionAtE( double e_in, double temperature ) { - - return( sumChannelCrossSectionAtE( nOthersIndices, othersIndices, e_in, temperature ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::sumChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature ) { - - int i; - double xsec = 0.; - MCGIDI_quantitiesLookupModes mode( projectilesPOPID ); - - mode.setProjectileEnergy( e_in ); - mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise ); - mode.setTemperature( temperature ); - - for( i = 0; i < nIndices; i++ ) - xsec += MCGIDI_target_getIndexReactionCrossSectionAtE( &smr, target, indices[i], mode, true ); - return( xsec ); -} -/* -*************************************************************** -*/ -int G4GIDI_target::sampleChannelCrossSectionAtE( int nIndices, int *indices, double e_in, double temperature, - double (*rng)( void * ), void *rngState ) { - - int i; - double xsec = 0., rxsec = sumChannelCrossSectionAtE( nIndices, indices, e_in, temperature ) * rng( rngState ); - MCGIDI_quantitiesLookupModes mode( projectilesPOPID ); - - mode.setProjectileEnergy( e_in ); - mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise ); - mode.setTemperature( temperature ); - - for( i = 0; i < nIndices - 1; i++ ) { - xsec += MCGIDI_target_getIndexReactionCrossSectionAtE( &smr, target, indices[i], mode, true ); - if( xsec >= rxsec ) break; - } - return( indices[i] ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getElasticFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) { - - MCGIDI_decaySamplingInfo decaySamplingInfo; - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex_smr( &smr, target->baseHeatedTarget, elasticIndices[0] ); - MCGIDI_product *product; - MCGIDI_quantitiesLookupModes mode( projectilesPOPID ); - - if( ( product = MCGIDI_outputChannel_getProductAtIndex( &smr, &(reaction->outputChannel), 0 ) ) == NULL ) { - smr_print( &smr, 1 ); - throw 1; + reactionIndex = sampleChannelCrossSectionAtE( a_indices, a_energy, a_temperature, a_rng, a_rngState ); } - mode.setProjectileEnergy( e_in ); - mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise ); - mode.setTemperature( temperature ); + MCGIDI::Sampling::StdVectorProductHandler productHandler; + MCGIDI::Sampling::Input input( false, MCGIDI::Sampling::Upscatter::Model::none ); - decaySamplingInfo.isVelocity = 0; - decaySamplingInfo.rng = rng; - decaySamplingInfo.rngState = rngState; - if( MCGIDI_product_sampleMu( &smr, product, mode, &decaySamplingInfo ) ) { - smr_print( &smr, 1 ); - throw 1; - } + MCGIDI::Reaction const *reaction = m_MCGIDI_protare->reaction( reactionIndex ); + reaction->sampleProducts( m_MCGIDI_protare, a_energy, input, [&]() -> double { return a_rng( a_rngState ); }, + [&] (MCGIDI::Sampling::Product &a_product) -> void { productHandler.push_back( a_product ); }, productHandler ); - return( decaySamplingInfo.mu ); -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getCaptureFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) { + std::vector *products = new std::vector( productHandler.size( ) ); - return( getFinalState( nCaptureIndices, captureIndices, e_in, temperature, rng, rngState ) ); -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getFissionFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) { + for( std::size_t index = 0; index < productHandler.size( ); ++index ) { + MCGIDI::Sampling::Product &productIn = productHandler[index]; + G4GIDI_Product &productOut = (*products)[index]; - return( getFinalState( nFissionIndices, fissionIndices, e_in, temperature, rng, rngState ) ); -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getOthersFinalState( double e_in, double temperature, double (*rng)( void * ), void *rngState ) { - - return( getFinalState( nOthersIndices, othersIndices, e_in, temperature, rng, rngState ) ); -} -/* -*************************************************************** -*/ -vector *G4GIDI_target::getFinalState( int nIndices, int *indices, double e_in, double temperature, - double (*rng)( void * ), void *rngState ) { - - int index = 0, i, n; - vector *products = NULL; - MCGIDI_decaySamplingInfo decaySamplingInfo; - MCGIDI_sampledProductsDatas sampledProductsDatas; - MCGIDI_sampledProductsData *productData; - MCGIDI_quantitiesLookupModes mode( projectilesPOPID ); - - decaySamplingInfo.isVelocity = 0; - decaySamplingInfo.rng = rng; - decaySamplingInfo.rngState = rngState; - - if( nIndices == 0 ) { - return( NULL ); } - else { - if( nIndices == 1 ) { - index = indices[0]; } + if( productIn.m_productIntid == 1020000000 ) { // Neutron. + productOut.A = 1; + productOut.Z = 0; + productOut.m = 0; } + else if( productIn.m_productIntid == 1000000000 ) { // Photon. + productOut.A = 0; + productOut.Z = 0; + productOut.m = 0; } else { - index = sampleChannelCrossSectionAtE( nIndices, indices, e_in, temperature, rng, rngState ); + PoPI::ParseIntidInfo parseIntidInfo( productIn.m_productIntid ); + productOut.A = parseIntidInfo.AAA( ); + productOut.Z = parseIntidInfo.ZZZ( ); + productOut.m = parseIntidInfo.metaStableIndex( ); } - } - MCGIDI_sampledProducts_initialize( &smr, &sampledProductsDatas, 1000 ); - if( !smr_isOk( &smr ) ) { - smr_print( &smr, 1 ); - throw 1; + productOut.kineticEnergy = productIn.m_kineticEnergy; + productOut.px = productIn.m_px_vx; + productOut.py = productIn.m_py_vy; + productOut.pz = productIn.m_pz_vz; } - mode.setProjectileEnergy( e_in ); - mode.setCrossSectionMode( MCGIDI_quantityLookupMode_pointwise ); - mode.setTemperature( temperature ); - - n = MCGIDI_target_heated_sampleIndexReactionProductsAtE( &smr, target->baseHeatedTarget, index, mode, - &decaySamplingInfo, &sampledProductsDatas ); - if( !smr_isOk( &smr ) ) { - smr_print( &smr, 1 ); - throw 1; - } - if( n > 0 ) { - if( ( products = new vector( n ) ) != NULL ) { - for( i = 0; i < n; i++ ) { - productData = &(sampledProductsDatas.products[i]); - (*products)[i].A = productData->pop->A; - (*products)[i].Z = productData->pop->Z; - (*products)[i].m = productData->pop->m; - (*products)[i].kineticEnergy = productData->kineticEnergy; - (*products)[i].px = productData->px_vx; - (*products)[i].py = productData->py_vy; - (*products)[i].pz = productData->pz_vz; - (*products)[i].birthTimeSec = productData->birthTimeSec; - } - } - } - MCGIDI_sampledProducts_release( &smr, &sampledProductsDatas ); - return( products ); } -/* -*************************************************************** -*/ -double G4GIDI_target::getReactionsThreshold( int index ) { - return( MCGIDI_target_heated_getReactionsThreshold( &smr, target->baseHeatedTarget, index ) ); -} -/* -*************************************************************** -*/ -double G4GIDI_target::getReactionsDomain( int index, double *EMin, double *EMax ) { +/* *********************************************************************************************************//** + ***********************************************************************************************************/ - return( MCGIDI_target_heated_getReactionsDomain( &smr, target->baseHeatedTarget, index, EMin, EMax ) ); +std::vector *G4GIDI_target::getFinalState( int a_nIndices, int const *a_indices, double a_energy, double a_temperature, + double (*a_rng)( void * ), void *a_rngState ) const { + + std::vector indices( a_nIndices ); + for( int index = 0; index < a_nIndices; ++index ) indices[index] = a_indices[index]; + + return( getFinalState( indices, a_energy, a_temperature, a_rng, a_rngState ) ); } diff --git a/source/processes/hadronic/models/lend/src/G4LENDCombinedModel.cc b/source/processes/hadronic/models/lend/src/G4LENDCombinedModel.cc index 1787e1e407..b894fc7d8d 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDCombinedModel.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDCombinedModel.cc @@ -23,6 +23,11 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// 2012-09-17 T. Koi (SLAC/EPP): First implementation +// 2024-07-17 D.M.Wright (LLNL): Added GetFatalEnergyCheckLevels() to call equivalent function +// in the selected channel. This fixes incorrect implemenation +// and prevents crash. + #include "G4LENDCombinedModel.hh" #include "G4LENDCombinedCrossSection.hh" #include "G4LENDElastic.hh" @@ -69,7 +74,19 @@ G4HadFinalState * G4LENDCombinedModel::ApplyYourself(const G4HadProjectile& aTra G4DynamicParticle* dp = new G4DynamicParticle( proj , G4ThreeVector(0.,0.,1.) , aTrack.GetKineticEnergy() ); G4int ichannel = crossSection->SelectChannel( dp , iZ , iA , aTarg.GetIsotope(), NULL , aTrack.GetMaterial() ); delete dp; - //ichannel=1; channel = channels[ichannel]; + channel_selected = channel; // needed by std::pair() defined below return channel->ApplyYourself(aTrack,aTarg); } + +// must call the right CheckLevels (Fission is different from other channels) +const std::pair G4LENDCombinedModel::GetFatalEnergyCheckLevels() const +{ + /* D. M. Wright debug statement + std::cout << "G4LENDCombinedModel " + << " " << channel_selected->GetModelName() + << " GetFatalEnergyCheckLevels" + << std::endl; + */ + return channel_selected->GetFatalEnergyCheckLevels(); +} diff --git a/source/processes/hadronic/models/lend/src/G4LENDCrossSection.cc b/source/processes/hadronic/models/lend/src/G4LENDCrossSection.cc index 0575c3249b..64eafcb93d 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDCrossSection.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDCrossSection.cc @@ -122,7 +122,9 @@ G4LENDCrossSection::G4LENDCrossSection( const G4String nam ) proj = NULL; //will be set in an inherited class //default_evaluation = "endl99"; //default_evaluation = "ENDF.B-VII.0"; - default_evaluation = "ENDF/BVII.1"; + //default_evaluation = "ENDF/BVII.1"; + //default_evaluation = "ENDF/B-8.0"; + default_evaluation = "ENDF/B-7.1"; allow_nat = false; allow_any = false; diff --git a/source/processes/hadronic/models/lend/src/G4LENDInelastic.cc b/source/processes/hadronic/models/lend/src/G4LENDInelastic.cc index 8b31ee747e..7ea0c92381 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDInelastic.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDInelastic.cc @@ -105,7 +105,7 @@ G4HadFinalState* G4LENDInelastic::ApplyYourself(const G4HadProjectile& aTrack, // Charge and energy non-conservation still occur, but over a large number // of events, this improves on average. - if (loop > loopMax - 1) { + if (products == nullptr) { // no non-null products found in previous loop // G4cout << " too many loops, return initial state " << G4endl; theParticleChange.Clear(); diff --git a/source/processes/hadronic/models/lend/src/G4LENDManager.cc b/source/processes/hadronic/models/lend/src/G4LENDManager.cc index 07dcd1ce7e..8bdcf8880e 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDManager.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDManager.cc @@ -59,33 +59,22 @@ G4LENDManager::G4LENDManager() //printBanner(); - G4String xmcf; - G4String xmcf_gamma; - G4String xmcf_p; - G4String xmcf_d; - G4String xmcf_t; - G4String xmcf_he3; - G4String xmcf_a; - if( G4FindDataDir("G4LENDDATA") == NULL ) { + const char *dataDir = G4FindDataDir("G4LENDDATA"); + if( dataDir == NULL ) { throw G4HadronicException(__FILE__, __LINE__, " Please setenv G4LENDDATA to point to the LEND files." ); - } else { - xmcf = G4FindDataDir("G4LENDDATA"); - //xmcf += "/xmcf.n_1.map"; - xmcf += "/neutrons.map"; - xmcf_gamma = G4FindDataDir("G4LENDDATA"); - xmcf_gamma += "/gammas.map"; - xmcf_p = G4FindDataDir("G4LENDDATA"); - xmcf_p += "/protons.map"; - xmcf_d = G4FindDataDir("G4LENDDATA"); - xmcf_d += "/deuterons.map"; - xmcf_t = G4FindDataDir("G4LENDDATA"); - xmcf_t += "/tritons.map"; - xmcf_he3 = G4FindDataDir("G4LENDDATA"); - xmcf_he3 += "/He3s.map"; - xmcf_a = G4FindDataDir("G4LENDDATA"); - xmcf_a += "/alphas.map"; } + std::string G4LENDDATA(dataDir); + G4GIDI_initialize(G4LENDDATA); + + G4String xmcf = G4LENDDATA + "/neutrons.map"; + G4String xmcf_gamma = G4LENDDATA + "/gammas.map"; + G4String xmcf_p = G4LENDDATA + "/protons.map"; + G4String xmcf_d = G4LENDDATA + "/deuterons.map"; + G4String xmcf_t = G4LENDDATA + "/tritons.map"; + G4String xmcf_h = G4LENDDATA + "/helions.map"; + G4String xmcf_a = G4LENDDATA + "/alphas.map"; + //Example of xmcf.n_1.map // // @@ -118,10 +107,10 @@ G4LENDManager::G4LENDManager() } else { aFile.close(); } - aFile.open( xmcf_he3.c_str() ); + aFile.open( xmcf_h.c_str() ); if ( aFile.good() ) { aFile.close(); - proj_lend_map.insert ( std::pair < G4ParticleDefinition* , G4GIDI* > ( G4He3::He3() , new G4GIDI( 5 , xmcf_he3 ) ) ); + proj_lend_map.insert ( std::pair < G4ParticleDefinition* , G4GIDI* > ( G4He3::He3() , new G4GIDI( 5 , xmcf_h ) ) ); } else { aFile.close(); } diff --git a/source/processes/hadronic/models/lend/src/G4LENDModel.cc b/source/processes/hadronic/models/lend/src/G4LENDModel.cc index f66397b745..9f40ca7baf 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDModel.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDModel.cc @@ -56,7 +56,9 @@ G4LENDModel::G4LENDModel( G4String name ) //default_evaluation = "endl99"; //default_evaluation = "ENDF.B-VII.0"; - default_evaluation = "ENDF/BVII.1"; + //default_evaluation = "ENDF/BVII.1"; + //default_evaluation = "ENDF/B-8.0"; + default_evaluation = "ENDF/B-7.1"; allow_nat = false; allow_any = false; diff --git a/source/processes/hadronic/models/lend/src/GIDI_1dData.cc b/source/processes/hadronic/models/lend/src/GIDI_1dData.cc new file mode 100644 index 0000000000..c96995f0ea --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_1dData.cc @@ -0,0 +1,238 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class Data1d + * Currently not used. + */ + +/* +============================================================ + * + * @param a_number + * @param a_xs + * @return + */ +Data1d::Data1d( std::size_t a_number, double const *const a_xs ) { + + m_xs.resize( a_number ); + m_ys.resize( a_number ); + + for( std::size_t i1 = 0; i1 < a_number; ++i1 ) { + m_xs[i1] = a_xs[i1]; + m_ys[i1] = 0.0; + } +} +/* +============================================================ + * + * @param a_number + * @param a_xs + * @param a_ys + * @return + */ +Data1d::Data1d( std::size_t a_number, double const *const a_xs, double const *const a_ys ) { + + m_xs.resize( a_number ); + m_ys.resize( a_number ); + for( std::size_t i1 = 0; i1 < a_number; ++i1 ) { + m_xs[i1] = a_xs[i1]; + m_ys[i1] = a_ys[i1]; + } +} +/* +============================================================ + * + * @param a_xs + * @return + */ +Data1d::Data1d( std::vector const &a_xs ) { + + m_xs = a_xs; + m_ys.resize( a_xs.size( ) ); + for( std::vector::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter = 0.0; +} +/* +============================================================ + * + * @param a_xs + * @param a_ys + * @return + */ +Data1d::Data1d( std::vector const &a_xs, std::vector const &a_ys ) { + + if( a_xs.size( ) != a_ys.size( ) ) throw Exception( "sizes not the same" ); + m_xs = a_xs; + m_ys = a_ys; +} +/* +============================================================ + * + * @param a_gidi_1dData + * @return + */ +Data1d::Data1d( Data1d const &a_gidi_1dData ) { + + m_xs = a_gidi_1dData.m_xs; + m_ys = a_gidi_1dData.m_ys; +} +/* +============================================================ +*/ +Data1d::~Data1d( ) { + +} + +/* +============================================================ +============================ add =========================== +============================================================ + */ +Data1d Data1d::operator+( double a_value ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData += a_value; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator+=( double a_value ) { + + for( std::vector::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter += a_value; + return( *this ); +} +/* +============================================================ + */ +Data1d Data1d::operator+( Data1d const &a_rhs ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData += a_rhs; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator+=( Data1d const &a_rhs ) { + + std::size_t __size = size( ); + + if( __size != a_rhs.size( ) ) throw Exception( "data1d sizes differ." ); + for( std::size_t i1 = 0; i1 < __size; ++i1 ) m_ys[i1] += a_rhs.m_ys[i1]; + return( *this ); +} + +/* +============================================================ +========================== subtract ======================== +============================================================ + */ +Data1d Data1d::operator-( double a_value ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData -= a_value; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator-=( double a_value ) { + + for( std::vector::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter -= a_value; + return( *this ); +} +/* +============================================================ + */ +Data1d Data1d::operator-( Data1d const &a_rhs ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData -= a_rhs; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator-=( Data1d const &a_rhs ) { + + std::size_t __size = size( ); + + if( __size != a_rhs.size( ) ) throw Exception( "data1d sizes differ." ); + for( std::size_t i1 = 0; i1 < __size; ++i1 ) m_ys[i1] -= a_rhs.m_ys[i1]; + return( *this ); +} + +/* +============================================================ +========================== multiply ======================== +============================================================ + */ +Data1d Data1d::operator*( double a_value ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData *= a_value; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator*=( double a_value ) { + + for( std::vector::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter *= a_value; + return( *this ); +} + +/* +============================================================ +========================== divide ========================== +============================================================ + */ +Data1d Data1d::operator/( double a_value ) const { + + Data1d gidi_1dData( *this ); + + gidi_1dData /= a_value; + return( gidi_1dData ); +} +/* +============================================================ + */ +Data1d &Data1d::operator/=( double a_value ) { + + if( a_value == 0 ) throw Exception( "divide by zero." ); + for( std::vector::iterator iter = m_ys.begin( ); iter < m_ys.end( ); ++iter ) *iter /= a_value; + return( *this ); +} + +/* +============================================================ +========================== others ========================== +============================================================ + */ +void Data1d::print( std::string const &a_prefix ) const { + + std::size_t __size = size( ); + + for( std::size_t i1 = 0; i1 < __size; ++i1 ) { + std::cout << a_prefix; + printf( "%18.11e %18.11e", m_xs[i1], m_ys[i1] ); + std::cout << std::endl; + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_GNDS_fileType.cc b/source/processes/hadronic/models/lend/src/GIDI_GNDS_fileType.cc new file mode 100644 index 0000000000..3640038c45 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_GNDS_fileType.cc @@ -0,0 +1,235 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include + +#ifdef GIDI_PLUS_INCLUDE_EXPAT + #include +#else + typedef unsigned char XML_Bool; + typedef char XML_Char; + typedef void * XML_Parser; + typedef void (*XML_StartElementHandler)( void *a_userData, XML_Char const *a_name, XML_Char const **a_atts ); + typedef void (*XML_EndElementHandler)( void *a_userData, XML_Char const *a_name); + + enum XML_Status { XML_STATUS_ERROR = 0, XML_STATUS_OK = 1 }; + #define XML_TRUE 1 + + XML_Parser XML_ParserCreate( LUPI_maybeUnused void *a_dummy ) { return( nullptr ); } + void XML_ParserFree( LUPI_maybeUnused XML_Parser a_XML_Parser ) {} + void XML_SetElementHandler( LUPI_maybeUnused XML_Parser a_xmlParser, LUPI_maybeUnused XML_StartElementHandler a_startElementHandler, LUPI_maybeUnused XML_EndElementHandler a_endElementHandler ) { } + void XML_SetUserData( LUPI_maybeUnused XML_Parser a_xmlParser, LUPI_maybeUnused void *a_userData ) {} + enum XML_Status XML_Parse( LUPI_maybeUnused XML_Parser a_xmlParser, LUPI_maybeUnused char const *a_buffer, LUPI_maybeUnused int a_count, LUPI_maybeUnused int a_isFinal ) { return( XML_STATUS_ERROR ); } +// XML_GetErrorCode + void XML_StopParser( LUPI_maybeUnused XML_Parser a_xmlParser, LUPI_maybeUnused XML_Bool a_resumable ) {} +#endif + +namespace GIDI { + +class GNDS_FileTypeInfoUserData { + + public: + XML_Parser m_xmlParser; + GNDS_FileTypeInfo &m_GNDS_fileTypeInfo; + + GNDS_FileTypeInfoUserData( XML_Parser a_xmlParser, GNDS_FileTypeInfo &a_GNDS_fileTypeInfo ) : + m_xmlParser( a_xmlParser ), + m_GNDS_fileTypeInfo( a_GNDS_fileTypeInfo ) { + + } +}; + +static void xml_startElementHandler( void *a_userData, XML_Char const *a_name, XML_Char const **a_attributes ); +static void xml_endElementHandler( void *a_userData, XML_Char const *a_name ); + +/* *********************************************************************************************************//** + * Constructor with no arguments. + ***********************************************************************************************************/ + +GNDS_FileTypeInfo::GNDS_FileTypeInfo( ) : + m_GNDS_fileType( GNDS_FileType::uninitialized ) { + +} + +/* *********************************************************************************************************//** + * Constructor with all arguments. + * + * @param a_GNDS_fileType [in] The enum describing the GNDS file's type. + * @param a_projectileID [in] The PoPs id for the protare's projectile. + * @param a_targetID [in] The PoPs id for the protare's target. + * @param a_evaluation [in] The protare's evaluation. + * @param a_interaction [in] The protare's interaction. + ***********************************************************************************************************/ + +GNDS_FileTypeInfo::GNDS_FileTypeInfo( GNDS_FileType a_GNDS_fileType, std::string a_projectileID, std::string a_targetID, std::string a_evaluation, + std::string a_interaction ) : + m_GNDS_fileType( a_GNDS_fileType ), + m_projectileID( a_projectileID ), + m_targetID( a_targetID ), + m_evaluation( a_evaluation ), + m_interaction( a_interaction ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor. + * + * @param a_GNDS_fileTypeInfo [in] GNDS_FileTypeInfo instance to copy. + ***********************************************************************************************************/ + +GNDS_FileTypeInfo::GNDS_FileTypeInfo( GNDS_FileTypeInfo const &a_GNDS_fileTypeInfo ) : + m_GNDS_fileType( a_GNDS_fileTypeInfo.GNDS_fileType( ) ), + m_projectileID( a_GNDS_fileTypeInfo.projectileID( ) ), + m_targetID( a_GNDS_fileTypeInfo.targetID( ) ), + m_evaluation( a_GNDS_fileTypeInfo.evaluation( ) ), + m_interaction( a_GNDS_fileTypeInfo.interaction( ) ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +GNDS_FileTypeInfo &GNDS_FileTypeInfo::operator=( GNDS_FileTypeInfo const &a_rhs ) { + + if( this != &a_rhs ) { + m_GNDS_fileType = a_rhs.GNDS_fileType( ); + m_projectileID = a_rhs.projectileID( ); + m_targetID = a_rhs.targetID( ); + m_evaluation = a_rhs.evaluation( ); + m_interaction = a_rhs.interaction( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Opens the specified file and parses the first line to determine its GNDS type (i.e., protare (reactionSuite), map or PoPs file). + * Returns the GNDS type via the GNDS_FileType enum. If the return value and the value of *a_GNDS_fileTypeInfo.GNDS_fileType( )* is + * *uninitialized* an error was detected opening the file or by the XML parser (expat). If it is *unknown* the parsed file is an + * XML file but not a valid GNDS file. + * + * @param a_fileName [in] The path to the file whose GNDS type is to be determined. + * @param a_GNDS_fileTypeInfo [in] The *GNDS_FileTypeInfo* instance containing the return information. + * + * @return enum indicating the GNDS type of file referened by *a_fileName*. + ***********************************************************************************************************/ + +GNDS_FileType GNDS_fileType( std::string const &a_fileName, GNDS_FileTypeInfo &a_GNDS_fileTypeInfo ) { + + a_GNDS_fileTypeInfo.setGNDS_fileType( GNDS_FileType::uninitialized ); + + char buffer[10 * 1024 + 1]; + size_t bufferSize = sizeof( buffer ) - 1; + FILE *fileDescriptor; + +#ifdef GIDI_PLUS_NOEXPAT + throw Exception( "\nGIDI::fileType failed as expat not included." ); +#endif + + fileDescriptor = fopen( a_fileName.c_str( ), "r" ); + if( fileDescriptor == nullptr ) throw Exception( "GIDI::fileType failed to open file '" + a_fileName + "'." ); + + XML_Parser xmlParser = XML_ParserCreate( nullptr ); + if( xmlParser == nullptr ) { + fclose( fileDescriptor ); + throw Exception( "XML_ParserCreate failed." ); + } + + XML_SetElementHandler( xmlParser, xml_startElementHandler, xml_endElementHandler ); + + GNDS_FileTypeInfoUserData userData( xmlParser, a_GNDS_fileTypeInfo ); + XML_SetUserData( xmlParser, &userData ); + + enum XML_Status status = XML_STATUS_ERROR; // Initialize to silence compiler warning + size_t count = 0; + while( ( count = fread( buffer, bufferSize, 1, fileDescriptor ) ) > 0 ) { + status = XML_Parse( xmlParser, buffer, count, 0 ); + if( status != XML_STATUS_OK ) break; + } + +// enum XML_Error error = XML_GetErrorCode( xmlParser ); + XML_ParserFree( xmlParser ); + fclose( fileDescriptor ); + + if( status == XML_STATUS_ERROR ) throw Exception( "GIDI::fileType expat parsing error." ); +// What about other status values like XML_STATUS_SUSPENDED. + return( a_GNDS_fileTypeInfo.GNDS_fileType( ) ); +} + +/* *********************************************************************************************************//** + * For internal use only. + * + * @param a_userData [in] The user data. + * @param a_name [in] The name of the start element. + * @param a_attributes [in] The list of attributes for the start element. + * + * @return enum indicating the GNDS type of file referened by *a_fileName*. + ***********************************************************************************************************/ + +static void xml_startElementHandler( void *a_userData, XML_Char const *a_name, XML_Char const **a_attributes ) { + + GNDS_FileTypeInfoUserData *userData = static_cast( a_userData ); + + if( strcmp( a_name, PoPI_PoPsChars ) == 0 ) { + userData->m_GNDS_fileTypeInfo.setGNDS_fileType( GNDS_FileType::pops ); } + else if( strcmp( a_name, GIDI_topLevelChars ) == 0 ) { + XML_Char const **attributes = a_attributes; + std::string projectileID; + std::string targetID; + std::string evaluation; + std::string interaction; + + while( *attributes != nullptr ) { + std::string attributeName( *attributes ); + ++attributes; + if( attributeName == GIDI_projectileChars ) { + projectileID = *attributes; } + if( attributeName == GIDI_targetChars ) { + targetID = *attributes; } + if( attributeName == GIDI_evaluationChars ) { + evaluation = *attributes; } + if( attributeName == GIDI_interactionChars ) { + interaction = *attributes; + } + ++attributes; + } + GNDS_FileTypeInfo GNDS_fileTypeInfo( GNDS_FileType::protare, projectileID, targetID, evaluation, interaction ); + userData->m_GNDS_fileTypeInfo = GNDS_fileTypeInfo; } + else if( strcmp( a_name, GIDI_covarianceSuiteChars ) == 0 ) { + userData->m_GNDS_fileTypeInfo.setGNDS_fileType( GNDS_FileType::covarianceSuite ); } + else if( strcmp( a_name, GIDI_mapChars ) == 0 ) { + userData->m_GNDS_fileTypeInfo.setGNDS_fileType( GNDS_FileType::map ); } + else { + userData->m_GNDS_fileTypeInfo.setGNDS_fileType( GNDS_FileType::unknown ); + } + + XML_StopParser( userData->m_xmlParser, XML_TRUE ); +} + +/* *********************************************************************************************************//** + * For internal use only. + * + * @param a_userData [in] The user data. + * @param a_name [in] The name of the start element. + * + * @return enum indicating the GNDS type of file referened by *a_fileName*. + ***********************************************************************************************************/ + +static void xml_endElementHandler( LUPI_maybeUnused void *a_userData, LUPI_maybeUnused XML_Char const *a_name ) { + +} + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_GRIN_continuumGammas.cc b/source/processes/hadronic/models/lend/src/GIDI_GRIN_continuumGammas.cc new file mode 100644 index 0000000000..f948d466f0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_GRIN_continuumGammas.cc @@ -0,0 +1,216 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace GRIN { + +static Form *parseInelasticIncidentEnergySuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + Styles::Suite const *a_styles ); +static Form *parseCaptureLevelProbabilitySuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + Styles::Suite const *a_styles ); + +/*! \class GRIN_continuumGammas + * Base class for the protare sub-classes. + */ + +/* *********************************************************************************************************//** + * Base Protare constructor. + ***********************************************************************************************************/ + +GRIN_continuumGammas::GRIN_continuumGammas( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, LUPI_maybeUnused ProtareSingle const &a_protare, Styles::Suite const *a_styles ) : + GUPI::Ancestry( "" ), + m_captureNeutronSeparationEnergy( a_node.child( GIDI_captureNeutronSeparationEnergyChars ), a_setupInfo ), + m_maximumCaptureIncidentEnergy( a_node.child( GIDI_maximumIncidentEnergyChars ), a_setupInfo ), + m_pops( ), + m_inelasticIncidentEnergies( a_construction, GIDI_inelasticIncidentEnergiesChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, + a_internalPoPs, parseInelasticIncidentEnergySuite, a_styles ), + m_captureLevelProbabilities( a_construction, GIDI_captureLevelProbabilitiesChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, + a_internalPoPs, parseCaptureLevelProbabilitySuite, a_styles ), + m_captureResidualIntid( -1 ), + m_captureResidualIndex( -1 ), + m_captureResidualMass( 0.0 ) { + + m_captureNeutronSeparationEnergy.setAncestor( this ); + m_maximumCaptureIncidentEnergy.setAncestor( this ); + m_inelasticIncidentEnergies.setAncestor( this ); + m_captureLevelProbabilities.setAncestor( this ); + + m_pops.addDatabase( a_node.child( GIDI_PoPsChars ), true ); + + PoPI::Nuclide const &target = a_pops.get( a_setupInfo.m_protare->target( ).pid( ) ); + std::string captureResidualId = target.isotope( )->chemicalElement( )->symbol( ) + std::to_string( target.A( ) + 1 ); + PoPI::Nuclide const &captureResidual = a_pops.get( captureResidualId ); + m_captureResidualId = captureResidualId; + m_captureResidualIntid = captureResidual.intid( ); + m_captureResidualIndex = captureResidual.index( ); + m_captureResidualMass = captureResidual.massValue( "MeV/c**2" ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +GRIN_continuumGammas::~GRIN_continuumGammas( ) { +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry *GRIN_continuumGammas::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_captureNeutronSeparationEnergyChars ) return( &m_captureNeutronSeparationEnergy ); + if( a_item == GIDI_maximumIncidentEnergyChars ) return( &m_maximumCaptureIncidentEnergy ); + if( a_item == GIDI_inelasticIncidentEnergiesChars ) return( &m_inelasticIncidentEnergies ); + if( a_item == GIDI_captureLevelProbabilitiesChars ) return( &m_captureLevelProbabilities ); +// The following does not work as PoPI::Database does not yet inherent from GUPI::Ancestry. This needs to be fixed. +// if( a_item == PoPI_PoPsChars ) return( &m_pops ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry const *GRIN_continuumGammas::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_captureNeutronSeparationEnergyChars ) return( &m_captureNeutronSeparationEnergy ); + if( a_item == GIDI_maximumIncidentEnergyChars ) return( &m_maximumCaptureIncidentEnergy ); + if( a_item == GIDI_inelasticIncidentEnergiesChars ) return( &m_inelasticIncidentEnergies ); + if( a_item == GIDI_captureLevelProbabilitiesChars ) return( &m_captureLevelProbabilities ); +// The following does not work as PoPI::Database does not yet inherent from GUPI::Ancestry. This needs to be fixed. +// if( a_item == PoPI_PoPsChars ) return( &m_pops ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**inelasticIncidentEnergy**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +static Form *parseInelasticIncidentEnergySuite( Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_inelasticIncidentEnergyChars ) { + form = new InelasticIncidentEnergy( a_construction, a_node, a_setupInfo ); } + else { + std::cout << "parseInelasticIncidentEnergySuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**captureLevelProbability**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +static Form *parseCaptureLevelProbabilitySuite( Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_captureLevelProbabilityChars ) { + form = new CaptureLevelProbability( a_construction, a_node, a_setupInfo ); } + else { + std::cout << "parseCaptureLevelProbabilitySuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} +/* *********************************************************************************************************//** + * Function that parses a <**inelasticIncidentEnergy**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +InelasticIncidentEnergy::InelasticIncidentEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::GRIN_inelasticIncidentEnergy ), + m_energy( a_node.attribute_as_double( GIDI_energyChars ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ), + m_table( a_construction, a_node.child( GIDI_tableChars ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +InelasticIncidentEnergy::~InelasticIncidentEnergy( ) { + +} + +/* *********************************************************************************************************//** + * Function that parses a <**captureLevelProbability**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +CaptureLevelProbability::CaptureLevelProbability( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::GRIN_captureLevelProbability ), + m_probabilty( a_node.attribute_as_double( GIDI_probabilityChars ) ), + m_spin( a_node.attribute_as_double( PoPI_spinChars ) ), + m_spinUnit( a_node.attribute_as_string( GIDI_spinUnitChars ) ), + m_parity( a_node.attribute_as_int( PoPI_parityChars ) ), + m_capturePrimaryToContinua( a_node.attribute_as_string( GIDI_capturePrimaryToContinuaChars ) ), + m_table( a_construction, a_node.child( GIDI_tableChars ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +CaptureLevelProbability::~CaptureLevelProbability( ) { + +} + +} // End namespace GRIN. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_Legendre1d.cc b/source/processes/hadronic/models/lend/src/GIDI_Legendre1d.cc new file mode 100644 index 0000000000..7c417c4e0d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_Legendre1d.cc @@ -0,0 +1,142 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Legendre1d + * Class for the GNDS <**Legendre**> node. + */ + +/* *********************************************************************************************************//** + * @param a_axes [in] The axes to copy for *this*. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Legendre1d::Legendre1d( Axes const &a_axes, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_LegendreChars, FormType::Legendre1d, a_axes, ptwXY_interpolationLinLin, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Legendre1d::Legendre1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::Legendre1d, a_parent ) { + + nf_Buffer coeff; + parseValuesOfDoubles( a_construction, a_node.child( GIDI_valuesChars ), a_setupInfo, coeff ); + m_coefficients = coeff.vector(); +} + +/* *********************************************************************************************************//** + * The Legendre1d copy constructor. + * + * @param a_Legendre1d [in] The Legendre1d instance to copy. + ***********************************************************************************************************/ + +Legendre1d::Legendre1d( Legendre1d const &a_Legendre1d ) : + Function1dForm( GIDI_LegendreChars, FormType::Legendre1d, a_Legendre1d.axes( ), ptwXY_interpolationLinLin, 0, 0.0 ), + m_coefficients( a_Legendre1d.coefficients( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Legendre1d::~Legendre1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy. + * Currently not implemented. + * + * @param a_x1 [in] The projectile's energy. + * @return The value of the function evaluated at *a_x1*. + ***********************************************************************************************************/ + +double Legendre1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Legendre1d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_accuracy [in] The accuracy use to convert the data to lin=lin interpolation if needed. This argument is not needed or used for this cl + * @param a_lowerEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_upperEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Legendre1d::asXYs1d( LUPI_maybeUnused bool a_asLinlin, double a_accuracy, LUPI_maybeUnused double a_lowerEps, LUPI_maybeUnused double a_upperEps ) const { + + int size1 = static_cast( m_coefficients.size( ) ); + nf_Legendre *legendre1 = nf_Legendre_new( nullptr, 0, size1 - 1, const_cast( m_coefficients.data( ) ) ); + if( legendre1 == nullptr ) return( nullptr ); + + ptwXYPoints *xys = nf_Legendre_to_ptwXY( nullptr, legendre1, a_accuracy, 12, 1 ); + nf_Legendre_free( legendre1 ); + if( xys == nullptr ) return( nullptr ); + + return( new XYs1d( axes( ), xys ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Legendre1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( keyValue( ) != "" ) attributes = a_writeInfo.addAttribute( keyName( ), keyValue( ) ); + } + } + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + if( !a_embedded ) axes( ).toXMLList( a_writeInfo, indent2 ); + + doublesToXMLList( a_writeInfo, indent2, m_coefficients, 0, true ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables.cc b/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables.cc new file mode 100644 index 0000000000..f865b956fa --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables.cc @@ -0,0 +1,114 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +namespace ACE_URR { + +/*! \class ProbabilityTable + * Class for the LLNL defined **probabilityTable** node which is not a part of the **GNDS* 2.0 specifications. + * This node currently can be found in the **applicationData** node of a **reactionSuite** file with the label + * "*LLNL::URR_probability_tables*". + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ProbabilityTable::ProbabilityTable( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Form( a_node, a_setupInfo, FormType::ACE_URR_probabilityTable, a_parent ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + m_forms.push_back( new IncidentEnergy( a_construction, child, a_setupInfo ) ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ProbabilityTable::~ProbabilityTable( ) { + + for( auto iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void ProbabilityTable::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + for( auto iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class IncidentEnergy + * Class for the LLNL define **incidentEnergy** node which is not a **GNDS* 2.0 specifications. This node currently can be + * found in the **applicationData** node of a **reactionSuite** file with the label "*LLNL::ACE_URR_probability_tables*". + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +IncidentEnergy::IncidentEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::ACE_URR_probabilityTable ), + m_value( a_node.attribute( GIDI_valueChars ).as_double( ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ), + m_table( a_construction, a_node.first_child( ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IncidentEnergy::~IncidentEnergy( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void IncidentEnergy::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_valueChars, LUPI::Misc::doubleToShortestString( m_value ) ); + attributes += a_writeInfo.addAttribute( GIDI_unitChars, m_unit ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_table.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace ACE_URR. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables1d.cc b/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables1d.cc new file mode 100644 index 0000000000..4c2de82951 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_URR_probabilityTables1d.cc @@ -0,0 +1,96 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +namespace Functions { + +/*! \class URR_probabilityTables1d + * Class for the **GNDS* **URR_probabilityTables1d** node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +URR_probabilityTables1d::URR_probabilityTables1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::URR_probabilityTables1d, a_parent ), + m_function2d( data2dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + + if( m_function2d != nullptr ) m_function2d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +URR_probabilityTables1d::~URR_probabilityTables1d( ) { + + delete m_function2d; +} + +/* *********************************************************************************************************//** + * Returns the minimum energy for the URR probability tables. + ***********************************************************************************************************/ + +double URR_probabilityTables1d::domainMin( ) const { + + return( m_function2d->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the maximum energy for the URR probability tables. + ***********************************************************************************************************/ + +double URR_probabilityTables1d::domainMax( ) const { + + return( m_function2d->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the average value for the URR probability tables at energy *a_x1*. Currently does not work; always returns 0.0. + * + * @param a_x1 [in] The projectile energy to evaluate the URR probability tables at. + ***********************************************************************************************************/ + +double URR_probabilityTables1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void URR_probabilityTables1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + if( m_function2d != nullptr ) m_function2d->toXMLList_func( a_writeInfo, indent2, false, false ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_XYs1d.cc b/source/processes/hadronic/models/lend/src/GIDI_XYs1d.cc new file mode 100644 index 0000000000..5b617b789f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_XYs1d.cc @@ -0,0 +1,721 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include + +static void mutualifyDomains( ptwXYPoints const *a_lhs, ptwXYPoints const *a_rhs, ptwXYPoints **ptwXY1, ptwXYPoints **ptwXY2 ); + +namespace GIDI { + +namespace Functions { + +/*! \class XYs1d + * Class to store GNDS <**XYs1d**> node. + */ + +/* *********************************************************************************************************//** + * Constructor an empty XYs1d instance. + * + ***********************************************************************************************************/ + +XYs1d::XYs1d( ) : + Function1dForm( GIDI_XYs1dChars, FormType::XYs1d, Axes(), ptwXY_interpolationLinLin, 0, 0.0 ) { + + double dummy[2]; + + m_ptwXY = ptwXY_create2( nullptr, interpolation( ), 0, 0, 0, dummy, 0 ); +} + +/* *********************************************************************************************************//** + * Constructor that creates an empty instance. + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + * @return + ***********************************************************************************************************/ + +XYs1d::XYs1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_XYs1dChars, FormType::XYs1d, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + + double dummy[2]; + + m_ptwXY = ptwXY_create2( nullptr, a_interpolation, 0, 0, 0, dummy, 0 ); +} + +/* *********************************************************************************************************//** + * Constructor that create an instance from a list of doubles via **a_values** which must have an even number of values. + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_values [in] The data values as ( x_1, y_1, x_2, y_2, ..., x_n, y_n ). Must be an even number since they are n-pairs of xy values. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + * @return + ***********************************************************************************************************/ + +XYs1d::XYs1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::vector const &a_values, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_XYs1dChars, FormType::XYs1d, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + + int64_t length = static_cast( a_values.size( ) ) / 2; + + m_ptwXY = ptwXY_create2( nullptr, a_interpolation, length, 0, length, a_values.data( ), 0 ); +} + +/* *********************************************************************************************************//** + * Constructor that creates an instance from a list of x values and a list of y values. The size of **a_xs** + * and **a_ys** must be the same. + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_xs [in] The data values as ( x_1, x_2, ..., x_n ). + * @param a_ys [in] The data values as ( y_1, y_2, ..., y_n ). + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + * @return + ***********************************************************************************************************/ + +XYs1d::XYs1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::vector const &a_xs, std::vector const &a_ys, + int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_XYs1dChars, FormType::XYs1d, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + + if( a_xs.size( ) != a_ys.size( ) ) throw Exception( "XYs1d::XYs1d: xs and ys not the same size" ); + int64_t length = static_cast( a_xs.size( ) ); + + m_ptwXY = ptwXY_createFrom_Xs_Ys2( nullptr, a_interpolation, length, 0, length, a_xs.data( ), a_ys.data( ), 0 ); +} + +/* *********************************************************************************************************//** + * Constructor that uses an existing **ptwXYPoints** instance. The **m_ptwXY** member is set to **ptwXYPoints** (i.e., this + * XYs1d instance now owns the inputted **ptwXYPoints** instance). + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_ptwXY [in] The **ptwXYPoints** instance that *this* takes ownership of.* + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + * @return + ***********************************************************************************************************/ + +XYs1d::XYs1d( Axes const &a_axes, ptwXYPoints *a_ptwXY, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_XYs1dChars, FormType::XYs1d, a_axes, ptwXY_getInterpolation( a_ptwXY ), a_index, a_outerDomainValue ), + m_ptwXY( a_ptwXY ) { + +} + +/* *********************************************************************************************************//** + * Constructs the instance from a HAPI::Node instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The XYs1d HAPI::Node to be parsed and to construct the instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] If imbedded in a two dimensional function, its pointers. + ***********************************************************************************************************/ + +XYs1d::XYs1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::XYs1d, a_parent ) { + + HAPI::Node values = a_node.child( GIDI_valuesChars ); + nf_Buffer vals; + parseValuesOfDoubles( a_construction, values, a_setupInfo, vals ); + + int primarySize = vals.size() / 2, secondarySize = 0; + double *dvals = new double[vals.size()]; // Not sure we really need a copy here. + for( size_t idx = 0; idx < vals.size(); idx++ ) dvals[idx] = vals[idx]; + m_ptwXY = ptwXY_create( NULL, interpolation( ), interpolationString( ).c_str( ), 12, 1e-3, primarySize, secondarySize, primarySize, dvals, 0 ); + delete[] dvals; + if( m_ptwXY == nullptr ) throw Exception( "XYs1d::XYs1d: ptwXY_fromString failed" ); +} + +/* *********************************************************************************************************//** + * The XYs1d copy constructor. + * + * @param a_XYs1d [in] The XYs1d instance to copy. + ***********************************************************************************************************/ + +XYs1d::XYs1d( XYs1d const &a_XYs1d ) : + Function1dForm( a_XYs1d ), + m_ptwXY( nullptr ) { + + m_ptwXY = ptwXY_clone2( nullptr, a_XYs1d.ptwXY( ) ); + if( m_ptwXY == nullptr ) throw Exception( "XYs1d::XYs1d:2: ptwXY_clone2 failed" ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +XYs1d::~XYs1d( ) { + + ptwXY_free( m_ptwXY ); +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +XYs1d &XYs1d::operator=( XYs1d const &a_rhs ) { + + if( this != &a_rhs ) { + Function1dForm::operator=( a_rhs ); + + LUPI::StatusMessageReporting smr; + m_ptwXY = ptwXY_clone2( smr.smr( ), a_rhs.ptwXY( ) ); + if( m_ptwXY == nullptr ) throw Exception( smr.constructMessage( "XYs1d::operator=", -1, true ) ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * The element access methods that returns a point (i.e., an x1, y pair). + * + * @param a_index [in] The index of the element to access. + * @return The x1, y values at **a_index**. + ***********************************************************************************************************/ + +std::pair XYs1d::operator[]( std::size_t a_index ) const { + + if( (int64_t) a_index >= ptwXY_length( nullptr, m_ptwXY ) ) throw Exception( "XYs1d::operator[]: index out of bounds." ); + + ptwXYPoint *point = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, (int64_t) a_index ); + std::pair CPPPoint( point->x, point->y ); + + return( CPPPoint ); +} + +/* *********************************************************************************************************//** + * Adds two **XYs1d** instances and returns the result. + * + * @param a_rhs [in] The **XYs1d** instance to add to this instance. + * @return An **XYs1d** instance that is the sum of this and *a_rhs*. + ***********************************************************************************************************/ + +XYs1d XYs1d::operator+( XYs1d const &a_rhs ) const { + + XYs1d xys1d( *this ); + + xys1d += a_rhs; + return( xys1d ); +} + +/* *********************************************************************************************************//** + * Adds an **XYs1d** instance to this. + * + * @param a_rhs [in] The **XYs1d** instance to add to this instance. + * @return This instance. + ***********************************************************************************************************/ + +XYs1d &XYs1d::operator+=( XYs1d const &a_rhs ) { + + ptwXYPoints *sum, *ptwXY1, *ptwXY2; + LUPI::StatusMessageReporting smr; + + mutualifyDomains( m_ptwXY, a_rhs.ptwXY( ), &ptwXY1, &ptwXY2 ); + sum = ptwXY_add_ptwXY( smr.smr( ), ptwXY1, ptwXY2 ); + ptwXY_free( ptwXY1 ); + ptwXY_free( ptwXY2 ); + if( sum == nullptr ) + throw Exception( smr.constructMessage( "XYs1d::operator+=: ptwXY_add_ptwXY failed. ", -1, true ) ); + + ptwXY_free( m_ptwXY ); + m_ptwXY = sum; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Subtracts two **XYs1d** instances and returns the result. + * + * @param a_rhs [in] The **XYs1d** instance to substract from this instance. + * @return An **XYs1d** instance that is the difference of this and *a_rhs*. + ***********************************************************************************************************/ + +XYs1d XYs1d::operator-( XYs1d const &a_rhs ) const { + + XYs1d xys1d( *this ); + + xys1d -= a_rhs; + return( xys1d ); +} + +/* *********************************************************************************************************//** + * Subtracts an **XYs1d** instance from this. + * + * @param a_rhs [in] The **XYs1d** instance to subtract from this instance. + * @return This instance. + ***********************************************************************************************************/ + +XYs1d &XYs1d::operator-=( XYs1d const &a_rhs ) { + + ptwXYPoints *sum, *ptwXY1, *ptwXY2; + LUPI::StatusMessageReporting smr; + + mutualifyDomains( m_ptwXY, a_rhs.ptwXY( ), &ptwXY1, &ptwXY2 ); + sum = ptwXY_sub_ptwXY( smr.smr( ), ptwXY1, ptwXY2 ); + ptwXY_free( ptwXY1 ); + ptwXY_free( ptwXY2 ); + if( sum == nullptr ) + throw Exception( smr.constructMessage( "XYs1d::operator-=: ptwXY_sub_ptwXY failed. ", -1, true ) ); + + ptwXY_free( m_ptwXY ); + m_ptwXY = sum; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Multiplies *this* by a double and returns the result. + * + * @param a_value [in] Number with this instance. + * + * @return An **XYs1d** instance that is the product of this and *a_rhs*. + ***********************************************************************************************************/ + +XYs1d XYs1d::operator*( double a_value ) const { + + XYs1d xys1d( *this ); + + xys1d *= a_value; + return( xys1d ); +} + +/* *********************************************************************************************************//** + * Multiplies *this* with another **XYs1d** instances and returns the result. + * + * @param a_rhs [in] The **XYs1d** instance to multiply with this instance. + * + * @return An **XYs1d** instance that is the product of this and *a_rhs*. + ***********************************************************************************************************/ + +XYs1d XYs1d::operator*( XYs1d const &a_rhs ) const { + + XYs1d xys1d( *this ); + + xys1d *= a_rhs; + return( xys1d ); +} + +/* *********************************************************************************************************//** + * Multiplies a double with **this**. + * + * @param a_rhs [in] The **XYs1d** instance to subtract from this instance. + * + * @return This instance. + ***********************************************************************************************************/ + +XYs1d &XYs1d::operator*=( double a_value ) { + + LUPI::StatusMessageReporting smr; + + nfu_status status = ptwXY_mul_double( smr.smr( ), m_ptwXY, a_value ); + if( status != nfu_Okay ) + throw Exception( smr.constructMessage( "XYs1d::operator*=: ptwXY_mul_double failed. ", -1, true ) ); + + return( *this ); +} + +/* *********************************************************************************************************//** + * Multiplies **this** with an **XYs1d** instance. + * + * @param a_rhs [in] The **XYs1d** instance to subtract from this instance. + * + * @return This instance. + ***********************************************************************************************************/ + +XYs1d &XYs1d::operator*=( XYs1d const &a_rhs ) { + + ptwXYPoints *mul, *ptwXY1, *ptwXY2; + LUPI::StatusMessageReporting smr; + + mutualifyDomains( m_ptwXY, a_rhs.ptwXY( ), &ptwXY1, &ptwXY2 ); + mul = ptwXY_mul2_ptwXY( smr.smr( ), ptwXY1, ptwXY2 ); + ptwXY_free( ptwXY1 ); + ptwXY_free( ptwXY2 ); + if( mul == nullptr ) + throw Exception( smr.constructMessage( "XYs1d::operator*=: ptwXY_mul2_ptwXY failed. ", -1, true ) ); + + ptwXY_free( m_ptwXY ); + m_ptwXY = mul; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns the list of **x1** values of this. + * + * @return The **x1** values of this. + ***********************************************************************************************************/ + +std::vector XYs1d::xs( ) const { + + int64_t n1 = size( ); + std::vector _xs( n1, 0. ); + + for( int64_t i1 = 0; i1 < n1; ++i1 ) { + ptwXYPoint const *point = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, i1 ); + + _xs[i1] = point->x; + } + return( _xs ); +} + +/* *********************************************************************************************************//** + * Returns the list of **y** values of this. + * + * @return The **y** values of this. + ***********************************************************************************************************/ + +std::vector XYs1d::ys( ) const { + + int64_t n1 = size( ); + std::vector _ys( n1, 0. ); + + for( int64_t i1 = 0; i1 < n1; ++i1 ) { + ptwXYPoint const *point = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, i1 ); + + _ys[i1] = point->y; + } + return( _ys ); +} + +/* *********************************************************************************************************//** + * Returns a list of values that are this **y** mapped to the **x1** values in **a_xs**. + * + * @param a_xs [in] The list of **x1** values to map this' **y** values to. + * @param a_offset [out] The index of the first value in **a_xs** where this starts. + * @return The liist of **y** values. + ***********************************************************************************************************/ + +std::vector XYs1d::ysMappedToXs( std::vector const &a_xs, std::size_t *a_offset ) const { + + int64_t n1 = size( ), i2, n2 = a_xs.size( ); + std::vector _ys; + + *a_offset = 0; + if( n1 == 0 ) return( _ys ); + + ptwXYPoint const *point1 = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, 0 ); + for( i2 = 0; i2 < n2; ++i2 ) if( point1->x <= a_xs[i2] ) break; + *a_offset = i2; + if( i2 == n2 ) return( _ys ); + + for( int64_t i1 = 1; i1 < n1; ++i1 ) { + ptwXYPoint const *point2 = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, i1 ); + + while( i2 < n2 ) { + double x = a_xs[i2], y; + if( x > point2->x ) break; // Happens because of round off errors. Need to fix. + + ptwXY_interpolatePoint( nullptr, ptwXY_interpolationLinLin, x, &y, point1->x, point1->y, point2->x, point2->y ); + _ys.push_back( y ); + ++i2; + if( x >= point2->x ) break; // This check can fail hence check above. + } + point1 = point2; + } + + return( _ys ); +} + +/* *********************************************************************************************************//** + * Returns an **XYs1d** instance that is a domain slice of *this* from **domainMin** to **domainMax**. + * If the minimum (maximum) of *this* is greater (less) than **domainMin** (**domainMax**) that domain is unchanged. + * If *this*'s minimum is less than **domainMin**, **a_fill** is true and there is no point at **domainMin** + * then an interpolated point is added at **domainMin**. Similarly for **domainMax**. + * + * @param a_domainMin [in] The minimum domain for the returned instance if *this*' minimum is less than **domainMin*. + * @param a_domainMax [in] The maximum domain for the returned instance if *this*' maximum is less than **domainMax*. + * @param a_fill [in] If true, values at **domainMin** and **domainMax** are added if needed. + * + * @return An **XYs1d** instance. + ***********************************************************************************************************/ + +XYs1d XYs1d::domainSlice( double a_domainMin, double a_domainMax, bool a_fill ) const { + + LUPI::StatusMessageReporting smr; + ptwXYPoints *ptwXY1 = ptwXY_clone2( smr.smr( ), m_ptwXY ); + if( ptwXY1 == nullptr ) throw Exception( smr.constructMessage( "XYs1d::domainSlice", -1, true ) ); + + ptwXYPoints *ptwXYSliced = ptwXY_domainSlice( nullptr, ptwXY1, a_domainMin, a_domainMax, 10, a_fill ? 1 : 0 ); + ptwXY_free( ptwXY1 ); + if( ptwXYSliced == nullptr ) throw Exception( smr.constructMessage( "XYs1d::domainSlice", -1, true ) ); + + return( XYs1d( axes( ), ptwXYSliced, index( ), outerDomainValue( ) ) ); +} + +/* *********************************************************************************************************//** + * Returns an **XYs1d** instance that is this from its domain minimum to **domainMax**. + * + * @param a_domainMax [in] The maximum domain + * @return An **XYs1d** instance. + ***********************************************************************************************************/ + +XYs1d XYs1d::domainSliceMax( double a_domainMax ) const { + + ptwXYPoints *_ptwXY = ptwXY_clone2( nullptr, m_ptwXY ); + if( _ptwXY == nullptr ) throw Exception( "domainSliceMax: ptwXY_clone2 failed" ); + + ptwXYPoints *ptwXYSliced = ptwXY_domainMaxSlice( nullptr, _ptwXY, a_domainMax, 10, 1 ); + ptwXY_free( _ptwXY ); + if( ptwXYSliced == nullptr ) throw Exception( "domainSliceMax: ptwXY_domainMaxSlice failed" ); + + return( XYs1d( axes( ), ptwXYSliced ) ); +} + +/* *********************************************************************************************************//** + * The **y** value of this at the domain value **a_x1**. + * + * @param a_x1 [in] Domain value to evaluate this at. + * @return The value of this at the domain value **a_x1**. + ***********************************************************************************************************/ + +double XYs1d::evaluate( double a_x1 ) const { + + std::size_t length = ptwXY_length( nullptr, m_ptwXY ); + if( length == 0 ) throw Exception( "XYs1d::evaluate: XYs1d has no datum." ); + + ptwXYPoint *point = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, 0 ); + if( point->x >= a_x1 ) return( point->y ); + + point = ptwXY_getPointAtIndex_Unsafely( m_ptwXY, length - 1 ); + if( point->x <= a_x1 ) return( point->y ); + + double y; + nfu_status status = ptwXY_getValueAtX( nullptr, m_ptwXY, a_x1, &y ); + if( status != nfu_Okay ) throw Exception( "XYs1d::evaluate: status != nfu_Okay" ); + return( y ); +} + +/* *********************************************************************************************************//** + * Evaluates *this* at the X-values in *a_Xs*[*a_offset*:] and adds the results to *a_results*[*a_offset*:]. + * *a_Xs* and *a_results* must be the same size otherwise a throw is executed. + * + * @param a_offset [in] The offset in *a_Xs* to start. + * @param a_Xs [in] The list of domain values to evaluate *this* at. + * @param a_results [in] The list whose values are added to by the Y-values of *this*. + * @param a_scaleFactor [in] A factor applied to each evaluation before it is added to *a_results*. + ***********************************************************************************************************/ + +void XYs1d::mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const { + + if( a_Xs.size( ) != a_results.size( ) ) throw Exception( "XYs1d::mapToXsAndAdd: a_Xs.size( ) != a_results.size( )" ); + if( a_offset < 0 ) throw Exception( "XYs1d::mapToXsAndAdd: a_offset < 0." ); + + LUPI::StatusMessageReporting smr; + int64_t length = static_cast( a_Xs.size( ) ); + + nfu_status status = ptwXY_mapToXsAndAdd( smr.smr( ), m_ptwXY, a_offset, length, a_Xs.data( ), a_results.data( ), a_scaleFactor ); + if( ( status != nfu_Okay ) && ( status != nfu_tooFewPoints ) ) + throw Exception( smr.constructMessage( "XYs1d::mapToXsAndAdd", -1, true ) ); +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] If **true**, the inpolatation of the returned XYs1d instance will always be lin-lin. Otherwise, + * the interpolation depends on the child 1d functions. This argument is not needed or used for this class. + * @param a_accuracy [in] The accuracy use to convert the data to lin=lin interpolation if needed. This argument is not needed or used for this cl + * @param a_lowerEps [in] The dulling of the point at the domain minimum. + * @param a_upperEps [in] The dulling of the point at the domain maximum. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *XYs1d::asXYs1d( LUPI_maybeUnused bool a_asLinlin, double a_accuracy, double a_lowerEps, double a_upperEps ) const { + + ptwXYPoints *ptwXY2 = nullptr; + + if( m_ptwXY->interpolation == ptwXY_interpolationFlat ) { + ptwXY2 = ptwXY_flatInterpolationToLinear( nullptr, m_ptwXY, a_lowerEps, a_upperEps ); } + else { + ptwXY2 = ptwXY_toOtherInterpolation( nullptr, const_cast( m_ptwXY ), ptwXY_interpolationLinLin, a_accuracy ); + } + + + if( ptwXY2 == nullptr ) return( nullptr ); + + return( new XYs1d( axes( ), ptwXY2 ) ); +} + +/* *********************************************************************************************************//** + * This method returns **this** that is norimalized (i.e., its integral if 1.). The returned value is the integral + * of **this** before being normalized. + * + * @return A double. + ***********************************************************************************************************/ + +double XYs1d::integrate( double a_dommainMin, double a_dommainMax ) { + + double value = 0.0; + LUPI::StatusMessageReporting smr; + + nfu_status status = ptwXY_integrate( smr.smr( ), m_ptwXY, a_dommainMin, a_dommainMax, &value ); + if( status != nfu_Okay ) throw Exception( smr.constructMessage( "XYs1d::normalize", -1, true ) ); + + return( value ); +} + +/* *********************************************************************************************************//** + * This method returns **this** that is norimalized (i.e., its integral if 1.). The returned value is the integral + * of **this** before being normalized. + * + * @return A double. + ***********************************************************************************************************/ + +double XYs1d::normalize( ) { + + double value = 0.0; + LUPI::StatusMessageReporting smr; + + nfu_status status = ptwXY_integrateDomain( smr.smr( ), m_ptwXY, &value ); + if( status != nfu_Okay ) throw Exception( smr.constructMessage( "XYs1d::normalize", -1, true ) ); + + status = ptwXY_normalize( smr.smr( ), m_ptwXY ); + if( status != nfu_Okay ) throw Exception( smr.constructMessage( "XYs1d::normalize", -1, true ) ); + + return( value ); +} + +/* *********************************************************************************************************//** + * This method returns a *Xs_pdf_cdf1d* representation of *this*. + * + * @return An instance of *Xs_pdf_cdf1d*. + ***********************************************************************************************************/ + +Xs_pdf_cdf1d XYs1d::toXs_pdf_cdf1d( ) { +// FIXME, need to check that two consecutive cdf values are not the same. + + std::vector xs1 = xs( ); + std::vector pdf1 = ys( ); + + LUPI::StatusMessageReporting smr; + ptwXPoints *ptwX_cdf = ptwXY_runningIntegral( smr.smr( ), m_ptwXY ); + if( ptwX_cdf == nullptr ) throw Exception( smr.constructMessage( "XYs1d::toXs_pdf_cdf1d", -1, true ) ); + + std::vector cdf1( ptwX_cdf->length ); + for( int64_t index = 0; index < ptwX_cdf->length; ++index ) cdf1[index] = ptwX_cdf->points[index]; + ptwX_free( ptwX_cdf ); + + return( Xs_pdf_cdf1d( GIDI::Axes( ), ptwXY_interpolationLinLin, xs1, pdf1, cdf1 ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void XYs1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + if( interpolation( ) != ptwXY_interpolationLinLin ) attributes += a_writeInfo.addAttribute( GIDI_interpolationChars, interpolationString( ) ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + + std::vector doubles( 2 * size( ) ); + for( std::size_t i1 = 0; i1 < size( ); ++i1 ) { + std::pair point = (*this)[i1]; + doubles[2*i1] = point.first; + doubles[2*i1+1] = point.second; + } + + doublesToXMLList( a_writeInfo, indent2, doubles ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Writes the (x,y) values to *a_file*. The format string must have two double conversion specifiers (e.g., " %12.3e %.6f"). + * + * @param a_file [in] The C FILE instance to write the data to. + * @param a_format [in] The format string passed to the C printf function. + ***********************************************************************************************************/ + +void XYs1d::write( FILE *a_file, std::string const &a_format ) const { + + ptwXY_simpleWrite( m_ptwXY, a_file, a_format.c_str( ) ); +} + +/* *********************************************************************************************************//** + * This is a factory function for the XYs1d class that creates a XYs1d instance with the constant value + * of *a_value* for the domain from *a_domainMin* to *a_domainMax*. + * + * @param a_axes [in] The axes for the function. + * @param a_domainMin [in] The minimum of the domain for which the function is defined. + * @param a_domainMax [in] The maximum of the domain for which the function is defined. + * @param a_value [in] The y-value of the function over its domain. + ***********************************************************************************************************/ + +XYs1d *XYs1d::makeConstantXYs1d( Axes const &a_axes, double a_domainMin, double a_domainMax, double a_value ) { + + std::vector points( 4 ); + + points[0] = a_domainMin; + points[1] = a_value; + points[2] = a_domainMax; + points[3] = a_value; + + return( new XYs1d( a_axes, ptwXY_interpolationLinLin, points ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. + +/* *********************************************************************************************************//** + * Returns to instances of **ptwXYPoints** that are the mutualified domains of **a_lhs** and **a_rhs**. + * + * @param a_lhs [in] One of the instances used to mutualify domains. + * @param a_rhs [in] One of the instances used to mutualify domains. + * @param a_ptwXY1 [out] The mutualified domain for **a_lhs**. + * @param a_ptwXY2 [out] The mutualified domain for **a_rhs**. + ***********************************************************************************************************/ + +static void mutualifyDomains( ptwXYPoints const *a_lhs, ptwXYPoints const *a_rhs, ptwXYPoints **a_ptwXY1, ptwXYPoints **a_ptwXY2 ) { + + double lowerEps = 1e-12, upperEps = 1e-12; + + *a_ptwXY1 = ptwXY_clone2( nullptr, a_lhs ); + if( *a_ptwXY1 == nullptr ) throw GIDI::Exception( "mutualifyDomains: ptwXY_clone2 failed for a_ptwXY1" ); + + *a_ptwXY2 = ptwXY_clone2( nullptr, a_rhs ); + if( *a_ptwXY2 == nullptr ) { + ptwXY_free( *a_ptwXY1 ); + throw GIDI::Exception( "mutualifyDomains: ptwXY_clone2 failed form a_ptwXY2" ); + } + + nfu_status status = ptwXY_mutualifyDomains( nullptr, *a_ptwXY1, lowerEps, upperEps, 1, *a_ptwXY2, lowerEps, upperEps, 1 ); + if( status != nfu_Okay ) { + ptwXY_free( *a_ptwXY1 ); + ptwXY_free( *a_ptwXY2 ); + throw GIDI::Exception( "XYs1d::operator(+|-)=: mutualifyDomains in ptwXY_mutualifyDomains" ); + } +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_XYs2d.cc b/source/processes/hadronic/models/lend/src/GIDI_XYs2d.cc new file mode 100644 index 0000000000..697f6e40b2 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_XYs2d.cc @@ -0,0 +1,177 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class XYs2d + * Class to store GNDS <**XYs2d**> node. + */ + +/* *********************************************************************************************************//** + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +XYs2d::XYs2d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + Function2dForm( GIDI_XYs2dChars, FormType::XYs2d, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +XYs2d::XYs2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::XYs2d, a_parent ), + m_interpolationQualifier( a_node.attribute_as_string( GIDI_interpolationQualifierChars ) ) { + + if( a_setupInfo.m_formatVersion.format( ) != GNDS_formatVersion_1_10Chars ) { + data1dListParse( a_construction, a_node.child( GIDI_function1dsChars ), a_setupInfo, m_function1ds ); + checkOuterDomainValues1d( m_function1ds, m_Xs ); + return; // Need to add uncertainty parsing. + } + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_axesChars ) continue; + if( name == GIDI_uncertaintyChars ) continue; + + Function1dForm *_form = data1dParse( a_construction, child, a_setupInfo, nullptr ); + if( _form == nullptr ) throw Exception( "XYs2d::XYs2d: data1dParse returned nullptr." ); + if( m_Xs.size( ) > 0 ) { + if( _form->outerDomainValue( ) <= m_Xs[m_Xs.size( )-1] ) throw Exception( "XYs2d::XYs2d: next outerDomainValue <= current outerDomainValue." ); + } + m_Xs.push_back( _form->outerDomainValue( ) ); + m_function1ds.push_back( _form ); + } + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +XYs2d::~XYs2d( ) { + + for( std::vector::iterator iter = m_function1ds.begin( ); iter < m_function1ds.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double XYs2d::domainMin( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs2d::domainMin: XYs2d has no 1d-functions" ); + return( m_Xs[0] ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double XYs2d::domainMax( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs2d::domainMax: XYs2d has no 1d-functions" ); + return( m_Xs[m_Xs.size( )-1] ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function *f(x2,x1)* at the specified point *a_x2* and *a_x1*. + * + * @param a_x2 [in] The value of the **x2** axis. + * @param a_x1 [in] The value of the **x1** axis. + * @return The value of the function evaluated at *a_x2* and *a_x1*. + ***********************************************************************************************************/ + +double XYs2d::evaluate( double a_x2, double a_x1 ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs2d::evaluate: XYs2d has no 1d functions." ); + + long iX2 = binarySearchVector( a_x2, m_Xs ); + + if( iX2 < 0 ) { + if( iX2 == -1 ) { /* x2 > last value of Xs. */ + return( m_function1ds.back( )->evaluate( a_x1 ) ); + } + return( m_function1ds[0]->evaluate( a_x1 ) ); /* x2 < first value of Xs. */ + } + +// Currently does not interpolate; + return( m_function1ds[iX2]->evaluate( a_x1 ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_function1d [in] The 1-d function to append to *this*. + ***********************************************************************************************************/ + +void XYs2d::append( Function1dForm *a_function1d ) { + + if( m_function1ds.size( ) > 0 ) { + if( a_function1d->outerDomainValue( ) <= m_Xs.back( ) ) Exception( "XYs2d::append: next outerDomainValue <= current outerDomainValue." ); + } + + m_Xs.push_back( a_function1d->outerDomainValue( ) ); + m_function1ds.push_back( a_function1d ); + a_function1d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void XYs2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + if( m_interpolationQualifier != "" ) attributes = a_writeInfo.addAttribute( GIDI_interpolationQualifierChars, m_interpolationQualifier ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + if( !a_embedded ) axes( ).toXMLList( a_writeInfo, indent2 ); + + for( std::vector::const_iterator iter = m_function1ds.begin( ); iter != m_function1ds.end( ); ++iter ) (*iter)->toXMLList_func( a_writeInfo, indent2, true, false ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_XYs3d.cc b/source/processes/hadronic/models/lend/src/GIDI_XYs3d.cc new file mode 100644 index 0000000000..8674cfb598 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_XYs3d.cc @@ -0,0 +1,178 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class XYs3d + * Class for the GNDS <**XYs3d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +XYs3d::XYs3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function3dForm( a_construction, a_node, a_setupInfo, FormType::XYs3d, a_parent ), + m_interpolationQualifier( a_node.attribute_as_string( GIDI_interpolationQualifierChars ) ) { + + if( a_setupInfo.m_formatVersion.format( ) != GNDS_formatVersion_1_10Chars ) { + data2dListParse( a_construction, a_node.child( GIDI_function2dsChars ), a_setupInfo, m_function2ds ); + checkOuterDomainValues2d( m_function2ds, m_Xs ); + return; // Need to add uncertainty parsing. + } + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_axesChars ) continue; + if( name == GIDI_uncertaintyChars ) continue; + + Function2dForm *_form = data2dParse( a_construction, child, a_setupInfo, nullptr ); + if( _form == nullptr ) throw Exception( "XYs3d::XYs3d: data2dParse returned nullptr." ); + if( m_Xs.size( ) > 0 ) { + if( _form->outerDomainValue( ) <= m_Xs[m_Xs.size( )-1] ) throw Exception( "XYs3d::XYs3d: next outerDomainValue <= current outerDomainValue." ); + } + m_Xs.push_back( _form->outerDomainValue( ) ); + m_function2ds.push_back( _form ); + } + +} + +/* *********************************************************************************************************//** + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +XYs3d::XYs3d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + Function3dForm( GIDI_XYs3dChars, FormType::XYs3d, a_axes, a_interpolation, a_index, a_outerDomainValue ), + m_interpolationQualifier( "" ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +XYs3d::~XYs3d( ) { + + for( std::vector::iterator iter = m_function2ds.begin( ); iter < m_function2ds.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double XYs3d::domainMin( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs3d::domainMin: XYs3d has no 2d-functions" ); + return( m_Xs[0] ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double XYs3d::domainMax( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs3d::domainMax: XYs3d has no 2d-functions" ); + return( m_Xs[m_Xs.size( )-1] ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function *f(x3,x2,x1)* at the specified point *a_x3*, *a_x2* and *a_x1*. + * + * @param a_x3 [in] The value of the **x3** axis. + * @param a_x2 [in] The value of the **x2** axis. + * @param a_x1 [in] The value of the **x1** axis. + * @return The value of the function evaluated at *a_x3*, *a_x2* and *a_x1*. + ***********************************************************************************************************/ + +double XYs3d::evaluate( double a_x3, double a_x2, double a_x1 ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "XYs3d::evaluate: XYs3d has no 2d functions." ); + + long iX3 = binarySearchVector( a_x3, m_Xs ); + + if( iX3 < 0 ) { + if( iX3 == -1 ) { /* x3 > last value of Xs. */ + return( m_function2ds.back( )->evaluate( a_x2, a_x1 ) ); + } + return( m_function2ds[0]->evaluate( a_x2, a_x1 ) ); /* x3 < first value of Xs. */ + } + +// Currently does not interpolate; + return( m_function2ds[iX3]->evaluate( a_x2, a_x1 ) ); +} + +/* *********************************************************************************************************//** + * Appends *a_function2d* to the end of *this*. + * + * @param a_function2d [in] The 2d-function to append to *this*. + ***********************************************************************************************************/ + +void XYs3d::append( Function2dForm *a_function2d ) { + + if( m_function2ds.size( ) > 0 ) { + if( a_function2d->outerDomainValue( ) <= m_Xs.back( ) ) throw Exception( "XYs3d::append: outerDomainValue not greater than current maximum outer domain's value." ); + } + + m_Xs.push_back( a_function2d->outerDomainValue( ) ); + m_function2ds.push_back( a_function2d ); + a_function2d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void XYs3d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + if( m_interpolationQualifier != "" ) attributes = a_writeInfo.addAttribute( GIDI_interpolationQualifierChars, m_interpolationQualifier ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + for( std::vector::const_iterator iter = m_function2ds.begin( ); iter != m_function2ds.end( ); ++iter ) (*iter)->toXMLList_func( a_writeInfo, indent2, true, false ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_Ys1d.cc b/source/processes/hadronic/models/lend/src/GIDI_Ys1d.cc new file mode 100644 index 0000000000..25c1e0ac1a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_Ys1d.cc @@ -0,0 +1,217 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Ys1d + * Class to store GNDS <**Ys1d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation flag. + * @param a_index [in] If imbedded in a two dimensional function, the index of this instance. + * @param a_outerDomainValue [in] If imbedded in a two dimensional function, the domain value for *x2*. + ***********************************************************************************************************/ + +Ys1d::Ys1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_Ys1dChars, FormType::Ys1d, a_axes, a_interpolation, a_index, a_outerDomainValue ), + m_start( 0 ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation flag. + * @param a_start [in] The index of the x1 value the **Ys** data start at. + * @param a_Ys [in] The list of y values. + * @param a_index [in] If imbedded in a two dimensional function, the index of this instance. + * @param a_outerDomainValue [in] If imbedded in a two dimensional function, the domain value for *x2*. + ***********************************************************************************************************/ + +Ys1d::Ys1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::size_t a_start, std::vector const &a_Ys, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_Ys1dChars, FormType::Ys1d, a_axes, a_interpolation, a_index, a_outerDomainValue ), + m_start( a_start ), + m_Ys( a_Ys ) { + +} + + +/* *********************************************************************************************************//** + * Constructs the instance from a **HAPI::Nodee** instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The Ys1d HAPI::Node to be parsed and to construct the instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] If imbedded in a two dimensional function, its pointers. + ***********************************************************************************************************/ + +Ys1d::Ys1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::Ys1d, a_parent ), + m_start( a_node.child( "values" ).attribute( "start" ).as_int( ) ), // as_int returns 0 if "start" not present. + m_Ys( ) { + + HAPI::Node values = a_node.child("values"); + nf_Buffer data; + parseValuesOfDoubles( a_construction, values, a_setupInfo, data ); + m_Ys.resize( (long) data.size() ); + for( size_t i1 = 0; i1 < data.size(); ++i1 ) m_Ys[i1] = data[i1]; +} + +/* *********************************************************************************************************//** + * The Ys1d copy constructor. + * + * @param a_Ys1d + ***********************************************************************************************************/ + +Ys1d::Ys1d( Ys1d const &a_Ys1d ) : + Function1dForm( a_Ys1d ), + m_start( a_Ys1d.start( ) ), + m_Ys( a_Ys1d.Ys( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Ys1d::~Ys1d( ) { + +} + +/* *********************************************************************************************************//** + * Adds two **Ys1d** instances and returns the result. + * + * @param a_rhs [in] The **Ys1d** instance to add to this instance. + * @return An **Ys1d** instance that is the sum of this and *a_rhs*. + ***********************************************************************************************************/ + +Ys1d Ys1d::operator+( Ys1d const &a_rhs ) const { + + Ys1d _Ys1d( *this ); + + _Ys1d += a_rhs; + return( _Ys1d ); +} + +/* *********************************************************************************************************//** + * Adds an **Ys1d** instance to this. + * + * @param a_rhs [in] The **Ys1d** instance to add to this instance. + * @return This instance. + ***********************************************************************************************************/ + +Ys1d &Ys1d::operator+=( Ys1d const &a_rhs ) { + + if( length( ) == 0 ) m_start = a_rhs.length( ); // Allow for empty (uninitialized) this. + if( length( ) != a_rhs.length( ) ) throw Exception( "Ys1d::operator+=: lengths not equal." ); + + long deltaStart = (long) a_rhs.start( ); + deltaStart -= (long) m_start; + if( deltaStart >= 0 ) { + for( std::size_t i1 = 0; i1 < a_rhs.size( ); ++i1 ) m_Ys[i1+deltaStart] += a_rhs[i1]; } + else { + std::vector _Ys( a_rhs.Ys( ) ); + + for( std::size_t i1 = 0; i1 < size( ); ++i1 ) _Ys[i1-deltaStart] += m_Ys[i1]; + m_Ys = _Ys; + m_start = a_rhs.start( ); + } + return( *this ); +} + +/* *********************************************************************************************************//** + * This is currently not implemented. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Ys1d::domainMin( ) const { + +#if !defined(__NVCC__) && !defined(__HIP__) + throw Exception( "Ys1d::domainMin: not implemented" ); +#endif + + return( 0. ); +} + +/* *********************************************************************************************************//** + * This is currently not implemented. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Ys1d::domainMax( ) const { + +#if !defined(__NVCC__) && !defined(__HIP__) + throw Exception( "Ys1d::domainMax: not implemented" ); +#endif + + return( 0. ); +} + +/* *********************************************************************************************************//** + * This is currently not implemented. + * + * @param a_x1 [in] Domain value to evaluate this at. + * @return + ***********************************************************************************************************/ + +double Ys1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + +#if !defined(__NVCC__) && !defined(__HIP__) + throw Exception( "Ys1d::evaluate: not implemented" ); +#endif + + return( 0. ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Ys1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + doublesToXMLList( a_writeInfo, indent2, m_Ys, m_start ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Writes the pair (index, y) values to *a_file*. The format string must have a long and a double conversion specifiers (e.g., " %10ld %.6f"). + * + * @param a_file [in] The C FILE instance to write the data to. + * @param a_format [in] The format string passed to the C printf function. + ***********************************************************************************************************/ + +void Ys1d::write( FILE *a_file, std::string const &a_format ) const { + + long size = static_cast( m_Ys.size( ) ); + for( long index = 0; index < size; ++index ) fprintf( a_file, a_format.c_str( ), index + m_start, m_Ys[index] ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_array3d.cc b/source/processes/hadronic/models/lend/src/GIDI_array3d.cc new file mode 100644 index 0000000000..41078e08a5 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_array3d.cc @@ -0,0 +1,111 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Array3d + * Class to store a 3d array. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Array3d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +Array3d::Array3d( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ) : + Form( a_node, a_setupInfo, FormType::array3d ), + m_array( a_node, a_setupInfo, 3, a_useSystem_strtod ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Array3d::~Array3d( ) { + +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the ProtareSingle that + * contains the TNSL data covers the lower energy multi-group data. + * + * @param a_maxTNSL_index [in] All elements up to "row" *a_maxTNSL_index* exclusive are zero-ed. + ***********************************************************************************************************/ + +void Array3d::modifiedMultiGroupElasticForTNSL( int a_maxTNSL_index ) { + + std::vector const &m_shape = m_array.shape( ); + int maxFlatIndex = a_maxTNSL_index * m_shape[1] * m_shape[2]; + + m_array.setToValueInFlatRange( 0, maxFlatIndex, 0.0 ); +} + + +/* *********************************************************************************************************//** + * Returns the matrix that represents the specified 3rd dimension. That is the matrix M[i][j] for all i, j of A2d[i][j][*a_index*]. + * This is mainly used for multi-group, Legendre expanded transfer matrices where a specific Legendre order is requested. This is, + * the matrix represent the *energy_in* as rows and the *energy_outp* as columns for a specific Legendre order. + * + * @param a_index [in] The requested *index* for the 3rd dimension. + ***********************************************************************************************************/ + +Matrix Array3d::matrix( std::size_t a_index ) const { + + if( size( ) <= a_index ) { + Matrix matrix( 0, 0 ); + return( matrix ); + } + + std::size_t numberOfOrders = m_array.m_shape[2], rows = m_array.m_shape[0], columns = m_array.m_shape[1]; + Matrix matrix( rows, columns ); + + std::size_t lengthSum = 0; + for( std::size_t i1 = 0; i1 < m_array.m_numberOfStarts; ++i1 ) { + std::size_t start = m_array.m_starts[i1]; + std::size_t length = m_array.m_lengths[i1]; + + std::size_t energyInIndex = start / ( numberOfOrders * columns ); + std::size_t energyOutIndex = start % ( numberOfOrders * columns ); + std::size_t orderIndex = energyOutIndex % numberOfOrders; + energyOutIndex /= numberOfOrders; + + std::size_t step = a_index - orderIndex; + if( orderIndex > a_index ) { + ++energyOutIndex; + if( energyOutIndex >= columns ) { + energyOutIndex = 0; + ++energyInIndex; + } + step += numberOfOrders; + } + std::size_t dataIndex = lengthSum + step; + for( ; step < length; step += numberOfOrders ) { + matrix.set( energyInIndex, energyOutIndex, m_array.m_dValues[dataIndex] ); + ++energyOutIndex; + if( energyOutIndex >= columns ) { + energyOutIndex = 0; + ++energyInIndex; + } + dataIndex += numberOfOrders; + } + lengthSum += length; + } + + return( matrix ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_arrays.cc b/source/processes/hadronic/models/lend/src/GIDI_arrays.cc new file mode 100644 index 0000000000..98e43b216e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_arrays.cc @@ -0,0 +1,359 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Array { + +/* *********************************************************************************************************//** + * Helper function to parse the *shape* attribute for an Array instance. + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the shape. This must be a reference to the array node. + * + * @return Returns a *std::vector* of the shape. + ***********************************************************************************************************/ + +static std::vector parseArrayShape( HAPI::Node const &a_node ) { + + std::string shape = a_node.attribute_as_string( GIDI_shapeChars ); + std::vector shapeInts; + + long numberOfDimensions = (long) std::count( shape.begin( ), shape.end( ), ',' ) + 1, prior = 0, next; + while( --numberOfDimensions >= 0 ) { + next = shape.find( ",", prior ); + std::string value( shape.substr( prior, next - prior ) ); + prior = next + 1; + shapeInts.push_back( atoi( value.c_str( ) ) ); + } + + return( shapeInts ); +} + +/*! \class FullArray + * The class for storing any **GNDS** array as a flattened full array. It is the array returned by the + * Array.constructArray method. Note, this class is never used to store a **GNDS** array node, but to + * provide a convenient way to access data in any of the ways an array can be stored compactly in **GNDS**. + */ + +/* *********************************************************************************************************//** + * Constructs a FullArray using the arguments *a_shape*. The values for *m_flattenedValues* are set to 0.0. + * + * @param a_shape [in] The shape of the full array. + ***********************************************************************************************************/ + +FullArray::FullArray( std::vector a_shape ) : + m_shape( a_shape ) { + + std::size_t size = 1; + for( auto iter = a_shape.begin( ); iter != a_shape.end( ); ++iter ) size *= *iter; + m_flattenedValues.resize( size, 0.0 ); +} + +/* *********************************************************************************************************//** + * Constructs a FullArray using the arguments *a_shape* and *a_flattenedValues*. + * + * @param a_shape [in] The shape of the full array. + * @param a_flattenedValues [in] The values of the array. Its size must be the same has that specified by *a_shape*. + ***********************************************************************************************************/ + +FullArray::FullArray( std::vector a_shape, std::vector a_flattenedValues ) : + m_shape( a_shape ) { + + std::size_t size = 1; + for( auto iter = a_shape.begin( ); iter != a_shape.end( ); ++iter ) size *= *iter; + + if( size != static_cast( a_flattenedValues.size( ) ) ) throw Exception( "FullArray::FullArray: a_shape and a_flattenedValues are not the same size." ); + + m_flattenedValues.resize( size ); + for( std::size_t index = 0; index < size; ++index ) m_flattenedValues[index] = a_flattenedValues[index]; +} + +/*! \class Array + * The class for storing any **GNDS** array. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Array2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +Array::Array( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ) : + Form( a_node, a_setupInfo, FormType::array ), + m_shape( parseArrayShape( a_node ) ), + m_compression( a_node.attribute_as_string( GIDI_compressionChars ) ), + m_symmetry( a_node.attribute_as_string( GIDI_symmetryChars ) ), + m_permutation( a_node.attribute_as_string( GIDI_permutationChars ) ), + m_storageOrder( a_node.attribute_as_string( GIDI_storageOrderChars ) ) { + + if( m_compression == "" ) m_compression = GIDI_noneChars; + + if( ( m_compression == GIDI_noneChars ) || ( m_compression == GIDI_diagonalChars ) || ( m_compression == GIDI_flattenedChars ) ) { + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + if( name != GIDI_valuesChars ) throw Exception( "For '" + moniker( ) + "' array, child node not 'values' but '" + name + "'." ); + + std::string label1( child.attribute_as_string( GIDI_labelChars ) ); + if( label1 == "" ) { + parseValuesOfDoubles( child, a_setupInfo, m_values, a_useSystem_strtod ); } + else if( label1 == GIDI_startingIndices ) { + if( m_compression != GIDI_diagonalChars ) throw Exception( "Invalid values' label '" + label1 + "'." ); + parseValuesOfInts( child, a_setupInfo, m_starts ); } + else if( label1 == GIDI_startsChars ) { + if( m_compression != GIDI_flattenedChars ) throw Exception( "Invalid values' label " + label1 + "." ); + parseValuesOfInts( child, a_setupInfo, m_starts ); } + else if( label1 == GIDI_lengthsChars ) { + if( m_compression != GIDI_flattenedChars ) throw Exception( "Invalid values' label '" + label1 + "'." ); + parseValuesOfInts( child, a_setupInfo, m_length ); } + else { + throw Exception( "Invalid values' label '" + label1 + "'." ); + } + } } + else { // m_compression == GIDI_embeddedChars + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + if( name != GIDI_arrayChars ) throw Exception( "For 'embedded' array, child node not 'array' but '" + name + "'." ); + + m_array.push_back( new Array( child, a_setupInfo, a_useSystem_strtod ) ); + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Array::~Array( ) { + + for( auto iter = m_array.begin( ); iter != m_array.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Calculates the size of *this* which is the product of all the *m_shape* values. + * + * @return The product of the *m_shape* values. + ***********************************************************************************************************/ + +std::size_t Array::size( ) const { + + std::size_t size1 = 1; + for( auto iter = m_shape.begin( ); iter != m_shape.end( ); ++iter ) size1 *= *iter; + + return( size1 ); +} + +/* *********************************************************************************************************//** + * Returns an array that is a FullArray instance of *this*. Note, this does not currently handle symmetry, permutation + * or storageOrder. + * + * @return Return a FullArray of *this*. + ***********************************************************************************************************/ + +FullArray Array::constructArray( ) const { + + std::vector values( size( ) ); + + if( m_compression == GIDI_noneChars ) { + values = m_values.vector( ); } + else if( m_compression == GIDI_diagonalChars ) { + throw Exception( "Array::constructArray: compression '" + m_compression + "' not supported." ); } + else if( m_compression == GIDI_flattenedChars ) { + int index = 0; + for( std::size_t index1 = 0; index1 < m_starts.size( ); ++index1 ) { + int length = m_length[index1]; + int start = m_starts[index1]; + + for( int index2 = 0; index2 < length; ++index2, ++index ) values[start+index2] = m_values[index]; + } } + else { + throw Exception( "Array::constructArray: compression '" + m_compression + "' not supported." ); + } + + FullArray fullArray( m_shape, values ); + return( fullArray ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * Currently does nothing. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Array::toXMLList( LUPI_maybeUnused GUPI::WriteInfo &a_writeInfo, LUPI_maybeUnused std::string const &a_indent ) const { + +} + +} // End namespace Array. + +/* *********************************************************************************************************//** + * Function to parse a one-d flattened array. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_data [out] An empty GIDI::Vector that is filled with the data. + * + * @return 0 if successfull and 1 otherwise. + ***********************************************************************************************************/ + +int parseFlattened1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Vector &a_data ) { + + FlattenedArrayData arrayData( a_node, a_setupInfo, 1, a_construction.useSystem_strtod( ) ); + + std::size_t size = (std::size_t) arrayData.m_shape[0]; + a_data.resize( size ); + + std::size_t n1 = 0, n2 = size; + for( std::size_t i1 = 0; i1 < arrayData.m_numberOfStarts; ++i1 ) { + std::size_t offset = (std::size_t) arrayData.m_starts[i1]; + for( int32_t i2 = 0; i2 < arrayData.m_lengths[i1]; ++i2, ++n1, ++offset ) { + if( n1 >= arrayData.m_dValues.size( ) ) throw Exception( "Too many values in flattened array." ); + if( offset >= n2 ) throw Exception( "requested size is too small." ); + a_data[offset] = arrayData.m_dValues[n1]; + } + } + return( 0 ); +} + +/* *********************************************************************************************************//** + * Function to parse a flattened array of dimension **a_dimensions**. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_dimensions [in] The dimension of the flattened array to be parsed. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +FlattenedArrayData::FlattenedArrayData( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_dimensions, int a_useSystem_strtod ) : + Form( a_node, a_setupInfo, FormType::flattenedArrayData ), + m_numberOfStarts( 0 ), + m_numberOfLengths( 0 ), + m_starts( ), + m_lengths( ) { + + bool m_dValuesPresent( false ); + + std::string shape( a_node.attribute_as_string( GIDI_shapeChars ) ); + long numberOfDimensions = (long) std::count( shape.begin( ), shape.end( ), ',' ), prior = 0, next; + while( --numberOfDimensions >= 0 ) { + next = shape.find( ",", prior ); + std::string value( shape.substr( prior, next - prior ) ); + prior = next + 1; + m_shape.push_back( atoi( value.c_str( ) ) ); + } + std::string value( shape.substr( prior ) ); + m_shape.push_back( atoi( value.c_str( ) ) ); + + if( a_dimensions != (int) m_shape.size( ) ) throw Exception( "a_dimensions != m_shape.size( )" ); + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_valuesChars ) { + std::string label( child.attribute_as_string( GIDI_labelChars ) ); + if( label == GIDI_startsChars ) { + parseValuesOfInts( child, a_setupInfo, m_starts ); + m_numberOfStarts = (std::size_t) m_starts.size(); } + else if( label == GIDI_lengthsChars ) { + parseValuesOfInts( child, a_setupInfo, m_lengths ); + m_numberOfLengths = (std::size_t) m_lengths.size(); } + else if( label == "" ) { + m_dValuesPresent = true; + parseValuesOfDoubles( child, a_setupInfo, m_dValues, a_useSystem_strtod ); } + else { + throw Exception( "unknown label for flatteded array sub-element" ); + } } + else { + throw Exception( "unknown flattened array sub-element" ); + } + } + if( m_starts.data() == nullptr ) throw Exception( "array missing starts element" ); + if( m_lengths.data() == nullptr ) throw Exception( "array missing lengths element" ); + if( !m_dValuesPresent ) throw Exception( "array missing dValues element" ); + if( m_numberOfStarts != m_numberOfLengths ) throw Exception( "m_numberOfStarts != m_numberOfLengths for array" ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +FlattenedArrayData::~FlattenedArrayData( ) { + +// smr_freeMemory2( m_starts ); +// smr_freeMemory2( m_lengths ); +} + +/* *********************************************************************************************************//** + * Sets all elements in the range [*a_start*,*a_end*) to *a_value*. + * + * @param a_start [in] The starting flat-cell index of *this* to fill with *a_value*. + * @param a_end [in] One after the last flat-cell index of *this* to fill with *a_value*. + * @param a_value [in] The value to set each double in the range to. + ***********************************************************************************************************/ + +void FlattenedArrayData::setToValueInFlatRange( LUPI_maybeUnused int a_start, int a_end, LUPI_maybeUnused double a_value ) { + + int size = 1; + for( auto iter = m_shape.begin( ); iter != m_shape.end( ); ++iter ) size *= *iter; + a_end = std::min( a_end, size ); + + long numberOfValuesToSet = 0; + for( std::size_t startIndex = 0; startIndex < m_numberOfStarts; ++startIndex ) { + long start = m_starts[startIndex]; + long length = m_lengths[startIndex]; + + if( ( start + length ) > a_end ) length = a_end - start; + if( length < 0 ) break; + numberOfValuesToSet += length; + } + + for( long index = 0; index < numberOfValuesToSet; ++index ) m_dValues[index] = 0.0; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void FlattenedArrayData::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::vector ints; + + std::string shapeString; + std::string sep = ""; + for( std::size_t i1 = 0; i1 < m_shape.size( ); ++i1 ) { + shapeString += sep + intToString( m_shape[i1] ); + sep = ","; + } + + std::string attributes = a_writeInfo.addAttribute( GIDI_shapeChars, shapeString ) + a_writeInfo.addAttribute( "compression", "flattened" ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + for( std::size_t i1 = 0; i1 < m_numberOfStarts; ++i1 ) ints.push_back( m_starts[i1] ); + intsToXMLList( a_writeInfo, indent2, ints, " valueType=\"Integer32\" label=\"starts\"" ); + + ints.clear( ); + for( std::size_t i1 = 0; i1 < m_numberOfLengths; ++i1 ) ints.push_back( m_lengths[i1] ); + intsToXMLList( a_writeInfo, indent2, ints, " valueType=\"Integer32\" label=\"lengths\"" ); + + doublesToXMLList( a_writeInfo, indent2, m_dValues.vector() ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_axes.cc b/source/processes/hadronic/models/lend/src/GIDI_axes.cc new file mode 100644 index 0000000000..dfc2ace495 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_axes.cc @@ -0,0 +1,144 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Axes + * Represents a **GNDS axes** node. An axes is a list of Axis and/or Grid nodes. An axes contains a list of *N* independent axis and/or grid nodes, + * and a dependent axis node. The dimension of an axes is the number of independent nodes. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Axes::Axes( ) : + Form( FormType::axes ) { + + setMoniker( GIDI_axesChars ); +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Axes. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +Axes::Axes( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ) : + Form( a_node, a_setupInfo, FormType::axes ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_axisChars ) { + m_axes.push_back( new Axis( child, a_setupInfo ) ); } + else if( name == GIDI_gridChars ) { + m_axes.push_back( new Grid( child, a_setupInfo, a_useSystem_strtod ) ); } + else { + throw Exception( "unknown axes sub-element" ); + } + } +} + +/* *********************************************************************************************************//** + * Copy constructor for the Axes class. + * + * @param a_axes [in] The Axes instance to copy. + ***********************************************************************************************************/ + +Axes::Axes( Axes const &a_axes ) : + Form( a_axes ) { + + for( std::size_t i1 = 0; i1 < a_axes.size( ); ++i1 ) { + Axis const *axis = a_axes[i1]; + + if( axis->type( ) == FormType::axis ) { + m_axes.push_back( new Axis( *axis ) ); } + else { + m_axes.push_back( new Grid( static_cast( *axis ) ) ); + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Axes::~Axes( ) { + + for( std::size_t i1 = 0; i1 < m_axes.size( ); ++i1 ) delete m_axes[i1]; +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +Axes &Axes::operator=( Axes const &a_rhs ) { + + if( this != &a_rhs ) { + Form::operator=( a_rhs ); + + for( std::size_t index = 0; index < a_rhs.size( ); ++index ) { + auto axis = a_rhs[index]; + if( axis->type( ) == FormType::axis ) { + m_axes.push_back( new Axis( *axis ) ); } + else { + Grid const *grid = static_cast( axis ); + m_axes.push_back( new Grid( *grid ) ); + } + } + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Axes::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + if( m_axes.size( ) == 0 ) return; + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), "" ); + for( std::vector::const_iterator iter = m_axes.begin( ); iter != m_axes.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * This is a factory function for the Axes class that creates an Axes instance whose axis data are taken from the + * *a_labelsAndUnits* argument. The number of Axis instances created is the size() of *a_labelsAndUnits*. Each + * item of *a_labelsAndUnits* specifies the label and unit for an Axis instance. + * + * @param a_labelsAndUnits [in] The list of labels and units for each axis. + ***********************************************************************************************************/ + +Axes Axes::makeAxes( std::vector> const &a_labelsAndUnits ) { + + int index = 0; + Axes axes = Axes( ); + + for( auto labelAndUnit = a_labelsAndUnits.begin( ); labelAndUnit != a_labelsAndUnits.end( ); ++labelAndUnit, ++index ) { + axes.append( new Axis( index, labelAndUnit->first, labelAndUnit->second ) ); + } + + return( axes ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_axis.cc b/source/processes/hadronic/models/lend/src/GIDI_axis.cc new file mode 100644 index 0000000000..8916b3df44 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_axis.cc @@ -0,0 +1,93 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Axis + * Class to store an axis or the base class for a Grid instance. The **type** is *"axis"* if the instance is an Axis or + * is *"grid"* if the instance is a Grid. + */ + +/* *********************************************************************************************************//** + * + * @param a_index [in] The index for the axis. + * @param a_label [in] The label for the axes. + * @param a_unit [in] The unit for the axis. + * @param a_type [in] The **type** is either *"axis"* or *"grid"*. + ***********************************************************************************************************/ + +Axis::Axis( int a_index, std::string a_label, std::string a_unit, FormType a_type ) : + Form( GIDI_axisChars, a_type, a_label ), + m_index( a_index ), + m_unit( a_unit ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Axis. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The **type** is either *"axis"* or *"grid"*. + ***********************************************************************************************************/ + +Axis::Axis( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type ) : + Form( a_node, a_setupInfo, a_type ), + m_index( a_node.attribute_as_int( GIDI_indexChars ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor for the Axis class. + * + * @param a_axis [in] The Axis instance to copy. + ***********************************************************************************************************/ + +Axis::Axis( Axis const &a_axis ) : + Form( a_axis ), + m_index( a_axis.index( ) ), + m_unit( a_axis.unit( ) ), + m_href( a_axis.href( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Axis::~Axis( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Axis::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); + + if( m_href == "" ) { + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_unitChars, unit( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); } + else { + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, m_href ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_axisDomain.cc b/source/processes/hadronic/models/lend/src/GIDI_axisDomain.cc new file mode 100644 index 0000000000..0395b4994f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_axisDomain.cc @@ -0,0 +1,72 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class AxisDomain + * Class to store a the minimum and maximum limits for a domain (i.e., a section of an axis) and its unit. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the AxisDomain. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +AxisDomain::AxisDomain( HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::axisDomain ), + m_minimum( a_node.attribute_as_double( GIDI_minChars ) ), + m_maximum( a_node.attribute_as_double( GIDI_maxChars ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_minimum [in] The domain's minimum value. + * @param a_maximum [in] The domain's maximum. + * @param a_unit [in] The domain's unit. + ***********************************************************************************************************/ + +AxisDomain::AxisDomain( double a_minimum, double a_maximum, std::string const &a_unit ) : + Form( FormType::axisDomain ), + m_minimum( a_minimum ), + m_maximum( a_maximum ), + m_unit( a_unit ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AxisDomain::~AxisDomain( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AxisDomain::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = a_writeInfo.addAttribute( GIDI_minChars, LUPI::Misc::doubleToShortestString( minimum( ) ) ) + + a_writeInfo.addAttribute( GIDI_minChars, LUPI::Misc::doubleToShortestString( maximum( ) ) ) + + a_writeInfo.addAttribute( GIDI_unitChars, unit( ) ); + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_branching1d.cc b/source/processes/hadronic/models/lend/src/GIDI_branching1d.cc new file mode 100644 index 0000000000..3e140efdf4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_branching1d.cc @@ -0,0 +1,82 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Branching1d + * Class for the GNDS <**branching1d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Branching1d::Branching1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::branching1d, a_parent ), + m_initialState( a_setupInfo.m_initialState ), + m_multiplicity( 0.0 ) { + + PoPI::NuclideGammaBranchStateInfo const *nuclideGammaBranchStateInfo = a_setupInfo.m_protare->nuclideGammaBranchStateInfos( ).find( m_initialState ); + m_multiplicity = nuclideGammaBranchStateInfo->multiplicity( ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Branching1d::~Branching1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Branching1d::domainMin( ) const { + + return( 0.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Branching1d::domainMax( ) const { + + return( 1.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the value of the function *f(x1)* at the specified point and *a_x1*. + * **This is currently not implemented**. + * + * @param a_x1 [in] The value of the **x1** axis. + * @return The value of the function evaluated at *a_x1*. + ***********************************************************************************************************/ + +double Branching1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + return( m_multiplicity ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_collapse.cc b/source/processes/hadronic/models/lend/src/GIDI_collapse.cc new file mode 100644 index 0000000000..6b16dde74a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_collapse.cc @@ -0,0 +1,438 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +static Vector collapseVector( Vector const &a_vector, std::vector const &a_collapseIndices, + std::vector const &a_weight, bool a_normalize ); +static void multiGroupSetup( Transporting::MultiGroup const &a_boundaries, ptwXPoints **a_boundaries_xs, + Transporting::Flux const &a_flux, ptwXYPoints **a_fluxes_xys, ptwXPoints **a_multiGroupFlux ); + +/* *********************************************************************************************************//** + * Collapses a multi-group vector. + * + * @param a_vector [in] The Vector to collapse. + * @param a_settings [in] Specifies the uncollapsed and collapsed multi-group information and the flux. + * @param a_particles [in] The list of particles to be transported. + * @param a_temperature [in] The temperature of the flux to use when collapsing. + * + * @return Returns the collapsed Vector. + ***********************************************************************************************************/ + +Vector collapse( Vector const &a_vector, Transporting::Settings const &a_settings, Transporting::Particles const &a_particles, double a_temperature ) { + + Transporting::Particle const *projectile( a_particles.particle( a_settings.projectileID( ) ) ); + Transporting::ProcessedFlux const *flux( projectile->nearestProcessedFluxToTemperature( a_temperature ) ); + std::vector const &multiGroupFlux( flux->multiGroupFlux( ) ); + std::vector const &collapseIndices( projectile->collapseIndices( ) ); + + return( collapseVector( a_vector, collapseIndices, multiGroupFlux, true ) ); +} + +/* *********************************************************************************************************//** + * Collapses a multi-group vector. + * + * @param a_vector [in] The Vector to collapse. + * @param a_collapseIndices [in] Maps uncollapsed indices to collapsed indices. + * @param a_weight [in] The uncollapsed flux weighting. + * @param a_normalize [in] If true, divide each collapsed value by it corresponding collapsed weight value. + * @return Returns the collapsed Vector. + ***********************************************************************************************************/ + +static Vector collapseVector( Vector const &a_vector, std::vector const &a_collapseIndices, + std::vector const &a_weight, bool a_normalize ) { + + std::size_t n1( a_collapseIndices.size( ) - 1 ); + std::size_t index1( a_collapseIndices[0] ); + Vector vectorCollapsed( n1 ); + + if( a_vector.size( ) > 0 ) { + for( std::size_t i1 = 0; i1 < n1; ++i1 ) { + std::size_t index2( a_collapseIndices[i1+1] ); + double fluxSum = 0; + double valueSum = 0; + + for( std::size_t i2 = index1; i2 < index2; ++i2 ) { + fluxSum += a_weight[i2]; + valueSum += a_weight[i2] * a_vector[i2]; + } + if( a_normalize && ( fluxSum != 0 ) ) valueSum /= fluxSum; + vectorCollapsed[i1] = valueSum; + index1 = index2; + } + } + + return( vectorCollapsed ); +} + +/* *********************************************************************************************************//** + * Collapses a multi-group matrix. + * + * @param a_matrix [in] The Matrix to collapse. + * @param a_settings [in] Specifies the uncollapsed and collapsed multi-group information and the flux. + * @param a_particles [in] The list of particles to be transported. + * @param a_temperature [in] The temperature of the flux to use when collapsing. + * @param a_productID [in] Particle id of the outgoing particle. + * @return Returns the collapsed Matrix. + ***********************************************************************************************************/ + +Matrix collapse( Matrix const &a_matrix, Transporting::Settings const &a_settings, Transporting::Particles const &a_particles, double a_temperature, std::string const &a_productID ) { + + if( a_matrix.size( ) == 0 ) return( a_settings.multiGroupZeroMatrix( a_particles, a_productID, true ) ); + + Transporting::Particle const *projectile( a_particles.particle( a_settings.projectileID( ) ) ); + Transporting::ProcessedFlux const *flux( projectile->nearestProcessedFluxToTemperature( a_temperature ) ); + std::vector const &multiGroupFlux( flux->multiGroupFlux( ) ); + std::vector const &projectileCollapseIndices( projectile->collapseIndices( ) ); + + Transporting::Particle const *product( a_particles.particle( a_productID ) ); + std::size_t n2 = product->numberOfGroups( ); + + std::vector productCollapseIndices( product->collapseIndices( ) ); + productCollapseIndices[0] = 0; + productCollapseIndices[n2] = a_matrix[0].size( ); + + std::vector conservationWeight( a_matrix[0].size( ), 1. ); + if( product->conserve() == Transporting::Conserve::energyOut ) { + std::vector boundaries = product->fineMultiGroup().boundaries(); + for( std::size_t i1 = 0; i1 < boundaries.size() - 1; ++i1 ) { + conservationWeight[i1] = 0.5 * (boundaries[i1] + boundaries[i1+1]); + } + } + + Matrix productCollapsed( 0, 0 ); + for( std::size_t i1 = 0; i1 < a_matrix.size( ); ++i1 ) { + productCollapsed.push_back( collapseVector( a_matrix[i1], productCollapseIndices, conservationWeight, false ) ); + } + + Matrix productCollapsedTranspose = productCollapsed.transpose( ); + Matrix collapsedTranspose( 0, 0 ); + for( std::size_t i2 = 0; i2 < n2; ++i2 ) { + collapsedTranspose.push_back( collapseVector( productCollapsedTranspose[i2], projectileCollapseIndices, multiGroupFlux, true ) ); + } + + if( product->conserve() == Transporting::Conserve::energyOut ) { + double denominator = 1; + std::vector boundaries = product->multiGroup().boundaries(); + for( std::size_t i1 = 0; i1 < boundaries.size() - 1; ++i1 ) { + denominator = 0.5 * (boundaries[i1] + boundaries[i1+1]); + collapsedTranspose[i1] /= denominator; + } + } + + return( collapsedTranspose.transpose( ) ); +} + +/* *********************************************************************************************************//** + * Transport correct a vector. + * + * @param a_vector [in] The Vector to transport correct. + * @param a_transportCorrection [in] The Vector that has the transport correction terms. + * @return Returns the collapsed Matrix. + ***********************************************************************************************************/ + +Vector transportCorrect( Vector const &a_vector, Vector const &a_transportCorrection ) { + + return( a_vector - a_transportCorrection ); +} + +/* *********************************************************************************************************//** + * Transport correct a Matrix. + * + * @param a_matrix [in] The Matrix to transport correct. + * @param a_transportCorrection [in] The Vector that has the transport correction terms. + * @return Returns the collapsed Matrix. + ***********************************************************************************************************/ + +Matrix transportCorrect( Matrix const &a_matrix, Vector const &a_transportCorrection ) { + + std::size_t size = a_transportCorrection.size( ); + Matrix corrected( a_matrix ); + + if( size == 0 ) return( corrected ); + if( a_matrix.size( ) == 0 ) { + corrected = Matrix( size, size ); } + else { + if( size != a_matrix.size( ) ) throw Exception( "transportCorrect: matrix rows different than vector size." ); + } + + for( std::size_t index = 0; index < size; ++index ) corrected[index][index] -= a_transportCorrection[index]; + return( corrected ); +} + +/*! \class MultiGroupCalulationInformation + * This class stores data as needed to multi-group data. Since the flux may be temperature dependent, an instance of this + * should only be used for one temperature. + */ + +/* *********************************************************************************************************//** + * Constructor. + * + * @param a_multiGroup [in] The multi-group boundaries. + * @param a_flux [in] The flux weighting. + ***********************************************************************************************************/ + +MultiGroupCalulationInformation::MultiGroupCalulationInformation( Transporting::MultiGroup const &a_multiGroup, Transporting::Flux const &a_flux ) : + m_multiGroup( a_multiGroup ), + m_flux( a_flux ), + m_boundaries_xs( nullptr ), + m_fluxes_xys( nullptr ), + m_multiGroupFlux( nullptr ) { + + multiGroupSetup( m_multiGroup, &m_boundaries_xs, m_flux, &m_fluxes_xys, &m_multiGroupFlux ); +} + +/* *********************************************************************************************************//** + * Destructor that frees allocated memory. + ***********************************************************************************************************/ + +MultiGroupCalulationInformation::~MultiGroupCalulationInformation( ) { + + ptwX_free( m_boundaries_xs ); + ptwXY_free( m_fluxes_xys ); + ptwX_free( m_multiGroupFlux ); +} + +/* *********************************************************************************************************//** + * Returns a flux weighted multi-group version of the function *a_function*. + * + * @param a_boundaries [in] List of multi-group boundaries. + * @param a_function [in] Function to multi-group. + * @param a_flux [in] Flux to use for weighting. + * + * @return Returns the multi-grouped Vector of *a_function*. + ***********************************************************************************************************/ + +Vector multiGroupXYs1d( Transporting::MultiGroup const &a_boundaries, Functions::XYs1d const &a_function, Transporting::Flux const &a_flux ) { + + std::vector const &boundaries = a_boundaries.boundaries( ); + ptwXPoints *boundaries_xs = ptwX_create( nullptr, boundaries.size( ), boundaries.size( ), &(boundaries[0]) ); + if( boundaries_xs == nullptr ) throw Exception( "GIDI::multiGroup: ptwX_create failed." ); + + Transporting::Flux_order const &flux_order_0 = a_flux[0]; + double const *energies = flux_order_0.energies( ); + double const *fluxes = flux_order_0.fluxes( ); + ptwXYPoints *fluxes_xys = ptwXY_createFrom_Xs_Ys( nullptr, ptwXY_interpolationLinLin, ptwXY_interpolationToString( ptwXY_interpolationLinLin ), + 12, 1e-3, flux_order_0.size( ), 10, flux_order_0.size( ), energies, fluxes, 0 ); + if( fluxes_xys == nullptr ) { + ptwX_free( boundaries_xs ); + throw Exception( "GIDI::multiGroup: ptwXY_createFrom_Xs_Ys failed." ); + } + + ptwXPoints *multiGroupFlux = ptwXY_groupOneFunction( nullptr, fluxes_xys, boundaries_xs, ptwXY_group_normType_none, nullptr ); + if( multiGroupFlux == nullptr ) { + ptwX_free( boundaries_xs ); + ptwXY_free( fluxes_xys ); + throw Exception( "GIDI::multiGroup: ptwXY_groupOneFunction failed." ); + } + + ptwXYPoints *ptwXY = ptwXY_clone2( nullptr, a_function.ptwXY( ) ); + ptwXPoints *groups = nullptr; + if( ptwXY != nullptr ) { + ptwXY_mutualifyDomains( nullptr, ptwXY, 1e-12, 1e-12, 1, fluxes_xys, 1e-12, 1e-12, 1 ); + groups = ptwXY_groupTwoFunctions( nullptr, ptwXY, fluxes_xys, boundaries_xs, ptwXY_group_normType_norm, multiGroupFlux ); + } + ptwX_free( boundaries_xs ); + ptwXY_free( fluxes_xys ); + ptwX_free( multiGroupFlux ); + ptwXY_free( ptwXY ); + if( groups == nullptr ) throw Exception( "GIDI::multiGroup: ptwXY_groupTwoFunctions failed." ); + + Vector vector( ptwX_length( nullptr, groups ), ptwX_getPointAtIndex( nullptr, groups, 0 ) ); + ptwX_free( groups ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * This function returns a flux weighted multi-group version of the product of *a_function1* times * *a_function2*. + * The caller owns the returned instance and is respondible for deleting it (i.e., freeing its memory when no longer needed). + * + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_function1 [in] First function of the product. + * @param a_function2 [in] Second function of the product, generally a reaction's cross section. + * + * @return Returns the multi-grouped Vector. + ***********************************************************************************************************/ + +Vector *multiGroupTwoXYs1ds( MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_function1, + Functions::XYs1d const &a_function2 ) { + + ptwXPoints *boundaries_xs = const_cast( a_multiGroupCalulationInformation.m_boundaries_xs ); + ptwXPoints *multiGroupFlux = const_cast( a_multiGroupCalulationInformation.m_multiGroupFlux ); + ptwXYPoints *ptwXY1 = nullptr, *ptwXY2 = nullptr, *fluxes_xys = nullptr; + ptwXPoints *groups = nullptr; + std::string errorMessage( "GIDI::multiGroupTwoXYs1ds: ptwXY_clone2 for a_function1 failed." ); + statusMessageReporting *smr = nullptr; + + ptwXY1 = ptwXY_clone2( smr, a_function1.ptwXY( ) ); + if( ptwXY1 != nullptr ) { + ptwXY2 = ptwXY_clone2( smr, a_function2.ptwXY( ) ); + if( ptwXY2 == nullptr ) { + errorMessage = "GIDI::multiGroupTwoXYs1ds: ptwXY_clone2 for a_function2 failed."; } + else { + double min1, min2, max1, max2; + + ptwXY_domainMin( smr, ptwXY1, &min1 ); + ptwXY_domainMax( smr, ptwXY1, &max1 ); + ptwXY_domainMin( smr, ptwXY2, &min2 ); + ptwXY_domainMax( smr, ptwXY2, &max2 ); + fluxes_xys = ptwXY_domainSlice( smr, const_cast( a_multiGroupCalulationInformation.m_fluxes_xys ), + std::max( min1, min2 ), std::min( max1, max2), 10, 1 ); + + if( fluxes_xys == nullptr ) { + errorMessage = "GIDI::multiGroupTwoXYs1ds: ptwXY_domainSlice for flux failed."; } + else { + ptwXY_mutualifyDomains( smr, ptwXY1, 1e-12, 1e-12, 1, ptwXY2, 1e-12, 1e-12, 1 ); + ptwXY_mutualifyDomains( smr, ptwXY1, 1e-12, 1e-12, 1, fluxes_xys, 1e-12, 1e-12, 1 ); + ptwXY_mutualifyDomains( smr, fluxes_xys, 1e-12, 1e-12, 1, ptwXY2, 1e-12, 1e-12, 1 ); + groups = ptwXY_groupThreeFunctions( smr, ptwXY1, ptwXY2, fluxes_xys, boundaries_xs, ptwXY_group_normType_norm, multiGroupFlux ); + } + } + } + ptwXY_free( ptwXY1 ); + ptwXY_free( ptwXY2 ); + ptwXY_free( fluxes_xys ); + + if( groups == nullptr ) { + throw Exception( errorMessage ); + } + + Vector *vector = new Vector( ptwX_length( smr, groups ), ptwX_getPointAtIndex( smr, groups, 0 ) ); + ptwX_free( groups ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Setups *a_boundaries_xs*, *a_fluxes_xys* and *a_multiGroupFlux* as needed by multi-grouping functions. Calling code are + * responsible for free-ing *a_boundaries_xs*, *a_fluxes_xys* and *a_multiGroupFlux*. + * + * @param a_boundaries [in] List of multi-group boundaries. + * @param a_boundaries_xs [out] A ptwXPoints representation of *a_boundaries*. + * @param a_flux [in] Flux to use for weighting. + * @param a_fluxes_xys [out] A ptwXYPoints representation of *a_flux*. + * @param a_multiGroupFlux [out] A ptwYPoints multi-grouped representation of *a_fluxes_xys*. + ***********************************************************************************************************/ + +static void multiGroupSetup( Transporting::MultiGroup const &a_boundaries, ptwXPoints **a_boundaries_xs, + Transporting::Flux const &a_flux, ptwXYPoints **a_fluxes_xys, ptwXPoints **a_multiGroupFlux ) { + + std::vector const &boundaries = a_boundaries.boundaries( ); + *a_boundaries_xs = ptwX_create( nullptr, boundaries.size( ), boundaries.size( ), &(boundaries[0]) ); + if( *a_boundaries_xs == nullptr ) throw Exception( "GIDI::multiGroup: ptwX_create failed." ); + + Transporting::Flux_order const &flux_order_0 = a_flux[0]; + double const *energies = flux_order_0.energies( ); + double const *fluxes = flux_order_0.fluxes( ); + *a_fluxes_xys = ptwXY_createFrom_Xs_Ys( nullptr, ptwXY_interpolationLinLin, ptwXY_interpolationToString( ptwXY_interpolationLinLin ), + 12, 1e-3, flux_order_0.size( ), 10, flux_order_0.size( ), energies, fluxes, 0 ); + if( *a_fluxes_xys == nullptr ) { + *a_boundaries_xs = ptwX_free( *a_boundaries_xs ); + throw Exception( "GIDI::multiGroup: ptwXY_createFrom_Xs_Ys failed." ); + } + + *a_multiGroupFlux = ptwXY_groupOneFunction( nullptr, *a_fluxes_xys, *a_boundaries_xs, ptwXY_group_normType_none, nullptr ); + if( *a_multiGroupFlux == nullptr ) { + *a_boundaries_xs = ptwX_free( *a_boundaries_xs ); + *a_fluxes_xys = ptwXY_free( *a_fluxes_xys ); + throw Exception( "GIDI::multiGroup: ptwXY_groupOneFunction failed." ); + } +} + +/* *********************************************************************************************************//** + * This function finds a component's data that can be multi-grouped (generally a **Functions::XYs1d** instance, multi-groups it with + * the boundaries and flux data in *a_multiGroupCalulationInformation* with weight *a_crossSection* and adds/replaces with style + * label *a_heatedMultiGroupLabel*. + * + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_component [in] The Component whose data will be multi-grouped. + * @param a_weight [in] An additional function to weight the data with. This is generally a reactions cross section. + ***********************************************************************************************************/ + +void calculate1dMultiGroupDataInComponent( LUPI_maybeUnused ProtareSingle const *a_protare, std::string const &a_heatedMultiGroupLabel, + MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Component &a_component, Functions::XYs1d const &a_weight ) { + + Functions::XYs1d const *xys1d = static_cast( a_component.findInstanceOfTypeInLineage( a_heatedMultiGroupLabel, GIDI_XYs1dChars ) ); + Functions::XYs1d const *xys1d2{ nullptr }; + + if( xys1d == nullptr ) { + Functions::Constant1d const *constand1d = + static_cast( a_component.findInstanceOfTypeInLineage( a_heatedMultiGroupLabel, GIDI_constant1dChars ) ); + if( constand1d != nullptr ) { + xys1d2 = GIDI::Functions::XYs1d::makeConstantXYs1d( GIDI::Axes( ), constand1d->domainMin( ), constand1d->domainMax( ), constand1d->value( ) ); } + else { + Functions::Regions1d const *regions1d = + static_cast( a_component.findInstanceOfTypeInLineage( a_heatedMultiGroupLabel, GIDI_regions1dChars ) ); + if( regions1d != nullptr ) { + xys1d2 = regions1d->asXYs1d( true, 1e-4, 1e-6, 1e-6 ); } + else { + Functions::Branching1d const *branching1d = + static_cast( a_component.findInstanceOfTypeInLineage( a_heatedMultiGroupLabel, GIDI_branching1dChars ) ); + if( branching1d != nullptr ) { + xys1d2 = Functions::XYs1d::makeConstantXYs1d( GIDI::Axes( ), a_weight.domainMin( ), a_weight.domainMax( ), branching1d->multiplicity( ) ); } + else { + Functions::Polynomial1d const *polynomial1d = + static_cast( a_component.findInstanceOfTypeInLineage( a_heatedMultiGroupLabel, GIDI_polynomial1dChars ) ); + if( polynomial1d != nullptr ) { + xys1d2 = polynomial1d->asXYs1d( true, 1e-4, 1e-6, 1e-6 ); } + else { + throw Exception( "calculate1dMultiGroupDataInComponent: from findInstanceOfTypeInLineage, no XYs1d, Constant1d, Regions1d, Branching1d or Polynomial1d form found in " + + a_component.toXLink( ) + "." ); + } + } + } + } + xys1d = xys1d2; + } + + Vector *vector = multiGroupTwoXYs1ds( a_multiGroupCalulationInformation, *xys1d, a_weight ); + Functions::Gridded1d *gridded1d = a_component.get( a_heatedMultiGroupLabel ); + gridded1d->setData( *vector ); + delete vector; + delete xys1d2; +} + +/* *********************************************************************************************************//** + * This function + * + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_weight [in] An additional function to weight the data with. This is generally a reactions cross section. + * @param a_evaluated [in] This is the evaluated form of the fission energy released. + * @param a_gridded1d [in] This is the current multi-grouped form whose data will be replace. + ***********************************************************************************************************/ + +void calculate1dMultiGroupFissionEnergyRelease( MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, Functions::XYs1d const &a_weight, + Functions::Function1dForm const *a_evaluated, Functions::Function1dForm *a_gridded1d ) { + + if( a_gridded1d == nullptr ) return; + + Functions::XYs1d const *xys1d = nullptr; + Functions::Gridded1d *gridded1d = static_cast( a_gridded1d ); + + if( a_evaluated->moniker( ) == GIDI_XYs1dChars ) { + xys1d = static_cast( a_evaluated ); } + else if( a_evaluated->moniker( ) == GIDI_polynomial1dChars ) { + Functions::Polynomial1d const *polynomial1d = static_cast( a_evaluated ); + xys1d = polynomial1d->asXYs1d( true, 1e-4, 1e-6, 1e-6 ); } + else { + throw Exception( "calculate1dMultiGroupFissionEnergyRelease: form not XYs1d or Polynomial1d: " + a_evaluated->toXLink( ) + "." ); + } + + Vector *vector = multiGroupTwoXYs1ds( a_multiGroupCalulationInformation, *xys1d, a_weight ); + gridded1d->setData( *vector ); + delete vector; + + if( a_evaluated != xys1d ) delete xys1d; +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_constant1d.cc b/source/processes/hadronic/models/lend/src/GIDI_constant1d.cc new file mode 100644 index 0000000000..a36ee78cc0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_constant1d.cc @@ -0,0 +1,154 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Constant1d + * Class for the GNDS <**constant1d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_value [in] The GNDS **value** for *this*. + * @param a_domainMin [in] The minimum value for the domain. + * @param a_domainMax [in] The maximum value for the domain. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Constant1d::Constant1d( Axes const &a_axes, double a_value, double a_domainMin, double a_domainMax, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_constant1dChars, FormType::constant1d, a_axes, ptwXY_interpolationLinLin, a_index, a_outerDomainValue ), + m_value( a_value ), + m_domainMin( a_domainMin ), + m_domainMax( a_domainMax ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Constant1d::Constant1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::constant1d, a_parent ), + m_value( a_node.attribute( GIDI_valueChars ).as_double( ) ), + m_domainMin( a_node.attribute( GIDI_domainMinChars ).as_double( ) ), + m_domainMax( a_node.attribute( GIDI_domainMaxChars ).as_double( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Constant1d::~Constant1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of the constant function. + * + * @param a_x1 [in] This is ignored a the function is a constant. + * @return The value of the constant. + ***********************************************************************************************************/ + +double Constant1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + +// FIXME - Do we need to check domain? + return( m_value ); +} + +/* *********************************************************************************************************//** + * Evaluates *this* at the X-values in *a_Xs*[*a_offset*:] and adds the results to *a_results*[*a_offset*:]. + * *a_Xs* and *a_results* must be the same size otherwise a throw is executed. + * + * @param a_offset [in] The offset in *a_Xs* to start. + * @param a_Xs [in] The list of domain values to evaluate *this* at. + * @param a_results [in] The list whose values are added to by the Y-values of *this*. + * @param a_scaleFactor [in] A factor applied to each evaluation before it is added to *a_results*. + ***********************************************************************************************************/ + +void Constant1d::mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const { + + if( a_Xs.size( ) != a_results.size( ) ) throw Exception( "Constant1d::mapToXsAndAdd: a_Xs.size( ) != a_results.size( )." ); + if( a_offset < 0 ) throw Exception( "Constant1d::mapToXsAndAdd: a_offset < 0." ); + + for( std::size_t index = a_offset; index < a_Xs.size( ); ++index ) { + a_results[index] += a_scaleFactor * m_value; + } +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_accuracy [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_lowerEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_upperEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Constant1d::asXYs1d( LUPI_maybeUnused bool a_asLinlin, LUPI_maybeUnused double a_accuracy, LUPI_maybeUnused double a_lowerEps, LUPI_maybeUnused double a_upperEps ) const { + + std::vector xys( 4 ); + + xys[0] = m_domainMin; + xys[1] = m_value; + xys[2] = m_domainMax; + xys[3] = m_value; + + return( new XYs1d( axes( ), ptwXY_interpolationLinLin, xys ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Constant1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + attributes += a_writeInfo.addAttribute( GIDI_valueChars, LUPI::Misc::doubleToShortestString( m_value ) ); + attributes += a_writeInfo.addAttribute( GIDI_domainMinChars, LUPI::Misc::doubleToShortestString( m_domainMin ) ); + attributes += a_writeInfo.addAttribute( GIDI_domainMaxChars, LUPI::Misc::doubleToShortestString( m_domainMax ) ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_construction.cc b/source/processes/hadronic/models/lend/src/GIDI_construction.cc new file mode 100644 index 0000000000..1741e38449 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_construction.cc @@ -0,0 +1,63 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "GIDI.hpp" + +namespace GIDI { + +namespace Construction { + +/*! \class Settings + * This class is used to pass user parameters to various constructors. + * + * The main use is to limit the type of data read in via the **a_parseMode** argument (see enum ParseMode). +*/ + +/* *********************************************************************************************************//** + * @param a_parseMode [in] Instructs the parses on which data to parse. + * @param a_photoMode [in] Instructs the parses if photo atomic and/or photoicnuclear protares are to be included. + ***********************************************************************************************************/ + +Settings::Settings( ParseMode a_parseMode, PhotoMode a_photoMode ) : + m_parseMode( a_parseMode ), + m_photoMode( a_photoMode ), + m_useSystem_strtod( 0 ), + m_lazyParsing( true ), + m_decayPositronium( true ), + m_usePhotoAtomicIncoherentDoppler( false ), + m_fissionResiduals( FissionResiduals::none ), + m_GRIN_continuumGammas( false ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor. + * + * @param a_settings [in] The **Settings** instance to copy. + ***********************************************************************************************************/ + +Settings::Settings( Settings const &a_settings ) : + m_parseMode( a_settings.parseMode( ) ), + m_photoMode( a_settings.photoMode( ) ), + m_useSystem_strtod( a_settings.useSystem_strtod( ) ), + m_lazyParsing( a_settings.lazyParsing( ) ), + m_decayPositronium( a_settings.decayPositronium( ) ), + m_usePhotoAtomicIncoherentDoppler( a_settings.usePhotoAtomicIncoherentDoppler( ) ), + m_fissionResiduals( a_settings.fissionResiduals( ) ), + m_GRIN_continuumGammas( false ) { + +} + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_delayedNeutron.cc b/source/processes/hadronic/models/lend/src/GIDI_delayedNeutron.cc new file mode 100644 index 0000000000..7f1aac3a8c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_delayedNeutron.cc @@ -0,0 +1,280 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class DelayedNeutron + * This class represents a **GNDS** delayedNeutron. +*/ + +/* *********************************************************************************************************//** + * Constructed from data in a <**outputChannel**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The reaction HAPI::Node to be parsed and used to construct the reaction. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +DelayedNeutron::DelayedNeutron( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent, Styles::Suite const *a_styles ) : + Form( a_node, a_setupInfo, FormType::delayedNeutron, a_parent ), + m_delayedNeutronIndex( 0 ), + m_rate( a_construction, GIDI_rateChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parsePhysicalQuantitySuite, a_styles ), + m_product( a_construction, a_node.child( GIDI_productChars ), a_setupInfo, a_pops, a_internalPoPs, nullptr, a_styles ) { + + m_rate.setAncestor( this ); + m_product.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +DelayedNeutron::~DelayedNeutron( ) { + +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *DelayedNeutron::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_rateChars ) return( &m_rate ); + if( a_item == GIDI_productChars ) return( &m_product ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *DelayedNeutron::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_rateChars ) return( &m_rate ); + if( a_item == GIDI_productChars ) return( &m_product ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Insert a std::set with the products id and any product in in its output channel. + * If a_transportablesOnly is true, only transportable product indices are return. + * + * @param a_indices [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void DelayedNeutron::productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + m_product.productIDs( a_indices, a_particles, a_transportablesOnly ); +} + +/* *********************************************************************************************************//** + * Returns the product multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer for particle with id *a_productID*. + * + * @param a_productID; [in] The id of the requested particle. + * + * @return The multiplicity for the requested particle. + ***********************************************************************************************************/ + +int DelayedNeutron::productMultiplicity( std::string const &a_productID ) const { + + return( m_product.productMultiplicity( a_productID ) ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for the specified products of this output channel. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int DelayedNeutron::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_product.maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group multiplicity for the requested label for the request product of this output channel. + * This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector DelayedNeutron::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_product.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, product matrix for the requested label for the requested product index for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] Particle id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix DelayedNeutron::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const { + + return( m_product.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ) ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average energy for the requested label for the requested product. This is a cross section weighted average energy. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector DelayedNeutron::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_product.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average momentum for the requested label for the requested product. This is a cross section weighted average momentum. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector DelayedNeutron::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_product.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Added the product to *a_incompleteParticles* if the product's completeParticle returns *false*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void DelayedNeutron::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + m_product.incompleteParticles( a_settings, a_incompleteParticles ); +} + +/* *********************************************************************************************************//** + * Returns, via arguments, the average energy and momentum, and gain for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_particleID [in] The particle id of the product. + * @param a_energy [in] The energy of the projectile. + * @param a_productEnergy [in] The average energy of the product. + * @param a_productMomentum [in] The average momentum of the product. + * @param a_productGain [in] The gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void DelayedNeutron::continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const { + + m_product.continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, + a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * Modifies the average product energies, momenta and gains for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies user options. + * @param a_particleID [in] The particle id of the product. + * @param a_energies [in] The vector of energies to map the data to. + * @param a_offset [in] The index of the first energy whose data are to be added to the vectors. + * @param a_productEnergies [out] The vector of average energies of the product. + * @param a_productMomenta [out] The vector of average momenta of the product. + * @param a_productGains [out] The vector of gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void DelayedNeutron::mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const { + + m_product.mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta, + a_productGains, a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * This methods calculates multi-group data for all needed components and adds each component's multi-group with label *a_heatedMultiGroupLabel*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_crossSectionXYs1d [in[ The cross section weight. + ***********************************************************************************************************/ + +void DelayedNeutron::calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ) { + + m_product.calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void DelayedNeutron::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), a_writeInfo.addAttribute( GIDI_labelChars, label( ) ) ); + m_rate.toXMLList( a_writeInfo, indent2 ); + m_product.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_discreteGamma2d.cc b/source/processes/hadronic/models/lend/src/GIDI_discreteGamma2d.cc new file mode 100644 index 0000000000..f6f9f8aa45 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_discreteGamma2d.cc @@ -0,0 +1,83 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class DiscreteGamma2d + * Class for the GNDS <**discreteGamma**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +DiscreteGamma2d::DiscreteGamma2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::discreteGamma2d, a_parent ), + m_domainMin( a_node.attribute( GIDI_domainMinChars ).as_double( ) ), + m_domainMax( a_node.attribute( GIDI_domainMaxChars ).as_double( ) ), + m_value( a_node.attribute( GIDI_valueChars ).as_double( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +DiscreteGamma2d::~DiscreteGamma2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the energy of the discrete gamma. + * + * @param a_x2 [in] The is ignored. + * @param a_x1 [in] The is ignored. + * @return The energy of the discrete gamma. + ***********************************************************************************************************/ + +double DiscreteGamma2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + +// FIXME - Do we need to check domain? + return( m_value ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void DiscreteGamma2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_valueChars, LUPI::Misc::doubleToShortestString( value( ) ) ); + + attributes += a_writeInfo.addAttribute( GIDI_domainMinChars, LUPI::Misc::doubleToShortestString( domainMin( ) ) ); + attributes += a_writeInfo.addAttribute( GIDI_domainMaxChars, LUPI::Misc::doubleToShortestString( domainMax( ) ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + axes( ).toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_distributions.cc b/source/processes/hadronic/models/lend/src/GIDI_distributions.cc new file mode 100644 index 0000000000..e4f6b2608f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_distributions.cc @@ -0,0 +1,717 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Distributions { + +/*! \class Distribution + * This is the base class inherited by all distribution form classes. + */ + +/* *********************************************************************************************************//** + * + * @param a_moniker [in] The **GNDS** moniker for the distribution. + * @param a_type [in] The FormType for the distribution form. + * @param a_label [in] The label for the distribution. + * @param a_productFrame [in] The frame the product data are in. + ***********************************************************************************************************/ + +Distribution::Distribution( std::string const &a_moniker, FormType a_type, std::string const &a_label, Frame a_productFrame ) : + Form( a_moniker, a_type, a_label ), + m_productFrame( a_productFrame ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the distribution. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The FormType for the distribution form. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +Distribution::Distribution( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_parent ) : + Form( a_node, a_setupInfo, a_type, a_parent ), + m_productFrame( parseFrame( a_node, a_setupInfo, GIDI_productFrameChars ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Distribution::toXMLNodeStarter( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_productFrameChars, frameToString( m_productFrame ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); +} + +/*! \class MultiGroup3d + * Class for the GNDS **multiGroup3d** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the MultiGroup3d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +MultiGroup3d::MultiGroup3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::multiGroup3d, a_parent ), + m_gridded3d( a_construction, a_node.child( GIDI_gridded3dChars ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void MultiGroup3d::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + m_gridded3d.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class AngularTwoBody + * Class for the GNDS **angularTwoBody** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_label [in] The label for *this* form. + * @param a_productFrame [in] The frame the product data as in. + * @param a_angular [in] The 2-d functional angular representation. + ***********************************************************************************************************/ + +AngularTwoBody::AngularTwoBody( std::string const &a_label, Frame a_productFrame, Functions::Function2dForm *a_angular ) : + Distribution( GIDI_angularTwoBodyChars, FormType::angularTwoBody, a_label, a_productFrame ), + m_angular( a_angular ) { + + if( a_angular != nullptr ) a_angular->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the AngularTwoBody. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +AngularTwoBody::AngularTwoBody( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::angularTwoBody, a_parent ), + m_angular( data2dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AngularTwoBody::~AngularTwoBody( ) { + + delete m_angular; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AngularTwoBody::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + if( m_angular != nullptr ) m_angular->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class KalbachMann + * Class for the GNDS **KalbachMann** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the KalbachMann. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +KalbachMann::KalbachMann( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::KalbachMann, a_parent ), + m_f( data2dParse( a_construction, a_node.child( GIDI_fChars ).first_child( ), a_setupInfo, nullptr ) ), + m_r( data2dParse( a_construction, a_node.child( GIDI_rChars ).first_child( ), a_setupInfo, nullptr ) ), + m_a( nullptr ) { + + HAPI::Node const &aNode = a_node.child( GIDI_aChars ); + if( !aNode.empty( ) ) m_a = data2dParse( a_construction, aNode.first_child( ), a_setupInfo, nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +KalbachMann::~KalbachMann( ) { + + delete m_f; + delete m_r; + delete m_a; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void KalbachMann::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + m_f->toXMLList( a_writeInfo, indent2 ); + m_r->toXMLList( a_writeInfo, indent2 ); + if( m_a != nullptr ) m_a->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class EnergyAngular + * Class for the GNDS **energyAngular** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the EnergyAngular. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +EnergyAngular::EnergyAngular( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::energyAngular, a_parent ), + m_energyAngular( data3dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +EnergyAngular::~EnergyAngular( ) { + + delete m_energyAngular; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void EnergyAngular::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + m_energyAngular->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class EnergyAngularMC + * Class for the GNDS **energyAngularMC** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the EnergyAngularMC. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +EnergyAngularMC::EnergyAngularMC( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::energyAngularMC, a_parent ), + m_energy( data2dParse( a_construction, a_node.child( GIDI_energyChars ).first_child( ), a_setupInfo, nullptr ) ), + m_energyAngular( data3dParse( a_construction, a_node.child( GIDI_energyAngularChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +EnergyAngularMC::~EnergyAngularMC( ) { + + delete m_energy; + delete m_energyAngular; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void EnergyAngularMC::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + + a_writeInfo.addNodeStarter( indent2, GIDI_energyChars ); + m_energy->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_energyChars ); + + a_writeInfo.addNodeStarter( indent2, GIDI_energyAngularChars ); + m_energyAngular->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_energyAngularChars ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class AngularEnergy + * Class for the GNDS **angularEnergy** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the AngularEnergy. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +AngularEnergy::AngularEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::angularEnergy, a_parent ), + m_angularEnergy( data3dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AngularEnergy::~AngularEnergy( ) { + + delete m_angularEnergy; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AngularEnergy::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + m_angularEnergy->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class AngularEnergyMC + * Class for the GNDS **angularEnergyMC** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the AngularEnergyMC. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +AngularEnergyMC::AngularEnergyMC( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::angularEnergyMC, a_parent ), + m_angular( data2dParse( a_construction, a_node.child( GIDI_angularChars ).first_child( ), a_setupInfo, nullptr ) ), + m_angularEnergy( data3dParse( a_construction, a_node.child( GIDI_angularEnergyChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AngularEnergyMC::~AngularEnergyMC( ) { + + delete m_angular; + delete m_angularEnergy; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AngularEnergyMC::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + a_writeInfo.addNodeStarter( indent2, GIDI_angularChars ); + m_angular->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_angularChars ); + a_writeInfo.addNodeStarter( indent2, GIDI_angularEnergyChars ); + m_angularEnergy->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_angularEnergyChars ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Uncorrelated + * Class for the GNDS **uncorrelated** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Uncorrelated. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +Uncorrelated::Uncorrelated( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::uncorrelated, a_parent ), + m_angular( data2dParse( a_construction, a_node.child( GIDI_angularChars ).first_child( ), a_setupInfo, nullptr ) ), + m_energy( data2dParse( a_construction, a_node.child( GIDI_energyChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Uncorrelated::~Uncorrelated( ) { + + delete m_angular; + delete m_energy; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Uncorrelated::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + + a_writeInfo.addNodeStarter( indent2, GIDI_angularChars, "" ); + m_angular->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_angularChars ); + + a_writeInfo.addNodeStarter( indent2, GIDI_energyChars, "" ); + m_energy->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_energyChars ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class LLNLAngularEnergy + * Class for the GNDS **LLNLAngularEnergy** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the LLNLAngularEnergy. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +LLNLAngularEnergy::LLNLAngularEnergy( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::LLNL_angularEnergy, a_parent ), + m_angular( data2dParse( a_construction, a_node.child( GIDI_LLNLAngularOfAngularEnergyChars ).first_child( ), a_setupInfo, nullptr ) ), + m_angularEnergy( data3dParse( a_construction, a_node.child( GIDI_LLNLAngularEnergyOfAngularEnergyChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LLNLAngularEnergy::~LLNLAngularEnergy( ) { + + delete m_angular; + delete m_angularEnergy; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void LLNLAngularEnergy::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + + toXMLNodeStarter( a_writeInfo, a_indent ); + a_writeInfo.addNodeStarter( indent2, GIDI_LLNLAngularOfAngularEnergyChars ); + m_angular->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_LLNLAngularOfAngularEnergyChars ); + a_writeInfo.addNodeStarter( indent2, GIDI_LLNLAngularEnergyOfAngularEnergyChars ); + m_angularEnergy->toXMLList( a_writeInfo, indent3 ); + a_writeInfo.addNodeEnder( GIDI_LLNLAngularEnergyOfAngularEnergyChars ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class CoherentPhotoAtomicScattering + * Class for the GNDS **coherentPhotoAtomicScattering** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the CoherentPhotoAtomicScattering. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::coherentPhotonScattering, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/*! \class IncoherentPhotoAtomicScattering + * Class for the GNDS **incoherentPhotoAtomicScattering** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the IncoherentPhotoAtomicScattering. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +IncoherentPhotoAtomicScattering::IncoherentPhotoAtomicScattering( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::incoherentPhotonScattering, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the IncoherentPhotoAtomicScattering. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +IncoherentBoundToFreePhotoAtomicScattering::IncoherentBoundToFreePhotoAtomicScattering( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::incoherentBoundToFreePhotonScattering, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { +} + +/*! \class ThermalNeutronScatteringLaw + * Class for the GNDS **thermalNeutronScatteringLaw** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the ThermalNeutronScatteringLaw. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +ThermalNeutronScatteringLaw::ThermalNeutronScatteringLaw( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::thermalNeutronScatteringLaw, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/*! \class Branching3d + * Class for the GNDS **branching3d** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Branching3d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +Branching3d::Branching3d( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::branching3d, a_parent ), + m_initialState( a_setupInfo.m_initialState ) { + +} + +/*! \class Reference3d + * Class for the GNDS **reference** distribution node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Reference3d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +Reference3d::Reference3d( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::reference3d, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Reference3d::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, href( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/*! \class CoulombPlusNuclearElastic + * Class for the GNDS **CoulombPlusNuclearElastic** distribution node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the CoulombPlusNuclearElastic. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +CoulombPlusNuclearElastic::CoulombPlusNuclearElastic( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::CoulombPlusNuclearElastic3d, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void CoulombPlusNuclearElastic::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, href( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/*! \class LLNLLegendre + * Class for the LLNL/GNDS **LLNLLegendre** distribution node. + */ + +/* *********************************************************************************************************//** + * This class is woefully inadequate but some form is needed by the method Product::isCompleteParticle. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the LLNLLegendre. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +LLNLLegendre::LLNLLegendre( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::LLNLLegendre, a_parent ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void LLNLLegendre::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/*! \class Unspecified + * Class for the GNDS **unspecified** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Unspecified. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The **m_distribution** member of GIDI::Product this distribution form belongs to. + ***********************************************************************************************************/ + +Unspecified::Unspecified( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Distribution( a_node, a_setupInfo, FormType::unspecified, a_parent ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Unspecified::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + toXMLNodeStarter( a_writeInfo, a_indent ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End of namespace Distributions. + +} // End of namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_documentation_1_10.cc b/source/processes/hadronic/models/lend/src/GIDI_documentation_1_10.cc new file mode 100644 index 0000000000..57744d28ef --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_documentation_1_10.cc @@ -0,0 +1,68 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +namespace Documentation_1_10 { + +#define GIDI_nameChars "name" + +/*! \class Documentation + * This class supports storing **GNDS** 1.9 and 1.10 documentation. + */ + +/*! \class Suite + * This is the GIDI::Suite class but with a different parse function. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::Suite( ) : + GIDI::Suite( GIDI_documentations_1_10_Chars ) { + +} + +/* *********************************************************************************************************//** + * Parse a GNDS 1.10 documentations node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +void Suite::parse( HAPI::Node const &a_node, SetupInfo &a_setupInfo ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + add( new Documentation( child, a_setupInfo, this ) ); + } +} + +/*! \class Documentation + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + * @return + ***********************************************************************************************************/ + +Documentation::Documentation( HAPI::Node const &a_node, LUPI_maybeUnused SetupInfo &a_setupInfo, LUPI_maybeUnused GIDI::Suite *a_parent ) : + Form( GIDI_documentationChars, FormType::generic, a_node.attribute_as_string( GIDI_nameChars ) ) { + + m_label = a_node.attribute_as_string( GIDI_nameChars ); + m_text = std::string( a_node.text().get() ); +} + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_doubleDifferentialCrossSection.cc b/source/processes/hadronic/models/lend/src/GIDI_doubleDifferentialCrossSection.cc new file mode 100644 index 0000000000..d89b307851 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_doubleDifferentialCrossSection.cc @@ -0,0 +1,419 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace DoubleDifferentialCrossSection { + +/* *********************************************************************************************************//** + * Returns the name of the DebyeWallerIntegral child in *a_node*, independent of the GNDS format. + * + * @param a_node [in] The **HAPI::Node** whose child are checked. + ***********************************************************************************************************/ + +static char const *getDebyeWallerIntegralName( HAPI::Node const &a_node ) { + + HAPI::Node const &node = a_node.child( GIDI_DebyeWallerIntegralChars ); + if( node.empty( ) ) return( GIDI_DebyeWallerChars ); + + return( GIDI_DebyeWallerIntegralChars ); +} + +/* *********************************************************************************************************//** + * Returns the boundAtomCrossSection child in *a_node*, independent of the GNDS format. + * + * @param a_node [in] The **HAPI::Node** whose child are checked. + ***********************************************************************************************************/ + +static char const *getBoundAtomCrossSectionName( HAPI::Node const &a_node ) { + + HAPI::Node const &node = a_node.child( GIDI_boundAtomCrossSectionChars ); + if( node.empty( ) ) return( GIDI_characteristicCrossSectionChars ); + + return( GIDI_boundAtomCrossSectionChars ); +} + +/*! \class Base + * Base class inherited by DoubleDifferentialCrossSection forms. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Base. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The FormType for the DoubleDifferentialCrossSection form. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Base::Base( HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, Suite *a_parent ) : + Form( a_node, a_setupInfo, a_type, a_parent ) { + +} + +/*! \class CoherentPhotoAtomicScattering + * This is the **coherentPhotonScattering** style class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::coherentPhotonScattering, a_parent ), + m_formFactor( data1dParse( a_construction, a_node.child( GIDI_formFactorChars ).first_child( ), a_setupInfo, nullptr ) ), + m_realAnomalousFactor( data1dParseAllowEmpty( a_construction, a_node.child( GIDI_realAnomalousFactorChars ).first_child( ), a_setupInfo, nullptr ) ), + m_imaginaryAnomalousFactor( data1dParseAllowEmpty( a_construction, a_node.child( GIDI_imaginaryAnomalousFactorChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +CoherentPhotoAtomicScattering::~CoherentPhotoAtomicScattering( ) { + + delete m_formFactor; + delete m_realAnomalousFactor; + delete m_imaginaryAnomalousFactor; +} + +/*! \class IncoherentPhotoAtomicScattering + * This is the **incoherentPhotonScattering** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +IncoherentPhotoAtomicScattering::IncoherentPhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::incoherentPhotonScattering, a_parent ), + m_scatteringFactor( nullptr ) { + + HAPI::Node const scatteringFactorChild = a_node.child( GIDI_scatteringFactorChars ); + if( scatteringFactorChild.empty( ) ) { + m_scatteringFactor = data1dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ); } + else { + m_scatteringFactor = data1dParse( a_construction, scatteringFactorChild.first_child( ), a_setupInfo, nullptr ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IncoherentPhotoAtomicScattering::~IncoherentPhotoAtomicScattering( ) { + + delete m_scatteringFactor; +} + +/*! \class IncoherentPhotoAtomicScattering + * This is the **incoherentPhotonScattering** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +IncoherentBoundToFreePhotoAtomicScattering::IncoherentBoundToFreePhotoAtomicScattering( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::incoherentBoundToFreePhotonScattering, a_parent ), + m_ComptonProfile( nullptr ) { + + HAPI::Node const ComptonProfileChild = a_node.child( GIDI_ComptonProfileChars ); + m_ComptonProfile = data1dParse( a_construction, ComptonProfileChild.first_child( ), a_setupInfo, nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IncoherentBoundToFreePhotoAtomicScattering::~IncoherentBoundToFreePhotoAtomicScattering( ) { + + delete m_ComptonProfile; +} + +namespace n_ThermalNeutronScatteringLaw { + +/*! \class S_table + * This class represents a **GNDS** cumulative scattering factor **S_table** instance which is a function of temperaure + * \f$T\f$ and energy \f$E\f$ as \f$S(T,E)\f$. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +S_table::S_table( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_function2d( data2dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + + m_function2d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +S_table::~S_table( ) { + + delete m_function2d; + +} + +/*! \class CoherentElastic + * This is the **CoherentElastic** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the **PoPs** node under the **reactionSuite** node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +CoherentElastic::CoherentElastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::coherentElastic, a_parent ), + m_S_table( a_construction, a_node.child( GIDI_S_tableChars ), a_setupInfo ) { + + m_S_table.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +CoherentElastic::~CoherentElastic( ) { + +} + +/*! \class DebyeWallerIntegral + * This class represents a **GNDS** Debye-Waller integral **DebyeWallerIntegral** which is a function of temperaure \f$T\f$ as \f$W'(T)\f$. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +DebyeWallerIntegral::DebyeWallerIntegral( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_function1d( data1dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + + m_function1d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +DebyeWallerIntegral::~DebyeWallerIntegral( ) { + + delete m_function1d; +} + +/*! \class IncoherentElastic + * This is the **IncoherentElastic** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +IncoherentElastic::IncoherentElastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::incoherentElastic, a_parent ), + m_boundAtomCrossSection( a_node.child( getBoundAtomCrossSectionName( a_node ) ), a_setupInfo ), + m_DebyeWallerIntegral( a_construction, a_node.child( getDebyeWallerIntegralName( a_node ) ), a_setupInfo ) { + + m_boundAtomCrossSection.setAncestor( this ); + m_DebyeWallerIntegral.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IncoherentElastic::~IncoherentElastic( ) { + +} + +/*! \class Options + * This is the **options** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Options::Options( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_calculatedAtThermal( strcmp( a_node.attribute_as_string( GIDI_calculatedAtThermalChars ).c_str( ), GIDI_trueChars ) == 0 ), + m_asymmetric( strcmp( a_node.attribute_as_string( GIDI_asymmetricChars ).c_str( ), GIDI_trueChars ) == 0 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Options::~Options( ) { + +} + +/*! \class T_effective + * This class represents a **GNDS** **T_effective** which is a function of temperaure \f$T_{\rm eff}(T)\f$. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +T_effective::T_effective( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_function1d( data1dParseAllowEmpty( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + + if( m_function1d != nullptr ) m_function1d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +T_effective::~T_effective( ) { + + delete m_function1d; +} + +/*! \class ScatteringAtom + * This is the **scatteringAtom** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +ScatteringAtom::ScatteringAtom( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_mass( a_node.child( GIDI_massChars ), a_setupInfo ), + m_freeAtomCrossSection( a_node.child( GIDI_freeAtomCrossSectionChars ), a_setupInfo ), + m_e_critical( a_node.child( GIDI_e_criticalChars ), a_setupInfo ), + m_e_max( a_node.child( GIDI_e_maxChars ), a_setupInfo ), + m_T_effective( a_construction, a_node.child( GIDI_T_effectiveChars ), a_setupInfo ) { + + m_mass.setAncestor( this ); + m_freeAtomCrossSection.setAncestor( this ); + m_e_critical.setAncestor( this ); + m_e_max.setAncestor( this ); + m_T_effective.setAncestor( this ); + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ScatteringAtom::~ScatteringAtom( ) { + +} + +/*! \class S_alpha_beta + * This class represents a **GNDS** **S_alpha_beta** which is \f$S(T,\alpha,\beta)\f$. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +S_alpha_beta::S_alpha_beta( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::generic, nullptr ), + m_function3d( nullptr ) { // data3dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) + +// FIXME BRB +// m_function3d->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +S_alpha_beta::~S_alpha_beta( ) { + + delete m_function3d; +} + +/*! \class IncoherentInelastic + * This is the **IncoherentInelastic** class. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +IncoherentInelastic::IncoherentInelastic( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Suite *a_parent ) : + Base( a_node, a_setupInfo, FormType::incoherentInelastic, a_parent ), + m_options( a_construction, a_node.child( GIDI_optionsChars ), a_setupInfo ), + m_scatteringAtoms( a_construction, GIDI_scatteringAtomsChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseScatteringAtom, nullptr ), + m_S_alpha_beta( a_construction, a_node.child( GIDI_S_alpha_betaChars ), a_setupInfo ) { + + m_options.setAncestor( this ); + m_scatteringAtoms.setAncestor( this ); + m_S_alpha_beta.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IncoherentInelastic::~IncoherentInelastic( ) { + +} + +} // End namespace n_ThermalNeutronScatteringLaw. + +} // End namespace DoubleDifferentialCrossSection. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_energyFunctions2d.cc b/source/processes/hadronic/models/lend/src/GIDI_energyFunctions2d.cc new file mode 100644 index 0000000000..c565fb00b2 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_energyFunctions2d.cc @@ -0,0 +1,660 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class GeneralEvaporation2d + * Class for the GNDS <**generalEvaporation**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a GeneralEvaporation2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +GeneralEvaporation2d::GeneralEvaporation2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::generalEvaporation2d, a_parent ), + m_U( a_node.child( GIDI_UChars ), a_setupInfo ), + m_theta( data1dParse( a_construction, a_node.child( GIDI_thetaChars ).first_child( ), a_setupInfo, nullptr ) ), + m_g( data1dParse( a_construction, a_node.child( GIDI_gChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +GeneralEvaporation2d::~GeneralEvaporation2d( ) { + + delete m_theta; + delete m_g; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double GeneralEvaporation2d::domainMin( ) const { + + return( m_theta->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double GeneralEvaporation2d::domainMax( ) const { + + return( m_theta->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double GeneralEvaporation2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "GeneralEvaporation2d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void GeneralEvaporation2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_U.toXMLList( a_writeInfo, indent2 ); + energy2dToXMLList( a_writeInfo, GIDI_thetaChars, indent2, m_theta ); + energy2dToXMLList( a_writeInfo, GIDI_gChars, indent2, m_g ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class SimpleMaxwellianFission2d + * Class for the GNDS <**simpleMaxwellianFission**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a SimpleMaxwellianFission2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +SimpleMaxwellianFission2d::SimpleMaxwellianFission2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::simpleMaxwellianFission2d, a_parent ), + m_U( a_node.child( GIDI_UChars ), a_setupInfo ), + m_theta( data1dParse( a_construction, a_node.child( GIDI_thetaChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +SimpleMaxwellianFission2d::~SimpleMaxwellianFission2d( ) { + + delete m_theta; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double SimpleMaxwellianFission2d::domainMin( ) const { + + return( m_theta->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double SimpleMaxwellianFission2d::domainMax( ) const { + + return( m_theta->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double SimpleMaxwellianFission2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "SimpleMaxwellianFission2d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void SimpleMaxwellianFission2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_U.toXMLList( a_writeInfo, indent2 ); + energy2dToXMLList( a_writeInfo, GIDI_thetaChars, indent2, m_theta ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Evaporation2d + * Class for the GNDS <**evaporation**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a Evaporation2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Evaporation2d::Evaporation2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::evaporation2d, a_parent ), + m_U( a_node.child( GIDI_UChars ), a_setupInfo ), + m_theta( data1dParse( a_construction, a_node.child( GIDI_thetaChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Evaporation2d::~Evaporation2d( ) { + + delete m_theta; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Evaporation2d::domainMin( ) const { + + return( m_theta->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Evaporation2d::domainMax( ) const { + + return( m_theta->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double Evaporation2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Evaporation2d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void Evaporation2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_U.toXMLList( a_writeInfo, indent2 ); + energy2dToXMLList( a_writeInfo, GIDI_thetaChars, indent2, m_theta ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Watt2d + * Class for the GNDS <**Watt**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a Watt2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Watt2d::Watt2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::Watt2d, a_parent ), + m_U( a_node.child( GIDI_UChars ), a_setupInfo ), + m_a( data1dParse( a_construction, a_node.child( GIDI_aChars ).first_child( ), a_setupInfo, nullptr ) ), + m_b( data1dParse( a_construction, a_node.child( GIDI_bChars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Watt2d::~Watt2d( ) { + + delete m_a; + delete m_b; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Watt2d::domainMin( ) const { + + return( m_a->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. +* + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Watt2d::domainMax( ) const { + + return( m_a->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double Watt2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Watt2d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void Watt2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_U.toXMLList( a_writeInfo, indent2 ); + energy2dToXMLList( a_writeInfo, GIDI_aChars, indent2, m_a ); + energy2dToXMLList( a_writeInfo, GIDI_bChars, indent2, m_b ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class MadlandNix2d + * Class for the GNDS <**MadlandNix**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a MadlandNix2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +MadlandNix2d::MadlandNix2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::MadlandNix2d, a_parent ), + m_EFL( a_node.child( GIDI_EFL_Chars ), a_setupInfo ), + m_EFH( a_node.child( GIDI_EFH_Chars ), a_setupInfo ), + m_T_M( data1dParse( a_construction, a_node.child( GIDI_T_M_Chars ).first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +MadlandNix2d::~MadlandNix2d( ) { + + delete m_T_M; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double MadlandNix2d::domainMin( ) const { + + return( m_T_M->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double MadlandNix2d::domainMax( ) const { + + return( m_T_M->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double MadlandNix2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "MadlandNix2d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void MadlandNix2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_EFL.toXMLList( a_writeInfo, indent2 ); + m_EFH.toXMLList( a_writeInfo, indent2 ); + energy2dToXMLList( a_writeInfo, GIDI_T_M_Chars, indent2, m_T_M ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Weighted_function2d + * Class for the GNDS <**weighted**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a Weighted_function2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Weighted_function2d::Weighted_function2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::weighted_function2d, a_parent ) { + + HAPI::Node child = a_node.first_child( ); + m_weight = data1dParse( a_construction, child, a_setupInfo, nullptr ); + + child.to_next_sibling( ); + m_energy = data2dParse( a_construction, child, a_setupInfo, nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Weighted_function2d::~Weighted_function2d( ) { + + delete m_weight; + delete m_energy; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Weighted_function2d::domainMin( ) const { + + return( m_weight->domainMin( ) ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Weighted_function2d::domainMax( ) const { + + return( m_weight->domainMax( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double Weighted_function2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Weighted_function2d::evaluate: not implemented." ); +} + +/*! \class WeightedFunctionals2d + * Class for the GNDS <**weightedFunctionals**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a WeightedFunctionals2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +WeightedFunctionals2d::WeightedFunctionals2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::weightedFunctionals2d, a_parent ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name != GIDI_weightedChars ) throw Exception( "WeightedFunctionals2d::WeightedFunctionals2d: bad child." ); + m_weighted_function2d.push_back( new Weighted_function2d( a_construction, child, a_setupInfo, nullptr ) ); + } + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +WeightedFunctionals2d::~WeightedFunctionals2d( ) { + + for( std::vector::iterator iter = m_weighted_function2d.begin( ); iter < m_weighted_function2d.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double WeightedFunctionals2d::domainMin( ) const { + + double domainMin1 = m_weighted_function2d[0]->domainMin( ); + + for( std::vector::const_iterator iter = m_weighted_function2d.begin( ); iter < m_weighted_function2d.end( ); ++iter ) { + double domainMin2 = (*iter)->domainMin( ); + + if( domainMin2 < domainMin1 ) domainMin1 = domainMin2; + } + return( domainMin1 ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double WeightedFunctionals2d::domainMax( ) const { + + double domainMax1 = m_weighted_function2d[0]->domainMax( ); + + for( std::vector::const_iterator iter = m_weighted_function2d.begin( ); iter < m_weighted_function2d.end( ); ++iter ) { + double domainMax2 = (*iter)->domainMax( ); + + if( domainMax2 < domainMax1 ) domainMax1 = domainMax2; + } + return( domainMax1 ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double WeightedFunctionals2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "WeightedFunctionals2d::evaluate: not implemented." ); +} + +/*! \class NBodyPhaseSpace2d + * Class for the GNDS <**NBodyPhaseSpace**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a NBodyPhaseSpace2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +NBodyPhaseSpace2d::NBodyPhaseSpace2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::NBodyPhaseSpace2d, a_parent ), + m_numberOfProducts( a_node.attribute( GIDI_numberOfProductsChars ).as_int( ) ), + m_mass( a_node.child( GIDI_massChars ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +NBodyPhaseSpace2d::~NBodyPhaseSpace2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double NBodyPhaseSpace2d::domainMin( ) const { + + return( 0. ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double NBodyPhaseSpace2d::domainMax( ) const { + + return( 1. ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy and product's energy. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's energy. + * @return The value of the function evaluated at *a_x2*, and *a_x1*. + ***********************************************************************************************************/ + +double NBodyPhaseSpace2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "NBodyPhaseSpace2d::evaluate: not implemented." ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_exceptions.cc b/source/processes/hadronic/models/lend/src/GIDI_exceptions.cc new file mode 100644 index 0000000000..528fec3009 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_exceptions.cc @@ -0,0 +1,31 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class Exception + * Exception class for all GIDI exceptions thrown by GIDI functions. + */ + +/* *********************************************************************************************************//** + * @param a_message [in] The message that the function what() will return. + ***********************************************************************************************************/ + +Exception::Exception( std::string const & a_message ) : + std::runtime_error( a_message ) { + +} + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_externalFile.cc b/source/processes/hadronic/models/lend/src/GIDI_externalFile.cc new file mode 100644 index 0000000000..768e2fc282 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_externalFile.cc @@ -0,0 +1,64 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class ExternalFile + * This class represents the **GNDS** <**externalFile**> node. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ExternalFile::ExternalFile( std::string const &a_label, std::string const &a_path ) : + Form( GIDI_externalFileChars, FormType::externalFile, a_label ), + m_path( a_path ) { + +} + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** to be parsed to construct a GeneralEvaporation2d instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ExternalFile::ExternalFile( HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused GIDI::Suite *a_parent ) : + Form( a_node, a_setupInfo, FormType::externalFile ), + m_path( a_node.attribute_as_string( GIDI_pathChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ExternalFile::~ExternalFile( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML line that represent *this*. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void ExternalFile::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_pathChars, path( ) ); + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +} // End of namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_externalFiles.cc b/source/processes/hadronic/models/lend/src/GIDI_externalFiles.cc new file mode 100644 index 0000000000..c51b0210d8 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_externalFiles.cc @@ -0,0 +1,30 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +namespace ExternalFiles { + +/*! + * loop over external files, if any represent binary store then open up HAPI::DataManager for that file + */ +void Suite::registerBinaryFiles( LUPI_maybeUnused std::string a_parentDir, LUPI_maybeUnused SetupInfo &a_setupInfo ) { + +#ifdef HAPI_USE_HDF5 + if (this->has( "HDF" )) { + a_setupInfo.m_protare->setDataManager( new HAPI::HDFDataManager( a_parentDir + "/" + this->get( "HDF" )->path( ) ) ); + } +#endif +} + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_fissionEnergyReleased.cc b/source/processes/hadronic/models/lend/src/GIDI_fissionEnergyReleased.cc new file mode 100644 index 0000000000..7d73126aa0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_fissionEnergyReleased.cc @@ -0,0 +1,133 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class FissionEnergyRelease + * Class to store GNDS <**fissionEnergyRelease**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The HAPI::Node to be parsed to construct the instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +FissionEnergyRelease::FissionEnergyRelease( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::fissionEnergyRelease1d, a_parent ) { + + m_promptProductKE = data1dParse( a_construction, a_node.child( GIDI_promptProductKEChars ).first_child( ), a_setupInfo, nullptr ); + m_promptNeutronKE = data1dParse( a_construction, a_node.child( GIDI_promptNeutronKEChars ).first_child( ), a_setupInfo, nullptr ); + m_delayedNeutronKE = data1dParse( a_construction, a_node.child( GIDI_delayedNeutronKEChars ).first_child( ), a_setupInfo, nullptr ); + m_promptGammaEnergy = data1dParse( a_construction, a_node.child( GIDI_promptGammaEnergyChars ).first_child( ), a_setupInfo, nullptr ); + m_delayedGammaEnergy = data1dParse( a_construction, a_node.child( GIDI_delayedGammaEnergyChars ).first_child( ), a_setupInfo, nullptr ); + m_delayedBetaEnergy = data1dParse( a_construction, a_node.child( GIDI_delayedBetaEnergyChars ).first_child( ), a_setupInfo, nullptr ); + m_neutrinoEnergy = data1dParse( a_construction, a_node.child( GIDI_neutrinoEnergyChars ).first_child( ), a_setupInfo, nullptr ); + m_nonNeutrinoEnergy = data1dParse( a_construction, a_node.child( GIDI_nonNeutrinoEnergyChars ).first_child( ), a_setupInfo, nullptr ); + m_totalEnergy = data1dParse( a_construction, a_node.child( GIDI_totalEnergyChars ).first_child( ), a_setupInfo, nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +FissionEnergyRelease::~FissionEnergyRelease( ) { + + if( m_promptProductKE != nullptr ) delete m_promptProductKE; + if( m_promptNeutronKE != nullptr ) delete m_promptNeutronKE; + if( m_delayedNeutronKE != nullptr ) delete m_delayedNeutronKE; + if( m_promptGammaEnergy != nullptr ) delete m_promptGammaEnergy; + if( m_delayedGammaEnergy != nullptr ) delete m_delayedGammaEnergy; + if( m_delayedBetaEnergy != nullptr ) delete m_delayedBetaEnergy; + if( m_neutrinoEnergy != nullptr ) delete m_neutrinoEnergy; + if( m_nonNeutrinoEnergy != nullptr ) delete m_nonNeutrinoEnergy; + if( m_totalEnergy != nullptr ) delete m_totalEnergy; +} + +/* *********************************************************************************************************//** + * Returns the multi-group Q-value. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return Multi-group Q-value. + ***********************************************************************************************************/ + +Vector FissionEnergyRelease::multiGroupQ( LUPI_maybeUnused LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, LUPI_maybeUnused Styles::TemperatureInfo const &a_temperatureInfo ) const { + + Vector vector( 0 ); + + if( a_settings.delayedNeutrons( ) == Transporting::DelayedNeutrons::on ) { + Gridded1d const *gridded1d = dynamic_cast( m_delayedNeutronKE ); + + vector += gridded1d->data( ); + gridded1d = dynamic_cast( m_delayedGammaEnergy ); + vector += gridded1d->data( ); + gridded1d = dynamic_cast( m_delayedBetaEnergy ); + vector += gridded1d->data( ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void FissionEnergyRelease::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), a_writeInfo.addAttribute( GIDI_labelChars, label( ) ) ); + + energyReleaseToXMLList( a_writeInfo, GIDI_promptProductKEChars, indent2, m_promptProductKE ); + energyReleaseToXMLList( a_writeInfo, GIDI_promptNeutronKEChars, indent2, m_promptNeutronKE ); + energyReleaseToXMLList( a_writeInfo, GIDI_delayedNeutronKEChars, indent2, m_delayedNeutronKE ); + energyReleaseToXMLList( a_writeInfo, GIDI_promptGammaEnergyChars, indent2, m_promptGammaEnergy ); + energyReleaseToXMLList( a_writeInfo, GIDI_delayedGammaEnergyChars, indent2, m_delayedGammaEnergy ); + energyReleaseToXMLList( a_writeInfo, GIDI_delayedBetaEnergyChars, indent2, m_delayedBetaEnergy ); + energyReleaseToXMLList( a_writeInfo, GIDI_neutrinoEnergyChars, indent2, m_neutrinoEnergy ); + energyReleaseToXMLList( a_writeInfo, GIDI_nonNeutrinoEnergyChars, indent2, m_nonNeutrinoEnergy ); + energyReleaseToXMLList( a_writeInfo, GIDI_totalEnergyChars, indent2, m_totalEnergy ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_moniker [in] The moniker for the energy type. + * @param a_indent [in] The amount to indent *this* node. + * @param a_function [in] The component of the energy released in fission. + ***********************************************************************************************************/ + +void FissionEnergyRelease::energyReleaseToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_moniker, std::string const &a_indent, Function1dForm *a_function ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + if( a_function == nullptr ) return; + + a_writeInfo.addNodeStarter( a_indent, a_moniker, "" ); + a_function->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( a_moniker ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_fissionFragmentData.cc b/source/processes/hadronic/models/lend/src/GIDI_fissionFragmentData.cc new file mode 100644 index 0000000000..02cf5d5c5c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_fissionFragmentData.cc @@ -0,0 +1,475 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class FissionFragmentData + * This class represents a **GNDS** fissionFragmentData. +*/ + +/* *********************************************************************************************************//** + * Default constructor for FissionFragmentData. + ***********************************************************************************************************/ + +FissionFragmentData::FissionFragmentData( ) : + GUPI::Ancestry( GIDI_fissionFragmentDataChars ), + m_delayedNeutrons( GIDI_delayedNeutronsChars, GIDI_labelChars ), + m_fissionEnergyReleases( GIDI_fissionEnergyReleasesChars, GIDI_labelChars ) { + +} + +/* *********************************************************************************************************//** + * Constructed from data in a <**outputChannel**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The reaction HAPI::Node to be parsed and used to construct the reaction. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +FissionFragmentData::FissionFragmentData( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, Styles::Suite const *a_styles ) : + GUPI::Ancestry( a_node.name( ) ), + m_delayedNeutrons( a_construction, GIDI_delayedNeutronsChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, + parseDelayedNeutronsSuite, a_styles ), + m_fissionEnergyReleases( a_construction, GIDI_fissionEnergyReleasesChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, + parseFissionEnergyReleasesSuite, a_styles ) { + + m_delayedNeutrons.setAncestor( this ); + m_fissionEnergyReleases.setAncestor( this ); + + for( std::size_t i1 = 0; i1 < m_delayedNeutrons.size( ); ++i1 ) { + DelayedNeutron *delayedNeutron = m_delayedNeutrons.get( i1 ); + + delayedNeutron->setDelayedNeutronIndex( i1 ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +FissionFragmentData::~FissionFragmentData( ) { + +} + +/* *********************************************************************************************************//** + * Returns **false* if *this* has delayed fission neutrons and they are not complete; otherwise, returns **true**. + * + * @return bool + ***********************************************************************************************************/ + +bool FissionFragmentData::isDelayedFissionNeutronComplete( ) const { + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + Product const &product = delayedNeutrons1.product( ); + if( !product.isDelayedFissionNeutronComplete( true ) ) return( false ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *FissionFragmentData::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_delayedNeutronsChars ) return( &m_delayedNeutrons ); + if( a_item == GIDI_fissionEnergyReleasesChars ) return( &m_fissionEnergyReleases ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *FissionFragmentData::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_delayedNeutronsChars ) return( &m_delayedNeutrons ); + if( a_item == GIDI_fissionEnergyReleasesChars ) return( &m_fissionEnergyReleases ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Insert a std::set with the products id and any product in in its output channel. + * If a_transportablesOnly is true, only transportable product indices are return. + * + * @param a_indices [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void FissionFragmentData::productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + delayedNeutrons1.productIDs( a_indices, a_particles, a_transportablesOnly ); + } +} + +/* *********************************************************************************************************//** + * Returns the product multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer for particle with id *a_productID*. + * + * @param a_productID; [in] The id of the requested particle. + * + * @return The multiplicity for the requested particle. + ***********************************************************************************************************/ + +int FissionFragmentData::productMultiplicity( std::string const &a_productID ) const { + + int total_multiplicity = 0; + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + int multiplicity = delayedNeutrons1.productMultiplicity( a_productID ); + if( multiplicity < 0 ) return( -1 ); + total_multiplicity += multiplicity; + } + + return( total_multiplicity ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for the specified products of this output channel. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int FissionFragmentData::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + int _maximumLegendreOrder = -1; + + if( a_settings.delayedNeutrons( ) == Transporting::DelayedNeutrons::on ) { + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + int r_maximumLegendreOrder = delayedNeutrons1.maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + + if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder; + } + } + + return( _maximumLegendreOrder ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group multiplicity for the requested label for the request product of this output channel. + * This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector FissionFragmentData::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return( vector ); + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + vector += delayedNeutrons1.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, Q for the requested label for the this output channel. This is a cross section weighted Q. + * If a_final is false, only the Q for the output channels directly under each reaction is summed. Otherwise, the Q for all output channels + * summed, including output channels for each products. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If true, the Q is calculated for all output channels, including those for products. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector FissionFragmentData::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, LUPI_maybeUnused bool a_final ) const { + + Vector vector( 0 ); + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return( vector ); + + if( m_fissionEnergyReleases.size( ) == 0 ) return( vector ); + + Functions::FissionEnergyRelease const *form = dynamic_cast( a_settings.form( + a_smr, m_fissionEnergyReleases, a_temperatureInfo, "Q-value" ) ); + + if( form != nullptr ) vector += form->multiGroupQ( a_smr, a_settings, a_temperatureInfo ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, product matrix for the requested label for the requested product index for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] Particle id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix FissionFragmentData::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const { + + Matrix matrix( 0, 0 ); + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return( matrix ); + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + matrix += delayedNeutrons1.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average energy for the requested label for the requested product. This is a cross section weighted average energy. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector FissionFragmentData::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return( vector ); + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + vector += delayedNeutrons1.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average momentum for the requested label for the requested product. This is a cross section weighted average momentum. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector FissionFragmentData::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return( vector ); + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + vector += delayedNeutrons1.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Appends a DelayedNeutronProduct instance for each delayed neutron in *m_delayedNeutrons*. + * + * @param a_delayedNeutronProducts [in] The list to append the delayed neutrons to. + ***********************************************************************************************************/ + +void FissionFragmentData::delayedNeutronProducts( DelayedNeutronProducts &a_delayedNeutronProducts ) const { + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutron = *m_delayedNeutrons.get( index ); + + PhysicalQuantity rate = *delayedNeutron.rate( ).get( 0 ); + a_delayedNeutronProducts.push_back( DelayedNeutronProduct( delayedNeutron.delayedNeutronIndex( ), rate, &delayedNeutron.product( ) ) ); + } +} + +/* *********************************************************************************************************//** + * Loops over the instances in ** m_delayedNeutrons** calling their incompleteParticles method. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void FissionFragmentData::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + if( a_settings.delayedNeutrons( ) == Transporting::DelayedNeutrons::on ) { + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutron = *m_delayedNeutrons.get( index ); + + delayedNeutron.incompleteParticles( a_settings, a_incompleteParticles ); + } + } +} + +/* *********************************************************************************************************//** + * Returns, via arguments, the average energy and momentum, and gain for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_particleID [in] The particle id of the product. + * @param a_energy [in] The energy of the projectile. + * @param a_productEnergy [in] The average energy of the product. + * @param a_productMomentum [in] The average momentum of the product. + * @param a_productGain [in] The gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void FissionFragmentData::continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const { + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return; + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + delayedNeutrons1.continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, + a_ignoreIncompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * Modifies the average product energies, momenta and gains for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies user options. + * @param a_particleID [in] The particle id of the product. + * @param a_energies [in] The vector of energies to map the data to. + * @param a_offset [in] The index of the first energy whose data are to be added to the vectors. + * @param a_productEnergies [out] The vector of average energies of the product. + * @param a_productMomenta [out] The vector of average momenta of the product. + * @param a_productGains [out] The vector of gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void FissionFragmentData::mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const { + + if( a_settings.delayedNeutrons( ) != Transporting::DelayedNeutrons::on ) return; + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron const &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + delayedNeutrons1.mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta, + a_productGains, a_ignoreIncompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * This methods calculates multi-group data for all needed components and adds each component's multi-group with label *a_heatedMultiGroupLabel*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_crossSectionXYs1d [in[ The cross section weight. + ***********************************************************************************************************/ + +void FissionFragmentData::calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ) { + + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + DelayedNeutron &delayedNeutrons1 = *m_delayedNeutrons.get( index ); + + delayedNeutrons1.calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d ); + } + + if( ( m_fissionEnergyReleases.size( ) > 0 ) && ( m_fissionEnergyReleases.find( a_heatedMultiGroupLabel ) != m_fissionEnergyReleases.end( ) ) ) { + Functions::FissionEnergyRelease const *fissionEnergyRelease = m_fissionEnergyReleases.get( 0 ); + Functions::FissionEnergyRelease *multiGroupFissionEnergyRelease = m_fissionEnergyReleases.get( a_heatedMultiGroupLabel ); + + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->promptProductKE( ), multiGroupFissionEnergyRelease->promptProductKE( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->promptNeutronKE( ), multiGroupFissionEnergyRelease->promptNeutronKE( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->delayedNeutronKE( ), multiGroupFissionEnergyRelease->delayedNeutronKE( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->promptGammaEnergy( ), multiGroupFissionEnergyRelease->promptGammaEnergy( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->delayedGammaEnergy( ), multiGroupFissionEnergyRelease->delayedGammaEnergy( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->delayedBetaEnergy( ), multiGroupFissionEnergyRelease->delayedBetaEnergy( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->neutrinoEnergy( ), multiGroupFissionEnergyRelease->neutrinoEnergy( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->nonNeutrinoEnergy( ), multiGroupFissionEnergyRelease->nonNeutrinoEnergy( ) ); + calculate1dMultiGroupFissionEnergyRelease( a_multiGroupCalulationInformation, a_crossSectionXYs1d, + fissionEnergyRelease->totalEnergy( ), multiGroupFissionEnergyRelease->totalEnergy( ) ); + } +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void FissionFragmentData::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + if( moniker( ) == "" ) return; + if( ( m_delayedNeutrons.size( ) == 0 ) && ( m_fissionEnergyReleases.size( ) == 0 ) ) return; + a_writeInfo.addNodeStarter( a_indent, moniker( ), "" ); + m_delayedNeutrons.toXMLList( a_writeInfo, indent2 ); + m_fissionEnergyReleases.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_flux.cc b/source/processes/hadronic/models/lend/src/GIDI_flux.cc new file mode 100644 index 0000000000..85f08acca2 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_flux.cc @@ -0,0 +1,106 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Protare. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Flux::Flux( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::flux ), + m_flux( data2dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + + if( m_flux != nullptr ) m_flux->setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Flux::~Flux( ) { + + delete m_flux; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Flux::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + if( m_flux != nullptr ) m_flux->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Fluxes + * Class for the GNDS <**fluxes**> node that contains a list of flux nodes each as a 3d function. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Fluxes::Fluxes( ) : + Suite( GIDI_fluxesChars ) { + +} + +/* *********************************************************************************************************//** + * @param a_fileName [in] File containing a fluxes node to be parsed. + ***********************************************************************************************************/ + +Fluxes::Fluxes( std::string const &a_fileName ) : + Suite( GIDI_fluxesChars ) { + + addFile( a_fileName ); +} + +/* *********************************************************************************************************//** +* Adds the contents of the specified file to *this*. + * + ***********************************************************************************************************/ + +void Fluxes::addFile( std::string const &a_fileName ) { + + HAPI::File *doc = new HAPI::PugiXMLFile( a_fileName.c_str( ), "Fluxes::addFile" ); + + HAPI::Node fluxes = doc->first_child( ); + + std::string name( fluxes.name( ) ); + Construction::Settings construction( Construction::ParseMode::all, GIDI::Construction::PhotoMode::atomicOnly ); + + SetupInfo setupInfo( nullptr ); + + std::string formatVersionString = fluxes.attribute_as_string( GIDI_formatChars ); + if( formatVersionString == "" ) formatVersionString = GNDS_formatVersion_1_10Chars; + LUPI::FormatVersion formatVersion; + formatVersion.setFormat( formatVersionString ); + if( !formatVersion.supported( ) ) throw Exception( "unsupport GND format version" ); + setupInfo.m_formatVersion = formatVersion; + + for( HAPI::Node child = fluxes.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + Functions::Function3dForm *function3d = data3dParse( construction, child, setupInfo, nullptr ); + + add( function3d ); + } + delete doc; +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_form.cc b/source/processes/hadronic/models/lend/src/GIDI_form.cc new file mode 100644 index 0000000000..e25784fbb8 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_form.cc @@ -0,0 +1,563 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Form + * Base class inherited by most other GIDI classes. Mainly contains **label** and **type** members. + */ + +/* *********************************************************************************************************//** + * + * @param a_type [in] The *FormType* the class represents. + ***********************************************************************************************************/ + +Form::Form( FormType a_type ) : + GUPI::Ancestry( "" ), + m_parent( nullptr ), + m_type( a_type ), + m_keyName( GIDI_labelChars ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_label [in] The label for *this*. + ***********************************************************************************************************/ + +Form::Form( std::string const &a_moniker, FormType a_type, std::string const &a_label ) : + GUPI::Ancestry( a_moniker ), + m_parent( nullptr ), + m_type( a_type ), + m_keyName( GIDI_labelChars ), + m_label( a_label ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The *FormType* the class represents. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Form::Form( HAPI::Node const &a_node, LUPI_maybeUnused SetupInfo &a_setupInfo, FormType a_type, Suite *a_parent ) : + GUPI::Ancestry( a_node.name( ) ), + m_parent( a_parent ), + m_type( a_type ), + m_keyName( GIDI_labelChars ), + m_label( a_node.attribute_as_string( GIDI_labelChars ) ) { + +} + +/* *********************************************************************************************************//** + * @param a_form [in] The Form to copy. + ***********************************************************************************************************/ + +Form::Form( Form const &a_form ) : + GUPI::Ancestry( a_form.moniker( ), a_form.attribute( ) ), + m_parent( nullptr ), + m_type( a_form.type( ) ), + m_keyName( a_form.keyName( ) ), + m_keyValue( a_form.keyValue( ) ), + m_label( a_form.label( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Form::~Form( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for + * the member *m_parent* which is set to **nullptr** and those not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +Form &Form::operator=( Form const &a_rhs ) { + + if( this != &a_rhs ) { + GUPI::Ancestry::operator=( a_rhs ); + + m_parent = nullptr; + m_type = a_rhs.type( ); + m_keyName = a_rhs.keyName( ); + m_keyValue = a_rhs.keyValue( ); + m_label = a_rhs.label( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Set the *m_label* member per *a_label*. Also, if *m_keyName* is "label", calls **setKeyValue**. + * + * @param a_label [in] The value of the label. + ***********************************************************************************************************/ + +void Form::setLabel( std::string const &a_label ) { + + m_label = a_label; + if( m_keyName == GIDI_labelChars ) setKeyValue( GIDI_labelChars ); +} + +/* *********************************************************************************************************//** + * Returns a *const* reference to the *m_keyName* member. + * + * @return The name of the key for *this*. + ***********************************************************************************************************/ + +std::string const &Form::keyName( ) const { + + return( m_keyName ); +} + +/* *********************************************************************************************************//** + * Set the *m_keyName* member to *a_keyName* and calls setKeyValue. + * + * @param a_keyName [in] The value of the key name. + ***********************************************************************************************************/ + +void Form::setKeyName( std::string const &a_keyName ) { + + m_keyName = a_keyName; + setKeyValue( m_keyName ); +} + +/* *********************************************************************************************************//** + * Returns a *const* reference to the *m_keyValue* member. + * + * @return The value of the key for *this*. + ***********************************************************************************************************/ + +std::string const &Form::keyValue( ) const { + + if( m_keyValue == "" ) setKeyValue( m_keyName ); + return( m_keyValue ); +} + +/* *********************************************************************************************************//** + * Set the *m_keyValue* per the *a_keyName* name. This method assumes that *a_keyName* is "label". Otherwise, it executes a throw. + * + * @param a_keyName [in] The name of the key whose value is set. + ***********************************************************************************************************/ + +void Form::setKeyValue( std::string const &a_keyName ) const { + + if( a_keyName != GIDI_labelChars ) throw Exception( "Form::setKeyValue: unsupported keyname \"" + a_keyName + "\"." ); + + m_keyValue = m_label; +} + +/* *********************************************************************************************************//** + * Returns the sibling of *this* with label *a_label*. + * + * @param a_label [in] The label of the sibling to find. + * @return The sibling with label *a_label*. + ***********************************************************************************************************/ + +Form const *Form::sibling( std::string a_label ) const { + + Form *_form; + + try { + _form = ((*parent( )).get( a_label ) ); } + catch (...) { + return( nullptr ); + } + return( _form ); +} + +namespace Functions { + +/*! \class FunctionForm + * Base class inherited by other GIDI function classes. + */ + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_dimension [in] The dimension of the function. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +FunctionForm::FunctionForm( std::string const &a_moniker, FormType a_type, int a_dimension, ptwXY_interpolation a_interpolation, + int a_index, double a_outerDomainValue ) : + Form( a_moniker, a_type, "" ), + m_dimension( a_dimension ), + m_interpolation( a_interpolation ), + m_index( a_index ), + m_outerDomainValue( a_outerDomainValue ) { + + m_interpolationString = ptwXY_interpolationToString( m_interpolation ); +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_dimension [in] The dimension of the function. + * @param a_axes [in] The axes for the function. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +FunctionForm::FunctionForm( std::string const &a_moniker, FormType a_type, int a_dimension, Axes const &a_axes, ptwXY_interpolation a_interpolation, + int a_index, double a_outerDomainValue ) : + Form( a_type ), + m_dimension( a_dimension ), + m_axes( a_axes ), + m_interpolation( a_interpolation ), + m_index( a_index ), + m_outerDomainValue( a_outerDomainValue ) { + + setMoniker( a_moniker ); + m_interpolationString = ptwXY_interpolationToString( m_interpolation ); + + m_axes.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the FunctionForm. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The *FormType* the class represents. + * @param a_dimension [in] The dimension of the function. + * @param a_suite [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +FunctionForm::FunctionForm( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + FormType a_type, int a_dimension, Suite *a_suite ) : + Form( a_node, a_setupInfo, a_type, a_suite ), + m_dimension( a_dimension ), + m_axes( a_node.child( GIDI_axesChars ), a_setupInfo, 0 ), + m_interpolation( ptwXY_interpolationLinLin ), + m_index( 0 ), + m_outerDomainValue( 0.0 ) { + + m_interpolationString = a_node.attribute_as_string( GIDI_interpolationChars ); + m_interpolation = ptwXY_stringToInterpolation( m_interpolationString.c_str( ) ); + if( m_interpolation != ptwXY_interpolationOther ) m_interpolationString = ptwXY_interpolationToString( m_interpolation ); + + if( strcmp( a_node.attribute_as_string( GIDI_indexChars ).c_str( ), "" ) != 0 ) m_index = a_node.attribute_as_int( GIDI_indexChars ); + if( strcmp( a_node.attribute_as_string( GIDI_outerDomainValueChars ).c_str( ), "" ) != 0 ) m_outerDomainValue = a_node.attribute_as_double( GIDI_outerDomainValueChars ); +} + +/* *********************************************************************************************************//** + * @param a_form [in] The FunctionForm to copy. + ***********************************************************************************************************/ + +FunctionForm::FunctionForm( FunctionForm const &a_form ) : + Form( a_form ), + m_dimension( a_form.dimension( ) ), + m_axes( a_form.axes( ) ), + m_interpolation( a_form.interpolation( ) ), + m_interpolationString( a_form.interpolationString( ) ), + m_index( a_form.index( ) ), + m_outerDomainValue( a_form.outerDomainValue( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +FunctionForm::~FunctionForm( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +FunctionForm &FunctionForm::operator=( FunctionForm const &a_rhs ) { + + if( this != &a_rhs ) { + Form::operator=( a_rhs ); + + m_dimension = a_rhs.dimension( ); + m_axes = a_rhs.axes( ); + m_interpolation = a_rhs.interpolation( ); + m_interpolationString = a_rhs.interpolationString( ); + m_index = a_rhs.index( ); + m_outerDomainValue = a_rhs.outerDomainValue( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * This method sets the integer (i.e., *ptwXY_interpolation*) interpolation value of **m_interpolation** to + * **a_interpolation**. This method also sets the **m_interpolationString** member per **a_interpolation**. + * + * @param a_interpolation [in] The *ptwXY_interpolation* integer value of the interpolaction. + ***********************************************************************************************************/ + +void FunctionForm::setInterpolation( ptwXY_interpolation a_interpolation ) { + + m_interpolation = a_interpolation; + m_interpolationString = ptwXY_interpolationToString( m_interpolation ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions container. + ***********************************************************************************************************/ + +void FunctionForm::toXMLList_func( LUPI_maybeUnused GUPI::WriteInfo &a_writeInfo, LUPI_maybeUnused std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::cout << "Node '" << moniker( ) << "' needs toXMLList methods." << std::endl; +} + +/*! \class Function1dForm + * Base class inherited by other GIDI 1d function classes. + */ + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Function1dForm::Function1dForm( std::string const &a_moniker, FormType a_type, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + FunctionForm( a_moniker, a_type, 1, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Function1dForm::Function1dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, + int a_index, double a_outerDomainValue ) : + FunctionForm( a_moniker, a_type, 1, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the FunctionForm. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The *FormType* the class represents. + * @param a_suite [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Function1dForm::Function1dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, FormType a_type, + Suite *a_suite ) : + FunctionForm( a_construction, a_node, a_setupInfo, a_type, 1, a_suite ) { + +} + +/* *********************************************************************************************************//** + * @param a_form [in] The Function1dForm to copy. + ***********************************************************************************************************/ + +Function1dForm::Function1dForm( Function1dForm const &a_form ) : + FunctionForm( a_form ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Function1dForm::~Function1dForm( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +Function1dForm &Function1dForm::operator=( Function1dForm const &a_rhs ) { + + if( this != &a_rhs ) { + FunctionForm::operator=( a_rhs ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * This method executes a throw as the sub-class did not define it. Evaluates *this* at the X-values in *a_Xs*[*a_offset*:] + * and adds the results to *a_results*[*a_offset*:]. + * + * @param a_offset [in] The offset in *a_Xs* to start. + * @param a_Xs [in] The list of domain values to evaluate *this* at. + * @param a_results [in] The list whose values are added to by the Y-values of *this*. + * @param a_scaleFactor [in] A factor applied to each evaluation before it is added to *a_results*. + ***********************************************************************************************************/ + +void Function1dForm::mapToXsAndAdd( LUPI_maybeUnused int a_offset, LUPI_maybeUnused std::vector const &a_Xs, LUPI_maybeUnused std::vector &a_results, LUPI_maybeUnused double a_scaleFactor ) const { + + throw Exception( "Function1dForm::mapToXsAndAdd: function " + moniker( ) + " not implemented." ); +} +/* *********************************************************************************************************//** + * This method writes a warning message stating that the write method has not been implemented for *this*. + * + * @param a_file [in] The C FILE instance to write the data to. + * @param a_format [in] The format string passed to each region's write method. + ***********************************************************************************************************/ + +/* *********************************************************************************************************//** + * This method returns a **nullptr** since this methods was not implemented in the the derived class. + * + * @param a_asLinlin [in] If **true**, the inpolatation of the returned XYs1d instance will always be lin-lin. Otherwise, + * the interpolation depends on the child 1d functions. This argument is not needed or used for this class. + * @param a_accuracy [in] The accuracy use to convert the data to lin=lin interpolation if needed. This argument is not needed or used for this cl + * @param a_lowerEps [in] The relative domain ammount to put a point below a boundary between two regions. This argument is not needed or used for + * @param a_upperEps [in] The relative domain ammount to put a point above a boundary between two regions. This argument is not needed or used for + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Function1dForm::asXYs1d( LUPI_maybeUnused bool a_asLinlin, LUPI_maybeUnused double a_accuracy, LUPI_maybeUnused double a_lowerEps, LUPI_maybeUnused double a_upperEps ) const { + + return( nullptr ); +} + +void Function1dForm::write( FILE *a_file, LUPI_maybeUnused std::string const &a_format ) const { + + fprintf( a_file, "# Write method not implemented for %s.\n", moniker( ).c_str( ) ); +} + +/* *********************************************************************************************************//** + * Calls the write method with stdout as the file stream. + * + * @param a_format [in] The format string passed to the C printf function. + ***********************************************************************************************************/ + +void Function1dForm::print( std::string const &a_format ) const { + + write( stdout, a_format.c_str( ) ); +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** node name for the 2d function. + * @param a_type [in] The *FormType* the class represents. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] The GNDS **index** value for *this*. + * @param a_outerDomainValue [in] The GNDS **outerDomainValue** value for *this*. + ***********************************************************************************************************/ + +Function2dForm::Function2dForm( std::string const &a_moniker, FormType a_type, ptwXY_interpolation a_interpolation, int a_index, double a_outerDomainValue ) : + FunctionForm( a_moniker, a_type, 2, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Function2dForm::Function2dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, + int a_index, double a_outerDomainValue ) : + FunctionForm( a_moniker, a_type, 2, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the FunctionForm. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The *FormType* the class represents. + * @param a_suite [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Function2dForm::Function2dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + FormType a_type, Suite *a_suite ) : + FunctionForm( a_construction, a_node, a_setupInfo, a_type, 2, a_suite ) { + +} + +/* *********************************************************************************************************//** + * @param a_form [in] Function2dForm to copy. + ***********************************************************************************************************/ +Function2dForm::Function2dForm( Function2dForm const &a_form ) : + FunctionForm( a_form ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Function2dForm::~Function2dForm( ) { + +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the FunctionForm. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_type [in] The *FormType* the class represents. + * @param a_suite [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Function3dForm::Function3dForm( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + FormType a_type, Suite *a_suite ) : + FunctionForm( a_construction, a_node, a_setupInfo, a_type, 3, a_suite ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The moniker for *this*. + * @param a_type [in] The *FormType* the class represents. + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation along the outer most independent axis and the dependent axis. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Function3dForm::Function3dForm( std::string const &a_moniker, FormType a_type, Axes const &a_axes, ptwXY_interpolation a_interpolation, + int a_index, double a_outerDomainValue ) : + FunctionForm( a_moniker, a_type, 3, a_axes, a_interpolation, a_index, a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Function3dForm::~Function3dForm( ) { + +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_grid.cc b/source/processes/hadronic/models/lend/src/GIDI_grid.cc new file mode 100644 index 0000000000..023349b51e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_grid.cc @@ -0,0 +1,84 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Grid + * Class to store a **GNDS grid** node. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Grid. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +Grid::Grid( HAPI::Node const &a_node, SetupInfo &a_setupInfo, int a_useSystem_strtod ) : + Axis( a_node, a_setupInfo, FormType::grid ), + m_style( a_node.attribute_as_string( GIDI_styleChars ) ), + m_keyName( GIDI_indexChars ), + m_keyValue( a_node.attribute_as_string( GIDI_indexChars ) ), + m_interpolation( a_node.attribute_as_string( GIDI_interpolationChars ) ) { + + if( href( ) == "" ) { + HAPI::Node values = a_node.first_child( ); + if( values.name( ) != std::string( GIDI_valuesChars ) ) throw Exception( "grid's first child not values" ); + + m_valueType = values.attribute_as_string( GIDI_valueTypeChars ); + + parseValuesOfDoubles( values, a_setupInfo, m_values, a_useSystem_strtod ); + } +} + +/* *********************************************************************************************************//** + * Copy constructor for Grid. + * + * @param a_grid [in] The Grid instance to copy. + ***********************************************************************************************************/ + +Grid::Grid( Grid const &a_grid ) : + Axis( a_grid ), + m_style( a_grid.style( ) ), + m_keyName( a_grid.keyName( ) ), + m_keyValue( a_grid.keyValue( ) ), + m_valueType( a_grid.valueType( ) ), + m_values( a_grid.values( ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Grid::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); + + if( href( ) == "" ) { + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_unitChars, unit( ) ); + attributes += a_writeInfo.addAttribute( GIDI_styleChars, style( ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + doublesToXMLList( a_writeInfo, indent2, m_values.vector(), 0, true, m_valueType ); + a_writeInfo.addNodeEnder( moniker( ) ); } + else { + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, href( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_gridded1d.cc b/source/processes/hadronic/models/lend/src/GIDI_gridded1d.cc new file mode 100644 index 0000000000..e653a60a95 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_gridded1d.cc @@ -0,0 +1,145 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Gridded1d + * Class for the GNDS <**gridded1d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Gridded1d::Gridded1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::gridded1d, a_parent ) { + + Grid const *axis = dynamic_cast( axes( )[0] ); + m_grid = axis->data( ).vector(); + + parseFlattened1d( a_construction, a_node.child( GIDI_arrayChars ), a_setupInfo, m_data ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Gridded1d::~Gridded1d( ) { + +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the ProtareSingle that + * contains the TNSL data covers the lower energy multi-group data. + * + * @param a_maxTNSL_index [in] All elements up to *a_maxTNSL_index* exclusive are zero-ed. + ***********************************************************************************************************/ + +void Gridded1d::modifiedMultiGroupElasticForTNSL( int a_maxTNSL_index ) { + + m_data.setToValueInFlatRange( 0, a_maxTNSL_index, 0.0 ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function at the point *a_x1*. + * Currently not implemented. + * + * @param a_x1 [in] The is ignored. + * @return The value of the function at the point *a_x1*. + ***********************************************************************************************************/ + +double Gridded1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Gridded1d::evaluate: not implement." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Gridded1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + +// BRB. This is not correct as it is not converted to a flattened array. + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + axes( ).toXMLList( a_writeInfo, indent2 ); + + attributes = a_writeInfo.addAttribute( GIDI_shapeChars, size_t_ToString( m_data.size( ) ) ); + attributes += a_writeInfo.addAttribute( "compression", "flattened" ); + a_writeInfo.addNodeStarter( indent2, GIDI_arrayChars, attributes ); + + std::vector doubles; + doubles.reserve( m_data.size( ) ); + std::size_t i1, i2; + for( i1 = 0; i1 < m_data.size( ); ++i1 ) { + if( m_data[i1] != 0.0 ) break; + } + for( i2 = m_data.size( ); i2 > i1; --i2 ) { + if( m_data[i2-1] != 0.0 ) break; + } + std::size_t start( i1 ); + if( start == m_data.size( ) ) start = 0; + a_writeInfo.push_back( indent3 + "" + size_t_ToString( start ) + "" ); + for( ; i1 < i2; ++i1 ) doubles.push_back( m_data[i1] ); + a_writeInfo.push_back( indent3 + "" + size_t_ToString( doubles.size( ) ) + "" ); + + doublesToXMLList( a_writeInfo, indent3, doubles ); + a_writeInfo.addNodeEnder( GIDI_arrayChars ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * This method writes *this* to a *a_file*. + * + * @param a_file [in] The C FILE instance to write the data to. + * @param a_format [in] The format string passed to each region's write method. + ***********************************************************************************************************/ + +void Gridded1d::write( FILE *a_file, std::string const &a_format ) const { + + std::size_t index = 0; + char const *fmt = a_format.c_str( ); + + for( ; index < m_data.size( ); ++index ) { + fprintf( a_file, fmt, m_grid[index], m_data[index] ); + } + if( m_data.size( ) > 0 ) printf( fmt, m_grid[index], m_data[index-1] ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_gridded2d.cc b/source/processes/hadronic/models/lend/src/GIDI_gridded2d.cc new file mode 100644 index 0000000000..9128df83de --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_gridded2d.cc @@ -0,0 +1,62 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Gridded2d + * Class for the GNDS <**gridded2d**> node. + */ + +/* *********************************************************************************************************//** + * Constructed from data in a <**product**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Gridded2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Gridded2d::Gridded2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::gridded2d, a_parent ), + m_array( a_node.child( GIDI_arrayChars ), a_setupInfo, a_construction.useSystem_strtod( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Gridded2d::~Gridded2d( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Gridded2d::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ) ); + axes( ).toXMLList( a_writeInfo, indent2 ); + m_array.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_gridded3d.cc b/source/processes/hadronic/models/lend/src/GIDI_gridded3d.cc new file mode 100644 index 0000000000..d0708a025d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_gridded3d.cc @@ -0,0 +1,72 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Gridded3d + * Class for the GNDS <**gridded3d**> node. + */ + +/* *********************************************************************************************************//** + * Constructed from data in a <**product**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Gridded3d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Gridded3d::Gridded3d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Function3dForm( a_construction, a_node, a_setupInfo, FormType::gridded3d ), + m_data( a_node.child( GIDI_arrayChars ), a_setupInfo, a_construction.useSystem_strtod( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Gridded3d::~Gridded3d( ) { + +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the ProtareSingle that + * contains the TNSL data covers the lower energy multi-group data. + * + * @param a_maxTNSL_index [in] All elements up to *a_maxTNSL_index* exclusive are zero-ed. + ***********************************************************************************************************/ + +void Gridded3d::modifiedMultiGroupElasticForTNSL( LUPI_maybeUnused int a_maxTNSL_index ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Gridded3d::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ) ); + axes( ).toXMLList( a_writeInfo, indent2 ); + m_data.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_group.cc b/source/processes/hadronic/models/lend/src/GIDI_group.cc new file mode 100644 index 0000000000..8c5b770b35 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_group.cc @@ -0,0 +1,117 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Group + * Class for the GNDS <**group**> node that resides under the <**transportable**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a Group instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + ***********************************************************************************************************/ + +Group::Group( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops ) : + Form( a_node, a_setupInfo, FormType::group ), + m_grid( a_node.child( GIDI_gridChars ), a_setupInfo, a_construction.useSystem_strtod( ) ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor. + * + * @param a_group [in] Group instance to copy. + ***********************************************************************************************************/ + +Group::Group( Group const &a_group ) : + Form( a_group ), + m_grid( a_group.grid( ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Group::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), a_writeInfo.addAttribute( GIDI_labelChars, label( ) ) ); + m_grid.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Groups + * Class for the GNDS <**groups**> node that contains a list of <**group**> nodes. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Groups::Groups( ) : + Suite( GIDI_groupsChars ) { + +} + +/* *********************************************************************************************************//** + * @param a_fileName [in] File containing a groups node to be parsed. + ***********************************************************************************************************/ + +Groups::Groups( std::string const &a_fileName ) : + Suite( GIDI_groupsChars ) { + + addFile( a_fileName ); +} + +/* *********************************************************************************************************//** + * Adds the contents of the specified file to *this*. + * + * @param a_fileName [in] File containing a groups node to be parsed. + ***********************************************************************************************************/ + +void Groups::addFile( std::string const &a_fileName ) { + + HAPI::File *doc = new HAPI::PugiXMLFile( a_fileName.c_str( ), "Groups::addFile" ); + + HAPI::Node groups = doc->first_child( ); + + std::string name( groups.name( ) ); + if( name != GIDI_groupsChars ) throw Exception( "Invalid groups node file: file node name is '" + name + "'." ); + + Construction::Settings construction( Construction::ParseMode::all, GIDI::Construction::PhotoMode::atomicOnly ); + PoPI::Database pops; + + SetupInfo setupInfo( nullptr ); + + std::string formatVersionString = groups.attribute_as_string( GIDI_formatChars ); + if( formatVersionString == "" ) formatVersionString = GNDS_formatVersion_1_10Chars; + LUPI::FormatVersion formatVersion; + formatVersion.setFormat( formatVersionString ); + if( !formatVersion.supported( ) ) throw Exception( "Unsupport GND format version" + formatVersionString ); + setupInfo.m_formatVersion = formatVersion; + + for( HAPI::Node child = groups.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + Group *group = new Group( construction, child, setupInfo, pops ); + + add( group ); + } + delete doc; +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_isotropic2d.cc b/source/processes/hadronic/models/lend/src/GIDI_isotropic2d.cc new file mode 100644 index 0000000000..9f45674092 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_isotropic2d.cc @@ -0,0 +1,80 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Isotropic2d + * Class for the GNDS <**isotropic2d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Isotropic2d::Isotropic2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::isotropic2d, a_parent ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Isotropic2d::~Isotropic2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Isotropic2d::domainMin( ) const { + +// BRB FIXME. + return( 0. ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Isotropic2d::domainMax( ) const { + +// BRB FIXME. + return( 0. ); +} + +/* *********************************************************************************************************//** + * Returns the value 0.5. + * + * @param a_x2 [in] The is ignored. + * @param a_x1 [in] The is ignored. + * @return The value 0.5. + ***********************************************************************************************************/ + +double Isotropic2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + return( 0.5 ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_map.cc b/source/processes/hadronic/models/lend/src/GIDI_map.cc new file mode 100644 index 0000000000..0afbc00f5a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_map.cc @@ -0,0 +1,1100 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "GIDI.hpp" +#include + +static std::string GIDI_basePath( char const *a_path ); +static std::string GIDI_basePath( std::string const a_path ); +static std::string GIDI_addPaths( std::string const &a_base, std::string const &a_path ); + +namespace GIDI { + +namespace Map { + +/* *********************************************************************************************************//** + * Returns the type of file for *a_filename*. + * + * @param a_filename [in] Path of the file. + * + * @return A **FileType** instance. + ***********************************************************************************************************/ + +static FileType fileType( std::string const &a_path ) { + + if( a_path.compare( a_path.size( ) - 2, 2, "h5" ) == 0 ) return( GIDI::FileType::HDF ); + return( GIDI::FileType::XML ); +} + +/* *********************************************************************************************************//** + * User data passed to the Map::directory method. It stores the desired projectile, target, library and evalaute infomation + * as a list of found matches. An empty string for the projectile's id matches all projectiles. + * A empty string for the target's id matches all targets. An empty evaluation string matches all evaluations. + ***********************************************************************************************************/ + +class MapWalkDirectoryCallbackData { + + public: + std::string const &m_projectileID; /**< The desired projectile's id. */ + std::string const &m_targetID; /**< The desired target's id. */ + std::string const &m_library; /**< The desired library name. */ + std::string const &m_evaluation; /**< The desired evaluation id. */ + + std::vector m_protareEntries; /**< list of matched protare entries. */ + + /* *********************************************************************************************************//** + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + ***********************************************************************************************************/ + + MapWalkDirectoryCallbackData( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, std::string const &a_evaluation ) : + m_projectileID( a_projectileID ), + m_targetID( a_targetID ), + m_library( a_library ), + m_evaluation( a_evaluation ) { + + } +}; + +/* *********************************************************************************************************//** + * + * @param a_protareEntry [in] The protare entry to compare to the data protare parameters in *a_data*. + * @param a_library [in] The library name of the current map file. + * @param a_data [in] A MapWalkDirectoryCallbackData instance. + * @param a_level [in] Nested level of *this* map file. For internal use. + * + * @return Always returns true. + ***********************************************************************************************************/ + +bool MapWalkDirectoryCallback( ProtareBase const *a_protareEntry, std::string const &a_library, void *a_data, LUPI_maybeUnused int a_level ) { + + MapWalkDirectoryCallbackData *mapWalkDirectoryCallbackData = static_cast( a_data ); + + if( ( mapWalkDirectoryCallbackData->m_projectileID == "" ) || + PoPI::compareSpecialParticleIDs( mapWalkDirectoryCallbackData->m_projectileID, a_protareEntry->projectileID( ) ) ) { + if( ( mapWalkDirectoryCallbackData->m_targetID == "" ) || ( mapWalkDirectoryCallbackData->m_targetID == a_protareEntry->targetID( ) ) ) { + if( ( mapWalkDirectoryCallbackData->m_library == "" ) || ( mapWalkDirectoryCallbackData->m_library == a_library ) ) { + if( ( mapWalkDirectoryCallbackData->m_evaluation == "" ) || ( mapWalkDirectoryCallbackData->m_evaluation == a_protareEntry->evaluation( ) ) ) { + mapWalkDirectoryCallbackData->m_protareEntries.push_back( a_protareEntry ); + } + } + } + } + return( true ); +} + +/*! \class BaseEntry + * This is the virtual base class inherited by all map entry classes. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_basePath [in] A path prepended to this entry's path. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +BaseEntry::BaseEntry( HAPI::Node const &a_node, std::string const &a_basePath, Map const *a_parent ) : + GUPI::Ancestry( a_node.name( ) ), + m_name( a_node.name( ) ), + m_parent( a_parent ), + m_path( a_node.attribute_as_string( GIDI_pathChars ) ), + m_cumulativePath( GIDI_addPaths( a_basePath, m_path ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +BaseEntry::~BaseEntry( ) { + +} + +/* *********************************************************************************************************//** + * Returns either the *entered*, *cumulative* or *realPath* path for the entry. + * + * @param a_form [in] The type of path to return. + * @return The requested path. + ***********************************************************************************************************/ + +std::string BaseEntry::path( PathForm a_form ) const { + + if( a_form == PathForm::entered ) return( m_path ); + if( a_form == PathForm::cumulative ) return( m_cumulativePath ); + return( LUPI::FileInfo::realPath( m_cumulativePath ) ); +} + +/* *********************************************************************************************************//** + * Fills *a_libraries* with the name of all the libraries *this* is contained in. The first library in the list is the + * library *this* is defined in and the last is the starting library. + * + * @param a_libraries [out] The instances that is filled with the library names. + ***********************************************************************************************************/ + +void BaseEntry::libraries( std::vector &a_libraries ) const { + + parent( )->libraries( a_libraries ); +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed to contruct a Import instance. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_basePath [in] A path prepended to this entry's path. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +Import::Import( HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *a_parent ) : + BaseEntry( a_node, a_basePath, a_parent ), + m_map( nullptr ) { + + m_map = new Map( path( BaseEntry::PathForm::cumulative ), a_pops, a_parent ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Import::~Import( ) { + + delete m_map; +} + +/* *********************************************************************************************************//** + * Returns the Protare entry to the first protare to match *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*. If + * *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are matched. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * + * @return The const pointer **ProtareBase** for the matched protare. + ***********************************************************************************************************/ + +ProtareBase const *Import::findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, + std::string const &a_library, std::string const &a_evaluation ) const { + + return( m_map->findProtareEntry( a_projectileID, a_targetID, a_library, a_evaluation ) ); +} + +/* *********************************************************************************************************//** + * Returns the list of all Protare entries that match *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*. + * The arguments *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation* can be an C++ regex string. An empty + * string for any of the arguments will match all. + * + * @param a_protareEntries [out] The list of **ProtareBase** found. + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + ***********************************************************************************************************/ + +void Import::findProtareEntries( std::vector &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library, std::regex const &a_evaluation ) const { + + return( m_map->findProtareEntries( a_protareEntries, a_projectileID, a_targetID, a_library, a_evaluation ) ); +} + +/* *********************************************************************************************************//** + * Returns the path to the first protare to match *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*. If + * *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are matched. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * @param a_form [in] Determines the form of the path returned. + * + * @return The path to the matched protare. + ***********************************************************************************************************/ + +std::string Import::protareFilename( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, + std::string const &a_evaluation, PathForm a_form ) const { + + return( m_map->protareFilename( a_projectileID, a_targetID, a_library, a_evaluation, a_form ) ); +} + +/* *********************************************************************************************************//** + * Returns a list of all evaluations with a match to *a_projectileID* and *a_targetID*. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @return List of evaluations. + ***********************************************************************************************************/ + +std::vector Import::availableEvaluations( std::string const &a_projectileID, std::string const &a_targetID ) const { + + return( m_map->availableEvaluations( a_projectileID, a_targetID ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Import::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_pathChars, path( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_basePath [in] A path prepended to this entry's path. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +ProtareBase::ProtareBase( HAPI::Node const &a_node, std::string const &a_basePath, Map const *const a_parent ) : + BaseEntry( a_node, a_basePath, a_parent ), + m_projectileID( a_node.attribute_as_string( GIDI_projectileChars ) ), + m_targetID( a_node.attribute_as_string( GIDI_targetChars ) ), + m_evaluation( a_node.attribute_as_string( GIDI_evaluationChars ) ), + m_interaction( a_node.attribute_as_string( GIDI_interactionChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ProtareBase::~ProtareBase( ) { + +} + +/* *********************************************************************************************************//** + * Returns the library *this* is contained in. + ***********************************************************************************************************/ + +std::string const &ProtareBase::library( ) const { + + return( parent( )->library( ) ); +} + +/* *********************************************************************************************************//** + * Returns the resolved library *this* is contained in. + ***********************************************************************************************************/ + +std::string const &ProtareBase::resolvedLibrary( ) const { + + return( parent( )->resolvedLibrary( ) ); +} + +/* *********************************************************************************************************//** + * Compares *a_projectileID*, *a_targetID* and *a_evaluation* to *this* data and returns true if they match + * and false otherwise. If *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are compared. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * + * @return The *this* pointer if *this* matches otherwise a **nullptr**. + ***********************************************************************************************************/ + +ProtareBase const *ProtareBase::findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, + std::string const &a_library, std::string const &a_evaluation ) const { + + if( !PoPI::compareSpecialParticleIDs( a_projectileID, projectileID( ) ) ) return( nullptr ); + if( a_targetID != targetID( ) ) return( nullptr ); + if( ( a_library != "" ) && ( parent( )->library( ) != a_library ) ) return( nullptr ); + if( ( a_evaluation == "" ) || ( a_evaluation == evaluation( ) ) ) return( this ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the list of all Protare entries that match *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*. + * The arguments *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation* can be an C++ regex string. An empty + * string for any of the arguments will match all. + * + * @param a_protareEntries [out] The list of **ProtareBase** found. + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + ***********************************************************************************************************/ + +void ProtareBase::findProtareEntries( std::vector &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library, std::regex const &a_evaluation ) const { + + if( regex_match( m_projectileID, a_projectileID ) ) { + if( regex_match( m_targetID, a_targetID ) ) { + if( regex_match( parent( )->library( ), a_library ) ) { + if( regex_match( m_evaluation, a_evaluation ) ) a_protareEntries.push_back( this ); + } + } + } +} + +/* *********************************************************************************************************//** + * Compares *a_projectileID*, *a_targetID* and *a_evaluation* to *this* data and returns true if they match + * and false otherwise. If *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are compared. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_evaluation [in] The evaluation to match. + * @return true if match and false otherwise. + ***********************************************************************************************************/ + +bool ProtareBase::isMatch( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_evaluation ) const { + + if( !PoPI::compareSpecialParticleIDs( a_projectileID, m_projectileID ) ) return( false ); + if( a_targetID != m_targetID ) return( false ); + if( a_evaluation == "" ) return( true ); + return( a_evaluation == m_evaluation ); +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed to contruct a Protare entry instance. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_basePath [in] A path prepended to this entry's path. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +Protare::Protare( HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *const a_parent ) : + ProtareBase( a_node, a_basePath, a_parent ), + m_isPhotoAtomic( false ) { + + if( interaction( ) == "" ) { // Some old GNDS 1.10 files do not have an "interaction" attribute. + setInteraction( GIDI_MapInteractionNuclearChars ); + if( PoPI::IDs::photon == projectileID( ) ) { + try { + PoPI::Base const &target( a_pops.get( targetID( ) ) ); + m_isPhotoAtomic = target.isChemicalElement( ); } + catch (...) { // Let's ignore, but user must understand that m_interaction and m_isPhotoAtomic may be wrong. + } + if( m_isPhotoAtomic ) setInteraction( GIDI_MapInteractionAtomicChars ); + } + } + m_isPhotoAtomic = interaction( ) == GIDI_MapInteractionAtomicChars; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Protare::~Protare( ) { + +} + +/* *********************************************************************************************************//** + * Returns a GIDI::Protare instance of the protare reference by the *m_path* member. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * + * @return Returns the Protare matching the TNSL protare. + ***********************************************************************************************************/ + +GIDI::Protare *Protare::protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution ) const { + + return( protareSingle( a_construction, a_pops, a_particleSubstitution ) ); +} + +/* *********************************************************************************************************//** + * Returns a GIDI::ProtareSingle instance of the protare reference by the *m_path* member. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * + * @return Returns the Protare matching the TNSL protare. + ***********************************************************************************************************/ + +GIDI::ProtareSingle *Protare::protareSingle( Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution ) const { + + std::vector libraries1; + libraries( libraries1 ); + + return( new ProtareSingle( a_construction, path( ), fileType( path( ) ), a_pops, a_particleSubstitution, libraries1, interaction( ), true ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Protare::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_projectileChars, projectileID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_targetChars, targetID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_evaluationChars, evaluation( ) ); + attributes += a_writeInfo.addAttribute( GIDI_pathChars, path( PathForm::entered ) ); + attributes += a_writeInfo.addAttribute( GIDI_interactionChars, interaction( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed to contruct a TNSL entry instance. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_basePath [in] A path prepended to this entry's path. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +TNSL::TNSL( HAPI::Node const &a_node, LUPI_maybeUnused PoPI::Database const &a_pops, std::string const &a_basePath, Map const *const a_parent ) : + ProtareBase( a_node, a_basePath, a_parent ), + m_standardTarget( a_node.attribute_as_string( GIDI_standardTargetChars ) ), + m_standardEvaluation( a_node.attribute_as_string( GIDI_standardEvaluationChars ) ) { + + setInteraction( "" ); + + HAPI::Node const &protare = a_node.child( GIDI_protareChars ); // Format 0.1 support. This format is deprecated. + if( !protare.empty() ) { + m_standardTarget = protare.attribute_as_string( GIDI_targetChars ); + m_standardEvaluation = protare.attribute_as_string( GIDI_evaluationChars ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +TNSL::~TNSL( ) { + +} + +/* *********************************************************************************************************//** + * Returns a GIDI::ProtareTNSL instance of the protare reference by the *m_path* member. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * + * @return Returns the Protare matching the TNSL protare. + ***********************************************************************************************************/ + +GIDI::Protare *TNSL::protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, LUPI_maybeUnused ParticleSubstitution const &a_particleSubstitution ) const { + + Map const *map = parent( ); + + ParticleSubstitution particleSubstitution; + std::vector libraries1; + libraries( libraries1 ); + + ProtareSingle *protare1 = new ProtareSingle( a_construction, path( ), fileType( path( ) ), a_pops, particleSubstitution, libraries1, GIDI_MapInteractionTNSLChars, false ); + + while( true ) { + Map const *parent = map->parent( ); + + if( parent == nullptr ) break; + map = parent; + } + ProtareSingle *protare2 = static_cast( map->protare( a_construction, a_pops, PoPI::IDs::neutron, m_standardTarget, "", m_standardEvaluation ) ); + if( protare2 == nullptr ) protare2 = static_cast( map->protare( a_construction, a_pops, PoPI::IDs::neutron, m_standardTarget ) ); + + ProtareTNSL *protareTNSL = new ProtareTNSL( a_construction, protare2, protare1 ); + + return( protareTNSL ); +} + +/* *********************************************************************************************************//** + * Returns a GIDI::ProtareSingle instance of the protare reference by the *m_path* member. Note, this is different from the *protare* method + * which returns a **GIDI::ProtareTNSL** instance. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * + * @return Returns the Protare matching the TNSL protare. + ***********************************************************************************************************/ + +GIDI::ProtareSingle *TNSL::protareSingle( Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution ) const { + + std::vector libraries1; + libraries( libraries1 ); + + return( new ProtareSingle( a_construction, path( ), fileType( path( ) ), a_pops, a_particleSubstitution, libraries1, GIDI_MapInteractionTNSLChars, false ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void TNSL::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_projectileChars, projectileID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_targetChars, targetID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_evaluationChars, evaluation( ) ); + attributes += a_writeInfo.addAttribute( GIDI_pathChars, path( PathForm::entered ) ); + attributes += a_writeInfo.addAttribute( GIDI_standardTargetChars, standardTarget( ) ); + attributes += a_writeInfo.addAttribute( GIDI_standardEvaluationChars, standardEvaluation( ) ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} +/* *********************************************************************************************************//** + * + * @param a_fileName [in] The path to the map file to parse to construct a Map instance. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +Map::Map( std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ) : + GUPI::Ancestry( GIDI_mapChars ) { + + initialize( a_fileName, a_pops, a_parent ); +} + +/* *********************************************************************************************************//** + * + * @param a_node [in] HAPI::Node corresponding to the map node + * @param a_fileName [in] std::string, the name of the file containing this map. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +Map::Map( HAPI::Node const &a_node, std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ) : + GUPI::Ancestry( a_node.name( ) ) { + + initialize( a_node, a_fileName, a_pops, a_parent ); +} + +/* *********************************************************************************************************//** + * This method is called by the fileName constructors, opens the document and calls the other initialize method + * + * @param a_fileName [in] The path to the map file to parse to construct a Map instance. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +void Map::initialize( std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ) { + + HAPI::File *doc = new HAPI::PugiXMLFile( a_fileName.c_str( ), "Map::initialize" ); + + HAPI::Node map = doc->first_child( ); + + if( strcmp( map.name( ).c_str( ), GIDI_mapChars ) != 0 ) throw Exception( "Invalid map file " + a_fileName ); + + initialize( map, a_fileName, a_pops, a_parent ); + delete doc; +} + +/* *********************************************************************************************************//** + * This method is called either by the constructor or by the other initialize method. Does most of the work of parsing + * + * @param a_node [in] HAPI::Node corresponding to the map node. + * @param a_fileName [in] std::string, the name of the file containing this map + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] Pointer to the *Map* containing *this*. + ***********************************************************************************************************/ + +void Map::initialize( HAPI::Node const &a_node, std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent ) { + + m_parent = a_parent; + m_fileName = a_fileName; + m_realFileName = LUPI::FileInfo::realPath( a_fileName ); + m_projectilesLoaded = false; + + std::string basePath = GIDI_basePath( m_realFileName ); + + std::string format = a_node.attribute_as_string( GIDI_formatChars ); + if( ( format == GNDS_formatVersion_2_0_LLNL_4Chars ) || ( format == GIDI_mapFormatVersion_0_2Chars ) ) format = GNDS_formatVersion_2_0Chars; + if( format != GNDS_formatVersion_2_0Chars ) { + if( format != GIDI_mapFormatVersion_0_1Chars ) throw Exception( "Unsupported map format" ); + } + + m_library = a_node.attribute_as_string( GIDI_libraryChars ); + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + if( strcmp( child.name( ).c_str( ), GIDI_importChars ) == 0 ) { + m_entries.push_back( new Import( child, a_pops, basePath, this ) ); } + else if( strcmp( child.name( ).c_str( ), GIDI_protareChars ) == 0 ) { + m_entries.push_back( new Protare( child, a_pops, basePath, this ) ); } + else if( strcmp( child.name( ).c_str( ), GIDI_TNSLChars ) == 0 ) { + m_entries.push_back( new TNSL( child, a_pops, basePath, this ) ); } + else { + throw Exception( std::string( "Invalid entry '" ) + child.name( ) + std::string( "' in map file " ) + a_fileName ); + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Map::~Map( ) { + + for( std::vector::const_iterator iter = m_entries.begin( ); iter < m_entries.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +std::string const &Map::resolvedLibrary( ) const { + + if( ( m_library == "" ) && ( m_parent != nullptr ) ) return( m_parent->resolvedLibrary( ) ); + return( m_library ); +} + +/* *********************************************************************************************************//** + * Fills *a_libraries* with the name of all the libraries *this* is contained in. The first library in the list is the + * library *this* is defined in and the last is the starting library. + * + * @param a_libraries [out] The instances that is filled with the library names. + ***********************************************************************************************************/ + +void Map::libraries( std::vector &a_libraries ) const { + + a_libraries.push_back( m_library ); + if( m_parent != nullptr ) m_parent->libraries( a_libraries ); +} + +/* *********************************************************************************************************//** + * Returns the Protare to the first protare to match *a_projectileID*, *a_targetID* and *a_evaluation*. If + * *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are matched. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * + * @return The const pointer **ProtareBase** for the matched protare. + ***********************************************************************************************************/ + +ProtareBase const *Map::findProtareEntry( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, + std::string const &a_evaluation ) const { + + ProtareBase const *protareEntry = nullptr; + + for( std::vector::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + protareEntry = (*iter)->findProtareEntry( a_projectileID, a_targetID, a_library, a_evaluation ); + if( protareEntry != nullptr ) break; + } + return( protareEntry ); +} + +/* *********************************************************************************************************//** + * Returns the list of all Protare entries that match *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation*. + * The arguments *a_projectileID*, *a_targetID*, *a_library* and *a_evaluation* can be an C++ regex string. An empty + * string for any of the arguments will match all. + * + * @param a_protareEntries [out] The list of **ProtareBase** found. + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + ***********************************************************************************************************/ + +void Map::findProtareEntries( std::vector &a_protareEntries, std::regex const &a_projectileID, + std::regex const &a_targetID, std::regex const &a_library, std::regex const &a_evaluation ) const { + + for( std::vector::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + (*iter)->findProtareEntries( a_protareEntries, a_projectileID, a_targetID, a_library, a_evaluation ); + } +} + +/* *********************************************************************************************************//** + * Returns the path to the first protare to match *a_projectileID*, *a_targetID* and *a_evaluation*. If + * *a_evaluation* is an empty string, only *a_projectileID* and *a_targetID* are matched. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * @param a_form [in] Determines the form of the path returned. + * @return The path to the matched protare. + ***********************************************************************************************************/ + +std::string Map::protareFilename( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, + std::string const &a_evaluation, BaseEntry::PathForm a_form ) const { + + ProtareBase const *protareEntry = findProtareEntry( a_projectileID, a_targetID, a_library, a_evaluation ); + + if( protareEntry != nullptr ) return( protareEntry->path( a_form ) ); + return( GIDI_emptyFileNameChars ); +} + +/* *********************************************************************************************************//** + * Returns *true* if *a_targetID* is a thermal neutron scattering law (TNSL) target id contained this map, including recursion, and *false* otherwise. + * + * @param a_targetID [in] The target's id. + * + * @return *true* if target *a_targetID* is present and is a TNSL target, and *false* otherwise. + ***********************************************************************************************************/ + +bool Map::isTNSL_target( std::string const &a_targetID ) const { + + ProtareBase const *protareEntry = findProtareEntry( PoPI::IDs::neutron, a_targetID ); + + if( protareEntry == nullptr ) return( false ); + if( protareEntry->entryType( ) == EntryType::TNSL ) return( true ); + return( false ); +} + +/* *********************************************************************************************************//** + * Returns a list of all evaluations with a match to *a_projectileID* and *a_targetID*. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @return List of evaluations. + ***********************************************************************************************************/ + +std::vector Map::availableEvaluations( std::string const &a_projectileID, std::string const &a_targetID ) const { + + std::vector list; + + for( std::vector::const_iterator iter1 = m_entries.begin( ); iter1 != m_entries.end( ); ++iter1 ) { + if( (*iter1)->name( ) == GIDI_importChars ) { + Import *_mapEntry = dynamic_cast (*iter1); + + std::vector sub_list = _mapEntry->availableEvaluations( a_projectileID, a_targetID ); + for( std::vector::const_iterator iter2 = sub_list.begin( ); iter2 != sub_list.end( ); ++iter2 ) + list.push_back( *iter2 ); } + else { + ProtareBase *protareEntry = dynamic_cast (*iter1); + + if( protareEntry->isMatch( a_projectileID, a_targetID ) ) list.push_back( protareEntry->evaluation( ) ); + } + } + return( list ); +} + +/* *********************************************************************************************************//** + * If a protare matching *a_projectileID*, *a_targetID* and *a_evaluation* is found, the Protare constructor is called with + * its fileName. + * + * @param a_construction [in] Pass to the Protare constructor. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * @param a_targetRequiredInGlobalPoPs [in] If *true*, the target is required to be in **a_pops**. + * @param a_ignorePoPs [in] If *true*, no particle is required to be in **a_pops**. + ***********************************************************************************************************/ + +GIDI::Protare *Map::protare( Construction::Settings const &a_construction, PoPI::Database const &a_pops, std::string const &a_projectileID, + std::string const &a_targetID, std::string const &a_library, std::string const &a_evaluation, LUPI_maybeUnused bool a_targetRequiredInGlobalPoPs, LUPI_maybeUnused bool a_ignorePoPs ) const { + + std::string targetID( a_targetID ); + std::string atomicTargetID; + + ParticleSubstitution particleSubstitution; + GIDI::Protare *nuclear = nullptr, *atomic = nullptr, *protare; + + if( a_projectileID != PoPI::IDs::neutron ) { // Check if targetID is for TNSL target. If so, and projectile is not a neutron, need to use standardTarget name. + ProtareBase const *protareEntry = findProtareEntry( PoPI::IDs::neutron, targetID ); + + if( protareEntry != nullptr ) { + if( protareEntry->entryType( ) == EntryType::TNSL ) targetID = static_cast( protareEntry )->standardTarget( ); + } + } + + if( a_projectileID == PoPI::IDs::photon ) { + PoPI::ParseIdInfo parseIdInfo( targetID ); + + if( a_construction.photoMode( ) != Construction::PhotoMode::nuclearOnly ) { + atomicTargetID = targetID; // Kludge for 99120 and similar targets. + + if( parseIdInfo.isNuclear( ) ) atomicTargetID = parseIdInfo.symbol( ); + ProtareBase const *protareEntry = findProtareEntry( a_projectileID, atomicTargetID, a_library, a_evaluation ); + if( protareEntry != nullptr ) { + particleSubstitution.insert( { atomicTargetID, ParticleInfo( targetID, a_pops, a_pops, true ) } ); + atomic = protareEntry->protare( a_construction, a_pops, particleSubstitution ); + particleSubstitution.clear( ); + } + } + if( ( a_construction.photoMode( ) != Construction::PhotoMode::atomicOnly ) && ( targetID != atomicTargetID ) ) { + if( parseIdInfo.isSupported( ) ) { // Kludge to ignore 99120 and similar targers. + ProtareBase const *protareEntry = findProtareEntry( a_projectileID, targetID, a_library, a_evaluation ); + if( protareEntry != nullptr ) nuclear = protareEntry->protare( a_construction, a_pops, particleSubstitution ); + } + } } + else { + ProtareBase const *protareEntry = findProtareEntry( a_projectileID, targetID, a_library, a_evaluation ); + if( protareEntry != nullptr ) nuclear = protareEntry->protare( a_construction, a_pops, particleSubstitution ); + } + + if( nuclear == nullptr ) { + protare = atomic; } + else if( atomic == nullptr ) { + protare = nuclear; } + else { + ProtareComposite *protareComposite = new ProtareComposite( a_construction ); + + protareComposite->setProjectile( nuclear->projectile( ) ); + protareComposite->setTarget( nuclear->target( ) ); + protareComposite->append( nuclear ); + protareComposite->append( atomic ); + protare = protareComposite; + } + + return( protare ); +} + +/* *********************************************************************************************************//** + * Returns a list of all Protare entry's matching the input data. + * + * @param a_projectileID [in] The projectile's id to match. + * @param a_targetID [in] The target's id to match. + * @param a_library [in] The library to match. + * @param a_evaluation [in] The evaluation to match. + * @return List of all Protare entry's matching input parameters. + ***********************************************************************************************************/ + +std::vector Map::directory( std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, + std::string const &a_evaluation ) const { + + MapWalkDirectoryCallbackData mapWalkDirectoryCallbackData( a_projectileID, a_targetID, a_library, a_evaluation ); + + walk( MapWalkDirectoryCallback, &mapWalkDirectoryCallbackData, 0 ); + return( mapWalkDirectoryCallbackData.m_protareEntries ); +} + +/* *********************************************************************************************************//** + * A method to walk a map file. For each Protare entry found, the **a_mapWalkCallBack** function is called with + * a pointer to the Protare entry and **a_userData** has its arguments. + * + * @param a_mapWalkCallBack [in] The callback function. + * @param a_userData [in] Pointer to user data. + * @param a_level [in] Nested level of *this* map file. For internal use. + * + * @return true if no issue is found and false if an issue is found. + ***********************************************************************************************************/ + +bool Map::walk( MapWalkCallBack a_mapWalkCallBack, void *a_userData, int a_level ) const { + + for( std::size_t i1 = 0; i1 < size( ); ++i1 ) { + BaseEntry const *entry = (*this)[i1]; + + std::string path = entry->path( BaseEntry::PathForm::cumulative ); + + if( entry->name( ) == GIDI_importChars ) { + Import const *mapEntry = static_cast( entry ); + if( !mapEntry->map( )->walk( a_mapWalkCallBack, a_userData, a_level + 1 ) ) return( true ); } + else if( ( entry->name( ) == GIDI_protareChars ) || ( entry->name( ) == GIDI_TNSLChars ) ) { + if( !a_mapWalkCallBack( static_cast( entry ), m_library, a_userData, a_level ) ) return( true ); } + else { + std::cerr << " ERROR: unknown map entry name: " << entry->name( ) << std::endl; + } + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Write *this* to a file in GNDS/XML format. + * + * @param a_fileName [in] Name of file to save XML lines to. + ***********************************************************************************************************/ + +void Map::saveAs( std::string const &a_fileName ) const { + + GUPI::WriteInfo writeInfo; + + toXMLList( writeInfo, "" ); + + std::ofstream fileio; + fileio.open( a_fileName.c_str( ) ); + for( std::list::iterator iter = writeInfo.m_lines.begin( ); iter != writeInfo.m_lines.end( ); ++iter ) fileio << *iter << std::endl; + fileio.close( ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Map::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string header = LUPI_XML_verionEncoding; + std::string attributes; + + a_writeInfo.push_back( header ); + + attributes = a_writeInfo.addAttribute( GIDI_libraryChars, m_library ); + attributes += a_writeInfo.addAttribute( GIDI_formatChars, GNDS_formatVersion_2_0Chars ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + for( auto iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Returns the name of the RIS file for *this* map file. All RIS files must have a standard name which is the name of + * the map file with its extension replaced with ".ris". + * + * @return The **std::string** representing the RIS file. + ***********************************************************************************************************/ + +std::string Map::RIS_fileName( ) { + + std::size_t found = m_fileName.rfind( '.' ); + std::string RIS_fileName( m_fileName.substr( 0, found ) ); + + return( RIS_fileName + ".ris" ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the RIS file for *this* map file exists and **false** otherwise. + * + * @return A boolean indicating if the RIS file exists or not. + ***********************************************************************************************************/ + +bool Map::RIS_fileExist( ) { + + return( LUPI::FileInfo::exists( RIS_fileName( ) ) ); +} + +/* *********************************************************************************************************//** + * Load the data from the RIS file if it exists. If it does not exists, no error is reported and the returned + * **RISI::Projectiles** will be empty. + * + * @param a_energyUnit [in/out] The unit desired for threshold energies. + * + * @return A const reference to the **RISI::Projectiles** data. + ***********************************************************************************************************/ + +RISI::Projectiles const &Map::RIS_load( std::string const &a_energyUnit ) { + + if( !m_projectilesLoaded ) { + if( RIS_fileExist( ) ) GIDI::RISI::readRIS( RIS_fileName( ), a_energyUnit, m_projectiles ); + } + m_projectilesLoaded = true; + + return( m_projectiles ); +} + +/* *********************************************************************************************************//** + * If *this* has target *a_target* for projectile *a_projectile*, then *a_target* is returned. If it does not have target *a_target*, + * for projectile *a_projectile*, then a reasonable substitute is returned if one can be found in *this*. If no reasonable substitute + * is found, an empty string is returned. + * + * + * @param a_pops [in] A PoPI::Database instance used to get information about *a_target*.. + * @param a_projectile [in] The PoPs id of the projectile. + * @param a_target [in] The PoPs id of the target. + * + * @return The PoPs id of the replacement target. + ***********************************************************************************************************/ + +std::string Map::replacementTarget( PoPI::Database const &a_pops, std::string const &a_projectile, std::string const &a_target ) { + + if( findProtareEntry( a_projectile, a_target ) != nullptr ) return( a_target ); + + if( a_pops.exists( a_target ) ) { + std::string particleID = a_pops.final( a_target ); + if( a_pops.isParticle( particleID ) ) { + PoPI::Particle const &particle = a_pops.particle( particleID ); + if( particle.hasNucleus( ) ) { + PoPI::Nuclide const *nuclide = static_cast( &particle ); + if( particle.isNucleus( ) ) { + PoPI::Nucleus const *nucleus = static_cast( &particle ); + nuclide = nucleus->nuclide( ); + } + PoPI::Isotope const *isotope = nuclide->isotope( ); + std::string targetRegexString( isotope->chemicalElement( )->symbol( ) + "[0-9]+" ); + + std::vector protareEntries; + findProtareEntries( protareEntries, std::regex( a_projectile ), std::regex( targetRegexString ) ); + if( protareEntries.size( ) > 0 ) { + int offset = 0; + std::map choices; + for( auto entryIter = protareEntries.begin( ); entryIter != protareEntries.end( ); ++entryIter ) { + PoPI::Nuclide const &nuclide2 = a_pops.get( (*entryIter)->targetID( ) ); + int diffA = nuclide->A( ) - nuclide2.A( ); + offset += diffA; + choices[diffA] = nuclide2.ID( ); + } + offset = offset < 0 ? -1 : 1; + int diff = 2 * offset; + int step = 2; + for( int doTwo = 0; doTwo < 2; ++doTwo ) { + for( std::size_t index = 0; index < choices.size( ); ++index ) { + auto iter = choices.find( diff ); + if( iter != choices.end( ) ) return( (*iter).second ); + + diff *= -1; + iter = choices.find( diff ); + if( iter != choices.end( ) ) return( (*iter).second ); + + diff = -diff + step * offset; + } + step = 1; + } + } + } + } + } + + return( "" ); +} + +} // End of namespace Map. + +} // End of namespace GIDI. + +/* *********************************************************************************************************//** + * Splits the path at the last path separator (e.g., the '/' charactor on Unix systems) and returns the first (i.e., + * directory) part. Returns "." is no '/' is present. + * + * @param a_path The path whose directory is to be returned. + * + * @return The directory of file **a_path** + ***********************************************************************************************************/ + +static std::string GIDI_basePath( char const *a_path ) { + + char *p1, realPath[LUPI_PATH_MAX+1]; + + strcpy( realPath, a_path ); + if( ( p1 = strrchr( realPath, '/' ) ) != nullptr ) { + *p1 = 0; } + else { + strcpy( realPath, "." ); + } + std::string basePath( realPath ); + return( basePath ); +} + +/* *********************************************************************************************************//** + * Calls GIDI_basePath( char const *a_path ). + * + * @param a_path + * @return + ***********************************************************************************************************/ + +static std::string GIDI_basePath( std::string const a_path ) { + + return( GIDI_basePath( a_path.c_str( ) ) ); +} + +/* *********************************************************************************************************//** + * If **a_path** is not an absolute path, prepends **a_path** to it. + * + * @param a_base [in] Base path to prepend to **a_path**. + * @param a_path [in] Path + * @return Prepend path. + ***********************************************************************************************************/ + +static std::string GIDI_addPaths( std::string const &a_base, std::string const &a_path ) { + + std::string path( a_path ); + + if( ( a_base.size( ) > 0 ) && ( path[0] != GIDI_FILE_SEPARATOR[0] ) ) path = a_base + GIDI_FILE_SEPARATOR + path; + return( path ); +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_matrix.cc b/source/processes/hadronic/models/lend/src/GIDI_matrix.cc new file mode 100644 index 0000000000..eb90b29f8d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_matrix.cc @@ -0,0 +1,338 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class Matrix + * This class stores a mathematical matrix and has methods that perform several matrix operations (e.g., addition, subtraction). + */ + +/* *********************************************************************************************************//** + * + * @param a_rows [in] Number of rows of the matrix. + * @param a_columns [in] Number of columns of the matrix. + ***********************************************************************************************************/ + +Matrix::Matrix( std::size_t a_rows, std::size_t a_columns ) { + + m_matrix.resize( a_rows ); + + for( std::size_t i1 = 0; i1 < a_rows; ++i1 ) m_matrix[i1].resize( a_columns ); +} + +/* *********************************************************************************************************//** + * + * @param a_matrix [in] Matrix to copy. + ***********************************************************************************************************/ + +Matrix::Matrix( Matrix const &a_matrix ) { + + std::size_t rows = a_matrix.size( ); + + m_matrix.resize( rows ); + + for( std::size_t i1 = 0; i1 < rows; ++i1 ) m_matrix[i1] = a_matrix[i1]; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Matrix::~Matrix( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs*. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + * + * @return A reference to the updated Matrix instance. + ***********************************************************************************************************/ + +Matrix &Matrix::operator=( Matrix const &a_rhs ) { + + if( this != &a_rhs ) { + m_matrix = a_rhs.matrix( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Matrix whose cells are *this* plus *a_value*. + * + * @param a_value [in] The value to add to each cell. + * @return New Matrix whose cells are *this* plus *a_value*. + ***********************************************************************************************************/ + +Matrix Matrix::operator+( double a_value ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix += a_value; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Adds *a_value* to each cell of *this*. + * + * @param a_value [in] The value to add to each cell. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator+=( double a_value ) { + + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter ) *iter += a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Adds two Matrices. + * + * @param a_rhs [in] Matrix to add to *this*. + * @return New Matrix that is the matrix sum of *this* and *a_rhs*. + ***********************************************************************************************************/ + +Matrix Matrix::operator+( Matrix const &a_rhs ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix += a_rhs; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Adds *a_rhs* to *this*. + * + * @param a_rhs [in] Matrix to add to *this*. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator+=( Matrix const &a_rhs ) { + + std::size_t i1, rhs_size = a_rhs.size( ); + + if( rhs_size == 0 ) return( *this ); // Do nothing if rhs is empty. + + if( size( ) == 0 ) { + for( i1 = 0; i1 < rhs_size; ++i1 ) m_matrix.push_back( Vector( a_rhs.numberOfColumns( ) ) ); + } + + if( size( ) != a_rhs.size( ) ) throw Exception( "matrix sizes differ." ); + if( m_matrix[0].size( ) != a_rhs[0].size( ) ) throw Exception( "matrix colums numbers differ." ); + + i1 = 0; + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter, ++i1 ) *iter += a_rhs[i1]; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Matrix whose cells are *this* minus *a_value*. + * + * @param a_value [in] The value to subtract from each cell. + * @return New Matrix whose cells are *this* plus *a_value*. + ***********************************************************************************************************/ + +Matrix Matrix::operator-( double a_value ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix -= a_value; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_value* from each cell of *this*. + * + * @param a_value [in] The value to subtract from each cell. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator-=( double a_value ) { + + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter ) *iter -= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_rhs* from *this*. + * + * @param a_rhs [in] Matrix to subtract from *this*. + * @return New Matrix that is *this* minus *a_rhs*. + ***********************************************************************************************************/ + +Matrix Matrix::operator-( Matrix const &a_rhs ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix -= a_rhs; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_rhs* to *this*. + * + * @param a_rhs [in] Matrix to subtract from *this*. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator-=( Matrix const &a_rhs ) { + + std::size_t i1, rhs_size = a_rhs.size( ); + + if( rhs_size == 0 ) return( *this ); // Do nothing if rhs is empty. + + if( size( ) == 0 ) { + for( i1 = 0; i1 < rhs_size; ++i1 ) m_matrix.push_back( Vector( a_rhs.numberOfColumns( ) ) ); + } + + if( size( ) != a_rhs.size( ) ) throw Exception( "matrix sizes differ." ); + if( m_matrix[0].size( ) != a_rhs[0].size( ) ) throw Exception( "matrix colums numbers differ." ); + + i1 = 0; + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter, ++i1 ) *iter -= a_rhs[i1]; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Matrix whose cells are *this* multiplied by *a_value*. + * + * @param a_value [in] The value to multiply each cell by. + * @return New Matrix whose cells are *this* multiply by *a_value*. + ***********************************************************************************************************/ + +Matrix Matrix::operator*( double a_value ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix *= a_value; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Multiplies each cell of *this* by *a_value*. + * + * @param a_value [in] The value to multiply each cell by. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator*=( double a_value ) { + + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter ) *iter *= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Matrix whose cells are *this* divided by *a_value*. + * + * @param a_value [in] The value to divide each cell by. + * @return New Matrix whose cells are *this* divided by *a_value*. + ***********************************************************************************************************/ + +Matrix Matrix::operator/( double a_value ) const { + + Matrix gidiMatrix( *this ); + + gidiMatrix /= a_value; + return( gidiMatrix ); +} + +/* *********************************************************************************************************//** + * Divides each cell of *this* by *a_value*. + * + * @param a_value [in] The value to divide each cell by. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Matrix &Matrix::operator/=( double a_value ) { + + if( a_value == 0 ) throw Exception( "divide by zero." ); + for( std::vector::iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter ) *iter /= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns the number of columns of *this*. + * + * @return The number of columns of *this*. + ***********************************************************************************************************/ + +std::size_t Matrix::numberOfColumns( ) const { + + if( size( ) == 0 ) return( 0 ); + return( m_matrix[0].size( ) ); +} + +/* *********************************************************************************************************//** + * Adds a row to *this*. + * + * @param a_vector [in] The Vector to add to *this* as another row. + ***********************************************************************************************************/ + +void Matrix::push_back( Vector const &a_vector ) { + + if( size( ) > 0 ) { + if( (*this)[0].size( ) != a_vector.size( ) ) throw Exception( "matrix::push_back: size different" ); + } + m_matrix.push_back( a_vector ); +} + +/* *********************************************************************************************************//** + * Transposes the cells of *this*. + ***********************************************************************************************************/ + +Matrix Matrix::transpose( ) { + + std::size_t __numberOfColumns( numberOfColumns( ) ); + Matrix __matrix( __numberOfColumns, size( ) ); + + for( std::size_t i1 = 0; i1 < size( ); ++i1 ) { + for( std::size_t i2 = 0; i2 < __numberOfColumns; ++i2 ) __matrix( i2, i1, (*this)[i1][i2] ); + } + return( __matrix ); +} + +/* *********************************************************************************************************//** + * Reverse the rows of *this*. + ***********************************************************************************************************/ + +void Matrix::reverse( ) { + + std::size_t i2 = size( ), n_2 = i2 / 2; + + for( std::size_t i1 = 0; i1 < i2; ++i1 ) m_matrix[i1].reverse( ); + --i2; + for( std::size_t i1 = 0; i1 < n_2; ++i1, --i2 ) { + Vector temp = m_matrix[i1]; + + m_matrix[i1] = m_matrix[i2]; + m_matrix[i2] = temp; + } +} + +/* *********************************************************************************************************//** + * Prints the contents of *this* by calling the *print* method of each row with **a_prefixForRow** as an argument. + * + * @param a_prefixForRow [in] Argument passed to each row's print method. + ***********************************************************************************************************/ + +void Matrix::print( std::string const &a_prefixForRow ) const { + + for( std::vector::const_iterator iter = m_matrix.begin( ); iter < m_matrix.end( ); ++iter ) iter->print( a_prefixForRow ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_misc.cc b/source/processes/hadronic/models/lend/src/GIDI_misc.cc new file mode 100644 index 0000000000..f2be73020d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_misc.cc @@ -0,0 +1,496 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +static std::size_t startIndexAttribute( HAPI::Node const &a_node ); + +/* *********************************************************************************************************//** + * This function searchs the list of ascending values *a_Xs* for the two values that bound *a_x* using a bi-section search. + * If *a_x* is less than the first value, -2 is returned. If *a_x* is greater than the last value, -1 is returned. + * Otherwise, the returned index will be such that *a_Xs*[index] <= *a_x* < *a_Xs*[index+1]. + * + * @param a_x [in] The value to search. + * @param a_Xs [in] The list of ascending values to + * + * @return [in] The index within the *a_Xs* list that bounds *a_x*. + ***********************************************************************************************************/ + +long binarySearchVector( double a_x, std::vector const &a_Xs ) { +/* +* Returns -2 is a_x < first point of a_Xs, -1 if > last point of a_Xs, and the lower index of a_Xs otherwise. +*/ + long size = a_Xs.size( ); + long imin = 0, imid, imax = size - 1; + + if( a_x < a_Xs[0] ) return( -2 ); + if( a_x > a_Xs[size-1] ) return( -1 ); + while( 1 ) { + imid = ( imin + imax ) >> 1; + if( imid == imin ) break; + if( a_x < a_Xs[imid] ) { + imax = imid; } + else { + imin = imid; + } + } + return( imin ); +} + +/* *********************************************************************************************************//** + * Adds the list of integers to the list of XML lines in *a_writeInfo*. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation, values per line and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_values [in] The list of integers to convert to strings and add to *a_writeInfo*. + * @param a_attributes [in] String representation of the attributes for the GNDS **values** node. + ***********************************************************************************************************/ + +void intsToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, std::vector a_values, std::string const &a_attributes ) { + + a_writeInfo.addNodeStarter( a_indent, GIDI_valuesChars, a_attributes ); + + std::string intString; + std::string sep( "" ); + + for( std::size_t i1 = 0; i1 < a_values.size( ); ++i1 ) { + intString += sep + intToString( a_values[i1] ); + if( i1 == 0 ) sep = a_writeInfo.m_sep; + } + + a_writeInfo.m_lines.back( ) += intString; + a_writeInfo.addNodeEnder( GIDI_valuesChars ); +} + +/* *********************************************************************************************************//** + * This function converts the text of a **HAPI::Node** into a list of doubles. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** node whose text is to be converted into a list of doubles. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_values [in] The list to fill with the converted values. + ***********************************************************************************************************/ + +void parseValuesOfDoubles( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + nf_Buffer &a_values) { + + parseValuesOfDoubles( a_node, a_setupInfo, a_values, a_construction.useSystem_strtod( ) ); +} + +/* *********************************************************************************************************//** + * This function converts the text of a **HAPI::Node** into a list of doubles. + * + * @param a_node [in] The **HAPI::Node** node whose text is to be converted into a list of doubles. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_values [in] The list to fill with the converted values. + * @param a_useSystem_strtod [in] Flag passed to the function nfu_stringToListOfDoubles. + ***********************************************************************************************************/ + +void parseValuesOfDoubles( HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_values, LUPI_maybeUnused int a_useSystem_strtod ) { + + std::string href = a_node.attribute_as_string( GIDI_hrefChars ); + + if( href != "" ) { + std::size_t startIndex = startIndexAttribute( a_node ); + std::size_t count = a_node.attribute_as_long( GIDI_countChars ); + if( a_setupInfo.m_protare->dataManager( ) == nullptr ) + throw Exception( "parseValuesOfDoubles: Cannot read from HDF5 file as GIDI+ was compiled without HDF5 support." ); + a_setupInfo.m_protare->dataManager( )->getDoubles( a_values, startIndex, startIndex + count ); } + else { + HAPI::Data data = a_node.data( ); + data.getDoubles( a_values ); // FIXME overload getDoubles() to take std::vector argument, avoid extra copy? + } +/* + int64_t numberConverted = p1.size( ); + a_values.resize( numberConverted ); + for( int64_t i1 = 0; i1 < numberConverted; ++i1 ) a_values[i1] = p1[i1]; +*/ +} + +/* *********************************************************************************************************//** + * This function converts the text of a **HAPI::Node** into a list of ints. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** node whose text is to be converted into a list of ints. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_values [in] The list to fill with the converted values. + ***********************************************************************************************************/ + +void parseValuesOfInts( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_values) { + + parseValuesOfInts( a_node, a_setupInfo, a_values ); +} + +/* *********************************************************************************************************//** + * This function converts the text of a **HAPI::Node** into a list of ints. + * + * @param a_node [in] The **HAPI::Node** node whoses text is to be converted into a list of ints. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_values [in] The list to fill with the converted values. + ***********************************************************************************************************/ + +void parseValuesOfInts( HAPI::Node const &a_node, SetupInfo &a_setupInfo, nf_Buffer &a_values ) { + + std::string href = a_node.attribute_as_string( GIDI_hrefChars ); + + if( href != "" ) { + std::size_t startIndex = startIndexAttribute( a_node ); + std::size_t count = a_node.attribute_as_long( GIDI_countChars ); + if( a_setupInfo.m_protare->dataManager( ) == nullptr ) + throw Exception( "parseValuesOfInts: Cannot read from HDF5 file as GIDI+ was compiled without HDF5 support." ); + a_setupInfo.m_protare->dataManager( )->getInts( a_values, startIndex, startIndex + count ); } + else { + HAPI::Data data = a_node.data( ); + data.getInts( a_values ); // FIXME overload getDoubles() to take std::vector argument, avoid extra copy? + } + +/* + int64_t numberConverted = p1.size( ); + a_values.resize( numberConverted ); + for( int64_t i1 = 0; i1 < numberConverted; ++i1 ) a_values[i1] = p1[i1]; +*/ +// a_values.swap( p1 ); +} + +/* *********************************************************************************************************//** + * Adds the list of doubles to the list of XML lines in *a_writeInfo*. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation, values per line and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_values [in] The list of doubles to convert to strings and add to *a_writeInfo*. + * @param a_start [in] The value for the *start* attribute. + * @param a_newLine [in] If *false*, the first *a_writeInfo.m_valuesPerLine* values are added to the last line with no indentation; otherwise, they are put on a new line with indentation. + * @param a_valueType [in] The value for the *valueType* attribute. + ***********************************************************************************************************/ + +void doublesToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, std::vector a_values, std::size_t a_start, bool a_newLine, std::string const &a_valueType ) { + + int valuesPerLine( a_writeInfo.m_valuesPerLine ); + std::string indent( a_indent ); + std::string attributes; + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string XMLLine; + std::string sep = ""; + + if( !a_newLine ) indent = ""; + if( a_valueType != "" ) attributes += a_writeInfo.addAttribute( GIDI_valueTypeChars, a_valueType ); + if( a_start != 0 ) attributes += a_writeInfo.addAttribute( GIDI_startChars, size_t_ToString( a_start ) ); + XMLLine = a_writeInfo.nodeStarter( indent, GIDI_valuesChars, attributes ); + + if( valuesPerLine < 1 ) valuesPerLine = 1; + int numberOfValuesInLine = 0; + for( std::size_t i1 = 0; i1 < a_values.size( ); ++i1 ) { + XMLLine += sep + LUPI::Misc::doubleToShortestString( a_values[i1] ); + sep = a_writeInfo.m_sep; + ++numberOfValuesInLine; + + if( numberOfValuesInLine == valuesPerLine ) { + if( a_newLine ) { + a_writeInfo.push_back( XMLLine ); } + else { + a_writeInfo.m_lines.back( ) += XMLLine; + } + numberOfValuesInLine = 0; + XMLLine.clear( ); + XMLLine = indent2; + a_newLine = true; + sep = ""; + } + } + if( numberOfValuesInLine > 0 ) { + if( a_newLine ) { + a_writeInfo.push_back( XMLLine ); } + else { + a_writeInfo.m_lines.back( ) += XMLLine; + } } + else if( a_values.size( ) == 0 ) { + a_writeInfo.push_back( XMLLine ); + } + + a_writeInfo.addNodeEnder( GIDI_valuesChars ); +} + +/* *********************************************************************************************************//** + * This function returns an frame enum representing a **HAPI::Node**'s attribute with name *a_name*. + * + * @param a_node [in] The **HAPI::Node** node whoses attribute named *a_node* is to be parsed to determine the frame. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_name [in] The name of the attribute to parse. + * + * @return The *frame* enum representing the node's frame. + ***********************************************************************************************************/ + +Frame parseFrame( HAPI::Node const &a_node, LUPI_maybeUnused SetupInfo &a_setupInfo, std::string const &a_name ) { + + Frame frame = Frame::lab; + if( strcmp( a_node.attribute_as_string( a_name.c_str( ) ).c_str( ), GIDI_centerOfMassChars ) == 0 ) frame = Frame::centerOfMass; + return( frame ); +} + +/* *********************************************************************************************************//** + * This function converts the y-values from the Gridded1d into a Ys1d instance. + * + * @param a_function1d [in] The Gridded1d whoses y-values are converted into a Ys1d instance. + * + * @return A Ys1d instance of the y-values. + ***********************************************************************************************************/ + +Functions::Ys1d gridded1d2GIDI_Ys1d( Functions::Function1dForm const &a_function1d ) { + + std::vector ys; + Functions::Ys1d ys1d( a_function1d.axes( ), ptwXY_interpolationFlat, 0, ys ); + + switch( a_function1d.type( ) ) { + case FormType::gridded1d : + { + Functions::Gridded1d const &gridded1d = static_cast( a_function1d ); + Vector const &data = gridded1d.data( ); + std::size_t start = 0; + + for( ; start < data.size( ); ++start ) { + if( data[start] != 0 ) break; + } + ys1d.setStart( start ); + + for( std::size_t i1 = start; i1 < data.size( ); ++i1 ) ys1d.push_back( data[i1] ); + } + break; + default : + throw Exception( "gridded1d2GIDI_Ys1d: unsupported 1d function type " + a_function1d.label( ) ); + } + + return( ys1d ); +} + +/* *********************************************************************************************************//** + * This function converts the values of a Vector into a Ys1d instance. + * + * @param a_axes [in] The Axes for the returned Ys1d instance. + * @param a_vector [in] The Vector whoses values are converted into a Ys1d instance. + * + * @return A Ys1d instance of the values. + ***********************************************************************************************************/ + +Functions::Ys1d vector2GIDI_Ys1d( Axes const &a_axes, Vector const &a_vector ) { + + std::size_t start = 0; + for( ; start < a_vector.size( ); ++start ) { + if( a_vector[start] != 0 ) break; + } + + std::vector ys; + Functions::Ys1d ys1d( a_axes, ptwXY_interpolationLinLin, start, ys ); + + for( std::size_t i1 = start; i1 < a_vector.size( ); ++i1 ) ys1d.push_back( a_vector[i1] ); + + return( ys1d ); +} + +/* *********************************************************************************************************//** + * This function converts an integer gid value (i.e., group id) into the LLNL legacy bdfls label. + * + * @param a_gid [in] The integer gid used to construct the LLNL legacy bdfls label. + * + * @return The LLNL legacy bdfls label. + ***********************************************************************************************************/ + +std::string LLNL_gidToLabel( int a_gid ) { + + return( LUPI::Misc::argumentsToString( "LLNL_gid_%d", a_gid ) ); +} + +/* *********************************************************************************************************//** + * This function converts an integer fid value (i.e., flux id) into the LLNL legacy bdfls label. + * + * @param a_fid [in] The integer fid used to construct the LLNL legacy bdfls label. + * + * @return The LLNL legacy bdfls label. + ***********************************************************************************************************/ + +std::string LLNL_fidToLabel( int a_fid ) { + + return( LUPI::Misc::argumentsToString( "LLNL_fid_%d", a_fid ) ); +} + +/* *********************************************************************************************************//** + * This function returns an instance of *std::vector* with only a_string as an item. + * + * @param a_string [in] The string to add to the returned *std::vector* instance. + * + * @return A *std::vector* instance. + ***********************************************************************************************************/ + +std::vector vectorOfStrings( std::string const &a_string ) { + std::vector vectorOfStrings1; + + vectorOfStrings1.push_back( a_string ); + return( vectorOfStrings1 ); +} + +/* *********************************************************************************************************//** + * This function returns a sorted instance of the strings in *a_strings*. + * + * @param a_strings [in] The string to add to the returned *std::vector* instance. + * @param a_orderIsAscending [in] If *true* the strings are sorted in ascending order; otherwise, descending order. + * + * @return A *std::vector* instance. + ***********************************************************************************************************/ + +std::vector sortedListOfStrings( std::vector const &a_strings, bool a_orderIsAscending ) { + + std::vector keys( a_strings ); + + std::sort( keys.begin( ), keys.end( ) ); + + if( a_orderIsAscending ) return( keys ); + + std::vector keys2; + + for( std::vector::reverse_iterator iter = keys.rbegin( ); iter != keys.rend( ); ++iter ) keys2.push_back( *iter ); + return( keys2 ); +} + +/* *********************************************************************************************************//** + * This function returns a std::string representation of a *frame*. + * + * @param a_frame [in] The frame to convert to a string. + * + * @return A *std::string* instance. + ***********************************************************************************************************/ + +std::string frameToString( Frame a_frame ) { + + if( a_frame == Frame::lab ) return( GIDI_labChars ); + return( GIDI_centerOfMassChars ); +} + +/* *********************************************************************************************************//** + * Create the XML list for xs, pdf or cdf for an Xs_pdf_cdf1d instance. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_nodeName [in] The name of the node (e.g., "xs" ); + * @param a_values [in] The list of doubles to wrap. + * + * @return A *std::string* instance. + ***********************************************************************************************************/ + +std::string nodeWithValuesToDoubles( GUPI::WriteInfo &a_writeInfo, std::string const &a_nodeName, std::vector const &a_values ) { + + std::string xml = a_writeInfo.nodeStarter( "", a_nodeName ); + std::string sep( "" ); + + xml += a_writeInfo.nodeStarter( "", GIDI_valuesChars ); + for( std::size_t i1 = 0; i1 < a_values.size( ); ++i1 ) { + xml += sep + LUPI::Misc::doubleToShortestString( a_values[i1] ); + if( i1 == 0 ) sep = " "; + } + xml += a_writeInfo.nodeEnder( GIDI_valuesChars ); + xml += a_writeInfo.nodeEnder( a_nodeName ); + + return( xml ); +} + +/* *********************************************************************************************************//** + * Returns a string representation of int *a_value*. + * + * @param a_value [in] The int value to convert to a string. + * + * @return A *std::string* instance. + ***********************************************************************************************************/ + +std::string intToString( int a_value ) { + + return( LUPI::Misc::argumentsToString( "%d", a_value ) ); +} + +/* *********************************************************************************************************//** + * Returns a string representation of std::size_t *a_value*. + * + * @param a_value [in] The std::size value to convert to a string. + * + * @return A *std::string* instance. + ***********************************************************************************************************/ + +std::string size_t_ToString( std::size_t a_value ) { + + return( LUPI::Misc::argumentsToString( "%zu", a_value ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_moniker [in] The moniker for the energy type. + * @param a_indent [in] The amount to indent *this* node. + * @param a_function [in] The energy function whose information is converted to XML. + ***********************************************************************************************************/ + +void energy2dToXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_moniker, std::string const &a_indent, Functions::Function1dForm *a_function ) { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + if( a_function == nullptr ) return; + + a_writeInfo.addNodeStarter( a_indent, a_moniker, "" ); + a_function->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( a_moniker ); +} + +/* *********************************************************************************************************//** + * Returns a new **ExcludeReactionsSet** with + * + * @param a_protare [in] The **Protare** instance used to determine the number of reactions to adjust the new indices by. + * + * @return returns the startIndex attribute of *a_node*. + ***********************************************************************************************************/ + +void excludeReactionsSetAdjust( ExcludeReactionsSet a_excludeReactionsSet, Protare const &a_protare ) { + + ExcludeReactionsSet excludeReactionsSet; + + for( auto iter = a_excludeReactionsSet.begin( ); iter != a_excludeReactionsSet.end( ); ++iter ) { + int index = (*iter) - a_protare.numberOfReactions( ); + if( index > -1 ) excludeReactionsSet.insert( index ); + } + + a_excludeReactionsSet = excludeReactionsSet; +} + +/* *********************************************************************************************************//** + * For internal use only. + * + * @param a_node [in] The **HAPI::Node** node whose text is to be converted into a list of doubles. + * + * @return returns the startIndex attribute of *a_node*. + ***********************************************************************************************************/ + +static std::size_t startIndexAttribute( HAPI::Node const &a_node ) { + + std::size_t startIndex = 0; + + std::string attribute = a_node.attribute_as_string( GIDI_startIndexChars ); + if( attribute != "" ) { + startIndex = a_node.attribute_as_long( GIDI_startIndexChars ); } + else { + attribute = a_node.attribute_as_string( GIDI_offsetChars ); + if( attribute != "" ) startIndex = a_node.attribute_as_long( GIDI_offsetChars ); + } + + return( startIndex ); +} + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_misc1d.cc b/source/processes/hadronic/models/lend/src/GIDI_misc1d.cc new file mode 100644 index 0000000000..72d77c4e8a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_misc1d.cc @@ -0,0 +1,79 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +namespace Functions { + +/*! \class ThermalNeutronScatteringLaw1d + * Class for the GNDS <**thermalNeutronScatteringLaw**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ThermalNeutronScatteringLaw1d::ThermalNeutronScatteringLaw1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::thermalNeutronScatteringLaw1d, a_parent ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ThermalNeutronScatteringLaw1d::~ThermalNeutronScatteringLaw1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double ThermalNeutronScatteringLaw1d::domainMin( ) const { + + return( 0.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double ThermalNeutronScatteringLaw1d::domainMax( ) const { + + return( 1.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the value of the function *f(x1)* at the specified point and *a_x1*. + * **This is currently not implemented**. + * + * @param a_x1 [in] The value of the **x1** axis. + * @return The value of the function evaluated at *a_x1*. + ***********************************************************************************************************/ + +double ThermalNeutronScatteringLaw1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "ThermalNeutronScatteringLaw1d::evaluate: not implemented" ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_outputChannel.cc b/source/processes/hadronic/models/lend/src/GIDI_outputChannel.cc new file mode 100644 index 0000000000..b50363f6ab --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_outputChannel.cc @@ -0,0 +1,570 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class OutputChannel + * This class represents a **GNDS** outputChannel. +*/ + +OutputChannel::OutputChannel( bool a_twoBody, bool a_fissions, std::string a_process ) : + GUPI::Ancestry( GIDI_outputChannelChars ), + m_twoBody( a_twoBody ), + m_fissions( a_fissions ), + m_process( a_process ), + m_Q( GIDI_QChars, GIDI_labelChars ), + m_products( GIDI_productsChars, GIDI_labelChars ), + m_fissionFragmentData( ), + m_fissionResiduals( Construction::FissionResiduals::none ) { + + m_Q.setAncestor( this ); + m_products.setAncestor( this ); + m_fissionFragmentData.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Constructed from data in a <**outputChannel**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The reaction HAPI::Node to be parsed and used to construct the reaction. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + * @param a_isFission [in] Boolean indicating if output channel is a fission channel (true) or not (false). + ***********************************************************************************************************/ + +OutputChannel::OutputChannel( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, Styles::Suite const *a_styles, bool a_isFission, LUPI_maybeUnused bool a_addFissionResiduals ) : + GUPI::Ancestry( a_node.name( ) ), + m_twoBody( std::string( a_node.attribute_as_string( GIDI_genreChars ) ) == GIDI_twoBodyChars ), + m_fissions( a_isFission ), + m_process( std::string( a_node.attribute_as_string( GIDI_processChars ) ) ), + m_Q( a_construction, GIDI_QChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseQSuite, a_styles ), + m_products( a_construction, GIDI_productsChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseProductSuite, a_styles ), + m_fissionFragmentData( a_construction, a_node.child( GIDI_fissionFragmentDataChars ), a_setupInfo, a_pops, a_internalPoPs, a_styles ), + m_fissionResiduals( Construction::FissionResiduals::none ) { + + if( a_isFission ) m_fissionResiduals = a_construction.fissionResiduals( ); + + m_Q.setAncestor( this ); + m_products.setAncestor( this ); + m_fissionFragmentData.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +OutputChannel::~OutputChannel( ) { + +} + +/* *********************************************************************************************************//** + * Returns the maximum product depth for this output channel. + * + * @return The maximum product depth. + ***********************************************************************************************************/ + +int OutputChannel::depth( ) const { + + int _depth = 0; + std::size_t size = m_products.size( ); + + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + + int productDepth = product.depth( ); + if( productDepth > _depth ) _depth = productDepth; + } + return( _depth + 1 ); +} + +/* *********************************************************************************************************//** + * Returns **true** if all outgoing particles (i.e., products) are specifed in *a_particles*. That is, the user + * will be tracking all products of *this* reaction. + * + * @param a_particles [in] The list of particles to be transported. + * + * @return bool. + ***********************************************************************************************************/ + +bool OutputChannel::areAllProductsTracked( Transporting::Particles const &a_particles ) const { +// Does not check m_fissionFragmentData as its will only have neutrons which should already be in m_products at least for now. + + if( isFission( ) ) return( false ); + + for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) { + Product *product = static_cast( *iter ); + + if( !product->areAllProductsTracked( a_particles ) ) return( false ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by a ProtareTNSL instance to zero the lower energy multi-group data covered by the TNSL ProtareSingle. + * + * @param a_maximumTNSL_MultiGroupIndex [in] A map that contains labels for heated multi-group data and the last valid group boundary + * for the TNSL data for that boundary. + ***********************************************************************************************************/ + +void OutputChannel::modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ) { + + // No need to fix m_Q as it is all 0.0's for elastic scattering. + for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) { + Product *product = static_cast( *iter ); + + product->modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + } +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *OutputChannel::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_QChars ) return( &m_Q ); + if( a_item == GIDI_productsChars ) return( &m_products ); + if( a_item == GIDI_fissionFragmentDataChars ) return( &m_fissionFragmentData ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *OutputChannel::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_QChars ) return( &m_Q ); + if( a_item == GIDI_productsChars ) return( &m_products ); + if( a_item == GIDI_fissionFragmentDataChars ) return( &m_fissionFragmentData ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns true if the product has an output channel and its output channel hasFission returns true, and false otherwise. + * + * @return true if at least one output channel is a fission channel. + ***********************************************************************************************************/ + +bool OutputChannel::hasFission( ) const { + + if( m_fissions ) return( true ); + + std::size_t size = m_products.size( ); + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + + if( product.hasFission( ) ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns **false* if outputChannel has delayed fission neutrons and they are not complete; otherwise, returns **true**. + * + * @return bool + ***********************************************************************************************************/ + +bool OutputChannel::isDelayedFissionNeutronComplete( ) const { + + if( !m_fissionFragmentData.isDelayedFissionNeutronComplete( ) ) return( false ); + + std::size_t size = m_products.size( ); + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + + if( !product.isDelayedFissionNeutronComplete( false ) ) return( false ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Insert a std::set with the products id and any product in in its output channel. + * If a_transportablesOnly is true, only transportable product indices are return. + * + * @param a_indices [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void OutputChannel::productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + std::size_t size = m_products.size( ); + + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + + product.productIDs( a_indices, a_particles, a_transportablesOnly ); + } + + m_fissionFragmentData.productIDs( a_indices, a_particles, a_transportablesOnly ); + + if( !a_transportablesOnly && isFission( ) ) { + if( m_fissionResiduals == Construction::FissionResiduals::ENDL99120 ) { + a_indices.insert( PoPI::IDs::FissionProductENDL99120 ); } + else if( m_fissionResiduals == Construction::FissionResiduals::ENDL99125 ) { + a_indices.insert( PoPI::IDs::FissionProductENDL99125 ); + } + } +} + +/* *********************************************************************************************************//** + * Returns the product multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer for particle with id *a_productID*. + * + * @param a_productID; [in] The id of the requested particle. + * + * @return The multiplicity for the requested particle. + ***********************************************************************************************************/ + +int OutputChannel::productMultiplicity( std::string const &a_productID ) const { + + int total_multiplicity = 0; + std::size_t size = m_products.size( ); + + if( isFission( ) ) { + if( ( a_productID == PoPI::IDs::FissionProductENDL99120 ) && ( m_fissionResiduals == Construction::FissionResiduals::ENDL99120 ) ) { + return( 2 ); } + else if( ( a_productID == PoPI::IDs::FissionProductENDL99125 ) && ( m_fissionResiduals == Construction::FissionResiduals::ENDL99125 ) ) { + return( 2 ); + } + } + + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + int multiplicity = product.productMultiplicity( a_productID ); + + if( multiplicity < 0 ) return( -1 ); + total_multiplicity += multiplicity; + } + + int multiplicity = m_fissionFragmentData.productMultiplicity( a_productID ); + if( multiplicity < 0 ) return( -1 ); + + return( total_multiplicity + multiplicity ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for the specified products of this output channel. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int OutputChannel::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + std::size_t size = m_products.size( ); + int _maximumLegendreOrder = -1; + + for( std::size_t index = 0; index < size; ++index ) { + Product const &product = *m_products.get( index ); + int r_maximumLegendreOrder = product.maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + + if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder; + } + + int r_maximumLegendreOrder = m_fissionFragmentData.maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder; + + return( _maximumLegendreOrder ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group multiplicity for the requested label for the request product of this output channel. + * This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector OutputChannel::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + vector += product.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + vector += m_fissionFragmentData.multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, Q for the requested label for the this output channel. This is a cross section weighted Q. + * If a_final is false, only the Q for the output channels directly under each reaction is summed. Otherwise, the Q for all output channels + * summed, including output channels for each products. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If true, the Q is calculated for all output channels, including those for products. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector OutputChannel::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final ) const { + + Vector vector( 0 ); + + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( a_smr, m_Q, a_temperatureInfo, "Q-value" ) ); + + if( form != nullptr ) vector += form->data( ); + + if( a_final ) { + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product1 = *m_products.get( index ); + + vector += product1.multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + } + } + + vector += m_fissionFragmentData.multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, product matrix for the requested label for the requested product index for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] Particle id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix OutputChannel::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const { + + Matrix matrix( 0, 0 ); + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + matrix += product.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + + matrix += m_fissionFragmentData.multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average energy for the requested label for the requested product. This is a cross section weighted average energy. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector OutputChannel::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + vector += product.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + vector += m_fissionFragmentData.multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average momentum for the requested label for the requested product. This is a cross section weighted average momentum. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector OutputChannel::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + vector += product.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + vector += m_fissionFragmentData.multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Loops over the instances in **m_products** calling their **incompleteParticles** methods and calls the :**incompleteParticles** method + * for the **m_fissionFragmentData** member. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void OutputChannel::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + product.incompleteParticles( a_settings, a_incompleteParticles ); + } + + m_fissionFragmentData.incompleteParticles( a_settings, a_incompleteParticles ); +} + +/* *********************************************************************************************************//** + * Returns, via arguments, the average energy and momentum, and gain for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_particleID [in] The particle id of the product. + * @param a_energy [in] The energy of the projectile. + * @param a_productEnergy [in] The average energy of the product. + * @param a_productMomentum [in] The average momentum of the product. + * @param a_productGain [in] The gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void OutputChannel::continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const { + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + product.continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, a_ignoreIncompleteParticles ); + } + + m_fissionFragmentData.continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, + a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * Modifies the average product energies, momenta and gains for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies user options. + * @param a_particleID [in] The particle id of the product. + * @param a_energies [in] The vector of energies to map the data to. + * @param a_offset [in] The index of the first energy whose data are to be added to the vectors. + * @param a_productEnergies [out] The vector of average energies of the product. + * @param a_productMomenta [out] The vector of average momenta of the product. + * @param a_productGains [out] The vector of gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void OutputChannel::mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const { + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product const &product = *m_products.get( index ); + + product.mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta, + a_productGains, a_ignoreIncompleteParticles ); + } + + m_fissionFragmentData.mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta, + a_productGains, a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * This methods calculates multi-group data for all needed components and adds each component's multi-group with label *a_heatedMultiGroupLabel*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_crossSectionXYs1d [in[ The cross section weight. + ***********************************************************************************************************/ + +void OutputChannel::calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ) { + + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_Q, a_crossSectionXYs1d ); + + for( std::size_t index = 0; index < m_products.size( ); ++index ) { + Product &product = *m_products.get( index ); + + product.calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d ); + } + + m_fissionFragmentData.calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void OutputChannel::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( m_twoBody ) { + attributes = a_writeInfo.addAttribute( GIDI_genreChars, GIDI_twoBodyChars ); } + else { + attributes = a_writeInfo.addAttribute( GIDI_genreChars, GIDI_NBodyChars ); + } + + if( m_process != "" ) attributes += a_writeInfo.addAttribute( GIDI_processChars, m_process ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_Q.toXMLList( a_writeInfo, indent2 ); + m_products.toXMLList( a_writeInfo, indent2 ); + m_fissionFragmentData.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_parseSuites.cc b/source/processes/hadronic/models/lend/src/GIDI_parseSuites.cc new file mode 100644 index 0000000000..10489328a0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_parseSuites.cc @@ -0,0 +1,1000 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/* *********************************************************************************************************//** + * Function that parses a <**style**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseExternalFilesSuite( LUPI_maybeUnused Construction::Settings const &a_construction, GIDI::Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_externalFileChars ) { + form = new ExternalFile( a_node, a_setupInfo, a_parent ); } + else { + std::cout << "parseExternalFilesSuite: Ignoring unsupported externalFile = '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**style**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseStylesSuite( Construction::Settings const &a_construction, GIDI::Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + +// Styles not parsed are angularDistributionReconstructed. + + if( a_name == GIDI_evaluatedStyleChars ) { + form = new Styles::Evaluated( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_crossSectionReconstructedStyleChars ) { + form = new Styles::CrossSectionReconstructed( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_CoulombPlusNuclearElasticMuCutoffStyleChars ) { + form = new Styles::CoulombPlusNuclearElasticMuCutoff( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_realizationChars ) { + form = new Styles::Realization( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_averageProductDataStyleChars ) { + form = new Styles::AverageProductData( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_MonteCarlo_cdfStyleChars ) { + form = new Styles::MonteCarlo_cdf( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_multiGroupStyleChars ) { + form = new Styles::MultiGroup( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); + if( a_setupInfo.m_multiGroup == nullptr ) { + a_setupInfo.m_multiGroup = static_cast( form ); } + else { + std::cout << "Multiple multiGroup style instances found which is not supported. Ignoring all but first instance." << std::endl; + } } + else if( a_name == GIDI_heatedStyleChars ) { + form = new Styles::Heated( a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_heatedMultiGroupStyleChars ) { + form = new Styles::HeatedMultiGroup( a_construction, a_node, a_setupInfo, a_pops, a_parent ); } + else if( a_name == GIDI_SnElasticUpScatterStyleChars ) { + form = new Styles::SnElasticUpScatter( a_node, a_setupInfo, a_pops, a_parent ); } + else if( a_name == GIDI_griddedCrossSectionStyleChars ) { + form = new Styles::GriddedCrossSection( a_construction, a_node, a_setupInfo, a_pops, a_parent ); } + else if( a_name == GIDI_URR_probabilityTablesStyleChars ) { + form = new Styles::URR_probabilityTables( a_construction, a_node, a_setupInfo, a_pops, a_parent ); } + else { + std::cout << "parseStylesSuite: Ignoring unsupported style = '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**transportable**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseTransportablesSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_transportableChars ) { + form = new Transportable( a_construction, a_node, a_setupInfo, a_pops, a_parent ); } + else { + std::cout << "parseTransportablesSuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**reaction**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Reaction instance. + ***********************************************************************************************************/ + +Form *parseReaction( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ) { + + return( parseReactionType( GIDI_reactionChars, a_construction, a_parent, a_node, a_setupInfo, a_pops, a_internalPoPs, a_name, a_styles ) ); +} + +/* *********************************************************************************************************//** + * Function that parses an <**orphanProduct**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Reaction instance. + ***********************************************************************************************************/ + +Form *parseOrphanProduct( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ) { + + return( parseReactionType( GIDI_orphanProductChars, a_construction, a_parent, a_node, a_setupInfo, a_pops, a_internalPoPs, a_name, a_styles ) ); +} + +/* *********************************************************************************************************//** + * Function that parses an <**orphanProduct**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Reaction instance. + ***********************************************************************************************************/ + +Form *parseFissionComponent( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ) { + + return( parseReactionType( GIDI_fissionComponentChars, a_construction, a_parent, a_node, a_setupInfo, a_pops, a_internalPoPs, a_name, a_styles ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**reaction**> or an <**orphanProduct**> node. Called from a Suite::parse instance. + * + * @param a_moniker [in] The moniker for the form to parse. + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Reaction instance. + ***********************************************************************************************************/ + +Form *parseReactionType( std::string const &a_moniker, Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == a_moniker ) { + Protare const &protare( *dynamic_cast( a_parent->root( ) ) ); + form = new Reaction( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, protare, a_styles ); } + else { // This should never happend. + std::cout << "parseReactionType: Ignoring '" << a_moniker << "' unsupported form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**crossSectionSum**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::CrossSectionSum instance. + ***********************************************************************************************************/ + +Form *parseSumsCrossSectionsSuite( Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_crossSectionSumChars ) { + form = new Sums::CrossSectionSum( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs ); } + else { // This should never happend. + std::cout << "parseSumsCrossSectionsSuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a <**multiplicitySum**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::MultiplicitySum instance. + ***********************************************************************************************************/ + +Form *parseSumsMultiplicitiesSuite( Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + + if( a_name == GIDI_multiplicitySumChars ) { + form = new Sums::MultiplicitySum( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs ); } + else { // This should never happend. + std::cout << "parseSumsMultiplicitiesSuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**doubleDifferentialCrossSection**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseDoubleDifferentialCrossSectionSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) return( nullptr ); + + Form *form = nullptr; + + if( a_name == GIDI_coherentPhotonScatteringChars ) { + form = new DoubleDifferentialCrossSection::CoherentPhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_incoherentPhotonScatteringChars ) { + form = new DoubleDifferentialCrossSection::IncoherentPhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_incoherentBoundToFreePhotonScatteringChars ) { + form = new DoubleDifferentialCrossSection::IncoherentBoundToFreePhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_TNSL_coherentElasticChars ) { + form = new DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::CoherentElastic( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_TNSL_incoherentElasticChars ) { + form = new DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::IncoherentElastic( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_TNSL_incoherentInelasticChars ) { + form = new DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::IncoherentInelastic( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent ); } + else if( a_name == GIDI_CoulombPlusNuclearElasticChars ) { + } + else { + std::cout << "parseDoubleDifferentialCrossSectionSuite: Ignoring unsupported Form '" << a_name << "'." << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**doubleDifferentialCrossSection**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseScatteringAtom( Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, LUPI_maybeUnused std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + return( new DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::ScatteringAtom( a_construction, a_node, a_setupInfo ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**crossSection**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseCrossSectionSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( ( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) && ( a_name != GIDI_gridded1dChars ) ) return( nullptr ); + if( ( a_construction.parseMode( ) == Construction::ParseMode::MonteCarloContinuousEnergy ) && ( a_name != GIDI_Ys1dChars ) ) return( nullptr ); + +// Form not parsed is CoulombPlusNuclearElastic. + Form *form = nullptr; + + if( a_name == GIDI_resonancesWithBackgroundChars ) { + return( new Functions::ResonancesWithBackground1d( a_construction, a_node, a_setupInfo, a_parent ) ); } + else if( a_name == GIDI_TNSL1dChars ) { + form = new Functions::ThermalNeutronScatteringLaw1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_URR_probabilityTables1dChars ) { + form = new Functions::URR_probabilityTables1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_CoulombPlusNuclearElasticChars ) { + } + else { + form = data1dParse( a_construction, a_node, a_setupInfo, a_parent ); + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**DelayedNeutrons**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseDelayedNeutronsSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ) { + + if( a_name != GIDI_delayedNeutronChars ) throw Exception( std::string( "Invalid " ) + GIDI_delayedNeutronsChars + " child node of moniker " + a_name ); + return( new DelayedNeutron( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent, a_styles ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**FissionEnergyReleases**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseFissionEnergyReleasesSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_name != GIDI_fissionEnergyReleaseChars ) throw Exception( std::string( "Invalid " ) + GIDI_fissionEnergyReleasesChars " child node of moniker " + a_name ); + return( new Functions::FissionEnergyRelease( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under the <**rate**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parsePhysicalQuantitySuite( LUPI_maybeUnused Construction::Settings const &a_construction, LUPI_maybeUnused Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, LUPI_maybeUnused std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + return( new PhysicalQuantity( a_node, a_setupInfo ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under an <**availableEnergy**> or <**availableMomentum**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseAvailableSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( ( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) && ( a_name != GIDI_gridded1dChars ) ) return( nullptr ); + + return( data1dParse( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under a <**Q**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseQSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, LUPI_maybeUnused std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + + form = data1dParse( a_construction, a_node, a_setupInfo, a_parent ); + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under a <**products**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Product instance. + ***********************************************************************************************************/ + +Form *parseProductSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, Styles::Suite const *a_styles ) { + + Form *form = nullptr; + + if( a_name == GIDI_productChars ) { + form = new Product( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parent, a_styles ); } + else { + std::cout << "parseProductSuite: Ignoring unsupported element in products " << a_node.name( ) << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under a <**multiplicity**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseMultiplicitySuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + + if( a_name == GIDI_branching1dChars ) return( new Functions::Branching1d( a_construction, a_node, a_setupInfo, a_parent ) ); + + return( data1dParse( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under a <**distribution**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Form or nullptr if the node is not supported. + ***********************************************************************************************************/ + +Form *parseDistributionSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( a_name == GIDI_multiGroup3dChars ) { + if( ( a_construction.parseMode( ) == Construction::ParseMode::MonteCarloContinuousEnergy ) || + ( a_construction.parseMode( ) == Construction::ParseMode::excludeProductMatrices ) ) return( nullptr ); } + else { + if( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) return( nullptr ); + } + +// Distributions not parsed are GIDI_LLNLLegendreChars. + Form *form = nullptr; + + if( a_name == GIDI_multiGroup3dChars ) { + form = new Distributions::MultiGroup3d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_angularTwoBodyChars ) { + form = new Distributions::AngularTwoBody( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_uncorrelatedChars ) { + form = new Distributions::Uncorrelated( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_KalbachMannChars ) { + form = new Distributions::KalbachMann( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_energyAngularChars ) { + form = new Distributions::EnergyAngular( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_energyAngularMCChars ) { + form = new Distributions::EnergyAngularMC( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_angularEnergyChars ) { + form = new Distributions::AngularEnergy( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_angularEnergyMCChars ) { + form = new Distributions::AngularEnergyMC( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_LLNLAngularEnergyChars ) { + form = new Distributions::LLNLAngularEnergy( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_coherentPhotonScatteringChars ) { + form = new Distributions::CoherentPhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_incoherentPhotonScatteringChars ) { + form = new Distributions::IncoherentPhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_incoherentBoundToFreePhotonScatteringChars ) { + form = new Distributions::IncoherentBoundToFreePhotoAtomicScattering( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_thermalNeutronScatteringLawChars ) { + form = new Distributions::ThermalNeutronScatteringLaw( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_branching3dChars ) { + form = new Distributions::Branching3d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_referenceChars ) { + form = new Distributions::Reference3d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_unspecifiedChars ) { + form = new Distributions::Unspecified( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_CoulombPlusNuclearElasticChars ) { + form = new Distributions::CoulombPlusNuclearElastic( a_construction, a_node, a_setupInfo, a_parent ); } + else if( a_name == GIDI_LLNLLegendreChars ) { + form = new Distributions::LLNLLegendre( a_construction, a_node, a_setupInfo, a_parent ); } + else { + std::cout << "parseDistributionSuite: Ignoring unsupported distribution " << a_node.name( ) << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under an <**averageEnergy**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseAverageEnergySuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( ( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) && ( a_name != GIDI_gridded1dChars ) ) return( nullptr ); + + return( data1dParse( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node under an <**averageMomentum**> node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseAverageMomentumSuite( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_construction.parseMode( ) == Construction::ParseMode::outline ) return( nullptr ); + if( ( a_construction.parseMode( ) == Construction::ParseMode::multiGroupOnly ) && ( a_name != GIDI_gridded1dChars ) ) return( nullptr ); + + return( data1dParse( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * This function parses a **probabilityTable** child node of a **probabilityTables** node. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseACE_URR_probabilityTables( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_name != GIDI_ACE_URR_probabilityTableChars ) throw Exception( std::string( "Invalid " ) + GIDI_ACE_URR_probabilityTablesChars " child node of moniker " + a_name ); + + return( new ACE_URR::ProbabilityTable( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * This function parses a **column** child node of a **columnHeaders** node. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Form *parseColumnHeaders( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + LUPI_maybeUnused PoPI::Database const &a_pops, LUPI_maybeUnused PoPI::Database const &a_internalPoPs, std::string const &a_name, LUPI_maybeUnused Styles::Suite const *a_styles ) { + + if( a_name != GIDI_columnChars ) throw Exception( std::string( "Invalid " ) + GIDI_columnHeadersChars + " child node of moniker " + a_name ); + + Table::Column *column = new Table::Column( a_construction, a_node, a_setupInfo, a_parent ); + column->setKeyName( GIDI_indexChars ); + + return column; +} + +/* *********************************************************************************************************//** + * Function that parses a node one-d function node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Functions::Function1dForm *data1dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) { + + Functions::Function1dForm *form = nullptr; + std::string name( a_node.name( ) ); + + if( name == GIDI_constant1dChars ) { + form = new Functions::Constant1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_XYs1dChars ) { + form = new Functions::XYs1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_Ys1dChars ) { + form = new Functions::Ys1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_polynomial1dChars ) { + form = new Functions::Polynomial1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_LegendreChars ) { + form = new Functions::Legendre1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_regions1dChars ) { + form = new Functions::Regions1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_gridded1dChars ) { + form = new Functions::Gridded1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_referenceChars ) { + form = new Functions::Reference1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_xs_pdf_cdf1dChars ) { + form = new Functions::Xs_pdf_cdf1d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_unspecifiedChars ) { + form = new Functions::Unspecified1d( a_construction, a_node, a_setupInfo, a_parent ); } + else { + std::cout << "data1dParse: Ignoring unsupported 1d function = '" << name << "'" << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses a node one-d function node. Called from a Suite::parse instance. If no node exists, returns nullptr. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * + * @return The parsed and constructed GIDI::Function1d instance. + ***********************************************************************************************************/ + +Functions::Function1dForm *data1dParseAllowEmpty( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + Suite *a_parent ) { + + std::string name( a_node.name( ) ); + + if( name == "" ) return( nullptr ); + return( data1dParse( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +/* *********************************************************************************************************//** + * Function that parses the list of 1d function nodes contained in *a_node*. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_function1ds [in] The object to fill with the list of parsed 1d functions. + ***********************************************************************************************************/ + +void data1dListParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + std::vector &a_function1ds ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + Functions::Function1dForm *form = data1dParse( a_construction, child, a_setupInfo, nullptr ); + + if( form == nullptr ) throw Exception( "data1dListParse data1dParse returned nullptr." ); + a_function1ds.push_back( form ); + } +} + +/* *********************************************************************************************************//** + * Function that parses a node two-d function node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @return The parsed and constructed GIDI::Function2d instance. + ***********************************************************************************************************/ + +Functions::Function2dForm *data2dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) { + + Functions::Function2dForm *form = nullptr; + std::string name( a_node.name( ) ); + + if( name == GIDI_XYs2dChars ) { + form = new Functions::XYs2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_recoilChars ) { + form = new Functions::Recoil2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_isotropic2dChars ) { + form = new Functions::Isotropic2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_discreteGammaChars ) { + form = new Functions::DiscreteGamma2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_primaryGammaChars ) { + form = new Functions::PrimaryGamma2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_generalEvaporationChars ) { + form = new Functions::GeneralEvaporation2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_simpleMaxwellianFissionChars ) { + form = new Functions::SimpleMaxwellianFission2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_evaporationChars ) { + form = new Functions::Evaporation2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_WattChars ) { + form = new Functions::Watt2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_MadlandNixChars ) { + form = new Functions::MadlandNix2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_weightedFunctionalsChars ) { + form = new Functions::WeightedFunctionals2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_NBodyPhaseSpaceChars ) { + form = new Functions::NBodyPhaseSpace2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_regions2dChars ) { + form = new Functions::Regions2d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_gridded2dChars ) { + form = new Functions::Gridded2d( a_construction, a_node, a_setupInfo, a_parent ); } + else { + std::cout << "data2dParse: Ignoring unsupported 2d function = '" << name << "'" << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that parses the list of 2d function nodes contained in *a_node*. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_function2ds [in] The object to fill with the list of parsed 2d functions. + ***********************************************************************************************************/ + +void data2dListParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + std::vector &a_function2ds ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + Functions::Function2dForm *form = data2dParse( a_construction, child, a_setupInfo, nullptr ); + + if( form == nullptr ) throw Exception( "data2dListParse data2dParse returned nullptr." ); + a_function2ds.push_back( form ); + } +} + +/* *********************************************************************************************************//** + * Function that parses a node three-d function node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * + * @return The parsed and constructed GIDI::Function3d instance. + ***********************************************************************************************************/ + +Functions::Function3dForm *data3dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) { + + Functions::Function3dForm *form = nullptr; + std::string name( a_node.name( ) ); + + if( name == GIDI_XYs3dChars ) { + form = new Functions::XYs3d( a_construction, a_node, a_setupInfo, a_parent ); } + else if( name == GIDI_gridded3dChars ) { + form = new Functions::Gridded3d( a_construction, a_node, a_setupInfo ); } + else { + std::cout << "data3dParse: Ignoring unsupported 3d function = '" << name << "'" << std::endl; + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Function that checks that the outerDomainValue values of the elements of *a_functions* are increasing and fills *a_Xs* with the outerDomainValue values. + * + * @param a_functions [in] List of functions to check. + * @param a_Xs [in] A list of doubles that is filled with the outerDomainValues from the list of functions in *a_functions*. + ***********************************************************************************************************/ + +void checkOuterDomainValues1d( std::vector &a_functions, std::vector &a_Xs ) { + + for( auto iter = a_functions.begin( ); iter != a_functions.end( ); ++iter ) { + if( a_Xs.size( ) > 0 ) { + if( (*iter)->outerDomainValue( ) <= a_Xs.back( ) ) throw Exception( "checkOuterDomainValues1d: next outerDomainValue <= current outerDomainValue." ); + } + a_Xs.push_back( (*iter)->outerDomainValue( ) ); + } +} + +/* *********************************************************************************************************//** + * Function that checks that the outerDomainValue values of the elements of *a_functions* are increasing and fills *a_Xs* with the outerDomainValue values. + * + * @param a_functions [in] List of functions to check. + * @param a_Xs [in] A list of doubles that is filled with the outerDomainValues from the list of functions in *a_functions*. + ***********************************************************************************************************/ + +void checkOuterDomainValues2d( std::vector &a_functions, std::vector &a_Xs ) { + + for( auto iter = a_functions.begin( ); iter != a_functions.end( ); ++iter ) { + if( a_Xs.size( ) > 0 ) { + if( (*iter)->outerDomainValue( ) <= a_Xs.back( ) ) throw Exception( "checkOuterDomainValues2d: next outerDomainValue <= current outerDomainValue." ); + } + a_Xs.push_back( (*iter)->outerDomainValue( ) ); + } +} + +/* *********************************************************************************************************//** + * Function that checks that the domain overlap of the elements of *a_functions* are . + * The domain minimum values from each function and the domain maximum value are filled into *a_Xs*. + * + * @param a_functions [in] The list of functions whose domain limits are checked. + * @param a_Xs [in] A std::vector that is with the domain minimum values from each function and the domain maximum value. + ***********************************************************************************************************/ + +void checkSequentialDomainLimits1d( std::vector &a_functions, std::vector &a_Xs ) { + + double domainMax = -1; + + for( auto iter = a_functions.begin( ); iter != a_functions.end( ); ++iter ) { + double domainMin = (*iter)->domainMin( ); + + if( a_Xs.size( ) > 0 ) { + if( fabs( domainMax - domainMin ) > 1e-8 * ( fabs( domainMin ) + fabs( domainMax ) ) ) + throw Exception( "checkSequentialDomainLimits1d: domains not abutting." ); + } + a_Xs.push_back( domainMin ); + domainMax = (*iter)->domainMax( ); + } + if( a_Xs.size( ) > 0 ) a_Xs.push_back( domainMax ); +} + +/* *********************************************************************************************************//** + * Function that checks that the domain overlap of the elements of *a_functions* are . + * The domain minimum values from each function and the domain maximum value are filled into *a_Xs*. + * + * @param a_functions [in] The list of functions whose domain limits are checked. + * @param a_Xs [in] A std::vector that is with the domain minimum values from each function and the domain maximum value. + ***********************************************************************************************************/ + +void checkSequentialDomainLimits2d( std::vector &a_functions, std::vector &a_Xs ) { + + double domainMax = -1; + + for( auto iter = a_functions.begin( ); iter != a_functions.end( ); ++iter ) { + double domainMin = (*iter)->domainMin( ); + + if( a_Xs.size( ) > 0 ) { + if( fabs( domainMax - domainMin ) > 1e-8 * ( fabs( domainMin ) + fabs( domainMax ) ) ) + throw Exception( "checkSequentialDomainLimits2d: domains not abutting." ); + } + a_Xs.push_back( domainMin ); + domainMax = (*iter)->domainMax( ); + } + if( a_Xs.size( ) > 0 ) a_Xs.push_back( a_functions.back( )->domainMax( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_particleInfo.cc b/source/processes/hadronic/models/lend/src/GIDI_particleInfo.cc new file mode 100644 index 0000000000..9882f2a997 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_particleInfo.cc @@ -0,0 +1,179 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class ParticleInfo + * This class stores an abridged set of particle information from PoPI::Database as needed by GIDI. + * + * Note, the stored mass does not include the mass associated with nuclear excitation energy. This addition mass is + * store in m_excitationEnergy. + */ + +/* *********************************************************************************************************//** + * @param a_ID [in] The particle's PoPs ID. + * @param a_pid [in] The same as *a_id* unless particle is an alias, then the final particle's id. + * @param a_mass [in] The particle's groud state mass. For nuclide and nucleus, this is the + * @param a_excitationEnergy [in] The particle's nuclear excitation energy. + ***********************************************************************************************************/ + +ParticleInfo::ParticleInfo( std::string const &a_ID, std::string const &a_pid, double a_mass, double a_excitationEnergy ) : + m_id( ParticleInfo::IDPortion( a_ID ) ), + m_qualifier( ParticleInfo::qualifierPortion( a_ID ) ), + m_pid( a_pid ), + m_mass( a_mass, "amu" ), + m_excitationEnergy( a_excitationEnergy, "MeV" ) { + +} + +/* *********************************************************************************************************//** + * @param a_ID [in] The particle's PoPs ID. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The internal PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_requiredInGlobalPoPs [in] If *true*, the ID must be in *a_pops*. + ***********************************************************************************************************/ + +ParticleInfo::ParticleInfo( std::string const &a_ID, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, bool a_requiredInGlobalPoPs ) : + m_id( ParticleInfo::IDPortion( a_ID ) ), + m_qualifier( ParticleInfo::qualifierPortion( a_ID ) ), + m_pid( "" ), + m_mass( -1, "amu" ), + m_excitationEnergy( 0, "MeV" ) { + + PoPI::Base const *particleOrAlias = nullptr; // Need to get the mass and nuclear excitation energy. Favor from internal PoPs if present. + std::string energyUnit( "MeV" ); + + if( a_pops.exists( m_id ) ) { + particleOrAlias = &a_pops.get( m_id ); + if( particleOrAlias->isAlias( ) ) { + PoPI::Alias const *alias = static_cast( particleOrAlias ); + particleOrAlias = &a_pops.get( alias->pid( ) ); + } + m_pid = particleOrAlias->ID( ); } + else { + if( a_requiredInGlobalPoPs ) throw Exception( "ParticleInfo::ParticleInfo: required particle ID not in global PoPs: " + m_id ); + } + + if( a_internalPoPs.exists( m_id ) ) { + particleOrAlias = &a_internalPoPs.get( m_id ); + if( particleOrAlias->isAlias( ) ) { + PoPI::Alias const *alias = static_cast( particleOrAlias ); + particleOrAlias = &a_pops.get( alias->pidIndex( ) ); + } + } + + if( particleOrAlias == nullptr ) throw Exception( "ParticleInfo::ParticleInfo: particle ID not in global PoPs: " + m_id ); + + if( particleOrAlias->isParticle( ) ) { + PoPI::Particle const &particle = static_cast( *particleOrAlias ); + + try { + m_mass = PhysicalQuantity( particle.massValue( "amu" ), "amu" ); } + catch (...) { + m_mass = PhysicalQuantity( -1, "amu" ); + } + + if( particle.isNuclide( ) ) { + PoPI::Nuclide const &nuclide = static_cast( particle ); + + m_excitationEnergy = PhysicalQuantity( nuclide.levelEnergy( energyUnit ), energyUnit ); + } + } +} + +/* *********************************************************************************************************//** + * Copy constructor for ParticleInfo. + * + * @param a_particleInfo [in] ParticleInfo instance to copy. + ***********************************************************************************************************/ + +ParticleInfo::ParticleInfo( ParticleInfo const &a_particleInfo ) : + m_id( a_particleInfo.ID( ) ), + m_qualifier( a_particleInfo.qualifier( ) ), + m_pid( a_particleInfo.pid( ) ), + m_mass( a_particleInfo.mass( ) ), + m_excitationEnergy( a_particleInfo.excitationEnergy( ) ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +ParticleInfo &ParticleInfo::operator=( ParticleInfo const &a_rhs ) { + + if( this != &a_rhs ) { + m_id = a_rhs.ID( ); + m_qualifier = a_rhs.qualifier( ); + m_pid = a_rhs.pid( ); + m_mass = a_rhs.mass( ); + m_excitationEnergy = a_rhs.excitationEnergy( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns the particle's actual mass (i.e., its *m_mass* plus *m_excitationEnergy*) in unit of *a_unit*. + * + * @param a_unit [in] The requested unit for the returned mass. + * + * @return The mass in unit of *a_unit*. + ***********************************************************************************************************/ + +double ParticleInfo::mass( LUPI_maybeUnused std::string const &a_unit ) const { + + return( PoPI_AMU2MeV_c2 * m_mass.value( ) ); +} + +/* *********************************************************************************************************//** + * This static method returns the non-qualifier portion of a particle's id. For example, for the id "Th232{1s1/2}", + * the string "Th232" is returned. + * + * @param a_ID [in] The id's whose non-qualifier portion is to be returned. + * + * @return The non-qualifier portion of the particle's id. + ***********************************************************************************************************/ + +std::string const ParticleInfo::IDPortion( std::string const &a_ID ) { + + std::string::size_type index1 = a_ID.find( "{" ); + + std::string ID( a_ID, 0, index1 ); + return( ID ); +} +/* *********************************************************************************************************//** + * This static method returns the qualifier portion of a particle's id. For example, for the id "Th232{1s1/2}", + * the string "1s1/2" is returned. + * + * @param a_ID [in] The id's whose qualifier portion is to be returned. + * + * @return The non-qualifier portion of the particle's id. + ***********************************************************************************************************/ + +std::string const ParticleInfo::qualifierPortion( std::string const &a_ID ) { + + std::string::size_type index1 = a_ID.find( "{" ); + + std::string qualifier( "" ); + if( index1 == std::string::npos ) return( qualifier ); + + std::string::size_type index2 = a_ID.find( "}" ); + qualifier = std::string( a_ID, index1 + 1, index2 - index1 - 1 ); + + return( qualifier ); +} + +} // End of namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_physicalQuantity.cc b/source/processes/hadronic/models/lend/src/GIDI_physicalQuantity.cc new file mode 100644 index 0000000000..bb812815cc --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_physicalQuantity.cc @@ -0,0 +1,100 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class PhysicalQuantity + * Class to store a physical quantity. A physical quantity is a value (e.g., 13.2) with a unit (e.g., 'cm'). The physical quantity + * can be unitless (i.e., the unit can be an empty string). Examples a physical quantities are '13.2 cm', '0.132 m', '4.5 kg'. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the PhysicalQuantity. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +PhysicalQuantity::PhysicalQuantity( HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::physicalQuantity ), + m_value( a_node.attribute_as_double( GIDI_valueChars ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_value [in] The physical quantity's value. + * @param a_unit [in] The physical quantity's unit. + ***********************************************************************************************************/ + +PhysicalQuantity::PhysicalQuantity( double a_value, std::string a_unit ) : + Form( FormType::physicalQuantity ), + m_value( a_value ), + m_unit( a_unit ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PhysicalQuantity::~PhysicalQuantity( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +PhysicalQuantity &PhysicalQuantity::operator=( PhysicalQuantity const &a_rhs ) { + + if( this != &a_rhs ) { + Form::operator=( a_rhs ); + + m_value = a_rhs.value( ); + m_unit = a_rhs.unit( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void PhysicalQuantity::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = a_writeInfo.addAttribute( GIDI_valueChars, LUPI::Misc::doubleToShortestString( value( ) ) ) + a_writeInfo.addAttribute( GIDI_unitChars, unit( ) ); + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/* *********************************************************************************************************//** + * Writes the information of *a_physicalQuantity* to *a_os*. + * + * @param a_os [out] The stream to write to. + * @param a_physicalQuantity [in] The PhysicalQuantity whose information is written. + ***********************************************************************************************************/ + +std::ostream &operator<<( std::ostream &a_os, PhysicalQuantity const &a_physicalQuantity ) { + + a_os << a_physicalQuantity.value( ) << " " << a_physicalQuantity.unit( ); + + return( a_os ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_polynomial1d.cc b/source/processes/hadronic/models/lend/src/GIDI_polynomial1d.cc new file mode 100644 index 0000000000..116cfbbbdf --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_polynomial1d.cc @@ -0,0 +1,224 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +/* *********************************************************************************************************//** + * This is the function callback used by asXYs1d to evalaute *this* at a domain point. This function is for internal use. + * + * @param a_smr [in/out] + * @param a_xValue [in] The x-value to evaluate the polynomial at. + * @param a_yValue [in] A pointer to a double that will contained the polynomial evaluated at *a_xValue*. + * @param a_argList [in] A pointer to a list of additional arguments needed. + * + * @return A nfu_status value. + ***********************************************************************************************************/ + +static nfu_status asXYs1d_callback( LUPI_maybeUnused statusMessageReporting *a_smr, double a_xValue, double *a_yValue, void *a_argList ) { + + GIDI::Functions::Polynomial1d *polynomial1d = static_cast( a_argList ); + + *a_yValue = polynomial1d->evaluate( a_xValue );; + return( nfu_Okay ); +} + +namespace GIDI { + +namespace Functions { + + +/*! \class Polynomial1d + * Class for the GNDS <**polynomial1d**> node. + */ + +/* *********************************************************************************************************//** + * @param a_axes [in] The axes to copy for *this*. + * @param a_domainMin [in] The minimum value for the domain. + * @param a_domainMax [in] The maximum value for the domain. + * @param a_coefficients [in] The coefficients representing the polynomial. + * @param a_index [in] Currently not used. + * @param a_outerDomainValue [in] If embedded in a higher dimensional function, the value of the domain of the next higher dimension. + ***********************************************************************************************************/ + +Polynomial1d::Polynomial1d( Axes const &a_axes, double a_domainMin, double a_domainMax, std::vector const &a_coefficients, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_polynomial1dChars, FormType::polynomial1d, a_axes, ptwXY_interpolationLinLin, a_index, a_outerDomainValue ), + m_domainMin( a_domainMin ), + m_domainMax( a_domainMax ), + m_coefficients( a_coefficients ) { + +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Polynomial1d::Polynomial1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::polynomial1d, a_parent ), + m_domainMin( a_node.attribute( GIDI_domainMinChars ).as_double( ) ), + m_domainMax( a_node.attribute( GIDI_domainMaxChars ).as_double( ) ) { + + nf_Buffer coeff; + parseValuesOfDoubles( a_construction, a_node.child( GIDI_valuesChars ), a_setupInfo, coeff ); + m_coefficients = coeff.vector(); +} + +/* *********************************************************************************************************//** + * The Polynomial1d copy constructor. + * + * @param a_polynomial1d [in] The Polynomial1d instance to copy. + ***********************************************************************************************************/ + +Polynomial1d::Polynomial1d( Polynomial1d const &a_polynomial1d ) : + Function1dForm( a_polynomial1d ), + m_domainMin( a_polynomial1d.domainMin( ) ), + m_domainMax( a_polynomial1d.domainMax( ) ), + m_coefficients( a_polynomial1d.coefficients( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Polynomial1d::~Polynomial1d( ) { + +} + +/* *********************************************************************************************************//** + * The value of the polynomial at the point *a_x1*. + * + * @param a_x1 [in] Domain value to evaluate this at. + * @return The value of the polynomial at the point **a_x1**. + ***********************************************************************************************************/ + +double Polynomial1d::evaluate( double a_x1 ) const { + + double _value = 0; + + if( a_x1 < m_domainMin ) return( 0.0 ); + if( a_x1 > m_domainMax ) return( 0.0 ); + + for( std::vector::const_reverse_iterator riter = m_coefficients.rbegin( ); riter != m_coefficients.rend( ); ++riter ) { + _value = *riter + _value * a_x1; + } + return( _value ); +} + +/* *********************************************************************************************************//** + * Evaluates *this* at the X-values in *a_Xs*[*a_offset*:] and adds the results to *a_results*[*a_offset*:]. + * *a_Xs* and *a_results* must be the same size otherwise a throw is executed. + * + * @param a_offset [in] The offset in *a_Xs* to start. + * @param a_Xs [in] The list of domain values to evaluate *this* at. + * @param a_results [in] The list whose values are added to by the Y-values of *this*. + * @param a_scaleFactor [in] A factor applied to each evaluation before it is added to *a_results*. + ***********************************************************************************************************/ + +void Polynomial1d::mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const { + + if( a_Xs.size( ) != a_results.size( ) ) throw Exception( "Constant1d::mapToXsAndAdd: a_Xs.size( ) != a_results.size( )." ); + if( a_offset < 0 ) throw Exception( "Constant1d::mapToXsAndAdd: a_offset < 0." ); + + int index = 0; + auto XsIter = a_Xs.begin( ); + + for( ; XsIter != a_Xs.end( ); ++XsIter, ++index ) { + if( a_offset == index ) break; + } + + for( ; XsIter != a_Xs.end( ); ++XsIter, ++index ) { + if( *XsIter >= m_domainMin ) break; + } + + for( ; XsIter != a_Xs.end( ); ++XsIter, ++index ) { + if( *XsIter > m_domainMax ) break; + a_results[index] += a_scaleFactor * evaluate( *XsIter ); + } +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_accuracy [in] The accuracy use to convert the data to lin=lin interpolation if needed. + * @param a_lowerEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_upperEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Polynomial1d::asXYs1d( LUPI_maybeUnused bool a_asLinlin, double a_accuracy, LUPI_maybeUnused double a_lowerEps, LUPI_maybeUnused double a_upperEps ) const { + + XYs1d *xys1d = nullptr; + + if( m_coefficients.size( ) < 3 ) { + double offset = 0.0, slope = 0.0; + if( m_coefficients.size( ) > 0 ) { + offset = m_coefficients[0]; + if( m_coefficients.size( ) == 2 ) slope = m_coefficients[1]; + } + + std::vector xs( 2 ); + xs[0] = domainMin( ); + xs[1] = domainMax( ); + + std::vector ys( 2 ); + ys[0] = slope * xs[0] + offset; + ys[1] = slope * xs[1] + offset; + + xys1d = new XYs1d( axes( ), ptwXY_interpolationLinLin, xs, ys ); } + else { + double xs[2] = { domainMin( ), domainMax( ) }; + ptwXYPoints *ptwXYPoints1 = ptwXY_createFromFunction( nullptr, 2, xs, asXYs1d_callback, const_cast( this ), a_accuracy, 1, 12 ); + if( ptwXYPoints1 != nullptr ) xys1d = new XYs1d( axes( ), ptwXYPoints1 ); + } + + return( xys1d ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Polynomial1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + attributes = a_writeInfo.addAttribute( GIDI_domainMinChars, LUPI::Misc::doubleToShortestString( domainMin( ) ) ); + attributes += a_writeInfo.addAttribute( GIDI_domainMaxChars, LUPI::Misc::doubleToShortestString( domainMax( ) ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + axes( ).toXMLList( a_writeInfo, indent2 ); + doublesToXMLList( a_writeInfo, indent2, m_coefficients ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_primaryGamma2d.cc b/source/processes/hadronic/models/lend/src/GIDI_primaryGamma2d.cc new file mode 100644 index 0000000000..37405723bd --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_primaryGamma2d.cc @@ -0,0 +1,86 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class PrimaryGamma2d + * Class for the GNDS <**primaryGamma**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +PrimaryGamma2d::PrimaryGamma2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::primaryGamma2d, a_parent ), + m_domainMin( a_node.attribute( GIDI_domainMinChars ).as_double( ) ), + m_domainMax( a_node.attribute( GIDI_domainMaxChars ).as_double( ) ), + m_value( a_node.attribute( GIDI_valueChars ).as_double( ) ), + m_finalState( a_node.attribute_as_string( GIDI_finalStateChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PrimaryGamma2d::~PrimaryGamma2d( ) { + +} + +/* *********************************************************************************************************//** + * The value of the primary gamma energy at the projectile energy *a_x2*. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] Unknown. + * @return Fix me. + ***********************************************************************************************************/ + +double PrimaryGamma2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + +// FIXME - Do we need to check domain? +#if !defined(__NVCC__) && !defined(__HIP__) + throw Exception( "PrimaryGamma2d::evaluate: not implemented." ); +#endif + return( m_value ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void PrimaryGamma2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_valueChars, LUPI::Misc::doubleToShortestString( value( ) ) ); + + attributes += a_writeInfo.addAttribute( GIDI_domainMinChars, LUPI::Misc::doubleToShortestString( domainMin( ) ) ); + attributes += a_writeInfo.addAttribute( GIDI_domainMaxChars, LUPI::Misc::doubleToShortestString( domainMax( ) ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + axes( ).toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_product.cc b/source/processes/hadronic/models/lend/src/GIDI_product.cc new file mode 100644 index 0000000000..ade9014720 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_product.cc @@ -0,0 +1,594 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Product + * Class to store a GNDS <**product**> node. + */ + +/* *********************************************************************************************************//** + * Constructed + ***********************************************************************************************************/ + +Product::Product( PoPI::Database const &a_pops, std::string const &a_productID, std::string const &a_label ) : + Form( FormType::product ), + m_particle( ParticleInfo( a_productID, a_pops, a_pops, true ) ), + m_GNDS_particle( ParticleInfo( a_productID, a_pops, a_pops, true ) ), + m_productMultiplicity( 0 ), + m_treatProductAsIfInfinityMass( false ), + m_multiplicity( GIDI_multiplicityChars, GIDI_labelChars ), + m_distribution( GIDI_distributionChars, GIDI_labelChars ), + m_averageEnergy( GIDI_averageEnergyChars, GIDI_labelChars ), + m_averageMomentum( GIDI_averageMomentumChars, GIDI_labelChars ), + m_outputChannel( nullptr ) { + + setMoniker( GIDI_productChars ); + setLabel( a_label ); + + m_multiplicity.setAncestor( this ); + m_distribution.setAncestor( this ); + m_averageEnergy.setAncestor( this ); + m_averageMomentum.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Constructed from data in a <**product**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Product. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The **m_products** member of GIDI::OutputChannel this product belongs to. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +Product::Product( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, Suite *a_parent, Styles::Suite const *a_styles ) : + Form( a_node, a_setupInfo, FormType::product, a_parent ), + m_particle( a_node.attribute_as_string( GIDI_pidChars ), a_pops, a_internalPoPs, false ), + m_GNDS_particle( a_node.attribute_as_string( GIDI_pidChars ), a_pops, a_internalPoPs, false ), + m_productMultiplicity( 0 ), + m_treatProductAsIfInfinityMass( false ), + m_multiplicity( a_construction, GIDI_multiplicityChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseMultiplicitySuite, a_styles ), + m_distribution( a_construction, GIDI_distributionChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseDistributionSuite, a_styles ), + m_averageEnergy( a_construction, GIDI_averageEnergyChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseAverageEnergySuite, a_styles ), + m_averageMomentum( a_construction, GIDI_averageMomentumChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseAverageMomentumSuite, a_styles ), + m_outputChannel( nullptr ) { + + if( a_setupInfo.m_outputChannelLevel == 0 ) a_setupInfo.m_initialState = m_particle.ID( ); + m_multiplicity.setAncestor( this ); + m_distribution.setAncestor( this ); + m_averageEnergy.setAncestor( this ); + m_averageMomentum.setAncestor( this ); + + auto iter = a_setupInfo.m_particleSubstitution->find( m_GNDS_particle.ID( ) ); + if( iter != a_setupInfo.m_particleSubstitution->end( ) ) m_particle = iter->second; + + if( a_setupInfo.m_protare->projectile( ).ID( ) == PoPI::IDs::photon ) { + if( m_particle.ID( ) == a_setupInfo.m_protare->GNDS_target( ).ID( ) ) m_particle = a_setupInfo.m_protare->target( ); + } + + if( a_setupInfo.m_protare->isPhotoAtomic( ) || a_setupInfo.m_protare->isTNSL_ProtareSingle( ) ) { + m_treatProductAsIfInfinityMass = m_GNDS_particle.ID( ) == a_setupInfo.m_protare->GNDS_target( ).ID( ); + } + + HAPI::Node const _outputChannel = a_node.child( GIDI_outputChannelChars ); + a_setupInfo.m_outputChannelLevel += 1; + if( ! _outputChannel.empty( ) ) + m_outputChannel = new OutputChannel( a_construction, _outputChannel, a_setupInfo, a_pops, a_internalPoPs, a_styles, false, false ); + a_setupInfo.m_outputChannelLevel -= 1; + + if( m_outputChannel == nullptr ) { + if( m_multiplicity.size( ) > 0 ) { + GIDI::Functions::Function1dForm const *function1d = m_multiplicity.get( 0 ); + + if( function1d->type( ) == FormType::constant1d ) { + m_productMultiplicity = static_cast( function1d->evaluate( 0.0 ) ); } + else if( function1d->type( ) != FormType::unspecified1d ) { + m_productMultiplicity = -1; + } + } } + else { + m_outputChannel->setAncestor( this ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Product::~Product( ) { + + if( m_outputChannel != nullptr ) delete m_outputChannel; +} + +/* *********************************************************************************************************//** + * Returns the maximum product depth for this product. + * + * @return The maximum product depth. + ***********************************************************************************************************/ + +int Product::depth( ) const { + + if( m_outputChannel == nullptr ) return( 0 ); + return( m_outputChannel->depth( ) ); +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the ProtareSingle that + * contains the TNSL data covers the lower energy multi-group data. + * + * @param a_maximumTNSL_MultiGroupIndex [in] A map that contains labels for heated multi-group data and the last valid group boundary + * for the TNSL data for that boundary. + ***********************************************************************************************************/ + +void Product::modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ) { + + m_multiplicity.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_distribution.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_averageEnergy.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_averageMomentum.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); +} + +/* *********************************************************************************************************//** + * Returns true if the product has an output channel and its output channel hasFission returns true, and false otherwise. + * + * @return true if at least one output channel is a fission channel. + ***********************************************************************************************************/ + +bool Product::hasFission( ) const { + + if( m_outputChannel != nullptr ) return( m_outputChannel->hasFission( ) ); + return( false ); +} + +/* *********************************************************************************************************//** + * Returns **false* if *this* has delayed fission neutrons and they are not complete; otherwise, returns **true**. + * + * @param a_isDelayedNeutron [in] **true** is called from FissionFragmentData::isDelayedFissionNeutronComplete and **false** otherwise. + * + * @return bool + ***********************************************************************************************************/ + +bool Product::isDelayedFissionNeutronComplete( bool a_isDelayedNeutron ) const { + + if( a_isDelayedNeutron ) { + return( isCompleteParticle( ) ); } + else { + if( m_outputChannel != nullptr ) return( m_outputChannel->isDelayedFissionNeutronComplete( ) ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Returns **true** if all outgoing particles (i.e., products) are specifed in *a_particles*. That is, the user + * will be tracking all products of *this* reaction. + * + * @param a_particles [in] The list of particles to be transported. + * + * @return bool. + ***********************************************************************************************************/ + +bool Product::areAllProductsTracked( Transporting::Particles const &a_particles ) const { + + if( m_outputChannel != nullptr ) return( m_outputChannel->areAllProductsTracked( a_particles ) ); + + return( a_particles.hasParticle( m_particle.ID( ) ) ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *Product::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_multiplicityChars ) return( &m_multiplicity ); + if( a_item == GIDI_distributionChars ) return( &m_distribution ); + if( a_item == GIDI_averageEnergyChars ) return( &m_averageEnergy ); + if( a_item == GIDI_averageMomentumChars ) return( &m_averageMomentum ); + if( a_item == GIDI_outputChannelChars ) return( m_outputChannel ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *Product::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_multiplicityChars ) return( &m_multiplicity ); + if( a_item == GIDI_distributionChars ) return( &m_distribution ); + if( a_item == GIDI_averageEnergyChars ) return( &m_averageEnergy ); + if( a_item == GIDI_averageMomentumChars ) return( &m_averageMomentum ); + if( a_item == GIDI_outputChannelChars ) return( m_outputChannel ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Insert a std::set with the products index and any product in in its output channel. + * If a_transportablesOnly is true, only transportable product indices are return. + * + * @param a_indices [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void Product::productIDs( std::set &a_indices, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + if( m_outputChannel == nullptr ) { + if( a_transportablesOnly && !a_particles.hasParticle( m_particle.ID( ) ) ) return; + if( m_particle.ID( ) != "" ) a_indices.insert( m_particle.ID( ) ); } + else { + m_outputChannel->productIDs( a_indices, a_particles, a_transportablesOnly ); + } +} + +/* *********************************************************************************************************//** + * Returns the product multiplicity (e.g., 0, 1, 2, ...) or -1 if energy dependent or not an integer for particle with id *a_productID*. + * + * @param a_productID; [in] The id of the requested particle. + * + * @return The multiplicity for the requested particle. + ***********************************************************************************************************/ + +int Product::productMultiplicity( std::string const &a_productID ) const { + + if( m_outputChannel != nullptr ) return( m_outputChannel->productMultiplicity( a_productID ) ); + + if( PoPI::compareSpecialParticleIDs( a_productID, m_particle.ID( ) ) ) return( m_productMultiplicity ); + return( 0 ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for a this product and any sub-products for a give label. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int Product::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + int _maximumLegendreOrder = -1; + + if( m_outputChannel == nullptr ) { + if( PoPI::compareSpecialParticleIDs( m_particle.ID( ), a_productID ) ) { + Distributions::MultiGroup3d const *form = dynamic_cast( a_settings.form( + a_smr, m_distribution, a_temperatureInfo, "distribution for maximumLegendreOrder" ) ); + if( form != nullptr ) { + Functions::Gridded3d const &gdata = form->data( ); + Array3d const &data = gdata.data( ); + _maximumLegendreOrder = data.size( ) - 1; + } + } } + else { + int __maximumLegendreOrder = m_outputChannel->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( __maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = __maximumLegendreOrder; + } + + return( _maximumLegendreOrder ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, multiplicity for the requested label for the this product and any sub-product. + * This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Product::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( m_outputChannel == nullptr ) { + if( ( PoPI::compareSpecialParticleIDs( m_particle.ID( ), a_productID ) ) && ( !m_treatProductAsIfInfinityMass ) ) { + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( + a_smr, m_multiplicity, a_temperatureInfo, "multiplicity" ) ); + if( form != nullptr ) vector += form->data( ); + } } + else { + vector += m_outputChannel->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, Q for the requested label for the this product and any sub-product . This is a cross section weighted Q. + * If a_final is false, only the Q for the products output channel is returned, otherwise, the Q for all output channels + * summed, including output channels for each products. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If true, the Q is calculated for all output channels, including those for products. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Product::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final ) const { + + Vector _vector( 0 ); + + if( m_outputChannel != nullptr ) _vector += m_outputChannel->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + + return( _vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, product matrix for the requested label for the requested product index for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] Particle id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix Product::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const { + + Matrix matrix( 0, 0 ); + + if( m_outputChannel == nullptr ) { + if( ( PoPI::compareSpecialParticleIDs( m_particle.ID( ), a_productID ) ) && ( !m_treatProductAsIfInfinityMass ) ) { + Distributions::MultiGroup3d const *form = dynamic_cast( a_settings.form( + a_smr, m_distribution, a_temperatureInfo, "distribution for product matrix" ) ); + if( form != nullptr ) { + Functions::Gridded3d const &gdata = form->data( ); + Array3d const &data = gdata.data( ); + matrix = data.matrix( a_order ); + } + } } + else { + matrix += m_outputChannel->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average energy for the requested label for the requested product. This is a cross section weighted average energy + * summed over this and all sub-products. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Product::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( m_outputChannel == nullptr ) { + if( ( PoPI::compareSpecialParticleIDs( m_particle.ID( ), a_productID ) ) && ( !m_treatProductAsIfInfinityMass ) ) { + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( + a_smr, m_averageEnergy, a_temperatureInfo, "average product energy" ) ); + if( form != nullptr ) vector += form->data( ); + } } + else { + vector += m_outputChannel->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the sum of the multi-group, average momentum for the requested label for the requested product. This is a cross section weighted average momentum + * summed over this and all sub-products. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Product::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( m_outputChannel == nullptr ) { + if( ( PoPI::compareSpecialParticleIDs( m_particle.ID( ), a_productID ) ) && ( !m_treatProductAsIfInfinityMass ) ) { + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( + a_smr, m_averageMomentum, a_temperatureInfo, "average product momentum" ) ); + if( form != nullptr ) vector += form->data( ); + } } + else { + vector += m_outputChannel->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns, via arguments, the average energy and momentum, and gain for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_particleID [in] The particle id of the product. + * @param a_energy [in] The energy of the projectile. + * @param a_productEnergy [in] The average energy of the product. + * @param a_productMomentum [in] The average momentum of the product. + * @param a_productGain [in] The gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void Product::continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, + double &a_productEnergy, double &a_productMomentum, double &a_productGain, bool a_ignoreIncompleteParticles ) const { + + if( m_outputChannel == nullptr ) { + if( a_particleID == m_particle.ID( ) ) { + if( !isCompleteParticle( ) ) { + if( a_ignoreIncompleteParticles ) return; + throw Exception( "GIDI::Product::continuousEnergyProductData: particle is incomplete: " + toXLink( ) + "." ); + } + a_productEnergy += averageEnergy( ).get( 0 )->evaluate( a_energy ); + a_productMomentum += averageMomentum( ).get( 0 )->evaluate( a_energy ); + a_productGain += multiplicity( ).get( 0 )->evaluate( a_energy ); } } + else { + m_outputChannel->continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, a_ignoreIncompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * Modifies the average product energies, momenta and gains for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies user options. + * @param a_particleID [in] The particle id of the product. + * @param a_energies [in] The vector of energies to map the data to. + * @param a_offset [in] The index of the first energy whose data are to be added to the vectors. + * @param a_productEnergies [out] The vector of average energies of the product. + * @param a_productMomenta [out] The vector of average momenta of the product. + * @param a_productGains [out] The vector of gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void Product::mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const { + + if( m_outputChannel == nullptr ) { + if( a_particleID == m_particle.ID( ) ) { + if( !isCompleteParticle( ) ) { + if( a_ignoreIncompleteParticles ) return; + throw Exception( "GIDI::Product::mapContinuousEnergyProductData: particle is incomplete: " + toXLink( ) + "." ); + } + GIDI::Functions::Function1dForm const *multiplicity1 = multiplicity( ).get( 0 ); + if( multiplicity1->type( ) == FormType::branching1d ) return; + + averageEnergy( ).get( 0 )->mapToXsAndAdd( a_offset, a_energies, a_productEnergies, -1.0 ); + averageMomentum( ).get( 0 )->mapToXsAndAdd( a_offset, a_energies, a_productMomenta, -1.0 ); + multiplicity1->mapToXsAndAdd( a_offset, a_energies, a_productGains, 1.0 ); + } } + else { + m_outputChannel->mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, a_productMomenta, + a_productGains, a_ignoreIncompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * Returns *true* if the product is complete and *false* otherwise. A product is complete if its multiplicity and/or distribution + * are other than *unspecified*. + * + * @return *true* if the product is complete and *false* otherwise. + ***********************************************************************************************************/ + +bool Product::isCompleteParticle( ) const { + + if( m_multiplicity.size( ) == 0 ) return( false ); + if( m_multiplicity.get( 0 )->type( ) == FormType::unspecified ) return( false ); + if( m_distribution.size( ) == 0 ) return( false ); + if( m_distribution.get( 0 )->type( ) == FormType::unspecified ) return( false ); + + return( true ); +} + +/* *********************************************************************************************************//** + * If the product has a distribution and its first distribution form is not **unspecified**, its PoPs id is added to *a_incompleteParticles*. + * + * @return Returns *true* if the product has distribution data and *false* otherwise. + ***********************************************************************************************************/ + +void Product::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + if( m_outputChannel == nullptr ) { + if( !isCompleteParticle( ) ) a_incompleteParticles.insert( particle( ).ID( ) ); } + else { + m_outputChannel->incompleteParticles( a_settings, a_incompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * This methods calculates multi-group data for all needed components and adds each component's multi-group with label *a_heatedMultiGroupLabel*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_crossSectionXYs1d [in[ The cross section weight. + ***********************************************************************************************************/ + +void Product::calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation, + Functions::XYs1d const &a_crossSectionXYs1d ) { + +// FIXME, need to calculateMultiGroupData for the distribution. + + if( isCompleteParticle( ) ) { + if( m_multiplicity.find( a_heatedMultiGroupLabel ) != m_multiplicity.end( ) ) { + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_multiplicity, a_crossSectionXYs1d ); + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_averageEnergy, a_crossSectionXYs1d ); + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_averageMomentum, a_crossSectionXYs1d ); + } + } + + if( m_outputChannel != nullptr ) + m_outputChannel->calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, a_crossSectionXYs1d ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Product::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_pidChars, m_GNDS_particle.ID( ) ); + if( label( ) != "" ) attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_multiplicity.toXMLList( a_writeInfo, indent2 ); + m_distribution.toXMLList( a_writeInfo, indent2 ); + m_averageEnergy.toXMLList( a_writeInfo, indent2 ); + m_averageMomentum.toXMLList( a_writeInfo, indent2 ); + if( m_outputChannel != nullptr ) m_outputChannel->toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_protare.cc b/source/processes/hadronic/models/lend/src/GIDI_protare.cc new file mode 100644 index 0000000000..e440a058f2 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_protare.cc @@ -0,0 +1,1582 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +static bool sortTemperatures( Styles::TemperatureInfo const &lhs, Styles::TemperatureInfo const &rhs ); + +/*! \class Protare + * Base class for the protare sub-classes. + */ + +/* *********************************************************************************************************//** + * Base Protare constructor. + ***********************************************************************************************************/ + +Protare::Protare( ) : + GUPI::Ancestry( "" ), + m_projectile( "", "", -1.0 ), + m_target( "", "", -1.0 ), + m_GNDS_target( "", "", -1.0 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Protare::~Protare( ) { + +} + +/* *********************************************************************************************************//** + * Called by the constructs. This method does most of the parsing. + * + * @param a_node [in] The protare (i.e., reactionSuite) node to be parsed and used to construct a Protare. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The internal PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_targetRequiredInGlobalPoPs [in] If *true*, the target is required to be in **a_pops**. + * @param a_requiredInPoPs [in] If *true*, particle is required to be in **a_pops**. + ***********************************************************************************************************/ + +void Protare::initialize( HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + bool a_targetRequiredInGlobalPoPs, bool a_requiredInPoPs ) { + + setMoniker( a_node.name( ) ); + + std::string projectileID = a_node.attribute_as_string( GIDI_projectileChars ); + m_projectile = ParticleInfo( projectileID, a_pops, a_internalPoPs, a_requiredInPoPs ); + + std::string targetID = a_node.attribute_as_string( GIDI_targetChars ); + m_GNDS_target = ParticleInfo( targetID, a_pops, a_internalPoPs, a_targetRequiredInGlobalPoPs && a_requiredInPoPs ); + + auto iter = a_setupInfo.m_particleSubstitution->find( m_GNDS_target.ID( ) ); + if( iter != a_setupInfo.m_particleSubstitution->end( ) ) { + m_target = iter->second; } + else { + m_target = m_GNDS_target; + } +} + +/* *********************************************************************************************************//** + * If the protare is a ProtareTNSL then summing over all reactions will include the standard protare's elastic cross section + * in the domain of the TNSL data. The standard elastic cross section should not be added in this domain. + * If needed, this function corrects the cross section for this over counting of the elastic cross section. + * This method does nothing unless overwritten by the ProtareTNSL class. + * + * @param a_label [in] The label of the elastic cross section data to use if over counting needs to be corrected. + * @param a_crossSectionSum [in] The cross section to correct. + ***********************************************************************************************************/ + +void Protare::TNSL_crossSectionSumCorrection( LUPI_maybeUnused std::string const &a_label, LUPI_maybeUnused Functions::XYs1d &a_crossSectionSum ) { + +} + +/* *********************************************************************************************************//** + * If the protare is a ProtareTNSL then summing over all reactions will include the standard protare's elastic cross section + * in the domain of the TNSL data. The standard elastic cross section should not be added in this domain. + * If needed, this function corrects the cross section for this over counting of the elastic cross section. + * This method does nothing unless overwritten by the ProtareTNSL class. + * + * @param a_label [in] The label of the elastic cross section data to use if over counting needs to be corrected. + * @param a_crossSectionSum [in] The cross section to correct. + ***********************************************************************************************************/ + +void Protare::TNSL_crossSectionSumCorrection( LUPI_maybeUnused std::string const &a_label, LUPI_maybeUnused Functions::Ys1d &a_crossSectionSum ) { + +} + +/* *********************************************************************************************************//** + * If the protare is a ProtareTNSL then summing over all reactions will include the standard protare's elastic cross section + * in the domain of the TNSL data. The standard elastic cross section should not be added in this domain. + * If needed, this function corrects the cross section for this over counting of the elastic cross section. + * This method does nothing as the multi-group cross section data for the standard protare's elastic cross section are + * zeroed when the data are read in. However, this method is added so codes do not have to check the type of data they are accessing. + * + * @param a_label [in] The label of the elastic cross section data to use if over counting needs to be corrected. + * @param a_crossSectionSum [in] The cross section to correct. + ***********************************************************************************************************/ + +void Protare::TNSL_crossSectionSumCorrection( LUPI_maybeUnused std::string const &a_label, LUPI_maybeUnused Vector &a_crossSectionSum ) { + +} + +/* *********************************************************************************************************//** + * Returns a list of all reaction indices whose ENDL C value is in the set *a_CValues*. + * + * @param a_CValues [in] A list of ENDL C values. + * @param a_checkActiveState [in] If true, all reactions whose active state is false are not included in the returned set even if their CValue match on in the list. + * + * @return The list of reaction indices. + ***********************************************************************************************************/ + +ExcludeReactionsSet Protare::reactionIndicesMatchingENDLCValues( std::set const &a_CValues, bool a_checkActiveState ) { + + ExcludeReactionsSet indices; + + for( std::size_t i1 = 0; i1 < numberOfReactions( ); ++i1 ) { + Reaction *reaction1 = reaction( i1 ); + + if( a_checkActiveState && !reaction1->active( ) ) continue; + if( a_CValues.find( reaction1->ENDL_C( ) ) != a_CValues.end( ) ) indices.insert( i1 ); + } + + return( indices ); +} + +/*! \class ProtareSingle + * Class to store a GNDS <**reactionSuite**> node. + */ + +/* *********************************************************************************************************//** + * Parses a GNDS file to construct the Protare instance. Calls the initialize method which does most of the work. + * + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_projectileID [in] The PoPs id of the projectile. + * @param a_targetID [in] The PoPs id of the target. + * @param a_evaluation [in] The evaluation string. + * @param a_interaction [in] The interaction flag for the protare. + * @param a_formatVersion [in] The GNDS format to use. + ***********************************************************************************************************/ + +ProtareSingle::ProtareSingle( PoPI::Database const &a_pops, std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_evaluation, + std::string const &a_interaction, std::string const &a_formatVersion ) : + m_doc( nullptr ), + m_dataManager( nullptr ), + m_numberOfLazyParsingHelperForms( 0 ), + m_numberOfLazyParsingHelperFormsReplaced( 0 ), + m_formatVersion( a_formatVersion ), + m_evaluation( a_evaluation ), + m_interaction( a_interaction ), + m_projectileFrame( Frame::lab ), + m_decayPositronium( false ), + m_thresholdFactor( 0.0 ), + m_nuclearPlusCoulombInterferenceOnlyReaction( nullptr ), + m_pointwiseAverageProductEnergy( GIDI_averageEnergyChars, GIDI_labelChars ) { + + setMoniker( GIDI_topLevelChars ); + initialize( ); + + setProjectile( ParticleInfo( a_projectileID, a_pops, a_pops, true ) ); + setTarget( ParticleInfo( a_targetID, a_pops, a_pops, true ) ); +} + +/* *********************************************************************************************************//** + * Parses a GNDS file to construct the Protare instance. Calls the initialize method which does most of the work. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_fileName [in] File containing a protare (i.e., reactionSuite) node that is parsed and used to construct the Protare. + * @param a_fileType [in] File type of a_fileType. Currently, only GIDI::FileType::XML and GIDI::FileType::HDF are supported. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * @param a_libraries [in] The list of libraries that were searched to find *this*. + * @param a_interaction [in] The interaction flag for the protare. + * @param a_targetRequiredInGlobalPoPs [in] If *true*, the target is required to be in **a_pops**. + * @param a_requiredInPoPs [in] If *true*, no particle is required to be in **a_pops**. + ***********************************************************************************************************/ + +ProtareSingle::ProtareSingle( Construction::Settings const &a_construction, std::string const &a_fileName, FileType a_fileType, + PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution, std::vector const &a_libraries, + std::string const &a_interaction, bool a_targetRequiredInGlobalPoPs, bool a_requiredInPoPs ) : + Protare( ), + m_doc( nullptr ), + m_dataManager( nullptr ), + m_numberOfLazyParsingHelperForms( 0 ), + m_numberOfLazyParsingHelperFormsReplaced( 0 ), + m_libraries( a_libraries ), + m_interaction( a_interaction ), + m_fileName( a_fileName ), + m_realFileName( LUPI::FileInfo::realPath( a_fileName ) ), + m_decayPositronium( a_construction.decayPositronium( ) ), + m_pointwiseAverageProductEnergy( GIDI_averageEnergyChars, GIDI_labelChars ) { + +#ifdef HAPI_USE_PUGIXML + if( a_fileType == GIDI::FileType::XML ) { + m_doc = new HAPI::PugiXMLFile( a_fileName.c_str( ), "ProtareSingle::ProtareSingle" ); + } +#endif +#ifdef HAPI_USE_HDF5 + if( a_fileType == GIDI::FileType::HDF ) { + m_doc = new HAPI::HDFFile( a_fileName.c_str( ) ); + } +#endif + if( m_doc == nullptr ) { + throw std::runtime_error( "Only XML/HDF file types supported." ); + } + + if( a_construction.parseMode( ) != Construction::ParseMode::noParsing ) { + HAPI::Node protare = m_doc->first_child( ); + + SetupInfo setupInfo( this ); + ParticleSubstitution particleSubstitution( a_particleSubstitution ); + setupInfo.m_particleSubstitution = &particleSubstitution; + + initialize( a_construction, protare, setupInfo, a_pops, a_targetRequiredInGlobalPoPs, a_requiredInPoPs ); + } +} + +/* *********************************************************************************************************//** + * Parses a GNDS HAPI::Node instance to construct the Protare instance. Calls the ProtareSingle::initialize method which does most of the work. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the Protare. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_particleSubstitution [in] Map of particles to substitute with another particles. + * @param a_libraries [in] The list of libraries that were searched to find *this*. + * @param a_targetRequiredInGlobalPoPs [in] If *true*, the target is required to be in **a_pops**. + * @param a_interaction [in] The interaction between the projectile and target. + * @param a_requiredInPoPs [in] If *true*, no particle is required to be in **a_pops**. + ***********************************************************************************************************/ + +ProtareSingle::ProtareSingle( Construction::Settings const &a_construction, HAPI::Node const &a_node, PoPI::Database const &a_pops, + ParticleSubstitution const &a_particleSubstitution, std::vector const &a_libraries, + LUPI_maybeUnused std::string const &a_interaction, bool a_targetRequiredInGlobalPoPs, bool a_requiredInPoPs ) : + Protare( ), + m_doc( nullptr ), + m_dataManager( nullptr ), + m_numberOfLazyParsingHelperForms( 0 ), + m_numberOfLazyParsingHelperFormsReplaced( 0 ), + m_libraries( a_libraries ), + m_pointwiseAverageProductEnergy( GIDI_averageEnergyChars, GIDI_labelChars ) { + + SetupInfo setupInfo( this ); + ParticleSubstitution particleSubstitution( a_particleSubstitution ); + setupInfo.m_particleSubstitution = &particleSubstitution; + + initialize( a_construction, a_node, setupInfo, a_pops, a_targetRequiredInGlobalPoPs, a_requiredInPoPs ); +} + +/* *********************************************************************************************************//** + * Base initializer to be called by all constructors (directly or indirectly). + ***********************************************************************************************************/ + +void ProtareSingle::initialize( ) { + + m_externalFiles.setMoniker( GIDI_externalFilesChars ); + m_externalFiles.setAncestor( this ); + + m_styles.setMoniker( GIDI_stylesChars ); + m_styles.setAncestor( this ); + + m_documentations.setAncestor( this ); + m_documentations.setMoniker( GIDI_documentations_1_10_Chars ); + + m_reactions.setAncestor( this ); + m_reactions.setMoniker( GIDI_reactionsChars ); + + m_orphanProducts.setAncestor( this ); + m_orphanProducts.setMoniker( GIDI_orphanProductsChars ); + + m_incompleteReactions.setAncestor( this ); + m_incompleteReactions.setMoniker( GIDI_reactionsChars ); + + m_sums.setAncestor( this ); + + m_fissionComponents.setAncestor( this ); + m_fissionComponents.setMoniker( GIDI_fissionComponentsChars ); + + m_RutherfordScatteringPresent = false; + m_onlyRutherfordScatteringPresent = false; + m_nuclearPlusCoulombInterferenceOnlyReaction = nullptr; + m_multiGroupSummedReaction = nullptr; + m_multiGroupSummedDelayedNeutrons = nullptr; + + m_ACE_URR_probabilityTables.setAncestor( this ); + m_ACE_URR_probabilityTables.setMoniker( GIDI_ACE_URR_probabilityTablesChars ); + + m_photoAtomicIncoherentDoppler.setAncestor( this ); + m_photoAtomicIncoherentDoppler.setMoniker( GIDI_LLNL_photoAtomicIncoherentDoppler_Chars ); + + m_pointwiseAverageProductEnergy.setAncestor( this ); + m_GRIN_continuumGammas = nullptr; +} + +/* *********************************************************************************************************//** + * Called by the constructs. This method does most of the parsing. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The protare (i.e., reactionSuite) node to be parsed and used to construct a Protare. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_targetRequiredInGlobalPoPs [in] If *true*, the target is required to be in **a_pops**. + * @param a_requiredInPoPs [in] If *true*, no particle is required to be in **a_pops**. + ***********************************************************************************************************/ + +void ProtareSingle::initialize( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, bool a_targetRequiredInGlobalPoPs, bool a_requiredInPoPs ) { + + if( a_node.name( ) != GIDI_topLevelChars ) throw Exception( "Node '" + a_node.name( ) + "' is not a 'reactionSuite' node." ); + + m_externalFiles.parse( a_construction, a_node.child( GIDI_externalFilesChars ), a_setupInfo, a_pops, m_internalPoPs, parseExternalFilesSuite, nullptr ); + std::string parentDir = m_fileName.substr( 0, m_fileName.find_last_of( "/" ) ); + m_externalFiles.registerBinaryFiles( parentDir, a_setupInfo ); + + HAPI::Node internalPoPs = a_node.child( GIDI_PoPsChars ); + m_internalPoPs.addDatabase( internalPoPs, true ); + std::vector const aliases = m_internalPoPs.aliases( ); + for( auto alias = aliases.begin( ); alias != aliases.end( ); ++alias ) { + a_setupInfo.m_particleSubstitution->insert( { (*alias)->pid( ), ParticleInfo( (*alias)->ID( ), a_pops, a_pops, true ) } ); + } + + m_interaction = a_node.attribute_as_string( GIDI_interactionChars ); + if( m_interaction == GIDI_MapInteractionTNSLChars ) a_targetRequiredInGlobalPoPs = false; + + Protare::initialize( a_node, a_setupInfo, a_pops, m_internalPoPs, a_targetRequiredInGlobalPoPs, a_requiredInPoPs ); + initialize( ); + + m_formatVersion.setFormat( a_node.attribute_as_string( GIDI_formatChars ) ); + if( !m_formatVersion.supported( ) ) throw Exception( "unsupported GNDS format version" ); + a_setupInfo.m_formatVersion = m_formatVersion; + + if( m_formatVersion.major( ) > 1 ) { + m_interaction = a_node.attribute_as_string( GIDI_interactionChars ); } + else { + HAPI::Node const firstReaction = a_node.child( GIDI_reactionsChars ).first_child( ); + if( firstReaction.attribute_as_int( GIDI_ENDF_MT_Chars ) == 502 ) m_interaction = GIDI_MapInteractionAtomicChars; + } + m_isPhotoAtomic = ( m_interaction == GIDI_MapInteractionAtomicChars ) && ( PoPI::IDs::photon == projectile( ).ID( ) ); + + PoPI::Database const *GRIN_pops = nullptr; + HAPI::Node const &applicationData = a_node.child( GIDI_applicationDataChars ); + std::vector extraGammaBranchStates; + for( HAPI::Node child1 = applicationData.first_child( ); !child1.empty( ); child1.to_next_sibling( ) ) { + std::string nodeName( child1.name( ) ); + if( nodeName == GIDI_institutionChars ) { + std::string label = child1.attribute_as_string( GIDI_labelChars ); + if( label == GIDI_LLNL_GRIN_continuumGammas ) { + HAPI::Node child2 = child1.child( GIDI_GRIN_continuumGammasChars ); + if( a_construction.GRIN_continuumGammas( ) ) { + m_GRIN_continuumGammas = new GRIN::GRIN_continuumGammas( a_construction, child2, a_setupInfo, a_pops, m_internalPoPs, *this, &m_styles ); + GRIN_pops = &(m_GRIN_continuumGammas->pops( )); + extraGammaBranchStates.push_back( m_GRIN_continuumGammas->captureResidualId( ) ); + } + } + } + } + m_internalPoPs.calculateNuclideGammaBranchStateInfos( m_nuclideGammaBranchStateInfos, GRIN_pops, extraGammaBranchStates ); + + m_isTNSL_ProtareSingle = false; + if( m_interaction == GIDI_TNSLChars ) m_interaction = GIDI_MapInteractionTNSLChars; + if( m_interaction == GIDI_MapInteractionTNSLChars ) { + m_isTNSL_ProtareSingle = true; } + else { // For some legacy GNDS 1.10 files. + std::string name( a_node.child( GIDI_reactionsChars ).first_child( ).child( GIDI_doubleDifferentialCrossSectionChars ).first_child( ).name( ) ); + m_isTNSL_ProtareSingle = name.find( "thermalNeutronScatteringLaw" ) != std::string::npos; + if( m_isTNSL_ProtareSingle ) m_interaction = GIDI_MapInteractionTNSLChars; + } + + m_thresholdFactor = 1.0; + if( a_pops.exists( target( ).pid( ) ) ) { + m_thresholdFactor = 1.0 + projectile( ).mass( "amu" ) / target( ).mass( "amu" ); // BRB FIXME, I think only this statement needs to be in this if section. + } + + m_evaluation = a_node.attribute_as_string( GIDI_evaluationChars ); + + m_projectileFrame = parseFrame( a_node, a_setupInfo, GIDI_projectileFrameChars ); + + m_styles.parse( a_construction, a_node.child( GIDI_stylesChars ), a_setupInfo, a_pops, m_internalPoPs, parseStylesSuite, nullptr ); + + Styles::Evaluated *evaluated = m_styles.get( 0 ); + + m_projectileEnergyMin = evaluated->projectileEnergyDomain( ).minimum( ); + m_projectileEnergyMax = evaluated->projectileEnergyDomain( ).maximum( ); + + m_reactions.parse( a_construction, a_node.child( GIDI_reactionsChars ), a_setupInfo, a_pops, m_internalPoPs, parseReaction, &m_styles ); + m_orphanProducts.parse( a_construction, a_node.child( GIDI_orphanProductsChars ), a_setupInfo, a_pops, m_internalPoPs, parseOrphanProduct, &m_styles ); + m_incompleteReactions.parse( a_construction, a_node.child( GIDI_incompleteReactionsChars ), a_setupInfo, a_pops, m_internalPoPs, parseReaction, &m_styles ); + + m_sums.parse( a_construction, a_node.child( GIDI_sumsChars ), a_setupInfo, a_pops, m_internalPoPs ); + m_fissionComponents.parse( a_construction, a_node.child( GIDI_fissionComponentsChars ), a_setupInfo, a_pops, m_internalPoPs, parseFissionComponent, &m_styles ); + + m_RutherfordScatteringPresent = false; + m_onlyRutherfordScatteringPresent = false; + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + if( reaction1->RutherfordScatteringPresent( ) ) { + m_RutherfordScatteringPresent = true; + m_onlyRutherfordScatteringPresent = reaction1->onlyRutherfordScatteringPresent( ); + break; + } + } + + for( HAPI::Node child1 = applicationData.first_child( ); !child1.empty( ); child1.to_next_sibling( ) ) { + std::string nodeName( child1.name( ) ); + + if( nodeName == GIDI_institutionChars ) { + std::string label = child1.attribute_as_string( GIDI_labelChars ); + if( label == GIDI_LLNL_Chars ) { + for( HAPI::Node child2 = child1.first_child( ); !child2.empty( ); child2.to_next_sibling( ) ) { + if( child2.name( ) == GIDI_nuclearPlusCoulombInterferenceChars ) { + HAPI::Node const reactionNode = child2.child( GIDI_reactionChars ); + a_setupInfo.m_isENDL_C_9 = true; + m_nuclearPlusCoulombInterferenceOnlyReaction = new Reaction( a_construction, reactionNode, a_setupInfo, a_pops, m_internalPoPs, *this, &m_styles ); + a_setupInfo.m_isENDL_C_9 = false; + bool dropC_9 = false; + auto &crossSectionSuite = m_nuclearPlusCoulombInterferenceOnlyReaction->crossSection( ); + for( auto crossSectionIter = crossSectionSuite.begin( ); crossSectionIter != crossSectionSuite.end( ); ++crossSectionIter ) { + auto iter = crossSectionSuite.checkLazyParsingHelperFormIterator( crossSectionIter ); + if( (*iter)->type( ) == FormType::XYs1d ) { + Functions::XYs1d *xys1d = static_cast( *iter ); + auto ys = xys1d->ys( ); + for( auto yIter = ys.begin( ); yIter != ys.end( ); ++yIter ) { + if( *yIter < 0.0 ) { + dropC_9 = true; + break; + } + } + break; + } + } + if( dropC_9 ) { + delete m_nuclearPlusCoulombInterferenceOnlyReaction; + m_nuclearPlusCoulombInterferenceOnlyReaction = nullptr; + } + } + } } + else if( label == GIDI_LLNL_multiGroupReactions_Chars ) { + HAPI::Node child2 = child1.child( GIDI_reactionChars ); + m_multiGroupSummedReaction = new Reaction( a_construction, child2, a_setupInfo, a_pops, m_internalPoPs, *this, &m_styles ); } + else if( label == GIDI_LLNL_multiGroupDelayedNeutrons_Chars ) { + HAPI::Node child2 = child1.child( GIDI_outputChannelChars ); + m_multiGroupSummedDelayedNeutrons = new OutputChannel( a_construction, child2, a_setupInfo, a_pops, m_internalPoPs, &m_styles, true, false ); } + else if( label == GIDI_LLNL_URR_probability_tables_Chars ) { + m_ACE_URR_probabilityTables.parse( a_construction, child1.child( GIDI_ACE_URR_probabilityTablesChars ), a_setupInfo, a_pops, + m_internalPoPs, parseACE_URR_probabilityTables, &m_styles ); } + else if( label == GIDI_LLNL_photoAtomicIncoherentDoppler_Chars ) { + HAPI::Node child2 = child1.child( GIDI_reactionsChars ); + m_photoAtomicIncoherentDoppler.parse( a_construction, child2, a_setupInfo, a_pops, m_internalPoPs, parseReaction, &m_styles ); + if( a_construction.usePhotoAtomicIncoherentDoppler( ) && m_photoAtomicIncoherentDoppler.size( ) > 0 ) { + // Add the consistent doppler broadened incoherent reactions to the list. + while( m_photoAtomicIncoherentDoppler.size( ) > 0 ) { + Reaction *photoAtomicIncoherentDopplerReaction = m_photoAtomicIncoherentDoppler.pop( 0 ); + m_reactions.add( photoAtomicIncoherentDopplerReaction ); + } + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { // Set standard incoherent reaction to inactive + Reaction *reaction1 = m_reactions.get( i1 ); + if( reaction1->ENDF_MT( ) == 504 ) { + reaction1->setActive(false); + } + } + } + } + else if( label == GIDI_LLNL_pointwiseAverageProductEnergies ) { + m_pointwiseAverageProductEnergy.parse( a_construction, child1.child( GIDI_averageEnergyChars ), a_setupInfo, a_pops, + m_internalPoPs, parseAverageEnergySuite, &m_styles ); } + else if( label == GIDI_LLNL_GRIN_continuumGammas ) { // Already parsed above. + continue; + } } + else { + std::cout << "parseStylesSuite: Ignoring unsupported style = '" << nodeName << "'." << std::endl; + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ProtareSingle::~ProtareSingle( ) { + + delete m_doc; + delete m_dataManager; + delete m_nuclearPlusCoulombInterferenceOnlyReaction; + delete m_multiGroupSummedReaction; + delete m_multiGroupSummedDelayedNeutrons; +} + +/* *********************************************************************************************************//** + * Checks various things to determine if it is okay to use summed multi-group data or not. + * + * @param a_settings [in] Specifies user options. + * + * @return Returns **true** if summed data are to be returned and **false** otherwise. + ***********************************************************************************************************/ + +bool ProtareSingle::useMultiGroupSummedData( Transporting::MG const &a_settings, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + if( ( numberOfInactiveReactions( ) > 0 ) || ( a_reactionsToExclude.size( ) > 0 ) ) return( false ); + if( m_multiGroupSummedReaction == nullptr ) return( false ); + if( a_settings.nuclearPlusCoulombInterferenceOnly( ) && m_RutherfordScatteringPresent ) return( false ); + if( m_decayPositronium ) return( false ); // Need to handle decay of positronium by reaction. + + return( a_settings.useMultiGroupSummedData( ) ); +} + +/* *********************************************************************************************************//** + * Returns **true** if delayed neutrons are to be included and **false** otherwise. + * + * @param a_settings [in] Specifies user options. + * + * @return Returns **true** if delayed neutrons are to be included and **false** otherwise. + ***********************************************************************************************************/ + +bool ProtareSingle::useMultiGroupSummedDelayedNeutronsData( Transporting::MG const &a_settings ) const { + + return( ( a_settings.delayedNeutrons( ) == Transporting::DelayedNeutrons::on ) && ( m_multiGroupSummedDelayedNeutrons != nullptr ) ); +} + +/* *********************************************************************************************************//** + * Returns *a_reaction* except when Rutherford scattering present and only nuclear + Coulomb interference is wanted. Otherwise + * returns *m_nuclearPlusCoulombInterferenceOnlyReaction* which may be a **nullptr**. + * + * @param a_settings [in] Specifies user options. + * @param a_reaction [in] Reaction pointer to return if check passes. + * + * @return Const reaction pointer or *m_nuclearPlusCoulombInterferenceOnlyReaction*. + ***********************************************************************************************************/ + +Reaction const *ProtareSingle::checkIf_nuclearPlusCoulombInterferenceWanted( Transporting::MG const &a_settings, Reaction const *a_reaction ) const { + + if( a_reaction->RutherfordScatteringPresent( ) && a_settings.nuclearPlusCoulombInterferenceOnly( ) ) { + return( m_nuclearPlusCoulombInterferenceOnlyReaction ); + } + + return( a_reaction ); +} + +/* *********************************************************************************************************//** + * Returns *a_reaction* except when Rutherford scattering present and only nuclear + Coulomb interference is wanted. Otherwise + * returns *m_nuclearPlusCoulombInterferenceOnlyReaction* which may be a **nullptr**. + * + * @param a_settings [in] Specifies user options. + * @param a_reaction [in] Reaction pointer to return if check passes. + * + * @return Const reaction pointer or *m_nuclearPlusCoulombInterferenceOnlyReaction*. + ***********************************************************************************************************/ + +Reaction const *ProtareSingle::reactionToMultiGroup( Transporting::MG const &a_settings, std::size_t a_index, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Reaction const *reaction1 = m_reactions.get( a_index ); + + if( !reaction1->active( ) ) return( nullptr ); + if( a_reactionsToExclude.find( static_cast( a_index ) ) != a_reactionsToExclude.end( ) ) return( nullptr ); + + return( checkIf_nuclearPlusCoulombInterferenceWanted( a_settings, reaction1 ) ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the protare (i.e., *this*) if *a_index* is 0 and nullptr otherwise. + * + * @param a_index [in] Must always be 0. + * + * @return Returns the pointer representing *this*. + ***********************************************************************************************************/ + +ProtareSingle *ProtareSingle::protare( std::size_t a_index ) { + + if( a_index != 0 ) return( nullptr ); + return( this ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the protare (i.e., *this*) if *a_index* is 0 and nullptr otherwise. + * + * @param a_index [in] Must always be 0. + * + * @return Returns the pointer representing *this*. + ***********************************************************************************************************/ + +ProtareSingle const *ProtareSingle::protare( std::size_t a_index ) const { + + if( a_index != 0 ) return( nullptr ); + return( this ); +} + +/* *********************************************************************************************************//** + * Returns the intid for the requested particle or -1 if the particle is not in *this* PoPs database. + * + * @param a_id [in] The GNDS PoPs id for particle whose intd is requested. + * + * @return C++ int for the requested particle or -1 if particle is not in PoPs. + ******************************************************************/ + +int ProtareSingle::intid( std::string const &a_id ) const { + + return( m_internalPoPs.intid( a_id ) ); +} + +/* *********************************************************************************************************//** + * Fills in a std::set with a unique list of all product indices produced by reactions and orphanProducts. + * If a_transportablesOnly is true, only transportable product incides are return. + * + * @param a_ids [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void ProtareSingle::productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + reaction1->productIDs( a_ids, a_particles, a_transportablesOnly ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + reaction1->productIDs( a_ids, a_particles, a_transportablesOnly ); + } +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for a give product for a give label. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int ProtareSingle::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + int _maximumLegendreOrder = -1; + ExcludeReactionsSet excludeReactionsSet; + + if( useMultiGroupSummedData( a_settings, excludeReactionsSet ) ) { + _maximumLegendreOrder = m_multiGroupSummedReaction->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + _maximumLegendreOrder = std::max( _maximumLegendreOrder, m_multiGroupSummedDelayedNeutrons->maximumLegendreOrder( + a_smr, a_settings, a_temperatureInfo, a_productID ) ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + int r_maximumLegendreOrder = reaction1->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder; + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + int r_maximumLegendreOrder = reaction1->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( r_maximumLegendreOrder > _maximumLegendreOrder ) _maximumLegendreOrder = r_maximumLegendreOrder; + } + } + + return( _maximumLegendreOrder ); +} + +/* *********************************************************************************************************//** + * Returns a list of all process temperature data. For each temeprature, the labels for its + * + * + heated cross section data, + * + gridded cross section data, + * + multi-group data, and + * + multi-group upscatter data. + * + * are returned. If no data are present for a give data type (e.g., gridded cross section, multi-group upscatter), its label is an empty std::string. + * + * @return The list of temperatures and their labels via an Styles::TemperatureInfos instance. The Styles::TemperatureInfos class + * has many (if not all) the method of a std::vector. + ***********************************************************************************************************/ + +Styles::TemperatureInfos ProtareSingle::temperatures( ) const { + + std::size_t size( m_styles.size( ) ); + Styles::TemperatureInfos temperature_infos; + + for( std::size_t i1 = 0; i1 < size; ++i1 ) { + Styles::Base const *style1 = m_styles.get( i1 ); + + if( style1->moniker( ) == GIDI_heatedStyleChars ) { + PhysicalQuantity const &temperature = style1->temperature( ); + std::string heated_cross_section( style1->label( ) ); + std::string gridded_cross_section( "" ); + std::string URR_probability_tables( "" ); + std::string heated_multi_group( "" ); + std::string Sn_elastic_upscatter( "" ); + + for( std::size_t i2 = 0; i2 < size; ++i2 ) { + Styles::Base const *style2 = m_styles.get( i2 ); + + if( style2->moniker( ) == GIDI_multiGroupStyleChars ) continue; + if( style2->temperature( ).value( ) != temperature.value( ) ) continue; + + if( style2->moniker( ) == GIDI_griddedCrossSectionStyleChars ) { + gridded_cross_section = style2->label( ); } + else if( style2->moniker( ) == GIDI_URR_probabilityTablesStyleChars ) { + URR_probability_tables = style2->label( ); } + else if( style2->moniker( ) == GIDI_SnElasticUpScatterStyleChars ) { + Sn_elastic_upscatter = style2->label( ); } + else if( style2->moniker( ) == GIDI_heatedMultiGroupStyleChars ) { + heated_multi_group = style2->label( ); + } + } + temperature_infos.push_back( Styles::TemperatureInfo( temperature, heated_cross_section, gridded_cross_section, URR_probability_tables, + heated_multi_group, Sn_elastic_upscatter ) ); + } + } + + std::sort( temperature_infos.begin( ), temperature_infos.end( ), sortTemperatures ); + + return( temperature_infos ); +} + +/* *********************************************************************************************************//** + * FOR INTERNAL USE ONLY. + * + * Determines if the temperature of lhs is less than that of rhs, or not. + * + * @param lhs [in] + * @param rhs [in] + * @return true if temperature of lhs < rhs and false otherwise. + ***********************************************************************************************************/ + +bool sortTemperatures( Styles::TemperatureInfo const &lhs, Styles::TemperatureInfo const &rhs ) { + + return( lhs.temperature( ).value( ) < rhs.temperature( ).value( ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction or **nullptr**. If the indexed reaction is deactivated or exlucded, + * a **nullptr** is returned. + * + * @param a_index [in] The index of the requested reaction. + * @param a_settings [in] Specifies the requested label. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The (*a_index*+1)th reaction or **nullptr**. + ***********************************************************************************************************/ + +Reaction const *ProtareSingle::reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + return( reactionToMultiGroup( a_settings, a_index, a_reactionsToExclude ) ); +} + +/* *********************************************************************************************************//** + * The method returns the number of reactions of *this* that have been deactivated. + * + * @return The number of deactivated reaction of *this*. + ***********************************************************************************************************/ + +std::size_t ProtareSingle::numberOfInactiveReactions( ) const { + + std::size_t count = 0; + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) ++count; + } + + return( count ); +} + +/* *********************************************************************************************************//** + * Re-indexs the reactions in the reactions, orphanProducts and fissionComponents suites. + * + ***********************************************************************************************************/ + +void ProtareSingle::updateReactionIndices( int a_offset ) const { + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 + a_offset ); + + reaction1->setReactionIndex( i1 ); + } + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + reaction1->setReactionIndex( i1 ); + } + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + reaction1->setReactionIndex( i1 ); + } +} + +/* *********************************************************************************************************//** + * Returns the multi-group boundaries for the requested label and product. + * + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] ID for the requested product. + * + * @return List of multi-group boundaries. + ***********************************************************************************************************/ + +std::vector ProtareSingle::groupBoundaries( LUPI_maybeUnused Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Styles::HeatedMultiGroup const *heatedMultiGroupStyle1 = m_styles.get( a_temperatureInfo.heatedMultiGroup( ) ); + + return( heatedMultiGroupStyle1->groupBoundaries( a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the inverse speeds for the requested label. The label must be for a heated multi-group style. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return List of inverse speeds. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupInverseSpeed( LUPI_maybeUnused LUPI::StatusMessageReporting &a_smr, LUPI_maybeUnused Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + Styles::HeatedMultiGroup const *heatedMultiGroupStyle1 = m_styles.get( a_temperatureInfo.heatedMultiGroup( ) ); + + return( heatedMultiGroupStyle1->inverseSpeedData( ) ); +} + +/* *********************************************************************************************************//** + * Returns true if at least one reaction contains a fission channel. + * + * @return true if at least one reaction contains a fission channel. + ***********************************************************************************************************/ + +bool ProtareSingle::hasFission( ) const { + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns **false* if protare has delayed fission neutrons for an active reaction and they are not complete; otherwise, returns **true**. + * + * @return bool + ***********************************************************************************************************/ + +bool ProtareSingle::isDelayedFissionNeutronComplete( ) const { + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) { + OutputChannel const *outputChannel = reaction1->outputChannel( ); + if( !outputChannel->isDelayedFissionNeutronComplete( ) ) return( false ); + } + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *ProtareSingle::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_stylesChars ) return( &m_styles ); + if( a_item == GIDI_reactionsChars ) return( &m_reactions ); + if( a_item == GIDI_orphanProductsChars ) return( &m_orphanProducts ); + if( a_item == GIDI_sumsChars ) return( &m_sums ); + if( a_item == GIDI_fissionComponentsChars ) return( &m_fissionComponents ); + if( a_item == GIDI_ACE_URR_probabilityTablesChars ) return( &m_ACE_URR_probabilityTables ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *ProtareSingle::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_stylesChars ) return( &m_styles ); + if( a_item == GIDI_reactionsChars ) return( &m_reactions ); + if( a_item == GIDI_orphanProductsChars ) return( &m_orphanProducts ); + if( a_item == GIDI_sumsChars ) return( &m_sums ); + if( a_item == GIDI_fissionComponentsChars ) return( &m_fissionComponents ); + if( a_item == GIDI_ACE_URR_probabilityTablesChars ) return( &m_ACE_URR_probabilityTables ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total cross section for the requested label. This is summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The requested multi-group cross section as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ); } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total multiplicity for the requested label for the requested product. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + vector += m_multiGroupSummedDelayedNeutrons->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + vector += reaction1->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission neutron multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, LUPI_maybeUnused ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) vector += reaction1->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, PoPI::IDs::neutron ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission gamma multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, LUPI_maybeUnused ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) vector += reaction1->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, PoPI::IDs::photon ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total Q for the requested label. This is a cross section weighted Q + * summed over all reactions + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If false, only the Q for the primary reactions are return, otherwise, the Q for the final reactions. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the Q. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, LUPI_maybeUnused bool a_effectivePhotoAtomic, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + vector += m_multiGroupSummedDelayedNeutrons->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total product matrix for the requested label for the requested product id for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] PoPs id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the product matrix. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareSingle::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Matrix matrix( 0, 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + matrix = m_multiGroupSummedReaction->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + matrix += m_multiGroupSummedDelayedNeutrons->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) matrix += reaction1->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + matrix += reaction1->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Like ProtareSingle::multiGroupProductMatrix, but only returns the fission neutron, transfer matrix. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the fission matrix. + * + * @return The requested multi-group neutron fission matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareSingle::multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + LUPI_maybeUnused ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Matrix matrix( 0, 0 ); + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) matrix += reaction1->multiGroupFissionMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_order ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group transport correction for the requested label. The transport correction is calculated from the transfer matrix + * for the projectile id for the Legendre order of *a_order + 1*. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Maximum Legendre order for transport. The returned transport correction is for the next higher Legender order. + * @param a_transportCorrectionType [in] Requested transport correction type. + * @param a_temperature [in] The temperature of the flux to use when collapsing. Pass to the GIDI::collapse method. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the transport correction. + * + * @return The requested multi-group transport correction as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, LUPI_maybeUnused ExcludeReactionsSet const &a_reactionsToExclude ) const { + + if( a_transportCorrectionType == TransportCorrectionType::None ) return( Vector( 0 ) ); + + Matrix matrix( multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, projectile( ).ID( ), a_order + 1 ) ); + Matrix matrixCollapsed = collapse( matrix, a_settings, a_particles, a_temperature, projectile( ).ID( ) ); + std::size_t size = matrixCollapsed.size( ); + std::vector transportCorrection1( size, 0 ); + + if( a_transportCorrectionType == TransportCorrectionType::None ) { + } + else if( a_transportCorrectionType == TransportCorrectionType::Pendlebury ) { + for( std::size_t index = 0; index < size; ++index ) transportCorrection1[index] = matrixCollapsed[index][index]; } + else { + throw Exception( "Unsupported transport correction: only None and Pendlebury (i.e., Pendlebury/Underhill) are currently supported." ); + } + return( Vector( transportCorrection1 ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available energy for the requested label. This is a cross section weighted available energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available energy. + * + * @return The requested multi-group available energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo ); } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average energy for the requested label for the requested product. This is a cross section weighted average energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average energy. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + vector += m_multiGroupSummedDelayedNeutrons->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + vector += reaction1->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition energy for the requested label. This is a cross section weighted deposition energy + * summed over all reactions. The deposition energy is calculated by subtracting the average energy from each transportable particle + * from the available energy. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and the products that are transported. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition energy. + * + * @return The requested multi-group deposition energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + bool atLeastOneReactionHasAllParticlesTracked = false; + Vector vector; + + if( a_settings.zeroDepositionIfAllProductsTracked( ) ) { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) { + if( reaction1->areAllProductsTracked( a_particles ) ) { + atLeastOneReactionHasAllParticlesTracked = true; + break; + } + } + } + } + + if( atLeastOneReactionHasAllParticlesTracked ) { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles ); + } + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + vector += reaction1->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles ); + } } + else { + std::map const &products( a_particles.particles( ) ); + vector = multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo, a_reactionsToExclude ); + Vector availableEnergy( vector ); + + for( std::map::const_iterator iter = products.begin( ); iter != products.end( ); ++iter ) { + vector -= multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, iter->first, a_reactionsToExclude ); + } + + for( std::size_t index = 0; index < availableEnergy.size( ); ++index ) { // Check for values that should probably be 0.0. + if( std::fabs( vector[index] ) < std::fabs( 1e-14 * availableEnergy[index] ) ) vector[index] = 0.0; + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available momentum for the requested label. This is a cross section weighted available momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available momentum. + * + * @return The requested multi-group available momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo ); } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average momentum for the requested label for the requested product. This is a cross section weighted average momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average momentum. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + + if( useMultiGroupSummedData( a_settings, a_reactionsToExclude ) ) { + vector = m_multiGroupSummedReaction->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + if( useMultiGroupSummedDelayedNeutronsData( a_settings ) ) { + vector += m_multiGroupSummedDelayedNeutrons->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } } + else { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + vector += reaction1->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition momentum for the requested label. This is a cross section weighted deposition momentum + * summed over all reactions. The deposition momentum is calculated by subtracting the average momentum from each transportable particle + * from the available momentum. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition momentum. + * + * @return The requested multi-group deposition momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + std::map const &products( a_particles.particles( ) ); + Vector vector = multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo, a_reactionsToExclude ); + + for( std::map::const_iterator iter = products.begin( ); iter != products.end( ); ++iter ) { + vector -= multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, iter->first, a_reactionsToExclude ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, gain for the requested particle and label. This is a cross section weighted gain summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The particle PoPs' id for the whose gain is to be calculated. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the gain. + * + * @return The requested multi-group gain as a **GIDI::Vector**. + ***********************************************************************************************************/ + +Vector ProtareSingle::multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector( 0 ); + std::string const projectile_ID = projectile( ).ID( ); + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = reactionToMultiGroup( a_settings, i1, a_reactionsToExclude ); + + if( reaction1 != nullptr ) vector += reaction1->multiGroupGain( a_smr, a_settings, a_temperatureInfo, a_productID, projectile_ID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * + * + * @return A list of label, mu cutoff pairs. + ***********************************************************************************************************/ + +stringAndDoublePairs ProtareSingle::muCutoffForCoulombPlusNuclearElastic( ) const { + + stringAndDoublePairs muCutoffs; + + for( std::size_t i1 = 0; i1 < m_styles.size( ); ++i1 ) { + Styles::Base const *style1 = m_styles.get( i1 ); + + if( style1->moniker( ) == GIDI_CoulombPlusNuclearElasticMuCutoffStyleChars ) { + Styles::CoulombPlusNuclearElasticMuCutoff const *style2 = static_cast( style1 ); + + stringAndDoublePair labelMu( style2->label( ), style2->muCutoff( ) ); + + muCutoffs.push_back( labelMu ); + } + } + + return( muCutoffs ); +} + +/* *********************************************************************************************************//** + * Returns the list of DelayedNeutronProduct instances. + * + * @return a_delayedNeutronProducts The list of delayed neutrons. + ***********************************************************************************************************/ + +DelayedNeutronProducts ProtareSingle::delayedNeutronProducts( ) const { + + DelayedNeutronProducts delayedNeutronProducts1; + + if( hasFission( ) ) { + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + if( reaction1->hasFission( ) ) reaction1->delayedNeutronProducts( delayedNeutronProducts1 ); + } + } + + return( delayedNeutronProducts1 ); +} + +/* *********************************************************************************************************//** + * Calls the **incompleteParticles** method for each active reaction in the *reactions* and *orphanProducts* nodes. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void ProtareSingle::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + for( std::size_t i1 = 0; i1 < m_reactions.size( ); ++i1 ) { + Reaction const *reaction1 = m_reactions.get( i1 ); + + if( !reaction1->active( ) ) continue; + reaction1->incompleteParticles( a_settings, a_incompleteParticles ); + } + + for( std::size_t i1 = 0; i1 < m_orphanProducts.size( ); ++i1 ) { + Reaction const *reaction1 = m_orphanProducts.get( i1 ); + + if( !reaction1->active( ) ) continue; + reaction1->incompleteParticles( a_settings, a_incompleteParticles ); + } +} + +/* *********************************************************************************************************//** + * Write *this* to a file in GNDS/XML format. + * + * @param a_fileName [in] Name of file to save XML lines to. + ***********************************************************************************************************/ + +void ProtareSingle::saveAs( std::string const &a_fileName ) const { + + GUPI::WriteInfo writeInfo; + + toXMLList( writeInfo, "" ); + + std::ofstream fileio; + fileio.open( a_fileName.c_str( ) ); + for( std::list::iterator iter = writeInfo.m_lines.begin( ); iter != writeInfo.m_lines.end( ); ++iter ) { + fileio << *iter << std::endl; + } + fileio.close( ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void ProtareSingle::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string header = LUPI_XML_verionEncoding; + std::string attributes; + + a_writeInfo.push_back( header ); + + attributes = a_writeInfo.addAttribute( GIDI_projectileChars, projectile( ).ID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_targetChars, GNDS_target( ).ID( ) ); + attributes += a_writeInfo.addAttribute( GIDI_evaluationChars, evaluation( ) ); + attributes += a_writeInfo.addAttribute( GIDI_formatChars, m_formatVersion.format( ) ); + attributes += a_writeInfo.addAttribute( GIDI_projectileFrameChars, frameToString( projectileFrame( ) ) ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_externalFiles.toXMLList( a_writeInfo, indent2 ); + m_styles.toXMLList( a_writeInfo, indent2 ); + + std::vector pops_XMLList; + m_internalPoPs.toXMLList( pops_XMLList, indent2 ); + for( std::vector::iterator iter = pops_XMLList.begin( ); iter != pops_XMLList.end( ); ++iter ) a_writeInfo.push_back( *iter ); + + m_reactions.toXMLList( a_writeInfo, indent2 ); + m_orphanProducts.toXMLList( a_writeInfo, indent2 ); + m_sums.toXMLList( a_writeInfo, indent2 ); + m_fissionComponents.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_protareComposite.cc b/source/processes/hadronic/models/lend/src/GIDI_protareComposite.cc new file mode 100644 index 0000000000..690c7f39a1 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_protareComposite.cc @@ -0,0 +1,1021 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class ProtareComposite + * Class to store a list of GNDS <**reactionSuite**> node. + */ + +/* *********************************************************************************************************//** + * ProtareComposite constructor. + * + * @param a_construction [in] Used to pass user options to the constructor. + ***********************************************************************************************************/ + +ProtareComposite::ProtareComposite( LUPI_maybeUnused Construction::Settings const &a_construction ) { + +} + +/* *********************************************************************************************************//** + ******************************************************************/ + +ProtareComposite::~ProtareComposite( ) { + + for( std::vector::const_iterator iter = m_protares.begin( ); iter < m_protares.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Appends *a_protare* to the list of Protares. + * + * @param a_protare [in] The Protare to add to *this* instance. + ******************************************************************/ + +void ProtareComposite::append( Protare *a_protare ) { + + m_protares.push_back( a_protare ); +} + +/* *********************************************************************************************************//** + * Returns the GNDS format version for the (a_index+1)^th Protare. + * + * @param a_index [in] The index of the Protare whose format version is returned. + * + * @return The format version. + ******************************************************************/ + +LUPI::FormatVersion const &ProtareComposite::formatVersion( std::size_t a_index ) const { + + return( m_protares[a_index]->formatVersion( ) ); +} + +/* *********************************************************************************************************//** + * Returns the file name for the (a_index+1)^th Protare. + * + * @param a_index [in] The index of the Protare whose file name is returned. + * + * @return The file name. + ******************************************************************/ + +std::string const &ProtareComposite::fileName( std::size_t a_index ) const { + + return( m_protares[a_index]->fileName( ) ); +} + +/* *********************************************************************************************************//** + * Returns the real file name for the (a_index+1)^th Protare. + * + * @param a_index [in] The index of the Protare whose real file name is returned. + * + * @return The real file name. + ******************************************************************/ + +std::string const &ProtareComposite::realFileName( std::size_t a_index ) const { + + return( m_protares[a_index]->realFileName( ) ); +} + +/* *********************************************************************************************************//** + * Returns the list of libraries for the (a_index+1)^th contained Protare. + * + * @param a_index [in] The index of the Protare whose libraries are to be returned. + * + * @return The list of libraries. + ******************************************************************/ + +std::vector ProtareComposite::libraries( std::size_t a_index ) const { + + return( m_protares[a_index]->libraries( ) ); +} + +/* *********************************************************************************************************//** + * Returns the evaluation for the (a_index+1)^th Protare. + * + * @param a_index [in] The index of the Protare whose evaluation is returned. + * + * @return The evaluation. + ******************************************************************/ + +std::string const &ProtareComposite::evaluation( std::size_t a_index ) const { + + return( m_protares[a_index]->evaluation( ) ); +} + +/* *********************************************************************************************************//** + * Returns the projectile frame for the (a_index+1)^th Protare. + * + * @param a_index [in] The index of the Protare whose projectile frame is returned. + * + * @return The projectile frame. + ******************************************************************/ + +Frame ProtareComposite::projectileFrame( std::size_t a_index ) const { + + return( m_protares[a_index]->projectileFrame( ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of **ProtareSingle**s contained in *this*. + * + * @return Returns the number of contained **ProtareSingle**s.. + ***********************************************************************************************************/ + +std::size_t ProtareComposite::numberOfProtares( ) const { + + std::size_t number = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) number += m_protares[i1]->numberOfProtares( ); + + return( number ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +ProtareSingle *ProtareComposite::protare( std::size_t a_index ) { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t number = m_protares[i1]->numberOfProtares( ); + + if( number > a_index ) return( m_protares[i1]->protare( a_index ) ); + a_index -= number; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +ProtareSingle const *ProtareComposite::protare( std::size_t a_index ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t number = m_protares[i1]->numberOfProtares( ); + + if( number > a_index ) return( m_protares[i1]->protare( a_index ) ); + a_index -= number; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the number of LazyParsingHelperForms instantiated. + * + * @return The number of LazyParsingHelperForms instantiated. + ******************************************************************/ + +int ProtareComposite::numberOfLazyParsingHelperForms( ) const { + + int numberOfLazyParsingHelperForms1 = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) numberOfLazyParsingHelperForms1 += m_protares[i1]->numberOfLazyParsingHelperForms( ); + + return( numberOfLazyParsingHelperForms1 ); +} + +/* *********************************************************************************************************//** + * Returns the number of instantiated LazyParsingHelperForms replaced with the appropriate form. + * + * @return The number of LazyParsingHelperForms replaced. + ******************************************************************/ + +int ProtareComposite::numberOfLazyParsingHelperFormsReplaced( ) const { + + int numberOfLazyParsingHelperFormsReplaced1 = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) numberOfLazyParsingHelperFormsReplaced1 += m_protares[i1]->numberOfLazyParsingHelperFormsReplaced( ); + + return( numberOfLazyParsingHelperFormsReplaced1 ); +} + +/* *********************************************************************************************************//** + * Returns a threshold factor for the projectile hitting the target. + * + * @return The threshold factor. + ******************************************************************/ + +double ProtareComposite::thresholdFactor( ) const { + + return( m_protares[0]->thresholdFactor( ) ); +} + +/* *********************************************************************************************************//** + * Returns the Documentation_1_10::Suite from the first protare in *m_protares*. + * + * @return The Documentation_1_10::Suite. + ******************************************************************/ + +Documentation_1_10::Suite &ProtareComposite::documentations( ) { + + return( m_protares[0]->documentations( ) ); +} + +/* *********************************************************************************************************//** + * Returns the style with label *a_label* from the first Protare in *m_protares*. + * + * @param a_label [in] The label of the requested style. + * @return The style with label *a_label*. + ******************************************************************/ + +Styles::Base &ProtareComposite::style( std::string const a_label ) { + + return( m_protares[0]->style( a_label ) ); +} + +/* *********************************************************************************************************//** + * Returns the Styles::Suite from the first Protare in *m_protares*. + * + * @return The Styles::Suite. + ******************************************************************/ + +Styles::Suite &ProtareComposite::styles( ) { + + return( m_protares[0]->styles( ) ); +} + +/* *********************************************************************************************************//** + * Returns the Styles::Suite from the first Protare in *m_protares*. + * + * @return The Styles::Suite. + ******************************************************************/ + +Styles::Suite const &ProtareComposite::styles( ) const { + + return( m_protares[0]->styles( ) ); +} + +/* *********************************************************************************************************//** + * Returns the intid for the requested particle or -1 if the particle is not in *m_protare* PoPs database. + * + * @param a_id [in] The GNDS PoPs id for particle whose intd is requested. + * + * @return C++ int for the requested particle or -1 if particle is not in PoPs. + ******************************************************************/ + +int ProtareComposite::intid( std::string const &a_id ) const { + + int intid1 = -1; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + intid1 = m_protares[i1]->intid( a_id ); + if( intid1 > -1 ) break; + } + + return( intid1 ); +} + +/* *********************************************************************************************************//** + * Calls productIDs for each Protare contained in *this*. + * + * @param a_ids [in] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If *true* only transportable particle ids are added to *a_ids*. + ******************************************************************/ + +void ProtareComposite::productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) m_protares[i1]->productIDs( a_ids, a_particles, a_transportablesOnly ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for a give product for a give label. + * Loops over all contained Protares to determine the maximum Legredre order. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int ProtareComposite::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + int maximumLegendreOrder1 = -1; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + int maximumLegendreOrder2 = m_protares[i1]->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + + if( maximumLegendreOrder2 > maximumLegendreOrder1 ) maximumLegendreOrder1 = maximumLegendreOrder2; + } + + return( maximumLegendreOrder1 ); +} + +/* *********************************************************************************************************//** + * Returns a list of all process temperature data. For each temeprature, the labels for its + * + * + heated cross section data, + * + gridded cross section data, + * + multi-group data, and + * + multi-group upscatter data. + * + * are returned. If no data are present for a give data type (e.g., gridded cross section, multi-group upscatter), its label is an empty std::string. + * + * @return The list of temperatures and their labels via an Styles::TemperatureInfos instance. The Styles::TemperatureInfos class + * has many (if not all) the method of a std::vector. + ***********************************************************************************************************/ + +Styles::TemperatureInfos ProtareComposite::temperatures( ) const { + + return( m_protares[0]->temperatures( ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of reactions for all Protares contained in *this*. + * + * @return The total number of reactions. + ******************************************************************/ + +std::size_t ProtareComposite::numberOfReactions( ) const { + + std::size_t numberOfReactions1 = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) numberOfReactions1 += m_protares[i1]->numberOfReactions( ); + + return( numberOfReactions1 ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction. + * + * @param a_index [in] The index of the requested reaction. + * @return The (*a_index*+1)th reaction. + ***********************************************************************************************************/ + +Reaction *ProtareComposite::reaction( std::size_t a_index ) { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t numberOfReactions1 = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions1 ) return( m_protares[i1]->reaction( a_index ) ); + a_index -= numberOfReactions1; + } + + throw Exception( "ProtareComposite::reaction: index out of range" ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction. + * + * @param a_index [in] The index of the requested reaction. + * @return The (*a_index*+1)th reaction. + ***********************************************************************************************************/ + +Reaction const *ProtareComposite::reaction( std::size_t a_index ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t numberOfReactions1 = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions1 ) return( m_protares[i1]->reaction( a_index ) ); + a_index -= numberOfReactions1; + } + + throw Exception( "ProtareComposite::reaction: index out of range" ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction or **nullptr**. If the indexed reaction is deactivated or exlucded, + * a **nullptr** is returned. + * + * @param a_index [in] The index of the requested reaction. + * @param a_settings [in] Specifies the requested label. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The (*a_index*+1)th reaction or **nullptr**. + ***********************************************************************************************************/ + +Reaction const *ProtareComposite::reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t numberOfReactions1 = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions1 ) return( m_protares[i1]->reaction( a_index, a_settings, a_reactionsToExclude ) ); + a_index -= numberOfReactions1; + } + + throw Exception( "ProtareComposite::reaction: index out of range" ); +} + +/* *********************************************************************************************************//** + * Returns the number of orphanProduct for all Protares contained in *this*. + * + * @return The total number of orphanProducts. + ******************************************************************/ + +std::size_t ProtareComposite::numberOfOrphanProducts( ) const { + + std::size_t numberOfOrphanProducts1 = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) numberOfOrphanProducts1 += m_protares[i1]->numberOfOrphanProducts( ); + + return( numberOfOrphanProducts1 ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th orphanProduct. + * + * @param a_index [in] The index of the requested orphanProduct. + * @return The (*a_index*+1)th orphanProduct. + ***********************************************************************************************************/ + +Reaction *ProtareComposite::orphanProduct( std::size_t a_index ) { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t numberOfOrphanProducts1 = m_protares[i1]->numberOfOrphanProducts( ); + + if( a_index < numberOfOrphanProducts1 ) return( m_protares[i1]->orphanProduct( numberOfOrphanProducts1 ) ); + a_index -= numberOfOrphanProducts1; + } + + throw Exception( "ProtareComposite::orphanProduct: index out of range" ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th orphanProduct. + * + * @param a_index [in] The index of the requested orphanProduct. + * @return The (*a_index*+1)th orphanProduct. + ***********************************************************************************************************/ + +Reaction const *ProtareComposite::orphanProduct( std::size_t a_index ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t numberOfOrphanProducts1 = m_protares[i1]->numberOfOrphanProducts( ); + + if( a_index < numberOfOrphanProducts1 ) return( m_protares[i1]->orphanProduct( numberOfOrphanProducts1 ) ); + a_index -= numberOfOrphanProducts1; + } + + throw Exception( "ProtareComposite::orphanProduct: index out of range" ); +} + +/* *********************************************************************************************************//** + * Re-indexs the reactions in the reactions, orphanProducts and fissionComponents suites. + * + ***********************************************************************************************************/ + +void ProtareComposite::updateReactionIndices( LUPI_maybeUnused int a_offset ) const { + + std::size_t reactionOffset = 0; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + m_protares[i1]->updateReactionIndices( reactionOffset ); + reactionOffset += m_protares[i1]->numberOfReactions( ); + } +} + +/* *********************************************************************************************************//** + * Returns true if at least one reaction contains a fission channel. + * + * @return true if at least one reaction contains a fission channel and false otherwise. + ***********************************************************************************************************/ + +bool ProtareComposite::hasFission( ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + + if( m_protares[i1]->hasFission( ) ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns **false* if protare has delayed fission neutrons for an active reaction and they are not complete; otherwise, returns **true**. + * + * @return bool + ***********************************************************************************************************/ + +bool ProtareComposite::isDelayedFissionNeutronComplete( ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + + if( !m_protares[i1]->isDelayedFissionNeutronComplete( ) ) return( true ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group boundaries for the requested label and product. + * + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] ID for the requested product. + * + * @return List of multi-group boundaries. + ***********************************************************************************************************/ + +std::vector ProtareComposite::groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_protares[0]->groupBoundaries( a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the inverse speeds for the requested label. The label must be for a heated multi-group style. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return List of inverse speeds. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + return( m_protares[0]->multiGroupInverseSpeed( a_smr, a_settings, a_temperatureInfo ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total cross section for the requested label. This is summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The requested multi-group cross section as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo, a_reactionsToExclude ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total Q for the requested label. This is a cross section weighted multiplicity + * summed over all reactions + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If false, only the Q for the primary reactions are return, otherwise, the Q for the final reactions. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the Q. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final, a_effectivePhotoAtomic, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total multiplicity for the requested label for the requested product. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission neutron multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupFissionNeutronMultiplicity( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission gamma multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupFissionGammaMultiplicity( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total product matrix for the requested label for the requested product id for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] PoPs id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the product matrix. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareComposite::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Matrix matrix( 0, 0 ); + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + matrix += m_protares[i1]->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order, + excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Like ProtareComposite::multiGroupProductMatrix, but only returns the fission neutron, transfer matrix. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the fission matrix. + * + * @return The requested multi-group neutron fission matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareComposite::multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Matrix matrix( 0, 0 ); + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + matrix += m_protares[i1]->multiGroupFissionMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_order, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group transport correction for the requested label. The transport correction is calculated from the transfer matrix + * for the projectile id for the Legendre order of *a_order + 1*. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Maximum Legendre order for transport. The returned transport correction is for the next higher Legender order. + * @param a_transportCorrectionType [in] Requested transport correction type. + * @param a_temperature [in] The temperature of the flux to use when collapsing. Pass to the GIDI::collapse method. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the transport correction. + * + * @return The requested multi-group transport correction as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupTransportCorrection( a_smr, a_settings, a_temperatureInfo, a_particles, a_order, + a_transportCorrectionType, a_temperature, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available energy for the requested label. This is a cross section weighted available energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available energy. + * + * @return The requested multi-group available energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average energy for the requested label for the requested product. This is a cross section weighted average energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average energy. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition energy for the requested label. This is a cross section weighted deposition energy + * summed over all reactions. The deposition energy is calculated by subtracting the average energy from each transportable particle + * from the available energy. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and the products that are transported. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition energy. + * + * @return The requested multi-group deposition energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available momentum for the requested label. This is a cross section weighted available momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available momentum. + * + * @return The requested multi-group available momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average momentum for the requested label for the requested product. This is a cross section weighted average momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average momentum. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition momentum for the requested label. This is a cross section weighted deposition momentum + * summed over all reactions. The deposition momentum is calculated by subtracting the average momentum from each transportable particle + * from the available momentum. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition momentum. + * + * @return The requested multi-group deposition momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupDepositionMomentum( a_smr, a_settings, a_temperatureInfo, a_particles, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, gain for the requested particle and label. This is a cross section weighted gain summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The PoPs' id for the particle whose gain is to be calculated. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the gain. + * + * @return The requested multi-group gain as a **GIDI::Vector**. + ***********************************************************************************************************/ + +Vector ProtareComposite::multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + Vector vector; + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + vector += m_protares[i1]->multiGroupGain( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protares[i1] ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * + * + * @return A list of label, mu cutoff pairs. + ***********************************************************************************************************/ + +stringAndDoublePairs ProtareComposite::muCutoffForCoulombPlusNuclearElastic( ) const { + + stringAndDoublePairs muCutoffs; + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + stringAndDoublePairs muCutoffs2 = m_protares[i1]->muCutoffForCoulombPlusNuclearElastic( ); + + for( stringAndDoublePairs::iterator iter = muCutoffs2.begin( ); iter < muCutoffs2.end( ); ++iter ) muCutoffs.push_back( *iter ); + } + + return( muCutoffs ); +} + +/* *********************************************************************************************************//** + * Returns the list of DelayedNeutronProduct instances. + * + * @return The list of delayed neutrons. + ***********************************************************************************************************/ + +DelayedNeutronProducts ProtareComposite::delayedNeutronProducts( ) const { + + DelayedNeutronProducts delayedNeutronProducts1; + + if( hasFission( ) ) { + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + DelayedNeutronProducts delayedNeutronProducts2 = m_protares[i1]->delayedNeutronProducts( ); + + delayedNeutronProducts1.insert( delayedNeutronProducts1.end( ), delayedNeutronProducts2.begin( ), delayedNeutronProducts2.end( ) ); + } + } + + return( delayedNeutronProducts1 ); +} + +/* *********************************************************************************************************//** + * Calls the **incompleteParticles** method for each **ProtareSingle** in *this*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void ProtareComposite::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + m_protares[i1]->incompleteParticles( a_settings, a_incompleteParticles ); + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_protareTNSL.cc b/source/processes/hadronic/models/lend/src/GIDI_protareTNSL.cc new file mode 100644 index 0000000000..a828c32729 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_protareTNSL.cc @@ -0,0 +1,1061 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class ProtareTNSL + * Class to store <**reactionSuite**> nodes required for thermal neutron scattering law. + */ + +/* *********************************************************************************************************//** + * ProtareTNSL constructor. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_protare [in] The non-TNSL **ProtareSingle**. + * @param a_TNSL [in] The TNSL **ProtareSingle**. + ***********************************************************************************************************/ + +ProtareTNSL::ProtareTNSL( LUPI_maybeUnused Construction::Settings const &a_construction, ProtareSingle *a_protare, ProtareSingle *a_TNSL ) : + m_protare( a_protare ), + m_TNSL( a_TNSL ), + m_elasticReaction( nullptr ) { + + if( a_protare->projectile( ).ID( ) != PoPI::IDs::neutron ) throw Exception( "ProtareTNSL::ProtareTNSL: a_protare neutron as target." ); + if( a_TNSL->projectile( ).ID( ) != PoPI::IDs::neutron ) throw Exception( "ProtareTNSL::ProtareTNSL: a_TNSL not thermal neutron scattering protare." ); + + setProjectile( a_protare->projectile( ) ); + setTarget( a_protare->target( ) ); + + for( std::size_t i1 = 0; i1 < m_protare->numberOfReactions( ); ++i1 ) { + Reaction *reaction = m_protare->reaction( i1 ); + + if( reaction->ENDF_MT( ) == 2 ) { + m_elasticReaction = reaction; + break; + } + } + + if( m_elasticReaction == nullptr ) throw Exception( "ProtareTNSL::ProtareTNSL: could not find elastic reaction in a_protare." ); + + m_maximumTNSL_MultiGroupIndex[""] = 0; // In case temperatureInfo.heatedMultiGroup( ) is an empty string. Is this needed? + Styles::TemperatureInfos temperatures = m_TNSL->temperatures( ); + Transporting::MG settings( m_TNSL->projectile( ).ID( ), Transporting::Mode::multiGroup, Transporting::DelayedNeutrons::off ); + LUPI::StatusMessageReporting smr1; + for( auto iter = temperatures.begin( ); iter != temperatures.end( ); ++iter ) { + std::string label = iter->heatedMultiGroup( ); + + if( label != "" ) { + std::size_t i1 = 0; + std::size_t maximumMultiGroupIndex = 0; + + Vector crossSection = m_TNSL->multiGroupCrossSection( smr1, settings, *iter ); + smr1.clear( ); + for( ; i1 < crossSection.size( ); ++i1 ) { + if( crossSection[i1] == 0 ) break; + } + maximumMultiGroupIndex = i1; + // The check of multiplicity is needed because FUDGE has a inconsistency in what maximum energy + // to use for TNSL calculations. The following lines can be remove when this issue is resolved in FUDGE. + // This should not be needed for data produced after 15/Jan/2021 or probably earlier as FUDGE was fixed. + Vector multiplicity = m_TNSL->multiGroupMultiplicity( smr1, settings, *iter, PoPI::IDs::neutron ); + smr1.clear( ); + for( i1 = 0; i1 < multiplicity.size( ); ++i1 ) { + if( multiplicity[i1] == 0 ) break; + } + if( i1 < maximumMultiGroupIndex ) maximumMultiGroupIndex = i1; + + m_maximumTNSL_MultiGroupIndex[label] = maximumMultiGroupIndex; + } + } + + m_elasticReaction->modifiedMultiGroupElasticForTNSL( m_maximumTNSL_MultiGroupIndex ); + +// FIXME do I need to check that data are consistence. +} + +/* *********************************************************************************************************//** + ******************************************************************/ + +ProtareTNSL::~ProtareTNSL( ) { + + delete m_protare; + delete m_TNSL; +} + +/* *********************************************************************************************************//** + * Returns the maximum number of usable multi-groups for the thermal neutron scattering law protare for the request multi-group label in *a_temperatureInfo*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return The last multigroup index for which the TNSL protare has cross section data. Above this index, the cross section, et al. data must come from the standard protare. + ******************************************************************/ + +std::size_t ProtareTNSL::maximumTNSL_MultiGroupIndex( Styles::TemperatureInfo const &a_temperatureInfo ) const { + + return( m_maximumTNSL_MultiGroupIndex.at( a_temperatureInfo.heatedMultiGroup( ) ) ); +} + +/* *********************************************************************************************************//** + * Removes the elastic component from *a_vector* and adds in the TNSL component. + * + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_vector [in/out] The vector from the non TNSL protare. + * @param a_vectorElastic [in] The vector from the elastic reactino from the non TNSL protare. + * @param a_vectorTNSL [in] The vector from the TNSL protare. + ******************************************************************/ + +void ProtareTNSL::combineVectors( LUPI_maybeUnused Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, Vector &a_vector, Vector const &a_vectorElastic, Vector const &a_vectorTNSL ) const { + + if( a_vectorTNSL.size( ) == 0 ) return; + + std::size_t maximumMultiGroupIndex = m_maximumTNSL_MultiGroupIndex.at( a_temperatureInfo.heatedMultiGroup( ) ); + + for( std::size_t i1 = 0; i1 < maximumMultiGroupIndex; ++i1 ) a_vector[i1] += a_vectorTNSL[i1] - a_vectorElastic[i1]; +} + +/* *********************************************************************************************************//** + * Removes the elastic component from *a_matrix* and adds in the TNSL component. + * + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_matrix [in/out] The matrix from the non TNSL protare. + * @param a_matrixElastic [in] The matrix from the elastic reactino from the non TNSL protare. + * @param a_matrixTNSL [in] The matrix from the TNSL protare. + ******************************************************************/ + +void ProtareTNSL::combineMatrices( LUPI_maybeUnused Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, Matrix &a_matrix, Matrix const &a_matrixElastic, Matrix const &a_matrixTNSL ) const { + + if( a_matrixTNSL.size( ) == 0 ) return; + + std::size_t maximumMultiGroupIndex = m_maximumTNSL_MultiGroupIndex.at( a_temperatureInfo.heatedMultiGroup( ) ); + + for( std::size_t i1 = 0; i1 < maximumMultiGroupIndex; ++i1 ) { + Vector const &rowTNSL = a_matrixTNSL[i1]; + Vector const &rowElastic = a_matrixElastic[i1]; + Vector &row = a_matrix[i1]; + + for( std::size_t i2 = 0; i2 < a_matrixTNSL.size( ); ++i2 ) row[i2] += rowTNSL[i2] - rowElastic[i2]; + } +} + +/* *********************************************************************************************************//** + * Returns the GNDS format version for the (a_index+1)^th Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose format version is returned. + * + * @return The format version. + ******************************************************************/ + +LUPI::FormatVersion const &ProtareTNSL::formatVersion( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->formatVersion( ) ); + if( a_index == 1 ) return( m_TNSL->formatVersion( ) ); + throw Exception( "ProtareTNSL::formatVersion: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the file name for the (a_index+1)^th Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose file name is returned. + * + * @return The file name. + ******************************************************************/ + +std::string const &ProtareTNSL::fileName( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->fileName( ) ); + if( a_index == 1 ) return( m_TNSL->fileName( ) ); + throw Exception( "ProtareTNSL::fileName: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the real file name for the (a_index+1)^th Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose real file name is returned. + * + * @return The real file name. + ******************************************************************/ + +std::string const &ProtareTNSL::realFileName( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->realFileName( ) ); + if( a_index == 1 ) return( m_TNSL->realFileName( ) ); + throw Exception( "ProtareTNSL::realFileName: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the list of libraries for the (a_index+1)^th contained Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose libraries are to be returned. + * + * @return The list of libraries. + ******************************************************************/ + +std::vector ProtareTNSL::libraries( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->libraries( ) ); + if( a_index == 1 ) return( m_TNSL->libraries( ) ); + throw Exception( "ProtareTNSL::libraries: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the evaluation for the (a_index+1)^th Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose evaluation is returned. + * + * @return The evaluation. + ******************************************************************/ + +std::string const &ProtareTNSL::evaluation( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->evaluation( ) ); + if( a_index == 1 ) return( m_TNSL->evaluation( ) ); + throw Exception( "ProtareTNSL::evaluation: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the projectile frame for the (a_index+1)^th Protare. The index **a_index** can only be 0 (normal protare) or 1 (TNSL protare). + * + * @param a_index [in] The index of the Protare whose projectile frame is returned. + * + * @return The projectile frame. + ******************************************************************/ + +Frame ProtareTNSL::projectileFrame( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare->projectileFrame( ) ); + if( a_index == 1 ) return( m_TNSL->projectileFrame( ) ); + throw Exception( "ProtareTNSL::projectileFrame: index can only be 0 or 1." ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. Can only be 0 or 1. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +ProtareSingle *ProtareTNSL::protare( std::size_t a_index ) { + + if( a_index == 0 ) return( m_protare ); + if( a_index == 1 ) return( m_TNSL ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. Can only be 0 or 1. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +ProtareSingle const *ProtareTNSL::protare( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protare ); + if( a_index == 1 ) return( m_TNSL ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the number of LazyParsingHelperForms instantiated. + * + * @return The number of LazyParsingHelperForms instantiated. + ******************************************************************/ + +int ProtareTNSL::numberOfLazyParsingHelperForms( ) const { + + return( m_protare->numberOfLazyParsingHelperForms( ) + m_TNSL->numberOfLazyParsingHelperForms( ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of instantiated LazyParsingHelperForms replaced with the appropriate form. + * + * @return The number of LazyParsingHelperForms replaced. + ******************************************************************/ + +int ProtareTNSL::numberOfLazyParsingHelperFormsReplaced( ) const { + + return( m_protare->numberOfLazyParsingHelperFormsReplaced( ) + m_TNSL->numberOfLazyParsingHelperFormsReplaced( ) ); +} + +/* *********************************************************************************************************//** + * Returns the threshold factor for the projectile hitting the target. + * + * @return The threshold factor. + ******************************************************************/ + +double ProtareTNSL::thresholdFactor( ) const { + + return( m_protare->thresholdFactor( ) ); +} + +/* *********************************************************************************************************//** + * Returns the Documentation_1_10::Suite from the non TNSL protare. + * + * @return The Documentation_1_10::Suite. + ******************************************************************/ + +Documentation_1_10::Suite &ProtareTNSL::documentations( ) { + + return( m_protare->documentations( ) ); +} + +/* *********************************************************************************************************//** + * Returns the style with label *a_label* from the non TNSL protare. + * + * @param a_label [in] The label of the requested style. + * @return The style with label *a_label*. + ******************************************************************/ + +Styles::Base &ProtareTNSL::style( std::string const a_label ) { + + return( m_protare->style( a_label ) ); +} + +/* *********************************************************************************************************//** + * Returns the Styles::Suite from the non TNSL protare. + * + * @return The Styles::Suite. + ******************************************************************/ + +Styles::Suite &ProtareTNSL::styles( ) { + + return( m_protare->styles( ) ); +} + +/* *********************************************************************************************************//** + * Returns the Styles::Suite from the non TNSL protare. + * + * @return The Styles::Suite. + ******************************************************************/ + +Styles::Suite const &ProtareTNSL::styles( ) const { + + return( m_protare->styles( ) ); +} + +/* *********************************************************************************************************//** + * Returns the intid for the requested particle or -1 if the particle is not in *m_protare* PoPs database. + * + * @param a_id [in] The GNDS PoPs id for particle whose intd is requested. + * + * @return C++ int for the requested particle or -1 if particle is not in PoPs. + ******************************************************************/ + +int ProtareTNSL::intid( std::string const &a_id ) const { + + return( m_protare->intid( a_id ) ); +} + +/* *********************************************************************************************************//** + * Calls productIDs for each Protare contained in *this*. + * + * @param a_ids [in] Contains the list of particle ids. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If *true* only transportable particle ids are added to *a_ids*. + ******************************************************************/ + +void ProtareTNSL::productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + m_protare->productIDs( a_ids, a_particles, a_transportablesOnly ); + m_TNSL->productIDs( a_ids, a_particles, a_transportablesOnly ); +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for a give product for a give label. + * Loops over all contained Protares to determine the maximum Legredre order. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int ProtareTNSL::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + int maximumLegendreOrder1 = m_protare->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + int maximumLegendreOrder2 = m_TNSL->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ); + + if( maximumLegendreOrder1 > maximumLegendreOrder2 ) return( maximumLegendreOrder1 ); + return( maximumLegendreOrder2 ); +} + +/* *********************************************************************************************************//** + * Returns a list of all process temperature data from the non TNSL protare. For each temeprature, the labels for its + * + * + heated cross section data, + * + gridded cross section data, + * + multi-group data, and + * + multi-group upscatter data. + * + * are returned. If no data are present for a give data type (e.g., gridded cross section, multi-group upscatter), its label is an empty std::string. + * + * @return The list of temperatures and their labels via an Styles::TemperatureInfos instance. The Styles::TemperatureInfos class + * has many (if not all) the method of a std::vector. + ***********************************************************************************************************/ + +Styles::TemperatureInfos ProtareTNSL::temperatures( ) const { + + return( m_protare->temperatures( ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of reactions from the non TNSL protare. + * + * @return The total number of reactions. + ******************************************************************/ + +std::size_t ProtareTNSL::numberOfReactions( ) const { + + return( m_TNSL->numberOfReactions( ) + m_protare->numberOfReactions( ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction from the non TNSL protare. + * + * @param a_index [in] The index of the requested reaction. + * @return The (*a_index*+1)th reaction. + ***********************************************************************************************************/ + +Reaction *ProtareTNSL::reaction( std::size_t a_index ) { + + int index = a_index - m_TNSL->numberOfReactions( ); + + if( index < 0 ) return( m_TNSL->reaction( a_index ) ); + return( m_protare->reaction( index ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction from the non TNSL protare. + * + * @param a_index [in] The index of the requested reaction. + * @return The (*a_index*+1)th reaction. + ***********************************************************************************************************/ + +Reaction const *ProtareTNSL::reaction( std::size_t a_index ) const { + + int index = a_index - m_TNSL->numberOfReactions( ); + + if( index < 0 ) return( m_TNSL->reaction( a_index ) ); + return( m_protare->reaction( a_index ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th reaction from the non TNSL protare or **nullptr**. If the indexed reaction is + * deactivated or exlucded, a **nullptr** is returned. + * + * @param a_index [in] The index of the requested reaction. + * @param a_settings [in] Specifies the requested label. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The (*a_index*+1)th reaction or a **nullptr**. + ***********************************************************************************************************/ + +Reaction const *ProtareTNSL::reaction( std::size_t a_index, Transporting::MG const &a_settings, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + int index = a_index - m_TNSL->numberOfReactions( ); + + if( index < 0 ) return( m_TNSL->reaction( a_index, a_settings, a_reactionsToExclude ) ); + return( m_protare->reaction( a_index, a_settings, a_reactionsToExclude ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of orphanProduct's from the non TNSL protare. + * + * @return The total number of orphanProducts. + ******************************************************************/ + +std::size_t ProtareTNSL::numberOfOrphanProducts( ) const { + + return( m_protare->numberOfOrphanProducts( ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th orphanProduct from the non TNSL protare. + * + * @param a_index [in] The index of the requested orphanProduct. + * @return The (*a_index*+1)th orphanProduct. + ***********************************************************************************************************/ + +Reaction *ProtareTNSL::orphanProduct( std::size_t a_index ) { + + return( m_protare->orphanProduct( a_index ) ); +} + +/* *********************************************************************************************************//** + * Returns the (*a_index*+1)th orphanProduct from the non TNSL protare. + * + * @param a_index [in] The index of the requested orphanProduct. + * @return The (*a_index*+1)th orphanProduct. + ***********************************************************************************************************/ + +Reaction const *ProtareTNSL::orphanProduct( std::size_t a_index ) const { + + return( m_protare->orphanProduct( a_index ) ); +} + +/* *********************************************************************************************************//** + * Re-indexs the reactions in the reactions, orphanProducts and fissionComponents suites. + * + ***********************************************************************************************************/ + +void ProtareTNSL::updateReactionIndices( LUPI_maybeUnused int a_offset ) const { + + m_TNSL->updateReactionIndices( 0 ); + m_protare->updateReactionIndices( m_TNSL->numberOfReactions( ) ); +} + +/* *********************************************************************************************************//** + * Returns true if at least one reaction contains a fission channel. + * + * @return true if at least one reaction contains a fission channel and false otherwise. + ***********************************************************************************************************/ + +bool ProtareTNSL::hasFission( ) const { + + return( m_protare->hasFission( ) ); +} + +/* *********************************************************************************************************//** + * Returns **false* if protare has delayed fission neutrons for an active reaction and they are not complete; otherwise, returns **true**. + * + * @return bool + ***********************************************************************************************************/ + +bool ProtareTNSL::isDelayedFissionNeutronComplete( ) const { + + return( m_protare->isDelayedFissionNeutronComplete( ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group boundaries for the requested label and product. + * + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] ID for the requested product. + * + * @return List of multi-group boundaries. + ***********************************************************************************************************/ + +std::vector ProtareTNSL::groupBoundaries( Transporting::MG const &a_settings, Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + return( m_protare->groupBoundaries( a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the inverse speeds for the requested label from the non TNSL protare. The label must be for a heated multi-group style. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return List of inverse speeds. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupInverseSpeed( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + return( m_protare->multiGroupInverseSpeed( a_smr, a_settings, a_temperatureInfo ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total cross section for the requested label. This is summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the cross section. + * + * @return The requested multi-group cross section as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, + m_TNSL->multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total Q for the requested label. This is a cross section weighted multiplicity + * summed over all reactions + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If false, only the Q for the primary reactions are return, otherwise, the Q for the final reactions. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the Q. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final, bool a_effectivePhotoAtomic, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final, a_effectivePhotoAtomic ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final, a_effectivePhotoAtomic ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total multiplicity for the requested label for the requested product. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission neutron multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupFissionNeutronMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + return( m_protare->multiGroupFissionNeutronMultiplicity( a_smr, a_settings, a_temperatureInfo, a_reactionsToExclude ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total fission gamma multiplicity for the requested label. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the multiplicity. + * + * @return The requested multi-group fission neutron multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupFissionGammaMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + return( m_protare->multiGroupFissionGammaMultiplicity( a_smr, a_settings, a_temperatureInfo, a_reactionsToExclude ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total product matrix for the requested label for the requested product id for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] PoPs id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the product matrix. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareTNSL::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + std::string const &a_productID, int a_order, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Matrix matrix = m_protare->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( matrix ); + + Matrix matrixElastic = m_elasticReaction->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + Matrix matrixTNSL = m_TNSL->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + + combineMatrices( a_settings, a_temperatureInfo, matrix, matrixElastic, matrixTNSL ); + return( matrix ); +} + +/* *********************************************************************************************************//** + * Like ProtareTNSL::multiGroupProductMatrix, but only returns the fission neutron, transfer matrix. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Requested product matrix, Legendre order. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the fission matrix. + * + * @return The requested multi-group neutron fission matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix ProtareTNSL::multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + return( m_protare->multiGroupFissionMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_order, a_reactionsToExclude ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group transport correction for the requested label. The transport correction is calculated from the transfer matrix + * for the projectile id for the Legendre order of *a_order + 1*. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Maximum Legendre order for transport. The returned transport correction is for the next higher Legender order. + * @param a_transportCorrectionType [in] Requested transport correction type. + * @param a_temperature [in] The temperature of the flux to use when collapsing. Pass to the GIDI::collapse method. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the transport correction. + * + * @return The requested multi-group transport correction as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupTransportCorrection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order, + TransportCorrectionType a_transportCorrectionType, double a_temperature, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + if( a_transportCorrectionType == TransportCorrectionType::None ) return( Vector( 0 ) ); + + Matrix matrix( multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, projectile( ).ID( ), a_order + 1, + a_reactionsToExclude ) ); + Matrix matrixCollapsed = collapse( matrix, a_settings, a_particles, a_temperature, projectile( ).ID( ) ); + std::size_t size = matrixCollapsed.size( ); + std::vector transportCorrection1( size, 0 ); + + if( a_transportCorrectionType == TransportCorrectionType::None ) { + } + else if( a_transportCorrectionType == TransportCorrectionType::Pendlebury ) { + for( std::size_t index = 0; index < size; ++index ) transportCorrection1[index] = matrixCollapsed[index][index]; } + else { + throw Exception( "Unsupported transport correction: only None and Pendlebury (i.e., Pendlebury/Underhill) are currently supported." ); + } + return( Vector( transportCorrection1 ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available energy for the requested label. This is a cross section weighted available energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available energy. + * + * @return The requested multi-group available energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average energy for the requested label for the requested product. This is a cross section weighted average energy + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average energy. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition energy for the requested label. This is a cross section weighted deposition energy + * summed over all reactions. The deposition energy is calculated by subtracting the average energy from each transportable particle + * from the available energy. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and the products that are transported. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition energy. + * + * @return The requested multi-group deposition energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupDepositionEnergy( a_smr, a_settings, a_temperatureInfo, a_particles ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available momentum for the requested label. This is a cross section weighted available momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the available momentum. + * + * @return The requested multi-group available momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average momentum for the requested label for the requested product. This is a cross section weighted average momentum + * summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the average momentum. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition momentum for the requested label. This is a cross section weighted deposition momentum + * summed over all reactions. The deposition momentum is calculated by subtracting the average momentum from each transportable particle + * from the available momentum. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the deposition momentum. + * + * @return The requested multi-group deposition momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupDepositionMomentum( a_smr, a_settings, a_temperatureInfo, a_particles, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupDepositionMomentum( a_smr, a_settings, a_temperatureInfo, a_particles ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupDepositionMomentum( a_smr, a_settings, a_temperatureInfo, a_particles ) ); + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, gain for the requested particle and label. This is a cross section weighted gain summed over all reactions. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The PoPs' id for the particle whose gain is to be calculated. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the gain. + * + * @return The requested multi-group gain as a **GIDI::Vector**. + ***********************************************************************************************************/ + +Vector ProtareTNSL::multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, + ExcludeReactionsSet const &a_reactionsToExclude ) const { + + std::string const projectile_id = m_protare->projectile( ).ID( ); + ExcludeReactionsSet excludeReactionsSet( a_reactionsToExclude ); + Vector vector = m_protare->multiGroupGain( a_smr, a_settings, a_temperatureInfo, a_productID, excludeReactionsSet ); + excludeReactionsSetAdjust( excludeReactionsSet, *m_protare ); + + if( !m_elasticReaction->active( ) ) return( vector ); + + Vector vectorElastic = m_elasticReaction->multiGroupGain( a_smr, a_settings, a_temperatureInfo, a_productID, projectile_id ); + + combineVectors( a_settings, a_temperatureInfo, vector, vectorElastic, m_TNSL->multiGroupGain( a_smr, a_settings, a_temperatureInfo, a_productID ) ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * If the protare is a ProtareTNSL then summing over all reactions will include the standard protare's elastic cross section + * in the domain of the TNSL data. The standard elastic cross section should not be added in this domain. + * If needed, this function corrects the cross section for this over counting of the elastic cross section. + * + * @param a_label [in] The label of the elastic cross section data to use if over counting needs to be corrected. + * @param a_crossSectionSum [in] The cross section to correct. + ***********************************************************************************************************/ + +void ProtareTNSL::TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::XYs1d &a_crossSectionSum ) { + + double projectileEnergyMax = m_TNSL->projectileEnergyMax( ); + Functions::XYs1d *xys1d = m_elasticReaction->crossSection( ).get( a_label ); + + ptwXYPoints *ptwXY = const_cast( xys1d->ptwXY( ) ); + ptwXYPoints *sliced = ptwXY_domainMaxSlice( NULL, ptwXY, projectileEnergyMax, ptwXY_length( NULL, ptwXY ), 1 ); + Functions::XYs1d slicedXYs1d( a_crossSectionSum.axes( ), sliced ); + + a_crossSectionSum -= slicedXYs1d; +} + +/* *********************************************************************************************************//** + * If the protare is a ProtareTNSL then summing over all reactions will include the standard protare's elastic cross section + * in the domain of the TNSL data. The standard elastic cross section should not be added in this domain. + * If needed, this function corrects the cross section for this over counting of the elastic cross section. + * + * @param a_label [in] The label of the elastic cross section data to use if over counting needs to be corrected. + * @param a_crossSectionSum [in] The cross section to correct. + ***********************************************************************************************************/ + +void ProtareTNSL::TNSL_crossSectionSumCorrection( std::string const &a_label, Functions::Ys1d &a_crossSectionSum ) { + + double projectileEnergyMax = m_TNSL->projectileEnergyMax( ); + Styles::GriddedCrossSection const *griddedCrossSection = m_protare->styles( ).get( a_label ); + nf_Buffer const energies = griddedCrossSection->grid( ).values( ); + Functions::Ys1d const *ys1d = m_elasticReaction->crossSection( ).get( a_label ); + + std::size_t start = ys1d->start( ); + std::vector const &Ys = ys1d->Ys( ); + std::vector &crossSectionYs = a_crossSectionSum.Ys( ); + for( std::size_t index = 0; index < Ys.size( ); ++index ) { + if( energies[index] > projectileEnergyMax ) break; + crossSectionYs[index+start] -= Ys[index]; + } +} + +/* *********************************************************************************************************//** + * This method always returns 1 since the projectile is always a neutron. + * + * @return Always returns 1. + ***********************************************************************************************************/ + +stringAndDoublePairs ProtareTNSL::muCutoffForCoulombPlusNuclearElastic( ) const { + + stringAndDoublePairs stringAndDoublePairs1; + + return( stringAndDoublePairs1 ); +} + +/* *********************************************************************************************************//** + * Calls the **incompleteParticles** method for each **ProtareSingle** in *this*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void ProtareTNSL::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + m_protare->incompleteParticles( a_settings, a_incompleteParticles ); + m_TNSL->incompleteParticles( a_settings, a_incompleteParticles ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_reaction.cc b/source/processes/hadronic/models/lend/src/GIDI_reaction.cc new file mode 100644 index 0000000000..f4ec4b54ea --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_reaction.cc @@ -0,0 +1,991 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/* *********************************************************************************************************//** + * Parses a <**reaction**> node. + ***********************************************************************************************************/ + +Reaction::Reaction( int a_ENDF_MT, std::string a_fissionGenre ) : + Form( FormType::reaction ), + m_active( true ), + m_ENDF_MT( a_ENDF_MT ), + m_fissionGenre( a_fissionGenre ), + m_QThreshold( 0.0 ), + m_crossSectionThreshold( 0.0 ), + m_twoBodyThreshold( 0.0 ), + m_isPairProduction( false ), + m_isPhotoAtomicIncoherentScattering( false ), + m_RutherfordScatteringPresent( false ), + m_onlyRutherfordScatteringPresent( false ), + m_nuclearPlusInterferencePresent( false ), + m_decayPositronium( false ), + m_doubleDifferentialCrossSection( GIDI_doubleDifferentialCrossSectionChars, GIDI_labelChars ), + m_crossSection( GIDI_crossSectionChars, GIDI_labelChars ), + m_availableEnergy( GIDI_availableEnergyChars, GIDI_labelChars ), + m_availableMomentum( GIDI_availableMomentumChars, GIDI_labelChars ), + m_outputChannel( ) { + + setMoniker( GIDI_reactionChars ); + + ENDL_CFromENDF_MT( m_ENDF_MT, &m_ENDL_C, &m_ENDL_S ); +} + +/* *********************************************************************************************************//** + * Parses a <**reaction**> node. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The reaction HAPI::Node to be parsed and used to construct the reaction. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_protare [in] The GIDI::Protare this reaction belongs to. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +Reaction::Reaction( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, Protare const &a_protare, Styles::Suite const *a_styles ) : + Form( a_node, a_setupInfo, FormType::reaction ), + m_active( true ), + m_ENDF_MT( a_node.attribute_as_int( GIDI_ENDF_MT_Chars ) ), + m_ENDL_C( 0 ), + m_ENDL_S( 0 ), + m_fissionGenre( a_node.attribute_as_string( GIDI_fissionGenreChars ) ), + m_QThreshold( 0.0 ), + m_crossSectionThreshold( 0.0 ), + m_twoBodyThreshold( 0.0 ), + m_isPairProduction( false ), + m_isPhotoAtomicIncoherentScattering( false ), + m_RutherfordScatteringPresent( false ), + m_onlyRutherfordScatteringPresent( false ), + m_nuclearPlusInterferencePresent( false ), + m_decayPositronium( false ), + m_doubleDifferentialCrossSection( a_construction, GIDI_doubleDifferentialCrossSectionChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, + a_internalPoPs, parseDoubleDifferentialCrossSectionSuite, a_styles ), + m_crossSection( a_construction, GIDI_crossSectionChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseCrossSectionSuite, a_styles ), + m_availableEnergy( a_construction, GIDI_availableEnergyChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseAvailableSuite, a_styles ), + m_availableMomentum( a_construction, GIDI_availableMomentumChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseAvailableSuite, a_styles ), + m_outputChannel( nullptr ) { + + m_isPairProduction = label( ).find( "pair production" ) != std::string::npos; + m_decayPositronium = m_isPairProduction && a_construction.decayPositronium( ); + m_isPhotoAtomicIncoherentScattering = false; + if( m_doubleDifferentialCrossSection.size( ) > 0 ) + m_isPhotoAtomicIncoherentScattering = m_doubleDifferentialCrossSection.get( 0 )->type( ) == FormType::incoherentPhotonScattering; + + m_doubleDifferentialCrossSection.setAncestor( this ); + m_crossSection.setAncestor( this ); + m_availableEnergy.setAncestor( this ); + m_availableMomentum.setAncestor( this ); + + a_setupInfo.m_outputChannelLevel = 0; + m_outputChannel = new OutputChannel( a_construction, a_node.child( GIDI_outputChannelChars ), a_setupInfo, a_pops, + a_internalPoPs, a_styles, hasFission( ), true ); + m_outputChannel->setAncestor( this ); + + HAPI::Node const CoulombPlusNuclearElastic = a_node.child( GIDI_doubleDifferentialCrossSectionChars ).first_child( ); + if( CoulombPlusNuclearElastic.name( ) == GIDI_CoulombPlusNuclearElasticChars ) { // Check RutherfordScattering. + m_RutherfordScatteringPresent = true; + m_onlyRutherfordScatteringPresent = true; + for( HAPI::Node child = CoulombPlusNuclearElastic.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + if( child.name( ) != GIDI_RutherfordScatteringChars ) m_onlyRutherfordScatteringPresent = false; + if( child.name( ) == GIDI_nuclearPlusInterferenceChars ) m_nuclearPlusInterferencePresent = true; + } + } + + ENDL_CFromENDF_MT( m_ENDF_MT, &m_ENDL_C, &m_ENDL_S ); + if( a_setupInfo.m_isENDL_C_9 ) m_ENDL_C = 9; + if( m_ENDL_C == 20 ) { + Product *product = m_outputChannel->products( ).get( 0 ); + if( product->particle( ).ID( ) == "H1" ) m_ENDL_C = 21; + } + else if( m_ENDL_C == 22 ) { + Product *product = m_outputChannel->products( ).get( 0 ); + if( product->particle( ).ID( ) == "H2" ) m_ENDL_C = 35; + } + + if( ( a_construction.parseMode( ) != Construction::ParseMode::outline ) && ( a_construction.parseMode( ) != Construction::ParseMode::readOnly ) ) { + double _Q = 0.0; + Form const &QForm = *(m_outputChannel->Q( ).get( 0 )); + switch( QForm.type( ) ) { + case FormType::constant1d : { + Functions::Constant1d const &constant1d = static_cast( QForm ); + _Q = constant1d.value( ); + break; } + case FormType::XYs1d : { + Functions::XYs1d const &xys1d = static_cast( QForm ); + _Q = xys1d.evaluate( 0.0 ); + break; } + case FormType::gridded1d : { // Should be a special reaction (e.g., summed multi-group data) and can be ignored. + _Q = 0.0; + break; } + default : + throw Exception( "Reaction::Reaction: unsupported Q form " + QForm.label( ) ); + } + m_twoBodyThreshold = -_Q * a_protare.thresholdFactor( ); + _Q *= -1; + if( _Q <= 0.0 ) _Q = 0.0; + m_QThreshold = a_protare.thresholdFactor( ) * _Q; + + if( _Q > 0.0 ) { // Try to do a better job determining m_crossSectionThreshold. + std::vector monikers = a_protare.styles( ).findAllOfMoniker( GIDI_griddedCrossSectionStyleChars ); + if( ( a_construction.parseMode( ) != Construction::ParseMode::multiGroupOnly ) && ( monikers.size( ) > 0 ) ) { + Styles::GriddedCrossSection const &griddedCrossSection = static_cast( **monikers[0] ); + Grid grid = griddedCrossSection.grid( ); + + if( m_crossSection.has( griddedCrossSection.label( ) ) ) { + Functions::Ys1d const &ys1d = static_cast( *m_crossSection.get( griddedCrossSection.label( ) ) ); + m_crossSectionThreshold = grid[ys1d.start( )]; + } + } + if( m_crossSectionThreshold == 0.0 ) { // Should also check 'evaluate' style before using m_QThreshold as a default. + m_crossSectionThreshold = m_QThreshold; + } + } + if( m_twoBodyThreshold > 0.0 ) m_twoBodyThreshold = m_crossSectionThreshold; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Reaction::~Reaction( ) { + + if( m_outputChannel != nullptr ) delete m_outputChannel; +} + +/* *********************************************************************************************************//** + * Fills in a std::set with a unique list of all product indices produced by this reaction. + * If a_transportablesOnly is true, only transportable product indices are return. + * + * @param a_ids [out] The unique list of product indices. + * @param a_particles [in] The list of particles to be transported. + * @param a_transportablesOnly [in] If true, only transportable product indices are added in the list. + ***********************************************************************************************************/ + +void Reaction::productIDs( std::set &a_ids, Transporting::Particles const &a_particles, bool a_transportablesOnly ) const { + + if( m_decayPositronium ) { + std::string electronAnti( PoPI::IDs::electron + PoPI::IDs::anti ); + std::set ids; + m_outputChannel->productIDs( ids, a_particles, a_transportablesOnly ); + for( auto iterId = ids.begin( ); iterId != ids.end( ); ++iterId ) { + if( ( *iterId == PoPI::IDs::electron ) || ( *iterId == electronAnti ) ) continue; + a_ids.insert( *iterId ); + } + a_ids.insert( PoPI::IDs::photon ); } + else { + m_outputChannel->productIDs( a_ids, a_particles, a_transportablesOnly ); + } +} + +/* *********************************************************************************************************//** + * Determines the maximum Legredre order present in the multi-group transfer matrix for a give product for a give label. Inspects all + * products produced by this reaction. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id of the requested product. + * + * @return The maximum Legredre order. If no transfer matrix data are present for the requested product, -1 is returned. + ***********************************************************************************************************/ + +int Reaction::maximumLegendreOrder( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + if( m_isPairProduction && ( a_productID == PoPI::IDs::photon ) ) return( 0 ); + return( m_outputChannel->maximumLegendreOrder( a_smr, a_settings, a_temperatureInfo, a_productID ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total multiplicity for the requested label for the requested product. This is a cross section weighted multiplicity. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group multiplicity as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupMultiplicity( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( m_decayPositronium ) { + if( a_productID == PoPI::IDs::photon ) vector += multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ) * 2; } + else { + vector += m_outputChannel->multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns true if at least one output channel contains a fission channel. + * + * @return true if at least one output channel is a fission channel. + ***********************************************************************************************************/ + +bool Reaction::hasFission( ) const { + + if( m_ENDF_MT == 18 ) return( true ); + if( m_ENDF_MT == 19 ) return( true ); + if( m_ENDF_MT == 20 ) return( true ); + if( m_ENDF_MT == 21 ) return( true ); + if( m_ENDF_MT == 38 ) return( true ); + + return( false ); +} + +/* *********************************************************************************************************//** + * Sets *this* reaction's output channel to **a_outputChannel**. + * + * @param a_outputChannel [in] The output channel to make *this* reaction output channel. + ***********************************************************************************************************/ + +void Reaction::setOutputChannel( OutputChannel *a_outputChannel ) { + + m_outputChannel = a_outputChannel; + m_outputChannel->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the TNSL ProtareSingle. + * + * @param a_maximumTNSL_MultiGroupIndex [in] A map that contains labels for heated multi-group data and the last valid group boundary + * for the TNSL data for that boundary. + ***********************************************************************************************************/ + +void Reaction::modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ) { + + m_crossSection.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_availableEnergy.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_availableMomentum.modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); + m_outputChannel->modifiedMultiGroupElasticForTNSL( a_maximumTNSL_MultiGroupIndex ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *Reaction::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_doubleDifferentialCrossSectionChars ) return( &m_doubleDifferentialCrossSection ); + if( a_item == GIDI_crossSectionChars ) return( &m_crossSection ); + if( a_item == GIDI_availableEnergyChars ) return( &m_availableEnergy ); + if( a_item == GIDI_availableMomentumChars ) return( &m_availableMomentum ); + if( a_item == GIDI_outputChannelChars ) return( m_outputChannel ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *Reaction::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_doubleDifferentialCrossSectionChars ) return( &m_doubleDifferentialCrossSection ); + if( a_item == GIDI_crossSectionChars ) return( &m_crossSection ); + if( a_item == GIDI_availableEnergyChars ) return( &m_availableEnergy ); + if( a_item == GIDI_availableMomentumChars ) return( &m_availableMomentum ); + if( a_item == GIDI_outputChannelChars ) return( m_outputChannel ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns **true** if all outgoing particles (i.e., products) are specifed in *a_particles*. That is, the user + * will be tracking all products of *this* reaction. + * + * @param a_particles [in] The list of particles to be transported. + * + * @return bool. + ***********************************************************************************************************/ + +bool Reaction::areAllProductsTracked( Transporting::Particles const &a_particles ) const { + + if( hasFission( ) || m_isPhotoAtomicIncoherentScattering ) return( false ); + + return( m_outputChannel->areAllProductsTracked( a_particles ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, cross section for the requested label the reaction. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return The requested multi-group cross section as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupCrossSection( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + Vector vector( 0 ); + + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( a_smr, m_crossSection, a_temperatureInfo, "cross section" ) ); + if( form != nullptr ) vector = form->data( ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total Q for the requested label. This is a cross section weighted Q. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_final [in] If false, only the Q for the primary reactions are return, otherwise, the Q for the final reactions. + * @param a_reactionsToExclude [in] A list of reaction indices that are to be ignored when calculating the Q. + * + * @return The requested multi-group Q as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupQ( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, bool a_final ) const { + + if( m_decayPositronium ) return( Vector { 0 } ); // Special case, returns Q with all 0.0s. + + return( m_outputChannel->multiGroupQ( a_smr, a_settings, a_temperatureInfo, a_final ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, product matrix for the requested label for the requested product index for the requested Legendre order. + * If no data are found, an empty GIDI::Matrix is returned. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_productID [in] Particle id for the requested product. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group product matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix Reaction::multiGroupProductMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, std::string const &a_productID, int a_order ) const { + + Matrix matrix( 0, 0 ); + + if( m_decayPositronium ) { + if( a_productID == PoPI::IDs::photon ) { + if( a_order == 0 ) { + Vector productionCrossSection = multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ) * 2; + std::map const &particles = a_particles.particles( ); + std::map::const_iterator particle = particles.find( PoPI::IDs::photon ); + GIDI::Transporting::MultiGroup const &multiGroup = particle->second.fineMultiGroup( ); + int multiGroupIndexFromEnergy = multiGroup.multiGroupIndexFromEnergy( PoPI_electronMass_MeV_c2, true ); + Matrix matrix2( productionCrossSection.size( ), productionCrossSection.size( ) ); + + for( std::size_t i1 = 0; i1 < productionCrossSection.size( ); ++i1 ) { + matrix2.set( i1, multiGroupIndexFromEnergy, productionCrossSection[i1] ); + } + matrix += matrix2; + } + } } + else { + matrix += m_outputChannel->multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, a_productID, a_order ); + } + + return( matrix ); +} + +/* *********************************************************************************************************//** + * Like Reaction::multiGroupProductMatrix, but only returns the fission neutron, transfer matrix. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and if delayed neutrons should be included. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * @param a_order [in] Requested product matrix, Legendre order. + * + * @return The requested multi-group neutron fission matrix as a GIDI::Matrix. + ***********************************************************************************************************/ + +Matrix Reaction::multiGroupFissionMatrix( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles, int a_order ) const { + + Matrix matrix( 0, 0 ); + + if( hasFission( ) ) matrix += multiGroupProductMatrix( a_smr, a_settings, a_temperatureInfo, a_particles, PoPI::IDs::neutron, a_order ); + return( matrix ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available energy for the requested label. This is a cross section weighted available energy. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return The requested multi-group available energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupAvailableEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + Vector vector( 0 ); + + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( a_smr, m_availableEnergy, a_temperatureInfo, "available energy" ) ); + if( form != nullptr ) vector = form->data( ); + + if( m_decayPositronium ) + vector -= m_outputChannel->multiGroupQ( a_smr, a_settings, a_temperatureInfo, false ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total average energy for the requested label for the requested product. This is a cross section weighted average energy + * summed over all products for this reaction. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupAverageEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( m_decayPositronium ) { + if( a_productID == PoPI::IDs::photon ) vector += multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ) * 2.0 * PoPI_electronMass_MeV_c2; } + else { + vector += m_outputChannel->multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, a_productID ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition energy for the requested label for *this* reaction. This is a cross section weighted + * deposition energy. The deposition energy is calculated by subtracting the average energy from each transportable particle + * from the available energy. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * This method does not include any photon deposition energy for *this* reaction that is in the **GNDS** orphanProducts node. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label and the products that are transported. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * + * @return The requested multi-group deposition energy as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupDepositionEnergy( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles ) const { + + std::map const &products = a_particles.particles( ); + Vector vector; + + if( moniker( ) != GIDI_orphanProductChars ) { + if( ( a_settings.zeroDepositionIfAllProductsTracked( ) ) && areAllProductsTracked( a_particles ) && !m_isPairProduction ) return( vector ); + + vector = multiGroupAvailableEnergy( a_smr, a_settings, a_temperatureInfo ); + } + + Vector availableEnergy( vector ); + + for( std::map::const_iterator iter = products.begin( ); iter != products.end( ); ++iter ) { + vector -= multiGroupAverageEnergy( a_smr, a_settings, a_temperatureInfo, iter->first ); + } + + for( std::size_t index = 0; index < availableEnergy.size( ); ++index ) { // Check for values that should probably be 0.0. + if( std::fabs( vector[index] ) < std::fabs( 1e-14 * availableEnergy[index] ) ) vector[index] = 0.0; + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total available momentum for the requested label. This is a cross section weighted available momentum. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * + * @return The requested multi-group available momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupAvailableMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo ) const { + + Vector vector( 0 ); + + Functions::Gridded1d const *form = dynamic_cast( a_settings.form( a_smr, m_availableMomentum, a_temperatureInfo, "available momentum" ) ); + if( form != nullptr ) vector = form->data( ); + + return( vector ); +} +/* *********************************************************************************************************//** + * Returns the multi-group, total average momentum for the requested label for the requested product. This is a cross section weighted average momentum. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] Particle id for the requested product. + * + * @return The requested multi-group average momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupAverageMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID ) const { + + Vector vector( 0 ); + + if( !m_isPairProduction ) vector += m_outputChannel->multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, a_productID ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, total deposition momentum for the requested label for *this* reaction. This is a cross section + * weighted deposition momentum. The deposition momentum is calculated by subtracting the average momentum from each transportable particle + * from the available momentum. The list of transportable particles is specified via the list of particle specified in the *a_settings* argument. + * This method does not include any photon deposition momentum for *this* reaction that is in the **GNDS** orphanProducts node. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_particles [in] The list of particles to be transported. + * + * @return The requested multi-group deposition momentum as a GIDI::Vector. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupDepositionMomentum( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, Transporting::Particles const &a_particles ) const { + + std::map const &products = a_particles.particles( ); + Vector vector; + + if( moniker( ) != GIDI_orphanProductChars ) { + vector = multiGroupAvailableMomentum( a_smr, a_settings, a_temperatureInfo ); + } + + for( std::map::const_iterator iter = products.begin( ); iter != products.end( ); ++iter ) { + vector -= multiGroupAverageMomentum( a_smr, a_settings, a_temperatureInfo, iter->first ); + } + + return( vector ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group, gain for the requested particle and label. This is a cross section weighted gain summed over all reactions. + * If *a_productID* and *a_projectileID* are the same, then the multi-group cross section is subtracted for the returned value to indicate + * that the *a_projectileID* as been absorted. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_settings [in] Specifies the requested label. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_productID [in] The particle PoPs' id for the whose gain is to be calculated. + * @param a_projectileID [in] The particle PoPs' id for the projectile. + * + * @return The requested multi-group gain as a **GIDI::Vector**. + ***********************************************************************************************************/ + +Vector Reaction::multiGroupGain( LUPI::StatusMessageReporting &a_smr, Transporting::MG const &a_settings, + Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_productID, std::string const &a_projectileID ) const { + + Vector vector( multiGroupMultiplicity( a_smr, a_settings, a_temperatureInfo, a_productID ) ); + + if( PoPI::compareSpecialParticleIDs( a_productID, a_projectileID ) ) vector -= multiGroupCrossSection( a_smr, a_settings, a_temperatureInfo ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * Appends a DelayedNeutronProduct instance for each delayed neutron in *m_delayedNeutrons*. + * + * @param a_delayedNeutronProducts [in/out] The list to append the delayed neutrons to. + ***********************************************************************************************************/ + +void Reaction::delayedNeutronProducts( DelayedNeutronProducts &a_delayedNeutronProducts ) const { + + if( m_outputChannel != nullptr ) m_outputChannel->delayedNeutronProducts( a_delayedNeutronProducts ); +} + +/* *********************************************************************************************************//** + * If *this* has an output channel, this output channel's **incompleteParticles* is called. + * + * @param a_settings [in] Specifies the requested label. + * @param a_incompleteParticles [out] The list of particles whose **completeParticle** method returns *false*. + ***********************************************************************************************************/ + +void Reaction::incompleteParticles( Transporting::Settings const &a_settings, std::set &a_incompleteParticles ) const { + + if( m_outputChannel != nullptr ) m_outputChannel->incompleteParticles( a_settings, a_incompleteParticles ); + if( m_isPairProduction ) a_incompleteParticles.erase( PoPI::IDs::photon ); // Kludge for old processed files. +} + +/* *********************************************************************************************************//** + * Returns, via arguments, the average energy and momentum, and gain for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies the requested label. + * @param a_particleID [in] The particle id of the product. + * @param a_energy [in] The energy of the projectile. + * @param a_productEnergy [in] The average energy of the product. + * @param a_productMomentum [in] The average momentum of the product. + * @param a_productGain [in] The gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void Reaction::continuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, double a_energy, double &a_productEnergy, double &a_productMomentum, + double &a_productGain, bool a_ignoreIncompleteParticles ) const { + + a_productEnergy = 0.0; + a_productMomentum = 0.0; + a_productGain = 0.0; + +// if( ENDF_MT( ) == 516 ) return; // FIXME, may be something wrong with the way FUDGE converts ENDF to GNDS. + + if( m_outputChannel != nullptr ) + m_outputChannel->continuousEnergyProductData( a_settings, a_particleID, a_energy, a_productEnergy, a_productMomentum, a_productGain, + a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * Modifies the average product energies, momenta and gains for product with particle id *a_particleID*. + * + * @param a_settings [in] Specifies user options. + * @param a_particleID [in] The particle id of the product. + * @param a_energies [in] The vector of energies to map the data to. + * @param a_offset [in] The index of the first energy whose data are to be added to the vectors. + * @param a_productEnergies [out] The vector of average energies of the product. + * @param a_productMomenta [out] The vector of average momenta of the product. + * @param a_productGains [out] The vector of gain of the product. + * @param a_ignoreIncompleteParticles [in] If *true*, incomplete particles are ignore, otherwise a *throw* is executed. + ***********************************************************************************************************/ + +void Reaction::mapContinuousEnergyProductData( Transporting::Settings const &a_settings, std::string const &a_particleID, + std::vector const &a_energies, int a_offset, std::vector &a_productEnergies, std::vector &a_productMomenta, + std::vector &a_productGains, bool a_ignoreIncompleteParticles ) const { + +// if( ENDF_MT( ) == 516 ) return; // FIXME, may be something wrong with the way FUDGE converts ENDF to GNDS. + + if( m_outputChannel != nullptr ) + m_outputChannel->mapContinuousEnergyProductData( a_settings, a_particleID, a_energies, a_offset, a_productEnergies, + a_productMomenta, a_productGains, a_ignoreIncompleteParticles ); +} + +/* *********************************************************************************************************//** + * This method modifies the cross section for *this* reaction as + * + * crossSection = a_offset + a_slope * crossSection + * + * Either or both of *a_offset* and *a_slope* can be an empty Functions::XYs1d instance or a nullptr. + * If both *a_offset* and *a_slope* are non-empty Functions::XYs1d instances, the domains of both must be the same. + * If the returned value is false, no data are changed. + * + * @param a_offset [in] A pointer to a XYs1d function for the offset. + * @param a_slope [in] A pointer to a XYs1d function for the slope. + * @param a_updateMultiGroup [in] If true, the multi-group data are also modified. + * + * @return true if data can be modified and false otherwise. + ***********************************************************************************************************/ + +bool Reaction::modifyCrossSection( Functions::XYs1d const *a_offset, Functions::XYs1d const *a_slope, bool a_updateMultiGroup ) { +/* + -) FIXME, this does not modify the total cross section for the protare! Does it needed to be? +*/ + + ProtareSingle &protare( dynamic_cast( *root( ) ) ); + Styles::Suite const &styles = protare.styles( ); + Functions::XYs1d const *offset1 = a_offset, *slope1 = a_slope; + + if( a_offset == nullptr ) offset1 = new Functions::XYs1d( ); // Handle nullptr cases. + if( a_slope == nullptr ) slope1 = new Functions::XYs1d( ); + + if( offset1->size( ) == 0 ) { // Handle empty functions. + if( slope1->size( ) == 0 ) { + if( a_offset == nullptr ) delete offset1; + if( a_slope == nullptr ) delete slope1; + return( false ); + } + Functions::XYs1d const *offset2 = Functions::XYs1d::makeConstantXYs1d( offset1->axes( ), slope1->domainMin( ), slope1->domainMax( ), 0.0 ); + if( a_offset == nullptr ) delete offset1; + offset1 = offset2; } + else if( slope1->size( ) == 0 ) { + Functions::XYs1d const *slope2 = Functions::XYs1d::makeConstantXYs1d( slope1->axes( ), offset1->domainMin( ), offset1->domainMax( ), 1.0 ); + if( a_slope == nullptr ) delete slope1; + slope1 = slope2; + } + + double domainMin = offset1->domainMin( ), domainMax = offset1->domainMax( ); + + if( domainMin != slope1->domainMin( ) ) throw Exception( "GIDI::Reaction::modifyCrossSection: offset and slope domainMins differ." ); + if( domainMax != slope1->domainMax( ) ) throw Exception( "GIDI::Reaction::modifyCrossSection: offset and slope domainMaxs differ." ); + + Styles::TemperatureInfos temperatureInfos = protare.temperatures( ); + + Functions::XYs1d *xys1d = static_cast( + m_crossSection.findInstanceOfTypeInLineage( styles, temperatureInfos[0].heatedCrossSection( ), GIDI_XYs1dChars ) ); + if( xys1d == nullptr ) throw Exception( "GIDI::Reaction::modifyCrossSection: could not find XYs1d cross section." ); + + if( ( xys1d->domainMin( ) >= domainMax ) || ( xys1d->domainMax( ) <= domainMin ) ) { + if( a_offset == nullptr ) delete offset1; + if( a_slope == nullptr ) delete slope1; + return( false ); + } + + double crossSectionDomainMax = xys1d->domainMax( ); + if( xys1d->domainMin( ) > domainMin ) domainMin = xys1d->domainMin( ); + if( crossSectionDomainMax < domainMax ) domainMax = crossSectionDomainMax; + + Functions::XYs1d offset = offset1->domainSlice( domainMin, domainMax, true ); + Functions::XYs1d slope = slope1->domainSlice( domainMin, domainMax, true ); + if( a_offset == nullptr ) delete offset1; + if( a_slope == nullptr ) delete slope1; + + for( auto temperatureInfo = temperatureInfos.begin( ); temperatureInfo != temperatureInfos.end( ); ++temperatureInfo ) { + xys1d = static_cast( + m_crossSection.findInstanceOfTypeInLineage( styles, temperatureInfo->heatedCrossSection( ), GIDI_XYs1dChars ) ); + Functions::XYs1d xys1dSliced = xys1d->domainSlice( domainMin, domainMax, true ); + if( xys1dSliced.interpolation( ) != ptwXY_interpolationLinLin ) { + Functions::XYs1d *temp = xys1dSliced.asXYs1d( true, 1e-3, 1e-6, 1e-6 ); + xys1dSliced = (*temp); + delete temp; + } + Functions::XYs1d modified = offset + slope * xys1dSliced; + + int64_t index1; + ptwXYPoint *p1; + ptwXYPoints *ptwXY = xys1d->ptwXY( ); + int64_t length = ptwXY_length( nullptr, ptwXY ); + for( index1 = 0, p1 = ptwXY->points; index1 < length; ++index1, ++p1 ) { + if( p1->x < domainMin ) continue; + if( p1->x >= domainMax ) { + if( ( p1->x != domainMax ) || ( p1->x != crossSectionDomainMax ) ) break; + } + p1->y = modified.evaluate( p1->x ); + } + + Functions::Ys1d *ys1d = m_crossSection.get( temperatureInfo->griddedCrossSection( ) ); + std::vector &Ys = ys1d->Ys( ); + Styles::GriddedCrossSection const griddedCrossSection = *styles.get( temperatureInfo->griddedCrossSection( ) ); + nf_Buffer const &grid = griddedCrossSection.grid( ).values( ); + std::size_t start = ys1d->start( ), size = ys1d->size( ), index2; + for( index2 = 0; index2 < size; ++index2, ++start ) { + double xValue = grid[start]; + + if( xValue < domainMin ) continue; + if( xValue >= domainMax ) { + if( ( xValue != domainMax ) || ( xValue != crossSectionDomainMax ) ) break; + } + Ys[index2] = modified.evaluate( xValue ); + } + if( a_updateMultiGroup ) recalculateMultiGroupData( &protare, *temperatureInfo ); + } + + return( true ); +} + +/* *********************************************************************************************************//** + * Thid methid is deprecated, use modifyCrossSection instead. See modifyCrossSection for useage. + ***********************************************************************************************************/ + +bool Reaction::modifiedCrossSection( Functions::XYs1d const *a_offset, Functions::XYs1d const *a_slope ) { + + return modifyCrossSection( a_offset, a_slope, false ); +} + +/* *********************************************************************************************************//** + * This function recalculates the multi-group data for data labelled with a_temperatureInfo.heatedMultiGroup(). + * + * @param a_temperatureInfo [in] The temperature for which multi-group data are to be recalculated. + ***********************************************************************************************************/ + +void Reaction::recalculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo ) { + + std::string heatedMultiGroupLabel = a_temperatureInfo.heatedMultiGroup( ); + + GUPI::Ancestry const *ancestorRoot = root( ); + if( ancestorRoot->moniker( ) != GIDI_topLevelChars ) throw Exception( "Reaction::recalculateMultiGroupData: could not find parent protare." ); + + Styles::Suite const &styles = a_protare->styles( ); + if( styles.find( heatedMultiGroupLabel ) == styles.end( ) ) return; + + Styles::HeatedMultiGroup const &heatedMultiGroupStyle = *styles.get( heatedMultiGroupLabel ); + + std::vector groupBoundaries = heatedMultiGroupStyle.groupBoundaries( a_protare->projectile( ).ID( ) ); + Transporting::MultiGroup multiGroup = Transporting::MultiGroup( "recal", groupBoundaries ); + + Transporting::Flux flux( "recal", a_temperatureInfo.temperature( ).value( ) ); + double energies[2] = { groupBoundaries[0], groupBoundaries.back( ) }; + double fluxValues[2] = { 1.0, 1.0 }; + Transporting::Flux_order flux_order( 0, 2, energies, fluxValues ); + flux.addFluxOrder( flux_order ); + + MultiGroupCalulationInformation multiGroupCalulationInformation( multiGroup, flux ); + calculateMultiGroupData( a_protare, a_temperatureInfo, heatedMultiGroupLabel, multiGroupCalulationInformation ); +} + +/* *********************************************************************************************************//** + * This methods calculates multi-group data for all needed components and adds each component's multi-group with label *a_heatedMultiGroupLabel*. + * + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_heatedMultiGroupLabel [in] The label of the style for the multi-group data being added. + * @param a_multiGroupCalulationInformation [in] Store multi-group boundary and flux data used for multi-grouping. + * @param a_crossSectionXYs1d [in[ The cross section weight. + ***********************************************************************************************************/ + +// FIXME maybe, as upscatter is currently not handled. + +void Reaction::calculateMultiGroupData( ProtareSingle const *a_protare, Styles::TemperatureInfo const &a_temperatureInfo, + std::string const &a_heatedMultiGroupLabel, MultiGroupCalulationInformation const &a_multiGroupCalulationInformation ) { + + Styles::Suite const &styles = a_protare->styles( ); + Transporting::MultiGroup multiGroup = a_multiGroupCalulationInformation.m_multiGroup; + + std::vector flatValues { multiGroup[0], 1.0, multiGroup[multiGroup.size( ) - 1], 1.0 }; + Functions::XYs1d flatFunction( Axes( ), ptwXY_interpolationLinLin, flatValues ); + + Functions::XYs1d const *crossSectionXYs1d = static_cast( + m_crossSection.findInstanceOfTypeInLineage( styles, a_temperatureInfo.heatedCrossSection( ), GIDI_XYs1dChars ) ); + + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_crossSection, flatFunction ); + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_availableEnergy, *crossSectionXYs1d ); + calculate1dMultiGroupDataInComponent( a_protare, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, m_availableMomentum, *crossSectionXYs1d ); + + if( m_outputChannel != nullptr ) + m_outputChannel->calculateMultiGroupData( a_protare, a_temperatureInfo, a_heatedMultiGroupLabel, a_multiGroupCalulationInformation, *crossSectionXYs1d ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Reaction::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_ENDF_MT_Chars, intToString( ENDF_MT( ) ) ); + if( m_fissionGenre != "" ) attributes += a_writeInfo.addAttribute( GIDI_fissionGenreChars, m_fissionGenre ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_doubleDifferentialCrossSection.toXMLList( a_writeInfo, indent2 ); + m_crossSection.toXMLList( a_writeInfo, indent2 ); + if( m_outputChannel != nullptr ) m_outputChannel->toXMLList( a_writeInfo, indent2 ); + m_availableEnergy.toXMLList( a_writeInfo, indent2 ); + m_availableMomentum.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Calculates the ENDL C and S values for a ENDF MT value. + * + * @param ENDF_MT [in] The ENDF MT value. + * @param ENDL_C [out] The ENDL C value for the ENDF MT value. + * @param ENDL_S [out] The ENDL S value for the ENDF MT value. + * + * @return Returns 0 if the ENDF MT value is valid and 1 otherwise. + ***********************************************************************************************************/ + +int ENDL_CFromENDF_MT( int ENDF_MT, int *ENDL_C, int *ENDL_S ) { + + int MT1_50ToC[] = { 1, 10, -3, 11, -5, 0, 0, 0, 0, -10, + 32, 0, 0, 0, 0, 12, 13, 15, 15, 15, + 15, 26, 36, 33, -25, 0, -27, 20, 27, -30, + 0, 22, 24, 25, -35, -36, 14, 15, 0, 0, + 29, 16, 0, 17, 34, 0, 0, 0, 0 }; + int MT100_200ToC[] = { -101, 46, 40, 41, 42, 44, 45, 37, -109, 0, + 18, 48, -113, -114, 19, 39, 47, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -152, -153, -154, 43, -156, -157, 23, 31, -160, + -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, + -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, + -181, -182, -183, -184, -185, -186, -187, -188, 28, -190, + -191, -192, 38, -194, -195, -196, -197, -198, -199, -200 }; + *ENDL_C = 0; + *ENDL_S = 0; + if( ENDF_MT <= 0 ) { + *ENDL_C = -ENDF_MT; + return( 1 ); + } + if( ENDF_MT > 1572 ) return( 1 ); + if( ENDF_MT < 50 ) { + *ENDL_C = MT1_50ToC[ENDF_MT - 1]; } + else if( ENDF_MT <= 91 ) { + *ENDL_C = 11; + if( ENDF_MT != 91 ) *ENDL_S = 1; } + else if( ( ENDF_MT > 100 ) && ( ENDF_MT <= 200 ) ) { + *ENDL_C = MT100_200ToC[ENDF_MT - 101]; } + else if( ( ENDF_MT == 452 ) || ( ENDF_MT == 455 ) || ( ENDF_MT == 456 ) || ( ENDF_MT == 458 ) ) { + *ENDL_C = 15; + if( ENDF_MT == 455 ) *ENDL_S = 7; } + else if( ( ENDF_MT >= 502 ) && ( ENDF_MT <= 572 ) ) { + if( ENDF_MT == 502 ) { + *ENDL_C = 71; } + else if( ENDF_MT == 504 ) { + *ENDL_C = 72; } + else if( ( ENDF_MT >= 515 ) && ( ENDF_MT <= 517 ) ) { + *ENDL_C = 74; } + else if( ENDF_MT == 522 ) { + *ENDL_C = 73; } + else if( ( ENDF_MT >= 534 ) && ( ENDF_MT <= 572 ) ) { + *ENDL_C = 73; } } + else if( ENDF_MT >= 600 ) { + if( ENDF_MT < 650 ) { + *ENDL_C = 40; + if( ENDF_MT != 649 ) *ENDL_S = 1; } + else if( ENDF_MT < 700 ) { + *ENDL_C = 41; + if( ENDF_MT != 699 ) *ENDL_S = 1; } + else if( ENDF_MT < 750 ) { + *ENDL_C = 42; + if( ENDF_MT != 749 ) *ENDL_S = 1; } + else if( ENDF_MT < 800 ) { + *ENDL_C = 44; + if( ENDF_MT != 799 ) *ENDL_S = 1; } + else if( ENDF_MT < 850 ) { + *ENDL_C = 45; + if( ENDF_MT != 849 ) *ENDL_S = 1; } + else if( ( ENDF_MT >= 875 ) && ( ENDF_MT <= 891 ) ) { + *ENDL_C = 12; + if( ENDF_MT != 891 ) *ENDL_S = 1; } + else if( ( ENDF_MT >= 1534 ) && (ENDF_MT <= 1572 ) ) { + *ENDL_C = 72; + } + } + + return( 0 ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_recoil2d.cc b/source/processes/hadronic/models/lend/src/GIDI_recoil2d.cc new file mode 100644 index 0000000000..abf9388896 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_recoil2d.cc @@ -0,0 +1,107 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Recoil2d + * Class for the GNDS <**recoil**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_label [in] The GNDS **label** for *this*. + * @param a_href [in] The GNDS **href** for *this*. + ***********************************************************************************************************/ + +Recoil2d::Recoil2d( std::string const &a_label, std::string const &a_href ) : + Function2dForm( GIDI_recoilChars, FormType::recoil2d, ptwXY_interpolationLinLin, 0, 0.0 ), + m_xlink( a_href ) { + + setLabel( a_label ); +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Recoil2d::Recoil2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::recoil2d, a_parent ), + m_xlink( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Recoil2d::~Recoil2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Recoil2d::domainMin( ) const { + + return( 0.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Recoil2d::domainMax( ) const { + + return( 1.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * The angular probability *P(mu|E)* at the point *E* = *a_x2* and *mu* = *a_x1*. + * Currently not implemented. + * + * @param a_x2 [in] The projectile's energy. + * @param a_x1 [in] The product's mu value. + * @return The value of *P(mu|E)*. + ***********************************************************************************************************/ + +double Recoil2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Recoil2d::evaluate: not implemented" ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] This is not used in this method. + ***********************************************************************************************************/ + +void Recoil2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), a_writeInfo.addAttribute( GIDI_hrefChars, m_xlink ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_reference1d.cc b/source/processes/hadronic/models/lend/src/GIDI_reference1d.cc new file mode 100644 index 0000000000..b30bde48ae --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_reference1d.cc @@ -0,0 +1,96 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Reference1d + * Class for the GNDS <**reference**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Reference1d::Reference1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::reference1d, a_parent ), + m_xlink( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Reference1d::~Reference1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Reference1d::domainMin( ) const { + + throw Exception( "Reference1d::domainMin: not implemented" ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Reference1d::domainMax( ) const { + + throw Exception( "Reference1d::domainMax: not implemented" ); +} + +/* *********************************************************************************************************//** + * The **y** value of this at the domain value **a_x1**. + * Currently not implemented. + * + * @param a_x1 [in] Domain value to evaluate this at. + * @return The value of this at the domain value **a_x1**. + ***********************************************************************************************************/ + + +double Reference1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Reference1d::evaluate: not implemented" ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Reference1d::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + + attributes += a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, m_xlink ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_regions1d.cc b/source/processes/hadronic/models/lend/src/GIDI_regions1d.cc new file mode 100644 index 0000000000..3ab32fccde --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_regions1d.cc @@ -0,0 +1,329 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/* *********************************************************************************************************//** + * + * + * @param a_x [in] The + * @param a_epsilon [in] The fractional amount to move the x-value. + * + * @return double. + ***********************************************************************************************************/ + +static double getAdjustedX( double a_x, double a_epsilon ) { + + double xp = a_epsilon; + + if( a_x != 0.0 ) { + if( a_x < 0 ) { + xp = a_x * ( 1.0 - a_epsilon ); } + else { + xp = a_x * ( 1.0 + a_epsilon ); + } + } + + return( xp ); +} + +/*! \class Regions1d + * Class for the GNDS <**regions1d**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Regions1d::Regions1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::regions1d, a_parent ) { + + if( a_setupInfo.m_formatVersion.format( ) != GNDS_formatVersion_1_10Chars ) { + data1dListParse( a_construction, a_node.child( GIDI_function1dsChars ), a_setupInfo, m_function1ds ); + checkSequentialDomainLimits1d( m_function1ds, m_Xs ); + return; // Need to add uncertainty parsing. + } + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_axesChars ) continue; + if( name == GIDI_uncertaintyChars ) continue; + + Function1dForm *_form = data1dParse( a_construction, child, a_setupInfo, nullptr ); + if( _form == nullptr ) throw Exception( "Regions1d::Regions1d: data1dParse returned nullptr." ); + append( _form ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Regions1d::~Regions1d( ) { + + for( std::vector::iterator iter = m_function1ds.begin( ); iter < m_function1ds.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Regions1d::domainMin( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions1d::domainMin: Regions1d has no regions" ); + return( m_Xs[0] ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Regions1d::domainMax( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions1d::domainMax: Regions1d has not regions" ); + return( m_Xs[m_Xs.size( )-1] ); +} + +/* *********************************************************************************************************//** + * Appends the 1d function *a_function* to the region. + * + * @param a_function [in] The 1d function (i.e., 1d region) to append to the Regions1d. + ***********************************************************************************************************/ + +void Regions1d::append( Function1dForm *a_function ) { + + if( dimension( ) != a_function->dimension( ) ) throw Exception( "Regions1d::append: dimensions differ." ); + + double _domainMin = a_function->domainMin( ), _domainMax = a_function->domainMax( ); + + if( m_Xs.size( ) == 0 ) { + m_Xs.push_back( _domainMin ); } + else { + if( m_Xs.back( ) != _domainMin ) throw Exception( "Regions1d::append: regions do not abut." ); + } + + m_Xs.push_back( _domainMax ); + m_function1ds.push_back( a_function ); +} + +/* *********************************************************************************************************//** + * The value of *y(x1)* at the point *a_x1*. + * + * @param a_x1 [in] Domain value to evaluate this at. + * @return The value of this at the point *a_x1*. + ***********************************************************************************************************/ + + +double Regions1d::evaluate( double a_x1 ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions1d::evaluate: Regions1d has not regions" ); + + long iX1 = binarySearchVector( a_x1, m_Xs ); + + if( iX1 < 0 ) { + if( iX1 == -1 ) { /* x1 > last value of Xs. */ + return( m_function1ds.back( )->evaluate( a_x1 ) ); + } + iX1 = 0; /* x1 < last value of Xs. */ + } + return( m_function1ds[iX1]->evaluate( a_x1 ) ); +} + +/* *********************************************************************************************************//** + * Evaluates *this* at the X-values in *a_Xs*[*a_offset*:] and adds the results to *a_results*[*a_offset*:]. + * *a_Xs* and *a_results* must be the same size otherwise a throw is executed. + * + * @param a_offset [in] The offset in *a_Xs* to start. + * @param a_Xs [in] The list of domain values to evaluate *this* at. + * @param a_results [in] The list whose values are added to by the Y-values of *this*. + * @param a_scaleFactor [in] A factor applied to each evaluation before it is added to *a_results*. + ***********************************************************************************************************/ + +void Regions1d::mapToXsAndAdd( int a_offset, std::vector const &a_Xs, std::vector &a_results, double a_scaleFactor ) const { + + for( auto iter = m_function1ds.begin( ); iter < m_function1ds.end( ); ++iter ) { + (*iter)->mapToXsAndAdd( a_offset, a_Xs, a_results, a_scaleFactor ); + } +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] If **true**, the inpolatation of the returned XYs1d instance will always be lin-lin. Otherwise, + * the interpolation depends on the child 1d functions. + * @param a_accuracy [in] The accuracy use to convert the data to lin=lin interpolation if needed. + * @param a_lowerEps [in] The relative domain ammount to put a point below a boundary between two regions. + * @param a_upperEps [in] The relative domain ammount to put a point above a boundary between two regions. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Regions1d::asXYs1d( bool a_asLinlin, double a_accuracy, double a_lowerEps, double a_upperEps ) const { + + XYs1d *xys1d1 = nullptr, *xys1d2 = nullptr; + + if( a_lowerEps < 1e-14 ) a_lowerEps = 0.0; // 1e-14 should be a global parameter. + if( a_upperEps < 1e-14 ) a_upperEps = 0.0; + + if( !a_asLinlin ) { + bool firstRegion = true; + ptwXY_interpolation interpolation2 = ptwXY_interpolationLinLin; + for( auto regionIter = m_function1ds.begin( ); regionIter != m_function1ds.end( ); ++regionIter ) { + if( (*regionIter)->moniker( ) == GIDI_XYs1dChars ) { + xys1d2 = static_cast( *regionIter ); + if( firstRegion ) interpolation2 = ptwXY_getInterpolation( xys1d2->ptwXY( ) ); + if( interpolation2 != ptwXY_getInterpolation( xys1d2->ptwXY( ) ) ) { + a_asLinlin = true; + break; + } } + else { + a_asLinlin = true; + break; + } + } + } + + std::vector xs; + std::vector ys; + + for( auto regionIter = m_function1ds.begin( ); regionIter != m_function1ds.end( ); ++regionIter ) { + xys1d2 = (*regionIter)->asXYs1d( a_asLinlin, a_accuracy, a_lowerEps, a_upperEps ); + if( xys1d2 == nullptr ) { + delete xys1d1; + return( nullptr ); + } + + std::vector xs2( xys1d2->xs( ) ); + if( xs2.size( ) < 2 ) continue; + + std::size_t xySize = xs.size( ); + std::vector ys2( xys1d2->ys( ) ); + if( xySize > 0 ) { + double y1u = ys.back( ); + double y2l = ys2[0]; + + if( y1u == y2l ) { // Simple, just remove last point in xs and ys. + xs.resize( xySize - 1 ); + ys.resize( xySize - 1 ); } + else { + bool addLower = false, addUpper = false; + double x1l = xs[xySize-2]; + double x1u = xs.back( ); + double x2l = xs2[0]; + double x2u = xs2[1]; + double x1up = 0.0, x2lp= 0.0; + + if( a_lowerEps != 0.0 ) { + double x1lp = getAdjustedX( x1l, 0.8 * a_lowerEps ); + x1up = getAdjustedX( x1u, -a_lowerEps ); // Point to add in xs below xs.back() if room. + + addLower = x1lp < x1up; // Only add if relative spacing between existing point is greater than 1.8 * a_lowerEps. + } + + if( a_upperEps > 0 ) { + x2lp = getAdjustedX( x2l, a_upperEps ); // Point to add in xs2 above xs2[0] if room. + double x2up = getAdjustedX( x2u, 0.8 * -a_upperEps ); + + addUpper = x2lp < x2up; // Only add if relative spacing between existing point is greater than 1.8 * a_upperEps. + } + + if( addLower ) { + if( addUpper ) { + xs.back( ) = x1up; + ys.back( ) = xys1d1->evaluate( x1up ); + xs.push_back( x1u ); + ys.push_back( 0.5 * ( y1u + y2l ) ); + xs2[0] = x2lp; + ys2[0] = xys1d2->evaluate( x2lp ); } + else { + xs.back( ) = x1up; + ys.back( ) = xys1d1->evaluate( x1up ); + } } + else if( addUpper ) { + xs2[0] = x2lp; + ys2[0] = xys1d2->evaluate( x2lp ); } + else { + ys2[0] = 0.5 * ( y1u + y2l ); + xs.resize( xySize - 1 ); + ys.resize( xySize - 1 ); + } + } + } + xs.insert( xs.end( ), xs2.begin( ), xs2.end( ) ); + ys.insert( ys.end( ), ys2.begin( ), ys2.end( ) ); + xys1d1 = xys1d2; + } + delete xys1d1; + + return( new XYs1d( axes( ), ptwXY_interpolationLinLin, xs, ys ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Regions1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + a_writeInfo.push_back( indent2 + "" ); + for( std::vector::const_iterator iter = m_function1ds.begin( ); iter != m_function1ds.end( ); ++iter ) (*iter)->toXMLList_func( a_writeInfo, indent3, false, true ); + a_writeInfo.push_back( "" ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * This method calls the write method for each region of *this*. + * + * @param a_file [in] The C FILE instance to write the data to. + * @param a_format [in] The format string passed to each region's write method. + ***********************************************************************************************************/ + +void Regions1d::write( FILE *a_file, std::string const &a_format ) const { + + for( auto regionIter = m_function1ds.begin( ); regionIter != m_function1ds.end( ); ++regionIter ) { + (*regionIter)->write( a_file, a_format ); + } +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_regions2d.cc b/source/processes/hadronic/models/lend/src/GIDI_regions2d.cc new file mode 100644 index 0000000000..a6a5d76ff4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_regions2d.cc @@ -0,0 +1,159 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +/*! \class Regions2d + * Class for the GNDS <**regions2d**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Regions2d::Regions2d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function2dForm( a_construction, a_node, a_setupInfo, FormType::regions2d, a_parent ) { + + if( a_setupInfo.m_formatVersion.format( ) != GNDS_formatVersion_1_10Chars ) { + data2dListParse( a_construction, a_node.child( GIDI_function2dsChars ), a_setupInfo, m_function2ds ); + checkSequentialDomainLimits2d( m_function2ds, m_Xs ); + return; // Need to add uncertainty parsing. + } + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_axesChars ) continue; + if( name == GIDI_uncertaintyChars ) continue; + + Function2dForm *_form = data2dParse( a_construction, child, a_setupInfo, nullptr ); + if( _form == nullptr ) throw Exception( "Regions2d::Regions2d: data2dParse returned nullptr." ); + append( _form ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Regions2d::~Regions2d( ) { + + for( std::vector::iterator iter = m_function2ds.begin( ); iter < m_function2ds.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Regions2d::domainMin( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions2d::domainMin: Regions2d has no regions" ); + return( m_Xs[0] ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Regions2d::domainMax( ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions2d::domainMax: Regions2d has no regions" ); + return( m_Xs[m_Xs.size( )-1] ); +} + +/* *********************************************************************************************************//** + * Appends the 2d function *a_function* to the region. + * + ***********************************************************************************************************/ + +void Regions2d::append( Function2dForm *a_function ) { + + if( dimension( ) != a_function->dimension( ) ) throw Exception( "Regions2d::append: dimensions differ." ); + + double _domainMin = a_function->domainMin( ), _domainMax = a_function->domainMax( ); + + if( m_Xs.size( ) == 0 ) { + m_Xs.push_back( _domainMin ); } + else { + if( m_Xs.back( ) != _domainMin ) throw Exception( "Regions2d::append: regions do not abut." ); + } + + m_Xs.push_back( _domainMax ); + m_function2ds.push_back( a_function ); +} + +/* *********************************************************************************************************//** + * The value of *y(x2,x1)* at the point *a_x2*, *a_x1*. + * + * @param a_x2 [in] The point for the *x2* axis. + * @param a_x1 [in] The point for the *x1* axis. + * @return The value of the function at the point *a_x2*, *a_x1*. + ***********************************************************************************************************/ + +double Regions2d::evaluate( double a_x2, double a_x1 ) const { + + if( m_Xs.size( ) == 0 ) throw Exception( "Regions2d::evaluate: regions2d has no regions" ); + + long iX1 = binarySearchVector( a_x1, m_Xs ); + + if( iX1 < 0 ) { + if( iX1 == -1 ) { /* x1 > last value of Xs. */ + return( m_function2ds.back( )->evaluate( a_x2, a_x1 ) ); + } + iX1 = 0; /* x1 < last value of Xs. */ + } + + return( m_function2ds[iX1]->evaluate( a_x2, a_x1 ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void Regions2d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + axes( ).toXMLList( a_writeInfo, indent2 ); + for( std::vector::const_iterator iter = m_function2ds.begin( ); iter != m_function2ds.end( ); ++iter ) (*iter)->toXMLList_func( a_writeInfo, indent2, false, true ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_resonancesWithBackground1d.cc b/source/processes/hadronic/models/lend/src/GIDI_resonancesWithBackground1d.cc new file mode 100644 index 0000000000..46034420c7 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_resonancesWithBackground1d.cc @@ -0,0 +1,274 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +static ResonanceBackgroundRegion1d *resonanceBackground1dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ); + +/*! \class ResonancesWithBackground1d + * Class for the GNDS <**resonancesWithBackground**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ResonancesWithBackground1d::ResonancesWithBackground1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::resonancesWithBackground1d, a_parent ), + m_resonances( a_node.child( GIDI_resonancesChars ).attribute_as_string( GIDI_hrefChars ) ), + m_background( a_construction, a_node.child( GIDI_resonanceBackground1dChars ), a_setupInfo, nullptr ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == "resonanceRegion" ) { + m_resonances = a_node.attribute_as_string( "href" ); } + else { + /* + if( m_background != NULL ) { + throw new std::runtime_error("Oops"); + } + m_background = data1dParse( child, NULL ); + */ + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ResonancesWithBackground1d::~ResonancesWithBackground1d( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void ResonancesWithBackground1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + a_writeInfo.addNodeStarter( a_indent, moniker( ) ); + + attributes += a_writeInfo.addAttribute( GIDI_hrefChars, m_resonances ); + a_writeInfo.addNodeStarter( indent2, GIDI_resonancesChars, attributes ); + + m_background.toXMLList_func( a_writeInfo, indent2, false, false ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class ResonanceBackground1d + * Class for the GNDS <**background**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ResonanceBackground1d::ResonanceBackground1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::resonanceBackground1d, a_parent ), + m_resolvedRegion( resonanceBackground1dParse( a_construction, a_node.child( GIDI_resolvedRegionChars ), a_setupInfo, nullptr ) ), + m_unresolvedRegion( resonanceBackground1dParse( a_construction, a_node.child( GIDI_unresolvedRegionChars ), a_setupInfo, nullptr ) ), + m_fastRegion( resonanceBackground1dParse( a_construction, a_node.child( GIDI_fastRegionChars ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ResonanceBackground1d::~ResonanceBackground1d( ) { + + delete m_resolvedRegion; + delete m_unresolvedRegion; + delete m_fastRegion; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double ResonanceBackground1d::domainMin( ) const { + + throw Exception( "ResonanceBackground1d::domainMin: not implemented" ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double ResonanceBackground1d::domainMax( ) const { + + throw Exception( "ResonanceBackground1d::domainMax: not implemented" ); +} + +/* *********************************************************************************************************//** + * The value of *y(x1)* at the point *a_x1*. + * Currently not implemented. + * + * @param a_x1 [in] The point for the *x1* axis. + * @return The value of the function at the point *a_x1*. + ***********************************************************************************************************/ + +double ResonanceBackground1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "ResonanceBackground1d::evaluate: not implemented" ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void ResonanceBackground1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ) ); + + m_resolvedRegion->toXMLList_func( a_writeInfo, indent2, false, false ); + m_unresolvedRegion->toXMLList_func( a_writeInfo, indent2, false, false ); + m_fastRegion->toXMLList_func( a_writeInfo, indent2, false, false ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class ResonanceBackgroundRegion1d + * Class for the GNDS <**resolvedRegion**> or GNDS <**fastRegion**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +ResonanceBackgroundRegion1d::ResonanceBackgroundRegion1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::resonanceBackgroundRegion1d, a_parent ), + m_function1d( data1dParse( a_construction, a_node.first_child( ), a_setupInfo, nullptr ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ResonanceBackgroundRegion1d::~ResonanceBackgroundRegion1d( ) { + + delete m_function1d; +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double ResonanceBackgroundRegion1d::domainMin( ) const { + + throw Exception( "ResonanceBackgroundRegion1d::domainMin: not implemented" ); +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double ResonanceBackgroundRegion1d::domainMax( ) const { + + throw Exception( "ResonanceBackgroundRegion1d::domainMax: not implemented" ); +} + +/* *********************************************************************************************************//** + * The value of *y(x1)* at the point *a_x1*. + * Currently not implemented. + * + * @param a_x1 [in] The point for the *x1* axis. + * @return The value of the function at the point *a_x1*. + ***********************************************************************************************************/ + +double ResonanceBackgroundRegion1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "ResonanceBackgroundRegion1d::evaluate: not implemented" ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions2d container. + ***********************************************************************************************************/ + +void ResonanceBackgroundRegion1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, LUPI_maybeUnused bool a_embedded, LUPI_maybeUnused bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ) ); + + if( m_function1d != nullptr ) m_function1d->toXMLList_func( a_writeInfo, indent2, false, false ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Function that parses a node one-d function node. Called from a Suite::parse instance. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * + * @return The parsed and constructed resonanceBackground region instance. + ***********************************************************************************************************/ + +static ResonanceBackgroundRegion1d *resonanceBackground1dParse( Construction::Settings const &a_construction, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, Suite *a_parent ) { + + std::string name( a_node.name( ) ); + + if( name == "" ) return( nullptr ); + + return( new ResonanceBackgroundRegion1d( a_construction, a_node, a_setupInfo, a_parent ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_settings.cc b/source/processes/hadronic/models/lend/src/GIDI_settings.cc index e991f03883..603ab8a937 100644 --- a/source/processes/hadronic/models/lend/src/GIDI_settings.cc +++ b/source/processes/hadronic/models/lend/src/GIDI_settings.cc @@ -1,57 +1,176 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#include +#include "GIDI.hpp" -#include "GIDI_settings.hh" +namespace GIDI { -/* -========================================================= +namespace Transporting { + +/*! \class Settings + * This class is used to instruct deterministic methods and the Monte Carlo API MCGIDI on what data are being requested. */ -/** - This is the top settings class used when a GND file is read. -*/ -GIDI_settings::GIDI_settings( ) { + +/* *********************************************************************************************************//** + * @param a_projectileID [in] The PoPs id for the projectile. + * @param a_delayedNeutrons [in] Flag indicating whether or not delayed neutron data are to be include in the requested data. + ***********************************************************************************************************/ + +Settings::Settings( std::string const &a_projectileID, DelayedNeutrons a_delayedNeutrons ) : + m_projectileID( a_projectileID ), + m_delayedNeutrons( a_delayedNeutrons ), + m_nuclearPlusCoulombInterferenceOnly( false ), + m_throwOnError( true ), + m_zeroDepositionIfAllProductsTracked( true ) { } -/* -========================================================= -*/ -GIDI_settings::~GIDI_settings( ) { + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Settings::~Settings( ) { } -/* -========================================================= -*/ -int GIDI_settings::addParticle( GIDI_settings_particle const &particle ) { - int PoPId = particle.getPoPId( ); +/* *********************************************************************************************************//** + * Returns a Vector of 0.0's of the proper length for the projectile's multi-group data. + * + * @param a_particles [in] The list of particles to be transported. + * @param a_collapse [in] If true, the length of the returned vector is for the collapsed multi-group, otherwise, it is for the uncollapsed multi-group. + * + * @return The Vector of 0.0. + ***********************************************************************************************************/ - if( mParticles.find( PoPId ) != mParticles.end( ) ) return( 1 ); - mParticles.insert( std::pair( PoPId, GIDI_settings_particle( particle ) ) ); - return( 0 ); +Vector Settings::multiGroupZeroVector( Particles const &a_particles, bool a_collapse ) const { + + Particle const *projectile( a_particles.particle( projectileID( ) ) ); + + int n1 = projectile->fineMultiGroup( ).numberOfGroups( ); + if( a_collapse ) n1 = projectile->numberOfGroups( ); + + Vector vector( n1 ); + return( vector ); } -/* -========================================================= -*/ -GIDI_settings_particle const *GIDI_settings::getParticle( int PoPId ) const { - std::map::const_iterator particle = mParticles.find( PoPId ); +/* *********************************************************************************************************//** + * Returns a Matrix of 0.0's of the proper length for the projectile's and product's multi-group data. + * + * @param a_particles [in] The list of particles to be transported. + * @param a_pid [in] The PoPs index for the product. + * @param a_collapse [in] If true, the length of the returned vector is for the collapsed multi-group, otherwise, it is for the uncollapsed multi-group. + * + * @return The Matrix of 0.0. + ***********************************************************************************************************/ - if( particle == mParticles.end( ) ) return( NULL ); - return( &(particle->second) ); +Matrix Settings::multiGroupZeroMatrix( Particles const &a_particles, std::string const &a_pid, bool a_collapse ) const { + + Particle const *projectile( a_particles.particle( projectileID( ) ) ); + Particle const *product( a_particles.particle( a_pid ) ); + + int n1 = projectile->fineMultiGroup( ).numberOfGroups( ); + int n2 = product->fineMultiGroup( ).numberOfGroups( ); + if( a_collapse ) { + n1 = projectile->numberOfGroups( ); + n2 = product->numberOfGroups( ); + } + + Matrix matrix( n1, n2 ); + return( matrix ); } -/* -========================================================= -*/ -int GIDI_settings::eraseParticle( int PoPId ) { - std::map::iterator particle = mParticles.find( PoPId ); +#if 0 +/* *********************************************************************************************************//** + * Prints the contents of *this* to std::cout. Mainly used for debugging. + ***********************************************************************************************************/ + +void Settings::print( ) const { + + std::cout << "setting info:" << std::endl; + std::cout << " transport mode = " << m_mode << std::endl; + + std::cout << " delayed neutrons "; + if( m_delayedNeutrons ) { + std::cout << "on" << std::endl; } + else { + std::cout << "off" << std::endl; + } + + std::cout << " throw on error "; + if( m_throwOnError ) { + std::cout << "on" << std::endl; } + else { + std::cout << "off" << std::endl; + } +} +#endif + +/*! \class MG + * This class is used to instruct deterministic methods on what data are being requested. +*/ + +/* *********************************************************************************************************//** + * @param a_projectileID [in] The PoPs index for the projectile. + * @param a_mode [in] Specifies the type of data to use or retrieve for transport codes. + * @param a_delayedNeutrons [in] Flag indicating whether or not delayed neutron data are to be include in the requested data. + ***********************************************************************************************************/ + +MG::MG( std::string const &a_projectileID, Mode a_mode, DelayedNeutrons a_delayedNeutrons ) : + Settings( a_projectileID, a_delayedNeutrons ), + m_mode( a_mode ), + m_useMultiGroupSummedData( true ) { + +} + +/* *********************************************************************************************************//** + * Searches the suite *a_suite* for the form style specified by *mode( )* and matching one in *a_temperatureInfo*. + * This only works for multi-group data (i.e., multiGroup or multiGroupWithSnElasticUpScatter type data). + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_suite [in] The suite to search for the requested form. + * @param a_temperatureInfo [in] Specifies the temperature and labels use to lookup the requested data. + * @param a_dataType [in] The type of data being required. Only used if data not found. + ***********************************************************************************************************/ + +Form const *MG::form( LUPI::StatusMessageReporting &a_smr, GIDI::Suite const &a_suite, Styles::TemperatureInfo const &a_temperatureInfo, + std::string a_dataType ) const { + + std::string label; + + if( m_mode == Mode::multiGroup ) { + label = a_temperatureInfo.heatedMultiGroup( ); } + else if( m_mode == Mode::multiGroupWithSnElasticUpScatter ) { + label = a_temperatureInfo.SnElasticUpScatter( ); + } + + Suite::const_iterator iter = a_suite.find( label, true ); + if( iter == a_suite.end( ) ) { + if( m_mode == Mode::multiGroupWithSnElasticUpScatter ) iter = a_suite.find( a_temperatureInfo.heatedMultiGroup( ), true ); + } + + if( iter == a_suite.end( ) ) { + std::string sourceInfo( a_suite.toXLink( ) ); + ProtareSingle const *rootProtareSingle = static_cast( a_suite.root( ) ); + sourceInfo += " for protare " + rootProtareSingle->projectile( ).ID( ) + " + " + rootProtareSingle->target( ).ID( ) + + " for " + rootProtareSingle->evaluation( ) + "."; + + if( throwOnError( ) ) { + throw Exception( "ERROR from GIDI::MG::form: label '" + label + "' not found in suite '" + sourceInfo ); } + else { + std::string warning( "data for " + a_dataType + " not found with label '" + label + "' in suite " + sourceInfo ); + smr_setReportError2p( a_smr.smr( ), 0, 0, warning.c_str( ) ); + } + return( nullptr ); + } + + return( *iter ); +} + +} - if( particle == mParticles.end( ) ) return( 1 ); - mParticles.erase( PoPId ); - return( 0 ); } diff --git a/source/processes/hadronic/models/lend/src/GIDI_settings_flux.cc b/source/processes/hadronic/models/lend/src/GIDI_settings_flux.cc index 638b402d7f..0af3c8633a 100644 --- a/source/processes/hadronic/models/lend/src/GIDI_settings_flux.cc +++ b/source/processes/hadronic/models/lend/src/GIDI_settings_flux.cc @@ -1,278 +1,487 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #include +#include #include -#include "GIDI_settings.hh" +#include "GIDI.hpp" -/* ---- GIDI_settings_flux_order ---- */ -/* -========================================================= -*/ -GIDI_settings_flux_order::GIDI_settings_flux_order( int order ) { +#include +#include - if( order < 0 ) throw 1; - mOrder = order; +namespace GIDI { + +namespace Transporting { + +/*! \class Flux_order + * Specifies the flux data for a specified Legendre order (see class Flux). + */ + +/* *********************************************************************************************************//** + * @param a_order [in] The Legendre order of the flux data. + * @param a_length [in] The number of *a_energies* values. + * @param a_energies [in] The list of energies that the flux *a_fluxes* are given at. + * @param a_fluxes [in] The flux for this Legendre order. + ***********************************************************************************************************/ + +Flux_order::Flux_order( int a_order, int a_length, double const *a_energies, double const *a_fluxes ) : + m_order( a_order ) { + + for( int i1 = 0; i1 < a_length; ++i1 ) m_energies.push_back( a_energies[i1] ); + for( int i1 = 0; i1 < a_length; ++i1 ) m_fluxes.push_back( a_fluxes[i1] ); } -/* -========================================================= -*/ -GIDI_settings_flux_order::GIDI_settings_flux_order( int order, int length, double const *energies, double const *fluxes ) { - initialize( order, length, energies, fluxes ); -} -/* -========================================================= -*/ -GIDI_settings_flux_order::GIDI_settings_flux_order( int order, std::vector const &energies, std::vector const &fluxes ) { +/* *********************************************************************************************************//** + * @param a_order [in] The Legendre order of the flux data. + * @param a_energies [in] The list of energies that the flux *a_fluxes* are given at. + * @param a_fluxes [in] The flux for this Legendre order. + ***********************************************************************************************************/ - int length = (int) energies.size( ); +Flux_order::Flux_order( int a_order, std::vector const &a_energies, std::vector const &a_fluxes ) : + m_order( a_order ), + m_energies( a_energies ), + m_fluxes( a_fluxes ) { - if( length != (int) fluxes.size( ) ) throw 1; - initialize( order, length, &(energies[0]), &(fluxes[0]) ); + if( a_energies.size( ) != a_fluxes.size( ) ) throw Exception( "Flux_order::Flux_order: a_energies.size( ) != a_fluxes.size( )." ); } -/* -========================================================= -*/ -GIDI_settings_flux_order::GIDI_settings_flux_order( GIDI_settings_flux_order const &fluxOrder ) { - initialize( fluxOrder.mOrder, fluxOrder.size( ), &(fluxOrder.mEnergies[0]), &(fluxOrder.mFluxes[0]) ); -} -/* -========================================================= -*/ -void GIDI_settings_flux_order::initialize( int order, int length, double const *energies, double const *fluxes ) { +/* *********************************************************************************************************//** + * @param a_fluxOrder [in] The flux order to copy. + ***********************************************************************************************************/ - if( order < 0 ) throw 1; - mOrder = order; - mEnergies.resize( length, 0 ); - mFluxes.resize( length, 0 ); - for( int i1 = 0; i1 < length; ++i1 ) mEnergies[i1] = energies[i1]; - for( int i1 = 0; i1 < length; ++i1 ) mFluxes[i1] = fluxes[i1]; -} -/* -========================================================= -*/ -GIDI_settings_flux_order& GIDI_settings_flux_order::operator=( const GIDI_settings_flux_order &fluxOrder ) { - if ( this != &fluxOrder ) { - initialize( fluxOrder.mOrder, fluxOrder.size(), &(fluxOrder.mEnergies[0]), &(fluxOrder.mFluxes[0]) ); - } - return *this; -} -/* -========================================================= -*/ -GIDI_settings_flux_order::~GIDI_settings_flux_order( ) { +Flux_order::Flux_order( Flux_order const &a_fluxOrder ) : + m_order( a_fluxOrder.order( ) ), + m_energies( a_fluxOrder.v_energies( ) ), + m_fluxes( a_fluxOrder.v_fluxes( ) ) { } -/* -========================================================= -*/ -void GIDI_settings_flux_order::print( int valuesPerLine ) const { - int nE = (int) mEnergies.size( ); +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Flux_order::~Flux_order( ) { + +} + +/* *********************************************************************************************************//** + * Print the Flux_order to std::cout. Mainly for debugging. + * + * @param a_valuesPerLine [in] The number of points (i.e., energy, flux pairs) to print per line. + ***********************************************************************************************************/ + +void Flux_order::print( int a_valuesPerLine ) const { + + int nE = (int) m_energies.size( ); bool printIndent = true; - char buffer[2 * 128]; - std::cout << " ORDER: " << mOrder << std::endl; + std::cout << " ORDER: " << m_order << " (number of points = " << m_energies.size( ) << ")" << std::endl; for( int iE = 0; iE < nE; ++iE ) { if( printIndent ) std::cout << " "; printIndent = false; - snprintf( buffer, sizeof buffer, " %15.8e %15.8e", mEnergies[iE], mFluxes[iE] ); + std::string buffer = LUPI::Misc::argumentsToString( " %15.8e %15.8e", m_energies[iE], m_fluxes[iE] ); std::cout << buffer; - if( ( ( iE + 1 ) % valuesPerLine ) == 0 ) { + if( ( ( iE + 1 ) % a_valuesPerLine ) == 0 ) { std::cout << std::endl; printIndent = true; } } - if( nE % valuesPerLine ) std::cout << std::endl; + if( nE % a_valuesPerLine ) std::cout << std::endl; } -/* ---- GIDI_settings_flux ---- */ -/* -========================================================= -*/ -GIDI_settings_flux::GIDI_settings_flux( std::string const &label, double temperature ) { +/*! \class Flux + * Specifies the flux data as a list of Flux_order's. + */ - mLabel = label; - mTemperature = temperature; -} -/* -========================================================= -*/ -GIDI_settings_flux::GIDI_settings_flux( char const *label, double temperature ) { +/* *********************************************************************************************************//** + * @param a_label [in] The label for the flux. + * @param a_temperature [in] The temperature the + ***********************************************************************************************************/ - mLabel = label; - mTemperature = temperature; -} -/* -========================================================= -*/ -GIDI_settings_flux::GIDI_settings_flux( GIDI_settings_flux const &flux ) { - - mLabel = flux.getLabel( ); - mTemperature = flux.mTemperature; - for( std::vector::const_iterator iter = flux.mFluxOrders.begin( ); iter < flux.mFluxOrders.end( ); ++iter ) addFluxOrder( *iter ); -} -/* -========================================================= -*/ -GIDI_settings_flux& GIDI_settings_flux::operator=( const GIDI_settings_flux &flux ) { - if ( this != &flux ) { - mLabel = flux.getLabel(); - mTemperature = flux.mTemperature; - for( std::vector::const_iterator iter = flux.mFluxOrders.begin( ); iter < flux.mFluxOrders.end( ); ++iter ) addFluxOrder( *iter ); - } - return *this; -} -/* -========================================================= -*/ -GIDI_settings_flux::~GIDI_settings_flux( ) { +Flux::Flux( std::string const &a_label, double a_temperature ) : + m_label( a_label ), + m_temperature( a_temperature ) { } -/* -========================================================= -*/ -GIDI_settings_flux_order const *GIDI_settings_flux::operator[]( int index ) const { - return( &(mFluxOrders[index]) ); +/* *********************************************************************************************************//** + * @param a_label [in] The label for the flux. + * @param a_temperature [in] The temperature the + ***********************************************************************************************************/ + +Flux::Flux( char const *a_label, double a_temperature ) : + m_label( a_label ), + m_temperature( a_temperature ) { + } -/* -========================================================= -*/ -void GIDI_settings_flux::addFluxOrder( GIDI_settings_flux_order const &fluxOrder ) { + +/* *********************************************************************************************************//** + * @param a_flux [in] The Flux to copy. + ***********************************************************************************************************/ + +Flux::Flux( Flux const &a_flux ) : + m_label( a_flux.label( ) ), + m_temperature( a_flux.temperature( ) ) { + + for( int i1 = 0; i1 <= a_flux.maxOrder( ); ++i1 ) { addFluxOrder( a_flux[i1] ); } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Flux::~Flux( ) { + +} + +/* *********************************************************************************************************//** + * Adds a Flux_order. The Flux_order's must be added sequentially. + * + * @param a_fluxOrder [in] The Flux_order to add to *this*. + ***********************************************************************************************************/ + +void Flux::addFluxOrder( Flux_order const &a_fluxOrder ) { /* * Orders can only be added in sequence (e.g., 0 first, then 1, ...). */ - int order = fluxOrder.getOrder( ); + int order = a_fluxOrder.order( ); - if( order > (int) mFluxOrders.size( ) ) throw 1; - mFluxOrders.push_back( fluxOrder ); -} -/* -========================================================= -*/ -void GIDI_settings_flux::print( bool outline, int valuesPerLine ) const { - - std::cout << "FLUX: label = '" << mLabel << "': maximum order = " << ( size( ) + 1 ) << std::endl; - if( outline ) return; - for( std::vector::const_iterator iter = mFluxOrders.begin( ); iter < mFluxOrders.end( ); ++iter ) iter->print( valuesPerLine ); + if( order > (int) m_fluxOrders.size( ) ) throw Exception( "Flux::addFluxOrder: order > (int) m_fluxOrders.size( )." ); + m_fluxOrders.push_back( a_fluxOrder ); } -#if 0 -/* ---- GIDI_settings_fluxes_from_bdfls ---- */ -/* -========================================================= -*/ -GIDI_settings_fluxes_from_bdfls::GIDI_settings_fluxes_from_bdfls( std::string const &fileName, double temperature_MeV = 0 ) { +/* *********************************************************************************************************//** + * Multi-groups the flux and returns the result. + * + * @param a_multiGroup [in] The Flux to copy. + * @return [in] The Multi-group flux. + ***********************************************************************************************************/ - initialize( fileName.c_str( ), temperature_MeV ); +ProcessedFlux Flux::process( std::vector const &a_multiGroup ) const { +/* + Currently only does l=0 flux. +*/ + int i1 = 0; + std::vector groupedFlux; + + ptwXPoints *boundaries = ptwX_create( nullptr, a_multiGroup.size( ), a_multiGroup.size( ), &(a_multiGroup[0]) ); + if( boundaries == nullptr ) throw Exception( "ptwX_create failted for boundaries." ); + + for( ; i1 < 1; ++i1 ) { // only do l=0 currenlty hence ' i1 < 1' test. + Flux_order const *__fluxOrder = &(m_fluxOrders[i1]); + ptwXYPoints *__flux = ptwXY_createFrom_Xs_Ys( nullptr, ptwXY_interpolationLinLin, ptwXY_interpolationToString( ptwXY_interpolationLinLin ), + 10, 1e-3, 10, 10, __fluxOrder->size( ), __fluxOrder->energies( ), __fluxOrder->fluxes( ), 0 ); + if( __flux == nullptr ) throw Exception( "ptwXY_createFrom_Xs_Ys failed for __flux." ); + + ptwXPoints *groupedFluxX = ptwXY_groupOneFunction( nullptr, __flux, boundaries, ptwXY_group_normType_none, nullptr ); + if( groupedFluxX == nullptr ) throw Exception( "ptwXY_groupOneFunction failed for groupedFluxX." ); + + for( int i2 = 0; i2 < ptwX_length( nullptr, groupedFluxX ); ++i2 ) groupedFlux.push_back( ptwX_getPointAtIndex_Unsafely( groupedFluxX, i2 ) ); + + ptwX_free( groupedFluxX ); + ptwXY_free( __flux ); + } + ptwX_free( boundaries ); + + return( ProcessedFlux( temperature( ), groupedFlux ) ); } -/* -========================================================= -*/ -GIDI_settings_fluxes_from_bdfls::GIDI_settings_fluxes_from_bdfls( char const *fileName, double temperature_MeV = 0 ) { - initialize( fileName, temperature_MeV ); +/* *********************************************************************************************************//** + * Print the Flux to std::cout. Mainly for debugging. + * + * @param a_indent [in] The std::string to print at the beginning. + * @param a_outline [in] If true, does not print the flux values. + * @param a_valuesPerLine [in] The number of points (i.e., energy, flux pairs) to print per line. + ***********************************************************************************************************/ + +void Flux::print( std::string const &a_indent, bool a_outline, int a_valuesPerLine ) const { + + std::cout << a_indent << "FLUX: label = '" << m_label << "': maximum order = " << ( size( ) - 1 ) << std::endl; + if( a_outline ) return; + for( std::vector::const_iterator iter = m_fluxOrders.begin( ); iter < m_fluxOrders.end( ); ++iter ) + iter->print( a_valuesPerLine ); } -/* -========================================================= -*/ -GIDI_settings_fluxes_from_bdfls::GIDI_settings_fluxes_from_bdfls( cbdfls_file const *bdfls, double temperature_MeV = 0 ) { - initialize2( bdfls, temperature_MeV ); + +/*! \class Fluxes_from_bdfls + * Specifies the flux data for a specified Legendre order (see class Flux). + */ + +/* *********************************************************************************************************//** + * Reads in fluxes from a *bdfls* file as a list of Flux instances. + * + * @param a_fileName [in] The bdfls file name. + * @param a_temperature_MeV [in] The temperature to assign to the read fluxes. + ***********************************************************************************************************/ + +Fluxes_from_bdfls::Fluxes_from_bdfls( std::string const &a_fileName, double a_temperature_MeV = 0 ) { + + initialize( a_fileName.c_str( ), a_temperature_MeV ); } -/* -========================================================= -*/ -void GIDI_settings_fluxes_from_bdfls::initialize( char const *fileName, double temperature_MeV ) { - cbdfls_file *bdfls; - cbdflsErrors Error; +/* *********************************************************************************************************//** + * Reads in fluxes from a *bdfls* file as a list of Flux instances. + * + * @param a_fileName [in] The bdfls file name. + * @param a_temperature_MeV [in] The temperature to assign to the read fluxes. + ***********************************************************************************************************/ - if( ( bdfls = cbdflsOpen( fileName, &Error ) ) == NULL ) throw Error; - initialize2( bdfls, temperature_MeV ); - cbdflsRelease( bdfls ); +Fluxes_from_bdfls::Fluxes_from_bdfls( char const *a_fileName, double a_temperature_MeV = 0 ) { + + initialize( a_fileName, a_temperature_MeV ); } -/* -========================================================= -*/ -void GIDI_settings_fluxes_from_bdfls::initialize2( cbdfls_file const *bdfls, double temperature_MeV ) { - int nf, length, *fids, order; - double *energies, *fluxes; - char label[100]; +/* *********************************************************************************************************//** + * Used by constructors to do most of the work. + * + * @param a_fileName [in] The bdfls file name. + * @param a_temperature_MeV [in] The temperature to assign to the read fluxes. + ***********************************************************************************************************/ - nf = cbdflsFIDs( (cbdfls_file *) bdfls, &fids ); - for( int if1 = 0; if1 < nf; ++if1 ) { - snprintf( label, sizeof label, "LLNL_fid_%.3d", fids[if1] ); - GIDI_settings_flux flux = GIDI_settings_flux( label, temperature_MeV ); - order = cbdflsGetFluxOrder( (cbdfls_file *) bdfls, fids[if1] ); - for( int io = 0; io <= order; ++io ) { - length = cbdflsGetFlux( (cbdfls_file *) bdfls, fids[if1], io, &energies, &fluxes ); - GIDI_settings_flux_order flux_order = GIDI_settings_flux_order( io, length, energies, fluxes ); +void Fluxes_from_bdfls::initialize( char const *a_fileName, double a_temperature_MeV ) { + + char buffer[132], *pEnd, cValue[16]; + long numberOfValuesInOrders[16]; + FILE *fIn = fopen( a_fileName, "r" ); + if( fIn == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: Could not open bdfls file." ); + + while( true ) { // Skip over groups. + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: fgets failed for fid." ); + if( strlen( buffer ) > 73 ) { + if( buffer[72] == '1' ) break; + } + } + + while( true ) { + int fid( -1 ); + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: fgets failed for fid." ); + if( strlen( buffer ) > 73 ) { + if( buffer[72] == '1' ) break; + } + fid = (int) strtol( buffer, &pEnd, 10 ); + if( fid == -1 ) throw Exception( "Fluxes_from_bdfls::initialize: converting fid to long failed." ); + std::string label( LLNL_fidToLabel( fid ) ); + Flux flux( label, a_temperature_MeV ); + + long maximumFluxOrder( -1 ); + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: fgets failed for maximumFluxOrder." ); + maximumFluxOrder = strtol( buffer, &pEnd, 10 ); + if( maximumFluxOrder == -1 ) throw Exception( "Fluxes_from_bdfls::initialize: converting maximumFluxOrder to long failed." ); + if( maximumFluxOrder >= (long) ( sizeof( numberOfValuesInOrders ) / sizeof( numberOfValuesInOrders[0] ) ) ) + throw Exception( "Fluxes_from_bdfls::initialize: need to increase size of numberOfValuesInOrders" ); + + for( long order = 0; order <= maximumFluxOrder; ++order ) { + numberOfValuesInOrders[order] = -1; + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: fgets failed for maximumFluxOrders." ); + numberOfValuesInOrders[order] = strtol( buffer, &pEnd, 10 ); + if( numberOfValuesInOrders[order] == -1 ) throw Exception( "Fluxes_from_bdfls::initialize: converting numberOfValuesInOrders[order] to long failed." ); + numberOfValuesInOrders[order] /= 2; + } + + for( long order = 0; order <= maximumFluxOrder; ++order ) { + long index = 0, numberOfValuesInOrder = 2 * numberOfValuesInOrders[order]; + std::vector energiesAndFluxes( numberOfValuesInOrder ); + while( numberOfValuesInOrder > 0 ) { + long i1, n1 = 6; + if( numberOfValuesInOrder < 6 ) n1 = numberOfValuesInOrder; + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Fluxes_from_bdfls::initialize: fgets failed for energies/fluxes." ); + for( i1 = 0; i1 < n1; ++i1, ++index ) { + strncpy( cValue, &buffer[12*i1], 12 ); + cValue[12] = 0; + energiesAndFluxes[index] = strtod( cValue, &pEnd ); + } + numberOfValuesInOrder -= n1; + } + + std::vector energies( numberOfValuesInOrders[order] ); + std::vector fluxes( numberOfValuesInOrders[order] ); + for( index = 0; index < numberOfValuesInOrders[order]; ++index ) { + energies[index] = energiesAndFluxes[2*index]; + fluxes[index] = energiesAndFluxes[2*index+1]; + } + + Flux_order flux_order( order, energies, fluxes ); flux.addFluxOrder( flux_order ); } - mFluxes.push_back( flux ); + m_fluxes.push_back( flux ); } - return; + + fclose( fIn ); } -/* -========================================================= -*/ -GIDI_settings_fluxes_from_bdfls::~GIDI_settings_fluxes_from_bdfls( ) { + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Fluxes_from_bdfls::~Fluxes_from_bdfls( ) { } -/* -========================================================= -*/ -GIDI_settings_flux GIDI_settings_fluxes_from_bdfls::getViaFID( int fid ) { - char label[100]; +/* *********************************************************************************************************//** + * Returns the Flux instance whose *fid* is *a_fid*. + * + * @param a_fid [in] The *fid* of the Flux to return. + * @return Returns the Flux whose *fid* is *a_fid*. + ***********************************************************************************************************/ - snprintf( label, sizeof label, "LLNL_fid_%.3d", fid ); - for( int if1 = 0; if1 < (int) mFluxes.size( ); ++if1 ) { - if( mFluxes[if1].isLabel( label ) ) return( mFluxes[if1] ); +Flux Fluxes_from_bdfls::getViaFID( int a_fid ) const { + + std::string label( LLNL_fidToLabel( a_fid ) ); + + for( int if1 = 0; if1 < (int) m_fluxes.size( ); ++if1 ) { + if( m_fluxes[if1].label( ) == label ) return( m_fluxes[if1] ); } - throw 1; + throw Exception( "Fluxes_from_bdfls::getViaFID: fid not found." ); } -/* -========================================================= -*/ -std::vector GIDI_settings_fluxes_from_bdfls::getLabels( void ) { - int size = (int) mFluxes.size( ); - std::vector labels( size ); +/* *********************************************************************************************************//** + * Returns the 3-d function flux f(T,E,mu) whose *fid* is *a_fid*. In f(T,E,mu), T is the temperature, E is the projectile'e energy + * and mu is the cos(theta) where theta is measured relative to the projectile velocity. + * + * @param a_fid [in] The *fid* of the Flux to return. + * @return Returns the 3-d function flux f(T,E,mu). + ***********************************************************************************************************/ - for( int if1 = 0; if1 < size; ++if1 ) labels[if1] = mFluxes[if1].getLabel( ); - return( labels ); +Functions::XYs3d *Fluxes_from_bdfls::get3dViaFID( int a_fid ) const { + + Flux flux = getViaFID( a_fid ); + + Axes axes; + axes.append( new Axis( 3, "temperature", "MeV/k" ) ); + axes.append( new Axis( 2, "energy_in", "MeV" ) ); + axes.append( new Axis( 1, "mu", "" ) ); + axes.append( new Axis( 0, "flux", "1/s" ) ); + + Functions::XYs3d *xys3d = new Functions::XYs3d( axes, ptwXY_interpolationLinLin, 0, flux.temperature( ) ); + Functions::XYs2d *xys2d = new Functions::XYs2d( axes, ptwXY_interpolationLinLin ); + + xys3d->setLabel( flux.label( ) ); + + std::vector const &energies = flux[0].v_energies( ); + for( std::size_t i1 = 0; i1 < energies.size( ); ++i1 ) { + Functions::Legendre1d *legendre1d = new Functions::Legendre1d( axes, 0, energies[i1] ); + std::vector &coefficients = legendre1d->coefficients( ); + + for( int i2 = 0; i2 < flux.size( ); ++i2 ) coefficients.push_back( flux[i2].fluxes( )[i1] ); + xys2d->append( legendre1d ); + } + xys3d->append( xys2d ); + + return( xys3d ); } -/* -========================================================= -*/ -std::vector GIDI_settings_fluxes_from_bdfls::getFIDs( void ) { - int size = (int) mFluxes.size( ); +/* *********************************************************************************************************//** + * Returns a list of *fid* strings (i.e., labels) for the Flux's read in from *bdfls* file. + * + * @return The list of *fid*'s. + ***********************************************************************************************************/ + +std::vector Fluxes_from_bdfls::labels( ) const { + + int size = (int) m_fluxes.size( ); + std::vector _labels( size ); + + for( int if1 = 0; if1 < size; ++if1 ) _labels[if1] = m_fluxes[if1].label( ); + return( _labels ); +} + +/* *********************************************************************************************************//** + * Returns a list of integer *fid* for the Flux's read in from *bdfls* file. + * + * @return The list of *fid*'s. + ***********************************************************************************************************/ + +std::vector Fluxes_from_bdfls::FIDs( ) const { + + int size = (int) m_fluxes.size( ); std::vector fids( size ); char *e; for( int if1 = 0; if1 < size; ++if1 ) { - fids[if1] = (int) strtol( &(mFluxes[if1].getLabel( ).c_str( )[9]), &e, 10 ); + fids[if1] = (int) strtol( &(m_fluxes[if1].label( ).c_str( )[9]), &e, 10 ); } return( fids ); } -/* -========================================================= -*/ -void GIDI_settings_fluxes_from_bdfls::print( bool outline, int valuesPerLine ) { - int nfs = (int) mFluxes.size( ); +/* *********************************************************************************************************//** + * Print the list of Flux's to std::cout. Mainly for debugging. + * + * @param a_outline [in] Passed to other *print* methods. + * @param a_valuesPerLine [in] Passed to other *print* methods. + ***********************************************************************************************************/ + +void Fluxes_from_bdfls::print( bool a_outline, int a_valuesPerLine ) const { + + int nfs = (int) m_fluxes.size( ); std::cout << "BDFLS FLUXes: number of fluxes = " << nfs << std::endl; - for( int if1 = 0; if1 < nfs ; ++if1 ) mFluxes[if1].print( outline, valuesPerLine ); + for( int if1 = 0; if1 < nfs ; ++if1 ) m_fluxes[if1].print( " ", a_outline, a_valuesPerLine ); +} + +} + +/* *********************************************************************************************************//** + * Convert a flux in the form of a Function3dForm into those needed by Settings methods. Currently only works for + * XYs3d which contains a list of XYs2d which each contain a list of Legendre instances. + * + * @param a_function3d [in] A Function3dForm instance. + * @return The list of Transporting::Flux * instances. + ***********************************************************************************************************/ + +std::vector settingsFluxesFromFunction3d( Functions::Function3dForm const &a_function3d ) { + + if( a_function3d.type( ) != FormType::XYs3d ) throw Exception( "Currently, only a 3d function of type XYs3d is supported." ); + + Functions::XYs3d const &xys3d = static_cast( a_function3d ); + std::vector const function2ds = xys3d.function2ds( ); + std::vector fluxes; + + for( std::size_t i1 = 0; i1 < function2ds.size( ); ++i1 ) { + Functions::Function2dForm const &function2d = *function2ds[i1]; + + if( function2d.type( ) != FormType::XYs2d ) throw Exception( "Currently, only a 2d function of type XYs2d is supported for flux f(E,mu)." ); + + Functions::XYs2d const &xys2d = static_cast( function2d ); + std::vector const &function1ds = xys2d.function1ds( ); + + Transporting::Flux flux( a_function3d.label( ), xys2d.outerDomainValue( ) ); + std::size_t maxOrder = 0; + std::vector energies; + std::vector< std::vector > fluxMatrix; + + for( std::size_t i2 = 0; i2 < function1ds.size( ); ++i2 ) { + Functions::Function1dForm const &function1d = *function1ds[i2]; + + if( function1d.type( ) != FormType::Legendre1d ) throw Exception( "Currently, only a 1d function of type Legendre1d is supported for flux f(mu)." ); + + Functions::Legendre1d const &legendre1d = static_cast( function1d ); + + energies.push_back( legendre1d.outerDomainValue( ) ); + std::vector &coefficients = const_cast< std::vector &>( legendre1d.coefficients( ) ); + if( maxOrder < coefficients.size( ) ) maxOrder = coefficients.size( ); + fluxMatrix.push_back( coefficients ); + } + + for( std::size_t order = 0; order < maxOrder; ++order ) { + std::vector energyFluxAtOrder; + + for( std::size_t i2 = 0; i2 < function1ds.size( ); ++i2 ) { + energyFluxAtOrder.push_back( 0.0 ); + if( order < fluxMatrix[i2].size( ) ) energyFluxAtOrder[i2] = fluxMatrix[i2][order]; + } + + Transporting::Flux_order fluxOrder( order, energies, energyFluxAtOrder ); + flux.addFluxOrder( fluxOrder ); + } + + fluxes.push_back( flux ); + } + + return( fluxes ); +} + } -#endif diff --git a/source/processes/hadronic/models/lend/src/GIDI_settings_group.cc b/source/processes/hadronic/models/lend/src/GIDI_settings_group.cc index 420a24bc82..0eb817152d 100644 --- a/source/processes/hadronic/models/lend/src/GIDI_settings_group.cc +++ b/source/processes/hadronic/models/lend/src/GIDI_settings_group.cc @@ -1,91 +1,128 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #include +#include #include -#include "GIDI_settings.hh" +#include "GIDI.hpp" -/* -========================================================= -*/ -GIDI_settings_group::GIDI_settings_group( std::string const &label, int size1 ) { +namespace GIDI { - initialize( label, size1, size1, NULL ); -} -/* -========================================================= -*/ -GIDI_settings_group::GIDI_settings_group( std::string const &label, int length, double const *boundaries ) { +namespace Transporting { - initialize( label, length, length, boundaries ); -} -/* -========================================================= -*/ -GIDI_settings_group::GIDI_settings_group( std::string const &label, std::vector const &boundaries) { +/*! \class MultiGroup + * Specifies the flux data for a specified Legendre order (see class Flux). + */ - int size1 = (int) boundaries.size( ); +/* *********************************************************************************************************//** + ***********************************************************************************************************/ - initialize( label, size1, size1, &(boundaries[0]) ); -} -/* -========================================================= -*/ -GIDI_settings_group::GIDI_settings_group( GIDI_settings_group const &group ) { - - initialize( group.mLabel, group.size( ), group.size( ), &(group.mBoundaries[0]) ); -} -/* -========================================================= -*/ -void GIDI_settings_group::initialize( std::string const &label, int size1, int length, double const *boundaries ) { - - int i1; - - mLabel = label; - if( size1 < length ) size1 = length; - if( size1 < 0 ) size1 = 0; - mBoundaries.resize( size1, 0 ); - for( i1 = 0; i1 < length; ++i1 ) mBoundaries[i1] = boundaries[i1]; -} -/* -========================================================= -*/ -GIDI_settings_group& GIDI_settings_group::operator=( const GIDI_settings_group &group ) { - if ( this != &group ) { - initialize( group.mLabel, group.size(), group.size(), &(group.mBoundaries[0]) ); - } - return *this; -} -/* -========================================================= -*/ -GIDI_settings_group::~GIDI_settings_group( ) { +MultiGroup::MultiGroup( ) { } -/* -========================================================= -*/ -int GIDI_settings_group::getGroupIndexFromEnergy( double energy, bool encloseOutOfRange ) const { - int iMin = 0, iMid, iMax = (int) mBoundaries.size( ), iMaxM1 = iMax - 1; +/* *********************************************************************************************************//** + * @param a_label [in] The label for the MultiGroup. + * @param a_length [in] The number of boundaries values. + * @param a_boundaries [in] The list of boundaries. + ***********************************************************************************************************/ + +MultiGroup::MultiGroup( std::string const &a_label, int a_length, double const *a_boundaries ) : + m_label( a_label ) { + + for( int i1 = 0; i1 < a_length; ++i1 ) m_boundaries.push_back( a_boundaries[i1] ); +} + +/* *********************************************************************************************************//** + * @param a_label [in] The label for the MultiGroup. + * @param a_boundaries [in] The list of boundaries. + ***********************************************************************************************************/ + +MultiGroup::MultiGroup( std::string const &a_label, std::vector const &a_boundaries ) : + m_label( a_label ), + m_boundaries( a_boundaries ) { + +} + +/* *********************************************************************************************************//** + * @param a_group [in] The Group used to set *this*. + ***********************************************************************************************************/ + +MultiGroup::MultiGroup( Group const &a_group ) : + m_label( a_group.label( ) ), + m_boundaries( a_group.data( ) ) { + +} + +/* *********************************************************************************************************//** + * @param a_multiGroup [in] The MultiGroup instance to copy. + ***********************************************************************************************************/ + +MultiGroup::MultiGroup( MultiGroup const &a_multiGroup ) : + m_label( a_multiGroup.label( ) ), + m_boundaries( a_multiGroup.boundaries( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +MultiGroup::~MultiGroup( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs*. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + * + * @return A reference to the updated MultiGroup instance. + ***********************************************************************************************************/ + +MultiGroup &MultiGroup::operator=( MultiGroup const &a_rhs ) { + + if( this != &a_rhs ) { + m_label = a_rhs.label( ); + m_boundaries = a_rhs.boundaries( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group index whose boundaries enclose *a_energy*. If *a_encloseOutOfRange* is true and + * *a_energy* is below the lowest boundary, 0 is returned, otherwise -2 is returned. If *a_encloseOutOfRange* is true and + * *a_energy* is above the highest boundary, the last multi-group index is returned, otherwise -1 is returned. + * + * @param a_energy [in] The energy of the whose index is to be returned. + * @param a_encloseOutOfRange Determines the action if energy is below or above the domain of the boundaries. + * @return The index whose boundaries enclose *a_energy*. + ***********************************************************************************************************/ + +int MultiGroup::multiGroupIndexFromEnergy( double a_energy, bool a_encloseOutOfRange ) const { + + int iMin = 0, iMid, iMax = (int) m_boundaries.size( ), iMaxM1 = iMax - 1; if( iMax == 0 ) return( -3 ); - if( energy < mBoundaries[0] ) { - if( encloseOutOfRange ) return( 0 ); + if( a_energy < m_boundaries[0] ) { + if( a_encloseOutOfRange ) return( 0 ); return( -2 ); } - if( energy > mBoundaries[iMaxM1] ) { - if( encloseOutOfRange ) return( iMax - 2 ); + if( a_energy > m_boundaries[iMaxM1] ) { + if( a_encloseOutOfRange ) return( iMax - 2 ); return( -1 ); } - while( 1 ) { // Loop checking, 11.06.2015, T. Koi + while( 1 ) { iMid = ( iMin + iMax ) >> 1; if( iMid == iMin ) break; - if( energy < mBoundaries[iMid] ) { + if( a_energy < m_boundaries[iMid] ) { iMax = iMid; } else { iMin = iMid; @@ -94,131 +131,201 @@ int GIDI_settings_group::getGroupIndexFromEnergy( double energy, bool encloseOut if( iMin == iMaxM1 ) iMin--; return( iMin ); } -/* -========================================================= -*/ -void GIDI_settings_group::print( bool outline, int valuesPerLine ) const { + +/* *********************************************************************************************************//** + * @param a_label [in] The label for *this*. + * @param a_boundaries [in] The boundaries to set *this* to. + ***********************************************************************************************************/ + +void MultiGroup::set( std::string const &a_label, std::vector const &a_boundaries ) { + + m_label = a_label; + m_boundaries = a_boundaries; +} + +/* *********************************************************************************************************//** + * Print the MultiGroup to std::cout. Mainly for debugging. + * + * @param a_indent [in] The std::string to print at the beginning. + * @param a_outline [in] If true, does not print the flux values. + * @param a_valuesPerLine [in] The number of points (i.e., energy, flux pairs) to print per line. + ***********************************************************************************************************/ + +void MultiGroup::print( std::string const &a_indent, bool a_outline, int a_valuesPerLine ) const { int nbs = size( ); - char buffer[128]; + bool printIndent( true ); - std::cout << "GROUP: label = '" << mLabel << "': length = " << nbs << std::endl; - if( outline ) return; + std::cout << a_indent << "GROUP: label = '" << m_label << "': length = " << nbs << std::endl; + if( a_outline ) return; for( int ib = 0; ib < nbs; ib++ ) { - snprintf( buffer, sizeof buffer, "%16.8e", mBoundaries[ib] ); - std::cout << buffer; - if( ( ( ib + 1 ) % valuesPerLine ) == 0 ) std::cout << std::endl; + if( printIndent ) std::cout << a_indent; + printIndent = false; + std::cout << LUPI::Misc::argumentsToString( "%16.8e", m_boundaries[ib] ); + if( ( ( ib + 1 ) % a_valuesPerLine ) == 0 ) { + std::cout << std::endl; + printIndent = true; + } } - if( nbs % valuesPerLine ) std::cout << std::endl; + if( nbs % a_valuesPerLine ) std::cout << std::endl; } -#if 0 -/* ---- GIDI_settings_groups_from_bdfls ---- */ -/* -========================================================= -*/ -GIDI_settings_groups_from_bdfls::GIDI_settings_groups_from_bdfls( std::string const &fileName ) { +/*! \class Groups_from_bdfls + * Specifies the data for a specified Legendre order (see class Flux). + */ - initialize( fileName.c_str( ) ); +/* *********************************************************************************************************//** + * Reads in multi-group data from a *bdfls* file as a list of MultiGroup instances. + * + * @param a_fileName [in] The *bdfls* file name. + ***********************************************************************************************************/ + +Groups_from_bdfls::Groups_from_bdfls( std::string const &a_fileName ) { + + initialize( a_fileName.c_str( ) ); } -/* -========================================================= -*/ -GIDI_settings_groups_from_bdfls::GIDI_settings_groups_from_bdfls( char const *fileName ) { - initialize( fileName ); +/* *********************************************************************************************************//** + * Reads in multi-group data from a *bdfls* file as a list of MultiGroup instances. + * + * @param a_fileName [in] The *bdfls* file name. + ***********************************************************************************************************/ + +Groups_from_bdfls::Groups_from_bdfls( char const *a_fileName ) { + + initialize( a_fileName ); } -/* -========================================================= -*/ -GIDI_settings_groups_from_bdfls::GIDI_settings_groups_from_bdfls( cbdfls_file const *bdfls ) { - initialize2( bdfls ); -} -/* -========================================================= -*/ -void GIDI_settings_groups_from_bdfls::initialize( char const *fileName ) { +/* *********************************************************************************************************//** + * Used by constructors to do most of the work. + * + * @param a_fileName [in] The *bdfls* file name. + ***********************************************************************************************************/ - cbdfls_file *bdfls; - cbdflsErrors Error; +void Groups_from_bdfls::initialize( char const *a_fileName ) { - if( ( bdfls = cbdflsOpen( fileName, &Error ) ) == NULL ) throw Error; - initialize2( bdfls ); - cbdflsRelease( bdfls ); -} -/* -========================================================= -*/ -void GIDI_settings_groups_from_bdfls::initialize2( cbdfls_file const *bdfls ) { + char buffer[132], *pEnd, cValue[16]; + FILE *fIn = fopen( a_fileName, "r" ); + if( fIn == nullptr ) throw Exception( "Groups_from_bdfls::initialize: Could not open bdfls file." ); - int ng, ngbs, *gids; - double *boundaries; - std::string label( "" ); - char cLabel[100]; + while( true ) { + int gid( -1 ); + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Groups_from_bdfls::initialize: fgets failed for gid." ); + if( strlen( buffer ) > 73 ) { + if( buffer[72] == '1' ) break; + } + gid = (int) strtol( buffer, &pEnd, 10 ); + if( gid == -1 ) throw Exception( "Groups_from_bdfls::initialize: converting gid to long failed." ); + std::string label( LLNL_gidToLabel( gid ) ); - ng = cbdflsGIDs( (cbdfls_file *) bdfls, &gids ); - for( int ig = 0; ig < ng; ++ig ) { - ngbs = cbdflsGetGroup( (cbdfls_file *) bdfls, gids[ig], &boundaries ); - snprintf( cLabel, sizeof xLabel, "LLNL_gid_%.3d", gids[ig] ); - label = cLabel; - mGroups.push_back( GIDI_settings_group( label, ngbs, boundaries ) ); + long numberOfBoundaries( -1 ); + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Groups_from_bdfls::initialize: fgets failed for numberOfBoundaries." ); + numberOfBoundaries = strtol( buffer, &pEnd, 10 ); + if( numberOfBoundaries == -1 ) throw Exception( "Groups_from_bdfls::initialize: converting gid to long failed." ); + + long index( 0 ); + std::vector boundaries( numberOfBoundaries ); + while( numberOfBoundaries > 0 ) { + long i1, n1( 6 ); + if( numberOfBoundaries < 6 ) n1 = numberOfBoundaries; + if( fgets( buffer, 132, fIn ) == nullptr ) throw Exception( "Groups_from_bdfls::initialize: fgets failed for boundaries." ); + for( i1 = 0; i1 < n1; ++i1, ++index ) { + strncpy( cValue, &buffer[12*i1], 12 ); + cValue[12] = 0; + boundaries[index] = strtod( cValue, &pEnd ); + } + numberOfBoundaries -= n1; + } + m_multiGroups.push_back( MultiGroup( label, boundaries ) ); } + + fclose( fIn ); } -/* -========================================================= -*/ -GIDI_settings_groups_from_bdfls::~GIDI_settings_groups_from_bdfls( ) { + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Groups_from_bdfls::~Groups_from_bdfls( ) { } -/* -========================================================= -*/ -GIDI_settings_group GIDI_settings_groups_from_bdfls::getViaGID( int gid ) const { - std::string label( "" ); - char cLabel[100]; +/* *********************************************************************************************************//** + * Returns the MultiGroup whose *label* is *a_label*. + * + * @param a_label [in] The *label* of the MultiGroup to return. + * @return Returns the MultiGroup whose *label* is *a_label*. + ***********************************************************************************************************/ - snprintf( cLabel, sizeof cLabel, "LLNL_gid_%.3d", gid ); - label = cLabel; - for( int ig = 0; ig < (int) mGroups.size( ); ++ig ) { - if( mGroups[ig].isLabel( label ) ) return( mGroups[ig] ); +MultiGroup Groups_from_bdfls::viaLabel( std::string const &a_label ) const { + + for( int ig = 0; ig < (int) m_multiGroups.size( ); ++ig ) { + if( m_multiGroups[ig].label( ) == a_label ) return( m_multiGroups[ig] ); } - throw 1; + throw Exception( "Groups_from_bdfls::viaLabel: label not found." ); } -/* -========================================================= -*/ -std::vector GIDI_settings_groups_from_bdfls::getLabels( void ) const { - int size = (int) mGroups.size( ); - std::vector labels( size ); +/* *********************************************************************************************************//** + * Returns the MultiGroup whose *gid* is *a_gid*. + * + * @param a_gid [in] The bdfls *gid*. + * @return Returns the MultiGroup whose *label* is *a_label*. + ***********************************************************************************************************/ - for( int if1 = 0; if1 < size; ++if1 ) labels[if1] = mGroups[if1].getLabel( ); - return( labels ); +MultiGroup Groups_from_bdfls::getViaGID( int a_gid ) const { + + std::string label( LLNL_gidToLabel( a_gid ) ); + + return( viaLabel( label ) ); } -/* -========================================================= -*/ -std::vector GIDI_settings_groups_from_bdfls::getGIDs( void ) const { - int size = (int) mGroups.size( ); +/* *********************************************************************************************************//** + * Returns a list of *label*'s for all the MultiGroup's present in *this*. + * + * @return Returns the MultiGroup whose *label* is *a_label*. + ***********************************************************************************************************/ + +std::vector Groups_from_bdfls::labels( ) const { + + int size = (int) m_multiGroups.size( ); + std::vector _labels( size ); + + for( int if1 = 0; if1 < size; ++if1 ) _labels[if1] = m_multiGroups[if1].label( ); + return( _labels ); +} + +/* *********************************************************************************************************//** + * Returns a list of *gid*'s for all the MultiGroup's present in *this*. + * + * @return The list of *gid*'s. + ***********************************************************************************************************/ + +std::vector Groups_from_bdfls::GIDs( ) const { + + int size = (int) m_multiGroups.size( ); std::vector fids( size ); char *e; for( int if1 = 0; if1 < size; ++if1 ) { - fids[if1] = (int) strtol( &(mGroups[if1].getLabel( ).c_str( )[9]), &e, 10 ); + fids[if1] = (int) strtol( &(m_multiGroups[if1].label( ).c_str( )[9]), &e, 10 ); } return( fids ); } -/* -========================================================= -*/ -void GIDI_settings_groups_from_bdfls::print( bool outline, int valuesPerLine ) const { - int ngs = (int) mGroups.size( ); +/* *********************************************************************************************************//** + * Print each MultiGroup to std::cout in *this*. Mainly for debugging. + * + * @param a_outline [in] Passed to each MultiGroup print method. + * @param a_valuesPerLine [in] Passed to each MultiGroup print method. + ***********************************************************************************************************/ + +void Groups_from_bdfls::print( bool a_outline, int a_valuesPerLine ) const { + + int ngs = (int) m_multiGroups.size( ); std::cout << "BDFLS GROUPs: number of groups = " << ngs << std::endl; - for( int if1 = 0; if1 < ngs ; ++if1 ) mGroups[if1].print( outline, valuesPerLine ); + for( int if1 = 0; if1 < ngs ; ++if1 ) m_multiGroups[if1].print( " ", a_outline, a_valuesPerLine ); +} + +} + } -#endif diff --git a/source/processes/hadronic/models/lend/src/GIDI_settings_particle.cc b/source/processes/hadronic/models/lend/src/GIDI_settings_particle.cc index 6e53f14d1f..ab119c0dcb 100644 --- a/source/processes/hadronic/models/lend/src/GIDI_settings_particle.cc +++ b/source/processes/hadronic/models/lend/src/GIDI_settings_particle.cc @@ -1,230 +1,408 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #include -#include +#include -#include "GIDI_settings.hh" +#include "GIDI.hpp" -using namespace GIDI; +namespace GIDI { -/* -========================================================= -*/ -GIDI_settings_particle::GIDI_settings_particle( int PoPId, bool transporting, int energyMode ) : mGroup( ) { +namespace Transporting { + +/*! \class Particles + * Stores a list of Particle instances. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Particles::Particles( ) { - initialize( PoPId, transporting, energyMode ); } -/* -========================================================= -*/ -GIDI_settings_particle::GIDI_settings_particle( GIDI_settings_particle const &particle ) { - initialize( particle.mPoPId, particle.mTransporting, particle.mEnergyMode ); - setGroup( particle.mGroup ); - for( std::vector::const_iterator iter = particle.mProcessedFluxes.begin( ); iter != particle.mProcessedFluxes.end( ); ++iter ) { - mProcessedFluxes.push_back( *iter ); +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Particles::~Particles( ) { + +} + +/* *********************************************************************************************************//** + * Returns a pointer to the Particle in *this* with PoPs id *a_pid*. + * + * @param a_pid [in] The PoPs id of the particle to return. + * + * @return Pointer to particle if it exists or nullptr otherwise. + ***********************************************************************************************************/ + +Particle const *Particles::particle( std::string const &a_pid ) const { + + for( auto particleIter = m_particles.begin( ); particleIter != m_particles.end( ); ++particleIter ) { + if( PoPI::compareSpecialParticleIDs( (*particleIter).first, a_pid ) ) return( &(*particleIter).second ); + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Adds the Particle *a_particle* to *this*. If a particle with the same id as *a_particle* exists in *this* + * the *a_particle* is not added and false is returned. + * + * @param a_particle [in] The Particle to add to *this* as a particle to transport. + * + * @return Return true if particle is add and false otherwise. + ***********************************************************************************************************/ + +bool Particles::add( Particle const &a_particle ) { + + std::string const &pid = a_particle.pid( ); + + if( m_particles.find( pid ) != m_particles.end( ) ) return( false ); + m_particles.insert( std::pair( pid, Particle( a_particle ) ) ); + return( true ); +} + +/* *********************************************************************************************************//** + * Removes the Particle in *this* with PoPs id *a_pid*. + * + * @param a_pid [in] The PoPs id of the particle to remove from *this*. + * + * @return Return *true* if particle exist is remove and non-zero otherwise. + ***********************************************************************************************************/ + +bool Particles::remove( std::string const &a_pid ) { + + std::map::iterator particle = m_particles.find( a_pid ); + + if( particle == m_particles.end( ) ) return( false ); + m_particles.erase( a_pid ); + return( true ); +} + +/* *********************************************************************************************************//** + * Returns *true* if Particle with id *a_id* is in *this* and false otherwise. + * + * @param a_id [in] The PoPs id of the particle to check for in *this*. + * + * @return Return 0 if particle exist is remove and non-zero otherwise. + ***********************************************************************************************************/ + +bool Particles::hasParticle( std::string const &a_id ) const { + + return( particle( a_id ) != nullptr ); +} + +/* *********************************************************************************************************//** + * Process all the data in *this*. + * This includes determining the mapping between the uncollapsed (specified by *a_label*) and the collapsed multi-group boundaries, + * and grouping the flux data for each Particle. + * + * @param a_protare [in] The Protare whose multi-group data are to accessed. + * @param a_label [in] The label of the multi-group data to process. + ***********************************************************************************************************/ + +void Particles::process( Protare const &a_protare, std::string const &a_label ) { + + if( a_label == "" ) return; + + Styles::Base const *style = a_protare.styles( ).get( a_label ); + + if( style->moniker( ) == GIDI_SnElasticUpScatterStyleChars ) style = a_protare.styles( ).get( style->derivedStyle( ) ); + if( style->moniker( ) != GIDI_heatedMultiGroupStyleChars ) throw Exception( "Label does not yield a heatedMultiGroup style." ); + + Styles::HeatedMultiGroup const &heatedMultiGroup = *static_cast( style ); + + for( std::map::iterator iter = m_particles.begin( ); iter != m_particles.end( ); ++iter ) { + std::string pid = iter->first; + Particle *particle = &(iter->second); + + particle->process( heatedMultiGroup.transportable( pid ) ); } } -/* -========================================================= -*/ -int GIDI_settings_particle::initialize( int PoPId, bool transporting, int energyMode ) { - mPoPId = PoPId; - mTransporting = transporting; - int energyMode_ = ( energyMode & GIDI_settings_projectileEnergyMode_continuousEnergy ) - + ( energyMode & GIDI_settings_projectileEnergyMode_grouped ) -// + ( energyMode & GIDI_settings_projectileEnergyMode_fixedGrid ) // Currently not supported. - ; +/* *********************************************************************************************************//** + * Returns the particle IDs of *this* as a sorted *std::vector* list. + * + * @param a_orderIsAscending [in] If *true* IDs are sorted in ascending order, otherwise IDs are in descending order. + * + * @return The list of sorted particle IDs. + ***********************************************************************************************************/ - if( energyMode_ != energyMode ) throw 1; - mEnergyMode = energyMode; +std::vector Particles::sortedIDs( bool a_orderIsAscending ) const { - mGroupX = NULL; - setGroup( mGroup ); + std::vector keys; + + for( std::map::const_iterator iter = m_particles.begin( ); iter != m_particles.end( ); ++iter ) keys.push_back( (*iter).first ); + + return( sortedListOfStrings( keys, a_orderIsAscending ) ); +} + +/* *********************************************************************************************************//** + * Prints the contents of *this* to std::cout. Mainly used for debugging. + ***********************************************************************************************************/ + +void Particles::print( ) const { + + std::cout << "particles:" << std::endl; + + std::vector IDs = sortedIDs( ); + for( std::vector::const_iterator iter = IDs.begin( ); iter != IDs.end( ); ++iter ) { + Particle const &particle = m_particles.at( *iter ); + + particle.print( " " ); + } +} + +/*! \class Particle + * Specifies particle information as mainly needed for multi-group transport. For example, the coarse and fine multi-group data. + */ + +/* *********************************************************************************************************//** + * @param a_pid [in] Particle id for the particle. + * @param a_multiGroup [in] The multi-group boundaries. + * @param a_fluxes [in] The fluxes as f(T,E,mu). + * @param a_mode [in] Should probably be deprecated. + ***********************************************************************************************************/ + +Particle::Particle( std::string const &a_pid, MultiGroup const &a_multiGroup, Functions::Function3dForm const &a_fluxes, + Transporting::Mode a_mode ) : + m_pid( a_pid ), + m_mode( a_mode ), + m_conserve( Transporting::Conserve::number ), + m_multiGroup( a_multiGroup ) { + + std::vector fluxes = settingsFluxesFromFunction3d( a_fluxes ); + + for( auto flux = fluxes.begin( ); flux != fluxes.end( ); ++flux ) appendFlux( *flux ); +} + +/* *********************************************************************************************************//** + * @param a_pid [in] Particle id for the particle. + * @param a_mode [in] Should probably be deprecated. + ***********************************************************************************************************/ + +Particle::Particle( std::string const &a_pid, Transporting::Mode a_mode ) : + m_pid( a_pid ), + m_mode( a_mode ), + m_conserve( Transporting::Conserve::number ) { + +} + +/* *********************************************************************************************************//** + * @param a_pid [in] Particle id for the particle. + * @param a_group [in] The multi-group boundaries. + * @param a_mode [in] Should probably be deprecated. + ***********************************************************************************************************/ + +Particle::Particle( std::string const &a_pid, MultiGroup const &a_group, Transporting::Mode a_mode ) : + m_pid( a_pid ), + m_mode( a_mode ), + m_conserve( Transporting::Conserve::number ), + m_multiGroup( a_group ) { + +} + +/* *********************************************************************************************************//** + * @param a_particle [in] The Particle instance to copy. + ***********************************************************************************************************/ + +Particle::Particle( Particle const &a_particle ) : + m_pid( a_particle.pid( ) ), + m_mode( a_particle.mode( ) ), + m_conserve( a_particle.conserve( ) ), + m_multiGroup( a_particle.multiGroup( ) ), + m_collapseIndices( a_particle.collapseIndices( ) ) { + + for( std::vector::const_iterator iter = a_particle.m_fluxes.begin( ); iter != a_particle.m_fluxes.end( ); ++iter ) { + m_fluxes.push_back( *iter ); + } + + for( std::vector::const_iterator iter = a_particle.m_processedFluxes.begin( ); iter != a_particle.m_processedFluxes.end( ); ++iter ) { + m_processedFluxes.push_back( *iter ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Particle::~Particle( ) { + +} + +/* *********************************************************************************************************//** + * Adds a flux at a specified temperature to the list of fluxes. Currently, the temperature of the flux must be + * greater than temperatures for the currently listed fluxes. + * + * @param a_flux [in] The flux to add. + * @return An error code. If not error, returns 0, otherwise returns non-0 value. + ***********************************************************************************************************/ + +int Particle::appendFlux( Flux const &a_flux ) { + + double temperature = a_flux.temperature( ); + std::vector::iterator iter; + + for( iter = m_fluxes.begin( ); iter != m_fluxes.end( ); ++iter ) { + if( temperature <= iter->temperature( ) ) break; + } + if( iter != m_fluxes.end( ) ) return( 1 ); + m_fluxes.insert( iter, a_flux ); return( 0 ); } -/* -========================================================= -*/ -void GIDI_settings_particle::setGroup( GIDI_settings_group const &group ) { - nfu_status status_nf; +/* *********************************************************************************************************//** + * Returns the multi-group flux with its temperature closes to *a_temperature*. - mGroup = group; + * @param a_temperature [in] The temperature of the desired flux. + ***********************************************************************************************************/ - if( mGroupX != NULL ) ptwX_free( mGroupX ); - mGroupX = NULL; - if( mGroup.size( ) > 0 ) { - if( ( mGroupX = ptwX_create( (int) mGroup.size( ), (int) mGroup.size( ), mGroup.pointer( ), &status_nf ) ) == NULL ) throw 1; +ProcessedFlux const *Particle::nearestProcessedFluxToTemperature( double a_temperature ) const { + + double priorTemperature, lastTemperature = 0; // initialize to silence compiler warning + std::vector::const_iterator iter; + + if( m_processedFluxes.size( ) == 0 ) return( nullptr ); + + priorTemperature = m_processedFluxes[0].temperature( ); + for( iter = m_processedFluxes.begin( ); iter != m_processedFluxes.end( ); ++iter ) { + lastTemperature = iter->temperature( ); + if( lastTemperature > a_temperature ) break; } -} -/* -========================================================= -*/ -GIDI_settings_particle::~GIDI_settings_particle( ) { - - if( mGroupX != NULL ) ptwX_free( mGroupX ); -} -/* -========================================================= -*/ -int GIDI_settings_particle::addFlux( statusMessageReporting* /* smr */, GIDI_settings_flux const &flux ) { - - double temperature = flux.getTemperature( ); - std::vector::iterator iter; - - for( iter = mProcessedFluxes.begin( ); iter != mProcessedFluxes.end( ); ++iter ) { - if( temperature <= iter->getTemperature( ) ) break; - } -// BRB need to check if temperature is the same. - mProcessedFluxes.insert( iter, GIDI_settings_processedFlux( flux, mGroupX ) ); - return( 0 ); -} -/* -========================================================= -*/ -GIDI_settings_processedFlux const *GIDI_settings_particle::nearestFluxToTemperature( double temperature ) const { - - double priorTemperature, lastTemperature; - std::vector::const_iterator iter; - - if( mProcessedFluxes.size( ) == 0 ) return( NULL ); - - priorTemperature = mProcessedFluxes[0].getTemperature( ); - //TK adds next line - lastTemperature = mProcessedFluxes[0].getTemperature( ); - for( iter = mProcessedFluxes.begin( ); iter != mProcessedFluxes.end( ); ++iter ) { - lastTemperature = iter->getTemperature( ); - if( lastTemperature > temperature ) break; - //TK add next line - priorTemperature = iter->getTemperature( ); - } - if( iter == mProcessedFluxes.end( ) ) { + if( iter == m_processedFluxes.end( ) ) { --iter; } else { - //if( fabs( lastTemperature - temperature ) < fabs( temperature - priorTemperature ) ) --iter; - //TK modified above line - if( std::fabs( lastTemperature - temperature ) > std::fabs( temperature - priorTemperature ) ) --iter; + if( fabs( lastTemperature - a_temperature ) < fabs( a_temperature - priorTemperature ) ) --iter; } return( &(*iter) ); } -/* -========================================================= -*/ -ptwXPoints *GIDI_settings_particle::groupFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double temperature, int order ) const { - if( mGroupX == NULL ) return( NULL ); - GIDI_settings_processedFlux const *processedFlux = nearestFluxToTemperature( temperature ); - if( processedFlux == NULL ) return( NULL ); - return( processedFlux->groupFunction( smr, mGroupX, ptwXY1, order ) ); -} +/* *********************************************************************************************************//** + * For internal use only: should only be called from Particles::process. Determines the mapping of fine multi-group boundaries to coarse multi-group boundaries, + * and calculated multi-group fluxes from *m_fluxes*. + * + * @param a_transportable [in] The **Transportable** instance that specified the coarse multi-group information for collapsing. + * @param a_epsilon [in] Specifies how close a coarse multi-group boundary must be to a fine multi-group boundary to be considered the same boundary. + ***********************************************************************************************************/ -/* ---- GIDI_settings_processedFlux ---- */ -/* -========================================================= -*/ -GIDI_settings_processedFlux::GIDI_settings_processedFlux( GIDI_settings_flux const &flux, ptwXPoints *groupX ) : mFlux( flux ) { +void Particle::process( Transportable const &a_transportable, double a_epsilon ) { - nfu_status status_nf; - ptwXYPoints *fluxXY = NULL; - ptwXPoints *groupedFluxX; - GIDI_settings_flux_order const *fluxOrder; - double const *energies, *fluxes; + std::vector groupBoundaries = a_transportable.groupBoundaries( ); + std::string errInfo( "cannot collapse particle '" + m_pid + + "' from multi-group '" + a_transportable.group( ).label( ) + "' of size " + std::to_string( groupBoundaries.size( ) ) + + " to multi-group '" + m_multiGroup.label( ) + "' of size " + std::to_string( m_multiGroup.boundaries( ).size( ) ) ); - for( int order = 0; order < (int) flux.size( ); ++order ) { - fluxOrder = flux[order]; - energies = fluxOrder->getEnergies( ); - fluxes = fluxOrder->getFluxes( ); - if( ( fluxXY = ptwXY_createFrom_Xs_Ys( ptwXY_interpolationLinLin, NULL, 12, 1e-3, fluxOrder->size( ), 10, - fluxOrder->size( ), energies, fluxes, &status_nf, 0 ) ) == NULL ) goto err; - mFluxXY.push_back( fluxXY ); - if( ( groupedFluxX = ptwXY_groupOneFunction( fluxXY, groupX, ptwXY_group_normType_none, NULL, &status_nf ) ) == NULL ) goto err; - mGroupedFlux.push_back( groupedFluxX ); + if( m_multiGroup.size( ) == 0 ) { + if( m_mode != Transporting::Mode::MonteCarloContinuousEnergy ) throw Exception( "Multi-group boundaries not set for particle '" + m_pid + "'." ); } + else { + if( m_fineMultiGroup.size( ) > 0 ) { + if( m_fineMultiGroup.size( ) != groupBoundaries.size( ) ) + throw Exception( "For particle '" + m_pid + "', redefining particle's fine multi-group of different size not allowed." ); + for( std::size_t i1 = 0; i1 < m_fineMultiGroup.size( ); ++i1 ) { + if( fabs( m_fineMultiGroup[i1] - groupBoundaries[i1] ) > a_epsilon * m_fineMultiGroup[i1] ) + throw Exception( "For particle '" + m_pid + "', redefining particle's fine multi-group not allowed." ); + } + return; // Processing already done. + } + + int i1 = 0, n1 = (int) groupBoundaries.size( ); + + while( i1 < n1 ) { + if( fabs( m_multiGroup[0] - groupBoundaries[i1] ) <= a_epsilon * groupBoundaries[i1] ) break; + ++i1; + } + if( i1 == n1 ) throw Exception( "Groups not compatible: " + errInfo + "." ); + m_collapseIndices.push_back( i1 ); + + for( int i2 = 1; i2 < (int) m_multiGroup.size( ); ++i2 ) { + while( i1 < n1 ) { + if( fabs( m_multiGroup[i2] - groupBoundaries[i1] ) <= a_epsilon * groupBoundaries[i1] ) break; + ++i1; + } + if( i1 == n1 ) throw Exception( "Group boundaries not compatible: " + errInfo + "." ); + m_collapseIndices.push_back( i1 ); + } + + for( std::size_t i2 = 0; i2 < m_fluxes.size( ); ++i2 ) { + ProcessedFlux __processedFlux( m_fluxes[i2].process( groupBoundaries ) ); + m_processedFluxes.push_back( __processedFlux ); + } + + m_fineMultiGroup = a_transportable.group( ); } - return; -err: - throw 1; -} -/* -========================================================= -*/ -GIDI_settings_processedFlux::GIDI_settings_processedFlux( GIDI_settings_processedFlux const &flux ) : mFlux( flux.mFlux ) { - - nfu_status status_nf; - ptwXYPoints *fluxXY; - ptwXPoints *fluxX; - - for( int order = 0; order < (int) mFlux.size( ); ++order ) { - if( ( fluxXY = ptwXY_clone( flux.mFluxXY[order], &status_nf ) ) == NULL ) goto err; - mFluxXY.push_back( fluxXY ); - if( ( fluxX = ptwX_clone( flux.mGroupedFlux[order], &status_nf ) ) == NULL ) goto err; - mGroupedFlux.push_back( fluxX ); + if( a_transportable.conserve() == GIDI_conserveNumberChars ) { + m_conserve = Transporting::Conserve::number; + } else if( a_transportable.conserve() == GIDI_conserveEnergyOutChars ) { + m_conserve = Transporting::Conserve::energyOut; + } else { + throw Exception( "Unrecognized particle conserve flag '" + a_transportable.conserve() + "'" ); } - return; - -err: - for( std::vector::iterator iter = mFluxXY.begin( ); iter != mFluxXY.end( ); ++iter ) ptwXY_free( *iter ); - for( std::vector::iterator iter = mGroupedFlux.begin( ); iter != mGroupedFlux.end( ); ++iter ) ptwX_free( *iter ); - throw 1; } + +/* *********************************************************************************************************//** + * Print Particle data to std::cout. Mainly for debugging. + * + * @param a_indent [in] The indent for each printed line. + ***********************************************************************************************************/ + +void Particle::print( std::string const &a_indent ) const { + + std::string indent2( " " ); + indent2 += a_indent; + + std::cout << a_indent << "particle: id = " << m_pid << std::endl; + m_multiGroup.print( indent2 ); + + std::cout << indent2; + for( std::vector::const_iterator iter = m_collapseIndices.begin( ); iter != m_collapseIndices.end( ); ++iter ) std::cout << " " << *iter; + std::cout << std::endl; + +} + +/*! \class ProcessedFlux + * Stores multi-group flux data for a specified material temperature. + * + * Currently, only supports l=0 flux. This needs to be fixed. + */ + +/* *********************************************************************************************************//** + * @param a_temperature + * @param a_multiGroupFlux + ***********************************************************************************************************/ + +ProcessedFlux::ProcessedFlux( double a_temperature, std::vector const &a_multiGroupFlux ) : + m_temperature( a_temperature ), + m_multiGroupFlux( a_multiGroupFlux ) { + +} + +/* *********************************************************************************************************//** + * @param a_processedFlux [in] The ProcessedFlux instance to copy. + ***********************************************************************************************************/ + +ProcessedFlux::ProcessedFlux( ProcessedFlux const &a_processedFlux ) : + m_temperature( a_processedFlux.temperature( ) ), + m_multiGroupFlux( a_processedFlux.multiGroupFlux( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + /* ========================================================= */ -GIDI_settings_processedFlux& GIDI_settings_processedFlux::operator=( const GIDI_settings_processedFlux &flux ) { - if ( this != &flux ) { - // Clean-up existing things - for( std::vector::iterator iter = mFluxXY.begin( ); iter != mFluxXY.end( ); ++iter ) ptwXY_free( *iter ); - for( std::vector::iterator iter = mGroupedFlux.begin( ); iter != mGroupedFlux.end( ); ++iter ) ptwX_free( *iter ); - // Now assign - mFlux = flux.mFlux; - nfu_status status_nf; - ptwXYPoints *fluxXY; - ptwXPoints *fluxX; - for( int order = 0; order < (int) mFlux.size( ); ++order ) { - if( ( fluxXY = ptwXY_clone( flux.mFluxXY[order], &status_nf ) ) == NULL ) goto err; - mFluxXY.push_back( fluxXY ); - if( ( fluxX = ptwX_clone( flux.mGroupedFlux[order], &status_nf ) ) == NULL ) goto err; - mGroupedFlux.push_back( fluxX ); - } - } - return *this; +ProcessedFlux::~ProcessedFlux( ) { -err: - for( std::vector::iterator iter = mFluxXY.begin( ); iter != mFluxXY.end( ); ++iter ) ptwXY_free( *iter ); - for( std::vector::iterator iter = mGroupedFlux.begin( ); iter != mGroupedFlux.end( ); ++iter ) ptwX_free( *iter ); - throw 1; } -/* -========================================================= -*/ -GIDI_settings_processedFlux::~GIDI_settings_processedFlux( ) { - for( std::vector::iterator iter = mFluxXY.begin( ); iter != mFluxXY.end( ); ++iter ) ptwXY_free( *iter ); - for( std::vector::iterator iter = mGroupedFlux.begin( ); iter != mGroupedFlux.end( ); ++iter ) ptwX_free( *iter ); } -/* -========================================================= -*/ -ptwXPoints *GIDI_settings_processedFlux::groupFunction( statusMessageReporting * /*smr*/, ptwXPoints *groupX, ptwXYPoints *ptwXY1, int order ) const { - nfu_status status_nf; - ptwXYPoints *fluxXY; - ptwXPoints *groupedX; - - if( groupX == NULL ) return( NULL ); - if( order < 0 ) order = 0; - if( order >= (int) mFluxXY.size( ) ) order = (int) mFluxXY.size( ) - 1; - - fluxXY = ptwXY_xSlice( mFluxXY[order], ptwXY_getXMin( ptwXY1 ), ptwXY_getXMax( ptwXY1 ), 10, 1, &status_nf ); -// if( fluxXY == NULL ) smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_xSlice error %d: %s", status_nf, nfu_statusMessage( status_nf ) ); - - groupedX = ptwXY_groupTwoFunctions( ptwXY1, fluxXY, groupX, ptwXY_group_normType_norm, mGroupedFlux[order], &status_nf ); - ptwXY_free( fluxXY ); -// if( groupedX == NULL ) smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_groupTwoFunctions error %d: %s", status_nf, nfu_statusMessage( status_nf ) ); - return( groupedX ); } diff --git a/source/processes/hadronic/models/lend/src/GIDI_styles.cc b/source/processes/hadronic/models/lend/src/GIDI_styles.cc new file mode 100644 index 0000000000..38c20a33c1 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_styles.cc @@ -0,0 +1,941 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Styles { + +/*! \class Suite + * This is essentially the GIDI::Suite class with the addition of the **findLabelInLineage** method. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::Suite( ) : + GIDI::Suite( GIDI_stylesChars ) { + +} + +/* *********************************************************************************************************//** + * Searches the Suite *a_suite* for a form with label *a_label* or, if not found, recursively ascends the **derivedFrom** until + * a derived form is found. The *this* instance must be an <**styles**> node so that the **derivedFrom**s can be ascended. + * If no form is found, an empty string is returned. + * + * @param a_suite [in] The Suite, typically a component, whose forms are searched for a form with label *a_label* or one of its **derivedFrom**. + * @param a_label [in] The label of the form to start the search. + * @return The label of the form found or an empty string if none is found. + ***********************************************************************************************************/ + +std::string const *Suite::findLabelInLineage( GIDI::Suite const &a_suite, std::string const &a_label ) const { + + std::string const *label = &a_label; + Suite::const_iterator iter = a_suite.find( a_label ); + + while( true ) { + if( iter != a_suite.end( ) ) return( label ); + + Base const *form = get( *label ); + form = form->getDerivedStyle( ); + label = &form->keyValue( ); + if( *label == "" ) break; + iter = a_suite.find( *label ); + } + + return( label ); +} + +/*! \class Base + * This is the virtual base class inherited by all **style** classes. It handles the *date* and **derivedFrom** members. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + * @return + ***********************************************************************************************************/ + +Base::Base( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Form( a_node, a_setupInfo, FormType::style, a_parent ), + m_date( a_node.attribute_as_string( GIDI_dateChars ) ), + m_label( a_node.attribute_as_string( GIDI_labelChars ) ), + m_derivedStyle( a_node.attribute_as_string( GIDI_derivedFromChars ) ) { + + if( a_node.child( GUPI_documentationChars ).empty( ) ) { + m_documentation = nullptr; + } else { + m_documentation = new GUPI::Documentation( a_node.child( GIDI_documentationChars ) ); + } +} + +Base::~Base( ) { + + delete m_documentation; + +} + +/* *********************************************************************************************************//** + * Returns a pointer to the **derivedFrom** style of *this*. + * + * @return Pointer to the **derivedFrom** style of *this*. + ***********************************************************************************************************/ + +Base const *Base::getDerivedStyle( ) const { + + Form const *_form( sibling( m_derivedStyle ) ); + + return( dynamic_cast( _form ) ); +} + +/* *********************************************************************************************************//** + * Starting at *this*'s **derivedFrom** style, and ascending as needed, returns the **derivedFrom** style whose moniker is *a_moniker*. + * + * @param a_moniker [in] The moniker to search for. + * @return The style whose moniker is *a_moniker*. + ***********************************************************************************************************/ + +Base const *Base::getDerivedStyle( std::string const &a_moniker ) const { + + Form const *_form( sibling( m_derivedStyle ) ); + Base const *_style = dynamic_cast( _form ); + + if( _style == nullptr ) return( _style ); + if( _style->moniker( ) != a_moniker ) _style = _style->getDerivedStyle( a_moniker ); + return( _style ); +} + +/* *********************************************************************************************************//** + * Returns the base attributes for *this* as a *std::string* instance. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * + * @return The base attributes as a XML attribute string. + ***********************************************************************************************************/ + +std::string Base::baseXMLAttributes( GUPI::WriteInfo &a_writeInfo ) const { + + std::string attributes( a_writeInfo.addAttribute( GIDI_labelChars, label( ) ) ); + + if( m_derivedStyle != "" ) attributes += a_writeInfo.addAttribute( GIDI_derivedFromChars, m_derivedStyle ); + attributes += a_writeInfo.addAttribute( GIDI_dateChars, m_date ); + + return( attributes ); +} + +/*! \class Evaluated + * This is the **evaluated** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Evaluated::Evaluated( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_library( a_node.attribute_as_string( GIDI_libraryChars ) ), + m_version( a_node.attribute_as_string( GIDI_versionChars ) ), + m_temperature( a_node.child( GIDI_temperatureChars ), a_setupInfo ), + m_projectileEnergyDomain( a_node.child( GIDI_projectileEnergyDomainChars ), a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Evaluated::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = baseXMLAttributes( a_writeInfo ); + + attributes += a_writeInfo.addAttribute( GIDI_libraryChars, m_library ); + attributes += a_writeInfo.addAttribute( GIDI_versionChars, m_version ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_temperature.toXMLList( a_writeInfo, indent2 ); + m_projectileEnergyDomain.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class CrossSectionReconstructed + * This is the **crossSectionReconstructed** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +CrossSectionReconstructed::CrossSectionReconstructed( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_temperature( nullptr ) { + + HAPI::Node const temperatureNode = a_node.child( GIDI_temperatureChars ); + if( !temperatureNode.empty( ) ) { + m_temperature = new PhysicalQuantity( temperatureNode, a_setupInfo ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +CrossSectionReconstructed::~CrossSectionReconstructed( ) { + + delete m_temperature; +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &CrossSectionReconstructed::temperature( ) const { + + if( m_temperature != nullptr ) return( *m_temperature ); + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void CrossSectionReconstructed::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + if( m_temperature != nullptr ) m_temperature->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class AngularDistributionReconstructed + * This is the **angularDistributionReconstructed** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +AngularDistributionReconstructed::AngularDistributionReconstructed( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_temperature( nullptr ) { + + HAPI::Node const temperatureNode = a_node.child( GIDI_temperatureChars ); + if( !temperatureNode.empty( ) ) { + m_temperature = new PhysicalQuantity( temperatureNode, a_setupInfo ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AngularDistributionReconstructed::~AngularDistributionReconstructed( ) { + + delete m_temperature; +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &AngularDistributionReconstructed::temperature( ) const { + + if( m_temperature != nullptr ) return( *m_temperature ); + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AngularDistributionReconstructed::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + if( m_temperature != nullptr ) m_temperature->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class CoulombPlusNuclearElasticMuCutoff + * This is the **CoulombPlusNuclearElasticMuCutoff** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +CoulombPlusNuclearElasticMuCutoff::CoulombPlusNuclearElasticMuCutoff( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_muCutoff( a_node.attribute_as_double( GIDI_muCutoffChars ) ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &CoulombPlusNuclearElasticMuCutoff::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void CoulombPlusNuclearElasticMuCutoff::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = baseXMLAttributes( a_writeInfo ); + + attributes += a_writeInfo.addAttribute( GIDI_muCutoffChars, LUPI::Misc::doubleToShortestString( m_muCutoff ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Realization + * This is the GNDS **Realization** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Realization::Realization( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &Realization::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Realization::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = baseXMLAttributes( a_writeInfo ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class AverageProductData + * This is the **averageProductData** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +AverageProductData::AverageProductData( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_temperature( nullptr ) { + + HAPI::Node const temperatureNode = a_node.child( GIDI_temperatureChars ); + if( !temperatureNode.empty( ) ) { + m_temperature = new PhysicalQuantity( temperatureNode, a_setupInfo ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +AverageProductData::~AverageProductData( ) { + + delete m_temperature; +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &AverageProductData::temperature( ) const { + + if( m_temperature != nullptr ) return( *m_temperature ); + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void AverageProductData::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + if( m_temperature != nullptr ) m_temperature->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Heated + * This is the **heated** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Heated::Heated( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_temperature( a_node.child( GIDI_temperatureChars ), a_setupInfo ) { +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Heated::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + m_temperature.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class MonteCarlo_cdf + * This is the **MonteCarlo_cdf** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + * @return + ***********************************************************************************************************/ + +MonteCarlo_cdf::MonteCarlo_cdf( HAPI::Node const &a_node, SetupInfo &a_setupInfo, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &MonteCarlo_cdf::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void MonteCarlo_cdf::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class MultiGroup + * This is the **multiGroup** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +MultiGroup::MultiGroup( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_maximumLegendreOrder( a_node.attribute_as_int( GIDI_lMaxChars ) ), + m_transportables( a_construction, GIDI_transportablesChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseTransportablesSuite, nullptr ) { + + m_transportables.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +MultiGroup::~MultiGroup( ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &MultiGroup::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group boundaries for the product with index *a_productID*. + * + * @param a_productID [in] Particle id for the requested product. + * @return The multi-group boundaries. + ***********************************************************************************************************/ + +std::vector MultiGroup::groupBoundaries( std::string const &a_productID ) const { + + for( std::size_t index = 0; index < m_transportables.size( ); ++index ) { + Transportable const &transportable1 = *m_transportables.get( index ); + + if( transportable1.pid( ) == a_productID ) { + return( transportable1.groupBoundaries( ) ); + } + } + throw Exception( "MultiGroup::groupBoundaries: product index not found" ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void MultiGroup::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = baseXMLAttributes( a_writeInfo ); + + attributes += a_writeInfo.addAttribute( GIDI_lMaxChars, intToString( m_maximumLegendreOrder ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + m_transportables.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class HeatedMultiGroup + * This is the **neatedMultiGroup** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +HeatedMultiGroup::HeatedMultiGroup( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_transportables( a_construction, GIDI_transportablesChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_pops, parseTransportablesSuite, nullptr ), + m_flux( a_construction, a_node.child( GIDI_fluxNodeChars ), a_setupInfo ), + m_inverseSpeed( a_construction, a_node.child( GIDI_inverseSpeedChars ).child( GIDI_gridded1dChars ), a_setupInfo, nullptr ), + m_parameters( a_node.attribute_as_string( GIDI_parametersChars ) ) { + + m_transportables.setAncestor( this ); + m_flux.setAncestor( this ); + m_inverseSpeed.setAncestor( this ); + + if( m_transportables.size( ) == 0 ) { + GIDI::Suite const *transportables1 = nullptr; + if( a_setupInfo.m_multiGroup != nullptr ) { + transportables1 = &a_setupInfo.m_multiGroup->transportables( ); } + else if( a_setupInfo.m_heatedMultiGroup != nullptr ) { + transportables1 = &a_setupInfo.m_heatedMultiGroup->transportables( ); + } + if( transportables1 != nullptr ) { + for( std::size_t index = 0; index < transportables1->size( ); ++index ) { + Transportable const &transportable = *transportables1->get( index ); + + m_transportables.add( new Transportable( transportable ) ); + } + + } } + else if( a_setupInfo.m_heatedMultiGroup == nullptr ) { + a_setupInfo.m_heatedMultiGroup = this; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +HeatedMultiGroup::~HeatedMultiGroup( ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &HeatedMultiGroup::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Returns the **Transportable** instance for the particle with id *a_ID* used for processing this **HeatedMultiGroup**. + * + * @param a_ID [in] Particle id for the requested product. + * @return The multi-group boundaries. + ***********************************************************************************************************/ + +Transportable const &HeatedMultiGroup::transportable( std::string const &a_ID ) const { + + return( *m_transportables.get( a_ID ) ); +} + + +/* *********************************************************************************************************//** + * Returns the multi-group boundaries for the particle with id *a_ID* used for processing this **HeatedMultiGroup**. + * + * @param a_ID [in] Particle id for the requested product. + * @return The multi-group boundaries. + ***********************************************************************************************************/ + +std::vector HeatedMultiGroup::groupBoundaries( std::string const &a_ID ) const { + + Transportable const &transportable1 = transportable( a_ID ); + + return( transportable1.groupBoundaries( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void HeatedMultiGroup::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string indent3 = a_writeInfo.incrementalIndent( indent2 ); + std::string attributes = baseXMLAttributes( a_writeInfo ); + + attributes += a_writeInfo.addAttribute( GIDI_parametersChars, m_parameters ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + m_flux.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeStarter( indent2, GIDI_inverseSpeedChars, "" ); + m_inverseSpeed.toXMLList_func( a_writeInfo, indent3, false, false ); + a_writeInfo.addNodeEnder( GIDI_inverseSpeedChars ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class SnElasticUpScatter + * This is the **SnElasticUpScatter** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +SnElasticUpScatter::SnElasticUpScatter( HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_upperCalculatedGroup( a_node.attribute_as_int( GIDI_upperCalculatedGroupChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +SnElasticUpScatter::~SnElasticUpScatter( ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &SnElasticUpScatter::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void SnElasticUpScatter::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = baseXMLAttributes( a_writeInfo ); + + attributes += a_writeInfo.addAttribute( GIDI_upperCalculatedGroupChars, intToString( m_upperCalculatedGroup ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class GriddedCrossSection + * This is the **griddedCrossSection** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +GriddedCrossSection::GriddedCrossSection( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ), + m_grid( a_node.child( GIDI_gridChars ), a_setupInfo, a_construction.useSystem_strtod( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +GriddedCrossSection::~GriddedCrossSection( ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &GriddedCrossSection::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void GriddedCrossSection::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); + m_grid.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class URR_probabilityTables + * This is the **URR_probabilityTables** style class. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +URR_probabilityTables::URR_probabilityTables( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, GIDI::Suite *a_parent ) : + Base( a_node, a_setupInfo, a_parent ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +URR_probabilityTables::~URR_probabilityTables( ) { + +} + +/* *********************************************************************************************************//** + * Ascends the **derivedFrom** styles until a temperature is found. + * + * @return Returns the temperature associated with this style. + ***********************************************************************************************************/ + +PhysicalQuantity const &URR_probabilityTables::temperature( ) const { + + Base const *style = getDerivedStyle( ); + + if( style == nullptr ) throw Exception( "No style with temperature." ); + return( style->temperature( ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void URR_probabilityTables::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), baseXMLAttributes( a_writeInfo ) ); +} + +/*! \class TemperatureInfo + * This class stores the labels for a given temperature for the **heatedCrossSection**, **griddedCrossSection**, **heatedMultiGroup** and + * **SnElasticUpScatter** styles. If no style of a given process (e.g., **heatedCrossSection**) type exists, its label is an empty string. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +TemperatureInfo::TemperatureInfo( ) : + m_temperature( -1.0, "K" ), + m_heatedCrossSection( "" ), + m_griddedCrossSection( "" ), + m_URR_probabilityTables( "" ), + m_heatedMultiGroup( "" ), + m_SnElasticUpScatter( "" ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_temperature [in] The temperature. + * @param a_heatedCrossSection [in] The label for the **heatedCrossSection** style. + * @param a_griddedCrossSection [in] The label for the **griddedCrossSection** style. + * @param a_heatedMultiGroup [in] The label for the **heatedMultiGroup** style. + * @param a_URR_probabilityTables [in] The label for the **URR_probabilityTables** style. + * @param a_SnElasticUpScatter [in] The label for the **SnElasticUpScatter** style. + ***********************************************************************************************************/ + +TemperatureInfo::TemperatureInfo( PhysicalQuantity const &a_temperature, std::string const &a_heatedCrossSection, std::string const &a_griddedCrossSection, + std::string const &a_URR_probabilityTables, std::string const &a_heatedMultiGroup, std::string const &a_SnElasticUpScatter ) : + m_temperature( a_temperature ), + m_heatedCrossSection( a_heatedCrossSection ), + m_griddedCrossSection( a_griddedCrossSection ), + m_URR_probabilityTables( a_URR_probabilityTables ), + m_heatedMultiGroup( a_heatedMultiGroup ), + m_SnElasticUpScatter( a_SnElasticUpScatter ) { + +} + +/* *********************************************************************************************************//** + * Prints information about *this* to std::cout. + ***********************************************************************************************************/ + +void TemperatureInfo::print( ) const { + + std::cout << "temperature = " << m_temperature.value( ) << " " << m_temperature.unit( ) << " heatedCrossSection = '" << m_heatedCrossSection + << "' griddedCrossSection = '" << m_griddedCrossSection << "' URR_probabilityTables = '" << m_URR_probabilityTables + << "' heatedMultiGroup = '" << m_heatedMultiGroup << "' SnElasticUpScatter = '" << m_SnElasticUpScatter << std::endl; +} + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_suite.cc b/source/processes/hadronic/models/lend/src/GIDI_suite.cc new file mode 100644 index 0000000000..fe2b2358bc --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_suite.cc @@ -0,0 +1,559 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +/*! \class Suite + * This class is used to store a list (i.e., suite) of similar type **GNDS** nodes. +*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::Suite( std::string const &a_keyName ) : + GUPI::Ancestry( "" ), + m_keyName( a_keyName ), + m_styles( nullptr ), + m_allowsLazyParsing( false ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** moniker for the Suite instance. + * @param a_keyName [in] The name of the key for elements of *this*. + ***********************************************************************************************************/ + +Suite::Suite( std::string const &a_moniker, std::string const &a_keyName ) : + GUPI::Ancestry( a_moniker ), + m_keyName( a_keyName ), + m_styles( nullptr ), + m_allowsLazyParsing( false ) { + +} + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_moniker [in] The **GNDS** moniker for the Suite instance. + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Suite. + * @param a_keyName [in] The name of the key for referencing up child nodes. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parseSuite [in] This function to call to parse each sub-node. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + * @param a_allowsLazyParsing [in] Boolean stating if the suite allows lazy parsing. + ***********************************************************************************************************/ + +Suite::Suite( Construction::Settings const &a_construction, std::string const &a_moniker, std::string const &a_keyName, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, parseSuite a_parseSuite, + Styles::Suite const *a_styles, bool a_allowsLazyParsing ) : + GUPI::Ancestry( a_moniker ), + m_keyName( a_keyName ), + m_styles( a_styles ), + m_allowsLazyParsing( a_allowsLazyParsing ), + m_href( "" ) { + + HAPI::Node const node = a_node.child( a_moniker.c_str( ) ); + m_href = node.attribute_as_string( GIDI_hrefChars ); + + if( !node.empty( ) ) parse( a_construction, node, a_setupInfo, a_pops, a_internalPoPs, a_parseSuite, a_styles ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::~Suite( ) { + + for( std::vector::const_iterator iter = m_forms.begin( ); iter < m_forms.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * This methods parses all the child nodes of *a_node*. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Product. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parseSuite [in] This function to call to parse each sub-node. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +void Suite::parse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + PoPI::Database const &a_internalPoPs, parseSuite a_parseSuite, GIDI::Styles::Suite const *a_styles ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + Form *form = nullptr; + + if( m_allowsLazyParsing && a_construction.lazyParsing( ) ) { + form = new LazyParsingHelperForm( a_construction, this, child, a_setupInfo, a_pops, a_internalPoPs, name, a_styles, a_parseSuite ); } + else { + form = a_parseSuite( a_construction, this, child, a_setupInfo, a_pops, a_internalPoPs, name, a_styles ); + } + if( form != nullptr ) add( form ); + } +} + +/* *********************************************************************************************************//** + * Returns the index of the node in *this* that has keyValue *a_keyValue*. + + * @return [in] The index of the node with keyValue *a_keyValue* in *this*. + ***********************************************************************************************************/ + +int Suite::operator[]( std::string const &a_keyValue ) const { + + std::map::const_iterator iter = m_map.find( a_keyValue ); + if( iter == m_map.end( ) ) { + throw Exception( "form '" + a_keyValue + "' not in suite " + toXLink( ) + "." ); + } + + return( iter->second ); +} + +/* *********************************************************************************************************//** + * Adds the node *a_form* to *this*. + * + * @param a_form [in] The form to add. + ***********************************************************************************************************/ + +void Suite::add( Form *a_form ) { + + int i1 = 0; + + for( Suite::iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter, ++i1 ) { + if( (*iter)->keyValue( ) == a_form->keyValue( ) ) { + m_forms[i1] = a_form; + a_form->setAncestor( this ); + return; + } + } + m_map[a_form->keyValue( )] = (int) m_forms.size( ); + m_forms.push_back( a_form ); + a_form->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Check to see if the form is a **LazyParsingHelperForm**, it so, parses the form, loads it before returning the requested form. + * + * @param a_index [in] The index of the child to return. + * + * @return The form at index *a_index*. + ***********************************************************************************************************/ + +Form *Suite::checkLazyParsingHelperForm( std::size_t a_index ) { + + Form *form = m_forms[a_index]; + + if( form->type( ) == FormType::lazyParsingHelperForm ) { + LazyParsingHelperForm *lazyParsingHelperForm = static_cast( form ); + form = lazyParsingHelperForm->parse( ); + if( form == nullptr ) { // Happens because several forms (e.g., CoulombPlusNuclearElastic) are not needed by transport codes and are not parsed. + form = lazyParsingHelperForm; } + else { + form->setAncestor( this ); + m_forms[a_index] = form; + delete lazyParsingHelperForm; + } + } + + return( form ); +} + +/* *********************************************************************************************************//** + * Check to see if the form is a **LazyParsingHelperForm**, it so, parses the form, loads it before returning the requested form. + * + * @param a_index [in] The index of the child to return. + * + * @return The form at index *a_index*. + ***********************************************************************************************************/ + +Form *Suite::checkLazyParsingHelperForm( std::size_t a_index ) const { + + Form *form = m_forms[a_index]; + + if( form->type( ) == FormType::lazyParsingHelperForm ) { + LazyParsingHelperForm *lazyParsingHelperForm = static_cast( form ); + form = lazyParsingHelperForm->parse( ); + if( form != nullptr ) { + form->setAncestor( const_cast( this ) ); + m_forms[a_index] = form; + delete lazyParsingHelperForm; + } + } + + return( form ); +} +/* *********************************************************************************************************//** + * Check to see if the form is a **LazyParsingHelperForm**, it so, parses the form, loads it before returning the requested form. + * + * @param a_iter [in] Iterator to the **Form** to check. + * + * @return The iterator to the old or converted form. + ***********************************************************************************************************/ + +Suite::iterator Suite::checkLazyParsingHelperFormIterator( Suite::iterator a_iter ) { + + if( a_iter == end( ) ) return( a_iter ); + + std::size_t index = (*this)[(*a_iter)->keyValue()]; + ++a_iter; + checkLazyParsingHelperForm( index ); + + return( --a_iter ); +} + +/* *********************************************************************************************************//** + * Check to see if the form is a **LazyParsingHelperForm**, it so, parses the form, loads it before returning the requested form. + * + * @param a_iter [in] Iterator to the **Form** to check. + * + * @return The form at index *a_index*. + ***********************************************************************************************************/ + +Suite::const_iterator Suite::checkLazyParsingHelperFormIterator( Suite::const_iterator a_iter ) const { + + if( a_iter == end( ) ) return( a_iter ); + + std::size_t index = (*this)[(*a_iter)->keyValue()]; + a_iter++; + checkLazyParsingHelperForm( index ); + + return( --a_iter ); +} + +/* *********************************************************************************************************//** + * Returns the iterator to the node with keyValue *a_keyValue*. + * + * @param a_keyValue [in] The keyValue of the node to find. + * @param a_convertLazyParsingHelperForm [in] If true and requested form is a LazyParsingHelperForm instance, that instance is replaced with the parsed form. + * + * @return The iterator to the node with keyValue *a_keyValue*. + ***********************************************************************************************************/ + +Suite::iterator Suite::find( std::string const &a_keyValue, bool a_convertLazyParsingHelperForm ) { + + for( Suite::iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) { + if( (*iter)->keyValue( ) == a_keyValue ) { + if( a_convertLazyParsingHelperForm ) return( checkLazyParsingHelperFormIterator( iter ) ); + return( iter ); + } + } + return( m_forms.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns the iterator to the node with keyValue *a_keyValue*. + * + * @param a_keyValue [in] The keyValue of the node to find. + * @param a_convertLazyParsingHelperForm [in] If true and requested form is a LazyParsingHelperForm instance, that instance is replaced with the parsed form. + * + * @return The iterator to the node with keyValue *a_keyValue*. + ***********************************************************************************************************/ + +Suite::const_iterator Suite::find( std::string const &a_keyValue, bool a_convertLazyParsingHelperForm ) const { + + for( Suite::const_iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) { + if( (*iter)->keyValue( ) == a_keyValue ) { + if( a_convertLazyParsingHelperForm ) return( checkLazyParsingHelperFormIterator( iter ) ); + return( iter ); + } + } + return( m_forms.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns a list of iterators to the nodes in *this* that have **GNDS** moniker *a_moniker*. + * + * @param a_moniker [in] The moniker to search for. + * + * @return List of iterators to the nodes in *this* that have moniker *a_moniker*. + ***********************************************************************************************************/ + +std::vector Suite::findAllOfMoniker( std::string const &a_moniker ) { + + std::vector iters; + + for( Suite::iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) { + if( (*iter)->moniker( ) == a_moniker ) iters.push_back( iter ); + } + + return( iters ); +} + +/* *********************************************************************************************************//** + * Returns a list of iterators to the nodes in *this* that have **GNDS** moniker *a_moniker*. + * + * @param a_moniker [in] The moniker to search for. + * + * @return List of iterators to the nodes in *this* that have moniker *a_moniker*. + ***********************************************************************************************************/ + +std::vector Suite::findAllOfMoniker( std::string const &a_moniker ) const { + + std::vector iters; + + for( Suite::const_iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) { + if( (*iter)->moniker( ) == a_moniker ) iters.push_back( iter ); + } + + return( iters ); +} + +/* *********************************************************************************************************//** + * This method finds the nearest form of instance Functions::XYs1d in *this* that is prior to the form with label *a_label*. + * + * @param a_label [in] The label of the form to start from when looking backwards. + * @param a_formType [in] The type of form to return. + * + * @return Pointer to an Functions::XYs1d instance of nullptr if one not found. + ***********************************************************************************************************/ + +Form const *Suite::findInstanceOfTypeInLineage( std::string const &a_label, std::string const &a_moniker ) const { + + Form const *form1 = nullptr; + auto formIter = m_forms.end( ); + + for( auto iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) { + if( (*iter)->label( ) == a_label ) break; + if( (*iter)->actualMoniker( ) == a_moniker ) formIter = iter; + } + + if( formIter != m_forms.end( ) ) { + form1 = *checkLazyParsingHelperFormIterator( formIter ); + } + + return( form1 ); +} + +/* *********************************************************************************************************//** + * This method finds the nearest form of instance Functions::XYs1d in *this* that is prior to the form with label *a_label*. + * + * @param a_styles [in] The styles suite for the protare. + * @param a_label [in] The label of the form to start from when looking backwards. + * @param a_formType [in] The type of form to return. + * + * @return Pointer to an Functions::XYs1d instance of nullptr if one not found. + ***********************************************************************************************************/ + +Form *Suite::findInstanceOfTypeInLineage( Styles::Suite const &a_styles, std::string const &a_label, std::string const &a_moniker ) { + + auto stylesIter = a_styles.find( a_label ); + if( stylesIter != a_styles.end( ) ) { + auto suiteIter = find( a_label ); + if( suiteIter != end( ) ) { + if( (*suiteIter)->actualMoniker( ) == a_moniker ) return( *checkLazyParsingHelperFormIterator( suiteIter ) ); + } + Styles::Base const *style = static_cast( *stylesIter ); + return( findInstanceOfTypeInLineage( a_styles, style->getDerivedStyle( )->keyValue( ), a_moniker ) ); + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Only for internal use. Called by ProtareTNSL instance to zero the lower energy multi-group data covered by the ProtareSingle that + * contains the TNSL data covers the lower energy multi-group data. + * + * @param a_maximumTNSL_MultiGroupIndex [in] A map that contains labels for heated multi-group data and the last valid group boundary + * for the TNSL data for that boundary. + ***********************************************************************************************************/ + +void Suite::modifiedMultiGroupElasticForTNSL( std::map a_maximumTNSL_MultiGroupIndex ) { + + for( auto iter = a_maximumTNSL_MultiGroupIndex.begin( ); iter != a_maximumTNSL_MultiGroupIndex.end( ); ++iter ) { + auto formIter = find( iter->first, true ); + + if( formIter == m_forms.end( ) ) continue; + + if( (*formIter)->type( ) == FormType::gridded1d ) { + reinterpret_cast( (*formIter) )->modifiedMultiGroupElasticForTNSL( iter->second ); } + else if( (*formIter)->type( ) == FormType::gridded3d ) { + reinterpret_cast( (*formIter) )->modifiedMultiGroupElasticForTNSL( iter->second ); + } + } +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry *Suite::findInAncestry3( std::string const &a_item ) { + + std::size_t index( a_item.find( '=' ) ), lastQuote = a_item.size( ) - 2; + + if( index == std::string::npos ) return( nullptr ); + ++index; + if( index > lastQuote ) throw Exception( "Suite::findInAncestry3: invalide xlink" ); + if( a_item[index] != '\'' ) throw Exception( "Suite::findInAncestry3: invalid xlink, missing '." ); + ++index; + if( a_item[lastQuote] != '\'' ) throw Exception( "Suite::findInAncestry3: invalid xlink, missing endl '." ); + + std::string keyValue( a_item.substr( index, lastQuote - index ) ); + + return( get( keyValue ) ); +} + +/* *********************************************************************************************************//** + * Used by GUPI::Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +GUPI::Ancestry const *Suite::findInAncestry3( std::string const &a_item ) const { + + std::size_t index( a_item.find( '=' ) ), lastQuote = a_item.size( ) - 2; + + if( index == std::string::npos ) return( nullptr ); + ++index; + if( index > lastQuote ) throw Exception( "Suite::findInAncestry3: invalide xlink" ); + if( a_item[index] != '\'' ) throw Exception( "Suite::findInAncestry3: invalid xlink, missing '." ); + ++index; + if( a_item[lastQuote] != '\'' ) throw Exception( "Suite::findInAncestry3: invalid xlink, missing endl '." ); + + std::string keyValue( a_item.substr( index, lastQuote - index ) ); + + return( get( keyValue ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Suite::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + if( size( ) == 0 ) return; + + std::string XMLLine( a_indent + "<" + moniker( ) + ">" ); + a_writeInfo.push_back( XMLLine ); + + for( Suite::const_iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Prints the list of node keyValues to std::cout. + * + * @param a_header [in] A string printed before the list of keyValues is printed. + ***********************************************************************************************************/ + +void Suite::printFormLabels( std::string const &a_header ) const { + + std::cout << a_header << ": size = " << size( ) << std::endl; + + for( Suite::const_iterator iter = m_forms.begin( ); iter != m_forms.end( ); ++iter ) + std::cout << " " << (*iter)->keyValue( ) << std::endl; +} + +/*! \class Component + * This class is used to store a list (i.e., suite) of similar type **GNDS** form nodes. +*/ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_moniker [in] The **GNDS** moniker for the Suite instance. + * @param a_keyName [in] The key name for elements of *this*. + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Product. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] The *external* PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_parseSuite [in] This function to call to parse each sub-node. + * @param a_styles [in] The <**styles**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +Component::Component( Construction::Settings const &a_construction, std::string const &a_moniker, std::string const &a_keyName, + HAPI::Node const &a_node, SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, + parseSuite a_parseSuite, Styles::Suite const *a_styles ) : + Suite( a_construction, a_moniker, a_keyName, a_node, a_setupInfo, a_pops, a_internalPoPs, a_parseSuite, a_styles, true ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** moniker for the Suite instance. + * @param a_keyName [in] The key name for elements of *this*. + ***********************************************************************************************************/ + +Component::Component( std::string const &a_moniker, std::string const &a_keyName ) : + Suite( a_moniker, a_keyName ) { + +} + +/*! \class LazyParsingHelperForm + * This class stores information about a GNDS node so that it can be parsed at a later time if needed. +*/ + +/* *********************************************************************************************************//** + * Constructor that stores information so the *a_node* can be parsed at a later time. + * + * @param a_construction [in] Used to pass user options for parsing. + * @param a_parent [in] The parent GIDI::Suite that the returned Form will be added to. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPs Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_name [in] The moniker for the node to be parsed. + * @param a_styles [in] A pointer to the <**styles**> node. + * @param a_parser [in] The parser function for the suite the actual form will be inserted into. + ***********************************************************************************************************/ + +LazyParsingHelperForm::LazyParsingHelperForm( Construction::Settings const &a_construction, Suite *a_parent, HAPI::Node const &a_node, + SetupInfo &a_setupInfo, PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs, std::string const &a_name, + Styles::Suite const *a_styles, parseSuite a_parser ) : + Form( a_node, a_setupInfo, FormType::lazyParsingHelperForm, a_parent ), + m_construction( a_construction ), + m_node( a_node ), + m_setupInfo( a_setupInfo ), + m_pops( &a_pops ), + m_internalPoPs( &a_internalPoPs ), + m_name( a_name ), + m_styles( a_styles ), + m_parser( a_parser ) { + + m_construction.setLazyParsing( false ); + m_setupInfo.m_protare->incrementNumberOfLazyParsingHelperForms( ); +} + +/* *********************************************************************************************************//** + * Constructor that stores information so the *a_node* can be parsed at a later time. + ***********************************************************************************************************/ + +Form *LazyParsingHelperForm::parse( ) { + + Form *form = m_parser( m_construction, parent( ), m_node, m_setupInfo, *m_pops, *m_internalPoPs, m_name, m_styles ); + m_setupInfo.m_protare->incrementNumberOfLazyParsingHelperFormsReplaced( ); + + return( form ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LazyParsingHelperForm::~LazyParsingHelperForm( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_sums.cc b/source/processes/hadronic/models/lend/src/GIDI_sums.cc new file mode 100644 index 0000000000..d90571e8e4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_sums.cc @@ -0,0 +1,373 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Sums { + +/*! \class Sums + * This class represents the **GNDS** <**sums**> node. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Sums::Sums( ) : + GUPI::Ancestry( GIDI_sumsChars ), + m_crossSectionSums( GIDI_sumsCrossSectionsChars, GIDI_labelChars ), + m_multiplicitySums( GIDI_sumsMultiplicitiesChars, GIDI_labelChars ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Sums::~Sums( ) { + +} + +/* *********************************************************************************************************//** + * The Sums method to parse its sub-nodes. + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +void Sums::parse( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ) { + + char const *moniker = GIDI_crossSectionSumsChars; + if( a_node.child( GIDI_crossSectionSumsChars ).empty( ) ) moniker = GIDI_sumsCrossSectionsChars; + m_crossSectionSums.parse( a_construction, a_node.child( moniker ), a_setupInfo, a_pops, a_internalPoPs, parseSumsCrossSectionsSuite, nullptr ); + + moniker = GIDI_multiplicitySumsChars; + if( a_node.child( GIDI_multiplicitySumsChars ).empty( ) ) moniker = GIDI_sumsMultiplicitiesChars; + m_multiplicitySums.parse( a_construction, a_node.child( moniker ), a_setupInfo, a_pops, a_internalPoPs, parseSumsMultiplicitiesSuite, nullptr ); + + m_crossSectionSums.setAncestor( this ); + m_multiplicitySums.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry *Sums::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_crossSectionSumsChars ) return( &m_crossSectionSums ); + if( a_item == GIDI_multiplicitySumsChars ) return( &m_multiplicitySums ); + + if( a_item == GIDI_sumsCrossSectionsChars ) return( &m_crossSectionSums ); // GNDS 1.10. + if( a_item == GIDI_sumsMultiplicitiesChars ) return( &m_multiplicitySums ); // GNDS 1.10. + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry const *Sums::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_crossSectionSumsChars ) return( &m_crossSectionSums ); + if( a_item == GIDI_multiplicitySumsChars ) return( &m_multiplicitySums ); + + if( a_item == GIDI_sumsCrossSectionsChars ) return( &m_crossSectionSums ); // GNDS 1.10. + if( a_item == GIDI_sumsMultiplicitiesChars ) return( &m_multiplicitySums ); // GNDS 1.10. + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Sums::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), "" ); + m_crossSectionSums.toXMLList( a_writeInfo, indent2 ); + m_multiplicitySums.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Base + * Base class for Sums sub-node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + * @param a_type [in] Type for the node. + ***********************************************************************************************************/ + +Base::Base( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, LUPI_maybeUnused PoPI::Database const &a_pops, + LUPI_maybeUnused PoPI::Database const &a_internalPoPs, FormType a_type ) : + Form( a_node, a_setupInfo, a_type ), + m_ENDF_MT( a_node.attribute_as_int( GIDI_ENDF_MT_Chars ) ), + m_summands( a_construction, a_node.child( GIDI_sumsSummandsChars ), a_setupInfo ) { + + m_summands.setAncestor( this ); +} + +/*! \class CrossSectionSum + * This class represents the **GNDS** <**crossSectionSum**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +CrossSectionSum::CrossSectionSum( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ) : + Base( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, FormType::crossSectionSum ), + m_Q( a_construction, GIDI_QChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseQSuite, nullptr ), + m_crossSection( a_construction, GIDI_crossSectionChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseCrossSectionSuite, nullptr ) { + + m_Q.setAncestor( this ); + m_crossSection.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry *CrossSectionSum::findInAncestry3( std::string const &a_item ) { + + if( a_item == GIDI_QChars ) return( &m_Q ); + if( a_item == GIDI_crossSectionChars ) return( &m_crossSection ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the member whose moniker is *a_item*. + * + * @param a_item [in] The moniker of the member to return. + * @return Returns the pointer to the member of nullptr if it does not exists. + ***********************************************************************************************************/ + +GUPI::Ancestry const *CrossSectionSum::findInAncestry3( std::string const &a_item ) const { + + if( a_item == GIDI_QChars ) return( &m_Q ); + if( a_item == GIDI_crossSectionChars ) return( &m_crossSection ); + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void CrossSectionSum::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_ENDF_MT_Chars, intToString( ENDF_MT( ) ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + summands( ).toXMLList( a_writeInfo, indent2 ); + + m_Q.toXMLList( a_writeInfo, indent2 ); + m_crossSection.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class MultiplicitySum + * This class represents the **GNDS** <**multiplicitySum**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_internalPoPs [in] The *internal* PoPI::Database instance used to get particle indices and possibly other particle information. + * This is the <**PoPs**> node under the <**reactionSuite**> node. + ***********************************************************************************************************/ + +MultiplicitySum::MultiplicitySum( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, PoPI::Database const &a_internalPoPs ) : + Base( a_construction, a_node, a_setupInfo, a_pops, a_internalPoPs, FormType::multiplicitySum ), + m_multiplicity( a_construction, GIDI_multiplicityChars, GIDI_labelChars, a_node, a_setupInfo, a_pops, a_internalPoPs, parseMultiplicitySuite, nullptr ) { + + m_multiplicity.setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void MultiplicitySum::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + attributes += a_writeInfo.addAttribute( GIDI_ENDF_MT_Chars, intToString( ENDF_MT( ) ) ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + summands( ).toXMLList( a_writeInfo, indent2 ); + + m_multiplicity.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Summands + * This class represents the **GNDS** <**summands**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Summands::Summands( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::summands ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + + if( name == GIDI_sumsAddChars ) { + Summand::Add *add = new Summand::Add( a_construction, child, a_setupInfo ); + + add->setAncestor( this ); + m_summands.push_back( add ); } + else { + std::cout << "Sums::Summand::Base: Ignoring unsupported Form '" << name << "'." << std::endl; + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Summands::~Summands( ) { + + for( std::vector::iterator iter = m_summands.begin( ); iter < m_summands.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Summands::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + a_writeInfo.addNodeStarter( a_indent, moniker( ), "" ); + for( std::vector::const_iterator iter = m_summands.begin( ); iter != m_summands.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +namespace Summand { + +/*! \class Base + * Base class inherited by sub-nodes of Summands. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Base::Base( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, LUPI_maybeUnused SetupInfo &a_setupInfo ) : + GUPI::Ancestry( a_node.name( ) ), + m_href( a_node.attribute_as_string( GIDI_hrefChars ) ) { + +} +/* +========================================================= + * + * @return + */ +Base::~Base( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Base::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes = a_writeInfo.addAttribute( GIDI_hrefChars, href( ) ); + + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + + +/*! \class Add + * This class represents the **GNDS** <**add**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Add::Add( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Base( a_construction, a_node, a_setupInfo ) { + +} + +} // End of namespace Summand. + +} // End of namespace Sums. + +} // End of namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_table.cc b/source/processes/hadronic/models/lend/src/GIDI_table.cc new file mode 100644 index 0000000000..e2622513a4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_table.cc @@ -0,0 +1,174 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +namespace GIDI { + +namespace Table { + +/*! \class Table + * Class for the GNDS **table** node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Table::Table( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo ) : + Form( a_node, a_setupInfo, FormType::table ), + m_rows( a_node.attribute_as_int( GIDI_rowsChars ) ), + m_coluns( a_node.attribute_as_int( GIDI_columnsChars ) ), + m_storageOrder( a_node.attribute_as_string( GIDI_storageOrderChars ) ), + m_columnHeaders( a_construction, GIDI_columnHeadersChars, GIDI_indexChars, a_node, a_setupInfo, PoPI::Database( ), PoPI::Database( ), parseColumnHeaders, nullptr ), + m_data( a_construction, a_node.child( GIDI_dataChars ), a_setupInfo ) { + + if( m_storageOrder == "" ) m_storageOrder = GIDI_rowMajorChars; + + m_columnHeaders.setAncestor( this ); + m_data.setAncestor( this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Table::~Table( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Table::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + std::string attributes; + attributes += a_writeInfo.addAttribute( GIDI_rowsChars, intToString( m_rows ) ); + attributes += a_writeInfo.addAttribute( GIDI_columnsChars, intToString( m_coluns ) ); + if( m_storageOrder != GIDI_rowMajorChars ) attributes += a_writeInfo.addAttribute( GIDI_storageOrderChars, m_storageOrder ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + m_columnHeaders.toXMLList( a_writeInfo, indent2 ); + m_data.toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/*! \class Column + * Class for the GNDS **column** node that is a child of the **columnHeaders** node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Column::Column( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Form( a_node, a_setupInfo, FormType::column, a_parent ), + m_index( a_node.attribute_as_string( GIDI_indexChars ) ), + m_name( a_node.attribute_as_string( GIDI_nameChars ) ), + m_unit( a_node.attribute_as_string( GIDI_unitChars ) ), + m_types( a_node.attribute_as_string( GIDI_typesChars ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Column::~Column( ) { + +} + +/* *********************************************************************************************************//** + * Set the *m_keyValue* per the *a_keyName* name. This method assumes that *a_keyName* is "label". Otherwise, it executes a throw. + * + * @param a_keyName [in] The name of the key whose value is set. + ***********************************************************************************************************/ + +void Column::setKeyValue( std::string const &a_keyName ) const { + + if( a_keyName != GIDI_indexChars ) throw Exception( "Form::setKeyValue: unsupported keyname \"" + a_keyName + "\"." ); + + m_keyValue = m_index; +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Column::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + std::string attributes; + attributes += a_writeInfo.addAttribute( GIDI_indexChars, m_index ); + attributes += a_writeInfo.addAttribute( GIDI_nameChars, m_name ); + if( m_unit != "" ) attributes += a_writeInfo.addAttribute( GIDI_unitChars, m_unit ); + if( m_types != "" ) attributes += a_writeInfo.addAttribute( GIDI_typesChars, m_types ); + a_writeInfo.addNodeStarterEnder( a_indent, moniker( ), attributes ); +} + +/*! \class Data + * Class for the GNDS **data** node that is a child of the **table** node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + ***********************************************************************************************************/ + +Data::Data( LUPI_maybeUnused Construction::Settings const &a_construction, HAPI::Node const &a_node, LUPI_maybeUnused SetupInfo &a_setupInfo ) : + GUPI::Ancestry( GIDI_dataChars ), + m_sep( a_node.attribute_as_string( GIDI_sepChars ) ), + m_body( a_node.text().get() ) { + + if( m_sep == "" ) m_sep = " "; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Data::~Data( ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Data::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string attributes; + if( m_sep != " " ) attributes += a_writeInfo.addAttribute( GIDI_sepChars, m_sep ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + a_writeInfo.push_back( m_body ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Table. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_transportable.cc b/source/processes/hadronic/models/lend/src/GIDI_transportable.cc new file mode 100644 index 0000000000..03adf531bc --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_transportable.cc @@ -0,0 +1,67 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +#define GIDI_conserveChars "conserve" + +/*! \class Transportable + * Class for the GNDS <**transportable**> node that resides under the <**transportables**> node. + */ + +/* *********************************************************************************************************//** + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed to construct a Transportable instance. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_pops [in] A PoPI::Database instance used to get particle indices and possibly other particle information. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Transportable::Transportable( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, + PoPI::Database const &a_pops, Suite *a_parent ) : + Form( a_node, a_setupInfo, FormType::transportable, a_parent ), + m_conserve( a_node.attribute_as_string( GIDI_conserveChars ) ), + m_group( a_construction, a_node.child( GIDI_groupChars ), a_setupInfo, a_pops ) { +} + +/* *********************************************************************************************************//** + * Copy constructor. + * + * @param a_transportable [in] Transportable instance to copy. + ***********************************************************************************************************/ + +Transportable::Transportable( Transportable const &a_transportable ) : + Form( a_transportable ), + m_conserve( a_transportable.conserve( ) ), + m_group( a_transportable.group( ) ) { + +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Transportable::toXMLList( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + + attributes += a_writeInfo.addAttribute( GIDI_conserveChars, m_conserve ); + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + m_group.toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_unspecified1d.cc b/source/processes/hadronic/models/lend/src/GIDI_unspecified1d.cc new file mode 100644 index 0000000000..9cb5d60a48 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_unspecified1d.cc @@ -0,0 +1,109 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GIDI.hpp" + +namespace GIDI { + +namespace Functions { + +/*! \class Unspecified1d + * Class for the GNDS <**unspecified**> node. + */ + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Unspecified1d::Unspecified1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::unspecified1d, a_parent ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Unspecified1d::~Unspecified1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns the domain minimum for the instance. + * + * @return The domain minimum for the instance. + ***********************************************************************************************************/ + +double Unspecified1d::domainMin( ) const { + + return( 0.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the domain maximum for the instance. + * + * @return The domain maximum for the instance. + ***********************************************************************************************************/ + +double Unspecified1d::domainMax( ) const { + + return( 1.0 ); // FIXME +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the specified projectile's energy. + * Currently not implemented. + * + * @param a_x1 [in] The projectile's energy. + * @return The value of the function evaluated at *a_x1*. + ***********************************************************************************************************/ + +double Unspecified1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Unspecified1d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Unspecified1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + a_writeInfo.addNodeStarter( a_indent, moniker( ), attributes ); + + axes( ).toXMLList( a_writeInfo, indent2 ); + a_writeInfo.addNodeEnder( moniker( ) ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GIDI_vector.cc b/source/processes/hadronic/models/lend/src/GIDI_vector.cc new file mode 100644 index 0000000000..c5eec948ca --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_vector.cc @@ -0,0 +1,394 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GIDI.hpp" + +namespace GIDI { + +/*! \class Vector + * This class stores a mathematical vector and has methods that perform several vector operations (e.g., addition, subtraction). + */ + +/* *********************************************************************************************************//** + * + * @param a_size [in] Number of initial elements of the matrix. All elements are initialized to 0. + ***********************************************************************************************************/ + +Vector::Vector( std::size_t a_size ) { + + m_vector.resize( a_size, 0.0 ); +} + +/* *********************************************************************************************************//** + * + * @param a_values [in] A list of doubles to initialize *this* with. + ***********************************************************************************************************/ + +Vector::Vector( std::vector const &a_values ) { + + m_vector = a_values; +} + +/* *********************************************************************************************************//** + * + * @param a_number [in] This number of element pointed to by *a_values*. + * @param a_values [in] A list of doubles to initialize *this* with. + ***********************************************************************************************************/ + +Vector::Vector( std::size_t a_number, double const *a_values ) { + + m_vector.resize( a_number ); + for( std::size_t i1 = 0; i1 < a_number; ++i1 ) m_vector[i1] = a_values[i1]; +} + +/* *********************************************************************************************************//** + * + * @param a_vector [in] Vector to copy. + ***********************************************************************************************************/ + +Vector::Vector( Vector const &a_vector ) : + m_vector( a_vector.m_vector ) { + +} + +/* *********************************************************************************************************//** + * Returns a new Vector whose elements are *this* plus *a_rhs*. + * + * @param a_rhs [in] The value to add to each element. + * @return New Vectors whose elements are *this* plus *a_rhs*. + ***********************************************************************************************************/ + +Vector &Vector::operator=( Vector const &a_rhs ) { + + if( this != &a_rhs ) { + m_vector = a_rhs.m_vector; + } + + return( *this ); +} +/* +========================================================= +*/ +Vector::~Vector( ) { + +} + +/* *********************************************************************************************************//** + * Returns a new Vector whose elements are *this* plus *a_value*. + * + * @param a_value [in] The value to add to each element. + * @return New Vector whose elements are *this* plus *a_value*. + ***********************************************************************************************************/ + +Vector Vector::operator+( double a_value ) const { + + Vector gidiVector( *this ); + + gidiVector += a_value; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Adds *a_value* to each element of *this*. + * + * @param a_value [in] The value to add to each element. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator+=( double a_value ) { + + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) *iter += a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Adds two Vectors. + * + * @param a_rhs [in] Vector to add to *this*. + * @return New Vector that is the vector sum of *this* and *a_rhs*. + ***********************************************************************************************************/ + +Vector Vector::operator+( Vector const &a_rhs ) const { + + Vector gidiVector( *this ); + + gidiVector += a_rhs; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Adds *a_rhs* to *this*. + * + * @param a_rhs [in] Vector to add to *this*. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator+=( Vector const &a_rhs ) { + + if( a_rhs.size( ) == 0 ) return( *this ); + + if( size( ) == 0 ) resize( a_rhs.size( ) ); + if( size( ) != a_rhs.size( ) ) throw Exception( "vector sizes differ." ); + + std::size_t i1 = 0; + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter, ++i1 ) *iter += a_rhs[i1]; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Vector whose elements are *this* minus *a_value*. + * + * @param a_value [in] The value to subtract from each element. + * @return New Vector whose elements are *this* plus *a_value*. + ***********************************************************************************************************/ + +Vector Vector::operator-( double a_value ) const { + + Vector gidiVector( *this ); + + gidiVector -= a_value; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_value* from each element of *this*. + * + * @param a_value [in] The value to subtract from each element. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator-=( double a_value ) { + + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) *iter -= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_rhs* from *this*. + * + * @param a_rhs [in] Vector to subtract from *this*. + * @return New Vector that is *this* minus *a_rhs*. + ***********************************************************************************************************/ + +Vector Vector::operator-( Vector const &a_rhs ) const { + + Vector gidiVector( *this ); + + gidiVector -= a_rhs; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Subtracts *a_rhs* to *this*. + * + * @param a_rhs [in] Vector to subtract from *this*. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator-=( Vector const &a_rhs ) { + + if( a_rhs.size( ) == 0 ) return( *this ); + + if( size( ) == 0 ) resize( a_rhs.size( ) ); + if( size( ) != a_rhs.size( ) ) throw Exception( "vector sizes differ." ); + + std::size_t i1 = 0; + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter, ++i1 ) *iter -= a_rhs[i1]; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Vector whose elements are *this* multiplied by *a_value*. + * + * @param a_value [in] The value to multiply each element by. + * @return New Vector whose elements are *this* multiply by *a_value*. + ***********************************************************************************************************/ + +Vector Vector::operator*( double a_value ) const { + + Vector gidiVector( *this ); + + gidiVector *= a_value; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Multiplies each element of *this* by *a_value*. + * + * @param a_value [in] The value to multiply each element by. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator*=( double a_value ) { + + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) *iter *= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns a new Vector whose elements are *this* divided by *a_value*. + * + * @param a_value [in] The value to divide each element by. + * @return New Vector whose elements are *this* divided by *a_value*. + ***********************************************************************************************************/ + +Vector Vector::operator/( double a_value ) const { + + Vector gidiVector( *this ); + + gidiVector /= a_value; + return( gidiVector ); +} + +/* *********************************************************************************************************//** + * Divides each element of *this* by *a_value*. + * + * @param a_value [in] The value to divide each element by. + * @return Returns reference to *this*. + ***********************************************************************************************************/ + +Vector &Vector::operator/=( double a_value ) { + + if( a_value == 0 ) throw Exception( "divide by zero." ); + for( std::vector::iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) *iter /= a_value; + + return( *this ); +} + +/* *********************************************************************************************************//** + * Reverse the elements of *this*. + ***********************************************************************************************************/ + +void Vector::reverse( ) { + + std::size_t i2 = size( ), n_2 = i2 / 2; + + --i2; + for( std::size_t i1 = 0; i1 < n_2; ++i1, --i2 ) { + double temp = m_vector[i1]; + + m_vector[i1] = m_vector[i2]; + m_vector[i2] = temp; + } +} + +/* *********************************************************************************************************//** + * Sets all elements in the range [*a_start*,*a_end*) to *a_value*. + * + * @param a_start [in] The starting flat-cell index of *this* to fill with *a_value*. + * @param a_end [in] One after the last flat-cell index of *this* to fill with *a_value*. + * @param a_value [in] The value to set each double in the range to. + ***********************************************************************************************************/ + +void Vector::setToValueInFlatRange( std::size_t a_start, std::size_t a_end, double a_value ) { + + a_end = std::min( a_end, m_vector.size( ) ); + for( ; a_start < a_end; ++a_start ) m_vector[a_start] = a_value; +} +/* *********************************************************************************************************//** + * Returns the sum over the values of *this*. + ***********************************************************************************************************/ + +double Vector::sum( ) { + + double sum1 = 0.0; + + for( std::size_t i1 = 0; i1 < size( ); ++i1 ) sum1 += m_vector[i1]; + + return( sum1 ); +} + +/* *********************************************************************************************************//** + * Prints the contents of *this* to std::cout as one line prefixed with **a_prefix**. + * + * @param a_prefix [in] Prefix to add to line. + ***********************************************************************************************************/ + +void Vector::print( std::string const &a_prefix ) const { + + std::cout << a_prefix; + for( std::vector::const_iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) printf( "%19.11e", *iter ); + std::cout << std::endl; +} + +/* *********************************************************************************************************//** + * Writes the contents of *this* to *a_file* as one line prefixed with **a_prefix**. + * + * @param a_file [in] A pointer to an opened C FILE instance where the data are to be written. + * @param a_prefix [in] Prefix to add to line. + ***********************************************************************************************************/ + +void Vector::write( FILE *a_file, std::string const &a_prefix ) const { + + if( a_prefix.size( ) > 0 ) fprintf( a_file, "# %s\n", a_prefix.c_str( ) ); + for( std::vector::const_iterator iter = m_vector.begin( ); iter < m_vector.end( ); ++iter ) fprintf( a_file, "%19.11e\n", *iter ); +} + +/* *********************************************************************************************************//** + * This method writes the contents of *this* to output *a_file* with each pair (boundary, value) as one line. Each line is written + * with the C *printf* style format as specified via the *a_format* arguement. If *a_epsilon* is zero then ( size() + 1 ) + * lines are printed with the last y-value being the last value in *this*. If *a_epsilon* is not zero then ( 2 * size() ) + * lines are printed with each boundary with index 1 to size() being print at first ( boundary[index] * ( 1 - a_epsilon ) ) + * and then ( boundary[index] * ( 1 + a_epsilon ) ) as : + * + * boundary[index] * ( 1 - a_epsilon ) ), this[index-1] + * boundary[index] * ( 1 + a_epsilon ) ), this[index] + * + * + * @param a_file [in] A pointer to an opened C FILE instance where the data are to be written. + * @param a_format [in] A C *printf* style format to wrint one line of each (boundary, value) pair. Must include the line feed character. + * @param a_boundaries [in] The list of boundaries. Must contain (size() + 1) values except for the case when size() is 0. + * @param a_epsilon [in] Prefix to add to line. + ***********************************************************************************************************/ + +void Vector::writeWithBoundaries( FILE *a_file, char const *a_format, std::vector const &a_boundaries, double a_epsilon ) const { + + if( size( ) == 0 ) { + if( a_boundaries.size( ) > 0 ) { + Vector vector( a_boundaries.size( ) - 1 ); + vector.writeWithBoundaries2( a_file, a_format, a_boundaries, a_epsilon ); } } + else { + if( size( ) + 1 != a_boundaries.size( ) ) throw Exception( "Vector::writeWithBoundaries: Vector size and number of boundaries are not compatible." ); + writeWithBoundaries2( a_file, a_format, a_boundaries, a_epsilon ); + } +} + +/* *********************************************************************************************************//** + * For internal use only. See method **writeWithBoundaries** for description. + * + * @param a_file [in] A pointer to an opened C FILE instance where the data are to be written. + * @param a_format [in] A C *printf* style format to wrint one line of each (boundary, value) pair. Do not include the line feed character. + * @param a_boundaries [in] The list of boundaries. Must contain (size() + 1) values except for the case when size() is 0. + * @param a_epsilon [in] Prefix to add to line. + ***********************************************************************************************************/ +void Vector::writeWithBoundaries2( FILE *a_file, char const *a_format, std::vector const &a_boundaries, double a_epsilon ) const { + + int numberOfValues = (int) size( ); + + if( a_epsilon == 0.0 ) { + for( int index = 0; index < numberOfValues; ++index ) fprintf( a_file, a_format, a_boundaries[index], m_vector[index] ); } + else { + if( numberOfValues > 0 ) fprintf( a_file, a_format, a_boundaries[0], m_vector[0] ); + for( int index = 1; index < numberOfValues; ++index ) { + fprintf( a_file, a_format, a_boundaries[index] * ( 1.0 - a_epsilon ), m_vector[index-1] ); + + fprintf( a_file, a_format, a_boundaries[index] * ( 1.0 + a_epsilon ), m_vector[index] ); + } + } + if( numberOfValues > 0 ) fprintf( a_file, a_format, a_boundaries[numberOfValues], m_vector[numberOfValues-1] ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GIDI_xs_pdf_cdf1d.cc b/source/processes/hadronic/models/lend/src/GIDI_xs_pdf_cdf1d.cc new file mode 100644 index 0000000000..d49e89a361 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GIDI_xs_pdf_cdf1d.cc @@ -0,0 +1,165 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GIDI.hpp" +#include + +namespace GIDI { + +namespace Functions { + +#define GIDI_xsChars "xs" +#define GIDI_pdfChars "pdf" +#define GIDI_cdfChars "cdf" + +/*! \class Xs_pdf_cdf1d + * Class for the GNDS <**xs_pdf_cdf1d**> node. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Xs_pdf_cdf1d::Xs_pdf_cdf1d( ) : + Function1dForm( GIDI_xs_pdf_cdf1dChars, FormType::XYs1d, Axes(), ptwXY_interpolationLinLin, 0, 0.0 ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_axes [in] The axes to copy for *this*. + * @param a_interpolation [in] The interpolation flag. + * @param a_index [in] If imbedded in a two dimensional function, the index of this instance. + * @param a_outerDomainValue [in] If imbedded in a two dimensional function, the domain value for *x2*. + * @param a_Xs [in] List of x1 values. + * @param a_pdf [in] The pdf evaluated at the x1 values. + * @param a_cdf [in] The pdf evaluated at the x1 values. + ***********************************************************************************************************/ + +Xs_pdf_cdf1d::Xs_pdf_cdf1d( Axes const &a_axes, ptwXY_interpolation a_interpolation, std::vector const &a_Xs, + std::vector const &a_pdf, std::vector const &a_cdf, int a_index, double a_outerDomainValue ) : + Function1dForm( GIDI_xs_pdf_cdf1dChars, FormType::xs_pdf_cdf1d, a_axes, a_interpolation, a_index, a_outerDomainValue ), + m_xs( a_Xs ), + m_pdf( a_pdf ), + m_cdf( a_cdf ) { + +} + +/* *********************************************************************************************************//** + * + * @param a_construction [in] Used to pass user options to the constructor. + * @param a_node [in] The **HAPI::Node** to be parsed and used to construct the XYs2d. + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_parent [in] The parent GIDI::Suite. + ***********************************************************************************************************/ + +Xs_pdf_cdf1d::Xs_pdf_cdf1d( Construction::Settings const &a_construction, HAPI::Node const &a_node, SetupInfo &a_setupInfo, Suite *a_parent ) : + Function1dForm( a_construction, a_node, a_setupInfo, FormType::xs_pdf_cdf1d, a_parent ) { + + nf_Buffer buffer; + parseValuesOfDoubles( a_construction, a_node.child( GIDI_xsChars ).child( GIDI_valuesChars ), a_setupInfo, buffer ); + m_xs = buffer.vector(); + parseValuesOfDoubles( a_construction, a_node.child( GIDI_pdfChars ).child( GIDI_valuesChars ), a_setupInfo, buffer ); + m_pdf = buffer.vector(); + parseValuesOfDoubles( a_construction, a_node.child( GIDI_cdfChars ).child( GIDI_valuesChars ), a_setupInfo, buffer ); + m_cdf = buffer.vector(); +} + +/* *********************************************************************************************************//** + * *********************************************************************************************************/ + +Xs_pdf_cdf1d::~Xs_pdf_cdf1d( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +Xs_pdf_cdf1d &Xs_pdf_cdf1d::operator=( Xs_pdf_cdf1d const &a_rhs ) { + + if( this != &a_rhs ) { + Function1dForm::operator=( a_rhs ); + m_xs = a_rhs.Xs( ); + m_pdf = a_rhs.pdf( ); + m_cdf = a_rhs.cdf( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * The value of *pdf* at the point *a_x1*. + * Currently not implemented. + * + * @param a_x1 [in] The point for the *x1* axis. + * @return The value of the function at the point *a_x1*. + ***********************************************************************************************************/ + +double Xs_pdf_cdf1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + throw Exception( "Xs_pdf_cdf1d::evaluate: not implemented." ); +} + +/* *********************************************************************************************************//** + * This methods returns an XYs1d representation of the pdf of *this*. The calling function owns the created instance and is responible + * for freeing it. + * + * @param a_asLinlin [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_accuracy [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_lowerEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * @param a_upperEps [in] This argument is not used but retained to make the methods API at same as other asXYs1d functions. + * + * @return A pointer to an XYs1d instance that must be freed by the calling function. + ***********************************************************************************************************/ + +XYs1d *Xs_pdf_cdf1d::asXYs1d( LUPI_maybeUnused bool a_asLinlin, LUPI_maybeUnused double a_accuracy, LUPI_maybeUnused double a_lowerEps, LUPI_maybeUnused double a_upperEps ) const { + + return( new XYs1d( axes( ), ptwXY_interpolationLinLin, m_xs, m_pdf ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + * @param a_embedded [in] If *true*, *this* function is embedded in a higher dimensional function. + * @param a_inRegions [in] If *true*, *this* is in a Regions1d container. + ***********************************************************************************************************/ + +void Xs_pdf_cdf1d::toXMLList_func( GUPI::WriteInfo &a_writeInfo, std::string const &a_indent, bool a_embedded, bool a_inRegions ) const { + + std::string attributes; + + if( a_embedded ) { + attributes += a_writeInfo.addAttribute( GIDI_outerDomainValueChars, LUPI::Misc::doubleToShortestString( outerDomainValue( ) ) ); } + else { + if( a_inRegions ) { + attributes = a_writeInfo.addAttribute( GIDI_indexChars, intToString( index( ) ) ); } + else { + if( label( ) != "" ) attributes = a_writeInfo.addAttribute( GIDI_labelChars, label( ) ); + } + } + + if( interpolation( ) != ptwXY_interpolationLinLin ) attributes += a_writeInfo.addAttribute( GIDI_interpolationChars, interpolationString( ) ); + + std::string xml = a_writeInfo.nodeStarter( a_indent, moniker( ), attributes ); + xml += nodeWithValuesToDoubles( a_writeInfo, GIDI_xsChars, m_xs ); + xml += nodeWithValuesToDoubles( a_writeInfo, GIDI_pdfChars, m_pdf ); + xml += nodeWithValuesToDoubles( a_writeInfo, GIDI_cdfChars, m_cdf ); + xml += a_writeInfo.nodeEnder( moniker( ) ); + + a_writeInfo.push_back( xml ); +} + +} // End namespace Functions. + +} // End namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/GUPI_ancestry.cc b/source/processes/hadronic/models/lend/src/GUPI_ancestry.cc new file mode 100644 index 0000000000..2cd7b2c3ee --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GUPI_ancestry.cc @@ -0,0 +1,265 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GUPI.hpp" + +namespace GUPI { + +/*! \class Ancestry + * This is a base class inherit by most other classes. It allows one to construct a node's *xlink* or get another + * node from its *xlink*. + */ + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** node's name (i.e., moniker). + * @param a_attribute [in] Currently not used. + ***********************************************************************************************************/ + +Ancestry::Ancestry( std::string const &a_moniker, std::string const &a_attribute ) : + m_moniker( a_moniker ), + m_ancestor( nullptr ), + m_attribute( a_attribute ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Ancestry::~Ancestry( ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the member's of *this* to those of *a_ancestry* except for + * the member *m_ancestor* which is set to **nullptr**. + * + * @param a_ancestry [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +Ancestry &Ancestry::operator=( Ancestry const &a_ancestry ) { + + if( this != &a_ancestry ) { + m_moniker = a_ancestry.moniker( ); + m_ancestor = nullptr; + m_attribute = a_ancestry.attribute( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Returns the root node, ascending all parent nodes until one is found without an ancester. That node is returned. + * + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry *Ancestry::root( ) { + + Ancestry *_root = this; + + while( _root->m_ancestor != nullptr ) _root = _root->m_ancestor; + return( _root ); +} + +/* *********************************************************************************************************//** + * Returns the root node, ascending all parent nodes until one is found without an ancester. That node is returned. + * + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry const *Ancestry::root( ) const { + + Ancestry const *_root = this; + + while( _root->m_ancestor != nullptr ) _root = _root->m_ancestor; + return( _root ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the node whose *xlink* (i.e., *a_href*) is *a_href*. + * + * @param a_href [in] The *xlink* whose node is to be returned. + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry *Ancestry::findInAncestry( std::string const &a_href ) { + + std::vector segments = LUPI::Misc::splitXLinkString( a_href ); + + return( findInAncestry2( 0, segments ) ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the node whose *xlink* (i.e., *a_href*) is *a_href*. + * + * @param a_href [in] The *xlink* whose node is to be returned. + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry const *Ancestry::findInAncestry( std::string const &a_href ) const { + + std::vector segments = LUPI::Misc::splitXLinkString( a_href ); + + return( findInAncestry2( 0, segments ) ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the node whose *xlink* is defined by the *a_segments* argument. The *a_segments* is the *xlink* + * divided into segments separated by the '/' character. + * + * @param a_index [in] An index into the *a_segments* whose segment is to be found at this level. + * @param a_segments [in] The list of *xlink* segments. + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry *Ancestry::findInAncestry2( std::size_t a_index, std::vector const &a_segments ) { + + Ancestry *item = this; + + if( a_index == a_segments.size( ) ) return( item ); + + std::string segment( a_segments[a_index] ); + + if( segment == "" ) { + item = this->root( ); + ++a_index; + if( a_segments[a_index] != item->moniker( ) ) return( nullptr ); } + else if( segment == "." ) { + } + else if( segment == ".." ) { + item = this->ancestor( ); } + else { + item = this->findInAncestry3( segment ); + } + + if( item == nullptr ) return( item ); + + ++a_index; + return( item->findInAncestry2( a_index, a_segments ) ); +} + +/* *********************************************************************************************************//** + * Returns a pointer to the node whose *xlink* is defined by the *a_segments* argument. The *a_segments* is the *xlink* + * divided into segments separated by the '/' character. + * + * @param a_index [in] An index into the *a_segments* whose segment is to be found at this level. + * @param a_segments [in] The list of *xlink* segments. + * @return Returns the root node (i.e., the top level node). + ***********************************************************************************************************/ + +Ancestry const *Ancestry::findInAncestry2( std::size_t a_index, std::vector const &a_segments ) const { + + Ancestry const *item = this; + + if( a_index == a_segments.size( ) ) return( item ); + + std::string segment( a_segments[a_index] ); + + if( segment == "" ) { + item = this->root( ); + ++a_index; + if( a_segments[a_index] != item->moniker( ) ) return( nullptr ); } + else if( segment == "." ) { + } + else if( segment == ".." ) { + item = this->ancestor( ); } + else { + item = this->findInAncestry3( segment ); + } + + if( item == nullptr ) return( item ); + + ++a_index; + return( item->findInAncestry2( a_index, a_segments ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST void Ancestry::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_STD_STRING( m_moniker, a_buffer, a_mode ); + DATA_MEMBER_STD_STRING( m_attribute, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_ancestor = nullptr; +} + +/* *********************************************************************************************************//** + * Constructs and returns the *xlink* for *this*. + * + * @return The constructed *xlink*. + ***********************************************************************************************************/ + +std::string Ancestry::toXLink( ) const { + + std::string xlink( "/" + m_moniker + xlinkItemKey( ) ); + + if( isRoot( ) ) return( xlink ); + return( m_ancestor->toXLink( ) + xlink ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Ancestry::toXMLList( LUPI_maybeUnused WriteInfo &a_writeInfo, LUPI_maybeUnused std::string const &a_indent ) const { + + std::cout << "Node '" << moniker( ) << "' needs toXMLList methods." << std::endl; +} + +/* *********************************************************************************************************//** + * Calls **toXMLList** and then writes the XML lines to the file "test.xml". + ***********************************************************************************************************/ + +void Ancestry::printXML( ) const { + + WriteInfo writeInfo; + + toXMLList( writeInfo, "" ); + + std::ofstream fileio; + fileio.open( "test.xml" ); + for( std::list::iterator iter = writeInfo.m_lines.begin( ); iter != writeInfo.m_lines.end( ); ++iter ) { + fileio << *iter << std::endl; + } + fileio.close( ); +} + +/* *********************************************************************************************************//** + * @param a_incrementalIndent [in] The incremental amount of indentation a node adds to a sub-nodes indentation. + * @param a_valuesPerLine [in] The maximum number of integer or float values that are written per line before a new line is created. + * @param a_sep [in] The separation character to use between integer and float values in a list. + ***********************************************************************************************************/ + +WriteInfo::WriteInfo( std::string const &a_incrementalIndent, int a_valuesPerLine, std::string const &a_sep ) : + m_incrementalIndent( a_incrementalIndent ), + m_valuesPerLine( a_valuesPerLine ), + m_sep( a_sep ) { + +} + +/* *********************************************************************************************************//** + * Prints to contents the *this* to std::cout. + ***********************************************************************************************************/ + +void WriteInfo::print( ) { + + for( auto line = m_lines.begin( ); line != m_lines.end( ); ++line ) std::cout << *line << std::endl; +} + +} diff --git a/source/processes/hadronic/models/lend/src/GUPI_documentation.cc b/source/processes/hadronic/models/lend/src/GUPI_documentation.cc new file mode 100644 index 0000000000..2f6220828c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GUPI_documentation.cc @@ -0,0 +1,39 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GUPI.hpp" + +namespace GUPI { + +/*! \class Documentation + * + */ + +Documentation::Documentation(HAPI::Node const &a_node) : + Ancestry(a_node.name()), + m_doi(a_node.attribute_as_string(GUPI_doiChars)), + m_publicationDate(a_node.attribute_as_string(GUPI_publicationDateChars)), + m_version(a_node.attribute_as_string(GUPI_versionChars)), + m_title(a_node.child(GUPI_titleChars)), + m_abstract(a_node.child(GUPI_abstractChars)), + m_body(a_node.child(GUPI_bodyChars)) { + + m_title.setAncestor(this); + m_abstract.setAncestor(this); + m_body.setAncestor(this); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Documentation::~Documentation( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/GUPI_entry.cc b/source/processes/hadronic/models/lend/src/GUPI_entry.cc new file mode 100644 index 0000000000..4d8f21490b --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GUPI_entry.cc @@ -0,0 +1,66 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "GUPI.hpp" + +namespace GUPI { + +/*! \class Entry + * This is a base class inherit by other classes that are enties in a **Suite**. + */ + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** node's name (i.e., moniker). + * @param a_attribute [in] Currently not used. + ***********************************************************************************************************/ + +Entry::Entry( std::string const &a_moniker, std::string const &a_keyName, std::string const &a_keyValue ) : + Ancestry( a_moniker ), + m_keyName( a_keyName ), + m_keyValue( a_keyValue ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** node's name (i.e., moniker). + * @param a_attribute [in] Currently not used. + ***********************************************************************************************************/ + +Entry::Entry( HAPI::Node const &a_node, std::string const &a_keyName ) : + Ancestry( a_node.name( ) ), + m_keyName( a_keyName ), + m_keyValue( a_node.attribute_as_string( a_keyName.c_str( ) ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Entry::~Entry( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST void Entry::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Ancestry::serialize( a_buffer, a_mode ); + DATA_MEMBER_STD_STRING( m_keyName, a_buffer, a_mode ); + DATA_MEMBER_STD_STRING( m_keyValue, a_buffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/GUPI_suite.cc b/source/processes/hadronic/models/lend/src/GUPI_suite.cc new file mode 100644 index 0000000000..eefb19c8d0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GUPI_suite.cc @@ -0,0 +1,265 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +namespace GUPI { + +/*! \class Suite + * This class is used to store a list (i.e., suite) of similar type **GNDS** nodes. +*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::Suite( std::string const &a_keyName ) : + Ancestry( "" ), + m_keyName( a_keyName ) { + +} + +/* *********************************************************************************************************//** + * @param a_moniker [in] The **GNDS** moniker for the Suite instance. + * @param a_keyName [in] The name of the key for elements of *this*. + ***********************************************************************************************************/ + +Suite::Suite( std::string const &a_moniker, std::string const &a_keyName ) : + Ancestry( a_moniker ), + m_keyName( a_keyName ) { + +} + +/* *********************************************************************************************************//** + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Product. + * @param a_keyName [in] The name of the key for referencing up child nodes. + * @param a_parseSuite [in] This function to call to parse each sub-node. + ***********************************************************************************************************/ + +Suite::Suite( HAPI::Node const &a_node, std::string const &a_keyName, GUPI_parseSuite a_parseSuite ) : + Ancestry( a_node.name( ) ), + m_keyName( a_keyName ) { + + parse( a_node, a_parseSuite ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Suite::~Suite( ) { + + for( std::vector::const_iterator iter = m_entries.begin( ); iter < m_entries.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * This methods parses all the child nodes of *a_node*. + * + * @param a_node [in] The HAPI::Node to be parsed and used to construct the Product. + * @param a_parseSuite [in] This function to call to parse each sub-node. + ***********************************************************************************************************/ + +void Suite::parse( HAPI::Node const &a_node, GUPI_parseSuite a_parseSuite ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + Entry *form = a_parseSuite( this, child ); + if( form != nullptr ) add( form ); + } +} + +/* *********************************************************************************************************//** + * Returns the index of the node in *this* that has keyValue *a_keyValue*. + + * @return [in] The index of the node with keyValue *a_keyValue* in *this*. + ***********************************************************************************************************/ + +int Suite::operator[]( std::string const &a_keyValue ) const { + + std::map::const_iterator iter = m_map.find( a_keyValue ); + if( iter == m_map.end( ) ) { + throw LUPI::Exception( "form '" + a_keyValue + "' not in database." ); + } + + return( iter->second ); +} + +/* *********************************************************************************************************//** + * Adds the node *a_form* to *this*. + * + * @param a_form [in] The form to add. + ***********************************************************************************************************/ + +void Suite::add( Entry *a_form ) { + + int i1 = 0; + + for( Suite::iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter, ++i1 ) { + if( (*iter)->keyValue( ) == a_form->keyValue( ) ) { + m_entries[i1] = a_form; + a_form->setAncestor( this ); + return; + } + } + m_map[a_form->keyValue( )] = (int) m_entries.size( ); + m_entries.push_back( a_form ); + a_form->setAncestor( this ); +} + +/* *********************************************************************************************************//** + * Returns the iterator to the node with keyValue *a_keyValue*. + * + * @param a_keyValue [in] The keyValue of the node to find. + * + * @return The iterator to the node with keyValue *a_keyValue*. + ***********************************************************************************************************/ + +Suite::iterator Suite::find( std::string const &a_keyValue ) { + + for( Suite::iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + if( (*iter)->keyName( ) == a_keyValue ) return( iter ); + } + + return( m_entries.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns the iterator to the node with keyValue *a_keyValue*. + * + * @param a_keyValue [in] The keyValue of the node to find. + * + * @return The iterator to the node with keyValue *a_keyValue*. + ***********************************************************************************************************/ + +Suite::const_iterator Suite::find( std::string const &a_keyValue ) const { + + for( Suite::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + if( (*iter)->keyValue( ) == a_keyValue ) return( iter ); + } + + return( m_entries.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns a list of iterators to the nodes in *this* that have **GNDS** moniker *a_moniker*. + * + * @param a_moniker [in] The moniker to search for. + * + * @return List of iterators to the nodes in *this* that have moniker *a_moniker*. + ***********************************************************************************************************/ + +std::vector Suite::findAllOfMoniker( std::string const &a_moniker ) { + + std::vector iters; + + for( Suite::iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + if( (*iter)->moniker( ) == a_moniker ) iters.push_back( iter ); + } + + return( iters ); +} + +/* *********************************************************************************************************//** + * Returns a list of iterators to the nodes in *this* that have **GNDS** moniker *a_moniker*. + * + * @param a_moniker [in] The moniker to search for. + * + * @return List of iterators to the nodes in *this* that have moniker *a_moniker*. + ***********************************************************************************************************/ + +std::vector Suite::findAllOfMoniker( std::string const &a_moniker ) const { + + std::vector iters; + + for( Suite::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) { + if( (*iter)->moniker( ) == a_moniker ) iters.push_back( iter ); + } + + return( iters ); +} + +/* *********************************************************************************************************//** + * Used by Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +Ancestry *Suite::findInAncestry3( std::string const &a_item ) { + + std::size_t index( a_item.find( '=' ) ), lastQuote = a_item.size( ) - 2; + + if( index == std::string::npos ) return( nullptr ); + ++index; + if( index > lastQuote ) throw LUPI::Exception( "Suite::findInAncestry3: invalide xlink" ); + if( a_item[index] != '\'' ) throw LUPI::Exception( "Suite::findInAncestry3: invalid xlink, missing '." ); + ++index; + if( a_item[lastQuote] != '\'' ) throw LUPI::Exception( "Suite::findInAncestry3: invalid xlink, missing endl '." ); + + std::string keyValue( a_item.substr( index, lastQuote - index ) ); + + return( get( keyValue ) ); +} + +/* *********************************************************************************************************//** + * Used by Ancestry to tranverse GNDS nodes. This method returns a pointer to a derived class' a_item member or nullptr if none exists. + * + * @param a_item [in] The name of the class member whose pointer is to be return. + * @return The pointer to the class member or nullptr if class does not have a member named a_item. + ***********************************************************************************************************/ + +Ancestry const *Suite::findInAncestry3( std::string const &a_item ) const { + + std::size_t index( a_item.find( '=' ) ), lastQuote = a_item.size( ) - 2; + + if( index == std::string::npos ) return( nullptr ); + ++index; + if( index > lastQuote ) throw LUPI::Exception( "Suite::findInAncestry3: invalide xlink" ); + if( a_item[index] != '\'' ) throw LUPI::Exception( "Suite::findInAncestry3: invalid xlink, missing '." ); + ++index; + if( a_item[lastQuote] != '\'' ) throw LUPI::Exception( "Suite::findInAncestry3: invalid xlink, missing endl '." ); + + std::string keyValue( a_item.substr( index, lastQuote - index ) ); + + return( get( keyValue ) ); +} + +/* *********************************************************************************************************//** + * Fills the argument *a_writeInfo* with the XML lines that represent *this*. Recursively enters each sub-node. + * + * @param a_writeInfo [in/out] Instance containing incremental indentation and other information and stores the appended lines. + * @param a_indent [in] The amount to indent *this* node. + ***********************************************************************************************************/ + +void Suite::toXMLList( WriteInfo &a_writeInfo, std::string const &a_indent ) const { + + std::string indent2 = a_writeInfo.incrementalIndent( a_indent ); + + if( size( ) == 0 ) return; + + std::string XMLLine( a_indent + "<" + moniker( ) + ">" ); + a_writeInfo.push_back( XMLLine ); + + for( Suite::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 ); + + a_writeInfo.addNodeEnder( moniker( ) ); +} + +/* *********************************************************************************************************//** + * Prints the list of node keyValues to std::cout. + * + * @param a_header [in] A string printed before the list of keyValues is printed. + ***********************************************************************************************************/ + +void Suite::printEntryLabels( std::string const &a_header ) const { + + std::cout << a_header << ": size = " << size( ) << std::endl; + + for( Suite::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) + std::cout << " " << (*iter)->keyValue( ) << std::endl; +} + +} diff --git a/source/processes/hadronic/models/lend/src/GUPI_text.cc b/source/processes/hadronic/models/lend/src/GUPI_text.cc new file mode 100644 index 0000000000..f0e9e5ae0f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/GUPI_text.cc @@ -0,0 +1,27 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "GUPI.hpp" + +namespace GUPI { + +/*! \class Text + * + */ + +Text::Text(HAPI::Node const &a_node): + Ancestry(a_node.name()), + m_body(a_node.text().get()), + m_encoding(Encoding::ascii), + m_markup(Markup::none), + m_label(a_node.attribute_as_string("label")) { +} + +Text::~Text(){} +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_Data.cc b/source/processes/hadronic/models/lend/src/HAPI_Data.cc new file mode 100644 index 0000000000..abf780df0e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_Data.cc @@ -0,0 +1,62 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +namespace HAPI { + +/* +========================================================= + * + * @return + */ +Data::Data() : + m_data(NULL) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +Data::Data( Data_internal *a_data ) : + m_data(a_data) { + +} +/* +========================================================= +*/ +Data::~Data( ) { + + delete m_data; + +} + +int Data::length( ) const { + + return m_data->length(); + +} + +void Data::getDoubles(nf_Buffer &buffer) +{ + + m_data->getDoubles(buffer); + +} + +void Data::getInts(nf_Buffer &buffer) +{ + + m_data->getInts(buffer); + +} + +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_Data_internal.cc b/source/processes/hadronic/models/lend/src/HAPI_Data_internal.cc new file mode 100644 index 0000000000..2561f297fe --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_Data_internal.cc @@ -0,0 +1,25 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +namespace HAPI { + +/* +============================================================ +======================= destructor ========================= +============================================================ + * + * @return + */ +Data_internal::~Data_internal( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_File.cc b/source/processes/hadronic/models/lend/src/HAPI_File.cc new file mode 100644 index 0000000000..ec416ec48b --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_File.cc @@ -0,0 +1,25 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +namespace HAPI { + +/* +============================================================ +======================= destructor ========================= +============================================================ + * + * @return + */ +File::~File( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_HDFData.cc b/source/processes/hadronic/models/lend/src/HAPI_HDFData.cc new file mode 100644 index 0000000000..a54df63137 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_HDFData.cc @@ -0,0 +1,64 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +#ifdef HAPI_USE_HDF5 +namespace HAPI { + +/* +========================================================= + * + * @return + */ +HDFData::HDFData() : + m_node_id(-1), + m_dataspace_id(-1), + m_length(-1) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +HDFData::HDFData( hid_t node_id ) : + m_node_id(node_id) { + + m_dataspace_id = H5Dget_space(m_node_id); + m_length = H5Sget_simple_extent_npoints(m_dataspace_id); + +} +/* +========================================================= +*/ +HDFData::~HDFData( ) { + +} + +int HDFData::length( ) const { + + return m_length; +} + +void HDFData::getDoubles(nf_Buffer &buffer) +{ + buffer.resize(m_length); + H5Dread(m_node_id, H5T_NATIVE_DOUBLE, H5S_ALL, m_dataspace_id, H5P_DEFAULT, buffer.data()); +} + +void HDFData::getInts(nf_Buffer &buffer) +{ + buffer.resize(m_length); + H5Dread(m_node_id, H5T_NATIVE_INT, H5S_ALL, m_dataspace_id, H5P_DEFAULT, buffer.data()); +} + +} +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_HDFDataManager.cc b/source/processes/hadronic/models/lend/src/HAPI_HDFDataManager.cc new file mode 100644 index 0000000000..7cd6651f3a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_HDFDataManager.cc @@ -0,0 +1,117 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" +#include + +#ifdef HAPI_USE_HDF5 +namespace HAPI { + + // constructor + HDFDataManager::HDFDataManager(std::string const &a_filename) : + m_filename( a_filename ) { + +#if defined (GIDIP_HAVE_COMPILER_FLOATING_POINT_EXCEPTIONS) + LUPI_FPE_disable_and_clear( __FILE__, __LINE__ ); // disable sigfpe cores +#endif + + m_file_id = H5Fopen( a_filename.c_str(), H5F_ACC_RDONLY, H5P_DEFAULT ); + H5Eset_auto1( nullptr, nullptr ); + + m_dataset_ints = H5Dopen2( m_file_id, "iData", H5P_DEFAULT ); + m_iDataPresent = m_dataset_ints != H5I_INVALID_HID; + if( m_iDataPresent ) m_dataspace_ints = H5Dget_space( m_dataset_ints ); + + m_dataset_doubles = H5Dopen2( m_file_id, "dData", H5P_DEFAULT ); + m_dDataPresent = m_dataset_doubles != H5I_INVALID_HID; + if( m_dDataPresent ) m_dataspace_doubles = H5Dget_space( m_dataset_doubles ); + +#if defined (GIDIP_HAVE_COMPILER_FLOATING_POINT_EXCEPTIONS) + // Re-enable floating point exception detection + LUPI_FPE_test( __FILE__, __LINE__ ); // test sigfpe exception + LUPI_FPE_enable( __FILE__, __LINE__ ); // reenable sigfpe cores +#endif + + m_stride[0] = 1; + m_block[0] = 1; + } + + HDFDataManager::~HDFDataManager() + { + if( m_iDataPresent ) { + H5Dclose(m_dataset_ints); + H5Sclose(m_dataspace_ints); + } + if( m_iDataPresent ) { + H5Dclose(m_dataset_doubles); + H5Sclose(m_dataspace_doubles); + } + H5Fclose(m_file_id); + } + + void HDFDataManager::getDoubles(nf_Buffer &result, size_t startIndex, size_t endIndex) + { + if( !m_dDataPresent ) throw LUPI::Exception( "HDFDataManager::getDoubles: HDF5 file " + m_filename + " has no 'dData' dataset." ); + + hid_t memspace; + herr_t status; + + hsize_t size = endIndex - startIndex; + + hsize_t dims[] {size}; + hsize_t offset[] {startIndex}; + hsize_t count[] {size}; + + result.resize(size); + m_num_double_reads ++; + m_num_double_elem += size; + + // now can we access the allocated array and read into that? + + memspace = H5Screate_simple(1, dims, nullptr); + status = H5Sselect_hyperslab(m_dataspace_doubles, H5S_SELECT_SET, offset, m_stride, count, m_block); + if( status != 0 ) throw "H5Sselect_hyperslab error in HDFDataManager::getDoubles."; + + status = H5Dread(m_dataset_doubles, H5T_NATIVE_DOUBLE, memspace, m_dataspace_doubles, H5P_DEFAULT, result.data()); + if( status != 0 ) throw "H5Dread error in HDFDataManager::getDoubles."; + + H5Sclose(memspace); + + } + + void HDFDataManager::getInts(nf_Buffer &result, size_t startIndex, size_t endIndex) + { + if( !m_iDataPresent ) throw LUPI::Exception( "HDFDataManager::getInts: HDF5 file " + m_filename + " has no 'iData' dataset." ); + + hid_t memspace; + herr_t status; + hsize_t size = endIndex - startIndex; + + hsize_t dims[] {size}; + hsize_t offset[] {startIndex}; + hsize_t count[] {size}; + + result.resize(size); + + m_num_int_reads ++; + m_num_int_elem += size; + + memspace = H5Screate_simple(1, dims, nullptr); + status = H5Sselect_hyperslab(m_dataspace_ints, H5S_SELECT_SET, offset, m_stride, count, m_block); + if( status != 0 ) throw "H5Sselect_hyperslab error in HDFDataManager::getDoubles."; + + status = H5Dread(m_dataset_ints, H5T_NATIVE_INT, memspace, m_dataspace_ints, H5P_DEFAULT, result.data()); + if( status != 0 ) throw "H5Dread error in HDFDataManager::getDoubles."; + + H5Sclose(memspace); + + } + +} +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_HDFFile.cc b/source/processes/hadronic/models/lend/src/HAPI_HDFFile.cc new file mode 100644 index 0000000000..e2920d1c46 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_HDFFile.cc @@ -0,0 +1,79 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ +#include "HAPI.hpp" + +#ifdef HAPI_USE_HDF5 +namespace HAPI { + +/* +========================================================= + * + * @return + */ +HDFFile::HDFFile() : + m_name( "" ), + m_doc( 0 ), + m_doc_as_node(nullptr){ + +} +/* +========================================================= + * + * @param filename + * @return + */ +HDFFile::HDFFile(char const *filename) : + m_name( filename ) { + + m_doc = H5Fopen( filename, H5F_ACC_RDONLY, H5P_DEFAULT ); + m_doc_as_node = new HDFNode( m_doc ); + +} +/* +========================================================= +*/ +HDFFile::~HDFFile( ) { + + H5Fclose(m_doc); + delete m_doc_as_node; + +} +/* +============================================================ +===================== get child element ==================== +============================================================ + * + * @return + */ +Node HDFFile::child(char const *a_name) { + + return Node( m_doc_as_node->child(a_name) ); + +} +/* +============================================================ +===================== get first child node ================= +============================================================ +*/ +Node HDFFile::first_child() { + + return Node( m_doc_as_node->first_child() ); + +} +/* +========================================================= +*/ +std::string HDFFile::name() const { + + return m_name; + +} + +} +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_HDFNode.cc b/source/processes/hadronic/models/lend/src/HAPI_HDFNode.cc new file mode 100644 index 0000000000..e91143b6da --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_HDFNode.cc @@ -0,0 +1,423 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ +#include "HAPI.hpp" + +#ifdef HAPI_USE_HDF5 + +hid_t getNodeId(hid_t loc_id, std::string name); +herr_t map_children(hid_t loc_id, char const *name, const H5L_info_t *info, void *opdata); + +namespace HAPI { + +/* +========================================================= + * + * @return + */ +HDFNode::HDFNode() : + Node_internal( NodeInteralType::HDF5 ), + m_node_id( 0 ), + m_parent_id( 0 ), + m_index( 0 ) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +HDFNode::HDFNode( hid_t a_node_id, hid_t a_parent_id, size_t a_index, std::vector a_siblings ) : + Node_internal( NodeInteralType::HDF5 ), + m_node_id( a_node_id ), + m_parent_id( a_parent_id ), + m_index( a_index ), + m_siblings( a_siblings ) { + + H5I_type_t id_type = H5Iget_type( m_node_id ); + if (H5I_GROUP == id_type) { + hsize_t start_idx = 0; + H5Literate(m_node_id, H5_INDEX_NAME, H5_ITER_NATIVE, &start_idx, map_children, &m_children); + } + else if (H5I_DATASET == id_type) { + return; // has no child elements + } + else { + throw "Unknown object type encountered in HDF file"; + } +} +/* +========================================================= + * + * Alternate constructor to allow treating H5File as a Node + * + * @param a_file + * @return + */ +HDFNode::HDFNode( hid_t a_file_id) : + Node_internal( NodeInteralType::HDF5 ), + m_node_id( a_file_id ), + m_parent_id( 0 ), + m_index( 0 ) { + + hsize_t start_idx = 0; + H5Literate(m_node_id, H5_INDEX_NAME, H5_ITER_NATIVE, &start_idx, map_children, &m_children); + +} +/* +============================================================ +====================== copy constructor ==================== +============================================================ + */ +HDFNode::HDFNode(const HDFNode &other) : + Node_internal( other ), + m_node_id( other.m_node_id ), + m_parent_id( other.m_parent_id ), + m_index( other.m_index ), + m_siblings( other.m_siblings ), + m_children( other.m_children ) { + +} +/* +========================================================= +*/ +HDFNode::~HDFNode( ) { + +} +/* +============================================================ +=================== get attribute by name ================== +============================================================ + * + * @param a_name + * @return + */ +std::string HDFNode::attribute(char const *a_name) { + + if ((m_node_id == 0) || (!H5Aexists(m_node_id, a_name))) + return ""; + + hid_t attr_id = H5Aopen(m_node_id, a_name, H5P_DEFAULT); + size_t attr_len = H5Aget_storage_size(attr_id); + hid_t atype = H5Aget_type(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, atype, buffer.data()); + + std::string attrValue(buffer.data()); + + return attrValue; +} + + +int HDFNode::attribute_as_int(const char* a_name){ + hid_t attr_id = H5Aopen(m_node_id, a_name, H5P_DEFAULT); + size_t attr_len = H5Aget_storage_size(attr_id); + hid_t atype = H5Aget_type(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, atype, buffer.data()); + + return atoi(buffer.data()); + +} +long HDFNode::attribute_as_long(const char* a_name){ + hid_t attr_id = H5Aopen(m_node_id, a_name, H5P_DEFAULT); + size_t attr_len = H5Aget_storage_size(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, H5T_NATIVE_CHAR, buffer.data()); + + return atol(buffer.data()); + +} +double HDFNode::attribute_as_double(const char* a_name){ + hid_t attr_id = H5Aopen(m_node_id, a_name, H5P_DEFAULT); + size_t attr_len = H5Aget_storage_size(attr_id); + hid_t atype = H5Aget_type(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, atype, buffer.data()); + + return atof(buffer.data()); +} + +/* +============================================================ +===================== get child element ==================== +============================================================ + * + * @return + */ +Node_internal *HDFNode::child(char const *a_name) { + + for (size_t idx=0; idx= this->m_siblings.size()) + return new HDFNode(); + hid_t sibling_id = this->m_siblings[nextIndex].node_id; + HDFNode *sibling = new HDFNode(sibling_id, m_parent_id, nextIndex, m_siblings); + return sibling; + +} +/* +============================================================ +============ update self to point to next sibling ========== +============================================================ + * + * @return + */ +void HDFNode::to_next_sibling() { + + size_t nextIndex = m_index + 1; + size_t nsibs = this->m_siblings.size(); + if (nextIndex >= nsibs) + { + m_node_id = 0; + } + else + { + m_node_id = this->m_siblings[nextIndex].node_id; + m_index = nextIndex; + } +} +/* +============================================================ +======================== make a copy ======================= +============================================================ + * + * @return + */ +Node_internal *HDFNode::copy() { + + if (m_node_id == 0) + return new HDFNode(); + + HDFNode *copy = new HDFNode( m_node_id, m_parent_id, m_index, m_siblings ); + copy->m_children = m_children; + return copy; + +} +/* +============================================================ +===================== assignment operator ================== +============================================================ + */ +Node_internal &HDFNode::operator=(const HDFNode &other) { + + this->m_node_id = other.m_node_id; + this->m_parent_id = other.m_parent_id; + this->m_index = other.m_index; + this->m_siblings = other.m_siblings; + this->m_children = other.m_children; + return *this; + +} +/* +============================================================ +===================== get tag name ========================= +============================================================ + * + * @return + */ +std::string HDFNode::name() const { + + if (m_node_id == 0) + return ""; + + hid_t attr_id = H5Aopen(m_node_id, "_xmltag", H5P_DEFAULT); + size_t attr_len = H5Aget_storage_size(attr_id); + hid_t atype = H5Aget_type(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, atype, buffer.data()); + + return std::string(buffer.data()); + +} +/* +============================================================ +================== test for empty node ===================== +============================================================ + * + * @return + */ +bool HDFNode::empty() const { + + return (m_node_id == 0); + +} +/* +============================================================ +======================= text data ========================== +============================================================ + * + * @return + */ +Text HDFNode::text() const { + +#if H5_VERSION_GE(1,12,0) + H5O_info2_t infobuf; + herr_t status = H5Oget_info3(m_node_id, &infobuf, H5O_INFO_NUM_ATTRS); +#else + H5O_info_t infobuf; + herr_t status = H5Oget_info(m_node_id, &infobuf); +#endif + if (status != 0) throw "unable to extract text from HDF"; + + switch (infobuf.type) { + case H5O_TYPE_GROUP: + return Text( ); + break; + case H5O_TYPE_DATASET: { + size_t len = H5Dget_storage_size(m_node_id); + hid_t dtype = H5Dget_type(m_node_id); + std::vector buffer(len+1,0); + H5Dread(m_node_id, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer.data()); + + return Text(std::string(buffer.data())); } + break; + default: + throw "encountered unexpected type in HDF::text()!"; + } +} +/* +============================================================ +===================== numeric data ========================= +============================================================ + * + * @return + */ +Data_internal *HDFNode::data() const { + + return new HDFData( m_node_id ); + +} + +} + + +/* +============================================================ +=============== get child HDF5 id by name ================== +============================================================ + */ +hid_t getNodeId(hid_t loc_id, std::string name) +{ +#if H5_VERSION_GE(1,12,0) + H5O_info2_t infobuf; + herr_t status = H5Oget_info_by_name3( loc_id, name.c_str( ), &infobuf, H5O_INFO_NUM_ATTRS, H5P_DEFAULT ); +#else + H5O_info_t infobuf; + herr_t status = H5Oget_info_by_name(loc_id, name.c_str(), &infobuf, H5P_DEFAULT); +#endif + if (status != 0) { + throw "requested child node not found in getNodeId"; + } + + hid_t node_id; + + switch (infobuf.type) { + case H5O_TYPE_GROUP: + node_id = H5Gopen(loc_id, name.c_str(), H5P_DEFAULT); + break; + case H5O_TYPE_DATASET: + node_id = H5Dopen(loc_id, name.c_str(), H5P_DEFAULT); + break; + default: + throw "encountered unexpected type in getNodeId!"; + } + + return node_id; +} + +/* +============================================================ +========== called by iterateElems in constructor =========== +============================================================ + */ +herr_t map_children(hid_t loc_id, char const *name, LUPI_maybeUnused const H5L_info_t *info, void *opdata) +{ + std::vector *children = + static_cast< std::vector* >(opdata); + + hid_t node_id = H5Oopen(loc_id, name, H5P_DEFAULT); + + std::string xmlTag; + { + hid_t attr_id = H5Aopen(node_id, "_xmltag", H5P_DEFAULT); + hid_t atype = H5Aget_type(attr_id); + size_t attr_len = H5Aget_storage_size(attr_id); + + std::vector buffer(attr_len+1, 0); + H5Aread(attr_id, atype, buffer.data()); + + xmlTag = std::string(buffer.data()); + } + + + uint index; + { + hid_t attr_id = H5Aopen(node_id, "_xmlindex", H5P_DEFAULT); + + H5Aread(attr_id, H5T_NATIVE_UINT16_g, &index); + } + + HAPI::childInfo infos = { + std::string(name), + xmlTag, + index, + node_id + }; + + if (index >= children->size()) + { + children->resize(index+1); + } + (*children)[index] = infos; + + //printf("ITER: id=%d, index=%d, name=%s\n", (int)node_id, (int)index, name); + + //H5Oclose(node_id); + + return 0; + } +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_Node.cc b/source/processes/hadronic/models/lend/src/HAPI_Node.cc new file mode 100644 index 0000000000..7b0bf824fd --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_Node.cc @@ -0,0 +1,186 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +namespace HAPI { + +/* +========================================================= + * + * @return + */ +Node::Node() : + m_node(NULL) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +Node::Node( Node_internal *a_node ) : + m_node(a_node) { + +} + +/* *********************************************************************************************************//** + * Copy constructor. + * + * @param a_node [In] The node to copy. + ***********************************************************************************************************/ + +Node::Node( Node const &a_node ) : + m_node( nullptr ) { + +#ifdef HAPI_USE_PUGIXML + if( a_node.m_node->type( ) == NodeInteralType::pugiXML ) { + m_node = new PugiXMLNode( static_cast( *a_node.m_node ) ); + } +#endif +#ifdef HAPI_USE_HDF5 + if( a_node.m_node->type( ) == NodeInteralType::HDF5 ) { + m_node = new HDFNode( static_cast( *a_node.m_node ) ); + } +#endif + if( m_node == nullptr ) throw LUPI::Exception( "Unsupported m_node type." ); +} + +/* +========================================================= +*/ +Node::~Node( ) { + + delete m_node; + +} +/* +============================================================ +===================== get child element ==================== +============================================================ + * + * @return + */ +Node Node::child(char const *a_name) const { + + if (NULL == m_node) + return Node(); + return Node( m_node->child( a_name ) ); + +} +/* +========================================================= +*/ +Node Node::first_child() const { + + if (NULL == m_node) + return Node(); + return Node( m_node->first_child( ) ); + +} +/* +============================================================ +===================== get sibling element ================== +============================================================ + * + * @return + */ +Node Node::next_sibling() const { + + if (NULL == m_node) + return Node(); + Node_internal *sibling = m_node->next_sibling( ); + delete m_node; + return Node( sibling ); + +} +/* +============================================================ +============ update self to point to next sibling ========== +============================================================ + * + * @return + */ +void Node::to_next_sibling() const { + + m_node->to_next_sibling( ); + +} +/* +============================================================ +===================== assignment operator ================== +============================================================ + */ +Node& Node::operator=(const Node &other) { + + if (NULL != other.m_node) + this->m_node = other.m_node->copy(); + return *this; + +} +/* +============================================================ +===================== get tag name ========================= +============================================================ + * + * @return + */ +std::string Node::name() const { + + if (NULL == m_node) + return std::string(""); + return m_node->name(); + +} +/* +============================================================ +================== test for empty node ===================== +============================================================ + * + * @return + */ +bool Node::empty() const { + + if (NULL == m_node) + return true; + return m_node->empty(); + +} +/* +============================================================ +======================= text data ========================== +============================================================ + * + * @return + */ +Text Node::text() const { + + if (NULL == m_node) + return Text(); + return m_node->text(); + +} +/* +============================================================ +===================== numeric data ========================= +============================================================ + * + * @return + */ +Data Node::data() const { + + if (NULL == m_node) + return Data(); + return Data( m_node->data() ); + +} + +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_Node_internal.cc b/source/processes/hadronic/models/lend/src/HAPI_Node_internal.cc new file mode 100644 index 0000000000..054d69e789 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_Node_internal.cc @@ -0,0 +1,33 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +namespace HAPI { + +Node_internal::Node_internal( NodeInteralType a_type ) : + m_type( a_type ) { +} + +Node_internal::Node_internal( Node_internal const &a_node ) : + m_type( a_node.type( ) ) { +} + +/* +============================================================ +======================= destructor ========================= +============================================================ + * + * @return + */ +Node_internal::~Node_internal( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/HAPI_PugiXMLData.cc b/source/processes/hadronic/models/lend/src/HAPI_PugiXMLData.cc new file mode 100644 index 0000000000..08242c7be2 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_PugiXMLData.cc @@ -0,0 +1,86 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "HAPI.hpp" + +#ifdef HAPI_USE_PUGIXML +namespace HAPI { + +/* +========================================================= + * + * @return + */ +PugiXMLData::PugiXMLData() : + m_node( pugi::xml_node() ), + m_length( -1 ) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +PugiXMLData::PugiXMLData( pugi::xml_node a_node ) : + m_node( a_node ), + m_length( -1 ) { + +} +/* +========================================================= +*/ +PugiXMLData::~PugiXMLData( ) { + +} + +int PugiXMLData::length( ) const { + + if (m_length == -1) + throw "Can't access length until data is read!"; + return m_length; + +} + +void PugiXMLData::getDoubles(nf_Buffer &buffer) +{ + int64_t numberConverted; + char *endCharacter; + char const *text = m_node.text( ).get( ); + double *dValues = nfu_stringToListOfDoubles( NULL, text, ' ', &numberConverted, &endCharacter, 0 ); + if (dValues == NULL) throw "dValues = NULL"; + if (*endCharacter != 0) throw "bad values string"; + m_length = numberConverted; + + buffer.resize(m_length); + for (int i=0; i &buffer) +{ + int64_t numberConverted; + char *endCharacter; + char const *text = m_node.text( ).get( ); + int *iValues = nfu_stringToListOfInt32s( NULL, text, ' ', &numberConverted, &endCharacter ); + if (iValues == NULL) throw "dValues = NULL"; + if (*endCharacter != 0) throw "bad values string"; + m_length = numberConverted; + + buffer.resize(m_length); + for (int i=0; i> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +#ifdef HAPI_USE_PUGIXML +namespace HAPI { + +/* +========================================================= + * + * @return + */ +PugiXMLFile::PugiXMLFile() : + m_name( "" ) { + +} +/* +========================================================= + * + * @param filename + * @return + */ +PugiXMLFile::PugiXMLFile(char const *filename, std::string const &a_callingFunctionName) : + m_name( filename ) { + + pugi::xml_parse_result result = m_doc.load_file(filename); + if (result.status != pugi::status_ok) { + throw std::runtime_error( "ERROR from PugiXMLFile::PugiXMLFile via " + a_callingFunctionName + " for file '" + filename + "': " + result.description() ); + } + +} +/* +========================================================= +*/ +PugiXMLFile::~PugiXMLFile( ) { + +} +/* +============================================================ +===================== get child element ==================== +============================================================ + * + * @return + */ +Node PugiXMLFile::child(char const *a_name) { + + // Only one child element allowed in XML file + if (a_name == m_doc.first_child( ).name()) + return Node(new PugiXMLNode( m_doc.first_child( ) )); + else + return Node(new PugiXMLNode( )); +} +/* +========================================================= +*/ +Node PugiXMLFile::first_child() { + + return Node(new PugiXMLNode( m_doc.first_child( ) )); + +} +/* +========================================================= +*/ +std::string PugiXMLFile::name() const { + + return m_name; + +} + +} +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_PugiXMLNode.cc b/source/processes/hadronic/models/lend/src/HAPI_PugiXMLNode.cc new file mode 100644 index 0000000000..7e2f5615af --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_PugiXMLNode.cc @@ -0,0 +1,202 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +#ifdef HAPI_USE_PUGIXML +namespace HAPI { + +/* +========================================================= + * + * @return + */ +PugiXMLNode::PugiXMLNode() : + Node_internal( NodeInteralType::pugiXML ), + m_node( pugi::xml_node() ) { + +} +/* +========================================================= + * + * @param a_node + * @return + */ +PugiXMLNode::PugiXMLNode( pugi::xml_node a_node ) : + Node_internal( NodeInteralType::pugiXML ), + m_node( a_node ) { + +} +/* +============================================================ +====================== copy constructor ==================== +============================================================ + */ +PugiXMLNode::PugiXMLNode(const PugiXMLNode &other) : + Node_internal( other ), + m_node( other.m_node ) { + +} +/* +========================================================= +*/ +PugiXMLNode::~PugiXMLNode( ) { + +} +/* +============================================================ +=================== get attribute by name ================== +============================================================ + * + * @param a_name + * @return + */ +std::string PugiXMLNode::attribute(char const *a_name) { + + pugi::xml_attribute attr = m_node.attribute( a_name ); + + return std::string(attr.value( )); + +} + + +int PugiXMLNode::attribute_as_int(const char* a_name){ + pugi::xml_attribute attr = m_node.attribute( a_name ); + + return atoi(attr.value( )); +} +long PugiXMLNode::attribute_as_long(const char* a_name){ + pugi::xml_attribute attr = m_node.attribute( a_name ); + + return atol(attr.value( )); +} +double PugiXMLNode::attribute_as_double(const char* a_name){ + pugi::xml_attribute attr = m_node.attribute( a_name ); + + return atof(attr.value( )); +} + +/* +============================================================ +===================== get child element ==================== +============================================================ + * + * @return + */ +Node_internal *PugiXMLNode::child(char const *a_name) { + + return new PugiXMLNode( m_node.child( a_name ) ); + +} +/* +========================================================= +*/ +Node_internal *PugiXMLNode::first_child() { + + return new PugiXMLNode( m_node.first_child( ) ); + +} +/* +============================================================ +===================== get sibling element ================== +============================================================ + * + * @return + */ +Node_internal *PugiXMLNode::next_sibling() { + + return new PugiXMLNode( m_node.next_sibling( ) ); + +} +/* +============================================================ +============= update self to point to next sibling ========= +============================================================ + * + * @return + */ +void PugiXMLNode::to_next_sibling() { + + m_node = m_node.next_sibling( ); + +} +/* +============================================================ +======================== make a copy ======================= +============================================================ + * + * @return + */ +Node_internal *PugiXMLNode::copy() { + + return new PugiXMLNode( m_node ); + +} +/* +============================================================ +===================== assignment operator ================== +============================================================ + */ +Node_internal &PugiXMLNode::operator=(const PugiXMLNode &other) { + + this->m_node = other.m_node; + return *this; + +} +/* +============================================================ +===================== get tag name ========================= +============================================================ + * + * @return + */ +std::string PugiXMLNode::name() const { + + return std::string(m_node.name()); + +} +/* +============================================================ +================== test for empty node ===================== +============================================================ + * + * @return + */ +bool PugiXMLNode::empty() const { + + return m_node.empty(); + +} +/* +============================================================ +======================= text data ========================== +============================================================ + * + * @return + */ +Text PugiXMLNode::text() const { + + return Text( std::string(m_node.text().get()) ); + +} +/* +============================================================ +===================== numeric data ========================= +============================================================ + * + * @return + */ +Data_internal *PugiXMLNode::data() const { + + return new PugiXMLData( m_node ); + +} + +} +#endif diff --git a/source/processes/hadronic/models/lend/src/HAPI_Text.cc b/source/processes/hadronic/models/lend/src/HAPI_Text.cc new file mode 100644 index 0000000000..501fd57184 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/HAPI_Text.cc @@ -0,0 +1,41 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "HAPI.hpp" + +namespace HAPI { + +/* +========================================================= + * + * @return + */ +Text::Text() : + m_text( "" ) { + +} +/* +========================================================= + * + * @param a_text text string + * @return + */ +Text::Text( std::string const a_text ) : + m_text( a_text ) { + +} +/* +========================================================= +*/ +Text::~Text( ) { + +} + +} + diff --git a/source/processes/hadronic/models/lend/src/LUPI_argumentParser.cc b/source/processes/hadronic/models/lend/src/LUPI_argumentParser.cc new file mode 100644 index 0000000000..0e61822636 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_argumentParser.cc @@ -0,0 +1,805 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include + +namespace LUPI { + +static void printArgumentDescription( std::string const &a_line, std::string const &a_descriptor ); +static std::size_t maxPrintLineWidth = 120; + +/*! \class ArgumentBase + * Base class for argument and option sub-classes. + */ + +/* *********************************************************************************************************//** + * ArgumentBase constructor. + * + * @param a_argumentType [in] The type of argument to create. + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] The minimum number of times the argument must be entered. + * @param a_maximumNeeded [in] The maximum number of times the argument can be entered. + ***********************************************************************************************************/ + +ArgumentBase::ArgumentBase( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded, int a_maximumNeeded ) : + m_argumentType( a_argumentType ), + m_names( ), + m_descriptor( a_descriptor ), + m_minimumNeeded( a_minimumNeeded ), + m_maximumNeeded( a_maximumNeeded ), + m_counts( 0 ) { + + if( m_minimumNeeded < 0 ) throw std::runtime_error( "ERROR 1000 in ArgumentBase::ArgumentBase: m_minimumNeeded must not be negative." ); + if( m_maximumNeeded > -1 ) { + if( m_minimumNeeded > m_maximumNeeded ) + throw std::runtime_error( "ERROR 1010 in ArgumentBase::ArgumentBase: for argument '" + a_name + "' m_maximumNeeded less than m_minimumNeeded." ); + } + + if( m_argumentType == ArgumentType::Positional ) { + if( a_name[0] == '-' ) + throw std::runtime_error( "ERROR 1020 in ArgumentBase::ArgumentBase: positional argument name '" + a_name + "' cannot start with a '-'." ); + } + + addAlias( a_name ); +} + +/* *********************************************************************************************************//** + * ArgumentBase destructor. + ***********************************************************************************************************/ + +ArgumentBase::~ArgumentBase( ) { + +} + +/* *********************************************************************************************************//** + * Returns true if *a_name* is one of the names for *this* and false otherwise. + * + * @param a_name [in] The name to search for. + * + * @return Returns true if *a_name* is a match for one of the names for *this* and false otherwise. + ***********************************************************************************************************/ + +bool ArgumentBase::hasName( std::string const &a_name ) const { + + for( auto iter = m_names.begin( ); iter != m_names.end( ); ++iter ) { + if( a_name == *iter ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns the value at index *a_index*. If *a_index* exceeds the number of values entered, a throw is executed. + * + * @param a_index [in] The 0-based index into the m_values std::vector whose content is returned. + * + * @return Returns the value entered at index *a_index*. + ***********************************************************************************************************/ + +std::string const &ArgumentBase::value( std::size_t a_index ) const { + + if( ( m_argumentType == ArgumentType::True ) || ( m_argumentType == ArgumentType::False ) || ( m_argumentType == ArgumentType::Count ) ) + throw Exception( "Argument type for " + name( ) + " does not support calling value() method." ); + + if( a_index >= m_values.size( ) ) throw Exception( "Index = " + std::to_string( a_index ) + " out-of-bounds for argument \"" + name( ) + "\"." ); + + return( m_values[a_index] ); +} + +/* *********************************************************************************************************//** + * Add *a_name* as an optional name for *this*. + * + * @param a_name [in] The name to add. + ***********************************************************************************************************/ + +void ArgumentBase::addAlias( std::string const &a_name ) { + + if( m_argumentType == ArgumentType::Positional ) { + if( m_names.size( ) > 0 ) throw std::runtime_error( "ERROR 1100 in ArgumentBase::addAlias: cannot add a name to a positional argument." ); } + else { + if( a_name[0] != '-' ) throw std::runtime_error( "ERROR 1110 in ArgumentBase::addAlias: name '" + a_name + "' not a valid optional name." ); + } + + if( hasName( a_name ) ) return; + + m_names.push_back( a_name ); +} + +/* *********************************************************************************************************//** + * Counts each time a specific argument is found. + * + * @param a_index [in] The index of the current command argument in *a_argv*. + * @param a_argc [in] The number of command arguments. + * @param a_argv [in] The list of command arguments. + * + * @return The value of *a_index* + 1. + ***********************************************************************************************************/ + +int ArgumentBase::parse( ArgumentParser const &a_argumentParser, int a_index, int a_argc, char **a_argv ) { + + ++m_counts; + if( m_argumentType != ArgumentType::Positional ) ++a_index; + + if( ( m_argumentType == ArgumentType::Store ) || ( m_argumentType == ArgumentType::Append ) || ( m_argumentType == ArgumentType::Positional ) ) { + int maximumNeeded1 = maximumNeeded( ); + if( m_argumentType == ArgumentType::Positional ) { + if( maximumNeeded1 < 0 ) maximumNeeded1 = a_argc; } + else { + if( ( maximumNeeded1 < counts( ) ) && ( maximumNeeded1 > -1 ) ) + throw std::runtime_error( "ERROR 1220 in ArgumentBase::parse: too many values for optional argument " + name( ) + " entered." ); + maximumNeeded1 = 1; + } + + for( int index = 0; index < maximumNeeded1; ++index ) { + if( a_index == a_argc ) { + if( m_argumentType == ArgumentType::Positional ) break; + throw std::runtime_error( "ERROR 1200 in ArgumentBase::parse: missing value for argument " + name( ) + "." ); + } + if( ( m_argumentType == ArgumentType::Positional ) && a_argumentParser.isOptionalArgument( a_argv[a_index] ) ) break; + + m_values.push_back( a_argv[a_index] ); + if( index > 0 ) ++m_counts; + ++a_index; + } + } + + return( a_index ); +} + +/* *********************************************************************************************************//** + * Returns the usage string for *this* argument. + * + * @param a_requiredOption [in] The index of the current command argument in *a_argv*. + * + * @return The value of *a_index* + 1. + ***********************************************************************************************************/ + +std::string ArgumentBase::usage( bool a_requiredOption ) const { + + std::string usageString; + + if( isOptionalArgument( ) ) { + if( a_requiredOption ) { + if( m_minimumNeeded != 0 ) return( usageString ); } + else { + if( m_minimumNeeded == 0 ) return( usageString ); + } + } + usageString += " "; + + std::string value; + if( isOptionalArgument( ) && requiresAValue( ) ) value = " VALUE"; + if( isOptionalArgument( ) && ( m_minimumNeeded == 0 ) ) { + usageString += "[" + name( ) + value + "]"; } + else { + usageString += name( ) + value; + } + + if( !isOptionalArgument( ) ) { + if( ( m_minimumNeeded != 1 ) || ( m_maximumNeeded != 1 ) ) + usageString += "[" + std::to_string( m_minimumNeeded ) + "," + std::to_string( m_maximumNeeded ) + "]"; + } + + return( usageString ); +} + +/* *********************************************************************************************************//** + * Prints generic information about the status of *this*. + * + * @param a_indent [in] The amount of indentation to start the first line with. + * + * @return The value of *a_index* + 1. + ***********************************************************************************************************/ + +void ArgumentBase::printStatus( std::string a_indent ) const { + + std::string name1 = name( ); + if( name1.size( ) < 32 ) name1.resize( 32, ' ' ); + + std::cout << a_indent << name1 << ": number entered " << std::to_string( m_counts ) + << "; number needed (" << std::to_string( m_minimumNeeded ) << "," << std::to_string( m_maximumNeeded ) << ")" + << printStatus2( ) << std::endl; + printStatus3( a_indent + " " ); +} + +/* *********************************************************************************************************//** + * Called by *printStatus*. This method returns an empty string. Must be overwritten by argument classes that have value. + * + * @return An empty **std::string** instance. + ***********************************************************************************************************/ + +std::string ArgumentBase::printStatus2( ) const { + + return( "" ); + +} + +/* *********************************************************************************************************//** + * Called by *printStatus*. This method does nothing. Must be overwritten by argument classes that have value(s). + * + * @param a_indent [in] The amount of indentation to start the first line with. + ***********************************************************************************************************/ + +void ArgumentBase::printStatus3( LUPI_maybeUnused std::string const &a_indent ) const { + +} + +/*! \class OptionBoolean + * Base boolean class. + */ + +/* *********************************************************************************************************//** + * OptionBoolean constructor. + * + * @param a_argumentType [in] The type of argument to create. + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_default [in] The default bool value. + ***********************************************************************************************************/ + +OptionBoolean::OptionBoolean( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, bool a_default ) : + ArgumentBase( a_argumentType, a_name, a_descriptor, 0, -1 ), + m_default( a_default ) { + +} + +/* *********************************************************************************************************//** + * OptionBoolean destructor. + ***********************************************************************************************************/ + +OptionBoolean::~OptionBoolean( ) { + +} + +/* *********************************************************************************************************//** + * Called by *printStatus*. This method returns a string representing *this*'s value. + * + * @return Returns a std::string instance representing the value of *this*. + ***********************************************************************************************************/ + +std::string OptionBoolean::printStatus2( ) const { + + bool value1 = m_default; + if( counts() == 0 ) value1 = !m_default; + + if( value1 ) return( ": true" ); + return( ": false" ); +} + +/*! \class OptionTrue + * An boolean optional argument whose default is *false* and changes to *true* if one or more options are entered. + */ + +/* *********************************************************************************************************//** + * OptionTrue constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] Not used. Will probably be deprecated. + * @param a_maximumNeeded [in] Not used. Will probably be deprecated. + ***********************************************************************************************************/ + +OptionTrue::OptionTrue( std::string const &a_name, std::string const &a_descriptor, LUPI_maybeUnused int a_minimumNeeded, LUPI_maybeUnused int a_maximumNeeded ) : + OptionBoolean( ArgumentType::True, a_name, a_descriptor, false ) { + +} + +/*! \class OptionFalse + * An boolean optional argument whose default is *true* and changes to *false* if one or more options are entered. + */ + +/* *********************************************************************************************************//** + * OptionFalse constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] Not used. Will probably be deprecated. + * @param a_maximumNeeded [in] Not used. Will probably be deprecated. + ***********************************************************************************************************/ + +OptionFalse::OptionFalse( std::string const &a_name, std::string const &a_descriptor, LUPI_maybeUnused int a_minimumNeeded, LUPI_maybeUnused int a_maximumNeeded ) : + OptionBoolean( ArgumentType::False, a_name, a_descriptor, true ) { + +} + +/*! \class OptionCounter + * An optional argument that counts the number of times the option is entered. + */ + +/* *********************************************************************************************************//** + * OptionCounter constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] Not used. Will probably be deprecated. + * @param a_maximumNeeded [in] Not used. Will probably be deprecated. + ***********************************************************************************************************/ + +OptionCounter::OptionCounter( std::string const &a_name, std::string const &a_descriptor, LUPI_maybeUnused int a_minimumNeeded, LUPI_maybeUnused int a_maximumNeeded ) : + ArgumentBase( ArgumentType::Count, a_name, a_descriptor, 0, -1 ) { + +} + +/* *********************************************************************************************************//** + * Called by *printStatus*. This method returns a string representing *this*'s value. + ***********************************************************************************************************/ + +std::string OptionCounter::printStatus2( ) const { + + return( " counts = " + std::to_string( counts( ) ) ); +} + +/*! \class OptionStore + * An option with a value. If multiple options with the same name are entered, only the last vluae entered if returned by the value() method. + */ + +/* *********************************************************************************************************//** + * OptionStore constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] Not used. Will probably be deprecated. + * @param a_maximumNeeded [in] Not used. Will probably be deprecated. + ***********************************************************************************************************/ + +OptionStore::OptionStore( std::string const &a_name, std::string const &a_descriptor, LUPI_maybeUnused int a_minimumNeeded, LUPI_maybeUnused int a_maximumNeeded ) : + ArgumentBase( ArgumentType::Store, a_name, a_descriptor, 0, -1 ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of + * + * @param a_index [in] This argument is not used. The last value entered is always returned. + * + * @return Returns the last value entered or executes a **throw** if option not entered. + ***********************************************************************************************************/ + +std::string const &OptionStore::value( std::size_t a_index ) const { + + a_index = values( ).size( ); + if( a_index != 0 ) --a_index; + + return ArgumentBase::value( a_index ); +} + +/* *********************************************************************************************************//** + * Prints the value for *this*. Called by *printStatus*. + * + * @param a_indent [in] The amount of indentation to start the first line with. + ***********************************************************************************************************/ + +void OptionStore::printStatus3( std::string const &a_indent ) const { + + if( counts( ) > 0 ) std::cout << a_indent << value( ) << std::endl; +} + +/*! \class OptionAppend + * An option with a value. If multiple options with the same name are entered, all values will be stored. + */ + +/* *********************************************************************************************************//** + * OptionAppend constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] The minimum number of times the argument must be entered. + * @param a_maximumNeeded [in] The maximum number of times the argument can be entered. + ***********************************************************************************************************/ + +OptionAppend::OptionAppend( std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded, int a_maximumNeeded ) : + ArgumentBase( ArgumentType::Append, a_name, a_descriptor, a_minimumNeeded, a_maximumNeeded ) { + +} + +/* *********************************************************************************************************//** + * Prints the values for *this*. Called by *printStatus*. + * + * @param a_indent [in] The amount of indentation to start the first line with. + ***********************************************************************************************************/ + +void OptionAppend::printStatus3( std::string const &a_indent ) const { + + for( auto valueIterator = values( ).begin( ); valueIterator != values( ).end( ); ++valueIterator ) { + std::cout << a_indent << *valueIterator << std::endl; + } +} + +/*! \class Positional + * An option with a value. If multiple options with the same name are entered, the *m_value* member will represent the last option entered. + */ + +/* *********************************************************************************************************//** + * Positional constructor. + * + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] The minimum number of times the argument must be entered. + * @param a_maximumNeeded [in] The maximum number of times the argument can be entered. + ***********************************************************************************************************/ + +Positional::Positional( std::string const &a_name, std::string const &a_descriptor, int a_minimumNeeded, int a_maximumNeeded ) : + ArgumentBase( ArgumentType::Positional, a_name, a_descriptor, a_minimumNeeded, a_maximumNeeded ) { +} + +/* *********************************************************************************************************//** + * Prints the values for *this*. Called by *printStatus*. + * + * @param a_indent [in] The amount of indentation to start the first line with. + ***********************************************************************************************************/ + +void Positional::printStatus3( std::string const &a_indent ) const { + + for( auto valueIterator = values( ).begin( ); valueIterator != values( ).end( ); ++valueIterator ) { + std::cout << a_indent << *valueIterator << std::endl; + } +} + +/*! \class ArgumentParser + * The main argument parser class. + */ + +/* *********************************************************************************************************//** + * ArgumentParser constructor. + ***********************************************************************************************************/ + +ArgumentParser::ArgumentParser( std::string const &a_codeName, std::string const &a_descriptor ) : + m_codeName( FileInfo::basenameWithoutExtension( a_codeName ) ), + m_descriptor( a_descriptor ) { + +} + +/* *********************************************************************************************************//** + * ArgumentParser destructor. + ***********************************************************************************************************/ + +ArgumentParser::~ArgumentParser( ) { + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + delete *argumentIterator; + } +} + +/* *********************************************************************************************************//** + * Add *a_argumentBase* to the list of arguments. + * + * @param a_argumentBase [in] Pointer to the *ArgumentBase* to add to *this*. + ***********************************************************************************************************/ + +void ArgumentParser::add2( ArgumentBase *a_argumentBase ) { + + if( !a_argumentBase->isOptionalArgument( ) ) { + for( auto argumentIterator = m_arguments.rbegin( ); argumentIterator != m_arguments.rend( ); ++argumentIterator ) { + if( !(*argumentIterator)->isOptionalArgument( ) ) { + if( (*argumentIterator)->minimumNeeded( ) == (*argumentIterator)->maximumNeeded( ) ) break; + throw std::runtime_error( "ERROR 1400 in ArgumentParser::add: request to add postional argument when prior postional argument '" + + (*argumentIterator)->name( ) + "' takes a variable number of values." ); + } + } + } + + if( hasName( a_argumentBase->name( ) ) ) + throw std::runtime_error( "ERROR 1500 in ArgumentParser::add: name '" + a_argumentBase->name( ) + "' already present." ); + + m_arguments.push_back( a_argumentBase ); +} + +/* *********************************************************************************************************//** + * Creates an argument instance of type specified by *a_argumentType* and adds to *this*. + * + * @param a_argumentType [in] The type of argument to create. + * @param a_name [in] The name of the argument. + * @param a_descriptor [in] The string printed with arugment's help. + * @param a_minimumNeeded [in] The minimum number of times the argument must be entered. + * @param a_maximumNeeded [in] The maximum number of times the argument can be entered. + * + * @return Returns a pointer to to the created argument instance. + ***********************************************************************************************************/ + +ArgumentBase *ArgumentParser::add( ArgumentType a_argumentType, std::string const &a_name, std::string const &a_descriptor, + int a_minimumNeeded, int a_maximumNeeded ) { + + ArgumentBase *argument = nullptr; + + switch( a_argumentType ) { + case ArgumentType::True : + argument = new OptionTrue( a_name, a_descriptor ); + break; + case ArgumentType::False : + argument = new OptionFalse( a_name, a_descriptor ); + break; + case ArgumentType::Count : + argument = new OptionCounter( a_name, a_descriptor ); + break; + case ArgumentType::Store : + argument = new OptionStore( a_name, a_descriptor ); + break; + case ArgumentType::Append : + argument = new OptionAppend( a_name, a_descriptor, a_minimumNeeded, a_maximumNeeded ); + break; + default : + argument = new Positional( a_name, a_descriptor, a_minimumNeeded, a_maximumNeeded ); + } + + add2( argument ); + + return( argument ); +} + +/* *********************************************************************************************************//** + * Adds the alias *a_alias* to the argument named *a_name*. + * + * @param a_name [in] The name of the argument to add the alias to. + * @param a_alias [in] The alias name to add. + ***********************************************************************************************************/ + +void ArgumentParser::addAlias( std::string const &a_name, std::string const &a_alias ) { + + if( hasName( a_alias ) ) + throw std::runtime_error( "ERROR 1510 in ArgumentParser::addAlias: name '" + a_alias + "' already present." ); + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->hasName( a_name ) ) { + (*argumentIterator)->addAlias( a_alias ); + return; + } + } + throw std::runtime_error( "ERROR 1520 in ArgumentParser::addAlias: no such argument named '" + a_name + "'." ); +} + +/* *********************************************************************************************************//** + * Adds the alias *a_alias* to the argument *a_argumentBase*. + * + * @param a_argumentBase [in] The argument to add the alias to. + * @param a_alias [in] The name of the argument to add the alias to. + ***********************************************************************************************************/ + +void ArgumentParser::addAlias( ArgumentBase const * const a_argumentBase, std::string const &a_alias ) { + + addAlias( a_argumentBase->name( ), a_alias ); +} + +/* *********************************************************************************************************//** + * Returns true if name *a_name* is an optional argument of *this* and false otherwise. + * + * @param a_name [in] The name to see check if it exists in *this*. + * + * @return true if name *a_name* is in *this* and false otherwise. + ***********************************************************************************************************/ + +bool ArgumentParser::isOptionalArgument( std::string const &a_name ) const { + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->hasName( a_name ) ) return( (*argumentIterator)->argumentType( ) != ArgumentType::Positional ); + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if name *a_name* is in *this* and false otherwise. + * + * @param a_name [in] The name to see check if it exists in *this*. + * + * @return true if name *a_name* is in *this* and false otherwise. + ***********************************************************************************************************/ + +bool ArgumentParser::hasName( std::string const &a_name ) const { + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->hasName( a_name ) ) return( true ); + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Parses the list of arguments. + * + * @param a_argc [in] The number of arguments. + * @param a_argv [in] The list of arguments. + ***********************************************************************************************************/ + +void ArgumentParser::parse( int a_argc, char **a_argv, bool a_printArguments ) { + + for( int iargc = 1; iargc < a_argc; ++iargc ) { // Check is help requested. + std::string arg( a_argv[iargc] ); + + if( ( arg == "-h" ) || ( arg == "--help" ) ) help( ); + } + + auto argumentIterator = m_arguments.begin( ); // Find first non-option argument. + for( ; argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( !(*argumentIterator)->isOptionalArgument( ) ) break; + } + + int iargc = 1; + for( ; iargc < a_argc; ) { + std::string arg( a_argv[iargc] ); + + if( arg[0] == '-' ) { // Need to check if negative number. + auto argumentIterator2 = m_arguments.begin( ); + for( ; argumentIterator2 != m_arguments.end( ); ++argumentIterator2 ) { + if( (*argumentIterator2)->hasName( arg ) ) break; + } + if( argumentIterator2 == m_arguments.end( ) ) throw std::runtime_error( "ERROR 1600 in ArgumentParser::parse: invalid option '" + arg + "'." ); + iargc = (*argumentIterator2)->parse( *this, iargc, a_argc, a_argv ); } + else { + if( argumentIterator == m_arguments.end( ) ) + throw std::runtime_error( "ERROR 1610 in ArgumentParser::parse: additional positional argument found starting at index " + + std::to_string( iargc ) + " (" + arg + ")" ); + + iargc = (*argumentIterator)->parse( *this, iargc, a_argc, a_argv ); + + ++argumentIterator; + for( ; argumentIterator != m_arguments.end( ); ++argumentIterator ) { // Find next positional arguments. + if( !(*argumentIterator)->isOptionalArgument( ) ) break; + } + } + } + for( auto argumentIterator2 = m_arguments.begin( ); argumentIterator2 != m_arguments.end( ); ++argumentIterator2 ) { + if( (*argumentIterator2)->counts( ) < (*argumentIterator2)->minimumNeeded( ) ) { + std::string msg( "arguments for" ); + + if( (*argumentIterator2)->isOptionalArgument( ) ) msg = "number of option"; + throw std::runtime_error( "ERROR 1620 in ArgumentParser::parse: insufficient " + msg + " '" + (*argumentIterator2)->name( ) + + "' entered. Range of " + std::to_string( (*argumentIterator2)->minimumNeeded( ) ) + " to " + + std::to_string( (*argumentIterator2)->maximumNeeded( ) ) + " required, " + + std::to_string( (*argumentIterator2)->counts( ) ) + " entered." ); + } + } + + if( a_printArguments ) { + std::cerr << " " << LUPI::FileInfo::basenameWithoutExtension( m_codeName ); + for( int i1 = 1; i1 < a_argc; i1++ ) std::cerr << " " << a_argv[i1]; + std::cerr << std::endl; + } +} + +/* *********************************************************************************************************//** + * Prints the help for *this*. + ***********************************************************************************************************/ + +void ArgumentParser::help( ) const { + + usage( ); + + if( m_descriptor != "" ) { + std::cout << std::endl << "Description:" << std::endl; + std::cout << " " << m_descriptor << std::endl; + } + + bool printHeader = true; + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->isOptionalArgument( ) ) continue; + + if( printHeader ) std::cout << std::endl << "positional arguments:" << std::endl; + printHeader = false; + + std::string line = (*argumentIterator)->name( ); + if( ( (*argumentIterator)->minimumNeeded( ) != (*argumentIterator)->maximumNeeded( ) ) || ( (*argumentIterator)->maximumNeeded( ) != 1 ) ) + line += " [" + std::to_string( (*argumentIterator)->minimumNeeded( ) ) + "," + std::to_string( (*argumentIterator)->maximumNeeded( ) ) + "]"; + printArgumentDescription( line, (*argumentIterator)->descriptor( ) ); + } + + std::cout << std::endl << "optional arguments:" << std::endl; + std::cout << " -h, --help Show this help message and exit." << std::endl; + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( !(*argumentIterator)->isOptionalArgument( ) ) continue; + + std::string line; + std::string sep; + for( auto namesIterator = (*argumentIterator)->names( ).begin( ); namesIterator != (*argumentIterator)->names( ).end( ); ++namesIterator ) { + line += sep + *namesIterator; + sep = ", "; + } + if( (*argumentIterator)->requiresAValue( ) ) line += " VALUE"; + if( (*argumentIterator)->argumentType( ) == ArgumentType::Append ) { + if( ( (*argumentIterator)->minimumNeeded( ) != (*argumentIterator)->maximumNeeded( ) ) || ( (*argumentIterator)->maximumNeeded( ) != 1 ) ) + line += " [" + std::to_string( (*argumentIterator)->minimumNeeded( ) ) + "," + std::to_string( (*argumentIterator)->maximumNeeded( ) ) + "]"; + } + printArgumentDescription( line, (*argumentIterator)->descriptor( ) ); + } + + exit( EXIT_SUCCESS ); +} + +/* *********************************************************************************************************//** + * Prints the usage for *this*. + ***********************************************************************************************************/ + +void ArgumentParser::usage( ) const { + + std::string line( "usage: " ); + line += codeName( ); + std::string indent( "" ); + indent.resize( line.size( ), ' ' ); + + for( int counter = 0; counter < 2; ++counter ) { + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->isOptionalArgument( ) ) { + std::string optionUsage( (*argumentIterator)->usage( counter == 0 ) ); + + if( ( line.size( ) + optionUsage.size( ) ) > maxPrintLineWidth ) { + std::cout << line << std::endl; + line = indent; + } + line += optionUsage; + } + } + } + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + if( (*argumentIterator)->isOptionalArgument( ) ) continue; + std::string optionUsage( (*argumentIterator)->usage( false ) ); + + if( ( line.size( ) + optionUsage.size( ) ) > maxPrintLineWidth ) { + std::cout << line << std::endl; + line = indent; + } + line += optionUsage; + } + if( line.size( ) > indent.size( ) ) std::cout << line << std::endl; + std::cout << std::endl; +} + +/* *********************************************************************************************************//** + * Returns the usage string for *this* option. + * + * @param a_indent [in] The amount of indentation to start the first line with. + * + * @return The value of *a_index* + 1. + ***********************************************************************************************************/ + +void ArgumentParser::printStatus( std::string a_indent ) const { + + for( auto argumentIterator = m_arguments.begin( ); argumentIterator != m_arguments.end( ); ++argumentIterator ) { + (*argumentIterator)->printStatus( a_indent ); + } +} + + +/* *********************************************************************************************************//** + * For internal use only. + * + * @param a_line [in] A string containing the help line for an argument up to the description string. + * @param a_descriptor [in] The help description string. + ***********************************************************************************************************/ + +static void printArgumentDescription( std::string const &a_line, std::string const &a_descriptor ) { + + std::string newLineSpaces = " "; + auto size = newLineSpaces.size( ); + auto maxDescriptionWidth = maxPrintLineWidth - size; + std::string line = " " + a_line; + if( line.size( ) < size ) line.resize( size, ' ' ); + std::cout << line; + if( line.size( ) > size ) std::cout << std::endl << newLineSpaces; + + std::string descriptor = a_descriptor; + while( descriptor.size( ) > 0 ) { + auto length = descriptor.size( ); + if( length > maxDescriptionWidth ) { + length = maxDescriptionWidth; + length = descriptor.rfind( ' ', length ); + if( length == 0 ) length = descriptor.find( ' ', length ); + } + + std::cout << " " << descriptor.substr( 0, length ) << std::endl; + descriptor = descriptor.substr( length ); + auto firstNotOf = descriptor.find_first_not_of( " " ); + if( firstNotOf != descriptor.npos ) descriptor = descriptor.substr( firstNotOf ); + if( descriptor.size( ) > 0 ) std::cout << newLineSpaces; + } +} + +} // End of namespace LUPI. diff --git a/source/processes/hadronic/models/lend/src/LUPI_file.cc b/source/processes/hadronic/models/lend/src/LUPI_file.cc new file mode 100644 index 0000000000..daef7f0ab4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_file.cc @@ -0,0 +1,224 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include +#include +#include + +#include + +#ifdef _WIN32 +#include +#include +#include +char *realpath( char const *a_path, char *a_resolved ) { + + char resolvedPath[LUPI_PATH_MAX+1], *p1 = nullptr; + + DWORD length = GetFullPathName( a_path, LUPI_PATH_MAX, resolvedPath, nullptr ); + // MSVC requires explicitly casting malloc result + if( ( p1 = (char *)malloc( length + 1 ) ) == nullptr ) return( nullptr ); + strcpy( p1, resolvedPath ); + if( length == 0 ) return( nullptr ); + return( p1 ); +} + +std::string dirname( char const *a_path ) { + std::filesystem::path filePath( a_path ); + return filePath.parent_path().string(); +} + +std::string basename( char const *a_path ) { + // don't strip the extension for compatibility with version + std::filesystem::path filePath( a_path ); + return filePath.filename().string(); +} +#else +// FIXME: once all users are on C++17 or later, switch to using std::filesystem for all systems +#include +#include +#endif + +namespace LUPI { + +namespace FileInfo { + +/* *********************************************************************************************************//** + * This function takes a file path and returns its real path. On a Unix system, the system function realpath is called. + * + * @param a_path [in] The path whose real path is to be determined. + * + * @return The real path. + ***********************************************************************************************************/ + +std::string realPath( std::string const &a_path ) { + + char *p1 = realpath( a_path.c_str( ), nullptr ); + + if( p1 == nullptr ) { + std::string errMsg( "realPath: file does not exist: " ); + throw Exception( errMsg + a_path ); + } + std::string basePath( p1 ); + free( p1 ); + return( basePath ); +} + +/* *********************************************************************************************************//** + * Returns the base name of a path. + * + * @param a_path [in] The path whose base name is returned. + ***********************************************************************************************************/ + +std::string _basename( std::string const &a_path ) { + + char *path = new char[a_path.size( ) + 1]; + strcpy( path, a_path.c_str( ) ); + std::string basename1( basename( path ) ); + + delete[] path; + + return( basename1 ); +} + +/* *********************************************************************************************************//** + * Same as **basename** but removes, if a *period* (i.e., ".") exists in the string, the last "." and all following characters. + * + * @param a_path [in] The path whose base name is returned without its extension. + ***********************************************************************************************************/ + +std::string basenameWithoutExtension( std::string const &a_path ) { + + std::size_t found = a_path.rfind( '.' ); + + return( a_path.substr( 0, found ) ); +} + +/* *********************************************************************************************************//** + * Returns the directory name of a path. This is, it removes the base name. + * + * @param a_path [in] The path whose base name is returned. + ***********************************************************************************************************/ + +std::string _dirname( std::string const &a_path ) { + + char *path = new char[a_path.size( ) + 1]; + strcpy( path, a_path.c_str( ) ); + std::string dirname1( dirname( (char *) path ) ); + + delete[] path; + + return( dirname1 ); +} + +/* *********************************************************************************************************//** + * Returns *true* if the path exists and *false* otherwise. + * + * @param a_path [in] The path that is checked for existence. + ***********************************************************************************************************/ + +bool exists( std::string const &a_path ) { + +#ifdef _WIN32 + return std::filesystem::exists( std::filesystem::path( a_path ) ); +#else + return( access( a_path.c_str( ), F_OK ) == 0 ); +#endif +} + +/* *********************************************************************************************************//** + * Returns *true* if path is a direction that exists and *false* otherwise. + * + * @param a_path [in] The path that is checked for existence and is it a directory. + * + * @return Returns *true* if the path exists (e.g., created if it does not exists) and *false* otherwise. + ***********************************************************************************************************/ + +bool isDirectory( std::string const &a_path ) { + + try { + FileStat fileStat( a_path ); + return( fileStat.isDirectory( ) ); } + catch (...) { + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Adds all needed directories to complete *a_path*. + * + * @param a_path [in] The path that is checked for existence. + * + * @return Returns *true* if the path exists (e.g., created if it does not exists) and *false* otherwise. + ***********************************************************************************************************/ + +bool createDirectories( std::string const &a_path ) { + + if( isDirectory( a_path ) ) return( true ); + if( ( a_path == LUPI_FILE_SEPARATOR ) || ( a_path == "." ) || ( a_path == "" ) ) return( true ); + + std::string dirname1( _dirname( a_path ) ); + if( createDirectories( dirname1 ) ) { +#ifdef _WIN32 + int status = _mkdir( a_path.c_str( ) ); +#else + int status = mkdir( a_path.c_str( ), S_IRWXU | S_IRWXG | S_IRWXG ); +#endif + if( status == 0 ) return( true ); + switch( errno ) { + case EEXIST : + return( true ); + default : + return( false ); + } + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Calls the C stat function and stores its information. + * + * @param a_path [in] The path (e.g., file, directory) whose stat is determined. + ***********************************************************************************************************/ + +FileStat::FileStat( std::string const &a_path ) : + m_path( a_path ) { + + int error = stat( a_path.c_str( ), &m_stat ); + + if( error != 0 ) { + switch( error ) { + case EACCES : + throw Exception( "FileStat::FileStat: Permission denied for file '" + a_path + "'.." ); + case EIO : + throw Exception( "FileStat::FileStat: An error occurred while stat-ing file '" + a_path + "'.." ); + case ELOOP : + throw Exception( "FileStat::FileStat: A loop exists in symbolic links for file '" + a_path + "'.." ); + case ENAMETOOLONG : + throw Exception( "FileStat::FileStat: Path name too long '" + a_path + "'." ); + case ENOENT : + throw Exception( "FileStat::FileStat: No such path '" + a_path + "'." ); + case ENOTDIR : + throw Exception( "FileStat::FileStat: A component of the path prefix is not a directory '" + a_path + "'." ); + case EOVERFLOW : + throw Exception( "FileStat::FileStat: File too big: '" + a_path + "'." ); + default : + throw Exception( "FileStat::FileStat: Unknown error from C function 'stat' for file '" + a_path + "'." ); + } + } +} + +} // End of namespace FileInfo. + +} // End of namespace LUPI. diff --git a/source/processes/hadronic/models/lend/src/LUPI_formatVersion.cc b/source/processes/hadronic/models/lend/src/LUPI_formatVersion.cc new file mode 100644 index 0000000000..ce11a50405 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_formatVersion.cc @@ -0,0 +1,120 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "LUPI.hpp" + +namespace LUPI { + +/*! \class FormatVersion + * Class to store GNDS format. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +FormatVersion::FormatVersion( ) : + m_format( "" ), + m_major( -1 ), + m_minor( -1 ), + m_patch( "" ) { + +} + +/* *********************************************************************************************************//** + * @param a_formatVersion [in] The GNDS format. + ***********************************************************************************************************/ + +FormatVersion::FormatVersion( std::string const &a_formatVersion ) : + m_format( a_formatVersion ), + m_major( -1 ), + m_minor( -1 ), + m_patch( "" ) { + + setFormat( a_formatVersion ); +} + +/* *********************************************************************************************************//** + * @param a_formatVersion [in] The GNDS format. + ***********************************************************************************************************/ + +FormatVersion::FormatVersion( FormatVersion const &a_formatVersion ) : + m_format( a_formatVersion.format( ) ), + m_major( a_formatVersion.major( ) ), + m_minor( a_formatVersion.minor( ) ), + m_patch( a_formatVersion.patch( ) ) { + +} + +/* *********************************************************************************************************//** + * The assignment operator. This method sets the members of *this* to those of *a_rhs* except for those + * not set by base classes. + * + * @param a_rhs [in] Instance whose member are used to set the members of *this*. + ***********************************************************************************************************/ + +FormatVersion &FormatVersion::operator=( FormatVersion const &a_rhs ) { + + if( this != &a_rhs ) { + m_format = a_rhs.format( ); + m_major = a_rhs.major( ); + m_minor = a_rhs.minor( ); + m_patch = a_rhs.patch( ); + } + + return( *this ); +} + +/* *********************************************************************************************************//** + * Set the format to *a_formatVersion* and parse its components. + * + * @param a_formatVersion [in] The GNDS format. + * + * @return true if format of the form "MAJOR.MINOR[.PATCH]" where MAJOR and MINOR are integers. Otherwise returns false. + ***********************************************************************************************************/ + +bool FormatVersion::setFormat( std::string const &a_formatVersion ) { + + m_format = a_formatVersion; + + std::vector formatItems = Misc::splitString( a_formatVersion, '.' ); + + if( ( formatItems.size( ) < 2 ) || ( formatItems.size( ) > 3 ) ) goto err; + + if( !Misc::stringToInt( formatItems[0], m_major ) ) goto err; + if( !Misc::stringToInt( formatItems[1], m_minor ) ) goto err; + + if( formatItems.size( ) == 3 ) m_patch = formatItems[2]; + + return( true ); + +err: + m_major = -1; + m_minor = -1; + m_patch = ""; + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if m_format is a supported format and false otherwise; + * + * @return true if format is supported and false otherwise. + ***********************************************************************************************************/ + +bool FormatVersion::supported( ) const { + + if( m_format == GNDS_formatVersion_1_10Chars ) return( true ); + if( m_format == GNDS_formatVersion_2_0Chars ) return( true ); + if( m_format == GNDS_formatVersion_2_0_LLNL_4Chars ) return( true ); + + return( false ); +} + +} // End namespace LUPI. diff --git a/source/processes/hadronic/models/lend/src/LUPI_misc.cc b/source/processes/hadronic/models/lend/src/LUPI_misc.cc new file mode 100644 index 0000000000..e7baefbd3c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_misc.cc @@ -0,0 +1,393 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include +#include +#include + +#include + +#include + +namespace LUPI { + +/* *********************************************************************************************************//** + * If the build of GIDI+ defines the MACRO LUPI_printDeprecatedInformation, then all deprecated functions will + * print a message that they are deprecated. + * + * @param a_functionName [in] The name of the function (or method) that is deprecated. + * @param a_replacementName [in] The name of the function that replaces the deprecated function. + * @param a_asOf [in] Specifies the version of GIDI+ for which the function will no longer be available. + ***********************************************************************************************************/ + +void deprecatedFunction( LUPI_maybeUnused std::string const &a_functionName, LUPI_maybeUnused std::string const &a_replacementName, LUPI_maybeUnused std::string const &a_asOf ) { + +#ifdef LUPI_printDeprecatedInformation + std::cerr << "The function '" << a_functionName << "' is decreated"; + if( a_asOf != "" ) std::cerr << " and will no longer be available starting with GIDI+ '" << a_asOf << "'"; + std::cerr << "."; + if( a_replacementName != "" ) std::cerr << " Please use '" << a_replacementName << "' instead."; + std::cerr << std::endl; +#endif +} + +/*! \class Exception + * Exception class for all GIDI exceptions thrown by GIDI functions. + */ + +/* *********************************************************************************************************//** + * @param a_message [in] The message that the function what() will return. + ***********************************************************************************************************/ + +Exception::Exception( std::string const & a_message ) : + std::runtime_error( a_message ) { + +} + +namespace Misc { + +/* *********************************************************************************************************//** + * This returns a copy of *a_string* with its leading (if *a_left* is **true**) and trailing (if *a_left* is **true**) white spaces removed. + * + * @param a_string [in] The string to copy and strip leading and trailing white spaces from. + * @param a_left [in] If **true**, white spaces are removed from the beginning of the string. + * @param a_right [in] If **true**, white spaces are removed from the ending of the string. + * + * @return The list of strings. + ***********************************************************************************************************/ + +std::string stripString( std::string const &a_string, bool a_left, bool a_right ) { + + std::string stripped( a_string ); + std::string::iterator beginning = stripped.begin( ), ending = stripped.end( ); + + if( a_left ) { + for( ; beginning != ending; ++beginning ) + if( !std::isspace( *beginning ) ) break; + } + + if( ( beginning != ending ) && a_right ) { + --ending; + for( ; beginning != ending; --ending ) + if( !std::isspace( *ending ) ) break; + ++ending; + } + + stripped.erase( ending, stripped.end( ) ); + stripped.erase( stripped.begin( ), beginning ); + + return( stripped ); +} + +/* *********************************************************************************************************//** + * This function splits that string *a_string* into separate strings using the delimiter character *a_delimiter*. + * If the delimiter is the space character, consecutive spaces are treated as one space, and leading and trailing + * white spaces are ignored. + * + * @param a_string [in] The string to split. + * @param a_delimiter [in] The delimiter character. + * @param a_strip [in] If **true**, white spaces are removed from the begining and ending of each string in the list returned. + * + * @return The list of strings. + ***********************************************************************************************************/ + +std::vector splitString( std::string const &a_string, char a_delimiter, bool a_strip ) { + + std::stringstream stringStream( a_string ); + std::string segment; + std::vector segments; + + while( std::getline( stringStream, segment, a_delimiter ) ) { + if( ( a_delimiter == ' ' ) && ( segment.size( ) == 0 ) ) continue; + + if( a_strip ) segment = stripString( segment ); + segments.push_back( segment ); + } + + return( segments ); +} + +/* *********************************************************************************************************//** + * This function splits that string *a_string* into separate strings using the delimiter string *a_delimiter*. + * + * @param a_string [in] The string to split. + * @param a_delimiter [in] The delimiter string. + * @param a_strip [in] If **true**, white spaces are removed from the begining and ending of each string in the list returned. + * + * @return The list of strings. + ***********************************************************************************************************/ + +std::vector splitString( std::string const &a_string, std::string const &a_delimiter, bool a_strip ) { + + std::string segment; + std::vector segments; + + for( std::size_t index1 = 0; ; ) { + std::size_t index2 = a_string.find( a_delimiter, index1 ); + + segment = a_string.substr( index1, index2 - index1 ); + + if( a_strip ) segment = stripString( segment ); + segments.push_back( segment ); + if( index2 == std::string::npos ) break; + + index1 = index2 + a_delimiter.size( ); + } + + return( segments ); +} + +/* *********************************************************************************************************//** + * This function splits that string *a_string* into separate strings using the delimiter character "/" as + * for a XLink. The delimiter character "/"'s in each quoted region of the string is not split. + * + * @param a_string [in] The XLink string to split. + * + * @return The XLink parts as a list of strings. + ***********************************************************************************************************/ + +std::vector splitXLinkString( std::string const &a_XLink ) { + + char quote = ' '; + std::vector elements; + + std::size_t start = 0; + + while( a_XLink[start] == '/' ) ++start; + + std::size_t end = start; + std::size_t size = a_XLink.size( ); + + if( start != 0 ) { + elements.push_back( "" ); + } + + for( ; end < size ; ++end ) { + char current = a_XLink[end]; + if( quote != ' ' ) { // Are we inside a quote? + if( current == quote ) quote = ' '; + continue; + } + + if( ( current == '\'' ) || ( current == '"' ) ) { // Are we starting a quote? + quote = current; + continue; + } + + if( current == '/' ) { + std::string element = a_XLink.substr( start, end - start ); + elements.push_back( element ); + while( a_XLink[end] == '/' ) ++end; + start = end; + if( end == size ) break; // Happens when XLink ends with '/'. + } + } + + if( start < end ) { + std::string element = a_XLink.substr( start, end - start ); + elements.push_back( element ); + } + + return( elements ); +} + +/* *********************************************************************************************************//** + * Converts a string to an integer. All characteros of the string must be valid int characters except for the trailing 0. + * + * @param a_string [in] The string to convert to an int. + * @param a_value [in] The converted int value. + * + * @return true if successful and false otherwise. + ***********************************************************************************************************/ + +bool stringToInt( std::string const &a_string, int &a_value ) { + + char const *digits = a_string.c_str( ); + char *nonDigit; + long value = strtol( digits, &nonDigit, 10 ); + + if( digits == nonDigit ) return( false ); + if( *nonDigit != 0 ) return( false ); + if( ( value < INT_MIN ) || ( value > INT_MAX ) ) return( false ); + + a_value = static_cast( value ); + return( true ); +} + +/* *********************************************************************************************************//** + * Returns a string that represent the arguments formatted per *a_format*. + * + * @param a_format [in] A *printf* like format specifier for converting a double to a string. + * + * @return The string representing the arguments formatted per *a_format*. + ***********************************************************************************************************/ + +std::string argumentsToString( char const *a_format, ... ) { + + va_list args; + + va_start( args, a_format ); + char *charStr = smr_vallocateFormatMessage( a_format, &args ); + va_end( args ); + + std::string string( charStr ); + + free( charStr ); + return( string ); +} + +/* *********************************************************************************************************//** + * Returns a string that represent the double **a_value** using a *printf* like format specifier. + * + * @param a_format [in] A *printf* like format specifier for converting a double to a string. + * @param a_value [in] The **double** to be converted to a string. + * @param a_reduceBits [in] If **true** the lowest digit or two are altered in an attempt to convert numbers like 4.764999999999999 and 4.765 to the same string. + ***********************************************************************************************************/ + +std::string doubleToString3( char const *a_format, double a_value, bool a_reduceBits ) { + + + if( a_reduceBits ) { // The next line is an attempt to convert numbers like 4.764999999999999 and 4.765 to the same value. + a_value = std::stod( LUPI::Misc::argumentsToString("%.14e", a_value ) ); + } + + return( LUPI::Misc::argumentsToString( a_format, a_value ) ); +} + +/* *********************************************************************************************************//** + * Returns a string representation of *a_value* that contains the smallest number of character yet still agrees with *a_value* + * to *a_significantDigits* significant digits. For example, for *a_value* = 1.20000000001, "1.2" will be returned if *a_significantDigits* + * is less than 11, otherwise "1.20000000001" is returned. + * + * @param a_value [in/out] The double to convert to a string. + * @param a_significantDigits [in] The number of significant digits the string representation should agree with the double. + * @param a_favorEFormBy [in] The bigger this value the more likely an e-form will be favored in the string representation. + * + * @return A *std::string* instance. + ***********************************************************************************************************/ + +std::string doubleToShortestString( double a_value, int a_significantDigits, int a_favorEFormBy ) { + + char *charValue = nf_floatToShortestString( a_value, a_significantDigits, a_favorEFormBy, nf_floatToShortestString_trimZeros ); + + std::string stringValue( charValue ); + free( charValue ); + + return( stringValue ); +} + +/* *********************************************************************************************************//** + * For internal use only. + * + * @param a_indent [in] A string containing the help line for an argument up to the description string. + * @param a_argc [in] The number of command arguments. + * @param a_argv [in] The list of command arguments. + ***********************************************************************************************************/ + +void printCommand( std::string const &a_indent, int a_argc, char **a_argv ) { + + std::cout << a_indent << a_argv[0]; + for( int iargc = 1; iargc < a_argc; ++iargc ) std::cout << " " << a_argv[iargc]; + std::cout << std::endl; +} + +} // End of namespace Misc. + +} // End of namespace LUPI. + +#if defined (GIDIP_HAVE_COMPILER_FLOATING_POINT_EXCEPTIONS) + +#include + +/* *********************************************************************************************************//** + * Turn on floating point exception sigfpe behavior. + * Possible exceptions are: + * + * FE_INEXACT The inexact exception. + * FE_DIVBYZERO The divide by zero exception. + * FE_UNDERFLOW The underflow exception. + * FE_OVERFLOW The overflow exception. + * FE_INVALID The invalid exception. + * FE_ALL_EXCEPT All of the above + * + * @param a_file [in] Filename this function is called from. + * @param a_line [in] Line this function is called from. + ***********************************************************************************************************/ + +void LUPI_FPE_enable( char const *a_file, int a_line ) { + + static int num_errors = 0; + +// feenableexcept() is gnu specific according to documentation, but appears to work using the intel compilers as well. +// We are linking in a gnu library which enables this call. + int result = feenableexcept( FE_DIVBYZERO | FE_OVERFLOW | FE_INVALID ); + + if( result == -1 && num_errors < 3 ) { + num_errors++; + std::cerr << "LUPI_FPE_enable:: feenableexcept() returned -1: called from file " << a_file << " at line" << a_line << ".\n"; + } +} + +/* *********************************************************************************************************//** + * Disable floating point exception sigfpe behavior, and clear exception flags. + * + * @param a_file [in] Filename this function is called from. + * @param a_line [in] Line this function is called from. + ***********************************************************************************************************/ + +void LUPI_FPE_disable_and_clear( char const *a_file, int a_line ) { + + static int num_errors = 0; + fenv_t envp; + +// The feclearexcept() call is gnu specific and does not appear to work when I use it with the intel compiler. +// However, the posix compliant feholdexcept() can be used to clear exceptions, so I am using it. + int result = feholdexcept(&envp); + + if( result != 0 && num_errors < 3 ) { + num_errors++; + std::cerr << "LUPI_FPE_disable_and_clear:: feholdexcept returned error " << result << ": called from file " << a_file << " at line " << a_line << ".\n"; + } +} + +/* *********************************************************************************************************//** + * Test the fpe exception flags, and print out warnings or abort with fatal if they are set. + * + * @param a_file [in] Filename this function is called from. + * @param a_line [in] Line this function is called from. + ***********************************************************************************************************/ + +void LUPI_FPE_test( char const *a_file, int a_line ) { + + static int num_errors = 0; + + if( fetestexcept(FE_DIVBYZERO) != 0 && num_errors < 10 ) { + num_errors++; + std::cerr << "LUPI_FPE_test:: division by 0.error: called from file " << a_file << " at line " << a_line << ".\n"; + } + + if( fetestexcept(FE_UNDERFLOW) != 0 && num_errors < 10 ) { + num_errors++; + std::cerr << "LUPI_FPE_test:: underflow error: called from file " << a_file << " at line " << a_line << ".\n"; + } + + if( fetestexcept(FE_OVERFLOW) != 0 && num_errors < 10 ) { + num_errors++; + std::cerr << "LUPI_FPE_test:: overflow error: called from file " << a_file << " at line " << a_line << ".\n"; + } + + if( fetestexcept(FE_INVALID) != 0 && num_errors < 10) { + num_errors++; + std::cerr << "LUPI_FPE_test:: invalid error: called from file " << a_file << " at line " << a_line << ".\n"; + } +} +#endif diff --git a/source/processes/hadronic/models/lend/src/LUPI_statusMessageReporting.cc b/source/processes/hadronic/models/lend/src/LUPI_statusMessageReporting.cc new file mode 100644 index 0000000000..fc3f7980e6 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_statusMessageReporting.cc @@ -0,0 +1,101 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include +#include +#include + +#include + +namespace LUPI { + +/* *********************************************************************************************************//** + * Constructor for a StatusMessageReporting instance. + ***********************************************************************************************************/ + +StatusMessageReporting::StatusMessageReporting( ) { + + int status = smr_initialize( &m_smr, smr_status_Ok ); + + if( status != 0 ) throw( "StatusMessageReporting::StatusMessageReporting: Oops." ); // Currently, this should never happend. +} + +/* *********************************************************************************************************//** + * Destructor for a StatusMessageReporting instance. + ***********************************************************************************************************/ + +StatusMessageReporting::~StatusMessageReporting( ) { + + smr_release( &m_smr ); +} + +/* *********************************************************************************************************//** + * Returns the first *a_reports* reports from *m_smr* with *a_prefix* appended to the beginning of the returned string. + * + * @param a_prefix [in] A string added to the beginning of the message. + * @param a_report [in] The maximum number of reports to include in the message. + * @param a_clear [in] If *true*, calls the **clear()** method after the message is constructed. + ***********************************************************************************************************/ + +std::string StatusMessageReporting::constructMessage( std::string a_prefix, int a_reports, bool a_clear ) { + + std::string sep( "" ); + std::string message( a_prefix ); + statusMessageReport const *report; + + if( a_prefix == "" ) sep = "\n"; + + for( report = smr_firstReport( &m_smr ); report != NULL; report = smr_nextReport( report ), --a_reports ) { + if( a_reports == 0 ) break; + + char *reportMessage = smr_copyMessage( report ); + if( reportMessage != nullptr ) { + message += sep; + message += reportMessage; + free( reportMessage ); + sep = "\n"; + } + } + if( a_clear ) clear( ); + + return( message ); +} + +/* *********************************************************************************************************//** + * Returns the first *a_reports* reports from *m_smr* with *a_prefix* appended to the beginning of the returned string. + * + * @param a_prefix [in] A string added to the beginning of the message. + * @param a_report [in] The maximum number of reports to include in the message. + * @param a_clear [in] If *true*, calls the **clear()** method after the message is constructed. + ***********************************************************************************************************/ + +std::string StatusMessageReporting::constructFullMessage( std::string a_prefix, int a_reports, bool a_clear ) { + + std::string message( a_prefix ); + statusMessageReport const *report; + + for( report = smr_firstReport( &m_smr ); report != NULL; report = smr_nextReport( report ), --a_reports ) { + if( a_reports == 0 ) break; + + char *reportMessage = smr_copyFullMessage( report ); + if( reportMessage != nullptr ) { + message += '\n'; + message += reportMessage; + free( reportMessage ); + } + } + if( a_clear ) clear( ); + + return( message ); +} + +} // End of namespace LUPI. diff --git a/source/processes/hadronic/models/lend/src/LUPI_times.cc b/source/processes/hadronic/models/lend/src/LUPI_times.cc new file mode 100644 index 0000000000..e1b72a877f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/LUPI_times.cc @@ -0,0 +1,152 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#ifndef _WIN32 + +#include +#include +#include +#include + +#include + +namespace LUPI { + +#define bufferSize 1024 + +/* *********************************************************************************************************//** + * Default constructor for DeltaTime which sets all values to 0.0. + ***********************************************************************************************************/ + +DeltaTime::DeltaTime( ) : + m_CPU_time( 0.0 ), + m_wallTime( 0.0 ), + m_CPU_timeIncremental( 0.0 ), + m_wallTimeIncremental( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * Constructor for DeltaTime which contains the CPU time *a_CPU_time* and wall time *a_wallTime*. + ***********************************************************************************************************/ + +DeltaTime::DeltaTime( double a_CPU_time, double a_wallTime, double a_CPU_timeIncremental, double a_wallTimeIncremental ) : + m_CPU_time( a_CPU_time ), + m_wallTime( a_wallTime ), + m_CPU_timeIncremental( a_CPU_timeIncremental ), + m_wallTimeIncremental( a_wallTimeIncremental ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor for DeltaTime. + ***********************************************************************************************************/ + +DeltaTime::DeltaTime( DeltaTime const &deltaTime ) : + m_CPU_time( deltaTime.CPU_time( ) ), + m_wallTime( deltaTime.wallTime( ) ), + m_CPU_timeIncremental( deltaTime.CPU_timeIncremental( ) ), + m_wallTimeIncremental( deltaTime.wallTimeIncremental( ) ) { + +} + +/* *********************************************************************************************************//** + * Returns a string representation of *this*. The arugments *a_formatIncremental* and *a_format* specify, in sprintf style, the + * formats for the incremental and total times. If an arugment is an empty string (e.g., "") then its time is not included + * in the return string. Each non-empty argument must contain two flags (e.g., "%.3f") for converting two doubles. If both formats + * are non-empty strings, then *a_sep* is inserted between them. An example of a format string is "total: CPU %8.3f, wall %8.3f". + * + * @param a_formatIncremental [in] Specifies the format in sprintf style for the incremental CPU and wall times. + * @param a_formatTotal [in] Specifies the format in sprintf style for the total CPU and wall times. + * @param a_sep [in] Specifies the string that separates the total and incremental time strings. + * + * @return A string representation of the delta times. + ***********************************************************************************************************/ + +std::string DeltaTime::toString( std::string a_formatIncremental, std::string a_formatTotal, std::string a_sep ) { + + std::string deltaTimeStr; + char buffer[bufferSize+1]; + + if( a_formatIncremental != "" ) { + snprintf( buffer, bufferSize, a_formatIncremental.c_str( ), m_CPU_timeIncremental, m_wallTimeIncremental ); + deltaTimeStr += buffer; + } + + if( a_formatTotal != "" ) { + if( deltaTimeStr != "" ) deltaTimeStr += a_sep; + snprintf( buffer, bufferSize, a_formatTotal.c_str( ), m_CPU_time, m_wallTime ); + deltaTimeStr += buffer; + } + + return( deltaTimeStr ); +} + +/* *********************************************************************************************************//** + * Constructor. + ***********************************************************************************************************/ + +Timer::Timer( ) { + + reset( ); +} + +/* *********************************************************************************************************//** + * Returns a DeltaTime instance representing the time since *this* was created or *reset* was called. + * + * @return A DeltaTime representing the time since *this* was created or *reset* was called. + ***********************************************************************************************************/ + +DeltaTime Timer::deltaTime( ) { + + struct timeval wallTime; + clock_t CPU_time = clock( ); + gettimeofday( &wallTime, 0 ); + + double dWallTime = ( wallTime.tv_sec - m_wallTime.tv_sec ) + 1e-6 * ( wallTime.tv_usec - m_wallTime.tv_usec ); + double dCPU_time = double( CPU_time - m_CPU_time ) / CLOCKS_PER_SEC; + + double dWallTimeIncremental = ( wallTime.tv_sec - m_wallTimeIncremental.tv_sec ) + 1e-6 * ( wallTime.tv_usec - m_wallTimeIncremental.tv_usec ); + double dCPU_timeIncremental = double( CPU_time - m_CPU_timeIncremental ) / CLOCKS_PER_SEC; + + m_CPU_timeIncremental = CPU_time; + m_wallTimeIncremental = wallTime; + + return( DeltaTime( dCPU_time, dWallTime, dCPU_timeIncremental, dWallTimeIncremental ) ); +} + +/* *********************************************************************************************************//** + * Calls deltaTime and then reset. Returns the results of the call to deltaTime. + * + * @return A DeltaTime representing the time since *this* was created or *reset* was called. + ***********************************************************************************************************/ + +DeltaTime Timer::deltaTimeAndReset( ) { + + DeltaTime deltaTime1 = deltaTime( ); + reset( ); + + return( deltaTime1 ); +} + +/* *********************************************************************************************************//** + * Resets the internal times to the current time. + ***********************************************************************************************************/ + +void Timer::reset( ) { + + m_CPU_time = clock( ); + gettimeofday( &m_wallTime, 0 ); + m_CPU_timeIncremental = m_CPU_time; + m_wallTimeIncremental = m_wallTime; +} + +} // End of namespace LUPI. + +#endif // End of not _WIN32 defined. diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_GRIN.cc b/source/processes/hadronic/models/lend/src/MCGIDI_GRIN.cc new file mode 100644 index 0000000000..279edea1b0 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_GRIN.cc @@ -0,0 +1,556 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +namespace MCGIDI { + +/*! \class GRIN_levelsAndProbabilities + * This class stores a Vector of summed probabilities and a Vector of their associated nuclide level as needed by + * inelastic and cpature GRIN continuum reaction data. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_levelsAndProbabilities::GRIN_levelsAndProbabilities( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_table [in] The table with a column containing nucide ids and a column with their probabilities. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_levelsAndProbabilities::GRIN_levelsAndProbabilities( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + GIDI::Table::Table const &a_table, bool a_normalize ) { + + m_summedProbabilities.reserve( a_table.rows( ) ); + m_levels.reserve( a_table.rows( ) ); + m_isModelledLevel.reserve( a_table.rows( ) ); + + double sum = 0.0; + auto cells = LUPI::Misc::splitString( LUPI::Misc::stripString( a_table.data( ).body( ) ), ' ', true ); + for( std::size_t index = 0; index < cells.size( ); ++index ) { + m_levels.push_back( a_setupInfo.m_stateNamesToIndices[cells[index]] ); + PoPI::Nuclide const &nuclide = a_pops.get( cells[index] ); + + ++index; + sum += std::stod( cells[index] ); + m_summedProbabilities.push_back( sum ); + + m_isModelledLevel.push_back( nuclide.kind( ) == PoPI_continuumChars ); + } + + if( a_normalize ) { + for( auto iter = m_summedProbabilities.begin( ); iter != m_summedProbabilities.end( ); ++iter ) (*iter) /= sum; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_levelsAndProbabilities::~GRIN_levelsAndProbabilities( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST void GRIN_levelsAndProbabilities::set( std::vector const &a_levels, std::vector const &a_probabilities ) { + + m_levels.reserve( a_levels.size( ) ); + m_summedProbabilities.reserve( a_levels.size( ) ); + m_isModelledLevel.reserve( a_levels.size( ) ); + + double sum = 0; + for( std::size_t index = 0; index < a_levels.size( ); ++index ) { + m_levels.push_back( a_levels[index] ); + sum += a_probabilities[index]; + m_summedProbabilities.push_back( sum ); + m_isModelledLevel.push_back( true ); + } + + for( auto iter = m_summedProbabilities.begin( ); iter != m_summedProbabilities.end( ); ++iter ) { + *iter /= sum; + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_levelsAndProbabilities::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_INT( m_levels, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_summedProbabilities, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_BOOL( m_isModelledLevel, a_buffer, a_mode ); +} + +/*! \class GRIN_inelasticForEnergy + * This class represents GRIN inelastic continuum reaction data which has simulated levels. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_inelasticForEnergy::GRIN_inelasticForEnergy( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param GRIN_continuumGammas [in] GIDI instance containing the GRIN capture data. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_inelasticForEnergy::GRIN_inelasticForEnergy( SetupInfo &a_setupInfo, double a_projectileMass, double a_targetMass, + PoPI::Database const &a_pops, GIDI::GRIN::InelasticIncidentEnergy const *inelasticIncidentEnergy ) : + m_levelsAndProbabilities( a_setupInfo, a_pops, inelasticIncidentEnergy->table( ), true ) { + + std::vector indices; + std::vector thresholds; + int index = 0; + double priorThreshold = -1; + for( auto iter = m_levelsAndProbabilities.m_levels.begin( ); iter != m_levelsAndProbabilities.m_levels.end( ); ++iter, ++index ) { + NuclideGammaBranchStateInfo const *nuclideGammaBranchStateInfo = a_setupInfo.m_protare.nuclideGammaBranchStateInfos( )[*iter]; + double levelEnergy = nuclideGammaBranchStateInfo->nuclearLevelEnergy( ); + + double threshold = ( a_projectileMass + a_targetMass + levelEnergy / 2 ) * levelEnergy / a_targetMass; + if( threshold > priorThreshold ) { + if( thresholds.size( ) > 0 ) + indices.push_back( index - 1 ); + thresholds.push_back( threshold ); + priorThreshold = threshold; + } + } + indices.push_back( m_levelsAndProbabilities.m_levels.size( ) - 1 ); + + m_indices = indices; + m_thresholds = thresholds; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_inelasticForEnergy::~GRIN_inelasticForEnergy( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int GRIN_inelasticForEnergy::sampleLevelIndex( double a_projectileEnergy, double a_random ) const { + + std::size_t index = 0; + + for( auto iter = m_thresholds.begin( ); iter != m_thresholds.end( ); ++iter, ++index ) { + if( *iter >= a_projectileEnergy ) break; + } + + if( index == 0 ) return( -1 ); + + --index; + + double randomMax = a_random * m_levelsAndProbabilities.m_summedProbabilities[m_indices[index]]; + for( index = 0; index < m_levelsAndProbabilities.m_levels.size( ) - 1; ++index ) { + if( m_levelsAndProbabilities.m_summedProbabilities[index] >= randomMax ) { + break; + } + } + return( m_levelsAndProbabilities.m_levels[index] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_inelasticForEnergy::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_INT( m_indices, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_thresholds, a_buffer, a_mode ); + m_levelsAndProbabilities.serialize( a_buffer, a_mode ); +} + +/*! \class GRIN_inelastic + * This class represents GRIN inelastic continuum reaction data which has simulated levels. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_inelastic::GRIN_inelastic( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param GRIN_continuumGammas [in] GIDI instance containing the GRIN capture data. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_inelastic::GRIN_inelastic( SetupInfo &a_setupInfo, GIDI::GRIN::GRIN_continuumGammas const &GRIN_continuumGammas ) : + m_neutronIndex( a_setupInfo.m_neutronIndex ), + m_neutronUserParticleIndex( -1 ), + m_neutronMass( a_setupInfo.m_protare.projectileMass( ) ), + + m_targetIntid( a_setupInfo.m_protare.targetIntid( ) ), + m_targetIndex( a_setupInfo.m_protare.targetIndex( ) ), + m_targetUserParticleIndex( -1 ), + m_targetMass( a_setupInfo.m_protare.targetMass( ) ) { + + PoPI::Database const &pops = GRIN_continuumGammas.pops( ); + GIDI::Suite const &inelasticIncidentEnergies = GRIN_continuumGammas.inelasticIncidentEnergies( ); + m_energies.reserve( inelasticIncidentEnergies.size( ) ); + m_inelasticForEnergy.reserve( inelasticIncidentEnergies.size( ) ); + for( std::size_t index = 0; index < inelasticIncidentEnergies.size( ); ++index ) { + + GIDI::GRIN::InelasticIncidentEnergy const *inelasticIncidentEnergy = inelasticIncidentEnergies.get( index ); + + m_energies.push_back( inelasticIncidentEnergy->energy( ) ); + m_inelasticForEnergy.push_back( new GRIN_inelasticForEnergy( a_setupInfo, m_neutronMass, m_targetMass, pops, inelasticIncidentEnergy ) ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_inelastic::~GRIN_inelastic( ) { + + for( auto iter = m_inelasticForEnergy.begin( ); iter != m_inelasticForEnergy.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void GRIN_inelastic::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + if( m_neutronIndex == a_particleIndex ) m_neutronUserParticleIndex = a_userParticleIndex; + if( m_targetIndex == a_particleIndex ) m_targetUserParticleIndex = a_userParticleIndex; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void GRIN_inelastic::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + if( PoPI::Intids::neutron == a_particleIntid ) m_neutronUserParticleIndex = a_userParticleIndex; + if( m_targetIntid == a_particleIntid ) m_targetUserParticleIndex = a_userParticleIndex; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_inelastic::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_neutronIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_neutronUserParticleIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_neutronMass, a_buffer, a_mode ); + + DATA_MEMBER_INT( m_targetIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_targetIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_targetUserParticleIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetMass, a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + + std::size_t vectorSize = m_inelasticForEnergy.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_inelasticForEnergy.resize( vectorSize, &a_buffer.m_placement ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( a_buffer.m_placement != nullptr ) { + m_inelasticForEnergy[vectorIndex] = new(a_buffer.m_placement) GRIN_inelasticForEnergy; + a_buffer.incrementPlacement( sizeof( GRIN_inelasticForEnergy ) ); } + else { + m_inelasticForEnergy[vectorIndex] = new GRIN_inelasticForEnergy; + } + } } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_inelasticForEnergy.internalSize( ); + a_buffer.incrementPlacement( sizeof( GRIN_inelasticForEnergy ) * vectorSize ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_inelasticForEnergy[vectorIndex]->serialize( a_buffer, a_mode ); + } +} + +/*! \class GRIN_captureToCompound + * This class represents + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_captureToCompound::GRIN_captureToCompound( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_compoundId [in] The GNDS PoPs' id of the compound level. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_captureToCompound::GRIN_captureToCompound( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, std::string a_compoundId ) : + m_index( a_setupInfo.m_stateNamesToIndices[a_compoundId] ), + m_continuumIndices( ) { + + PoPI::Nuclide const &nuclide = a_pops.get( a_compoundId ); + + PoPI::GammaDecayData const &gammaDecayData = nuclide.gammaDecayData( ); + auto ids = gammaDecayData.ids( ); + auto probabilities1 = gammaDecayData.probabilities( ); + + std::vector levels; + levels.reserve( ids.size( ) ); + std::vector probabilities2; + probabilities2.reserve( ids.size( ) ); + for( std::size_t index = 0; index < ids.size( ); ++index ) { + PoPI::Nuclide const &daughter = a_pops.get( ids[index] ); + if( daughter.kind( ) != PoPI_continuumChars ) continue; + levels.push_back( a_setupInfo.m_stateNamesToIndices[ids[index]] ); + probabilities2.push_back( probabilities1[index] ); + } + m_continuumIndices.set( levels, probabilities2 ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_captureToCompound::~GRIN_captureToCompound( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_captureToCompound::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_index, a_buffer, a_mode ); + m_continuumIndices.serialize( a_buffer, a_mode ); +} + +/*! \class GRIN_captureLevelProbability + * This class represents + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_captureLevelProbability::GRIN_captureLevelProbability( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_captureLevelProbability [in] GIDI instance with the data. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_captureLevelProbability::GRIN_captureLevelProbability( SetupInfo &a_setupInfo, PoPI::Database const &a_pops, + GIDI::GRIN::CaptureLevelProbability const *a_captureLevelProbability ) : + m_knownLevelsAndProbabilities( a_setupInfo, a_pops, a_captureLevelProbability->table( ), false ) { + + auto capturePrimaryToContinua = LUPI::Misc::splitString( a_captureLevelProbability->capturePrimaryToContinua( ), true ); + m_captureToCompounds.reserve( capturePrimaryToContinua.size( ) ); + for( std::size_t i1 = 0; i1 < capturePrimaryToContinua.size( ); ++i1 ) { + m_captureToCompounds.push_back( new GRIN_captureToCompound( a_setupInfo, a_pops, capturePrimaryToContinua[i1] ) ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_captureLevelProbability::~GRIN_captureLevelProbability( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_captureLevelProbability::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + m_knownLevelsAndProbabilities.serialize( a_buffer, a_mode ); + + std::size_t vectorSize = m_captureToCompounds.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_captureToCompounds.resize( vectorSize, &a_buffer.m_placement ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( a_buffer.m_placement != nullptr ) { + m_captureToCompounds[vectorIndex] = new(a_buffer.m_placement) GRIN_captureToCompound; + a_buffer.incrementPlacement( sizeof( GRIN_captureToCompound ) ); } + else { + m_captureToCompounds[vectorIndex] = new GRIN_captureToCompound; + } + } } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_captureToCompounds.internalSize( ); + a_buffer.incrementPlacement( sizeof( GRIN_captureToCompound ) * vectorSize ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_captureToCompounds[vectorIndex]->serialize( a_buffer, a_mode ); + } +} + +/*! \class GRIN_capture + * Thiis class represents GRIN capture continuum reaction data which has simulated (i.e., modelled) levels. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_capture::GRIN_capture( ) : + m_captureNeutronSeparationEnergy( 0.0 ), + m_residualIntid( -1 ), + m_residualIndex( -1 ), + m_residualUserIndex( -1 ), + m_residualMass( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param GRIN_continuumGammas [in] GIDI instance containing the GRIN capture data. + ***********************************************************************************************************/ + +LUPI_HOST GRIN_capture::GRIN_capture( SetupInfo &a_setupInfo, GIDI::GRIN::GRIN_continuumGammas const &GRIN_continuumGammas ) : + m_captureNeutronSeparationEnergy( GRIN_continuumGammas.captureNeutronSeparationEnergy( ).value( ) ), + m_residualIntid( GRIN_continuumGammas.captureResidualIntid( ) ), + m_residualIndex( GRIN_continuumGammas.captureResidualIndex( ) ), + m_residualUserIndex( -1 ), + m_residualMass( GRIN_continuumGammas.captureResidualMass( ) ) { + + PoPI::Database const &pops = GRIN_continuumGammas.pops( ); + GIDI::Suite const &captureLevelProbabilities = GRIN_continuumGammas.captureLevelProbabilities( ); + + m_summedProbabilities.reserve( captureLevelProbabilities.size( ) ); + m_captureLevelProbabilities.reserve( captureLevelProbabilities.size( ) ); + double sum = 0.0; + for( std::size_t index = 0; index < captureLevelProbabilities.size( ); ++index ) { + GIDI::GRIN::CaptureLevelProbability const *captureLevelProbability = captureLevelProbabilities.get( 0 ); + + sum += captureLevelProbability->probabilty( ); + m_summedProbabilities.push_back( sum ); + m_captureLevelProbabilities.push_back( new GRIN_captureLevelProbability( a_setupInfo, pops, captureLevelProbability ) ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GRIN_capture::~GRIN_capture( ) { + + for( auto iter = m_captureLevelProbabilities.begin( ); iter != m_captureLevelProbabilities.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void GRIN_capture::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + if( m_residualIndex == a_particleIndex ) m_residualUserIndex = a_userParticleIndex; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void GRIN_capture::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + if( m_residualIntid == a_particleIntid ) m_residualUserIndex = a_userParticleIndex; +} + + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GRIN_capture::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_captureNeutronSeparationEnergy, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_summedProbabilities, a_buffer, a_mode ); + DATA_MEMBER_INT( m_residualIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_residualIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_residualUserIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_residualMass, a_buffer, a_mode ); + + std::size_t vectorSize = m_captureLevelProbabilities.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_captureLevelProbabilities.resize( vectorSize, &a_buffer.m_placement ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( a_buffer.m_placement != nullptr ) { + m_captureLevelProbabilities[vectorIndex] = new(a_buffer.m_placement) GRIN_captureLevelProbability; + a_buffer.incrementPlacement( sizeof( GRIN_captureLevelProbability ) ); } + else { + m_captureLevelProbabilities[vectorIndex] = new GRIN_captureLevelProbability; + } + } } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_captureLevelProbabilities.internalSize( ); + a_buffer.incrementPlacement( sizeof( GRIN_captureLevelProbability ) * vectorSize ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_captureLevelProbabilities[vectorIndex]->serialize( a_buffer, a_mode ); + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_KalbachMann.cc b/source/processes/hadronic/models/lend/src/MCGIDI_KalbachMann.cc deleted file mode 100644 index 5cb75f50a4..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_KalbachMann.cc +++ /dev/null @@ -1,395 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#if defined __cplusplus -#include "G4Exp.hh" -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -#endif -const double C1 = 0.04, C2 = 1.8e-6/*, C3 = 6.7e-7*/; -/* -const double Et1 = 130., Et3 = 41.; -*/ -#if defined __cplusplus -} -#endif - -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - - -static int MCGIDI_KalbachMann_parseFromTOM2( statusMessageReporting *smr, int dataPerEout, int index, xDataTOM_KalbachMannCoefficients *coefficientsXData, - double energyInFactor, double energyOutFactor, MCGIDI_KalbachMann *KalbachMann ); -static double MCGIDI_KalbachMann_S_a_or_b( double Z_AB, double N_AB, double Z_C, double N_C, double I_ab ); -/* -************************************************************ -*/ -MCGIDI_KalbachMann *MCGIDI_KalbachMann_new( statusMessageReporting *smr, ptwXY_interpolation interpolationWY, - ptwXY_interpolation interpolationXY ) { - - MCGIDI_KalbachMann *KalbachMann; - - if( ( KalbachMann = (MCGIDI_KalbachMann *) smr_malloc2( smr, sizeof( MCGIDI_KalbachMann ), 0, "KalbachMann" ) ) == NULL ) return( NULL ); - if( MCGIDI_KalbachMann_initialize( smr, KalbachMann, interpolationWY, interpolationXY ) ) KalbachMann = MCGIDI_KalbachMann_free( smr, KalbachMann ); - return( KalbachMann ); -} -/* -************************************************************ -*/ -int MCGIDI_KalbachMann_initialize( statusMessageReporting * /*smr*/, MCGIDI_KalbachMann *KalbachMann, ptwXY_interpolation interpolationWY, ptwXY_interpolation interpolationXY ) { - - memset( KalbachMann, 0, sizeof( MCGIDI_KalbachMann ) ); - KalbachMann->dists.interpolationWY = interpolationWY; - KalbachMann->dists.interpolationXY = interpolationXY; - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_KalbachMann *MCGIDI_KalbachMann_free( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann ) { - - MCGIDI_KalbachMann_release( smr, KalbachMann ); - smr_freeMemory( (void **) &KalbachMann ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_KalbachMann_release( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann ) { - - int i; - MCGIDI_pdfsOfXGivenW *dists = &(KalbachMann->dists); - - for( i = 0; i < dists->numberOfWs; i++ ) { - smr_freeMemory( (void **) &(KalbachMann->ras[i].rs) ); - smr_freeMemory( (void **) &(dists->dist[i].Xs) ); - } - smr_freeMemory( (void **) &(KalbachMann->ras) ); - smr_freeMemory( (void **) &(dists->Ws) ); - smr_freeMemory( (void **) &(dists->dist) ); - - MCGIDI_KalbachMann_initialize( smr, KalbachMann, ptwXY_interpolationLinLin, ptwXY_interpolationLinLin ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_KalbachMann_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - MCGIDI_KalbachMann *KalbachMann = NULL; - xDataTOM_element *KalbachMannElement; - int index, dataPerEout = 3; - double energyInFactor, energyOutFactor; - xDataTOM_xDataInfo *xDataInfo; - xDataTOM_KalbachMann *KalbachMannXData; - ptwXY_interpolation interpolationXY, interpolationWY; - char const *energyFromUnit, *energyToUnit = "MeV"; - - MCGIDI_POP *productPOP = distribution->product->pop; - double productZ = productPOP->Z, productA = productPOP->A, productN = productA - productZ; - MCGIDI_target_heated *targetHeated = MCGIDI_product_getTargetHeated( smr, distribution->product ); - MCGIDI_POP *projectilePOP = MCGIDI_target_heated_getPOPForProjectile( smr, targetHeated ); - double projectileZ = projectilePOP->Z, projectileA = projectilePOP->A, projectileN = projectileA - projectileZ; - MCGIDI_POP *targetPOP = MCGIDI_target_heated_getPOPForTarget( smr, targetHeated ); - double targetZ = targetPOP->Z, targetA = targetPOP->A, targetN = targetA - targetZ; - double Ia = 0., Ib = 0., Ma = -1, mb = -1; - - if( ( targetA == 0 ) && ( targetZ == 6 ) ) { /* Special case for C_000 evaluation. */ - targetN = 6; - targetA = 12; - } - if( ( KalbachMannElement = xDataTOME_getOneElementByName( smr, element, "KalbachMann", 1 ) ) == NULL ) goto err; - - if( MCGIDI_fromTOM_interpolation( smr, KalbachMannElement, 0, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, KalbachMannElement, 1, &interpolationXY ) ) goto err; - - xDataInfo = &(KalbachMannElement->xDataInfo); - KalbachMannXData = (xDataTOM_KalbachMann *) xDataInfo->data; - if( KalbachMannXData->type == xDataTOM_KalbachMannType_fra ) dataPerEout = 4; - - energyFromUnit = xDataTOM_axes_getUnit( smr, &(xDataInfo->axes), 0 ); - if( !smr_isOk( smr ) ) goto err; - energyInFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyFromUnit, energyToUnit ); - if( !smr_isOk( smr ) ) goto err; - - energyFromUnit = xDataTOM_axes_getUnit( smr, &(xDataInfo->axes), 1 ); - if( !smr_isOk( smr ) ) goto err; - energyOutFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyFromUnit, energyToUnit ); - if( !smr_isOk( smr ) ) goto err; - - if( ( KalbachMann = distribution->KalbachMann = MCGIDI_KalbachMann_new( smr, interpolationWY, interpolationXY ) ) == NULL ) goto err; - -/* - double productMass MCGIDI_product_getMass_MeV( smr, distribution->product ), residualMass; -*/ - KalbachMann->energyToMeVFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyToUnit, "MeV" ); - KalbachMann->massFactor = (double) productZ + productN; /* This is not correct as masses are needed not Z and N. */ - KalbachMann->massFactor /= projectileN + projectileZ + targetZ + targetN - productZ + productN; - KalbachMann->massFactor += 1.; - - if( projectileZ == 0 ) { - if( projectileN == 1 ) Ma = 1; } - else if( projectileZ == 1 ) { - if( projectileN == 1 ) { - Ma = 1; } - else if( projectileN == 2 ) { - Ia = 2.22; - Ma = 1; } } - else if( projectileZ == 2 ) { - if( projectileN == 2 ) { - Ia = 28.3; - Ma = 0; - } - } - - if( productZ == 0 ) { - if( productN == 1 ) mb = 0.5; } - else if( productZ == 1 ) { - if( productN == 1 ) { - mb = 1; } - else if( productN == 2 ) { - Ia = 2.22; - mb = 1; } - else if( productN == 3 ) { - Ib = 8.48; - mb = 1; } } - else if( productZ == 2 ) { - if( productN == 1 ) { - Ib = 7.72; - mb = 1; } - else if( productN == 2 ) { - Ib = 28.3; - mb = 2; - } - } - - KalbachMann->Ma = Ma; - KalbachMann->mb = mb; - - KalbachMann->Sa = MCGIDI_KalbachMann_S_a_or_b( targetZ, targetN, targetZ + projectileZ, targetN + projectileN, Ia ); - KalbachMann->Sb = MCGIDI_KalbachMann_S_a_or_b( projectileZ + targetZ - productZ, projectileN + targetN - productN, - targetZ + projectileZ, targetN + projectileN, Ib ); - - KalbachMann->dists.numberOfWs = 0; - if( ( KalbachMann->dists.Ws = (double *) smr_malloc2( smr, KalbachMannXData->numberOfEnergies * sizeof( double ), 0, "KalbachMann->dists->Ws" ) ) == NULL ) goto err; - if( ( KalbachMann->dists.dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, KalbachMannXData->numberOfEnergies * sizeof( MCGIDI_pdfOfX ), 0, "KalbachMann->dists->dist" ) ) == NULL ) goto err; - if( ( KalbachMann->ras = (MCGIDI_KalbachMann_ras *) smr_malloc2( smr, KalbachMannXData->numberOfEnergies * sizeof( MCGIDI_KalbachMann_ras ), 0, "KalbachMann->ras" ) ) == NULL ) goto err; - - for( index = 0; index < KalbachMannXData->numberOfEnergies; index++ ) { - if( MCGIDI_KalbachMann_parseFromTOM2( smr, dataPerEout, index, &(KalbachMannXData->coefficients[index]), - energyInFactor, energyOutFactor, KalbachMann ) ) goto err; - } - - if( ( KalbachMann->frame = MCGIDI_misc_getProductFrame( smr, KalbachMannElement ) ) == xDataTOM_frame_invalid ) goto err; - distribution->type = MCGIDI_distributionType_KalbachMann_e; - - return( 0 ); - -err: - if( KalbachMann != NULL ) MCGIDI_KalbachMann_free( smr, KalbachMann ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_KalbachMann_parseFromTOM2( statusMessageReporting *smr, int dataPerEout, int index, xDataTOM_KalbachMannCoefficients *coefficientsXData, - double energyInFactor, double energyOutFactor, MCGIDI_KalbachMann *KalbachMann ) { - - int i, j, n = coefficientsXData->length / dataPerEout; - MCGIDI_pdfsOfXGivenW *dists = &(KalbachMann->dists); - MCGIDI_pdfOfX *dist = &(dists->dist[index]); - double norm, *p, *rs = NULL, *as_ = NULL, *Xs = NULL, *pdf, *cdf; - nfu_status status; - ptwXYPoints *pdfXY = NULL; - ptwXYPoint *point; - ptwXPoints *cdfX = NULL; - char const *ptwFunc = ""; - - if( ( Xs = (double *) smr_malloc2( smr, 3 * n * sizeof( double ), 0, "Xs" ) ) == NULL ) goto err; - pdf = &(Xs[n]); - cdf = &(pdf[n]); - - if( ( rs = (double *) smr_malloc2( smr, ( dataPerEout - 2 ) * n * sizeof( double ), 0, "rs" ) ) == NULL ) goto err; - if( dataPerEout == 4 ) as_ = &(rs[n]); - - ptwFunc = "ptwXY_new"; - if( ( pdfXY = ptwXY_new( KalbachMann->dists.interpolationXY, NULL, 2., 1e-3, n, 10, &status, 0 ) ) == NULL ) goto errXY; - - ptwFunc = "ptwXY_setXYPairAtIndex"; - for( i = 0, p = coefficientsXData->coefficients; i < n; i++, p += dataPerEout ) { - if( ( status = ptwXY_setValueAtX( pdfXY, p[0], p[1] ) ) != nfu_Okay ) goto errXY; - rs[i] = p[2]; - if( dataPerEout == 4 ) as_[i] = p[3]; - } - - for( j = 0; j < n; j++ ) { - point = ptwXY_getPointAtIndex_Unsafely( pdfXY, j ); - Xs[j] = energyOutFactor * point->x; - pdf[j] = point->y / energyOutFactor; - } - - ptwFunc = "ptwXY_runningIntegral"; - if( ( cdfX = ptwXY_runningIntegral( pdfXY, &status ) ) == NULL ) goto errXY; - norm = ptwX_getPointAtIndex_Unsafely( cdfX, n - 1 ); - if( std::fabs( 1. - norm ) > 0.99 ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad norm = %e for angular.linear data", norm ); - goto err; - } - for( j = 0; j < n; j++ ) cdf[j] = ptwX_getPointAtIndex_Unsafely( cdfX, j ) / norm; - for( j = 0; j < n; j++ ) pdf[j] /= norm; - - dists->numberOfWs++; - dists->Ws[index] = energyInFactor * coefficientsXData->value; - dist->numberOfXs = n; - dist->Xs = Xs; - dist->pdf = pdf; - dist->cdf = cdf; - KalbachMann->ras[index].rs = rs; - KalbachMann->ras[index].as = as_; - - pdfXY = ptwXY_free( pdfXY ); - cdfX = ptwX_free( cdfX ); - return( 0 ); - -errXY: - smr_setReportError2( smr, smr_unknownID, 1, "%s error = %d: %s\n", ptwFunc, status, nfu_statusMessage( status ) ); - -err: - if( Xs != NULL ) smr_freeMemory( (void **) &Xs); - if( rs != NULL ) smr_freeMemory( (void **) &rs); - if( pdfXY != NULL ) ptwXY_free( pdfXY ); - if( cdfX != NULL ) cdfX = ptwX_free( cdfX ); - return( 1 ); -} -/* -************************************************************ -*/ -static double MCGIDI_KalbachMann_S_a_or_b( double Z_AB, double N_AB, double Z_C, double N_C, double I_ab ) { - - double A_AB = Z_AB + N_AB, A_C = Z_C + N_C; - double invA_AB_third = 1.0 / G4Pow::GetInstance()->A13( A_AB ), invA_C_third = 1.0 / G4Pow::GetInstance()->A13 ( A_C ); - double NZA_AB = ( N_AB - Z_AB ) * ( N_AB - Z_AB ) / A_AB, NZA_C = ( N_C - Z_C ) * ( N_C - Z_C ) / A_C, S; - - S = 15.68 * ( A_C - A_AB ) - 28.07 * ( NZA_C - NZA_AB ) - - 18.56 * ( A_C * invA_C_third - A_AB * invA_AB_third ) + 33.22 * ( NZA_C * invA_C_third - NZA_AB * invA_AB_third ) - - 0.717 * ( Z_C * Z_C * invA_C_third - Z_AB * Z_AB * invA_AB_third ) + 1.211 * ( Z_C * Z_C / A_C - Z_AB * Z_AB / A_AB ) - - I_ab; - return( S ); -} -/* -************************************************************ -*/ -int MCGIDI_KalbachMann_sampleEp( statusMessageReporting *smr, MCGIDI_KalbachMann *KalbachMann, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - double Epl, Epu, Ep, r, r2, rl, ru, a, a2, al, au, mu, randomEp = decaySamplingInfo->rng( decaySamplingInfo->rngState ); - MCGIDI_pdfsOfXGivenW_sampled sampled; - MCGIDI_pdfsOfXGivenW *dists = &(KalbachMann->dists); - ptwXY_interpolation interpolationWY; - - sampled.smr = smr; - sampled.w = modes.getProjectileEnergy( ); - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( dists, &sampled, randomEp ); - - interpolationWY = sampled.interpolationWY; - if( sampled.iW < 0 ) { - interpolationWY = ptwXY_interpolationFlat; - if( sampled.iW == -2 ) { /* ???????????? This should probably report a warning. */ - sampled.iW = 0; } - else if( sampled.iW == -1 ) { - sampled.iW = dists->numberOfWs - 1; - } - } - - Ep = sampled.x; /* Sampled Ep. */ - if( sampled.interpolationXY == ptwXY_interpolationFlat ) { /* Now sample r. */ - r = KalbachMann->ras[sampled.iW].rs[sampled.iX1]; } - else { - Epl = dists->dist[sampled.iW].Xs[sampled.iX1]; - Epu = dists->dist[sampled.iW].Xs[sampled.iX1+1]; - rl = KalbachMann->ras[sampled.iW].rs[sampled.iX1]; - ru = KalbachMann->ras[sampled.iW].rs[sampled.iX1+1]; - r = ( ru - rl ) / ( Epu - Epl ) * ( Ep - Epl ) + rl; - } - if( interpolationWY == ptwXY_interpolationLinLin ) { - if( sampled.interpolationXY == ptwXY_interpolationFlat ) { - r2 = KalbachMann->ras[sampled.iW+1].rs[sampled.iX2]; } - else { - Epl = dists->dist[sampled.iW+1].Xs[sampled.iX2]; - Epu = dists->dist[sampled.iW+1].Xs[sampled.iX2+1]; - rl = KalbachMann->ras[sampled.iW+1].rs[sampled.iX2]; - ru = KalbachMann->ras[sampled.iW+1].rs[sampled.iX2+1]; - r2 = ( ru - rl ) / ( Epu - Epl ) * ( Ep - Epl ) + rl; - } - r = sampled.frac * r + ( 1. - sampled.frac ) * r2; - } - - if( KalbachMann->ras[0].as == NULL ) { /* Now determine a. */ - double X1, X3_2; - double eb = KalbachMann->massFactor * KalbachMann->energyToMeVFactor * Ep + KalbachMann->Sb; - - X1 = eb; /* Not valid for ea > Et1. */ - X3_2 = eb * eb; /* Not valid for ea > Et3. */ - a = X1 * ( C1 + C2 * X1 * X1 ) + C2 * KalbachMann->Ma * KalbachMann->mb * X3_2 * X3_2; } - else { - if( sampled.interpolationXY == ptwXY_interpolationFlat ) { - a = KalbachMann->ras[sampled.iW].as[sampled.iX1]; } - else { - Epl = dists->dist[sampled.iW].Xs[sampled.iX1]; - Epu = dists->dist[sampled.iW].Xs[sampled.iX1+1]; - al = KalbachMann->ras[sampled.iW].as[sampled.iX1]; - au = KalbachMann->ras[sampled.iW].as[sampled.iX1+1]; - a = ( au - al ) / ( Epu - Epl ) * ( Ep - Epl ) + al; - } - a2 = 0.; - if( interpolationWY == ptwXY_interpolationLinLin ) { - if( sampled.interpolationXY == ptwXY_interpolationFlat ) { - a2 = KalbachMann->ras[sampled.iW+1].as[sampled.iX2]; } - else { - Epl = dists->dist[sampled.iW+1].Xs[sampled.iX2]; - Epu = dists->dist[sampled.iW+1].Xs[sampled.iX2+1]; - al = KalbachMann->ras[sampled.iW+1].as[sampled.iX2]; - au = KalbachMann->ras[sampled.iW+1].as[sampled.iX2+1]; - a2 = ( au - al ) / ( Epu - Epl ) * ( Ep - Epl ) + al; - } - } - a = sampled.frac * a + ( 1. - sampled.frac ) * a2; - } - - /* In the following: Cosh[ a mu ] + r Sinh[ a mu ] = ( 1 - r ) Cosh[ a mu ] + r ( Cosh[ a mu ] + Sinh[ a mu ] ). */ - if( decaySamplingInfo->rng( decaySamplingInfo->rngState ) >= r ) { /* Sample the '( 1 - r ) Cosh[ a mu ]' term. */ - double T = ( 2. * decaySamplingInfo->rng( decaySamplingInfo->rngState ) - 1. ) * std::sinh( a ); - - mu = G4Log( T + std::sqrt( T * T + 1. ) ) / a; } - else { /* Sample the 'r ( Cosh[ a mu ] + Sinh[ a mu ]' term. */ - double rng1 = decaySamplingInfo->rng( decaySamplingInfo->rngState ), exp_a = G4Exp( a ); - - mu = G4Log( rng1 * exp_a + ( 1. - rng1 ) / exp_a ) / a; - } - if( mu < -1 ) { - mu = -1;} - else if( mu > 1 ) { - mu = 1; - } - - decaySamplingInfo->frame = KalbachMann->frame; - decaySamplingInfo->Ep = Ep; - decaySamplingInfo->mu = mu; - return( !smr_isOk( smr ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_LLNLAngular_angularEnergy.cc b/source/processes/hadronic/models/lend/src/MCGIDI_LLNLAngular_angularEnergy.cc deleted file mode 100644 index d96d600e8e..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_LLNLAngular_angularEnergy.cc +++ /dev/null @@ -1,153 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "MCGIDI.h" -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_LLNL_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); -static int MCGIDI_LLNL_angularEnergy_parsePointwiseFromTOM( statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution ); -/* -************************************************************ -*/ -int MCGIDI_LLNLAngular_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - xDataTOM_element *angularEnergyElement; - - if( ( angularEnergyElement = xDataTOME_getOneElementByName( smr, element, "LLNLAngular_angularEnergy", 1 ) ) == NULL ) return( 1 ); - - if( MCGIDI_angular_parseFromTOM( smr, angularEnergyElement, distribution, NULL ) ) goto err; - if( MCGIDI_LLNL_angularEnergy_parseFromTOM( smr, angularEnergyElement, distribution ) ) goto err; - - return( 0 ); - -err: - if( distribution->angular ) distribution->angular = MCGIDI_angular_free( smr, distribution->angular ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_LLNL_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - xDataTOM_element *angularEnergyElement, *pointwise = NULL; - char const *nativeData; - - if( ( angularEnergyElement = xDataTOME_getOneElementByName( smr, element, "LLNLAngularEnergy", 1 ) ) == NULL ) goto err; - - if( ( nativeData = xDataTOM_getAttributesValueInElement( angularEnergyElement, "nativeData" ) ) == NULL ) goto err; - if( strcmp( nativeData, "pointwise" ) == 0 ) { - if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "pointwise", 1 ) ) == NULL ) goto err; } - else if( strcmp( nativeData, "linear" ) == 0 ) { - if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "linear", 1 ) ) == NULL ) goto err; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "angularEnergy nativeData = '%s' not supported", nativeData ); - goto err; - } - if( pointwise != NULL ) return( MCGIDI_LLNL_angularEnergy_parsePointwiseFromTOM( smr, pointwise, distribution ) ); - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_LLNL_angularEnergy_parsePointwiseFromTOM( statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution ) { - - int iV = 0, iW; - double y1, norm/*, energyInFactor*/; - char const /*energyUnit,*/ *energyOutProbabilityUnits[2] = { "MeV", "1/MeV" }; - MCGIDI_angularEnergy *angularEnergy = NULL; - ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY; - xDataTOM_XYs *XYs; - xDataTOM_W_XYs *W_XYs; - xDataTOM_V_W_XYs *V_W_XYs; - MCGIDI_pdfsOfXGivenW *pdfOfEpGivenEAndMu = NULL, *pdfOfEpGivenEAndMu2 = NULL; - ptwXYPoints *pdfXY1 = NULL; - nfu_status status; - enum xDataTOM_frame frame; - - if( ( frame = MCGIDI_misc_getProductFrame( smr, pointwise ) ) == xDataTOM_frame_invalid ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 0, &interpolationVY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 1, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 2, &interpolationXY ) ) goto err; - - if( ( V_W_XYs = (xDataTOM_V_W_XYs *) xDataTOME_getXDataIfID( smr, pointwise, "V_W_XYs" ) ) == NULL ) goto err; - /*energyUnit = xDataTOM_subAxes_getUnit( smr, &(V_W_XYs->subAxes), 0 );*/ - if( !smr_isOk( smr ) ) goto err; - /*energyInFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" );*/ - if( !smr_isOk( smr ) ) goto err; - - if( ( pdfOfEpGivenEAndMu = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfsOfXGivenW ), 1, "pdfOfEpGivenEAndMu" ) ) == NULL ) goto err; - for( iV = 0; iV < V_W_XYs->length; iV++ ) { - W_XYs = &(V_W_XYs->W_XYs[iV]); - pdfOfEpGivenEAndMu2 = &(pdfOfEpGivenEAndMu[iV]); - pdfOfEpGivenEAndMu2->Ws = NULL; - pdfOfEpGivenEAndMu2->dist = NULL; - - pdfOfEpGivenEAndMu2->interpolationWY = interpolationWY; - pdfOfEpGivenEAndMu2->interpolationXY = interpolationXY; - if( ( pdfOfEpGivenEAndMu2->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "pdfOfEpGivenEAndMu2->Ws" ) ) == NULL ) goto err; - if( ( pdfOfEpGivenEAndMu2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfEpGivenEAndMu2->dist" ) ) == NULL ) goto err; - - for( iW = 0; iW < W_XYs->length; iW++ ) { - XYs = &(W_XYs->XYs[iW]); - if( ( pdfXY1 = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, energyOutProbabilityUnits ) ) == NULL ) goto err; - y1 = ptwXY_integrateDomain( pdfXY1, &status ); - if( status != nfu_Okay ) goto errA; - - if( y1 == 0 ) { - if( ( status = ptwXY_add_double( pdfXY1, 0.5 ) ) != nfu_Okay ) goto errA; - } - pdfOfEpGivenEAndMu2->Ws[iW] = XYs->value; - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY1, &(pdfOfEpGivenEAndMu2->dist[iW]), &norm ) ) goto err; - pdfOfEpGivenEAndMu2->numberOfWs++; - - pdfXY1 = ptwXY_free( pdfXY1 ); - } - pdfOfEpGivenEAndMu2 = NULL; - } - - if( ( angularEnergy = MCGIDI_angularEnergy_new( smr ) ) == NULL ) goto err; - angularEnergy->frame = frame; - - angularEnergy->pdfOfMuGivenE.numberOfWs = distribution->angular->dists.numberOfWs; - angularEnergy->pdfOfMuGivenE.interpolationWY = distribution->angular->dists.interpolationWY; - angularEnergy->pdfOfMuGivenE.interpolationXY = distribution->angular->dists.interpolationXY; - angularEnergy->pdfOfMuGivenE.Ws = distribution->angular->dists.Ws; - angularEnergy->pdfOfMuGivenE.dist = distribution->angular->dists.dist; - smr_freeMemory( (void **) &(distribution->angular) ); - distribution->angular = NULL; - - angularEnergy->pdfOfEpGivenEAndMu = pdfOfEpGivenEAndMu; - distribution->angularEnergy = angularEnergy; - distribution->type = MCGIDI_distributionType_angularEnergy_e; - - return( 0 ); - -errA: - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_integrateDomain err = %d: %s\n", status, nfu_statusMessage( status ) ); -err: - if( pdfXY1 != NULL ) ptwXY_free( pdfXY1 ); - if( pdfOfEpGivenEAndMu2 != NULL ) MCGIDI_sampling_pdfsOfXGivenW_release( smr, pdfOfEpGivenEAndMu2 ); - if( pdfOfEpGivenEAndMu != NULL ) { - for( ; iV > 0; iV-- ) MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(pdfOfEpGivenEAndMu[iV]) ); - smr_freeMemory( (void **) &pdfOfEpGivenEAndMu ); - } - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_URR.cc b/source/processes/hadronic/models/lend/src/MCGIDI_URR.cc new file mode 100644 index 0000000000..1f415f5836 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_URR.cc @@ -0,0 +1,422 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void URR_protareInfo::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_CAST( m_inURR, a_buffer, a_mode, bool ); + DATA_MEMBER_DOUBLE( m_rng_Value, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * URR_protareInfos constructor. + * + * @param a_protares [in] The list of protares to be check for URR data. Each protare with URR data add to *a_URR_protareInfos*. + ***********************************************************************************************************/ + +LUPI_HOST URR_protareInfos::URR_protareInfos( Vector &a_protares ) { + + setup( a_protares ); +} + +/* *********************************************************************************************************//** + * URR_protareInfos setup. + * + * @param a_protares [in] The list of protares to be check for URR data. Each protare with URR data add to *a_URR_protareInfos*. + ***********************************************************************************************************/ + +LUPI_HOST void URR_protareInfos::setup( Vector &a_protares ) { + + std::vector URR_protareInfo_1; + + for( std::size_t i1 = 0; i1 < a_protares.size( ); ++i1 ) { + Protare *protare = a_protares[i1]; + + for( std::size_t i2 = 0; i2 < protare->numberOfProtares( ); ++i2 ) { + ProtareSingle *protareSingle = const_cast( protare->protare( i2 ) ); + + if( protareSingle->hasURR_probabilityTables( ) ) { + protareSingle->URR_index( URR_protareInfo_1.size( ) ); + URR_protareInfo_1.push_back( URR_protareInfo( ) ); + } + } + } + + m_URR_protareInfos.reserve( URR_protareInfo_1.size( ) ); + m_URR_protareInfos.clear( ); + for( std::size_t i1 = 0; i1 < URR_protareInfo_1.size( ); ++i1 ) m_URR_protareInfos.push_back( URR_protareInfo_1[i1] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void URR_protareInfos::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + std::size_t vectorSize = m_URR_protareInfos.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_URR_protareInfos.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_URR_protareInfos.internalSize(); + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_URR_protareInfos[vectorIndex].serialize( a_buffer, a_mode ); + } +} + +/*! \class ACE_URR_probabilityTable + * Class to store ACE URR probability table at one projectile energy for one type of reaction (e.g., total, elastic). + */ + +/* *********************************************************************************************************//** + * Simple constructor needed for broadcasting. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTable::ACE_URR_probabilityTable( ) : + m_energy( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_energy [in] The projectile energy where the data are specified. + * @param a_propabilities [in] The probability for each cross section. + * @param a_crossSection [in] The cross section for each probability. + ***********************************************************************************************************/ + +LUPI_HOST ACE_URR_probabilityTable::ACE_URR_probabilityTable( double a_energy, std::vector const &a_propabilities, + std::vector const &a_crossSection ) : + m_energy( a_energy ), + m_propabilities( a_propabilities ), + m_crossSections( a_crossSection ) { + + double sum = 0.0; + for( std::size_t index = 0; index < m_propabilities.size( ); ++index ) { + sum += m_propabilities[index]; + m_propabilities[index] = sum; + } + m_propabilities[m_propabilities.size( )-1] = 1.0; +} + +/* *********************************************************************************************************//** + * Simple constructor needed for broadcasting. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTable::~ACE_URR_probabilityTable( ) { + +} + +/* *********************************************************************************************************//** + * Returns the cross section corresponding to the probability *a_rng_Value*. + * + * @param a_rng_Value [in] A random number in the range [0,1). + * + * @return The cross section associated with probability a_rng_Value; + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ACE_URR_probabilityTable::sample( double a_rng_Value ) { + + int index = binarySearchVector( a_rng_Value, m_propabilities, true ); + if( m_propabilities[index] < a_rng_Value ) ++index; + return( m_crossSections[index] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ACE_URR_probabilityTable::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_energy, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_propabilities, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_crossSections, a_buffer, a_mode ); +} + +/*! \class ACE_URR_probabilityTables + * Class to store ACE URR probability tables at a list of projectile energies for one type of reaction (e.g., total, elastic). + */ + +/* *********************************************************************************************************//** + * Simple constructor needed for broadcasting. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTables::ACE_URR_probabilityTables( ) { + +} + +/* *********************************************************************************************************//** + * @param a_capacity [in] The number of energy slots to reverse. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTables::ACE_URR_probabilityTables( std::size_t a_capacity ) { + + m_energies.reserve( a_capacity ); + m_ACE_URR_probabilityTables.reserve( a_capacity ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTables::~ACE_URR_probabilityTables( ) { + + for( auto iter = m_ACE_URR_probabilityTables.begin( ); iter != m_ACE_URR_probabilityTables.end( ); ++iter ) delete (*iter); +} + +/* *********************************************************************************************************//** + * Calls reserve for m_energies and m_ACE_URR_probabilityTables with the value *a_capacity*. + * + * @param a_capacity [in] The size of the space to reserve. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ACE_URR_probabilityTables::reserve( std::size_t a_capacity ) { + + m_energies.reserve( a_capacity ); + m_ACE_URR_probabilityTables.reserve( a_capacity ); +} + +/* *********************************************************************************************************//** + * Adds *a_ACE_URR_probabilityTable* to the end of *this*. + * + * @param a_ACE_URR_probabilityTable [in] **ACE_URR_probabilityTable** instance to add. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ACE_URR_probabilityTables::push_back( ACE_URR_probabilityTable *a_ACE_URR_probabilityTable ) { + + if( m_energies.size( ) == capacity( ) ) LUPI_THROW( "ACE_URR_probabilityTables::addEnergyData: adding too many ACE_URR_probabilityTables." ); + m_energies.push_back( a_ACE_URR_probabilityTable->energy( ) ); + m_ACE_URR_probabilityTables.push_back( a_ACE_URR_probabilityTable ); +} + +/* *********************************************************************************************************//** + * Returns the cross section corresponding to the probability *a_rng_Value*. + * + * @param a_energy [in] The incident projectiles energy. + * @param a_rng_Value [in] A random number in the range [0,1). + * + * @return The cross section associated with probability a_rng_Value; + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ACE_URR_probabilityTables::sample( double a_energy, double a_rng_Value ) { + + int index = binarySearchVector( a_energy, m_energies, true ); + + std::size_t index_t = (std::size_t) index; + if( index_t < m_energies.size( ) - 1 ) { + if( 0.5 * ( m_energies[index_t] + m_energies[index_t+1] ) < a_energy ) ++index_t; // Find closest energy. + } + + return( m_ACE_URR_probabilityTables[index_t]->sample( a_rng_Value ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ACE_URR_probabilityTables::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + + std::size_t vectorSize = m_energies.size( ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_ACE_URR_probabilityTables.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_ACE_URR_probabilityTables.internalSize( ); + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + ACE_URR_probabilityTable *ACE_URR_probabilityTable1 = m_ACE_URR_probabilityTables[vectorIndex]; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + ACE_URR_probabilityTable1 = new(a_buffer.m_placement) ACE_URR_probabilityTable; + a_buffer.incrementPlacement( sizeof( ACE_URR_probabilityTable ) ); } + else { + ACE_URR_probabilityTable1 = new ACE_URR_probabilityTable; + } + m_ACE_URR_probabilityTables[vectorIndex] = ACE_URR_probabilityTable1; + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( ACE_URR_probabilityTable ) ); + } + ACE_URR_probabilityTable1->serialize( a_buffer, a_mode ); + } +} + +/* *********************************************************************************************************//** + * This method serializes a **ACE_URR_probabilityTables** instance pointed to by *a_ACE_URR_probabilityTables*. + * + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * + * @return A pointer to the converted **ACE_URR_probabilityTables** instance. + ***********************************************************************************************************/ + +LUPI_HOST void convertACE_URR_probabilityTablesFromGIDI( GIDI::ProtareSingle const &a_protare, Transporting::MC &a_settings, SetupInfo &a_setupInfo ) { + + if( ( a_settings.crossSectionLookupMode( ) == Transporting::LookupMode::Data1d::continuousEnergy ) + && ( a_settings._URR_mode( ) == Transporting::URR_mode::ACE_URR_probabilityTables ) ) { + + int64_t numberConverted; + char *endCharacter; + + for( auto iter = a_protare.ACE_URR_probabilityTables( ).begin( ); iter != a_protare.ACE_URR_probabilityTables( ).end( ); ++iter ) { + bool needToInitialize( true ); + std::map columnNames; + ACE_URR_probabilityTablesFromGIDI *ACE_URR_probabilityTablesFromGIDI1 = new ACE_URR_probabilityTablesFromGIDI( ); + GIDI::ACE_URR::ProbabilityTable *form = dynamic_cast( *iter ); + GIDI::ACE_URR::ProbabilityTable::Forms &incidentEnergies = form->forms( ); + + for( auto incidentEnergyIter = incidentEnergies.begin( ); incidentEnergyIter != incidentEnergies.end( ); ++incidentEnergyIter ) { + GIDI::ACE_URR::IncidentEnergy *incidentEnergy = *incidentEnergyIter; + GIDI::Table::Table const &table = incidentEnergy->table( ); + int numberOfRows = table.rows( ); + int numberOfColumns = table.columns( ); + + int columnIndex = 0; + for( auto columnHeaderIter = table.columnHeaders( ).begin( ); columnHeaderIter != table.columnHeaders( ).end( ); ++columnHeaderIter ) { + GIDI::Table::Column const *columnHeader = dynamic_cast( *columnHeaderIter ); + if( needToInitialize && columnIndex > 0 ) { + ACE_URR_probabilityTablesFromGIDI1->m_ACE_URR_probabilityTables[columnHeader->name( )] = + new ACE_URR_probabilityTables( incidentEnergies.size( ) ); + columnNames[columnIndex] = columnHeader->name( ); + } + ++columnIndex; + } + needToInitialize = false; + + GIDI::Table::Data const &data = table.data( ); + + std::string const &body = data.body( ); + char const *text = body.c_str( ); + double *dValues = nfu_stringToListOfDoubles( NULL, text, data.sep( ).c_str( )[0], &numberConverted, &endCharacter, 0 ); + if( dValues == nullptr ) throw GIDI::Exception( "convertACE_URR_probabilityTablesFromGIDI: nfu_stringToListOfDoubles failed." ); + + std::vector > columns( numberOfColumns ); + for( columnIndex = 0; columnIndex < numberOfColumns; ++columnIndex ) { + columns[columnIndex].reserve( numberOfRows ); + for( int rowIndex = 0; rowIndex < numberOfRows; ++rowIndex ) columns[columnIndex].push_back( dValues[rowIndex*numberOfColumns+columnIndex] ); + } + free( dValues ); + + for( columnIndex = 1; columnIndex < numberOfColumns; ++columnIndex ) { + ACE_URR_probabilityTablesFromGIDI1->m_ACE_URR_probabilityTables[columnNames[columnIndex]]->push_back( + new ACE_URR_probabilityTable( incidentEnergy->value( ), columns[0], columns[columnIndex] ) ); + } + } + a_setupInfo.m_ACE_URR_probabilityTablesFromGIDI[form->label()] = ACE_URR_probabilityTablesFromGIDI1; + } + } +} + +/* *********************************************************************************************************//** + * This method serializes a **Transporting::URR_mode** value. + * + * @param a_URR_mode [in] The inputted Transporting::URR_mode value. + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + * + * @return The Transporting::URR_mode value. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Transporting::URR_mode serializeURR_mode( Transporting::URR_mode a_URR_mode, LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int type = 0; + switch( a_URR_mode ) { + case Transporting::URR_mode::none : + break; + case Transporting::URR_mode::pdfs : + type = 1; + break; + case Transporting::URR_mode::ACE_URR_probabilityTables : + type = 2; + break; + } + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( type == 0 ) return( Transporting::URR_mode::none ); + if( type == 1 ) return( Transporting::URR_mode::pdfs ); + return( Transporting::URR_mode::ACE_URR_probabilityTables ); +} + +/* *********************************************************************************************************//** + * This method serializes a **ACE_URR_probabilityTables** instance pointed to by *a_ACE_URR_probabilityTables*. + * + * @param a_ACE_URR_probabilityTables [in] Specifies the action of this method. + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + * + * @return A pointer to the serialized **ACE_URR_probabilityTables** instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ACE_URR_probabilityTables *serializeACE_URR_probabilityTables( ACE_URR_probabilityTables *a_ACE_URR_probabilityTables, + LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int type = 0; + if( a_ACE_URR_probabilityTables != nullptr ) type = 1; + DATA_MEMBER_INT( type, a_buffer, a_mode ); + if( type == 0 ) return( nullptr ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + a_ACE_URR_probabilityTables = new(a_buffer.m_placement) ACE_URR_probabilityTables; + a_buffer.incrementPlacement( sizeof( ACE_URR_probabilityTables ) ); } + else { + a_ACE_URR_probabilityTables = new ACE_URR_probabilityTables; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.incrementPlacement( sizeof( ACE_URR_probabilityTables ) ); + + a_ACE_URR_probabilityTables->serialize( a_buffer, a_mode ); + + return( a_ACE_URR_probabilityTables ); +} + +/*! \class ACE_URR_probabilityTablesFromGIDI + * Class to store temporary ACE URR probability table data. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST ACE_URR_probabilityTablesFromGIDI::ACE_URR_probabilityTablesFromGIDI( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST ACE_URR_probabilityTablesFromGIDI::~ACE_URR_probabilityTablesFromGIDI( ) { + + for( auto iter = m_ACE_URR_probabilityTables.begin( ); iter != m_ACE_URR_probabilityTables.end( ); ++iter ) delete (*iter).second; + +} + +} // End namespace MCGIDI. diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_angular.cc b/source/processes/hadronic/models/lend/src/MCGIDI_angular.cc deleted file mode 100644 index f36fede30a..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_angular.cc +++ /dev/null @@ -1,210 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -MCGIDI_angular *MCGIDI_angular_new( statusMessageReporting *smr ) { - - MCGIDI_angular *angular; - - if( ( angular = (MCGIDI_angular *) smr_malloc2( smr, sizeof( MCGIDI_angular ), 0, "angular" ) ) == NULL ) return( NULL ); - if( MCGIDI_angular_initialize( smr, angular ) ) angular = MCGIDI_angular_free( smr, angular ); - return( angular ); -} -/* -************************************************************ -*/ -int MCGIDI_angular_initialize( statusMessageReporting * /*smr*/, MCGIDI_angular *angular ) { - - memset( angular, 0, sizeof( MCGIDI_angular ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_angular *MCGIDI_angular_free( statusMessageReporting *smr, MCGIDI_angular *angular ) { - - MCGIDI_angular_release( smr, angular ); - smr_freeMemory( (void **) &angular ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_angular_release( statusMessageReporting *smr, MCGIDI_angular *angular ) { - - - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(angular->dists) ); - - MCGIDI_angular_initialize( smr, angular ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_angular_setTwoBodyMasses( statusMessageReporting * /*smr*/, MCGIDI_angular *angular, double projectileMass_MeV, double targetMass_MeV, - double productMass_MeV, double residualMass_MeV ) { - - if( angular == NULL ) return( 0 ); /* ???????? This needs work. Happens when first product of a two-body reaction as no distribution. */ - angular->projectileMass_MeV = projectileMass_MeV; - angular->targetMass_MeV = targetMass_MeV; - angular->productMass_MeV = productMass_MeV; - angular->residualMass_MeV = residualMass_MeV; - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_angular_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms ) { - - MCGIDI_angular *angular = NULL; - xDataTOM_element *angularElement, *linearElement, *frameElement = NULL; - char const *nativeData; - ptwXYPoints *pdfXY = NULL; - ptwXPoints *cdfX = NULL; - ptwXY_interpolation interpolationXY, interpolationWY; - - if( ( angularElement = xDataTOME_getOneElementByName( smr, element, "angular", 1 ) ) == NULL ) goto err; - if( ( angular = MCGIDI_angular_new( smr ) ) == NULL ) goto err; - - if( ( nativeData = xDataTOM_getAttributesValueInElement( angularElement, "nativeData" ) ) == NULL ) goto err; - if( strcmp( nativeData, "isotropic" ) == 0 ) { - if( ( frameElement = xDataTOME_getOneElementByName( smr, angularElement, "isotropic", 1 ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "angular type missing for nativeData = '%s'", nativeData ); - goto err; - } - angular->type = MCGIDI_angularType_isotropic; } - else if( strcmp( nativeData, "recoil" ) == 0 ) { /* BRB. Needs work to get referenced product data?????? */ - angular->type = MCGIDI_angularType_recoil; } - else { - int i, j, n; - double norm, energyFactor; - nfu_status status; - xDataTOM_XYs *XYs; - xDataTOM_W_XYs *W_XYs; - ptwXYPoint *point; - MCGIDI_pdfsOfXGivenW *dists = &(angular->dists); - MCGIDI_pdfOfX *dist; - char const *energyUnit, *multiplicityProbabilityUnits[2] = { "", "" }; - - if( ( linearElement = xDataTOME_getOneElementByName( NULL, angularElement, "linear", 0 ) ) == NULL ) { - if( ( linearElement = xDataTOME_getOneElementByName( smr, angularElement, "pointwise", 1 ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "unsupported angular type: nativeData = '%s'", nativeData ); - goto err; - } - } - frameElement = linearElement; - - if( MCGIDI_fromTOM_interpolation( smr, linearElement, 0, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, linearElement, 1, &interpolationXY ) ) goto err; - dists->interpolationWY = interpolationWY; - dists->interpolationXY = interpolationXY; - - if( ( W_XYs = (xDataTOM_W_XYs *) xDataTOME_getXDataIfID( smr, linearElement, "W_XYs" ) ) == NULL ) goto err; - if( ( dists->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "dists->Ws" ) ) == NULL ) goto err; - if( ( dists->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "dists->dist" ) ) == NULL ) goto err; - - energyUnit = xDataTOM_subAxes_getUnit( smr, &(W_XYs->subAxes), 0 ); - if( !smr_isOk( smr ) ) goto err; - energyFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" ); - if( !smr_isOk( smr ) ) goto err; - - for( i = 0; i < W_XYs->length; i++ ) { - XYs = &(W_XYs->XYs[i]); - dist = &(dists->dist[i]); - dists->Ws[i] = XYs->value * energyFactor; - if( ( pdfXY = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, multiplicityProbabilityUnits ) ) == NULL ) goto err; - if( ptwXY_simpleCoalescePoints( pdfXY ) != nfu_Okay ) goto err; - dist->numberOfXs = n = (int) ptwXY_length( pdfXY ); - - if( ( dist->Xs = (double *) smr_malloc2( smr, 3 * n * sizeof( double ), 0, "dist->Xs" ) ) == NULL ) goto err; - dists->numberOfWs++; - dist->pdf = &(dist->Xs[n]); - dist->cdf = &(dist->pdf[n]); - - for( j = 0; j < n; j++ ) { - point = ptwXY_getPointAtIndex_Unsafely( pdfXY, j ); - dist->Xs[j] = point->x; - dist->pdf[j] = point->y; - } - - if( ( cdfX = ptwXY_runningIntegral( pdfXY, &status ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_runningIntegral err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - norm = ptwX_getPointAtIndex_Unsafely( cdfX, n - 1 ); - if( norms != NULL ) { - ptwXY_setValueAtX( norms, XYs->value, norm ); } - else if( std::fabs( 1. - norm ) > 0.99 ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad norm = %e for angular.linear data", norm ); - goto err; - } - for( j = 0; j < n; j++ ) dist->cdf[j] = ptwX_getPointAtIndex_Unsafely( cdfX, j ) / norm; - for( j = 0; j < n; j++ ) dist->pdf[j] /= norm; - pdfXY = ptwXY_free( pdfXY ); - cdfX = ptwX_free( cdfX ); - } - angular->type = MCGIDI_angularType_linear; - } - - if( frameElement != NULL ) { - if( ( angular->frame = MCGIDI_misc_getProductFrame( smr, frameElement ) ) == xDataTOM_frame_invalid ) goto err; - } - - distribution->angular = angular; - distribution->type = MCGIDI_distributionType_angular_e; - - return( 0 ); - -err: - if( pdfXY != NULL ) ptwXY_free( pdfXY ); - if( cdfX != NULL ) cdfX = ptwX_free( cdfX ); - if ( angular != NULL ) MCGIDI_angular_free( smr, angular ); - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_angular_sampleMu( statusMessageReporting *smr, MCGIDI_angular *angular, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - double randomMu = decaySamplingInfo->rng( decaySamplingInfo->rngState ); - MCGIDI_pdfsOfXGivenW_sampled sampled; - - switch( angular->type ) { - case MCGIDI_angularType_isotropic : - decaySamplingInfo->frame = angular->frame; - decaySamplingInfo->mu = 1. - 2. * decaySamplingInfo->rng( decaySamplingInfo->rngState ); - break; - case MCGIDI_angularType_linear : - decaySamplingInfo->frame = angular->frame; - sampled.smr = smr; - sampled.w = modes.getProjectileEnergy( ); - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( &(angular->dists), &sampled, randomMu ); - decaySamplingInfo->mu = sampled.x; - break; - case MCGIDI_angularType_recoil : - default : - smr_setReportError2( smr, smr_unknownID, 1, "angular type = %d not supported", angular->type ); - } - return( !smr_isOk( smr ) ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_angularEnergy.cc b/source/processes/hadronic/models/lend/src/MCGIDI_angularEnergy.cc deleted file mode 100644 index a51b66d360..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_angularEnergy.cc +++ /dev/null @@ -1,186 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "MCGIDI.h" -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_angularEnergy_parsePointwiseFromTOM( statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution ); -/* -************************************************************ -*/ -MCGIDI_angularEnergy *MCGIDI_angularEnergy_new( statusMessageReporting *smr ) { - - MCGIDI_angularEnergy *angularEnergy; - - if( ( angularEnergy = (MCGIDI_angularEnergy *) smr_malloc2( smr, sizeof( MCGIDI_angularEnergy ), 0, "angularEnergy" ) ) == NULL ) return( NULL ); - if( MCGIDI_angularEnergy_initialize( smr, angularEnergy ) ) angularEnergy = MCGIDI_angularEnergy_free( smr, angularEnergy ); - return( angularEnergy ); -} -/* -************************************************************ -*/ -int MCGIDI_angularEnergy_initialize( statusMessageReporting * /*smr*/, MCGIDI_angularEnergy *angularEnergy ) { - - memset( angularEnergy, 0, sizeof( MCGIDI_angularEnergy ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_angularEnergy *MCGIDI_angularEnergy_free( statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy ) { - - MCGIDI_angularEnergy_release( smr, angularEnergy ); - smr_freeMemory( (void **) &angularEnergy ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_angularEnergy_release( statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy ) { - - int i; - - for( i = 0; i < angularEnergy->pdfOfMuGivenE.numberOfWs; i++ ) { - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(angularEnergy->pdfOfEpGivenEAndMu[i]) ); - } - smr_freeMemory( (void **) &(angularEnergy->pdfOfEpGivenEAndMu) ); - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(angularEnergy->pdfOfMuGivenE) ); - MCGIDI_angularEnergy_initialize( smr, angularEnergy ); - - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_angularEnergy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - xDataTOM_element *angularEnergyElement, *pointwise = NULL; - char const *nativeData; - - if( ( angularEnergyElement = xDataTOME_getOneElementByName( smr, element, "angularEnergy", 1 ) ) == NULL ) goto err; - - if( ( nativeData = xDataTOM_getAttributesValueInElement( angularEnergyElement, "nativeData" ) ) == NULL ) goto err; - if( strcmp( nativeData, "pointwise" ) == 0 ) { - if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "pointwise", 1 ) ) == NULL ) goto err; } - else if( strcmp( nativeData, "linear" ) == 0 ) { - if( ( pointwise = xDataTOME_getOneElementByName( smr, angularEnergyElement, "linear", 1 ) ) == NULL ) goto err; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "angularEnergy nativeData = '%s' not supported", nativeData ); - goto err; - } - if( pointwise != NULL ) return( MCGIDI_angularEnergy_parsePointwiseFromTOM( smr, pointwise, distribution ) ); - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_angularEnergy_parsePointwiseFromTOM( statusMessageReporting *smr, xDataTOM_element *pointwise, MCGIDI_distribution *distribution ) { - - int iV, iW; - double y, norm, energyInFactor; - char const *energyUnit, *energyOutProbabilityUnits[2] = { "MeV", "1/MeV" }; - MCGIDI_angularEnergy *angularEnergy = NULL; - ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY; - xDataTOM_XYs *XYs; - xDataTOM_W_XYs *W_XYs; - xDataTOM_V_W_XYs *V_W_XYs; - MCGIDI_pdfsOfXGivenW *pdfOfMuGivenE, *pdfOfEpGivenEAndMu = NULL, *pdfOfEpGivenEAndMu2 = NULL; - ptwXYPoints *pdfXY1 = NULL, *pdfXY2 = NULL; - nfu_status status; - - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 0, &interpolationVY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 1, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, pointwise, 2, &interpolationXY ) ) goto err; - if( ( angularEnergy = MCGIDI_angularEnergy_new( smr ) ) == NULL ) goto err; - - if( ( angularEnergy->frame = MCGIDI_misc_getProductFrame( smr, pointwise ) ) == xDataTOM_frame_invalid ) goto err; - - pdfOfMuGivenE = &(angularEnergy->pdfOfMuGivenE); - pdfOfMuGivenE->interpolationWY = interpolationVY; - pdfOfMuGivenE->interpolationXY = interpolationWY; - - if( ( V_W_XYs = (xDataTOM_V_W_XYs *) xDataTOME_getXDataIfID( smr, pointwise, "V_W_XYs" ) ) == NULL ) goto err; - if( ( pdfOfMuGivenE->Ws = (double *) smr_malloc2( smr, V_W_XYs->length * sizeof( double ), 1, "pdfOfMuGivenE->Ws" ) ) == NULL ) goto err; - if( ( pdfOfMuGivenE->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfMuGivenE->dist" ) ) == NULL ) goto err; - if( ( pdfOfEpGivenEAndMu = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfsOfXGivenW ), 1, "pdfOfEpGivenEAndMu" ) ) == NULL ) goto err; - - energyUnit = xDataTOM_subAxes_getUnit( smr, &(V_W_XYs->subAxes), 0 ); - if( !smr_isOk( smr ) ) goto err; - energyInFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" ); - if( !smr_isOk( smr ) ) goto err; - - for( iV = 0; iV < V_W_XYs->length; iV++ ) { - W_XYs = &(V_W_XYs->W_XYs[iV]); - pdfOfEpGivenEAndMu2 = &(pdfOfEpGivenEAndMu[iV]); - pdfOfEpGivenEAndMu2->interpolationWY = interpolationWY; - pdfOfEpGivenEAndMu2->interpolationXY = interpolationXY; - if( ( pdfXY2 = ptwXY_new( interpolationWY, NULL, 2., 1e-6, W_XYs->length, 10, &status, 0 ) ) == NULL ) goto errA; - if( ( pdfOfEpGivenEAndMu2->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "pdfOfEpGivenEAndMu2->Ws" ) ) == NULL ) goto err; - if( ( pdfOfEpGivenEAndMu2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfEpGivenEAndMu2->dist" ) ) == NULL ) goto err; - for( iW = 0; iW < W_XYs->length; iW++ ) { - XYs = &(W_XYs->XYs[iW]); - if( ( pdfXY1 = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, energyOutProbabilityUnits ) ) == NULL ) goto err; - y = ptwXY_integrateDomain( pdfXY1, &status ); - if( ( status = ptwXY_setValueAtX( pdfXY2, XYs->value, y ) ) != nfu_Okay ) goto errA; - - if( y == 0 ) { - if( ( status = ptwXY_add_double( pdfXY1, 0.5 ) ) != nfu_Okay ) goto errA; - } - pdfOfEpGivenEAndMu2->Ws[iW] = XYs->value; - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY1, &(pdfOfEpGivenEAndMu2->dist[iW]), &norm ) ) goto err; - pdfOfEpGivenEAndMu2->numberOfWs++; - - pdfXY1 = ptwXY_free( pdfXY1 ); - } - pdfOfMuGivenE->Ws[iV] = energyInFactor * W_XYs->value; - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY2, &(pdfOfMuGivenE->dist[iV]), &norm ) ) goto err; - pdfOfMuGivenE->numberOfWs++; - - pdfXY2 = ptwXY_free( pdfXY2 ); - } - - angularEnergy->pdfOfEpGivenEAndMu = pdfOfEpGivenEAndMu; - distribution->angularEnergy = angularEnergy; - distribution->type = MCGIDI_distributionType_angularEnergy_e; - - return( 0 ); - -errA: - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_integrateDomain err = %d: %s\n", status, nfu_statusMessage( status ) ); -err: - if( pdfXY1 != NULL ) ptwXY_free( pdfXY1 ); - if( pdfXY2 != NULL ) ptwXY_free( pdfXY2 ); -/* Need to free pdfOfEpGivenEAndMu. */ - if( angularEnergy != NULL ) MCGIDI_angularEnergy_free( smr, angularEnergy ); - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_angularEnergy_sampleDistribution( statusMessageReporting *smr, MCGIDI_angularEnergy *angularEnergy, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - int status = MCGIDI_sampling_doubleDistribution( smr, &(angularEnergy->pdfOfMuGivenE), angularEnergy->pdfOfEpGivenEAndMu, modes, decaySamplingInfo ); - - decaySamplingInfo->frame = angularEnergy->frame; - return( status ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_delayedNeutron.cc b/source/processes/hadronic/models/lend/src/MCGIDI_delayedNeutron.cc new file mode 100644 index 0000000000..46e1e7d851 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_delayedNeutron.cc @@ -0,0 +1,93 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/*! \class DelayedNeutron + * This class represents a **GNDS** <**DelayedNeutron**> node. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DelayedNeutron::DelayedNeutron( ) : + m_delayedNeutronIndex( -1 ), + m_rate( 0.0 ), + m_product( ) { + +} + +/* *********************************************************************************************************//** + * @param a_index [in] Fix me. + * @param a_delayedNeutron [in] The GIDI::DelayedNeutron whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + ***********************************************************************************************************/ + +LUPI_HOST DelayedNeutron::DelayedNeutron( int a_index, GIDI::DelayedNeutron const *a_delayedNeutron, SetupInfo &a_setupInfo, + Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles ) : + m_delayedNeutronIndex( a_index ), + m_rate( 0.0 ), + m_product( &a_delayedNeutron->product( ), a_setupInfo, a_settings, a_particles, false ) { + + GIDI::PhysicalQuantity const *rate = a_delayedNeutron->rate( ).get( 0 ); + m_rate = rate->value( ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DelayedNeutron::~DelayedNeutron( ) { + +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void DelayedNeutron::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + m_product.setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIndex [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void DelayedNeutron::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + m_product.setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void DelayedNeutron::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_delayedNeutronIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_rate, a_buffer, a_mode ); + m_product.serialize( a_buffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_distribution.cc b/source/processes/hadronic/models/lend/src/MCGIDI_distribution.cc deleted file mode 100644 index 0f5efaa050..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_distribution.cc +++ /dev/null @@ -1,124 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#include "MCGIDI.h" -#include "MCGIDI_misc.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -MCGIDI_distribution *MCGIDI_distribution_new( statusMessageReporting *smr ) { - - MCGIDI_distribution *distribution; - - if( ( distribution = (MCGIDI_distribution *) smr_malloc2( smr, sizeof( MCGIDI_distribution ), 0, "distribution" ) ) == NULL ) return( NULL ); - if( MCGIDI_distribution_initialize( smr, distribution ) ) distribution = MCGIDI_distribution_free( smr, distribution ); - return( distribution ); -} -/* -************************************************************ -*/ -int MCGIDI_distribution_initialize( statusMessageReporting * /*smr*/, MCGIDI_distribution *distribution ) { - - memset( distribution, 0, sizeof( MCGIDI_distribution ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_distribution *MCGIDI_distribution_free( statusMessageReporting *smr, MCGIDI_distribution *distribution ) { - - MCGIDI_distribution_release( smr, distribution ); - smr_freeMemory( (void **) &distribution ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_distribution_release( statusMessageReporting *smr, MCGIDI_distribution *distribution ) { - - if( distribution->angular ) distribution->angular = MCGIDI_angular_free( smr, distribution->angular ); - if( distribution->energy ) distribution->energy = MCGIDI_energy_free( smr, distribution->energy ); - if( distribution->KalbachMann ) distribution->KalbachMann = MCGIDI_KalbachMann_free( smr, distribution->KalbachMann ); - if( distribution->energyAngular ) distribution->energyAngular = MCGIDI_energyAngular_free( smr, distribution->energyAngular ); - if( distribution->angularEnergy ) distribution->angularEnergy = MCGIDI_angularEnergy_free( smr, distribution->angularEnergy ); - - MCGIDI_distribution_initialize( smr, distribution ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_distribution_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product, MCGIDI_POPs * /*pops*/, ptwXYPoints *norms ) { - - char const *nativeData, *gammaEnergy; - double gammaEnergy_MeV{0.0}; - MCGIDI_distribution *distribution = &(product->distribution); - xDataTOM_element *distributionElement; - enum MCGIDI_energyType energyType = MCGIDI_energyType_unknown; - - MCGIDI_distribution_initialize( smr, distribution ); - - distribution->product = product; - if( ( distributionElement = xDataTOME_getOneElementByName( smr, element, "distributions", 1 ) ) == NULL ) goto err; - if( ( nativeData = xDataTOM_getAttributesValueInElement( distributionElement, "nativeData" ) ) == NULL ) goto err; - - if( strcmp( product->pop->name, "gamma" ) == 0 ) { - if( ( gammaEnergy = xDataTOM_getAttributesValueInElement( element, "discrete" ) ) != NULL ) { - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, gammaEnergy, "MeV", &gammaEnergy_MeV ) ) goto err; - energyType = MCGIDI_energyType_discreteGamma; } - else if( ( gammaEnergy = xDataTOM_getAttributesValueInElement( element, "primary" ) ) != NULL ) { - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, gammaEnergy, "MeV", &gammaEnergy_MeV ) ) goto err; - energyType = MCGIDI_energyType_primaryGamma; - } - if( gammaEnergy != NULL ) { - if( strcmp( nativeData, "angular" ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "%s gamma can only have a distribution with 'nativeData' = 'angular' and not '%s'", - gammaEnergy, nativeData ); - goto err; - } - nativeData = "uncorrelated"; - } - } - - if( strcmp( nativeData, "angular" ) == 0 ) { - if( MCGIDI_angular_parseFromTOM( smr, distributionElement, distribution, norms ) ) goto err; } - else if( strcmp( nativeData, "uncorrelated" ) == 0 ) { - if( MCGIDI_uncorrelated_parseFromTOM( smr, distributionElement, distribution, norms, energyType, gammaEnergy_MeV ) ) goto err; } - else if( strcmp( nativeData, "energyAngular" ) == 0 ) { - if( MCGIDI_energyAngular_parseFromTOM( smr, distributionElement, distribution ) ) goto err; } - else if( strcmp( nativeData, "angularEnergy" ) == 0 ) { - if( MCGIDI_angularEnergy_parseFromTOM( smr, distributionElement, distribution ) ) goto err; } - else if( strcmp( nativeData, "Legendre" ) == 0 ) { - if( MCGIDI_energyAngular_parseFromTOM( smr, distributionElement, distribution ) ) goto err; } - else if( strcmp( nativeData, "LLNLAngular_angularEnergy" ) == 0 ) { - if( MCGIDI_LLNLAngular_angularEnergy_parseFromTOM( smr, distributionElement, distribution ) ) goto err; } - else if( strcmp( nativeData, "none" ) == 0 ) { - distribution->type = MCGIDI_distributionType_none_e; } - else if( strcmp( nativeData, "unknown" ) == 0 ) { - distribution->type = MCGIDI_distributionType_unknown_e; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "Unsupported distribution = '%s'\n", nativeData ); - goto err; - } - - return( 0 ); - -err: - MCGIDI_distribution_release( smr, distribution ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_distributions.cc b/source/processes/hadronic/models/lend/src/MCGIDI_distributions.cc new file mode 100644 index 0000000000..12eb707bf4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_distributions.cc @@ -0,0 +1,1756 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +namespace Distributions { + +LUPI_HOST_DEVICE static double coherentPhotoAtomicScatteringIntegrateSub( int a_n, double a_a, double a_logX, double a_energy1, double a_y1, double a_energy2, double a_y2 ); +static LUPI_HOST Distribution *parseGIDI2( GIDI::Distributions::Distribution const &a_GIDI_distribution, SetupInfo &a_setupInfo, + Transporting::MC const &a_settings ); + +/*! \class Distribution + * This class is the base class for all distribution forms. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Distribution::Distribution( ) : + m_type( Type::none ), + m_productFrame( GIDI::Frame::lab ), + m_projectileMass( 0.0 ), + m_targetMass( 0.0 ), + m_productMass( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_type [in] The Type of the distribution. + * @param a_distribution [in] The GIDI::Distributions::Distribution instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST Distribution::Distribution( Type a_type, GIDI::Distributions::Distribution const &a_distribution, SetupInfo &a_setupInfo ) : + m_type( a_type ), + m_productFrame( a_distribution.productFrame( ) ), + m_projectileMass( a_setupInfo.m_protare.projectileMass( ) ), + m_targetMass( a_setupInfo.m_protare.targetMass( ) ), + m_productMass( a_setupInfo.m_product1Mass ) { // Includes nuclear excitation energy. + +} + +/* *********************************************************************************************************//** + * @param a_type [in] The Type of the distribution. + * @param a_productFrame [in] The frame of the product's data for distribution. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST Distribution::Distribution( Type a_type, GIDI::Frame a_productFrame, SetupInfo &a_setupInfo ) : + m_type( a_type ), + m_productFrame( a_productFrame ), + m_projectileMass( a_setupInfo.m_protare.projectileMass( ) ), + m_targetMass( a_setupInfo.m_protare.targetMass( ) ), + m_productMass( a_setupInfo.m_product1Mass ) { // Includes nuclear excitation energy. + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Distribution::~Distribution( ) { + +} + +/* *********************************************************************************************************//** + * This method calls the **setModelDBRC_data2* method if the distribution is AngularTwoBody, otherwise it * executes a thrwo. + * + * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode. + ***********************************************************************************************************/ + +LUPI_HOST void Distribution::setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ) { + + if( type( ) != Type::angularTwoBody ) throw std::runtime_error( "Setting ModelDBRC_data for non-two body distribution is not allowed." ); + + static_cast( this )->setModelDBRC_data2( a_modelDBRC_data ); +} + + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Distribution::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int distributionType = distributionTypeToInt( m_type ); + DATA_MEMBER_INT( distributionType, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_type = intToDistributionType( distributionType ); + + int frame = 0; + if( m_productFrame == GIDI::Frame::centerOfMass ) frame = 1; + DATA_MEMBER_INT( frame, a_buffer, a_mode ); + m_productFrame = GIDI::Frame::lab; + if( frame == 1 ) m_productFrame = GIDI::Frame::centerOfMass; + + DATA_MEMBER_DOUBLE( m_projectileMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_productMass, a_buffer, a_mode ); +} + +/*! \class AngularTwoBody + * This class represents the distribution for an outgoing product for a two-body interaction. + */ + +/* *********************************************************************************************************//** + * Base contructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE AngularTwoBody::AngularTwoBody( ) : + m_residualMass( 0.0 ), + m_Q( 0.0 ), + m_twoBodyThreshold( 0.0 ), + m_Upscatter( false ), + m_angular( nullptr ), + m_modelDBRC_data( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_angularTwoBody [in] The GIDI::Distributions::AngularTwoBody instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST AngularTwoBody::AngularTwoBody( GIDI::Distributions::AngularTwoBody const &a_angularTwoBody, SetupInfo &a_setupInfo ) : + Distribution( Type::angularTwoBody, a_angularTwoBody, a_setupInfo ), + m_residualMass( a_setupInfo.m_product2Mass ), // Includes nuclear excitation energy. + m_Q( a_setupInfo.m_Q ), + m_twoBodyThreshold( a_setupInfo.m_reaction->twoBodyThreshold( ) ), + m_Upscatter( false ), + m_angular( Probabilities::parseProbability2d_d1( a_angularTwoBody.angular( ), &a_setupInfo ) ), + m_modelDBRC_data( nullptr ) { + + if( a_setupInfo.m_protare.projectileIntid( ) == PoPI::Intids::neutron ) { + m_Upscatter = a_setupInfo.m_reaction->ENDF_MT( ) == 2; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE AngularTwoBody::~AngularTwoBody( ) { + + delete m_angular; + delete m_modelDBRC_data; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void AngularTwoBody::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_residualMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_Q, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_twoBodyThreshold, a_buffer, a_mode ); + DATA_MEMBER_INT( m_Upscatter, a_buffer, a_mode ); + + m_angular = serializeProbability2d_d1( a_buffer, a_mode, m_angular ); + m_modelDBRC_data = serializeModelDBRC_data( a_buffer, a_mode, m_modelDBRC_data ); +} + +/* *********************************************************************************************************//** + * This method sets *this* *m_modelDBRC_data* to *a_modelDBRC_data*. It also deletes the current *m_modelDBRC_data* member. + * + * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode. + ***********************************************************************************************************/ + +LUPI_HOST void AngularTwoBody::setModelDBRC_data2( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ) { + + delete m_modelDBRC_data; + m_modelDBRC_data = a_modelDBRC_data; +} + +/*! \class Uncorrelated + * This class represents the distribution for an outgoing product for which the distribution is the product of uncorrelated + * angular (i.e., P(mu|E)) and energy (i.e., P(E'|E)) distributions. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Uncorrelated::Uncorrelated( ) : + m_angular( nullptr ), + m_energy( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_uncorrelated [in] The GIDI::Distributions::Uncorrelated instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST Uncorrelated::Uncorrelated( GIDI::Distributions::Uncorrelated const &a_uncorrelated, SetupInfo &a_setupInfo ) : + Distribution( Type::uncorrelated, a_uncorrelated, a_setupInfo ), + m_angular( Probabilities::parseProbability2d_d1( a_uncorrelated.angular( ), nullptr ) ), + m_energy( Probabilities::parseProbability2d( a_uncorrelated.energy( ), &a_setupInfo ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Uncorrelated::~Uncorrelated( ) { + + delete m_angular; + delete m_energy; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Uncorrelated::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + m_angular = serializeProbability2d_d1( a_buffer, a_mode, m_angular ); + m_energy = serializeProbability2d( a_buffer, a_mode, m_energy ); +} + +/*! \class Branching3d + * This class represents the distribution for an outgoing product for which the distribution is the product of uncorrelated + * angular (i.e., P(mu|E)) and energy (i.e., P(E'|E)) distributions. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Branching3d::Branching3d( ) : + m_initialStateIndex( -1 ) { + +} + +/* *********************************************************************************************************//** + * @param a_branching3d [in] The GIDI::Distributions::Branching3dinstance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST Branching3d::Branching3d( GIDI::Distributions::Branching3d const &a_branching3d, SetupInfo &a_setupInfo ) : + Distribution( Type::branching3d, a_branching3d, a_setupInfo ), + m_initialStateIndex( -1 ) { + + auto iter = a_setupInfo.m_stateNamesToIndices.find( a_branching3d.initialState( ) ); + if( iter == a_setupInfo.m_stateNamesToIndices.end( ) ) { + std::string message( "Branching3d: initial state not found: pid = '" + a_branching3d.initialState( ) + "'." ); + throw std::runtime_error( message.c_str( ) ); + } + m_initialStateIndex = iter->second; + + a_setupInfo.m_initialStateIndex = m_initialStateIndex; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Branching3d::~Branching3d( ) { + +} + + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Branching3d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + DATA_MEMBER_INT( m_initialStateIndex, a_buffer, a_mode ); +} + +/*! \class EnergyAngularMC + * This class represents the distribution for an outgoing particle where the distribution is give as + * P(E'|E) * P(mu|E,E') where E is the projectile's energy, E' is the product's outgoing energy, mu is the + * cosine of the product's outgoing angle relative to the projectile's velocity, P(E'|E) is the probability for E' given E + * and (P(mu|E,E') is the probability for mu given E and E'. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE EnergyAngularMC::EnergyAngularMC( ) : + m_energy( nullptr ), + m_angularGivenEnergy( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_energyAngularMC [in] The GIDI::Distributions::EnergyAngularMC instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST EnergyAngularMC::EnergyAngularMC( GIDI::Distributions::EnergyAngularMC const &a_energyAngularMC, SetupInfo &a_setupInfo ) : + Distribution( Type::energyAngularMC, a_energyAngularMC, a_setupInfo ), + m_energy( Probabilities::parseProbability2d_d1( a_energyAngularMC.energy( ), nullptr ) ), + m_angularGivenEnergy( Probabilities::parseProbability3d( a_energyAngularMC.energyAngular( ) ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE EnergyAngularMC::~EnergyAngularMC( ) { + + delete m_energy; + delete m_angularGivenEnergy; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void EnergyAngularMC::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + m_energy = serializeProbability2d_d1( a_buffer, a_mode, m_energy ); + m_angularGivenEnergy = serializeProbability3d( a_buffer, a_mode, m_angularGivenEnergy ); +} + +/*! \class AngularEnergyMC + * This class represents the distribution for an outgoing particle where the distribution is give as + * P(mu|E) * P(E'|E,mu) where E is the projectile's energy, E' is the product's outgoing energy, mu is the + * cosine of the product's outgoing angle relative to the projectile's velocity, P(mu|E) is the probability for mu given E + * and (P(E'|E,mu) is the probability for E' given E and mu. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE AngularEnergyMC::AngularEnergyMC( ) : + m_angular( nullptr ), + m_energyGivenAngular( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_angularEnergyMC [in] The GIDI::Distributions::AngularEnergyMC instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST AngularEnergyMC::AngularEnergyMC( GIDI::Distributions::AngularEnergyMC const &a_angularEnergyMC, SetupInfo &a_setupInfo ) : + Distribution( Type::angularEnergyMC, a_angularEnergyMC, a_setupInfo ), + m_angular( Probabilities::parseProbability2d_d1( a_angularEnergyMC.angular( ), nullptr ) ), + m_energyGivenAngular( Probabilities::parseProbability3d( a_angularEnergyMC.angularEnergy( ) ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE AngularEnergyMC::~AngularEnergyMC( ) { + + delete m_angular; + delete m_energyGivenAngular; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void AngularEnergyMC::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + m_angular = serializeProbability2d_d1( a_buffer, a_mode, m_angular ); + m_energyGivenAngular = serializeProbability3d( a_buffer, a_mode, m_energyGivenAngular ); +} + +/*! \class KalbachMann + * This class represents the distribution for an outgoing product whose distribution is represented by Kalbach-Mann systematics. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE KalbachMann::KalbachMann( ) : + m_energyToMeVFactor( 0.0 ), + m_eb_massFactor( 0.0 ), + m_f( nullptr ), + m_r( nullptr ), + m_a( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_KalbachMann [in] The GIDI::Distributions::KalbachMann instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST KalbachMann::KalbachMann( GIDI::Distributions::KalbachMann const &a_KalbachMann, SetupInfo &a_setupInfo ) : + Distribution( Type::KalbachMann, a_KalbachMann, a_setupInfo ), + m_energyToMeVFactor( 1 ), // FIXME. + m_eb_massFactor( 1 ), // FIXME. + m_f( Probabilities::parseProbability2d_d1( a_KalbachMann.f( ), nullptr ) ), + m_r( Functions::parseFunction2d( a_KalbachMann.r( ) ) ), + m_a( Functions::parseFunction2d( a_KalbachMann.a( ) ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE KalbachMann::~KalbachMann( ) { + + delete m_f; + delete m_r; + delete m_a; +} + +/* *********************************************************************************************************//** + * This method evaluates the Kalbach-Mann formalism at the projectile energy a_energy, and outgoing product energy a_energyOut and a_mu. + * + * @param a_energy [in] The energy of the projectile in the lab frame. + * @param a_energyOut [in] The energy of the product in the center-of-mass frame. + * @param a_mu [in] The mu of the product in the center-of-mass frame. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double KalbachMann::evaluate( double a_energy, double a_energyOut, double a_mu ) { + +// double f_0 = m_f->evaluate( a_energy, a_energyOut ); + double rValue = m_r->evaluate( a_energy, a_energyOut ); + double aValue = m_a->evaluate( a_energy, a_energyOut ); +// double pdf_val = aValue * f_0 / 2.0 / sinh( aValue ) * (cosh(aValue * a_mu) + rValue * sinh( aValue * a_mu ) ); // double-differential PDF for a_energyOut and a_mu (Eq. 6.4 in ENDF-102, 2012) + double pdf_val = aValue / ( 2.0 * sinh( aValue ) ) * ( cosh( aValue * a_mu ) + rValue * sinh( aValue * a_mu ) ); // double-differential PDF for a_energyOut and mu (Eq. 6.4 in ENDF-102, 2012) + return pdf_val; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void KalbachMann::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_energyToMeVFactor, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_eb_massFactor, a_buffer, a_mode ); + + m_f = serializeProbability2d_d1( a_buffer, a_mode, m_f ); + m_r = serializeFunction2d( a_buffer, a_mode, m_r ); + m_a = serializeFunction2d( a_buffer, a_mode, m_a ); +} + +/*! \class CoherentPhotoAtomicScattering + * This class represents the distribution for an outgoing photon via coherent photo-atomic elastic scattering. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering( ) : + m_realAnomalousFactor( nullptr ), + m_imaginaryAnomalousFactor( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_coherentPhotoAtomicScattering [in] GIDI::Distributions::CoherentPhotoAtomicScattering instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering( GIDI::Distributions::CoherentPhotoAtomicScattering const &a_coherentPhotoAtomicScattering, SetupInfo &a_setupInfo ) : + Distribution( Type::coherentPhotoAtomicScattering, a_coherentPhotoAtomicScattering, a_setupInfo ), + m_anomalousDataPresent( false ), + m_realAnomalousFactor( nullptr ), + m_imaginaryAnomalousFactor( nullptr ) { + + GUPI::Ancestry const *link = a_coherentPhotoAtomicScattering.findInAncestry( a_coherentPhotoAtomicScattering.href( ) ); + GIDI::DoubleDifferentialCrossSection::CoherentPhotoAtomicScattering const &coherentPhotoAtomicScattering = + *static_cast( link ); + + std::string domainUnit; + GIDI::Functions::XYs1d const *xys1d0, *xys1d1; + std::size_t dataSize = 0, offset = 0; + + GIDI::Functions::Function1dForm const *formFactor = coherentPhotoAtomicScattering.formFactor( ); + if( formFactor->type( ) == GIDI::FormType::XYs1d ) { + xys1d0 = static_cast( formFactor ); + xys1d1 = xys1d0; + + domainUnit = xys1d0->axes( )[0]->unit( ); + + dataSize = xys1d1->size( ); + offset = 1; } + else if( formFactor->type( ) == GIDI::FormType::regions1d ) { + GIDI::Functions::Regions1d const *regions1d = static_cast( formFactor ); + if( regions1d->size( ) != 2 ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor size." ); + + domainUnit = regions1d->axes( )[0]->unit( ); + + GIDI::Functions::Function1dForm const *region0 = (*regions1d)[0]; + if( region0->type( ) != GIDI::FormType::XYs1d ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor for region 0." ); + xys1d0 = static_cast( region0 ); + if( xys1d0->size( ) != 2 ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported size of region 1 of form factor." ); + + GIDI::Functions::Function1dForm const *region1 = (*regions1d)[1]; + if( region1->type( ) != GIDI::FormType::XYs1d ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor for region 1." ); + xys1d1 = static_cast( region1 ); + + dataSize = xys1d1->size( ) + 1; } + else { + throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor. Must be XYs1d or regions1d." ); + } + + double domainFactor = 1.0; + if( domainUnit == "1/Ang" ) { + domainFactor = 0.012398419739640716; } // Converts 'h * c /Ang' to MeV. + else if( domainUnit == "1/cm" ) { + domainFactor = 0.012398419739640716 * 1e-8; } // Converts 'h * c /cm' to MeV. + else { + throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported domain unit" ); + } + + m_energies.resize( dataSize ); + m_formFactor.resize( dataSize ); + m_a.resize( dataSize ); + m_integratedFormFactor.resize( dataSize ); + m_integratedFormFactorSquared.resize( dataSize ); + m_probabilityNorm1_1.resize( dataSize ); + m_probabilityNorm1_3.resize( dataSize ); + m_probabilityNorm1_5.resize( dataSize ); + m_probabilityNorm2_1.resize( dataSize ); + m_probabilityNorm2_3.resize( dataSize ); + m_probabilityNorm2_5.resize( dataSize ); + + std::pair xy = (*xys1d0)[0]; + m_energies[0] = 0.0; + m_formFactor[0] = xy.second; + m_a[0] = 0.0; + m_integratedFormFactor[0] = 0.0; + m_integratedFormFactorSquared[0] = 0.0; + + xy = (*xys1d1)[offset]; + double energy1 = domainFactor * xy.first; + double y1 = xy.second; + m_energies[1] = energy1; + m_formFactor[1] = y1; + m_integratedFormFactor[1] = 0.5 * energy1 * energy1 * y1; + m_integratedFormFactorSquared[1] = 0.5 * energy1 * energy1 * y1 * y1; + + double sum1 = m_integratedFormFactor[1]; + double sum2 = m_integratedFormFactorSquared[1]; + for( std::size_t i1 = 1 + offset; i1 < xys1d1->size( ); ++i1 ) { + xy = (*xys1d1)[i1]; + double energy2 = domainFactor * xy.first; + double y2 = xy.second; + + double logEs = log( energy2 / energy1 ); + double _a = log( y2 / y1 ) / logEs; + + m_energies[i1+1-offset] = energy2; + m_formFactor[i1+1-offset] = y2; + m_a[i1-offset] = _a; + + sum1 += coherentPhotoAtomicScatteringIntegrateSub( 1, _a, logEs, energy1, y1, energy2, y2 ); + m_integratedFormFactor[i1+1-offset] = sum1; + + sum2 += coherentPhotoAtomicScatteringIntegrateSub( 1, 2.0 * _a, logEs, energy1, y1 * y1, energy2, y2 * y2 ); + m_integratedFormFactorSquared[i1+1-offset] = sum2; + + energy1 = energy2; + y1 = y2; + } + + m_a[m_a.size()-1] = 0.0; + + if( coherentPhotoAtomicScattering.realAnomalousFactor( ) != nullptr ) { + m_anomalousDataPresent = true; + m_realAnomalousFactor = Functions::parseFunction1d_d1( coherentPhotoAtomicScattering.realAnomalousFactor( ) ); + m_imaginaryAnomalousFactor = Functions::parseFunction1d_d1( coherentPhotoAtomicScattering.imaginaryAnomalousFactor( ) ); + } + + m_probabilityNorm1_1[0] = 0.0; + m_probabilityNorm1_3[0] = 0.0; + m_probabilityNorm1_5[0] = 0.0; + m_probabilityNorm2_1[0] = 0.0; + m_probabilityNorm2_3[0] = 0.0; + m_probabilityNorm2_5[0] = 0.0; + energy1 = m_energies[1]; + y1 = m_formFactor[0]; + for( std::size_t i1 = 1; i1 < m_probabilityNorm1_1.size( ); ++i1 ) { + double energy2 = m_energies[i1]; + double y2 = m_formFactor[i1]; + double logEs = log( energy2 / energy1 ); + + m_probabilityNorm1_1[i1] = m_probabilityNorm1_1[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 1, m_a[i1-1], logEs, energy1, y1, energy2, y2 ); + m_probabilityNorm1_3[i1] = m_probabilityNorm1_3[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 3, m_a[i1-1], logEs, energy1, y1, energy2, y2 ); + m_probabilityNorm1_5[i1] = m_probabilityNorm1_5[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 5, m_a[i1-1], logEs, energy1, y1, energy2, y2 ); + + m_probabilityNorm2_1[i1] = m_probabilityNorm2_1[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 1, 2.0 * m_a[i1-1], logEs, energy1, y1 * y1, energy2, y2 * y2 ); + m_probabilityNorm2_3[i1] = m_probabilityNorm2_3[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 3, 2.0 * m_a[i1-1], logEs, energy1, y1 * y1, energy2, y2 * y2 ); + m_probabilityNorm2_5[i1] = m_probabilityNorm2_5[i1-1] + coherentPhotoAtomicScatteringIntegrateSub( 5, 2.0 * m_a[i1-1], logEs, energy1, y1 * y1, energy2, y2 * y2 ); + + energy1 = energy2; + y1 = y2; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE CoherentPhotoAtomicScattering::~CoherentPhotoAtomicScattering( ) { + + delete m_realAnomalousFactor; + delete m_imaginaryAnomalousFactor; +} + +/* *********************************************************************************************************//** + * This method evaluates the coherent photo-atomic scattering double differentil at the projectile energy a_energy and product cosine of angle a_mu. + * + * @param a_energyIn [in] The energy of the projectile in the lab frame. + * @param a_mu [in] The mu of the product in the center-of-mass frame. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double CoherentPhotoAtomicScattering::evaluate( double a_energyIn, double a_mu ) const { + + double probability; + int lowerIndexEnergy = binarySearchVector( a_energyIn, m_energies, true ); // FIXME - need to handle case where lowerIndexEnergy = 0 like in evaluateScatteringFactor. + double _a = m_a[lowerIndexEnergy]; + double _a_2 = _a * _a; + double X1 = m_energies[lowerIndexEnergy]; + double logEs = log( a_energyIn / X1 ); + double formFactor_1 = m_formFactor[lowerIndexEnergy]; + double formFactor_2 = formFactor_1 * formFactor_1; + double formFactorEnergyIn_1 = formFactor_1 * pow( a_energyIn / X1, _a ); + double formFactorEnergyIn_2 = formFactorEnergyIn_1 * formFactorEnergyIn_1; + double inverseEnergyIn_1 = 1.0 / a_energyIn; + double inverseEnergyIn_2 = inverseEnergyIn_1 * inverseEnergyIn_1; + double inverseEnergyIn_3 = inverseEnergyIn_1 * inverseEnergyIn_2; + double inverseEnergyIn_4 = inverseEnergyIn_2 * inverseEnergyIn_2; + double inverseEnergyIn_5 = inverseEnergyIn_1 * inverseEnergyIn_4; + double inverseEnergyIn_6 = inverseEnergyIn_2 * inverseEnergyIn_4; + + double norm = 0.5 * inverseEnergyIn_2 * ( m_probabilityNorm2_1[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 1, _a_2, logEs, X1, formFactor_2, a_energyIn, formFactorEnergyIn_2 ) ) + - inverseEnergyIn_4 * ( m_probabilityNorm2_3[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 3, _a_2, logEs, X1, formFactor_2, a_energyIn, formFactorEnergyIn_2 ) ) + + inverseEnergyIn_6 * ( m_probabilityNorm2_5[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 5, _a_2, logEs, X1, formFactor_2, a_energyIn, formFactorEnergyIn_2 ) ); + + double realAnomalousFactor = 0.0; + double imaginaryAnomalousFactor = 0.0; + if( m_anomalousDataPresent ) { + realAnomalousFactor = m_realAnomalousFactor->evaluate( a_energyIn ); + imaginaryAnomalousFactor = m_imaginaryAnomalousFactor->evaluate( a_energyIn ); + norm += realAnomalousFactor * ( inverseEnergyIn_1 * ( m_probabilityNorm1_1[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 1, _a, logEs, X1, formFactor_1, a_energyIn, formFactorEnergyIn_1 ) ) + - 2.0 * inverseEnergyIn_3 * ( m_probabilityNorm1_3[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 3, _a, logEs, X1, formFactor_1, a_energyIn, formFactorEnergyIn_1 ) ) + + 2.0 * inverseEnergyIn_5 * ( m_probabilityNorm1_5[lowerIndexEnergy] + coherentPhotoAtomicScatteringIntegrateSub( 5, _a, logEs, X1, formFactor_1, a_energyIn, formFactorEnergyIn_1 ) ) ); + } + norm *= 16.0; + norm += 8.0 / 3.0 * ( realAnomalousFactor * realAnomalousFactor + imaginaryAnomalousFactor * imaginaryAnomalousFactor ); + + double _formFactor = evaluateFormFactor( a_energyIn, a_mu ); + probability = ( 1.0 + a_mu * a_mu ) * ( ( _formFactor + realAnomalousFactor ) * ( _formFactor + realAnomalousFactor ) + imaginaryAnomalousFactor * imaginaryAnomalousFactor ) / norm; + + return( probability ); +} + +/* *********************************************************************************************************//** + * This method evaluates the coherent photo-atomic form factor at the projectile energy a_energy and product cosine of angle a_mu. + * + * @param a_energyIn [in] The energy of the projectile in the lab frame. + * @param a_mu [in] The mu of the product in the center-of-mass frame. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double CoherentPhotoAtomicScattering::evaluateFormFactor( double a_energyIn, double a_mu ) const { + + double X = a_energyIn * sqrt( 0.5 * ( 1 - a_mu ) ); + int lowerIndex = binarySearchVector( X, m_energies ); + + if( lowerIndex < 1 ) { + if( lowerIndex == 0 ) return( m_formFactor[0] ); + if( lowerIndex == -2 ) return( m_formFactor[0] ); // This should never happend for proper a_energyIn and a_mu. + return( m_formFactor.back( ) ); + } + + return( m_formFactor[lowerIndex] * pow( X / m_energies[lowerIndex] , m_a[lowerIndex] ) ); +} + +/* *********************************************************************************************************//** + * FIX ME. + * + * @param a_Z [in] + * @param a_a [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double CoherentPhotoAtomicScattering::Z_a( double a_Z, double a_a ) const { + + if( fabs( a_a ) < 1e-3 ) { + double logZ = log( a_Z ); + double a_logZ = a_a * logZ; + return( logZ * ( 1.0 + 0.5 * a_logZ * ( 1.0 + a_logZ / 3.0 * ( 1.0 + 0.25 * a_logZ ) ) ) ); + } + return( ( pow( a_Z, a_a ) - 1.0 ) / a_a ); +} + +/* *********************************************************************************************************//** + * FIX ME. + * + * @param a_n [in] + * @param a_a [in] + * @param a_logX [in] + * @param a_energy1 [in] + * @param a_y1 [in] + * @param a_energy2 [in] + * @param a_y2 [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE static double coherentPhotoAtomicScatteringIntegrateSub( int a_n, double a_a, double a_logX, double a_energy1, double a_y1, double a_energy2, double a_y2 ) { + + double epsilon = a_a + a_n + 1.0; + double integral = 0.0; + + if( fabs( epsilon ) < 1e-3 ) { + double epsilon_logX = epsilon * a_logX; + integral = a_y1 * pow( a_energy1, a_n + 1.0 ) * a_logX * ( 1.0 + 0.5 * epsilon_logX * ( 1.0 + epsilon_logX / 3.0 * ( 1.0 + 0.25 * epsilon_logX ) ) ); } + else { + integral = ( a_y2 * pow( a_energy2, a_n + 1.0 ) - a_y1 * pow( a_energy1, a_n + 1.0 ) ) / epsilon; + } + + return( integral ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void CoherentPhotoAtomicScattering::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_INT( m_anomalousDataPresent, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_formFactor, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_a, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_integratedFormFactor, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_integratedFormFactorSquared, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm1_1, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm1_3, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm1_5, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm2_1, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm2_3, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_probabilityNorm2_5, a_buffer, a_mode ); + + if( m_anomalousDataPresent ) { + m_realAnomalousFactor = serializeFunction1d_d1( a_buffer, a_mode, m_realAnomalousFactor ); + m_imaginaryAnomalousFactor = serializeFunction1d_d1( a_buffer, a_mode, m_imaginaryAnomalousFactor ); + } +} + +/*! \class IncoherentPhotoAtomicScattering + * This class represents the distribution for an outgoing photon via incoherent photo-atomic elastic scattering. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentPhotoAtomicScattering::IncoherentPhotoAtomicScattering( ) { + +} + +/* *********************************************************************************************************//** + * @param a_incoherentPhotoAtomicScattering [in] The GIDI::Distributions::IncoherentPhotoAtomicScattering instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST IncoherentPhotoAtomicScattering::IncoherentPhotoAtomicScattering( GIDI::Distributions::IncoherentPhotoAtomicScattering const &a_incoherentPhotoAtomicScattering, + SetupInfo &a_setupInfo ) : + Distribution( Type::incoherentPhotoAtomicScattering, a_incoherentPhotoAtomicScattering, a_setupInfo ) { + + GUPI::Ancestry const *link = a_incoherentPhotoAtomicScattering.findInAncestry( a_incoherentPhotoAtomicScattering.href( ) ); + GIDI::DoubleDifferentialCrossSection::IncoherentPhotoAtomicScattering const &incoherentPhotoAtomicScattering = + *static_cast( link ); + + std::string domainUnit; + GIDI::Functions::XYs1d const *xys1d0, *xys1d1; + std::size_t dataSize = 0, offset = 0; + + GIDI::Functions::Function1dForm const *scatteringFactor = incoherentPhotoAtomicScattering.scatteringFactor( ); + if( scatteringFactor->type( ) == GIDI::FormType::XYs1d ) { + xys1d0 = static_cast( scatteringFactor ); + xys1d1 = xys1d0; + + domainUnit = xys1d0->axes( )[0]->unit( ); + + dataSize = xys1d1->size( ); + offset = 1; } + else if( scatteringFactor->type( ) == GIDI::FormType::regions1d ) { + GIDI::Functions::Regions1d const *regions1d = static_cast( scatteringFactor ); + if( regions1d->size( ) != 2 ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor size." ); + + domainUnit = regions1d->axes( )[0]->unit( ); + + GIDI::Functions::Function1dForm const *region0 = (*regions1d)[0]; + if( region0->type( ) != GIDI::FormType::XYs1d ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor for region 0." ); + xys1d0 = static_cast( region0 ); + if( xys1d0->size( ) != 2 ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported size of region 1 of form factor." ); + + GIDI::Functions::Function1dForm const *region1 = (*regions1d)[1]; + if( region1->type( ) != GIDI::FormType::XYs1d ) throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor for region 1." ); + xys1d1 = static_cast( region1 ); + + dataSize = xys1d1->size( ) + 1; } + else { + throw std::runtime_error( "MCGIDI::CoherentPhotoAtomicScattering::CoherentPhotoAtomicScattering: unsupported form factor. Must be XYs1d or regions1d." ); + } + + double domainFactor = 1.0; + if( domainUnit == "1/Ang" ) { + domainFactor = 0.012398419739640716; } // Converts 'h * c /Ang' to MeV. + else if( domainUnit == "1/cm" ) { + domainFactor = 0.012398419739640716 * 1e-8; } // Converts 'h * c /cm' to MeV. + else { + throw std::runtime_error( "MCGIDI::IncoherentPhotoAtomicScattering::IncoherentPhotoAtomicScattering: unsupported domain unit" ); + } + + m_energies.resize( dataSize ); + m_scatteringFactor.resize( dataSize ); + m_a.resize( dataSize ); + + std::pair xy = (*xys1d0)[0]; + m_energies[0] = domainFactor * xy.first; + m_scatteringFactor[0] = xy.second; + m_a[0] = 1.0; + + xy = (*xys1d1)[offset]; + double energy1 = domainFactor * xy.first; + double y1 = xy.second; + + m_energies[1] = energy1; + m_scatteringFactor[1] = y1; + + for( std::size_t i1 = 1 + offset; i1 < xys1d1->size( ); ++i1 ) { + xy = (*xys1d1)[i1]; + double energy2 = domainFactor * xy.first; + double y2 = xy.second; + + m_energies[i1+1-offset] = energy2; + m_scatteringFactor[i1+1-offset] = y2; + + double _a = log( y2 / y1 ) / log( energy2 / energy1 ); + m_a[i1-offset] = _a; + + energy1 = energy2; + y1 = y2; + } + m_a[m_a.size()-1] = 0.0; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentPhotoAtomicScattering::~IncoherentPhotoAtomicScattering( ) { + +} + +/* *********************************************************************************************************//** + * FIX ME. + * + * @param a_energyIn [in] + * @param a_mu [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentPhotoAtomicScattering::energyRatio( double a_energyIn, double a_mu ) const { + + double relativeEnergy = a_energyIn / PoPI_electronMass_MeV_c2; + + return( 1.0 / ( 1.0 + relativeEnergy * ( 1.0 - a_mu ) ) ); +} + +/* *********************************************************************************************************//** + * This method evaluates the Klein-Nishina. FIX ME. This should be a function as it does not use member data. + * + * @param a_energyIn [in] + * @param a_mu [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentPhotoAtomicScattering::evaluateKleinNishina( double a_energyIn, double a_mu ) const { + + double relativeEnergy = a_energyIn / PoPI_electronMass_MeV_c2; + double _energyRatio = energyRatio( a_energyIn, a_mu ); + double one_minus_mu = 1.0 - a_mu; + + double norm = ( 1.0 + 2.0 * relativeEnergy ); + norm = 2.0 * relativeEnergy * ( 2.0 + relativeEnergy * ( 1.0 + relativeEnergy ) * ( 8.0 + relativeEnergy ) ) / ( norm * norm ); + norm += ( ( relativeEnergy - 2.0 ) * relativeEnergy - 2.0 ) * log( 1.0 + 2.0 * relativeEnergy ); + norm /= relativeEnergy * relativeEnergy * relativeEnergy; + + return( _energyRatio * _energyRatio * ( _energyRatio + a_mu * a_mu + relativeEnergy * one_minus_mu * one_minus_mu ) / norm ); +} + +/* *********************************************************************************************************//** + * This method evaluates the Klein-Nishina. + * + * @param a_energyIn [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentPhotoAtomicScattering::evaluateScatteringFactor( double a_energyIn ) const { + + int lowerIndex = binarySearchVector( a_energyIn, m_energies ); + + if( lowerIndex < 1 ) { + if( lowerIndex == -1 ) return( m_scatteringFactor.back( ) ); + return( m_scatteringFactor[1] * a_energyIn / m_energies[1] ); + } + + return( m_scatteringFactor[lowerIndex] * pow( a_energyIn / m_energies[lowerIndex], m_a[lowerIndex] ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void IncoherentPhotoAtomicScattering::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_scatteringFactor, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_a, a_buffer, a_mode ); +} + +/*! \class IncoherentBoundToFreePhotoAtomicScattering + * This class represents the distribution for an outgoing photon via incoherent photo-atomic elastic scattering. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentBoundToFreePhotoAtomicScattering::IncoherentBoundToFreePhotoAtomicScattering( ) { + +} + +/* *********************************************************************************************************//** + * @param a_incoherentBoundToFreePhotoAtomicScattering [in] The GIDI::Distributions::IncoherentBoundToFreePhotoAtomicScattering instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST IncoherentBoundToFreePhotoAtomicScattering::IncoherentBoundToFreePhotoAtomicScattering( + GIDI::Distributions::IncoherentBoundToFreePhotoAtomicScattering const &a_incoherentBoundToFreePhotoAtomicScattering, + SetupInfo &a_setupInfo ) : + Distribution( Type::incoherentBoundToFreePhotoAtomicScattering, a_incoherentBoundToFreePhotoAtomicScattering, a_setupInfo ) { + + GIDI::ProtareSingle const &GIDI_protare = a_setupInfo.m_GIDI_protare; + auto monikers = GIDI_protare.styles( ).findAllOfMoniker( GIDI_MonteCarlo_cdfStyleChars ); + std::string MonteCarlo_cdf = ""; + if( monikers.size( ) == 1 ) { + MonteCarlo_cdf = monikers[0][0]->label( ); + } + + std::string Compton_href = a_incoherentBoundToFreePhotoAtomicScattering.href( ); + + if( Compton_href.find( MonteCarlo_cdf ) != std::string::npos ) { + const GUPI::Ancestry *link = a_incoherentBoundToFreePhotoAtomicScattering.findInAncestry( Compton_href ); + GIDI::DoubleDifferentialCrossSection::IncoherentBoundToFreePhotoAtomicScattering const &dd = *static_cast( link ); + GIDI::Functions::Xs_pdf_cdf1d const *xpcCompton; + GIDI::Functions::Function1dForm const *ComptonProfile = dd.ComptonProfile( ); + xpcCompton = static_cast( ComptonProfile ); + + std::vector occupationNumbers = xpcCompton->cdf( ); + std::vector pz_grid = xpcCompton->Xs( ); + std::size_t dataSize = pz_grid.size( ); + m_occupationNumber.resize( dataSize ); + m_pz.resize( dataSize ); + for( std::size_t index = 0; index < occupationNumbers.size( ); ++index ) { + m_occupationNumber[index] = occupationNumbers[index]; + m_pz[index] = pz_grid[index]; + } + + m_bindingEnergy = a_setupInfo.m_Q; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentBoundToFreePhotoAtomicScattering::~IncoherentBoundToFreePhotoAtomicScattering( ) { + +} + +/* *********************************************************************************************************//** + * FIX ME. + * + * @param a_energyIn [in] + * @param a_mu [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentBoundToFreePhotoAtomicScattering::energyRatio( double a_energyIn, double a_mu ) const { + + double relativeEnergy = a_energyIn / PoPI_electronMass_MeV_c2; + + return( 1.0 / ( 1.0 + relativeEnergy * ( 1.0 - a_mu ) ) ); +} + +/* *********************************************************************************************************//** + * This method evaluates the Klein-Nishina. FIX ME. This should be a function as it does not use member data. + * + * @param a_energyIn [in] + * @param a_mu [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentBoundToFreePhotoAtomicScattering::evaluateKleinNishina( double a_energyIn, double a_mu ) const { + + double relativeEnergy = a_energyIn / PoPI_electronMass_MeV_c2; + double _energyRatio = energyRatio( a_energyIn, a_mu ); + double one_minus_mu = 1.0 - a_mu; + + double norm = ( 1.0 + 2.0 * relativeEnergy ); + norm = 2.0 * relativeEnergy * ( 2.0 + relativeEnergy * ( 1.0 + relativeEnergy ) * ( 8.0 + relativeEnergy ) ) / ( norm * norm ); + norm += ( ( relativeEnergy - 2.0 ) * relativeEnergy - 2.0 ) * log( 1.0 + 2.0 * relativeEnergy ); + norm /= relativeEnergy * relativeEnergy * relativeEnergy; + + return( _energyRatio * _energyRatio * ( _energyRatio + a_mu * a_mu + relativeEnergy * one_minus_mu * one_minus_mu ) / norm ); +} + + +/* *********************************************************************************************************//** + * This method evaluates the occupation number cdf. + * + * @param a_energyIn [in] + * @param a_mu [in] + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double IncoherentBoundToFreePhotoAtomicScattering::evaluateOccupationNumber( double a_energyIn, double a_mu ) const { + + const double alpha_in = a_energyIn / PoPI_electronMass_MeV_c2; + //const double mec = 2.7309245307378233e-22; // m_e * c in SI units + const double alpha_binding = -m_bindingEnergy/PoPI_electronMass_MeV_c2; // BE [MeV] / 0.511 [MeV] + const double pzmax = ( -alpha_binding + alpha_in*(alpha_in - alpha_binding)*(1-a_mu) )/( sqrt( 2*alpha_in*(alpha_in-alpha_binding)*(1-a_mu) + alpha_binding*alpha_binding ) ); // *mec + + int lowerIndex = binarySearchVector( pzmax, m_pz ); + const int size1 = m_occupationNumber.size(); + + if( lowerIndex == -1 || lowerIndex == (size1 -1)){ + return( m_occupationNumber.back( ) ); + } + if( lowerIndex == -2 ){ + return( m_occupationNumber[0] ); + } + + return(m_occupationNumber[lowerIndex] + (pzmax-m_pz[lowerIndex])*(m_occupationNumber[lowerIndex+1]-m_occupationNumber[lowerIndex])/(m_pz[lowerIndex+1]-m_pz[lowerIndex]) ); + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void IncoherentBoundToFreePhotoAtomicScattering::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_DOUBLE( m_pz, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_occupationNumber, a_buffer, a_mode ); + +} + +/* +====================================================================================================== +========== IncoherentPhotoAtomicScatteringElectron ========== +====================================================================================================== +*/ + +/*! \class IncoherentPhotoAtomicScatteringElectron + * This class represents the distribution for the outgoing electron for incoherent photo-atomic scattering. + */ + +/* *********************************************************************************************************//** + * Plain constructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentPhotoAtomicScatteringElectron::IncoherentPhotoAtomicScatteringElectron( ) { + +} + +/* *********************************************************************************************************//** + * Constructor. + * + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST IncoherentPhotoAtomicScatteringElectron::IncoherentPhotoAtomicScatteringElectron( SetupInfo &a_setupInfo ) : + Distribution( Type::incoherentPhotoAtomicScatteringElectron, GIDI::Frame::lab, a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + * Destructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentPhotoAtomicScatteringElectron::~IncoherentPhotoAtomicScatteringElectron( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void IncoherentPhotoAtomicScatteringElectron::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); +} + +/* +====================================================================================================== +========== PairProductionGamma ========== +====================================================================================================== +*/ + +/*! \class PairProductionGamma + * This class represents the distribution for an outgoing photon the is the result of an electron annihilating with a positron. + */ + +/* *********************************************************************************************************//** + * Basic constructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE PairProductionGamma::PairProductionGamma( ) { + +} + +/* *********************************************************************************************************//** + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_firstSampled [in] FIX ME + ***********************************************************************************************************/ + +LUPI_HOST PairProductionGamma::PairProductionGamma( SetupInfo &a_setupInfo, bool a_firstSampled ) : + Distribution( Type::pairProductionGamma, GIDI::Frame::lab, a_setupInfo ), + m_firstSampled( a_firstSampled ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE PairProductionGamma::~PairProductionGamma( ) { + +} + + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void PairProductionGamma::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_INT( m_firstSampled, a_buffer, a_mode ); +} + +/*! \class CoherentElasticTNSL + * This class represents the distribution for an outgoing product whose distribution is TNSL coherent elastic scattering. + * This class samples directly from the Debye/Waller function. + */ + +/* *********************************************************************************************************//** + * Constructor for the CoherentElasticTNSL class. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE CoherentElasticTNSL::CoherentElasticTNSL( ) : + m_temperatureInterpolation( Interpolation::LINLIN ) { + +} + +/* *********************************************************************************************************//** + * Constructor for the CoherentElasticTNSL class. + * + * @param a_coherentElasticTNSL [in] GIDI::CoherentElastic instance containing the Debye/Waller data. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST CoherentElasticTNSL::CoherentElasticTNSL( GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::CoherentElastic const *a_coherentElasticTNSL, + SetupInfo &a_setupInfo ) : + Distribution( Type::coherentElasticTNSL, GIDI::Frame::lab, a_setupInfo ), + m_temperatureInterpolation( Interpolation::LINLIN ) { + + GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::S_table const &s_table = a_coherentElasticTNSL->s_table( ); + GIDI::Functions::Gridded2d const *gridded2d = dynamic_cast( s_table.function2d( ) ); + GIDI::Axes const &axes = gridded2d->axes( ); + + GIDI::Grid const *axis = dynamic_cast( axes[0] ); + m_temperatureInterpolation = GIDI2MCGIDI_interpolation( ptwXY_stringToInterpolation( axis->interpolation( ).c_str( ) ) ); + + double temperatureToMeV_K = 1.0; + if( axis->unit( ) == "K" ) temperatureToMeV_K = 8.617330337217212e-11; // This is a kludge until units are properly supported. + nf_Buffer const *grid = &axis->values( ); + m_temperatures.resize( grid->size( ) ); + for( std::size_t index = 0; index < grid->size( ); ++index ) m_temperatures[index] = temperatureToMeV_K * (*grid)[index]; + + axis = dynamic_cast( axes[1] ); + grid = &axis->values( ); + m_energies.resize( grid->size( ) ); + for( std::size_t index = 0; index < grid->size( ); ++index ) m_energies[index] = (*grid)[index]; + + GIDI::Array::FullArray fullArray = gridded2d->array( ).constructArray( ); + m_S_table.resize( fullArray.size( ) ); + for( std::size_t index = 0; index < fullArray.m_flattenedValues.size( ); ++index ) m_S_table[index] = fullArray.m_flattenedValues[index]; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void CoherentElasticTNSL::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_DOUBLE( m_temperatures, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_S_table, a_buffer, a_mode ); + + int interpolation = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_temperatureInterpolation ) { + case Interpolation::FLAT : + break; + case Interpolation::LINLIN : + interpolation = 1; + break; + case Interpolation::LINLOG : + interpolation = 2; + break; + case Interpolation::LOGLIN : + interpolation = 3; + break; + case Interpolation::LOGLOG : + interpolation = 4; + break; + case Interpolation::OTHER : + interpolation = 5; + break; + } + } + DATA_MEMBER_INT( interpolation, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( interpolation ) { + case 0 : + m_temperatureInterpolation = Interpolation::FLAT; + break; + case 1 : + m_temperatureInterpolation = Interpolation::LINLIN; + break; + case 2 : + m_temperatureInterpolation = Interpolation::LINLOG; + break; + case 3 : + m_temperatureInterpolation = Interpolation::LOGLIN; + break; + case 4 : + m_temperatureInterpolation = Interpolation::LOGLOG; + break; + case 5 : + m_temperatureInterpolation = Interpolation::OTHER; + break; + } + } +} + +/*! \class IncoherentElasticTNSL + * This class represents the distribution for an outgoing product whose distribution is TNSL incoherent elastic scattering. + * This class samples directly from the Debye/Waller function. + */ + +/* *********************************************************************************************************//** + * Constructor for the IncoherentElasticTNSL class. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE IncoherentElasticTNSL::IncoherentElasticTNSL( ) : + m_DebyeWallerIntegral( nullptr ) { + +} + +/* *********************************************************************************************************//** + * Constructor for the IncoherentElasticTNSL class. + * + * @param a_incoherentElasticTNSL [in] GIDI::IncoherentElastic instance containing the Debye/Waller data. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST IncoherentElasticTNSL::IncoherentElasticTNSL( GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::IncoherentElastic const *a_incoherentElasticTNSL, + SetupInfo &a_setupInfo ) : + Distribution( Type::incoherentElasticTNSL, GIDI::Frame::lab, a_setupInfo ), + m_temperatureToMeV_K( 1.0 ), + m_DebyeWallerIntegral( nullptr ) { + + GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::DebyeWallerIntegral const &debyeWallerIntegral = a_incoherentElasticTNSL->debyeWallerIntegral( ); + m_DebyeWallerIntegral = Functions::parseFunction1d_d1( debyeWallerIntegral.function1d( ) ); + GIDI::Axes const &axes = debyeWallerIntegral.function1d( )->axes( ); + GIDI::Axis const *axis = dynamic_cast( axes[0] ); + if( axis->unit( ) == "K" ) m_temperatureToMeV_K = 8.617330337217212e-11; // This is a kludge until units are properly supported. +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void IncoherentElasticTNSL::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); + + DATA_MEMBER_DOUBLE( m_temperatureToMeV_K, a_buffer, a_mode ); + m_DebyeWallerIntegral = serializeFunction1d_d1( a_buffer, a_mode, m_DebyeWallerIntegral ); +} + +/*! \class Unspecified + * This class represents the distribution for an outgoing product whose distribution is not specified. + */ + +LUPI_HOST_DEVICE Unspecified::Unspecified( ) { + +} + +/* *********************************************************************************************************//** + * @param a_distribution [in] The GIDI::Distributions::Unspecified instance whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + ***********************************************************************************************************/ + +LUPI_HOST Unspecified::Unspecified( GIDI::Distributions::Distribution const &a_distribution, SetupInfo &a_setupInfo ) : + Distribution( Type::unspecified, a_distribution, a_setupInfo ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Unspecified::~Unspecified( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Unspecified::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Distribution::serialize( a_buffer, a_mode ); +} + + +/* *********************************************************************************************************//** + * This function is used to call the proper distribution constructor for *a_distribution*. + * + * @param a_distribution [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + ***********************************************************************************************************/ + +LUPI_HOST Distribution *parseGIDI( GIDI::Suite const &a_distribution, SetupInfo &a_setupInfo, Transporting::MC const &a_settings ) { + + if( a_setupInfo.m_protare.projectileIntid( ) == PoPI::Intids::neutron ) { + if( a_settings.wantRawTNSL_distributionSampling( ) ) { + if( a_setupInfo.m_reaction->doubleDifferentialCrossSection( ).size( ) > 0 ) { + GIDI::Form const *form = a_setupInfo.m_reaction->doubleDifferentialCrossSection( ).get( 0 ); + + if( form->type( ) == GIDI::FormType::coherentElastic ) { + GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::CoherentElastic const *coherentElasticTNSL + = static_cast( form ); + return( new CoherentElasticTNSL( coherentElasticTNSL, a_setupInfo ) ); } + else if( form->type( ) == GIDI::FormType::incoherentElastic ) { + GIDI::DoubleDifferentialCrossSection::n_ThermalNeutronScatteringLaw::IncoherentElastic const *incoherentElasticTNSL + = static_cast( form ); + return( new IncoherentElasticTNSL( incoherentElasticTNSL, a_setupInfo ) ); + } + } + } + } + + std::string const *label = a_settings.styles( )->findLabelInLineage( a_distribution, a_setupInfo.m_distributionLabel ); + GIDI::Distributions::Distribution const &GIDI_distribution = *a_distribution.get( *label ); + + return parseGIDI2( GIDI_distribution, a_setupInfo, a_settings ); +} + +/* *********************************************************************************************************//** + * This function is used to convert the GIDI distribution *a_GIDI_distribution* into an MCGIDI distribution. It was split off of + * **parseGIDI** to be able to handle referenced distribution by calling itself. + * + * @param a_distribution [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + ***********************************************************************************************************/ + +static LUPI_HOST Distribution *parseGIDI2( GIDI::Distributions::Distribution const &a_GIDI_distribution, SetupInfo &a_setupInfo, + Transporting::MC const &a_settings ) { + + Distribution *distribution = nullptr; + + GIDI::FormType type = a_GIDI_distribution.type( ); + + switch( type ) { + case GIDI::FormType::angularTwoBody : + distribution = new AngularTwoBody( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::uncorrelated : + distribution = new Uncorrelated( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::KalbachMann : + distribution = new KalbachMann( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::energyAngularMC : + distribution = new EnergyAngularMC( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::angularEnergyMC : + distribution = new AngularEnergyMC( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::coherentPhotonScattering : + distribution = new CoherentPhotoAtomicScattering( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::incoherentPhotonScattering : + distribution = new IncoherentPhotoAtomicScattering( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::incoherentBoundToFreePhotonScattering : + distribution = new IncoherentBoundToFreePhotoAtomicScattering( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::branching3d : + distribution = new Branching3d( static_cast( a_GIDI_distribution ), a_setupInfo ); + break; + case GIDI::FormType::unspecified : + distribution = new Unspecified( a_GIDI_distribution, a_setupInfo ); + break; + case GIDI::FormType::reference3d : { + GIDI::Distributions::Reference3d const *reference3d = static_cast( &a_GIDI_distribution ); + GIDI::Distributions::Distribution const *linkedForm = static_cast( reference3d->findInAncestry( reference3d->href( ) ) ); + if( linkedForm == nullptr ) + throw std::runtime_error( "MCGIDI::Distributions::parseGIDI: could not find link '" + a_GIDI_distribution.toXLink( ) + "." ); + distribution = parseGIDI2( *linkedForm, a_setupInfo, a_settings ); } + break; + default : + throw std::runtime_error( "MCGIDI::Distributions::parseGIDI: unsupported distribution: " + a_GIDI_distribution.toXLink( ) + "." ); + } + + return( distribution ); +} + +/* *********************************************************************************************************//** + * @param a_distribution [in] The GIDI::Protare whose data is to be used to construct *this*. + * + * @return The type of the distribution or Distributions::Type::none if *a_distribution* is a *nullptr* pointer. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Type DistributionType( Distribution const *a_distribution ) { + + if( a_distribution == nullptr ) return( Type::none ); + return( a_distribution->type( ) ); +} + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*.A + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Distributions::Distribution *serializeDistribution( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Distributions::Distribution *a_distribution ) { + + Distributions::Type type = Distributions::Type::none; + if( a_distribution != nullptr ) type = a_distribution->type( ); + int distributionType = distributionTypeToInt( type ); + DATA_MEMBER_INT( distributionType, a_buffer, a_mode ); + type = intToDistributionType( distributionType ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case Distributions::Type::none : + a_distribution = nullptr; + break; + case Distributions::Type::unspecified : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::Unspecified; + a_buffer.incrementPlacement( sizeof( Distributions::Unspecified ) ); } + else { + a_distribution = new Distributions::Unspecified; + } + break; + case Distributions::Type::angularTwoBody : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::AngularTwoBody; + a_buffer.incrementPlacement( sizeof( Distributions::AngularTwoBody ) ); } + else { + a_distribution = new Distributions::AngularTwoBody; + } + break; + case Distributions::Type::KalbachMann : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::KalbachMann; + a_buffer.incrementPlacement( sizeof( Distributions::KalbachMann ) ); } + else { + a_distribution = new Distributions::KalbachMann; + } + break; + case Distributions::Type::uncorrelated : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::Uncorrelated; + a_buffer.incrementPlacement( sizeof( Distributions::Uncorrelated ) ); } + else { + a_distribution = new Distributions::Uncorrelated; + } + break; + case Distributions::Type::branching3d: + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::Branching3d; + a_buffer.incrementPlacement( sizeof( Distributions::Branching3d ) ); } + else { + a_distribution = new Distributions::Branching3d; + } + break; + case Distributions::Type::energyAngularMC : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::EnergyAngularMC; + a_buffer.incrementPlacement( sizeof( Distributions::EnergyAngularMC ) ); } + else { + a_distribution = new Distributions::EnergyAngularMC; + } + break; + case Distributions::Type::angularEnergyMC : + if (a_buffer.m_placement != nullptr) { + a_distribution = new(a_buffer.m_placement) Distributions::AngularEnergyMC; + a_buffer.incrementPlacement( sizeof( Distributions::AngularEnergyMC ) ); } + else { + a_distribution = new Distributions::AngularEnergyMC; + } + break; + case Distributions::Type::coherentPhotoAtomicScattering : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::CoherentPhotoAtomicScattering; + a_buffer.incrementPlacement( sizeof( Distributions::CoherentPhotoAtomicScattering ) ); } + else { + a_distribution = new Distributions::CoherentPhotoAtomicScattering; + } + break; + case Distributions::Type::incoherentPhotoAtomicScattering : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::IncoherentPhotoAtomicScattering; + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentPhotoAtomicScattering ) ); } + else { + a_distribution = new Distributions::IncoherentPhotoAtomicScattering; + } + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::IncoherentBoundToFreePhotoAtomicScattering; + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentBoundToFreePhotoAtomicScattering ) ); } + else { + a_distribution = new Distributions::IncoherentBoundToFreePhotoAtomicScattering; + } + break; + case Distributions::Type::pairProductionGamma : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::PairProductionGamma; + a_buffer.incrementPlacement( sizeof( Distributions::PairProductionGamma ) ); } + else { + a_distribution = new Distributions::PairProductionGamma; + } + break; + case Distributions::Type::coherentElasticTNSL : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::CoherentElasticTNSL; + a_buffer.incrementPlacement( sizeof( Distributions::CoherentElasticTNSL ) ); } + else { + a_distribution = new Distributions::CoherentElasticTNSL; + } + break; + case Distributions::Type::incoherentElasticTNSL : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::IncoherentElasticTNSL; + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentElasticTNSL ) ); } + else { + a_distribution = new Distributions::IncoherentElasticTNSL; + } + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron : + if( a_buffer.m_placement != nullptr ) { + a_distribution = new(a_buffer.m_placement) Distributions::IncoherentPhotoAtomicScatteringElectron; + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentPhotoAtomicScatteringElectron ) ); } + else { + a_distribution = new Distributions::IncoherentPhotoAtomicScatteringElectron; + } + break; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case Distributions::Type::none : + break; + case Distributions::Type::unspecified : + a_buffer.incrementPlacement( sizeof( Distributions::Unspecified ) ); + break; + case Distributions::Type::angularTwoBody : + a_buffer.incrementPlacement( sizeof( Distributions::AngularTwoBody ) ); + break; + case Distributions::Type::KalbachMann : + a_buffer.incrementPlacement( sizeof( Distributions::KalbachMann ) ); + break; + case Distributions::Type::uncorrelated : + a_buffer.incrementPlacement( sizeof( Distributions::Uncorrelated ) ); + break; + case Distributions::Type::branching3d: + a_buffer.incrementPlacement( sizeof( Distributions::Branching3d ) ); + break; + case Distributions::Type::energyAngularMC : + a_buffer.incrementPlacement( sizeof( Distributions::EnergyAngularMC ) ); + break; + case Distributions::Type::angularEnergyMC : + a_buffer.incrementPlacement( sizeof( Distributions::AngularEnergyMC ) ); + break; + case Distributions::Type::coherentPhotoAtomicScattering : + a_buffer.incrementPlacement( sizeof( Distributions::CoherentPhotoAtomicScattering ) ); + break; + case Distributions::Type::incoherentPhotoAtomicScattering : + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentPhotoAtomicScattering ) ); + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering : + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentBoundToFreePhotoAtomicScattering ) ); + break; + case Distributions::Type::pairProductionGamma : + a_buffer.incrementPlacement( sizeof( Distributions::PairProductionGamma ) ); + break; + case Distributions::Type::coherentElasticTNSL : + a_buffer.incrementPlacement( sizeof( Distributions::CoherentElasticTNSL ) ); + break; + case Distributions::Type::incoherentElasticTNSL : + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentElasticTNSL ) ); + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron : + a_buffer.incrementPlacement( sizeof( Distributions::IncoherentPhotoAtomicScatteringElectron ) ); + break; + } + } + + switch( type ) { + case Distributions::Type::none : + break; + case Distributions::Type::unspecified : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::angularTwoBody : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::KalbachMann : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::uncorrelated : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::branching3d: + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::energyAngularMC : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::angularEnergyMC : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::coherentPhotoAtomicScattering : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::incoherentPhotoAtomicScattering : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::pairProductionGamma : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::coherentElasticTNSL : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::incoherentElasticTNSL : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron : + static_cast( a_distribution )->serialize( a_buffer, a_mode ); + break; + } + + return( a_distribution ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_domainHash.cc b/source/processes/hadronic/models/lend/src/MCGIDI_domainHash.cc new file mode 100644 index 0000000000..aae3f3771f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_domainHash.cc @@ -0,0 +1,220 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/*! \class DomainHash + * This class stores the data needed for logarithmic hash look up of a domain. This is used to find a cross section given a projectile's energy. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DomainHash::DomainHash( ) : + m_bins( 0 ), + m_domainMin( 0.0 ), + m_domainMax( 0.0 ), + m_u_domainMin( 0.0 ), + m_u_domainMax( 0.0 ), + m_inverse_du( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_bins [in] The number of bins for the hahs function. + * @param a_domainMin [in] The minimum value of the energy domain for the hash function. + * @param a_domainMax [in] The maximum value of the energy domain for the hash function. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DomainHash::DomainHash( int a_bins, double a_domainMin, double a_domainMax ) : + m_bins( a_bins ), + m_domainMin( a_domainMin ), + m_domainMax( a_domainMax ), + m_u_domainMin( log( a_domainMin ) ), + m_u_domainMax( log( a_domainMax ) ), + m_inverse_du( a_bins / ( m_u_domainMax - m_u_domainMin ) ) { + +} + +/* *********************************************************************************************************//** + * @param a_domainHash [in] The DomainHash instance to copy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DomainHash::DomainHash( DomainHash const &a_domainHash ) : + m_bins( a_domainHash.bins( ) ), + m_domainMin( a_domainHash.domainMin( ) ), + m_domainMax( a_domainHash.domainMax( ) ), + m_u_domainMin( a_domainHash.u_domainMin( ) ), + m_u_domainMax( a_domainHash.u_domainMax( ) ), + m_inverse_du( a_domainHash.inverse_du( ) ) { +} + +/* *********************************************************************************************************//** + * This method returns the hash index given the domain value *a_domain*. If *a_domain* is less than *m_domainMin*, + * the returned index is 0. If *a_domain* is greater than *m_domainMax*, the returned index is *m_bins* + 1. + * Otherwise, the returned index is in the range [1, *m_bins*]. + * + * @param a_domain [in] The domain value that the hash index is to be returned for. + * + * @return The hash index. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int DomainHash::index( double a_domain ) const { + + if( a_domain < m_domainMin ) return( 0 ); + if( a_domain > m_domainMax ) return( m_bins + 1 ); + double dIndex = m_inverse_du * ( log( a_domain ) - m_u_domainMin ) + 1; + return( (int) dIndex ); +} + +/* *********************************************************************************************************//** + * This method returns the hash indices for the requested domain values *a_domainValues*. + * + * @param a_domainValues [in] The domain values. + * + * @return The hash indices. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector DomainHash::map( Vector const &a_domainValues ) const { + + std::size_t i1, size( a_domainValues.size( ) ); + Vector indices( m_bins + 2, 0 ); + int lastIndex = 0, currentIndex, i2 = 1; + + for( i1 = 0; i1 < size; ++i1 ) { + currentIndex = index( a_domainValues[i1] ); + if( currentIndex != lastIndex ) { + for( ; lastIndex < currentIndex; ++lastIndex, ++i2 ) { + indices[i2] = i1 - 1; + if( i1 == 0 ) indices[i2] = 0; // Special case. + } + } + } + for( ; i2 < ( m_bins + 2 ); ++i2 ) indices[i2] = indices[i2-1]; + return( indices ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void DomainHash::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_bins, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_domainMin, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_domainMax, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_u_domainMin, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_u_domainMax, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_inverse_du, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * Prints the contents of *this*. + * + * @param a_printValues [in] If true, the domain values that divide the hash indices are also printed. + ***********************************************************************************************************/ + +LUPI_HOST void DomainHash::print( bool a_printValues ) const { +#ifndef __CUDA_ARCH__ + std::cout << "bins = " << m_bins << std::endl; + std::cout << " m_domainMin = " << m_domainMin << " << m_domainMax = " << m_domainMax << std::endl; + std::cout << " m_u_domainMin = " << m_u_domainMin << " << m_u_domainMax = " << m_u_domainMax << std::endl; + std::cout << " m_inverse_du = " << m_inverse_du << std::endl; + if( a_printValues ) { + double domain = m_domainMin, factor = pow( m_domainMax / m_domainMin, 1. / m_bins ); + + for( int i1 = 0; i1 < bins( ); ++i1, domain *= factor ) { + std::cout << LUPI::Misc::argumentsToString( " %14.7e", domain ); + if( ( ( i1 + 1 ) % 10 ) == 0 ) std::cout << std::endl; + } + std::cout << LUPI::Misc::argumentsToString( " %14.7e", m_domainMax ) << std::endl; + } +#endif +} + +/*! \class MultiGroupHash + * This class stores a multi-group boundaries and has a method *index* that returns an index of the group for the requested domain value. + */ + +/* *********************************************************************************************************//** + * @param a_boundaries [in] The list of multi-group boundaries. + ***********************************************************************************************************/ + +LUPI_HOST MultiGroupHash::MultiGroupHash( std::vector a_boundaries ) : + m_boundaries( a_boundaries ) { + +} + +/* *********************************************************************************************************//** + * This constructor gets the list of multi-group boundaries from the first GIDI::Styles::MultiGroup of *a_protare*. + * It calls MultiGroupHash::initialize to set up *this*. + * + * @param a_protare [in] The GIDI::Protare containing the GIDI::Styles::MultiGroup style. + * @param a_temperatureInfo [in] This is used to determine the multi-group boundaries. + * @param a_particleID [in] The PoPs' id of the particle whose multi-group boundaries are desired. + ***********************************************************************************************************/ + +LUPI_HOST MultiGroupHash::MultiGroupHash( GIDI::Protare const &a_protare, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, std::string const &a_particleID ) { + + initialize( a_protare, a_temperatureInfo, a_particleID ); +} + +/* *********************************************************************************************************//** + * This constructor gets the list of multi-group boundaries from the GIDI::Particle of *a_particles* that is the projectile. + * + * @param a_protare [in] The GIDI::Protare containing the GIDI::Styles::MultiGroup style. + * @param a_particles [in] The list of transportable particles. + ***********************************************************************************************************/ + +LUPI_HOST MultiGroupHash::MultiGroupHash( GIDI::Protare const &a_protare, GIDI::Transporting::Particles const &a_particles ) { + + GIDI::Transporting::Particle const &particle = *a_particles.particle( a_protare.projectile( ).pid( ) ); + + m_boundaries = particle.multiGroup( ).boundaries( ); +} + +/* *********************************************************************************************************//** + * This method is used by several constructors to get the multi-group data. + * + * @param a_protare [in] The GIDI::Protare containing the GIDI::Styles::MultiGroup style. + * @param a_temperatureInfo [in] This is used to determine the multi-group boundaries. + * @param a_particleID [in] The PoPs' id of the particle whose multi-group boundaries are desired. + ***********************************************************************************************************/ + +LUPI_HOST void MultiGroupHash::initialize( GIDI::Protare const &a_protare, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, std::string a_particleID ) { + + if( a_particleID == "" ) a_particleID = a_protare.projectile( ).ID( ); + + GIDI::Styles::Suite const &stylesSuite( a_protare.styles( ) ); + GIDI::Styles::HeatedMultiGroup const *heatedMultiGroupStyle1 = stylesSuite.get( a_temperatureInfo.heatedMultiGroup( ) ); + + m_boundaries = heatedMultiGroupStyle1->groupBoundaries( a_particleID ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void MultiGroupHash::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_DOUBLE( m_boundaries, a_buffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_energy.cc b/source/processes/hadronic/models/lend/src/MCGIDI_energy.cc deleted file mode 100644 index 0cc6dbc066..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_energy.cc +++ /dev/null @@ -1,661 +0,0 @@ -/* -# <> -# <> -*/ -#include -#define _USE_MATH_DEFINES -#include - - -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" -#include - -#if defined __cplusplus -#include "G4Exp.hh" -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_energy_parseWeightFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energyWeightedFunctional *weightedFunctional ); -static int MCGIDI_energy_parseWeightedFunctionalsFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ); -static int MCGIDI_energy_parseGeneralEvaporationFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ); -static int MCGIDI_energy_parseEvaporationFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ); -static int MCGIDI_energy_parseWattFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ); -static int MCGIDI_energy_parseSimpleMaxwellianFissionFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ); -static int MCGIDI_energy_parseMadlandNixFromTOM( statusMessageReporting *smr, xDataTOM_element *functional, MCGIDI_energy *energy ); -static nfu_status MCGIDI_energy_parseMadlandNixFromTOM_callback( double x, double *y, void *argList ); -static double MCGIDI_energy_parseMadlandNixFromTOM_callback_g( double Ep, double EFL, double T_M, nfu_status *status ); -static int MCGIDI_energy_parseNBodyPhaseSpaceFromTOM( statusMessageReporting *smr, xDataTOM_element *functional, MCGIDI_energy *energy, - MCGIDI_distribution *distribution ); - -static int MCGIDI_energy_sampleSimpleMaxwellianFission( statusMessageReporting *smr, double e_in_U_theta, MCGIDI_decaySamplingInfo *decaySamplingInfo ); -static int MCGIDI_energy_sampleEvaporation( statusMessageReporting *smr, double e_in_U_theta, MCGIDI_decaySamplingInfo *decaySamplingInfo ); -static int MCGIDI_energy_sampleWatt( statusMessageReporting *smr, double e_in_U, double Watt_a, double Watt_b, MCGIDI_decaySamplingInfo *decaySamplingInfo ); -static int MCGIDI_energy_sampleWeightedFunctional( statusMessageReporting *smr, MCGIDI_energy *energy, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo ); -static nfu_status MCGIDI_energy_NBodyPhaseSpacePDF_callback( double x, double *y, void *argList ); -/* -************************************************************ -*/ -MCGIDI_energy *MCGIDI_energy_new( statusMessageReporting *smr ) { - - MCGIDI_energy *energy; - - if( ( energy = (MCGIDI_energy *) smr_malloc2( smr, sizeof( MCGIDI_energy ), 0, "energy" ) ) == NULL ) return( NULL ); - if( MCGIDI_energy_initialize( smr, energy ) ) energy = MCGIDI_energy_free( smr, energy ); - return( energy ); -} -/* -************************************************************ -*/ -int MCGIDI_energy_initialize( statusMessageReporting * /*smr*/, MCGIDI_energy *energy ) { - - memset( energy, 0, sizeof( MCGIDI_energy ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_energy *MCGIDI_energy_free( statusMessageReporting *smr, MCGIDI_energy *energy ) { - - MCGIDI_energy_release( smr, energy ); - smr_freeMemory( (void **) &energy ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_energy_release( statusMessageReporting *smr, MCGIDI_energy *energy ) { - - int i; - - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(energy->dists) ); - if( energy->theta ) energy->theta = ptwXY_free( energy->theta ); - if( energy->Watt_a ) energy->Watt_a = ptwXY_free( energy->Watt_a ); - if( energy->Watt_b ) energy->Watt_b = ptwXY_free( energy->Watt_b ); - if( ( energy->type == MCGIDI_energyType_generalEvaporation ) || ( energy->type == MCGIDI_energyType_NBodyPhaseSpace ) ) { - MCGIDI_sampling_pdfsOfX_release( smr, &(energy->g) ); } - else if( energy->type == MCGIDI_energyType_weightedFunctional ) { - for( i = 0; i < energy->weightedFunctionals.numberOfWeights; i++ ) { - ptwXY_free( energy->weightedFunctionals.weightedFunctional[i].weight ); - MCGIDI_energy_free( smr, energy->weightedFunctionals.weightedFunctional[i].energy ); - } - } - - MCGIDI_energy_initialize( smr, energy ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_energy_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms, - enum MCGIDI_energyType energyType, double gammaEnergy_MeV ) { - - MCGIDI_energy *energy = NULL; - xDataTOM_element *energyElement, *linearElement, *functional, *frameElement; - char const *nativeData; - double projectileMass_MeV, targetMass_MeV; - - if( ( energy = MCGIDI_energy_new( smr ) ) == NULL ) goto err; - - projectileMass_MeV = MCGIDI_product_getProjectileMass_MeV( smr, distribution->product ); - targetMass_MeV = MCGIDI_product_getTargetMass_MeV( smr, distribution->product ); - energy->e_inCOMFactor = targetMass_MeV / ( projectileMass_MeV + targetMass_MeV ); - - if( ( energyType == MCGIDI_energyType_primaryGamma ) || ( energyType == MCGIDI_energyType_discreteGamma ) ) { - energy->type = energyType; - energy->gammaEnergy_MeV = gammaEnergy_MeV; - energy->frame = xDataTOM_frame_lab; /* BRB. This should not be hardwired?????? Probably needs to be changed in GND also. */ - if( energyType == MCGIDI_energyType_primaryGamma ) energy->primaryGammaMassFactor = energy->e_inCOMFactor; } - else { - if( ( energyElement = xDataTOME_getOneElementByName( smr, element, "energy", 1 ) ) == NULL ) goto err; - if( ( nativeData = xDataTOM_getAttributesValueInElement( energyElement, "nativeData" ) ) == NULL ) goto err; - if( ( linearElement = xDataTOME_getOneElementByName( NULL, energyElement, "linear", 0 ) ) == NULL ) - linearElement = xDataTOME_getOneElementByName( NULL, energyElement, "pointwise", 0 ); - if( linearElement == NULL ) { - if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "generalEvaporation", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseGeneralEvaporationFromTOM( smr, functional, energy ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "simpleMaxwellianFission", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseSimpleMaxwellianFissionFromTOM( smr, functional, energy ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "evaporation", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseEvaporationFromTOM( smr, functional, energy ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "Watt", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseWattFromTOM( smr, functional, energy ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "MadlandNix", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseMadlandNixFromTOM( smr, functional, energy ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "NBodyPhaseSpace", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseNBodyPhaseSpaceFromTOM( smr, functional, energy, distribution ) ) goto err; } - else if( ( functional = xDataTOME_getOneElementByName( NULL, energyElement, "weightedFunctionals", 0 ) ) != NULL ) { - if( MCGIDI_energy_parseWeightedFunctionalsFromTOM( smr, functional, energy ) ) goto err; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "unsupported energy type: nativeData = '%s'", nativeData ); - goto err; - } - frameElement = functional; } - else { - char const *toUnits[3] = { "MeV", "MeV", "1/MeV" }; - - frameElement = linearElement; - if( MCGIDI_fromTOM_pdfsOfXGivenW( smr, linearElement, &(energy->dists), norms, toUnits ) ) goto err; - energy->type = MCGIDI_energyType_linear; - } - if( ( energy->frame = MCGIDI_misc_getProductFrame( smr, frameElement ) ) == xDataTOM_frame_invalid ) goto err; - } - distribution->energy = energy; - - return( 0 ); - -err: - if( energy != NULL ) MCGIDI_energy_free( smr, energy ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseWeightedFunctionalsFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ) { - - int i; - xDataTOM_element *child; - - for( i = 0, child = xDataTOME_getFirstElement( element ); child != NULL; i++, child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "weighted" ) ) goto err; - if( MCGIDI_energy_parseWeightFromTOM( smr, child, &(energy->weightedFunctionals.weightedFunctional[i]) ) ) goto err; - energy->weightedFunctionals.numberOfWeights++; - } - energy->type = MCGIDI_energyType_weightedFunctional; - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseWeightFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energyWeightedFunctional *weightedFunctional ) { - - xDataTOM_element *child; - MCGIDI_energy *energy = NULL; - ptwXYPoints *weight = NULL; - char const *toUnits[2] = { "MeV", "" }; - - if( ( energy = MCGIDI_energy_new( smr ) ) == NULL ) goto err; - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "weight" ) == 0 ) { - if( ( weight = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, child, toUnits ) ) == NULL ) goto err; } - else if( strcmp( child->name, "evaporation" ) == 0 ) { - if( MCGIDI_energy_parseEvaporationFromTOM( smr, child, energy ) ) goto err; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "unsupported energy type = '%s' in weighted functional", child->name ); - goto err; - } - } - weightedFunctional->weight = weight; - weightedFunctional->energy = energy; - return( 0 ); - -err: - if( weight != NULL ) ptwXY_free( weight ); - if( energy != NULL ) MCGIDI_energy_free( smr, energy ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseGeneralEvaporationFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ) { - - double norm; - xDataTOM_element *thetaTOM, *gTOM; - ptwXYPoints *theta = NULL, *g = NULL; - char const *toUnits[2] = { "MeV", "MeV" }; - - if( ( thetaTOM = xDataTOME_getOneElementByName( smr, element, "theta", 1 ) ) == NULL ) goto err; - if( ( theta = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, thetaTOM, toUnits ) ) == NULL ) goto err; - - if( ( gTOM = xDataTOME_getOneElementByName( smr, element, "g", 1 ) ) == NULL ) goto err; - toUnits[0] = ""; - toUnits[1] = ""; - if( ( g = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, gTOM, toUnits ) ) == NULL ) goto err; - if( MCGIDI_fromTOM_pdfOfX( smr, g, &(energy->g), &norm ) ) goto err; - energy->gInterpolation = ptwXY_getInterpolation( g ); - g = ptwXY_free( g ); - if( std::fabs( 1. - norm ) > 0.001 ) printf( "bad norm = %e\n", norm ); - - energy->type = MCGIDI_energyType_generalEvaporation; - energy->theta = theta; - return( 0 ); - -err: - if( theta != NULL ) ptwXY_free( theta ); - if( g != NULL ) ptwXY_free( g ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseSimpleMaxwellianFissionFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ) { - - char const *U, *toUnits[2] = { "MeV", "MeV" }; - xDataTOM_element *thetaTOM; - - if( ( U = xDataTOM_getAttributesValueInElement( element, "U" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "functional form '%s' missing 'U' attribute", element->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, U, "MeV", &(energy->U) ) != 0 ) goto err; - if( ( thetaTOM = xDataTOME_getOneElementByName( smr, element, "theta", 1 ) ) == NULL ) goto err; - if( ( energy->theta = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, thetaTOM, toUnits ) ) == NULL ) goto err; - energy->type = MCGIDI_energyType_simpleMaxwellianFission; - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseEvaporationFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ) { - - char const *U, *toUnits[2] = { "MeV", "MeV" }; - xDataTOM_element *thetaTOM; - - if( ( U = xDataTOM_getAttributesValueInElement( element, "U" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "functional form '%s' missing 'U' attribute", element->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, U, "MeV", &(energy->U) ) != 0 ) goto err; - if( ( thetaTOM = xDataTOME_getOneElementByName( smr, element, "theta", 1 ) ) == NULL ) goto err; - if( ( energy->theta = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, thetaTOM, toUnits ) ) == NULL ) goto err; - energy->type = MCGIDI_energyType_evaporation; - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseWattFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_energy *energy ) { - - char const *U, *toUnits[2] = { "MeV", "MeV" }; - xDataTOM_element *aOrBTOM; - - if( ( U = xDataTOM_getAttributesValueInElement( element, "U" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "functional form '%s' missing 'U' attribute", element->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, U, "MeV", &(energy->U) ) != 0 ) goto err; - - if( ( aOrBTOM = xDataTOME_getOneElementByName( smr, element, "a", 1 ) ) == NULL ) goto err; - if( ( energy->Watt_a = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, aOrBTOM, toUnits ) ) == NULL ) goto err; - - toUnits[1] = "1/MeV"; - if( ( aOrBTOM = xDataTOME_getOneElementByName( smr, element, "b", 1 ) ) == NULL ) goto err; - if( ( energy->Watt_b = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, aOrBTOM, toUnits ) ) == NULL ) goto err; - - energy->type = MCGIDI_energyType_Watt; - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseMadlandNixFromTOM( statusMessageReporting *smr, xDataTOM_element *functional, MCGIDI_energy *energy ) { - - int iE, length, nXs, i1, n; - double E=0., T_M=0., EFL=0., EFH=0., argList[3] = { 0., 0., 0. }, - xs[] = { 1e-5, 1e-3, 1e-1, 1e1, 1e3, 1e5, 3e7 }, norm; - ptwXYPoints *ptwXY_TM = NULL, *pdfXY = NULL; - ptwXYPoint *point; - ptwXPoints *cdfX = NULL; - nfu_status status = nfu_Okay; - xDataTOM_element *TM_TOM; - xDataTOM_XYs *XYs; - MCGIDI_pdfsOfXGivenW *dists = &(energy->dists); - MCGIDI_pdfOfX *dist; - char const *EF, *TMUnits[2] = { "MeV", "MeV" }; - - nXs = sizeof( xs ) / sizeof( xs[0] ); - - if( ( EF = xDataTOM_getAttributesValueInElement( functional, "EFL" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "MadlandNix '%s' missing 'EFL' attribute", functional->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, EF, TMUnits[0], &EFL ) != 0 ) goto err; - argList[0] = EFL; - - if( ( EF = xDataTOM_getAttributesValueInElement( functional, "EFH" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "MadlandNix '%s' missing 'EFH' attribute", functional->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, EF, TMUnits[0], &EFH ) != 0 ) goto err; - argList[1] = EFH; - - if( ( TM_TOM = xDataTOME_getOneElementByName( smr, functional, "T_M", 1 ) ) == NULL ) goto err; - if( ( XYs = (xDataTOM_XYs *) xDataTOME_getXDataIfID( smr, TM_TOM, "XYs" ) ) == NULL ) goto err; - if( ( ptwXY_TM = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, ptwXY_interpolationLinLin, TMUnits ) ) == NULL ) goto err; - - length = (int) ptwXY_length( ptwXY_TM ); - dists->interpolationWY = ptwXY_interpolationLinLin; - dists->interpolationXY = ptwXY_interpolationLinLin; /* Ignoring what the data says as it is probably wrong. */ - if( ( dists->Ws = (double *) smr_malloc2( smr, length * sizeof( double ), 1, "dists->Ws" ) ) == NULL ) goto err; - if( ( dists->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, length * sizeof( MCGIDI_pdfOfX ), 0, "dists->dist" ) ) == NULL ) goto err; - - for( iE = 0; iE < length; iE++ ) { - ptwXY_getXYPairAtIndex( ptwXY_TM, iE, &E, &T_M ); - argList[2] = T_M; - dist = &(dists->dist[iE]); - dists->Ws[iE] = E; - - if( ( pdfXY = ptwXY_createFromFunction( nXs, xs, (ptwXY_createFromFunction_callback) MCGIDI_energy_parseMadlandNixFromTOM_callback, - (void *) argList, 1e-3, 0, 12, &status ) ) == NULL ) goto err; - if( ( status = ptwXY_normalize( pdfXY ) ) != nfu_Okay ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_normalize err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - - if( ptwXY_simpleCoalescePoints( pdfXY ) != nfu_Okay ) goto err; - dist->numberOfXs = n = (int) ptwXY_length( pdfXY ); - - if( ( dist->Xs = (double *) smr_malloc2( smr, 3 * n * sizeof( double ), 0, "dist->Xs" ) ) == NULL ) goto err; - dists->numberOfWs++; - dist->pdf = &(dist->Xs[n]); - dist->cdf = &(dist->pdf[n]); - - for( i1 = 0; i1 < n; i1++ ) { - point = ptwXY_getPointAtIndex_Unsafely( pdfXY, i1 ); - dist->Xs[i1] = point->x; - dist->pdf[i1] = point->y; - } - - if( ( cdfX = ptwXY_runningIntegral( pdfXY, &status ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_runningIntegral err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - - norm = ptwX_getPointAtIndex_Unsafely( cdfX, n - 1 ); - for( i1 = 0; i1 < n; i1++ ) dist->cdf[i1] = ptwX_getPointAtIndex_Unsafely( cdfX, i1 ) / norm; - for( i1 = 0; i1 < n; i1++ ) dist->pdf[i1] /= norm; - pdfXY = ptwXY_free( pdfXY ); - cdfX = ptwX_free( cdfX ); - } - - energy->type = MCGIDI_energyType_MadlandNix; - - ptwXY_free( ptwXY_TM ); - return( 0 ); - -err: - if( ptwXY_TM != NULL ) ptwXY_free( ptwXY_TM ); - if( pdfXY != NULL ) ptwXY_free( pdfXY ); - if( cdfX != NULL ) cdfX = ptwX_free( cdfX ); - - return( 1 ); -} -/* -************************************************************ -*/ -static nfu_status MCGIDI_energy_parseMadlandNixFromTOM_callback( double Ep, double *y, void *argList ) { - - double *parameters = (double *) argList, EFL, EFH, T_M; - nfu_status status = nfu_Okay; - - EFL = parameters[0]; - EFH = parameters[1]; - T_M = parameters[2]; - *y = MCGIDI_energy_parseMadlandNixFromTOM_callback_g( Ep, EFL, T_M, &status ); - if( status == nfu_Okay ) *y += MCGIDI_energy_parseMadlandNixFromTOM_callback_g( Ep, EFH, T_M, &status ); - *y *= 0.5; - return( status ); -} -/* -************************************************************ -*/ -static double MCGIDI_energy_parseMadlandNixFromTOM_callback_g( double Ep, double E_F, double T_M, nfu_status *status ) { - - double u1, u2, E1, E2 = 0., gamma1 = 0., gamma2 = 0., signG = 1; - - u1 = std::sqrt( Ep ) - std::sqrt( E_F ); - u1 *= u1 / T_M; - u2 = std::sqrt( Ep ) + std::sqrt( E_F ); - u2 *= u2 / T_M; - E1 = 0; /* u1^3/2 * E1 is zero for u1 = 0. but E1 is infinity, whence, the next test. */ - if( u1 != 0 ) E1 = nf_exponentialIntegral( 1, u1, status ); - if( *status == nfu_Okay ) E2 = nf_exponentialIntegral( 1, u2, status ); - if( *status != nfu_Okay ) return( 0. ); - if( u1 > 2. ) { - signG = -1; - gamma1 = nf_incompleteGammaFunctionComplementary( 1.5, u1, status ); - if( *status == nfu_Okay ) gamma2 = nf_incompleteGammaFunctionComplementary( 1.5, u2, status ); } - else { - gamma1 = nf_incompleteGammaFunction( 1.5, u1, status ); - if( *status == nfu_Okay ) gamma2 = nf_incompleteGammaFunction( 1.5, u2, status ); - } - if( *status != nfu_Okay ) return( 0. ); - return( ( u2 * std::sqrt( u2 ) * E2 - u1 * std::sqrt( u1 ) * E1 + signG * ( gamma2 - gamma1 ) ) / ( 3 * std::sqrt( E_F * T_M ) ) ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_parseNBodyPhaseSpaceFromTOM( statusMessageReporting *smr, xDataTOM_element *functional, MCGIDI_energy *energy, - MCGIDI_distribution *distribution ) { - - int argList[1]; - double xs[2] = { 0.0, 1.0 }, productMass_MeV, norm; - ptwXYPoints *pdf = NULL; - nfu_status status; - char const *mass; - - if( xDataTOME_convertAttributeToInteger( NULL, functional, "numberOfProducts", &(energy->NBodyPhaseSpace.numberOfProducts) ) != 0 ) goto err; - if( ( mass = xDataTOM_getAttributesValueInElement( functional, "mass" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "functional form '%s' missing 'mass' attribute", functional->name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDouble( smr, mass, "amu", MCGIDI_AMU2MeV, &(energy->NBodyPhaseSpace.mass) ) ) goto err; - argList[0] = energy->NBodyPhaseSpace.numberOfProducts; - if( ( pdf = ptwXY_createFromFunction( 2, xs, MCGIDI_energy_NBodyPhaseSpacePDF_callback, (void *) argList, 1e-3, 0, 16, &status ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "creating NBodyPhaseSpace pdf failed with ptwXY_createFromFunction error = %d (%s)", - status, nfu_statusMessage( status ) ); - goto err; - } - if( MCGIDI_fromTOM_pdfOfX( smr, pdf, &(energy->g), &norm ) ) goto err; - productMass_MeV = MCGIDI_product_getMass_MeV( smr, distribution->product ); - if( !smr_isOk( smr ) ) goto err; - energy->NBodyPhaseSpace.massFactor = ( 1. - productMass_MeV / ( MCGIDI_AMU2MeV * energy->NBodyPhaseSpace.mass ) ); /* ??????? Hardwired MCGIDI_AMU2MeV */ - energy->NBodyPhaseSpace.Q_MeV = MCGIDI_outputChannel_getQ_MeV( smr, distribution->product->outputChannel, 0. ); - if( !smr_isOk( smr ) ) goto err; - - ptwXY_free( pdf ); - energy->type = MCGIDI_energyType_NBodyPhaseSpace; - - return( 0 ); - -err: - if( pdf != NULL ) ptwXY_free( pdf ); - return( 1 ); -} -/* -************************************************************ -*/ -static nfu_status MCGIDI_energy_NBodyPhaseSpacePDF_callback( double x, double *y, void *argList ) { - - int numberOfProducts = *((int *) argList); - double e = 0.5 * ( 3 * numberOfProducts - 8 ); - - *y = std::sqrt( x ) * G4Pow::GetInstance()->powA( 1.0 - x, e ); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -int MCGIDI_energy_sampleEnergy( statusMessageReporting *smr, MCGIDI_energy *energy, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { -/* -* This function must be called before angular sampling as it sets the frame but does not test it. -*/ - double theta, randomEp, Watt_a, Watt_b, e_in = modes.getProjectileEnergy( ); - MCGIDI_pdfsOfXGivenW_sampled sampled; - - decaySamplingInfo->frame = energy->frame; - switch( energy->type ) { - case MCGIDI_energyType_primaryGamma : - decaySamplingInfo->Ep = energy->gammaEnergy_MeV + e_in * energy->primaryGammaMassFactor; - break; - case MCGIDI_energyType_discreteGamma : - decaySamplingInfo->Ep = energy->gammaEnergy_MeV; - break; - case MCGIDI_energyType_linear : - randomEp = decaySamplingInfo->rng( decaySamplingInfo->rngState ); - sampled.smr = smr; - sampled.w = e_in; - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( &(energy->dists), &sampled, randomEp ); - decaySamplingInfo->Ep = sampled.x; - break; - case MCGIDI_energyType_generalEvaporation : - sampled.interpolationXY = energy->gInterpolation; - MCGIDI_sampling_sampleX_from_pdfOfX( &(energy->g), &sampled, decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - theta = MCGIDI_sampling_ptwXY_getValueAtX( energy->theta, e_in ); - decaySamplingInfo->Ep = theta * sampled.x; - break; - case MCGIDI_energyType_simpleMaxwellianFission : - theta = MCGIDI_sampling_ptwXY_getValueAtX( energy->theta, e_in ); - MCGIDI_energy_sampleSimpleMaxwellianFission( smr, ( e_in - energy->U ) / theta, decaySamplingInfo ); - decaySamplingInfo->Ep *= theta; - break; - case MCGIDI_energyType_evaporation : - theta = MCGIDI_sampling_ptwXY_getValueAtX( energy->theta, e_in ); - MCGIDI_energy_sampleEvaporation( smr, ( e_in - energy->U ) / theta, decaySamplingInfo ); - decaySamplingInfo->Ep *= theta; - break; - case MCGIDI_energyType_Watt : - Watt_a = MCGIDI_sampling_ptwXY_getValueAtX( energy->Watt_a, e_in ); - Watt_b = MCGIDI_sampling_ptwXY_getValueAtX( energy->Watt_b, e_in ); - MCGIDI_energy_sampleWatt( smr, e_in - energy->U, Watt_a, Watt_b, decaySamplingInfo ); - break; - case MCGIDI_energyType_MadlandNix : - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( &(energy->dists), &sampled, decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - decaySamplingInfo->Ep = sampled.x; - break; - case MCGIDI_energyType_NBodyPhaseSpace : - MCGIDI_sampling_sampleX_from_pdfOfX( &(energy->g), &sampled, decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - decaySamplingInfo->Ep = ( energy->e_inCOMFactor * e_in + energy->NBodyPhaseSpace.Q_MeV ) * energy->NBodyPhaseSpace.massFactor * sampled.x; - break; - case MCGIDI_energyType_weightedFunctional : - MCGIDI_energy_sampleWeightedFunctional( smr, energy, modes, decaySamplingInfo ); - break; - default : - smr_setReportError2( smr, smr_unknownID, 1, "energy type = %d not supported", energy->type ); - } - - return( !smr_isOk( smr ) ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_sampleSimpleMaxwellianFission( statusMessageReporting * /*smr*/, double e_in_U_theta, MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - int i1; - double a = e_in_U_theta, b, c, x, norm_a, xMin = 0., xMax = a, sqrt_x, sqrt_pi_2 = std::sqrt( M_PI ) / 2.; - - sqrt_x = std::sqrt( a ); - norm_a = sqrt_pi_2 * erf( sqrt_x ) - sqrt_x * G4Exp( -a ); - b = norm_a * decaySamplingInfo->rng( decaySamplingInfo->rngState ); - for( i1 = 0; i1 < 16; i1++ ) { - x = 0.5 * ( xMin + xMax ); - sqrt_x = std::sqrt( x ); - c = sqrt_pi_2 * erf( sqrt_x ) - sqrt_x * G4Exp( -x ); - if( b < c ) { - xMax = x; } - else { - xMin = x; - } - } - /* To order e, the correct x is x + e where e = 1 + ( 1 - b * exp( x ) ) / x. */ - decaySamplingInfo->Ep = x; - - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_sampleEvaporation( statusMessageReporting * /*smr*/, double e_in_U_theta, MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - int i1; - double a = e_in_U_theta, b, c, x, norm_a, xMin = 0., xMax = a; - - norm_a = 1 - ( 1 + a ) * G4Exp( -a ); - b = 1. - norm_a * decaySamplingInfo->rng( decaySamplingInfo->rngState ); - for( i1 = 0; i1 < 16; i1++ ) { - x = 0.5 * ( xMin + xMax ); - c = ( 1 + x ) * G4Exp( -x ); - if( b > c ) { - xMax = x; } - else { - xMin = x; - } - } - /* To order e, the correct x is x + e where e = 1 + ( 1 - b * std::exp( x ) ) / x. */ - decaySamplingInfo->Ep = x; - - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_sampleWatt( statusMessageReporting * /*smr*/, double e_in_U, double Watt_a, double Watt_b, MCGIDI_decaySamplingInfo *decaySamplingInfo ) { -/* -* From MCAPM via Sample Watt Spectrum as in TART ( Kalos algorithm ). -*/ - double WattMin = 0., WattMax = e_in_U, x, y, z, energyOut = 0., rand1, rand2; - - x = 1. + ( Watt_b / ( 8. * Watt_a ) ); - y = ( x + std::sqrt( x * x - 1. ) ) / Watt_a; - z = Watt_a * y - 1.; - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - rand1 = -G4Log( decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - rand2 = -G4Log( decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - energyOut = y * rand1; - } - while( ( ( rand2 - z * ( rand1 + 1. ) ) * ( rand2 - z * ( rand1 + 1. ) ) > Watt_b * y * rand1 ) || ( energyOut < WattMin ) || ( energyOut > WattMax ) ); // Loop checking, 11.06.2015, T. Koi - decaySamplingInfo->Ep = energyOut; - - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energy_sampleWeightedFunctional( statusMessageReporting *smr, MCGIDI_energy *energy, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo ) { -/* -c This routine assumes that the weights sum to 1. -*/ - int iW; - double rW = decaySamplingInfo->rng( decaySamplingInfo->rngState ), cumulativeW = 0., weight; - MCGIDI_energyWeightedFunctional *weightedFunctional = NULL; - - for( iW = 0; iW < energy->weightedFunctionals.numberOfWeights; iW++ ) { - weightedFunctional = &(energy->weightedFunctionals.weightedFunctional[iW]); - weight = MCGIDI_sampling_ptwXY_getValueAtX( weightedFunctional->weight, modes.getProjectileEnergy( ) ); - cumulativeW += weight; - if( cumulativeW >= rW ) break; - } - return( MCGIDI_energy_sampleEnergy( smr, weightedFunctional->energy, modes, decaySamplingInfo ) ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_energyAngular.cc b/source/processes/hadronic/models/lend/src/MCGIDI_energyAngular.cc deleted file mode 100644 index b6e0a422e3..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_energyAngular.cc +++ /dev/null @@ -1,197 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "MCGIDI_fromTOM.h" -#include "MCGIDI.h" -#include "MCGIDI_misc.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_energyAngular_linear_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ); -/* -************************************************************ -*/ -MCGIDI_energyAngular *MCGIDI_energyAngular_new( statusMessageReporting *smr ) { - - MCGIDI_energyAngular *energyAngular; - - if( ( energyAngular = (MCGIDI_energyAngular *) smr_malloc2( smr, sizeof( MCGIDI_energyAngular ), 0, "energyAngular" ) ) == NULL ) return( NULL ); - if( MCGIDI_energyAngular_initialize( smr, energyAngular ) ) energyAngular = MCGIDI_energyAngular_free( smr, energyAngular ); - return( energyAngular ); -} -/* -************************************************************ -*/ -int MCGIDI_energyAngular_initialize( statusMessageReporting * /*smr*/, MCGIDI_energyAngular *energyAngular ) { - - memset( energyAngular, 0, sizeof( MCGIDI_energyAngular ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_energyAngular *MCGIDI_energyAngular_free( statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular ) { - - MCGIDI_energyAngular_release( smr, energyAngular ); - smr_freeMemory( (void **) &energyAngular ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_energyAngular_release( statusMessageReporting *smr, MCGIDI_energyAngular *energyAngular ) { - - int i; - - for( i = 0; i < energyAngular->pdfOfEpGivenE.numberOfWs; i++ ) { - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(energyAngular->pdfOfMuGivenEAndEp[i]) ); - } - smr_freeMemory( (void **) &(energyAngular->pdfOfMuGivenEAndEp) ); - MCGIDI_sampling_pdfsOfXGivenW_release( smr, &(energyAngular->pdfOfEpGivenE) ); - MCGIDI_energyAngular_initialize( smr, energyAngular ); - - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_energyAngular_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - xDataTOM_element *energyAngularElement; - char const *nativeData; - - if( ( energyAngularElement = xDataTOME_getOneElementByName( smr, element, "energyAngular", 1 ) ) == NULL ) goto err; - - if( ( nativeData = xDataTOM_getAttributesValueInElement( energyAngularElement, "nativeData" ) ) == NULL ) goto err; - if( strcmp( nativeData, "KalbachMann" ) == 0 ) { - return( MCGIDI_KalbachMann_parseFromTOM( smr, energyAngularElement, distribution ) ); } - else if( strcmp( nativeData, "linear" ) == 0 ) { - return( MCGIDI_energyAngular_linear_parseFromTOM( smr, energyAngularElement, distribution ) ); } - else { - smr_setReportError2( smr, smr_unknownID, 1, "energyAngular nativeData = '%s' not supported", nativeData ); - goto err; - } - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_energyAngular_linear_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution ) { - - int iV, iW; - double y, norm, energyInFactor, energyOutFactor; - char const *energyUnit, *multiplicityProbabilityUnits[2] = { "", "1/MeV" }; - xDataTOM_element *linear; - ptwXY_interpolation interpolationXY, interpolationWY, interpolationVY; - xDataTOM_XYs *XYs; - xDataTOM_W_XYs *W_XYs; - xDataTOM_V_W_XYs *V_W_XYs; - MCGIDI_pdfsOfXGivenW *pdfOfEpGivenE, *pdfOfMuGivenEAndEp = NULL, *pdfOfMuGivenEAndEp2 = NULL; - MCGIDI_energyAngular *energyAngular = NULL; - ptwXYPoints *pdfXY1 = NULL, *pdfXY2 = NULL; - nfu_status status; - - if( ( linear = xDataTOME_getOneElementByName( smr, element, "linear", 1 ) ) == NULL ) goto err; - - if( MCGIDI_fromTOM_interpolation( smr, linear, 0, &interpolationVY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, linear, 1, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, linear, 2, &interpolationXY ) ) goto err; - - if( ( energyAngular = MCGIDI_energyAngular_new( smr ) ) == NULL ) goto err; - if( ( energyAngular->frame = MCGIDI_misc_getProductFrame( smr, linear ) ) == xDataTOM_frame_invalid ) goto err; - - pdfOfEpGivenE = &(energyAngular->pdfOfEpGivenE); - pdfOfEpGivenE->interpolationWY = interpolationVY; - pdfOfEpGivenE->interpolationXY = interpolationWY; - - if( ( V_W_XYs = (xDataTOM_V_W_XYs *) xDataTOME_getXDataIfID( smr, linear, "V_W_XYs" ) ) == NULL ) goto err; - if( ( pdfOfEpGivenE->Ws = (double *) smr_malloc2( smr, V_W_XYs->length * sizeof( double ), 1, "pdfOfEpGivenE->Ws" ) ) == NULL ) goto err; - if( ( pdfOfEpGivenE->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfEpGivenE->dist" ) ) == NULL ) goto err; - if( ( pdfOfMuGivenEAndEp = (MCGIDI_pdfsOfXGivenW *) smr_malloc2( smr, V_W_XYs->length * sizeof( MCGIDI_pdfsOfXGivenW ), 1, "pdfOfMuGivenEAndEp" ) ) == NULL ) goto err; - - energyUnit = xDataTOM_subAxes_getUnit( smr, &(V_W_XYs->subAxes), 0 ); - if( !smr_isOk( smr ) ) goto err; - energyInFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" ); - if( !smr_isOk( smr ) ) goto err; - - energyUnit = xDataTOM_subAxes_getUnit( smr, &(V_W_XYs->subAxes), 1 ); - if( !smr_isOk( smr ) ) goto err; - energyOutFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" ); - if( !smr_isOk( smr ) ) goto err; - - for( iV = 0; iV < V_W_XYs->length; iV++ ) { - W_XYs = &(V_W_XYs->W_XYs[iV]); - pdfOfMuGivenEAndEp2 = &(pdfOfMuGivenEAndEp[iV]); - pdfOfMuGivenEAndEp2->interpolationWY = interpolationWY; - pdfOfMuGivenEAndEp2->interpolationXY = interpolationXY; - if( ( pdfXY2 = ptwXY_new( interpolationWY, NULL, 2., 1e-6, W_XYs->length, 10, &status, 0 ) ) == NULL ) goto errA; - if( ( pdfOfMuGivenEAndEp2->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "pdfOfMuGivenEAndEp2->Ws" ) ) == NULL ) goto err; - if( ( pdfOfMuGivenEAndEp2->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "pdfOfMuGivenEAndEp2->dist" ) ) == NULL ) goto err; - for( iW = 0; iW < W_XYs->length; iW++ ) { - XYs = &(W_XYs->XYs[iW]); - if( ( pdfXY1 = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, multiplicityProbabilityUnits ) ) == NULL ) goto err; - y = ptwXY_integrateDomain( pdfXY1, &status ); - if( ( status = ptwXY_setValueAtX( pdfXY2, energyOutFactor * XYs->value, y ) ) != nfu_Okay ) goto errA; - - if( y == 0 ) { - if( ( status = ptwXY_add_double( pdfXY1, 0.5 ) ) != nfu_Okay ) goto errA; - } - pdfOfMuGivenEAndEp2->Ws[iW] = energyOutFactor * XYs->value; - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY1, &(pdfOfMuGivenEAndEp2->dist[iW]), &norm ) ) goto err; - pdfOfMuGivenEAndEp2->numberOfWs++; - - pdfXY1 = ptwXY_free( pdfXY1 ); - } - pdfOfEpGivenE->Ws[iV] = energyInFactor * W_XYs->value; - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY2, &(pdfOfEpGivenE->dist[iV]), &norm ) ) goto err; - pdfOfEpGivenE->numberOfWs++; - - pdfXY2 = ptwXY_free( pdfXY2 ); - } - energyAngular->pdfOfMuGivenEAndEp = pdfOfMuGivenEAndEp; - distribution->energyAngular = energyAngular; - distribution->type = MCGIDI_distributionType_energyAngular_e; - - return( 0 ); - -errA: - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_integrateDomain err = %d: %s\n", status, nfu_statusMessage( status ) ); -err: - if( pdfXY1 != NULL ) ptwXY_free( pdfXY1 ); - if( pdfXY2 != NULL ) ptwXY_free( pdfXY2 ); - if( energyAngular != NULL ) MCGIDI_energyAngular_free( smr, energyAngular ); -/* ????????? Need to free pdfOfMuGivenEAndEp, now may be handled by MCGIDI_energyAngular_free. Need to check. */ - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_energyAngular_sampleDistribution( statusMessageReporting *smr, MCGIDI_distribution *distribution, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - double Ep; - MCGIDI_energyAngular *energyAngular = distribution->energyAngular; - - MCGIDI_sampling_doubleDistribution( smr, &(energyAngular->pdfOfEpGivenE), energyAngular->pdfOfMuGivenEAndEp, modes, decaySamplingInfo ); - Ep = decaySamplingInfo->mu; - decaySamplingInfo->mu = decaySamplingInfo->Ep; - decaySamplingInfo->Ep = Ep; - decaySamplingInfo->frame = energyAngular->frame; - - return( 0 ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_fromTOM.cc b/source/processes/hadronic/models/lend/src/MCGIDI_fromTOM.cc deleted file mode 100644 index c9a7cec539..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_fromTOM.cc +++ /dev/null @@ -1,173 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include -/* -#include -#include -*/ - -#include "MCGIDI_fromTOM.h" -#include "MCGIDI_misc.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_fromTOM_pdfOfXGivenW( statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfsOfXGivenW *dists, int i, double *norm ); -/* -************************************************************ -*/ -int MCGIDI_fromTOM_pdfsOfXGivenW( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_pdfsOfXGivenW *dists, ptwXYPoints *norms, - char const *toUnits[3] ) { - - int i; - double norm, wUnitFactor; - char const *wFromUnit, *toUnitsXY[2] = { toUnits[1], toUnits[2] }; - xDataTOM_XYs *XYs; - xDataTOM_W_XYs *W_XYs; - ptwXYPoints *pdfXY = NULL; - ptwXY_interpolation interpolationXY, interpolationWY; - - wFromUnit = xDataTOM_axes_getUnit( smr, &(element->xDataInfo.axes), 0 ); - if( !smr_isOk( smr ) ) goto err; - wUnitFactor = MCGIDI_misc_getUnitConversionFactor( smr, wFromUnit, toUnits[0] ); - if( !smr_isOk( smr ) ) goto err; - - if( MCGIDI_fromTOM_interpolation( smr, element, 0, &interpolationWY ) ) goto err; - if( MCGIDI_fromTOM_interpolation( smr, element, 1, &interpolationXY ) ) goto err; - dists->interpolationWY = interpolationWY; - dists->interpolationXY = interpolationXY; - if( norms != NULL ) { - if( interpolationWY == ptwXY_interpolationOther ) { - smr_setReportError2p( smr, smr_unknownID, 1, "interpolationWY ptwXY_interpolationOther not supported" ); - goto err; - } - } - - W_XYs = (xDataTOM_W_XYs *) xDataTOME_getXDataIfID( smr, element, "W_XYs" ); - if( ( dists->Ws = (double *) smr_malloc2( smr, W_XYs->length * sizeof( double ), 1, "dists->Ws" ) ) == NULL ) goto err; - if( ( dists->dist = (MCGIDI_pdfOfX *) smr_malloc2( smr, W_XYs->length * sizeof( MCGIDI_pdfOfX ), 0, "dists->dist" ) ) == NULL ) goto err; - - for( i = 0; i < W_XYs->length; i++ ) { - XYs = &(W_XYs->XYs[i]); - dists->Ws[i] = wUnitFactor * XYs->value; - if( ( pdfXY = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, interpolationXY, toUnitsXY ) ) == NULL ) goto err; - if( MCGIDI_fromTOM_pdfOfXGivenW( smr, pdfXY, dists, i, &norm ) ) goto err; - if( norms != NULL ) { - ptwXY_setValueAtX( norms, XYs->value, norm ); } - else if( std::fabs( 1. - norm ) > 0.99 ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad norm = %e for data", norm ); - goto err; - } - ptwXY_free( pdfXY ); - pdfXY = NULL; - } - - return( 0 ); - -err: - if( pdfXY != NULL ) ptwXY_free( pdfXY ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_fromTOM_pdfOfXGivenW( statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfsOfXGivenW *dists, int i, double *norm ) { - - if( MCGIDI_fromTOM_pdfOfX( smr, pdfXY, &(dists->dist[i]), norm ) ) return( 1 ); - dists->numberOfWs++; - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_fromTOM_pdfOfX( statusMessageReporting *smr, ptwXYPoints *pdfXY, MCGIDI_pdfOfX *dist, double *norm ) { - - int j1, n1 = (int) ptwXY_length( pdfXY ); - nfu_status status; - ptwXPoints *cdfX = NULL; - ptwXYPoint *point; - - dist->numberOfXs = 0; - dist->Xs = NULL; - if( ptwXY_simpleCoalescePoints( pdfXY ) != nfu_Okay ) goto err; - - if( ( dist->Xs = (double *) smr_malloc2( smr, 3 * n1 * sizeof( double ), 0, "dist->Xs" ) ) == NULL ) goto err; - dist->pdf = &(dist->Xs[n1]); - dist->cdf = &(dist->pdf[n1]); - - for( j1 = 0; j1 < n1; j1++ ) { - point = ptwXY_getPointAtIndex_Unsafely( pdfXY, j1 ); - dist->Xs[j1] = point->x; - dist->pdf[j1] = point->y; - } - - if( ( cdfX = ptwXY_runningIntegral( pdfXY, &status ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_runningIntegral err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - *norm = ptwX_getPointAtIndex_Unsafely( cdfX, n1 - 1 ); - if( *norm == 0. ) { /* Should only happend for gammas. */ - double inv_norm, sum = 0; - - inv_norm = 1.0 / ( dist->Xs[n1-1] - dist->Xs[0] ); - for( j1 = 0; j1 < n1; ++j1 ) { - if( j1 > 0 ) sum += dist->Xs[j1] - dist->Xs[j1-1]; - dist->pdf[j1] = 1; - dist->cdf[j1] = sum * inv_norm; - } - dist->cdf[n1-1] = 1.; } - else { - for( j1 = 0; j1 < n1; j1++ ) dist->cdf[j1] = ptwX_getPointAtIndex_Unsafely( cdfX, j1 ) / *norm; - for( j1 = 0; j1 < n1; j1++ ) dist->pdf[j1] /= *norm; - } - ptwX_free( cdfX ); - - dist->numberOfXs = n1; - return( 0 ); - -err: - if( dist->Xs != NULL ) smr_freeMemory( (void **) &(dist->Xs) ); - if( cdfX != NULL ) ptwX_free( cdfX ); - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_fromTOM_interpolation( statusMessageReporting *smr, xDataTOM_element *element, int index, ptwXY_interpolation *interpolation ) { - - enum xDataTOM_interpolationFlag independent, dependent; - enum xDataTOM_interpolationQualifier qualifier; - - if( xDataTOME_getInterpolation( smr, element, index, &independent, &dependent, &qualifier ) ) return( 1 ); - - *interpolation = ptwXY_interpolationOther; - - if( dependent == xDataTOM_interpolationFlag_flat ) { - *interpolation = ptwXY_interpolationFlat; } - else if( independent == xDataTOM_interpolationFlag_linear ) { - if( dependent == xDataTOM_interpolationFlag_linear ) { - *interpolation = ptwXY_interpolationLinLin; } - else if( dependent == xDataTOM_interpolationFlag_log ) { - *interpolation = ptwXY_interpolationLinLog; - } } - else if( independent == xDataTOM_interpolationFlag_log ) { - if( dependent == xDataTOM_interpolationFlag_linear ) { - *interpolation = ptwXY_interpolationLogLin; } - else if( dependent == xDataTOM_interpolationFlag_log ) { - *interpolation = ptwXY_interpolationLogLog; - } - } - - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_functions.cc b/source/processes/hadronic/models/lend/src/MCGIDI_functions.cc new file mode 100644 index 0000000000..5828c28112 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_functions.cc @@ -0,0 +1,4105 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +namespace Functions { + +/* +============================================================ +======================= FunctionBase ===================== +============================================================ +*/ +LUPI_HOST_DEVICE FunctionBase::FunctionBase( ) : + m_dimension( 0 ), + m_domainMin( 0.0 ), + m_domainMax( 0.0 ), + m_interpolation( Interpolation::LINLIN ), + m_outerDomainValue( 0.0 ) { + +} +/* +============================================================ +*/ +LUPI_HOST FunctionBase::FunctionBase( GIDI::Functions::FunctionForm const &a_function ) : + m_dimension( a_function.dimension( ) ), + m_domainMin( a_function.domainMin( ) ), + m_domainMax( a_function.domainMax( ) ), + m_interpolation( GIDI2MCGIDI_interpolation( a_function.interpolation( ) ) ), + m_outerDomainValue( a_function.outerDomainValue( ) ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE FunctionBase::FunctionBase( int a_dimension, double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue ) : + m_dimension( a_dimension ), + m_domainMin( a_domainMin ), + m_domainMax( a_domainMax ), + m_interpolation( a_interpolation ), + m_outerDomainValue( a_outerDomainValue ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE FunctionBase::~FunctionBase( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void FunctionBase::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_dimension, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_domainMin, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_domainMax, a_buffer, a_mode ); + + int interpolation = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_interpolation ) { + case Interpolation::FLAT : + break; + case Interpolation::LINLIN : + interpolation = 1; + break; + case Interpolation::LINLOG : + interpolation = 2; + break; + case Interpolation::LOGLIN : + interpolation = 3; + break; + case Interpolation::LOGLOG : + interpolation = 4; + break; + case Interpolation::OTHER : + interpolation = 5; + break; + } + } + DATA_MEMBER_INT( interpolation, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( interpolation ) { + case 0 : + m_interpolation = Interpolation::FLAT; + break; + case 1 : + m_interpolation = Interpolation::LINLIN; + break; + case 2 : + m_interpolation = Interpolation::LINLOG; + break; + case 3 : + m_interpolation = Interpolation::LOGLIN; + break; + case 4 : + m_interpolation = Interpolation::LOGLOG; + break; + case 5 : + m_interpolation = Interpolation::OTHER; + break; + } + } + + DATA_MEMBER_DOUBLE( m_outerDomainValue, a_buffer, a_mode ); +} + +/* +============================================================ +========================= Function1d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Function1d::Function1d( ) : + m_type( Function1dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE Function1d::Function1d( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue ) : + FunctionBase( 1, a_domainMin, a_domainMax, a_interpolation, a_outerDomainValue ), + m_type( Function1dType::none ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Function1d::~Function1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns a String representation of the **Function1d** type of *this*. + * + * @return A String instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE String Function1d::typeString( ) const { + + String typeStr( "Function1d::" ); + + switch( m_type ) { + case Function1dType::none : + typeStr += "none"; + break; + case Function1dType::constant : + typeStr += "constant"; + break; + case Function1dType::XYs : + typeStr += "XYs"; + break; + case Function1dType::polyomial : + typeStr += "polyomial"; + break; + case Function1dType::gridded : + typeStr += "gridded"; + break; + case Function1dType::regions : + typeStr += "regions"; + break; + case Function1dType::branching : + typeStr += "branching"; + break; + case Function1dType::TerrellFissionNeutronMultiplicityModel : + typeStr += "TerrellFissionNeutronMultiplicityModel"; + break; + } + + return( typeStr ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function at *a_x1*. + * + * @param a_x1 [in] The x-value to evaluate the function at. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Function1d::evaluate( double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case Function1dType::none: + break; + case Function1dType::constant: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::XYs: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::polyomial: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::gridded: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::regions: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::branching: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::TerrellFissionNeutronMultiplicityModel: + value = static_cast( this )->evaluate( a_x1 ); + break; + } + + return( value ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Function1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + FunctionBase::serialize( a_buffer, a_mode ); + + int type = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_type ) { + case Function1dType::none : + break; + case Function1dType::constant : + type = 1; + break; + case Function1dType::XYs : + type = 2; + break; + case Function1dType::polyomial : + type = 3; + break; + case Function1dType::gridded : + type = 4; + break; + case Function1dType::regions : + type = 5; + break; + case Function1dType::branching : + type = 6; + break; + case Function1dType::TerrellFissionNeutronMultiplicityModel : + type = 7; + break; + } + } + DATA_MEMBER_INT( type, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + m_type = Function1dType::none; + break; + case 1 : + m_type = Function1dType::constant; + break; + case 2 : + m_type = Function1dType::XYs; + break; + case 3 : + m_type = Function1dType::polyomial; + break; + case 4 : + m_type = Function1dType::gridded; + break; + case 5 : + m_type = Function1dType::regions; + break; + case 6 : + m_type = Function1dType::branching; + break; + case 7 : + m_type = Function1dType::TerrellFissionNeutronMultiplicityModel; + break; + } + } +} + +/* *********************************************************************************************************//** + * Returns the value of the function at *a_x1*. + * + * @param a_x1 [in] The x-value to evaluate the function at. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Function1d_d1::evaluate( double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case Function1dType::none: + break; + case Function1dType::constant: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::XYs: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::polyomial: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::gridded: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::regions: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::branching: + value = static_cast( this )->evaluate( a_x1 ); + break; + default: + String message( "Function1d_d1::evaluate: Unsupported Function1d_d1 " + typeString( ) ); + LUPI_THROW( message.c_str( ) ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function at *a_x1*. + * + * @param a_x1 [in] The x-value to evaluate the function at. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Function1d_d2::evaluate( double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case Function1dType::none: + break; + case Function1dType::constant: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::XYs: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::polyomial: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::gridded: + value = static_cast( this )->evaluate( a_x1 ); + break; + case Function1dType::branching: + value = static_cast( this )->evaluate( a_x1 ); + break; + default: // This should never happend. + String message( "Function1d_d2::evaluate: Unsupported Function1d_d2 " + typeString( ) ); + LUPI_THROW( message.c_str( ) ); + } + + return( value ); +} + +/* +============================================================ +======================== Constant1d ======================== +============================================================ +*/ +LUPI_HOST_DEVICE Constant1d::Constant1d( ) : + m_value( 0.0 ) { + + m_type = Function1dType::constant; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE Constant1d::Constant1d( double a_domainMin, double a_domainMax, double a_value, double a_outerDomainValue ) : + Function1d_d2( a_domainMin, a_domainMax, Interpolation::FLAT, a_outerDomainValue ), + m_value( a_value ) { + + m_type = Function1dType::constant; +} +/* +============================================================ +*/ +LUPI_HOST Constant1d::Constant1d( GIDI::Functions::Constant1d const &a_form1d ) : + Function1d_d2( a_form1d.domainMin( ), a_form1d.domainMax( ), Interpolation::FLAT, a_form1d.outerDomainValue( ) ), + m_value( a_form1d.value( ) ) { + + m_type = Function1dType::constant; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Constant1d::~Constant1d( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Constant1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_value, a_buffer, a_mode ); +} + +/* +============================================================ +=========================== XYs1d ========================== +============================================================ +*/ +LUPI_HOST_DEVICE XYs1d::XYs1d( ) : + m_Xs( ), + m_Ys( ) { + + m_type = Function1dType::XYs; +} +/* +============================================================ +*/ +LUPI_HOST XYs1d::XYs1d( Interpolation a_interpolation, Vector a_Xs, Vector a_Ys, double a_outerDomainValue ) : + Function1d_d2( a_Xs[0], a_Xs.back( ), a_interpolation, a_outerDomainValue ), + m_Xs( a_Xs ), + m_Ys( a_Ys ) { + + m_type = Function1dType::XYs; +} +/* +============================================================ +*/ +LUPI_HOST XYs1d::XYs1d( GIDI::Functions::XYs1d const &a_XYs1d ) : + Function1d_d2( a_XYs1d.domainMin( ), a_XYs1d.domainMax( ), GIDI2MCGIDI_interpolation( a_XYs1d.interpolation( ) ), a_XYs1d.outerDomainValue( ) ) { + + m_type = Function1dType::XYs; + std::size_t size = a_XYs1d.size( ); + + m_Xs.resize( size ); + m_Ys.resize( size ); + for( std::size_t i1 = 0; i1 < size; ++i1 ) { + std::pair xy = a_XYs1d[i1]; + m_Xs[i1] = xy.first; + m_Ys[i1] = xy.second; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE XYs1d::~XYs1d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double XYs1d::evaluate( double a_x1 ) const { + + int lower = binarySearchVector( a_x1, m_Xs ); + + if( lower < 0 ) { + if( lower == -2 ) return( m_Ys[0] ); + return( m_Ys.back( ) ); + } + + double evaluatedValue = 0.0; + double y1 = m_Ys[lower]; + + if( interpolation( ) == Interpolation::FLAT ) { + evaluatedValue = y1; } + else { + double x1 = m_Xs[lower]; + double x2 = m_Xs[lower+1]; + double y2 = m_Ys[lower+1]; + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( x2 - a_x1 ) / ( x2 - x1 ); + evaluatedValue = fraction * y1 + ( 1 - fraction ) * y2; } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( x2 / a_x1 ) / log( x2 / x1 ); + evaluatedValue = fraction * y1 + ( 1 - fraction ) * y2; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( x2 - a_x1 ) / ( x2 - x1 ); + evaluatedValue = exp( fraction * log( y1 ) + ( 1 - fraction ) * log( y2 ) ); } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( x2 / a_x1 ) / log( x2 / x1 ); + evaluatedValue = exp( fraction * log( y1 ) + ( 1 - fraction ) * log( y2 ) ); } + else { + LUPI_THROW( "XYs1d::evaluate: unsupport interpolation." ); + } + } + + return( evaluatedValue ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void XYs1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_Xs, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_Ys, a_buffer, a_mode ); +} + +/* +============================================================ +======================= Polynomial1d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Polynomial1d::Polynomial1d( ) : + m_coefficients( ), + m_coefficientsReversed( ) { + + m_type = Function1dType::polyomial; +} +/* +============================================================ +*/ +LUPI_HOST Polynomial1d::Polynomial1d( double a_domainMin, double a_domainMax, Vector const &a_coefficients, double a_outerDomainValue ) : + Function1d_d2( a_domainMin, a_domainMax, Interpolation::LINLIN, a_outerDomainValue ), + m_coefficients( a_coefficients ) { + + m_type = Function1dType::polyomial; + + m_coefficientsReversed.reserve( m_coefficients.size( ) ); + for( Vector::iterator iter = m_coefficients.begin( ); iter != m_coefficients.end( ); ++iter ) + m_coefficientsReversed.push_back( *iter ); +} +/* +============================================================ +*/ +LUPI_HOST Polynomial1d::Polynomial1d( GIDI::Functions::Polynomial1d const &a_polynomial1d ) : + Function1d_d2( a_polynomial1d.domainMin( ), a_polynomial1d.domainMax( ), Interpolation::LINLIN, a_polynomial1d.outerDomainValue( ) ) { + + m_type = Function1dType::polyomial; + + m_coefficients = a_polynomial1d.coefficients( ); + m_coefficientsReversed.reserve( m_coefficients.size( ) ); + for( Vector::iterator iter = m_coefficients.begin( ); iter != m_coefficients.end( ); ++iter ) + m_coefficientsReversed.push_back( *iter ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Polynomial1d::~Polynomial1d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Polynomial1d::evaluate( double a_x1 ) const { + + double d_value = 0; + + for( Vector::const_iterator iter = m_coefficientsReversed.begin( ); iter != m_coefficientsReversed.end( ); ++iter ) { + d_value = *iter + d_value * a_x1; + } + + return( d_value ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Polynomial1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_coefficients, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_coefficientsReversed, a_buffer, a_mode ); +} + +/* +============================================================ +========================= Gridded1d ======================== +============================================================ +*/ +LUPI_HOST_DEVICE Gridded1d::Gridded1d( ) : + m_grid( ), + m_data( ) { + + m_type = Function1dType::gridded; +} +/* +============================================================ +*/ +LUPI_HOST Gridded1d::Gridded1d( GIDI::Functions::Gridded1d const &a_gridded1d ) : + Function1d_d2( a_gridded1d.domainMin( ), a_gridded1d.domainMax( ), Interpolation::FLAT, a_gridded1d.outerDomainValue( ) ) { + + m_type = Function1dType::gridded; + + GIDI::Vector const &grid = a_gridded1d.grid( ); + m_grid.resize( grid.size( ) ); + for( std::size_t i1 = 0; i1 < grid.size( ); ++i1 ) m_grid[i1] = grid[i1]; + + GIDI::Vector const &data = a_gridded1d.data( ); + m_data.resize( data.size( ) ); + for( std::size_t i1 = 0; i1 < data.size( ); ++i1 ) m_data[i1] = data[i1]; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Gridded1d::~Gridded1d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Gridded1d::evaluate( double a_x1 ) const { + + return( m_data[binarySearchVector( a_x1, m_grid, true )] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Gridded1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_grid, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_data, a_buffer, a_mode ); +} + +/* +============================================================ +========================= Regions1d ======================== +============================================================ +*/ +LUPI_HOST_DEVICE Regions1d::Regions1d( ) : + m_Xs( ), + m_functions1d( ) { + + m_type = Function1dType::regions; +} +/* +============================================================ +*/ +LUPI_HOST Regions1d::Regions1d( GIDI::Functions::Regions1d const &a_regions1d ) : + Function1d_d1( a_regions1d.domainMin( ), a_regions1d.domainMax( ), Interpolation::LINLIN, a_regions1d.outerDomainValue( ) ) { + + m_type = Function1dType::regions; + + m_Xs.reserve( a_regions1d.size( ) + 1 ); + m_functions1d.reserve( a_regions1d.size( ) ); + for( std::size_t i1 = 0; i1 < a_regions1d.size( ); ++i1 ) append( parseFunction1d_d2( a_regions1d[i1] ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Regions1d::~Regions1d( ) { + + for( std::size_t i1 = 0; i1 < m_functions1d.size( ); ++i1 ) delete m_functions1d[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE void Regions1d::append( Function1d_d2 *a_function1d ) { + + if( m_functions1d.size( ) == 0 ) m_Xs.push_back( a_function1d->domainMin( ) ); + m_Xs.push_back( a_function1d->domainMax( ) ); + + m_functions1d.push_back( a_function1d ); +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Regions1d::evaluate( double a_x1 ) const { + + int lower = binarySearchVector( a_x1, m_Xs ); + + if( lower < 0 ) { + if( lower == -1 ) { // a_x1 > last value of m_Xs. + return( m_functions1d.back( )->evaluate( a_x1 ) ); + } + lower = 0; // a_x1 < last value of m_Xs. + } + + return( m_functions1d[lower]->evaluate( a_x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Regions1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_Xs, a_buffer, a_mode ); + + std::size_t vectorSize = m_functions1d.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_functions1d.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_functions1d.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_functions1d[vectorIndex] = serializeFunction1d_d2( a_buffer, a_mode, m_functions1d[vectorIndex] ); + } +} + +/* +============================================================ +======================== Branching1d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Branching1d::Branching1d( ) { + +} + +/* *********************************************************************************************************//** + * Function that parses a node one-d function node. Called from a Suite::parse instance. + * + * @param a_setupInfo [in] Information create my the Protare constructor to help in parsing. + * @param a_form1d [in] The GIDI::Functions::Branching1d instance whose data is to be used to construct *this*. + * + * @return The parsed and constructed resonanceBackground region instance. + ***********************************************************************************************************/ + +/* +============================================================ +*/ +LUPI_HOST Branching1d::Branching1d( SetupInfo &a_setupInfo, GIDI::Functions::Branching1d const &a_form1d ) : + Function1d_d2( a_form1d.domainMin( ), a_form1d.domainMax( ), Interpolation::FLAT, 0.0 ), + m_initialStateIndex( -1 ) { + + m_type = Function1dType::branching; + + std::map::iterator iter = a_setupInfo.m_stateNamesToIndices.find( a_form1d.initialState( ) ); + if( iter == a_setupInfo.m_stateNamesToIndices.end( ) ) { + std::string message( "Branching1d: initial state not found: pid = '" + a_form1d.initialState( ) + "'." ); + throw std::runtime_error( message.c_str( ) ); + } + m_initialStateIndex = iter->second; + + a_setupInfo.m_initialStateIndex = m_initialStateIndex; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Branching1d::~Branching1d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Branching1d::evaluate( LUPI_maybeUnused double a_x1 ) const { + + return( 0.0 ); // Returns 0 as needed by Product::sampleProducts. +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Branching1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_INT( m_initialStateIndex, a_buffer, a_mode ); +} + +/* +============================================================ +========== TerrellFissionNeutronMultiplicityModel ========== +============================================================ +*/ + +LUPI_HOST_DEVICE TerrellFissionNeutronMultiplicityModel::TerrellFissionNeutronMultiplicityModel( ) : + m_multiplicity( nullptr ) { + + m_type = Function1dType::TerrellFissionNeutronMultiplicityModel; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST TerrellFissionNeutronMultiplicityModel::TerrellFissionNeutronMultiplicityModel( double a_width, Function1d_d1 *a_multiplicity ) : + Function1d( a_multiplicity->domainMin( ), a_multiplicity->domainMax( ), a_multiplicity->interpolation( ), a_multiplicity->outerDomainValue( ) ), + m_width( a_width ), + m_multiplicity( a_multiplicity ) { + + m_type = Function1dType::TerrellFissionNeutronMultiplicityModel; + if( a_width < 0.0 ) m_width = 1.079; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE TerrellFissionNeutronMultiplicityModel::~TerrellFissionNeutronMultiplicityModel( ) { + + delete m_multiplicity; +} + +/* *********************************************************************************************************//** + * Evaluated the *m_multiplicity* function at energy *a_energy*. + * + * @param a_energy [in] The energy of the projectile. + * + * @return The number of emitted, prompt neutrons. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double TerrellFissionNeutronMultiplicityModel::evaluate( double a_energy ) const { + + return( m_multiplicity->evaluate( a_energy ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void TerrellFissionNeutronMultiplicityModel::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function1d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_width, a_buffer, a_mode ); + + m_multiplicity = serializeFunction1d_d1( a_buffer, a_mode, m_multiplicity ); +} + +/* +============================================================ +======================== Function2d ======================== +============================================================ +*/ +LUPI_HOST_DEVICE Function2d::Function2d( ) : + m_type( Function2dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST Function2d::Function2d( double a_domainMin, double a_domainMax, Interpolation a_interpolation, double a_outerDomainValue ) : + FunctionBase( 2, a_domainMin, a_domainMax, a_interpolation, a_outerDomainValue ), + m_type( Function2dType::none ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Function2d::~Function2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns a String representation of the **Function2d** type of *this*. + * + * @return A String instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE String Function2d::typeString( ) const { + + String typeStr( "Function2d::" ); + + switch( m_type ) { + case Function2dType::none : + typeStr += "none"; + break; + case Function2dType::XYs : + typeStr += "XYs"; + break; + } + + return( typeStr ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function f(x2, x1) at x2 = *a_x2* and x1 = *a_x1*. + * + * @param a_x2 [in] The x2 value. + * @param a_x1 [in] The x1 value. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Function2d::evaluate( double a_x2, double a_x1 ) const { + + return( static_cast( this )->evaluate( a_x2, a_x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Function2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + FunctionBase::serialize( a_buffer, a_mode ); + + int type = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_type ) { + case Function2dType::none : + break; + case Function2dType::XYs : + type = 1; + break; + } + } + DATA_MEMBER_INT( type, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + m_type = Function2dType::none; + break; + case 1 : + m_type = Function2dType::XYs; + break; + } + } +} + +/* +============================================================ +========================== XYs2d =========================== +============================================================ +*/ +LUPI_HOST_DEVICE XYs2d::XYs2d( ) : + m_Xs( ), + m_functions1d( ) { + + m_type = Function2dType::XYs; +} +/* +============================================================ +*/ +LUPI_HOST XYs2d::XYs2d( GIDI::Functions::XYs2d const &a_XYs2d ) : + Function2d( a_XYs2d.domainMin( ), a_XYs2d.domainMax( ), GIDI2MCGIDI_interpolation( a_XYs2d.interpolation( ) ), a_XYs2d.outerDomainValue( ) ), + m_Xs( a_XYs2d.Xs( ) ) { + + m_type = Function2dType::XYs; + + Vector const &function1ds = a_XYs2d.function1ds( ); + m_functions1d.resize( function1ds.size( ) ); + for( std::size_t i1 = 0; i1 < function1ds.size( ); ++i1 ) m_functions1d[i1] = parseFunction1d_d1( function1ds[i1] ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE XYs2d::~XYs2d( ) { + + for( std::size_t i1 = 0; i1 < m_functions1d.size( ); ++i1 ) delete m_functions1d[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double XYs2d::evaluate( double a_x2, double a_x1 ) const { + + int lower = binarySearchVector( a_x2, m_Xs ); + double evaluatedValue = 0.0; + + if( lower < 0 ) { + if( lower == -1 ) { /* X2 > last value of Xs. */ + evaluatedValue = m_functions1d.back( )->evaluate( a_x1 ); } + else { /* X2 < first value of Xs. */ + evaluatedValue = m_functions1d[0]->evaluate( a_x1 ); + } } + else { + double y1 = m_functions1d[lower]->evaluate( a_x1 ); + + if( interpolation( ) == Interpolation::FLAT ) { + evaluatedValue = y1; } + else { + double x1 = m_Xs[lower]; + double x2 = m_Xs[lower+1]; + double y2 = m_functions1d[lower+1]->evaluate( a_x1 ); + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( x2 - a_x2 ) / ( x2 - x1 ); + evaluatedValue = fraction * y1 + ( 1 - fraction ) * y2; } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( x2 / a_x2 ) / log( x2 / x1 ); + evaluatedValue = fraction * y1 + ( 1 - fraction ) * y2; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( x2 - a_x2 ) / ( x2 - x1 ); + evaluatedValue = exp( fraction * log( y1 ) + ( 1 - fraction ) * log( y2 ) ); } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( x2 / a_x2 ) / log( x2 / x1 ); + evaluatedValue = exp( fraction * log( y1 ) + ( 1 - fraction ) * log( y2 ) ); } + else { + LUPI_THROW( "XYs2d::evaluate: unsupport interpolation." ); + } + } + } + + return( evaluatedValue ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void XYs2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Function2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_Xs, a_buffer, a_mode ); + + std::size_t vectorSize = m_functions1d.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_functions1d.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_functions1d.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_functions1d[vectorIndex] = serializeFunction1d_d1( a_buffer, a_mode, m_functions1d[vectorIndex] ); + } +} + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +LUPI_HOST Function1d *parseMultiplicityFunction1d( SetupInfo &a_setupInfo, LUPI_maybeUnused Transporting::MC const &a_settings, GIDI::Suite const &a_suite ) { + + GIDI::Functions::Function1dForm const *form1d( a_suite.get( 0 ) ); + + if( form1d->type( ) == GIDI::FormType::branching1d ) return( new Branching1d( a_setupInfo, *static_cast( form1d ) ) ); + if( form1d->type( ) == GIDI::FormType::unspecified1d ) return( nullptr ); + + return( parseFunction1d_d1( form1d ) ); +} + +/* +============================================================ +*/ +LUPI_HOST Function1d_d1 *parseFunction1d_d1( GIDI::Functions::Function1dForm const *a_form1d ) { + + GIDI::FormType type = a_form1d->type( ); + + switch( type ) { + case GIDI::FormType::constant1d : + return( new Constant1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::XYs1d : + return( new XYs1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::polynomial1d : + return( new Polynomial1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::gridded1d : + return( new Gridded1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::regions1d : + return( new Regions1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::reference1d : + std::cout << "parseFunction1d_d1: Unsupported Function1d reference1d."; + break; + default : // GIDI::FormTypes Legendre1d, reference1d, xs_pdFormType::cdf1d and resonancesWithBackground1d + throw std::runtime_error( "Functions::parseFunction1d_d1: Unsupported Function1d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST Function1d_d2 *parseFunction1d_d2( GIDI::Functions::Function1dForm const *a_form1d ) { + + GIDI::FormType type = a_form1d->type( ); + + switch( type ) { + case GIDI::FormType::constant1d : + return( new Constant1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::XYs1d : + return( new XYs1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::polynomial1d : + return( new Polynomial1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::gridded1d : + return( new Gridded1d( *static_cast( a_form1d ) ) ); + case GIDI::FormType::reference1d : + std::cout << "Functions::parseFunction1d_d2: Unsupported Function1d reference1d."; + break; + default : + throw std::runtime_error( "Functions::parseFunction1d_d2: Unsupported Function1d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST Function2d *parseFunction2d( GIDI::Functions::Function2dForm const *form2d ) { + + GIDI::FormType type = form2d->type( ); + + switch( type ) { + case GIDI::FormType::XYs2d : + return( new XYs2d( *static_cast( form2d ) ) ); + default : + throw std::runtime_error( "Functions::parseFunction2d: Unsupported Function2d" ); + } + + return( nullptr ); +} + +} // End of namespace Functions. + +/* +============================================================ +============================================================ +====================== probabilities ======================= +============================================================ +============================================================ +*/ +namespace Probabilities { + +LUPI_HOST static nfu_status MCGIDI_NBodyPhaseSpacePDF_callback( statusMessageReporting *smr, double X, double *Y, void *argList ); +LUPI_HOST static ProbabilityBase1d *ptwXY_To_Xs_pdf_cdf1d( ptwXYPoints *pdfXY ); + +/* +============================================================ +===================== ProbabilityBase ====================== +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase::ProbabilityBase( ) : + m_Xs( ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase::ProbabilityBase( GIDI::Functions::FunctionForm const &a_probability ) : + Functions::FunctionBase( a_probability ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase::ProbabilityBase( GIDI::Functions::FunctionForm const &a_probability, Vector const &a_Xs ) : + Functions::FunctionBase( a_probability ), + m_Xs( a_Xs ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProbabilityBase::~ProbabilityBase( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProbabilityBase::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + Functions::FunctionBase::serialize( a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_Xs, a_buffer, a_mode ); +} + +/* +============================================================ +===================== ProbabilityBase1d ==================== +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase1d::ProbabilityBase1d( ) : + m_type( ProbabilityBase1dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase1d::ProbabilityBase1d( GIDI::Functions::FunctionForm const &a_probability, Vector const &a_Xs ) : + ProbabilityBase( a_probability, a_Xs ), + m_type( ProbabilityBase1dType::none ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProbabilityBase1d::~ProbabilityBase1d( ) { + +} + +/* *********************************************************************************************************//** + * Returns a String representation of the **ProbabilityBase1d** type of *this*. + * + * @return A String instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE String ProbabilityBase1d::typeString( ) const { + + String typeStr( "ProbabilityBase1d::" ); + + switch( m_type ) { + case ProbabilityBase1dType::none : + typeStr += "none"; + break; + case ProbabilityBase1dType::xs_pdf_cdf : + typeStr += "xs_pdf_cdf"; + break; + } + + return( typeStr ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function at *a_x1*. + * + * @param a_x1 [in] The x-value to evaluate the function at. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProbabilityBase1d::evaluate( double a_x1 ) const { + + return( static_cast( this )->evaluate( a_x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProbabilityBase1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase::serialize( a_buffer, a_mode ); + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_type ) { + case ProbabilityBase1dType::none : + break; + case ProbabilityBase1dType::xs_pdf_cdf : + type = 1; + break; + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + m_type = ProbabilityBase1dType::none; + break; + case 1 : + m_type = ProbabilityBase1dType::xs_pdf_cdf; + break; + } + } +} + +/* +============================================================ +======================= Xs_pdf_cdf1d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Xs_pdf_cdf1d::Xs_pdf_cdf1d( ) : + m_pdf( ), + m_cdf( ) { + + m_type = ProbabilityBase1dType::xs_pdf_cdf; +} +/* +============================================================ +*/ +LUPI_HOST Xs_pdf_cdf1d::Xs_pdf_cdf1d( GIDI::Functions::Xs_pdf_cdf1d const &a_xs_pdf_cdf1d ) : + ProbabilityBase1d( a_xs_pdf_cdf1d, a_xs_pdf_cdf1d.Xs( ) ), + m_pdf( a_xs_pdf_cdf1d.pdf( ) ), + m_cdf( a_xs_pdf_cdf1d.cdf( ) ) { + + m_type = ProbabilityBase1dType::xs_pdf_cdf; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Xs_pdf_cdf1d::~Xs_pdf_cdf1d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Xs_pdf_cdf1d::evaluate( double a_x1 ) const { + + int lower = binarySearchVector( a_x1, m_Xs ); + + if( lower < 0 ) { + if( lower == -2 ) return( m_pdf[0] ); + return( m_pdf.back( ) ); + } + + double fraction = ( a_x1 - m_Xs[lower] ) / ( m_Xs[lower+1] - m_Xs[lower] ); + return( ( 1. - fraction ) * m_pdf[lower] + fraction * m_pdf[lower+1] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Xs_pdf_cdf1d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase1d::serialize( a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_DOUBLE( m_pdf, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_cdf, a_buffer, a_mode ); +} + +/* +============================================================ +===================== ProbabilityBase2d ==================== +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase2d::ProbabilityBase2d( ) : + m_type( ProbabilityBase2dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase2d::ProbabilityBase2d( GIDI::Functions::FunctionForm const &a_probability ) : + ProbabilityBase( a_probability ), + m_type( ProbabilityBase2dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase2d::ProbabilityBase2d( GIDI::Functions::FunctionForm const &a_probability, Vector const &a_Xs ) : + ProbabilityBase( a_probability, a_Xs ), + m_type( ProbabilityBase2dType::none ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProbabilityBase2d::~ProbabilityBase2d( ) { + +} + +/* *********************************************************************************************************//** + * Returns a String representation of the **ProbabilityBase2d** type of *this*. + * + * @return A String instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE String ProbabilityBase2d::typeString( ) const { + + String typeStr( "ProbabilityBase2d::" ); + + switch( m_type ) { + case ProbabilityBase2dType::none : + typeStr += "none"; + break; + case ProbabilityBase2dType::XYs : + typeStr += "XYs"; + break; + case ProbabilityBase2dType::regions : + typeStr += "regions"; + break; + case ProbabilityBase2dType::isotropic : + typeStr += "isotropic"; + break; + case ProbabilityBase2dType::discreteGamma: + typeStr += "discreteGamma"; + break; + case ProbabilityBase2dType::primaryGamma: + typeStr += "primaryGamma"; + break; + case ProbabilityBase2dType::recoil: + typeStr += "recoil"; + break; + case ProbabilityBase2dType::NBodyPhaseSpace: + typeStr += "NBodyPhaseSpace"; + break; + case ProbabilityBase2dType::evaporation: + typeStr += "evaporation"; + break; + case ProbabilityBase2dType::generalEvaporation: + typeStr += "generalEvaporation"; + break; + case ProbabilityBase2dType::simpleMaxwellianFission: + typeStr += "simpleMaxwellianFission"; + break; + case ProbabilityBase2dType::Watt: + typeStr += "Watt"; + break; + case ProbabilityBase2dType::weightedFunctionals: + typeStr += "weightedFunctionals"; + break; + } + + return( typeStr ); +} + +/* *********************************************************************************************************//** + * This method returns the value of pdf(x1|x2) at x1 of *a_x1* and x2 of *a_x2*. + * + * @param a_x2 [in] The value of x2. + * @param a_x1 [in] The value of x1. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProbabilityBase2d::evaluate( double a_x2, double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::none: + break; + case ProbabilityBase2dType::weightedFunctionals: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + default: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + } + + return( value ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProbabilityBase2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase::serialize( a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the point (*a_x2*, *a_x1*). + * + * @param a_x2 [in] Value of the outer most independent variable (i.e., *x2*). + * @param a_x1 [in] Value of the inner most independent variable (i.e., *x1*). + * + * @return The value of the function at *a_x2* and *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProbabilityBase2d_d1::evaluate( double a_x2, double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + case ProbabilityBase2dType::isotropic: + case ProbabilityBase2dType::discreteGamma: + case ProbabilityBase2dType::primaryGamma: + case ProbabilityBase2dType::recoil: + case ProbabilityBase2dType::NBodyPhaseSpace: + case ProbabilityBase2dType::evaporation: + case ProbabilityBase2dType::generalEvaporation: + case ProbabilityBase2dType::simpleMaxwellianFission: + case ProbabilityBase2dType::Watt: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::regions: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::none: + case ProbabilityBase2dType::weightedFunctionals: + LUPI_THROW( "ProbabilityBase2d_d1::evaluate: This should never happen." ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function evaluated at the point (*a_x2*, *a_x1*). + * + * @param a_x2 [in] Value of the outer most independent variable (i.e., *x2*). + * @param a_x1 [in] Value of the inner most independent variable (i.e., *x1*). + * + * @return The value of the function at *a_x2* and *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProbabilityBase2d_d2::evaluate( double a_x2, double a_x1 ) const { + + double value = 0.0; + + switch( type( ) ) { + case ProbabilityBase2dType::XYs: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::isotropic: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::discreteGamma: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::primaryGamma: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::recoil: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::NBodyPhaseSpace: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::evaporation: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::generalEvaporation: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::simpleMaxwellianFission: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::Watt: + value = static_cast( this )->evaluate( a_x2, a_x1 ); + break; + case ProbabilityBase2dType::none: + case ProbabilityBase2dType::weightedFunctionals: + case ProbabilityBase2dType::regions: + LUPI_THROW( "ProbabilityBase2d_d2::evaluate: This should never happen." ); + } + + return( value ); +} + +/* +============================================================ +========================== XYs2d =========================== +============================================================ +*/ +LUPI_HOST_DEVICE XYs2d::XYs2d( ) : + m_probabilities( ) { + + m_type = ProbabilityBase2dType::XYs; +} +/* +============================================================ +*/ +LUPI_HOST XYs2d::XYs2d( GIDI::Functions::XYs2d const &a_XYs2d ) : + ProbabilityBase2d_d2( a_XYs2d, a_XYs2d.Xs( ) ) { + + m_type = ProbabilityBase2dType::XYs; + + Vector const &function1ds = a_XYs2d.function1ds( ); + m_probabilities.resize( function1ds.size( ) ); + for( std::size_t i1 = 0; i1 < function1ds.size( ); ++i1 ) m_probabilities[i1] = parseProbability1d( function1ds[i1] ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE XYs2d::~XYs2d( ) { + + for( std::size_t i1 = 0; i1 < m_probabilities.size( ); ++i1 ) delete m_probabilities[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double XYs2d::evaluate( double a_x2, double a_x1 ) const { + + int lower = binarySearchVector( a_x2, m_Xs ); + + if( lower < 0 ) { + if( lower == -2 ) return( m_probabilities[0]->evaluate( a_x1 ) ); + return( m_probabilities.back( )->evaluate( a_x1 ) ); + } + + double fraction = ( a_x2 - m_Xs[lower] ) / ( m_Xs[lower+1] - m_Xs[lower] ); + double d_value = ( 1.0 - fraction ) * m_probabilities[lower]->evaluate( a_x1 ) + fraction * m_probabilities[lower+1]->evaluate( a_x1 ); + return( d_value ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void XYs2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + + std::size_t vectorSize = m_probabilities.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_probabilities.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_probabilities.internalSize(); + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_probabilities[vectorIndex] = serializeProbability1d( a_buffer, a_mode, m_probabilities[vectorIndex] ); + } +} + +/* +============================================================ +======================== Regions2d ========================= +============================================================ +*/ +LUPI_HOST_DEVICE Regions2d::Regions2d( ) : + m_probabilities( ) { + + m_type = ProbabilityBase2dType::regions; +} +/* +============================================================ +*/ +LUPI_HOST Regions2d::Regions2d( GIDI::Functions::Regions2d const &a_regions2d ) : + ProbabilityBase2d_d1( a_regions2d, a_regions2d.Xs( ) ) { + + m_type = ProbabilityBase2dType::regions; + + Vector const &function2ds = a_regions2d.function2ds( ); + m_probabilities.resize( function2ds.size( ) ); + for( std::size_t i1 = 0; i1 < function2ds.size( ); ++i1 ) m_probabilities[i1] = parseProbability2d_d2( function2ds[i1], nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Regions2d::~Regions2d( ) { + + for( std::size_t i1 = 0; i1 < m_probabilities.size( ); ++i1 ) delete m_probabilities[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Regions2d::evaluate( double a_x2, double a_x1 ) const { + + int lower = binarySearchVector( a_x2, m_Xs ); + + if( lower < 0 ) { + if( lower == -1 ) { // a_x2 > last value of m_Xs. + return( m_probabilities.back( )->evaluate( a_x2, a_x1 ) ); + } + lower = 0; // a_x2 < first value of m_Xs. + } + + return( m_probabilities[lower]->evaluate( a_x2, a_x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Regions2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + + std::size_t vectorSize = m_probabilities.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_probabilities.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_probabilities.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_probabilities[vectorIndex] = serializeProbability2d_d2( a_buffer, a_mode, m_probabilities[vectorIndex] ); + } +} + + +/* +============================================================ +======================== Isotropic2d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Isotropic2d::Isotropic2d( ) { + + m_type = ProbabilityBase2dType::isotropic; +} +/* +============================================================ +*/ +LUPI_HOST Isotropic2d::Isotropic2d( GIDI::Functions::Isotropic2d const &a_isotropic2d ) : + ProbabilityBase2d_d2( a_isotropic2d ) { + + m_type = ProbabilityBase2dType::isotropic; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Isotropic2d::~Isotropic2d( ) { + +} + +/* +============================================================ +====================== DiscreteGamma2d ===================== +============================================================ +*/ +LUPI_HOST_DEVICE DiscreteGamma2d::DiscreteGamma2d( ) { + + m_type = ProbabilityBase2dType::discreteGamma; +} +/* +============================================================ +*/ +LUPI_HOST DiscreteGamma2d::DiscreteGamma2d( GIDI::Functions::DiscreteGamma2d const &a_discreteGamma2d ) : + ProbabilityBase2d_d2( a_discreteGamma2d ), + m_value( a_discreteGamma2d.value( ) ) { + + m_type = ProbabilityBase2dType::discreteGamma; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE DiscreteGamma2d::~DiscreteGamma2d( ) { + +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void DiscreteGamma2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_value, a_buffer, a_mode ); +} + +/* +============================================================ +====================== PrimaryGamma2d ===================== +============================================================ +*/ +LUPI_HOST_DEVICE PrimaryGamma2d::PrimaryGamma2d( ) : + m_primaryEnergy( 0.0 ), + m_massFactor( 0.0 ), + m_finalState( "" ), + m_initialStateIndex( -1 ) { + + m_type = ProbabilityBase2dType::primaryGamma; +} +/* +============================================================ +*/ +LUPI_HOST PrimaryGamma2d::PrimaryGamma2d( GIDI::Functions::PrimaryGamma2d const &a_primaryGamma2d, SetupInfo *a_setupInfo ) : + ProbabilityBase2d_d2( a_primaryGamma2d ), + m_primaryEnergy( a_primaryGamma2d.value( ) ), + m_massFactor( a_setupInfo->m_protare.targetMass( ) / ( a_setupInfo->m_protare.projectileMass( ) + a_setupInfo->m_protare.targetMass( ) ) ), + m_finalState( a_primaryGamma2d.finalState( ).c_str( ) ), + m_initialStateIndex( -1 ) { + + if( m_finalState.size( ) > 0 ) a_setupInfo->m_hasFinalStatePhotons = true; + m_type = ProbabilityBase2dType::primaryGamma; + + if( a_primaryGamma2d.finalState( ) != "" ) { + std::map::iterator iter = a_setupInfo->m_stateNamesToIndices.find( a_primaryGamma2d.finalState( ) ); + if( iter == a_setupInfo->m_stateNamesToIndices.end( ) ) { + std::string message( "Branching1d: final state not found: pid = '" + a_primaryGamma2d.finalState( ) + "'." ); + throw std::runtime_error( message.c_str( ) ); + } + m_initialStateIndex = iter->second; + + a_setupInfo->m_initialStateIndex = m_initialStateIndex; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE PrimaryGamma2d::~PrimaryGamma2d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double PrimaryGamma2d::evaluate( double a_x2, double a_x1 ) const { + + double energy_out = m_primaryEnergy + a_x2 * m_massFactor; + +// FIXME. I think this is correct but is it what we want. + if( energy_out == a_x1 ) return( 1.0 ); + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void PrimaryGamma2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_primaryEnergy, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_massFactor, a_buffer, a_mode ); + DATA_MEMBER_STRING( m_finalState, a_buffer, a_mode ); + DATA_MEMBER_INT( m_initialStateIndex, a_buffer, a_mode ); +} + +/* +============================================================ +========================= Recoil2d ========================= +============================================================ +*/ +LUPI_HOST_DEVICE Recoil2d::Recoil2d( ) : + m_xlink( ) { + + m_type = ProbabilityBase2dType::recoil; +} +/* +============================================================ +*/ +LUPI_HOST Recoil2d::Recoil2d( GIDI::Functions::Recoil2d const &a_recoil2d ) : + ProbabilityBase2d_d2( a_recoil2d ), + m_xlink( a_recoil2d.xlink( ).c_str( ) ) { + + m_type = ProbabilityBase2dType::recoil; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Recoil2d::~Recoil2d( ) { + +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Recoil2d::evaluate( LUPI_maybeUnused double a_x2, LUPI_maybeUnused double a_x1 ) const { + +#if !defined(__NVCC__) && !defined(__HIP__) + LUPI_THROW( "Recoil2d::evaluate: not implemented." ); +#endif + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Recoil2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_STRING( m_xlink, a_buffer, a_mode ); +} + +/* +============================================================ +==================== NBodyPhaseSpace2d ===================== +============================================================ +*/ +LUPI_HOST_DEVICE NBodyPhaseSpace2d::NBodyPhaseSpace2d( ) : + m_numberOfProducts( 0 ), + m_mass( 0.0 ), + m_energy_in_COMFactor( 0.0 ), + m_massFactor( 0.0 ), + m_Q( 0.0 ), + m_dist( nullptr ) { + + m_type = ProbabilityBase2dType::NBodyPhaseSpace; +} +/* +============================================================ +*/ +LUPI_HOST NBodyPhaseSpace2d::NBodyPhaseSpace2d( GIDI::Functions::NBodyPhaseSpace2d const &a_NBodyPhaseSpace2d, SetupInfo *a_setupInfo ) : + ProbabilityBase2d_d2( a_NBodyPhaseSpace2d ), + m_numberOfProducts( a_NBodyPhaseSpace2d.numberOfProducts( ) ), + m_mass( PoPI_AMU2MeV_c2 * a_NBodyPhaseSpace2d.mass( ).value( ) ), + m_energy_in_COMFactor( a_setupInfo->m_protare.targetMass( ) / ( a_setupInfo->m_protare.projectileMass( ) + a_setupInfo->m_protare.targetMass( ) ) ), + m_massFactor( 1 - a_setupInfo->m_product1Mass / m_mass ), + m_Q( a_setupInfo->m_Q ), + m_dist( nullptr ) { + + m_type = ProbabilityBase2dType::NBodyPhaseSpace; + double xs[2] = { 0.0, 1.0 }; + ptwXYPoints *pdf = nullptr; + + pdf = ptwXY_createFromFunction( nullptr, 2, xs, MCGIDI_NBodyPhaseSpacePDF_callback, (void *) &m_numberOfProducts, 1e-3, 0, 16 ); + if( pdf == nullptr ) throw std::runtime_error( "NBodyPhaseSpace2d::NBodyPhaseSpace2d: ptwXY_createFromFunction returned nullptr" ); + + m_dist = ptwXY_To_Xs_pdf_cdf1d( pdf ); + ptwXY_free( pdf ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE NBodyPhaseSpace2d::~NBodyPhaseSpace2d( ) { + + delete m_dist; +} +/* +============================================================ +*/ +LUPI_HOST static nfu_status MCGIDI_NBodyPhaseSpacePDF_callback( LUPI_maybeUnused statusMessageReporting *smr, double X, double *Y, void *argList ) { + + int numberOfProducts = *((int *) argList); + double exponent = 0.5 * ( 3 * numberOfProducts - 8 ); + + *Y = sqrt( X ) * pow( 1.0 - X, exponent ); + return( nfu_Okay ); +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double NBodyPhaseSpace2d::evaluate( double a_x2, double a_x1 ) const { + + double EMax = ( m_energy_in_COMFactor * a_x2 + m_Q ) * m_massFactor; + double x1 = a_x1 / EMax; + + return( m_dist->evaluate( x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void NBodyPhaseSpace2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_INT( m_numberOfProducts, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_mass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_energy_in_COMFactor, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_massFactor, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_Q, a_buffer, a_mode ); + + m_dist = serializeProbability1d( a_buffer, a_mode, m_dist ); +} + +/* +============================================================ +====================== Evaporation2d ======================= +============================================================ +*/ +LUPI_HOST_DEVICE Evaporation2d::Evaporation2d( ) : + m_U( 0.0 ), + m_theta( nullptr ) { + + m_type = ProbabilityBase2dType::evaporation; +} +/* +============================================================ +*/ +LUPI_HOST Evaporation2d::Evaporation2d( GIDI::Functions::Evaporation2d const &a_evaporation2d ) : + ProbabilityBase2d_d2( a_evaporation2d ), + m_U( a_evaporation2d.U( ) ), + m_theta( Functions::parseFunction1d_d1( a_evaporation2d.theta( ) ) ) { + + m_type = ProbabilityBase2dType::evaporation; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Evaporation2d::~Evaporation2d( ) { + + delete m_theta; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Evaporation2d::evaluate( double a_x2, double a_x1 ) const { + + double theta = m_theta->evaluate( a_x2 ); + double E_U_theta = ( a_x2 - m_U ) / theta; + double Ep_theta = a_x1 / theta; + + if( E_U_theta < 0 ) return( 0.0 ); + return( Ep_theta * exp( -Ep_theta ) / ( theta * ( 1.0 - exp( -E_U_theta ) * ( 1.0 + E_U_theta ) ) ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Evaporation2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_U, a_buffer, a_mode ); + + m_theta = serializeFunction1d_d1( a_buffer, a_mode, m_theta ); +} + +/* +============================================================ +=================== GeneralEvaporation2d =================== +============================================================ +*/ +LUPI_HOST_DEVICE GeneralEvaporation2d::GeneralEvaporation2d( ) : + m_theta( nullptr ), + m_g( nullptr ) { + + m_type = ProbabilityBase2dType::generalEvaporation; +} +/* +============================================================ +*/ +LUPI_HOST GeneralEvaporation2d::GeneralEvaporation2d( GIDI::Functions::GeneralEvaporation2d const &a_generalEvaporation2d ) : + ProbabilityBase2d_d2( a_generalEvaporation2d ), + m_theta( Functions::parseFunction1d_d1( a_generalEvaporation2d.theta( ) ) ), + m_g( parseProbability1d( a_generalEvaporation2d.g( ) ) ) { + + m_type = ProbabilityBase2dType::generalEvaporation; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE GeneralEvaporation2d::~GeneralEvaporation2d( ) { + + delete m_theta; + delete m_g; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double GeneralEvaporation2d::evaluate( double a_x2, double a_x1 ) const { + + return( m_g->evaluate( a_x1 / m_theta->evaluate( a_x2 ) ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void GeneralEvaporation2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + m_theta = serializeFunction1d_d1( a_buffer, a_mode, m_theta ); + m_g = serializeProbability1d( a_buffer, a_mode, m_g ); +} + +/* +============================================================ +================ SimpleMaxwellianFission2d ================= +============================================================ +*/ +LUPI_HOST_DEVICE SimpleMaxwellianFission2d::SimpleMaxwellianFission2d( ) : + m_U( 0.0 ), + m_theta( nullptr ) { + + m_type = ProbabilityBase2dType::simpleMaxwellianFission; +} +/* +============================================================ +*/ +LUPI_HOST SimpleMaxwellianFission2d::SimpleMaxwellianFission2d( GIDI::Functions::SimpleMaxwellianFission2d const &a_simpleMaxwellianFission2d ) : + ProbabilityBase2d_d2( a_simpleMaxwellianFission2d ), + m_U( a_simpleMaxwellianFission2d.U( ) ), + m_theta( Functions::parseFunction1d_d1( a_simpleMaxwellianFission2d.theta( ) ) ) { + + m_type = ProbabilityBase2dType::simpleMaxwellianFission; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE SimpleMaxwellianFission2d::~SimpleMaxwellianFission2d( ) { + + delete m_theta; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double SimpleMaxwellianFission2d::evaluate( double a_x2, double a_x1 ) const { + + double theta = m_theta->evaluate( a_x2 ); + double E_U_theta = ( a_x2 - m_U ) / theta; + + if( E_U_theta < 0 ) return( 0.0 ); + + double Ep_theta = a_x1 / theta; + double sqrt_E_U_theta = sqrt( E_U_theta ); + + return( sqrt( Ep_theta ) * exp( -Ep_theta ) / ( theta * ( erf( sqrt_E_U_theta ) / M_2_SQRTPI - sqrt_E_U_theta * exp( -E_U_theta ) ) ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void SimpleMaxwellianFission2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_U, a_buffer, a_mode ); + m_theta = serializeFunction1d_d1( a_buffer, a_mode, m_theta ); +} + +/* +============================================================ +========================= Watt2d =========================== +============================================================ +*/ +LUPI_HOST_DEVICE Watt2d::Watt2d( ) : + m_a( nullptr ), + m_b( nullptr ) { + + m_type = ProbabilityBase2dType::Watt; +} +/* +============================================================ +*/ +LUPI_HOST Watt2d::Watt2d( GIDI::Functions::Watt2d const &a_Watt2d ) : + ProbabilityBase2d_d2( a_Watt2d ), + m_U( a_Watt2d.U( ) ), + m_a( Functions::parseFunction1d_d1( a_Watt2d.a( ) ) ), + m_b( Functions::parseFunction1d_d1( a_Watt2d.b( ) ) ) { + + m_type = ProbabilityBase2dType::Watt; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Watt2d::~Watt2d( ) { + + delete m_a; + delete m_b; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double Watt2d::evaluate( double a_x2, double a_x1 ) const { + + double Watt_a = m_a->evaluate( a_x2 ); + double E_U_a = ( a_x2 - m_U ) / Watt_a; + + if( E_U_a < 0 ) return( 0.0 ); + + double Watt_b = m_b->evaluate( a_x2 ); + double sqrt_ab_4 = 0.5 * sqrt( Watt_a * Watt_b ); + double sqrt_E_U_a = sqrt( E_U_a ); + + double I = 0.5 * sqrt_ab_4 * Watt_a * sqrt( M_PI ) * ( erf( sqrt_E_U_a - sqrt_ab_4 ) + erf( sqrt_E_U_a + sqrt_ab_4 ) ) + - Watt_a * exp( -E_U_a ) * sinh( 2.0 * sqrt_E_U_a * sqrt_ab_4 ); + return( exp( -a_x1 / Watt_a ) * sinh( sqrt( Watt_b * a_x1 ) ) / I ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Watt2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_U, a_buffer, a_mode ); + m_a = serializeFunction1d_d1( a_buffer, a_mode, m_a ); + m_b = serializeFunction1d_d1( a_buffer, a_mode, m_b ); +} + +/* +============================================================ +=================== WeightedFunctionals2d ================== +============================================================ +*/ +LUPI_HOST_DEVICE WeightedFunctionals2d::WeightedFunctionals2d( ) : + m_weight( ), + m_energy( ) { + + m_type = ProbabilityBase2dType::weightedFunctionals; +} +/* +============================================================ +*/ +LUPI_HOST WeightedFunctionals2d::WeightedFunctionals2d( GIDI::Functions::WeightedFunctionals2d const &a_weightedFunctionals2d ) : + ProbabilityBase2d( a_weightedFunctionals2d ) { + + m_type = ProbabilityBase2dType::weightedFunctionals; + + Vector const &weighted_function2d = a_weightedFunctionals2d.weighted_function2d( ); + m_weight.resize( weighted_function2d.size( ) ); + m_energy.resize( weighted_function2d.size( ) ); + for( std::size_t i1 = 0; i1 < weighted_function2d.size( ); ++i1 ) { + m_weight[i1] = Functions::parseFunction1d_d1( weighted_function2d[i1]->weight( ) ); + m_energy[i1] = parseProbability2d_d1( weighted_function2d[i1]->energy( ), nullptr ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE WeightedFunctionals2d::~WeightedFunctionals2d( ) { + + for( std::size_t i1 = 0; i1 < m_weight.size( ); ++i1 ) delete m_weight[i1]; + for( std::size_t i1 = 0; i1 < m_energy.size( ); ++i1 ) delete m_energy[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double WeightedFunctionals2d::evaluate( double a_x2, double a_x1 ) const { + + std::size_t n1 = m_weight.size( ); + double evaluatedValue = 0; + + for( std::size_t i1 = 0; i1 < n1; ++i1 ) { + evaluatedValue += m_weight[i1]->evaluate( a_x2 ) * m_energy[i1]->evaluate( a_x2, a_x1 ); + } + return( evaluatedValue ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void WeightedFunctionals2d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase2d::serialize( a_buffer, a_mode ); + + std::size_t vectorSize = m_weight.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_weight.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_weight.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_weight[vectorIndex] = serializeFunction1d_d1( a_buffer, a_mode, m_weight[vectorIndex] ); + } + + vectorSize = m_energy.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_energy.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_energy.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_energy[vectorIndex] = serializeProbability2d_d1( a_buffer, a_mode, m_energy[vectorIndex] ); + } +} + + +/* +============================================================ +===================== ProbabilityBase3d ==================== +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase3d::ProbabilityBase3d( ) : + m_type( ProbabilityBase3dType::none ) { + +} +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase3d::ProbabilityBase3d( GIDI::Functions::FunctionForm const &a_probability, Vector const &a_Xs ) : + ProbabilityBase( a_probability, a_Xs ), + m_type( ProbabilityBase3dType::none ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProbabilityBase3d::~ProbabilityBase3d( ) { + +} + +/* *********************************************************************************************************//** + * Returns a String representation of the **ProbabilityBase3d** type of *this*. + * + * @return A String instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE String ProbabilityBase3d::typeString( ) const { + + String typeStr( "ProbabilityBase3d::" ); + + switch( m_type ) { + case ProbabilityBase3dType::none : + typeStr += "none"; + break; + case ProbabilityBase3dType::XYs : + typeStr += "XYs"; + break; + } + + return( typeStr ); +} + +/* *********************************************************************************************************//** + * Returns the value of the function f(x3, x2, x1) at x3 = *a_x3*, x2 = *a_x2* and x1 = *a_x1*. + * + * @param a_x3 [in] The x3 value. + * @param a_x2 [in] The x2 value. + * @param a_x1 [in] The x1 value. + * + * @return The value of the function at *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProbabilityBase3d::evaluate( double a_x3, double a_x2, double a_x1 ) const { + + return( static_cast( this )->evaluate( a_x3, a_x2, a_x1 ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProbabilityBase3d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase::serialize( a_buffer, a_mode ); + + int type = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_type ) { + case ProbabilityBase3dType::none : + break; + case ProbabilityBase3dType::XYs : + type = 1; + break; + } + } + DATA_MEMBER_INT( type, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + m_type = ProbabilityBase3dType::none; + break; + case 1 : + m_type = ProbabilityBase3dType::XYs; + break; + } + } +} + +/* +============================================================ +========================== XYs3d =========================== +============================================================ +*/ +LUPI_HOST_DEVICE XYs3d::XYs3d( ) : + m_probabilities( ) { + + m_type = ProbabilityBase3dType::XYs; +} +/* +============================================================ +*/ +LUPI_HOST XYs3d::XYs3d( GIDI::Functions::XYs3d const &a_XYs3d ) : + ProbabilityBase3d( a_XYs3d, a_XYs3d.Xs( ) ) { + + m_type = ProbabilityBase3dType::XYs; + + Vector const &functions2d = a_XYs3d.function2ds( ); + m_probabilities.resize( functions2d.size( ) ); + for( std::size_t i1 = 0; i1 < functions2d.size( ); ++i1 ) m_probabilities[i1] = parseProbability2d_d1( functions2d[i1], nullptr ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE XYs3d::~XYs3d( ) { + + for( std::size_t i1 = 0; i1 < m_probabilities.size( ); ++i1 ) delete m_probabilities[i1]; +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE double XYs3d::evaluate( double a_x3, double a_x2, double a_x1 ) const { + + int lower = binarySearchVector( a_x3, m_Xs ); + double evaluatedValue; + + if( lower == -2 ) { // a_x3 < first value of Xs. + evaluatedValue = m_probabilities[0]->evaluate( a_x2, a_x1 ); } + else if( lower == -1 ) { // a_x3 > last value of Xs. + evaluatedValue = m_probabilities.back( )->evaluate( a_x2, a_x1 ); } + else { + double value1 = m_probabilities[lower]->evaluate( a_x2, a_x1 ); + + if( interpolation( ) == Interpolation::FLAT ) { + evaluatedValue = value1; } + else { + double value2 = m_probabilities[lower+1]->evaluate( a_x2, a_x1 ); + + if( interpolation( ) == Interpolation::LINLIN ) { + double fraction = ( m_Xs[lower+1] - a_x3 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + evaluatedValue = fraction * value1 + ( 1 - fraction ) * value2 ; } + else if( interpolation( ) == Interpolation::LOGLIN ) { + double fraction = ( m_Xs[lower+1] - a_x3 ) / ( m_Xs[lower+1] - m_Xs[lower] ); + evaluatedValue = value2 * pow( value2 / value1, fraction ); } + else if( interpolation( ) == Interpolation::LINLOG ) { + double fraction = log( m_Xs[lower+1] / a_x3 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + evaluatedValue = fraction * value1 + ( 1 - fraction ) * value2; } + else if( interpolation( ) == Interpolation::LOGLOG ) { + double fraction = log( m_Xs[lower+1] / a_x3 ) / log( m_Xs[lower+1] / m_Xs[lower] ); + evaluatedValue = value2 * pow( value2 / value1, fraction ); } + else { // This should never happen. + LUPI_THROW( "XYs3d::evaluate: unsupported interpolation." ); + } + } + } + + return( evaluatedValue ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void XYs3d::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + ProbabilityBase3d::serialize( a_buffer, a_mode ); + + std::size_t vectorSize = m_probabilities.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_probabilities.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_probabilities.internalSize(); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_probabilities[vectorIndex] = serializeProbability2d_d1( a_buffer, a_mode, m_probabilities[vectorIndex] ); + } +} + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase1d *parseProbability1d( GIDI::Functions::Function1dForm const *a_form1d ) { + + GIDI::FormType type = a_form1d->type( ); + + switch( type ) { + case GIDI::FormType::xs_pdf_cdf1d : + return( new Xs_pdf_cdf1d( *static_cast( a_form1d ) ) ); + default : + throw std::runtime_error( "Probabilities::parseProbability1d: Unsupported Function1d with moniker " + a_form1d->moniker( ) + + " at " + a_form1d->toXLink( ) ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase2d *parseProbability2d( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ) { + + GIDI::FormType type = form2d->type( ); + + switch( type ) { + case GIDI::FormType::XYs2d : + return( new XYs2d( *static_cast( form2d ) ) ); + case GIDI::FormType::regions2d : + return( new Regions2d( *static_cast( form2d ) ) ); + case GIDI::FormType::isotropic2d : + return( new Isotropic2d( *static_cast( form2d ) ) ); + case GIDI::FormType::discreteGamma2d : + return( new DiscreteGamma2d( *static_cast( form2d ) ) ); + case GIDI::FormType::primaryGamma2d : + return( new PrimaryGamma2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::recoil2d : + return( new Recoil2d( *static_cast( form2d ) ) ); + case GIDI::FormType::NBodyPhaseSpace2d : + return( new NBodyPhaseSpace2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::evaporation2d : + return( new Evaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::generalEvaporation2d : + return( new GeneralEvaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::simpleMaxwellianFission2d : + return( new SimpleMaxwellianFission2d( *static_cast( form2d ) ) ); + case GIDI::FormType::Watt2d : + return( new Watt2d( *static_cast( form2d ) ) ); + case GIDI::FormType::weightedFunctionals2d : + return( new WeightedFunctionals2d( *static_cast( form2d ) ) ); + default : + throw std::runtime_error( "Probabilities::parseProbability2d: Unsupported Function2d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase2d_d1 *parseProbability2d_d1( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ) { + + GIDI::FormType type = form2d->type( ); + + switch( type ) { + case GIDI::FormType::XYs2d : + return( new XYs2d( *static_cast( form2d ) ) ); + case GIDI::FormType::regions2d : + return( new Regions2d( *static_cast( form2d ) ) ); + case GIDI::FormType::isotropic2d : + return( new Isotropic2d( *static_cast( form2d ) ) ); + case GIDI::FormType::discreteGamma2d : + return( new DiscreteGamma2d( *static_cast( form2d ) ) ); + case GIDI::FormType::primaryGamma2d : + return( new PrimaryGamma2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::recoil2d : + return( new Recoil2d( *static_cast( form2d ) ) ); + case GIDI::FormType::NBodyPhaseSpace2d : + return( new NBodyPhaseSpace2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::evaporation2d : + return( new Evaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::generalEvaporation2d : + return( new GeneralEvaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::simpleMaxwellianFission2d : + return( new SimpleMaxwellianFission2d( *static_cast( form2d ) ) ); + case GIDI::FormType::Watt2d : + return( new Watt2d( *static_cast( form2d ) ) ); + default : + throw std::runtime_error( "Probabilities::parseProbability2d: Unsupported Function2d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase2d_d2 *parseProbability2d_d2( GIDI::Functions::Function2dForm const *form2d, SetupInfo *a_setupInfo ) { + + GIDI::FormType type = form2d->type( ); + + switch( type ) { + case GIDI::FormType::XYs2d : + return( new XYs2d( *static_cast( form2d ) ) ); + case GIDI::FormType::isotropic2d : + return( new Isotropic2d( *static_cast( form2d ) ) ); + case GIDI::FormType::discreteGamma2d : + return( new DiscreteGamma2d( *static_cast( form2d ) ) ); + case GIDI::FormType::primaryGamma2d : + return( new PrimaryGamma2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::NBodyPhaseSpace2d : + return( new NBodyPhaseSpace2d( *static_cast( form2d ), a_setupInfo ) ); + case GIDI::FormType::evaporation2d : + return( new Evaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::generalEvaporation2d : + return( new GeneralEvaporation2d( *static_cast( form2d ) ) ); + case GIDI::FormType::simpleMaxwellianFission2d : + return( new SimpleMaxwellianFission2d( *static_cast( form2d ) ) ); + case GIDI::FormType::Watt2d : + return( new Watt2d( *static_cast( form2d ) ) ); + default : + throw std::runtime_error( "Probabilities::parseProbability2d: Unsupported Function2d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST ProbabilityBase3d *parseProbability3d( GIDI::Functions::Function3dForm const *form3d ) { + + GIDI::FormType type = form3d->type( ); + + switch( type ) { + case GIDI::FormType::XYs3d : + return( new XYs3d( *static_cast( form3d ) ) ); + default : + throw std::runtime_error( "Probabilities::parseProbability3d: Unsupported Function3d" ); + } + + return( nullptr ); +} + +/* +============================================================ +*/ +LUPI_HOST static ProbabilityBase1d *ptwXY_To_Xs_pdf_cdf1d( ptwXYPoints *pdfXY ) { + + ptwXPoints *cdfX = nullptr; + ptwXYPoint *point; + std::size_t n1 = (std::size_t) ptwXY_length( nullptr, pdfXY ); + std::vector Xs( n1 ), pdf( n1 ), cdf( n1 ); + + if( ( cdfX = ptwXY_runningIntegral( nullptr, pdfXY ) ) == nullptr ) throw std::runtime_error( "ptwXY_To_Xs_pdf_cdf1d: ptwXY_runningIntegral returned error." ); + double norm = ptwX_getPointAtIndex_Unsafely( cdfX, n1 - 1 ); + if( norm <= 0 ) throw std::runtime_error( "ptwXY_To_Xs_pdf_cdf1d: norm <= 0." ); + + norm = 1. / norm; + for( std::size_t i1 = 0; i1 < n1; ++i1 ) { + point = ptwXY_getPointAtIndex_Unsafely( pdfXY, i1 ); + Xs[i1] = point->x; + pdf[i1] = norm * point->y; + cdf[i1] = norm * ptwX_getPointAtIndex_Unsafely( cdfX, i1 ); + } + cdf[n1-1] = 1.; + + ptwX_free( cdfX ); + + GIDI::Axes axes; + GIDI::Functions::Xs_pdf_cdf1d gidi_xs_pdf_cdf1d( axes, ptwXY_interpolationLinLin, Xs, pdf, cdf ); + + Xs_pdf_cdf1d *xs_pdf_cdf1d = new Xs_pdf_cdf1d( gidi_xs_pdf_cdf1d ); + return( xs_pdf_cdf1d ); +} + +} // End of namespace Probabilities. + +/* +============================================================ +========================== others ========================== +============================================================ +*/ +LUPI_HOST_DEVICE Interpolation GIDI2MCGIDI_interpolation( ptwXY_interpolation a_interpolation ) { + + if( a_interpolation == ptwXY_interpolationLinLin ) return( Interpolation::LINLIN ); + if( a_interpolation == ptwXY_interpolationLogLin ) return( Interpolation::LOGLIN ); + if( a_interpolation == ptwXY_interpolationLinLog ) return( Interpolation::LINLOG ); + if( a_interpolation == ptwXY_interpolationLogLog ) return( Interpolation::LOGLOG ); + if( a_interpolation == ptwXY_interpolationFlat ) return( Interpolation::FLAT ); + return( Interpolation::OTHER ); +} +/* +============================================================ +*/ +LUPI_HOST_DEVICE Function1dType Function1dClass( Functions::Function1d *a_function ) { + + if( a_function == nullptr ) return( Function1dType::none ); + return( a_function->type( ) ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Functions::Function1d *serializeFunction1d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Functions::Function1d *a_function1d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + Function1dType fType = Function1dClass( a_function1d ); + + switch( fType ) { + case Function1dType::none : + break; + case Function1dType::constant : + type = 1; + break; + case Function1dType::XYs : + type = 2; + break; + case Function1dType::polyomial : + type = 3; + break; + case Function1dType::gridded : + type = 4; + break; + case Function1dType::regions : + type = 5; + break; + case Function1dType::branching : + type = 6; + break; + case Function1dType::TerrellFissionNeutronMultiplicityModel : + type = 7; + break; + default: + String message( "serializeFunction1d: Unsupported Function1d: " + a_function1d->typeString( ) ); + LUPI_THROW( message.c_str( ) ); + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_function1d = nullptr; + switch( type ) { + case 0 : + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Constant1d; + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); } + else { + a_function1d = new Functions::Constant1d; + } + break; + case 2 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::XYs1d; + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); } + else { + a_function1d = new Functions::XYs1d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Polynomial1d; + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); } + else { + a_function1d = new Functions::Polynomial1d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Gridded1d; + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); } + else { + a_function1d = new Functions::Gridded1d; + } + break; + case 5 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Regions1d; + a_buffer.incrementPlacement( sizeof( Functions::Regions1d ) ); } + else { + a_function1d = new Functions::Regions1d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Branching1d; + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); } + else { + a_function1d = new Functions::Branching1d; + } + break; + case 7 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::TerrellFissionNeutronMultiplicityModel; + a_buffer.incrementPlacement( sizeof( Functions::TerrellFissionNeutronMultiplicityModel ) ); } + else { + a_function1d = new Functions::TerrellFissionNeutronMultiplicityModel; + } + break; + default: // This should never happen as Unpack should be called after Pack which checks type. + LUPI_THROW( "serializeFunction1d: Unsupported Function1d:" ); + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); + break; + case 2 : + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); + break; + case 5 : + a_buffer.incrementPlacement( sizeof( Functions::Regions1d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); + break; + case 7 : + a_buffer.incrementPlacement( sizeof( Functions::TerrellFissionNeutronMultiplicityModel ) ); + break; + default: + LUPI_THROW( "serializeFunction1d: Unsupported Function1d:" ); + } + } + + if( a_function1d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 2 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 5 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 7 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + default: + LUPI_THROW( "serializeFunction1d: Unsupported Function1d:" ); + } + } + + return( a_function1d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Functions::Function1d_d1 *serializeFunction1d_d1( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Functions::Function1d_d1 *a_function1d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + Function1dType fType = Function1dClass( a_function1d ); + + switch( fType ) { + case Function1dType::none : + break; + case Function1dType::constant : + type = 1; + break; + case Function1dType::XYs : + type = 2; + break; + case Function1dType::polyomial : + type = 3; + break; + case Function1dType::gridded : + type = 4; + break; + case Function1dType::regions : + type = 5; + break; + case Function1dType::branching : + type = 6; + break; + default: + String message( "serializeFunction1d_d1: Unsupported Function1d: " + a_function1d->typeString( ) ); + LUPI_THROW( message.c_str( ) ); + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_function1d = nullptr; + switch( type ) { + case 0 : + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Constant1d; + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); } + else { + a_function1d = new Functions::Constant1d; + } + break; + case 2 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::XYs1d; + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); } + else { + a_function1d = new Functions::XYs1d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Polynomial1d; + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); } + else { + a_function1d = new Functions::Polynomial1d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Gridded1d; + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); } + else { + a_function1d = new Functions::Gridded1d; + } + break; + case 5 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Regions1d; + a_buffer.incrementPlacement( sizeof( Functions::Regions1d ) ); } + else { + a_function1d = new Functions::Regions1d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Branching1d; + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); } + else { + a_function1d = new Functions::Branching1d; + } + break; + default: // This should never happen as Unpack should be called after Pack which checks type. + LUPI_THROW( "serializeFunction1d_d1: Unsupported Function1d:" ); + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); + break; + case 2 : + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); + break; + case 5 : + a_buffer.incrementPlacement( sizeof( Functions::Regions1d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); + break; + default: + LUPI_THROW( "serializeFunction1d_d1: Unsupported Function1d:" ); + } + } + + if( a_function1d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 2 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 5 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + default: + LUPI_THROW( "serializeFunction1d_d1: Unsupported Function1d:" ); + } + } + + return( a_function1d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Functions::Function1d_d2 *serializeFunction1d_d2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Functions::Function1d_d2 *a_function1d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + Function1dType fType = Function1dClass( a_function1d ); + + switch( fType ) { + case Function1dType::none : + break; + case Function1dType::constant : + type = 1; + break; + case Function1dType::XYs : + type = 2; + break; + case Function1dType::polyomial : + type = 3; + break; + case Function1dType::gridded : + type = 4; + break; + break; + case Function1dType::branching : + type = 6; + break; + default: + String message( "serializeFunction1d_d2: Unsupported Function1d: " + a_function1d->typeString( ) ); + LUPI_THROW( message.c_str( ) ); + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_function1d = nullptr; + switch( type ) { + case 0 : + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Constant1d; + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); } + else { + a_function1d = new Functions::Constant1d; + } + break; + case 2 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::XYs1d; + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); } + else { + a_function1d = new Functions::XYs1d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Polynomial1d; + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); } + else { + a_function1d = new Functions::Polynomial1d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Gridded1d; + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); } + else { + a_function1d = new Functions::Gridded1d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_function1d = new(a_buffer.m_placement) Functions::Branching1d; + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); } + else { + a_function1d = new Functions::Branching1d; + } + break; + default: // This should never happen as Unpack should be called after Pack which checks type. + LUPI_THROW( "serializeFunction1d_d2: Unsupported Function1d:" ); + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Functions::Constant1d ) ); + break; + case 2 : + a_buffer.incrementPlacement( sizeof( Functions::XYs1d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Functions::Polynomial1d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Functions::Gridded1d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Functions::Branching1d ) ); + break; + default: + LUPI_THROW( "serializeFunction1d_d2: Unsupported Function1d:" ); + } + } + + if( a_function1d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 2 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_function1d )->serialize( a_buffer, a_mode ); + break; + default: + LUPI_THROW( "serializeFunction1d_d2: Unsupported Function1d:" ); + } + } + + return( a_function1d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Function2dType Function2dClass( Functions::Function2d *a_function ) { + + if( a_function == nullptr ) return( Function2dType::none ); + return( a_function->type( ) ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Functions::Function2d *serializeFunction2d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Functions::Function2d *a_function2d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + Function2dType fType = Function2dClass( a_function2d ); + + switch( fType ) { + case Function2dType::none : + break; + case Function2dType::XYs : + type = 1; + break; + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_function2d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_function2d = new(a_buffer.m_placement) Functions::XYs2d; + a_buffer.incrementPlacement( sizeof( Functions::XYs2d ) ); } + else { + a_function2d = new Functions::XYs2d; + } + break; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Functions::XYs2d ) ); + break; + } + } + + if( a_function2d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_function2d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_function2d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase1dType ProbabilityBase1dClass( Probabilities::ProbabilityBase1d *a_function ) { + + if( a_function == nullptr ) return( ProbabilityBase1dType::none ); + return( a_function->type( ) ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Probabilities::ProbabilityBase1d *serializeProbability1d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Probabilities::ProbabilityBase1d *a_probability1d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + ProbabilityBase1dType pType = ProbabilityBase1dClass( a_probability1d ); + + switch( pType ) { + case ProbabilityBase1dType::none : + break; + case ProbabilityBase1dType::xs_pdf_cdf : + type = 1; + break; + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_probability1d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_probability1d = new(a_buffer.m_placement) Probabilities::Xs_pdf_cdf1d; + a_buffer.incrementPlacement( sizeof( Probabilities::Xs_pdf_cdf1d ) ); } + else { + a_probability1d = new Probabilities::Xs_pdf_cdf1d; + } + break; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Probabilities::Xs_pdf_cdf1d ) ); + break; + } + } + + if( a_probability1d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_probability1d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_probability1d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase2dType ProbabilityBase2dClass( Probabilities::ProbabilityBase2d *a_function ) { + + if( a_function == nullptr ) return( ProbabilityBase2dType::none ); + return( a_function->type( ) ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d *serializeProbability2d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, + Probabilities::ProbabilityBase2d *a_probability2d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + ProbabilityBase2dType pType = ProbabilityBase2dClass( a_probability2d ); + + switch( pType ) { + case ProbabilityBase2dType::none : + break; + case ProbabilityBase2dType::XYs : + type = 1; + break; + case ProbabilityBase2dType::regions : + type = 2; + break; + case ProbabilityBase2dType::isotropic : + type = 3; + break; + case ProbabilityBase2dType::discreteGamma : + type = 4; + break; + case ProbabilityBase2dType::primaryGamma : + type = 5; + break; + case ProbabilityBase2dType::recoil : + type = 6; + break; + case ProbabilityBase2dType::NBodyPhaseSpace : + type = 7; + break; + case ProbabilityBase2dType::evaporation : + type = 8; + break; + case ProbabilityBase2dType::generalEvaporation : + type = 9; + break; + case ProbabilityBase2dType::simpleMaxwellianFission : + type = 10; + break; + case ProbabilityBase2dType::Watt : + type = 11; + break; + case ProbabilityBase2dType::weightedFunctionals : + type = 12; + break; + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_probability2d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::XYs2d; + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); } + else { + a_probability2d = new Probabilities::XYs2d; + } + break; + case 2 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Regions2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Regions2d ) ); } + else { + a_probability2d = new Probabilities::Regions2d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Isotropic2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); } + else { + a_probability2d = new Probabilities::Isotropic2d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::DiscreteGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); } + else { + a_probability2d = new Probabilities::DiscreteGamma2d; + } + break; + case 5 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::PrimaryGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); } + else { + a_probability2d = new Probabilities::PrimaryGamma2d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Recoil2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); } + else { + a_probability2d = new Probabilities::Recoil2d; + } + break; + case 7 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::NBodyPhaseSpace2d; + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); } + else { + a_probability2d = new Probabilities::NBodyPhaseSpace2d; + } + break; + case 8 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Evaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); } + else { + a_probability2d = new Probabilities::Evaporation2d; + } + break; + case 9 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::GeneralEvaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); } + else { + a_probability2d = new Probabilities::GeneralEvaporation2d; + } + break; + case 10 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::SimpleMaxwellianFission2d; + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); } + else { + a_probability2d = new Probabilities::SimpleMaxwellianFission2d; + } + break; + case 11 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Watt2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); } + else { + a_probability2d = new Probabilities::Watt2d; + } + break; + case 12 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::WeightedFunctionals2d; + a_buffer.incrementPlacement( sizeof( Probabilities::WeightedFunctionals2d ) ); } + else { + a_probability2d = new Probabilities::WeightedFunctionals2d; + } + break; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); + break; + case 2 : + a_buffer.incrementPlacement( sizeof( Probabilities::Regions2d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); + break; + case 5 : + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); + break; + case 7 : + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); + break; + case 8 : + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); + break; + case 9 : + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); + break; + case 10 : + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); + break; + case 11 : + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); + break; + case 12 : + a_buffer.incrementPlacement( sizeof( Probabilities::WeightedFunctionals2d ) ); + break; + } + } + + if( a_probability2d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 2 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 5 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 7 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 8 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 9 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 10 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 11 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 12 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_probability2d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d1 *serializeProbability2d_d1( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase2d_d1 *a_probability2d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + ProbabilityBase2dType pType = ProbabilityBase2dClass( a_probability2d ); + + switch( pType ) { + case ProbabilityBase2dType::none : + break; + case ProbabilityBase2dType::XYs : + type = 1; + break; + case ProbabilityBase2dType::regions : + type = 2; + break; + case ProbabilityBase2dType::isotropic : + type = 3; + break; + case ProbabilityBase2dType::discreteGamma : + type = 4; + break; + case ProbabilityBase2dType::primaryGamma : + type = 5; + break; + case ProbabilityBase2dType::recoil : + type = 6; + break; + case ProbabilityBase2dType::NBodyPhaseSpace : + type = 7; + break; + case ProbabilityBase2dType::evaporation : + type = 8; + break; + case ProbabilityBase2dType::generalEvaporation : + type = 9; + break; + case ProbabilityBase2dType::simpleMaxwellianFission : + type = 10; + break; + case ProbabilityBase2dType::Watt : + type = 11; + break; + default: + LUPI_THROW( "Probabilities::ProbabilityBase2d_d1: Unsupported ProbabilityBase2d_d1." ); + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_probability2d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::XYs2d; + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); } + else { + a_probability2d = new Probabilities::XYs2d; + } + break; + case 2 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Regions2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Regions2d ) ); } + else { + a_probability2d = new Probabilities::Regions2d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Isotropic2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); } + else { + a_probability2d = new Probabilities::Isotropic2d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::DiscreteGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); } + else { + a_probability2d = new Probabilities::DiscreteGamma2d; + } + break; + case 5 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::PrimaryGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); } + else { + a_probability2d = new Probabilities::PrimaryGamma2d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Recoil2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); } + else { + a_probability2d = new Probabilities::Recoil2d; + } + break; + case 7 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::NBodyPhaseSpace2d; + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); } + else { + a_probability2d = new Probabilities::NBodyPhaseSpace2d; + } + break; + case 8 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Evaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); } + else { + a_probability2d = new Probabilities::Evaporation2d; + } + break; + case 9 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::GeneralEvaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); } + else { + a_probability2d = new Probabilities::GeneralEvaporation2d; + } + break; + case 10 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::SimpleMaxwellianFission2d; + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); } + else { + a_probability2d = new Probabilities::SimpleMaxwellianFission2d; + } + break; + case 11 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Watt2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); } + else { + a_probability2d = new Probabilities::Watt2d; + } + break; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); + break; + case 2 : + a_buffer.incrementPlacement( sizeof( Probabilities::Regions2d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); + break; + case 5 : + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); + break; + case 7 : + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); + break; + case 8 : + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); + break; + case 9 : + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); + break; + case 10 : + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); + break; + case 11 : + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); + break; + } + } + + if( a_probability2d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 2 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 5 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 7 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 8 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 9 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 10 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 11 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_probability2d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Probabilities::ProbabilityBase2d_d2 *serializeProbability2d_d2( LUPI::DataBuffer &a_buffer, + LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase2d_d2 *a_probability2d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + ProbabilityBase2dType pType = ProbabilityBase2dClass( a_probability2d ); + + switch( pType ) { + case ProbabilityBase2dType::none : + break; + case ProbabilityBase2dType::XYs : + type = 1; + break; + case ProbabilityBase2dType::isotropic : + type = 3; + break; + case ProbabilityBase2dType::discreteGamma : + type = 4; + break; + case ProbabilityBase2dType::primaryGamma : + type = 5; + break; + case ProbabilityBase2dType::recoil : + type = 6; + break; + case ProbabilityBase2dType::NBodyPhaseSpace : + type = 7; + break; + case ProbabilityBase2dType::evaporation : + type = 8; + break; + case ProbabilityBase2dType::generalEvaporation : + type = 9; + break; + case ProbabilityBase2dType::simpleMaxwellianFission : + type = 10; + break; + case ProbabilityBase2dType::Watt : + type = 11; + break; + default: + LUPI_THROW( "Probabilities::ProbabilityBase2d_d1: Unsupported ProbabilityBase2d_d2" ); + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_probability2d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::XYs2d; + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); } + else { + a_probability2d = new Probabilities::XYs2d; + } + break; + case 3 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Isotropic2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); } + else { + a_probability2d = new Probabilities::Isotropic2d; + } + break; + case 4 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::DiscreteGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); } + else { + a_probability2d = new Probabilities::DiscreteGamma2d; + } + break; + case 5 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::PrimaryGamma2d; + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); } + else { + a_probability2d = new Probabilities::PrimaryGamma2d; + } + break; + case 6 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Recoil2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); } + else { + a_probability2d = new Probabilities::Recoil2d; + } + break; + case 7 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::NBodyPhaseSpace2d; + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); } + else { + a_probability2d = new Probabilities::NBodyPhaseSpace2d; + } + break; + case 8 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Evaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); } + else { + a_probability2d = new Probabilities::Evaporation2d; + } + break; + case 9 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::GeneralEvaporation2d; + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); } + else { + a_probability2d = new Probabilities::GeneralEvaporation2d; + } + break; + case 10 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::SimpleMaxwellianFission2d; + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); } + else { + a_probability2d = new Probabilities::SimpleMaxwellianFission2d; + } + break; + case 11 : + if( a_buffer.m_placement != nullptr ) { + a_probability2d = new(a_buffer.m_placement) Probabilities::Watt2d; + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); } + else { + a_probability2d = new Probabilities::Watt2d; + } + break; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Probabilities::XYs2d ) ); + break; + case 3 : + a_buffer.incrementPlacement( sizeof( Probabilities::Isotropic2d ) ); + break; + case 4 : + a_buffer.incrementPlacement( sizeof( Probabilities::DiscreteGamma2d ) ); + break; + case 5 : + a_buffer.incrementPlacement( sizeof( Probabilities::PrimaryGamma2d ) ); + break; + case 6 : + a_buffer.incrementPlacement( sizeof( Probabilities::Recoil2d ) ); + break; + case 7 : + a_buffer.incrementPlacement( sizeof( Probabilities::NBodyPhaseSpace2d ) ); + break; + case 8 : + a_buffer.incrementPlacement( sizeof( Probabilities::Evaporation2d ) ); + break; + case 9 : + a_buffer.incrementPlacement( sizeof( Probabilities::GeneralEvaporation2d ) ); + break; + case 10 : + a_buffer.incrementPlacement( sizeof( Probabilities::SimpleMaxwellianFission2d ) ); + break; + case 11 : + a_buffer.incrementPlacement( sizeof( Probabilities::Watt2d ) ); + break; + } + } + + if( a_probability2d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 3 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 4 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 5 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 6 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 7 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 8 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 9 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 10 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + case 11 : + static_cast( a_probability2d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_probability2d ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE ProbabilityBase3dType ProbabilityBase3dClass( Probabilities::ProbabilityBase3d *a_function ) { + + if( a_function == nullptr ) return( ProbabilityBase3dType::none ); + return( a_function->type( ) ); +} + +/* +============================================================ +*/ +LUPI_HOST_DEVICE Probabilities::ProbabilityBase3d *serializeProbability3d( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Probabilities::ProbabilityBase3d *a_probability3d ) { + + int type = 0; + + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + ProbabilityBase3dType pType = ProbabilityBase3dClass( a_probability3d ); + + switch( pType ) { + case ProbabilityBase3dType::none : + break; + case ProbabilityBase3dType::XYs : + type = 1; + break; + } + } + + DATA_MEMBER_INT( type, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( type ) { + case 0 : + a_probability3d = nullptr; + break; + case 1 : + if( a_buffer.m_placement != nullptr ) { + a_probability3d = new(a_buffer.m_placement) Probabilities::XYs3d; + a_buffer.incrementPlacement( sizeof( Probabilities::XYs3d ) ); } + else { + a_probability3d = new Probabilities::XYs3d; + } + break; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + switch( type ) { + case 0 : + break; + case 1 : + a_buffer.incrementPlacement( sizeof( Probabilities::XYs3d ) ); + break; + } + } + + if( a_probability3d != nullptr ) { + switch( type ) { + case 0 : + break; + case 1 : + static_cast( a_probability3d )->serialize( a_buffer, a_mode ); + break; + } + } + + return( a_probability3d ); +} + +} // End of namespace MCGIDI. diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_heatedCrossSections.cc b/source/processes/hadronic/models/lend/src/MCGIDI_heatedCrossSections.cc new file mode 100644 index 0000000000..ee2ff3b26c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_heatedCrossSections.cc @@ -0,0 +1,2332 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +static LUPI_HOST void checkZeroReaction( GIDI::Vector &vector, bool a_zeroReactions ); +static LUPI_HOST GIDI::Vector collapseAndcheckZeroReaction( GIDI::Vector &a_vector, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles, double a_temperature, bool a_zeroReactions ); +static void writeVector( FILE *a_file, std::string const &a_prefix, int a_offset, Vector const &a_vector ); + +/*! \class HeatedReactionCrossSectionContinuousEnergy + * Class to store a reaction's cross section. + */ + +/* *********************************************************************************************************//** + * Simple constructor needed for broadcasting. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedReactionCrossSectionContinuousEnergy::HeatedReactionCrossSectionContinuousEnergy( ) : + m_offset( 0 ), + m_threshold( 0.0 ), + m_crossSections( ), + m_URR_mode( Transporting::URR_mode::none ), + m_URR_probabilityTables( nullptr ), + m_ACE_URR_probabilityTables( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_offset [in] The offset of the first cross section point in the energy grid. + * @param a_threshold [in] The threshold for the reaction. + * @param a_crossSection [in] The cross section for the reaction. + ***********************************************************************************************************/ + +LUPI_HOST HeatedReactionCrossSectionContinuousEnergy::HeatedReactionCrossSectionContinuousEnergy( int a_offset, double a_threshold, Vector &a_crossSection ) : + m_offset( a_offset ), + m_threshold( a_threshold ), + m_crossSections( a_crossSection.size( ) ), + m_URR_mode( Transporting::URR_mode::none ), + m_URR_probabilityTables( nullptr ), + m_ACE_URR_probabilityTables( nullptr ) { + + int index = 0; // This and next line needed as m_crossSections may be an instance of Vector. + for( auto iter = a_crossSection.begin( ); iter != a_crossSection.end( ); ++iter, ++index ) m_crossSections[index] = *iter; + +} + +/* *********************************************************************************************************//** + * @param a_threshold [in] The threshold for the reaction. + * @param a_crossSection [in] The cross section for the reaction. + * @param a_URR_probabilityTables [in] The pdf style URR probability tables. + * @param a_ACE_URR_probabilityTables [in] The ACE style URR probability tables. + ***********************************************************************************************************/ + +LUPI_HOST HeatedReactionCrossSectionContinuousEnergy::HeatedReactionCrossSectionContinuousEnergy( double a_threshold, + GIDI::Functions::Ys1d const &a_crossSection, Probabilities::ProbabilityBase2d *a_URR_probabilityTables, + ACE_URR_probabilityTables *a_ACE_URR_probabilityTables ) : + m_offset( a_crossSection.start( ) ), + m_threshold( a_threshold ), + m_crossSections( a_crossSection.Ys( ).size( ) ), + m_URR_mode( Transporting::URR_mode::none ), + m_URR_probabilityTables( a_URR_probabilityTables ), + m_ACE_URR_probabilityTables( a_ACE_URR_probabilityTables ) { + + int index = 0; // Next lines needed as m_crossSections may be an instance of Vector. + std::vector const &Ys = a_crossSection.Ys( ); + for( auto iter = Ys.begin( ); iter != Ys.end( ); ++iter, ++index ) m_crossSections[index] = *iter; + + if( m_URR_probabilityTables != nullptr ) { + m_URR_mode = Transporting::URR_mode::pdfs; } + else if( m_ACE_URR_probabilityTables != nullptr ) { + m_URR_mode = Transporting::URR_mode::ACE_URR_probabilityTables; + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedReactionCrossSectionContinuousEnergy::~HeatedReactionCrossSectionContinuousEnergy( ) { + + delete m_URR_probabilityTables; + delete m_ACE_URR_probabilityTables; +} + +/* *********************************************************************************************************//** + * Returns the minimum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedReactionCrossSectionContinuousEnergy::URR_domainMin( ) const { + + if( m_URR_probabilityTables != nullptr ) return( m_URR_probabilityTables->domainMin( ) ); + if( m_ACE_URR_probabilityTables != nullptr ) return( m_ACE_URR_probabilityTables->domainMin( ) ); + + return( -1.0 ); +} + +/* *********************************************************************************************************//** + * Returns the maximum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedReactionCrossSectionContinuousEnergy::URR_domainMax( ) const { + + if( m_URR_probabilityTables != nullptr ) return( m_URR_probabilityTables->domainMax( ) ); + if( m_ACE_URR_probabilityTables != nullptr ) return( m_ACE_URR_probabilityTables->domainMax( ) ); + + return( -1.0 ); +} + +/* *********************************************************************************************************//** + * Returns the reactions cross section as a GIDI::Functions::XYs1d instance. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d HeatedReactionCrossSectionContinuousEnergy::crossSectionAsGIDI_XYs1d( double a_temperature, + Vector const &a_energies ) const { + + std::vector energies = vectorToSTD_vector( a_energies ); + std::vector crossSection( energies.size( ), 0.0 ); + for( std::size_t index = 0; index < m_crossSections.size( ); ++index ) crossSection[m_offset+index] = m_crossSections[index]; + + return( GIDI::Functions::XYs1d( GIDI::Axes( ), ptwXY_interpolationLinLin, energies, crossSection, 0, a_temperature ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedReactionCrossSectionContinuousEnergy::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_offset, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_threshold, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_crossSections, a_buffer, a_mode ); + m_URR_mode = serializeURR_mode( m_URR_mode, a_buffer, a_mode ); + m_URR_probabilityTables = serializeProbability2d( a_buffer, a_mode, m_URR_probabilityTables ); + m_ACE_URR_probabilityTables = serializeACE_URR_probabilityTables( m_ACE_URR_probabilityTables, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The ProtareSingle instance *this* resides in. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ + +LUPI_HOST void HeatedReactionCrossSectionContinuousEnergy::print( LUPI_maybeUnused ProtareSingle const *a_protareSingle, std::string const &a_indent, + LUPI_maybeUnused std::string const &a_iFormat, LUPI_maybeUnused std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + std::cout << a_indent << "# Offset = " << m_offset << std::endl; + std::cout << a_indent << "# Threshold = " << m_threshold << std::endl; + + std::cout << a_indent << "# Number of cross section points = " << m_crossSections.size( ) << std::endl; + for( auto iter = m_crossSections.begin( ); iter != m_crossSections.end( ); ++iter ) + std::cout << a_indent << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), *iter ) << std::endl; +} + +/* +============================================================ +=================== ContinuousEnergyGain =================== +============================================================ +*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ +LUPI_HOST_DEVICE ContinuousEnergyGain::ContinuousEnergyGain( ) : + m_particleIntid( -1 ), + m_particleIndex( -1 ), + m_userParticleIndex( -1 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST ContinuousEnergyGain::ContinuousEnergyGain( int a_particleIntid, int a_particleIndex, std::size_t a_size ) : + m_particleIntid( a_particleIntid ), + m_particleIndex( a_particleIndex ), + m_userParticleIndex( -1 ), + m_gain( a_size, static_cast( 0.0 ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST ContinuousEnergyGain &ContinuousEnergyGain::operator=( ContinuousEnergyGain const &a_continuousEnergyGain ) { + + m_particleIntid = a_continuousEnergyGain.particleIntid( ); + m_particleIndex = a_continuousEnergyGain.particleIndex( ); + m_userParticleIndex = a_continuousEnergyGain.userParticleIndex( ); + m_gain = a_continuousEnergyGain.gain( ); + + return( *this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ContinuousEnergyGain::gain( int a_energy_index, double a_energy_fraction ) const { + + return( a_energy_fraction * m_gain[a_energy_index] + ( 1.0 - a_energy_fraction ) * m_gain[a_energy_index+1] ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ContinuousEnergyGain::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_particleIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_particleIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_userParticleIndex, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_gain, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The ProtareSingle instance *this* resides in. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ + +LUPI_HOST void ContinuousEnergyGain::print( LUPI_maybeUnused ProtareSingle const *a_protareSingle, std::string const &a_indent, LUPI_maybeUnused std::string const &a_iFormat, + LUPI_maybeUnused std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + std::cout << std::endl; + std::cout << a_indent << "# Particle intid = " << m_particleIntid << std::endl; + std::cout << a_indent << "# Particle index = " << m_particleIndex << std::endl; + std::cout << a_indent << "# Use particle index = " << m_userParticleIndex << std::endl; + + std::cout << a_indent << "# Number of gains = " << m_gain.size( ) << std::endl; + for( auto iter = m_gain.begin( ); iter != m_gain.end( ); ++iter ) + std::cout << a_indent << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), *iter ) << std::endl; +} + +/* +============================================================ +=========== HeatedCrossSectionContinuousEnergy ============= +============================================================ +*/ +LUPI_HOST_DEVICE HeatedCrossSectionContinuousEnergy::HeatedCrossSectionContinuousEnergy( ) : + m_temperature( 0.0 ), + m_hashIndices( ), + m_energies( ), + m_totalCrossSection( ), + m_depositionEnergy( ), + m_depositionMomentum( ), + m_productionEnergy( ), + m_gains( ), + m_URR_mode( Transporting::URR_mode::none ), + m_reactionsInURR_region( ), + m_reactionCrossSections( ), + m_ACE_URR_probabilityTables( nullptr ) { + +} + +/* *********************************************************************************************************//** + * Fills in *this* with the requested temperature data. + * + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other components. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfo [in] The list of temperatures to use. + * @param a_reactions [in] The list of reactions to use. + * @param a_orphanProducts [in] The list of orphan products to use. + * @param a_fixedGrid [in] If true, the specified fixed grid is used; otherwise, grid in the file is used. + * @param a_zeroReactions [in] Special case where no reaction in a protare is wanted so the first one is used but its cross section is set to 0.0 at all energies. + ***********************************************************************************************************/ + +LUPI_HOST HeatedCrossSectionContinuousEnergy::HeatedCrossSectionContinuousEnergy( SetupInfo &a_setupInfo, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, + std::vector const &a_reactions, std::vector const &a_orphanProducts, bool a_fixedGrid, + bool a_zeroReactions ) : + m_temperature( a_temperatureInfo.temperature( ).value( ) ), + m_hashIndices( ), + m_energies( ), + m_totalCrossSection( ), + m_depositionEnergy( ), + m_depositionMomentum( ), + m_productionEnergy( ), + m_gains( ), + m_URR_mode( Transporting::URR_mode::none ), + m_reactionsInURR_region( ), + m_reactionCrossSections( ), + m_ACE_URR_probabilityTables( nullptr ) { + + bool isPhotoAtomic = a_setupInfo.m_protare.isPhotoAtomic( ); + std::string label( a_temperatureInfo.griddedCrossSection( ) ); + std::string URR_label( a_temperatureInfo.URR_probabilityTables( ) ); + + GIDI::Styles::GriddedCrossSection const &griddedCrossSectionStyle = + static_cast( *a_settings.styles( )->get( label ) ); + GIDI::Grid const &grid = griddedCrossSectionStyle.grid( ); + + std::vector const *energiesPointer; + std::vector const &energies = grid.data( ).vector(); + std::vector const &fixedGridPoints = a_settings.fixedGridPoints( ); + std::vector fixedGridIndices( fixedGridPoints.size( ) ); + if( a_fixedGrid ) { + for( std::size_t i1 = 0; i1 < fixedGridPoints.size( ); ++i1 ) { + fixedGridIndices[i1] = binarySearchVector( fixedGridPoints[i1], energies ); + } + energiesPointer = &fixedGridPoints; + m_energies = fixedGridPoints; } + else { + energiesPointer = &energies; + m_energies = energies; + } + + m_hashIndices = a_domainHash.map( m_energies ); + + int reactionIndex = 0; + GIDI::Axes axes; + std::vector dummy; + GIDI::Functions::Ys1d totalCrossSection( axes, ptwXY_interpolationLinLin, 0, dummy ); + GIDI::Functions::Ys1d fixedGridCrossSection( axes, ptwXY_interpolationLinLin, 0, fixedGridPoints ); + m_reactionCrossSections.resize( a_reactions.size( ) ); + m_URR_mode = Transporting::URR_mode::none; + for( std::vector::const_iterator reactionIter = a_reactions.begin( ); reactionIter != a_reactions.end( ); ++reactionIter, ++reactionIndex ) { + GIDI::Suite const &reactionCrossSectionSuite = (*reactionIter)->crossSection( ); + GIDI::Functions::Ys1d const *reactionCrossSection3 = reactionCrossSectionSuite.get( label ); + GIDI::Functions::Ys1d *reactionCrossSectionZeroReactions = nullptr; + if( a_zeroReactions ) { + reactionCrossSectionZeroReactions = new GIDI::Functions::Ys1d( *reactionCrossSection3 ); + for( std::size_t index = 0; index < reactionCrossSectionZeroReactions->size( ); ++index ) reactionCrossSectionZeroReactions->set( index, 0.0 ); + reactionCrossSection3 = reactionCrossSectionZeroReactions; + } + + Probabilities::ProbabilityBase2d *URR_probabilityTables = nullptr; + if( ( a_settings._URR_mode( ) == Transporting::URR_mode::pdfs ) && ( URR_label != "" ) ) { + if( reactionCrossSectionSuite.has( URR_label ) ) { + GIDI::Functions::URR_probabilityTables1d const &URR_probability_tables1d( *reactionCrossSectionSuite.get( URR_label ) ); + URR_probabilityTables = Probabilities::parseProbability2d( URR_probability_tables1d.function2d( ), nullptr ); + m_URR_mode = Transporting::URR_mode::pdfs; + } + } + + ACE_URR_probabilityTables *ACE_URR_probabilityTables1 = nullptr; + if( a_settings._URR_mode( ) == Transporting::URR_mode::ACE_URR_probabilityTables ) { + auto URR_iter = a_setupInfo.m_ACE_URR_probabilityTablesFromGIDI.find( URR_label ); + if( URR_iter != a_setupInfo.m_ACE_URR_probabilityTablesFromGIDI.end( ) ) { + auto ACE_URR_probabilityTablesIter = (*URR_iter).second->m_ACE_URR_probabilityTables.find( (*reactionIter)->label( ) ); + if( ACE_URR_probabilityTablesIter != (*URR_iter).second->m_ACE_URR_probabilityTables.end( ) ) { + ACE_URR_probabilityTables1 = (*ACE_URR_probabilityTablesIter).second; + (*ACE_URR_probabilityTablesIter).second = nullptr; // Set to nullptr so destructor of m_ACE_URR_probabilityTables does not delete. + m_URR_mode = Transporting::URR_mode::ACE_URR_probabilityTables; + } + } + } + + if( a_fixedGrid ) { + GIDI::Functions::Ys1d *reactionCrossSection4 = &fixedGridCrossSection; + + int start = 0; + + if( energies[reactionCrossSection3->start( )] > fixedGridPoints[0] ) { + start = binarySearchVector( energies[reactionCrossSection3->start( )], fixedGridPoints ) + 1; + } + + for( int i1 = 0; i1 < start; ++i1 ) reactionCrossSection4->set( i1, 0.0 ); + for( int i1 = start; i1 < static_cast( fixedGridPoints.size( ) ); ++i1 ) { + int index = fixedGridIndices[i1]; + double fraction = ( fixedGridPoints[i1] - energies[index] ) / ( energies[index+1] - energies[index] ); + + index -= reactionCrossSection3->start( ); + reactionCrossSection4->set( i1, ( 1.0 - fraction ) * (*reactionCrossSection3)[index] + fraction * (*reactionCrossSection3)[index+1] ); + } + reactionCrossSection3 = &fixedGridCrossSection; + } + + m_reactionCrossSections[reactionIndex] = new HeatedReactionCrossSectionContinuousEnergy( (*reactionIter)->crossSectionThreshold( ), + *reactionCrossSection3, URR_probabilityTables, ACE_URR_probabilityTables1 ); + totalCrossSection += *reactionCrossSection3; + + delete reactionCrossSectionZeroReactions; + } + m_totalCrossSection.resize( totalCrossSection.length( ), 0.0 ); + for( std::size_t i1 = 0; i1 < totalCrossSection.size( ); ++i1 ) m_totalCrossSection[i1+totalCrossSection.start()] = totalCrossSection[i1]; + + if( hasURR_probabilityTables( ) ) { + std::vector reactions_in_URR_region; + + for( reactionIndex = 0; reactionIndex < numberOfReactions( ); ++reactionIndex ) { + if( m_reactionCrossSections[reactionIndex]->threshold( ) < URR_domainMax( ) ) { + reactions_in_URR_region.push_back( reactionIndex ); + } + } + + m_reactionsInURR_region.resize( reactions_in_URR_region.size( ) ); + for( std::size_t i1 = 0; i1 < reactions_in_URR_region.size( ); ++i1 ) m_reactionsInURR_region[i1] = reactions_in_URR_region[i1]; + + if( a_settings._URR_mode( ) == Transporting::URR_mode::ACE_URR_probabilityTables ) { + auto URR_iter = a_setupInfo.m_ACE_URR_probabilityTablesFromGIDI.find( URR_label ); + if( URR_iter != a_setupInfo.m_ACE_URR_probabilityTablesFromGIDI.end( ) ) { + auto ACE_URR_probabilityTablesIter = (*URR_iter).second->m_ACE_URR_probabilityTables.find( "total" ); + if( ACE_URR_probabilityTablesIter != (*URR_iter).second->m_ACE_URR_probabilityTables.end( ) ) { + m_ACE_URR_probabilityTables = (*ACE_URR_probabilityTablesIter).second; + (*ACE_URR_probabilityTablesIter).second = nullptr; // Set to nullptr so destructor of m_ACE_URR_probabilityTables does not delete. + } + } + } + } + + if( a_settings.addExpectedValueData( ) ) { + m_depositionEnergy.resize( totalCrossSection.length( ), 0.0 ); + m_depositionMomentum.resize( totalCrossSection.length( ), 0.0 ); + m_productionEnergy.resize( totalCrossSection.length( ), 0.0 ); + + m_gains.resize( a_particles.particles( ).size( ) ); + int i2 = 0; + int projectileGainIndex = -1; + int photonGainIndex = -1; + for( std::map::const_iterator particle = a_particles.particles( ).begin( ); particle != a_particles.particles( ).end( ); + ++particle, ++i2 ) { + int particleIntid = a_setupInfo.m_particleIntids[particle->first]; + int particleIndex = a_setupInfo.m_particleIndices[particle->first]; + + if( particleIntid == a_setupInfo.m_protare.projectileIntid( ) ) projectileGainIndex = i2; + m_gains[i2] = new ContinuousEnergyGain( particleIntid, particleIndex, totalCrossSection.length( ) ); + if( particle->first == PoPI::IDs::photon ) photonGainIndex = i2; + } + + std::vector< std::vector > gains( a_particles.particles( ).size( ) ); + for( std::size_t reactionIndex2 = 0; reactionIndex2 < a_reactions.size( ) + a_orphanProducts.size( ); ++reactionIndex2 ) { + + int offset = 0; + std::vector deposition_energy( m_energies.size( ), 0.0 ); + std::vector deposition_momentum( m_energies.size( ), 0.0 ); + std::vector production_energy( m_energies.size( ), 0.0 ); + for( std::size_t i1 = 0; i1 < gains.size( ); ++i1 ) gains[i1] = std::vector( m_energies.size( ), 0.0 ); + + HeatedReactionCrossSectionContinuousEnergy *MCGIDI_reaction_cross_section = nullptr; + GIDI::Reaction const *reaction = nullptr; + GIDI::Functions::Ys1d const *reactionCrossSection = nullptr; // If nullptr, reaction is an orphanProduct node. + GIDI::Functions::Function1dForm const *available_energy = nullptr; + GIDI::Functions::Function1dForm const *available_momentum = nullptr; + if( reactionIndex2 < a_reactions.size( ) ) { + reaction = a_reactions[reactionIndex2]; + available_energy = reaction->availableEnergy( ).get( 0 ); + available_momentum = reaction->availableMomentum( ).get( 0 ); + MCGIDI_reaction_cross_section = m_reactionCrossSections[reactionIndex2]; + offset = MCGIDI_reaction_cross_section->offset( ); } + else { + reaction = a_orphanProducts[reactionIndex2-a_reactions.size( )]; + GIDI::Suite const &reactionCrossSectionSuite = reaction->crossSection( ); + reactionCrossSection = reactionCrossSectionSuite.get( label ); + offset = reactionCrossSection->start( ); + } + if( a_settings.useSlowerContinuousEnergyConversion( ) ) { // Old way which is slow as it does one energy at a time. + for( std::size_t energy_index = (std::size_t) offset; energy_index < m_energies.size( ); ++energy_index ) { + double energy = m_energies[energy_index]; + + if( reactionCrossSection == nullptr ) { + if( isPhotoAtomic ) { // Treat as Q = 0.0 since 2 photons will be emitted. + deposition_energy[energy_index] = energy; } + else { + deposition_energy[energy_index] = available_energy->evaluate( energy ); + + double Q = deposition_energy[energy_index] - energy; // Should use Q node to get this. + if( fabs( Q ) < 1e-12 * deposition_energy[energy_index] ) + Q = 0.0; // Probably 0.0 due to rounding errors. + production_energy[energy_index] = Q; + } + deposition_momentum[energy_index] = available_momentum->evaluate( energy ); + } + + int i1 = 0; + for( std::map::const_iterator particle = a_particles.particles( ).begin( ); particle != a_particles.particles( ).end( ); + ++particle, ++i1 ) { + double product_energy, product_momentum, product_gain; + + if( particle->first == PoPI::IDs::electron ) continue; // As of this coding, electrons are not complete in GNDS files. + // When they are, this statement can be removed. + if( ( reactionCrossSection != nullptr ) && ( particle->first != PoPI::IDs::photon ) ) continue; + + if( reaction->isPairProduction( ) && ( particle->first == PoPI::IDs::photon ) ) { + product_energy = 2.0 * PoPI_electronMass_MeV_c2; // Assumes energy unit is MeV. + product_momentum = 0.0; + product_gain = 2.0; } + else { + reaction->continuousEnergyProductData( a_settings, particle->first, energy, product_energy, product_momentum, + product_gain, true ); + } + if( i1 == projectileGainIndex ) --product_gain; + + deposition_energy[energy_index] -= product_energy; + deposition_momentum[energy_index] -= product_momentum; + gains[i1][energy_index] = product_gain; + } + } } + else { // New way which is hopefully faster. + if( reactionCrossSection == nullptr ) { + if( isPhotoAtomic ) { // Treat as Q = 0.0 since 2 photons will be emitted. + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) { + deposition_energy[energyIndex] = m_energies[energyIndex]; + } } + else { + available_energy->mapToXsAndAdd( offset, *energiesPointer, deposition_energy, 1.0 ); + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) { + double Q = deposition_energy[energyIndex] - m_energies[energyIndex]; + if( fabs( Q ) < 1e-12 * deposition_energy[energyIndex] ) + Q = 0.0; // Probably 0.0 due to rounding errors. + production_energy[energyIndex] = Q; + } + } + available_momentum->mapToXsAndAdd( offset, *energiesPointer, deposition_momentum, 1.0 ); + } + + int i1 = 0; + for( std::map::const_iterator particle = a_particles.particles( ).begin( ); + particle != a_particles.particles( ).end( ); ++particle, ++i1 ) { + if( particle->first == PoPI::IDs::electron ) continue; // As of this coding, electrons are not complete in GNDS files. + // When they are, this statement can be removed. + if( ( reactionCrossSection != nullptr ) && ( particle->first != PoPI::IDs::photon ) ) continue; + + if( reaction->isPairProduction( ) && ( particle->first == PoPI::IDs::photon ) ) { + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) { + deposition_energy[energyIndex] -= 2.0 * PoPI_electronMass_MeV_c2; // Assumes energy unit is MeV. + gains[i1][energyIndex] = 2.0; + } } + else { + reaction->mapContinuousEnergyProductData( a_settings, particle->first, *energiesPointer, offset, deposition_energy, + deposition_momentum, gains[i1], true ); + } + + if( i1 == projectileGainIndex ) { + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) --gains[i1][energyIndex]; + } + } + } + + if( a_particles.hasParticle( PoPI::IDs::photon ) ) { + if( a_setupInfo.m_initialStateIndices.find( reaction->label( ) ) != a_setupInfo.m_initialStateIndices.end( ) ) { + int initialStateIndex = a_setupInfo.m_initialStateIndices[reaction->label( )]; + if( initialStateIndex >= 0 ) { + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = a_setupInfo.m_protare.nuclideGammaBranchStateInfos( )[initialStateIndex]; + double multiplicity = nuclideGammaBranchStateInfo->multiplicity( ); + double averageGammaEnergy = nuclideGammaBranchStateInfo->averageGammaEnergy( ); + + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) { + deposition_energy[energyIndex] -= averageGammaEnergy; + if( photonGainIndex >= 0 ) gains[photonGainIndex][energyIndex] += multiplicity; + } + } + } + } + + double crossSection = 0.0; + for( std::size_t energyIndex = (std::size_t) offset; energyIndex < m_energies.size( ); ++energyIndex ) { + if( reactionCrossSection == nullptr ) { + crossSection = MCGIDI_reaction_cross_section->crossSection( energyIndex ); } + else { + crossSection = (*reactionCrossSection)[energyIndex-offset]; + } + + m_depositionEnergy[energyIndex] += crossSection * deposition_energy[energyIndex]; + m_depositionMomentum[energyIndex] += crossSection * deposition_momentum[energyIndex]; + m_productionEnergy[energyIndex] += crossSection * production_energy[energyIndex]; + for( std::size_t i1 = 0; i1 < m_gains.size( ); ++i1 ) { + m_gains[i1]->adjustGain( energyIndex, crossSection * gains[i1][energyIndex] ); + } + } + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedCrossSectionContinuousEnergy::~HeatedCrossSectionContinuousEnergy( ) { + + for( auto iter = m_reactionCrossSections.begin( ); iter < m_reactionCrossSections.end( ); ++iter ) delete *iter; + for( auto iter = m_gains.begin( ); iter < m_gains.end( ); ++iter ) delete *iter; + delete m_ACE_URR_probabilityTables; +} + + +/* *********************************************************************************************************//** + * This function returns the index in *a_energies* where *a_energy* lies between the returned index and the next index. + * The returned index must lie between a_hashIndices[a_hashIndex] and a_hashIndices[a_hashIndex+1]. + * If *a_energy* is below the domain of *a_energies*, 0 is returned. If *a_energy* is above the domain of *a_energies*, + * the size of *a_energies* minus 2 is returned. + * The argument *a_energyFraction* the weight for the energy at the returned index with the next index getting weighting 1 minus + * *a_energyFraction*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy whose index is requested. + * @param a_energyFraction [in] This represents the weighting to apply to the two bounding energies. + * + * @return The index bounding *a_energy* in the member *m_energies*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int HeatedCrossSectionContinuousEnergy::evaluationInfo( int a_hashIndex, double a_energy, double *a_energyFraction ) const { + + return Sampling::evaluationForHashIndex( a_hashIndex, m_hashIndices, a_energy, m_energies, a_energyFraction ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has a unresolved resonance region (URR) data and false otherwise. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool HeatedCrossSectionContinuousEnergy::hasURR_probabilityTables( ) const { + + return( m_URR_mode != Transporting::URR_mode::none ); +} + +/* *********************************************************************************************************//** + * Returns the minimum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::URR_domainMin( ) const { + + if( m_ACE_URR_probabilityTables != nullptr ) return( m_ACE_URR_probabilityTables->domainMin( ) ); + + for( std::size_t i1 = 0; i1 < m_reactionCrossSections.size( ); ++i1 ) { + HeatedReactionCrossSectionContinuousEnergy *reactionCrossSection = m_reactionCrossSections[i1]; + + if( reactionCrossSection->hasURR_probabilityTables( ) ) return( reactionCrossSection->URR_domainMin( ) ); + } + + return( -1.0 ); +} + +/* *********************************************************************************************************//** + * Returns the maximum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::URR_domainMax( ) const { + + if( m_ACE_URR_probabilityTables != nullptr ) return( m_ACE_URR_probabilityTables->domainMax( ) ); + + for( std::size_t i1 = 0; i1 < m_reactionCrossSections.size( ); ++i1 ) { + HeatedReactionCrossSectionContinuousEnergy *reactionCrossSection = m_reactionCrossSections[i1]; + + if( reactionCrossSection->hasURR_probabilityTables( ) ) return( reactionCrossSection->URR_domainMax( ) ); + } + + return( -1.0 ); +} +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + int a_hashIndex, double a_energy, LUPI_maybeUnused bool a_sampling ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + if( a_URR_index >= 0 ) { + URR_protareInfo const &URR_protare_info = a_URR_protareInfos[a_URR_index]; + + if( URR_protare_info.m_inURR ) { + double cross_section = 0.0; + for( std::size_t i1 = 0; i1 < m_reactionsInURR_region.size( ); ++i1 ) { + cross_section += reactionCrossSection2( m_reactionsInURR_region[i1], a_URR_protareInfos, a_URR_index, a_energy, + energy_index, energy_fraction, false ); + } + return( cross_section ); + } + } + + return( energy_fraction * m_totalCrossSection[energy_index] + ( 1.0 - energy_fraction ) * m_totalCrossSection[energy_index+1] ); +} +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, + int a_URR_index, int a_hashIndex, double a_energy, LUPI_maybeUnused bool a_sampling ) const { + + double energyFraction; + + int energyIndex = evaluationInfo( a_hashIndex, a_energy, &energyFraction ); + return( reactionCrossSection2( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy, energyIndex, energyFraction ) ); +} +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::reactionCrossSection2( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, + int a_URR_index, double a_energy, int a_energyIndex, double a_energyFraction, LUPI_maybeUnused bool a_sampling ) const { + + HeatedReactionCrossSectionContinuousEnergy const &reaction = *m_reactionCrossSections[a_reactionIndex]; + double URR_cross_section_factor = 1.0; + + if( a_URR_index >= 0 ) { + URR_protareInfo const &URR_protare_info = a_URR_protareInfos[a_URR_index]; + if( URR_protare_info.m_inURR ) { + if( m_URR_mode == Transporting::URR_mode::pdfs ) { + if( reaction.URR_probabilityTables( ) != nullptr ) + URR_cross_section_factor = reaction.URR_probabilityTables( )->sample( a_energy, URR_protare_info.m_rng_Value, []() -> double { return 0.0; } ); } + else if( m_URR_mode == Transporting::URR_mode::ACE_URR_probabilityTables ) { + if( reaction._ACE_URR_probabilityTables( ) != nullptr ) + URR_cross_section_factor = reaction._ACE_URR_probabilityTables( )->sample( a_energy, URR_protare_info.m_rng_Value ); + } + } + } + + return( URR_cross_section_factor * ( a_energyFraction * reaction.crossSection( a_energyIndex ) + ( 1.0 - a_energyFraction ) * reaction.crossSection( a_energyIndex + 1 ) ) ); +} + +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + double a_energy_in ) const { + + int energyIndex = binarySearchVector( a_energy_in, m_energies ); + double energyFraction; + + if( energyIndex < 0 ) { + if( energyIndex == -1 ) { + energyIndex = static_cast( m_energies.size( ) ) - 2; + energyFraction = 0.0; } + else { + energyIndex = 0; + energyFraction = 1.0; + } } + else { + energyFraction = ( m_energies[energyIndex+1] - a_energy_in ) / ( m_energies[energyIndex+1] - m_energies[energyIndex] ); + } + + return( reactionCrossSection2( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy_in, energyIndex, energyFraction, false ) ); +} + +/* *********************************************************************************************************//** + * Returns the total cross section as a GIDI::Functions::XYs1d instance. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d HeatedCrossSectionContinuousEnergy::crossSectionAsGIDI_XYs1d( ) const { + + std::vector energies = vectorToSTD_vector( m_energies ); + std::vector crossSection = vectorToSTD_vector( m_totalCrossSection ); + + return( GIDI::Functions::XYs1d( GIDI::Axes( ), ptwXY_interpolationLinLin, energies, crossSection, 0, m_temperature ) ); +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section as GIDI::Functions::XYs1d instance. + * + * @param a_reactionIndex [in] Specifies the indexs of the reaction whose cross section is requested. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d HeatedCrossSectionContinuousEnergy::reactionCrossSectionAsGIDI_XYs1d( int a_reactionIndex ) const { + + return( m_reactionCrossSections[a_reactionIndex]->crossSectionAsGIDI_XYs1d( m_temperature, m_energies ) ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::depositionEnergy( int a_hashIndex, double a_energy ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + return( energy_fraction * m_depositionEnergy[energy_index] + ( 1.0 - energy_fraction ) * m_depositionEnergy[energy_index+1] ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::depositionMomentum( int a_hashIndex, double a_energy ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + return( energy_fraction * m_depositionMomentum[energy_index] + ( 1.0 - energy_fraction ) * m_depositionMomentum[energy_index+1] ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::productionEnergy( int a_hashIndex, double a_energy ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + return( energy_fraction * m_productionEnergy[energy_index] + ( 1.0 - energy_fraction ) * m_productionEnergy[energy_index+1] ); +} + +/* *********************************************************************************************************//** + * Returns the gain for the particle with index *a_particleIndex* for projectile energy *a_energy*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIndex [in] The index of the particle whose gain is requested. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::gain( int a_hashIndex, double a_energy, int a_particleIndex ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + for( std::size_t i1 = 0; i1 < m_gains.size( ); ++i1 ) { + if( a_particleIndex == m_gains[i1]->particleIndex( ) ) return( m_gains[i1]->gain( energy_index, energy_fraction ) ); + } + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Returns the gain for the particle with intid *a_particleIntid* for projectile energy *a_energy*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIntid [in] The intid of the particle whose gain is requested. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionContinuousEnergy::gainViaIntid( int a_hashIndex, double a_energy, int a_particleIntid ) const { + + double energy_fraction; + int energy_index = evaluationInfo( a_hashIndex, a_energy, &energy_fraction ); + + for( std::size_t i1 = 0; i1 < m_gains.size( ); ++i1 ) { + if( a_particleIntid == m_gains[i1]->particleIntid( ) ) return( m_gains[i1]->gain( energy_index, energy_fraction ) ); + } + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionContinuousEnergy::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionContinuousEnergy::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionContinuousEnergy::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_temperature, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_hashIndices, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_totalCrossSection, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_depositionEnergy, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_depositionMomentum, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_FLOAT_OR_DOUBLE( m_productionEnergy, a_buffer, a_mode ); + m_URR_mode = serializeURR_mode( m_URR_mode, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_reactionsInURR_region, a_buffer, a_mode ); + m_ACE_URR_probabilityTables = serializeACE_URR_probabilityTables( m_ACE_URR_probabilityTables, a_buffer, a_mode ); + + std::size_t vectorSize = m_reactionCrossSections.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_reactionCrossSections.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_reactionCrossSections.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_reactionCrossSections[memberIndex] = new(a_buffer.m_placement) HeatedReactionCrossSectionContinuousEnergy; + a_buffer.incrementPlacement( sizeof( HeatedReactionCrossSectionContinuousEnergy ) ); } + else { + m_reactionCrossSections[memberIndex] = new HeatedReactionCrossSectionContinuousEnergy; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( HeatedReactionCrossSectionContinuousEnergy ) ); + } + m_reactionCrossSections[memberIndex]->serialize( a_buffer, a_mode ); + } + + vectorSize = m_gains.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_gains.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_gains.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_gains[memberIndex] = new(a_buffer.m_placement) ContinuousEnergyGain; + a_buffer.incrementPlacement( sizeof( ContinuousEnergyGain ) ); } + else { + m_gains[memberIndex] = new ContinuousEnergyGain; + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( ContinuousEnergyGain ) ); + } + m_gains[memberIndex]->serialize( a_buffer, a_mode ); + } +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The ProtareSingle instance *this* resides in. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionContinuousEnergy::print( ProtareSingle const *a_protareSingle, std::string const &a_indent, + std::string const &a_iFormat, std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + char const *dFormat = a_dFormat.c_str( ); + std::string indent2 = a_indent + " "; + std::string lineFormat = indent2 + a_energyFormat + " " + a_dFormat + " " + a_dFormat + " " + a_dFormat + " " + a_dFormat; + + std::cout << std::endl; + std::cout << a_indent << "# Temperature = " << LUPI::Misc::doubleToString3( dFormat, m_temperature, true ) << std::endl; + + std::cout << a_indent << "# Number of hash indices = " << m_hashIndices.size( ) << std::endl; + for( auto iter = m_hashIndices.begin( ); iter != m_hashIndices.end( ); ++iter ) + std::cout << indent2 << LUPI::Misc::argumentsToString( a_iFormat.c_str( ), *iter ) << std::endl; + std::cout << std::endl; + std::size_t energySize = m_energies.size( ); + std::cout << a_indent << "# Number of energies = " << m_energies.size( ) << std::endl; + std::cout << "# projectile total deposition deposition production" << std::endl; + std::cout << "# energy cross section energy momentum energy"<< std::endl; + std::cout << "#====================================================================================================="<< std::endl; + for( std::size_t index = 0; index != energySize; ++index ) { + std::cout << LUPI::Misc::argumentsToString( lineFormat.c_str( ), m_energies[index], m_totalCrossSection[index], m_depositionEnergy[index], + m_depositionMomentum[index], m_productionEnergy[index] ) << std::endl; + } + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->print( a_protareSingle, a_indent, a_iFormat, a_energyFormat, a_dFormat ); + + std::cout << std::endl; + std::cout << "# URR mode is "; + if( m_URR_mode == Transporting::URR_mode::none ) { + std::cout << "none" << std::endl; } + else if( m_URR_mode == Transporting::URR_mode::pdfs ) { + std::cout << "pdfs" << std::endl; } + else if( m_URR_mode == Transporting::URR_mode::ACE_URR_probabilityTables ) { + std::cout << "ACE style protability tables" << std::endl; } + else { + std::cout << "Oops, need to code into print method." << std::endl; + } + + std::cout << a_indent << "# Index of reactions in URR region:"; + for( auto reactionIter = m_reactionsInURR_region.begin( ); reactionIter != m_reactionsInURR_region.end( ); ++reactionIter ) { + std::cout << indent2 << LUPI::Misc::argumentsToString( a_iFormat.c_str( ), *reactionIter ) << std::endl; + } + std::cout << std::endl; + + int reactionIndex = 0; + std::cout << std::endl; + std::cout << a_indent << "# Number of reactions = " << m_reactionCrossSections.size( ) << std::endl; + for( auto iter = m_reactionCrossSections.begin( ); iter != m_reactionCrossSections.end( ); ++iter, ++reactionIndex ) { + Reaction const *reaction = a_protareSingle->reaction( reactionIndex ); + + std::cout << a_indent << "# Reaction number " << reactionIndex << std::endl; + std::cout << a_indent << "# Reaction label: " << reaction->label( ).c_str( ) << std::endl; + (*iter)->print( a_protareSingle, a_indent, a_iFormat, a_energyFormat, a_dFormat ); + } +} + +/* +============================================================ +=========== HeatedCrossSectionsContinuousEnergy ============ +============================================================ +*/ +LUPI_HOST_DEVICE HeatedCrossSectionsContinuousEnergy::HeatedCrossSectionsContinuousEnergy( ) : + m_temperatures( ), + m_thresholds( ), + m_heatedCrossSections( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedCrossSectionsContinuousEnergy::~HeatedCrossSectionsContinuousEnergy( ) { + + for( Vector::const_iterator iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Fills in *this* with the requested temperature data. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other components. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfos [in] The list of temperatures to use. + * @param a_reactions [in] The list of reactions to use. + * @param a_orphanProducts [in] The list of orphan products to use. + * @param a_fixedGrid [in] If true, the specified fixed grid is used; otherwise, grid in the file is used. + * @param a_zeroReactions [in] Special case where no reaction in a protare is wanted so the first one is used but its cross section is set to 0.0 at all energies. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsContinuousEnergy::update( LUPI_maybeUnused LUPI::StatusMessageReporting &a_smr, SetupInfo &a_setupInfo, + Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::vector const &a_reactions, + std::vector const &a_orphanProducts, bool a_fixedGrid, bool a_zeroReactions ) { + + m_temperatures.reserve( a_temperatureInfos.size( ) ); + m_heatedCrossSections.reserve( a_temperatureInfos.size( ) ); + + for( GIDI::Styles::TemperatureInfos::const_iterator iter = a_temperatureInfos.begin( ); iter != a_temperatureInfos.end( ); ++iter ) { + m_temperatures.push_back( iter->temperature( ).value( ) ); + m_heatedCrossSections.push_back( new HeatedCrossSectionContinuousEnergy( a_setupInfo, a_settings, a_particles, a_domainHash, *iter, + a_reactions, a_orphanProducts, a_fixedGrid, a_zeroReactions ) ); + } + + m_thresholds.resize( m_heatedCrossSections[0]->numberOfReactions( ) ); + for( int i1 = 0; i1 < m_heatedCrossSections[0]->numberOfReactions( ); ++i1 ) m_thresholds[i1] = m_heatedCrossSections[0]->threshold( i1 ); +} + +/* *********************************************************************************************************//** + * Returns the cross section for target temperature *a_temperature* and projectile energy *a_energy*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_URR_index [in] If not negative, specifies the index in *a_URR_protareInfos*. + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_sampling [in] If *true* the cross section is to be used for sampling, otherwise, just for looking up. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double cross_section; + + if( a_temperature <= m_temperatures[0] ) { + cross_section = m_heatedCrossSections[0]->crossSection( a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); } + else if( a_temperature >= m_temperatures.back( ) ) { + cross_section = m_heatedCrossSections.back( )->crossSection( a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + cross_section = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->crossSection( a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ) + + fraction * m_heatedCrossSections[i1]->crossSection( a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * This function only works for fixed-grid data. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionsContinuousEnergy::crossSectionVector( double a_temperature, double a_userFactor, + std::size_t a_numberAllocated, double *a_crossSectionVector ) const { + + int number_of_temperatures = static_cast( m_temperatures.size( ) ); + int index1 = 0, index2 = 0; + double fraction = 0.0; + + if( a_temperature <= m_temperatures[0] ) { + } + else if( a_temperature >= m_temperatures.back( ) ) { + index1 = index2 = number_of_temperatures - 1; + fraction = 1.0; } + else { + for( ; index2 < number_of_temperatures; ++index2 ) if( a_temperature < m_temperatures[index2] ) break; + index1 = index2 - 1; + fraction = ( a_temperature - m_temperatures[index1] ) / ( m_temperatures[index2] - m_temperatures[index1] ); + } + + Vector &totalCrossSection1 = m_heatedCrossSections[index1]->totalCrossSection( ); + Vector &totalCrossSection2 = m_heatedCrossSections[index2]->totalCrossSection( ); + std::size_t size = totalCrossSection1.size( ); + double factor1 = a_userFactor * ( 1.0 - fraction ), factor2 = a_userFactor * fraction; + + if( a_numberAllocated < totalCrossSection1.size( ) ) LUPI_THROW( "HeatedCrossSectionsContinuousEnergy::crossSectionVector: a_numberAllocated too small." ); + for( std::size_t i1 = 0; i1 < size; ++i1 ) { + a_crossSectionVector[i1] += factor1 * totalCrossSection1[i1] + factor2 * totalCrossSection2[i1]; + } +} + +/* *********************************************************************************************************//** + * Returns the total cross section as a GIDI::Functions::XYs1d instance. + * + * @param a_temperature [in] Specifies the temperature requested for the cross section. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d HeatedCrossSectionsContinuousEnergy::crossSectionAsGIDI_XYs1d( double a_temperature ) const { + + GIDI::Functions::XYs1d crossSection1; + + if( a_temperature <= m_temperatures[0] ) { + crossSection1 = m_heatedCrossSections[0]->crossSectionAsGIDI_XYs1d( ); } + else if( a_temperature >= m_temperatures.back( ) ) { + crossSection1 = m_heatedCrossSections.back( )->crossSectionAsGIDI_XYs1d( ); } + else { + int number_of_temperatures = static_cast( m_temperatures.size( ) ); + int i1 = 0; + for( ; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + crossSection1 = m_heatedCrossSections[i1-1]->crossSectionAsGIDI_XYs1d( ); + crossSection1 *= ( 1. - fraction ); + GIDI::Functions::XYs1d crossSection2( m_heatedCrossSections[i1-1]->crossSectionAsGIDI_XYs1d( ) ); + crossSection2 *= fraction; + crossSection1 += crossSection2; + } + + return( crossSection1 ); +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section as GIDI::Functions::XYs1d instance. + * + * @param a_reactionIndex [in] Specifies the indexs of the reaction whose cross section is requested. + * @param a_temperature [in] Specifies the temperature requested for the cross section. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d HeatedCrossSectionsContinuousEnergy::reactionCrossSectionAsGIDI_XYs1d( int a_reactionIndex, + double a_temperature ) const { + + GIDI::Functions::XYs1d crossSection1; + + if( a_temperature <= m_temperatures[0] ) { + crossSection1 = m_heatedCrossSections[0]->reactionCrossSectionAsGIDI_XYs1d( a_reactionIndex ); } + else if( a_temperature >= m_temperatures.back( ) ) { + crossSection1 = m_heatedCrossSections.back( )->reactionCrossSectionAsGIDI_XYs1d( a_reactionIndex ); } + else { + int number_of_temperatures = static_cast( m_temperatures.size( ) ); + int i1 = 0; + for( ; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + crossSection1 = m_heatedCrossSections[i1-1]->reactionCrossSectionAsGIDI_XYs1d( a_reactionIndex ); + crossSection1 *= ( 1. - fraction ); + GIDI::Functions::XYs1d crossSection2( m_heatedCrossSections[i1-1]->reactionCrossSectionAsGIDI_XYs1d( a_reactionIndex ) ); + crossSection2 *= fraction; + crossSection1 += crossSection2; + } + + return( crossSection1 ); +} + +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double cross_section; + + if( a_temperature <= m_temperatures[0] ) { + cross_section = m_heatedCrossSections[0]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); } + else if( a_temperature >= m_temperatures.back( ) ) { + cross_section = m_heatedCrossSections.back( )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + cross_section = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ) + + fraction * m_heatedCrossSections[i1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_hashIndex, a_energy, a_sampling ); + } + + return( cross_section ); +} + +/* +========================================================= +*/ +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_URR_index, + double a_temperature, double a_energy_in ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double cross_section; + + if( a_temperature <= m_temperatures[0] ) { + cross_section = m_heatedCrossSections[0]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy_in ); } + else if( a_temperature >= m_temperatures.back( ) ) { + cross_section = m_heatedCrossSections.back( )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy_in ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + cross_section = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy_in ) + + fraction * m_heatedCrossSections[i1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_URR_index, a_energy_in ); + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Returns the deposition energy for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double deposition_energy; + + if( a_temperature <= m_temperatures[0] ) { + deposition_energy = m_heatedCrossSections[0]->depositionEnergy( a_hashIndex, a_energy ); } + else if( a_temperature >= m_temperatures.back( ) ) { + deposition_energy = m_heatedCrossSections.back( )->depositionEnergy( a_hashIndex, a_energy ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + deposition_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->depositionEnergy( a_hashIndex, a_energy ) + + fraction * m_heatedCrossSections[i1]->depositionEnergy( a_hashIndex, a_energy ); + } + + return( deposition_energy ); +} + +/* *********************************************************************************************************//** + * Returns the deposition momentum for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double deposition_momentum; + + if( a_temperature <= m_temperatures[0] ) { + deposition_momentum = m_heatedCrossSections[0]->depositionMomentum( a_hashIndex, a_energy ); } + else if( a_temperature >= m_temperatures.back( ) ) { + deposition_momentum = m_heatedCrossSections.back( )->depositionMomentum( a_hashIndex, a_energy ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + deposition_momentum = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->depositionMomentum( a_hashIndex, a_energy ) + + fraction * m_heatedCrossSections[i1]->depositionMomentum( a_hashIndex, a_energy ); + } + + return( deposition_momentum ); +} + +/* *********************************************************************************************************//** + * Returns the production momentum for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double production_energy; + + if( a_temperature <= m_temperatures[0] ) { + production_energy = m_heatedCrossSections[0]->productionEnergy( a_hashIndex, a_energy ); } + else if( a_temperature >= m_temperatures.back( ) ) { + production_energy = m_heatedCrossSections.back( )->productionEnergy( a_hashIndex, a_energy ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + production_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->productionEnergy( a_hashIndex, a_energy ) + + fraction * m_heatedCrossSections[i1]->productionEnergy( a_hashIndex, a_energy ); + } + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with index *a_particleIndex* for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIndex [in] The index of the particle whose gain is requested. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double production_energy; + + if( a_temperature <= m_temperatures[0] ) { + production_energy = m_heatedCrossSections[0]->gain( a_hashIndex, a_energy, a_particleIndex ); } + else if( a_temperature >= m_temperatures.back( ) ) { + production_energy = m_heatedCrossSections.back( )->gain( a_hashIndex, a_energy, a_particleIndex ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + production_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->gain( a_hashIndex, a_energy, a_particleIndex ) + + fraction * m_heatedCrossSections[i1]->gain( a_hashIndex, a_energy, a_particleIndex ); + } + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with intid *a_particleIntid* for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] Specifies projectile energy hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIntid [in] The intid of the particle whose gain is requested. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsContinuousEnergy::gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double production_energy; + + if( a_temperature <= m_temperatures[0] ) { + production_energy = m_heatedCrossSections[0]->gainViaIntid( a_hashIndex, a_energy, a_particleIntid ); } + else if( a_temperature >= m_temperatures.back( ) ) { + production_energy = m_heatedCrossSections.back( )->gainViaIntid( a_hashIndex, a_energy, a_particleIntid ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + production_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->gainViaIntid( a_hashIndex, a_energy, a_particleIntid ) + + fraction * m_heatedCrossSections[i1]->gainViaIntid( a_hashIndex, a_energy, a_particleIntid ); + } + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsContinuousEnergy::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsContinuousEnergy::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + for( auto iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionsContinuousEnergy::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_DOUBLE( m_temperatures, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_thresholds, a_buffer, a_mode ); + + std::size_t vectorSize = m_heatedCrossSections.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_heatedCrossSections.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_heatedCrossSections.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_heatedCrossSections[memberIndex] = new(a_buffer.m_placement) HeatedCrossSectionContinuousEnergy; + a_buffer.incrementPlacement( sizeof( HeatedCrossSectionContinuousEnergy ) ); } + else { + m_heatedCrossSections[memberIndex] = new HeatedCrossSectionContinuousEnergy; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( HeatedCrossSectionContinuousEnergy ) ); + } + m_heatedCrossSections[memberIndex]->serialize( a_buffer, a_mode ); + } +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The GIDI::ProtareSingle instance that contains *this*. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsContinuousEnergy::print( ProtareSingle const *a_protareSingle, std::string const &a_indent, + std::string const &a_iFormat, std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + std::cout << "Temperatures present:" << std::endl; + for( auto temperatureIter = m_temperatures.begin( ); temperatureIter != m_temperatures.end( ); ++temperatureIter ) { + std::cout << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), *temperatureIter ) << std::endl; + } + std::cout << "Reaction thresholds:" << std::endl; + for( auto reactionIter = m_thresholds.begin( ); reactionIter != m_thresholds.end( ); ++reactionIter ) { + std::cout << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), *reactionIter ) << std::endl; + } + for( auto heatedCrossSections = m_heatedCrossSections.begin( ); heatedCrossSections != m_heatedCrossSections.end( ); ++heatedCrossSections ) { + (*heatedCrossSections)->print( a_protareSingle, a_indent, a_iFormat, a_energyFormat, a_dFormat ); + } +} + +/*! \class MultiGroupGain + * This class store a particles index and gain for a protare. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE MultiGroupGain::MultiGroupGain( ) : + m_particleIntid( -1 ), + m_particleIndex( -1 ), + m_userParticleIndex( -1 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST MultiGroupGain::MultiGroupGain( int a_particleIntid, int a_particleIndex, GIDI::Vector const &a_gain ) : + m_particleIntid( a_particleIntid ), + m_particleIndex( a_particleIndex ), + m_userParticleIndex( -1 ), + m_gain( GIDI_VectorDoublesToMCGIDI_VectorDoubles( a_gain ) ) { + +} + +/* *********************************************************************************************************//** + * @param a_multiGroupGain [in] The **MultiGroupGain** whose contents are to be copied. + ***********************************************************************************************************/ + +LUPI_HOST MultiGroupGain &MultiGroupGain::operator=( MultiGroupGain const &a_multiGroupGain ) { + + m_particleIntid = a_multiGroupGain.particleIntid( ); + m_particleIndex = a_multiGroupGain.particleIndex( ); + m_userParticleIndex = a_multiGroupGain.userParticleIndex( ); + m_gain = a_multiGroupGain.gain( ); + + return( *this ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void MultiGroupGain::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_particleIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_particleIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_userParticleIndex, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_gain, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * This method writes the multi-group data. + * + * @param a_file [in] The buffer to read or write data to depending on *a_mode*. + ***********************************************************************************************************/ + +LUPI_HOST void MultiGroupGain::write( FILE *a_file ) const { + + std::string buffer = LUPI::Misc::argumentsToString( "Gain for particle %d (%d, %d)", m_particleIntid, m_particleIndex, m_userParticleIndex ); + writeVector( a_file, buffer, 0, m_gain ); +} + +/* +============================================================ +=========== HeatedReactionCrossSectionMultiGroup =========== +============================================================ +*/ +LUPI_HOST_DEVICE HeatedReactionCrossSectionMultiGroup::HeatedReactionCrossSectionMultiGroup( ) { + +} +/* +========================================================= +*/ +LUPI_HOST HeatedReactionCrossSectionMultiGroup::HeatedReactionCrossSectionMultiGroup( SetupInfo &a_setupInfo, LUPI_maybeUnused Transporting::MC const &a_settings, + int a_offset, std::vector const &a_crossSection, double a_threshold ) : + m_threshold( a_threshold ), + m_offset( a_offset ), + m_crossSections( a_crossSection ), + m_augmentedThresholdCrossSection( 0.0 ) { + + Vector const &boundaries = a_setupInfo.m_protare.projectileMultiGroupBoundariesCollapsed( ); + + if( ( a_offset > 0 ) && ( boundaries[a_offset] < a_threshold ) ) { // This uses the linear rejection above threshold in the group m_offset. + if( ( boundaries[a_offset] < a_threshold ) && ( a_threshold < boundaries[a_offset+1] ) ) { + m_augmentedThresholdCrossSection = m_crossSections[0] * ( boundaries[a_offset+1] + a_threshold - 2.0 * boundaries[a_offset] ) / ( boundaries[a_offset+1] - a_threshold ); } + else { + m_crossSections[0] = 0.0; + } + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedReactionCrossSectionMultiGroup::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_threshold, a_buffer, a_mode ); + DATA_MEMBER_INT( m_offset, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_crossSections, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_augmentedThresholdCrossSection, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * This method writes the multi-group data. + * + * @param a_file [in] The buffer to read or write data to depending on *a_mode*. + * @param a_reactionIndex [in] The index of the reaction. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedReactionCrossSectionMultiGroup::write( FILE *a_file, int a_reactionIndex ) const { + + std::string buffer = LUPI::Misc::argumentsToString( "Reaction cross section (%3d)", a_reactionIndex ); + writeVector( a_file, buffer, m_offset, m_crossSections ); +} + +/* +============================================================ +============= HeatedCrossSectionMultiGroup ================ +============================================================ +*/ +LUPI_HOST_DEVICE HeatedCrossSectionMultiGroup::HeatedCrossSectionMultiGroup( ) { + +} +/* +========================================================= +*/ +LUPI_HOST HeatedCrossSectionMultiGroup::HeatedCrossSectionMultiGroup( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, + SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Styles::TemperatureInfo const &a_temperatureInfo, + GIDI::Transporting::Particles const &a_particles, std::vector const &a_reactions, LUPI_maybeUnused std::string const &a_label, + bool a_zeroReactions, GIDI::ExcludeReactionsSet const &a_reactionsToExclude ) : + m_totalCrossSection( ), + m_augmentedCrossSection( ), + m_reactionCrossSections( ) { + + GIDI::Transporting::Mode transportMode = GIDI::Transporting::Mode::multiGroup; + if( ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::B ) || ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::BSnLimits ) + || ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::A ) ) + transportMode = GIDI::Transporting::Mode::multiGroupWithSnElasticUpScatter; + GIDI::Transporting::MG multi_group_settings( a_settings.projectileID( ), transportMode, a_settings.delayedNeutrons( ) ); + multi_group_settings.setThrowOnError( a_settings.throwOnError( ) ); + + GIDI::Axes axes; + std::vector dummy; + GIDI::Vector totalCrossSection; + GIDI::Vector vector; + + m_reactionCrossSections.reserve( a_reactions.size( ) ); + int index = 0; // Only used for debugging. + GIDI::Transporting::MG MG_settings( a_settings.projectileID( ), GIDI::Transporting::Mode::multiGroup, a_settings.delayedNeutrons( ) ); + MG_settings.setThrowOnError( a_settings.throwOnError( ) ); + + for( std::vector::const_iterator reactionIter = a_reactions.begin( ); reactionIter != a_reactions.end( ); ++reactionIter, ++index ) { + GIDI::Vector crossSectionVector = (*reactionIter)->multiGroupCrossSection( a_smr, MG_settings, a_temperatureInfo ); + + vector = GIDI::collapse( crossSectionVector, a_settings, a_particles, 0.0 ); + + std::size_t start = 0; + for( ; start < vector.size( ); ++start ) { + if( vector[start] != 0.0 ) break; + } + checkZeroReaction( vector, a_zeroReactions ); + std::vector data; + for( std::size_t i1 = start; i1 < vector.size( ); ++i1 ) data.push_back( vector[i1] ); + int offset = static_cast( start ); + + m_reactionCrossSections.push_back( new HeatedReactionCrossSectionMultiGroup( a_setupInfo, a_settings, offset, data, + (*reactionIter)->crossSectionThreshold( ) ) ); + + totalCrossSection += vector; + } + + m_totalCrossSection = totalCrossSection.data( ); + + m_augmentedCrossSection.resize( totalCrossSection.size( ) ); + for( std::size_t i1 = 0; i1 < m_augmentedCrossSection.size( ); ++i1 ) m_augmentedCrossSection[i1] = 0; + for( std::size_t i1 = 0; i1 < m_reactionCrossSections.size( ); ++i1 ) + m_augmentedCrossSection[m_reactionCrossSections[i1]->offset( )] += m_reactionCrossSections[i1]->augmentedThresholdCrossSection( ); + + + vector = a_protare.multiGroupDepositionEnergy( a_smr, multi_group_settings, a_temperatureInfo, a_particles, a_reactionsToExclude ); + vector = collapseAndcheckZeroReaction( vector, a_settings, a_particles, 0.0, a_zeroReactions ); + m_depositionEnergy = GIDI_VectorDoublesToMCGIDI_VectorDoubles( vector ); + + vector = a_protare.multiGroupDepositionMomentum( a_smr, multi_group_settings, a_temperatureInfo, a_particles, a_reactionsToExclude ); + vector = collapseAndcheckZeroReaction( vector, a_settings, a_particles, 0.0, a_zeroReactions ); + m_depositionMomentum = GIDI_VectorDoublesToMCGIDI_VectorDoubles( vector ); + + vector = a_protare.multiGroupQ( a_smr, multi_group_settings, a_temperatureInfo, true, true, a_reactionsToExclude ); + vector = collapseAndcheckZeroReaction( vector, a_settings, a_particles, 0.0, a_zeroReactions ); + m_productionEnergy = GIDI_VectorDoublesToMCGIDI_VectorDoubles( vector ); + + std::map particles = a_particles.particles( ); + m_gains.resize( particles.size( ) ); + int i1 = 0; + for( std::map::const_iterator particle = particles.begin( ); particle != particles.end( ); ++particle, ++i1 ) { + int particleIntid = a_setupInfo.m_particleIntids[particle->first]; + int particleIndex = a_setupInfo.m_particleIndices[particle->first]; + + vector = a_protare.multiGroupGain( a_smr, multi_group_settings, a_temperatureInfo, particle->first, a_reactionsToExclude ); + vector = collapseAndcheckZeroReaction( vector, a_settings, a_particles, 0.0, a_zeroReactions ); + m_gains[i1] = new MultiGroupGain( particleIntid, particleIndex, vector ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedCrossSectionMultiGroup::~HeatedCrossSectionMultiGroup( ) { + + for( auto iter = m_reactionCrossSections.begin( ); iter < m_reactionCrossSections.end( ); ++iter ) delete *iter; + for( auto iter = m_gains.begin( ); iter < m_gains.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Returns the multi-group cross section. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_sampling [in] Fix me. + * + * @return A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionMultiGroup::crossSection( int a_hashIndex, bool a_sampling ) const { + + double crossSection2 = m_totalCrossSection[a_hashIndex]; + + if( a_sampling ) crossSection2 += m_augmentedCrossSection[a_hashIndex]; + + return( crossSection2 ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group gain for particle with index *a_particleIndex*. If no particle is found, a Vector of all 0's is returned. + * + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + * @param a_hashIndex [in] The multi-group index. + * + * @return A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionMultiGroup::gain( int a_particleIndex, int a_hashIndex ) const { + + for( std::size_t i1 = 0; i1 < m_gains.size( ); ++i1 ) { + if( a_particleIndex == m_gains[i1]->particleIndex( ) ) return( m_gains[i1]->gain( a_hashIndex ) ); + } + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group gain for particle with intid *a_particleIntid*. If no particle is found, a Vector of all 0's is returned. + * + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + * @param a_hashIndex [in] The multi-group index. + * + * @return A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionMultiGroup::gainViaIntid( int a_particleIntid, int a_hashIndex ) const { + + for( std::size_t i1 = 0; i1 < m_gains.size( ); ++i1 ) { + if( a_particleIntid == m_gains[i1]->particleIntid( ) ) return( m_gains[i1]->gain( a_hashIndex ) ); + } + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIntid*. + * + * @param a_particleIndex [in] The index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionMultiGroup::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionMultiGroup::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionMultiGroup::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_DOUBLE( m_totalCrossSection, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_augmentedCrossSection, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_depositionEnergy, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_depositionMomentum, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_productionEnergy, a_buffer, a_mode ); + + std::size_t vectorSize = m_reactionCrossSections.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_reactionCrossSections.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_reactionCrossSections.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_reactionCrossSections[memberIndex] = new(a_buffer.m_placement) HeatedReactionCrossSectionMultiGroup; + a_buffer.incrementPlacement( sizeof( HeatedReactionCrossSectionMultiGroup ) ); } + else { + m_reactionCrossSections[memberIndex] = new HeatedReactionCrossSectionMultiGroup; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( HeatedReactionCrossSectionMultiGroup ) ); + } + m_reactionCrossSections[memberIndex]->serialize( a_buffer, a_mode ); + } + + vectorSize = m_gains.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_gains.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_gains.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_gains[memberIndex] = new(a_buffer.m_placement) MultiGroupGain; + a_buffer.incrementPlacement( sizeof( MultiGroupGain ) ); } + else { + m_gains[memberIndex] = new MultiGroupGain; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( MultiGroupGain ) ); + } + m_gains[memberIndex]->serialize( a_buffer, a_mode ); + } +} + +/* *********************************************************************************************************//** + * This method writes the multi-group data. + * + * @param a_file [in] The buffer to read or write data to depending on *a_mode*. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionMultiGroup::write( FILE *a_file ) const { + + writeVector( a_file, "Total cross section", 0, m_totalCrossSection ); + writeVector( a_file, "Augmented cross section", 0, m_augmentedCrossSection ); + writeVector( a_file, "Deposition energy", 0, m_depositionEnergy ); + writeVector( a_file, "Deposition momentum", 0, m_depositionMomentum ); + writeVector( a_file, "Production energy", 0, m_productionEnergy ); + + for( auto iter = m_gains.begin( ); iter != m_gains.end( ); ++iter ) (*iter)->write( a_file ); + int reactionIndex = 0; + for( Vector::const_iterator iter = m_reactionCrossSections.begin( ); iter < m_reactionCrossSections.end( ); ++iter ) { + (*iter)->write( a_file, reactionIndex ); + ++reactionIndex; + } +} + +/*! \class Protare + * Base class for the protare sub-classes. + */ + +/* *********************************************************************************************************//** + * Generic constructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedCrossSectionsMultiGroup::HeatedCrossSectionsMultiGroup( ) { + +} + +/* *********************************************************************************************************//** + * Generic constructor. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE HeatedCrossSectionsMultiGroup::~HeatedCrossSectionsMultiGroup( ) { + + for( Vector::const_iterator iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Fills in *this* with the requested temperature data. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_protare [in] The GIDI::Protare used to constuct the Protare that *this* is a part of. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other components. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_temperatureInfos [in] The list of temperatures to use. + * @param a_reactions [in] The list of reactions to use. + * @param a_orphanProducts [in] The list of orphan products to use. + * @param a_zeroReactions [in] Special case where no reaction in a protare is wanted so the first one is used but its cross section is set to 0.0 at all energies. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsMultiGroup::update( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, + SetupInfo &a_setupInfo, Transporting::MC const &a_settings, GIDI::Transporting::Particles const &a_particles, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::vector const &a_reactions, + LUPI_maybeUnused std::vector const &a_orphanProducts, bool a_zeroReactions, + GIDI::ExcludeReactionsSet const &a_reactionsToExclude ) { + + m_temperatures.reserve( a_temperatureInfos.size( ) ); + m_heatedCrossSections.reserve( a_temperatureInfos.size( ) ); + + for( GIDI::Styles::TemperatureInfos::const_iterator iter = a_temperatureInfos.begin( ); iter != a_temperatureInfos.end( ); ++iter ) { + m_temperatures.push_back( iter->temperature( ).value( ) ); + m_heatedCrossSections.push_back( new HeatedCrossSectionMultiGroup( a_smr, a_protare, a_setupInfo, a_settings, *iter, a_particles, + a_reactions, iter->heatedMultiGroup( ), a_zeroReactions, a_reactionsToExclude ) ); + } + + m_thresholds.resize( m_heatedCrossSections[0]->numberOfReactions( ) ); + for( int i1 = 0; i1 < m_heatedCrossSections[0]->numberOfReactions( ); ++i1 ) m_thresholds[i1] = m_heatedCrossSections[0]->threshold( i1 ); + + m_multiGroupThresholdIndex.resize( m_heatedCrossSections[0]->numberOfReactions( ) ); + for( int i1 = 0; i1 < m_heatedCrossSections[0]->numberOfReactions( ); ++i1 ) { + m_multiGroupThresholdIndex[i1] = -1; + if( m_thresholds[i1] > 0 ) m_multiGroupThresholdIndex[i1] = m_heatedCrossSections[0]->thresholdOffset( i1 ); + } + + m_projectileMultiGroupBoundariesCollapsed = a_setupInfo.m_protare.projectileMultiGroupBoundariesCollapsed( ); +} + +/* *********************************************************************************************************//** + * Returns the total multi-group cross section for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_sampling [in] Used for multi-group look up. If *true*, use augmented cross sections. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::crossSection( int a_hashIndex, double a_temperature, bool a_sampling ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double cross_section; + + if( a_temperature <= m_temperatures[0] ) { + cross_section = m_heatedCrossSections[0]->crossSection( a_hashIndex, a_sampling ); } + else if( a_temperature >= m_temperatures.back( ) ) { + cross_section = m_heatedCrossSections.back( )->crossSection( a_hashIndex, a_sampling ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + + cross_section = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->crossSection( a_hashIndex, a_sampling ) + + fraction * m_heatedCrossSections[i1]->crossSection( a_hashIndex, a_sampling ); + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionsMultiGroup::crossSectionVector( double a_temperature, double a_userFactor, + std::size_t a_numberAllocated, double *a_crossSectionVector ) const { + + int number_of_temperatures = static_cast( m_temperatures.size( ) ); + int index1 = 0, index2 = 0; + double fraction = 0.0; + + if( a_temperature <= m_temperatures[0] ) { + } + else if( a_temperature >= m_temperatures.back( ) ) { + index1 = index2 = number_of_temperatures - 1; + fraction = 1.0; } + else { + for( ; index2 < number_of_temperatures; ++index2 ) if( a_temperature < m_temperatures[index2] ) break; + index1 = index2 - 1; + fraction = ( a_temperature - m_temperatures[index1] ) / ( m_temperatures[index2] - m_temperatures[index1] ); + } + + Vector &totalCrossSection1 = m_heatedCrossSections[index1]->totalCrossSection( ); + Vector &totalCrossSection2 = m_heatedCrossSections[index2]->totalCrossSection( ); + std::size_t size = totalCrossSection1.size( ); + double factor1 = a_userFactor * ( 1.0 - fraction ), factor2 = a_userFactor * fraction; + + if( a_numberAllocated < totalCrossSection1.size( ) ) LUPI_THROW( "HeatedCrossSectionsMultiGroup::crossSectionVector: a_numberAllocated too small." ); + for( std::size_t i1 = 0; i1 < size; ++i1 ) { + a_crossSectionVector[i1] += factor1 * totalCrossSection1[i1] + factor2 * totalCrossSection2[i1]; + } +} + +/* *********************************************************************************************************//** + * Returns the requested reaction's multi-group cross section for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_sampling [in] If *true*, use augmented cross sections. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::reactionCrossSection( int a_reactionIndex, int a_hashIndex, double a_temperature, bool a_sampling ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double cross_section; + + if( a_temperature <= m_temperatures[0] ) { + cross_section = m_heatedCrossSections[0]->reactionCrossSection( a_reactionIndex, a_hashIndex, a_sampling ); } + else if( a_temperature >= m_temperatures.back( ) ) { + cross_section = m_heatedCrossSections.back( )->reactionCrossSection( a_reactionIndex, a_hashIndex, a_sampling ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + cross_section = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->reactionCrossSection( a_reactionIndex, a_hashIndex, a_sampling ) + + fraction * m_heatedCrossSections[i1]->reactionCrossSection( a_reactionIndex, a_hashIndex, a_sampling ); + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Returns the requested reaction's multi-group cross section for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_temperature [in] The temperature of the target. + * @param a_energy_in [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::reactionCrossSection( int a_reactionIndex, double a_temperature, double a_energy_in ) const { + + int energyIndex = binarySearchVector( a_energy_in, m_projectileMultiGroupBoundariesCollapsed ); + + if( energyIndex < 0 ) { + energyIndex = 0; + if( energyIndex == -1 ) energyIndex = static_cast( m_projectileMultiGroupBoundariesCollapsed.size( ) ) - 2; + } + + return( reactionCrossSection( a_reactionIndex, energyIndex, a_temperature, false ) ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group deposition energy for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * + * @return The deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::depositionEnergy( int a_hashIndex, double a_temperature ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double deposition_energy; + + if( a_temperature <= m_temperatures[0] ) { + deposition_energy = m_heatedCrossSections[0]->depositionEnergy( a_hashIndex ); } + else if( a_temperature >= m_temperatures.back( ) ) { + deposition_energy = m_heatedCrossSections.back( )->depositionEnergy( a_hashIndex ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + deposition_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->depositionEnergy( a_hashIndex ) + + fraction * m_heatedCrossSections[i1]->depositionEnergy( a_hashIndex ); + } + + return( deposition_energy ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group deposition momentum for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * + * @return The deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::depositionMomentum( int a_hashIndex, double a_temperature ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double deposition_momentum; + + if( a_temperature <= m_temperatures[0] ) { + deposition_momentum = m_heatedCrossSections[0]->depositionMomentum( a_hashIndex ); } + else if( a_temperature >= m_temperatures.back( ) ) { + deposition_momentum = m_heatedCrossSections.back( )->depositionMomentum( a_hashIndex ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + deposition_momentum = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->depositionMomentum( a_hashIndex ) + + fraction * m_heatedCrossSections[i1]->depositionMomentum( a_hashIndex ); + } + + return( deposition_momentum ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group production energy for target temperature *a_temperature* and projectile multi-group *a_hashIndex*. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * + * @return The deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::productionEnergy( int a_hashIndex, double a_temperature ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + double production_energy; + + if( a_temperature <= m_temperatures[0] ) { + production_energy = m_heatedCrossSections[0]->productionEnergy( a_hashIndex ); } + else if( a_temperature >= m_temperatures.back( ) ) { + production_energy = m_heatedCrossSections.back( )->productionEnergy( a_hashIndex ); } + else { + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + + production_energy = ( 1. - fraction ) * m_heatedCrossSections[i1-1]->productionEnergy( a_hashIndex ) + + fraction * m_heatedCrossSections[i1]->productionEnergy( a_hashIndex ); + } + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group gain for particle with index *a_particleIndex*. If no particle is found, a Vector of all 0's is returned. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + * + * @return The multi-group gain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::gain( int a_hashIndex, double a_temperature, int a_particleIndex ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + + if( a_temperature <= m_temperatures[0] ) { + return( m_heatedCrossSections[0]->gain( a_particleIndex, a_hashIndex ) ); } + else if( a_temperature >= m_temperatures.back( ) ) { + return( m_heatedCrossSections.back( )->gain( a_particleIndex, a_hashIndex ) ); + } + + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + + double gain1 = m_heatedCrossSections[i1-1]->gain( a_particleIndex, a_hashIndex ); + double gain2 = m_heatedCrossSections[i1]->gain( a_particleIndex, a_hashIndex ); + + return( ( 1. - fraction ) * gain1 + fraction * gain2 ); +} + +/* *********************************************************************************************************//** + * Returns the multi-group gain for particle with intid *a_particleIntid*. If no particle is found, a Vector of all 0's is returned. + * + * @param a_hashIndex [in] The multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + * + * @return The multi-group gain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double HeatedCrossSectionsMultiGroup::gainViaIntid( int a_hashIndex, double a_temperature, int a_particleIntid ) const { + + int i1, number_of_temperatures = static_cast( m_temperatures.size( ) ); + + if( a_temperature <= m_temperatures[0] ) { + return( m_heatedCrossSections[0]->gainViaIntid( a_particleIntid, a_hashIndex ) ); } + else if( a_temperature >= m_temperatures.back( ) ) { + return( m_heatedCrossSections.back( )->gainViaIntid( a_particleIntid, a_hashIndex ) ); + } + + for( i1 = 0; i1 < number_of_temperatures; ++i1 ) if( a_temperature < m_temperatures[i1] ) break; + double fraction = ( a_temperature - m_temperatures[i1-1] ) / ( m_temperatures[i1] - m_temperatures[i1-1] ); + + double gain1 = m_heatedCrossSections[i1-1]->gainViaIntid( a_particleIntid, a_hashIndex ); + double gain2 = m_heatedCrossSections[i1]->gainViaIntid( a_particleIntid, a_hashIndex ); + + return( ( 1. - fraction ) * gain1 + fraction * gain2 ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsMultiGroup::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsMultiGroup::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + for( auto iter = m_heatedCrossSections.begin( ); iter != m_heatedCrossSections.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void HeatedCrossSectionsMultiGroup::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_VECTOR_DOUBLE( m_temperatures, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_thresholds, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_multiGroupThresholdIndex, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_projectileMultiGroupBoundariesCollapsed, a_buffer, a_mode ); + + std::size_t vectorSize = m_heatedCrossSections.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) m_heatedCrossSections.resize( vectorSize, &a_buffer.m_placement ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) a_buffer.m_placement += m_heatedCrossSections.internalSize(); + for( std::size_t memberIndex = 0; memberIndex < vectorSize; ++memberIndex ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_heatedCrossSections[memberIndex] = new(a_buffer.m_placement) HeatedCrossSectionMultiGroup; + a_buffer.incrementPlacement( sizeof( HeatedCrossSectionMultiGroup ) ); } + else { + m_heatedCrossSections[memberIndex] = new HeatedCrossSectionMultiGroup; + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( HeatedCrossSectionMultiGroup ) ); + } + m_heatedCrossSections[memberIndex]->serialize( a_buffer, a_mode ); + } +} + +/* *********************************************************************************************************//** + * This method writes the multi-group data at temperature index *a_temperatureIndex* to *a_file*. + * + * @param a_file [in] The buffer to read or write data to depending on *a_mode*. + * @param a_temperatureIndex [in] The index of the temperature whose data are written. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsMultiGroup::write( FILE *a_file, int a_temperatureIndex ) const { + + if( a_temperatureIndex < 0 ) return; + + std::size_t temperatureIndex = (std::size_t) a_temperatureIndex; + if( temperatureIndex >= m_temperatures.size( ) ) return; + + printf( "HeatedCrossSectionsMultiGroup::write for temperature %.4e\n", m_temperatures[temperatureIndex] ); + + fprintf( a_file, " boundaries index " ); + std::string space( 14, ' ' ); + for( std::size_t index = 0; index < m_projectileMultiGroupBoundariesCollapsed.size( ); ++index ) { + fprintf( a_file, "%s%6zu", space.c_str( ), index ); + } + fprintf( a_file, "\n" ); + writeVector( a_file, "boundaries", 0, m_projectileMultiGroupBoundariesCollapsed ); + + m_heatedCrossSections[temperatureIndex]->write( a_file ); +} + +/* *********************************************************************************************************//** + * This method calls write for every temperature dataset in *this* with the file type stdout. + ***********************************************************************************************************/ + +LUPI_HOST void HeatedCrossSectionsMultiGroup::print( ) const { + + for( std::size_t index = 0; index < m_heatedCrossSections.size( ); ++index ) write( stdout, index ); +} + +/* *********************************************************************************************************//** + * Sets all elements of *a_vector* to 0.0 if *a_zeroReactions* is true, otherwise does nothing. + * + * @param a_vector [in] The vector to zero if *a_zeroReactions* is true. + * @param a_zeroReactions [in] If true all elements of *a_vector* are set to 0.0. + ***********************************************************************************************************/ + +static LUPI_HOST void checkZeroReaction( GIDI::Vector &a_vector, bool a_zeroReactions ) { + + if( a_zeroReactions ) a_vector.setToValueInFlatRange( 0, a_vector.size( ), 0.0 ); +} + +/* *********************************************************************************************************//** + * Collapses the data in *a_vector* and calls *checkZeroReaction*. + * + * @param a_vector [in] The vector to collapse. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_temperature [in] The temperature or the material. + * @param a_zeroReactions [in] If true all elements of the returned **GIDI::Vector** are set to 0.0. + ***********************************************************************************************************/ + +static LUPI_HOST GIDI::Vector collapseAndcheckZeroReaction( GIDI::Vector &a_vector, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles, LUPI_maybeUnused double a_temperature, bool a_zeroReactions ) { + + GIDI::Vector vector = GIDI::collapse( a_vector, a_settings, a_particles, 0.0 ); + checkZeroReaction( vector, a_zeroReactions ); + + return( vector ); +} + +/* *********************************************************************************************************//** + * @param a_file [in] The buffer to read or write data to depending on *a_mode*. + * @param a_prefix [in] The prefix that starts the beginning of the line that the vector data are written to. + * @param a_offset [in] Specifies the number of spaces to indent the line. + * @param a_vector [in] The vector to write. + ***********************************************************************************************************/ + +static void writeVector( FILE *a_file, std::string const &a_prefix, int a_offset, Vector const &a_vector ) { + + std::string indent( 20 * a_offset, ' ' ); + + std::string fmt = LUPI::Misc::argumentsToString( " %%-%ds (%%4d) :: %%s", 40 ); + fprintf( a_file, fmt.c_str( ), a_prefix.c_str( ), (int) a_vector.size( ), indent.c_str( ) ); + for( Vector::const_iterator iter = a_vector.begin( ); iter != a_vector.end( ); ++iter ) fprintf( a_file, " %19.11e", *iter ); + fprintf( a_file, "\n" ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_kinetics.cc b/source/processes/hadronic/models/lend/src/MCGIDI_kinetics.cc deleted file mode 100644 index e384c9c12f..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_kinetics.cc +++ /dev/null @@ -1,128 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#include "MCGIDI.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -int MCGIDI_kinetics_2BodyReaction( statusMessageReporting *smr, MCGIDI_angular *angular, double K, double mu, double phi, - MCGIDI_sampledProductsData *outgoingData ) { - - double m1 = angular->projectileMass_MeV, m2 = angular->targetMass_MeV, m3 = angular->productMass_MeV, m4 = angular->residualMass_MeV, mi, mf, Kp, x, beta; - - mi = m1 + m2; - mf = m3 + m4; - beta = std::sqrt( K * ( K + 2. * m1 ) ) / ( K + mi ); - x = K * m2 / ( mi * mi ); - if( x < 2e-5 ) { /* Kp is the total kinetic energy for m3 and m4 in the COM frame. */ - Kp = mi - mf + K * m2 / mi * ( 1 - 0.5 * x * ( 1 - x ) ); } - else { - Kp = std::sqrt( mi * mi + 2 * K * m2 ) - mf; - } - if( Kp < 0 ) Kp = 0.; /* ???? There needs to be a better test here. */ - return( MCGIDI_kinetics_COMKineticEnergy2LabEnergyAndMomentum( smr, beta, Kp, mu, phi, m3, m4, outgoingData ) ); -} -/* -************************************************************ -*/ -int MCGIDI_kinetics_COMKineticEnergy2LabEnergyAndMomentum( statusMessageReporting * /*smr*/, double beta, double e_kinetic_com, double mu, double phi, - double m3cc, double m4cc, MCGIDI_sampledProductsData *outgoingData ) { -/* -* beta the velocity/speedOflight of the com frame relative to the lab frame. -* e_kinetic_com Total kinetic energy (K1 + K2) in the COM frame. -* mu cos( theta ) in the COM frame. -*/ - double x, v_p, p, pp3, pp4, px3, py3, pz3, pz4, pz, p_perp2, E3, E4, gamma, m3cc2 = m3cc * m3cc, m4cc2 = m4cc * m4cc; - - p = std::sqrt( e_kinetic_com * ( e_kinetic_com + 2. * m3cc ) * ( e_kinetic_com + 2. * m4cc ) * ( e_kinetic_com + 2. * ( m3cc + m4cc ) ) ) / - ( 2. * ( e_kinetic_com + m3cc + m4cc ) ); - py3 = p * std::sqrt( 1 - mu * mu ); - px3 = py3 * std::cos( phi ); - py3 *= std::sin( phi ); - pz = p * mu; - if( 1 ) { /* ????????? Assuming the answer is wanted in the lab frame for now. */ - E3 = std::sqrt( p * p + m3cc2 ); - E4 = std::sqrt( p * p + m4cc2 ); - gamma = std::sqrt( 1. / ( 1. - beta * beta ) ); - pz3 = gamma * ( pz + beta * E3 ); - pz4 = gamma * ( -pz + beta * E4 ); } - else { /* COM frame. */ - pz3 = pz; - pz4 = -pz; - } - outgoingData[1].isVelocity = outgoingData[0].isVelocity; - - p_perp2 = px3 * px3 + py3 * py3; - - outgoingData[0].px_vx = px3; - outgoingData[0].py_vy = py3; - outgoingData[0].pz_vz = pz3; - pp3 = p_perp2 + pz3 * pz3; - x = ( m3cc > 0 ) ? pp3 / ( 2 * m3cc2 ) : 1.; - if( x < 1e-5 ) { - outgoingData[0].kineticEnergy = m3cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); } - else { - outgoingData[0].kineticEnergy = std::sqrt( m3cc2 + pp3 ) - m3cc; - } - outgoingData[1].px_vx = -px3; - outgoingData[1].py_vy = -py3; - outgoingData[1].pz_vz = pz4; - pp4 = p_perp2 + pz4 * pz4; - x = ( m4cc > 0 ) ? pp4 / ( 2 * m4cc2 ) : 1.; - if( x < 1e-5 ) { - outgoingData[1].kineticEnergy = m4cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); } - else { - outgoingData[1].kineticEnergy = std::sqrt( m4cc2 + pp4 ) - m4cc; - } - - if( outgoingData[0].isVelocity ) { - v_p = MCGIDI_speedOfLight_cm_sec / std::sqrt( pp3 + m3cc2 ); - outgoingData[0].px_vx *= v_p; - outgoingData[0].py_vy *= v_p; - outgoingData[0].pz_vz *= v_p; - - v_p = MCGIDI_speedOfLight_cm_sec / std::sqrt( pp4 + m4cc2 ); - outgoingData[1].px_vx *= v_p; - outgoingData[1].py_vy *= v_p; - outgoingData[1].pz_vz *= v_p; - } - - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_kinetics_COM2Lab( statusMessageReporting *smr, MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, double masses[3] ) { -/* -* massProjectile = masses[0], massTarget = masses[1], massProduct = masses[2]; -*/ - double a = masses[0] + masses[1], b, e_in = modes.getProjectileEnergy( ) * masses[0] * masses[2] / ( a * a ), Ep; - - if( decaySamplingInfo->frame != xDataTOM_frame_centerOfMass ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad frame = %d for COM to lab conversion of mu/energy", decaySamplingInfo->frame ); - return( 1 ); - } - a = std::sqrt( e_in ); - b = std::sqrt( decaySamplingInfo->Ep ); - Ep = decaySamplingInfo->Ep + e_in + 2. * decaySamplingInfo->mu * a * b; - if( Ep != 0 ) { - decaySamplingInfo->mu = ( a + decaySamplingInfo->mu * b ) / std::sqrt( Ep ); - } - decaySamplingInfo->Ep = Ep; - decaySamplingInfo->frame = xDataTOM_frame_lab; - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_map.cc b/source/processes/hadronic/models/lend/src/MCGIDI_map.cc deleted file mode 100644 index 906da8e9af..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_map.cc +++ /dev/null @@ -1,595 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include "MCGIDI_map.h" -#include - -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -#if defined(WIN32) || defined(__MINGW32__) -#include -#define realpath( a, b ) GetFullPathName( a, PATH_MAX, b, NULL ) -#endif - -static int aliasesNeeded = 1; - -#if defined __cplusplus - extern "C" { - namespace GIDI { - using namespace GIDI; -#endif -static MCGIDI_mapEntry *_MCGIDI_map_addEntry( statusMessageReporting *smr, MCGIDI_map *map, enum MCGIDI_mapEntry_type type, const char *schema, const char *path, - const char *evaluation, const char *projectile, const char *target ); -static char *_MCGIDI_map_findTargetViaPoPIDs2( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ); -static int _MCGIDI_map_findAllOfTargetViaPoPIDs2( statusMessageReporting *smr, MCGIDI_map *mapAllOfTarget, MCGIDI_map *map, - int projectile_PoPID, int target_PoPID ); -static int _MCGIDI_map_walkTree2( statusMessageReporting *smr, MCGIDI_map *map, int level, int (*handler)( MCGIDI_mapEntry *entry, int level, void *userData), - void *userData ); -static void _MCGIDI_map_simpleWrite2( FILE *f, MCGIDI_map *map, int level ); -static char *_MCGIDI_map_smrUserInterface( void *userData ); -#if defined __cplusplus - } - } -#endif - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif -/* -************************************************************ -*/ -MCGIDI_map *MCGIDI_map_new( statusMessageReporting *smr ) { - - MCGIDI_map *map; - - if( ( map = (MCGIDI_map *) smr_malloc2( smr, sizeof( MCGIDI_map ), 0, "map" ) ) == NULL ) return( NULL ); - if( MCGIDI_map_initialize( smr, map ) ) map = (MCGIDI_map *) MCGIDI_map_free( NULL, map ); - return( map ); -} -/* -************************************************************ -*/ -int MCGIDI_map_initialize( statusMessageReporting *smr, MCGIDI_map *map ) { - - memset( map, 0, sizeof( MCGIDI_map ) ); - map->status = MCGIDI_map_status_Ok; - map->smrUserInterface.smrUserInterface = _MCGIDI_map_smrUserInterface; - map->smrUserInterface.map = map; - map->path = NULL; - map->mapFileName = NULL; - map->numberOfEntries = 0; - map->mapEntries = NULL; - -/* -* Add some default aliases. This is a kludge until aliases are fully supported. -*/ -if( aliasesNeeded ) { /* Support all meta-stables in ENDF/B-VII.1 */ - char const *aliases[] = { "Co58m1", "Ag110m1", "Cd115m1", "Te127m1", "Te129m1", "Pm148m1", "Ho166m1", "Am242m1", "Am244m1", "Es254m1" }; - char const *targets[] = { "Co58_e1", "Ag110_e2", "Cd115_e1", "Te127_e2", "Te129_e1", "Pm148_e2", "Ho166_e1", "Am242_e2", "Am244_e1", "Es254_e2" }; - int i1, n1 = sizeof( aliases ) / sizeof( aliases[1] ); - - - for( i1 = 0; i1 < n1; i1++ ) { - lPoPs_addParticleIfNeeded( smr, targets[i1], NULL ); - if( !smr_isOk( smr ) ) return( 1 ); - PoPs_addAliasIfNeeded( smr, targets[i1], aliases[i1] ); - if( !smr_isOk( smr ) ) return( 1 ); - } - aliasesNeeded = 0; -} - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_map *MCGIDI_map_readFile( statusMessageReporting *smr, const char *basePath, const char *mapFileName ) { -/* -* If an error occurrs, map is freed and NULL is returned. -*/ - int n = 0; - xDataXML_document *doc; - xDataXML_element *element; - xDataXML_element *child; - MCGIDI_map *map; - const char *evaluation, *projectile, *targetName, *path, *schema; - char realPath[2 * ( PATH_MAX + 1 )], *p = &(realPath[PATH_MAX+1]); - - if( ( map = MCGIDI_map_new( smr ) ) == NULL ) return( NULL ); - - if( ( basePath == NULL ) || ( mapFileName[0] == '/' ) ) { - strcpy( realPath, mapFileName ); } - else { - strcpy( realPath, basePath ); - strcat( realPath, "/" ); - strcat( realPath, mapFileName ); - } - if( realpath( realPath, p ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, MCGIDI_map_status_mapParsing, "No map file %s\n", mapFileName ); - return( (MCGIDI_map *) MCGIDI_map_free( NULL, map ) ); - } - n = (int) strlen( p ) + 2; - if( ( map->path = (char *) smr_malloc2( smr, 2 * n, 0, "map->path" ) ) == NULL ) return( (MCGIDI_map *) MCGIDI_map_free( NULL, map ) ); - map->mapFileName = &(map->path[n + 1]); - strcpy( map->mapFileName, p ); - strcpy( map->path, p ); - if( ( p = strrchr( map->path, '/' ) ) != NULL ) { - *p = 0; } - else { - strcpy( map->path, "." ); - } - - if( ( doc = xDataXML_importFile2( smr, map->mapFileName ) ) == NULL ) return( (MCGIDI_map *) MCGIDI_map_free( NULL, map ) ); - - element = xDataXML_getDocumentsElement( doc ); - for( child = xDataXML_getFirstElement( element ); child != NULL; child = xDataXML_getNextElement( child ) ) { - if( strcmp( child->name, "path" ) == 0 ) { - if( ( path = xDataXML_getAttributesValueInElement( child , "path" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "path missing path attribute" ); - break; - } - MCGIDI_map_addPath( smr, map, path ); } - else if( strcmp( child->name, "target" ) == 0 ) { - if( ( schema = xDataXML_getAttributesValueInElement( child , "schema" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "target missing 'schema' attribute" ); - break; - } - if( ( path = xDataXML_getAttributesValueInElement( child , "path" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "target missing 'path' attribute" ); - break; - } - if( ( evaluation = xDataXML_getAttributesValueInElement( child , "evaluation" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "target missing 'evaluation' attribute" ); - break; - } - if( ( projectile = xDataXML_getAttributesValueInElement( child , "projectile" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "target missing 'projectile' attribute" ); - break; - } - if( ( targetName = xDataXML_getAttributesValueInElement( child , "target" ) ) == NULL ) { - smr_setReportError3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "target missing 'target' attribute" ); - break; - } - MCGIDI_map_addTarget( smr, map, schema, path, evaluation, projectile, targetName ); } - else { - smr_setReportError3( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_mapParsing, "invalid element = %s", child->name ); - } - if( !smr_isOk( smr ) ) break; - } - xDataXML_freeDoc( smr, doc ); - if( !smr_isOk( smr ) ) map = (MCGIDI_map *) MCGIDI_map_free( NULL, map ); - return( map ); -} -/* -************************************************************ -*/ -void *MCGIDI_map_free( statusMessageReporting *smr, MCGIDI_map *map ) { - - MCGIDI_map_release( smr, map ); - smr_freeMemory( (void **) &map ); - return( NULL ); -} -/* -************************************************************ -*/ -void MCGIDI_map_release( statusMessageReporting *smr, MCGIDI_map *map ) { - - MCGIDI_mapEntry *entry, *next; - - if( map->path != NULL ) smr_freeMemory( (void **) &(map->path) ); - for( entry = map->mapEntries; entry != NULL; entry = next ) { - next = entry->next; - if( entry->schema != NULL ) smr_freeMemory( (void **) &(entry->schema) ); - if( entry->path != NULL ) smr_freeMemory( (void **) &(entry->path) ); - if( entry->evaluation != NULL ) smr_freeMemory( (void **) &(entry->evaluation) ); - if( entry->projectile != NULL ) smr_freeMemory( (void **) &(entry->projectile) ); - if( entry->targetName != NULL ) smr_freeMemory( (void **) &(entry->targetName) ); - if( entry->map != NULL ) MCGIDI_map_free( smr, entry->map ); - smr_freeMemory( (void **) &entry ); - } - map->numberOfEntries = 0; - map->mapEntries = NULL; - map->status = MCGIDI_map_status_Ok; -} -/* -************************************************************ -*/ -MCGIDI_mapEntry *MCGIDI_map_getFirstEntry( MCGIDI_map *map ) { - - return( map->mapEntries ); -} -/* -************************************************************ -*/ -MCGIDI_mapEntry *MCGIDI_map_getNextEntry( MCGIDI_mapEntry *entry ) { - - return( entry->next ); -} -/* -************************************************************ -*/ -int MCGIDI_map_addTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *schema, const char *path, const char *evaluation, const char *projectile, const char *target ) { - - return( _MCGIDI_map_addEntry( smr, map, MCGIDI_mapEntry_type_target, schema, path, evaluation, projectile, target ) != NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_map_addPath( statusMessageReporting *smr, MCGIDI_map *map, const char *path ) { - - MCGIDI_mapEntry *entry = _MCGIDI_map_addEntry( smr, map, MCGIDI_mapEntry_type_path, NULL, path, NULL, NULL, NULL ); - - if( entry != NULL ) { - if( ( entry->map = MCGIDI_map_readFile( smr, map->path, entry->path ) ) == NULL ) entry = NULL; - } - return( entry != NULL ); -} -/* -************************************************************ -*/ -static MCGIDI_mapEntry *_MCGIDI_map_addEntry( statusMessageReporting *smr, MCGIDI_map *map, enum MCGIDI_mapEntry_type type, const char *schema, - const char *path, const char *evaluation, const char *projectile, const char *targetName ) { - - MCGIDI_mapEntry *p; - MCGIDI_mapEntry *entry; - - if( ( entry = (MCGIDI_mapEntry * ) smr_malloc2( smr, sizeof( MCGIDI_mapEntry ), 1, "entry" ) ) == NULL ) return( NULL ); - entry->next = NULL; - entry->type = type; - entry->parent = map; - entry->schema = NULL; - entry->path = NULL; - entry->evaluation = NULL; - entry->projectile = NULL; - entry->targetName = NULL; - entry->globalPoPsIndexProjectile = entry->globalPoPsIndexTarget = -1; - entry->map = NULL; - - if( path != NULL ) { - if( ( entry->path = (char *) smr_malloc2( smr, strlen( path ) + 1, 0, "path" ) ) == NULL ) goto err; - strcpy( entry->path, path ); - } - - if( evaluation != NULL ) { - if( ( entry->evaluation = (char *) smr_malloc2( smr, strlen( evaluation ) + 1, 0, "evaluation" ) ) == NULL ) goto err; - strcpy( entry->evaluation, evaluation ); - } - - if( projectile != NULL ) { - if( ( entry->globalPoPsIndexProjectile = lPoPs_addParticleIfNeeded( smr, projectile, "LLNL" ) ) < 0 ) goto err; - if( ( entry->projectile = (char *) smr_malloc2( smr, strlen( projectile ) + 1, 0, "projectile" ) ) == NULL ) goto err; - strcpy( entry->projectile, projectile ); - } - - if( targetName != NULL ) { - if( ( entry->globalPoPsIndexTarget = lPoPs_addParticleIfNeeded( smr, targetName, "LLNL" ) ) < 0 ) goto err; - if( ( entry->targetName = (char *) smr_malloc2( smr, strlen( targetName ) + 1, 0, "target" ) ) == NULL ) goto err; - strcpy( entry->targetName, targetName ); - } - - if( schema != NULL ) { - if( ( entry->schema = (char *) smr_malloc2( smr, strlen( schema ) + 1, 0, "schema" ) ) == NULL ) goto err; - strcpy( entry->schema, schema ); - } - - if( map->mapEntries == NULL ) { - map->mapEntries = entry; } - else { - for( p = map->mapEntries; p->next != NULL; p = p->next ); - p->next = entry; - } - map->numberOfEntries++; - return( entry ); - -err: - smr_freeMemory( (void **) &(entry->path) ); - smr_freeMemory( (void **) &(entry->evaluation) ); - smr_freeMemory( (void **) &(entry->projectile) ); - smr_freeMemory( (void **) &(entry->targetName) ); - smr_freeMemory( (void **) &entry ); - return( NULL ); -} -/* -************************************************************ -*/ -char *MCGIDI_map_findTargetViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ) { -/* -* Calling routine must free returned pointer. -*/ - char *path; - char const *projectileName = PoPs_getName_atIndex( smr, projectile_PoPID ); - char const *targetName = PoPs_getName_atIndex( smr, target_PoPID ); - - if( !smr_isOk( smr ) ) return( NULL ); - if( map->status != MCGIDI_map_status_Ok ) return( NULL ); - - path = _MCGIDI_map_findTargetViaPoPIDs2( smr, map, evaluation, projectile_PoPID, target_PoPID ); - if( ( path == NULL ) && smr_isOk( smr ) ) { - if( evaluation == NULL ) { - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, 1, "target %s for projectile %s not found", - targetName, projectileName ); } - else { - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, 1, "target %s for projectile %s and evaluation %s not found", - targetName, projectileName, evaluation ); - } - } - return( path ); -} -/* -************************************************************ -*/ -static char *_MCGIDI_map_findTargetViaPoPIDs2( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ) { - - MCGIDI_mapEntry *entry; - char *path = NULL; - int n, status; - - if( evaluation != NULL ) { - if( strlen( evaluation ) == 0 ) evaluation = NULL; - } - - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - switch( entry->type ) { - case MCGIDI_mapEntry_type_target : - if( ( projectile_PoPID == entry->globalPoPsIndexProjectile ) && ( target_PoPID == entry->globalPoPsIndexTarget ) ) { - if( evaluation == NULL ) { - status = 1; } - else { - status = strcmp( evaluation, entry->evaluation ) == 0; - } - if( status ) { - n = (int) strlen( map->path ) + 1 + (int) strlen( entry->path ) + 1; - if( ( path = (char * ) smr_malloc2( smr, n, 0, "path" ) ) == NULL ) return( NULL ); - strcpy( path, map->path ); - strcat( path, "/" ); - if( entry->path[0] == '/' ) { - strcpy( path, entry->path ); } - else { - strcat( path, entry->path ); - } - return( path ); - } - } - break; - case MCGIDI_mapEntry_type_path : - if( ( path = _MCGIDI_map_findTargetViaPoPIDs2( smr, entry->map, evaluation, projectile_PoPID, target_PoPID ) ) != NULL ) return( path ); - break; - default : - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_UnknownType, "unknown type = %d", entry->type ); - return( NULL ); - } - } - return( NULL ); -} -/* -************************************************************ -*/ -char *MCGIDI_map_findTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, const char *projectile, const char *targetName ) { - - int projectile_PoPID, target_PoPID; - - if( ( projectile_PoPID = lPoPs_addParticleIfNeeded( smr, projectile, "LLNL" ) ) < 0 ) return( NULL ); - if( ( target_PoPID = lPoPs_addParticleIfNeeded( smr, targetName, "LLNL" ) ) < 0 ) return( NULL ); - return( MCGIDI_map_findTargetViaPoPIDs( smr, map, evaluation, projectile_PoPID, target_PoPID ) ); -} -/* -************************************************************ -*/ -MCGIDI_map *MCGIDI_map_findAllOfTargetViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, int projectile_PoPID, - int target_PoPID ) { -/* -* Calling routine must free returned pointer. -*/ - int status; - MCGIDI_map *mapAllOfTarget; - - if( map->status != MCGIDI_map_status_Ok ) return( NULL ); - if( ( mapAllOfTarget = MCGIDI_map_new( smr ) ) == NULL ) return( NULL ); - status = _MCGIDI_map_findAllOfTargetViaPoPIDs2( smr, mapAllOfTarget, map, projectile_PoPID, target_PoPID ); - if( ( status != 0 ) ) mapAllOfTarget = (MCGIDI_map *) MCGIDI_map_free( smr, mapAllOfTarget ); - return( mapAllOfTarget ); -} -/* -************************************************************ -*/ -static int _MCGIDI_map_findAllOfTargetViaPoPIDs2( statusMessageReporting *smr, MCGIDI_map *mapAllOfTarget, MCGIDI_map *map, - int projectile_PoPID, int target_PoPID ) { - - MCGIDI_mapEntry *entry; - - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - switch( entry->type ) { - case MCGIDI_mapEntry_type_target : - if( ( projectile_PoPID == entry->globalPoPsIndexProjectile ) && ( target_PoPID == entry->globalPoPsIndexTarget ) ) { - if( _MCGIDI_map_addEntry( smr, mapAllOfTarget, entry->type, entry->schema, entry->path, entry->evaluation, entry->projectile, - entry->targetName ) == NULL ) return( 1 ); - } - break; - case MCGIDI_mapEntry_type_path : - if( _MCGIDI_map_findAllOfTargetViaPoPIDs2( smr, mapAllOfTarget, entry->map, projectile_PoPID, target_PoPID ) != 0 ) return( 1 ); - break; - default : - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_UnknownType, "unknown type = %d", entry->type ); - return( 1 ); - } - } - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_map *MCGIDI_map_findAllOfTarget( statusMessageReporting *smr, MCGIDI_map *map, const char *projectile, const char *targetName ) { - - int projectile_PoPID, target_PoPID; - - if( ( projectile_PoPID = lPoPs_addParticleIfNeeded( smr, projectile, "LLNL" ) ) < 0 ) return( NULL ); - if( ( target_PoPID = lPoPs_addParticleIfNeeded( smr, targetName, "LLNL" ) ) < 0 ) return( NULL ); - return( MCGIDI_map_findAllOfTargetViaPoPIDs( smr, map, projectile_PoPID, target_PoPID ) ); -} -/* -************************************************************ -*/ -char *MCGIDI_map_getFullPath( statusMessageReporting *smr, MCGIDI_map *map, const char *endPath ) { - - char *path; - - if( endPath[0] == '/' ) { - if( ( path = (char *) smr_malloc2( smr, strlen( endPath ) + 1, 0, "path" ) ) == NULL ) return( NULL ); - path[0] = 0; } - else { - if( ( path = (char *) smr_malloc2( smr, strlen( map->path ) + strlen( endPath ) + 2, 0, "path" ) ) == NULL ) return( NULL ); - strcpy( path, map->path ); - strcat( path, "/" ); - } - strcat( path, endPath ); - return( path ); -} -/* -************************************************************ -*/ -char *MCGIDI_map_getTargetsFullPath( statusMessageReporting *smr, MCGIDI_mapEntry *target ) { - - char *path = NULL; - MCGIDI_map *map = target->parent; - - switch( target->type ) { - case MCGIDI_mapEntry_type_target : - path = MCGIDI_map_getFullPath( smr, map, target->path ); - break; - case MCGIDI_mapEntry_type_path : - smr_setReportInfo3p( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_UnknownType, "path type not allowed" ); - break; - default : - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_UnknownType, "unknown type = %d", target->type ); - break; - } - return( path ); -} -/* -************************************************************ -*/ -static int _MCGIDI_map_walkTree2( statusMessageReporting *smr, MCGIDI_map *map, int level, int (*handler)( MCGIDI_mapEntry *entry, int level, void *userData), - void *userData ) { - - MCGIDI_mapEntry *entry; - - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - if( handler( entry, level, userData ) != 0 ) return( 1 ); - if( entry->type == MCGIDI_mapEntry_type_path ) if( _MCGIDI_map_walkTree2( smr, entry->map, level + 1, handler, userData ) != 0 ) return( 1 ); - } - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_map_walkTree( statusMessageReporting *smr, MCGIDI_map *map, int (*handler)( MCGIDI_mapEntry *entry, int level, void *userData), void *userData ) { - - return( _MCGIDI_map_walkTree2( smr, map, 0, handler, userData ) ); -} -/* -************************************************************ -*/ -char *MCGIDI_map_toXMLString( statusMessageReporting *smr, MCGIDI_map *map ) { - - MCGIDI_mapEntry *entry; - char *s, *p; - char targetFormat[] = "\n"; - char pathFormat[] = "\n"; - char start[] = "\n"; - char end[] = ""; - int n = 0, nStart = (int) strlen( start ), nEnd = (int) strlen( end ); - int nTarget = (int) strlen( targetFormat ) - 10, nPath = (int) strlen( pathFormat ) - 4; - - if( map->status != MCGIDI_map_status_Ok ) return( NULL ); - - n = nStart + nEnd + 1; - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - switch( entry->type ) { - case MCGIDI_mapEntry_type_target : - n += (int) ( strlen( entry->schema ) + strlen( entry->path ) + strlen( entry->evaluation ) + strlen( entry->projectile ) + strlen( entry->targetName ) + nTarget ); - break; - case MCGIDI_mapEntry_type_path : - n += (int ) strlen( entry->path ) + (int ) strlen( entry->projectile ) + nPath; - break; - default : - smr_setReportInfo3( smr, &(map->smrUserInterface), smr_unknownID, MCGIDI_map_status_UnknownType, "unknown type = %d", entry->type ); - return( NULL ); - } - } - - if( ( s = (char *) smr_malloc2( smr, n, 0, "xml string" ) ) == NULL ) return( NULL ); - p = s; - strcpy( p, start ); - while( *p ) p++; // Loop checking, 11.06.2015, T. Koi - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - switch( entry->type ) { - case MCGIDI_mapEntry_type_target : - snprintf( p, sizeof start, targetFormat, entry->schema, entry->evaluation, entry->projectile, entry->targetName, entry->path ); - break; - case MCGIDI_mapEntry_type_path : - snprintf( p, sizeof start, pathFormat, entry->projectile, entry->path ); - break; - } - while( *p ) p++; // Loop checking, 11.06.2015, T. Koi - } - strcpy( p, end ); - return( s ); -} -/* -************************************************************ -*/ -void MCGIDI_map_simpleWrite( FILE *f, MCGIDI_map *map ) { _MCGIDI_map_simpleWrite2( f, map, 0 ); } -/* -************************************************************ -*/ -static void _MCGIDI_map_simpleWrite2( FILE *f, MCGIDI_map *map, int level ) { - - MCGIDI_mapEntry *entry; - char sLevel[] = " "; - int n = (int ) strlen( sLevel ) / 4; - - if( map->status != MCGIDI_map_status_Ok ) { - fprintf( f, "Bad map status = %d\n", map->status ); - return; - } - if( level < n ) sLevel[4 * level] = 0; - fprintf( f, "%smap->path = %s\n", sLevel, map->path ); - fprintf( f, "%smap->mapFileName = %s\n", sLevel, map->mapFileName ); - for( entry = map->mapEntries; entry != NULL; entry = entry->next ) { - switch( entry->type ) { - case MCGIDI_mapEntry_type_target : - fprintf( f, "%sType = target: schema = %s: evaluation = %s: projectile = %s: target = %s: path = %s\n", sLevel, entry->schema, - entry->evaluation, entry->projectile, entry->targetName, entry->path ); - break; - case MCGIDI_mapEntry_type_path : - fprintf( f, "%sType = path: path = %s\n", sLevel, entry->path ); - _MCGIDI_map_simpleWrite2( f, entry->map, level + 1 ); - break; - default : - fprintf( f, "%sUnknown type = %d\n", sLevel, entry->type ); - } - } -} -/* -************************************************************ -*/ -static char *_MCGIDI_map_smrUserInterface( void *userData ) { - - MCGIDI_map_smr *smrUserInterface = (MCGIDI_map_smr *) userData; - - return( smr_allocateFormatMessage( "map file = %s", smrUserInterface->map->mapFileName ) ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_mass.cc b/source/processes/hadronic/models/lend/src/MCGIDI_mass.cc deleted file mode 100644 index 2b753e1cff..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_mass.cc +++ /dev/null @@ -1,871 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#include "MCGIDI_mass.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -struct ZAMass { - char const *symbol; - double mass; -}; - -static struct ZAMass ZAMasses[] = { - { "Am242_m1", 2.420595491590000e+02 + 0.048 }, - { "FissionProductENDL99120", 117.5 }, - { "FissionProductENDL99121", 116.546 }, - { "FissionProductENDL99122", 118.544 }, - { "FissionProductENDL99125", 117.5 }, - { "gamma", 0. }, - { "n", 1.008664915740000e+00 }, { "H_natural", 1.007900000000000e+00 }, { "H1", 1.007825032070000e+00 }, { "H2", 2.014101777850000e+00 }, - { "H3", 3.016049277670000e+00 }, { "H4", 4.027806424000000e+00 }, { "H5", 5.035311488000000e+00 }, { "H6", 6.044942594000000e+00 }, - { "H7", 7.052749000000000e+00 }, { "He_natural", 4.002600000000000e+00 }, { "He3", 3.016029319140000e+00 }, { "He4", 4.002603254150000e+00 }, - { "He5", 5.012223624000000e+00 }, { "He6", 6.018889124000000e+00 }, { "He7", 7.028020618000000e+00 }, { "He8", 8.033921897000001e+00 }, - { "He9", 9.043950285999999e+00 }, { "He10", 1.005239883700000e+01 }, { "Li_natural", 6.941000000000000e+00 }, { "Li3", 3.030775000000000e+00 }, - { "Li4", 4.027185558000000e+00 }, { "Li5", 5.012537800000000e+00 }, { "Li6", 6.015122794000000e+00 }, { "Li7", 7.016004548000000e+00 }, - { "Li8", 8.022487362000000e+00 }, { "Li9", 9.026789505000000e+00 }, { "Li10", 1.003548125900000e+01 }, { "Li11", 1.104379771500000e+01 }, - { "Li12", 1.205378000000000e+01 }, { "Be_natural", 9.012180000000001e+00 }, { "Be5", 5.040790000000000e+00 }, { "Be6", 6.019726317000000e+00 }, - { "Be7", 7.016929828000000e+00 }, { "Be8", 8.005305103000000e+00 }, { "Be9", 9.012182201000000e+00 }, { "Be10", 1.001353381800000e+01 }, - { "Be11", 1.102165774900000e+01 }, { "Be12", 1.202692073700000e+01 }, { "Be13", 1.303569300700000e+01 }, { "Be14", 1.404289292000000e+01 }, - { "Be15", 1.505346000000000e+01 }, { "Be16", 1.606192000000000e+01 }, { "B_natural", 1.081000000000000e+01 }, { "B6", 6.046810000000000e+00 }, - { "B7", 7.029917901000000e+00 }, { "B8", 8.024607232999999e+00 }, { "B9", 9.013328782000000e+00 }, { "B10", 1.001293699200000e+01 }, - { "B11", 1.100930540600000e+01 }, { "B12", 1.201435210400000e+01 }, { "B13", 1.301778021700000e+01 }, { "B14", 1.402540400900000e+01 }, - { "B15", 1.503110302100000e+01 }, { "B16", 1.603980882900000e+01 }, { "B17", 1.704698990600000e+01 }, { "B18", 1.805617000000000e+01 }, - { "B19", 1.906373000000000e+01 }, { "C_natural", 1.201100000000000e+01 }, { "C8", 8.037675025000000e+00 }, { "C9", 9.031036689000000e+00 }, - { "C10", 1.001685322800000e+01 }, { "C11", 1.101143361300000e+01 }, { "C12", 1.200000000000000e+01 }, { "C13", 1.300335483778000e+01 }, - { "C14", 1.400324198870000e+01 }, { "C15", 1.501059925600000e+01 }, { "C16", 1.601470125200000e+01 }, { "C17", 1.702258611600000e+01 }, - { "C18", 1.802675935400000e+01 }, { "C19", 1.903480501800000e+01 }, { "C20", 2.004031975400000e+01 }, { "C21", 2.104934000000000e+01 }, - { "C23", 2.205720000000000e+01 }, { "N_natural", 1.400670000000000e+01 }, { "N10", 1.004165367400000e+01 }, { "N11", 1.102609095600000e+01 }, - { "N12", 1.201861319700000e+01 }, { "N13", 1.300573860900000e+01 }, { "N14", 1.400307400478000e+01 }, { "N15", 1.500010889823000e+01 }, - { "N16", 1.600610165800000e+01 }, { "N17", 1.700845026100000e+01 }, { "N18", 1.801407895900000e+01 }, { "N19", 1.901702869700000e+01 }, - { "N20", 2.002336580700000e+01 }, { "N21", 2.102710824000000e+01 }, { "N22", 2.203439493400000e+01 }, { "N23", 2.304122000000000e+01 }, - { "N24", 2.405104000000000e+01 }, { "N25", 2.506066000000000e+01 }, { "O_natural", 1.599940000000000e+01 }, { "O12", 1.203440489500000e+01 }, - { "O13", 1.302481221300000e+01 }, { "O14", 1.400859625000000e+01 }, { "O15", 1.500306561700000e+01 }, { "O16", 1.599491461956000e+01 }, - { "O17", 1.699913170300000e+01 }, { "O18", 1.799916100100000e+01 }, { "O19", 1.900358013000000e+01 }, { "O20", 2.000407674200000e+01 }, - { "O21", 2.100865588600000e+01 }, { "O22", 2.200996694700000e+01 }, { "O23", 2.301568765900000e+01 }, { "O24", 2.402047291700000e+01 }, - { "O25", 2.502946000000000e+01 }, { "O26", 2.603834000000000e+01 }, { "O27", 2.704826000000000e+01 }, { "O28", 2.805781000000000e+01 }, - { "F_natural", 1.899840300000000e+01 }, { "F14", 1.403506000000000e+01 }, { "F15", 1.501800910300000e+01 }, { "F16", 1.601146572400000e+01 }, - { "F17", 1.700209523700000e+01 }, { "F18", 1.800093795600000e+01 }, { "F19", 1.899840322400000e+01 }, { "F20", 1.999998131500000e+01 }, - { "F21", 2.099994895100000e+01 }, { "F22", 2.200299881500000e+01 }, { "F23", 2.300357463100000e+01 }, { "F24", 2.400811548500000e+01 }, - { "F25", 2.501210174700000e+01 }, { "F26", 2.601961555500000e+01 }, { "F27", 2.702676008600000e+01 }, { "F28", 2.803567000000000e+01 }, - { "F29", 2.904326000000000e+01 }, { "F30", 3.005250000000000e+01 }, { "F31", 3.106042900000000e+01 }, { "Ne_natural", 2.017900000000000e+01 }, - { "Ne16", 1.602576126200000e+01 }, { "Ne17", 1.701767150400000e+01 }, { "Ne18", 1.800570821300000e+01 }, { "Ne19", 1.900188024800000e+01 }, - { "Ne20", 1.999244017542000e+01 }, { "Ne21", 2.099384668400000e+01 }, { "Ne22", 2.199138511300000e+01 }, { "Ne23", 2.299446690400000e+01 }, - { "Ne24", 2.399361077900000e+01 }, { "Ne25", 2.499773688800000e+01 }, { "Ne26", 2.600046120600000e+01 }, { "Ne27", 2.700758990300000e+01 }, - { "Ne28", 2.801207157500000e+01 }, { "Ne29", 2.901938593300000e+01 }, { "Ne30", 3.002480104500000e+01 }, { "Ne31", 3.103311000000000e+01 }, - { "Ne32", 3.204002000000000e+01 }, { "Ne33", 3.304938000000000e+01 }, { "Ne34", 3.405702800000000e+01 }, { "Na_natural", 2.298977000000000e+01 }, - { "Na18", 1.802596900000000e+01 }, { "Na19", 1.901387749900000e+01 }, { "Na20", 2.000735132800000e+01 }, { "Na21", 2.099765520600000e+01 }, - { "Na22", 2.199443642500000e+01 }, { "Na23", 2.298976928087000e+01 }, { "Na24", 2.399096278200000e+01 }, { "Na25", 2.498995396800000e+01 }, - { "Na26", 2.599263300000000e+01 }, { "Na27", 2.699407678800000e+01 }, { "Na28", 2.799893800000000e+01 }, { "Na29", 2.900286100000000e+01 }, - { "Na30", 3.000897600000000e+01 }, { "Na31", 3.101358545200000e+01 }, { "Na32", 3.202046656000000e+01 }, { "Na33", 3.302671975600000e+01 }, - { "Na34", 3.403517000000000e+01 }, { "Na35", 3.504249300000000e+01 }, { "Na36", 3.605148000000000e+01 }, { "Na37", 3.705934000000000e+01 }, - { "Mg_natural", 2.430500000000000e+01 }, { "Mg19", 1.903547000000000e+01 }, { "Mg20", 2.001886254500000e+01 }, { "Mg21", 2.101171291000000e+01 }, - { "Mg22", 2.199957384300000e+01 }, { "Mg23", 2.299412366900000e+01 }, { "Mg24", 2.398504169900000e+01 }, { "Mg25", 2.498583691700000e+01 }, - { "Mg26", 2.598259292900000e+01 }, { "Mg27", 2.698434058500000e+01 }, { "Mg28", 2.798387682500000e+01 }, { "Mg29", 2.898860000000000e+01 }, - { "Mg30", 2.999043400000000e+01 }, { "Mg31", 3.099654600000000e+01 }, { "Mg32", 3.199897500000000e+01 }, { "Mg33", 3.300525400000000e+01 }, - { "Mg34", 3.400945642400000e+01 }, { "Mg35", 3.501734000000000e+01 }, { "Mg36", 3.602300000000000e+01 }, { "Mg37", 3.703140000000000e+01 }, - { "Mg38", 3.803757000000000e+01 }, { "Mg39", 3.904677200000000e+01 }, { "Mg40", 4.005393000000000e+01 }, { "Al_natural", 2.698154000000000e+01 }, - { "Al21", 2.102804000000000e+01 }, { "Al22", 2.201952000000000e+01 }, { "Al23", 2.300726743200000e+01 }, { "Al24", 2.399993886500000e+01 }, - { "Al25", 2.499042809500000e+01 }, { "Al26", 2.598689169200000e+01 }, { "Al27", 2.698153862700000e+01 }, { "Al28", 2.798191030600000e+01 }, - { "Al29", 2.898044504600000e+01 }, { "Al30", 2.998296025600000e+01 }, { "Al31", 3.098394661900000e+01 }, { "Al32", 3.198812448900000e+01 }, - { "Al33", 3.299084333600000e+01 }, { "Al34", 3.399685183700000e+01 }, { "Al35", 3.499986023500000e+01 }, { "Al36", 3.600620720400000e+01 }, - { "Al37", 3.701067782000000e+01 }, { "Al38", 3.801723102100000e+01 }, { "Al39", 3.902297000000000e+01 }, { "Al40", 4.003145000000000e+01 }, - { "Al41", 4.103833000000000e+01 }, { "Al42", 4.204689000000000e+01 }, { "Si_natural", 2.808550000000000e+01 }, { "Si22", 2.203453000000000e+01 }, - { "Si23", 2.302552000000000e+01 }, { "Si24", 2.401154561600000e+01 }, { "Si25", 2.500410557400000e+01 }, { "Si26", 2.599232992100000e+01 }, - { "Si27", 2.698670490500000e+01 }, { "Si28", 2.797692653246000e+01 }, { "Si29", 2.897649470000000e+01 }, { "Si30", 2.997377017100000e+01 }, - { "Si31", 3.097536322700000e+01 }, { "Si32", 3.197414808200000e+01 }, { "Si33", 3.297800022000000e+01 }, { "Si34", 3.397857552400000e+01 }, - { "Si35", 3.498458357500000e+01 }, { "Si36", 3.598659947700000e+01 }, { "Si37", 3.699293608000000e+01 }, { "Si38", 3.799563360100000e+01 }, - { "Si39", 3.900207001300000e+01 }, { "Si40", 4.000586912100000e+01 }, { "Si41", 4.101456000000000e+01 }, { "Si42", 4.201979000000000e+01 }, - { "Si43", 4.302866000000000e+01 }, { "Si44", 4.403526000000000e+01 }, { "P_natural", 3.097376000000000e+01 }, { "P24", 2.403435000000000e+01 }, - { "P25", 2.502026000000000e+01 }, { "P26", 2.601178000000000e+01 }, { "P27", 2.699923023600000e+01 }, { "P28", 2.799231476100000e+01 }, - { "P29", 2.898180060600000e+01 }, { "P30", 2.997831378900000e+01 }, { "P31", 3.097376162900000e+01 }, { "P32", 3.197390727400000e+01 }, - { "P33", 3.297172554300000e+01 }, { "P34", 3.397363625700000e+01 }, { "P35", 3.497331411700000e+01 }, { "P36", 3.597825968000000e+01 }, - { "P37", 3.697960894600000e+01 }, { "P38", 3.798415682700000e+01 }, { "P39", 3.898617947500000e+01 }, { "P40", 3.999129695100000e+01 }, - { "P41", 4.099433543500000e+01 }, { "P42", 4.200100791300000e+01 }, { "P43", 4.300619000000000e+01 }, { "P44", 4.401299000000000e+01 }, - { "P45", 4.501922000000000e+01 }, { "P46", 4.602738000000000e+01 }, { "S_natural", 3.206000000000000e+01 }, { "S26", 2.602788000000000e+01 }, - { "S27", 2.701883300000000e+01 }, { "S28", 2.800437276300000e+01 }, { "S29", 2.899660804900000e+01 }, { "S30", 2.998490324900000e+01 }, - { "S31", 3.097955472800000e+01 }, { "S32", 3.197207099900000e+01 }, { "S33", 3.297145875900000e+01 }, { "S34", 3.396786690200000e+01 }, - { "S35", 3.496903216100000e+01 }, { "S36", 3.596708076000000e+01 }, { "S37", 3.697112556700000e+01 }, { "S38", 3.797116331700000e+01 }, - { "S39", 3.897513430600000e+01 }, { "S40", 3.997545172800000e+01 }, { "S41", 4.097958214900000e+01 }, { "S42", 4.198102241900000e+01 }, - { "S43", 4.298715479000000e+01 }, { "S44", 4.399021339000000e+01 }, { "S45", 4.499650811200000e+01 }, { "S46", 4.600075000000000e+01 }, - { "S47", 4.700859000000000e+01 }, { "S48", 4.801417000000000e+01 }, { "S49", 4.902361900000000e+01 }, { "Cl_natural", 3.545300000000000e+01 }, - { "Cl28", 2.802851000000000e+01 }, { "Cl29", 2.901411000000000e+01 }, { "Cl30", 3.000477000000000e+01 }, { "Cl31", 3.099241308600000e+01 }, - { "Cl32", 3.198568990100000e+01 }, { "Cl33", 3.297745188700000e+01 }, { "Cl34", 3.397376281900000e+01 }, { "Cl35", 3.496885268200000e+01 }, - { "Cl36", 3.596830698100000e+01 }, { "Cl37", 3.696590259100000e+01 }, { "Cl38", 3.796801042500000e+01 }, { "Cl39", 3.896800816400000e+01 }, - { "Cl40", 3.997041547200000e+01 }, { "Cl41", 4.097068452500000e+01 }, { "Cl42", 4.197325480400000e+01 }, { "Cl43", 4.297405440300000e+01 }, - { "Cl44", 4.397828107100000e+01 }, { "Cl45", 4.498028688600000e+01 }, { "Cl46", 4.598421004000000e+01 }, { "Cl47", 4.698871000000000e+01 }, - { "Cl48", 4.799495000000000e+01 }, { "Cl49", 4.900032000000000e+01 }, { "Cl50", 5.000784000000000e+01 }, { "Cl51", 5.101449000000000e+01 }, - { "Ar_natural", 3.994800000000000e+01 }, { "Ar30", 3.002156000000000e+01 }, { "Ar31", 3.101212300000000e+01 }, { "Ar32", 3.199763798400000e+01 }, - { "Ar33", 3.298992570900000e+01 }, { "Ar34", 3.398027124400000e+01 }, { "Ar35", 3.497525758500000e+01 }, { "Ar36", 3.596754510500000e+01 }, - { "Ar37", 3.696677632000000e+01 }, { "Ar38", 3.796273239400000e+01 }, { "Ar39", 3.896431323100000e+01 }, { "Ar40", 3.996238312251000e+01 }, - { "Ar41", 4.096450061100000e+01 }, { "Ar42", 4.196304573600000e+01 }, { "Ar43", 4.296563605600000e+01 }, { "Ar44", 4.396492403300000e+01 }, - { "Ar45", 4.496803995600000e+01 }, { "Ar46", 4.596809412900000e+01 }, { "Ar47", 4.697218679200000e+01 }, { "Ar48", 4.797454000000000e+01 }, - { "Ar49", 4.898052000000000e+01 }, { "Ar50", 4.998443000000000e+01 }, { "Ar51", 5.099163000000000e+01 }, { "Ar52", 5.199678000000000e+01 }, - { "Ar53", 5.300494000000000e+01 }, { "K_natural", 3.909830000000000e+01 }, { "K32", 3.202192000000000e+01 }, { "K33", 3.300726000000000e+01 }, - { "K34", 3.399841000000000e+01 }, { "K35", 3.498800969200000e+01 }, { "K36", 3.598129223500000e+01 }, { "K37", 3.697337588900000e+01 }, - { "K38", 3.796908118400000e+01 }, { "K39", 3.896370667900000e+01 }, { "K40", 3.996399847500000e+01 }, { "K41", 4.096182576200000e+01 }, - { "K42", 4.196240281000000e+01 }, { "K43", 4.296071554000000e+01 }, { "K44", 4.396155680400000e+01 }, { "K45", 4.496069949300000e+01 }, - { "K46", 4.596197686400000e+01 }, { "K47", 4.696167847300000e+01 }, { "K48", 4.796551353500000e+01 }, { "K49", 4.896745092800000e+01 }, - { "K50", 4.997278335500000e+01 }, { "K51", 5.097638000000000e+01 }, { "K52", 5.198261000000000e+01 }, { "K53", 5.298712000000000e+01 }, - { "K54", 5.399420000000000e+01 }, { "K55", 5.499971000000000e+01 }, { "Ca_natural", 4.008000000000000e+01 }, { "Ca34", 3.401412000000000e+01 }, - { "Ca35", 3.500494000000000e+01 }, { "Ca36", 3.599308706300000e+01 }, { "Ca37", 3.698587026900000e+01 }, { "Ca38", 3.797631845200000e+01 }, - { "Ca39", 3.897071972500000e+01 }, { "Ca40", 3.996259098300000e+01 }, { "Ca41", 4.096227806200000e+01 }, { "Ca42", 4.195861801400000e+01 }, - { "Ca43", 4.295876662800000e+01 }, { "Ca44", 4.395548175400000e+01 }, { "Ca45", 4.495618656600000e+01 }, { "Ca46", 4.595369258700000e+01 }, - { "Ca47", 4.695454600600000e+01 }, { "Ca48", 4.795253417700000e+01 }, { "Ca49", 4.895567414800000e+01 }, { "Ca50", 4.995751896200000e+01 }, - { "Ca51", 5.096149921400000e+01 }, { "Ca52", 5.196510000000000e+01 }, { "Ca53", 5.297005000000000e+01 }, { "Ca54", 5.397435000000000e+01 }, - { "Ca55", 5.498055000000000e+01 }, { "Ca56", 5.598557000000000e+01 }, { "Ca57", 5.699235600000000e+01 }, { "Sc_natural", 4.495590000000000e+01 }, - { "Sc36", 3.601492000000000e+01 }, { "Sc37", 3.700305000000000e+01 }, { "Sc38", 3.799470000000000e+01 }, { "Sc39", 3.898479000200000e+01 }, - { "Sc40", 3.997796740700000e+01 }, { "Sc41", 4.096925112500000e+01 }, { "Sc42", 4.196551642900000e+01 }, { "Sc43", 4.296115065800000e+01 }, - { "Sc44", 4.395940275200000e+01 }, { "Sc45", 4.495591190900000e+01 }, { "Sc46", 4.595517189000000e+01 }, { "Sc47", 4.695240750800000e+01 }, - { "Sc48", 4.795223146800000e+01 }, { "Sc49", 4.895002397500000e+01 }, { "Sc50", 4.995218768500000e+01 }, { "Sc51", 5.095360336800000e+01 }, - { "Sc52", 5.195667546800000e+01 }, { "Sc53", 5.295961000000000e+01 }, { "Sc54", 5.396326456100000e+01 }, { "Sc55", 5.496824394900000e+01 }, - { "Sc56", 5.597287000000000e+01 }, { "Sc57", 5.697779000000000e+01 }, { "Sc58", 5.798371000000000e+01 }, { "Sc59", 5.898922000000000e+01 }, - { "Sc60", 5.999571000000000e+01 }, { "Ti_natural", 4.790000000000000e+01 }, { "Ti38", 3.800977000000000e+01 }, { "Ti39", 3.900161000000000e+01 }, - { "Ti40", 3.999049883800000e+01 }, { "Ti41", 4.098314500000000e+01 }, { "Ti42", 4.197303090200000e+01 }, { "Ti43", 4.296852249900000e+01 }, - { "Ti44", 4.395969006900000e+01 }, { "Ti45", 4.495812561600000e+01 }, { "Ti46", 4.595263155500000e+01 }, { "Ti47", 4.695176308800000e+01 }, - { "Ti48", 4.794794628100000e+01 }, { "Ti49", 4.894786998200000e+01 }, { "Ti50", 4.994479119400000e+01 }, { "Ti51", 5.094661495500000e+01 }, - { "Ti52", 5.194689731100000e+01 }, { "Ti53", 5.294972717100000e+01 }, { "Ti54", 5.395105240100000e+01 }, { "Ti55", 5.495526505600000e+01 }, - { "Ti56", 5.595819963900000e+01 }, { "Ti57", 5.696398913700000e+01 }, { "Ti58", 5.796697000000000e+01 }, { "Ti59", 5.897293000000000e+01 }, - { "Ti60", 5.997676000000000e+01 }, { "Ti61", 6.098320000000000e+01 }, { "Ti62", 6.198749000000000e+01 }, { "Ti63", 6.299442000000000e+01 }, - { "V_natural", 5.094150000000000e+01 }, { "V40", 4.001109000000000e+01 }, { "V41", 4.099978000000000e+01 }, { "V42", 4.199123000000000e+01 }, - { "V43", 4.298065000000000e+01 }, { "V44", 4.397411000000000e+01 }, { "V45", 4.496577580800000e+01 }, { "V46", 4.596020048100000e+01 }, - { "V47", 4.695490894000000e+01 }, { "V48", 4.795225370700000e+01 }, { "V49", 4.894851610100000e+01 }, { "V50", 4.994715848500000e+01 }, - { "V51", 5.094395950700000e+01 }, { "V52", 5.194477547900000e+01 }, { "V53", 5.294433797900000e+01 }, { "V54", 5.394643985400000e+01 }, - { "V55", 5.494723370100000e+01 }, { "V56", 5.595053096600000e+01 }, { "V57", 5.695256143200000e+01 }, { "V58", 5.795683413600000e+01 }, - { "V59", 5.896020740700000e+01 }, { "V60", 5.996502686200000e+01 }, { "V61", 6.096848000000000e+01 }, { "V62", 6.197378000000000e+01 }, - { "V63", 6.297755000000000e+01 }, { "V64", 6.398347000000000e+01 }, { "V65", 6.498792000000000e+01 }, { "Cr_natural", 5.199600000000000e+01 }, - { "Cr42", 4.200643000000000e+01 }, { "Cr43", 4.299771000000000e+01 }, { "Cr44", 4.398554900000000e+01 }, { "Cr45", 4.497964000000000e+01 }, - { "Cr46", 4.596835863500000e+01 }, { "Cr47", 4.696290004600000e+01 }, { "Cr48", 4.795403171600000e+01 }, { "Cr49", 4.895133572100000e+01 }, - { "Cr50", 4.994604420500000e+01 }, { "Cr51", 5.094476743100000e+01 }, { "Cr52", 5.194050747200000e+01 }, { "Cr53", 5.294064938600000e+01 }, - { "Cr54", 5.393888039500000e+01 }, { "Cr55", 5.494083967200000e+01 }, { "Cr56", 5.594065313900000e+01 }, { "Cr57", 5.694361301300000e+01 }, - { "Cr58", 5.794435312900000e+01 }, { "Cr59", 5.894858636700000e+01 }, { "Cr60", 5.995007603300000e+01 }, { "Cr61", 6.095471720400000e+01 }, - { "Cr62", 6.195661319000000e+01 }, { "Cr63", 6.296186000000000e+01 }, { "Cr64", 6.396441000000000e+01 }, { "Cr65", 6.497016000000001e+01 }, - { "Cr66", 6.597338000000001e+01 }, { "Cr67", 6.697955000000000e+01 }, { "Mn_natural", 5.493800000000000e+01 }, { "Mn44", 4.400687000000000e+01 }, - { "Mn45", 4.499451000000000e+01 }, { "Mn46", 4.598672000000000e+01 }, { "Mn47", 4.697610000000000e+01 }, { "Mn48", 4.796852000000000e+01 }, - { "Mn49", 4.895961800500000e+01 }, { "Mn50", 4.995423823000000e+01 }, { "Mn51", 5.094821078700000e+01 }, { "Mn52", 5.194556546400000e+01 }, - { "Mn53", 5.294129011700000e+01 }, { "Mn54", 5.394035885400000e+01 }, { "Mn55", 5.493804514100000e+01 }, { "Mn56", 5.593890491000000e+01 }, - { "Mn57", 5.693828537800000e+01 }, { "Mn58", 5.793998154900000e+01 }, { "Mn59", 5.894044023700000e+01 }, { "Mn60", 5.994291124600000e+01 }, - { "Mn61", 6.094465263800000e+01 }, { "Mn62", 6.194842822000000e+01 }, { "Mn63", 6.295023999000000e+01 }, { "Mn64", 6.395424909000000e+01 }, - { "Mn65", 6.495633606500000e+01 }, { "Mn66", 6.596108000000000e+01 }, { "Mn67", 6.696414000000000e+01 }, { "Mn68", 6.796930000000000e+01 }, - { "Mn69", 6.897284000000001e+01 }, { "Fe_natural", 5.584700000000000e+01 }, { "Fe45", 4.501457800000000e+01 }, { "Fe46", 4.600081000000000e+01 }, - { "Fe47", 4.699289000000000e+01 }, { "Fe48", 4.798050400000000e+01 }, { "Fe49", 4.897361000000000e+01 }, { "Fe50", 4.996298898200000e+01 }, - { "Fe51", 5.095681953800000e+01 }, { "Fe52", 5.194811387500000e+01 }, { "Fe53", 5.294530794200000e+01 }, { "Fe54", 5.393961050100000e+01 }, - { "Fe55", 5.493829335700000e+01 }, { "Fe56", 5.593493747500000e+01 }, { "Fe57", 5.693539396900000e+01 }, { "Fe58", 5.793327555800000e+01 }, - { "Fe59", 5.893487546400000e+01 }, { "Fe60", 5.993407168300000e+01 }, { "Fe61", 6.093674528100000e+01 }, { "Fe62", 6.193676744200000e+01 }, - { "Fe63", 6.294036909100000e+01 }, { "Fe64", 6.394120126500000e+01 }, { "Fe65", 6.494538027000000e+01 }, { "Fe66", 6.594678063800001e+01 }, - { "Fe67", 6.695094724400001e+01 }, { "Fe68", 6.795370000000000e+01 }, { "Fe69", 6.895878000000000e+01 }, { "Fe70", 6.996146000000000e+01 }, - { "Fe71", 7.096672000000000e+01 }, { "Fe72", 7.196962000000001e+01 }, { "Co_natural", 5.893320000000000e+01 }, { "Co47", 4.701149000000000e+01 }, - { "Co48", 4.800176000000000e+01 }, { "Co49", 4.898972000000000e+01 }, { "Co50", 4.998154000000000e+01 }, { "Co51", 5.097072000000000e+01 }, - { "Co52", 5.196359000000000e+01 }, { "Co53", 5.295421889600000e+01 }, { "Co54", 5.394845963500000e+01 }, { "Co55", 5.494199902900000e+01 }, - { "Co56", 5.593983927800000e+01 }, { "Co57", 5.693629137300000e+01 }, { "Co58", 5.793575281400000e+01 }, { "Co59", 5.893319504800000e+01 }, - { "Co60", 5.993381705900000e+01 }, { "Co61", 6.093247576300000e+01 }, { "Co62", 6.193405056300000e+01 }, { "Co63", 6.293361161100000e+01 }, - { "Co64", 6.393580990800000e+01 }, { "Co65", 6.493647846000000e+01 }, { "Co66", 6.593976200400000e+01 }, { "Co67", 6.694088952900000e+01 }, - { "Co68", 6.794487305800000e+01 }, { "Co69", 6.894632000000000e+01 }, { "Co70", 6.995099999999999e+01 }, { "Co71", 7.095290000000000e+01 }, - { "Co72", 7.195780999999999e+01 }, { "Co73", 7.296024000000000e+01 }, { "Co74", 7.396538000000000e+01 }, { "Co75", 7.496832999999999e+01 }, - { "Ni_natural", 5.870000000000000e+01 }, { "Ni48", 4.801975000000000e+01 }, { "Ni49", 4.900966000000000e+01 }, { "Ni50", 4.999593000000000e+01 }, - { "Ni51", 5.098772000000000e+01 }, { "Ni52", 5.197568000000000e+01 }, { "Ni53", 5.296847000000000e+01 }, { "Ni54", 5.395790549500000e+01 }, - { "Ni55", 5.495133025100000e+01 }, { "Ni56", 5.594213202200000e+01 }, { "Ni57", 5.693979352600000e+01 }, { "Ni58", 5.793534290700000e+01 }, - { "Ni59", 5.893434670500000e+01 }, { "Ni60", 5.993078637200000e+01 }, { "Ni61", 6.093105603300000e+01 }, { "Ni62", 6.192834511500000e+01 }, - { "Ni63", 6.292966937400000e+01 }, { "Ni64", 6.392796595900000e+01 }, { "Ni65", 6.493008430400000e+01 }, { "Ni66", 6.592913933400000e+01 }, - { "Ni67", 6.693156941399999e+01 }, { "Ni68", 6.793186878900001e+01 }, { "Ni69", 6.893561026899999e+01 }, { "Ni70", 6.993650000000000e+01 }, - { "Ni71", 7.094073628300001e+01 }, { "Ni72", 7.194209268199999e+01 }, { "Ni73", 7.294647000000001e+01 }, { "Ni74", 7.394807000000000e+01 }, - { "Ni75", 7.495287000000000e+01 }, { "Ni76", 7.595533000000000e+01 }, { "Ni77", 7.696055000000000e+01 }, { "Ni78", 7.796317999999999e+01 }, - { "Cu_natural", 6.354600000000000e+01 }, { "Cu52", 5.199718000000000e+01 }, { "Cu53", 5.298555000000000e+01 }, { "Cu54", 5.397671000000000e+01 }, - { "Cu55", 5.496605000000000e+01 }, { "Cu56", 5.595856000000000e+01 }, { "Cu57", 5.694921107800000e+01 }, { "Cu58", 5.794453849900000e+01 }, - { "Cu59", 5.893949802800000e+01 }, { "Cu60", 5.993736503000000e+01 }, { "Cu61", 6.093345782100000e+01 }, { "Cu62", 6.193258374500000e+01 }, - { "Cu63", 6.292959747400000e+01 }, { "Cu64", 6.392976418300000e+01 }, { "Cu65", 6.492778948500001e+01 }, { "Cu66", 6.592886881299999e+01 }, - { "Cu67", 6.692773031400000e+01 }, { "Cu68", 6.792961088900000e+01 }, { "Cu69", 6.892942926900000e+01 }, { "Cu70", 6.993239234300000e+01 }, - { "Cu71", 7.093267683300000e+01 }, { "Cu72", 7.193582030700000e+01 }, { "Cu73", 7.293667528200000e+01 }, { "Cu74", 7.393987486200000e+01 }, - { "Cu75", 7.494190000000000e+01 }, { "Cu76", 7.594527502600000e+01 }, { "Cu77", 7.694785000000000e+01 }, { "Cu78", 7.795196000000000e+01 }, - { "Cu79", 7.895456000000000e+01 }, { "Cu80", 7.996087000000000e+01 }, { "Zn_natural", 6.538000000000000e+01 }, { "Zn54", 5.399295000000000e+01 }, - { "Zn55", 5.498398000000000e+01 }, { "Zn56", 5.597238000000000e+01 }, { "Zn57", 5.696478800000000e+01 }, { "Zn58", 5.795459155500000e+01 }, - { "Zn59", 5.894926376400000e+01 }, { "Zn60", 5.994182703500000e+01 }, { "Zn61", 6.093951063500000e+01 }, { "Zn62", 6.193432976400000e+01 }, - { "Zn63", 6.293321156600000e+01 }, { "Zn64", 6.392914222200000e+01 }, { "Zn65", 6.492924098400000e+01 }, { "Zn66", 6.592603341900001e+01 }, - { "Zn67", 6.692712734500000e+01 }, { "Zn68", 6.792484415400000e+01 }, { "Zn69", 6.892655028100000e+01 }, { "Zn70", 6.992531927400000e+01 }, - { "Zn71", 7.092772159899999e+01 }, { "Zn72", 7.192685795100000e+01 }, { "Zn73", 7.292977910400000e+01 }, { "Zn74", 7.392945860899999e+01 }, - { "Zn75", 7.493293674100001e+01 }, { "Zn76", 7.593329357000000e+01 }, { "Zn77", 7.693695896700000e+01 }, { "Zn78", 7.793844021600000e+01 }, - { "Zn79", 7.894265200000000e+01 }, { "Zn80", 7.994434234800001e+01 }, { "Zn81", 8.095048000000000e+01 }, { "Zn82", 8.195442000000000e+01 }, - { "Zn83", 8.296102999999999e+01 }, { "Ga_natural", 6.972000000000000e+01 }, { "Ga56", 5.599491000000000e+01 }, { "Ga57", 5.698293000000000e+01 }, - { "Ga58", 5.797425000000000e+01 }, { "Ga59", 5.896337000000000e+01 }, { "Ga60", 5.995706000000000e+01 }, { "Ga61", 6.094944628700000e+01 }, - { "Ga62", 6.194417523800000e+01 }, { "Ga63", 6.293929419600000e+01 }, { "Ga64", 6.393683874700000e+01 }, { "Ga65", 6.493273475399999e+01 }, - { "Ga66", 6.593158901000000e+01 }, { "Ga67", 6.692820170300000e+01 }, { "Ga68", 6.792798008400000e+01 }, { "Ga69", 6.892557358700000e+01 }, - { "Ga70", 6.992602197200000e+01 }, { "Ga71", 7.092470134900000e+01 }, { "Ga72", 7.192636626800000e+01 }, { "Ga73", 7.292517468200001e+01 }, - { "Ga74", 7.392694576200000e+01 }, { "Ga75", 7.492650024600000e+01 }, { "Ga76", 7.592882762600000e+01 }, { "Ga77", 7.692915429999999e+01 }, - { "Ga78", 7.793160818000000e+01 }, { "Ga79", 7.893289326000000e+01 }, { "Ga80", 7.993651578100000e+01 }, { "Ga81", 8.093775235500000e+01 }, - { "Ga82", 8.194298999999999e+01 }, { "Ga83", 8.294698000000000e+01 }, { "Ga84", 8.395265000000001e+01 }, { "Ga85", 8.495699999999999e+01 }, - { "Ga86", 8.596312000000000e+01 }, { "Ge_natural", 7.259000000000000e+01 }, { "Ge58", 5.799101000000000e+01 }, { "Ge59", 5.898175000000000e+01 }, - { "Ge60", 5.997019000000000e+01 }, { "Ge61", 6.096379000000000e+01 }, { "Ge62", 6.195465000000000e+01 }, { "Ge63", 6.294964000000000e+01 }, - { "Ge64", 6.394165300000000e+01 }, { "Ge65", 6.493943640600000e+01 }, { "Ge66", 6.593384345299999e+01 }, { "Ge67", 6.693273407000000e+01 }, - { "Ge68", 6.792809423999999e+01 }, { "Ge69", 6.892796453299999e+01 }, { "Ge70", 6.992424738100000e+01 }, { "Ge71", 7.092495095400000e+01 }, - { "Ge72", 7.192207581500000e+01 }, { "Ge73", 7.292345894499999e+01 }, { "Ge74", 7.392117776700000e+01 }, { "Ge75", 7.492285894800000e+01 }, - { "Ge76", 7.592140255699999e+01 }, { "Ge77", 7.692354859100000e+01 }, { "Ge78", 7.792285273900001e+01 }, { "Ge79", 7.892540099500000e+01 }, - { "Ge80", 7.992537239200000e+01 }, { "Ge81", 8.092882046699999e+01 }, { "Ge82", 8.192954972500000e+01 }, { "Ge83", 8.293462000000000e+01 }, - { "Ge84", 8.393747000000000e+01 }, { "Ge85", 8.494302999999999e+01 }, { "Ge86", 8.594649000000000e+01 }, { "Ge87", 8.695251000000000e+01 }, - { "Ge88", 8.795690999999999e+01 }, { "Ge89", 8.896383000000000e+01 }, { "As_natural", 7.492160000000000e+01 }, { "As60", 5.999313000000000e+01 }, - { "As61", 6.098062000000000e+01 }, { "As62", 6.197320000000000e+01 }, { "As63", 6.296369000000000e+01 }, { "As64", 6.395757200000000e+01 }, - { "As65", 6.494956400000000e+01 }, { "As66", 6.594471000000000e+01 }, { "As67", 6.693918607099999e+01 }, { "As68", 6.793676906899999e+01 }, - { "As69", 6.893227367500000e+01 }, { "As70", 6.993092482599999e+01 }, { "As71", 7.092711242800000e+01 }, { "As72", 7.192675228300000e+01 }, - { "As73", 7.292382484399999e+01 }, { "As74", 7.392392869200000e+01 }, { "As75", 7.492159647800000e+01 }, { "As76", 7.592239402100000e+01 }, - { "As77", 7.692064728600000e+01 }, { "As78", 7.792182728100001e+01 }, { "As79", 7.892094793400000e+01 }, { "As80", 7.992253381600000e+01 }, - { "As81", 8.092213228700000e+01 }, { "As82", 8.192450406700000e+01 }, { "As83", 8.292498002400001e+01 }, { "As84", 8.392905800000000e+01 }, - { "As85", 8.493201999999999e+01 }, { "As86", 8.593650000000000e+01 }, { "As87", 8.693989999999999e+01 }, { "As88", 8.794494000000000e+01 }, - { "As89", 8.894938999999999e+01 }, { "As90", 8.995550000000000e+01 }, { "As91", 9.096043000000000e+01 }, { "As92", 9.196680000000001e+01 }, - { "Se_natural", 7.895999999999999e+01 }, { "Se65", 6.496465999999999e+01 }, { "Se66", 6.595520999999999e+01 }, { "Se67", 6.695009000000000e+01 }, - { "Se68", 6.794179800000001e+01 }, { "Se69", 6.893955781699999e+01 }, { "Se70", 6.993339064400000e+01 }, { "Se71", 7.093224182199999e+01 }, - { "Se72", 7.192711235199999e+01 }, { "Se73", 7.292676534500001e+01 }, { "Se74", 7.392247643600000e+01 }, { "Se75", 7.492252336800000e+01 }, - { "Se76", 7.591921359700000e+01 }, { "Se77", 7.691991403800000e+01 }, { "Se78", 7.791730909000000e+01 }, { "Se79", 7.891849909800000e+01 }, - { "Se80", 7.991652127099999e+01 }, { "Se81", 8.091799247400000e+01 }, { "Se82", 8.191669940100000e+01 }, { "Se83", 8.291911847300000e+01 }, - { "Se84", 8.391846235400000e+01 }, { "Se85", 8.492224505300000e+01 }, { "Se86", 8.592427157900001e+01 }, { "Se87", 8.692852135800000e+01 }, - { "Se88", 8.793142399800000e+01 }, { "Se89", 8.893644999999999e+01 }, { "Se90", 8.993996000000000e+01 }, { "Se91", 9.094596000000000e+01 }, - { "Se92", 9.194992000000001e+01 }, { "Se93", 9.295629000000000e+01 }, { "Se94", 9.396048999999999e+01 }, { "Br_natural", 7.990400000000000e+01 }, - { "Br67", 6.696478999999999e+01 }, { "Br68", 6.795851600000000e+01 }, { "Br69", 6.895010600000001e+01 }, { "Br70", 6.994479200000001e+01 }, - { "Br71", 7.093874000000000e+01 }, { "Br72", 7.193664457200001e+01 }, { "Br73", 7.293169152400000e+01 }, { "Br74", 7.392989103399999e+01 }, - { "Br75", 7.492577620700000e+01 }, { "Br76", 7.592454146900000e+01 }, { "Br77", 7.692137908200000e+01 }, { "Br78", 7.792114570600000e+01 }, - { "Br79", 7.891833708700000e+01 }, { "Br80", 7.991852929600000e+01 }, { "Br81", 8.091629056300000e+01 }, { "Br82", 8.191680411900001e+01 }, - { "Br83", 8.291518042100000e+01 }, { "Br84", 8.391647897400000e+01 }, { "Br85", 8.491560840299999e+01 }, { "Br86", 8.591879757700001e+01 }, - { "Br87", 8.692071132400000e+01 }, { "Br88", 8.792406592600000e+01 }, { "Br89", 8.892638533400000e+01 }, { "Br90", 8.993062773699999e+01 }, - { "Br91", 9.093396809500000e+01 }, { "Br92", 9.193925871400000e+01 }, { "Br93", 9.294305000000000e+01 }, { "Br94", 9.394868000000000e+01 }, - { "Br95", 9.495287000000000e+01 }, { "Br96", 9.595853000000000e+01 }, { "Br97", 9.696280000000000e+01 }, { "Kr_natural", 8.380000000000000e+01 }, - { "Kr69", 6.896518000000000e+01 }, { "Kr70", 6.995525900000000e+01 }, { "Kr71", 7.094962573799999e+01 }, { "Kr72", 7.194209203800000e+01 }, - { "Kr73", 7.293928919500000e+01 }, { "Kr74", 7.393308436900000e+01 }, { "Kr75", 7.493094574600001e+01 }, { "Kr76", 7.592591007800000e+01 }, - { "Kr77", 7.692467000000001e+01 }, { "Kr78", 7.792036478300000e+01 }, { "Kr79", 7.892008243100000e+01 }, { "Kr80", 7.991637896500001e+01 }, - { "Kr81", 8.091659201500001e+01 }, { "Kr82", 8.191348360000001e+01 }, { "Kr83", 8.291413609900000e+01 }, { "Kr84", 8.391150668700000e+01 }, - { "Kr85", 8.491252733100001e+01 }, { "Kr86", 8.591061072900000e+01 }, { "Kr87", 8.691335486200001e+01 }, { "Kr88", 8.791444696900000e+01 }, - { "Kr89", 8.891763058100000e+01 }, { "Kr90", 8.991951655500000e+01 }, { "Kr91", 9.092344521500000e+01 }, { "Kr92", 9.192615621000000e+01 }, - { "Kr93", 9.293127435700001e+01 }, { "Kr94", 9.393436000000000e+01 }, { "Kr95", 9.493984000000000e+01 }, { "Kr96", 9.594307000000001e+01 }, - { "Kr97", 9.694856000000000e+01 }, { "Kr98", 9.795191000000000e+01 }, { "Kr99", 9.895760000000000e+01 }, { "Kr100", 9.996114000000000e+01 }, - { "Rb_natural", 8.546780000000000e+01 }, { "Rb71", 7.096532000000001e+01 }, { "Rb72", 7.195908000000000e+01 }, { "Rb73", 7.295056099999999e+01 }, - { "Rb74", 7.394426475100001e+01 }, { "Rb75", 7.493857000000000e+01 }, { "Rb76", 7.593507222600000e+01 }, { "Rb77", 7.693040800000000e+01 }, - { "Rb78", 7.792814100000000e+01 }, { "Rb79", 7.892398946000000e+01 }, { "Rb80", 7.992251924999999e+01 }, { "Rb81", 8.091899591300000e+01 }, - { "Rb82", 8.191820859800001e+01 }, { "Rb83", 8.291510970100001e+01 }, { "Rb84", 8.391438482100000e+01 }, { "Rb85", 8.491178973700001e+01 }, - { "Rb86", 8.591116741899999e+01 }, { "Rb87", 8.690918052600000e+01 }, { "Rb88", 8.791131558799999e+01 }, { "Rb89", 8.891227801600000e+01 }, - { "Rb90", 8.991480169400000e+01 }, { "Rb91", 9.091653695799999e+01 }, { "Rb92", 9.191972890000000e+01 }, { "Rb93", 9.292204187599999e+01 }, - { "Rb94", 9.392640494600001e+01 }, { "Rb95", 9.492930288900000e+01 }, { "Rb96", 9.593427263700001e+01 }, { "Rb97", 9.693735191600000e+01 }, - { "Rb98", 9.794179066800000e+01 }, { "Rb99", 9.894537928299999e+01 }, { "Rb100", 9.994987000000000e+01 }, { "Rb101", 1.009531964450000e+02 }, - { "Rb102", 1.019588700000000e+02 }, { "Sr_natural", 8.762000000000000e+01 }, { "Sr73", 7.296597000000000e+01 }, { "Sr74", 7.395631000000000e+01 }, - { "Sr75", 7.494994956799999e+01 }, { "Sr76", 7.594176678200000e+01 }, { "Sr77", 7.693794478200000e+01 }, { "Sr78", 7.793218000000000e+01 }, - { "Sr79", 7.892970800000001e+01 }, { "Sr80", 7.992452101300000e+01 }, { "Sr81", 8.092321184600000e+01 }, { "Sr82", 8.191840163900000e+01 }, - { "Sr83", 8.291755670100000e+01 }, { "Sr84", 8.391342527499999e+01 }, { "Sr85", 8.491293280300000e+01 }, { "Sr86", 8.590926020400001e+01 }, - { "Sr87", 8.690887712400000e+01 }, { "Sr88", 8.790561212400000e+01 }, { "Sr89", 8.890745067500001e+01 }, { "Sr90", 8.990773788800000e+01 }, - { "Sr91", 9.091020309500000e+01 }, { "Sr92", 9.191103785800000e+01 }, { "Sr93", 9.291402563400000e+01 }, { "Sr94", 9.391536131200000e+01 }, - { "Sr95", 9.491935876600000e+01 }, { "Sr96", 9.592169680200000e+01 }, { "Sr97", 9.692615292300000e+01 }, { "Sr98", 9.792845293400001e+01 }, - { "Sr99", 9.893324092600000e+01 }, { "Sr100", 9.993535191100000e+01 }, { "Sr101", 1.009405178880000e+02 }, { "Sr102", 1.019430189870000e+02 }, - { "Sr103", 1.029489500000000e+02 }, { "Sr104", 1.039523300000000e+02 }, { "Sr105", 1.049585800000000e+02 }, { "Y_natural", 8.890590000000000e+01 }, - { "Y76", 7.595845000000000e+01 }, { "Y77", 7.694964500000000e+01 }, { "Y78", 7.794361000000001e+01 }, { "Y79", 7.893735163400000e+01 }, - { "Y80", 7.993428000000000e+01 }, { "Y81", 8.092912746800000e+01 }, { "Y82", 8.192679245100000e+01 }, { "Y83", 8.292235424300000e+01 }, - { "Y84", 8.392038826400000e+01 }, { "Y85", 8.491643303900000e+01 }, { "Y86", 8.591488557600000e+01 }, { "Y87", 8.691087573000000e+01 }, - { "Y88", 8.790950114600000e+01 }, { "Y89", 8.890584829500000e+01 }, { "Y90", 8.990715188599999e+01 }, { "Y91", 9.090730479100000e+01 }, - { "Y92", 9.190894914300000e+01 }, { "Y93", 9.290958271300001e+01 }, { "Y94", 9.391159524500000e+01 }, { "Y95", 9.491282062099999e+01 }, - { "Y96", 9.591589134300000e+01 }, { "Y97", 9.691813399500001e+01 }, { "Y98", 9.792220302000000e+01 }, { "Y99", 9.892463620400000e+01 }, - { "Y100", 9.992775658600000e+01 }, { "Y101", 1.009303138500000e+02 }, { "Y102", 1.019335556950000e+02 }, { "Y103", 1.029367300000000e+02 }, - { "Y104", 1.039410500000000e+02 }, { "Y105", 1.049448700000000e+02 }, { "Y106", 1.059497900000000e+02 }, { "Y107", 1.069541400000000e+02 }, - { "Y108", 1.079594800000000e+02 }, { "Zr_natural", 9.122000000000000e+01 }, { "Zr78", 7.795523000000000e+01 }, { "Zr79", 7.894916000000001e+01 }, - { "Zr80", 7.994040000000000e+01 }, { "Zr81", 8.093721002600000e+01 }, { "Zr82", 8.193108700000001e+01 }, { "Zr83", 8.292865380100000e+01 }, - { "Zr84", 8.392325000000000e+01 }, { "Zr85", 8.492147118200000e+01 }, { "Zr86", 8.591647359100000e+01 }, { "Zr87", 8.691481625199999e+01 }, - { "Zr88", 8.791022690400000e+01 }, { "Zr89", 8.890888950000000e+01 }, { "Zr90", 8.990470441600000e+01 }, { "Zr91", 9.090564576700000e+01 }, - { "Zr92", 9.190504084700000e+01 }, { "Zr93", 9.290647600600001e+01 }, { "Zr94", 9.390631519199999e+01 }, { "Zr95", 9.490804260000000e+01 }, - { "Zr96", 9.590827338600000e+01 }, { "Zr97", 9.691095310900000e+01 }, { "Zr98", 9.791273489200000e+01 }, { "Zr99", 9.891651210600000e+01 }, - { "Zr100", 9.991776188900000e+01 }, { "Zr101", 1.009211404150000e+02 }, { "Zr102", 1.019229812850000e+02 }, { "Zr103", 1.029265996060000e+02 }, - { "Zr104", 1.039287800000000e+02 }, { "Zr105", 1.049330500000000e+02 }, { "Zr106", 1.059359100000000e+02 }, { "Zr107", 1.069407500000000e+02 }, - { "Zr108", 1.079439600000000e+02 }, { "Zr109", 1.089492400000000e+02 }, { "Zr110", 1.099528700000000e+02 }, { "Nb_natural", 9.290640000000000e+01 }, - { "Nb81", 8.094902999999999e+01 }, { "Nb82", 8.194313000000000e+01 }, { "Nb83", 8.293670538200000e+01 }, { "Nb84", 8.393357000000000e+01 }, - { "Nb85", 8.492791244700000e+01 }, { "Nb86", 8.592503832600001e+01 }, { "Nb87", 8.692036110799999e+01 }, { "Nb88", 8.791833216300000e+01 }, - { "Nb89", 8.891341824500000e+01 }, { "Nb90", 8.991126484500001e+01 }, { "Nb91", 9.090699624299999e+01 }, { "Nb92", 9.190719388799999e+01 }, - { "Nb93", 9.290637805800000e+01 }, { "Nb94", 9.390728388799999e+01 }, { "Nb95", 9.490683579200000e+01 }, { "Nb96", 9.590810064700000e+01 }, - { "Nb97", 9.690809855600000e+01 }, { "Nb98", 9.791032841200000e+01 }, { "Nb99", 9.891161837500000e+01 }, { "Nb100", 9.991418161900000e+01 }, - { "Nb101", 1.009152520250000e+02 }, { "Nb102", 1.019180376140000e+02 }, { "Nb103", 1.029191438420000e+02 }, { "Nb104", 1.039224647010000e+02 }, - { "Nb105", 1.049239365450000e+02 }, { "Nb106", 1.059279700000000e+02 }, { "Nb107", 1.069303100000000e+02 }, { "Nb108", 1.079348400000000e+02 }, - { "Nb109", 1.089376300000000e+02 }, { "Nb110", 1.099424400000000e+02 }, { "Nb111", 1.109456500000000e+02 }, { "Nb112", 1.119508300000000e+02 }, - { "Nb113", 1.129547000000000e+02 }, { "Mo_natural", 9.594000000000000e+01 }, { "Mo83", 8.294874000000000e+01 }, { "Mo84", 8.394009000000000e+01 }, - { "Mo85", 8.493655000000000e+01 }, { "Mo86", 8.593069590400000e+01 }, { "Mo87", 8.692732650200000e+01 }, { "Mo88", 8.792195324100000e+01 }, - { "Mo89", 8.891948000900000e+01 }, { "Mo90", 8.991393689600000e+01 }, { "Mo91", 9.091175019400001e+01 }, { "Mo92", 9.190681099100000e+01 }, - { "Mo93", 9.290681261000000e+01 }, { "Mo94", 9.390508826900000e+01 }, { "Mo95", 9.490584212900001e+01 }, { "Mo96", 9.590467947700000e+01 }, - { "Mo97", 9.690602146499999e+01 }, { "Mo98", 9.790540816900000e+01 }, { "Mo99", 9.890771187000000e+01 }, { "Mo100", 9.990747733600000e+01 }, - { "Mo101", 1.009103470010000e+02 }, { "Mo102", 1.019102973600000e+02 }, { "Mo103", 1.029132071420000e+02 }, { "Mo104", 1.039137636250000e+02 }, - { "Mo105", 1.049169746100000e+02 }, { "Mo106", 1.059181368020000e+02 }, { "Mo107", 1.069216926040000e+02 }, { "Mo108", 1.079234530000000e+02 }, - { "Mo109", 1.089278100000000e+02 }, { "Mo110", 1.099297300000000e+02 }, { "Mo111", 1.109344100000000e+02 }, { "Mo112", 1.119368400000000e+02 }, - { "Mo113", 1.129418800000000e+02 }, { "Mo114", 1.139449200000000e+02 }, { "Mo115", 1.149502900000000e+02 }, { "Tc_natural", 9.800000000000000e+01 }, - { "Tc85", 8.494883000000000e+01 }, { "Tc86", 8.594288000000000e+01 }, { "Tc87", 8.693653000000000e+01 }, { "Tc88", 8.793267800000000e+01 }, - { "Tc89", 8.892716700000000e+01 }, { "Tc90", 8.992355656399999e+01 }, { "Tc91", 9.091842763900000e+01 }, { "Tc92", 9.191526016600000e+01 }, - { "Tc93", 9.291024898400001e+01 }, { "Tc94", 9.390965700200000e+01 }, { "Tc95", 9.490765708399999e+01 }, { "Tc96", 9.590787138300000e+01 }, - { "Tc97", 9.690636535800000e+01 }, { "Tc98", 9.790721596600000e+01 }, { "Tc99", 9.890625474700001e+01 }, { "Tc100", 9.990765777999999e+01 }, - { "Tc101", 1.009073146590000e+02 }, { "Tc102", 1.019092150190000e+02 }, { "Tc103", 1.029091813510000e+02 }, { "Tc104", 1.039114474540000e+02 }, - { "Tc105", 1.049116605660000e+02 }, { "Tc106", 1.059143579270000e+02 }, { "Tc107", 1.069150795720000e+02 }, { "Tc108", 1.079184612260000e+02 }, - { "Tc109", 1.089199826650000e+02 }, { "Tc110", 1.099238204830000e+02 }, { "Tc111", 1.109256928300000e+02 }, { "Tc112", 1.119291464930000e+02 }, - { "Tc113", 1.129315900000000e+02 }, { "Tc114", 1.139358800000000e+02 }, { "Tc115", 1.149386900000000e+02 }, { "Tc116", 1.159433700000000e+02 }, - { "Tc117", 1.169464800000000e+02 }, { "Tc118", 1.179514800000000e+02 }, { "Ru_natural", 1.010700000000000e+02 }, { "Ru87", 8.694918000000000e+01 }, - { "Ru88", 8.794025999999999e+01 }, { "Ru89", 8.893611000000000e+01 }, { "Ru90", 8.992989000000000e+01 }, { "Ru91", 9.092629200000000e+01 }, - { "Ru92", 9.192012000000000e+01 }, { "Ru93", 9.291705203399999e+01 }, { "Ru94", 9.391135971100000e+01 }, { "Ru95", 9.491041292900000e+01 }, - { "Ru96", 9.590759783500000e+01 }, { "Ru97", 9.690755470000001e+01 }, { "Ru98", 9.790528713200000e+01 }, { "Ru99", 9.890593930199999e+01 }, - { "Ru100", 9.990421947599999e+01 }, { "Ru101", 1.009055820870000e+02 }, { "Ru102", 1.019043493120000e+02 }, { "Ru103", 1.029063238470000e+02 }, - { "Ru104", 1.039054327010000e+02 }, { "Ru105", 1.049077528660000e+02 }, { "Ru106", 1.059073294330000e+02 }, { "Ru107", 1.069099050890000e+02 }, - { "Ru108", 1.079101734650000e+02 }, { "Ru109", 1.089132032330000e+02 }, { "Ru110", 1.099141360410000e+02 }, { "Ru111", 1.109176960000000e+02 }, - { "Ru112", 1.119189650000000e+02 }, { "Ru113", 1.129224871940000e+02 }, { "Ru114", 1.139242810000000e+02 }, { "Ru115", 1.149286861730000e+02 }, - { "Ru116", 1.159308100000000e+02 }, { "Ru117", 1.169355800000000e+02 }, { "Ru118", 1.179378200000000e+02 }, { "Ru119", 1.189428400000000e+02 }, - { "Ru120", 1.199453100000000e+02 }, { "Rh_natural", 1.029055000000000e+02 }, { "Rh89", 8.894883700000000e+01 }, { "Rh90", 8.994287000000000e+01 }, - { "Rh91", 9.093655000000000e+01 }, { "Rh92", 9.193198000000000e+01 }, { "Rh93", 9.292574000000000e+01 }, { "Rh94", 9.392169800000001e+01 }, - { "Rh95", 9.491589874000000e+01 }, { "Rh96", 9.591446063100000e+01 }, { "Rh97", 9.691133679700000e+01 }, { "Rh98", 9.791070815800001e+01 }, - { "Rh99", 9.890813210400000e+01 }, { "Rh100", 9.990812155000000e+01 }, { "Rh101", 1.009061636250000e+02 }, { "Rh102", 1.019068431960000e+02 }, - { "Rh103", 1.029055042920000e+02 }, { "Rh104", 1.039066555180000e+02 }, { "Rh105", 1.049056938210000e+02 }, { "Rh106", 1.059072871350000e+02 }, - { "Rh107", 1.069067484230000e+02 }, { "Rh108", 1.079087280180000e+02 }, { "Rh109", 1.089087372890000e+02 }, { "Rh110", 1.099111364110000e+02 }, - { "Rh111", 1.109115859130000e+02 }, { "Rh112", 1.119143941590000e+02 }, { "Rh113", 1.129155306270000e+02 }, { "Rh114", 1.139188060000000e+02 }, - { "Rh115", 1.149203340000000e+02 }, { "Rh116", 1.159240620000000e+02 }, { "Rh117", 1.169259800000000e+02 }, { "Rh118", 1.179300700000000e+02 }, - { "Rh119", 1.189321100000000e+02 }, { "Rh120", 1.199364100000000e+02 }, { "Rh121", 1.209387200000000e+02 }, { "Rh122", 1.219432100000000e+02 }, - { "Pd_natural", 1.064000000000000e+02 }, { "Pd91", 9.094911000000000e+01 }, { "Pd92", 9.194042000000000e+01 }, { "Pd93", 9.293591000000001e+01 }, - { "Pd94", 9.392877000000000e+01 }, { "Pd95", 9.492469000000000e+01 }, { "Pd96", 9.591816435900000e+01 }, { "Pd97", 9.691647907300000e+01 }, - { "Pd98", 9.791272090200000e+01 }, { "Pd99", 9.891176783300000e+01 }, { "Pd100", 9.990850588600000e+01 }, { "Pd101", 1.009082892420000e+02 }, - { "Pd102", 1.019056085440000e+02 }, { "Pd103", 1.029060873070000e+02 }, { "Pd104", 1.039040358340000e+02 }, { "Pd105", 1.049050849200000e+02 }, - { "Pd106", 1.059034857150000e+02 }, { "Pd107", 1.069051334810000e+02 }, { "Pd108", 1.079038917010000e+02 }, { "Pd109", 1.089059504510000e+02 }, - { "Pd110", 1.099051532540000e+02 }, { "Pd111", 1.109076707340000e+02 }, { "Pd112", 1.119073140580000e+02 }, { "Pd113", 1.129101529080000e+02 }, - { "Pd114", 1.139103626380000e+02 }, { "Pd115", 1.149136838240000e+02 }, { "Pd116", 1.159141586620000e+02 }, { "Pd117", 1.169178413380000e+02 }, - { "Pd118", 1.179189843000000e+02 }, { "Pd119", 1.189231100000000e+02 }, { "Pd120", 1.199246918780000e+02 }, { "Pd121", 1.209288700000000e+02 }, - { "Pd122", 1.219305500000000e+02 }, { "Pd123", 1.229349300000000e+02 }, { "Pd124", 1.239368800000000e+02 }, { "Ag_natural", 1.078680000000000e+02 }, - { "Ag93", 9.294978000000000e+01 }, { "Ag94", 9.394278000000000e+01 }, { "Ag95", 9.493548000000000e+01 }, { "Ag96", 9.593068000000000e+01 }, - { "Ag97", 9.692397241200000e+01 }, { "Ag98", 9.792156620100000e+01 }, { "Ag99", 9.891759717799999e+01 }, { "Ag100", 9.991610425499999e+01 }, - { "Ag101", 1.009128022330000e+02 }, { "Ag102", 1.019116850000000e+02 }, { "Ag103", 1.029089727200000e+02 }, { "Ag104", 1.039086291570000e+02 }, - { "Ag105", 1.049065286610000e+02 }, { "Ag106", 1.059066689210000e+02 }, { "Ag107", 1.069050968200000e+02 }, { "Ag108", 1.079059555560000e+02 }, - { "Ag109", 1.089047522920000e+02 }, { "Ag110", 1.099061072310000e+02 }, { "Ag111", 1.109052911570000e+02 }, { "Ag112", 1.119070048140000e+02 }, - { "Ag113", 1.129065665790000e+02 }, { "Ag114", 1.139088037040000e+02 }, { "Ag115", 1.149087626980000e+02 }, { "Ag116", 1.159113599330000e+02 }, - { "Ag117", 1.169116845620000e+02 }, { "Ag118", 1.179145827680000e+02 }, { "Ag119", 1.189156650590000e+02 }, { "Ag120", 1.199187873840000e+02 }, - { "Ag121", 1.209198480460000e+02 }, { "Ag122", 1.219235300000000e+02 }, { "Ag123", 1.229249000000000e+02 }, { "Ag124", 1.239286400000000e+02 }, - { "Ag125", 1.249304300000000e+02 }, { "Ag126", 1.259345000000000e+02 }, { "Ag127", 1.269367700000000e+02 }, { "Ag128", 1.279411700000000e+02 }, - { "Ag129", 1.289436900000000e+02 }, { "Ag130", 1.299504480000000e+02 }, { "Cd_natural", 1.124100000000000e+02 }, { "Cd95", 9.494987000000000e+01 }, - { "Cd96", 9.593977000000000e+01 }, { "Cd97", 9.693494000000000e+01 }, { "Cd98", 9.792739554600000e+01 }, { "Cd99", 9.892501000000000e+01 }, - { "Cd100", 9.992028952500000e+01 }, { "Cd101", 1.009186815380000e+02 }, { "Cd102", 1.019144622580000e+02 }, { "Cd103", 1.029134192460000e+02 }, - { "Cd104", 1.039098494750000e+02 }, { "Cd105", 1.049094679050000e+02 }, { "Cd106", 1.059064594100000e+02 }, { "Cd107", 1.069066179280000e+02 }, - { "Cd108", 1.079041836830000e+02 }, { "Cd109", 1.089049822930000e+02 }, { "Cd110", 1.099030020700000e+02 }, { "Cd111", 1.109041781070000e+02 }, - { "Cd112", 1.119027578090000e+02 }, { "Cd113", 1.129044016620000e+02 }, { "Cd114", 1.139033585400000e+02 }, { "Cd115", 1.149054309690000e+02 }, - { "Cd116", 1.159047558090000e+02 }, { "Cd117", 1.169072186180000e+02 }, { "Cd118", 1.179069145300000e+02 }, { "Cd119", 1.189099215970000e+02 }, - { "Cd120", 1.199098501290000e+02 }, { "Cd121", 1.209129773630000e+02 }, { "Cd122", 1.219133324320000e+02 }, { "Cd123", 1.229170029990000e+02 }, - { "Cd124", 1.239176476160000e+02 }, { "Cd125", 1.249212463700000e+02 }, { "Cd126", 1.259223533210000e+02 }, { "Cd127", 1.269264438640000e+02 }, - { "Cd128", 1.279277622850000e+02 }, { "Cd129", 1.289321500000000e+02 }, { "Cd130", 1.299339019370000e+02 }, { "Cd131", 1.309406700000000e+02 }, - { "Cd132", 1.319455500000000e+02 }, { "In_natural", 1.148200000000000e+02 }, { "In97", 9.694954000000000e+01 }, { "In98", 9.794213999999999e+01 }, - { "In99", 9.893422000000000e+01 }, { "In100", 9.993111085100000e+01 }, { "In101", 1.009263400000000e+02 }, { "In102", 1.019240902380000e+02 }, - { "In103", 1.029199141880000e+02 }, { "In104", 1.039182961710000e+02 }, { "In105", 1.049146735400000e+02 }, { "In106", 1.059134654110000e+02 }, - { "In107", 1.069102951000000e+02 }, { "In108", 1.079096981800000e+02 }, { "In109", 1.089071505070000e+02 }, { "In110", 1.099071652740000e+02 }, - { "In111", 1.109051032780000e+02 }, { "In112", 1.119055323310000e+02 }, { "In113", 1.129040577610000e+02 }, { "In114", 1.139049138760000e+02 }, - { "In115", 1.149038784840000e+02 }, { "In116", 1.159052597030000e+02 }, { "In117", 1.169045135640000e+02 }, { "In118", 1.179063543670000e+02 }, - { "In119", 1.189058453500000e+02 }, { "In120", 1.199079596080000e+02 }, { "In121", 1.209078458220000e+02 }, { "In122", 1.219102760100000e+02 }, - { "In123", 1.229104382760000e+02 }, { "In124", 1.239131752310000e+02 }, { "In125", 1.249136005880000e+02 }, { "In126", 1.259164638570000e+02 }, - { "In127", 1.269173530910000e+02 }, { "In128", 1.279201723280000e+02 }, { "In129", 1.289216969800000e+02 }, { "In130", 1.299249700490000e+02 }, - { "In131", 1.309268517670000e+02 }, { "In132", 1.319329902600000e+02 }, { "In133", 1.329378100000000e+02 }, { "In134", 1.339441500000000e+02 }, - { "In135", 1.349493300000000e+02 }, { "Sn_natural", 1.186900000000000e+02 }, { "Sn99", 9.894933000000000e+01 }, { "Sn100", 9.993904434300001e+01 }, - { "Sn101", 1.009360600000000e+02 }, { "Sn102", 1.019302953240000e+02 }, { "Sn103", 1.029281000000000e+02 }, { "Sn104", 1.039231432230000e+02 }, - { "Sn105", 1.049213494370000e+02 }, { "Sn106", 1.059168806200000e+02 }, { "Sn107", 1.069156443290000e+02 }, { "Sn108", 1.079119253780000e+02 }, - { "Sn109", 1.089112832140000e+02 }, { "Sn110", 1.099078427910000e+02 }, { "Sn111", 1.109077344600000e+02 }, { "Sn112", 1.119048182070000e+02 }, - { "Sn113", 1.129051705770000e+02 }, { "Sn114", 1.139027788690000e+02 }, { "Sn115", 1.149033423970000e+02 }, { "Sn116", 1.159017405300000e+02 }, - { "Sn117", 1.169029516560000e+02 }, { "Sn118", 1.179016031670000e+02 }, { "Sn119", 1.189033076300000e+02 }, { "Sn120", 1.199021946760000e+02 }, - { "Sn121", 1.209042354800000e+02 }, { "Sn122", 1.219034390460000e+02 }, { "Sn123", 1.229057208380000e+02 }, { "Sn124", 1.239052739460000e+02 }, - { "Sn125", 1.249077841250000e+02 }, { "Sn126", 1.259076532800000e+02 }, { "Sn127", 1.269103600240000e+02 }, { "Sn128", 1.279105366240000e+02 }, - { "Sn129", 1.289134790000000e+02 }, { "Sn130", 1.299139672950000e+02 }, { "Sn131", 1.309169997690000e+02 }, { "Sn132", 1.319178157130000e+02 }, - { "Sn133", 1.329238292490000e+02 }, { "Sn134", 1.339282917650000e+02 }, { "Sn135", 1.349347300000000e+02 }, { "Sn136", 1.359393400000000e+02 }, - { "Sn137", 1.369459900000000e+02 }, { "Sb_natural", 1.217500000000000e+02 }, { "Sb103", 1.029396900000000e+02 }, { "Sb104", 1.039364720000000e+02 }, - { "Sb105", 1.049314863480000e+02 }, { "Sb106", 1.059287910000000e+02 }, { "Sb107", 1.069241500000000e+02 }, { "Sb108", 1.079221600000000e+02 }, - { "Sb109", 1.089181324260000e+02 }, { "Sb110", 1.099167530000000e+02 }, { "Sb111", 1.109131630000000e+02 }, { "Sb112", 1.119123980090000e+02 }, - { "Sb113", 1.129093716720000e+02 }, { "Sb114", 1.139092690000000e+02 }, { "Sb115", 1.149065980000000e+02 }, { "Sb116", 1.159067936290000e+02 }, - { "Sb117", 1.169048359410000e+02 }, { "Sb118", 1.179055287310000e+02 }, { "Sb119", 1.189039420090000e+02 }, { "Sb120", 1.199050724270000e+02 }, - { "Sb121", 1.209038156860000e+02 }, { "Sb122", 1.219051736510000e+02 }, { "Sb123", 1.229042139700000e+02 }, { "Sb124", 1.239059357430000e+02 }, - { "Sb125", 1.249052538180000e+02 }, { "Sb126", 1.259072474800000e+02 }, { "Sb127", 1.269069236090000e+02 }, { "Sb128", 1.279091690010000e+02 }, - { "Sb129", 1.289091484420000e+02 }, { "Sb130", 1.299116563240000e+02 }, { "Sb131", 1.309119822750000e+02 }, { "Sb132", 1.319144668960000e+02 }, - { "Sb133", 1.329152516300000e+02 }, { "Sb134", 1.339203797440000e+02 }, { "Sb135", 1.349251657710000e+02 }, { "Sb136", 1.359303500000000e+02 }, - { "Sb137", 1.369353100000000e+02 }, { "Sb138", 1.379407900000000e+02 }, { "Sb139", 1.389459800000000e+02 }, { "Te_natural", 1.276000000000000e+02 }, - { "Te105", 1.049436400000000e+02 }, { "Te106", 1.059375042370000e+02 }, { "Te107", 1.069350060000000e+02 }, { "Te108", 1.079294445970000e+02 }, - { "Te109", 1.089274155150000e+02 }, { "Te110", 1.099224073160000e+02 }, { "Te111", 1.109211106920000e+02 }, { "Te112", 1.119170136720000e+02 }, - { "Te113", 1.129158910000000e+02 }, { "Te114", 1.139120890000000e+02 }, { "Te115", 1.149119020000000e+02 }, { "Te116", 1.159084600000000e+02 }, - { "Te117", 1.169086447190000e+02 }, { "Te118", 1.179058275810000e+02 }, { "Te119", 1.189064036450000e+02 }, { "Te120", 1.199040202220000e+02 }, - { "Te121", 1.209049364240000e+02 }, { "Te122", 1.219030438980000e+02 }, { "Te123", 1.229042700290000e+02 }, { "Te124", 1.239028178960000e+02 }, - { "Te125", 1.249044307310000e+02 }, { "Te126", 1.259033116960000e+02 }, { "Te127", 1.269052263360000e+02 }, { "Te128", 1.279044630560000e+02 }, - { "Te129", 1.289065982380000e+02 }, { "Te130", 1.299062243990000e+02 }, { "Te131", 1.309085238640000e+02 }, { "Te132", 1.319085531600000e+02 }, - { "Te133", 1.329109553060000e+02 }, { "Te134", 1.339113687370000e+02 }, { "Te135", 1.349164485920000e+02 }, { "Te136", 1.359201012460000e+02 }, - { "Te137", 1.369253229540000e+02 }, { "Te138", 1.379292200000000e+02 }, { "Te139", 1.389347300000000e+02 }, { "Te140", 1.399388500000000e+02 }, - { "Te141", 1.409446500000000e+02 }, { "Te142", 1.419490800000000e+02 }, { "I_natural", 1.269045000000000e+02 }, { "I108", 1.079434750000000e+02 }, - { "I109", 1.089381494170000e+02 }, { "I110", 1.099352420000000e+02 }, { "I111", 1.109302760000000e+02 }, { "I112", 1.119279700000000e+02 }, - { "I113", 1.129236405830000e+02 }, { "I114", 1.139218500000000e+02 }, { "I115", 1.149180480000000e+02 }, { "I116", 1.159168086330000e+02 }, - { "I117", 1.169136500000000e+02 }, { "I118", 1.179130740000000e+02 }, { "I119", 1.189100740000000e+02 }, { "I120", 1.199100481730000e+02 }, - { "I121", 1.209073668110000e+02 }, { "I122", 1.219075892840000e+02 }, { "I123", 1.229055889650000e+02 }, { "I124", 1.239062098520000e+02 }, - { "I125", 1.249046301640000e+02 }, { "I126", 1.259056241530000e+02 }, { "I127", 1.269044726810000e+02 }, { "I128", 1.279058094430000e+02 }, - { "I129", 1.289049877220000e+02 }, { "I130", 1.299066742470000e+02 }, { "I131", 1.309061246090000e+02 }, { "I132", 1.319079973810000e+02 }, - { "I133", 1.329077969390000e+02 }, { "I134", 1.339097444650000e+02 }, { "I135", 1.349100481210000e+02 }, { "I136", 1.359146539930000e+02 }, - { "I137", 1.369178708400000e+02 }, { "I138", 1.379223495910000e+02 }, { "I139", 1.389260994780000e+02 }, { "I140", 1.399310000000000e+02 }, - { "I141", 1.409350300000000e+02 }, { "I142", 1.419401800000000e+02 }, { "I143", 1.429445600000000e+02 }, { "I144", 1.439499900000000e+02 }, - { "Xe_natural", 1.313000000000000e+02 }, { "Xe110", 1.099442780680000e+02 }, { "Xe111", 1.109416020000000e+02 }, { "Xe112", 1.119356231120000e+02 }, - { "Xe113", 1.129333411740000e+02 }, { "Xe114", 1.139279803060000e+02 }, { "Xe115", 1.149262939200000e+02 }, { "Xe116", 1.159215810870000e+02 }, - { "Xe117", 1.169203587350000e+02 }, { "Xe118", 1.179161786550000e+02 }, { "Xe119", 1.189154106880000e+02 }, { "Xe120", 1.199117842440000e+02 }, - { "Xe121", 1.209114618290000e+02 }, { "Xe122", 1.219083676320000e+02 }, { "Xe123", 1.229084819100000e+02 }, { "Xe124", 1.239058930030000e+02 }, - { "Xe125", 1.249063954640000e+02 }, { "Xe126", 1.259042736340000e+02 }, { "Xe127", 1.269051837230000e+02 }, { "Xe128", 1.279035312750000e+02 }, - { "Xe129", 1.289047794350000e+02 }, { "Xe130", 1.299035080070000e+02 }, { "Xe131", 1.309050823620000e+02 }, { "Xe132", 1.319041534570000e+02 }, - { "Xe133", 1.329059107220000e+02 }, { "Xe134", 1.339053944640000e+02 }, { "Xe135", 1.349072274950000e+02 }, { "Xe136", 1.359072187940000e+02 }, - { "Xe137", 1.369115621250000e+02 }, { "Xe138", 1.379139544750000e+02 }, { "Xe139", 1.389187929360000e+02 }, { "Xe140", 1.399216409430000e+02 }, - { "Xe141", 1.409266480490000e+02 }, { "Xe142", 1.419297095900000e+02 }, { "Xe143", 1.429351100000000e+02 }, { "Xe144", 1.439385100000000e+02 }, - { "Xe145", 1.449440700000000e+02 }, { "Xe146", 1.459477500000000e+02 }, { "Xe147", 1.469535600000000e+02 }, { "Cs_natural", 1.329054000000000e+02 }, - { "Cs112", 1.119503010000000e+02 }, { "Cs113", 1.129444932740000e+02 }, { "Cs114", 1.139414500000000e+02 }, { "Cs115", 1.149359100000000e+02 }, - { "Cs116", 1.159333670000000e+02 }, { "Cs117", 1.169286707010000e+02 }, { "Cs118", 1.179265594940000e+02 }, { "Cs119", 1.189223773040000e+02 }, - { "Cs120", 1.199206772530000e+02 }, { "Cs121", 1.209172292090000e+02 }, { "Cs122", 1.219161134340000e+02 }, { "Cs123", 1.229129960360000e+02 }, - { "Cs124", 1.239122577980000e+02 }, { "Cs125", 1.249097282700000e+02 }, { "Cs126", 1.259094519770000e+02 }, { "Cs127", 1.269074175250000e+02 }, - { "Cs128", 1.279077488660000e+02 }, { "Cs129", 1.289060644260000e+02 }, { "Cs130", 1.299067085520000e+02 }, { "Cs131", 1.309054639260000e+02 }, - { "Cs132", 1.319064342600000e+02 }, { "Cs133", 1.329054519320000e+02 }, { "Cs134", 1.339067184750000e+02 }, { "Cs135", 1.349059770080000e+02 }, - { "Cs136", 1.359073115760000e+02 }, { "Cs137", 1.369070894730000e+02 }, { "Cs138", 1.379110167040000e+02 }, { "Cs139", 1.389133639990000e+02 }, - { "Cs140", 1.399172823540000e+02 }, { "Cs141", 1.409200457520000e+02 }, { "Cs142", 1.419242989270000e+02 }, { "Cs143", 1.429273517500000e+02 }, - { "Cs144", 1.439320769140000e+02 }, { "Cs145", 1.449355261700000e+02 }, { "Cs146", 1.459402894230000e+02 }, { "Cs147", 1.469441550080000e+02 }, - { "Cs148", 1.479492181530000e+02 }, { "Cs149", 1.489529300000000e+02 }, { "Cs150", 1.499581700000000e+02 }, { "Cs151", 1.509621900000000e+02 }, - { "Ba_natural", 1.373300000000000e+02 }, { "Ba114", 1.139506754050000e+02 }, { "Ba115", 1.149473700000000e+02 }, { "Ba116", 1.159413800000000e+02 }, - { "Ba117", 1.169384990000000e+02 }, { "Ba118", 1.179330400000000e+02 }, { "Ba119", 1.189306596610000e+02 }, { "Ba120", 1.199260449740000e+02 }, - { "Ba121", 1.209240544990000e+02 }, { "Ba122", 1.219199040000000e+02 }, { "Ba123", 1.229187810360000e+02 }, { "Ba124", 1.239150936030000e+02 }, - { "Ba125", 1.249144729120000e+02 }, { "Ba126", 1.259112501770000e+02 }, { "Ba127", 1.269110937970000e+02 }, { "Ba128", 1.279083176980000e+02 }, - { "Ba129", 1.289086794390000e+02 }, { "Ba130", 1.299063208110000e+02 }, { "Ba131", 1.309069411180000e+02 }, { "Ba132", 1.319050612880000e+02 }, - { "Ba133", 1.329060074900000e+02 }, { "Ba134", 1.339045083830000e+02 }, { "Ba135", 1.349056885910000e+02 }, { "Ba136", 1.359045759450000e+02 }, - { "Ba137", 1.369058273840000e+02 }, { "Ba138", 1.379052472370000e+02 }, { "Ba139", 1.389088413410000e+02 }, { "Ba140", 1.399106045050000e+02 }, - { "Ba141", 1.409144110090000e+02 }, { "Ba142", 1.419164534100000e+02 }, { "Ba143", 1.429206267190000e+02 }, { "Ba144", 1.439229528530000e+02 }, - { "Ba145", 1.449276270320000e+02 }, { "Ba146", 1.459302195720000e+02 }, { "Ba147", 1.469349450000000e+02 }, { "Ba148", 1.479377200470000e+02 }, - { "Ba149", 1.489425800000000e+02 }, { "Ba150", 1.499456800000000e+02 }, { "Ba151", 1.509508100000000e+02 }, { "Ba152", 1.519542700000000e+02 }, - { "Ba153", 1.529596100000000e+02 }, { "La_natural", 1.389055000000000e+02 }, { "La117", 1.169500680000000e+02 }, { "La118", 1.179467300000000e+02 }, - { "La119", 1.189409900000000e+02 }, { "La120", 1.199380700000000e+02 }, { "La121", 1.209330100000000e+02 }, { "La122", 1.219307100000000e+02 }, - { "La123", 1.229262400000000e+02 }, { "La124", 1.239245742750000e+02 }, { "La125", 1.249208160340000e+02 }, { "La126", 1.259195126670000e+02 }, - { "La127", 1.269163754480000e+02 }, { "La128", 1.279155851770000e+02 }, { "La129", 1.289126928150000e+02 }, { "La130", 1.299123687240000e+02 }, - { "La131", 1.309100700000000e+02 }, { "La132", 1.319101011450000e+02 }, { "La133", 1.329082180000000e+02 }, { "La134", 1.339085140110000e+02 }, - { "La135", 1.349069768440000e+02 }, { "La136", 1.359076355360000e+02 }, { "La137", 1.369064935980000e+02 }, { "La138", 1.379071119300000e+02 }, - { "La139", 1.389063532670000e+02 }, { "La140", 1.399094776450000e+02 }, { "La141", 1.409109621520000e+02 }, { "La142", 1.419140791300000e+02 }, - { "La143", 1.429160627200000e+02 }, { "La144", 1.439195996470000e+02 }, { "La145", 1.449216454010000e+02 }, { "La146", 1.459257934600000e+02 }, - { "La147", 1.469282352840000e+02 }, { "La148", 1.479322288680000e+02 }, { "La149", 1.489347340000000e+02 }, { "La150", 1.499387700000000e+02 }, - { "La151", 1.509417200000000e+02 }, { "La152", 1.519462500000000e+02 }, { "La153", 1.529496200000000e+02 }, { "La154", 1.539545000000000e+02 }, - { "La155", 1.549583500000000e+02 }, { "Ce_natural", 1.401200000000000e+02 }, { "Ce119", 1.189527600000000e+02 }, { "Ce120", 1.199466400000000e+02 }, - { "Ce121", 1.209434200000000e+02 }, { "Ce122", 1.219379100000000e+02 }, { "Ce123", 1.229354000000000e+02 }, { "Ce124", 1.239304100000000e+02 }, - { "Ce125", 1.249284400000000e+02 }, { "Ce126", 1.259239710000000e+02 }, { "Ce127", 1.269227310000000e+02 }, { "Ce128", 1.279189110000000e+02 }, - { "Ce129", 1.289181020000000e+02 }, { "Ce130", 1.299147360000000e+02 }, { "Ce131", 1.309144220000000e+02 }, { "Ce132", 1.319114604870000e+02 }, - { "Ce133", 1.329115150200000e+02 }, { "Ce134", 1.339089248210000e+02 }, { "Ce135", 1.349091513960000e+02 }, { "Ce136", 1.359071724220000e+02 }, - { "Ce137", 1.369078055770000e+02 }, { "Ce138", 1.379059913210000e+02 }, { "Ce139", 1.389066526510000e+02 }, { "Ce140", 1.399054387060000e+02 }, - { "Ce141", 1.409082762700000e+02 }, { "Ce142", 1.419092442050000e+02 }, { "Ce143", 1.429123859100000e+02 }, { "Ce144", 1.439136473360000e+02 }, - { "Ce145", 1.449172331350000e+02 }, { "Ce146", 1.459187590090000e+02 }, { "Ce147", 1.469226739540000e+02 }, { "Ce148", 1.479244324100000e+02 }, - { "Ce149", 1.489283998830000e+02 }, { "Ce150", 1.499304089310000e+02 }, { "Ce151", 1.509339761960000e+02 }, { "Ce152", 1.519365400000000e+02 }, - { "Ce153", 1.529405800000000e+02 }, { "Ce154", 1.539434200000000e+02 }, { "Ce155", 1.549480400000000e+02 }, { "Ce156", 1.559512600000000e+02 }, - { "Ce157", 1.569563400000000e+02 }, { "Pr_natural", 1.409077000000000e+02 }, { "Pr121", 1.209553640000000e+02 }, { "Pr122", 1.219518100000000e+02 }, - { "Pr123", 1.229459600000000e+02 }, { "Pr124", 1.239429600000000e+02 }, { "Pr125", 1.249378300000000e+02 }, { "Pr126", 1.259353100000000e+02 }, - { "Pr127", 1.269308300000000e+02 }, { "Pr128", 1.279287910000000e+02 }, { "Pr129", 1.289250950000000e+02 }, { "Pr130", 1.299235900000000e+02 }, - { "Pr131", 1.309202590000000e+02 }, { "Pr132", 1.319192550000000e+02 }, { "Pr133", 1.329163305320000e+02 }, { "Pr134", 1.339157117370000e+02 }, - { "Pr135", 1.349131117450000e+02 }, { "Pr136", 1.359126916110000e+02 }, { "Pr137", 1.369107054550000e+02 }, { "Pr138", 1.379107546360000e+02 }, - { "Pr139", 1.389089383990000e+02 }, { "Pr140", 1.399090758740000e+02 }, { "Pr141", 1.409076527690000e+02 }, { "Pr142", 1.419100448060000e+02 }, - { "Pr143", 1.429108169260000e+02 }, { "Pr144", 1.439133052450000e+02 }, { "Pr145", 1.449145117000000e+02 }, { "Pr146", 1.459176443360000e+02 }, - { "Pr147", 1.469189959920000e+02 }, { "Pr148", 1.479221350260000e+02 }, { "Pr149", 1.489237176510000e+02 }, { "Pr150", 1.499266729970000e+02 }, - { "Pr151", 1.509283186180000e+02 }, { "Pr152", 1.519314992250000e+02 }, { "Pr153", 1.529338389050000e+02 }, { "Pr154", 1.539375181530000e+02 }, - { "Pr155", 1.549401200000000e+02 }, { "Pr156", 1.559442700000000e+02 }, { "Pr157", 1.569474300000000e+02 }, { "Pr158", 1.579519800000000e+02 }, - { "Pr159", 1.589555000000000e+02 }, { "Nd_natural", 1.442400000000000e+02 }, { "Nd124", 1.239522300000000e+02 }, { "Nd125", 1.249488800000000e+02 }, - { "Nd126", 1.259432200000000e+02 }, { "Nd127", 1.269405000000000e+02 }, { "Nd128", 1.279353900000000e+02 }, { "Nd129", 1.289331880000000e+02 }, - { "Nd130", 1.299285060000000e+02 }, { "Nd131", 1.309272470000000e+02 }, { "Nd132", 1.319233212370000e+02 }, { "Nd133", 1.329223480000000e+02 }, - { "Nd134", 1.339187901810000e+02 }, { "Nd135", 1.349181811600000e+02 }, { "Nd136", 1.359149760350000e+02 }, { "Nd137", 1.369145671370000e+02 }, - { "Nd138", 1.379119499610000e+02 }, { "Nd139", 1.389119782880000e+02 }, { "Nd140", 1.399095520000000e+02 }, { "Nd141", 1.409096098540000e+02 }, - { "Nd142", 1.419077232970000e+02 }, { "Nd143", 1.429098142900000e+02 }, { "Nd144", 1.439100872740000e+02 }, { "Nd145", 1.449125736360000e+02 }, - { "Nd146", 1.459131169390000e+02 }, { "Nd147", 1.469161004410000e+02 }, { "Nd148", 1.479168932880000e+02 }, { "Nd149", 1.489201488420000e+02 }, - { "Nd150", 1.499208908880000e+02 }, { "Nd151", 1.509238289290000e+02 }, { "Nd152", 1.519246822190000e+02 }, { "Nd153", 1.529276982320000e+02 }, - { "Nd154", 1.539294773070000e+02 }, { "Nd155", 1.549329320000000e+02 }, { "Nd156", 1.559350181140000e+02 }, { "Nd157", 1.569390300000000e+02 }, - { "Nd158", 1.579416000000000e+02 }, { "Nd159", 1.589460900000000e+02 }, { "Nd160", 1.599490900000000e+02 }, { "Nd161", 1.609538800000000e+02 }, - { "Pm_natural", 1.450000000000000e+02 }, { "Pm126", 1.259575200000000e+02 }, { "Pm127", 1.269516300000000e+02 }, { "Pm128", 1.279484200000000e+02 }, - { "Pm129", 1.289431600000000e+02 }, { "Pm130", 1.299404500000000e+02 }, { "Pm131", 1.309358700000000e+02 }, { "Pm132", 1.319337500000000e+02 }, - { "Pm133", 1.329297820000000e+02 }, { "Pm134", 1.339283530000000e+02 }, { "Pm135", 1.349248760000000e+02 }, { "Pm136", 1.359235658290000e+02 }, - { "Pm137", 1.369204794930000e+02 }, { "Pm138", 1.379195482810000e+02 }, { "Pm139", 1.389168040820000e+02 }, { "Pm140", 1.399160417890000e+02 }, - { "Pm141", 1.409135550540000e+02 }, { "Pm142", 1.419128744710000e+02 }, { "Pm143", 1.429109326160000e+02 }, { "Pm144", 1.439125908430000e+02 }, - { "Pm145", 1.449127490230000e+02 }, { "Pm146", 1.459146963050000e+02 }, { "Pm147", 1.469151385450000e+02 }, { "Pm148", 1.479174746180000e+02 }, - { "Pm149", 1.489183341550000e+02 }, { "Pm150", 1.499209835610000e+02 }, { "Pm151", 1.509212069730000e+02 }, { "Pm152", 1.519234967950000e+02 }, - { "Pm153", 1.529241168890000e+02 }, { "Pm154", 1.539264639430000e+02 }, { "Pm155", 1.549281012670000e+02 }, { "Pm156", 1.559310567360000e+02 }, - { "Pm157", 1.569330393690000e+02 }, { "Pm158", 1.579365614070000e+02 }, { "Pm159", 1.589389700000000e+02 }, { "Pm160", 1.599429900000000e+02 }, - { "Pm161", 1.609458600000000e+02 }, { "Pm162", 1.619502900000000e+02 }, { "Pm163", 1.629536800000000e+02 }, { "Sm_natural", 1.504000000000000e+02 }, - { "Sm128", 1.279580800000000e+02 }, { "Sm129", 1.289546400000000e+02 }, { "Sm130", 1.299489200000000e+02 }, { "Sm131", 1.309461100000000e+02 }, - { "Sm132", 1.319406900000000e+02 }, { "Sm133", 1.329386700000000e+02 }, { "Sm134", 1.339339700000000e+02 }, { "Sm135", 1.349325200000000e+02 }, - { "Sm136", 1.359282755270000e+02 }, { "Sm137", 1.369269717460000e+02 }, { "Sm138", 1.379232439610000e+02 }, { "Sm139", 1.389222966050000e+02 }, - { "Sm140", 1.399189946870000e+02 }, { "Sm141", 1.409184764880000e+02 }, { "Sm142", 1.419151976410000e+02 }, { "Sm143", 1.429146283380000e+02 }, - { "Sm144", 1.439119994780000e+02 }, { "Sm145", 1.449134103530000e+02 }, { "Sm146", 1.459130409000000e+02 }, { "Sm147", 1.469148979230000e+02 }, - { "Sm148", 1.479148226740000e+02 }, { "Sm149", 1.489171847350000e+02 }, { "Sm150", 1.499172755390000e+02 }, { "Sm151", 1.509199324090000e+02 }, - { "Sm152", 1.519197324250000e+02 }, { "Sm153", 1.529220973560000e+02 }, { "Sm154", 1.539222092730000e+02 }, { "Sm155", 1.549246401610000e+02 }, - { "Sm156", 1.559255278870000e+02 }, { "Sm157", 1.569283587170000e+02 }, { "Sm158", 1.579299913170000e+02 }, { "Sm159", 1.589332112710000e+02 }, - { "Sm160", 1.599351400000000e+02 }, { "Sm161", 1.609388300000000e+02 }, { "Sm162", 1.619412200000000e+02 }, { "Sm163", 1.629453600000000e+02 }, - { "Sm164", 1.639482800000000e+02 }, { "Sm165", 1.649529800000000e+02 }, { "Eu_natural", 1.519600000000000e+02 }, { "Eu130", 1.299635690000000e+02 }, - { "Eu131", 1.309577530000000e+02 }, { "Eu132", 1.319543700000000e+02 }, { "Eu133", 1.329492400000000e+02 }, { "Eu134", 1.339465100000000e+02 }, - { "Eu135", 1.349418200000000e+02 }, { "Eu136", 1.359396000000000e+02 }, { "Eu137", 1.369355700000000e+02 }, { "Eu138", 1.379337090000000e+02 }, - { "Eu139", 1.389297922800000e+02 }, { "Eu140", 1.399280876070000e+02 }, { "Eu141", 1.409249307200000e+02 }, { "Eu142", 1.419234349450000e+02 }, - { "Eu143", 1.429202975090000e+02 }, { "Eu144", 1.439188168230000e+02 }, { "Eu145", 1.449162652370000e+02 }, { "Eu146", 1.459172058170000e+02 }, - { "Eu147", 1.469167461110000e+02 }, { "Eu148", 1.479180858950000e+02 }, { "Eu149", 1.489179312380000e+02 }, { "Eu150", 1.499197018190000e+02 }, - { "Eu151", 1.509198501610000e+02 }, { "Eu152", 1.519217445340000e+02 }, { "Eu153", 1.529212303390000e+02 }, { "Eu154", 1.539229792370000e+02 }, - { "Eu155", 1.549228932600000e+02 }, { "Eu156", 1.559247522490000e+02 }, { "Eu157", 1.569254236470000e+02 }, { "Eu158", 1.579278453020000e+02 }, - { "Eu159", 1.589290888610000e+02 }, { "Eu160", 1.599319710000000e+02 }, { "Eu161", 1.609336800000000e+02 }, { "Eu162", 1.619370400000000e+02 }, - { "Eu163", 1.629392100000000e+02 }, { "Eu164", 1.639429900000000e+02 }, { "Eu165", 1.649457200000000e+02 }, { "Eu166", 1.659499700000000e+02 }, - { "Eu167", 1.669532100000000e+02 }, { "Gd_natural", 1.572500000000000e+02 }, { "Gd134", 1.339553700000000e+02 }, { "Gd135", 1.349525700000000e+02 }, - { "Gd136", 1.359473400000000e+02 }, { "Gd137", 1.369450200000000e+02 }, { "Gd138", 1.379401200000000e+02 }, { "Gd139", 1.389382400000000e+02 }, - { "Gd140", 1.399336740000000e+02 }, { "Gd141", 1.409321260000000e+02 }, { "Gd142", 1.419281160000000e+02 }, { "Gd143", 1.429267495100000e+02 }, - { "Gd144", 1.439229630000000e+02 }, { "Gd145", 1.449217092520000e+02 }, { "Gd146", 1.459183106080000e+02 }, { "Gd147", 1.469190944200000e+02 }, - { "Gd148", 1.479181145240000e+02 }, { "Gd149", 1.489193409150000e+02 }, { "Gd150", 1.499186588760000e+02 }, { "Gd151", 1.509203484820000e+02 }, - { "Gd152", 1.519197909960000e+02 }, { "Gd153", 1.529217495430000e+02 }, { "Gd154", 1.539208655980000e+02 }, { "Gd155", 1.549226220220000e+02 }, - { "Gd156", 1.559221227430000e+02 }, { "Gd157", 1.569239601350000e+02 }, { "Gd158", 1.579241039120000e+02 }, { "Gd159", 1.589263886580000e+02 }, - { "Gd160", 1.599270541460000e+02 }, { "Gd161", 1.609296692110000e+02 }, { "Gd162", 1.619309847510000e+02 }, { "Gd163", 1.629339900000000e+02 }, - { "Gd164", 1.639358600000000e+02 }, { "Gd165", 1.649393800000000e+02 }, { "Gd166", 1.659416000000000e+02 }, { "Gd167", 1.669455700000000e+02 }, - { "Gd168", 1.679483600000000e+02 }, { "Gd169", 1.689528700000000e+02 }, { "Tb_natural", 1.589254000000000e+02 }, { "Tb136", 1.359613800000000e+02 }, - { "Tb137", 1.369559800000000e+02 }, { "Tb138", 1.379531600000000e+02 }, { "Tb139", 1.389482900000000e+02 }, { "Tb140", 1.399458050490000e+02 }, - { "Tb141", 1.409414480000000e+02 }, { "Tb142", 1.419387440000000e+02 }, { "Tb143", 1.429351210000000e+02 }, { "Tb144", 1.439330450000000e+02 }, - { "Tb145", 1.449292740000000e+02 }, { "Tb146", 1.459272465840000e+02 }, { "Tb147", 1.469240445850000e+02 }, { "Tb148", 1.479242717010000e+02 }, - { "Tb149", 1.489232459090000e+02 }, { "Tb150", 1.499236596860000e+02 }, { "Tb151", 1.509231025430000e+02 }, { "Tb152", 1.519240744380000e+02 }, - { "Tb153", 1.529234345880000e+02 }, { "Tb154", 1.539246780190000e+02 }, { "Tb155", 1.549235052360000e+02 }, { "Tb156", 1.559247472130000e+02 }, - { "Tb157", 1.569240246040000e+02 }, { "Tb158", 1.579254131370000e+02 }, { "Tb159", 1.589253467570000e+02 }, { "Tb160", 1.599271676060000e+02 }, - { "Tb161", 1.609275699190000e+02 }, { "Tb162", 1.619294882340000e+02 }, { "Tb163", 1.629306475360000e+02 }, { "Tb164", 1.639333508380000e+02 }, - { "Tb165", 1.649348800000000e+02 }, { "Tb166", 1.659379919590000e+02 }, { "Tb167", 1.669400500000000e+02 }, { "Tb168", 1.679436400000000e+02 }, - { "Tb169", 1.689462200000000e+02 }, { "Tb170", 1.699502500000000e+02 }, { "Tb171", 1.709533000000000e+02 }, { "Dy_natural", 1.625000000000000e+02 }, - { "Dy138", 1.379624900000000e+02 }, { "Dy139", 1.389595400000000e+02 }, { "Dy140", 1.399540100000000e+02 }, { "Dy141", 1.409513500000000e+02 }, - { "Dy142", 1.419463660000000e+02 }, { "Dy143", 1.429438300000000e+02 }, { "Dy144", 1.439392540000000e+02 }, { "Dy145", 1.449374250000000e+02 }, - { "Dy146", 1.459328453690000e+02 }, { "Dy147", 1.469310915000000e+02 }, { "Dy148", 1.479271498310000e+02 }, { "Dy149", 1.489273047870000e+02 }, - { "Dy150", 1.499255851840000e+02 }, { "Dy151", 1.509261846010000e+02 }, { "Dy152", 1.519247183000000e+02 }, { "Dy153", 1.529257646700000e+02 }, - { "Dy154", 1.539244244570000e+02 }, { "Dy155", 1.549257537750000e+02 }, { "Dy156", 1.559242831100000e+02 }, { "Dy157", 1.569254660950000e+02 }, - { "Dy158", 1.579244094870000e+02 }, { "Dy159", 1.589257392140000e+02 }, { "Dy160", 1.599251975170000e+02 }, { "Dy161", 1.609269333640000e+02 }, - { "Dy162", 1.619267984470000e+02 }, { "Dy163", 1.629287311590000e+02 }, { "Dy164", 1.639291747510000e+02 }, { "Dy165", 1.649317033330000e+02 }, - { "Dy166", 1.659328067410000e+02 }, { "Dy167", 1.669356554620000e+02 }, { "Dy168", 1.679371287690000e+02 }, { "Dy169", 1.689403076140000e+02 }, - { "Dy170", 1.699423900000000e+02 }, { "Dy171", 1.709462000000000e+02 }, { "Dy172", 1.719487600000000e+02 }, { "Dy173", 1.729530000000000e+02 }, - { "Ho_natural", 1.649304000000000e+02 }, { "Ho140", 1.399685390000000e+02 }, { "Ho141", 1.409630980000000e+02 }, { "Ho142", 1.419597700000000e+02 }, - { "Ho143", 1.429546100000000e+02 }, { "Ho144", 1.439514800000000e+02 }, { "Ho145", 1.449472000000000e+02 }, { "Ho146", 1.459446400000000e+02 }, - { "Ho147", 1.469400560000000e+02 }, { "Ho148", 1.479377180000000e+02 }, { "Ho149", 1.489337747710000e+02 }, { "Ho150", 1.499334961820000e+02 }, - { "Ho151", 1.509316881420000e+02 }, { "Ho152", 1.519317137140000e+02 }, { "Ho153", 1.529301987890000e+02 }, { "Ho154", 1.539306015790000e+02 }, - { "Ho155", 1.549291034910000e+02 }, { "Ho156", 1.559298390000000e+02 }, { "Ho157", 1.569282561880000e+02 }, { "Ho158", 1.579289410070000e+02 }, - { "Ho159", 1.589277119590000e+02 }, { "Ho160", 1.599287294780000e+02 }, { "Ho161", 1.609278547760000e+02 }, { "Ho162", 1.619290955040000e+02 }, - { "Ho163", 1.629287339030000e+02 }, { "Ho164", 1.639302335070000e+02 }, { "Ho165", 1.649303220700000e+02 }, { "Ho166", 1.659322841620000e+02 }, - { "Ho167", 1.669331326330000e+02 }, { "Ho168", 1.679355157080000e+02 }, { "Ho169", 1.689368722730000e+02 }, { "Ho170", 1.699396189290000e+02 }, - { "Ho171", 1.709414651500000e+02 }, { "Ho172", 1.719448200000000e+02 }, { "Ho173", 1.729472900000000e+02 }, { "Ho174", 1.739511500000000e+02 }, - { "Ho175", 1.749540500000000e+02 }, { "Er_natural", 1.672600000000000e+02 }, { "Er143", 1.429663400000000e+02 }, { "Er144", 1.439603800000000e+02 }, - { "Er145", 1.449573900000000e+02 }, { "Er146", 1.459520000000000e+02 }, { "Er147", 1.469494900000000e+02 }, { "Er148", 1.479445500000000e+02 }, - { "Er149", 1.489423060000000e+02 }, { "Er150", 1.499379138390000e+02 }, { "Er151", 1.509374489030000e+02 }, { "Er152", 1.519350503890000e+02 }, - { "Er153", 1.529350634920000e+02 }, { "Er154", 1.539327830810000e+02 }, { "Er155", 1.549332089490000e+02 }, { "Er156", 1.559310646980000e+02 }, - { "Er157", 1.569319160000000e+02 }, { "Er158", 1.579298934740000e+02 }, { "Er159", 1.589306840660000e+02 }, { "Er160", 1.599290832920000e+02 }, - { "Er161", 1.609299953090000e+02 }, { "Er162", 1.619287782640000e+02 }, { "Er163", 1.629300327490000e+02 }, { "Er164", 1.639292002290000e+02 }, - { "Er165", 1.649307260030000e+02 }, { "Er166", 1.659302930610000e+02 }, { "Er167", 1.669320481590000e+02 }, { "Er168", 1.679323702240000e+02 }, - { "Er169", 1.689345903640000e+02 }, { "Er170", 1.699354643120000e+02 }, { "Er171", 1.709380298080000e+02 }, { "Er172", 1.719393561130000e+02 }, - { "Er173", 1.729424000000000e+02 }, { "Er174", 1.739442300000000e+02 }, { "Er175", 1.749477700000000e+02 }, { "Er176", 1.759500800000000e+02 }, - { "Er177", 1.769540500000000e+02 }, { "Tm_natural", 1.689342000000000e+02 }, { "Tm145", 1.449700730000000e+02 }, { "Tm146", 1.459664250000000e+02 }, - { "Tm147", 1.469609610000000e+02 }, { "Tm148", 1.479578400000000e+02 }, { "Tm149", 1.489527200000000e+02 }, { "Tm150", 1.499499600000000e+02 }, - { "Tm151", 1.509454834900000e+02 }, { "Tm152", 1.519444220000000e+02 }, { "Tm153", 1.529420121120000e+02 }, { "Tm154", 1.539415678080000e+02 }, - { "Tm155", 1.549391994590000e+02 }, { "Tm156", 1.559389799330000e+02 }, { "Tm157", 1.569369730000000e+02 }, { "Tm158", 1.579369795250000e+02 }, - { "Tm159", 1.589349750000000e+02 }, { "Tm160", 1.599352628010000e+02 }, { "Tm161", 1.609335490000000e+02 }, { "Tm162", 1.619339946820000e+02 }, - { "Tm163", 1.629326511240000e+02 }, { "Tm164", 1.639335600000000e+02 }, { "Tm165", 1.649324354920000e+02 }, { "Tm166", 1.659335541310000e+02 }, - { "Tm167", 1.669328516220000e+02 }, { "Tm168", 1.679341727760000e+02 }, { "Tm169", 1.689342132500000e+02 }, { "Tm170", 1.699358013970000e+02 }, - { "Tm171", 1.709364294400000e+02 }, { "Tm172", 1.719384000440000e+02 }, { "Tm173", 1.729396036070000e+02 }, { "Tm174", 1.739421686050000e+02 }, - { "Tm175", 1.749438368530000e+02 }, { "Tm176", 1.759469946850000e+02 }, { "Tm177", 1.769490400000000e+02 }, { "Tm178", 1.779526400000000e+02 }, - { "Tm179", 1.789553400000000e+02 }, { "Yb_natural", 1.730400000000000e+02 }, { "Yb148", 1.479674200000000e+02 }, { "Yb149", 1.489640400000000e+02 }, - { "Yb150", 1.499584200000000e+02 }, { "Yb151", 1.509554007690000e+02 }, { "Yb152", 1.519502889190000e+02 }, { "Yb153", 1.529494800000000e+02 }, - { "Yb154", 1.539463939280000e+02 }, { "Yb155", 1.549457823320000e+02 }, { "Yb156", 1.559428182150000e+02 }, { "Yb157", 1.569426278480000e+02 }, - { "Yb158", 1.579398656170000e+02 }, { "Yb159", 1.589400500990000e+02 }, { "Yb160", 1.599375523440000e+02 }, { "Yb161", 1.609379016780000e+02 }, - { "Yb162", 1.619357682100000e+02 }, { "Yb163", 1.629363343050000e+02 }, { "Yb164", 1.639344894160000e+02 }, { "Yb165", 1.649352790000000e+02 }, - { "Yb166", 1.659338820420000e+02 }, { "Yb167", 1.669349496050000e+02 }, { "Yb168", 1.679338968950000e+02 }, { "Yb169", 1.689351898020000e+02 }, - { "Yb170", 1.699347618370000e+02 }, { "Yb171", 1.709363257990000e+02 }, { "Yb172", 1.719363814690000e+02 }, { "Yb173", 1.729382107870000e+02 }, - { "Yb174", 1.739388620890000e+02 }, { "Yb175", 1.749412764500000e+02 }, { "Yb176", 1.759425716830000e+02 }, { "Yb177", 1.769452608220000e+02 }, - { "Yb178", 1.779466466800000e+02 }, { "Yb179", 1.789501700000000e+02 }, { "Yb180", 1.799523300000000e+02 }, { "Yb181", 1.809561500000000e+02 }, - { "Lu_natural", 1.749670000000000e+02 }, { "Lu150", 1.499732280000000e+02 }, { "Lu151", 1.509675770000000e+02 }, { "Lu152", 1.519641200000000e+02 }, - { "Lu153", 1.529587673310000e+02 }, { "Lu154", 1.539575220000000e+02 }, { "Lu155", 1.549543162160000e+02 }, { "Lu156", 1.559530325230000e+02 }, - { "Lu157", 1.569500983000000e+02 }, { "Lu158", 1.579493132830000e+02 }, { "Lu159", 1.589466287760000e+02 }, { "Lu160", 1.599460330000000e+02 }, - { "Lu161", 1.609435720000000e+02 }, { "Lu162", 1.619432772880000e+02 }, { "Lu163", 1.629411790000000e+02 }, { "Lu164", 1.639413390000000e+02 }, - { "Lu165", 1.649394067240000e+02 }, { "Lu166", 1.659398590000000e+02 }, { "Lu167", 1.669382700000000e+02 }, { "Lu168", 1.679387391110000e+02 }, - { "Lu169", 1.689376514390000e+02 }, { "Lu170", 1.699384749680000e+02 }, { "Lu171", 1.709379131360000e+02 }, { "Lu172", 1.719390856690000e+02 }, - { "Lu173", 1.729389306020000e+02 }, { "Lu174", 1.739403374800000e+02 }, { "Lu175", 1.749407718190000e+02 }, { "Lu176", 1.759426863100000e+02 }, - { "Lu177", 1.769437580550000e+02 }, { "Lu178", 1.779459545590000e+02 }, { "Lu179", 1.789473274430000e+02 }, { "Lu180", 1.799498811600000e+02 }, - { "Lu181", 1.809519700000000e+02 }, { "Lu182", 1.819550400000000e+02 }, { "Lu183", 1.829575700000000e+02 }, { "Lu184", 1.839609100000000e+02 }, - { "Hf_natural", 1.784900000000000e+02 }, { "Hf153", 1.529706900000000e+02 }, { "Hf154", 1.539648600000000e+02 }, { "Hf155", 1.549633900000000e+02 }, - { "Hf156", 1.559593640250000e+02 }, { "Hf157", 1.569583960000000e+02 }, { "Hf158", 1.579547993660000e+02 }, { "Hf159", 1.589539948700000e+02 }, - { "Hf160", 1.599506843790000e+02 }, { "Hf161", 1.609502748440000e+02 }, { "Hf162", 1.619472104980000e+02 }, { "Hf163", 1.629470890000000e+02 }, - { "Hf164", 1.639443672840000e+02 }, { "Hf165", 1.649445670000000e+02 }, { "Hf166", 1.659421800000000e+02 }, { "Hf167", 1.669426000000000e+02 }, - { "Hf168", 1.679405680000000e+02 }, { "Hf169", 1.689412590000000e+02 }, { "Hf170", 1.699396090000000e+02 }, { "Hf171", 1.709404920000000e+02 }, - { "Hf172", 1.719394483010000e+02 }, { "Hf173", 1.729405130000000e+02 }, { "Hf174", 1.739400461780000e+02 }, { "Hf175", 1.749415091810000e+02 }, - { "Hf176", 1.759414086310000e+02 }, { "Hf177", 1.769432206510000e+02 }, { "Hf178", 1.779436987660000e+02 }, { "Hf179", 1.789458161450000e+02 }, - { "Hf180", 1.799465499530000e+02 }, { "Hf181", 1.809491012460000e+02 }, { "Hf182", 1.819505540960000e+02 }, { "Hf183", 1.829535304390000e+02 }, - { "Hf184", 1.839554465150000e+02 }, { "Hf185", 1.849588200000000e+02 }, { "Hf186", 1.859608900000000e+02 }, { "Hf187", 1.869645900000000e+02 }, - { "Hf188", 1.879668500000000e+02 }, { "Ta_natural", 1.809479000000000e+02 }, { "Ta155", 1.549745920000000e+02 }, { "Ta156", 1.559723030000000e+02 }, - { "Ta157", 1.569681924450000e+02 }, { "Ta158", 1.579666990000000e+02 }, { "Ta159", 1.589630181730000e+02 }, { "Ta160", 1.599614860560000e+02 }, - { "Ta161", 1.609584170000000e+02 }, { "Ta162", 1.619572918590000e+02 }, { "Ta163", 1.629543302710000e+02 }, { "Ta164", 1.639535340000000e+02 }, - { "Ta165", 1.649507725140000e+02 }, { "Ta166", 1.659505120000000e+02 }, { "Ta167", 1.669480930000000e+02 }, { "Ta168", 1.679480470000000e+02 }, - { "Ta169", 1.689460110000000e+02 }, { "Ta170", 1.699461750000000e+02 }, { "Ta171", 1.709444760000000e+02 }, { "Ta172", 1.719448950000000e+02 }, - { "Ta173", 1.729437500000000e+02 }, { "Ta174", 1.739444540000000e+02 }, { "Ta175", 1.749437370000000e+02 }, { "Ta176", 1.759448570000000e+02 }, - { "Ta177", 1.769444724030000e+02 }, { "Ta178", 1.779457782210000e+02 }, { "Ta179", 1.789459295350000e+02 }, { "Ta180", 1.799474648310000e+02 }, - { "Ta181", 1.809479957630000e+02 }, { "Ta182", 1.819501518490000e+02 }, { "Ta183", 1.829513726160000e+02 }, { "Ta184", 1.839540079660000e+02 }, - { "Ta185", 1.849555593750000e+02 }, { "Ta186", 1.859585520230000e+02 }, { "Ta187", 1.869605300000000e+02 }, { "Ta188", 1.879637000000000e+02 }, - { "Ta189", 1.889658300000000e+02 }, { "Ta190", 1.899692300000000e+02 }, { "W_natural", 1.838500000000000e+02 }, { "W158", 1.579745620000000e+02 }, - { "W159", 1.589729180000000e+02 }, { "W160", 1.599684788050000e+02 }, { "W161", 1.609673570000000e+02 }, { "W162", 1.619634974170000e+02 }, - { "W163", 1.629625235420000e+02 }, { "W164", 1.639589543820000e+02 }, { "W165", 1.649582799490000e+02 }, { "W166", 1.659550272530000e+02 }, - { "W167", 1.669548160140000e+02 }, { "W168", 1.679518083940000e+02 }, { "W169", 1.689517787900000e+02 }, { "W170", 1.699492284820000e+02 }, - { "W171", 1.709494510000000e+02 }, { "W172", 1.719472920000000e+02 }, { "W173", 1.729476890000000e+02 }, { "W174", 1.739460790000000e+02 }, - { "W175", 1.749467170000000e+02 }, { "W176", 1.759456340000000e+02 }, { "W177", 1.769466430000000e+02 }, { "W178", 1.779458762360000e+02 }, - { "W179", 1.789470704470000e+02 }, { "W180", 1.799467044590000e+02 }, { "W181", 1.809481972480000e+02 }, { "W182", 1.819482041560000e+02 }, - { "W183", 1.829502229510000e+02 }, { "W184", 1.839509311880000e+02 }, { "W185", 1.849534192640000e+02 }, { "W186", 1.859543641270000e+02 }, - { "W187", 1.869571604660000e+02 }, { "W188", 1.879584891050000e+02 }, { "W189", 1.889619128680000e+02 }, { "W190", 1.899631813780000e+02 }, - { "W191", 1.909666000000000e+02 }, { "W192", 1.919681700000000e+02 }, { "Re_natural", 1.862070000000000e+02 }, { "Re160", 1.599821150000000e+02 }, - { "Re161", 1.609775891190000e+02 }, { "Re162", 1.619760020000000e+02 }, { "Re163", 1.629720805350000e+02 }, { "Re164", 1.639703230000000e+02 }, - { "Re165", 1.649670885570000e+02 }, { "Re166", 1.659658080000000e+02 }, { "Re167", 1.669626010000000e+02 }, { "Re168", 1.679615726080000e+02 }, - { "Re169", 1.689587910960000e+02 }, { "Re170", 1.699582200710000e+02 }, { "Re171", 1.709557160000000e+02 }, { "Re172", 1.719554229610000e+02 }, - { "Re173", 1.729532430000000e+02 }, { "Re174", 1.739531150000000e+02 }, { "Re175", 1.749513810000000e+02 }, { "Re176", 1.759516230000000e+02 }, - { "Re177", 1.769503280000000e+02 }, { "Re178", 1.779509890000000e+02 }, { "Re179", 1.789499876410000e+02 }, { "Re180", 1.799507890840000e+02 }, - { "Re181", 1.809500679160000e+02 }, { "Re182", 1.819512100800000e+02 }, { "Re183", 1.829508198410000e+02 }, { "Re184", 1.839525207560000e+02 }, - { "Re185", 1.849529549820000e+02 }, { "Re186", 1.859549860840000e+02 }, { "Re187", 1.869557531090000e+02 }, { "Re188", 1.879581144380000e+02 }, - { "Re189", 1.889592290070000e+02 }, { "Re190", 1.899618179770000e+02 }, { "Re191", 1.909631252420000e+02 }, { "Re192", 1.919659600000000e+02 }, - { "Re193", 1.929674700000000e+02 }, { "Re194", 1.939704200000000e+02 }, { "Os_natural", 1.902000000000000e+02 }, { "Os162", 1.619844310000000e+02 }, - { "Os163", 1.629826900000000e+02 }, { "Os164", 1.639780356490000e+02 }, { "Os165", 1.649767620000000e+02 }, { "Os166", 1.659726907530000e+02 }, - { "Os167", 1.669715479690000e+02 }, { "Os168", 1.679678036780000e+02 }, { "Os169", 1.689670192700000e+02 }, { "Os170", 1.699635770280000e+02 }, - { "Os171", 1.709631848190000e+02 }, { "Os172", 1.719600233030000e+02 }, { "Os173", 1.729598084090000e+02 }, { "Os174", 1.739570622020000e+02 }, - { "Os175", 1.749569458350000e+02 }, { "Os176", 1.759548060000000e+02 }, { "Os177", 1.769549653240000e+02 }, { "Os178", 1.779532512410000e+02 }, - { "Os179", 1.789538160170000e+02 }, { "Os180", 1.799523788030000e+02 }, { "Os181", 1.809532440000000e+02 }, { "Os182", 1.819521101860000e+02 }, - { "Os183", 1.829531261020000e+02 }, { "Os184", 1.839524890710000e+02 }, { "Os185", 1.849540422650000e+02 }, { "Os186", 1.859538381580000e+02 }, - { "Os187", 1.869557504580000e+02 }, { "Os188", 1.879558382280000e+02 }, { "Os189", 1.889581474700000e+02 }, { "Os190", 1.899584470480000e+02 }, - { "Os191", 1.909609297180000e+02 }, { "Os192", 1.919614806900000e+02 }, { "Os193", 1.929641515630000e+02 }, { "Os194", 1.939651820830000e+02 }, - { "Os195", 1.949681266610000e+02 }, { "Os196", 1.959696393330000e+02 }, { "Ir_natural", 1.922200000000000e+02 }, { "Ir164", 1.639922010000000e+02 }, - { "Ir165", 1.649875200000000e+02 }, { "Ir166", 1.659858240000000e+02 }, { "Ir167", 1.669816651560000e+02 }, { "Ir168", 1.679798810000000e+02 }, - { "Ir169", 1.689762949420000e+02 }, { "Ir170", 1.699749650000000e+02 }, { "Ir171", 1.709716260420000e+02 }, { "Ir172", 1.719704560000000e+02 }, - { "Ir173", 1.729675017390000e+02 }, { "Ir174", 1.739668610450000e+02 }, { "Ir175", 1.749641128950000e+02 }, { "Ir176", 1.759636486880000e+02 }, - { "Ir177", 1.769613015000000e+02 }, { "Ir178", 1.779610820000000e+02 }, { "Ir179", 1.789591222660000e+02 }, { "Ir180", 1.799592294460000e+02 }, - { "Ir181", 1.809576252970000e+02 }, { "Ir182", 1.819580762960000e+02 }, { "Ir183", 1.829568464580000e+02 }, { "Ir184", 1.839574760000000e+02 }, - { "Ir185", 1.849566980000000e+02 }, { "Ir186", 1.859579461040000e+02 }, { "Ir187", 1.869573633610000e+02 }, { "Ir188", 1.879588531210000e+02 }, - { "Ir189", 1.889587189350000e+02 }, { "Ir190", 1.899605459680000e+02 }, { "Ir191", 1.909605940460000e+02 }, { "Ir192", 1.919626050120000e+02 }, - { "Ir193", 1.929629264300000e+02 }, { "Ir194", 1.939650783780000e+02 }, { "Ir195", 1.949659795730000e+02 }, { "Ir196", 1.959683965420000e+02 }, - { "Ir197", 1.969696532850000e+02 }, { "Ir198", 1.979722800000000e+02 }, { "Ir199", 1.989738045830000e+02 }, { "Pt_natural", 1.950900000000000e+02 }, - { "Pt166", 1.659948550000000e+02 }, { "Pt167", 1.669929790000000e+02 }, { "Pt168", 1.679881507420000e+02 }, { "Pt169", 1.689867150000000e+02 }, - { "Pt170", 1.699824952890000e+02 }, { "Pt171", 1.709812445420000e+02 }, { "Pt172", 1.719773471280000e+02 }, { "Pt173", 1.729764447540000e+02 }, - { "Pt174", 1.739728187670000e+02 }, { "Pt175", 1.749724205520000e+02 }, { "Pt176", 1.759689446220000e+02 }, { "Pt177", 1.769684694810000e+02 }, - { "Pt178", 1.779656487240000e+02 }, { "Pt179", 1.789653634040000e+02 }, { "Pt180", 1.799630314770000e+02 }, { "Pt181", 1.809630972850000e+02 }, - { "Pt182", 1.819611706560000e+02 }, { "Pt183", 1.829615967030000e+02 }, { "Pt184", 1.839599222510000e+02 }, { "Pt185", 1.849606190000000e+02 }, - { "Pt186", 1.859593508130000e+02 }, { "Pt187", 1.869605870000000e+02 }, { "Pt188", 1.879593953910000e+02 }, { "Pt189", 1.889608336860000e+02 }, - { "Pt190", 1.899599316550000e+02 }, { "Pt191", 1.909616766610000e+02 }, { "Pt192", 1.919610380050000e+02 }, { "Pt193", 1.929629874010000e+02 }, - { "Pt194", 1.939626802530000e+02 }, { "Pt195", 1.949647911340000e+02 }, { "Pt196", 1.959649515210000e+02 }, { "Pt197", 1.969673401820000e+02 }, - { "Pt198", 1.979678927900000e+02 }, { "Pt199", 1.989705930940000e+02 }, { "Pt200", 1.999714406770000e+02 }, { "Pt201", 2.009745128680000e+02 }, - { "Pt202", 2.019757400000000e+02 }, { "Au_natural", 1.969665000000000e+02 }, { "Au169", 1.689980800000000e+02 }, { "Au170", 1.699961220000000e+02 }, - { "Au171", 1.709918788810000e+02 }, { "Au172", 1.719900350000000e+02 }, { "Au173", 1.729862373800000e+02 }, { "Au174", 1.739847610000000e+02 }, - { "Au175", 1.749812741070000e+02 }, { "Au176", 1.759800990000000e+02 }, { "Au177", 1.769768649080000e+02 }, { "Au178", 1.779760319200000e+02 }, - { "Au179", 1.789732128120000e+02 }, { "Au180", 1.799725211240000e+02 }, { "Au181", 1.809700790480000e+02 }, { "Au182", 1.819696178740000e+02 }, - { "Au183", 1.829675930340000e+02 }, { "Au184", 1.839674515240000e+02 }, { "Au185", 1.849657894110000e+02 }, { "Au186", 1.859659527030000e+02 }, - { "Au187", 1.869645675410000e+02 }, { "Au188", 1.879653236610000e+02 }, { "Au189", 1.889639482860000e+02 }, { "Au190", 1.899647003390000e+02 }, - { "Au191", 1.909637042250000e+02 }, { "Au192", 1.919648129530000e+02 }, { "Au193", 1.929641497150000e+02 }, { "Au194", 1.939653652500000e+02 }, - { "Au195", 1.949650346400000e+02 }, { "Au196", 1.959665698130000e+02 }, { "Au197", 1.969665686620000e+02 }, { "Au198", 1.979682423030000e+02 }, - { "Au199", 1.989687651930000e+02 }, { "Au200", 1.999707256470000e+02 }, { "Au201", 2.009716572400000e+02 }, { "Au202", 2.019738058380000e+02 }, - { "Au203", 2.029751545420000e+02 }, { "Au204", 2.039777240000000e+02 }, { "Au205", 2.049798700000000e+02 }, { "Hg_natural", 2.005900000000000e+02 }, - { "Hg171", 1.710037600000000e+02 }, { "Hg172", 1.719988326860000e+02 }, { "Hg173", 1.729972420000000e+02 }, { "Hg174", 1.739928636950000e+02 }, - { "Hg175", 1.749914232700000e+02 }, { "Hg176", 1.759873545800000e+02 }, { "Hg177", 1.769862791580000e+02 }, { "Hg178", 1.779824831430000e+02 }, - { "Hg179", 1.789818338610000e+02 }, { "Hg180", 1.799782663940000e+02 }, { "Hg181", 1.809778193110000e+02 }, { "Hg182", 1.819746899640000e+02 }, - { "Hg183", 1.829744498410000e+02 }, { "Hg184", 1.839717130510000e+02 }, { "Hg185", 1.849718990860000e+02 }, { "Hg186", 1.859693617900000e+02 }, - { "Hg187", 1.869698142360000e+02 }, { "Hg188", 1.879675770490000e+02 }, { "Hg189", 1.889681900340000e+02 }, { "Hg190", 1.899663224490000e+02 }, - { "Hg191", 1.909671571050000e+02 }, { "Hg192", 1.919656343270000e+02 }, { "Hg193", 1.929666654210000e+02 }, { "Hg194", 1.939654394090000e+02 }, - { "Hg195", 1.949667201130000e+02 }, { "Hg196", 1.959658326490000e+02 }, { "Hg197", 1.969672129080000e+02 }, { "Hg198", 1.979667690320000e+02 }, - { "Hg199", 1.989682799320000e+02 }, { "Hg200", 1.999683260040000e+02 }, { "Hg201", 2.009703022680000e+02 }, { "Hg202", 2.019706430110000e+02 }, - { "Hg203", 2.029728724840000e+02 }, { "Hg204", 2.039734939330000e+02 }, { "Hg205", 2.049760733860000e+02 }, { "Hg206", 2.059775140660000e+02 }, - { "Hg207", 2.069825885450000e+02 }, { "Hg208", 2.079859400000000e+02 }, { "Hg209", 2.089910400000000e+02 }, { "Hg210", 2.099945100000000e+02 }, - { "Tl_natural", 2.043700000000000e+02 }, { "Tl176", 1.760005900000000e+02 }, { "Tl177", 1.769964272860000e+02 }, { "Tl178", 1.779948970000000e+02 }, - { "Tl179", 1.789910890820000e+02 }, { "Tl180", 1.799899060000000e+02 }, { "Tl181", 1.809862574470000e+02 }, { "Tl182", 1.819856671040000e+02 }, - { "Tl183", 1.829821928020000e+02 }, { "Tl184", 1.839818731220000e+02 }, { "Tl185", 1.849787913050000e+02 }, { "Tl186", 1.859783250000000e+02 }, - { "Tl187", 1.869759058970000e+02 }, { "Tl188", 1.879760097820000e+02 }, { "Tl189", 1.889735884280000e+02 }, { "Tl190", 1.899738771490000e+02 }, - { "Tl191", 1.909717861540000e+02 }, { "Tl192", 1.919722250000000e+02 }, { "Tl193", 1.929706720000000e+02 }, { "Tl194", 1.939712000000000e+02 }, - { "Tl195", 1.949697743350000e+02 }, { "Tl196", 1.959704811510000e+02 }, { "Tl197", 1.969695745110000e+02 }, { "Tl198", 1.979704834950000e+02 }, - { "Tl199", 1.989698770000000e+02 }, { "Tl200", 1.999709626720000e+02 }, { "Tl201", 2.009708188910000e+02 }, { "Tl202", 2.019721058080000e+02 }, - { "Tl203", 2.029723442200000e+02 }, { "Tl204", 2.039738635220000e+02 }, { "Tl205", 2.049744275410000e+02 }, { "Tl206", 2.059761103200000e+02 }, - { "Tl207", 2.069774194290000e+02 }, { "Tl208", 2.079820187000000e+02 }, { "Tl209", 2.089853589520000e+02 }, { "Tl210", 2.099900736890000e+02 }, - { "Tl211", 2.109934770000000e+02 }, { "Tl212", 2.119982280000000e+02 }, { "Pb_natural", 2.072000000000000e+02 }, { "Pb178", 1.780038301910000e+02 }, - { "Pb179", 1.790021500000000e+02 }, { "Pb180", 1.799979181730000e+02 }, { "Pb181", 1.809966239580000e+02 }, { "Pb182", 1.819926718420000e+02 }, - { "Pb183", 1.829918746290000e+02 }, { "Pb184", 1.839881423390000e+02 }, { "Pb185", 1.849876099440000e+02 }, { "Pb186", 1.859842389450000e+02 }, - { "Pb187", 1.869839183700000e+02 }, { "Pb188", 1.879808743380000e+02 }, { "Pb189", 1.889808070000000e+02 }, { "Pb190", 1.899780815170000e+02 }, - { "Pb191", 1.909782650000000e+02 }, { "Pb192", 1.919757851710000e+02 }, { "Pb193", 1.929761732340000e+02 }, { "Pb194", 1.939740120700000e+02 }, - { "Pb195", 1.949745420500000e+02 }, { "Pb196", 1.959727741090000e+02 }, { "Pb197", 1.969734311240000e+02 }, { "Pb198", 1.979720339590000e+02 }, - { "Pb199", 1.989729166500000e+02 }, { "Pb200", 1.999718266750000e+02 }, { "Pb201", 2.009728845110000e+02 }, { "Pb202", 2.019721591330000e+02 }, - { "Pb203", 2.029733905210000e+02 }, { "Pb204", 2.039730435890000e+02 }, { "Pb205", 2.049744817550000e+02 }, { "Pb206", 2.059744652780000e+02 }, - { "Pb207", 2.069758968870000e+02 }, { "Pb208", 2.079766520710000e+02 }, { "Pb209", 2.089810901200000e+02 }, { "Pb210", 2.099841885270000e+02 }, - { "Pb211", 2.109887369640000e+02 }, { "Pb212", 2.119918975430000e+02 }, { "Pb213", 2.129965814990000e+02 }, { "Pb214", 2.139998054080000e+02 }, - { "Pb215", 2.150048070000000e+02 }, { "Bi_natural", 2.089804000000000e+02 }, { "Bi184", 1.840011240000000e+02 }, { "Bi185", 1.849976250000000e+02 }, - { "Bi186", 1.859965976250000e+02 }, { "Bi187", 1.869931578350000e+02 }, { "Bi188", 1.879922651540000e+02 }, { "Bi189", 1.889891990120000e+02 }, - { "Bi190", 1.899882951290000e+02 }, { "Bi191", 1.909857861190000e+02 }, { "Bi192", 1.919854579540000e+02 }, { "Bi193", 1.929829597710000e+02 }, - { "Bi194", 1.939828339600000e+02 }, { "Bi195", 1.949806507370000e+02 }, { "Bi196", 1.959806665090000e+02 }, { "Bi197", 1.969788644540000e+02 }, - { "Bi198", 1.979792060000000e+02 }, { "Bi199", 1.989776719610000e+02 }, { "Bi200", 1.999781318290000e+02 }, { "Bi201", 2.009770090360000e+02 }, - { "Bi202", 2.019777423240000e+02 }, { "Bi203", 2.029768760010000e+02 }, { "Bi204", 2.039778127360000e+02 }, { "Bi205", 2.049773893660000e+02 }, - { "Bi206", 2.059784991300000e+02 }, { "Bi207", 2.069784706790000e+02 }, { "Bi208", 2.079797421960000e+02 }, { "Bi209", 2.089803987340000e+02 }, - { "Bi210", 2.099841203710000e+02 }, { "Bi211", 2.109872694600000e+02 }, { "Bi212", 2.119912857240000e+02 }, { "Bi213", 2.129943846660000e+02 }, - { "Bi214", 2.139987115390000e+02 }, { "Bi215", 2.150017697760000e+02 }, { "Bi216", 2.160063059430000e+02 }, { "Bi217", 2.170094700000000e+02 }, - { "Bi218", 2.180143160000000e+02 }, { "Po_natural", 2.090000000000000e+02 }, { "Po188", 1.879994220480000e+02 }, { "Po189", 1.889984805620000e+02 }, - { "Po190", 1.899951011850000e+02 }, { "Po191", 1.909945744850000e+02 }, { "Po192", 1.919913351490000e+02 }, { "Po193", 1.929910252750000e+02 }, - { "Po194", 1.939881856060000e+02 }, { "Po195", 1.949881107280000e+02 }, { "Po196", 1.959855345800000e+02 }, { "Po197", 1.969856596300000e+02 }, - { "Po198", 1.979833886160000e+02 }, { "Po199", 1.989836660630000e+02 }, { "Po200", 1.999817986040000e+02 }, { "Po201", 2.009822597640000e+02 }, - { "Po202", 2.019807575410000e+02 }, { "Po203", 2.029814201030000e+02 }, { "Po204", 2.039803181210000e+02 }, { "Po205", 2.049812033220000e+02 }, - { "Po206", 2.059804810990000e+02 }, { "Po207", 2.069815931730000e+02 }, { "Po208", 2.079812457020000e+02 }, { "Po209", 2.089824304350000e+02 }, - { "Po210", 2.099828736730000e+02 }, { "Po211", 2.109866531540000e+02 }, { "Po212", 2.119888679690000e+02 }, { "Po213", 2.129928572800000e+02 }, - { "Po214", 2.139952013500000e+02 }, { "Po215", 2.149994199880000e+02 }, { "Po216", 2.160019150350000e+02 }, { "Po217", 2.170063347960000e+02 }, - { "Po218", 2.180089730370000e+02 }, { "Po219", 2.190137440000000e+02 }, { "Po220", 2.200166020000000e+02 }, { "At_natural", 2.100000000000000e+02 }, - { "At193", 1.929998431120000e+02 }, { "At194", 1.939987250850000e+02 }, { "At195", 1.949962680980000e+02 }, { "At196", 1.959957880770000e+02 }, - { "At197", 1.969931892150000e+02 }, { "At198", 1.979928372020000e+02 }, { "At199", 1.989905322540000e+02 }, { "At200", 1.999903512640000e+02 }, - { "At201", 2.009884169990000e+02 }, { "At202", 2.019886302360000e+02 }, { "At203", 2.029869419840000e+02 }, { "At204", 2.039872513260000e+02 }, - { "At205", 2.049860744830000e+02 }, { "At206", 2.059866670360000e+02 }, { "At207", 2.069857835020000e+02 }, { "At208", 2.079865899770000e+02 }, - { "At209", 2.089861731430000e+02 }, { "At210", 2.099871477100000e+02 }, { "At211", 2.109874962710000e+02 }, { "At212", 2.119907447710000e+02 }, - { "At213", 2.129929366460000e+02 }, { "At214", 2.139963717330000e+02 }, { "At215", 2.149986525700000e+02 }, { "At216", 2.160024232570000e+02 }, - { "At217", 2.170047188220000e+02 }, { "At218", 2.180086943360000e+02 }, { "At219", 2.190111616910000e+02 }, { "At220", 2.200154076820000e+02 }, - { "At221", 2.210180500000000e+02 }, { "At222", 2.220223300000000e+02 }, { "At223", 2.230251900000000e+02 }, { "Rn_natural", 2.220000000000000e+02 }, - { "Rn195", 1.950054376960000e+02 }, { "Rn196", 1.960021152230000e+02 }, { "Rn197", 1.970015843510000e+02 }, { "Rn198", 1.979986786630000e+02 }, - { "Rn199", 1.989983702970000e+02 }, { "Rn200", 1.999956993000000e+02 }, { "Rn201", 2.009956283350000e+02 }, { "Rn202", 2.019932634920000e+02 }, - { "Rn203", 2.029933866870000e+02 }, { "Rn204", 2.039914287400000e+02 }, { "Rn205", 2.049917187990000e+02 }, { "Rn206", 2.059902141040000e+02 }, - { "Rn207", 2.069907342250000e+02 }, { "Rn208", 2.079896424700000e+02 }, { "Rn209", 2.089904147420000e+02 }, { "Rn210", 2.099896962160000e+02 }, - { "Rn211", 2.109906005230000e+02 }, { "Rn212", 2.119907035290000e+02 }, { "Rn213", 2.129938826680000e+02 }, { "Rn214", 2.139953625540000e+02 }, - { "Rn215", 2.149987454830000e+02 }, { "Rn216", 2.160002743700000e+02 }, { "Rn217", 2.170039276750000e+02 }, { "Rn218", 2.180056012560000e+02 }, - { "Rn219", 2.190094802040000e+02 }, { "Rn220", 2.200113939810000e+02 }, { "Rn221", 2.210155367820000e+02 }, { "Rn222", 2.220175777380000e+02 }, - { "Rn223", 2.230217900000000e+02 }, { "Rn224", 2.240240900000000e+02 }, { "Rn225", 2.250284400000000e+02 }, { "Rn226", 2.260308900000000e+02 }, - { "Rn227", 2.270354070000000e+02 }, { "Rn228", 2.280379860000000e+02 }, { "Fr_natural", 2.230000000000000e+02 }, { "Fr199", 1.990072581470000e+02 }, - { "Fr200", 2.000065724900000e+02 }, { "Fr201", 2.010038608670000e+02 }, { "Fr202", 2.020033728470000e+02 }, { "Fr203", 2.030009246470000e+02 }, - { "Fr204", 2.040006532040000e+02 }, { "Fr205", 2.049985939600000e+02 }, { "Fr206", 2.059986660660000e+02 }, { "Fr207", 2.069969494140000e+02 }, - { "Fr208", 2.079971387830000e+02 }, { "Fr209", 2.089959535550000e+02 }, { "Fr210", 2.099964077380000e+02 }, { "Fr211", 2.109955365440000e+02 }, - { "Fr212", 2.119962022440000e+02 }, { "Fr213", 2.129961890810000e+02 }, { "Fr214", 2.139989711450000e+02 }, { "Fr215", 2.150003414970000e+02 }, - { "Fr216", 2.160031979900000e+02 }, { "Fr217", 2.170046319510000e+02 }, { "Fr218", 2.180075783220000e+02 }, { "Fr219", 2.190092521490000e+02 }, - { "Fr220", 2.200123274050000e+02 }, { "Fr221", 2.210142547620000e+02 }, { "Fr222", 2.220175517300000e+02 }, { "Fr223", 2.230197358570000e+02 }, - { "Fr224", 2.240232499510000e+02 }, { "Fr225", 2.250255654140000e+02 }, { "Fr226", 2.260293862310000e+02 }, { "Fr227", 2.270318359380000e+02 }, - { "Fr228", 2.280357290000000e+02 }, { "Fr229", 2.290384502280000e+02 }, { "Fr230", 2.300425100000000e+02 }, { "Fr231", 2.310454400000000e+02 }, - { "Fr232", 2.320497720000000e+02 }, { "Ra_natural", 2.260000000000000e+02 }, { "Ra202", 2.020098906860000e+02 }, { "Ra203", 2.030092716190000e+02 }, - { "Ra204", 2.040064996680000e+02 }, { "Ra205", 2.050062685700000e+02 }, { "Ra206", 2.060038272700000e+02 }, { "Ra207", 2.070037981050000e+02 }, - { "Ra208", 2.080018399400000e+02 }, { "Ra209", 2.090019913730000e+02 }, { "Ra210", 2.100004949780000e+02 }, { "Ra211", 2.110008979870000e+02 }, - { "Ra212", 2.119997944990000e+02 }, { "Ra213", 2.130003839590000e+02 }, { "Ra214", 2.140001078940000e+02 }, { "Ra215", 2.150027198340000e+02 }, - { "Ra216", 2.160035330350000e+02 }, { "Ra217", 2.170063203270000e+02 }, { "Ra218", 2.180071402300000e+02 }, { "Ra219", 2.190100850780000e+02 }, - { "Ra220", 2.200110283840000e+02 }, { "Ra221", 2.210139173380000e+02 }, { "Ra222", 2.220153745300000e+02 }, { "Ra223", 2.230185021710000e+02 }, - { "Ra224", 2.240202118210000e+02 }, { "Ra225", 2.250236115640000e+02 }, { "Ra226", 2.260254098230000e+02 }, { "Ra227", 2.270291778420000e+02 }, - { "Ra228", 2.280310702920000e+02 }, { "Ra229", 2.290349575770000e+02 }, { "Ra230", 2.300370563940000e+02 }, { "Ra231", 2.310412200000000e+02 }, - { "Ra232", 2.320436380000000e+02 }, { "Ra233", 2.330480600000000e+02 }, { "Ra234", 2.340507040000000e+02 }, { "Ac_natural", 2.270000000000000e+02 }, - { "Ac206", 2.060145049800000e+02 }, { "Ac207", 2.070119497480000e+02 }, { "Ac208", 2.080115515510000e+02 }, { "Ac209", 2.090094948630000e+02 }, - { "Ac210", 2.100094359860000e+02 }, { "Ac211", 2.110077348350000e+02 }, { "Ac212", 2.120078138220000e+02 }, { "Ac213", 2.130066076430000e+02 }, - { "Ac214", 2.140069017980000e+02 }, { "Ac215", 2.150064536250000e+02 }, { "Ac216", 2.160087200750000e+02 }, { "Ac217", 2.170093469140000e+02 }, - { "Ac218", 2.180116414530000e+02 }, { "Ac219", 2.190124203890000e+02 }, { "Ac220", 2.200147629790000e+02 }, { "Ac221", 2.210155912480000e+02 }, - { "Ac222", 2.220178438510000e+02 }, { "Ac223", 2.230191374680000e+02 }, { "Ac224", 2.240217228660000e+02 }, { "Ac225", 2.250232295850000e+02 }, - { "Ac226", 2.260260980890000e+02 }, { "Ac227", 2.270277521270000e+02 }, { "Ac228", 2.280310211120000e+02 }, { "Ac229", 2.290330152430000e+02 }, - { "Ac230", 2.300362941780000e+02 }, { "Ac231", 2.310385587860000e+02 }, { "Ac232", 2.320420274380000e+02 }, { "Ac233", 2.330445500000000e+02 }, - { "Ac234", 2.340484200000000e+02 }, { "Ac235", 2.350512320000000e+02 }, { "Ac236", 2.360552960000000e+02 }, { "Th_natural", 2.320381000000000e+02 }, - { "Th209", 2.090177156820000e+02 }, { "Th210", 2.100150753420000e+02 }, { "Th211", 2.110149284130000e+02 }, { "Th212", 2.120129802880000e+02 }, - { "Th213", 2.130130101400000e+02 }, { "Th214", 2.140114997700000e+02 }, { "Th215", 2.150117303300000e+02 }, { "Th216", 2.160110621150000e+02 }, - { "Th217", 2.170131143280000e+02 }, { "Th218", 2.180132844990000e+02 }, { "Th219", 2.190155368950000e+02 }, { "Th220", 2.200157477620000e+02 }, - { "Th221", 2.210181836740000e+02 }, { "Th222", 2.220184681210000e+02 }, { "Th223", 2.230208114480000e+02 }, { "Th224", 2.240214668950000e+02 }, - { "Th225", 2.250239510210000e+02 }, { "Th226", 2.260249030690000e+02 }, { "Th227", 2.270277040700000e+02 }, { "Th228", 2.280287411270000e+02 }, - { "Th229", 2.290317624300000e+02 }, { "Th230", 2.300331338430000e+02 }, { "Th231", 2.310363043430000e+02 }, { "Th232", 2.320380553250000e+02 }, - { "Th233", 2.330415818430000e+02 }, { "Th234", 2.340436012300000e+02 }, { "Th235", 2.350475100740000e+02 }, { "Th236", 2.360498700000000e+02 }, - { "Th237", 2.370538940000000e+02 }, { "Th238", 2.380564960000000e+02 }, { "Pa_natural", 2.310000000000000e+02 }, { "Pa212", 2.120232041380000e+02 }, - { "Pa213", 2.130211093400000e+02 }, { "Pa214", 2.140209184170000e+02 }, { "Pa215", 2.150191858650000e+02 }, { "Pa216", 2.160191095640000e+02 }, - { "Pa217", 2.170183239860000e+02 }, { "Pa218", 2.180200418890000e+02 }, { "Pa219", 2.190198831430000e+02 }, { "Pa220", 2.200218753030000e+02 }, - { "Pa221", 2.210218779830000e+02 }, { "Pa222", 2.220237420000000e+02 }, { "Pa223", 2.230239622730000e+02 }, { "Pa224", 2.240256257380000e+02 }, - { "Pa225", 2.250261306780000e+02 }, { "Pa226", 2.260279477530000e+02 }, { "Pa227", 2.270288050720000e+02 }, { "Pa228", 2.280310513760000e+02 }, - { "Pa229", 2.290320967930000e+02 }, { "Pa230", 2.300345407540000e+02 }, { "Pa231", 2.310358839900000e+02 }, { "Pa232", 2.320385915920000e+02 }, - { "Pa233", 2.330402472770000e+02 }, { "Pa234", 2.340433080580000e+02 }, { "Pa235", 2.350454436150000e+02 }, { "Pa236", 2.360486812840000e+02 }, - { "Pa237", 2.370511456590000e+02 }, { "Pa238", 2.380545027100000e+02 }, { "Pa239", 2.390572600000000e+02 }, { "Pa240", 2.400609800000000e+02 }, - { "U_natural", 2.380290000000000e+02 }, { "U217", 2.170243687910000e+02 }, { "U218", 2.180235356710000e+02 }, { "U219", 2.190249191600000e+02 }, - { "U220", 2.200247230000000e+02 }, { "U221", 2.210263990000000e+02 }, { "U222", 2.220260860000000e+02 }, { "U223", 2.230277386000000e+02 }, - { "U224", 2.240276047780000e+02 }, { "U225", 2.250293907170000e+02 }, { "U226", 2.260293387020000e+02 }, { "U227", 2.270311563670000e+02 }, - { "U228", 2.280313740060000e+02 }, { "U229", 2.290335059390000e+02 }, { "U230", 2.300339397840000e+02 }, { "U231", 2.310362937040000e+02 }, - { "U232", 2.320371561520000e+02 }, { "U233", 2.330396352070000e+02 }, { "U234", 2.340409520880000e+02 }, { "U235", 2.350439299180000e+02 }, - { "U236", 2.360455680060000e+02 }, { "U237", 2.370487301840000e+02 }, { "U238", 2.380507882470000e+02 }, { "U239", 2.390542932990000e+02 }, - { "U240", 2.400565919880000e+02 }, { "U241", 2.410603300000000e+02 }, { "U242", 2.420629310000000e+02 }, { "Np_natural", 2.370000000000000e+02 }, - { "Np225", 2.250339139330000e+02 }, { "Np226", 2.260351450000000e+02 }, { "Np227", 2.270349567890000e+02 }, { "Np228", 2.280361800000000e+02 }, - { "Np229", 2.290362638080000e+02 }, { "Np230", 2.300378275970000e+02 }, { "Np231", 2.310382450850000e+02 }, { "Np232", 2.320401080000000e+02 }, - { "Np233", 2.330407405460000e+02 }, { "Np234", 2.340428950380000e+02 }, { "Np235", 2.350440632670000e+02 }, { "Np236", 2.360465696000000e+02 }, - { "Np237", 2.370481734440000e+02 }, { "Np238", 2.380509464050000e+02 }, { "Np239", 2.390529390250000e+02 }, { "Np240", 2.400561621820000e+02 }, - { "Np241", 2.410582524310000e+02 }, { "Np242", 2.420616411800000e+02 }, { "Np243", 2.430642790000000e+02 }, { "Np244", 2.440678500000000e+02 }, - { "Pu_natural", 2.440000000000000e+02 }, { "Pu228", 2.280387423280000e+02 }, { "Pu229", 2.290401502120000e+02 }, { "Pu230", 2.300396498860000e+02 }, - { "Pu231", 2.310411011070000e+02 }, { "Pu232", 2.320411870970000e+02 }, { "Pu233", 2.330429973750000e+02 }, { "Pu234", 2.340433170760000e+02 }, - { "Pu235", 2.350452860500000e+02 }, { "Pu236", 2.360460579640000e+02 }, { "Pu237", 2.370484096580000e+02 }, { "Pu238", 2.380495598940000e+02 }, - { "Pu239", 2.390521633810000e+02 }, { "Pu240", 2.400538135450000e+02 }, { "Pu241", 2.410568514560000e+02 }, { "Pu242", 2.420587426110000e+02 }, - { "Pu243", 2.430620030920000e+02 }, { "Pu244", 2.440642039070000e+02 }, { "Pu245", 2.450677471540000e+02 }, { "Pu246", 2.460702046270000e+02 }, - { "Pu247", 2.470740700000000e+02 }, { "Am_natural", 2.430000000000000e+02 }, { "Am231", 2.310455600000000e+02 }, { "Am232", 2.320465900000000e+02 }, - { "Am233", 2.330463480000000e+02 }, { "Am234", 2.340478090000000e+02 }, { "Am235", 2.350479460000000e+02 }, { "Am236", 2.360495790000000e+02 }, - { "Am237", 2.370499960000000e+02 }, { "Am238", 2.380519843240000e+02 }, { "Am239", 2.390530244790000e+02 }, { "Am240", 2.400553001790000e+02 }, - { "Am241", 2.410568291440000e+02 }, { "Am242", 2.420595491590000e+02 }, { "Am243", 2.430613810800000e+02 }, { "Am244", 2.440642848470000e+02 }, - { "Am245", 2.450664521140000e+02 }, { "Am246", 2.460697746190000e+02 }, { "Am247", 2.470720930000000e+02 }, { "Am248", 2.480757520000000e+02 }, - { "Am249", 2.490784800000000e+02 }, { "Cm_natural", 2.470000000000000e+02 }, { "Cm233", 2.330507712320000e+02 }, { "Cm234", 2.340501598410000e+02 }, - { "Cm235", 2.350514340000000e+02 }, { "Cm236", 2.360514130000000e+02 }, { "Cm237", 2.370529010000000e+02 }, { "Cm238", 2.380530286970000e+02 }, - { "Cm239", 2.390549570000000e+02 }, { "Cm240", 2.400555295390000e+02 }, { "Cm241", 2.410576530010000e+02 }, { "Cm242", 2.420588358240000e+02 }, - { "Cm243", 2.430613891140000e+02 }, { "Cm244", 2.440627525780000e+02 }, { "Cm245", 2.450654912490000e+02 }, { "Cm246", 2.460672236620000e+02 }, - { "Cm247", 2.470703535400000e+02 }, { "Cm248", 2.480723485080000e+02 }, { "Cm249", 2.490759534130000e+02 }, { "Cm250", 2.500783569590000e+02 }, - { "Cm251", 2.510822846050000e+02 }, { "Cm252", 2.520848700000000e+02 }, { "Bk_natural", 2.470000000000000e+02 }, { "Bk235", 2.350565800000000e+02 }, - { "Bk236", 2.360573300000000e+02 }, { "Bk237", 2.370570030000000e+02 }, { "Bk238", 2.380582810000000e+02 }, { "Bk239", 2.390582790000000e+02 }, - { "Bk240", 2.400597590000000e+02 }, { "Bk241", 2.410602300000000e+02 }, { "Bk242", 2.420619810000000e+02 }, { "Bk243", 2.430630075720000e+02 }, - { "Bk244", 2.440651807740000e+02 }, { "Bk245", 2.450663616160000e+02 }, { "Bk246", 2.460686729470000e+02 }, { "Bk247", 2.470703070800000e+02 }, - { "Bk248", 2.480730860000000e+02 }, { "Bk249", 2.490749866570000e+02 }, { "Bk250", 2.500783165200000e+02 }, { "Bk251", 2.510807601720000e+02 }, - { "Bk252", 2.520843100000000e+02 }, { "Bk253", 2.530868800000000e+02 }, { "Bk254", 2.540906000000000e+02 }, { "Cf_natural", 2.510000000000000e+02 }, - { "Cf237", 2.370620700000000e+02 }, { "Cf238", 2.380614100000000e+02 }, { "Cf239", 2.390624220000000e+02 }, { "Cf240", 2.400623020000000e+02 }, - { "Cf241", 2.410637260000000e+02 }, { "Cf242", 2.420637015520000e+02 }, { "Cf243", 2.430654270000000e+02 }, { "Cf244", 2.440660006890000e+02 }, - { "Cf245", 2.450680486120000e+02 }, { "Cf246", 2.460688053090000e+02 }, { "Cf247", 2.470710005890000e+02 }, { "Cf248", 2.480721848610000e+02 }, - { "Cf249", 2.490748535370000e+02 }, { "Cf250", 2.500764060660000e+02 }, { "Cf251", 2.510795867880000e+02 }, { "Cf252", 2.520816258460000e+02 }, - { "Cf253", 2.530851331450000e+02 }, { "Cf254", 2.540873229090000e+02 }, { "Cf255", 2.550910460000000e+02 }, { "Cf256", 2.560934400000000e+02 }, - { "Es_natural", 2.520000000000000e+02 }, { "Es120", 1.175000000000000e+02 }, { "Es121", 1.165460000000000e+02 }, { "Es122", 1.185440000000000e+02 }, - { "Es125", 1.175000000000000e+02 }, { "Es240", 2.400689200000000e+02 }, { "Es241", 2.410685380000000e+02 }, { "Es242", 2.420697450000000e+02 }, - { "Es243", 2.430695480000000e+02 }, { "Es244", 2.440708830000000e+02 }, { "Es245", 2.450713240000000e+02 }, { "Es246", 2.460728960000000e+02 }, - { "Es247", 2.470736560000000e+02 }, { "Es248", 2.480754710000000e+02 }, { "Es249", 2.490764110000000e+02 }, { "Es250", 2.500786120000000e+02 }, - { "Es251", 2.510799921420000e+02 }, { "Es252", 2.520829785120000e+02 }, { "Es253", 2.530848246970000e+02 }, { "Es254", 2.540880220210000e+02 }, - { "Es255", 2.550902731220000e+02 }, { "Es256", 2.560935980000000e+02 }, { "Es257", 2.570959790000000e+02 }, { "Es258", 2.580995200000000e+02 }, - { "Fm_natural", 2.570000000000000e+02 }, { "Fm242", 2.420734300000000e+02 }, { "Fm243", 2.430743530000000e+02 }, { "Fm244", 2.440740840000000e+02 }, - { "Fm245", 2.450753850000000e+02 }, { "Fm246", 2.460752990230000e+02 }, { "Fm247", 2.470768470000000e+02 }, { "Fm248", 2.480771947140000e+02 }, - { "Fm249", 2.490790340000000e+02 }, { "Fm250", 2.500795212640000e+02 }, { "Fm251", 2.510815750170000e+02 }, { "Fm252", 2.520824668550000e+02 }, - { "Fm253", 2.530851852360000e+02 }, { "Fm254", 2.540868542200000e+02 }, { "Fm255", 2.550899622020000e+02 }, { "Fm256", 2.560917731170000e+02 }, - { "Fm257", 2.570951047240000e+02 }, { "Fm258", 2.580970760000000e+02 }, { "Fm259", 2.591005950000000e+02 }, { "Fm260", 2.601026780000000e+02 }, - { "Md_natural", 2.580000000000000e+02 }, { "Md245", 2.450808290000000e+02 }, { "Md246", 2.460818860000000e+02 }, { "Md247", 2.470816350000000e+02 }, - { "Md248", 2.480828230000000e+02 }, { "Md249", 2.490830130000000e+02 }, { "Md250", 2.500844200000000e+02 }, { "Md251", 2.510848390000000e+02 }, - { "Md252", 2.520865600000000e+02 }, { "Md253", 2.530872800000000e+02 }, { "Md254", 2.540896560000000e+02 }, { "Md255", 2.550910827050000e+02 }, - { "Md256", 2.560940590250000e+02 }, { "Md257", 2.570955413680000e+02 }, { "Md258", 2.580984313190000e+02 }, { "Md259", 2.591005090000000e+02 }, - { "Md260", 2.601036520000000e+02 }, { "Md261", 2.611057210000000e+02 }, { "Md262", 2.621088650000000e+02 }, { "No_natural", 2.590000000000000e+02 }, - { "No248", 2.480865960000000e+02 }, { "No249", 2.490878330000000e+02 }, { "No250", 2.500875100000000e+02 }, { "No251", 2.510890120000000e+02 }, - { "No252", 2.520889765210000e+02 }, { "No253", 2.530906780000000e+02 }, { "No254", 2.540909552530000e+02 }, { "No255", 2.550932411310000e+02 }, - { "No256", 2.560942826660000e+02 }, { "No257", 2.570968771900000e+02 }, { "No258", 2.580982070000000e+02 }, { "No259", 2.591010310000000e+02 }, - { "No260", 2.601026430000000e+02 }, { "No261", 2.611057490000000e+02 }, { "No262", 2.621073010000000e+02 }, { "No263", 2.631105520000000e+02 }, - { "No264", 2.641123450000000e+02 }, { "Lr_natural", 2.600000000000000e+02 }, { "Lr251", 2.510943600000000e+02 }, { "Lr252", 2.520953710000000e+02 }, - { "Lr253", 2.530952100000000e+02 }, { "Lr254", 2.540964540000000e+02 }, { "Lr255", 2.550966810000000e+02 }, { "Lr256", 2.560986290000000e+02 }, - { "Lr257", 2.570995550000000e+02 }, { "Lr258", 2.581018140000000e+02 }, { "Lr259", 2.591029010000000e+02 }, { "Lr260", 2.601055040000000e+02 }, - { "Lr261", 2.611068830000000e+02 }, { "Lr262", 2.621096340000000e+02 }, { "Lr263", 2.631112930000000e+02 }, { "Lr264", 2.641140380000000e+02 }, - { "Lr265", 2.651158390000000e+02 }, { "Lr266", 2.661193050000000e+02 }, { "Rf_natural", 2.610000000000000e+02 }, { "Rf253", 2.531006890000000e+02 }, - { "Rf254", 2.541001840000000e+02 }, { "Rf255", 2.551013400000000e+02 }, { "Rf256", 2.561011661940000e+02 }, { "Rf257", 2.571029900000000e+02 }, - { "Rf258", 2.581034890000000e+02 }, { "Rf259", 2.591056370000000e+02 }, { "Rf260", 2.601064400000000e+02 }, { "Rf261", 2.611087665560000e+02 }, - { "Rf262", 2.621099250000000e+02 }, { "Rf263", 2.631125470000000e+02 }, { "Rf264", 2.641139850000000e+02 }, { "Rf265", 2.651167040000000e+02 }, - { "Rf266", 2.661179560000000e+02 }, { "Rf267", 2.671215290000000e+02 }, { "Rf268", 2.681236440000000e+02 }, { "Db_natural", 2.620000000000000e+02 }, - { "Db255", 2.551073980000000e+02 }, { "Db256", 2.561081270000000e+02 }, { "Db257", 2.571077220000000e+02 }, { "Db258", 2.581092310000000e+02 }, - { "Db259", 2.591096100000000e+02 }, { "Db260", 2.601113000000000e+02 }, { "Db261", 2.611120560000000e+02 }, { "Db262", 2.621140840000000e+02 }, - { "Db263", 2.631149880000000e+02 }, { "Db264", 2.641174040000000e+02 }, { "Db265", 2.651186010000000e+02 }, { "Db266", 2.661210290000000e+02 }, - { "Db267", 2.671223770000000e+02 }, { "Db268", 2.681254450000000e+02 }, { "Db269", 2.691274600000000e+02 }, { "Db270", 2.701307120000000e+02 }, - { "Sg_natural", 2.630000000000000e+02 }, { "Sg258", 2.581131680000000e+02 }, { "Sg259", 2.591145000000000e+02 }, { "Sg260", 2.601144220710000e+02 }, - { "Sg261", 2.611161170000000e+02 }, { "Sg262", 2.621163980000000e+02 }, { "Sg263", 2.631183220000000e+02 }, { "Sg264", 2.641189310000000e+02 }, - { "Sg265", 2.651211146930000e+02 }, { "Sg266", 2.661220650000000e+02 }, { "Sg267", 2.671244250000000e+02 }, { "Sg268", 2.681256060000000e+02 }, - { "Sg269", 2.691287550000000e+02 }, { "Sg270", 2.701303290000000e+02 }, { "Sg271", 2.711334720000000e+02 }, { "Sg272", 2.721351580000000e+02 }, - { "Sg273", 2.731382200000000e+02 }, { "Bh260", 2.601219700000000e+02 }, { "Bh261", 2.611216640000000e+02 }, { "Bh262", 2.621228920000000e+02 }, - { "Bh263", 2.631230350000000e+02 }, { "Bh264", 2.641246040000000e+02 }, { "Bh265", 2.651251470000000e+02 }, { "Bh266", 2.661269420000000e+02 }, - { "Bh267", 2.671276500000000e+02 }, { "Bh268", 2.681297550000000e+02 }, { "Bh269", 2.691306940000000e+02 }, { "Bh270", 2.701336160000000e+02 }, - { "Bh271", 2.711351790000000e+02 }, { "Bh272", 2.721380320000000e+02 }, { "Bh273", 2.731396180000000e+02 }, { "Bh274", 2.741424400000000e+02 }, - { "Bh275", 2.751442500000000e+02 }, { "Hs263", 2.631285580000000e+02 }, { "Hs264", 2.641283948850000e+02 }, { "Hs265", 2.651300850000000e+02 }, - { "Hs266", 2.661300970000000e+02 }, { "Hs267", 2.671317890000000e+02 }, { "Hs268", 2.681321620000000e+02 }, { "Hs269", 2.691340560000000e+02 }, - { "Hs270", 2.701346500000000e+02 }, { "Hs271", 2.711376570000000e+02 }, { "Hs272", 2.721390520000000e+02 }, { "Hs273", 2.731419860000000e+02 }, - { "Hs274", 2.741431310000000e+02 }, { "Hs275", 2.751459520000000e+02 }, { "Hs276", 2.761472080000000e+02 }, { "Hs277", 2.771498410000000e+02 }, - { "Mt265", 2.651361510000000e+02 }, { "Mt266", 2.661372990000000e+02 }, { "Mt267", 2.671373070000000e+02 }, { "Mt268", 2.681387280000000e+02 }, - { "Mt269", 2.691390550000000e+02 }, { "Mt270", 2.701406570000000e+02 }, { "Mt271", 2.711411390000000e+02 }, { "Mt272", 2.721437380000000e+02 }, - { "Mt273", 2.731449130000000e+02 }, { "Mt274", 2.741474920000000e+02 }, { "Mt275", 2.751486470000000e+02 }, { "Mt276", 2.761511560000000e+02 }, - { "Mt277", 2.771524200000000e+02 }, { "Mt278", 2.781548120000000e+02 }, { "Mt279", 2.791561930000000e+02 }, { "Uun267", 2.671443410000000e+02 }, - { "Uun268", 2.681437950000000e+02 }, { "Uun269", 2.691451240000000e+02 }, { "Uun270", 2.701447200000000e+02 }, { "Uun271", 2.711460620000000e+02 }, - { "Uun272", 2.721463170000000e+02 }, { "Uun273", 2.731488630000000e+02 }, { "Uun274", 2.741494920000000e+02 }, { "Uun275", 2.751521760000000e+02 }, - { "Uun276", 2.761530340000000e+02 }, { "Uun277", 2.771556470000000e+02 }, { "Uun278", 2.781564690000000e+02 }, { "Uun279", 2.791588610000000e+02 }, - { "Uun280", 2.801597950000000e+02 }, { "Uun281", 2.811620610000000e+02 }, { "Uuu272", 2.721536150000000e+02 }, { "Uuu273", 2.731536820000000e+02 }, - { "Uuu274", 2.741557130000000e+02 }, { "Uuu275", 2.751561420000000e+02 }, { "Uuu276", 2.761584930000000e+02 }, { "Uuu277", 2.771595190000000e+02 }, - { "Uuu278", 2.781616040000000e+02 }, { "Uuu279", 2.791624680000000e+02 }, { "Uuu280", 2.801644730000000e+02 }, { "Uuu281", 2.811653720000000e+02 }, - { "Uuu282", 2.821674860000000e+02 }, { "Uuu283", 2.831684150000000e+02 }, { "Uub277", 2.771639430000000e+02 }, { "Uub278", 2.781643120000000e+02 }, - { "Uub279", 2.791665460000000e+02 }, { "Uub280", 2.801670390000000e+02 }, { "Uub281", 2.811692860000000e+02 }, { "Uub282", 2.821697650000000e+02 }, - { "Uub283", 2.831717920000000e+02 }, { "Uub284", 2.841723840000000e+02 }, { "Uub285", 2.851741050000000e+02 }, { "283", 2.831764510000000e+02 }, - { "284", 2.841780800000000e+02 }, { "285", 2.851787320000000e+02 }, { "286", 2.861804810000000e+02 }, { "287", 2.871810450000000e+02 }, - { "Uuq285", 2.851836980000000e+02 }, { "Uuq286", 2.861838550000000e+02 }, { "Uuq287", 2.871855990000000e+02 }, { "Uuq288", 2.881856890000000e+02 }, - { "Uuq289", 2.891872790000000e+02 }, { "287", 2.871911860000000e+02 }, { "288", 2.881924920000000e+02 }, { "289", 2.891927150000000e+02 }, - { "290", 2.901941410000000e+02 }, { "291", 2.911943840000000e+02 }, { "Uuh289", 2.891988620000000e+02 }, { "Uuh290", 2.901985900000000e+02 }, - { "Uuh291", 2.912000110000000e+02 }, { "Uuh292", 2.921997860000000e+02 }, { "291", 2.912065640000000e+02 }, { "292", 2.922075490000000e+02 }, - { "Uuo293", 2.932146700000000e+02 } }; -/* -*************************************************************** -*/ -double MCGIDI_particleMass_AMU( statusMessageReporting *smr, const char *name ) { - - int i, n = sizeof( ZAMasses ) / sizeof( ZAMasses[0] ); - double mass = -1.; - - for( i = 0; i < n; i++ ) { - if( strcmp( ZAMasses[i].symbol, name ) == 0 ) { - mass = ZAMasses[i].mass; - break; - } - } - if( mass == -1. ) smr_setReportError2( smr, smr_unknownID, 1, "particle %s not in mass table", name ); - return( mass ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_misc.cc b/source/processes/hadronic/models/lend/src/MCGIDI_misc.cc index 010050b94b..b9bb67c09a 100644 --- a/source/processes/hadronic/models/lend/src/MCGIDI_misc.cc +++ b/source/processes/hadronic/models/lend/src/MCGIDI_misc.cc @@ -1,532 +1,537 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#include -#include -#include -#include -#ifdef WIN32 -#include -#else -#include -#endif +#include "MCGIDI.hpp" -#include -#include +namespace MCGIDI { -#include "MCGIDI.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_fromTOM.h" +/*! \class SetupInfo + * This class is used internally when constructing a Protare to pass internal information to other constructors. + */ -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif +/* *********************************************************************************************************//** + ***********************************************************************************************************/ -struct ZSymbol { - int Z; - char const *symbol; -}; +LUPI_HOST SetupInfo::SetupInfo( ProtareSingle &a_protare, GIDI::ProtareSingle const &a_GIDI_protare, PoPI::Database const &a_popsUser, + PoPI::Database const &a_pops ) : + m_protare( a_protare ), + m_GIDI_protare( a_GIDI_protare ), + m_popsUser( a_popsUser ), + m_pops( a_pops ), + m_neutronIndex( MCGIDI_popsIndex( a_popsUser, PoPI::IDs::neutron ) ), + m_photonIndex( MCGIDI_popsIndex( a_popsUser, PoPI::IDs::photon ) ), + m_initialStateIndex( -1 ), + m_GRIN_continuumGammas( nullptr ) { -static struct ZSymbol ZSymbols[] = { { 0, "n" }, { 1, "H" }, { 2, "He" }, { 3, "Li" }, { 4, "Be" }, { 5, "B" }, { 6, "C" }, - { 7, "N" }, { 8, "O" }, { 9, "F" }, { 10, "Ne" }, { 11, "Na" }, { 12, "Mg" }, { 13, "Al" }, { 14, "Si" }, { 15, "P" }, - { 16, "S" }, { 17, "Cl" }, { 18, "Ar" }, { 19, "K" }, { 20, "Ca" }, { 21, "Sc" }, { 22, "Ti" }, { 23, "V" }, { 24, "Cr" }, - { 25, "Mn" }, { 26, "Fe" }, { 27, "Co" }, { 28, "Ni" }, { 29, "Cu" }, { 30, "Zn" }, { 31, "Ga" }, { 32, "Ge" }, { 33, "As" }, - { 34, "Se" }, { 35, "Br" }, { 36, "Kr" }, { 37, "Rb" }, { 38, "Sr" }, { 39, "Y" }, { 40, "Zr" }, { 41, "Nb" }, { 42, "Mo" }, - { 43, "Tc" }, { 44, "Ru" }, { 45, "Rh" }, { 46, "Pd" }, { 47, "Ag" }, { 48, "Cd" }, { 49, "In" }, { 50, "Sn" }, { 51, "Sb" }, - { 52, "Te" }, { 53, "I" }, { 54, "Xe" }, { 55, "Cs" }, { 56, "Ba" }, { 57, "La" }, { 58, "Ce" }, { 59, "Pr" }, { 60, "Nd" }, - { 61, "Pm" }, { 62, "Sm" }, { 63, "Eu" }, { 64, "Gd" }, { 65, "Tb" }, { 66, "Dy" }, { 67, "Ho" }, { 68, "Er" }, { 69, "Tm" }, - { 70, "Yb" }, { 71, "Lu" }, { 72, "Hf" }, { 73, "Ta" }, { 74, "W" }, { 75, "Re" }, { 76, "Os" }, { 77, "Ir" }, { 78, "Pt" }, - { 79, "Au" }, { 80, "Hg" }, { 81, "Tl" }, { 82, "Pb" }, { 83, "Bi" }, { 84, "Po" }, { 85, "At" }, { 86, "Rn" }, { 87, "Fr" }, - { 88, "Ra" }, { 89, "Ac" }, { 90, "Th" }, { 91, "Pa" }, { 92, "U" }, { 93, "Np" }, { 94, "Pu" }, { 95, "Am" }, { 96, "Cm" }, - { 97, "Bk" }, { 98, "Cf" }, { 99, "Es" }, { 100, "Fm" }, { 101, "Md" }, { 102, "No" }, { 103, "Lr" }, { 104, "Rf" }, { 105, "Db" }, - { 106, "Sg" }, { 107, "Bh" }, { 108, "Hs" }, { 109, "Mt" } }; - -static int MCGIDI_miscNameToZAm_getLevel( statusMessageReporting *smr, const char *name, const char *p ); -static ptwXYPoints *MCGIDI_misc_Data2ptwXYPointsInUnitsOf( statusMessageReporting *smr, ptwXY_interpolation interpolation, - int length, double *data, char const *fromUnits[2], char const *toUnits[2] ); -/* -************************************************************ -*/ -int MCGIDI_misc_NumberOfZSymbols( void ) { - - return( sizeof( ZSymbols ) / sizeof( struct ZSymbol ) ); } -/* -************************************************************ -*/ -const char *MCGIDI_misc_ZToSymbol( int iZ ) { - if( ( iZ < 0 ) || ( iZ >= MCGIDI_misc_NumberOfZSymbols( ) ) ) return( NULL ); - return( ZSymbols[iZ].symbol ); +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST SetupInfo::~SetupInfo( ) { + + for( auto iter = m_ACE_URR_probabilityTablesFromGIDI.begin( ); iter != m_ACE_URR_probabilityTablesFromGIDI.end( ); ++iter ) delete (*iter).second; } -/* -************************************************************ -*/ -int MCGIDI_misc_symbolToZ( const char *Z ) { - int i, n = MCGIDI_misc_NumberOfZSymbols( ); +/* *********************************************************************************************************//** + * This function returns the intid for particle *a_id* or -1 if *a_id* not in *a_pops*. + * + * @param a_pops [in] A PoPI::Database to retrived the particle's intid from. + * @param a_id [in] The GNDS PoPs id of the particle whose intid is requested. + * + * @return The *intid*. + ***********************************************************************************************************/ - for( i = 0; i < n; i++ ) { - if( strcmp( Z, ZSymbols[i].symbol ) == 0 ) return( ZSymbols[i].Z ); - } - return( -1 ); -} -/* -************************************************************ -*/ -int MCGIDI_miscNameToZAm( statusMessageReporting *smr, const char *name, int *Z, int *A, int *m, int *level ) { +LUPI_HOST int MCGIDI_popsIntid( PoPI::Database const &a_pops, std::string const &a_id ) { - const char *p; - char s[1024] = "", *q, *e; /* Note 1) routine will fail when parts of a particle name can be longer than 1024. */ + if( a_id == PoPI::IDs::FissionProductENDL99120 ) return( PoPI::Intids::FissionProductENDL99120 ); + if( a_id == PoPI::IDs::FissionProductENDL99125 ) return( PoPI::Intids::FissionProductENDL99125 ); + int intid = a_pops.intid( a_id ); - if( strlen( name ) >= ( sizeof( s ) - 1 ) ) { - smr_setReportError2( smr, smr_unknownID, 0, "particle name too long: '%s'", name ); - return( 1 ); - } - - *Z = *A = *m = *level = 0; - if( ( !strncmp( "FissionProduct", name, 14 ) ) || !strncmp( "99120", name, 5 ) ) { - *Z = 99; - *A = 120; - return( 0 ); - } - if( strcmp( "gamma", name ) == 0 ) return( 0 ); - if( strcmp( "n", name ) == 0 ) { *A = 1; return( 0 ); } - - for( p = name, q = s; ( *p != 0 ) && !isdigit( *p ) && ( *p != '_' ); p++, q++ ) *q = *p; /* '_' only for "natural". */ - if( *p == 0 ) { - smr_setReportError2( smr, smr_unknownID, 0, "unsupported particle name = '%s'", name ); - return( 1 ); - } - *q = 0; - if( ( *Z = MCGIDI_misc_symbolToZ( s ) ) < 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "Particle %s's symbol = '%s' not found", name, s ); } - else { /* Getting here implies that *p is a digit. */ - if( *p == '_' ) { - if( strncmp( p, "_natural", 8 ) == 0 ) { - p += 8; - if( *p ) *level = MCGIDI_miscNameToZAm_getLevel( smr, name, p ); } - else { - smr_setReportError2( smr, smr_unknownID, 0, "expecting 'natural': %s", name ); - } } + if( intid < 0 ) { + if( a_id == PoPI::IDs::neutron ) { + intid = PoPI::Intids::neutron; } + else if( a_id == PoPI::IDs::photon ) { + intid = PoPI::Intids::photon ; } else { - for( q = s; isdigit( *p ); p++, q++ ) *q = *p; - *q = 0; - if( strcmp( s, "natural" ) == 0 ) { - e = s; - while( *e ) e++; /* Loop checking, 11.06.2015, T. Koi*/ } - else { - *A = (int) strtol( s, &e, 10 ); - } - if( *e != 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "Failed to convert A to integer in particle name %s", name ); } - else { /* Getting here implies that *p == '_' or 0. */ - if( *p ) *level = MCGIDI_miscNameToZAm_getLevel( smr, name, p ); + PoPI::ParseIdInfo parseIdInfo( a_id ); + if( parseIdInfo.isSupported( ) ) { + if( parseIdInfo.isNuclear( ) ) { + intid = 1000 * parseIdInfo.Z( ) + parseIdInfo.A( ); + } } } } - - return( !smr_isOk( smr ) ); + return( intid ); } -/* -************************************************************ -*/ -static int MCGIDI_miscNameToZAm_getLevel( statusMessageReporting *smr, const char *name, const char *p ) { - int level = 0; - char *e; +/* *********************************************************************************************************//** + * This function returns the index in *a_pops* for particle *a_id* or -1 if *a_id* not in *a_pops*. + * + * @param a_pops [in] A PoPI::Database to retrived the particle's index from. + * @param a_id [in] The GNDS PoPs id of the particle whose index is requested. + * + * @return The *index*. + ***********************************************************************************************************/ - if( *p == '_' ) { - p++; - switch( *p ) { - case 'e' : - p++; - level = (int) strtol( p, &e, 10 ); - if( *e != 0 ) smr_setReportError2( smr, smr_unknownID, 1, "Failed to convert level to integer in particle name %s", name ); - break; - case 'c' : - level = MCGIDI_particleLevel_continuum; - break; - case 's' : - level = MCGIDI_particleLevel_sum; - break; - default : - smr_setReportError2( smr, smr_unknownID, 0, "invalid 'natural': %s", name ); +LUPI_HOST int MCGIDI_popsIndex( PoPI::Database const &a_pops, std::string const &a_id ) { + + if( !a_pops.exists( a_id ) ) return( -1 ); + return( a_pops[a_id] ); +} + +/* *********************************************************************************************************//** + * @param a_vector [in] The GIDI::Vector whose contents are coped to a MCGIGI::Vector. + * + * @return The MCGIGI::Vector. + ***********************************************************************************************************/ + + +LUPI_HOST Vector GIDI_VectorDoublesToMCGIDI_VectorDoubles( GIDI::Vector a_vector ) { + + Vector vector( a_vector.size( ) ); + + for( std::size_t i1 = 0; i1 < a_vector.size( ); ++i1 ) vector[i1] = a_vector[i1]; + + return( vector ); +} + +/* *********************************************************************************************************//** + * Adds the items in Vector *a_from* to the set *a_to*. + * + * @param a_to [in] The list of ints to add to the set. + * @param a_from [in] The set to add the ints to. + ***********************************************************************************************************/ + +LUPI_HOST void addVectorItemsToSet( Vector const &a_from, std::set &a_to ) { + + for( Vector::const_iterator iter = a_from.begin( ); iter != a_from.end( ); ++iter ) a_to.insert( *iter ); +} + +/* *********************************************************************************************************//** + * This function returns a particle kinetic energy from its mass and beta (i.e., v/c) using a relativistic formula. + * + * @param a_mass_unitOfEnergy [in] The particle's mass in units of energy. + * @param a_particleBeta [in] The particle's velocity divided by the speed of light (i.e., beta = v/c). + * + * @return The relativistic kinetic energy of the particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double particleKineticEnergy( double a_mass_unitOfEnergy, double a_particleBeta ) { + + if( a_particleBeta < 1e-4 ) return( 0.5 * a_mass_unitOfEnergy * a_particleBeta * a_particleBeta ); + + return( a_mass_unitOfEnergy * ( 1.0 / sqrt( 1.0 - a_particleBeta * a_particleBeta ) - 1.0 ) ); +} + + +/* *********************************************************************************************************//** + * This function is like particleKineticEnergy except that *a_particleBeta2* is beta squared (i.e., (v/c)^2). + * + * @param a_mass_unitOfEnergy [in] The particle's mass in units of energy. + * @param a_particleBeta2 [in] The square of beta (i.e., beta^2 where beta = v/c). + * + * @return The relativistic kinetic energy of the particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double particleKineticEnergyFromBeta2( double a_mass_unitOfEnergy, double a_particleBeta2 ) { + + if( a_particleBeta2 < 1e-8 ) return( 0.5 * a_mass_unitOfEnergy * a_particleBeta2 ); + + return( a_mass_unitOfEnergy * ( 1.0 / sqrt( 1.0 - a_particleBeta2 ) - 1.0 ) ); +} + +/* *********************************************************************************************************//** + * This function returns the boost speed required to boost to the center-of-mass for a projectile hitting a target. + * + * @param a_massProjectile [in] The mass of the projectile in energy units. + * @param a_kineticEnergyProjectile [in] The kinetic energy of the projectile. + * @param a_massTarget [in] The mass of the target in energy units. + * + * @return The relativistic kinetic energy of the particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double boostSpeed( double a_massProjectile, double a_kineticEnergyProjectile, double a_massTarget ) { + + double betaProjectile = MCGIDI_particleBeta( a_massProjectile, a_kineticEnergyProjectile ); + + return( betaProjectile / ( 1.0 + a_massTarget / ( a_massProjectile + a_kineticEnergyProjectile ) ) ); +} + +/* *********************************************************************************************************//** + * This function determines the mu value(s) in the center-of-mass frame for a specified mu value in the lab frame for a + * product with speed *a_productBeta* and a boost speed of *a_productBeta*. The returned value is the number of mu values + * in the center-of-mass frame. The return value can be 0, 1 or 2. *a_muMinus* and *a_JacobianMinus* are undefined when the + * returned value is less than 2. *a_muPlus* and *a_JacobianPlus* are undefined when the returned value is 0. + * + * @param a_muLab [in] The mu specified mu value in the lab frame. + * @param a_boostBeta [in] The boost speed from the lab from to the center-of-mass frame in units of the speed-of-light. + * @param a_productBeta [in] The speed of the product in the center-of-mass frame in units of the speed-of-light. + * @param a_muPlus [in] The first mu value if the returned is greater than 0. + * @param a_JacobianPlus [in] The partial derivative of mu_com with respect to mu_lab at a_muPlus. + * @param a_muMinus [in] The second mu value if the returned value is 2. + * @param a_JacobianMinus [in] The partial derivative of mu_com with respect to mu_lab at a_muMinus. + * + * @return The number of returned center-of-mass frame mu values. Can be 0, 1 or 2. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int muCOM_From_muLab( double a_muLab, double a_boostBeta, double a_productBeta, double &a_muPlus, double &a_JacobianPlus, + double &a_muMinus, double &a_JacobianMinus ) { + + int numberOfSolutions = 0; + double boostBeta2 = a_boostBeta * a_boostBeta; + double productBeta2 = a_productBeta * a_productBeta; + double muLab2 = a_muLab * a_muLab; + double oneMinusMuLab2 = 1.0 - muLab2; + double oneMinusBoostBeta2 = 1.0 - boostBeta2; + double oneMinusBoostBeta2MuLab2 = 1.0 - boostBeta2 * muLab2; + + a_muPlus = a_muLab; // Handles case when a_productBeta is 0.0 or a_muLab is +/-1.0. Actually, when a_productBeta is 0.0 it is not defined. + a_muMinus = 0.0; + + if( ( a_productBeta == 0.0 ) || ( a_muLab == 1.0 ) ) return( 1 ); + + if( a_productBeta >= a_boostBeta ) { // Intentionally treating case where a_productBeta == a_boostBeta as one solution even though is it + numberOfSolutions = 1; } + else { + if( a_muLab > 0.0 ) { // Only have solutions for positive mu. The next expression only test mu^2 and therefore treats negative mu like positive mu. + if( productBeta2 * oneMinusBoostBeta2MuLab2 > boostBeta2 * oneMinusMuLab2 ) numberOfSolutions = 2; // This ignores the case for numberOfSolutions = 1 as it probabily will never happen. + } + } + + if( numberOfSolutions == 0 ) return( 0 ); + + double sqrt_b2minus4ac = sqrt( oneMinusBoostBeta2 * ( productBeta2 * oneMinusBoostBeta2MuLab2 - boostBeta2 * oneMinusMuLab2 ) ); + double minusbTerm = a_boostBeta * oneMinusMuLab2; + double inv2a = 1.0 / ( a_productBeta * oneMinusBoostBeta2MuLab2 ); + + a_muPlus = ( a_muLab * sqrt_b2minus4ac - minusbTerm ) * inv2a; + a_muMinus = ( -a_muLab * sqrt_b2minus4ac - minusbTerm ) * inv2a; // This is meaningless when numberOfSolutions is not 1, but why add an if test. + + double JacobianTerm1 = 2.0 * boostBeta2 * a_muLab / oneMinusBoostBeta2MuLab2; + double JacobianTerm2 = 2.0 * a_muLab * a_boostBeta / ( a_productBeta * oneMinusBoostBeta2MuLab2 ); + double JacobianTerm3 = productBeta2 * ( 1.0 - 2.0 * boostBeta2 * muLab2 ) - boostBeta2 * ( 1.0 - 2.0 * muLab2 ); + JacobianTerm3 *= oneMinusBoostBeta2 / ( a_productBeta * oneMinusBoostBeta2MuLab2 * sqrt_b2minus4ac ); + + a_JacobianPlus = fabs( a_muPlus * JacobianTerm1 + JacobianTerm2 + JacobianTerm3 ); + a_JacobianMinus = fabs( a_muMinus * JacobianTerm1 + JacobianTerm2 - JacobianTerm3 ); + + return( numberOfSolutions ); +} + +/* *********************************************************************************************************//** + * This function returns a unique integer for the **Distributions::Type**. For internal use when broadcasting a + * distribution for MPI and GPUs needs. + * + * @param a_type [in] The distribution's type. + * + * @return Returns a unique integer for the distribution type. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int distributionTypeToInt( Distributions::Type a_type ) { + + int distributionType = 0; + + switch( a_type ) { + case Distributions::Type::none : + distributionType = 0; + break; + case Distributions::Type::unspecified : + distributionType = 1; + break; + case Distributions::Type::angularTwoBody : + distributionType = 2; + break; + case Distributions::Type::KalbachMann : + distributionType = 3; + break; + case Distributions::Type::uncorrelated : + distributionType = 4; + break; + case Distributions::Type::energyAngularMC : + distributionType = 5; + break; + case Distributions::Type::angularEnergyMC : + distributionType = 6; + break; + case Distributions::Type::coherentPhotoAtomicScattering : + distributionType = 7; + break; + case Distributions::Type::incoherentPhotoAtomicScattering : + distributionType = 8; + break; + case Distributions::Type::pairProductionGamma : + distributionType = 9; + break; + case Distributions::Type::coherentElasticTNSL : + distributionType = 10; + break; + case Distributions::Type::incoherentElasticTNSL : + distributionType = 11; + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron : + distributionType = 12; + break; + case Distributions::Type::branching3d : + distributionType = 13; + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering : + distributionType = 14; + break; + } + + return( distributionType ); +} + +/* *********************************************************************************************************//** + * This function returns the **Distributions::Type** corresponding to the integer returned by **distributionTypeToInt**. + * + * @param a_type [in] The value returned by **distributionTypeToInt**. + * + * @return The **Distributions::Type** corresponding to *a_type*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Distributions::Type intToDistributionType( int a_type ) { + + Distributions::Type type = Distributions::Type::none; + + switch( a_type ) { + case 0 : + type = Distributions::Type::none; + break; + case 1 : + type = Distributions::Type::unspecified; + break; + case 2 : + type = Distributions::Type::angularTwoBody; + break; + case 3 : + type = Distributions::Type::KalbachMann; + break; + case 4 : + type = Distributions::Type::uncorrelated; + break; + case 5 : + type = Distributions::Type::energyAngularMC; + break; + case 6 : + type = Distributions::Type::angularEnergyMC; + break; + case 7 : + type = Distributions::Type::coherentPhotoAtomicScattering; + break; + case 8 : + type = Distributions::Type::incoherentPhotoAtomicScattering; + break; + case 9 : + type = Distributions::Type::pairProductionGamma; + break; + case 10 : + type = Distributions::Type::coherentElasticTNSL; + break; + case 11 : + type = Distributions::Type::incoherentElasticTNSL; + break; + case 12 : + type = Distributions::Type::incoherentPhotoAtomicScatteringElectron; + break; + case 13 : + type = Distributions::Type::branching3d; + break; + case 14 : + type = Distributions::Type::incoherentBoundToFreePhotoAtomicScattering; + break; + default: + LUPI_THROW( "intToDistributionType: unsupported distribution type." ); + } + + return( type ); +} + +/* *********************************************************************************************************//** + * This method serializes *a_products* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *a_products* or unpack *a_products* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + * @param a_products [in] The products to serialize. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void serializeProducts( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_products ) { + + std::size_t vectorSize = a_products.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_products.resize( vectorSize, &a_buffer.m_placement ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( a_buffer.m_placement != nullptr ) { + a_products[vectorIndex] = new(a_buffer.m_placement) Product; + a_buffer.incrementPlacement( sizeof( Product ) ); + } + else { + a_products[vectorIndex] = new Product; + } } } - else { - smr_setReportError2( smr, smr_unknownID, 0, "invalid level specifier: %s", name ); + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += a_products.internalSize( ); + a_buffer.incrementPlacement( sizeof( Product ) * vectorSize ); } - return( level ); -} -/* -************************************************************ -*/ -char const *MCGIDI_misc_pointerToTOMAttributeIfAllOk( statusMessageReporting *smr, const char *path, int required, - xDataTOM_attributionList *attributes, const char *name, const char *file, int line ) { - char const *value; - - if( !smr_isOk( smr ) ) return( NULL ); - if( ( value = xDataTOMAL_getAttributesValue( attributes, name ) ) == NULL ) { - if( required ) { - smr_setReportError( smr, NULL, file, line, __func__, smr_unknownID, 1, "element does not have attribute named %s for file = %d", name, path ); - } + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + a_products[vectorIndex]->serialize( a_buffer, a_mode ); } - return( value ); } -/* -************************************************************ -*/ -char const *MCGIDI_misc_pointerToAttributeIfAllOk( statusMessageReporting *smr, xDataXML_element *element, const char *path, int required, - xDataTOM_attributionList *attributes, const char *name, const char *file, int line ) { - char const *value; +/* *********************************************************************************************************//** + * This method serializes *a_delayedNeutrons* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *a_delayedNeutrons* or unpack *a_delayedNeutrons* depending on *a_mode*. + * + * @param a_delayedNeutrons [in] The delayed neutrons to serialize. + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void serializeDelayedNeutrons( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_delayedNeutrons ) { - if( !smr_isOk( smr ) ) return( NULL ); - if( ( value = xDataTOMAL_getAttributesValue( attributes, name ) ) == NULL ) { - if( required ) { - if( element != NULL ) { - MCGIDI_misc_setMessageError_Element( smr, NULL, element, file, line, 1, "element does not have attribute named %s", name ); } + std::size_t vectorSize = a_delayedNeutrons.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_delayedNeutrons.resize( vectorSize, &a_buffer.m_placement ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( a_buffer.m_placement != nullptr ) { + a_delayedNeutrons[vectorIndex] = new(a_buffer.m_placement) DelayedNeutron; + a_buffer.incrementPlacement( sizeof( DelayedNeutron ) ); + } else { - smr_setReportError( smr, NULL, file, line, __func__, smr_unknownID, 1, "element does not have attribute named %s for file = %d", name, path ); + a_delayedNeutrons[vectorIndex] = new DelayedNeutron; } - } + } } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += a_delayedNeutrons.internalSize( ); + a_buffer.incrementPlacement( sizeof( DelayedNeutron ) * vectorSize ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + a_delayedNeutrons[vectorIndex]->serialize( a_buffer, a_mode ); } - return( value ); } -/* -************************************************************ -*/ -int MCGIDI_misc_setMessageError_Element( statusMessageReporting *smr, void *userInterface, xDataXML_element *element, const char *file, int line, int code, - const char *fmt, ... ) { - int status = 0; - va_list args; - char *msg; +/* *********************************************************************************************************//** + * This method serializes *a_Qs* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *a_Qs* or unpack *a_Qs* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + * @param a_Qs [in] The Q functions to serialize. + ***********************************************************************************************************/ - va_start( args, fmt ); - msg = smr_vallocateFormatMessage( fmt, &args ); - va_end( args ); - if( msg == NULL ) { - status = 1; - va_start( args, fmt ); - smr_vsetReportError( smr, userInterface, file, line, __func__, smr_unknownID, code, fmt, &args ); - va_end( args ); } - else { - status = smr_setReportError( smr, userInterface, file, line, __func__, smr_unknownID, code, "%s for element %s", msg, element->name ); - smr_freeMemory( (void **) &msg ); +LUPI_HOST_DEVICE void serializeQs( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, Vector &a_Qs ) { + + std::size_t vectorSize = a_Qs.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + a_Qs.resize( vectorSize, &a_buffer.m_placement ); } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += a_Qs.internalSize( ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + a_Qs[vectorIndex] = serializeFunction1d_d1( a_buffer, a_mode, a_Qs[vectorIndex] ); } - return( status ); } -/* -************************************************************ -*/ -xDataTOM_Int MCGIDI_misc_binarySearch( xDataTOM_Int n, double *ds, double d ) { -/* -* Returns -2 is d < first point of ds, -1 if > last point of ds and the lower index of ds otherwise. -*/ - xDataTOM_Int imin = 0, imid, imax = n - 1; - - if( d < ds[0] ) return( -2 ); - if( d > ds[n-1] ) return( -1 ); - while( 1 ) { // Loop checking, 11.06.2015, T. Koi - imid = ( imin + imax ) >> 1; - if( imid == imin ) break; - if( d < ds[imid] ) { - imax = imid; } - else { - imin = imid; - } - } - return( imin ); -} -/* -************************************************************ -*/ -char *MCGIDI_misc_getAbsPath( statusMessageReporting *smr, const char *fileName ) { -/* -* User must free returned string. -*/ - int n = (int) strlen( fileName ) + 1, nCwd = 0; - char *absPath, cwd[4 * 1024] = "", *p, *needle; - - if( fileName[0] != '/' ) { - //if( getcwd( cwd, sizeof( cwd ) + 1 ) == NULL ) { - //TK modified above line for compiler(gcc.4.8) warning message - if( getcwd( cwd, sizeof( cwd ) ) == NULL ) { - smr_setReportError2p( smr, smr_unknownID, -1, "hardwired cwd too small" ); - return( NULL ); - } - nCwd = (int) strlen( cwd ); - n += nCwd + 1; /* cwd + '/'. */ - } - if( ( absPath = (char *) smr_malloc2( smr, n, 0, "absPath" ) ) == NULL ) return( NULL ); - if( fileName[0] != '/' ) { - strcpy( absPath, cwd ); - strcat( absPath, "/" ); - strcat( absPath, fileName ); } - else { - strcpy( absPath, fileName ); - } - - while( 1 ) { /* Remove all ./ from path. */ // Loop checking, 11.06.2015, T. Koi - if( ( needle = strstr( absPath, "/./" ) ) == NULL ) break; - p = needle; - for( needle += 2; *needle; p++, needle++ ) *p = *needle; - *p = 0; - } - while( 1 ) { /* Remove all ../ from path. */ // Loop checking, 11.06.2015, T. Koi - if( ( needle = strstr( absPath, "/../" ) ) == NULL ) break; - p = needle - 1; - while( ( p > absPath ) && ( *p != '/' ) ) p--; // Loop checking, 11.06.2015, T. Koi - if( *p != '/' ) break; /* This should not happen if path is legit, I think, and I do not know what to do so will leave it. */ - if( p == absPath ) break; /* Ditto. */ - for( needle += 3; *needle; p++, needle++ ) *p = *needle; - *p = 0; - } - return( absPath ); -} -/* -************************************************************ -*/ -int MCGIDI_misc_copyXMLAttributesToTOM( statusMessageReporting *smr, xDataTOM_attributionList *TOM, xDataXML_attributionList *XML ) { - - int i; - xDataXML_attribute *attribute; - - xDataTOMAL_initial( smr, TOM ); - for( i = 0; ; i++ ) { - if( ( attribute = xDataXML_attributeByIndex( XML, i ) ) == NULL ) break; - if( xDataTOMAL_addAttribute( smr, TOM, attribute->name, attribute->value ) != 0 ) goto err; - } - return( 0 ); - -err: - xDataTOMAL_release( TOM ); - return( 1 ); -} -/* -************************************************************ -*/ -enum xDataTOM_frame MCGIDI_misc_getProductFrame( statusMessageReporting *smr, xDataTOM_element *frameElement ) { - - char const *frameString; - enum xDataTOM_frame frame = xDataTOM_frame_invalid; - - if( ( frameString = xDataTOM_getAttributesValueInElement( frameElement, MCGIDI_token_productFrame ) ) != NULL ) { - if( ( frame = xDataTOM_axis_stringToFrame( smr, frameString ) ) == xDataTOM_frame_invalid ) { - smr_setReportError2( smr, smr_unknownID, 1, "Invalid frame = '%s'", frameString ); - } - } - return( frame ); -} -/* -************************************************************ -*/ -int MCGIDI_misc_PQUStringToDouble( statusMessageReporting *smr, char const *str, char const *unit, double conversion, double *value ) { -/* -* Currently, white spaces are not allowed after the unit. -* -* Examples of allowed strings are: "2.39e6 eV", " 2.39e6eV" and " 2.39e6 eV". -*/ - char const *s = str; - char *e; - while( isspace( *s ) ) s++; // Loop checking, 11.06.2015, T. Koi - *value = strtod( s, &e ) * conversion; - if( e == s ) { - smr_setReportError2( smr, smr_unknownID, 1, "no number at start of string = <%s>", str ); - return( 1 ); - } - while( isspace( *e ) ) e++; // Loop checking, 11.06.2015, T. Koi - if( strcmp( e, unit ) != 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "unit = '%s' not '%s' in '%s'", e, unit, str ); - return( 1 ); - } - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_misc_PQUStringToDoubleInUnitOf( statusMessageReporting *smr, char const *str, char const *toUnit, double *value ) { -/* -* Currently, white spaces are not allowed after the unit. -* -* Examples of allowed strings are: "2.39e6 eV", " 2.39e6eV" and " 2.39e6 eV". -*/ - char const *s1 = str; - char *e1; - double factor; +/* *********************************************************************************************************//** + * + * @param a_fissionResiduals [in] A reference to the GIDI::Construction::FissionResiduals reference serialize. + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ - while( isspace( *s1 ) ) s1++; // Loop checking, 11.06.2015, T. Koi - *value = strtod( s1, &e1 ); - if( e1 == s1 ) { - smr_setReportError2( smr, smr_unknownID, 1, "no number at start of string = <%s>", str ); - return( 1 ); - } - while( isspace( *e1 ) ) e1++; // Loop checking, 11.06.2015, T. Koi +LUPI_HOST_DEVICE void serializeFissionResiduals( GIDI::Construction::FissionResiduals &a_fissionResiduals, + LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { - factor = MCGIDI_misc_getUnitConversionFactor( smr, e1, toUnit ); - *value *= factor; - return( !smr_isOk( smr ) ); -} -/* -************************************************************ -*/ -double MCGIDI_misc_getUnitConversionFactor( statusMessageReporting *smr, char const *fromUnit, char const *toUnit ) { -/* -* This is a kludge until units are better supported. -*/ - if( strcmp( fromUnit, toUnit ) == 0 ) return( 1.0 ); + int fissionResidualsInt = 0; - if( strcmp( fromUnit, "eV" ) == 0 ) { - if( strcmp( toUnit, "MeV" ) == 0 ) return( 1e-6 ); } - else if( strcmp( fromUnit, "MeV" ) == 0 ) { - if( strcmp( toUnit, "eV" ) == 0 ) return( 1e+6 ); } - else if( strcmp( fromUnit, "1/eV" ) == 0 ) { - if( strcmp( toUnit, "1/MeV" ) == 0 ) return( 1e+6 ); } - else if( strcmp( fromUnit, "1/MeV" ) == 0 ) { - if( strcmp( toUnit, "1/eV" ) == 0 ) return( 1e-6 ); } - else if( strcmp( fromUnit, "K" ) == 0 ) { - if( strcmp( toUnit, "MeV/k" ) == 0 ) return( 8.617343183775137e-11 ); - } - - smr_setReportError2( smr, smr_unknownID, 1, "Cannot convert unit '%s' to unit '%s'", fromUnit, toUnit ); - return( 1.0 ); -} -/* -************************************************************ -*/ -ptwXYPoints *MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( statusMessageReporting *smr, xDataTOM_XYs *XYs, - ptwXY_interpolation interpolation, char const *toUnits[2] ) { - - int length; - double *data; - char const *fromUnits[2]; - - fromUnits[0] = xDataTOM_subAxes_getUnit( smr, &(XYs->subAxes), 0 ); - if( !smr_isOk( smr ) ) return( NULL ); - fromUnits[1] = xDataTOM_subAxes_getUnit( smr, &(XYs->subAxes), 1 ); - if( !smr_isOk( smr ) ) return( NULL ); - - length = xDataTOM_XYs_getData( XYs, &data ); - - return( MCGIDI_misc_Data2ptwXYPointsInUnitsOf( smr, interpolation, length, data, fromUnits, toUnits ) ); -} -/* -************************************************************ -*/ -ptwXYPoints *MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( statusMessageReporting *smr, xDataTOM_element *linear, char const *toUnits[2] ) { - - int length; - double *data; - xDataTOM_axes *axes = &(linear->xDataInfo.axes); - char const *fromUnits[2]; - ptwXY_interpolation interpolation; - - if( axes->numberOfAxes != 2 ) { - smr_setReportError2( smr, smr_unknownID, 1, "axes must have 2 axis, it has %d", axes->numberOfAxes ); - return( NULL ); - } - - if( MCGIDI_fromTOM_interpolation( smr, linear, 0, &interpolation ) != 0 ) return( NULL ); - fromUnits[0] = axes->axis[0].unit; - fromUnits[1] = axes->axis[1].unit; - - length = xDataTOM_XYs_getDataFromXDataInfo( (xDataTOM_xDataInfo *) &(linear->xDataInfo), &data ); - return( MCGIDI_misc_Data2ptwXYPointsInUnitsOf( smr, interpolation, length, data, fromUnits, toUnits ) ); -} -/* -************************************************************ -*/ -static ptwXYPoints *MCGIDI_misc_Data2ptwXYPointsInUnitsOf( statusMessageReporting *smr, ptwXY_interpolation interpolation, - int length, double *data, char const *fromUnits[2], char const *toUnits[2] ) { - - double xFactor, yFactor; - ptwXYPoints *ptwXY = NULL; - nfu_status status; - - xFactor = MCGIDI_misc_getUnitConversionFactor( smr, fromUnits[0], toUnits[0] ); - if( !smr_isOk( smr ) ) goto err; - yFactor = MCGIDI_misc_getUnitConversionFactor( smr, fromUnits[1], toUnits[1] ); - if( !smr_isOk( smr ) ) goto err; - - - ptwXY = ptwXY_create( interpolation, NULL, 2., 1e-3, length, 10, length, data, &status, 0 ); - if( status != nfu_Okay ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_create err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - - if( ( xFactor != 1. ) || ( yFactor != 1. ) ) { - if( ( status = ptwXY_scaleOffsetXAndY( ptwXY, xFactor, 0., yFactor, 0. ) ) != nfu_Okay ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_scaleOffsetXAndY err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - } - - return( ptwXY ); - -err: - if( ptwXY != NULL ) ptwXY_free( ptwXY ); - return( NULL ); -} -/* -************************************************************ -*/ -void MCGIDI_misc_updateTransportabilitiesMap( transportabilitiesMap *transportabilities, int PoPID, enum MCGIDI_transportability transportability ) { - - transportabilitiesMap::iterator iter = transportabilities->find( PoPID ); - - if( iter != transportabilities->end( ) ) { - switch ( iter->second ) { - case MCGIDI_transportability_unknown : + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( a_fissionResiduals ) { + case GIDI::Construction::FissionResiduals::none : break; - case MCGIDI_transportability_none : - switch( transportability ) { - case MCGIDI_transportability_unknown : - case MCGIDI_transportability_none : - transportability = MCGIDI_transportability_none; - break; - case MCGIDI_transportability_partial : - break; - case MCGIDI_transportability_full : - transportability = MCGIDI_transportability_partial; - break; - } + case GIDI::Construction::FissionResiduals::ENDL99120 : + fissionResidualsInt = 1; break; - case MCGIDI_transportability_partial : - transportability = MCGIDI_transportability_partial; - break; - case MCGIDI_transportability_full : - switch( transportability ) { - case MCGIDI_transportability_none : - case MCGIDI_transportability_partial : - transportability = MCGIDI_transportability_partial; - break; - case MCGIDI_transportability_unknown : - case MCGIDI_transportability_full : - break; - } + case GIDI::Construction::FissionResiduals::ENDL99125 : + fissionResidualsInt = 2; break; } } - (*transportabilities)[PoPID] = transportability; -} -/* -************************************************************ -*/ -void MCGIDI_misc_updateTransportabilitiesMap2( transportabilitiesMap *transportabilities, int PoPID, int transportable ) { - MCGIDI_misc_updateTransportabilitiesMap( transportabilities, PoPID, ( transportable ? MCGIDI_transportability_full : MCGIDI_transportability_none ) ); + DATA_MEMBER_INT( fissionResidualsInt, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( fissionResidualsInt ) { + case 0 : + a_fissionResiduals = GIDI::Construction::FissionResiduals::none; + break; + case 1 : + a_fissionResiduals = GIDI::Construction::FissionResiduals::ENDL99120; + break; + case 2 : + a_fissionResiduals = GIDI::Construction::FissionResiduals::ENDL99125; + break; + } + } } -#if defined __cplusplus -} -#endif +/* *********************************************************************************************************//** + * This function returns a std::vector that represents **a_input**. + * + * @param a_input [in] The input for the returned std::vector instance. + * + * @returns A std::vector instance. + ***********************************************************************************************************/ +LUPI_HOST std::vector vectorToSTD_vector( Vector a_input ) { + + std::vector vector( a_input.size( ) ); + + std::size_t index = 0; + for( auto iter = a_input.begin( ); iter != a_input.end( ); ++iter, ++index ) vector[index] = *iter; + + return( vector ); +} + +/* *********************************************************************************************************//** + * This function returns a std::vector that represents **a_input**. + * + * @param a_input [in] The input for the returned std::vector instance. + * + * @returns A std::vector instance. + ***********************************************************************************************************/ + +LUPI_HOST std::vector vectorToSTD_vector( Vector a_input ) { + + std::vector vector( a_input.size( ) ); + + std::size_t index = 0; + for( auto iter = a_input.begin( ); iter != a_input.end( ); ++iter, ++index ) vector[index] = *iter; + + return( vector ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_nuclideGammaBranching.cc b/source/processes/hadronic/models/lend/src/MCGIDI_nuclideGammaBranching.cc new file mode 100644 index 0000000000..d776910bb5 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_nuclideGammaBranching.cc @@ -0,0 +1,171 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/* +============================================================ +================== NuclideGammaBranchInfo ================== +============================================================ +*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE NuclideGammaBranchInfo::NuclideGammaBranchInfo( ) : + m_probability( 0.0 ), + m_photonEmissionProbability( 0.0 ), + m_gammaEnergy( 0.0 ), + m_residualStateIndex( -1 ), + m_residualStateKindIsContinuum( false ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +NuclideGammaBranchInfo::NuclideGammaBranchInfo( PoPI::NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo, + std::map &a_stateNamesToIndices, bool a_makePhotonEmissionProbabilitiesOne ) : + m_probability( a_nuclideGammaBranchInfo.probability( ) ), + m_photonEmissionProbability( a_nuclideGammaBranchInfo.photonEmissionProbability( ) ), + m_gammaEnergy( a_nuclideGammaBranchInfo.gammaEnergy( ) ), + m_residualStateIndex( -1 ), + m_residualStateKindIsContinuum( false ) { + + if( a_makePhotonEmissionProbabilitiesOne ) m_photonEmissionProbability = 1.0; + std::map::iterator iter = a_stateNamesToIndices.find( a_nuclideGammaBranchInfo.residualState( ) ); + if( iter != a_stateNamesToIndices.end( ) ) m_residualStateIndex = iter->second; +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void NuclideGammaBranchInfo::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_probability, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_photonEmissionProbability, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_gammaEnergy, a_buffer, a_mode ); + DATA_MEMBER_INT( m_residualStateIndex, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_residualStateKindIsContinuum, a_buffer, a_mode, bool ); +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The ProtareSingle instance *this* resides in. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ +LUPI_HOST void NuclideGammaBranchInfo::print( LUPI_maybeUnused ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + LUPI_maybeUnused std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + std::cout << a_indent << std::left << std::setw( 17 ) << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), m_probability ) + << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), m_photonEmissionProbability ) + << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), m_gammaEnergy ) + << LUPI::Misc::argumentsToString( a_iFormat.c_str( ), m_residualStateIndex ) << std::endl; +} + +/* +============================================================ +============== NuclideGammaBranchStateInfo ================= +============================================================ +*/ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE NuclideGammaBranchStateInfo::NuclideGammaBranchStateInfo( ) : + m_intid( -1 ), + m_nuclearLevelEnergy( 0.0 ), + m_nuclearLevelEnergyWidth( 0.0 ), + m_multiplicity( 0.0 ), + m_averageGammaEnergy( 0.0 ) { + + m_state[0] = 0; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +NuclideGammaBranchStateInfo::NuclideGammaBranchStateInfo( PoPI::NuclideGammaBranchStateInfo const &a_nuclideGammaBranchingInfo, + std::vector &a_nuclideGammaBranchInfos, + std::map &a_stateNamesToIndices, bool a_makePhotonEmissionProbabilitiesOne, + bool a_zeroNuclearLevelEnergyWidth ) : + m_intid( a_nuclideGammaBranchingInfo.intid( ) ), + m_nuclearLevelEnergy( a_nuclideGammaBranchingInfo.nuclearLevelEnergy( ) ), + m_nuclearLevelEnergyWidth( a_nuclideGammaBranchingInfo.nuclearLevelEnergyWidth( ) ), + m_multiplicity( a_nuclideGammaBranchingInfo.multiplicity( ) ), + m_averageGammaEnergy( a_nuclideGammaBranchingInfo.averageGammaEnergy( ) ) { + + if( a_zeroNuclearLevelEnergyWidth ) m_nuclearLevelEnergyWidth = 0.0; + + strncpy( m_state, a_nuclideGammaBranchingInfo.state( ).c_str( ), sizeof( m_state ) ); + m_state[sizeof( m_state )-1] = 0; + + std::vector const &branches = a_nuclideGammaBranchingInfo.branches( ); + m_branchIndices.reserve( branches.size( ) ); + + for( std::size_t i1 = 0; i1 < branches.size( ); ++i1 ) { + m_branchIndices.push_back( a_nuclideGammaBranchInfos.size( ) ); + a_nuclideGammaBranchInfos.push_back( new NuclideGammaBranchInfo( branches[i1], a_stateNamesToIndices, a_makePhotonEmissionProbabilitiesOne ) ); + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void NuclideGammaBranchStateInfo::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_CHAR_ARRAY( m_state, a_buffer, a_mode ); + DATA_MEMBER_INT( m_intid, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_nuclearLevelEnergy, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_nuclearLevelEnergyWidth, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_multiplicity, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_averageGammaEnergy, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_branchIndices, a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * Print to *std::cout* the content of *this*. This is mainly meant for debugging. + * + * @param a_protareSingle [in] The ProtareSingle instance *this* resides in. + * @param a_indent [in] The buffer to read or write data to depending on *a_mode*. + * @param a_iFormat [in] C printf format specifier for any interger that is printed (e.g., "%3d"). + * @param a_energyFormat [in] C printf format specifier for any interger that is printed (e.g., "%20.12e"). + * @param a_dFormat [in] C printf format specifier for any interger that is printed (e.g., "%14.7e"). + ***********************************************************************************************************/ +LUPI_HOST void NuclideGammaBranchStateInfo::print( LUPI_maybeUnused ProtareSingle const *a_protareSingle, std::string const &a_indent, std::string const &a_iFormat, + LUPI_maybeUnused std::string const &a_energyFormat, std::string const &a_dFormat ) const { + + std::cout << a_indent << std::left << std::setw( 17 ) << m_state << LUPI::Misc::argumentsToString( a_dFormat.c_str( ), m_multiplicity ) << + LUPI::Misc::argumentsToString( a_dFormat.c_str( ), m_averageGammaEnergy ); + for( auto branchIter = m_branchIndices.begin( ); branchIter != m_branchIndices.end( ); ++branchIter ) { + std::cout << LUPI::Misc::argumentsToString( a_iFormat.c_str( ), (*branchIter) ); + } + std::cout << std::endl; +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_outputChannel.cc b/source/processes/hadronic/models/lend/src/MCGIDI_outputChannel.cc index f2e7415765..d1c87d1098 100644 --- a/source/processes/hadronic/models/lend/src/MCGIDI_outputChannel.cc +++ b/source/processes/hadronic/models/lend/src/MCGIDI_outputChannel.cc @@ -1,364 +1,462 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#define _USE_MATH_DEFINES -#include -#include "MCGIDI.h" -#include "MCGIDI_misc.h" +#include "MCGIDI.hpp" -#if defined __cplusplus -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -#endif +namespace MCGIDI { -/* -************************************************************ -*/ -MCGIDI_outputChannel *MCGIDI_outputChannel_new( statusMessageReporting *smr ) { +/*! \class Product + * This class represents a **GNDS** <**outputChannel**> node with only data needed for Monte Carlo transport. + */ - MCGIDI_outputChannel *outputChannel; - if( ( outputChannel = (MCGIDI_outputChannel *) smr_malloc2( smr, sizeof( MCGIDI_outputChannel ), 0, "outputChannel" ) ) == NULL ) return( NULL ); - if( MCGIDI_outputChannel_initialize( smr, outputChannel ) ) outputChannel = MCGIDI_outputChannel_free( smr, outputChannel ); - return( outputChannel ); +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE OutputChannel::OutputChannel( ) : + m_channelType( ChannelType::none ), + m_neutronIndex( -1 ), + m_isFission( false ), + m_hasFinalStatePhotons( false ), + m_Q( nullptr ), + m_products( ), + m_totalDelayedNeutronMultiplicity( nullptr ) { + } -/* -************************************************************ -*/ -int MCGIDI_outputChannel_initialize( statusMessageReporting * /*smr*/, MCGIDI_outputChannel *outputChannel ) { - memset( outputChannel, 0, sizeof( MCGIDI_outputChannel ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_outputChannel *MCGIDI_outputChannel_free( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ) { +/* *********************************************************************************************************//** + * @param a_outputChannel [in] The GIDI::OutputChannel whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + ***********************************************************************************************************/ - MCGIDI_outputChannel_release( smr, outputChannel ); - smr_freeMemory( (void **) &outputChannel ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_outputChannel_release( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ) { +LUPI_HOST OutputChannel::OutputChannel( GIDI::OutputChannel const *a_outputChannel, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles ) : + m_channelType( ChannelType::none ), + m_neutronIndex( a_setupInfo.m_neutronIndex ), + m_isFission( false ), + m_hasFinalStatePhotons( false ), + m_Q( nullptr ), + m_products( ), + m_totalDelayedNeutronMultiplicity( nullptr ) { - int i; + if( a_outputChannel != nullptr ) { + m_channelType = a_outputChannel->twoBody( ) ? ChannelType::twoBody : ChannelType::uncorrelatedBodies; + m_isFission = a_outputChannel->isFission( ); - for( i = 0; i < outputChannel->numberOfProducts; i++ ) MCGIDI_product_release( smr, &(outputChannel->products[i]) ); - smr_freeMemory( (void **) &(outputChannel->products) ); - MCGIDI_outputChannel_initialize( smr, outputChannel ); + m_Q = Functions::parseFunction1d_d1( a_outputChannel->Q( ).get( 0 ) ); + if( a_setupInfo.m_isPairProduction ) { + double domainMin = m_Q->domainMin( ), domainMax = m_Q->domainMax( ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_outputChannel_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_POPs *pops, MCGIDI_outputChannel *outputChannel, - MCGIDI_reaction *reaction, MCGIDI_product *parent ) { - - int n{0}, delayedNeutronIndex{0}; - char const *genre{""}, *Q{""}; - xDataTOM_element *child{nullptr}; - - MCGIDI_outputChannel_initialize( smr, outputChannel ); - - outputChannel->reaction = reaction; - outputChannel->parent = parent; - if( ( genre = xDataTOM_getAttributesValueInElement( element, "genre" ) ) == NULL ) goto err; - if( ( parent != NULL ) && ( strcmp( genre, "NBody" ) ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "decay channel's genre can only be 'uncorreclated' (a.k.a. 'NBody') and not '%s'", genre ); - goto err; - } - if( strcmp( genre, "twoBody" ) == 0 ) { - outputChannel->genre = MCGIDI_channelGenre_twoBody_e; } - else if( strcmp( genre, "NBody" ) == 0 ) { - outputChannel->genre = MCGIDI_channelGenre_uncorrelated_e; } - else if( strcmp( genre, "sumOfRemainingOutputChannels" ) == 0 ) { - outputChannel->genre = MCGIDI_channelGenre_sumOfRemaining_e; } - else { - smr_setReportError2( smr, smr_unknownID, 1, "unsupported genre = '%s'", genre ); - goto err; - } - if( ( Q = xDataTOM_getAttributesValueInElement( element, "Q" ) ) == NULL ) goto err; - outputChannel->QIsFloat = !MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, Q, "MeV", &(outputChannel->Q) ); - - if( ( n = xDataTOM_numberOfElementsByName( smr, element, "product" ) ) == 0 ) { - smr_setReportError2p( smr, smr_unknownID, 1, "outputChannel does not have any products" ); - goto err; - } - if( ( outputChannel->products = (MCGIDI_product *) smr_malloc2( smr, n * sizeof( MCGIDI_product ), 0, "outputChannel->products" ) ) == NULL ) goto err; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "product" ) == 0 ) { - if( MCGIDI_product_parseFromTOM( smr, child, outputChannel, pops, &(outputChannel->products[outputChannel->numberOfProducts]), - &delayedNeutronIndex ) ) goto err; - outputChannel->numberOfProducts++; } - else if( strcmp( child->name, "fissionEnergyReleased" ) == 0 ) { /* ????????? Need to support. */ - continue; } - else { - printf( "outputChannel child not currently supported = %s\n", child->name ); + delete m_Q; + m_Q = new Functions::Constant1d( domainMin, domainMax, 0.0 ); } - } - if( outputChannel->genre == MCGIDI_channelGenre_twoBody_e ) { - double projectileMass_MeV, targetMass_MeV, productMass_MeV, residualMass_MeV; + a_setupInfo.m_Q = m_Q->evaluate( 0 ); // Needed for NBodyPhaseSpace. - projectileMass_MeV = MCGIDI_reaction_getProjectileMass_MeV( smr, reaction ); - targetMass_MeV = MCGIDI_reaction_getTargetMass_MeV( smr, reaction ); - productMass_MeV = MCGIDI_product_getMass_MeV( smr, &(outputChannel->products[0]) ); - residualMass_MeV = MCGIDI_product_getMass_MeV( smr, &(outputChannel->products[1]) ); - - //TK 17-11-10 for v1.3 - //A temporary fix for emission of gamma(2.2MeV) from n captured by H - // capture gamma D - if ( reaction->ENDF_MT == 102 && productMass_MeV == 0 && ( outputChannel->products[1].pop->A == 2 && outputChannel->products[1].pop->Z == 1 ) ) { - //include/PoPs_data.h:#define e_Mass 5.4857990943e-4 /* electron mass in AMU */ - residualMass_MeV += 5.4857990943e-4*MCGIDI_AMU2MeV; + GIDI::Suite const &products = a_outputChannel->products( ); + if( m_channelType == ChannelType::twoBody ) { + if( !a_setupInfo.m_protare.isTNSL_ProtareSingle( ) ) { + GIDI::Product const *product = products.get( 1 ); + a_setupInfo.m_product2Mass = product->particle( ).mass( "MeV/c**2" ); // Includes nuclear excitation energy. + } } - MCGIDI_product_setTwoBodyMasses( smr, &(outputChannel->products[0]), projectileMass_MeV, targetMass_MeV, productMass_MeV, residualMass_MeV ); + bool electronPresent = false; + std::size_t size = 0; + std::set productsToDo; + for( std::size_t i1 = 0; i1 < a_outputChannel->products( ).size( ); ++i1 ) { + GIDI::Product const *product = products.get( i1 ); + + if( product->particle( ).ID( ) == PoPI::IDs::electron ) electronPresent = true; + if( electronPresent && !a_setupInfo.m_isPhotoAtomicIncoherentScattering ) continue; + if( !electronPresent && !product->isCompleteParticle( ) && ( product->outputChannel( ) == nullptr ) ) continue; + + if( ( product->outputChannel( ) != nullptr ) || a_settings.sampleNonTransportingParticles( ) || a_particles.hasParticle( product->particle( ).ID( ) ) ) + productsToDo.insert( i1 ); + } + size = productsToDo.size( ); + if( a_setupInfo.m_isPairProduction ) { + size += 2; + size = 2; // This is a kludge until the ENDL to GNDS translator is fixed. + } + + bool addIncoherentPhotoAtomicScatteringElectron = false; + if( a_setupInfo.m_isPhotoAtomicIncoherentScattering && a_particles.hasParticle( PoPI::IDs::electron ) ) { // May need to add electron for legacy GNDS files. + if( !electronPresent ) { +// FIXME: BRB 7/Nov/2024, Why is an electron added, this is incoherent atomic scattering which does not emit an electron? + addIncoherentPhotoAtomicScatteringElectron = true; + ++size; + } + } + m_products.reserve( size ); + + if( a_setupInfo.m_isPairProduction ) { + std::string ID( PoPI::IDs::photon ); + std::string label = ID; + + Product *product = new Product( a_setupInfo.m_popsUser, ID, label ); + product->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) ); + product->distribution( new Distributions::PairProductionGamma( a_setupInfo, true ) ); + m_products.push_back( product ); + + label += "__a"; + product = new Product( a_setupInfo.m_popsUser, ID, label ); + product->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) ); + product->distribution( new Distributions::PairProductionGamma( a_setupInfo, false ) ); + m_products.push_back( product ); + } + + for( std::size_t i1 = 0; i1 < a_outputChannel->products( ).size( ); ++i1 ) { + if( productsToDo.find( i1 ) == productsToDo.end( ) ) continue; + + GIDI::Product const *product = products.get( i1 ); + + if( a_setupInfo.m_isPairProduction ) { + if( !a_settings.sampleNonTransportingParticles( ) ) continue; + if( a_setupInfo.m_protare.targetIntid( ) != MCGIDI_popsIntid( a_setupInfo.m_pops, product->particle( ).ID( ) ) ) continue; + } + a_setupInfo.m_twoBodyOrder = TwoBodyOrder::notApplicable; + if( m_channelType == ChannelType::twoBody ) a_setupInfo.m_twoBodyOrder = ( ( i1 == 0 ? TwoBodyOrder::firstParticle : TwoBodyOrder::secondParticle ) ); + m_products.push_back( new Product( product, a_setupInfo, a_settings, a_particles, m_isFission ) ); + + if( addIncoherentPhotoAtomicScatteringElectron && ( product->particle( ).ID( ) == PoPI::IDs::photon ) ) { + addIncoherentPhotoAtomicScatteringElectron = false; + + Product *product2 = new Product( a_setupInfo.m_pops, PoPI::IDs::electron, PoPI::IDs::electron ); + product2->setMultiplicity( new Functions::Constant1d( a_setupInfo.m_domainMin, a_setupInfo.m_domainMax, 1.0, 0.0 ) ); + product2->distribution( new Distributions::IncoherentPhotoAtomicScatteringElectron( a_setupInfo ) ); + m_products.push_back( product2 ); + } + } + + if( ( a_settings.delayedNeutrons( ) == GIDI::Transporting::DelayedNeutrons::on ) && a_particles.hasParticle( PoPI::IDs::neutron ) ) { + GIDI::FissionFragmentData const &fissionFragmentData = a_outputChannel->fissionFragmentData( ); + GIDI::Suite const &delayedNeutrons = fissionFragmentData.delayedNeutrons( ); + + if( delayedNeutrons.size( ) > 0 ) { + bool missingData = false; + GIDI::Axes axes; + GIDI::Functions::XYs1d totalDelayedNeutronMultiplicity( axes, ptwXY_interpolationLinLin ); + + m_delayedNeutrons.reserve( delayedNeutrons.size( ) ); + for( std::size_t i1 = 0; i1 < delayedNeutrons.size( ); ++i1 ) { + GIDI::DelayedNeutron const *delayedNeutron = delayedNeutrons.get( i1 ); + GIDI::Product const &product = delayedNeutron->product( ); + GIDI::Suite const &multiplicity = product.multiplicity( ); + + GIDI::Functions::Function1dForm const *form1d = multiplicity.get( 0 ); + + if( form1d->type( ) == GIDI::FormType::unspecified1d ) { + missingData = true; + break; + } + + if( form1d->type( ) != GIDI::FormType::XYs1d ) { + std::cerr << "OutputChannel::OutputChannel: GIDI::DelayedNeutron multiplicity type != GIDI::FormType::XYs1d" << std::endl; + missingData = true; + break; + } + + GIDI::Functions::XYs1d const *multiplicityXYs1d = static_cast( form1d ); + totalDelayedNeutronMultiplicity += *multiplicityXYs1d; + + m_delayedNeutrons.push_back( new DelayedNeutron( static_cast( i1 ), delayedNeutron, a_setupInfo, a_settings, a_particles ) ); + } + if( !missingData ) m_totalDelayedNeutronMultiplicity = new Functions::XYs1d( totalDelayedNeutronMultiplicity ); + } + } + + m_hasFinalStatePhotons = a_setupInfo.m_hasFinalStatePhotons; } - - return( 0 ); - -err: - MCGIDI_outputChannel_release( smr, outputChannel ); - return( 1 ); } -/* -************************************************************ -*/ -int MCGIDI_outputChannel_numberOfProducts( MCGIDI_outputChannel *outputChannel ) { - return( outputChannel->numberOfProducts ); +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE OutputChannel::~OutputChannel( ) { + + delete m_Q; + for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) delete m_products[i1]; + + delete m_totalDelayedNeutronMultiplicity; + for( std::size_t i1 = 0; i1 < m_delayedNeutrons.size( ); ++i1 ) delete m_delayedNeutrons[i1]; } -/* -************************************************************ -*/ -MCGIDI_product *MCGIDI_outputChannel_getProductAtIndex( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, int i ) { - if( ( i < 0 ) || ( i >= outputChannel->numberOfProducts ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad product index = %d: outputChannel as only %d products", i, outputChannel->numberOfProducts ); - return( NULL ); +/* *********************************************************************************************************//** + * This method returns the final Q for *this* by getting its final Q plus any sub-output channel's finalQ. + * + * @param a_x1 [in] The energy of the projectile. + * + * @return The Q-value at product energy *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double OutputChannel::finalQ( double a_x1 ) const { + + double final_Q = m_Q->evaluate( a_x1 ); + + for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) final_Q += m_products[i1]->finalQ( a_x1 ); + return( final_Q ); +} + +/* *********************************************************************************************************//** + * This method returns *true* if the output channel or any of its sub-output channels is a fission channel and *false* otherwise. + * + * @return *true* if *this* or any sub-output channel is a fission channel and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool OutputChannel::hasFission( ) const { + + if( m_isFission ) return( true ); + for( std::size_t i1 = 0; i1 < m_products.size( ); ++i1 ) { + if( m_products[i1]->hasFission( ) ) return( true ); } - return( &(outputChannel->products[i]) ); + return( false ); } -/* -************************************************************ -*/ -int MCGIDI_outputChannel_getDomain( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, double *EMin, double *EMax ) { - if( outputChannel->reaction != NULL ) return( MCGIDI_reaction_getDomain( smr, outputChannel->reaction, EMin, EMax ) ); - return( MCGIDI_product_getDomain( smr, outputChannel->parent, EMin, EMax ) ); +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void OutputChannel::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); } -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_outputChannel_getTargetHeated( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ) { - if( outputChannel->reaction != NULL ) return( MCGIDI_reaction_getTargetHeated( smr, outputChannel->reaction ) ); - return( MCGIDI_product_getTargetHeated( smr, outputChannel->parent ) ); -} -/* -************************************************************ -*/ -double MCGIDI_outputChannel_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ) { - - if( outputChannel->reaction != NULL ) return( MCGIDI_reaction_getProjectileMass_MeV( smr, outputChannel->reaction ) ); - return( MCGIDI_product_getProjectileMass_MeV( smr, outputChannel->parent ) ); -} -/* -************************************************************ -*/ -double MCGIDI_outputChannel_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel ) { - - if( outputChannel->reaction != NULL ) return( MCGIDI_reaction_getTargetMass_MeV( smr, outputChannel->reaction ) ); - return( MCGIDI_product_getTargetMass_MeV( smr, outputChannel->parent ) ); -} -/* -************************************************************ -*/ -double MCGIDI_outputChannel_getQ_MeV( statusMessageReporting * /*smr*/, MCGIDI_outputChannel *outputChannel, double /*e_in*/ ) { - - return( outputChannel->Q ); -} -/* -************************************************************ -*/ -double MCGIDI_outputChannel_getFinalQ( statusMessageReporting *smr, MCGIDI_outputChannel *outputChannel, double e_in ) { - - int iProduct; - double Q = outputChannel->Q; - MCGIDI_product *product; - - for( iProduct = 0; iProduct < outputChannel->numberOfProducts; iProduct++ ) { - product = &(outputChannel->products[iProduct]); - if( product->decayChannel.genre != MCGIDI_channelGenre_undefined_e ) Q += MCGIDI_outputChannel_getFinalQ( smr, &(product->decayChannel), e_in ); - if( !smr_isOk( smr ) ) break; - } - return( Q ); -} -/* -************************************************************ -*/ -int MCGIDI_outputChannel_sampleProductsAtE(statusMessageReporting* smr, - MCGIDI_outputChannel* outputChannel, - MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo* decaySamplingInfo, - MCGIDI_sampledProductsDatas* productDatas, - double *masses_ ) -{ - int i1; - int multiplicity(0); - int secondTwoBody = 0, isDecayChannel = ( outputChannel->reaction == NULL ); - double e_in = modes.getProjectileEnergy( ); - MCGIDI_product *product; - double phi, p, masses[3]; - MCGIDI_distribution *distribution; - MCGIDI_sampledProductsData productData[2]; - - if (isDecayChannel) { - masses[0] = masses_[0]; /* More work may be needed here. */ - masses[1] = masses_[1]; - } else { - masses[0] = MCGIDI_reaction_getProjectileMass_MeV( smr, outputChannel->reaction ); - masses[1] = MCGIDI_reaction_getTargetMass_MeV( smr, outputChannel->reaction ); - } - - // Loop over all possible final state particles reachable from initial state - // List of these particles (products) was read in from GIDI - // Note: all particles satifying the sampling criteria are included in the - // final state, regardless of charge, energy or baryon number conservation +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ - for (i1 = 0; i1 < outputChannel->numberOfProducts; i1++) { - product = &(outputChannel->products[i1]); - if (product->decayChannel.genre != MCGIDI_channelGenre_undefined_e ) { - if( MCGIDI_outputChannel_sampleProductsAtE(smr, &(product->decayChannel), - modes, decaySamplingInfo, - productDatas, masses ) < 0 ) return( -1 ); - } else { - distribution = &(product->distribution); - if( distribution->type == MCGIDI_distributionType_none_e ) continue; +LUPI_HOST void OutputChannel::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { - if (!secondTwoBody) { - // Sample multiplicity of final state particle at kinetic energy of projectile - // The multiplicity stored in GIDI is a real number whose fractional part is - // compared to a random number to decide what integer value is returned - if ((multiplicity = product->multiplicity) == 0) multiplicity = - MCGIDI_product_sampleMultiplicity(smr, product, e_in, - decaySamplingInfo->rng( decaySamplingInfo->rngState ) ); - while (multiplicity > 0) { + for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} - multiplicity--; - decaySamplingInfo->pop = product->pop; - decaySamplingInfo->mu = 0; - decaySamplingInfo->Ep = 0; - productData[0].isVelocity = decaySamplingInfo->isVelocity; - productData[0].pop = product->pop; - productData[0].delayedNeutronIndex = product->delayedNeutronIndex; - productData[0].delayedNeutronRate = product->delayedNeutronRate; - productData[0].birthTimeSec = 0; - if (product->delayedNeutronRate > 0) { - productData[0].birthTimeSec = - -G4Log( decaySamplingInfo->rng( decaySamplingInfo->rngState ) ) / product->delayedNeutronRate; - } +/* *********************************************************************************************************//** + * This method calls the **setModelDBRC_data* method on the first product of *this* with *a_modelDBRC_data*. + * + * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode. + ***********************************************************************************************************/ - switch( outputChannel->genre ) { +LUPI_HOST void OutputChannel::setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ) { - case MCGIDI_channelGenre_twoBody_e : - secondTwoBody = 1; - MCGIDI_angular_sampleMu( smr, distribution->angular, modes, decaySamplingInfo ); - if (smr_isOk(smr) ) { - phi = 2. * M_PI * decaySamplingInfo->rng( decaySamplingInfo->rngState ); - MCGIDI_kinetics_2BodyReaction( smr, distribution->angular, e_in, decaySamplingInfo->mu, phi, productData ); - if (!smr_isOk(smr) ) return( -1 ); - productData[1].pop = product[1].pop; - productData[1].delayedNeutronIndex = product[1].delayedNeutronIndex; - productData[1].delayedNeutronRate = product->delayedNeutronRate; - productData[1].birthTimeSec = 0; - MCGIDI_sampledProducts_addProduct( smr, productDatas, productData ); - if( !smr_isOk( smr ) ) return( -1 ); - MCGIDI_sampledProducts_addProduct( smr, productDatas, &(productData[1]) ); - if( !smr_isOk( smr ) ) return( -1 ); - } - break; + m_products[0]->setModelDBRC_data( a_modelDBRC_data ); +} - case MCGIDI_channelGenre_uncorrelated_e : +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops id *a_id*. The returned value may not + * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons. + * + * @param a_products [in] The std::vector instance to add products to. + * @param a_totalDelayedNeutronMultiplicity [in] The std::vector instance to add delayed neutron multiplicities to. + * @param a_delayedNeutrons [in] The std::vector instance to add delayed neutrons to. + * @param a_Qs [in] The std::vector instance to add Q functions to. + ***********************************************************************************************************/ - case MCGIDI_channelGenre_sumOfRemaining_e : - // Get mass of final state particle, then get its distribution - // masses[0] and masses[1] are incident and target masses - masses[2] = MCGIDI_product_getMass_MeV( smr, product ); - switch( distribution->type ) { - case MCGIDI_distributionType_uncorrelated_e : - MCGIDI_uncorrelated_sampleDistribution( smr, distribution, modes, decaySamplingInfo ); - break; - case MCGIDI_distributionType_energyAngular_e : - MCGIDI_energyAngular_sampleDistribution( smr, distribution, modes, decaySamplingInfo ); - break; - case MCGIDI_distributionType_KalbachMann_e : - MCGIDI_KalbachMann_sampleEp( smr, distribution->KalbachMann, modes, decaySamplingInfo ); - break; - case MCGIDI_distributionType_angularEnergy_e : - MCGIDI_angularEnergy_sampleDistribution( smr, distribution->angularEnergy, modes, decaySamplingInfo ); - break; - default : - printf( "Unknown spectral data form product name = %s, channel genre = %d\n", product->pop->name, outputChannel->genre ); - break; - } - break; +LUPI_HOST void OutputChannel::moveProductsEtAlToReaction( std::vector &a_products, Functions::Function1d **a_totalDelayedNeutronMultiplicity, + std::vector &a_delayedNeutrons, std::vector &a_Qs ) { - case MCGIDI_channelGenre_undefined_e : - printf( "Channel is undefined\n" ); - break; + if( a_totalDelayedNeutronMultiplicity != nullptr ) { /* This will not work if fission is a nested channel. Ergo "n + (R -> fission)". */ + *a_totalDelayedNeutronMultiplicity = m_totalDelayedNeutronMultiplicity; + m_totalDelayedNeutronMultiplicity = nullptr; + for( std::size_t index = 0; index < m_delayedNeutrons.size( ); ++index ) { + a_delayedNeutrons.push_back( m_delayedNeutrons[index] ); + m_delayedNeutrons[index] = nullptr; + } + } - case MCGIDI_channelGenre_twoBodyDecay_e : - printf( "Channel is twoBodyDecay\n" ); - break; + a_Qs.push_back( m_Q ); + m_Q = nullptr; + for( std::size_t productIndex = 0; productIndex < m_products.size( ); ++productIndex ) { + Product *product = m_products[productIndex]; - case MCGIDI_channelGenre_uncorrelatedDecay_e : - printf( "Channel is uncorrelatedDecay\n" ); - break; + if( product->outputChannel( ) != nullptr ) { + product->outputChannel( )->moveProductsEtAlToReaction( a_products, nullptr, a_delayedNeutrons, a_Qs ); + delete product; } + else { + a_products.push_back( product ); + } + m_products[productIndex] = nullptr; + } +} - default : - printf( "Unsupported channel genre = %d\n", outputChannel->genre ); - break; - } +#ifdef MCGIDI_USE_OUTPUT_CHANNEL +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product to *a_products*. + * + * @param a_products [in] The std::vector instance to add products to. + * + * @return This does not seem to be working. Needs work. + ***********************************************************************************************************/ - if (!smr_isOk(smr) ) return( -1 ); - if (!secondTwoBody) { - if (decaySamplingInfo->frame == xDataTOM_frame_centerOfMass) { - if (MCGIDI_kinetics_COM2Lab( smr, modes, decaySamplingInfo, masses) != 0 ) return( -1 ); - } +LUPI_HOST void OutputChannel::addOrphanProductToProductList( std::vector &a_products ) const { - // Assign kinematics to final state product - productData[0].kineticEnergy = decaySamplingInfo->Ep; - p = std::sqrt( decaySamplingInfo->Ep * ( decaySamplingInfo->Ep + 2. * product->pop->mass_MeV ) ); - if (productData[0].isVelocity) p *= MCGIDI_speedOfLight_cm_sec / std::sqrt( p * p + product->pop->mass_MeV * product->pop->mass_MeV ); - productData[0].pz_vz = p * decaySamplingInfo->mu; - p = std::sqrt( 1. - decaySamplingInfo->mu * decaySamplingInfo->mu ) * p; - phi = 2. * M_PI * decaySamplingInfo->rng( decaySamplingInfo->rngState ); - productData[0].px_vx = p * std::sin( phi ); - productData[0].py_vy = p * std::cos( phi ); - MCGIDI_sampledProducts_addProduct( smr, productDatas, productData ); - if (!smr_isOk(smr) ) return( -1 ); - } - } // while multiplicity + for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) { + Product *product = m_products[productIndex]; - } // if !secondTwoBody - } // if decay channel genre - - } // loop over possible final state products - return( productDatas->numberOfProducts ); + if( product->outputChannel( ) != nullptr ) { + product->outputChannel( )->addOrphanProductToProductList( a_products ); } + else { + a_products.push_back( product ); + } + } } -#if defined __cplusplus +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product to *a_products*. + * + * @param a_products [in] The std::vector instance to add products to. + * + * @return This does not seem to be working. Needs work. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void OutputChannel::addOrphanProductToProductList( Vector &a_products ) const { + + for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) { + Product *product = m_products[productIndex]; + + if( product->outputChannel( ) != nullptr ) { + product->outputChannel( )->addOrphanProductToProductList( a_products ); } + else { + a_products.push_back( product ); + } + } + +} + +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product to *a_products*. + * + * @param a_products [in] The std::vector instance to add products to. + * + * @return This does not seem to be working. Needs work. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void OutputChannel::addOrphanProductToProductList( Vector &a_products ) const { + + for( int productIndex = 0; productIndex < m_products.size( ); ++productIndex ) { + Product *product = m_products[productIndex]; + + if( product->outputChannel( ) != nullptr ) { + product->outputChannel( )->addOrphanProductToProductList( a_products ); } + else { + a_products.push_back( product ); + } + } + } #endif +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops index *a_index*. The returned value may not + * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons. + * + * @param a_index [in] The index of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double OutputChannel::productAverageMultiplicity( int a_index, double a_projectileEnergy ) const { + + double multiplicity = 0.0; + + for( Vector::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) { + multiplicity += (*iter)->productAverageMultiplicity( a_index, a_projectileEnergy ); + } + + if( m_totalDelayedNeutronMultiplicity != nullptr ) { + if( a_index == m_neutronIndex ) multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + } + + return( multiplicity ); +} + +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops intid *a_intid*. The returned value may not + * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons. + * + * @param a_intid [in] The intid of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double OutputChannel::productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const { + + double multiplicity = 0.0; + + for( Vector::const_iterator iter = m_products.begin( ); iter != m_products.end( ); ++iter ) { + multiplicity += (*iter)->productAverageMultiplicityViaIntid( a_intid, a_projectileEnergy ); + } + + if( m_totalDelayedNeutronMultiplicity != nullptr ) { + if( a_intid == PoPI::Intids::neutron ) multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + } + + return( multiplicity ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void OutputChannel::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int channelType = 0; + switch( m_channelType ) { + case ChannelType::none : + break; + case ChannelType::twoBody : + channelType = 1; + break; + case ChannelType::uncorrelatedBodies : + channelType = 2; + break; + } + DATA_MEMBER_INT( channelType, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( channelType ) { + case 0 : + m_channelType = ChannelType::none; + break; + case 1 : + m_channelType = ChannelType::twoBody; + break; + case 2 : + m_channelType = ChannelType::uncorrelatedBodies; + break; + } + } + + DATA_MEMBER_INT( m_neutronIndex, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_isFission, a_buffer, a_mode, bool ); + DATA_MEMBER_CAST( m_hasFinalStatePhotons, a_buffer, a_mode, bool ); + + m_Q = serializeFunction1d_d1( a_buffer, a_mode, m_Q ); + serializeProducts( a_buffer, a_mode, m_products ); + m_totalDelayedNeutronMultiplicity = serializeFunction1d( a_buffer, a_mode, m_totalDelayedNeutronMultiplicity ); + serializeDelayedNeutrons( a_buffer, a_mode, m_delayedNeutrons ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_particle.cc b/source/processes/hadronic/models/lend/src/MCGIDI_particle.cc deleted file mode 100644 index fcb49e936d..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_particle.cc +++ /dev/null @@ -1,170 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include "MCGIDI.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int initialSizeOfList = 1000, incrementalSizeOfList = 1000; -static int numberOfParticles = 0, sizeOfParticleSortedList = 0; -static MCGIDI_particle **particleSortedList = NULL; -static MCGIDI_particle *particleList = NULL, *particleListEnd = NULL; -/* -************************************************************ -*/ -MCGIDI_particle *MCGIDI_particle_new( statusMessageReporting *smr ) { - - MCGIDI_particle *particle = (MCGIDI_particle *) smr_malloc2( smr, sizeof( MCGIDI_particle ), 0, "particle" ); - - if( particle == NULL ) return( NULL ); - MCGIDI_particle_initialize( smr, particle ); - return( particle ); -} -/* -************************************************************ -*/ -int MCGIDI_particle_initialize( statusMessageReporting * /*smr*/, MCGIDI_particle *particle ) { - - memset( particle, 0, sizeof( MCGIDI_particle ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_particle *MCGIDI_particle_free( statusMessageReporting *smr, MCGIDI_particle *particle ) { - - int i, j; - MCGIDI_particle **p; - - for( i = 0, p = particleSortedList; i < numberOfParticles; i++, p++ ) { - if( *p == particle ) { - numberOfParticles--; - for( j = i; j < numberOfParticles; j++, p++ ) *p = p[1]; - break; - } - } - if( particle == particleListEnd ) particleListEnd = particle->prior; - if( particle == particleList ) particleList = particle->next; - if( particle->prior != NULL ) particle->prior->next = particle->next; - if( particle->next != NULL ) particle->next->prior = particle->prior; - MCGIDI_particle_release( smr, particle ); - smr_freeMemory( (void **) &particle ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_particle_release( statusMessageReporting * /*smr*/, MCGIDI_particle *particle ) { - - smr_freeMemory( (void **) &(particle->name) ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_particle_freeInternalList( statusMessageReporting *smr ) { - - while( particleList != NULL ) MCGIDI_particle_free( smr, particleList ); // Loop checking, 11.06.2015, T. Koi - particleSortedList = (MCGIDI_particle **) smr_freeMemory( (void **) &particleSortedList ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_particle *MCGIDI_particle_getInternalID( statusMessageReporting *smr, const char * const name, MCGIDI_POPs *pops ) { - - int i, iCmp, min, mid, max, Z, A, m, level; - MCGIDI_particle *particle; - MCGIDI_POP *pop; - - iCmp = 0; - min = mid = 0; - max = numberOfParticles; - while( min != max ) { // Loop checking, 11.06.2015, T. Koi - mid = ( min + max ) / 2; - iCmp = strcmp( name, particleSortedList[mid]->name ); - if( iCmp == 0 ) return( particleSortedList[mid] ); - if( iCmp < 0 ) { - max = mid - 1; - if( mid == 0 ) max = 0; } - else { - min = mid + 1; - if( min > max ) min = max; - } - } - mid = min; - if( numberOfParticles > 0 ) { - iCmp = strcmp( name, particleSortedList[mid]->name ); - if( iCmp == 0 ) return( particleSortedList[mid] ); - if( ( iCmp < 0 ) && ( mid != 0 ) ) { - mid--; - iCmp = strcmp( name, particleSortedList[mid]->name ); - } - } - - if( ( particle = MCGIDI_particle_new( smr ) ) == NULL ) return( NULL ); - if( ( particle->name = smr_allocateCopyString( smr, name, "particle->name", __FILE__, __LINE__, __func__ ) ) == NULL ) goto err; - if( MCGIDI_miscNameToZAm( smr, name, &Z, &A, &m, &level ) != 0 ) goto err; - particle->prior = NULL; - particle->next = NULL; - particle->Z = Z; - particle->A = A; - particle->m = m; - if( ( pop = MCGIDI_POPs_findParticle( pops, name ) ) == NULL ) { /* This should not happend. */ - particle->mass_MeV = MCGIDI_AMU2MeV * MCGIDI_particleMass_AMU( smr, name ); } - else { - particle->mass_MeV = pop->mass_MeV; - } - if( !smr_isOk( smr ) ) goto err; - - if( sizeOfParticleSortedList < ( numberOfParticles + 1 ) ) { - if( sizeOfParticleSortedList == 0 ) { - sizeOfParticleSortedList = initialSizeOfList; } - else { - sizeOfParticleSortedList += incrementalSizeOfList; - } - if( ( particleSortedList = (MCGIDI_particle **) smr_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( MCGIDI_particle * ), - "particleSortedList" ) ) == NULL ) goto err; - } - - if( particleList == NULL ) { - particle->ordinal = 0; - particleListEnd = particleList = particle; } - else { - particle->ordinal = particleListEnd->ordinal + 1; - particle->prior = particleListEnd; - particleListEnd->next = particle; - particleListEnd = particle; - } - - if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++; - for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1]; - particleSortedList[mid] = particle; - numberOfParticles++; - - return( particle ); - -err: - MCGIDI_particle_free( smr, particle ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_particle_printInternalSortedList( statusMessageReporting * /*smr*/ ) { - - int i; - - for( i = 0; i < numberOfParticles; i++ ) printf( "%s\n", particleSortedList[i]->name ); - return( 0 ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_pop.cc b/source/processes/hadronic/models/lend/src/MCGIDI_pop.cc deleted file mode 100644 index e3019b0325..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_pop.cc +++ /dev/null @@ -1,220 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "MCGIDI.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -MCGIDI_POPs *MCGIDI_POPs_new( statusMessageReporting *smr, int size ) { - - MCGIDI_POPs *pops; - - if( ( pops = (MCGIDI_POPs *) smr_malloc2( smr, sizeof( MCGIDI_POPs ), 0, "pops->sorted" ) ) == NULL ) return( NULL ); - if( MCGIDI_POPs_initial( smr, pops, size ) ) smr_freeMemory( (void **) &pops ); - return( pops ); -} -/* -************************************************************ -*/ -int MCGIDI_POPs_initial( statusMessageReporting * /*smr*/, MCGIDI_POPs *pops, int size ) { - - memset( pops, 0, sizeof( MCGIDI_POPs ) ); - if( size < 10 ) size = 10; - pops->increment = size; - - return( 0 ); -} -/* -************************************************************ -*/ -void *MCGIDI_POPs_free( MCGIDI_POPs *pops ) { - - if( pops == NULL ) return( NULL ); - MCGIDI_POPs_release( pops ); - smr_freeMemory( (void **) &pops ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_POPs_release( MCGIDI_POPs *pops ) { - - MCGIDI_POP *pop, *next; - - if( pops == NULL ) return( 0 ); - for( pop = pops->first; pop != NULL; pop = next ) { - next = pop->next; - MCGIDI_POP_free( pop ); - } - smr_freeMemory( (void **) &(pops->sorted) ); - MCGIDI_POPs_initial( NULL, pops, 0 ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_POPs_addParticleIfNeeded( statusMessageReporting *smr, MCGIDI_POPs *pops, char const *name, double mass_MeV, - double level_MeV, MCGIDI_POP *parent, int globalParticle ) { - - int i, index; - MCGIDI_POP *pop; - - if( ( index = MCGIDI_POPs_findParticleIndex( pops, name ) ) >= 0 ) return( pops->sorted[index] ); - if( pops->size == pops->numberOfPOPs ) { - int size = pops->size + pops->increment; - MCGIDI_POP **sorted = (MCGIDI_POP **) smr_malloc2( smr, size * sizeof( MCGIDI_POP * ), 0, "sorted" ); - - if( sorted == NULL ) return( NULL ); - for( i = 0; i < pops->numberOfPOPs; i++ ) sorted[i] = pops->sorted[i]; - smr_freeMemory( (void **) &(pops->sorted) ); - pops->sorted = sorted; - pops->size = size; - } - index = -index - 1; - if( ( pop = MCGIDI_POP_new( smr, name, mass_MeV, level_MeV, parent ) ) == NULL ) return( NULL ); - for( i = pops->numberOfPOPs; i > index; i-- ) pops->sorted[i] = pops->sorted[i-1]; - pops->sorted[index] = pop; - if( pops->first == NULL ) { - pops->first = pop; } - else { - pops->last->next = pop; - } - pops->last = pop; - pops->numberOfPOPs++; - pop->globalPoPsIndex = -1; - if( globalParticle ) { - if( ( pop->globalPoPsIndex = lPoPs_addParticleIfNeeded( smr, name, "LLNL" ) ) < 0 ) return( NULL ); - } - return( pop ); -} -/* -************************************************************ -*/ -int MCGIDI_POPs_findParticleIndex( MCGIDI_POPs *pops, char const *name ) { - - int iCmp = 0, min = 0, mid = 0, max = pops->numberOfPOPs; - - if( max == 0 ) return( -1 ); - while( ( max - min ) > 1 ) { - mid = ( min + max ) / 2; - iCmp = strcmp( name, pops->sorted[mid]->name ); - if( iCmp == 0 ) return( mid ); - if( iCmp < 0 ) { - max = mid; } - else { - min = mid; - } - } // Loop checking, 11.05.2015, T. Koi - if( max == 1 ) { /* First point is not checked as loop exits when ( max = 1 ) - ( min = 0 ) !> 1 ). */ - if( strcmp( name, pops->sorted[0]->name ) == 0 ) return( 0 ); - } - if( max < pops->numberOfPOPs ) { - if( strcmp( name, pops->sorted[max]->name ) == 0 ) return( max ); - } - if( max == 1 ) { - if( strcmp( name, pops->sorted[0]->name ) < 0 ) return( -1 ); - } - return( -max - 1 ); -} -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_POPs_findParticle( MCGIDI_POPs *pops, char const *name ) { - - int index = MCGIDI_POPs_findParticleIndex( pops, name ); - - if( index < 0 ) return( NULL ); - return( pops->sorted[index] ); -} -/* -************************************************************ -*/ -void MCGIDI_POPs_writeSortedList( MCGIDI_POPs *pops, FILE *f ) { - - int i; - - fprintf( f, "POPs Information: n = %d\n", pops->numberOfPOPs ); - for( i = 0; i < pops->numberOfPOPs; i++ ) fprintf( f, " %-20s %e\n", pops->sorted[i]->name, pops->sorted[i]->mass_MeV ); -} -/* -************************************************************ -*/ -void MCGIDI_POPs_printSortedList( MCGIDI_POPs *pops ) { - - MCGIDI_POPs_writeSortedList( pops, stdout ); -} - - -/* -********* MCGIDI_POP routines ********* -*/ -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_POP_new( statusMessageReporting *smr, char const *name, double mass_MeV, double level_MeV, MCGIDI_POP *parent ) { - - int Z, A, m, level; - MCGIDI_POP *pop = (MCGIDI_POP *) smr_malloc2( smr, sizeof( MCGIDI_POP ), 0, "pop" ); - - if( pop == NULL ) return( NULL ); - pop->next = NULL; - pop->parent = parent; - if( ( pop->name = smr_allocateCopyString2( smr, name, "pop->name" ) ) == NULL ) { - smr_freeMemory( (void **) &pop ); - return( NULL ); - } - MCGIDI_miscNameToZAm( smr, name, &Z, &A, &m, &level ); - pop->Z = Z; - pop->A = A; - pop->level = level; - pop->m = m; - pop->mass_MeV = mass_MeV; - pop->level_MeV = level_MeV; - pop->numberOfGammaBranchs = 0; - pop->gammas = NULL; - return( pop ); -} -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_POP_free( MCGIDI_POP *pop ) { - - if( pop == NULL ) return( NULL ); - MCGIDI_POP_release( pop ); - smr_freeMemory( (void **) &pop ); - return( NULL ); -} -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_POP_release( MCGIDI_POP *pop ) { - - if( pop == NULL ) return( NULL ); - smr_freeMemory( (void **) &(pop->name) ); - pop->numberOfGammaBranchs = 0; - if( pop->gammas != NULL ) smr_freeMemory( (void **) &(pop->gammas) ); - return( NULL ); -} -/* -************************************************************ -*/ -double MCGIDI_POP_getMass_MeV( MCGIDI_POP *pop ) { - - return( pop->mass_MeV ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_product.cc b/source/processes/hadronic/models/lend/src/MCGIDI_product.cc index 976234c7df..3eddfd21aa 100644 --- a/source/processes/hadronic/models/lend/src/MCGIDI_product.cc +++ b/source/processes/hadronic/models/lend/src/MCGIDI_product.cc @@ -1,427 +1,349 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#include -#include "MCGIDI.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_fromTOM.h" +#include "MCGIDI.hpp" -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; +namespace MCGIDI { + +/*! \class Product + * This class represents a **GNDS** <**product**> node with only data needed for Monte Carlo transport. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Product::Product( ) : + m_ID( ), + m_intid( -1 ), + m_index( -1 ), + m_userParticleIndex( -1 ), + m_mass( 0.0 ), + m_excitationEnergy( 0.0 ), + m_twoBodyOrder( TwoBodyOrder::notApplicable ), + m_initialStateIndex( -1 ), + m_multiplicity( nullptr ), + m_distribution( nullptr ), + m_outputChannel( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_product [in] The GIDI::Product whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_isFission [in] *true* if parent channel is a fission channel and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST Product::Product( GIDI::Product const *a_product, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles, bool a_isFission ) : + m_ID( a_product->particle( ).ID( ).c_str( ) ), + m_intid( MCGIDI_popsIntid( a_setupInfo.m_pops, a_product->particle( ).ID( ) ) ), + m_index( MCGIDI_popsIndex( a_setupInfo.m_popsUser, a_product->particle( ).ID( ) ) ), + m_userParticleIndex( -1 ), + m_label( a_product->label( ).c_str( ) ), + m_isCompleteParticle( a_product->isCompleteParticle( ) ), + m_mass( a_product->particle( ).mass( "MeV/c**2" ) ), // Includes nuclear excitation energy. + m_excitationEnergy( a_product->particle( ).excitationEnergy( ).value( ) ), + m_twoBodyOrder( a_setupInfo.m_twoBodyOrder ), + m_initialStateIndex( -1 ), + m_multiplicity( Functions::parseMultiplicityFunction1d( a_setupInfo, a_settings, a_product->multiplicity( ) ) ), + m_distribution( nullptr ), + m_outputChannel( nullptr ) { + + a_setupInfo.m_product1Mass = mass( ); // Includes nuclear excitation energy. + a_setupInfo.m_initialStateIndex = -1; + m_distribution = Distributions::parseGIDI( a_product->distribution( ), a_setupInfo, a_settings ); + m_initialStateIndex = a_setupInfo.m_initialStateIndex; + + GIDI::OutputChannel const *output_channel = a_product->outputChannel( ); + if( output_channel != nullptr ) m_outputChannel = new OutputChannel( output_channel, a_setupInfo, a_settings, a_particles ); + + if( a_isFission && ( m_intid == PoPI::Intids::neutron ) && a_settings.wantTerrellPromptNeutronDistribution( ) ) { + Functions::Function1d_d1 *multiplicity1 = static_cast( m_multiplicity ); + + m_multiplicity = new Functions::TerrellFissionNeutronMultiplicityModel( -1.0, multiplicity1 ); + } +} + +/* *********************************************************************************************************//** + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_ID [in] The PoPs id for the product. + * @param a_label [in] The **GNDS** label for the product. + ***********************************************************************************************************/ + +LUPI_HOST Product::Product( PoPI::Database const &a_pops, std::string const &a_ID, std::string const &a_label ) : + m_ID( a_ID.c_str( ) ), + m_intid( MCGIDI_popsIntid( a_pops, a_ID ) ), + m_index( MCGIDI_popsIndex( a_pops, a_ID ) ), + m_userParticleIndex( -1 ), + m_label( a_label.c_str( ) ), + m_mass( 0.0 ), // FIXME, good for photon but nothing else. Still need to implement. + m_excitationEnergy( 0.0 ), + m_twoBodyOrder( TwoBodyOrder::notApplicable ), + m_initialStateIndex( -1 ), + m_multiplicity( nullptr ), + m_distribution( nullptr ), + m_outputChannel( nullptr ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Product::~Product( ) { + + delete m_multiplicity; + + Distributions::Type type = Distributions::Type::none; + if( m_distribution != nullptr ) type = m_distribution->type( ); + switch( type ) { + case Distributions::Type::none: + break; + case Distributions::Type::unspecified: + delete static_cast( m_distribution ); + break; + case Distributions::Type::angularTwoBody: + delete static_cast( m_distribution ); + break; + case Distributions::Type::KalbachMann: + delete static_cast( m_distribution ); + break; + case Distributions::Type::uncorrelated: + delete static_cast( m_distribution ); + break; + case Distributions::Type::branching3d: + delete static_cast( m_distribution ); + break; + case Distributions::Type::energyAngularMC: + delete static_cast( m_distribution ); + break; + case Distributions::Type::angularEnergyMC: + delete static_cast( m_distribution ); + break; + case Distributions::Type::coherentPhotoAtomicScattering: + delete static_cast( m_distribution ); + break; + case Distributions::Type::incoherentPhotoAtomicScattering: + delete static_cast( m_distribution ); + break; + case Distributions::Type::incoherentBoundToFreePhotoAtomicScattering: + delete static_cast( m_distribution ); + break; + case Distributions::Type::incoherentPhotoAtomicScatteringElectron: + delete static_cast( m_distribution ); + break; + case Distributions::Type::pairProductionGamma: + delete static_cast( m_distribution ); + break; + case Distributions::Type::coherentElasticTNSL: + delete static_cast( m_distribution ); + break; + case Distributions::Type::incoherentElasticTNSL: + delete static_cast( m_distribution ); + break; + } + + delete m_outputChannel; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Product::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + if( m_index == a_particleIndex ) m_userParticleIndex = a_userParticleIndex; +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) m_outputChannel->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +#endif +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Product::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + if( m_intid == a_particleIntid ) m_userParticleIndex = a_userParticleIndex; +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) m_outputChannel->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +#endif +} + +/* *********************************************************************************************************//** + * This method calls the **setModelDBRC_data* method on the distribution of *this* with *a_modelDBRC_data*. + * + * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode. + ***********************************************************************************************************/ + +LUPI_HOST void Product::setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ) { + + m_distribution->setModelDBRC_data( a_modelDBRC_data ); +} + +/* *********************************************************************************************************//** + * This method returns the final Q for *this* by getting its output channel's finalQ. + * + * @param a_x1 [in] The energy of the projectile. + * + * @return The Q-value at product energy *a_x1*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Product::finalQ( LUPI_maybeUnused double a_x1 ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) return( m_outputChannel->finalQ( a_x1 ) ); +#endif + return( m_excitationEnergy ); +} + +/* *********************************************************************************************************//** + * This method returns *true* if the output channel or any of its sub-output channels is a fission channel and *false* otherwise. + * + * @return *true* if any sub-output channel is a fission channel and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool Product::hasFission( ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) return( m_outputChannel->hasFission( ) ); +#endif + return( false ); +} + +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops index *a_index*. The returned value may not + * be an integer. Energy dependent multiplicities mainly occurs for photons and fission neutrons. + * + * @param a_index [in] The PoPs index of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Product::productAverageMultiplicity( int a_index, double a_projectileEnergy ) const { + + double multiplicity1 = 0.0; + + if( a_index == m_index ) { + if( ( m_multiplicity->domainMin( ) <= a_projectileEnergy ) && ( m_multiplicity->domainMax( ) >= a_projectileEnergy ) ) + multiplicity1 += m_multiplicity->evaluate( a_projectileEnergy ); + } +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) multiplicity1 += m_outputChannel->productAverageMultiplicity( a_index, a_projectileEnergy ); #endif -typedef struct polynomialCallbackArgs_s { - int length; - double energyFactor; - double *coefficients; -} polynomialCallbackArgs; - -static int MCGIDI_product_parsePiecewiseMultiplicity( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product ); -static ptwXYPoints *MCGIDI_product_parsePolynomialMultiplicity( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product ); -static int MCGIDI_product_parseWeightedReferenceMultiplicityFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product, - ptwXYPoints **multiplicityVsEnergy, ptwXYPoints **norms ); -static double MCGIDI_product_evaluatePolynomial( double x, polynomialCallbackArgs *args ); -/* -************************************************************ -*/ -MCGIDI_product *MCGIDI_product_new( statusMessageReporting *smr ) { - - MCGIDI_product *product; - - if( ( product = (MCGIDI_product *) smr_malloc2( smr, sizeof( MCGIDI_product ), 0, "product" ) ) == NULL ) return( NULL ); - if( MCGIDI_product_initialize( smr, product ) ) product = MCGIDI_product_free( smr, product ); - return( product ); + return( multiplicity1 ); } -/* -************************************************************ -*/ -int MCGIDI_product_initialize( statusMessageReporting * /*smr*/, MCGIDI_product *product ) { - memset( product, 0, sizeof( MCGIDI_product ) ); - product->delayedNeutronIndex = -1; - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_product *MCGIDI_product_free( statusMessageReporting *smr, MCGIDI_product *product ) { +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops intid *a_intid*. The returned value may not + * be an integer. Energy dependent multiplicities mainly occurs for photons and fission neutrons. + * + * @param a_intid [in] The PoPs intid of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ - MCGIDI_product_release( smr, product ); - smr_freeMemory( (void **) &product ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_product_release( statusMessageReporting *smr, MCGIDI_product *product ) { +LUPI_HOST_DEVICE double Product::productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const { - int i; + double multiplicity1 = 0.0; - if( product->label != NULL ) smr_freeMemory( (void **) &(product->label) ); - - if( product->multiplicityVsEnergy != NULL ) ptwXY_free( product->multiplicityVsEnergy ); - if( product->piecewiseMultiplicities != NULL ) { - for( i = 0; i < product->numberOfPiecewiseMultiplicities; i++ ) ptwXY_free( product->piecewiseMultiplicities[i] ); - smr_freeMemory( (void **) &(product->piecewiseMultiplicities) ); + if( a_intid == m_intid ) { + if( ( m_multiplicity->domainMin( ) <= a_projectileEnergy ) && ( m_multiplicity->domainMax( ) >= a_projectileEnergy ) ) + multiplicity1 += m_multiplicity->evaluate( a_projectileEnergy ); } - if( product->norms != NULL ) ptwXY_free( product->norms ); +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + if( m_outputChannel != nullptr ) multiplicity1 += m_outputChannel->productAverageMultiplicityViaIntid( a_intid, a_projectileEnergy ); +#endif - MCGIDI_distribution_release( smr, &(product->distribution) ); - MCGIDI_outputChannel_release( smr, &(product->decayChannel) ); - - MCGIDI_product_initialize( smr, product ); - return( 0 ); + return( multiplicity1 ); } -/* -************************************************************ -*/ -int MCGIDI_product_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_outputChannel *outputChannel, - MCGIDI_POPs *pops, MCGIDI_product *product, int *delayedNeutronIndex ) { - char const *name{""}, *label{""}, *delayedNeutron{""}, *multiplicityStr{""}, *multiplicityUnits[2] = { "MeV", "" }; - xDataTOM_element *multiplicity{nullptr}, *multiplicityTOM{nullptr}, *decayChannelElement{nullptr}; - nfu_status status{nfu_Okay}; - ptwXYPoints *multiplicityVsEnergy = NULL, *norms1 = NULL, *norms2 = NULL; +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ - MCGIDI_product_initialize( smr, product ); +LUPI_HOST_DEVICE void Product::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { - product->outputChannel = outputChannel; - if( ( name = xDataTOM_getAttributesValueInElement( element, "name" ) ) == NULL ) goto err; - if( ( product->pop = MCGIDI_POPs_findParticle( pops, name ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "product '%s' not found in pops", name ); - goto err; + DATA_MEMBER_STRING( m_ID, a_buffer, a_mode ); + DATA_MEMBER_INT( m_intid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_index, a_buffer, a_mode ); + DATA_MEMBER_INT( m_userParticleIndex, a_buffer, a_mode ); + DATA_MEMBER_STRING( m_label, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_isCompleteParticle, a_buffer, a_mode, bool ); + DATA_MEMBER_DOUBLE( m_mass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_excitationEnergy, a_buffer, a_mode ); + + int twoBodyOrder = 0; + switch( m_twoBodyOrder ) { + case TwoBodyOrder::notApplicable : + break; + case TwoBodyOrder::firstParticle : + twoBodyOrder = 1; + break; + case TwoBodyOrder::secondParticle : + twoBodyOrder = 2; + break; } - if( ( label = xDataTOM_getAttributesValueInElement( element, "label" ) ) != NULL ) { - if( ( product->label = smr_allocateCopyString2( smr, label, "product->label" ) ) == NULL ) goto err; + DATA_MEMBER_INT( twoBodyOrder , a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( twoBodyOrder ) { + case 0 : + m_twoBodyOrder = TwoBodyOrder::notApplicable; + break; + case 1 : + m_twoBodyOrder = TwoBodyOrder::firstParticle; + break; + case 2 : + m_twoBodyOrder = TwoBodyOrder::secondParticle; + break; + } } - if( ( delayedNeutron = xDataTOM_getAttributesValueInElement( element, "emissionMode" ) ) != NULL ) { - if( strcmp( delayedNeutron, "delayed" ) == 0 ) { - if( ( delayedNeutron = xDataTOM_getAttributesValueInElement( element, "decayRate" ) ) == NULL ) { - goto err; + DATA_MEMBER_INT( m_initialStateIndex, a_buffer, a_mode ); + + m_multiplicity = serializeFunction1d( a_buffer, a_mode, m_multiplicity ); + m_distribution = serializeDistribution( a_buffer, a_mode, m_distribution ); + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + bool haveChannel = m_outputChannel != nullptr; + DATA_MEMBER_CAST( haveChannel, a_buffer, a_mode, bool ); + if( haveChannel ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if (a_buffer.m_placement != nullptr) { + m_outputChannel = new(a_buffer.m_placement) OutputChannel(); + a_buffer.incrementPlacement( sizeof(OutputChannel)); + } + else { + m_outputChannel = new OutputChannel(); } - if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, delayedNeutron, "1/s", &(product->delayedNeutronRate) ) != 0 ) goto err; - product->delayedNeutronIndex = *delayedNeutronIndex; - (*delayedNeutronIndex)++; } - } - - if( ( multiplicityStr = xDataTOM_getAttributesValueInElement( element, "multiplicity" ) ) == NULL ) goto err; - if( xDataTOME_convertAttributeToInteger( NULL, element, "multiplicity", &(product->multiplicity) ) ) { - if( strcmp( multiplicityStr, "energyDependent" ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "invalid multiplicity '%s' for product '%s'", multiplicityStr, name ); - goto err; - } - if( ( multiplicity = xDataTOME_getOneElementByName( smr, element, "multiplicity", 1 ) ) == NULL ) goto err; - if( ( multiplicityTOM = xDataTOME_getOneElementByName( NULL, multiplicity, "weightedReference", 0 ) ) != NULL ) { - if( MCGIDI_product_parseWeightedReferenceMultiplicityFromTOM( smr, multiplicityTOM, product, &multiplicityVsEnergy, &norms1 ) ) goto err; } - else if( ( multiplicityTOM = xDataTOME_getOneElementByName( NULL, multiplicity, "piecewise", 0 ) ) != NULL ) { - if( MCGIDI_product_parsePiecewiseMultiplicity( smr, multiplicityTOM, product ) ) goto err; } - else if( ( multiplicityTOM = xDataTOME_getOneElementByName( NULL, multiplicity, "polynomial", 0 ) ) != NULL ) { - if( ( multiplicityVsEnergy = MCGIDI_product_parsePolynomialMultiplicity( smr, multiplicityTOM, product ) ) == NULL ) goto err; } - else { -/* ??????? Need to check interpolation. */ - if( ( multiplicityTOM = xDataTOME_getOneElementByName( smr, multiplicity, "pointwise", 1 ) ) == NULL ) goto err; - if( ( multiplicityVsEnergy = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, multiplicityTOM, multiplicityUnits ) ) == NULL ) goto err; + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof(OutputChannel)); } + m_outputChannel->serialize( a_buffer, a_mode ); } - - if( strcmp( product->pop->name, "gamma" ) == 0 ) { - if( ( norms2 = ptwXY_new( ptwXY_interpolationLinLin, NULL, 2., 1e-3, 200, 10, &status, 0 ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_new err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - } - if( MCGIDI_distribution_parseFromTOM( smr, element, product, pops, norms2 ) ) goto err; - if( norms2 != NULL ) { - if( ptwXY_length( norms2 ) < 2 ) { - norms2 = ptwXY_free( norms2 ); } - else { - if( ptwXY_simpleCoalescePoints( norms2 ) != nfu_Okay ) goto err; - if( ( ptwXY_getYMin( norms2 ) > 0.99 ) && ( ptwXY_getYMax( norms2 ) < 1.01 ) ) norms2 = ptwXY_free( norms2 ); - } - } - if( ( norms1 != NULL ) && ( norms2 != NULL ) ) { - smr_setReportError2p( smr, smr_unknownID, 1, "norm1 and norm2 are both not NULL" ); - goto err; - } - - product->multiplicityVsEnergy = multiplicityVsEnergy; - product->norms = norms1; - if( norms2 != NULL ) product->norms = norms2; - - if( ( decayChannelElement = xDataTOME_getOneElementByName( NULL, element, "decayChannel", 0 ) ) != NULL ) { - if( MCGIDI_outputChannel_parseFromTOM( smr, decayChannelElement, pops, &(product->decayChannel), NULL, product ) ) goto err; - } - - return( 0 ); - -err: - if( multiplicityVsEnergy != NULL ) ptwXY_free( multiplicityVsEnergy ); - if( norms1 != NULL ) ptwXY_free( norms1 ); - if( norms2 != NULL ) ptwXY_free( norms2 ); - MCGIDI_product_release( smr, product ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_product_parsePiecewiseMultiplicity( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product ) { - - int i; - xDataTOM_XYs *XYs; - xDataTOM_regionsXYs *regionsXYs = (xDataTOM_regionsXYs *) element->xDataInfo.data; - ptwXYPoints *multiplicityVsEnergy; - char const *multiplicityUnits[2] = { "MeV", "" }; - - if( ( product->piecewiseMultiplicities = (ptwXYPoints **) smr_malloc2( smr, regionsXYs->length * sizeof( ptwXYPoints * ), 1, "piecewiseMultiplicities" ) ) == NULL ) return( 1 ); - - for( i = 0; i < regionsXYs->length; i++ ) { -/* ??????? Need to check interpolation. */ - XYs = &(regionsXYs->XYs[i]); - if( ( multiplicityVsEnergy = MCGIDI_misc_dataFromXYs2ptwXYPointsInUnitsOf( smr, XYs, ptwXY_interpolationLinLin, multiplicityUnits ) - ) == NULL ) return( 1 ); - product->piecewiseMultiplicities[i] = multiplicityVsEnergy; - product->numberOfPiecewiseMultiplicities++; - } - - return( 0 ); -} -/* -************************************************************ -*/ -static ptwXYPoints *MCGIDI_product_parsePolynomialMultiplicity( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product *product ) { - - int length; - double *coefficients; - char const *energyUnit; - ptwXYPoints *ptwXY = NULL; - nfu_status status; - double EMin, EMax; - polynomialCallbackArgs args; - - if( MCGIDI_product_getDomain( smr, product, &EMin, &EMax ) ) goto err; - - length = xDataTOM_polynomial_getDataFromXDataInfo( (xDataTOM_xDataInfo *) &(element->xDataInfo), &coefficients ); - if( ( ptwXY = ptwXY_new( ptwXY_interpolationLinLin, NULL, 2., 1e-3, length, 10, &status, 0 ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_new err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - - if( ( energyUnit = xDataTOM_axes_getUnit( smr, &(element->xDataInfo.axes), 0 ) ) == NULL ) goto err; - args.energyFactor = MCGIDI_misc_getUnitConversionFactor( smr, energyUnit, "MeV" ); - if( !smr_isOk( smr ) ) goto err; - - args.length = length; - args.coefficients = coefficients; - ptwXY_setValueAtX( ptwXY, EMin, MCGIDI_product_evaluatePolynomial( EMin, &args ) ); - ptwXY_setValueAtX( ptwXY, EMax, MCGIDI_product_evaluatePolynomial( EMax, &args ) ); - if( length > 2 ) { /* ?????????????? This needs work. */ - int i, n = 4 * length; - double E = EMin, dE = ( EMax - EMin ) / n; - - for( i = 1; i < n; i++ ) { - E += dE; - ptwXY_setValueAtX( ptwXY, E, MCGIDI_product_evaluatePolynomial( E, &args ) ); - } - } - return( ptwXY ); - -err: - if( ptwXY != NULL ) ptwXY_free( ptwXY ); - return( NULL ); -} -/* -************************************************************ -*/ -static double MCGIDI_product_evaluatePolynomial( double x, polynomialCallbackArgs *args ) { - - int i; - double value = 0.; - - x /= args->energyFactor; - for( i = args->length; i > 0; i-- ) value = value * x + args->coefficients[i-1]; - - return( value ); -} -/* -************************************************************ -*/ -static int MCGIDI_product_parseWeightedReferenceMultiplicityFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_product * /*product*/, - ptwXYPoints **multiplicityVsEnergy, ptwXYPoints **norms ) { - - char const *link, *energyInMWUnits[2] = { "MeV", "" }; - xDataTOM_element *reference, *productTOM, *multiplicity, *weights, *pointwise; - - if( ( reference = xDataTOME_getOneElementByName( smr, element, "reference", 1 ) ) == NULL ) goto err; - if( ( link = xDataTOM_getAttributesValueInElement( reference, "xlink:href" ) ) == NULL ) goto err; - if( ( productTOM = xDataTOM_getLinksElement( smr, reference, link ) ) == NULL ) goto err; - if( ( multiplicity = xDataTOME_getOneElementByName( smr, productTOM, "multiplicity", 1 ) ) == NULL ) goto err; - /* Currently, only pointwise supported. */ - if( ( pointwise = xDataTOME_getOneElementByName( smr, multiplicity, "pointwise", 1 ) ) == NULL ) goto err; - if( ( *multiplicityVsEnergy = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, pointwise, energyInMWUnits ) ) == NULL ) goto err; - - if( ( weights = xDataTOME_getOneElementByName( smr, element, "weights", 1 ) ) == NULL ) goto err; - if( ( pointwise = xDataTOME_getOneElementByName( smr, weights, "pointwise", 1 ) ) == NULL ) goto err; - if( ( *norms = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, pointwise, energyInMWUnits ) ) == NULL ) goto err; - - return( 0 ); - -err: - if( *multiplicityVsEnergy != NULL ) *multiplicityVsEnergy = ptwXY_free( *multiplicityVsEnergy ); - if( *norms != NULL ) *norms = ptwXY_free( *norms ); - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_product_getDomain( statusMessageReporting *smr, MCGIDI_product *product, double *EMin, double *EMax ) { - - return( MCGIDI_outputChannel_getDomain( smr, product->outputChannel, EMin, EMax ) ); -} -/* -************************************************************ -*/ -int MCGIDI_product_setTwoBodyMasses( statusMessageReporting *smr, MCGIDI_product *product, double projectileMass_MeV, double targetMass_MeV, - double productMass_MeV, double residualMass_MeV ) { - - return( MCGIDI_angular_setTwoBodyMasses( smr, product->distribution.angular, projectileMass_MeV, targetMass_MeV, productMass_MeV, residualMass_MeV ) ); -} -/* -************************************************************ -*/ -double MCGIDI_product_getMass_MeV( statusMessageReporting * /*smr*/, MCGIDI_product *product ) { - - return( MCGIDI_POP_getMass_MeV( product->pop ) ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_product_getTargetHeated( statusMessageReporting *smr, MCGIDI_product *product ) { - - return( MCGIDI_outputChannel_getTargetHeated( smr, product->outputChannel ) ); -} -/* -************************************************************ -*/ -double MCGIDI_product_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_product *product ) { - - return( MCGIDI_outputChannel_getProjectileMass_MeV( smr, product->outputChannel ) ); -} -/* -************************************************************ -*/ -double MCGIDI_product_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_product *product ) { - - return( MCGIDI_outputChannel_getTargetMass_MeV( smr, product->outputChannel ) ); -} -/* -************************************************************ -*/ -int MCGIDI_product_sampleMultiplicity( statusMessageReporting * /*smr*/, MCGIDI_product *product, double e_in, double r ) { - - int i, multiplicity; - double y, norm = 1.0; - ptwXYPoints *ptwXY = product->multiplicityVsEnergy; - - if( product->piecewiseMultiplicities != NULL ) { - for( i = 0; i < product->numberOfPiecewiseMultiplicities - 1; i++ ) { - if( e_in < ptwXY_getXMax( product->piecewiseMultiplicities[i] ) ) break; - } - ptwXY = product->piecewiseMultiplicities[i]; - } - y = MCGIDI_sampling_ptwXY_getValueAtX( ptwXY, e_in ); - if( product->norms != NULL ) norm = MCGIDI_sampling_ptwXY_getValueAtX( product->norms, e_in ); - y *= norm; - multiplicity = (int) y; - if( r < ( y - multiplicity ) ) multiplicity++; - - return( multiplicity ); -} -/* -************************************************************ -*/ -int MCGIDI_product_sampleMu( statusMessageReporting *smr, MCGIDI_product *product, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - if( product->distribution.type != MCGIDI_distributionType_angular_e ) { - smr_setReportError2( smr, smr_unknownID, 1, "product distribution is not angular: type = %d", product->distribution.type ); - return( 1 ); - } - return( MCGIDI_angular_sampleMu( smr, product->distribution.angular, modes, decaySamplingInfo ) ); -} - - -/* -************************************************************ -*/ -int MCGIDI_sampledProducts_initialize( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas, int incrementSize ) { - - if( incrementSize < 10 ) incrementSize = 10; - sampledProductsDatas->numberOfProducts = 0; - sampledProductsDatas->numberAllocated = 0; - sampledProductsDatas->incrementSize = incrementSize; - sampledProductsDatas->products = NULL; - return( MCGIDI_sampledProducts_remalloc( smr, sampledProductsDatas ) ); -} -/* -************************************************************ -*/ -int MCGIDI_sampledProducts_release( statusMessageReporting * /*smr*/, MCGIDI_sampledProductsDatas *sampledProductsDatas ) { - - smr_freeMemory( (void **) &(sampledProductsDatas->products) ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampledProducts_remalloc( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas ) { - - int size = sampledProductsDatas->numberAllocated + sampledProductsDatas->incrementSize; - - if( ( sampledProductsDatas->products = (MCGIDI_sampledProductsData *) smr_realloc2( smr, sampledProductsDatas->products, - size * sizeof( MCGIDI_sampledProductsData ), "products" ) ) != NULL ) { - sampledProductsDatas->numberAllocated = size; - return( 0 ); - } - sampledProductsDatas->numberOfProducts = 0; - sampledProductsDatas->numberAllocated = 0; - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampledProducts_addProduct( statusMessageReporting *smr, MCGIDI_sampledProductsDatas *sampledProductsDatas, MCGIDI_sampledProductsData *sampledProductsData ) { - - if( sampledProductsDatas->numberOfProducts == sampledProductsDatas->numberAllocated ) { - if( ( MCGIDI_sampledProducts_remalloc( smr, sampledProductsDatas ) ) != 0 ) return( 1 ); - } - sampledProductsDatas->products[sampledProductsDatas->numberOfProducts] = *sampledProductsData; - sampledProductsDatas->numberOfProducts++; - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampledProducts_number( MCGIDI_sampledProductsDatas *sampledProductsDatas ) { - - return( sampledProductsDatas->numberOfProducts ); -} -/* -************************************************************ -*/ -MCGIDI_sampledProductsData *MCGIDI_sampledProducts_getProductAtIndex( MCGIDI_sampledProductsDatas *sampledProductsDatas, int index ) { - - if( index < 0 ) return( NULL ); - if( index >= sampledProductsDatas->numberOfProducts ) return( NULL ); - return( &(sampledProductsDatas->products[index]) ); -} - -#if defined __cplusplus -} #endif +} +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_protare.cc b/source/processes/hadronic/models/lend/src/MCGIDI_protare.cc new file mode 100644 index 0000000000..156f6db535 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_protare.cc @@ -0,0 +1,2046 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/* *********************************************************************************************************//** + * Returns the proper **MCGIDI** protare base on the type of **GIDI** protare. + * + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfos [in] The list of temperature data to extract from *a_protare*. + * @param a_reactionsToExclude [in] A list of reaction to not include in the MCGIDI::Protare. + * @param a_reactionsToExcludeOffset [in] The starting index for the reactions in this ProtareSingle. + * @param a_allowFixedGrid [in] For internal (i.e., MCGIDI) use only. Users must use the default value. + ***********************************************************************************************************/ + +LUPI_HOST Protare *protareFromGIDIProtare( LUPI::StatusMessageReporting &a_smr, GIDI::Protare const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, + std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset, bool a_allowFixedGrid ) { + + Protare *protare( nullptr ); + + if( a_protare.protareType( ) == GIDI::ProtareType::single ) { + protare = new ProtareSingle( a_smr, static_cast( a_protare ), a_pops, a_settings, a_particles, a_domainHash, + a_temperatureInfos, a_reactionsToExclude, a_reactionsToExcludeOffset, a_allowFixedGrid ); } + else if( a_protare.protareType( ) == GIDI::ProtareType::composite ) { + protare = new ProtareComposite( a_smr, static_cast( a_protare ), a_pops, a_settings, a_particles, a_domainHash, + a_temperatureInfos, a_reactionsToExclude, a_reactionsToExcludeOffset, false ); } + else if( a_protare.protareType( ) == GIDI::ProtareType::TNSL ) { + protare = new ProtareTNSL( a_smr, static_cast( a_protare ), a_pops, a_settings, a_particles, a_domainHash, + a_temperatureInfos, a_reactionsToExclude, a_reactionsToExcludeOffset, false ); + } + + return( protare ); +} + +/*! \class Protare + * Base class for the *MCGIDI* protare classes. + */ + +/* *********************************************************************************************************//** + * @param a_protareType [in] The enum for the type of Protare (i.e., single, composite or TNSL). + * + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Protare::Protare( ProtareType a_protareType ) : + m_protareType( a_protareType ), + m_projectileID( ), + m_projectileIntid( -1 ), + m_projectileIndex( -1 ), + m_projectileUserIndex( -1 ), + m_projectileMass( 0.0 ), + m_projectileExcitationEnergy( 0.0 ), + + m_targetID( ), + m_targetIntid( -1 ), + m_targetIndex( -1 ), + m_targetUserIndex( -1 ), + m_targetMass( 0.0 ), + m_targetExcitationEnergy( 0.0 ), + + m_neutronIndex( -1 ), + m_userNeutronIndex( -1 ), + m_photonIndex( -1 ), + m_userPhotonIndex( -1 ), + + m_evaluation( ), + m_projectileFrame( GIDI::Frame::lab ), + + m_isTNSL_ProtareSingle( false ) { + +} + +/* *********************************************************************************************************//** + * Default base Protare constructor. + * + * @param a_protareType [in] The enum for the type of Protare (i.e., single, composite or TNSL). + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + ***********************************************************************************************************/ + +LUPI_HOST Protare::Protare( ProtareType a_protareType, GIDI::Protare const &a_protare, LUPI_maybeUnused Transporting::MC const &a_settings, PoPI::Database const &a_pops ) : + m_protareType( a_protareType ), + m_projectileID( a_protare.projectile( ).ID( ).c_str( ) ), + m_projectileIntid( -1 ), + m_projectileIndex( MCGIDI_popsIndex( a_pops, m_projectileID.c_str( ) ) ), + m_projectileUserIndex( -1 ), + m_projectileMass( a_protare.projectile( ).mass( "MeV/c**2" ) ), // Includes nuclear excitation energy. + m_projectileExcitationEnergy( a_protare.projectile( ).excitationEnergy( ).value( ) ), + + m_targetID( a_protare.target( ).ID( ).c_str( ) ), + m_targetIntid( -1 ), + m_targetIndex( -1 ), + m_targetUserIndex( -1 ), + m_targetMass( a_protare.target( ).mass( "MeV/c**2" ) ), // Includes nuclear excitation energy. + m_targetExcitationEnergy( a_protare.target( ).excitationEnergy( ).value( ) ), + + m_neutronIndex( MCGIDI_popsIndex( a_pops, PoPI::IDs::neutron ) ), + m_userNeutronIndex( -1 ), + m_photonIndex( MCGIDI_popsIndex( a_pops, PoPI::IDs::photon ) ), + m_userPhotonIndex( -1 ), + + m_evaluation( a_protare.evaluation( ).c_str( ) ), + m_projectileFrame( a_protare.projectileFrame( ) ), + m_productIntids( 0 ), + m_userProductIndices( 0 ), + m_productIntidsTransportable( 0 ), + m_userProductIndicesTransportable( 0 ), + m_isTNSL_ProtareSingle( a_protare.isTNSL_ProtareSingle( ) ) { + + PoPI::Database const &pops = a_protare.protare( 0 )->internalPoPs( ); + m_projectileIntid = MCGIDI_popsIntid( pops, m_projectileID.c_str( ) ); + + if( a_protare.protare( 0 )->interaction( ) != GIDI_MapInteractionTNSLChars ) { + m_targetIntid = MCGIDI_popsIntid( pops, m_targetID.c_str( ) ); + m_targetIndex = MCGIDI_popsIndex( a_pops, m_targetID.c_str( ) ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Protare::~Protare( ) { + +} + +/* *********************************************************************************************************//** + * Sets *this* members *m_productIntids* and *m_productIntidsTransportable* to *a_intids* and *a_transportableIntids* respectively. + * And, sets *this* members *m_productIndices* and *m_productIndicesTransportable* to *a_indices* and *a_transportableIndices* respectively. + * + * @param a_intids [out] The list of intids for the outgoing particles (i.e., products). + * @param a_transportableIntids [in] The list of transportable intids for the outgoing particles (i.e., products). + * @param a_indices [in] The list of indices for the outgoing particles (i.e., products). + * @param a_transportableIndices [in] The list of transportable indices for the outgoing particles (i.e., products). + ***********************************************************************************************************/ + +LUPI_HOST void Protare::productIntidsAndIndices( std::set const &a_intids, std::set const &a_transportableIntids, + std::set const &a_indices, std::set const &a_transportableIndices ) { + + m_productIntids.reserve( a_intids.size( ) ); + m_userProductIndices.reserve( a_intids.size( ) ); + for( std::set::const_iterator iter = a_intids.begin( ); iter != a_intids.end( ); ++iter ) { + m_productIntids.push_back( *iter ); + m_userProductIndices.push_back( -1 ); + } + + m_productIndices.reserve( a_indices.size( ) ); + for( auto iter = a_indices.begin( ); iter != a_indices.end( ); ++iter ) m_productIndices.push_back( *iter ); + + m_productIntidsTransportable.reserve( a_transportableIntids.size( ) ); + m_userProductIndicesTransportable.reserve( a_transportableIntids.size( ) ); + for( std::set::const_iterator iter = a_transportableIntids.begin( ); iter != a_transportableIntids.end( ); ++iter ) { + m_productIntidsTransportable.push_back( *iter ); + m_userProductIndicesTransportable.push_back( -1 ); + } + + m_productIndicesTransportable.reserve( a_transportableIndices.size( ) ); + for( auto iter = a_transportableIndices.begin( ); iter != a_transportableIndices.end( ); ++iter ) m_productIndicesTransportable.push_back( *iter ); +} + +/* *********************************************************************************************************//** + * Returns the list product intids. If *a_transportablesOnly* is true, the list only includes transportable particle. + * + * @param a_transportablesOnly [in] If **true**, a reference to *m_productIntidsTransportable* is returned; otherwise a reference to *m_productIntids* is returned. + ***********************************************************************************************************/ + +LUPI_HOST Vector const &Protare::productIntids( bool a_transportablesOnly ) const { + + if( a_transportablesOnly ) return( m_productIntidsTransportable ); + return( m_productIntids ); +} + +/* *********************************************************************************************************//** + * Returns the list product indices. If *a_transportablesOnly* is true, the list only includes transportable particle. + * + * @param a_transportablesOnly [in] If **true**, a reference to *m_productIndicesTransportable* is returned; otherwise a reference to *m_productIndices* is returned. + ***********************************************************************************************************/ + +LUPI_HOST Vector const &Protare::productIndices( bool a_transportablesOnly ) const { + + if( a_transportablesOnly ) return( m_productIndicesTransportable ); + return( m_productIndices ); +} + +/* *********************************************************************************************************//** + * Returns the list user product indices. If *a_transportablesOnly* is true, the list only includes transportable particle. + * + * @param a_transportablesOnly [in] If **true**, a reference to *m_userProductIndicesTransportable* is returned; otherwise a reference to *m_userProductIndices* is returned. + ***********************************************************************************************************/ + +LUPI_HOST Vector const &Protare::userProductIndices( bool a_transportablesOnly ) const { + + if( a_transportablesOnly ) return( m_userProductIndicesTransportable ); + return( m_userProductIndices ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Protare::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + + if( m_projectileIndex == a_particleIndex ) m_projectileUserIndex = a_userParticleIndex; + if( m_targetIndex == a_particleIndex ) m_targetUserIndex = a_userParticleIndex; + + if( m_photonIndex == a_particleIndex ) m_userPhotonIndex = a_userParticleIndex; + + for( std::size_t i1 = 0; i1 < m_productIndices.size( ); ++i1 ) { + if( m_productIndices[i1] == a_particleIndex ) m_userProductIndices[i1] = a_userParticleIndex; + } + + for( std::size_t i1 = 0; i1 < m_productIndicesTransportable.size( ); ++i1 ) { + if( m_productIndicesTransportable[i1] == a_particleIndex ) m_userProductIndicesTransportable[i1] = a_userParticleIndex; + } + + switch( m_protareType ) { + case ProtareType::single: + static_cast( this )->setUserParticleIndex2( a_particleIndex, a_userParticleIndex ); + break; + case ProtareType::composite: + static_cast( this )->setUserParticleIndex2( a_particleIndex, a_userParticleIndex ); + break; + case ProtareType::TNSL: + static_cast( this )->setUserParticleIndex2( a_particleIndex, a_userParticleIndex ); + break; + } +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Protare::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + + if( m_projectileIntid == a_particleIntid ) m_projectileUserIndex = a_userParticleIndex; + if( m_targetIntid == a_particleIntid ) m_targetUserIndex = a_userParticleIndex; + + if( PoPI::Intids::photon == a_particleIntid ) m_userPhotonIndex = a_userParticleIndex; + + for( std::size_t i1 = 0; i1 < m_productIntids.size( ); ++i1 ) { + if( m_productIntids[i1] == a_particleIntid ) m_userProductIndices[i1] = a_userParticleIndex; + } + + for( std::size_t i1 = 0; i1 < m_productIntidsTransportable.size( ); ++i1 ) { + if( m_productIntidsTransportable[i1] == a_particleIntid ) m_userProductIndicesTransportable[i1] = a_userParticleIndex; + } + + switch( m_protareType ) { + case ProtareType::single: + static_cast( this )->setUserParticleIndexViaIntid2( a_particleIntid, a_userParticleIndex ); + break; + case ProtareType::composite: + static_cast( this )->setUserParticleIndexViaIntid2( a_particleIntid, a_userParticleIndex ); + break; + case ProtareType::TNSL: + static_cast( this )->setUserParticleIndexViaIntid2( a_particleIntid, a_userParticleIndex ); + break; + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Protare::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + serializeCommon( a_buffer, a_mode ); + + switch( m_protareType ) { + case ProtareType::single: + static_cast( this )->serialize2( a_buffer, a_mode ); + break; + case ProtareType::composite: + static_cast( this )->serialize2( a_buffer, a_mode ); + break; + case ProtareType::TNSL: + static_cast( this )->serialize2( a_buffer, a_mode ); + break; + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Protare::serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + serializeCommon( a_buffer, a_mode ); + + switch( m_protareType ) { + case ProtareType::single: + static_cast( this )->serialize2( a_buffer, a_mode ); + break; + case ProtareType::composite: + LUPI_THROW( "Protare::serialize2:: Oops1, this should not happend." ); + break; + case ProtareType::TNSL: + LUPI_THROW( "Protare::serialize2:: Oops2, this should not happend." ); + break; + } +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Protare::serializeCommon( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int protareType1 = 0; + if( a_mode != LUPI::DataBuffer::Mode::Unpack ) { + switch( m_protareType ) { + case ProtareType::single : + break; + case ProtareType::composite : + protareType1 = 1; + break; + case ProtareType::TNSL : + protareType1 = 2; + break; + } + } + DATA_MEMBER_INT( protareType1, a_buffer, a_mode ); + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + switch( protareType1 ) { + case 0 : + m_protareType = ProtareType::single; + break; + case 1 : + m_protareType = ProtareType::composite; + break; + case 2 : + m_protareType = ProtareType::TNSL; + break; + } + } + + DATA_MEMBER_STRING( m_projectileID, a_buffer, a_mode ); + DATA_MEMBER_INT( m_projectileIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_projectileIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_projectileUserIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_projectileMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_projectileExcitationEnergy, a_buffer, a_mode ); + + DATA_MEMBER_STRING( m_targetID, a_buffer, a_mode ); + DATA_MEMBER_INT( m_targetIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_targetIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_targetUserIndex, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetExcitationEnergy, a_buffer, a_mode ); + + DATA_MEMBER_INT( m_photonIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_userPhotonIndex, a_buffer, a_mode ); + + DATA_MEMBER_STRING( m_evaluation, a_buffer, a_mode ); + + int frame = 0; + if( m_projectileFrame == GIDI::Frame::centerOfMass ) frame = 1; + DATA_MEMBER_INT( frame, a_buffer, a_mode ); + m_projectileFrame = GIDI::Frame::lab; + if( frame == 1 ) m_projectileFrame = GIDI::Frame::centerOfMass; + + DATA_MEMBER_VECTOR_INT( m_productIntids, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productIndices, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_userProductIndices, a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_INT( m_productIntidsTransportable, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productIndicesTransportable, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_userProductIndicesTransportable, a_buffer, a_mode ); + + DATA_MEMBER_CAST( m_isTNSL_ProtareSingle, a_buffer, a_mode, bool ); +} + +/* *********************************************************************************************************//** + * Returns the number of memory bytes used by *this*. + * + * @return The number of bytes used by *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE long Protare::sizeOf( ) const { + + long sizeOf1 = 0; + + switch( m_protareType ) { + case ProtareType::single: + sizeOf1 = static_cast( this )->sizeOf2( ); + break; + case ProtareType::composite: + sizeOf1 = static_cast( this )->sizeOf2( ); + break; + case ProtareType::TNSL: + sizeOf1 = static_cast( this )->sizeOf2( ); + break; + } + + return( sizeOf1 ); +} + +/* *********************************************************************************************************//** + * This method counts the number of bytes of memory allocated by *this*. + * This is an improvement to the internalSize() method of getting memory size. + ***********************************************************************************************************/ +LUPI_HOST_DEVICE long Protare::memorySize( ) { + + LUPI::DataBuffer buf; + // Written this way for debugger to modify buf.m_placementStart here for easier double checking. + buf.m_placement = buf.m_placementStart + sizeOf(); + serialize(buf, LUPI::DataBuffer::Mode::Memory); + return( ( buf.m_placement - buf.m_placementStart ) + ( buf.m_sharedPlacement - buf.m_sharedPlacementStart ) ); +} + +/* *********************************************************************************************************//** + * This method counts the number of bytes of memory allocated by *this* and puts it into a_totalMemory. + * If shared memory is used, the size of shared memory is a_sharedMemory. If using shared memory, + * the host code only needs to allocate (a_totalMemory - a_sharedMemory) in main memory. + ***********************************************************************************************************/ +LUPI_HOST_DEVICE void Protare::incrementMemorySize( long &a_totalMemory, long &a_sharedMemory ) { + + LUPI::DataBuffer buf; // Written this way for debugger to modify buf.m_placementStart here for easier double checking. + + buf.m_placement = buf.m_placementStart + sizeOf( ); + serialize( buf, LUPI::DataBuffer::Mode::Memory ); + a_totalMemory += buf.m_placement - buf.m_placementStart; + a_sharedMemory += buf.m_sharedPlacement - buf.m_sharedPlacementStart; +} + +/* *********************************************************************************************************//** + * Returns the number of protares contained in *this*. + * + * @return Integer number of protares. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE std::size_t Protare::numberOfProtares( ) const { + + std::size_t numberOfProtares2 = 0; + + switch( protareType( ) ) { + case ProtareType::single: + numberOfProtares2 = static_cast( this )->numberOfProtares( ); + break; + case ProtareType::composite: + numberOfProtares2 = static_cast( this )->numberOfProtares( ); + break; + case ProtareType::TNSL: + numberOfProtares2 = static_cast( this )->numberOfProtares( ); + break; + } + + return( numberOfProtares2 ); +} + +/* *********************************************************************************************************//** + * Returns the const pointer representing the protare at index *a_index*. + * + * @param a_index [in] Index of protare in *this*. + * + * @return Returns the const pointer representing the protare. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *Protare::protare( std::size_t a_index ) const { + + ProtareSingle const *protare1 = nullptr; + + switch( protareType( ) ) { + case ProtareType::single: + protare1 = static_cast( this )->protare( a_index ); + break; + case ProtareType::composite: + protare1 = static_cast( this )->protare( a_index ); + break; + case ProtareType::TNSL: + protare1 = static_cast( this )->protare( a_index ); + break; + } + + return( protare1 ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the protare at index *a_index*. + * + * @param a_index [in] Index of protare in *this*. + * + * @return Returns the pointer representing the protare. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle *Protare::protare( std::size_t a_index ) { + + ProtareSingle *protare1 = nullptr; + + switch( protareType( ) ) { + case ProtareType::single: + protare1 = static_cast( this )->protare( a_index ); + break; + case ProtareType::composite: + protare1 = static_cast( this )->protare( a_index ); + break; + case ProtareType::TNSL: + protare1 = static_cast( this )->protare( a_index ); + break; + } + + return( protare1 ); +} + +/* *********************************************************************************************************//** + * Returns the pointer to the **ProtareSingle** that contains the (a_index - 1)th reaction. + * + * @param a_index [in] Index of the reaction. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *Protare::protareWithReaction( int a_index ) const { + + ProtareSingle const *protare1 = nullptr; + + switch( protareType( ) ) { + case ProtareType::single: + protare1 = static_cast( this )->protareWithReaction( a_index ); + break; + case ProtareType::composite: + protare1 = static_cast( this )->protareWithReaction( a_index ); + break; + case ProtareType::TNSL: + protare1 = static_cast( this )->protareWithReaction( a_index ); + break; + } + + return( protare1 ); +} + +/* *********************************************************************************************************//** + * Returns the minimum cross section domain for all reaction.. + * + * @return Returns the minimum cross section domain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::minimumEnergy( ) const { + + double minimumEnergy1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + minimumEnergy1 = static_cast( this )->minimumEnergy( ); + break; + case ProtareType::composite: + minimumEnergy1 = static_cast( this )->minimumEnergy( ); + break; + case ProtareType::TNSL: + minimumEnergy1 = static_cast( this )->minimumEnergy( ); + break; + } + + return( minimumEnergy1 ); +} + +/* *********************************************************************************************************//** + * Returns the maximum cross section domain for all reaction.. + * + * @return Returns the maximum cross section domain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::maximumEnergy( ) const { + + double maximumEnergy1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + maximumEnergy1 = static_cast( this )->maximumEnergy( ); + break; + case ProtareType::composite: + maximumEnergy1 = static_cast( this )->maximumEnergy( ); + break; + case ProtareType::TNSL: + maximumEnergy1 = static_cast( this )->maximumEnergy( ); + break; + } + + return( maximumEnergy1 ); +} + +/* *********************************************************************************************************//** + * Returns the list of temperatures for the requested ProtareSingle. + * + * @param a_index [in] Index of the reqested ProtareSingle. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector Protare::temperatures( std::size_t a_index ) const { + + ProtareSingle const *protareSingle = protare( a_index ); + return( protareSingle->temperatures( ) ); +} + +/* *********************************************************************************************************//** + * Returns the projectile's multi-group boundaries that were read from the file (i.e., pre-collapse). + * + * @param a_index [in] Index of the reqested ProtareSingle. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST Vector const &Protare::projectileMultiGroupBoundaries( ) const { + + ProtareSingle const *protareSingle = protare( 0 ); + return( protareSingle->projectileMultiGroupBoundaries( ) ); +} + + +/* *********************************************************************************************************//** + * Returns the projectile's collapsed multi-group boundaries (i.e., those used for transport). + * + * @param a_index [in] Index of the reqested ProtareSingle. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST Vector const &Protare::projectileMultiGroupBoundariesCollapsed( ) const { + + ProtareSingle const *protareSingle = protare( 0 ); + return( protareSingle->projectileMultiGroupBoundariesCollapsed( ) ); +} + +/* *********************************************************************************************************//** + * Returns the number of reactions of *this*. + * + * @return Number of reactions of *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE std::size_t Protare::numberOfReactions( ) const { + + std::size_t numberOfReactions1 = 0; + + switch( protareType( ) ) { + case ProtareType::single: + numberOfReactions1 = static_cast( this )->numberOfReactions( ); + break; + case ProtareType::composite: + numberOfReactions1 = static_cast( this )->numberOfReactions( ); + break; + case ProtareType::TNSL: + numberOfReactions1 = static_cast( this )->numberOfReactions( ); + break; + } + + return( numberOfReactions1 ); +} + +/* *********************************************************************************************************//** + * Returns the reaction at index *a_index*. + * + * @param a_index [in] The index of the reaction to return. + * + * @return The reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction const *Protare::reaction( int a_index ) const { + + Reaction const *reaction1 = nullptr; + + switch( protareType( ) ) { + case ProtareType::single: + reaction1 = static_cast( this )->reaction( a_index ); + break; + case ProtareType::composite: + reaction1 = static_cast( this )->reaction( a_index ); + break; + case ProtareType::TNSL: + reaction1 = static_cast( this )->reaction( a_index ); + break; + } + + return( reaction1 ); +} + +/* *********************************************************************************************************//** + * Returns the number of orphanProducts of *this*. + * + * @return Number of orphanProducts of *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE std::size_t Protare::numberOfOrphanProducts( ) const { + + std::size_t numberOfReactions1 = 0; + + switch( protareType( ) ) { + case ProtareType::single: + numberOfReactions1 = static_cast( this )->numberOfOrphanProducts( ); + break; + case ProtareType::composite: + numberOfReactions1 = static_cast( this )->numberOfOrphanProducts( ); + break; + case ProtareType::TNSL: + numberOfReactions1 = static_cast( this )->numberOfOrphanProducts( ); + break; + } + + return( numberOfReactions1 ); +} + +/* *********************************************************************************************************//** + * Returns the orphanProduct at index *a_index*. + * + * @param a_index [in] The index of the orphanProduct to return. + * + * @return The orphanProduct at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction const *Protare::orphanProduct( int a_index ) const { + + Reaction const *orphanProduct1 = nullptr; + + switch( protareType( ) ) { + case ProtareType::single: + orphanProduct1 = static_cast( this )->orphanProduct( a_index ); + break; + case ProtareType::composite: + orphanProduct1 = static_cast( this )->orphanProduct( a_index ); + break; + case ProtareType::TNSL: + orphanProduct1 = static_cast( this )->orphanProduct( a_index ); + break; + } + + return( orphanProduct1 ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has a fission reaction and false otherwise. + * + * @return true is if *this* has a fission reaction and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool Protare::hasFission( ) const { + + bool hasFission1 = false; + + switch( protareType( ) ) { + case ProtareType::single: + hasFission1 = static_cast( this )->hasFission( ); + break; + case ProtareType::composite: + hasFission1 = static_cast( this )->hasFission( ); + break; + case ProtareType::TNSL: + hasFission1 = static_cast( this )->hasFission( ); + break; + } + + return( hasFission1 ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has a photoatomic incoherent doppler broadened reaction and false otherwise. + * + * @return true is if *this* has a specified reaction and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool Protare::hasIncoherentDoppler( ) const { + + bool hasIncoherentDoppler1 = false; + + switch( protareType( ) ) { + case ProtareType::single: + hasIncoherentDoppler1 = static_cast( this )->hasIncoherentDoppler( ); + break; + case ProtareType::composite: + hasIncoherentDoppler1 = static_cast( this )->hasIncoherentDoppler( ); + break; + case ProtareType::TNSL: + hasIncoherentDoppler1 = static_cast( this )->hasIncoherentDoppler( ); + break; + } + + return( hasIncoherentDoppler1 ); +} + +/* *********************************************************************************************************//** + * Returns URR index of *this*. + * + * @return Integer URR index of *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int Protare::URR_index( ) const { + + int URR_index1 = 0; + + switch( protareType( ) ) { + case ProtareType::single: + URR_index1 = static_cast( this )->URR_index( ); + break; + case ProtareType::composite: + URR_index1 = static_cast( this )->URR_index( ); + break; + case ProtareType::TNSL: + URR_index1 = static_cast( this )->URR_index( ); + break; + } + + return( URR_index1 ); +} + +/* *********************************************************************************************************//** + * Returns **true** if *this* has URR probability tables and **false** otherwise. + * + * @return boolean. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool Protare::hasURR_probabilityTables( ) const { + + bool hasURR_probabilityTables1 = false; + + switch( protareType( ) ) { + case ProtareType::single: + hasURR_probabilityTables1 = static_cast( this )->hasURR_probabilityTables( ); + break; + case ProtareType::composite: + hasURR_probabilityTables1 = static_cast( this )->hasURR_probabilityTables( ); + break; + case ProtareType::TNSL: + hasURR_probabilityTables1 = static_cast( this )->hasURR_probabilityTables( ); + break; + } + + return( hasURR_probabilityTables1 ); +} + +/* *********************************************************************************************************//** + * Returns the minimum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return Minimum energy for the unresolved resonance region (URR) domain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::URR_domainMin( ) const { + + double URR_domainMin1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + URR_domainMin1 = static_cast( this )->URR_domainMin( ); + break; + case ProtareType::composite: + URR_domainMin1 = static_cast( this )->URR_domainMin( ); + break; + case ProtareType::TNSL: + URR_domainMin1 = static_cast( this )->URR_domainMin( ); + break; + } + + return( URR_domainMin1 ); +} + +/* *********************************************************************************************************//** + * Returns the maximum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return Maximum energy for the unresolved resonance region (URR) domain. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::URR_domainMax( ) const { + + double URR_domainMax1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + URR_domainMax1 = static_cast( this )->URR_domainMax( ); + break; + case ProtareType::composite: + URR_domainMax1 = static_cast( this )->URR_domainMax( ); + break; + case ProtareType::TNSL: + URR_domainMax1 = static_cast( this )->URR_domainMax( ); + break; + } + + return( URR_domainMax1 ); +} + +/* *********************************************************************************************************//** + * Returns *true* if the reaction at index *a_index* has URR robability tables and *false* otherwise. + * + * @param a_index [in] The index of the reaction. + * + * @return *true* if the reaction has URR robability tables and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool Protare::reactionHasURR_probabilityTables( int a_index ) const { + + bool reactionHasURR_probabilityTables1 = false; + + switch( protareType( ) ) { + case ProtareType::single: + reactionHasURR_probabilityTables1 = static_cast( this )->reactionHasURR_probabilityTables( a_index ); + break; + case ProtareType::composite: + reactionHasURR_probabilityTables1 = static_cast( this )->reactionHasURR_probabilityTables( a_index ); + break; + case ProtareType::TNSL: + reactionHasURR_probabilityTables1 = static_cast( this )->reactionHasURR_probabilityTables( a_index ); + break; + } + + return( reactionHasURR_probabilityTables1 ); +} + +/* *********************************************************************************************************//** + * Returns the threshold for the reaction at index *a_index*. If *a_index* is negative, it is set to 0 before the + * threshold in the regular protare is returned. + * + * @param a_index [in] The index of the reaction. + * + * @return The threshold for reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::threshold( std::size_t a_index ) const { + + double threshold1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + threshold1 = static_cast( this )->threshold( a_index ); + break; + case ProtareType::composite: + threshold1 = static_cast( this )->threshold( a_index ); + break; + case ProtareType::TNSL: + threshold1 = static_cast( this )->threshold( a_index ); + break; + } + + return( threshold1 ); +} + +/* *********************************************************************************************************//** + * Returns the total cross section. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + double crossSection1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + crossSection1 = static_cast( this )->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + break; + case ProtareType::composite: + crossSection1 = static_cast( this )->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + break; + case ProtareType::TNSL: + crossSection1 = static_cast( this )->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + break; + } + + return( crossSection1 ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Protare::crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const { + + switch( protareType( ) ) { + case ProtareType::single: + static_cast( this )->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + break; + case ProtareType::composite: + static_cast( this )->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + break; + case ProtareType::TNSL: + static_cast( this )->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + break; + } +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, + double a_temperature, double a_energy, bool a_sampling ) const { + + double reactionCrossSection1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_hashIndex, + a_temperature, a_energy, a_sampling ); + break; + case ProtareType::composite: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_hashIndex, + a_temperature, a_energy, a_sampling ); + break; + case ProtareType::TNSL: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_hashIndex, + a_temperature, a_energy, a_sampling ); + break; + } + + return( reactionCrossSection1 ); +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const { + + double reactionCrossSection1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_temperature, a_energy ); + break; + case ProtareType::composite: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_temperature, a_energy ); + break; + case ProtareType::TNSL: + reactionCrossSection1 = static_cast( this )->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_temperature, a_energy ); + break; + } + + return( reactionCrossSection1 ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + double depositionEnergy1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + depositionEnergy1 = static_cast( this )->depositionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::composite: + depositionEnergy1 = static_cast( this )->depositionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::TNSL: + depositionEnergy1 = static_cast( this )->depositionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + } + + return( depositionEnergy1 ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition momentum. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition momentum. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const { + + double depositionMomentum1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + depositionMomentum1 = static_cast( this )->depositionMomentum( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::composite: + depositionMomentum1 = static_cast( this )->depositionMomentum( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::TNSL: + depositionMomentum1 = static_cast( this )->depositionMomentum( a_hashIndex, a_temperature, a_energy ); + break; + } + + return( depositionMomentum1 ); +} + +/* *********************************************************************************************************//** + * Returns the total production energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total production energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + double productionEnergy1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + productionEnergy1 = static_cast( this )->productionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::composite: + productionEnergy1 = static_cast( this )->productionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + case ProtareType::TNSL: + productionEnergy1 = static_cast( this )->productionEnergy( a_hashIndex, a_temperature, a_energy ); + break; + } + + return( productionEnergy1 ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with index *a_particleIndex*. + * + * @param a_hashIndex [in] The continuous energy hash or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + * + * @return A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const { + + double gain1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + gain1 = static_cast( this )->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + break; + case ProtareType::composite: + gain1 = static_cast( this )->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + break; + case ProtareType::TNSL: + gain1 = static_cast( this )->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + break; + } + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with intid *a_particleIntid*. + * + * @param a_hashIndex [in] The continuous energy hash or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + * + * @return A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Protare::gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const { + + double gain1 = 0.0; + + switch( protareType( ) ) { + case ProtareType::single: + gain1 = static_cast( this )->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + break; + case ProtareType::composite: + gain1 = static_cast( this )->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + break; + case ProtareType::TNSL: + gain1 = static_cast( this )->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + break; + } + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * Returns a reference to the **m_upscatterModelAGroupVelocities**. + * + * @return Reference to the upscatter model A group velocities. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector const &Protare::upscatterModelAGroupVelocities( ) const { + + Vector const *upscatterModelAGroupVelocities1 = nullptr; + switch( protareType( ) ) { + case ProtareType::single: + upscatterModelAGroupVelocities1 = &static_cast( this )->upscatterModelAGroupVelocities( ); + break; + case ProtareType::composite: + upscatterModelAGroupVelocities1 = &static_cast( this )->upscatterModelAGroupVelocities( ); + break; + case ProtareType::TNSL: + upscatterModelAGroupVelocities1 = &static_cast( this )->upscatterModelAGroupVelocities( ); + break; + } + + return( *upscatterModelAGroupVelocities1 ); +} + +/*! \class ProtareSingle + * Class representing a **GNDS** <**reactionSuite**> node with only data needed for Monte Carlo transport. The + * data are also stored in a way that is better suited for Monte Carlo transport. For example, cross section data + * for each reaction are not stored with its reaction, but within the HeatedCrossSections member of the Protare. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle::ProtareSingle( ) : + Protare( ProtareType::single ), + m_URR_index( -1 ), + m_hasURR_probabilityTables( false ), + m_URR_domainMin( -1.0 ), + m_URR_domainMax( -1.0 ), + m_projectileMultiGroupBoundaries( 0 ), + m_projectileMultiGroupBoundariesCollapsed( 0 ), + m_reactions( 0 ), + m_orphanProducts( 0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfos [in] The list of temperature data to extract from *a_protare*. + * @param a_reactionsToExclude [in] A list of reaction to not include in the MCGIDI::Protare. + * @param a_reactionsToExcludeOffset [in] The starting index for the reactions in this ProtareSingle. + * @param a_allowFixedGrid [in] For internal (i.e., MCGIDI) use only. Users must use the default value. + ***********************************************************************************************************/ + +LUPI_HOST ProtareSingle::ProtareSingle( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareSingle const &a_protare, PoPI::Database const &a_pops, + Transporting::MC &a_settings, GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset, + bool a_allowFixedGrid ) : + Protare( ProtareType::single, a_protare, a_settings, a_pops ), + m_interaction( a_protare.interaction( ).c_str( ) ), + m_URR_index( -1 ), + m_hasURR_probabilityTables( false ), + m_URR_domainMin( -1.0 ), + m_URR_domainMax( -1.0 ), + m_projectileMultiGroupBoundaries( 0 ), + m_projectileMultiGroupBoundariesCollapsed( 0 ), + m_reactions( 0 ), + m_orphanProducts( 0 ), + m_isPhotoAtomic( a_protare.isPhotoAtomic( ) ), + m_heatedCrossSections( ), + m_heatedMultigroupCrossSections( ) { + + a_protare.updateReactionIndices( 0 ); // This is not correct as the offset should be passed as an arguent. + PoPI::Database const &pops = a_protare.protare( 0 )->internalPoPs( ); + + if( !a_protare.isPhotoAtomic( ) ) { + std::set incompleteParticles; + a_protare.incompleteParticles( a_settings, incompleteParticles ); + for( auto particle = a_particles.particles( ).begin( ); particle != a_particles.particles( ).end( ); ++particle ) { + if( incompleteParticles.count( particle->first ) != 0 ) { + std::string message = "Requested particle '" + particle->first + "' is incomplete in '" + a_protare.realFileName( ) + "'."; + if( a_settings.throwOnError( ) ) { + throw std::runtime_error( message.c_str( ) ); } + else { + smr_setReportError2p( a_smr.smr( ), 0, 0, message.c_str( ) ); + } + } + } + } + + SetupInfo setupInfo( *this, a_protare, a_pops, pops ); + setupInfo.m_formatVersion = a_protare.formatVersion( ); + setupInfo.m_GRIN_continuumGammas = a_protare.GRIN_continuumGammas2( ); + + GIDI::Transporting::Particles particles; + for( std::map::const_iterator particle = a_particles.particles( ).begin( ); particle != a_particles.particles( ).end( ); ++particle ) { + setupInfo.m_particleIntids[particle->first] = MCGIDI_popsIntid( pops, particle->first ); + setupInfo.m_particleIndices[particle->first] = MCGIDI_popsIndex( a_pops, particle->first ); + + if( ( m_interaction == GIDI_MapInteractionAtomicChars ) && + !( ( particle->first == PoPI::IDs::photon ) || ( particle->first == PoPI::IDs::electron ) ) ) continue; + particles.add( particle->second ); + } + + GIDI::Transporting::MG multiGroupSettings( a_settings.projectileID( ), GIDI::Transporting::Mode::MonteCarloContinuousEnergy, a_settings.delayedNeutrons( ) ); + multiGroupSettings.setThrowOnError( a_settings.throwOnError( ) ); + + setupInfo.m_distributionLabel = a_temperatureInfos[0].griddedCrossSection( ); + + a_settings.styles( &a_protare.styles( ) ); + + switch( a_settings.crossSectionLookupMode( ) ) { + case Transporting::LookupMode::Data1d::continuousEnergy : + m_continuousEnergy = true; + break; + case Transporting::LookupMode::Data1d::multiGroup : + m_continuousEnergy = false; + if( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::B ) { + multiGroupSettings.setMode( GIDI::Transporting::Mode::multiGroupWithSnElasticUpScatter ); } + else { + multiGroupSettings.setMode( GIDI::Transporting::Mode::multiGroup ); + } + break; + default : + throw std::runtime_error( "ProtareSingle::ProtareSingle: invalid lookupMode" ); + } + m_fixedGrid = a_allowFixedGrid && ( a_protare.projectile( ).ID( ) == PoPI::IDs::photon ) && ( a_settings.fixedGridPoints( ).size( ) > 0 ); + + setupNuclideGammaBranchStateInfos( setupInfo, a_protare, a_settings.makePhotonEmissionProbabilitiesOne( ), + a_settings.zeroNuclearLevelEnergyWidth( ) ); + convertACE_URR_probabilityTablesFromGIDI( a_protare, a_settings, setupInfo ); + + if( ( a_settings.crossSectionLookupMode( ) == Transporting::LookupMode::Data1d::multiGroup ) || + ( a_settings.other1dDataLookupMode( ) == Transporting::LookupMode::Data1d::multiGroup ) ) { + + GIDI::Suite const *transportables = nullptr; + if( setupInfo.m_formatVersion.major( ) > 1 ) { + GIDI::Styles::HeatedMultiGroup const &heatedMultiGroup = *a_protare.styles( ).get( a_settings.label( ) ); + transportables = &heatedMultiGroup.transportables( ); } + else { + std::vector tags = a_protare.styles( ).findAllOfMoniker( GIDI_multiGroupStyleChars ); + + if( tags.size( ) != 1 ) throw std::runtime_error( "MCGIDI::ProtareSingle::ProtareSingle: What is going on here?" ); + GIDI::Styles::MultiGroup const &multiGroup = static_cast( **tags[0] ); + transportables = &multiGroup.transportables( ); + } + + GIDI::Transportable const transportable = *transportables->get( a_protare.projectile( ).ID( ) ); + m_projectileMultiGroupBoundaries = transportable.groupBoundaries( ); + GIDI::Transporting::Particle const *particle = a_particles.particle( a_protare.projectile( ).ID( ) ); + m_projectileMultiGroupBoundariesCollapsed = particle->multiGroup( ).boundaries( ); + } + + std::vector GIDI_reactions; + std::set product_ids; + std::set product_ids_transportable; + GIDI::Reaction const *nuclearPlusCoulombInterferenceReaction = nullptr; + if( a_settings.nuclearPlusCoulombInterferenceOnly( ) ) nuclearPlusCoulombInterferenceReaction = a_protare.nuclearPlusCoulombInterferenceOnlyReaction( ); + + for( std::size_t reactionIndex = 0; reactionIndex < a_protare.reactions( ).size( ); ++reactionIndex ) { + if( a_reactionsToExclude.find( static_cast( reactionIndex + a_reactionsToExcludeOffset ) ) != a_reactionsToExclude.end( ) ) continue; + + GIDI::Reaction const *GIDI_reaction = a_protare.reaction( reactionIndex ); + + if( !GIDI_reaction->active( ) ) continue; + + if( m_continuousEnergy ) { + if( GIDI_reaction->crossSectionThreshold( ) >= a_settings.energyDomainMax( ) ) continue; } + else { + GIDI::Vector multi_group_cross_section = GIDI_reaction->multiGroupCrossSection( a_smr, multiGroupSettings, a_temperatureInfos[0] ); + GIDI::Vector vector = GIDI::collapse( multi_group_cross_section, a_settings, a_particles, 0.0 ); + + std::size_t i1 = 0; + for( ; i1 < vector.size( ); ++i1 ) if( vector[i1] != 0.0 ) break; + if( i1 == vector.size( ) ) continue; + } + if( a_settings.ignoreENDF_MT5( ) && ( GIDI_reaction->ENDF_MT( ) == 5 ) && ( a_reactionsToExclude.size( ) == 0 ) ) continue; + + GIDI_reaction->productIDs( product_ids, particles, false ); + GIDI_reaction->productIDs( product_ids_transportable, particles, true ); + + if( a_settings.nuclearPlusCoulombInterferenceOnly( ) && GIDI_reaction->RutherfordScatteringPresent( ) ) { + if( nuclearPlusCoulombInterferenceReaction != nullptr ) GIDI_reactions.push_back( nuclearPlusCoulombInterferenceReaction ); } + else { + GIDI_reactions.push_back( GIDI_reaction ); + } + } + + bool zeroReactions = GIDI_reactions.size( ) == 0; // Happens when all reactions are skipped in the prior loop. + if( zeroReactions ) GIDI_reactions.push_back( a_protare.reaction( 0 ) ); // Special case where no reaction in the protare is wanted so the first one is used but its cross section is set to 0.0 at all energies. + + setupInfo.m_reactionType = Transporting::Reaction::Type::Reactions; + m_reactions.reserve( GIDI_reactions.size( ) ); + for( auto GIDI_reaction = GIDI_reactions.begin( ); GIDI_reaction != GIDI_reactions.end( ); ++GIDI_reaction ) { + setupInfo.m_reaction = *GIDI_reaction; + setupInfo.m_isPairProduction = (*GIDI_reaction)->isPairProduction( ); + setupInfo.m_isPhotoAtomicIncoherentScattering = (*GIDI_reaction)->isPhotoAtomicIncoherentScattering( ); + setupInfo.m_initialStateIndex = -1; + Reaction *reaction = new Reaction( **GIDI_reaction, setupInfo, a_settings, particles, a_temperatureInfos ); + setupInfo.m_initialStateIndices[(*GIDI_reaction)->label( )] = setupInfo.m_initialStateIndex; + reaction->updateProtareSingleInfo( this, static_cast( m_reactions.size( ) ) ); + m_reactions.push_back( reaction ); + } + + std::set product_intids; + std::set product_indices; + for( std::set::iterator iter = product_ids.begin( ); iter != product_ids.end( ); ++iter ) { + product_intids.insert( MCGIDI_popsIntid( pops, *iter ) ); + product_indices.insert( MCGIDI_popsIndex( a_pops, *iter ) ); + } + std::set product_intids_transportable; + std::set product_indices_transportable; + for( std::set::iterator iter = product_ids_transportable.begin( ); iter != product_ids_transportable.end( ); ++iter ) { + product_intids_transportable.insert( MCGIDI_popsIntid( pops, *iter ) ); + product_indices_transportable.insert( MCGIDI_popsIndex( a_pops, *iter ) ); + } + productIntidsAndIndices( product_intids, product_intids_transportable, product_indices, product_indices_transportable ); + + if( a_settings.sampleNonTransportingParticles( ) || particles.hasParticle( PoPI::IDs::photon ) ) { + setupInfo.m_reactionType = Transporting::Reaction::Type::OrphanProducts; + m_orphanProducts.reserve( a_protare.orphanProducts( ).size( ) ); + std::vector< std::vector > associatedOrphanProductIndices( m_reactions.size( ) ); + + for( std::size_t orphanProductIndex = 0; orphanProductIndex < a_protare.orphanProducts( ).size( ); ++orphanProductIndex ) { + GIDI::Reaction const *GIDI_reaction = a_protare.orphanProduct( orphanProductIndex ); + + if( GIDI_reaction->crossSectionThreshold( ) >= a_settings.energyDomainMax( ) ) continue; + + setupInfo.m_reaction = GIDI_reaction; + Reaction *orphanProductReaction = new Reaction( *GIDI_reaction, setupInfo, a_settings, particles, a_temperatureInfos ); + orphanProductReaction->updateProtareSingleInfo( this, static_cast( m_orphanProducts.size( ) ) ); + m_orphanProducts.push_back( orphanProductReaction ); + + GIDI::Functions::Reference1d const *reference( GIDI_reaction->crossSection( ).get( 0 ) ); + std::string xlink = reference->xlink( ); + GUPI::Ancestry const *ancestry = a_protare.findInAncestry( xlink ); + if( ancestry == nullptr ) throw std::runtime_error( "Could not find xlink for orphan product - 1." ); + ancestry = ancestry->ancestor( ); + if( ancestry == nullptr ) throw std::runtime_error( "Could not find xlink for orphan product - 2." ); + if( ancestry->moniker( ) != GIDI_crossSectionSumChars ) { + ancestry = ancestry->ancestor( ); + if( ancestry == nullptr ) throw std::runtime_error( "Could not find xlink for orphan product - 3." ); + } + GIDI::Sums::CrossSectionSum const *crossSectionSum = static_cast( ancestry ); + GIDI::Sums::Summands const &summands = crossSectionSum->summands( ); + for( std::size_t i1 = 0; i1 < summands.size( ); ++i1 ) { + GIDI::Sums::Summand::Base const *summand = summands[i1]; + + ancestry = a_protare.findInAncestry( summand->href( ) ); + if( ancestry == nullptr ) throw std::runtime_error( "Could not find href for summand - 1." ); + ancestry = ancestry->ancestor( ); + if( ancestry == nullptr ) throw std::runtime_error( "Could not find href for summand - 2." ); + + GIDI::Reaction const *GIDI_reaction2 = static_cast( ancestry ); + for( std::size_t reactionIndex = 0; reactionIndex < m_reactions.size( ); ++reactionIndex ) { + std::string label( m_reactions[reactionIndex]->label( ).c_str( ) ); + + if( label == GIDI_reaction2->label( ) ) { + associatedOrphanProductIndices[reactionIndex].push_back( static_cast( m_orphanProducts.size( ) ) - 1 ); + break; + } + } + } + } + + for( std::size_t reactionIndex = 0; reactionIndex < m_reactions.size( ); ++reactionIndex ) { + Reaction *reaction = m_reactions[reactionIndex]; + std::size_t size = associatedOrphanProductIndices[reactionIndex].size( ); + if( size > 0 ) { + std::vector associatedOrphanProducts; + for( std::size_t index1 = 0; index1 < size; ++index1 ) { + int associatedOrphanProductIndex = associatedOrphanProductIndices[reactionIndex][index1]; + m_orphanProducts[associatedOrphanProductIndex]->addOrphanProductToProductList( associatedOrphanProducts ); + } + reaction->setOrphanProductData( associatedOrphanProductIndices[reactionIndex], associatedOrphanProducts ); + } + } + } + + std::vector GIDI_orphanProducts; + for( std::size_t reactionIndex = 0; reactionIndex < a_protare.orphanProducts( ).size( ); ++reactionIndex ) { + GIDI::Reaction const *GIDI_reaction = a_protare.orphanProduct( reactionIndex ); + + if( GIDI_reaction->crossSectionThreshold( ) >= a_settings.energyDomainMax( ) ) continue; + GIDI_orphanProducts.push_back( GIDI_reaction ); + } + + if( m_continuousEnergy ) { + m_heatedCrossSections.update( a_smr, setupInfo, a_settings, particles, a_domainHash, a_temperatureInfos, GIDI_reactions, GIDI_orphanProducts, + m_fixedGrid, zeroReactions ); + m_hasURR_probabilityTables = m_heatedCrossSections.hasURR_probabilityTables( ); + m_URR_domainMin = m_heatedCrossSections.URR_domainMin( ); + m_URR_domainMax = m_heatedCrossSections.URR_domainMax( ); } + else { + m_heatedMultigroupCrossSections.update( a_smr, a_protare, setupInfo, a_settings, particles, a_temperatureInfos, GIDI_reactions, + GIDI_orphanProducts, zeroReactions, a_reactionsToExclude ); + } + + if( ( PoPI::Intids::photon != projectileIntid( ) ) && ( PoPI::Intids::electron != projectileIntid( ) ) && ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::A ) ) { + GIDI::Styles::Base const *style = a_protare.styles( ).get( a_settings.upscatterModelALabel( ) ); + + if( style->moniker( ) == GIDI_SnElasticUpScatterStyleChars ) style = a_protare.styles( ).get( style->derivedStyle( ) ); + if( style->moniker( ) != GIDI_heatedMultiGroupStyleChars ) throw GIDI::Exception( "Label does not yield a heatedMultiGroup style." ); + + GIDI::Styles::HeatedMultiGroup const &heatedMultiGroup = *static_cast( style ); + std::vector const &boundaries = heatedMultiGroup.groupBoundaries( a_protare.projectile( ).ID( ) ); + + m_upscatterModelAGroupVelocities.resize( boundaries.size( ) ); + for( std::size_t i1 = 0; i1 < boundaries.size( ); ++i1 ) m_upscatterModelAGroupVelocities[i1] = MCGIDI_particleBeta( projectileMass( ), boundaries[i1] ); + } + + if( m_continuousEnergy && ( PoPI::Intids::neutron == projectileIntid( ) ) && ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::DBRC ) ) { + int reactionIndex = 0; + for( auto reactionIter = m_reactions.begin( ); reactionIter != m_reactions.end( ); ++reactionIter, ++reactionIndex ) { + if( (*reactionIter)->ENDF_MT( ) == 2 ) { + Reaction *reaction = *reactionIter; + + HeatedCrossSectionContinuousEnergy const *heatedCrossSectionContinuousEnergy = m_heatedCrossSections.heatedCrossSections( )[0]; + HeatedReactionCrossSectionContinuousEnergy const *heatedReactionCrossSectionContinuousEnergy + = heatedCrossSectionContinuousEnergy->reactionCrossSection( reactionIndex ); + + Vector const &energies = heatedCrossSectionContinuousEnergy->energies( ); + Vector const &crossSectionsFloat = heatedReactionCrossSectionContinuousEnergy->crossSections( ); + Vector crossSections( crossSectionsFloat.size( ) ); + int index = 0; + for( auto iter = crossSectionsFloat.begin( ); iter != crossSectionsFloat.end( ); ++iter ) + crossSections[index] = *iter; + + Sampling::Upscatter::ModelDBRC_data *modelDBRC_data = + new Sampling::Upscatter::ModelDBRC_data( projectileMass( ), targetMass( ), energies, crossSections, a_domainHash ); + reaction->setModelDBRC_data( modelDBRC_data ); + break; + } + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle::~ProtareSingle( ) { + + for( Vector::const_iterator iter = m_branches.begin( ); iter < m_branches.end( ); ++iter ) delete *iter; + for( Vector::const_iterator iter = m_nuclideGammaBranchStateInfos.begin( ); iter < m_nuclideGammaBranchStateInfos.end( ); ++iter ) delete *iter; + for( Vector::const_iterator iter = m_reactions.begin( ); iter < m_reactions.end( ); ++iter ) delete *iter; + for( Vector::const_iterator iter = m_orphanProducts.begin( ); iter < m_orphanProducts.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareSingle::setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ) { + + m_heatedCrossSections.setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + m_heatedMultigroupCrossSections.setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + for( auto iter = m_reactions.begin( ); iter < m_reactions.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + for( auto iter = m_orphanProducts.begin( ); iter < m_orphanProducts.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareSingle::setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ) { + + m_heatedCrossSections.setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + m_heatedMultigroupCrossSections.setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + for( auto iter = m_reactions.begin( ); iter < m_reactions.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + for( auto iter = m_orphanProducts.begin( ); iter < m_orphanProducts.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the protare (i.e., *this*) if *a_index* is 0 and nullptr otherwise. + * + * @param a_index [in] Must always be 0. + * + * @return Returns the pointer representing *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareSingle::protare( std::size_t a_index ) const { + + if( a_index != 0 ) return( nullptr ); + return( this ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the protare (i.e., *this*) if *a_index* is 0 and nullptr otherwise. + * + * @param a_index [in] Must always be 0. + * + * @return Returns the pointer representing *this*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle *ProtareSingle::protare( std::size_t a_index ) { + + if( a_index != 0 ) return( nullptr ); + return( this ); +} + +/* *********************************************************************************************************//** + * Returns the pointer to the **this** if (*a_index* - 1)th is a value reaction index and nullptr otherwise. + * + * @param a_index [in] Index of the reaction. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareSingle::protareWithReaction( int a_index ) const { + + if( a_index < 0 ) return( nullptr ); + if( static_cast( a_index ) < numberOfReactions( ) ) return( this ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the list of temperatures for *this*. + * + * @param a_index [in] Index of the reqested ProtareSingle. Must be 0. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector ProtareSingle::temperatures( std::size_t a_index ) const { + + if( a_index != 0 ) LUPI_THROW( "ProtareSingle::temperatures: a_index not 0." ); + if( m_continuousEnergy ) return( m_heatedCrossSections.temperatures( ) ); + return( m_heatedMultigroupCrossSections.temperatures( ) ); +} + +/* *********************************************************************************************************//** + * Sets up the nuclear gamma branching data needed to sample gamma decays. + * + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_protare [in] The **GIDI::Protare** whose data are to be used to construct gamma branching data. + * @param a_makePhotonEmissionProbabilitiesOne [in] If true, all photon emission probabilities are set to 1.0 (i.e., all ICCs are set to 0.0). + ***********************************************************************************************************/ + +LUPI_HOST void ProtareSingle::setupNuclideGammaBranchStateInfos( SetupInfo &a_setupInfo, GIDI::ProtareSingle const &a_protare, + bool a_makePhotonEmissionProbabilitiesOne, bool a_zeroNuclearLevelEnergyWidth ) { + + PoPI::NuclideGammaBranchStateInfos const &nuclideGammaBranchStateInfos = a_protare.nuclideGammaBranchStateInfos( ); + std::vector nuclideGammaBranchInfos; + + for( std::size_t i1 = 0; i1 < nuclideGammaBranchStateInfos.size( ); ++i1 ) { + a_setupInfo.m_stateNamesToIndices[nuclideGammaBranchStateInfos[i1]->state( )] = (int) i1; + PoPI::NuclideGammaBranchStateInfo const *nuclideGammaBranchStateInfo = nuclideGammaBranchStateInfos.find( nuclideGammaBranchStateInfos[i1]->state( ) ); + a_setupInfo.m_nuclearLevelEnergies[nuclideGammaBranchStateInfos[i1]->state( )] = nuclideGammaBranchStateInfo->nuclearLevelEnergy( ); + } + + m_nuclideGammaBranchStateInfos.reserve( nuclideGammaBranchStateInfos.size( ) ); + for( std::size_t i1 = 0; i1 < nuclideGammaBranchStateInfos.size( ); ++i1 ) { + m_nuclideGammaBranchStateInfos.push_back( new NuclideGammaBranchStateInfo( *nuclideGammaBranchStateInfos[i1], nuclideGammaBranchInfos, + a_setupInfo.m_stateNamesToIndices, a_makePhotonEmissionProbabilitiesOne, a_zeroNuclearLevelEnergyWidth ) ); + } + + m_branches.reserve( nuclideGammaBranchInfos.size( ) ); + for( std::size_t i1 = 0; i1 < nuclideGammaBranchInfos.size( ); ++i1 ) m_branches.push_back( nuclideGammaBranchInfos[i1] ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has a fission reaction and false otherwise. + * + * @return true is if *this* has a fission reaction and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareSingle::hasFission( ) const { + + for( Vector::const_iterator iter = m_reactions.begin( ); iter < m_reactions.end( ); ++iter ) { + if( (*iter)->hasFission( ) ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has an incoherent photoatomic doppler broadened reaction and false otherwise. + * + * @return true is if *this* has a specified reaction and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareSingle::hasIncoherentDoppler( ) const { + + for( Vector::const_iterator iter = m_reactions.begin( ); iter < m_reactions.end( ); ++iter ) { + if( (*iter)->ENDF_MT( ) == 1534 ) return( true ); + } + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if *a_energy* with unresolved resonance region (URR) of *this* and false otherwise. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareSingle::inURR( double a_energy ) const { + + if( a_energy < m_URR_domainMin ) return( false ); + if( a_energy > m_URR_domainMax ) return( false ); + + return( true ); +} + +/* *********************************************************************************************************//** + * Returns the total cross section for target temperature *a_temperature* and projectile energy *a_energy*. + * *a_sampling* is only used for multi-group cross section look up. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_sampling [in] Used for multi-group look up. If *true*, use augmented cross sections. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.crossSection( a_URR_protareInfos, m_URR_index, a_hashIndex, a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.crossSection( a_hashIndex, a_temperature, a_sampling ) ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareSingle::crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const { + + if( m_continuousEnergy ) { + if( !m_fixedGrid ) LUPI_THROW( "ProtareSingle::crossSectionVector: continuous energy cannot be supported." ); + m_heatedCrossSections.crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); } + else { + m_heatedMultigroupCrossSections.crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + } +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section for the reaction at index *a_reactionIndex*, for target temperature *a_temperature* and projectile energy *a_energy*. + * *a_sampling* is only used for multi-group cross section look up. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_sampling [in] Used for multi-group look up. If *true*, use augmented cross sections. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, + double a_temperature, double a_energy, bool a_sampling ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.reactionCrossSection( a_reactionIndex, a_URR_protareInfos, m_URR_index, a_hashIndex, + a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.reactionCrossSection( a_reactionIndex, a_hashIndex, a_temperature, a_sampling ) ); +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section for the reaction at index *a_reactionIndex*, for target temperature *a_temperature* and projectile energy *a_energy*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.reactionCrossSection( a_reactionIndex, a_URR_protareInfos, m_URR_index, a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.reactionCrossSection( a_reactionIndex, a_temperature, a_energy ) ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.depositionEnergy( a_hashIndex, a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.depositionEnergy( a_hashIndex, a_temperature ) ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.depositionMomentum( a_hashIndex, a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.depositionMomentum( a_hashIndex, a_temperature ) ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.productionEnergy( a_hashIndex, a_temperature, a_energy ) ); + + return( m_heatedMultigroupCrossSections.productionEnergy( a_hashIndex, a_temperature ) ); +} + +/* *********************************************************************************************************//** + * Returns the index of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ) ); + + return( m_heatedMultigroupCrossSections.gain( a_hashIndex, a_temperature, a_particleIndex ) ); +} + +/* *********************************************************************************************************//** + * Returns the intid of a sampled reaction for a target with termpature *a_temperature*, a projectile with energy *a_energy* and total cross section + * *a_crossSection*. Random numbers are obtained via *a_userrng* and *a_rngState*. + * + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The energy of the projectile. + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareSingle::gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const { + + if( m_continuousEnergy ) return( m_heatedCrossSections.gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ) ); + + return( m_heatedMultigroupCrossSections.gainViaIntid( a_hashIndex, a_temperature, a_particleIntid ) ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareSingle::serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + std::size_t vectorSize; + LUPI::DataBuffer *workingBuffer = &a_buffer; + + DATA_MEMBER_STRING( m_interaction, a_buffer, a_mode ); + DATA_MEMBER_INT( m_URR_index, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_hasURR_probabilityTables, a_buffer, a_mode, bool ); + DATA_MEMBER_DOUBLE( m_URR_domainMin, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_URR_domainMax, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_projectileMultiGroupBoundaries, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_projectileMultiGroupBoundariesCollapsed, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_upscatterModelAGroupVelocities, a_buffer, a_mode ); + + vectorSize = m_nuclideGammaBranchStateInfos.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, *workingBuffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_nuclideGammaBranchStateInfos.resize( vectorSize, &(workingBuffer->m_placement) ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if (workingBuffer->m_placement != nullptr) { + m_nuclideGammaBranchStateInfos[vectorIndex] = new(workingBuffer->m_placement) NuclideGammaBranchStateInfo; + workingBuffer->incrementPlacement( sizeof( NuclideGammaBranchStateInfo ) ); + } + else { + m_nuclideGammaBranchStateInfos[vectorIndex] = new NuclideGammaBranchStateInfo; + } + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_nuclideGammaBranchStateInfos.internalSize(); + a_buffer.incrementPlacement( sizeof( NuclideGammaBranchStateInfo ) * vectorSize ); + } + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_nuclideGammaBranchStateInfos[vectorIndex]->serialize( *workingBuffer, a_mode ); + } + + vectorSize = m_branches.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, *workingBuffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_branches.resize( vectorSize, &(workingBuffer->m_placement) ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if (workingBuffer->m_placement != nullptr) { + m_branches[vectorIndex] = new(workingBuffer->m_placement) NuclideGammaBranchInfo; + workingBuffer->incrementPlacement( sizeof( NuclideGammaBranchInfo ) ); + } + else { + m_branches[vectorIndex] = new NuclideGammaBranchInfo; + } + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_branches.internalSize(); + workingBuffer->incrementPlacement( sizeof( NuclideGammaBranchInfo ) * vectorSize ); + } + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_branches[vectorIndex]->serialize( *workingBuffer, a_mode ); + } + + vectorSize = m_reactions.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, *workingBuffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_reactions.resize( vectorSize, &(workingBuffer->m_placement) ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if (workingBuffer->m_placement != nullptr) { + m_reactions[vectorIndex] = new(workingBuffer->m_placement) Reaction; + workingBuffer->incrementPlacement( sizeof(Reaction)); + } + else { + m_reactions[vectorIndex] = new Reaction; + } + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_reactions.internalSize(); + a_buffer.incrementPlacement( sizeof(Reaction) * vectorSize); + } + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_reactions[vectorIndex]->serialize( *workingBuffer, a_mode ); + m_reactions[vectorIndex]->updateProtareSingleInfo( this, static_cast( vectorIndex ) ); + } + + vectorSize = m_orphanProducts.size( ); + vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, *workingBuffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_orphanProducts.resize( vectorSize, &(workingBuffer->m_placement) ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if (workingBuffer->m_placement != nullptr) { + m_orphanProducts[vectorIndex] = new(workingBuffer->m_placement) Reaction; + workingBuffer->incrementPlacement( sizeof(Reaction)); + } + else { + m_orphanProducts[vectorIndex] = new Reaction; + } + } + } + + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_orphanProducts.internalSize( ); + a_buffer.incrementPlacement( sizeof( Reaction ) * vectorSize ); + } + + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + m_orphanProducts[vectorIndex]->serialize( *workingBuffer, a_mode ); + m_orphanProducts[vectorIndex]->updateProtareSingleInfo( this, static_cast( vectorIndex ) ); + } + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + for( auto reactionIter = m_reactions.begin( ); reactionIter != m_reactions.end( ); ++reactionIter ) { + (*reactionIter)->addOrphanProductToProductList( m_orphanProducts ); + } + } + + DATA_MEMBER_CAST( m_isPhotoAtomic, *workingBuffer, a_mode, bool ); + DATA_MEMBER_CAST( m_continuousEnergy, *workingBuffer, a_mode, bool ); + DATA_MEMBER_CAST( m_fixedGrid, *workingBuffer, a_mode, bool ); + m_heatedCrossSections.serialize( *workingBuffer, a_mode ); + m_heatedMultigroupCrossSections.serialize( *workingBuffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_protareComposite.cc b/source/processes/hadronic/models/lend/src/MCGIDI_protareComposite.cc new file mode 100644 index 0000000000..8813911d0d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_protareComposite.cc @@ -0,0 +1,637 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/*! \class ProtareComposite + * Class representing a **GNDS** <**reactionSuite**> node with only data needed for Monte Carlo transport. The + * data are also stored in a way that is better suited for Monte Carlo transport. For example, cross section data + * for each reaction are not stored with its reaction, but within the HeatedCrossSections member of the Protare. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareComposite::ProtareComposite( ) : + Protare( ProtareType::composite ), + m_numberOfReactions( 0 ), + m_numberOfOrphanProducts( 0 ), + m_minimumEnergy( 0.0 ), + m_maximumEnergy( 0.0 ) { + +} + +/* *********************************************************************************************************//** + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfos [in] The list of temperature data to extract from *a_protare*. + * @param a_reactionsToExclude [in] A list of reaction to not include in the MCGIDI::Protare. This currently does not work for ProtareComposite. + * @param a_reactionsToExcludeOffset [in] The starting index for the reactions in this ProtareSingle. + * @param a_allowFixedGrid [in] For internal (i.e., MCGIDI) use only. Users must use the default value. + ***********************************************************************************************************/ + +LUPI_HOST ProtareComposite::ProtareComposite( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareComposite const &a_protare, PoPI::Database const &a_pops, + Transporting::MC &a_settings, GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, + GIDI::Styles::TemperatureInfos const &a_temperatureInfos, std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset, LUPI_maybeUnused bool a_allowFixedGrid ) : + Protare( ProtareType::composite, a_protare, a_settings, a_pops ), + m_numberOfReactions( 0 ), + m_numberOfOrphanProducts( 0 ) { + + std::vector &protares = static_cast &>( const_cast( a_protare ).protares( ) ); + std::size_t length = static_cast( protares.size( ) ); + + std::set product_intids; + std::set product_intids_transportable; + std::set product_indices; + std::set product_indices_transportable; + + m_protares.resize( length ); + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + GIDI::Protare const *protare = protares[i1]; + + m_protares[i1] = static_cast( protareFromGIDIProtare( a_smr, *protare, a_pops, a_settings, a_particles, a_domainHash, a_temperatureInfos, a_reactionsToExclude, a_reactionsToExcludeOffset, false ) ); + + m_numberOfReactions += m_protares[i1]->numberOfReactions( ); + m_numberOfOrphanProducts += m_protares[i1]->numberOfOrphanProducts( ); + + if( i1 == 0 ) { + m_minimumEnergy = m_protares[0]->minimumEnergy( ); + m_maximumEnergy = m_protares[0]->maximumEnergy( ); + } + if( m_protares[i1]->minimumEnergy( ) < m_minimumEnergy ) m_minimumEnergy = m_protares[i1]->minimumEnergy( ); + if( m_protares[i1]->maximumEnergy( ) > m_maximumEnergy ) m_maximumEnergy = m_protares[i1]->maximumEnergy( ); + + addVectorItemsToSet( m_protares[i1]->productIntids( false ), product_intids ); + addVectorItemsToSet( m_protares[i1]->productIntids( true ), product_intids_transportable ); + addVectorItemsToSet( m_protares[i1]->productIndices( false ), product_indices ); + addVectorItemsToSet( m_protares[i1]->productIndices( true ), product_indices_transportable ); + + a_reactionsToExcludeOffset += protare->numberOfReactions( ); + } + + productIntidsAndIndices( product_intids, product_intids_transportable, product_indices, product_indices_transportable ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareComposite::~ProtareComposite( ) { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) delete m_protares[i1]; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareComposite::setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ) { + + for( auto iter = m_protares.begin( ); iter != m_protares.end( ); ++iter ) (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareComposite::setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ) { + + for( auto iter = m_protares.begin( ); iter != m_protares.end( ); ++iter ) (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareComposite::protare( std::size_t a_index ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t number = m_protares[i1]->numberOfProtares( ); + + if( number > a_index ) return( m_protares[i1]->protare( a_index ) ); + a_index -= number; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle *ProtareComposite::protare( std::size_t a_index ) { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t number = m_protares[i1]->numberOfProtares( ); + + if( number > a_index ) return( m_protares[i1]->protare( a_index ) ); + a_index -= number; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer to the **ProtareSingle** that contains the (a_index - 1)th reaction. + * + * @param a_index [in] Index of the reaction. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareComposite::protareWithReaction( int a_index ) const { + + if( a_index < 0 ) return( nullptr ); + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions ) return( m_protares[i1] ); + a_index -= numberOfReactions; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the list of temperatures for the requested ProtareSingle. + * + * @param a_index [in] Index of the reqested ProtareSingle. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector ProtareComposite::temperatures( std::size_t a_index ) const { + + for( std::size_t i1 = 0; i1 < m_protares.size( ); ++i1 ) { + std::size_t number = m_protares[i1]->numberOfProtares( ); + + if( number > a_index ) return( m_protares[i1]->temperatures( a_index ) ); + a_index -= number; + } + + LUPI_THROW( "ProtareSingle::temperatures: a_index not in range." ); + + Vector temps; // Only to stop compilers from complaining. + return( temps ); +} + +/* *********************************************************************************************************//** + * Returns the reaction at index *a_index*. If *a_index* is negative, the reaction of the TNSL protare at index -*a_index* is + * returned; otherwise, the reaction from the regular protare at index *a_index* is returned. + * + * @param a_index [in] The index of the reaction to return. + * + * @return The reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction const *ProtareComposite::reaction( int a_index ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions ) return( m_protares[i1]->reaction( a_index ) ); + a_index -= numberOfReactions; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the reaction at index *a_index*. If *a_index* is negative, the reaction of the TNSL protare at index -*a_index* is + * returned; otherwise, the reaction from the regular protare at index *a_index* is returned. + * + * @param a_index [in] The index of the reaction to return. + * + * @return The reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction const *ProtareComposite::orphanProduct( int a_index ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfOrphanProducts( ); + + if( a_index < numberOfReactions ) return( m_protares[i1]->orphanProduct( a_index ) ); + a_index -= numberOfReactions; + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns *true* is one of the protares has a fission channel and *false* otherwise. + * + * @return *true* is one of the protares has a fission channel and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareComposite::hasFission( ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + if( m_protares[i1]->hasFission( ) ) return( true ); + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if *this* has a photoatomic incoherent doppler broadened reaction and false otherwise. + * + * @return *true* is one of the protares has a fission channel and *false* otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareComposite::hasIncoherentDoppler( ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + if( m_protares[i1]->hasIncoherentDoppler( ) ) return( true ); + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Returns true if one the the sub-protares of *this* has a unresolved resonance region (URR) data and false otherwise. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareComposite::hasURR_probabilityTables( ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + if( m_protares[i1]->hasURR_probabilityTables( ) ) return( true ); + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Returns the minimum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return The energy or -1 if not URR data present. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::URR_domainMin( ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double URR_domain_min = 1e32; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + if( m_protares[i1]->hasURR_probabilityTables( ) ) { + if( URR_domain_min > m_protares[i1]->URR_domainMin( ) ) URR_domain_min = m_protares[i1]->URR_domainMin( ); + } + } + + if( URR_domain_min == 1e32 ) URR_domain_min = -1.0; + + return( URR_domain_min ); +} + +/* *********************************************************************************************************//** + * Returns the maximum energy for the unresolved resonance region (URR) domain. If no URR data present, returns -1. + * + * @return true is if *this* has a URR data. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::URR_domainMax( ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double URR_domain_max = -1.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + if( m_protares[i1]->hasURR_probabilityTables( ) ) { + if( URR_domain_max < m_protares[i1]->URR_domainMax( ) ) URR_domain_max = m_protares[i1]->URR_domainMax( ); + + } + } + + return( URR_domain_max ); +} + +/* *********************************************************************************************************//** + * Returns *true* if the reaction at index *a_index* has URR robability tables and false otherwise. + * + * @param a_index [in] The index of the reaction. + * + * @return *true* if the reaction has URR robability tables and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareComposite::reactionHasURR_probabilityTables( int a_index ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions ) return( m_protares[i1]->reactionHasURR_probabilityTables( a_index ) ); + a_index -= numberOfReactions; + } + + return( false ); +} + +/* *********************************************************************************************************//** + * Returns the threshold for the reaction at index *a_index*. If *a_index* is negative, it is set to 0 before the + * threshold in the regular protare is returned. + * + * @param a_index [in] The index of the reaction. + * + * @return The threshold for reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::threshold( std::size_t a_index ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + std::size_t numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_index < numberOfReactions ) return( m_protares[i1]->threshold( a_index ) ); + a_index -= numberOfReactions; + } + + return( 0.0 ); +} + +/* *********************************************************************************************************//** + * Returns the total cross section. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double cross_section = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) cross_section += m_protares[i1]->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareComposite::crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + + for( std::size_t i1 = 0; i1 < length; ++i1 ) m_protares[i1]->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double cross_section = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_reactionIndex < numberOfReactions ) { + cross_section = m_protares[i1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + break; + } + a_reactionIndex -= numberOfReactions; + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*. + * + * @param a_reactionIndex [in] The index of the reaction. + * @param a_URR_protareInfos [in] URR information. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double cross_section = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) { + int numberOfReactions = m_protares[i1]->numberOfReactions( ); + + if( a_reactionIndex < numberOfReactions ) { + cross_section = m_protares[i1]->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_temperature, a_energy ); + break; + } + a_reactionIndex -= numberOfReactions; + } + + return( cross_section ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double deposition_energy = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) deposition_energy += m_protares[i1]->depositionEnergy( a_hashIndex, a_temperature, a_energy ); + + return( deposition_energy ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition momentum. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition momentum. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double deposition_momentum = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) deposition_momentum += m_protares[i1]->depositionMomentum( a_hashIndex, a_temperature, a_energy ); + + return( deposition_momentum ); +} + +/* *********************************************************************************************************//** + * Returns the total production energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total production energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double production_energy = 0.0; + + for( std::size_t i1 = 0; i1 < length; ++i1 ) production_energy += m_protares[i1]->productionEnergy( a_hashIndex, a_temperature, a_energy ); + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with index *a_particleIndex*. + * + * @param a_hashIndex [in] The continuous energy hash or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + * + * @return [in] A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double gain1 = m_protares[0]->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + + for( std::size_t i1 = 1; i1 < length; ++i1 ) gain1 += m_protares[i1]->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with intid *a_particleIntid*. + * + * @param a_hashIndex [in] The continuous energy hash or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + * + * @return [in] A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareComposite::gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const { + + std::size_t length = static_cast( m_protares.size( ) ); + double gain1 = m_protares[0]->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + + for( std::size_t i1 = 1; i1 < length; ++i1 ) gain1 += m_protares[i1]->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareComposite::serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + std::size_t vectorSize = m_protares.size( ); + int vectorSizeInt = static_cast( vectorSize ); + LUPI::DataBuffer *workingBuffer = &a_buffer; + + DATA_MEMBER_INT( m_numberOfReactions, a_buffer, a_mode ); + DATA_MEMBER_INT( m_numberOfOrphanProducts, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_minimumEnergy, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_maximumEnergy, a_buffer, a_mode ); + + DATA_MEMBER_INT( vectorSizeInt, *workingBuffer, a_mode ); + vectorSize = static_cast( vectorSizeInt ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_protares.resize( vectorSize, &(workingBuffer->m_placement) ); + for( std::size_t vectorIndex = 0; vectorIndex < vectorSize; ++vectorIndex ) { + if( workingBuffer->m_placement != nullptr ) { + m_protares[vectorIndex] = new(workingBuffer->m_placement) ProtareSingle; + workingBuffer->incrementPlacement( sizeof( ProtareSingle ) ); } + else { + m_protares[vectorIndex] = new ProtareSingle; + } + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_protares.internalSize(); + a_buffer.incrementPlacement( sizeof( ProtareSingle ) * vectorSize ); + } + + for( std::size_t i1 = 0; i1 < vectorSize; ++i1 ) m_protares[i1]->serialize2( a_buffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_protareTNSL.cc b/source/processes/hadronic/models/lend/src/MCGIDI_protareTNSL.cc new file mode 100644 index 0000000000..302e1eabb3 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_protareTNSL.cc @@ -0,0 +1,521 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +/* *********************************************************************************************************//** + * For internal use only. Function to determine the GIDI::Styles::TemperatureInfos from a GIDI::ProtareSingle that contains TNSL data, + * protare given the parameters specified in the ransporting::MC *a_settings*. + * + * @param a_protare [in] A GIDI::ProtareSingle that contains TNSL data. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * + * @return + ***********************************************************************************************************/ + +static LUPI_HOST GIDI::Styles::TemperatureInfos TNSL_temperatureInfos( GIDI::ProtareSingle const &a_protare, LUPI_maybeUnused Transporting::MC &a_settings ) { + + return( a_protare.temperatures( ) ); +} + +/*! \class ProtareTNSL + * Class representing a **GNDS** <**reactionSuite**> node with only data needed for Monte Carlo transport. The + * data are also stored in a way that is better suited for Monte Carlo transport. For example, cross section data + * for each reaction are not stored with its reaction, but within the HeatedCrossSections member of the Protare. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Protare as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareTNSL::ProtareTNSL( ) : + Protare( ProtareType::TNSL ), + m_numberOfTNSLReactions( 0 ), + m_TNSL_maximumEnergy( 0.0 ), + m_TNSL_maximumTemperature( 0.0 ), + m_protareWithElastic( nullptr ), + m_TNSL( nullptr ), + m_protareWithoutElastic( nullptr ) { + +} + +/* *********************************************************************************************************//** + * @param a_smr [Out] If errors are not to be thrown, then the error is reported via this instance. + * @param a_protare [in] The GIDI::Protare whose data is to be used to construct *this*. + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_domainHash [in] The hash data used when looking up a cross section. + * @param a_temperatureInfos [in] The list of temperature data to extract from *a_protare*. + * @param a_reactionsToExclude [in] A list of reaction to not include in the MCGIDI::Protare. This currently does not work for ProtareTNSL. + * @param a_reactionsToExcludeOffset [in] The starting index for the reactions in this ProtareSingle. + * @param a_allowFixedGrid [in] For internal (i.e., MCGIDI) use only. Users must use the default value. + ***********************************************************************************************************/ + +LUPI_HOST ProtareTNSL::ProtareTNSL( LUPI::StatusMessageReporting &a_smr, GIDI::ProtareTNSL const &a_protare, PoPI::Database const &a_pops, Transporting::MC &a_settings, + GIDI::Transporting::Particles const &a_particles, DomainHash const &a_domainHash, GIDI::Styles::TemperatureInfos const &a_temperatureInfos, + std::set const &a_reactionsToExclude, int a_reactionsToExcludeOffset, LUPI_maybeUnused bool a_allowFixedGrid ) : + Protare( ProtareType::TNSL, a_protare, a_settings, a_pops ), + m_protareWithElastic( static_cast( protareFromGIDIProtare( a_smr, *a_protare.protare( ), a_pops, a_settings, a_particles, + a_domainHash, a_temperatureInfos, a_reactionsToExclude, a_reactionsToExcludeOffset, false ) ) ), + m_TNSL( static_cast( protareFromGIDIProtare( a_smr, *a_protare.TNSL( ), a_pops, a_settings, a_particles, a_domainHash, + TNSL_temperatureInfos( *a_protare.TNSL( ), a_settings ), a_reactionsToExclude, a_reactionsToExcludeOffset + static_cast( m_protareWithElastic->numberOfReactions( ) ), false ) ) ), + m_protareWithoutElastic( nullptr ) { + + std::set reactionsToExclude( a_reactionsToExclude ); + + reactionsToExclude.insert( 0 ); + m_protareWithoutElastic = static_cast( protareFromGIDIProtare( a_smr, *a_protare.protare( ), a_pops, a_settings, a_particles, a_domainHash, a_temperatureInfos, reactionsToExclude ) ); + + m_numberOfTNSLReactions = m_TNSL->numberOfReactions( ); + m_TNSL_maximumEnergy = m_TNSL->maximumEnergy( ); + m_TNSL_maximumTemperature = m_TNSL->temperatures( ).back( ); + + std::set product_intids; + std::set product_intids_transportable; + std::set product_indices; + std::set product_indices_transportable; + + addVectorItemsToSet( m_TNSL->productIntids( false ), product_intids ); + addVectorItemsToSet( m_protareWithElastic->productIntids( true ), product_intids_transportable ); + addVectorItemsToSet( m_TNSL->productIndices( false ), product_indices ); + addVectorItemsToSet( m_protareWithElastic->productIndices( true ), product_indices_transportable ); + productIntidsAndIndices( product_intids, product_intids_transportable, product_indices, product_indices_transportable ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareTNSL::~ProtareTNSL( ) { + + delete m_protareWithElastic; + delete m_TNSL; + delete m_protareWithoutElastic; +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareTNSL::setUserParticleIndex2( int a_particleIndex, int a_userParticleIndex ) { + + m_protareWithElastic->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + m_TNSL->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + m_protareWithoutElastic->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs intid *a_particleIntid*. + * + * @param a_particleIntid [in] The PoPs intid of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void ProtareTNSL::setUserParticleIndexViaIntid2( int a_particleIntid, int a_userParticleIndex ) { + + m_protareWithElastic->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + m_TNSL->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + m_protareWithoutElastic->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. Can only be 0 or 1. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareTNSL::protare( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protareWithElastic ); + if( a_index == 1 ) return( m_TNSL ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer representing the (a_index - 1)th **ProtareSingle**. + * + * @param a_index [in] Index of the **ProtareSingle** to return. Can only be 0 or 1. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle *ProtareTNSL::protare( std::size_t a_index ) { + + if( a_index == 0 ) return( m_protareWithElastic ); + if( a_index == 1 ) return( m_TNSL ); + return( nullptr ); +} + +/* *********************************************************************************************************//** + * Returns the pointer to the **ProtareSingle** that contains the (a_index - 1)th reaction. + * + * @param a_index [in] Index of the reaction. + * + * @return Pointer to the requested protare or nullptr if invalid *a_index*.. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ProtareSingle const *ProtareTNSL::protareWithReaction( int a_index ) const { + + int index = a_index - m_numberOfTNSLReactions; + + if( a_index < 0 ) return( nullptr ); + if( index < 0 ) return( m_TNSL ); + return( m_protareWithElastic->protareWithReaction( index ) ); +} + +/* *********************************************************************************************************//** + * Returns the list of temperatures for the requested ProtareSingle. + * + * @param a_index [in] Index of the reqested ProtareSingle. + * + * @return Vector of doubles. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Vector ProtareTNSL::temperatures( std::size_t a_index ) const { + + if( a_index == 0 ) return( m_protareWithElastic->temperatures( 0 ) ); + if( a_index == 1 ) return( m_TNSL->temperatures( 0 ) ); + + LUPI_THROW( "ProtareSingle::temperatures: a_index not 0 or 1." ); + + Vector temps; // Only to stop compilers from complaining. + return( temps ); +} + +/* *********************************************************************************************************//** + * Returns the reaction at index *a_index*. If *a_index* is negative, the reaction of the TNSL protare at index -*a_index* is + * returned; otherwise, the reaction from the regular protare at index *a_index* is returned. + * + * @param a_index [in] The index of the reaction to return. + * + * @return The reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction const *ProtareTNSL::reaction( int a_index ) const { + + int index = a_index - m_numberOfTNSLReactions; + + if( index < 0 ) return( m_TNSL->reaction( a_index ) ); + return( m_protareWithElastic->reaction( index ) ); +} + +/* *********************************************************************************************************//** + * Returns *true* if the reaction at index *a_index* has URR robability tables and false otherwise. + * + * @param a_index [in] The index of the reaction. + * + * @return *true* if the reaction has URR robability tables and false otherwise. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE bool ProtareTNSL::reactionHasURR_probabilityTables( int a_index ) const { + + int index = a_index - m_numberOfTNSLReactions; + + if( index < 0 ) return( false ); + return( m_protareWithElastic->reactionHasURR_probabilityTables( index ) ); +} + +/* *********************************************************************************************************//** + * Returns the threshold for the reaction at index *a_index*. If *a_index* is negative, it is set to 0 before the + * threshold in the regular protare is returned. + * + * @param a_index [in] The index of the reaction. + * + * @return The threshold for reaction at index *a_index*. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::threshold( std::size_t a_index ) const { + + int index = a_index - m_numberOfTNSLReactions; + + if( index < 0 ) return( m_TNSL->threshold( a_index ) ); + return( m_protareWithElastic->threshold( index ) ); +} + +/* *********************************************************************************************************//** + * Returns the total cross section. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + double crossSection1 = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + crossSection1 = m_TNSL->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ) + + m_protareWithoutElastic->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); } + else { + crossSection1 = m_protareWithElastic->crossSection( a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + } + + return( crossSection1 ); +} + +/* *********************************************************************************************************//** + * Adds the energy dependent, total cross section corresponding to the temperature *a_temperature* multiplied by *a_userFactor* to *a_crossSectionVector*. + * + * @param a_temperature [in] Specifies the temperature of the material. + * @param a_userFactor [in] User factor which all cross sections are multiplied by. + * @param a_numberAllocated [in] The length of memory allocated for *a_crossSectionVector*. + * @param a_crossSectionVector [in/out] The energy dependent, total cross section to add cross section data to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareTNSL::crossSectionVector( double a_temperature, double a_userFactor, int a_numberAllocated, double *a_crossSectionVector ) const { + + if( a_temperature <= m_TNSL_maximumTemperature ) { + m_TNSL->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + m_protareWithoutElastic->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); } + else { + m_protareWithElastic->crossSectionVector( a_temperature, a_userFactor, a_numberAllocated, a_crossSectionVector ); + } +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*, for target at temperature *a_temperature* and projectile of energy *a_energy*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_reactionIndex [in] The index of the reaction. + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * @param a_sampling [in] Only used for multi-group cross sections. When sampling, the cross section in the group where threshold + * is present the cross section is augmented. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy, bool a_sampling ) const { + + int index = a_reactionIndex - m_numberOfTNSLReactions; + double crossSection1 = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + if( index < 0 ) { + crossSection1 = m_TNSL->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); } + else { + if( index > 0 ) crossSection1 = m_protareWithElastic->reactionCrossSection( index, a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + } } + else { + if( index >= 0 ) crossSection1 = m_protareWithElastic->reactionCrossSection( index, a_URR_protareInfos, a_hashIndex, a_temperature, a_energy, a_sampling ); + } + + return( crossSection1 ); +} + +/* *********************************************************************************************************//** + * Returns the cross section for reaction at index *a_reactionIndex*, for target at temperature *a_temperature* and projectile of energy *a_energy*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_reactionIndex [in] The index of the reaction. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total cross section. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::reactionCrossSection( int a_reactionIndex, URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy ) const { + + int index = a_reactionIndex - m_numberOfTNSLReactions; + double crossSection1 = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + if( index < 0 ) { + crossSection1 = m_TNSL->reactionCrossSection( a_reactionIndex, a_URR_protareInfos, a_temperature, a_energy ); } + else { + if( index > 0 ) crossSection1 = m_protareWithElastic->reactionCrossSection( index, a_URR_protareInfos, a_temperature, a_energy ); + } } + else { + if( index >= 0 ) crossSection1 = m_protareWithElastic->reactionCrossSection( index, a_URR_protareInfos, a_temperature, a_energy ); + } + + return( crossSection1 ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::depositionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + double deposition_energy = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + deposition_energy = m_TNSL->depositionEnergy( a_hashIndex, a_temperature, a_energy ) + + m_protareWithoutElastic->depositionEnergy( a_hashIndex, a_temperature, a_energy ); } + else { + deposition_energy = m_protareWithElastic->depositionEnergy( a_hashIndex, a_temperature, a_energy ); + } + + return( deposition_energy ); +} + +/* *********************************************************************************************************//** + * Returns the total deposition momentum. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total deposition momentum. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::depositionMomentum( int a_hashIndex, double a_temperature, double a_energy ) const { + + double deposition_momentum = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + deposition_momentum = m_TNSL->depositionMomentum( a_hashIndex, a_temperature, a_energy ) + + m_protareWithoutElastic->depositionMomentum( a_hashIndex, a_temperature, a_energy ); } + else { + deposition_momentum = m_protareWithElastic->depositionMomentum( a_hashIndex, a_temperature, a_energy ); + } + + return( deposition_momentum ); +} + +/* *********************************************************************************************************//** + * Returns the total production energy. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The target temperature. + * @param a_energy [in] The projectile energy. + * + * @return The total production energy. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::productionEnergy( int a_hashIndex, double a_temperature, double a_energy ) const { + + double production_energy = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + production_energy = m_TNSL->productionEnergy( a_hashIndex, a_temperature, a_energy ) + + m_protareWithoutElastic->productionEnergy( a_hashIndex, a_temperature, a_energy ); } + else { + production_energy = m_protareWithElastic->productionEnergy( a_hashIndex, a_temperature, a_energy ); + } + + return( production_energy ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with index *a_particleIndex*. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIndex [in] The index of the particle whose gain is to be returned. + * + * @return [in] A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::gain( int a_hashIndex, double a_temperature, double a_energy, int a_particleIndex ) const { + + double gain1 = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + gain1 = m_TNSL->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ) + + m_protareWithoutElastic->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); } + else { + gain1 = m_protareWithElastic->gain( a_hashIndex, a_temperature, a_energy, a_particleIndex ); + } + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * Returns the gain for particle with intid *a_particleIntid*. + * + * @param a_hashIndex [in] The cross section hash index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy [in] The projectile energy. + * @param a_particleIntid [in] The intid of the particle whose gain is to be returned. + * + * @return [in] A vector of the length of the number of multi-group groups. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ProtareTNSL::gainViaIntid( int a_hashIndex, double a_temperature, double a_energy, int a_particleIntid ) const { + + double gain1 = 0.0; + + if( ( a_energy < m_TNSL_maximumEnergy ) && ( a_temperature <= m_TNSL_maximumTemperature ) ) { + gain1 = m_TNSL->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ) + + m_protareWithoutElastic->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); } + else { + gain1 = m_protareWithElastic->gainViaIntid( a_hashIndex, a_temperature, a_energy, a_particleIntid ); + } + + return( gain1 ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ProtareTNSL::serialize2( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + int numberOfTNSLReactions = static_cast( m_numberOfTNSLReactions ); + DATA_MEMBER_INT( numberOfTNSLReactions, a_buffer, a_mode ); + m_numberOfTNSLReactions = static_cast( numberOfTNSLReactions ); + + DATA_MEMBER_DOUBLE( m_TNSL_maximumEnergy, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_TNSL_maximumTemperature, a_buffer, a_mode ); + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + m_protareWithElastic = new(a_buffer.m_placement) ProtareSingle; + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); + m_TNSL = new(a_buffer.m_placement) ProtareSingle; + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); + m_protareWithoutElastic = new(a_buffer.m_placement) ProtareSingle; + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); } + else { + m_protareWithElastic = new ProtareSingle( ); + m_TNSL = new ProtareSingle( ); + m_protareWithoutElastic = new ProtareSingle( ); + } + } + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); + a_buffer.incrementPlacement( sizeof( ProtareSingle ) ); + } + m_protareWithElastic->serialize2( a_buffer, a_mode ); + m_TNSL->serialize2( a_buffer, a_mode ); + m_protareWithoutElastic->serialize2( a_buffer, a_mode ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_quantitiesLookupMode.cc b/source/processes/hadronic/models/lend/src/MCGIDI_quantitiesLookupMode.cc deleted file mode 100644 index 7b37d36566..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_quantitiesLookupMode.cc +++ /dev/null @@ -1,88 +0,0 @@ -/* -# <> -# <> -*/ - -#include "MCGIDI.h" - -/* ---- MCGIDI_quantitiesLookupModes ---- */ -/* -========================================================= -*/ -MCGIDI_quantitiesLookupModes::MCGIDI_quantitiesLookupModes( int projectilesPOPID ) { - - mProjectilesPOPID = projectilesPOPID; - mProjectileEnergy = -1.; - mGroupIndex = -1; - mProjectileEnergyForGroupIndex = -1.; - mTemperature = 0.; - mCrossSectionMode = MCGIDI_quantityLookupMode_pointwise; - mMultiplicityMode = MCGIDI_quantityLookupMode_pointwise; -} -/* -========================================================= -*/ -MCGIDI_quantitiesLookupModes::~MCGIDI_quantitiesLookupModes( ) { - -} -/* -========================================================= -*/ -int MCGIDI_quantitiesLookupModes::setGroupIndex( GIDI_settings const &settings, bool encloseOutOfRange ) { - - GIDI_settings_particle const *particle = settings.getParticle( mProjectilesPOPID ); - if( particle == NULL ) throw 1; - - mGroupIndex = particle->getGroupIndexFromEnergy( mProjectileEnergy, encloseOutOfRange ); - if( mGroupIndex == -3 ) throw 1; - - mProjectileEnergyForGroupIndex = mProjectileEnergy; - if( mGroupIndex < 0 ) mProjectileEnergyForGroupIndex = -1; - return( mGroupIndex ); -} -/* -========================================================= -*/ -enum MCGIDI_quantityLookupMode MCGIDI_quantitiesLookupModes::getMode( std::string const &quantity ) const { - - if( quantity == std::string( "cross section" ) ) { - return( mCrossSectionMode ); } - else if( quantity == std::string( "multiplicity" ) ) { - return( mMultiplicityMode ); } - else { - throw 1; - } -} -/* -========================================================= -*/ -std::vector MCGIDI_quantitiesLookupModes::getListOfLookupQuanities( ) const { - - std::vector quanities; - - quanities.push_back( std::string( "cross section" ) ); - quanities.push_back( std::string( "multiplicity" ) ); - - return( quanities ); -} -/* -========================================================= -*/ -void MCGIDI_quantitiesLookupModes::setMode( std::string const &quantity, enum MCGIDI_quantityLookupMode mode ) { - - if( quantity == std::string( "cross section" ) ) { - mCrossSectionMode = mode; } - else if( quantity == std::string( "multiplicity" ) ) { - mMultiplicityMode = mode; } - else { - throw 1; - } -} -/* -========================================================= -*/ -void MCGIDI_quantitiesLookupModes::setModeAll( enum MCGIDI_quantityLookupMode mode ) { - - mCrossSectionMode = mode; - mMultiplicityMode = mode; -} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_reaction.cc b/source/processes/hadronic/models/lend/src/MCGIDI_reaction.cc index a68a11402a..8ffdaa3427 100644 --- a/source/processes/hadronic/models/lend/src/MCGIDI_reaction.cc +++ b/source/processes/hadronic/models/lend/src/MCGIDI_reaction.cc @@ -1,567 +1,650 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#include -#include -#include "MCGIDI.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" +#include "MCGIDI.hpp" -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; +namespace MCGIDI { + +/*! \class Reaction + * Class representing a **GNDS** <**reaction**> node with only data needed for Monte Carlo transport. + */ + +/* *********************************************************************************************************//** + * Default constructor used when broadcasting a Reaction as needed by MPI or GPUs. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction::Reaction( ) : + m_protareSingle( nullptr ), + m_reactionIndex( -1 ), + m_GIDI_reactionIndex( -1 ), + m_label( ), + m_ENDF_MT( 0 ), + m_ENDL_C( 0 ), + m_ENDL_S( 0 ), + m_initialStateIndex( -1 ), + m_neutronIndex( -1 ), + m_hasFission( false ), + m_projectileMass( 0.0 ), + m_targetMass( 0.0 ), + m_crossSectionThreshold( 0.0 ), + m_twoBodyThreshold( 0.0 ), + m_upscatterModelASupported( false ), + m_hasFinalStatePhotons( false ), + m_fissionResiduaIntid( -1 ), + m_fissionResiduaIndex( -1 ), + m_fissionResiduaUserIndex( -1 ), + m_fissionResiduals( GIDI::Construction::FissionResiduals::none ), + m_fissionResidualMass( 0.0 ), +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel( nullptr ), #endif -#define nParticleChanges 6 - -static int MCGIDI_reaction_initialize2( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -static int MCGIDI_reaction_particleChanges( MCGIDI_POP *projectile, MCGIDI_POP *target, MCGIDI_productsInfo *productsInfo, int n1, int *particlesChanges ); -static int MCGIDI_reaction_ParseReactionTypeAndDetermineProducts( statusMessageReporting *smr, MCGIDI_POPs *pops, MCGIDI_reaction *reaction ); -static int MCGIDI_reaction_ParseDetermineReactionProducts( statusMessageReporting *smr, MCGIDI_POPs *pops, MCGIDI_outputChannel *outputChannel, - MCGIDI_productsInfo *productsInfo, MCGIDI_reaction *reaction, double *finalQ, int level ); -static int MCGIDI_reaction_addReturnProduct( statusMessageReporting *smr, MCGIDI_productsInfo *productsInfo, int ID, MCGIDI_product *product, - MCGIDI_reaction *reaction, int transportable ); -static int MCGIDI_reaction_setENDL_CSNumbers( statusMessageReporting *smr, MCGIDI_reaction *reaction ); -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_reaction_new( statusMessageReporting *smr ) { - - MCGIDI_reaction *reaction; - - if( ( reaction = (MCGIDI_reaction *) smr_malloc2( smr, sizeof( MCGIDI_reaction ), 0, "reaction" ) ) == NULL ) return( NULL ); - if( MCGIDI_reaction_initialize( smr, reaction ) ) reaction = MCGIDI_reaction_free( smr, reaction ); - return( reaction ); +// GRIN extras: + m_GRIN_specialSampleProducts( false ), + m_GRIN_inelasticThreshold( 0.0 ), + m_GRIN_maximumCaptureIncidentEnergy( 0.0 ), + m_GRIN_inelastic( nullptr ), + m_GRIN_capture( nullptr ) { } -/* -************************************************************ -*/ -int MCGIDI_reaction_initialize( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { - if( MCGIDI_reaction_initialize2( smr, reaction ) != 0 ) return( 1 ); - reaction->transportabilities = new transportabilitiesMap( ); - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_initialize2( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { +/* *********************************************************************************************************//** + * @param a_reaction [in] The GIDI::Reaction whose data is to be used to construct *this*. + * @param a_setupInfo [in] Used internally when constructing a Protare to pass information to other constructors. + * @param a_settings [in] Used to pass user options to the *this* to instruct it which data are desired. + * @param a_particles [in] List of transporting particles and their information (e.g., multi-group boundaries and fluxes). + * @param a_temperatureInfos [in] The list of temperature data to extract from *a_protare*. + ***********************************************************************************************************/ - memset( reaction, 0, sizeof( MCGIDI_reaction ) ); - xDataTOMAL_initial( smr, &(reaction->attributes) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_reaction_free( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { +LUPI_HOST Reaction::Reaction( GIDI::Reaction const &a_reaction, SetupInfo &a_setupInfo, Transporting::MC const &a_settings, + GIDI::Transporting::Particles const &a_particles, LUPI_maybeUnused GIDI::Styles::TemperatureInfos const &a_temperatureInfos ) : + m_protareSingle( nullptr ), + m_reactionIndex( -1 ), + m_GIDI_reactionIndex( a_reaction.reactionIndex( ) ), + m_label( a_reaction.label( ).c_str( ) ), + m_ENDF_MT( a_reaction.ENDF_MT( ) ), + m_ENDL_C( a_reaction.ENDL_C( ) ), + m_ENDL_S( a_reaction.ENDL_S( ) ), + m_initialStateIndex( -1 ), + m_neutronIndex( a_setupInfo.m_neutronIndex ), + m_hasFission( a_reaction.hasFission( ) ), + m_projectileMass( a_setupInfo.m_protare.projectileMass( ) ), + m_targetMass( a_setupInfo.m_protare.targetMass( ) ), + m_crossSectionThreshold( a_reaction.crossSectionThreshold( ) ), + m_twoBodyThreshold( a_reaction.twoBodyThreshold( ) ), + m_upscatterModelASupported( ( a_setupInfo.m_protare.projectileIntid( ) != PoPI::Intids::photon ) && + ( a_setupInfo.m_protare.projectileIntid( ) != PoPI::Intids::electron ) && + ( a_setupInfo.m_reactionType == Transporting::Reaction::Type::Reactions ) ), + m_fissionResiduaIntid( -1 ), + m_fissionResiduaIndex( -1 ), + m_fissionResiduaUserIndex( -1 ), + m_fissionResiduals( GIDI::Construction::FissionResiduals::none ), + m_fissionResidualMass( 0.0 ), - MCGIDI_reaction_release( smr, reaction ); - smr_freeMemory( (void **) &reaction ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_release( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { +// GRIN extras: + m_GRIN_specialSampleProducts( false ), + m_GRIN_inelasticThreshold( 0.0 ), + m_GRIN_maximumCaptureIncidentEnergy( 0.0 ), + m_GRIN_inelastic( nullptr ), + m_GRIN_capture( nullptr ) { - ptwXY_free( reaction->crossSection ); - ptwX_free( reaction->crossSectionGrouped ); - MCGIDI_outputChannel_release( smr, &(reaction->outputChannel) ); - xDataTOMAL_release( &(reaction->attributes) ); - smr_freeMemory( (void **) &(reaction->outputChannelStr) ); - if( reaction->productsInfo.productInfo != NULL ) smr_freeMemory( (void **) &(reaction->productsInfo.productInfo) ); - delete reaction->transportabilities; - MCGIDI_reaction_initialize2( smr, reaction ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_target_heated *target, - MCGIDI_POPs *pops, MCGIDI_reaction *reaction ) { + a_setupInfo.m_hasFinalStatePhotons = false; +#ifndef MCGIDI_USE_OUTPUT_CHANNEL + OutputChannel *m_outputChannel; +#endif + m_outputChannel = new OutputChannel( a_reaction.outputChannel( ), a_setupInfo, a_settings, a_particles ); - xDataTOM_element *child, *linear, *outputChannel; - enum xDataTOM_interpolationFlag independent, dependent; - enum xDataTOM_interpolationQualifier qualifier; - char const *outputChannelStr, *crossSectionUnits[2] = { "MeV", "b" }; + std::set product_ids; - MCGIDI_reaction_initialize( smr, reaction ); - - reaction->target = target; - reaction->reactionType = MCGIDI_reactionType_unknown_e; - if( xDataTOME_copyAttributionList( smr, &(reaction->attributes), element ) ) goto err; - if( xDataTOME_convertAttributeToInteger( smr, element, "ENDF_MT", &(reaction->ENDF_MT) ) ) goto err; - if( ( outputChannelStr = xDataTOM_getAttributesValueInElement( element, "outputChannel" ) ) == NULL ) goto err; - if( ( reaction->outputChannelStr = smr_allocateCopyString2( smr, outputChannelStr, "reaction->outputChannelStr" ) ) == NULL ) goto err; - - if( ( child = xDataTOME_getOneElementByName( smr, element, "crossSection", 1 ) ) == NULL ) goto err; - if( ( linear = xDataTOME_getOneElementByName( smr, child, "linear", 0 ) ) == NULL ) { - if( ( linear = xDataTOME_getOneElementByName( smr, child, "pointwise", 1 ) ) == NULL ) goto err; - } - if( xDataTOME_getInterpolation( smr, linear, 0, &independent, &dependent, &qualifier ) ) goto err; - if( ( independent != xDataTOM_interpolationFlag_linear ) || ( dependent != xDataTOM_interpolationFlag_linear ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "cross section interpolation (%d,%d) is not linear-linear", independent, dependent ); - goto err; - } - if( ( reaction->crossSection = MCGIDI_misc_dataFromElement2ptwXYPointsInUnitsOf( smr, linear, crossSectionUnits ) ) == NULL ) goto err; - reaction->domainValuesPresent = 1; - reaction->EMin = ptwXY_getXMin( reaction->crossSection ); - reaction->EMax = ptwXY_getXMax( reaction->crossSection ); - - if( ( outputChannel = xDataTOME_getOneElementByName( smr, element, "outputChannel", 1 ) ) == NULL ) goto err; - if( MCGIDI_outputChannel_parseFromTOM( smr, outputChannel, pops, &(reaction->outputChannel), reaction, NULL ) ) goto err; - - if( MCGIDI_reaction_ParseReactionTypeAndDetermineProducts( smr, pops, reaction ) != 0 ) goto err; - - return( 0 ); - -err: - MCGIDI_reaction_release( smr, reaction ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_ParseReactionTypeAndDetermineProducts( statusMessageReporting *smr, MCGIDI_POPs *pops, MCGIDI_reaction *reaction ) { - - MCGIDI_outputChannel *outputChannel = &(reaction->outputChannel); - int MT; - int particlesChanges[nParticleChanges], numberOfChanges; - double finalQ = 0.; - - if( MCGIDI_reaction_ParseDetermineReactionProducts( smr, pops, outputChannel, &(reaction->productsInfo), reaction, &finalQ, 0 ) != 0 ) return( 1 ); - reaction->finalQ = finalQ; - MT = MCGIDI_reaction_getENDF_MTNumber( reaction ); - switch( MT ) { - case 2 : - reaction->reactionType = MCGIDI_reactionType_elastic_e; - break; - case 18 : case 19 : case 20 : case 21 : case 38 : - reaction->reactionType = MCGIDI_reactionType_fission_e; - break; - case 102 : - reaction->reactionType = MCGIDI_reactionType_capture_e; - break; - case 5 : - reaction->reactionType = MCGIDI_reactionType_sumOfRemainingOutputChannels_e; - break; - default : - numberOfChanges = MCGIDI_reaction_particleChanges( reaction->target->projectilePOP, reaction->target->targetPOP, &(reaction->productsInfo), - nParticleChanges, particlesChanges ); - - reaction->reactionType = MCGIDI_reactionType_unknown_e; - if( numberOfChanges == 0 ) { - reaction->reactionType = MCGIDI_reactionType_scattering_e; } - else { - reaction->reactionType = MCGIDI_reactionType_nuclearIsomerTransmutation_e; - } - -/* - Currently, these are not handled properly: - MCGIDI_reactionType_nuclearLevelTransition_e - MCGIDI_reactionType_atomic_e -*/ - break; + a_reaction.productIDs( product_ids, a_particles, false ); + m_productIntids.reserve( product_ids.size( ) ); + m_productIndices.reserve( product_ids.size( ) ); + m_userProductIndices.reserve( product_ids.size( ) ); + m_productMultiplicities.reserve( product_ids.size( ) ); + for( std::set::iterator iter = product_ids.begin( ); iter != product_ids.end( ); ++iter ) { + m_productIntids.push_back( MCGIDI_popsIntid( a_setupInfo.m_pops, *iter ) ); + m_productIndices.push_back( a_setupInfo.m_popsUser[*iter] ); + m_userProductIndices.push_back( -1 ); + m_productMultiplicities.push_back( a_reaction.productMultiplicity( *iter ) ); } - MCGIDI_reaction_setENDL_CSNumbers( smr, reaction ); - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_particleChanges( MCGIDI_POP *projectile, MCGIDI_POP *target, MCGIDI_productsInfo *productsInfo, int n1, int *particlesChanges ) { - - int projectileGlobalIndex = projectile->globalPoPsIndex, targetGlobalIndex = target->globalPoPsIndex, i1, i2 = 0; - int gammaIndex = PoPs_particleIndex( "gamma" ); - - if( projectileGlobalIndex != gammaIndex ) { - for( i1 = 0; i1 < productsInfo->numberOfProducts; i1++ ) if( projectileGlobalIndex == productsInfo->productInfo[i1].globalPoPsIndex ) break; - if( i1 == productsInfo->numberOfProducts ) particlesChanges[i2++] = projectileGlobalIndex; + product_ids.clear( ); + a_reaction.productIDs( product_ids, a_particles, true ); + m_productIntidsTransportable.reserve( product_ids.size( ) ); + m_productIndicesTransportable.reserve( product_ids.size( ) ); + m_userProductIndicesTransportable.reserve( product_ids.size( ) ); + for( std::set::iterator iter = product_ids.begin( ); iter != product_ids.end( ); ++iter ) { + m_productIntidsTransportable.push_back( MCGIDI_popsIntid( a_setupInfo.m_pops, *iter ) ); + m_productIndicesTransportable.push_back( a_setupInfo.m_popsUser[*iter] ); + m_userProductIndicesTransportable.push_back( -1 ); } - for( i1 = 0; i1 < productsInfo->numberOfProducts; i1++ ) if( targetGlobalIndex == productsInfo->productInfo[i1].globalPoPsIndex ) break; - if( i1 == productsInfo->numberOfProducts ) particlesChanges[i2++] = targetGlobalIndex; - - for( i1 = 0; i1 < productsInfo->numberOfProducts; i1++ ) { - if( i2 == n1 ) break; - if( /*(*/ projectileGlobalIndex == productsInfo->productInfo[i1].globalPoPsIndex /*)*/ ) continue; - if( /*(*/ targetGlobalIndex == productsInfo->productInfo[i1].globalPoPsIndex /*)*/ ) continue; - if( /*(*/ gammaIndex == productsInfo->productInfo[i1].globalPoPsIndex /*)*/ ) continue; - particlesChanges[i2++] = productsInfo->productInfo[i1].globalPoPsIndex; + if( m_upscatterModelASupported && ( a_settings.upscatterModel( ) == Sampling::Upscatter::Model::A ) ) { + GIDI::Vector const &l_upscatterModelACrossSection = a_reaction.crossSection( ).get( a_settings.upscatterModelALabel( ) )->data( ); + m_upscatterModelACrossSection.resize( l_upscatterModelACrossSection.size( ) ); + for( std::size_t i1 = 0; i1 < l_upscatterModelACrossSection.size( ); ++i1 ) m_upscatterModelACrossSection[i1] = l_upscatterModelACrossSection[i1]; } - return( i2 ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_ParseDetermineReactionProducts( statusMessageReporting *smr, MCGIDI_POPs *pops, MCGIDI_outputChannel *outputChannel, - MCGIDI_productsInfo *productsInfo, MCGIDI_reaction *reaction, double *finalQ, int level ) { -/* -* This function determines all products that can be returned during sampling for this outputChannel. Note, products like 'U238_c' and -* 'U238_e3' are not returned during sampling as both are decay to the groud state (unless a meta-stable is encountered). -* Some examples for projectile 'n' and target 'U238' are: -* outputChannel products returned during sampling. -* 'n + U238' n, U238 -* 'n + U238 + gamma' n, U238, gamma -* 'n + U238_c' n, U238 (even if no gammas are give, return ground state of residual. -* 'n + (U238_e3 -> U238 + gamma)' n, U238, gamma -*/ - int iProduct, nProducts = MCGIDI_outputChannel_numberOfProducts( outputChannel ), globalPoPsIndex, productIsTrackable; - int twoBodyProductsWithData = 0; - MCGIDI_product *product; - MCGIDI_POP *residual; - if( ( level == 0 ) && ( outputChannel->genre == MCGIDI_channelGenre_twoBody_e ) ) { - for( iProduct = 0; iProduct < nProducts; iProduct++ ) { - product = MCGIDI_outputChannel_getProductAtIndex( smr, outputChannel, iProduct ); - if( product->pop->globalPoPsIndex < 0 ) { - twoBodyProductsWithData = -1; } - else if( product->distribution.type == MCGIDI_distributionType_angular_e ) { - if( twoBodyProductsWithData >= 0 ) twoBodyProductsWithData = 1; + m_hasFinalStatePhotons = a_setupInfo.m_hasFinalStatePhotons; + m_fissionResiduals = a_reaction.outputChannel( )->fissionResiduals( ); + if( m_fissionResiduals == GIDI::Construction::FissionResiduals::ENDL99120 ) { + m_fissionResiduaIntid = PoPI::Intids::FissionProductENDL99120; + m_fissionResiduaIndex = MCGIDI_popsIndex( a_setupInfo.m_popsUser, PoPI::IDs::FissionProductENDL99120 ); } + else if( m_fissionResiduals == GIDI::Construction::FissionResiduals::ENDL99125 ) { + m_fissionResiduaIntid = PoPI::Intids::FissionProductENDL99125; + m_fissionResiduaIndex = MCGIDI_popsIndex( a_setupInfo.m_popsUser, PoPI::IDs::FissionProductENDL99125 ); + } + m_fissionResidualMass = 117.5 * PoPI_AMU2MeV_c2; // Hardwired for now as MeV. Only used if m_fissionResiduaIntid != -1. + +#ifndef MCGIDI_USE_OUTPUT_CHANNEL + std::vector products; + std::vector delayedNeutrons; + std::vector Qs; + + m_totalDelayedNeutronMultiplicity = nullptr; + m_outputChannel->moveProductsEtAlToReaction( products, &m_totalDelayedNeutronMultiplicity, delayedNeutrons, Qs ); + + m_products.resize( products.size( ) ); + for( std::size_t index = 0; index < products.size( ); ++index ) m_products[index] = products[index]; + + m_delayedNeutrons.resize( delayedNeutrons.size( ) ); + for( std::size_t index = 0; index < delayedNeutrons.size( ); ++index ) m_delayedNeutrons[index] = delayedNeutrons[index]; + + m_Qs.resize( Qs.size( ) ); + for( std::size_t index = 0; index < Qs.size( ); ++index ) m_Qs[index] = Qs[index]; + + delete m_outputChannel; +#endif + + GIDI::GRIN::GRIN_continuumGammas const *GRIN_continuumGammas = a_setupInfo.m_GRIN_continuumGammas; + if( GRIN_continuumGammas != nullptr ) { + if( m_ENDF_MT == 102 ) { + if( GRIN_continuumGammas->captureLevelProbabilities( ).size( ) > 0 ) { + m_GRIN_specialSampleProducts = true; + m_GRIN_maximumCaptureIncidentEnergy = GRIN_continuumGammas->maximumCaptureIncidentEnergy( ).value( ); + m_GRIN_capture = new GRIN_capture( a_setupInfo, *GRIN_continuumGammas ); + } } + else if( m_ENDF_MT == 91 ) { + GIDI::Suite const &inelasticIncidentEnergies = GRIN_continuumGammas->inelasticIncidentEnergies( ); + if( inelasticIncidentEnergies.size( ) > 0 ) { + m_GRIN_specialSampleProducts = true; + GIDI::GRIN::InelasticIncidentEnergy const *inelasticIncidentEnergy = inelasticIncidentEnergies.get( 0 ); + m_GRIN_inelasticThreshold = inelasticIncidentEnergy->energy( ); + m_GRIN_inelastic = new GRIN_inelastic( a_setupInfo, *GRIN_continuumGammas ); } } } - if( twoBodyProductsWithData < 0 ) twoBodyProductsWithData = 0; - *finalQ += MCGIDI_outputChannel_getQ_MeV( smr, outputChannel, 0 ); - for( iProduct = 0; iProduct < nProducts; iProduct++ ) { - productIsTrackable = twoBodyProductsWithData; - product = MCGIDI_outputChannel_getProductAtIndex( smr, outputChannel, iProduct ); - globalPoPsIndex = product->pop->globalPoPsIndex; - if( ( product->distribution.type != MCGIDI_distributionType_none_e ) && ( product->distribution.type != MCGIDI_distributionType_unknown_e ) ) { - productIsTrackable = 1; - if( globalPoPsIndex < 0 ) { - if( product->distribution.angular != NULL ) { - if( product->distribution.angular->type == MCGIDI_angularType_recoil ) productIsTrackable = 0; - } - if( productIsTrackable ) { - int len = (int) strlen( product->pop->name ); +} - if( len > 2 ) { /* Special case for continuum reactions with data for residual (e.g., n + U233 -> n + U233_c). */ - if( ( product->pop->name[len-2] == '_' ) && ( product->pop->name[len-1] == 'c' ) ) { - for( residual = product->pop; residual->globalPoPsIndex < 0; residual = residual->parent ) ; - productIsTrackable = 1; - globalPoPsIndex = residual->globalPoPsIndex; - } - } - if( globalPoPsIndex < 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "product determination for '%s' cannot be determined", product->pop->name ); - return( 1 ); - } - } - } +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE Reaction::~Reaction( ) { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + delete m_outputChannel; +#else + delete m_totalDelayedNeutronMultiplicity; + for( auto iter = m_products.begin( ); iter != m_products.end( ); ++iter ) delete *iter; + for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) delete *iter; + for( auto iter = m_Qs.begin( ); iter != m_Qs.end( ); ++iter ) delete *iter; +#endif +} +/* *********************************************************************************************************//** + * Returns the Q-value for projectile energy *a_energy*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy_in [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Reaction::finalQ( double a_energy ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + return( m_outputChannel->finalQ( a_energy ) ); +#else + double Q = 0.0; + for( auto Q_iter = m_Qs.begin( ); Q_iter != m_Qs.end( ); ++Q_iter ) Q += (*Q_iter)->evaluate( a_energy ); + + return( Q ); +#endif +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section for target temperature *a_temperature* and projectile energy *a_energy_in*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_hashIndex [in] Specifies the continuous energy or multi-group index. + * @param a_temperature [in] The temperature of the target. + * @param a_energy_in [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Reaction::crossSection( URR_protareInfos const &a_URR_protareInfos, int a_hashIndex, double a_temperature, double a_energy_in ) const { + + return( m_protareSingle->reactionCrossSection( m_reactionIndex, a_URR_protareInfos, a_hashIndex, a_temperature, a_energy_in, false ) ); +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section for target temperature *a_temperature* and projectile energy *a_energy_in*. + * + * @param a_URR_protareInfos [in] URR information. + * @param a_temperature [in] The temperature of the target. + * @param a_energy_in [in] The energy of the projectile. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Reaction::crossSection( URR_protareInfos const &a_URR_protareInfos, double a_temperature, double a_energy_in ) const { + + return( m_protareSingle->reactionCrossSection( m_reactionIndex, a_URR_protareInfos, a_temperature, a_energy_in ) ); +} + +/* *********************************************************************************************************//** + * Returns the reaction's cross section as a pointer to a GIDI::Functions::XYs1d instance. + * + * @returns A GIDI::Functions::XYs1d instance. + ***********************************************************************************************************/ + +LUPI_HOST GIDI::Functions::XYs1d Reaction::crossSectionAsGIDI_XYs1d( double a_temperature ) const { + + return( m_protareSingle->heatedCrossSections( ).reactionCrossSectionAsGIDI_XYs1d( m_reactionIndex, a_temperature ) ); +} + +/* *********************************************************************************************************//** + * Returns the multiplicity for outgoing particle with pops index *a_index*. If the multiplicity is energy dependent, + * the returned value is -1. For energy dependent multiplicities it is better to use the method **productAverageMultiplicity**. + * + * @param a_index [in] The PoPs index of the requested particle. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int Reaction::productMultiplicity( int a_index ) const { + + int i1 = 0; + + for( Vector::iterator iter = m_productIndices.begin( ); iter != m_productIndices.end( ); ++iter, ++i1 ) { + if( *iter == a_index ) return( m_productMultiplicities[i1] ); + } + + return( 0 ); +} +/* *********************************************************************************************************//** + * Returns the multiplicity for outgoing particle with pops intid *a_intid*. If the multiplicity is energy dependent, + * the returned value is -1. For energy dependent multiplicities it is better to use the method **productAverageMultiplicity**. + * + * @param a_intid [in] The PoPs intid of the requested particle. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE int Reaction::productMultiplicityViaIntid( int a_intid ) const { + + int i1 = 0; + + for( Vector::iterator iter = m_productIntids.begin( ); iter != m_productIntids.end( ); ++iter, ++i1 ) { + if( *iter == a_intid ) return( m_productMultiplicities[i1] ); + } + + return( 0 ); +} + +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops index *a_index*. The returned value may not + * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons. + * + * @param a_index [in] The PoPs index of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Reaction::productAverageMultiplicity( int a_index, double a_projectileEnergy ) const { + + double multiplicity = 0.0; + + if( m_crossSectionThreshold > a_projectileEnergy ) return( multiplicity ); + + int i1 = 0; + for( Vector::iterator iter = m_productIndices.begin( ); iter != m_productIndices.end( ); ++iter, ++i1 ) { + if( *iter == a_index ) { + multiplicity = m_productMultiplicities[i1]; + break; } - if( productIsTrackable ) { - if( MCGIDI_reaction_addReturnProduct( smr, productsInfo, globalPoPsIndex, product, reaction, 1 ) != 0 ) return( 1 ); } - else { - if( product->decayChannel.genre != MCGIDI_channelGenre_undefined_e ) { - if( MCGIDI_reaction_ParseDetermineReactionProducts( smr, pops, &(product->decayChannel), productsInfo, reaction, finalQ, level + 1 ) != 0 ) return( 1 ); } + } + + if( multiplicity < 0 ) { +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + multiplicity = m_outputChannel->productAverageMultiplicity( a_index, a_projectileEnergy ); +#else + multiplicity = 0.0; + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + multiplicity += (*productIter)->productAverageMultiplicity( a_index, a_projectileEnergy ); + } + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_index == m_neutronIndex ) ) { + multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + } +#endif + } + + return( multiplicity ); +} + +/* *********************************************************************************************************//** + * Returns the energy dependent multiplicity for outgoing particle with pops intid *a_intid*. The returned value may not + * be an integer. Energy dependent multiplicity mainly occurs for photons and fission neutrons. + * + * @param a_intid [in] The PoPs intid of the requested particle. + * @param a_projectileEnergy [in] The energy of the projectile. + * + * @return The multiplicity value for the requested particle. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double Reaction::productAverageMultiplicityViaIntid( int a_intid, double a_projectileEnergy ) const { + + double multiplicity = 0.0; + + if( m_crossSectionThreshold > a_projectileEnergy ) return( multiplicity ); + + int i1 = 0; + for( Vector::iterator iter = m_productIntids.begin( ); iter != m_productIntids.end( ); ++iter, ++i1 ) { + if( *iter == a_intid ) { + multiplicity = m_productMultiplicities[i1]; + break; + } + } + + if( multiplicity < 0 ) { +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + multiplicity = m_outputChannel->productAverageMultiplicityViaIntid( a_intid, a_projectileEnergy ); +#else + multiplicity = 0.0; + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + multiplicity += (*productIter)->productAverageMultiplicityViaIntid( a_intid, a_projectileEnergy ); + } + + if( ( m_totalDelayedNeutronMultiplicity != nullptr ) && ( a_intid == PoPI::Intids::neutron ) ) { + multiplicity += m_totalDelayedNeutronMultiplicity->evaluate( a_projectileEnergy ); + } +#endif + } + + return( multiplicity ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIndex*. + * + * @param a_particleIndex [in] The PoPs index of the particle whose user index is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Reaction::setUserParticleIndex( int a_particleIndex, int a_userParticleIndex ) { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +#else + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + (*productIter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + } + + for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) + (*iter)->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +#endif + + for( std::size_t i1 = 0; i1 < m_productIndices.size( ); ++i1 ) { + if( m_productIndices[i1] == a_particleIndex ) m_userProductIndices[i1] = a_userParticleIndex; + } + + for( std::size_t i1 = 0; i1 < m_productIndicesTransportable.size( ); ++i1 ) { + if( m_productIndicesTransportable[i1] == a_particleIndex ) m_userProductIndicesTransportable[i1] = a_userParticleIndex; + } + + if( a_particleIndex == m_fissionResiduaIndex ) m_fissionResiduaUserIndex = a_userParticleIndex; + + if( m_GRIN_capture != nullptr ) m_GRIN_capture->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); + if( m_GRIN_inelastic != nullptr ) m_GRIN_inelastic->setUserParticleIndex( a_particleIndex, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * Updates the m_userParticleIndex to *a_userParticleIndex* for all particles with PoPs index *a_particleIntid*. + * + * @param a_particleIndex [in] The PoPs intid of the particle whose user intid is to be set. + * @param a_userParticleIndex [in] The particle index specified by the user. + ***********************************************************************************************************/ + +LUPI_HOST void Reaction::setUserParticleIndexViaIntid( int a_particleIntid, int a_userParticleIndex ) { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +#else + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + (*productIter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + } + + for( auto iter = m_delayedNeutrons.begin( ); iter != m_delayedNeutrons.end( ); ++iter ) + (*iter)->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +#endif + + for( std::size_t i1 = 0; i1 < m_productIntids.size( ); ++i1 ) { + if( m_productIntids[i1] == a_particleIntid ) m_userProductIndices[i1] = a_userParticleIndex; + } + + for( std::size_t i1 = 0; i1 < m_productIntidsTransportable.size( ); ++i1 ) { + if( m_productIntidsTransportable[i1] == a_particleIntid ) m_userProductIndicesTransportable[i1] = a_userParticleIndex; + } + + if( a_particleIntid == m_fissionResiduaIntid ) m_fissionResiduaUserIndex = a_userParticleIndex; + + if( m_GRIN_capture != nullptr ) m_GRIN_capture->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); + if( m_GRIN_inelastic != nullptr ) m_GRIN_inelastic->setUserParticleIndexViaIntid( a_particleIntid, a_userParticleIndex ); +} + +/* *********************************************************************************************************//** + * This method calls the **setModelDBRC_data* method on the first product of *this* with *a_modelDBRC_data*. + * + * @param a_modelDBRC_data [in] The instance storing data needed to treat the DRRC upscatter mode. + ***********************************************************************************************************/ + +LUPI_HOST void Reaction::setModelDBRC_data( Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data ) { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->setModelDBRC_data( a_modelDBRC_data ); +#else + m_products[0]->setModelDBRC_data( a_modelDBRC_data ); +#endif +} + +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product reaction to *a_associatedOrphanProducts*. + * + * @param a_associatedOrphanProducts [in] A list where the associated orphan products are added to. + ***********************************************************************************************************/ + +LUPI_HOST void Reaction::addOrphanProductToProductList( std::vector &a_associatedOrphanProducts ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->addOrphanProductToProductList( a_associatedOrphanProducts ); +#else + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + a_associatedOrphanProducts.push_back( *productIter ); + } +#endif +} + +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product reaction to *a_associatedOrphanProducts*. + * + * @param a_associatedOrphanProducts [in] A list where the associated orphan products are added to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Reaction::addOrphanProductToProductList( Vector &a_associatedOrphanProducts ) const { + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + m_outputChannel->addOrphanProductToProductList( a_associatedOrphanProducts ); +#else + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) { + a_associatedOrphanProducts.push_back( *productIter ); + } +#endif +} + +/* *********************************************************************************************************//** + * Adds the associated orphan products of an orphan product to *a_associatedOrphanProducts*. + * + * @param a_associatedOrphanProducts [in] A list where the associated orphan products are added to. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Reaction::addOrphanProductToProductList( Vector &a_orphanProducts ) { + + for( auto associatedOrphanProductIndex = m_associatedOrphanProductIndices.begin( ); + associatedOrphanProductIndex != m_associatedOrphanProductIndices.end( ); ++associatedOrphanProductIndex ) { + Reaction *orphanProduct = a_orphanProducts[*associatedOrphanProductIndex]; + orphanProduct->addOrphanProductToProductList( m_associatedOrphanProducts ); + } +} + +/* *********************************************************************************************************//** + * Adds the contents of **a_associatedOrphanProductIndcies** and **a_associatedOrphanProducts** to this instance. + * + * @param a_associatedOrphanProductIndcies [in] The list of indices of the orphanProduct reaction that make up the product in **a_associatedOrphanProducts**. + * @param a_associatedOrphanProducts [in] The list of pointers to the associated orphan products. + ***********************************************************************************************************/ + +LUPI_HOST void Reaction::setOrphanProductData( std::vector const &a_associatedOrphanProductIndcies, + std::vector const &a_associatedOrphanProducts ) { + + m_associatedOrphanProductIndices.reserve( a_associatedOrphanProductIndcies.size( ) ); + for( auto iter = a_associatedOrphanProductIndcies.begin( ); iter != a_associatedOrphanProductIndcies.end( ); ++iter ) + m_associatedOrphanProductIndices.push_back( *iter ); + + m_associatedOrphanProducts.reserve( a_associatedOrphanProducts.size( ) ); + for( auto iter = a_associatedOrphanProducts.begin( ); iter != a_associatedOrphanProducts.end( ); ++iter ) + m_associatedOrphanProducts.push_back( *iter ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void Reaction::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_INT( m_GIDI_reactionIndex, a_buffer, a_mode ); + DATA_MEMBER_STRING( m_label, a_buffer, a_mode ); + DATA_MEMBER_INT( m_ENDF_MT, a_buffer, a_mode ); + DATA_MEMBER_INT( m_ENDL_C, a_buffer, a_mode ); + DATA_MEMBER_INT( m_ENDL_S, a_buffer, a_mode ); + DATA_MEMBER_INT( m_initialStateIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_neutronIndex, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_hasFission, a_buffer, a_mode, bool ); + DATA_MEMBER_DOUBLE( m_projectileMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_crossSectionThreshold, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_twoBodyThreshold, a_buffer, a_mode ); + DATA_MEMBER_CAST( m_upscatterModelASupported, a_buffer, a_mode, bool ); + DATA_MEMBER_CAST( m_hasFinalStatePhotons, a_buffer, a_mode, bool ); + DATA_MEMBER_INT( m_fissionResiduaIntid, a_buffer, a_mode ); + DATA_MEMBER_INT( m_fissionResiduaIndex, a_buffer, a_mode ); + DATA_MEMBER_INT( m_fissionResiduaUserIndex, a_buffer, a_mode ); + serializeFissionResiduals( m_fissionResiduals, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_fissionResidualMass, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_upscatterModelACrossSection, a_buffer, a_mode ); + + DATA_MEMBER_VECTOR_INT( m_productIntids, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productIndices, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_userProductIndices, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productMultiplicities, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productIntidsTransportable, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_productIndicesTransportable, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_userProductIndicesTransportable, a_buffer, a_mode ); + +#ifdef MCGIDI_USE_OUTPUT_CHANNEL + bool haveChannel = m_outputChannel != nullptr; + DATA_MEMBER_CAST( haveChannel, a_buffer, a_mode, bool ); + if( haveChannel ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if (a_buffer.m_placement != nullptr) { + m_outputChannel = new(a_buffer.m_placement) OutputChannel(); + a_buffer.incrementPlacement( sizeof(OutputChannel)); + } else { - *finalQ += product->pop->level_MeV; - for( residual = product->pop; residual->globalPoPsIndex < 0; residual = residual->parent ) ; - if( MCGIDI_reaction_addReturnProduct( smr, productsInfo, residual->globalPoPsIndex, product, reaction, 0 ) != 0 ) return( 1 ); - if( product->pop->numberOfGammaBranchs != 0 ) { - int gammaIndex = PoPs_particleIndex( "gamma" ); - if( MCGIDI_reaction_addReturnProduct( smr, productsInfo, gammaIndex, NULL, reaction, 1 ) != 0 ) return( 1 ); + m_outputChannel = new OutputChannel(); + } } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( OutputChannel ) ); + } + m_outputChannel->serialize( a_buffer, a_mode ); + } +#else + serializeQs( a_buffer, a_mode, m_Qs ); + serializeProducts( a_buffer, a_mode, m_products ); + m_totalDelayedNeutronMultiplicity = serializeFunction1d( a_buffer, a_mode, m_totalDelayedNeutronMultiplicity ); + serializeDelayedNeutrons( a_buffer, a_mode, m_delayedNeutrons ); +#endif + + DATA_MEMBER_VECTOR_INT( m_associatedOrphanProductIndices, a_buffer, a_mode ); + + std::size_t vectorSize = m_associatedOrphanProducts.size( ); + int vectorSizeInt = (int) vectorSize; + DATA_MEMBER_INT( vectorSizeInt, a_buffer, a_mode ); + vectorSize = (std::size_t) vectorSizeInt; + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_associatedOrphanProducts.reserve( vectorSize, &a_buffer.m_placement ); } + else if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.m_placement += m_associatedOrphanProducts.internalSize( ); + } + + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + m_protareSingle = nullptr; + m_reactionIndex = -1; + } + + DATA_MEMBER_CAST( m_GRIN_specialSampleProducts, a_buffer, a_mode, bool ); + DATA_MEMBER_DOUBLE( m_GRIN_inelasticThreshold, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_GRIN_maximumCaptureIncidentEnergy, a_buffer, a_mode ); + + if( m_GRIN_specialSampleProducts ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if( a_buffer.m_placement != nullptr ) { + if( m_ENDF_MT == 91 ) { + m_GRIN_inelastic = new(a_buffer.m_placement) GRIN_inelastic; + a_buffer.incrementPlacement( sizeof( GRIN_inelastic ) ); } + else { + m_GRIN_capture = new(a_buffer.m_placement) GRIN_capture; + a_buffer.incrementPlacement( sizeof( GRIN_capture ) ); + } } + else { + if( m_ENDF_MT == 91 ) { + m_GRIN_inelastic = new GRIN_inelastic( ); } + else { + m_GRIN_capture = new GRIN_capture( ); } } } - } - return( 0 ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_addReturnProduct( statusMessageReporting *smr, MCGIDI_productsInfo *productsInfo, int ID, MCGIDI_product *product, - MCGIDI_reaction *reaction, int transportable ) { - int i1; - enum MCGIDI_productMultiplicityType productMultiplicityType; - - MCGIDI_misc_updateTransportabilitiesMap2( reaction->transportabilities, ID, transportable ); - for( i1 = 0; i1 < productsInfo->numberOfProducts; i1++ ) { - if( productsInfo->productInfo[i1].globalPoPsIndex == ID ) break; - } - if( i1 == productsInfo->numberOfProducts ) { - if( productsInfo->numberOfProducts == productsInfo->numberOfAllocatedProducts ) { - productsInfo->numberOfAllocatedProducts += 4; - if( ( productsInfo->productInfo = (MCGIDI_productInfo *) smr_realloc2( smr, productsInfo->productInfo, - productsInfo->numberOfAllocatedProducts * sizeof( MCGIDI_productInfo ), "productsInfo->productInfo" ) ) == NULL ) return( 1 ); - } - productsInfo->numberOfProducts++; - productsInfo->productInfo[i1].globalPoPsIndex = ID; - productsInfo->productInfo[i1].productMultiplicityType = MCGIDI_productMultiplicityType_unknown_e; - productsInfo->productInfo[i1].multiplicity = 0; - productsInfo->productInfo[i1].transportable = transportable; - } - if( product == NULL ) { - productMultiplicityType = MCGIDI_productMultiplicityType_gammaBranching_e; } - else { - if( ( product->multiplicityVsEnergy != NULL ) || ( product->piecewiseMultiplicities != NULL ) ) { - productMultiplicityType = MCGIDI_productMultiplicityType_energyDependent_e; } - else { - productsInfo->productInfo[i1].multiplicity += product->multiplicity; - productMultiplicityType = MCGIDI_productMultiplicityType_integer_e; - } - } - if( ( productsInfo->productInfo[i1].productMultiplicityType == MCGIDI_productMultiplicityType_unknown_e ) || - ( productsInfo->productInfo[i1].productMultiplicityType == productMultiplicityType ) ) { - productsInfo->productInfo[i1].productMultiplicityType = productMultiplicityType; } - else { - productsInfo->productInfo[i1].productMultiplicityType = MCGIDI_productMultiplicityType_mixed_e; - } - return( 0 ); -} -/* -************************************************************ -*/ -enum MCGIDI_reactionType MCGIDI_reaction_getReactionType( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction ) { - - return( reaction->reactionType ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_reaction_getTargetHeated( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction ) { - - return( reaction->target ); -} -/* -************************************************************ -*/ -double MCGIDI_reaction_getProjectileMass_MeV( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { - - return( MCGIDI_target_heated_getProjectileMass_MeV( smr, reaction->target ) ); -} -/* -************************************************************ -*/ -double MCGIDI_reaction_getTargetMass_MeV( statusMessageReporting *smr, MCGIDI_reaction *reaction ) { - - return( MCGIDI_target_heated_getTargetMass_MeV( smr, reaction->target ) ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_getDomain( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction, double *EMin, double *EMax ) { -/* -* Return value -* < 0 No cross section data. -* == 0 Okay and EMin and EMax set. -* > 0 error, EMin and EMax undefined. -*/ - - if( !reaction->domainValuesPresent ) return( -1 ); - *EMin = reaction->EMin; - *EMax = reaction->EMax; - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_fixDomains( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction, double EMin, double EMax, nfu_status *status ) { - - double lowerEps = 1e-14, upperEps = -1e-14; - - if( reaction->EMin == EMin ) lowerEps = 0.; - if( reaction->EMax == EMax ) upperEps = 0.; - if( ( lowerEps == 0. ) && ( upperEps == 0. ) ) return( 0 ); - - *status = ptwXY_dullEdges( reaction->crossSection, lowerEps, upperEps, 1 ); - return( *status != nfu_Okay ); -} -/* -************************************************************ -*/ -double MCGIDI_reaction_getCrossSectionAtE( statusMessageReporting *smr, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &modes, - bool sampling ) { - - double e_in = modes.getProjectileEnergy( ), xsec; - - if( modes.getCrossSectionMode( ) == MCGIDI_quantityLookupMode_pointwise ) { - if( e_in < reaction->EMin ) e_in = reaction->EMin; - if( e_in > reaction->EMax ) e_in = reaction->EMax; - ptwXY_getValueAtX( reaction->crossSection, e_in, &xsec ); } - else if( modes.getCrossSectionMode( ) == MCGIDI_quantityLookupMode_grouped ) { - int index = modes.getGroupIndex( ); - double *xSecP = ptwX_getPointAtIndex( reaction->crossSectionGrouped, index ); - - if( xSecP != NULL ) { - xsec = *xSecP; - if( sampling && ( index == reaction->thresholdGroupIndex ) ) xsec += reaction->thresholdGroupedDeltaCrossSection; } - else { - xsec = 0.; - smr_setReportError2( smr, smr_unknownID, 1, "Invalid cross section group index %d", index ); - } } - else { - xsec = 0.; - } - return( xsec ); -} -/* -************************************************************ -*/ -double MCGIDI_reaction_getFinalQ( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction, MCGIDI_quantitiesLookupModes &/*modes*/ ) { - - return( reaction->finalQ ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_getENDF_MTNumber( MCGIDI_reaction *reaction ) { - - return( reaction->ENDF_MT ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_getENDL_CSNumbers( MCGIDI_reaction *reaction, int *S ) { - - if( S != NULL ) *S = reaction->ENDL_S; - return( reaction->ENDL_C ); -} -/* -************************************************************ -*/ -static int MCGIDI_reaction_setENDL_CSNumbers( statusMessageReporting * /*smr*/, MCGIDI_reaction *reaction ) { - - int MT = MCGIDI_reaction_getENDF_MTNumber( reaction ); - int MT1_50ToC[] = { 1, 10, -3, -4, -5, 0, 0, 0, 0, -10, - 32, 0, 0, 0, 0, 12, 13, 15, 15, 15, - 15, 26, 36, 33, -25, 0, -27, 20, 27, -30, - 0, 22, 24, 25, -35, -36, 14, 15, 0, 0, - 29, 16, 0, 17, 34, 0, 0, 0, 0 }; - int MT100_200ToC[] = { -101, 46, 40, 41, 42, 44, 45, 37, -109, 0, - 18, 48, -113, -114, 19, 39, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -152, -153, -154, 43, -156, -157, 23, 31, -160, - -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, - -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, - -181, -182, -183, -184, -185, -186, -187, -188, 28, -190, - -191, -192, 38, -194, -195, -196, -197, -198, -199, -200 }; - - reaction->ENDL_C = 0; - reaction->ENDL_S = 0; - if( MT <= 0 ) return( 1 ); - if( MT > 891 ) return( 1 ); - if( MT < 50 ) { - reaction->ENDL_C = MT1_50ToC[MT - 1]; } - else if( MT <= 91 ) { - reaction->ENDL_C = 11; - if( MT != 91 ) reaction->ENDL_S = 1; } - else if( ( MT > 100 ) && ( MT <= 200 ) ) { - reaction->ENDL_C = MT100_200ToC[MT - 101]; } - else if( ( MT == 452 ) || ( MT == 455 ) || ( MT == 456 ) || ( MT == 458 ) ) { - reaction->ENDL_C = 15; - if( MT == 455 ) reaction->ENDL_S = 7; } - else if( MT >= 600 ) { - if( MT < 650 ) { - reaction->ENDL_C = 40; - if( MT != 649 ) reaction->ENDL_S = 1; } - else if( MT < 700 ) { - reaction->ENDL_C = 41; - if( MT != 699 ) reaction->ENDL_S = 1; } - else if( MT < 750 ) { - reaction->ENDL_C = 42; - if( MT != 749 ) reaction->ENDL_S = 1; } - else if( MT < 800 ) { - reaction->ENDL_C = 44; - if( MT != 799 ) reaction->ENDL_S = 1; } - else if( MT < 850 ) { - reaction->ENDL_C = 45; - if( MT != 849 ) reaction->ENDL_S = 1; } - else if( ( MT >= 875 ) && ( MT <= 891 ) ) { - reaction->ENDL_C = 12; - if( MT != 891 ) reaction->ENDL_S = 1; - } - } - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_productsInfo *MCGIDI_reaction_getProductsInfo( MCGIDI_reaction *reaction ) { - - return( &(reaction->productsInfo) ); -} -/* -************************************************************ -*/ -int MCGIDI_reaction_recast( statusMessageReporting *smr, MCGIDI_reaction *reaction, GIDI_settings & /*settings*/, - GIDI_settings_particle const *projectileSettings, double temperature_MeV, ptwXPoints *totalGroupedCrossSection ) { - - if( totalGroupedCrossSection != NULL ) { - nfu_status status_nf; - GIDI_settings_group group( projectileSettings->getGroup( ) ); - - if( reaction->crossSectionGrouped != NULL ) reaction->crossSectionGrouped = ptwX_free( reaction->crossSectionGrouped ); - if( ( reaction->crossSectionGrouped = projectileSettings->groupFunction( smr, reaction->crossSection, temperature_MeV, 0 ) ) == NULL ) return( 1 ); - if( ( status_nf = ptwX_add_ptwX( totalGroupedCrossSection, reaction->crossSectionGrouped ) ) != nfu_Okay ) return( 1 ); - - reaction->thresholdGroupDomain = reaction->thresholdGroupedDeltaCrossSection = 0.; - reaction->thresholdGroupIndex = group.getGroupIndexFromEnergy( reaction->EMin, false ); - if( reaction->thresholdGroupIndex > -1 ) { - reaction->thresholdGroupDomain = group[reaction->thresholdGroupIndex+1] - reaction->EMin; - if( reaction->thresholdGroupDomain > 0 ) { - /* factor 2 for linear reject in bin but above threshold. */ - reaction->thresholdGroupedDeltaCrossSection = *ptwX_getPointAtIndex( reaction->crossSectionGrouped, reaction->thresholdGroupIndex ) * - ( 2 * ( group[reaction->thresholdGroupIndex+1] - group[reaction->thresholdGroupIndex] ) / reaction->thresholdGroupDomain - 1 ); + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + if( m_ENDF_MT == 91 ) { + a_buffer.incrementPlacement( sizeof( GRIN_inelastic ) ); } + else { + a_buffer.incrementPlacement( sizeof( GRIN_capture ) ); } } + + if( m_ENDF_MT == 91 ) { + m_GRIN_inelastic->serialize( a_buffer, a_mode ); } + else { + m_GRIN_capture->serialize( a_buffer, a_mode ); + } } - return( 0 ); } -/* -*********************** productsInfo *********************** -*/ -/* -************************************************************ -*/ -int MCGIDI_productsInfo_getNumberOfUniqueProducts( MCGIDI_productsInfo *productsInfo ) { - - return( productsInfo->numberOfProducts ); } -/* -************************************************************ -*/ -int MCGIDI_productsInfo_getPoPsIndexAtIndex( MCGIDI_productsInfo *productsInfo, int index ) { - - if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 ); - return( productsInfo->productInfo[index].globalPoPsIndex ); -} -/* -************************************************************ -*/ -enum MCGIDI_productMultiplicityType MCGIDI_productsInfo_getMultiplicityTypeAtIndex( MCGIDI_productsInfo *productsInfo, int index ) { - - if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( MCGIDI_productMultiplicityType_invalid_e ); - return( productsInfo->productInfo[index].productMultiplicityType ); -} -/* -************************************************************ -*/ -int MCGIDI_productsInfo_getIntegerMultiplicityAtIndex( MCGIDI_productsInfo *productsInfo, int index ) { - - if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 ); - return( productsInfo->productInfo[index].multiplicity ); -} -/* -************************************************************ -*/ -int MCGIDI_productsInfo_getTransportableAtIndex( MCGIDI_productsInfo *productsInfo, int index ) { - - if( ( index < 0 ) || ( index >= productsInfo->numberOfProducts ) ) return( -1 ); - return( productsInfo->productInfo[index].transportable ); -} - -#if defined __cplusplus -} -#endif - diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_sampling.cc b/source/processes/hadronic/models/lend/src/MCGIDI_sampling.cc index 69743885e7..2059107819 100644 --- a/source/processes/hadronic/models/lend/src/MCGIDI_sampling.cc +++ b/source/processes/hadronic/models/lend/src/MCGIDI_sampling.cc @@ -1,229 +1,270 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ -#include -#include -#include "MCGIDI.h" +#include "MCGIDI.hpp" -#if defined __cplusplus -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; +#ifndef MCGIDI_CrossSectionLinearSubSearch + #ifndef MCGIDI_CrossSectionBinarySubSearch + #define MCGIDI_CrossSectionBinarySubSearch + #endif #endif -/* -************************************************************ -*/ -int MCGIDI_sampling_pdfsOfXGivenW_initialize( statusMessageReporting * /*smr*/, MCGIDI_pdfsOfXGivenW *dists ) { +namespace MCGIDI { - memset( dists, 0, sizeof( MCGIDI_pdfsOfXGivenW ) ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampling_pdfsOfXGivenW_release( statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *dists ) { +namespace Sampling { - int i; +/* *********************************************************************************************************//** + * This function returns the index in *a_energies* where *a_energy* lies between the returned index and the next index. + * The returned index must lie between a_hashIndices[a_hashIndex] and a_hashIndices[a_hashIndex+1]. + * If *a_energy* is below the domain of *a_energies*, 0 is returned. If *a_energy* is above the domain of *a_energies*, + * the size of *a_energies* minus 2 is returned. + * The argument *a_energyFraction* the weight for the energy at the returned index with the next index getting weighting 1 minus + * *a_energyFraction*. + * + * @param a_hashIndex [in] The index in *a_hashIndices* where the index in *a_energy* must be bound by it and the next index in *a_hashIndex*. + * @param a_hashIndices [in] The list of hash indices. + * @param a_energies [in] The list of energies. + * @param a_energy [in] The energy whose index is requested. + * @param a_energyFraction [in] This represents the weighting to apply to the two bounding energies. + * + * @return The index bounding *a_energy* in the member *a_energies*. + ***********************************************************************************************************/ - for( i = 0; i < dists->numberOfWs; i++ ) MCGIDI_sampling_pdfsOfX_release( smr, &(dists->dist[i]) ); - smr_freeMemory( (void **) &(dists->Ws) ); - smr_freeMemory( (void **) &(dists->dist) ); - MCGIDI_sampling_pdfsOfXGivenW_initialize( smr, dists ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampling_pdfsOfX_release( statusMessageReporting * /*smr*/, MCGIDI_pdfOfX *dist ) { +LUPI_HOST_DEVICE int evaluationForHashIndex( int a_hashIndex, Vector const &a_hashIndices, double a_energy, + Vector const &a_energies, double *a_energyFraction ) { - smr_freeMemory( (void **) &(dist->Xs) ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( MCGIDI_pdfsOfXGivenW *dists, MCGIDI_pdfsOfXGivenW_sampled *sampled, double rngValue ) { + *a_energyFraction = 1.0; - int iW, iX1; + if( a_energy <= a_energies[0] ) return( 0 ); + if( a_energy >= a_energies.back( ) ) { + *a_energyFraction = 0.0; + return( (int) ( a_energies.size( ) - 2 ) ); + } - sampled->interpolationWY = dists->interpolationWY; - sampled->interpolationXY = dists->interpolationXY; - iW = sampled->iW = MCGIDI_misc_binarySearch( dists->numberOfWs, dists->Ws, sampled->w ); - sampled->frac = 1; + int index1 = a_hashIndices[a_hashIndex]; - if( iW == -2 ) { /* w < first value of Ws. */ - return( MCGIDI_sampling_sampleX_from_pdfOfX( dists->dist, sampled, rngValue ) ); } - else if( iW == -1 ) { /* w > last value of Ws. */ - return( MCGIDI_sampling_sampleX_from_pdfOfX( &(dists->dist[dists->numberOfWs-1]), sampled, rngValue ) ); } - else { - if( MCGIDI_sampling_sampleX_from_pdfOfX( &(dists->dist[iW]), sampled, rngValue ) ) return( 1 ); - if( dists->interpolationWY != ptwXY_interpolationFlat ) { // ptwXY_interpolationOther was not allowed at startup. - double xSampled = sampled->x, frac = 1.; +#ifdef MCGIDI_CrossSectionLinearSubSearch + while( a_energies[index1] > a_energy ) --index1; // Make sure the calls gave the correct *a_hashIndex*. + while( a_energies[index1] < a_energy ) ++index1; + --index1; +#endif - iX1 = sampled->iX1; - if( MCGIDI_sampling_sampleX_from_pdfOfX( &(dists->dist[iW+1]), sampled, rngValue ) ) return( 1 ); +#ifdef MCGIDI_CrossSectionBinarySubSearch + int index2 = a_hashIndices[a_hashIndex]; + int index3 = (int) a_energies.size( ) - 1; + if( ( a_hashIndex + 1 ) < (int) a_hashIndices.size( ) ) index3 = a_hashIndices[a_hashIndex+1] + 1; + if( index3 == (int) a_energies.size( ) ) --index3; + if( index2 != index3 ) index2 = binarySearchVectorBounded( a_energy, a_energies, index2, index3, false ); +#endif - if( dists->interpolationWY == ptwXY_interpolationLinLin ) { - frac = ( dists->Ws[iW+1] - sampled->w ) / ( dists->Ws[iW+1] - dists->Ws[iW] ); - sampled->x = frac * xSampled + ( 1 - frac ) * sampled->x; } - else if( dists->interpolationWY == ptwXY_interpolationLogLin ) { - frac = G4Log( dists->Ws[iW+1] / sampled->w ) / G4Log( dists->Ws[iW+1] / dists->Ws[iW] ); - sampled->x = frac * xSampled + ( 1 - frac ) * sampled->x; } - else if( dists->interpolationWY == ptwXY_interpolationLinLog ) { - frac = ( dists->Ws[iW+1] - sampled->w ) / ( dists->Ws[iW+1] - dists->Ws[iW] ); - sampled->x = xSampled * G4Pow::GetInstance()->powA( sampled->x / xSampled, frac ); } - else if( dists->interpolationWY == ptwXY_interpolationLogLog ) { - frac = G4Log( dists->Ws[iW+1] / sampled->w ) / G4Log( dists->Ws[iW+1] / dists->Ws[iW] ); - sampled->x = xSampled * G4Pow::GetInstance()->powA( sampled->x / xSampled, frac ); } - else { // This should never happen. - smr_setReportError2( sampled->smr, smr_unknownID, 1, "bad interpolation = %d\n", dists->interpolationWY ); - return( 1 ); - } - - sampled->iX2 = sampled->iX1; - sampled->iX1 = iX1; - sampled->frac = frac; +#ifdef MCGIDI_CrossSectionBinarySubSearch + #ifdef MCGIDI_CrossSectionLinearSubSearch + if( index1 != index2 ) { + std::cerr << "Help " << index1 << " " << index2 << std::endl; } - } + #endif + index1 = index2; +#endif - return( 0 ); + *a_energyFraction = ( a_energies[index1+1] - a_energy ) / ( a_energies[index1+1] - a_energies[index1] ); + + return( index1 ); } -/* -************************************************************ -*/ -int MCGIDI_sampling_sampleX_from_pdfOfX( MCGIDI_pdfOfX *dist, MCGIDI_pdfsOfXGivenW_sampled *sampled, double rngValue ) { - int iX; - double d1, d2, frac; +namespace Upscatter { - iX = sampled->iX1 = MCGIDI_misc_binarySearch( dist->numberOfXs, dist->cdf, rngValue ); +/*! \class ModelDBRC_data + * This class is used to store the cross section for the elastic scattering upscatter model B with Doppler Broadening + * Rejection Correction (DBRC) with enum MCGIDI::Sampling::Upscatter::DBRC. + */ - if( iX < 0 ) { /* This should never happen. */ - smr_setReportError2( sampled->smr, smr_unknownID, 1, "bad iX = %d\n", iX ); - sampled->x = dist->Xs[0]; - return( 1 ); +/* *********************************************************************************************************//** + * + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ModelDBRC_data::ModelDBRC_data( ) : + m_neutronMass( 0.0 ), + m_targetMass( ), + m_energies( ), + m_crossSections( ), + m_hashIndices( ) { + +} + +/* *********************************************************************************************************//** + * + ***********************************************************************************************************/ + +LUPI_HOST ModelDBRC_data::ModelDBRC_data( double a_neutronMass, double a_targetMass, Vector const &a_energies, Vector const &a_crossSections, + DomainHash const &a_domainHash ) : + m_neutronMass( a_neutronMass ), + m_targetMass( a_targetMass ), + m_energies( a_energies ), + m_crossSections( a_crossSections ), + m_hashIndices( a_domainHash.map( a_energies ) ), + m_domainHash( 4000, 1e-8, 10 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ModelDBRC_data::~ModelDBRC_data( ) { + +} + +/* *********************************************************************************************************//** + * This method returns the cross section evaluate at the projectile speed *a_speed*. + * + * @param a_temperature [in] The temperature of the target. + * + * @return The thermal speed of the target. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ModelDBRC_data::evaluate( double a_energy ) { + + double energyFraction; + int hashIndex = m_domainHash.index( a_energy ); + int index = evaluationForHashIndex( hashIndex, m_hashIndices, a_energy, m_energies, &energyFraction ); + + return( energyFraction * m_crossSections[index] + ( 1.0 - energyFraction ) * m_crossSections[index+1] ); +} + +/* *********************************************************************************************************//** + * This method returns the thermal speed of the target with temperature *a_temperature*. + * + * @param a_temperature [in] The temperature of the target. + * + * @return The thermal speed of the target. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ModelDBRC_data::targetThermalSpeed( double a_temperature ) { + + return( sqrt( 2.0 * a_temperature / m_targetMass ) ); +} + +/* *********************************************************************************************************//** + * This method sets *a_crossSectionMin* and *a_crossSectionMax* to the minimum and maximum cross section values + * for the cross section in the window (*a_speed* - 4 * *a_targetThermalSpeed*) < speed < (*a_speed* + 4 * *a_targetThermalSpeed*). + * If (a_speed - 4 * a_targetThermalSpeed) is less than the lowest speed in the data, then it is replaced with the + * lowest speed. + * + * @param a_energy [in] The energy of the projectile (i.e., incident neutron). + * @param a_targetThermalSpeed [in] The thermal speed of the target. + * + * @return The maximum cross section in the search window. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE double ModelDBRC_data::crossSectionMax( double a_energy, double a_targetThermalSpeed ) { + + double crossSectionMax2 = 0.0; + double energyFraction; + double a_speed = MCGIDI_particleBeta( m_neutronMass, a_energy ); + + double speedMin = a_speed - 4 * a_targetThermalSpeed; + if( speedMin < 0.0 ) speedMin = 0.0; + double energyMin = 0.5 * m_neutronMass * speedMin * speedMin; + int hashIndex = m_domainHash.index( energyMin ); + int indexMin = evaluationForHashIndex( hashIndex, m_hashIndices, energyMin, m_energies, &energyFraction ); + + double speedMax = a_speed + 4 * a_targetThermalSpeed; + double energyMax = 0.5 * m_neutronMass * speedMax * speedMax; + hashIndex = m_domainHash.index( energyMax ); + int indexMax = evaluationForHashIndex( hashIndex, m_hashIndices, energyMax, m_energies, &energyFraction ); + if( indexMax < static_cast( m_energies.size( ) ) ) ++indexMax; + + for( int index = indexMin; index < indexMax; ++index ) { + if( crossSectionMax2 < m_crossSections[index] ) crossSectionMax2 = m_crossSections[index]; } - if( sampled->interpolationXY == ptwXY_interpolationFlat ) { - frac = ( dist->cdf[iX+1] - rngValue ) / ( dist->cdf[iX+1] - dist->cdf[iX] ); - sampled->x = frac * dist->Xs[iX] + ( 1 - frac ) * dist->Xs[iX+1]; } - else { - double s1 = dist->pdf[iX+1] - dist->pdf[iX]; - if( s1 == 0. ) { - if( dist->pdf[iX] == 0 ) { - sampled->x = dist->Xs[iX]; - if( iX == 0 ) sampled->x = dist->Xs[1]; } + return( crossSectionMax2 ); +} + +/* *********************************************************************************************************//** + * This method serializes *this* for broadcasting as needed for MPI and GPUs. The method can count the number of required + * bytes, pack *this* or unpack *this* depending on *a_mode*. + * + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE void ModelDBRC_data::serialize( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode ) { + + DATA_MEMBER_DOUBLE( m_neutronMass, a_buffer, a_mode ); + DATA_MEMBER_DOUBLE( m_targetMass, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_energies, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_DOUBLE( m_crossSections, a_buffer, a_mode ); + DATA_MEMBER_VECTOR_INT( m_hashIndices, a_buffer, a_mode ); + m_domainHash.serialize( a_buffer, a_mode ); +} + +/* *********************************************************************************************************//** + * This method serializes data for a *ModelDBRC_data* instance. + * + * @param a_modelDBRC_data [in/out] A pointer to the **ModelDBRC_data** instance to serialize. + * @param a_buffer [in] The buffer to read or write data to depending on *a_mode*. + * @param a_mode [in] Specifies the action of this method. + * + * @returns A pointer the serialized **ModelDBRC_data** instance. + ***********************************************************************************************************/ + +LUPI_HOST_DEVICE ModelDBRC_data *serializeModelDBRC_data( LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode, ModelDBRC_data *a_modelDBRC_data ) { + + bool haveDBRC = a_modelDBRC_data != nullptr; + DATA_MEMBER_CAST( haveDBRC, a_buffer, a_mode, bool ); + + if( haveDBRC ) { + if( a_mode == LUPI::DataBuffer::Mode::Unpack ) { + if (a_buffer.m_placement != nullptr) { + a_modelDBRC_data = new(a_buffer.m_placement) ModelDBRC_data; + a_buffer.incrementPlacement( sizeof( ModelDBRC_data ) ); } else { - frac = ( dist->cdf[iX+1] - rngValue ) / ( dist->cdf[iX+1] - dist->cdf[iX] ); - sampled->x = frac * dist->Xs[iX] + ( 1 - frac ) * dist->Xs[iX+1]; - } } - else { - s1 = s1 / ( dist->Xs[iX+1] - dist->Xs[iX] ); - d1 = rngValue - dist->cdf[iX]; - d2 = dist->cdf[iX+1] - rngValue; - if( d2 > d1 ) { /* Closer to iX. */ - sampled->x = dist->Xs[iX] + ( std::sqrt( dist->pdf[iX] * dist->pdf[iX] + 2. * s1 * d1 ) - dist->pdf[iX] ) / s1; } - else { /* Closer to iX + 1. */ - sampled->x = dist->Xs[iX+1] - ( dist->pdf[iX+1] - std::sqrt( dist->pdf[iX+1] * dist->pdf[iX+1] - 2. * s1 * d2 ) ) / s1; + a_modelDBRC_data = new ModelDBRC_data; } } - } - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_sampling_doubleDistribution( statusMessageReporting *smr, MCGIDI_pdfsOfXGivenW *pdfOfWGivenV, MCGIDI_pdfsOfXGivenW *pdfOfXGivenVAndW, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - int iV; - double e_in = modes.getProjectileEnergy( ); - double randomW = decaySamplingInfo->rng( decaySamplingInfo->rngState ), randomX = decaySamplingInfo->rng( decaySamplingInfo->rngState ); - MCGIDI_pdfsOfXGivenW_sampled sampledX, sampledW; - ptwXY_interpolation interpolationWY = pdfOfWGivenV->interpolationWY; - - sampledX.smr = smr; - sampledW.smr = smr; - sampledW.interpolationXY = pdfOfWGivenV->interpolationXY; - iV = MCGIDI_misc_binarySearch( pdfOfWGivenV->numberOfWs, pdfOfWGivenV->Ws, e_in ); - if( iV < 0 ) { - interpolationWY = ptwXY_interpolationFlat; - if( iV == -2 ) { - iV = 0; } - else { - iV = pdfOfWGivenV->numberOfWs - 1; + if( a_mode == LUPI::DataBuffer::Mode::Memory ) { + a_buffer.incrementPlacement( sizeof( ModelDBRC_data ) ); } - e_in = pdfOfWGivenV->Ws[iV]; + + a_modelDBRC_data->serialize( a_buffer, a_mode ); } - - MCGIDI_sampling_sampleX_from_pdfOfX( &(pdfOfWGivenV->dist[iV]), &sampledW, randomW ); - sampledX.w = sampledW.x; - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( &(pdfOfXGivenVAndW[iV]), &sampledX, randomX ); - if( interpolationWY != ptwXY_interpolationFlat ) { - double x = sampledX.x, w = sampledW.x, Vs[3] = { e_in, pdfOfWGivenV->Ws[iV], pdfOfWGivenV->Ws[iV+1] }; - - MCGIDI_sampling_sampleX_from_pdfOfX( &(pdfOfWGivenV->dist[iV+1]), &sampledW, randomW ); - sampledX.w = sampledW.x; - MCGIDI_sampling_sampleX_from_pdfsOfXGivenW( &(pdfOfXGivenVAndW[iV+1]), &sampledX, randomX ); - - MCGIDI_sampling_interpolationValues( smr, interpolationWY, Vs, w, sampledW.x, &sampledW.x ); - MCGIDI_sampling_interpolationValues( smr, interpolationWY, Vs, x, sampledX.x, &sampledX.x ); - } - - decaySamplingInfo->mu = sampledW.x; - decaySamplingInfo->Ep = sampledX.x; - - return( 0 ); + return( a_modelDBRC_data ); } + +} + /* -************************************************************ +========================================================= */ -int MCGIDI_sampling_interpolationValues( statusMessageReporting *smr, ptwXY_interpolation interpolation, double *ws, double y1, double y2, double *y ) { - - double frac; - - if( interpolation == ptwXY_interpolationLinLin ) { - frac = ( ws[2] - ws[0] ) / ( ws[2] - ws[1] ); - *y = frac * y1 + ( 1 - frac ) * y2; } - else if( interpolation == ptwXY_interpolationLogLin ) { - frac = G4Log( ws[2] / ws[0] ) / G4Log( ws[2] / ws[1] ); - *y = frac * y1 + ( 1 - frac ) * y2; } - else if( interpolation == ptwXY_interpolationLinLog ) { - frac = ( ws[2] - ws[0] ) / ( ws[2] - ws[1] ); - *y = y1 * G4Pow::GetInstance()->powA( y2 / y1, frac ); } - else if( interpolation == ptwXY_interpolationLogLog ) { - frac = G4Log( ws[2] / ws[0] ) / G4Log( ws[2] / ws[1] ); - *y = y2 * G4Pow::GetInstance()->powA( y2 / y1, frac ); } - else { // This should never happen. - smr_setReportError2( smr, smr_unknownID, 1, "bad interpolation = %d\n", interpolation ); - return( 1 ); - } - return( 0 ); +LUPI_HOST_DEVICE ClientRandomNumberGenerator::ClientRandomNumberGenerator( double (*a_generator)( void * ), void *a_state ) : + m_generator( a_generator ), + m_state( a_state ) { } + /* -************************************************************ +========================================================= */ -double MCGIDI_sampling_ptwXY_getValueAtX( ptwXYPoints *ptwXY, double x1 ) { - - double y1; - - if( ptwXY_getValueAtX( ptwXY, x1, &y1 ) == nfu_XOutsideDomain ) { - if( x1 < ptwXY_getXMin( ptwXY ) ) { - ptwXY_getValueAtX( ptwXY, ptwXY_getXMin( ptwXY ), &y1 ); } - else { - ptwXY_getValueAtX( ptwXY, ptwXY_getXMax( ptwXY ), &y1 ); - } - } - return( y1 ); +LUPI_HOST_DEVICE ClientCodeRNGData::ClientCodeRNGData( double (*a_generator)( void * ), void *a_state ) : + ClientRandomNumberGenerator( a_generator, a_state ) { } -#if defined __cplusplus -} -#endif +/* +========================================================= +*/ +LUPI_HOST_DEVICE Input::Input( bool a_wantVelocity, Upscatter::Model a_upscatterModel ) : + m_wantVelocity( a_wantVelocity ), + m_upscatterModel( a_upscatterModel ) { +} + +} // End of namespace Sampling. + +} // End of namespace MCGIDI. diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_samplingSettings.cc b/source/processes/hadronic/models/lend/src/MCGIDI_samplingSettings.cc deleted file mode 100644 index 42ac3a805c..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_samplingSettings.cc +++ /dev/null @@ -1,64 +0,0 @@ -/* -# <> -# <> -*/ - -#include "MCGIDI.h" - -using namespace GIDI; -/* ---- MCGIDI_samplingMethods ---- */ -/* -========================================================= -*/ -MCGIDI_samplingMethods::MCGIDI_samplingMethods( ) { - -} -/* -========================================================= -*/ -MCGIDI_samplingMethods::~MCGIDI_samplingMethods( ) { - -} - -/* ---- MCGIDI_samplingSettings ---- */ -/* -========================================================= -*/ -MCGIDI_samplingSettings::MCGIDI_samplingSettings( enum xDataTOM_frame frame, bool wantVelocities, double (*rng)( void * ), void *rngState ) { - - mWantFrame = frame; - mWantVelocities = wantVelocities; - mRng = rng; - mRngState = rngState; - - mGotFrame = xDataTOM_frame_invalid; - mPoP = NULL; - mMu = 0.; - mEp = 0.; -} -/* -========================================================= -*/ -MCGIDI_samplingSettings::~MCGIDI_samplingSettings( void ) { - -} -/* -========================================================= -*/ -int MCGIDI_samplingSettings::setProductMultiplicityBias( statusMessageReporting *smr, int PoPID, double factor ) { - - if( factor < 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "factor = %e cannot be negative", factor ); - return( 1 ); - } - - for( int i1 = 0; i1 < (int) mSamplingMultiplicityBiases.size( ); ++i1 ) { - if( PoPID == mSamplingMultiplicityBiases[i1].PoPID ) { - mSamplingMultiplicityBiases[i1].multiplicityFactor = factor; - return( 0 ); - } - } - MCGIDI_samplingMultiplicityBias samplingMultiplicityBias = { PoPID, factor }; - mSamplingMultiplicityBiases.push_back( samplingMultiplicityBias ); - return( 0 ); -} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_settings.cc b/source/processes/hadronic/models/lend/src/MCGIDI_settings.cc new file mode 100644 index 0000000000..915a1e478b --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_settings.cc @@ -0,0 +1,141 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "MCGIDI.hpp" + +namespace MCGIDI { + +namespace Transporting { + +/*! \class MC + * Class to store user defined preferences for creating an MCGIDI::Protare instance. + */ + +/* *********************************************************************************************************//** + * Class to store user defined preferences for creating an MCGIDI::Protare instance. + * + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_projectileID [in] The PoPs id for the projectile. + * @param a_styles [in] The styles child node of the GIDI::Protare. + * @param a_label [in] + * @param a_delayedNeutrons [in] Sets whether delayed neutron data will be load or not if available. + * @param a_energyDomainMax [in] The maximum projectile energy for which data should be loaded. + ***********************************************************************************************************/ + +LUPI_HOST MC::MC( LUPI_maybeUnused PoPI::Database const &a_pops, std::string const &a_projectileID, GIDI::Styles::Suite const *a_styles, std::string const &a_label, + GIDI::Transporting::DelayedNeutrons a_delayedNeutrons, double a_energyDomainMax ) : + GIDI::Transporting::Settings( a_projectileID, a_delayedNeutrons ), + m_styles( a_styles ), + m_label( a_label ), + m_energyDomainMax( a_energyDomainMax ), + m_ignoreENDF_MT5( false ), + m_sampleNonTransportingParticles( false ), + m_useSlowerContinuousEnergyConversion( false ), + m_addExpectedValueData( true ), + m_crossSectionLookupMode( LookupMode::Data1d::continuousEnergy ), + m_other1dDataLookupMode( LookupMode::Data1d::continuousEnergy ), + m_distributionLookupMode( LookupMode::Distribution::pdf_cdf ), + m_upscatterModel( Sampling::Upscatter::Model::none ), + m_upscatterModelALabel( "" ), + m_URR_mode( URR_mode::none ), + m_wantTerrellPromptNeutronDistribution( false ), + m_wantRawTNSL_distributionSampling( true ), + m_makePhotonEmissionProbabilitiesOne( false ), + m_zeroNuclearLevelEnergyWidth( false ) { + +} + +/* *********************************************************************************************************//** + * Class to store user defined preferences for creating an MCGIDI::Protare instance. + * + * @param a_pops [in] A PoPs Database instance used to get particle intids and possibly other particle information. + * @param a_protare [in] GIDI::Protare whose information is used to fill *this*. + * @param a_label [in] + * @param a_delayedNeutrons [in] Sets whether delayed neutron data will be load or not if available. + * @param a_energyDomainMax [in] The maximum projectile energy for which data should be loaded. + ***********************************************************************************************************/ + +LUPI_HOST MC::MC( LUPI_maybeUnused PoPI::Database const &a_pops, GIDI::Protare const &a_protare, std::string const &a_label, + GIDI::Transporting::DelayedNeutrons a_delayedNeutrons, double a_energyDomainMax ) : + GIDI::Transporting::Settings( a_protare.projectile( ).ID( ), a_delayedNeutrons ), + m_styles( &a_protare.styles( ) ), + m_label( a_label ), + m_energyDomainMax( a_energyDomainMax ), + m_ignoreENDF_MT5( false ), + m_sampleNonTransportingParticles( false ), + m_useSlowerContinuousEnergyConversion( false ), + m_addExpectedValueData( true ), + m_crossSectionLookupMode( LookupMode::Data1d::continuousEnergy ), + m_other1dDataLookupMode( LookupMode::Data1d::continuousEnergy ), + m_distributionLookupMode( LookupMode::Distribution::pdf_cdf ), + m_upscatterModel( Sampling::Upscatter::Model::none ), + m_upscatterModelALabel( "" ), + m_URR_mode( URR_mode::none ), + m_wantTerrellPromptNeutronDistribution( false ), + m_wantRawTNSL_distributionSampling( true ), + m_makePhotonEmissionProbabilitiesOne( false ), + m_zeroNuclearLevelEnergyWidth( false ) { + +} + +/* *********************************************************************************************************//** + * Sets the *m_crossSectionLookupMode* member of *this* to *a_crossSectionLookupMode*. + * + * @param a_crossSectionLookupMode [in] The *LookupMode::Data1d* data mode. + ***********************************************************************************************************/ + +LUPI_HOST void MC::setCrossSectionLookupMode( LookupMode::Data1d a_crossSectionLookupMode ) { + + if( ( a_crossSectionLookupMode != LookupMode::Data1d::continuousEnergy ) && + ( a_crossSectionLookupMode != LookupMode::Data1d::multiGroup ) ) { + throw( "Invalided cross section mode request." ); + } + m_crossSectionLookupMode = a_crossSectionLookupMode; +} + +/* *********************************************************************************************************//** + * Sets the *m_other1dDataLookupMode* member of *this* to *a_other1dDataLookupMode*. + * + * @param a_other1dDataLookupMode [in] The *LookupMode::Data1d* data mode. + ***********************************************************************************************************/ + +LUPI_HOST void MC::setOther1dDataLookupMode( LookupMode::Data1d a_other1dDataLookupMode ) { + + if( a_other1dDataLookupMode != LookupMode::Data1d::continuousEnergy ) throw( "Invalided other mode request." ); + m_other1dDataLookupMode = a_other1dDataLookupMode; +} + +/* *********************************************************************************************************//** + * Sets the *m_distributionLookupMode* member of *this* to *a_distributionLookupMode*. + * + * @param a_distributionLookupMode [in] The *LookupMode::Data1d* data mode. + ***********************************************************************************************************/ + +LUPI_HOST void MC::setDistributionLookupMode( LookupMode::Distribution a_distributionLookupMode ) { + + if( a_distributionLookupMode != LookupMode::Distribution::pdf_cdf ) throw( "Invalided distribution mode request." ); + m_distributionLookupMode = a_distributionLookupMode; +} + +/* *********************************************************************************************************//** + * Sets the *m_upscatterModel* member of *this* to **Sampling::Upscatter::Model::A** and the *m_upscatterModelALabel* member + * to *a_upscatterModelALabel*. + * + * @param a_upscatterModelALabel [in] The *LookupMode::Data1d* data mode. + ***********************************************************************************************************/ + +LUPI_HOST void MC::set_upscatterModelA( std::string const &a_upscatterModelALabel ) { + + m_upscatterModel = Sampling::Upscatter::Model::A; + m_upscatterModelALabel = a_upscatterModelALabel; +} + +} + +} diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_string.cc b/source/processes/hadronic/models/lend/src/MCGIDI_string.cc new file mode 100644 index 0000000000..321e106bd1 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/MCGIDI_string.cc @@ -0,0 +1,424 @@ +/* + # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT + # <> + * + * IMPLEMENTATION NOTES + * + * My goal was to create a small, and conceptually simple + * string class. I allocate unique memory for every object + * created, instead of doing anything fancy. + * + * I've taken care about the order in which I free memory, + * in case we are copying overlapping regions. + * + */ + +#include +#include // malloc, realloc +#include +#include + +#include "MCGIDI_string.hpp" + +namespace MCGIDI { + +#define MCGIDI_MIN(x,y) ( ( (x) < (y) ) ? (x) : (y) ) +#define MCGIDI_SWAP(a,b,type) {type ttttttttt=a;a=b;b=ttttttttt;} +LUPI_HOST_DEVICE int MCGIDI_strcmp (const char *p1, const char *p2); +LUPI_HOST_DEVICE size_t MCGIDI_strlen (const char *str); +LUPI_HOST_DEVICE void MCGIDI_memmove(char *dest, const char *src, size_t n); +LUPI_HOST_DEVICE int MCGIDI_strncmp( const char * s1, const char * s2, size_t n ); + + const String::size_type String::npos = static_cast(-1); + + /* + * Like the 'new' operator, we want to guarantee that we NEVER + * return nullptr. Loop until there is free memory. + * + */ + LUPI_HOST_DEVICE static char* malloc_never_null(const size_t b) + { + char *p; + + do { + p = static_cast(malloc(b)); + } while ( p == nullptr ); + + return p; + } + + /** + * Allocates memory for the copy the string at the same time sets "this->allocated". + * @param s + * @return + */ + LUPI_HOST_DEVICE char* String::strdup_never_null(const char* s) + { + const size_t len = MCGIDI_strlen(s)+1; + char *p2 = malloc_never_null(len); + memcpy(p2, s, len); + allocated_=len; + size_=len-1; + return p2; + } + + LUPI_HOST_DEVICE String::String() : p( nullptr ), allocated_(0), size_(0) { } + + LUPI_HOST_DEVICE String::~String() + { + free(p); + } + + LUPI_HOST_DEVICE String::String(const String& s) + : p(nullptr) + { + p = malloc_never_null( s.size_ + 1 ); // copy only used part + allocated_ = s.size_ + 1; + size_ = s.size_; + memcpy(p, s.p, size_ + 1); + } + + LUPI_HOST_DEVICE String::String(const char* s) + : p(strdup_never_null(s)) + { + } + + LUPI_HOST_DEVICE String& String::operator=(const char* s) + { + if ( p != s ) { + // s could point into our own string, so we have to allocate a new string + const size_t len = MCGIDI_strlen(s); + char* copy = (char*) malloc( len + 1); + MCGIDI_memmove(copy, s, len+1); // trailing 0 + free( p ); + p = copy; + size_ = len; + allocated_ = len+1; + } + + return *this; + } + + LUPI_HOST_DEVICE String& String::operator=(const String& s) + { + return operator=(s.p); + } + + LUPI_HOST_DEVICE String& String::operator+=(const String& s) + { + if (s.size_ > 0){ + this->reserve(size_ + s.size_); + MCGIDI_memmove(p+size_, s.p, s.size_+1); // trailing 0 + size_ += s.size_; + } + return *this; + } + + // since p and s may overlap, we have to copy our own string first + LUPI_HOST_DEVICE String& String::operator+=(const char* s) + { + const size_type lens = MCGIDI_strlen(s); + if (lens > 0){ + if (size_ + lens + 1 <= allocated_) { + MCGIDI_memmove(p+size_, s, lens+1); // trailing 0 + size_ += lens; + } + else { + String s2( *this ); // copy own data + s2.reserve(size_ + lens); + MCGIDI_memmove(s2.p+size_, s, lens+1); // trailing 0 + s2.size_ = size_ + lens; + this->swap( s2 ); + } + } + return *this; + } + + LUPI_HOST_DEVICE String& String::operator+=(const char c) + { + push_back(c); + return *this; + } + + + LUPI_HOST_DEVICE void String::push_back(const char c) { + + if (size_ == allocated_ - 1) { + size_t more = (allocated_* 3) / 2; // factor 1.5 + if ( more < 4 ) more = 4; + reserve( size_ + more ); + } + + p[size_] = c; + size_++; + p[size_] = 0; + } + + LUPI_HOST_DEVICE bool String::operator==(const char* s) const + { + return !MCGIDI_strcmp(p, s); + } + + LUPI_HOST_DEVICE bool String::operator==(const String& s) const + { + return !MCGIDI_strcmp(p, s.p); + } + + LUPI_HOST_DEVICE void String::clearMemory() + { + String s; + this->swap( s ); + } + + LUPI_HOST_DEVICE void String::clear() + { + size_ = 0; + p[0] = 0; + } + + LUPI_HOST_DEVICE String operator+(const String& lhs, const String& rhs) + { + return String(lhs) += rhs; + } + + LUPI_HOST_DEVICE String String::substr(const size_type pos, size_type in_length) const + { + String s; + const size_type len = size_; + + if ( pos > len ) + LUPI_THROW("MCGIDI::String::substr: pos index out of range"); + + size_type remain = len - pos; + + if ( in_length > remain ) + in_length = remain; + + s.reserve( in_length ); + + memcpy(s.p, p + pos, in_length); + s.p[in_length] = '\0'; + s.size_ = in_length; + + return s; + } + + + // checked access, accessing the NUL at end is allowed + LUPI_HOST_DEVICE char& String::at(const size_type i) + { + if ( i > MCGIDI_strlen(p) ) + LUPI_THROW( "MCGIDI::String::at(): index out_of_range"); + + return p[i]; + } + LUPI_HOST_DEVICE char String::at(const size_type i) const + { + if ( i > MCGIDI_strlen(p) ) + LUPI_THROW("MCGIDI::String::at(): index out_of_range"); + + return p[i]; + } + + LUPI_HOST_DEVICE String& String::erase(size_type pos, size_type len) + { + if (len > 0) { + + if ( pos >= size_ ) // user must not remove trailing 0 + LUPI_THROW("MCGIDI::String::erase: pos index out_of_range"); + + long s2 = size_; + long remain = s2 - (long) pos - len; + + if (remain > 0) { + // erase by overwriting + MCGIDI_memmove(p + pos, p + pos + len, remain); + } + + if ( remain < 0 ) remain = 0; + + // remove unused space + this->resize( pos+remain ); + + } + return *this; + } + + LUPI_HOST_DEVICE String& String::append( const char* str, size_type n) { + if (str && n > 0) { + size_t lens = MCGIDI_strlen(str); + if (n > lens) + n = lens; + size_t newlen = size_ + n; + this->reserve( newlen ); + MCGIDI_memmove(p+size_, str, n); // p and s.p MAY overlap + p[newlen] = 0; // add NUL termination + size_ = newlen; + } + return *this; + } + + LUPI_HOST_DEVICE int String::compare( size_type pos, size_type len, const String& str ) const { + if (pos > size_) + LUPI_THROW("MCGIDI::String::compare: pos index out of range"); + + if ( len > size_ - pos) + len = size_ - pos; // limit len to available length + + const size_type osize = str.size(); + const size_type len2 = MCGIDI_MIN(len, osize); + int r = MCGIDI_strncmp( p + pos, str.p, len2); + if (r==0) // equal so far, now compare sizes + r = len < osize ? -1 : ( len == osize ? 0 : +1 ); + return r; + } + + LUPI_HOST_DEVICE int String::compare( size_type pos, size_type len, const char* str ) const { + if (pos > size_) + LUPI_THROW("MCGIDI::String::compare: pos index out of range"); + + if ( len > size_ - pos) + len = size_ - pos; // limit len to available length + + const size_type osize = MCGIDI_strlen(str); + const size_type len2 = MCGIDI_MIN(len, osize); + int r = MCGIDI_strncmp( p + pos, str, len2); + if (r==0) // equal so far, now compare sizes + r = len < osize ? -1 : ( len == osize ? 0 : +1 ); + return r; + } + + + LUPI_HOST_DEVICE void String::my_realloc( size_type n, char ** address) { + if (address != nullptr && *address != nullptr) { + p = *address; + long delta = sizeof(char) * n; + long sub = delta % 8; + if (sub != 0) delta += (8-sub); + *address += delta; + return; + } + if (n > 0 ) { + char* pnew = static_cast(malloc(n)); // could return nullptr + if (pnew) { + free(p); + p = pnew; + } + else + LUPI_THROW("MCGIDI::String::my_realloc out of memory"); + } + } + + + LUPI_HOST_DEVICE void String::reserve( const size_type n, char ** address) { + if (n >= allocated_ ) { + this->my_realloc(n + 1, address); + allocated_ = n + 1; + } + } + + LUPI_HOST_DEVICE void String::resize( const size_type n, char ** address) { + this->resize( n, 0, address ); + } + + LUPI_HOST_DEVICE void String::resize( const size_type n, const char c, char ** address) { + if (n < allocated_ ) { + p[n] = 0; + size_ = n; + } + else if (n >= allocated_ ) { + this->reserve( n, address ); + for (size_type i=size_; i < n; ++i ) + p[i] = c; + p[n] = 0; + size_ = n; + } + } + + LUPI_HOST_DEVICE void String::swap( String& s ) { + MCGIDI_SWAP( allocated_, s.allocated_, size_t ); + MCGIDI_SWAP( size_, s.size_, size_t ); + MCGIDI_SWAP( p, s.p, char * ); + } + + + // Comparison + LUPI_HOST_DEVICE bool operator<( const String& s1, const String& s2 ) { + return MCGIDI_strcmp( s1.c_str(), s2.c_str() ) < 0; + } + + /* Compare S1 and S2, returning less than, equal to or + greater than zero if S1 is lexicographically less than, + equal to or greater than S2. */ + LUPI_HOST_DEVICE int MCGIDI_strcmp (const char *p1, const char *p2) + { + const unsigned char *s1 = (const unsigned char *) p1; + const unsigned char *s2 = (const unsigned char *) p2; + unsigned char c1, c2; + + do + { + c1 = (unsigned char) *s1++; + c2 = (unsigned char) *s2++; + if (c1 == '\0') + return c1 - c2; + } + while (c1 == c2); + + return c1 - c2; + } + + LUPI_HOST_DEVICE size_t MCGIDI_strlen (const char *str) { + size_t len = 0; + while (*str != '\0') { + str++; + len++; + } + return len; + } + + // A function to copy block of 'n' bytes from source + // address 'src' to destination address 'dest'. + LUPI_HOST_DEVICE void MCGIDI_memmove(char *dest, const char *src, size_t n) + { + // Typecast src and dest addresses to (char *) + char *csrc = (char *)src; + char *cdest = (char *)dest; + + // Create a temporary array to hold data of src + char* temp = (char*) malloc( n); + + // Copy data from csrc[] to temp[] + for (size_t i=0; i> -# <> -*/ - -#include -#include -#include - -#include "MCGIDI.h" -#include "MCGIDI_misc.h" -#include - -#if defined __cplusplus - extern "C" { -namespace GIDI { -using namespace GIDI; -#endif -static int _MCGIDI_target_releaseAndReturnOne( statusMessageReporting *smr, MCGIDI_target *target ); -#if defined __cplusplus - } - } -#endif -/* -************************************************************ -*/ - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -MCGIDI_target *MCGIDI_target_new( statusMessageReporting *smr ) { - - MCGIDI_target *target; - - if( ( target = (MCGIDI_target *) smr_malloc2( smr, sizeof( MCGIDI_target ), 0, "target" ) ) == NULL ) return( NULL ); - if( MCGIDI_target_initialize( smr, target ) ) target = MCGIDI_target_free( smr, target ); - return( target ); -} -/* -************************************************************ -*/ -int MCGIDI_target_initialize( statusMessageReporting * /*smr*/, MCGIDI_target *target ) { - - memset( target, 0, sizeof( MCGIDI_target ) ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_target *MCGIDI_target_newRead( statusMessageReporting *smr, const char *fileName ) { - - MCGIDI_target *target; - - if( ( target = MCGIDI_target_new( smr ) ) == NULL ) return( NULL ); - if( MCGIDI_target_read( smr, target, fileName ) != 0 ) smr_freeMemory( (void **) &target ); - return( target ); -} -/* -************************************************************ -*/ -int MCGIDI_target_readFromMapViaPoPIDs( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ) { - - char *targetPath; - - if( ( targetPath = MCGIDI_map_findTargetViaPoPIDs( smr, map, evaluation, projectile_PoPID, target_PoPID ) ) == NULL ) return( 1 ); - return( MCGIDI_target_read( smr, target, targetPath ) ); -} -/* -************************************************************ -*/ -int MCGIDI_target_readFromMap( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_map *map, const char *evaluation, const char *projectileName, - const char *targetName ) { - - char *targetPath; - - if( ( targetPath = MCGIDI_map_findTarget( smr, map, evaluation, projectileName, targetName ) ) == NULL ) return( 1 ); - return( MCGIDI_target_read( smr, target, targetPath ) ); -} -/* -************************************************************ -*/ -MCGIDI_target *MCGIDI_target_newReadFromMapViaPoPIDs( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, - int projectile_PoPID, int target_PoPID ) { - - char *targetPath; - MCGIDI_target *target; - - if( ( targetPath = MCGIDI_map_findTargetViaPoPIDs( smr, map, evaluation, projectile_PoPID, target_PoPID ) ) == NULL ) return( NULL ); - target = MCGIDI_target_newRead( smr, targetPath ); - smr_freeMemory( (void **) &targetPath ); - return( target ); -} -/* -************************************************************ -*/ -MCGIDI_target *MCGIDI_target_newReadFromMap( statusMessageReporting *smr, MCGIDI_map *map, const char *evaluation, const char *projectileName, - const char *targetName ) { - - char *targetPath; - MCGIDI_target *target; - - targetPath = MCGIDI_map_findTarget( smr, map, evaluation, projectileName, targetName ); - if( targetPath == NULL ) return( NULL ); - target = MCGIDI_target_newRead( smr, targetPath ); - smr_freeMemory( (void **) &targetPath ); - return( target ); -} -/* -************************************************************ -*/ -MCGIDI_target *MCGIDI_target_free( statusMessageReporting *smr, MCGIDI_target *target ) { - - MCGIDI_target_release( smr, target ); - smr_freeMemory( (void **) &target ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_target_release( statusMessageReporting *smr, MCGIDI_target *target ) { - - int i; - - smr_freeMemory( (void **) &(target->path) ); - smr_freeMemory( (void **) &(target->absPath) ); - xDataTOMAL_release( &(target->attributes) ); - for( i = 0; i < target->nHeatedTargets; i++ ) { - smr_freeMemory( (void **) &(target->heatedTargets[i].path) ); - smr_freeMemory( (void **) &(target->heatedTargets[i].contents) ); - if( target->heatedTargets[i].heatedTarget != NULL ) MCGIDI_target_heated_free( smr, target->heatedTargets[i].heatedTarget ); - } - smr_freeMemory( (void **) &(target->heatedTargets) ); - smr_freeMemory( (void **) &(target->readHeatedTargets) ); - MCGIDI_target_initialize( smr, target ); - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_target_read( statusMessageReporting *smr, MCGIDI_target *target, const char *fileName ) { -/* -* If a target has already been read into this target, user must have called MCGIDI_target_release before calling this routine. -* Otherwise, there will be memory leaks. -*/ - xDataXML_document *doc; - xDataXML_element *element, *child; - int i, iHeated, nHeated = 0, status = 1; - double temperature; - /* char *pReturnValue; */ - char const *version, *contents; - - MCGIDI_target_initialize( smr, target ); - if( ( target->path = smr_allocateCopyString2( smr, fileName, "path" ) ) == NULL ) return( status ); - if( ( target->absPath = MCGIDI_misc_getAbsPath( smr, fileName ) ) == NULL ) return( _MCGIDI_target_releaseAndReturnOne( smr, target ) ); - if( ( doc = xDataXML_importFile2( smr, fileName ) ) == NULL ) return( _MCGIDI_target_releaseAndReturnOne( smr, target ) ); - element = xDataXML_getDocumentsElement( doc ); - if( strcmp( element->name, "xTarget" ) != 0 ) { - MCGIDI_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "input file's top element must be xTarget and not %s", element->name ); } - else { - status = 0; - if( ( version = xDataXML_getAttributesValueInElement( element, "version" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "version attribute missing from element '%s'", element->name ); - status = 1; } - else { - if( strcmp( version, "xMCProcess 0.1" ) != 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "Unsupported version '%s' for element %s", version, element->name ); - status = 1; - } - } - if( status == 0 ) { - /* pReturnValue = ( MCGIDI_misc_copyXMLAttributesToTOM( smr, &(target->attributes), &(element->attributes) ) ) ? NULL : target->path; */ - for( nHeated = 0, child = xDataXML_getFirstElement( element ); child != NULL; nHeated++, child = xDataXML_getNextElement( child ) ) { - if( strcmp( child->name, "target" ) != 0 ) { - MCGIDI_misc_setMessageError_Element( smr, NULL, element, __FILE__, __LINE__, 1, "element can only have target sub-elements%s", - element->name ); - status = 1; - break; - } - } - } - if( status == 0 ) { - if( ( target->heatedTargets = (MCGIDI_target_heated_info *) smr_malloc2( smr, nHeated * sizeof( MCGIDI_target_heated_info ), 1, "heatedTargets" ) ) == NULL ) { - status = 1; } - else { - if( ( target->readHeatedTargets = (MCGIDI_target_heated_info **) smr_malloc2( smr, nHeated * sizeof( MCGIDI_target_heated_info * ), 1, "heatedTargets" ) ) == NULL ) - status = 1; - } - for( nHeated = 0, child = xDataXML_getFirstElement( element ); ( status == 0 ) && ( child != NULL ); - nHeated++, child = xDataXML_getNextElement( child ) ) { - if( ( i = xDataXML_convertAttributeToDouble( smr, child, "temperature", &temperature, 1 ) ) != 0 ) { - if( i > 0 ) smr_setReportError2p( smr, smr_unknownID, 1, "target does not have a temperature attribute" ); - status = 1; - break; - } - for( iHeated = 0; iHeated < nHeated; iHeated++ ) if( target->heatedTargets[iHeated].temperature > temperature ) break; - if( iHeated < nHeated ) for( i = nHeated; i >= iHeated; i-- ) target->heatedTargets[i+1] = target->heatedTargets[i]; - target->heatedTargets[iHeated].temperature = temperature; - target->heatedTargets[iHeated].path = NULL; - target->heatedTargets[iHeated].contents = NULL; - target->heatedTargets[iHeated].heatedTarget = NULL; - if( ( contents = xDataXML_getAttributesValueInElement( child, "contents" ) ) != NULL ) { - if( ( target->heatedTargets[iHeated].contents = smr_allocateCopyString2( smr, contents, "contents" ) ) == NULL ) { - status = 1; - break; - } - } - if( ( contents = xDataXML_getAttributesValueInElement( child, "file" ) ) == NULL ) { - status = 1; - break; - } - if( ( target->heatedTargets[iHeated].path = (char *) smr_malloc2(smr, strlen( target->absPath ) + strlen( contents ) + 2, 0, "path") ) == NULL) { - status = 1; - break; - } - strcpy( target->heatedTargets[iHeated].path, target->absPath ); - *strrchr( target->heatedTargets[iHeated].path, '/' ) = 0; - strcat( target->heatedTargets[iHeated].path, "/" ); - strcat( target->heatedTargets[iHeated].path, contents ); - target->nHeatedTargets++; - } - } - } - xDataXML_freeDoc( smr, doc ); - if( status == 0 ) { - for( i = 0; i < nHeated; i++ ) target->heatedTargets[i].ordinal = i; - for( i = 0; i < nHeated; i++ ) if( target->heatedTargets[i].contents == NULL ) break; - if( i == nHeated ) i = 0; /* All heated targets are crossSection only. */ - if( MCGIDI_target_readHeatedTarget( smr, target, i ) == 0 ) { - target->baseHeatedTarget = target->heatedTargets[i].heatedTarget; } - else { - MCGIDI_target_release( NULL, target ); - status = 1; - } } - else { - MCGIDI_target_release( smr, target ); - } - return( status ); -} -/* -************************************************************ -*/ -char const *MCGIDI_target_getAttributesValue( statusMessageReporting * /*smr*/, MCGIDI_target *target, char const *name ) { - - return( xDataTOMAL_getAttributesValue( &(target->attributes), name ) ); -} -/* -************************************************************ -*/ -int MCGIDI_target_getTemperatures( statusMessageReporting * /*smr*/, MCGIDI_target *target, double *temperatures ) { - - int i; - - if( temperatures != NULL ) for( i = 0; i < target->nHeatedTargets; i++ ) temperatures[i] = target->heatedTargets[i].temperature; - return( target->nHeatedTargets ); -} -/* -************************************************************ -*/ -int MCGIDI_target_readHeatedTarget( statusMessageReporting *smr, MCGIDI_target *target, int index ) { - - int i; - - if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets ); - return( -1 ); - } - if( target->heatedTargets[index].heatedTarget != NULL ) return( 1 ); - if( ( target->heatedTargets[index].heatedTarget = MCGIDI_target_heated_newRead( smr, target->heatedTargets[index].path ) ) != NULL ) { - target->projectilePOP = target->heatedTargets[index].heatedTarget->projectilePOP; - target->targetPOP = target->heatedTargets[index].heatedTarget->targetPOP; - if( target->heatedTargets[index].heatedTarget != NULL ) { - target->heatedTargets[index].heatedTarget->ordinal = target->heatedTargets[index].ordinal; - for( i = target->nReadHeatedTargets; i > 0; i-- ) { - if( target->readHeatedTargets[i-1]->temperature < target->heatedTargets[index].temperature ) break; - target->readHeatedTargets[i] = target->readHeatedTargets[i-1]; - } - target->readHeatedTargets[i] = &(target->heatedTargets[i]); - target->nReadHeatedTargets++; - } - } - return( ( target->heatedTargets[index].heatedTarget == NULL ? -1 : 0 ) ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_target_getHeatedTargetAtIndex_ReadIfNeeded( statusMessageReporting *smr, MCGIDI_target *target, int index ) { - - if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets ); - return( NULL ); - } - if( target->heatedTargets[index].heatedTarget == NULL ) MCGIDI_target_readHeatedTarget( smr, target, index ); - return( target->heatedTargets[index].heatedTarget ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_target_getHeatedTargetAtTIndex( statusMessageReporting *smr, MCGIDI_target *target, int index ) { - - if( ( index < 0 ) || ( index >= target->nHeatedTargets ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "temperature index = %d out of range (0 <= index < %d", index, target->nHeatedTargets ); - return( NULL ); - } - if( target->heatedTargets[index].heatedTarget == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "temperature index = %d not read in", index ); - return( NULL ); - } - return( target->heatedTargets[index].heatedTarget ); -} -/* -************************************************************ -*/ -int MCGIDI_target_numberOfReactions( statusMessageReporting *smr, MCGIDI_target *target ) { - - return( MCGIDI_target_heated_numberOfReactions( smr, target->baseHeatedTarget ) ); -} -/* -************************************************************ -*/ -enum MCGIDI_reactionType MCGIDI_target_getReactionTypeAtIndex( statusMessageReporting *smr, MCGIDI_target *target, int index ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex_smr( smr, target->baseHeatedTarget, index ); - - if( reaction == NULL ) return( MCGIDI_reactionType_unknown_e ); - return( MCGIDI_reaction_getReactionType( smr, reaction ) ); -} -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_target_getReactionAtIndex( MCGIDI_target *target, int index ) { - - return( MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, index ) ); -} -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_target_getReactionAtIndex_smr( statusMessageReporting *smr, MCGIDI_target *target, int index ) { - - return( MCGIDI_target_heated_getReactionAtIndex_smr( smr, target->baseHeatedTarget, index ) ); -} -/* -************************************************************ -*/ -int MCGIDI_target_numberOfProductionReactions( statusMessageReporting * /*smr*/, MCGIDI_target * /*target*/ ) { - -#if 0 - return( MCGIDI_target_heated_numberOfProductionReactions( smr, target->baseHeatedTarget ) ); -#endif -return( 0 ); -} - -/* -************************************************************ -*/ -double MCGIDI_target_getTotalCrossSectionAtTAndE( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_quantitiesLookupModes &modes, - bool sampling ) { - - int i; - double xsec = 0., xsec1, xsec2, temperature = modes.getTemperature( ); - - for( i = 0; i < target->nReadHeatedTargets; i++ ) if( target->readHeatedTargets[i]->temperature > temperature ) break; - if( i == 0 ) { - xsec = MCGIDI_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[0]->heatedTarget, modes, sampling ); } - else if( i == target->nReadHeatedTargets ) { - xsec = MCGIDI_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, modes, sampling ); } - else { - xsec1 = MCGIDI_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, modes, sampling ); - xsec2 = MCGIDI_target_heated_getTotalCrossSectionAtE( smr, target->readHeatedTargets[i ]->heatedTarget, modes, sampling ); - xsec = ( ( target->readHeatedTargets[i]->temperature - temperature ) * xsec1 + - ( temperature - target->readHeatedTargets[i-1]->temperature ) * xsec2 ) / - ( target->readHeatedTargets[i]->temperature - target->readHeatedTargets[i-1]->temperature ); - } - - return( xsec ); -} -/* -************************************************************ -*/ -int MCGIDI_target_getDomain( statusMessageReporting *smr, MCGIDI_target *target, double *EMin, double *EMax ) { - - int ir, nr = MCGIDI_target_numberOfReactions( smr, target ); - double EMin_, EMax_; - - for( ir = 0; ir < nr; ir++ ) { - MCGIDI_target_heated_getReactionsDomain( smr, target->baseHeatedTarget, ir, &EMin_, &EMax_ ); - if( ir == 0 ) { - *EMin = EMin_; - *EMax = EMax_; } - else { - if( *EMin > EMin_ ) *EMin = EMin_; - if( *EMax < EMax_ ) *EMax = EMax_; - } - } - return( 0 ); -} -/* -************************************************************ -*/ -double MCGIDI_target_getIndexReactionCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target *target, int index, MCGIDI_quantitiesLookupModes &modes, - bool sampling ) { - - int i; - double xsec = 0., xsec1, xsec2, temperature = modes.getTemperature( ); - - for( i = 0; i < target->nReadHeatedTargets; i++ ) if( target->readHeatedTargets[i]->temperature > temperature ) break; - if( i == 0 ) { - xsec = MCGIDI_target_heated_getIndexReactionCrossSectionAtE( smr, target->readHeatedTargets[0]->heatedTarget, index, modes, sampling ); } - else if( i == target->nReadHeatedTargets ) { - xsec = MCGIDI_target_heated_getIndexReactionCrossSectionAtE( smr, target->readHeatedTargets[i-1]->heatedTarget, index, modes, sampling ); } - else { - xsec1 = MCGIDI_target_heated_getIndexReactionCrossSectionAtE(smr, target->readHeatedTargets[i-1]->heatedTarget, index, modes, sampling ); - xsec2 = MCGIDI_target_heated_getIndexReactionCrossSectionAtE(smr, target->readHeatedTargets[i ]->heatedTarget, index, modes, sampling ); - xsec = ( ( target->readHeatedTargets[i]->temperature - temperature ) * xsec1 + - ( temperature - target->readHeatedTargets[i-1]->temperature ) * xsec2 ) / - ( target->readHeatedTargets[i]->temperature - target->readHeatedTargets[i-1]->temperature ); - } - - return( xsec ); -} -/* -************************************************************ -*/ -int MCGIDI_target_sampleReaction( statusMessageReporting *smr, MCGIDI_target *target, MCGIDI_quantitiesLookupModes &modes, double totalXSec, - double (*userrng)( void * ), void *rngState ) { - - int ir, nr = MCGIDI_target_numberOfReactions( smr, target ); - double rngValue = (*userrng)( rngState ); - double cumm_xsec = 0., r_xsec = rngValue * totalXSec; - - for( ir = 0; ir < nr; ir++ ) { - cumm_xsec += MCGIDI_target_getIndexReactionCrossSectionAtE( smr, target, ir, modes, true ); - if( cumm_xsec >= r_xsec ) break; - } - if( ir == nr ) { - if( ( totalXSec - cumm_xsec ) >= 1e-12 * totalXSec ) { - smr_setReportError2( smr, smr_unknownID, 1, - "Failed to sample a reaction for temperature = %.12e, energy = %.12e, totalXSec = %16.e, rngValue = %16.e, r_xsec = %16.e, cumm_xsec = %16.e", - modes.getTemperature( ), modes.getProjectileEnergy( ), totalXSec, rngValue, r_xsec, cumm_xsec ); - return( -1 ); - } - ir--; /* May not be correct but close. */ - } - if( modes.getCrossSectionMode( ) == MCGIDI_quantityLookupMode_grouped ) { - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex( target->baseHeatedTarget, ir ); - - if( modes.getGroupIndex( ) == reaction->thresholdGroupIndex ) { - double dEnergy = modes.getProjectileEnergy( ) - reaction->EMin; - - if( dEnergy <= 0 ) return( MCGIDI_nullReaction ); - if( ( (*userrng)( rngState ) * reaction->thresholdGroupDomain ) > dEnergy ) return( MCGIDI_nullReaction ); - } - } - return( ir ); -} -/* -************************************************************ -*/ -int MCGIDI_target_sampleNullReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target *target, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productDatas ) { - - MCGIDI_sampledProductsData productData; - - productData.isVelocity = decaySamplingInfo->isVelocity; - productData.pop = target->projectilePOP; - productData.kineticEnergy = modes.getProjectileEnergy( ); - productData.px_vx = 0.; - productData.py_vy = 0.; - productData.pz_vz = std::sqrt( productData.kineticEnergy * ( productData.kineticEnergy + 2. * productData.pop->mass_MeV ) ); - if( productData.isVelocity ) productData.pz_vz *= - MCGIDI_speedOfLight_cm_sec / std::sqrt( productData.pz_vz * productData.pz_vz + productData.pop->mass_MeV * productData.pop->mass_MeV ); - productData.delayedNeutronIndex = 0; - productData.delayedNeutronRate = 0.; - productData.birthTimeSec = 0; - - productDatas->numberOfProducts = 0; - MCGIDI_sampledProducts_addProduct( smr, productDatas, &productData ); - return( productDatas->numberOfProducts ); -} -/* -************************************************************ -*/ -int MCGIDI_target_sampleIndexReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target *target, int index, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productData ) { - - return( MCGIDI_target_heated_sampleIndexReactionProductsAtE( smr, target->baseHeatedTarget, index, modes, decaySamplingInfo, productData ) ); -} -/* -************************************************************ -*/ -double MCGIDI_target_getIndexReactionFinalQ( statusMessageReporting *smr, MCGIDI_target *target, int index, - MCGIDI_quantitiesLookupModes &modes ) { - - return( MCGIDI_target_heated_getIndexReactionFinalQ( smr, target->baseHeatedTarget, index, modes ) ); -} -/* -************************************************************ -*/ -std::map const *MCGIDI_target_getUniqueProducts( statusMessageReporting *smr, MCGIDI_target *target ) { - - return( MCGIDI_target_heated_getUniqueProducts( smr, target->baseHeatedTarget ) ); -} -/* -************************************************************ -*/ -int MCGIDI_target_recast( statusMessageReporting *smr, MCGIDI_target *target, GIDI_settings &settings ) { - - int i1, status = 0; - - for( i1 = 0; i1 < target->nReadHeatedTargets; i1++ ) { - if( ( status = MCGIDI_target_heated_recast( smr, target->readHeatedTargets[i1]->heatedTarget, settings ) ) != 0 ) break; - } - return( status ); -} -/* -************************************************************ -*/ -static int _MCGIDI_target_releaseAndReturnOne( statusMessageReporting *smr, MCGIDI_target *target ) { - - MCGIDI_target_release( smr, target ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_target_heated.cc b/source/processes/hadronic/models/lend/src/MCGIDI_target_heated.cc deleted file mode 100644 index ce058cc385..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_target_heated.cc +++ /dev/null @@ -1,616 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include - -#include -#include "MCGIDI.h" -#include "MCGIDI_misc.h" -#include "MCGIDI_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int MCGIDI_target_heated_parsePOPs( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, - xDataTOM_element *particleAliases ); -static int MCGIDI_target_heated_parseParticle( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, - xDataTOM_element *particleAliases ); -static int MCGIDI_target_heated_parseParticleLevel( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, MCGIDI_POP *parent, - double mass_MeV, xDataTOM_element *particleAliases ); -static int MCGIDI_target_heated_parseParticleGammas( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, char const *name ); -static int MCGIDI_target_heated_parseReaction( statusMessageReporting *smr, xDataTOM_element *child, MCGIDI_target_heated *target, - MCGIDI_POPs *pops, MCGIDI_reaction *reaction ); -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_target_heated_new( statusMessageReporting *smr ) { - - MCGIDI_target_heated *target; - - if( ( target = (MCGIDI_target_heated *) smr_malloc2( smr, sizeof( MCGIDI_target_heated ), 0, "target" ) ) == NULL ) return( NULL ); - if( MCGIDI_target_heated_initialize( smr, target ) ) target = (MCGIDI_target_heated *) smr_freeMemory( (void **) &target ); - return( target ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_initialize( statusMessageReporting *smr, MCGIDI_target_heated *target ) { - - memset( target, 0, sizeof( MCGIDI_target_heated ) ); - MCGIDI_POPs_initial( smr, &(target->pops), 100 ); - target->transportabilities = new transportabilitiesMap( ); - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_target_heated_newRead( statusMessageReporting *smr, const char *fileName ) { - - MCGIDI_target_heated *target; - - if( ( target = MCGIDI_target_heated_new( smr ) ) == NULL ) return( NULL ); - if( MCGIDI_target_heated_read( smr, target, fileName ) != 0 ) target = (MCGIDI_target_heated *) smr_freeMemory( (void **) &target ); - return( target ); -} -/* -************************************************************ -*/ -MCGIDI_target_heated *MCGIDI_target_heated_free( statusMessageReporting *smr, MCGIDI_target_heated *target ) { - - MCGIDI_target_heated_release( smr, target ); - smr_freeMemory( (void **) &target ); - return( NULL ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_release( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - int ir; - - ptwXY_free( target->crossSection ); - ptwX_free( target->crossSectionGrouped ); - ptwX_free( target->crossSectionGroupedForSampling ); - for( ir = 0; ir < target->numberOfReactions; ir++ ) MCGIDI_reaction_release( NULL, &(target->reactions[ir]) ); - smr_freeMemory( (void **) &(target->reactions) ); - MCGIDI_POPs_release( &(target->pops) ); - smr_freeMemory( (void **) &(target->path) ); - smr_freeMemory( (void **) &(target->absPath) ); - xDataTOMAL_release( &(target->attributes) ); - delete target->transportabilities; - return( 0 ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_read( statusMessageReporting *smr, MCGIDI_target_heated *target, const char *fileName ) { -/* -* If a target has already been read into this target, user must have called MCGIDI_target_heated_release before calling this routine. -* Otherwise, there will be memory leaks. -*/ - int n, ir; - xDataTOM_TOM *doc = NULL; - xDataTOM_element *element, *child, *particles, *particleAliases; - char const *name, *version, *temperatureStr; - char *e1; - MCGIDI_reaction *reaction; - double crossSectionInit[4] = { 0., 0., 0., 0., }; - nfu_status status; - ptwXYPoints *crossSection; -int subtag1_Notice = 0; - - if( ( target->path = smr_allocateCopyString2( smr, fileName, "path" ) ) == NULL ) goto err; - if( ( target->absPath = xDataTOMMisc_getAbsPath( smr, fileName ) ) == NULL ) goto err; - if( ( doc = xDataTOM_importFile( smr, fileName ) ) == NULL ) goto err; - element = xDataTOM_getDocumentsElement( doc ); - if( ( version = xDataTOM_getAttributesValueInElement( element, "version" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "version attribute missing from element '%s'", element->name ); - goto err; } - else { - if( strcmp( version, "GND 1.3" ) != 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "Unsupported version '%s' for element %s", version, element->name ); - goto err; - } - } - if( strcmp( element->name, "reactionSuite" ) != 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "input file's top element must be reactionSuite and not %s", element->name ); - goto err; } - else { - xDataTOMAL_copyAttributionList( smr, &(target->attributes), &(element->attributes) ); - particleAliases = xDataTOME_getOneElementByName( smr, element, "aliases", 0 ); - if( ( particles = xDataTOME_getOneElementByName( smr, element, "particles", 1 ) ) == NULL ) goto err; - if( MCGIDI_target_heated_parsePOPs( smr, target, particles, particleAliases ) != 0 ) goto err; - - if( ( temperatureStr = MCGIDI_misc_pointerToTOMAttributeIfAllOk3( smr, target->absPath, 1, &(target->attributes), "temperature" ) ) == NULL ) goto err; - target->temperature_MeV = strtod( temperatureStr, &e1 ); - while( isspace( *e1 ) ) ++e1; // Loop checking, 11.06.2015, T. Koi - target->temperature_MeV *= MCGIDI_misc_getUnitConversionFactor( smr, e1, "MeV/k" ); - if( !smr_isOk( smr ) ) goto err; - - if( ( name = MCGIDI_misc_pointerToTOMAttributeIfAllOk3( smr, target->absPath, 1, &(target->attributes), "projectile" ) ) != NULL ) - target->projectilePOP = MCGIDI_POPs_findParticle( &(target->pops), name ); - if( !smr_isOk( smr ) ) goto err; - - if( ( name = MCGIDI_misc_pointerToTOMAttributeIfAllOk3( smr, target->absPath, 1, &(target->attributes), "target" ) ) != NULL ) - if( !smr_isOk( smr ) ) goto err; - target->targetPOP = MCGIDI_POPs_findParticle( &(target->pops), name ); - - n = xDataTOM_numberOfElementsByName( smr, element, "reaction" ); - if( n == 0 ) { - smr_setReportError2( smr, smr_unknownID, 1, "target does not have any reactions: file = '%s'", fileName ); - goto err; - } - if( ( target->reactions = (MCGIDI_reaction *) smr_malloc2( smr, n * sizeof( MCGIDI_reaction ), 1, "target->reactions" ) ) == NULL ) goto err; - - for( ir = 0, child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "particles" ) == 0 ) continue; - if( strcmp( child->name, "styles" ) == 0 ) continue; - if( strcmp( child->name, "documentations" ) == 0 ) continue; - if( strcmp( child->name, "resonances" ) == 0 ) continue; - if( strcmp( child->name, "summedReaction" ) == 0 ) continue; - if( strcmp( child->name, "fissionComponent" ) == 0 ) continue; - if( strcmp( child->name, "reaction" ) == 0 ) { - double EMin, EMax; - - reaction = &(target->reactions[ir]); - if( MCGIDI_target_heated_parseReaction( smr, child, target, &(target->pops), reaction ) ) goto err; - if( MCGIDI_reaction_getDomain( smr, reaction, &EMin, &EMax ) ) goto err; - if( ir == 0 ) { target->EMin = EMin; target->EMax = EMax; } - if( EMin < target->EMin ) target->EMin = EMin; - if( EMax > target->EMax ) target->EMax = EMax; - for( transportabilitiesMap::const_iterator iter = reaction->transportabilities->begin( ); - iter != reaction->transportabilities->end( ); ++iter ) { - MCGIDI_misc_updateTransportabilitiesMap( target->transportabilities, iter->first, iter->second ); - } - ir++; } - else if( strcmp( child->name, "production" ) == 0 ) { - continue; } - else if( strcmp( child->name, "aliases" ) == 0 ) { - continue; } - else if( strcmp( child->name, "partialGammaProduction" ) == 0 ) { - if( subtag1_Notice == 0 ) printf( "Unsupported reactionSuite sub-tag = '%s'\n", child->name ); - subtag1_Notice++; } - else { - printf( "Unsupported reactionSuite sub-tag = '%s'\n", child->name ); - } - } - crossSectionInit[0] = target->EMin; - crossSectionInit[2] = target->EMax; - if( ( target->crossSection = ptwXY_create( ptwXY_interpolationLinLin, NULL, 2., 1e-3, 2, 10, 2, crossSectionInit, &status, 0 ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_create err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - for( ir = 0; ir < target->numberOfReactions; ir++ ) { - reaction = &(target->reactions[ir]); - if( MCGIDI_reaction_fixDomains( smr, reaction, target->EMin, target->EMax, &status ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_add_ptwXY err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - if( ( crossSection = ptwXY_add_ptwXY( target->crossSection, reaction->crossSection, &status ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "ptwXY_add_ptwXY err = %d: %s\n", status, nfu_statusMessage( status ) ); - goto err; - } - target->crossSection = ptwXY_free( target->crossSection ); - target->crossSection = crossSection; - } - } - xDataTOM_freeTOM( smr, &doc ); - return( 0 ); - -err: - smr_setReportError2( smr, smr_unknownID, 1, "Sub-error while reading file '%s'", fileName ); - if( doc != NULL ) xDataTOM_freeTOM( smr, &doc ); - MCGIDI_target_heated_release( smr, target ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_target_heated_parsePOPs( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, - xDataTOM_element *particleAliases ) { - - xDataTOM_element *child; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "particle" ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "invalid element '%s' in %s", child->name, element->name ); - goto err; - } - if( MCGIDI_target_heated_parseParticle( smr, target, child, particleAliases ) ) goto err; - } - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_target_heated_parseParticle( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, - xDataTOM_element *particleAliases ) { -/* - This routine, MCGIDI_target_heated_parseParticleLevel, MCGIDI_target_heated_parseParticleGammas handle the parsing of a - particle which can have one of the following three forms: - -1) - -2) - - - -3) - - - - - - - - - - - - - - -*/ - int globalParticle = 1; - char const *name = NULL, *mass = NULL; /* Do not free name or mass, do not own them. */ - double mass_MeV; - xDataTOM_element *child; - MCGIDI_POP *pop; - - if( ( name = xDataTOM_getAttributesValueInElement( element, "name" ) ) == NULL ) { - smr_setReportError2p( smr, smr_unknownID, 1, "particle missing name attribute" ); - goto err; - } - if( ( mass = xDataTOM_getAttributesValueInElement( element, "mass" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "particle '%s' missing mass attribute", name ); - goto err; - } - if( MCGIDI_misc_PQUStringToDouble( smr, mass, "amu", MCGIDI_AMU2MeV, &mass_MeV ) ) goto err; - if( ( pop = MCGIDI_POPs_addParticleIfNeeded( smr, &(target->pops), name, mass_MeV, 0., NULL, globalParticle ) ) == NULL ) goto err; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "level" ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "invalid element '%s' in %s", child->name, element->name ); - goto err; - } - if( MCGIDI_target_heated_parseParticleLevel( smr, target, child, pop, mass_MeV, particleAliases ) ) goto err; - } - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_target_heated_parseParticleLevel( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, MCGIDI_POP *parent, - double mass_MeV, xDataTOM_element *particleAliases ) { - - int globalParticle = 0; - char const *name, *level, *aliasValue; /* Do not free any of these as they are owned by called routine. */ - double level_MeV = 0.; - xDataTOM_element *alias; - - if( ( name = xDataTOM_getAttributesValueInElement( element, "name" ) ) == NULL ) { - smr_setReportError2p( smr, smr_unknownID, 1, "particle missing name attribute" ); - goto err; - } - if( ( level = xDataTOM_getAttributesValueInElement( element, "energy" ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "particle '%s' level missing energy attribute", name ); - goto err; - } - /* Special case for 'c' labels. Correct mass is only needed for two-body. */ - if( level[0] != 'u' ) if( MCGIDI_misc_PQUStringToDoubleInUnitOf( smr, level, "MeV", &level_MeV ) ) goto err; - for( alias = xDataTOME_getFirstElement( particleAliases ); alias != NULL; alias = xDataTOME_getNextElement( alias ) ) { - if( ( aliasValue = xDataTOM_getAttributesValueInElement( alias, "value" ) ) == NULL ) { - smr_setReportError2p( smr, smr_unknownID, 1, "particle missing name attribute" ); - goto err; - } - if( strcmp( aliasValue, name ) == 0 ) globalParticle = 1; - } - if( MCGIDI_POPs_addParticleIfNeeded( smr, &(target->pops), name, mass_MeV + level_MeV, level_MeV, parent, globalParticle ) == NULL ) goto err; - - return( MCGIDI_target_heated_parseParticleGammas( smr, target, element, name ) ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_target_heated_parseParticleGammas( statusMessageReporting *smr, MCGIDI_target_heated *target, xDataTOM_element *element, char const *name ) { - - int gammaCounts = 0; - MCGIDI_POP *pop = MCGIDI_POPs_findParticle( &(target->pops), name ); - xDataTOM_element *child; - MCGIDI_GammaBranching *gammas = NULL; - char const *finalLevelString; - double probability; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, "gamma" ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "invalid element '%s' in %s", child->name, element->name ); - goto err; - } - gammaCounts++; - } - if( gammaCounts > 0 ) { - if( ( gammas = (MCGIDI_GammaBranching *) smr_malloc2( smr, gammaCounts * sizeof( MCGIDI_GammaBranching), 0, "gammas" ) ) == NULL ) goto err; - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( ( finalLevelString = xDataTOM_getAttributesValueInElement( child, "finalLevel" ) ) == NULL ) { - smr_setReportError2p( smr, smr_unknownID, 1, "gamma missing 'finalLevel'" ); - goto err; - } - if( xDataTOME_convertAttributeToDouble( smr, child, "probability", &probability ) != 0 ) { - smr_setReportError2p( smr, smr_unknownID, 1, "gamma missing 'probability' attribute" ); - goto err; - } - } - } - pop->numberOfGammaBranchs = gammaCounts; - pop->gammas = gammas; - - return( 0 ); - -err: - if( gammas != NULL ) smr_freeMemory( (void **) &gammas ); - return( 1 ); -} -/* -************************************************************ -*/ -static int MCGIDI_target_heated_parseReaction( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_target_heated *target, - MCGIDI_POPs *pops, MCGIDI_reaction *reaction ) { - - if( MCGIDI_reaction_parseFromTOM( smr, element, target, pops, reaction ) ) goto err; - target->numberOfReactions++; - - return( 0 ); - -err: - smr_setReportError2( smr, smr_unknownID, 1, "%s\n", xDataTOM_getAttributesValueInElement( element, "outputChannel" ) ); - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_numberOfReactions( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( target->numberOfReactions ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_numberOfProductionReactions( statusMessageReporting * /*smr*/, MCGIDI_target_heated * /*target*/ ) { - - return( 0 ); -} -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_target_heated_getReactionAtIndex( MCGIDI_target_heated *target, int index ) { - - if( ( index >= 0 ) && ( index < target->numberOfReactions ) ) return( &(target->reactions[index]) ); - return( NULL ); -} -/* -************************************************************ -*/ -MCGIDI_reaction *MCGIDI_target_heated_getReactionAtIndex_smr( statusMessageReporting *smr, MCGIDI_target_heated *target, int index ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex( target, index ); - - if( reaction == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad reaction index = %d for %s + %s", index, target->projectilePOP->name, target->targetPOP->name ); - } - return( reaction ); -} -#if 0 -/* -************************************************************ -*/ -MCGIDI_channel *MCGIDI_target_heated_getProductionReactionAtIndex( MCGIDI_target_heated *target, int index ) { - - MCGIDI_channel *channel = NULL; - - if( ( index >= 0 ) && ( index < target->nProductionReactions ) ) channel = target->productionReactions[index]; - return( channel ); -} -#endif -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_target_heated_getPOPForProjectile( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( target->projectilePOP ); -} -/* -************************************************************ -*/ -MCGIDI_POP *MCGIDI_target_heated_getPOPForTarget( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( target->targetPOP ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getProjectileMass_MeV( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( MCGIDI_POP_getMass_MeV( target->projectilePOP ) ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getTargetMass_MeV( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( MCGIDI_POP_getMass_MeV( target->targetPOP ) ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getTotalCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, - MCGIDI_quantitiesLookupModes &modes, bool sampling ) { - - double xsec; - - if( modes.getCrossSectionMode( ) == MCGIDI_quantityLookupMode_pointwise ) { - double e_in = modes.getProjectileEnergy( ); - - if( e_in < target->EMin ) e_in = target->EMin; - if( e_in > target->EMax ) e_in = target->EMax; - ptwXY_getValueAtX( target->crossSection, e_in, &xsec ); } - else if( modes.getCrossSectionMode( ) == MCGIDI_quantityLookupMode_grouped ) { - int index = modes.getGroupIndex( ); - double *xSecP; - - if( sampling ) { - xSecP = ptwX_getPointAtIndex( target->crossSectionGroupedForSampling, index ); } - else { - xSecP = ptwX_getPointAtIndex( target->crossSectionGrouped, index ); - } - - if( xSecP != NULL ) { - xsec = *xSecP; } - else { - xsec = 0.; - smr_setReportError2( smr, smr_unknownID, 1, "Invalid cross section group index %d", index, (int) ptwX_length( target->crossSectionGrouped ) ); - } } - else { - xsec = 0.; - } - return( xsec ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getIndexReactionCrossSectionAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes, bool sampling ) { - - double xsec = 0.; - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex_smr( smr, target, index ); - - if( reaction != NULL ) xsec = MCGIDI_reaction_getCrossSectionAtE( smr, reaction, modes, sampling ); - return( xsec ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_sampleIndexReactionProductsAtE( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes, MCGIDI_decaySamplingInfo *decaySamplingInfo, MCGIDI_sampledProductsDatas *productDatas ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex_smr( smr, target, index ); - - productDatas->numberOfProducts = 0; - if( reaction == NULL ) return( -1 ); - return( MCGIDI_outputChannel_sampleProductsAtE( smr, &(reaction->outputChannel), modes, decaySamplingInfo, productDatas, NULL ) ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getReactionsThreshold( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target, int index ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex( target, index ); - - if( reaction == NULL ) return( -1 ); - return( reaction->EMin ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_getReactionsDomain( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target, int index, double *EMin, double *EMax ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex( target, index ); - - if( reaction == NULL ) return( -1 ); - *EMin = reaction->EMin; - *EMax = reaction->EMax; - return( 0 ); -} -/* -************************************************************ -*/ -double MCGIDI_target_heated_getIndexReactionFinalQ( statusMessageReporting *smr, MCGIDI_target_heated *target, int index, - MCGIDI_quantitiesLookupModes &modes ) { - - MCGIDI_reaction *reaction = MCGIDI_target_heated_getReactionAtIndex_smr( smr, target, index ); - - if( reaction == NULL ) return( 0. ); - return( MCGIDI_reaction_getFinalQ( smr, reaction, modes ) ); -} -/* -************************************************************ -*/ -std::map const *MCGIDI_target_heated_getUniqueProducts( statusMessageReporting * /*smr*/, MCGIDI_target_heated *target ) { - - return( target->transportabilities ); -} -/* -************************************************************ -*/ -int MCGIDI_target_heated_recast( statusMessageReporting *smr, MCGIDI_target_heated *target, GIDI_settings &settings ) { - - int ir, projectilePoPID = target->projectilePOP->globalPoPsIndex; - ptwXPoints *totalGroupedCrossSection = NULL; - GIDI_settings_particle const *projectileSettings = settings.getParticle( projectilePoPID ); - nfu_status status_nf; - - if( projectileSettings == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "Settings missing for projectile %s", target->projectilePOP->name ); - return( 1 ); - } - target->crossSectionGrouped = ptwX_free( target->crossSectionGrouped ); - target->crossSectionGroupedForSampling = ptwX_free( target->crossSectionGroupedForSampling ); - if( projectileSettings->isEnergyMode_grouped( ) ) { - int64_t numberOfGroups = projectileSettings->getNumberOfGroups( ); - - if( ( totalGroupedCrossSection = ptwX_createLine( numberOfGroups, numberOfGroups, 0, 0, &status_nf ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "totalGroupedCrossSection allocation failed: status_nf = %d, '%s'", - status_nf, nfu_statusMessage( status_nf ) ); - goto err; - } - } - - for( ir = 0; ir < target->numberOfReactions; ++ir ) { - if( MCGIDI_reaction_recast( smr, &(target->reactions[ir]), settings, projectileSettings, target->temperature_MeV, totalGroupedCrossSection ) != 0 ) goto err; - } - if( projectileSettings->isEnergyMode_grouped( ) ) { - if( ( target->crossSectionGroupedForSampling = ptwX_clone( totalGroupedCrossSection, &status_nf ) ) == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "totalGroupedCrossSection allocation failed: status_nf = %d, '%s'", - status_nf, nfu_statusMessage( status_nf ) ); - goto err; - } - for( ir = 0; ir < target->numberOfReactions; ++ir ) { - int index = target->reactions[ir].thresholdGroupIndex; - - if( index > -1 ) { - double xSec = target->reactions[ir].thresholdGroupedDeltaCrossSection + - ptwX_getPointAtIndex_Unsafely( target->crossSectionGroupedForSampling, index ); - - ptwX_setPointAtIndex( target->crossSectionGroupedForSampling, index, xSec ); - } - } - } - target->crossSectionGrouped = totalGroupedCrossSection; - totalGroupedCrossSection = NULL; - - return( 0 ); - -err: - ptwX_free( totalGroupedCrossSection ); - target->crossSectionGroupedForSampling = ptwX_free( target->crossSectionGroupedForSampling ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_uncorrelated.cc b/source/processes/hadronic/models/lend/src/MCGIDI_uncorrelated.cc deleted file mode 100644 index 3d2989d6c2..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_uncorrelated.cc +++ /dev/null @@ -1,57 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include - -#include "MCGIDI_fromTOM.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -int MCGIDI_uncorrelated_parseFromTOM( statusMessageReporting *smr, xDataTOM_element *element, MCGIDI_distribution *distribution, ptwXYPoints *norms, - enum MCGIDI_energyType energyType, double gammaEnergy_MeV ) { - - xDataTOM_element *uncorrelatedElement; - ptwXYPoints *angularNorms = NULL; - - if( ( energyType == MCGIDI_energyType_primaryGamma ) || ( energyType == MCGIDI_energyType_discreteGamma ) ) { - angularNorms = norms; - uncorrelatedElement = element; } - else { - if( ( uncorrelatedElement = xDataTOME_getOneElementByName( smr, element, "uncorrelated", 1 ) ) == NULL ) goto err; - } - - if( MCGIDI_angular_parseFromTOM( smr, uncorrelatedElement, distribution, angularNorms ) ) goto err; - if( MCGIDI_energy_parseFromTOM( smr, uncorrelatedElement, distribution, norms, energyType, gammaEnergy_MeV ) ) goto err; - distribution->type = MCGIDI_distributionType_uncorrelated_e; - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -int MCGIDI_uncorrelated_sampleDistribution( statusMessageReporting *smr, MCGIDI_distribution *distribution, MCGIDI_quantitiesLookupModes &modes, - MCGIDI_decaySamplingInfo *decaySamplingInfo ) { - - enum xDataTOM_frame frame; - - if( MCGIDI_energy_sampleEnergy( smr, distribution->energy, modes, decaySamplingInfo ) ) return( 1 ); - frame = decaySamplingInfo->frame; - if( MCGIDI_angular_sampleMu( smr, distribution->angular, modes, decaySamplingInfo ) ) return( 1 ); - decaySamplingInfo->frame = frame; /* Discrete and primary gammas in COM are treated as lab for now and energy sets it correctly. */ - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/MCGIDI_version.cc b/source/processes/hadronic/models/lend/src/MCGIDI_version.cc deleted file mode 100644 index 92570a95a7..0000000000 --- a/source/processes/hadronic/models/lend/src/MCGIDI_version.cc +++ /dev/null @@ -1,23 +0,0 @@ -/* -# <> -# <> -*/ - -#include "MCGIDI.h" - -static char versionStr[64] = ""; - -/* -======================================================================== -*/ -const char *MCGIDI_version( void ) { - - if( versionStr[0] == 0 ) snprintf( versionStr, sizeof versionStr, "MCGIDI version %d.%d.%d", MCGIDI_VERSION_MAJOR, MCGIDI_VERSION_MINOR, MCGIDI_VERSION_PATCHLEVEL ); - return( versionStr ); -} -/* -======================================================================== -*/ -int MCGIDI_versionMajor( void ) { return( MCGIDI_VERSION_MAJOR ); } -int MCGIDI_versionMinor( void ) { return( MCGIDI_VERSION_MINOR ); } -int MCGIDI_versionPatchLevel( void ) { return( MCGIDI_VERSION_PATCHLEVEL ); } diff --git a/source/processes/hadronic/models/lend/src/PoPI_alias.cc b/source/processes/hadronic/models/lend/src/PoPI_alias.cc new file mode 100644 index 0000000000..8bf62a0c50 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_alias.cc @@ -0,0 +1,107 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_metaStableIndexChars "metaStableIndex" + +/*! \class Alias + * This class represents a **PoPs** alias instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **GNDS** alias node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Alias** to. + * @param a_class [in] The particle class for **Alias**. + ***********************************************************************************************************/ + +Alias::Alias( HAPI::Node const &a_node, Database *a_DB, Particle_class a_class ) : + IDBase( a_node, a_class ), + m_pid( a_node.attribute( PoPI_pidChars ).value( ) ), + m_pidIndex( -1 ) { + + if( supportedNucleusAliases.find( ID( ) ) != supportedNucleusAliases.end( ) ) { + ParseIdInfo idInfo( supportedNucleusAliases[ID( )] ); + + setIntid( 1000 * ( 1000 * (idInfo.index( ) + 500) + idInfo.Z( ) ) + idInfo.A( ) ); // Anti is currently not supported. + } + if( a_class == Particle_class::alias ) addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Alias::~Alias( ) { + +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Alias::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); +} + +/*! \class MetaStable + * This class represents **PoPs** metaStable instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **GNDS** metastable alias node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **MetaStable** to. + ***********************************************************************************************************/ + +MetaStable::MetaStable( HAPI::Node const &a_node, Database *a_DB ) : + Alias( a_node, a_DB, Particle_class::nuclideMetaStable ), // Initial guess. */ + m_metaStableIndex( a_node.attribute( PoPI_metaStableIndexChars ).as_int( ) ) { + + ParseIdInfo idInfo( ID( ) ); + if( idInfo.isNuclear( ) ) { + m_class = idInfo.isNucleus( ) ? Particle_class::nucleusMetaStable : Particle_class::nuclideMetaStable; + int intid2 = intidHelper( false, m_class, 1000 * idInfo.Z( ) + idInfo.A( ) ); + setIntid( intid2 + 1000000 * idInfo.index( ) ); + } + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +MetaStable::~MetaStable( ) { + +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void MetaStable::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string indexStr = LUPI::Misc::argumentsToString( "%d", m_metaStableIndex ); + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_baryon.cc b/source/processes/hadronic/models/lend/src/PoPI_baryon.cc new file mode 100644 index 0000000000..4f89db8b5e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_baryon.cc @@ -0,0 +1,48 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class Baryon + * This class represents **PoPs** baryon instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** baryon node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Baryon** to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +Baryon::Baryon( HAPI::Node const &a_node, Database *a_DB, LUPI_maybeUnused Database *a_parent ) : + Particle( a_node, Particle_class::baryon, PoPI_baryonChars ) { + + int baryonIndex = -1; + + if( baseId( ) == IDs::neutron ) { + baryonIndex = 0; } + if( baseId( ) == IDs::proton ) { + baryonIndex = 1; + } + if( baryonIndex != -1 ) setIntid( intidHelper( isAnti( ), Particle_class::baryon, baryonIndex ) ); + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Baryon::~Baryon( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_base.cc b/source/processes/hadronic/models/lend/src/PoPI_base.cc new file mode 100644 index 0000000000..a778e52057 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_base.cc @@ -0,0 +1,139 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +#define PoPI_idChars "id" +#define PoPI_symbolChars "symbol" + +namespace PoPI { + +/*! \class Base + * This class is the base class for all **Particle** and **SymbolBase** instances. + */ + +/* *********************************************************************************************************//** + * @param a_id [in] The **PoPs** id for *this*. + * @param a_class [in] The **PoPI** class for *this*. + ***********************************************************************************************************/ + +Base::Base( std::string const &a_id, Particle_class a_class ) : + m_id( a_id ), + m_class( a_class ), + m_index( -1 ), + m_intid( -1 ) { + +} + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_label [in] This is either *id* or *symbol*. That is, it is the name of the attribute in *a_node* whose value represents *this* *m_id* member. + * @param a_class [in] The **PoPI** class for *this*. + ***********************************************************************************************************/ + +Base::Base( HAPI::Node const &a_node, std::string const &a_label, Particle_class a_class ) : + m_id( a_node.attribute( a_label.c_str( ) ).value( ) ), + m_class( a_class ), + m_index( -1 ), + m_intid( -1 ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Base::~Base( ) { + +} + +/*! \class IDBase + * This class is the base class for all **Particle** instances. + */ + +/* *********************************************************************************************************//** + * @param a_id [in] The **PoPs** id for *this*. + * @param a_class [in] The **PoPI** class for *this*. + ***********************************************************************************************************/ + +IDBase::IDBase( std::string const &a_id, Particle_class a_class ) : + Base( a_id, a_class ) { + +} + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_class [in] The **PoPI** class for *this*. + ***********************************************************************************************************/ + +IDBase::IDBase( HAPI::Node const &a_node, Particle_class a_class ) : + Base( a_node, PoPI_idChars, a_class ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +IDBase::~IDBase( ) { + +} + +/* *********************************************************************************************************//** + * This method adds *this* to the *m_list* member of *a_DB*. + * + * @param a_DB [in] The **PoPI::Database** instance to add *this* to. + * + * @return The index assigned to *this* by *a_DB*. + ***********************************************************************************************************/ + +int IDBase::addToDatabase( Database *a_DB ) { + + a_DB->add( this ); + return( index( ) ); +} + +/*! \class SymbolBase + * This class is the base class for all **SymbolBase** instances. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_class [in] The **PoPI** class for *this*. + ***********************************************************************************************************/ + +SymbolBase::SymbolBase( HAPI::Node const &a_node, Particle_class a_class ) : + Base( a_node, PoPI_symbolChars, a_class ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +SymbolBase::~SymbolBase( ) { + +} + +/* *********************************************************************************************************//** + * This method adds *this* to the *m_symbolList* member of *a_DB*. + * + * @param a_DB [in] The **PoPI::Database** instance to add *this* to. + * + * @return The index assigned to *this* by *a_DB*. + ***********************************************************************************************************/ + +int SymbolBase::addToSymbols( Database *a_DB ) { + + a_DB->addSymbol( this ); + return( index( ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_chemicalElement.cc b/source/processes/hadronic/models/lend/src/PoPI_chemicalElement.cc new file mode 100644 index 0000000000..d45fb7768d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_chemicalElement.cc @@ -0,0 +1,1176 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include + +namespace PoPI { + +#define PoPI_chemicalElementChars "chemicalElement" +#define PoPI_isotopesChars "isotopes" +#define PoPI_Z_Chars "Z" + +static std::string emptyString( "" ); +static std::map ZtoChemicalElementSymbols{ + {1, "H"}, {2, "He"}, {3, "Li"}, {4, "Be"}, {5, "B"}, {6, "C"}, {7, "N"}, {8, "O"}, {9, "F"}, {10, "Ne"}, + {11, "Na"}, {12, "Mg"}, {13, "Al"}, {14, "Si"}, {15, "P"}, {16, "S"}, {17, "Cl"}, {18, "Ar"}, {19, "K"}, {20, "Ca"}, + {21, "Sc"}, {22, "Ti"}, {23, "V"}, {24, "Cr"}, {25, "Mn"}, {26, "Fe"}, {27, "Co"}, {28, "Ni"}, {29, "Cu"}, {30, "Zn"}, + {31, "Ga"}, {32, "Ge"}, {33, "As"}, {34, "Se"}, {35, "Br"}, {36, "Kr"}, {37, "Rb"}, {38, "Sr"}, {39, "Y"}, {40, "Zr"}, + {41, "Nb"}, {42, "Mo"}, {43, "Tc"}, {44, "Ru"}, {45, "Rh"}, {46, "Pd"}, {47, "Ag"}, {48, "Cd"}, {49, "In"}, {50, "Sn"}, + {51, "Sb"}, {52, "Te"}, {53, "I"}, {54, "Xe"}, {55, "Cs"}, {56, "Ba"}, {57, "La"}, {58, "Ce"}, {59, "Pr"}, {60, "Nd"}, + {61, "Pm"}, {62, "Sm"}, {63, "Eu"}, {64, "Gd"}, {65, "Tb"}, {66, "Dy"}, {67, "Ho"}, {68, "Er"}, {69, "Tm"}, {70, "Yb"}, + {71, "Lu"}, {72, "Hf"}, {73, "Ta"}, {74, "W"}, {75, "Re"}, {76, "Os"}, {77, "Ir"}, {78, "Pt"}, {79, "Au"}, {80, "Hg"}, + {81, "Tl"}, {82, "Pb"}, {83, "Bi"}, {84, "Po"}, {85, "At"}, {86, "Rn"}, {87, "Fr"}, {88, "Ra"}, {89, "Ac"}, {90, "Th"}, + {91, "Pa"}, {92, "U"}, {93, "Np"}, {94, "Pu"}, {95, "Am"}, {96, "Cm"}, {97, "Bk"}, {98, "Cf"}, {99, "Es"}, {100, "Fm"}, + {101, "Md"}, {102, "No"}, {103, "Lr"}, {104, "Rf"}, {105, "Db"}, {106, "Sg"}, {107, "Bh"}, {108, "Hs"}, {109, "Mt"}, {110, "Ds"}, + {111, "Rg"}, {112, "Cn"}, {113, "Nh"}, {114, "Fl"}, {115, "Mc"}, {116, "Lv"}, {117, "Ts"}, {118, "Og"} }; + +static std::map chemicalElementSymbolToZs; +std::map supportedNucleusAliases{ {"d", "h2"}, {"t", "h3"}, {"h", "he3"}, {"a", "he4"} }; +static std::string protonFakeAlias( "h1" ); + +/*! \class ChemicalElement + * This class represents a **PoPs** chemicalElement instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **GNDS** chemicalElement node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **ChemicalElement** to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +ChemicalElement::ChemicalElement( HAPI::Node const &a_node, Database *a_DB, LUPI_maybeUnused Database *a_parent ) : + SymbolBase( a_node, Particle_class::chemicalElement ), + m_Z( a_node.attribute( PoPI_Z_Chars ).as_int( ) ), + m_name( a_node.attribute( PoPI_nameChars ).value( ) ), + m_isotopes( PoPI_isotopesChars ) { + + addToSymbols( a_DB ); + m_isotopes.appendFromParentNode( a_node.child( PoPI_isotopesChars ), a_DB, this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +ChemicalElement::~ChemicalElement( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void ChemicalElement::calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const { + + for( std::size_t i1 = 0; i1 < m_isotopes.size( ); ++i1 ) { + Isotope const &isotope = m_isotopes[i1]; + + isotope.calculateNuclideGammaBranchStateInfos( a_pops, a_nuclideGammaBranchStateInfos ); + } +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void ChemicalElement::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string::size_type size = m_isotopes.size( ); + std::string ZStr = LUPI::Misc::argumentsToString( "%d", m_Z ); + + if( size == 0 ) return; + + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); + + std::string indent2 = a_indent1 + " "; + std::string isotopeSuite = indent2 + "<" + PoPI_isotopesChars + ">"; + a_XMLList.push_back( isotopeSuite ); + + std::string indent3 = indent2 + " "; + for( std::string::size_type i1 = 0; i1 < size; ++i1 ) m_isotopes[i1].toXMLList( a_XMLList, indent3 ); + + appendXMLEnd( a_XMLList, PoPI_isotopesChars ); + appendXMLEnd( a_XMLList, PoPI_chemicalElementChars ); +} + +/* *********************************************************************************************************//** + * Returns the maximum supported Z (atomic number) supported by function chemicalElementInfoFromZ. + * + * @return int. + ***********************************************************************************************************/ + +int maximumChemicalElementZ( ) { + + return( static_cast( ZtoChemicalElementSymbols.size( ) ) ); +} + +/* *********************************************************************************************************//** + * Returns the chemical element's symbol (*a_wantSymbol* = **true**) or name (*a_wantSymbol* = **false**) for + * the requrest atomic number *a_Z*. *a_wantSymbol* is **true**, the returned symbol is for the nuclide when + * *a_asNucleus* is **false** and for the nucleus otherwise. + * + * @param a_Z [in] The Z (atomic number of the chemical element. + * @param a_wantSymbol [in] If **true** returns the chemical element's symbol otherwise its name. + * @param a_asNucleus [in] If **true** returns the symbol for the nucleus, otherwise for the nuclide. As no affect if a_wantSymbol is **false**. + * + * @return The symbol for the nuclide or the nucleus, or the name as a std::string. + ***********************************************************************************************************/ + +std::string chemicalElementInfoFromZ( int a_Z, bool a_wantSymbol, bool a_asNucleus ) { + + std::string info; + + switch( a_Z ) { + case 1: + if( a_wantSymbol ) { + info = "H"; } + else { + info = "Hydrogen"; + } + break; + case 2: + if( a_wantSymbol ) { + info = "He"; } + else { + info = "Helium"; + } + break; + case 3: + if( a_wantSymbol ) { + info = "Li"; } + else { + info = "Lithium"; + } + break; + case 4: + if( a_wantSymbol ) { + info = "Be"; } + else { + info = "Beryllium"; + } + break; + case 5: + if( a_wantSymbol ) { + info = "B"; } + else { + info = "Boron"; + } + break; + case 6: + if( a_wantSymbol ) { + info = "C"; } + else { + info = "Carbon"; + } + break; + case 7: + if( a_wantSymbol ) { + info = "N"; } + else { + info = "Nitrogen"; + } + break; + case 8: + if( a_wantSymbol ) { + info = "O"; } + else { + info = "Oxygen"; + } + break; + case 9: + if( a_wantSymbol ) { + info = "F"; } + else { + info = "Fluorine"; + } + break; + case 10: + if( a_wantSymbol ) { + info = "Ne"; } + else { + info = "Neon"; + } + break; + case 11: + if( a_wantSymbol ) { + info = "Na"; } + else { + info = "Sodium"; + } + break; + case 12: + if( a_wantSymbol ) { + info = "Mg"; } + else { + info = "Magnesium"; + } + break; + case 13: + if( a_wantSymbol ) { + info = "Al"; } + else { + info = "Aluminium"; + } + break; + case 14: + if( a_wantSymbol ) { + info = "Si"; } + else { + info = "Silicon"; + } + break; + case 15: + if( a_wantSymbol ) { + info = "P"; } + else { + info = "Phosphorus"; + } + break; + case 16: + if( a_wantSymbol ) { + info = "S"; } + else { + info = "Sulphur"; + } + break; + case 17: + if( a_wantSymbol ) { + info = "Cl"; } + else { + info = "Chlorine"; + } + break; + case 18: + if( a_wantSymbol ) { + info = "Ar"; } + else { + info = "Argon"; + } + break; + case 19: + if( a_wantSymbol ) { + info = "K"; } + else { + info = "Potassium"; + } + break; + case 20: + if( a_wantSymbol ) { + info = "Ca"; } + else { + info = "Calcium"; + } + break; + case 21: + if( a_wantSymbol ) { + info = "Sc"; } + else { + info = "Scandium"; + } + break; + case 22: + if( a_wantSymbol ) { + info = "Ti"; } + else { + info = "Titanium"; + } + break; + case 23: + if( a_wantSymbol ) { + info = "V"; } + else { + info = "Vanadium"; + } + break; + case 24: + if( a_wantSymbol ) { + info = "Cr"; } + else { + info = "Chromium"; + } + break; + case 25: + if( a_wantSymbol ) { + info = "Mn"; } + else { + info = "Manganese"; + } + break; + case 26: + if( a_wantSymbol ) { + info = "Fe"; } + else { + info = "Iron"; + } + break; + case 27: + if( a_wantSymbol ) { + info = "Co"; } + else { + info = "Cobalt"; + } + break; + case 28: + if( a_wantSymbol ) { + info = "Ni"; } + else { + info = "Nickel"; + } + break; + case 29: + if( a_wantSymbol ) { + info = "Cu"; } + else { + info = "Copper"; + } + break; + case 30: + if( a_wantSymbol ) { + info = "Zn"; } + else { + info = "Zinc"; + } + break; + case 31: + + if( a_wantSymbol ) { + info = "Ga"; } + else { + info = "Gallium"; + } + break; + case 32: + if( a_wantSymbol ) { + info = "Ge"; } + else { + info = "Germanium"; + } + break; + case 33: + if( a_wantSymbol ) { + info = "As"; } + else { + info = "Arsenic"; + } + break; + case 34: + if( a_wantSymbol ) { + info = "Se"; } + else { + info = "Selenium"; + } + break; + case 35: + if( a_wantSymbol ) { + info = "Br"; } + else { + info = "Bromine"; + } + break; + case 36: + if( a_wantSymbol ) { + info = "Kr"; } + else { + info = "Krypton"; + } + break; + case 37: + if( a_wantSymbol ) { + info = "Rb"; } + else { + info = "Rubidium"; + } + break; + case 38: + if( a_wantSymbol ) { + info = "Sr"; } + else { + info = "Strontium"; + } + break; + case 39: + if( a_wantSymbol ) { + info = "Y"; } + else { + info = "Yttrium"; + } + break; + case 40: + if( a_wantSymbol ) { + info = "Zr"; } + else { + info = "Zirconium"; + } + break; + case 41: + if( a_wantSymbol ) { + info = "Nb"; } + else { + info = "Niobium"; + } + break; + case 42: + if( a_wantSymbol ) { + info = "Mo"; } + else { + info = "Molybdenum"; + } + break; + case 43: + if( a_wantSymbol ) { + info = "Tc"; } + else { + info = "Technetium"; + } + break; + case 44: + if( a_wantSymbol ) { + info = "Ru"; } + else { + info = "Ruthenium"; + } + break; + case 45: + if( a_wantSymbol ) { + info = "Rh"; } + else { + info = "Rhodium"; + } + break; + case 46: + if( a_wantSymbol ) { + info = "Pd"; } + else { + info = "Palladium"; + } + break; + case 47: + if( a_wantSymbol ) { + info = "Ag"; } + else { + info = "Silver"; + } + break; + case 48: + if( a_wantSymbol ) { + info = "Cd"; } + else { + info = "Cadmium"; + } + break; + case 49: + if( a_wantSymbol ) { + info = "In"; } + else { + info = "Indium"; + } + break; + case 50: + if( a_wantSymbol ) { + info = "Sn"; } + else { + info = "Tin"; + } + break; + case 51: + if( a_wantSymbol ) { + info = "Sb"; } + else { + info = "Antimony"; + } + break; + case 52: + if( a_wantSymbol ) { + info = "Te"; } + else { + info = "Tellurium"; + } + break; + case 53: + if( a_wantSymbol ) { + info = "I"; } + else { + info = "Iodine"; + } + break; + case 54: + if( a_wantSymbol ) { + info = "Xe"; } + else { + info = "Xenon"; + } + break; + case 55: + if( a_wantSymbol ) { + info = "Cs"; } + else { + info = "Cesium"; + } + break; + case 56: + if( a_wantSymbol ) { + info = "Ba"; } + else { + info = "Barium"; + } + break; + case 57: + if( a_wantSymbol ) { + info = "La"; } + else { + info = "Lanthanum"; + } + break; + case 58: + if( a_wantSymbol ) { + info = "Ce"; } + else { + info = "Cerium"; + } + break; + case 59: + if( a_wantSymbol ) { + info = "Pr"; } + else { + info = "Praseodymium"; + } + break; + case 60: + if( a_wantSymbol ) { + info = "Nd"; } + else { + info = "Neodymium"; + } + break; + case 61: + if( a_wantSymbol ) { + info = "Pm"; } + else { + info = "Promethium"; + } + break; + case 62: + if( a_wantSymbol ) { + info = "Sm"; } + else { + info = "Samarium"; + } + break; + case 63: + if( a_wantSymbol ) { + info = "Eu"; } + else { + info = "Europium"; + } + break; + case 64: + if( a_wantSymbol ) { + info = "Gd"; } + else { + info = "Gadolinium"; + } + break; + case 65: + if( a_wantSymbol ) { + info = "Tb"; } + else { + info = "Terbium"; + } + break; + case 66: + if( a_wantSymbol ) { + info = "Dy"; } + else { + info = "Dysprosium"; + } + break; + case 67: + if( a_wantSymbol ) { + info = "Ho"; } + else { + info = "Holmium"; + } + break; + case 68: + if( a_wantSymbol ) { + info = "Er"; } + else { + info = "Erbium"; + } + break; + case 69: + if( a_wantSymbol ) { + info = "Tm"; } + else { + info = "Thulium"; + } + break; + case 70: + if( a_wantSymbol ) { + info = "Yb"; } + else { + info = "Ytterbium"; + } + break; + case 71: + if( a_wantSymbol ) { + info = "Lu"; } + else { + info = "Lutetium"; + } + break; + case 72: + if( a_wantSymbol ) { + info = "Hf"; } + else { + info = "Hafnium"; + } + break; + case 73: + if( a_wantSymbol ) { + info = "Ta"; } + else { + info = "Tantalum"; + } + break; + case 74: + if( a_wantSymbol ) { + info = "W"; } + else { + info = "Tungsten"; + } + break; + case 75: + if( a_wantSymbol ) { + info = "Re"; } + else { + info = "Rhenium"; + } + break; + case 76: + if( a_wantSymbol ) { + info = "Os"; } + else { + info = "Osmium"; + } + break; + case 77: + if( a_wantSymbol ) { + info = "Ir"; } + else { + info = "Iridium"; + } + break; + case 78: + if( a_wantSymbol ) { + info = "Pt"; } + else { + info = "Platinum"; + } + break; + case 79: + if( a_wantSymbol ) { + info = "Au"; } + else { + info = "Gold"; + } + break; + case 80: + if( a_wantSymbol ) { + info = "Hg"; } + else { + info = "Mercury"; + } + break; + case 81: + if( a_wantSymbol ) { + info = "Tl"; } + else { + info = "Thallium"; + } + break; + case 82: + if( a_wantSymbol ) { + info = "Pb"; } + else { + info = "Lead"; + } + break; + case 83: + if( a_wantSymbol ) { + info = "Bi"; } + else { + info = "Bismuth"; + } + break; + case 84: + if( a_wantSymbol ) { + info = "Po"; } + else { + info = "Polonium"; + } + break; + case 85: + if( a_wantSymbol ) { + info = "At"; } + else { + info = "Astatine"; + } + break; + case 86: + if( a_wantSymbol ) { + info = "Rn"; } + else { + info = "Radon"; + } + break; + case 87: + if( a_wantSymbol ) { + info = "Fr"; } + else { + info = "Francium"; + } + break; + case 88: + if( a_wantSymbol ) { + info = "Ra"; } + else { + info = "Radium"; + } + break; + case 89: + if( a_wantSymbol ) { + info = "Ac"; } + else { + info = "Actinium"; + } + break; + case 90: + if( a_wantSymbol ) { + info = "Th"; } + else { + info = "Thorium"; + } + break; + case 91: + if( a_wantSymbol ) { + info = "Pa"; } + else { + info = "Protactinium"; + } + break; + case 92: + if( a_wantSymbol ) { + info = "U"; } + else { + info = "Uranium"; + } + break; + case 93: + if( a_wantSymbol ) { + info = "Np"; } + else { + info = "Neptunium"; + } + break; + case 94: + if( a_wantSymbol ) { + info = "Pu"; } + else { + info = "Plutonium"; + } + break; + case 95: + if( a_wantSymbol ) { + info = "Am"; } + else { + info = "Americium"; + } + break; + case 96: + if( a_wantSymbol ) { + info = "Cm"; } + else { + info = "Curium"; + } + break; + case 97: + if( a_wantSymbol ) { + info = "Bk"; } + else { + info = "Berkelium"; + } + break; + case 98: + if( a_wantSymbol ) { + info = "Cf"; } + else { + info = "Californium"; + } + break; + case 99: + if( a_wantSymbol ) { + info = "Es"; } + else { + info = "Einsteinium"; + } + break; + case 100: + if( a_wantSymbol ) { + info = "Fm"; } + else { + info = "Fermium"; + } + break; + case 101: + if( a_wantSymbol ) { + info = "Md"; } + else { + info = "Mendelevium"; + } + break; + case 102: + if( a_wantSymbol ) { + info = "No"; } + else { + info = "Nobelium"; + } + break; + case 103: + if( a_wantSymbol ) { + info = "Lr"; } + else { + info = "Lawrencium"; + } + break; + case 104: + if( a_wantSymbol ) { + info = "Rf"; } + else { + info = "Rutherfordium"; + } + break; + case 105: + if( a_wantSymbol ) { + info = "Db"; } + else { + info = "Dubnium"; + } + break; + case 106: + if( a_wantSymbol ) { + info = "Sg"; } + else { + info = "Seaborgium"; + } + break; + case 107: + if( a_wantSymbol ) { + info = "Bh"; } + else { + info = "Bohrium"; + } + break; + case 108: + if( a_wantSymbol ) { + info = "Hs"; } + else { + info = "Hassium"; + } + break; + case 109: + if( a_wantSymbol ) { + info = "Mt"; } + else { + info = "Meitnerium"; + } + break; + case 110: + if( a_wantSymbol ) { + info = "Ds"; } + else { + info = "Darmstadtium"; + } + break; + case 111: + if( a_wantSymbol ) { + info = "Rg"; } + else { + info = "Roentgenium"; + } + break; + case 112: + if( a_wantSymbol ) { + info = "Cn"; } + else { + info = "Copernicium"; + } + break; + case 113: + if( a_wantSymbol ) { + info = "Nh"; } + else { + info = "Nihonium"; + } + break; + case 114: + if( a_wantSymbol ) { + info = "Fl"; } + else { + info = "Flerovium"; + } + break; + case 115: + if( a_wantSymbol ) { + info = "Mc"; } + else { + info = "Moscovium"; + } + break; + case 116: + if( a_wantSymbol ) { + info = "Lv"; } + else { + info = "Livermorium"; + } + break; + case 117: + if( a_wantSymbol ) { + info = "Ts"; } + else { + info = "Tennessine"; + } + break; + case 118: + if( a_wantSymbol ) { + info = "Og"; } + else { + info = "Oganesson"; + } + break; + default: + break; + } + + if( a_wantSymbol && a_asNucleus ) { + char c1[3]; + c1[0] = tolower( info.c_str( )[0] ); + c1[1] = 0; + c1[2] = 0; + if( info.size( ) > 1 ) c1[1] = info.c_str( )[1]; + + info = c1; + } + + return( info ); +} + +/* *********************************************************************************************************//** + * Returns the chemical element symbol for the requested atomic number *a_Z*. + * + * @param a_Z [in] The atomic number (Z) of the requested chemical element. + * + * @return The symbol for the nuclide or an empty string if *a_Z* is an invalid atomic number. + ***********************************************************************************************************/ + +std::string const &chemicalElementSymbolFromZ( int a_Z ) { + + if( ZtoChemicalElementSymbols.find( a_Z ) == ZtoChemicalElementSymbols.end( ) ) return( emptyString ); + + return( ZtoChemicalElementSymbols[a_Z ] ); +} + +/* *********************************************************************************************************//** + * Returns the atomic number (Z) for the requested chemical element's symbol. + * + * @param a_symbol [in] The atomic symbol. + * + * @return The atomic number or 0 if *a_symbol* is an invalid symbol. + ***********************************************************************************************************/ + +int Z_FromChemicalElementSymbol( std::string const &a_symbol ) { + + if( chemicalElementSymbolToZs.size( ) == 0 ) { + for( auto iter = ZtoChemicalElementSymbols.begin( ); iter != ZtoChemicalElementSymbols.end( ); ++iter ) { + chemicalElementSymbolToZs[iter->second] = iter->first; + } + } + + if( chemicalElementSymbolToZs.find( a_symbol ) == chemicalElementSymbolToZs.end( ) ) return( 0 ); + + return( chemicalElementSymbolToZs[a_symbol] ); +} + + +/* *********************************************************************************************************//** + * This class breaks down a PoPs id for a nuclide or nuclear into its components (e.g., Z, A, index). + * The *a_id* can also be a nuclear meta-stable or one of the light paritlce aliases (i.e., "d", "t", "h" or "a"). + * If *a_id* is a light particle alias, its nucleus equavalent is used. Also, "p" is treated as "h1", and "n" + * returns Z = 0 and A = 1. Currently, no other PoPs id's are supported. + * + * @param a_id [in] The PoPs id of the particle. + ***********************************************************************************************************/ + +ParseIdInfo::ParseIdInfo( std::string const &a_id ) : + m_isSupported( false ), + m_id( a_id ), + m_isNuclear( false ), + m_isNucleus( false ), + m_isChemicalElement( false ), + m_isAnti( false ), + m_isMetaStable( false ), + m_symbol( "" ), + m_Z( 0 ), + m_A( 0 ), + m_index( 0 ), + m_qualifier( "" ) { + + std::string a_anti; + + std::string baseId = baseAntiQualifierFromID( a_id, a_anti, &m_qualifier ); + m_isAnti = IDs::anti == a_anti; + + if( supportedNucleusAliases.find( baseId ) != supportedNucleusAliases.end( ) ) { + baseId = supportedNucleusAliases[baseId]; } + else if( baseId == IDs::proton ) { + baseId = protonFakeAlias; + } + + if( baseId == "n" ) { + m_A = 1; + m_isSupported = true; + return; + } + + std::vector parts; + if( baseId.find( "_m" ) != std::string::npos ) { + m_isMetaStable = true; + parts = LUPI::Misc::splitString( baseId, "_m" ); } + else { + parts = LUPI::Misc::splitString( baseId, "_e" ); + } + +// Now look for something of the form "SA(_[em]N)" in parts[0] where S is symbol, A is atomic number and "_[em]N" is options nulcear level or +// meta-stable specifier. If no match is found, assume a_id does not define a nuclear id. + std::string isotope = parts[0]; + std::size_t digitIndex = isotope.find_first_of( "01233456789" ); + + std::string symbol( isotope.substr( 0, digitIndex ) ); // This should be S. + std::string symbolCap; + if( symbol.size( ) > 0 ) { + char firstChar[2]; + firstChar[0] = std::toupper( symbol[0] ); + firstChar[1] = 0; + std::string firstStringChar( firstChar ); + symbolCap = firstStringChar + symbol.substr( 1 ); + } + + if( digitIndex != std::string::npos ) { + std::string AStr( isotope.substr( digitIndex ) ); // This should be A. + if( symbol.size( ) > 0 ) { + m_Z = Z_FromChemicalElementSymbol( symbolCap ); + if( m_Z > 0 ) { // We have a valid chemical element symbol. + if( ( AStr.size( ) > 0 ) && ( LUPI::Misc::stringToInt( AStr, m_A ) ) ) { + if( m_A < 0 ) { + m_A = 0; } + else { + bool isValidNuclearId = parts.size( ) == 1; + + if( parts.size( ) > 1 ) { + isValidNuclearId = ( parts.size( ) == 2 ) && LUPI::Misc::stringToInt( parts[1], m_index ); + } + + if( isValidNuclearId ) { // Should be a valid nuclear id. + m_symbol = symbolCap; + m_isNuclear = true; + m_isNucleus = symbolCap != symbol; + } + } + } + m_isSupported = true; + } + } } + else if( symbol.size( ) > 0 ) { + m_Z = Z_FromChemicalElementSymbol( symbolCap ); + if( m_Z > 0 ) { + m_symbol = symbolCap; + m_isChemicalElement = true; + m_isSupported = true; + } + } +} + +/* *********************************************************************************************************//** + * This method prints the contents of *this*. This is mainly for debugging. + * + * @param a_terse [in] If **true**, all members are printed on one line with no description. Otherwise, each member is printed on a separate line with a description. + * @param a_indent [in] The amount of indentation on each line before anything is printed. + ***********************************************************************************************************/ + +void ParseIdInfo::print( bool a_terse, std::string const &a_indent ) const { + + if( a_terse ) { + std::cout << a_indent << m_id + << boolToString( m_isSupported, " " ).c_str( ) + << boolToString( m_isNuclear, " " ).c_str( ) + << boolToString( m_isNucleus, " " ).c_str( ) + << boolToString( m_isChemicalElement, " " ).c_str( ) + << boolToString( m_isAnti, " " ).c_str( ) + << boolToString( m_isMetaStable, " " ).c_str( ) + << LUPI::Misc::argumentsToString( " %s", m_symbol.c_str( ) ) + << LUPI::Misc::argumentsToString( " %d", m_Z ) + << LUPI::Misc::argumentsToString( " %d", m_A ) + << LUPI::Misc::argumentsToString( " %d", m_index ) + << LUPI::Misc::argumentsToString( " %s", m_qualifier.c_str( ) ) + << std::endl; } + else { + std::cout << a_indent << "id = " << m_id << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isSupported = %s", boolToString( m_isSupported, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isNuclear = %s", boolToString( m_isNuclear, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isNucleus = %s", boolToString( m_isNucleus, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isChemicalElement = %s", boolToString( m_isChemicalElement, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isAnti = %s", boolToString( m_isAnti, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " isMetaStable = %s", boolToString( m_isMetaStable, "" ).c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " symbol = <%s>", m_symbol.c_str( ) ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " Z = %d", m_Z ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " A = %d", m_A ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " index = %d", m_index ) << std::endl; + std::cout << a_indent << LUPI::Misc::argumentsToString( " qualifier = <%s>", m_qualifier.c_str( ) ) << std::endl; + } +} + +/* *********************************************************************************************************//** + * This method returns a string representation of *a_value*. + * + * @param a_value [in] If **true**, all members are printed on one line with no description. Otherwise, each member is printed on a separate line w + * @param a_prefix [in] The amount of indentation on each line before anything is printed. + * + * @return The string representation of *a_value*. + ***********************************************************************************************************/ + +std::string ParseIdInfo::boolToString( bool a_value, std::string const &a_prefix ) const { + + std::string boolString( a_prefix ); + + if( a_value ) { + boolString += "true"; } + else { + boolString += "false"; + } + + return( boolString ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_database.cc b/source/processes/hadronic/models/lend/src/PoPI_database.cc new file mode 100644 index 0000000000..7fc3396775 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_database.cc @@ -0,0 +1,682 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "PoPI.hpp" + +#define PoPI_gaugeBosonsChars "gaugeBosons" +#define PoPI_leptonsChars "leptons" +#define PoPI_baryonsChars "baryons" +#define PoPI_unorthodoxesChars "unorthodoxes" +#define PoPI_chemicalElementsChars "chemicalElements" + +#define MsgSize (8 * 1024) +#ifdef _WIN32 +#define __func__ __FUNCTION__ +#endif + +namespace PoPI { + +static void parseAliases( HAPI::Node const &a_node, Database *a_DB ); + +/*! \class Database + * The main class for storing **PoPs** data. + */ + +/* *********************************************************************************************************//** + * Database constructor for an initial empty **PoPs** database. + ***********************************************************************************************************/ + +Database::Database( ) : + m_gaugeBosons( PoPI_gaugeBosonsChars ), + m_leptons( PoPI_leptonsChars ), + m_baryons( PoPI_baryonsChars ), + m_chemicalElements( PoPI_chemicalElementsChars ), + m_unorthodoxes( PoPI_unorthodoxesChars ) { + +} + +/* *********************************************************************************************************//** + * Database constructor for a **PoPs** database with data read from the file *a_fileName*. + * + * @param a_fileName [in] The **PoPs** file to read in. + ***********************************************************************************************************/ + +Database::Database( std::string const &a_fileName ) : + m_gaugeBosons( PoPI_gaugeBosonsChars ), + m_leptons( PoPI_leptonsChars ), + m_baryons( PoPI_baryonsChars ), + m_chemicalElements( PoPI_chemicalElementsChars ), + m_unorthodoxes( PoPI_unorthodoxesChars ) { + + addFile( a_fileName, false ); +} + +/* *********************************************************************************************************//** + * Database constructor for a **PoPs** database with data read from a **HAPI::Node** instance. This method is mainly + * for internal use. + * + * @param a_database [in] A **HAPI::Node** instance containing the data to parse. + ***********************************************************************************************************/ + +Database::Database( HAPI::Node const &a_database ) : + m_gaugeBosons( PoPI_gaugeBosonsChars ), + m_leptons( PoPI_leptonsChars ), + m_baryons( PoPI_baryonsChars ), + m_chemicalElements( PoPI_chemicalElementsChars ), + m_unorthodoxes( PoPI_unorthodoxesChars ) { + + addDatabase( a_database, false ); +} + +/* *********************************************************************************************************//** + * Adds the contents of the file *a_fileName* to *this*. + * + * @param a_fileName [in] The **PoPs** file to get data from. + * @param a_warnIfDuplicate [in] This argument is currently not used. + ***********************************************************************************************************/ + +void Database::addFile( std::string const &a_fileName, bool a_warnIfDuplicate ) { + + addFile( a_fileName.c_str( ), a_warnIfDuplicate ); +} + +/* *********************************************************************************************************//** + * Adds the contents of the file *a_fileName* to *this*. + * + * @param a_fileName [in] The **PoPs** file to get data from. + * @param a_warnIfDuplicate [in] This argument is currently not used. + ***********************************************************************************************************/ + +void Database::addFile( char const *a_fileName, bool a_warnIfDuplicate ) { + + HAPI::File *doc = new HAPI::PugiXMLFile( a_fileName, "Database::addFile" ); + HAPI::Node database = doc->first_child( ); + addDatabase( database, a_warnIfDuplicate ); + delete doc; +} + +/* *********************************************************************************************************//** + * Adds the contents of the *a_string* to *this*. *a_string* must be an XML string + * starting with an **PoPs** XML node (i.e., element). + * + * @param a_string [in] A *std::string* instance of **PoPs** data in an XML format. + * @param a_warnIfDuplicate [in] This argument is currently not used. + ***********************************************************************************************************/ + +void Database::addDatabase( std::string const &a_string, bool a_warnIfDuplicate ) { + + // a_string must contain a complete & well-formed XML document + pugi::xml_document doc; + + pugi::xml_parse_result result = doc.load_string( a_string.c_str( ) ); + if( result.status != pugi::status_ok ) { + char Msg[MsgSize+1]; + + snprintf( Msg, MsgSize, "ERROR: in file '%s' in method '%s': %s.", __FILE__, __func__, result.description( ) ); + throw Exception( Msg ); + } + + HAPI::PugiXMLNode *database_internal = new HAPI::PugiXMLNode(doc.first_child( )); + HAPI::Node database(database_internal); + addDatabase( database, a_warnIfDuplicate ); +} + +/* *********************************************************************************************************//** + * Adds the contents of *a_database* to *this*. The top node of *a_database* must be a valid **PoPs** node. + * + * @param a_database [in] The **HAPI::Node** node to be added to *this*. + * @param a_warnIfDuplicate [in] This argument is currently not used. + ***********************************************************************************************************/ + +void Database::addDatabase( HAPI::Node const &a_database, LUPI_maybeUnused bool a_warnIfDuplicate ) { + + if( a_database.name( ) != PoPI_PoPsChars ) throw Exception( "Node '" + a_database.name( ) + "' is not a 'PoPs' node." ); + + LUPI::FormatVersion formatVersion( a_database.attribute( PoPI_formatChars ).value( ) ); + if( !supportedFormat( formatVersion ) ) throw Exception( "Invalid format '" + formatVersion.format( ) + " in file " + a_database.name( ) + "." ); + if( m_formatVersion.format( ) == "" ) m_formatVersion = formatVersion; + + if( m_name == "" ) m_name = a_database.attribute( PoPI_nameChars ).value( ); + if( m_version == "" ) m_version = a_database.attribute( PoPI_versionChars ).value( ); + + for( HAPI::Node child = a_database.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string s_name( child.name( ) ); + + if( s_name == PoPI_gaugeBosonsChars ) { + m_gaugeBosons.appendFromParentNode( child, this, this ); } + else if( s_name == PoPI_leptonsChars ) { + m_leptons.appendFromParentNode( child, this, this ); } + else if( s_name == PoPI_baryonsChars ) { + m_baryons.appendFromParentNode( child, this, this ); } + else if( s_name == PoPI_chemicalElementsChars ) { + m_chemicalElements.appendFromParentNode( child, this, this ); } + else if( s_name == PoPI_unorthodoxesChars ) { + m_unorthodoxes.appendFromParentNode( child, this, this ); } + else if( s_name == PoPI_aliasesChars ) { + parseAliases( child, this ); } + else { + } + } + + std::vector unresolvedAliases2; + for( std::vector::iterator iter = m_unresolvedAliases.begin( ); iter != m_unresolvedAliases.end( ); ++iter ) { + std::map::const_iterator pidIter = m_idsMap.find( (*iter)->pid( ) ); // Locate pid. + + if( pidIter == m_idsMap.end( ) ) { + unresolvedAliases2.push_back( *iter ); } + else { + (*iter)->setPidIndex( pidIter->second ); + } + } + m_unresolvedAliases.clear( ); + for( auto iter = unresolvedAliases2.begin( ); iter != unresolvedAliases2.end( ); ++iter ) { + m_unresolvedAliases.push_back( *iter ); + } +} + +/* *********************************************************************************************************//** + * For internal use only. This method parses a **PoPs** *aliases* node. + * + * @param a_node [in] The **HAPI::Node** node to be parsed. + * @param a_DB [in] The **PoPI::Database** to add the alias data to. + ***********************************************************************************************************/ + +static void parseAliases( HAPI::Node const &a_node, Database *a_DB ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name = child.name( ); + Alias *alias = nullptr; + + if( name == PoPI_aliasChars ) { + alias = new Alias( child, a_DB ); } + else if( name == PoPI_metaStableChars ) { + alias = new MetaStable( child, a_DB ); } + else if( name == PoPI_particleChars ) { // Needed for GNDS 1.10. + alias = new Alias( child, a_DB ); } + else { + throw Exception( "Node '" + name + "' not supported as a child node of PoPs/aliases." ); + } + a_DB->addAlias( alias ); + } +} + +/* *********************************************************************************************************//** + * Destructor for a **PoPI::Database** instance. + ***********************************************************************************************************/ + +Database::~Database( ) { + + for( std::vector::iterator iter = m_aliases.begin( ); iter != m_aliases.end( ); ++iter ) delete *iter; +} + +/* *********************************************************************************************************//** + * This method returns the list of ids for the aliases with unresolved pids. + * + * @return A std::vector of the ids of the aliases with unresolved pids. + ***********************************************************************************************************/ + +std::vector Database::unresolvedAliasIds( ) const { + + std::vector ids; + + for( std::vector::const_iterator iter = m_unresolvedAliases.begin( ); iter != m_unresolvedAliases.end( ); ++iter ) { + ids.push_back( (*iter)->ID( ) ); + } + + return( ids ); +} + +/* *********************************************************************************************************//** + * Internally, **PoPI::Database** stores a unique integer (called an index) for each particle in *this*. This method returns the + * the index for the specified particle. + * + * @param a_id [in] The **PoPs** id for the specified particle. + * + * @return The internal index for the specified particle. + ***********************************************************************************************************/ + +int Database::operator[]( std::string const &a_id ) const { + + std::map::const_iterator iter = m_idsMap.find( a_id ); + if( iter == m_idsMap.end( ) ) { + std::string errorMessage( "particle '" + a_id + "' not in database -3." ); + throw Exception( errorMessage ); + } + + return( iter->second ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the specified index is value and **false** otherwise. This is, if a particle exists within + * *this* with index *a_index*. + * + * @param a_index [in] A particle index to test. + * + * @return **true** is the specified index is valid and **false** otherwise. + ***********************************************************************************************************/ + +bool Database::exists( int a_index ) const { + + if( ( a_index < 0 ) || ( a_index >= (int) m_list.size( ) ) ) return( false ); + return( true ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the specified id exists within *this* and **false** otherwise. + * + * @param a_id [in] A particle id to test. + * + * @return **true** is the specified id exists in *this* and **false** otherwise. + ***********************************************************************************************************/ + +bool Database::exists( std::string const &a_id ) const { + + std::map::const_iterator iter = m_idsMap.find( a_id ); + return( iter != m_idsMap.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns **true** if the specified intid exists within *this* and **false** otherwise. + * + * @param a_intid [in] A particle's intidd to test. + * + * @return **true** is the specified intid exists in *this* and **false** otherwise. + ***********************************************************************************************************/ + +bool Database::existsIntid( int a_intid ) const { + + return( m_intidsMap.find( a_intid ) != m_intidsMap.end( ) ); +} + +/* *********************************************************************************************************//** + * Returns a std::vector of std::string's of all aliases in *this* that resolve to *a_id*. + * + * @param a_id [in] A particle's id whose. + * + * @return Vector of alias ids. + ***********************************************************************************************************/ + +std::vector Database::aliasReferences( std::string const &a_id ) { + + std::vector ids; + + for( auto aliasIter = m_aliases.begin( ); aliasIter != m_aliases.end( ); ++aliasIter ) { + if( final( (*aliasIter)->pid( ) ) == a_id ) ids.push_back( (*aliasIter)->ID( ) ); + } + + return( ids ); +} + +/* *********************************************************************************************************//** + * This method resolves aliases to return an actual particle specified by *a_id*. That is, if *a_id* is an alias, + * then its referenced particle is returned. However, if *a_returnAtMetaStableAlias* is **true** and a meta-stable + * is found while resolving *a_id*, then the meta-stable id will be returned. + * + * @param a_id [in] A particle's id whose resolved particle id is requested. + * @param a_returnAtMetaStableAlias [in] If **true**, the resolving will stop if a meta-stable is found. + * + * @return The revolved id for *a_id*. + ***********************************************************************************************************/ + +std::string Database::final( std::string const &a_id, bool a_returnAtMetaStableAlias ) const { + + int index( final( (*this)[a_id], a_returnAtMetaStableAlias ) ); + + return( m_list[index]->ID( ) ); +} + +/* *********************************************************************************************************//** + * This method resolves aliases to return an actual particle specified by *a_index*. That is, if *a_index* is an alias, + * then its referenced particle is returned. However, if *a_returnAtMetaStableAlias* is **true** and a meta-stable + * is found while resolving *a_index*, the then meta-stable index will be returned. + * + * @param a_index [in] A particle's index whose resolved particle index is requested. + * @param a_returnAtMetaStableAlias [in] If **true**, the resolving will stop if a meta-stable is found. + * + * @return The revolved index for *a_index*. + ***********************************************************************************************************/ + +int Database::final( int a_index, bool a_returnAtMetaStableAlias ) const { + + while( isAlias( a_index ) ) { + if( a_returnAtMetaStableAlias && isMetaStableAlias( a_index ) ) break; + a_index = ((Alias *) m_list[a_index])->pidIndex( ); + } + return( a_index ); +} + +/* *********************************************************************************************************//** + * This method returns the chemical element symbol for *a_id* if it is a PoPs id for a chemicalElement, isotope, nuclide, + * or nucleus object. Otherwise, it returns an empty string. The PoPs id *a_id* must be in *this*. + * + * @param a_id [in] A particle's id whose chemical element symbol is requested. + * + * @return The string for the chemical element symbol. + ***********************************************************************************************************/ + +std::string Database::chemicalElementSymbol( std::string const &a_id ) const { + + std::string symbol1; + Base const *base = nullptr; + + std::map::const_iterator iter = m_idsMap.find( a_id ); + if( iter != m_idsMap.end( ) ) { + std::string finalId = final( a_id ); + iter = m_idsMap.find( finalId ); + base = m_list[iter->second]; } + else { + std::map::const_iterator iter2 = m_symbolMap.find( a_id ); + if( iter2 != m_symbolMap.end( ) ) base = m_symbolList[iter2->second]; + } + + if( base != nullptr ) { + if( base->isNucleus( ) ) base = static_cast( base )->nuclide( ); + if( base->isNuclide( ) ) base = static_cast( base )->isotope( ); + if( base->isIsotope( ) ) base = static_cast( base )->chemicalElement( ); + if( base->isChemicalElement( ) ) symbol1 = base->ID( ); + } + + return( symbol1 ); +} + +/* *********************************************************************************************************//** + * This method returns the isotope symbol for *a_id* if it is a PoPs id for an isotope, nuclide, + * or nucleus object. Otherwise, it returns an empty string. The PoPs id *a_id* must be in *this*. + * + * @param a_id [in] A particle's id whose isotope symbol is requested. + * + * @return The string for the isopte symbol. + ***********************************************************************************************************/ + +std::string Database::isotopeSymbol( std::string const &a_id ) const { + + std::string symbol1; + Base const *base = nullptr; + + std::map::const_iterator iter = m_idsMap.find( a_id ); + if( iter != m_idsMap.end( ) ) { + std::string finalId = final( a_id ); + iter = m_idsMap.find( finalId ); + base = m_list[iter->second]; } + else { + std::map::const_iterator iter2 = m_symbolMap.find( a_id ); + if( iter2 != m_symbolMap.end( ) ) base = m_symbolList[iter2->second]; + } + + if( base != nullptr ) { + if( base->isNucleus( ) ) base = static_cast( base )->nuclide( ); + if( base->isNuclide( ) ) base = static_cast( base )->isotope( ); + if( base->isIsotope( ) ) symbol1 = base->ID( ); + } + + return( symbol1 ); +} + +/* *********************************************************************************************************//** + * Returns the intid for particle *a_id* or -1 if *a_id* is not in *this*. + * + * @param a_id [in] A particle's id whose intid is requested. + * + * @return The intid for *a_id* or -1 if *a_id* not in *this*. + ***********************************************************************************************************/ + +int Database::intid( std::string const &a_id ) const { + + int intid2 = -1; + + if( exists( a_id ) ) { + Base const &base = get( a_id ); + intid2 = base.intid( ); + } + + return( intid2 ); +} + +/* *********************************************************************************************************//** + * Returns the intid for particle with index *a_index* or -1 if *a_index* is not in *this*. + * + * @param a_index [in] A particle's index whose index is requested. + * + * @return The intid for *a_index* or -1 if *a_index* not in *this*. + ***********************************************************************************************************/ + +int Database::intid( int a_index ) const { + + int intid2 = -1; + + if( exists( a_index ) ) { + Base const &base = get( a_index ); + + if( base.isParticle( ) ) { + IDBase const &idBase = static_cast( base ); + intid2 = idBase.intid( ); + } + } + + return( intid2 ); +} + +/* *********************************************************************************************************//** + * Returns the index for particle with intid *a_intid* or -1 if *a_intid* is not in *this*. + * + * @param a_index [in] A particle's index whose index is requested. + * + * @return The intid for *a_index* or -1 if *a_index* not in *this*. + ***********************************************************************************************************/ + +int Database::indexFromIntid( int a_intid ) const { + + int index2 = -1; + + auto iter = m_intidsMap.find( a_intid ); + if( iter != m_intidsMap.end( ) ) { + index2 = iter->second; + } + + return( index2 ); +} + +/* *********************************************************************************************************//** + * This method adds a **PoPI::Base** instance to *this* and returns the unique index for it. + * + * @param a_item [in] The **PoPI::Base** instance to add to *this*. + * + * @return The index for the added **PoPI::Base** instance. + ***********************************************************************************************************/ + +int Database::add( Base *a_item ) { + + int index = (int) m_list.size( ); + + m_idsMap[a_item->ID( )] = index; + m_list.push_back( a_item ); + a_item->setIndex( index ); + + if( a_item->intid( ) > 0 ) m_intidsMap[a_item->intid( )] = index; + + if( a_item->isAlias( ) ) m_unresolvedAliases.push_back( (Alias *) a_item ); + return( index ); +} + +/* *********************************************************************************************************//** + * This method adds a **PoPI::SymbolBase** instance to *this* and returns the unique index for it. + * + * @param a_item [in] The **PoPI::SymbolBase** instance to add to *this*. + * + * @return The index for the added **PoPI::SymbolBase** instance. + ***********************************************************************************************************/ + + +int Database::addSymbol( SymbolBase *a_item ) { + + if( a_item->Class( ) == Particle_class::chemicalElement ) return( this->add( a_item ) ); + + int index = (int) m_symbolList.size( ); + + m_symbolMap[a_item->symbol( )] = index; + m_symbolList.push_back( a_item ); + a_item->setIndex( index ); + + return( index ); +} + +/* *********************************************************************************************************//** + * This method calculates nuclide gamma branching infomation and adds it to *a_nuclideGammaBranchStateInfos*. + * + * @param a_nuclideGammaBranchStateInfos [in] The **NuclideGammaBranchStateInfos** instance to added nuclide gamma branching infomation to. + * @param a_pops2 A second PoPs used for storing GRIN added particles. + * @param a_extraGammaBranchStates Any additional nuclide needed by GRIN. Currently, one the capture residual. + ***********************************************************************************************************/ + +void Database::calculateNuclideGammaBranchStateInfos( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos, Database const *a_pops2, + std::vector a_extraGammaBranchStates ) const { + + + calculateNuclideGammaBranchStateInfos2( a_nuclideGammaBranchStateInfos ); + if( a_pops2 != nullptr ) { + a_pops2->calculateNuclideGammaBranchStateInfos2( a_nuclideGammaBranchStateInfos ); + for( auto iter = a_extraGammaBranchStates.begin( ); iter != a_extraGammaBranchStates.end( ); ++iter ) { + PoPI::Nuclide const &nuclide = a_pops2->get( *iter ); + nuclide.calculateNuclideGammaBranchStateInfos( *a_pops2, a_nuclideGammaBranchStateInfos, true ); + } + } + + std::vector &nuclideGammaBranchStateInfos = a_nuclideGammaBranchStateInfos.nuclideGammaBranchStateInfos( ); + for( std::size_t i1 = 0; i1 < nuclideGammaBranchStateInfos.size( ); ++i1 ) { + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = nuclideGammaBranchStateInfos[i1]; + + nuclideGammaBranchStateInfo->calculateDerivedData( a_nuclideGammaBranchStateInfos ); + } +} + +/* *********************************************************************************************************//** + * This method calculates nuclide gamma branching infomation and adds it to *a_nuclideGammaBranchStateInfos*. + * + * @param a_nuclideGammaBranchStateInfos [in] The **NuclideGammaBranchStateInfos** instance to added nuclide gamma branching infomation to. + ***********************************************************************************************************/ + +void Database::calculateNuclideGammaBranchStateInfos2( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const { + + for( std::size_t i1 = 0; i1 < m_chemicalElements.size( ); ++i1 ) { + ChemicalElement const &chemicalElement = m_chemicalElements[i1]; + + chemicalElement.calculateNuclideGammaBranchStateInfos( *this, a_nuclideGammaBranchStateInfos ); + } +} + +/* *********************************************************************************************************//** + * This method returns the mass of the particle/alias with id *a_id*. + * Currently, *a_unit* is ignored and the mass is returned in unit of amu. + * + * @param a_id [in] The PoPs id of the particle/alias.file to write *this* to. + * @param a_unit [in] The unit of the returned mass. + ***********************************************************************************************************/ + +double Database::massValue( std::string const &a_id, std::string const &a_unit ) const { + + Particle const &particle2 = particle( final( a_id ) ); + + return( particle2.massValue( a_unit ) ); +} + +/* *********************************************************************************************************//** + * Writes an **XML** version of *this* to the file *a_fileName*. + * + * @param a_fileName [in] The file to write *this* to. + ***********************************************************************************************************/ + +void Database::saveAs( std::string const &a_fileName ) const { + + std::string indent1( "" ); + std::vector XMLList; + + XMLList.push_back( "" ); + toXMLList( XMLList, indent1 ); + + std::ofstream fileio; + fileio.open( a_fileName.c_str( ) ); + for( std::vector::iterator iter = XMLList.begin( ); iter != XMLList.end( ); ++iter ) { + fileio << *iter << std::endl; + } + fileio.close( ); +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Database::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string indent2 = a_indent1 + " "; + std::string indent3 = indent2 + " "; + + std::string header1 = a_indent1 + ""; + a_XMLList.push_back( header1 ); + + if( m_aliases.size( ) > 0 ) { + std::string header2 = indent2 + "<" + PoPI_aliasesChars + ">"; + a_XMLList.push_back( header2 ); + for( std::vector::const_iterator iter = m_aliases.begin( ); iter != m_aliases.end( ); ++iter ) + (*iter)->toXMLList( a_XMLList, indent3 ); + appendXMLEnd( a_XMLList, PoPI_aliasesChars ); + } + m_gaugeBosons.toXMLList( a_XMLList, indent2 ); + m_leptons.toXMLList( a_XMLList, indent2 ); + m_baryons.toXMLList( a_XMLList, indent2 ); + m_unorthodoxes.toXMLList( a_XMLList, indent2 ); + m_chemicalElements.toXMLList( a_XMLList, indent2 ); + + appendXMLEnd( a_XMLList, PoPI_PoPsChars ); +} + +/* *********************************************************************************************************//** + * Prints a brief outline of the contents of *this*. + * + * @param a_printIndices [in] If **true**, each particles index is also printed. + ***********************************************************************************************************/ + +void Database::print( bool a_printIndices ) { + + for( std::map::const_iterator iter = m_idsMap.begin( ); iter != m_idsMap.end( ); ++iter ) { + std::string label( iter->first ); + int index = iter->second; + Base *item = m_list[index]; + std::string is_alias( "" ); + std::string mass( "" ); + + if( item->isAlias( ) ) { + is_alias = " is an alias (final is label = '"; + int finalIndex = final( index ); + IDBase const &myfinal = get( finalIndex ); + is_alias += std::string( myfinal.ID( ) ); + is_alias += std::string( "')" ); } + else if( item->isParticle( ) ) { + Particle *particle = (Particle *) item; + + try { + double dmass = particle->massValue( "amu" ); + mass = LUPI::Misc::argumentsToString( " mass = %e amu", dmass ); } + catch (...) { + mass = " particle has no mass data."; + } + } + + std::cout << iter->first << " (" << item->ID( ) << ") --> "; + if( a_printIndices ) std::cout << index << " (" << item->index( ) << ")"; + std::cout << is_alias << mass << std::endl; + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_decayData.cc b/source/processes/hadronic/models/lend/src/PoPI_decayData.cc new file mode 100644 index 0000000000..8e8412827a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_decayData.cc @@ -0,0 +1,288 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_decayModesChars "decayModes" +#define PoPI_decayModeChars "decayMode" +#define PoPI_decayPathChars "decayPath" +#define PoPI_decayChars "decay" +#define PoPI_productsChars "products" +#define PoPI_photonEmissionProbabilitiesChars "photonEmissionProbabilities" + +#define PoPI_typeChars "type" +#define PoPI_modeChars "mode" +#define PoPI_completeChars "complete" +#define PoPI_probabilityChars "probability" + +/* +============================================================ +======================== DecayData ========================= +============================================================ +*/ +DecayData::DecayData( HAPI::Node const &a_node ) : + m_decayModes( PoPI_decayModesChars ) { + + m_decayModes.appendFromParentNode2( a_node.child( PoPI_decayModesChars ), this ); +} +/* +========================================================= +*/ +DecayData::~DecayData( ) { + +} +/* +========================================================= +*/ +void DecayData::calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo ) const { + + for( std::size_t i1 = 0; i1 < m_decayModes.size( ); ++i1 ) { + DecayMode const &decayMode = m_decayModes[i1]; + + decayMode.calculateNuclideGammaBranchStateInfo( a_pops, a_nuclideGammaBranchStateInfo ); + } +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void DecayData::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string::size_type size = m_decayModes.size( ); + + if( size == 0 ) return; + + std::string header = a_indent1 + "<" + PoPI_decayDataChars + ">"; + a_XMLList.push_back( header ); + + if( size > 0 ) { + std::string indent2 = a_indent1 + " "; + m_decayModes.toXMLList( a_XMLList, indent2 ); + } + + appendXMLEnd( a_XMLList, PoPI_decayDataChars ); +} + +/* +============================================================ +======================== DecayMode ========================= +============================================================ +*/ +DecayMode::DecayMode( HAPI::Node const &a_node, LUPI_maybeUnused DecayData const *a_decayData ) : + m_label( a_node.attribute( PoPI_labelChars ).value( ) ), + m_mode( a_node.attribute( PoPI_modeChars ).value( ) ), + m_probability( a_node.child( PoPI_probabilityChars ) ), + m_photonEmissionProbabilities( a_node.child( PoPI_photonEmissionProbabilitiesChars ) ), + m_decayPath( PoPI_decayPathChars ) { + + m_decayPath.appendFromParentNode2( a_node.child( PoPI_decayPathChars ), this ); +} +/* +============================================================ +*/ +DecayMode::~DecayMode( ) { + +} + +/* +============================================================ +*/ +void DecayMode::calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo ) const { + + if( m_mode == PoPI_decayModeElectroMagnetic ) { + double _probability = getPhysicalQuantityOfSuiteAsDouble( probability( ) ); + double _photonEmissionProbabilities = getPhysicalQuantityOfSuiteAsDouble( photonEmissionProbabilities( ), true, 1.0 ); + + std::string residualState( "" ); + Decay const &decay = m_decayPath[0]; + Suite const &products = decay.products( ); + for( std::size_t i1 = 0; i1 < products.size( ); ++i1 ) { + Product const &product = products[i1]; + + if( product.pid( ) != IDs::photon ) residualState = product.pid( ); + } + + Particle const &initialState = a_pops.get( a_nuclideGammaBranchStateInfo.state( ) ); + Particle const &finalState = a_pops.get( residualState ); + double gammaEnergy = PoPI_AMU2MeV_c2 * ( initialState.massValue( "amu" ) - finalState.massValue( "amu" ) ); + + NuclideGammaBranchInfo nuclideGammaBranchInfo( _probability, _photonEmissionProbabilities, gammaEnergy, residualState ); + a_nuclideGammaBranchStateInfo.add( nuclideGammaBranchInfo ); + } +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void DecayMode::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); + + std::string indent2 = a_indent1 + " "; + m_probability.toXMLList( a_XMLList, indent2 ); + m_decayPath.toXMLList( a_XMLList, indent2 ); + + appendXMLEnd( a_XMLList, PoPI_decayModeChars ); +} + +/* +============================================================ +========================== Decay =========================== +============================================================ +*/ + +Decay::Decay( HAPI::Node const &a_node, LUPI_maybeUnused DecayMode const *a_decayMode ) : + m_index( a_node.attribute( PoPI_indexChars ).as_int( ) ), + m_mode( a_node.attribute( PoPI_modeChars ).value( ) ), + m_complete( a_node.attribute( PoPI_completeChars ).value( ) == "true" ), + m_products( PoPI_productsChars ) { + + if( a_node.attribute( PoPI_typeChars ).value( ) != "" ) m_mode = a_node.attribute( PoPI_typeChars ).value( ); + + m_products.appendFromParentNode2( a_node.child( PoPI_productsChars ), this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Decay::~Decay( ) { + +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Decay::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string indexString( std::to_string( m_index ) ); + + std::string header = a_indent1 + " &a_XMLList, std::string const &a_indent1 ) const { + + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); +} + +/*! \class GammaDecayData + * This class stores, in a crude way, the GRIN, non-GNDS 2.0 compliant, nuclide gamma decay data. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The HAPI node to parse. + ***********************************************************************************************************/ + +GammaDecayData::GammaDecayData( HAPI::Node const &a_node ) : + m_kind( a_node.attribute_as_string( "kind" ) ), + m_rows( 0 ), + m_columns( 0 ) { + + if( m_kind == "" ) m_kind = PoPI_discreteChars; + + if( !a_node.empty( ) ) { + HAPI::Node table = a_node.child( "table" ); + m_rows = table.attribute_as_int( "rows" ); + m_columns = table.attribute_as_int( "columns" ); + + HAPI::Node data = table.child( "data" ); + + std::string text = LUPI::Misc::stripString( data.text( ).get( ) ); + auto cells = LUPI::Misc::splitString( text, ' ', true ); + + m_ids.reserve( m_rows ); + m_probabilities.reserve( m_rows ); + m_photonEmissionProbabilities.reserve( m_rows ); + for( std::size_t cellIndex = 0; cellIndex < cells.size( ); cellIndex += 3 ) { + m_ids.push_back( cells[cellIndex] ); + m_probabilities.push_back( std::stod( cells[cellIndex+1] ) ); + m_photonEmissionProbabilities.push_back( std::stod( cells[cellIndex+2] ) ); + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +GammaDecayData::~GammaDecayData( ) { + +} + +/* +============================================================ +*/ +void GammaDecayData::calculateNuclideGammaBranchStateInfo( PoPI::Database const &a_pops, NuclideGammaBranchStateInfo &a_nuclideGammaBranchStateInfo ) const { + + Particle const &initialState = a_pops.get( a_nuclideGammaBranchStateInfo.state( ) ); + double initialStateMass = initialState.massValue( "amu" ); + + for( int index = 0; index < m_rows; ++index ) { + std::string residualState( m_ids[index] ); + double _probability = m_probabilities[index]; + double _photonEmissionProbabilities = m_photonEmissionProbabilities[index]; + + Particle const &finalState = a_pops.get( residualState ); + double gammaEnergy = PoPI_AMU2MeV_c2 * ( initialStateMass - finalState.massValue( "amu" ) ); + + NuclideGammaBranchInfo nuclideGammaBranchInfo( _probability, _photonEmissionProbabilities, gammaEnergy, residualState ); + a_nuclideGammaBranchStateInfo.add( nuclideGammaBranchInfo ); + } +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_gaugeBoson.cc b/source/processes/hadronic/models/lend/src/PoPI_gaugeBoson.cc new file mode 100644 index 0000000000..a67914acd7 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_gaugeBoson.cc @@ -0,0 +1,41 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class GaugeBoson + * This class represents **PoPs** gaugeBoson instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** gaugeBoson node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **GaugeBoson** to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +GaugeBoson::GaugeBoson( HAPI::Node const &a_node, Database *a_DB, LUPI_maybeUnused Database *a_parent ) : + Particle( a_node, Particle_class::gaugeBoson, PoPI_gaugeBosonChars ) { + + if( ID( ) == IDs::photon ) setIntid( intidHelper( isAnti( ), Particle_class::gaugeBoson, 0 ) ); + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +GaugeBoson::~GaugeBoson( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_intId.cc b/source/processes/hadronic/models/lend/src/PoPI_intId.cc new file mode 100644 index 0000000000..2af935697a --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_intId.cc @@ -0,0 +1,196 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +namespace PoPI { + +/* *********************************************************************************************************//** + * Returns an integer representing the particle's famuly *a_family*. + * + * @param a_isAnti [in] If **true** particle is an anti-particle and otherwise its a particle. + ***********************************************************************************************************/ + +int family2Integer( Particle_class a_family ) { + + if( a_family == Particle_class::nucleus ) return( -1 ); + if( a_family == Particle_class::nuclide ) return( -2 ); + if( a_family == Particle_class::gaugeBoson ) return( 0 ); + if( a_family == Particle_class::lepton ) return( 1 ); + if( a_family == Particle_class::baryon ) return( 2 ); + if( a_family == Particle_class::nuclideMetaStable ) return( 50 ); + if( a_family == Particle_class::nucleusMetaStable ) return( 60 ); + if( a_family == Particle_class::ENDL_fissionProduct ) return( 99 ); + + return( -3 ); +} + +/* *********************************************************************************************************//** + * This function is for internal use. + * Returns the intid for the particle of family *a_family* with family indentifier *a_SSSSSSS*. If the return value is -1 + * the family is not supported by this function. + * + * @param a_isAnti [in] If **true** particle is an anti-particle and otherwise its a particle. + * @param a_family [in] The particle's family. + * @param a_SSSSSSS [in] The particle's indentifier within its family. + * + * @return The intid for the particle. + ***********************************************************************************************************/ + +int intidHelper( bool a_isAnti, Particle_class a_family, int a_SSSSSSS ) { + + int sign = a_isAnti ? -1 : 1; + + int intid = family2Integer( a_family ); + if( intid < 0 ) return( -1 ); + intid += 100; + intid *= 10000000; + + return( sign * ( intid + a_SSSSSSS ) ); +} + +/*! \class ParseIntidInfo + * This class represents **PoPs** nucleus instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses *a_intid* into its components and sets members per *a_intid*. If *m_III*, *m_ZZZ*, *m_AAA* and + * *m_metaStableIndex* are positive (greater than or equal to 0), then the particle is a nuclear particle and + * *m_isNuclear* is *true*, otherwise the particle is not a nuclear particle and *m_isNuclear* is *false*. + * Note, even if *m_metaStableIndex* > 0 (i.e., particle is a nuclear meta-stable), *m_III* is as expected. For + * example, for intid = 481095242, *m_metaStableIndex* is 1 and *m_III* is 481. + * + * If *m_family* is **Particle_class::unknown** then all other members are undefined. + * + * @param a_intid [in] The intid for the particle to parse. + * @param a_GRIN_mode [in] For the GRIN project, nuclear levels go beyond 499, so this flag causes III >= 500 to be treated as a nuclide. + ***********************************************************************************************************/ + +ParseIntidInfo::ParseIntidInfo( int a_intid, bool a_GRIN_mode ) : + m_intid( a_intid ), + m_family( Particle_class::unknown ), + m_isAnti( a_intid < 0 ), + m_isNuclear( false ), + m_AAA( -1 ), + m_ZZZ( -1 ), + m_III( -1 ), + m_metaStableIndex( -1 ), + m_generation( -1 ), + m_isNeutrino( false ), + m_baryonGroup( -1 ), + m_baryonId( -1 ), + m_familyId( -1 ) { + + int intidAbs = std::abs( a_intid ); + + bool nuclearLike = intidAbs / 1000000000 == 0; + int family = (intidAbs / 10000000) % 100; + int SSSSSSS = intidAbs % 10000000; + + if( nuclearLike ) { + m_AAA = intidAbs % 1000; + m_ZZZ = intidAbs % 1000000 / 1000; + m_III = intidAbs % 1000000000 / 1000000; + + m_nuclearLevelIndex = m_III; + if( ( m_III < 500 ) || a_GRIN_mode ) { + m_family = Particle_class::nuclide; } + else { + m_nuclearLevelIndex -= 500; + m_family = Particle_class::nucleus; + } } + else { + int topFamilyDigid = family / 10; + if( ( topFamilyDigid == 5 ) || ( topFamilyDigid == 6 ) ) { + m_family = topFamilyDigid == 5 ? Particle_class::nuclideMetaStable : Particle_class::nucleusMetaStable; + m_AAA = intidAbs % 1000; + m_ZZZ = intidAbs % 1000000 / 1000; + m_metaStableIndex = intidAbs % 100000000 / 1000000; } + else { + m_familyId = SSSSSSS; + if( family == 0 ) { + m_family = Particle_class::gaugeBoson; } + else if( family == 1 ) { + int neutronoFlag = ( SSSSSSS % 100 ) / 10; + if( neutronoFlag > 1 ) return; // Invalid particle. + + m_family = Particle_class::lepton; + m_generation = SSSSSSS % 10; + m_isNeutrino = neutronoFlag != 0; } + else if( family == 2 ) { + m_family = Particle_class::baryon; + m_baryonGroup = SSSSSSS / 1000000; + m_baryonId = SSSSSSS % 1000000; } + else if( family == 98 ) { + m_family = Particle_class::TNSL; } + else if( family == 99 ) { + m_family = Particle_class::ENDL_fissionProduct; + } + } + } +} + +/* *********************************************************************************************************//** + * Returns the GNDS PoPs id for *this*. If particles is unknown, an empty string is returned. + * + ***********************************************************************************************************/ + +std::string ParseIntidInfo::id( ) { + + std::string pid; + + if( ( m_family == Particle_class::nuclide ) || ( m_family == Particle_class::nucleus ) || ( m_family == Particle_class::nuclideMetaStable ) || + ( m_family == Particle_class::nucleusMetaStable ) ) { + bool isNucleus = ( m_family == Particle_class::nucleus ) || ( m_family == Particle_class::nucleusMetaStable ); + pid = chemicalElementInfoFromZ( m_ZZZ, true, isNucleus ); + if( pid != "" ) { + pid += LUPI::Misc::argumentsToString( "%d", m_AAA ); + + if( ( m_family == Particle_class::nuclideMetaStable ) || ( m_family == Particle_class::nucleusMetaStable ) ) { + pid += LUPI::Misc::argumentsToString( "_m%d", m_metaStableIndex ); } + else { + int III = m_III; + if( m_family == Particle_class::nucleus ) III -= 500; + if( III != 0 ) pid += LUPI::Misc::argumentsToString( "_e%d", III ); + } + } } + else if( m_family == Particle_class::gaugeBoson ) { + if( m_familyId == 0 ) pid = IDs::photon; } + else if( m_family == Particle_class::lepton ) { + if( m_generation == 0 ) { + if( !m_isNeutrino ) pid = IDs::electron; + } } + else if( m_family == Particle_class::baryon ) { + if( m_baryonGroup == 0 ) { + switch( m_baryonId ) { + case 0: + pid = IDs::neutron; + break; + case 1: + pid = IDs::proton; + break; + default: + break; + } + } } + else if( m_family == Particle_class::ENDL_fissionProduct ) { + if( m_familyId == 99120 ) { + pid = IDs::FissionProductENDL99120; } + else if( m_familyId == 99125 ) { + pid = IDs::FissionProductENDL99125; + } + } + + if( ( pid.size( ) > 0 ) && m_isAnti ) pid += IDs::anti; + + return( pid ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_isotope.cc b/source/processes/hadronic/models/lend/src/PoPI_isotope.cc new file mode 100644 index 0000000000..366eeea897 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_isotope.cc @@ -0,0 +1,107 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_A_Chars "A" +#define PoPI_isotopeChars "isotope" + +/*! \class Isotope + * This class represents **PoPs** isotope instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** isotope node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Isotope** to. + * @param a_chemicalElement [in] The parent chemical element suite that will contain *this*. + ***********************************************************************************************************/ + +Isotope::Isotope( HAPI::Node const &a_node, Database *a_DB, ChemicalElement *a_chemicalElement ) : + SymbolBase( a_node, Particle_class::isotope ), + m_chemicalElement( a_chemicalElement ), + m_Z( a_chemicalElement->Z( ) ), + m_A( a_node.attribute( PoPI_A_Chars ).as_int( ) ), + m_nuclides( PoPI_nuclidesChars ) { + + m_nuclides.appendFromParentNode( a_node.child( PoPI_nuclidesChars ), a_DB, this ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Isotope::~Isotope( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Isotope::calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) const { + + NuclideGammaBranchStateInfo *info = nullptr, *priorInfo = nullptr; + std::string energyUnit = "MeV"; // FIXME, MeV needs to be a variable. + double width = 0.0; + + for( std::size_t i1 = 0; i1 < m_nuclides.size( ); ++i1 ) { + std::size_t initialSize = a_nuclideGammaBranchStateInfos.size( ); + Nuclide const &nuclide = m_nuclides[i1]; + double levelEnergy = nuclide.levelEnergy( energyUnit ); + + nuclide.calculateNuclideGammaBranchStateInfos( a_pops, a_nuclideGammaBranchStateInfos ); + if( a_nuclideGammaBranchStateInfos.size( ) > initialSize ) { + info = a_nuclideGammaBranchStateInfos[initialSize]; + if( priorInfo != nullptr ) { + if( priorInfo->kind( ) == PoPI_continuumChars ) { + for( std::size_t i2 = i1 + 1; i2 < m_nuclides.size( ); ++i2 ) { + Nuclide const &nuclide2 = m_nuclides[i2]; + if( nuclide2.levelEnergy( energyUnit ) > levelEnergy ) { + width = nuclide2.levelEnergy( energyUnit ) - levelEnergy; + break; + } + } + priorInfo->setNuclearLevelEnergyWidth( width ); + } + } + } + + priorInfo = info; + } +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Isotope::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string::size_type size = m_nuclides.size( ); + std::string AStr = LUPI::Misc::argumentsToString( "%d", m_A ); + + std::string header = a_indent1 + ""; + a_XMLList.push_back( header ); + + std::string indent2 = a_indent1 + " "; + std::string nuclideSuite = indent2 + "<" + PoPI_nuclidesChars + ">"; + a_XMLList.push_back( nuclideSuite ); + + std::string indent3 = indent2 + " "; + for( std::string::size_type i1 = 0; i1 < size; ++i1 ) m_nuclides[i1].toXMLList( a_XMLList, indent3 ); + + appendXMLEnd( a_XMLList, PoPI_nuclidesChars ); + appendXMLEnd( a_XMLList, PoPI_isotopeChars ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_lepton.cc b/source/processes/hadronic/models/lend/src/PoPI_lepton.cc new file mode 100644 index 0000000000..85bb75350e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_lepton.cc @@ -0,0 +1,53 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_generationChars "generation" + +/*! \class Lepton + * This class represents **PoPs** lepton instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** lepton node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Lepton** to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +Lepton::Lepton( HAPI::Node const &a_node, Database *a_DB, LUPI_maybeUnused Database *a_parent ) : + Particle( a_node, Particle_class::lepton, PoPI_leptonChars ), + m_generation( a_node.attribute( PoPI_generationChars ).value( ) ) { + + if( ID( ).substr(0, 2) == IDs::electron ) setIntid( intidHelper( isAnti( ), Particle_class::lepton, 0 ) ); + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Lepton::~Lepton( ) { + +} + +/* *********************************************************************************************************//** + * Returns the generation attribute. + ***********************************************************************************************************/ + +std::string Lepton::toXMLListExtraAttributes( void ) const { + + return( std::string( " generation=\"" + m_generation + "\"" ) ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_misc.cc b/source/processes/hadronic/models/lend/src/PoPI_misc.cc new file mode 100644 index 0000000000..01d5ee67e7 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_misc.cc @@ -0,0 +1,499 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "PoPI.hpp" + +namespace PoPI { + +std::string const IDs::photon = "photon"; +std::string const IDs::electron = "e-"; +std::string const IDs::neutron = "n"; +std::string const IDs::proton = "p"; +std::string const IDs::familiarPhoton = "g"; +std::string const IDs::familiarDeuteron = "d"; +std::string const IDs::familiarTriton = "t"; +std::string const IDs::familiarHelion = "h"; +std::string const IDs::familiarAlpha = "a"; +std::string const IDs::FissionProductENDL99120 = "FissionProductENDL99120"; +std::string const IDs::FissionProductENDL99125 = "FissionProductENDL99125"; +std::string const IDs::anti = "_anti"; + +/* *********************************************************************************************************//** + * Returns true if a_formatVersion is a format supported by **PoPI** and false otherwise; + * + * @param a_formatVersion [in] The format version to check if it is supported. + * + * @return **true** if format is supported by **PoPI** and **false** otherwise. + ***********************************************************************************************************/ + +bool supportedFormat( LUPI::FormatVersion const &a_formatVersion ) { + + if( a_formatVersion.format( ) == PoPI_formatVersion_0_1_Chars ) return( true ); + + return( a_formatVersion.supported( ) ); +} + +/* *********************************************************************************************************//** + * Added the XML end tag (e.g., "") with tag name *a_label* to the last srd::string in *a_XMLList*. + * + * @param a_XMLList [in] The list whose last item is emended with an XML end tag. + * @param a_label [in] The name of the end tag. + ***********************************************************************************************************/ + +void appendXMLEnd( std::vector &a_XMLList, std::string const &a_label ) { + + std::string theEnd = ""; + std::vector::iterator iter = a_XMLList.end( ); + --iter; + *iter += theEnd; +} + +/* *********************************************************************************************************//** + * This function returns the "special particle id" for the specified particle id (*a_id*). The id returned depends + * on the *a_mode* argument. Currently, for all *a_id*'s but for those listed in the following table, * *a_id* is + * returned. For an *a_id* in the following table, find the column that contains the specfied *a_id*, the id returned + * will be the id in that column whose row matches the specified *a_mode*. + * + | a_mode | ids -> ||||| + | ------------ | ----- | ----- | ----- | ----- | ---- | + | familiar | p | d | t | h | a | + | nuclide | H1 | H2 | H3 | He3 | He4 | + | nucleus | h1 | h2 | h3 | he3 | he4 | + * + * @param a_mode [in] The mode which determines the returned id. + * @param a_id [in] The specified particle id. + * + * @return The special particle id. + ***********************************************************************************************************/ + +std::string specialParticleID( SpecialParticleID_mode a_mode, std::string const &a_id ) { + + static std::string firstChars( "pdthaH" ); + int iid = 0; + + if( a_id.size( ) > 3 ) return( a_id ); + + std::size_t index = firstChars.find( a_id[0] ); + + if( index == std::string::npos ) return( a_id ); + + if( a_id == "H" ) return( a_id ); // Special case to avoid test of id1[0] two lines later. + std::string id1( a_id ); + if( id1[0] == 'H' ) id1[0] = 'h'; + + if( id1 == IDs::proton || id1 == "h1" ) { + iid = 1; } + else if( id1 == IDs::familiarDeuteron || id1 == "h2" ) { + iid = 2; } + else if( id1 == IDs::familiarTriton || id1 == "h3" ) { + iid = 3; } + else if( id1 == IDs::familiarHelion || id1 == "he3" ) { + iid = 4; } + else if( id1 == IDs::familiarAlpha || id1 == "he4" ) { + iid = 5; + } + if( iid == 0 ) return( a_id ); + + if( a_mode == SpecialParticleID_mode::familiar ) { + return( firstChars.substr( iid-1, 1 ) ); } + else { + if( iid == 1 ) { + id1 = "h1"; } + else if( iid == 2 ) { + id1 = "h2"; } + else if( iid == 3 ) { + id1 = "h3"; } + else if( iid == 4 ) { + id1 = "he3"; } + else { + id1 = "he4"; + } + if( a_mode == SpecialParticleID_mode::nuclide ) id1[0] = 'H'; + } + return( id1 ); +} + +/* *********************************************************************************************************//** + * Compares two particle ids and returns if they are the same particle. This methods using the name returned by the function + * **specialParticleID** with the same SpecialParticleID_mode for each particle id. Ergo, "H1" is the same as "H1", "p" or "h1". + * + * @return **true** if particles are the same and **false** otherwise. + ***********************************************************************************************************/ + +bool compareSpecialParticleIDs( std::string const &a_id1, std::string const &a_id2 ) { + + return( specialParticleID( SpecialParticleID_mode::familiar, a_id1 ) == specialParticleID( SpecialParticleID_mode::familiar, a_id2 ) ); +} + +/* *********************************************************************************************************//** + * Returns the Z (i.e., the atomic number) for a nuclear type particle; otherwise, 0 is returned. Currently, non-0 + * values are returned if *a_particle* is an isotope, nuclide or nucleus, or if it is a proton and *a_isNeutronProtonANucleon* + * is **true**. Note, this is not the charge of the particle but its atomic number. For example, the atomic number + * for an electron is 0 as it is not a nuclear type particle. + * + * @param a_particle [in] The PoPI::Base instance whose Z is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The Z of the particle + ***********************************************************************************************************/ + +int particleZ( Base const &a_particle, bool a_isNeutronProtonANucleon ) { + + int Z = 0; + + if( a_particle.ID( ) == IDs::proton ) { + if( a_isNeutronProtonANucleon ) Z = 1; } + else if( a_particle.isNuclide( ) ) { + Nuclide const &particle = (Nuclide const &) a_particle; + Z = particle.Z( ); } + else if( a_particle.isNucleus( ) ) { + Nucleus const &particle = (Nucleus const &) a_particle; + Z = particle.Z( ); } + else if( a_particle.isChemicalElement( ) ) { + ChemicalElement const &object = (ChemicalElement const &) a_particle; + Z = object.Z( ); } + else if( a_particle.isIsotope( ) ) { + Isotope const &object = (Isotope const &) a_particle; + Z = object.Z( ); + } + + return( Z ); +} + +/* *********************************************************************************************************//** + * Uses the index *a_index* to look up the particle in *a_pops* and calls **particleZ** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_index [in] The index of the particle in *a_pops* whose Z value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The Z returned by **particleZ( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleZ( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon ) { + + int Z = 0; + Base const &base( a_pops.get( a_pops.final( a_index ) ) ); + + if( base.isChemicalElement( ) ) { + SymbolBase const &object2( static_cast( base ) ); + Z = particleZ( object2 ); } + else { + Particle const &particle( static_cast( base ) ); + Z = particleZ( particle, a_isNeutronProtonANucleon ); + } + + return( Z ); +} + +/* *********************************************************************************************************//** + * Uses the id *a_id* to look up the particle in *a_pops* and calls **particleZ** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_id [in] The id of the particle in *a_pops* whose Z value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The Z returned by **particleZ( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleZ( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon ) { + + Base const &object( a_pops.get( a_pops.final( a_id ) ) ); + + return( particleZ( object, a_isNeutronProtonANucleon ) ); +} + +/* *********************************************************************************************************//** + * Returns the A (i.e., atomic mass number) for a nuclear type particle; otherwise, 0 is returned. Currently, non-0 + * values are returned if *a_particle* is an isotope, nuclide or nucleus, or if it is a neutron or a proton and + * *a_isNeutronProtonANucleon* is **true**. + * + * @param a_particle [in] The PoPI::Base instance whose Z is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The Z of the particle + ***********************************************************************************************************/ + +int particleA( Base const &a_particle, bool a_isNeutronProtonANucleon ) { + + int A = 0; + + if( a_particle.ID( ) == IDs::neutron ) { + if( a_isNeutronProtonANucleon ) A = 1; } + else if( a_particle.ID( ) == IDs::proton ) { + if( a_isNeutronProtonANucleon ) A = 1; } + else if( a_particle.isNuclide( ) ) { + Nuclide const &particle = (Nuclide const &) a_particle; + A = particle.A( ); } + else if( a_particle.isNucleus( ) ) { + Nucleus const &particle = (Nucleus const &) a_particle; + A = particle.A( ); } + else if( a_particle.isIsotope( ) ) { + Isotope const &object = (Isotope const &) a_particle; + A = object.A( ); + } + + return( A ); +} + +/* *********************************************************************************************************//** + * Uses the index *a_index* to look up the particle in *a_pops* and calls **particleA** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_index [in] The index of the particle in *a_pops* whose A value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The A returned by **particleA( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleA( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon ) { + + Base const &particle( a_pops.get( a_pops.final( a_index ) ) ); + + return( particleA( particle, a_isNeutronProtonANucleon ) ); +} + +/* *********************************************************************************************************//** + * Uses the id *a_id* to look up the particle in *a_pops* and calls **particleA** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_id [in] The id of the particle in *a_pops* whose A value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The A returned by **particleA( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleA( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon ) { + + Base const &particle( a_pops.get( a_pops.final( a_id ) ) ); + + return( particleA( particle, a_isNeutronProtonANucleon ) ); +} + +/* *********************************************************************************************************//** + * Returns the ZA (i.e., 1000 * Z + A) for a nuclear type particle; otherwise, 0 is returned. Currently, non-0 + * values are returned if *a_particle* is an isotope, nuclide or nucleus, or if it is a neutron or a proton + * and *a_isNeutronProtonANucleon* is **true**. + * + * @param a_particle [in] The PoPI::Base instance whose Z is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The Z of the particle + ***********************************************************************************************************/ + +int particleZA( Base const &a_particle, bool a_isNeutronProtonANucleon ) { + + int ZA = 0; + + if( a_particle.ID( ) == IDs::neutron ) { + if( a_isNeutronProtonANucleon ) ZA = 1; } + else { + if( !a_particle.isChemicalElement( ) ) ZA = 1000 * particleZ( a_particle, a_isNeutronProtonANucleon ) + particleA( a_particle, a_isNeutronProtonANucleon ); + } + + return( ZA ); +} + +/* *********************************************************************************************************//** + * Uses the index *a_index* to look up the particle in *a_pops* and calls **particleZA** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_index [in] The index of the particle in *a_pops* whose ZA value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The ZA returned by **particleZA( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleZA( Database const &a_pops, int a_index, bool a_isNeutronProtonANucleon ) { + + Base const &particle( a_pops.get( a_pops.final( a_index ) ) ); + + return( particleZA( particle, a_isNeutronProtonANucleon ) ); +} + +/* *********************************************************************************************************//** + * Uses the id *a_id* to look up the particle in *a_pops* and calls **particleZA** for that particle. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_id [in] The id of the particle in *a_pops* whose ZA value is returned. + * @param a_isNeutronProtonANucleon [in] If **true** a proton is treated as a nucleus. + * + * @return The ZA returned by **particleZA( Base const &, bool )**. + ***********************************************************************************************************/ + +int particleZA( Database const &a_pops, std::string const &a_id, bool a_isNeutronProtonANucleon ) { + + Base const &particle( a_pops.get( a_pops.final( a_id ) ) ); + + return( particleZA( particle, a_isNeutronProtonANucleon ) ); +} + +/* *********************************************************************************************************//** + * Returns the meta-stable index if *a_particle* is a PoPI::MetaStable alias; otherwise, 0 is returned. + * + * @param a_particle [in] The PoPI::Base instance whose meta-stable index is returned. + * + * @return The meta-stable index of the particle + ***********************************************************************************************************/ + +int particleMetaStableIndex( Base const &a_particle ) { + + int metaStableIndex = 0; + + if( a_particle.isMetaStableAlias( ) ) { + MetaStable const &object = (MetaStable const &) a_particle; + metaStableIndex = object.metaStableIndex( ); + } + + return( metaStableIndex ); +} + +/* *********************************************************************************************************//** + * Returns the meta-stable index if *a_index* is a PoPI::MetaStable alias; otherwise, 0 is returned. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_index [in] The index of the particle in *a_pops* whose meta-stable index value is returned. + * + * @return The meta-stable index of the particle + ***********************************************************************************************************/ + +int particleMetaStableIndex( Database const &a_pops, int a_index ) { + + Base const &object( a_pops.get( a_pops.final( a_index ) ) ); + + return( particleMetaStableIndex( object ) ); +} + +/* *********************************************************************************************************//** + * Returns the meta-stable index if *a_id* is a PoPI::MetaStable alias; otherwise, 0 is returned. + * + * @param a_pops [in] The PoPs database to look up the particle. + * @param a_id [in] The id of the particle in *a_pops* whose meta-stable index value is returned. + * + * @return The meta-stable index of the particle + ***********************************************************************************************************/ + +int particleMetaStableIndex( Database const &a_pops, std::string const &a_id ) { + + Base const &object( a_pops.get( a_pops.final( a_id ) ) ); + + return( particleMetaStableIndex( object ) ); +} + +/* *********************************************************************************************************//** + * A physical quantity can be a double, integer, fraction (e.g, '3/7') or a string. For all but string, + * this functions returns a double representing the value of the physical quantity *a_physicalQuantity*. + * For string, a throw is executed. + * + * @param a_physicalQuantity [in] The physical quantity whose value is returend. + * + * @return A double value representing the physical quantity. + ***********************************************************************************************************/ + +double getPhysicalQuantityAsDouble( PhysicalQuantity const &a_physicalQuantity ) { + + double value = 0.0; + + switch( a_physicalQuantity.Class( ) ) { + case PQ_class::Double : + case PQ_class::shell : { + PQ_double const &pq_double = static_cast( a_physicalQuantity ); + value = pq_double.value( ); } + break; + case PQ_class::integer : { + PQ_integer const &pq_integer = static_cast( a_physicalQuantity ); + value = pq_integer.value( ); } + break; + default : + throw Exception( "Cannot convert physical quantitiy to a double." ); + } + + return( value ); +} + +/* *********************************************************************************************************//** + * If the suite *a_suite* as data, **getPhysicalQuantityAsDouble** is called on its first item; otherwise, + * a throw is executed. If *a_suite* is empty and *a_allowEmpty* is **true**, then *a_emptyValue* is returned. + * + * @param a_suite [in] The suite whose first item's value is returned as a double. + * @param a_allowEmpty [in] Determines act to follow when *a_suite* is empty. + * @param a_emptyValue [in] The value to return if *a_suite* is empty and *a_allowEmpty* is **true**. + * + * @return A double value representing the physical quantity. + ***********************************************************************************************************/ + +double getPhysicalQuantityOfSuiteAsDouble( PQ_suite const &a_suite, bool a_allowEmpty, double a_emptyValue ) { + + if( a_suite.size( ) == 0 ) { + if( a_allowEmpty ) return( a_emptyValue ); + throw Exception( "No physical quantitiy in Suite." ); + } + + return( getPhysicalQuantityAsDouble( *a_suite[0] ) ); +} + +/* *********************************************************************************************************//** + * Breaks th components of a particles name into base, anti and quailier strings. Every id in GNDS PoPs can be of the + * form base["_anti"][qualifier] where both "_anti" and qualifier are optional. For example, an electron is represented + * as "e-" and an anti-electron (i.e., positron) "e-_anti". Qualifiers are endings imbedded by "{" and "}". For example, + * "H{1s1/2}" has the base "H" with quailifier "1s1/2" where the "{" and "}" have been stripped from the quailifier. + * + * @param a_id [in] The base id for *a_id*. + * @param a_anti [in] A std::string to be filled with "_anti" if particle is an anti-particle and an "" otherwise. + * @param a_qualifier [in] A pointer to a std::string that will be filled with the qualifer characters. + * + * @return The base id for the particle. + ***********************************************************************************************************/ + +std::string baseAntiQualifierFromID( std::string const &a_id, std::string &a_anti, std::string *a_qualifier) { + + std::size_t curlyBraketPosition = a_id.find( "{" ); + std::string base = a_id.substr( 0, curlyBraketPosition ); + + a_anti = ""; + if( a_qualifier != nullptr ) *a_qualifier = ""; + + if( curlyBraketPosition != std::string::npos ) { + if( a_id.back( ) != '}' ) throw Exception( "Invalid quaifier string in id '" + a_id + "'." ); + base = a_id.substr( 0, curlyBraketPosition ); + if( a_qualifier != nullptr ) { + *a_qualifier = a_id.substr( curlyBraketPosition + 1, a_id.size( ) - curlyBraketPosition - 2 ); + } } + else if( a_id.find( "}" ) != std::string::npos ) { + throw Exception( "Invalid quaifier string in id '" + a_id + "'." ); + } + + std::size_t anti_position = base.find( IDs::anti ); + if( anti_position != std::string::npos ) { + a_anti = base.substr( anti_position ); + base = base.substr( 0, anti_position ); + if( a_anti != IDs::anti ) throw Exception( "Invalid anti string in id '" + a_id + "'." ); + } + + return( base ); +} + +/*! \class Exception + * Exception class for all PoPI exceptions thrown by PoPI functions. + */ + +/* *********************************************************************************************************//** + * @param a_message [in] The message that the function what() will return. + ***********************************************************************************************************/ + +Exception::Exception( std::string const & a_message ) : + std::runtime_error( a_message ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_nucleus.cc b/source/processes/hadronic/models/lend/src/PoPI_nucleus.cc new file mode 100644 index 0000000000..c3f458738d --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_nucleus.cc @@ -0,0 +1,135 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_energyChars "energy" + +/*! \class Nucleus + * This class represents **PoPs** nucleus instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** nucleus node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Nucleus** to. + * @param a_nuclide [in] This nuclide instance that will contain *this*. + ***********************************************************************************************************/ + +Nucleus::Nucleus( HAPI::Node const &a_node, Database *a_DB, Nuclide *a_nuclide ) : + Particle( a_node, Particle_class::nucleus, PoPI_nucleusChars, -1 ), + m_nuclide( a_nuclide ), + m_Z( a_nuclide->Z( ) ), + m_A( a_nuclide->A( ) ), + m_levelName( a_node.attribute( PoPI_indexChars ).value( ) ), // The string version of m_levelIndex. + m_levelIndex( a_node.attribute( PoPI_indexChars ).as_int( ) ), // The int version of m_levelName. + m_energy( a_node.child( PoPI_energyChars ) ) { + + if( a_node.empty( ) ) throw Exception( "nuclide is missing nucleus" ); + + int sign = ( isAnti( ) ? -1 : 1 ); + setIntid( sign * ( 1000 * ( 1000 * (levelIndex( ) + 500) + Z( ) ) + A( ) ) ); + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Nucleus::~Nucleus( ) { + +} + +/* *********************************************************************************************************//** + * Returns the atomic ID of the parent nuclide. + * + * @return The atomic ID of the parent nuclide. + ***********************************************************************************************************/ + +std::string const &Nucleus::atomsID( void ) const { + + return( m_nuclide->atomsID( ) ); +} + +/* *********************************************************************************************************//** + * Returns the mass of the nucleus in units of *a_unit*. Currently not fully implement and does not support *a_unit*. + * + * @param a_unit [in] The unit to return the mass in. + * + * @return The mass in unit of *a_unit*. + ***********************************************************************************************************/ + +double Nucleus::massValue( char const *a_unit ) const { + + if( mass( ).size( ) > 0 ) { + PQ_double const *pq_mass = dynamic_cast( mass( )[0] ); + + if( pq_mass == nullptr ) throw Exception( "Particle does not have a PoPI::PQ_double mass." ); + return( pq_mass->value( a_unit ) ); + } + +// FIXME: still need to correct for electron masses and binding energy. Currently, an approximation is done. + double bindingEnergy = 0.0; + if( m_Z == 1 ) { + bindingEnergy = 13.5981e-6; } + else if( m_Z == 2 ) { + bindingEnergy = 79.005e-6; + } + + return( m_nuclide->massValue( a_unit ) - ( m_Z * PoPI_electronMass_MeV_c2 - bindingEnergy ) / PoPI_AMU2MeV_c2 ); +} + +/* *********************************************************************************************************//** + * Returns the excitation energy of the nucleus in units of *a_unit*. Currently not fully implement and does not support *a_unit*. + * + * @param a_unit [in] The unit to return the mass in. + * + * @return The mass in unit of *a_unit*. + ***********************************************************************************************************/ + +double Nucleus::energy( std::string const &a_unit ) const { + + if( m_energy.size( ) == 0 ) { + if( m_levelIndex != 0 ) + std::cerr << std::endl << "Particle " << ID( ) << " missing energy node, please report to PoPs maintainer. Using 0.0 and continuing." << std::endl; + return( 0.0 ); + } + PQ_double *pq = dynamic_cast( m_energy[0] ); + if( pq->unit( ) == "eV" ) return( pq->value( ) * 1e-6 ); // Kludge until units are functional. + return( pq->value( a_unit ) ); +} + +/* *********************************************************************************************************//** + * Returns the index attribute. + ***********************************************************************************************************/ + +std::string Nucleus::toXMLListExtraAttributes( void ) const { + + return( std::string( " index=\"" + m_levelName + "\"" ) ); +} + +/* *********************************************************************************************************//** + * Added the *m_energy* stuff to *a_XMLList*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Nucleus::toXMLListExtraElements( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + m_energy.toXMLList( a_XMLList, a_indent1 ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_nuclide.cc b/source/processes/hadronic/models/lend/src/PoPI_nuclide.cc new file mode 100644 index 0000000000..302b905ab1 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_nuclide.cc @@ -0,0 +1,156 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "PoPI.hpp" + +namespace PoPI { + +// FIXME - Must be removed once unit conversion is supported. +#define AMU2MeV 931.494028 + +/*! \class Nuclide + * This class represents **PoPs** nuclide instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** nuclide node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Nuclide** to. + * @param a_isotope [in] This isotope instance that will contain *this*. + ***********************************************************************************************************/ + +Nuclide::Nuclide( HAPI::Node const &a_node, Database *a_DB, Isotope *a_isotope ) : + Particle( a_node, Particle_class::nuclide, PoPI_nuclideChars, -1 ), + m_isotope( a_isotope ), + m_nucleus( a_node.child( PoPI_nucleusChars ), a_DB, this ), + m_gammaDecayData( a_node.child( PoPI_gammaDecayDataChars ) ) { + + int sign = ( isAnti( ) ? -1 : 1 ); + setIntid( sign * ( 1000 * ( 1000 * levelIndex( ) + Z( ) ) + A( ) ) ); + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Nuclide::~Nuclide( ) { + +} + +/* *********************************************************************************************************//** + * Returns of atomic number of the parent isotope. + * + * @return The atomic number of *this*. + ***********************************************************************************************************/ + +int Nuclide::Z( void ) const { + + return( m_isotope->Z( ) ); +} + +/* *********************************************************************************************************//** + * Returns of atomic mass number of the parent isotope. + * + * @return The atomic mass number of *this*. + ***********************************************************************************************************/ + +int Nuclide::A( void ) const { + + return( m_isotope->A( ) ); +} + +/* *********************************************************************************************************//** + * Returns of atomic symbol of the parent isotope. + * + * @return The atomic symbol of *this*. + ***********************************************************************************************************/ + +std::string const &Nuclide::atomsID( void ) const { + + return( m_isotope->symbol( ) ); +} + +/* *********************************************************************************************************//** + * Returns the mass suite for the first nuclide in the isotope containing *this*. + * + * @return A const reference to a PQ_suite. + ***********************************************************************************************************/ + +PQ_suite const &Nuclide::baseMass( void ) const { + + return( (*m_isotope).nuclides( )[0].mass( ) ); +} + +/* *********************************************************************************************************//** + * Returns the mass of the nuclide in units of *a_unit* including the nucleus excitation energy. + * Currently not fully implement and does not support *a_unit*. + * + * @param a_unit [in] The unit to return the mass in. + * + * @return The mass in unit of *a_unit*. + ***********************************************************************************************************/ + +double Nuclide::massValue( char const *a_unit ) const { + + std::string unit_c2( a_unit ); + unit_c2 += " * c**2"; + PQ_double const *pq_mass; + + if( mass( ).size( ) > 0 ) { + pq_mass = dynamic_cast( mass( )[0] ); } + else { + if( baseMass( ).size( ) == 0 ) throw Exception( "nuclide::massValue: no mass in level 0 for particle '" + ID( ) + "'." ); + pq_mass = dynamic_cast( baseMass( )[0] ); + } + double _mass = pq_mass->value( a_unit ); + + double v_levelEnergy = levelEnergy( unit_c2 ) / AMU2MeV; + + return( _mass + v_levelEnergy ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Nuclide::calculateNuclideGammaBranchStateInfos( PoPI::Database const &a_pops, NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos, + bool a_alwaysAdd ) const { + + if( a_nuclideGammaBranchStateInfos.find( ID( ) ) != nullptr ) + return; + + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = new NuclideGammaBranchStateInfo( ID( ), intid( ), kind( ), m_nucleus.energy( "MeV" ) ); + + if( m_gammaDecayData.rows( ) > 0 ) { + m_gammaDecayData.calculateNuclideGammaBranchStateInfo( a_pops, *nuclideGammaBranchStateInfo ); } + else { + decayData( ).calculateNuclideGammaBranchStateInfo( a_pops, *nuclideGammaBranchStateInfo ); + } + + if( ( nuclideGammaBranchStateInfo->branches( ).size( ) > 0 ) || a_alwaysAdd ) { + a_nuclideGammaBranchStateInfos.add( nuclideGammaBranchStateInfo ); } + else { + delete nuclideGammaBranchStateInfo; + } +} + +/* *********************************************************************************************************//** + * Added *m_nucleus* stuff to *a_XMLList*. + ***********************************************************************************************************/ + +void Nuclide::toXMLListExtraElements( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + m_nucleus.toXMLList( a_XMLList, a_indent1 ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_nuclideGammaBranching.cc b/source/processes/hadronic/models/lend/src/PoPI_nuclideGammaBranching.cc new file mode 100644 index 0000000000..1d2c8074e3 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_nuclideGammaBranching.cc @@ -0,0 +1,162 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class NuclideGammaBranchInfo + * Class storing information about the gamma (i.e., photon) decay of an excited nuclide state to a lower state. + */ + +/* *********************************************************************************************************//** + * @param a_probability [in] The probability that the level decays to state *a_residualState*. + * @param a_photonEmissionProbability [in] The conditional probability the the decay emitted a photon. + * @param a_gammaEnergy [in] The energy of the emitted photon. + * @param a_residualState [in] The state the residual is left in after photon decay. + ***********************************************************************************************************/ + +NuclideGammaBranchInfo::NuclideGammaBranchInfo( double a_probability, double a_photonEmissionProbability, double a_gammaEnergy, + std::string const &a_residualState ) : + m_probability( a_probability ), + m_photonEmissionProbability( a_photonEmissionProbability ), + m_gammaEnergy( a_gammaEnergy ), + m_residualState( a_residualState ) { + +} + +/* *********************************************************************************************************//** + * Copy constructor. + + * @param a_nuclideGammaBranchInfo [in] The *NuclideGammaBranchInfo* instance to copy. + ***********************************************************************************************************/ + +NuclideGammaBranchInfo::NuclideGammaBranchInfo( NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo ) : + m_probability( a_nuclideGammaBranchInfo.probability( ) ), + m_photonEmissionProbability( a_nuclideGammaBranchInfo.photonEmissionProbability( ) ), + m_gammaEnergy( a_nuclideGammaBranchInfo.gammaEnergy( ) ), + m_residualState( a_nuclideGammaBranchInfo.residualState( ) ) { + +} + +/* +============================================================ +================= NuclideGammaBranchStateInfo ================ +============================================================ +*/ +NuclideGammaBranchStateInfo::NuclideGammaBranchStateInfo( std::string a_state, int a_intid, std::string const &a_kind, double a_nuclearLevelEnergy ) : + m_state( a_state ), + m_intid( a_intid ), + m_kind( a_kind ), + m_nuclearLevelEnergy( a_nuclearLevelEnergy ), + m_nuclearLevelEnergyWidth( 0.0 ), + m_derivedCalculated( false ), + m_multiplicity( 0.0 ), + m_averageGammaEnergy( 0.0 ) { + +} +/* +========================================================= +*/ +void NuclideGammaBranchStateInfo::add( NuclideGammaBranchInfo const &a_nuclideGammaBranchInfo ) { + + m_branches.push_back( a_nuclideGammaBranchInfo ); +} +/* +========================================================= +*/ +void NuclideGammaBranchStateInfo::calculateDerivedData( NuclideGammaBranchStateInfos &a_nuclideGammaBranchStateInfos ) { + + if( m_derivedCalculated ) return; + + for( std::size_t i1 = 0; i1 < m_branches.size( ); ++i1 ) { + NuclideGammaBranchInfo &nuclideGammaBranchInfo = m_branches[i1]; + + std::string const &residualState = nuclideGammaBranchInfo.residualState( ); + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = a_nuclideGammaBranchStateInfos.find( residualState ); + + double chainedMultiplicity = 0.0; + double chainedAverageGammaEnergy = 0.0; + if( nuclideGammaBranchStateInfo != nullptr ) { + nuclideGammaBranchStateInfo->calculateDerivedData( a_nuclideGammaBranchStateInfos ); + chainedMultiplicity = nuclideGammaBranchStateInfo->multiplicity( ); + chainedAverageGammaEnergy = nuclideGammaBranchStateInfo->averageGammaEnergy( ); + } + + m_multiplicity += nuclideGammaBranchInfo.probability( ) * ( nuclideGammaBranchInfo.photonEmissionProbability( ) + chainedMultiplicity ); + m_averageGammaEnergy += nuclideGammaBranchInfo.probability( ) * + ( nuclideGammaBranchInfo.photonEmissionProbability( ) * nuclideGammaBranchInfo.gammaEnergy( ) + chainedAverageGammaEnergy ); + } + + m_derivedCalculated = true; +} + +/* +============================================================ +================ NuclideGammaBranchStateInfos ================ +============================================================ +*/ +NuclideGammaBranchStateInfos::NuclideGammaBranchStateInfos( ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +NuclideGammaBranchStateInfos::~NuclideGammaBranchStateInfos( ) { + + for( std::size_t i1 = 0; i1 < m_nuclideGammaBranchStateInfos.size( ); ++i1 ) delete m_nuclideGammaBranchStateInfos[i1]; +} +/* +========================================================= +*/ +void NuclideGammaBranchStateInfos::add( NuclideGammaBranchStateInfo *a_nuclideGammaBranchStateInfo ) { + + m_nuclideGammaBranchStateInfos.push_back( a_nuclideGammaBranchStateInfo ); +} + +/* *********************************************************************************************************//** + * This method returns a pointer to the NuclideGammaBranchStateInfo instance for *a_state* or nullptr if not match is found. + * + * @param a_state [in] The PoPs id for the requested state (i.e., nuclide). + * + * @return A pointer to the requested NuclideGammaBranchStateInfo instance or nullptr if not match is found. + ***********************************************************************************************************/ + +NuclideGammaBranchStateInfo *NuclideGammaBranchStateInfos::find( std::string const &a_state ) { + + for( std::size_t i1 = 0; i1 < m_nuclideGammaBranchStateInfos.size( ); ++i1 ) { + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = m_nuclideGammaBranchStateInfos[i1]; + + if( nuclideGammaBranchStateInfo->state( ) == a_state ) return( nuclideGammaBranchStateInfo ); + } + + return( nullptr ); +} + +/* *********************************************************************************************************//** + * This method returns a const pointer to the NuclideGammaBranchStateInfo instance for *a_state* or nullptr if not match is found. + * + * @param a_state [in] The PoPs id for the requested state (i.e., nuclide). + * + * @return A const pointer to the requested NuclideGammaBranchStateInfo instance or nullptr if not match is found. + ***********************************************************************************************************/ + +NuclideGammaBranchStateInfo const *NuclideGammaBranchStateInfos::find( std::string const &a_state ) const { + + for( std::size_t i1 = 0; i1 < m_nuclideGammaBranchStateInfos.size( ); ++i1 ) { + NuclideGammaBranchStateInfo *nuclideGammaBranchStateInfo = m_nuclideGammaBranchStateInfos[i1]; + + if( nuclideGammaBranchStateInfo->state( ) == a_state ) return( nuclideGammaBranchStateInfo ); + } + + return( nullptr ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_particle.cc b/source/processes/hadronic/models/lend/src/PoPI_particle.cc new file mode 100644 index 0000000000..0674c51f7b --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_particle.cc @@ -0,0 +1,112 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class Particle + * The base class representing a particle. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + * @param a_class [in] The class of the particle. + * @param a_family [in] The family of the particle. + * @param a_hasNucleus [in] Indicates if the particle is or contains a nucleus. 0 = no, -1 = yes and 1 = is nucleus. + ***********************************************************************************************************/ + +Particle::Particle( HAPI::Node const &a_node, Particle_class a_class, std::string const &a_family, int a_hasNucleus ) : + IDBase( a_node, a_class ), + m_baseId( "" ), + m_family( a_family ), + m_anti( "" ), + m_hasNucleus( a_hasNucleus ), + m_mass( a_node.child( PoPI_massChars ) ), + m_spin( a_node.child( PoPI_spinChars ) ), + m_parity( a_node.child( PoPI_parityChars ) ), + m_charge( a_node.child( PoPI_chargeChars ) ), + m_halflife( a_node.child( PoPI_halflifeChars ) ), + m_decayData( a_node.child( PoPI_decayDataChars ) ) { + + m_baseId = baseAntiQualifierFromID( ID( ), m_anti ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Particle::~Particle( ) { + +} + +/* *********************************************************************************************************//** + * Returns the mass of the particle in units of *a_unit*. Currently not fully implement and does not support *a_unit*. + * + * @param a_unit [in] The unit to return the mass in. + * + * @return The mass in unit of *a_unit*. + ***********************************************************************************************************/ + +double Particle::massValue( char const *a_unit ) const { + + if( m_mass.size( ) == 0 ) throw Exception( "Particle '" + ID( ) + "' does not have any mass data." ); + + PQ_double const *pq_mass = dynamic_cast( mass( )[0] ); + + if( pq_mass == nullptr ) throw Exception( "Particle '" + ID( ) + "' does not have a PoPI::PQ_double mass." ); + return( pq_mass->value( a_unit ) ); +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Particle::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string indent2 = a_indent1 + " "; + + std::string header = a_indent1 + "<" + family( ) + " id=\"" + ID( ) + "\"" + toXMLListExtraAttributes( ) + ">"; + a_XMLList.push_back( header ); + + m_mass.toXMLList( a_XMLList, indent2 ); + m_spin.toXMLList( a_XMLList, indent2 ); + m_parity.toXMLList( a_XMLList, indent2 ); + m_charge.toXMLList( a_XMLList, indent2 ); + m_halflife.toXMLList( a_XMLList, indent2 ); + toXMLListExtraElements( a_XMLList, indent2 ); + m_decayData.toXMLList( a_XMLList, indent2 ); + + appendXMLEnd( a_XMLList, family( ) ); +} + +/* *********************************************************************************************************//** + * Currently there are no extra attributes to add. Ergo, returns an empty string. + ***********************************************************************************************************/ + +std::string Particle::toXMLListExtraAttributes( void ) const { + + return( "" ); +} + +/* *********************************************************************************************************//** + * Currently there are no extra child nodes to add. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void Particle::toXMLListExtraElements( LUPI_maybeUnused std::vector &a_XMLList, LUPI_maybeUnused std::string const &a_indent1 ) const { + + return; +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_physicalQuantity.cc b/source/processes/hadronic/models/lend/src/PoPI_physicalQuantity.cc new file mode 100644 index 0000000000..2892e22c4e --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_physicalQuantity.cc @@ -0,0 +1,289 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "PoPI.hpp" + +namespace PoPI { + +#define PoPI_valueChars "value" +#define PoPI_unitChars "unit" + +/*! \class PhysicalQuantity + * The base class for all PhysicalQuantity classes. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + * @param a_class [in] The class of the physical quantity. + ***********************************************************************************************************/ + +PhysicalQuantity::PhysicalQuantity( HAPI::Node const &a_node, PQ_class a_class ) : + m_class( a_class ), + m_tag( a_node.name( ) ), + m_label( a_node.attribute( PoPI_labelChars ).value( ) ), + m_valueString( a_node.attribute( PoPI_valueChars ).value( ) ), + m_unit( a_node.attribute( PoPI_unitChars ).value( ) ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PhysicalQuantity::~PhysicalQuantity( ) { + +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void PhysicalQuantity::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string _unit; + + if( m_unit.size( ) > 0 ) _unit = "\" unit=\"" + m_unit; + + std::string header = a_indent1 + "<" + m_tag + " label=\"" + m_label + "\" value=\"" + valueToString( ) + _unit + "\"/>"; + a_XMLList.push_back( header ); +} + +/*! \class PQ_double + * The physical quantity class representing a double. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_double::PQ_double( HAPI::Node const &a_node ) : + PhysicalQuantity( a_node, PQ_class::Double ), + m_value( 0.0 ) { + + initialize( ); +} + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + * @param a_class [in] The class of the physical quantity. + ***********************************************************************************************************/ + +PQ_double::PQ_double( HAPI::Node const &a_node, PQ_class a_class ) : + PhysicalQuantity( a_node, a_class ), + m_value( 0.0 ) { + + initialize( ); +} + +/* *********************************************************************************************************//** + * This method is called my the constructors to do the common stuff. + ***********************************************************************************************************/ + +void PQ_double::initialize( ) { + + char *last; + + if( valueString( ) != "" ) m_value = strtod( valueString( ).c_str( ), &last ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_double::~PQ_double( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of *this* in units of *a_unit*. Currently, unit conversion is not supported. + * + * @param a_unit [in] The requested unit to return the value in. + * + * @return The value of *this* in units of *a_unit*. + ***********************************************************************************************************/ + +double PQ_double::value( LUPI_maybeUnused char const *a_unit ) const { + + return( m_value ); +} + +/* *********************************************************************************************************//** + * Converts the double value of self to a string. + * + * @return The string value of *this*. + ***********************************************************************************************************/ + +std::string PQ_double::valueToString( void ) const { + + std::string sValue = LUPI::Misc::argumentsToString( "%.12g", m_value ); + if( fabs( m_value ) < 1e10 ) { + if( sValue.find( '.' ) == std::string::npos ) sValue = LUPI::Misc::argumentsToString( "%.1f", m_value ); + } + + return( sValue ); +} + +/*! \class PQ_integer + * The physical quantity class representing an integer. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_integer::PQ_integer( HAPI::Node const &a_node ) : + PhysicalQuantity( a_node, PQ_class::integer ), + m_value( a_node.attribute( PoPI_valueChars ).as_int( ) ) { +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_integer::~PQ_integer( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of *this* in units of *a_unit*. Currently, unit conversion is not supported. + * + * @param a_unit [in] The requested unit to return the value in. + * + * @return The value of *this* in units of *a_unit*. + ***********************************************************************************************************/ + +int PQ_integer::value( LUPI_maybeUnused char const *a_unit ) const { + + return( m_value ); +} + +/* *********************************************************************************************************//** + * Convert the integer value of *this* to a string. + * + * @return The string value of *this*. + ***********************************************************************************************************/ + +std::string PQ_integer::valueToString( void ) const { + + return( LUPI::Misc::argumentsToString( "%d", m_value ) ); +} + +/*! \class PQ_fraction + * The physical quantity class representing a fraction. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_fraction::PQ_fraction( HAPI::Node const &a_node ) : + PhysicalQuantity( a_node, PQ_class::fraction ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_fraction::~PQ_fraction( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of *this* in units of *a_unit*. Currently, unit conversion is not supported. + * + * @param a_unit [in] The requested unit to return the value in. + * + * @return The value of *this* in units of *a_unit*. + ***********************************************************************************************************/ + +std::string PQ_fraction::value( LUPI_maybeUnused char const *a_unit ) const { + + return( valueString( ) ); +} + +/* *********************************************************************************************************//** + * Returns the value as a string. + * + * @return The string value of *this*. + ***********************************************************************************************************/ + +std::string PQ_fraction::valueToString( void ) const { + + return( valueString( ) ); +} + +/*! \class PQ_string + * The physical quantity class represented as a string. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_string::PQ_string( HAPI::Node const &a_node ) : + PhysicalQuantity( a_node, PQ_class::string ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_string::~PQ_string( ) { + +} + +/* *********************************************************************************************************//** + * Returns the value of *this* in units of *a_unit*. Currently, unit conversion is not supported. + * + * @param a_unit [in] The requested unit to return the value in. + * + * @return The value of *this* in units of *a_unit*. + ***********************************************************************************************************/ + +std::string PQ_string::value( LUPI_maybeUnused char const *a_unit ) const { + + return( valueString( ) ); +} + +/* *********************************************************************************************************//** + * Returns the string value of *this*. + * + * @return The string value of *this*. + ***********************************************************************************************************/ + +std::string PQ_string::valueToString( void ) const { + + return( valueString( ) ); +} + +/*! \class PQ_shell + * The physical quantity that represents the probability as a double that a process like internal conversion or pair production occurs. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_shell::PQ_shell( HAPI::Node const &a_node ) : + PQ_double( a_node, PQ_class::shell ) { + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_shell::~PQ_shell( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_pq_suite.cc b/source/processes/hadronic/models/lend/src/PoPI_pq_suite.cc new file mode 100644 index 0000000000..32c5a78971 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_pq_suite.cc @@ -0,0 +1,75 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class PQ_suite + * Suite for storing the values in an physical quantity. + */ + +/* *********************************************************************************************************//** + * @param a_node [in] The **HAPI::Node** node to be parsed. + ***********************************************************************************************************/ + +PQ_suite::PQ_suite( HAPI::Node const &a_node ) : + m_label( a_node.name( ) ) { + + for( HAPI::Node child = a_node.first_child( ); !child.empty( ); child.to_next_sibling( ) ) { + std::string name( child.name( ) ); + PhysicalQuantity *quantity; + + if( name == PoPI_doubleChars ) { + quantity = new PQ_double( child ); } + else if( name == PoPI_integerChars ) { + quantity = new PQ_integer( child ); } + else if( name == PoPI_fractionChars ) { + quantity = new PQ_fraction( child ); } + else if( name == PoPI_stringChars ) { + quantity = new PQ_string( child ); } + else if( name == PoPI_shellChars ) { + quantity = new PQ_shell( child ); } + else { + continue; + } + push_back( quantity ); + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +PQ_suite::~PQ_suite( ) { + + std::string::size_type i1, __size = size( ); + + for( i1 = 0; i1 < __size; ++i1 ) delete (*this)[i1]; +} + +/* *********************************************************************************************************//** + * Adds the contents of *this* to *a_XMLList* where each item in *a_XMLList* is one line (without linefeeds) to output as an XML representation of *this*. + * + * @param a_XMLList [in] The list to add an XML output representation of *this* to. + * @param a_indent1 [in] The amount of indentation to added to each line added to *a_XMLList*. + ***********************************************************************************************************/ + +void PQ_suite::toXMLList( std::vector &a_XMLList, std::string const &a_indent1 ) const { + + std::string indent2 = a_indent1 + " "; + + if( size( ) == 0 ) return; + std::string header = a_indent1 + "<" + m_label + ">"; + a_XMLList.push_back( header ); + for( std::vector::const_iterator iter = begin( ); iter != end( ); ++iter ) + (*iter)->toXMLList( a_XMLList, indent2 ); + appendXMLEnd( a_XMLList, m_label ); +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPI_unorthodox.cc b/source/processes/hadronic/models/lend/src/PoPI_unorthodox.cc new file mode 100644 index 0000000000..220b119259 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/PoPI_unorthodox.cc @@ -0,0 +1,47 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "PoPI.hpp" + +namespace PoPI { + +/*! \class Unorthodox + * This class represents **PoPs** unorthodox instance. + */ + +/* *********************************************************************************************************//** + * Constructor that parses an **HAPI** instance to create a **PoPs** unorthodox node. + * + * @param a_node [in] The **HAPI::Node** to be parsed. + * @param a_DB [in] The **PoPI::Database:: instance to add the constructed **Unorthodox** to. + * @param a_parent [in] The parent suite that will contain *this*. + ***********************************************************************************************************/ + +Unorthodox::Unorthodox( HAPI::Node const &a_node, Database *a_DB, LUPI_maybeUnused Database *a_parent ) : + Particle( a_node, Particle_class::unorthodox, PoPI_unorthodoxChars ) { + + if( ID( ) == IDs::FissionProductENDL99120 ) { + setHasNucleus( true ); + setIntid( intidHelper( isAnti( ), Particle_class::ENDL_fissionProduct, 99120 ) ); } + if( ID( ) == IDs::FissionProductENDL99125 ) { + setHasNucleus( true ); + setIntid( intidHelper( isAnti( ), Particle_class::ENDL_fissionProduct, 99125 ) ); + } + + addToDatabase( a_DB ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Unorthodox::~Unorthodox( ) { + +} + +} diff --git a/source/processes/hadronic/models/lend/src/PoPs.cc b/source/processes/hadronic/models/lend/src/PoPs.cc deleted file mode 100644 index 911e885927..0000000000 --- a/source/processes/hadronic/models/lend/src/PoPs.cc +++ /dev/null @@ -1,782 +0,0 @@ -#include -#include -#include - -#include "PoPs.h" -#include "PoPs_private.h" - -/* - In PoPs_addParticleIfNeeded and unitsDB_addUnitIfNeeded, smr_malloc2 and not smr_realloc2 is used so that the current database is not - lost if more memory cannot be allocated (not sure that this is needed, maybe should crash). -*/ - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#define incrementalSize 1000 - -#define MeV2eV 1e6 -#define MeV2keV 1e3 -#define AMU2MeV 931.494028 -#define AMU2eV ( MeV2eV * 931.494028 ) -#define K2MeV 8.6173856922566752e-11 -#define K2eV ( MeV2eV * K2MeV ) - -typedef struct unitConversions_s unitConversions; - -struct unitConversions_s { - char const *_from; - char const *_to; - double ratio; -}; - -int PoPs_smr_ID = smr_unknownID; -static int referenceCount = 0; -static char versionStr[64] = ""; - -/* -* For MPI the following need to be broadcasted. -*/ -static unitsDB unitsRoot = { 0, 0, NULL }; -static PoPs popsRoot = { 0, 0, NULL, NULL }; -/* -* End need to MPI broadcasted. -*/ - -static unitConversions conversions[] = { { "amu", "eV/c**2", AMU2eV }, { "amu", "MeV/c**2", AMU2MeV }, { "MeV/c**2", "eV/c**2", MeV2eV }, - { "MeV", "eV", MeV2eV }, { "MeV", "keV", MeV2keV }, { "K", "MeV", K2MeV }, { "K", "eV", K2eV } }; - -static char const *PoPs_genreStrings[] = { "invalid", "unknown", "alias", "photon", "lepton", "quark", "meson", "baryon", "nucleus", "atom" }; - -static int PoPs_particleProperIndex( int index ); -static int PoPs_sortedParticleIndex( char const *name ); -static int unitsDB_release( void ); -/* -======================================================================== -*/ -const char *PoPs_version( void ) { - - if( versionStr[0] == 0 ) snprintf( versionStr, sizeof versionStr, "PoPs version %d.%d.%d", POPS_VERSION_MAJOR, POPS_VERSION_MINOR, POPS_VERSION_PATCHLEVEL ); - return( versionStr ); -} -/* -======================================================================== -*/ -int PoPs_versionMajor( void ) { return( POPS_VERSION_MAJOR ); } -int PoPs_versionMinor( void ) { return( POPS_VERSION_MINOR ); } -int PoPs_versionPatchLevel( void ) { return( POPS_VERSION_PATCHLEVEL ); } -/* -======================================================================== -*/ -int PoPs_register( void ) { - - if( referenceCount < 0 ) return( -1 ); - return( ++referenceCount ); -} -/* -======================================================================== -*/ -int PoPs_readDatabase( statusMessageReporting *smr, char const *fileName ) { - - return( PoPs_particleReadDatabase( smr, fileName ) ); -} -/* -======================================================================== -*/ -int PoPs_release( statusMessageReporting *smr ) { - - referenceCount--; - if( referenceCount != 0 ) return( referenceCount ); - PoPs_releasePrivate( smr ); - return( 0 ); -} -/* -======================================================================== -*/ -int PoPs_releasePrivate( statusMessageReporting * /*smr*/ ) { - - int i; - - for( i = 0; i < popsRoot.numberOfParticles; i++ ) PoP_free( popsRoot.pops[i] ); - smr_freeMemory( (void **) &(popsRoot.pops) ); - popsRoot.sorted = NULL; - popsRoot.numberOfParticles = 0; - popsRoot.allocated = 0; - unitsDB_release( ); - return( 0 ); -} -/* -======================================================================== -*/ -PoP *PoPs_addParticleIfNeeded( statusMessageReporting *smr, PoP *pop ) { -/* - If particle with name pop->name is already in popsRoot, returns the pointer to the existing particle. - A NULL is returned if adding particle to popsRoot fails. -*/ - int i, index = PoPs_sortedParticleIndex( pop->name ); - - if( index >= 0 ) return( popsRoot.pops[PoPs_particleProperIndex( popsRoot.sorted[index]->index )] ); - if( popsRoot.numberOfParticles == popsRoot.allocated ) { - int size = popsRoot.allocated + incrementalSize; - PoP **sorted, **pops = (PoP **) smr_malloc2( smr, 2 * size * sizeof( PoPs * ), 0, "pops" ); - - if( pops == NULL ) return( NULL ); - sorted = &(pops[size]); - for( i = 0; i < popsRoot.numberOfParticles; i++ ) { - pops[i] = popsRoot.pops[i]; - sorted[i] = popsRoot.sorted[i]; - } - smr_freeMemory( (void **) &(popsRoot.pops) ); - popsRoot.pops = pops; - popsRoot.sorted = sorted; - popsRoot.allocated = size; - } - popsRoot.pops[popsRoot.numberOfParticles] = pop; - index = -index - 1; - for( i = popsRoot.numberOfParticles; i > index; i-- ) popsRoot.sorted[i] = popsRoot.sorted[i-1]; - popsRoot.sorted[index] = pop; - pop->index = popsRoot.numberOfParticles; - popsRoot.numberOfParticles++; - if( pop->genre == PoPs_genre_alias ) { /* Add pop->index to end of list of particles aliased by pop->properIndex. */ - PoP *pop2; - - for( pop2 = popsRoot.pops[pop->properIndex]; pop2->aliasIndex >= 0; pop2 = popsRoot.pops[pop2->aliasIndex] ) ; - pop2->aliasIndex = pop->index; - } - return( pop ); -} -/* -======================================================================== -*/ -PoP *PoPs_copyAddParticleIfNeeded( statusMessageReporting *smr, PoP *pop ) { -/* - If particle with name pop->name is already in popsRoot, return the address of the existing particle. - If particle is not in popsRoot then copy particle to a new 'PoP *', add the copied PoP to popsRoot and return its address. - A NULL is return if particle coping fails or adding particle to popsRoot fails. -*/ - - int index = PoPs_particleIndex( pop->name ); - PoP *newPoP; - - if( index >= 0 ) return( popsRoot.pops[index] ); - - if( ( newPoP = (PoP *) smr_malloc2( smr, sizeof( PoP ), 0, "newPoP" ) ) == NULL ) return( NULL ); - if( PoP_copyParticle( smr, newPoP, pop ) ) { - smr_freeMemory( (void **) &newPoP ); - return( NULL ); - } - if( PoPs_addParticleIfNeeded( smr, newPoP ) == NULL ) { - PoP_free( newPoP ); - return( NULL ); - } - return( newPoP ); -} -/* -======================================================================== -*/ -PoP *PoPs_addAliasIfNeeded( statusMessageReporting *smr, char const *name, char const *alias ) { - - PoP *pop = PoP_makeAlias( smr, name, alias ); - - if( pop != NULL ) { - if( pop->index < 0 ) { - if( PoPs_addParticleIfNeeded( smr, pop ) == NULL ) { - PoP_free( pop ); - return( NULL ); - } - } - } - - return( pop ); -} -/* -======================================================================== -*/ -int PoPs_numberOfParticle( void ) { - - return( popsRoot.numberOfParticles ); -} -/* -======================================================================== -*/ -int PoPs_particleIndex( char const *name ) { -/* - A negative number is return if particle is not in popsRoot. Else, the Id of the real (not aliased) particle is returned. -*/ - int index = PoPs_sortedParticleIndex( name ); - - if( index >= 0 ) index = PoPs_particleProperIndex( popsRoot.sorted[index]->index ); - return( index ); -} -/* -======================================================================== -*/ -int PoPs_particleIndex_smr( statusMessageReporting *smr, char const *name, char const *file, int line, char const *func ) { - - int index = PoPs_particleIndex( name ); - - if( index < 0 ) - smr_setReportError( smr, NULL, file, line, func, PoPs_smr_ID, PoPs_errorToken_badName, "particle '%s' not in PoPs", name ); - return( index ); -} -/* -======================================================================== -*/ -static int PoPs_particleProperIndex( int index ) { - - while( popsRoot.pops[index]->properIndex >= 0 ) index = popsRoot.pops[index]->properIndex; /* For alias particles. */ // Loop checking, 11.05.2015, T. Koi - return( index ); -} -/* -======================================================================== -*/ -static int PoPs_sortedParticleIndex( char const *name ) { -/* - If name is a particle in popsRoot, its index in the sorted list is returned; otherwise, - a negative number is returned. For a particle not found, its index would be -returnValue + 1 if added; -*/ - int low = 0, mid, high = popsRoot.numberOfParticles, iCmp; - - if( high == 0 ) return( -1 ); - while( ( high - low ) > 1 ) { - mid = ( low + high ) >> 1; - iCmp = strcmp( name, popsRoot.sorted[mid]->name ); - if( iCmp == 0 ) return( mid ); - if( iCmp > 0 ) { - low = mid; } - else { - high = mid; - } - } // Loop checking, 11.05.2015, T. Koi - if( high == 1 ) { /* First point is not checked as loop exits when ( high = 1 ) - ( low = 0 ) <= 1 ). */ - if( !strcmp( name, popsRoot.sorted[0]->name ) ) return( 0 ); /* First name is a match. */ - if( strcmp( name, popsRoot.sorted[0]->name ) < 0 ) return( -1 ); /* name is less than first name. */ - } - if( high < popsRoot.numberOfParticles ) { - if( strcmp( name, popsRoot.sorted[high]->name ) == 0 ) return( high ); - } - return( -high - 1 ); -} -/* -======================================================================== -*/ -double PoPs_getMassInUnitOf( statusMessageReporting *smr, char const *name, char const *unit ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( -1. ); - return( PoPs_getMassInUnitOf_atIndex( smr, index, unit ) ); -} -/* -======================================================================== -*/ -char const *PoPs_getName_atIndex( statusMessageReporting *smr, int index ) { - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); - return( NULL ); - } - return( popsRoot.pops[index]->name ); -} -/* -======================================================================== -*/ -double PoPs_getMassInUnitOf_atIndex( statusMessageReporting *smr, int index, char const *unit ) { - - double mass = -1.; - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); } - else { - mass = PoP_getMassInUnitOf( smr, popsRoot.pops[index], unit ); - } - - return( mass ); -} -/* -======================================================================== -*/ -enum PoPs_genre PoPs_getGenre( statusMessageReporting *smr, char const *name ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( PoPs_genre_invalid ); - return( popsRoot.pops[index]->genre ); -} -/* -======================================================================== -*/ -enum PoPs_genre PoPs_getGenre_atIndex( statusMessageReporting *smr, int index ) { - - enum PoPs_genre genre = PoPs_genre_invalid; - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); } - else { - genre = popsRoot.pops[index]->genre; - } - return( genre ); -} -/* -======================================================================== -*/ -int PoPs_getZ_A_l( statusMessageReporting *smr, char const *name, int *Z, int *A, int *l ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( -1 ); - return( PoPs_getZ_A_l_atIndex( smr, index, Z, A, l ) ); -} -/* -======================================================================== -*/ -int PoPs_getZ_A_l_atIndex( statusMessageReporting *smr, int index, int *Z, int *A, int *l ) { - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); - return( -1 ); - } - *Z = popsRoot.pops[index]->Z; - *A = popsRoot.pops[index]->A; - *l = 0; - return( 0 ); -} -/* -======================================================================== -*/ -int PoPs_hasNucleus( statusMessageReporting *smr, char const *name, int protonIsNucleus ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( -1 ); - return( PoPs_hasNucleus_atIndex( smr, index, protonIsNucleus ) ); -} -/* -======================================================================== -*/ -int PoPs_hasNucleus_atIndex( statusMessageReporting *smr, int index, int protonIsNucleus ) { -/* -* If an error is encountered, a negative value is returned. A value greater than 0 means the particle -* contains a nucleus (is an atom, ion or nucleus). Otherwise, a 0 is returned. -*/ - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); - return( -1 ); - } - if( ( popsRoot.pops[index]->genre == PoPs_genre_nucleus ) || ( popsRoot.pops[index]->genre == PoPs_genre_atom ) ) return( 1 ); - if( protonIsNucleus ) { - if( strcmp( "p", popsRoot.pops[index]->name ) == 0 ) return( 1 ); - } - return( 0 ); -} -/* -======================================================================== -*/ -char const *PoPs_getAtomsName( statusMessageReporting *smr, char const *name ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( NULL ); - return( PoPs_getAtomsName_atIndex( smr, index ) ); -} -/* -======================================================================== -*/ -char const *PoPs_getAtomsName_atIndex( statusMessageReporting *smr, int index ) { - - int atomIndex = PoPs_getAtomsIndex_atIndex( smr, index ); - - if( atomIndex < 0 ) return( NULL ); - return( popsRoot.pops[atomIndex]->name ); -} -/* -======================================================================== -*/ -int PoPs_getAtomsIndex( statusMessageReporting *smr, char const *name ) { - - int index = PoPs_particleIndex_smr( smr, name, __FILE__, __LINE__, __func__ ); - - if( index < 0 ) return( index ); - return( PoPs_getAtomsIndex_atIndex( smr, index ) ); -} -/* -======================================================================== -*/ -int PoPs_getAtomsIndex_atIndex( statusMessageReporting *smr, int index ) { - - char const *p = NULL; - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badIndex, "index %d not in PoPs", index ); - return( -1 ); - } - - if( popsRoot.pops[index]->genre == PoPs_genre_atom ) return( index ); - - if( strcmp( "p", popsRoot.pops[index]->name ) == 0 ) { - p = "H1"; } - else { - if( popsRoot.pops[index]->genre != PoPs_genre_nucleus ) return( -1 ); - else if( strcmp( "h2", popsRoot.pops[index]->name ) == 0 ) { - p = "H2"; } - else if( strcmp( "h3", popsRoot.pops[index]->name ) == 0 ) { - p = "H3"; } - else if( strcmp( "he3", popsRoot.pops[index]->name ) == 0 ) { - p = "He3"; } - else if( strcmp( "he4", popsRoot.pops[index]->name ) == 0 ) { - p = "He4"; - } - } - if( p != NULL ) return( PoPs_particleIndex_smr( smr, p, __FILE__, __LINE__, __func__ ) ); - return( -1 ); -} -/* -======================================================================== -*/ -PoP *PoPs_getParticle_atIndex( int index ) { - - if( ( index < 0 ) || ( index >= popsRoot.numberOfParticles ) ) return( NULL ); - return( popsRoot.pops[index] ); -} -/* -======================================================================== -*/ -char const *PoPs_genreTokenToString( enum PoPs_genre genre ) { - - if( genre < PoPs_genre_invalid ) return( NULL ); - if( genre > PoPs_genre_atom ) return( NULL ); - return( PoPs_genreStrings[genre] ); -} -/* -======================================================================== -*/ -void PoPs_print( int sorted ) { - - PoPs_write( stdout, sorted ); -} -/* -======================================================================== -*/ -void PoPs_write( FILE *f, int sorted ) { - - int i1, properIndex; - PoP *pop; - - fprintf( f, "Mass units: number of units = %d\n", unitsRoot.numberOfUnits ); - for( i1 = 0; i1 < unitsRoot.numberOfUnits; i1++ ) { - fprintf( f, " %s", unitsRoot.unsorted[i1] ); - } - fprintf( f, "\n\n" ); - fprintf( f, "Particles: number of particles = %d\n", popsRoot.numberOfParticles ); - fprintf( f, " name index genre mass hasNucleus alias info\n" ); - fprintf( f, " Z A l\n" ); - fprintf( f, " --------------------------------------------------------------------------------------------\n" ); - for( i1 = 0; i1 < popsRoot.numberOfParticles; i1++ ) { - if( sorted ) { - pop = popsRoot.sorted[i1]; } - else { - pop = popsRoot.pops[i1]; - } - properIndex = PoPs_particleProperIndex( pop->index ); - fprintf( f, " %-24s %6d %-10s %15.8e %-6s", pop->name, pop->index, PoPs_genreTokenToString( pop->genre ), - popsRoot.pops[properIndex]->mass, popsRoot.pops[properIndex]->massUnit ); - if( PoPs_hasNucleus( NULL, pop->name, 0 ) ) { - fprintf( f, " T" ); } - else { - fprintf( f, " " ); - } - if( PoPs_hasNucleus( NULL, pop->name, 1 ) ) { - fprintf( f, " T" ); } - else { - fprintf( f, " " ); - } - if( pop->Z + pop->A > 0 ) { - fprintf( f, " %3d %3d", pop->Z, pop->A ); - if( pop->l > 0 ) { - fprintf( f, " %d", pop->l ); } - else { - fprintf( f, " " ); - } } - else { - fprintf( f, " " ); - } - if( pop->genre == PoPs_genre_alias ) { - fprintf( f, " %s (%d)", popsRoot.pops[properIndex]->name, popsRoot.pops[properIndex]->index ); } - else { - int aliasIndex; - - for( aliasIndex = pop->aliasIndex; aliasIndex >= 0; aliasIndex = popsRoot.pops[aliasIndex]->aliasIndex ) fprintf( f, " %d", aliasIndex ); - } - fprintf( f, "\n" ); - } -} - -/* -========================== PoP functions ========================== -*/ -/* -======================================================================== -*/ -PoP *PoP_new( statusMessageReporting *smr ) { - - PoP *pop; - - if( ( pop = (PoP *) smr_malloc2( smr, sizeof( PoP ), 0, "pop" ) ) == NULL ) return( NULL ); - if( PoP_initialize( smr, pop ) != 0 ) pop = PoP_free( pop ); - return( pop ); -} -/* -======================================================================== -*/ -int PoP_initialize( statusMessageReporting * /*smr*/, PoP *pop ) { - - pop->index = -1; - pop->properIndex = -1; - pop->aliasIndex = -1; - pop->genre = PoPs_genre_unknown; - pop->name = NULL; - pop->Z = 0; - pop->A = 0; - pop->mass = 0.0; - pop->massUnit = NULL; - return( 0 ); -} -/* -======================================================================== -*/ -int PoP_release( PoP *pop ) { - - if( pop->name != NULL ) smr_freeMemory( (void **) &(pop->name ) ); - PoP_initialize( NULL, pop ); /* Make it clean in case someone trys to use if. */ - return( 0 ); -} -/* -======================================================================== -*/ -PoP *PoP_free( PoP *pop ) { - - PoP_release( pop ); - smr_freeMemory( (void **) &pop ); - return( NULL ); -} -/* -======================================================================== -*/ -int PoP_copyParticle( statusMessageReporting *smr, PoP *desc, PoP *src ) { - - desc->index = -1; - desc->properIndex = src->properIndex; - desc->aliasIndex = src->aliasIndex; - desc->genre = src->genre; - if( ( desc->name = smr_allocateCopyString2( smr, src->name, "desc->name" ) ) == NULL ) return( 1 ); - desc->Z = src->Z; - desc->A = src->A; - desc->l = src->l; - desc->mass = src->mass; - desc->massUnit = src->massUnit; - - return( 0 ); -} -/* -======================================================================== -*/ -PoP *PoP_makeParticle( statusMessageReporting *smr, enum PoPs_genre genre, char const *name, double mass, char const *massUnit ) { - - PoP *pop; - - if( ( pop = PoP_new( smr ) ) == NULL ) return( NULL ); - if( ( pop->name = smr_allocateCopyString2( smr, name, "name" ) ) == NULL ) { - PoP_free( pop ); - return( NULL ); - } - pop->genre = genre; - pop->mass = mass; - if( ( pop->massUnit = unitsDB_addUnitIfNeeded( smr, massUnit ) ) == NULL ) pop = PoP_free( pop ); - return( pop ); -} -/* -======================================================================== -*/ -int PoP_setZ_A_l( statusMessageReporting * /*smr*/, PoP *pop, int Z, int A, int l ) { - - pop->Z = Z; - pop->A = A; - pop->l = l; - return( 0 ); -} -/* -======================================================================== -*/ -int PoP_getIndex( PoP *pop ) { - - return( pop->index ); -} -/* -======================================================================== -*/ -char const *PoP_getName( PoP *pop ) { - - return( pop->name ); -} -/* -======================================================================== -*/ -double PoP_getMassInUnitOf( statusMessageReporting *smr, PoP *pop, char const *unit ) { - - double mass = -1., ratio; - /* PoP *pop_ = pop;*/ - - /*if( pop->genre == PoPs_genre_alias ) pop_ = popsRoot.pops[PoPs_particleProperIndex( pop->index )];*/ - if( PoPs_unitConversionRatio( pop->massUnit, unit, &ratio ) != 0 ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badUnitConversion, "could not convert unit '%s' to '%s'", pop->massUnit, unit ); } - else { - mass = pop->mass * ratio; - } - - return( mass ); -} - -/* -========================== alias functions ========================== -*/ -/* -======================================================================== -*/ -PoP *PoP_makeAlias( statusMessageReporting *smr, char const *name, char const *alias ) { - - int properIndex = PoPs_particleIndex( name ), aliasIndex = PoPs_particleIndex( alias ); - PoP *pop; - - if( properIndex < 0 ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "proper particle '%s' not in PoPs for alias '%s'", name, alias ); - return( NULL ); - } - if( aliasIndex >= 0 ) { /* alias has already been defined. */ - PoP *truePop = popsRoot.pops[aliasIndex]; - - for( pop = truePop; strcmp( alias, pop->name ); pop = popsRoot.pops[aliasIndex] ) aliasIndex = pop->aliasIndex; - if( pop->genre != PoPs_genre_alias ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "particle '%s' already in PoPs and not an alias", alias ); - return( NULL ); - } - if( pop->properIndex != properIndex ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "particle '%s' already an alias for '%s', cannot re-alias to '%s'", - alias, truePop->name, name ); - return( NULL ); - } } - else { - if( ( pop = PoP_new( smr ) ) == NULL ) return( NULL ); - if( ( pop->name = smr_allocateCopyString2( smr, alias, "name" ) ) == NULL ) { - PoP_free( pop ); - return( NULL ); - } - pop->properIndex = properIndex; - pop->genre = PoPs_genre_alias; - } - return( pop ); -} - -/* -========================== unitsDB functions ========================= -*/ -/* -======================================================================== -*/ -static int unitsDB_release( void ) { - - int i; - - for( i = 0; i < unitsRoot.numberOfUnits; i++ ) smr_freeMemory( (void **) &(unitsRoot.unsorted[i]) ); - smr_freeMemory( (void **) &(unitsRoot.unsorted) ); - unitsRoot.numberOfUnits = 0; - unitsRoot.allocated = 0; - return( 0 ); -} -/* -======================================================================== -*/ -char const *unitsDB_addUnitIfNeeded( statusMessageReporting *smr, char const *unit ) { - - int i; - - for( i = 0; i < unitsRoot.numberOfUnits; i++ ) { - if( strcmp( unit, unitsRoot.unsorted[i] ) == 0 ) return( unitsRoot.unsorted[i] ); - } - if( unitsRoot.numberOfUnits == unitsRoot.allocated ) { - int size = unitsRoot.allocated + 20; - char const **unsorted = (char const **) smr_malloc2( smr, size * sizeof( char * ), 0, "unsorted" ); - - if( unsorted == NULL ) return( NULL ); - for( i = 0; i < unitsRoot.numberOfUnits; i++ ) unsorted[i] = unitsRoot.unsorted[i]; - smr_freeMemory( (void **) &(unitsRoot.unsorted) ); - unitsRoot.unsorted = unsorted; - unitsRoot.allocated = size; - } - if( ( unitsRoot.unsorted[unitsRoot.numberOfUnits] = smr_allocateCopyString2( smr, unit, "unitsRoot.unsorted[unitsRoot.numberOfUnits]" ) ) == NULL ) - return( NULL ); - unitsRoot.numberOfUnits++; - return( unitsRoot.unsorted[unitsRoot.numberOfUnits - 1] ); -} -/* -======================================================================== -*/ -int unitsDB_index( statusMessageReporting * /*smr*/, char const *unit ) { - - int i; - - for( i = 0; i < unitsRoot.numberOfUnits; i++ ) { - if( !strcmp( unit, unitsRoot.unsorted[i] ) ) return( i ); - } - return( -1 ); -} -/* -======================================================================== -*/ -char const *unitsDB_stringFromIndex( statusMessageReporting *smr, int index ) { - - if( ( index < 0 ) || ( index >= unitsRoot.numberOfUnits ) ) { - smr_setReportError2( smr, PoPs_smr_ID, 1, "index = %d out of baounds [0 to %d)", index, unitsRoot.numberOfUnits ); - return( NULL ); - } - return( unitsRoot.unsorted[index] ); -} -/* -======================================================================== -*/ -int PoPs_unitConversionRatio( char const *_from, char const *_to, double *ratio ) { - - int i, n = sizeof( conversions ) / sizeof( conversions[0] ); - - *ratio = 1.; - if( strcmp( _from, _to ) == 0 ) return( 0 ); - for( i = 0; i < n; i++ ) { - if( strcmp( conversions[i]._from, _from ) == 0 ) { - if( strcmp( conversions[i]._to, _to ) == 0 ) { - *ratio = conversions[i].ratio; - return( 0 ); - } } - else if( strcmp( conversions[i]._to, _from ) == 0 ) { - if( strcmp( conversions[i]._from, _to ) == 0 ) { - *ratio = 1. / conversions[i].ratio; - return( 0 ); - } - } - } - return( 1 ); -} -#ifdef PoPs_MPI -#include "PoPs_Bcast_private.h" -/* -======================================================================== -*/ -int PoPs_Bcast( statusMessageReporting *smr, MPI_Comm comm, int rank ) { - - return( PoPs_Bcast2( smr, comm, rank, &unitsRoot, &popsRoot ) ); -} -#endif - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/PoPs_Bcast.cc b/source/processes/hadronic/models/lend/src/PoPs_Bcast.cc deleted file mode 100644 index 9fb27eaef8..0000000000 --- a/source/processes/hadronic/models/lend/src/PoPs_Bcast.cc +++ /dev/null @@ -1,243 +0,0 @@ -#ifdef PoPs_MPI -#include -#include -#include - -#include "PoPs.h" -#include "PoPs_private.h" -#include "PoPs_Bcast_private.h" - -#define NumberOfBcastArrays 3 - -enum PoPs_Bcast_mode { PoPs_Bcast_mode_count, PoPs_Bcast_mode_pack, PoPs_Bcast_mode_unpack }; - -typedef struct PoPs_Bcast_info { - enum PoPs_Bcast_mode mode; - int int_count, char_count, double_count; - int *int_array; - char *char_array; - double *double_array; -} PoPs_Bcast_info; - -static int PoPs_Bcast3( statusMessageReporting *smr, MPI_Comm comm, PoPs_Bcast_info *info, unitsDB *unitsRoot, PoPs *popsRoot ); -static int PoPs_Bcast_PoPs( statusMessageReporting *smr, PoPs_Bcast_info *info, int index, PoPs *popsRoot ); -static int PoPs_Bcast_PoPs2( statusMessageReporting *smr, PoPs_Bcast_info *info, PoP *pop ); -static int PoPs_Bcast_int( statusMessageReporting *smr, PoPs_Bcast_info *info, int *value ); -static int PoPs_Bcast_charAllocate( statusMessageReporting *smr, PoPs_Bcast_info *info, char **value ); -static int PoPs_Bcast_double( statusMessageReporting *smr, PoPs_Bcast_info *info, double *value ); -/* -======================================================================== -*/ -int PoPs_Bcast2( statusMessageReporting *smr, MPI_Comm comm, int bossRank, unitsDB *unitsRoot, PoPs *popsRoot ) { - - int myRank, status; - int description[NumberOfBcastArrays]; - PoPs_Bcast_info info = { PoPs_Bcast_mode_count, 0, 0, 0, NULL, NULL, NULL }; - - if( ( status = MPI_Errhandler_set( comm, MPI_ERRORS_RETURN ) ) != 0 ) return( status ); -/* New way but not on all systems yet. - if( ( status = MPI_Comm_set_errhandler( comm, MPI_ERRORS_RETURN ) ) != 0 ) return( status ); -*/ - if( ( status = MPI_Comm_rank( comm, &myRank ) ) != 0 ) return( status ); - - if( myRank == bossRank ) { - info.mode = PoPs_Bcast_mode_count; - if( ( status = PoPs_Bcast3( smr, comm, &info, unitsRoot, popsRoot ) ) != 0 ) return( status ); - description[0] = info.int_count; - description[1] = info.char_count; - description[2] = info.double_count; - if( ( info.int_array = (int *) smr_malloc2( smr, info.int_count * sizeof( int ), 1, "info.int_array" ) ) == NULL ) goto err; - if( ( info.char_array = (char *) smr_malloc2( smr, info.char_count * sizeof( char ), 1, "info.char_array" ) ) == NULL ) goto err; - if( ( info.double_array = (double *) smr_malloc2( smr, info.double_count * sizeof( double ), 1, "info.double_array" ) ) == NULL ) goto err; - - info.mode = PoPs_Bcast_mode_pack; - info.int_count = 0; - info.char_count = 0; - info.double_count = 0; - if( ( status = PoPs_Bcast3( smr, comm, &info, unitsRoot, popsRoot ) ) != 0 ) return( status ); - if( info.int_count != description[0] ) { - smr_setReportError2( smr, PoPs_smr_ID, 1, "int counting count = %d != packing count = %d", info.int_count, description[0] ); - goto err; - } - if( info.char_count != description[1] ) { - smr_setReportError2( smr, PoPs_smr_ID, 1, "char counting count = %d != packing count = %d", info.char_count, description[1] ); - goto err; - } - if( info.double_count != description[2] ) { - smr_setReportError2( smr, PoPs_smr_ID, 1, "double counting count = %d != packing count = %d", info.double_count, description[2] ); - goto err; - } - } - - if( ( status = MPI_Bcast( description, NumberOfBcastArrays, MPI_INT, bossRank, comm ) ) != 0 ) goto err; - - if( myRank != bossRank ) { - if( ( info.int_array = (int *) smr_malloc2( smr, description[0] * sizeof( int ), 1, "info.int_array (2)" ) ) == NULL ) goto err; - if( ( info.char_array = (char *) smr_malloc2( smr, description[1] * sizeof( char ), 1, "info.char_array (2)" ) ) == NULL ) goto err; - if( ( info.double_array = (double *) smr_malloc2( smr, description[2] * sizeof( double ), 1, "info.double_array (2)" ) ) == NULL ) goto err; - } - if( ( status = MPI_Bcast( info.int_array, description[0], MPI_INT, bossRank, comm ) ) != 0 ) goto err; - if( ( status = MPI_Bcast( info.char_array, description[1], MPI_CHAR, bossRank, comm ) ) != 0 ) goto err; - if( ( status = MPI_Bcast( info.double_array, description[2], MPI_DOUBLE, bossRank, comm ) ) != 0 ) goto err; - - if( myRank != bossRank ) { - info.mode = PoPs_Bcast_mode_unpack; - if( ( status = PoPs_Bcast3( smr, comm, &info, unitsRoot, popsRoot ) ) != 0 ) goto err; - } - - if( info.int_array != NULL ) smr_freeMemory( (void **) &(info.int_array) ); - if( info.char_array != NULL ) smr_freeMemory( (void **) &(info.char_array) ); - if( info.double_array != NULL ) smr_freeMemory( (void **) &(info.double_array) ); - - return( 0 ); - -err: - if( info.int_array != NULL ) smr_freeMemory( (void **) &(info.int_array) ); - if( info.char_array != NULL ) smr_freeMemory( (void **) &(info.char_array) ); - if( info.double_array != NULL ) smr_freeMemory( (void **) &(info.double_array) ); - if( unitsRoot->unsorted != NULL ) smr_freeMemory( (void **) &(unitsRoot->unsorted) ); - if( popsRoot->pops != NULL ) smr_freeMemory( (void **) &(popsRoot->pops) ); - if( popsRoot->sorted != NULL ) smr_freeMemory( (void **) &(popsRoot->sorted) ); - return( -1 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast3( statusMessageReporting *smr, MPI_Comm comm, PoPs_Bcast_info *info, unitsDB *unitsRoot, PoPs *popsRoot ) { - - int i, status, numberOfUnits, numberOfParticles; - - if( info->mode == PoPs_Bcast_mode_unpack ) PoPs_releasePrivate( smr ); - if( ( status = PoPs_Bcast_int( smr, info, &(unitsRoot->numberOfUnits) ) ) != 0 ) return( status ); - numberOfUnits = unitsRoot->numberOfUnits; - if( info->mode == PoPs_Bcast_mode_unpack ) { - unitsRoot->allocated = unitsRoot->numberOfUnits; - unitsRoot->numberOfUnits = 0; - if( ( unitsRoot->unsorted = (char const **) smr_malloc2( smr, unitsRoot->allocated * sizeof( char const ** ), 1, "unitsRoot->unsorted" ) ) == NULL ) return( -1 ); - } - for( i = 0; i < numberOfUnits; i++ ) { - if( ( status = PoPs_Bcast_charAllocate( smr, info, (char **) &(unitsRoot->unsorted[i]) ) ) != 0 ) return( status ); - if( info->mode == PoPs_Bcast_mode_unpack ) unitsRoot->numberOfUnits++; - } - - if( ( status = PoPs_Bcast_int( smr, info, &(popsRoot->numberOfParticles) ) ) != 0 ) return( status ); - numberOfParticles = popsRoot->numberOfParticles; - if( info->mode == PoPs_Bcast_mode_unpack ) { - popsRoot->allocated = popsRoot->numberOfParticles; - popsRoot->numberOfParticles = 0; - if( ( popsRoot->pops = (PoP **) smr_malloc2( smr, popsRoot->allocated * sizeof( PoP * ), 1, "popsRoot->pops" ) ) == NULL ) return( -1 ); - if( ( popsRoot->sorted = (PoP **) smr_malloc2( smr, popsRoot->allocated * sizeof( PoP * ), 1, "popsRoot->unsorted" ) ) == NULL ) return( -1 ); - } - for( i = 0; i < numberOfParticles; i++ ) { - if( ( status = PoPs_Bcast_PoPs( smr, info, i, popsRoot ) ) != 0 ) return( status ); - } - return( 0 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast_PoPs( statusMessageReporting *smr, PoPs_Bcast_info *info, int index, PoPs *popsRoot ) { - - int status; - PoP pop; - - if( info->mode != PoPs_Bcast_mode_unpack ) return( PoPs_Bcast_PoPs2( smr, info, popsRoot->pops[index] ) ); - if( ( status = PoPs_Bcast_PoPs2( smr, info, &pop ) ) != 0 ) return( status ); - return( 0 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast_PoPs2( statusMessageReporting *smr, PoPs_Bcast_info *info, PoP *pop ) { - - int status, n = 0; - - if( ( status = PoPs_Bcast_int( smr, info, &(pop->index) ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_int( smr, info, &(pop->properIndex) ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_int( smr, info, &(pop->aliasIndex) ) ) != 0 ) return( status ); /* Not needed, see below. */ - if( ( status = PoPs_Bcast_int( smr, info, (int *) &(pop->genre) ) ) != 0 ) return( status ); - - if( ( status = PoPs_Bcast_int( smr, info, &(pop->Z) ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_int( smr, info, &(pop->A) ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_int( smr, info, &(pop->l) ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_double( smr, info, &(pop->mass) ) ) != 0 ) return( status ); - - if( info->mode == PoPs_Bcast_mode_pack ) { - n = -1; - if( pop->massUnit != NULL ) { - if( ( n = unitsDB_index( smr, pop->massUnit ) ) < 0 ) return( n ); - } - } - if( ( status = PoPs_Bcast_int( smr, info, &n ) ) != 0 ) return( status ); - if( ( status = PoPs_Bcast_charAllocate( smr, info, (char **) &(pop->name) ) ) != 0 ) return( status ); - - if( info->mode == PoPs_Bcast_mode_unpack ) { - pop->aliasIndex = -1; /* Reset here as it will be set in PoPs_addParticleIfNeeded via PoPs_copyAddParticleIfNeeded. */ - - if( n < 0 ) { - pop->massUnit = NULL; } - else { - if( ( pop->massUnit = unitsDB_stringFromIndex( smr, n ) ) == NULL ) goto err; - } - if( PoPs_copyAddParticleIfNeeded( smr, pop ) == NULL ) goto err; - - if( pop->name != NULL ) smr_freeMemory( (void **) &(pop->name) ); - } - - return( 0 ); - -err: - if( info->mode == PoPs_Bcast_mode_unpack ) { - if( pop->name != NULL ) smr_freeMemory( (void **) &(pop->name) ); - } - return( -1 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast_int( statusMessageReporting *smr, PoPs_Bcast_info *info, int *value ) { - - if( info->mode == PoPs_Bcast_mode_pack ) { - info->int_array[info->int_count] = *value; } - else if( info->mode == PoPs_Bcast_mode_unpack ) { - *value = info->int_array[info->int_count]; - } - info->int_count++; - return( 0 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast_charAllocate( statusMessageReporting *smr, PoPs_Bcast_info *info, char **value ) { - - int i, n = 0, status; - - if( info->mode != PoPs_Bcast_mode_unpack ) { - n = (int) strlen( *value ) + 1; - if( ( status = PoPs_Bcast_int( smr, info, &n ) ) != 0 ) return( status ); - if( info->mode == PoPs_Bcast_mode_pack ) { - for( i = 0; i < n; i++ ) info->char_array[info->char_count + i] = (*value)[i]; - } } - else { - if( ( status = PoPs_Bcast_int( smr, info, &n ) ) != 0 ) return( status ); - if( ( *value = (char *) smr_malloc2( smr, n * sizeof( char ), 0, "*value" ) ) == NULL ) return( -1 ); - for( i = 0; i < n; i++ ) (*value)[i] = info->char_array[info->char_count + i]; - } - info->char_count += n; - - return( 0 ); -} -/* -======================================================================== -*/ -static int PoPs_Bcast_double( statusMessageReporting *smr, PoPs_Bcast_info *info, double *value ) { - - if( info->mode == PoPs_Bcast_mode_pack ) { - info->double_array[info->double_count] = *value; } - else if( info->mode == PoPs_Bcast_mode_unpack ) { - *value = info->double_array[info->double_count]; - } - info->double_count++; - return( 0 ); -} -#endif /* End of #ifdef PoPs_MPI */ diff --git a/source/processes/hadronic/models/lend/src/PoPs_data.cc b/source/processes/hadronic/models/lend/src/PoPs_data.cc deleted file mode 100644 index 89530eb566..0000000000 --- a/source/processes/hadronic/models/lend/src/PoPs_data.cc +++ /dev/null @@ -1,142 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "PoPs.h" -#include "PoPs_private.h" -#include "PoPs_data.h" - -#ifdef POPS_BDFLS -#include -#endif - -#if defined __cplusplus - extern "C" { -namespace GIDI { -using namespace GIDI; -#endif - -static double PoPs_getBDFLS_mass( char const *name, PoP *pop, double mass ); - -#if defined __cplusplus - } - } -#endif -/* -======================================================================== -*/ - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -int PoPs_particleReadDatabase( statusMessageReporting *smr, char const * /*name*/ ) { - - int i1, n1 = sizeof( PoPDatas ) / sizeof( PoPDatas[0] ); - PoP *pop; - char ZAName[32]; - - for( i1 = 0; i1 < n1; ++i1 ) { - if( ( pop = PoPs_particleCreateLoadInfo( smr, PoPDatas[i1].name ) ) == NULL ) return( 1 ); - if( PoPs_addParticleIfNeeded( smr, pop ) == pop ) { - if( ( pop->genre == PoPs_genre_atom ) && ( pop->Z < 110 ) ) { - snprintf( ZAName, sizeof ZAName, "%d%.3d", pop->Z, pop->A ); - if( lPoPs_addParticleIfNeeded( smr, ZAName, "LLNL" ) < 0 ) return( 1 ); - } } - else { - PoP_free( pop ); - } - if( smr_isOk( smr ) == 0 ) return( 1 ); - } - if( lPoPs_addParticleIfNeeded( smr, "gamma", "LLNL" ) < 0 ) return( 1 ); - if( lPoPs_addParticleIfNeeded( smr, "g", "LLNL" ) < 0 ) return( 1 ); - return( 0 ); -} -/* -======================================================================== -*/ -PoP *PoPs_particleCreateLoadInfo( statusMessageReporting *smr, const char *name ) { - - PoP *pop; - - if( ( pop = PoP_new( smr ) ) != NULL ) { - if( PoPs_particleLoadInfo( smr, name, pop ) != 0 ) pop = PoP_free( pop ); - } - return( pop ); -} -/* -======================================================================== -*/ -int PoPs_particleLoadInfo( statusMessageReporting *smr, const char *name, PoP *pop ) { - - int i, n = sizeof( PoPDatas ) / sizeof( PoPDatas[0] ); - - if( ( pop->name = smr_allocateCopyString2( smr, name, "name" ) ) == NULL ) return( -1 ); - for( i = 0; i < n; i++ ) { - if( strcmp( PoPDatas[i].name, name ) == 0 ) { - pop->genre = PoPDatas[i].genre; - pop->Z = PoPDatas[i].Z; - pop->A = 0; - if( PoPDatas[i].N >= 0 ) pop->A = pop->Z + PoPDatas[i].N; - pop->l = PoPDatas[i].nuclearLevel; - pop->mass = PoPs_getBDFLS_mass( name, pop, PoPDatas[i].mass ); - pop->massUnit = unitsDB_addUnitIfNeeded( smr, "amu" ); - return( 0 ); - } - } - smr_freeMemory( (void **) &(pop->name) ); - smr_setReportError2( smr, smr_unknownID, 1, "particle %s not in database", name ); - return( -1 ); -} - -static void *BDFLS_Data = NULL; - -/* -======================================================================== -*/ -static double PoPs_getBDFLS_mass( char const * /*name*/, PoP * /*pop*/, double mass ) { - -#ifdef POPS_BDFLS - - int ZA = 1000 * pop->Z + pop->A; - double mass_ = -1; - - if( BDFLS_Data == NULL ) return( mass ); - if( ZA > 0 ) { - mass_ = cbdflsGetMass( (cbdfls_file *) BDFLS_Data, ZA ); } - else if( pop->genre == PoPs_genre_lepton ) { - if( pop->name[0] == 'e' ) mass_ = cbdflsGetMass( (cbdfls_file *) BDFLS_Data, 8 ); - } - if( mass_ < 0 ) mass_ = mass; - mass = mass_; -#endif - return( mass ); -} -/* -======================================================================== -*/ -int PoPs_setBDFLS_File( char const *name ) { - -#ifdef POPS_BDFLS - - cbdfls_file *p; - cbdflsErrors Error; - - if( BDFLS_Data != NULL ) cbdflsRelease( (cbdfls_file *) BDFLS_Data ); - BDFLS_Data = NULL; - if( name != NULL ) { - if( ( p = cbdflsOpen( name, &Error ) ) == NULL ) return( 1 ); - BDFLS_Data = (void *) p; - } -#else - if( name == NULL ) BDFLS_Data = NULL; /* Do something with name so compilers do not complain. */ -#endif - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/PoPs_mass.cc b/source/processes/hadronic/models/lend/src/PoPs_mass.cc deleted file mode 100644 index d8f1ad0802..0000000000 --- a/source/processes/hadronic/models/lend/src/PoPs_mass.cc +++ /dev/null @@ -1,932 +0,0 @@ -/* -# <> -# <> -*/ - -/* - This stuff is deprecated and should be removed soon (10-Apr-2013). -*/ - - -#include - -#include "PoPs_mass.h" - -#if defined __cplusplus - namespace GIDI { - using namespace GIDI; -#endif - -#define e_Mass 5.4857990943e-4 /* electron mass in AMU */ -#define Co58_Mass 5.7935752814e+01 -#define Co58_e1Level_Mass 2.67205e-05 /* Co58 first nuclear level (24890 eV/c**2) in amu */ - -#define Ag110_Mass 1.09906107231e+02 -#define Ag110_e2Level_Mass 1.2624e-04 /* Ag110 second nuclear level (117590 eV/c**2) in amu */ -#define Cd115_Mass 1.14905430969e+02 -#define Cd115_e1Level_Mass 1.9431e-04 /* Cd155 first nuclear level (1.81e5 eV/c**2) in amu */ - -#define Te127_Mass 1.26905226336e+02 -#define Te127_e2Level_Mass 9.4751e-05 /* Te127 second nuclear level (88260 eV/c**2) in amu */ -#define Te129_Mass 1.28906598238e+02 -#define Te129_e1Level_Mass 1.1302e-04 /* Te129 second nuclear level (105280 eV/c**2) in amu */ - -#define Pm148_Mass 1.47917474618e+02 -#define Pm148_e2Level_Mass 1.4804e-04 /* Pm148 second nuclear level (137900 eV/c**2) in amu */ -#define Ho166_Mass 1.65932284162e+02 -#define Ho166_e1Level_Mass 6.4252e-06 /* Ho166first nuclear level (5985 eV/c**2) in amu */ - - -#define Am242_Mass 2.42059549159e+02 -#define Am242_e2Level_Mass 5.153e-05 /* Am242's second nuclear level (48000 eV/c**2) in amu */ -#define Am244_Mass 2.44064284847e+02 -#define Am244_e1Level_Mass 9.4472e-05 /* Am244's second nuclear level (87999.9 eV/c**2) in amu */ - -#define Es254_Mass 2.54088022021e+02 -#define Es254_e2Level_Mass 9.0392e-05 /* Es254 second nuclear level (84200 eV/c**2) in amu */ - -/* -Special symbols for undefined elements. - Z Symbol - ----------- - 113 Uut - 114 Uuq - 115 Uup - 116 Uuh - 117 Uus - 118 Uuo -*/ - -struct ZAMass { - char const *symbol; - double mass; -}; - -/* Most of the mass data from Ame2003 */ - -static struct ZAMass ZAMasses[] = { - { "Tm180", 179.95792495 }, /* Needed by ENDF/B-VII.1 W186 but not in Wadi, et al. */ - { "Pt203", 202.976969588582 }, /* Needed by ENDF/B-VII.1 Hg204 but not in Wadi, et al. */ - { "Co58_e1", Co58_Mass + Co58_e1Level_Mass }, - { "Ag110_e2", Ag110_Mass + Ag110_e2Level_Mass }, - { "Cd115_e1", Cd115_Mass + Cd115_e1Level_Mass }, - { "Te127_e2", Te127_Mass + Te127_e2Level_Mass }, - { "Te129_e1", Te129_Mass + Te129_e1Level_Mass }, - { "Pm148_e2", Pm148_Mass + Pm148_e2Level_Mass }, - { "Ho166_e1", Ho166_Mass + Ho166_e1Level_Mass }, - { "Am242_e2", Am242_Mass + Am242_e2Level_Mass }, - { "Am244_e1", Am244_Mass + Am244_e1Level_Mass }, - { "Es254_e2", Es254_Mass + Es254_e2Level_Mass }, - { "FissionProductENDL99120", 117.5 }, - { "FissionProductENDL99121", 116.546 }, - { "FissionProductENDL99122", 118.544 }, - { "FissionProductENDL99125", 117.5 }, - { "photon", 0. }, - { "e-", e_Mass }, { "e+", e_Mass }, - { "n", 1.00866491574e+00 }, { "p", 1.007276466812e+00 }, - { "h2", 2.01355321271e+00 }, { "h3", 3.015500713e+00 }, - { "he3", 3.01493223469e+00 }, { "he4", 4.0015061747e+00 }, - { "H_natural", 1.0079e+00 }, { "H1", 1.00782503207e+00 }, { "H2", 2.01410177785e+00 }, - { "H3", 3.01604927767e+00 }, { "H4", 4.027806424e+00 }, { "H5", 5.035311488e+00 }, { "H6", 6.044942594e+00 }, - { "H7", 7.052749e+00 }, { "He_natural", 4.0026e+00 }, { "He3", 3.01602931914e+00 }, { "He4", 4.00260325415e+00 }, - { "He5", 5.012223624e+00 }, { "He6", 6.018889124e+00 }, { "He7", 7.028020618e+00 }, { "He8", 8.033921897e+00 }, - { "He9", 9.043950286e+00 }, { "He10", 1.0052398837e+01 }, { "Li_natural", 6.941e+00 }, { "Li3", 3.030775e+00 }, - { "Li4", 4.027185558e+00 }, { "Li5", 5.0125378e+00 }, { "Li6", 6.015122794e+00 }, { "Li7", 7.016004548e+00 }, - { "Li8", 8.022487362e+00 }, { "Li9", 9.026789505e+00 }, { "Li10", 1.0035481259e+01 }, { "Li11", 1.1043797715e+01 }, - { "Li12", 1.205378e+01 }, { "Be_natural", 9.01218e+00 }, { "Be5", 5.04079e+00 }, { "Be6", 6.019726317e+00 }, - { "Be7", 7.016929828e+00 }, { "Be8", 8.005305103e+00 }, { "Be9", 9.012182201e+00 }, { "Be10", 1.0013533818e+01 }, - { "Be11", 1.1021657749e+01 }, { "Be12", 1.2026920737e+01 }, { "Be13", 1.3035693007e+01 }, { "Be14", 1.404289292e+01 }, - { "Be15", 1.505346e+01 }, { "Be16", 1.606192e+01 }, { "B_natural", 1.081e+01 }, { "B6", 6.04681e+00 }, - { "B7", 7.029917901e+00 }, { "B8", 8.024607233e+00 }, { "B9", 9.013328782e+00 }, { "B10", 1.0012936992e+01 }, - { "B11", 1.1009305406e+01 }, { "B12", 1.2014352104e+01 }, { "B13", 1.3017780217e+01 }, { "B14", 1.4025404009e+01 }, - { "B15", 1.5031103021e+01 }, { "B16", 1.6039808829e+01 }, { "B17", 1.7046989906e+01 }, { "B18", 1.805617e+01 }, - { "B19", 1.906373e+01 }, { "C_natural", 1.2011e+01 }, { "C8", 8.037675025e+00 }, { "C9", 9.031036689e+00 }, - { "C10", 1.0016853228e+01 }, { "C11", 1.1011433613e+01 }, { "C12", 1.2e+01 }, { "C13", 1.300335483778e+01 }, - { "C14", 1.40032419887e+01 }, { "C15", 1.5010599256e+01 }, { "C16", 1.6014701252e+01 }, { "C17", 1.7022586116e+01 }, - { "C18", 1.8026759354e+01 }, { "C19", 1.9034805018e+01 }, { "C20", 2.0040319754e+01 }, { "C21", 2.104934e+01 }, - { "C23", 2.20572e+01 }, { "N_natural", 1.40067e+01 }, { "N10", 1.0041653674e+01 }, { "N11", 1.1026090956e+01 }, - { "N12", 1.2018613197e+01 }, { "N13", 1.3005738609e+01 }, { "N14", 1.400307400478e+01 }, { "N15", 1.500010889823e+01 }, - { "N16", 1.6006101658e+01 }, { "N17", 1.7008450261e+01 }, { "N18", 1.8014078959e+01 }, { "N19", 1.9017028697e+01 }, - { "N20", 2.0023365807e+01 }, { "N21", 2.102710824e+01 }, { "N22", 2.2034394934e+01 }, { "N23", 2.304122e+01 }, - { "N24", 2.405104e+01 }, { "N25", 2.506066e+01 }, { "O_natural", 1.59994e+01 }, { "O12", 1.2034404895e+01 }, - { "O13", 1.3024812213e+01 }, { "O14", 1.400859625e+01 }, { "O15", 1.5003065617e+01 }, { "O16", 1.599491461956e+01 }, - { "O17", 1.6999131703e+01 }, { "O18", 1.7999161001e+01 }, { "O19", 1.900358013e+01 }, { "O20", 2.0004076742e+01 }, - { "O21", 2.1008655886e+01 }, { "O22", 2.2009966947e+01 }, { "O23", 2.3015687659e+01 }, { "O24", 2.4020472917e+01 }, - { "O25", 2.502946e+01 }, { "O26", 2.603834e+01 }, { "O27", 2.704826e+01 }, { "O28", 2.805781e+01 }, - { "F_natural", 1.8998403e+01 }, { "F14", 1.403506e+01 }, { "F15", 1.5018009103e+01 }, { "F16", 1.6011465724e+01 }, - { "F17", 1.7002095237e+01 }, { "F18", 1.8000937956e+01 }, { "F19", 1.8998403224e+01 }, { "F20", 1.9999981315e+01 }, - { "F21", 2.0999948951e+01 }, { "F22", 2.2002998815e+01 }, { "F23", 2.3003574631e+01 }, { "F24", 2.4008115485e+01 }, - { "F25", 2.5012101747e+01 }, { "F26", 2.6019615555e+01 }, { "F27", 2.7026760086e+01 }, { "F28", 2.803567e+01 }, - { "F29", 2.904326e+01 }, { "F30", 3.00525e+01 }, { "F31", 3.1060429e+01 }, { "Ne_natural", 2.0179e+01 }, - { "Ne16", 1.6025761262e+01 }, { "Ne17", 1.7017671504e+01 }, { "Ne18", 1.8005708213e+01 }, { "Ne19", 1.9001880248e+01 }, - { "Ne20", 1.999244017542e+01 }, { "Ne21", 2.0993846684e+01 }, { "Ne22", 2.1991385113e+01 }, { "Ne23", 2.2994466904e+01 }, - { "Ne24", 2.3993610779e+01 }, { "Ne25", 2.4997736888e+01 }, { "Ne26", 2.6000461206e+01 }, { "Ne27", 2.7007589903e+01 }, - { "Ne28", 2.8012071575e+01 }, { "Ne29", 2.9019385933e+01 }, { "Ne30", 3.0024801045e+01 }, { "Ne31", 3.103311e+01 }, - { "Ne32", 3.204002e+01 }, { "Ne33", 3.304938e+01 }, { "Ne34", 3.4057028e+01 }, { "Na_natural", 2.298977e+01 }, - { "Na18", 1.8025969e+01 }, { "Na19", 1.9013877499e+01 }, { "Na20", 2.0007351328e+01 }, { "Na21", 2.0997655206e+01 }, - { "Na22", 2.1994436425e+01 }, { "Na23", 2.298976928087e+01 }, { "Na24", 2.3990962782e+01 }, { "Na25", 2.4989953968e+01 }, - { "Na26", 2.5992633e+01 }, { "Na27", 2.6994076788e+01 }, { "Na28", 2.7998938e+01 }, { "Na29", 2.9002861e+01 }, - { "Na30", 3.0008976e+01 }, { "Na31", 3.1013585452e+01 }, { "Na32", 3.202046656e+01 }, { "Na33", 3.3026719756e+01 }, - { "Na34", 3.403517e+01 }, { "Na35", 3.5042493e+01 }, { "Na36", 3.605148e+01 }, { "Na37", 3.705934e+01 }, - { "Mg_natural", 2.4305e+01 }, { "Mg19", 1.903547e+01 }, { "Mg20", 2.0018862545e+01 }, { "Mg21", 2.101171291e+01 }, - { "Mg22", 2.1999573843e+01 }, { "Mg23", 2.2994123669e+01 }, { "Mg24", 2.3985041699e+01 }, { "Mg25", 2.4985836917e+01 }, - { "Mg26", 2.5982592929e+01 }, { "Mg27", 2.6984340585e+01 }, { "Mg28", 2.7983876825e+01 }, { "Mg29", 2.89886e+01 }, - { "Mg30", 2.9990434e+01 }, { "Mg31", 3.0996546e+01 }, { "Mg32", 3.1998975e+01 }, { "Mg33", 3.3005254e+01 }, - { "Mg34", 3.4009456424e+01 }, { "Mg35", 3.501734e+01 }, { "Mg36", 3.6023e+01 }, { "Mg37", 3.70314e+01 }, - { "Mg38", 3.803757e+01 }, { "Mg39", 3.9046772e+01 }, { "Mg40", 4.005393e+01 }, { "Al_natural", 2.698154e+01 }, - { "Al21", 2.102804e+01 }, { "Al22", 2.201952e+01 }, { "Al23", 2.3007267432e+01 }, { "Al24", 2.3999938865e+01 }, - { "Al25", 2.4990428095e+01 }, { "Al26", 2.5986891692e+01 }, { "Al27", 2.6981538627e+01 }, { "Al28", 2.7981910306e+01 }, - { "Al29", 2.8980445046e+01 }, { "Al30", 2.9982960256e+01 }, { "Al31", 3.0983946619e+01 }, { "Al32", 3.1988124489e+01 }, - { "Al33", 3.2990843336e+01 }, { "Al34", 3.3996851837e+01 }, { "Al35", 3.4999860235e+01 }, { "Al36", 3.6006207204e+01 }, - { "Al37", 3.701067782e+01 }, { "Al38", 3.8017231021e+01 }, { "Al39", 3.902297e+01 }, { "Al40", 4.003145e+01 }, - { "Al41", 4.103833e+01 }, { "Al42", 4.204689e+01 }, { "Si_natural", 2.80855e+01 }, { "Si22", 2.203453e+01 }, - { "Si23", 2.302552e+01 }, { "Si24", 2.4011545616e+01 }, { "Si25", 2.5004105574e+01 }, { "Si26", 2.5992329921e+01 }, - { "Si27", 2.6986704905e+01 }, { "Si28", 2.797692653246e+01 }, { "Si29", 2.89764947e+01 }, { "Si30", 2.9973770171e+01 }, - { "Si31", 3.0975363227e+01 }, { "Si32", 3.1974148082e+01 }, { "Si33", 3.297800022e+01 }, { "Si34", 3.3978575524e+01 }, - { "Si35", 3.4984583575e+01 }, { "Si36", 3.5986599477e+01 }, { "Si37", 3.699293608e+01 }, { "Si38", 3.7995633601e+01 }, - { "Si39", 3.9002070013e+01 }, { "Si40", 4.0005869121e+01 }, { "Si41", 4.101456e+01 }, { "Si42", 4.201979e+01 }, - { "Si43", 4.302866e+01 }, { "Si44", 4.403526e+01 }, { "P_natural", 3.097376e+01 }, { "P24", 2.403435e+01 }, - { "P25", 2.502026e+01 }, { "P26", 2.601178e+01 }, { "P27", 2.6999230236e+01 }, { "P28", 2.7992314761e+01 }, - { "P29", 2.8981800606e+01 }, { "P30", 2.9978313789e+01 }, { "P31", 3.0973761629e+01 }, { "P32", 3.1973907274e+01 }, - { "P33", 3.2971725543e+01 }, { "P34", 3.3973636257e+01 }, { "P35", 3.4973314117e+01 }, { "P36", 3.597825968e+01 }, - { "P37", 3.6979608946e+01 }, { "P38", 3.7984156827e+01 }, { "P39", 3.8986179475e+01 }, { "P40", 3.9991296951e+01 }, - { "P41", 4.0994335435e+01 }, { "P42", 4.2001007913e+01 }, { "P43", 4.300619e+01 }, { "P44", 4.401299e+01 }, - { "P45", 4.501922e+01 }, { "P46", 4.602738e+01 }, { "S_natural", 3.206e+01 }, { "S26", 2.602788e+01 }, - { "S27", 2.7018833e+01 }, { "S28", 2.8004372763e+01 }, { "S29", 2.8996608049e+01 }, { "S30", 2.9984903249e+01 }, - { "S31", 3.0979554728e+01 }, { "S32", 3.1972070999e+01 }, { "S33", 3.2971458759e+01 }, { "S34", 3.3967866902e+01 }, - { "S35", 3.4969032161e+01 }, { "S36", 3.596708076e+01 }, { "S37", 3.6971125567e+01 }, { "S38", 3.7971163317e+01 }, - { "S39", 3.8975134306e+01 }, { "S40", 3.9975451728e+01 }, { "S41", 4.0979582149e+01 }, { "S42", 4.1981022419e+01 }, - { "S43", 4.298715479e+01 }, { "S44", 4.399021339e+01 }, { "S45", 4.4996508112e+01 }, { "S46", 4.600075e+01 }, - { "S47", 4.700859e+01 }, { "S48", 4.801417e+01 }, { "S49", 4.9023619e+01 }, { "Cl_natural", 3.5453e+01 }, - { "Cl28", 2.802851e+01 }, { "Cl29", 2.901411e+01 }, { "Cl30", 3.000477e+01 }, { "Cl31", 3.0992413086e+01 }, - { "Cl32", 3.1985689901e+01 }, { "Cl33", 3.2977451887e+01 }, { "Cl34", 3.3973762819e+01 }, { "Cl35", 3.4968852682e+01 }, - { "Cl36", 3.5968306981e+01 }, { "Cl37", 3.6965902591e+01 }, { "Cl38", 3.7968010425e+01 }, { "Cl39", 3.8968008164e+01 }, - { "Cl40", 3.9970415472e+01 }, { "Cl41", 4.0970684525e+01 }, { "Cl42", 4.1973254804e+01 }, { "Cl43", 4.2974054403e+01 }, - { "Cl44", 4.3978281071e+01 }, { "Cl45", 4.4980286886e+01 }, { "Cl46", 4.598421004e+01 }, { "Cl47", 4.698871e+01 }, - { "Cl48", 4.799495e+01 }, { "Cl49", 4.900032e+01 }, { "Cl50", 5.000784e+01 }, { "Cl51", 5.101449e+01 }, - { "Ar_natural", 3.9948e+01 }, { "Ar30", 3.002156e+01 }, { "Ar31", 3.1012123e+01 }, { "Ar32", 3.1997637984e+01 }, - { "Ar33", 3.2989925709e+01 }, { "Ar34", 3.3980271244e+01 }, { "Ar35", 3.4975257585e+01 }, { "Ar36", 3.5967545105e+01 }, - { "Ar37", 3.696677632e+01 }, { "Ar38", 3.7962732394e+01 }, { "Ar39", 3.8964313231e+01 }, { "Ar40", 3.996238312251e+01 }, - { "Ar41", 4.0964500611e+01 }, { "Ar42", 4.1963045736e+01 }, { "Ar43", 4.2965636056e+01 }, { "Ar44", 4.3964924033e+01 }, - { "Ar45", 4.4968039956e+01 }, { "Ar46", 4.5968094129e+01 }, { "Ar47", 4.6972186792e+01 }, { "Ar48", 4.797454e+01 }, - { "Ar49", 4.898052e+01 }, { "Ar50", 4.998443e+01 }, { "Ar51", 5.099163e+01 }, { "Ar52", 5.199678e+01 }, - { "Ar53", 5.300494e+01 }, { "K_natural", 3.90983e+01 }, { "K32", 3.202192e+01 }, { "K33", 3.300726e+01 }, - { "K34", 3.399841e+01 }, { "K35", 3.4988009692e+01 }, { "K36", 3.5981292235e+01 }, { "K37", 3.6973375889e+01 }, - { "K38", 3.7969081184e+01 }, { "K39", 3.8963706679e+01 }, { "K40", 3.9963998475e+01 }, { "K41", 4.0961825762e+01 }, - { "K42", 4.196240281e+01 }, { "K43", 4.296071554e+01 }, { "K44", 4.3961556804e+01 }, { "K45", 4.4960699493e+01 }, - { "K46", 4.5961976864e+01 }, { "K47", 4.6961678473e+01 }, { "K48", 4.7965513535e+01 }, { "K49", 4.8967450928e+01 }, - { "K50", 4.9972783355e+01 }, { "K51", 5.097638e+01 }, { "K52", 5.198261e+01 }, { "K53", 5.298712e+01 }, - { "K54", 5.39942e+01 }, { "K55", 5.499971e+01 }, { "Ca_natural", 4.008e+01 }, { "Ca34", 3.401412e+01 }, - { "Ca35", 3.500494e+01 }, { "Ca36", 3.5993087063e+01 }, { "Ca37", 3.6985870269e+01 }, { "Ca38", 3.7976318452e+01 }, - { "Ca39", 3.8970719725e+01 }, { "Ca40", 3.9962590983e+01 }, { "Ca41", 4.0962278062e+01 }, { "Ca42", 4.1958618014e+01 }, - { "Ca43", 4.2958766628e+01 }, { "Ca44", 4.3955481754e+01 }, { "Ca45", 4.4956186566e+01 }, { "Ca46", 4.5953692587e+01 }, - { "Ca47", 4.6954546006e+01 }, { "Ca48", 4.7952534177e+01 }, { "Ca49", 4.8955674148e+01 }, { "Ca50", 4.9957518962e+01 }, - { "Ca51", 5.0961499214e+01 }, { "Ca52", 5.19651e+01 }, { "Ca53", 5.297005e+01 }, { "Ca54", 5.397435e+01 }, - { "Ca55", 5.498055e+01 }, { "Ca56", 5.598557e+01 }, { "Ca57", 5.6992356e+01 }, { "Sc_natural", 4.49559e+01 }, - { "Sc36", 3.601492e+01 }, { "Sc37", 3.700305e+01 }, { "Sc38", 3.79947e+01 }, { "Sc39", 3.8984790002e+01 }, - { "Sc40", 3.9977967407e+01 }, { "Sc41", 4.0969251125e+01 }, { "Sc42", 4.1965516429e+01 }, { "Sc43", 4.2961150658e+01 }, - { "Sc44", 4.3959402752e+01 }, { "Sc45", 4.4955911909e+01 }, { "Sc46", 4.595517189e+01 }, { "Sc47", 4.6952407508e+01 }, - { "Sc48", 4.7952231468e+01 }, { "Sc49", 4.8950023975e+01 }, { "Sc50", 4.9952187685e+01 }, { "Sc51", 5.0953603368e+01 }, - { "Sc52", 5.1956675468e+01 }, { "Sc53", 5.295961e+01 }, { "Sc54", 5.3963264561e+01 }, { "Sc55", 5.4968243949e+01 }, - { "Sc56", 5.597287e+01 }, { "Sc57", 5.697779e+01 }, { "Sc58", 5.798371e+01 }, { "Sc59", 5.898922e+01 }, - { "Sc60", 5.999571e+01 }, { "Ti_natural", 4.79e+01 }, { "Ti38", 3.800977e+01 }, { "Ti39", 3.900161e+01 }, - { "Ti40", 3.9990498838e+01 }, { "Ti41", 4.0983145e+01 }, { "Ti42", 4.1973030902e+01 }, { "Ti43", 4.2968522499e+01 }, - { "Ti44", 4.3959690069e+01 }, { "Ti45", 4.4958125616e+01 }, { "Ti46", 4.5952631555e+01 }, { "Ti47", 4.6951763088e+01 }, - { "Ti48", 4.7947946281e+01 }, { "Ti49", 4.8947869982e+01 }, { "Ti50", 4.9944791194e+01 }, { "Ti51", 5.0946614955e+01 }, - { "Ti52", 5.1946897311e+01 }, { "Ti53", 5.2949727171e+01 }, { "Ti54", 5.3951052401e+01 }, { "Ti55", 5.4955265056e+01 }, - { "Ti56", 5.5958199639e+01 }, { "Ti57", 5.6963989137e+01 }, { "Ti58", 5.796697e+01 }, { "Ti59", 5.897293e+01 }, - { "Ti60", 5.997676e+01 }, { "Ti61", 6.09832e+01 }, { "Ti62", 6.198749e+01 }, { "Ti63", 6.299442e+01 }, - { "V_natural", 5.09415e+01 }, { "V40", 4.001109e+01 }, { "V41", 4.099978e+01 }, { "V42", 4.199123e+01 }, - { "V43", 4.298065e+01 }, { "V44", 4.397411e+01 }, { "V45", 4.4965775808e+01 }, { "V46", 4.5960200481e+01 }, - { "V47", 4.695490894e+01 }, { "V48", 4.7952253707e+01 }, { "V49", 4.8948516101e+01 }, { "V50", 4.9947158485e+01 }, - { "V51", 5.0943959507e+01 }, { "V52", 5.1944775479e+01 }, { "V53", 5.2944337979e+01 }, { "V54", 5.3946439854e+01 }, - { "V55", 5.4947233701e+01 }, { "V56", 5.5950530966e+01 }, { "V57", 5.6952561432e+01 }, { "V58", 5.7956834136e+01 }, - { "V59", 5.8960207407e+01 }, { "V60", 5.9965026862e+01 }, { "V61", 6.096848e+01 }, { "V62", 6.197378e+01 }, - { "V63", 6.297755e+01 }, { "V64", 6.398347e+01 }, { "V65", 6.498792e+01 }, { "Cr_natural", 5.1996e+01 }, - { "Cr42", 4.200643e+01 }, { "Cr43", 4.299771e+01 }, { "Cr44", 4.3985549e+01 }, { "Cr45", 4.497964e+01 }, - { "Cr46", 4.5968358635e+01 }, { "Cr47", 4.6962900046e+01 }, { "Cr48", 4.7954031716e+01 }, { "Cr49", 4.8951335721e+01 }, - { "Cr50", 4.9946044205e+01 }, { "Cr51", 5.0944767431e+01 }, { "Cr52", 5.1940507472e+01 }, { "Cr53", 5.2940649386e+01 }, - { "Cr54", 5.3938880395e+01 }, { "Cr55", 5.4940839672e+01 }, { "Cr56", 5.5940653139e+01 }, { "Cr57", 5.6943613013e+01 }, - { "Cr58", 5.7944353129e+01 }, { "Cr59", 5.8948586367e+01 }, { "Cr60", 5.9950076033e+01 }, { "Cr61", 6.0954717204e+01 }, - { "Cr62", 6.195661319e+01 }, { "Cr63", 6.296186e+01 }, { "Cr64", 6.396441e+01 }, { "Cr65", 6.497016e+01 }, - { "Cr66", 6.597338e+01 }, { "Cr67", 6.697955e+01 }, { "Mn_natural", 5.4938e+01 }, { "Mn44", 4.400687e+01 }, - { "Mn45", 4.499451e+01 }, { "Mn46", 4.598672e+01 }, { "Mn47", 4.69761e+01 }, { "Mn48", 4.796852e+01 }, - { "Mn49", 4.8959618005e+01 }, { "Mn50", 4.995423823e+01 }, { "Mn51", 5.0948210787e+01 }, { "Mn52", 5.1945565464e+01 }, - { "Mn53", 5.2941290117e+01 }, { "Mn54", 5.3940358854e+01 }, { "Mn55", 5.4938045141e+01 }, { "Mn56", 5.593890491e+01 }, - { "Mn57", 5.6938285378e+01 }, { "Mn58", 5.7939981549e+01 }, { "Mn59", 5.8940440237e+01 }, { "Mn60", 5.9942911246e+01 }, - { "Mn61", 6.0944652638e+01 }, { "Mn62", 6.194842822e+01 }, { "Mn63", 6.295023999e+01 }, { "Mn64", 6.395424909e+01 }, - { "Mn65", 6.4956336065e+01 }, { "Mn66", 6.596108e+01 }, { "Mn67", 6.696414e+01 }, { "Mn68", 6.79693e+01 }, - { "Mn69", 6.897284e+01 }, { "Fe_natural", 5.5847e+01 }, { "Fe45", 4.5014578e+01 }, { "Fe46", 4.600081e+01 }, - { "Fe47", 4.699289e+01 }, { "Fe48", 4.7980504e+01 }, { "Fe49", 4.897361e+01 }, { "Fe50", 4.9962988982e+01 }, - { "Fe51", 5.0956819538e+01 }, { "Fe52", 5.1948113875e+01 }, { "Fe53", 5.2945307942e+01 }, { "Fe54", 5.3939610501e+01 }, - { "Fe55", 5.4938293357e+01 }, { "Fe56", 5.5934937475e+01 }, { "Fe57", 5.6935393969e+01 }, { "Fe58", 5.7933275558e+01 }, - { "Fe59", 5.8934875464e+01 }, { "Fe60", 5.9934071683e+01 }, { "Fe61", 6.0936745281e+01 }, { "Fe62", 6.1936767442e+01 }, - { "Fe63", 6.2940369091e+01 }, { "Fe64", 6.3941201265e+01 }, { "Fe65", 6.494538027e+01 }, { "Fe66", 6.5946780638e+01 }, - { "Fe67", 6.6950947244e+01 }, { "Fe68", 6.79537e+01 }, { "Fe69", 6.895878e+01 }, { "Fe70", 6.996146e+01 }, - { "Fe71", 7.096672e+01 }, { "Fe72", 7.196962e+01 }, { "Co_natural", 5.89332e+01 }, { "Co47", 4.701149e+01 }, - { "Co48", 4.800176e+01 }, { "Co49", 4.898972e+01 }, { "Co50", 4.998154e+01 }, { "Co51", 5.097072e+01 }, - { "Co52", 5.196359e+01 }, { "Co53", 5.2954218896e+01 }, { "Co54", 5.3948459635e+01 }, { "Co55", 5.4941999029e+01 }, - { "Co56", 5.5939839278e+01 }, { "Co57", 5.6936291373e+01 }, { "Co58", Co58_Mass }, { "Co59", 5.8933195048e+01 }, - { "Co60", 5.9933817059e+01 }, { "Co61", 6.0932475763e+01 }, { "Co62", 6.1934050563e+01 }, { "Co63", 6.2933611611e+01 }, - { "Co64", 6.3935809908e+01 }, { "Co65", 6.493647846e+01 }, { "Co66", 6.5939762004e+01 }, { "Co67", 6.6940889529e+01 }, - { "Co68", 6.7944873058e+01 }, { "Co69", 6.894632e+01 }, { "Co70", 6.9951e+01 }, { "Co71", 7.09529e+01 }, - { "Co72", 7.195781e+01 }, { "Co73", 7.296024e+01 }, { "Co74", 7.396538e+01 }, { "Co75", 7.496833e+01 }, - { "Ni_natural", 5.87e+01 }, { "Ni48", 4.801975e+01 }, { "Ni49", 4.900966e+01 }, { "Ni50", 4.999593e+01 }, - { "Ni51", 5.098772e+01 }, { "Ni52", 5.197568e+01 }, { "Ni53", 5.296847e+01 }, { "Ni54", 5.3957905495e+01 }, - { "Ni55", 5.4951330251e+01 }, { "Ni56", 5.5942132022e+01 }, { "Ni57", 5.6939793526e+01 }, { "Ni58", 5.7935342907e+01 }, - { "Ni59", 5.8934346705e+01 }, { "Ni60", 5.9930786372e+01 }, { "Ni61", 6.0931056033e+01 }, { "Ni62", 6.1928345115e+01 }, - { "Ni63", 6.2929669374e+01 }, { "Ni64", 6.3927965959e+01 }, { "Ni65", 6.4930084304e+01 }, { "Ni66", 6.5929139334e+01 }, - { "Ni67", 6.6931569414e+01 }, { "Ni68", 6.7931868789e+01 }, { "Ni69", 6.8935610269e+01 }, { "Ni70", 6.99365e+01 }, - { "Ni71", 7.0940736283e+01 }, { "Ni72", 7.1942092682e+01 }, { "Ni73", 7.294647e+01 }, { "Ni74", 7.394807e+01 }, - { "Ni75", 7.495287e+01 }, { "Ni76", 7.595533e+01 }, { "Ni77", 7.696055e+01 }, { "Ni78", 7.796318e+01 }, - { "Cu_natural", 6.3546e+01 }, { "Cu52", 5.199718e+01 }, { "Cu53", 5.298555e+01 }, { "Cu54", 5.397671e+01 }, - { "Cu55", 5.496605e+01 }, { "Cu56", 5.595856e+01 }, { "Cu57", 5.6949211078e+01 }, { "Cu58", 5.7944538499e+01 }, - { "Cu59", 5.8939498028e+01 }, { "Cu60", 5.993736503e+01 }, { "Cu61", 6.0933457821e+01 }, { "Cu62", 6.1932583745e+01 }, - { "Cu63", 6.2929597474e+01 }, { "Cu64", 6.3929764183e+01 }, { "Cu65", 6.4927789485e+01 }, { "Cu66", 6.592886881299999e+01 }, - { "Cu67", 6.6927730314e+01 }, { "Cu68", 6.7929610889e+01 }, { "Cu69", 6.8929429269e+01 }, { "Cu70", 6.9932392343e+01 }, - { "Cu71", 7.0932676833e+01 }, { "Cu72", 7.1935820307e+01 }, { "Cu73", 7.2936675282e+01 }, { "Cu74", 7.3939874862e+01 }, - { "Cu75", 7.49419e+01 }, { "Cu76", 7.5945275026e+01 }, { "Cu77", 7.694785e+01 }, { "Cu78", 7.795196e+01 }, - { "Cu79", 7.895456e+01 }, { "Cu80", 7.996087e+01 }, { "Zn_natural", 6.538e+01 }, { "Zn54", 5.399295e+01 }, - { "Zn55", 5.498398e+01 }, { "Zn56", 5.597238e+01 }, { "Zn57", 5.6964788e+01 }, { "Zn58", 5.7954591555e+01 }, - { "Zn59", 5.8949263764e+01 }, { "Zn60", 5.9941827035e+01 }, { "Zn61", 6.0939510635e+01 }, { "Zn62", 6.1934329764e+01 }, - { "Zn63", 6.2933211566e+01 }, { "Zn64", 6.3929142222e+01 }, { "Zn65", 6.4929240984e+01 }, { "Zn66", 6.5926033419e+01 }, - { "Zn67", 6.6927127345e+01 }, { "Zn68", 6.7924844154e+01 }, { "Zn69", 6.8926550281e+01 }, { "Zn70", 6.9925319274e+01 }, - { "Zn71", 7.0927721599e+01 }, { "Zn72", 7.1926857951e+01 }, { "Zn73", 7.2929779104e+01 }, { "Zn74", 7.392945860899999e+01 }, - { "Zn75", 7.4932936741e+01 }, { "Zn76", 7.593329357e+01 }, { "Zn77", 7.6936958967e+01 }, { "Zn78", 7.7938440216e+01 }, - { "Zn79", 7.8942652e+01 }, { "Zn80", 7.9944342348e+01 }, { "Zn81", 8.095048e+01 }, { "Zn82", 8.195442e+01 }, - { "Zn83", 8.296103e+01 }, { "Ga_natural", 6.972e+01 }, { "Ga56", 5.599491e+01 }, { "Ga57", 5.698293e+01 }, - { "Ga58", 5.797425e+01 }, { "Ga59", 5.896337e+01 }, { "Ga60", 5.995706e+01 }, { "Ga61", 6.0949446287e+01 }, - { "Ga62", 6.1944175238e+01 }, { "Ga63", 6.2939294196e+01 }, { "Ga64", 6.3936838747e+01 }, { "Ga65", 6.493273475399999e+01 }, - { "Ga66", 6.593158901e+01 }, { "Ga67", 6.6928201703e+01 }, { "Ga68", 6.7927980084e+01 }, { "Ga69", 6.8925573587e+01 }, - { "Ga70", 6.9926021972e+01 }, { "Ga71", 7.0924701349e+01 }, { "Ga72", 7.1926366268e+01 }, { "Ga73", 7.2925174682e+01 }, - { "Ga74", 7.3926945762e+01 }, { "Ga75", 7.4926500246e+01 }, { "Ga76", 7.5928827626e+01 }, { "Ga77", 7.69291543e+01 }, - { "Ga78", 7.793160818e+01 }, { "Ga79", 7.893289326e+01 }, { "Ga80", 7.9936515781e+01 }, { "Ga81", 8.0937752355e+01 }, - { "Ga82", 8.194299e+01 }, { "Ga83", 8.294698e+01 }, { "Ga84", 8.395265e+01 }, { "Ga85", 8.4957e+01 }, - { "Ga86", 8.596312e+01 }, { "Ge_natural", 7.259e+01 }, { "Ge58", 5.799101e+01 }, { "Ge59", 5.898175e+01 }, - { "Ge60", 5.997019e+01 }, { "Ge61", 6.096379e+01 }, { "Ge62", 6.195465e+01 }, { "Ge63", 6.294964e+01 }, - { "Ge64", 6.3941653e+01 }, { "Ge65", 6.4939436406e+01 }, { "Ge66", 6.5933843453e+01 }, { "Ge67", 6.693273407e+01 }, - { "Ge68", 6.792809424e+01 }, { "Ge69", 6.8927964533e+01 }, { "Ge70", 6.9924247381e+01 }, { "Ge71", 7.0924950954e+01 }, - { "Ge72", 7.1922075815e+01 }, { "Ge73", 7.2923458945e+01 }, { "Ge74", 7.3921177767e+01 }, { "Ge75", 7.4922858948e+01 }, - { "Ge76", 7.5921402557e+01 }, { "Ge77", 7.6923548591e+01 }, { "Ge78", 7.7922852739e+01 }, { "Ge79", 7.8925400995e+01 }, - { "Ge80", 7.9925372392e+01 }, { "Ge81", 8.0928820467e+01 }, { "Ge82", 8.1929549725e+01 }, { "Ge83", 8.293462e+01 }, - { "Ge84", 8.393747e+01 }, { "Ge85", 8.494303e+01 }, { "Ge86", 8.594649e+01 }, { "Ge87", 8.695251e+01 }, - { "Ge88", 8.795691e+01 }, { "Ge89", 8.896383e+01 }, { "As_natural", 7.49216e+01 }, { "As60", 5.999313e+01 }, - { "As61", 6.098062e+01 }, { "As62", 6.19732e+01 }, { "As63", 6.296369e+01 }, { "As64", 6.3957572e+01 }, - { "As65", 6.4949564e+01 }, { "As66", 6.594471e+01 }, { "As67", 6.6939186071e+01 }, { "As68", 6.793676906899999e+01 }, - { "As69", 6.8932273675e+01 }, { "As70", 6.9930924826e+01 }, { "As71", 7.0927112428e+01 }, { "As72", 7.1926752283e+01 }, - { "As73", 7.2923824844e+01 }, { "As74", 7.3923928692e+01 }, { "As75", 7.4921596478e+01 }, { "As76", 7.5922394021e+01 }, - { "As77", 7.6920647286e+01 }, { "As78", 7.7921827281e+01 }, { "As79", 7.8920947934e+01 }, { "As80", 7.9922533816e+01 }, - { "As81", 8.0922132287e+01 }, { "As82", 8.1924504067e+01 }, { "As83", 8.2924980024e+01 }, { "As84", 8.3929058e+01 }, - { "As85", 8.493202e+01 }, { "As86", 8.59365e+01 }, { "As87", 8.69399e+01 }, { "As88", 8.794494e+01 }, - { "As89", 8.894939e+01 }, { "As90", 8.99555e+01 }, { "As91", 9.096043e+01 }, { "As92", 9.19668e+01 }, - { "Se_natural", 7.896e+01 }, { "Se65", 6.496466e+01 }, { "Se66", 6.595521e+01 }, { "Se67", 6.695009e+01 }, - { "Se68", 6.7941798e+01 }, { "Se69", 6.8939557817e+01 }, { "Se70", 6.9933390644e+01 }, { "Se71", 7.093224182199999e+01 }, - { "Se72", 7.1927112352e+01 }, { "Se73", 7.2926765345e+01 }, { "Se74", 7.3922476436e+01 }, { "Se75", 7.4922523368e+01 }, - { "Se76", 7.5919213597e+01 }, { "Se77", 7.6919914038e+01 }, { "Se78", 7.791730909e+01 }, { "Se79", 7.8918499098e+01 }, - { "Se80", 7.9916521271e+01 }, { "Se81", 8.0917992474e+01 }, { "Se82", 8.1916699401e+01 }, { "Se83", 8.2919118473e+01 }, - { "Se84", 8.3918462354e+01 }, { "Se85", 8.4922245053e+01 }, { "Se86", 8.5924271579e+01 }, { "Se87", 8.6928521358e+01 }, - { "Se88", 8.7931423998e+01 }, { "Se89", 8.893645e+01 }, { "Se90", 8.993996e+01 }, { "Se91", 9.094596e+01 }, - { "Se92", 9.194992e+01 }, { "Se93", 9.295629e+01 }, { "Se94", 9.396049e+01 }, { "Br_natural", 7.9904e+01 }, - { "Br67", 6.696479e+01 }, { "Br68", 6.7958516e+01 }, { "Br69", 6.8950106e+01 }, { "Br70", 6.9944792e+01 }, - { "Br71", 7.093874e+01 }, { "Br72", 7.1936644572e+01 }, { "Br73", 7.2931691524e+01 }, { "Br74", 7.392989103399999e+01 }, - { "Br75", 7.4925776207e+01 }, { "Br76", 7.5924541469e+01 }, { "Br77", 7.6921379082e+01 }, { "Br78", 7.7921145706e+01 }, - { "Br79", 7.8918337087e+01 }, { "Br80", 7.9918529296e+01 }, { "Br81", 8.0916290563e+01 }, { "Br82", 8.1916804119e+01 }, - { "Br83", 8.2915180421e+01 }, { "Br84", 8.3916478974e+01 }, { "Br85", 8.4915608403e+01 }, { "Br86", 8.5918797577e+01 }, - { "Br87", 8.6920711324e+01 }, { "Br88", 8.7924065926e+01 }, { "Br89", 8.8926385334e+01 }, { "Br90", 8.993062773699999e+01 }, - { "Br91", 9.0933968095e+01 }, { "Br92", 9.1939258714e+01 }, { "Br93", 9.294305e+01 }, { "Br94", 9.394868e+01 }, - { "Br95", 9.495287e+01 }, { "Br96", 9.595853e+01 }, { "Br97", 9.69628e+01 }, { "Kr_natural", 8.38e+01 }, - { "Kr69", 6.896518e+01 }, { "Kr70", 6.9955259e+01 }, { "Kr71", 7.0949625738e+01 }, { "Kr72", 7.1942092038e+01 }, - { "Kr73", 7.2939289195e+01 }, { "Kr74", 7.3933084369e+01 }, { "Kr75", 7.4930945746e+01 }, { "Kr76", 7.5925910078e+01 }, - { "Kr77", 7.692467e+01 }, { "Kr78", 7.7920364783e+01 }, { "Kr79", 7.8920082431e+01 }, { "Kr80", 7.9916378965e+01 }, - { "Kr81", 8.0916592015e+01 }, { "Kr82", 8.19134836e+01 }, { "Kr83", 8.2914136099e+01 }, { "Kr84", 8.3911506687e+01 }, - { "Kr85", 8.4912527331e+01 }, { "Kr86", 8.5910610729e+01 }, { "Kr87", 8.6913354862e+01 }, { "Kr88", 8.7914446969e+01 }, - { "Kr89", 8.8917630581e+01 }, { "Kr90", 8.9919516555e+01 }, { "Kr91", 9.0923445215e+01 }, { "Kr92", 9.192615621e+01 }, - { "Kr93", 9.2931274357e+01 }, { "Kr94", 9.393436e+01 }, { "Kr95", 9.493984e+01 }, { "Kr96", 9.594307e+01 }, - { "Kr97", 9.694856e+01 }, { "Kr98", 9.795191e+01 }, { "Kr99", 9.89576e+01 }, { "Kr100", 9.996114e+01 }, - { "Rb_natural", 8.54678e+01 }, { "Rb71", 7.096532e+01 }, { "Rb72", 7.195908e+01 }, { "Rb73", 7.2950561e+01 }, - { "Rb74", 7.3944264751e+01 }, { "Rb75", 7.493857e+01 }, { "Rb76", 7.5935072226e+01 }, { "Rb77", 7.6930408e+01 }, - { "Rb78", 7.7928141e+01 }, { "Rb79", 7.892398946e+01 }, { "Rb80", 7.992251925e+01 }, { "Rb81", 8.0918995913e+01 }, - { "Rb82", 8.1918208598e+01 }, { "Rb83", 8.2915109701e+01 }, { "Rb84", 8.3914384821e+01 }, { "Rb85", 8.4911789737e+01 }, - { "Rb86", 8.5911167419e+01 }, { "Rb87", 8.6909180526e+01 }, { "Rb88", 8.7911315588e+01 }, { "Rb89", 8.8912278016e+01 }, - { "Rb90", 8.9914801694e+01 }, { "Rb91", 9.0916536958e+01 }, { "Rb92", 9.19197289e+01 }, { "Rb93", 9.292204187599999e+01 }, - { "Rb94", 9.3926404946e+01 }, { "Rb95", 9.4929302889e+01 }, { "Rb96", 9.5934272637e+01 }, { "Rb97", 9.6937351916e+01 }, - { "Rb98", 9.7941790668e+01 }, { "Rb99", 9.8945379283e+01 }, { "Rb100", 9.994987e+01 }, { "Rb101", 1.00953196445e+02 }, - { "Rb102", 1.0195887e+02 }, { "Sr_natural", 8.762e+01 }, { "Sr73", 7.296597e+01 }, { "Sr74", 7.395631e+01 }, - { "Sr75", 7.4949949568e+01 }, { "Sr76", 7.5941766782e+01 }, { "Sr77", 7.6937944782e+01 }, { "Sr78", 7.793218e+01 }, - { "Sr79", 7.8929708e+01 }, { "Sr80", 7.9924521013e+01 }, { "Sr81", 8.0923211846e+01 }, { "Sr82", 8.1918401639e+01 }, - { "Sr83", 8.2917556701e+01 }, { "Sr84", 8.3913425275e+01 }, { "Sr85", 8.4912932803e+01 }, { "Sr86", 8.5909260204e+01 }, - { "Sr87", 8.6908877124e+01 }, { "Sr88", 8.7905612124e+01 }, { "Sr89", 8.8907450675e+01 }, { "Sr90", 8.9907737888e+01 }, - { "Sr91", 9.0910203095e+01 }, { "Sr92", 9.1911037858e+01 }, { "Sr93", 9.2914025634e+01 }, { "Sr94", 9.3915361312e+01 }, - { "Sr95", 9.4919358766e+01 }, { "Sr96", 9.5921696802e+01 }, { "Sr97", 9.6926152923e+01 }, { "Sr98", 9.7928452934e+01 }, - { "Sr99", 9.8933240926e+01 }, { "Sr100", 9.9935351911e+01 }, { "Sr101", 1.00940517888e+02 }, { "Sr102", 1.01943018987e+02 }, - { "Sr103", 1.0294895e+02 }, { "Sr104", 1.0395233e+02 }, { "Sr105", 1.0495858e+02 }, { "Y_natural", 8.89059e+01 }, - { "Y76", 7.595845e+01 }, { "Y77", 7.6949645e+01 }, { "Y78", 7.794361e+01 }, { "Y79", 7.8937351634e+01 }, - { "Y80", 7.993428e+01 }, { "Y81", 8.0929127468e+01 }, { "Y82", 8.1926792451e+01 }, { "Y83", 8.2922354243e+01 }, - { "Y84", 8.3920388264e+01 }, { "Y85", 8.4916433039e+01 }, { "Y86", 8.5914885576e+01 }, { "Y87", 8.691087573e+01 }, - { "Y88", 8.7909501146e+01 }, { "Y89", 8.8905848295e+01 }, { "Y90", 8.9907151886e+01 }, { "Y91", 9.0907304791e+01 }, - { "Y92", 9.1908949143e+01 }, { "Y93", 9.2909582713e+01 }, { "Y94", 9.3911595245e+01 }, { "Y95", 9.491282062099999e+01 }, - { "Y96", 9.5915891343e+01 }, { "Y97", 9.6918133995e+01 }, { "Y98", 9.792220302e+01 }, { "Y99", 9.8924636204e+01 }, - { "Y100", 9.9927756586e+01 }, { "Y101", 1.0093031385e+02 }, { "Y102", 1.01933555695e+02 }, { "Y103", 1.0293673e+02 }, - { "Y104", 1.0394105e+02 }, { "Y105", 1.0494487e+02 }, { "Y106", 1.0594979e+02 }, { "Y107", 1.0695414e+02 }, - { "Y108", 1.0795948e+02 }, { "Zr_natural", 9.122e+01 }, { "Zr78", 7.795523e+01 }, { "Zr79", 7.894916e+01 }, - { "Zr80", 7.99404e+01 }, { "Zr81", 8.0937210026e+01 }, { "Zr82", 8.1931087e+01 }, { "Zr83", 8.2928653801e+01 }, - { "Zr84", 8.392325e+01 }, { "Zr85", 8.4921471182e+01 }, { "Zr86", 8.5916473591e+01 }, { "Zr87", 8.691481625199999e+01 }, - { "Zr88", 8.7910226904e+01 }, { "Zr89", 8.89088895e+01 }, { "Zr90", 8.9904704416e+01 }, { "Zr91", 9.0905645767e+01 }, - { "Zr92", 9.1905040847e+01 }, { "Zr93", 9.2906476006e+01 }, { "Zr94", 9.3906315192e+01 }, { "Zr95", 9.49080426e+01 }, - { "Zr96", 9.5908273386e+01 }, { "Zr97", 9.6910953109e+01 }, { "Zr98", 9.7912734892e+01 }, { "Zr99", 9.8916512106e+01 }, - { "Zr100", 9.9917761889e+01 }, { "Zr101", 1.00921140415e+02 }, { "Zr102", 1.01922981285e+02 }, { "Zr103", 1.02926599606e+02 }, - { "Zr104", 1.0392878e+02 }, { "Zr105", 1.0493305e+02 }, { "Zr106", 1.0593591e+02 }, { "Zr107", 1.0694075e+02 }, - { "Zr108", 1.0794396e+02 }, { "Zr109", 1.0894924e+02 }, { "Zr110", 1.0995287e+02 }, { "Nb_natural", 9.29064e+01 }, - { "Nb81", 8.094903e+01 }, { "Nb82", 8.194313e+01 }, { "Nb83", 8.2936705382e+01 }, { "Nb84", 8.393357e+01 }, - { "Nb85", 8.4927912447e+01 }, { "Nb86", 8.5925038326e+01 }, { "Nb87", 8.6920361108e+01 }, { "Nb88", 8.7918332163e+01 }, - { "Nb89", 8.8913418245e+01 }, { "Nb90", 8.9911264845e+01 }, { "Nb91", 9.0906996243e+01 }, { "Nb92", 9.190719388799999e+01 }, - { "Nb93", 9.2906378058e+01 }, { "Nb94", 9.3907283888e+01 }, { "Nb95", 9.4906835792e+01 }, { "Nb96", 9.5908100647e+01 }, - { "Nb97", 9.6908098556e+01 }, { "Nb98", 9.7910328412e+01 }, { "Nb99", 9.8911618375e+01 }, { "Nb100", 9.9914181619e+01 }, - { "Nb101", 1.00915252025e+02 }, { "Nb102", 1.01918037614e+02 }, { "Nb103", 1.02919143842e+02 }, { "Nb104", 1.03922464701e+02 }, - { "Nb105", 1.04923936545e+02 }, { "Nb106", 1.0592797e+02 }, { "Nb107", 1.0693031e+02 }, { "Nb108", 1.0793484e+02 }, - { "Nb109", 1.0893763e+02 }, { "Nb110", 1.0994244e+02 }, { "Nb111", 1.1094565e+02 }, { "Nb112", 1.1195083e+02 }, - { "Nb113", 1.129547e+02 }, { "Mo_natural", 9.594e+01 }, { "Mo83", 8.294874e+01 }, { "Mo84", 8.394009e+01 }, - { "Mo85", 8.493655e+01 }, { "Mo86", 8.5930695904e+01 }, { "Mo87", 8.6927326502e+01 }, { "Mo88", 8.7921953241e+01 }, - { "Mo89", 8.8919480009e+01 }, { "Mo90", 8.9913936896e+01 }, { "Mo91", 9.0911750194e+01 }, { "Mo92", 9.1906810991e+01 }, - { "Mo93", 9.290681261e+01 }, { "Mo94", 9.3905088269e+01 }, { "Mo95", 9.4905842129e+01 }, { "Mo96", 9.5904679477e+01 }, - { "Mo97", 9.6906021465e+01 }, { "Mo98", 9.7905408169e+01 }, { "Mo99", 9.890771187e+01 }, { "Mo100", 9.9907477336e+01 }, - { "Mo101", 1.00910347001e+02 }, { "Mo102", 1.0191029736e+02 }, { "Mo103", 1.02913207142e+02 }, { "Mo104", 1.03913763625e+02 }, - { "Mo105", 1.0491697461e+02 }, { "Mo106", 1.05918136802e+02 }, { "Mo107", 1.06921692604e+02 }, { "Mo108", 1.07923453e+02 }, - { "Mo109", 1.0892781e+02 }, { "Mo110", 1.0992973e+02 }, { "Mo111", 1.1093441e+02 }, { "Mo112", 1.1193684e+02 }, - { "Mo113", 1.1294188e+02 }, { "Mo114", 1.1394492e+02 }, { "Mo115", 1.1495029e+02 }, { "Tc_natural", 9.8e+01 }, - { "Tc85", 8.494883e+01 }, { "Tc86", 8.594288e+01 }, { "Tc87", 8.693653e+01 }, { "Tc88", 8.7932678e+01 }, - { "Tc89", 8.8927167e+01 }, { "Tc90", 8.9923556564e+01 }, { "Tc91", 9.0918427639e+01 }, { "Tc92", 9.1915260166e+01 }, - { "Tc93", 9.2910248984e+01 }, { "Tc94", 9.3909657002e+01 }, { "Tc95", 9.4907657084e+01 }, { "Tc96", 9.5907871383e+01 }, - { "Tc97", 9.6906365358e+01 }, { "Tc98", 9.7907215966e+01 }, { "Tc99", 9.8906254747e+01 }, { "Tc100", 9.990765778e+01 }, - { "Tc101", 1.00907314659e+02 }, { "Tc102", 1.01909215019e+02 }, { "Tc103", 1.02909181351e+02 }, { "Tc104", 1.03911447454e+02 }, - { "Tc105", 1.04911660566e+02 }, { "Tc106", 1.05914357927e+02 }, { "Tc107", 1.06915079572e+02 }, { "Tc108", 1.07918461226e+02 }, - { "Tc109", 1.08919982665e+02 }, { "Tc110", 1.09923820483e+02 }, { "Tc111", 1.1092569283e+02 }, { "Tc112", 1.11929146493e+02 }, - { "Tc113", 1.1293159e+02 }, { "Tc114", 1.1393588e+02 }, { "Tc115", 1.1493869e+02 }, { "Tc116", 1.1594337e+02 }, - { "Tc117", 1.1694648e+02 }, { "Tc118", 1.1795148e+02 }, { "Ru_natural", 1.0107e+02 }, { "Ru87", 8.694918e+01 }, - { "Ru88", 8.794026e+01 }, { "Ru89", 8.893611e+01 }, { "Ru90", 8.992989e+01 }, { "Ru91", 9.0926292e+01 }, - { "Ru92", 9.192012e+01 }, { "Ru93", 9.2917052034e+01 }, { "Ru94", 9.3911359711e+01 }, { "Ru95", 9.4910412929e+01 }, - { "Ru96", 9.5907597835e+01 }, { "Ru97", 9.69075547e+01 }, { "Ru98", 9.7905287132e+01 }, { "Ru99", 9.890593930199999e+01 }, - { "Ru100", 9.9904219476e+01 }, { "Ru101", 1.00905582087e+02 }, { "Ru102", 1.01904349312e+02 }, { "Ru103", 1.02906323847e+02 }, - { "Ru104", 1.03905432701e+02 }, { "Ru105", 1.04907752866e+02 }, { "Ru106", 1.05907329433e+02 }, { "Ru107", 1.06909905089e+02 }, - { "Ru108", 1.07910173465e+02 }, { "Ru109", 1.08913203233e+02 }, { "Ru110", 1.09914136041e+02 }, { "Ru111", 1.10917696e+02 }, - { "Ru112", 1.11918965e+02 }, { "Ru113", 1.12922487194e+02 }, { "Ru114", 1.13924281e+02 }, { "Ru115", 1.14928686173e+02 }, - { "Ru116", 1.1593081e+02 }, { "Ru117", 1.1693558e+02 }, { "Ru118", 1.1793782e+02 }, { "Ru119", 1.1894284e+02 }, - { "Ru120", 1.1994531e+02 }, { "Rh_natural", 1.029055e+02 }, { "Rh89", 8.8948837e+01 }, { "Rh90", 8.994287e+01 }, - { "Rh91", 9.093655e+01 }, { "Rh92", 9.193198e+01 }, { "Rh93", 9.292574e+01 }, { "Rh94", 9.3921698e+01 }, - { "Rh95", 9.491589874e+01 }, { "Rh96", 9.5914460631e+01 }, { "Rh97", 9.6911336797e+01 }, { "Rh98", 9.7910708158e+01 }, - { "Rh99", 9.8908132104e+01 }, { "Rh100", 9.990812155e+01 }, { "Rh101", 1.00906163625e+02 }, { "Rh102", 1.01906843196e+02 }, - { "Rh103", 1.02905504292e+02 }, { "Rh104", 1.03906655518e+02 }, { "Rh105", 1.04905693821e+02 }, { "Rh106", 1.05907287135e+02 }, - { "Rh107", 1.06906748423e+02 }, { "Rh108", 1.07908728018e+02 }, { "Rh109", 1.08908737289e+02 }, { "Rh110", 1.09911136411e+02 }, - { "Rh111", 1.10911585913e+02 }, { "Rh112", 1.11914394159e+02 }, { "Rh113", 1.12915530627e+02 }, { "Rh114", 1.13918806e+02 }, - { "Rh115", 1.14920334e+02 }, { "Rh116", 1.15924062e+02 }, { "Rh117", 1.1692598e+02 }, { "Rh118", 1.1793007e+02 }, - { "Rh119", 1.1893211e+02 }, { "Rh120", 1.1993641e+02 }, { "Rh121", 1.2093872e+02 }, { "Rh122", 1.2194321e+02 }, - { "Pd_natural", 1.064e+02 }, { "Pd91", 9.094911e+01 }, { "Pd92", 9.194042e+01 }, { "Pd93", 9.293591e+01 }, - { "Pd94", 9.392877e+01 }, { "Pd95", 9.492469e+01 }, { "Pd96", 9.5918164359e+01 }, { "Pd97", 9.6916479073e+01 }, - { "Pd98", 9.7912720902e+01 }, { "Pd99", 9.8911767833e+01 }, { "Pd100", 9.9908505886e+01 }, { "Pd101", 1.00908289242e+02 }, - { "Pd102", 1.01905608544e+02 }, { "Pd103", 1.02906087307e+02 }, { "Pd104", 1.03904035834e+02 }, { "Pd105", 1.0490508492e+02 }, - { "Pd106", 1.05903485715e+02 }, { "Pd107", 1.06905133481e+02 }, { "Pd108", 1.07903891701e+02 }, { "Pd109", 1.08905950451e+02 }, - { "Pd110", 1.09905153254e+02 }, { "Pd111", 1.10907670734e+02 }, { "Pd112", 1.11907314058e+02 }, { "Pd113", 1.12910152908e+02 }, - { "Pd114", 1.13910362638e+02 }, { "Pd115", 1.14913683824e+02 }, { "Pd116", 1.15914158662e+02 }, { "Pd117", 1.16917841338e+02 }, - { "Pd118", 1.179189843e+02 }, { "Pd119", 1.1892311e+02 }, { "Pd120", 1.19924691878e+02 }, { "Pd121", 1.2092887e+02 }, - { "Pd122", 1.2193055e+02 }, { "Pd123", 1.2293493e+02 }, { "Pd124", 1.2393688e+02 }, { "Ag_natural", 1.07868e+02 }, - { "Ag93", 9.294978e+01 }, { "Ag94", 9.394278e+01 }, { "Ag95", 9.493548e+01 }, { "Ag96", 9.593068e+01 }, - { "Ag97", 9.6923972412e+01 }, { "Ag98", 9.7921566201e+01 }, { "Ag99", 9.8917597178e+01 }, { "Ag100", 9.991610425499999e+01 }, - { "Ag101", 1.00912802233e+02 }, { "Ag102", 1.01911685e+02 }, { "Ag103", 1.0290897272e+02 }, { "Ag104", 1.03908629157e+02 }, - { "Ag105", 1.04906528661e+02 }, { "Ag106", 1.05906668921e+02 }, { "Ag107", 1.0690509682e+02 }, { "Ag108", 1.07905955556e+02 }, - { "Ag109", 1.08904752292e+02 }, { "Ag110", Ag110_Mass }, { "Ag111", 1.10905291157e+02 }, { "Ag112", 1.11907004814e+02 }, - { "Ag113", 1.12906566579e+02 }, { "Ag114", 1.13908803704e+02 }, { "Ag115", 1.14908762698e+02 }, { "Ag116", 1.15911359933e+02 }, - { "Ag117", 1.16911684562e+02 }, { "Ag118", 1.17914582768e+02 }, { "Ag119", 1.18915665059e+02 }, { "Ag120", 1.19918787384e+02 }, - { "Ag121", 1.20919848046e+02 }, { "Ag122", 1.2192353e+02 }, { "Ag123", 1.229249e+02 }, { "Ag124", 1.2392864e+02 }, - { "Ag125", 1.2493043e+02 }, { "Ag126", 1.259345e+02 }, { "Ag127", 1.2693677e+02 }, { "Ag128", 1.2794117e+02 }, - { "Ag129", 1.2894369e+02 }, { "Ag130", 1.29950448e+02 }, { "Cd_natural", 1.1241e+02 }, { "Cd95", 9.494987e+01 }, - { "Cd96", 9.593977e+01 }, { "Cd97", 9.693494e+01 }, { "Cd98", 9.7927395546e+01 }, { "Cd99", 9.892501e+01 }, - { "Cd100", 9.9920289525e+01 }, { "Cd101", 1.00918681538e+02 }, { "Cd102", 1.01914462258e+02 }, { "Cd103", 1.02913419246e+02 }, - { "Cd104", 1.03909849475e+02 }, { "Cd105", 1.04909467905e+02 }, { "Cd106", 1.0590645941e+02 }, { "Cd107", 1.06906617928e+02 }, - { "Cd108", 1.07904183683e+02 }, { "Cd109", 1.08904982293e+02 }, { "Cd110", 1.0990300207e+02 }, { "Cd111", 1.10904178107e+02 }, - { "Cd112", 1.11902757809e+02 }, { "Cd113", 1.12904401662e+02 }, { "Cd114", 1.1390335854e+02 }, { "Cd115", Cd115_Mass }, - { "Cd116", 1.15904755809e+02 }, { "Cd117", 1.16907218618e+02 }, { "Cd118", 1.1790691453e+02 }, { "Cd119", 1.18909921597e+02 }, - { "Cd120", 1.19909850129e+02 }, { "Cd121", 1.20912977363e+02 }, { "Cd122", 1.21913332432e+02 }, { "Cd123", 1.22917002999e+02 }, - { "Cd124", 1.23917647616e+02 }, { "Cd125", 1.2492124637e+02 }, { "Cd126", 1.25922353321e+02 }, { "Cd127", 1.26926443864e+02 }, - { "Cd128", 1.27927762285e+02 }, { "Cd129", 1.2893215e+02 }, { "Cd130", 1.29933901937e+02 }, { "Cd131", 1.3094067e+02 }, - { "Cd132", 1.3194555e+02 }, { "In_natural", 1.1482e+02 }, { "In97", 9.694954e+01 }, { "In98", 9.794214e+01 }, - { "In99", 9.893422e+01 }, { "In100", 9.9931110851e+01 }, { "In101", 1.0092634e+02 }, { "In102", 1.01924090238e+02 }, - { "In103", 1.02919914188e+02 }, { "In104", 1.03918296171e+02 }, { "In105", 1.0491467354e+02 }, { "In106", 1.05913465411e+02 }, - { "In107", 1.069102951e+02 }, { "In108", 1.0790969818e+02 }, { "In109", 1.08907150507e+02 }, { "In110", 1.09907165274e+02 }, - { "In111", 1.10905103278e+02 }, { "In112", 1.11905532331e+02 }, { "In113", 1.12904057761e+02 }, { "In114", 1.13904913876e+02 }, - { "In115", 1.14903878484e+02 }, { "In116", 1.15905259703e+02 }, { "In117", 1.16904513564e+02 }, { "In118", 1.17906354367e+02 }, - { "In119", 1.1890584535e+02 }, { "In120", 1.19907959608e+02 }, { "In121", 1.20907845822e+02 }, { "In122", 1.2191027601e+02 }, - { "In123", 1.22910438276e+02 }, { "In124", 1.23913175231e+02 }, { "In125", 1.24913600588e+02 }, { "In126", 1.25916463857e+02 }, - { "In127", 1.26917353091e+02 }, { "In128", 1.27920172328e+02 }, { "In129", 1.2892169698e+02 }, { "In130", 1.29924970049e+02 }, - { "In131", 1.30926851767e+02 }, { "In132", 1.3193299026e+02 }, { "In133", 1.3293781e+02 }, { "In134", 1.3394415e+02 }, - { "In135", 1.3494933e+02 }, { "Sn_natural", 1.1869e+02 }, { "Sn99", 9.894933e+01 }, { "Sn100", 9.9939044343e+01 }, - { "Sn101", 1.0093606e+02 }, { "Sn102", 1.01930295324e+02 }, { "Sn103", 1.029281e+02 }, { "Sn104", 1.03923143223e+02 }, - { "Sn105", 1.04921349437e+02 }, { "Sn106", 1.0591688062e+02 }, { "Sn107", 1.06915644329e+02 }, { "Sn108", 1.07911925378e+02 }, - { "Sn109", 1.08911283214e+02 }, { "Sn110", 1.09907842791e+02 }, { "Sn111", 1.1090773446e+02 }, { "Sn112", 1.11904818207e+02 }, - { "Sn113", 1.12905170577e+02 }, { "Sn114", 1.13902778869e+02 }, { "Sn115", 1.14903342397e+02 }, { "Sn116", 1.1590174053e+02 }, - { "Sn117", 1.16902951656e+02 }, { "Sn118", 1.17901603167e+02 }, { "Sn119", 1.1890330763e+02 }, { "Sn120", 1.19902194676e+02 }, - { "Sn121", 1.2090423548e+02 }, { "Sn122", 1.21903439046e+02 }, { "Sn123", 1.22905720838e+02 }, { "Sn124", 1.23905273946e+02 }, - { "Sn125", 1.24907784125e+02 }, { "Sn126", 1.2590765328e+02 }, { "Sn127", 1.26910360024e+02 }, { "Sn128", 1.27910536624e+02 }, - { "Sn129", 1.28913479e+02 }, { "Sn130", 1.29913967295e+02 }, { "Sn131", 1.30916999769e+02 }, { "Sn132", 1.31917815713e+02 }, - { "Sn133", 1.32923829249e+02 }, { "Sn134", 1.33928291765e+02 }, { "Sn135", 1.3493473e+02 }, { "Sn136", 1.3593934e+02 }, - { "Sn137", 1.3694599e+02 }, { "Sb_natural", 1.2175e+02 }, { "Sb103", 1.0293969e+02 }, { "Sb104", 1.03936472e+02 }, - { "Sb105", 1.04931486348e+02 }, { "Sb106", 1.05928791e+02 }, { "Sb107", 1.0692415e+02 }, { "Sb108", 1.0792216e+02 }, - { "Sb109", 1.08918132426e+02 }, { "Sb110", 1.09916753e+02 }, { "Sb111", 1.10913163e+02 }, { "Sb112", 1.11912398009e+02 }, - { "Sb113", 1.12909371672e+02 }, { "Sb114", 1.13909269e+02 }, { "Sb115", 1.14906598e+02 }, { "Sb116", 1.15906793629e+02 }, - { "Sb117", 1.16904835941e+02 }, { "Sb118", 1.17905528731e+02 }, { "Sb119", 1.18903942009e+02 }, { "Sb120", 1.19905072427e+02 }, - { "Sb121", 1.20903815686e+02 }, { "Sb122", 1.21905173651e+02 }, { "Sb123", 1.2290421397e+02 }, { "Sb124", 1.23905935743e+02 }, - { "Sb125", 1.24905253818e+02 }, { "Sb126", 1.2590724748e+02 }, { "Sb127", 1.26906923609e+02 }, { "Sb128", 1.27909169001e+02 }, - { "Sb129", 1.28909148442e+02 }, { "Sb130", 1.29911656324e+02 }, { "Sb131", 1.30911982275e+02 }, { "Sb132", 1.31914466896e+02 }, - { "Sb133", 1.3291525163e+02 }, { "Sb134", 1.33920379744e+02 }, { "Sb135", 1.34925165771e+02 }, { "Sb136", 1.3593035e+02 }, - { "Sb137", 1.3693531e+02 }, { "Sb138", 1.3794079e+02 }, { "Sb139", 1.3894598e+02 }, { "Te_natural", 1.276e+02 }, - { "Te105", 1.0494364e+02 }, { "Te106", 1.05937504237e+02 }, { "Te107", 1.06935006e+02 }, { "Te108", 1.07929444597e+02 }, - { "Te109", 1.08927415515e+02 }, { "Te110", 1.09922407316e+02 }, { "Te111", 1.10921110692e+02 }, { "Te112", 1.11917013672e+02 }, - { "Te113", 1.12915891e+02 }, { "Te114", 1.13912089e+02 }, { "Te115", 1.14911902e+02 }, { "Te116", 1.1590846e+02 }, - { "Te117", 1.16908644719e+02 }, { "Te118", 1.17905827581e+02 }, { "Te119", 1.18906403645e+02 }, { "Te120", 1.19904020222e+02 }, - { "Te121", 1.20904936424e+02 }, { "Te122", 1.21903043898e+02 }, { "Te123", 1.22904270029e+02 }, { "Te124", 1.23902817896e+02 }, - { "Te125", 1.24904430731e+02 }, { "Te126", 1.25903311696e+02 }, { "Te127", Te127_Mass }, { "Te128", 1.27904463056e+02 }, - { "Te129", Te129_Mass }, { "Te130", 1.29906224399e+02 }, { "Te131", 1.30908523864e+02 }, { "Te132", 1.3190855316e+02 }, - { "Te133", 1.32910955306e+02 }, { "Te134", 1.33911368737e+02 }, { "Te135", 1.34916448592e+02 }, { "Te136", 1.35920101246e+02 }, - { "Te137", 1.36925322954e+02 }, { "Te138", 1.3792922e+02 }, { "Te139", 1.3893473e+02 }, { "Te140", 1.3993885e+02 }, - { "Te141", 1.4094465e+02 }, { "Te142", 1.4194908e+02 }, { "I_natural", 1.269045e+02 }, { "I108", 1.07943475e+02 }, - { "I109", 1.08938149417e+02 }, { "I110", 1.09935242e+02 }, { "I111", 1.10930276e+02 }, { "I112", 1.1192797e+02 }, - { "I113", 1.12923640583e+02 }, { "I114", 1.1392185e+02 }, { "I115", 1.14918048e+02 }, { "I116", 1.15916808633e+02 }, - { "I117", 1.1691365e+02 }, { "I118", 1.17913074e+02 }, { "I119", 1.18910074e+02 }, { "I120", 1.19910048173e+02 }, - { "I121", 1.20907366811e+02 }, { "I122", 1.21907589284e+02 }, { "I123", 1.22905588965e+02 }, { "I124", 1.23906209852e+02 }, - { "I125", 1.24904630164e+02 }, { "I126", 1.25905624153e+02 }, { "I127", 1.26904472681e+02 }, { "I128", 1.27905809443e+02 }, - { "I129", 1.28904987722e+02 }, { "I130", 1.29906674247e+02 }, { "I131", 1.30906124609e+02 }, { "I132", 1.31907997381e+02 }, - { "I133", 1.32907796939e+02 }, { "I134", 1.33909744465e+02 }, { "I135", 1.34910048121e+02 }, { "I136", 1.35914653993e+02 }, - { "I137", 1.3691787084e+02 }, { "I138", 1.37922349591e+02 }, { "I139", 1.38926099478e+02 }, { "I140", 1.39931e+02 }, - { "I141", 1.4093503e+02 }, { "I142", 1.4194018e+02 }, { "I143", 1.4294456e+02 }, { "I144", 1.4394999e+02 }, - { "Xe_natural", 1.313e+02 }, { "Xe110", 1.09944278068e+02 }, { "Xe111", 1.10941602e+02 }, { "Xe112", 1.11935623112e+02 }, - { "Xe113", 1.12933341174e+02 }, { "Xe114", 1.13927980306e+02 }, { "Xe115", 1.1492629392e+02 }, { "Xe116", 1.15921581087e+02 }, - { "Xe117", 1.16920358735e+02 }, { "Xe118", 1.17916178655e+02 }, { "Xe119", 1.18915410688e+02 }, { "Xe120", 1.19911784244e+02 }, - { "Xe121", 1.20911461829e+02 }, { "Xe122", 1.21908367632e+02 }, { "Xe123", 1.2290848191e+02 }, { "Xe124", 1.23905893003e+02 }, - { "Xe125", 1.24906395464e+02 }, { "Xe126", 1.25904273634e+02 }, { "Xe127", 1.26905183723e+02 }, { "Xe128", 1.27903531275e+02 }, - { "Xe129", 1.28904779435e+02 }, { "Xe130", 1.29903508007e+02 }, { "Xe131", 1.30905082362e+02 }, { "Xe132", 1.31904153457e+02 }, - { "Xe133", 1.32905910722e+02 }, { "Xe134", 1.33905394464e+02 }, { "Xe135", 1.34907227495e+02 }, { "Xe136", 1.35907218794e+02 }, - { "Xe137", 1.36911562125e+02 }, { "Xe138", 1.37913954475e+02 }, { "Xe139", 1.38918792936e+02 }, { "Xe140", 1.39921640943e+02 }, - { "Xe141", 1.40926648049e+02 }, { "Xe142", 1.4192970959e+02 }, { "Xe143", 1.4293511e+02 }, { "Xe144", 1.4393851e+02 }, - { "Xe145", 1.4494407e+02 }, { "Xe146", 1.4594775e+02 }, { "Xe147", 1.4695356e+02 }, { "Cs_natural", 1.329054e+02 }, - { "Cs112", 1.11950301e+02 }, { "Cs113", 1.12944493274e+02 }, { "Cs114", 1.1394145e+02 }, { "Cs115", 1.1493591e+02 }, - { "Cs116", 1.15933367e+02 }, { "Cs117", 1.16928670701e+02 }, { "Cs118", 1.17926559494e+02 }, { "Cs119", 1.18922377304e+02 }, - { "Cs120", 1.19920677253e+02 }, { "Cs121", 1.20917229209e+02 }, { "Cs122", 1.21916113434e+02 }, { "Cs123", 1.22912996036e+02 }, - { "Cs124", 1.23912257798e+02 }, { "Cs125", 1.2490972827e+02 }, { "Cs126", 1.25909451977e+02 }, { "Cs127", 1.26907417525e+02 }, - { "Cs128", 1.27907748866e+02 }, { "Cs129", 1.28906064426e+02 }, { "Cs130", 1.29906708552e+02 }, { "Cs131", 1.30905463926e+02 }, - { "Cs132", 1.3190643426e+02 }, { "Cs133", 1.32905451932e+02 }, { "Cs134", 1.33906718475e+02 }, { "Cs135", 1.34905977008e+02 }, - { "Cs136", 1.35907311576e+02 }, { "Cs137", 1.36907089473e+02 }, { "Cs138", 1.37911016704e+02 }, { "Cs139", 1.38913363999e+02 }, - { "Cs140", 1.39917282354e+02 }, { "Cs141", 1.40920045752e+02 }, { "Cs142", 1.41924298927e+02 }, { "Cs143", 1.4292735175e+02 }, - { "Cs144", 1.43932076914e+02 }, { "Cs145", 1.4493552617e+02 }, { "Cs146", 1.45940289423e+02 }, { "Cs147", 1.46944155008e+02 }, - { "Cs148", 1.47949218153e+02 }, { "Cs149", 1.4895293e+02 }, { "Cs150", 1.4995817e+02 }, { "Cs151", 1.5096219e+02 }, - { "Ba_natural", 1.3733e+02 }, { "Ba114", 1.13950675405e+02 }, { "Ba115", 1.1494737e+02 }, { "Ba116", 1.1594138e+02 }, - { "Ba117", 1.16938499e+02 }, { "Ba118", 1.1793304e+02 }, { "Ba119", 1.18930659661e+02 }, { "Ba120", 1.19926044974e+02 }, - { "Ba121", 1.20924054499e+02 }, { "Ba122", 1.21919904e+02 }, { "Ba123", 1.22918781036e+02 }, { "Ba124", 1.23915093603e+02 }, - { "Ba125", 1.24914472912e+02 }, { "Ba126", 1.25911250177e+02 }, { "Ba127", 1.26911093797e+02 }, { "Ba128", 1.27908317698e+02 }, - { "Ba129", 1.28908679439e+02 }, { "Ba130", 1.29906320811e+02 }, { "Ba131", 1.30906941118e+02 }, { "Ba132", 1.31905061288e+02 }, - { "Ba133", 1.3290600749e+02 }, { "Ba134", 1.33904508383e+02 }, { "Ba135", 1.34905688591e+02 }, { "Ba136", 1.35904575945e+02 }, - { "Ba137", 1.36905827384e+02 }, { "Ba138", 1.37905247237e+02 }, { "Ba139", 1.38908841341e+02 }, { "Ba140", 1.39910604505e+02 }, - { "Ba141", 1.40914411009e+02 }, { "Ba142", 1.4191645341e+02 }, { "Ba143", 1.42920626719e+02 }, { "Ba144", 1.43922952853e+02 }, - { "Ba145", 1.44927627032e+02 }, { "Ba146", 1.45930219572e+02 }, { "Ba147", 1.46934945e+02 }, { "Ba148", 1.47937720047e+02 }, - { "Ba149", 1.4894258e+02 }, { "Ba150", 1.4994568e+02 }, { "Ba151", 1.5095081e+02 }, { "Ba152", 1.5195427e+02 }, - { "Ba153", 1.5295961e+02 }, { "La_natural", 1.389055e+02 }, { "La117", 1.16950068e+02 }, { "La118", 1.1794673e+02 }, - { "La119", 1.1894099e+02 }, { "La120", 1.1993807e+02 }, { "La121", 1.2093301e+02 }, { "La122", 1.2193071e+02 }, - { "La123", 1.2292624e+02 }, { "La124", 1.23924574275e+02 }, { "La125", 1.24920816034e+02 }, { "La126", 1.25919512667e+02 }, - { "La127", 1.26916375448e+02 }, { "La128", 1.27915585177e+02 }, { "La129", 1.28912692815e+02 }, { "La130", 1.29912368724e+02 }, - { "La131", 1.3091007e+02 }, { "La132", 1.31910101145e+02 }, { "La133", 1.32908218e+02 }, { "La134", 1.33908514011e+02 }, - { "La135", 1.34906976844e+02 }, { "La136", 1.35907635536e+02 }, { "La137", 1.36906493598e+02 }, { "La138", 1.3790711193e+02 }, - { "La139", 1.38906353267e+02 }, { "La140", 1.39909477645e+02 }, { "La141", 1.40910962152e+02 }, { "La142", 1.4191407913e+02 }, - { "La143", 1.4291606272e+02 }, { "La144", 1.43919599647e+02 }, { "La145", 1.44921645401e+02 }, { "La146", 1.4592579346e+02 }, - { "La147", 1.46928235284e+02 }, { "La148", 1.47932228868e+02 }, { "La149", 1.48934734e+02 }, { "La150", 1.4993877e+02 }, - { "La151", 1.5094172e+02 }, { "La152", 1.5194625e+02 }, { "La153", 1.5294962e+02 }, { "La154", 1.539545e+02 }, - { "La155", 1.5495835e+02 }, { "Ce_natural", 1.4012e+02 }, { "Ce119", 1.1895276e+02 }, { "Ce120", 1.1994664e+02 }, - { "Ce121", 1.2094342e+02 }, { "Ce122", 1.2193791e+02 }, { "Ce123", 1.229354e+02 }, { "Ce124", 1.2393041e+02 }, - { "Ce125", 1.2492844e+02 }, { "Ce126", 1.25923971e+02 }, { "Ce127", 1.26922731e+02 }, { "Ce128", 1.27918911e+02 }, - { "Ce129", 1.28918102e+02 }, { "Ce130", 1.29914736e+02 }, { "Ce131", 1.30914422e+02 }, { "Ce132", 1.31911460487e+02 }, - { "Ce133", 1.3291151502e+02 }, { "Ce134", 1.33908924821e+02 }, { "Ce135", 1.34909151396e+02 }, { "Ce136", 1.35907172422e+02 }, - { "Ce137", 1.36907805577e+02 }, { "Ce138", 1.37905991321e+02 }, { "Ce139", 1.38906652651e+02 }, { "Ce140", 1.39905438706e+02 }, - { "Ce141", 1.4090827627e+02 }, { "Ce142", 1.41909244205e+02 }, { "Ce143", 1.4291238591e+02 }, { "Ce144", 1.43913647336e+02 }, - { "Ce145", 1.44917233135e+02 }, { "Ce146", 1.45918759009e+02 }, { "Ce147", 1.46922673954e+02 }, { "Ce148", 1.4792443241e+02 }, - { "Ce149", 1.48928399883e+02 }, { "Ce150", 1.49930408931e+02 }, { "Ce151", 1.50933976196e+02 }, { "Ce152", 1.5193654e+02 }, - { "Ce153", 1.5294058e+02 }, { "Ce154", 1.5394342e+02 }, { "Ce155", 1.5494804e+02 }, { "Ce156", 1.5595126e+02 }, - { "Ce157", 1.5695634e+02 }, { "Pr_natural", 1.409077e+02 }, { "Pr121", 1.20955364e+02 }, { "Pr122", 1.2195181e+02 }, - { "Pr123", 1.2294596e+02 }, { "Pr124", 1.2394296e+02 }, { "Pr125", 1.2493783e+02 }, { "Pr126", 1.2593531e+02 }, - { "Pr127", 1.2693083e+02 }, { "Pr128", 1.27928791e+02 }, { "Pr129", 1.28925095e+02 }, { "Pr130", 1.2992359e+02 }, - { "Pr131", 1.30920259e+02 }, { "Pr132", 1.31919255e+02 }, { "Pr133", 1.32916330532e+02 }, { "Pr134", 1.33915711737e+02 }, - { "Pr135", 1.34913111745e+02 }, { "Pr136", 1.35912691611e+02 }, { "Pr137", 1.36910705455e+02 }, { "Pr138", 1.37910754636e+02 }, - { "Pr139", 1.38908938399e+02 }, { "Pr140", 1.39909075874e+02 }, { "Pr141", 1.40907652769e+02 }, { "Pr142", 1.41910044806e+02 }, - { "Pr143", 1.42910816926e+02 }, { "Pr144", 1.43913305245e+02 }, { "Pr145", 1.449145117e+02 }, { "Pr146", 1.45917644336e+02 }, - { "Pr147", 1.46918995992e+02 }, { "Pr148", 1.47922135026e+02 }, { "Pr149", 1.48923717651e+02 }, { "Pr150", 1.49926672997e+02 }, - { "Pr151", 1.50928318618e+02 }, { "Pr152", 1.51931499225e+02 }, { "Pr153", 1.52933838905e+02 }, { "Pr154", 1.53937518153e+02 }, - { "Pr155", 1.5494012e+02 }, { "Pr156", 1.5594427e+02 }, { "Pr157", 1.5694743e+02 }, { "Pr158", 1.5795198e+02 }, - { "Pr159", 1.589555e+02 }, { "Nd_natural", 1.4424e+02 }, { "Nd124", 1.2395223e+02 }, { "Nd125", 1.2494888e+02 }, - { "Nd126", 1.2594322e+02 }, { "Nd127", 1.269405e+02 }, { "Nd128", 1.2793539e+02 }, { "Nd129", 1.28933188e+02 }, - { "Nd130", 1.29928506e+02 }, { "Nd131", 1.30927247e+02 }, { "Nd132", 1.31923321237e+02 }, { "Nd133", 1.32922348e+02 }, - { "Nd134", 1.33918790181e+02 }, { "Nd135", 1.3491818116e+02 }, { "Nd136", 1.35914976035e+02 }, { "Nd137", 1.36914567137e+02 }, - { "Nd138", 1.37911949961e+02 }, { "Nd139", 1.38911978288e+02 }, { "Nd140", 1.39909552e+02 }, { "Nd141", 1.40909609854e+02 }, - { "Nd142", 1.41907723297e+02 }, { "Nd143", 1.4290981429e+02 }, { "Nd144", 1.43910087274e+02 }, { "Nd145", 1.44912573636e+02 }, - { "Nd146", 1.45913116939e+02 }, { "Nd147", 1.46916100441e+02 }, { "Nd148", 1.47916893288e+02 }, { "Nd149", 1.48920148842e+02 }, - { "Nd150", 1.49920890888e+02 }, { "Nd151", 1.50923828929e+02 }, { "Nd152", 1.51924682219e+02 }, { "Nd153", 1.52927698232e+02 }, - { "Nd154", 1.53929477307e+02 }, { "Nd155", 1.54932932e+02 }, { "Nd156", 1.55935018114e+02 }, { "Nd157", 1.5693903e+02 }, - { "Nd158", 1.579416e+02 }, { "Nd159", 1.5894609e+02 }, { "Nd160", 1.5994909e+02 }, { "Nd161", 1.6095388e+02 }, - { "Pm_natural", 1.45e+02 }, { "Pm126", 1.2595752e+02 }, { "Pm127", 1.2695163e+02 }, { "Pm128", 1.2794842e+02 }, - { "Pm129", 1.2894316e+02 }, { "Pm130", 1.2994045e+02 }, { "Pm131", 1.3093587e+02 }, { "Pm132", 1.3193375e+02 }, - { "Pm133", 1.32929782e+02 }, { "Pm134", 1.33928353e+02 }, { "Pm135", 1.34924876e+02 }, { "Pm136", 1.35923565829e+02 }, - { "Pm137", 1.36920479493e+02 }, { "Pm138", 1.37919548281e+02 }, { "Pm139", 1.38916804082e+02 }, { "Pm140", 1.39916041789e+02 }, - { "Pm141", 1.40913555054e+02 }, { "Pm142", 1.41912874471e+02 }, { "Pm143", 1.42910932616e+02 }, { "Pm144", 1.43912590843e+02 }, - { "Pm145", 1.44912749023e+02 }, { "Pm146", 1.45914696305e+02 }, { "Pm147", 1.46915138545e+02 }, { "Pm148", Pm148_Mass }, - { "Pm149", 1.48918334155e+02 }, { "Pm150", 1.49920983561e+02 }, { "Pm151", 1.50921206973e+02 }, { "Pm152", 1.51923496795e+02 }, - { "Pm153", 1.52924116889e+02 }, { "Pm154", 1.53926463943e+02 }, { "Pm155", 1.54928101267e+02 }, { "Pm156", 1.55931056736e+02 }, - { "Pm157", 1.56933039369e+02 }, { "Pm158", 1.57936561407e+02 }, { "Pm159", 1.5893897e+02 }, { "Pm160", 1.5994299e+02 }, - { "Pm161", 1.6094586e+02 }, { "Pm162", 1.6195029e+02 }, { "Pm163", 1.6295368e+02 }, { "Sm_natural", 1.504e+02 }, - { "Sm128", 1.2795808e+02 }, { "Sm129", 1.2895464e+02 }, { "Sm130", 1.2994892e+02 }, { "Sm131", 1.3094611e+02 }, - { "Sm132", 1.3194069e+02 }, { "Sm133", 1.3293867e+02 }, { "Sm134", 1.3393397e+02 }, { "Sm135", 1.3493252e+02 }, - { "Sm136", 1.35928275527e+02 }, { "Sm137", 1.36926971746e+02 }, { "Sm138", 1.37923243961e+02 }, { "Sm139", 1.38922296605e+02 }, - { "Sm140", 1.39918994687e+02 }, { "Sm141", 1.40918476488e+02 }, { "Sm142", 1.41915197641e+02 }, { "Sm143", 1.42914628338e+02 }, - { "Sm144", 1.43911999478e+02 }, { "Sm145", 1.44913410353e+02 }, { "Sm146", 1.459130409e+02 }, { "Sm147", 1.46914897923e+02 }, - { "Sm148", 1.47914822674e+02 }, { "Sm149", 1.48917184735e+02 }, { "Sm150", 1.49917275539e+02 }, { "Sm151", 1.50919932409e+02 }, - { "Sm152", 1.51919732425e+02 }, { "Sm153", 1.52922097356e+02 }, { "Sm154", 1.53922209273e+02 }, { "Sm155", 1.54924640161e+02 }, - { "Sm156", 1.55925527887e+02 }, { "Sm157", 1.56928358717e+02 }, { "Sm158", 1.57929991317e+02 }, { "Sm159", 1.58933211271e+02 }, - { "Sm160", 1.5993514e+02 }, { "Sm161", 1.6093883e+02 }, { "Sm162", 1.6194122e+02 }, { "Sm163", 1.6294536e+02 }, - { "Sm164", 1.6394828e+02 }, { "Sm165", 1.6495298e+02 }, { "Eu_natural", 1.5196e+02 }, { "Eu130", 1.29963569e+02 }, - { "Eu131", 1.30957753e+02 }, { "Eu132", 1.3195437e+02 }, { "Eu133", 1.3294924e+02 }, { "Eu134", 1.3394651e+02 }, - { "Eu135", 1.3494182e+02 }, { "Eu136", 1.359396e+02 }, { "Eu137", 1.3693557e+02 }, { "Eu138", 1.37933709e+02 }, - { "Eu139", 1.3892979228e+02 }, { "Eu140", 1.39928087607e+02 }, { "Eu141", 1.4092493072e+02 }, { "Eu142", 1.41923434945e+02 }, - { "Eu143", 1.42920297509e+02 }, { "Eu144", 1.43918816823e+02 }, { "Eu145", 1.44916265237e+02 }, { "Eu146", 1.45917205817e+02 }, - { "Eu147", 1.46916746111e+02 }, { "Eu148", 1.47918085895e+02 }, { "Eu149", 1.48917931238e+02 }, { "Eu150", 1.49919701819e+02 }, - { "Eu151", 1.50919850161e+02 }, { "Eu152", 1.51921744534e+02 }, { "Eu153", 1.52921230339e+02 }, { "Eu154", 1.53922979237e+02 }, - { "Eu155", 1.5492289326e+02 }, { "Eu156", 1.55924752249e+02 }, { "Eu157", 1.56925423647e+02 }, { "Eu158", 1.57927845302e+02 }, - { "Eu159", 1.58929088861e+02 }, { "Eu160", 1.59931971e+02 }, { "Eu161", 1.6093368e+02 }, { "Eu162", 1.6193704e+02 }, - { "Eu163", 1.6293921e+02 }, { "Eu164", 1.6394299e+02 }, { "Eu165", 1.6494572e+02 }, { "Eu166", 1.6594997e+02 }, - { "Eu167", 1.6695321e+02 }, { "Gd_natural", 1.5725e+02 }, { "Gd134", 1.3395537e+02 }, { "Gd135", 1.3495257e+02 }, - { "Gd136", 1.3594734e+02 }, { "Gd137", 1.3694502e+02 }, { "Gd138", 1.3794012e+02 }, { "Gd139", 1.3893824e+02 }, - { "Gd140", 1.39933674e+02 }, { "Gd141", 1.40932126e+02 }, { "Gd142", 1.41928116e+02 }, { "Gd143", 1.4292674951e+02 }, - { "Gd144", 1.43922963e+02 }, { "Gd145", 1.44921709252e+02 }, { "Gd146", 1.45918310608e+02 }, { "Gd147", 1.4691909442e+02 }, - { "Gd148", 1.47918114524e+02 }, { "Gd149", 1.48919340915e+02 }, { "Gd150", 1.49918658876e+02 }, { "Gd151", 1.50920348482e+02 }, - { "Gd152", 1.51919790996e+02 }, { "Gd153", 1.52921749543e+02 }, { "Gd154", 1.53920865598e+02 }, { "Gd155", 1.54922622022e+02 }, - { "Gd156", 1.55922122743e+02 }, { "Gd157", 1.56923960135e+02 }, { "Gd158", 1.57924103912e+02 }, { "Gd159", 1.58926388658e+02 }, - { "Gd160", 1.59927054146e+02 }, { "Gd161", 1.60929669211e+02 }, { "Gd162", 1.61930984751e+02 }, { "Gd163", 1.6293399e+02 }, - { "Gd164", 1.6393586e+02 }, { "Gd165", 1.6493938e+02 }, { "Gd166", 1.659416e+02 }, { "Gd167", 1.6694557e+02 }, - { "Gd168", 1.6794836e+02 }, { "Gd169", 1.6895287e+02 }, { "Tb_natural", 1.589254e+02 }, { "Tb136", 1.3596138e+02 }, - { "Tb137", 1.3695598e+02 }, { "Tb138", 1.3795316e+02 }, { "Tb139", 1.3894829e+02 }, { "Tb140", 1.39945805049e+02 }, - { "Tb141", 1.40941448e+02 }, { "Tb142", 1.41938744e+02 }, { "Tb143", 1.42935121e+02 }, { "Tb144", 1.43933045e+02 }, - { "Tb145", 1.44929274e+02 }, { "Tb146", 1.45927246584e+02 }, { "Tb147", 1.46924044585e+02 }, { "Tb148", 1.47924271701e+02 }, - { "Tb149", 1.48923245909e+02 }, { "Tb150", 1.49923659686e+02 }, { "Tb151", 1.50923102543e+02 }, { "Tb152", 1.51924074438e+02 }, - { "Tb153", 1.52923434588e+02 }, { "Tb154", 1.53924678019e+02 }, { "Tb155", 1.54923505236e+02 }, { "Tb156", 1.55924747213e+02 }, - { "Tb157", 1.56924024604e+02 }, { "Tb158", 1.57925413137e+02 }, { "Tb159", 1.58925346757e+02 }, { "Tb160", 1.59927167606e+02 }, - { "Tb161", 1.60927569919e+02 }, { "Tb162", 1.61929488234e+02 }, { "Tb163", 1.62930647536e+02 }, { "Tb164", 1.63933350838e+02 }, - { "Tb165", 1.6493488e+02 }, { "Tb166", 1.65937991959e+02 }, { "Tb167", 1.6694005e+02 }, { "Tb168", 1.6794364e+02 }, - { "Tb169", 1.6894622e+02 }, { "Tb170", 1.6995025e+02 }, { "Tb171", 1.709533e+02 }, { "Dy_natural", 1.625e+02 }, - { "Dy138", 1.3796249e+02 }, { "Dy139", 1.3895954e+02 }, { "Dy140", 1.3995401e+02 }, { "Dy141", 1.4095135e+02 }, - { "Dy142", 1.41946366e+02 }, { "Dy143", 1.4294383e+02 }, { "Dy144", 1.43939254e+02 }, { "Dy145", 1.44937425e+02 }, - { "Dy146", 1.45932845369e+02 }, { "Dy147", 1.469310915e+02 }, { "Dy148", 1.47927149831e+02 }, { "Dy149", 1.48927304787e+02 }, - { "Dy150", 1.49925585184e+02 }, { "Dy151", 1.50926184601e+02 }, { "Dy152", 1.519247183e+02 }, { "Dy153", 1.5292576467e+02 }, - { "Dy154", 1.53924424457e+02 }, { "Dy155", 1.54925753775e+02 }, { "Dy156", 1.5592428311e+02 }, { "Dy157", 1.56925466095e+02 }, - { "Dy158", 1.57924409487e+02 }, { "Dy159", 1.58925739214e+02 }, { "Dy160", 1.59925197517e+02 }, { "Dy161", 1.60926933364e+02 }, - { "Dy162", 1.61926798447e+02 }, { "Dy163", 1.62928731159e+02 }, { "Dy164", 1.63929174751e+02 }, { "Dy165", 1.64931703333e+02 }, - { "Dy166", 1.65932806741e+02 }, { "Dy167", 1.66935655462e+02 }, { "Dy168", 1.67937128769e+02 }, { "Dy169", 1.68940307614e+02 }, - { "Dy170", 1.6994239e+02 }, { "Dy171", 1.709462e+02 }, { "Dy172", 1.7194876e+02 }, { "Dy173", 1.72953e+02 }, - { "Ho_natural", 1.649304e+02 }, { "Ho140", 1.39968539e+02 }, { "Ho141", 1.40963098e+02 }, { "Ho142", 1.4195977e+02 }, - { "Ho143", 1.4295461e+02 }, { "Ho144", 1.4395148e+02 }, { "Ho145", 1.449472e+02 }, { "Ho146", 1.4594464e+02 }, - { "Ho147", 1.46940056e+02 }, { "Ho148", 1.47937718e+02 }, { "Ho149", 1.48933774771e+02 }, { "Ho150", 1.49933496182e+02 }, - { "Ho151", 1.50931688142e+02 }, { "Ho152", 1.51931713714e+02 }, { "Ho153", 1.52930198789e+02 }, { "Ho154", 1.53930601579e+02 }, - { "Ho155", 1.54929103491e+02 }, { "Ho156", 1.55929839e+02 }, { "Ho157", 1.56928256188e+02 }, { "Ho158", 1.57928941007e+02 }, - { "Ho159", 1.58927711959e+02 }, { "Ho160", 1.59928729478e+02 }, { "Ho161", 1.60927854776e+02 }, { "Ho162", 1.61929095504e+02 }, - { "Ho163", 1.62928733903e+02 }, { "Ho164", 1.63930233507e+02 }, { "Ho165", 1.6493032207e+02 }, { "Ho166", Ho166_Mass }, - { "Ho167", 1.66933132633e+02 }, { "Ho168", 1.67935515708e+02 }, { "Ho169", 1.68936872273e+02 }, { "Ho170", 1.69939618929e+02 }, - { "Ho171", 1.7094146515e+02 }, { "Ho172", 1.7194482e+02 }, { "Ho173", 1.7294729e+02 }, { "Ho174", 1.7395115e+02 }, - { "Ho175", 1.7495405e+02 }, { "Er_natural", 1.6726e+02 }, { "Er143", 1.4296634e+02 }, { "Er144", 1.4396038e+02 }, - { "Er145", 1.4495739e+02 }, { "Er146", 1.45952e+02 }, { "Er147", 1.4694949e+02 }, { "Er148", 1.4794455e+02 }, - { "Er149", 1.48942306e+02 }, { "Er150", 1.49937913839e+02 }, { "Er151", 1.50937448903e+02 }, { "Er152", 1.51935050389e+02 }, - { "Er153", 1.52935063492e+02 }, { "Er154", 1.53932783081e+02 }, { "Er155", 1.54933208949e+02 }, { "Er156", 1.55931064698e+02 }, - { "Er157", 1.56931916e+02 }, { "Er158", 1.57929893474e+02 }, { "Er159", 1.58930684066e+02 }, { "Er160", 1.59929083292e+02 }, - { "Er161", 1.60929995309e+02 }, { "Er162", 1.61928778264e+02 }, { "Er163", 1.62930032749e+02 }, { "Er164", 1.63929200229e+02 }, - { "Er165", 1.64930726003e+02 }, { "Er166", 1.65930293061e+02 }, { "Er167", 1.66932048159e+02 }, { "Er168", 1.67932370224e+02 }, - { "Er169", 1.68934590364e+02 }, { "Er170", 1.69935464312e+02 }, { "Er171", 1.70938029808e+02 }, { "Er172", 1.71939356113e+02 }, - { "Er173", 1.729424e+02 }, { "Er174", 1.7394423e+02 }, { "Er175", 1.7494777e+02 }, { "Er176", 1.7595008e+02 }, - { "Er177", 1.7695405e+02 }, { "Tm_natural", 1.689342e+02 }, { "Tm145", 1.44970073e+02 }, { "Tm146", 1.45966425e+02 }, - { "Tm147", 1.46960961e+02 }, { "Tm148", 1.4795784e+02 }, { "Tm149", 1.4895272e+02 }, { "Tm150", 1.4994996e+02 }, - { "Tm151", 1.5094548349e+02 }, { "Tm152", 1.51944422e+02 }, { "Tm153", 1.52942012112e+02 }, { "Tm154", 1.53941567808e+02 }, - { "Tm155", 1.54939199459e+02 }, { "Tm156", 1.55938979933e+02 }, { "Tm157", 1.56936973e+02 }, { "Tm158", 1.57936979525e+02 }, - { "Tm159", 1.58934975e+02 }, { "Tm160", 1.59935262801e+02 }, { "Tm161", 1.60933549e+02 }, { "Tm162", 1.61933994682e+02 }, - { "Tm163", 1.62932651124e+02 }, { "Tm164", 1.6393356e+02 }, { "Tm165", 1.64932435492e+02 }, { "Tm166", 1.65933554131e+02 }, - { "Tm167", 1.66932851622e+02 }, { "Tm168", 1.67934172776e+02 }, { "Tm169", 1.6893421325e+02 }, { "Tm170", 1.69935801397e+02 }, - { "Tm171", 1.7093642944e+02 }, { "Tm172", 1.71938400044e+02 }, { "Tm173", 1.72939603607e+02 }, { "Tm174", 1.73942168605e+02 }, - { "Tm175", 1.74943836853e+02 }, { "Tm176", 1.75946994685e+02 }, { "Tm177", 1.7694904e+02 }, { "Tm178", 1.7795264e+02 }, - { "Tm179", 1.7895534e+02 }, { "Yb_natural", 1.7304e+02 }, { "Yb148", 1.4796742e+02 }, { "Yb149", 1.4896404e+02 }, - { "Yb150", 1.4995842e+02 }, { "Yb151", 1.50955400769e+02 }, { "Yb152", 1.51950288919e+02 }, { "Yb153", 1.5294948e+02 }, - { "Yb154", 1.53946393928e+02 }, { "Yb155", 1.54945782332e+02 }, { "Yb156", 1.55942818215e+02 }, { "Yb157", 1.56942627848e+02 }, - { "Yb158", 1.57939865617e+02 }, { "Yb159", 1.58940050099e+02 }, { "Yb160", 1.59937552344e+02 }, { "Yb161", 1.60937901678e+02 }, - { "Yb162", 1.6193576821e+02 }, { "Yb163", 1.62936334305e+02 }, { "Yb164", 1.63934489416e+02 }, { "Yb165", 1.64935279e+02 }, - { "Yb166", 1.65933882042e+02 }, { "Yb167", 1.66934949605e+02 }, { "Yb168", 1.67933896895e+02 }, { "Yb169", 1.68935189802e+02 }, - { "Yb170", 1.69934761837e+02 }, { "Yb171", 1.70936325799e+02 }, { "Yb172", 1.71936381469e+02 }, { "Yb173", 1.72938210787e+02 }, - { "Yb174", 1.73938862089e+02 }, { "Yb175", 1.7494127645e+02 }, { "Yb176", 1.75942571683e+02 }, { "Yb177", 1.76945260822e+02 }, - { "Yb178", 1.7794664668e+02 }, { "Yb179", 1.7895017e+02 }, { "Yb180", 1.7995233e+02 }, { "Yb181", 1.8095615e+02 }, - { "Lu_natural", 1.74967e+02 }, { "Lu150", 1.49973228e+02 }, { "Lu151", 1.50967577e+02 }, { "Lu152", 1.5196412e+02 }, - { "Lu153", 1.52958767331e+02 }, { "Lu154", 1.53957522e+02 }, { "Lu155", 1.54954316216e+02 }, { "Lu156", 1.55953032523e+02 }, - { "Lu157", 1.569500983e+02 }, { "Lu158", 1.57949313283e+02 }, { "Lu159", 1.58946628776e+02 }, { "Lu160", 1.59946033e+02 }, - { "Lu161", 1.60943572e+02 }, { "Lu162", 1.61943277288e+02 }, { "Lu163", 1.62941179e+02 }, { "Lu164", 1.63941339e+02 }, - { "Lu165", 1.64939406724e+02 }, { "Lu166", 1.65939859e+02 }, { "Lu167", 1.6693827e+02 }, { "Lu168", 1.67938739111e+02 }, - { "Lu169", 1.68937651439e+02 }, { "Lu170", 1.69938474968e+02 }, { "Lu171", 1.70937913136e+02 }, { "Lu172", 1.71939085669e+02 }, - { "Lu173", 1.72938930602e+02 }, { "Lu174", 1.7394033748e+02 }, { "Lu175", 1.74940771819e+02 }, { "Lu176", 1.7594268631e+02 }, - { "Lu177", 1.76943758055e+02 }, { "Lu178", 1.77945954559e+02 }, { "Lu179", 1.78947327443e+02 }, { "Lu180", 1.7994988116e+02 }, - { "Lu181", 1.8095197e+02 }, { "Lu182", 1.8195504e+02 }, { "Lu183", 1.8295757e+02 }, { "Lu184", 1.8396091e+02 }, - { "Hf_natural", 1.7849e+02 }, { "Hf153", 1.5297069e+02 }, { "Hf154", 1.5396486e+02 }, { "Hf155", 1.5496339e+02 }, - { "Hf156", 1.55959364025e+02 }, { "Hf157", 1.56958396e+02 }, { "Hf158", 1.57954799366e+02 }, { "Hf159", 1.5895399487e+02 }, - { "Hf160", 1.59950684379e+02 }, { "Hf161", 1.60950274844e+02 }, { "Hf162", 1.61947210498e+02 }, { "Hf163", 1.62947089e+02 }, - { "Hf164", 1.63944367284e+02 }, { "Hf165", 1.64944567e+02 }, { "Hf166", 1.6594218e+02 }, { "Hf167", 1.669426e+02 }, - { "Hf168", 1.67940568e+02 }, { "Hf169", 1.68941259e+02 }, { "Hf170", 1.69939609e+02 }, { "Hf171", 1.70940492e+02 }, - { "Hf172", 1.71939448301e+02 }, { "Hf173", 1.72940513e+02 }, { "Hf174", 1.73940046178e+02 }, { "Hf175", 1.74941509181e+02 }, - { "Hf176", 1.75941408631e+02 }, { "Hf177", 1.76943220651e+02 }, { "Hf178", 1.77943698766e+02 }, { "Hf179", 1.78945816145e+02 }, - { "Hf180", 1.79946549953e+02 }, { "Hf181", 1.80949101246e+02 }, { "Hf182", 1.81950554096e+02 }, { "Hf183", 1.82953530439e+02 }, - { "Hf184", 1.83955446515e+02 }, { "Hf185", 1.8495882e+02 }, { "Hf186", 1.8596089e+02 }, { "Hf187", 1.8696459e+02 }, - { "Hf188", 1.8796685e+02 }, { "Ta_natural", 1.809479e+02 }, { "Ta155", 1.54974592e+02 }, { "Ta156", 1.55972303e+02 }, - { "Ta157", 1.56968192445e+02 }, { "Ta158", 1.57966699e+02 }, { "Ta159", 1.58963018173e+02 }, { "Ta160", 1.59961486056e+02 }, - { "Ta161", 1.60958417e+02 }, { "Ta162", 1.61957291859e+02 }, { "Ta163", 1.62954330271e+02 }, { "Ta164", 1.63953534e+02 }, - { "Ta165", 1.64950772514e+02 }, { "Ta166", 1.65950512e+02 }, { "Ta167", 1.66948093e+02 }, { "Ta168", 1.67948047e+02 }, - { "Ta169", 1.68946011e+02 }, { "Ta170", 1.69946175e+02 }, { "Ta171", 1.70944476e+02 }, { "Ta172", 1.71944895e+02 }, - { "Ta173", 1.7294375e+02 }, { "Ta174", 1.73944454e+02 }, { "Ta175", 1.74943737e+02 }, { "Ta176", 1.75944857e+02 }, - { "Ta177", 1.76944472403e+02 }, { "Ta178", 1.77945778221e+02 }, { "Ta179", 1.78945929535e+02 }, { "Ta180", 1.79947464831e+02 }, - { "Ta181", 1.80947995763e+02 }, { "Ta182", 1.81950151849e+02 }, { "Ta183", 1.82951372616e+02 }, { "Ta184", 1.83954007966e+02 }, - { "Ta185", 1.84955559375e+02 }, { "Ta186", 1.85958552023e+02 }, { "Ta187", 1.8696053e+02 }, { "Ta188", 1.879637e+02 }, - { "Ta189", 1.8896583e+02 }, { "Ta190", 1.8996923e+02 }, { "W_natural", 1.8385e+02 }, { "W158", 1.57974562e+02 }, - { "W159", 1.58972918e+02 }, { "W160", 1.59968478805e+02 }, { "W161", 1.60967357e+02 }, { "W162", 1.61963497417e+02 }, - { "W163", 1.62962523542e+02 }, { "W164", 1.63958954382e+02 }, { "W165", 1.64958279949e+02 }, { "W166", 1.65955027253e+02 }, - { "W167", 1.66954816014e+02 }, { "W168", 1.67951808394e+02 }, { "W169", 1.6895177879e+02 }, { "W170", 1.69949228482e+02 }, - { "W171", 1.70949451e+02 }, { "W172", 1.71947292e+02 }, { "W173", 1.72947689e+02 }, { "W174", 1.73946079e+02 }, - { "W175", 1.74946717e+02 }, { "W176", 1.75945634e+02 }, { "W177", 1.76946643e+02 }, { "W178", 1.77945876236e+02 }, - { "W179", 1.78947070447e+02 }, { "W180", 1.79946704459e+02 }, { "W181", 1.80948197248e+02 }, { "W182", 1.81948204156e+02 }, - { "W183", 1.82950222951e+02 }, { "W184", 1.83950931188e+02 }, { "W185", 1.84953419264e+02 }, { "W186", 1.85954364127e+02 }, - { "W187", 1.86957160466e+02 }, { "W188", 1.87958489105e+02 }, { "W189", 1.88961912868e+02 }, { "W190", 1.89963181378e+02 }, - { "W191", 1.909666e+02 }, { "W192", 1.9196817e+02 }, { "Re_natural", 1.86207e+02 }, { "Re160", 1.59982115e+02 }, - { "Re161", 1.60977589119e+02 }, { "Re162", 1.61976002e+02 }, { "Re163", 1.62972080535e+02 }, { "Re164", 1.63970323e+02 }, - { "Re165", 1.64967088557e+02 }, { "Re166", 1.65965808e+02 }, { "Re167", 1.66962601e+02 }, { "Re168", 1.67961572608e+02 }, - { "Re169", 1.68958791096e+02 }, { "Re170", 1.69958220071e+02 }, { "Re171", 1.70955716e+02 }, { "Re172", 1.71955422961e+02 }, - { "Re173", 1.72953243e+02 }, { "Re174", 1.73953115e+02 }, { "Re175", 1.74951381e+02 }, { "Re176", 1.75951623e+02 }, - { "Re177", 1.76950328e+02 }, { "Re178", 1.77950989e+02 }, { "Re179", 1.78949987641e+02 }, { "Re180", 1.79950789084e+02 }, - { "Re181", 1.80950067916e+02 }, { "Re182", 1.8195121008e+02 }, { "Re183", 1.82950819841e+02 }, { "Re184", 1.83952520756e+02 }, - { "Re185", 1.84952954982e+02 }, { "Re186", 1.85954986084e+02 }, { "Re187", 1.86955753109e+02 }, { "Re188", 1.87958114438e+02 }, - { "Re189", 1.88959229007e+02 }, { "Re190", 1.89961817977e+02 }, { "Re191", 1.90963125242e+02 }, { "Re192", 1.9196596e+02 }, - { "Re193", 1.9296747e+02 }, { "Re194", 1.9397042e+02 }, { "Os_natural", 1.902e+02 }, { "Os162", 1.61984431e+02 }, - { "Os163", 1.6298269e+02 }, { "Os164", 1.63978035649e+02 }, { "Os165", 1.64976762e+02 }, { "Os166", 1.65972690753e+02 }, - { "Os167", 1.66971547969e+02 }, { "Os168", 1.67967803678e+02 }, { "Os169", 1.6896701927e+02 }, { "Os170", 1.69963577028e+02 }, - { "Os171", 1.70963184819e+02 }, { "Os172", 1.71960023303e+02 }, { "Os173", 1.72959808409e+02 }, { "Os174", 1.73957062202e+02 }, - { "Os175", 1.74956945835e+02 }, { "Os176", 1.75954806e+02 }, { "Os177", 1.76954965324e+02 }, { "Os178", 1.77953251241e+02 }, - { "Os179", 1.78953816017e+02 }, { "Os180", 1.79952378803e+02 }, { "Os181", 1.80953244e+02 }, { "Os182", 1.81952110186e+02 }, - { "Os183", 1.82953126102e+02 }, { "Os184", 1.83952489071e+02 }, { "Os185", 1.84954042265e+02 }, { "Os186", 1.85953838158e+02 }, - { "Os187", 1.86955750458e+02 }, { "Os188", 1.87955838228e+02 }, { "Os189", 1.8895814747e+02 }, { "Os190", 1.89958447048e+02 }, - { "Os191", 1.90960929718e+02 }, { "Os192", 1.9196148069e+02 }, { "Os193", 1.92964151563e+02 }, { "Os194", 1.93965182083e+02 }, - { "Os195", 1.94968126661e+02 }, { "Os196", 1.95969639333e+02 }, { "Ir_natural", 1.9222e+02 }, { "Ir164", 1.63992201e+02 }, - { "Ir165", 1.6498752e+02 }, { "Ir166", 1.65985824e+02 }, { "Ir167", 1.66981665156e+02 }, { "Ir168", 1.67979881e+02 }, - { "Ir169", 1.68976294942e+02 }, { "Ir170", 1.69974965e+02 }, { "Ir171", 1.70971626042e+02 }, { "Ir172", 1.71970456e+02 }, - { "Ir173", 1.72967501739e+02 }, { "Ir174", 1.73966861045e+02 }, { "Ir175", 1.74964112895e+02 }, { "Ir176", 1.75963648688e+02 }, - { "Ir177", 1.769613015e+02 }, { "Ir178", 1.77961082e+02 }, { "Ir179", 1.78959122266e+02 }, { "Ir180", 1.79959229446e+02 }, - { "Ir181", 1.80957625297e+02 }, { "Ir182", 1.81958076296e+02 }, { "Ir183", 1.82956846458e+02 }, { "Ir184", 1.83957476e+02 }, - { "Ir185", 1.84956698e+02 }, { "Ir186", 1.85957946104e+02 }, { "Ir187", 1.86957363361e+02 }, { "Ir188", 1.87958853121e+02 }, - { "Ir189", 1.88958718935e+02 }, { "Ir190", 1.89960545968e+02 }, { "Ir191", 1.90960594046e+02 }, { "Ir192", 1.91962605012e+02 }, - { "Ir193", 1.9296292643e+02 }, { "Ir194", 1.93965078378e+02 }, { "Ir195", 1.94965979573e+02 }, { "Ir196", 1.95968396542e+02 }, - { "Ir197", 1.96969653285e+02 }, { "Ir198", 1.9797228e+02 }, { "Ir199", 1.98973804583e+02 }, { "Pt_natural", 1.9509e+02 }, - { "Pt166", 1.65994855e+02 }, { "Pt167", 1.66992979e+02 }, { "Pt168", 1.67988150742e+02 }, { "Pt169", 1.68986715e+02 }, - { "Pt170", 1.69982495289e+02 }, { "Pt171", 1.70981244542e+02 }, { "Pt172", 1.71977347128e+02 }, { "Pt173", 1.72976444754e+02 }, - { "Pt174", 1.73972818767e+02 }, { "Pt175", 1.74972420552e+02 }, { "Pt176", 1.75968944622e+02 }, { "Pt177", 1.76968469481e+02 }, - { "Pt178", 1.77965648724e+02 }, { "Pt179", 1.78965363404e+02 }, { "Pt180", 1.79963031477e+02 }, { "Pt181", 1.80963097285e+02 }, - { "Pt182", 1.81961170656e+02 }, { "Pt183", 1.82961596703e+02 }, { "Pt184", 1.83959922251e+02 }, { "Pt185", 1.84960619e+02 }, - { "Pt186", 1.85959350813e+02 }, { "Pt187", 1.86960587e+02 }, { "Pt188", 1.87959395391e+02 }, { "Pt189", 1.88960833686e+02 }, - { "Pt190", 1.89959931655e+02 }, { "Pt191", 1.90961676661e+02 }, { "Pt192", 1.91961038005e+02 }, { "Pt193", 1.92962987401e+02 }, - { "Pt194", 1.93962680253e+02 }, { "Pt195", 1.94964791134e+02 }, { "Pt196", 1.95964951521e+02 }, { "Pt197", 1.96967340182e+02 }, - { "Pt198", 1.9796789279e+02 }, { "Pt199", 1.98970593094e+02 }, { "Pt200", 1.99971440677e+02 }, { "Pt201", 2.00974512868e+02 }, - { "Pt202", 2.0197574e+02 }, { "Au_natural", 1.969665e+02 }, { "Au169", 1.6899808e+02 }, { "Au170", 1.69996122e+02 }, - { "Au171", 1.70991878881e+02 }, { "Au172", 1.71990035e+02 }, { "Au173", 1.7298623738e+02 }, { "Au174", 1.73984761e+02 }, - { "Au175", 1.74981274107e+02 }, { "Au176", 1.75980099e+02 }, { "Au177", 1.76976864908e+02 }, { "Au178", 1.7797603192e+02 }, - { "Au179", 1.78973212812e+02 }, { "Au180", 1.79972521124e+02 }, { "Au181", 1.80970079048e+02 }, { "Au182", 1.81969617874e+02 }, - { "Au183", 1.82967593034e+02 }, { "Au184", 1.83967451524e+02 }, { "Au185", 1.84965789411e+02 }, { "Au186", 1.85965952703e+02 }, - { "Au187", 1.86964567541e+02 }, { "Au188", 1.87965323661e+02 }, { "Au189", 1.88963948286e+02 }, { "Au190", 1.89964700339e+02 }, - { "Au191", 1.90963704225e+02 }, { "Au192", 1.91964812953e+02 }, { "Au193", 1.92964149715e+02 }, { "Au194", 1.9396536525e+02 }, - { "Au195", 1.9496503464e+02 }, { "Au196", 1.95966569813e+02 }, { "Au197", 1.96966568662e+02 }, { "Au198", 1.97968242303e+02 }, - { "Au199", 1.98968765193e+02 }, { "Au200", 1.99970725647e+02 }, { "Au201", 2.0097165724e+02 }, { "Au202", 2.01973805838e+02 }, - { "Au203", 2.02975154542e+02 }, { "Au204", 2.03977724e+02 }, { "Au205", 2.0497987e+02 }, { "Hg_natural", 2.0059e+02 }, - { "Hg171", 1.7100376e+02 }, { "Hg172", 1.71998832686e+02 }, { "Hg173", 1.72997242e+02 }, { "Hg174", 1.73992863695e+02 }, - { "Hg175", 1.7499142327e+02 }, { "Hg176", 1.7598735458e+02 }, { "Hg177", 1.76986279158e+02 }, { "Hg178", 1.77982483143e+02 }, - { "Hg179", 1.78981833861e+02 }, { "Hg180", 1.79978266394e+02 }, { "Hg181", 1.80977819311e+02 }, { "Hg182", 1.81974689964e+02 }, - { "Hg183", 1.82974449841e+02 }, { "Hg184", 1.83971713051e+02 }, { "Hg185", 1.84971899086e+02 }, { "Hg186", 1.8596936179e+02 }, - { "Hg187", 1.86969814236e+02 }, { "Hg188", 1.87967577049e+02 }, { "Hg189", 1.88968190034e+02 }, { "Hg190", 1.89966322449e+02 }, - { "Hg191", 1.90967157105e+02 }, { "Hg192", 1.91965634327e+02 }, { "Hg193", 1.92966665421e+02 }, { "Hg194", 1.93965439409e+02 }, - { "Hg195", 1.94966720113e+02 }, { "Hg196", 1.95965832649e+02 }, { "Hg197", 1.96967212908e+02 }, { "Hg198", 1.97966769032e+02 }, - { "Hg199", 1.98968279932e+02 }, { "Hg200", 1.99968326004e+02 }, { "Hg201", 2.00970302268e+02 }, { "Hg202", 2.01970643011e+02 }, - { "Hg203", 2.02972872484e+02 }, { "Hg204", 2.03973493933e+02 }, { "Hg205", 2.04976073386e+02 }, { "Hg206", 2.05977514066e+02 }, - { "Hg207", 2.06982588545e+02 }, { "Hg208", 2.0798594e+02 }, { "Hg209", 2.0899104e+02 }, { "Hg210", 2.0999451e+02 }, - { "Tl_natural", 2.0437e+02 }, { "Tl176", 1.7600059e+02 }, { "Tl177", 1.76996427286e+02 }, { "Tl178", 1.77994897e+02 }, - { "Tl179", 1.78991089082e+02 }, { "Tl180", 1.79989906e+02 }, { "Tl181", 1.80986257447e+02 }, { "Tl182", 1.81985667104e+02 }, - { "Tl183", 1.82982192802e+02 }, { "Tl184", 1.83981873122e+02 }, { "Tl185", 1.84978791305e+02 }, { "Tl186", 1.85978325e+02 }, - { "Tl187", 1.86975905897e+02 }, { "Tl188", 1.87976009782e+02 }, { "Tl189", 1.88973588428e+02 }, { "Tl190", 1.89973877149e+02 }, - { "Tl191", 1.90971786154e+02 }, { "Tl192", 1.91972225e+02 }, { "Tl193", 1.92970672e+02 }, { "Tl194", 1.939712e+02 }, - { "Tl195", 1.94969774335e+02 }, { "Tl196", 1.95970481151e+02 }, { "Tl197", 1.96969574511e+02 }, { "Tl198", 1.97970483495e+02 }, - { "Tl199", 1.98969877e+02 }, { "Tl200", 1.99970962672e+02 }, { "Tl201", 2.00970818891e+02 }, { "Tl202", 2.01972105808e+02 }, - { "Tl203", 2.0297234422e+02 }, { "Tl204", 2.03973863522e+02 }, { "Tl205", 2.04974427541e+02 }, { "Tl206", 2.0597611032e+02 }, - { "Tl207", 2.06977419429e+02 }, { "Tl208", 2.079820187e+02 }, { "Tl209", 2.08985358952e+02 }, { "Tl210", 2.09990073689e+02 }, - { "Tl211", 2.10993477e+02 }, { "Tl212", 2.11998228e+02 }, { "Pb_natural", 2.072e+02 }, { "Pb178", 1.78003830191e+02 }, - { "Pb179", 1.7900215e+02 }, { "Pb180", 1.79997918173e+02 }, { "Pb181", 1.80996623958e+02 }, { "Pb182", 1.81992671842e+02 }, - { "Pb183", 1.82991874629e+02 }, { "Pb184", 1.83988142339e+02 }, { "Pb185", 1.84987609944e+02 }, { "Pb186", 1.85984238945e+02 }, - { "Pb187", 1.8698391837e+02 }, { "Pb188", 1.87980874338e+02 }, { "Pb189", 1.88980807e+02 }, { "Pb190", 1.89978081517e+02 }, - { "Pb191", 1.90978265e+02 }, { "Pb192", 1.91975785171e+02 }, { "Pb193", 1.92976173234e+02 }, { "Pb194", 1.9397401207e+02 }, - { "Pb195", 1.9497454205e+02 }, { "Pb196", 1.95972774109e+02 }, { "Pb197", 1.96973431124e+02 }, { "Pb198", 1.97972033959e+02 }, - { "Pb199", 1.9897291665e+02 }, { "Pb200", 1.99971826675e+02 }, { "Pb201", 2.00972884511e+02 }, { "Pb202", 2.01972159133e+02 }, - { "Pb203", 2.02973390521e+02 }, { "Pb204", 2.03973043589e+02 }, { "Pb205", 2.04974481755e+02 }, { "Pb206", 2.05974465278e+02 }, - { "Pb207", 2.06975896887e+02 }, { "Pb208", 2.07976652071e+02 }, { "Pb209", 2.0898109012e+02 }, { "Pb210", 2.09984188527e+02 }, - { "Pb211", 2.10988736964e+02 }, { "Pb212", 2.11991897543e+02 }, { "Pb213", 2.12996581499e+02 }, { "Pb214", 2.13999805408e+02 }, - { "Pb215", 2.15004807e+02 }, { "Bi_natural", 2.089804e+02 }, { "Bi184", 1.84001124e+02 }, { "Bi185", 1.84997625e+02 }, - { "Bi186", 1.85996597625e+02 }, { "Bi187", 1.86993157835e+02 }, { "Bi188", 1.87992265154e+02 }, { "Bi189", 1.88989199012e+02 }, - { "Bi190", 1.89988295129e+02 }, { "Bi191", 1.90985786119e+02 }, { "Bi192", 1.91985457954e+02 }, { "Bi193", 1.92982959771e+02 }, - { "Bi194", 1.9398283396e+02 }, { "Bi195", 1.94980650737e+02 }, { "Bi196", 1.95980666509e+02 }, { "Bi197", 1.96978864454e+02 }, - { "Bi198", 1.97979206e+02 }, { "Bi199", 1.98977671961e+02 }, { "Bi200", 1.99978131829e+02 }, { "Bi201", 2.00977009036e+02 }, - { "Bi202", 2.01977742324e+02 }, { "Bi203", 2.02976876001e+02 }, { "Bi204", 2.03977812736e+02 }, { "Bi205", 2.04977389366e+02 }, - { "Bi206", 2.0597849913e+02 }, { "Bi207", 2.06978470679e+02 }, { "Bi208", 2.07979742196e+02 }, { "Bi209", 2.08980398734e+02 }, - { "Bi210", 2.09984120371e+02 }, { "Bi211", 2.1098726946e+02 }, { "Bi212", 2.11991285724e+02 }, { "Bi213", 2.12994384666e+02 }, - { "Bi214", 2.13998711539e+02 }, { "Bi215", 2.15001769776e+02 }, { "Bi216", 2.16006305943e+02 }, { "Bi217", 2.1700947e+02 }, - { "Bi218", 2.18014316e+02 }, { "Po_natural", 2.09e+02 }, { "Po188", 1.87999422048e+02 }, { "Po189", 1.88998480562e+02 }, - { "Po190", 1.89995101185e+02 }, { "Po191", 1.90994574485e+02 }, { "Po192", 1.91991335149e+02 }, { "Po193", 1.92991025275e+02 }, - { "Po194", 1.93988185606e+02 }, { "Po195", 1.94988110728e+02 }, { "Po196", 1.9598553458e+02 }, { "Po197", 1.9698565963e+02 }, - { "Po198", 1.97983388616e+02 }, { "Po199", 1.98983666063e+02 }, { "Po200", 1.99981798604e+02 }, { "Po201", 2.00982259764e+02 }, - { "Po202", 2.01980757541e+02 }, { "Po203", 2.02981420103e+02 }, { "Po204", 2.03980318121e+02 }, { "Po205", 2.04981203322e+02 }, - { "Po206", 2.05980481099e+02 }, { "Po207", 2.06981593173e+02 }, { "Po208", 2.07981245702e+02 }, { "Po209", 2.08982430435e+02 }, - { "Po210", 2.09982873673e+02 }, { "Po211", 2.10986653154e+02 }, { "Po212", 2.11988867969e+02 }, { "Po213", 2.1299285728e+02 }, - { "Po214", 2.1399520135e+02 }, { "Po215", 2.14999419988e+02 }, { "Po216", 2.16001915035e+02 }, { "Po217", 2.17006334796e+02 }, - { "Po218", 2.18008973037e+02 }, { "Po219", 2.19013744e+02 }, { "Po220", 2.20016602e+02 }, { "At_natural", 2.1e+02 }, - { "At193", 1.92999843112e+02 }, { "At194", 1.93998725085e+02 }, { "At195", 1.94996268098e+02 }, { "At196", 1.95995788077e+02 }, - { "At197", 1.96993189215e+02 }, { "At198", 1.97992837202e+02 }, { "At199", 1.98990532254e+02 }, { "At200", 1.99990351264e+02 }, - { "At201", 2.00988416999e+02 }, { "At202", 2.01988630236e+02 }, { "At203", 2.02986941984e+02 }, { "At204", 2.03987251326e+02 }, - { "At205", 2.04986074483e+02 }, { "At206", 2.05986667036e+02 }, { "At207", 2.06985783502e+02 }, { "At208", 2.07986589977e+02 }, - { "At209", 2.08986173143e+02 }, { "At210", 2.0998714771e+02 }, { "At211", 2.10987496271e+02 }, { "At212", 2.11990744771e+02 }, - { "At213", 2.12992936646e+02 }, { "At214", 2.13996371733e+02 }, { "At215", 2.1499865257e+02 }, { "At216", 2.16002423257e+02 }, - { "At217", 2.17004718822e+02 }, { "At218", 2.18008694336e+02 }, { "At219", 2.19011161691e+02 }, { "At220", 2.20015407682e+02 }, - { "At221", 2.2101805e+02 }, { "At222", 2.2202233e+02 }, { "At223", 2.2302519e+02 }, { "Rn_natural", 2.22e+02 }, - { "Rn195", 1.95005437696e+02 }, { "Rn196", 1.96002115223e+02 }, { "Rn197", 1.97001584351e+02 }, { "Rn198", 1.97998678663e+02 }, - { "Rn199", 1.98998370297e+02 }, { "Rn200", 1.999956993e+02 }, { "Rn201", 2.00995628335e+02 }, { "Rn202", 2.01993263492e+02 }, - { "Rn203", 2.02993386687e+02 }, { "Rn204", 2.0399142874e+02 }, { "Rn205", 2.04991718799e+02 }, { "Rn206", 2.05990214104e+02 }, - { "Rn207", 2.06990734225e+02 }, { "Rn208", 2.0798964247e+02 }, { "Rn209", 2.08990414742e+02 }, { "Rn210", 2.09989696216e+02 }, - { "Rn211", 2.10990600523e+02 }, { "Rn212", 2.11990703529e+02 }, { "Rn213", 2.12993882668e+02 }, { "Rn214", 2.13995362554e+02 }, - { "Rn215", 2.14998745483e+02 }, { "Rn216", 2.1600027437e+02 }, { "Rn217", 2.17003927675e+02 }, { "Rn218", 2.18005601256e+02 }, - { "Rn219", 2.19009480204e+02 }, { "Rn220", 2.20011393981e+02 }, { "Rn221", 2.21015536782e+02 }, { "Rn222", 2.22017577738e+02 }, - { "Rn223", 2.2302179e+02 }, { "Rn224", 2.2402409e+02 }, { "Rn225", 2.2502844e+02 }, { "Rn226", 2.2603089e+02 }, - { "Rn227", 2.27035407e+02 }, { "Rn228", 2.28037986e+02 }, { "Fr_natural", 2.23e+02 }, { "Fr199", 1.99007258147e+02 }, - { "Fr200", 2.0000657249e+02 }, { "Fr201", 2.01003860867e+02 }, { "Fr202", 2.02003372847e+02 }, { "Fr203", 2.03000924647e+02 }, - { "Fr204", 2.04000653204e+02 }, { "Fr205", 2.0499859396e+02 }, { "Fr206", 2.05998666066e+02 }, { "Fr207", 2.06996949414e+02 }, - { "Fr208", 2.07997138783e+02 }, { "Fr209", 2.08995953555e+02 }, { "Fr210", 2.09996407738e+02 }, { "Fr211", 2.10995536544e+02 }, - { "Fr212", 2.11996202244e+02 }, { "Fr213", 2.12996189081e+02 }, { "Fr214", 2.13998971145e+02 }, { "Fr215", 2.15000341497e+02 }, - { "Fr216", 2.1600319799e+02 }, { "Fr217", 2.17004631951e+02 }, { "Fr218", 2.18007578322e+02 }, { "Fr219", 2.19009252149e+02 }, - { "Fr220", 2.20012327405e+02 }, { "Fr221", 2.21014254762e+02 }, { "Fr222", 2.2201755173e+02 }, { "Fr223", 2.23019735857e+02 }, - { "Fr224", 2.24023249951e+02 }, { "Fr225", 2.25025565414e+02 }, { "Fr226", 2.26029386231e+02 }, { "Fr227", 2.27031835938e+02 }, - { "Fr228", 2.28035729e+02 }, { "Fr229", 2.29038450228e+02 }, { "Fr230", 2.3004251e+02 }, { "Fr231", 2.3104544e+02 }, - { "Fr232", 2.32049772e+02 }, { "Ra_natural", 2.26e+02 }, { "Ra202", 2.02009890686e+02 }, { "Ra203", 2.03009271619e+02 }, - { "Ra204", 2.04006499668e+02 }, { "Ra205", 2.0500626857e+02 }, { "Ra206", 2.0600382727e+02 }, { "Ra207", 2.07003798105e+02 }, - { "Ra208", 2.0800183994e+02 }, { "Ra209", 2.09001991373e+02 }, { "Ra210", 2.10000494978e+02 }, { "Ra211", 2.11000897987e+02 }, - { "Ra212", 2.11999794499e+02 }, { "Ra213", 2.13000383959e+02 }, { "Ra214", 2.14000107894e+02 }, { "Ra215", 2.15002719834e+02 }, - { "Ra216", 2.16003533035e+02 }, { "Ra217", 2.17006320327e+02 }, { "Ra218", 2.1800714023e+02 }, { "Ra219", 2.19010085078e+02 }, - { "Ra220", 2.20011028384e+02 }, { "Ra221", 2.21013917338e+02 }, { "Ra222", 2.2201537453e+02 }, { "Ra223", 2.23018502171e+02 }, - { "Ra224", 2.24020211821e+02 }, { "Ra225", 2.25023611564e+02 }, { "Ra226", 2.26025409823e+02 }, { "Ra227", 2.27029177842e+02 }, - { "Ra228", 2.28031070292e+02 }, { "Ra229", 2.29034957577e+02 }, { "Ra230", 2.30037056394e+02 }, { "Ra231", 2.3104122e+02 }, - { "Ra232", 2.32043638e+02 }, { "Ra233", 2.3304806e+02 }, { "Ra234", 2.34050704e+02 }, { "Ac_natural", 2.27e+02 }, - { "Ac206", 2.0601450498e+02 }, { "Ac207", 2.07011949748e+02 }, { "Ac208", 2.08011551551e+02 }, { "Ac209", 2.09009494863e+02 }, - { "Ac210", 2.10009435986e+02 }, { "Ac211", 2.11007734835e+02 }, { "Ac212", 2.12007813822e+02 }, { "Ac213", 2.13006607643e+02 }, - { "Ac214", 2.14006901798e+02 }, { "Ac215", 2.15006453625e+02 }, { "Ac216", 2.16008720075e+02 }, { "Ac217", 2.17009346914e+02 }, - { "Ac218", 2.18011641453e+02 }, { "Ac219", 2.19012420389e+02 }, { "Ac220", 2.20014762979e+02 }, { "Ac221", 2.21015591248e+02 }, - { "Ac222", 2.22017843851e+02 }, { "Ac223", 2.23019137468e+02 }, { "Ac224", 2.24021722866e+02 }, { "Ac225", 2.25023229585e+02 }, - { "Ac226", 2.26026098089e+02 }, { "Ac227", 2.27027752127e+02 }, { "Ac228", 2.28031021112e+02 }, { "Ac229", 2.29033015243e+02 }, - { "Ac230", 2.30036294178e+02 }, { "Ac231", 2.31038558786e+02 }, { "Ac232", 2.32042027438e+02 }, { "Ac233", 2.3304455e+02 }, - { "Ac234", 2.3404842e+02 }, { "Ac235", 2.35051232e+02 }, { "Ac236", 2.36055296e+02 }, { "Th_natural", 2.320381e+02 }, - { "Th209", 2.09017715682e+02 }, { "Th210", 2.10015075342e+02 }, { "Th211", 2.11014928413e+02 }, { "Th212", 2.12012980288e+02 }, - { "Th213", 2.1301301014e+02 }, { "Th214", 2.1401149977e+02 }, { "Th215", 2.1501173033e+02 }, { "Th216", 2.16011062115e+02 }, - { "Th217", 2.17013114328e+02 }, { "Th218", 2.18013284499e+02 }, { "Th219", 2.19015536895e+02 }, { "Th220", 2.20015747762e+02 }, - { "Th221", 2.21018183674e+02 }, { "Th222", 2.22018468121e+02 }, { "Th223", 2.23020811448e+02 }, { "Th224", 2.24021466895e+02 }, - { "Th225", 2.25023951021e+02 }, { "Th226", 2.26024903069e+02 }, { "Th227", 2.2702770407e+02 }, { "Th228", 2.28028741127e+02 }, - { "Th229", 2.2903176243e+02 }, { "Th230", 2.30033133843e+02 }, { "Th231", 2.31036304343e+02 }, { "Th232", 2.32038055325e+02 }, - { "Th233", 2.33041581843e+02 }, { "Th234", 2.3404360123e+02 }, { "Th235", 2.35047510074e+02 }, { "Th236", 2.3604987e+02 }, - { "Th237", 2.37053894e+02 }, { "Th238", 2.38056496e+02 }, { "Pa_natural", 2.31e+02 }, { "Pa212", 2.12023204138e+02 }, - { "Pa213", 2.1302110934e+02 }, { "Pa214", 2.14020918417e+02 }, { "Pa215", 2.15019185865e+02 }, { "Pa216", 2.16019109564e+02 }, - { "Pa217", 2.17018323986e+02 }, { "Pa218", 2.18020041889e+02 }, { "Pa219", 2.19019883143e+02 }, { "Pa220", 2.20021875303e+02 }, - { "Pa221", 2.21021877983e+02 }, { "Pa222", 2.22023742e+02 }, { "Pa223", 2.23023962273e+02 }, { "Pa224", 2.24025625738e+02 }, - { "Pa225", 2.25026130678e+02 }, { "Pa226", 2.26027947753e+02 }, { "Pa227", 2.27028805072e+02 }, { "Pa228", 2.28031051376e+02 }, - { "Pa229", 2.29032096793e+02 }, { "Pa230", 2.30034540754e+02 }, { "Pa231", 2.3103588399e+02 }, { "Pa232", 2.32038591592e+02 }, - { "Pa233", 2.33040247277e+02 }, { "Pa234", 2.34043308058e+02 }, { "Pa235", 2.35045443615e+02 }, { "Pa236", 2.36048681284e+02 }, - { "Pa237", 2.37051145659e+02 }, { "Pa238", 2.3805450271e+02 }, { "Pa239", 2.3905726e+02 }, { "Pa240", 2.4006098e+02 }, - { "U_natural", 2.38029e+02 }, { "U217", 2.17024368791e+02 }, { "U218", 2.18023535671e+02 }, { "U219", 2.1902491916e+02 }, - { "U220", 2.20024723e+02 }, { "U221", 2.21026399e+02 }, { "U222", 2.22026086e+02 }, { "U223", 2.230277386e+02 }, - { "U224", 2.24027604778e+02 }, { "U225", 2.25029390717e+02 }, { "U226", 2.26029338702e+02 }, { "U227", 2.27031156367e+02 }, - { "U228", 2.28031374006e+02 }, { "U229", 2.29033505939e+02 }, { "U230", 2.30033939784e+02 }, { "U231", 2.31036293704e+02 }, - { "U232", 2.32037156152e+02 }, { "U233", 2.33039635207e+02 }, { "U234", 2.34040952088e+02 }, { "U235", 2.35043929918e+02 }, - { "U236", 2.36045568006e+02 }, { "U237", 2.37048730184e+02 }, { "U238", 2.38050788247e+02 }, { "U239", 2.39054293299e+02 }, - { "U240", 2.40056591988e+02 }, { "U241", 2.4106033e+02 }, { "U242", 2.42062931e+02 }, { "Np_natural", 2.37e+02 }, - { "Np225", 2.25033913933e+02 }, { "Np226", 2.26035145e+02 }, { "Np227", 2.27034956789e+02 }, { "Np228", 2.2803618e+02 }, - { "Np229", 2.29036263808e+02 }, { "Np230", 2.30037827597e+02 }, { "Np231", 2.31038245085e+02 }, { "Np232", 2.32040108e+02 }, - { "Np233", 2.33040740546e+02 }, { "Np234", 2.34042895038e+02 }, { "Np235", 2.35044063267e+02 }, { "Np236", 2.360465696e+02 }, - { "Np237", 2.37048173444e+02 }, { "Np238", 2.38050946405e+02 }, { "Np239", 2.39052939025e+02 }, { "Np240", 2.40056162182e+02 }, - { "Np241", 2.41058252431e+02 }, { "Np242", 2.4206164118e+02 }, { "Np243", 2.43064279e+02 }, { "Np244", 2.4406785e+02 }, - { "Pu_natural", 2.44e+02 }, { "Pu228", 2.28038742328e+02 }, { "Pu229", 2.29040150212e+02 }, { "Pu230", 2.30039649886e+02 }, - { "Pu231", 2.31041101107e+02 }, { "Pu232", 2.32041187097e+02 }, { "Pu233", 2.33042997375e+02 }, { "Pu234", 2.34043317076e+02 }, - { "Pu235", 2.3504528605e+02 }, { "Pu236", 2.36046057964e+02 }, { "Pu237", 2.37048409658e+02 }, { "Pu238", 2.38049559894e+02 }, - { "Pu239", 2.39052163381e+02 }, { "Pu240", 2.40053813545e+02 }, { "Pu241", 2.41056851456e+02 }, { "Pu242", 2.42058742611e+02 }, - { "Pu243", 2.43062003092e+02 }, { "Pu244", 2.44064203907e+02 }, { "Pu245", 2.45067747154e+02 }, { "Pu246", 2.46070204627e+02 }, - { "Pu247", 2.4707407e+02 }, { "Am_natural", 2.43e+02 }, { "Am231", 2.3104556e+02 }, { "Am232", 2.3204659e+02 }, - { "Am233", 2.33046348e+02 }, { "Am234", 2.34047809e+02 }, { "Am235", 2.35047946e+02 }, { "Am236", 2.36049579e+02 }, - { "Am237", 2.37049996e+02 }, { "Am238", 2.38051984324e+02 }, { "Am239", 2.39053024479e+02 }, { "Am240", 2.40055300179e+02 }, - { "Am241", 2.41056829144e+02 }, { "Am242", Am242_Mass }, { "Am243", 2.4306138108e+02 }, { "Am244", Am244_Mass }, - { "Am245", 2.45066452114e+02 }, { "Am246", 2.46069774619e+02 }, { "Am247", 2.47072093e+02 }, { "Am248", 2.48075752e+02 }, - { "Am249", 2.4907848e+02 }, { "Cm_natural", 2.47e+02 }, { "Cm233", 2.33050771232e+02 }, { "Cm234", 2.34050159841e+02 }, - { "Cm235", 2.35051434e+02 }, { "Cm236", 2.36051413e+02 }, { "Cm237", 2.37052901e+02 }, { "Cm238", 2.38053028697e+02 }, - { "Cm239", 2.39054957e+02 }, { "Cm240", 2.40055529539e+02 }, { "Cm241", 2.41057653001e+02 }, { "Cm242", 2.42058835824e+02 }, - { "Cm243", 2.43061389114e+02 }, { "Cm244", 2.44062752578e+02 }, { "Cm245", 2.45065491249e+02 }, { "Cm246", 2.46067223662e+02 }, - { "Cm247", 2.4707035354e+02 }, { "Cm248", 2.48072348508e+02 }, { "Cm249", 2.49075953413e+02 }, { "Cm250", 2.50078356959e+02 }, - { "Cm251", 2.51082284605e+02 }, { "Cm252", 2.5208487e+02 }, { "Bk_natural", 2.47e+02 }, { "Bk235", 2.3505658e+02 }, - { "Bk236", 2.3605733e+02 }, { "Bk237", 2.37057003e+02 }, { "Bk238", 2.38058281e+02 }, { "Bk239", 2.39058279e+02 }, - { "Bk240", 2.40059759e+02 }, { "Bk241", 2.4106023e+02 }, { "Bk242", 2.42061981e+02 }, { "Bk243", 2.43063007572e+02 }, - { "Bk244", 2.44065180774e+02 }, { "Bk245", 2.45066361616e+02 }, { "Bk246", 2.46068672947e+02 }, { "Bk247", 2.4707030708e+02 }, - { "Bk248", 2.48073086e+02 }, { "Bk249", 2.49074986657e+02 }, { "Bk250", 2.5007831652e+02 }, { "Bk251", 2.51080760172e+02 }, - { "Bk252", 2.5208431e+02 }, { "Bk253", 2.5308688e+02 }, { "Bk254", 2.540906e+02 }, { "Cf_natural", 2.51e+02 }, - { "Cf237", 2.3706207e+02 }, { "Cf238", 2.3806141e+02 }, { "Cf239", 2.39062422e+02 }, { "Cf240", 2.40062302e+02 }, - { "Cf241", 2.41063726e+02 }, { "Cf242", 2.42063701552e+02 }, { "Cf243", 2.43065427e+02 }, { "Cf244", 2.44066000689e+02 }, - { "Cf245", 2.45068048612e+02 }, { "Cf246", 2.46068805309e+02 }, { "Cf247", 2.47071000589e+02 }, { "Cf248", 2.48072184861e+02 }, - { "Cf249", 2.49074853537e+02 }, { "Cf250", 2.50076406066e+02 }, { "Cf251", 2.51079586788e+02 }, { "Cf252", 2.52081625846e+02 }, - { "Cf253", 2.53085133145e+02 }, { "Cf254", 2.54087322909e+02 }, { "Cf255", 2.55091046e+02 }, { "Cf256", 2.5609344e+02 }, - { "Es_natural", 2.52e+02 }, { "Es120", 1.175e+02 }, { "Es121", 1.16546e+02 }, { "Es122", 1.18544e+02 }, - { "Es125", 1.175e+02 }, { "Es240", 2.4006892e+02 }, { "Es241", 2.41068538e+02 }, { "Es242", 2.42069745e+02 }, - { "Es243", 2.43069548e+02 }, { "Es244", 2.44070883e+02 }, { "Es245", 2.45071324e+02 }, { "Es246", 2.46072896e+02 }, - { "Es247", 2.47073656e+02 }, { "Es248", 2.48075471e+02 }, { "Es249", 2.49076411e+02 }, { "Es250", 2.50078612e+02 }, - { "Es251", 2.51079992142e+02 }, { "Es252", 2.52082978512e+02 }, { "Es253", 2.53084824697e+02 }, { "Es254", Es254_Mass }, - { "Es255", 2.55090273122e+02 }, { "Es256", 2.56093598e+02 }, { "Es257", 2.57095979e+02 }, { "Es258", 2.5809952e+02 }, - { "Fm_natural", 2.57e+02 }, { "Fm242", 2.4207343e+02 }, { "Fm243", 2.43074353e+02 }, { "Fm244", 2.44074084e+02 }, - { "Fm245", 2.45075385e+02 }, { "Fm246", 2.46075299023e+02 }, { "Fm247", 2.47076847e+02 }, { "Fm248", 2.48077194714e+02 }, - { "Fm249", 2.49079034e+02 }, { "Fm250", 2.50079521264e+02 }, { "Fm251", 2.51081575017e+02 }, { "Fm252", 2.52082466855e+02 }, - { "Fm253", 2.53085185236e+02 }, { "Fm254", 2.5408685422e+02 }, { "Fm255", 2.55089962202e+02 }, { "Fm256", 2.56091773117e+02 }, - { "Fm257", 2.57095104724e+02 }, { "Fm258", 2.58097076e+02 }, { "Fm259", 2.59100595e+02 }, { "Fm260", 2.60102678e+02 }, - { "Md_natural", 2.58e+02 }, { "Md245", 2.45080829e+02 }, { "Md246", 2.46081886e+02 }, { "Md247", 2.47081635e+02 }, - { "Md248", 2.48082823e+02 }, { "Md249", 2.49083013e+02 }, { "Md250", 2.5008442e+02 }, { "Md251", 2.51084839e+02 }, - { "Md252", 2.5208656e+02 }, { "Md253", 2.5308728e+02 }, { "Md254", 2.54089656e+02 }, { "Md255", 2.55091082705e+02 }, - { "Md256", 2.56094059025e+02 }, { "Md257", 2.57095541368e+02 }, { "Md258", 2.58098431319e+02 }, { "Md259", 2.59100509e+02 }, - { "Md260", 2.60103652e+02 }, { "Md261", 2.61105721e+02 }, { "Md262", 2.62108865e+02 }, { "No_natural", 2.59e+02 }, - { "No248", 2.48086596e+02 }, { "No249", 2.49087833e+02 }, { "No250", 2.5008751e+02 }, { "No251", 2.51089012e+02 }, - { "No252", 2.52088976521e+02 }, { "No253", 2.53090678e+02 }, { "No254", 2.54090955253e+02 }, { "No255", 2.55093241131e+02 }, - { "No256", 2.56094282666e+02 }, { "No257", 2.5709687719e+02 }, { "No258", 2.58098207e+02 }, { "No259", 2.59101031e+02 }, - { "No260", 2.60102643e+02 }, { "No261", 2.61105749e+02 }, { "No262", 2.62107301e+02 }, { "No263", 2.63110552e+02 }, - { "No264", 2.64112345e+02 }, { "Lr_natural", 2.6e+02 }, { "Lr251", 2.5109436e+02 }, { "Lr252", 2.52095371e+02 }, - { "Lr253", 2.5309521e+02 }, { "Lr254", 2.54096454e+02 }, { "Lr255", 2.55096681e+02 }, { "Lr256", 2.56098629e+02 }, - { "Lr257", 2.57099555e+02 }, { "Lr258", 2.58101814e+02 }, { "Lr259", 2.59102901e+02 }, { "Lr260", 2.60105504e+02 }, - { "Lr261", 2.61106883e+02 }, { "Lr262", 2.62109634e+02 }, { "Lr263", 2.63111293e+02 }, { "Lr264", 2.64114038e+02 }, - { "Lr265", 2.65115839e+02 }, { "Lr266", 2.66119305e+02 }, { "Rf_natural", 2.61e+02 }, { "Rf253", 2.53100689e+02 }, - { "Rf254", 2.54100184e+02 }, { "Rf255", 2.5510134e+02 }, { "Rf256", 2.56101166194e+02 }, { "Rf257", 2.5710299e+02 }, - { "Rf258", 2.58103489e+02 }, { "Rf259", 2.59105637e+02 }, { "Rf260", 2.6010644e+02 }, { "Rf261", 2.61108766556e+02 }, - { "Rf262", 2.62109925e+02 }, { "Rf263", 2.63112547e+02 }, { "Rf264", 2.64113985e+02 }, { "Rf265", 2.65116704e+02 }, - { "Rf266", 2.66117956e+02 }, { "Rf267", 2.67121529e+02 }, { "Rf268", 2.68123644e+02 }, { "Db_natural", 2.62e+02 }, - { "Db255", 2.55107398e+02 }, { "Db256", 2.56108127e+02 }, { "Db257", 2.57107722e+02 }, { "Db258", 2.58109231e+02 }, - { "Db259", 2.5910961e+02 }, { "Db260", 2.601113e+02 }, { "Db261", 2.61112056e+02 }, { "Db262", 2.62114084e+02 }, - { "Db263", 2.63114988e+02 }, { "Db264", 2.64117404e+02 }, { "Db265", 2.65118601e+02 }, { "Db266", 2.66121029e+02 }, - { "Db267", 2.67122377e+02 }, { "Db268", 2.68125445e+02 }, { "Db269", 2.6912746e+02 }, { "Db270", 2.70130712e+02 }, - { "Sg_natural", 2.63e+02 }, { "Sg258", 2.58113168e+02 }, { "Sg259", 2.591145e+02 }, { "Sg260", 2.60114422071e+02 }, - { "Sg261", 2.61116117e+02 }, { "Sg262", 2.62116398e+02 }, { "Sg263", 2.63118322e+02 }, { "Sg264", 2.64118931e+02 }, - { "Sg265", 2.65121114693e+02 }, { "Sg266", 2.66122065e+02 }, { "Sg267", 2.67124425e+02 }, { "Sg268", 2.68125606e+02 }, - { "Sg269", 2.69128755e+02 }, { "Sg270", 2.70130329e+02 }, { "Sg271", 2.71133472e+02 }, { "Sg272", 2.72135158e+02 }, - { "Sg273", 2.7313822e+02 }, { "Bh260", 2.6012197e+02 }, { "Bh261", 2.61121664e+02 }, { "Bh262", 2.62122892e+02 }, - { "Bh263", 2.63123035e+02 }, { "Bh264", 2.64124604e+02 }, { "Bh265", 2.65125147e+02 }, { "Bh266", 2.66126942e+02 }, - { "Bh267", 2.6712765e+02 }, { "Bh268", 2.68129755e+02 }, { "Bh269", 2.69130694e+02 }, { "Bh270", 2.70133616e+02 }, - { "Bh271", 2.71135179e+02 }, { "Bh272", 2.72138032e+02 }, { "Bh273", 2.73139618e+02 }, { "Bh274", 2.7414244e+02 }, - { "Bh275", 2.7514425e+02 }, { "Hs263", 2.63128558e+02 }, { "Hs264", 2.64128394885e+02 }, { "Hs265", 2.65130085e+02 }, - { "Hs266", 2.66130097e+02 }, { "Hs267", 2.67131789e+02 }, { "Hs268", 2.68132162e+02 }, { "Hs269", 2.69134056e+02 }, - { "Hs270", 2.7013465e+02 }, { "Hs271", 2.71137657e+02 }, { "Hs272", 2.72139052e+02 }, { "Hs273", 2.73141986e+02 }, - { "Hs274", 2.74143131e+02 }, { "Hs275", 2.75145952e+02 }, { "Hs276", 2.76147208e+02 }, { "Hs277", 2.77149841e+02 }, - { "Mt265", 2.65136151e+02 }, { "Mt266", 2.66137299e+02 }, { "Mt267", 2.67137307e+02 }, { "Mt268", 2.68138728e+02 }, - { "Mt269", 2.69139055e+02 }, { "Mt270", 2.70140657e+02 }, { "Mt271", 2.71141139e+02 }, { "Mt272", 2.72143738e+02 }, - { "Mt273", 2.73144913e+02 }, { "Mt274", 2.74147492e+02 }, { "Mt275", 2.75148647e+02 }, { "Mt276", 2.76151156e+02 }, - { "Mt277", 2.7715242e+02 }, { "Mt278", 2.78154812e+02 }, { "Mt279", 2.79156193e+02 }, { "Uun267", 2.67144341e+02 }, - { "Uun268", 2.68143795e+02 }, { "Uun269", 2.69145124e+02 }, { "Uun270", 2.7014472e+02 }, { "Uun271", 2.71146062e+02 }, - { "Uun272", 2.72146317e+02 }, { "Uun273", 2.73148863e+02 }, { "Uun274", 2.74149492e+02 }, { "Uun275", 2.75152176e+02 }, - { "Uun276", 2.76153034e+02 }, { "Uun277", 2.77155647e+02 }, { "Uun278", 2.78156469e+02 }, { "Uun279", 2.79158861e+02 }, - { "Uun280", 2.80159795e+02 }, { "Uun281", 2.81162061e+02 }, { "Uuu272", 2.72153615e+02 }, { "Uuu273", 2.73153682e+02 }, - { "Uuu274", 2.74155713e+02 }, { "Uuu275", 2.75156142e+02 }, { "Uuu276", 2.76158493e+02 }, { "Uuu277", 2.77159519e+02 }, - { "Uuu278", 2.78161604e+02 }, { "Uuu279", 2.79162468e+02 }, { "Uuu280", 2.80164473e+02 }, { "Uuu281", 2.81165372e+02 }, - { "Uuu282", 2.82167486e+02 }, { "Uuu283", 2.83168415e+02 }, { "Uub277", 2.77163943e+02 }, { "Uub278", 2.78164312e+02 }, - { "Uub279", 2.79166546e+02 }, { "Uub280", 2.80167039e+02 }, { "Uub281", 2.81169286e+02 }, { "Uub282", 2.82169765e+02 }, - { "Uub283", 2.83171792e+02 }, { "Uub284", 2.84172384e+02 }, { "Uub285", 2.85174105e+02 }, { "Uut283", 2.83176451e+02 }, - { "Uut284", 2.8417808e+02 }, { "Uut285", 2.85178732e+02 }, { "Uut286", 2.86180481e+02 }, { "Uut287", 2.87181045e+02 }, - { "Uuq285", 2.85183698e+02 }, { "Uuq286", 2.86183855e+02 }, { "Uuq287", 2.87185599e+02 }, { "Uuq288", 2.88185689e+02 }, - { "Uuq289", 2.89187279e+02 }, { "Uup287", 2.87191186e+02 }, { "Uup288", 2.88192492e+02 }, { "Uup289", 2.89192715e+02 }, - { "Uup290", 2.90194141e+02 }, { "Uup291", 2.91194384e+02 }, { "Uuh289", 2.89198862e+02 }, { "Uuh290", 2.9019859e+02 }, - { "Uuh291", 2.91200011e+02 }, { "Uuh292", 2.92199786e+02 }, { "Uus291", 2.91206564e+02 }, { "Uus292", 2.92207549e+02 }, - { "Uuo293", 2.9321467e+02 } }; -/* -======================================================================== -*/ -double PoPs_particleMass_AMU( statusMessageReporting *smr, const char *name ) { - - int i, n = sizeof( ZAMasses ) / sizeof( ZAMasses[0] ); - double mass = -1.; - - for( i = 0; i < n; i++ ) { - if( !strcmp( ZAMasses[i].symbol, name ) ) { - mass = ZAMasses[i].mass; - break; - } - } - if( mass == -1. ) smr_setReportError2( smr, smr_unknownID, 1, "particle %s not in mass table", name ); - return( mass ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/RISI_read.cc b/source/processes/hadronic/models/lend/src/RISI_read.cc new file mode 100644 index 0000000000..56043c3816 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/RISI_read.cc @@ -0,0 +1,452 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include + +#include + +namespace GIDI { + +namespace RISI { + +static void readRIS2( std::string const &a_basePath, std::string const &a_fileName, Projectiles &a_projectiles, std::string const &a_energyUnit ); + +/*! \class Reaction + * Class to store a reaction for a reaction information summary **RIS**. + */ + +/* *********************************************************************************************************//** + * @param a_effectiveThreshold [in] The effective threshold for the reaction. + * @param a_products [in] The list of final products for the reaction. + * @param a_multiplicities [in] The multiplicities for each product in *a_products*. + * @param a_intermediates [in] The list of intermediates products for the reaction. + * @param a_process [in] The process for the reaction. + ***********************************************************************************************************/ + +Reaction::Reaction( double a_effectiveThreshold, std::vector const &a_products, std::vector const &a_multiplicities, + std::vector const &a_intermediates, std::string const &a_process, std::string const &reactionLabel, + std::string const &convarianceFlag ) : + m_effectiveThreshold( a_effectiveThreshold ), + m_products( a_products ), + m_multiplicities( a_multiplicities ), + m_intermediates( a_intermediates ), + m_process( a_process ), + m_reactionLabel( reactionLabel ), + m_convarianceFlag( convarianceFlag ) { + +} + +/* *********************************************************************************************************//** + * + * + * @param a_projectile [in] The **Projectile** instance for the requested projectile. + * @param a_level [in] The current recursive level. + * @param a_maxLevel [in] The maximum recursive level requested by the user. + * @param a_energyMax [in] Only reactions with effective thresholds less than this value are processed. + * @param a_products [in] The list to add additional products to. + ***********************************************************************************************************/ + +void Reaction::products( double a_energyMax, std::set &a_products ) const { + + if( m_effectiveThreshold >= a_energyMax ) return; + + for( auto productIter = m_products.begin( ); productIter != m_products.end( ); ++productIter ) a_products.insert( *productIter ); +} + +/*! \class Protare + * Class to store a protare for a reaction information summary **RIS**. + */ + +/* *********************************************************************************************************//** + * @param a_projectile [in] The PoPs id for the projectile. + * @param a_target [in] The PoPs id for the target. + * @param a_evaluation [in] The evaluation string for the protare. + * @param a_protareEnergyUnit [in] The unit of energy in the **RIS** file. + * @param a_requestedEnergyUnit [in] The unit of energy specified by the user. + ***********************************************************************************************************/ + +Protare::Protare( std::string const &a_projectile, std::string const &a_target, std::string const &a_evaluation, + std::string const &a_protareEnergyUnit, std::string const &a_requestedEnergyUnit ) : + m_addMode( 0 ), + m_projectile( a_projectile ), + m_target( a_target ), + m_evaluation( a_evaluation ), + m_energyConversionFactor( 1.0 ) { + + if( a_protareEnergyUnit != a_requestedEnergyUnit ) { + if( a_protareEnergyUnit == "eV" ) { + if( a_requestedEnergyUnit != "MeV" ) throw "RISI::Protare: supported a_requestedEnergyUnit '" + a_requestedEnergyUnit + "'."; + m_energyConversionFactor = 1e-6; } + else if( a_protareEnergyUnit == "MeV" ) { + if( a_requestedEnergyUnit != "eV" ) throw "RISI::Protare: supported a_requestedEnergyUnit '" + a_requestedEnergyUnit + "'."; + m_energyConversionFactor = 1e6; } + else { + throw "RISI::Protare: supported a_protareEnergyUnit '" + a_requestedEnergyUnit + "'."; + } + } +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Protare::~Protare( ) { + + for( auto reactionIter = m_reactions.begin( ); reactionIter != m_reactions.end( ); ++reactionIter ) delete *reactionIter; + +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Protare::Oops( LUPI_maybeUnused std::vector const &a_elements ) { + + throw "No mode has been set for adding to the Protare: " + m_projectile + " + " + m_target + "."; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Protare::addAlias( std::vector const &a_elements ) { + + m_aliases[a_elements[1]] = a_elements[0]; +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Protare::addReaction( std::vector const &a_elements ) { + + std::vector productsString = LUPI::Misc::splitString( a_elements[0], '+', true ); + double effectiveThreshold = m_energyConversionFactor * std::stod( a_elements[1] ); + std::vector intermediates = LUPI::Misc::splitString( a_elements[2], ':', true ); + + std::string reactionLabel; + std::string covarianceFlag; + + if( a_elements.size( ) > 5 ) { + reactionLabel = a_elements[4]; + covarianceFlag = a_elements[5]; + } + + std::vector products; + std::vector multiplicities; + + for( auto iter = productsString.begin( ); iter != productsString.end( ); ++iter ) { + char *begin = const_cast( (*iter).c_str( ) ), *end = begin; + long multiplicity = 1; + + if( isdigit( begin[0] ) ) { + multiplicity = strtol( begin, &end, 10 ); + } + products.push_back( end ); + multiplicities.push_back( static_cast( multiplicity ) ); + } + + m_reactions.push_back( new Reaction( effectiveThreshold, products, multiplicities, intermediates, a_elements[3], reactionLabel, covarianceFlag ) ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void Protare::add( std::vector const &a_elements ) { + + if( m_addMode == 0 ) { + Oops( a_elements ); } + else if( m_addMode == 1 ) { + addAlias( a_elements ); } + else if( m_addMode == 2 ) { + addReaction( a_elements ); + } +} + +/* *********************************************************************************************************//** + * + * @param a_projectile [in] The **Projectile** instance for the requested projectile. + * @param a_level [in] The current recursive level. + * @param a_maxLevel [in] The maximum recursive level requested by the user. + * @param a_energyMax [in] Only reactions with effective thresholds less than this value are processed. + * @param a_products [in] The list to add additional products to. + ***********************************************************************************************************/ + +void Protare::products( Projectile const *a_projectile, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const { + + std::set productSet; + for( auto reactionIter = m_reactions.begin( ); reactionIter != m_reactions.end( ); ++reactionIter ) + (*reactionIter)->products( a_energyMax, productSet ); + + for( auto productIter = productSet.begin( ); productIter != productSet.end( ); ++productIter ) { + a_projectile->products( *productIter, a_level, a_maxLevel, a_energyMax, a_products ); + } +} + +/*! \class Target + * Stores a list of **Protare** instances for a specified target. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Target::~Target( ) { + + for( auto iter = m_protares.begin( ); iter != m_protares.end( ); ++iter ) delete *iter; + +} + +/* *********************************************************************************************************//** + * Adds *a_protare* to *this* list of **Protare** instances. + * + * @param a_protare [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Target::add( Protare *a_protare ) { + + m_protares.push_back( a_protare ); +} + +/* *********************************************************************************************************//** + * + * @param a_projectile [in] The **Projectile** instance for the requested projectile. + * @param a_level [in] The current recursive level. + * @param a_maxLevel [in] The maximum recursive level requested by the user. + * @param a_energyMax [in] Only reactions with effective thresholds less than this value are processed. + * @param a_products [in] The list to add additional products to. + ***********************************************************************************************************/ + +void Target::products( Projectile const *a_projectile, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const { + + m_protares[0]->products( a_projectile, a_level, a_maxLevel, a_energyMax, a_products ); +} + +/* *********************************************************************************************************//** + * Calls the *print* method on each **Projectile** in *this*. + * + * @param a_indent [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Target::print( std::string const &a_indent ) const { + + std::cout << a_indent + m_id << ":"; + for( auto iter = m_protares.begin( ); iter != m_protares.end( ); ++iter ) std::cout << " " << (*iter)->evaluation( ); + std::cout << std::endl; +} + +/*! \class Projectile + * Stores a list of projectiles and their associated **Target** instance. + */ + + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Projectile::~Projectile( ) { + + for( auto iter = m_targets.begin( ); iter != m_targets.end( ); ++iter ) delete (*iter).second; + +} + +/* *********************************************************************************************************//** + * Adds *a_protare* to the associated target of *this*. + * + * @param a_protare [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Projectile::add( Protare *a_protare ) { + + std::string const &target = a_protare->target( ); + + auto iter = m_targets.find( target ); + if( iter == m_targets.end( ) ) { + m_targets[target] = new Target( target ); + iter = m_targets.find( target ); + } + + (*iter).second->add( a_protare ); +} + +/* *********************************************************************************************************//** + * + * @param a_level [in] The current recursive level. + * @param a_maxLevel [in] The maximum recursive level requested by the user. + * @param a_energyMax [in] Only reactions with effective thresholds less than this value are processed. + * @param a_products [in] The list to add additional products to. + ***********************************************************************************************************/ + +void Projectile::products( std::string const &a_target, int a_level, int a_maxLevel, double a_energyMax, std::map &a_products ) const { + + auto protductIter = a_products.find( a_target ); + if( protductIter != a_products.end( ) ) { + if( a_level > (*protductIter).second ) return; } + else { + a_products[a_target] = a_level; // Adds a_target to a_products. + } + + if( a_level >= a_maxLevel ) return; + + auto targetIter = m_targets.find( a_target ); + if( targetIter != m_targets.end( ) ) (*targetIter).second->products( this, a_level + 1, a_maxLevel, a_energyMax, a_products ); +} + +/* *********************************************************************************************************//** + * Prints *this* id and then calls the *print* method on each **Target** in *this*. + * + * @param a_indent [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Projectile::print( std::string const &a_indent ) const { + + std::cout << a_indent + m_id << std::endl; + for( auto iter = m_targets.begin( ); iter != m_targets.end( ); ++iter ) (*iter).second->print( a_indent + " " ); +} + +/*! \class Projectiles + * Stores a list of projectiles. + */ + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +Projectiles::~Projectiles( ) { + + clear( ); +} + +/* *********************************************************************************************************//** + * Adds *a_protare* to the associated projectile of *this*. + * + * @param a_protare [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Projectiles::add( Protare *a_protare ) { + + std::string const &projectile = a_protare->projectile( ); + + auto iter = m_projectiles.find( projectile ); + if( iter == m_projectiles.end( ) ) { + m_projectiles[projectile] = new Projectile( projectile ); + iter = m_projectiles.find( projectile ); + } + + (*iter).second->add( a_protare ); +} + +/* *********************************************************************************************************//** + * Clears the contents of the *m_projectiles* member. + ***********************************************************************************************************/ + +void Projectiles::clear( ) { + + for( auto iter = m_projectiles.begin( ); iter != m_projectiles.end( ); ++iter ) delete (*iter).second; + m_projectiles.clear( ); +} + +/* *********************************************************************************************************//** + * + * @param a_level [in] The current recursive level. + * @param a_maxLevel [in] The maximum recursive level requested by the user. + * @param a_energyMax [in] Only reactions with effective thresholds less than this value are processed. + * @param a_products [in] The list to add additional products to. + ***********************************************************************************************************/ + +std::vector Projectiles::products( std::string const &a_projectile, std::vector const &a_seedTargets, int a_maxLevel, + double a_energyMax ) const { + + std::map productMap; + + auto projectile = m_projectiles.find( a_projectile ); + if( projectile != m_projectiles.end( ) ) { + for( auto targetIter = a_seedTargets.begin( ); targetIter != a_seedTargets.end( ); ++targetIter ) + (*projectile).second->products( (*targetIter), 0, a_maxLevel, a_energyMax, productMap ); + } + + std::vector productList; + for( auto productIter = productMap.begin( ); productIter != productMap.end( ); ++productIter ) productList.push_back( (*productIter).first ); + + return( productList ); +} + +/* *********************************************************************************************************//** + * Calls the *print* method on each **Projectile** in *this*. + * + * @param a_indent [in] The **Protare** instance to add to *this*. + ***********************************************************************************************************/ + +void Projectiles::print( std::string const &a_indent ) const { + + for( auto iter = m_projectiles.begin( ); iter != m_projectiles.end( ); ++iter ) (*iter).second->print( a_indent ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +void readRIS( std::string const &a_fileName, std::string const &a_energyUnit, Projectiles &a_projectiles ) { + + a_projectiles.clear( ); + readRIS2( ".", a_fileName, a_projectiles, a_energyUnit ); +} + +/* *********************************************************************************************************//** + ***********************************************************************************************************/ + +static void readRIS2( std::string const &a_basePath, std::string const &a_fileName, Projectiles &a_projectiles, std::string const &a_energyUnit ) { + + std::string errorString; + + std::string fileName( a_fileName ); + if( fileName[0] != '/' ) { // Only works on Unix like systems. + fileName = a_basePath + "/" + fileName; + } + + std::ifstream inputFile; + inputFile.open( fileName ); + if( !inputFile.good( ) ) throw LUPI::Exception( "Opening RIS file " + a_fileName + " failed." ); + + std::string line; + try { + if( getline( inputFile, line ) ) { + std::vector elements = LUPI::Misc::splitString( line, ':', true ); + if( elements.size( ) != 2 ) throw LUPI::Exception( "Invalid header line in RIS file '" + fileName + "'" ); + + if( elements[0] != "#ris" ) throw LUPI::Exception( "Invalid header tag in RIS file '" + fileName + "'" ); + + if( elements[1] != "1.0" ) throw LUPI::Exception( "Invalid header version in RIS file '" + fileName + "'" ); + + Protare *protare = nullptr; + while( getline( inputFile, line ) ) { + elements = LUPI::Misc::splitString( line, ':', true ); + if( elements.size( ) == 0 ) continue; + std::string command = elements[0]; + + if( command == "#import" ) { + readRIS2( LUPI::FileInfo::_dirname( fileName ), elements[1], a_projectiles, a_energyUnit ); + protare = nullptr; } + else if( command == "#protare" ) { + protare = new Protare(elements[1], elements[2], elements[3], elements[4], a_energyUnit); + a_projectiles.add( protare ); } + else if( command == "#aliases" ) { + protare->setAddingAliases( ); } + else if( command == "#reactions" ) { + protare->setAddingReactions( ); } + else { + if( protare == nullptr ) throw LUPI::Exception( "Data without protare defined in RIS file '" + fileName + "'." ); + protare->add( elements ); + } + } + } } + catch (...) { + inputFile.close( ); + throw; + } +} + +} // End of namespace RISI. + +} // End of namespace GIDI. diff --git a/source/processes/hadronic/models/lend/src/lPoPs.cc b/source/processes/hadronic/models/lend/src/lPoPs.cc deleted file mode 100644 index f6e15edc3a..0000000000 --- a/source/processes/hadronic/models/lend/src/lPoPs.cc +++ /dev/null @@ -1,192 +0,0 @@ -#include -#include -#include -#include - -#include "PoPs.h" -#include "PoPs_mass.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static struct ZLabels { - int Z; - char const *Symbol; -} Zs[] = { { 0, "n" }, { 1, "H" }, { 2, "He" }, { 3, "Li" }, { 4, "Be" }, { 5, "B" }, { 6, "C" }, { 7, "N" }, { 8, "O" }, - { 9, "F" }, { 10, "Ne" }, { 11, "Na" }, { 12, "Mg" }, { 13, "Al" }, { 14, "Si" }, { 15, "P" }, { 16, "S" }, { 17, "Cl" }, - { 18, "Ar" }, { 19, "K" }, { 20, "Ca" }, { 21, "Sc" }, { 22, "Ti" }, { 23, "V" }, { 24, "Cr" }, { 25, "Mn" }, { 26, "Fe" }, - { 27, "Co" }, { 28, "Ni" }, { 29, "Cu" }, { 30, "Zn" }, { 31, "Ga" }, { 32, "Ge" }, { 33, "As" }, { 34, "Se" }, { 35, "Br" }, - { 36, "Kr" }, { 37, "Rb" }, { 38, "Sr" }, { 39, "Y" }, { 40, "Zr" }, { 41, "Nb" }, { 42, "Mo" }, { 43, "Tc" }, { 44, "Ru" }, - { 45, "Rh" }, { 46, "Pd" }, { 47, "Ag" }, { 48, "Cd" }, { 49, "In" }, { 50, "Sn" }, { 51, "Sb" }, { 52, "Te" }, { 53, "I" }, - { 54, "Xe" }, { 55, "Cs" }, { 56, "Ba" }, { 57, "La" }, { 58, "Ce" }, { 59, "Pr" }, { 60, "Nd" }, { 61, "Pm" }, { 62, "Sm" }, - { 63, "Eu" }, { 64, "Gd" }, { 65, "Tb" }, { 66, "Dy" }, { 67, "Ho" }, { 68, "Er" }, { 69, "Tm" }, { 70, "Yb" }, { 71, "Lu" }, - { 72, "Hf" }, { 73, "Ta" }, { 74, "W" }, { 75, "Re" }, { 76, "Os" }, { 77, "Ir" }, { 78, "Pt" }, { 79, "Au" }, { 80, "Hg" }, - { 81, "Tl" }, { 82, "Pb" }, { 83, "Bi" }, { 84, "Po" }, { 85, "At" }, { 86, "Rn" }, { 87, "Fr" }, { 88, "Ra" }, { 89, "Ac" }, - { 90, "Th" }, { 91, "Pa" }, { 92, "U" }, { 93, "Np" }, { 94, "Pu" }, { 95, "Am" }, { 96, "Cm" }, { 97, "Bk" }, { 98, "Cf" }, - { 99, "Es" }, { 100, "Fm" }, { 101, "Md" }, { 102, "No" }, { 103, "Lr" }, { 104, "Rf" }, { 105, "Db" }, { 106, "Sg" }, { 107, "Bh" }, - { 108, "Hs" }, { 109, "Mt" } }; -static const int nZs = sizeof( Zs ) / sizeof( Zs[0] ); - -static char const *lPoPs_ZSymbol( int Z ); -/* -======================================================================== -*/ -int lPoPs_addParticleIfNeeded( statusMessageReporting *smr, char const *name, char const *special ) { - - int index = PoPs_particleIndex( name ), ZA, Z = 0, A = 0,/* level = 0,*/ ispecial; - char *endptr, name_[256], AStr[32]; - char const *ZStr, *alias = NULL; - PoP *pop, *pop_; - /* enum PoPs_genre genre = PoPs_genre_unknown; */ - char const *yiNames[] = { "p", "h2", "h3", "he3", "he4", "photon" }; - char const *yiAliases[] = { "h1", "d", "t", "he3", "a", "g" }; - /* enum PoPs_genre yiGenres[] = { PoPs_genre_baryon, PoPs_genre_nucleus, PoPs_genre_nucleus, PoPs_genre_nucleus, - PoPs_genre_nucleus, PoPs_genre_photon }; */ - - if( special == NULL ) special = ""; - if( index < 0 ) { - if( isdigit( name[0] ) ) { - ZA = (int) strtol( name, &endptr, 10 ); - if( *endptr != 0 ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "string '%s' not a value ZA", name ); - return( -1 ); - } - Z = ZA / 1000; - A = ZA % 1000; - /*level = 0;*/ - ispecial = 0; - if( strcmp( special, "LLNL" ) == 0 ) { - if( ( ZA > 1 ) && ( ZA < 8 ) ) { - strcpy( name_, yiNames[ZA-2] ); - alias = yiAliases[ZA-2]; - /* genre = yiGenres[ZA-2];*/ - ispecial = 1; } - else if( ( ZA == 1801 ) || ( ZA == 1901 ) ) { - strcpy( name_, yiNames[0] ); - alias = yiAliases[0]; - /* genre = yiGenres[0]; */ - ispecial = 1; } - else if( ZA == 1902 ) { - strcpy( name_, yiNames[1] ); - alias = yiAliases[1]; - /* genre = yiGenres[1]; */ - ispecial = 1; } - else if( ZA == 4809 ) { - strcpy( name_, "Be9" ); - /* genre = PoPs_genre_atom; */ - ispecial = 1; } - else if( ZA == 4909 ) { - strcpy( name_, "Be9" ); - /* genre = PoPs_genre_atom; */ - ispecial = 1; } - else if( ZA == 6912 ) { - strcpy( name_, "C12" ); - /* genre = PoPs_genre_atom; */ - ispecial = 1; } - else if( ZA == 8916 ) { - strcpy( name_, "O16" ); - /* genre = PoPs_genre_atom; */ - ispecial = 1; } - else if( ZA == 95242 ) { - strcpy( name_, "Am242_e2" ); - /*level = 2;*/ - /* genre = PoPs_genre_atom; */ - ispecial = 1; } - else if( Z == 99 ) { - if( ( 120 <= A ) && ( A < 126 ) ) { - snprintf( name_, sizeof name_, "FissionProductENDL99%d", A ); - /* genre = PoPs_genre_atom; */ - ispecial = 1; - } - } - } - if( ispecial == 0 ) { - if( ZA == 1 ) { - AStr[0] = 0; } - else if( A == 0 ) { - strcpy( AStr, "_natural" ); } - else { - snprintf( AStr, sizeof AStr, "%d", A ); - } - if( ( ZStr = lPoPs_ZSymbol( Z ) ) == NULL ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "string '%s' not a value ZA; Z = %d is not supported", name, Z ); - return( -1 ); - } - snprintf( name_, sizeof name_, "%s%s", ZStr, AStr ); - /* genre = PoPs_genre_atom; */ - /* if( ZA == 1 ) genre = PoPs_genre_baryon; */ - } } - else { - strcpy( name_, name ); - ZA = -1; - if( strcmp( name, "neutron" ) == 0 ) { - strcpy( name_, "n" ); - alias = name; - /* genre = PoPs_genre_baryon; */ } - else if( strcmp( name, "electron" ) == 0 ) { - strcpy( name_, "e-" ); - alias = name; - /* genre = PoPs_genre_lepton; */ } - else if( strcmp( name, "positron" ) == 0 ) { - strcpy( name_, "e+" ); - alias = name; - /* genre = PoPs_genre_lepton; */ } - else if( ( strcmp( name, "h1" ) == 0 ) || ( strcmp( name, "proton" ) == 0 ) ) { - ZA = 2; } - else if( ( strcmp( name, "d" ) == 0 ) || ( strcmp( name, "deuteron" ) == 0 ) ) { - ZA = 3; } - else if( ( strcmp( name, "t" ) == 0 ) || ( strcmp( name, "triton" ) == 0 ) ) { - ZA = 4; } - else if( strcmp( name, "helium3" ) == 0 ) { - ZA = 5; } - else if( ( strcmp( name, "a" ) == 0 ) || ( strcmp( name, "alpha" ) == 0 ) || ( strcmp( name, "helium4" ) == 0 ) ) { - ZA = 6; } - else if( ( strcmp( name, "g" ) == 0 ) || ( strcmp( name, "gamma" ) == 0 ) ) { - ZA = 7; } - else if( strcmp( name, "FP" ) == 0 ) { - strcpy( name_, "FissionProductENDL99120" ); - /* genre = PoPs_genre_atom; */ - } - if( ZA != -1 ) { - strcpy( name_, yiNames[ZA-2] ); - alias = name; - /* genre = yiGenres[ZA-2]; */ - } - } - - if( ( pop = PoPs_particleCreateLoadInfo( smr, name_ ) ) == NULL ) { - smr_setReportError2( smr, PoPs_smr_ID, PoPs_errorToken_badName, "particle '%s' converted to name '%s' not in database", name, name_ ); - return( -1 ); - } - if( ( pop_ = PoPs_addParticleIfNeeded( smr, pop ) ) != pop ) PoP_free( pop ); /* Still need to add alias as index was < 0. */ - index = pop_->index; - - if( PoPs_particleIndex( name ) < 0 ) { - if( ( pop = PoP_makeAlias( smr, name_, name ) ) == NULL ) return( -1 ); - if( ( pop_ = PoPs_addParticleIfNeeded( smr, pop ) ) != pop ) return( -1 ); /* pop_ should be pop as index was < 0. */ - } - - if( alias != NULL ) { - if( PoPs_particleIndex( alias ) < 0 ) { - if( ( pop = PoP_makeAlias( smr, name_, alias ) ) == NULL ) return( -1 ); - if( ( pop_ = PoPs_addParticleIfNeeded( smr, pop ) ) != pop ) return( -1 ); /* Required for some yis. */ - } - } - } - return( index ); -} -/* -======================================================================== -*/ -static char const *lPoPs_ZSymbol( int Z ) { - - //Coverity #63066 - if( ( Z < 0 ) || ( Z >= nZs ) ) return( NULL ); - return( Zs[Z].Symbol ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.cc b/source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.c similarity index 94% rename from source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.cc rename to source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.c index a85ac6d16f..1735d175c3 100644 --- a/source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.cc +++ b/source/processes/hadronic/models/lend/src/nf_GnG_adaptiveQuadrature.c @@ -1,5 +1,9 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ @@ -7,11 +11,6 @@ #include "nf_integration.h" -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - typedef struct nf_GnG_adaptiveQuadrature_info_s { nfu_status status; nf_Legendre_GaussianQuadrature_callback integrandFunction; @@ -101,7 +100,3 @@ static double nf_GnG_adaptiveQuadrature2( nf_GnG_adaptiveQuadrature_info *adapti return( nf_GnG_adaptiveQuadrature2( adaptiveQuadrature_info, intregral1, x1, xm, depth ) + nf_GnG_adaptiveQuadrature2( adaptiveQuadrature_info, intregral2, xm, x2, depth ) ); } - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_Legendre.c b/source/processes/hadronic/models/lend/src/nf_Legendre.c new file mode 100644 index 0000000000..64fbafd7c8 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/nf_Legendre.c @@ -0,0 +1,390 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include "nf_Legendre.h" + +struct nf_Legendre_from_ptwXY_callback_s { + int l; + double mu1, mu2, f1, f2; +}; + +static nfu_status nf_Legendre_to_ptwXY2( statusMessageReporting *smr, double mu, double *P, void *argList ); +static nfu_status nf_Legendre_from_ptwXY_callback( double mu, double *f, void *argList ); +/* +************************************************************ +*/ +nf_Legendre *nf_Legendre_new( statusMessageReporting *smr, int initialSize, int maxOrder, double *Cls ) { + + int l; + nf_Legendre *Legendre = (nf_Legendre *) smr_malloc2( smr, sizeof( nf_Legendre ), 1, "Legendre" ); + + if( Legendre == NULL ) return( NULL ); + if( nf_Legendre_initialize( smr, Legendre, initialSize, maxOrder ) != nfu_Okay ) { + nfu_free( Legendre ); + return( NULL ); + } + for( l = 0; l <= Legendre->maxOrder; l++ ) Legendre->Cls[l] = Cls[l]; + return( Legendre ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_initialize( statusMessageReporting *smr, nf_Legendre *Legendre, int initialSize, int maxOrder ) { + + nfu_status status; + + memset( Legendre, 0, sizeof( nf_Legendre ) ); + Legendre->status = nfu_Okay; + if( maxOrder < 0 ) maxOrder = -1; + if( maxOrder > nf_Legendre_maxMaxOrder ) maxOrder = nf_Legendre_maxMaxOrder; + Legendre->maxOrder = maxOrder; + if( initialSize < ( maxOrder + 1 ) ) initialSize = maxOrder + 1; + if( ( status = nf_Legendre_reallocateCls( smr, Legendre, initialSize, 0 ) ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_release( statusMessageReporting *smr, nf_Legendre *Legendre ) { + + if( Legendre->allocated > 0 ) nfu_free( Legendre->Cls ); + memset( Legendre, 0, sizeof( nf_Legendre ) ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nf_Legendre *nf_Legendre_free( nf_Legendre *Legendre ) { + + nf_Legendre_release( NULL, Legendre ); + nfu_free( Legendre ); + return( NULL ); +} +/* +************************************************************ +*/ +nf_Legendre *nf_Legendre_clone( statusMessageReporting *smr, nf_Legendre *nfL ) { + + nf_Legendre *Legendre; + + if( nfL->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ( Legendre = nf_Legendre_new( smr, 0, nfL->maxOrder, nfL->Cls ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( Legendre ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_reallocateCls( statusMessageReporting *smr, nf_Legendre *Legendre, int size, int forceSmallerResize ) { + + int i1; + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( size < nf_Legendre_minMaxOrder ) size = nf_Legendre_minMaxOrder; + if( size > ( nf_Legendre_maxMaxOrder + 1 ) ) size = nf_Legendre_maxMaxOrder + 1; + if( size != Legendre->allocated ) { + if( size > Legendre->allocated ) { + Legendre->Cls = (double *) smr_realloc2( smr, Legendre->Cls, size * sizeof( double ), "Cls" ); } + else { + if( size < ( Legendre->maxOrder + 1 ) ) size = Legendre->maxOrder + 1; + if( ( Legendre->allocated > 2 * size ) || forceSmallerResize ) { + Legendre->Cls = (double *) nfu_realloc( size * sizeof( double ), Legendre->Cls ); } + else { + size = Legendre->allocated; + } + } + if( Legendre->Cls == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + size = 0; + Legendre->status = nfu_mallocError; + } + Legendre->allocated = size; + } + for( i1 = Legendre->maxOrder + 1; i1 < size; ++i1 ) Legendre->Cls[i1] = 0; + return( Legendre->status ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_maxOrder( statusMessageReporting *smr, nf_Legendre *Legendre, int *maxOrder ) { + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + *maxOrder = Legendre->maxOrder; + return( Legendre->status ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_allocated( statusMessageReporting *smr, nf_Legendre *Legendre, int *allocated ) { + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + *allocated = Legendre->allocated; + return( Legendre->status ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_getCl( statusMessageReporting *smr, nf_Legendre *Legendre, int l, double *Cl ) { + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + *Cl = 0; + if( ( l < 0 ) || ( l > Legendre->maxOrder ) ) { + return( nfu_badIndex ); } + else { + *Cl = Legendre->Cls[l]; + } + return( Legendre->status ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_setCl( statusMessageReporting *smr, nf_Legendre *Legendre, int l, double Cl ) { + + nfu_status status; + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( l > nf_Legendre_maxMaxOrder ) return( nfu_Okay ); + + if( l < 0 ) { + Legendre->status = nfu_badIndex; + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Negative l-order %d is not allowed.", l ); + return( nfu_badIndex ); + } + if( Legendre->allocated <= l ) { + if( ( status = nf_Legendre_reallocateCls( smr, Legendre, l + nf_Legendre_sizeIncrement, 0 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + } + + Legendre->Cls[l] = Cl; + if( l > Legendre->maxOrder ) Legendre->maxOrder = l; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_normalize( statusMessageReporting *smr, nf_Legendre *Legendre ) { + + int l; + double norm; + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( Legendre->maxOrder >= 0 ) { + if( ( norm = Legendre->Cls[0] ) == 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( Legendre->status = nfu_divByZero ); + } + for( l = 0; l <= Legendre->maxOrder; l++ ) Legendre->Cls[l] /= norm; + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status nf_Legendre_evauluateAtMu( statusMessageReporting *smr, nf_Legendre *Legendre, double mu, double *P ) { + + int l; + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + *P = 0; + if( ( mu >= -1. ) && ( mu <= 1. ) ) { + for( l = 0; l <= Legendre->maxOrder; l++ ) *P += ( l + 0.5 ) * Legendre->Cls[l] * nf_Legendre_PofL_atMu( l, mu ); } + else { + return( nfu_XOutsideDomain ); + } + return( Legendre->status ); +} +/* +************************************************************ +*/ +double nf_Legendre_PofL_atMu( int l, double mu ) { + + int l_, twoL_plus1; + double Pl_minus1, Pl, Pl_plus1; + + if( l == 0 ) { + return( 1. ); } + else if( l == 1 ) { + return( mu ); } +/* + else if( l <= 9 ) { + double mu2 = mu * mu; + if ( l == 2 ) { + return( 1.5 * mu2 - 0.5 ); } + else if( l == 3 ) { + return( 2.5 * mu2 - 1.5 ) * mu; } + else if( l == 4 ) { + return( 4.375 * mu2 - 3.75 ) * mu2 + 0.375; } + else if( l == 5 ) { + return( ( 7.875 * mu2 - 8.75 ) * mu2 + 1.875 ) * mu; } + else if( l == 6 ) { + return( ( 14.4375 * mu2 - 19.6875 ) * mu2 + 6.5625 ) * mu2 - 0.3125; } + else if( l == 7 ) { + return( ( ( 26.8125 * mu2 - 43.3125 ) * mu2 + 19.6875 ) * mu2 - 2.1875 ) * mu; } + else if( l == 8 ) { + return( ( ( 50.2734375 * mu2 - 93.84375 ) * mu2 + 54.140625 ) * mu2 - 9.84375 ) * mu2 + 0.2734375; } + else { + return( ( ( ( 94.9609375 * mu2 - 201.09375 ) * mu2 + 140.765625 ) * mu2 - 36.09375 ) * mu2 + 2.4609375 ) * mu; + } + } +*/ + + Pl = 0.; + Pl_plus1 = 1.; + for( l_ = 0, twoL_plus1 = 1; l_ < l; l_++, twoL_plus1 += 2 ) { + Pl_minus1 = Pl; + Pl = Pl_plus1; + Pl_plus1 = ( twoL_plus1 * mu * Pl - l_ * Pl_minus1 ) / ( l_ + 1 ); + } + return( Pl_plus1 ); +} +/* +************************************************************ +*/ +ptwXYPoints *nf_Legendre_to_ptwXY( statusMessageReporting *smr, nf_Legendre *Legendre, double accuracy, + int biSectionMax, int checkForRoots ) { + + int i, n = 1; + double dx, xs[1000]; + void *argList = (void *) Legendre; + ptwXYPoints *ptwXY; + + if( Legendre->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + xs[0] = -1; + if( Legendre->maxOrder > 1 ) { + n = Legendre->maxOrder - 1; + if( n > 249 ) n = 249; + n = 4 * n + 1; + dx = 2. / n; + for( i = 1; i < n; i++ ) xs[i] = xs[i-1] + dx; + } + xs[n] = 1.; + ptwXY = ptwXY_createFromFunction( smr, n + 1, xs, nf_Legendre_to_ptwXY2, argList, accuracy, checkForRoots, biSectionMax ); + if( ptwXY == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY ); +} +/* +************************************************************ +*/ +static nfu_status nf_Legendre_to_ptwXY2( statusMessageReporting *smr, double mu, double *P, void *argList ) { + + return( nf_Legendre_evauluateAtMu( smr, (nf_Legendre *) argList, mu, P ) ); +} +/* +************************************************************ +*/ +nf_Legendre *nf_Legendre_from_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY, int maxOrder ) { + + int l, i, n = (int) ptwXY_length( NULL, ptwXY ); + nf_Legendre *Legendre; + double mu1, mu2, f1, f2, Cl, Cls[1] = { 0 }, integral; + struct nf_Legendre_from_ptwXY_callback_s argList; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( n == 0 ) { + if( ( Legendre = nf_Legendre_new( smr, maxOrder + 1, -1, Cls ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( Legendre ); + } + + if( n == 1 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "ptwXY only has 1 point." ); + return( NULL ); + } + + ptwXY_getXYPairAtIndex( smr, ptwXY, 0, &mu1, &f1 ); + ptwXY_getXYPairAtIndex( smr, ptwXY, n - 1, &mu2, &f2 ); + if( ( mu1 < -1 ) || ( mu2 > 1 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XOutsideDomain, "bad domain for ptwXY: %.17e %17.e", mu1, mu2 ); + return( NULL ); + } + + if( ( Legendre = nf_Legendre_new( smr, maxOrder + 1, -1, Cls ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( maxOrder > nf_Legendre_maxMaxOrder ) maxOrder = nf_Legendre_maxMaxOrder; + for( l = 0; l <= maxOrder; l++ ) { + ptwXY_getXYPairAtIndex( smr, ptwXY, 0, &mu1, &f1 ); + argList.l = l; + for( i = 1, Cl = 0; i < n; i++ ) { + ptwXY_getXYPairAtIndex( smr, ptwXY, i, &mu2, &f2 ); + argList.mu1 = mu1; + argList.f1 = f1; + argList.mu2 = mu2; + argList.f2 = f2; + if( nf_Legendre_GaussianQuadrature( l + 1, mu1, mu2, nf_Legendre_from_ptwXY_callback, (void *) &argList, + &integral ) != nfu_Okay ) goto err; + Cl += integral; + mu1 = mu2; + f1 = f2; + } + if( nf_Legendre_setCl( smr, Legendre, l, Cl ) != nfu_Okay ) goto err; + } + return( Legendre ); + +err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + nf_Legendre_free( Legendre ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status nf_Legendre_from_ptwXY_callback( double mu, double *f, void *argList ) { + + struct nf_Legendre_from_ptwXY_callback_s *args = (struct nf_Legendre_from_ptwXY_callback_s *) argList; + + *f = ( args->f1 * ( args->mu2 - mu ) + args->f2 * ( mu - args->mu1 ) ) / ( args->mu2 - args->mu1 ); + *f *= nf_Legendre_PofL_atMu( args->l, mu ); + return( nfu_Okay ); +} diff --git a/source/processes/hadronic/models/lend/src/nf_Legendre.cc b/source/processes/hadronic/models/lend/src/nf_Legendre.cc deleted file mode 100644 index f01eda8173..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_Legendre.cc +++ /dev/null @@ -1,311 +0,0 @@ -/* -# <> -# <> -*/ - -#include "nf_Legendre.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -struct nf_Legendre_from_ptwXY_callback_s { - int l; - double mu1, mu2, f1, f2; -}; - -static nfu_status nf_Legendre_to_ptwXY2( double mu, double *P, void *argList ); -static nfu_status nf_Legendre_from_ptwXY_callback( double mu, double *f, void *argList ); -/* -************************************************************ -*/ -nf_Legendre *nf_Legendre_new( int initialSize, int maxOrder, double *Cls, nfu_status *status ) { - - int l; - nf_Legendre *Legendre = (nf_Legendre *) nfu_malloc( sizeof( nf_Legendre ) ); - - *status = nfu_mallocError; - if( Legendre == NULL ) return( NULL ); - if( ( *status = nf_Legendre_setup( Legendre, initialSize, maxOrder ) ) != nfu_Okay ) { - nfu_free( Legendre ); - return( NULL ); - } - for( l = 0; l <= Legendre->maxOrder; l++ ) Legendre->Cls[l] = Cls[l]; - return( Legendre ); -} -/* -************************************************************ -*/ -nfu_status nf_Legendre_setup( nf_Legendre *Legendre, int initialSize, int maxOrder ) { - - memset( Legendre, 0, sizeof( nf_Legendre ) ); - if( maxOrder < 0 ) maxOrder = -1; - if( maxOrder > nf_Legendre_maxMaxOrder ) maxOrder = nf_Legendre_maxMaxOrder; - Legendre->maxOrder = maxOrder; - if( initialSize < ( maxOrder + 1 ) ) initialSize = maxOrder + 1; - return( nf_Legendre_reallocateCls( Legendre, initialSize, 0 ) ); -} -/* -************************************************************ -*/ -nfu_status nf_Legendre_release( nf_Legendre *Legendre ) { - - if( Legendre->allocated > 0 ) nfu_free( Legendre->Cls ); - memset( Legendre, 0, sizeof( nf_Legendre ) ); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nf_Legendre *nf_Legendre_free( nf_Legendre *Legendre ) { - - nf_Legendre_release( Legendre ); - nfu_free( Legendre ); - return( NULL ); -} -/* -************************************************************ -*/ -nf_Legendre *nf_Legendre_clone( nf_Legendre *nfL, nfu_status *status ) { - - return( nf_Legendre_new( 0, nfL->maxOrder, nfL->Cls, status ) ); -} -/* -************************************************************ -*/ -nfu_status nf_Legendre_reallocateCls( nf_Legendre *Legendre, int size, int forceSmallerResize ) { - - nfu_status status = nfu_Okay; - - if( size < nf_Legendre_minMaxOrder ) size = nf_Legendre_minMaxOrder; - if( size > ( nf_Legendre_maxMaxOrder + 1 ) ) size = nf_Legendre_maxMaxOrder + 1; - if( size != Legendre->allocated ) { - if( size > Legendre->allocated ) { - Legendre->Cls = (double *) nfu_realloc( size * sizeof( double ), Legendre->Cls ); } - else { - if( size < ( Legendre->maxOrder + 1 ) ) size = Legendre->maxOrder + 1; - if( ( Legendre->allocated > 2 * size ) || forceSmallerResize ) { - Legendre->Cls = (double *) nfu_realloc( size * sizeof( double ), Legendre->Cls ); } - else { - size = Legendre->allocated; - } - } - if( Legendre->Cls == NULL ) { - size = 0; - status = nfu_mallocError; - } - Legendre->allocated = size; - } - return( status ); -} -/* -************************************************************ -*/ -int nf_Legendre_maxOrder( nf_Legendre *Legendre ) { - - return( Legendre->maxOrder ); -} -/* -************************************************************ -*/ -int nf_Legendre_allocated( nf_Legendre *Legendre ) { - - return( Legendre->allocated ); -} -/* -************************************************************ -*/ -double nf_Legendre_getCl( nf_Legendre *Legendre, int l, nfu_status *status ) { - - *status = nfu_Okay; - if( ( l < 0 ) || ( l > Legendre->maxOrder ) ) { - *status = nfu_badIndex; - return( 0. ); - } - return( Legendre->Cls[l] ); -} -/* -************************************************************ -*/ -nfu_status nf_Legendre_setCl( nf_Legendre *Legendre, int l, double Cl ) { - - nfu_status status; - - if( ( l < 0 ) || ( l > ( Legendre->maxOrder + 1 ) ) ) return( nfu_badIndex ); - if( Legendre->allocated <= l ) { - if( ( status = nf_Legendre_reallocateCls( Legendre, l + nf_Legendre_sizeIncrement, 0 ) ) != nfu_Okay ) return( status ); - } - if( l > Legendre->maxOrder ) Legendre->maxOrder = l; - Legendre->Cls[l] = Cl; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status nf_Legendre_normalize( nf_Legendre *Legendre ) { - - int l; - double norm; - - if( Legendre->maxOrder >= 0 ) { - if( ( norm = Legendre->Cls[0] ) == 0 ) return( nfu_divByZero ); - for( l = 0; l <= Legendre->maxOrder; l++ ) Legendre->Cls[l] /= norm; - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -double nf_Legendre_evauluateAtMu( nf_Legendre *Legendre, double mu, nfu_status *status ) { - - int l; - double P = 0.; - - *status = nfu_XOutsideDomain; - if( ( mu >= -1. ) && ( mu <= 1. ) ) { - *status = nfu_Okay; - for( l = 0; l <= Legendre->maxOrder; l++ ) P += ( l + 0.5 ) * Legendre->Cls[l] * nf_Legendre_PofL_atMu( l, mu ); - } - return( P ); -} -/* -************************************************************ -*/ -double nf_Legendre_PofL_atMu( int l, double mu ) { - - int l_, twoL_plus1; - double Pl_minus1, Pl, Pl_plus1; - - if( l == 0 ) { - return( 1. ); } - else if( l == 1 ) { - return( mu ); } -/* - else if( l <= 9 ) { - double mu2 = mu * mu; - if ( l == 2 ) { - return( 1.5 * mu2 - 0.5 ); } - else if( l == 3 ) { - return( 2.5 * mu2 - 1.5 ) * mu; } - else if( l == 4 ) { - return( 4.375 * mu2 - 3.75 ) * mu2 + 0.375; } - else if( l == 5 ) { - return( ( 7.875 * mu2 - 8.75 ) * mu2 + 1.875 ) * mu; } - else if( l == 6 ) { - return( ( 14.4375 * mu2 - 19.6875 ) * mu2 + 6.5625 ) * mu2 - 0.3125; } - else if( l == 7 ) { - return( ( ( 26.8125 * mu2 - 43.3125 ) * mu2 + 19.6875 ) * mu2 - 2.1875 ) * mu; } - else if( l == 8 ) { - return( ( ( 50.2734375 * mu2 - 93.84375 ) * mu2 + 54.140625 ) * mu2 - 9.84375 ) * mu2 + 0.2734375; } - else { - return( ( ( ( 94.9609375 * mu2 - 201.09375 ) * mu2 + 140.765625 ) * mu2 - 36.09375 ) * mu2 + 2.4609375 ) * mu; - } - } -*/ - - Pl = 0.; - Pl_plus1 = 1.; - for( l_ = 0, twoL_plus1 = 1; l_ < l; l_++, twoL_plus1 += 2 ) { - Pl_minus1 = Pl; - Pl = Pl_plus1; - Pl_plus1 = ( twoL_plus1 * mu * Pl - l_ * Pl_minus1 ) / ( l_ + 1 ); - } - return( Pl_plus1 ); -} -/* -************************************************************ -*/ -ptwXYPoints *nf_Legendre_to_ptwXY( nf_Legendre *Legendre, double accuracy, int biSectionMax, int checkForRoots, nfu_status *status ) { - - int i, n = 1; - double dx, xs[1000]; - void *argList = (void *) Legendre; - - *status = nfu_Okay; - xs[0] = -1; - if( Legendre->maxOrder > 1 ) { - n = Legendre->maxOrder - 1; - if( n > 249 ) n = 249; - n = 4 * n + 1; - dx = 2. / n; - for( i = 1; i < n; i++ ) xs[i] = xs[i-1] + dx; - } - xs[n] = 1.; - return( ptwXY_createFromFunction( n + 1, xs, nf_Legendre_to_ptwXY2, (void *) argList, accuracy, checkForRoots, biSectionMax, status ) ); -} -/* -************************************************************ -*/ -static nfu_status nf_Legendre_to_ptwXY2( double mu, double *P, void *argList ) { - - nfu_status status; /* Set by nf_Legendre_evauluateAtMu. */ - - *P = nf_Legendre_evauluateAtMu( (nf_Legendre *) argList, mu, &status ); - return( status ); -} -/* -************************************************************ -*/ -nf_Legendre *nf_Legendre_from_ptwXY( ptwXYPoints *ptwXY, int maxOrder, nfu_status *status ) { - - int l, i, n = (int) ptwXY_length( ptwXY ); - nf_Legendre *Legendre; - double mu1, mu2, f1, f2, Cl, Cls[1] = { 0 }, integral; - struct nf_Legendre_from_ptwXY_callback_s argList; - - if( ( *status = ptwXY_getStatus( ptwXY ) ) != nfu_Okay ) return( NULL ); - - ptwXY_getXYPairAtIndex( ptwXY, 0, &mu1, &f1 ); - if( mu1 < -1 ) { - *status = nfu_XOutsideDomain; - return( NULL ); - } - - ptwXY_getXYPairAtIndex( ptwXY, 0, &mu2, &f2 ); - if( mu2 > 1 ) { - *status = nfu_XOutsideDomain; - return( NULL ); - } - - if( ( Legendre = nf_Legendre_new( maxOrder + 1, -1, Cls, status ) ) == NULL ) return( NULL ); - - if( maxOrder > nf_Legendre_maxMaxOrder ) maxOrder = nf_Legendre_maxMaxOrder; - for( l = 0; l <= maxOrder; l++ ) { - ptwXY_getXYPairAtIndex( ptwXY, 0, &mu1, &f1 ); - argList.l = l; - for( i = 1, Cl = 0; i < n; i++ ) { - ptwXY_getXYPairAtIndex( ptwXY, i, &mu2, &f2 ); - argList.mu1 = mu1; - argList.f1 = f1; - argList.mu2 = mu2; - argList.f2 = f2; - if( ( *status = nf_Legendre_GaussianQuadrature( l + 1, mu1, mu2, nf_Legendre_from_ptwXY_callback, (void *) &argList, &integral ) ) != nfu_Okay ) - goto err; - Cl += integral; - mu1 = mu2; - f1 = f2; - } - if( ( *status = nf_Legendre_setCl( Legendre, l, Cl ) ) != nfu_Okay ) goto err; - } - return( Legendre ); - -err: - nf_Legendre_free( Legendre ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status nf_Legendre_from_ptwXY_callback( double mu, double *f, void *argList ) { - - struct nf_Legendre_from_ptwXY_callback_s *args = (struct nf_Legendre_from_ptwXY_callback_s *) argList; - - *f = ( args->f1 * ( args->mu2 - mu ) + args->f2 * ( mu - args->mu1 ) ) / ( args->mu2 - args->mu1 ); - *f *= nf_Legendre_PofL_atMu( args->l, mu ); - return( nfu_Okay ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.cc b/source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.c similarity index 92% rename from source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.cc rename to source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.c index d76b3d9491..f29da369d0 100644 --- a/source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.cc +++ b/source/processes/hadronic/models/lend/src/nf_Legendre_GaussianQuadrature.c @@ -1,15 +1,14 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #include "nf_Legendre.h" -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - struct nf_Legendre_GaussianQuadrature_degree { int n; double *weights; @@ -60,7 +59,8 @@ static struct nf_Legendre_GaussianQuadrature_degree GaussianQuadrature_degrees[n /* ************************************************************ */ -nfu_status nf_Legendre_GaussianQuadrature( int degree, double x1, double x2, nf_Legendre_GaussianQuadrature_callback func, void *argList, double *integral ) { +nfu_status nf_Legendre_GaussianQuadrature( int degree, double x1, double x2, nf_Legendre_GaussianQuadrature_callback func, + void *argList, double *integral ) { int i, n; double x, mu, sum, *weights, *xis; @@ -98,7 +98,3 @@ nfu_status nf_Legendre_GaussianQuadrature( int degree, double x1, double x2, nf_ *integral *= 0.5 * ( x2 - x1 ); return( status ); } - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_angularMomentumCoupling.cc b/source/processes/hadronic/models/lend/src/nf_angularMomentumCoupling.cc deleted file mode 100644 index bc59181626..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_angularMomentumCoupling.cc +++ /dev/null @@ -1,559 +0,0 @@ -/* -* calculate coupling coefficients of angular momenta -* -* Author: -* Kawano, T -* -* Modified by David Brown -* No longer must precompute the logarithm of the factorials. -* Also renamed things to make more Python friendly. -* Finally, fixed a bunch of bugs & confusing conventions -* -* Functions: -* -* Note that arguments of those functions must be doubled, namely 1/2 is 1, etc. -* -* wigner_3j(j1,j2,j3,j4,j5,j6) -* Wigner's 3J symbol (similar to Clebsh-Gordan) -* = / j1 j2 j3 \ -* \ j4 j5 j6 / -* -* wigner_6j(j1,j2,j3,j4,j5,j6) -* Wigner's 6J symbol (similar to Racah) -* = { j1 j2 j3 } -* { j4 j5 j6 } -* -* wigner_9j(j1,j2,j3,j4,j5,j6,j7,j8,j9) -* Wigner's 9J symbol -* / j1 j2 j3 \ -* = | j4 j5 j6 | -* \ j7 j8 j9 / -* -* racah(j1, j2, l2, l1, j3, l3) -* = W(j1, j2, l2, l1 ; j3, l3) -* = (-1)^(j1+j2+l1+l2) * { j1 j2 j3 } -* { l1 l2 l3 } -* -* clebsh_gordan(j1,j2,m1,m2,j3) -* Clebsh-Gordan coefficient -* = -* = (-)^(j1-j2+m1+m2) * std::sqrt(2*j3+1) * / j1 j2 j3 \ -* \ m1 m2 -m1-m2 / -* -* z_coefficient(l1,j1,l2,j2,S,L) -* Biedenharn's Z-coefficient coefficient -* = Z(l1 j1 l2 j2 | S L ) -* -* reduced_matrix_element(L,S,J,l0,j0,l1,j1) -* Reduced Matrix Element for Tensor Operator -* = < l1j1 || T(YL,sigma_S)J || l0j0 > -* -* References: -* A. R. Edmonds, Angular Momentum in Quantum Mechanics, Princeton University Press 1974. -* E. Condon, and G. Shortley, The Theory of Atomic Spectra, Cambridge, 1935. -*/ - -#include -#define _USE_MATH_DEFINES -#include - -#include "nf_specialFunctions.h" - -#if defined __cplusplus -#include -#include "G4Exp.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static const int MAX_FACTORIAL = 200; // maximal factorial n! (2 x Lmax) -/*static const double ARRAY_OVER = 1.0e+300; // force overflow */ -static const double nf_amc_log_fact[] = {0.0, 0.0, 0.69314718056, 1.79175946923, 3.17805383035, 4.78749174278, 6.57925121201, 8.52516136107, 10.6046029027, 12.8018274801, 15.1044125731, 17.5023078459, 19.9872144957, 22.5521638531, 25.1912211827, 27.8992713838, 30.6718601061, 33.5050734501, 36.395445208, 39.3398841872, 42.3356164608, 45.3801388985, 48.4711813518, 51.6066755678, 54.7847293981, 58.003605223, 61.261701761, 64.557538627, 67.8897431372, 71.2570389672, 74.6582363488, 78.0922235533, 81.5579594561, 85.0544670176, 88.5808275422, 92.1361756037, 95.7196945421, 99.3306124548, 102.968198615, 106.631760261, 110.320639715, 114.034211781, 117.7718814, 121.533081515, 125.317271149, 129.123933639, 132.952575036, 136.802722637, 140.673923648, 144.565743946, 148.477766952, 152.409592584, 156.360836303, 160.331128217, 164.320112263, 168.327445448, 172.352797139, 176.395848407, 180.456291418, 184.533828861, 188.628173424, 192.739047288, 196.866181673, 201.009316399, 205.168199483, 209.342586753, 213.532241495, 217.736934114, 221.956441819, 226.190548324, 230.439043566, 234.701723443, 238.978389562, 243.268849003, 247.572914096, 251.89040221, 256.22113555, 260.564940972, 264.921649799, 269.291097651, 273.673124286, 278.06757344, 282.474292688, 286.893133295, 291.323950094, 295.766601351, 300.220948647, 304.686856766, 309.16419358, 313.65282995, 318.15263962, 322.663499127, 327.185287704, 331.717887197, 336.261181979, 340.815058871, 345.379407062, 349.954118041, 354.539085519, 359.13420537, 363.739375556, 368.354496072, 372.979468886, 377.614197874, 382.258588773, 386.912549123, 391.575988217, 396.248817052, 400.930948279, 405.622296161, 410.322776527, 415.032306728, 419.7508056, 424.478193418, 429.214391867, 433.959323995, 438.712914186, 443.475088121, 448.245772745, 453.024896238, 457.812387981, 462.608178527, 467.412199572, 472.224383927, 477.044665493, 481.87297923, 486.709261137, 491.553448223, 496.405478487, 501.265290892, 506.132825342, 511.008022665, 515.890824588, 520.781173716, 525.679013516, 530.584288294, 535.49694318, 540.416924106, 545.344177791, 550.278651724, 555.220294147, 560.169054037, 565.124881095, 570.087725725, 575.057539025, 580.034272767, 585.017879389, 590.008311976, 595.005524249, 600.009470555, 605.020105849, 610.037385686, 615.061266207, 620.091704128, 625.128656731, 630.172081848, 635.221937855, 640.27818366, 645.340778693, 650.409682896, 655.484856711, 660.566261076, 665.653857411, 670.747607612, 675.84747404, 680.953419514, 686.065407302, 691.183401114, 696.307365094, 701.437263809, 706.573062246, 711.714725802, 716.862220279, 722.015511874, 727.174567173, 732.339353147, 737.509837142, 742.685986874, 747.867770425, 753.05515623, 758.248113081, 763.446610113, 768.6506168, 773.860102953, 779.07503871, 784.295394535, 789.521141209, 794.752249826, 799.988691789, 805.230438804, 810.477462876, 815.729736304, 820.987231676, 826.249921865, 831.517780024, 836.790779582, 842.068894242, 847.35209797, 852.640365001, 857.933669826, 863.231987192}; - -static int parity( int x ); -static int max3( int a, int b, int c ); -static int max4( int a, int b, int c, int d ); -static int min3( int a, int b, int c ); -static double w6j0( int, int * ); -static double w6j1( int * ); -static double cg1( int, int, int ); -static double cg2( int, int, int, int, int, int, int, int ); -static double cg3( int, int, int, int, int, int ); -/*static double triangle( int, int, int );*/ -/* -============================================================ -*/ -double nf_amc_log_factorial( int n ) { -/* -* returns ln( n! ). -*/ - if( n > MAX_FACTORIAL ) return( INFINITY ); - if( n < 0 ) return( INFINITY ); - return nf_amc_log_fact[n]; -} -/* -============================================================ -*/ -double nf_amc_factorial( int n ) { -/* -* returns n! for pre-computed table. INFINITY is return if n is negative or too large. -*/ - return G4Exp( nf_amc_log_factorial( n ) ); -} -/* -============================================================ -*/ -double nf_amc_wigner_3j( int j1, int j2, int j3, int j4, int j5, int j6 ) { -/* -* Wigner's 3J symbol (similar to Clebsh-Gordan) -* = / j1 j2 j3 \ -* \ j4 j5 j6 / -*/ - double cg; - - if( ( j4 + j5 + j6 ) != 0 ) return( 0.0 ); - if( ( cg = nf_amc_clebsh_gordan( j1, j2, j4, j5, j3 ) ) == 0.0 ) return ( 0.0 ); - if( cg == INFINITY ) return( cg ); - return( ( ( ( j1 - j2 - j6 ) % 4 == 0 ) ? 1.0 : -1.0 ) * cg / std::sqrt( j3 + 1.0 ) ); /* BRB j3 + 1 <= 0? */ -} -/* -============================================================ -*/ -double nf_amc_wigner_6j( int j1, int j2, int j3, int j4, int j5, int j6 ) { -/* -* Wigner's 6J symbol (similar to Racah) -* = { j1 j2 j3 } -* { j4 j5 j6 } -*/ - int i, x[6]; - - x[0] = j1; x[1] = j2; x[2] = j3; x[3] = j4; x[4] = j5; x[5] = j6; - for( i = 0; i < 6; i++ ) if ( x[i] == 0 ) return( w6j0( i, x ) ); - - return( w6j1( x ) ); -} -/* -============================================================ -*/ -static double w6j0( int i, int *x ) { - - switch( i ){ - case 0: if ( ( x[1] != x[2] ) || ( x[4] != x[5] ) ) return( 0.0 ); - x[5] = x[3]; x[0] = x[1]; x[3] = x[4]; break; - case 1: if ( ( x[0] != x[2] ) || ( x[3] != x[5] ) ) return( 0.0 ); - x[5] = x[4]; break; - case 2: if ( ( x[0] != x[1] ) || ( x[3] != x[4] ) ) return( 0.0 ); - break; - //TK fix bug and add comment on 17-05-23 - //This is the case of 6.3.2 of A. R. Edmonds, Angular Momentum in Quantum Mechanics, Princeton University Press 1974. - case 3: if ( ( x[1] != x[5] ) || ( x[2] != x[4] ) ) return( 0.0 ); - x[5] = x[0]; x[0] = x[4]; x[3] = x[1]; break; - case 4: if ( ( x[0] != x[5] ) || ( x[2] != x[3] ) ) return( 0.0 ); - x[5] = x[1]; break; - case 5: if ( ( x[0] != x[4] ) || ( x[1] != x[3] ) ) return( 0.0 ); - x[5] = x[2]; break; - } - - if( ( x[5] > ( x[0] + x[3] ) ) || ( x[5] < std::abs( x[0] - x[3] ) ) ) return( 0.0 ); - if( x[0] > MAX_FACTORIAL || x[3] > MAX_FACTORIAL ) { /* BRB Why this test? Why not x[5]? */ - return( INFINITY ); - } - - return( 1.0 / std::sqrt( (double) ( ( x[0] + 1 ) * ( x[3] + 1 ) ) ) * ( ( ( x[0] + x[3] + x[5] ) / 2 ) % 2 != 0 ? -1 : 1 ) ); -} -/* -============================================================ -*/ -static double w6j1( int *x ) { - - double w6j, w; - int i, k, k1, k2, n, l1, l2, l3, l4, n1, n2, n3, m1, m2, m3, x1, x2, x3, y[4]; - static int a[3][4] = { { 0, 0, 3, 3}, - { 1, 4, 1, 4}, - { 2, 5, 5, 2} }; - - w6j = 0.0; - - for ( k = 0; k < 4; k++ ){ - x1 = x[ ( a[0][k] ) ]; - x2 = x[ ( a[1][k] ) ]; - x3 = x[ ( a[2][k] ) ]; - - n = ( x1 + x2 + x3 ) / 2; - if( n > MAX_FACTORIAL ) { - return( INFINITY ); } - else if( n < 0 ) { - return( 0.0 ); - } - - if ( ( n1 = n - x3 ) < 0 ) return( 0.0 ); - if ( ( n2 = n - x2 ) < 0 ) return( 0.0 ); - if ( ( n3 = n - x1 ) < 0 ) return( 0.0 ); - - y[k] = n + 2; - w6j += nf_amc_log_fact[n1] + nf_amc_log_fact[n2] + nf_amc_log_fact[n3] - nf_amc_log_fact[n+1]; - } - - n1 = ( x[0] + x[1] + x[3] + x[4] ) / 2; - n2 = ( x[0] + x[2] + x[3] + x[5] ) / 2; - n3 = ( x[1] + x[2] + x[4] + x[5] ) / 2; - - k1 = max4( y[0], y[1], y[2], y[3] ) - 1; - k2 = min3( n1, n2, n3 ) + 1; - - l1 = k1 - y[0] + 1; m1 = n1 - k1 + 1; - l2 = k1 - y[1] + 1; m2 = n2 - k1 + 1; - l3 = k1 - y[2] + 1; m3 = n3 - k1 + 1; - l4 = k1 - y[3] + 1; - - w6j = w = G4Exp( 0.5 * w6j + nf_amc_log_fact[k1] - nf_amc_log_fact[l1] - nf_amc_log_fact[l2] - nf_amc_log_fact[l3] - nf_amc_log_fact[l4] - - nf_amc_log_fact[m1] - nf_amc_log_fact[m2] - nf_amc_log_fact[m3] ) * ( ( k1 % 2 ) == 0 ? -1: 1 ); - if( w6j == INFINITY ) return( INFINITY ); - - if( k1 != k2 ){ - k = k2 - k1; - m1 -= k-1; m2 -= k-1; m3 -= k-1; - l1 += k ; l2 += k ; l3 += k ; l4 += k; - - for ( i = 0; i < k; i++ ) - w6j = w - w6j * ( ( k2 - i ) * ( m1 + i ) * ( m2 + i ) * ( m3 + i ) ) - / ( ( l1 - i ) * ( l2 - i ) * ( l3 - i ) * ( l4 - i ) ); - } - return( w6j ); -} -/* -============================================================ -*/ -double nf_amc_wigner_9j( int j1, int j2, int j3, int j4, int j5, int j6, int j7, int j8, int j9 ) { -/* -* Wigner's 9J symbol -* / j1 j2 j3 \ -* = | j4 j5 j6 | -* \ j7 j8 j9 / -* -*/ - int i, i0, i1; - double rac; - - i0 = max3( std::abs( j1 - j9 ), std::abs( j2 - j6 ), std::abs( j4 - j8 ) ); - i1 = min3( ( j1 + j9 ), ( j2 + j6 ), ( j4 + j8 ) ); - - rac = 0.0; - for ( i = i0; i <= i1; i += 2 ){ - rac += nf_amc_racah( j1, j4, j9, j8, j7, i ) - * nf_amc_racah( j2, j5, i, j4, j8, j6 ) - * nf_amc_racah( j9, i, j3, j2, j1, j6 ) * ( i + 1 ); - if( rac == INFINITY ) return( INFINITY ); - } - - return( ( ( (int)( ( j1 + j3 + j5 + j8 ) / 2 + j2 + j4 + j9 ) % 4 == 0 ) ? 1.0 : -1.0 ) * rac ); -} -/* -============================================================ -*/ -double nf_amc_racah( int j1, int j2, int l2, int l1, int j3, int l3 ) { -/* -* Racah coefficient definition in Edmonds (AR Edmonds, "Angular Momentum in Quantum Mechanics", Princeton (1980) is -* W(j1, j2, l2, l1 ; j3, l3) = (-1)^(j1+j2+l1+l2) * { j1 j2 j3 } -* { l1 l2 l3 } -* The call signature of W(...) appears jumbled, but hey, that's the convention. -* -* This convention is exactly that used by Blatt-Biedenharn (Rev. Mod. Phys. 24, 258 (1952)) too -*/ - - double sig; - - sig = ( ( ( j1 + j2 + l1 + l2 ) % 4 == 0 ) ? 1.0 : -1.0 ); - return sig * nf_amc_wigner_6j( j1, j2, j3, l1, l2, l3 ); -} - -/* -============================================================ -*/ -/* -static double triangle( int a, int b, int c ) { - - int j1, j2, j3, j4; - - if ( ( j1 = ( a + b - c ) / 2 ) < 0 ) return( 0.0 ); - if ( ( j2 = ( a - b + c ) / 2 ) < 0 ) return( 0.0 ); - if ( ( j3 = ( -a + b + c ) / 2 ) < 0 ) return( 0.0 ); - j4 = ( a + b + c ) / 2 + 1; - - return( std::exp( 0.5 * ( nf_amc_log_fact[j1] + nf_amc_log_fact[j2] + nf_amc_log_fact[j3] - nf_amc_log_fact[j4] ) ) ); -} -*/ -/* -============================================================ -*/ -double nf_amc_clebsh_gordan( int j1, int j2, int m1, int m2, int j3 ) { -/* -* Clebsh-Gordan coefficient -* = -* = (-)^(j1-j2+m1+m2) * std::sqrt(2*j3+1) * / j1 j2 j3 \ -* \ m1 m2 -m1-m2 / -* -* Note: Last value m3 is preset to m1+m2. Any other value will evaluate to 0.0. -*/ - - int m3, x1, x2, x3, y1, y2, y3; - double cg = 0.0; - - if ( j1 < 0 || j2 < 0 || j3 < 0) return( 0.0 ); - if ( j1 + j2 + j3 > 2 * MAX_FACTORIAL ) return( INFINITY ); - - m3 = m1 + m2; - - if ( ( x1 = ( j1 + m1 ) / 2 + 1 ) <= 0 ) return( 0.0 ); - if ( ( x2 = ( j2 + m2 ) / 2 + 1 ) <= 0 ) return( 0.0 ); - if ( ( x3 = ( j3 - m3 ) / 2 + 1 ) <= 0 ) return( 0.0 ); - - if ( ( y1 = x1 - m1 ) <= 0 ) return( 0.0 ); - if ( ( y2 = x2 - m2 ) <= 0 ) return( 0.0 ); - if ( ( y3 = x3 + m3 ) <= 0 ) return( 0.0 ); - - if ( j3 == 0 ){ - if ( j1 == j2 ) cg = ( 1.0 / std::sqrt( (double)j1 + 1.0 ) * ( ( y1 % 2 == 0 ) ? -1:1 ) ); - } - else if ( (j1 == 0 || j2 == 0 ) ){ - if ( ( j1 + j2 ) == j3 ) cg = 1.0; - } - else { - if( m3 == 0 && std::abs( m1 ) <= 1 ){ - if( m1 == 0 ) cg = cg1( x1, x2, x3 ); - else cg = cg2( x1 + y1 - y2, x3 - 1, x1 + x2 - 2, x1 - y2, j1, j2, j3, m2 ); - } - else if ( m2 == 0 && std::abs( m1 ) <=1 ){ - cg = cg2( x1 - y2 + y3, x2 - 1, x1 + x3 - 2, x3 - y1, j1, j3, j3, m1 ); - } - else if ( m1 == 0 && std::abs( m3 ) <= 1 ){ - cg = cg2( x1, x1 - 1, x2 + x3 - 2, x2 - y3, j2, j3, j3, -m3 ); - } - else cg = cg3( x1, x2, x3, y1, y2, y3 ); - } - - return( cg ); -} -/* -============================================================ -*/ -static double cg1( int x1, int x2, int x3 ) { - - int p1, p2, p3, p4, q1, q2, q3, q4; - double a; - - p1 = x1 + x2 + x3 - 1; if ( ( p1 % 2 ) != 0 ) return( 0.0 ); - p2 = x1 + x2 - x3; - p3 =-x1 + x2 + x3; - p4 = x1 - x2 + x3; - if ( p2 <= 0 || p3 <= 0 || p4 <= 0 ) return( 0.0 ); - if ( p1 >= MAX_FACTORIAL ) return( INFINITY ); - - q1 = ( p1 + 1 ) / 2 - 1; p1--; - q2 = ( p2 + 1 ) / 2 - 1; p2--; - q3 = ( p3 + 1 ) / 2 - 1; p3--; - q4 = ( p4 + 1 ) / 2 - 1; p4--; - - a = nf_amc_log_fact[q1]-( nf_amc_log_fact[q2] + nf_amc_log_fact[q3] + nf_amc_log_fact[q4] ) - + 0.5 * ( nf_amc_log_fact[ 2 * x3 - 1 ] - nf_amc_log_fact[ 2 * x3 - 2 ] - + nf_amc_log_fact[p2] + nf_amc_log_fact[p3] + nf_amc_log_fact[p4] - nf_amc_log_fact[p1] ); - - return( ( ( ( q1 + x1 - x2 ) % 2 == 0 ) ? 1.0 : -1.0 ) * G4Exp( a ) ); -} -/* -============================================================ -*/ -static double cg2( int k, int q0, int z1, int z2, int w1, int w2, int w3, int mm ) { - - int q1, q2, q3, q4, p1, p2, p3, p4; - double a; - - p1 = z1 + q0 + 2; - p2 = z1 - q0 + 1; - p3 = z2 + q0 + 1; - p4 = -z2 + q0 + 1; - if ( p2 <= 0 || p3 <= 0 || p4 <= 0) return( 0.0 ); - if ( p1 >= MAX_FACTORIAL ) return( INFINITY ); - - q1 = ( p1 + 1 ) / 2 - 1; p1--; - q2 = ( p2 + 1 ) / 2 - 1; p2--; - q3 = ( p3 + 1 ) / 2 - 1; p3--; - q4 = ( p4 + 1 ) / 2 - 1; p4--; - - a = nf_amc_log_fact[q1] - ( nf_amc_log_fact[ q2 ] + nf_amc_log_fact[ q3 ] + nf_amc_log_fact[ q4 ] ) - + 0.5 * ( nf_amc_log_fact[ w3 + 1 ] - nf_amc_log_fact[ w3 ] - + nf_amc_log_fact[ w1 ] - nf_amc_log_fact[ w1 + 1 ] - + nf_amc_log_fact[ w2 ] - nf_amc_log_fact[ w2 + 1 ] - + nf_amc_log_fact[ p2 ] + nf_amc_log_fact[ p3 ] + nf_amc_log_fact[ p4 ] - nf_amc_log_fact[ p1 ] ); - - return( ( ( ( q4 + k + ( mm > 0 ) * ( p1 + 2 ) ) % 2 == 0 ) ? -1.0 : 1.0 ) * 2.0 * G4Exp( a ) ); -} -/* -============================================================ -*/ -static double cg3( int x1, int x2, int x3, int y1, int y2, int y3 ) { - - int nx, i, k1, k2, q1, q2, q3, q4, p1, p2, p3, z1, z2, z3; - double a, cg; - - nx = x1 + x2 + x3 - 1; - if ( ( z1 = nx - x1 - y1 ) < 0 ) return( 0.0 ); - if ( ( z2 = nx - x2 - y2 ) < 0 ) return( 0.0 ); - if ( ( z3 = nx - x3 - y3 ) < 0 ) return( 0.0 ); - - k1 = x2 - y3; - k2 = y1 - x3; - - q1 = max3( k1, k2, 0 ); - q2 = min3( y1, x2, z3 + 1 ) - 1; - q3 = q1 - k1; - q4 = q1 - k2; - - p1 = y1 - q1 - 1; - p2 = x2 - q1 - 1; - p3 = z3 - q1; - - a = cg = G4Exp( 0.5 * ( nf_amc_log_fact[ x3 + y3 - 1 ] - nf_amc_log_fact[ x3 + y3 - 2 ] - nf_amc_log_fact[ nx - 1 ] - + nf_amc_log_fact[ z1 ] + nf_amc_log_fact[ z2 ] + nf_amc_log_fact[ z3 ] - + nf_amc_log_fact[ x1 - 1 ] + nf_amc_log_fact[ x2 - 1 ] + nf_amc_log_fact[ x3 - 1 ] - + nf_amc_log_fact[ y1 - 1 ] + nf_amc_log_fact[ y2 - 1 ] + nf_amc_log_fact[ y3 - 1 ] ) - - nf_amc_log_fact[ p1 ] - nf_amc_log_fact[ p2 ] - nf_amc_log_fact[ p3 ] - - nf_amc_log_fact[ q1 ] - nf_amc_log_fact[ q3 ] - nf_amc_log_fact[ q4 ] ) * ( ( ( q1 % 2 ) == 0 ) ? 1 : -1 ); - if( cg == INFINITY ) return( INFINITY ); - - if ( q1 != q2 ){ - q3 = q2 - k1; - q4 = q2 - k2; - p1 = y1 - q2; - p2 = x2 - q2; - p3 = z3 - q2 + 1; - for( i = 0; i < ( q2 - q1 ); i++ ) - cg = a - cg * ( ( p1 + i ) * ( p2 + i ) * ( p3 + i ) ) / ( ( q2 - i ) * ( q3 - i ) * ( q4 - i ) ); - } - return( cg ); -} -/* -============================================================ -*/ -double nf_amc_z_coefficient( int l1, int j1, int l2, int j2, int s, int ll ) { -/* -* Biedenharn's Z-coefficient coefficient -* = Z(l1 j1 l2 j2 | S L ) -*/ - double z, clebsh_gordan = nf_amc_clebsh_gordan( l1, l2, 0, 0, ll ), racah = nf_amc_racah( l1, j1, l2, j2, s, ll ); - - if( ( clebsh_gordan == INFINITY ) || ( racah == INFINITY ) ) return( INFINITY ); - z = ( ( ( -l1 + l2 + ll ) % 8 == 0 ) ? 1.0 : -1.0 ) - * std::sqrt( l1 + 1.0 ) * std::sqrt( l2 + 1.0 ) * std::sqrt( j1 + 1.0 ) * std::sqrt( j2 + 1.0 ) * clebsh_gordan * racah; - - return( z ); -} -/* -============================================================ -*/ -double nf_amc_zbar_coefficient( int l1, int j1, int l2, int j2, int s, int ll ) { -/* -* Lane & Thomas's Zbar-coefficient coefficient -* = Zbar(l1 j1 l2 j2 | S L ) -* = (-i)^( -l1 + l2 + ll ) * Z(l1 j1 l2 j2 | S L ) -* -* Lane & Thomas Rev. Mod. Phys. 30, 257-353 (1958). -* Note, Lane & Thomas define this because they did not like the different phase convention in Blatt & Biedenharn's Z coefficient. They changed it to get better time-reversal behavior. -* Froehner uses Lane & Thomas convention as does T. Kawano. -*/ - double zbar, clebsh_gordan = nf_amc_clebsh_gordan( l1, l2, 0, 0, ll ), racah = nf_amc_racah( l1, j1, l2, j2, s, ll ); - - if( ( clebsh_gordan == INFINITY ) || ( racah == INFINITY ) ) return( INFINITY ); - zbar = std::sqrt( l1 + 1.0 ) * std::sqrt( l2 + 1.0 ) * std::sqrt( j1 + 1.0 ) * std::sqrt( j2 + 1.0 ) * clebsh_gordan * racah; - - return( zbar ); -} -/* -============================================================ -*/ -double nf_amc_reduced_matrix_element( int lt, int st, int jt, int l0, int j0, int l1, int j1 ) { -/* -* Reduced Matrix Element for Tensor Operator -* = < l1j1 || T(YL,sigma_S)J || l0j0 > -* -* M.B.Johnson, L.W.Owen, G.R.Satchler -* Phys. Rev. 142, 748 (1966) -* Note: definition differs from JOS by the factor sqrt(2j1+1) -*/ - int llt; - double x1, x2, x3, reduced_mat, clebsh_gordan; - - if ( parity( lt ) != parity( l0 ) * parity( l1 ) ) return( 0.0 ); - if ( std::abs( l0 - l1 ) > lt || ( l0 + l1 ) < lt ) return( 0.0 ); - if ( std::abs( ( j0 - j1 ) / 2 ) > jt || ( ( j0 + j1 ) / 2 ) < jt ) return( 0.0 ); - - llt = 2 * lt; - jt *= 2; - st *= 2; - - if( ( clebsh_gordan = nf_amc_clebsh_gordan( j1, j0, 1, -1, jt ) ) == INFINITY ) return( INFINITY ); - - reduced_mat = 1.0 / std::sqrt( 4 * M_PI ) * clebsh_gordan / std::sqrt( jt + 1.0 ) /* BRB jt + 1 <= 0? */ - * std::sqrt( ( j0 + 1.0 ) * ( j1 + 1.0 ) * ( llt + 1.0 ) ) - * parity( ( j1 - j0 ) / 2 ) * parity( ( -l0 + l1 + lt ) / 2 ) * parity( ( j0 - 1 ) / 2 ); - - if( st == 2 ){ - x1 = ( l0 - j0 / 2.0 ) * ( j0 + 1.0 ); - x2 = ( l1 - j1 / 2.0 ) * ( j1 + 1.0 ); - if ( jt == llt ){ - x3 = ( lt == 0 ) ? 0 : ( x1 - x2 ) / std::sqrt( lt * ( lt + 1.0 ) ); - } - else if ( jt == ( llt - st ) ){ - x3 = ( lt == 0 ) ? 0 : -( lt + x1 + x2 ) / std::sqrt( lt * ( 2.0 * lt + 1.0 ) ); - } - else if ( jt == ( llt + st ) ){ - x3 = ( lt + 1 - x1 - x2 ) / std::sqrt( ( 2.0 * lt + 1.0 ) * ( lt + 1.0 ) ); - } - else{ - x3 = 1.0; - } - } - else x3 = 1.0; - reduced_mat *= x3; - - return( reduced_mat ); -} -/* -============================================================ -*/ -static int parity( int x ) { - - return( ( ( x / 2 ) % 2 == 0 ) ? 1 : -1 ); -} -/* -============================================================ -*/ -static int max3( int a, int b, int c ) { - - if( a < b ) a = b; - if( a < c ) a = c; - return( a ); -} -/* -============================================================ -*/ -static int max4( int a, int b, int c, int d ) { - - if( a < b ) a = b; - if( a < c ) a = c; - if( a < d ) a = d; - return( a ); -} -/* -============================================================ -*/ -static int min3( int a, int b, int c ) { - - if( a > b ) a = b; - if( a > c ) a = c; - return( a ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_exponentialIntegral.cc b/source/processes/hadronic/models/lend/src/nf_exponentialIntegral.cc deleted file mode 100644 index b5b2b1f919..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_exponentialIntegral.cc +++ /dev/null @@ -1,84 +0,0 @@ -/********************************************************************* - Returns the exponential integral function - - E_n(x) = int_1^infinity e^( -x * t ) / t^n dt, for x > 0. - - C.A. Bertulani May/15/2000 -*********************************************************************/ - -#include "nf_specialFunctions.h" - -#if defined __cplusplus -#include -#include "G4Exp.hh" -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -using namespace std; -#endif - -#define EULER 0.57721566490153286 /* Euler's constant gamma */ -#define MAXIT 100 /* Maximum allowed number of iterations. */ -#define FPMIN 1.0e-300 /* close to the smallest representable floting-point number. */ -#define EPS 1.0e-15 /* Desired relative error, not smaller than the machine precision. */ - -/* -************************************************************ -*/ -double nf_exponentialIntegral( int n, double x, nfu_status *status ) { - - int i, ii, nm1; - double a, b, c, d, del, fact, h, psi; - double ans = 0.0; - - *status = nfu_badInput; - if( !isfinite( x ) ) return( x ); - *status = nfu_Okay; - - nm1 = n - 1; - if( ( n < 0 ) || ( x < 0.0 ) || ( ( x == 0.0 ) && ( ( n == 0 ) || ( n == 1 ) ) ) ) { - *status = nfu_badInput; } - else { - if( n == 0 ) { - ans = G4Exp( -x ) / x; } /* Special case */ - else if( x == 0.0 ) { - ans = 1.0 / nm1; } /* Another special case */ - else if( x > 1.0 ) { /* Lentz's algorithm */ - b = x + n; - c = 1.0 / FPMIN; - d = 1.0 / b; - h = d; - for( i = 1; i <= MAXIT; i++ ) { - a = -i * ( nm1 + i ); - b += 2.0; - d = 1.0 / ( a * d + b ); /* Denominators cannot be zero */ - c = b + a / c; - del = c * d; - h *= del; - if( fabs( del - 1.0 ) < EPS ) return( h * G4Exp( -x ) ); - } - *status = nfu_failedToConverge; } - else { - ans = ( nm1 != 0 ) ? 1.0 / nm1 : -G4Log(x) - EULER; /* Set first term */ - fact = 1.0; - for( i = 1; i <= MAXIT; i++ ) { - fact *= -x / i; - if( i != nm1 ) { - del = -fact / ( i - nm1 ); } - else { - psi = -EULER; /* Compute psi(n) */ - for( ii = 1; ii <= nm1; ii++ ) psi += 1.0 / ii; - del = fact * ( -G4Log( x ) + psi ); - } - ans += del; - if( fabs( del ) < fabs( ans ) * EPS ) return( ans ); - } - *status = nfu_failedToConverge; - } - } - return( ans ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_gammaFunctions.cc b/source/processes/hadronic/models/lend/src/nf_gammaFunctions.cc deleted file mode 100644 index 403a5a88d8..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_gammaFunctions.cc +++ /dev/null @@ -1,294 +0,0 @@ -/* gamma.c - * - * Gamma function - * - * DESCRIPTION: - * - * Returns gamma function of the argument. The result is - * correctly signed, and the sign (+1 or -1) is also - * returned in a global (extern) variable named sgngam. - * This variable is also filled in by the logarithmic gamma - * function lgam(). - * - * Arguments |x| <= 34 are reduced by recurrence and the function - * approximated by a rational function of degree 6/7 in the - * interval (2,3). Large arguments are handled by Stirling's - * formula. Large negative arguments are made positive using - * a reflection formula. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -170,-33 20000 2.3e-15 3.3e-16 - * IEEE -33, 33 20000 9.4e-16 2.2e-16 - * IEEE 33, 171.6 20000 2.3e-15 3.2e-16 - * - * Error for arguments outside the test range will be larger - * owing to error amplification by the exponential function. - * - */ -/* lgam() - * - * Natural logarithm of gamma function - * - * - * DESCRIPTION: - * - * Returns the base e (2.718...) logarithm of the absolute - * value of the gamma function of the argument. - * The sign (+1 or -1) of the gamma function is returned in a - * global (extern) variable named sgngam. - * - * For arguments greater than 13, the logarithm of the gamma - * function is approximated by the logarithmic version of - * Stirling's formula using a polynomial approximation of - * degree 4. Arguments between -33 and +33 are reduced by - * recurrence to the interval [2,3] of a rational approximation. - * The cosecant reflection formula is employed for arguments - * less than -33. - * - * Arguments greater than MAXLGM return DBL_MAX and an error - * message. MAXLGM = 2.556348e305 for IEEE arithmetic. - * - * - * ACCURACY: - * - * arithmetic domain # trials peak rms - * IEEE 0, 3 28000 5.4e-16 1.1e-16 - * IEEE 2.718, 2.556e305 40000 3.5e-16 8.3e-17 - * The error criterion was relative when the function magnitude - * was greater than one but absolute when it was less than one. - * - * The following test used the relative error criterion, though - * at certain points the relative error could be much higher than - * indicated. - * IEEE -200, -4 10000 4.8e-16 1.3e-16 - * - */ -/* gamma.c */ -/* gamma function */ - -/* -Cephes Math Library Release 2.8: June, 2000 -Copyright 1984, 1987, 1989, 1992, 2000 by Stephen L. Moshier -*/ - -#include "nf_specialFunctions.h" - -#if defined __cplusplus -#include "G4Exp.hh" -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -using namespace std; -#endif - -static double P[] = { 1.60119522476751861407E-4, 1.19135147006586384913E-3, 1.04213797561761569935E-2, 4.76367800457137231464E-2, - 2.07448227648435975150E-1, 4.94214826801497100753E-1, 9.99999999999999996796E-1 }; -static double Q[] = { -2.31581873324120129819E-5, 5.39605580493303397842E-4, -4.45641913851797240494E-3, 1.18139785222060435552E-2, - 3.58236398605498653373E-2, -2.34591795718243348568E-1, 7.14304917030273074085E-2, 1.00000000000000000320E0 }; -#define MAXGAM 171.624376956302725 -static double LOGPI = 1.14472988584940017414; -static double SQTPI = 2.50662827463100050242E0; - -/* Stirling's formula for the gamma function */ -static double STIR[5] = { 7.873113957930936284e-4, -2.2954996161337812638e-4, -2.6813261780578123283e-3, 3.472222216054586673e-3, 8.3333333333348225713e-2 }; -#define MAXSTIR 143.01608 - -static double stirf( double x, nfu_status *status ); -static double lgam( double x, int *sgngam, nfu_status *status ); -/* -************************************************************ -*/ -static double stirf( double x, nfu_status * /*status*/ ) { -/* Gamma function computed by Stirling's formula. The polynomial STIR is valid for 33 <= x <= 172. */ - - double y, w, v; - - w = 1.0 / x; - w = 1.0 + w * nf_polevl( w, STIR, 4 ); - y = G4Exp( x ); - if( x > MAXSTIR ) { /* Avoid overflow in pow() */ - v = G4Pow::GetInstance()->powA( x, 0.5 * x - 0.25 ); - y = v * (v / y); } - else { - y = G4Pow::GetInstance()->powA( x, x - 0.5 ) / y; - } - y = SQTPI * y * w; - return( y ); -} -/* -************************************************************ -*/ -double nf_gammaFunction( double x, nfu_status *status ) { - - double p, q, z; - int i, sgngam = 1; - - *status = nfu_badInput; - if( !isfinite( x ) ) return( x ); - *status = nfu_Okay; - - q = fabs( x ); - - if( q > 33.0 ) { - if( x < 0.0 ) { - p = floor( q ); - if( p == q ) goto goverf; - i = (int) p; - if( ( i & 1 ) == 0 ) sgngam = -1; - z = q - p; - if( z > 0.5 ) { - p += 1.0; - z = q - p; - } - z = q * sin( M_PI * z ); - if( z == 0.0 ) goto goverf; - z = M_PI / ( fabs( z ) * stirf( q, status ) ); - } - else { - z = stirf( x, status ); - } - return( sgngam * z ); - } - - z = 1.0; - while( x >= 3.0 ) { - x -= 1.0; - z *= x; - } // Loop checking, 11.06.2015, T. Koi - - while( x < 0.0 ) { - if( x > -1.E-9 ) goto small; - z /= x; - x += 1.0; - } // Loop checking, 11.06.2015, T. Koi - - while( x < 2.0 ) { - if( x < 1.e-9 ) goto small; - z /= x; - x += 1.0; - } // Loop checking, 11.06.2015, T. Koi - - if( x == 2.0 ) return( z ); - - x -= 2.0; - p = nf_polevl( x, P, 6 ); - q = nf_polevl( x, Q, 7 ); - return( z * p / q ); - -small: - if( x == 0.0 ) goto goverf; - return( z / ( ( 1.0 + 0.5772156649015329 * x ) * x ) ); - -goverf: - return( sgngam * DBL_MAX ); -} - -/* A[]: Stirling's formula expansion of log gamma -* B[], C[]: log gamma function between 2 and 3 -*/ -static double A[] = { 8.11614167470508450300E-4, -5.95061904284301438324E-4, 7.93650340457716943945E-4, - -2.77777777730099687205E-3, 8.33333333333331927722E-2 }; -static double B[] = { -1.37825152569120859100E3, -3.88016315134637840924E4, -3.31612992738871184744E5, - -1.16237097492762307383E6, -1.72173700820839662146E6, -8.53555664245765465627E5 }; -static double C[] = { -3.51815701436523470549E2, -1.70642106651881159223E4, -2.20528590553854454839E5, - -1.13933444367982507207E6, -2.53252307177582951285E6, -2.01889141433532773231E6 }; -static double LS2PI = 0.91893853320467274178; /* log( sqrt( 2*pi ) ) */ -#define MAXLGM 2.556348e305 - -/* -************************************************************ -*/ -double nf_logGammaFunction( double x, nfu_status *status ) { -/* Logarithm of gamma function */ - - int sgngam; - - *status = nfu_badInput; - if( !isfinite( x ) ) return( x ); - *status = nfu_Okay; - return( lgam( x, &sgngam, status ) ); -} -/* -************************************************************ -*/ -static double lgam( double x, int *sgngam, nfu_status *status ) { - - double p, q, u, w, z; - int i; - - *sgngam = 1; - - if( x < -34.0 ) { - q = -x; - w = lgam( q, sgngam, status ); /* note this modifies *sgngam! */ - p = floor( q ); - if( p == q ) goto lgsing; - i = (int) p; - if( ( i & 1 ) == 0 ) { - *sgngam = -1; } - else { - *sgngam = 1; - } - z = q - p; - if( z > 0.5 ) { - p += 1.0; - z = p - q; - } - z = q * sin( M_PI * z ); - if( z == 0.0 ) goto lgsing; - z = LOGPI - G4Log( z ) - w; - return( z ); - } - - if( x < 13.0 ) { - z = 1.0; - p = 0.0; - u = x; - while( u >= 3.0 ) { - p -= 1.0; - u = x + p; - z *= u; - } // Loop checking, 11.06.2015, T. Koi - while( u < 2.0 ) { - if( u == 0.0 ) goto lgsing; - z /= u; - p += 1.0; - u = x + p; - } // Loop checking, 11.06.2015, T. Koi - if( z < 0.0 ) { - *sgngam = -1; - z = -z; } - else { - *sgngam = 1; - } - if( u == 2.0 ) return( G4Log( z ) ); - p -= 2.0; - x = x + p; - p = x * nf_polevl( x, B, 5 ) / nf_p1evl( x, C, 6); - return( G4Log( z ) + p ); - } - - if( x > MAXLGM ) goto lgsing; - q = ( x - 0.5 ) * G4Log( x ) - x + LS2PI; - if( x > 1.0e8 ) return( q ); - - p = 1.0 / ( x * x ); - if( x >= 1000.0 ) { - q += ( ( 7.9365079365079365079365e-4 * p - 2.7777777777777777777778e-3 ) * p + 0.0833333333333333333333 ) / x; } - else { - q += nf_polevl( p, A, 4 ) / x; - } - return( q ); - -lgsing: - return( *sgngam * DBL_MAX ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_incompleteGammaFunctions.cc b/source/processes/hadronic/models/lend/src/nf_incompleteGammaFunctions.cc deleted file mode 100644 index f840138195..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_incompleteGammaFunctions.cc +++ /dev/null @@ -1,190 +0,0 @@ -/* igam.c - * - * Incomplete gamma integral - * - * - * DESCRIPTION: - * - * The function is defined by - * - * x - * - - * | | -t a-1 - * igam(a,x) = | e t dt. - * | | - * - - * 0 - * - * - * In this implementation both arguments must be positive. - * The integral is evaluated by either a power series or - * continued fraction expansion, depending on the relative - * values of a and x. - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0,30 200000 3.6e-14 2.9e-15 - * IEEE 0,100 300000 9.9e-14 1.5e-14 - */ -/* igamc() - * - * Complemented incomplete gamma integral - * - * - * DESCRIPTION: - * - * The function is defined by - * - * - * igamc(a,x) = 1 - igam(a,x) - * - * inf. - * - - * | | -t a-1 - * = | e t dt. - * | | - * - - * x - * - * - * In this implementation both arguments must be positive. - * The integral is evaluated by either a power series or - * continued fraction expansion, depending on the relative - * values of a and x. - * - * ACCURACY: - * - * Tested at random a, x. - * a x Relative error: - * arithmetic domain domain # trials peak rms - * IEEE 0.5,100 0,100 200000 1.9e-14 1.7e-15 - * IEEE 0.01,0.5 0,100 200000 1.4e-13 1.6e-15 - */ - -/* -Cephes Math Library Release 2.8: June, 2000 -Copyright 1985, 1987, 2000 by Stephen L. Moshier -*/ - -#include "nf_specialFunctions.h" - -#if defined __cplusplus -#include -#include "G4Exp.hh" -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -using namespace std; -#endif - -static double big = 4.503599627370496e15; -static double biginv = 2.22044604925031308085e-16; - -/* -************************************************************ -*/ -double nf_incompleteGammaFunctionComplementary( double a, double x, nfu_status *status ) { - - double ans, ax, c, yc, r, t, y, z; - double pk, pkm1, pkm2, qk, qkm1, qkm2; - - *status = nfu_badInput; - if( !isfinite( x ) ) return( x ); - *status = nfu_Okay; - - if( ( x <= 0 ) || ( a <= 0 ) ) return( 1.0 ); - if( ( x < 1.0 ) || ( x < a ) ) return( nf_gammaFunction( a, status ) - nf_incompleteGammaFunction( a, x, status ) ); - - ax = G4Exp( a * G4Log( x ) - x ); - if( ax == 0. ) return( 0.0 ); - - if( x < 10000. ) { - y = 1.0 - a; /* continued fraction */ - z = x + y + 1.0; - c = 0.0; - pkm2 = 1.0; - qkm2 = x; - pkm1 = x + 1.0; - qkm1 = z * x; - ans = pkm1 / qkm1; - - do { - c += 1.0; - y += 1.0; - z += 2.0; - yc = y * c; - pk = pkm1 * z - pkm2 * yc; - qk = qkm1 * z - qkm2 * yc; - if( qk != 0 ) { - r = pk / qk; - t = fabs( ( ans - r ) / r ); - ans = r; } - else { - t = 1.0; - } - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - if( fabs( pk ) > big ) { - pkm2 *= biginv; - pkm1 *= biginv; - qkm2 *= biginv; - qkm1 *= biginv; - } - } while( t > DBL_EPSILON ); } // Loop checking, 11.06.2015, T. Koi - else { /* Asymptotic expansion. */ - y = 1. / x; - r = a; - c = 1.; - ans = 1.; - do { - a -= 1.; - c *= a * y; - ans += c; - } while( fabs( c ) > 100 * ans * DBL_EPSILON ); // Loop checking, 11.06.2015, T. Koi - } - - return( ans * ax ); -} -/* -************************************************************ -*/ -double nf_incompleteGammaFunction( double a, double x, nfu_status *status ) { -/* left tail of incomplete gamma function: -* -* inf. k -* a -x - x -* x e > ---------- -* - - -* k=0 | (a+k+1) -*/ - double ans, ax, c, r; - - *status = nfu_badInput; - if( !isfinite( x ) ) return( x ); - *status = nfu_Okay; - - if( ( x <= 0 ) || ( a <= 0 ) ) return( 0.0 ); - if( ( x > 1.0 ) && ( x > a ) ) return( nf_gammaFunction( a, status ) - nf_incompleteGammaFunctionComplementary( a, x, status ) ); - - ax = G4Exp( a * G4Log( x ) - x ); /* Compute x**a * exp(-x) */ - if( ax == 0. ) return( 0.0 ); - - r = a; /* power series */ - c = 1.0; - ans = 1.0; - do { - r += 1.0; - c *= x / r; - ans += c; - } while( c > ans * DBL_EPSILON ); // Loop checking, 11.06.2015, T. Koi - - return( ans * ax / a ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_polevl.cc b/source/processes/hadronic/models/lend/src/nf_polevl.cc deleted file mode 100644 index f02338f5e9..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_polevl.cc +++ /dev/null @@ -1,86 +0,0 @@ -/* polevl.c - * p1evl.c - * - * Evaluate polynomial - * - * - * SYNOPSIS: - * - * int N; - * double x, y, coef[N+1], nf_polevl[]; - * - * y = nf_polevl( x, coef, N ); - * - * - * DESCRIPTION: - * - * Evaluates polynomial of degree N: - * - * 2 N - * y = C + C x + C x +...+ C x - * 0 1 2 N - * - * Coefficients are stored in reverse order: - * - * coef[0] = C , ..., coef[N] = C . - * N 0 - * - * The function p1evl() assumes that coef[N] = 1.0 and is - * omitted from the array. Its calling arguments are - * otherwise the same as nf_polevl(). - * - */ - -/* -Cephes Math Library Release 2.1: December, 1988 -Copyright 1984, 1987, 1988 by Stephen L. Moshier -Direct inquiries to 30 Frost Street, Cambridge, MA 02140 -*/ -#include "nf_specialFunctions.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -double nf_polevl( double x, double coef[], int N ) { - - double ans; - int i; - double *p; - - p = coef; - ans = *p++; - i = N; - - do { - ans = ans * x + *p++; } - while( --i ); // Loop checking, 11.06.2015, T. Koi - - return( ans ); -} - -/* -************************************************************ -*/ -/* Evaluate polynomial when coefficient of x^N is 1.0. Otherwise same as polevl. */ -double nf_p1evl( double x, double coef[], int N ) { - - double ans; - double *p; - int i; - - p = coef; - ans = x + *p++; - i = N-1; - - do { - ans = ans * x + *p++; } - while( --i ); // Loop checking, 11.06.2015, T. Koi - - return( ans ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_stringToDoubles.c b/source/processes/hadronic/models/lend/src/nf_stringToDoubles.c new file mode 100644 index 0000000000..1fca23d6fc --- /dev/null +++ b/source/processes/hadronic/models/lend/src/nf_stringToDoubles.c @@ -0,0 +1,247 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "nf_utilities.h" + +#ifdef _WIN32 +#include +#endif + +#define numberOfStaticDoubles ( 100 * 1000 ) + +static double *nfu_stringToListOfDoubles2( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter, int useSystem_strtod ); +/* +======================================================================== +*/ +double *nfu_stringToListOfDoubles( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter, int useSystem_strtod ) { + + if( strchr( "0123456789.+-eE", sep ) != NULL ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "Invalid sep ='%c'.", sep ); + return( NULL ); + } + + *numberConverted = 0; + *endCharacter = (char *) str; + if( isspace( sep ) ) sep = ' '; /* Make it the space character if any white space as it simplifies logic below. */ + return( nfu_stringToListOfDoubles2( smr, str, sep, numberConverted, endCharacter, useSystem_strtod ) ); +} +/* +======================================================================== +*/ +static double *nfu_stringToListOfDoubles2( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter, int useSystem_strtod ) { + + int64_t i1, i2, numberConverted_initial = *numberConverted; + double *doublePtr = NULL; + nfu_status status = nfu_Okay; + double (*_strtod)( char const *str, char **endCharacter ); + +#if NFU_USEHEAP + double *staticDoubles = (double *) smr_malloc2( smr, (size_t) numberOfStaticDoubles * sizeof( double ), 0, "staticDoubles" ); + if( staticDoubles == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } +#else + double staticDoubles[numberOfStaticDoubles]; +#endif + + _strtod = useSystem_strtod ? strtod : nf_strtod; + + for( i1 = 0; i1 < numberOfStaticDoubles; i1++, (*numberConverted)++ ) { + if( *numberConverted == 0 ) { + staticDoubles[i1] = _strtod( str, endCharacter ); } + else { /* Check that there is one sep character and allow for arbitrary number of white spaces. */ + char const *str2 = str; + + while( isspace( *str2 ) ) ++str2; /* Only need to check for white spaces before sep character as strtod will ignore after. */ + if( sep != ' ' ) { + if( *str2 == sep ) { + ++str2; } + else { + str2 = str; + } + } + if( str < str2 ) staticDoubles[i1] = _strtod( str2, endCharacter ); + if( str2 == (char const *) *endCharacter ) *endCharacter = (char *) str; + } + if( str == (char const *) *endCharacter ) { + int64_t number = *numberConverted; + if( *numberConverted == 0 ) number = 1; + if( ( doublePtr = (double *) smr_malloc2( smr, (size_t) number * sizeof( double ), 0, "doublePtr" ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); +#if NFU_USEHEAP + free( staticDoubles ); +#endif + return( NULL ); + } + break; + } + str = (char const *) *endCharacter; + } + + if( ( status == nfu_Okay ) && ( doublePtr == NULL ) ) + doublePtr = nfu_stringToListOfDoubles2( smr, str, sep, numberConverted, endCharacter, useSystem_strtod ); + if( doublePtr != NULL ) { + double *doublePtr2 = &(doublePtr[numberConverted_initial]); + char *end = *endCharacter; + + for( i2 = 0; i2 < i1; i2++, doublePtr2++ ) *doublePtr2 = staticDoubles[i2]; + while( isspace( *end ) ) ++end; + if( *end == 0 ) *endCharacter = end; + } + +#if NFU_USEHEAP + free( staticDoubles ); +#endif + return( doublePtr ); +} + +#define valid_digit( c ) ( ( c ) >= '0' && ( c ) <= '9') +/* +============================================================ +*/ +double nf_strtod( char const *str, char **endCharacter ) { + + *endCharacter = (char *) str; + char *ptr = *endCharacter; + + while( isspace( *ptr ) ) ++ptr; /* Skip leading white space, if any. */ + + double sign = 1.0; /* Get sign, if any. */ + if( *ptr == '-' ) { + sign = -1.0; + ++ptr; } + else if( *ptr == '+' ) { + ++ptr; + } + + double value = 0.0; /* Get digits before decimal point or exponent, if any. */ + for( ; valid_digit( *ptr ); ++ptr ) value = value * 10.0 + ( *ptr - '0' ); + + if( *ptr == '.' ) { /* Get digits after decimal point, if any. */ + double invPow10 = 0.1; + ++ptr; + while( valid_digit( *ptr ) ) { + value += ( *ptr - '0' ) * invPow10; + invPow10 *= 0.1; + ++ptr; + } + } + + if( ( *ptr == 'e' ) || ( *ptr == 'E' ) ) { /* Handle exponent, if any. */ + int negativeExponent = 0; + + ++ptr; /* Get sign of exponent, if any. */ + if( *ptr == '-' ) { + negativeExponent = 1; + ++ptr; } + else if( *ptr == '+' ) { + ++ptr; + } + + unsigned int exponent = 0; /* Get digits of exponent. There must be at least 1. */ + for( ; valid_digit( *ptr ); ++ptr ) exponent = exponent * 10 + ( *ptr - '0' ); + if( exponent > 308 ) { + return( strtod( str, endCharacter ) ); + } + + double scale = 1.0; /* Calculate scaling factor. */ + if( exponent == 0 ) negativeExponent = 0; + while( exponent >= 50 ) { scale *= 1E50; exponent -= 50; } + while( exponent >= 8 ) { scale *= 1E8; exponent -= 8; } + while( exponent > 0 ) { scale *= 10.0; exponent -= 1; } + + if( negativeExponent ) scale = 1.0 / scale; + value *= scale; + } + + *endCharacter = ptr; + return( sign * value ); +} +/* +============================================================ +*/ +char *nf_floatToShortestString( double value, int significantDigits, int favorEFormBy, int flags ) { + + int n1, ne, nf, digitsRightOfPeriod_f, exponent; + char Str_e[512], Str_f[512], *Str_r = Str_e, Fmt[32], *e1, *e2; + const char *sign = ""; + + if( flags & nf_floatToShortestString_includeSign ) sign = "+"; + + if( !isfinite( value ) ) { + sprintf( Fmt, "%%%sf", sign ); + sprintf( Str_e, Fmt, value ); + return( strdup( Str_e ) ); + } + + significantDigits--; + if( significantDigits < 0 ) significantDigits = 0; + if( significantDigits > 24 ) significantDigits = 24; + + sprintf( Fmt, "%%%s.%de", sign, significantDigits ); + sprintf( Str_e, Fmt, value ); + + e1 = strchr( Str_e, 'e' ); + if( significantDigits == 0 ) { + if( *(e1 - 1) != '.' ) { + char *e3; + + e2 = strchr( e1, 0 ); + e3 = e2 + 1; + for( ; e2 != e1; e2--, e3-- ) *e3 = *e2; + *(e1++) = '.'; + } + } + *e1 = 0; + n1 = (int) strlen( Str_e ) - 1; + if( flags & nf_floatToShortestString_trimZeros ) while( Str_e[n1] == '0' ) n1--; + ne = flags & nf_floatToShortestString_keepPeriod; + if( !( flags & nf_floatToShortestString_keepPeriod ) ) if( Str_e[n1] == '.' ) n1--; + n1++; + Str_e[n1] = 0; + + e1++; + exponent = (int) strtol( e1, &e2, 10 ); + if( exponent != 0 ) { /* If 0, the exponent was "e+00". */ + for( e1 = Str_e; *e1 != 0; e1++ ) ; + sprintf( e1, "e%d", exponent ); + + digitsRightOfPeriod_f = significantDigits - exponent; + if( ( digitsRightOfPeriod_f > 25 ) || ( exponent > 50 ) ) return( strdup( Str_r ) ); + if( digitsRightOfPeriod_f < 0 ) digitsRightOfPeriod_f = 0; + + sprintf( Fmt, "%%%s.%df", sign, digitsRightOfPeriod_f ); + sprintf( Str_f, Fmt, value ); + + ne = (int) strlen( Str_e ); + nf = (int) strlen( Str_f ); + if( strchr( Str_f, '.' ) != NULL ) { /* '.' in string. */ + if( flags & nf_floatToShortestString_trimZeros ) while( Str_f[nf-1] == '0' ) nf--; + if( Str_f[nf-1] == '.' ) { + if( !( flags & nf_floatToShortestString_keepPeriod ) ) nf--; + } } + else { /* Maybe we want a '.' else it looks like an integer, "12345." vs "12345". */ + if( flags & nf_floatToShortestString_keepPeriod ) { + Str_f[nf] = '.'; + nf++; + } + } + Str_f[nf] = 0; + + if( ( nf + favorEFormBy ) < ne ) Str_r = Str_f; + } + return( strdup( Str_r ) ); +} diff --git a/source/processes/hadronic/models/lend/src/nf_stringToDoubles.cc b/source/processes/hadronic/models/lend/src/nf_stringToDoubles.cc deleted file mode 100644 index 434f5830b0..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_stringToDoubles.cc +++ /dev/null @@ -1,135 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include - -#include "nf_utilities.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#define numberOfStaticDoubles ( 100 * 1000 ) - -static nfu_status nfu_stringToListOfDoubles2( char const *str, int64_t *numberConverted, double **doublePtr, char **endCharacter ); -/* -======================================================================== -*/ -nfu_status nfu_stringToListOfDoubles( char const *str, int64_t *numberConverted, double **doublePtr, char **endCharacter ) { - - *numberConverted = 0; - *doublePtr = NULL; - return( nfu_stringToListOfDoubles2( str, numberConverted, doublePtr, endCharacter ) ); -} -/* -======================================================================== -*/ -static nfu_status nfu_stringToListOfDoubles2( char const *str, int64_t *numberConverted, double **doublePtr, char **endCharacter ) { - - int64_t i1, i2, numberConverted_initial = *numberConverted; - double staticDoubles[numberOfStaticDoubles]; - nfu_status status = nfu_Okay; - - for( i1 = 0; i1 < numberOfStaticDoubles; i1++, (*numberConverted)++ ) { - staticDoubles[i1] = strtod( str, endCharacter ); - if( str == (char const *) *endCharacter ) { - if( *numberConverted > 0 ) { - if( ( *doublePtr = (double *) nfu_malloc( (size_t) *numberConverted * sizeof( double ) ) ) == NULL ) status = nfu_mallocError; - } - break; - } - str = (char const *) *endCharacter; - } - - if( ( status == nfu_Okay ) && ( *doublePtr == NULL ) ) status = nfu_stringToListOfDoubles2( str, numberConverted, doublePtr, endCharacter ); - if( *doublePtr != NULL ) { - double *doublePtr2 = &((*doublePtr)[numberConverted_initial]); - - for( i2 = 0; i2 < i1; i2++, doublePtr2++ ) *doublePtr2 = staticDoubles[i2]; - } - return( status ); -} -/* -============================================================ -*/ -char *nf_floatToShortestString( double value, int significantDigits, int favorEFormBy, int flags ) { - - int n1, ne, nf, digitsRightOfPeriod_f, exponent; - char Str_e[512], Str_f[512], *Str_r = Str_e, Fmt[32], *e1, *e2; - const char *sign = ""; - - if( flags & nf_floatToShortestString_includeSign ) sign = "+"; - - if( !std::isfinite( value ) ) { - snprintf( Fmt, sizeof Fmt, "%%%sf", sign ); - snprintf( Str_e, sizeof Str_e, Fmt, value ); - return( strdup( Str_e ) ); - } - - significantDigits--; - if( significantDigits < 0 ) significantDigits = 0; - if( significantDigits > 24 ) significantDigits = 24; - - snprintf( Fmt, sizeof Fmt, "%%%s.%de", sign, significantDigits ); - snprintf( Str_e, sizeof Str_e, Fmt, value ); - - e1 = strchr( Str_e, 'e' ); - if( significantDigits == 0 ) { - if( *(e1 - 1) != '.' ) { - char *e3; - - e2 = strchr( e1, 0 ); - e3 = e2 + 1; - for( ; e2 != e1; e2--, e3-- ) *e3 = *e2; - *(e1++) = '.'; - } - } - *e1 = 0; - n1 = (int) strlen( Str_e ) - 1; - if( flags & nf_floatToShortestString_trimZeros ) while( Str_e[n1] == '0' ) n1--; // Loop checking, 11.06.2015, T. Koi - ne = flags & nf_floatToShortestString_keepPeriod; - if( !( flags & nf_floatToShortestString_keepPeriod ) ) if( Str_e[n1] == '.' ) n1--; - n1++; - Str_e[n1] = 0; - - e1++; - exponent = (int) strtol( e1, &e2, 10 ); - if( exponent != 0 ) { /* If 0, the exponent was "e+00". */ - for( e1 = Str_e; *e1 != 0; e1++ ) ; - snprintf( e1, sizeof Str_e, "e%d", exponent ); - - digitsRightOfPeriod_f = significantDigits - exponent; - if( ( digitsRightOfPeriod_f > 25 ) || ( exponent > 50 ) ) return( strdup( Str_r ) ); - if( digitsRightOfPeriod_f < 0 ) digitsRightOfPeriod_f = 0; - - snprintf( Fmt, sizeof Fmt, "%%%s.%df", sign, digitsRightOfPeriod_f ); - snprintf( Str_f, sizeof Str_f, Fmt, value ); - - ne = (int) strlen( Str_e ); - nf = (int) strlen( Str_f ); - if( strchr( Str_f, '.' ) != NULL ) { /* '.' in string. */ - if( flags & nf_floatToShortestString_trimZeros ) while( Str_f[nf-1] == '0' ) nf--; // Loop checking, 11.06.2015, T. Koi - if( Str_f[nf-1] == '.' ) { - if( !( flags & nf_floatToShortestString_keepPeriod ) ) nf--; - } } - else { /* Maybe we want a '.' else it looks like an integer, "12345." vs "12345". */ - if( flags & nf_floatToShortestString_keepPeriod ) { - Str_f[nf] = '.'; - nf++; - } - } - Str_f[nf] = 0; - - if( ( nf + favorEFormBy ) < ne ) Str_r = Str_f; - } - return( strdup( Str_r ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_stringToDoubles_main.cc b/source/processes/hadronic/models/lend/src/nf_stringToDoubles_main.cc deleted file mode 100644 index d9646d3267..0000000000 --- a/source/processes/hadronic/models/lend/src/nf_stringToDoubles_main.cc +++ /dev/null @@ -1,55 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include - -#include "nf_utilities.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif -/* -char str[] = "1e-5 20.43634 2e-5 20.43634 5e-5 20.43634 1e-4 20.43633 2e-4 20.43633 5e-4 20.43633 1e-3 20.43633 2e-3 20.43633 5e-3 20.43633 " \ -"1e-2 20.43633 0.0253 20.43633 5e-2 20.43633 0.1 20.43632 0.2 20.43631 0.5 20.43627 1 20.4362 2 20.43606 5 20.43566 10 20.43499 20" \ -" 20.43364 50 20.4296 1e2 20.42288 2e2 20.40944 5e2 20.36926 1e3 20.30269 2e3 20.17105 4e3 19.91352 6e3 19.66341 8e3 19.4204 1e4 " \ -"19.18418 1.5e4 18.62156 2e4 18.09567 4e4 16.29554 6e4 14.86728 8e4 13.70583 1e5 12.74229 1.5e5 10.9234 2e5 9.643178 3e5 7.951949 " \ -"4e5 6.876412 5e5 6.125445 6e5 5.566879 7e5 5.13201 8e5 4.78157 9e5 4.491471 1e6 4.246104 1.2e6 3.850454 1.4e6 3.541748 1.6e6 3.291314 " -" 1.8e6 3.082187 2e6 2.903645 2.2e6 2.748543 2.4e6 2.611918 2.6e6 2.490197 2.8e6 2.380736 3e6 2.281521 3.2e6 2.190993 3.4e6 2.107917 3.6e6 " \ -"2.031301 3.8e6 1.960334 4e6 1.894349 4.2e6 1.832787 4.4e6 1.775177 4.6e6 1.721118 4.8e6 1.670264 5e6 1.622318 5.5e6 1.513553 6e6 1.418157 " \ -"6.5e6 1.333709 7e6 1.258367 7.5e6 1.190697 8e6 1.129564 8.5e6 1.074052 9e6 1.023415 9.5e6 0.9770347 1e7 0.9343974 1.05e7 0.8950685 1.1e7 " \ -"0.8586796 1.15e7 0.8249154 1.2e7 0.7935044 1.25e7 0.7642113 1.3e7 0.7368313 1.35e7 0.7111848 1.4e7 0.6871141 1.45e7 0.6644799 1.5e7 0.6431586 " \ -"1.55e7 0.6230401 1.6e7 0.6040262 1.65e7 0.586029 1.7e7 0.5689692 1.75e7 0.5527757 1.8e7 0.537384 1.85e7 0.5227359 1.9e7 0.5087783 1.95e7 0.495463 " \ -"2e7 0.4827462 "; -*/ - -/* -======================================================================== -*/ -/* -int main( int argc, char **argv ) { - - int64_t i1, numberConverted; - double *doublePtr; - nfu_status status; - char *endCharacter; - - status = nfu_stringToListOfDoubles( str, &numberConverted, &doublePtr, &endCharacter ); - if( doublePtr != NULL ) { - for( i1 = 0; i1 < numberConverted; i1++ ) printf( "%6d %14.7e\n", (int) i1, doublePtr[i1] ); - nfu_free( doublePtr ); - } - printf( "No converted = <%s>\n", endCharacter ); - printf( "%8d %d\n", (int) numberConverted, status ); - printf( "%s\n", nfu_statusMessage( status ) ); - exit( EXIT_SUCCESS ); -} -*/ - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/nf_stringToInt32s.c b/source/processes/hadronic/models/lend/src/nf_stringToInt32s.c new file mode 100644 index 0000000000..1400bb28fc --- /dev/null +++ b/source/processes/hadronic/models/lend/src/nf_stringToInt32s.c @@ -0,0 +1,139 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "nf_utilities.h" + +#define numberOfStaticInt32s ( 100 * 1000 ) + +#ifndef INT32_MIN +#define INT32_MIN -2147483648 +#define INT32_MAX 2147483647 +#endif + +static int32_t *nfu_stringToListOfInt32s_2( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, char **endCharacter ); +/* +======================================================================== +*/ +int32_t *nfu_stringToListOfInt32s( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter ) { + + if( strchr( "0123456789.+-eE", sep ) != NULL ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "Invalid sep ='%c'.", sep ); + return( NULL ); + } + + *numberConverted = 0; + *endCharacter = (char *) str; + if( isspace( sep ) ) sep = ' '; /* Make it the space character if any white space as it simplifies logic below. */ + return( nfu_stringToListOfInt32s_2( smr, str, sep, numberConverted, endCharacter ) ); +} +/* +======================================================================== +*/ +static int32_t *nfu_stringToListOfInt32s_2( statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, + char **endCharacter ) { + + int64_t i1, i2, numberConverted_initial = *numberConverted; + int32_t *Int32Ptr = NULL; +#if NFU_USEHEAP + int32_t *staticInt32s = (int32_t *) smr_malloc2( smr, (size_t) numberOfStaticInt32s * sizeof( int32_t ), 0, "staticInt32s" ); + if( staticInt32s == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } +#else + int32_t staticInt32s[numberOfStaticInt32s]; +#endif + + for( i1 = 0; i1 < numberOfStaticInt32s; i1++, (*numberConverted)++ ) { + if( *numberConverted == 0 ) { + if( nfu_stringToInt32( smr, str, endCharacter, &staticInt32s[i1] ) != 0 ) { + *endCharacter = (char *) str; + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); +#if NFU_USEHEAP + free( staticInt32s ); +#endif + return( NULL ); + } } + else { /* Check that there is one sep character and allow for arbitrary number of white spaces. */ + char const *str2 = str; + + while( isspace( *str2 ) ) ++str2; /* Only need to check for white spaces before sep character as strtol will ignore after. */ + if( sep != ' ' ) { + if( *str2 == sep ) { + ++str2; } + else { + str2 = str; + } + } + if( str < str2 ) { + if( nfu_stringToInt32( smr, str2, endCharacter, &staticInt32s[i1] ) != 0 ) { +#if NFU_USEHEAP + free( staticInt32s ); +#endif + *endCharacter = (char *) str; + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + } + if( str2 == (char const *) *endCharacter ) *endCharacter = (char *) str; + } + if( str == (char const *) *endCharacter ) { + int64_t number = *numberConverted; + + if( *numberConverted == 0 ) number = 1; + if( ( Int32Ptr = (int32_t *) smr_malloc2( smr, (size_t) number * sizeof( int32_t ), 0, "Int32Ptr" ) ) == NULL ) { +#if NFU_USEHEAP + free( staticInt32s ); +#endif + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + break; + } + str = (char const *) *endCharacter; + } + + if( Int32Ptr == NULL ) Int32Ptr = nfu_stringToListOfInt32s_2( smr, str, sep, numberConverted, endCharacter ); + if( Int32Ptr != NULL ) { + int32_t *Int32Ptr2 = &(Int32Ptr[numberConverted_initial]); + char *end = *endCharacter; + + for( i2 = 0; i2 < i1; i2++, Int32Ptr2++ ) *Int32Ptr2 = staticInt32s[i2]; + while( isspace( *end ) ) ++end; + if( *end == 0 ) *endCharacter = end; + } + +#if NFU_USEHEAP + free( staticInt32s ); +#endif + + return( Int32Ptr ); +} +/* +======================================================================== +*/ +int nfu_stringToInt32( statusMessageReporting *smr, char const *str, char **endCharacter, int32_t *value ) { + + long lValue = strtol( str, endCharacter, 10 ); + + if( lValue < INT32_MIN ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "int32_t underflow: %l", lValue ); + return( -1 ); } + else if( lValue > INT32_MAX ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "int32_t overflow: %l", lValue ); + return( 1 ); + } + *value = (int) lValue; + return( 0 ); +} diff --git a/source/processes/hadronic/models/lend/src/nf_utilities.cc b/source/processes/hadronic/models/lend/src/nf_utilities.c similarity index 80% rename from source/processes/hadronic/models/lend/src/nf_utilities.cc rename to source/processes/hadronic/models/lend/src/nf_utilities.c index ac4ce1f3d8..bdaa181760 100644 --- a/source/processes/hadronic/models/lend/src/nf_utilities.cc +++ b/source/processes/hadronic/models/lend/src/nf_utilities.c @@ -1,29 +1,23 @@ /* # <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT # <> */ #include #include -#include #include "nf_utilities.h" -#ifdef WIN32 +#ifdef _WIN32 #include -#define is_nan(a) _isnan(a) -/*#define INFINITY (DBL_MAX+DBL_MAX)*/ -/*#define NAN (INFINITY-INFINITY)*/ -#else -#define is_nan(a) std::isnan(a) -#endif - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; #endif static const char Okay_message[] = "all is okay"; +static const char Error_message[] = "generic numericalFunctions error"; static const char mallocError_message[] = "could not allocate memory"; static const char insufficientMemory_message[] = "user's memory is too small to handle data"; static const char badIndex_message[] = "bad index"; @@ -42,12 +36,24 @@ static const char unknownStatus_message[] = "unknown (i.e., invalid) status valu static const char badInput_message[] = "bad input to function"; static const char badNorm_message[] = "bad norm"; static const char badIntegrationInput_message[] = "bad integration input"; -static const char otherInterpolation_message[] = "other integration not supported"; +static const char otherInterpolation_message[] = "other interpolation not supported"; +static const char flatInterpolation_message[] = "flat interpolation not supported"; static const char failedToConverge_message[] = "failed to converge"; static const char oddNumberOfValues_message[] = "odd number of inputted values"; +static const char badLogValue_message[] = "log of 0 or negative value"; static int nfu_debugging = 0; +int nfu_SMR_libraryID = smr_unknownID; +/* +************************************************************ +*/ +int nfu_setup( void ) { + + nfu_SMR_libraryID = smr_registerLibrary( "numericalFunctions" ); + + return( 0 ); +} /* ************************************************************ */ @@ -60,7 +66,7 @@ double nfu_getNAN( void ) { */ int nfu_isNAN( double d ) { - return( is_nan( d ) ); + return( isnan( d ) ); } /* ************************************************************ @@ -75,8 +81,10 @@ double nfu_getInfinity( double sign ) { */ const char *nfu_statusMessage( nfu_status status ) { +printf( "status = %d\n", status ); switch( status ) { case nfu_Okay : return( Okay_message ); + case nfu_Error : return( Error_message ); case nfu_mallocError : return( mallocError_message ); case nfu_insufficientMemory : return( insufficientMemory_message ); case nfu_badIndex : return( badIndex_message ); @@ -95,8 +103,10 @@ const char *nfu_statusMessage( nfu_status status ) { case nfu_badNorm : return( badNorm_message ); case nfu_badIntegrationInput : return( badIntegrationInput_message ); case nfu_otherInterpolation : return( otherInterpolation_message ); + case nfu_flatInterpolation : return( flatInterpolation_message ); case nfu_failedToConverge : return( failedToConverge_message ); case nfu_oddNumberOfValues : return( oddNumberOfValues_message ); + case nfu_badLogValue : return( badLogValue_message ); } return( unknownStatus_message ); } @@ -134,7 +144,7 @@ void *nfu_realloc( size_t size, void *old ) { void *p = realloc( old, size ); - if( nfu_debugging ) printf( "nfu_realloc %12p size = %8llu", p, (long long unsigned) size ); + if( nfu_debugging ) printf( "nfu_realloc %12p size = %8llu, old = %12p\n", p, (long long unsigned) size, old ); return( p ); } /* @@ -151,7 +161,7 @@ void *nfu_free( void *p ) { /* ******************************************************** */ -void nfu_printMsg( char *fmt, ... ) { +void nfu_printMsg( char const *fmt, ... ) { va_list args; @@ -163,7 +173,7 @@ void nfu_printMsg( char *fmt, ... ) { /* ******************************************************** */ -void nfu_printErrorMsg( char *fmt, ... ) { +void nfu_printErrorMsg( char const *fmt, ... ) { va_list args; @@ -174,7 +184,3 @@ void nfu_printErrorMsg( char *fmt, ... ) { exit( EXIT_FAILURE ); } - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.c b/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.c new file mode 100644 index 0000000000..92fb0d8694 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.c @@ -0,0 +1,673 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwXY.h" + +static double ptwXY_mod2( double v, double m, int pythonMod ); +static nfu_status ptwXY_mul2_s_ptwXY( statusMessageReporting *smr, ptwXYPoints *div, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double x1, double y1, double x2, double y2, int level ); +static nfu_status ptwXY_div_s_ptwXY( statusMessageReporting *smr, ptwXYPoints *div, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double x1, double y1, double x2, double y2, int level, int isNAN1, int isNAN2 ); +static ptwXYPoints *ptwXY_div_ptwXY_forFlats( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide ); +static nfu_status ptwXY_getValueAtX_ignore_XOutsideDomainError( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double x, double *y ); +static nfu_status ptwXY_getValueAtX_signal_XOutsideDomainError( statusMessageReporting *smr, int line, + char const *function, ptwXYPoints *ptwXY1, double x, double *y ); +/* +************************************************************ +*/ +nfu_status ptwXY_slopeOffset( statusMessageReporting *smr, ptwXYPoints *ptwXY, double slope, double offset ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *p; + ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); + + if( ( nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ) ) < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = slope * p->y + offset; + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = slope * o->point.y + offset; + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_add_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { + + if( ptwXY_slopeOffset( smr, ptwXY, 1., value ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_sub_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { + + if( ptwXY_slopeOffset( smr, ptwXY, 1., -value ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_sub_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { + + if( ptwXY_slopeOffset( smr, ptwXY, -1., value ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_mul_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { + + if( ptwXY_slopeOffset( smr, ptwXY, value, 0. ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_div_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { + + if( value == 0. ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); + ptwXY->status = nfu_divByZero; } + else { + if( ptwXY_slopeOffset( smr, ptwXY, 1. / value, 0. ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + } + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_div_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value ) { +/* +* This does not do any infilling and it should????????? +*/ + + int64_t i, nonOverflowLength; + ptwXYPoint *p; + ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); + + if( ( nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ) ) < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( nfu_otherInterpolation ); + } + + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) if( p->y == 0. ) ptwXY->status = nfu_divByZero; + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) if( o->point.y == 0. ) ptwXY->status = nfu_divByZero; + if( ptwXY->status == nfu_divByZero ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); } + else { + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = value / p->y; + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = value / o->point.y; + } + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_mod( statusMessageReporting *smr, ptwXYPoints *ptwXY, double m, int pythonMod ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *p; + ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); + + if( ( nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ) ) < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( m == 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); + ptwXY->status = nfu_divByZero; + } + + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = ptwXY_mod2( p->y, m, pythonMod ); + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = ptwXY_mod2( o->point.y, m, pythonMod ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +static double ptwXY_mod2( double v, double m, int pythonMod ) { + + double r = fmod( fabs( v ), fabs( m ) ); + + if( pythonMod ) { + if( ( v * m ) < 0. ) r = fabs( m ) - fabs( r ); + if( m < 0. ) r *= -1.; } + else { + if( v < 0. ) r *= -1.; + } + + return( r ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_binary_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double v1, double v2, double v1v2 ) { + + int64_t i; + int unionOptions = ptwXY_union_fill | ptwXY_union_mergeClosePoints; + double y; + ptwXYPoints *ptwXYNew; + ptwXYPoint *p; + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Source1: Other interpolation not allowed." ); + return( NULL ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Source2: Other interpolation not allowed." ); + return( NULL ); + } + + if( ptwXY1->interpolation != ptwXY2->interpolation ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "Source1 interpolation '%s' not same as Source2 interpolation '%s'.", + ptwXY1->interpolationString, ptwXY2->interpolationString ); + return( NULL ); + } + + if( ( ptwXY1->interpolation != ptwXY_interpolationLinLin ) && ( ptwXY1->interpolation != ptwXY_interpolationLinLog ) && + ( ptwXY1->interpolation != ptwXY_interpolationFlat ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "Only '%s' and '%s' interpolation supported, not '%s' interpolation.", ptwXY_interpolationToString( ptwXY_interpolationLinLin ), + ptwXY_interpolationToString( ptwXY_interpolationFlat ), ptwXY1->interpolationString ); + return( NULL ); + } + + if( ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ) != nfu_Okay ) { + double domainMin1, domainMax1, domainMin2, domainMax2; + + ptwXY_domainMin( NULL, ptwXY1, &domainMin1 ); + ptwXY_domainMax( NULL, ptwXY1, &domainMax1 ); + ptwXY_domainMin( NULL, ptwXY2, &domainMin2 ); + ptwXY_domainMax( NULL, ptwXY2, &domainMax2 ); + + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, "Domains not mutual (%.17e, %.17e) vs (%.17e, %.17e).", + domainMin1, domainMax1, domainMin2, domainMax2 ); + return( NULL ); + } + + if( ( ptwXYNew = ptwXY_union( smr, ptwXY1, ptwXY2, unionOptions ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); } + else { + for( i = 0, p = ptwXYNew->points; i < ptwXYNew->length; i++, p++ ) { + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, p->x, &y ) != nfu_Okay ) goto Err; + p->y = v1 * p->y + v2 * y + v1v2 * y * p->y; + } + } + return( ptwXYNew ); +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ptwXYNew ) ptwXY_free( ptwXYNew ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_add_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { + + ptwXYPoints *sum; + + if( ptwXY1->length == 0 ) { + sum = ptwXY_clone( smr, ptwXY2 ); } + else if( ptwXY2->length == 0 ) { + sum = ptwXY_clone( smr, ptwXY1 ); } + else { + sum = ptwXY_binary_ptwXY( smr, ptwXY1, ptwXY2, 1., 1., 0. ); + } + if( sum == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( sum ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_sub_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { + + ptwXYPoints *diff = NULL; + + if( ptwXY1->length == 0 ) { + diff = ptwXY_clone( smr, ptwXY2 ); + if( diff != NULL ) { + if( ptwXY_neg( smr, diff ) != nfu_Okay ) diff = ptwXY_free( diff ); + } } + else if( ptwXY2->length == 0 ) { + diff = ptwXY_clone( smr, ptwXY1 ); } + else { + diff = ptwXY_binary_ptwXY( smr, ptwXY1, ptwXY2, 1., -1., 0. ); + } + if( diff == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( diff ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_mul_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { + + ptwXYPoints *mul; + + if( ptwXY1->length == 0 ) { + mul = ptwXY_clone( smr, ptwXY1 ); } + else if( ptwXY2->length == 0 ) { + mul = ptwXY_clone( smr, ptwXY2 ); } + else { + mul = ptwXY_binary_ptwXY( smr, ptwXY1, ptwXY2, 0., 0., 1. ); + } + if( mul == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( mul ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_mul2_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { + + int64_t i, length; + ptwXYPoints *mul = NULL; + int found; + double x1, y1, x2, y2, u1, u2, v1, v2, xz1 = 0, xz2 = 0, x; + + if( ( mul = ptwXY_mul_ptwXY( smr, ptwXY1, ptwXY2 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( mul->length == 0 ) return( mul ); + if( ptwXY1->interpolation == ptwXY_interpolationFlat ) return( mul ); + if( ptwXY2->interpolation == ptwXY_interpolationFlat ) return( mul ); + + length = mul->length - 1; + if( length > 0 ) { + x2 = mul->points[length].x; + for( i = length - 1; i >= 0; i-- ) { /* Find and add y zeros not currently in mul's. */ + x1 = mul->points[i].x; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x1, &u1 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x2, &u2 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, x1, &v1 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, x2, &v2 ) != nfu_Okay ) goto Err; + found = 0; + if( u1 * u2 < 0 ) { + xz1 = ( u1 * x2 - u2 * x1 ) / ( u1 - u2 ); + if( ptwXY_setValueAtX( smr, mul, xz1, 0. ) != nfu_Okay ) goto Err; + found = 1; + } + if( v1 * v2 < 0 ) { + xz2 = ( v1 * x2 - v2 * x1 ) / ( v1 - v2 ); + if( ptwXY_setValueAtX( smr, mul, xz2, 0. ) != nfu_Okay ) goto Err; + found += 1; + } + if( found > 1 ) { + x = 0.5 * ( xz1 + xz2 ); + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x, &u1 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, x, &v1 ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, mul, x, u1 * v1 ) != nfu_Okay ) goto Err; + } + x2 = x1; + } + + if( ptwXY_simpleCoalescePoints( smr, mul ) != nfu_Okay ) goto Err; + length = mul->length; + x2 = mul->points[mul->length-1].x; + y2 = mul->points[mul->length-1].y; + for( i = mul->length - 2; i >= 0; i-- ) { /* Make interpolation fit accuracy. Work backwards so new */ + x1 = mul->points[i].x; /* points will not mess up loop. */ + y1 = mul->points[i].y; + if( ptwXY_mul2_s_ptwXY( smr, mul, ptwXY1, ptwXY2, x1, y1, x2, y2, 0 ) != nfu_Okay ) goto Err; + x2 = x1; + y2 = y1; + } + ptwXY_update_biSectionMax( mul, (double) length ); + } + return( mul ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( mul ) ptwXY_free( mul ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_mul2_s_ptwXY( statusMessageReporting *smr, ptwXYPoints *mul, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double x1, double y1, double x2, double y2, int level ) { + + double u1, u2, v1, v2, x, y, yp, dx, a1, a2; + nfu_status status; + + if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( fabs( x1 ) + fabs( x2 ) ) ) return( nfu_Okay ); + if( level >= mul->biSectionMax ) return( nfu_Okay ); + level++; + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x1, &u1 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x2, &u2 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, x1, &v1 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, x2, &v2 ) ) != nfu_Okay ) return( status ); + if( ( u1 == u2 ) || ( v1 == v2 ) ) return( nfu_Okay ); + a1 = u1 * v1; + if( y1 == 0 ) a1 = 0.; /* Fix rounding problem. */ + a2 = u2 * v2; + if( y2 == 0 ) a2 = 0.; /* Fix rounding problem. */ + if( ( a1 == 0. ) || ( a2 == 0. ) ) { /* Handle special case of 0 where accuracy can never be met. */ + x = 0.5 * ( x1 + x2 ); } + else { + if( ( a1 * a2 < 0. ) ) return( nfu_Okay ); /* Assume rounding error and no point needed as zero */ + a1 = sqrt( fabs( a1 ) ); /* crossings are set in ptwXY_mul2_ptwXY. */ + a2 = sqrt( fabs( a2 ) ); + x = ( a2 * x1 + a1 * x2 ) / ( a2 + a1 ); + } + dx = x2 - x1; + yp = ( u1 * v1 * ( x2 - x ) + u2 * v2 * ( x - x1 ) ) / dx; + y = ( u1 * ( x2 - x ) + u2 * ( x - x1 ) ) * ( v1 * ( x2 - x ) + v2 * ( x - x1 ) ) / ( dx * dx ); + if( fabs( y - yp ) < fabs( y * mul->accuracy ) ) return( nfu_Okay ); + if( ptwXY_setValueAtX( smr, mul, x, y ) != nfu_Okay ) return( mul->status ); + if( ptwXY_mul2_s_ptwXY( smr, mul, ptwXY1, ptwXY2, x, y, x2, y2, level ) != nfu_Okay ) return( mul->status ); + ptwXY_mul2_s_ptwXY( smr, mul, ptwXY1, ptwXY2, x1, y1, x, y, level ); + return( mul->status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_div_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide ) { + + int isNAN1, isNAN2; + int64_t i, j, k, zeros = 0, length, iYs; + double x1, x2, y1, y2, u1, u2, v1, v2, y, xz, nan = nfu_getNAN( ), s1, s2; + ptwXYPoints *div = NULL; + ptwXYPoint *p; + nfu_status status = ptwXY_simpleCoalescePoints( smr, ptwXY1 ); + + if( status != nfu_Okay ) goto Err; + if( ptwXY_simpleCoalescePoints( smr, ptwXY2 ) != nfu_Okay ) goto Err; + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Source1: Other interpolation not allowed." ); + return( NULL ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Source2: Other interpolation not allowed." ); + return( NULL ); + } + + if( ( ptwXY1->interpolation == ptwXY_interpolationFlat ) || ( ptwXY1->interpolation == ptwXY_interpolationFlat ) ) { + div = ptwXY_div_ptwXY_forFlats( smr, ptwXY1, ptwXY2, safeDivide ); + if( div == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( div ); + } + + if( ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ) != nfu_Okay ) { + double domainMin1, domainMax1, domainMin2, domainMax2; + + ptwXY_domainMin( NULL, ptwXY1, &domainMin1 ); + ptwXY_domainMax( NULL, ptwXY1, &domainMax1 ); + ptwXY_domainMin( NULL, ptwXY2, &domainMin2 ); + ptwXY_domainMax( NULL, ptwXY2, &domainMax2 ); + + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, "Domains not mutual (%.17e, %.17e) vs (%.17e, %.17e).", + domainMin1, domainMax1, domainMin2, domainMax2 ); + return( NULL ); + } + + if( ( div = ptwXY_union( smr, ptwXY1, ptwXY2, ptwXY_union_fill | ptwXY_union_mergeClosePoints ) ) == NULL ) goto Err; + for( i = 0, p = div->points; i < div->length; i++, p++ ) { + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, p->x, &y ) != nfu_Okay ) goto Err; + if( y == 0. ) { + if( p->y == 0. ) { + iYs = 0; + y1 = 0.; + y2 = 0.; + if( i > 0 ) { + if( ( status = ptwXY_getSlopeAtX( smr, ptwXY1, p->x, '-', &s1 ) ) != nfu_Okay ) { + if( status != nfu_XOutsideDomain ) goto Err; + s1 = 0.; + } + if( ( status = ptwXY_getSlopeAtX( smr, ptwXY2, p->x, '-', &s2 ) ) != nfu_Okay ) goto Err; + if( s2 == 0. ) { + y1 = nan; } + else { + y1 = s1 / s2; + } + iYs++; + } + if( i < ( div->length - 1 ) ) { + if( ( status = ptwXY_getSlopeAtX( smr, ptwXY1, p->x, '+', &s1 ) ) != nfu_Okay ) { + if( status != nfu_XOutsideDomain ) goto Err; + s1 = 0.; + } + if( ( status = ptwXY_getSlopeAtX( smr, ptwXY2, p->x, '+', &s2 ) ) != nfu_Okay ) goto Err; + if( s2 == 0. ) { + y2 = nan; } + else { + y2 = s1 / s2; + } + iYs++; + } + p->y = ( y1 + y2 ) / iYs; + if( nfu_isNAN( p->y ) ) zeros++; } + else { + if( !safeDivide ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); + goto Err2; + } + zeros++; + p->y = nan; + } } + else { + p->y /= y; + } + } + length = div->length - 1; + if( length > 0 ) { + x2 = div->points[length].x; + for( i = length - 1; i >= 0; i-- ) { /* Find and add y zeros and NAN not currently in div's. */ + x1 = div->points[i].x; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x1, &u1 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x2, &u2 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x1, &v1 ) != nfu_Okay ) goto Err; + if( ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x2, &v2 ) != nfu_Okay ) goto Err; + if( u1 * u2 < 0 ) { + xz = ( u1 * x2 - u2 * x1 ) / ( u1 - u2 ); + if( ptwXY_setValueAtX( smr, div, xz, 0. ) != nfu_Okay ) goto Err; + } + if( v1 * v2 < 0 ) { + if( !safeDivide ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); + goto Err2; + } + zeros++; + xz = ( v1 * x2 - v2 * x1 ) / ( v1 - v2 ); + if( ptwXY_setValueAtX( smr, div, xz, nan ) != nfu_Okay ) goto Err; + } + x2 = x1; + } + if( ptwXY_simpleCoalescePoints( smr, div ) != nfu_Okay ) goto Err; + length = div->length; + x2 = div->points[div->length-1].x; + y2 = div->points[div->length-1].y; + isNAN2 = nfu_isNAN( y2 ); + for( i = div->length - 2; i >= 0; i-- ) { /* Make interpolation fit accuracy. Work backwards so new points will not mess up loop. */ + x1 = div->points[i].x; + y1 = div->points[i].y; + isNAN1 = nfu_isNAN( y1 ); + if( !isNAN1 || !isNAN2 ) { + if( ptwXY_div_s_ptwXY( smr, div, ptwXY1, ptwXY2, x1, y1, x2, y2, 0, isNAN1, isNAN2 ) != nfu_Okay ) goto Err; + } + x2 = x1; + y2 = y1; + isNAN2 = isNAN1; + } + ptwXY_update_biSectionMax( div, (double) length ); + if( zeros ) { + if( ptwXY_simpleCoalescePoints( smr, div ) != nfu_Okay ) goto Err; + for( i = 0; i < div->length; i++ ) if( !nfu_isNAN( div->points[i].y ) ) break; + if( nfu_isNAN( div->points[0].y ) ) { /* Special case for first point. */ + if( i == div->length ) { /* They are all nan's, what now? */ + zeros = 0; + for( i = 0; i < div->length; i++ ) div->points[i].y = 0.; } + else { + div->points[0].y = 2. * div->points[i].y; + zeros--; + } + } + for( i = div->length - 1; i > 0; i-- ) if( !nfu_isNAN( div->points[i].y ) ) break; + if( nfu_isNAN( div->points[div->length - 1].y ) ) { /* Special case for last point. */ + div->points[div->length - 1].y = 2. * div->points[i].y; + zeros--; + } + if( zeros ) { + for( i = 0; i < div->length; i++ ) if( nfu_isNAN( div->points[i].y ) ) break; + for( k = i + 1, j = i; k < div->length; k++ ) { + if( nfu_isNAN( div->points[k].y ) ) continue; + div->points[j] = div->points[k]; + j++; + } + div->length = j; + } + } + } + return( div ); + +Err: + if( status == nfu_XOutsideDomain ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_XOutsideDomain, "x-value outside domain." ); } + else { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + } +Err2: + if( div ) ptwXY_free( div ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_div_s_ptwXY( statusMessageReporting *smr, ptwXYPoints *div, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + double x1, double y1, double x2, double y2, int level, int isNAN1, int isNAN2 ) { + + nfu_status status; + double u1, u2, v1, v2, v, x, y, yp, dx, a1, a2; + + if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( fabs( x1 ) + fabs( x2 ) ) ) return( nfu_Okay ); + if( level >= div->biSectionMax ) return( nfu_Okay ); + level++; + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x1, &u1 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x2, &u2 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x1, &v1 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x2, &v2 ) ) != nfu_Okay ) return( status ); + if( isNAN1 ) { + x = 0.5 * ( x1 + x2 ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x, &u1 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x, &v1 ) ) != nfu_Okay ) return( status ); + y = u1 / v1; } + else if( isNAN2 ) { + x = 0.5 * ( x1 + x2 ); + if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY1, x, &u2 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_getValueAtX_signal_XOutsideDomainError( smr, __LINE__, __func__, ptwXY2, x, &v2 ) ) != nfu_Okay ) return( status ); + y = u2 / v2; } + else { + if( ( u1 == u2 ) || ( v1 == v2 ) ) return( nfu_Okay ); + if( ( y1 == 0. ) || ( y2 == 0. ) ) { /* Handle special case of 0 where accuracy can never be met. */ + x = 0.5 * ( x1 + x2 ); } + else { + if( ( u1 * u2 < 0. ) ) return( nfu_Okay ); /* Assume rounding error and no point needed. */ + a1 = sqrt( fabs( u1 ) ); + a2 = sqrt( fabs( u2 ) ); + x = ( a2 * x1 + a1 * x2 ) / ( a2 + a1 ); + } + dx = x2 - x1; + v = v1 * ( x2 - x ) + v2 * ( x - x1 ); + if( ( v1 == 0. ) || ( v2 == 0. ) || ( v == 0. ) ) return( nfu_Okay ); /* Probably not correct, but I had to do something. */ + yp = ( u1 / v1 * ( x2 - x ) + u2 / v2 * ( x - x1 ) ) / dx; + y = ( u1 * ( x2 - x ) + u2 * ( x - x1 ) ) / v; + if( fabs( y - yp ) < fabs( y * div->accuracy ) ) return( nfu_Okay ); + } + if( ( status = ptwXY_setValueAtX( smr, div, x, y ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_div_s_ptwXY( smr, div, ptwXY1, ptwXY2, x, y, x2, y2, level, 0, isNAN2 ) ) != nfu_Okay ) return( status ); + status = ptwXY_div_s_ptwXY( smr, div, ptwXY1, ptwXY2, x1, y1, x, y, level, isNAN1, 0 ); + return( status ); +} +/* +************************************************************ +*/ +static ptwXYPoints *ptwXY_div_ptwXY_forFlats( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide ) { + + int64_t i; + ptwXYPoints *div = NULL; + ptwXYPoint *p; + double y; + + if( ptwXY1->interpolation != ptwXY_interpolationFlat ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Source1 interpolation not 'flat' but '%s'.", + ptwXY1->interpolationString ); + return( NULL ); + } + if( ptwXY2->interpolation != ptwXY_interpolationFlat ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Source2 interpolation not 'flat' but '%s'.", + ptwXY2->interpolationString ); + return( NULL ); + } + + if( ( div = ptwXY_union( smr, ptwXY1, ptwXY2, ptwXY_union_fill | ptwXY_union_mergeClosePoints ) ) != NULL ) { + for( i = 0, p = div->points; i < div->length; i++, p++ ) { + if( ptwXY_getValueAtX_ignore_XOutsideDomainError( smr, ptwXY2, p->x, &y ) != nfu_Okay ) goto Err; + if( y == 0. ) { + if( ( safeDivide ) && ( p->y == 0 ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0." ); + goto Err; + } } + else { + p->y /= y; + } + } + } + return( div ); + +Err: + if( div ) ptwXY_free( div ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_getValueAtX_ignore_XOutsideDomainError( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double x, double *y ) { + + nfu_status status = ptwXY_getValueAtX( smr, ptwXY1, x, y ); + + if( status == nfu_XOutsideDomain ) status = nfu_Okay; + return( status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_getValueAtX_signal_XOutsideDomainError( statusMessageReporting *smr, int line, + char const *function, ptwXYPoints *ptwXY1, double x, double *y ) { + + nfu_status status = ptwXY_getValueAtX( smr, ptwXY1, x, y ); + + if( status == nfu_XOutsideDomain ) { + double domainMin, domainMax; + + ptwXY_domainMin( NULL, ptwXY1, &domainMin ); + ptwXY_domainMax( NULL, ptwXY1, &domainMax ); + + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XOutsideDomain, "x-value = %.17e outside domain (%.17e, %.17e)", + x, domainMin, domainMin ); + smr_setReportError( smr, NULL, __FILE__, line, function, nfu_SMR_libraryID, nfu_Error, "Via." ); + } + return( status ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.cc b/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.cc deleted file mode 100644 index 931ba25c3d..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_binaryOperators.cc +++ /dev/null @@ -1,522 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static double ptwXY_mod2( double v, double m, int pythonMod ); -static nfu_status ptwXY_mul2_s_ptwXY( ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, int level ); -static nfu_status ptwXY_div_s_ptwXY( ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, - int level, int isNAN1, int isNAN2 ); -static ptwXYPoints *ptwXY_div_ptwXY_forFlats( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide ); -static nfu_status ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXYPoints *ptwXY1, double x, double *y ); -/* -************************************************************ -*/ -nfu_status ptwXY_slopeOffset( ptwXYPoints *ptwXY, double slope, double offset ) { - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p; - ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = slope * p->y + offset; - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = slope * o->point.y + offset; - return( ptwXY->status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_add_double( ptwXYPoints *ptwXY, double value ) { return( ptwXY_slopeOffset( ptwXY, 1., value ) ); } -nfu_status ptwXY_sub_doubleFrom( ptwXYPoints *ptwXY, double value ) { return( ptwXY_slopeOffset( ptwXY, 1., -value ) ); } -nfu_status ptwXY_sub_fromDouble( ptwXYPoints *ptwXY, double value ) { return( ptwXY_slopeOffset( ptwXY, -1., value ) ); } -nfu_status ptwXY_mul_double( ptwXYPoints *ptwXY, double value ) { return( ptwXY_slopeOffset( ptwXY, value, 0. ) ); } -nfu_status ptwXY_div_doubleFrom( ptwXYPoints *ptwXY, double value ) { - - if( value == 0. ) { - ptwXY->status = nfu_divByZero; } - else { - ptwXY_slopeOffset( ptwXY, 1. / value, 0. ); - } - return( ptwXY->status ); -} -nfu_status ptwXY_div_fromDouble( ptwXYPoints *ptwXY, double value ) { -/* -* This does not do any infilling and it should????????? -*/ - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p; - ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) if( p->y == 0. ) ptwXY->status = nfu_divByZero; - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) if( o->point.y == 0. ) ptwXY->status = nfu_divByZero; - if( ptwXY->status != nfu_divByZero ) { - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = value / p->y; - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = value / o->point.y; - } - return( ptwXY->status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_mod( ptwXYPoints *ptwXY, double m, int pythonMod ) { - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p; - ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( m == 0 ) return( ptwXY->status = nfu_divByZero ); - - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = ptwXY_mod2( p->y, m, pythonMod ); - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = ptwXY_mod2( o->point.y, m, pythonMod ); - return( ptwXY->status ); -} -/* -************************************************************ -*/ -static double ptwXY_mod2( double v, double m, int pythonMod ) { - - double r = std::fmod( std::fabs( v ), std::fabs( m ) ); - - if( pythonMod ) { - if( ( v * m ) < 0. ) r = std::fabs( m ) - std::fabs( r ); - if( m < 0. ) r *= -1.; } - else { - if( v < 0. ) r *= -1.; - } - - return( r ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_binary_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double v1, double v2, double v1v2, nfu_status *status ) { - - int64_t i; - int unionOptions = ptwXY_union_fill | ptwXY_union_mergeClosePoints; - double y; - ptwXYPoints *n; - ptwXYPoint *p; - - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ( *status = ptwXY_areDomainsMutual( ptwXY1, ptwXY2 ) ) != nfu_Okay ) return( NULL ); - if( ( ptwXY1->interpolation == ptwXY_interpolationFlat ) || ( ptwXY2->interpolation == ptwXY_interpolationFlat ) ) { - *status = nfu_invalidInterpolation; - if( ( ptwXY1->interpolation != ptwXY2->interpolation ) ) return( NULL ); - } - if( ( n = ptwXY_union( ptwXY1, ptwXY2, status, unionOptions ) ) != NULL ) { - for( i = 0, p = n->points; i < n->length; i++, p++ ) { - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, p->x, &y ) ) != nfu_Okay ) goto Err; - p->y = v1 * p->y + v2 * y + v1v2 * y * p->y; - } - } - return( n ); -Err: - if( n ) ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_add_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ) { - - ptwXYPoints *sum; - - if( ptwXY1->length == 0 ) { - sum = ptwXY_clone( ptwXY2, status ); } - else if( ptwXY2->length == 0 ) { - sum = ptwXY_clone( ptwXY1, status ); } - else { - sum = ptwXY_binary_ptwXY( ptwXY1, ptwXY2, 1., 1., 0., status ); - } - return( sum ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_sub_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ) { - - ptwXYPoints *diff; - - if( ptwXY1->length == 0 ) { - diff = ptwXY_clone( ptwXY2, status ); - if( ( *status = ptwXY_neg( diff ) ) != nfu_Okay ) diff = ptwXY_free( diff ); } - else if( ptwXY2->length == 0 ) { - diff = ptwXY_clone( ptwXY1, status ); } - else { - diff = ptwXY_binary_ptwXY( ptwXY1, ptwXY2, 1., -1., 0., status ); - } - return( diff ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_mul_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ) { - - ptwXYPoints *mul; - - if( ptwXY1->length == 0 ) { - mul = ptwXY_clone( ptwXY1, status ); } - else if( ptwXY2->length == 0 ) { - mul = ptwXY_clone( ptwXY2, status ); } - else { - mul = ptwXY_binary_ptwXY( ptwXY1, ptwXY2, 0., 0., 1., status ); - } - return( mul ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_mul2_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status ) { - - int64_t i, length; - ptwXYPoints *n = NULL; - int found; - double x1, y1, x2, y2, u1, u2, v1, v2, xz1 = 0, xz2 = 0, x; - - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ( n = ptwXY_mul_ptwXY( ptwXY1, ptwXY2, status ) ) == NULL ) return( n ); - if( ptwXY1->interpolation == ptwXY_interpolationFlat ) return( n ); - if( ptwXY2->interpolation == ptwXY_interpolationFlat ) return( n ); - length = n->length - 1; - if( length > 0 ) { - x2 = n->points[length].x; - for( i = length - 1; i >= 0; i-- ) { /* Find and add y zeros not currently in n's. */ - x1 = n->points[i].x; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x1, &u1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x2, &u2 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, x1, &v1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, x2, &v2 ) ) != nfu_Okay ) goto Err; - found = 0; - if( u1 * u2 < 0 ) { - xz1 = ( u1 * x2 - u2 * x1 ) / ( u1 - u2 ); - if( ( *status = ptwXY_setValueAtX( n, xz1, 0. ) ) != nfu_Okay ) goto Err; - found = 1; - } - if( v1 * v2 < 0 ) { - xz2 = ( v1 * x2 - v2 * x1 ) / ( v1 - v2 ); - if( ( *status = ptwXY_setValueAtX( n, xz2, 0. ) ) != nfu_Okay ) goto Err; - found += 1; - } - if( found > 1 ) { - x = 0.5 * ( xz1 + xz2 ); - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x, &u1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, x, &v1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( n, x, u1 * v1 ) ) != nfu_Okay ) goto Err; - } - x2 = x1; - } - - if( ( *status = ptwXY_simpleCoalescePoints( n ) ) != nfu_Okay ) goto Err; - length = n->length; - x2 = n->points[n->length-1].x; - y2 = n->points[n->length-1].y; - for( i = n->length - 2; i >= 0; i-- ) { /* Make interpolation fit accuracy. Work backwards so new points will not mess up loop. */ - x1 = n->points[i].x; - y1 = n->points[i].y; - if( ( *status = ptwXY_mul2_s_ptwXY( n, ptwXY1, ptwXY2, x1, y1, x2, y2, 0 ) ) != nfu_Okay ) goto Err; - x2 = x1; - y2 = y1; - } - ptwXY_update_biSectionMax( n, (double) length ); - } - return( n ); - -Err: - if( n ) ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_mul2_s_ptwXY( ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, int level ) { - - nfu_status status; - double u1, u2, v1, v2, x, y, yp, dx, a1, a2; - - if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( std::fabs( x1 ) + std::fabs( x2 ) ) ) return( nfu_Okay ); - if( level >= n->biSectionMax ) return( nfu_Okay ); - level++; - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x1, &u1 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x2, &u2 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, x1, &v1 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, x2, &v2 ) ) != nfu_Okay ) return( status ); - if( ( u1 == u2 ) || ( v1 == v2 ) ) return( nfu_Okay ); - a1 = u1 * v1; - if( y1 == 0 ) a1 = 0.; /* Fix rounding problem. */ - a2 = u2 * v2; - if( y2 == 0 ) a2 = 0.; /* Fix rounding problem. */ - if( ( a1 == 0. ) || ( a2 == 0. ) ) { /* Handle special case of 0 where accuracy can never be met. */ - x = 0.5 * ( x1 + x2 ); } - else { - if( ( a1 * a2 < 0. ) ) return( nfu_Okay ); /* Assume rounding error and no point needed as zero crossings are set in ptwXY_mul2_ptwXY. */ - a1 = std::sqrt( std::fabs( a1 ) ); - a2 = std::sqrt( std::fabs( a2 ) ); - x = ( a2 * x1 + a1 * x2 ) / ( a2 + a1 ); - } - dx = x2 - x1; - yp = ( u1 * v1 * ( x2 - x ) + u2 * v2 * ( x - x1 ) ) / dx; - y = ( u1 * ( x2 - x ) + u2 * ( x - x1 ) ) * ( v1 * ( x2 - x ) + v2 * ( x - x1 ) ) / ( dx * dx ); - if( std::fabs( y - yp ) < std::fabs( y * n->accuracy ) ) return( nfu_Okay ); - if( ( status = ptwXY_setValueAtX( n, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_mul2_s_ptwXY( n, ptwXY1, ptwXY2, x, y, x2, y2, level ) ) != nfu_Okay ) return( status ); - status = ptwXY_mul2_s_ptwXY( n, ptwXY1, ptwXY2, x1, y1, x, y, level ); - return( status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_div_ptwXY( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide ) { - - int isNAN1, isNAN2; - int64_t i, j, k, zeros = 0, length, iYs; - double x1, x2, y1, y2, u1, u2, v1, v2, y, xz, nan = nfu_getNAN( ), s1, s2; - ptwXYPoints *n = NULL; - ptwXYPoint *p; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY2 ) ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ( ptwXY1->interpolation == ptwXY_interpolationFlat ) || ( ptwXY2->interpolation == ptwXY_interpolationFlat ) ) - return( ptwXY_div_ptwXY_forFlats( ptwXY1, ptwXY2, status, safeDivide ) ); - - if( ( *status = ptwXY_areDomainsMutual( ptwXY1, ptwXY2 ) ) != nfu_Okay ) return( NULL ); - if( ( n = ptwXY_union( ptwXY1, ptwXY2, status, ptwXY_union_fill | ptwXY_union_mergeClosePoints ) ) != NULL ) { - for( i = 0, p = n->points; i < n->length; i++, p++ ) { - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, p->x, &y ) ) != nfu_Okay ) goto Err; - if( y == 0. ) { - if( p->y == 0. ) { - iYs = 0; - y1 = 0.; - y2 = 0.; - if( i > 0 ) { - if( ( *status = ptwXY_getSlopeAtX( ptwXY1, p->x, '-', &s1 ) ) != nfu_Okay ) { - if( *status != nfu_XOutsideDomain ) goto Err; - s1 = 0.; - } - if( ( *status = ptwXY_getSlopeAtX( ptwXY2, p->x, '-', &s2 ) ) != nfu_Okay ) goto Err; - if( s2 == 0. ) { - y1 = nan; } - else { - y1 = s1 / s2; - } - iYs++; - } - if( i < ( n->length - 1 ) ) { - if( ( *status = ptwXY_getSlopeAtX( ptwXY1, p->x, '+', &s1 ) ) != nfu_Okay ) { - if( *status != nfu_XOutsideDomain ) goto Err; - s1 = 0.; - } - if( ( *status = ptwXY_getSlopeAtX( ptwXY2, p->x, '+', &s2 ) ) != nfu_Okay ) goto Err; - if( s2 == 0. ) { - y2 = nan; } - else { - y2 = s1 / s2; - } - iYs++; - } - p->y = ( y1 + y2 ) / iYs; - if( nfu_isNAN( p->y ) ) zeros++; } - else { - if( !safeDivide ) { - *status = nfu_divByZero; - goto Err; - } - zeros++; - p->y = nan; - } } - else { - p->y /= y; - } - } - length = n->length - 1; - if( length > 0 ) { - x2 = n->points[length].x; - for( i = length - 1; i >= 0; i-- ) { /* Find and add y zeros and NAN not currently in n's. */ - x1 = n->points[i].x; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x1, &u1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x2, &u2 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX( ptwXY2, x1, &v1 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_getValueAtX( ptwXY2, x2, &v2 ) ) != nfu_Okay ) goto Err; - if( u1 * u2 < 0 ) { - xz = ( u1 * x2 - u2 * x1 ) / ( u1 - u2 ); - if( ( *status = ptwXY_setValueAtX( n, xz, 0. ) ) != nfu_Okay ) goto Err; - } - if( v1 * v2 < 0 ) { - if( !safeDivide ) { - *status = nfu_divByZero; - goto Err; - } - zeros++; - xz = ( v1 * x2 - v2 * x1 ) / ( v1 - v2 ); - if( ( *status = ptwXY_setValueAtX( n, xz, nan ) ) != nfu_Okay ) goto Err; - } - x2 = x1; - } - if( ( *status = ptwXY_simpleCoalescePoints( n ) ) != nfu_Okay ) goto Err; - length = n->length; - x2 = n->points[n->length-1].x; - y2 = n->points[n->length-1].y; - isNAN2 = nfu_isNAN( y2 ); - for( i = n->length - 2; i >= 0; i-- ) { /* Make interpolation fit accuracy. Work backwards so new points will not mess up loop. */ - x1 = n->points[i].x; - y1 = n->points[i].y; - isNAN1 = nfu_isNAN( y1 ); - if( !isNAN1 || !isNAN2 ) { - if( ( *status = ptwXY_div_s_ptwXY( n, ptwXY1, ptwXY2, x1, y1, x2, y2, 0, isNAN1, isNAN2 ) ) != nfu_Okay ) goto Err; - } - x2 = x1; - y2 = y1; - isNAN2 = isNAN1; - } - ptwXY_update_biSectionMax( n, (double) length ); - if( zeros ) { - if( ( *status = ptwXY_simpleCoalescePoints( n ) ) != nfu_Okay ) goto Err; - for( i = 0; i < n->length; i++ ) if( !nfu_isNAN( n->points[i].y ) ) break; - if( nfu_isNAN( n->points[0].y ) ) { /* Special case for first point. */ - if( i == n->length ) { /* They are all nan's, what now? */ - zeros = 0; - for( i = 0; i < n->length; i++ ) n->points[i].y = 0.; } - else { - n->points[0].y = 2. * n->points[i].y; - zeros--; - } - } - for( i = n->length - 1; i > 0; i-- ) if( !nfu_isNAN( n->points[i].y ) ) break; - if( nfu_isNAN( n->points[n->length - 1].y ) ) { /* Special case for last point. */ - n->points[n->length - 1].y = 2. * n->points[i].y; - zeros--; - } - if( zeros ) { - for( i = 0; i < n->length; i++ ) if( nfu_isNAN( n->points[i].y ) ) break; - for( k = i + 1, j = i; k < n->length; k++ ) { - if( nfu_isNAN( n->points[k].y ) ) continue; - n->points[j] = n->points[k]; - j++; - } - n->length = j; - } - } - } - } - return( n ); - -Err: - if( n ) ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_div_s_ptwXY( ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, - int level, int isNAN1, int isNAN2 ) { - - nfu_status status; - double u1, u2, v1, v2, v, x, y, yp, dx, a1, a2; - - if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( std::fabs( x1 ) + std::fabs( x2 ) ) ) return( nfu_Okay ); - if( level >= n->biSectionMax ) return( nfu_Okay ); - level++; - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x1, &u1 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x2, &u2 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX( ptwXY2, x1, &v1 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX( ptwXY2, x2, &v2 ) ) != nfu_Okay ) return( status ); - if( isNAN1 ) { - x = 0.5 * ( x1 + x2 ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x, &u1 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX( ptwXY2, x, &v1 ) ) != nfu_Okay ) return( status ); - y = u1 / v1; } - else if( isNAN2 ) { - x = 0.5 * ( x1 + x2 ); - if( ( status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY1, x, &u2 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_getValueAtX( ptwXY2, x, &v2 ) ) != nfu_Okay ) return( status ); - y = u2 / v2; } - else { - if( ( u1 == u2 ) || ( v1 == v2 ) ) return( nfu_Okay ); - if( ( y1 == 0. ) || ( y2 == 0. ) ) { /* Handle special case of 0 where accuracy can never be met. */ - x = 0.5 * ( x1 + x2 ); } - else { - if( ( u1 * u2 < 0. ) ) return( nfu_Okay ); /* Assume rounding error and no point needed. */ - a1 = std::sqrt( std::fabs( u1 ) ); - a2 = std::sqrt( std::fabs( u2 ) ); - x = ( a2 * x1 + a1 * x2 ) / ( a2 + a1 ); - } - dx = x2 - x1; - v = v1 * ( x2 - x ) + v2 * ( x - x1 ); - if( ( v1 == 0. ) || ( v2 == 0. ) || ( v == 0. ) ) return( nfu_Okay ); /* Probably not correct, but I had to do something. */ - yp = ( u1 / v1 * ( x2 - x ) + u2 / v2 * ( x - x1 ) ) / dx; - y = ( u1 * ( x2 - x ) + u2 * ( x - x1 ) ) / v; - if( std::fabs( y - yp ) < std::fabs( y * n->accuracy ) ) return( nfu_Okay ); - } - if( ( status = ptwXY_setValueAtX( n, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_div_s_ptwXY( n, ptwXY1, ptwXY2, x, y, x2, y2, level, 0, isNAN2 ) ) != nfu_Okay ) return( status ); - status = ptwXY_div_s_ptwXY( n, ptwXY1, ptwXY2, x1, y1, x, y, level, isNAN1, 0 ); - return( status ); -} -/* -************************************************************ -*/ -static ptwXYPoints *ptwXY_div_ptwXY_forFlats( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide ) { - - int64_t i; - ptwXYPoints *n = NULL; - ptwXYPoint *p; - double y; - - *status = nfu_invalidInterpolation; - if( ptwXY1->interpolation != ptwXY_interpolationFlat ) return( NULL ); - if( ptwXY2->interpolation != ptwXY_interpolationFlat ) return( NULL ); - if( ( n = ptwXY_union( ptwXY1, ptwXY2, status, ptwXY_union_fill | ptwXY_union_mergeClosePoints ) ) != NULL ) { - for( i = 0, p = n->points; i < n->length; i++, p++ ) { - if( ( *status = ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXY2, p->x, &y ) ) != nfu_Okay ) goto Err; - if( y == 0. ) { - if( ( safeDivide ) && ( p->y == 0 ) ) { - *status = nfu_divByZero; - goto Err; - } } - else { - p->y /= y; - } - } - } - return( n ); - -Err: - if( n ) ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_getValueAtX_ignore_XOutsideDomainError( ptwXYPoints *ptwXY1, double x, double *y ) { - - nfu_status status = ptwXY_getValueAtX( ptwXY1, x, y ); - - if( status == nfu_XOutsideDomain ) status = nfu_Okay; - return( status ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_convenient.c b/source/processes/hadronic/models/lend/src/ptwXY_convenient.c new file mode 100644 index 0000000000..da1201e520 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_convenient.c @@ -0,0 +1,892 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "ptwXY.h" + +static nfu_status ptwXY_createGaussianCenteredSigma1_2( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, + double x2, double y2, int addX1Point ); +/* +************************************************************ +*/ +ptwXPoints *ptwXY_getXArray( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + int64_t i, n; + ptwXPoints *xArray; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + n = ptwXY->length; + + if( ( xArray = ptwX_new( smr, n ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + for( i = 0; i < n; i++ ) xArray->points[i] = ptwXY->points[i].x; + xArray->length = n; + + return( xArray ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_ysMappedToXs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *Xs, int64_t *offset ) { + + int64_t iXY, iX, nXY = ptwXY_length( NULL, ptwXY ), nX = ptwX_length( NULL, Xs ); + ptwXYPoint *point1, *point2; + ptwXY_interpolation interpolation = ptwXY_getInterpolation( ptwXY ); + ptwXPoints *Ys = NULL; + + *offset = 0; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( Xs->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( NULL ); + } + + if( ( nXY == 1 ) || ( nX == 1 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "number of points less than 2: %lld %lld", nXY, nX ); + return( NULL ); + } + + if( ( nXY == 0 ) || ( nX == 0 ) ) { + if( ( Ys = ptwX_new( smr, 0 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + return( Ys ); + } + + point1 = &ptwXY->points[0]; + point2 = &ptwXY->points[nXY-1]; + + for( iX = 0; iX < nX; ++iX ) { + if( Xs->points[iX] >= point1->x ) break; + } + *offset = iX; + + for( iX = 0; iX < nX; ++iX ) { + if( Xs->points[iX] > point2->x ) break; + } + nX = iX; + iX = *offset; + + if( ( Ys = ptwX_new( smr, nX - iX ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( nX - iX < 2 ) return( Ys ); + + for( iXY = 1; iXY < nXY; ++iXY ) { + point2 = &ptwXY->points[iXY]; + if( point2->x >= Xs->points[iX] ) break; + point1 = point2; + } + + for( ; iXY < nXY; ++iXY ) { + point2 = &ptwXY->points[iXY]; + + while( iX < nX ) { + double xValue = Xs->points[iX], yValue; + + if( xValue > point2->x ) break; + + if( ptwXY_interpolatePoint( smr, interpolation, xValue, &yValue, point1->x, point1->y, point2->x, point2->y ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwX_free( Ys ); + return( NULL ); + } + if( ptwX_setPointAtIndex( smr, Ys, ptwX_length( NULL, Ys ), yValue ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwX_free( Ys ); + return( NULL ); + } + ++iX; + } + point1 = point2; + } + + return( Ys ); +} + +/* +************************************************************ +*/ +nfu_status ptwXY_mapToXsAndAdd( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, int64_t a_offset, int64_t a_length, double const *a_Xs, + double *a_results, double a_scaleFractor ) { + + int64_t offset, startIndex, length, length_m1; + double x1, x2, y1, y2; + ptwXYPoint *point; + ptwXY_interpolation interpolation = ptwXY_getInterpolation( a_ptwXY ); + double xValue, yValue; + + if( a_offset < 0 ) a_offset = 0; /* This and next line also ensure that a_length > 0. */ + if( a_offset >= a_length ) return( nfu_Okay ); + + offset = a_offset; + nfu_status status = ptwXY_startIndex( a_smr, a_ptwXY, a_Xs[a_offset], &startIndex, &length ); + if( status != nfu_Okay ) return( status ); + if( startIndex < 0 ) { + if( startIndex == -2 ) { + if( a_Xs[a_length-1] >= a_ptwXY->points[0].x ) startIndex = 0; /* Case A. */ + } + if( startIndex < 0 ) return( nfu_Okay ); + } + + length_m1 = length - 1; + point = &a_ptwXY->points[startIndex]; + x1 = point->x; + y1 = point->y; + while( startIndex < length_m1 ) { + ++startIndex; + point = &a_ptwXY->points[startIndex]; + x2 = point->x; + y2 = point->y; + + for( ; offset < a_length; ++offset ) { + xValue = a_Xs[offset]; + + if( xValue < x1 ) continue; /* Can happend per case A above. */ + if( xValue > x2 ) break; + + if( ( status = ptwXY_interpolatePoint( a_smr, interpolation, xValue, &yValue, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( a_smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + a_results[offset] += a_scaleFractor * yValue; + } + x1 = x2; + y1 = y2; + } + + return( nfu_Okay ); +} + +/* +************************************************************ +*/ +nfu_status ptwXY_dullEdges( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly ) { + +#define minEps 5e-16 + + nfu_status status; + double xm, xp, dx, y, x1, y1, x2, y2, sign; + ptwXYPoint *p; + +/* This routine can only be used for linear interpolation for the y-axes since for log interpolation, y cannot be 0. +This needs to be fixed and documented. */ + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( nfu_otherInterpolation ); + } + + if( ptwXY->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Flat interpolation not allowed." ); + return( nfu_invalidInterpolation ); + } + + if( ptwXY->length < 2 ) return( nfu_Okay ); + + if( lowerEps != 0. ) { + if( fabs( lowerEps ) < minEps ) { + sign = 1; + if( lowerEps < 0. ) sign = -1; + lowerEps = sign * minEps; + } + + p = ptwXY_getPointAtIndex_Unsafely( ptwXY, 0 ); + x1 = p->x; + y1 = p->y; + p = ptwXY_getPointAtIndex_Unsafely( ptwXY, 1 ); + x2 = p->x; + y2 = p->y; + + if( y1 != 0. ) { + dx = fabs( x1 * lowerEps ); + if( x1 == 0 ) dx = fabs( lowerEps ); + xm = x1 - dx; + xp = x1 + dx; + if( ( xp + dx ) < x2 ) { + if( ( status = ptwXY_getValueAtX( smr, ptwXY, xp, &y ) ) != nfu_Okay ) return( ptwXY->status = status ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, xp, y ) ) != nfu_Okay ) return( ptwXY->status = status ); } + else { + xp = x2; + y = y2; + } + if( lowerEps > 0 ) { + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x1, 0. ) ) != nfu_Okay ) return( ptwXY->status = status ); } + else { + if( ( xm < 0. ) && ( x1 >= 0. ) && positiveXOnly ) { + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x1, 0. ) ) != nfu_Okay ) return( ptwXY->status = status ); } + else { + if( ( status = ptwXY_setValueAtX( smr, ptwXY, xm, 0. ) ) != nfu_Okay ) return( ptwXY->status = status ); + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, x1, &y, xm, 0., xp, y ) ) != nfu_Okay ) + return( ptwXY->status = status ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x1, y ) ) != nfu_Okay ) return( ptwXY->status = status ); + } + } + } + } + + if( upperEps != 0. ) { + if( fabs( upperEps ) < minEps ) { + sign = 1; + if( upperEps < 0. ) sign = -1; + upperEps = sign * minEps; + } + + p = ptwXY_getPointAtIndex_Unsafely( ptwXY, ptwXY->length - 2 ); + x1 = p->x; + y1 = p->y; + p = ptwXY_getPointAtIndex_Unsafely( ptwXY, ptwXY->length - 1 ); + x2 = p->x; + y2 = p->y; + + if( y2 != 0. ) { + dx = fabs( x2 * upperEps ); + if( x2 == 0 ) dx = fabs( upperEps ); + xm = x2 - dx; + xp = x2 + dx; + if( ( xm - dx ) > x1 ) { + if( ( status = ptwXY_getValueAtX( smr, ptwXY, xm, &y ) ) != nfu_Okay ) return( ptwXY->status = status ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, xm, y ) ) != nfu_Okay ) return( ptwXY->status = status ); } + else { + xm = x1; + y = y1; + } + if( upperEps < 0 ) { + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x2, 0. ) ) != nfu_Okay ) return( ptwXY->status = status ); } + else { + if( ( status = ptwXY_setValueAtX( smr, ptwXY, xp, 0. ) ) != nfu_Okay ) return( ptwXY->status = status ); + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, x2, &y, xm, y, xp, 0. ) ) != nfu_Okay ) + return( ptwXY->status = status ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x2, y ) ) != nfu_Okay ) return( ptwXY->status = status ); + } + } + } + + return( ptwXY->status ); + +#undef minEps +} +/* +************************************************************ +*/ +nfu_status ptwXY_mergeClosePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, double epsilon ) { + + int64_t i, i1, j, k, n = ptwXY->length; + double x, y; + ptwXYPoint *p1, *p2; + + if( n < 2 ) return( ptwXY->status ); + if( epsilon < 4 * DBL_EPSILON ) epsilon = 4 * DBL_EPSILON; + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + p2 = ptwXY->points; + x = p2->x; + for( i1 = 1, p2++; i1 < ( n - 1 ); i1++, p2++ ) { /* The first point shall remain the first point and all points close to it are deleted. */ + if( ( p2->x - x ) > 0.5 * epsilon * ( fabs( x ) + fabs( p2->x ) ) ) break; + } + if( i1 != 1 ) { + for( i = i1, p1 = &(ptwXY->points[1]); i < n; i++, p1++, p2++ ) *p1 = *p2; + n = ptwXY->length = ptwXY->length - i1 + 1; + } + + p1 = &(ptwXY->points[n-1]); + x = p1->x; + for( i1 = n - 2, p1--; i1 > 0; i1--, p1-- ) { /* The last point shall remain the last point and all points close to it are deleted. */ + if( x - p1->x > 0.5 * epsilon * ( fabs( x ) + fabs( p1->x ) ) ) break; + } + if( i1 != ( n - 2 ) ) { + ptwXY->points[i1 + 1] = ptwXY->points[n - 1]; + n = ptwXY->length = i1 + 2; + } + + for( i = 1; i < n - 1; i++ ) { + p1 = &(ptwXY->points[i]); + x = p1->x; + y = p1->y; + for( j = i + 1, p2 = &(ptwXY->points[i+1]); j < n - 1; j++, p2++ ) { + if( ( p2->x - p1->x ) > 0.5 * epsilon * ( fabs( p2->x ) + fabs( p1->x ) ) ) break; + x += p2->x; + y += p2->y; + } + if( ( k = ( j - i ) ) > 1 ) { + p1->x = x / k; + p1->y = y / k; + for( p1 = &(ptwXY->points[i+1]); j < n; j++, p1++, p2++ ) *p1 = *p2; + n -= ( k - 1 ); + } + } + ptwXY->length = n; + + return( ptwXY->status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_intersectionWith_ptwX( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *ptwX ) { + + int64_t i, i1, i2, lengthX = ptwX_length( smr, ptwX ); + double x, y, domainMin, domainMax; + ptwXYPoints *n = NULL; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid ptwXPoints." ); + return( NULL ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( NULL ); + } + + if( ( n = ptwXY_clone( smr, ptwXY ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwXY->length == 0 ) return( n ); + domainMin = ptwXY->points[0].x; + domainMax = ptwXY->points[ptwXY->length - 1].x; + + if( ( domainMin >= ptwX->points[lengthX-1] ) || ( domainMax <= ptwX->points[0] ) ) { /* No overlap. */ + n->length = 0; + return( n ); + } + + for( i = 0; i < lengthX; i++ ) { /* Fill in ptwXY at x-points in ptwX. */ + x = ptwX->points[i]; + if( x <= domainMin ) continue; + if( x >= domainMax ) break; + if( ptwXY_getValueAtX( smr, ptwXY, x, &y ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, n, x, y ) != nfu_Okay ) goto Err; + } + if( ptwXY_simpleCoalescePoints( smr, n ) != nfu_Okay ) goto Err; + + i1 = 0; + i2 = n->length - 1; + if( lengthX > 0 ) { + x = ptwX->points[0]; + if( x > n->points[i1].x ) { + for( ; i1 < n->length; i1++ ) { + if( n->points[i1].x == x ) break; + } + } + + x = ptwX->points[lengthX - 1]; + if( x < n->points[i2].x ) { + for( ; i2 > i1; i2-- ) { + if( n->points[i2].x == x ) break; + } + } + } + i2++; + + if( i1 != 0 ) { + for( i = i1; i < i2; i++ ) n->points[i - i1] = n->points[i]; + } + n->length = i2 - i1; + + return( n ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n ); + return( NULL ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_areDomainsMutual( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { + + nfu_status status = nfu_Okay; + int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; + ptwXYPoint *xy1, *xy2; + + if( ptwXY1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1." ); + return( ptwXY1->status ); + } + + if( ptwXY2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( ptwXY2->status ); + } + + if( n1 == 0 ) return( nfu_empty ); + if( n2 == 0 ) return( nfu_empty ); + if( n1 < 2 ) { + status = nfu_tooFewPoints; } + else if( n2 < 2 ) { + status = nfu_tooFewPoints; } + else { + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); + if( xy1->x < xy2->x ) { + if( xy2->y != 0. ) status = nfu_domainsNotMutual; } + else if( xy1->x > xy2->x ) { + if( xy1->y != 0. ) status = nfu_domainsNotMutual; + } + + if( status == nfu_Okay ) { + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); + if( xy1->x < xy2->x ) { + if( xy1->y != 0. ) status = nfu_domainsNotMutual; } + else if( xy1->x > xy2->x ) { + if( xy2->y != 0. ) status = nfu_domainsNotMutual; + } + } + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_tweakDomainsToMutualify( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + int epsilonFactor, double epsilon ) { + + nfu_status status = nfu_Okay; + int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; + double sum, diff; + ptwXYPoint *xy1, *xy2; + + epsilon = fabs( epsilon ) + fabs( epsilonFactor * DBL_EPSILON ); + + if( ptwXY1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1." ); + return( ptwXY1->status ); + } + if( ptwXY2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( ptwXY2->status ); + } + + if( n1 == 0 ) return( nfu_empty ); + if( n2 == 0 ) return( nfu_empty ); + if( n1 < 2 ) { + status = nfu_tooFewPoints; } + else if( n2 < 2 ) { + status = nfu_tooFewPoints; } + else { + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); + if( xy1->x < xy2->x ) { + if( xy2->y != 0. ) { + sum = fabs( xy1->x ) + fabs( xy2->x ); + diff = fabs( xy2->x - xy1->x ); + if( diff > epsilon * sum ) { + status = nfu_domainsNotMutual; } + else { + xy1->x = xy2->x; + } + } } + else if( xy1->x > xy2->x ) { + if( xy1->y != 0. ) { + sum = fabs( xy1->x ) + fabs( xy2->x ); + diff = fabs( xy2->x - xy1->x ); + if( diff > epsilon * sum ) { + status = nfu_domainsNotMutual; } + else { + xy2->x = xy1->x; + } + } + } + + if( status == nfu_Okay ) { + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); + if( xy1->x < xy2->x ) { + if( xy1->y != 0. ) { + sum = fabs( xy1->x ) + fabs( xy2->x ); + diff = fabs( xy2->x - xy1->x ); + if( diff > epsilon * sum ) { + status = nfu_domainsNotMutual; } + else { + xy2->x = xy1->x; + } + } } + else if( xy1->x > xy2->x ) { + if( xy2->y != 0. ) { + sum = fabs( xy1->x ) + fabs( xy2->x ); + diff = fabs( xy2->x - xy1->x ); + if( diff > epsilon * sum ) { + status = nfu_domainsNotMutual; } + else { + xy1->x = xy2->x; + } + } + } + } + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_mutualifyDomains( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, + int positiveXOnly1, ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2 ) { + + nfu_status status; + int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; + int code1, code2; + ptwXYPoint *xy1, *xy2; + + switch( status = ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ) ) { + case nfu_Okay : + case nfu_empty : + return( nfu_Okay ); + case nfu_domainsNotMutual : + break; + default : + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed for source1." ); + return( nfu_otherInterpolation ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed for source2." ); + return( nfu_otherInterpolation ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Flat interpolation not allowed for source1." ); + return( nfu_invalidInterpolation ); + } + if( ptwXY2->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Flat interpolation not allowed for source2." ); + return( nfu_invalidInterpolation ); + } + + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); + code1 = 0; + if( xy1->x < xy2->x ) { + lowerEps1 = 0.; + if( xy2->y == 0. ) { + lowerEps2 = 0.; } + else { + if( lowerEps2 == 0 ) { + code1 = -1; } + else { + if( ( xy2->x - xy1->x ) < lowerEps2 * ( fabs( xy1->x ) + fabs( xy2->x ) ) ) { + lowerEps2 = 0; + xy1->x = xy2->x; + status = ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ); + } + } + } } + else if( xy1->x > xy2->x ) { + lowerEps2 = 0.; + if( xy1->y == 0. ) { + lowerEps1 = 0.; } + else { + if( lowerEps1 == 0 ) { + code1 = 1; } + else { + if( ( xy1->x - xy2->x ) < lowerEps1 * ( fabs( xy1->x ) + fabs( xy2->x ) ) ) { + lowerEps1 = 0; + xy2->x = xy1->x; + status = ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ); + } + } + } } + else { + lowerEps1 = lowerEps2 = 0.; + } + + xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); + xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); + code2 = 0; + if( xy1->x < xy2->x ) { + upperEps2 = 0.; + if( xy1->y == 0. ) { + upperEps1 = 0.; } + else { + if( upperEps1 == 0 ) { + code2 = -1; } + else { + if( ( xy2->x - xy1->x ) < upperEps1 * ( fabs( xy1->x ) + fabs( xy2->x ) ) ) { + upperEps1 = 0; + xy2->x = xy1->x; + status = ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ); + } + } + } } + else if( xy1->x > xy2->x ) { + upperEps1 = 0.; + if( xy2->y == 0. ) { + upperEps2 = 0.; } + else { + if( upperEps2 == 0 ) { + code2 = 1; } + else { + if( ( xy1->x - xy2->x ) < upperEps2 * ( fabs( xy1->x ) + fabs( xy2->x ) ) ) { + upperEps2 = 0; + xy1->x = xy2->x; + status = ptwXY_areDomainsMutual( smr, ptwXY1, ptwXY2 ); + } + } + } } + else { + upperEps1 = upperEps2 = 0.; + } + + if( ( lowerEps1 != 0. ) || ( upperEps1 != 0. ) ) { + if( ( status = ptwXY_dullEdges( smr, ptwXY1, lowerEps1, upperEps1, positiveXOnly1 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + } + if( ( lowerEps2 != 0. ) || ( upperEps2 != 0. ) ) { + if( ( status = ptwXY_dullEdges( smr, ptwXY2, lowerEps2, upperEps2, positiveXOnly2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + } + + if( status == nfu_domainsNotMutual ) { + char str[256] = ""; + + if( code1 == 1 ) strcat( str, " lowerEps1" ); + if( code1 == -1 ) strcat( str, " lowerEps2" ); + if( code2 == 1 ) strcat( str, " upperEps2" ); + if( code2 == -1 ) strcat( str, " upperEps1" ); + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, + "The following inputs are 0 and must be a non 0 value: %s.", str ); + status = nfu_badInput; + } + + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_copyToC_XY( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, + int64_t allocatedSize, int64_t *numberOfPoints, double *xys ) { + + int64_t i; + double *d = xys; + ptwXYPoint *pointFrom; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( index1 < 0 ) index1 = 0; + if( index2 > ptwXY->length ) index2 = ptwXY->length; + if( index2 < index1 ) index2 = index1; + *numberOfPoints = index2 - index1; + if( allocatedSize < ( index2 - index1 ) ) return( nfu_insufficientMemory ); + + for( i = index1, pointFrom = ptwXY->points; i < index2; i++, pointFrom++ ) { + *(d++) = pointFrom->x; + *(d++) = pointFrom->y; + } + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_valuesToC_XsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, double **xs, double **ys ) { + + int64_t i1, length; + double *xps, *yps; + ptwXYPoint *pointFrom; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + length = ptwXY_length( NULL, ptwXY ); + + if( ( *xs = (double *) smr_malloc2( smr, (size_t) length * sizeof( double ), 0, "xs" ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_mallocError ); + } + if( ( *ys = (double *) smr_malloc2( smr, (size_t) length * sizeof( double ), 0, "ys" ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + smr_freeMemory2( *xs ); + return( nfu_mallocError ); + } + + for( i1 = 0, pointFrom = ptwXY->points, xps = *xs, yps = *ys; i1 < length; ++i1, ++pointFrom, ++xps, ++yps ) { + *xps = pointFrom->x; + *yps = pointFrom->y; + } + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_valueTo_ptwXY( statusMessageReporting *smr, double x1, double x2, double y ) { + + ptwXYPoints *n1; + + if( x1 >= x2 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XNotAscending, + "X-values not ascend: x1 = %.17e, x2 = %.17e", x1, x2 ); + return( NULL ); + } + if( ( n1 = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, ptwXY_maxBiSectionMax, ptwXY_minAccuracy, 2, 0, 0 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ptwXY_setValueAtX( smr, n1, x1, y ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, n1, x2, y ) != nfu_Okay ) goto Err; + return( n1 ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n1 ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createGaussianCenteredSigma1( statusMessageReporting *smr, double accuracy ) { + + int64_t i, n; + ptwXYPoint *pm, *pp; + double x1, y1, x2, y2, accuracy2, rangeMin = 1e-10; + ptwXYPoints *gaussian; + + if( accuracy < 1e-5 ) accuracy = 1e-5; + if( accuracy > 1e-1 ) accuracy = 1e-1; + if( ( gaussian = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, 1., accuracy, 200, 100, 0 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + accuracy2 = accuracy = gaussian->accuracy; + if( accuracy2 > 5e-3 ) accuracy2 = 5e-3; + + x1 = -sqrt( -2. * log( rangeMin ) ); + y1 = rangeMin; + x2 = -5.2; + y2 = exp( -0.5 * x2 * x2 ); + if( ptwXY_setValueAtX( smr, gaussian, x1, y1 ) != nfu_Okay ) goto Err; + gaussian->accuracy = 20 * accuracy2; + if( ptwXY_createGaussianCenteredSigma1_2( smr, gaussian, x1, y1, x2, y2, 1 ) != nfu_Okay ) goto Err; + x1 = x2; + y1 = y2; + x2 = -4.; + y2 = exp( -0.5 * x2 * x2 ); + gaussian->accuracy = 5 * accuracy2; + if( ptwXY_createGaussianCenteredSigma1_2( smr, gaussian, x1, y1, x2, y2, 1 ) != nfu_Okay ) goto Err; + x1 = x2; + y1 = y2; + x2 = -1; + y2 = exp( -0.5 * x2 * x2 ); + gaussian->accuracy = accuracy; + if( ptwXY_createGaussianCenteredSigma1_2( smr, gaussian, x1, y1, x2, y2, 1 ) != nfu_Okay ) goto Err; + x1 = x2; + y1 = y2; + x2 = 0; + y2 = exp( -0.5 * x2 * x2 ); + if( ptwXY_createGaussianCenteredSigma1_2( smr, gaussian, x1, y1, x2, y2, 1 ) != nfu_Okay ) goto Err; + + n = gaussian->length; + if( ptwXY_coalescePoints( smr, gaussian, 2 * n + 1, NULL, 0 ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, gaussian, 0., 1. ) != nfu_Okay ) goto Err; + pp = &(gaussian->points[gaussian->length]); + for( i = 0, pm = pp - 2; i < n; i++, pp++, pm-- ) { + *pp = *pm; + pp->x *= -1; + } + gaussian->length = 2 * n + 1; + + return( gaussian ); + +Err: + ptwXY_free( gaussian ); + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_createGaussianCenteredSigma1_2( statusMessageReporting *smr, ptwXYPoints *ptwXY, + double x1, double y1, double x2, double y2, int addX1Point ) { + + nfu_status status = nfu_Okay; + int morePoints = 0; + double x = 0.5 * ( x1 + x2 ); + double y = exp( -0.5 * x * x ), rangeMin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); + + if( fabs( y - rangeMin ) > y * ptwXY->accuracy ) morePoints = 1; + if( morePoints && ( status = ptwXY_createGaussianCenteredSigma1_2( smr, ptwXY, x, y, x2, y2, 0 ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x, y ) ) != nfu_Okay ) return( status ); + if( morePoints && ( status = ptwXY_createGaussianCenteredSigma1_2( smr, ptwXY, x1, y1, x, y, 0 ) ) != nfu_Okay ) return( status ); + if( addX1Point ) status = ptwXY_setValueAtX( smr, ptwXY, x1, y1 ); + return( status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createGaussian( statusMessageReporting *smr, double accuracy, double xCenter, double sigma, + double amplitude, double domainMin, double domainMax, double dullEps ) { + + int64_t i; + ptwXYPoints *gaussian, *sliced; + ptwXYPoint *point; + + if( ( gaussian = ptwXY_createGaussianCenteredSigma1( smr, accuracy ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + for( i = 0, point = gaussian->points; i < gaussian->length; i++, point++ ) { + point->x = point->x * sigma + xCenter; + point->y *= amplitude; + } + if( ( gaussian->points[0].x < domainMin ) || ( gaussian->points[gaussian->length - 1].x > domainMax ) ) { + if( ( sliced = ptwXY_domainSlice( smr, gaussian, domainMin, domainMax, 10, 1 ) ) == NULL ) goto Err; + ptwXY_free( gaussian ); + gaussian = sliced; + } + + return( gaussian ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( gaussian ); + return( NULL ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_convenient.cc b/source/processes/hadronic/models/lend/src/ptwXY_convenient.cc deleted file mode 100644 index a7e35a3d03..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_convenient.cc +++ /dev/null @@ -1,593 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -#include -#include "G4Exp.hh" -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static nfu_status ptwXY_createGaussianCenteredSigma1_2( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, int addX1Point ); -/* -************************************************************ -*/ -ptwXPoints *ptwXY_getXArray( ptwXYPoints *ptwXY, nfu_status *status ) { - - int64_t i, n; - ptwXPoints *xArray; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( NULL ); - n = ptwXY->length; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( NULL ); - if( ( xArray = ptwX_new( n, status ) ) == NULL ) return( NULL ); - for( i = 0; i < n; i++ ) xArray->points[i] = ptwXY->points[i].x; - xArray->length = n; - - return( xArray ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_dullEdges( ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly ) { - -#define minEps 5e-16 - - nfu_status status; - double xm, xp, dx, y, x1, y1, x2, y2, sign; - ptwXYPoint *p; - -/* This routine can only be used for linear interpolation for the y-axes since for log interpolation, y cannot be 0. -This needs to be fixed and documented. */ - if( ( status = ptwXY->status ) != nfu_Okay ) return( status ); - if( ptwXY->interpolation == ptwXY_interpolationFlat ) return( nfu_invalidInterpolation ); - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - - if( ptwXY->length < 2 ) return( nfu_Okay ); - - if( lowerEps != 0. ) { - if( std::fabs( lowerEps ) < minEps ) { - sign = 1; - if( lowerEps < 0. ) sign = -1; - lowerEps = sign * minEps; - } - - p = ptwXY_getPointAtIndex_Unsafely( ptwXY, 0 ); - x1 = p->x; - y1 = p->y; - p = ptwXY_getPointAtIndex_Unsafely( ptwXY, 1 ); - x2 = p->x; - y2 = p->y; - - if( y1 != 0. ) { - dx = std::fabs( x1 * lowerEps ); - if( x1 == 0 ) dx = std::fabs( lowerEps ); - xm = x1 - dx; - xp = x1 + dx; - if( ( xp + dx ) < x2 ) { - if( ( status = ptwXY_getValueAtX( ptwXY, xp, &y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY, xp, y ) ) != nfu_Okay ) return( status ); } - else { - xp = x2; - y = y2; - } - if( lowerEps > 0 ) { - if( ( status = ptwXY_setValueAtX( ptwXY, x1, 0. ) ) != nfu_Okay ) return( status ); } - else { - if( ( xm < 0. ) && ( x1 >= 0. ) && positiveXOnly ) { - if( ( status = ptwXY_setValueAtX( ptwXY, x1, 0. ) ) != nfu_Okay ) return( status ); } - else { - if( ( status = ptwXY_setValueAtX( ptwXY, xm, 0. ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_interpolatePoint( ptwXY->interpolation, x1, &y, xm, 0., xp, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY, x1, y ) ) != nfu_Okay ) return( status ); - } - } - } - } - - if( upperEps != 0. ) { - if( std::fabs( upperEps ) < minEps ) { - sign = 1; - if( upperEps < 0. ) sign = -1; - upperEps = sign * minEps; - } - - p = ptwXY_getPointAtIndex_Unsafely( ptwXY, ptwXY->length - 2 ); - x1 = p->x; - y1 = p->y; - p = ptwXY_getPointAtIndex_Unsafely( ptwXY, ptwXY->length - 1 ); - x2 = p->x; - y2 = p->y; - - if( y2 != 0. ) { - dx = std::fabs( x2 * upperEps ); - if( x2 == 0 ) dx = std::fabs( upperEps ); - xm = x2 - dx; - xp = x2 + dx; - if( ( xm - dx ) > x1 ) { - if( ( status = ptwXY_getValueAtX( ptwXY, xm, &y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY, xm, y ) ) != nfu_Okay ) return( status ); } - else { - xm = x1; - y = y1; - } - if( upperEps < 0 ) { - if( ( status = ptwXY_setValueAtX( ptwXY, x2, 0. ) ) != nfu_Okay ) return( status ); } - else { - if( ( status = ptwXY_setValueAtX( ptwXY, xp, 0. ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_interpolatePoint( ptwXY->interpolation, x2, &y, xm, y, xp, 0. ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY, x2, y ) ) != nfu_Okay ) return( status ); - } - } - } - - return( ptwXY->status ); - -#undef minEps -} -/* -************************************************************ -*/ -nfu_status ptwXY_mergeClosePoints( ptwXYPoints *ptwXY, double epsilon ) { - - int64_t i, i1, j, k, n = ptwXY->length; - double x, y; - ptwXYPoint *p1, *p2; - - if( n < 2 ) return( ptwXY->status ); - if( epsilon < 4 * DBL_EPSILON ) epsilon = 4 * DBL_EPSILON; - if( ptwXY_simpleCoalescePoints( ptwXY ) != nfu_Okay ) return( ptwXY->status ); - - p2 = ptwXY->points; - x = p2->x; - for( i1 = 1, p2++; i1 < ( n - 1 ); i1++, p2++ ) { /* The first point shall remain the first point and all points close to it are deleted. */ - if( ( p2->x - x ) > 0.5 * epsilon * ( std::fabs( x ) + std::fabs( p2->x ) ) ) break; - } - if( i1 != 1 ) { - for( i = i1, p1 = &(ptwXY->points[1]); i < n; i++, p1++, p2++ ) *p1 = *p2; - n = ptwXY->length = ptwXY->length - i1 + 1; - } - - p1 = &(ptwXY->points[n-1]); - x = p1->x; - for( i1 = n - 2, p1--; i1 > 0; i1--, p1-- ) { /* The last point shall remain the last point and all points close to it are deleted. */ - if( x - p1->x > 0.5 * epsilon * ( std::fabs( x ) + std::fabs( p1->x ) ) ) break; - } - if( i1 != ( n - 2 ) ) { - ptwXY->points[i1 + 1] = ptwXY->points[n - 1]; - n = ptwXY->length = i1 + 2; - } - - for( i = 1; i < n - 1; i++ ) { - p1 = &(ptwXY->points[i]); - x = p1->x; - y = p1->y; - for( j = i + 1, p2 = &(ptwXY->points[i+1]); j < n - 1; j++, p2++ ) { - if( ( p2->x - p1->x ) > 0.5 * epsilon * ( std::fabs( p2->x ) + std::fabs( p1->x ) ) ) break; - x += p2->x; - y += p2->y; - } - if( ( k = ( j - i ) ) > 1 ) { - p1->x = x / k; - p1->y = y / k; - for( p1 = &(ptwXY->points[i+1]); j < n; j++, p1++, p2++ ) *p1 = *p2; - n -= ( k - 1 ); - } - } - ptwXY->length = n; - - return( ptwXY->status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_intersectionWith_ptwX( ptwXYPoints *ptwXY, ptwXPoints *ptwX, nfu_status *status ) { - - int64_t i, i1, i2, lengthX = ptwX_length( ptwX ); - double x, y, xMin, xMax; - ptwXYPoints *n = NULL; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwX->status ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) goto Err; - *status = nfu_otherInterpolation; - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ( n = ptwXY_clone( ptwXY, status ) ) == NULL ) return( NULL ); - if( ptwXY->length == 0 ) return( n ); - xMin = ptwXY->points[0].x; - xMax = ptwXY->points[ptwXY->length - 1].x; - - if( ( xMin >= ptwX->points[lengthX-1] ) || ( xMax <= ptwX->points[0] ) ) { /* No overlap. */ - n->length = 0; - return( n ); - } - - for( i = 0; i < lengthX; i++ ) { /* Fill in ptwXY at x-points in ptwX. */ - x = ptwX->points[i]; - if( x <= xMin ) continue; - if( x >= xMax ) break; - if( ( *status = ptwXY_getValueAtX( ptwXY, x, &y ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( n, x, y ) ) != nfu_Okay ) goto Err; - } - if( ( *status = ptwXY_simpleCoalescePoints( n ) ) != nfu_Okay ) goto Err; - - i1 = 0; - i2 = n->length - 1; - if( lengthX > 0 ) { - x = ptwX->points[0]; - if( x > n->points[i1].x ) { - for( ; i1 < n->length; i1++ ) { - if( n->points[i1].x == x ) break; - } - } - - x = ptwX->points[lengthX - 1]; - if( x < n->points[i2].x ) { - for( ; i2 > i1; i2-- ) { - if( n->points[i2].x == x ) break; - } - } - } - i2++; - - if( i1 != 0 ) { - for( i = i1; i < i2; i++ ) n->points[i - i1] = n->points[i]; - } - n->length = i2 - i1; - - return( n ); - -Err: - ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_areDomainsMutual( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 ) { - - nfu_status status; - int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; - ptwXYPoint *xy1, *xy2; - - if( ( status = ptwXY1->status ) != nfu_Okay ) return( status ); - if( ( status = ptwXY2->status ) != nfu_Okay ) return( status ); - if( n1 == 0 ) return( nfu_empty ); - if( n2 == 0 ) return( nfu_empty ); - if( n1 < 2 ) { - status = nfu_tooFewPoints; } - else if( n2 < 2 ) { - status = nfu_tooFewPoints; } - else { - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); - if( xy1->x < xy2->x ) { - if( xy2->y != 0. ) status = nfu_domainsNotMutual; } - else if( xy1->x > xy2->x ) { - if( xy1->y != 0. ) status = nfu_domainsNotMutual; - } - - if( status == nfu_Okay ) { - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); - if( xy1->x < xy2->x ) { - if( xy1->y != 0. ) status = nfu_domainsNotMutual; } - else if( xy1->x > xy2->x ) { - if( xy2->y != 0. ) status = nfu_domainsNotMutual; - } - } - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_tweakDomainsToMutualify( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int epsilonFactor, double epsilon ) { - - nfu_status status; - int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; - double sum, diff; - ptwXYPoint *xy1, *xy2; - - epsilon = std::fabs( epsilon ) + std::fabs( epsilonFactor * DBL_EPSILON ); - - if( ( status = ptwXY1->status ) != nfu_Okay ) return( status ); - if( ( status = ptwXY2->status ) != nfu_Okay ) return( status ); - if( n1 == 0 ) return( nfu_empty ); - if( n2 == 0 ) return( nfu_empty ); - if( n1 < 2 ) { - status = nfu_tooFewPoints; } - else if( n2 < 2 ) { - status = nfu_tooFewPoints; } - else { - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); - if( xy1->x < xy2->x ) { - if( xy2->y != 0. ) { - sum = std::fabs( xy1->x ) + std::fabs( xy2->x ); - diff = std::fabs( xy2->x - xy1->x ); - if( diff > epsilon * sum ) { - status = nfu_domainsNotMutual; } - else { - xy1->x = xy2->x; - } - } } - else if( xy1->x > xy2->x ) { - if( xy1->y != 0. ) { - sum = std::fabs( xy1->x ) + std::fabs( xy2->x ); - diff = std::fabs( xy2->x - xy1->x ); - if( diff > epsilon * sum ) { - status = nfu_domainsNotMutual; } - else { - xy2->x = xy1->x; - } - } - } - - if( status == nfu_Okay ) { - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); - if( xy1->x < xy2->x ) { - if( xy1->y != 0. ) { - sum = std::fabs( xy1->x ) + std::fabs( xy2->x ); - diff = std::fabs( xy2->x - xy1->x ); - if( diff > epsilon * sum ) { - status = nfu_domainsNotMutual; } - else { - xy2->x = xy1->x; - } - } } - else if( xy1->x > xy2->x ) { - if( xy2->y != 0. ) { - sum = std::fabs( xy1->x ) + std::fabs( xy2->x ); - diff = std::fabs( xy2->x - xy1->x ); - if( diff > epsilon * sum ) { - status = nfu_domainsNotMutual; } - else { - xy1->x = xy2->x; - } - } - } - } - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_mutualifyDomains( ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, int positiveXOnly1, - ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2 ) { - - nfu_status status; - int64_t n1 = ptwXY1->length, n2 = ptwXY2->length; - ptwXYPoint *xy1, *xy2; - - switch( status = ptwXY_areDomainsMutual( ptwXY1, ptwXY2 ) ) { - case nfu_Okay : - case nfu_empty : - return( nfu_Okay ); - case nfu_domainsNotMutual : - break; - default : - return( status ); - } - - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - if( ptwXY1->interpolation == ptwXY_interpolationFlat ) return( nfu_invalidInterpolation ); - if( ptwXY2->interpolation == ptwXY_interpolationFlat ) return( nfu_invalidInterpolation ); - - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, 0 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, 0 ); - if( xy1->x < xy2->x ) { - lowerEps1 = 0.; - if( xy2->y == 0. ) lowerEps2 = 0.; } - else if( xy1->x > xy2->x ) { - lowerEps2 = 0.; - if( xy1->y == 0. ) lowerEps1 = 0.; } - else { - lowerEps1 = lowerEps2 = 0.; - } - - xy1 = ptwXY_getPointAtIndex_Unsafely( ptwXY1, n1 - 1 ); - xy2 = ptwXY_getPointAtIndex_Unsafely( ptwXY2, n2 - 1 ); - if( xy1->x < xy2->x ) { - upperEps2 = 0.; - if( xy1->y == 0. ) upperEps1 = 0.; } - else if( xy1->x > xy2->x ) { - upperEps1 = 0.; - if( xy2->y == 0. ) upperEps2 = 0.; } - else { - upperEps1 = upperEps2 = 0.; - } - - if( ( lowerEps1 != 0. ) || ( upperEps1 != 0. ) ) - if( ( status = ptwXY_dullEdges( ptwXY1, lowerEps1, upperEps1, positiveXOnly1 ) ) != nfu_Okay ) return( status ); - if( ( lowerEps2 != 0. ) || ( upperEps2 != 0. ) ) - if( ( status = ptwXY_dullEdges( ptwXY2, lowerEps2, upperEps2, positiveXOnly2 ) ) != nfu_Okay ) return( status ); - - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_copyToC_XY( ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t allocatedSize, int64_t *numberOfPoints, double *xys ) { - - int64_t i; - double *d = xys; - nfu_status status; - ptwXYPoint *pointFrom; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - - if( index1 < 0 ) index1 = 0; - if( index2 > ptwXY->length ) index2 = ptwXY->length; - if( index2 < index1 ) index2 = index1; - *numberOfPoints = index2 - index1; - if( allocatedSize < ( index2 - index1 ) ) return( nfu_insufficientMemory ); - - for( i = index1, pointFrom = ptwXY->points; i < index2; i++, pointFrom++ ) { - *(d++) = pointFrom->x; - *(d++) = pointFrom->y; - } - - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_valueTo_ptwXAndY( ptwXYPoints *ptwXY, double **xs, double **ys ) { - - int64_t i1, length = ptwXY_length( ptwXY ); - double *xps, *yps; - ptwXYPoint *pointFrom; - nfu_status status; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - - if( ( *xs = (double *) malloc( length * sizeof( double ) ) ) == NULL ) return( nfu_mallocError ); - if( ( *ys = (double *) malloc( length * sizeof( double ) ) ) == NULL ) { - free( *xs ); - *xs = NULL; - return( nfu_mallocError ); - } - - for( i1 = 0, pointFrom = ptwXY->points, xps = *xs, yps = *ys; i1 < length; ++i1, ++pointFrom, ++xps, ++yps ) { - *xps = pointFrom->x; - *yps = pointFrom->y; - } - - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_valueTo_ptwXY( double x1, double x2, double y, nfu_status *status ) { - - ptwXYPoints *n; - - *status = nfu_XNotAscending; - if( x1 >= x2 ) return( NULL ); - *status = nfu_Okay; - if( ( n = ptwXY_new( ptwXY_interpolationLinLin, NULL, ptwXY_maxBiSectionMax, ptwXY_minAccuracy, 2, 0, status, 0 ) ) == NULL ) return( NULL ); - ptwXY_setValueAtX( n, x1, y ); - ptwXY_setValueAtX( n, x2, y ); - return( n ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_createGaussianCenteredSigma1( double accuracy, nfu_status *status ) { - - int64_t i, n; - ptwXYPoint *pm, *pp; - double x1, y1, x2, y2, accuracy2, yMin = 1e-10; - ptwXYPoints *gaussian; - - if( accuracy < 1e-5 ) accuracy = 1e-5; - if( accuracy > 1e-1 ) accuracy = 1e-1; - if( ( gaussian = ptwXY_new( ptwXY_interpolationLinLin, NULL, 1., accuracy, 200, 100, status, 0 ) ) == NULL ) return( NULL ); - accuracy2 = accuracy = gaussian->accuracy; - if( accuracy2 > 5e-3 ) accuracy2 = 5e-3; - - x1 = -std::sqrt( -2. * G4Log( yMin ) ); - y1 = yMin; - x2 = -5.2; - y2 = G4Exp( -0.5 * x2 * x2 ); - if( ( *status = ptwXY_setValueAtX( gaussian, x1, y1 ) ) != nfu_Okay ) goto Err; - gaussian->accuracy = 20 * accuracy2; - if( ( *status = ptwXY_createGaussianCenteredSigma1_2( gaussian, x1, y1, x2, y2, 1 ) ) != nfu_Okay ) goto Err; - x1 = x2; - y1 = y2; - x2 = -4.; - y2 = G4Exp( -0.5 * x2 * x2 ); - gaussian->accuracy = 5 * accuracy2; - if( ( *status = ptwXY_createGaussianCenteredSigma1_2( gaussian, x1, y1, x2, y2, 1 ) ) != nfu_Okay ) goto Err; - x1 = x2; - y1 = y2; - x2 = -1; - y2 = G4Exp( -0.5 * x2 * x2 ); - gaussian->accuracy = accuracy; - if( ( *status = ptwXY_createGaussianCenteredSigma1_2( gaussian, x1, y1, x2, y2, 1 ) ) != nfu_Okay ) goto Err; - x1 = x2; - y1 = y2; - x2 = 0; - y2 = G4Exp( -0.5 * x2 * x2 ); - if( ( *status = ptwXY_createGaussianCenteredSigma1_2( gaussian, x1, y1, x2, y2, 1 ) ) != nfu_Okay ) goto Err; - - n = gaussian->length; - if( ( *status = ptwXY_coalescePoints( gaussian, 2 * n + 1, NULL, 0 ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( gaussian, 0., 1. ) ) != nfu_Okay ) goto Err; - pp = &(gaussian->points[gaussian->length]); - for( i = 0, pm = pp - 2; i < n; i++, pp++, pm-- ) { - *pp = *pm; - pp->x *= -1; - } - gaussian->length = 2 * n + 1; - - return( gaussian ); - -Err: - ptwXY_free( gaussian ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_createGaussianCenteredSigma1_2( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, int addX1Point ) { - - nfu_status status = nfu_Okay; - int morePoints = 0; - double x = 0.5 * ( x1 + x2 ); - double y = G4Exp( -x * x / 2 ), yMin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); - - if( std::fabs( y - yMin ) > y * ptwXY->accuracy ) morePoints = 1; - if( morePoints && ( status = ptwXY_createGaussianCenteredSigma1_2( ptwXY, x, y, x2, y2, 0 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY, x, y ) ) != nfu_Okay ) return( status ); - if( morePoints && ( status = ptwXY_createGaussianCenteredSigma1_2( ptwXY, x1, y1, x, y, 0 ) ) != nfu_Okay ) return( status ); - if( addX1Point ) status = ptwXY_setValueAtX( ptwXY, x1, y1 ); - return( status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_createGaussian( double accuracy, double xCenter, double sigma, double amplitude, double xMin, double xMax, - double /*dullEps*/, nfu_status *status ) { - - int64_t i; - ptwXYPoints *gaussian, *sliced; - ptwXYPoint *point; - - if( ( gaussian = ptwXY_createGaussianCenteredSigma1( accuracy, status ) ) == NULL ) return( NULL ); - for( i = 0, point = gaussian->points; i < gaussian->length; i++, point++ ) { - point->x = point->x * sigma + xCenter; - point->y *= amplitude; - } - if( ( gaussian->points[0].x < xMin ) || ( gaussian->points[gaussian->length - 1].x > xMax ) ) { - if( ( sliced = ptwXY_xSlice( gaussian, xMin, xMax, 10, 1, status ) ) == NULL ) goto Err; - ptwXY_free( gaussian ); - gaussian = sliced; - } - - return( gaussian ); - -Err: - ptwXY_free( gaussian ); - return( NULL ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_core.c b/source/processes/hadronic/models/lend/src/ptwXY_core.c new file mode 100644 index 0000000000..0c08527759 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_core.c @@ -0,0 +1,1805 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include + +#include "ptwXY.h" + +/* Need to change these when conversion to Fudge3 is complete. */ +static char const linLinInterpolationString[] = "lin-lin"; +static char const logLinInterpolationString[] = "log-lin"; +static char const linLogInterpolationString[] = "lin-log"; +static char const logLogInterpolationString[] = "log-log"; +static char const flatInterpolationString[] = "flat"; + +static nfu_status ptwXY_mergeFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, int incY, int length, double *xs, double *ys ); +static void ptwXY_initialOverflowPoint( ptwXYOverflowPoint *overflowPoint, ptwXYOverflowPoint *prior, ptwXYOverflowPoint *next ); +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_new( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag ) { + + ptwXYPoints *ptwXY = (ptwXYPoints *) smr_malloc2( smr, sizeof( ptwXYPoints ), 1, "ptwXY" ); + + if( ptwXY == NULL ) return( NULL ); + if( ptwXY_initialize( smr, ptwXY, interpolation, interpolationString, biSectionMax, accuracy, primarySize, secondarySize, userFlag ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + smr_freeMemory2( ptwXY ); + } + return( ptwXY ); +} + +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_new2( statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize ) { + + char const *interpolationString = ptwXY_interpolationToString( interpolation ); + + return( ptwXY_new( smr, interpolation, interpolationString, 12, 1e-3, primarySize, secondarySize, 0 ) ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_initialize( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, + char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, + int userFlag ) { + + ptwXY->status = nfu_Okay; + ptwXY->interpolation = interpolation; + ptwXY->interpolationString = NULL; + switch( interpolation ) { + case ptwXY_interpolationLinLin : + ptwXY->interpolationString = linLinInterpolationString; break; + case ptwXY_interpolationLogLin : + ptwXY->interpolationString = logLinInterpolationString; break; + case ptwXY_interpolationLinLog : + ptwXY->interpolationString = linLogInterpolationString; break; + case ptwXY_interpolationLogLog : + ptwXY->interpolationString = logLogInterpolationString; break; + case ptwXY_interpolationFlat : + ptwXY->interpolationString = flatInterpolationString; break; + case ptwXY_interpolationOther : /* For ptwXY_interpolationOther, interpolationString must be defined. */ + if( interpolationString == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, + "Invalid other interplation. interpolationString is NULL, it must be a defined string" ); + ptwXY->status = nfu_Error; } + else { + if( ( ptwXY->interpolationString = smr_allocateCopyString2( smr, interpolationString, "interpolationString" ) ) == NULL ) + ptwXY->status = nfu_Error; + } + } + ptwXY->userFlag = 0; + ptwXY_setUserFlag( ptwXY, userFlag ); + ptwXY->biSectionMax = ptwXY_maxBiSectionMax; + ptwXY_setBiSectionMax( ptwXY, biSectionMax ); + ptwXY->accuracy = ptwXY_minAccuracy; + ptwXY_setAccuracy( ptwXY, accuracy ); + + ptwXY->length = 0; + ptwXY->allocatedSize = 0; + ptwXY->overflowLength = 0; + ptwXY->overflowAllocatedSize = 0; + ptwXY->mallocFailedSize = 0; + + ptwXY_initialOverflowPoint( &(ptwXY->overflowHeader), &(ptwXY->overflowHeader), &(ptwXY->overflowHeader) ); + + ptwXY->points = NULL; + ptwXY->overflowPoints = NULL; + + if( ptwXY_reallocatePoints( smr, ptwXY, primarySize, 0 ) == nfu_Okay ) + ptwXY_reallocateOverflowPoints( smr, ptwXY, secondarySize ); + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_release( smr, ptwXY ); + } + return( ptwXY->status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_create( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, + int userFlag ) { + + ptwXYPoints *ptwXY; + + if( primarySize < length ) primarySize = length; + if( ( ptwXY = ptwXY_new( smr, interpolation, interpolationString, biSectionMax, accuracy, primarySize, + secondarySize, userFlag ) ) != NULL ) { + if( ptwXY_setXYData( smr, ptwXY, length, xy ) != nfu_Okay ) ptwXY = ptwXY_free( ptwXY ); + } + + if( ptwXY == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_create2( statusMessageReporting *smr, ptwXY_interpolation interpolation, + int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, int userFlag ) { + + char const *interpolationString = ptwXY_interpolationToString( interpolation ); + + return( ptwXY_create( smr, interpolation, interpolationString, 12, 1e-3, primarySize, secondarySize, length, xy, userFlag ) ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createFrom_Xs_Ys( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, + double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, + double const *Ys, int userFlag ) { + + int i; + ptwXYPoints *ptwXY; + + if( primarySize < length ) primarySize = length; + if( ( ptwXY = ptwXY_new( smr, interpolation, interpolationString, biSectionMax, accuracy, primarySize, + secondarySize, userFlag ) ) != NULL ) { + for( i = 0; i < length; i++ ) { + ptwXY->points[i].x = Xs[i]; + ptwXY->points[i].y = Ys[i]; + } + ptwXY->length = length; + } + + if( ptwXY == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createFrom_Xs_Ys2( statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, + int64_t secondarySize, int64_t length, double const *Xs, double const *Ys, int userFlag ) { + + char const *interpolationString = ptwXY_interpolationToString( interpolation ); + + return( ptwXY_createFrom_Xs_Ys( smr, interpolation, interpolationString, 12, 1e-3, primarySize, secondarySize, length, Xs, Ys, userFlag ) ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_copy( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *pointFrom, *pointTo; + ptwXYOverflowPoint *o, *overflowHeader = &(src->overflowHeader); + + if( dest->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( dest->status ); + } + if( src->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( src->status ); + } + + nonOverflowLength = ptwXY_getNonOverflowLength( smr, src ); /* No need to check return value. */ + + if( ptwXY_clear( smr, dest ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( dest->status ); + } + if( dest->interpolation == ptwXY_interpolationOther ) { + if( dest->interpolationString != NULL ) { + dest->interpolationString = (char const *) smr_freeMemory2( dest->interpolationString ); + } + } + dest->interpolation = ptwXY_interpolationLinLin; /* This and prior lines are in case interpolation is 'other' and ptwXY_reallocatePoints fails. */ + if( dest->allocatedSize < src->length ) { + if( ptwXY_reallocatePoints( smr, dest, src->length, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( dest->status ); + } + } + if( dest->status != nfu_Okay ) return( dest->status ); + dest->interpolation = src->interpolation; + if( dest->interpolation == ptwXY_interpolationOther ) { + if( src->interpolationString != NULL ) { + if( ( dest->interpolationString = smr_allocateCopyString2( smr, src->interpolationString, "interpolationString" ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( dest->status = nfu_Error ); + } + } } + else { + dest->interpolationString = src->interpolationString; + } + dest->userFlag = src->userFlag; + dest->biSectionMax = src->biSectionMax; + dest->accuracy = src->accuracy; + dest->minFractional_dx = src->minFractional_dx; + pointFrom = src->points; + o = src->overflowHeader.next; + pointTo = dest->points; + i = 0; + while( o != overflowHeader ) { + if( i < nonOverflowLength ) { + if( pointFrom->x < o->point.x ) { + *pointTo = *pointFrom; + i++; + pointFrom++; } + else { + *pointTo = o->point; + o = o->next; + } } + else { + *pointTo = o->point; + o = o->next; + } + pointTo++; + } + for( ; i < nonOverflowLength; i++, pointFrom++, pointTo++ ) *pointTo = *pointFrom; + dest->length = src->length; + return( dest->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_copyPointsOnly( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *pointFrom, *pointTo; + ptwXYOverflowPoint *o, *overflowHeader = &(src->overflowHeader); + + if( dest->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( dest->status ); + } + if( src->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( src->status ); + } + + nonOverflowLength = ptwXY_getNonOverflowLength( smr, src ); /* No need to check return value. */ + + if( ptwXY_clear( smr, dest ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( dest->status ); + } + + if( dest->allocatedSize < src->length ) { + if( ptwXY_reallocatePoints( smr, dest, src->length, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( dest->status ); + } + } + pointFrom = src->points; + o = src->overflowHeader.next; + pointTo = dest->points; + i = 0; + while( o != overflowHeader ) { + if( i < nonOverflowLength ) { + if( pointFrom->x < o->point.x ) { + *pointTo = *pointFrom; + i++; + pointFrom++; } + else { + *pointTo = o->point; + o = o->next; + } } + else { + *pointTo = o->point; + o = o->next; + } + pointTo++; + } + for( ; i < nonOverflowLength; i++, pointFrom++, pointTo++ ) *pointTo = *pointFrom; + dest->length = src->length; + return( dest->status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_clone( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + ptwXYPoints *ptwXY2 = ptwXY_slice( smr, ptwXY, 0, ptwXY->length, ptwXY->overflowAllocatedSize ); + + if( ptwXY2 == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY2 ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_clone2( statusMessageReporting *smr, ptwXYPoints const *ptwXY ) { + + int64_t length = ptwXY->length; + ptwXYPoints *ptwXY2 = NULL; + ptwXYPoint *pointsFrom, *pointsTo; + ptwXYOverflowPoint *last = ptwXY->overflowHeader.prior; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + ptwXY2 = ptwXY_new( smr, ptwXY->interpolation, ptwXY->interpolationString, + ptwXY->biSectionMax, ptwXY->accuracy, length, ptwXY->overflowAllocatedSize, ptwXY->userFlag ); + if( ptwXY2 == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + + pointsFrom = &(ptwXY->points[ptwXY_getNonOverflowLength( smr, ptwXY ) - 1]); + pointsTo = &(ptwXY2->points[length - 1]); + while( last != &(ptwXY->overflowHeader) ) { + if( ( pointsFrom >= ptwXY->points ) && ( pointsFrom->x > last->point.x ) ) { + *pointsTo = *pointsFrom; + --pointsFrom; } + else { + *pointsTo = last->point; + last = last->prior; + } + --pointsTo; + } + + for( ; pointsFrom >= ptwXY->points; --pointsFrom, --pointsTo ) *pointsTo = *pointsFrom; + ptwXY2->length = length; + + return( ptwXY2 ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_cloneToInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo ) { + + ptwXYPoints *n1; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + +/* Other interpolation should probably be allowed. */ + if( interpolationTo == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( NULL ); + } + if( ( n1 = ptwXY_clone( smr, ptwXY ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); } + else { + if( n1->interpolation == ptwXY_interpolationOther ) smr_freeMemory2( n1->interpolationString ); + n1->interpolation = interpolationTo; + switch( interpolationTo ) { + case ptwXY_interpolationLinLin : + n1->interpolationString = linLinInterpolationString; break; + case ptwXY_interpolationLogLin : + n1->interpolationString = logLinInterpolationString; break; + case ptwXY_interpolationLinLog : + n1->interpolationString = linLogInterpolationString; break; + case ptwXY_interpolationLogLog : + n1->interpolationString = logLogInterpolationString; break; + case ptwXY_interpolationFlat : + n1->interpolationString = flatInterpolationString; break; + case ptwXY_interpolationOther : /* Does not happen, but needed to stop compilers from complaining. */ + break; + } + } + return( n1 ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_slice( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize ) { + + int64_t i, length; + ptwXYPoints *n; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ( index1 < 0 ) || ( index2 < index1 ) || ( index2 > ptwXY->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Indices = %d, %d out of bounds: length = %d", + (int) index1, (int) index2, (int) ptwXY->length ); + return( NULL ); + } + + length = index2 - index1; + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ( n = ptwXY_new( smr, ptwXY->interpolation, ptwXY->interpolationString, ptwXY->biSectionMax, + ptwXY->accuracy, length, secondarySize, ptwXY->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + for( i = index1; i < index2; i++ ) n->points[i - index1] = ptwXY->points[i]; + n->length = length; + return( n ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_domainSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + int64_t secondarySize, int fill ) { + + int64_t i, i1, i2; + double y, _domainMin, _domainMax; + ptwXYPoints *n = NULL; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ptwXY_domainMin( smr, ptwXY, &_domainMin ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ptwXY_domainMax( smr, ptwXY, &_domainMax ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ( ptwXY->length == 0 ) || ( _domainMin >= domainMax ) || ( _domainMax <= domainMin ) ) { + if( ( n = ptwXY_new( smr, ptwXY->interpolation, ptwXY->interpolationString, ptwXY->biSectionMax, + ptwXY->accuracy, 0, secondarySize, ptwXY->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + } } + else { + if( ( n = ptwXY_clone( smr, ptwXY ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ( n->points[0].x < domainMin ) || ( n->points[n->length - 1].x > domainMax ) ) { + if( fill && ( n->points[n->length - 1].x > domainMax ) ) { + if( ptwXY_getValueAtX( smr, n, domainMax, &y ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, n, domainMax, y ) != nfu_Okay ) goto Err; + } + if( fill && ( n->points[0].x < domainMin ) ) { + if( ptwXY_getValueAtX( smr, n, domainMin, &y ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, n, domainMin, y ) != nfu_Okay ) goto Err; + } + if( ptwXY_coalescePoints( smr, n, n->length + n->overflowAllocatedSize, NULL, 0 ) != nfu_Okay ) goto Err; + for( i1 = 0; i1 < n->length; i1++ ) if( n->points[i1].x >= domainMin ) break; + for( i2 = n->length - 1; i2 > 0; i2-- ) if( n->points[i2].x <= domainMax ) break; + i2++; + if( i1 > 0 ) { + for( i = i1; i < i2; i++ ) n->points[i- i1] = n->points[i]; + } + n->length = i2 - i1; + } + } + return( n ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( n != NULL ) ptwXY_free( n ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_domainMinSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, int64_t secondarySize, int fill ) { + + double domainMax = 1.1 * domainMin + 1; + ptwXYPoints *ptwXY2; + + if( domainMin < 0 ) domainMax = 0.9 * domainMin + 1; + if( ptwXY->length > 0 ) { + if( ptwXY_domainMax( smr, ptwXY, &domainMax ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + } + if( ( ptwXY2 = ptwXY_domainSlice( smr, ptwXY, domainMin, domainMax, secondarySize, fill ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY2 ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_domainMaxSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMax, int64_t secondarySize, int fill ) { + + double domainMin = 0.9 * domainMax - 1; + ptwXYPoints *ptwXY2; + + if( domainMax < 0 ) domainMin = 1.1 * domainMax - 1; + if( ptwXY->length > 0 ) { + if( ptwXY_domainMin( smr, ptwXY, &domainMin ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + } + if( ( ptwXY2 = ptwXY_domainSlice( smr, ptwXY, domainMin, domainMax, secondarySize, fill ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY2 ); +} +/* +************************************************************ +*/ +ptwXY_interpolation ptwXY_getInterpolation( ptwXYPoints *ptwXY ) { + + return( ptwXY->interpolation ); +} +/* +************************************************************ +*/ +char const *ptwXY_getInterpolationString( ptwXYPoints *ptwXY ) { + + return( ptwXY->interpolationString ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_setInterpolationString( ptwXYPoints *ptwXY, char const *interpolationString ) { + + ptwXY_interpolation interpolation = ptwXY_stringToInterpolation( interpolationString ); + + if( interpolation == ptwXY_interpolationOther ) return( nfu_invalidInterpolation ); + + ptwXY->interpolation = interpolation; + ptwXY->interpolationString = ptwXY_interpolationToString( interpolation ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_getStatus( ptwXYPoints *ptwXY ) { + + return( ptwXY->status ); +} +/* +************************************************************ +*/ +int ptwXY_getUserFlag( ptwXYPoints *ptwXY ) { + + return( ptwXY->userFlag ); +} +/* +************************************************************ +*/ +void ptwXY_setUserFlag( ptwXYPoints *ptwXY, int userFlag ) { + + ptwXY->userFlag = userFlag; +} +/* +************************************************************ +*/ +double ptwXY_getAccuracy( ptwXYPoints *ptwXY ) { + + return( ptwXY->accuracy ); +} +/* +************************************************************ +*/ +double ptwXY_setAccuracy( ptwXYPoints *ptwXY, double accuracy ) { + + accuracy = ptwXY_limitAccuracy( accuracy ); + ptwXY->accuracy = accuracy; + return( ptwXY->accuracy ); +} +/* +************************************************************ +*/ +double ptwXY_getBiSectionMax( ptwXYPoints *ptwXY ) { + + return( ptwXY->biSectionMax ); +} +/* +************************************************************ +*/ +double ptwXY_setBiSectionMax( ptwXYPoints *ptwXY, double biSectionMax ) { + + if( biSectionMax < 0 ) { + biSectionMax = 0; } + else if( biSectionMax > ptwXY_maxBiSectionMax ) { + biSectionMax = ptwXY_maxBiSectionMax; + } + ptwXY->biSectionMax = biSectionMax; + return( ptwXY->biSectionMax ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_reallocatePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize ) { +/* +* This is for allocating/reallocating the primary data memory. +*/ + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( size < ptwXY_minimumSize ) size = ptwXY_minimumSize; /* ptwXY_minimumSize must be > 0. */ + if( size < ptwXY->length ) size = ptwXY->length; + if( size != ptwXY->allocatedSize ) { + if( size > ptwXY->allocatedSize ) { /* Increase size of allocated points. */ + ptwXY->points = (ptwXYPoint *) smr_realloc2( smr, ptwXY->points, (size_t) size * sizeof( ptwXYPoint ), "ptwXY->points" ); } + else if( ( ptwXY->allocatedSize > 2 * size ) || forceSmallerResize ) { /* Decrease size, if at least 1/2 size reduction or if forced to. */ + ptwXY->points = (ptwXYPoint *) smr_realloc2( smr, ptwXY->points, (size_t) size * sizeof( ptwXYPoint ), "ptwXY->points" ); } + else { + size = ptwXY->allocatedSize; /* Size is < ptwXY->allocatedSize, but realloc not called. */ + } + if( ptwXY->points == NULL ) { + ptwXY->length = 0; + ptwXY->mallocFailedSize = size; + size = 0; + ptwXY->status = nfu_mallocError; + } + ptwXY->allocatedSize = size; + } + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_reallocateOverflowPoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size ) { +/* +* This is for allocating/reallocating the secondary data memory. +*/ + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( size < ptwXY_minimumOverflowSize ) size = ptwXY_minimumOverflowSize; /* ptwXY_minimumOverflowSize must be > 0. */ + if( size < ptwXY->overflowLength ) { + if( ptwXY_coalescePoints( smr, ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, NULL, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + } + if( size != ptwXY->overflowAllocatedSize ) { + ptwXY->overflowPoints = (ptwXYOverflowPoint *) smr_realloc2( smr, ptwXY->overflowPoints, + (size_t) size * sizeof( ptwXYOverflowPoint ), "ptwXY->overflowPoints" ); + if( ptwXY->overflowPoints == NULL ) { + ptwXY->length = 0; + ptwXY->overflowLength = 0; + ptwXY->mallocFailedSize = size; + size = 0; + ptwXY->status = nfu_mallocError; + } + } + ptwXY->overflowAllocatedSize = size; + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_coalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, + ptwXYPoint *newPoint, int forceSmallerResize ) { + + int addNewPoint; + int64_t length = ptwXY->length + ( ( newPoint != NULL ) ? 1 : 0 ); + ptwXYOverflowPoint *last = ptwXY->overflowHeader.prior; + ptwXYPoint *pointsFrom, *pointsTo; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + if( ptwXY->overflowLength == 0 ) return( nfu_Okay ); + + if( size < length ) size = length; + if( size > ptwXY->allocatedSize ) { + if( ptwXY_reallocatePoints( smr, ptwXY, size, forceSmallerResize ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + } + pointsFrom = &(ptwXY->points[ptwXY_getNonOverflowLength( smr, ptwXY ) - 1]); + pointsTo = &(ptwXY->points[length - 1]); + while( last != &(ptwXY->overflowHeader) ) { + addNewPoint = 0; + if( newPoint != NULL ) { + if( ( pointsFrom >= ptwXY->points ) && ( pointsFrom->x > last->point.x ) ) { + if( newPoint->x > pointsFrom->x ) addNewPoint = 1; } + else { + if( newPoint->x > last->point.x ) addNewPoint = 1; + } + if( addNewPoint == 1 ) { + *pointsTo = *newPoint; + newPoint = NULL; + } + } + if( addNewPoint == 0 ) { + if( ( pointsFrom >= ptwXY->points ) && ( pointsFrom->x > last->point.x ) ) { + *pointsTo = *pointsFrom; + pointsFrom--; } + else { + *pointsTo = last->point; + last = last->prior; + } + } + pointsTo--; + } + while( ( newPoint != NULL ) && ( pointsFrom >= ptwXY->points ) ) { + if( newPoint->x > pointsFrom->x ) { + *pointsTo = *newPoint; + newPoint = NULL; } + else { + *pointsTo = *pointsFrom; + pointsFrom--; + } + pointsTo--; + } + if( newPoint != NULL ) *pointsTo = *newPoint; + ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); + ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); + ptwXY->length = length; + ptwXY->overflowLength = 0; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_simpleCoalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + if( ptwXY_coalescePoints( smr, ptwXY, ptwXY->length, NULL, 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_clear( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + ptwXY->length = 0; + ptwXY->overflowLength = 0; + ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); + ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_release( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { +/* +* Note, this routine does not free ptwXY (i.e., it does not undo all of ptwXY_new). +*/ + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + if( ptwXY->interpolationString != NULL ) + ptwXY->interpolationString = (char const *) smr_freeMemory2( ptwXY->interpolationString ); + } + ptwXY->interpolation = ptwXY_interpolationLinLin; + ptwXY->length = 0; + ptwXY->allocatedSize = 0; + ptwXY->points = (ptwXYPoint *) smr_freeMemory2( ptwXY->points ); + + ptwXY->overflowLength = 0; + ptwXY->overflowAllocatedSize = 0; + ptwXY->overflowPoints = (ptwXYOverflowPoint *) smr_freeMemory2( ptwXY->overflowPoints ); + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_free( ptwXYPoints *ptwXY ) { + + if( ptwXY != NULL ) { + ptwXY_release( NULL, ptwXY ); + smr_freeMemory2( ptwXY ); + } + return( (ptwXYPoints *) NULL ); +} +/* +************************************************************ +*/ +int64_t ptwXY_length( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( -ptwXY->status ); + } + + return( ptwXY->length ); +} +/* +************************************************************ +*/ +int64_t ptwXY_getNonOverflowLength( statusMessageReporting *smr, ptwXYPoints const *ptwXY ) { + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( -ptwXY->status ); + } + + return( ptwXY->length - ptwXY->overflowLength ); +} + +/* +************************************************************ +*/ +nfu_status ptwXY_startIndex( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, double a_x, int64_t *a_startIndex, int64_t *a_length ) { +/* + Sets *a_startIndex to -2 if a_x < domainMin, -1 if a_x > domainMax, otherwise to the lowest index in a_ptwXY->points +where a_x >= a_ptwXY->points[*a_startIndex]. The logic below guarantees that *a_startIndex < (*a_length - 1 ). For example, if +a_x == domainMax, then *a_startIndex = *a_length - 2, or the next to the last point. +*/ + + int64_t lower = 0, mid, upper; + ptwXYPoint *point; + *a_length = ptwXY_length( NULL, a_ptwXY ); + + if( ptwXY_simpleCoalescePoints( a_smr, a_ptwXY ) != nfu_Okay ) { + smr_setReportError2p( a_smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( a_ptwXY->status ); + } + + if( *a_length < 2 ) { + smr_setReportError2( a_smr, nfu_SMR_libraryID, nfu_tooFewPoints, "number of points = %lld < 2", *a_length ); + return( nfu_tooFewPoints ); + } + + *a_startIndex = -2; + point = &a_ptwXY->points[lower]; + if( a_x < point->x ) return( nfu_Okay ); + + upper = *a_length - 1; + *a_startIndex = -1; + point = &a_ptwXY->points[upper]; + if( a_x > point->x ) return( nfu_Okay ); + + while( 1 ) { + mid = ( lower + upper ) >> 1; + if( mid == lower ) break; + point = &a_ptwXY->points[mid]; + if( a_x < point->x ) { + upper = mid; } + else { + lower = mid; + } + } + + *a_startIndex = mid; + return( nfu_Okay ); +} + +/* +************************************************************ +*/ +nfu_status ptwXY_setXYData( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *xy ) { + + int64_t index; + ptwXYPoint *p; + double const *d = xy; + double priorX = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( length > ptwXY->allocatedSize ) { + if( ptwXY_reallocatePoints( smr, ptwXY, length, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + } + for( index = 0, p = ptwXY->points; index < length; index++, p++ ) { + if( index != 0 ) { + if( *d <= priorX ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XNotAscending, + "X value at index = %d of %.17e is <= prior value of %.17e", (int) index, *d, priorX ); + ptwXY->status = nfu_XNotAscending; + length = 0; + break; + } + } + priorX = *d; + p->x = *(d++); + p->y = *(d++); + } + ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); + ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); + ptwXY->overflowLength = 0; + ptwXY->length = length; + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_setXYDataFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, + double const *x, double const *y ) { + + int64_t i; + ptwXYPoint *p; + double xOld = 0.; + + if( ptwXY_clear( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( length > ptwXY->allocatedSize ) { + if( ptwXY_reallocatePoints( smr, ptwXY, length, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + } + for( i = 0, p = ptwXY->points; i < length; i++, p++, x++, y++ ) { + if( i != 0 ) { + if( *x <= xOld ) { + ptwXY->status = nfu_XNotAscending; + length = 0; + break; + } + } + xOld = *x; + p->x = *x; + p->y = *y; + } + ptwXY->length = length; + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_deletePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t i1, int64_t i2 ) { + + int64_t n = ptwXY->length - ( i2 - i1 ); + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( ( i1 < 0 ) || ( i2 < i1 ) || ( i2 > ptwXY->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Indices = %d, %d out of bounds: length = %d", + (int) i1, (int) i2, (int) ptwXY->length ); + return( ptwXY->status = nfu_badIndex ); + } + + if( i1 != i2 ) { + for( ; i2 < ptwXY->length; i1++, i2++ ) ptwXY->points[i1] = ptwXY->points[i2]; + ptwXY->length = n; + } + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_getLowerIndexBoundingX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, int64_t *index ) { + + int64_t i1, length = ptwXY->length; + + *index = -1; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( x < ptwXY->points[0].x ) return( nfu_Okay ); + if( x > ptwXY->points[length-1].x ) return( nfu_Okay ); + for( i1 = 1; i1 < length; ++i1 ) { + if( x < ptwXY->points[i1].x ) break; + } + *index = i1 - 1; + return( ptwXY->status ); +} +/* +************************************************************ +*/ +ptwXYPoint *ptwXY_getPointAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index ) { + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ( index < 0 ) || ( index >= ptwXY->length ) ) return( NULL ); + return( ptwXY_getPointAtIndex_Unsafely( ptwXY, index ) ); +} +/* +************************************************************ +*/ +ptwXYPoint *ptwXY_getPointAtIndex_Unsafely( ptwXYPoints const *ptwXY, int64_t index ) { + + int64_t i; + ptwXYOverflowPoint *overflowPoint; + + for( overflowPoint = ptwXY->overflowHeader.next, i = 0; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next, i++ ) { + if( overflowPoint->index == index ) return( &(overflowPoint->point) ); + if( overflowPoint->index > index ) break; + } + return( &(ptwXY->points[index - i]) ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_getXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double *x, double *y ) { + + ptwXYPoint *p = ptwXY_getPointAtIndex( smr, ptwXY, index ); + + if( p == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + *x = p->x; + *y = p->y; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, + ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint ) { + + int closeIsEqual; + ptwXYPoint *closePoint; + ptwXY_lessEqualGreaterX lessEqualGreaterX; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY_lessEqualGreaterX_Error ); + } + + lessEqualGreaterX = ptwXY_getPointsAroundX_closeIsEqual( smr, ptwXY, x, lessThanEqualXPoint, greaterThanXPoint, + 0, &closeIsEqual, &closePoint ); + if( lessEqualGreaterX == ptwXY_lessEqualGreaterX_Error ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( lessEqualGreaterX ); +} +/* +************************************************************ +*/ +ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, + ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, + ptwXYPoint **closePoint ) { + + int64_t overflowIndex, nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + int64_t indexMin, indexMid, indexMax; + ptwXY_dataFrom domainMinFrom, domainMaxFrom; + double domainMin, domainMax; + ptwXYOverflowPoint *overflowPoint, *overflowHeader = &(ptwXY->overflowHeader); + ptwXY_lessEqualGreaterX status = ptwXY_lessEqualGreaterX_empty; + ptwXYPoint *lowerPoint = NULL, *upperPoint = NULL; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY_lessEqualGreaterX_Error ); + } + + *closeIsEqual = 0; + if( ptwXY->length == 0 ) return( status ); + + if( ptwXY_domainMinAndFrom( smr, ptwXY, &domainMinFrom, &domainMin ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY_lessEqualGreaterX_Error ); + } + + if( ptwXY_domainMaxAndFrom( smr, ptwXY, &domainMaxFrom, &domainMax ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY_lessEqualGreaterX_Error ); + } + + ptwXY_initialOverflowPoint( lessThanEqualXPoint, overflowHeader, NULL ); + ptwXY_initialOverflowPoint( greaterThanXPoint, overflowHeader, NULL ); + if( x < domainMin ) { + status = ptwXY_lessEqualGreaterX_lessThan; + if( domainMinFrom == ptwXY_dataFrom_Points ) { + greaterThanXPoint->prior = overflowHeader; + greaterThanXPoint->index = 0; + greaterThanXPoint->point = ptwXY->points[0]; + *closePoint = &(ptwXY->points[0]); } + else { + *greaterThanXPoint = *(overflowHeader->next); + *closePoint = &(overflowHeader->next->point); + } } + else if( x > domainMax ) { + status = ptwXY_lessEqualGreaterX_greater; + if( domainMaxFrom == ptwXY_dataFrom_Points ) { + lessThanEqualXPoint->prior = overflowHeader->prior; + lessThanEqualXPoint->index = nonOverflowLength - 1; + lessThanEqualXPoint->point = ptwXY->points[lessThanEqualXPoint->index]; + *closePoint = &(ptwXY->points[lessThanEqualXPoint->index]); } + else { + *lessThanEqualXPoint = *(overflowHeader->prior); + *closePoint = &(overflowHeader->prior->point); + } } + else { /* domainMin <= x <= domainMax */ + status = ptwXY_lessEqualGreaterX_between; /* Default for this condition, can only be between or equal. */ + for( overflowPoint = overflowHeader->next, overflowIndex = 0; overflowPoint != overflowHeader; + overflowPoint = overflowPoint->next, overflowIndex++ ) if( overflowPoint->point.x > x ) break; + overflowPoint = overflowPoint->prior; + if( ( overflowPoint != overflowHeader ) && ( overflowPoint->point.x == x ) ) { + status = ptwXY_lessEqualGreaterX_equal; + *lessThanEqualXPoint = *overflowPoint; } + else if( ptwXY->length == 1 ) { /* If here and length = 1, then ptwXY->points[0].x == x. */ + status = ptwXY_lessEqualGreaterX_equal; + lessThanEqualXPoint->index = 0; + lessThanEqualXPoint->point = ptwXY->points[0]; } + else { /* ptwXY->length > 1 */ + indexMin = 0; + indexMax = nonOverflowLength - 1; + indexMid = ( indexMin + indexMax ) >> 1; + while( ( indexMin != indexMid ) && ( indexMid != indexMax ) ) { + if( ptwXY->points[indexMid].x > x ) { + indexMax = indexMid; } + else { + indexMin = indexMid; + } + indexMid = ( indexMin + indexMax ) >> 1; + } + if( ptwXY->points[indexMin].x == x ) { + status = ptwXY_lessEqualGreaterX_equal; + lessThanEqualXPoint->index = indexMin; + lessThanEqualXPoint->point = ptwXY->points[indexMin]; } + else if( ptwXY->points[indexMax].x == x ) { + status = ptwXY_lessEqualGreaterX_equal; + lessThanEqualXPoint->index = indexMax; + lessThanEqualXPoint->point = ptwXY->points[indexMax]; } + else { + if( ptwXY->points[indexMin].x > x ) indexMax = 0; + if( ptwXY->points[indexMax].x < x ) indexMin = indexMax; + if( ( overflowPoint == overflowHeader ) || /* x < domainMin of overflow points. */ + ( ( ptwXY->points[indexMin].x > overflowPoint->point.x ) && ( ptwXY->points[indexMin].x < x ) ) ) { + if( overflowPoint != overflowHeader ) lessThanEqualXPoint->prior = overflowPoint; + lowerPoint = &(ptwXY->points[indexMin]); + lessThanEqualXPoint->index = indexMin; + lessThanEqualXPoint->point = ptwXY->points[indexMin]; } + else { + lowerPoint = &(overflowPoint->point); + *lessThanEqualXPoint = *overflowPoint; + } + if( ( overflowPoint->next == overflowHeader ) || /* x > domainMax of overflow points. */ + ( ( ptwXY->points[indexMax].x < overflowPoint->next->point.x ) && ( ptwXY->points[indexMax].x > x ) ) ) { + upperPoint = &(ptwXY->points[indexMax]); + greaterThanXPoint->index = indexMax; + greaterThanXPoint->point = ptwXY->points[indexMax]; } + else { + upperPoint = &(overflowPoint->next->point); + *greaterThanXPoint = *(overflowPoint->next); + } + } + } + } + + if( eps > 0 ) { + double absX = fabs( x ); + + if( status == ptwXY_lessEqualGreaterX_lessThan ) { + if( absX < fabs( greaterThanXPoint->point.x ) ) absX = fabs( greaterThanXPoint->point.x ); + if( ( greaterThanXPoint->point.x - x ) < eps * absX ) *closeIsEqual = 1; } + else if( status == ptwXY_lessEqualGreaterX_greater ) { + if( absX < fabs( lessThanEqualXPoint->point.x ) ) absX = fabs( lessThanEqualXPoint->point.x ); + if( ( x - lessThanEqualXPoint->point.x ) < eps * absX ) *closeIsEqual = -1; } + else if( status == ptwXY_lessEqualGreaterX_between ) { + if( ( x - lessThanEqualXPoint->point.x ) < ( greaterThanXPoint->point.x - x ) ) { /* x is closer to lower point. */ + *closePoint = lowerPoint; + if( absX < fabs( lessThanEqualXPoint->point.x ) ) absX = fabs( lessThanEqualXPoint->point.x ); + if( ( x - lessThanEqualXPoint->point.x ) < eps * absX ) *closeIsEqual = -1; } + else { /* x is closer to upper point. */ + *closePoint = upperPoint; + if( absX < fabs( greaterThanXPoint->point.x ) ) absX = fabs( greaterThanXPoint->point.x ); + if( ( greaterThanXPoint->point.x - x ) < eps * absX ) *closeIsEqual = 1; + } } + else if( status == ptwXY_lessEqualGreaterX_equal ) { + *closeIsEqual = 1; + } + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_getValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double *y ) { + + nfu_status status = nfu_XOutsideDomain; + ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; + ptwXY_lessEqualGreaterX legx = ptwXY_getPointsAroundX( smr, ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint ); + + *y = 0.; + switch( legx ) { + case ptwXY_lessEqualGreaterX_Error : + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + case ptwXY_lessEqualGreaterX_empty : + case ptwXY_lessEqualGreaterX_lessThan : + case ptwXY_lessEqualGreaterX_greater : + break; + case ptwXY_lessEqualGreaterX_equal : + status = nfu_Okay; + *y = lessThanEqualXPoint.point.y; + break; + case ptwXY_lessEqualGreaterX_between : + status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, x, y, lessThanEqualXPoint.point.x, lessThanEqualXPoint.point.y, + greaterThanXPoint.point.x, greaterThanXPoint.point.y ); + break; + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_setValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y ) { + + if( ptwXY_setValueAtX_overrideIfClose( smr, ptwXY, x, y, 0., 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_setValueAtX_overrideIfClose( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y, + double eps, int override ) { + + int closeIsEqual; + int64_t nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ), i; + ptwXY_lessEqualGreaterX legx; + ptwXYPoint *point = NULL, newPoint = { x, y }; + ptwXYOverflowPoint *overflowPoint, *p, *overflowHeader = &(ptwXY->overflowHeader); + ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; + ptwXYPoint *closePoint; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + legx = ptwXY_getPointsAroundX_closeIsEqual( smr, ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint, eps, &closeIsEqual, &closePoint ); + switch( legx ) { + case ptwXY_lessEqualGreaterX_Error : + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + case ptwXY_lessEqualGreaterX_lessThan : + case ptwXY_lessEqualGreaterX_greater : + case ptwXY_lessEqualGreaterX_between : + if( closeIsEqual ) { + if( !override ) return( nfu_Okay ); + point = closePoint; + legx = ptwXY_lessEqualGreaterX_equal; + x = point->x; } + else { + if( ( legx == ptwXY_lessEqualGreaterX_greater ) && ( nonOverflowLength < ptwXY->allocatedSize ) ) { + point = &(ptwXY->points[nonOverflowLength]); } + else { + if( ptwXY->overflowLength == ptwXY->overflowAllocatedSize ) { + if( ptwXY_coalescePoints( smr, ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, &newPoint, 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + overflowPoint = &(ptwXY->overflowPoints[ptwXY->overflowLength]); + if( legx == ptwXY_lessEqualGreaterX_lessThan ) { + overflowPoint->prior = greaterThanXPoint.prior; + overflowPoint->index = 0; } + else { /* Between or greater and must go in overflow area. */ + if( legx == ptwXY_lessEqualGreaterX_greater ) { + overflowPoint->prior = overflowHeader->prior; + overflowPoint->index = ptwXY->length; } + else { + overflowPoint->prior = lessThanEqualXPoint.prior; + if( lessThanEqualXPoint.next != NULL ) { + if( lessThanEqualXPoint.point.x < x ) + overflowPoint->prior = lessThanEqualXPoint.prior->next; + i = 1; } + else { + for( p = overflowHeader->next, i = 1; p != overflowHeader; p = p->next, i++ ) + if( p->point.x > x ) break; + } + overflowPoint->index = lessThanEqualXPoint.index + i; + } + } + overflowPoint->next = overflowPoint->prior->next; + overflowPoint->prior->next = overflowPoint; + overflowPoint->next->prior = overflowPoint; + point = &(overflowPoint->point); + for( overflowPoint = overflowPoint->next; overflowPoint != overflowHeader; overflowPoint = overflowPoint->next ) { + overflowPoint->index++; + } + ptwXY->overflowLength++; + } + } + break; + case ptwXY_lessEqualGreaterX_empty : + point = ptwXY->points; /* ptwXY_minimumSize must be > 0 so there is always space here. */ + break; + case ptwXY_lessEqualGreaterX_equal : + if( closeIsEqual && !override ) return( nfu_Okay ); + if( lessThanEqualXPoint.next == NULL ) { + point = &(ptwXY->points[lessThanEqualXPoint.index]); } + else { + point = &(lessThanEqualXPoint.prior->next->point); + } + break; + } + + point->x = x; + point->y = y; + if( legx != ptwXY_lessEqualGreaterX_equal ) ptwXY->length++; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_mergeFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xs, double *ys ) { + + if( ptwXY_mergeFrom( smr, ptwXY, 1, length, xs, ys ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_mergeFromXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xys ) { + + int i; + double *xs, *p1, *p2; + + if( length == 0 ) return( nfu_Okay ); + if( length < 0 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "Negative length = %d.", length ); + return( nfu_badInput ); + } + + if( ( xs = (double *) smr_malloc2( smr, length * sizeof( double ), 0, "xs" ) ) == NULL ) return( nfu_mallocError ); + for( i = 0, p1 = xs, p2 = xys; i < length; i++, p1++, p2 += 2 ) *p1 = *p2; + if( ptwXY_mergeFrom( smr, ptwXY, 2, length, xs, xys ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + smr_freeMemory2( xs ); + + return( ptwXY->status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_mergeFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, int incY, int length, double *xs, double *ys ) { + + int i1, j1, n1 = 0; + double *p1, priorX; + ptwXYPoint *point1, *point2; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( length == 0 ) return( nfu_Okay ); + if( length < 0 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "Negative length = %d.", length ); + return( nfu_badInput ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( xs[0] < 0 ) { + priorX = 1.1 * xs[0]; } + else { + priorX = 0.9 * xs[0] - 1; + } + for( i1 = 0, p1 = xs; i1 < length; ++i1, ++p1 ) { + if( *p1 <= priorX ) return( nfu_XNotAscending ); + priorX = *p1; + } + + for( i1 = 0, p1 = xs, j1 = 0; i1 < length; ++i1, ++p1 ) { /* Count the number of x-values same in xs and ptwXY. */ + for( ; j1 < ptwXY->length; ++j1 ) { + if( *p1 <= ptwXY->points[j1].x ) break; + } + if( j1 == ptwXY->length ) break; /* Completed all ptwXY points. */ + if( *p1 == ptwXY->points[j1].x ) ++n1; + } + n1 = length + (int) ptwXY->length - n1; + + if( ptwXY_reallocatePoints( smr, ptwXY, n1, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + n1 = 0; } + else { + point1 = &(ptwXY->points[n1-1]); /* Go backwards through arrays. */ + point2 = &(ptwXY->points[ptwXY->length-1]); + p1 = &(xs[length-1]); + for( i1 = length - 1, j1 = (int) ptwXY->length - 1; ( i1 >= 0 ) && ( j1 >= 0 ); --point1 ) { + if( *p1 >= point2->x ) { + point1->x = *p1; + point1->y = ys[i1]; + if( *p1 == point2->x ) { + --point2; + --j1; + } + --p1; + --i1; } + else { + *point1 = *point2; + --point2; + --j1; + } + } + for( ; i1 >= 0; --i1, --p1, --point1 ) { + point1->x = *p1; + point1->y = ys[i1]; + } + } + ptwXY->length = n1; + + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_appendXY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y ) { + + int64_t nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + ptwXY_dataFrom dataFrom; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->length != 0 ) { + double domainMax; + nfu_status status; + + if( ( status = ptwXY_domainMaxAndFrom( smr, ptwXY, &dataFrom, &domainMax ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + if( domainMax >= x ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XNotAscending, "domainMax = %17.e >= x = %.17e", domainMax, x ); + return( ptwXY->status = nfu_XNotAscending ); + } + } + + if( nonOverflowLength < ptwXY->allocatedSize ) { /* Room at end of points. Also handles the case when length = 0. */ + ptwXY->points[nonOverflowLength].x = x; + ptwXY->points[nonOverflowLength].y = y; } + else { + if( ptwXY->overflowLength == ptwXY->overflowAllocatedSize ) { + ptwXYPoint newPoint = { x, y }; + if( ptwXY_coalescePoints( smr, ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, &newPoint, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); } } + else { /* Add to end of overflow. */ + ptwXYOverflowPoint *overflowPoint = &(ptwXY->overflowPoints[ptwXY->overflowLength]); + + overflowPoint->prior = ptwXY->overflowHeader.prior; + overflowPoint->next = overflowPoint->prior->next; + overflowPoint->index = ptwXY->length; + overflowPoint->prior->next = overflowPoint; + overflowPoint->next->prior = overflowPoint; + overflowPoint->point.x = x; + overflowPoint->point.y = y; + ptwXY->overflowLength++; + } + } + ptwXY->length++; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_setXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double x, double y ) { + + int64_t i, ip1; + ptwXYOverflowPoint *overflowPoint, *pm1, *pp1; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + + if( ( index < 0 ) || ( index >= ptwXY->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Index = %d, out of bounds: length = %d", + (int) index, (int) ptwXY->length ); + return( ptwXY->status = nfu_badIndex ); + } + + for( overflowPoint = ptwXY->overflowHeader.next, i = 0; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next, i++ ) { + if( overflowPoint->index >= index ) break; + } + ip1 = i; + pm1 = pp1 = overflowPoint; + if( overflowPoint->index == index ) { /* Note, if overflowPoint is header, then its index = -1. */ + pp1 = overflowPoint->next; + ip1++; + } + if( ( pp1 != &(ptwXY->overflowHeader) ) && ( pp1->index == ( index + 1 ) ) ) { /* This if and else check that x < element[index+1]'s x values. */ + if( pp1->point.x <= x ) return( nfu_badIndexForX ); } + else { + if( ( ( index + 1 ) < ptwXY->length ) && ( ptwXY->points[index + 1 - ip1].x <= x ) ) return( nfu_badIndexForX ); + } + if( overflowPoint != &(ptwXY->overflowHeader) ) pm1 = overflowPoint->prior; + if( ( pm1 != &(ptwXY->overflowHeader) ) && ( pm1->index == ( index - 1 ) ) ) { /* This if and else check that x > element[index-1]'s x values. */ + if( pm1->point.x >= x ) return( nfu_badIndexForX ); } + else { + if( ( ( index - 1 ) >= 0 ) && ( ptwXY->points[index - 1 - i].x >= x ) ) return( nfu_badIndexForX ); + } + if( ( overflowPoint != &(ptwXY->overflowHeader) ) && ( overflowPoint->index == index ) ) { + overflowPoint->point.x = x; + overflowPoint->point.y = y; } + else { + index -= i; + ptwXY->points[index].x = x; + ptwXY->points[index].y = y; + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_getSlopeAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, const char side, double *slope ) { + + nfu_status status = nfu_Okay; + ptwXYOverflowPoint lessThanEqualXPoint = { NULL, NULL, 0, {0.0, 0.0}}, greaterThanXPoint; + ptwXY_lessEqualGreaterX legx = ptwXY_getPointsAroundX( smr, ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint ); + ptwXYPoint *point; + greaterThanXPoint = lessThanEqualXPoint; /* Done to stop a compiler from complaining. */ + + *slope = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( ptwXY->status ); + } + if( ( side != '-' ) && ( side != '+' ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid side = '%c'.", side ); + return( nfu_badInput ); + } + + switch( legx ) { + case ptwXY_lessEqualGreaterX_Error : + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + case ptwXY_lessEqualGreaterX_empty : + case ptwXY_lessEqualGreaterX_lessThan : + case ptwXY_lessEqualGreaterX_greater : + status = nfu_XOutsideDomain; + break; + case ptwXY_lessEqualGreaterX_between : + *slope = ( greaterThanXPoint.point.y - lessThanEqualXPoint.point.y ) / + ( greaterThanXPoint.point.x - lessThanEqualXPoint.point.x ); + break; + case ptwXY_lessEqualGreaterX_equal : + if( side == '-' ) { + if( lessThanEqualXPoint.index == 0 ) { + status = nfu_XOutsideDomain; } + else { + point = ptwXY_getPointAtIndex_Unsafely( ptwXY, lessThanEqualXPoint.index - 1 ); + *slope = ( lessThanEqualXPoint.point.y - point->y ) / ( lessThanEqualXPoint.point.x - point->x ); + } } + else { + if( lessThanEqualXPoint.index == ( ptwXY->length - 1 ) ) { + status = nfu_XOutsideDomain; } + else { + point = ptwXY_getPointAtIndex_Unsafely( ptwXY, lessThanEqualXPoint.index + 1 ); + *slope = ( point->y - lessThanEqualXPoint.point.y ) / ( point->x - lessThanEqualXPoint.point.x ); + } + } + } + + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_domainMinAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *domainMin ) { + + int64_t nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + + *domainMin = 0; + *dataFrom = ptwXY_dataFrom_Unknown; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->overflowLength > 0 ) { + *dataFrom = ptwXY_dataFrom_Overflow; + *domainMin = ptwXY->overflowHeader.next->point.x; + if( nonOverflowLength >= 0 ) { + if( *domainMin > ptwXY->points[0].x ) { + *dataFrom = ptwXY_dataFrom_Points; + *domainMin = ptwXY->points[0].x; + } + } } + else if( nonOverflowLength > 0 ) { + *dataFrom = ptwXY_dataFrom_Points; + *domainMin = ptwXY->points[0].x; } + else { + return( nfu_empty ); + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_domainMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *domainMin ) { + + ptwXY_dataFrom dataFrom; + nfu_status status; + + if( ( status = ptwXY_domainMinAndFrom( smr, ptwXY, &dataFrom, domainMin ) ) != nfu_Okay ) { + if( status == nfu_empty ) return( status ); + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_domainMaxAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *domainMax ) { + + int64_t nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + + *domainMax = 0; + *dataFrom = ptwXY_dataFrom_Unknown; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->overflowLength > 0 ) { + *dataFrom = ptwXY_dataFrom_Overflow; + *domainMax = ptwXY->overflowHeader.prior->point.x; + if( ( nonOverflowLength > 0 ) ) { + if( *domainMax < ptwXY->points[nonOverflowLength-1].x ) { + *dataFrom = ptwXY_dataFrom_Points; + *domainMax = ptwXY->points[nonOverflowLength-1].x; + } + } } + else if( ptwXY->length > 0 ) { + *dataFrom = ptwXY_dataFrom_Points; + *domainMax = ptwXY->points[nonOverflowLength-1].x; } + else { + return( nfu_empty ); + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_domainMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *domainMax ) { + + ptwXY_dataFrom dataFrom; + nfu_status status; + + if( ( status = ptwXY_domainMaxAndFrom( smr, ptwXY, &dataFrom, domainMax ) ) != nfu_Okay ) { + if( status == nfu_empty ) return( status ); + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_range( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMin, double *rangeMax ) { + + int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + ptwXYPoint *p = ptwXY->points; + ptwXYOverflowPoint *overflowPoint = ptwXY->overflowHeader.next; + + *rangeMin = *rangeMax = 0.; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->length == 0 ) return( nfu_empty ); + if( nonOverflowLength > 0 ) { + *rangeMin = *rangeMax = p->y; + for( i = 1, p++; i < nonOverflowLength; i++, p++ ) { + *rangeMin = ( ( *rangeMin < p->y ) ? *rangeMin : p->y ); + *rangeMax = ( ( *rangeMax > p->y ) ? *rangeMax : p->y ); + } } + else { + *rangeMin = *rangeMax = overflowPoint->point.y; + } + for( ; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) { + *rangeMin = ( ( *rangeMin < overflowPoint->point.y ) ? *rangeMin : overflowPoint->point.y ); + *rangeMax = ( ( *rangeMax < overflowPoint->point.y ) ? *rangeMax : overflowPoint->point.y ); + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_rangeMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMin ) { + + int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + ptwXYPoint *p = ptwXY->points; + ptwXYOverflowPoint *overflowPoint = ptwXY->overflowHeader.next; + + *rangeMin = 0.; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->length == 0 ) return( nfu_empty ); + if( nonOverflowLength > 0 ) { + *rangeMin = p->y; + for( i = 1, p++; i < nonOverflowLength; i++, p++ ) *rangeMin = ( ( *rangeMin < p->y ) ? *rangeMin : p->y ); } + else { + *rangeMin = overflowPoint->point.y; + } + for( ; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) + *rangeMin = ( ( *rangeMin < overflowPoint->point.y ) ? *rangeMin : overflowPoint->point.y ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_rangeMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMax ) { + + int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ); + ptwXYPoint *p = ptwXY->points; + ptwXYOverflowPoint *overflowPoint = ptwXY->overflowHeader.next; + + *rangeMax = 0.; + + if( nonOverflowLength < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( ptwXY->length == 0 ) return( nfu_empty ); + if( nonOverflowLength > 0 ) { + *rangeMax = p->y; + for( i = 1, p++; i < nonOverflowLength; i++, p++ ) *rangeMax = ( ( *rangeMax > p->y ) ? *rangeMax : p->y ); } + else { + *rangeMax = overflowPoint->point.y; + } + for( ; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) + *rangeMax = ( ( *rangeMax > overflowPoint->point.y ) ? *rangeMax : overflowPoint->point.y ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +static void ptwXY_initialOverflowPoint( ptwXYOverflowPoint *overflowPoint, ptwXYOverflowPoint *prior, ptwXYOverflowPoint *next ) { + + overflowPoint->prior = prior; + overflowPoint->next = next; + overflowPoint->index = -1; + overflowPoint->point.x = 0.; + overflowPoint->point.y = 0.; +} +/* +************************************************************ +*/ +char const *ptwXY_interpolationToString( ptwXY_interpolation interpolation ) { + + switch( interpolation ) { + case ptwXY_interpolationLinLin : return( linLinInterpolationString ); + case ptwXY_interpolationLogLin : return( logLinInterpolationString ); + case ptwXY_interpolationLinLog : return( linLogInterpolationString ); + case ptwXY_interpolationLogLog : return( logLogInterpolationString ); + case ptwXY_interpolationFlat : return( flatInterpolationString ); + default : + break; + } + return( NULL ); +} +/* +************************************************************ +*/ +ptwXY_interpolation ptwXY_stringToInterpolation( char const *interpolationString ) { + + if( strcmp( interpolationString, "" ) == 0 ) return( ptwXY_interpolationLinLin ); + if( strcmp( interpolationString, linLinInterpolationString ) == 0 ) return( ptwXY_interpolationLinLin ); + if( strcmp( interpolationString, logLinInterpolationString ) == 0 ) return( ptwXY_interpolationLogLin ); + if( strcmp( interpolationString, linLogInterpolationString ) == 0 ) return( ptwXY_interpolationLinLog ); + if( strcmp( interpolationString, logLogInterpolationString ) == 0 ) return( ptwXY_interpolationLogLog ); + if( strcmp( interpolationString, flatInterpolationString ) == 0 ) return( ptwXY_interpolationFlat ); + return( ptwXY_interpolationOther ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_core.cc b/source/processes/hadronic/models/lend/src/ptwXY_core.cc deleted file mode 100644 index cb595da8f2..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_core.cc +++ /dev/null @@ -1,1301 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static char const linLinInterpolationString[] = "linear,linear"; -static char const linLogInterpolationString[] = "linear,log"; -static char const logLinInterpolationString[] = "log,linear"; -static char const logLogInterpolationString[] = "log,log"; -static char const flatInterpolationString[] = "flat"; - -static void ptwXY_initialOverflowPoint( ptwXYOverflowPoint *overflowPoint, ptwXYOverflowPoint *prior, ptwXYOverflowPoint *next ); -static nfu_status ptwXY_mergeFrom( ptwXYPoints *ptwXY, int incY, int length, double *xs, double *ys ); -static int ptwXY_mergeCompareFunction( void const *x1p, void const *x2p ); -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_new( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, double biSectionMax, - double accuracy, int64_t primarySize, int64_t secondarySize, nfu_status *status, int userFlag ) { - - ptwXYPoints *ptwXY = (ptwXYPoints *) nfu_calloc( sizeof( ptwXYPoints ), 1 ); - - *status = nfu_mallocError; - if( ptwXY == NULL ) return( NULL ); - ptwXY_setup( ptwXY, interpolation, interpolationOtherInfo, biSectionMax, accuracy, primarySize, - secondarySize, userFlag ); - if( ( *status = ptwXY->status ) != nfu_Okay ) { - ptwXY = (ptwXYPoints *) nfu_free( ptwXY ); - } - return( ptwXY ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setup( ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag ) { - - ptwXY->status = nfu_Okay; - ptwXY->typeX = ptwXY_sigma_none; - ptwXY->typeY = ptwXY_sigma_none; - ptwXY->interpolation = interpolation; - ptwXY->interpolationOtherInfo.interpolationString = NULL; - ptwXY->interpolationOtherInfo.getValueFunc = NULL; - ptwXY->interpolationOtherInfo.argList = NULL; - switch( interpolation ) { - case ptwXY_interpolationLinLin : - ptwXY->interpolationOtherInfo.interpolationString = linLinInterpolationString; break; - case ptwXY_interpolationLinLog : - ptwXY->interpolationOtherInfo.interpolationString = linLogInterpolationString; break; - case ptwXY_interpolationLogLin : - ptwXY->interpolationOtherInfo.interpolationString = logLinInterpolationString; break; - case ptwXY_interpolationLogLog : - ptwXY->interpolationOtherInfo.interpolationString = logLogInterpolationString; break; - case ptwXY_interpolationFlat : - ptwXY->interpolationOtherInfo.interpolationString = flatInterpolationString; break; - case ptwXY_interpolationOther : /* For ptwXY_interpolationOther, interpolationOtherInfo and interpolationString must be defined. */ - if( interpolationOtherInfo == NULL ) { - ptwXY->status = nfu_otherInterpolation; } - else { - if( interpolationOtherInfo->interpolationString == NULL ) { - ptwXY->status = nfu_otherInterpolation; } - else { - if( ( ptwXY->interpolationOtherInfo.interpolationString = strdup( interpolationOtherInfo->interpolationString ) ) == NULL ) { - ptwXY->status = nfu_mallocError; - } - } - ptwXY->interpolationOtherInfo.getValueFunc = interpolationOtherInfo->getValueFunc; - ptwXY->interpolationOtherInfo.argList = interpolationOtherInfo->argList; - } - } - ptwXY->userFlag = 0; - ptwXY_setUserFlag( ptwXY, userFlag ); - ptwXY->biSectionMax = ptwXY_maxBiSectionMax; - ptwXY_setBiSectionMax( ptwXY, biSectionMax ); - ptwXY->accuracy = ptwXY_minAccuracy; - ptwXY_setAccuracy( ptwXY, accuracy ); - - ptwXY->length = 0; - ptwXY->allocatedSize = 0; - ptwXY->overflowLength = 0; - ptwXY->overflowAllocatedSize = 0; - ptwXY->mallocFailedSize = 0; - - ptwXY_initialOverflowPoint( &(ptwXY->overflowHeader), &(ptwXY->overflowHeader), &(ptwXY->overflowHeader) ); - - ptwXY->points = NULL; - ptwXY->overflowPoints = NULL; - - ptwXY_reallocatePoints( ptwXY, primarySize, 0 ); - ptwXY_reallocateOverflowPoints( ptwXY, secondarySize ); - if( ptwXY->status != nfu_Okay ) ptwXY_release( ptwXY ); - return( ptwXY->status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_create( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, - nfu_status *status, int userFlag ) { - - ptwXYPoints *ptwXY; - - if( primarySize < length ) primarySize = length; - if( ( ptwXY = ptwXY_new( interpolation, interpolationOtherInfo, biSectionMax, accuracy, primarySize, - secondarySize, status, userFlag ) ) != NULL ) { - if( ( *status = ptwXY_setXYData( ptwXY, length, xy ) ) != nfu_Okay ) { - ptwXY = ptwXY_free( ptwXY ); - } - } - return( ptwXY ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_createFrom_Xs_Ys( ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, - double const *Ys, nfu_status *status, int userFlag ) { - - int i; - ptwXYPoints *ptwXY; - - if( primarySize < length ) primarySize = length; - if( ( ptwXY = ptwXY_new( interpolation, interpolationOtherInfo, biSectionMax, accuracy, primarySize, - secondarySize, status, userFlag ) ) != NULL ) { - for( i = 0; i < length; i++ ) { - ptwXY->points[i].x = Xs[i]; - ptwXY->points[i].y = Ys[i]; - } - ptwXY->length = length; - } - - return( ptwXY ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_copy( ptwXYPoints *dest, ptwXYPoints *src ) { - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( src ); - ptwXYPoint *pointFrom, *pointTo; - ptwXYOverflowPoint *o, *overflowHeader = &(src->overflowHeader); - - if( dest->status != nfu_Okay ) return( dest->status ); - if( src->status != nfu_Okay ) return( src->status ); - - ptwXY_clear( dest ); - if( dest->interpolation == ptwXY_interpolationOther ) { - if( dest->interpolationOtherInfo.interpolationString != NULL ) { - dest->interpolationOtherInfo.interpolationString = (char const *) nfu_free( (void *) dest->interpolationOtherInfo.interpolationString ); - } - } - dest->interpolation = ptwXY_interpolationLinLin; /* This and prior lines are in case interpolation is 'other' and ptwXY_reallocatePoints fails. */ - if( dest->allocatedSize < src->length ) ptwXY_reallocatePoints( dest, src->length, 0 ); - if( dest->status != nfu_Okay ) return( dest->status ); - dest->interpolation = src->interpolation; - if( dest->interpolation == ptwXY_interpolationOther ) { - if( src->interpolationOtherInfo.interpolationString != NULL ) { - if( ( dest->interpolationOtherInfo.interpolationString = strdup( src->interpolationOtherInfo.interpolationString ) ) == NULL ) - return( dest->status = nfu_mallocError ); - } } - else { - dest->interpolationOtherInfo.interpolationString = src->interpolationOtherInfo.interpolationString; - } - dest->interpolationOtherInfo.getValueFunc = src->interpolationOtherInfo.getValueFunc; - dest->interpolationOtherInfo.argList = src->interpolationOtherInfo.argList; - dest->userFlag = src->userFlag; - dest->biSectionMax = src->biSectionMax; - dest->accuracy = src->accuracy; - dest->minFractional_dx = src->minFractional_dx; - pointFrom = src->points; - o = src->overflowHeader.next; - pointTo = dest->points; - i = 0; - while( o != overflowHeader ) { - if( i < nonOverflowLength ) { - if( pointFrom->x < o->point.x ) { - *pointTo = *pointFrom; - i++; - pointFrom++; } - else { - *pointTo = o->point; - o = o->next; - } } - else { - *pointTo = o->point; - o = o->next; - } - pointTo++; - } // Loop checking, 11.06.2015, T. Koi - for( ; i < nonOverflowLength; i++, pointFrom++, pointTo++ ) *pointTo = *pointFrom; - dest->length = src->length; - return( dest->status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_clone( ptwXYPoints *ptwXY, nfu_status *status ) { - - return( ptwXY_slice( ptwXY, 0, ptwXY->length, ptwXY->overflowAllocatedSize, status ) ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_cloneToInterpolation( ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo, nfu_status *status ) { - - ptwXYPoints *n1; - - if( interpolationTo == ptwXY_interpolationOther ) { - *status = nfu_otherInterpolation; - return( NULL ); - } - if( ( n1 = ptwXY_clone( ptwXY, status ) ) != NULL ) { - if( n1->interpolation == ptwXY_interpolationOther ) nfu_free( (void *) n1->interpolationOtherInfo.interpolationString ); - n1->interpolation = interpolationTo; - switch( interpolationTo ) { - case ptwXY_interpolationLinLin : - n1->interpolationOtherInfo.interpolationString = linLinInterpolationString; break; - case ptwXY_interpolationLinLog : - n1->interpolationOtherInfo.interpolationString = linLogInterpolationString; break; - case ptwXY_interpolationLogLin : - n1->interpolationOtherInfo.interpolationString = logLinInterpolationString; break; - case ptwXY_interpolationLogLog : - n1->interpolationOtherInfo.interpolationString = logLogInterpolationString; break; - case ptwXY_interpolationFlat : - n1->interpolationOtherInfo.interpolationString = flatInterpolationString; break; - case ptwXY_interpolationOther : /* Does not happen, but needed to stop compilers from complaining. */ - break; - } - n1->interpolationOtherInfo.getValueFunc = NULL; - n1->interpolationOtherInfo.argList = NULL; - } - return( n1 ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_slice( ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize, nfu_status *status ) { - - int64_t i, length; - ptwXYPoints *n; - - *status = nfu_badSelf; - if( ptwXY->status != nfu_Okay ) return( NULL ); - - *status = nfu_badIndex; - if( index2 < index1 ) return( NULL ); - if( index1 < 0 ) index1 = 0; - if( index2 > ptwXY->length ) index2 = ptwXY->length; - - length = index2 - index1; - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( NULL ); - if( ( n = ptwXY_new( ptwXY->interpolation, &(ptwXY->interpolationOtherInfo), ptwXY->biSectionMax, - ptwXY->accuracy, length, secondarySize, status, ptwXY->userFlag ) ) == NULL ) return( NULL ); - - *status = n->status = ptwXY->status; - for( i = index1; i < index2; i++ ) n->points[i - index1] = ptwXY->points[i]; - n->length = length; - return( n ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_xSlice( ptwXYPoints *ptwXY, double xMin, double xMax, int64_t secondarySize, int fill, nfu_status *status ) { - - int64_t i, i1, i2; - double y; - ptwXYPoints *n = NULL; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( NULL ); - - if( ( ptwXY->length == 0 ) || ( ptwXY_getXMin( ptwXY ) >= xMax ) || ( ptwXY_getXMax( ptwXY ) <= xMin ) ) { - n = ptwXY_new( ptwXY->interpolation, &(ptwXY->interpolationOtherInfo), ptwXY->biSectionMax, - ptwXY->accuracy, 0, secondarySize, status, ptwXY->userFlag ); } - else { - if( ( n = ptwXY_clone( ptwXY, status ) ) == NULL ) return( NULL ); - if( ( n->points[0].x < xMin ) || ( n->points[n->length - 1].x > xMax ) ) { - if( fill && ( n->points[n->length - 1].x > xMax ) ) { - if( ( *status = ptwXY_getValueAtX( n, xMax, &y ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( n, xMax, y ) ) != nfu_Okay ) goto Err; - } - if( fill && ( n->points[0].x < xMin ) ) { - if( ( *status = ptwXY_getValueAtX( n, xMin, &y ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( n, xMin, y ) ) != nfu_Okay ) goto Err; - } - ptwXY_coalescePoints( n, n->length + n->overflowAllocatedSize, NULL, 0 ); - for( i1 = 0; i1 < n->length; i1++ ) if( n->points[i1].x >= xMin ) break; - for( i2 = n->length - 1; i2 > 0; i2-- ) if( n->points[i2].x <= xMax ) break; - i2++; - if( i1 > 0 ) { - for( i = i1; i < i2; i++ ) n->points[i- i1] = n->points[i]; - } - n->length = i2 - i1; - } - } - return( n ); - -Err: - if( n != NULL ) ptwXY_free( n ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_xMinSlice( ptwXYPoints *ptwXY, double xMin, int64_t secondarySize, int fill, nfu_status *status ) { - - double xMax = 1.1 * xMin + 1; - - if( xMin < 0 ) xMax = 0.9 * xMin + 1; - if( ptwXY->length > 0 ) xMax = ptwXY_getXMax( ptwXY ); - return( ptwXY_xSlice( ptwXY, xMin, xMax, secondarySize, fill, status ) ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_xMaxSlice( ptwXYPoints *ptwXY, double xMax, int64_t secondarySize, int fill, nfu_status *status ) { - - double xMin = 0.9 * xMax - 1; - - if( xMax < 0 ) xMin = 1.1 * xMax - 1; - if( ptwXY->length > 0 ) xMin = ptwXY_getXMin( ptwXY ); - return( ptwXY_xSlice( ptwXY, xMin, xMax, secondarySize, fill, status ) ); -} -/* -************************************************************ -*/ -ptwXY_interpolation ptwXY_getInterpolation( ptwXYPoints *ptwXY ) { - - return( ptwXY->interpolation ); -} -/* -************************************************************ -*/ -char const *ptwXY_getInterpolationString( ptwXYPoints *ptwXY ) { - - return( ptwXY->interpolationOtherInfo.interpolationString ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_getStatus( ptwXYPoints *ptwXY ) { - - return( ptwXY->status ); -} -/* -************************************************************ -*/ -int ptwXY_getUserFlag( ptwXYPoints *ptwXY ) { - - return( ptwXY->userFlag ); -} -/* -************************************************************ -*/ -void ptwXY_setUserFlag( ptwXYPoints *ptwXY, int userFlag ) { - - ptwXY->userFlag = userFlag; -} -/* -************************************************************ -*/ -double ptwXY_getAccuracy( ptwXYPoints *ptwXY ) { - - return( ptwXY->accuracy ); -} -/* -************************************************************ -*/ -double ptwXY_setAccuracy( ptwXYPoints *ptwXY, double accuracy ) { - - if( accuracy < ptwXY_minAccuracy ) accuracy = ptwXY_minAccuracy; - if( accuracy < ptwXY->accuracy ) accuracy = ptwXY->accuracy; - if( accuracy > 1 ) accuracy = 1.; - ptwXY->accuracy = accuracy; - return( ptwXY->accuracy ); -} -/* -************************************************************ -*/ -double ptwXY_getBiSectionMax( ptwXYPoints *ptwXY ) { - - return( ptwXY->biSectionMax ); -} -/* -************************************************************ -*/ -double ptwXY_setBiSectionMax( ptwXYPoints *ptwXY, double biSectionMax ) { - - if( biSectionMax < 0 ) { - biSectionMax = 0; } - else if( biSectionMax > ptwXY_maxBiSectionMax ) { - biSectionMax = ptwXY_maxBiSectionMax; - } - ptwXY->biSectionMax = biSectionMax; - return( ptwXY->biSectionMax ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_reallocatePoints( ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize ) { -/* -* This is for allocating/reallocating the primary data memory. -*/ - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - if( size < ptwXY_minimumSize ) size = ptwXY_minimumSize; /* ptwXY_minimumSize must be > 0. */ - if( size < ptwXY->length ) size = ptwXY->length; - if( size != ptwXY->allocatedSize ) { - if( size > ptwXY->allocatedSize ) { /* Increase size of allocated points. */ - ptwXY->points = (ptwXYPoint *) nfu_realloc( (size_t) size * sizeof( ptwXYPoint ), ptwXY->points ); } - else if( ( ptwXY->allocatedSize > 2 * size ) || forceSmallerResize ) { /* Decrease size, if at least 1/2 size reduction or if forced to. */ - ptwXY->points = (ptwXYPoint *) nfu_realloc( (size_t) size * sizeof( ptwXYPoint ), ptwXY->points ); } - else { - size = ptwXY->allocatedSize; /* Size is < ptwXY->allocatedSize, but realloc not called. */ - } - if( ptwXY->points == NULL ) { - ptwXY->length = 0; - ptwXY->mallocFailedSize = size; - size = 0; - ptwXY->status = nfu_mallocError; - } - ptwXY->allocatedSize = size; - } - return( ptwXY->status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_reallocateOverflowPoints( ptwXYPoints *ptwXY, int64_t size ) { -/* -* This is for allocating/reallocating the secondary data memory. -*/ - nfu_status status = nfu_Okay; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - if( size < ptwXY_minimumOverflowSize ) size = ptwXY_minimumOverflowSize; /* ptwXY_minimumOverflowSize must be > 0. */ - if( size < ptwXY->overflowLength ) status = ptwXY_coalescePoints( ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, NULL, 0 ); - if( status == nfu_Okay ) { - if( size != ptwXY->overflowAllocatedSize ) { - ptwXY->overflowPoints = (ptwXYOverflowPoint *) nfu_realloc( (size_t) size * sizeof( ptwXYOverflowPoint ), ptwXY->overflowPoints ); - if( ptwXY->overflowPoints == NULL ) { - ptwXY->length = 0; - ptwXY->overflowLength = 0; - ptwXY->mallocFailedSize = size; - size = 0; - ptwXY->status = nfu_mallocError; - } - } - ptwXY->overflowAllocatedSize = size; } - else { - ptwXY->status = status; - } - return( ptwXY->status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_coalescePoints( ptwXYPoints *ptwXY, int64_t size, ptwXYPoint *newPoint, int forceSmallerResize ) { - - int addNewPoint; - int64_t length = ptwXY->length + ( ( newPoint != NULL ) ? 1 : 0 ); - ptwXYOverflowPoint *last = ptwXY->overflowHeader.prior; - ptwXYPoint *pointsFrom, *pointsTo; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( ptwXY->overflowLength == 0 ) return( nfu_Okay ); - - if( size < length ) size = length; - if( size > ptwXY->allocatedSize ) { - if( ptwXY_reallocatePoints( ptwXY, size, forceSmallerResize ) != nfu_Okay ) return( ptwXY->status ); - } - pointsFrom = &(ptwXY->points[ptwXY_getNonOverflowLength( ptwXY ) - 1]); - pointsTo = &(ptwXY->points[length - 1]); - while( last != &(ptwXY->overflowHeader) ) { - addNewPoint = 0; - if( newPoint != NULL ) { - if( ( pointsFrom >= ptwXY->points ) && ( pointsFrom->x > last->point.x ) ) { - if( newPoint->x > pointsFrom->x ) addNewPoint = 1; } - else { - if( newPoint->x > last->point.x ) addNewPoint = 1; - } - if( addNewPoint == 1 ) { - *pointsTo = *newPoint; - newPoint = NULL; - } - } - if( addNewPoint == 0 ) { - if( ( pointsFrom >= ptwXY->points ) && ( pointsFrom->x > last->point.x ) ) { - *pointsTo = *pointsFrom; - pointsFrom--; } - else { - *pointsTo = last->point; - last = last->prior; - } - } - pointsTo--; - } // Loop checking, 11.06.2015, T. Koi - while( ( newPoint != NULL ) && ( pointsFrom >= ptwXY->points ) ) { - if( newPoint->x > pointsFrom->x ) { - *pointsTo = *newPoint; - newPoint = NULL; } - else { - *pointsTo = *pointsFrom; - pointsFrom--; - } - pointsTo--; - } // Loop checking, 11.06.2015, T. Koi - if( newPoint != NULL ) *pointsTo = *newPoint; - ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); - ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); - ptwXY->length = length; - ptwXY->overflowLength = 0; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_simpleCoalescePoints( ptwXYPoints *ptwXY ) { - - return( ptwXY_coalescePoints( ptwXY, ptwXY->length, NULL, 0 ) ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_clear( ptwXYPoints *ptwXY ) { - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - ptwXY->length = 0; - ptwXY->overflowLength = 0; - ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); - ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_release( ptwXYPoints *ptwXY ) { -/* -* Note, this routine does not free ptwXY (i.e., it does not undo all of ptwXY_new). -*/ - - if( ptwXY->interpolation == ptwXY_interpolationOther ) { - if( ptwXY->interpolationOtherInfo.interpolationString != NULL ) - ptwXY->interpolationOtherInfo.interpolationString = (char const *) nfu_free( (void *) ptwXY->interpolationOtherInfo.interpolationString ); - } - ptwXY->interpolation = ptwXY_interpolationLinLin; - ptwXY->interpolationOtherInfo.getValueFunc = NULL; - ptwXY->interpolationOtherInfo.argList = NULL; - ptwXY->length = 0; - ptwXY->allocatedSize = 0; - ptwXY->points = (ptwXYPoint *) nfu_free( ptwXY->points ); - - ptwXY->overflowLength = 0; - ptwXY->overflowAllocatedSize = 0; - ptwXY->overflowPoints = (ptwXYOverflowPoint *) nfu_free( ptwXY->overflowPoints ); - - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_free( ptwXYPoints *ptwXY ) { - - if( ptwXY != NULL ) ptwXY_release( ptwXY ); - nfu_free( ptwXY ); - return( (ptwXYPoints *) NULL ); -} -/* -************************************************************ -*/ -int64_t ptwXY_length( ptwXYPoints *ptwXY ) { - - return( ptwXY->length ); -} -/* -************************************************************ -*/ -int64_t ptwXY_getNonOverflowLength( ptwXYPoints const *ptwXY ) { - - return( ptwXY->length - ptwXY->overflowLength ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setXYData( ptwXYPoints *ptwXY, int64_t length, double const *xy ) { - - nfu_status status = nfu_Okay; - int64_t i; - ptwXYPoint *p; - double const *d = xy; - double xOld = 0.; - - if( length > ptwXY->allocatedSize ) { - status = ptwXY_reallocatePoints( ptwXY, length, 0 ); - if( status != nfu_Okay ) return( status ); - } - for( i = 0, p = ptwXY->points; i < length; i++, p++ ) { - if( i != 0 ) { - if( *d <= xOld ) { - status = nfu_XNotAscending; - ptwXY->status = nfu_XNotAscending; - length = 0; - break; - } - } - xOld = *d; - p->x = *(d++); - p->y = *(d++); - } - ptwXY->overflowHeader.next = &(ptwXY->overflowHeader); - ptwXY->overflowHeader.prior = &(ptwXY->overflowHeader); - ptwXY->overflowLength = 0; - ptwXY->length = length; - return( ptwXY->status = status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setXYDataFromXsAndYs( ptwXYPoints *ptwXY, int64_t length, double const *x, double const *y ) { - - nfu_status status; - int64_t i; - ptwXYPoint *p; - double xOld = 0.; - - if( ( status = ptwXY_clear( ptwXY ) ) != nfu_Okay ) return( status ); - if( length > ptwXY->allocatedSize ) { - if( ( status = ptwXY_reallocatePoints( ptwXY, length, 0 ) ) != nfu_Okay ) return( status ); - } - for( i = 0, p = ptwXY->points; i < length; i++, p++, x++, y++ ) { - if( i != 0 ) { - if( *x <= xOld ) { - status = ptwXY->status = nfu_XNotAscending; - length = 0; - break; - } - } - xOld = *x; - p->x = *x; - p->y = *y; - } - ptwXY->length = length; - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_deletePoints( ptwXYPoints *ptwXY, int64_t i1, int64_t i2 ) { - - int64_t n = ptwXY->length - ( i2 - i1 ); - - if( ( ptwXY->status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( ptwXY->status ); - if( ( i1 < 0 ) || ( i1 > i2 ) || ( i2 > ptwXY->length ) ) return( nfu_badIndex ); - if( i1 != i2 ) { - for( ; i2 < ptwXY->length; i1++, i2++ ) ptwXY->points[i1] = ptwXY->points[i2]; - ptwXY->length = n; - } - return( ptwXY->status ); -} -/* -************************************************************ -*/ -ptwXYPoint *ptwXY_getPointAtIndex( ptwXYPoints *ptwXY, int64_t index ) { - - if( ptwXY->status != nfu_Okay ) return( NULL ); - if( ( index < 0 ) || ( index >= ptwXY->length ) ) return( NULL ); - return( ptwXY_getPointAtIndex_Unsafely( ptwXY, index ) ); -} -/* -************************************************************ -*/ -ptwXYPoint *ptwXY_getPointAtIndex_Unsafely( ptwXYPoints *ptwXY, int64_t index ) { - - int64_t i; - ptwXYOverflowPoint *overflowPoint; - - for( overflowPoint = ptwXY->overflowHeader.next, i = 0; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next, i++ ) { - if( overflowPoint->index == index ) return( &(overflowPoint->point) ); - if( overflowPoint->index > index ) break; - } - return( &(ptwXY->points[index - i]) ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_getXYPairAtIndex( ptwXYPoints *ptwXY, int64_t index, double *x, double *y ) { - - ptwXYPoint *p = ptwXY_getPointAtIndex( ptwXY, index ); - - if( p == NULL ) return( nfu_badIndex ); - *x = p->x; - *y = p->y; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX( ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint ) { - - int closeIsEqual; - ptwXYPoint *closePoint; - - return( ptwXY_getPointsAroundX_closeIsEqual( ptwXY, x, lessThanEqualXPoint, greaterThanXPoint, 0, &closeIsEqual, &closePoint ) ); -} -/* -************************************************************ -*/ -ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual( ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, - ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, ptwXYPoint **closePoint ) { - - int64_t overflowIndex, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - int64_t indexMin, indexMid, indexMax; - ptwXY_dataFrom xMinFrom, xMaxFrom; - double xMin = ptwXY_getXMinAndFrom( ptwXY, &xMinFrom ), xMax = ptwXY_getXMaxAndFrom( ptwXY, &xMaxFrom ); - ptwXYOverflowPoint *overflowPoint, *overflowHeader = &(ptwXY->overflowHeader); - ptwXY_lessEqualGreaterX status = ptwXY_lessEqualGreaterX_empty; - ptwXYPoint *lowerPoint = NULL, *upperPoint = NULL; - - ptwXY_initialOverflowPoint( lessThanEqualXPoint, overflowHeader, NULL ); - ptwXY_initialOverflowPoint( greaterThanXPoint, overflowHeader, NULL ); - if( ptwXY->length != 0 ) { - if( x < xMin ) { - status = ptwXY_lessEqualGreaterX_lessThan; - if( xMinFrom == ptwXY_dataFrom_Points ) { - greaterThanXPoint->prior = overflowHeader; - greaterThanXPoint->index = 0; - greaterThanXPoint->point = ptwXY->points[0]; - *closePoint = &(ptwXY->points[0]); } - else { - *greaterThanXPoint = *(overflowHeader->next); - *closePoint = &(overflowHeader->next->point); - } } - else if( x > xMax ) { - status = ptwXY_lessEqualGreaterX_greater; - if( xMaxFrom == ptwXY_dataFrom_Points ) { - lessThanEqualXPoint->prior = overflowHeader->prior; - lessThanEqualXPoint->index = nonOverflowLength - 1; - lessThanEqualXPoint->point = ptwXY->points[lessThanEqualXPoint->index]; - *closePoint = &(ptwXY->points[lessThanEqualXPoint->index]); } - else { - *lessThanEqualXPoint = *(overflowHeader->prior); - *closePoint = &(overflowHeader->prior->point); - } } - else { /* xMin <= x <= xMax */ - status = ptwXY_lessEqualGreaterX_between; /* Default for this condition, can only be between or equal. */ - for( overflowPoint = overflowHeader->next, overflowIndex = 0; overflowPoint != overflowHeader; - overflowPoint = overflowPoint->next, overflowIndex++ ) if( overflowPoint->point.x > x ) break; - overflowPoint = overflowPoint->prior; - if( ( overflowPoint != overflowHeader ) && ( overflowPoint->point.x == x ) ) { - status = ptwXY_lessEqualGreaterX_equal; - *lessThanEqualXPoint = *overflowPoint; } - else if( ptwXY->length == 1 ) { /* If here and length = 1, then ptwXY->points[0].x == x. */ - status = ptwXY_lessEqualGreaterX_equal; - lessThanEqualXPoint->index = 0; - lessThanEqualXPoint->point = ptwXY->points[0]; } - else { /* ptwXY->length > 1 */ - indexMin = 0; - indexMax = nonOverflowLength - 1; - indexMid = ( indexMin + indexMax ) >> 1; - while( ( indexMin != indexMid ) && ( indexMid != indexMax ) ) { - if( ptwXY->points[indexMid].x > x ) { - indexMax = indexMid; } - else { - indexMin = indexMid; - } - indexMid = ( indexMin + indexMax ) >> 1; - } // Loop checking, 11.06.2015, T. Koi - if( ptwXY->points[indexMin].x == x ) { - status = ptwXY_lessEqualGreaterX_equal; - lessThanEqualXPoint->index = indexMin; - lessThanEqualXPoint->point = ptwXY->points[indexMin]; } - else if( ptwXY->points[indexMax].x == x ) { - status = ptwXY_lessEqualGreaterX_equal; - lessThanEqualXPoint->index = indexMax; - lessThanEqualXPoint->point = ptwXY->points[indexMax]; } - else { - if( ptwXY->points[indexMin].x > x ) indexMax = 0; - if( ptwXY->points[indexMax].x < x ) indexMin = indexMax; - if( ( overflowPoint == overflowHeader ) || /* x < xMin of overflow points. */ - ( ( ptwXY->points[indexMin].x > overflowPoint->point.x ) && ( ptwXY->points[indexMin].x < x ) ) ) { - if( overflowPoint != overflowHeader ) lessThanEqualXPoint->prior = overflowPoint; - lowerPoint = &(ptwXY->points[indexMin]); - lessThanEqualXPoint->index = indexMin; - lessThanEqualXPoint->point = ptwXY->points[indexMin]; } - else { - lowerPoint = &(overflowPoint->point); - *lessThanEqualXPoint = *overflowPoint; - } - if( ( overflowPoint->next == overflowHeader ) || /* x > xMax of overflow points. */ - ( ( ptwXY->points[indexMax].x < overflowPoint->next->point.x ) && ( ptwXY->points[indexMax].x > x ) ) ) { - upperPoint = &(ptwXY->points[indexMax]); - greaterThanXPoint->index = indexMax; - greaterThanXPoint->point = ptwXY->points[indexMax]; } - else { - upperPoint = &(overflowPoint->next->point); - *greaterThanXPoint = *(overflowPoint->next); - } - } - } - } - } - - *closeIsEqual = 0; - if( eps > 0 ) { - double absX = std::fabs( x ); - - if( status == ptwXY_lessEqualGreaterX_lessThan ) { - if( absX < std::fabs( greaterThanXPoint->point.x ) ) absX = std::fabs( greaterThanXPoint->point.x ); - if( ( greaterThanXPoint->point.x - x ) < eps * absX ) *closeIsEqual = 1; } - else if( status == ptwXY_lessEqualGreaterX_greater ) { - if( absX < std::fabs( lessThanEqualXPoint->point.x ) ) absX = std::fabs( lessThanEqualXPoint->point.x ); - if( ( x - lessThanEqualXPoint->point.x ) < eps * absX ) *closeIsEqual = -1; } - else if( status == ptwXY_lessEqualGreaterX_between ) { - if( ( x - lessThanEqualXPoint->point.x ) < ( greaterThanXPoint->point.x - x ) ) { /* x is closer to lower point. */ - *closePoint = lowerPoint; - if( absX < std::fabs( lessThanEqualXPoint->point.x ) ) absX = std::fabs( lessThanEqualXPoint->point.x ); - if( ( x - lessThanEqualXPoint->point.x ) < eps * absX ) *closeIsEqual = -1; } - else { /* x is closer to upper point. */ - *closePoint = upperPoint; - if( absX < std::fabs( greaterThanXPoint->point.x ) ) absX = std::fabs( greaterThanXPoint->point.x ); - if( ( greaterThanXPoint->point.x - x ) < eps * absX ) *closeIsEqual = 1; - } } - else if( status == ptwXY_lessEqualGreaterX_equal ) { - *closeIsEqual = 1; - } - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_getValueAtX( ptwXYPoints *ptwXY, double x, double *y ) { - - nfu_status status = nfu_XOutsideDomain; - ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; - ptwXY_lessEqualGreaterX legx = ptwXY_getPointsAroundX( ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint ); - - *y = 0.; - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - switch( legx ) { - case ptwXY_lessEqualGreaterX_empty : - case ptwXY_lessEqualGreaterX_lessThan : - case ptwXY_lessEqualGreaterX_greater : - break; - case ptwXY_lessEqualGreaterX_equal : - status = nfu_Okay; - *y = lessThanEqualXPoint.point.y; - break; - case ptwXY_lessEqualGreaterX_between : - if( ptwXY->interpolationOtherInfo.getValueFunc != NULL ) { - status = ptwXY->interpolationOtherInfo.getValueFunc( ptwXY->interpolationOtherInfo.argList, x, y, - lessThanEqualXPoint.point.x, lessThanEqualXPoint.point.y, greaterThanXPoint.point.x, greaterThanXPoint.point.y ); } - else { - status = ptwXY_interpolatePoint( ptwXY->interpolation, x, y, lessThanEqualXPoint.point.x, lessThanEqualXPoint.point.y, - greaterThanXPoint.point.x, greaterThanXPoint.point.y ); - } - break; - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setValueAtX( ptwXYPoints *ptwXY, double x, double y ) { - - return( ptwXY_setValueAtX_overrideIfClose( ptwXY, x, y, 0., 0 ) ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setValueAtX_overrideIfClose( ptwXYPoints *ptwXY, double x, double y, double eps, int override ) { - - int closeIsEqual; - int64_t nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ), i; - nfu_status status = nfu_Okay; - ptwXY_lessEqualGreaterX legx; - ptwXYPoint *point = NULL, newPoint = { x, y }; - ptwXYOverflowPoint *overflowPoint, *p, *overflowHeader = &(ptwXY->overflowHeader); - ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; - ptwXYPoint *closePoint = NULL; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - legx = ptwXY_getPointsAroundX_closeIsEqual( ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint, eps, &closeIsEqual, &closePoint ); - switch( legx ) { - case ptwXY_lessEqualGreaterX_lessThan : - case ptwXY_lessEqualGreaterX_greater : - case ptwXY_lessEqualGreaterX_between : - if( closeIsEqual ) { - if( !override ) return( status ); - point = closePoint; - legx = ptwXY_lessEqualGreaterX_equal; - x = point->x; } - else { - if( ( legx == ptwXY_lessEqualGreaterX_greater ) && ( nonOverflowLength < ptwXY->allocatedSize ) ) { - point = &(ptwXY->points[nonOverflowLength]); } - else { - if( ptwXY->overflowLength == ptwXY->overflowAllocatedSize ) - return( ptwXY_coalescePoints( ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, &newPoint, 0 ) ); - overflowPoint = &(ptwXY->overflowPoints[ptwXY->overflowLength]); - if( legx == ptwXY_lessEqualGreaterX_lessThan ) { - overflowPoint->prior = greaterThanXPoint.prior; - overflowPoint->index = 0; } - else { /* Between or greater and must go in overflow area. */ - if( legx == ptwXY_lessEqualGreaterX_greater ) { - overflowPoint->prior = overflowHeader->prior; - overflowPoint->index = ptwXY->length; } - else { - overflowPoint->prior = lessThanEqualXPoint.prior; - if( lessThanEqualXPoint.next != NULL ) { - if( lessThanEqualXPoint.point.x < x ) - overflowPoint->prior = lessThanEqualXPoint.prior->next; - i = 1; } - else { - for( p = overflowHeader->next, i = 1; p != overflowHeader; p = p->next, i++ ) - if( p->point.x > x ) break; - } - overflowPoint->index = lessThanEqualXPoint.index + i; - } - } - overflowPoint->next = overflowPoint->prior->next; - overflowPoint->prior->next = overflowPoint; - overflowPoint->next->prior = overflowPoint; - point = &(overflowPoint->point); - for( overflowPoint = overflowPoint->next; overflowPoint != overflowHeader; overflowPoint = overflowPoint->next ) { - overflowPoint->index++; - } - ptwXY->overflowLength++; - } - } - break; - case ptwXY_lessEqualGreaterX_empty : - point = ptwXY->points; /* ptwXY_minimumSize must be > 0 so there is always space here. */ - break; - case ptwXY_lessEqualGreaterX_equal : - if( closeIsEqual && !override ) return( status ); - if( lessThanEqualXPoint.next == NULL ) { - point = &(ptwXY->points[lessThanEqualXPoint.index]); } - else { - point = &(lessThanEqualXPoint.prior->next->point); - } - break; - } - if( status == nfu_Okay ) { - point->x = x; - point->y = y; - if( legx != ptwXY_lessEqualGreaterX_equal ) ptwXY->length++; - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_mergeFromXsAndYs( ptwXYPoints *ptwXY, int length, double *xs, double *ys ) { - - return( ptwXY_mergeFrom( ptwXY, 1, length, xs, ys ) ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_mergeFromXYs( ptwXYPoints *ptwXY, int length, double *xys ) { - - int i; - double *xs, *p1, *p2; - nfu_status status; - - if( length < 0 ) return( nfu_badInput ); - if( length == 0 ) return( nfu_Okay ); - if( ( xs = (double *) nfu_malloc( length * sizeof( double ) ) ) == NULL ) return( nfu_mallocError ); - for( i = 0, p1 = xs, p2 = xys; i < length; i++, p1++, p2 += 2 ) *p1 = *p2; - status = ptwXY_mergeFrom( ptwXY, 2, length, xs, xys ); - nfu_free( xs ); - - return( status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_mergeFrom( ptwXYPoints *ptwXY, int /*incY*/, int length, double *xs, double *ys ) { - - int i, j, n; - double *sortedXs, *p1, *p2; - nfu_status status; - ptwXYPoint *point1, *point2; - - if( length < 0 ) return( nfu_badInput ); - if( length == 0 ) return( nfu_Okay ); - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - - //if( ( sortedXs = (double *) nfu_malloc( length * sizeof( double * ) ) ) == NULL ) return( nfu_mallocError ); - //TK fixed for Coverity 63081 - if( ( sortedXs = (double *) nfu_malloc( length * sizeof( double ) ) ) == NULL ) return( nfu_mallocError ); - - for( i = 0, p1 = sortedXs, p2 = xs; i < length; i++, p1++, p2++ ) *p1 = *p2; - //qsort( sortedXs, length, sizeof( double * ), ptwXY_mergeCompareFunction ); - //TK fixed for Coverity 63079 - qsort( sortedXs, length, sizeof( double ), ptwXY_mergeCompareFunction ); - - for( i = 0, p1 = sortedXs, j = 0, n = 0; i < length; i++, p1++, n++ ) { - for( ; j < ptwXY->length; j++, n++ ) { - if( *p1 <= ptwXY->points[j].x ) break; - } - if( j == ptwXY->length ) break; /* Completed all ptwXY points. */ - } - n += (int) ( ( length - i ) + ( ptwXY->length - j ) ); - - if( ( status = ptwXY_reallocatePoints( ptwXY, n, 0 ) ) == nfu_Okay ) { - point1 = &(ptwXY->points[n-1]); - point2 = &(ptwXY->points[length-1]); - for( i = 0, j = 0, p1 = &(sortedXs[length-1]); ( i < length ) && ( j < length ) && ( n > 0 ); n--, point1-- ) { - if( *p1 >= point2->x ) { - point1->x = *p1; - point1->y = ys[(int)(p1 - xs)]; - if( *p1 >= point2->x ) { - point2++; - j++; - } - p1--; - i--; } - else { - *point1 = *point2; - point2++; - j++; - } - } - for( ; i < length; i++, p1--, point1-- ) { - point1->x = *p1; - point1->y = ys[(int)(p1 - xs)]; - } - for( ; j < length; j++, point1--, point2-- ) *point1 = *point2; - } - nfu_free( sortedXs ); - - return( status ); -} -/* -************************************************************ -*/ -static int ptwXY_mergeCompareFunction( void const *x1p, void const *x2p ) { - - double d1 = *((double *) x1p), d2 = *((double *) x2p); - - if( d1 < d2 ) return( -1 ); - if( d1 == d2 ) return( 0 ); - return( 1 ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_appendXY( ptwXYPoints *ptwXY, double x, double y ) { - - int64_t nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXY_dataFrom dataFrom; - - if( ptwXY->length != 0 ) { - double xMax = ptwXY_getXMaxAndFrom( ptwXY, &dataFrom ); - if( xMax >= x ) return( nfu_XNotAscending ); - } - - if( nonOverflowLength < ptwXY->allocatedSize ) { /* Room at end of points. Also handles the case when length = 0. */ - ptwXY->points[nonOverflowLength].x = x; - ptwXY->points[nonOverflowLength].y = y; } - else { - if( ptwXY->overflowLength == ptwXY->overflowAllocatedSize ) { - ptwXYPoint newPoint = { x, y }; - return( ptwXY_coalescePoints( ptwXY, ptwXY->length + ptwXY->overflowAllocatedSize, &newPoint, 0 ) ); } - else { /* Add to end of overflow. */ - ptwXYOverflowPoint *overflowPoint = &(ptwXY->overflowPoints[ptwXY->overflowLength]); - - overflowPoint->prior = ptwXY->overflowHeader.prior; - overflowPoint->next = overflowPoint->prior->next; - overflowPoint->index = ptwXY->length; - overflowPoint->prior->next = overflowPoint; - overflowPoint->next->prior = overflowPoint; - overflowPoint->point.x = x; - overflowPoint->point.y = y; - ptwXY->overflowLength++; - } - } - ptwXY->length++; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_setXYPairAtIndex( ptwXYPoints *ptwXY, int64_t index, double x, double y ) { - - int64_t i, ip1; - ptwXYOverflowPoint *overflowPoint, *pm1, *pp1; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - if( ( index < 0 ) || ( index >= ptwXY->length ) ) return( nfu_badIndex ); - for( overflowPoint = ptwXY->overflowHeader.next, i = 0; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next, i++ ) { - if( overflowPoint->index >= index ) break; - } - ip1 = i; - pm1 = pp1 = overflowPoint; - if( overflowPoint->index == index ) { /* Note, if overflowPoint is header, then its index = -1. */ - pp1 = overflowPoint->next; - ip1++; - } - if( ( pp1 != &(ptwXY->overflowHeader) ) && ( pp1->index == ( index + 1 ) ) ) { /* This if and else check that x < element[index+1]'s x values. */ - if( pp1->point.x <= x ) return( nfu_badIndexForX ); } - else { - if( ( ( index + 1 ) < ptwXY->length ) && ( ptwXY->points[index + 1 - ip1].x <= x ) ) return( nfu_badIndexForX ); - } - if( overflowPoint != &(ptwXY->overflowHeader) ) pm1 = overflowPoint->prior; - if( ( pm1 != &(ptwXY->overflowHeader) ) && ( pm1->index == ( index - 1 ) ) ) { /* This if and else check that x > element[index-1]'s x values. */ - if( pm1->point.x >= x ) return( nfu_badIndexForX ); } - else { - if( ( ( index - 1 ) >= 0 ) && ( ptwXY->points[index - 1 - i].x >= x ) ) return( nfu_badIndexForX ); - } - if( ( overflowPoint != &(ptwXY->overflowHeader) ) && ( overflowPoint->index == index ) ) { - overflowPoint->point.x = x; - overflowPoint->point.y = y; } - else { - index -= i; - ptwXY->points[index].x = x; - ptwXY->points[index].y = y; - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_getSlopeAtX( ptwXYPoints *ptwXY, double x, const char side, double *slope ) { - - nfu_status status = nfu_Okay; - ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; - ptwXY_lessEqualGreaterX legx = ptwXY_getPointsAroundX( ptwXY, x, &lessThanEqualXPoint, &greaterThanXPoint ); - ptwXYPoint *point; - - *slope = 0.; - if( ( side != '-' ) && ( side != '+' ) ) return( nfu_badInput ); - - switch( legx ) { - case ptwXY_lessEqualGreaterX_empty : - case ptwXY_lessEqualGreaterX_lessThan : - case ptwXY_lessEqualGreaterX_greater : - status = nfu_XOutsideDomain; - break; - case ptwXY_lessEqualGreaterX_between : - *slope = ( greaterThanXPoint.point.y - lessThanEqualXPoint.point.y ) / - ( greaterThanXPoint.point.x - lessThanEqualXPoint.point.x ); - break; - case ptwXY_lessEqualGreaterX_equal : - if( side == '-' ) { - if( lessThanEqualXPoint.index == 0 ) { - status = nfu_XOutsideDomain; } - else { - point = ptwXY_getPointAtIndex_Unsafely( ptwXY, lessThanEqualXPoint.index - 1 ); - *slope = ( lessThanEqualXPoint.point.y - point->y ) / ( lessThanEqualXPoint.point.x - point->x ); - } } - else { - if( lessThanEqualXPoint.index == ( ptwXY->length - 1 ) ) { - status = nfu_XOutsideDomain; } - else { - point = ptwXY_getPointAtIndex_Unsafely( ptwXY, lessThanEqualXPoint.index + 1 ); - *slope = ( point->y - lessThanEqualXPoint.point.y ) / ( point->x - lessThanEqualXPoint.point.x ); - } - } - } - - return( status ); -} -/* -************************************************************ -*/ -double ptwXY_getXMinAndFrom( ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom ) { - - int64_t nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - double xMin = nfu_getNAN( ); - - *dataFrom = ptwXY_dataFrom_Unknown; - if( ptwXY->overflowLength > 0 ) { - *dataFrom = ptwXY_dataFrom_Overflow; - xMin = ptwXY->overflowHeader.next->point.x; - if( nonOverflowLength >= 0 ) { - if( xMin > ptwXY->points[0].x ) { - *dataFrom = ptwXY_dataFrom_Points; - xMin = ptwXY->points[0].x; - } - } } - else if( nonOverflowLength > 0 ) { - *dataFrom = ptwXY_dataFrom_Points; - xMin = ptwXY->points[0].x; - } - return( xMin ); -} -/* -************************************************************ -*/ -double ptwXY_getXMin( ptwXYPoints *ptwXY ) { - - ptwXY_dataFrom dataFrom; - - return( ptwXY_getXMinAndFrom( ptwXY, &dataFrom ) ); -} -/* -************************************************************ -*/ -double ptwXY_getXMaxAndFrom( ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom ) { - - int64_t nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - double xMax = nfu_getNAN( ); - - *dataFrom = ptwXY_dataFrom_Unknown; - if( ptwXY->overflowLength > 0 ) { - *dataFrom = ptwXY_dataFrom_Overflow; - xMax = ptwXY->overflowHeader.prior->point.x; - if( ( nonOverflowLength > 0 ) ) { - if( xMax < ptwXY->points[nonOverflowLength-1].x ) { - *dataFrom = ptwXY_dataFrom_Points; - xMax = ptwXY->points[nonOverflowLength-1].x; - } - } } - else if( ptwXY->length > 0 ) { - *dataFrom = ptwXY_dataFrom_Points; - xMax = ptwXY->points[nonOverflowLength-1].x; - } - return( xMax ); -} -/* -************************************************************ -*/ -double ptwXY_getXMax( ptwXYPoints *ptwXY ) { - - ptwXY_dataFrom dataFrom; - - return( ptwXY_getXMaxAndFrom( ptwXY, &dataFrom ) ); -} -/* -************************************************************ -*/ -double ptwXY_getYMin( ptwXYPoints *ptwXY ) { - - int64_t i, n = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p = ptwXY->points; - ptwXYOverflowPoint *overflowPoint = ptwXY->overflowHeader.next; - double yMin; - - if( ptwXY->length == 0 ) return( 0. ); - if( n > 0 ) { - yMin = p->y; - for( i = 1, p++; i < n; i++, p++ ) yMin = ( ( yMin < p->y ) ? yMin : p->y ); } - else { - yMin = overflowPoint->point.y; - } - for( ; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) - yMin = ( ( yMin < overflowPoint->point.y ) ? yMin : overflowPoint->point.y ); - return( yMin ); -} -/* -************************************************************ -*/ -double ptwXY_getYMax( ptwXYPoints *ptwXY ) { - - int64_t i, n = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p = ptwXY->points; - ptwXYOverflowPoint *overflowPoint = ptwXY->overflowHeader.next; - double yMax; - - if( ptwXY->length == 0 ) return( 0. ); - if( n > 0 ) { - yMax = p->y; - for( i = 1, p++; i < n; i++, p++ ) yMax = ( ( yMax > p->y ) ? yMax : p->y ); } - else { - yMax = overflowPoint->point.y; - } - for( ; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) - yMax = ( ( yMax > overflowPoint->point.y ) ? yMax : overflowPoint->point.y ); - return( yMax ); -} -/* -************************************************************ -*/ -static void ptwXY_initialOverflowPoint( ptwXYOverflowPoint *overflowPoint, ptwXYOverflowPoint *prior, ptwXYOverflowPoint *next ) { - - overflowPoint->prior = prior; - overflowPoint->next = next; - overflowPoint->index = -1; - overflowPoint->point.x = 0.; - overflowPoint->point.y = 0.; -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_functions.c b/source/processes/hadronic/models/lend/src/ptwXY_functions.c new file mode 100644 index 0000000000..7ea0d59c86 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_functions.c @@ -0,0 +1,423 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include + +#include "ptwXY.h" + +static nfu_status ptwXY_pow_callback( statusMessageReporting *smr, ptwXYPoint *point, void *argList ); +static nfu_status ptwXY_exp_s( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, double z1, + double x2, double y2, double z2, int level ); +static nfu_status ptwXY_convolution2( statusMessageReporting *smr, ptwXYPoints *f1, ptwXYPoints *f2, double y, + double rangeMin, double *c ); +static nfu_status ptwXY_convolution3( statusMessageReporting *smr, ptwXYPoints *convolute, ptwXYPoints *f1, ptwXYPoints *f2, + double y1, double c1, double y2, double c2, double rangeMin ); +/* +************************************************************ +*/ +nfu_status ptwXY_pow( statusMessageReporting *smr, ptwXYPoints *ptwXY, double v ) { + + nfu_status status = ptwXY_applyFunction( smr, ptwXY, ptwXY_pow_callback, (void *) &v, 0 ); + + if( status != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_pow_callback( statusMessageReporting *smr, ptwXYPoint *point, void *argList ) { + + nfu_status status = nfu_Okay; + double *v = (double *) argList; + + point->y = pow( point->y, *v ); + /* ???? Need to test for valid y-value. */ + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_exp( statusMessageReporting *smr, ptwXYPoints *ptwXY, double a ) { + + int64_t i, length; + nfu_status status; + double x1, y1, z1, x2, y2, z2; + + length = ptwXY->length; + if( length < 1 ) return( ptwXY->status ); + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( ptwXY->status = nfu_otherInterpolation ); + } + if( ptwXY->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_flatInterpolation, "Flat interpolation not allowed." ); + return( ptwXY->status = nfu_flatInterpolation ); + } + + if( ( status = ptwXY_simpleCoalescePoints( smr, ptwXY ) ) != nfu_Okay ) goto Err; + x2 = ptwXY->points[length-1].x; + y2 = a * ptwXY->points[length-1].y; + z2 = ptwXY->points[length-1].y = exp( y2 ); + for( i = length - 2; i >= 0; i-- ) { + x1 = ptwXY->points[i].x; + y1 = a * ptwXY->points[i].y; + z1 = ptwXY->points[i].y = exp( y1 ); + if( ( status = ptwXY_exp_s( smr, ptwXY, x1, y1, z1, x2, y2, z2, 0 ) ) != nfu_Okay ) goto Err; + x2 = x1; + y2 = y1; + } + return( status ); + +Err: + if( status != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ptwXY->status != nfu_Okay ) ptwXY->status = status; + return( status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_exp_s( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, double z1, + double x2, double y2, double z2, int level ) { + + nfu_status status; + double x, y, dx, dy, z, zp, s; + + if( ( x1 == x2 ) || ( y1 == y2 ) ) return( nfu_Okay ); + if( level >= ptwXY->biSectionMax ) return( nfu_Okay ); + level++; + dx = x2 - x1; + dy = y2 - y1; + s = dy / dx; + x = 1. / s + x2 - z2 * dx / ( z2 - z1 ); + y = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / dx; + z = z1 * exp( 1 - dy / ( exp( dy ) - 1 ) ); + zp = ( z2 - z1 ) / ( y2 - y1 ); + + if( fabs( z - zp ) < fabs( z * ptwXY->accuracy ) ) return( nfu_Okay ); + if( ( status = ptwXY_setValueAtX( smr, ptwXY, x, z ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_exp_s( smr, ptwXY, x, y, z, x2, y2, z2, level ) ) != nfu_Okay ) return( status ); + return( ptwXY_exp_s( smr, ptwXY, x1, y1, z1, x, y, z, level ) ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_convolution( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int mode ) { +/* +* Currently, only supports linear-linear interpolation. +* +* This function calculates c(y) = integral dx f1(x) * f2(y-x) +* +*/ + int64_t i1, i2, n1, n2, n; + ptwXYPoints *f1 = ptwXY1, *f2 = ptwXY2, *convolute; + double accuracy = ptwXY1->accuracy, rangeMin, rangeMax, c, y, dy; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via (source1)." ); + return( NULL ); + } + if( ptwXY_simpleCoalescePoints( smr, ptwXY2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via (source2)." ); + return( NULL ); + } + + if( ptwXY1->interpolation != ptwXY_interpolationLinLin ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, + "Source1: unsupported interpolation = '%s'", ptwXY1->interpolationString ); + return( NULL ); + } + if( ptwXY2->interpolation != ptwXY_interpolationLinLin ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, + "Source2: unsupported interpolation = '%s'", ptwXY2->interpolationString ); + return( NULL ); + } + + n1 = f1->length; + n2 = f2->length; + + if( ( n1 == 0 ) || ( n2 == 0 ) ) { + convolute = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, 1., accuracy, 0, 0, 0 ); + if( convolute == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( convolute ); + } + + if( ( n1 == 1 ) || ( n2 == 1 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, + "Too few points: len( source1 ) = %d, len( source1 ) = %d.", (int) n1, (int) n2 ); + return( NULL ); + } + + if( accuracy < ptwXY2->accuracy ) accuracy = ptwXY2->accuracy; + n = n1 * n2; + if( mode == 0 ) { + mode = 1; + if( n > 10000 ) mode = -1; + } + if( n > 100000 ) mode = -1; + if( ( convolute = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, 1., accuracy, 400, 40, 0 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + rangeMin = f1->points[0].x + f2->points[0].x; + rangeMax = f1->points[n1 - 1].x + f2->points[n2 - 1].x; + + if( ptwXY_setValueAtX( smr, convolute, rangeMin, 0. ) != nfu_Okay ) goto Err; + + if( mode < 0 ) { + dy = ( rangeMax - rangeMin ) / 2000; + for( y = rangeMin + dy; y < rangeMax; y += dy ) { + if( ptwXY_convolution2( smr, f1, f2, y, rangeMin, &c ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, convolute, y, c ) != nfu_Okay ) goto Err; + } } + else { + for( i1 = 0; i1 < n1; i1++ ) { + for( i2 = 0; i2 < n2; i2++ ) { + y = rangeMin + ( f1->points[i1].x - f1->points[0].x ) + ( f2->points[i2].x - f2->points[0].x ); + if( y <= rangeMin ) continue; + if( y >= rangeMax ) continue; + if( ptwXY_convolution2( smr, f1, f2, y, rangeMin, &c ) != nfu_Okay ) goto Err; + if( ptwXY_setValueAtX( smr, convolute, y, c ) != nfu_Okay ) goto Err; + } + } + } + if( ptwXY_setValueAtX( smr, convolute, rangeMax, 0. ) != nfu_Okay ) goto Err; + if( ptwXY_simpleCoalescePoints( smr, convolute ) != nfu_Okay ) goto Err; + for( i1 = convolute->length - 1; i1 > 0; i1-- ) { + if( ptwXY_convolution3( smr, convolute, f1, f2, convolute->points[i1 - 1].x, convolute->points[i1 - 1].y, + convolute->points[i1].x, convolute->points[i1].y, rangeMin ) != nfu_Okay ) goto Err; + } + + return( convolute ); + +Err: + ptwXY_free( convolute ); + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_convolution2( statusMessageReporting *smr, ptwXYPoints *f1, ptwXYPoints *f2, double y, double rangeMin, double *c ) { + + int64_t i1 = 0, i2 = 0, n1 = f1->length, n2 = f2->length, mode; + double dx1, dx2, x1MinP, x1Min, x2Max; + double f1x1 = 0, f1y1 = 0, f1x2 = 0, f1y2 = 0, f2x1 = 0, f2y1 = 0, f2x2 = 0, f2y2 = 0; + double f1x1p, f1y1p, f1x2p, f1y2p, f2x1p, f2y1p, f2x2p, f2y2p; + ptwXY_lessEqualGreaterX legx; + ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; + nfu_status status; + + x2Max = f2->points[0].x + ( y - rangeMin ); + if( x2Max > f2->points[n2 - 1].x ) x2Max = f2->points[n2 - 1].x; + x1Min = f1->points[0].x; + x1MinP = y - f2->points[n2 - 1].x; + if( x1Min < x1MinP ) x1Min = x1MinP; + *c = 0.; + + switch( legx = ptwXY_getPointsAroundX( smr, f1, x1Min, &lessThanEqualXPoint, &greaterThanXPoint ) ) { + case ptwXY_lessEqualGreaterX_Error : + return( nfu_Error ); + case ptwXY_lessEqualGreaterX_empty : /* These three should not happen. */ + case ptwXY_lessEqualGreaterX_lessThan : + case ptwXY_lessEqualGreaterX_greater : + return( nfu_Okay ); + case ptwXY_lessEqualGreaterX_equal : + case ptwXY_lessEqualGreaterX_between : + i1 = lessThanEqualXPoint.index; + f1x1 = f1->points[i1].x; + f1y1p = f1y1 = f1->points[i1].y; + i1++; + if( i1 == n1 ) return( nfu_Okay ); + f1x2 = f1->points[i1].x; + f1y2 = f1->points[i1].y; + if( legx == ptwXY_lessEqualGreaterX_between ) { + if( ( status = ptwXY_interpolatePoint( smr, f1->interpolation, x1Min, &f1y1p, f1x1, f1y1, f1x2, f1y2 ) ) != nfu_Okay ) + return( status ); + } + break; + } + + switch( legx = ptwXY_getPointsAroundX( smr, f2, x2Max, &lessThanEqualXPoint, &greaterThanXPoint ) ) { + case ptwXY_lessEqualGreaterX_Error : + return( nfu_Error ); + case ptwXY_lessEqualGreaterX_empty : /* These three should not happen. */ + case ptwXY_lessEqualGreaterX_lessThan : + case ptwXY_lessEqualGreaterX_greater : + return( nfu_Okay ); + case ptwXY_lessEqualGreaterX_equal : + case ptwXY_lessEqualGreaterX_between : + i2 = lessThanEqualXPoint.index; + if( i2 < f2->length - 1 ) i2++; + f2x2 = f2->points[i2].x; + f2y2p = f2y2 = f2->points[i2].y; + i2--; + f2x1 = f2->points[i2].x; + f2y1 = f2->points[i2].y; + if( legx == ptwXY_lessEqualGreaterX_between ) { + if( ( status = ptwXY_interpolatePoint( smr, f2->interpolation, x2Max, &f2y2p, f2x1, f2y1, f2x2, f2y2 ) ) != nfu_Okay ) + return( status ); + } + break; + } + + f1x1p = x1Min; + f2x2p = x2Max; + f1y2p = f1y2; + f2y1p = f2y1; + while( ( i1 < n1 ) && ( i2 >= 0 ) ) { + dx1 = f1x2 - f1x1p; + dx2 = f2x2p - f2x1; + mode = 2; + if( i1 < n1 ) { + if( dx1 < dx2 ) mode = 1; + } + if( mode == 1 ) { /* Point in f1 is limiting dx step size. */ + f2x1p = f2x2p - dx1; + if( f2x1p < f2->points[i2].x ) { /* Round off issue may cause this. */ + f2x1p = f2x2; + f2y1p = f2y2; } + else { + if( ( status = ptwXY_interpolatePoint( smr, f2->interpolation, f2x1p, &f2y1p, f2x1, f2y1, f2x2, f2y2 ) ) != nfu_Okay ) + return( status ); + } + *c += ( ( f1y1p + f1y2p ) * ( f2y1p + f2y2p ) + f1y1p * f2y2p + f1y2p * f2y1p ) * dx1; /* Note the reversing of f2y1p and f2y2p. */ + i1++; + if( i1 == n1 ) break; + f1x1p = f1x1 = f1x2; + f1y1p = f1y1 = f1y2; + f1x2 = f1->points[i1].x; + f1y2p = f1y2 = f1->points[i1].y; + f2x2p = f2x1p; + f2y2p = f2y1p; + f2y1p = f2y1; } + else { + f1x2p = f1x1p + dx2; + if( ( f1x2p > f1->points[i1].x ) || ( dx1 == dx2 ) ) { /* Round off issue may cause first test to trip. */ + f1x2p = f1x2; + f1y2p = f1y2; } + else { + if( ( status = ptwXY_interpolatePoint( smr, f1->interpolation, f1x2p, &f1y2p, f1x1, f1y1, f1x2, f1y2 ) ) != nfu_Okay ) + return( status ); + } + *c += ( ( f1y1p + f1y2p ) * ( f2y1p + f2y2p ) + f1y1p * f2y2p + f1y2p * f2y1p ) * dx2; /* Note the reversing of f2y1p and f2y2p. */ + if( i2 == 0 ) break; + i2--; + f2x2p = f2x2 = f2x1; + f2y2p = f2y2 = f2y1; + f2x1 = f2->points[i2].x; + f2y1p = f2y1 = f2->points[i2].y; + f1x1p = f1x2p; + if( dx1 == dx2 ) { + f1x1p = f1x1 = f1x2; + f1y1p = f1y1 = f1y2; + i1++; + f1x2 = f1->points[i1].x; + f1y2p = f1y2 = f1->points[i1].y; } + else { + f1y1p = f1y2p; + f1y2p = f1->points[i1].y; + } + } + } + *c /= 6.; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_convolution3( statusMessageReporting *smr, ptwXYPoints *convolute, ptwXYPoints *f1, ptwXYPoints *f2, + double y1, double c1, double y2, double c2, double rangeMin ) { + + nfu_status status; + double rangeMid = 0.5 * ( y1 + y2 ), cMid = 0.5 * ( c1 + c2 ), c; + double domainMin, domainMax; + + if( ptwXY_domainMin( smr, convolute, &domainMin ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ptwXY_domainMax( smr, convolute, &domainMax ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + + if( ( y2 - rangeMid ) <= 1e-5 * ( domainMax - domainMin ) ) return( nfu_Okay ); + if( ( status = ptwXY_convolution2( smr, f1, f2, rangeMid, rangeMin, &c ) ) != nfu_Okay ) return( status ); + if( fabs( c - cMid ) <= convolute->accuracy * 0.5 * ( fabs( c ) + fabs( cMid ) ) ) return( nfu_Okay ); + if( ( status = ptwXY_setValueAtX( smr, convolute, rangeMid, c ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_convolution3( smr, convolute, f1, f2, y1, c1, rangeMid, c, rangeMin ) ) != nfu_Okay ) return( status ); + return( ptwXY_convolution3( smr, convolute, f1, f2, rangeMid, c, y2, c2, rangeMin ) ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_inverse( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + int64_t length; + ptwXY_interpolation interpolation; + ptwXYPoints *ptwXYInverse; + + length = ptwXY_length( NULL, ptwXY ); + + if( ptwXY->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_flatInterpolation, "flat interpolation not allowed." ); + return( NULL ); + } + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( NULL ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + switch( ptwXY->interpolation ) { + case ptwXY_interpolationLogLin : + interpolation = ptwXY_interpolationLinLog; + break; + case ptwXY_interpolationLinLog : + interpolation = ptwXY_interpolationLogLin; + break; + default : + interpolation = ptwXY->interpolation; + break; + } + + if( ( ptwXYInverse = ptwXY_new( smr, interpolation, NULL, ptwXY_getBiSectionMax( ptwXY ), ptwXY_getAccuracy( ptwXY ), + length, 10, 0 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( length == 1 ) { + ptwXYInverse->points[0].x = ptwXY->points[0].y; + ptwXYInverse->points[0].y = ptwXY->points[0].x; } + else if( length > 1 ) { + int64_t i1, start = 0, order = 1; + + if( ptwXY->points[0].y > ptwXY->points[1].y ) { + start = length - 1; + order = -1; + } + ptwXYInverse->points[0].x = ptwXY->points[start].y; + ptwXYInverse->points[0].y = ptwXY->points[start].x; + for( i1 = 1, start += order; i1 < length; ++i1, start += order ) { + ptwXYInverse->points[i1].x = ptwXY->points[start].y; + ptwXYInverse->points[i1].y = ptwXY->points[start].x; + if( ptwXYInverse->points[i1-1].x >= ptwXYInverse->points[i1].x ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XNotAscending, + "Non-ascending domain values: x[%d] = %.17e >= x[%d] = %.17e.", + (int) (i1-1), ptwXYInverse->points[i1-1].x, (int) i1, ptwXYInverse->points[i1].x ); + ptwXY_free( ptwXYInverse ); + return( NULL ); + } + } + } + ptwXYInverse->length = length; + return( ptwXYInverse ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_functions.cc b/source/processes/hadronic/models/lend/src/ptwXY_functions.cc deleted file mode 100644 index 746e56f40e..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_functions.cc +++ /dev/null @@ -1,309 +0,0 @@ -/* -# <> -# <> -*/ - -#include - -#include "ptwXY.h" - -#if defined __cplusplus -#include "G4Exp.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static nfu_status ptwXY_pow_callback( ptwXYPoint *point, void *argList ); -static nfu_status ptwXY_exp_s( ptwXYPoints *ptwXY, double x1, double y1, double z1, double x2, double y2, double z2, int level ); -static nfu_status ptwXY_convolution2( ptwXYPoints *f1, ptwXYPoints *f2, double y, double yMin, double *c ); -static nfu_status ptwXY_convolution3( ptwXYPoints *convolute, ptwXYPoints *f1, ptwXYPoints *f2, double y1, double c1, double y2, double c2, double yMin ); -/* -************************************************************ -*/ -nfu_status ptwXY_pow( ptwXYPoints *ptwXY, double v ) { - - return( ptwXY_applyFunction( ptwXY, ptwXY_pow_callback, (void *) &v, 0 ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_pow_callback( ptwXYPoint *point, void *argList ) { - - nfu_status status = nfu_Okay; - double *v = (double *) argList; - - point->y = G4Pow::GetInstance()->powA( point->y, *v ); - /* ???? Need to test for valid y-value. */ - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_exp( ptwXYPoints *ptwXY, double a ) { - - int64_t i, length; - nfu_status status; - double x1, y1, z1, x2, y2, z2; - - length = ptwXY->length; - if( length < 1 ) return( ptwXY->status ); - if( ptwXY->interpolation == ptwXY_interpolationFlat ) return( nfu_invalidInterpolation ); - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - x2 = ptwXY->points[length-1].x; - y2 = a * ptwXY->points[length-1].y; - z2 = ptwXY->points[length-1].y = G4Exp( y2 ); - for( i = length - 2; i >= 0; i-- ) { - x1 = ptwXY->points[i].x; - y1 = a * ptwXY->points[i].y; - z1 = ptwXY->points[i].y = G4Exp( y1 ); - if( ( status = ptwXY_exp_s( ptwXY, x1, y1, z1, x2, y2, z2, 0 ) ) != nfu_Okay ) return( status ); - x2 = x1; - y2 = y1; - } - return( status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_exp_s( ptwXYPoints *ptwXY, double x1, double y1, double z1, double x2, double y2, double z2, int level ) { - - nfu_status status; - double x, y, dx, dy, z, zp, s; - - if( ( x1 == x2 ) || ( y1 == y2 ) ) return( nfu_Okay ); - if( level >= ptwXY->biSectionMax ) return( nfu_Okay ); - level++; - dx = x2 - x1; - dy = y2 - y1; - s = dy / dx; - x = 1. / s + x2 - z2 * dx / ( z2 - z1 ); - y = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / dx; - z = z1 * G4Exp( 1 - dy / ( G4Exp( dy ) - 1 ) ); - zp = ( z2 - z1 ) / ( y2 - y1 ); - - if( std::fabs( z - zp ) < std::fabs( z * ptwXY->accuracy ) ) return( nfu_Okay ); - if( ( status = ptwXY_setValueAtX( ptwXY, x, z ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_exp_s( ptwXY, x, y, z, x2, y2, z2, level ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_exp_s( ptwXY, x1, y1, z1, x, y, z, level ) ) != nfu_Okay ) return( status ); - return( status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_convolution( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int mode ) { -/* -* Currently, only supports linear-linear interpolation. -* -* This function calculates c(y) = integral dx f1(x) * f2(y-x) -* -*/ - int64_t i1, i2, n1, n2, n; - ptwXYPoints *f1 = ptwXY1, *f2 = ptwXY2, *convolute; - double accuracy = ptwXY1->accuracy, yMin, yMax, c, y, dy; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY2 ) ) != nfu_Okay ) return( NULL ); - - *status = nfu_unsupportedInterpolation; - if( ( ptwXY1->interpolation != ptwXY_interpolationLinLin ) || ( ptwXY2->interpolation != ptwXY_interpolationLinLin ) ) return( NULL ); - *status = nfu_Okay; - - n1 = f1->length; - n2 = f2->length; - - if( ( n1 == 0 ) || ( n2 == 0 ) ) { - convolute = ptwXY_new( ptwXY_interpolationLinLin, NULL, 1., accuracy, 0, 0, status, 0 ); - return( convolute ); - } - - if( ( n1 == 1 ) || ( n2 == 1 ) ) { - *status = nfu_tooFewPoints; - return( NULL ); - } - - if( accuracy < ptwXY2->accuracy ) accuracy = ptwXY2->accuracy; - n = n1 * n2; - if( mode == 0 ) { - mode = 1; - if( n > 1000 ) mode = -1; - } - if( n > 100000 ) mode = -1; - if( ( convolute = ptwXY_new( ptwXY_interpolationLinLin, NULL, 1., accuracy, 400, 40, status, 0 ) ) == NULL ) return( NULL ); - - yMin = f1->points[0].x + f2->points[0].x; - yMax = f1->points[n1 - 1].x + f2->points[n2 - 1].x; - - if( ( *status = ptwXY_setValueAtX( convolute, yMin, 0. ) ) != nfu_Okay ) goto Err; - - if( mode < 0 ) { - dy = ( yMax - yMin ) / 400; - for( y = yMin + dy; y < yMax; y += dy ) { - if( ( *status = ptwXY_convolution2( f1, f2, y, yMin, &c ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( convolute, y, c ) ) != nfu_Okay ) goto Err; - } } - else { - for( i1 = 0; i1 < n1; i1++ ) { - for( i2 = 0; i2 < n2; i2++ ) { - y = yMin + ( f1->points[i1].x - f1->points[0].x ) + ( f2->points[i2].x - f2->points[0].x ); - if( y <= yMin ) continue; - if( y >= yMax ) continue; - if( ( *status = ptwXY_convolution2( f1, f2, y, yMin, &c ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_setValueAtX( convolute, y, c ) ) != nfu_Okay ) goto Err; - } - } - } - if( ( *status = ptwXY_setValueAtX( convolute, yMax, 0. ) ) != nfu_Okay ) goto Err; - if( ( *status = ptwXY_simpleCoalescePoints( convolute ) ) != nfu_Okay ) goto Err; - for( i1 = convolute->length - 1; i1 > 0; i1-- ) { - if( ( *status = ptwXY_convolution3( convolute, f1, f2, convolute->points[i1 - 1].x, convolute->points[i1 - 1].y, - convolute->points[i1].x, convolute->points[i1].y, yMin ) ) != nfu_Okay ) goto Err; - } - - return( convolute ); - -Err: - ptwXY_free( convolute ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_convolution2( ptwXYPoints *f1, ptwXYPoints *f2, double y, double yMin, double *c ) { - - int64_t i1 = 0, i2 = 0, n1 = f1->length, n2 = f2->length, mode; - double dx1, dx2, x1MinP, x1Min, x2Max; - double f1x1 = 0, f1y1 = 0, f1x2 = 0, f1y2 = 0, f2x1 = 0, f2y1 = 0, f2x2 = 0, f2y2 = 0; - double f1x1p, f1y1p, f1x2p, f1y2p, f2x1p, f2y1p, f2x2p, f2y2p; - ptwXY_lessEqualGreaterX legx; - ptwXYOverflowPoint lessThanEqualXPoint, greaterThanXPoint; - nfu_status status; - - x2Max = f2->points[0].x + ( y - yMin ); - if( x2Max > f2->points[n2 - 1].x ) x2Max = f2->points[n2 - 1].x; - x1Min = f1->points[0].x; - x1MinP = y - f2->points[n2 - 1].x; - if( x1Min < x1MinP ) x1Min = x1MinP; - *c = 0.; - - switch( legx = ptwXY_getPointsAroundX( f1, x1Min, &lessThanEqualXPoint, &greaterThanXPoint ) ) { - case ptwXY_lessEqualGreaterX_empty : /* These three should not happen. */ - case ptwXY_lessEqualGreaterX_lessThan : - case ptwXY_lessEqualGreaterX_greater : - return( nfu_Okay ); - case ptwXY_lessEqualGreaterX_equal : - case ptwXY_lessEqualGreaterX_between : - i1 = lessThanEqualXPoint.index; - f1x1 = f1->points[i1].x; - f1y1p = f1y1 = f1->points[i1].y; - i1++; - if( i1 == n1 ) return( nfu_Okay ); - f1x2 = f1->points[i1].x; - f1y2 = f1->points[i1].y; - if( legx == ptwXY_lessEqualGreaterX_between ) { - if( ( status = ptwXY_interpolatePoint( f1->interpolation, x1Min, &f1y1p, f1x1, f1y1, f1x2, f1y2 ) ) != nfu_Okay ) return( status ); - } - break; - } - - switch( legx = ptwXY_getPointsAroundX( f2, x2Max, &lessThanEqualXPoint, &greaterThanXPoint ) ) { - case ptwXY_lessEqualGreaterX_empty : /* These three should not happen. */ - case ptwXY_lessEqualGreaterX_lessThan : - case ptwXY_lessEqualGreaterX_greater : - return( nfu_Okay ); - case ptwXY_lessEqualGreaterX_equal : - case ptwXY_lessEqualGreaterX_between : - i2 = lessThanEqualXPoint.index; - if( i2 < f2->length - 1 ) i2++; - f2x2 = f2->points[i2].x; - f2y2p = f2y2 = f2->points[i2].y; - i2--; - f2x1 = f2->points[i2].x; - f2y1 = f2->points[i2].y; - if( legx == ptwXY_lessEqualGreaterX_between ) { - if( ( status = ptwXY_interpolatePoint( f2->interpolation, x2Max, &f2y2p, f2x1, f2y1, f2x2, f2y2 ) ) != nfu_Okay ) return( status ); - } - break; - } - - f1x1p = x1Min; - f2x2p = x2Max; - f1y2p = f1y2; - f2y1p = f2y1; - while( ( i1 < n1 ) && ( i2 >= 0 ) ) { // Loop checking, 11.06.2015, T. Koi - dx1 = f1x2 - f1x1p; - dx2 = f2x2p - f2x1; - mode = 2; - if( i1 < n1 ) { - if( dx1 < dx2 ) mode = 1; - } - if( mode == 1 ) { /* Point in f1 is limiting dx step size. */ - f2x1p = f2x2p - dx1; - if( f2x1p < f2->points[i2].x ) { /* Round off issue may cause this. */ - f2x1p = f2x2; - f2y1p = f2y2; } - else { - if( ( status = ptwXY_interpolatePoint( f2->interpolation, f2x1p, &f2y1p, f2x1, f2y1, f2x2, f2y2 ) ) != nfu_Okay ) return( status ); - } - *c += ( ( f1y1p + f1y2p ) * ( f2y1p + f2y2p ) + f1y1p * f2y2p + f1y2p * f2y1p ) * dx1; /* Note the reversing of f2y1p and f2y2p. */ - i1++; - if( i1 == n1 ) break; - f1x1p = f1x1 = f1x2; - f1y1p = f1y1 = f1y2; - f1x2 = f1->points[i1].x; - f1y2p = f1y2 = f1->points[i1].y; - f2x2p = f2x1p; - f2y2p = f2y1p; - f2y1p = f2y1; } - else { - f1x2p = f1x1p + dx2; - if( ( f1x2p > f1->points[i1].x ) || ( dx1 == dx2 ) ) { /* Round off issue may cause first test to trip. */ - f1x2p = f1x2; - f1y2p = f1y2; } - else { - if( ( status = ptwXY_interpolatePoint( f1->interpolation, f1x2p, &f1y2p, f1x1, f1y1, f1x2, f1y2 ) ) != nfu_Okay ) return( status ); - } - *c += ( ( f1y1p + f1y2p ) * ( f2y1p + f2y2p ) + f1y1p * f2y2p + f1y2p * f2y1p ) * dx2; /* Note the reversing of f2y1p and f2y2p. */ - if( i2 == 0 ) break; - i2--; - f2x2p = f2x2 = f2x1; - f2y2p = f2y2 = f2y1; - f2x1 = f2->points[i2].x; - f2y1p = f2y1 = f2->points[i2].y; - f1x1p = f1x2p; - if( dx1 == dx2 ) { - f1x1p = f1x1 = f1x2; - f1y1p = f1y1 = f1y2; - i1++; - f1x2 = f1->points[i1].x; - f1y2p = f1y2 = f1->points[i1].y; } - else { - f1y1p = f1y2p; - f1y2p = f1->points[i1].y; - } - } - } - *c /= 6.; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_convolution3( ptwXYPoints *convolute, ptwXYPoints *f1, ptwXYPoints *f2, double y1, double c1, double y2, double c2, double yMin ) { - - nfu_status status; - double yMid = 0.5 * ( y1 + y2 ), cMid = 0.5 * ( c1 + c2 ), c; - - if( ( y2 - yMid ) <= 1e-5 * ( ptwXY_getXMax( convolute ) - ptwXY_getXMin( convolute ) ) ) return( nfu_Okay ); - if( ( status = ptwXY_convolution2( f1, f2, yMid, yMin, &c ) ) != nfu_Okay ) return( status ); - if( std::fabs( c - cMid ) <= convolute->accuracy * 0.5 * ( std::fabs( c ) + std::fabs( cMid ) ) ) return( nfu_Okay ); - if( ( status = ptwXY_setValueAtX( convolute, yMid, c ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_convolution3( convolute, f1, f2, y1, c1, yMid, c, yMin ) ) != nfu_Okay ) return( status ); - return( ptwXY_convolution3( convolute, f1, f2, yMid, c, y2, c2, yMin ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_integration.c b/source/processes/hadronic/models/lend/src/ptwXY_integration.c new file mode 100644 index 0000000000..2ec5beaf78 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_integration.c @@ -0,0 +1,1114 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwXY.h" +#include +#include + +typedef struct ptwXY_integrateWithFunctionInfo_s { + int degree; + ptwXY_createFromFunction_callback func; + void *argList; + ptwXY_interpolation interpolation; + double x1, x2, y1, y2; +} ptwXY_integrateWithFunctionInfo; + +static nfu_status ptwXY_integrateWithFunction2( nf_Legendre_GaussianQuadrature_callback integrandFunction, void *argList, double x1, + double x2, double *integral ); +static nfu_status ptwXY_integrateWithFunction3( double x, double *y, void *argList ); +/* +************************************************************ +*/ +nfu_status ptwXY_f_integrate( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x1, double y1, + double x2, double y2, double *value ) { + + nfu_status status = nfu_Okay; + double r, _sign = 1.0; + double ratioX, logX, ratioY, logY, numerator; + + if( x2 < x1 ) { + double x = x1; + x1 = x2; + x2 = x; + _sign = -1.; + } + + *value = 0.; + switch( interpolation ) { + case ptwXY_interpolationLinLin : /* x linear, y linear */ + *value = 0.5 * ( y1 + y2 ) * ( x2 - x1 ); + break; + case ptwXY_interpolationLogLin : /* x linear, y log */ + if( ( y1 <= 0. ) || ( y2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIntegrationInput, + "0 or negative values for log-y integration: y1 = %.17e, y2 = %.17e", y1, y2 ); + status = nfu_badIntegrationInput; } + else { + r = y2 / y1; + if( fabs( r - 1. ) < 1e-4 ) { + r = r - 1.; + *value = y1 * ( x2 - x1 ) / ( 1. + r * ( -0.5 + r * ( 1. / 3. + r * ( -0.25 + .2 * r ) ) ) ); } + else { + *value = ( y2 - y1 ) * ( x2 - x1 ) / log( r ); + } + } + break; + case ptwXY_interpolationLinLog : /* x log, y linear */ + if( ( x1 <= 0. ) || ( x2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIntegrationInput, + "0 or negative values for log-x integration: x1 = %.17e, x2 = %.17e", x1, x2 ); + status = nfu_badIntegrationInput; } + else { + r = x2 / x1; + if( fabs( r - 1. ) < 1e-4 ) { + r = r - 1.; + r = r * ( -0.5 + r * ( 1. / 3. + r * ( -0.25 + .2 * r ) ) ); + *value = x1 * ( y2 - y1 ) * r / ( 1. + r ) + y2 * ( x2 - x1 ); } + else { + *value = ( y1 - y2 ) * ( x2 - x1 ) / log( r ) + x2 * y2 - x1 * y1; + } + } + break; + case ptwXY_interpolationLogLog : /* x log, y log */ + ratioX = x2 / x1; + if( fabs( ratioX - 1. ) < 1e-4 ) { + ratioX -= 1.0; + logX = ratioX * ( 1. + ratioX * ( -0.5 + ratioX * ( 1. / 3. - 0.25 * ratioX ) ) ); + ratioX = x2 / x1; } + else { + logX = log( ratioX ); + } + + ratioY = y2 / y1; + if( fabs( ratioY - 1. ) < 1e-4 ) { + ratioY -= 1.0; + logY = ratioY * ( 1. + ratioY * ( -0.5 + ratioY * ( 1. / 3. - 0.25 * ratioY ) ) ); + ratioY = y2 / y1; } + else { + logY = log( ratioY ); + } + + numerator = ratioX * ratioY - 1.0; + if( numerator < 1e-4 ) { + *value = y1 * x1 * logX * ( 1.0 + 0.5 * numerator * ( 1.0 + numerator * ( 1 + 0.5 * numerator * ( 1 + 19.0 * numerator / 30.0 ) ) / 6.0 ) ); } + else { + *value = y1 * x1 * numerator / ( logY / logX + 1.0 ); + } + break; + case ptwXY_interpolationFlat : /* x ?, y flat */ + *value = y1 * ( x2 - x1 ); + break; + case ptwXY_interpolationOther : + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration." ); + status = nfu_otherInterpolation; + } + + *value *= _sign; + + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrate( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value ) { + + int64_t i, n = ptwXY->length; + double dSum, x, y, x1, x2, y1, y2, _sign = 1.; + ptwXYPoint *point; + nfu_status status; + + *value = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration." ); + return( nfu_otherInterpolation ); + } + + if( n < 2 ) return( nfu_Okay ); + + if( domainMax < domainMin ) { + x = domainMin; + domainMin = domainMax; + domainMax = x; + _sign = -1.; + } + + if( ( status = ptwXY_simpleCoalescePoints( smr, ptwXY ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); + } + + for( i = 0, point = ptwXY->points; i < n; i++, point++ ) { + if( point->x >= domainMin ) break; + } + if( i == n ) return( nfu_Okay ); + + x2 = point->x; + y2 = point->y; + if( i > 0 ) { + if( x2 > domainMin ) { + x1 = point[-1].x; + y1 = point[-1].y; + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMin, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); + } + if( x2 > domainMax ) { + double rangeMax; + + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMax, &rangeMax, x1, y1, x2, y2 ) ) == nfu_Okay ) { + status = ptwXY_f_integrate( smr, ptwXY->interpolation, domainMin, y, domainMax, rangeMax, value ); + } + if( status != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); } + else { + if( ( status = ptwXY_f_integrate( smr, ptwXY->interpolation, domainMin, y, x2, y2, value ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); + } + } + } + } + i++; + point++; + for( ; i < n; i++, point++ ) { + x1 = x2; + y1 = y2; + x2 = point->x; + y2 = point->y; + if( x2 > domainMax ) { + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + if( ( status = ptwXY_f_integrate( smr, ptwXY->interpolation, x1, y1, domainMax, y, &dSum ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + *value += dSum; + break; + } + if( ( status = ptwXY_f_integrate( smr, ptwXY->interpolation, x1, y1, x2, y2, &dSum ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + *value += dSum; + } + + *value *= _sign; + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ) { + + nfu_status status = nfu_Okay; + + *value = 0; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ptwXY->length > 0 ) { + double domainMin, domainMax; + + if( ptwXY_domainMin( smr, ptwXY, &domainMin ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ptwXY_domainMax( smr, ptwXY, &domainMax ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ( status = ptwXY_integrate( smr, ptwXY, domainMin, domainMax, value ) ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_normalize( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { +/* +* This function assumes ptwXY_integrateDomain coalesces the points. +*/ + int64_t i1; + nfu_status status = nfu_Okay; + double sum; + + if( status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ( status = ptwXY_integrateDomain( smr, ptwXY, &sum ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); + } + + if( sum == 0. ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badNorm, "Cannot normalize curve with 0 norm." ); + status = nfu_badNorm; } + else { + for( i1 = 0; i1 < ptwXY->length; i1++ ) ptwXY->points[i1].y /= sum; + } + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateDomainWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ) { + + nfu_status status = nfu_Okay; + double domainMin, domainMax; + + *value = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ptwXY->length < 2 ) return( nfu_Okay ); + + if( ptwXY_domainMin( smr, ptwXY, &domainMin ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ptwXY_domainMax( smr, ptwXY, &domainMax ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ( status = ptwXY_integrateWithWeight_x( smr, ptwXY, domainMin, domainMax, value ) ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + double *value ) { + + int64_t i, n = ptwXY->length; + double sum = 0., x, y, x1, x2, y1, y2, _sign = 1., invLog, dx, dy, ratioX, logX, ratioY, logY, numerator; + ptwXYPoint *point; + nfu_status status; + + *value = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, "Unsupported interpolation = '%s'", ptwXY->interpolationString ); + return( nfu_unsupportedInterpolation ); + } + + if( n < 2 ) return( nfu_Okay ); + + if( domainMax < domainMin ) { + x = domainMin; + domainMin = domainMax; + domainMax = x; + _sign = -1.; + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + for( i = 0, point = ptwXY->points; i < n; ++i, ++point ) { + if( point->x >= domainMin ) break; + } + if( i == n ) return( nfu_Okay ); + + x2 = point->x; + y2 = point->y; + if( i > 0 ) { + if( x2 > domainMin ) { + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMin, &y, point[-1].x, point[-1].y, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + x2 = domainMin; + y2 = y; + --i; + --point; + } + } + ++i; + ++point; + for( ; i < n; ++i, ++point ) { + x1 = x2; + y1 = y2; + x2 = point->x; + y2 = point->y; + if( x2 > domainMax ) { + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + x2 = domainMax; + y2 = y; + } + switch( ptwXY->interpolation ) { + case ptwXY_interpolationFlat : + sum += 0.5 * ( x2 - x1 ) * y1 * ( x1 + x2 ); + break; + case ptwXY_interpolationLinLin : + sum += ( x2 - x1 ) * ( y1 * ( 2 * x1 + x2 ) + y2 * ( x1 + 2 * x2 ) ) / 6.; + break; + case ptwXY_interpolationLogLin : + ratioY = y2 / y1; + dx = x2 - x1; + dy = y2 - y1; + if( fabs( ratioY - 1 ) < 1e-3 ) { + double sum2 = 0.0; + + ratioY -= 1.0; + sum2 = x1 * ( 1.0 + 0.5 * ratioY * ( 1.0 + ratioY * ( -1.0 + 0.5 * ratioY * ( 1.0 - 19 * ratioY / 30 ) ) / 6.0 ) ); + sum2 += 0.5 * ( x2 - x1 ) * ( 1.0 + ratioY * ( 2.0 + 0.25 * ratioY * ( -1.0 + ratioY * ( 7 - 4.25 * ratioY ) / 15.0 ) ) / 3.0 ); + sum += y1 * ( x2 - x1 ) * sum2; + } + else { + invLog = 1.0 / log( ratioY ); + sum += dx * invLog * ( dx * ( y2 - dy * invLog ) + x1 * dy ); + } + break; + case ptwXY_interpolationLinLog : + sum += 0.5 * ( x2 - x1 ) * y1 * ( x1 + x2 ); + ratioX = x2 / x1; + if( fabs( ratioX - 1 ) < 1e-3 ) { + ratioX -= 1.0; + sum += 0.5 * ( y2 - y1 ) * x1 * ( x2 - x1 ) * ( 1.0 + ratioX * ( 5.0 + ratioX * ratioX * ( 1.0 + ratioX ) / 30.0 ) / 6.0 ); } + else { + logX = log( ratioX ); + sum += 0.25 * ( y2 - y1 ) * x1 * x1 * ( 1.0 + ratioX * ratioX * ( 2.0 * logX - 1.0 ) ) / logX; + } + break; + case ptwXY_interpolationLogLog : + ratioX = x2 / x1; + if( fabs( ratioX - 1. ) < 1e-4 ) { + ratioX -= 1.0; + logX = ratioX * ( 1. + ratioX * ( -0.5 + ratioX * ( 1. / 3. - 0.25 * ratioX ) ) ); + ratioX = x2 / x1; } + else { + logX = log( ratioX ); + } + + ratioY = y2 / y1; + if( fabs( ratioY - 1. ) < 1e-4 ) { + ratioY -= 1.0; + logY = ratioY * ( 1. + ratioY * ( -0.5 + ratioY * ( 1. / 3. - 0.25 * ratioY ) ) ); + ratioY = y2 / y1; } + else { + logY = log( ratioY ); + } + + numerator = ratioX * ratioX * ratioY - 1.0; + if( numerator < 1e-4 ) { + sum += y1 * x1 * x1 * logX * ( 1.0 + 0.5 * numerator * ( 1.0 + numerator * ( 1 + 0.5 * numerator * ( 1 + 19.0 * numerator / 30.0 ) ) / 6.0 ) ); } + else { + sum += y1 * x1 * x1 * numerator / ( logY / logX + 2.0 ); + } + break; + default : /* Only to stop compilers from complaining. */ + break; + } + if( x2 == domainMax ) break; + } + + *value = _sign * sum; + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateDomainWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value ) { + + nfu_status status; + double domainMin, domainMax; + + *value = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ptwXY->length < 2 ) return( nfu_Okay ); + + if( ptwXY_domainMin( smr, ptwXY, &domainMin ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ptwXY_domainMax( smr, ptwXY, &domainMax ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + if( ( status = ptwXY_integrateWithWeight_sqrt_x( smr, ptwXY, domainMin, domainMax, value ) ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + double *value ) { + + int64_t i, n = ptwXY->length; + double sum = 0., x, y, x1, x2, y1, y2, _sign = 1., sqrt_x1, sqrt_x2, inv_apb, c; + ptwXYPoint *point; + nfu_status status; + + *value = 0.; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via." ); + return( nfu_badSelf ); + } + + if( ( ptwXY->interpolation != ptwXY_interpolationLinLin ) && + ( ptwXY->interpolation != ptwXY_interpolationFlat ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, + "Unsupported interpolation = '%s'", ptwXY->interpolationString ); + return( nfu_unsupportedInterpolation ); + } + + if( n < 2 ) return( nfu_Okay ); + if( domainMax < domainMin ) { + x = domainMin; + domainMin = domainMax; + domainMax = x; + _sign = -1.; + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + for( i = 0, point = ptwXY->points; i < n; ++i, ++point ) { + if( point->x >= domainMin ) break; + } + if( i == n ) return( nfu_Okay ); + x2 = point->x; + y2 = point->y; + if( i > 0 ) { + if( x2 > domainMin ) { + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMin, &y, point[-1].x, point[-1].y, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + x2 = domainMin; + y2 = y; + --i; + --point; + } + } + ++i; + ++point; + sqrt_x2 = sqrt( x2 ); + for( ; i < n; ++i, ++point ) { + x1 = x2; + y1 = y2; + sqrt_x1 = sqrt_x2; + x2 = point->x; + y2 = point->y; + if( x2 > domainMax ) { + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, domainMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + x2 = domainMax; + y2 = y; + } + sqrt_x2 = sqrt( x2 ); + inv_apb = sqrt_x1 + sqrt_x2; + c = 2. * ( sqrt_x1 * sqrt_x2 + x1 + x2 ); + switch( ptwXY->interpolation ) { + case ptwXY_interpolationFlat : + sum += ( sqrt_x2 - sqrt_x1 ) * y1 * 2.5 * c; + break; + case ptwXY_interpolationLinLin : + sum += ( sqrt_x2 - sqrt_x1 ) * ( y1 * ( c + x1 * ( 1. + sqrt_x2 / inv_apb ) ) + y2 * ( c + x2 * ( 1. + sqrt_x1 / inv_apb ) ) ); + break; + default : /* Only to stop compilers from complaining. */ + break; + } + if( x2 == domainMax ) break; + } + + *value = 2. / 15. * _sign * sum; + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_groupOneFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, + ptwXY_group_normType normType, ptwXPoints *ptwX_norm ) { + + int64_t i, igs, ngs; + double x1, y1, x2, y2, y2p, xg1, xg2, sum; + ptwXYPoints *f; + ptwXPoints *groupedData = NULL; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( groupBoundaries->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: groupBoundaries." ); + return( NULL ); + } + if( ptwXY->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration." ); + return( NULL ); + } + + ngs = ptwX_length( smr, groupBoundaries ) - 1; + if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm function required but is NULL." ); + return( NULL ); + } + if( ptwX_norm->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: norm." ); + return( NULL ); + } + if( ptwX_length( smr, ptwX_norm ) != ngs ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm length = %d but there are %d groups.", + (int) ptwX_length( NULL, ptwX_norm ), (int) ngs ); + return( NULL ); + } + } + + if( ( f = ptwXY_intersectionWith_ptwX( smr, ptwXY, groupBoundaries ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( f->length == 0 ) { + groupedData = ptwX_createLine( smr, ngs, ngs, 0, 0 ); + if( groupedData == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( groupedData ); + } + + if( ( groupedData = ptwX_new( smr, ngs ) ) == NULL ) goto Err; + xg1 = groupBoundaries->points[0]; + x1 = f->points[0].x; + y1 = f->points[0].y; + for( igs = 0, i = 1; igs < ngs; igs++ ) { + xg2 = groupBoundaries->points[igs+1]; + sum = 0; + if( xg2 > x1 ) { + for( ; i < f->length; i++, x1 = x2, y1 = y2 ) { + x2 = f->points[i].x; + if( x2 > xg2 ) break; + y2p = y2 = f->points[i].y; + if( f->interpolation == ptwXY_interpolationFlat ) y2p = y1; + sum += ( y1 + y2p ) * ( x2 - x1 ); + } + } + if( sum != 0. ) { + if( normType == ptwXY_group_normType_dx ) { + sum /= ( xg2 - xg1 ); } + else if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm->points[igs] == 0. ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0. Norm at index %d is 0.", (int) igs ); + goto Err; + } + sum /= ptwX_norm->points[igs]; + } + } + groupedData->points[igs] = 0.5 * sum; + groupedData->length++; + xg1 = xg2; + } + + ptwXY_free( f ); + return( groupedData ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( f ); + if( groupedData != NULL ) ptwX_free( groupedData ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_groupTwoFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm ) { + + int64_t i, igs, ngs; + nfu_status status = nfu_Okay; + double x1, fy1, gy1, x2, fy2, gy2, fy2p, gy2p, xg1, xg2, sum; + ptwXYPoints *f = NULL, *ff, *g = NULL, *gg = NULL; + ptwXPoints *groupedData = NULL; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via: source1." ); + return( NULL ); + } + if( ptwXY_simpleCoalescePoints( smr, ptwXY2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via: source2." ); + return( NULL ); + } + if( groupBoundaries->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: groupBoundaries." ); + return( NULL ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, + "Other interpolation not supported for integration: source1." ); + return( NULL ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, + "Other interpolation not supported for integration: source2." ); + return( NULL ); + } + + ngs = ptwX_length( smr, groupBoundaries ) - 1; + if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm function required but is NULL." ); + return( NULL ); + } + if( ptwX_norm->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: norm." ); + return( NULL ); + } + if( ptwX_length( smr, ptwX_norm ) != ngs ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm length = %d but there are %d groups.", + (int) ptwX_length( NULL, ptwX_norm ), (int) ngs ); + return( NULL ); + } + } + + if( ( ff = ptwXY_intersectionWith_ptwX( smr, ptwXY1, groupBoundaries ) ) == NULL ) goto Err; + if( ( gg = ptwXY_intersectionWith_ptwX( smr, ptwXY2, groupBoundaries ) ) == NULL ) goto Err; + if( ( ff->length == 0 ) || ( gg->length == 0 ) ) { + ptwXY_free( ff ); + ptwXY_free( gg ); + groupedData = ptwX_createLine( smr, ngs, ngs, 0, 0 ); + if( groupedData == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( groupedData ); + } + + if( ( status = ptwXY_tweakDomainsToMutualify( smr, ff, gg, 4, 0 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, status, "ptwXY_tweakDomainsToMutualify failed: most likely functions cannot be mutualified by tweaking." ); + goto Err; + } + if( ( f = ptwXY_union( smr, ff, gg, ptwXY_union_fill ) ) == NULL ) goto Err; + if( ( g = ptwXY_union( smr, gg, f, ptwXY_union_fill ) ) == NULL ) goto Err; + + if( ( groupedData = ptwX_new( smr, ngs ) ) == NULL ) goto Err; + xg1 = groupBoundaries->points[0]; + x1 = f->points[0].x; + fy1 = f->points[0].y; + gy1 = g->points[0].y; + for( igs = 0, i = 1; igs < ngs; igs++ ) { + xg2 = groupBoundaries->points[igs+1]; + sum = 0; + if( xg2 > x1 ) { + for( ; i < f->length; i++, x1 = x2, fy1 = fy2, gy1 = gy2 ) { + x2 = f->points[i].x; + if( x2 > xg2 ) break; + fy2p = fy2 = f->points[i].y; + if( f->interpolation == ptwXY_interpolationFlat ) fy2p = fy1; + gy2p = gy2 = g->points[i].y; + if( g->interpolation == ptwXY_interpolationFlat ) gy2p = gy1; + sum += ( ( fy1 + fy2p ) * ( gy1 + gy2p ) + fy1 * gy1 + fy2p * gy2p ) * ( x2 - x1 ); + } + } + if( sum != 0. ) { + if( normType == ptwXY_group_normType_dx ) { + sum /= ( xg2 - xg1 ); } + else if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm->points[igs] == 0. ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0. Norm at index %d is 0.", (int) igs ); + goto Err; + } + sum /= ptwX_norm->points[igs]; + } + } + groupedData->points[igs] = sum / 6.; + groupedData->length++; + xg1 = xg2; + } + + ptwXY_free( f ); + ptwXY_free( g ); + ptwXY_free( ff ); + ptwXY_free( gg ); + return( groupedData ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ff != NULL ) ptwXY_free( ff ); + if( gg != NULL ) ptwXY_free( gg ); + if( f != NULL ) ptwXY_free( f ); + if( g != NULL ) ptwXY_free( g ); + if( groupedData != NULL ) ptwX_free( groupedData ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_groupThreeFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, + ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm ) { + + int64_t i, igs, ngs; + nfu_status status = nfu_Okay; + double x1, fy1, gy1, hy1, x2, fy2, gy2, hy2, fy2p, gy2p, hy2p, xg1, xg2, sum; + ptwXYPoints *f = NULL, *ff, *fff = NULL, *g = NULL, *gg = NULL, *h = NULL, *hh = NULL; + ptwXPoints *groupedData = NULL; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via: source1." ); + return( NULL ); + } + if( ptwXY_simpleCoalescePoints( smr, ptwXY2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via: source2." ); + return( NULL ); + } + if( ptwXY_simpleCoalescePoints( smr, ptwXY3 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via: source3." ); + return( NULL ); + } + if( groupBoundaries->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: groupBoundaries." ); + return( NULL ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration: source1." ); + return( NULL ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration: source2." ); + return( NULL ); + } + if( ptwXY3->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not supported for integration: source3." ); + return( NULL ); + } + + ngs = ptwX_length( smr, groupBoundaries ) - 1; + if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm function required but is NULL." ); + return( NULL ); + } + if( ptwX_norm->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Via: norm." ); + return( NULL ); + } + if( ptwX_length( smr, ptwX_norm ) != ngs ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badNorm, "Norm length = %d but there are %d groups.", + (int) ptwX_length( NULL, ptwX_norm ), (int) ngs ); + return( NULL ); + } + } + + if( ( ff = ptwXY_intersectionWith_ptwX( smr, ptwXY1, groupBoundaries ) ) == NULL ) goto Err; + if( ( gg = ptwXY_intersectionWith_ptwX( smr, ptwXY2, groupBoundaries ) ) == NULL ) goto Err; + if( ( hh = ptwXY_intersectionWith_ptwX( smr, ptwXY3, groupBoundaries ) ) == NULL ) goto Err; + if( ( ff->length == 0 ) || ( gg->length == 0 ) || ( hh->length == 0 ) ) { + ptwXY_free( ff ); + ptwXY_free( gg ); + ptwXY_free( hh ); + groupedData = ptwX_createLine( smr, ngs, ngs, 0, 0 ); + if( groupedData == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( groupedData ); + } + + if( ( status = ptwXY_tweakDomainsToMutualify( smr, ff, gg, 4, 0 ) ) != nfu_Okay ) goto Err2; + if( ( status = ptwXY_tweakDomainsToMutualify( smr, ff, hh, 4, 0 ) ) != nfu_Okay ) goto Err2; + if( ( status = ptwXY_tweakDomainsToMutualify( smr, gg, hh, 4, 0 ) ) != nfu_Okay ) goto Err2; + if( ( fff = ptwXY_union( smr, ff, gg, ptwXY_union_fill ) ) == NULL ) goto Err; + if( ( h = ptwXY_union( smr, hh, fff, ptwXY_union_fill ) ) == NULL ) goto Err; + if( ( f = ptwXY_union( smr, fff, h, ptwXY_union_fill ) ) == NULL ) goto Err; + if( ( g = ptwXY_union( smr, gg, h, ptwXY_union_fill ) ) == NULL ) goto Err; + + if( ( groupedData = ptwX_new( smr, ngs ) ) == NULL ) goto Err; + xg1 = groupBoundaries->points[0]; + x1 = f->points[0].x; + fy1 = f->points[0].y; + gy1 = g->points[0].y; + hy1 = h->points[0].y; + for( igs = 0, i = 1; igs < ngs; igs++ ) { + xg2 = groupBoundaries->points[igs+1]; + sum = 0; + if( xg2 > x1 ) { + for( ; i < f->length; i++, x1 = x2, fy1 = fy2, gy1 = gy2, hy1 = hy2 ) { + x2 = f->points[i].x; + if( x2 > xg2 ) break; + fy2p = fy2 = f->points[i].y; + if( f->interpolation == ptwXY_interpolationFlat ) fy2p = fy1; + gy2p = gy2 = g->points[i].y; + if( g->interpolation == ptwXY_interpolationFlat ) gy2p = gy1; + hy2p = hy2 = h->points[i].y; + if( h->interpolation == ptwXY_interpolationFlat ) hy2p = hy1; + sum += ( ( fy1 + fy2p ) * ( gy1 + gy2p ) * ( hy1 + hy2p ) + 2 * fy1 * gy1 * hy1 + 2 * fy2p * gy2p * hy2p ) * ( x2 - x1 ); + } + } + if( sum != 0. ) { + if( normType == ptwXY_group_normType_dx ) { + sum /= ( xg2 - xg1 ); } + else if( normType == ptwXY_group_normType_norm ) { + if( ptwX_norm->points[igs] == 0. ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_divByZero, "Divide by 0. Norm at index %d is 0.", (int) igs ); + goto Err; + } + sum /= ptwX_norm->points[igs]; + } + } + groupedData->points[igs] = sum / 12.; + groupedData->length++; + xg1 = xg2; + } + + ptwXY_free( f ); + ptwXY_free( g ); + ptwXY_free( h ); + ptwXY_free( ff ); + ptwXY_free( gg ); + ptwXY_free( hh ); + ptwXY_free( fff ); + return( groupedData ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( fff != NULL ) ptwXY_free( fff ); + if( ff != NULL ) ptwXY_free( ff ); + if( gg != NULL ) ptwXY_free( gg ); + if( hh != NULL ) ptwXY_free( hh ); + if( f != NULL ) ptwXY_free( f ); + if( g != NULL ) ptwXY_free( g ); + if( h != NULL ) ptwXY_free( h ); + if( groupedData != NULL ) ptwX_free( groupedData ); + return( NULL ); + +Err2: + smr_setReportError2p( smr, nfu_SMR_libraryID, status, "ptwXY_tweakDomainsToMutualify failed: most likely functions cannot be mutualified by tweaking." ); + goto Err; +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_runningIntegral( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + int i; + ptwXPoints *runningIntegral = NULL; + double integral = 0., sum; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ( runningIntegral = ptwX_new( smr, ptwXY->length ) ) == NULL ) goto Err; + + if( ptwXY->length == 0 ) return( runningIntegral ); + + if( ptwX_setPointAtIndex( smr, runningIntegral, 0, 0. ) != nfu_Okay ) goto Err; + for( i = 1; i < ptwXY->length; i++ ) { + if( ptwXY_f_integrate( smr, ptwXY->interpolation, ptwXY->points[i-1].x, ptwXY->points[i-1].y, + ptwXY->points[i].x, ptwXY->points[i].y, &sum ) != nfu_Okay ) goto Err; + integral += sum; + if( ptwX_setPointAtIndex( smr, runningIntegral, i, integral ) != nfu_Okay ) goto Err; + } + return( runningIntegral ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( runningIntegral != NULL ) ptwX_free( runningIntegral ); + return( NULL ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_integrateWithFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, + void *argList, double domainMin, double domainMax, int degree, int recursionLimit, double tolerance, double *value ) { + + int64_t i1, i2, n1 = ptwXY->length; + long evaluations; + double integral = 0., integral_, sign = -1., xa, xb; + ptwXY_integrateWithFunctionInfo integrateWithFunctionInfo; + ptwXYPoint *point; + nfu_status status; + + *value = 0; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + + if( domainMin == domainMax ) return( nfu_Okay ); + if( n1 < 2 ) return( nfu_Okay ); + + if( domainMin > domainMax ) { + sign = domainMin; + domainMin = domainMax; + domainMax = sign; + sign = -1.; + } + if( domainMin >= ptwXY->points[n1-1].x ) return( nfu_Okay ); + if( domainMax <= ptwXY->points[0].x ) return( nfu_Okay ); + + for( i1 = 0; i1 < ( n1 - 1 ); i1++ ) { + if( ptwXY->points[i1+1].x > domainMin ) break; + } + for( i2 = n1 - 1; i2 > i1; i2-- ) { + if( ptwXY->points[i2-1].x < domainMax ) break; + } + point = &(ptwXY->points[i1]); + + integrateWithFunctionInfo.degree = degree; + integrateWithFunctionInfo.func = func; + integrateWithFunctionInfo.argList = argList; + integrateWithFunctionInfo.interpolation = ptwXY->interpolation; + integrateWithFunctionInfo.x2 = point->x; + integrateWithFunctionInfo.y2 = point->y; + + xa = domainMin; + for( ; i1 < i2; i1++ ) { + integrateWithFunctionInfo.x1 = integrateWithFunctionInfo.x2; + integrateWithFunctionInfo.y1 = integrateWithFunctionInfo.y2; + ++point; + integrateWithFunctionInfo.x2 = point->x; + integrateWithFunctionInfo.y2 = point->y; + xb = point->x; + if( xb > domainMax ) xb = domainMax; + status = nf_GnG_adaptiveQuadrature( ptwXY_integrateWithFunction2, ptwXY_integrateWithFunction3, &integrateWithFunctionInfo, + xa, xb, recursionLimit, tolerance, &integral_, &evaluations ); + if( status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via. Error from nf_GnG_adaptiveQuadrature." ); + return( status ); + } + integral += integral_; + xa = xb; + } + *value = sign * integral; + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_integrateWithFunction2( nf_Legendre_GaussianQuadrature_callback integrandFunction, void *argList, double x1, + double x2, double *integral ) { + + ptwXY_integrateWithFunctionInfo *integrateWithFunctionInfo = (ptwXY_integrateWithFunctionInfo *) argList; + nfu_status status; + + status = nf_Legendre_GaussianQuadrature( integrateWithFunctionInfo->degree, x1, x2, integrandFunction, argList, integral ); + return( status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_integrateWithFunction3( double x, double *y, void *argList ) { + + double yf; + ptwXY_integrateWithFunctionInfo *integrateWithFunctionInfo = (ptwXY_integrateWithFunctionInfo *) argList; + nfu_status status; + + if( ( status = ptwXY_interpolatePoint( NULL, integrateWithFunctionInfo->interpolation, x, &yf, + integrateWithFunctionInfo->x1, integrateWithFunctionInfo->y1, + integrateWithFunctionInfo->x2, integrateWithFunctionInfo->y2 ) ) == nfu_Okay ) { + status = integrateWithFunctionInfo->func( NULL, x, y, integrateWithFunctionInfo->argList ); + *y *= yf; + } + return( status ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwXY_equalProbableBins( statusMessageReporting *smr, ptwXYPoints *ptwXY, int numberOfBins ) { + + int index = 1; + int64_t i1, length = ptwXY->length; + double x1, y1, x2, y2, integral, runningIntegral1 = 0., runningIntegral2, nextCDF, dIntegral; + double dx, temp, norm; + ptwXYPoint *point; + ptwXPoints *equalProbableBins = NULL; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Bad self." ); + goto Err; + } + + switch( ptwXY->interpolation ) { + case ptwXY_interpolationLinLin : + case ptwXY_interpolationFlat : + break; + default : + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, + "interpolation = %d not supported", ptwXY->interpolation ); + goto Err; + } + + if( length < 2 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "number of points = %lld < 2", length ); + goto Err; + } + + if( numberOfBins < 1 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "numberOfBins = %d < 1", numberOfBins ); + goto Err; + } + if( ( equalProbableBins = ptwX_new( smr, numberOfBins ) ) == NULL ) goto Err; + + if( ptwXY_integrateDomain( smr, ptwXY, &norm ) != nfu_Okay ) goto Err; + if( norm <= 0 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badNorm, "norm = %e <= 0", norm ); + goto Err; + } + + point = ptwXY->points; + x1 = point->x; + y1 = point->y; + ++point; + if( ptwX_setPointAtIndex( smr, equalProbableBins, 0, x1 ) != nfu_Okay ) goto Err; + for( i1 = 1; i1 < length; ++i1, ++point ) { + x2 = point->x; + y2 = point->y; + if( ptwXY_f_integrate( smr, ptwXY->interpolation, x1, y1, x2, y2, &integral ) != nfu_Okay ) goto Err; + runningIntegral2 = runningIntegral1 + integral; + while( index < numberOfBins ) { + nextCDF = norm * index / (double) numberOfBins; + if( runningIntegral2 < nextCDF ) break; + dIntegral = nextCDF - runningIntegral1; + + if( ptwXY->interpolation == ptwXY_interpolationLinLin ) { + temp = ( y2 - y1 ) / ( x2 - x1 ); /* slope. */ + dx = 2. * dIntegral / ( y1 + sqrt( y1 * y1 + 2. * temp * dIntegral ) ); } + else { + dx = dIntegral / y1; + } + + if( ptwX_setPointAtIndex( smr, equalProbableBins, index, dx + x1 ) != nfu_Okay ) goto Err; + ++index; + } + runningIntegral1 = runningIntegral2; + + x1 = x2; + y1 = y2; + } + if( ptwX_setPointAtIndex( smr, equalProbableBins, index, x2 ) != nfu_Okay ) goto Err; + + return( equalProbableBins ); + +Err: + if( equalProbableBins != NULL ) ptwX_free( equalProbableBins ); + return( NULL ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_integration.cc b/source/processes/hadronic/models/lend/src/ptwXY_integration.cc deleted file mode 100644 index a440aee7af..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_integration.cc +++ /dev/null @@ -1,747 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwXY.h" -#include -#include - -#if defined __cplusplus -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -#endif - -typedef struct ptwXY_integrateWithFunctionInfo_s { - int degree; - ptwXY_createFromFunction_callback func; - void *argList; - ptwXY_interpolation interpolation; - double x1, x2, y1, y2; -} ptwXY_integrateWithFunctionInfo; - -static nfu_status ptwXY_integrateWithFunction2( nf_Legendre_GaussianQuadrature_callback integrandFunction, void *argList, double x1, - double x2, double *integral ); -static nfu_status ptwXY_integrateWithFunction3( double x, double *y, void *argList ); -/* -************************************************************ -*/ -nfu_status ptwXY_f_integrate( ptwXY_interpolation interpolation, double x1, double y1, double x2, double y2, double *value ) { - - nfu_status status = nfu_Okay; - double r; - - *value = 0.; - switch( interpolation ) { - case ptwXY_interpolationLinLin : /* x linear, y linear */ - *value = 0.5 * ( y1 + y2 ) * ( x2 - x1 ); - break; - case ptwXY_interpolationLinLog : /* x linear, y log */ - if( ( y1 <= 0. ) || ( y2 <= 0. ) ) { - status = nfu_badIntegrationInput; } - else { - r = y2 / y1; - if( std::fabs( r - 1. ) < 1e-4 ) { - r = r - 1.; - *value = y1 * ( x2 - x1 ) / ( 1. + r * ( -0.5 + r * ( 1. / 3. + r * ( -0.25 + .2 * r ) ) ) ); } - else { - *value = ( y2 - y1 ) * ( x2 - x1 ) / G4Log( r ); - } - } - break; - case ptwXY_interpolationLogLin : /* x log, y linear */ - if( ( x1 <= 0. ) || ( x2 <= 0. ) ) { - status = nfu_badIntegrationInput; } - else { - r = x2 / x1; - if( std::fabs( r - 1. ) < 1e-4 ) { - r = r - 1.; - r = r * ( -0.5 + r * ( 1. / 3. + r * ( -0.25 + .2 * r ) ) ); - *value = x1 * ( y2 - y1 ) * r / ( 1. + r ) + y2 * ( x2 - x1 ); } - else { - *value = ( y1 - y2 ) * ( x2 - x1 ) / G4Log( r ) + x2 * y2 - x1 * y1; - } - } - break; - case ptwXY_interpolationLogLog : /* x log, y log */ - if( ( x1 <= 0. ) || ( x2 <= 0. ) || ( y1 <= 0. ) || ( y2 <= 0. ) ) { - status = nfu_badIntegrationInput; } - else { - int i, n; - double a, z, lx, ly, s, f; - - r = y2 / y1; - if( std::fabs( r - 1. ) < 1e-4 ) { - ly = ( y2 - y1 ) / y1; - ly = ly * ( 1. + ly * ( -0.5 + ly * ( 1. / 3. - 0.25 * ly ) ) ); } - else { - ly = G4Log( r ); - } - r = x2 / x1; - if( std::fabs( r - 1. ) < 1e-4 ) { - lx = ( x2 - x1 ) / x1; - lx = lx * ( 1 + lx * ( -0.5 + lx * ( 1. / 3. - 0.25 * lx ) ) ); } - else { - lx = G4Log( r ); - } - a = ly / lx; - if( std::fabs( r - 1. ) < 1e-3 ) { - z = ( x2 - x1 ) / x1; - n = (int) a; - if( n > 10 ) n = 12; - if( n < 4 ) n = 6; - a = a - n + 1; - f = n + 1.; - for( i = 0, s = 0.; i < n; i++, a++, f-- ) s = ( 1. + s ) * a * z / f; - *value = y1 * ( x2 - x1 ) * ( 1. + s ); } - else { - *value = y1 * x1 * ( G4Pow::GetInstance()->powA( r, a + 1. ) - 1. ) / ( a + 1. ); - } - } - break; - case ptwXY_interpolationFlat : /* x ?, y flat */ - *value = y1 * ( x2 - x1 ); - break; - case ptwXY_interpolationOther : - status = nfu_otherInterpolation; - } - return( status ); -} -/* -************************************************************ -*/ -double ptwXY_integrate( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ) { - - int64_t i, n = ptwXY->length; - double sum = 0., dSum, x, y, x1, x2, y1, y2, _sign = 1.; - ptwXYPoint *point; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - *status = nfu_otherInterpolation; - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( 0. ); - - if( xMax < xMin ) { - x = xMin; - xMin = xMax; - xMax = x; - _sign = -1.; - } - if( n < 2 ) return( 0. ); - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( 0. ); - for( i = 0, point = ptwXY->points; i < n; i++, point++ ) { - if( point->x >= xMin ) break; - } - if( i == n ) return( 0. ); - x2 = point->x; - y2 = point->y; - if( i > 0 ) { - if( x2 > xMin ) { - x1 = point[-1].x; - y1 = point[-1].y; - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMin, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( 0. ); - if( x2 > xMax ) { - double yMax; - - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMax, &yMax, x1, y1, x2, y2 ) ) != nfu_Okay ) return( 0. ); - if( ( *status = ptwXY_f_integrate( ptwXY->interpolation, xMin, y, xMax, yMax, &sum ) ) != nfu_Okay ) return( 0. ); - return( sum ); } - else { - if( ( *status = ptwXY_f_integrate( ptwXY->interpolation, xMin, y, x2, y2, &sum ) ) != nfu_Okay ) return( 0. ); - } - } - } - i++; - point++; - for( ; i < n; i++, point++ ) { - x1 = x2; - y1 = y2; - x2 = point->x; - y2 = point->y; - if( x2 > xMax ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( 0. ); - if( ( *status = ptwXY_f_integrate( ptwXY->interpolation, x1, y1, xMax, y, &dSum ) ) != nfu_Okay ) return( 0. ); - sum += dSum; - break; - } - if( ( *status = ptwXY_f_integrate( ptwXY->interpolation, x1, y1, x2, y2, &dSum ) ) != nfu_Okay ) return( 0. ); - sum += dSum; - } - - return( _sign * sum ); -} -/* -************************************************************ -*/ -double ptwXY_integrateDomain( ptwXYPoints *ptwXY, nfu_status *status ) { - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - if( ptwXY->length > 0 ) return( ptwXY_integrate( ptwXY, ptwXY_getXMin( ptwXY ), ptwXY_getXMax( ptwXY ), status ) ); - return( 0. ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_normalize( ptwXYPoints *ptwXY ) { -/* -* This function assumes ptwXY_integrateDomain checks status and coalesces the points. -*/ - - int64_t i; - nfu_status status; - double sum = ptwXY_integrateDomain( ptwXY, &status ); - - if( status != nfu_Okay ) return( status ); - if( sum == 0. ) { - status = nfu_badNorm; } - else { - for( i = 0; i < ptwXY->length; i++ ) ptwXY->points[i].y /= sum; - } - return( status ); -} -/* -************************************************************ -*/ -double ptwXY_integrateDomainWithWeight_x( ptwXYPoints *ptwXY, nfu_status *status ) { - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - if( ptwXY->length < 2 ) return( 0. ); - return( ptwXY_integrateWithWeight_x( ptwXY, ptwXY_getXMin( ptwXY ), ptwXY_getXMax( ptwXY ), status ) ); -} -/* -************************************************************ -*/ -double ptwXY_integrateWithWeight_x( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ) { - - int64_t i, n = ptwXY->length; - double sum = 0., x, y, x1, x2, y1, y2, _sign = 1.; - ptwXYPoint *point; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - *status = nfu_unsupportedInterpolation; - if( ( ptwXY->interpolation != ptwXY_interpolationLinLin ) && - ( ptwXY->interpolation != ptwXY_interpolationFlat ) ) return( 0. ); - - if( n < 2 ) return( 0. ); - if( xMax < xMin ) { - x = xMin; - xMin = xMax; - xMax = x; - _sign = -1.; - } - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( 0. ); - for( i = 0, point = ptwXY->points; i < n; ++i, ++point ) { - if( point->x >= xMin ) break; - } - if( i == n ) return( 0. ); - x2 = point->x; - y2 = point->y; - if( i > 0 ) { - if( x2 > xMin ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMin, &y, point[-1].x, point[-1].y, x2, y2 ) ) != nfu_Okay ) return( 0. ); - x2 = xMin; - y2 = y; - --i; - --point; - } - } - ++i; - ++point; - for( ; i < n; ++i, ++point ) { - x1 = x2; - y1 = y2; - x2 = point->x; - y2 = point->y; - if( x2 > xMax ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( 0. ); - x2 = xMax; - y2 = y; - } - switch( ptwXY->interpolation ) { - case ptwXY_interpolationFlat : - sum += ( x2 - x1 ) * y1 * 3 * ( x1 + x2 ); - break; - case ptwXY_interpolationLinLin : - sum += ( x2 - x1 ) * ( y1 * ( 2 * x1 + x2 ) + y2 * ( x1 + 2 * x2 ) ); - break; - default : /* Only to stop compilers from complaining. */ - break; - } - if( x2 == xMax ) break; - } - - return( _sign * sum / 6 ); -} -/* -************************************************************ -*/ -double ptwXY_integrateDomainWithWeight_sqrt_x( ptwXYPoints *ptwXY, nfu_status *status ) { - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - if( ptwXY->length < 2 ) return( 0. ); - return( ptwXY_integrateWithWeight_sqrt_x( ptwXY, ptwXY_getXMin( ptwXY ), ptwXY_getXMax( ptwXY ), status ) ); -} -/* -************************************************************ -*/ -double ptwXY_integrateWithWeight_sqrt_x( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ) { - - int64_t i, n = ptwXY->length; - double sum = 0., x, y, x1, x2, y1, y2, _sign = 1., sqrt_x1, sqrt_x2, inv_apb, c; - ptwXYPoint *point; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - *status = nfu_unsupportedInterpolation; - if( ( ptwXY->interpolation != ptwXY_interpolationLinLin ) && - ( ptwXY->interpolation != ptwXY_interpolationFlat ) ) return( 0. ); - - if( n < 2 ) return( 0. ); - if( xMax < xMin ) { - x = xMin; - xMin = xMax; - xMax = x; - _sign = -1.; - } - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( 0. ); - for( i = 0, point = ptwXY->points; i < n; ++i, ++point ) { - if( point->x >= xMin ) break; - } - if( i == n ) return( 0. ); - x2 = point->x; - y2 = point->y; - if( i > 0 ) { - if( x2 > xMin ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMin, &y, point[-1].x, point[-1].y, x2, y2 ) ) != nfu_Okay ) return( 0. ); - x2 = xMin; - y2 = y; - --i; - --point; - } - } - ++i; - ++point; - sqrt_x2 = std::sqrt( x2 ); - for( ; i < n; ++i, ++point ) { - x1 = x2; - y1 = y2; - sqrt_x1 = sqrt_x2; - x2 = point->x; - y2 = point->y; - if( x2 > xMax ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY->interpolation, xMax, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( 0. ); - x2 = xMax; - y2 = y; - } - sqrt_x2 = std::sqrt( x2 ); - inv_apb = sqrt_x1 + sqrt_x2; - c = 2. * ( sqrt_x1 * sqrt_x2 + x1 + x2 ); - switch( ptwXY->interpolation ) { - case ptwXY_interpolationFlat : - sum += ( sqrt_x2 - sqrt_x1 ) * y1 * 2.5 * c; - break; - case ptwXY_interpolationLinLin : - sum += ( sqrt_x2 - sqrt_x1 ) * ( y1 * ( c + x1 * ( 1. + sqrt_x2 / inv_apb ) ) + y2 * ( c + x2 * ( 1. + sqrt_x1 / inv_apb ) ) ); - break; - default : /* Only to stop compilers from complaining. */ - break; - } - if( x2 == xMax ) break; - } - - return( 2. / 15. * _sign * sum ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwXY_groupOneFunction( ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm, nfu_status *status ) { - - int64_t i, igs, ngs; - double x1, y1, x2, y2, y2p, xg1, xg2, sum; - ptwXYPoints *f; - ptwXPoints *groupedData = NULL; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( NULL ); - if( ( *status = groupBoundaries->status ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY->interpolation == ptwXY_interpolationOther ) return( NULL ); - - ngs = ptwX_length( groupBoundaries ) - 1; - if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm == NULL ) { - *status = nfu_badNorm; - return( NULL ); - } - *status = ptwX_norm->status; - if( ptwX_norm->status != nfu_Okay ) return( NULL ); - if( ptwX_length( ptwX_norm ) != ngs ) { - *status = nfu_badNorm; - return( NULL ); - } - } - - if( ( f = ptwXY_intersectionWith_ptwX( ptwXY, groupBoundaries, status ) ) == NULL ) return( NULL ); - if( f->length == 0 ) return( ptwX_createLine( ngs, ngs, 0, 0, status ) ); - - if( ( groupedData = ptwX_new( ngs, status ) ) == NULL ) goto err; - xg1 = groupBoundaries->points[0]; - x1 = f->points[0].x; - y1 = f->points[0].y; - for( igs = 0, i = 1; igs < ngs; igs++ ) { - xg2 = groupBoundaries->points[igs+1]; - sum = 0; - if( xg2 > x1 ) { - for( ; i < f->length; i++, x1 = x2, y1 = y2 ) { - x2 = f->points[i].x; - if( x2 > xg2 ) break; - y2p = y2 = f->points[i].y; - if( f->interpolation == ptwXY_interpolationFlat ) y2p = y1; - sum += ( y1 + y2p ) * ( x2 - x1 ); - } - } - if( sum != 0. ) { - if( normType == ptwXY_group_normType_dx ) { - sum /= ( xg2 - xg1 ); } - else if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm->points[igs] == 0. ) { - *status = nfu_divByZero; - goto err; - } - sum /= ptwX_norm->points[igs]; - } - } - groupedData->points[igs] = 0.5 * sum; - groupedData->length++; - xg1 = xg2; - } - - ptwXY_free( f ); - return( groupedData ); - -err: - ptwXY_free( f ); - if( groupedData != NULL ) ptwX_free( groupedData ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwXY_groupTwoFunctions( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, - ptwXPoints *ptwX_norm, nfu_status *status ) { - - int64_t i, igs, ngs; - double x1, fy1, gy1, x2, fy2, gy2, fy2p, gy2p, xg1, xg2, sum; - ptwXYPoints *f = NULL, *ff, *g = NULL, *gg = NULL; - ptwXPoints *groupedData = NULL; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY2 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = groupBoundaries->status ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( NULL ); - - ngs = ptwX_length( groupBoundaries ) - 1; - if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm == NULL ) { - *status = nfu_badNorm; - return( NULL ); - } - if( ( *status = ptwX_norm->status ) != nfu_Okay ) return( NULL ); - if( ptwX_length( ptwX_norm ) != ngs ) { - *status = nfu_badNorm; - return( NULL ); - } - } - - if( ( ff = ptwXY_intersectionWith_ptwX( ptwXY1, groupBoundaries, status ) ) == NULL ) return( NULL ); - if( ( gg = ptwXY_intersectionWith_ptwX( ptwXY2, groupBoundaries, status ) ) == NULL ) goto err; - if( ( ff->length == 0 ) || ( gg->length == 0 ) ) { - ptwXY_free( ff ); - ptwXY_free( gg ); - return( ptwX_createLine( ngs, ngs, 0, 0, status ) ); - } - - if( ( *status = ptwXY_tweakDomainsToMutualify( ff, gg, 4, 0 ) ) != nfu_Okay ) goto err; - if( ( f = ptwXY_union( ff, gg, status, ptwXY_union_fill ) ) == NULL ) goto err; - if( ( g = ptwXY_union( gg, f, status, ptwXY_union_fill ) ) == NULL ) goto err; - - if( ( groupedData = ptwX_new( ngs, status ) ) == NULL ) goto err; - xg1 = groupBoundaries->points[0]; - x1 = f->points[0].x; - fy1 = f->points[0].y; - gy1 = g->points[0].y; - for( igs = 0, i = 1; igs < ngs; igs++ ) { - xg2 = groupBoundaries->points[igs+1]; - sum = 0; - if( xg2 > x1 ) { - for( ; i < f->length; i++, x1 = x2, fy1 = fy2, gy1 = gy2 ) { - x2 = f->points[i].x; - if( x2 > xg2 ) break; - fy2p = fy2 = f->points[i].y; - if( f->interpolation == ptwXY_interpolationFlat ) fy2p = fy1; - gy2p = gy2 = g->points[i].y; - if( g->interpolation == ptwXY_interpolationFlat ) gy2p = gy1; - sum += ( ( fy1 + fy2p ) * ( gy1 + gy2p ) + fy1 * gy1 + fy2p * gy2p ) * ( x2 - x1 ); - } - } - if( sum != 0. ) { - if( normType == ptwXY_group_normType_dx ) { - sum /= ( xg2 - xg1 ); } - else if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm->points[igs] == 0. ) { - *status = nfu_divByZero; - goto err; - } - sum /= ptwX_norm->points[igs]; - } - } - groupedData->points[igs] = sum / 6.; - groupedData->length++; - xg1 = xg2; - } - - ptwXY_free( f ); - ptwXY_free( g ); - ptwXY_free( ff ); - ptwXY_free( gg ); - return( groupedData ); - -err: - ptwXY_free( ff ); - if( gg != NULL ) ptwXY_free( gg ); - // Coverity #63063 - if( f != NULL ) ptwXY_free( f ); - if( g != NULL ) ptwXY_free( g ); - if( groupedData != NULL ) ptwX_free( groupedData ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwXY_groupThreeFunctions( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, - ptwXY_group_normType normType, ptwXPoints *ptwX_norm, nfu_status *status ) { - - int64_t i, igs, ngs; - double x1, fy1, gy1, hy1, x2, fy2, gy2, hy2, fy2p, gy2p, hy2p, xg1, xg2, sum; - ptwXYPoints *f = NULL, *ff, *fff = NULL, *g = NULL, *gg = NULL, *h = NULL, *hh = NULL; - ptwXPoints *groupedData = NULL; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY2 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY3 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = groupBoundaries->status ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY2->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( ptwXY3->interpolation == ptwXY_interpolationOther ) return( NULL ); - - ngs = ptwX_length( groupBoundaries ) - 1; - if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm == NULL ) { - *status = nfu_badNorm; - return( NULL ); - } - if( ( *status = ptwX_norm->status ) != nfu_Okay ) return( NULL ); - if( ptwX_length( ptwX_norm ) != ngs ) { - *status = nfu_badNorm; - return( NULL ); - } - } - - if( ( ff = ptwXY_intersectionWith_ptwX( ptwXY1, groupBoundaries, status ) ) == NULL ) return( NULL ); - if( ( gg = ptwXY_intersectionWith_ptwX( ptwXY2, groupBoundaries, status ) ) == NULL ) goto err; - if( ( hh = ptwXY_intersectionWith_ptwX( ptwXY3, groupBoundaries, status ) ) == NULL ) goto err; - if( ( ff->length == 0 ) || ( gg->length == 0 ) || ( hh->length == 0 ) ) return( ptwX_createLine( ngs, ngs, 0, 0, status ) ); - - if( ( *status = ptwXY_tweakDomainsToMutualify( ff, gg, 4, 0 ) ) != nfu_Okay ) goto err; - if( ( *status = ptwXY_tweakDomainsToMutualify( ff, hh, 4, 0 ) ) != nfu_Okay ) goto err; - if( ( *status = ptwXY_tweakDomainsToMutualify( gg, hh, 4, 0 ) ) != nfu_Okay ) goto err; - if( ( fff = ptwXY_union( ff, gg, status, ptwXY_union_fill ) ) == NULL ) goto err; - if( ( h = ptwXY_union( hh, fff, status, ptwXY_union_fill ) ) == NULL ) goto err; - if( ( f = ptwXY_union( fff, h, status, ptwXY_union_fill ) ) == NULL ) goto err; - if( ( g = ptwXY_union( gg, h, status, ptwXY_union_fill ) ) == NULL ) goto err; - - if( ( groupedData = ptwX_new( ngs, status ) ) == NULL ) goto err; - xg1 = groupBoundaries->points[0]; - x1 = f->points[0].x; - fy1 = f->points[0].y; - gy1 = g->points[0].y; - hy1 = h->points[0].y; - for( igs = 0, i = 1; igs < ngs; igs++ ) { - xg2 = groupBoundaries->points[igs+1]; - sum = 0; - if( xg2 > x1 ) { - for( ; i < f->length; i++, x1 = x2, fy1 = fy2, gy1 = gy2, hy1 = hy2 ) { - x2 = f->points[i].x; - if( x2 > xg2 ) break; - fy2p = fy2 = f->points[i].y; - if( f->interpolation == ptwXY_interpolationFlat ) fy2p = fy1; - gy2p = gy2 = g->points[i].y; - if( g->interpolation == ptwXY_interpolationFlat ) gy2p = gy1; - hy2p = hy2 = h->points[i].y; - if( h->interpolation == ptwXY_interpolationFlat ) hy2p = hy1; - sum += ( ( fy1 + fy2p ) * ( gy1 + gy2p ) * ( hy1 + hy2p ) + 2 * fy1 * gy1 * hy1 + 2 * fy2p * gy2p * hy2p ) * ( x2 - x1 ); - } - } - if( sum != 0. ) { - if( normType == ptwXY_group_normType_dx ) { - sum /= ( xg2 - xg1 ); } - else if( normType == ptwXY_group_normType_norm ) { - if( ptwX_norm->points[igs] == 0. ) { - *status = nfu_divByZero; - goto err; - } - sum /= ptwX_norm->points[igs]; - } - } - groupedData->points[igs] = sum / 12.; - groupedData->length++; - xg1 = xg2; - } - - ptwXY_free( f ); - ptwXY_free( g ); - ptwXY_free( h ); - ptwXY_free( ff ); - ptwXY_free( gg ); - ptwXY_free( hh ); - ptwXY_free( fff ); - return( groupedData ); - -err: - ptwXY_free( ff ); - if( fff != NULL ) ptwXY_free( fff ); - if( gg != NULL ) ptwXY_free( gg ); - if( hh != NULL ) ptwXY_free( hh ); - if( f != NULL ) ptwXY_free( f ); - if( g != NULL ) ptwXY_free( g ); - if( h != NULL ) ptwXY_free( h ); - if( groupedData != NULL ) ptwX_free( groupedData ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwXY_runningIntegral( ptwXYPoints *ptwXY, nfu_status *status ) { - - int i; - ptwXPoints *runningIntegral = NULL; - double integral = 0., sum; - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( NULL ); - if( ( runningIntegral = ptwX_new( ptwXY->length, status ) ) == NULL ) goto err; - - if( ( *status = ptwX_setPointAtIndex( runningIntegral, 0, 0. ) ) != nfu_Okay ) goto err; - for( i = 1; i < ptwXY->length; i++ ) { - if( ( *status = ptwXY_f_integrate( ptwXY->interpolation, ptwXY->points[i-1].x, ptwXY->points[i-1].y, - ptwXY->points[i].x, ptwXY->points[i].y, &sum ) ) != nfu_Okay ) goto err; - integral += sum; - if( ( *status = ptwX_setPointAtIndex( runningIntegral, i, integral ) ) != nfu_Okay ) goto err; - } - return( runningIntegral ); - -err: - if( runningIntegral != NULL ) ptwX_free( runningIntegral ); - return( NULL ); -} -/* -************************************************************ -*/ -double ptwXY_integrateWithFunction( ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, void *argList, - double xMin, double xMax, int degree, int recursionLimit, double tolerance, nfu_status *status ) { - - int64_t i1, i2, n1 = ptwXY->length; - long evaluations; - double integral = 0., integral_, sign = -1., xa, xb; - ptwXY_integrateWithFunctionInfo integrateWithFunctionInfo; - ptwXYPoint *point; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( 0. ); - - if( xMin == xMax ) return( 0. ); - if( n1 < 2 ) return( 0. ); - - ptwXY_simpleCoalescePoints( ptwXY ); - - if( xMin > xMax ) { - sign = xMin; - xMin = xMax; - xMax = sign; - sign = -1.; - } - if( xMin >= ptwXY->points[n1-1].x ) return( 0. ); - if( xMax <= ptwXY->points[0].x ) return( 0. ); - - for( i1 = 0; i1 < ( n1 - 1 ); i1++ ) { - if( ptwXY->points[i1+1].x > xMin ) break; - } - for( i2 = n1 - 1; i2 > i1; i2-- ) { - if( ptwXY->points[i2-1].x < xMax ) break; - } - point = &(ptwXY->points[i1]); - - integrateWithFunctionInfo.degree = degree; - integrateWithFunctionInfo.func = func; - integrateWithFunctionInfo.argList = argList; - integrateWithFunctionInfo.interpolation = ptwXY->interpolation; - integrateWithFunctionInfo.x2 = point->x; - integrateWithFunctionInfo.y2 = point->y; - - xa = xMin; - for( ; i1 < i2; i1++ ) { - integrateWithFunctionInfo.x1 = integrateWithFunctionInfo.x2; - integrateWithFunctionInfo.y1 = integrateWithFunctionInfo.y2; - ++point; - integrateWithFunctionInfo.x2 = point->x; - integrateWithFunctionInfo.y2 = point->y; - xb = point->x; - if( xb > xMax ) xb = xMax; - *status = nf_GnG_adaptiveQuadrature( ptwXY_integrateWithFunction2, ptwXY_integrateWithFunction3, &integrateWithFunctionInfo, - xa, xb, recursionLimit, tolerance, &integral_, &evaluations ); - if( *status != nfu_Okay ) return( 0. ); - integral += integral_; - xa = xb; - } - - return( integral ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_integrateWithFunction2( nf_Legendre_GaussianQuadrature_callback integrandFunction, void *argList, double x1, - double x2, double *integral ) { - - ptwXY_integrateWithFunctionInfo *integrateWithFunctionInfo = (ptwXY_integrateWithFunctionInfo *) argList; - nfu_status status; - - status = nf_Legendre_GaussianQuadrature( integrateWithFunctionInfo->degree, x1, x2, integrandFunction, argList, integral ); - return( status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_integrateWithFunction3( double x, double *y, void *argList ) { - - double yf; - ptwXY_integrateWithFunctionInfo *integrateWithFunctionInfo = (ptwXY_integrateWithFunctionInfo *) argList; - nfu_status status; - - if( ( status = ptwXY_interpolatePoint( integrateWithFunctionInfo->interpolation, x, &yf, - integrateWithFunctionInfo->x1, integrateWithFunctionInfo->y1, - integrateWithFunctionInfo->x2, integrateWithFunctionInfo->y2 ) ) == nfu_Okay ) { - status = integrateWithFunctionInfo->func( x, y, integrateWithFunctionInfo->argList ); - *y *= yf; - } - return( status ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_interpolation.c b/source/processes/hadronic/models/lend/src/ptwXY_interpolation.c new file mode 100644 index 0000000000..6813d06467 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_interpolation.c @@ -0,0 +1,486 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwXY.h" + +typedef nfu_status (*interpolation_func)( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ); + +static double ptwXY_flatInterpolationToLinear_eps( double px, double eps ); +static nfu_status ptwXY_toOtherInterpolation2( statusMessageReporting *smr, ptwXYPoints *desc, ptwXYPoints *src, + interpolation_func func ); +static nfu_status ptwXY_LogLogToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ); +static nfu_status ptwXY_LogLinToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ); +static nfu_status ptwXY_LinLogToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ); +/* +************************************************************ +*/ +nfu_status ptwXY_interpolatePoint( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x, double *y, + double x1, double y1, double x2, double y2 ) { + + nfu_status status = nfu_Okay; + + if( interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allow." ); + return( nfu_otherInterpolation ); + } + if( ( x1 > x2 ) || ( x < x1 ) || ( x > x2 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "Interpolation point.x = %.17e not between function points x1 = %.17e and x2 = %.17e.", x, x1, x2 ); + return( nfu_invalidInterpolation ); + } + if( y1 == y2 ) { + *y = y1; } + else if( x1 == x2 ) { + *y = 0.5 * ( y1 + y2 ); } + else if( x == x1 ) { + *y = y1; } + else if( x == x2 ) { + *y = y2; } + else { + switch( interpolation ) { + case ptwXY_interpolationLinLin : + *y = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); + break; + case ptwXY_interpolationLinLog : + if( ( x <= 0. ) || ( x1 <= 0. ) || ( x2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "For log(x), some x-values less than equal to 0, x1 = %.17e, x = %.17e, x2 = %.17e.", x1, x, x2 ); + return( nfu_invalidInterpolation ); + } + *y = ( y1 * log( x2 / x ) + y2 * log( x / x1 ) ) / log( x2 / x1 ); + break; + case ptwXY_interpolationLogLin : + if( ( y1 <= 0. ) || ( y2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "For log(y), some y-values less than equal to 0, y1 = %.17e, y2 = %.17e.", y1, y2 ); + return( nfu_invalidInterpolation ); + } + *y = exp( ( log( y1 ) * ( x2 - x ) + log( y2 ) * ( x - x1 ) ) / ( x2 - x1 ) ); + break; + case ptwXY_interpolationLogLog : + if( ( x <= 0. ) || ( x1 <= 0. ) || ( x2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "For log(x), some x-values less than equal to 0, x1 = %.17e, x = %.17e, x2 = %.17e.", x1, x, x2 ); + return( nfu_invalidInterpolation ); + } + if( ( y1 <= 0. ) || ( y2 <= 0. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "For log(y), some y-values less than equal to 0, y1 = %.17e, y2 = %.17e.", y1, y2 ); + return( nfu_invalidInterpolation ); + } + *y = exp( ( log( y1 ) * log( x2 / x ) + log( y2 ) * log( x / x1 ) ) / log( x2 / x1 ) ); + break; + case ptwXY_interpolationFlat : + *y = y1; + break; + default : + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, + "Invalid interpolation token = %d.", interpolation ); + status = nfu_invalidInterpolation; + } + } + return( status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_flatInterpolationToLinear( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps ) { + + int64_t i, length; + double x; + ptwXYPoints *n; + ptwXYPoint *p1 = NULL, *p2 = NULL, *p3; + +#define minEps 5e-16 + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwXY->interpolation != ptwXY_interpolationFlat ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Source interpolation not 'flat' but '%s'.", + ptwXY->interpolationString ); + return( NULL ); + } + + if( ( lowerEps < 0 ) || ( upperEps < 0 ) || ( ( lowerEps == 0 ) && ( upperEps == 0 ) ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badInput, "Bad epsilons: lowerEps = %.17e and upperEps = %.17e.", + lowerEps, upperEps ); + return( NULL ); + } + if( ( lowerEps != 0 ) && ( lowerEps < minEps ) ) lowerEps = minEps; + if( ( upperEps != 0 ) && ( upperEps < minEps ) ) upperEps = minEps; + + length = ptwXY->length * ( 1 + ( lowerEps == 0 ? 0 : 1 ) + ( lowerEps == 0 ? 0 : 1 ) ); + if( ( n = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, ptwXY->biSectionMax, ptwXY->accuracy, length, + ptwXY->overflowLength, ptwXY->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + p3 = ptwXY->points; + if( ptwXY->length > 0 ) { + if( ptwXY_setValueAtX( smr, n, p3->x, p3->y ) != nfu_Okay ) goto Err; + } + for( i = 0; i < ptwXY->length; i++, p3++ ) { + if( i > 1 ) { + if( lowerEps > 0 ) { + x = ptwXY_flatInterpolationToLinear_eps( p2->x, -lowerEps ); + if( x > p1->x ) { + if( ptwXY_setValueAtX( smr, n, x, p1->y ) != nfu_Okay ) goto Err; + } + } + if( lowerEps == 0 ) if( ptwXY_setValueAtX( smr, n, p2->x, p1->y ) != nfu_Okay ) goto Err; + if( upperEps == 0 ) if( ptwXY_setValueAtX( smr, n, p2->x, p2->y ) != nfu_Okay ) goto Err; + if( upperEps > 0 ) { + x = ptwXY_flatInterpolationToLinear_eps( p2->x, upperEps ); + if( x < p3->x ) { + if( ptwXY_setValueAtX( smr, n, x, p2->y ) != nfu_Okay ) goto Err; + } + } + } + p1 = p2; + p2 = p3; + } + if( ptwXY->length > 1 ) { + if( ( lowerEps != 0 ) && ( p1->y != p2->y ) ) { + x = ptwXY_flatInterpolationToLinear_eps( p2->x, -lowerEps ); + if( x > p1->x ) { + if( ptwXY_setValueAtX( smr, n, x, p1->y ) != nfu_Okay ) goto Err; + } + } + if( ptwXY_setValueAtX( smr, n, p2->x, p2->y ) != nfu_Okay ) goto Err; + } + + return( n ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n ); + return( NULL ); + +#undef minEps +} +/* +************************************************************ +*/ +static double ptwXY_flatInterpolationToLinear_eps( double px, double eps ) { + + double x; + + if( px < 0 ) { + x = ( 1 - eps ) * px; } + else if( px > 0 ) { + x = ( 1 + eps ) * px; } + else { + x = eps; + } + return( x ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_toOtherInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, + ptwXY_interpolation interpolationTo, double accuracy ) { +/* +* This function only works when 'ptwXY->interpolation == interpolationTo' or when interpolationTo is ptwXY_interpolationLinLin. +*/ + int i1, logX = 0, logY = 0; + ptwXYPoints *n1; + interpolation_func func = NULL; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ptwXY->interpolation == interpolationTo ) { + if( ( n1 = ptwXY_clone( smr, ptwXY ) ) == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( n1 ); } + else { + if( interpolationTo == ptwXY_interpolationLinLin ) { + switch( ptwXY->interpolation ) { + case ptwXY_interpolationLogLog : + logX = logY = 1; + func = ptwXY_LogLogToLinLin; break; + case ptwXY_interpolationLogLin : + logY = 1; + func = ptwXY_LogLinToLinLin; break; + case ptwXY_interpolationLinLog : + logX = 1; + func = ptwXY_LinLogToLinLin; break; + case ptwXY_interpolationLinLin : /* Stops compilers from complaining. */ + case ptwXY_interpolationFlat : + case ptwXY_interpolationOther : + break; + } + } + } + if( func == NULL ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolationConversion, + "Interpolation conversion from '%s' to %d not supported.", ptwXY->interpolationString, interpolationTo ); + return( NULL ); + } + + if( ( logX != 0 ) || ( logY != 0 ) ) { + ptwXYPoint *point; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + for( i1 = 0, point = ptwXY->points; i1 < ptwXY->length; ++i1, ++point ) { + if( ( logX != 0 ) && ( point->x <= 0 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badLogValue, "At index %d x-value %.16e for log <= 0.", + (int) i1, point->x ); + return( NULL ); + } + if( ( logY != 0 ) && ( point->y <= 0 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badLogValue, "At index %d y-value %.16e for log <= 0.", + (int) i1, point->y ); + return( NULL ); + } + } + } + + if( ( n1 = ptwXY_cloneToInterpolation( smr, ptwXY, interpolationTo ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + n1->accuracy = ptwXY_limitAccuracy( accuracy ); + + if( ptwXY_toOtherInterpolation2( smr, n1, ptwXY, func ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + n1 = ptwXY_free( n1 ); } + else { + if( n1->accuracy < ptwXY->accuracy ) n1->accuracy = ptwXY->accuracy; + } + return( n1 ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_toOtherInterpolation2( statusMessageReporting *smr, ptwXYPoints *desc, ptwXYPoints *src, + interpolation_func func ) { + + nfu_status status; + int64_t i1; + double x1, y1, x2, y2; + + if( ( status = ptwXY_simpleCoalescePoints( smr, src ) ) != nfu_Okay ) return( status ); + + x1 = src->points[0].x; + y1 = src->points[0].y; + for( i1 = 1; i1 < src->length; i1++ ) { + x2 = src->points[i1].x; + y2 = src->points[i1].y; + if( ( x1 != x2 ) && ( y1 != y2 ) ) { + if( ( status = func( smr, desc, x1, y1, x2, y2, 0 ) ) != nfu_Okay ) break; + } + x1 = x2; + y1 = y2; + } + return( status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_LogLogToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ) { + + nfu_status status = nfu_Okay; + double x, y, u, u2 = x2 / x1, v2 = y2 / y1, logYXs, logXs = log( u2 ), logYs = log( v2 ), vLin, vLog, w; + + logYXs = logYs / logXs; + + if( depth > ptwXY_maxBiSectionMax ) return( nfu_Okay ); + if( fabs( logYXs - 1 ) < 1e-5 ) { + u = 0.5 * ( 1 + u2 ); + w = ( logYXs - 1 ) * logXs; + vLog = u * ( 1. + w * ( 1 + 0.5 * w ) ); } + else { + if( u2 > 10 ) { + u = sqrt( u2 ); } + else { + u = logYXs * ( u2 - v2 ) / ( ( 1 - logYXs ) * ( v2 - 1 ) ); + } + vLog = pow( u, logYXs ); + } + vLin = ( u2 - u + v2 * ( u - 1 ) ) / ( u2 - 1 ); + if( fabs( vLog - vLin ) <= ( vLog * desc->accuracy ) ) return( status ); + x = x1 * u; + y = y1 * vLog; + if( ( status = ptwXY_setValueAtX( smr, desc, x, y ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_LogLogToLinLin( smr, desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); + return( ptwXY_LogLogToLinLin( smr, desc, x, y, x2, y2, depth + 1 ) ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_LogLinToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, + double x1, double y1, double x2, double y2, int depth ) { + + nfu_status status = nfu_Okay; + double x, y, logYs = log( y2 / y1 ), yLinLin; + + if( depth > ptwXY_maxBiSectionMax ) return( nfu_Okay ); + x = ( x2 - x1 ) / ( y2 - y1 ) * ( ( y2 - y1 ) / logYs - y1 ) + x1; + y = y1 * exp( logYs / ( x2 - x1 ) * ( x - x1 ) ); + yLinLin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); + if( fabs( y - yLinLin ) <= ( y * desc->accuracy ) ) return( status ); + if( ( status = ptwXY_setValueAtX( smr, desc, x, y ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_LogLinToLinLin( smr, desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); + return( ptwXY_LogLinToLinLin( smr, desc, x, y, x2, y2, depth + 1 ) ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_LinLogToLinLin( statusMessageReporting *smr, ptwXYPoints *desc, double x1, double y1, + double x2, double y2, int depth ) { + + nfu_status status = nfu_Okay; + double x = sqrt( x2 * x1 ), y, logXs = log( x2 / x1 ), yLinLin; + + if( depth > ptwXY_maxBiSectionMax ) return( nfu_Okay ); +#if 0 /* The next line is very unstable at determineing x. Initial x must be chosen better. */ + x = ( y1 * x2 - y2 * x1 ) / ( y1 * logXs + ( y2 - y1 ) * ( log( x / x1 ) - 1 ) ); +#endif + y = ( y2 - y1 ) * log( x / x1 ) / logXs + y1; + yLinLin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); + if( fabs( y - yLinLin ) <= fabs( y * desc->accuracy ) ) return( status ); + if( ( status = ptwXY_setValueAtX( smr, desc, x, y ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_LinLogToLinLin( smr, desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); + return( ptwXY_LinLogToLinLin( smr, desc, x, y, x2, y2, depth + 1 ) ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_toUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, int scaleRange ) { + + int64_t i; + ptwXYPoints *n; + ptwXYPoint *p; + double domainMin, domainMax, dx, inverseDx; + + if( ptwXY->length < 2 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "Too few points %d", (int) ptwXY->length ); + return( NULL ); + } + if( ( n = ptwXY_clone( smr, ptwXY ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + domainMin = n->points[0].x; + domainMax = n->points[n->length-1].x; + dx = domainMax - domainMin; + inverseDx = 1. / dx; + for( i = 0, p = n->points; i < n->length; i++, p++ ) { + p->x = ( p->x - domainMin ) * inverseDx; + if( scaleRange ) p->y = p->y * dx; + } + n->points[n->length-1].x = 1.; /* Make sure last point is realy 1. */ + return( n ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_fromUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, + int scaleRange ) { + + int64_t i, length; + ptwXYPoints *n; + ptwXYPoint *p, *p2; + double dx, inverseDx, xLast = 0.; + + if( ptwXY->length < 2 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "Too few points %d", (int) ptwXY->length ); + return( NULL ); + } + if( ( n = ptwXY_clone( smr, ptwXY ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + dx = domainMax - domainMin; + inverseDx = 1. / dx; + length = n->length; + for( i = 0, p2 = p = n->points; i < length; ++i, ++p ) { + p2->x = p->x * dx + domainMin; + if( i > 0 ) { + if( fabs( p2->x - xLast ) <= 10. * DBL_EPSILON * ( fabs( p2->x ) + fabs( xLast ) ) ) { + --(n->length); + continue; + } + } + if( scaleRange ) p2->y = p->y * inverseDx; + xLast = p2->x; + ++p2; + } + n->points[n->length-1].x = domainMax; /* Make sure last point is realy domainMax. */ + return( n ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_unitbaseInterpolate( statusMessageReporting *smr, double w, double w1, ptwXYPoints *ptwXY1, + double w2, ptwXYPoints *ptwXY2, int scaleRange ) { +/* +* Should we not be checking the interpolation members??????? +*/ + int64_t i; + ptwXYPoints *n1 = NULL, *n2 = NULL, *a = NULL, *r = NULL; + ptwXYPoint *p; + double f, g, domainMin, domainMax; + + if( ( w < w1 ) || ( w > w2 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XOutsideDomain, "W value outside w-domain: (%.15e, %.15e)", + w1, w2 ); + return( NULL ); + } + if( w == w1 ) { + if( ( n1 = ptwXY_clone( smr, ptwXY1 ) ) == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via (source1)." ); + return( n1 ); + } + if( w == w2 ) { + if( ( n1 = ptwXY_clone( smr, ptwXY2 ) ) == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via (source2)." ); + return( n1 ); + } + if( ( n1 = ptwXY_toUnitbase( smr, ptwXY1, scaleRange ) ) == NULL ) goto Err; + if( ( n2 = ptwXY_toUnitbase( smr, ptwXY2, scaleRange ) ) == NULL ) goto Err; + f = ( w - w1 ) / ( w2 - w1 ); + g = 1. - f; + for( i = 0, p = n1->points; i < n1->length; i++, p++ ) p->y *= g; + for( i = 0, p = n2->points; i < n2->length; i++, p++ ) p->y *= f; + if( ( a = ptwXY_add_ptwXY( smr, n1, n2 ) ) == NULL ) goto Err; + + domainMin = g * ptwXY1->points[0].x + f * ptwXY2->points[0].x; + domainMax = g * ptwXY1->points[ptwXY1->length-1].x + f * ptwXY2->points[ptwXY2->length-1].x; + if( ( r = ptwXY_fromUnitbase( smr, a, domainMin, domainMax, scaleRange ) ) == NULL ) goto Err; + ptwXY_free( n1 ); + ptwXY_free( n2 ); + ptwXY_free( a ); + return( r ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( n1 != NULL ) ptwXY_free( n1 ); + if( n2 != NULL ) ptwXY_free( n2 ); + if( a != NULL ) ptwXY_free( a ); + return( NULL ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_interpolation.cc b/source/processes/hadronic/models/lend/src/ptwXY_interpolation.cc deleted file mode 100644 index 6a5ba05ab2..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_interpolation.cc +++ /dev/null @@ -1,406 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -#include "G4Exp.hh" -#include "G4Log.hh" -#include "G4Pow.hh" -namespace GIDI { -using namespace GIDI; -#endif - -typedef nfu_status (*interpolation_func)( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ); - -static double ptwXY_flatInterpolationToLinear_eps( double px, double eps ); -static nfu_status ptwXY_toOtherInterpolation2( ptwXYPoints *desc, ptwXYPoints *src, interpolation_func func ); -static nfu_status ptwXY_LogLogToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ); -static nfu_status ptwXY_LinLogToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ); -static nfu_status ptwXY_LogLinToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ); -static nfu_status ptwXY_otherToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ); -/* -************************************************************ -*/ -nfu_status ptwXY_interpolatePoint( ptwXY_interpolation interpolation, double x, double *y, double x1, double y1, double x2, double y2 ) { - - nfu_status status = nfu_Okay; - - if( interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - if( ( x1 > x2 ) || ( x < x1 ) || ( x > x2 ) ) return( nfu_invalidInterpolation ); - if( y1 == y2 ) { - *y = y1; } - else if( x1 == x2 ) { - *y = 0.5 * ( y1 + y2 ); } - else if( x == x1 ) { - *y = y1; } - else if( x == x2 ) { - *y = y2; } - else { - switch( interpolation ) { - case ptwXY_interpolationLinLin : - *y = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); - break; - case ptwXY_interpolationLogLin : - if( ( x <= 0. ) || ( x1 <= 0. ) || ( x2 <= 0. ) ) return( nfu_invalidInterpolation ); - *y = ( y1 * G4Log( x2 / x ) + y2 * G4Log( x / x1 ) ) / G4Log( x2 / x1 ); - break; - case ptwXY_interpolationLinLog : - if( ( y1 <= 0. ) || ( y2 <= 0. ) ) return( nfu_invalidInterpolation ); - *y = G4Exp( ( G4Log( y1 ) * ( x2 - x ) + G4Log( y2 ) * ( x - x1 ) ) / ( x2 - x1 ) ); - break; - case ptwXY_interpolationLogLog : - if( ( x <= 0. ) || ( x1 <= 0. ) || ( x2 <= 0. ) ) return( nfu_invalidInterpolation ); - if( ( y1 <= 0. ) || ( y2 <= 0. ) ) return( nfu_invalidInterpolation ); - *y = G4Exp( ( G4Log( y1 ) * G4Log( x2 / x ) + G4Log( y2 ) * G4Log( x / x1 ) ) / G4Log( x2 / x1 ) ); - break; - case ptwXY_interpolationFlat : - *y = y1; - break; - default : - status = nfu_invalidInterpolation; - } - } - return( status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_flatInterpolationToLinear( ptwXYPoints *ptwXY, double lowerEps, double upperEps, nfu_status *status ) { - - int64_t i, length; - double x; - ptwXYPoints *n; - ptwXYPoint *p1 = NULL, *p2 = NULL, *p3; - -#define minEps 5e-16 - - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( NULL ); - *status = nfu_invalidInterpolation; - if( ptwXY->interpolation != ptwXY_interpolationFlat ) return( NULL ); - *status = nfu_badInput; - if( ( lowerEps < 0 ) || ( upperEps < 0 ) || ( ( lowerEps == 0 ) && ( upperEps == 0 ) ) ) return( NULL ); - if( ( lowerEps != 0 ) && ( lowerEps < minEps ) ) lowerEps = minEps; - if( ( upperEps != 0 ) && ( upperEps < minEps ) ) upperEps = minEps; - - length = ptwXY->length * ( 1 + ( lowerEps == 0 ? 0 : 1 ) + ( lowerEps == 0 ? 0 : 1 ) ); - if( ( n = ptwXY_new( ptwXY_interpolationLinLin, NULL, ptwXY->biSectionMax, ptwXY->accuracy, length, ptwXY->overflowLength, status, ptwXY->userFlag ) ) == NULL ) return( NULL ); - - p3 = ptwXY->points; - if( ptwXY->length > 0 ) ptwXY_setValueAtX( n, p3->x, p3->y ); - for( i = 0; i < ptwXY->length; i++, p3++ ) { - if( i > 1 ) { - if( lowerEps > 0 ) { - x = ptwXY_flatInterpolationToLinear_eps( p2->x, -lowerEps ); - if( x > p1->x ) { - if( ( *status = ptwXY_setValueAtX( n, x, p1->y ) ) != nfu_Okay ) goto Err; - } - } - if( lowerEps == 0 ) if( ( *status = ptwXY_setValueAtX( n, p2->x, p1->y ) ) != nfu_Okay ) goto Err; - if( upperEps == 0 ) if( ( *status = ptwXY_setValueAtX( n, p2->x, p2->y ) ) != nfu_Okay ) goto Err; - if( upperEps > 0 ) { - x = ptwXY_flatInterpolationToLinear_eps( p2->x, upperEps ); - if( x < p3->x ) { - if( ( *status = ptwXY_setValueAtX( n, x, p2->y ) ) != nfu_Okay ) goto Err; - } - } - } - p1 = p2; - p2 = p3; - } - if( ptwXY->length > 1 ) { - if( ( lowerEps != 0 ) && ( p1->y != p2->y ) ) { - x = ptwXY_flatInterpolationToLinear_eps( p2->x, -lowerEps ); - if( x > p1->x ) { - if( ( *status = ptwXY_setValueAtX( n, x, p1->y ) ) != nfu_Okay ) goto Err; - } - } - if( ( *status = ptwXY_setValueAtX( n, p2->x, p2->y ) ) != nfu_Okay ) goto Err; - } - - return( n ); - -Err: - ptwXY_free( n ); - return( NULL ); - -#undef minEps -} -/* -************************************************************ -*/ -static double ptwXY_flatInterpolationToLinear_eps( double px, double eps ) { - - double x; - - if( px < 0 ) { - x = ( 1 - eps ) * px; } - else if( px > 0 ) { - x = ( 1 + eps ) * px; } - else { - x = eps; - } - return( x ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_toOtherInterpolation( ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo, double accuracy, nfu_status *status ) { -/* -* This function only works when 'ptwXY->interpolation == interpolationTo' or when interpolationTo is ptwXY_interpolationLinLin. -*/ - ptwXYPoints *n1; - interpolation_func func = NULL; - - if( ( *status = ptwXY->status ) != nfu_Okay ) return( NULL ); - if( ptwXY->interpolation == interpolationTo ) { - *status = nfu_Okay; - return( ptwXY_clone( ptwXY, status ) ); } - else { - if( interpolationTo == ptwXY_interpolationLinLin ) { - switch( ptwXY->interpolation ) { - case ptwXY_interpolationLogLog : - func = ptwXY_LogLogToLinLin; break; - case ptwXY_interpolationLinLog : - func = ptwXY_LinLogToLinLin; break; - case ptwXY_interpolationLogLin : - func = ptwXY_LogLinToLinLin; break; - case ptwXY_interpolationOther : - if( ptwXY->interpolationOtherInfo.getValueFunc != NULL ) func = ptwXY_otherToLinLin; - break; - case ptwXY_interpolationLinLin : /* Stops compilers from complaining. */ - case ptwXY_interpolationFlat : - break; - } - } - } - *status = nfu_unsupportedInterpolationConversion; - if( func == NULL ) return( NULL ); - - *status = nfu_Okay; - if( ( n1 = ptwXY_cloneToInterpolation( ptwXY, interpolationTo, status ) ) == NULL ) return( NULL ); - if( accuracy < ptwXY->accuracy ) accuracy = ptwXY->accuracy; - n1->accuracy = accuracy; - - n1->interpolationOtherInfo.getValueFunc = ptwXY->interpolationOtherInfo.getValueFunc; - n1->interpolationOtherInfo.argList = ptwXY->interpolationOtherInfo.argList; - *status = ptwXY_toOtherInterpolation2( n1, ptwXY, func ); - n1->interpolationOtherInfo.getValueFunc = NULL; - n1->interpolationOtherInfo.argList = NULL; - if( *status != nfu_Okay ) n1 = ptwXY_free( n1 ); - return( n1 ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_toOtherInterpolation2( ptwXYPoints *desc, ptwXYPoints *src, interpolation_func func ) { - - nfu_status status; - int64_t i; - double x1, y1, x2, y2; - - if( ( status = ptwXY_simpleCoalescePoints( src ) ) != nfu_Okay ) return( status ); - - x1 = src->points[0].x; - y1 = src->points[0].y; - for( i = 1; i < src->length; i++ ) { - x2 = src->points[i].x; - y2 = src->points[i].y; - if( ( x1 != x2 ) && ( y1 != y2 ) ) { - if( ( status = func( desc, x1, y1, x2, y2, 0 ) ) != nfu_Okay ) break; - } - x1 = x2; - y1 = y2; - } - return( status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_LogLogToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ) { - - nfu_status status = nfu_Okay; - double x, y, u, u2 = x2 / x1, v2 = y2 / y1, logYXs, logXs = G4Log( u2 ), logYs = G4Log( v2 ), vLin, vLog, w; - - logYXs = logYs / logXs; - - if( depth > 16 ) return( nfu_Okay ); - if( std::fabs( logYXs - 1 ) < 1e-5 ) { - u = 0.5 * ( 1 + u2 ); - w = ( logYXs - 1 ) * logXs; - vLog = u * ( 1. + w * ( 1 + 0.5 * w ) ); } - else { - u = logYXs * ( u2 - v2 ) / ( ( 1 - logYXs ) * ( v2 - 1 ) ); - vLog = G4Pow::GetInstance()->powA( u, logYXs ); - } - vLin = ( u2 - u + v2 * ( u - 1 ) ) / ( u2 - 1 ); - if( std::fabs( vLog - vLin ) <= ( vLog * desc->accuracy ) ) return( status ); - x = x1 * u; - y = y1 * vLog; - if( ( status = ptwXY_setValueAtX( desc, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_LogLogToLinLin( desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); - return( ptwXY_LogLogToLinLin( desc, x, y, x2, y2, depth + 1 ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_LinLogToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ) { - - nfu_status status = nfu_Okay; - double x, y, logYs = G4Log( y2 / y1 ), yLinLin; - - if( depth > 16 ) return( nfu_Okay ); - x = ( x2 - x1 ) / ( y2 - y1 ) * ( ( y2 - y1 ) / logYs - y1 ) + x1; - y = y1 * G4Exp( logYs / ( x2 - x1 ) * ( x - x1 ) ); - yLinLin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); - if( std::fabs( y - yLinLin ) <= ( y * desc->accuracy ) ) return( status ); - if( ( status = ptwXY_setValueAtX( desc, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_LinLogToLinLin( desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); - return( ptwXY_LinLogToLinLin( desc, x, y, x2, y2, depth + 1 ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_LogLinToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ) { - - nfu_status status = nfu_Okay; - double x = std::sqrt( x2 * x1 ), y, logXs = G4Log( x2 / x1 ), yLinLin; - - if( depth > 16 ) return( nfu_Okay ); -#if 0 /* The next line is very unstable at determineing x. Initial x must be chosen better. */ - x = ( y1 * x2 - y2 * x1 ) / ( y1 * logXs + ( y2 - y1 ) * ( std::log( x / x1 ) - 1 ) ); -#endif - y = ( y2 - y1 ) * G4Log( x / x1 ) / logXs + y1; - yLinLin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); - if( std::fabs( y - yLinLin ) <= ( y * desc->accuracy ) ) return( status ); - if( ( status = ptwXY_setValueAtX( desc, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_LogLinToLinLin( desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); - return( ptwXY_LogLinToLinLin( desc, x, y, x2, y2, depth + 1 ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_otherToLinLin( ptwXYPoints *desc, double x1, double y1, double x2, double y2, int depth ) { - - nfu_status status; - double x = 0.5 * ( x1 + x2 ), y, yLinLin; - ptwXY_getValue_callback getValueFunc = desc->interpolationOtherInfo.getValueFunc; - void *argList = desc->interpolationOtherInfo.argList; - - if( depth > 16 ) return( nfu_Okay ); - if( ( status = getValueFunc( argList, x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( status ); - yLinLin = ( y1 * ( x2 - x ) + y2 * ( x - x1 ) ) / ( x2 - x1 ); - if( std::fabs( y - yLinLin ) <= ( y * desc->accuracy ) ) return( status ); - if( ( status = ptwXY_setValueAtX( desc, x, y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_otherToLinLin( desc, x1, y1, x, y, depth + 1 ) ) != nfu_Okay ) return( status ); - return( ptwXY_otherToLinLin( desc, x, y, x2, y2, depth + 1 ) ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_toUnitbase( ptwXYPoints *ptwXY, nfu_status *status ) { - - int64_t i; - ptwXYPoints *n; - ptwXYPoint *p; - double xMin, xMax, dx, inverseDx; - - *status = nfu_tooFewPoints; - if( ptwXY->length < 2 ) return( NULL ); - if( ( n = ptwXY_clone( ptwXY, status ) ) == NULL ) return( NULL ); - - xMin = n->points[0].x; - xMax = n->points[n->length-1].x; - dx = xMax - xMin; - inverseDx = 1. / dx; - for( i = 0, p = n->points; i < n->length; i++, p++ ) { - p->x = ( p->x - xMin ) * inverseDx; - p->y = p->y * dx; - } - n->points[n->length-1].x = 1.; /* Make sure last point is realy 1. */ - return( n ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_fromUnitbase( ptwXYPoints *ptwXY, double xMin, double xMax, nfu_status *status ) { - - int64_t i, length; - ptwXYPoints *n; - ptwXYPoint *p, *p2; - double dx, inverseDx, xLast = 0.; - - *status = nfu_tooFewPoints; - if( ptwXY->length < 2 ) return( NULL ); - if( ( n = ptwXY_clone( ptwXY, status ) ) == NULL ) return( NULL ); - - dx = xMax - xMin; - inverseDx = 1. / dx; - length = n->length; - for( i = 0, p2 = p = n->points; i < length; ++i, ++p ) { - p2->x = p->x * dx + xMin; - if( i > 0 ) { - if( std::fabs( p2->x - xLast ) <= 10. * DBL_EPSILON * ( std::fabs( p2->x ) + std::fabs( xLast ) ) ) { - --(n->length); - continue; - } - } - p2->y = p->y * inverseDx; - xLast = p2->x; - ++p2; - } - n->points[n->length-1].x = xMax; /* Make sure last point is realy xMax. */ - return( n ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_unitbaseInterpolate( double w, double w1, ptwXYPoints *ptwXY1, double w2, ptwXYPoints *ptwXY2, nfu_status *status ) { -/* -* Should we not be checking the interpolation members??????? -*/ - int64_t i; - ptwXYPoints *n1 = NULL, *n2 = NULL, *a = NULL, *r = NULL; - ptwXYPoint *p; - double f, g, xMin, xMax; - - *status = nfu_XOutsideDomain; - if( w <= w1 ) { - if( w < w1 ) return( NULL ); - return( ptwXY_clone( ptwXY1, status ) ); - } - if( w >= w2 ) { - if( w > w2 ) return( NULL ); - return( ptwXY_clone( ptwXY2, status ) ); - } - if( ( n1 = ptwXY_toUnitbase( ptwXY1, status ) ) == NULL ) return( NULL ); - if( ( n2 = ptwXY_toUnitbase( ptwXY2, status ) ) == NULL ) goto Err; - f = ( w - w1 ) / ( w2 - w1 ); - g = 1. - f; - for( i = 0, p = n1->points; i < n1->length; i++, p++ ) p->y *= g; - for( i = 0, p = n2->points; i < n2->length; i++, p++ ) p->y *= f; - if( ( a = ptwXY_add_ptwXY( n1, n2, status ) ) == NULL ) goto Err; - - xMin = g * ptwXY1->points[0].x + f * ptwXY2->points[0].x; - xMax = g * ptwXY1->points[ptwXY1->length-1].x + f * ptwXY2->points[ptwXY2->length-1].x; - if( ( r = ptwXY_fromUnitbase( a, xMin, xMax, status ) ) == NULL ) goto Err; - ptwXY_free( n1 ); - ptwXY_free( n2 ); - ptwXY_free( a ); - return( r ); - -Err: - if( n1 != NULL ) ptwXY_free( n1 ); - if( n2 != NULL ) ptwXY_free( n2 ); - if( a != NULL ) ptwXY_free( a ); - return( NULL ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_methods.c b/source/processes/hadronic/models/lend/src/ptwXY_methods.c new file mode 100644 index 0000000000..51b715311c --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_methods.c @@ -0,0 +1,825 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwXY.h" + +static nfu_status ptwXY_clip2( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double y, double x1, double y1, double x2, double y2 ); +static double ptwXY_thicken_linear_dx( int sectionSubdivideMax, double dDomainMax, double x1, double x2 ); +static nfu_status ptwXY_thin2( statusMessageReporting *smr, ptwXYPoints *thinned, char *thin, double accuracy, int64_t i1, int64_t i2 ); +/* +************************************************************ +*/ +nfu_status ptwXY_clip( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double rangeMin, double rangeMax ) { +/* + This function acts oddly for xy = [ [ 1, 0 ], [ 3, -2 ], [ 4, 1 ] ] and rangeMin = 0.2, why??????? + This function probably only works for linear, linear interpolation (mainly because of ptwXY_clip2). +*/ + int64_t i, j, n; + double x2, y2, _rangeMin, _rangeMax; + ptwXYPoints *clipped; + ptwXYPoint *points; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( nfu_otherInterpolation ); + } + n = ptwXY1->length; + if( n > 0 ) { + i = 0; + if( ptwXY_range( smr, ptwXY1, &_rangeMin, &_rangeMax ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( nfu_Error ); + } + if( _rangeMax < rangeMin ) i = 1; + if( _rangeMin > rangeMax ) i = 1; + if( i == 1 ) { + if( ptwXY_clear( smr, ptwXY1 ) != nfu_Okay ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + } + if( n == 1 ) { + y2 = ptwXY1->points[0].y; + if( y2 < rangeMin ) { + ptwXY1->points[0].y = rangeMin; } + else if( y2 > rangeMax ) { + ptwXY1->points[0].y = rangeMax; + } } + else if( n > 1 ) { + if( ( clipped = ptwXY_new( smr, ptwXY1->interpolation, ptwXY1->interpolationString, + ptwXY1->biSectionMax, ptwXY1->accuracy, n, 10, ptwXY1->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + for( i = 0; i < n; i++ ) { + x2 = ptwXY1->points[i].x; + y2 = ptwXY1->points[i].y; + if( y2 < rangeMin ) { + if( i > 0 ) { + points = ptwXY_getPointAtIndex_Unsafely( clipped, clipped->length - 1 ); + if( points->y > rangeMin ) { + if( ptwXY_clip2( smr, clipped, rangeMin, points->x, points->y, x2, y2 ) != nfu_Okay ) goto Err; + } + } + if( ptwXY_setValueAtX( smr, clipped, x2, rangeMin ) != nfu_Okay ) goto Err; + j = i; + for( i++; i < n; i++ ) if( !( ptwXY1->points[i].y < rangeMin ) ) break; + if( i < n ) { + x2 = ptwXY1->points[i].x; + y2 = ptwXY1->points[i].y; + if( ptwXY_clip2( smr, clipped, rangeMin, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) != nfu_Okay ) goto Err; + if( y2 > rangeMax ) { + if( ptwXY_clip2( smr, clipped, rangeMax, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) != nfu_Okay ) goto Err; + } } + else if( j != n - 1 ) { + if( ptwXY_setValueAtX( smr, clipped, ptwXY1->points[n - 1].x, rangeMin ) != nfu_Okay ) goto Err; + } + i--; } + else if( y2 > rangeMax ) { + if( i > 0 ) { + points = ptwXY_getPointAtIndex_Unsafely( clipped, clipped->length - 1 ); + if( points->y < rangeMax ) { + if( ptwXY_clip2( smr, clipped, rangeMax, points->x, points->y, x2, y2 ) != nfu_Okay ) goto Err; + } + } + if( ptwXY_setValueAtX( smr, clipped, x2, rangeMax ) != nfu_Okay ) goto Err; + j = i; + for( i++; i < n; i++ ) if( !( ptwXY1->points[i].y > rangeMax ) ) break; + if( i < n ) { + x2 = ptwXY1->points[i].x; + y2 = ptwXY1->points[i].y; + if( ptwXY_clip2( smr, clipped, rangeMax, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) != nfu_Okay ) goto Err; + if( y2 < rangeMin ) { + if( ptwXY_clip2( smr, clipped, rangeMin, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) != nfu_Okay ) goto Err; + } } + else if( j != n - 1 ) { + if( ptwXY_setValueAtX( smr, clipped, ptwXY1->points[n - 1].x, rangeMax ) != nfu_Okay ) goto Err; + } + i--; } + else { + if( ptwXY_setValueAtX( smr, clipped, x2, y2 ) != nfu_Okay ) goto Err; + } + } + if( ptwXY_simpleCoalescePoints( smr, clipped ) != nfu_Okay ) goto Err; + ptwXY1->length = clipped->length; /* The squeamish may want to skip the next few lines. */ + clipped->length = n; + n = ptwXY1->allocatedSize; + ptwXY1->allocatedSize = clipped->allocatedSize; + clipped->allocatedSize = n; + points = clipped->points; + clipped->points = ptwXY1->points; + ptwXY1->points = points; + ptwXY_free( clipped ); + } + + return( ptwXY1->status ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( clipped ); + return( ptwXY1->status ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_clip2( statusMessageReporting *smr, ptwXYPoints *clipped, double y, double x1, double y1, double x2, double y2 ) { + + double x; + + x = ( y - y1 ) * ( x2 - x1 ) / ( y2 - y1 ) + x1; + if( x <= x1 ) { + x = x1; } + else if( x >= x2 ) { + x = x1; } + else { + ptwXY_setValueAtX( smr, clipped, x, y ); + } + return( clipped->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_thicken( statusMessageReporting *smr, ptwXYPoints *ptwXY1, int sectionSubdivideMax, + double dDomainMax, double fDomainMax ) { + + double x1, x2 = 0., y1, y2 = 0., fx = 1.1, x, dx, dxp, lfx, y; /* fx initialized so compilers want complain. */ + int64_t i, notFirstPass = 0; + int nfx, nDone, doLinear; + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( nfu_otherInterpolation ); + } + if( ( sectionSubdivideMax < 1 ) || ( dDomainMax < 0. ) || ( fDomainMax < 1. ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_Error, + "ptwXY_thicken: One or more of the following not satisfied: sectionSubdivideMax = %d > 0, dDomainMax = %e >= 0.0, fDomainMax = %e >= 1.0", + sectionSubdivideMax, dDomainMax, fDomainMax ); + return( nfu_badInput ); + } + if( sectionSubdivideMax > ptwXY_sectionSubdivideMax ) sectionSubdivideMax = ptwXY_sectionSubdivideMax; + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + for( i = ptwXY1->length - 1; i >= 0; i-- ) { + x1 = ptwXY1->points[i].x; + y1 = ptwXY1->points[i].y; + if( notFirstPass ) { + dx = ptwXY_thicken_linear_dx( sectionSubdivideMax, dDomainMax, x1, x2 ); + + if( x1 == 0. ) { + doLinear = 1; } + else { + fx = x2 / x1; + if( fx > 0. ) { + lfx = log( fx ); + if( fDomainMax == 1. ) { + nfx = sectionSubdivideMax; } + else { + nfx = ( (int) ( lfx / log( fDomainMax ) ) ) + 1; + if( nfx > sectionSubdivideMax ) nfx = sectionSubdivideMax; + } + if( nfx > 0 ) fx = exp( lfx / nfx ); + doLinear = 0; + if( dx < ( fx - 1 ) * x1 ) doLinear = 1; } + else { + doLinear = 1; + } + } + x = x1; + dxp = dx; + nDone = 0; + while( 1 ) { + if( doLinear ) { + x += dx; } + else { + dx = ptwXY_thicken_linear_dx( sectionSubdivideMax - nDone, dDomainMax, x, x2 ); + if( dx <= ( fx - 1 ) * x ) { + dxp = dx; + doLinear = 1; + continue; + } + dxp = ( fx - 1. ) * x; + x *= fx; + } + if( ( x2 - x ) < 0.05 * fabs( dxp ) ) break; + if( ( ptwXY1->status = ptwXY_interpolatePoint( smr, ptwXY1->interpolation, x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + if( ( ptwXY1->status = ptwXY_setValueAtX( smr, ptwXY1, x, y ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY1->status ); + } + nDone++; + } + } + notFirstPass = 1; + x2 = x1; + y2 = y1; + } + return( ptwXY1->status ); +} +/* +************************************************************ +*/ +static double ptwXY_thicken_linear_dx( int sectionSubdivideMax, double dDomainMax, double x1, double x2 ) { + + int ndx; + double dx = x2 - x1, dndx; + + if( dDomainMax == 0. ) { + dx = ( x2 - x1 ) / sectionSubdivideMax; } + else { + dndx = dx / dDomainMax; + ndx = (int) dndx; + if( ( dndx - ndx ) > 1e-6 ) ndx++; + if( ndx > sectionSubdivideMax ) ndx = sectionSubdivideMax; + if( ndx > 0 ) dx /= ndx; + } + + return( dx ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_thin( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double accuracy ) { + + int64_t i, j, length = ptwXY1->length; + ptwXYPoints *thinned = NULL; + double y1, y2, y3, accuracyNew; + char *thin = NULL; + + if( length < 3 ) { /* Logic below requires at least 2 points. */ + if( ( thinned = ptwXY_clone( smr, ptwXY1 ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( thinned ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( NULL ); + } + + accuracy = ptwXY_limitAccuracy( accuracy ); + accuracyNew = accuracy; + if( accuracyNew < ptwXY1->accuracy ) accuracyNew = ptwXY1->accuracy; + if( ( thinned = ptwXY_new( smr, ptwXY1->interpolation, ptwXY1->interpolationString, + ptwXY1->biSectionMax, accuracyNew, length, ptwXY1->overflowLength, ptwXY1->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + thinned->points[0] = ptwXY1->points[0]; /* This sections removes middle point if surrounding points have the same y-value. */ + y1 = ptwXY1->points[0].y; + y2 = ptwXY1->points[1].y; + for( i = 2, j = 1; i < length; i++ ) { + y3 = ptwXY1->points[i].y; + if( ( y1 != y2 ) || ( y2 != y3 ) ) { + thinned->points[j++] = ptwXY1->points[i - 1]; + y1 = y2; + y2 = y3; + } + } + thinned->points[j++] = ptwXY1->points[length - 1]; + + if( ptwXY1->interpolation != ptwXY_interpolationFlat ) { /* Now call ptwXY_thin2 for more thinning. */ + length = thinned->length = j; + if( ( thin = (char *) smr_malloc2( smr, (size_t) length, 1, "thin" ) ) == NULL ) goto Err2; + if( ptwXY_thin2( smr, thinned, thin, accuracy, 0, length - 1 ) != nfu_Okay ) goto Err1; + for( j = 1; j < length; j++ ) if( thin[j] != 0 ) break; + for( i = j + 1; i < length; i++ ) { + if( thin[i] == 0 ) { + thinned->points[j] = thinned->points[i]; + j++; + } + } + smr_freeMemory2( thin ); + } + thinned->length = j; + + return( thinned ); + +Err1: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); +Err2: + ptwXY_free( thinned ); + if( thin != NULL ) smr_freeMemory2( thin ); + return( NULL ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_thin2( statusMessageReporting *smr, ptwXYPoints *thinned, char *thin, double accuracy, int64_t i1, int64_t i2 ) { + + int64_t i, iMax = 0; + double y, s, dRange, dRangeMax = 0., dRangeR, dRangeRMax = 0; + double x1 = thinned->points[i1].x, y1 = thinned->points[i1].y, x2 = thinned->points[i2].x, y2 = thinned->points[i2].y; + nfu_status status = nfu_Okay; + + if( i1 + 1 >= i2 ) return( nfu_Okay ); + for( i = i1 + 1; i < i2; i++ ) { + if( ( thinned->status = ptwXY_interpolatePoint( smr, thinned->interpolation, thinned->points[i].x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( thinned->status ); + } + s = 0.5 * ( fabs( y ) + fabs( thinned->points[i].y ) ); + dRange = fabs( y - thinned->points[i].y ); + dRangeR = 0; + if( s != 0 ) dRangeR = dRange / s; + if( ( dRangeR > dRangeRMax ) || ( ( dRangeR >= 0.9999 * dRangeRMax ) && ( dRange > dRangeMax ) ) ) { + iMax = i; /* The choice of 0.9999 is not exact science. */ + if( dRange > dRangeMax ) dRangeMax = dRange; + if( dRangeR > dRangeRMax ) dRangeRMax = dRangeR; + } + } + if( dRangeRMax < accuracy ) { + for( i = i1 + 1; i < i2; i++ ) thin[i] = 1; } + else { + if( ( status = ptwXY_thin2( smr, thinned, thin, accuracy, i1, iMax ) ) != nfu_Okay ) return( status ); + status = ptwXY_thin2( smr, thinned, thin, accuracy, iMax, i2 ); + } + return( status ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_thinDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double epsilon ) { +/* +* Thins domain points that are closer the '0.5 * (x[i+1] + x[i]) * epsilon'. +*/ + int64_t i1, i2, length = ptwXY1->length, lengthm1 = length - 1, thinnedLength = 0; + ptwXYPoint *points; + ptwXYPoints *thinned = NULL; + double x1, x2, x3, dx, y2, half_epsilon = 0.5 * epsilon; + + if( ptwXY1->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_invalidInterpolation, "Flat interpolation not allowed." ); + return( NULL ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( NULL ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( length > 1 ) { + if( ( ptwXY1->points[length-1].x - ptwXY1->points[0].x ) < half_epsilon * ( fabs( ptwXY1->points[0].x ) + fabs( ptwXY1->points[0].x ) ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_Error, "Domain (%.17e, %.17e) is less than epsilon = %.17e.", + ptwXY1->points[0].x, ptwXY1->points[length-1].x, epsilon ); + return( NULL ); + } + } + + if( ( length <= 2 ) || ( epsilon < 2 * DBL_EPSILON ) ) { + if( ( thinned = ptwXY_clone( smr, ptwXY1 ) ) == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( thinned ); + } + + if( ( thinned = ptwXY_new( smr, ptwXY1->interpolation, ptwXY1->interpolationString, ptwXY1->biSectionMax, ptwXY1->accuracy, + length, ptwXY1->overflowAllocatedSize, ptwXY1->userFlag ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + points = thinned->points; + *points = ptwXY1->points[0]; + ++points; + ++thinnedLength; + x1 = ptwXY1->points[0].x; + x2 = x3 = x1; /* To stop some compilers from printing a warning. */ + for( i1 = 1; i1 < lengthm1; i1 = i2 ) { + for( i2 = i1; i2 < length; ++i2 ) { /* Find next x3 that is epsilon * ( x1 + x2 ) / 2 above x1. */ + x3 = ptwXY1->points[i2].x; + if( ( x3 - x1 ) >= half_epsilon * ( fabs( x1 ) + fabs( x3 ) ) ) break; + x2 = x3; + } + if( i1 == i2 ) { + y2 = ptwXY1->points[i2].y; + x2 = x3; } + else { + if( ( x3 - x1 ) > ( epsilon * ( fabs( x1 ) + fabs( x3 ) ) ) ) { + dx = fabs( x2 * epsilon ); + x2 = x1 + dx; + if( ptwXY_getValueAtX( smr, ptwXY1, x2, &y2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( thinned ); + return( NULL ); + } + --i2; } + else { + if( i2 == length ) break; + x2 = x3; + y2 = ptwXY1->points[i2].y; + } + } + points->x = x2; + points->y = y2; + ++points; + ++thinnedLength; + x1 = x2; + ++i2; + } + + x3 = ptwXY1->points[lengthm1].x; + x2 = thinned->points[thinnedLength-1].x; + if( ( x3 - x2 ) < ( half_epsilon * ( fabs( x2 ) + fabs( x3 ) ) ) ) { + --points; + --thinnedLength; + x1 = thinned->points[thinnedLength-1].x; + if( ( x3 - x1 ) > ( epsilon * ( fabs( x1 ) + fabs( x2 ) ) ) ) { + dx = fabs( x3 * epsilon ); + x2 = x3 - dx; + if( ptwXY_getValueAtX( smr, ptwXY1, x2, &y2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( thinned ); + return( NULL ); + } + points->x = x2; + points->y = y2; + ++points; + ++thinnedLength; + } + } + points->x = x3; + points->y = ptwXY1->points[lengthm1].y; + ++thinnedLength; + thinned->length = thinnedLength; + + return( thinned ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_trim( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { +/* +c Remove extra zeros at beginning and end. +*/ + int64_t i, i1, i2; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( ptwXY->status ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + for( i1 = 0; i1 < ptwXY->length; i1++ ) { + if( ptwXY->points[i1].y != 0 ) break; + } + if( i1 > 0 ) i1--; + for( i2 = ptwXY->length - 1; i2 >= 0; i2-- ) { + if( ptwXY->points[i2].y != 0 ) break; + } + i2++; + if( i2 < ptwXY->length ) i2++; + if( i2 > i1 ) { + if( i1 > 0 ) { + for( i = i1; i < i2; i++ ) ptwXY->points[i - i1] = ptwXY->points[i]; + } + ptwXY->length = i2 - i1; } + else if( i2 < i1 ) { /* Remove all zeros between endpoints. */ + ptwXY->points[1] = ptwXY->points[ptwXY->length - 1]; + ptwXY->length = 2; + } + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_union( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int unionOptions ) { + + int64_t overflowSize, i, i1 = 0, i2 = 0, n1 = ptwXY1->length, n2 = ptwXY2->length, length; + int fillWithFirst = unionOptions & ptwXY_union_fill, trim = unionOptions & ptwXY_union_trim; + ptwXYPoints *n; + double x1 = 0., x2 = 0., y1 = 0., y2 = 0., y, biSectionMax, accuracy; +/* +* Many other routines use the fact that ptwXY_union calls ptwXY_coalescePoints for ptwXY1 and ptwXY2 so do not change it. +*/ + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ptwXY_simpleCoalescePoints( smr, ptwXY2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed for source1." ); + return( NULL ); + } + if( ptwXY2->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed for source2." ); + return( NULL ); + } + + if( ( n1 == 1 ) || ( n2 == 1 ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, + "Too few point in one of the sources: len( source1 ) = %d, len( source2 ) = %d", (int) n1, (int) n2 ); + return( NULL ); + } + if( trim ) { + if( n1 > 0 ) { + if( n2 > 0 ) { + if( ptwXY1->points[0].x < ptwXY2->points[0].x ) { + while( i1 < n1 ) { + if( ptwXY1->points[i1].x >= ptwXY2->points[0].x ) break; + if( fillWithFirst ) { + if( i1 < ( ptwXY1->length - 1 ) ) { + x1 = ptwXY1->points[i1].x; + y1 = ptwXY1->points[i1].y; + x2 = ptwXY1->points[i1+1].x; + y2 = ptwXY1->points[i1+1].y; + } + } + i1++; + } } + else { + while( i2 < n2 ) { + if( ptwXY2->points[i2].x >= ptwXY1->points[0].x ) break; + i2++; + } + } + if( ptwXY1->points[n1-1].x > ptwXY2->points[n2-1].x ) { + while( i1 < n1 ) { + if( ptwXY1->points[n1-1].x <= ptwXY2->points[n2-1].x ) break; + n1--; + } } + else { + while( i2 < n2 ) { + if( ptwXY2->points[n2-1].x <= ptwXY1->points[n1-1].x ) break; + n2--; + } + } } + else { + n1 = 0; + } } + else { + n2 = 0; + } + } + overflowSize = ptwXY1->overflowAllocatedSize; + if( overflowSize < ptwXY2->overflowAllocatedSize ) overflowSize = ptwXY2->overflowAllocatedSize; + length = ( n1 - i1 ) + ( n2 - i2 ); + if( length == 0 ) length = ptwXY_minimumSize; + biSectionMax = ptwXY1->biSectionMax; + if( biSectionMax < ptwXY2->biSectionMax ) biSectionMax = ptwXY2->biSectionMax; + accuracy = ptwXY1->accuracy; + if( accuracy < ptwXY2->accuracy ) accuracy = ptwXY2->accuracy; + n = ptwXY_new( smr, ptwXY1->interpolation, NULL, biSectionMax, accuracy, length, overflowSize, ptwXY1->userFlag ); + if( n == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + for( i = 0; ( i1 < n1 ) && ( i2 < n2 ); i++ ) { + y = 0.; + if( ptwXY1->points[i1].x <= ptwXY2->points[i2].x ) { + n->points[i].x = ptwXY1->points[i1].x; + if( fillWithFirst ) { + y = ptwXY1->points[i1].y; + if( i1 < ( ptwXY1->length - 1 ) ) { + x1 = ptwXY1->points[i1].x; + y1 = ptwXY1->points[i1].y; + x2 = ptwXY1->points[i1+1].x; + y2 = ptwXY1->points[i1+1].y; } + else { + y1 = 0.; + y2 = 0.; + } + } + if( ptwXY1->points[i1].x == ptwXY2->points[i2].x ) i2++; + i1++; } + else { + n->points[i].x = ptwXY2->points[i2].x; + if( fillWithFirst && ( ( y1 != 0. ) || ( y2 != 0. ) ) ) { + if( ptwXY_interpolatePoint( smr, ptwXY1->interpolation, ptwXY2->points[i2].x, &y, x1, y1, x2, y2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n ); + return( NULL ); + } + } + i2++; + } + n->points[i].y = y; + } + + y = 0.; + for( ; i1 < n1; i1++, i++ ) { + n->points[i].x = ptwXY1->points[i1].x; + if( fillWithFirst ) y = ptwXY1->points[i1].y; + n->points[i].y = y; + } + for( ; i2 < n2; i2++, i++ ) { + n->points[i].x = ptwXY2->points[i2].x; + if( fillWithFirst && trim && ( n->points[i].x <= x2 ) ) { + if( ptwXY_interpolatePoint( smr, ptwXY1->interpolation, n->points[i].x, &y, x1, y1, x2, y2 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n ); + return( NULL ); + } + } + n->points[i].y = y; + } + n->length = i; + + if( unionOptions & ptwXY_union_mergeClosePoints ) { + if( ptwXY_mergeClosePoints( smr, n, 4 * DBL_EPSILON ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwXY_free( n ); + return( NULL ); + } + } + return( n ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_scaleOffsetXAndY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double xScale, double xOffset, + double yScale, double yOffset ) { + + int64_t i1, length = ptwXY->length; + ptwXYPoint *p1; + nfu_status status; + + if( ptwXY->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( ptwXY->status ); + } + + if( xScale == 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_XNotAscending, "xScale is 0 that will cause a non-ascending domain." ); + return( ptwXY->status = nfu_XNotAscending ); + } + + if( ( status = ptwXY_simpleCoalescePoints( smr, ptwXY ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + + for( i1 = 0, p1 = ptwXY->points; i1 < length; i1++, p1++ ) { + p1->x = xScale * p1->x + xOffset; + p1->y = yScale * p1->y + yOffset; + } + + if( xScale < 0 ) { + int64_t length_2 = length / 2; + ptwXYPoint tmp, *p2; + + for( i1 = 0, p1 = ptwXY->points, p2 = &(ptwXY->points[length-1]); i1 < length_2; i1++ ) { + tmp = *p1; + *p1 = *p2; + *p2 = tmp; + } + } + + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_scaleAndOffsetDomainWith_ptwXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXYPoints *offsetXY, ptwXYPoints *slopeXY, + int skipLastPoint ) { +/* + This function only modifies ptwXY over the domain defined by offsetXY via the equation ptwXY = offsetXY + slopeXY * ptwXY. + slopeXY must have the same domain as offsetXY. If skipLastPoint is non-zero, the last point modified is reverted by to its + origial value. This allows one to call this function multiple times with abutting domains for the offset and slope without + getting weird jumps at the boundaries. For example, suppose ptwXY is initially defined to be 1 in the domain [0,10]. Let, + ptwXY have the points [ [ 0, 1 ], [ 5, 1 ], [ 10, 1 ] ]. Calling this function with an offset and slope with the points + [ [ 0, 0 ], [ 5, 0 ] ] and [ 0, 2 ], [ 5, 2 ], respectively would return ptwXY as [ [ 0, 2 ], [ 5, 2 ], [ 10, 1 ] ] + if skipLastPoint is 0 and [ [ 0, 2 ], [ 5, 1 ], [ 10, 1 ] ] otherwise. Now calling the returned ptwXYPoints instances with an + offset and slope with the points [ [ 5, 0 ], [ 10, 0 ] ] and [ 5, 2 ], [ 10, 2 ], respectively would return ptwXY as + [ [ 0, 2 ], [ 5, 4 ], [ 10, 2 ] ] and [ [ 0, 2 ], [ 5, 2 ], [ 10, 2 ] ], respectively. +*/ + + int64_t i1; + ptwXYPoint *p1; + nfu_status status1, status2; + double offsetXYMin, offsetXYMax, slopeXYMin, slopeXYMax, domainMin, domainMax, domainMinXY, domainMaxXY; + ptwXYPoints *ptwXY2, *offsetXY2 = NULL, *slopeXY2 = NULL; + ptwXYPoints *mulXY = NULL, *addXY = NULL; + + if( ptwXY_simpleCoalescePoints( smr, ptwXY ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + status1 = ptwXY_domainMin( smr, offsetXY, &offsetXYMin ); /* Also verifies that offsetXY has no issues. */ + if( ( status1 != nfu_Okay ) && ( status1 != nfu_empty ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status1 ); + } + ptwXY_domainMax( smr, offsetXY, &offsetXYMax ); /* If ptwXY_domainMin succeeded, this will succeed. */ + + status2 = ptwXY_domainMin( smr, slopeXY, &slopeXYMin ); + if( ( status2 != nfu_Okay ) && ( status2 != nfu_empty ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status2 ); + } + ptwXY_domainMax( smr, slopeXY, &slopeXYMax ); + + if( ( status1 == nfu_empty ) && ( status2 == nfu_empty ) ) return( nfu_Okay ); + + if( ( offsetXYMin != slopeXYMin ) || ( offsetXYMax != slopeXYMax ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, "Offset and slope do not have the same domain." ); + return( ptwXY->status = nfu_domainsNotMutual ); + } + + if( ptwXY->length == 0 ) return( nfu_Okay ); + + ptwXY_domainMin( smr, ptwXY, &domainMinXY ); + ptwXY_domainMax( smr, ptwXY, &domainMaxXY ); + + if( ( domainMinXY >= offsetXYMax ) || ( domainMaxXY <= offsetXYMin ) ) return( nfu_Okay ); + + domainMin = ( domainMinXY > offsetXYMin ? domainMinXY : offsetXYMin ); + domainMax = ( domainMaxXY < offsetXYMax ? domainMaxXY : offsetXYMax ); + + if( ( domainMinXY == offsetXYMin ) && ( domainMaxXY == offsetXYMax ) ) { + ptwXY2 = ptwXY; + offsetXY2 = offsetXY; + slopeXY2 = slopeXY; } + else { + if( ( ptwXY2 = ptwXY_domainSlice( smr, ptwXY, domainMin, domainMax, 0, 1 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto Err; + } + + if( ( offsetXY2 = ptwXY_domainSlice( smr, offsetXY, domainMin, domainMax, 0, 1 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto Err; + } + + if( ( slopeXY2 = ptwXY_domainSlice( smr, slopeXY, domainMin, domainMax, 0, 1 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto Err; + } + } + + if( ( mulXY = ptwXY_mul2_ptwXY( smr, ptwXY2, slopeXY2 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto Err; + } + if( ( addXY = ptwXY_mul2_ptwXY( smr, mulXY, offsetXY2 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto Err; + } + if( skipLastPoint != 0 ) addXY->points[addXY->length-1].y = ptwXY2->points[ptwXY2->length-1].y; + + if( domainMin > domainMinXY ) { + for( i1 = 0, p1 = ptwXY2->points; i1 < ptwXY2->length; i1++, p1++ ) { + if( p1->x >= domainMin ) break; + if( ptwXY_setValueAtX( smr, addXY, p1->x, p1->y ) != nfu_Okay ) goto Err; + } + } + + if( domainMax < domainMaxXY ) { + for( i1 = 0, p1 = ptwXY2->points; i1 < ptwXY2->length; i1++, p1++ ) if( p1->x > domainMax ) break; + for( ; i1 < ptwXY2->length; i1++, p1++ ) { + if( ptwXY_setValueAtX( smr, addXY, p1->x, p1->y ) != nfu_Okay ) goto Err; + } + } + + ptwXY_copy( smr, ptwXY, addXY ); + +TheEnd: + ptwXY_free( offsetXY2 ); + ptwXY_free( slopeXY2 ); + ptwXY_free( ptwXY2 ); + ptwXY_free( mulXY ); + ptwXY_free( addXY ); + + return( ptwXY->status ); + +Err: + ptwXY->status = nfu_Error; + goto TheEnd; +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_methods.cc b/source/processes/hadronic/models/lend/src/ptwXY_methods.cc deleted file mode 100644 index e23ad451e1..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_methods.cc +++ /dev/null @@ -1,513 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -#include -#include "G4Exp.hh" -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static nfu_status ptwXY_clip2( ptwXYPoints *ptwXY1, double y, double x1, double y1, double x2, double y2 ); -static double ptwXY_thicken_linear_dx( int sectionSubdivideMax, double dxMax, double x1, double x2 ); -static nfu_status ptwXY_thin2( ptwXYPoints *thinned, char *thin, double accuracy, int64_t i1, int64_t i2 ); -/* -************************************************************ -*/ -nfu_status ptwXY_clip( ptwXYPoints *ptwXY1, double yMin, double yMax ) { -/* - This function acts oddly for xy = [ [ 1, 0 ], [ 3, -2 ], [ 4, 1 ] ] and yMin = 0.2, why??????? - This function probably only works for linear, linear interpolation (mainly because of ptwXY_clip2). -*/ - int64_t i, j, n; - double x2, y2; - nfu_status status; - ptwXYPoints *clipped; - ptwXYPoint *points; - - if( ( status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( status ); - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - n = ptwXY1->length; - if( n > 0 ) { - i = 0; - if( ptwXY_getYMax( ptwXY1 ) < yMin ) i = 1; - if( ptwXY_getYMin( ptwXY1 ) > yMax ) i = 1; - if( i == 1 ) return( ptwXY_clear( ptwXY1 ) ); - } - if( n == 1 ) { - y2 = ptwXY1->points[0].y; - if( y2 < yMin ) { - ptwXY1->points[0].y = yMin; } - else if( y2 > yMax ) { - ptwXY1->points[0].y = yMax; - } } - else if( n > 1 ) { - if( ( clipped = ptwXY_new( ptwXY1->interpolation, &(ptwXY1->interpolationOtherInfo), - ptwXY1->biSectionMax, ptwXY1->accuracy, n, 10, &status, ptwXY1->userFlag ) ) == NULL ) - return( ptwXY1->status = status ); - for( i = 0; i < n; i++ ) { - x2 = ptwXY1->points[i].x; - y2 = ptwXY1->points[i].y; - if( y2 < yMin ) { - if( i > 0 ) { - points = ptwXY_getPointAtIndex_Unsafely( clipped, clipped->length - 1 ); - if( points->y > yMin ) { - if( ( status = ptwXY_clip2( clipped, yMin, points->x, points->y, x2, y2 ) ) != nfu_Okay ) goto Err; - } - } - if( ( status = ptwXY_setValueAtX( clipped, x2, yMin ) ) != nfu_Okay ) goto Err; - j = i; - for( i++; i < n; i++ ) if( !( ptwXY1->points[i].y < yMin ) ) break; - if( i < n ) { - x2 = ptwXY1->points[i].x; - y2 = ptwXY1->points[i].y; - if( ( status = ptwXY_clip2( clipped, yMin, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) ) != nfu_Okay ) goto Err; - if( y2 > yMax ) { - if( ( status = ptwXY_clip2( clipped, yMax, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) ) != nfu_Okay ) goto Err; - } } - else if( j != n - 1 ) { - if( ( status = ptwXY_setValueAtX( clipped, ptwXY1->points[n - 1].x, yMin ) ) != nfu_Okay ) goto Err; - } - i--; } - else if( y2 > yMax ) { - if( i > 0 ) { - points = ptwXY_getPointAtIndex_Unsafely( clipped, clipped->length - 1 ); - if( points->y < yMax ) { - if( ( status = ptwXY_clip2( clipped, yMax, points->x, points->y, x2, y2 ) ) != nfu_Okay ) goto Err; - } - } - if( ( status = ptwXY_setValueAtX( clipped, x2, yMax ) ) != nfu_Okay ) goto Err; - j = i; - for( i++; i < n; i++ ) if( !( ptwXY1->points[i].y > yMax ) ) break; - if( i < n ) { - x2 = ptwXY1->points[i].x; - y2 = ptwXY1->points[i].y; - if( ( status = ptwXY_clip2( clipped, yMax, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) ) != nfu_Okay ) goto Err; - if( y2 < yMin ) { - if( ( status = ptwXY_clip2( clipped, yMin, ptwXY1->points[i-1].x, ptwXY1->points[i-1].y, x2, y2 ) ) != nfu_Okay ) goto Err; - } } - else if( j != n - 1 ) { - if( ( status = ptwXY_setValueAtX( clipped, ptwXY1->points[n - 1].x, yMax ) ) != nfu_Okay ) goto Err; - } - i--; } - else { - if( ( status = ptwXY_setValueAtX( clipped, x2, y2 ) ) != nfu_Okay ) goto Err; - } - } - if( ( status = ptwXY_simpleCoalescePoints( clipped ) ) != nfu_Okay ) goto Err; - ptwXY1->length = clipped->length; /* The squeamish may want to skip the next few lines. */ - clipped->length = n; - n = ptwXY1->allocatedSize; - ptwXY1->allocatedSize = clipped->allocatedSize; - clipped->allocatedSize = n; - points = clipped->points; - clipped->points = ptwXY1->points; - ptwXY1->points = points; - ptwXY_free( clipped ); - } - - return( ptwXY1->status ); - -Err: - ptwXY_free( clipped ); - return( ptwXY1->status = status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_clip2( ptwXYPoints *clipped, double y, double x1, double y1, double x2, double y2 ) { - - double x; - nfu_status status = nfu_Okay; - - x = ( y - y1 ) * ( x2 - x1 ) / ( y2 - y1 ) + x1; - if( x <= x1 ) { - x = x1; } - else if( x >= x2 ) { - x = x1; } - else { - status = ptwXY_setValueAtX( clipped, x, y ); - } - return( status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_thicken( ptwXYPoints *ptwXY1, int sectionSubdivideMax, double dxMax, double fxMax ) { - - double x1, x2 = 0., y1, y2 = 0., fx = 1.1, x, dx, dxp, lfx, y; /* fx initialized so compilers want complain. */ - int64_t i, notFirstPass = 0; - int nfx, nDone, doLinear; - nfu_status status; - - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - if( ( sectionSubdivideMax < 1 ) || ( dxMax < 0. ) || ( fxMax < 1. ) ) return( nfu_badInput ); - if( sectionSubdivideMax > ptwXY_sectionSubdivideMax ) sectionSubdivideMax = ptwXY_sectionSubdivideMax; - if( ( status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( status ); - for( i = ptwXY1->length - 1; i >= 0; i-- ) { - x1 = ptwXY1->points[i].x; - y1 = ptwXY1->points[i].y; - if( notFirstPass ) { - dx = ptwXY_thicken_linear_dx( sectionSubdivideMax, dxMax, x1, x2 ); - - if( x1 == 0. ) { - doLinear = 1; } - else { - fx = x2 / x1; - if( fx > 0. ) { - lfx = G4Log( fx ); - if( fxMax == 1. ) { - nfx = sectionSubdivideMax; } - else { - nfx = ( (int) ( lfx / G4Log( fxMax ) ) ) + 1; - if( nfx > sectionSubdivideMax ) nfx = sectionSubdivideMax; - } - if( nfx > 0 ) fx = G4Exp( lfx / nfx ); - doLinear = 0; - if( dx < ( fx - 1 ) * x1 ) doLinear = 1; } - else { - doLinear = 1; - } - } - x = x1; - dxp = dx; - nDone = 0; - while( 1 ) { - if( doLinear ) { - x += dx; } - else { - dx = ptwXY_thicken_linear_dx( sectionSubdivideMax - nDone, dxMax, x, x2 ); - if( dx <= ( fx - 1 ) * x ) { - dxp = dx; - doLinear = 1; - continue; - } - dxp = ( fx - 1. ) * x; - x *= fx; - } - if( ( x2 - x ) < 0.05 * std::fabs( dxp ) ) break; - if( ( status = ptwXY_interpolatePoint( ptwXY1->interpolation, x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_setValueAtX( ptwXY1, x, y ) ) != nfu_Okay ) return( status ); - nDone++; - } // Loop checking, 11.06.2015, T. Koi - } - notFirstPass = 1; - x2 = x1; - y2 = y1; - } - return( status ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_thin( ptwXYPoints *ptwXY1, double accuracy, nfu_status *status ) { - - int64_t i, j, length = ptwXY1->length; - ptwXYPoints *thinned = NULL; - double y1, y2, y3; - char *thin = NULL; - - if( length < 3 ) return( ptwXY_clone( ptwXY1, status ) ); /* Logic below requires at least 2 points. */ - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); - if( accuracy < ptwXY1->accuracy ) accuracy = ptwXY1->accuracy; - if( ( thinned = ptwXY_new( ptwXY1->interpolation, &(ptwXY1->interpolationOtherInfo), - ptwXY1->biSectionMax, accuracy, length, ptwXY1->overflowLength, status, ptwXY1->userFlag ) ) == NULL ) return( NULL ); - - thinned->points[0] = ptwXY1->points[0]; /* This sections removes middle point if surrounding points have the same y-value. */ - y1 = ptwXY1->points[0].y; - y2 = ptwXY1->points[1].y; - for( i = 2, j = 1; i < length; i++ ) { - y3 = ptwXY1->points[i].y; - if( ( y1 != y2 ) || ( y2 != y3 ) ) { - thinned->points[j++] = ptwXY1->points[i - 1]; - y1 = y2; - y2 = y3; - } - } - thinned->points[j++] = ptwXY1->points[length - 1]; - - if( ptwXY1->interpolation != ptwXY_interpolationFlat ) { /* Now call ptwXY_thin2 for more thinning. */ - length = thinned->length = j; - if( ( thin = (char *) nfu_calloc( 1, (size_t) length ) ) == NULL ) goto Err; - if( ( *status = ptwXY_thin2( thinned, thin, accuracy, 0, length - 1 ) ) != nfu_Okay ) goto Err; - for( j = 1; j < length; j++ ) if( thin[j] != 0 ) break; - for( i = j + 1; i < length; i++ ) { - if( thin[i] == 0 ) { - thinned->points[j] = thinned->points[i]; - j++; - } - } - nfu_free( thin ); - } - thinned->length = j; - - return( thinned ); - -Err: - ptwXY_free( thinned ); - if( thin != NULL ) nfu_free( thin ); - return( NULL ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_thin2( ptwXYPoints *thinned, char *thin, double accuracy, int64_t i1, int64_t i2 ) { - - int64_t i, iMax = 0; - double y, s, dY, dYMax = 0., dYR, dYRMax = 0; - double x1 = thinned->points[i1].x, y1 = thinned->points[i1].y, x2 = thinned->points[i2].x, y2 = thinned->points[i2].y; - nfu_status status = nfu_Okay; - - if( i1 + 1 >= i2 ) return( nfu_Okay ); - for( i = i1 + 1; i < i2; i++ ) { - if( ( status = ptwXY_interpolatePoint( thinned->interpolation, thinned->points[i].x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( status ); - s = 0.5 * ( std::fabs( y ) + std::fabs( thinned->points[i].y ) ); - dY = std::fabs( y - thinned->points[i].y ); - dYR = 0; - if( s != 0 ) dYR = dY / s; - if( ( dYR > dYRMax ) || ( ( dYR >= 0.9999 * dYRMax ) && ( dY > dYMax ) ) ) { /* The choice of 0.9999 is not exact science. */ - iMax = i; - if( dY > dYMax ) dYMax = dY; - if( dYR > dYRMax ) dYRMax = dYR; - } - } - if( dYRMax < accuracy ) { - for( i = i1 + 1; i < i2; i++ ) thin[i] = 1; } - else { - if( ( status = ptwXY_thin2( thinned, thin, accuracy, i1, iMax ) ) != nfu_Okay ) return( status ); - status = ptwXY_thin2( thinned, thin, accuracy, iMax, i2 ); - } - return( status ); -} -/* -************************************************************ -*/ -static double ptwXY_thicken_linear_dx( int sectionSubdivideMax, double dxMax, double x1, double x2 ) { - - int ndx; - double dx = x2 - x1, dndx; - - if( dxMax == 0. ) { - dx = ( x2 - x1 ) / sectionSubdivideMax; } - else { - dndx = dx / dxMax; - ndx = (int) dndx; - if( ( dndx - ndx ) > 1e-6 ) ndx++; - if( ndx > sectionSubdivideMax ) ndx = sectionSubdivideMax; - if( ndx > 0 ) dx /= ndx; - } - - return( dx ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_trim( ptwXYPoints *ptwXY ) { -/* -c Remove extra zeros at beginning and end. -*/ - - int64_t i, i1, i2; - nfu_status status; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - for( i1 = 0; i1 < ptwXY->length; i1++ ) { - if( ptwXY->points[i1].y != 0 ) break; - } - if( i1 > 0 ) i1--; - for( i2 = ptwXY->length - 1; i2 >= 0; i2-- ) { - if( ptwXY->points[i2].y != 0 ) break; - } - i2++; - if( i2 < ptwXY->length ) i2++; - if( i2 > i1 ) { - if( i1 > 0 ) { - for( i = i1; i < i2; i++ ) ptwXY->points[i - i1] = ptwXY->points[i]; - } - ptwXY->length = i2 - i1; } - else if( i2 < i1 ) { /* Remove all zeros between endpoints. */ - ptwXY->points[1] = ptwXY->points[ptwXY->length - 1]; - ptwXY->length = 2; - } - - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_union( ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int unionOptions ) { - - int64_t overflowSize, i, i1 = 0, i2 = 0, n1 = ptwXY1->length, n2 = ptwXY2->length, length; - int fillWithFirst = unionOptions & ptwXY_union_fill, trim = unionOptions & ptwXY_union_trim; - ptwXYPoints *n; - double x1 = 0., x2 = 0., y1 = 0., y2 = 0., y, biSectionMax, accuracy; - - if( ( *status = ptwXY1->status ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY2->status ) != nfu_Okay ) return( NULL ); - *status = nfu_otherInterpolation; - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( NULL ); -/* -* Many other routines use the fact that ptwXY_union calls ptwXY_coalescePoints for ptwXY1 and ptwXY2 so do not change it. -*/ - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( NULL ); - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY2 ) ) != nfu_Okay ) return( NULL ); - - if( ( n1 == 1 ) || ( n2 == 1 ) ) { - *status = nfu_tooFewPoints; - return( NULL ); - } - if( trim ) { - if( n1 > 0 ) { - if( n2 > 0 ) { - if( ptwXY1->points[0].x < ptwXY2->points[0].x ) { - while( i1 < n1 ) { // Loop checking, 11.05.2015, T. Koi - if( ptwXY1->points[i1].x >= ptwXY2->points[0].x ) break; - if( fillWithFirst ) { - if( i1 < ( ptwXY1->length - 1 ) ) { - x1 = ptwXY1->points[i1].x; - y1 = ptwXY1->points[i1].y; - x2 = ptwXY1->points[i1+1].x; - y2 = ptwXY1->points[i1+1].y; - } - } - i1++; - } } - else { - while( i2 < n2 ) { // Loop checking, 11.06.2015, T. Koi - if( ptwXY2->points[i2].x >= ptwXY1->points[0].x ) break; - i2++; - } - } - if( ptwXY1->points[n1-1].x > ptwXY2->points[n2-1].x ) { - while( i1 < n1 ) { // Loop checking, 11.06.2015, T. Koi - if( ptwXY1->points[n1-1].x <= ptwXY2->points[n2-1].x ) break; - n1--; - } } - else { - while( i2 < n2 ) { // Loop checking, 11.06.2015, T. Koi - if( ptwXY2->points[n2-1].x <= ptwXY1->points[n1-1].x ) break; - n2--; - } - } } - else { - n1 = 0; - } } - else { - n2 = 0; - } - } - overflowSize = ptwXY1->overflowAllocatedSize; - if( overflowSize < ptwXY2->overflowAllocatedSize ) overflowSize = ptwXY2->overflowAllocatedSize; - length = ( n1 - i1 ) + ( n2 - i2 ); - if( length == 0 ) length = ptwXY_minimumSize; - biSectionMax = ptwXY1->biSectionMax; - if( biSectionMax < ptwXY2->biSectionMax ) biSectionMax = ptwXY2->biSectionMax; - accuracy = ptwXY1->accuracy; - if( accuracy < ptwXY2->accuracy ) accuracy = ptwXY2->accuracy; - n = ptwXY_new( ptwXY1->interpolation, NULL, biSectionMax, accuracy, length, overflowSize, status, ptwXY1->userFlag ); - if( n == NULL ) return( NULL ); - - for( i = 0; ( i1 < n1 ) && ( i2 < n2 ); i++ ) { - y = 0.; - if( ptwXY1->points[i1].x <= ptwXY2->points[i2].x ) { - n->points[i].x = ptwXY1->points[i1].x; - if( fillWithFirst ) { - y = ptwXY1->points[i1].y; - if( i1 < ( ptwXY1->length - 1 ) ) { - x1 = ptwXY1->points[i1].x; - y1 = ptwXY1->points[i1].y; - x2 = ptwXY1->points[i1+1].x; - y2 = ptwXY1->points[i1+1].y; } - else { - y1 = 0.; - y2 = 0.; - } - } - if( ptwXY1->points[i1].x == ptwXY2->points[i2].x ) i2++; - i1++; } - else { - n->points[i].x = ptwXY2->points[i2].x; - if( fillWithFirst && ( ( y1 != 0. ) || ( y2 != 0. ) ) ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY1->interpolation, ptwXY2->points[i2].x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { - ptwXY_free( n ); - return( NULL ); - } - } - i2++; - } - n->points[i].y = y; - } - - y = 0.; - for( ; i1 < n1; i1++, i++ ) { - n->points[i].x = ptwXY1->points[i1].x; - if( fillWithFirst ) y = ptwXY1->points[i1].y; - n->points[i].y = y; - } - for( ; i2 < n2; i2++, i++ ) { - n->points[i].x = ptwXY2->points[i2].x; - if( fillWithFirst && trim && ( n->points[i].x <= x2 ) ) { - if( ( *status = ptwXY_interpolatePoint( ptwXY1->interpolation, n->points[i].x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { - ptwXY_free( n ); - return( NULL ); - } - } - n->points[i].y = y; - } - n->length = i; - - if( unionOptions & ptwXY_union_mergeClosePoints ) { - if( ( *status = ptwXY_mergeClosePoints( n, 4 * DBL_EPSILON ) ) != nfu_Okay ) { - ptwXY_free( n ); - return( NULL ); - } - } - return( n ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_scaleOffsetXAndY( ptwXYPoints *ptwXY, double xScale, double xOffset, double yScale, double yOffset ) { - - int64_t i1, length = ptwXY->length; - ptwXYPoint *p1; - nfu_status status; - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - if( xScale == 0 ) return( nfu_XNotAscending ); - - if( ( status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) return( status ); - - for( i1 = 0, p1 = ptwXY->points; i1 < length; i1++, p1++ ) { - p1->x = xScale * p1->x + xOffset; - p1->y = yScale * p1->y + yOffset; - } - - if( xScale < 0 ) { - int64_t length_2 = length / 2; - ptwXYPoint tmp, *p2; - - for( i1 = 0, p1 = ptwXY->points, p2 = &(ptwXY->points[length-1]); i1 < length_2; i1++ ) { - tmp = *p1; - *p1 = *p2; - *p2 = tmp; - } - } - - return( ptwXY->status ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_misc.c b/source/processes/hadronic/models/lend/src/ptwXY_misc.c new file mode 100644 index 0000000000..0afa6de474 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_misc.c @@ -0,0 +1,345 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include + +#include "ptwXY.h" + +static nfu_status ptwXY_createFromFunctionBisect( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, + double x2, double y2, ptwXY_createFromFunction_callback func, void *argList, int level, int checkForRoots, double eps ); +static nfu_status ptwXY_createFromFunctionZeroCrossing( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, + double x2, double y2, ptwXY_createFromFunction_callback func, void *argList, double eps ); +static nfu_status ptwXY_applyFunction2( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double y1, double y2, + ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, void *argList, int level, int checkForRoots ); +static nfu_status ptwXY_applyFunctionZeroCrossing( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double y1, double y2, + ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, void *argList ); +/* +************************************************************ +*/ +double ptwXY_limitAccuracy( double accuracy ) { + + if( accuracy < ptwXY_minAccuracy ) accuracy = ptwXY_minAccuracy; + if( accuracy > 1 ) accuracy = 1.; + return( accuracy ); +} +/* +************************************************************ +*/ +void ptwXY_update_biSectionMax( ptwXYPoints *ptwXY1, double oldLength ) { + + ptwXY1->biSectionMax = ptwXY1->biSectionMax - 1.442695 * log( ptwXY1->length / oldLength ); /* 1.442695 = 1 / log( 2. ) */ + if( ptwXY1->biSectionMax < 0 ) ptwXY1->biSectionMax = 0; + if( ptwXY1->biSectionMax > ptwXY_maxBiSectionMax ) ptwXY1->biSectionMax = ptwXY_maxBiSectionMax; +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createFromFunction( statusMessageReporting *smr, int n, double *xs, ptwXY_createFromFunction_callback func, + void *argList, double accuracy, int checkForRoots, int biSectionMax ) { + + int64_t i; + double x1, y1, x2, y2, eps = ClosestAllowXFactor * DBL_EPSILON; + ptwXYPoints *ptwXY; + ptwXYPoint *p1, *p2; + + if( n < 2 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_tooFewPoints, "Too few point = %d.", (int) n ); + return( NULL ); + } + for( i = 1; i < n; i++ ) { + if( xs[i-1] >= xs[i] ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_XNotAscending, + "Non-ascending domain values: xs[%d] = %.17e >= xs[%d] = %.17e.", + (int) (i-1), xs[i-1], (int) i, xs[i] ); + return( NULL ); + } + } + + x1 = xs[0]; + if( func( smr, x1, &y1, argList ) != nfu_Okay ) { + return( NULL ); + } + if( ( ptwXY = ptwXY_new( smr, ptwXY_interpolationLinLin, NULL, biSectionMax, accuracy, 500, 50, 0 ) ) == NULL ) goto Err; + for( i = 1; i < n; i++ ) { + if( ptwXY_setValueAtX_overrideIfClose( smr, ptwXY, x1, y1, eps, 0 ) != nfu_Okay ) goto Err; + x2 = xs[i]; + if( func( smr, x2, &y2, argList ) != nfu_Okay ) goto Err; + if( ptwXY_createFromFunctionBisect( smr, ptwXY, x1, y1, x2, y2, func, argList, 0, checkForRoots, eps ) != nfu_Okay ) goto Err; + x1 = x2; + y1 = y2; + } + if( ptwXY_setValueAtX_overrideIfClose( smr, ptwXY, x2, y2, eps, 1 ) != nfu_Okay ) goto Err; + + if( checkForRoots ) { + if( ptwXY_simpleCoalescePoints( NULL, ptwXY ) != nfu_Okay ) goto Err; + for( i = ptwXY->length - 1, p2 = NULL; i >= 0; i--, p2 = p1 ) { /* Work backward so lower points are still valid if a new point is added. */ + p1 = &(ptwXY->points[i]); + if( p2 != NULL ) { + if( ( p1->y * p2->y ) < 0. ) { + if( ptwXY_createFromFunctionZeroCrossing( smr, ptwXY, p1->x, p1->y, p2->x, p2->y, func, argList, eps ) != nfu_Okay ) goto Err; + } + } + } + } + + return( ptwXY ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ptwXY != NULL ) ptwXY_free( ptwXY ); + return( NULL ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_createFromFunction2( statusMessageReporting *smr, ptwXPoints *xs, ptwXY_createFromFunction_callback func, + void *argList, double accuracy, int checkForRoots, int biSectionMax ) { + + ptwXYPoints *ptwXY = ptwXY_createFromFunction( smr, (int) xs->length, xs->points, func, argList, accuracy, + checkForRoots, biSectionMax ); + + if( ptwXY == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_createFromFunctionBisect( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, + double x2, double y2, ptwXY_createFromFunction_callback func, void *argList, int level, int checkForRoots, double eps ) { + + nfu_status status; + double x, y, f; + + if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( fabs( x1 ) + fabs( x2 ) ) ) return( nfu_Okay ); + if( level >= ptwXY->biSectionMax ) return( nfu_Okay ); + x = 0.5 * ( x1 + x2 ); + if( ( status = ptwXY_interpolatePoint( smr, ptwXY->interpolation, x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + if( ( status = func( smr, x, &f, argList ) ) != nfu_Okay ) return( status ); + if( fabs( f - y ) <= 0.8 * fabs( f * ptwXY->accuracy ) ) return( nfu_Okay ); + if( ptwXY_createFromFunctionBisect( smr, ptwXY, x1, y1, x, f, func, argList, level + 1, checkForRoots, eps ) ) return( status ); + if( ptwXY_setValueAtX_overrideIfClose( smr, ptwXY, x, f, eps, 0 ) != nfu_Okay ) return( status ); + return( ptwXY_createFromFunctionBisect( smr, ptwXY, x, f, x2, y2, func, argList, level + 1, checkForRoots, eps ) ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_createFromFunctionZeroCrossing( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x1, double y1, + double x2, double y2, ptwXY_createFromFunction_callback func, void *argList, double eps ) { + + int i; + double x = 0, y; /* Initialize x so some compilers do not complain. */ + nfu_status status; + + for( i = 0; i < 16; i++ ) { + if( y2 == y1 ) break; + x = ( y2 * x1 - y1 * x2 ) / ( y2 - y1 ); + if( x <= x1 ) x = x1 + 0.1 * ( x2 - x1 ); + if( x >= x2 ) x = x2 - 0.1 * ( x2 - x1 ); + if( ( status = func( smr, x, &y, argList ) ) != nfu_Okay ) return( status ); + if( y == 0 ) break; + if( y1 * y < 0 ) { + x2 = x; + y2 = y; } + else { + x1 = x; + y1 = y; + } + } + return( ptwXY_setValueAtX_overrideIfClose( smr, ptwXY, x, 0., eps, 1 ) ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_applyFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, + void *argList, int checkForRoots ) { + + int64_t i, originalLength = ptwXY1->length, notFirstPass = 0; + double y1, y2 = 0; + nfu_status status; + ptwXYPoint p1, p2; + + checkForRoots = checkForRoots && ptwXY1->biSectionMax; + + if( ptwXY1->interpolation == ptwXY_interpolationOther ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_otherInterpolation, "Other interpolation not allowed." ); + return( ptwXY1->status = nfu_otherInterpolation ); + } + if( ptwXY1->interpolation == ptwXY_interpolationFlat ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_flatInterpolation, "Flat interpolation not allowed." ); + return( ptwXY1->status = nfu_flatInterpolation ); + } + + if( ptwXY_simpleCoalescePoints( smr, ptwXY1 ) != nfu_Okay ) goto Err; + for( i = originalLength - 1; i >= 0; i-- ) { + y1 = ptwXY1->points[i].y; + if( ( status = func( smr, &(ptwXY1->points[i]), argList ) ) != nfu_Okay ) { + if( ptwXY1->status == nfu_Okay ) ptwXY1->status = status; + return( status ); + } + p1 = ptwXY1->points[i]; + if( notFirstPass ) { + if( ptwXY_applyFunction2( smr, ptwXY1, y1, y2, &p1, &p2, func, argList, 0, checkForRoots ) != nfu_Okay ) goto Err; + } + notFirstPass = 1; + p2 = p1; + y2 = y1; + } + ptwXY_update_biSectionMax( ptwXY1, (double) originalLength ); + return( status ); + +Err: + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + if( ptwXY1->status == nfu_Okay ) ptwXY1->status = nfu_Error; + return( nfu_Error ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_applyFunction2( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double y1, double y2, + ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, void *argList, int level, int checkForRoots ) { + + double y; + ptwXYPoint p; + nfu_status status; + + if( ( p2->x - p1->x ) < ClosestAllowXFactor * DBL_EPSILON * ( fabs( p1->x ) + fabs( p2->x ) ) ) return( nfu_Okay ); + if( level >= ptwXY1->biSectionMax ) goto checkForZeroCrossing; + p.x = 0.5 * ( p1->x + p2->x ); + if( ( status = ptwXY_interpolatePoint( smr, ptwXY1->interpolation, p.x, &y, p1->x, y1, p2->x, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + p.y = y; + if( ( status = func( smr, &p, argList ) ) != nfu_Okay ) return( status ); + if( fabs( ( p.x - p1->x ) * ( p2->y - p1->y ) + ( p2->x - p1->x ) * ( p1->y - p.y ) ) <= 0.8 * fabs( ( p2->x - p1->x ) * p.y * ptwXY1->accuracy ) ) + goto checkForZeroCrossing; + if( ( status = ptwXY_setValueAtX( smr, ptwXY1, p.x, p.y ) ) != nfu_Okay ) return( status ); + if( ( status = ptwXY_applyFunction2( smr, ptwXY1, y1, y, p1, &p, func, argList, level + 1, checkForRoots ) ) ) return( status ); + return( ptwXY_applyFunction2( smr, ptwXY1, y, y2, &p, p2, func, argList, level + 1, checkForRoots ) ); + +checkForZeroCrossing: + if( checkForRoots && ( ( p1->y * p2->y ) < 0. ) ) + return( ptwXY_applyFunctionZeroCrossing( smr, ptwXY1, y1, y2, p1, p2, func, argList ) ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +static nfu_status ptwXY_applyFunctionZeroCrossing( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double y1, double y2, + ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, void *argList ) { + + int i; + double y, x1 = p1->x, x2 = p2->x, nY1 = p1->y, nY2 = p2->y, refY = 0.5 * ( fabs( p1->y ) + fabs( p2->y ) ); + ptwXYPoint p = { 0.5 * ( p1->x + p2->x ), 0.0 }; + nfu_status status; + + for( i = 0; i < 6; i++ ) { + if( nY2 == nY1 ) break; + p.x = ( nY2 * x1 - nY1 * x2 ) / ( nY2 - nY1 ); + if( p.x <= x1 ) p.x = 0.5 * ( x1 + x2 ); + if( p.x >= x2 ) p.x = 0.5 * ( x1 + x2 ); + if( ( status = ptwXY_interpolatePoint( smr, ptwXY1->interpolation, p.x, &y, p1->x, y1, p2->x, y2 ) ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( status ); + } + p.y = y; + if( ( status = func( smr, &p, argList ) ) != nfu_Okay ) return( status ); + if( p.y == 0 ) break; + if( 0.5 * refY < fabs( p.y ) ) break; + refY = fabs( p.y ); + if( p1->y * p.y < 0 ) { + x2 = p.x; + nY2 = p.y; } + else { + x1 = p.x; + nY1 = p.y; + } + } + return( ptwXY_setValueAtX( smr, ptwXY1, p.x, 0. ) ); +} +/* +************************************************************ +*/ +ptwXYPoints *ptwXY_fromString( statusMessageReporting *smr, char const *str, char sep, ptwXY_interpolation interpolation, + char const *interpolationString, double biSectionMax, double accuracy, char **endCharacter, int useSystem_strtod ) { + + int64_t numberConverted; + double *doublePtr; + ptwXYPoints *ptwXY = NULL; + + if( ( doublePtr = nfu_stringToListOfDoubles( smr, str, sep, &numberConverted, endCharacter, useSystem_strtod ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ( numberConverted % 2 ) == 0 ) { + ptwXY = ptwXY_create( smr, interpolation, interpolationString, biSectionMax, accuracy, numberConverted / 2, 10, numberConverted / 2, doublePtr, 0 ); } + else { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_oddNumberOfValues, "Odd number = %d of float for ptwXY.", (int) numberConverted ); + } + smr_freeMemory2( doublePtr ); + return( ptwXY ); +} +/* +************************************************************ +*/ +void ptwXY_showInteralStructure( ptwXYPoints *ptwXY, FILE *f, int printPointersAsNull ) { + + int64_t i, n1; + ptwXYPoint *point = ptwXY->points; + ptwXYOverflowPoint *overflowPoint; + + n1 = ptwXY_getNonOverflowLength( NULL, ptwXY ); + + fprintf( f, "status = %d interpolation = %d length = %d allocatedSize = %d\n", + (int) ptwXY->status, (int) ptwXY->interpolation, (int) ptwXY->length, (int) ptwXY->allocatedSize ); + fprintf( f, "userFlag = %d biSectionMax = %.8e accuracy = %.2e minFractional_dx = %.6e\n", + ptwXY->userFlag, ptwXY->biSectionMax, ptwXY->accuracy, ptwXY->minFractional_dx ); + fprintf( f, "interpolationString = %s\n", ptwXY->interpolationString ); + fprintf( f, " overflowLength = %d overflowAllocatedSize = %d mallocFailedSize = %d\n", + (int) ptwXY->overflowLength, (int) ptwXY->overflowAllocatedSize, (int) ptwXY->mallocFailedSize ); + fprintf( f, " Points data, points = %20p\n", ( printPointersAsNull ? NULL : ptwXY->points ) ); + for( i = 0; i < n1; i++, point++ ) fprintf( f, " %14.7e %14.7e\n", point->x, point->y ); + fprintf( f, " Overflow points data; %20p\n", ( printPointersAsNull ? NULL : &(ptwXY->overflowHeader) ) ); + for( overflowPoint = ptwXY->overflowHeader.next; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) { + fprintf( f, " %14.7e %14.7e %8d %20p %20p %20p\n", overflowPoint->point.x, overflowPoint->point.y, (int) overflowPoint->index, + ( printPointersAsNull ? NULL : overflowPoint ), ( printPointersAsNull ? NULL : overflowPoint->prior ), + ( printPointersAsNull ? NULL : overflowPoint->next ) ); + } + fprintf( f, " Points in order\n" ); + for( i = 0; i < ptwXY->length; i++ ) { + point = ptwXY_getPointAtIndex_Unsafely( ptwXY, i ); + fprintf( f, " %14.7e %14.7e\n", point->x, point->y ); + } +} +/* +************************************************************ +*/ +void ptwXY_simpleWrite( ptwXYPoints *ptwXY, FILE *f, char const *format ) { + + int64_t i; + ptwXYPoint *point; + + for( i = 0; i < ptwXY->length; i++ ) { + point = ptwXY_getPointAtIndex_Unsafely( ptwXY, i ); + fprintf( f, format, point->x, point->y ); + } +} +/* +************************************************************ +*/ +void ptwXY_simplePrint( ptwXYPoints *ptwXY, char const *format ) { + + ptwXY_simpleWrite( ptwXY, stdout, format ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_misc.cc b/source/processes/hadronic/models/lend/src/ptwXY_misc.cc deleted file mode 100644 index 293ee23a5c..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_misc.cc +++ /dev/null @@ -1,305 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -#include -#include "G4Log.hh" -namespace GIDI { -using namespace GIDI; -#endif - -static nfu_status ptwXY_createFromFunctionBisect( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, ptwXY_createFromFunction_callback func, - void *argList, int level, int checkForRoots, double eps ); -static nfu_status ptwXY_createFromFunctionZeroCrossing( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, - ptwXY_createFromFunction_callback func, void *argList, double eps ); -static nfu_status ptwXY_applyFunction2( ptwXYPoints *ptwXY1, double y1, double y2, ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, - void *argList, int level, int checkForRoots ); -static nfu_status ptwXY_applyFunctionZeroCrossing( ptwXYPoints *ptwXY1, double y1, double y2, ptwXYPoint *p1, ptwXYPoint *p2, - ptwXY_applyFunction_callback func, void *argList ); -/* -************************************************************ -*/ -void ptwXY_update_biSectionMax( ptwXYPoints *ptwXY1, double oldLength ) { - - ptwXY1->biSectionMax = ptwXY1->biSectionMax - 1.442695 * G4Log( ptwXY1->length / oldLength ); /* 1.442695 = 1 / std::log( 2. ) */ - if( ptwXY1->biSectionMax < 0 ) ptwXY1->biSectionMax = 0; - if( ptwXY1->biSectionMax > ptwXY_maxBiSectionMax ) ptwXY1->biSectionMax = ptwXY_maxBiSectionMax; -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_createFromFunction( int n, double *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, - int biSectionMax, nfu_status *status ) { - - int64_t i; - double x1, y1, x2 = 0., y2, eps = ClosestAllowXFactor * DBL_EPSILON; - ptwXYPoints *ptwXY; - ptwXYPoint *p1, *p2; - - *status = nfu_Okay; - if( n < 2 ) { *status = nfu_tooFewPoints; return( NULL ); } - for( i = 1; i < n; i++ ) { - if( xs[i-1] >= xs[i] ) *status = nfu_XNotAscending; - } - if( *status == nfu_XNotAscending ) return( NULL ); - - x1 = xs[0]; - if( ( *status = func( x1, &y1, argList ) ) != nfu_Okay ) return( NULL ); - if( ( ptwXY = ptwXY_new( ptwXY_interpolationLinLin, NULL, biSectionMax, accuracy, 500, 50, status, 0 ) ) == NULL ) return( NULL ); - for( i = 1; i < n; i++ ) { - if( ( *status = ptwXY_setValueAtX_overrideIfClose( ptwXY, x1, y1, eps, 0 ) ) != nfu_Okay ) goto err; - x2 = xs[i]; - if( ( *status = func( x2, &y2, argList ) ) != nfu_Okay ) goto err; - if( ( *status = ptwXY_createFromFunctionBisect( ptwXY, x1, y1, x2, y2, func, argList, 0, checkForRoots, eps ) ) != nfu_Okay ) goto err; - x1 = x2; - y1 = y2; - } - if( ( *status = ptwXY_setValueAtX_overrideIfClose( ptwXY, x2, y2, eps, 1 ) ) != nfu_Okay ) goto err; - - if( checkForRoots ) { - if( ( *status = ptwXY_simpleCoalescePoints( ptwXY ) ) != nfu_Okay ) goto err; - for( i = ptwXY->length - 1, p2 = NULL; i >= 0; i--, p2 = p1 ) { /* Work backward so lower points are still valid if a new point is added. */ - p1 = &(ptwXY->points[i]); - if( p2 != NULL ) { - if( ( p1->y * p2->y ) < 0. ) { - if( ( *status = ptwXY_createFromFunctionZeroCrossing( ptwXY, p1->x, p1->y, p2->x, p2->y, func, argList, eps ) ) != nfu_Okay ) goto err; - } - } - } - } - - return( ptwXY ); - -err: - ptwXY_free( ptwXY ); - return( NULL ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_createFromFunction2( ptwXPoints *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, - int biSectionMax, nfu_status *status ) { - - return( ptwXY_createFromFunction( (int) xs->length, xs->points, func, argList, accuracy, checkForRoots, biSectionMax, status ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_createFromFunctionBisect( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, ptwXY_createFromFunction_callback func, - void *argList, int level, int checkForRoots, double eps ) { - - nfu_status status; - double x, y, f; - - if( ( x2 - x1 ) < ClosestAllowXFactor * DBL_EPSILON * ( std::fabs( x1 ) + std::fabs( x2 ) ) ) return( nfu_Okay ); - if( level >= ptwXY->biSectionMax ) return( nfu_Okay ); - x = 0.5 * ( x1 + x2 ); - if( ( status = ptwXY_interpolatePoint( ptwXY->interpolation, x, &y, x1, y1, x2, y2 ) ) != nfu_Okay ) return( status ); - if( ( status = func( x, &f, argList ) ) != nfu_Okay ) return( status ); - if( std::fabs( f - y ) <= 0.8 * std::fabs( f * ptwXY->accuracy ) ) return( nfu_Okay ); - if( ( status = ptwXY_createFromFunctionBisect( ptwXY, x1, y1, x, f, func, argList, level + 1, checkForRoots, eps ) ) ) return( status ); - if( ( status = ptwXY_setValueAtX_overrideIfClose( ptwXY, x, f, eps, 0 ) ) != nfu_Okay ) return( status ); - return( ptwXY_createFromFunctionBisect( ptwXY, x, f, x2, y2, func, argList, level + 1, checkForRoots, eps ) ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_createFromFunctionZeroCrossing( ptwXYPoints *ptwXY, double x1, double y1, double x2, double y2, - ptwXY_createFromFunction_callback func, void *argList, double eps ) { - - //For coverity #63077 - if ( y2 == y1 ) return ( nfu_badInput ); - - int i; - double x = 0, y = 0; - nfu_status status; - - for( i = 0; i < 16; i++ ) { - if( y2 == y1 ) break; - x = ( y2 * x1 - y1 * x2 ) / ( y2 - y1 ); - if( x <= x1 ) x = x1 + 0.1 * ( x2 - x1 ); - if( x >= x2 ) x = x2 - 0.1 * ( x2 - x1 ); - if( ( status = func( x, &y, argList ) ) != nfu_Okay ) return( status ); - if( y == 0 ) break; - if( y1 * y < 0 ) { - x2 = x; - y2 = y; } - else { - x1 = x; - y1 = y; - } - } - return( ptwXY_setValueAtX_overrideIfClose( ptwXY, x, 0., eps, 1 ) ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_applyFunction( ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, void *argList, int checkForRoots ) { - - int64_t i, originalLength = ptwXY1->length, notFirstPass = 0; - double y1, y2 = 0; - nfu_status status; - ptwXYPoint p1, p2; - - checkForRoots = checkForRoots && ptwXY1->biSectionMax; - if( ptwXY1->status != nfu_Okay ) return( ptwXY1->status ); - if( ptwXY1->interpolation == ptwXY_interpolationOther ) return( nfu_otherInterpolation ); - if( ptwXY1->interpolation == ptwXY_interpolationFlat ) return( nfu_invalidInterpolation ); - if( ( status = ptwXY_simpleCoalescePoints( ptwXY1 ) ) != nfu_Okay ) return( status ); - for( i = originalLength - 1; i >= 0; i-- ) { - y1 = ptwXY1->points[i].y; - if( ( status = func( &(ptwXY1->points[i]), argList ) ) != nfu_Okay ) return( status ); - p1 = ptwXY1->points[i]; - if( notFirstPass ) { - if( ( status = ptwXY_applyFunction2( ptwXY1, y1, y2, &p1, &p2, func, argList, 0, checkForRoots ) ) != nfu_Okay ) return( status ); - } - notFirstPass = 1; - p2 = p1; - y2 = y1; - } - ptwXY_update_biSectionMax( ptwXY1, (double) originalLength ); - return( status ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_applyFunction2( ptwXYPoints *ptwXY1, double y1, double y2, ptwXYPoint *p1, ptwXYPoint *p2, ptwXY_applyFunction_callback func, - void *argList, int level, int checkForRoots ) { - - double y; - ptwXYPoint p; - nfu_status status; - - if( ( p2->x - p1->x ) < ClosestAllowXFactor * DBL_EPSILON * ( std::fabs( p1->x ) + std::fabs( p2->x ) ) ) return( nfu_Okay ); - if( level >= ptwXY1->biSectionMax ) goto checkForZeroCrossing; - p.x = 0.5 * ( p1->x + p2->x ); - if( ( status = ptwXY_interpolatePoint( ptwXY1->interpolation, p.x, &y, p1->x, y1, p2->x, y2 ) ) != nfu_Okay ) return( status ); - p.y = y; - if( ( status = func( &p, argList ) ) != nfu_Okay ) return( status ); - if( std::fabs( ( p.x - p1->x ) * ( p2->y - p1->y ) + ( p2->x - p1->x ) * ( p1->y - p.y ) ) <= 0.8 * std::fabs( ( p2->x - p1->x ) * p.y * ptwXY1->accuracy ) ) - goto checkForZeroCrossing; - if( ( status = ptwXY_setValueAtX( ptwXY1, p.x, p.y ) ) != nfu_Okay ) return( status ); - if( ( status = ptwXY_applyFunction2( ptwXY1, y1, y, p1, &p, func, argList, level + 1, checkForRoots ) ) ) return( status ); - return( ptwXY_applyFunction2( ptwXY1, y, y2, &p, p2, func, argList, level + 1, checkForRoots ) ); - -checkForZeroCrossing: - if( checkForRoots && ( ( p1->y * p2->y ) < 0. ) ) return( ptwXY_applyFunctionZeroCrossing( ptwXY1, y1, y2, p1, p2, func, argList ) ); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -static nfu_status ptwXY_applyFunctionZeroCrossing( ptwXYPoints *ptwXY1, double y1, double y2, ptwXYPoint *p1, ptwXYPoint *p2, - ptwXY_applyFunction_callback func, void *argList ) { - - int i; - double y, x1 = p1->x, x2 = p2->x, nY1 = p1->y, nY2 = p2->y, refY = 0.5 * ( std::fabs( p1->y ) + std::fabs( p2->y ) ); - ptwXYPoint p; - nfu_status status; - - //For coverity #63074 - if ( nY2 == nY1 ) return ( nfu_badInput ); - - for( i = 0; i < 6; i++ ) { - if( nY2 == nY1 ) break; - p.x = ( nY2 * x1 - nY1 * x2 ) / ( nY2 - nY1 ); - if( p.x <= x1 ) p.x = 0.5 * ( x1 + x2 ); - if( p.x >= x2 ) p.x = 0.5 * ( x1 + x2 ); - if( ( status = ptwXY_interpolatePoint( ptwXY1->interpolation, p.x, &y, p1->x, y1, p2->x, y2 ) ) != nfu_Okay ) return( status ); - p.y = y; - if( ( status = func( &p, argList ) ) != nfu_Okay ) return( status ); - if( p.y == 0 ) break; - if( 0.5 * refY < std::fabs( p.y ) ) break; - refY = std::fabs( p.y ); - if( p1->y * p.y < 0 ) { - x2 = p.x; - nY2 = p.y; } - else { - x1 = p.x; - nY1 = p.y; - } - } - return( ptwXY_setValueAtX( ptwXY1, p.x, 0. ) ); -} -/* -************************************************************ -*/ -ptwXYPoints *ptwXY_fromString( char const *str, ptwXY_interpolation interpolation, ptwXY_interpolationOtherInfo const *interpolationOtherInfo, - double biSectionMax, double accuracy, char **endCharacter, nfu_status *status ) { - - int64_t numberConverted; - double *doublePtr; - ptwXYPoints *ptwXY = NULL; - - if( ( *status = nfu_stringToListOfDoubles( str, &numberConverted, &doublePtr, endCharacter ) ) != nfu_Okay ) return( NULL ); - *status = nfu_oddNumberOfValues; - if( ( numberConverted % 2 ) == 0 ) - ptwXY = ptwXY_create( interpolation, interpolationOtherInfo, biSectionMax, accuracy, numberConverted, 10, numberConverted / 2, doublePtr, status, 0 ); - nfu_free( doublePtr ); - return( ptwXY ); -} -/* -************************************************************ -*/ -void ptwXY_showInteralStructure( ptwXYPoints *ptwXY, FILE *f, int printPointersAsNull ) { - - int64_t i, n = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *point = ptwXY->points; - ptwXYOverflowPoint *overflowPoint; - - fprintf( f, "status = %d interpolation = %d length = %d allocatedSize = %d\n", - (int) ptwXY->status, (int) ptwXY->interpolation, (int) ptwXY->length, (int) ptwXY->allocatedSize ); - fprintf( f, "userFlag = %d biSectionMax = %.8e accuracy = %.2e minFractional_dx = %.6e\n", - ptwXY->userFlag, ptwXY->biSectionMax, ptwXY->accuracy, ptwXY->minFractional_dx ); - fprintf( f, "interpolationString = %s\n", ptwXY->interpolationOtherInfo.interpolationString ); - fprintf( f, "getValueFunc is NULL = %d. argList is NULL = %d.\n", - ptwXY->interpolationOtherInfo.getValueFunc == NULL, ptwXY->interpolationOtherInfo.argList == NULL ); - fprintf( f, " overflowLength = %d overflowAllocatedSize = %d mallocFailedSize = %d\n", - (int) ptwXY->overflowLength, (int) ptwXY->overflowAllocatedSize, (int) ptwXY->mallocFailedSize ); - fprintf( f, " Points data, points = %20p\n", ( printPointersAsNull ? NULL : (void*)ptwXY->points ) ); - for( i = 0; i < n; i++, point++ ) fprintf( f, " %14.7e %14.7e\n", point->x, point->y ); - fprintf( f, " Overflow points data; %20p\n", ( printPointersAsNull ? NULL : (void*)&(ptwXY->overflowHeader) ) ); - for( overflowPoint = ptwXY->overflowHeader.next; overflowPoint != &(ptwXY->overflowHeader); overflowPoint = overflowPoint->next ) { - fprintf( f, " %14.7e %14.7e %8d %20p %20p %20p\n", overflowPoint->point.x, overflowPoint->point.y, (int) overflowPoint->index, - (void*) ( printPointersAsNull ? NULL : overflowPoint ), (void*) ( printPointersAsNull ? NULL : overflowPoint->prior ), - (void*) ( printPointersAsNull ? NULL : overflowPoint->next ) ); - } - fprintf( f, " Points in order\n" ); - for( i = 0; i < ptwXY->length; i++ ) { - point = ptwXY_getPointAtIndex( ptwXY, i ); - fprintf( f, " %14.7e %14.7e\n", point->x, point->y ); - } -} -/* -************************************************************ -*/ -void ptwXY_simpleWrite( ptwXYPoints *ptwXY, FILE *f, char *format ) { - - int64_t i; - ptwXYPoint *point; - - for( i = 0; i < ptwXY->length; i++ ) { - point = ptwXY_getPointAtIndex( ptwXY, i ); - fprintf( f, format, point->x, point->y ); - } -} -/* -************************************************************ -*/ -void ptwXY_simplePrint( ptwXYPoints *ptwXY, char *format ) { - - ptwXY_simpleWrite( ptwXY, stdout, format ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.c b/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.c new file mode 100644 index 0000000000..bb559da7ec --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.c @@ -0,0 +1,58 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwXY.h" + +/* +************************************************************ +*/ +nfu_status ptwXY_abs( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *p; + ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); + + if( ( nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ) ) < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = fabs( p->y ); + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = fabs( o->point.y ); + return( ptwXY->status ); +} +/* +************************************************************ +*/ +nfu_status ptwXY_neg( statusMessageReporting *smr, ptwXYPoints *ptwXY ) { + + int64_t i, nonOverflowLength; + ptwXYPoint *p; + ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); + + if( ( nonOverflowLength = ptwXY_getNonOverflowLength( smr, ptwXY ) ) < 0 ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwXY->status ); + } + + if( ( ptwXY->interpolation != ptwXY_interpolationLinLin ) && ( ptwXY->interpolation != ptwXY_interpolationLinLog ) && + ( ptwXY_interpolationLinLog != ptwXY_interpolationFlat ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_unsupportedInterpolation, + "Negation of non-linear y-interpolation not allowed: interpolation = '%s'.", + ptwXY->interpolationString ); + return( nfu_unsupportedInterpolation ); + } + + for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = -p->y; + for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = -o->point.y; + return( ptwXY->status ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.cc b/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.cc deleted file mode 100644 index 28860f972b..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwXY_unitaryOperators.cc +++ /dev/null @@ -1,49 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwXY.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -nfu_status ptwXY_abs( ptwXYPoints *ptwXY ) { - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p; - ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = std::fabs( p->y ); - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = std::fabs( o->point.y ); - return( ptwXY->status ); -} -/* -************************************************************ -*/ -nfu_status ptwXY_neg( ptwXYPoints *ptwXY ) { - - int64_t i, nonOverflowLength = ptwXY_getNonOverflowLength( ptwXY ); - ptwXYPoint *p; - ptwXYOverflowPoint *o, *overflowHeader = &(ptwXY->overflowHeader); - - if( ptwXY->status != nfu_Okay ) return( ptwXY->status ); - - for( i = 0, p = ptwXY->points; i < nonOverflowLength; i++, p++ ) p->y = -p->y; - for( o = overflowHeader->next; o != overflowHeader; o = o->next ) o->point.y = -o->point.y; - return( ptwXY->status ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwX_core.c b/source/processes/hadronic/models/lend/src/ptwX_core.c new file mode 100644 index 0000000000..7051d1e3a4 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwX_core.c @@ -0,0 +1,789 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include +#include +#include + +#include "ptwX.h" + +static int ptwX_sort_descending( void const *p1, void const *p2 ); +static int ptwX_sort_ascending( void const *p1, void const *p2 ); +/* +************************************************************ +*/ +ptwXPoints *ptwX_new( statusMessageReporting *smr, int64_t size ) { + + ptwXPoints *ptwX = (ptwXPoints *) smr_malloc2( smr, sizeof( ptwXPoints ), 1, "ptwX" ); + + if( ptwX == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + + if( ptwX_initialize( smr, ptwX, size ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + smr_freeMemory2( ptwX ); + } + return( ptwX ); +} +/* +************************************************************ +*/ +nfu_status ptwX_initialize( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size ) { + + ptwX->status = nfu_Okay; + ptwX->length = 0; + ptwX->allocatedSize = 0; + ptwX->mallocFailedSize = 0; + ptwX->points = NULL; + if( ptwX_reallocatePoints( smr, ptwX, size, 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_create( statusMessageReporting *smr, int64_t size, int64_t length, double const *xs ) { + + ptwXPoints *ptwX = ptwX_new( smr, size ); + + if( ptwX == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); } + else { + if( ptwX_setData( smr, ptwX, length, xs ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + ptwX = ptwX_free( ptwX ); + } + } + return( ptwX ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_createLine( statusMessageReporting *smr, int64_t size, int64_t length, double slope, double offset ) { + + int64_t i1; + double *p1; + ptwXPoints *ptwX; + + if( size < length ) size = length; + if( ( ptwX = ptwX_new( smr, size ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); } + else { + for( i1 = 0, p1 = ptwX->points; i1 < length; i1++, p1++ ) *p1 = slope * i1 + offset; + ptwX->length = length; + } + return( ptwX ); +} +/* +************************************************************ +*/ +nfu_status ptwX_copy( statusMessageReporting *smr, ptwXPoints *dest, ptwXPoints *src ) { + + if( dest->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid destination." ); + return( nfu_badSelf ); + } + if( src->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( ptwX_clear( smr, dest ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( src->status ); + } + if( ptwX_setData( smr, dest, src->length, src->points ) ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( src->status ); + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_clone( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + ptwXPoints *clone = ptwX_slice( smr, ptwX, 0, ptwX->length ); + + if( clone == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( clone ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_slice( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index1, int64_t index2 ) { + + int64_t i1, i2, length; + ptwXPoints *n1; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( index1 < 0 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "negative index1 = %d.", (int) index1 ); + return( NULL ); + } + if( index2 < index1 ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "index1 = %d greater than index2 = %d", + (int) index1, (int) index2 ); + return( NULL ); + } + if( index2 > ptwX->length ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "index2 = %d greater than length = %d.", + (int) index2, (int) ptwX->length ); + return( NULL ); + } + + length = ( index2 - index1 ); + if( ( n1 = ptwX_new( smr, length ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + for( i2 = 0, i1 = index1; i1 < index2; i1++, i2++ ) n1->points[i2] = ptwX->points[i1]; + n1->length = length; + + return( n1 ); +} +/* +************************************************************ +*/ +nfu_status ptwX_reallocatePoints( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size, int forceSmallerResize ) { + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( size < ptwX_minimumSize ) size = ptwX_minimumSize; /* ptwX_minimumSize must be > 0 for other routines to work properly. */ + if( size < ptwX->length ) size = ptwX->length; + if( size != ptwX->allocatedSize ) { + if( size > ptwX->allocatedSize ) { /* Increase size of allocated points. */ + ptwX->points = (double *) smr_realloc2( smr, ptwX->points, (size_t) size * sizeof( double ), "ptwX->points" ); + if( ptwX->points == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); } + else if( ( ptwX->allocatedSize > 2 * size ) || forceSmallerResize ) { /* Decrease size, if at least 1/2 size reduction or if forced to. */ + ptwX->points = (double *) smr_realloc2( smr, ptwX->points, (size_t) size * sizeof( double ), "ptwX->points" ); + if( ptwX->points == NULL ) smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + } + if( ptwX->points == NULL ) { + ptwX->mallocFailedSize = size; + size = 0; + ptwX->status = nfu_mallocError; + } + ptwX->allocatedSize = size; + } + + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_clear( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + ptwX->length = 0; + ptwX->status = nfu_Okay; + + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_release( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + ptwX->status = nfu_Okay; + ptwX->length = 0; + ptwX->allocatedSize = 0; + smr_freeMemory2( ptwX->points ); + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_free( ptwXPoints *ptwX ) { + + if( ptwX != NULL ) ptwX_release( NULL, ptwX ); + smr_freeMemory2( ptwX ); + return( ptwX ); +} +/* +************************************************************ +*/ +int64_t ptwX_length( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( -nfu_badSelf ); + } + + return( ptwX->length ); +} +/* +************************************************************ +*/ +nfu_status ptwX_setData( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t length, double const *xs ) { + + int64_t i; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( length > ptwX->allocatedSize ) { + if( ptwX_reallocatePoints( smr, ptwX, length, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); + } + } + for( i = 0; i < length; i++ ) ptwX->points[i] = xs[i]; + ptwX->length = length; + + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_deletePoints( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2 ) { + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( ( i1 < 0 ) || ( i1 > i2 ) || ( i2 > ptwX->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "index1 = %d, index2 = %d and length = %d", + (int) i1, (int) i2, (int) ptwX->length ); + return( nfu_badIndex ); + } + if( i1 != i2 ) { + int64_t n1 = ptwX->length - ( i2 - i1 ); + + for( ; i2 < ptwX->length; i1++, i2++ ) ptwX->points[i1] = ptwX->points[i2]; + ptwX->length = n1; + } + return( ptwX->status ); +} +/* +************************************************************ +*/ +double *ptwX_getPointAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index ) { + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( ( index < 0 ) || ( index >= ptwX->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Index = %d out of bounds: length = %d", + (int) index, (int) ptwX->length ); + return( NULL ); + } + return( &(ptwX->points[index]) ); +} +/* +************************************************************ +*/ +double ptwX_getPointAtIndex_Unsafely( ptwXPoints *ptwX, int64_t index ) { + + return( ptwX->points[index] ); +} +/* +************************************************************ +*/ +nfu_status ptwX_setPointAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, double x ) { + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( ( index < 0 ) || ( index > ptwX->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Index = %d out of bounds: length = %d", + (int) index, (int) ptwX->length ); + return( nfu_badIndex ); + } + + if( index == ptwX->allocatedSize ) { + if( ptwX_reallocatePoints( smr, ptwX, ptwX->allocatedSize + 10, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); + } + } + ptwX->points[index] = x; + if( index == ptwX->length ) ptwX->length++; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_insertPointsAtIndex( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, int64_t n1, double const *xs ) { + + int64_t i1, i2, n1p, size = n1 + ptwX->length; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( n1 < 1 ) return( nfu_Okay ); /* No points to insert. */ + + if( ( index < 0 ) || ( index > ptwX->length ) ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_badIndex, "Index = %d out of bounds: length = %d", + (int) index, (int) ptwX->length ); + return( ptwX->status = nfu_Error ); + } + + if( size > ptwX->allocatedSize ) { + if( ptwX_reallocatePoints( smr, ptwX, size, 0 ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); + } + } + + for( i1 = ptwX->length - 1, i2 = size - 1, n1p = ptwX->length - index; n1p > 0; i1--, i2--, n1p-- ) + ptwX->points[i2] = ptwX->points[i1]; + for( i1 = 0, i2 = index; i1 < n1; i1++, i2++ ) ptwX->points[i2] = xs[i1]; + ptwX->length += n1; + + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_ascendingOrder( statusMessageReporting *smr, ptwXPoints *ptwX, int *order ) { +/* +* Returns -1 list is descending, 1 if ascending and 0 otherwise (i.e., mixed). +*/ + int64_t i1; + double x1, x2; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + *order = 1; + if( ptwX->length < 2 ) return( nfu_Okay ); + + if( ( x1 = ptwX->points[0] ) < ( x2 = ptwX->points[1] ) ) { /* Check for ascending order. */ + for( i1 = 2; i1 < ptwX->length; i1++ ) { + x1 = x2; + x2 = ptwX->points[i1]; + if( x2 <= x1 ) { + *order = 0; + return( nfu_Okay ); + } + } } + else { + *order = -1; /* Check for descending order. */ + for( i1 = 1; i1 < ptwX->length; i1++ ) { + x2 = ptwX->points[i1]; + if( x1 <= x2 ) { + *order = 0; + return( nfu_Okay ); + } + x1 = x2; + } + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_fromString( statusMessageReporting *smr, char const *str, char sep, char **endCharacter ) { + + int64_t numberConverted; + double *doublePtr; + ptwXPoints *ptwX = NULL; + + if( ( doublePtr = nfu_stringToListOfDoubles( smr, str, sep, &numberConverted, endCharacter, 1 ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ( ptwX = ptwX_create( smr, numberConverted, numberConverted, doublePtr ) ) == NULL ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + smr_freeMemory2( doublePtr ); + return( ptwX ); +} +/* +************************************************************ +*/ +int ptwX_countOccurrences( statusMessageReporting *smr, ptwXPoints *ptwX, double value ) { + + int count; + int64_t i1; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( -nfu_badSelf ); + } + + count = 0; + for( i1 = 0; i1 < ptwX->length; i1++ ) { + if( ptwX->points[i1] == value ) ++count; + } + return( count ); +} +/* +************************************************************ +*/ +nfu_status ptwX_reverse( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + int64_t i1, i2 = ptwX->length - 1, n1 = ptwX->length / 2; + double tmp; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + for( i1 = 0; i1 < n1; i1++, i2-- ) { + tmp = ptwX->points[i1]; + ptwX->points[i1] = ptwX->points[i2]; + ptwX->points[i2] = tmp; + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_sort( statusMessageReporting *smr, ptwXPoints *ptwX, enum ptwX_sort_order order ) { + + int (*cmp)( void const *, void const * ) = ptwX_sort_descending; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( order == ptwX_sort_order_ascending ) cmp = ptwX_sort_ascending; + qsort( ptwX->points, (size_t) ptwX->length, sizeof( ptwX->points[0] ), cmp ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +static int ptwX_sort_descending( void const *p1, void const *p2 ) { return( -ptwX_sort_ascending( p1, p2 ) ); } +static int ptwX_sort_ascending( void const *p1, void const *p2 ) { + + double *d1 = (double *) p1, *d2 = (double *) p2; + + if( *d1 < *d2 ) return( -1 ); + if( *d1 == *d2 ) return( 0 ); + return( 1 ); +} +/* +************************************************************ +*/ +nfu_status ptwX_closesDifference( statusMessageReporting *smr, ptwXPoints *ptwX, double value, int64_t *index, double *difference ) { + + return( ptwX_closesDifferenceInRange( smr, ptwX, 0, ptwX->length, value, index, difference ) ); +} +/* +************************************************************ +*/ +nfu_status ptwX_closesDifferenceInRange( statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2, + double value, int64_t *index, double *difference ) { +/* +* Finds the closes datum to value. If *difference is zero, datum is same as value. +*/ + double d1; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( i1 < 0 ) i1 = 0; + if( i2 > ptwX->length ) i2 = ptwX->length; + if( i1 >= i2 ) return( nfu_Okay ); + *index = i1; + *difference = value - ptwX->points[i1]; + for( i1++; i1 < i2; i1++ ) { + d1 = value - ptwX->points[i1]; + if( fabs( *difference ) > fabs( d1 ) ) { + *index = i1; + *difference = d1; + } + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +ptwXPoints *ptwX_unique( statusMessageReporting *smr, ptwXPoints *ptwX, int order ) { +/* +* Returns a new ptwXPoints instance that is a unique list of the values in ptwX. +* If order < 0 order is descending, if order > 0 order is ascending, otherwise, order is the same as ptwX. +*/ + int64_t i1, i2, n1 = 0; + double x1, *p2; + ptwXPoints *ptwX2 = NULL; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( NULL ); + } + + if( order == 0 ) { + if( ( ptwX2 = ptwX_new( smr, ptwX->length ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + for( i1 = 0; i1 < ptwX->length; i1++ ) { + x1 = ptwX->points[i1]; + for( i2 = 0, p2 = ptwX2->points; i2 < ptwX2->length; i2++, p2++ ) { + if( *p2 == x1 ) break; + } + if( i2 == ptwX2->length ) { + ptwX2->points[ptwX2->length] = x1; + ptwX2->length++; + } + } } + else { + enum ptwX_sort_order sort_order = ( order > 0 ) ? ptwX_sort_order_ascending : ptwX_sort_order_descending; + + if( ( ptwX2 = ptwX_clone( smr, ptwX ) ) == NULL ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( NULL ); + } + if( ptwX_sort( smr, ptwX2, sort_order ) != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + goto err; + } + + if( ptwX2->length > 1 ) { + x1 = ptwX2->points[n1]; /* n1 is initially 0. */ + n1++; + for( i1 = 1; i1 < ptwX2->length; i1++ ) { + if( x1 != ptwX2->points[i1] ) { + x1 = ptwX2->points[i1]; + ptwX2->points[n1] = x1; + n1++; + } + } + ptwX2->length = n1; + } + } + return( ptwX2 ); + +err: + if( ptwX2 != NULL ) ptwX_free( ptwX2 ); + return( NULL ); +} +/* +************************************************************ +*/ +nfu_status ptwX_abs( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + int64_t i1; + double *p1; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + for( i1 = 0, p1 = ptwX->points; i1 < ptwX->length; i1++, p1++ ) *p1 = fabs( *p1 ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_neg( statusMessageReporting *smr, ptwXPoints *ptwX ) { + + if( ptwX_slopeOffset( smr, ptwX, -1, 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_add_double( statusMessageReporting *smr, ptwXPoints *ptwX, double value ) { + + if( ptwX_slopeOffset( smr, ptwX, 1, value ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_mul_double( statusMessageReporting *smr, ptwXPoints *ptwX, double value ) { + + if( ptwX_slopeOffset( smr, ptwX, value, 0 ) != nfu_Okay ) + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_Error, "Via." ); + return( ptwX->status ); +} +/* +************************************************************ +*/ +nfu_status ptwX_slopeOffset( statusMessageReporting *smr, ptwXPoints *ptwX, double slope, double offset ) { + + int64_t i1; + double *p1; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + for( i1 = 0, p1 = ptwX->points; i1 < ptwX->length; i1++, p1++ ) *p1 = slope * *p1 + offset; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_add_ptwX( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2 ) { + + int64_t i1; + double *p1 = ptwX1->points, *p2 = ptwX2->points; + + if( ptwX1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1." ); + return( nfu_badSelf ); + } + if( ptwX2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( nfu_badSelf ); + } + + if( ptwX1->length != ptwX2->length ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, + "length of source1 = %d not the same as length of source2 = %d.", (int) ptwX1->length, (int) ptwX2->length ); + return( nfu_domainsNotMutual ); + } + + for( i1 = 0; i1 < ptwX1->length; i1++, p1++, p2++ ) *p1 += *p2; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_sub_ptwX( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2 ) { + + int64_t i1; + double *p1 = ptwX1->points, *p2 = ptwX2->points; + + if( ptwX1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1" ); + return( nfu_badSelf ); + } + if( ptwX2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( nfu_badSelf ); + } + + if( ptwX1->length != ptwX2->length ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, + "length of source1 = %d not the same as length of source2 = %d.", (int) ptwX1->length, (int) ptwX2->length ); + return( nfu_domainsNotMutual ); + } + + for( i1 = 0; i1 < ptwX1->length; i1++, p1++, p2++ ) *p1 -= *p2; + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_range( statusMessageReporting *smr, ptwXPoints *ptwX, double *rangeMin, double *rangeMax ) { + + int64_t i1, n1 = ptwX->length; + *rangeMin = *rangeMax = 0; + double *p1 = ptwX->points; + + if( ptwX->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source." ); + return( nfu_badSelf ); + } + + if( n1 > 0 ) { + *rangeMin = *rangeMax = *(p1++); + for( i1 = 1; i1 < n1; ++i1, ++p1 ) { + if( *p1 < *rangeMin ) *rangeMin = *p1; + if( *p1 > *rangeMax ) *rangeMax = *p1; + } + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_compare( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int *comparison ) { + + int64_t i1, n1 = ptwX1->length, n2 = ptwX2->length, nn = n1; + double *p1 = ptwX1->points, *p2 = ptwX2->points; + + *comparison = 0; + if( ptwX1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1." ); + return( nfu_badSelf ); + } + if( ptwX2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( nfu_badSelf ); + } + + if( nn > n2 ) nn = n2; + for( i1 = 0; i1 < nn; i1++, p1++, p2++ ) { + if( *p1 == *p2 ) continue; + *comparison = 1; + if( *p1 < *p2 ) *comparison = -1; + return( nfu_Okay ); + } + if( n1 < n2 ) { + *comparison = -1; } + else if( n1 > n2 ) { + *comparison = 1; + } + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_close( statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int epsilonFactor, double epsilon, + int *index ) { +/* +* Returns the index where ptwX1 and ptwX2 differ significantly as determined by epsilonFactor and epsilon. +*/ + + int64_t i1, n1 = ptwX1->length; + double larger; + double *p1 = ptwX1->points, *p2 = ptwX2->points; + + *index = -1; + if( ptwX1->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source1." ); + return( nfu_badSelf ); + } + if( ptwX2->status != nfu_Okay ) { + smr_setReportError2p( smr, nfu_SMR_libraryID, nfu_badSelf, "Invalid source2." ); + return( nfu_badSelf ); + } + + if( ptwX1->length != ptwX2->length ) { + smr_setReportError2( smr, nfu_SMR_libraryID, nfu_domainsNotMutual, + "length of source1 = %d not the same as length of source2 = %d.", (int) ptwX1->length, (int) ptwX2->length ); + return( nfu_domainsNotMutual ); + } + + epsilon = fabs( epsilon ) + abs( epsilonFactor ) * DBL_EPSILON; + + for( i1 = 0; i1 < n1; i1++, p1++, p2++ ) { + larger = fabs( *p1 ); + if( fabs( *p2 ) > larger ) larger = fabs( *p2 ); + if( fabs( *p2 - *p1 ) > epsilon * larger ) break; + } + *index = (int) i1; + return( nfu_Okay ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwX_core.cc b/source/processes/hadronic/models/lend/src/ptwX_core.cc deleted file mode 100644 index 03ecf47193..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwX_core.cc +++ /dev/null @@ -1,579 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include -#include //for std::abs(int) -#include - -#include "ptwX.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int ptwX_sort_descending( void const *p1, void const *p2 ); -static int ptwX_sort_ascending( void const *p1, void const *p2 ); -/* -************************************************************ -*/ -ptwXPoints *ptwX_new( int64_t size, nfu_status *status ) { - - ptwXPoints *ptwX = (ptwXPoints *) nfu_calloc( sizeof( ptwXPoints ), 1 ); - - *status = nfu_mallocError; - if( ptwX == NULL ) return( NULL ); - ptwX_setup( ptwX, size ); - if( ( *status = ptwX->status ) != nfu_Okay ) ptwX = (ptwXPoints *) nfu_free( ptwX ); - return( ptwX ); -} -/* -************************************************************ -*/ -nfu_status ptwX_setup( ptwXPoints *ptwX, int64_t size ) { - - ptwX->status = nfu_Okay; - ptwX->length = 0; - ptwX->allocatedSize = 0; - ptwX->mallocFailedSize = 0; - ptwX->points = NULL; - ptwX_reallocatePoints( ptwX, size, 0 ); - return( ptwX->status ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_create( int64_t size, int64_t length, double const *xs, nfu_status *status ) { - - ptwXPoints *ptwX = ptwX_new( size, status ); - - if( ptwX != NULL ) { - if( ( *status = ptwX_setData( ptwX, length, xs ) ) != nfu_Okay ) ptwX = ptwX_free( ptwX ); - } - return( ptwX ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_createLine( int64_t size, int64_t length, double slope, double offset, nfu_status *status ) { - - int64_t i1; - double *p1; - ptwXPoints *ptwX; - - if( size < length ) size = length; - if( ( ptwX = ptwX_new( size, status ) ) != NULL ) { - for( i1 = 0, p1 = ptwX->points; i1 < length; i1++, p1++ ) *p1 = slope * i1 + offset; - ptwX->length = length; - } - return( ptwX ); -} -/* -************************************************************ -*/ -nfu_status ptwX_copy( ptwXPoints *dest, ptwXPoints *src ) { - - if( dest->status == nfu_Okay ) return( dest->status ); - if( src->status == nfu_Okay ) return( src->status ); - ptwX_clear( dest ); - return( ptwX_setData( dest, src->length, src->points ) ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_clone( ptwXPoints *ptwX, nfu_status *status ) { - - return( ptwX_slice( ptwX, 0, ptwX->length, status ) ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_slice( ptwXPoints *ptwX, int64_t index1, int64_t index2, nfu_status *status ) { - - int64_t i, j, length; - ptwXPoints *n; - - *status = nfu_badSelf; - if( ptwX->status != nfu_Okay ) return( NULL ); - *status = nfu_badIndex; - if( index1 < 0 ) return( NULL ); - if( index2 < index1 ) return( NULL ); - if( index2 > ptwX->length ) return( NULL ); - length = ( index2 - index1 ); - if( ( n = ptwX_new( length, status ) ) == NULL ) return( n ); - *status = n->status; - for( j = 0, i = index1; i < index2; i++, j++ ) n->points[j] = ptwX->points[i]; - n->length = length; - return( n ); -} -/* -************************************************************ -*/ -nfu_status ptwX_reallocatePoints( ptwXPoints *ptwX, int64_t size, int forceSmallerResize ) { - - if( size < ptwX_minimumSize ) size = ptwX_minimumSize; /* ptwX_minimumSize must be > 0 for other routines to work properly. */ - if( size < ptwX->length ) size = ptwX->length; - if( size != ptwX->allocatedSize ) { - if( size > ptwX->allocatedSize ) { /* Increase size of allocated points. */ - ptwX->points = (double *) nfu_realloc( (size_t) size * sizeof( double ), ptwX->points ); } - else if( ( ptwX->allocatedSize > 2 * size ) || forceSmallerResize ) { /* Decrease size, if at least 1/2 size reduction or if forced to. */ - ptwX->points = (double *) nfu_realloc( (size_t) size * sizeof( double ), ptwX->points ); - } - if( ptwX->points == NULL ) { - ptwX->mallocFailedSize = size; - size = 0; - ptwX->status = nfu_mallocError; - } - ptwX->allocatedSize = size; - } - - return( ptwX->status ); -} -/* -************************************************************ -*/ -nfu_status ptwX_clear( ptwXPoints *ptwX ) { - - ptwX->length = 0; - return( ptwX->status ); -} -/* -************************************************************ -*/ -nfu_status ptwX_release( ptwXPoints *ptwX ) { - - ptwX->length = 0; - ptwX->allocatedSize = 0; - ptwX->points = (double *) nfu_free( ptwX->points ); - - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_free( ptwXPoints *ptwX ) { - - if( ptwX != NULL ) ptwX_release( ptwX ); - return( (ptwXPoints *) nfu_free( ptwX ) ); -} -/* -************************************************************ -*/ -int64_t ptwX_length( ptwXPoints *ptwX ) { - - return( ptwX->length ); -} -/* -************************************************************ -*/ -nfu_status ptwX_setData( ptwXPoints *ptwX, int64_t length, double const *xs ) { - - int64_t i; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - - if( length > ptwX->allocatedSize ) { - ptwX_reallocatePoints( ptwX, length, 0 ); - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - } - for( i = 0; i < length; i++ ) ptwX->points[i] = xs[i]; - ptwX->length = length; - - return( ptwX->status ); -} -/* -************************************************************ -*/ -nfu_status ptwX_deletePoints( ptwXPoints *ptwX, int64_t i1, int64_t i2 ) { - - int64_t n = ptwX->length - ( i2 - i1 ); - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - if( ( i1 < 0 ) || ( i1 > i2 ) || ( i2 > ptwX->length ) ) return( nfu_badIndex ); - if( i1 != i2 ) { - for( ; i2 < ptwX->length; i1++, i2++ ) ptwX->points[i1] = ptwX->points[i2]; - ptwX->length = n; - } - return( ptwX->status ); -} -/* -************************************************************ -*/ -double *ptwX_getPointAtIndex( ptwXPoints *ptwX, int64_t index ) { - - if( ptwX->status != nfu_Okay ) return( NULL ); - if( ( index < 0 ) || ( index >= ptwX->length ) ) return( NULL ); - return( &(ptwX->points[index]) ); -} -/* -************************************************************ -*/ -double ptwX_getPointAtIndex_Unsafely( ptwXPoints *ptwX, int64_t index ) { - - return( ptwX->points[index] ); -} -/* -************************************************************ -*/ -nfu_status ptwX_setPointAtIndex( ptwXPoints *ptwX, int64_t index, double x ) { - - nfu_status status; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - if( ( index < 0 ) || ( index > ptwX->length ) ) return( nfu_badIndex ); - if( index == ptwX->allocatedSize ) { - if( ( status = ptwX_reallocatePoints( ptwX, ptwX->allocatedSize + 10, 0 ) ) != nfu_Okay ) return( status ); - } - ptwX->points[index] = x; - if( index == ptwX->length ) ptwX->length++; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_insertPointsAtIndex( ptwXPoints *ptwX, int64_t index, int64_t n1, double const *xs ) { - - nfu_status status; - int64_t i1, i2, n1p, size = n1 + ptwX->length; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - if( n1 < 1 ) return( nfu_Okay ); - if( ( index < 0 ) || ( index > ptwX->length ) ) return( nfu_badIndex ); - if( size > ptwX->allocatedSize ) { - if( ( status = ptwX_reallocatePoints( ptwX, size, 0 ) ) != nfu_Okay ) return( status ); - } - for( i1 = ptwX->length - 1, i2 = size - 1, n1p = ptwX->length - index + 1; n1p > 0; i1--, i2--, n1p-- ) ptwX->points[i2] = ptwX->points[i1]; - for( i1 = 0, i2 = index; i1 < n1; i1++, i2++ ) ptwX->points[i2] = xs[i1]; - ptwX->length += n1; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -int ptwX_ascendingOrder( ptwXPoints *ptwX ) { -/* -* Returns -1 list is descending, 1 if ascending and 0 otherwise (i.e., mixed). -*/ - int order = 1; - int64_t i; - double x1, x2; - - if( ptwX->length < 2 ) return( 0 ); - - if( ( x1 = ptwX->points[0] ) < ( x2 = ptwX->points[1] ) ) { /* Check for ascending order. */ - for( i = 2; i < ptwX->length; i++ ) { - x1 = x2; - x2 = ptwX->points[i]; - if( x2 <= x1 ) return( 0 ); - } } - else { - if( x1 == x2 ) return( 0 ); - order = -1; /* Check for descending order. */ - for( i = 2; i < ptwX->length; i++ ) { - x1 = x2; - x2 = ptwX->points[i]; - if( x1 <= x2 ) return( 0 ); - } - } - return( order ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_fromString( char const *str, char **endCharacter, nfu_status *status ) { - - int64_t numberConverted; - double *doublePtr; - ptwXPoints *ptwX = NULL; - - if( ( *status = nfu_stringToListOfDoubles( str, &numberConverted, &doublePtr, endCharacter ) ) != nfu_Okay ) return( NULL ); - ptwX = ptwX_create( numberConverted, numberConverted, doublePtr, status ); - nfu_free( doublePtr ); - return( ptwX ); -} -/* -************************************************************ -*/ -nfu_status ptwX_countOccurrences( ptwXPoints *ptwX, double value, int *count ) { - - int64_t i1; - - *count = 0; - for( i1 = 0; i1 < ptwX->length; i1++ ) { - if( ptwX->points[i1] == value ) (*count)++; - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_reverse( ptwXPoints *ptwX ) { - - int64_t i1, i2 = ptwX->length - 1, n1 = ptwX->length / 2; - double tmp; - - for( i1 = 0; i1 < n1; i1++, i2-- ) { - tmp = ptwX->points[i1]; - ptwX->points[i1] = ptwX->points[i2]; - ptwX->points[i2] = tmp; - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_sort( ptwXPoints *ptwX, enum ptwX_sort_order order ) { - - int (*cmp)( void const *, void const * ) = ptwX_sort_descending; - - if( order == ptwX_sort_order_ascending ) cmp = ptwX_sort_ascending; - qsort( ptwX->points, (size_t) ptwX->length, sizeof( ptwX->points[0] ), cmp ); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -static int ptwX_sort_descending( void const *p1, void const *p2 ) { return( -ptwX_sort_ascending( p1, p2 ) ); } -static int ptwX_sort_ascending( void const *p1, void const *p2 ) { - - double *d1 = (double *) p1, *d2 = (double *) p2; - - if( *d1 < *d2 ) return( -1 ); - if( *d1 == *d2 ) return( 0 ); - return( 1 ); -} -/* -************************************************************ -*/ -nfu_status ptwX_closesDifference( ptwXPoints *ptwX, double value, int64_t *index, double *difference ) { - - return( ptwX_closesDifferenceInRange( ptwX, 0, ptwX->length, value, index, difference ) ); -} -/* -************************************************************ -*/ -nfu_status ptwX_closesDifferenceInRange( ptwXPoints *ptwX, int64_t i1, int64_t i2, double value, int64_t *index, double *difference ) { -/* -* Finds the closes datum to value. If *difference is zero, datum is same as value. -*/ - double d1; - - *index = -1; - *difference = -1; - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - if( i1 < 0 ) i1 = 0; - if( i2 > ptwX->length ) i2 = ptwX->length; - if( i1 >= i2 ) return( nfu_Okay ); - *index = i1; - *difference = value - ptwX->points[i1]; - for( i1++; i1 < i2; i1++ ) { - d1 = value - ptwX->points[i1]; - if( std::fabs( *difference ) > std::fabs( d1 ) ) { - *index = i1; - *difference = d1; - } - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -ptwXPoints *ptwX_unique( ptwXPoints *ptwX, int order, nfu_status *status ) { -/* -* If order < 0 order is descending, if order > 0 order is ascending, otherwise, order is the same as ptwX. -*/ - int64_t i1, i2, n1 = 0; - double x1, *p2; - ptwXPoints *ptwX2 = NULL; - - if( order == 0 ) { - if( ( ptwX2 = ptwX_new( ptwX->length, status ) ) == NULL ) return( NULL ); - for( i1 = 0; i1 < ptwX->length; i1++ ) { - x1 = ptwX->points[i1]; - for( i2 = 0, p2 = ptwX2->points; i2 < ptwX2->length; i2++, p2++ ) { - if( *p2 == x1 ) break; - } - if( i2 == ptwX2->length ) { - ptwX2->points[ptwX2->length] = x1; - ptwX2->length++; - } - } } - else { - if( ( ptwX2 = ptwX_clone( ptwX, status ) ) == NULL ) return( NULL ); - if( ( *status = ptwX_sort( ptwX2, ptwX_sort_order_ascending ) ) != nfu_Okay ) goto err; - - if( ptwX2->length > 1 ) { - x1 = ptwX2->points[n1]; - n1++; - for( i1 = 1; i1 < ptwX2->length; i1++ ) { - if( x1 != ptwX2->points[i1] ) { - x1 = ptwX2->points[i1]; - ptwX2->points[n1] = x1; - n1++; - } - } - ptwX2->length = n1; - if( order < 0 ) { - if( ( *status = ptwX_sort( ptwX2, ptwX_sort_order_descending ) ) != nfu_Okay ) goto err; - } - } - } - return( ptwX2 ); - -err: - if( ptwX2 != NULL ) ptwX_free( ptwX2 ); - return( NULL ); -} -/* -************************************************************ -*/ -nfu_status ptwX_abs( ptwXPoints *ptwX ) { - - int64_t i1; - double *p1; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - for( i1 = 0, p1 = ptwX->points; i1 < ptwX->length; i1++, p1++ ) *p1 = std::fabs( *p1 ); - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_neg( ptwXPoints *ptwX ) { - - return( ptwX_slopeOffset( ptwX, -1, 0 ) ); -} -/* -************************************************************ -*/ -nfu_status ptwX_add_double( ptwXPoints *ptwX, double value ) { - - return( ptwX_slopeOffset( ptwX, 1, value ) ); -} -/* -************************************************************ -*/ -nfu_status ptwX_mul_double( ptwXPoints *ptwX, double value ) { - - return( ptwX_slopeOffset( ptwX, value, 0 ) ); -} -/* -************************************************************ -*/ -nfu_status ptwX_slopeOffset( ptwXPoints *ptwX, double slope, double offset ) { - - int64_t i1; - double *p1; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - for( i1 = 0, p1 = ptwX->points; i1 < ptwX->length; i1++, p1++ ) *p1 = slope * *p1 + offset; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_add_ptwX( ptwXPoints *ptwX1, ptwXPoints *ptwX2 ) { - - int64_t i1; - double *p1 = ptwX1->points, *p2 = ptwX2->points; - - if( ptwX1->status != nfu_Okay ) return( ptwX1->status ); - if( ptwX2->status != nfu_Okay ) return( ptwX2->status ); - if( ptwX1->length != ptwX2->length ) return( nfu_domainsNotMutual ); - - for( i1 = 0; i1 < ptwX1->length; i1++, p1++, p2++ ) *p1 += *p2; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_sub_ptwX( ptwXPoints *ptwX1, ptwXPoints *ptwX2 ) { - - int64_t i1; - double *p1 = ptwX1->points, *p2 = ptwX2->points; - - if( ptwX1->status != nfu_Okay ) return( ptwX1->status ); - if( ptwX2->status != nfu_Okay ) return( ptwX2->status ); - if( ptwX1->length != ptwX2->length ) return( nfu_domainsNotMutual ); - - for( i1 = 0; i1 < ptwX1->length; i1++, p1++, p2++ ) *p1 -= *p2; - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_xMinMax( ptwXPoints *ptwX, double *xMin, double *xMax ) { - - int64_t i1, n1 = ptwX->length; - *xMin = *xMax = 0; - double *p1 = ptwX->points; - - if( ptwX->status != nfu_Okay ) return( ptwX->status ); - if( n1 > 0 ) { - *xMin = *xMax = *(p1++); - for( i1 = 1; i1 < n1; ++i1, ++p1 ) { - if( *p1 < *xMin ) *xMin = *p1; - if( *p1 > *xMax ) *xMax = *p1; - } - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -nfu_status ptwX_compare( ptwXPoints *ptwX1, ptwXPoints *ptwX2, int *comparison ) { - - int64_t i1, n1 = ptwX1->length, n2 = ptwX2->length, nn = n1; - double *p1 = ptwX1->points, *p2 = ptwX2->points; - - *comparison = 0; - if( ptwX1->status != nfu_Okay ) return( ptwX1->status ); - if( ptwX2->status != nfu_Okay ) return( ptwX2->status ); - if( nn > n2 ) nn = n2; - for( i1 = 0; i1 < nn; i1++, p1++, p2++ ) { - if( *p1 == *p2 ) continue; - *comparison = 1; - if( *p1 < *p2 ) *comparison = -1; - return( nfu_Okay ); - } - if( n1 < n2 ) { - *comparison = -1; } - else if( n1 > n2 ) { - *comparison = 1; - } - return( nfu_Okay ); -} -/* -************************************************************ -*/ -int ptwX_close( ptwXPoints *ptwX1, ptwXPoints *ptwX2, int epsilonFactor, double epsilon, nfu_status *status ) { - - int64_t i1, n1 = ptwX1->length; - double larger; - double *p1 = ptwX1->points, *p2 = ptwX2->points; - - epsilon = std::fabs( epsilon ) + std::abs( epsilonFactor ) * DBL_EPSILON; - - *status = ptwX1->status; - if( ptwX1->status != nfu_Okay ) return( -1 ); - *status = ptwX2->status; - if( ptwX2->status != nfu_Okay ) return( -1 ); - *status = nfu_domainsNotMutual; - if( n1 != ptwX2->length ) return( -1 ); - - *status = nfu_Okay; - for( i1 = 0; i1 < n1; i1++, p1++, p2++ ) { - larger = std::fabs( *p1 ); - if( std::fabs( *p2 ) > larger ) larger = std::fabs( *p2 ); - if( std::fabs( *p2 - *p1 ) > epsilon * larger ) return( (int) ( i1 + 1 ) ); - } - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/ptwX_misc.c b/source/processes/hadronic/models/lend/src/ptwX_misc.c new file mode 100644 index 0000000000..ec6145a8d5 --- /dev/null +++ b/source/processes/hadronic/models/lend/src/ptwX_misc.c @@ -0,0 +1,32 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + +#include +#include + +#include "ptwX.h" + +/* +************************************************************ +*/ +nfu_status ptwX_simpleWrite( statusMessageReporting *smr, ptwXPoints const *ptwX, FILE *f, char const *format ) { + + int64_t i1; + double *p1 = ptwX->points; + + for( i1 = 0; i1 < ptwX->length; ++i1, ++p1 ) fprintf( f, format, *p1 ); + return( nfu_Okay ); +} +/* +************************************************************ +*/ +nfu_status ptwX_simplePrint( statusMessageReporting *smr, ptwXPoints const *ptwX, char const *format ) { + + return( ptwX_simpleWrite( smr, ptwX, stdout, format ) ); +} diff --git a/source/processes/hadronic/models/lend/src/ptwX_misc.cc b/source/processes/hadronic/models/lend/src/ptwX_misc.cc deleted file mode 100644 index 97037bbc7c..0000000000 --- a/source/processes/hadronic/models/lend/src/ptwX_misc.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include - -#include "ptwX.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -void ptwX_simpleWrite( ptwXPoints const *ptwX, FILE *f, char const *format ) { - - int64_t i1; - double *p1 = ptwX->points; - - for( i1 = 0; i1 < ptwX->length; ++i1, ++p1 ) fprintf( f, format, *p1 ); -} -/* -************************************************************ -*/ -void ptwX_simplePrint( ptwXPoints const *ptwX, char const *format ) { - - ptwX_simpleWrite( ptwX, stdout, format ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/pugixml.cc b/source/processes/hadronic/models/lend/src/pugixml.cc new file mode 100644 index 0000000000..c63645b67f --- /dev/null +++ b/source/processes/hadronic/models/lend/src/pugixml.cc @@ -0,0 +1,13158 @@ +/** + * pugixml parser - version 1.13 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ + +#ifndef SOURCE_PUGIXML_CPP +#define SOURCE_PUGIXML_CPP + +#include "pugixml.hpp" + +#include +#include +#include +#include +#include + +#ifdef PUGIXML_WCHAR_MODE +# include +#endif + +#ifndef PUGIXML_NO_XPATH +# include +# include +#endif + +#ifndef PUGIXML_NO_STL +# include +# include +# include +#endif + +// For placement new +#include + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4127) // conditional expression is constant +# pragma warning(disable: 4324) // structure was padded due to __declspec(align()) +# pragma warning(disable: 4702) // unreachable code +# pragma warning(disable: 4996) // this function or variable may be unsafe +#endif + +#if defined(_MSC_VER) && defined(__c2__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated" // this function or variable may be unsafe +#endif + +#ifdef __INTEL_COMPILER +# pragma warning(disable: 177) // function was declared but never referenced +# pragma warning(disable: 279) // controlling expression is constant +# pragma warning(disable: 1478 1786) // function was declared "deprecated" +# pragma warning(disable: 1684) // conversion from pointer to same-sized integral type +#endif + +#if defined(__BORLANDC__) && defined(PUGIXML_HEADER_ONLY) +# pragma warn -8080 // symbol is declared but never used; disabling this inside push/pop bracket does not make the warning go away +#endif + +#ifdef __BORLANDC__ +# pragma option push +# pragma warn -8008 // condition is always false +# pragma warn -8066 // unreachable code +#endif + +#ifdef __SNC__ +// Using diag_push/diag_pop does not disable the warnings inside templates due to a compiler bug +# pragma diag_suppress=178 // function was declared but never referenced +# pragma diag_suppress=237 // controlling expression is constant +#endif + +#ifdef __TI_COMPILER_VERSION__ +# pragma diag_suppress 179 // function was declared but never referenced +#endif + +// Inlining controls +#if defined(_MSC_VER) && _MSC_VER >= 1300 +# define PUGI__NO_INLINE __declspec(noinline) +#elif defined(__GNUC__) +# define PUGI__NO_INLINE __attribute__((noinline)) +#else +# define PUGI__NO_INLINE +#endif + +// Branch weight controls +#if defined(__GNUC__) && !defined(__c2__) +# define PUGI__UNLIKELY(cond) __builtin_expect(cond, 0) +#else +# define PUGI__UNLIKELY(cond) (cond) +#endif + +// Simple static assertion +#define PUGI__STATIC_ASSERT(cond) { static const char condition_failed[(cond) ? 1 : -1] = {0}; (void)condition_failed[0]; } + +// Digital Mars C++ bug workaround for passing char loaded from memory via stack +#ifdef __DMC__ +# define PUGI__DMC_VOLATILE volatile +#else +# define PUGI__DMC_VOLATILE +#endif + +// Integer sanitizer workaround; we only apply this for clang since gcc8 has no_sanitize but not unsigned-integer-overflow and produces "attribute directive ignored" warnings +#if defined(__clang__) && defined(__has_attribute) +# if __has_attribute(no_sanitize) +# define PUGI__UNSIGNED_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow"))) +# else +# define PUGI__UNSIGNED_OVERFLOW +# endif +#else +# define PUGI__UNSIGNED_OVERFLOW +#endif + +// Borland C++ bug workaround for not defining ::memcpy depending on header include order (can't always use std::memcpy because some compilers don't have it at all) +#if defined(__BORLANDC__) && !defined(__MEM_H_USING_LIST) +using std::memcpy; +using std::memmove; +using std::memset; +#endif + +// Some MinGW/GCC versions have headers that erroneously omit LLONG_MIN/LLONG_MAX/ULLONG_MAX definitions from limits.h in some configurations +#if defined(PUGIXML_HAS_LONG_LONG) && defined(__GNUC__) && !defined(LLONG_MAX) && !defined(LLONG_MIN) && !defined(ULLONG_MAX) +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define LLONG_MAX __LONG_LONG_MAX__ +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +#endif + +// In some environments MSVC is a compiler but the CRT lacks certain MSVC-specific features +#if defined(_MSC_VER) && !defined(__S3E__) && !defined(_WIN32_WCE) +# define PUGI__MSVC_CRT_VERSION _MSC_VER +#elif defined(_WIN32_WCE) +# define PUGI__MSVC_CRT_VERSION 1310 // MSVC7.1 +#endif + +// Not all platforms have snprintf; we define a wrapper that uses snprintf if possible. This only works with buffers with a known size. +#if __cplusplus >= 201103 +# define PUGI__SNPRINTF(buf, ...) snprintf(buf, sizeof(buf), __VA_ARGS__) +#elif defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 +# define PUGI__SNPRINTF(buf, ...) _snprintf_s(buf, _countof(buf), _TRUNCATE, __VA_ARGS__) +#else +# define PUGI__SNPRINTF sprintf +#endif + +// We put implementation details into an anonymous namespace in source mode, but have to keep it in non-anonymous namespace in header-only mode to prevent binary bloat. +#ifdef PUGIXML_HEADER_ONLY +# define PUGI__NS_BEGIN namespace pugi { namespace impl { +# define PUGI__NS_END } } +# define PUGI__FN inline +# define PUGI__FN_NO_INLINE inline +#else +# if defined(_MSC_VER) && _MSC_VER < 1300 // MSVC6 seems to have an amusing bug with anonymous namespaces inside namespaces +# define PUGI__NS_BEGIN namespace pugi { namespace impl { +# define PUGI__NS_END } } +# else +# define PUGI__NS_BEGIN namespace pugi { namespace impl { namespace { +# define PUGI__NS_END } } } +# endif +# define PUGI__FN +# define PUGI__FN_NO_INLINE PUGI__NO_INLINE +#endif + +// uintptr_t +#if (defined(_MSC_VER) && _MSC_VER < 1600) || (defined(__BORLANDC__) && __BORLANDC__ < 0x561) +namespace pugi +{ +# ifndef _UINTPTR_T_DEFINED + typedef size_t uintptr_t; +# endif + + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +} +#else +# include +#endif + +// Memory allocation +PUGI__NS_BEGIN + PUGI__FN void* default_allocate(size_t size) + { + return malloc(size); + } + + PUGI__FN void default_deallocate(void* ptr) + { + free(ptr); + } + + template + struct xml_memory_management_function_storage + { + static allocation_function allocate; + static deallocation_function deallocate; + }; + + // Global allocation functions are stored in class statics so that in header mode linker deduplicates them + // Without a template<> we'll get multiple definitions of the same static + template allocation_function xml_memory_management_function_storage::allocate = default_allocate; + template deallocation_function xml_memory_management_function_storage::deallocate = default_deallocate; + + typedef xml_memory_management_function_storage xml_memory; +PUGI__NS_END + +// String utilities +PUGI__NS_BEGIN + // Get string length + PUGI__FN size_t strlength(const char_t* s) + { + assert(s); + + #ifdef PUGIXML_WCHAR_MODE + return wcslen(s); + #else + return strlen(s); + #endif + } + + // Compare two strings + PUGI__FN bool strequal(const char_t* src, const char_t* dst) + { + assert(src && dst); + + #ifdef PUGIXML_WCHAR_MODE + return wcscmp(src, dst) == 0; + #else + return strcmp(src, dst) == 0; + #endif + } + + // Compare lhs with [rhs_begin, rhs_end) + PUGI__FN bool strequalrange(const char_t* lhs, const char_t* rhs, size_t count) + { + for (size_t i = 0; i < count; ++i) + if (lhs[i] != rhs[i]) + return false; + + return lhs[count] == 0; + } + + // Get length of wide string, even if CRT lacks wide character support + PUGI__FN size_t strlength_wide(const wchar_t* s) + { + assert(s); + + #ifdef PUGIXML_WCHAR_MODE + return wcslen(s); + #else + const wchar_t* end = s; + while (*end) end++; + return static_cast(end - s); + #endif + } +PUGI__NS_END + +// auto_ptr-like object for exception recovery +PUGI__NS_BEGIN + template struct auto_deleter + { + typedef void (*D)(T*); + + T* data; + D deleter; + + auto_deleter(T* data_, D deleter_): data(data_), deleter(deleter_) + { + } + + ~auto_deleter() + { + if (data) deleter(data); + } + + T* release() + { + T* result = data; + data = 0; + return result; + } + }; +PUGI__NS_END + +#ifdef PUGIXML_COMPACT +PUGI__NS_BEGIN + class compact_hash_table + { + public: + compact_hash_table(): _items(0), _capacity(0), _count(0) + { + } + + void clear() + { + if (_items) + { + xml_memory::deallocate(_items); + _items = 0; + _capacity = 0; + _count = 0; + } + } + + void* find(const void* key) + { + if (_capacity == 0) return 0; + + item_t* item = get_item(key); + assert(item); + assert(item->key == key || (item->key == 0 && item->value == 0)); + + return item->value; + } + + void insert(const void* key, void* value) + { + assert(_capacity != 0 && _count < _capacity - _capacity / 4); + + item_t* item = get_item(key); + assert(item); + + if (item->key == 0) + { + _count++; + item->key = key; + } + + item->value = value; + } + + bool reserve(size_t extra = 16) + { + if (_count + extra >= _capacity - _capacity / 4) + return rehash(_count + extra); + + return true; + } + + private: + struct item_t + { + const void* key; + void* value; + }; + + item_t* _items; + size_t _capacity; + + size_t _count; + + bool rehash(size_t count); + + item_t* get_item(const void* key) + { + assert(key); + assert(_capacity > 0); + + size_t hashmod = _capacity - 1; + size_t bucket = hash(key) & hashmod; + + for (size_t probe = 0; probe <= hashmod; ++probe) + { + item_t& probe_item = _items[bucket]; + + if (probe_item.key == key || probe_item.key == 0) + return &probe_item; + + // hash collision, quadratic probing + bucket = (bucket + probe + 1) & hashmod; + } + + assert(false && "Hash table is full"); // unreachable + return 0; + } + + static PUGI__UNSIGNED_OVERFLOW unsigned int hash(const void* key) + { + unsigned int h = static_cast(reinterpret_cast(key) & 0xffffffff); + + // MurmurHash3 32-bit finalizer + h ^= h >> 16; + h *= 0x85ebca6bu; + h ^= h >> 13; + h *= 0xc2b2ae35u; + h ^= h >> 16; + + return h; + } + }; + + PUGI__FN_NO_INLINE bool compact_hash_table::rehash(size_t count) + { + size_t capacity = 32; + while (count >= capacity - capacity / 4) + capacity *= 2; + + compact_hash_table rt; + rt._capacity = capacity; + rt._items = static_cast(xml_memory::allocate(sizeof(item_t) * capacity)); + + if (!rt._items) + return false; + + memset(rt._items, 0, sizeof(item_t) * capacity); + + for (size_t i = 0; i < _capacity; ++i) + if (_items[i].key) + rt.insert(_items[i].key, _items[i].value); + + if (_items) + xml_memory::deallocate(_items); + + _capacity = capacity; + _items = rt._items; + + assert(_count == rt._count); + + return true; + } + +PUGI__NS_END +#endif + +PUGI__NS_BEGIN +#ifdef PUGIXML_COMPACT + static const uintptr_t xml_memory_block_alignment = 4; +#else + static const uintptr_t xml_memory_block_alignment = sizeof(void*); +#endif + + // extra metadata bits + static const uintptr_t xml_memory_page_contents_shared_mask = 64; + static const uintptr_t xml_memory_page_name_allocated_mask = 32; + static const uintptr_t xml_memory_page_value_allocated_mask = 16; + static const uintptr_t xml_memory_page_type_mask = 15; + + // combined masks for string uniqueness + static const uintptr_t xml_memory_page_name_allocated_or_shared_mask = xml_memory_page_name_allocated_mask | xml_memory_page_contents_shared_mask; + static const uintptr_t xml_memory_page_value_allocated_or_shared_mask = xml_memory_page_value_allocated_mask | xml_memory_page_contents_shared_mask; + +#ifdef PUGIXML_COMPACT + #define PUGI__GETHEADER_IMPL(object, page, flags) // unused + #define PUGI__GETPAGE_IMPL(header) (header).get_page() +#else + #define PUGI__GETHEADER_IMPL(object, page, flags) (((reinterpret_cast(object) - reinterpret_cast(page)) << 8) | (flags)) + // this macro casts pointers through void* to avoid 'cast increases required alignment of target type' warnings + #define PUGI__GETPAGE_IMPL(header) static_cast(const_cast(static_cast(reinterpret_cast(&header) - (header >> 8)))) +#endif + + #define PUGI__GETPAGE(n) PUGI__GETPAGE_IMPL((n)->header) + #define PUGI__NODETYPE(n) static_cast((n)->header & impl::xml_memory_page_type_mask) + + struct xml_allocator; + + struct xml_memory_page + { + static xml_memory_page* construct(void* memory) + { + xml_memory_page* result = static_cast(memory); + + result->allocator = 0; + result->prev = 0; + result->next = 0; + result->busy_size = 0; + result->freed_size = 0; + + #ifdef PUGIXML_COMPACT + result->compact_string_base = 0; + result->compact_shared_parent = 0; + result->compact_page_marker = 0; + #endif + + return result; + } + + xml_allocator* allocator; + + xml_memory_page* prev; + xml_memory_page* next; + + size_t busy_size; + size_t freed_size; + + #ifdef PUGIXML_COMPACT + char_t* compact_string_base; + void* compact_shared_parent; + uint32_t* compact_page_marker; + #endif + }; + + static const size_t xml_memory_page_size = + #ifdef PUGIXML_MEMORY_PAGE_SIZE + (PUGIXML_MEMORY_PAGE_SIZE) + #else + 32768 + #endif + - sizeof(xml_memory_page); + + struct xml_memory_string_header + { + uint16_t page_offset; // offset from page->data + uint16_t full_size; // 0 if string occupies whole page + }; + + struct xml_allocator + { + xml_allocator(xml_memory_page* root): _root(root), _busy_size(root->busy_size) + { + #ifdef PUGIXML_COMPACT + _hash = 0; + #endif + } + + xml_memory_page* allocate_page(size_t data_size) + { + size_t size = sizeof(xml_memory_page) + data_size; + + // allocate block with some alignment, leaving memory for worst-case padding + void* memory = xml_memory::allocate(size); + if (!memory) return 0; + + // prepare page structure + xml_memory_page* page = xml_memory_page::construct(memory); + assert(page); + + assert(this == _root->allocator); + page->allocator = this; + + return page; + } + + static void deallocate_page(xml_memory_page* page) + { + xml_memory::deallocate(page); + } + + void* allocate_memory_oob(size_t size, xml_memory_page*& out_page); + + void* allocate_memory(size_t size, xml_memory_page*& out_page) + { + if (PUGI__UNLIKELY(_busy_size + size > xml_memory_page_size)) + return allocate_memory_oob(size, out_page); + + void* buf = reinterpret_cast(_root) + sizeof(xml_memory_page) + _busy_size; + + _busy_size += size; + + out_page = _root; + + return buf; + } + + #ifdef PUGIXML_COMPACT + void* allocate_object(size_t size, xml_memory_page*& out_page) + { + void* result = allocate_memory(size + sizeof(uint32_t), out_page); + if (!result) return 0; + + // adjust for marker + ptrdiff_t offset = static_cast(result) - reinterpret_cast(out_page->compact_page_marker); + + if (PUGI__UNLIKELY(static_cast(offset) >= 256 * xml_memory_block_alignment)) + { + // insert new marker + uint32_t* marker = static_cast(result); + + *marker = static_cast(reinterpret_cast(marker) - reinterpret_cast(out_page)); + out_page->compact_page_marker = marker; + + // since we don't reuse the page space until we reallocate it, we can just pretend that we freed the marker block + // this will make sure deallocate_memory correctly tracks the size + out_page->freed_size += sizeof(uint32_t); + + return marker + 1; + } + else + { + // roll back uint32_t part + _busy_size -= sizeof(uint32_t); + + return result; + } + } + #else + void* allocate_object(size_t size, xml_memory_page*& out_page) + { + return allocate_memory(size, out_page); + } + #endif + + void deallocate_memory(void* ptr, size_t size, xml_memory_page* page) + { + if (page == _root) page->busy_size = _busy_size; + + assert(ptr >= reinterpret_cast(page) + sizeof(xml_memory_page) && ptr < reinterpret_cast(page) + sizeof(xml_memory_page) + page->busy_size); + (void)!ptr; + + page->freed_size += size; + assert(page->freed_size <= page->busy_size); + + if (page->freed_size == page->busy_size) + { + if (page->next == 0) + { + assert(_root == page); + + // top page freed, just reset sizes + page->busy_size = 0; + page->freed_size = 0; + + #ifdef PUGIXML_COMPACT + // reset compact state to maximize efficiency + page->compact_string_base = 0; + page->compact_shared_parent = 0; + page->compact_page_marker = 0; + #endif + + _busy_size = 0; + } + else + { + assert(_root != page); + assert(page->prev); + + // remove from the list + page->prev->next = page->next; + page->next->prev = page->prev; + + // deallocate + deallocate_page(page); + } + } + } + + char_t* allocate_string(size_t length) + { + static const size_t max_encoded_offset = (1 << 16) * xml_memory_block_alignment; + + PUGI__STATIC_ASSERT(xml_memory_page_size <= max_encoded_offset); + + // allocate memory for string and header block + size_t size = sizeof(xml_memory_string_header) + length * sizeof(char_t); + + // round size up to block alignment boundary + size_t full_size = (size + (xml_memory_block_alignment - 1)) & ~(xml_memory_block_alignment - 1); + + xml_memory_page* page; + xml_memory_string_header* header = static_cast(allocate_memory(full_size, page)); + + if (!header) return 0; + + // setup header + ptrdiff_t page_offset = reinterpret_cast(header) - reinterpret_cast(page) - sizeof(xml_memory_page); + + assert(page_offset % xml_memory_block_alignment == 0); + assert(page_offset >= 0 && static_cast(page_offset) < max_encoded_offset); + header->page_offset = static_cast(static_cast(page_offset) / xml_memory_block_alignment); + + // full_size == 0 for large strings that occupy the whole page + assert(full_size % xml_memory_block_alignment == 0); + assert(full_size < max_encoded_offset || (page->busy_size == full_size && page_offset == 0)); + header->full_size = static_cast(full_size < max_encoded_offset ? full_size / xml_memory_block_alignment : 0); + + // round-trip through void* to avoid 'cast increases required alignment of target type' warning + // header is guaranteed a pointer-sized alignment, which should be enough for char_t + return static_cast(static_cast(header + 1)); + } + + void deallocate_string(char_t* string) + { + // this function casts pointers through void* to avoid 'cast increases required alignment of target type' warnings + // we're guaranteed the proper (pointer-sized) alignment on the input string if it was allocated via allocate_string + + // get header + xml_memory_string_header* header = static_cast(static_cast(string)) - 1; + assert(header); + + // deallocate + size_t page_offset = sizeof(xml_memory_page) + header->page_offset * xml_memory_block_alignment; + xml_memory_page* page = reinterpret_cast(static_cast(reinterpret_cast(header) - page_offset)); + + // if full_size == 0 then this string occupies the whole page + size_t full_size = header->full_size == 0 ? page->busy_size : header->full_size * xml_memory_block_alignment; + + deallocate_memory(header, full_size, page); + } + + bool reserve() + { + #ifdef PUGIXML_COMPACT + return _hash->reserve(); + #else + return true; + #endif + } + + xml_memory_page* _root; + size_t _busy_size; + + #ifdef PUGIXML_COMPACT + compact_hash_table* _hash; + #endif + }; + + PUGI__FN_NO_INLINE void* xml_allocator::allocate_memory_oob(size_t size, xml_memory_page*& out_page) + { + const size_t large_allocation_threshold = xml_memory_page_size / 4; + + xml_memory_page* page = allocate_page(size <= large_allocation_threshold ? xml_memory_page_size : size); + out_page = page; + + if (!page) return 0; + + if (size <= large_allocation_threshold) + { + _root->busy_size = _busy_size; + + // insert page at the end of linked list + page->prev = _root; + _root->next = page; + _root = page; + + _busy_size = size; + } + else + { + // insert page before the end of linked list, so that it is deleted as soon as possible + // the last page is not deleted even if it's empty (see deallocate_memory) + assert(_root->prev); + + page->prev = _root->prev; + page->next = _root; + + _root->prev->next = page; + _root->prev = page; + + page->busy_size = size; + } + + return reinterpret_cast(page) + sizeof(xml_memory_page); + } +PUGI__NS_END + +#ifdef PUGIXML_COMPACT +PUGI__NS_BEGIN + static const uintptr_t compact_alignment_log2 = 2; + static const uintptr_t compact_alignment = 1 << compact_alignment_log2; + + class compact_header + { + public: + compact_header(xml_memory_page* page, unsigned int flags) + { + PUGI__STATIC_ASSERT(xml_memory_block_alignment == compact_alignment); + + ptrdiff_t offset = (reinterpret_cast(this) - reinterpret_cast(page->compact_page_marker)); + assert(offset % compact_alignment == 0 && static_cast(offset) < 256 * compact_alignment); + + _page = static_cast(offset >> compact_alignment_log2); + _flags = static_cast(flags); + } + + void operator&=(uintptr_t mod) + { + _flags &= static_cast(mod); + } + + void operator|=(uintptr_t mod) + { + _flags |= static_cast(mod); + } + + uintptr_t operator&(uintptr_t mod) const + { + return _flags & mod; + } + + xml_memory_page* get_page() const + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + const char* page_marker = reinterpret_cast(this) - (_page << compact_alignment_log2); + const char* page = page_marker - *reinterpret_cast(static_cast(page_marker)); + + return const_cast(reinterpret_cast(static_cast(page))); + } + + private: + unsigned char _page; + unsigned char _flags; + }; + + PUGI__FN xml_memory_page* compact_get_page(const void* object, int header_offset) + { + const compact_header* header = reinterpret_cast(static_cast(object) - header_offset); + + return header->get_page(); + } + + template PUGI__FN_NO_INLINE T* compact_get_value(const void* object) + { + return static_cast(compact_get_page(object, header_offset)->allocator->_hash->find(object)); + } + + template PUGI__FN_NO_INLINE void compact_set_value(const void* object, T* value) + { + compact_get_page(object, header_offset)->allocator->_hash->insert(object, value); + } + + template class compact_pointer + { + public: + compact_pointer(): _data(0) + { + } + + void operator=(const compact_pointer& rhs) + { + *this = rhs + 0; + } + + void operator=(T* value) + { + if (value) + { + // value is guaranteed to be compact-aligned; 'this' is not + // our decoding is based on 'this' aligned to compact alignment downwards (see operator T*) + // so for negative offsets (e.g. -3) we need to adjust the diff by compact_alignment - 1 to + // compensate for arithmetic shift rounding for negative values + ptrdiff_t diff = reinterpret_cast(value) - reinterpret_cast(this); + ptrdiff_t offset = ((diff + int(compact_alignment - 1)) >> compact_alignment_log2) - start; + + if (static_cast(offset) <= 253) + _data = static_cast(offset + 1); + else + { + compact_set_value(this, value); + + _data = 255; + } + } + else + _data = 0; + } + + operator T*() const + { + if (_data) + { + if (_data < 255) + { + uintptr_t base = reinterpret_cast(this) & ~(compact_alignment - 1); + + return reinterpret_cast(base + (_data - 1 + start) * compact_alignment); + } + else + return compact_get_value(this); + } + else + return 0; + } + + T* operator->() const + { + return *this; + } + + private: + unsigned char _data; + }; + + template class compact_pointer_parent + { + public: + compact_pointer_parent(): _data(0) + { + } + + void operator=(const compact_pointer_parent& rhs) + { + *this = rhs + 0; + } + + void operator=(T* value) + { + if (value) + { + // value is guaranteed to be compact-aligned; 'this' is not + // our decoding is based on 'this' aligned to compact alignment downwards (see operator T*) + // so for negative offsets (e.g. -3) we need to adjust the diff by compact_alignment - 1 to + // compensate for arithmetic shift behavior for negative values + ptrdiff_t diff = reinterpret_cast(value) - reinterpret_cast(this); + ptrdiff_t offset = ((diff + int(compact_alignment - 1)) >> compact_alignment_log2) + 65533; + + if (static_cast(offset) <= 65533) + { + _data = static_cast(offset + 1); + } + else + { + xml_memory_page* page = compact_get_page(this, header_offset); + + if (PUGI__UNLIKELY(page->compact_shared_parent == 0)) + page->compact_shared_parent = value; + + if (page->compact_shared_parent == value) + { + _data = 65534; + } + else + { + compact_set_value(this, value); + + _data = 65535; + } + } + } + else + { + _data = 0; + } + } + + operator T*() const + { + if (_data) + { + if (_data < 65534) + { + uintptr_t base = reinterpret_cast(this) & ~(compact_alignment - 1); + + return reinterpret_cast(base + (_data - 1 - 65533) * compact_alignment); + } + else if (_data == 65534) + return static_cast(compact_get_page(this, header_offset)->compact_shared_parent); + else + return compact_get_value(this); + } + else + return 0; + } + + T* operator->() const + { + return *this; + } + + private: + uint16_t _data; + }; + + template class compact_string + { + public: + compact_string(): _data(0) + { + } + + void operator=(const compact_string& rhs) + { + *this = rhs + 0; + } + + void operator=(char_t* value) + { + if (value) + { + xml_memory_page* page = compact_get_page(this, header_offset); + + if (PUGI__UNLIKELY(page->compact_string_base == 0)) + page->compact_string_base = value; + + ptrdiff_t offset = value - page->compact_string_base; + + if (static_cast(offset) < (65535 << 7)) + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + uint16_t* base = reinterpret_cast(static_cast(reinterpret_cast(this) - base_offset)); + + if (*base == 0) + { + *base = static_cast((offset >> 7) + 1); + _data = static_cast((offset & 127) + 1); + } + else + { + ptrdiff_t remainder = offset - ((*base - 1) << 7); + + if (static_cast(remainder) <= 253) + { + _data = static_cast(remainder + 1); + } + else + { + compact_set_value(this, value); + + _data = 255; + } + } + } + else + { + compact_set_value(this, value); + + _data = 255; + } + } + else + { + _data = 0; + } + } + + operator char_t*() const + { + if (_data) + { + if (_data < 255) + { + xml_memory_page* page = compact_get_page(this, header_offset); + + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + const uint16_t* base = reinterpret_cast(static_cast(reinterpret_cast(this) - base_offset)); + assert(*base); + + ptrdiff_t offset = ((*base - 1) << 7) + (_data - 1); + + return page->compact_string_base + offset; + } + else + { + return compact_get_value(this); + } + } + else + return 0; + } + + private: + unsigned char _data; + }; +PUGI__NS_END +#endif + +#ifdef PUGIXML_COMPACT +namespace pugi +{ + struct xml_attribute_struct + { + xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), namevalue_base(0) + { + PUGI__STATIC_ASSERT(sizeof(xml_attribute_struct) == 8); + } + + impl::compact_header header; + + uint16_t namevalue_base; + + impl::compact_string<4, 2> name; + impl::compact_string<5, 3> value; + + impl::compact_pointer prev_attribute_c; + impl::compact_pointer next_attribute; + }; + + struct xml_node_struct + { + xml_node_struct(impl::xml_memory_page* page, xml_node_type type): header(page, type), namevalue_base(0) + { + PUGI__STATIC_ASSERT(sizeof(xml_node_struct) == 12); + } + + impl::compact_header header; + + uint16_t namevalue_base; + + impl::compact_string<4, 2> name; + impl::compact_string<5, 3> value; + + impl::compact_pointer_parent parent; + + impl::compact_pointer first_child; + + impl::compact_pointer prev_sibling_c; + impl::compact_pointer next_sibling; + + impl::compact_pointer first_attribute; + }; +} +#else +namespace pugi +{ + struct xml_attribute_struct + { + xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0), prev_attribute_c(0), next_attribute(0) + { + header = PUGI__GETHEADER_IMPL(this, page, 0); + } + + uintptr_t header; + + char_t* name; + char_t* value; + + xml_attribute_struct* prev_attribute_c; + xml_attribute_struct* next_attribute; + }; + + struct xml_node_struct + { + xml_node_struct(impl::xml_memory_page* page, xml_node_type type): name(0), value(0), parent(0), first_child(0), prev_sibling_c(0), next_sibling(0), first_attribute(0) + { + header = PUGI__GETHEADER_IMPL(this, page, type); + } + + uintptr_t header; + + char_t* name; + char_t* value; + + xml_node_struct* parent; + + xml_node_struct* first_child; + + xml_node_struct* prev_sibling_c; + xml_node_struct* next_sibling; + + xml_attribute_struct* first_attribute; + }; +} +#endif + +PUGI__NS_BEGIN + struct xml_extra_buffer + { + char_t* buffer; + xml_extra_buffer* next; + }; + + struct xml_document_struct: public xml_node_struct, public xml_allocator + { + xml_document_struct(xml_memory_page* page): xml_node_struct(page, node_document), xml_allocator(page), buffer(0), extra_buffers(0) + { + } + + const char_t* buffer; + + xml_extra_buffer* extra_buffers; + + #ifdef PUGIXML_COMPACT + compact_hash_table hash; + #endif + }; + + template inline xml_allocator& get_allocator(const Object* object) + { + assert(object); + + return *PUGI__GETPAGE(object)->allocator; + } + + template inline xml_document_struct& get_document(const Object* object) + { + assert(object); + + return *static_cast(PUGI__GETPAGE(object)->allocator); + } +PUGI__NS_END + +// Low-level DOM operations +PUGI__NS_BEGIN + inline xml_attribute_struct* allocate_attribute(xml_allocator& alloc) + { + xml_memory_page* page; + void* memory = alloc.allocate_object(sizeof(xml_attribute_struct), page); + if (!memory) return 0; + + return new (memory) xml_attribute_struct(page); + } + + inline xml_node_struct* allocate_node(xml_allocator& alloc, xml_node_type type) + { + xml_memory_page* page; + void* memory = alloc.allocate_object(sizeof(xml_node_struct), page); + if (!memory) return 0; + + return new (memory) xml_node_struct(page, type); + } + + inline void destroy_attribute(xml_attribute_struct* a, xml_allocator& alloc) + { + if (a->header & impl::xml_memory_page_name_allocated_mask) + alloc.deallocate_string(a->name); + + if (a->header & impl::xml_memory_page_value_allocated_mask) + alloc.deallocate_string(a->value); + + alloc.deallocate_memory(a, sizeof(xml_attribute_struct), PUGI__GETPAGE(a)); + } + + inline void destroy_node(xml_node_struct* n, xml_allocator& alloc) + { + if (n->header & impl::xml_memory_page_name_allocated_mask) + alloc.deallocate_string(n->name); + + if (n->header & impl::xml_memory_page_value_allocated_mask) + alloc.deallocate_string(n->value); + + for (xml_attribute_struct* attr = n->first_attribute; attr; ) + { + xml_attribute_struct* next = attr->next_attribute; + + destroy_attribute(attr, alloc); + + attr = next; + } + + for (xml_node_struct* child = n->first_child; child; ) + { + xml_node_struct* next = child->next_sibling; + + destroy_node(child, alloc); + + child = next; + } + + alloc.deallocate_memory(n, sizeof(xml_node_struct), PUGI__GETPAGE(n)); + } + + inline void append_node(xml_node_struct* child, xml_node_struct* node) + { + child->parent = node; + + xml_node_struct* head = node->first_child; + + if (head) + { + xml_node_struct* tail = head->prev_sibling_c; + + tail->next_sibling = child; + child->prev_sibling_c = tail; + head->prev_sibling_c = child; + } + else + { + node->first_child = child; + child->prev_sibling_c = child; + } + } + + inline void prepend_node(xml_node_struct* child, xml_node_struct* node) + { + child->parent = node; + + xml_node_struct* head = node->first_child; + + if (head) + { + child->prev_sibling_c = head->prev_sibling_c; + head->prev_sibling_c = child; + } + else + child->prev_sibling_c = child; + + child->next_sibling = head; + node->first_child = child; + } + + inline void insert_node_after(xml_node_struct* child, xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + child->parent = parent; + + xml_node_struct* next = node->next_sibling; + + if (next) + next->prev_sibling_c = child; + else + parent->first_child->prev_sibling_c = child; + + child->next_sibling = next; + child->prev_sibling_c = node; + + node->next_sibling = child; + } + + inline void insert_node_before(xml_node_struct* child, xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + child->parent = parent; + + xml_node_struct* prev = node->prev_sibling_c; + + if (prev->next_sibling) + prev->next_sibling = child; + else + parent->first_child = child; + + child->prev_sibling_c = prev; + child->next_sibling = node; + + node->prev_sibling_c = child; + } + + inline void remove_node(xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + xml_node_struct* next = node->next_sibling; + xml_node_struct* prev = node->prev_sibling_c; + + if (next) + next->prev_sibling_c = prev; + else + parent->first_child->prev_sibling_c = prev; + + if (prev->next_sibling) + prev->next_sibling = next; + else + parent->first_child = next; + + node->parent = 0; + node->prev_sibling_c = 0; + node->next_sibling = 0; + } + + inline void append_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + xml_attribute_struct* head = node->first_attribute; + + if (head) + { + xml_attribute_struct* tail = head->prev_attribute_c; + + tail->next_attribute = attr; + attr->prev_attribute_c = tail; + head->prev_attribute_c = attr; + } + else + { + node->first_attribute = attr; + attr->prev_attribute_c = attr; + } + } + + inline void prepend_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + xml_attribute_struct* head = node->first_attribute; + + if (head) + { + attr->prev_attribute_c = head->prev_attribute_c; + head->prev_attribute_c = attr; + } + else + attr->prev_attribute_c = attr; + + attr->next_attribute = head; + node->first_attribute = attr; + } + + inline void insert_attribute_after(xml_attribute_struct* attr, xml_attribute_struct* place, xml_node_struct* node) + { + xml_attribute_struct* next = place->next_attribute; + + if (next) + next->prev_attribute_c = attr; + else + node->first_attribute->prev_attribute_c = attr; + + attr->next_attribute = next; + attr->prev_attribute_c = place; + place->next_attribute = attr; + } + + inline void insert_attribute_before(xml_attribute_struct* attr, xml_attribute_struct* place, xml_node_struct* node) + { + xml_attribute_struct* prev = place->prev_attribute_c; + + if (prev->next_attribute) + prev->next_attribute = attr; + else + node->first_attribute = attr; + + attr->prev_attribute_c = prev; + attr->next_attribute = place; + place->prev_attribute_c = attr; + } + + inline void remove_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + xml_attribute_struct* next = attr->next_attribute; + xml_attribute_struct* prev = attr->prev_attribute_c; + + if (next) + next->prev_attribute_c = prev; + else + node->first_attribute->prev_attribute_c = prev; + + if (prev->next_attribute) + prev->next_attribute = next; + else + node->first_attribute = next; + + attr->prev_attribute_c = 0; + attr->next_attribute = 0; + } + + PUGI__FN_NO_INLINE xml_node_struct* append_new_node(xml_node_struct* node, xml_allocator& alloc, xml_node_type type = node_element) + { + if (!alloc.reserve()) return 0; + + xml_node_struct* child = allocate_node(alloc, type); + if (!child) return 0; + + append_node(child, node); + + return child; + } + + PUGI__FN_NO_INLINE xml_attribute_struct* append_new_attribute(xml_node_struct* node, xml_allocator& alloc) + { + if (!alloc.reserve()) return 0; + + xml_attribute_struct* attr = allocate_attribute(alloc); + if (!attr) return 0; + + append_attribute(attr, node); + + return attr; + } +PUGI__NS_END + +// Helper classes for code generation +PUGI__NS_BEGIN + struct opt_false + { + enum { value = 0 }; + }; + + struct opt_true + { + enum { value = 1 }; + }; +PUGI__NS_END + +// Unicode utilities +PUGI__NS_BEGIN + inline uint16_t endian_swap(uint16_t value) + { + return static_cast(((value & 0xff) << 8) | (value >> 8)); + } + + inline uint32_t endian_swap(uint32_t value) + { + return ((value & 0xff) << 24) | ((value & 0xff00) << 8) | ((value & 0xff0000) >> 8) | (value >> 24); + } + + struct utf8_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t ch) + { + // U+0000..U+007F + if (ch < 0x80) return result + 1; + // U+0080..U+07FF + else if (ch < 0x800) return result + 2; + // U+0800..U+FFFF + else return result + 3; + } + + static value_type high(value_type result, uint32_t) + { + // U+10000..U+10FFFF + return result + 4; + } + }; + + struct utf8_writer + { + typedef uint8_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + // U+0000..U+007F + if (ch < 0x80) + { + *result = static_cast(ch); + return result + 1; + } + // U+0080..U+07FF + else if (ch < 0x800) + { + result[0] = static_cast(0xC0 | (ch >> 6)); + result[1] = static_cast(0x80 | (ch & 0x3F)); + return result + 2; + } + // U+0800..U+FFFF + else + { + result[0] = static_cast(0xE0 | (ch >> 12)); + result[1] = static_cast(0x80 | ((ch >> 6) & 0x3F)); + result[2] = static_cast(0x80 | (ch & 0x3F)); + return result + 3; + } + } + + static value_type high(value_type result, uint32_t ch) + { + // U+10000..U+10FFFF + result[0] = static_cast(0xF0 | (ch >> 18)); + result[1] = static_cast(0x80 | ((ch >> 12) & 0x3F)); + result[2] = static_cast(0x80 | ((ch >> 6) & 0x3F)); + result[3] = static_cast(0x80 | (ch & 0x3F)); + return result + 4; + } + + static value_type any(value_type result, uint32_t ch) + { + return (ch < 0x10000) ? low(result, ch) : high(result, ch); + } + }; + + struct utf16_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t) + { + return result + 1; + } + + static value_type high(value_type result, uint32_t) + { + return result + 2; + } + }; + + struct utf16_writer + { + typedef uint16_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = static_cast(ch); + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + uint32_t msh = static_cast(ch - 0x10000) >> 10; + uint32_t lsh = static_cast(ch - 0x10000) & 0x3ff; + + result[0] = static_cast(0xD800 + msh); + result[1] = static_cast(0xDC00 + lsh); + + return result + 2; + } + + static value_type any(value_type result, uint32_t ch) + { + return (ch < 0x10000) ? low(result, ch) : high(result, ch); + } + }; + + struct utf32_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t) + { + return result + 1; + } + + static value_type high(value_type result, uint32_t) + { + return result + 1; + } + }; + + struct utf32_writer + { + typedef uint32_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + + static value_type any(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + }; + + struct latin1_writer + { + typedef uint8_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = static_cast(ch > 255 ? '?' : ch); + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + (void)ch; + + *result = '?'; + + return result + 1; + } + }; + + struct utf8_decoder + { + typedef uint8_t type; + + template static inline typename Traits::value_type process(const uint8_t* data, size_t size, typename Traits::value_type result, Traits) + { + const uint8_t utf8_byte_mask = 0x3f; + + while (size) + { + uint8_t lead = *data; + + // 0xxxxxxx -> U+0000..U+007F + if (lead < 0x80) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + + // process aligned single-byte (ascii) blocks + if ((reinterpret_cast(data) & 3) == 0) + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + while (size >= 4 && (*static_cast(static_cast(data)) & 0x80808080) == 0) + { + result = Traits::low(result, data[0]); + result = Traits::low(result, data[1]); + result = Traits::low(result, data[2]); + result = Traits::low(result, data[3]); + data += 4; + size -= 4; + } + } + } + // 110xxxxx -> U+0080..U+07FF + else if (static_cast(lead - 0xC0) < 0x20 && size >= 2 && (data[1] & 0xc0) == 0x80) + { + result = Traits::low(result, ((lead & ~0xC0) << 6) | (data[1] & utf8_byte_mask)); + data += 2; + size -= 2; + } + // 1110xxxx -> U+0800-U+FFFF + else if (static_cast(lead - 0xE0) < 0x10 && size >= 3 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80) + { + result = Traits::low(result, ((lead & ~0xE0) << 12) | ((data[1] & utf8_byte_mask) << 6) | (data[2] & utf8_byte_mask)); + data += 3; + size -= 3; + } + // 11110xxx -> U+10000..U+10FFFF + else if (static_cast(lead - 0xF0) < 0x08 && size >= 4 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80 && (data[3] & 0xc0) == 0x80) + { + result = Traits::high(result, ((lead & ~0xF0) << 18) | ((data[1] & utf8_byte_mask) << 12) | ((data[2] & utf8_byte_mask) << 6) | (data[3] & utf8_byte_mask)); + data += 4; + size -= 4; + } + // 10xxxxxx or 11111xxx -> invalid + else + { + data += 1; + size -= 1; + } + } + + return result; + } + }; + + template struct utf16_decoder + { + typedef uint16_t type; + + template static inline typename Traits::value_type process(const uint16_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + uint16_t lead = opt_swap::value ? endian_swap(*data) : *data; + + // U+0000..U+D7FF + if (lead < 0xD800) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // U+E000..U+FFFF + else if (static_cast(lead - 0xE000) < 0x2000) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // surrogate pair lead + else if (static_cast(lead - 0xD800) < 0x400 && size >= 2) + { + uint16_t next = opt_swap::value ? endian_swap(data[1]) : data[1]; + + if (static_cast(next - 0xDC00) < 0x400) + { + result = Traits::high(result, 0x10000 + ((lead & 0x3ff) << 10) + (next & 0x3ff)); + data += 2; + size -= 2; + } + else + { + data += 1; + size -= 1; + } + } + else + { + data += 1; + size -= 1; + } + } + + return result; + } + }; + + template struct utf32_decoder + { + typedef uint32_t type; + + template static inline typename Traits::value_type process(const uint32_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + uint32_t lead = opt_swap::value ? endian_swap(*data) : *data; + + // U+0000..U+FFFF + if (lead < 0x10000) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // U+10000..U+10FFFF + else + { + result = Traits::high(result, lead); + data += 1; + size -= 1; + } + } + + return result; + } + }; + + struct latin1_decoder + { + typedef uint8_t type; + + template static inline typename Traits::value_type process(const uint8_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + result = Traits::low(result, *data); + data += 1; + size -= 1; + } + + return result; + } + }; + + template struct wchar_selector; + + template <> struct wchar_selector<2> + { + typedef uint16_t type; + typedef utf16_counter counter; + typedef utf16_writer writer; + typedef utf16_decoder decoder; + }; + + template <> struct wchar_selector<4> + { + typedef uint32_t type; + typedef utf32_counter counter; + typedef utf32_writer writer; + typedef utf32_decoder decoder; + }; + + typedef wchar_selector::counter wchar_counter; + typedef wchar_selector::writer wchar_writer; + + struct wchar_decoder + { + typedef wchar_t type; + + template static inline typename Traits::value_type process(const wchar_t* data, size_t size, typename Traits::value_type result, Traits traits) + { + typedef wchar_selector::decoder decoder; + + return decoder::process(reinterpret_cast(data), size, result, traits); + } + }; + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN void convert_wchar_endian_swap(wchar_t* result, const wchar_t* data, size_t length) + { + for (size_t i = 0; i < length; ++i) + result[i] = static_cast(endian_swap(static_cast::type>(data[i]))); + } +#endif +PUGI__NS_END + +PUGI__NS_BEGIN + enum chartype_t + { + ct_parse_pcdata = 1, // \0, &, \r, < + ct_parse_attr = 2, // \0, &, \r, ', " + ct_parse_attr_ws = 4, // \0, &, \r, ', ", \n, tab + ct_space = 8, // \r, \n, space, tab + ct_parse_cdata = 16, // \0, ], >, \r + ct_parse_comment = 32, // \0, -, >, \r + ct_symbol = 64, // Any symbol > 127, a-z, A-Z, 0-9, _, :, -, . + ct_start_symbol = 128 // Any symbol > 127, a-z, A-Z, _, : + }; + + static const unsigned char chartype_table[256] = + { + 55, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 63, 0, 0, // 0-15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 + 8, 0, 6, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 96, 64, 0, // 32-47 + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192, 0, 1, 0, 48, 0, // 48-63 + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 64-79 + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 16, 0, 192, // 80-95 + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 96-111 + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 0, 0, 0, // 112-127 + + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 128+ + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192 + }; + + enum chartypex_t + { + ctx_special_pcdata = 1, // Any symbol >= 0 and < 32 (except \t, \r, \n), &, <, > + ctx_special_attr = 2, // Any symbol >= 0 and < 32, &, <, ", ' + ctx_start_symbol = 4, // Any symbol > 127, a-z, A-Z, _ + ctx_digit = 8, // 0-9 + ctx_symbol = 16 // Any symbol > 127, a-z, A-Z, 0-9, _, -, . + }; + + static const unsigned char chartypex_table[256] = + { + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, // 0-15 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 16-31 + 0, 0, 2, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 16, 16, 0, // 32-47 + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 0, 1, 0, // 48-63 + + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 64-79 + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 20, // 80-95 + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 96-111 + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, // 112-127 + + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 128+ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 + }; + +#ifdef PUGIXML_WCHAR_MODE + #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) ((static_cast(c) < 128 ? table[static_cast(c)] : table[128]) & (ct)) +#else + #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) (table[static_cast(c)] & (ct)) +#endif + + #define PUGI__IS_CHARTYPE(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartype_table) + #define PUGI__IS_CHARTYPEX(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartypex_table) + + PUGI__FN bool is_little_endian() + { + unsigned int ui = 1; + + return *reinterpret_cast(&ui) == 1; + } + + PUGI__FN xml_encoding get_wchar_encoding() + { + PUGI__STATIC_ASSERT(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4); + + if (sizeof(wchar_t) == 2) + return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + else + return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + } + + PUGI__FN bool parse_declaration_encoding(const uint8_t* data, size_t size, const uint8_t*& out_encoding, size_t& out_length) + { + #define PUGI__SCANCHAR(ch) { if (offset >= size || data[offset] != ch) return false; offset++; } + #define PUGI__SCANCHARTYPE(ct) { while (offset < size && PUGI__IS_CHARTYPE(data[offset], ct)) offset++; } + + // check if we have a non-empty XML declaration + if (size < 6 || !((data[0] == '<') & (data[1] == '?') & (data[2] == 'x') & (data[3] == 'm') & (data[4] == 'l') && PUGI__IS_CHARTYPE(data[5], ct_space))) + return false; + + // scan XML declaration until the encoding field + for (size_t i = 6; i + 1 < size; ++i) + { + // declaration can not contain ? in quoted values + if (data[i] == '?') + return false; + + if (data[i] == 'e' && data[i + 1] == 'n') + { + size_t offset = i; + + // encoding follows the version field which can't contain 'en' so this has to be the encoding if XML is well formed + PUGI__SCANCHAR('e'); PUGI__SCANCHAR('n'); PUGI__SCANCHAR('c'); PUGI__SCANCHAR('o'); + PUGI__SCANCHAR('d'); PUGI__SCANCHAR('i'); PUGI__SCANCHAR('n'); PUGI__SCANCHAR('g'); + + // S? = S? + PUGI__SCANCHARTYPE(ct_space); + PUGI__SCANCHAR('='); + PUGI__SCANCHARTYPE(ct_space); + + // the only two valid delimiters are ' and " + uint8_t delimiter = (offset < size && data[offset] == '"') ? '"' : '\''; + + PUGI__SCANCHAR(delimiter); + + size_t start = offset; + + out_encoding = data + offset; + + PUGI__SCANCHARTYPE(ct_symbol); + + out_length = offset - start; + + PUGI__SCANCHAR(delimiter); + + return true; + } + } + + return false; + + #undef PUGI__SCANCHAR + #undef PUGI__SCANCHARTYPE + } + + PUGI__FN xml_encoding guess_buffer_encoding(const uint8_t* data, size_t size) + { + // skip encoding autodetection if input buffer is too small + if (size < 4) return encoding_utf8; + + uint8_t d0 = data[0], d1 = data[1], d2 = data[2], d3 = data[3]; + + // look for BOM in first few bytes + if (d0 == 0 && d1 == 0 && d2 == 0xfe && d3 == 0xff) return encoding_utf32_be; + if (d0 == 0xff && d1 == 0xfe && d2 == 0 && d3 == 0) return encoding_utf32_le; + if (d0 == 0xfe && d1 == 0xff) return encoding_utf16_be; + if (d0 == 0xff && d1 == 0xfe) return encoding_utf16_le; + if (d0 == 0xef && d1 == 0xbb && d2 == 0xbf) return encoding_utf8; + + // look for <, (contents); + + return guess_buffer_encoding(data, size); + } + + PUGI__FN bool get_mutable_buffer(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + size_t length = size / sizeof(char_t); + + if (is_mutable) + { + out_buffer = static_cast(const_cast(contents)); + out_length = length; + } + else + { + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + if (contents) + memcpy(buffer, contents, length * sizeof(char_t)); + else + assert(length == 0); + + buffer[length] = 0; + + out_buffer = buffer; + out_length = length + 1; + } + + return true; + } + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN bool need_endian_swap_utf(xml_encoding le, xml_encoding re) + { + return (le == encoding_utf16_be && re == encoding_utf16_le) || (le == encoding_utf16_le && re == encoding_utf16_be) || + (le == encoding_utf32_be && re == encoding_utf32_le) || (le == encoding_utf32_le && re == encoding_utf32_be); + } + + PUGI__FN bool convert_buffer_endian_swap(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + const char_t* data = static_cast(contents); + size_t length = size / sizeof(char_t); + + if (is_mutable) + { + char_t* buffer = const_cast(data); + + convert_wchar_endian_swap(buffer, data, length); + + out_buffer = buffer; + out_length = length; + } + else + { + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + convert_wchar_endian_swap(buffer, data, length); + buffer[length] = 0; + + out_buffer = buffer; + out_length = length + 1; + } + + return true; + } + + template PUGI__FN bool convert_buffer_generic(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, D) + { + const typename D::type* data = static_cast(contents); + size_t data_length = size / sizeof(typename D::type); + + // first pass: get length in wchar_t units + size_t length = D::process(data, data_length, 0, wchar_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert utf16 input to wchar_t + wchar_writer::value_type obegin = reinterpret_cast(buffer); + wchar_writer::value_type oend = D::process(data, data_length, obegin, wchar_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) + { + // get native encoding + xml_encoding wchar_encoding = get_wchar_encoding(); + + // fast path: no conversion required + if (encoding == wchar_encoding) + return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // only endian-swapping is required + if (need_endian_swap_utf(encoding, wchar_encoding)) + return convert_buffer_endian_swap(out_buffer, out_length, contents, size, is_mutable); + + // source encoding is utf8 + if (encoding == encoding_utf8) + return convert_buffer_generic(out_buffer, out_length, contents, size, utf8_decoder()); + + // source encoding is utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()); + } + + // source encoding is utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()); + } + + // source encoding is latin1 + if (encoding == encoding_latin1) + return convert_buffer_generic(out_buffer, out_length, contents, size, latin1_decoder()); + + assert(false && "Invalid encoding"); // unreachable + return false; + } +#else + template PUGI__FN bool convert_buffer_generic(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, D) + { + const typename D::type* data = static_cast(contents); + size_t data_length = size / sizeof(typename D::type); + + // first pass: get length in utf8 units + size_t length = D::process(data, data_length, 0, utf8_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert utf16 input to utf8 + uint8_t* obegin = reinterpret_cast(buffer); + uint8_t* oend = D::process(data, data_length, obegin, utf8_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN size_t get_latin1_7bit_prefix_length(const uint8_t* data, size_t size) + { + for (size_t i = 0; i < size; ++i) + if (data[i] > 127) + return i; + + return size; + } + + PUGI__FN bool convert_buffer_latin1(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + const uint8_t* data = static_cast(contents); + size_t data_length = size; + + // get size of prefix that does not need utf8 conversion + size_t prefix_length = get_latin1_7bit_prefix_length(data, data_length); + assert(prefix_length <= data_length); + + const uint8_t* postfix = data + prefix_length; + size_t postfix_length = data_length - prefix_length; + + // if no conversion is needed, just return the original buffer + if (postfix_length == 0) return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // first pass: get length in utf8 units + size_t length = prefix_length + latin1_decoder::process(postfix, postfix_length, 0, utf8_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert latin1 input to utf8 + memcpy(buffer, data, prefix_length); + + uint8_t* obegin = reinterpret_cast(buffer); + uint8_t* oend = latin1_decoder::process(postfix, postfix_length, obegin + prefix_length, utf8_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) + { + // fast path: no conversion required + if (encoding == encoding_utf8) + return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // source encoding is utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()); + } + + // source encoding is utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()); + } + + // source encoding is latin1 + if (encoding == encoding_latin1) + return convert_buffer_latin1(out_buffer, out_length, contents, size, is_mutable); + + assert(false && "Invalid encoding"); // unreachable + return false; + } +#endif + + PUGI__FN size_t as_utf8_begin(const wchar_t* str, size_t length) + { + // get length in utf8 characters + return wchar_decoder::process(str, length, 0, utf8_counter()); + } + + PUGI__FN void as_utf8_end(char* buffer, size_t size, const wchar_t* str, size_t length) + { + // convert to utf8 + uint8_t* begin = reinterpret_cast(buffer); + uint8_t* end = wchar_decoder::process(str, length, begin, utf8_writer()); + + assert(begin + size == end); + (void)!end; + (void)!size; + } + +#ifndef PUGIXML_NO_STL + PUGI__FN std::string as_utf8_impl(const wchar_t* str, size_t length) + { + // first pass: get length in utf8 characters + size_t size = as_utf8_begin(str, length); + + // allocate resulting string + std::string result; + result.resize(size); + + // second pass: convert to utf8 + if (size > 0) as_utf8_end(&result[0], size, str, length); + + return result; + } + + PUGI__FN std::basic_string as_wide_impl(const char* str, size_t size) + { + const uint8_t* data = reinterpret_cast(str); + + // first pass: get length in wchar_t units + size_t length = utf8_decoder::process(data, size, 0, wchar_counter()); + + // allocate resulting string + std::basic_string result; + result.resize(length); + + // second pass: convert to wchar_t + if (length > 0) + { + wchar_writer::value_type begin = reinterpret_cast(&result[0]); + wchar_writer::value_type end = utf8_decoder::process(data, size, begin, wchar_writer()); + + assert(begin + length == end); + (void)!end; + } + + return result; + } +#endif + + template + inline bool strcpy_insitu_allow(size_t length, const Header& header, uintptr_t header_mask, char_t* target) + { + // never reuse shared memory + if (header & xml_memory_page_contents_shared_mask) return false; + + size_t target_length = strlength(target); + + // always reuse document buffer memory if possible + if ((header & header_mask) == 0) return target_length >= length; + + // reuse heap memory if waste is not too great + const size_t reuse_threshold = 32; + + return target_length >= length && (target_length < reuse_threshold || target_length - length < target_length / 2); + } + + template + PUGI__FN bool strcpy_insitu(String& dest, Header& header, uintptr_t header_mask, const char_t* source, size_t source_length) + { + if (source_length == 0) + { + // empty string and null pointer are equivalent, so just deallocate old memory + xml_allocator* alloc = PUGI__GETPAGE_IMPL(header)->allocator; + + if (header & header_mask) alloc->deallocate_string(dest); + + // mark the string as not allocated + dest = 0; + header &= ~header_mask; + + return true; + } + else if (dest && strcpy_insitu_allow(source_length, header, header_mask, dest)) + { + // we can reuse old buffer, so just copy the new data (including zero terminator) + memcpy(dest, source, source_length * sizeof(char_t)); + dest[source_length] = 0; + + return true; + } + else + { + xml_allocator* alloc = PUGI__GETPAGE_IMPL(header)->allocator; + + if (!alloc->reserve()) return false; + + // allocate new buffer + char_t* buf = alloc->allocate_string(source_length + 1); + if (!buf) return false; + + // copy the string (including zero terminator) + memcpy(buf, source, source_length * sizeof(char_t)); + buf[source_length] = 0; + + // deallocate old buffer (*after* the above to protect against overlapping memory and/or allocation failures) + if (header & header_mask) alloc->deallocate_string(dest); + + // the string is now allocated, so set the flag + dest = buf; + header |= header_mask; + + return true; + } + } + + struct gap + { + char_t* end; + size_t size; + + gap(): end(0), size(0) + { + } + + // Push new gap, move s count bytes further (skipping the gap). + // Collapse previous gap. + void push(char_t*& s, size_t count) + { + if (end) // there was a gap already; collapse it + { + // Move [old_gap_end, new_gap_start) to [old_gap_start, ...) + assert(s >= end); + memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); + } + + s += count; // end of current gap + + // "merge" two gaps + end = s; + size += count; + } + + // Collapse all gaps, return past-the-end pointer + char_t* flush(char_t* s) + { + if (end) + { + // Move [old_gap_end, current_pos) to [old_gap_start, ...) + assert(s >= end); + memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); + + return s - size; + } + else return s; + } + }; + + PUGI__FN char_t* strconv_escape(char_t* s, gap& g) + { + char_t* stre = s + 1; + + switch (*stre) + { + case '#': // &#... + { + unsigned int ucsc = 0; + + if (stre[1] == 'x') // &#x... (hex code) + { + stre += 2; + + char_t ch = *stre; + + if (ch == ';') return stre; + + for (;;) + { + if (static_cast(ch - '0') <= 9) + ucsc = 16 * ucsc + (ch - '0'); + else if (static_cast((ch | ' ') - 'a') <= 5) + ucsc = 16 * ucsc + ((ch | ' ') - 'a' + 10); + else if (ch == ';') + break; + else // cancel + return stre; + + ch = *++stre; + } + + ++stre; + } + else // &#... (dec code) + { + char_t ch = *++stre; + + if (ch == ';') return stre; + + for (;;) + { + if (static_cast(ch - '0') <= 9) + ucsc = 10 * ucsc + (ch - '0'); + else if (ch == ';') + break; + else // cancel + return stre; + + ch = *++stre; + } + + ++stre; + } + + #ifdef PUGIXML_WCHAR_MODE + s = reinterpret_cast(wchar_writer::any(reinterpret_cast(s), ucsc)); + #else + s = reinterpret_cast(utf8_writer::any(reinterpret_cast(s), ucsc)); + #endif + + g.push(s, stre - s); + return stre; + } + + case 'a': // &a + { + ++stre; + + if (*stre == 'm') // &am + { + if (*++stre == 'p' && *++stre == ';') // & + { + *s++ = '&'; + ++stre; + + g.push(s, stre - s); + return stre; + } + } + else if (*stre == 'p') // &ap + { + if (*++stre == 'o' && *++stre == 's' && *++stre == ';') // ' + { + *s++ = '\''; + ++stre; + + g.push(s, stre - s); + return stre; + } + } + break; + } + + case 'g': // &g + { + if (*++stre == 't' && *++stre == ';') // > + { + *s++ = '>'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + case 'l': // &l + { + if (*++stre == 't' && *++stre == ';') // < + { + *s++ = '<'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + case 'q': // &q + { + if (*++stre == 'u' && *++stre == 'o' && *++stre == 't' && *++stre == ';') // " + { + *s++ = '"'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + default: + break; + } + + return stre; + } + + // Parser utilities + #define PUGI__ENDSWITH(c, e) ((c) == (e) || ((c) == 0 && endch == (e))) + #define PUGI__SKIPWS() { while (PUGI__IS_CHARTYPE(*s, ct_space)) ++s; } + #define PUGI__OPTSET(OPT) ( optmsk & (OPT) ) + #define PUGI__PUSHNODE(TYPE) { cursor = append_new_node(cursor, *alloc, TYPE); if (!cursor) PUGI__THROW_ERROR(status_out_of_memory, s); } + #define PUGI__POPNODE() { cursor = cursor->parent; } + #define PUGI__SCANFOR(X) { while (*s != 0 && !(X)) ++s; } + #define PUGI__SCANWHILE(X) { while (X) ++s; } + #define PUGI__SCANWHILE_UNROLL(X) { for (;;) { char_t ss = s[0]; if (PUGI__UNLIKELY(!(X))) { break; } ss = s[1]; if (PUGI__UNLIKELY(!(X))) { s += 1; break; } ss = s[2]; if (PUGI__UNLIKELY(!(X))) { s += 2; break; } ss = s[3]; if (PUGI__UNLIKELY(!(X))) { s += 3; break; } s += 4; } } + #define PUGI__ENDSEG() { ch = *s; *s = 0; ++s; } + #define PUGI__THROW_ERROR(err, m) return error_offset = m, error_status = err, static_cast(0) + #define PUGI__CHECK_ERROR(err, m) { if (*s == 0) PUGI__THROW_ERROR(err, m); } + + PUGI__FN char_t* strconv_comment(char_t* s, char_t endch) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_comment)); + + if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (s[0] == '-' && s[1] == '-' && PUGI__ENDSWITH(s[2], '>')) // comment ends here + { + *g.flush(s) = 0; + + return s + (s[2] == '>' ? 3 : 2); + } + else if (*s == 0) + { + return 0; + } + else ++s; + } + } + + PUGI__FN char_t* strconv_cdata(char_t* s, char_t endch) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_cdata)); + + if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')) // CDATA ends here + { + *g.flush(s) = 0; + + return s + 1; + } + else if (*s == 0) + { + return 0; + } + else ++s; + } + } + + typedef char_t* (*strconv_pcdata_t)(char_t*); + + template struct strconv_pcdata_impl + { + static char_t* parse(char_t* s) + { + gap g; + + char_t* begin = s; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_pcdata)); + + if (*s == '<') // PCDATA ends here + { + char_t* end = g.flush(s); + + if (opt_trim::value) + while (end > begin && PUGI__IS_CHARTYPE(end[-1], ct_space)) + --end; + + *end = 0; + + return s + 1; + } + else if (opt_eol::value && *s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (*s == 0) + { + char_t* end = g.flush(s); + + if (opt_trim::value) + while (end > begin && PUGI__IS_CHARTYPE(end[-1], ct_space)) + --end; + + *end = 0; + + return s; + } + else ++s; + } + } + }; + + PUGI__FN strconv_pcdata_t get_strconv_pcdata(unsigned int optmask) + { + PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_trim_pcdata == 0x0800); + + switch (((optmask >> 4) & 3) | ((optmask >> 9) & 4)) // get bitmask for flags (trim eol escapes); this simultaneously checks 3 options from assertion above + { + case 0: return strconv_pcdata_impl::parse; + case 1: return strconv_pcdata_impl::parse; + case 2: return strconv_pcdata_impl::parse; + case 3: return strconv_pcdata_impl::parse; + case 4: return strconv_pcdata_impl::parse; + case 5: return strconv_pcdata_impl::parse; + case 6: return strconv_pcdata_impl::parse; + case 7: return strconv_pcdata_impl::parse; + default: assert(false); return 0; // unreachable + } + } + + typedef char_t* (*strconv_attribute_t)(char_t*, char_t); + + template struct strconv_attribute_impl + { + static char_t* parse_wnorm(char_t* s, char_t end_quote) + { + gap g; + + // trim leading whitespaces + if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + char_t* str = s; + + do ++str; + while (PUGI__IS_CHARTYPE(*str, ct_space)); + + g.push(s, str - s); + } + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr_ws | ct_space)); + + if (*s == end_quote) + { + char_t* str = g.flush(s); + + do *str-- = 0; + while (PUGI__IS_CHARTYPE(*str, ct_space)); + + return s + 1; + } + else if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + *s++ = ' '; + + if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + char_t* str = s + 1; + while (PUGI__IS_CHARTYPE(*str, ct_space)) ++str; + + g.push(s, str - s); + } + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_wconv(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr_ws)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + if (*s == '\r') + { + *s++ = ' '; + + if (*s == '\n') g.push(s, 1); + } + else *s++ = ' '; + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_eol(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (*s == '\r') + { + *s++ = '\n'; + + if (*s == '\n') g.push(s, 1); + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_simple(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + }; + + PUGI__FN strconv_attribute_t get_strconv_attribute(unsigned int optmask) + { + PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_wconv_attribute == 0x40 && parse_wnorm_attribute == 0x80); + + switch ((optmask >> 4) & 15) // get bitmask for flags (wnorm wconv eol escapes); this simultaneously checks 4 options from assertion above + { + case 0: return strconv_attribute_impl::parse_simple; + case 1: return strconv_attribute_impl::parse_simple; + case 2: return strconv_attribute_impl::parse_eol; + case 3: return strconv_attribute_impl::parse_eol; + case 4: return strconv_attribute_impl::parse_wconv; + case 5: return strconv_attribute_impl::parse_wconv; + case 6: return strconv_attribute_impl::parse_wconv; + case 7: return strconv_attribute_impl::parse_wconv; + case 8: return strconv_attribute_impl::parse_wnorm; + case 9: return strconv_attribute_impl::parse_wnorm; + case 10: return strconv_attribute_impl::parse_wnorm; + case 11: return strconv_attribute_impl::parse_wnorm; + case 12: return strconv_attribute_impl::parse_wnorm; + case 13: return strconv_attribute_impl::parse_wnorm; + case 14: return strconv_attribute_impl::parse_wnorm; + case 15: return strconv_attribute_impl::parse_wnorm; + default: assert(false); return 0; // unreachable + } + } + + inline xml_parse_result make_parse_result(xml_parse_status status, ptrdiff_t offset = 0) + { + xml_parse_result result; + result.status = status; + result.offset = offset; + + return result; + } + + struct xml_parser + { + xml_allocator* alloc; + char_t* error_offset; + xml_parse_status error_status; + + xml_parser(xml_allocator* alloc_): alloc(alloc_), error_offset(0), error_status(status_ok) + { + } + + // DOCTYPE consists of nested sections of the following possible types: + // , , "...", '...' + // + // + // First group can not contain nested groups + // Second group can contain nested groups of the same type + // Third group can contain all other groups + char_t* parse_doctype_primitive(char_t* s) + { + if (*s == '"' || *s == '\'') + { + // quoted string + char_t ch = *s++; + PUGI__SCANFOR(*s == ch); + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s++; + } + else if (s[0] == '<' && s[1] == '?') + { + // + s += 2; + PUGI__SCANFOR(s[0] == '?' && s[1] == '>'); // no need for ENDSWITH because ?> can't terminate proper doctype + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s += 2; + } + else if (s[0] == '<' && s[1] == '!' && s[2] == '-' && s[3] == '-') + { + s += 4; + PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && s[2] == '>'); // no need for ENDSWITH because --> can't terminate proper doctype + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s += 3; + } + else PUGI__THROW_ERROR(status_bad_doctype, s); + + return s; + } + + char_t* parse_doctype_ignore(char_t* s) + { + size_t depth = 0; + + assert(s[0] == '<' && s[1] == '!' && s[2] == '['); + s += 3; + + while (*s) + { + if (s[0] == '<' && s[1] == '!' && s[2] == '[') + { + // nested ignore section + s += 3; + depth++; + } + else if (s[0] == ']' && s[1] == ']' && s[2] == '>') + { + // ignore section end + s += 3; + + if (depth == 0) + return s; + + depth--; + } + else s++; + } + + PUGI__THROW_ERROR(status_bad_doctype, s); + } + + char_t* parse_doctype_group(char_t* s, char_t endch) + { + size_t depth = 0; + + assert((s[0] == '<' || s[0] == 0) && s[1] == '!'); + s += 2; + + while (*s) + { + if (s[0] == '<' && s[1] == '!' && s[2] != '-') + { + if (s[2] == '[') + { + // ignore + s = parse_doctype_ignore(s); + if (!s) return s; + } + else + { + // some control group + s += 2; + depth++; + } + } + else if (s[0] == '<' || s[0] == '"' || s[0] == '\'') + { + // unknown tag (forbidden), or some primitive group + s = parse_doctype_primitive(s); + if (!s) return s; + } + else if (*s == '>') + { + if (depth == 0) + return s; + + depth--; + s++; + } + else s++; + } + + if (depth != 0 || endch != '>') PUGI__THROW_ERROR(status_bad_doctype, s); + + return s; + } + + char_t* parse_exclamation(char_t* s, xml_node_struct* cursor, unsigned int optmsk, char_t endch) + { + // parse node contents, starting with exclamation mark + ++s; + + if (*s == '-') // 'value = s; // Save the offset. + } + + if (PUGI__OPTSET(parse_eol) && PUGI__OPTSET(parse_comments)) + { + s = strconv_comment(s, endch); + + if (!s) PUGI__THROW_ERROR(status_bad_comment, cursor->value); + } + else + { + // Scan for terminating '-->'. + PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_comment, s); + + if (PUGI__OPTSET(parse_comments)) + *s = 0; // Zero-terminate this segment at the first terminating '-'. + + s += (s[2] == '>' ? 3 : 2); // Step over the '\0->'. + } + } + else PUGI__THROW_ERROR(status_bad_comment, s); + } + else if (*s == '[') + { + // 'value = s; // Save the offset. + + if (PUGI__OPTSET(parse_eol)) + { + s = strconv_cdata(s, endch); + + if (!s) PUGI__THROW_ERROR(status_bad_cdata, cursor->value); + } + else + { + // Scan for terminating ']]>'. + PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_cdata, s); + + *s++ = 0; // Zero-terminate this segment. + } + } + else // Flagged for discard, but we still have to scan for the terminator. + { + // Scan for terminating ']]>'. + PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_cdata, s); + + ++s; + } + + s += (s[1] == '>' ? 2 : 1); // Step over the last ']>'. + } + else PUGI__THROW_ERROR(status_bad_cdata, s); + } + else if (s[0] == 'D' && s[1] == 'O' && s[2] == 'C' && s[3] == 'T' && s[4] == 'Y' && s[5] == 'P' && PUGI__ENDSWITH(s[6], 'E')) + { + s -= 2; + + if (cursor->parent) PUGI__THROW_ERROR(status_bad_doctype, s); + + char_t* mark = s + 9; + + s = parse_doctype_group(s, endch); + if (!s) return s; + + assert((*s == 0 && endch == '>') || *s == '>'); + if (*s) *s++ = 0; + + if (PUGI__OPTSET(parse_doctype)) + { + while (PUGI__IS_CHARTYPE(*mark, ct_space)) ++mark; + + PUGI__PUSHNODE(node_doctype); + + cursor->value = mark; + } + } + else if (*s == 0 && endch == '-') PUGI__THROW_ERROR(status_bad_comment, s); + else if (*s == 0 && endch == '[') PUGI__THROW_ERROR(status_bad_cdata, s); + else PUGI__THROW_ERROR(status_unrecognized_tag, s); + + return s; + } + + char_t* parse_question(char_t* s, xml_node_struct*& ref_cursor, unsigned int optmsk, char_t endch) + { + // load into registers + xml_node_struct* cursor = ref_cursor; + char_t ch = 0; + + // parse node contents, starting with question mark + ++s; + + // read PI target + char_t* target = s; + + if (!PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_pi, s); + + PUGI__SCANWHILE(PUGI__IS_CHARTYPE(*s, ct_symbol)); + PUGI__CHECK_ERROR(status_bad_pi, s); + + // determine node type; stricmp / strcasecmp is not portable + bool declaration = (target[0] | ' ') == 'x' && (target[1] | ' ') == 'm' && (target[2] | ' ') == 'l' && target + 3 == s; + + if (declaration ? PUGI__OPTSET(parse_declaration) : PUGI__OPTSET(parse_pi)) + { + if (declaration) + { + // disallow non top-level declarations + if (cursor->parent) PUGI__THROW_ERROR(status_bad_pi, s); + + PUGI__PUSHNODE(node_declaration); + } + else + { + PUGI__PUSHNODE(node_pi); + } + + cursor->name = target; + + PUGI__ENDSEG(); + + // parse value/attributes + if (ch == '?') + { + // empty node + if (!PUGI__ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_pi, s); + s += (*s == '>'); + + PUGI__POPNODE(); + } + else if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + PUGI__SKIPWS(); + + // scan for tag end + char_t* value = s; + + PUGI__SCANFOR(s[0] == '?' && PUGI__ENDSWITH(s[1], '>')); + PUGI__CHECK_ERROR(status_bad_pi, s); + + if (declaration) + { + // replace ending ? with / so that 'element' terminates properly + *s = '/'; + + // we exit from this function with cursor at node_declaration, which is a signal to parse() to go to LOC_ATTRIBUTES + s = value; + } + else + { + // store value and step over > + cursor->value = value; + + PUGI__POPNODE(); + + PUGI__ENDSEG(); + + s += (*s == '>'); + } + } + else PUGI__THROW_ERROR(status_bad_pi, s); + } + else + { + // scan for tag end + PUGI__SCANFOR(s[0] == '?' && PUGI__ENDSWITH(s[1], '>')); + PUGI__CHECK_ERROR(status_bad_pi, s); + + s += (s[1] == '>' ? 2 : 1); + } + + // store from registers + ref_cursor = cursor; + + return s; + } + + char_t* parse_tree(char_t* s, xml_node_struct* root, unsigned int optmsk, char_t endch) + { + strconv_attribute_t strconv_attribute = get_strconv_attribute(optmsk); + strconv_pcdata_t strconv_pcdata = get_strconv_pcdata(optmsk); + + char_t ch = 0; + xml_node_struct* cursor = root; + char_t* mark = s; + + while (*s != 0) + { + if (*s == '<') + { + ++s; + + LOC_TAG: + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // '<#...' + { + PUGI__PUSHNODE(node_element); // Append a new node to the tree. + + cursor->name = s; + + PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator. + PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. + + if (ch == '>') + { + // end of tag + } + else if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + LOC_ATTRIBUTES: + while (true) + { + PUGI__SKIPWS(); // Eat any whitespace. + + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // <... #... + { + xml_attribute_struct* a = append_new_attribute(cursor, *alloc); // Make space for this attribute. + if (!a) PUGI__THROW_ERROR(status_out_of_memory, s); + + a->name = s; // Save the offset. + + PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator. + PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. + + if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + PUGI__SKIPWS(); // Eat any whitespace. + + ch = *s; + ++s; + } + + if (ch == '=') // '<... #=...' + { + PUGI__SKIPWS(); // Eat any whitespace. + + if (*s == '"' || *s == '\'') // '<... #="...' + { + ch = *s; // Save quote char to avoid breaking on "''" -or- '""'. + ++s; // Step over the quote. + a->value = s; // Save the offset. + + s = strconv_attribute(s, ch); + + if (!s) PUGI__THROW_ERROR(status_bad_attribute, a->value); + + // After this line the loop continues from the start; + // Whitespaces, / and > are ok, symbols and EOF are wrong, + // everything else will be detected + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_attribute, s); + } + else PUGI__THROW_ERROR(status_bad_attribute, s); + } + else PUGI__THROW_ERROR(status_bad_attribute, s); + } + else if (*s == '/') + { + ++s; + + if (*s == '>') + { + PUGI__POPNODE(); + s++; + break; + } + else if (*s == 0 && endch == '>') + { + PUGI__POPNODE(); + break; + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + else if (*s == '>') + { + ++s; + + break; + } + else if (*s == 0 && endch == '>') + { + break; + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + + // !!! + } + else if (ch == '/') // '<#.../' + { + if (!PUGI__ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_start_element, s); + + PUGI__POPNODE(); // Pop. + + s += (*s == '>'); + } + else if (ch == 0) + { + // we stepped over null terminator, backtrack & handle closing tag + --s; + + if (endch != '>') PUGI__THROW_ERROR(status_bad_start_element, s); + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + else if (*s == '/') + { + ++s; + + mark = s; + + char_t* name = cursor->name; + if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, mark); + + while (PUGI__IS_CHARTYPE(*s, ct_symbol)) + { + if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, mark); + } + + if (*name) + { + if (*s == 0 && name[0] == endch && name[1] == 0) PUGI__THROW_ERROR(status_bad_end_element, s); + else PUGI__THROW_ERROR(status_end_element_mismatch, mark); + } + + PUGI__POPNODE(); // Pop. + + PUGI__SKIPWS(); + + if (*s == 0) + { + if (endch != '>') PUGI__THROW_ERROR(status_bad_end_element, s); + } + else + { + if (*s != '>') PUGI__THROW_ERROR(status_bad_end_element, s); + ++s; + } + } + else if (*s == '?') // 'first_child) continue; + } + } + + if (!PUGI__OPTSET(parse_trim_pcdata)) + s = mark; + + if (cursor->parent || PUGI__OPTSET(parse_fragment)) + { + if (PUGI__OPTSET(parse_embed_pcdata) && cursor->parent && !cursor->first_child && !cursor->value) + { + cursor->value = s; // Save the offset. + } + else + { + PUGI__PUSHNODE(node_pcdata); // Append a new node on the tree. + + cursor->value = s; // Save the offset. + + PUGI__POPNODE(); // Pop since this is a standalone. + } + + s = strconv_pcdata(s); + + if (!*s) break; + } + else + { + PUGI__SCANFOR(*s == '<'); // '...<' + if (!*s) break; + + ++s; + } + + // We're after '<' + goto LOC_TAG; + } + } + + // check that last tag is closed + if (cursor != root) PUGI__THROW_ERROR(status_end_element_mismatch, s); + + return s; + } + + #ifdef PUGIXML_WCHAR_MODE + static char_t* parse_skip_bom(char_t* s) + { + unsigned int bom = 0xfeff; + return (s[0] == static_cast(bom)) ? s + 1 : s; + } + #else + static char_t* parse_skip_bom(char_t* s) + { + return (s[0] == '\xef' && s[1] == '\xbb' && s[2] == '\xbf') ? s + 3 : s; + } + #endif + + static bool has_element_node_siblings(xml_node_struct* node) + { + while (node) + { + if (PUGI__NODETYPE(node) == node_element) return true; + + node = node->next_sibling; + } + + return false; + } + + static xml_parse_result parse(char_t* buffer, size_t length, xml_document_struct* xmldoc, xml_node_struct* root, unsigned int optmsk) + { + // early-out for empty documents + if (length == 0) + return make_parse_result(PUGI__OPTSET(parse_fragment) ? status_ok : status_no_document_element); + + // get last child of the root before parsing + xml_node_struct* last_root_child = root->first_child ? root->first_child->prev_sibling_c + 0 : 0; + + // create parser on stack + xml_parser parser(static_cast(xmldoc)); + + // save last character and make buffer zero-terminated (speeds up parsing) + char_t endch = buffer[length - 1]; + buffer[length - 1] = 0; + + // skip BOM to make sure it does not end up as part of parse output + char_t* buffer_data = parse_skip_bom(buffer); + + // perform actual parsing + parser.parse_tree(buffer_data, root, optmsk, endch); + + xml_parse_result result = make_parse_result(parser.error_status, parser.error_offset ? parser.error_offset - buffer : 0); + assert(result.offset >= 0 && static_cast(result.offset) <= length); + + if (result) + { + // since we removed last character, we have to handle the only possible false positive (stray <) + if (endch == '<') + return make_parse_result(status_unrecognized_tag, length - 1); + + // check if there are any element nodes parsed + xml_node_struct* first_root_child_parsed = last_root_child ? last_root_child->next_sibling + 0 : root->first_child+ 0; + + if (!PUGI__OPTSET(parse_fragment) && !has_element_node_siblings(first_root_child_parsed)) + return make_parse_result(status_no_document_element, length - 1); + } + else + { + // roll back offset if it occurs on a null terminator in the source buffer + if (result.offset > 0 && static_cast(result.offset) == length - 1 && endch == 0) + result.offset--; + } + + return result; + } + }; + + // Output facilities + PUGI__FN xml_encoding get_write_native_encoding() + { + #ifdef PUGIXML_WCHAR_MODE + return get_wchar_encoding(); + #else + return encoding_utf8; + #endif + } + + PUGI__FN xml_encoding get_write_encoding(xml_encoding encoding) + { + // replace wchar encoding with utf implementation + if (encoding == encoding_wchar) return get_wchar_encoding(); + + // replace utf16 encoding with utf16 with specific endianness + if (encoding == encoding_utf16) return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + // replace utf32 encoding with utf32 with specific endianness + if (encoding == encoding_utf32) return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + // only do autodetection if no explicit encoding is requested + if (encoding != encoding_auto) return encoding; + + // assume utf8 encoding + return encoding_utf8; + } + + template PUGI__FN size_t convert_buffer_output_generic(typename T::value_type dest, const char_t* data, size_t length, D, T) + { + PUGI__STATIC_ASSERT(sizeof(char_t) == sizeof(typename D::type)); + + typename T::value_type end = D::process(reinterpret_cast(data), length, dest, T()); + + return static_cast(end - dest) * sizeof(*dest); + } + + template PUGI__FN size_t convert_buffer_output_generic(typename T::value_type dest, const char_t* data, size_t length, D, T, bool opt_swap) + { + PUGI__STATIC_ASSERT(sizeof(char_t) == sizeof(typename D::type)); + + typename T::value_type end = D::process(reinterpret_cast(data), length, dest, T()); + + if (opt_swap) + { + for (typename T::value_type i = dest; i != end; ++i) + *i = endian_swap(*i); + } + + return static_cast(end - dest) * sizeof(*dest); + } + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN size_t get_valid_length(const char_t* data, size_t length) + { + if (length < 1) return 0; + + // discard last character if it's the lead of a surrogate pair + return (sizeof(wchar_t) == 2 && static_cast(static_cast(data[length - 1]) - 0xD800) < 0x400) ? length - 1 : length; + } + + PUGI__FN size_t convert_buffer_output(char_t* r_char, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) + { + // only endian-swapping is required + if (need_endian_swap_utf(encoding, get_wchar_encoding())) + { + convert_wchar_endian_swap(r_char, data, length); + + return length * sizeof(char_t); + } + + // convert to utf8 + if (encoding == encoding_utf8) + return convert_buffer_output_generic(r_u8, data, length, wchar_decoder(), utf8_writer()); + + // convert to utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return convert_buffer_output_generic(r_u16, data, length, wchar_decoder(), utf16_writer(), native_encoding != encoding); + } + + // convert to utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return convert_buffer_output_generic(r_u32, data, length, wchar_decoder(), utf32_writer(), native_encoding != encoding); + } + + // convert to latin1 + if (encoding == encoding_latin1) + return convert_buffer_output_generic(r_u8, data, length, wchar_decoder(), latin1_writer()); + + assert(false && "Invalid encoding"); // unreachable + return 0; + } +#else + PUGI__FN size_t get_valid_length(const char_t* data, size_t length) + { + if (length < 5) return 0; + + for (size_t i = 1; i <= 4; ++i) + { + uint8_t ch = static_cast(data[length - i]); + + // either a standalone character or a leading one + if ((ch & 0xc0) != 0x80) return length - i; + } + + // there are four non-leading characters at the end, sequence tail is broken so might as well process the whole chunk + return length; + } + + PUGI__FN size_t convert_buffer_output(char_t* /* r_char */, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) + { + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return convert_buffer_output_generic(r_u16, data, length, utf8_decoder(), utf16_writer(), native_encoding != encoding); + } + + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return convert_buffer_output_generic(r_u32, data, length, utf8_decoder(), utf32_writer(), native_encoding != encoding); + } + + if (encoding == encoding_latin1) + return convert_buffer_output_generic(r_u8, data, length, utf8_decoder(), latin1_writer()); + + assert(false && "Invalid encoding"); // unreachable + return 0; + } +#endif + + class xml_buffered_writer + { + xml_buffered_writer(const xml_buffered_writer&); + xml_buffered_writer& operator=(const xml_buffered_writer&); + + public: + xml_buffered_writer(xml_writer& writer_, xml_encoding user_encoding): writer(writer_), bufsize(0), encoding(get_write_encoding(user_encoding)) + { + PUGI__STATIC_ASSERT(bufcapacity >= 8); + } + + size_t flush() + { + flush(buffer, bufsize); + bufsize = 0; + return 0; + } + + void flush(const char_t* data, size_t size) + { + if (size == 0) return; + + // fast path, just write data + if (encoding == get_write_native_encoding()) + writer.write(data, size * sizeof(char_t)); + else + { + // convert chunk + size_t result = convert_buffer_output(scratch.data_char, scratch.data_u8, scratch.data_u16, scratch.data_u32, data, size, encoding); + assert(result <= sizeof(scratch)); + + // write data + writer.write(scratch.data_u8, result); + } + } + + void write_direct(const char_t* data, size_t length) + { + // flush the remaining buffer contents + flush(); + + // handle large chunks + if (length > bufcapacity) + { + if (encoding == get_write_native_encoding()) + { + // fast path, can just write data chunk + writer.write(data, length * sizeof(char_t)); + return; + } + + // need to convert in suitable chunks + while (length > bufcapacity) + { + // get chunk size by selecting such number of characters that are guaranteed to fit into scratch buffer + // and form a complete codepoint sequence (i.e. discard start of last codepoint if necessary) + size_t chunk_size = get_valid_length(data, bufcapacity); + assert(chunk_size); + + // convert chunk and write + flush(data, chunk_size); + + // iterate + data += chunk_size; + length -= chunk_size; + } + + // small tail is copied below + bufsize = 0; + } + + memcpy(buffer + bufsize, data, length * sizeof(char_t)); + bufsize += length; + } + + void write_buffer(const char_t* data, size_t length) + { + size_t offset = bufsize; + + if (offset + length <= bufcapacity) + { + memcpy(buffer + offset, data, length * sizeof(char_t)); + bufsize = offset + length; + } + else + { + write_direct(data, length); + } + } + + void write_string(const char_t* data) + { + // write the part of the string that fits in the buffer + size_t offset = bufsize; + + while (*data && offset < bufcapacity) + buffer[offset++] = *data++; + + // write the rest + if (offset < bufcapacity) + { + bufsize = offset; + } + else + { + // backtrack a bit if we have split the codepoint + size_t length = offset - bufsize; + size_t extra = length - get_valid_length(data - length, length); + + bufsize = offset - extra; + + write_direct(data - extra, strlength(data) + extra); + } + } + + void write(char_t d0) + { + size_t offset = bufsize; + if (offset > bufcapacity - 1) offset = flush(); + + buffer[offset + 0] = d0; + bufsize = offset + 1; + } + + void write(char_t d0, char_t d1) + { + size_t offset = bufsize; + if (offset > bufcapacity - 2) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + bufsize = offset + 2; + } + + void write(char_t d0, char_t d1, char_t d2) + { + size_t offset = bufsize; + if (offset > bufcapacity - 3) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + bufsize = offset + 3; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3) + { + size_t offset = bufsize; + if (offset > bufcapacity - 4) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + bufsize = offset + 4; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4) + { + size_t offset = bufsize; + if (offset > bufcapacity - 5) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + buffer[offset + 4] = d4; + bufsize = offset + 5; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4, char_t d5) + { + size_t offset = bufsize; + if (offset > bufcapacity - 6) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + buffer[offset + 4] = d4; + buffer[offset + 5] = d5; + bufsize = offset + 6; + } + + // utf8 maximum expansion: x4 (-> utf32) + // utf16 maximum expansion: x2 (-> utf32) + // utf32 maximum expansion: x1 + enum + { + bufcapacitybytes = + #ifdef PUGIXML_MEMORY_OUTPUT_STACK + PUGIXML_MEMORY_OUTPUT_STACK + #else + 10240 + #endif + , + bufcapacity = bufcapacitybytes / (sizeof(char_t) + 4) + }; + + char_t buffer[bufcapacity]; + + union + { + uint8_t data_u8[4 * bufcapacity]; + uint16_t data_u16[2 * bufcapacity]; + uint32_t data_u32[bufcapacity]; + char_t data_char[bufcapacity]; + } scratch; + + xml_writer& writer; + size_t bufsize; + xml_encoding encoding; + }; + + PUGI__FN void text_output_escaped(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags) + { + while (*s) + { + const char_t* prev = s; + + // While *s is a usual symbol + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPEX(ss, type)); + + writer.write_buffer(prev, static_cast(s - prev)); + + switch (*s) + { + case 0: break; + case '&': + writer.write('&', 'a', 'm', 'p', ';'); + ++s; + break; + case '<': + writer.write('&', 'l', 't', ';'); + ++s; + break; + case '>': + writer.write('&', 'g', 't', ';'); + ++s; + break; + case '"': + if (flags & format_attribute_single_quote) + writer.write('"'); + else + writer.write('&', 'q', 'u', 'o', 't', ';'); + ++s; + break; + case '\'': + if (flags & format_attribute_single_quote) + writer.write('&', 'a', 'p', 'o', 's', ';'); + else + writer.write('\''); + ++s; + break; + default: // s is not a usual symbol + { + unsigned int ch = static_cast(*s++); + assert(ch < 32); + + if (!(flags & format_skip_control_chars)) + writer.write('&', '#', static_cast((ch / 10) + '0'), static_cast((ch % 10) + '0'), ';'); + } + } + } + } + + PUGI__FN void text_output(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags) + { + if (flags & format_no_escapes) + writer.write_string(s); + else + text_output_escaped(writer, s, type, flags); + } + + PUGI__FN void text_output_cdata(xml_buffered_writer& writer, const char_t* s) + { + do + { + writer.write('<', '!', '[', 'C', 'D'); + writer.write('A', 'T', 'A', '['); + + const char_t* prev = s; + + // look for ]]> sequence - we can't output it as is since it terminates CDATA + while (*s && !(s[0] == ']' && s[1] == ']' && s[2] == '>')) ++s; + + // skip ]] if we stopped at ]]>, > will go to the next CDATA section + if (*s) s += 2; + + writer.write_buffer(prev, static_cast(s - prev)); + + writer.write(']', ']', '>'); + } + while (*s); + } + + PUGI__FN void text_output_indent(xml_buffered_writer& writer, const char_t* indent, size_t indent_length, unsigned int depth) + { + switch (indent_length) + { + case 1: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0]); + break; + } + + case 2: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1]); + break; + } + + case 3: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1], indent[2]); + break; + } + + case 4: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1], indent[2], indent[3]); + break; + } + + default: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write_buffer(indent, indent_length); + } + } + } + + PUGI__FN void node_output_comment(xml_buffered_writer& writer, const char_t* s) + { + writer.write('<', '!', '-', '-'); + + while (*s) + { + const char_t* prev = s; + + // look for -\0 or -- sequence - we can't output it since -- is illegal in comment body + while (*s && !(s[0] == '-' && (s[1] == '-' || s[1] == 0))) ++s; + + writer.write_buffer(prev, static_cast(s - prev)); + + if (*s) + { + assert(*s == '-'); + + writer.write('-', ' '); + ++s; + } + } + + writer.write('-', '-', '>'); + } + + PUGI__FN void node_output_pi_value(xml_buffered_writer& writer, const char_t* s) + { + while (*s) + { + const char_t* prev = s; + + // look for ?> sequence - we can't output it since ?> terminates PI + while (*s && !(s[0] == '?' && s[1] == '>')) ++s; + + writer.write_buffer(prev, static_cast(s - prev)); + + if (*s) + { + assert(s[0] == '?' && s[1] == '>'); + + writer.write('?', ' ', '>'); + s += 2; + } + } + } + + PUGI__FN void node_output_attributes(xml_buffered_writer& writer, xml_node_struct* node, const char_t* indent, size_t indent_length, unsigned int flags, unsigned int depth) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t enquotation_char = (flags & format_attribute_single_quote) ? '\'' : '"'; + + for (xml_attribute_struct* a = node->first_attribute; a; a = a->next_attribute) + { + if ((flags & (format_indent_attributes | format_raw)) == format_indent_attributes) + { + writer.write('\n'); + + text_output_indent(writer, indent, indent_length, depth + 1); + } + else + { + writer.write(' '); + } + + writer.write_string(a->name ? a->name + 0 : default_name); + writer.write('=', enquotation_char); + + if (a->value) + text_output(writer, a->value, ctx_special_attr, flags); + + writer.write(enquotation_char); + } + } + + PUGI__FN bool node_output_start(xml_buffered_writer& writer, xml_node_struct* node, const char_t* indent, size_t indent_length, unsigned int flags, unsigned int depth) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t* name = node->name ? node->name + 0 : default_name; + + writer.write('<'); + writer.write_string(name); + + if (node->first_attribute) + node_output_attributes(writer, node, indent, indent_length, flags, depth); + + // element nodes can have value if parse_embed_pcdata was used + if (!node->value) + { + if (!node->first_child) + { + if (flags & format_no_empty_element_tags) + { + writer.write('>', '<', '/'); + writer.write_string(name); + writer.write('>'); + + return false; + } + else + { + if ((flags & format_raw) == 0) + writer.write(' '); + + writer.write('/', '>'); + + return false; + } + } + else + { + writer.write('>'); + + return true; + } + } + else + { + writer.write('>'); + + text_output(writer, node->value, ctx_special_pcdata, flags); + + if (!node->first_child) + { + writer.write('<', '/'); + writer.write_string(name); + writer.write('>'); + + return false; + } + else + { + return true; + } + } + } + + PUGI__FN void node_output_end(xml_buffered_writer& writer, xml_node_struct* node) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t* name = node->name ? node->name + 0 : default_name; + + writer.write('<', '/'); + writer.write_string(name); + writer.write('>'); + } + + PUGI__FN void node_output_simple(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + + switch (PUGI__NODETYPE(node)) + { + case node_pcdata: + text_output(writer, node->value ? node->value + 0 : PUGIXML_TEXT(""), ctx_special_pcdata, flags); + break; + + case node_cdata: + text_output_cdata(writer, node->value ? node->value + 0 : PUGIXML_TEXT("")); + break; + + case node_comment: + node_output_comment(writer, node->value ? node->value + 0 : PUGIXML_TEXT("")); + break; + + case node_pi: + writer.write('<', '?'); + writer.write_string(node->name ? node->name + 0 : default_name); + + if (node->value) + { + writer.write(' '); + node_output_pi_value(writer, node->value); + } + + writer.write('?', '>'); + break; + + case node_declaration: + writer.write('<', '?'); + writer.write_string(node->name ? node->name + 0 : default_name); + node_output_attributes(writer, node, PUGIXML_TEXT(""), 0, flags | format_raw, 0); + writer.write('?', '>'); + break; + + case node_doctype: + writer.write('<', '!', 'D', 'O', 'C'); + writer.write('T', 'Y', 'P', 'E'); + + if (node->value) + { + writer.write(' '); + writer.write_string(node->value); + } + + writer.write('>'); + break; + + default: + assert(false && "Invalid node type"); // unreachable + } + } + + enum indent_flags_t + { + indent_newline = 1, + indent_indent = 2 + }; + + PUGI__FN void node_output(xml_buffered_writer& writer, xml_node_struct* root, const char_t* indent, unsigned int flags, unsigned int depth) + { + size_t indent_length = ((flags & (format_indent | format_indent_attributes)) && (flags & format_raw) == 0) ? strlength(indent) : 0; + unsigned int indent_flags = indent_indent; + + xml_node_struct* node = root; + + do + { + assert(node); + + // begin writing current node + if (PUGI__NODETYPE(node) == node_pcdata || PUGI__NODETYPE(node) == node_cdata) + { + node_output_simple(writer, node, flags); + + indent_flags = 0; + } + else + { + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) + text_output_indent(writer, indent, indent_length, depth); + + if (PUGI__NODETYPE(node) == node_element) + { + indent_flags = indent_newline | indent_indent; + + if (node_output_start(writer, node, indent, indent_length, flags, depth)) + { + // element nodes can have value if parse_embed_pcdata was used + if (node->value) + indent_flags = 0; + + node = node->first_child; + depth++; + continue; + } + } + else if (PUGI__NODETYPE(node) == node_document) + { + indent_flags = indent_indent; + + if (node->first_child) + { + node = node->first_child; + continue; + } + } + else + { + node_output_simple(writer, node, flags); + + indent_flags = indent_newline | indent_indent; + } + } + + // continue to the next node + while (node != root) + { + if (node->next_sibling) + { + node = node->next_sibling; + break; + } + + node = node->parent; + + // write closing node + if (PUGI__NODETYPE(node) == node_element) + { + depth--; + + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) + text_output_indent(writer, indent, indent_length, depth); + + node_output_end(writer, node); + + indent_flags = indent_newline | indent_indent; + } + } + } + while (node != root); + + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + } + + PUGI__FN bool has_declaration(xml_node_struct* node) + { + for (xml_node_struct* child = node->first_child; child; child = child->next_sibling) + { + xml_node_type type = PUGI__NODETYPE(child); + + if (type == node_declaration) return true; + if (type == node_element) return false; + } + + return false; + } + + PUGI__FN bool is_attribute_of(xml_attribute_struct* attr, xml_node_struct* node) + { + for (xml_attribute_struct* a = node->first_attribute; a; a = a->next_attribute) + if (a == attr) + return true; + + return false; + } + + PUGI__FN bool allow_insert_attribute(xml_node_type parent) + { + return parent == node_element || parent == node_declaration; + } + + PUGI__FN bool allow_insert_child(xml_node_type parent, xml_node_type child) + { + if (parent != node_document && parent != node_element) return false; + if (child == node_document || child == node_null) return false; + if (parent != node_document && (child == node_declaration || child == node_doctype)) return false; + + return true; + } + + PUGI__FN bool allow_move(xml_node parent, xml_node child) + { + // check that child can be a child of parent + if (!allow_insert_child(parent.type(), child.type())) + return false; + + // check that node is not moved between documents + if (parent.root() != child.root()) + return false; + + // check that new parent is not in the child subtree + xml_node cur = parent; + + while (cur) + { + if (cur == child) + return false; + + cur = cur.parent(); + } + + return true; + } + + template + PUGI__FN void node_copy_string(String& dest, Header& header, uintptr_t header_mask, char_t* source, Header& source_header, xml_allocator* alloc) + { + assert(!dest && (header & header_mask) == 0); + + if (source) + { + if (alloc && (source_header & header_mask) == 0) + { + dest = source; + + // since strcpy_insitu can reuse document buffer memory we need to mark both source and dest as shared + header |= xml_memory_page_contents_shared_mask; + source_header |= xml_memory_page_contents_shared_mask; + } + else + strcpy_insitu(dest, header, header_mask, source, strlength(source)); + } + } + + PUGI__FN void node_copy_contents(xml_node_struct* dn, xml_node_struct* sn, xml_allocator* shared_alloc) + { + node_copy_string(dn->name, dn->header, xml_memory_page_name_allocated_mask, sn->name, sn->header, shared_alloc); + node_copy_string(dn->value, dn->header, xml_memory_page_value_allocated_mask, sn->value, sn->header, shared_alloc); + + for (xml_attribute_struct* sa = sn->first_attribute; sa; sa = sa->next_attribute) + { + xml_attribute_struct* da = append_new_attribute(dn, get_allocator(dn)); + + if (da) + { + node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, shared_alloc); + node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, shared_alloc); + } + } + } + + PUGI__FN void node_copy_tree(xml_node_struct* dn, xml_node_struct* sn) + { + xml_allocator& alloc = get_allocator(dn); + xml_allocator* shared_alloc = (&alloc == &get_allocator(sn)) ? &alloc : 0; + + node_copy_contents(dn, sn, shared_alloc); + + xml_node_struct* dit = dn; + xml_node_struct* sit = sn->first_child; + + while (sit && sit != sn) + { + // loop invariant: dit is inside the subtree rooted at dn + assert(dit); + + // when a tree is copied into one of the descendants, we need to skip that subtree to avoid an infinite loop + if (sit != dn) + { + xml_node_struct* copy = append_new_node(dit, alloc, PUGI__NODETYPE(sit)); + + if (copy) + { + node_copy_contents(copy, sit, shared_alloc); + + if (sit->first_child) + { + dit = copy; + sit = sit->first_child; + continue; + } + } + } + + // continue to the next node + do + { + if (sit->next_sibling) + { + sit = sit->next_sibling; + break; + } + + sit = sit->parent; + dit = dit->parent; + + // loop invariant: dit is inside the subtree rooted at dn while sit is inside sn + assert(sit == sn || dit); + } + while (sit != sn); + } + + assert(!sit || dit == dn->parent); + } + + PUGI__FN void node_copy_attribute(xml_attribute_struct* da, xml_attribute_struct* sa) + { + xml_allocator& alloc = get_allocator(da); + xml_allocator* shared_alloc = (&alloc == &get_allocator(sa)) ? &alloc : 0; + + node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, shared_alloc); + node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, shared_alloc); + } + + inline bool is_text_node(xml_node_struct* node) + { + xml_node_type type = PUGI__NODETYPE(node); + + return type == node_pcdata || type == node_cdata; + } + + // get value with conversion functions + template PUGI__FN PUGI__UNSIGNED_OVERFLOW U string_to_integer(const char_t* value, U minv, U maxv) + { + U result = 0; + const char_t* s = value; + + while (PUGI__IS_CHARTYPE(*s, ct_space)) + s++; + + bool negative = (*s == '-'); + + s += (*s == '+' || *s == '-'); + + bool overflow = false; + + if (s[0] == '0' && (s[1] | ' ') == 'x') + { + s += 2; + + // since overflow detection relies on length of the sequence skip leading zeros + while (*s == '0') + s++; + + const char_t* start = s; + + for (;;) + { + if (static_cast(*s - '0') < 10) + result = result * 16 + (*s - '0'); + else if (static_cast((*s | ' ') - 'a') < 6) + result = result * 16 + ((*s | ' ') - 'a' + 10); + else + break; + + s++; + } + + size_t digits = static_cast(s - start); + + overflow = digits > sizeof(U) * 2; + } + else + { + // since overflow detection relies on length of the sequence skip leading zeros + while (*s == '0') + s++; + + const char_t* start = s; + + for (;;) + { + if (static_cast(*s - '0') < 10) + result = result * 10 + (*s - '0'); + else + break; + + s++; + } + + size_t digits = static_cast(s - start); + + PUGI__STATIC_ASSERT(sizeof(U) == 8 || sizeof(U) == 4 || sizeof(U) == 2); + + const size_t max_digits10 = sizeof(U) == 8 ? 20 : sizeof(U) == 4 ? 10 : 5; + const char_t max_lead = sizeof(U) == 8 ? '1' : sizeof(U) == 4 ? '4' : '6'; + const size_t high_bit = sizeof(U) * 8 - 1; + + overflow = digits >= max_digits10 && !(digits == max_digits10 && (*start < max_lead || (*start == max_lead && result >> high_bit))); + } + + if (negative) + { + // Workaround for crayc++ CC-3059: Expected no overflow in routine. + #ifdef _CRAYC + return (overflow || result > ~minv + 1) ? minv : ~result + 1; + #else + return (overflow || result > 0 - minv) ? minv : 0 - result; + #endif + } + else + return (overflow || result > maxv) ? maxv : result; + } + + PUGI__FN int get_value_int(const char_t* value) + { + return string_to_integer(value, static_cast(INT_MIN), INT_MAX); + } + + PUGI__FN unsigned int get_value_uint(const char_t* value) + { + return string_to_integer(value, 0, UINT_MAX); + } + + PUGI__FN double get_value_double(const char_t* value) + { + #ifdef PUGIXML_WCHAR_MODE + return wcstod(value, 0); + #else + return strtod(value, 0); + #endif + } + + PUGI__FN float get_value_float(const char_t* value) + { + #ifdef PUGIXML_WCHAR_MODE + return static_cast(wcstod(value, 0)); + #else + return static_cast(strtod(value, 0)); + #endif + } + + PUGI__FN bool get_value_bool(const char_t* value) + { + // only look at first char + char_t first = *value; + + // 1*, t* (true), T* (True), y* (yes), Y* (YES) + return (first == '1' || first == 't' || first == 'T' || first == 'y' || first == 'Y'); + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long get_value_llong(const char_t* value) + { + return string_to_integer(value, static_cast(LLONG_MIN), LLONG_MAX); + } + + PUGI__FN unsigned long long get_value_ullong(const char_t* value) + { + return string_to_integer(value, 0, ULLONG_MAX); + } +#endif + + template PUGI__FN PUGI__UNSIGNED_OVERFLOW char_t* integer_to_string(char_t* begin, char_t* end, U value, bool negative) + { + char_t* result = end - 1; + U rest = negative ? 0 - value : value; + + do + { + *result-- = static_cast('0' + (rest % 10)); + rest /= 10; + } + while (rest); + + assert(result >= begin); + (void)begin; + + *result = '-'; + + return result + !negative; + } + + // set value with conversion functions + template + PUGI__FN bool set_value_ascii(String& dest, Header& header, uintptr_t header_mask, char* buf) + { + #ifdef PUGIXML_WCHAR_MODE + char_t wbuf[128]; + assert(strlen(buf) < sizeof(wbuf) / sizeof(wbuf[0])); + + size_t offset = 0; + for (; buf[offset]; ++offset) wbuf[offset] = buf[offset]; + + return strcpy_insitu(dest, header, header_mask, wbuf, offset); + #else + return strcpy_insitu(dest, header, header_mask, buf, strlen(buf)); + #endif + } + + template + PUGI__FN bool set_value_integer(String& dest, Header& header, uintptr_t header_mask, U value, bool negative) + { + char_t buf[64]; + char_t* end = buf + sizeof(buf) / sizeof(buf[0]); + char_t* begin = integer_to_string(buf, end, value, negative); + + return strcpy_insitu(dest, header, header_mask, begin, end - begin); + } + + template + PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value, int precision) + { + char buf[128]; + PUGI__SNPRINTF(buf, "%.*g", precision, double(value)); + + return set_value_ascii(dest, header, header_mask, buf); + } + + template + PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value, int precision) + { + char buf[128]; + PUGI__SNPRINTF(buf, "%.*g", precision, value); + + return set_value_ascii(dest, header, header_mask, buf); + } + + template + PUGI__FN bool set_value_bool(String& dest, Header& header, uintptr_t header_mask, bool value) + { + return strcpy_insitu(dest, header, header_mask, value ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false"), value ? 4 : 5); + } + + PUGI__FN xml_parse_result load_buffer_impl(xml_document_struct* doc, xml_node_struct* root, void* contents, size_t size, unsigned int options, xml_encoding encoding, bool is_mutable, bool own, char_t** out_buffer) + { + // check input buffer + if (!contents && size) return make_parse_result(status_io_error); + + // get actual encoding + xml_encoding buffer_encoding = impl::get_buffer_encoding(encoding, contents, size); + + // if convert_buffer below throws bad_alloc, we still need to deallocate contents if we own it + auto_deleter contents_guard(own ? contents : 0, xml_memory::deallocate); + + // get private buffer + char_t* buffer = 0; + size_t length = 0; + + // coverity[var_deref_model] + if (!impl::convert_buffer(buffer, length, buffer_encoding, contents, size, is_mutable)) return impl::make_parse_result(status_out_of_memory); + + // after this we either deallocate contents (below) or hold on to it via doc->buffer, so we don't need to guard it + contents_guard.release(); + + // delete original buffer if we performed a conversion + if (own && buffer != contents && contents) impl::xml_memory::deallocate(contents); + + // grab onto buffer if it's our buffer, user is responsible for deallocating contents himself + if (own || buffer != contents) *out_buffer = buffer; + + // store buffer for offset_debug + doc->buffer = buffer; + + // parse + xml_parse_result res = impl::xml_parser::parse(buffer, length, doc, root, options); + + // remember encoding + res.encoding = buffer_encoding; + + return res; + } + + // we need to get length of entire file to load it in memory; the only (relatively) sane way to do it is via seek/tell trick + PUGI__FN xml_parse_status get_file_size(FILE* file, size_t& out_result) + { + #if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + // there are 64-bit versions of fseek/ftell, let's use them + typedef __int64 length_type; + + _fseeki64(file, 0, SEEK_END); + length_type length = _ftelli64(file); + _fseeki64(file, 0, SEEK_SET); + #elif defined(__MINGW32__) && !defined(__NO_MINGW_LFS) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR)) + // there are 64-bit versions of fseek/ftell, let's use them + typedef off64_t length_type; + + fseeko64(file, 0, SEEK_END); + length_type length = ftello64(file); + fseeko64(file, 0, SEEK_SET); + #else + // if this is a 32-bit OS, long is enough; if this is a unix system, long is 64-bit, which is enough; otherwise we can't do anything anyway. + typedef long length_type; + + fseek(file, 0, SEEK_END); + length_type length = ftell(file); + fseek(file, 0, SEEK_SET); + #endif + + // check for I/O errors + if (length < 0) return status_io_error; + + // check for overflow + size_t result = static_cast(length); + + if (static_cast(result) != length) return status_out_of_memory; + + // finalize + out_result = result; + + return status_ok; + } + + // This function assumes that buffer has extra sizeof(char_t) writable bytes after size + PUGI__FN size_t zero_terminate_buffer(void* buffer, size_t size, xml_encoding encoding) + { + // We only need to zero-terminate if encoding conversion does not do it for us + #ifdef PUGIXML_WCHAR_MODE + xml_encoding wchar_encoding = get_wchar_encoding(); + + if (encoding == wchar_encoding || need_endian_swap_utf(encoding, wchar_encoding)) + { + size_t length = size / sizeof(char_t); + + static_cast(buffer)[length] = 0; + return (length + 1) * sizeof(char_t); + } + #else + if (encoding == encoding_utf8) + { + static_cast(buffer)[size] = 0; + return size + 1; + } + #endif + + return size; + } + + PUGI__FN xml_parse_result load_file_impl(xml_document_struct* doc, FILE* file, unsigned int options, xml_encoding encoding, char_t** out_buffer) + { + if (!file) return make_parse_result(status_file_not_found); + + // get file size (can result in I/O errors) + size_t size = 0; + xml_parse_status size_status = get_file_size(file, size); + if (size_status != status_ok) return make_parse_result(size_status); + + size_t max_suffix_size = sizeof(char_t); + + // allocate buffer for the whole file + char* contents = static_cast(xml_memory::allocate(size + max_suffix_size)); + if (!contents) return make_parse_result(status_out_of_memory); + + // read file in memory + size_t read_size = fread(contents, 1, size, file); + + if (read_size != size) + { + xml_memory::deallocate(contents); + return make_parse_result(status_io_error); + } + + xml_encoding real_encoding = get_buffer_encoding(encoding, contents, size); + + return load_buffer_impl(doc, doc, contents, zero_terminate_buffer(contents, size, real_encoding), options, real_encoding, true, true, out_buffer); + } + + PUGI__FN void close_file(FILE* file) + { + fclose(file); + } + +#ifndef PUGIXML_NO_STL + template struct xml_stream_chunk + { + static xml_stream_chunk* create() + { + void* memory = xml_memory::allocate(sizeof(xml_stream_chunk)); + if (!memory) return 0; + + return new (memory) xml_stream_chunk(); + } + + static void destroy(xml_stream_chunk* chunk) + { + // free chunk chain + while (chunk) + { + xml_stream_chunk* next_ = chunk->next; + + xml_memory::deallocate(chunk); + + chunk = next_; + } + } + + xml_stream_chunk(): next(0), size(0) + { + } + + xml_stream_chunk* next; + size_t size; + + T data[xml_memory_page_size / sizeof(T)]; + }; + + template PUGI__FN xml_parse_status load_stream_data_noseek(std::basic_istream& stream, void** out_buffer, size_t* out_size) + { + auto_deleter > chunks(0, xml_stream_chunk::destroy); + + // read file to a chunk list + size_t total = 0; + xml_stream_chunk* last = 0; + + while (!stream.eof()) + { + // allocate new chunk + xml_stream_chunk* chunk = xml_stream_chunk::create(); + if (!chunk) return status_out_of_memory; + + // append chunk to list + if (last) last = last->next = chunk; + else chunks.data = last = chunk; + + // read data to chunk + stream.read(chunk->data, static_cast(sizeof(chunk->data) / sizeof(T))); + chunk->size = static_cast(stream.gcount()) * sizeof(T); + + // read may set failbit | eofbit in case gcount() is less than read length, so check for other I/O errors + if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; + + // guard against huge files (chunk size is small enough to make this overflow check work) + if (total + chunk->size < total) return status_out_of_memory; + total += chunk->size; + } + + size_t max_suffix_size = sizeof(char_t); + + // copy chunk list to a contiguous buffer + char* buffer = static_cast(xml_memory::allocate(total + max_suffix_size)); + if (!buffer) return status_out_of_memory; + + char* write = buffer; + + for (xml_stream_chunk* chunk = chunks.data; chunk; chunk = chunk->next) + { + assert(write + chunk->size <= buffer + total); + memcpy(write, chunk->data, chunk->size); + write += chunk->size; + } + + assert(write == buffer + total); + + // return buffer + *out_buffer = buffer; + *out_size = total; + + return status_ok; + } + + template PUGI__FN xml_parse_status load_stream_data_seek(std::basic_istream& stream, void** out_buffer, size_t* out_size) + { + // get length of remaining data in stream + typename std::basic_istream::pos_type pos = stream.tellg(); + stream.seekg(0, std::ios::end); + std::streamoff length = stream.tellg() - pos; + stream.seekg(pos); + + if (stream.fail() || pos < 0) return status_io_error; + + // guard against huge files + size_t read_length = static_cast(length); + + if (static_cast(read_length) != length || length < 0) return status_out_of_memory; + + size_t max_suffix_size = sizeof(char_t); + + // read stream data into memory (guard against stream exceptions with buffer holder) + auto_deleter buffer(xml_memory::allocate(read_length * sizeof(T) + max_suffix_size), xml_memory::deallocate); + if (!buffer.data) return status_out_of_memory; + + stream.read(static_cast(buffer.data), static_cast(read_length)); + + // read may set failbit | eofbit in case gcount() is less than read_length (i.e. line ending conversion), so check for other I/O errors + if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; + + // return buffer + size_t actual_length = static_cast(stream.gcount()); + assert(actual_length <= read_length); + + *out_buffer = buffer.release(); + *out_size = actual_length * sizeof(T); + + return status_ok; + } + + template PUGI__FN xml_parse_result load_stream_impl(xml_document_struct* doc, std::basic_istream& stream, unsigned int options, xml_encoding encoding, char_t** out_buffer) + { + void* buffer = 0; + size_t size = 0; + xml_parse_status status = status_ok; + + // if stream has an error bit set, bail out (otherwise tellg() can fail and we'll clear error bits) + if (stream.fail()) return make_parse_result(status_io_error); + + // load stream to memory (using seek-based implementation if possible, since it's faster and takes less memory) + if (stream.tellg() < 0) + { + stream.clear(); // clear error flags that could be set by a failing tellg + status = load_stream_data_noseek(stream, &buffer, &size); + } + else + status = load_stream_data_seek(stream, &buffer, &size); + + if (status != status_ok) return make_parse_result(status); + + xml_encoding real_encoding = get_buffer_encoding(encoding, buffer, size); + + return load_buffer_impl(doc, doc, buffer, zero_terminate_buffer(buffer, size, real_encoding), options, real_encoding, true, true, out_buffer); + } +#endif + +#if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) || (defined(__MINGW32__) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR))) + PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) + { +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + FILE* file = 0; + return _wfopen_s(&file, path, mode) == 0 ? file : 0; +#else + return _wfopen(path, mode); +#endif + } +#else + PUGI__FN char* convert_path_heap(const wchar_t* str) + { + assert(str); + + // first pass: get length in utf8 characters + size_t length = strlength_wide(str); + size_t size = as_utf8_begin(str, length); + + // allocate resulting string + char* result = static_cast(xml_memory::allocate(size + 1)); + if (!result) return 0; + + // second pass: convert to utf8 + as_utf8_end(result, size, str, length); + + // zero-terminate + result[size] = 0; + + return result; + } + + PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) + { + // there is no standard function to open wide paths, so our best bet is to try utf8 path + char* path_utf8 = convert_path_heap(path); + if (!path_utf8) return 0; + + // convert mode to ASCII (we mirror _wfopen interface) + char mode_ascii[4] = {0}; + for (size_t i = 0; mode[i]; ++i) mode_ascii[i] = static_cast(mode[i]); + + // try to open the utf8 path + FILE* result = fopen(path_utf8, mode_ascii); + + // free dummy buffer + xml_memory::deallocate(path_utf8); + + return result; + } +#endif + + PUGI__FN FILE* open_file(const char* path, const char* mode) + { +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + FILE* file = 0; + return fopen_s(&file, path, mode) == 0 ? file : 0; +#else + return fopen(path, mode); +#endif + } + + PUGI__FN bool save_file_impl(const xml_document& doc, FILE* file, const char_t* indent, unsigned int flags, xml_encoding encoding) + { + if (!file) return false; + + xml_writer_file writer(file); + doc.save(writer, indent, flags, encoding); + + return fflush(file) == 0 && ferror(file) == 0; + } + + struct name_null_sentry + { + xml_node_struct* node; + char_t* name; + + name_null_sentry(xml_node_struct* node_): node(node_), name(node_->name) + { + node->name = 0; + } + + ~name_null_sentry() + { + node->name = name; + } + }; +PUGI__NS_END + +namespace pugi +{ + PUGI__FN xml_writer_file::xml_writer_file(void* file_): file(file_) + { + } + + PUGI__FN void xml_writer_file::write(const void* data, size_t size) + { + size_t result = fwrite(data, 1, size, static_cast(file)); + (void)!result; // unfortunately we can't do proper error handling here + } + +#ifndef PUGIXML_NO_STL + PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(&stream), wide_stream(0) + { + } + + PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(0), wide_stream(&stream) + { + } + + PUGI__FN void xml_writer_stream::write(const void* data, size_t size) + { + if (narrow_stream) + { + assert(!wide_stream); + narrow_stream->write(reinterpret_cast(data), static_cast(size)); + } + else + { + assert(wide_stream); + assert(size % sizeof(wchar_t) == 0); + + wide_stream->write(reinterpret_cast(data), static_cast(size / sizeof(wchar_t))); + } + } +#endif + + PUGI__FN xml_tree_walker::xml_tree_walker(): _depth(0) + { + } + + PUGI__FN xml_tree_walker::~xml_tree_walker() + { + } + + PUGI__FN int xml_tree_walker::depth() const + { + return _depth; + } + + PUGI__FN bool xml_tree_walker::begin(xml_node&) + { + return true; + } + + PUGI__FN bool xml_tree_walker::end(xml_node&) + { + return true; + } + + PUGI__FN xml_attribute::xml_attribute(): _attr(0) + { + } + + PUGI__FN xml_attribute::xml_attribute(xml_attribute_struct* attr): _attr(attr) + { + } + + PUGI__FN static void unspecified_bool_xml_attribute(xml_attribute***) + { + } + + PUGI__FN xml_attribute::operator xml_attribute::unspecified_bool_type() const + { + return _attr ? unspecified_bool_xml_attribute : 0; + } + + PUGI__FN bool xml_attribute::operator!() const + { + return !_attr; + } + + PUGI__FN bool xml_attribute::operator==(const xml_attribute& r) const + { + return (_attr == r._attr); + } + + PUGI__FN bool xml_attribute::operator!=(const xml_attribute& r) const + { + return (_attr != r._attr); + } + + PUGI__FN bool xml_attribute::operator<(const xml_attribute& r) const + { + return (_attr < r._attr); + } + + PUGI__FN bool xml_attribute::operator>(const xml_attribute& r) const + { + return (_attr > r._attr); + } + + PUGI__FN bool xml_attribute::operator<=(const xml_attribute& r) const + { + return (_attr <= r._attr); + } + + PUGI__FN bool xml_attribute::operator>=(const xml_attribute& r) const + { + return (_attr >= r._attr); + } + + PUGI__FN xml_attribute xml_attribute::next_attribute() const + { + if (!_attr) return xml_attribute(); + return xml_attribute(_attr->next_attribute); + } + + PUGI__FN xml_attribute xml_attribute::previous_attribute() const + { + if (!_attr) return xml_attribute(); + xml_attribute_struct* prev = _attr->prev_attribute_c; + return prev->next_attribute ? xml_attribute(prev) : xml_attribute(); + } + + PUGI__FN const char_t* xml_attribute::as_string(const char_t* def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? value : def; + } + + PUGI__FN int xml_attribute::as_int(int def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_int(value) : def; + } + + PUGI__FN unsigned int xml_attribute::as_uint(unsigned int def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_uint(value) : def; + } + + PUGI__FN double xml_attribute::as_double(double def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_double(value) : def; + } + + PUGI__FN float xml_attribute::as_float(float def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_float(value) : def; + } + + PUGI__FN bool xml_attribute::as_bool(bool def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_bool(value) : def; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long xml_attribute::as_llong(long long def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_llong(value) : def; + } + + PUGI__FN unsigned long long xml_attribute::as_ullong(unsigned long long def) const + { + if (!_attr) return def; + const char_t* value = _attr->value; + return value ? impl::get_value_ullong(value) : def; + } +#endif + + PUGI__FN bool xml_attribute::empty() const + { + return !_attr; + } + + PUGI__FN const char_t* xml_attribute::name() const + { + if (!_attr) return PUGIXML_TEXT(""); + const char_t* name = _attr->name; + return name ? name : PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_attribute::value() const + { + if (!_attr) return PUGIXML_TEXT(""); + const char_t* value = _attr->value; + return value ? value : PUGIXML_TEXT(""); + } + + PUGI__FN size_t xml_attribute::hash_value() const + { + return static_cast(reinterpret_cast(_attr) / sizeof(xml_attribute_struct)); + } + + PUGI__FN xml_attribute_struct* xml_attribute::internal_object() const + { + return _attr; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(const char_t* rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(int rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned int rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(double rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(float rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(bool rhs) + { + set_value(rhs); + return *this; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN xml_attribute& xml_attribute::operator=(long long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned long long rhs) + { + set_value(rhs); + return *this; + } +#endif + + PUGI__FN bool xml_attribute::set_name(const char_t* rhs) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->name, _attr->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_attribute::set_value(const char_t* rhs, size_t sz) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, sz); + } + + PUGI__FN bool xml_attribute::set_value(const char_t* rhs) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_attribute::set_value(int rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned int rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } + + PUGI__FN bool xml_attribute::set_value(long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } + + PUGI__FN bool xml_attribute::set_value(double rhs) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, default_double_precision); + } + + PUGI__FN bool xml_attribute::set_value(double rhs, int precision) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, precision); + } + + PUGI__FN bool xml_attribute::set_value(float rhs) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, default_float_precision); + } + + PUGI__FN bool xml_attribute::set_value(float rhs, int precision) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, precision); + } + + PUGI__FN bool xml_attribute::set_value(bool rhs) + { + if (!_attr) return false; + + return impl::set_value_bool(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN bool xml_attribute::set_value(long long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned long long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } +#endif + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_attribute& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_attribute& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_node::xml_node(): _root(0) + { + } + + PUGI__FN xml_node::xml_node(xml_node_struct* p): _root(p) + { + } + + PUGI__FN static void unspecified_bool_xml_node(xml_node***) + { + } + + PUGI__FN xml_node::operator xml_node::unspecified_bool_type() const + { + return _root ? unspecified_bool_xml_node : 0; + } + + PUGI__FN bool xml_node::operator!() const + { + return !_root; + } + + PUGI__FN xml_node::iterator xml_node::begin() const + { + return iterator(_root ? _root->first_child + 0 : 0, _root); + } + + PUGI__FN xml_node::iterator xml_node::end() const + { + return iterator(0, _root); + } + + PUGI__FN xml_node::attribute_iterator xml_node::attributes_begin() const + { + return attribute_iterator(_root ? _root->first_attribute + 0 : 0, _root); + } + + PUGI__FN xml_node::attribute_iterator xml_node::attributes_end() const + { + return attribute_iterator(0, _root); + } + + PUGI__FN xml_object_range xml_node::children() const + { + return xml_object_range(begin(), end()); + } + + PUGI__FN xml_object_range xml_node::children(const char_t* name_) const + { + return xml_object_range(xml_named_node_iterator(child(name_)._root, _root, name_), xml_named_node_iterator(0, _root, name_)); + } + + PUGI__FN xml_object_range xml_node::attributes() const + { + return xml_object_range(attributes_begin(), attributes_end()); + } + + PUGI__FN bool xml_node::operator==(const xml_node& r) const + { + return (_root == r._root); + } + + PUGI__FN bool xml_node::operator!=(const xml_node& r) const + { + return (_root != r._root); + } + + PUGI__FN bool xml_node::operator<(const xml_node& r) const + { + return (_root < r._root); + } + + PUGI__FN bool xml_node::operator>(const xml_node& r) const + { + return (_root > r._root); + } + + PUGI__FN bool xml_node::operator<=(const xml_node& r) const + { + return (_root <= r._root); + } + + PUGI__FN bool xml_node::operator>=(const xml_node& r) const + { + return (_root >= r._root); + } + + PUGI__FN bool xml_node::empty() const + { + return !_root; + } + + PUGI__FN const char_t* xml_node::name() const + { + if (!_root) return PUGIXML_TEXT(""); + const char_t* name = _root->name; + return name ? name : PUGIXML_TEXT(""); + } + + PUGI__FN xml_node_type xml_node::type() const + { + return _root ? PUGI__NODETYPE(_root) : node_null; + } + + PUGI__FN const char_t* xml_node::value() const + { + if (!_root) return PUGIXML_TEXT(""); + const char_t* value = _root->value; + return value ? value : PUGIXML_TEXT(""); + } + + PUGI__FN xml_node xml_node::child(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + return xml_node(i); + } + + return xml_node(); + } + + PUGI__FN xml_attribute xml_node::attribute(const char_t* name_) const + { + if (!_root) return xml_attribute(); + + for (xml_attribute_struct* i = _root->first_attribute; i; i = i->next_attribute) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + return xml_attribute(i); + } + + return xml_attribute(); + } + + PUGI__FN xml_node xml_node::next_sibling(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->next_sibling; i; i = i->next_sibling) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + return xml_node(i); + } + + return xml_node(); + } + + PUGI__FN xml_node xml_node::next_sibling() const + { + return _root ? xml_node(_root->next_sibling) : xml_node(); + } + + PUGI__FN xml_node xml_node::previous_sibling(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->prev_sibling_c; i->next_sibling; i = i->prev_sibling_c) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + return xml_node(i); + } + + return xml_node(); + } + + PUGI__FN xml_attribute xml_node::attribute(const char_t* name_, xml_attribute& hint_) const + { + xml_attribute_struct* hint = hint_._attr; + + // if hint is not an attribute of node, behavior is not defined + assert(!hint || (_root && impl::is_attribute_of(hint, _root))); + + if (!_root) return xml_attribute(); + + // optimistically search from hint up until the end + for (xml_attribute_struct* i = hint; i; i = i->next_attribute) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + { + // update hint to maximize efficiency of searching for consecutive attributes + hint_._attr = i->next_attribute; + + return xml_attribute(i); + } + } + + // wrap around and search from the first attribute until the hint + // 'j' null pointer check is technically redundant, but it prevents a crash in case the assertion above fails + for (xml_attribute_struct* j = _root->first_attribute; j && j != hint; j = j->next_attribute) + { + const char_t* jname = j->name; + if (jname && impl::strequal(name_, jname)) + { + // update hint to maximize efficiency of searching for consecutive attributes + hint_._attr = j->next_attribute; + + return xml_attribute(j); + } + } + + return xml_attribute(); + } + + PUGI__FN xml_node xml_node::previous_sibling() const + { + if (!_root) return xml_node(); + xml_node_struct* prev = _root->prev_sibling_c; + return prev->next_sibling ? xml_node(prev) : xml_node(); + } + + PUGI__FN xml_node xml_node::parent() const + { + return _root ? xml_node(_root->parent) : xml_node(); + } + + PUGI__FN xml_node xml_node::root() const + { + return _root ? xml_node(&impl::get_document(_root)) : xml_node(); + } + + PUGI__FN xml_text xml_node::text() const + { + return xml_text(_root); + } + + PUGI__FN const char_t* xml_node::child_value() const + { + if (!_root) return PUGIXML_TEXT(""); + + // element nodes can have value if parse_embed_pcdata was used + if (PUGI__NODETYPE(_root) == node_element && _root->value) + return _root->value; + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + { + const char_t* ivalue = i->value; + if (impl::is_text_node(i) && ivalue) + return ivalue; + } + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_node::child_value(const char_t* name_) const + { + return child(name_).child_value(); + } + + PUGI__FN xml_attribute xml_node::first_attribute() const + { + if (!_root) return xml_attribute(); + return xml_attribute(_root->first_attribute); + } + + PUGI__FN xml_attribute xml_node::last_attribute() const + { + if (!_root) return xml_attribute(); + xml_attribute_struct* first = _root->first_attribute; + return first ? xml_attribute(first->prev_attribute_c) : xml_attribute(); + } + + PUGI__FN xml_node xml_node::first_child() const + { + if (!_root) return xml_node(); + return xml_node(_root->first_child); + } + + PUGI__FN xml_node xml_node::last_child() const + { + if (!_root) return xml_node(); + xml_node_struct* first = _root->first_child; + return first ? xml_node(first->prev_sibling_c) : xml_node(); + } + + PUGI__FN bool xml_node::set_name(const char_t* rhs) + { + xml_node_type type_ = _root ? PUGI__NODETYPE(_root) : node_null; + + if (type_ != node_element && type_ != node_pi && type_ != node_declaration) + return false; + + return impl::strcpy_insitu(_root->name, _root->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_node::set_value(const char_t* rhs, size_t sz) + { + xml_node_type type_ = _root ? PUGI__NODETYPE(_root) : node_null; + + if (type_ != node_pcdata && type_ != node_cdata && type_ != node_comment && type_ != node_pi && type_ != node_doctype) + return false; + + return impl::strcpy_insitu(_root->value, _root->header, impl::xml_memory_page_value_allocated_mask, rhs, sz); + } + + PUGI__FN bool xml_node::set_value(const char_t* rhs) + { + xml_node_type type_ = _root ? PUGI__NODETYPE(_root) : node_null; + + if (type_ != node_pcdata && type_ != node_cdata && type_ != node_comment && type_ != node_pi && type_ != node_doctype) + return false; + + return impl::strcpy_insitu(_root->value, _root->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN xml_attribute xml_node::append_attribute(const char_t* name_) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::append_attribute(a._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::prepend_attribute(const char_t* name_) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::prepend_attribute(a._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_attribute_after(const char_t* name_, const xml_attribute& attr) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_after(a._attr, attr._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_attribute_before(const char_t* name_, const xml_attribute& attr) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_before(a._attr, attr._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::append_copy(const xml_attribute& proto) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::append_attribute(a._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::prepend_copy(const xml_attribute& proto) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::prepend_attribute(a._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_copy_after(const xml_attribute& proto, const xml_attribute& attr) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_after(a._attr, attr._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_copy_before(const xml_attribute& proto, const xml_attribute& attr) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_before(a._attr, attr._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_node xml_node::append_child(xml_node_type type_) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::append_node(n._root, _root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::prepend_child(xml_node_type type_) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::prepend_node(n._root, _root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::insert_child_before(xml_node_type type_, const xml_node& node) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_before(n._root, node._root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::insert_child_after(xml_node_type type_, const xml_node& node) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_after(n._root, node._root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::append_child(const char_t* name_) + { + xml_node result = append_child(node_element); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::prepend_child(const char_t* name_) + { + xml_node result = prepend_child(node_element); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::insert_child_after(const char_t* name_, const xml_node& node) + { + xml_node result = insert_child_after(node_element, node); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::insert_child_before(const char_t* name_, const xml_node& node) + { + xml_node result = insert_child_before(node_element, node); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::append_copy(const xml_node& proto) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::append_node(n._root, _root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::prepend_copy(const xml_node& proto) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::prepend_node(n._root, _root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::insert_copy_after(const xml_node& proto, const xml_node& node) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_after(n._root, node._root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::insert_copy_before(const xml_node& proto, const xml_node& node) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_before(n._root, node._root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::append_move(const xml_node& moved) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::append_node(moved._root, _root); + + return moved; + } + + PUGI__FN xml_node xml_node::prepend_move(const xml_node& moved) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::prepend_node(moved._root, _root); + + return moved; + } + + PUGI__FN xml_node xml_node::insert_move_after(const xml_node& moved, const xml_node& node) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + if (moved._root == node._root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::insert_node_after(moved._root, node._root); + + return moved; + } + + PUGI__FN xml_node xml_node::insert_move_before(const xml_node& moved, const xml_node& node) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + if (moved._root == node._root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::insert_node_before(moved._root, node._root); + + return moved; + } + + PUGI__FN bool xml_node::remove_attribute(const char_t* name_) + { + return remove_attribute(attribute(name_)); + } + + PUGI__FN bool xml_node::remove_attribute(const xml_attribute& a) + { + if (!_root || !a._attr) return false; + if (!impl::is_attribute_of(a._attr, _root)) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + impl::remove_attribute(a._attr, _root); + impl::destroy_attribute(a._attr, alloc); + + return true; + } + + PUGI__FN bool xml_node::remove_attributes() + { + if (!_root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + for (xml_attribute_struct* attr = _root->first_attribute; attr; ) + { + xml_attribute_struct* next = attr->next_attribute; + + impl::destroy_attribute(attr, alloc); + + attr = next; + } + + _root->first_attribute = 0; + + return true; + } + + PUGI__FN bool xml_node::remove_child(const char_t* name_) + { + return remove_child(child(name_)); + } + + PUGI__FN bool xml_node::remove_child(const xml_node& n) + { + if (!_root || !n._root || n._root->parent != _root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + impl::remove_node(n._root); + impl::destroy_node(n._root, alloc); + + return true; + } + + PUGI__FN bool xml_node::remove_children() + { + if (!_root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + for (xml_node_struct* cur = _root->first_child; cur; ) + { + xml_node_struct* next = cur->next_sibling; + + impl::destroy_node(cur, alloc); + + cur = next; + } + + _root->first_child = 0; + + return true; + } + + PUGI__FN xml_parse_result xml_node::append_buffer(const void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + // append_buffer is only valid for elements/documents + if (!impl::allow_insert_child(type(), node_element)) return impl::make_parse_result(status_append_invalid_root); + + // get document node + impl::xml_document_struct* doc = &impl::get_document(_root); + + // disable document_buffer_order optimization since in a document with multiple buffers comparing buffer pointers does not make sense + doc->header |= impl::xml_memory_page_contents_shared_mask; + + // get extra buffer element (we'll store the document fragment buffer there so that we can deallocate it later) + impl::xml_memory_page* page = 0; + impl::xml_extra_buffer* extra = static_cast(doc->allocate_memory(sizeof(impl::xml_extra_buffer) + sizeof(void*), page)); + (void)page; + + if (!extra) return impl::make_parse_result(status_out_of_memory); + + #ifdef PUGIXML_COMPACT + // align the memory block to a pointer boundary; this is required for compact mode where memory allocations are only 4b aligned + // note that this requires up to sizeof(void*)-1 additional memory, which the allocation above takes into account + extra = reinterpret_cast((reinterpret_cast(extra) + (sizeof(void*) - 1)) & ~(sizeof(void*) - 1)); + #endif + + // add extra buffer to the list + extra->buffer = 0; + extra->next = doc->extra_buffers; + doc->extra_buffers = extra; + + // name of the root has to be NULL before parsing - otherwise closing node mismatches will not be detected at the top level + impl::name_null_sentry sentry(_root); + + return impl::load_buffer_impl(doc, _root, const_cast(contents), size, options, encoding, false, false, &extra->buffer); + } + + PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* name_, const char_t* attr_name, const char_t* attr_value) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + { + const char_t* iname = i->name; + if (iname && impl::strequal(name_, iname)) + { + for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) + { + const char_t* aname = a->name; + if (aname && impl::strequal(attr_name, aname)) + { + const char_t* avalue = a->value; + if (impl::strequal(attr_value, avalue ? avalue : PUGIXML_TEXT(""))) + return xml_node(i); + } + } + } + } + + return xml_node(); + } + + PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) + { + const char_t* aname = a->name; + if (aname && impl::strequal(attr_name, aname)) + { + const char_t* avalue = a->value; + if (impl::strequal(attr_value, avalue ? avalue : PUGIXML_TEXT(""))) + return xml_node(i); + } + } + + return xml_node(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN string_t xml_node::path(char_t delimiter) const + { + if (!_root) return string_t(); + + size_t offset = 0; + + for (xml_node_struct* i = _root; i; i = i->parent) + { + const char_t* iname = i->name; + offset += (i != _root); + offset += iname ? impl::strlength(iname) : 0; + } + + string_t result; + result.resize(offset); + + for (xml_node_struct* j = _root; j; j = j->parent) + { + if (j != _root) + result[--offset] = delimiter; + + const char_t* jname = j->name; + if (jname) + { + size_t length = impl::strlength(jname); + + offset -= length; + memcpy(&result[offset], jname, length * sizeof(char_t)); + } + } + + assert(offset == 0); + + return result; + } +#endif + + PUGI__FN xml_node xml_node::first_element_by_path(const char_t* path_, char_t delimiter) const + { + xml_node context = path_[0] == delimiter ? root() : *this; + + if (!context._root) return xml_node(); + + const char_t* path_segment = path_; + + while (*path_segment == delimiter) ++path_segment; + + const char_t* path_segment_end = path_segment; + + while (*path_segment_end && *path_segment_end != delimiter) ++path_segment_end; + + if (path_segment == path_segment_end) return context; + + const char_t* next_segment = path_segment_end; + + while (*next_segment == delimiter) ++next_segment; + + if (*path_segment == '.' && path_segment + 1 == path_segment_end) + return context.first_element_by_path(next_segment, delimiter); + else if (*path_segment == '.' && *(path_segment+1) == '.' && path_segment + 2 == path_segment_end) + return context.parent().first_element_by_path(next_segment, delimiter); + else + { + for (xml_node_struct* j = context._root->first_child; j; j = j->next_sibling) + { + const char_t* jname = j->name; + if (jname && impl::strequalrange(jname, path_segment, static_cast(path_segment_end - path_segment))) + { + xml_node subsearch = xml_node(j).first_element_by_path(next_segment, delimiter); + + if (subsearch) return subsearch; + } + } + + return xml_node(); + } + } + + PUGI__FN bool xml_node::traverse(xml_tree_walker& walker) + { + walker._depth = -1; + + xml_node arg_begin(_root); + if (!walker.begin(arg_begin)) return false; + + xml_node_struct* cur = _root ? _root->first_child + 0 : 0; + + if (cur) + { + ++walker._depth; + + do + { + xml_node arg_for_each(cur); + if (!walker.for_each(arg_for_each)) + return false; + + if (cur->first_child) + { + ++walker._depth; + cur = cur->first_child; + } + else if (cur->next_sibling) + cur = cur->next_sibling; + else + { + while (!cur->next_sibling && cur != _root && cur->parent) + { + --walker._depth; + cur = cur->parent; + } + + if (cur != _root) + cur = cur->next_sibling; + } + } + while (cur && cur != _root); + } + + assert(walker._depth == -1); + + xml_node arg_end(_root); + return walker.end(arg_end); + } + + PUGI__FN size_t xml_node::hash_value() const + { + return static_cast(reinterpret_cast(_root) / sizeof(xml_node_struct)); + } + + PUGI__FN xml_node_struct* xml_node::internal_object() const + { + return _root; + } + + PUGI__FN void xml_node::print(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const + { + if (!_root) return; + + impl::xml_buffered_writer buffered_writer(writer, encoding); + + impl::node_output(buffered_writer, _root, indent, flags, depth); + + buffered_writer.flush(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const + { + xml_writer_stream writer(stream); + + print(writer, indent, flags, encoding, depth); + } + + PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, unsigned int depth) const + { + xml_writer_stream writer(stream); + + print(writer, indent, flags, encoding_wchar, depth); + } +#endif + + PUGI__FN ptrdiff_t xml_node::offset_debug() const + { + if (!_root) return -1; + + impl::xml_document_struct& doc = impl::get_document(_root); + + // we can determine the offset reliably only if there is exactly once parse buffer + if (!doc.buffer || doc.extra_buffers) return -1; + + switch (type()) + { + case node_document: + return 0; + + case node_element: + case node_declaration: + case node_pi: + return _root->name && (_root->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0 ? _root->name - doc.buffer : -1; + + case node_pcdata: + case node_cdata: + case node_comment: + case node_doctype: + return _root->value && (_root->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0 ? _root->value - doc.buffer : -1; + + default: + assert(false && "Invalid node type"); // unreachable + return -1; + } + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_node& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_node& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_text::xml_text(xml_node_struct* root): _root(root) + { + } + + PUGI__FN xml_node_struct* xml_text::_data() const + { + if (!_root || impl::is_text_node(_root)) return _root; + + // element nodes can have value if parse_embed_pcdata was used + if (PUGI__NODETYPE(_root) == node_element && _root->value) + return _root; + + for (xml_node_struct* node = _root->first_child; node; node = node->next_sibling) + if (impl::is_text_node(node)) + return node; + + return 0; + } + + PUGI__FN xml_node_struct* xml_text::_data_new() + { + xml_node_struct* d = _data(); + if (d) return d; + + return xml_node(_root).append_child(node_pcdata).internal_object(); + } + + PUGI__FN xml_text::xml_text(): _root(0) + { + } + + PUGI__FN static void unspecified_bool_xml_text(xml_text***) + { + } + + PUGI__FN xml_text::operator xml_text::unspecified_bool_type() const + { + return _data() ? unspecified_bool_xml_text : 0; + } + + PUGI__FN bool xml_text::operator!() const + { + return !_data(); + } + + PUGI__FN bool xml_text::empty() const + { + return _data() == 0; + } + + PUGI__FN const char_t* xml_text::get() const + { + xml_node_struct* d = _data(); + if (!d) return PUGIXML_TEXT(""); + const char_t* value = d->value; + return value ? value : PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_text::as_string(const char_t* def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? value : def; + } + + PUGI__FN int xml_text::as_int(int def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_int(value) : def; + } + + PUGI__FN unsigned int xml_text::as_uint(unsigned int def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_uint(value) : def; + } + + PUGI__FN double xml_text::as_double(double def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_double(value) : def; + } + + PUGI__FN float xml_text::as_float(float def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_float(value) : def; + } + + PUGI__FN bool xml_text::as_bool(bool def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_bool(value) : def; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long xml_text::as_llong(long long def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_llong(value) : def; + } + + PUGI__FN unsigned long long xml_text::as_ullong(unsigned long long def) const + { + xml_node_struct* d = _data(); + if (!d) return def; + const char_t* value = d->value; + return value ? impl::get_value_ullong(value) : def; + } +#endif + + PUGI__FN bool xml_text::set(const char_t* rhs, size_t sz) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::strcpy_insitu(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, sz) : false; + } + + PUGI__FN bool xml_text::set(const char_t* rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::strcpy_insitu(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)) : false; + } + + PUGI__FN bool xml_text::set(int rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned int rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } + + PUGI__FN bool xml_text::set(long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } + + PUGI__FN bool xml_text::set(float rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, default_float_precision) : false; + } + + PUGI__FN bool xml_text::set(float rhs, int precision) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, precision) : false; + } + + PUGI__FN bool xml_text::set(double rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, default_double_precision) : false; + } + + PUGI__FN bool xml_text::set(double rhs, int precision) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, precision) : false; + } + + PUGI__FN bool xml_text::set(bool rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_bool(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN bool xml_text::set(long long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned long long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } +#endif + + PUGI__FN xml_text& xml_text::operator=(const char_t* rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(int rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned int rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(double rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(float rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(bool rhs) + { + set(rhs); + return *this; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN xml_text& xml_text::operator=(long long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned long long rhs) + { + set(rhs); + return *this; + } +#endif + + PUGI__FN xml_node xml_text::data() const + { + return xml_node(_data()); + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_text& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_text& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_node_iterator::xml_node_iterator() + { + } + + PUGI__FN xml_node_iterator::xml_node_iterator(const xml_node& node): _wrap(node), _parent(node.parent()) + { + } + + PUGI__FN xml_node_iterator::xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) + { + } + + PUGI__FN bool xml_node_iterator::operator==(const xml_node_iterator& rhs) const + { + return _wrap._root == rhs._wrap._root && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_node_iterator::operator!=(const xml_node_iterator& rhs) const + { + return _wrap._root != rhs._wrap._root || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_node& xml_node_iterator::operator*() const + { + assert(_wrap._root); + return _wrap; + } + + PUGI__FN xml_node* xml_node_iterator::operator->() const + { + assert(_wrap._root); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_node_iterator& xml_node_iterator::operator++() + { + assert(_wrap._root); + _wrap._root = _wrap._root->next_sibling; + return *this; + } + + PUGI__FN xml_node_iterator xml_node_iterator::operator++(int) + { + xml_node_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_node_iterator& xml_node_iterator::operator--() + { + _wrap = _wrap._root ? _wrap.previous_sibling() : _parent.last_child(); + return *this; + } + + PUGI__FN xml_node_iterator xml_node_iterator::operator--(int) + { + xml_node_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator() + { + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent): _wrap(attr), _parent(parent) + { + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) + { + } + + PUGI__FN bool xml_attribute_iterator::operator==(const xml_attribute_iterator& rhs) const + { + return _wrap._attr == rhs._wrap._attr && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_attribute_iterator::operator!=(const xml_attribute_iterator& rhs) const + { + return _wrap._attr != rhs._wrap._attr || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_attribute& xml_attribute_iterator::operator*() const + { + assert(_wrap._attr); + return _wrap; + } + + PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const + { + assert(_wrap._attr); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_attribute_iterator& xml_attribute_iterator::operator++() + { + assert(_wrap._attr); + _wrap._attr = _wrap._attr->next_attribute; + return *this; + } + + PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator++(int) + { + xml_attribute_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_attribute_iterator& xml_attribute_iterator::operator--() + { + _wrap = _wrap._attr ? _wrap.previous_attribute() : _parent.last_attribute(); + return *this; + } + + PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator--(int) + { + xml_attribute_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(): _name(0) + { + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(const xml_node& node, const char_t* name): _wrap(node), _parent(node.parent()), _name(name) + { + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(xml_node_struct* ref, xml_node_struct* parent, const char_t* name): _wrap(ref), _parent(parent), _name(name) + { + } + + PUGI__FN bool xml_named_node_iterator::operator==(const xml_named_node_iterator& rhs) const + { + return _wrap._root == rhs._wrap._root && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_named_node_iterator::operator!=(const xml_named_node_iterator& rhs) const + { + return _wrap._root != rhs._wrap._root || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_node& xml_named_node_iterator::operator*() const + { + assert(_wrap._root); + return _wrap; + } + + PUGI__FN xml_node* xml_named_node_iterator::operator->() const + { + assert(_wrap._root); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_named_node_iterator& xml_named_node_iterator::operator++() + { + assert(_wrap._root); + _wrap = _wrap.next_sibling(_name); + return *this; + } + + PUGI__FN xml_named_node_iterator xml_named_node_iterator::operator++(int) + { + xml_named_node_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_named_node_iterator& xml_named_node_iterator::operator--() + { + if (_wrap._root) + _wrap = _wrap.previous_sibling(_name); + else + { + _wrap = _parent.last_child(); + + if (!impl::strequal(_wrap.name(), _name)) + _wrap = _wrap.previous_sibling(_name); + } + + return *this; + } + + PUGI__FN xml_named_node_iterator xml_named_node_iterator::operator--(int) + { + xml_named_node_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_parse_result::xml_parse_result(): status(status_internal_error), offset(0), encoding(encoding_auto) + { + } + + PUGI__FN xml_parse_result::operator bool() const + { + return status == status_ok; + } + + PUGI__FN const char* xml_parse_result::description() const + { + switch (status) + { + case status_ok: return "No error"; + + case status_file_not_found: return "File was not found"; + case status_io_error: return "Error reading from file/stream"; + case status_out_of_memory: return "Could not allocate memory"; + case status_internal_error: return "Internal error occurred"; + + case status_unrecognized_tag: return "Could not determine tag type"; + + case status_bad_pi: return "Error parsing document declaration/processing instruction"; + case status_bad_comment: return "Error parsing comment"; + case status_bad_cdata: return "Error parsing CDATA section"; + case status_bad_doctype: return "Error parsing document type declaration"; + case status_bad_pcdata: return "Error parsing PCDATA section"; + case status_bad_start_element: return "Error parsing start element tag"; + case status_bad_attribute: return "Error parsing element attribute"; + case status_bad_end_element: return "Error parsing end element tag"; + case status_end_element_mismatch: return "Start-end tags mismatch"; + + case status_append_invalid_root: return "Unable to append nodes: root is not an element or document"; + + case status_no_document_element: return "No document element found"; + + default: return "Unknown error"; + } + } + + PUGI__FN xml_document::xml_document(): _buffer(0) + { + _create(); + } + + PUGI__FN xml_document::~xml_document() + { + _destroy(); + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xml_document::xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT: _buffer(0) + { + _create(); + _move(rhs); + } + + PUGI__FN xml_document& xml_document::operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT + { + if (this == &rhs) return *this; + + _destroy(); + _create(); + _move(rhs); + + return *this; + } +#endif + + PUGI__FN void xml_document::reset() + { + _destroy(); + _create(); + } + + PUGI__FN void xml_document::reset(const xml_document& proto) + { + reset(); + + impl::node_copy_tree(_root, proto._root); + } + + PUGI__FN void xml_document::_create() + { + assert(!_root); + + #ifdef PUGIXML_COMPACT + // space for page marker for the first page (uint32_t), rounded up to pointer size; assumes pointers are at least 32-bit + const size_t page_offset = sizeof(void*); + #else + const size_t page_offset = 0; + #endif + + // initialize sentinel page + PUGI__STATIC_ASSERT(sizeof(impl::xml_memory_page) + sizeof(impl::xml_document_struct) + page_offset <= sizeof(_memory)); + + // prepare page structure + impl::xml_memory_page* page = impl::xml_memory_page::construct(_memory); + assert(page); + + page->busy_size = impl::xml_memory_page_size; + + // setup first page marker + #ifdef PUGIXML_COMPACT + // round-trip through void* to avoid 'cast increases required alignment of target type' warning + page->compact_page_marker = reinterpret_cast(static_cast(reinterpret_cast(page) + sizeof(impl::xml_memory_page))); + *page->compact_page_marker = sizeof(impl::xml_memory_page); + #endif + + // allocate new root + _root = new (reinterpret_cast(page) + sizeof(impl::xml_memory_page) + page_offset) impl::xml_document_struct(page); + _root->prev_sibling_c = _root; + + // setup sentinel page + page->allocator = static_cast(_root); + + // setup hash table pointer in allocator + #ifdef PUGIXML_COMPACT + page->allocator->_hash = &static_cast(_root)->hash; + #endif + + // verify the document allocation + assert(reinterpret_cast(_root) + sizeof(impl::xml_document_struct) <= _memory + sizeof(_memory)); + } + + PUGI__FN void xml_document::_destroy() + { + assert(_root); + + // destroy static storage + if (_buffer) + { + impl::xml_memory::deallocate(_buffer); + _buffer = 0; + } + + // destroy extra buffers (note: no need to destroy linked list nodes, they're allocated using document allocator) + for (impl::xml_extra_buffer* extra = static_cast(_root)->extra_buffers; extra; extra = extra->next) + { + if (extra->buffer) impl::xml_memory::deallocate(extra->buffer); + } + + // destroy dynamic storage, leave sentinel page (it's in static memory) + impl::xml_memory_page* root_page = PUGI__GETPAGE(_root); + assert(root_page && !root_page->prev); + assert(reinterpret_cast(root_page) >= _memory && reinterpret_cast(root_page) < _memory + sizeof(_memory)); + + for (impl::xml_memory_page* page = root_page->next; page; ) + { + impl::xml_memory_page* next = page->next; + + impl::xml_allocator::deallocate_page(page); + + page = next; + } + + #ifdef PUGIXML_COMPACT + // destroy hash table + static_cast(_root)->hash.clear(); + #endif + + _root = 0; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN void xml_document::_move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT + { + impl::xml_document_struct* doc = static_cast(_root); + impl::xml_document_struct* other = static_cast(rhs._root); + + // save first child pointer for later; this needs hash access + xml_node_struct* other_first_child = other->first_child; + + #ifdef PUGIXML_COMPACT + // reserve space for the hash table up front; this is the only operation that can fail + // if it does, we have no choice but to throw (if we have exceptions) + if (other_first_child) + { + size_t other_children = 0; + for (xml_node_struct* node = other_first_child; node; node = node->next_sibling) + other_children++; + + // in compact mode, each pointer assignment could result in a hash table request + // during move, we have to relocate document first_child and parents of all children + // normally there's just one child and its parent has a pointerless encoding but + // we assume the worst here + if (!other->_hash->reserve(other_children + 1)) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return; + #else + throw std::bad_alloc(); + #endif + } + } + #endif + + // move allocation state + // note that other->_root may point to the embedded document page, in which case we should keep original (empty) state + if (other->_root != PUGI__GETPAGE(other)) + { + doc->_root = other->_root; + doc->_busy_size = other->_busy_size; + } + + // move buffer state + doc->buffer = other->buffer; + doc->extra_buffers = other->extra_buffers; + _buffer = rhs._buffer; + + #ifdef PUGIXML_COMPACT + // move compact hash; note that the hash table can have pointers to other but they will be "inactive", similarly to nodes removed with remove_child + doc->hash = other->hash; + doc->_hash = &doc->hash; + + // make sure we don't access other hash up until the end when we reinitialize other document + other->_hash = 0; + #endif + + // move page structure + impl::xml_memory_page* doc_page = PUGI__GETPAGE(doc); + assert(doc_page && !doc_page->prev && !doc_page->next); + + impl::xml_memory_page* other_page = PUGI__GETPAGE(other); + assert(other_page && !other_page->prev); + + // relink pages since root page is embedded into xml_document + if (impl::xml_memory_page* page = other_page->next) + { + assert(page->prev == other_page); + + page->prev = doc_page; + + doc_page->next = page; + other_page->next = 0; + } + + // make sure pages point to the correct document state + for (impl::xml_memory_page* page = doc_page->next; page; page = page->next) + { + assert(page->allocator == other); + + page->allocator = doc; + + #ifdef PUGIXML_COMPACT + // this automatically migrates most children between documents and prevents ->parent assignment from allocating + if (page->compact_shared_parent == other) + page->compact_shared_parent = doc; + #endif + } + + // move tree structure + assert(!doc->first_child); + + doc->first_child = other_first_child; + + for (xml_node_struct* node = other_first_child; node; node = node->next_sibling) + { + #ifdef PUGIXML_COMPACT + // most children will have migrated when we reassigned compact_shared_parent + assert(node->parent == other || node->parent == doc); + + node->parent = doc; + #else + assert(node->parent == other); + node->parent = doc; + #endif + } + + // reset other document + new (other) impl::xml_document_struct(PUGI__GETPAGE(other)); + rhs._buffer = 0; + } +#endif + +#ifndef PUGIXML_NO_STL + PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_stream_impl(static_cast(_root), stream, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options) + { + reset(); + + return impl::load_stream_impl(static_cast(_root), stream, options, encoding_wchar, &_buffer); + } +#endif + + PUGI__FN xml_parse_result xml_document::load_string(const char_t* contents, unsigned int options) + { + // Force native encoding (skip autodetection) + #ifdef PUGIXML_WCHAR_MODE + xml_encoding encoding = encoding_wchar; + #else + xml_encoding encoding = encoding_utf8; + #endif + + return load_buffer(contents, impl::strlength(contents) * sizeof(char_t), options, encoding); + } + + PUGI__FN xml_parse_result xml_document::load(const char_t* contents, unsigned int options) + { + return load_string(contents, options); + } + + PUGI__FN xml_parse_result xml_document::load_file(const char* path_, unsigned int options, xml_encoding encoding) + { + reset(); + + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file(path_, "rb"), impl::close_file); + + return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_file(const wchar_t* path_, unsigned int options, xml_encoding encoding) + { + reset(); + + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file_wide(path_, L"rb"), impl::close_file); + + return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer(const void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, const_cast(contents), size, options, encoding, false, false, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer_inplace(void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, contents, size, options, encoding, true, false, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer_inplace_own(void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, contents, size, options, encoding, true, true, &_buffer); + } + + PUGI__FN void xml_document::save(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + impl::xml_buffered_writer buffered_writer(writer, encoding); + + if ((flags & format_write_bom) && encoding != encoding_latin1) + { + // BOM always represents the codepoint U+FEFF, so just write it in native encoding + #ifdef PUGIXML_WCHAR_MODE + unsigned int bom = 0xfeff; + buffered_writer.write(static_cast(bom)); + #else + buffered_writer.write('\xef', '\xbb', '\xbf'); + #endif + } + + if (!(flags & format_no_declaration) && !impl::has_declaration(_root)) + { + buffered_writer.write_string(PUGIXML_TEXT("'); + if (!(flags & format_raw)) buffered_writer.write('\n'); + } + + impl::node_output(buffered_writer, _root, indent, flags, 0); + + buffered_writer.flush(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + xml_writer_stream writer(stream); + + save(writer, indent, flags, encoding); + } + + PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags) const + { + xml_writer_stream writer(stream); + + save(writer, indent, flags, encoding_wchar); + } +#endif + + PUGI__FN bool xml_document::save_file(const char* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file(path_, (flags & format_save_file_text) ? "w" : "wb"), impl::close_file); + + return impl::save_file_impl(*this, file.data, indent, flags, encoding) && fclose(file.release()) == 0; + } + + PUGI__FN bool xml_document::save_file(const wchar_t* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file_wide(path_, (flags & format_save_file_text) ? L"w" : L"wb"), impl::close_file); + + return impl::save_file_impl(*this, file.data, indent, flags, encoding) && fclose(file.release()) == 0; + } + + PUGI__FN xml_node xml_document::document_element() const + { + assert(_root); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + if (PUGI__NODETYPE(i) == node_element) + return xml_node(i); + + return xml_node(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const wchar_t* str) + { + assert(str); + + return impl::as_utf8_impl(str, impl::strlength_wide(str)); + } + + PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const std::basic_string& str) + { + return impl::as_utf8_impl(str.c_str(), str.size()); + } + + PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const char* str) + { + assert(str); + + return impl::as_wide_impl(str, strlen(str)); + } + + PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const std::string& str) + { + return impl::as_wide_impl(str.c_str(), str.size()); + } +#endif + + PUGI__FN void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate) + { + impl::xml_memory::allocate = allocate; + impl::xml_memory::deallocate = deallocate; + } + + PUGI__FN allocation_function PUGIXML_FUNCTION get_memory_allocation_function() + { + return impl::xml_memory::allocate; + } + + PUGI__FN deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function() + { + return impl::xml_memory::deallocate; + } +} + +#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) +namespace std +{ + // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_attribute_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_named_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } +} +#endif + +#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) +namespace std +{ + // Workarounds for (non-standard) iterator category detection + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_attribute_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_named_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } +} +#endif + +#ifndef PUGIXML_NO_XPATH +// STL replacements +PUGI__NS_BEGIN + struct equal_to + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs == rhs; + } + }; + + struct not_equal_to + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs != rhs; + } + }; + + struct less + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs < rhs; + } + }; + + struct less_equal + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs <= rhs; + } + }; + + template inline void swap(T& lhs, T& rhs) + { + T temp = lhs; + lhs = rhs; + rhs = temp; + } + + template PUGI__FN I min_element(I begin, I end, const Pred& pred) + { + I result = begin; + + for (I it = begin + 1; it != end; ++it) + if (pred(*it, *result)) + result = it; + + return result; + } + + template PUGI__FN void reverse(I begin, I end) + { + while (end - begin > 1) + swap(*begin++, *--end); + } + + template PUGI__FN I unique(I begin, I end) + { + // fast skip head + while (end - begin > 1 && *begin != *(begin + 1)) + begin++; + + if (begin == end) + return begin; + + // last written element + I write = begin++; + + // merge unique elements + while (begin != end) + { + if (*begin != *write) + *++write = *begin++; + else + begin++; + } + + // past-the-end (write points to live element) + return write + 1; + } + + template PUGI__FN void insertion_sort(T* begin, T* end, const Pred& pred) + { + if (begin == end) + return; + + for (T* it = begin + 1; it != end; ++it) + { + T val = *it; + T* hole = it; + + // move hole backwards + while (hole > begin && pred(val, *(hole - 1))) + { + *hole = *(hole - 1); + hole--; + } + + // fill hole with element + *hole = val; + } + } + + template inline I median3(I first, I middle, I last, const Pred& pred) + { + if (pred(*middle, *first)) + swap(middle, first); + if (pred(*last, *middle)) + swap(last, middle); + if (pred(*middle, *first)) + swap(middle, first); + + return middle; + } + + template PUGI__FN void partition3(T* begin, T* end, T pivot, const Pred& pred, T** out_eqbeg, T** out_eqend) + { + // invariant: array is split into 4 groups: = < ? > (each variable denotes the boundary between the groups) + T* eq = begin; + T* lt = begin; + T* gt = end; + + while (lt < gt) + { + if (pred(*lt, pivot)) + lt++; + else if (*lt == pivot) + swap(*eq++, *lt++); + else + swap(*lt, *--gt); + } + + // we now have just 4 groups: = < >; move equal elements to the middle + T* eqbeg = gt; + + for (T* it = begin; it != eq; ++it) + swap(*it, *--eqbeg); + + *out_eqbeg = eqbeg; + *out_eqend = gt; + } + + template PUGI__FN void sort(I begin, I end, const Pred& pred) + { + // sort large chunks + while (end - begin > 16) + { + // find median element + I middle = begin + (end - begin) / 2; + I median = median3(begin, middle, end - 1, pred); + + // partition in three chunks (< = >) + I eqbeg, eqend; + partition3(begin, end, *median, pred, &eqbeg, &eqend); + + // loop on larger half + if (eqbeg - begin > end - eqend) + { + sort(eqend, end, pred); + end = eqbeg; + } + else + { + sort(begin, eqbeg, pred); + begin = eqend; + } + } + + // insertion sort small chunk + insertion_sort(begin, end, pred); + } + + PUGI__FN bool hash_insert(const void** table, size_t size, const void* key) + { + assert(key); + + unsigned int h = static_cast(reinterpret_cast(key)); + + // MurmurHash3 32-bit finalizer + h ^= h >> 16; + h *= 0x85ebca6bu; + h ^= h >> 13; + h *= 0xc2b2ae35u; + h ^= h >> 16; + + size_t hashmod = size - 1; + size_t bucket = h & hashmod; + + for (size_t probe = 0; probe <= hashmod; ++probe) + { + if (table[bucket] == 0) + { + table[bucket] = key; + return true; + } + + if (table[bucket] == key) + return false; + + // hash collision, quadratic probing + bucket = (bucket + probe + 1) & hashmod; + } + + assert(false && "Hash table is full"); // unreachable + return false; + } +PUGI__NS_END + +// Allocator used for AST and evaluation stacks +PUGI__NS_BEGIN + static const size_t xpath_memory_page_size = + #ifdef PUGIXML_MEMORY_XPATH_PAGE_SIZE + PUGIXML_MEMORY_XPATH_PAGE_SIZE + #else + 4096 + #endif + ; + + static const uintptr_t xpath_memory_block_alignment = sizeof(double) > sizeof(void*) ? sizeof(double) : sizeof(void*); + + struct xpath_memory_block + { + xpath_memory_block* next; + size_t capacity; + + union + { + char data[xpath_memory_page_size]; + double alignment; + }; + }; + + struct xpath_allocator + { + xpath_memory_block* _root; + size_t _root_size; + bool* _error; + + xpath_allocator(xpath_memory_block* root, bool* error = 0): _root(root), _root_size(0), _error(error) + { + } + + void* allocate(size_t size) + { + // round size up to block alignment boundary + size = (size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + + if (_root_size + size <= _root->capacity) + { + void* buf = &_root->data[0] + _root_size; + _root_size += size; + return buf; + } + else + { + // make sure we have at least 1/4th of the page free after allocation to satisfy subsequent allocation requests + size_t block_capacity_base = sizeof(_root->data); + size_t block_capacity_req = size + block_capacity_base / 4; + size_t block_capacity = (block_capacity_base > block_capacity_req) ? block_capacity_base : block_capacity_req; + + size_t block_size = block_capacity + offsetof(xpath_memory_block, data); + + xpath_memory_block* block = static_cast(xml_memory::allocate(block_size)); + if (!block) + { + if (_error) *_error = true; + return 0; + } + + block->next = _root; + block->capacity = block_capacity; + + _root = block; + _root_size = size; + + return block->data; + } + } + + void* reallocate(void* ptr, size_t old_size, size_t new_size) + { + // round size up to block alignment boundary + old_size = (old_size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + new_size = (new_size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + + // we can only reallocate the last object + assert(ptr == 0 || static_cast(ptr) + old_size == &_root->data[0] + _root_size); + + // try to reallocate the object inplace + if (ptr && _root_size - old_size + new_size <= _root->capacity) + { + _root_size = _root_size - old_size + new_size; + return ptr; + } + + // allocate a new block + void* result = allocate(new_size); + if (!result) return 0; + + // we have a new block + if (ptr) + { + // copy old data (we only support growing) + assert(new_size >= old_size); + memcpy(result, ptr, old_size); + + // free the previous page if it had no other objects + assert(_root->data == result); + assert(_root->next); + + if (_root->next->data == ptr) + { + // deallocate the whole page, unless it was the first one + xpath_memory_block* next = _root->next->next; + + if (next) + { + xml_memory::deallocate(_root->next); + _root->next = next; + } + } + } + + return result; + } + + void revert(const xpath_allocator& state) + { + // free all new pages + xpath_memory_block* cur = _root; + + while (cur != state._root) + { + xpath_memory_block* next = cur->next; + + xml_memory::deallocate(cur); + + cur = next; + } + + // restore state + _root = state._root; + _root_size = state._root_size; + } + + void release() + { + xpath_memory_block* cur = _root; + assert(cur); + + while (cur->next) + { + xpath_memory_block* next = cur->next; + + xml_memory::deallocate(cur); + + cur = next; + } + } + }; + + struct xpath_allocator_capture + { + xpath_allocator_capture(xpath_allocator* alloc): _target(alloc), _state(*alloc) + { + } + + ~xpath_allocator_capture() + { + _target->revert(_state); + } + + xpath_allocator* _target; + xpath_allocator _state; + }; + + struct xpath_stack + { + xpath_allocator* result; + xpath_allocator* temp; + }; + + struct xpath_stack_data + { + xpath_memory_block blocks[2]; + xpath_allocator result; + xpath_allocator temp; + xpath_stack stack; + bool oom; + + xpath_stack_data(): result(blocks + 0, &oom), temp(blocks + 1, &oom), oom(false) + { + blocks[0].next = blocks[1].next = 0; + blocks[0].capacity = blocks[1].capacity = sizeof(blocks[0].data); + + stack.result = &result; + stack.temp = &temp; + } + + ~xpath_stack_data() + { + result.release(); + temp.release(); + } + }; +PUGI__NS_END + +// String class +PUGI__NS_BEGIN + class xpath_string + { + const char_t* _buffer; + bool _uses_heap; + size_t _length_heap; + + static char_t* duplicate_string(const char_t* string, size_t length, xpath_allocator* alloc) + { + char_t* result = static_cast(alloc->allocate((length + 1) * sizeof(char_t))); + if (!result) return 0; + + memcpy(result, string, length * sizeof(char_t)); + result[length] = 0; + + return result; + } + + xpath_string(const char_t* buffer, bool uses_heap_, size_t length_heap): _buffer(buffer), _uses_heap(uses_heap_), _length_heap(length_heap) + { + } + + public: + static xpath_string from_const(const char_t* str) + { + return xpath_string(str, false, 0); + } + + static xpath_string from_heap_preallocated(const char_t* begin, const char_t* end) + { + assert(begin <= end && *end == 0); + + return xpath_string(begin, true, static_cast(end - begin)); + } + + static xpath_string from_heap(const char_t* begin, const char_t* end, xpath_allocator* alloc) + { + assert(begin <= end); + + if (begin == end) + return xpath_string(); + + size_t length = static_cast(end - begin); + const char_t* data = duplicate_string(begin, length, alloc); + + return data ? xpath_string(data, true, length) : xpath_string(); + } + + xpath_string(): _buffer(PUGIXML_TEXT("")), _uses_heap(false), _length_heap(0) + { + } + + void append(const xpath_string& o, xpath_allocator* alloc) + { + // skip empty sources + if (!*o._buffer) return; + + // fast append for constant empty target and constant source + if (!*_buffer && !_uses_heap && !o._uses_heap) + { + _buffer = o._buffer; + } + else + { + // need to make heap copy + size_t target_length = length(); + size_t source_length = o.length(); + size_t result_length = target_length + source_length; + + // allocate new buffer + char_t* result = static_cast(alloc->reallocate(_uses_heap ? const_cast(_buffer) : 0, (target_length + 1) * sizeof(char_t), (result_length + 1) * sizeof(char_t))); + if (!result) return; + + // append first string to the new buffer in case there was no reallocation + if (!_uses_heap) memcpy(result, _buffer, target_length * sizeof(char_t)); + + // append second string to the new buffer + memcpy(result + target_length, o._buffer, source_length * sizeof(char_t)); + result[result_length] = 0; + + // finalize + _buffer = result; + _uses_heap = true; + _length_heap = result_length; + } + } + + const char_t* c_str() const + { + return _buffer; + } + + size_t length() const + { + return _uses_heap ? _length_heap : strlength(_buffer); + } + + char_t* data(xpath_allocator* alloc) + { + // make private heap copy + if (!_uses_heap) + { + size_t length_ = strlength(_buffer); + const char_t* data_ = duplicate_string(_buffer, length_, alloc); + + if (!data_) return 0; + + _buffer = data_; + _uses_heap = true; + _length_heap = length_; + } + + return const_cast(_buffer); + } + + bool empty() const + { + return *_buffer == 0; + } + + bool operator==(const xpath_string& o) const + { + return strequal(_buffer, o._buffer); + } + + bool operator!=(const xpath_string& o) const + { + return !strequal(_buffer, o._buffer); + } + + bool uses_heap() const + { + return _uses_heap; + } + }; +PUGI__NS_END + +PUGI__NS_BEGIN + PUGI__FN bool starts_with(const char_t* string, const char_t* pattern) + { + while (*pattern && *string == *pattern) + { + string++; + pattern++; + } + + return *pattern == 0; + } + + PUGI__FN const char_t* find_char(const char_t* s, char_t c) + { + #ifdef PUGIXML_WCHAR_MODE + return wcschr(s, c); + #else + return strchr(s, c); + #endif + } + + PUGI__FN const char_t* find_substring(const char_t* s, const char_t* p) + { + #ifdef PUGIXML_WCHAR_MODE + // MSVC6 wcsstr bug workaround (if s is empty it always returns 0) + return (*p == 0) ? s : wcsstr(s, p); + #else + return strstr(s, p); + #endif + } + + // Converts symbol to lower case, if it is an ASCII one + PUGI__FN char_t tolower_ascii(char_t ch) + { + return static_cast(ch - 'A') < 26 ? static_cast(ch | ' ') : ch; + } + + PUGI__FN xpath_string string_value(const xpath_node& na, xpath_allocator* alloc) + { + if (na.attribute()) + return xpath_string::from_const(na.attribute().value()); + else + { + xml_node n = na.node(); + + switch (n.type()) + { + case node_pcdata: + case node_cdata: + case node_comment: + case node_pi: + return xpath_string::from_const(n.value()); + + case node_document: + case node_element: + { + xpath_string result; + + // element nodes can have value if parse_embed_pcdata was used + if (n.value()[0]) + result.append(xpath_string::from_const(n.value()), alloc); + + xml_node cur = n.first_child(); + + while (cur && cur != n) + { + if (cur.type() == node_pcdata || cur.type() == node_cdata) + result.append(xpath_string::from_const(cur.value()), alloc); + + if (cur.first_child()) + cur = cur.first_child(); + else if (cur.next_sibling()) + cur = cur.next_sibling(); + else + { + while (!cur.next_sibling() && cur != n) + cur = cur.parent(); + + if (cur != n) cur = cur.next_sibling(); + } + } + + return result; + } + + default: + return xpath_string(); + } + } + } + + PUGI__FN bool node_is_before_sibling(xml_node_struct* ln, xml_node_struct* rn) + { + assert(ln->parent == rn->parent); + + // there is no common ancestor (the shared parent is null), nodes are from different documents + if (!ln->parent) return ln < rn; + + // determine sibling order + xml_node_struct* ls = ln; + xml_node_struct* rs = rn; + + while (ls && rs) + { + if (ls == rn) return true; + if (rs == ln) return false; + + ls = ls->next_sibling; + rs = rs->next_sibling; + } + + // if rn sibling chain ended ln must be before rn + return !rs; + } + + PUGI__FN bool node_is_before(xml_node_struct* ln, xml_node_struct* rn) + { + // find common ancestor at the same depth, if any + xml_node_struct* lp = ln; + xml_node_struct* rp = rn; + + while (lp && rp && lp->parent != rp->parent) + { + lp = lp->parent; + rp = rp->parent; + } + + // parents are the same! + if (lp && rp) return node_is_before_sibling(lp, rp); + + // nodes are at different depths, need to normalize heights + bool left_higher = !lp; + + while (lp) + { + lp = lp->parent; + ln = ln->parent; + } + + while (rp) + { + rp = rp->parent; + rn = rn->parent; + } + + // one node is the ancestor of the other + if (ln == rn) return left_higher; + + // find common ancestor... again + while (ln->parent != rn->parent) + { + ln = ln->parent; + rn = rn->parent; + } + + return node_is_before_sibling(ln, rn); + } + + PUGI__FN bool node_is_ancestor(xml_node_struct* parent, xml_node_struct* node) + { + while (node && node != parent) node = node->parent; + + return parent && node == parent; + } + + PUGI__FN const void* document_buffer_order(const xpath_node& xnode) + { + xml_node_struct* node = xnode.node().internal_object(); + + if (node) + { + if ((get_document(node).header & xml_memory_page_contents_shared_mask) == 0) + { + if (node->name && (node->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0) return node->name; + if (node->value && (node->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0) return node->value; + } + + return 0; + } + + xml_attribute_struct* attr = xnode.attribute().internal_object(); + + if (attr) + { + if ((get_document(attr).header & xml_memory_page_contents_shared_mask) == 0) + { + if ((attr->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0) return attr->name; + if ((attr->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0) return attr->value; + } + + return 0; + } + + return 0; + } + + struct document_order_comparator + { + bool operator()(const xpath_node& lhs, const xpath_node& rhs) const + { + // optimized document order based check + const void* lo = document_buffer_order(lhs); + const void* ro = document_buffer_order(rhs); + + if (lo && ro) return lo < ro; + + // slow comparison + xml_node ln = lhs.node(), rn = rhs.node(); + + // compare attributes + if (lhs.attribute() && rhs.attribute()) + { + // shared parent + if (lhs.parent() == rhs.parent()) + { + // determine sibling order + for (xml_attribute a = lhs.attribute(); a; a = a.next_attribute()) + if (a == rhs.attribute()) + return true; + + return false; + } + + // compare attribute parents + ln = lhs.parent(); + rn = rhs.parent(); + } + else if (lhs.attribute()) + { + // attributes go after the parent element + if (lhs.parent() == rhs.node()) return false; + + ln = lhs.parent(); + } + else if (rhs.attribute()) + { + // attributes go after the parent element + if (rhs.parent() == lhs.node()) return true; + + rn = rhs.parent(); + } + + if (ln == rn) return false; + + if (!ln || !rn) return ln < rn; + + return node_is_before(ln.internal_object(), rn.internal_object()); + } + }; + + PUGI__FN double gen_nan() + { + #if defined(__STDC_IEC_559__) || ((FLT_RADIX - 0 == 2) && (FLT_MAX_EXP - 0 == 128) && (FLT_MANT_DIG - 0 == 24)) + PUGI__STATIC_ASSERT(sizeof(float) == sizeof(uint32_t)); + typedef uint32_t UI; // BCC5 workaround + union { float f; UI i; } u; + u.i = 0x7fc00000; + return double(u.f); + #else + // fallback + const volatile double zero = 0.0; + return zero / zero; + #endif + } + + PUGI__FN bool is_nan(double value) + { + #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) + return !!_isnan(value); + #elif defined(fpclassify) && defined(FP_NAN) + return fpclassify(value) == FP_NAN; + #else + // fallback + const volatile double v = value; + return v != v; + #endif + } + + PUGI__FN const char_t* convert_number_to_string_special(double value) + { + #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) + if (_finite(value)) return (value == 0) ? PUGIXML_TEXT("0") : 0; + if (_isnan(value)) return PUGIXML_TEXT("NaN"); + return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + #elif defined(fpclassify) && defined(FP_NAN) && defined(FP_INFINITE) && defined(FP_ZERO) + switch (fpclassify(value)) + { + case FP_NAN: + return PUGIXML_TEXT("NaN"); + + case FP_INFINITE: + return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + + case FP_ZERO: + return PUGIXML_TEXT("0"); + + default: + return 0; + } + #else + // fallback + const volatile double v = value; + + if (v == 0) return PUGIXML_TEXT("0"); + if (v != v) return PUGIXML_TEXT("NaN"); + if (v * 2 == v) return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + return 0; + #endif + } + + PUGI__FN bool convert_number_to_boolean(double value) + { + return (value != 0 && !is_nan(value)); + } + + PUGI__FN void truncate_zeros(char* begin, char* end) + { + while (begin != end && end[-1] == '0') end--; + + *end = 0; + } + + // gets mantissa digits in the form of 0.xxxxx with 0. implied and the exponent +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) + { + // get base values + int sign, exponent; + _ecvt_s(buffer, sizeof(buffer), value, DBL_DIG + 1, &exponent, &sign); + + // truncate redundant zeros + truncate_zeros(buffer, buffer + strlen(buffer)); + + // fill results + *out_mantissa = buffer; + *out_exponent = exponent; + } +#else + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) + { + // get a scientific notation value with IEEE DBL_DIG decimals + PUGI__SNPRINTF(buffer, "%.*e", DBL_DIG, value); + + // get the exponent (possibly negative) + char* exponent_string = strchr(buffer, 'e'); + assert(exponent_string); + + int exponent = atoi(exponent_string + 1); + + // extract mantissa string: skip sign + char* mantissa = buffer[0] == '-' ? buffer + 1 : buffer; + assert(mantissa[0] != '0' && mantissa[1] == '.'); + + // divide mantissa by 10 to eliminate integer part + mantissa[1] = mantissa[0]; + mantissa++; + exponent++; + + // remove extra mantissa digits and zero-terminate mantissa + truncate_zeros(mantissa, exponent_string); + + // fill results + *out_mantissa = mantissa; + *out_exponent = exponent; + } +#endif + + PUGI__FN xpath_string convert_number_to_string(double value, xpath_allocator* alloc) + { + // try special number conversion + const char_t* special = convert_number_to_string_special(value); + if (special) return xpath_string::from_const(special); + + // get mantissa + exponent form + char mantissa_buffer[32]; + + char* mantissa; + int exponent; + convert_number_to_mantissa_exponent(value, mantissa_buffer, &mantissa, &exponent); + + // allocate a buffer of suitable length for the number + size_t result_size = strlen(mantissa_buffer) + (exponent > 0 ? exponent : -exponent) + 4; + char_t* result = static_cast(alloc->allocate(sizeof(char_t) * result_size)); + if (!result) return xpath_string(); + + // make the number! + char_t* s = result; + + // sign + if (value < 0) *s++ = '-'; + + // integer part + if (exponent <= 0) + { + *s++ = '0'; + } + else + { + while (exponent > 0) + { + assert(*mantissa == 0 || static_cast(*mantissa - '0') <= 9); + *s++ = *mantissa ? *mantissa++ : '0'; + exponent--; + } + } + + // fractional part + if (*mantissa) + { + // decimal point + *s++ = '.'; + + // extra zeroes from negative exponent + while (exponent < 0) + { + *s++ = '0'; + exponent++; + } + + // extra mantissa digits + while (*mantissa) + { + assert(static_cast(*mantissa - '0') <= 9); + *s++ = *mantissa++; + } + } + + // zero-terminate + assert(s < result + result_size); + *s = 0; + + return xpath_string::from_heap_preallocated(result, s); + } + + PUGI__FN bool check_string_to_number_format(const char_t* string) + { + // parse leading whitespace + while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; + + // parse sign + if (*string == '-') ++string; + + if (!*string) return false; + + // if there is no integer part, there should be a decimal part with at least one digit + if (!PUGI__IS_CHARTYPEX(string[0], ctx_digit) && (string[0] != '.' || !PUGI__IS_CHARTYPEX(string[1], ctx_digit))) return false; + + // parse integer part + while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; + + // parse decimal part + if (*string == '.') + { + ++string; + + while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; + } + + // parse trailing whitespace + while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; + + return *string == 0; + } + + PUGI__FN double convert_string_to_number(const char_t* string) + { + // check string format + if (!check_string_to_number_format(string)) return gen_nan(); + + // parse string + #ifdef PUGIXML_WCHAR_MODE + return wcstod(string, 0); + #else + return strtod(string, 0); + #endif + } + + PUGI__FN bool convert_string_to_number_scratch(char_t (&buffer)[32], const char_t* begin, const char_t* end, double* out_result) + { + size_t length = static_cast(end - begin); + char_t* scratch = buffer; + + if (length >= sizeof(buffer) / sizeof(buffer[0])) + { + // need to make dummy on-heap copy + scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!scratch) return false; + } + + // copy string to zero-terminated buffer and perform conversion + memcpy(scratch, begin, length * sizeof(char_t)); + scratch[length] = 0; + + *out_result = convert_string_to_number(scratch); + + // free dummy buffer + if (scratch != buffer) xml_memory::deallocate(scratch); + + return true; + } + + PUGI__FN double round_nearest(double value) + { + return floor(value + 0.5); + } + + PUGI__FN double round_nearest_nzero(double value) + { + // same as round_nearest, but returns -0 for [-0.5, -0] + // ceil is used to differentiate between +0 and -0 (we return -0 for [-0.5, -0] and +0 for +0) + return (value >= -0.5 && value <= 0) ? ceil(value) : floor(value + 0.5); + } + + PUGI__FN const char_t* qualified_name(const xpath_node& node) + { + return node.attribute() ? node.attribute().name() : node.node().name(); + } + + PUGI__FN const char_t* local_name(const xpath_node& node) + { + const char_t* name = qualified_name(node); + const char_t* p = find_char(name, ':'); + + return p ? p + 1 : name; + } + + struct namespace_uri_predicate + { + const char_t* prefix; + size_t prefix_length; + + namespace_uri_predicate(const char_t* name) + { + const char_t* pos = find_char(name, ':'); + + prefix = pos ? name : 0; + prefix_length = pos ? static_cast(pos - name) : 0; + } + + bool operator()(xml_attribute a) const + { + const char_t* name = a.name(); + + if (!starts_with(name, PUGIXML_TEXT("xmlns"))) return false; + + return prefix ? name[5] == ':' && strequalrange(name + 6, prefix, prefix_length) : name[5] == 0; + } + }; + + PUGI__FN const char_t* namespace_uri(xml_node node) + { + namespace_uri_predicate pred = node.name(); + + xml_node p = node; + + while (p) + { + xml_attribute a = p.find_attribute(pred); + + if (a) return a.value(); + + p = p.parent(); + } + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* namespace_uri(xml_attribute attr, xml_node parent) + { + namespace_uri_predicate pred = attr.name(); + + // Default namespace does not apply to attributes + if (!pred.prefix) return PUGIXML_TEXT(""); + + xml_node p = parent; + + while (p) + { + xml_attribute a = p.find_attribute(pred); + + if (a) return a.value(); + + p = p.parent(); + } + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* namespace_uri(const xpath_node& node) + { + return node.attribute() ? namespace_uri(node.attribute(), node.parent()) : namespace_uri(node.node()); + } + + PUGI__FN char_t* normalize_space(char_t* buffer) + { + char_t* write = buffer; + + for (char_t* it = buffer; *it; ) + { + char_t ch = *it++; + + if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + // replace whitespace sequence with single space + while (PUGI__IS_CHARTYPE(*it, ct_space)) it++; + + // avoid leading spaces + if (write != buffer) *write++ = ' '; + } + else *write++ = ch; + } + + // remove trailing space + if (write != buffer && PUGI__IS_CHARTYPE(write[-1], ct_space)) write--; + + // zero-terminate + *write = 0; + + return write; + } + + PUGI__FN char_t* translate(char_t* buffer, const char_t* from, const char_t* to, size_t to_length) + { + char_t* write = buffer; + + while (*buffer) + { + PUGI__DMC_VOLATILE char_t ch = *buffer++; + + const char_t* pos = find_char(from, ch); + + if (!pos) + *write++ = ch; // do not process + else if (static_cast(pos - from) < to_length) + *write++ = to[pos - from]; // replace + } + + // zero-terminate + *write = 0; + + return write; + } + + PUGI__FN unsigned char* translate_table_generate(xpath_allocator* alloc, const char_t* from, const char_t* to) + { + unsigned char table[128] = {0}; + + while (*from) + { + unsigned int fc = static_cast(*from); + unsigned int tc = static_cast(*to); + + if (fc >= 128 || tc >= 128) + return 0; + + // code=128 means "skip character" + if (!table[fc]) + table[fc] = static_cast(tc ? tc : 128); + + from++; + if (tc) to++; + } + + for (int i = 0; i < 128; ++i) + if (!table[i]) + table[i] = static_cast(i); + + void* result = alloc->allocate(sizeof(table)); + if (!result) return 0; + + memcpy(result, table, sizeof(table)); + + return static_cast(result); + } + + PUGI__FN char_t* translate_table(char_t* buffer, const unsigned char* table) + { + char_t* write = buffer; + + while (*buffer) + { + char_t ch = *buffer++; + unsigned int index = static_cast(ch); + + if (index < 128) + { + unsigned char code = table[index]; + + // code=128 means "skip character" (table size is 128 so 128 can be a special value) + // this code skips these characters without extra branches + *write = static_cast(code); + write += 1 - (code >> 7); + } + else + { + *write++ = ch; + } + } + + // zero-terminate + *write = 0; + + return write; + } + + inline bool is_xpath_attribute(const char_t* name) + { + return !(starts_with(name, PUGIXML_TEXT("xmlns")) && (name[5] == 0 || name[5] == ':')); + } + + struct xpath_variable_boolean: xpath_variable + { + xpath_variable_boolean(): xpath_variable(xpath_type_boolean), value(false) + { + } + + bool value; + char_t name[1]; + }; + + struct xpath_variable_number: xpath_variable + { + xpath_variable_number(): xpath_variable(xpath_type_number), value(0) + { + } + + double value; + char_t name[1]; + }; + + struct xpath_variable_string: xpath_variable + { + xpath_variable_string(): xpath_variable(xpath_type_string), value(0) + { + } + + ~xpath_variable_string() + { + if (value) xml_memory::deallocate(value); + } + + char_t* value; + char_t name[1]; + }; + + struct xpath_variable_node_set: xpath_variable + { + xpath_variable_node_set(): xpath_variable(xpath_type_node_set) + { + } + + xpath_node_set value; + char_t name[1]; + }; + + static const xpath_node_set dummy_node_set; + + PUGI__FN PUGI__UNSIGNED_OVERFLOW unsigned int hash_string(const char_t* str) + { + // Jenkins one-at-a-time hash (http://en.wikipedia.org/wiki/Jenkins_hash_function#one-at-a-time) + unsigned int result = 0; + + while (*str) + { + result += static_cast(*str++); + result += result << 10; + result ^= result >> 6; + } + + result += result << 3; + result ^= result >> 11; + result += result << 15; + + return result; + } + + template PUGI__FN T* new_xpath_variable(const char_t* name) + { + size_t length = strlength(name); + if (length == 0) return 0; // empty variable names are invalid + + // $$ we can't use offsetof(T, name) because T is non-POD, so we just allocate additional length characters + void* memory = xml_memory::allocate(sizeof(T) + length * sizeof(char_t)); + if (!memory) return 0; + + T* result = new (memory) T(); + + memcpy(result->name, name, (length + 1) * sizeof(char_t)); + + return result; + } + + PUGI__FN xpath_variable* new_xpath_variable(xpath_value_type type, const char_t* name) + { + switch (type) + { + case xpath_type_node_set: + return new_xpath_variable(name); + + case xpath_type_number: + return new_xpath_variable(name); + + case xpath_type_string: + return new_xpath_variable(name); + + case xpath_type_boolean: + return new_xpath_variable(name); + + default: + return 0; + } + } + + template PUGI__FN void delete_xpath_variable(T* var) + { + var->~T(); + xml_memory::deallocate(var); + } + + PUGI__FN void delete_xpath_variable(xpath_value_type type, xpath_variable* var) + { + switch (type) + { + case xpath_type_node_set: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_number: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_string: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_boolean: + delete_xpath_variable(static_cast(var)); + break; + + default: + assert(false && "Invalid variable type"); // unreachable + } + } + + PUGI__FN bool copy_xpath_variable(xpath_variable* lhs, const xpath_variable* rhs) + { + switch (rhs->type()) + { + case xpath_type_node_set: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_number: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_string: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_boolean: + return lhs->set(static_cast(rhs)->value); + + default: + assert(false && "Invalid variable type"); // unreachable + return false; + } + } + + PUGI__FN bool get_variable_scratch(char_t (&buffer)[32], xpath_variable_set* set, const char_t* begin, const char_t* end, xpath_variable** out_result) + { + size_t length = static_cast(end - begin); + char_t* scratch = buffer; + + if (length >= sizeof(buffer) / sizeof(buffer[0])) + { + // need to make dummy on-heap copy + scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!scratch) return false; + } + + // copy string to zero-terminated buffer and perform lookup + memcpy(scratch, begin, length * sizeof(char_t)); + scratch[length] = 0; + + *out_result = set->get(scratch); + + // free dummy buffer + if (scratch != buffer) xml_memory::deallocate(scratch); + + return true; + } +PUGI__NS_END + +// Internal node set class +PUGI__NS_BEGIN + PUGI__FN xpath_node_set::type_t xpath_get_order(const xpath_node* begin, const xpath_node* end) + { + if (end - begin < 2) + return xpath_node_set::type_sorted; + + document_order_comparator cmp; + + bool first = cmp(begin[0], begin[1]); + + for (const xpath_node* it = begin + 1; it + 1 < end; ++it) + if (cmp(it[0], it[1]) != first) + return xpath_node_set::type_unsorted; + + return first ? xpath_node_set::type_sorted : xpath_node_set::type_sorted_reverse; + } + + PUGI__FN xpath_node_set::type_t xpath_sort(xpath_node* begin, xpath_node* end, xpath_node_set::type_t type, bool rev) + { + xpath_node_set::type_t order = rev ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted; + + if (type == xpath_node_set::type_unsorted) + { + xpath_node_set::type_t sorted = xpath_get_order(begin, end); + + if (sorted == xpath_node_set::type_unsorted) + { + sort(begin, end, document_order_comparator()); + + type = xpath_node_set::type_sorted; + } + else + type = sorted; + } + + if (type != order) reverse(begin, end); + + return order; + } + + PUGI__FN xpath_node xpath_first(const xpath_node* begin, const xpath_node* end, xpath_node_set::type_t type) + { + if (begin == end) return xpath_node(); + + switch (type) + { + case xpath_node_set::type_sorted: + return *begin; + + case xpath_node_set::type_sorted_reverse: + return *(end - 1); + + case xpath_node_set::type_unsorted: + return *min_element(begin, end, document_order_comparator()); + + default: + assert(false && "Invalid node set type"); // unreachable + return xpath_node(); + } + } + + class xpath_node_set_raw + { + xpath_node_set::type_t _type; + + xpath_node* _begin; + xpath_node* _end; + xpath_node* _eos; + + public: + xpath_node_set_raw(): _type(xpath_node_set::type_unsorted), _begin(0), _end(0), _eos(0) + { + } + + xpath_node* begin() const + { + return _begin; + } + + xpath_node* end() const + { + return _end; + } + + bool empty() const + { + return _begin == _end; + } + + size_t size() const + { + return static_cast(_end - _begin); + } + + xpath_node first() const + { + return xpath_first(_begin, _end, _type); + } + + void push_back_grow(const xpath_node& node, xpath_allocator* alloc); + + void push_back(const xpath_node& node, xpath_allocator* alloc) + { + if (_end != _eos) + *_end++ = node; + else + push_back_grow(node, alloc); + } + + void append(const xpath_node* begin_, const xpath_node* end_, xpath_allocator* alloc) + { + if (begin_ == end_) return; + + size_t size_ = static_cast(_end - _begin); + size_t capacity = static_cast(_eos - _begin); + size_t count = static_cast(end_ - begin_); + + if (size_ + count > capacity) + { + // reallocate the old array or allocate a new one + xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), (size_ + count) * sizeof(xpath_node))); + if (!data) return; + + // finalize + _begin = data; + _end = data + size_; + _eos = data + size_ + count; + } + + memcpy(_end, begin_, count * sizeof(xpath_node)); + _end += count; + } + + void sort_do() + { + _type = xpath_sort(_begin, _end, _type, false); + } + + void truncate(xpath_node* pos) + { + assert(_begin <= pos && pos <= _end); + + _end = pos; + } + + void remove_duplicates(xpath_allocator* alloc) + { + if (_type == xpath_node_set::type_unsorted && _end - _begin > 2) + { + xpath_allocator_capture cr(alloc); + + size_t size_ = static_cast(_end - _begin); + + size_t hash_size = 1; + while (hash_size < size_ + size_ / 2) hash_size *= 2; + + const void** hash_data = static_cast(alloc->allocate(hash_size * sizeof(void**))); + if (!hash_data) return; + + memset(hash_data, 0, hash_size * sizeof(const void**)); + + xpath_node* write = _begin; + + for (xpath_node* it = _begin; it != _end; ++it) + { + const void* attr = it->attribute().internal_object(); + const void* node = it->node().internal_object(); + const void* key = attr ? attr : node; + + if (key && hash_insert(hash_data, hash_size, key)) + { + *write++ = *it; + } + } + + _end = write; + } + else + { + _end = unique(_begin, _end); + } + } + + xpath_node_set::type_t type() const + { + return _type; + } + + void set_type(xpath_node_set::type_t value) + { + _type = value; + } + }; + + PUGI__FN_NO_INLINE void xpath_node_set_raw::push_back_grow(const xpath_node& node, xpath_allocator* alloc) + { + size_t capacity = static_cast(_eos - _begin); + + // get new capacity (1.5x rule) + size_t new_capacity = capacity + capacity / 2 + 1; + + // reallocate the old array or allocate a new one + xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), new_capacity * sizeof(xpath_node))); + if (!data) return; + + // finalize + _begin = data; + _end = data + capacity; + _eos = data + new_capacity; + + // push + *_end++ = node; + } +PUGI__NS_END + +PUGI__NS_BEGIN + struct xpath_context + { + xpath_node n; + size_t position, size; + + xpath_context(const xpath_node& n_, size_t position_, size_t size_): n(n_), position(position_), size(size_) + { + } + }; + + enum lexeme_t + { + lex_none = 0, + lex_equal, + lex_not_equal, + lex_less, + lex_greater, + lex_less_or_equal, + lex_greater_or_equal, + lex_plus, + lex_minus, + lex_multiply, + lex_union, + lex_var_ref, + lex_open_brace, + lex_close_brace, + lex_quoted_string, + lex_number, + lex_slash, + lex_double_slash, + lex_open_square_brace, + lex_close_square_brace, + lex_string, + lex_comma, + lex_axis_attribute, + lex_dot, + lex_double_dot, + lex_double_colon, + lex_eof + }; + + struct xpath_lexer_string + { + const char_t* begin; + const char_t* end; + + xpath_lexer_string(): begin(0), end(0) + { + } + + bool operator==(const char_t* other) const + { + size_t length = static_cast(end - begin); + + return strequalrange(other, begin, length); + } + }; + + class xpath_lexer + { + const char_t* _cur; + const char_t* _cur_lexeme_pos; + xpath_lexer_string _cur_lexeme_contents; + + lexeme_t _cur_lexeme; + + public: + explicit xpath_lexer(const char_t* query): _cur(query) + { + next(); + } + + const char_t* state() const + { + return _cur; + } + + void next() + { + const char_t* cur = _cur; + + while (PUGI__IS_CHARTYPE(*cur, ct_space)) ++cur; + + // save lexeme position for error reporting + _cur_lexeme_pos = cur; + + switch (*cur) + { + case 0: + _cur_lexeme = lex_eof; + break; + + case '>': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_greater_or_equal; + } + else + { + cur += 1; + _cur_lexeme = lex_greater; + } + break; + + case '<': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_less_or_equal; + } + else + { + cur += 1; + _cur_lexeme = lex_less; + } + break; + + case '!': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_not_equal; + } + else + { + _cur_lexeme = lex_none; + } + break; + + case '=': + cur += 1; + _cur_lexeme = lex_equal; + + break; + + case '+': + cur += 1; + _cur_lexeme = lex_plus; + + break; + + case '-': + cur += 1; + _cur_lexeme = lex_minus; + + break; + + case '*': + cur += 1; + _cur_lexeme = lex_multiply; + + break; + + case '|': + cur += 1; + _cur_lexeme = lex_union; + + break; + + case '$': + cur += 1; + + if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + + if (cur[0] == ':' && PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // qname + { + cur++; // : + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_var_ref; + } + else + { + _cur_lexeme = lex_none; + } + + break; + + case '(': + cur += 1; + _cur_lexeme = lex_open_brace; + + break; + + case ')': + cur += 1; + _cur_lexeme = lex_close_brace; + + break; + + case '[': + cur += 1; + _cur_lexeme = lex_open_square_brace; + + break; + + case ']': + cur += 1; + _cur_lexeme = lex_close_square_brace; + + break; + + case ',': + cur += 1; + _cur_lexeme = lex_comma; + + break; + + case '/': + if (*(cur+1) == '/') + { + cur += 2; + _cur_lexeme = lex_double_slash; + } + else + { + cur += 1; + _cur_lexeme = lex_slash; + } + break; + + case '.': + if (*(cur+1) == '.') + { + cur += 2; + _cur_lexeme = lex_double_dot; + } + else if (PUGI__IS_CHARTYPEX(*(cur+1), ctx_digit)) + { + _cur_lexeme_contents.begin = cur; // . + + ++cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_number; + } + else + { + cur += 1; + _cur_lexeme = lex_dot; + } + break; + + case '@': + cur += 1; + _cur_lexeme = lex_axis_attribute; + + break; + + case '"': + case '\'': + { + char_t terminator = *cur; + + ++cur; + + _cur_lexeme_contents.begin = cur; + while (*cur && *cur != terminator) cur++; + _cur_lexeme_contents.end = cur; + + if (!*cur) + _cur_lexeme = lex_none; + else + { + cur += 1; + _cur_lexeme = lex_quoted_string; + } + + break; + } + + case ':': + if (*(cur+1) == ':') + { + cur += 2; + _cur_lexeme = lex_double_colon; + } + else + { + _cur_lexeme = lex_none; + } + break; + + default: + if (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + + if (*cur == '.') + { + cur++; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_number; + } + else if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + + if (cur[0] == ':') + { + if (cur[1] == '*') // namespace test ncname:* + { + cur += 2; // :* + } + else if (PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // namespace test qname + { + cur++; // : + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + } + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_string; + } + else + { + _cur_lexeme = lex_none; + } + } + + _cur = cur; + } + + lexeme_t current() const + { + return _cur_lexeme; + } + + const char_t* current_pos() const + { + return _cur_lexeme_pos; + } + + const xpath_lexer_string& contents() const + { + assert(_cur_lexeme == lex_var_ref || _cur_lexeme == lex_number || _cur_lexeme == lex_string || _cur_lexeme == lex_quoted_string); + + return _cur_lexeme_contents; + } + }; + + enum ast_type_t + { + ast_unknown, + ast_op_or, // left or right + ast_op_and, // left and right + ast_op_equal, // left = right + ast_op_not_equal, // left != right + ast_op_less, // left < right + ast_op_greater, // left > right + ast_op_less_or_equal, // left <= right + ast_op_greater_or_equal, // left >= right + ast_op_add, // left + right + ast_op_subtract, // left - right + ast_op_multiply, // left * right + ast_op_divide, // left / right + ast_op_mod, // left % right + ast_op_negate, // left - right + ast_op_union, // left | right + ast_predicate, // apply predicate to set; next points to next predicate + ast_filter, // select * from left where right + ast_string_constant, // string constant + ast_number_constant, // number constant + ast_variable, // variable + ast_func_last, // last() + ast_func_position, // position() + ast_func_count, // count(left) + ast_func_id, // id(left) + ast_func_local_name_0, // local-name() + ast_func_local_name_1, // local-name(left) + ast_func_namespace_uri_0, // namespace-uri() + ast_func_namespace_uri_1, // namespace-uri(left) + ast_func_name_0, // name() + ast_func_name_1, // name(left) + ast_func_string_0, // string() + ast_func_string_1, // string(left) + ast_func_concat, // concat(left, right, siblings) + ast_func_starts_with, // starts_with(left, right) + ast_func_contains, // contains(left, right) + ast_func_substring_before, // substring-before(left, right) + ast_func_substring_after, // substring-after(left, right) + ast_func_substring_2, // substring(left, right) + ast_func_substring_3, // substring(left, right, third) + ast_func_string_length_0, // string-length() + ast_func_string_length_1, // string-length(left) + ast_func_normalize_space_0, // normalize-space() + ast_func_normalize_space_1, // normalize-space(left) + ast_func_translate, // translate(left, right, third) + ast_func_boolean, // boolean(left) + ast_func_not, // not(left) + ast_func_true, // true() + ast_func_false, // false() + ast_func_lang, // lang(left) + ast_func_number_0, // number() + ast_func_number_1, // number(left) + ast_func_sum, // sum(left) + ast_func_floor, // floor(left) + ast_func_ceiling, // ceiling(left) + ast_func_round, // round(left) + ast_step, // process set left with step + ast_step_root, // select root node + + ast_opt_translate_table, // translate(left, right, third) where right/third are constants + ast_opt_compare_attribute // @name = 'string' + }; + + enum axis_t + { + axis_ancestor, + axis_ancestor_or_self, + axis_attribute, + axis_child, + axis_descendant, + axis_descendant_or_self, + axis_following, + axis_following_sibling, + axis_namespace, + axis_parent, + axis_preceding, + axis_preceding_sibling, + axis_self + }; + + enum nodetest_t + { + nodetest_none, + nodetest_name, + nodetest_type_node, + nodetest_type_comment, + nodetest_type_pi, + nodetest_type_text, + nodetest_pi, + nodetest_all, + nodetest_all_in_namespace + }; + + enum predicate_t + { + predicate_default, + predicate_posinv, + predicate_constant, + predicate_constant_one + }; + + enum nodeset_eval_t + { + nodeset_eval_all, + nodeset_eval_any, + nodeset_eval_first + }; + + template struct axis_to_type + { + static const axis_t axis; + }; + + template const axis_t axis_to_type::axis = N; + + class xpath_ast_node + { + private: + // node type + char _type; + char _rettype; + + // for ast_step + char _axis; + + // for ast_step/ast_predicate/ast_filter + char _test; + + // tree node structure + xpath_ast_node* _left; + xpath_ast_node* _right; + xpath_ast_node* _next; + + union + { + // value for ast_string_constant + const char_t* string; + // value for ast_number_constant + double number; + // variable for ast_variable + xpath_variable* variable; + // node test for ast_step (node name/namespace/node type/pi target) + const char_t* nodetest; + // table for ast_opt_translate_table + const unsigned char* table; + } _data; + + xpath_ast_node(const xpath_ast_node&); + xpath_ast_node& operator=(const xpath_ast_node&); + + template static bool compare_eq(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) + { + xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); + + if (lt != xpath_type_node_set && rt != xpath_type_node_set) + { + if (lt == xpath_type_boolean || rt == xpath_type_boolean) + return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); + else if (lt == xpath_type_number || rt == xpath_type_number) + return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); + else if (lt == xpath_type_string || rt == xpath_type_string) + { + xpath_allocator_capture cr(stack.result); + + xpath_string ls = lhs->eval_string(c, stack); + xpath_string rs = rhs->eval_string(c, stack); + + return comp(ls, rs); + } + } + else if (lt == xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(string_value(*li, stack.result), string_value(*ri, stack.result))) + return true; + } + + return false; + } + else + { + if (lt == xpath_type_node_set) + { + swap(lhs, rhs); + swap(lt, rt); + } + + if (lt == xpath_type_boolean) + return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); + else if (lt == xpath_type_number) + { + xpath_allocator_capture cr(stack.result); + + double l = lhs->eval_number(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + + return false; + } + else if (lt == xpath_type_string) + { + xpath_allocator_capture cr(stack.result); + + xpath_string l = lhs->eval_string(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, string_value(*ri, stack.result))) + return true; + } + + return false; + } + } + + assert(false && "Wrong types"); // unreachable + return false; + } + + static bool eval_once(xpath_node_set::type_t type, nodeset_eval_t eval) + { + return type == xpath_node_set::type_sorted ? eval != nodeset_eval_all : eval == nodeset_eval_any; + } + + template static bool compare_rel(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) + { + xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); + + if (lt != xpath_type_node_set && rt != xpath_type_node_set) + return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); + else if (lt == xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + { + xpath_allocator_capture cri(stack.result); + + double l = convert_string_to_number(string_value(*li, stack.result).c_str()); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture crii(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + } + + return false; + } + else if (lt != xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + double l = lhs->eval_number(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + + return false; + } + else if (lt == xpath_type_node_set && rt != xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + double r = rhs->eval_number(c, stack); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + { + xpath_allocator_capture cri(stack.result); + + if (comp(convert_string_to_number(string_value(*li, stack.result).c_str()), r)) + return true; + } + + return false; + } + else + { + assert(false && "Wrong types"); // unreachable + return false; + } + } + + static void apply_predicate_boolean(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack, bool once) + { + assert(ns.size() >= first); + assert(expr->rettype() != xpath_type_number); + + size_t i = 1; + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + // remove_if... or well, sort of + for (xpath_node* it = last; it != ns.end(); ++it, ++i) + { + xpath_context c(*it, i, size); + + if (expr->eval_boolean(c, stack)) + { + *last++ = *it; + + if (once) break; + } + } + + ns.truncate(last); + } + + static void apply_predicate_number(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack, bool once) + { + assert(ns.size() >= first); + assert(expr->rettype() == xpath_type_number); + + size_t i = 1; + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + // remove_if... or well, sort of + for (xpath_node* it = last; it != ns.end(); ++it, ++i) + { + xpath_context c(*it, i, size); + + if (expr->eval_number(c, stack) == static_cast(i)) + { + *last++ = *it; + + if (once) break; + } + } + + ns.truncate(last); + } + + static void apply_predicate_number_const(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack) + { + assert(ns.size() >= first); + assert(expr->rettype() == xpath_type_number); + + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + xpath_context c(xpath_node(), 1, size); + + double er = expr->eval_number(c, stack); + + if (er >= 1.0 && er <= static_cast(size)) + { + size_t eri = static_cast(er); + + if (er == static_cast(eri)) + { + xpath_node r = last[eri - 1]; + + *last++ = r; + } + } + + ns.truncate(last); + } + + void apply_predicate(xpath_node_set_raw& ns, size_t first, const xpath_stack& stack, bool once) + { + if (ns.size() == first) return; + + assert(_type == ast_filter || _type == ast_predicate); + + if (_test == predicate_constant || _test == predicate_constant_one) + apply_predicate_number_const(ns, first, _right, stack); + else if (_right->rettype() == xpath_type_number) + apply_predicate_number(ns, first, _right, stack, once); + else + apply_predicate_boolean(ns, first, _right, stack, once); + } + + void apply_predicates(xpath_node_set_raw& ns, size_t first, const xpath_stack& stack, nodeset_eval_t eval) + { + if (ns.size() == first) return; + + bool last_once = eval_once(ns.type(), eval); + + for (xpath_ast_node* pred = _right; pred; pred = pred->_next) + pred->apply_predicate(ns, first, stack, !pred->_next && last_once); + } + + bool step_push(xpath_node_set_raw& ns, xml_attribute_struct* a, xml_node_struct* parent, xpath_allocator* alloc) + { + assert(a); + + const char_t* name = a->name ? a->name + 0 : PUGIXML_TEXT(""); + + switch (_test) + { + case nodetest_name: + if (strequal(name, _data.nodetest) && is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + case nodetest_type_node: + case nodetest_all: + if (is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + case nodetest_all_in_namespace: + if (starts_with(name, _data.nodetest) && is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + default: + ; + } + + return false; + } + + bool step_push(xpath_node_set_raw& ns, xml_node_struct* n, xpath_allocator* alloc) + { + assert(n); + + xml_node_type type = PUGI__NODETYPE(n); + + switch (_test) + { + case nodetest_name: + if (type == node_element && n->name && strequal(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_node: + ns.push_back(xml_node(n), alloc); + return true; + + case nodetest_type_comment: + if (type == node_comment) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_text: + if (type == node_pcdata || type == node_cdata) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_pi: + if (type == node_pi) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_pi: + if (type == node_pi && n->name && strequal(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_all: + if (type == node_element) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_all_in_namespace: + if (type == node_element && n->name && starts_with(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + default: + assert(false && "Unknown axis"); // unreachable + } + + return false; + } + + template void step_fill(xpath_node_set_raw& ns, xml_node_struct* n, xpath_allocator* alloc, bool once, T) + { + const axis_t axis = T::axis; + + switch (axis) + { + case axis_attribute: + { + for (xml_attribute_struct* a = n->first_attribute; a; a = a->next_attribute) + if (step_push(ns, a, n, alloc) & once) + return; + + break; + } + + case axis_child: + { + for (xml_node_struct* c = n->first_child; c; c = c->next_sibling) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_descendant: + case axis_descendant_or_self: + { + if (axis == axis_descendant_or_self) + if (step_push(ns, n, alloc) & once) + return; + + xml_node_struct* cur = n->first_child; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (cur == n) return; + } + + cur = cur->next_sibling; + } + } + + break; + } + + case axis_following_sibling: + { + for (xml_node_struct* c = n->next_sibling; c; c = c->next_sibling) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_preceding_sibling: + { + for (xml_node_struct* c = n->prev_sibling_c; c->next_sibling; c = c->prev_sibling_c) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_following: + { + xml_node_struct* cur = n; + + // exit from this node so that we don't include descendants + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + } + } + + break; + } + + case axis_preceding: + { + xml_node_struct* cur = n; + + // exit from this node so that we don't include descendants + while (!cur->prev_sibling_c->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->prev_sibling_c; + + while (cur) + { + if (cur->first_child) + cur = cur->first_child->prev_sibling_c; + else + { + // leaf node, can't be ancestor + if (step_push(ns, cur, alloc) & once) + return; + + while (!cur->prev_sibling_c->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + + if (!node_is_ancestor(cur, n)) + if (step_push(ns, cur, alloc) & once) + return; + } + + cur = cur->prev_sibling_c; + } + } + + break; + } + + case axis_ancestor: + case axis_ancestor_or_self: + { + if (axis == axis_ancestor_or_self) + if (step_push(ns, n, alloc) & once) + return; + + xml_node_struct* cur = n->parent; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + cur = cur->parent; + } + + break; + } + + case axis_self: + { + step_push(ns, n, alloc); + + break; + } + + case axis_parent: + { + if (n->parent) + step_push(ns, n->parent, alloc); + + break; + } + + default: + assert(false && "Unimplemented axis"); // unreachable + } + } + + template void step_fill(xpath_node_set_raw& ns, xml_attribute_struct* a, xml_node_struct* p, xpath_allocator* alloc, bool once, T v) + { + const axis_t axis = T::axis; + + switch (axis) + { + case axis_ancestor: + case axis_ancestor_or_self: + { + if (axis == axis_ancestor_or_self && _test == nodetest_type_node) // reject attributes based on principal node type test + if (step_push(ns, a, p, alloc) & once) + return; + + xml_node_struct* cur = p; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + cur = cur->parent; + } + + break; + } + + case axis_descendant_or_self: + case axis_self: + { + if (_test == nodetest_type_node) // reject attributes based on principal node type test + step_push(ns, a, p, alloc); + + break; + } + + case axis_following: + { + xml_node_struct* cur = p; + + while (cur) + { + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + } + + if (step_push(ns, cur, alloc) & once) + return; + } + + break; + } + + case axis_parent: + { + step_push(ns, p, alloc); + + break; + } + + case axis_preceding: + { + // preceding:: axis does not include attribute nodes and attribute ancestors (they are the same as parent's ancestors), so we can reuse node preceding + step_fill(ns, p, alloc, once, v); + break; + } + + default: + assert(false && "Unimplemented axis"); // unreachable + } + } + + template void step_fill(xpath_node_set_raw& ns, const xpath_node& xn, xpath_allocator* alloc, bool once, T v) + { + const axis_t axis = T::axis; + const bool axis_has_attributes = (axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_descendant_or_self || axis == axis_following || axis == axis_parent || axis == axis_preceding || axis == axis_self); + + if (xn.node()) + step_fill(ns, xn.node().internal_object(), alloc, once, v); + else if (axis_has_attributes && xn.attribute() && xn.parent()) + step_fill(ns, xn.attribute().internal_object(), xn.parent().internal_object(), alloc, once, v); + } + + template xpath_node_set_raw step_do(const xpath_context& c, const xpath_stack& stack, nodeset_eval_t eval, T v) + { + const axis_t axis = T::axis; + const bool axis_reverse = (axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_preceding || axis == axis_preceding_sibling); + const xpath_node_set::type_t axis_type = axis_reverse ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted; + + bool once = + (axis == axis_attribute && _test == nodetest_name) || + (!_right && eval_once(axis_type, eval)) || + // coverity[mixed_enums] + (_right && !_right->_next && _right->_test == predicate_constant_one); + + xpath_node_set_raw ns; + ns.set_type(axis_type); + + if (_left) + { + xpath_node_set_raw s = _left->eval_node_set(c, stack, nodeset_eval_all); + + // self axis preserves the original order + if (axis == axis_self) ns.set_type(s.type()); + + for (const xpath_node* it = s.begin(); it != s.end(); ++it) + { + size_t size = ns.size(); + + // in general, all axes generate elements in a particular order, but there is no order guarantee if axis is applied to two nodes + if (axis != axis_self && size != 0) ns.set_type(xpath_node_set::type_unsorted); + + step_fill(ns, *it, stack.result, once, v); + if (_right) apply_predicates(ns, size, stack, eval); + } + } + else + { + step_fill(ns, c.n, stack.result, once, v); + if (_right) apply_predicates(ns, 0, stack, eval); + } + + // child, attribute and self axes always generate unique set of nodes + // for other axis, if the set stayed sorted, it stayed unique because the traversal algorithms do not visit the same node twice + if (axis != axis_child && axis != axis_attribute && axis != axis_self && ns.type() == xpath_node_set::type_unsorted) + ns.remove_duplicates(stack.temp); + + return ns; + } + + public: + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, const char_t* value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_string_constant); + _data.string = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, double value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_number_constant); + _data.number = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_variable* value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_variable); + _data.variable = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_ast_node* left = 0, xpath_ast_node* right = 0): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(left), _right(right), _next(0) + { + } + + xpath_ast_node(ast_type_t type, xpath_ast_node* left, axis_t axis, nodetest_t test, const char_t* contents): + _type(static_cast(type)), _rettype(xpath_type_node_set), _axis(static_cast(axis)), _test(static_cast(test)), _left(left), _right(0), _next(0) + { + assert(type == ast_step); + _data.nodetest = contents; + } + + xpath_ast_node(ast_type_t type, xpath_ast_node* left, xpath_ast_node* right, predicate_t test): + _type(static_cast(type)), _rettype(xpath_type_node_set), _axis(0), _test(static_cast(test)), _left(left), _right(right), _next(0) + { + assert(type == ast_filter || type == ast_predicate); + } + + void set_next(xpath_ast_node* value) + { + _next = value; + } + + void set_right(xpath_ast_node* value) + { + _right = value; + } + + bool eval_boolean(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_op_or: + return _left->eval_boolean(c, stack) || _right->eval_boolean(c, stack); + + case ast_op_and: + return _left->eval_boolean(c, stack) && _right->eval_boolean(c, stack); + + case ast_op_equal: + return compare_eq(_left, _right, c, stack, equal_to()); + + case ast_op_not_equal: + return compare_eq(_left, _right, c, stack, not_equal_to()); + + case ast_op_less: + return compare_rel(_left, _right, c, stack, less()); + + case ast_op_greater: + return compare_rel(_right, _left, c, stack, less()); + + case ast_op_less_or_equal: + return compare_rel(_left, _right, c, stack, less_equal()); + + case ast_op_greater_or_equal: + return compare_rel(_right, _left, c, stack, less_equal()); + + case ast_func_starts_with: + { + xpath_allocator_capture cr(stack.result); + + xpath_string lr = _left->eval_string(c, stack); + xpath_string rr = _right->eval_string(c, stack); + + return starts_with(lr.c_str(), rr.c_str()); + } + + case ast_func_contains: + { + xpath_allocator_capture cr(stack.result); + + xpath_string lr = _left->eval_string(c, stack); + xpath_string rr = _right->eval_string(c, stack); + + return find_substring(lr.c_str(), rr.c_str()) != 0; + } + + case ast_func_boolean: + return _left->eval_boolean(c, stack); + + case ast_func_not: + return !_left->eval_boolean(c, stack); + + case ast_func_true: + return true; + + case ast_func_false: + return false; + + case ast_func_lang: + { + if (c.n.attribute()) return false; + + xpath_allocator_capture cr(stack.result); + + xpath_string lang = _left->eval_string(c, stack); + + for (xml_node n = c.n.node(); n; n = n.parent()) + { + xml_attribute a = n.attribute(PUGIXML_TEXT("xml:lang")); + + if (a) + { + const char_t* value = a.value(); + + // strnicmp / strncasecmp is not portable + for (const char_t* lit = lang.c_str(); *lit; ++lit) + { + if (tolower_ascii(*lit) != tolower_ascii(*value)) return false; + ++value; + } + + return *value == 0 || *value == '-'; + } + } + + return false; + } + + case ast_opt_compare_attribute: + { + const char_t* value = (_right->_type == ast_string_constant) ? _right->_data.string : _right->_data.variable->get_string(); + + xml_attribute attr = c.n.node().attribute(_left->_data.nodetest); + + return attr && strequal(attr.value(), value) && is_xpath_attribute(attr.name()); + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_boolean) + return _data.variable->get_boolean(); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_number: + return convert_number_to_boolean(eval_number(c, stack)); + + case xpath_type_string: + { + xpath_allocator_capture cr(stack.result); + + return !eval_string(c, stack).empty(); + } + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.result); + + return !eval_node_set(c, stack, nodeset_eval_any).empty(); + } + + default: + assert(false && "Wrong expression for return type boolean"); // unreachable + return false; + } + } + + double eval_number(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_op_add: + return _left->eval_number(c, stack) + _right->eval_number(c, stack); + + case ast_op_subtract: + return _left->eval_number(c, stack) - _right->eval_number(c, stack); + + case ast_op_multiply: + return _left->eval_number(c, stack) * _right->eval_number(c, stack); + + case ast_op_divide: + return _left->eval_number(c, stack) / _right->eval_number(c, stack); + + case ast_op_mod: + return fmod(_left->eval_number(c, stack), _right->eval_number(c, stack)); + + case ast_op_negate: + return -_left->eval_number(c, stack); + + case ast_number_constant: + return _data.number; + + case ast_func_last: + return static_cast(c.size); + + case ast_func_position: + return static_cast(c.position); + + case ast_func_count: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(_left->eval_node_set(c, stack, nodeset_eval_all).size()); + } + + case ast_func_string_length_0: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(string_value(c.n, stack.result).length()); + } + + case ast_func_string_length_1: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(_left->eval_string(c, stack).length()); + } + + case ast_func_number_0: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(string_value(c.n, stack.result).c_str()); + } + + case ast_func_number_1: + return _left->eval_number(c, stack); + + case ast_func_sum: + { + xpath_allocator_capture cr(stack.result); + + double r = 0; + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* it = ns.begin(); it != ns.end(); ++it) + { + xpath_allocator_capture cri(stack.result); + + r += convert_string_to_number(string_value(*it, stack.result).c_str()); + } + + return r; + } + + case ast_func_floor: + { + double r = _left->eval_number(c, stack); + + return r == r ? floor(r) : r; + } + + case ast_func_ceiling: + { + double r = _left->eval_number(c, stack); + + return r == r ? ceil(r) : r; + } + + case ast_func_round: + return round_nearest_nzero(_left->eval_number(c, stack)); + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_number) + return _data.variable->get_number(); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_boolean: + return eval_boolean(c, stack) ? 1 : 0; + + case xpath_type_string: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(eval_string(c, stack).c_str()); + } + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(eval_string(c, stack).c_str()); + } + + default: + assert(false && "Wrong expression for return type number"); // unreachable + return 0; + } + } + + xpath_string eval_string_concat(const xpath_context& c, const xpath_stack& stack) + { + assert(_type == ast_func_concat); + + xpath_allocator_capture ct(stack.temp); + + // count the string number + size_t count = 1; + for (xpath_ast_node* nc = _right; nc; nc = nc->_next) count++; + + // allocate a buffer for temporary string objects + xpath_string* buffer = static_cast(stack.temp->allocate(count * sizeof(xpath_string))); + if (!buffer) return xpath_string(); + + // evaluate all strings to temporary stack + xpath_stack swapped_stack = {stack.temp, stack.result}; + + buffer[0] = _left->eval_string(c, swapped_stack); + + size_t pos = 1; + for (xpath_ast_node* n = _right; n; n = n->_next, ++pos) buffer[pos] = n->eval_string(c, swapped_stack); + assert(pos == count); + + // get total length + size_t length = 0; + for (size_t i = 0; i < count; ++i) length += buffer[i].length(); + + // create final string + char_t* result = static_cast(stack.result->allocate((length + 1) * sizeof(char_t))); + if (!result) return xpath_string(); + + char_t* ri = result; + + for (size_t j = 0; j < count; ++j) + for (const char_t* bi = buffer[j].c_str(); *bi; ++bi) + *ri++ = *bi; + + *ri = 0; + + return xpath_string::from_heap_preallocated(result, ri); + } + + xpath_string eval_string(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_string_constant: + return xpath_string::from_const(_data.string); + + case ast_func_local_name_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(local_name(na)); + } + + case ast_func_local_name_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(local_name(na)); + } + + case ast_func_name_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(qualified_name(na)); + } + + case ast_func_name_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(qualified_name(na)); + } + + case ast_func_namespace_uri_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(namespace_uri(na)); + } + + case ast_func_namespace_uri_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(namespace_uri(na)); + } + + case ast_func_string_0: + return string_value(c.n, stack.result); + + case ast_func_string_1: + return _left->eval_string(c, stack); + + case ast_func_concat: + return eval_string_concat(c, stack); + + case ast_func_substring_before: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + xpath_string p = _right->eval_string(c, swapped_stack); + + const char_t* pos = find_substring(s.c_str(), p.c_str()); + + return pos ? xpath_string::from_heap(s.c_str(), pos, stack.result) : xpath_string(); + } + + case ast_func_substring_after: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + xpath_string p = _right->eval_string(c, swapped_stack); + + const char_t* pos = find_substring(s.c_str(), p.c_str()); + if (!pos) return xpath_string(); + + const char_t* rbegin = pos + p.length(); + const char_t* rend = s.c_str() + s.length(); + + return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin); + } + + case ast_func_substring_2: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + size_t s_length = s.length(); + + double first = round_nearest(_right->eval_number(c, stack)); + + if (is_nan(first)) return xpath_string(); // NaN + else if (first >= static_cast(s_length + 1)) return xpath_string(); + + size_t pos = first < 1 ? 1 : static_cast(first); + assert(1 <= pos && pos <= s_length + 1); + + const char_t* rbegin = s.c_str() + (pos - 1); + const char_t* rend = s.c_str() + s.length(); + + return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin); + } + + case ast_func_substring_3: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + size_t s_length = s.length(); + + double first = round_nearest(_right->eval_number(c, stack)); + double last = first + round_nearest(_right->_next->eval_number(c, stack)); + + if (is_nan(first) || is_nan(last)) return xpath_string(); + else if (first >= static_cast(s_length + 1)) return xpath_string(); + else if (first >= last) return xpath_string(); + else if (last < 1) return xpath_string(); + + size_t pos = first < 1 ? 1 : static_cast(first); + size_t end = last >= static_cast(s_length + 1) ? s_length + 1 : static_cast(last); + + assert(1 <= pos && pos <= end && end <= s_length + 1); + const char_t* rbegin = s.c_str() + (pos - 1); + const char_t* rend = s.c_str() + (end - 1); + + return (end == s_length + 1 && !s.uses_heap()) ? xpath_string::from_const(rbegin) : xpath_string::from_heap(rbegin, rend, stack.result); + } + + case ast_func_normalize_space_0: + { + xpath_string s = string_value(c.n, stack.result); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = normalize_space(begin); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_func_normalize_space_1: + { + xpath_string s = _left->eval_string(c, stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = normalize_space(begin); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_func_translate: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, stack); + xpath_string from = _right->eval_string(c, swapped_stack); + xpath_string to = _right->_next->eval_string(c, swapped_stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = translate(begin, from.c_str(), to.c_str(), to.length()); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_opt_translate_table: + { + xpath_string s = _left->eval_string(c, stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = translate_table(begin, _data.table); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_string) + return xpath_string::from_const(_data.variable->get_string()); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_boolean: + return xpath_string::from_const(eval_boolean(c, stack) ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false")); + + case xpath_type_number: + return convert_number_to_string(eval_number(c, stack), stack.result); + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_node_set_raw ns = eval_node_set(c, swapped_stack, nodeset_eval_first); + return ns.empty() ? xpath_string() : string_value(ns.first(), stack.result); + } + + default: + assert(false && "Wrong expression for return type string"); // unreachable + return xpath_string(); + } + } + + xpath_node_set_raw eval_node_set(const xpath_context& c, const xpath_stack& stack, nodeset_eval_t eval) + { + switch (_type) + { + case ast_op_union: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_node_set_raw ls = _left->eval_node_set(c, stack, eval); + xpath_node_set_raw rs = _right->eval_node_set(c, swapped_stack, eval); + + // we can optimize merging two sorted sets, but this is a very rare operation, so don't bother + ls.set_type(xpath_node_set::type_unsorted); + + ls.append(rs.begin(), rs.end(), stack.result); + ls.remove_duplicates(stack.temp); + + return ls; + } + + case ast_filter: + { + xpath_node_set_raw set = _left->eval_node_set(c, stack, _test == predicate_constant_one ? nodeset_eval_first : nodeset_eval_all); + + // either expression is a number or it contains position() call; sort by document order + if (_test != predicate_posinv) set.sort_do(); + + bool once = eval_once(set.type(), eval); + + apply_predicate(set, 0, stack, once); + + return set; + } + + case ast_func_id: + return xpath_node_set_raw(); + + case ast_step: + { + switch (_axis) + { + case axis_ancestor: + return step_do(c, stack, eval, axis_to_type()); + + case axis_ancestor_or_self: + return step_do(c, stack, eval, axis_to_type()); + + case axis_attribute: + return step_do(c, stack, eval, axis_to_type()); + + case axis_child: + return step_do(c, stack, eval, axis_to_type()); + + case axis_descendant: + return step_do(c, stack, eval, axis_to_type()); + + case axis_descendant_or_self: + return step_do(c, stack, eval, axis_to_type()); + + case axis_following: + return step_do(c, stack, eval, axis_to_type()); + + case axis_following_sibling: + return step_do(c, stack, eval, axis_to_type()); + + case axis_namespace: + // namespaced axis is not supported + return xpath_node_set_raw(); + + case axis_parent: + return step_do(c, stack, eval, axis_to_type()); + + case axis_preceding: + return step_do(c, stack, eval, axis_to_type()); + + case axis_preceding_sibling: + return step_do(c, stack, eval, axis_to_type()); + + case axis_self: + return step_do(c, stack, eval, axis_to_type()); + + default: + assert(false && "Unknown axis"); // unreachable + return xpath_node_set_raw(); + } + } + + case ast_step_root: + { + assert(!_right); // root step can't have any predicates + + xpath_node_set_raw ns; + + ns.set_type(xpath_node_set::type_sorted); + + if (c.n.node()) ns.push_back(c.n.node().root(), stack.result); + else if (c.n.attribute()) ns.push_back(c.n.parent().root(), stack.result); + + return ns; + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_node_set) + { + const xpath_node_set& s = _data.variable->get_node_set(); + + xpath_node_set_raw ns; + + ns.set_type(s.type()); + ns.append(s.begin(), s.end(), stack.result); + + return ns; + } + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, but conversions to node set are invalid + assert(false && "Wrong expression for return type node set"); // unreachable + return xpath_node_set_raw(); + } + + void optimize(xpath_allocator* alloc) + { + if (_left) + _left->optimize(alloc); + + if (_right) + _right->optimize(alloc); + + if (_next) + _next->optimize(alloc); + + // coverity[var_deref_model] + optimize_self(alloc); + } + + void optimize_self(xpath_allocator* alloc) + { + // Rewrite [position()=expr] with [expr] + // Note that this step has to go before classification to recognize [position()=1] + if ((_type == ast_filter || _type == ast_predicate) && + _right && // workaround for clang static analyzer (_right is never null for ast_filter/ast_predicate) + _right->_type == ast_op_equal && _right->_left->_type == ast_func_position && _right->_right->_rettype == xpath_type_number) + { + _right = _right->_right; + } + + // Classify filter/predicate ops to perform various optimizations during evaluation + if ((_type == ast_filter || _type == ast_predicate) && _right) // workaround for clang static analyzer (_right is never null for ast_filter/ast_predicate) + { + assert(_test == predicate_default); + + if (_right->_type == ast_number_constant && _right->_data.number == 1.0) + _test = predicate_constant_one; + else if (_right->_rettype == xpath_type_number && (_right->_type == ast_number_constant || _right->_type == ast_variable || _right->_type == ast_func_last)) + _test = predicate_constant; + else if (_right->_rettype != xpath_type_number && _right->is_posinv_expr()) + _test = predicate_posinv; + } + + // Rewrite descendant-or-self::node()/child::foo with descendant::foo + // The former is a full form of //foo, the latter is much faster since it executes the node test immediately + // Do a similar kind of rewrite for self/descendant/descendant-or-self axes + // Note that we only rewrite positionally invariant steps (//foo[1] != /descendant::foo[1]) + if (_type == ast_step && (_axis == axis_child || _axis == axis_self || _axis == axis_descendant || _axis == axis_descendant_or_self) && + _left && _left->_type == ast_step && _left->_axis == axis_descendant_or_self && _left->_test == nodetest_type_node && !_left->_right && + is_posinv_step()) + { + if (_axis == axis_child || _axis == axis_descendant) + _axis = axis_descendant; + else + _axis = axis_descendant_or_self; + + _left = _left->_left; + } + + // Use optimized lookup table implementation for translate() with constant arguments + if (_type == ast_func_translate && + _right && // workaround for clang static analyzer (_right is never null for ast_func_translate) + _right->_type == ast_string_constant && _right->_next->_type == ast_string_constant) + { + unsigned char* table = translate_table_generate(alloc, _right->_data.string, _right->_next->_data.string); + + if (table) + { + _type = ast_opt_translate_table; + _data.table = table; + } + } + + // Use optimized path for @attr = 'value' or @attr = $value + if (_type == ast_op_equal && + _left && _right && // workaround for clang static analyzer and Coverity (_left and _right are never null for ast_op_equal) + // coverity[mixed_enums] + _left->_type == ast_step && _left->_axis == axis_attribute && _left->_test == nodetest_name && !_left->_left && !_left->_right && + (_right->_type == ast_string_constant || (_right->_type == ast_variable && _right->_rettype == xpath_type_string))) + { + _type = ast_opt_compare_attribute; + } + } + + bool is_posinv_expr() const + { + switch (_type) + { + case ast_func_position: + case ast_func_last: + return false; + + case ast_string_constant: + case ast_number_constant: + case ast_variable: + return true; + + case ast_step: + case ast_step_root: + return true; + + case ast_predicate: + case ast_filter: + return true; + + default: + if (_left && !_left->is_posinv_expr()) return false; + + for (xpath_ast_node* n = _right; n; n = n->_next) + if (!n->is_posinv_expr()) return false; + + return true; + } + } + + bool is_posinv_step() const + { + assert(_type == ast_step); + + for (xpath_ast_node* n = _right; n; n = n->_next) + { + assert(n->_type == ast_predicate); + + if (n->_test != predicate_posinv) + return false; + } + + return true; + } + + xpath_value_type rettype() const + { + return static_cast(_rettype); + } + }; + + static const size_t xpath_ast_depth_limit = + #ifdef PUGIXML_XPATH_DEPTH_LIMIT + PUGIXML_XPATH_DEPTH_LIMIT + #else + 1024 + #endif + ; + + struct xpath_parser + { + xpath_allocator* _alloc; + xpath_lexer _lexer; + + const char_t* _query; + xpath_variable_set* _variables; + + xpath_parse_result* _result; + + char_t _scratch[32]; + + size_t _depth; + + xpath_ast_node* error(const char* message) + { + _result->error = message; + _result->offset = _lexer.current_pos() - _query; + + return 0; + } + + xpath_ast_node* error_oom() + { + assert(_alloc->_error); + *_alloc->_error = true; + + return 0; + } + + xpath_ast_node* error_rec() + { + return error("Exceeded maximum allowed query depth"); + } + + void* alloc_node() + { + return _alloc->allocate(sizeof(xpath_ast_node)); + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, const char_t* value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, double value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, xpath_variable* value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, xpath_ast_node* left = 0, xpath_ast_node* right = 0) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, left, right) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_ast_node* left, axis_t axis, nodetest_t test, const char_t* contents) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, left, axis, test, contents) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_ast_node* left, xpath_ast_node* right, predicate_t test) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, left, right, test) : 0; + } + + const char_t* alloc_string(const xpath_lexer_string& value) + { + if (!value.begin) + return PUGIXML_TEXT(""); + + size_t length = static_cast(value.end - value.begin); + + char_t* c = static_cast(_alloc->allocate((length + 1) * sizeof(char_t))); + if (!c) return 0; + + memcpy(c, value.begin, length * sizeof(char_t)); + c[length] = 0; + + return c; + } + + xpath_ast_node* parse_function(const xpath_lexer_string& name, size_t argc, xpath_ast_node* args[2]) + { + switch (name.begin[0]) + { + case 'b': + if (name == PUGIXML_TEXT("boolean") && argc == 1) + return alloc_node(ast_func_boolean, xpath_type_boolean, args[0]); + + break; + + case 'c': + if (name == PUGIXML_TEXT("count") && argc == 1) + { + if (args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(ast_func_count, xpath_type_number, args[0]); + } + else if (name == PUGIXML_TEXT("contains") && argc == 2) + return alloc_node(ast_func_contains, xpath_type_boolean, args[0], args[1]); + else if (name == PUGIXML_TEXT("concat") && argc >= 2) + return alloc_node(ast_func_concat, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("ceiling") && argc == 1) + return alloc_node(ast_func_ceiling, xpath_type_number, args[0]); + + break; + + case 'f': + if (name == PUGIXML_TEXT("false") && argc == 0) + return alloc_node(ast_func_false, xpath_type_boolean); + else if (name == PUGIXML_TEXT("floor") && argc == 1) + return alloc_node(ast_func_floor, xpath_type_number, args[0]); + + break; + + case 'i': + if (name == PUGIXML_TEXT("id") && argc == 1) + return alloc_node(ast_func_id, xpath_type_node_set, args[0]); + + break; + + case 'l': + if (name == PUGIXML_TEXT("last") && argc == 0) + return alloc_node(ast_func_last, xpath_type_number); + else if (name == PUGIXML_TEXT("lang") && argc == 1) + return alloc_node(ast_func_lang, xpath_type_boolean, args[0]); + else if (name == PUGIXML_TEXT("local-name") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_local_name_0 : ast_func_local_name_1, xpath_type_string, args[0]); + } + + break; + + case 'n': + if (name == PUGIXML_TEXT("name") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_name_0 : ast_func_name_1, xpath_type_string, args[0]); + } + else if (name == PUGIXML_TEXT("namespace-uri") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_namespace_uri_0 : ast_func_namespace_uri_1, xpath_type_string, args[0]); + } + else if (name == PUGIXML_TEXT("normalize-space") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_normalize_space_0 : ast_func_normalize_space_1, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("not") && argc == 1) + return alloc_node(ast_func_not, xpath_type_boolean, args[0]); + else if (name == PUGIXML_TEXT("number") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_number_0 : ast_func_number_1, xpath_type_number, args[0]); + + break; + + case 'p': + if (name == PUGIXML_TEXT("position") && argc == 0) + return alloc_node(ast_func_position, xpath_type_number); + + break; + + case 'r': + if (name == PUGIXML_TEXT("round") && argc == 1) + return alloc_node(ast_func_round, xpath_type_number, args[0]); + + break; + + case 's': + if (name == PUGIXML_TEXT("string") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_string_0 : ast_func_string_1, xpath_type_string, args[0]); + else if (name == PUGIXML_TEXT("string-length") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_string_length_0 : ast_func_string_length_1, xpath_type_number, args[0]); + else if (name == PUGIXML_TEXT("starts-with") && argc == 2) + return alloc_node(ast_func_starts_with, xpath_type_boolean, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring-before") && argc == 2) + return alloc_node(ast_func_substring_before, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring-after") && argc == 2) + return alloc_node(ast_func_substring_after, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring") && (argc == 2 || argc == 3)) + return alloc_node(argc == 2 ? ast_func_substring_2 : ast_func_substring_3, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("sum") && argc == 1) + { + if (args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(ast_func_sum, xpath_type_number, args[0]); + } + + break; + + case 't': + if (name == PUGIXML_TEXT("translate") && argc == 3) + return alloc_node(ast_func_translate, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("true") && argc == 0) + return alloc_node(ast_func_true, xpath_type_boolean); + + break; + + default: + break; + } + + return error("Unrecognized function or wrong parameter count"); + } + + axis_t parse_axis_name(const xpath_lexer_string& name, bool& specified) + { + specified = true; + + switch (name.begin[0]) + { + case 'a': + if (name == PUGIXML_TEXT("ancestor")) + return axis_ancestor; + else if (name == PUGIXML_TEXT("ancestor-or-self")) + return axis_ancestor_or_self; + else if (name == PUGIXML_TEXT("attribute")) + return axis_attribute; + + break; + + case 'c': + if (name == PUGIXML_TEXT("child")) + return axis_child; + + break; + + case 'd': + if (name == PUGIXML_TEXT("descendant")) + return axis_descendant; + else if (name == PUGIXML_TEXT("descendant-or-self")) + return axis_descendant_or_self; + + break; + + case 'f': + if (name == PUGIXML_TEXT("following")) + return axis_following; + else if (name == PUGIXML_TEXT("following-sibling")) + return axis_following_sibling; + + break; + + case 'n': + if (name == PUGIXML_TEXT("namespace")) + return axis_namespace; + + break; + + case 'p': + if (name == PUGIXML_TEXT("parent")) + return axis_parent; + else if (name == PUGIXML_TEXT("preceding")) + return axis_preceding; + else if (name == PUGIXML_TEXT("preceding-sibling")) + return axis_preceding_sibling; + + break; + + case 's': + if (name == PUGIXML_TEXT("self")) + return axis_self; + + break; + + default: + break; + } + + specified = false; + return axis_child; + } + + nodetest_t parse_node_test_type(const xpath_lexer_string& name) + { + switch (name.begin[0]) + { + case 'c': + if (name == PUGIXML_TEXT("comment")) + return nodetest_type_comment; + + break; + + case 'n': + if (name == PUGIXML_TEXT("node")) + return nodetest_type_node; + + break; + + case 'p': + if (name == PUGIXML_TEXT("processing-instruction")) + return nodetest_type_pi; + + break; + + case 't': + if (name == PUGIXML_TEXT("text")) + return nodetest_type_text; + + break; + + default: + break; + } + + return nodetest_none; + } + + // PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall + xpath_ast_node* parse_primary_expression() + { + switch (_lexer.current()) + { + case lex_var_ref: + { + xpath_lexer_string name = _lexer.contents(); + + if (!_variables) + return error("Unknown variable: variable set is not provided"); + + xpath_variable* var = 0; + if (!get_variable_scratch(_scratch, _variables, name.begin, name.end, &var)) + return error_oom(); + + if (!var) + return error("Unknown variable: variable set does not contain the given name"); + + _lexer.next(); + + return alloc_node(ast_variable, var->type(), var); + } + + case lex_open_brace: + { + _lexer.next(); + + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + if (_lexer.current() != lex_close_brace) + return error("Expected ')' to match an opening '('"); + + _lexer.next(); + + return n; + } + + case lex_quoted_string: + { + const char_t* value = alloc_string(_lexer.contents()); + if (!value) return 0; + + _lexer.next(); + + return alloc_node(ast_string_constant, xpath_type_string, value); + } + + case lex_number: + { + double value = 0; + + if (!convert_string_to_number_scratch(_scratch, _lexer.contents().begin, _lexer.contents().end, &value)) + return error_oom(); + + _lexer.next(); + + return alloc_node(ast_number_constant, xpath_type_number, value); + } + + case lex_string: + { + xpath_ast_node* args[2] = {0}; + size_t argc = 0; + + xpath_lexer_string function = _lexer.contents(); + _lexer.next(); + + xpath_ast_node* last_arg = 0; + + if (_lexer.current() != lex_open_brace) + return error("Unrecognized function call"); + _lexer.next(); + + size_t old_depth = _depth; + + while (_lexer.current() != lex_close_brace) + { + if (argc > 0) + { + if (_lexer.current() != lex_comma) + return error("No comma between function arguments"); + _lexer.next(); + } + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + if (argc < 2) args[argc] = n; + else last_arg->set_next(n); + + argc++; + last_arg = n; + } + + _lexer.next(); + + _depth = old_depth; + + return parse_function(function, argc, args); + } + + default: + return error("Unrecognizable primary expression"); + } + } + + // FilterExpr ::= PrimaryExpr | FilterExpr Predicate + // Predicate ::= '[' PredicateExpr ']' + // PredicateExpr ::= Expr + xpath_ast_node* parse_filter_expression() + { + xpath_ast_node* n = parse_primary_expression(); + if (!n) return 0; + + size_t old_depth = _depth; + + while (_lexer.current() == lex_open_square_brace) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + if (n->rettype() != xpath_type_node_set) + return error("Predicate has to be applied to node set"); + + xpath_ast_node* expr = parse_expression(); + if (!expr) return 0; + + n = alloc_node(ast_filter, n, expr, predicate_default); + if (!n) return 0; + + if (_lexer.current() != lex_close_square_brace) + return error("Expected ']' to match an opening '['"); + + _lexer.next(); + } + + _depth = old_depth; + + return n; + } + + // Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep + // AxisSpecifier ::= AxisName '::' | '@'? + // NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')' + // NameTest ::= '*' | NCName ':' '*' | QName + // AbbreviatedStep ::= '.' | '..' + xpath_ast_node* parse_step(xpath_ast_node* set) + { + if (set && set->rettype() != xpath_type_node_set) + return error("Step has to be applied to node set"); + + bool axis_specified = false; + axis_t axis = axis_child; // implied child axis + + if (_lexer.current() == lex_axis_attribute) + { + axis = axis_attribute; + axis_specified = true; + + _lexer.next(); + } + else if (_lexer.current() == lex_dot) + { + _lexer.next(); + + if (_lexer.current() == lex_open_square_brace) + return error("Predicates are not allowed after an abbreviated step"); + + return alloc_node(ast_step, set, axis_self, nodetest_type_node, 0); + } + else if (_lexer.current() == lex_double_dot) + { + _lexer.next(); + + if (_lexer.current() == lex_open_square_brace) + return error("Predicates are not allowed after an abbreviated step"); + + return alloc_node(ast_step, set, axis_parent, nodetest_type_node, 0); + } + + nodetest_t nt_type = nodetest_none; + xpath_lexer_string nt_name; + + if (_lexer.current() == lex_string) + { + // node name test + nt_name = _lexer.contents(); + _lexer.next(); + + // was it an axis name? + if (_lexer.current() == lex_double_colon) + { + // parse axis name + if (axis_specified) + return error("Two axis specifiers in one step"); + + axis = parse_axis_name(nt_name, axis_specified); + + if (!axis_specified) + return error("Unknown axis"); + + // read actual node test + _lexer.next(); + + if (_lexer.current() == lex_multiply) + { + nt_type = nodetest_all; + nt_name = xpath_lexer_string(); + _lexer.next(); + } + else if (_lexer.current() == lex_string) + { + nt_name = _lexer.contents(); + _lexer.next(); + } + else + { + return error("Unrecognized node test"); + } + } + + if (nt_type == nodetest_none) + { + // node type test or processing-instruction + if (_lexer.current() == lex_open_brace) + { + _lexer.next(); + + if (_lexer.current() == lex_close_brace) + { + _lexer.next(); + + nt_type = parse_node_test_type(nt_name); + + if (nt_type == nodetest_none) + return error("Unrecognized node type"); + + nt_name = xpath_lexer_string(); + } + else if (nt_name == PUGIXML_TEXT("processing-instruction")) + { + if (_lexer.current() != lex_quoted_string) + return error("Only literals are allowed as arguments to processing-instruction()"); + + nt_type = nodetest_pi; + nt_name = _lexer.contents(); + _lexer.next(); + + if (_lexer.current() != lex_close_brace) + return error("Unmatched brace near processing-instruction()"); + _lexer.next(); + } + else + { + return error("Unmatched brace near node type test"); + } + } + // QName or NCName:* + else + { + if (nt_name.end - nt_name.begin > 2 && nt_name.end[-2] == ':' && nt_name.end[-1] == '*') // NCName:* + { + nt_name.end--; // erase * + + nt_type = nodetest_all_in_namespace; + } + else + { + nt_type = nodetest_name; + } + } + } + } + else if (_lexer.current() == lex_multiply) + { + nt_type = nodetest_all; + _lexer.next(); + } + else + { + return error("Unrecognized node test"); + } + + const char_t* nt_name_copy = alloc_string(nt_name); + if (!nt_name_copy) return 0; + + xpath_ast_node* n = alloc_node(ast_step, set, axis, nt_type, nt_name_copy); + if (!n) return 0; + + size_t old_depth = _depth; + + xpath_ast_node* last = 0; + + while (_lexer.current() == lex_open_square_brace) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* expr = parse_expression(); + if (!expr) return 0; + + xpath_ast_node* pred = alloc_node(ast_predicate, 0, expr, predicate_default); + if (!pred) return 0; + + if (_lexer.current() != lex_close_square_brace) + return error("Expected ']' to match an opening '['"); + _lexer.next(); + + if (last) last->set_next(pred); + else n->set_right(pred); + + last = pred; + } + + _depth = old_depth; + + return n; + } + + // RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | RelativeLocationPath '//' Step + xpath_ast_node* parse_relative_location_path(xpath_ast_node* set) + { + xpath_ast_node* n = parse_step(set); + if (!n) return 0; + + size_t old_depth = _depth; + + while (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) + { + lexeme_t l = _lexer.current(); + _lexer.next(); + + if (l == lex_double_slash) + { + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + + ++_depth; + } + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + n = parse_step(n); + if (!n) return 0; + } + + _depth = old_depth; + + return n; + } + + // LocationPath ::= RelativeLocationPath | AbsoluteLocationPath + // AbsoluteLocationPath ::= '/' RelativeLocationPath? | '//' RelativeLocationPath + xpath_ast_node* parse_location_path() + { + if (_lexer.current() == lex_slash) + { + _lexer.next(); + + xpath_ast_node* n = alloc_node(ast_step_root, xpath_type_node_set); + if (!n) return 0; + + // relative location path can start from axis_attribute, dot, double_dot, multiply and string lexemes; any other lexeme means standalone root path + lexeme_t l = _lexer.current(); + + if (l == lex_string || l == lex_axis_attribute || l == lex_dot || l == lex_double_dot || l == lex_multiply) + return parse_relative_location_path(n); + else + return n; + } + else if (_lexer.current() == lex_double_slash) + { + _lexer.next(); + + xpath_ast_node* n = alloc_node(ast_step_root, xpath_type_node_set); + if (!n) return 0; + + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + + return parse_relative_location_path(n); + } + + // else clause moved outside of if because of bogus warning 'control may reach end of non-void function being inlined' in gcc 4.0.1 + return parse_relative_location_path(0); + } + + // PathExpr ::= LocationPath + // | FilterExpr + // | FilterExpr '/' RelativeLocationPath + // | FilterExpr '//' RelativeLocationPath + // UnionExpr ::= PathExpr | UnionExpr '|' PathExpr + // UnaryExpr ::= UnionExpr | '-' UnaryExpr + xpath_ast_node* parse_path_or_unary_expression() + { + // Clarification. + // PathExpr begins with either LocationPath or FilterExpr. + // FilterExpr begins with PrimaryExpr + // PrimaryExpr begins with '$' in case of it being a variable reference, + // '(' in case of it being an expression, string literal, number constant or + // function call. + if (_lexer.current() == lex_var_ref || _lexer.current() == lex_open_brace || + _lexer.current() == lex_quoted_string || _lexer.current() == lex_number || + _lexer.current() == lex_string) + { + if (_lexer.current() == lex_string) + { + // This is either a function call, or not - if not, we shall proceed with location path + const char_t* state = _lexer.state(); + + while (PUGI__IS_CHARTYPE(*state, ct_space)) ++state; + + if (*state != '(') + return parse_location_path(); + + // This looks like a function call; however this still can be a node-test. Check it. + if (parse_node_test_type(_lexer.contents()) != nodetest_none) + return parse_location_path(); + } + + xpath_ast_node* n = parse_filter_expression(); + if (!n) return 0; + + if (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) + { + lexeme_t l = _lexer.current(); + _lexer.next(); + + if (l == lex_double_slash) + { + if (n->rettype() != xpath_type_node_set) + return error("Step has to be applied to node set"); + + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + } + + // select from location path + return parse_relative_location_path(n); + } + + return n; + } + else if (_lexer.current() == lex_minus) + { + _lexer.next(); + + // precedence 7+ - only parses union expressions + xpath_ast_node* n = parse_expression(7); + if (!n) return 0; + + return alloc_node(ast_op_negate, xpath_type_number, n); + } + else + { + return parse_location_path(); + } + } + + struct binary_op_t + { + ast_type_t asttype; + xpath_value_type rettype; + int precedence; + + binary_op_t(): asttype(ast_unknown), rettype(xpath_type_none), precedence(0) + { + } + + binary_op_t(ast_type_t asttype_, xpath_value_type rettype_, int precedence_): asttype(asttype_), rettype(rettype_), precedence(precedence_) + { + } + + static binary_op_t parse(xpath_lexer& lexer) + { + switch (lexer.current()) + { + case lex_string: + if (lexer.contents() == PUGIXML_TEXT("or")) + return binary_op_t(ast_op_or, xpath_type_boolean, 1); + else if (lexer.contents() == PUGIXML_TEXT("and")) + return binary_op_t(ast_op_and, xpath_type_boolean, 2); + else if (lexer.contents() == PUGIXML_TEXT("div")) + return binary_op_t(ast_op_divide, xpath_type_number, 6); + else if (lexer.contents() == PUGIXML_TEXT("mod")) + return binary_op_t(ast_op_mod, xpath_type_number, 6); + else + return binary_op_t(); + + case lex_equal: + return binary_op_t(ast_op_equal, xpath_type_boolean, 3); + + case lex_not_equal: + return binary_op_t(ast_op_not_equal, xpath_type_boolean, 3); + + case lex_less: + return binary_op_t(ast_op_less, xpath_type_boolean, 4); + + case lex_greater: + return binary_op_t(ast_op_greater, xpath_type_boolean, 4); + + case lex_less_or_equal: + return binary_op_t(ast_op_less_or_equal, xpath_type_boolean, 4); + + case lex_greater_or_equal: + return binary_op_t(ast_op_greater_or_equal, xpath_type_boolean, 4); + + case lex_plus: + return binary_op_t(ast_op_add, xpath_type_number, 5); + + case lex_minus: + return binary_op_t(ast_op_subtract, xpath_type_number, 5); + + case lex_multiply: + return binary_op_t(ast_op_multiply, xpath_type_number, 6); + + case lex_union: + return binary_op_t(ast_op_union, xpath_type_node_set, 7); + + default: + return binary_op_t(); + } + } + }; + + xpath_ast_node* parse_expression_rec(xpath_ast_node* lhs, int limit) + { + binary_op_t op = binary_op_t::parse(_lexer); + + while (op.asttype != ast_unknown && op.precedence >= limit) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* rhs = parse_path_or_unary_expression(); + if (!rhs) return 0; + + binary_op_t nextop = binary_op_t::parse(_lexer); + + while (nextop.asttype != ast_unknown && nextop.precedence > op.precedence) + { + rhs = parse_expression_rec(rhs, nextop.precedence); + if (!rhs) return 0; + + nextop = binary_op_t::parse(_lexer); + } + + if (op.asttype == ast_op_union && (lhs->rettype() != xpath_type_node_set || rhs->rettype() != xpath_type_node_set)) + return error("Union operator has to be applied to node sets"); + + lhs = alloc_node(op.asttype, op.rettype, lhs, rhs); + if (!lhs) return 0; + + op = binary_op_t::parse(_lexer); + } + + return lhs; + } + + // Expr ::= OrExpr + // OrExpr ::= AndExpr | OrExpr 'or' AndExpr + // AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr + // EqualityExpr ::= RelationalExpr + // | EqualityExpr '=' RelationalExpr + // | EqualityExpr '!=' RelationalExpr + // RelationalExpr ::= AdditiveExpr + // | RelationalExpr '<' AdditiveExpr + // | RelationalExpr '>' AdditiveExpr + // | RelationalExpr '<=' AdditiveExpr + // | RelationalExpr '>=' AdditiveExpr + // AdditiveExpr ::= MultiplicativeExpr + // | AdditiveExpr '+' MultiplicativeExpr + // | AdditiveExpr '-' MultiplicativeExpr + // MultiplicativeExpr ::= UnaryExpr + // | MultiplicativeExpr '*' UnaryExpr + // | MultiplicativeExpr 'div' UnaryExpr + // | MultiplicativeExpr 'mod' UnaryExpr + xpath_ast_node* parse_expression(int limit = 0) + { + size_t old_depth = _depth; + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* n = parse_path_or_unary_expression(); + if (!n) return 0; + + n = parse_expression_rec(n, limit); + + _depth = old_depth; + + return n; + } + + xpath_parser(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result): _alloc(alloc), _lexer(query), _query(query), _variables(variables), _result(result), _depth(0) + { + } + + xpath_ast_node* parse() + { + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + assert(_depth == 0); + + // check if there are unparsed tokens left + if (_lexer.current() != lex_eof) + return error("Incorrect query"); + + return n; + } + + static xpath_ast_node* parse(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result) + { + xpath_parser parser(query, variables, alloc, result); + + return parser.parse(); + } + }; + + struct xpath_query_impl + { + static xpath_query_impl* create() + { + void* memory = xml_memory::allocate(sizeof(xpath_query_impl)); + if (!memory) return 0; + + return new (memory) xpath_query_impl(); + } + + static void destroy(xpath_query_impl* impl) + { + // free all allocated pages + impl->alloc.release(); + + // free allocator memory (with the first page) + xml_memory::deallocate(impl); + } + + xpath_query_impl(): root(0), alloc(&block, &oom), oom(false) + { + block.next = 0; + block.capacity = sizeof(block.data); + } + + xpath_ast_node* root; + xpath_allocator alloc; + xpath_memory_block block; + bool oom; + }; + + PUGI__FN impl::xpath_ast_node* evaluate_node_set_prepare(xpath_query_impl* impl) + { + if (!impl) return 0; + + if (impl->root->rettype() != xpath_type_node_set) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return 0; + #else + xpath_parse_result res; + res.error = "Expression does not evaluate to node set"; + + throw xpath_exception(res); + #endif + } + + return impl->root; + } +PUGI__NS_END + +namespace pugi +{ +#ifndef PUGIXML_NO_EXCEPTIONS + PUGI__FN xpath_exception::xpath_exception(const xpath_parse_result& result_): _result(result_) + { + assert(_result.error); + } + + PUGI__FN const char* xpath_exception::what() const throw() + { + return _result.error; + } + + PUGI__FN const xpath_parse_result& xpath_exception::result() const + { + return _result; + } +#endif + + PUGI__FN xpath_node::xpath_node() + { + } + + PUGI__FN xpath_node::xpath_node(const xml_node& node_): _node(node_) + { + } + + PUGI__FN xpath_node::xpath_node(const xml_attribute& attribute_, const xml_node& parent_): _node(attribute_ ? parent_ : xml_node()), _attribute(attribute_) + { + } + + PUGI__FN xml_node xpath_node::node() const + { + return _attribute ? xml_node() : _node; + } + + PUGI__FN xml_attribute xpath_node::attribute() const + { + return _attribute; + } + + PUGI__FN xml_node xpath_node::parent() const + { + return _attribute ? _node : _node.parent(); + } + + PUGI__FN static void unspecified_bool_xpath_node(xpath_node***) + { + } + + PUGI__FN xpath_node::operator xpath_node::unspecified_bool_type() const + { + return (_node || _attribute) ? unspecified_bool_xpath_node : 0; + } + + PUGI__FN bool xpath_node::operator!() const + { + return !(_node || _attribute); + } + + PUGI__FN bool xpath_node::operator==(const xpath_node& n) const + { + return _node == n._node && _attribute == n._attribute; + } + + PUGI__FN bool xpath_node::operator!=(const xpath_node& n) const + { + return _node != n._node || _attribute != n._attribute; + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xpath_node& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xpath_node& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN void xpath_node_set::_assign(const_iterator begin_, const_iterator end_, type_t type_) + { + assert(begin_ <= end_); + + size_t size_ = static_cast(end_ - begin_); + + // use internal buffer for 0 or 1 elements, heap buffer otherwise + xpath_node* storage = (size_ <= 1) ? _storage : static_cast(impl::xml_memory::allocate(size_ * sizeof(xpath_node))); + + if (!storage) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return; + #else + throw std::bad_alloc(); + #endif + } + + // deallocate old buffer + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + + // size check is necessary because for begin_ = end_ = nullptr, memcpy is UB + if (size_) + memcpy(storage, begin_, size_ * sizeof(xpath_node)); + + _begin = storage; + _end = storage + size_; + _type = type_; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs) PUGIXML_NOEXCEPT + { + _type = rhs._type; + _storage[0] = rhs._storage[0]; + _begin = (rhs._begin == rhs._storage) ? _storage : rhs._begin; + _end = _begin + (rhs._end - rhs._begin); + + rhs._type = type_unsorted; + rhs._begin = rhs._storage; + rhs._end = rhs._storage; + } +#endif + + PUGI__FN xpath_node_set::xpath_node_set(): _type(type_unsorted), _begin(_storage), _end(_storage) + { + } + + PUGI__FN xpath_node_set::xpath_node_set(const_iterator begin_, const_iterator end_, type_t type_): _type(type_unsorted), _begin(_storage), _end(_storage) + { + _assign(begin_, end_, type_); + } + + PUGI__FN xpath_node_set::~xpath_node_set() + { + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + } + + PUGI__FN xpath_node_set::xpath_node_set(const xpath_node_set& ns): _type(type_unsorted), _begin(_storage), _end(_storage) + { + _assign(ns._begin, ns._end, ns._type); + } + + PUGI__FN xpath_node_set& xpath_node_set::operator=(const xpath_node_set& ns) + { + if (this == &ns) return *this; + + _assign(ns._begin, ns._end, ns._type); + + return *this; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT: _type(type_unsorted), _begin(_storage), _end(_storage) + { + _move(rhs); + } + + PUGI__FN xpath_node_set& xpath_node_set::operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT + { + if (this == &rhs) return *this; + + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + + _move(rhs); + + return *this; + } +#endif + + PUGI__FN xpath_node_set::type_t xpath_node_set::type() const + { + return _type; + } + + PUGI__FN size_t xpath_node_set::size() const + { + return _end - _begin; + } + + PUGI__FN bool xpath_node_set::empty() const + { + return _begin == _end; + } + + PUGI__FN const xpath_node& xpath_node_set::operator[](size_t index) const + { + assert(index < size()); + return _begin[index]; + } + + PUGI__FN xpath_node_set::const_iterator xpath_node_set::begin() const + { + return _begin; + } + + PUGI__FN xpath_node_set::const_iterator xpath_node_set::end() const + { + return _end; + } + + PUGI__FN void xpath_node_set::sort(bool reverse) + { + _type = impl::xpath_sort(_begin, _end, _type, reverse); + } + + PUGI__FN xpath_node xpath_node_set::first() const + { + return impl::xpath_first(_begin, _end, _type); + } + + PUGI__FN xpath_parse_result::xpath_parse_result(): error("Internal error"), offset(0) + { + } + + PUGI__FN xpath_parse_result::operator bool() const + { + return error == 0; + } + + PUGI__FN const char* xpath_parse_result::description() const + { + return error ? error : "No error"; + } + + PUGI__FN xpath_variable::xpath_variable(xpath_value_type type_): _type(type_), _next(0) + { + } + + PUGI__FN const char_t* xpath_variable::name() const + { + switch (_type) + { + case xpath_type_node_set: + return static_cast(this)->name; + + case xpath_type_number: + return static_cast(this)->name; + + case xpath_type_string: + return static_cast(this)->name; + + case xpath_type_boolean: + return static_cast(this)->name; + + default: + assert(false && "Invalid variable type"); // unreachable + return 0; + } + } + + PUGI__FN xpath_value_type xpath_variable::type() const + { + return _type; + } + + PUGI__FN bool xpath_variable::get_boolean() const + { + return (_type == xpath_type_boolean) ? static_cast(this)->value : false; + } + + PUGI__FN double xpath_variable::get_number() const + { + return (_type == xpath_type_number) ? static_cast(this)->value : impl::gen_nan(); + } + + PUGI__FN const char_t* xpath_variable::get_string() const + { + const char_t* value = (_type == xpath_type_string) ? static_cast(this)->value : 0; + return value ? value : PUGIXML_TEXT(""); + } + + PUGI__FN const xpath_node_set& xpath_variable::get_node_set() const + { + return (_type == xpath_type_node_set) ? static_cast(this)->value : impl::dummy_node_set; + } + + PUGI__FN bool xpath_variable::set(bool value) + { + if (_type != xpath_type_boolean) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN bool xpath_variable::set(double value) + { + if (_type != xpath_type_number) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN bool xpath_variable::set(const char_t* value) + { + if (_type != xpath_type_string) return false; + + impl::xpath_variable_string* var = static_cast(this); + + // duplicate string + size_t size = (impl::strlength(value) + 1) * sizeof(char_t); + + char_t* copy = static_cast(impl::xml_memory::allocate(size)); + if (!copy) return false; + + memcpy(copy, value, size); + + // replace old string + if (var->value) impl::xml_memory::deallocate(var->value); + var->value = copy; + + return true; + } + + PUGI__FN bool xpath_variable::set(const xpath_node_set& value) + { + if (_type != xpath_type_node_set) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN xpath_variable_set::xpath_variable_set() + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _data[i] = 0; + } + + PUGI__FN xpath_variable_set::~xpath_variable_set() + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _destroy(_data[i]); + } + + PUGI__FN xpath_variable_set::xpath_variable_set(const xpath_variable_set& rhs) + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _data[i] = 0; + + _assign(rhs); + } + + PUGI__FN xpath_variable_set& xpath_variable_set::operator=(const xpath_variable_set& rhs) + { + if (this == &rhs) return *this; + + _assign(rhs); + + return *this; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + _data[i] = rhs._data[i]; + rhs._data[i] = 0; + } + } + + PUGI__FN xpath_variable_set& xpath_variable_set::operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + _destroy(_data[i]); + + _data[i] = rhs._data[i]; + rhs._data[i] = 0; + } + + return *this; + } +#endif + + PUGI__FN void xpath_variable_set::_assign(const xpath_variable_set& rhs) + { + xpath_variable_set temp; + + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + if (rhs._data[i] && !_clone(rhs._data[i], &temp._data[i])) + return; + + _swap(temp); + } + + PUGI__FN void xpath_variable_set::_swap(xpath_variable_set& rhs) + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + xpath_variable* chain = _data[i]; + + _data[i] = rhs._data[i]; + rhs._data[i] = chain; + } + } + + PUGI__FN xpath_variable* xpath_variable_set::_find(const char_t* name) const + { + const size_t hash_size = sizeof(_data) / sizeof(_data[0]); + size_t hash = impl::hash_string(name) % hash_size; + + // look for existing variable + for (xpath_variable* var = _data[hash]; var; var = var->_next) + if (impl::strequal(var->name(), name)) + return var; + + return 0; + } + + PUGI__FN bool xpath_variable_set::_clone(xpath_variable* var, xpath_variable** out_result) + { + xpath_variable* last = 0; + + while (var) + { + // allocate storage for new variable + xpath_variable* nvar = impl::new_xpath_variable(var->_type, var->name()); + if (!nvar) return false; + + // link the variable to the result immediately to handle failures gracefully + if (last) + last->_next = nvar; + else + *out_result = nvar; + + last = nvar; + + // copy the value; this can fail due to out-of-memory conditions + if (!impl::copy_xpath_variable(nvar, var)) return false; + + var = var->_next; + } + + return true; + } + + PUGI__FN void xpath_variable_set::_destroy(xpath_variable* var) + { + while (var) + { + xpath_variable* next = var->_next; + + impl::delete_xpath_variable(var->_type, var); + + var = next; + } + } + + PUGI__FN xpath_variable* xpath_variable_set::add(const char_t* name, xpath_value_type type) + { + const size_t hash_size = sizeof(_data) / sizeof(_data[0]); + size_t hash = impl::hash_string(name) % hash_size; + + // look for existing variable + for (xpath_variable* var = _data[hash]; var; var = var->_next) + if (impl::strequal(var->name(), name)) + return var->type() == type ? var : 0; + + // add new variable + xpath_variable* result = impl::new_xpath_variable(type, name); + + if (result) + { + result->_next = _data[hash]; + + _data[hash] = result; + } + + return result; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, bool value) + { + xpath_variable* var = add(name, xpath_type_boolean); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, double value) + { + xpath_variable* var = add(name, xpath_type_number); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, const char_t* value) + { + xpath_variable* var = add(name, xpath_type_string); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, const xpath_node_set& value) + { + xpath_variable* var = add(name, xpath_type_node_set); + return var ? var->set(value) : false; + } + + PUGI__FN xpath_variable* xpath_variable_set::get(const char_t* name) + { + return _find(name); + } + + PUGI__FN const xpath_variable* xpath_variable_set::get(const char_t* name) const + { + return _find(name); + } + + PUGI__FN xpath_query::xpath_query(const char_t* query, xpath_variable_set* variables): _impl(0) + { + impl::xpath_query_impl* qimpl = impl::xpath_query_impl::create(); + + if (!qimpl) + { + #ifdef PUGIXML_NO_EXCEPTIONS + _result.error = "Out of memory"; + #else + throw std::bad_alloc(); + #endif + } + else + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter impl(qimpl, impl::xpath_query_impl::destroy); + + qimpl->root = impl::xpath_parser::parse(query, variables, &qimpl->alloc, &_result); + + if (qimpl->root) + { + qimpl->root->optimize(&qimpl->alloc); + + _impl = impl.release(); + _result.error = 0; + } + else + { + #ifdef PUGIXML_NO_EXCEPTIONS + if (qimpl->oom) _result.error = "Out of memory"; + #else + if (qimpl->oom) throw std::bad_alloc(); + throw xpath_exception(_result); + #endif + } + } + } + + PUGI__FN xpath_query::xpath_query(): _impl(0) + { + } + + PUGI__FN xpath_query::~xpath_query() + { + if (_impl) + impl::xpath_query_impl::destroy(static_cast(_impl)); + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_query::xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT + { + _impl = rhs._impl; + _result = rhs._result; + rhs._impl = 0; + rhs._result = xpath_parse_result(); + } + + PUGI__FN xpath_query& xpath_query::operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT + { + if (this == &rhs) return *this; + + if (_impl) + impl::xpath_query_impl::destroy(static_cast(_impl)); + + _impl = rhs._impl; + _result = rhs._result; + rhs._impl = 0; + rhs._result = xpath_parse_result(); + + return *this; + } +#endif + + PUGI__FN xpath_value_type xpath_query::return_type() const + { + if (!_impl) return xpath_type_none; + + return static_cast(_impl)->root->rettype(); + } + + PUGI__FN bool xpath_query::evaluate_boolean(const xpath_node& n) const + { + if (!_impl) return false; + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + bool r = static_cast(_impl)->root->eval_boolean(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return false; + #else + throw std::bad_alloc(); + #endif + } + + return r; + } + + PUGI__FN double xpath_query::evaluate_number(const xpath_node& n) const + { + if (!_impl) return impl::gen_nan(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + double r = static_cast(_impl)->root->eval_number(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return impl::gen_nan(); + #else + throw std::bad_alloc(); + #endif + } + + return r; + } + +#ifndef PUGIXML_NO_STL + PUGI__FN string_t xpath_query::evaluate_string(const xpath_node& n) const + { + if (!_impl) return string_t(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_string r = static_cast(_impl)->root->eval_string(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return string_t(); + #else + throw std::bad_alloc(); + #endif + } + + return string_t(r.c_str(), r.length()); + } +#endif + + PUGI__FN size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const + { + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_string r = _impl ? static_cast(_impl)->root->eval_string(c, sd.stack) : impl::xpath_string(); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + r = impl::xpath_string(); + #else + throw std::bad_alloc(); + #endif + } + + size_t full_size = r.length() + 1; + + if (capacity > 0) + { + size_t size = (full_size < capacity) ? full_size : capacity; + assert(size > 0); + + memcpy(buffer, r.c_str(), (size - 1) * sizeof(char_t)); + buffer[size - 1] = 0; + } + + return full_size; + } + + PUGI__FN xpath_node_set xpath_query::evaluate_node_set(const xpath_node& n) const + { + impl::xpath_ast_node* root = impl::evaluate_node_set_prepare(static_cast(_impl)); + if (!root) return xpath_node_set(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_node_set_raw r = root->eval_node_set(c, sd.stack, impl::nodeset_eval_all); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return xpath_node_set(); + #else + throw std::bad_alloc(); + #endif + } + + return xpath_node_set(r.begin(), r.end(), r.type()); + } + + PUGI__FN xpath_node xpath_query::evaluate_node(const xpath_node& n) const + { + impl::xpath_ast_node* root = impl::evaluate_node_set_prepare(static_cast(_impl)); + if (!root) return xpath_node(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_node_set_raw r = root->eval_node_set(c, sd.stack, impl::nodeset_eval_first); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return xpath_node(); + #else + throw std::bad_alloc(); + #endif + } + + return r.first(); + } + + PUGI__FN const xpath_parse_result& xpath_query::result() const + { + return _result; + } + + PUGI__FN static void unspecified_bool_xpath_query(xpath_query***) + { + } + + PUGI__FN xpath_query::operator xpath_query::unspecified_bool_type() const + { + return _impl ? unspecified_bool_xpath_query : 0; + } + + PUGI__FN bool xpath_query::operator!() const + { + return !_impl; + } + + PUGI__FN xpath_node xml_node::select_node(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node(*this); + } + + PUGI__FN xpath_node xml_node::select_node(const xpath_query& query) const + { + return query.evaluate_node(*this); + } + + PUGI__FN xpath_node_set xml_node::select_nodes(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node_set(*this); + } + + PUGI__FN xpath_node_set xml_node::select_nodes(const xpath_query& query) const + { + return query.evaluate_node_set(*this); + } + + PUGI__FN xpath_node xml_node::select_single_node(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node(*this); + } + + PUGI__FN xpath_node xml_node::select_single_node(const xpath_query& query) const + { + return query.evaluate_node(*this); + } +} + +#endif + +#ifdef __BORLANDC__ +# pragma option pop +#endif + +// Intel C++ does not properly keep warning state for function templates, +// so popping warning state at the end of translation unit leads to warnings in the middle. +#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) +# pragma warning(pop) +#endif + +#if defined(_MSC_VER) && defined(__c2__) +# pragma clang diagnostic pop +#endif + +// Undefine all local macros (makes sure we're not leaking macros in header-only mode) +#undef PUGI__NO_INLINE +#undef PUGI__UNLIKELY +#undef PUGI__STATIC_ASSERT +#undef PUGI__DMC_VOLATILE +#undef PUGI__UNSIGNED_OVERFLOW +#undef PUGI__MSVC_CRT_VERSION +#undef PUGI__SNPRINTF +#undef PUGI__NS_BEGIN +#undef PUGI__NS_END +#undef PUGI__FN +#undef PUGI__FN_NO_INLINE +#undef PUGI__GETHEADER_IMPL +#undef PUGI__GETPAGE_IMPL +#undef PUGI__GETPAGE +#undef PUGI__NODETYPE +#undef PUGI__IS_CHARTYPE_IMPL +#undef PUGI__IS_CHARTYPE +#undef PUGI__IS_CHARTYPEX +#undef PUGI__ENDSWITH +#undef PUGI__SKIPWS +#undef PUGI__OPTSET +#undef PUGI__PUSHNODE +#undef PUGI__POPNODE +#undef PUGI__SCANFOR +#undef PUGI__SCANWHILE +#undef PUGI__SCANWHILE_UNROLL +#undef PUGI__ENDSEG +#undef PUGI__THROW_ERROR +#undef PUGI__CHECK_ERROR + +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/source/processes/hadronic/models/lend/src/statusMessageReporting.cc b/source/processes/hadronic/models/lend/src/statusMessageReporting.c similarity index 80% rename from source/processes/hadronic/models/lend/src/statusMessageReporting.cc rename to source/processes/hadronic/models/lend/src/statusMessageReporting.c index 7e04557f6d..f0fdc6fcd4 100644 --- a/source/processes/hadronic/models/lend/src/statusMessageReporting.cc +++ b/source/processes/hadronic/models/lend/src/statusMessageReporting.c @@ -1,19 +1,19 @@ +/* +# <> +# Copyright 2019, Lawrence Livermore National Security, LLC. +# This file is part of the gidiplus package (https://github.com/LLNL/gidiplus). +# gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT). +# SPDX-License-Identifier: MIT +# <> +*/ + #include #include #include #include -#ifdef WIN32 -/*#define va_copy(dst, src) ((dst) = (src))*/ -#endif - #include "statusMessageReporting.h" -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - #define SMR_InitialMessageSize 1024 #define SMR_IncrementMessageSize 1024 @@ -36,6 +36,9 @@ static void smr_reportRelease( statusMessageReport *report ); static int smr_setReport( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, enum smr_status status, char const *fmt, va_list *args ); static int smr_setAllocationFailure( statusMessageReport *report, char const *file, int line, char const *function, char const *fmt, va_list *args ); +static statusMessageReport *smr_firstReport2( statusMessageReporting const *smr ); +statusMessageReport *smr_nextReport2( statusMessageReport const *report ); +static void smr_write2( statusMessageReport const *report, FILE *f ); /* ============================================================ */ @@ -79,12 +82,12 @@ int smr_registerLibrary( char const *libraryName ) { int i; - if( smrIsSetup == 0 ) return( -1 ); - if( numberOfRegisteredLibraries == smr_maximumNumberOfRegisteredLibraries ) return( smr_tooManyIDs ); + if( smrIsSetup == 0 ) smr_setup( ); for( i = 0; i < numberOfRegisteredLibraries; ++i ) { /* Check if name is already registered. */ if( strcmp( libraryName, registeredLibraries[i] ) == 0 ) return( i ); } - if( ( registeredLibraries[numberOfRegisteredLibraries] = strdup( libraryName ) ) == NULL ) return( -2 ); + if( numberOfRegisteredLibraries == smr_maximumNumberOfRegisteredLibraries ) return( smr_tooManyIDs ); + if( ( registeredLibraries[numberOfRegisteredLibraries] = strdup( libraryName ) ) == NULL ) return( -1 ); ++numberOfRegisteredLibraries; return( numberOfRegisteredLibraries - 1 ); } @@ -98,7 +101,7 @@ int smr_numberOfRegisteredLibraries( void ) { /* ============================================================ */ -char const *smr_getRegisteredLibrariesName( int ID ) { +char const *smr_getRegisteredLibrarysName( int ID ) { if( ( ID < 0 ) || ( ID >= smr_maximumNumberOfRegisteredLibraries ) ) return( NULL ); return( registeredLibraries[ID] ); @@ -106,47 +109,46 @@ char const *smr_getRegisteredLibrariesName( int ID ) { /* ============================================================ */ -statusMessageReporting *smr_new( statusMessageReporting *smr, enum smr_status verbosity, int append ) { +statusMessageReporting *smr_new( statusMessageReporting *smr, enum smr_status verbosity ) { statusMessageReporting *new_SMR; if( ( new_SMR = (statusMessageReporting *) smr_malloc2( smr, sizeof( statusMessageReporting ), 0, "new_SMR" ) ) == NULL ) return( NULL ); - smr_initialize( new_SMR, verbosity, append ); + smr_initialize( new_SMR, verbosity ); return( new_SMR ); } /* ============================================================ */ -int smr_initialize( statusMessageReporting *smr, enum smr_status verbosity, int append ) { +int smr_initialize( statusMessageReporting *smr, enum smr_status verbosity ) { if( smr == NULL ) return( 0 ); smr->verbosity = verbosity; - smr->append = append; smr_reportInitialize( &(smr->report) ); return( 0 ); } /* ============================================================ */ -statusMessageReporting *smr_clone( statusMessageReporting *smr ) { +statusMessageReporting *smr_clone( statusMessageReporting const *smr ) { if( smr == NULL ) return( NULL ); - return( smr_new( NULL, smr->verbosity, smr->append ) ); + return( smr_new( NULL, smr->verbosity ) ); } /* ============================================================ */ void smr_release( statusMessageReporting *smr ) { - statusMessageReport *current, *next, *first = smr_firstReport( smr ); + statusMessageReport *current, *next, *first = smr_firstReport2( smr ); if( smr == NULL ) return; for( current = first; current != NULL; current = next ) { - next = smr_nextReport( current ); + next = smr_nextReport2( current ); smr_reportRelease( current ); if( current != first ) smr_freeMemory( (void **) ¤t ); } - smr_initialize( smr, smr->verbosity, smr->append ); + smr_initialize( smr, smr->verbosity ); } /* ============================================================ @@ -208,15 +210,13 @@ static int smr_setReport( statusMessageReporting *smr, void *userInterface, char if( smr == NULL ) return( 0 ); if( (int) status < (int) smr->verbosity ) return( 0 ); if( status == smr_status_Ok ) return( 0 ); - if( ( smr->report.status != smr_status_Ok ) && smr->append ) { - if( ( report = smr_reportNew( ) ) == NULL ) return( smr_setAllocationFailure( NULL, file, line, function, fmt, args ) ); - for( next = smr_firstReport( smr ); next->next != NULL; next = next->next ) ; - next->next = report; } - else { - if( status <= smr->report.status ) return( 0 ); - smr_release( smr ); - report = &(smr->report); - } + if( smr->report.status == smr_status_Ok ) { + report = &smr->report; } + else { + if( ( report = smr_reportNew( ) ) == NULL ) return( smr_setAllocationFailure( NULL, file, line, function, fmt, args ) ); + for( next = smr_firstReport2( smr ); next->next != NULL; next = next->next ); + next->next = report; + } report->status = status; if( ( libraryID < 0 ) || ( libraryID >= numberOfRegisteredLibraries ) ) libraryID = smr_invalidID; report->libraryID = libraryID; @@ -248,7 +248,7 @@ static int smr_setAllocationFailure( statusMessageReport *report, char const *fi vfprintf( stderr, fmt, *args ); va_end( *args ); - fprintf( stderr, "\nAt line %d of %s in function %s\n", line, file, function ); + fprintf( stderr, "\n At line %d of %s in function %s\n", line, file, function ); if( report != NULL ) { report->status = smr_status_Error; report->message = (char *) smr_mallocFailed; @@ -319,10 +319,10 @@ int smr_vsetReportError( statusMessageReporting *smr, void *userInterface, char /* ============================================================ */ -enum smr_status smr_highestStatus( statusMessageReporting *smr ) { +enum smr_status smr_highestStatus( statusMessageReporting const *smr ) { enum smr_status status = smr_status_Ok; - statusMessageReport *report; + statusMessageReport const *report; if( smr == NULL ) return( smr_status_Ok ); for( report = smr_firstReport( smr ); report != NULL; report = smr_nextReport( report ) ) if( report->status > status ) status = report->status; @@ -331,35 +331,35 @@ enum smr_status smr_highestStatus( statusMessageReporting *smr ) { /* ============================================================ */ -int smr_isOk( statusMessageReporting *smr ) { +int smr_isOk( statusMessageReporting const *smr ) { return( smr_highestStatus( smr ) == smr_status_Ok ); } /* ============================================================ */ -int smr_isInfo( statusMessageReporting *smr ) { +int smr_isInfo( statusMessageReporting const *smr ) { return( smr_highestStatus( smr ) == smr_status_Info ); } /* ============================================================ */ -int smr_isWarning( statusMessageReporting *smr ) { +int smr_isWarning( statusMessageReporting const *smr ) { return( smr_highestStatus( smr ) == smr_status_Warning ); } /* ============================================================ */ -int smr_isError( statusMessageReporting *smr ) { +int smr_isError( statusMessageReporting const *smr ) { return( smr_highestStatus( smr ) == smr_status_Error ); } /* ============================================================ */ -int smr_isWarningOrError( statusMessageReporting *smr ) { +int smr_isWarningOrError( statusMessageReporting const *smr ) { enum smr_status status = smr_highestStatus( smr ); @@ -368,7 +368,7 @@ int smr_isWarningOrError( statusMessageReporting *smr ) { /* ============================================================ */ -int smr_isReportOk( statusMessageReport *report ) { +int smr_isReportOk( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( report->status == smr_status_Ok ); @@ -376,7 +376,7 @@ int smr_isReportOk( statusMessageReport *report ) { /* ============================================================ */ -int smr_isReportInfo( statusMessageReport *report ) { +int smr_isReportInfo( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( report->status == smr_status_Info ); @@ -384,7 +384,7 @@ int smr_isReportInfo( statusMessageReport *report ) { /* ============================================================ */ -int smr_isReportWarning( statusMessageReport *report ) { +int smr_isReportWarning( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( report->status == smr_status_Warning ); @@ -392,7 +392,7 @@ int smr_isReportWarning( statusMessageReport *report ) { /* ============================================================ */ -int smr_isReportError( statusMessageReport *report ) { +int smr_isReportError( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( report->status == smr_status_Error ); @@ -400,7 +400,7 @@ int smr_isReportError( statusMessageReport *report ) { /* ============================================================ */ -int smr_isReportWarningOrError( statusMessageReport *report ) { +int smr_isReportWarningOrError( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( ( report->status == smr_status_Warning ) || ( report->status == smr_status_Error ) ); @@ -408,10 +408,10 @@ int smr_isReportWarningOrError( statusMessageReport *report ) { /* ============================================================ */ -int smr_numberOfReports( statusMessageReporting *smr ) { +int smr_numberOfReports( statusMessageReporting const *smr ) { int n = 0; - statusMessageReport *report; + statusMessageReport const *report; if( smr == NULL ) return( 0 ); if( smr->report.status == smr_status_Ok ) return( 0 ); @@ -421,16 +421,30 @@ int smr_numberOfReports( statusMessageReporting *smr ) { /* ============================================================ */ -statusMessageReport *smr_firstReport( statusMessageReporting *smr ) { +statusMessageReport const *smr_firstReport( statusMessageReporting const *smr ) { - if( smr == NULL ) return( NULL ); - if( smr->report.status == smr_status_Ok ) return( NULL ); - return( &(smr->report) ); + return( (statusMessageReport const *) smr_firstReport2( smr ) ); } /* ============================================================ */ -statusMessageReport *smr_nextReport( statusMessageReport *report ) { +static statusMessageReport *smr_firstReport2( statusMessageReporting const *smr ) { + + if( smr == NULL ) return( NULL ); + if( smr->report.status == smr_status_Ok ) return( NULL ); + return( &(((statusMessageReporting *) smr)->report) ); +} +/* +============================================================ +*/ +statusMessageReport const *smr_nextReport( statusMessageReport const *report ) { + + return( smr_nextReport2( report ) ); +} +/* +============================================================ +*/ +statusMessageReport *smr_nextReport2( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); return( report->next ); @@ -438,7 +452,7 @@ statusMessageReport *smr_nextReport( statusMessageReport *report ) { /* ============================================================ */ -enum smr_status smr_getVerbosity( statusMessageReporting *smr ) { +enum smr_status smr_getVerbosity( statusMessageReporting const *smr ) { if( smr == NULL ) return( smr_status_Ok ); return( smr->verbosity ); @@ -446,15 +460,7 @@ enum smr_status smr_getVerbosity( statusMessageReporting *smr ) { /* ============================================================ */ -int smr_getAppend( statusMessageReporting *smr ) { - - if( smr == NULL ) return( 0 ); - return( smr->append ); -} -/* -============================================================ -*/ -int smr_getLibraryID( statusMessageReport *report ) { +int smr_getLibraryID( statusMessageReport const *report ) { if( report == NULL ) return( 0 ); return( report->libraryID ); @@ -462,7 +468,7 @@ int smr_getLibraryID( statusMessageReport *report ) { /* ============================================================ */ -int smr_getCode( statusMessageReport *report ) { +int smr_getCode( statusMessageReport const *report ) { if( report == NULL ) return( -1 ); return( report->code ); @@ -470,7 +476,7 @@ int smr_getCode( statusMessageReport *report ) { /* ============================================================ */ -int smr_getLine( statusMessageReport *report ) { +int smr_getLine( statusMessageReport const *report ) { if( report == NULL ) return( -1 ); return( report->line ); @@ -478,7 +484,7 @@ int smr_getLine( statusMessageReport *report ) { /* ============================================================ */ -char const *smr_getFile( statusMessageReport *report ) { +char const *smr_getFile( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); return( report->fileName ); @@ -486,7 +492,7 @@ char const *smr_getFile( statusMessageReport *report ) { /* ============================================================ */ -char const *smr_getFunction( statusMessageReport *report ) { +char const *smr_getFunction( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); return( report->function ); @@ -494,7 +500,7 @@ char const *smr_getFunction( statusMessageReport *report ) { /* ============================================================ */ -char const *smr_getMessage( statusMessageReport *report ) { +char const *smr_getMessage( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); return( report->message ); @@ -502,7 +508,7 @@ char const *smr_getMessage( statusMessageReport *report ) { /* ============================================================ */ -char *smr_copyMessage( statusMessageReport *report ) { +char *smr_copyMessage( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); if( report->status == smr_status_Ok ) return( NULL ); @@ -511,11 +517,11 @@ char *smr_copyMessage( statusMessageReport *report ) { /* ============================================================ */ -char *smr_copyFullMessage( statusMessageReport *report ) { +char *smr_copyFullMessage( statusMessageReport const *report ) { if( report == NULL ) return( NULL ); if( report->status == smr_status_Ok ) return( NULL ); - return( smr_allocateFormatMessage( "%s\nAt line %d of %s in function %s", report->message, report->line, report->fileName, report->function ) ); + return( smr_allocateFormatMessage( "%s\n At line %d of %s in function %s", report->message, report->line, report->fileName, report->function ) ); } /* ============================================================ @@ -529,25 +535,34 @@ void smr_print( statusMessageReporting *smr, int clear ) { */ void smr_write( statusMessageReporting *smr, FILE *f, int clear ) { - statusMessageReport *report; - if( smr == NULL ) return; - for( report = smr_firstReport( smr ); report != NULL; report = smr_nextReport( report ) ) smr_reportWrite( report, f ); + fprintf( f, "======= Status message reports =======\n" ); + smr_write2( smr_firstReport( smr ), f ); if( clear ) smr_release( smr ); } /* ============================================================ */ -void smr_reportPrint( statusMessageReport *report ) { +static void smr_write2( statusMessageReport const *report, FILE *f ) { - smr_reportWrite( report, stderr ); + if( report == NULL ) return; + + smr_write2( smr_nextReport( report ), f ); + smr_reportWrite( report, f ); } /* ============================================================ */ -void smr_reportWrite( statusMessageReport *report, FILE *f ) { +void smr_reportPrint( statusMessageReport const *report ) { - if( report->message != NULL ) fprintf( f, "%s\nAt line %d of %s in function %s\n", report->message, report->line, report->fileName, report->function ); + smr_reportWrite( report, stdout ); +} +/* +============================================================ +*/ +void smr_reportWrite( statusMessageReport const *report, FILE *f ) { + + if( report->message != NULL ) fprintf( f, "%s\n At line %d of %s in function %s\n", report->message, report->line, report->fileName, report->function ); } /* ============================================================ @@ -592,16 +607,19 @@ char *smr_vallocateFormatMessage( char const *fmt, va_list *args ) { if( n > -1 ) { /* glibc 2.1 */ size = n + 3; } else { /* glibc 2.0 */ - size += SMR_IncrementMessageSize; + size *= 2; } if( message == buffer ) message = NULL; if( ( message = (char *) realloc( message, size ) ) == NULL ) return( NULL ); - } // Loop checking, 11.06.2015, T. Koi + } if( message == buffer ) { if( ( message = (char *) malloc( n + 1 ) ) == NULL ) return( NULL ); strcpy( message, buffer ); } else { - if( ( message = (char *) realloc( message, n + 1 ) ) == NULL ) return( NULL ); + char *old = message; + if( ( message = (char *) realloc( message, n + 1 ) ) == NULL ) { + if( old != NULL ) free( old ); + } } return( message ); } @@ -630,7 +648,7 @@ void *smr_realloc( statusMessageReporting *smr, void *pOld, size_t size, char co void *p = realloc( pOld, size ); if( ( p == NULL ) && ( smr != NULL ) ) { - smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_realloc: failed to realloc size = %z for variable %s\n", size, forItem ); + smr_setReportError( smr, NULL, file, line, function, smr_smrID, smr_codeMemoryAllocating, " smr_realloc: failed to realloc size = %z for variable %s\n", size, forItem ); } return( p ); } @@ -655,8 +673,8 @@ char *smr_allocateCopyString( statusMessageReporting *smr, char const *s, char c */ char *c = strdup( s ); - if( c == NULL ) smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_allocateCopyString: strdup failed for strlen( s ) = %z for variable %s", - strlen( s ), forItem ); + if( c == NULL ) smr_setReportError( smr, NULL, file, line, function, smr_smrID, smr_codeMemoryAllocating, " smr_allocateCopyString: strdup failed for strlen( s ) = %z for variable %s", + strlen( s ), forItem ); return( c ); } /* @@ -679,13 +697,9 @@ char *smr_allocateCopyStringN( statusMessageReporting *smr, char const *s, size_ if( c != NULL ) { c[l] = 0; } else { - smr_setReportError( smr, NULL, file, line, function, smr_smrID, -1, " smr_allocateCopyStringN: strndup failed for strlen( s ) = %z for variable %s", + smr_setReportError( smr, NULL, file, line, function, smr_smrID, smr_codeMemoryAllocating, " smr_allocateCopyStringN: strndup failed for strlen( s ) = %z for variable %s", strlen( s ), forItem ); } */ return( c ); } - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM.cc b/source/processes/hadronic/models/lend/src/xDataTOM.cc deleted file mode 100644 index f572e2efe7..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM.cc +++ /dev/null @@ -1,530 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include -#include -#include -#include -#include - -#if defined(WIN32) || defined(__MINGW32__) -#include -#define realpath( a, b ) GetFullPathName( a, PATH_MAX, b, NULL ) -#define strtoll _strtoi64 -#else -#include -#endif - -#include "xDataTOM_importXML_private.h" -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -int xDataTOM_smrLibraryID = smr_unknownID; - -static int xDataTOME_initializeElement( statusMessageReporting *smr, xDataTOM_element *element, xDataTOM_element *parent, int ordinal, int index, - char const *name ); -static void xDataTOME_displayTree( statusMessageReporting *smr, xDataTOM_element *element, int printAttributes, int level ); - -static int xDataTOM_initialize_xData( statusMessageReporting *smr, xDataTOM_xDataInfo *xDataInfo ); -/* -************************************************************ -*/ -xDataTOM_TOM *xDataTOM_importFile( statusMessageReporting *smr, const char *fileName ) { -/* -* Returns NULL is an error occurred. -*/ - - return( xDataXML_importFile( smr, fileName ) ); -} -/* -************************************************************ -*/ -xDataTOM_TOM *xDataTOM_mallocTOM( statusMessageReporting *smr ) { -/* -* Returns NULL is an error occurred. -*/ - xDataTOM_TOM *TOM; - - if( ( TOM = (xDataTOM_TOM *) smr_malloc2( smr, sizeof( xDataTOM_TOM ), 1, "xDataTOM_TOM" ) ) != NULL ) { - if( xDataTOM_initializeTOM( smr, TOM ) ) smr_freeMemory( (void **) &TOM ); - } - return( TOM ); -} -/* -************************************************************ -*/ -int xDataTOM_initializeTOM( statusMessageReporting *smr, xDataTOM_TOM *TOM ) { - - TOM->fileName = NULL; - TOM->realFileName = NULL; - xDataTOME_initializeElement( smr, &(TOM->root), NULL, 0, 0, "" ); - return( !smr_isOk( smr ) ); -} -/* -************************************************************ -*/ -void *xDataTOM_freeTOM( statusMessageReporting * /*smr*/, xDataTOM_TOM **TOM ) { - - xDataTOM_TOM *TOMp; - - if( TOM == NULL ) return( NULL ); - TOMp = *TOM; - if( TOMp == NULL ) return( NULL ); - xDataTOM_releaseElement( &(TOMp->root) ); - smr_freeMemory( (void **) &(TOMp->fileName) ); - smr_freeMemory( (void **) &(TOMp->realFileName) ); - smr_freeMemory( (void **) TOM ); - return( NULL ); -} -/* -************************************************************ -*/ -int xDataTOM_setFileNameTOM( statusMessageReporting *smr, xDataTOM_TOM *TOM, const char *fileName ) { -/* -* Returns not zero value if error occurred. -*/ - - char realPath[PATH_MAX+1]; - - smr_freeMemory( (void **) &(TOM->fileName) ); - smr_freeMemory( (void **) &(TOM->realFileName) ); - if( fileName != NULL ) { - if( ( TOM->fileName = smr_allocateCopyString2( smr, fileName, "fileName" ) ) == NULL ) return( 1 ); - if( realpath( fileName, realPath ) != NULL ) { - if( ( TOM->realFileName = smr_allocateCopyString2( smr, realPath, "realFileName" ) ) == NULL ) return( 1 ); - } - } - return( 0 ); -} -/* -************************************************************ -*/ -void xDataTOM_displayTree( statusMessageReporting *smr, xDataTOM_TOM *TOM, int printAttributes ) { - - if( TOM->root.children != NULL ) xDataTOME_displayTree( smr, TOM->root.children, printAttributes, 0 ); -} - -/**************************************** -* Element functions. -****************************************/ -/* -************************************************************ -*/ -xDataTOM_element *xDataTOM_mallocElement( statusMessageReporting *smr, xDataTOM_element *parent, int ordinal, int index, char const *name ) { -/* -* Returns NULL is an error occurred. -*/ - xDataTOM_element *element; - - if( ( element = (xDataTOM_element *) smr_malloc2( smr, sizeof( xDataTOM_element ), 1, "xDataTOM_elelument" ) ) != NULL ) { - if( xDataTOME_initializeElement( smr, element, parent, ordinal, index, name ) ) smr_freeMemory( (void **) &element ); - } - return( element ); -} -/* -************************************************************ -*/ -void xDataTOM_freeElement( xDataTOM_element **element ) { - - if( element == NULL ) return; - xDataTOM_releaseElement( *element ); - smr_freeMemory( (void **) element ); -} -/* -************************************************************ -*/ -void xDataTOM_releaseElement( xDataTOM_element *element ) { - - xDataTOM_element *child, *nextChild; - - if( element == NULL ) return; - xDataTOMAL_release( &(element->attributes) ); - for( child = element->children; child != NULL; child = nextChild ) { - nextChild = child->next; - xDataTOM_freeElement( &child ); - } - if( element->xDataInfo.ID != NULL ) { - xDataTOM_axes_release( &(element->xDataInfo.axes) ); - if( strcmp( element->xDataInfo.ID, xDataTOM_XYs_ID ) == 0 ) { - xDataTOM_XYs_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_regionsXYs_ID ) == 0 ) { - xDataTOM_regionsXYs_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_W_XYs_ID ) == 0 ) { - xDataTOM_W_XYs_freeFrom_xDataInfo( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_V_W_XYs_ID ) == 0 ) { - xDataTOM_V_W_XYs_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_W_XYs_LegendreSeries_ID ) == 0 ) { - xDataTOM_W_XYs_LegendreSeries_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_regionsW_XYs_LegendreSeries_ID ) == 0 ) { - xDataTOM_regionsW_XYs_LegendreSeries_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_V_W_XYs_LegendreSeries_ID ) == 0 ) { - xDataTOM_V_W_XYs_LegendreSeries_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_KalbachMann_ID ) == 0 ) { - xDataTOM_KalbachMann_free( &(element->xDataInfo ) ); } - else if( strcmp( element->xDataInfo.ID, xDataTOM_polynomial_ID ) == 0 ) { - xDataTOM_polynomial_free( &(element->xDataInfo ) ); } - else { - printf( "not freed for %s\n", element->xDataInfo.ID ); - } - } - element->parent = NULL; - smr_freeMemory( (void **) &(element->name) ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOM_addElementInElement( statusMessageReporting *smr, xDataTOM_element *parent, int index, char const *name ) { - - xDataTOM_element *element; - - if( ( element = xDataTOM_mallocElement( smr, parent, parent->numberOfChildren, index, name ) ) == NULL ) return( NULL ); - if( parent->children == NULL ) { - parent->children = element; } - else { - xDataTOM_element *last; - - for( last = parent->children; last->next != NULL; last = last->next ) ; - last->next = element; - } - (parent->numberOfChildren)++; - return( element ); -} -/* -************************************************************ -*/ -static int xDataTOME_initializeElement( statusMessageReporting *smr, xDataTOM_element *element, xDataTOM_element *parent, int ordinal, int index, - char const *name ) { - - element->ordinal = ordinal; - element->index = index; - element->parent = parent; - element->next = NULL; - element->name = smr_allocateCopyString2( smr, name, "element->name" ); - xDataTOMAL_initial( smr, &(element->attributes) ); - element->numberOfChildren = 0; - element->children = NULL; - return( ( xDataTOM_initialize_xData( smr, &(element->xDataInfo) ) || ( element->name == NULL ) ) ? 1 : 0 ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOM_getDocumentsElement( xDataTOM_TOM *TOM ) { - - return( TOM->root.children ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOME_getFirstElement( xDataTOM_element *element ) { - - if( element != NULL ) element = element->children; - return( element ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOME_getNextElement( xDataTOM_element *element ) { - - if( element != NULL ) element = element->next; - return( element ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOME_getOneElementByName( statusMessageReporting *smr, xDataTOM_element *element, char const *name, int required ) { - - int n = 0; - xDataTOM_element *child, *desired = NULL; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - if( strcmp( child->name, name ) == 0 ) { - if( n == 0 ) desired = child; - n++; - } - } - if( n == 0 ) { - if( required ) smr_setReportError2( smr, smr_unknownID, 1, "elements '%s' not found in element '%s'", name, element->name ); } - else if( n > 1 ) { - smr_setReportError2( smr, smr_unknownID, 1, "multiple (= %d) elements '%s' found in element '%s'", name, element->name ); - desired = NULL; - } - return( desired ); -} -/* -************************************************************ -*/ -int xDataTOM_numberOfElementsByName( statusMessageReporting * /*smr*/, xDataTOM_element *element, char const *name ) { - - int n = 0; - xDataTOM_element *child; - - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) if( !strcmp( child->name, name ) ) n++; - return( n ); -} -/* -************************************************************ -*/ -int xDataTOME_addAttribute( statusMessageReporting *smr, xDataTOM_element *element, char const *name, char const *value ) { - - return( xDataTOMAL_addAttribute( smr, &(element->attributes), name, value ) ); -} -/* -************************************************************ -*/ -char const *xDataTOM_getAttributesValueInElement( xDataTOM_element *element, char const *name ) { - - return( xDataTOMAL_getAttributesValue( &(element->attributes), name ) ); -} -/* -************************************************************ -*/ -int xDataTOME_copyAttributionList( statusMessageReporting *smr, xDataTOM_attributionList *desc, xDataTOM_element *element ) { - - return( xDataTOMAL_copyAttributionList( smr, desc, &(element->attributes) ) ); -} -/* -************************************************************ -*/ -int xDataTOME_convertAttributeToInteger( statusMessageReporting *smr, xDataTOM_element *element, char const *name, int *n ) { - - return( xDataTOMAL_convertAttributeToInteger( smr, &(element->attributes), name, n ) ); -} -/* -************************************************************ -*/ -int xDataTOME_convertAttributeToDouble( statusMessageReporting *smr, xDataTOM_element *element, char const *name, double *d ) { - - return( xDataTOMAL_convertAttributeToDouble( smr, &(element->attributes), name, d ) ); -} -/* -************************************************************ -*/ -int xDataTOME_getInterpolation( statusMessageReporting *smr, xDataTOM_element *element, int index, enum xDataTOM_interpolationFlag *independent, - enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier ) { - - xDataTOM_xDataInfo *xDI = &(element->xDataInfo); - - if( xDI->ID == NULL ) return( 1 ); - - return( xDataTOM_axes_getInterpolation( smr, &(xDI->axes), index, independent, dependent, qualifier ) ); -} -/* -************************************************************ -*/ -static void xDataTOME_displayTree( statusMessageReporting *smr, xDataTOM_element *element, int printAttributes, int level ) { - - int i; - xDataTOM_element *child; - - for( i = 0; i < level; i++ ) printf( " " ); - printf( "/%s", element->name ); - if( element->index >= 0 ) printf( " (%d)", element->index ); - if( printAttributes ) { - xDataTOM_attribute *attribute; - - for( attribute = element->attributes.attributes; attribute != NULL; attribute = attribute->next ) { - printf( " (%s, \"%s\")", attribute->name, attribute->value ); - } - } - printf( "\n" ); - for( child = xDataTOME_getFirstElement( element ); child != NULL; child = xDataTOME_getNextElement( child ) ) { - xDataTOME_displayTree( smr, child, printAttributes, level + 1 ); - } -} - -/**************************************** -* Attribute functions. -****************************************/ -/* -************************************************************ -*/ -void xDataTOMAL_initial( statusMessageReporting * /*smr*/, xDataTOM_attributionList *attributes ) { - - attributes->number = 0; - attributes->attributes = NULL; -} -/* -************************************************************ -*/ -void xDataTOMAL_release( xDataTOM_attributionList *attributes ) { - - xDataTOM_attribute *attribute, *next; - - for( attribute = attributes->attributes; attribute != NULL; attribute = next ) { - next = attribute->next; - smr_freeMemory( (void **) &(attribute->name) ); - smr_freeMemory( (void **) &(attribute->value) ); - smr_freeMemory( (void **) &(attribute) ); - } - xDataTOMAL_initial( NULL, attributes ); -} -/* -************************************************************ -*/ -int xDataTOMAL_addAttribute( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, char const *value ) { - - xDataTOM_attribute *attribute; - - if( ( attribute = (xDataTOM_attribute *) smr_malloc2( smr, sizeof( xDataTOM_attribute ), 1, "xDataTOM_attribute" ) ) == NULL ) return( 1 ); - if( ( attribute->name = smr_allocateCopyString2( smr, name, "name" ) ) == NULL ) goto err; - if( ( attribute->value = smr_allocateCopyString2( smr, value, "value" ) ) == NULL ) goto err; - if( attributes->attributes == NULL ) { - attributes->attributes = attribute; } - else { - xDataTOM_attribute *last; - - for( last = attributes->attributes; last->next != NULL; last = last->next ) ; - last->next = attribute; - } - attributes->number++; - return( 0 ); - -err: - smr_freeMemory( (void **) &(attribute->name) ); - smr_freeMemory( (void **) &(attribute->value) ); - smr_freeMemory( (void **) &(attribute) ); - return( 1 ); -} -/* -************************************************************ -*/ -char const *xDataTOMAL_getAttributesValue( xDataTOM_attributionList *attributes, char const *name ) { - - xDataTOM_attribute *attribute; - - for( attribute = attributes->attributes; attribute != NULL; attribute = attribute->next ) { - if( !strcmp( attribute->name, name ) ) return( attribute->value ); - } - return( NULL ); -} -/* -************************************************************ -*/ -int xDataTOMAL_copyAttributionList( statusMessageReporting *smr, xDataTOM_attributionList *desc, xDataTOM_attributionList *src ) { - - xDataTOM_attribute *attribute; - - xDataTOMAL_initial( smr, desc ); - for( attribute = src->attributes; attribute != NULL; attribute = attribute->next ) { - if( xDataTOMAL_addAttribute( smr, desc, attribute->name, attribute->value ) != 0 ) goto err; - - } - return( 0 ); - -err: - xDataTOMAL_release( desc ); - return( 1 ); -} -/* -************************************************************ -*/ -int xDataTOMAL_convertAttributeToInteger( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, int *n ) { - - char const *value = xDataTOMAL_getAttributesValue( attributes, name ); - char *e; - - if( value != NULL ) { - *n = (int) strtoll( value, &e, 10 ); - if( *e == 0 ) return( 0 ); - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "could not convert attribute %s's value = '%s' to an integer", name, value ); } - else { - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "no attribute named '%s'", name ); - } - return( 1 ); -} -/* -************************************************************ -*/ -int xDataTOMAL_convertAttributeToDouble( statusMessageReporting *smr, xDataTOM_attributionList *attributes, char const *name, double *d ) { - - char const *value = xDataTOMAL_getAttributesValue( attributes, name ); - char *e; - - if( value != NULL ) { - *d = strtod( value, &e ); - if( *e == 0 ) return( 0 ); - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "could not convert attribute %s's values = '%s' to a double", name, value ); } - else { - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "no attribute named '%s'", name ); - } - return( 1 ); -} - - -/**************************************** -* xData functions. -****************************************/ -/* -************************************************************ -*/ -static int xDataTOM_initialize_xData( statusMessageReporting * /*smr*/, xDataTOM_xDataInfo * /*xDataInfo*/ ) { - - return( 0 ); -} -/* -************************************************************ -*/ -void *xData_initializeData( statusMessageReporting *smr, xDataTOM_element *TE, char const *ID, size_t size ) { - - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - - xDI->data = NULL; - xDI->ID = ID; - xDI->element = TE; - return( xDI->data = (void *) smr_malloc2( smr, size, 1, "xDI->data" ) ); -} -/* -************************************************************ -*/ -int xDataTOM_isXDataID( xDataTOM_element *TE, char const *ID ) { - - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - - if( xDI->ID != NULL ) { - return( !strcmp( xDI->ID, ID ) ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -xDataTOM_xDataInfo *xDataTOME_getXData( xDataTOM_element *TE ) { - - if( TE->xDataInfo.ID == NULL ) return( NULL ); - return( &(TE->xDataInfo) ); -} -/* -************************************************************ -*/ -void *xDataTOME_getXDataIfID( statusMessageReporting *smr, xDataTOM_element *TE, char const *ID ) { - - xDataTOM_xDataInfo *xDI = xDataTOME_getXData( TE ); - - if( xDI == NULL ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "element '%s' does not have xData", TE->name ); - return( NULL ); - } - if( strcmp( ID, xDI->ID ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, 1, "xData has ID = '%s' not '%s' for element %s", xDI->ID, ID, TE->name ); - return( NULL ); - } - return( xDI->data ); - -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_KalbachMann.cc b/source/processes/hadronic/models/lend/src/xDataTOM_KalbachMann.cc deleted file mode 100644 index 95c54c2180..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_KalbachMann.cc +++ /dev/null @@ -1,60 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_KalbachMann_ID = "KalbachMann"; - -/* -************************************************************ -*/ -int xDataTOM_KalbachMann_initialize( statusMessageReporting *smr, xDataTOM_KalbachMann *KalbachMann, int length, xDataTOM_axes *axes ) { - - KalbachMann->coefficients = NULL; - KalbachMann->numberOfEnergies = 0; - if( ( KalbachMann->coefficients = (xDataTOM_KalbachMannCoefficients *) smr_malloc2( smr, length * sizeof( xDataTOM_KalbachMannCoefficients ), 1, "KalbachMann->coefficients" ) ) == NULL ) return( 1 ); - if( xDataTOM_subAxes_initialize( smr, &(KalbachMann->subAxes), xDataTOM_subAxesType_proxy, 0, axes, NULL ) != 0 ) { - smr_freeMemory( (void **) &(KalbachMann->coefficients) ); - return( 1 ); - } - - return( 0 ); -} - -/* -************************************************************ -*/ -int xDataTOM_KalbachMann_free( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_KalbachMann_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_KalbachMann_release( (xDataTOM_KalbachMann *) xDI->data ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_KalbachMann_release( xDataTOM_KalbachMann *KalbachMann ) { - - int i; - - xDataTOM_subAxes_release( &(KalbachMann->subAxes) ); - for( i = 0; i < KalbachMann->numberOfEnergies; i++ ) smr_freeMemory( (void **) &(KalbachMann->coefficients[i].coefficients) ); - KalbachMann->numberOfEnergies = 0; - smr_freeMemory( (void **) &(KalbachMann->coefficients) ); - - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_LegendreSeries.cc deleted file mode 100644 index 0ffb19c452..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_LegendreSeries.cc +++ /dev/null @@ -1,39 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -int xDataTOM_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_LegendreSeries *LegendreSeries, int index, int length, double value ) { - - LegendreSeries->LegendreSeries = NULL; - LegendreSeries->index = index; - LegendreSeries->length = length; - LegendreSeries->value = value; - if( ( LegendreSeries->LegendreSeries = (double *) smr_malloc2( smr, length * sizeof( double ), 0, "LegendreSeries->LegendreSeries" ) ) == NULL ) return( 1 ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_LegendreSeries_release( xDataTOM_LegendreSeries *LegendreSeries ) { - - if( LegendreSeries == NULL ) return( 0 ); - smr_freeMemory( (void **) &(LegendreSeries->LegendreSeries) ); - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_Misc.cc b/source/processes/hadronic/models/lend/src/xDataTOM_Misc.cc deleted file mode 100644 index e4c5dd66c5..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_Misc.cc +++ /dev/null @@ -1,183 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include -#ifdef WIN32 -#include -#else -#include -#endif - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#define nameValueLength 1024 - -static xDataTOM_element *xDataTOM_getLinksElement2( statusMessageReporting *smr, xDataTOM_element *element, char const *link, char const *fullLink ); -static int xDataTOM_getLinksElement3( statusMessageReporting *smr, char const *nameValue, char *name, char *value, char const *fullLink ); -/* -************************************************************ -*/ -char *xDataTOMMisc_getAbsPath( statusMessageReporting *smr, const char *fileName ) { -/* -* User must free returned string. -*/ - int n = (int) strlen( fileName ) + 1, nCwd = 0; - char *absPath, cwd[4 * 1024] = "", *p, *needle; - - if( fileName[0] != '/' ) { - //if( getcwd( cwd, sizeof( cwd ) + 1 ) == NULL ) { - //TK modified above line for compiler(gcc.4.8) warning message - if( getcwd( cwd, sizeof( cwd ) ) == NULL ) { - smr_setReportError2p( smr, xDataTOM_smrLibraryID, -1, "hardwired cwd too small" ); - return( NULL ); - } - nCwd = (int) strlen( cwd ); - n += nCwd + 1; /* cwd + '/'. */ - } - if( ( absPath = (char *) smr_malloc2( smr, n, 0, "absPath" ) ) == NULL ) return( NULL ); - if( fileName[0] != '/' ) { - strcpy( absPath, cwd ); - strcat( absPath, "/" ); - strcat( absPath, fileName ); } - else { - strcpy( absPath, fileName ); - } - - while( 1 ) { /* Remove all ./ from path. */ - if( ( needle = strstr( absPath, "/./" ) ) == NULL ) break; - p = needle; - for( needle += 2; *needle; p++, needle++ ) *p = *needle; - *p = 0; - } // Loop checking, 11.06.2015, T. Koi - - while( 1 ) { /* Remove all ../ from path. */ - if( ( needle = strstr( absPath, "/../" ) ) == NULL ) break; - p = needle - 1; - while( ( p > absPath ) && ( *p != '/' ) ) p--; // Loop checking, 11.06.2015, T. Koi - if( *p != '/' ) break; /* This should not happen if path is legit, I think, and I do not know what to do so will leave it. */ - if( p == absPath ) break; /* Ditto. */ - for( needle += 3; *needle; p++, needle++ ) *p = *needle; - *p = 0; - } // Loop checking, 11.06.2015, T. Koi - return( absPath ); -} -/* -************************************************************ -*/ -int xDataTOM_setMessageError_ReturnInt( int value, statusMessageReporting *smr, void *userInterface, const char *packageName, int lineNumber, int code, - const char *fmt, ... ) { - - va_list args; - - va_start( args, fmt ); - smr_setReportError( smr, userInterface, packageName, lineNumber, __func__, xDataTOM_smrLibraryID, code, fmt, args ); - va_end( args ); - return( value ); -} -/* -************************************************************ -*/ -xDataTOM_element *xDataTOM_getLinksElement( statusMessageReporting *smr, xDataTOM_element *element, char const *link ) { - - xDataTOM_element *linkedElement = NULL; - - if( link[0] == '/' ) { - for( linkedElement = element; linkedElement->parent != NULL; ) linkedElement = linkedElement->parent; - linkedElement = xDataTOM_getLinksElement2( smr, linkedElement, &(link[1]), link ); } - else { - smr_setReportError2( smr, smr_unknownID, 1, "Only absolute link currently supported: requested link = '%s'", link ); - } - return( linkedElement ); -} -/* -************************************************************ -*/ -static xDataTOM_element *xDataTOM_getLinksElement2( statusMessageReporting *smr, xDataTOM_element *element, char const *link, char const *fullLink ) { - - int n = (int) strlen( link ); - char const *slash = strchr( link, '/' ), *bracket = strchr( link, '[' ), *attributesValue; - char name[nameValueLength], value[nameValueLength]; - xDataTOM_element *child; - - if( bracket != NULL ) n = (int) ( bracket - link ); - if( slash != NULL ) { - if( (int) ( slash - link ) < n ) { - n = (int) ( slash - link ); - bracket = NULL; - } - } - for( child = element->children; child != NULL; child = child->next ) { - if( strncmp( link, child->name, n ) == 0 ) { - if( bracket != NULL ) { - if( bracket[1] != '@' ) { - smr_setReportError2( smr, smr_unknownID, 1, "bad link info at '%s' of '%s'", bracket, fullLink ); - return( NULL ); - } - if( xDataTOM_getLinksElement3( smr, &(bracket[2]), name, value, fullLink ) ) return( NULL ); - if( ( attributesValue = xDataTOM_getAttributesValueInElement( child, name ) ) == NULL ) continue; - if( strcmp( value, attributesValue ) ) continue; - } - if( slash == NULL ) return( child ); - return( xDataTOM_getLinksElement2( smr, child, &(slash[1]), fullLink ) ); - } - } - return( NULL ); -} -/* -************************************************************ -*/ -static int xDataTOM_getLinksElement3( statusMessageReporting *smr, char const *nameValue, char *name, char *value, char const *fullLink ) { - - int n; - char const *equal = strchr( nameValue, '=' ), *p; - char quote = '\''; - - if( equal == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "link qualifier missing '=' character at '%s' of '%s'", nameValue, fullLink ); - return( 1 ); - } - n = (int) ( equal - nameValue ); - if( n >= ( nameValueLength - 1 ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "link's name qualifier too long at '%s' of '%s'", nameValue, fullLink ); - return( 1 ); - } - strncpy( name, nameValue, n ); - name[n] = 0; - - equal++; - if( *equal != quote ) quote = '"'; - if( *equal != quote ) { - smr_setReportError2( smr, smr_unknownID, 1, "link's name qualifier missing quote at '%s' of '%s'", nameValue, fullLink ); - return( 1 ); - } - - equal++; - p = strchr( equal, quote ); - if( p == NULL ) { - smr_setReportError2( smr, smr_unknownID, 1, "link's name qualifier missing end quote at '%s' of '%s'", nameValue, fullLink ); - return( 1 ); - } - - n = (int) ( p - equal ); - if( n >= ( nameValueLength - 1 ) ) { - smr_setReportError2( smr, smr_unknownID, 1, "link's value qualifier too long at '%s' of '%s'", nameValue, fullLink ); - return( 1 ); - } - strncpy( value, equal, n ); - value[n] = 0; - - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs.cc deleted file mode 100644 index 94bb3658ef..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs.cc +++ /dev/null @@ -1,51 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_V_W_XYs_ID = "V_W_XYs"; - -/* -************************************************************ -*/ -int xDataTOM_V_W_XYs_initialize( statusMessageReporting *smr, xDataTOM_V_W_XYs *V_W_XYs, int length, xDataTOM_axes *axes ) { - - V_W_XYs->W_XYs = NULL; - V_W_XYs->length = length; - if( ( V_W_XYs->W_XYs = (xDataTOM_W_XYs *) smr_malloc2( smr, length * sizeof( xDataTOM_W_XYs ), 1, "V_W_XYs->W_XYs" ) ) == NULL ) return( 1 ); - if( xDataTOM_subAxes_initialize( smr, &(V_W_XYs->subAxes), xDataTOM_subAxesType_proxy, 0, axes, NULL ) != 0 ) { - smr_freeMemory( (void **) &(V_W_XYs->W_XYs) ); - return( 1 ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_V_W_XYs_free( xDataTOM_xDataInfo *xDI ) { - - int i; - xDataTOM_V_W_XYs *V_W_XYs; - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_V_W_XYs_ID, xDI->ID ) != 0 ) return( 1 ); - if( ( V_W_XYs = (xDataTOM_V_W_XYs *) xDI->data ) != NULL ) { - for( i = 0; i < V_W_XYs->length; i++ ) xDataTOM_W_XYs_release( &(V_W_XYs->W_XYs[i]) ); - smr_freeMemory( (void **) &(V_W_XYs->W_XYs) ); - smr_freeMemory( (void **) &(xDI->data) ); - } - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs_LegendreSeries.cc deleted file mode 100644 index 3f60234004..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_V_W_XYs_LegendreSeries.cc +++ /dev/null @@ -1,49 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_V_W_XYs_LegendreSeries_ID = "V_W_XYs_LegendreSeries"; - -/* -************************************************************ -*/ -int xDataTOM_V_W_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_V_W_XYs_LegendreSeries *V_W_XYs_LegendreSeries, - int length, xDataTOM_axes *axes ) { - - V_W_XYs_LegendreSeries->W_XYs_LegendreSeries = NULL; - V_W_XYs_LegendreSeries->length = length; - if( xDataTOM_subAxes_initialize( smr, &(V_W_XYs_LegendreSeries->subAxes), xDataTOM_subAxesType_proxy, 0, axes, NULL ) != 0 ) return( 1 ); - if( ( V_W_XYs_LegendreSeries->W_XYs_LegendreSeries = (xDataTOM_W_XYs_LegendreSeries *) smr_malloc2( smr, length * sizeof( xDataTOM_W_XYs_LegendreSeries ), 1, - "V_W_XYs_LegendreSeries->W_XYs_LegendreSeries" ) ) == NULL ) return( 1 ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_V_W_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ) { - - int i; - xDataTOM_V_W_XYs_LegendreSeries *V_W_XYs_LegendreSeries; - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_V_W_XYs_LegendreSeries_ID, xDI->ID ) != 0 ) return( 1 ); - V_W_XYs_LegendreSeries = (xDataTOM_V_W_XYs_LegendreSeries *) xDI->data; - for( i = 0; i < V_W_XYs_LegendreSeries->length; i++ ) xDataTOM_W_XYs_LegendreSeries_release( &(V_W_XYs_LegendreSeries->W_XYs_LegendreSeries[i]) ); - smr_freeMemory( (void **) &(V_W_XYs_LegendreSeries->W_XYs_LegendreSeries) ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs.cc deleted file mode 100644 index 3b01f399e6..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_W_XYs_ID = "W_XYs"; - -/* -************************************************************ -*/ -xDataTOM_W_XYs *xDataTOM_W_XYs_new( statusMessageReporting *smr, int index, int length, double value, xDataTOM_axes *axes, int axesOffset ) { - - xDataTOM_W_XYs *W_XYs; - - if( ( W_XYs = (xDataTOM_W_XYs *) smr_malloc2( smr, sizeof( xDataTOM_W_XYs ), 0, "W_XYs" ) ) == NULL ) return( NULL ); - if( xDataTOM_W_XYs_initialize( smr, W_XYs, index, length, value, axes, axesOffset ) != 0 ) smr_freeMemory( (void **) &W_XYs ); - return( W_XYs ); -} -/* -************************************************************ -*/ -int xDataTOM_W_XYs_initialize( statusMessageReporting *smr, xDataTOM_W_XYs *W_XYs, int index, int length, double value, xDataTOM_axes *axes, - int axesOffset ) { - - W_XYs->XYs = NULL; - W_XYs->index = index; - W_XYs->length = length; - W_XYs->value = value; - if( ( W_XYs->XYs = (xDataTOM_XYs *) smr_malloc2( smr, length * sizeof( xDataTOM_XYs ), 1, "W_XYs->XYs" ) ) == NULL ) return( 1 ); - if( xDataTOM_subAxes_initialize( smr, &(W_XYs->subAxes), xDataTOM_subAxesType_proxy, axesOffset, axes, NULL ) != 0 ) { - smr_freeMemory( (void **) &(W_XYs->XYs) ); - return( 1 ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -xDataTOM_W_XYs *xDataTOM_W_XYs_free( xDataTOM_W_XYs *W_XYs ) { - - if( W_XYs == NULL ) return( NULL ); - xDataTOM_W_XYs_release( W_XYs ); - smr_freeMemory( (void **) &W_XYs ); - return( (xDataTOM_W_XYs *) NULL ); -} -/* -************************************************************ -*/ -int xDataTOM_W_XYs_freeFrom_xDataInfo( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_W_XYs_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_W_XYs_free( (xDataTOM_W_XYs *) xDI->data ); - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_W_XYs_release( xDataTOM_W_XYs *W_XYs ) { - - int i; - - xDataTOM_subAxes_release( &(W_XYs->subAxes) ); - for( i = 0; i < W_XYs->length; i++ ) xDataTOM_XYs_release( &(W_XYs->XYs[i]) ); - W_XYs->length = 0; - smr_freeMemory( (void **) &(W_XYs->XYs) ); - - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs_LegendreSeries.cc deleted file mode 100644 index cc332b772c..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_W_XYs_LegendreSeries.cc +++ /dev/null @@ -1,76 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_W_XYs_LegendreSeries_ID = "W_XYs_LegendreSeries"; - -/* -************************************************************ -*/ -int xDataTOM_W_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, int index, - int length, double value, enum xDataTOM_subAxesType subAxesType, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) { - - W_XYs_LegendreSeries->LegendreSeries = NULL; - W_XYs_LegendreSeries->index = index; - W_XYs_LegendreSeries->length = length; - W_XYs_LegendreSeries->value = value; - if( xDataTOM_subAxes_initialize( smr, &(W_XYs_LegendreSeries->subAxes), subAxesType, 0, axes, interpolation ) != 0 ) return( 1 ); - if( ( W_XYs_LegendreSeries->LegendreSeries = (xDataTOM_LegendreSeries *) smr_malloc2( smr, length * sizeof( xDataTOM_LegendreSeries ), 1, "W_XYs_LegendreSeries->LegendreSeries" ) ) == NULL ) return( 1 ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_W_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_W_XYs_LegendreSeries_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_W_XYs_LegendreSeries_release( (xDataTOM_W_XYs_LegendreSeries *) xDI->data ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_W_XYs_LegendreSeries_release( xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries ) { - - int i; - - for( i = 0; i < W_XYs_LegendreSeries->length; i++ ) xDataTOM_LegendreSeries_release( &(W_XYs_LegendreSeries->LegendreSeries[i]) ); - smr_freeMemory( (void **) &(W_XYs_LegendreSeries->LegendreSeries) ); - return( 0 ); -} -/* -************************************************************ -*/ -#if 0 -xDataTOM_W_XYs *xDataTOM_W_XYs_LegendreSeries_toW_XYs( statusMessageReporting *smr, xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, int axesOffset ) { - - xDataTOM_W_XYs *W_XYs = NULL; - -/* - if( ( W_XYs = xDataTOM_W_XYs_new( smr, W_XYs_LegendreSeries->index, W_XYs_LegendreSeries->length, W_XYs_LegendreSeries->value, axes, axesOffset ) ) - == NULL ) return( NULL ); -*/ - - return( W_XYs ); - -err: - xDataTOM_W_XYs_free( W_XYs ); - return( NULL ); -} -#endif - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_XYs.cc deleted file mode 100644 index e921b8bd27..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_XYs.cc +++ /dev/null @@ -1,57 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_XYs_ID = "XYs"; - -/* -************************************************************ -*/ -int xDataTOM_XYs_free( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_XYs_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_XYs_release( (xDataTOM_XYs *) xDI->data ); - smr_freeMemory( (void **) &(xDI->data) ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_XYs_release( xDataTOM_XYs *XYs ) { - - xDataTOM_subAxes_release( &(XYs->subAxes) ); - XYs->length = 0; - smr_freeMemory( (void **) &(XYs->data) ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_XYs_getData( xDataTOM_XYs *XYs, double **data ) { - - *data = XYs->data; - return( XYs->length ); -} -/* -************************************************************ -*/ -int xDataTOM_XYs_getDataFromXDataInfo( xDataTOM_xDataInfo *xDI, double **data ) { - - return( xDataTOM_XYs_getData( (xDataTOM_XYs *) xDI->data, data ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_axes.cc b/source/processes/hadronic/models/lend/src/xDataTOM_axes.cc deleted file mode 100644 index a4bde448d9..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_axes.cc +++ /dev/null @@ -1,204 +0,0 @@ -/* -# <> -# <> -*/ - -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static char const *xDataTOM_frame_labString = "lab"; -static char const *xDataTOM_frame_centerOfMassString = "centerOfMass"; -static char const *xDataTOM_frame_invalidString = "invalid"; -/* -************************************************************ -*/ -int xDataTOM_axes_initialize( statusMessageReporting *smr, xDataTOM_axes *axes, int numberOfAxes ) { - - axes->numberOfAxes = 0; - if( ( axes->axis = (xDataTOM_axis *) smr_malloc2( smr, numberOfAxes * sizeof( xDataTOM_axis ), 1, "axes->axis" ) ) == NULL ) return( 1 ); - axes->numberOfAxes = numberOfAxes; - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_axes_release( xDataTOM_axes *axes ) { - - int i; - - for( i = 0; i < axes->numberOfAxes; i++ ) { - xDataTOM_axis_release( NULL, &(axes->axis[i]) ); - } - smr_freeMemory( (void **) &(axes->axis) ); - return( 0 ); -} -/* -************************************************************ -*/ -char const *xDataTOM_axes_getLabel( statusMessageReporting *smr, xDataTOM_axes *axes, int index ) { - - if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index ); - return( NULL ); - } - return( axes->axis[index].label ); -} -/* -************************************************************ -*/ -char const *xDataTOM_axes_getUnit( statusMessageReporting *smr, xDataTOM_axes *axes, int index ) { - - if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index ); - return( NULL ); - } - return( axes->axis[index].unit ); -} -/* -************************************************************ -*/ -int xDataTOM_axes_getInterpolation( statusMessageReporting *smr, xDataTOM_axes *axes, int index, enum xDataTOM_interpolationFlag *independent, - enum xDataTOM_interpolationFlag *dependent, enum xDataTOM_interpolationQualifier *qualifier ) { - - xDataTOM_interpolation *interpolation; - - if( ( index < 0 ) || ( index >= axes->numberOfAxes ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid axes index = %d", index ); - return( 1 ); - } - interpolation = &(axes->axis[index].interpolation); - *independent = interpolation->independent; - *dependent = interpolation->dependent; - *qualifier = interpolation->qualifier; - - return( 0 ); -} - -/* -c subAxes functions. -*/ -/* -************************************************************ -*/ -int xDataTOM_subAxes_initialize( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset, - xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) { - - subAxes->type = type; - if( axes == NULL ) { - smr_setReportError2p( smr, xDataTOM_smrLibraryID, -1, "Axes must not be NULL" ); - return( 1 ); - } - subAxes->offset = offset; - if( ( offset < 0 ) || ( offset >= axes->numberOfAxes ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "offset = %d < 0 or >= axes->numberOfAxes = %d", offset, axes->numberOfAxes ); - return( 1 ); - } - if( type == xDataTOM_subAxesType_intepolationAxes ) { - if( interpolation == NULL ) { - smr_setReportError2p( smr, xDataTOM_smrLibraryID, -1, "Interpolation must not be NULL for intepolationAxes" ); - return( 1 ); - } - if( xDataTOM_interpolation_copy( smr, &(subAxes->interpolation), interpolation ) ) return( 1 ); } - else { /* Not used but fill in anyway. */ - xDataTOM_interpolation_set( smr, &(subAxes->interpolation), xDataTOM_interpolationFlag_linear, xDataTOM_interpolationFlag_linear, - xDataTOM_interpolationQualifier_none ); - } - subAxes->axes = axes; - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_subAxes_release( xDataTOM_subAxes *subAxes ) { - - subAxes->axes = NULL; - return( 0 ); -} -/* -************************************************************ -*/ -char const *xDataTOM_subAxes_getLabel( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ) { - - return( xDataTOM_axes_getLabel( smr, subAxes->axes, index + subAxes->offset ) ); -} -/* -************************************************************ -*/ -char const *xDataTOM_subAxes_getUnit( statusMessageReporting *smr, xDataTOM_subAxes *subAxes, int index ) { - - return( xDataTOM_axes_getUnit( smr, subAxes->axes, index + subAxes->offset ) ); -} - -/* -c Axis functions. -*/ -/* -************************************************************ -*/ -xDataTOM_axis *xDataTOM_axis_new( statusMessageReporting *smr, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation ) { - - xDataTOM_axis *axis = NULL; - - if( ( axis = (xDataTOM_axis *) smr_malloc2( smr, sizeof( xDataTOM_axis ), 0, "axis" ) ) == NULL ) return( NULL ); - if( xDataTOM_axis_initialize( smr, axis, index, label, unit, interpolation ) != 0 ) smr_freeMemory( (void **) &axis ); - return( axis ); -} -/* -************************************************************ -*/ -int xDataTOM_axis_initialize( statusMessageReporting *smr, xDataTOM_axis *axis, int index, char const *label, char const *unit, xDataTOM_interpolation *interpolation ) { - - axis->index = index; - if( ( axis->label = smr_allocateCopyString2( smr, label, "label" ) ) == NULL ) goto err; - if( ( axis->unit = smr_allocateCopyString2( smr, unit, "unit" ) ) == NULL ) goto err; - if( xDataTOM_interpolation_copy( smr, &(axis->interpolation), interpolation ) != 0 ) goto err; - - return( 0 ); - -err: - smr_freeMemory( (void **) &(axis->label) ); - smr_freeMemory( (void **) &(axis->unit) ); - return( 1 ); -} -/* -************************************************************ -*/ -xDataTOM_axis *xDataTOM_axis_release( statusMessageReporting * /*smr*/, xDataTOM_axis *axis ) { - - axis->index = -1; - smr_freeMemory( (void **) &(axis->label) ); - smr_freeMemory( (void **) &(axis->unit) ); - return( NULL ); -} -/* -************************************************************ -*/ -enum xDataTOM_frame xDataTOM_axis_stringToFrame( statusMessageReporting * /*smr*/, char const *frame ) { - - if( strcmp( "lab", frame ) == 0 ) return( xDataTOM_frame_lab ); - if( strcmp( "centerOfMass", frame ) == 0 ) return( xDataTOM_frame_centerOfMass ); - return( xDataTOM_frame_invalid ); -} -/* -************************************************************ -*/ -char const *xDataTOM_axis_frameToString( statusMessageReporting * /*smr*/, enum xDataTOM_frame frame ) { - - switch( frame ) { - case xDataTOM_frame_lab : return( xDataTOM_frame_labString ); - case xDataTOM_frame_centerOfMass : return( xDataTOM_frame_centerOfMassString ); - default : - break; - } - return( xDataTOM_frame_invalidString ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML.cc deleted file mode 100644 index 07245f1a2c..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML.cc +++ /dev/null @@ -1,1018 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include -#include -#include -#include -#include -#include - -#if defined(_WIN32) -#include -#include -#include -#define realpath( a, b ) GetFullPathName( a, PATH_MAX, b, NULL ) -#define strtoll _strtoi64 -typedef SSIZE_T ssize_t; -#else -#include -#endif - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -static xDataXML_document *xDataXML_mallocDoc( statusMessageReporting *smr ); -static int xDataXML_initializeDoc( statusMessageReporting *smr, xDataXML_document *doc ); -static int xDataXML_endXMLParsing( statusMessageReporting *smr, xDataXML_document *doc ); -static void *xDataXML_freeElement( statusMessageReporting *smr, xDataXML_element *element ); -static void xDataXML_freeElementItems( statusMessageReporting *smr, xDataXML_element *element ); -static int xDataXML_parse( xDataXML_document *doc, char const *s ); -static void XMLCALL xDataXML_parseStartElement( void *userData, char const *name, char const **attris ); -static void XMLCALL xDataXML_parseEndElement( void *userData, char const *name ); -static void XMLCALL xDataXML_parseCharacterData( void *userData, XML_Char const *s, int len ); -static void xDataXML_initializeRootElement( xDataXML_document *doc, xDataXML_rootElement *re, xDataXML_element *parentElement, int depth ); -static int xDataXML_parseInitializeText( xDataXML_document *doc, xDataXML_text *text ); -static int xDataXML_addElementToRoot( statusMessageReporting *smr, xDataXML_rootElement *parentRoot, char const *name, char const **attris ); -static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition( xDataXML_document *doc, xDataXML_docInfo *docInfo ); -static int xDataXML_init_xDataTypeNone( xDataXMLType *xDT, xDataXML_element *element ); -static char *xDataXML_getTraceback( statusMessageReporting *smr, xDataXML_element *element ); -static char *xDataXML_getTraceback2( statusMessageReporting *smr, xDataXML_rootElement *parentRoot, int n ); -static int xDataXML_setFileName( statusMessageReporting *smr, xDataXML_document *doc, char const *fileName ); - -static int xDataXML_smrUserInterfaceInitialize( xDataXML_document *doc ); -static int xDataXML_smrUserInterfaceFree( xDataXML_document *doc ); -static char *xDataXML_smrUserInterface( void *userData ); -static char const *xDataXML_shortStringForMessage( size_t size, char *Out, char const *In ); - -static int xDataXML_constructTOM( statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *element ); -/* -************************************************************ -*/ -xDataTOM_TOM *xDataXML_importFile( statusMessageReporting *smr, char const *fileName ) { -/* -* Returns NULL is any error occurred. If an error occurs in an expat routine, xDataXML_endXMLParsing will set smr appropriately. -*/ - xDataTOM_TOM *TOM = NULL; - xDataXML_document *XML = NULL; - xDataXML_element *element; - - if( ( XML = xDataXML_importFile2( smr, fileName ) ) == NULL ) return( NULL ); - - if( ( TOM = xDataTOM_mallocTOM( smr ) ) == NULL ) goto Err; - if( xDataTOM_setFileNameTOM( smr, TOM, fileName ) != 0 ) goto Err; - - element = xDataXML_getDocumentsElement( XML ); - if( xDataXML_constructTOM( smr, (&TOM->root), element ) != 0 ) goto Err; - - xDataXML_freeDoc( smr, XML ); - return( TOM ); - -Err: - if( XML != NULL ) xDataXML_freeDoc( smr, XML ); - if( TOM != NULL ) xDataTOM_freeTOM( smr, &TOM ); - return( NULL ); -} -/* -************************************************************ -*/ -xDataXML_document *xDataXML_importFile2( statusMessageReporting *smr, char const *fileName ) { -/* -* Returns NULL is any error occurred. If an error occurs in an expat routine, xDataXML_endXMLParsing will set smr appropriately. -*/ - int f; - char buffer[10 * 1000]; - ssize_t count, n = sizeof( buffer ) - 1; - xDataXML_document *doc; - - if( ( doc = xDataXML_mallocDoc( smr ) ) == NULL ) return( NULL ); - if( xDataXML_setFileName( smr, doc, fileName ) == 0 ) { - f = open( fileName, O_RDONLY ); - if( f == -1 ) { - xDataXML_endXMLParsing( smr, doc ); - smr_setReportError2( smr, xDataTOM_smrLibraryID, xDataXML_errFileError, "could not open XML file %s", fileName ); } - else { - while( ( count = read( f, buffer, n ) ) > 0 ) { - buffer[count] = 0; - if( xDataXML_parse( doc, buffer ) ) break; - if( !smr_isOk( doc->smr ) ) break; - } // Loop checking, 11.06.2015, T. Koi - close( f ); - xDataXML_endXMLParsing( smr, doc ); - if( count < 0 ) smr_setReportError2( smr, xDataTOM_smrLibraryID, xDataXML_errFileError, "read failed with errno = %d for XML %s", - errno, fileName ); - } - } - if( doc != NULL ) { - if( !smr_isOk( smr ) ) { - xDataXML_freeDoc( smr, doc ); - doc = NULL; - } - } - return( doc ); -} -/* -************************************************************ -*/ -static xDataXML_document *xDataXML_mallocDoc( statusMessageReporting *smr ) { - - xDataXML_document *doc; - - if( ( doc = (xDataXML_document *) smr_malloc2( smr, sizeof( xDataXML_document ), 1, "xDataXML_document" ) ) != NULL ) { - if( xDataXML_initializeDoc( smr, doc ) ) doc = (xDataXML_document *) xDataXML_freeDoc( smr, doc ); - } - return( doc ); -} -/* -************************************************************ -*/ -static int xDataXML_initializeDoc( statusMessageReporting *smr, xDataXML_document *doc ) { - - doc->status = xDataXML_statusParsing; - doc->error = xDataXML_errNone; - doc->err = XML_ERROR_NONE; - doc->err_line = 0; - doc->err_column = 0; - doc->fileName = NULL; - doc->realFileName = NULL; - xDataXML_smrUserInterfaceInitialize( doc ); - doc->smr= smr; - if( ( doc->xmlParser = XML_ParserCreate( NULL ) ) == NULL ) { - smr_setReportError2p( smr, xDataTOM_smrLibraryID, xDataXML_errXML_ParserCreate, "XML_ParserCreate failed" ); } - else { - XML_SetUserData( doc->xmlParser, doc ); - xDataXML_initializeRootElement( doc, &(doc->root), NULL, 0 ); - doc->currentRoot = &(doc->root); - XML_SetElementHandler( doc->xmlParser, xDataXML_parseStartElement, xDataXML_parseEndElement ); - XML_SetCharacterDataHandler( doc->xmlParser, xDataXML_parseCharacterData ); - } - return( !smr_isOk( smr ) ); -} -/* -************************************************************ -*/ -static int xDataXML_endXMLParsing( statusMessageReporting *smr, xDataXML_document *doc ) { - - if( doc->xmlParser ) { - doc->err = XML_GetErrorCode( doc->xmlParser ); - doc->err_line = XML_GetCurrentLineNumber( doc->xmlParser ); - doc->err_column = XML_GetCurrentColumnNumber( doc->xmlParser ); - if( smr_isOk( smr ) && ( XML_Parse( doc->xmlParser, NULL, 0, 1 ) == XML_STATUS_ERROR ) ) { - doc->status = xDataXML_statusError; - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromDocument( doc ), xDataTOM_smrLibraryID, xDataXML_errXMLParser, - "status = %d\nXML_Error code = %d\nXML_ErrorString = %s\nerror line, column = %d, %d", xDataXML_errXMLParser, - doc->err, XML_ErrorString( doc->err ), doc->err_line, doc->err_column ); - } - XML_ParserFree( doc->xmlParser ); - doc->xmlParser = NULL; - if( doc->status != xDataXML_statusError ) doc->status = xDataXML_statusCompleted; - } - return( 0 ); -} -/* -************************************************************ -*/ -void *xDataXML_freeDoc( statusMessageReporting *smr, xDataXML_document *doc ) { - - xDataXML_endXMLParsing( smr, doc ); - doc->root.children = (xDataXML_element *) xDataXML_freeElement( smr, doc->root.children ); - smr_freeMemory( (void **) &(doc->fileName) ); - smr_freeMemory( (void **) &(doc->realFileName) ); - xDataXML_smrUserInterfaceFree( doc ); - smr_freeMemory( (void **) &doc ); - return( NULL ); -} -/* -************************************************************ -*/ -static void *xDataXML_freeElement( statusMessageReporting *smr, xDataXML_element *element ) { - - xDataXML_element *next; - - for( ; element != NULL; element = next ) { - next = element->next; - xDataXML_freeElementItems( smr, element ); - smr_freeMemory( (void **) &element ); - } - return( NULL ); -} -/* -************************************************************ -*/ -static void xDataXML_freeElementItems( statusMessageReporting *smr, xDataXML_element *element ) { - - element->childrenRoot.children = (xDataXML_element *) xDataXML_freeElement( smr, element->childrenRoot.children ); -/* BRB, The next line needs work */ - if( ( !strcmp( element->name, "xData" ) ) && ( element->xDataTypeInfo.release != NULL ) ) element->xDataTypeInfo.release( smr, &(element->xDataTypeInfo) ); - smr_freeMemory( (void **) &(element->name) ); - smr_freeMemory( (void **) &(element->fullName) ); - if( element->attributes.attributes ) smr_freeMemory( (void **) &(element->attributes.attributes) ); - if( element->text.text ) smr_freeMemory( (void **) &(element->text.text) ); -} -/* -************************************************************ -*/ -static int xDataXML_parse( xDataXML_document *doc, char const *s ) { - - if( doc->status != xDataXML_statusParsing ) return( doc->status ); - if( XML_Parse( doc->xmlParser, s, (int) strlen( s ), 0 ) == XML_STATUS_ERROR ) return( -1 ); - return( 0 ); -} -/* -************************************************************ -*/ -static void XMLCALL xDataXML_parseStartElement( void *userData, char const *name, char const **attris ) { - - xDataXML_document *doc = (xDataXML_document *) userData; - - if( !smr_isOk( doc->smr ) ) return; - xDataXML_addElementToRoot( doc->smr, doc->currentRoot, name, attris ); -} -/* -************************************************************ -*/ -static void XMLCALL xDataXML_parseEndElement( void *userData, char const * /*name*/ ) { - - xDataXML_document *doc = (xDataXML_document *) userData; - - doc->currentRoot->currentChild = NULL; - doc->currentRoot = doc->currentRoot->parentRoot; -} -/* -************************************************************ -*/ -static void XMLCALL xDataXML_parseCharacterData( void *userData, XML_Char const *s, int len ) { -/* -* Always terminates text with a 0. -*/ - xDataXML_document *doc = (xDataXML_document *) userData; - xDataXML_text *text = &(doc->currentRoot->parentRoot->currentChild->text); - size_t needSize = text->length + len + 1, l; - char *p; - - if( !smr_isOk( doc->smr ) ) return; - if( needSize < 8 ) needSize = 8; - if( needSize > text->allocated ) { - if( text->allocated != 0 ) { - l = ( 20 * text->allocated ) / 100; - if( l < 100 ) l = 100; - if( needSize < ( text->allocated + l ) ) needSize = text->allocated + l; - } - text->allocated = needSize; - text->text = (char *) smr_realloc2( doc->smr, text->text, text->allocated, "text" ); - if( !smr_isOk( doc->smr ) ) return; - } - p = &(text->text[text->length]); - strncpy( p, s, len ); - text->length += len; - p[len] = 0; -} -/* -************************************************************ -*/ -static void xDataXML_initializeRootElement( xDataXML_document *doc, xDataXML_rootElement *re, xDataXML_element *parentElement, int depth ) { - - re->xData_doc = doc; - re->parentElement = parentElement; - re->parentRoot = NULL; - if( parentElement != NULL ) re->parentRoot = parentElement->parentRoot; - re->depth = depth; - re->numberOfElements = 0; - re->children = NULL; - re->currentChild = NULL; -} -/* -************************************************************ -*/ -static int xDataXML_parseInitializeText( xDataXML_document *doc, xDataXML_text *text ) { - - xDataXML_parseGetCurrentPosition( doc, &(text->docInfo) ); - text->allocated = 0; - text->length = 0; - text->text = NULL; - return( 0 ); -} -/* -************************************************************ -*/ -static int xDataXML_addElementToRoot( statusMessageReporting *smr, xDataXML_rootElement *parentRoot, char const *name, char const **attris ) { - - xDataXML_document *doc = parentRoot->xData_doc; - xDataXML_element *element; - int i, n, status = 1; - size_t lens; - char *p, *e; - char const **pAttris; - xDataXML_attribute *a; - void *smrUser; - - element = (xDataXML_element *) smr_malloc2( doc->smr, sizeof( xDataXML_element ), 1, "xDataXML_element" ); - if( element == NULL ) return( 1 ); - xDataXML_parseGetCurrentPosition( doc, &(element->docInfo) ); - element->ordinal = parentRoot->numberOfElements; - element->index = -1; - element->accessed = 0; - element->parentRoot = parentRoot; - xDataXML_initializeRootElement( doc, &(element->childrenRoot), element, parentRoot->depth + 1 ); - element->next = NULL; - if( ( element->name = (char *) smr_malloc2( doc->smr, strlen( name ) + 1, 0, "name" ) ) == NULL ) { - smr_freeMemory( (void **) &element ); - return( 1 ); - } - strcpy( element->name, name ); - if( ( element->fullName = xDataXML_getTraceback( smr, element ) ) == NULL ) { - smr_freeMemory( (void **) &(element->name) ); - smr_freeMemory( (void **) &element ); - return( 1 ); - } - for( i = 0, lens = 0, pAttris = attris; *pAttris; i++, pAttris++ ) lens += strlen( *pAttris ) + 1; - n = i / 2; - element->attributes.size = n * sizeof( xDataXML_attribute ) + lens; - element->attributes.number = n; - element->attributes.attributes = NULL; - smrUser = xDataXML_get_smrUserInterfaceFromElement( element ); - if( element->attributes.size ) { - if( ( element->attributes.attributes = (xDataXML_attribute *) smr_malloc2( doc->smr, element->attributes.size, 0, "attributes") ) == NULL ) { - status = 0; } - else { - a = element->attributes.attributes; - p = (char *) &(element->attributes.attributes[n]); - for( i = 0, pAttris = attris; ( i < n ) && status; i++, a++, pAttris++ ) { - lens = strlen( *pAttris ) + 1; - a->name = p; - strcpy( p, *pAttris ); - p += lens; - pAttris++; - lens = strlen( *pAttris ) + 1; - a->value= p; - strcpy( p, *pAttris ); - p += lens; - if( !strcmp( "index", a->name ) ) { - element->index = (int) strtoll( a->value, &e, 10 ); - if( *e != 0 ) { - status = 0; - smr_setReportError3( doc->smr, smrUser, xDataTOM_smrLibraryID, -1, "could not convert index attribute = %s to integer", a->value ); - } - } - } - } - } - if( !status ) { - smr_freeMemory( (void **) &(element->attributes.attributes) ); - smr_freeMemory( (void **) &(element->name) ); - smr_freeMemory( (void **) &(element->fullName) ); - smr_freeMemory( (void **) &element ); - return( 1 ); - } - xDataXML_init_xDataTypeNone( &(element->xDataTypeInfo), element ); - element->textOffset = 0; - xDataXML_parseInitializeText( doc, &(element->text) ); - if( parentRoot->parentElement != NULL ) element->textOffset = parentRoot->parentElement->text.length; - if( parentRoot->currentChild == NULL ) { - parentRoot->children = element; } - else { - parentRoot->currentChild->next = element; - } - parentRoot->numberOfElements++; - parentRoot->currentChild = element; - doc->currentRoot = &(element->childrenRoot); - return( 0 ); -} -/* -************************************************************ -*/ -static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition( xDataXML_document *doc, xDataXML_docInfo *docInfo ) { - - docInfo->column = XML_GetCurrentColumnNumber( doc->xmlParser ); - docInfo->line = XML_GetCurrentLineNumber( doc->xmlParser ); - return( xDataXML_errNone ); -} -/* -************************************************************ -*/ -int xDataXML_parseIsError( xDataXML_document *doc ) { - - return( doc->status == xDataXML_statusError ); -} -/* -************************************************************ -*/ -xDataXML_element *xDataXML_getDocumentsElement( xDataXML_document *doc ) { return( doc->root.children ); } -xDataXML_element *xDataXML_getFirstElement( xDataXML_element *element ) { return( element->childrenRoot.children ); } -xDataXML_element *xDataXML_getNextElement( xDataXML_element *element ) { return( element->next ); } -/* -************************************************************ -*/ -enum xDataXML_itemMode xDataXML_getFirstItem( xDataXML_element *element, xDataXML_item *item ) { - - item->parentElement = element; - item->element = xDataXML_getFirstElement( element ); - if( item->element == NULL ) { - item->mode = xDataXML_itemModeText; - if( element->text.length == 0 ) item->mode = xDataXML_itemModeEnd; } - else { - item->mode = xDataXML_itemModeElement; - if( 0 < item->element->textOffset ) item->mode = xDataXML_itemModeText; - } - item->textOffset = 0; - item->textLength = element->text.length; - if( item->element != NULL ) item->textLength = item->element->textOffset; - item->text = element->text.text; - return( item->mode ); -} -/* -************************************************************ -*/ -enum xDataXML_itemMode xDataXML_getNextItem( xDataXML_item *item ) { - - if( item->mode != xDataXML_itemModeEnd ) { - if( item->mode == xDataXML_itemModeText ) { - item->mode = xDataXML_itemModeElement; - if( item->element == NULL ) item->mode = xDataXML_itemModeEnd; - item->textOffset += item->textLength; - item->textLength = 0; - item->text = &(item->parentElement->text.text[item->textOffset]); } - else { - item->element = item->element->next; - item->mode = xDataXML_itemModeText; - if( item->element == NULL ) { - if( item->textOffset < item->parentElement->text.length ) { - item->textLength = item->parentElement->text.length - item->textOffset; } - else { - item->mode = xDataXML_itemModeEnd; - } } - else { - item->textLength = item->element->textOffset - item->textOffset; - } - } - } - return( item->mode ); -} -/* -************************************************************ -*/ -int xDataXML_isAttributeInList( xDataXML_attributionList *attributes, char const *name ) { - - int i; - - for( i = 0; i < attributes->number; i++ ) { - if( !strcmp( attributes->attributes[i].name, name ) ) return( 1 ); - } - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_isAttributeInElement( xDataXML_element *element, char const *name ) { - - return( xDataXML_isAttributeInList( &(element->attributes), name ) ); -} -/* -************************************************************ -*/ -char *xDataXML_getAttributesValue( xDataXML_attributionList *attributes, char const *name ) { - - int i; - - for( i = 0; i < attributes->number; i++ ) { - if( !strcmp( attributes->attributes[i].name, name ) ) return( attributes->attributes[i].value ); - } - return( NULL ); -} -/* -************************************************************ -*/ -char const *xDataXML_getAttributesValueInElement( xDataXML_element *element, char const *name ) { - - return( (char const *) xDataXML_getAttributesValue( &(element->attributes), name ) ); -} -/* -************************************************************ -*/ -int xDataXML_attributeListLength( xDataXML_attributionList *attributes ) { - - return( attributes->number ); -} -/* -************************************************************ -*/ -xDataXML_attribute *xDataXML_attributeByIndex( xDataXML_attributionList *attributes, int index ) { - - if( index >= attributes->number ) return( NULL ); - return( &(attributes->attributes[index]) ); -} -/* -************************************************************ -*/ -static int xDataXML_init_xDataTypeNone( xDataXMLType *xDT, xDataXML_element *element ) { - - xDT->status = xDataXML_xDataType_Ok; - xDT->ID = NULL; - xDT->element = element; - xDT->toData = NULL; - xDT->toString = NULL; - xDT->release = NULL; - xDT->indexPresent = 1; /* The following describes the meaning of present variables. */ - xDT->startPresent = 1; /* If < 0, an error occured in converting value to an integer. */ - xDT->endPresent = 1; /* If > 0, not present as an attribute. */ - xDT->lengthPresent = 1; /* Else, if 0, present and converted without an error. */ - xDT->index = -1; - xDT->start = -1; - xDT->end = -1; - xDT->length = -1; - xDT->data = NULL; - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_getCommonData( statusMessageReporting *smr, xDataXML_element *element, xDataTOM_Int *index, xDataTOM_Int *start, xDataTOM_Int *end, - xDataTOM_Int *length ) { - - if( element->xDataTypeInfo.ID == NULL ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, 1, - "element %s is not xData", element->fullName ); - return( 1 ); - } - *index = element->xDataTypeInfo.index; - *start = element->xDataTypeInfo.start; - *end = element->xDataTypeInfo.end; - *length = element->xDataTypeInfo.length; - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_xDataTypeConvertAttributes( statusMessageReporting *smr, xDataXML_element *element ) { - - xDataXMLType *xDT = &(element->xDataTypeInfo); - void *smrUser = xDataXML_get_smrUserInterfaceFromElement( element ); - - xDT->index = -1; - xDT->start = -1; - xDT->end = -1; - xDT->length = -1; - if( ( xDT->indexPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "index", &(xDT->index), 0 ) ) < 0 ) return( 1 ); - if( ( xDT->startPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "start", &(xDT->start), 0 ) ) < 0 ) return( 1 ); - if( ( xDT->endPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "end", &(xDT->end), 0 ) ) < 0 ) return( 1 ); - if( ( xDT->lengthPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "length", &(xDT->length), 0 ) ) < 0 ) return( 1 ); - if( ( xDT->endPresent > 0 ) ) { - if( xDT->lengthPresent > 0 ) { - smr_setReportError3p( smr, smrUser, xDataTOM_smrLibraryID, 1, "missing length (or end) in xData" ); - return( 1 ); - } - xDT->end = xDT->length; } - else { - if( xDT->lengthPresent > 0 ) xDT->length = xDT->end; - } - - if( xDT->startPresent > 0 ) xDT->start = 0; - if( xDT->start < 0 ) { - smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "start = %d < 0", xDT->start ); - return( 1 ); - } - if( xDT->end < xDT->start ) { - smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "start = %d >= end = %d", xDT->start, xDT->end ); - return( 1 ); - } - if( xDT->length < 0 ) { - smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "length = %d < 0", xDT->length ); - return( 1 ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int( statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required ) { -/* -* Returns 1 if no such attribute, -1 if error converting to xDataTOM_Int and 0 if successful. -*/ - char const *value; - char *e; - - if( ( value = xDataXML_getAttributesValueInElement( element, name ) ) == NULL ) { - if( required ) smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, 1, - "missing required attribute '%s'", name ); - return( 1 ); - } - *n = (xDataTOM_Int) strtoll( value, &e, 10 ); - if( *e != 0 ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, 1, - "could not convert attribute %s's value = %s to an integer", name, value ); - return( -1 ); - } - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_convertAttributeToDouble( statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required ) { -/* -* Returns 1 if no such attribute, -1 if error converting to double and 0 if successful. -*/ - char const *value; - char *e; - - if( ( value = xDataXML_getAttributesValueInElement( element, name ) ) == NULL ) { - if( required ) smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, 1, - "missing required attribute '%s'", name ); - return( 1 ); - } - *d = strtod( value, &e ); - if( *e != 0 ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element) , xDataTOM_smrLibraryID, 1, - "could not convert attribute %s's values = %s to a double", name, value ); - return( -1 ); - } - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_numberOfElementsByTagName( statusMessageReporting * /*smr*/, xDataXML_element *element, char const *tagName ) { - - int n = 0; - xDataXML_element *child; - - for( child = xDataXML_getFirstElement( element ); child != NULL; child = xDataXML_getNextElement( child ) ) if( !strcmp( child->name, tagName ) ) n++; - return( n ); -} -/* -************************************************************ -*/ -xDataXML_elementList *xDataXML_getElementsByTagName( statusMessageReporting *smr, xDataXML_element *element, char const *tagName ) { - - int n = xDataXML_numberOfElementsByTagName( smr, element, tagName ); - size_t size; - xDataXML_element *child; - xDataXML_elementListItem *p; - xDataXML_elementList *list = NULL; - - - size = sizeof( xDataXML_elementList ) + n * sizeof( xDataXML_elementListItem ); - if( ( list = (xDataXML_elementList *) smr_malloc2( smr, size, 0, "list" ) ) != NULL ) { - list->n = n; - p = list->items = (xDataXML_elementListItem *) &(list[1]); - for( child = xDataXML_getFirstElement( element ); child != NULL; child = xDataXML_getNextElement( child ) ) { - if( !strcmp( child->name, tagName ) ) { - p->element = child; - p->sortString = NULL; - p++; - } - } - } - return( list ); -} -/* -************************************************************ -*/ -xDataXML_element *xDataXML_getOneElementByTagName( statusMessageReporting *smr, xDataXML_element *element, char *name, int required ) { - - xDataXML_elementList *list; - xDataXML_element *xData = NULL; - - if( ( list = xDataXML_getElementsByTagName( smr, element, name ) ) != NULL ) { - if( list->n == 0 ) { - if( required ) smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, - 1, "element %s does not have sub-element named %s", element->fullName, name ); } - else if( list->n > 1 ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( element ), xDataTOM_smrLibraryID, 1, - "element %s contains more than one sub-element named %s", element->fullName, name ); } - else { - xData = list->items[0].element; - } - xDataXML_freeElementList( smr, list ); - } - return( xData ); -} -/* -************************************************************ -*/ -void xDataXML_freeElementList( statusMessageReporting * /*smr*/, xDataXML_elementList *list ) { - - smr_freeMemory( (void **) &list ); -} -/* -************************************************************ -*/ -static char *xDataXML_getTraceback( statusMessageReporting *smr, xDataXML_element *element ) { -/* -* Returned string must be freed by calling routine. -*/ - int size; - char *s, *name; - - name = element->name; - size = (int) strlen( name ) + 1; - if( ( s = xDataXML_getTraceback2( smr, element->parentRoot, size ) ) != NULL ) { - strcat( s, "/" ); - strcat( s, name ); - } - return( s ); -} -/* -************************************************************ -*/ -static char *xDataXML_getTraceback2( statusMessageReporting *smr, xDataXML_rootElement *parentRoot, int n ) { - - int size; - char *s, *name; - - if( parentRoot->parentRoot == NULL ) { - s = (char *) smr_malloc2( smr, n + 1, 0, "traceback string" ); - *s = 0; } - else { - name = parentRoot->parentElement->name; - size = (int) strlen( name ) + 1; - n += size; - if( ( s = xDataXML_getTraceback2( smr, parentRoot->parentRoot, n ) ) != NULL ) { - strcat( s, "/" ); - strcat( s, name ); - } - } - return( s ); -} -/* -************************************************************ -*/ -int xDataXML_is_xDataType( statusMessageReporting *smr, xDataXMLType *xDT, char const * const ID, int setMsg ) { - - if( xDT->ID == NULL ) { - if( setMsg ) smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( xDT->element ), xDataTOM_smrLibraryID, 1, - "element %s not xData object", xDT->element->fullName ); } - else if( xDT->ID != ID ) { - if( setMsg ) smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( xDT->element ), xDataTOM_smrLibraryID, 1, - "Element %s is not xData object of ID %s but %s", xDT->element->fullName, ID, xDT->ID ); - } - return( xDT->ID == ID ); -} -/* -************************************************************ -*/ -char const *xDataXML_getFileName( xDataXML_document *doc ) { - - return( doc->fileName ); -} -/* -************************************************************ -*/ -char const *xDataXML_getRealFileName( xDataXML_document *doc ) { - - return( doc->realFileName ); -} -/* -************************************************************ -*/ -static int xDataXML_setFileName( statusMessageReporting *smr, xDataXML_document *doc, char const *fileName ) { - - char realPath[PATH_MAX+1]; - - smr_freeMemory( (void **) &(doc->fileName) ); - smr_freeMemory( (void **) &(doc->realFileName) ); - if( fileName != NULL ) { - if( ( doc->fileName = smr_allocateCopyString2( smr, fileName, "fileName" ) ) == NULL ) return( 1 ); - if( realpath( fileName, realPath ) != NULL ) { - if( ( doc->realFileName = smr_allocateCopyString2( smr, realPath, "realFileName" ) ) == NULL ) return( 1 ); - } - } - return( 0 ); -} -/* -************************************************************ -*/ -xDataXML_document *xDataXML_getElementsDocument( xDataXML_element *element ) { - - xDataXML_rootElement* root = element->parentRoot; - - while( root->parentRoot != NULL ) root = root->parentRoot; // Loop checking, 11.06.2015, T. Koi - return( root->xData_doc ); -} -/* -************************************************************ -*/ -void *xDataXML_get_smrUserInterfaceFromDocument( xDataXML_document *doc ) { - - if( doc == NULL ) return( NULL ); - return( &(doc->smrUserInterface ) ); -} -/* -************************************************************ -*/ -void *xDataXML_get_smrUserInterfaceFromElement( xDataXML_element *element ) { - - return( xDataXML_get_smrUserInterfaceFromDocument( xDataXML_getElementsDocument( element ) ) ); -} -/* -************************************************************ -*/ -static int xDataXML_smrUserInterfaceInitialize( xDataXML_document *doc ) { - - doc->smrUserInterface.smrUserInterface = xDataXML_smrUserInterface; - doc->smrUserInterface.doc = doc; - return( 0 ); -} -/* -************************************************************ -*/ -static int xDataXML_smrUserInterfaceFree( xDataXML_document *doc ) { - - doc->smrUserInterface.smrUserInterface = NULL; - doc->smrUserInterface.doc = NULL; - return( 0 ); -} -/* -************************************************************ -*/ -static char *xDataXML_smrUserInterface( void *userData ) { - - xDataXML_smr *smrUserInterface = (xDataXML_smr *) userData; - xDataXML_rootElement *currentRoot = smrUserInterface->doc->currentRoot; - - if( currentRoot->parentElement != NULL ) { - return( smr_allocateFormatMessage( "\nat line %d and column %d of file %s\nin element %s", currentRoot->parentElement->docInfo.line, - currentRoot->parentElement->docInfo.column, smrUserInterface->doc->fileName, currentRoot->parentElement->fullName ) ); } - else if( smrUserInterface->doc->fileName != NULL ) { - return( smr_allocateFormatMessage( "\nof file %s", smrUserInterface->doc->fileName ) ); - } - return( smr_allocateFormatMessage( "\nat line %d and column %d\nin element %s", currentRoot->parentElement->docInfo.line, - currentRoot->parentElement->docInfo.column, currentRoot->parentElement->fullName ) ); -} -/* -************************************************************ -*/ -int xDataXML_stringTo_xDataTOM_Int( statusMessageReporting *smr, void *smrUserInterface, char const *c, xDataTOM_Int *value, char const *endings, char **e ) { - - char const *s; - char tmp[64]; - int status = 1, n = sizeof( tmp ); - - for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break; - *value = (xDataTOM_Int) strtoll( s, e, 10 ); - if( *e == s ) { - smr_setReportError3(smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "could not convert \"%s\" to an integer", xDataXML_shortStringForMessage( n, tmp, c ));} - else { - if( *endings == 0 ) while( isspace( **e ) ) (*e)++; // Loop checking, 11.06.2015, T. Koi - if( **e == 0 ) { - status = 0; } - else { - if( *endings == 0 ) { - smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "integer string \"%s\" does not end with a '\\0'", - xDataXML_shortStringForMessage( n, tmp, c ) ); } - else { - if( strchr( endings, **e ) == NULL ) { - smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "integer string \"%s\" does not end with a white space or a '\\0\'", - xDataXML_shortStringForMessage( n, tmp, c ) ); } - else { - status = 0; - } - } - } - } - return( status ); -} -/* -************************************************************ -*/ -int xDataXML_stringTo_double( statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e ) { - - char const *s; - char tmp[64]; - int status = 1, n = sizeof( tmp ); - - for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break; - *value = strtod( s, e ); - if( *e == s ) { - smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "could not convert \"%s\" to an double", - xDataXML_shortStringForMessage( n, tmp, c ));} - else { - if( *endings == 0 ) while( isspace( **e ) ) (*e)++; // Loop checking, 11.06.2015, T. Koi - if( **e == 0 ) { - status = 0; } - else { - if( *endings == 0 ) { - smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "double string \"%s\" does not end with a '\\0'", - xDataXML_shortStringForMessage( n, tmp, c ) ); } - else { - if( strchr( endings, **e ) == NULL ) { - smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "double string \"%s\" does not end with a white space or a '\\0\'", - xDataXML_shortStringForMessage( n, tmp, c ) ); } - else { - status = 0; - } - } - } - } - return( status ); -} -/* -************************************************************ -*/ -int xDataXML_addToAccessed( statusMessageReporting * /*smr*/, xDataXML_element *element, int increment ) { - - element->accessed += increment; - return( element->accessed ); -} -/* -************************************************************ -*/ -int xDataXML_getAccessed( statusMessageReporting * /*smr*/, xDataXML_element *element ) { - - return( element->accessed ); -} -/* -************************************************************ -*/ -static char const *xDataXML_shortStringForMessage( size_t size, char *Out, char const *In ) { - - if( strlen( In ) > size ) { - strncpy( Out, In, size - 5 ); - Out[size-5] = 0; - strcat( Out, " ..." ); - return( Out ); - } - return( In ); -} -/* -************************************************************ -*/ -static int xDataXML_constructTOM( statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *XE ) { - - int i, status = 0; - xDataTOM_element *TOMChild; - xDataXML_element *XMLChild; - xDataXML_attribute *attribute; - char const *xDataValue = xDataXML_getAttributesValueInElement( XE, "xData" ); - - if( !smr_isOk( smr ) ) return( 1 ); - if( ( TOMChild = xDataTOM_addElementInElement( smr, TE, XE->index, XE->name ) ) == NULL ) return( 1 ); - for( i = 0; 1; i++ ) { - if( ( attribute = xDataXML_attributeByIndex( &(XE->attributes), i ) ) == NULL ) break; - if( xDataTOME_addAttribute( smr, TOMChild, attribute->name, attribute->value ) != 0 ) return( 1 ); - } - - if( !strcmp( XE->name, xDataTOM_KalbachMann_ID ) ) { - xDataValue = xDataTOM_KalbachMann_ID; - } - - if( xDataValue == NULL ) { - for( XMLChild = xDataXML_getFirstElement( XE ); ( status == 0 ) && ( XMLChild != NULL ); XMLChild = xDataXML_getNextElement( XMLChild ) ) { - status = xDataXML_constructTOM( smr, TOMChild, XMLChild ); - } } - else { - if( strcmp( xDataValue, xDataTOM_XYs_ID ) == 0 ) { - status = xDataXML_XYsToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_regionsXYs_ID ) == 0 ) { - status = xDataXML_regionsXYsToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_W_XYs_ID ) == 0 ) { - status = xDataXML_W_XYsToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_V_W_XYs_ID ) == 0 ) { - status = xDataXML_V_W_XYsToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_W_XYs_LegendreSeries_ID ) == 0 ) { - status = xDataXML_W_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_regionsW_XYs_LegendreSeries_ID ) == 0 ) { - status = xDataXML_regionsW_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_V_W_XYs_LegendreSeries_ID ) == 0 ) { - status = xDataXML_V_W_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_KalbachMann_ID ) == 0 ) { - status = xDataXML_KalbachMannToTOM( smr, XE, TOMChild ); } - else if( strcmp( xDataValue, xDataTOM_polynomial_ID ) == 0 ) { - status = xDataXML_polynomialToTOM( smr, XE, TOMChild ); } - else { - printf( "Unsupported xData type '%s' in element '%s'\n", xDataValue, XE->name ); -#if 0 - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "Unsupported xData type = \"%s\"", xDataValue ); - status = 1; -#endif - } - } - return( status ); -} -/* -************************************************************ -*/ -void *xDataXML_initializeData( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size ) { - - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - - if( xData_initializeData( smr, TE, ID, size ) == NULL ) return( NULL ); - if( xDataXML_axesElememtToTOM( smr, XE, &(xDI->axes) ) != 0 ) smr_freeMemory( (void **) &(xDI->data) ); - return( xDI->data ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_KalbachMann.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_KalbachMann.cc deleted file mode 100644 index d46889d3b4..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_KalbachMann.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_KalbachMannCoefficientsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_KalbachMannCoefficients *coefficients ); -/* -************************************************************ -*/ -int xDataXML_KalbachMannToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int length; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataTOM_KalbachMann *KalbachMann; - char const *wLabel, *form; - xDataXML_element *XMLChild; - xDataTOM_axes *axes = &(xDI->axes); - -/* Need to release KalbachMann if an error occurs later. */ - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_KalbachMann_ID, sizeof( xDataTOM_KalbachMann ) ) ) == NULL ) return( 1 ); - KalbachMann = (xDataTOM_KalbachMann *) xDI->data; - - if( ( form = xDataXML_getAttributesValueInElement( XE, "form" ) ) == NULL ) goto err; - if( strcmp( form, "fr" ) == 0 ) { - KalbachMann->type = xDataTOM_KalbachMannType_fr; } - else if( strcmp( form, "fra" ) == 0 ) { - KalbachMann->type = xDataTOM_KalbachMannType_fra; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid KalbachMann type - '%s'", form ); - goto err; - } - if( ( wLabel = xDataTOM_axes_getLabel( smr, axes, 0 ) ) == NULL ) goto err; - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_KalbachMann_initialize( smr, KalbachMann, length, axes ) != 0 ) return( 1 ); - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_KalbachMannCoefficientsToTOM( smr, XMLChild, &(KalbachMann->coefficients[KalbachMann->numberOfEnergies]) ) != 0 ) goto err; - KalbachMann->numberOfEnergies++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'KalbachMann'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - smr_freeMemory( (void **) &(xDI->data) ); - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_KalbachMannCoefficientsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_KalbachMannCoefficients *coefficients ) { - - int index, length; - double value; - - coefficients->coefficients = NULL; - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); - coefficients->index = index; - coefficients->length = length; - coefficients->value = value; - if( ( coefficients->coefficients = (double *) smr_malloc2( smr, length * sizeof( double ), 0, "coefficients->coefficients" ) ) == NULL ) goto err; - if( xDataXML_stringToDoubles( smr, XE, XE->text.text, length, (double *) coefficients->coefficients ) != 0 ) goto err; - return( 0 ); - -err: - if( coefficients->coefficients != NULL ) smr_freeMemory( (void **) &(coefficients->coefficients) ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs.cc deleted file mode 100644 index 5bc395360d..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_V_W_XYs_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, xDataTOM_axes *axes ); -/* -************************************************************ -*/ -int xDataXML_V_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int index, length; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - char const *wLabel; - xDataTOM_V_W_XYs *V_W_XYs; - -/* Need to release V_W_XYs if an error occurs later. */ - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_V_W_XYs_ID, sizeof( xDataTOM_V_W_XYs ) ) ) == NULL ) return( 1 ); - V_W_XYs = (xDataTOM_V_W_XYs *) xDI->data; - if( ( wLabel = xDataTOM_axes_getLabel( smr, &(xDI->axes), 0 ) ) == NULL ) goto err; - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_V_W_XYs_initialize( smr, V_W_XYs, length, &(xDI->axes) ) != 0 ) return( 1 ); - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_V_W_XYs_W_XYsToTOM( smr, XMLChild, &(V_W_XYs->W_XYs[index]), &(xDI->axes) ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'V_W_XYs'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - smr_freeMemory( (void **) &(xDI->data) ); - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_V_W_XYs_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, xDataTOM_axes *axes ) { - - int index; - double value; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); - return( xDataXML_W_XYsDataToTOM( smr, XE, W_XYs, index, value, axes, 1 ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs_LegendreSeries.cc deleted file mode 100644 index 1c1d86a96d..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_V_W_XYs_LegendreSeries.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_V_W_XYs_LegendreSeries_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, xDataTOM_axes *axes ); -/* -************************************************************ -*/ -int xDataXML_V_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int index, length; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - char const *wLabel; - xDataTOM_V_W_XYs_LegendreSeries *V_W_XYs_LegendreSeries; - - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_V_W_XYs_LegendreSeries_ID, sizeof( xDataTOM_V_W_XYs_LegendreSeries ) ) ) == NULL ) - return( 1 ); - V_W_XYs_LegendreSeries = (xDataTOM_V_W_XYs_LegendreSeries *) xDI->data; - if( ( wLabel = xDataTOM_axes_getLabel( smr, &(xDI->axes), 0 ) ) == NULL ) goto err; - length = (int) xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_V_W_XYs_LegendreSeries_initialize( smr, V_W_XYs_LegendreSeries, length, &(xDI->axes) ) != 0 ) goto err; - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_V_W_XYs_LegendreSeries_W_XYs_LegendreSeriesToTOM( smr, XMLChild, &(V_W_XYs_LegendreSeries->W_XYs_LegendreSeries[index]), - &(xDI->axes) ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'V_W_XYs_LegendreSeries'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_V_W_XYs_LegendreSeries_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, xDataTOM_axes *axes ) { - - int index, length; - double value; - char const *wLabel; - xDataXML_element *XMLChild; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); - if( ( wLabel = xDataTOM_axes_getLabel( smr, axes, 1 ) ) == NULL ) goto err; - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_W_XYs_LegendreSeries_initialize( smr, W_XYs_LegendreSeries, index, length, value, xDataTOM_subAxesType_proxy, axes, NULL ) != 0 ) goto err; - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( smr, XMLChild, &(W_XYs_LegendreSeries->LegendreSeries[index]) ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'W_XYs_LegendreSeries'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs.cc deleted file mode 100644 index 5629474673..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs.cc +++ /dev/null @@ -1,88 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_W_XYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, - int axesOffset ); -/* -************************************************************ -*/ -int xDataXML_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataTOM_W_XYs *W_XYs; - -/* Need to release W_XYs if an error occurs later. */ - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_W_XYs_ID, sizeof( xDataTOM_W_XYs ) ) ) == NULL ) return( 1 ); - W_XYs = (xDataTOM_W_XYs *) xDI->data; - - if( xDataXML_W_XYsDataToTOM( smr, XE, W_XYs, 0, 0., &(xDI->axes), 0 ) != 0 ) goto err; - return( 0 ); - -err: - smr_freeMemory( (void **) &(xDI->data) ); - return( 1 ); -} -/* -************************************************************ -*/ -int xDataXML_W_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, int index, double value, xDataTOM_axes *axes, - int axesOffset ) { - - int length; - char const *wLabel; - xDataXML_element *XMLChild; - - if( ( wLabel = xDataTOM_axes_getLabel( smr, axes, axesOffset ) ) == NULL ) goto err; - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_W_XYs_initialize( smr, W_XYs, index, length, value, axes, axesOffset ) != 0 ) return( 1 ); - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_W_XYs_XYsToTOM( smr, XMLChild, &(W_XYs->XYs[index]), axes, axesOffset + 1 ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'W_XYs'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_W_XYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, - int axesOffset ) { - - int index, length; - double accuracy, value; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); - return( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, value, accuracy, xDataTOM_subAxesType_proxy, axesOffset, axes, NULL ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs_LegendreSeries.cc deleted file mode 100644 index c3ffd95693..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_W_XYs_LegendreSeries.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_LegendreSeriesDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_LegendreSeries *LegendreSeries, - int index, int length, double value ); -/* -************************************************************ -*/ -int xDataXML_W_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int index, length; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - char const *wLabel; - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries = NULL; - - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_W_XYs_LegendreSeries_ID, sizeof( xDataTOM_W_XYs_LegendreSeries ) ) ) == NULL ) - return( 1 ); - W_XYs_LegendreSeries = (xDataTOM_W_XYs_LegendreSeries *) xDI->data; - if( ( wLabel = xDataTOM_axes_getLabel( smr, &(xDI->axes), 0 ) ) == NULL ) goto err; - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_W_XYs_LegendreSeries_initialize( smr, W_XYs_LegendreSeries, 0, length, 0., xDataTOM_subAxesType_proxy, &(xDI->axes), NULL ) != 0 ) goto err; - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( smr, XMLChild, &(W_XYs_LegendreSeries->LegendreSeries[index]) ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData = 'W_XYs_LegendreSeries'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -int xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_LegendreSeries *LegendreSeries ) { - - int index, length; - double value; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); - return( xDataXML_LegendreSeriesDataToTOM( smr, XE, LegendreSeries, index, length, value ) ); -} -/* -************************************************************ -*/ -static int xDataXML_LegendreSeriesDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_LegendreSeries *LegendreSeries, - int index, int length, double value ) { - - if( xDataTOM_LegendreSeries_initialize( smr, LegendreSeries, index, length, value ) != 0 ) return( 1 ); - if( xDataXML_stringToDoubles( smr, XE, XE->text.text, length, LegendreSeries->LegendreSeries ) == 0 ) return( 0 ); - xDataTOM_LegendreSeries_release( LegendreSeries ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_XYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_XYs.cc deleted file mode 100644 index 4dccb66bf2..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_XYs.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, - double accuracy ); -/* -************************************************************ -*/ -int xDataXML_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int dataProcessed = 0, length; - double accuracy; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - - xDI->element = TE; - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 ); - if( xDataXML_axesElememtToTOM( smr, XE, &(xDI->axes) ) != 0 ) return( 1 ); - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( "data", XMLChild->name ) == 0 ) { - if( dataProcessed ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'data' elements found" ); - goto err; - } - dataProcessed = 1; - if( xDataXML_XYsDataToTOM2( smr, XMLChild, xDI, -1, length, 0., accuracy ) != 0 ) goto err; - } - } - if( dataProcessed == 0 ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "data element missing" ); - goto err; - } - return( 0 ); - -err: - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, - double accuracy ) { - - xDataTOM_XYs *XYs; - - xDI->ID = xDataTOM_XYs_ID; - if( ( xDI->data = (xDataTOM_XYs *) smr_malloc2( smr, sizeof( xDataTOM_XYs ), 1, "xDI->data" ) ) == NULL ) goto err; - XYs = (xDataTOM_XYs *) xDI->data; - - if( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, value, accuracy, xDataTOM_subAxesType_proxy, 0, &(xDI->axes), NULL ) != 0 ) goto err; - return( 0 ); - -err: - smr_freeMemory( (void **) &(xDI->data) ); - return( 1 ); -} -/* -************************************************************ -*/ -int xDataXML_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, - enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) { - - XYs->index = index; - XYs->length = length; - XYs->value = value; - XYs->accuracy = accuracy; - if( xDataTOM_subAxes_initialize( smr, &(XYs->subAxes), subAxesType, axesOffest, axes, interpolation ) != 0 ) return( 1 ); - if( ( XYs->data = (double *) smr_malloc2( smr, 2 * length * sizeof( double ), 0, "XYs->data" ) ) == NULL ) goto err; - - if( xDataXML_stringToDoubles( smr, XE, XE->text.text, 2 * length, (double *) XYs->data ) != 0 ) goto err; - return( 0 ); - -err: - smr_freeMemory( (void **) &(XYs->data) ); - return( 1 ); -} -/* -************************************************************ -*/ -int xDataXML_stringToDoubles( statusMessageReporting *smr, xDataXML_element *XE, char const *s1, int length, double *d1 ) { - - char *e1 = (char *) s1; - int i1; - - for( i1 = 0; i1 < length; i1++, d1++, s1 = e1 ) { - if( xDataXML_stringTo_double( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), s1, d1, " \n", &e1 ) ) return( 1 ); - } - while( isspace( *e1 ) ) e1++; /* There should be nothing but white spaces left in the string. */ // Loop checking, 11.06.2015, T. Koi - if( *e1 != 0 ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "text contains extra data = %s", e1 ); - return( 1 ); - } - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_axes.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_axes.cc deleted file mode 100644 index 1e7f322798..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_axes.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -int xDataXML_axesElememtToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ) { - - int axesProcessed = 0; - xDataXML_element *XMLChild; - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - if( axesProcessed ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'axes' elements found" ); - return( 1 ); - } - axesProcessed = 1; - if( xDataXML_axesToTOM( smr, XMLChild, axes ) != 0 ) return( 1 ); - } - } - if( axesProcessed == 0 ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "axes element missing" ); - return( 1 ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataXML_axesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ) { - - int i = 0, n = 0, index; - xDataXML_element *XMLChild; - char const *label, *unit, *sInterpolation, *attribute; - xDataTOM_interpolation interpolation; - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axis", XMLChild->name ) != 0 ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "non axis element found: name = %s", XMLChild->name ); - return( 1 ); - } - n++; - } - if( xDataTOM_axes_initialize( smr, axes, n ) != 0 ) return( 1 ); - - for( XMLChild = xDataXML_getFirstElement( XE ), i = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ), i++ ) { - attribute = "index"; - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XMLChild, attribute, &index, 1 ) != 0 ) goto errA; - attribute = "label"; - if( ( label = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; - attribute = "unit"; - if( ( unit = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; - if( i < ( n - 1 ) ) { - attribute = "interpolation"; - if( ( sInterpolation = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; - if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err; } - else { - sInterpolation = ""; - if( xDataTOM_interpolation_set( smr, &interpolation, xDataTOM_interpolationFlag_linear, xDataTOM_interpolationFlag_linear, - xDataTOM_interpolationQualifier_dependent ) != 0 ) goto err; - } - xDataTOM_axis_initialize( smr, &(axes->axis[i]), index, label, unit, &interpolation ); - } - return( 0 ); - -errA: - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "axis missing attribute '%s'", attribute ); -err: - n = i; - for( i = 0; i < n; i++ ) xDataTOM_axis_release( smr, &(axes->axis[i]) ); - smr_freeMemory( (void **) &(axes->axis) ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_polynomial.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_polynomial.cc deleted file mode 100644 index fd4041ee8a..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_polynomial.cc +++ /dev/null @@ -1,58 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -/* -************************************************************ -*/ -int xDataXML_polynomialToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int length, dataProcessed = 0; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataTOM_polynomial *polynomial = NULL; - xDataXML_element *XMLChild; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_polynomial_ID, sizeof( xDataTOM_polynomial ) ) ) == NULL ) return( 1 ); - if( xDataTOM_polynomial_initialize( smr, (xDataTOM_polynomial *) xDI->data, length, &(xDI->axes) ) != 0 ) goto err; - polynomial = (xDataTOM_polynomial *) xDI->data; - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( "data", XMLChild->name ) == 0 ) { - if( dataProcessed ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'data' elements found" ); - goto err; - } - dataProcessed = 1; - if( xDataXML_stringToDoubles( smr, XE, XMLChild->text.text, length, (double *) polynomial->coefficients ) != 0 ) goto err; - } - } - if( dataProcessed == 0 ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "data element missing" ); - goto err; - } - return( 0 ); - -err: - if( polynomial != NULL ) xDataTOM_polynomial_release( polynomial ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsW_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsW_XYs_LegendreSeries.cc deleted file mode 100644 index 33271f1c91..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsW_XYs_LegendreSeries.cc +++ /dev/null @@ -1,116 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_regionsW_XYs_LegendreSeries_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, char const *wLabel, xDataTOM_axes *axes ); -/* -************************************************************ -*/ -int xDataXML_regionsW_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int index, length; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - char const *wLabel; - xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries; - - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_regionsW_XYs_LegendreSeries_ID, sizeof( xDataTOM_regionsW_XYs_LegendreSeries ) ) ) - == NULL ) return( 1 ); - regionsW_XYs_LegendreSeries = (xDataTOM_regionsW_XYs_LegendreSeries *) xDI->data; - length = xDataXML_numberOfElementsByTagName( smr, XE, "region" ); - if( xDataTOM_regionsW_XYs_LegendreSeries_initialize( smr, regionsW_XYs_LegendreSeries, length, &(xDI->axes) ) != 0 ) goto err; - if( ( wLabel = xDataTOM_axes_getLabel( smr, &(xDI->axes), 0 ) ) == NULL ) goto err; - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( "region", XMLChild->name ) == 0 ) { - if( xDataXML_regionsW_XYs_LegendreSeries_regionToTOM( smr, XMLChild, &(regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries[index]), - wLabel, regionsW_XYs_LegendreSeries->axes ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData 'regionsW_XYs_LegendreSeries'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: -/* Need to free things here?????????.*/ - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_regionsW_XYs_LegendreSeries_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, - xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, char const *wLabel, xDataTOM_axes *axes ) { - - int index, length; - xDataXML_element *XMLChild, *interpolationAxesElement = NULL; - xDataTOM_interpolation interpolation; - char const *sInterpolation; - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) { - if( interpolationAxesElement != NULL ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "multiple %s elements in element 'region'", XMLChild->name ); - goto err; - } - interpolationAxesElement = XMLChild; - } - } - if( interpolationAxesElement == NULL ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "missing element 'interpolationAxes'" ); - goto err; - } - if( ( sInterpolation = xDataXML_getAttributesValueInElement( interpolationAxesElement, "interpolation" ) ) == NULL ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( interpolationAxesElement ), xDataTOM_smrLibraryID, -1, - "missing attribute 'interpolation'" ); - goto err; - } - if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); - if( xDataTOM_W_XYs_LegendreSeries_initialize( smr, W_XYs_LegendreSeries, index, length, 0., xDataTOM_subAxesType_intepolationAxes, axes, - &interpolation ) != 0 ) goto err; - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( wLabel, XMLChild->name ) == 0 ) { - if( xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( smr, XMLChild, &(W_XYs_LegendreSeries->LegendreSeries[index]) ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in element 'region'", XMLChild->name ); - goto err; - } - } - return( 0 ); - -err: -/* Need to free things here?????????.*/ - - return( 1 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsXYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsXYs.cc deleted file mode 100644 index 8352a717d4..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_importXML_regionsXYs.cc +++ /dev/null @@ -1,127 +0,0 @@ -/* -# <> -# <> -*/ -#include -#include -#include -#include - -#include "xDataTOM_importXML_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -static int xDataXML_regionsXYs_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes ); -static int xDataXML_regionsXYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, - xDataTOM_interpolation *interpolation, int index, int length, double accuracy ); -/* -************************************************************ -*/ -int xDataXML_regionsXYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { - - int index; - xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); - xDataXML_element *XMLChild; - xDataTOM_regionsXYs *regionsXYs; - - if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_regionsXYs_ID, sizeof( xDataTOM_regionsXYs ) ) ) == NULL ) return( 1 ); - regionsXYs = (xDataTOM_regionsXYs *) xDI->data; - regionsXYs->axes = &(xDI->axes); - regionsXYs->length = xDataXML_numberOfElementsByTagName( smr, XE, "region" ); - if( ( regionsXYs->XYs = (xDataTOM_XYs *) smr_malloc2( smr, regionsXYs->length * sizeof( xDataTOM_XYs ), 1, "regionsXYs->XYs" ) ) == NULL ) goto err; - - - for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "axes", XMLChild->name ) == 0 ) { - continue; } - else if( strcmp( "region", XMLChild->name ) == 0 ) { - if( xDataXML_regionsXYs_regionToTOM( smr, XMLChild, &(regionsXYs->XYs[index]), regionsXYs->axes ) != 0 ) goto err; - index++; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in xData 'regionsXYs'", XMLChild->name ); - goto err; - } - } - - return( 0 ); - -err: -/* Need to free things here?????????.*/ - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_regionsXYs_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes ) { - - int index, length; - double accuracy; - xDataXML_element *XMLChild, *interpolationAxesElement = NULL, *dataElement = NULL; - xDataTOM_interpolation interpolation; - char const *sInterpolation; - - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); - if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 ); - - for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { - if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) { - if( interpolationAxesElement != NULL ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "multiple %s elements in element 'region'", XMLChild->name ); - goto err; - } - interpolationAxesElement = XMLChild; } - else if( strcmp( "data", XMLChild->name ) == 0 ) { - if( dataElement != NULL ) { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "multiple %s elements in element 'region'", XMLChild->name ); - goto err; - } - dataElement = XMLChild; } - else { - smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "invalid element '%s' in element 'region'", XMLChild->name ); - goto err; - } - } - if( interpolationAxesElement == NULL ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "missing 'interpolationAxes' element in element 'region'" ); - goto err; - } - if( ( sInterpolation = xDataXML_getAttributesValueInElement( interpolationAxesElement, "interpolation" ) ) == NULL ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( interpolationAxesElement ), xDataTOM_smrLibraryID, -1, - "missing attribute 'interpolation'" ); - goto err; - } - if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err; - if( dataElement == NULL ) { - smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, - "missing 'data' element in element 'region'" ); - goto err; - } - xDataXML_regionsXYs_XYsToTOM( smr, dataElement, XYs, axes, &interpolation, index, length, accuracy ); - return( 0 ); - -err: -/* Need to free things here?????????.*/ - - return( 1 ); -} -/* -************************************************************ -*/ -static int xDataXML_regionsXYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, - xDataTOM_interpolation *interpolation, int index, int length, double accuracy ) { - - return( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, 0., accuracy, xDataTOM_subAxesType_intepolationAxes, 0, axes, interpolation ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_interpolation.cc b/source/processes/hadronic/models/lend/src/xDataTOM_interpolation.cc deleted file mode 100644 index 520577e86a..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_interpolation.cc +++ /dev/null @@ -1,109 +0,0 @@ -/* -# <> -# <> -*/ - -#include -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -#define dependentAxis 1 -#define allowByRegion 2 - -static enum xDataTOM_interpolationFlag xDataTOM_interpolation_getFromString( statusMessageReporting *smr, char const *s, char const **e, - char const *str, int flag ); -/* -************************************************************ -*/ -int xDataTOM_interpolation_set( statusMessageReporting *smr, xDataTOM_interpolation *interpolation, enum xDataTOM_interpolationFlag independent, - enum xDataTOM_interpolationFlag dependent, enum xDataTOM_interpolationQualifier qualifier ) { - - if( ( independent < xDataTOM_interpolationFlag_linear ) || ( independent > xDataTOM_interpolationFlag_byRegion ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid independent interpolation = %d", independent ); - return( 1 ); - } - if( ( dependent < xDataTOM_interpolationFlag_linear ) || ( dependent > xDataTOM_interpolationFlag_flat ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid dependent interpolation = %d", dependent ); - return( 1 ); - } - if( ( qualifier <= xDataTOM_interpolationQualifier_invalid ) || ( qualifier > xDataTOM_interpolationQualifier_correspondingPoints ) ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid interpolation qualifier = %d", qualifier ); - return( 1 ); - } - - interpolation->independent = independent; - interpolation->dependent = dependent; - interpolation->qualifier = qualifier; - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_interpolation_setFromString( statusMessageReporting *smr, xDataTOM_interpolation *interpolation, char const *str ) { - - int flag = 0; - char const *c, *e; - enum xDataTOM_interpolationQualifier qualifier = xDataTOM_interpolationQualifier_none; - enum xDataTOM_interpolationFlag independent, dependent; - - if( ( c = strchr( str, ':' ) ) != NULL ) { - if( strncmp( "unitBase:", str, 9 ) == 0 ) { - qualifier = xDataTOM_interpolationQualifier_unitBase; } - else if( strncmp( "correspondingPoints:", str, 20 ) == 0 ) { - qualifier = xDataTOM_interpolationQualifier_correspondingPoints; } - else { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid interpolation string qualifier '%s'", str ); - return( 1 ); - } - c++; } - else { - c = str; - } - if( ( independent = xDataTOM_interpolation_getFromString( smr, c, &e, str, flag ) ) == xDataTOM_interpolationFlag_invalid ) return( 1 ); - if( *e != ',' ) { - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "missing ',' separator in interpolation string'%s'", str ); - return( 1 ); - } - c = ++e; - flag |= dependentAxis; - if( ( dependent = xDataTOM_interpolation_getFromString( smr, c, &e, str, flag ) ) == xDataTOM_interpolationFlag_invalid ) return( 1 ); - xDataTOM_interpolation_set( smr, interpolation, independent, dependent, qualifier ); - return( 0 ); -} -/* -************************************************************ -*/ -static enum xDataTOM_interpolationFlag xDataTOM_interpolation_getFromString( statusMessageReporting *smr, char const *s, char const **e, - char const *str, int flag ) { - - if( strncmp( "linear", s, 6 ) == 0 ) { *e = &(s[6]); return( xDataTOM_interpolationFlag_linear ); } - if( strncmp( "log", s, 3 ) == 0 ) { *e = &(s[3]); return( xDataTOM_interpolationFlag_log ); } - if( flag | allowByRegion ) { - if( strncmp( "byRegion", s, 8 ) == 0 ) { *e = &(s[8]); return( xDataTOM_interpolationFlag_byRegion ); } - } - if( flag | dependentAxis ) { - if( strncmp( "flat", s, 4 ) == 0 ) { *e = &(s[4]); return( xDataTOM_interpolationFlag_flat ); } - } - smr_setReportError2( smr, xDataTOM_smrLibraryID, -1, "invalid interpolation component '%s' in string '%s'", s, str ); - return( xDataTOM_interpolationFlag_invalid ); - -/* Currently not supported. - otherToken = 'other' - chargedParticleToken = 'charged-particle' -*/ -} -/* -************************************************************ -*/ -int xDataTOM_interpolation_copy( statusMessageReporting *smr, xDataTOM_interpolation *desc, xDataTOM_interpolation *src ) { - - return( xDataTOM_interpolation_set( smr, desc, src->independent, src->dependent, src->qualifier ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_polynomial.cc b/source/processes/hadronic/models/lend/src/xDataTOM_polynomial.cc deleted file mode 100644 index 2904dcc7c5..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_polynomial.cc +++ /dev/null @@ -1,70 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_polynomial_ID = "polynomial"; - -/* -************************************************************ -*/ -int xDataTOM_polynomial_initialize( statusMessageReporting *smr, xDataTOM_polynomial *polynomial, int length, xDataTOM_axes *axes ) { - - polynomial->length = length; - if( ( polynomial->coefficients = (double *) smr_malloc2( smr, length * sizeof( double ), 1, "polynomial->coefficients" ) ) == NULL ) return( 1 ); - if( xDataTOM_subAxes_initialize( smr, &(polynomial->subAxes), xDataTOM_subAxesType_proxy, 0, axes, NULL ) != 0 ) { - smr_freeMemory( (void **) &(polynomial->coefficients) ); - return( 1 ); - } - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_polynomial_free( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_polynomial_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_polynomial_release( (xDataTOM_polynomial *) xDI->data ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_polynomial_release( xDataTOM_polynomial *polynomial ) { - - xDataTOM_subAxes_release( &(polynomial->subAxes) ); - polynomial->length = 0; - smr_freeMemory( (void **) &(polynomial->coefficients) ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_polynomial_getData( xDataTOM_polynomial *polynomial, double **data ) { - - *data = polynomial->coefficients; - return( polynomial->length ); -} -/* -************************************************************ -*/ -int xDataTOM_polynomial_getDataFromXDataInfo( xDataTOM_xDataInfo *xDI, double **data ) { - - return( xDataTOM_polynomial_getData( (xDataTOM_polynomial *) xDI->data, data ) ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_regionsW_XYs_LegendreSeries.cc b/source/processes/hadronic/models/lend/src/xDataTOM_regionsW_XYs_LegendreSeries.cc deleted file mode 100644 index d5b9f9afef..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_regionsW_XYs_LegendreSeries.cc +++ /dev/null @@ -1,55 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_regionsW_XYs_LegendreSeries_ID = "regionsW_XYs_LegendreSeries"; - -/* -************************************************************ -*/ -int xDataTOM_regionsW_XYs_LegendreSeries_initialize( statusMessageReporting *smr, xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries, - int length, xDataTOM_axes *axes ) { - - regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries = NULL; - regionsW_XYs_LegendreSeries->length = length; - regionsW_XYs_LegendreSeries->axes = axes; - if( ( regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries = (xDataTOM_W_XYs_LegendreSeries *) smr_malloc2( smr, length * sizeof( xDataTOM_W_XYs_LegendreSeries ), 1, - "regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries" ) ) == NULL ) return( 1 ); - - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_regionsW_XYs_LegendreSeries_free( xDataTOM_xDataInfo *xDI ) { - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_regionsW_XYs_LegendreSeries_ID, xDI->ID ) != 0 ) return( 1 ); - xDataTOM_regionsW_XYs_LegendreSeries_release( (xDataTOM_regionsW_XYs_LegendreSeries *) xDI->data ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} -/* -************************************************************ -*/ -int xDataTOM_regionsW_XYs_LegendreSeries_release( xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries ) { - - int i; - - for( i = 0; i < regionsW_XYs_LegendreSeries->length; i++ ) xDataTOM_W_XYs_LegendreSeries_release( &(regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries[i]) ); - smr_freeMemory( (void **) &(regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries) ); - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/lend/src/xDataTOM_regionsXYs.cc b/source/processes/hadronic/models/lend/src/xDataTOM_regionsXYs.cc deleted file mode 100644 index c397bfa835..0000000000 --- a/source/processes/hadronic/models/lend/src/xDataTOM_regionsXYs.cc +++ /dev/null @@ -1,35 +0,0 @@ -/* -# <> -# <> -*/ -#include - -#include "xDataTOM_private.h" - -#if defined __cplusplus -namespace GIDI { -using namespace GIDI; -#endif - -char const *xDataTOM_regionsXYs_ID = "regionsXYs"; - -/* -************************************************************ -*/ -int xDataTOM_regionsXYs_free( xDataTOM_xDataInfo *xDI ) { - - int i; - xDataTOM_regionsXYs *regionsXYs; - - if( xDI == NULL ) return( 0 ); - if( strcmp( xDataTOM_regionsXYs_ID, xDI->ID ) != 0 ) return( 1 ); - regionsXYs = (xDataTOM_regionsXYs *) xDI->data; - for( i = 0; i < regionsXYs->length; i++ ) xDataTOM_XYs_release( &(regionsXYs->XYs[i]) ); - smr_freeMemory( (void **) &(regionsXYs->XYs) ); - smr_freeMemory( (void **) &(xDI->data) ); - return( 0 ); -} - -#if defined __cplusplus -} -#endif diff --git a/source/processes/hadronic/models/nudex/History b/source/processes/hadronic/models/nudex/History index 88494016f2..999cc47acc 100644 --- a/source/processes/hadronic/models/nudex/History +++ b/source/processes/hadronic/models/nudex/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-03-04 Ben Morgan (hadr-nudex-V11-03-00) +- Address maybe-unitialized warnings when building/linking with LTO + - Identified by ATLAS. + ## 2024-08-21 Gabriele Cosmo (hadr-nudex-V11-02-04) - Fixed reported Coverity defects for unitialised data in G4NuDEXPSF and in G4NuDEXStatisticalNucleus; fixed restoring of ostream format. diff --git a/source/processes/hadronic/models/nudex/src/G4NuDEXStatisticalNucleus.cc b/source/processes/hadronic/models/nudex/src/G4NuDEXStatisticalNucleus.cc index ea0e2871c4..eb845f9b30 100644 --- a/source/processes/hadronic/models/nudex/src/G4NuDEXStatisticalNucleus.cc +++ b/source/processes/hadronic/models/nudex/src/G4NuDEXStatisticalNucleus.cc @@ -368,7 +368,7 @@ G4int G4NuDEXStatisticalNucleus::GenerateCascade(G4int InitialLevel,G4double Exc G4int Npar=0; G4int f_level=0,multipol=0; - G4double alpha,E_trans,Exc_ene_i,Exc_ene_f; //icc factor, energy of the transition, initial/final excitation energy + G4double alpha=0.0,E_trans=0.0,Exc_ene_i=0.0,Exc_ene_f=0.0; //icc factor, energy of the transition, initial/final excitation energy G4double EmissionTime=0; //in seconds G4int NTransition=0; //G4double TotalCascadeEnergy1=0,TotalCascadeEnergy2=0; diff --git a/source/processes/hadronic/models/particle_hp/History b/source/processes/hadronic/models/particle_hp/History index 51e55f1fee..61ecb42bfe 100644 --- a/source/processes/hadronic/models/particle_hp/History +++ b/source/processes/hadronic/models/particle_hp/History @@ -6,6 +6,35 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-12 Vladimir Ivanchenko (hadr-hpp-V11-03-03) +- G4ParticleHPInelastic - fixed AllHP physics - proper initialisation of neutrons + and light ions (problem report #2591 and some other problems). + +## 2025-04-02 Vladimir Ivanchenko (hadr-hpp-V11-03-02) +- G4ParticleHPThermalScattering, G4ParticleHPThermalScatteringData, + G4ParticleHPJENDLHEData - fixed Coverity warnings for unprotected access to maps + +## 2025-03-20 Vladimir Ivanchenko (hadr-hpp-V11-03-01) +- G4ParticleHPThermalScatteringNames, G4ParticleHPVector, G4ParticleHPCaptureURR, + G4ParticleHPElasticURR, G4ParticleHPFissionURR, G4ParticleHPInelasticURR, + G4ParticleHPIsoProbabilityTable_CALENDF, G4ParticleHPIsoProbabilityTable_NJOY, + G4ParticleHPThermalScattering, G4ParticleHPThermalScatteringData, + G4ParticleHPThermalScatteringNames - fixed Coverity warnings, which are mainly + real problems of handling of maps and finding of isotopes. + +## 2024-12-07 Vladimir Ivanchenko (hadr-hpp-V11-03-00) +- G4ParticleHPThermalScatteringData - attempt to fix Coverity warning on + wrong handling of map iterator; several calls to G4HadronicExceptions + are substituted by one G4Exception inside BuildPhysicsTable(..) method, + which provides FatalException if a particle is not the neutron; simplified + IsApplicable(... ) methods called at each step; 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, + initilized data structures are saved to G4ParticleHPManager and are + accessed from all threads and instances; end of job destruction is + performed also only once; commented lines are removed; comments to code + are extended. + ## 2024-10-28 Vladimir Ivanchenko (hadr-hpp-V11-02-16) - G4ParticleHPElasticData, G4ParticleHPInelasticData, G4ParticleHPCaptureData, G4ParticleHPFissionData, G4ParticleHPThermalScatteringData, diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh index 3450b8ecf5..7cdde3b6e1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh @@ -70,9 +70,6 @@ class G4ParticleHPThermalScatteringData : public G4VCrossSectionDataSet G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); G4double GetInelasticCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); @@ -94,14 +91,14 @@ class G4ParticleHPThermalScatteringData : public G4VCrossSectionDataSet G4double GetX(const G4DynamicParticle*, G4double aT, std::map*); - void clearCurrentXSData(); + void clearCurrentXSData(std::map*>*); std::map* readData(const G4String&); G4int getTS_ID(const G4Material*, const G4Element*); - private: - + G4bool isInitializer{false}; + G4int verbose{1}; G4double emax; // element temp x section from E @@ -109,15 +106,14 @@ class G4ParticleHPThermalScatteringData : public G4VCrossSectionDataSet std::map*>* incoherent{nullptr}; std::map*>* inelastic{nullptr}; - std::vector indexOfThermalElement; - G4ParticleHPThermalScatteringNames* names; - G4double ke_cache; G4double xs_cache; const G4Element* element_cache; const G4Material* material_cache; - std::map, G4int> dic; + static G4ParticleHPThermalScatteringNames* names; + static std::vector* indexOfThermalElement; + static std::map, G4int>* dic; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh index fa73cfc1cf..7abec7ef0f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh @@ -58,12 +58,14 @@ class G4ParticleHPThermalScatteringNames inline std::size_t GetSize() const { return names.size(); } inline const G4String& GetTS_NDL_Name(const G4String& nameG4Element) const { - return names.find(nameG4Element)->second; + auto p = names.find(nameG4Element); + return (p != names.end()) ? p->second : sss; } inline const G4String& GetTS_NDL_Name(const G4String& material, const G4String& element) const { - return nist_names.find(std::pair(material, element))->second; + auto p = nist_names.find(std::pair(material, element)); + return (p != nist_names.end()) ? p->second : sss; } // For user prepared thermal files @@ -72,6 +74,7 @@ class G4ParticleHPThermalScatteringNames private: + G4String sss{""}; // G4Element NDL name std::map names; diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh index d2cd8aed7d..3ab89ecd69 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh @@ -413,12 +413,12 @@ class G4ParticleHPVector } else if (aScheme == LINLOG || aScheme == CLINLOG || aScheme == ULINLOG) { G4double a = y1; - G4double b = (y2 - y1) / (G4Log(x2) - G4Log(x1)); + G4double b = (y2 - y1) / (G4Log(x2/x1)); sum += (a - b) * (x2 - x1) + b * (x2 * G4Log(x2) - x1 * G4Log(x1)); } else if (aScheme == LOGLIN || aScheme == CLOGLIN || aScheme == ULOGLIN) { G4double a = G4Log(y1); - G4double b = (G4Log(y2) - G4Log(y1)) / (x2 - x1); + G4double b = (G4Log(y2/y1)) / (x2 - x1); sum += (G4Exp(a) / b) * (G4Exp(b * x2) - G4Exp(b * x1)); } else if (aScheme == HISTO || aScheme == CHISTO || aScheme == UHISTO) { @@ -426,7 +426,7 @@ class G4ParticleHPVector } else if (aScheme == LOGLOG || aScheme == CLOGLOG || aScheme == ULOGLOG) { G4double a = G4Log(y1); - G4double b = (G4Log(y2) - G4Log(y1)) / (G4Log(x2) - G4Log(x1)); + G4double b = (G4Log(y2/y1)) / (G4Log(x2/x1)); sum += (G4Exp(a) / (b + 1)) * (G4Pow::GetInstance()->powA(x2, b + 1) - G4Pow::GetInstance()->powA(x1, b + 1)); @@ -464,9 +464,8 @@ class G4ParticleHPVector G4double GetMeanX() { - G4double result; - G4double running = 0; - G4double weighted = 0; + G4double running = 0.0; + G4double weighted = 0.0; for (G4int i = 1; i < nEntries; i++) { running += theInt.GetBinIntegral(theManager.GetScheme(i - 1), theData[i - 1].GetX(), @@ -475,31 +474,15 @@ class G4ParticleHPVector theData[i - 1].GetX(), theData[i].GetX(), theData[i - 1].GetY(), theData[i].GetY()); } - result = weighted / running; - return result; + return (running > 0.0) ? weighted / running : 0.0; } // Finds maximum cross section between two values of kinetic energy G4double GetMaxY(G4double emin, G4double emax); - /* - void Block(G4double aX) - { - theBlocked.push_back(aX); - } - - void Buffer(G4double aX) - { - theBuffered.push_back(aX); - } - */ - std::vector GetBlocked() { return theBlocked; } std::vector GetBuffered() { return theBuffered; } - // void SetBlocked(const std::vector &aBlocked) {theBlocked = aBlocked;} - // void SetBuffered(const std::vector &aBuffer) {theBuffered = aBuffer;} - G4double Get15percentBorder(); G4double Get50percentBorder(); diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureURR.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureURR.cc index ce06ba8fa7..3fe9695e93 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureURR.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureURR.cc @@ -91,6 +91,8 @@ G4HadFinalState* G4ParticleHPCaptureURR::ApplyYourself( const G4HadProjectile& a } } // end if find element } // end element loop + if (isotopeJ == -1) { return theFinalState; } + // Check whether the energy is out of the URR limits for the given element if ( kineticEnergy < (*URRlimits).at(elementI).first || kineticEnergy > (*URRlimits).at(elementI).second ) { // Call capture final state in G4ParicleHPChannel and SELECT ISOTOPE (to be improved in the future) diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticURR.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticURR.cc index 05b65e54b1..0374575914 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticURR.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticURR.cc @@ -94,6 +94,8 @@ G4HadFinalState* G4ParticleHPElasticURR::ApplyYourself( const G4HadProjectile& a } } // end if find element } // end element loop + if (isotopeJ == -1) { return theFinalState; } + // Check whether the energy is out of the URR limits for the given element if ( kineticEnergy < (*URRlimits).at(elementI).first || kineticEnergy > (*URRlimits).at(elementI).second ) { // Call elastic final state in G4ParicleHPChannel and SELECT ISOTOPE (to be improved in the future) diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionURR.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionURR.cc index 1036dcffdb..dbf811183b 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionURR.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionURR.cc @@ -92,6 +92,9 @@ G4HadFinalState* G4ParticleHPFissionURR::ApplyYourself( const G4HadProjectile& a } } // end if find element } // end element loop + // if element or isotope are not selected no further computations + if (elementI == -1 || isotopeJ == -1) { return theFinalState; } + // Check whether the energy is out of the URR limits for the given element if ( kineticEnergy < (*URRlimits).at(elementI).first || kineticEnergy > (*URRlimits).at(elementI).second ) { // Call fission final state in G4ParicleHPChannel and SELECT ISOTOPE (to be improved in the future) diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc index 741580c7f0..93bdc05304 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc @@ -83,10 +83,12 @@ #include "G4SystemOfUnits.hh" #include "G4AutoLock.hh" -G4bool G4ParticleHPInelastic::fLock[] = {true, true, true, true, true, true}; +G4bool G4ParticleHPInelastic::fLock[] = {false, false, false, false, false, false}; std::vector* G4ParticleHPInelastic::theInelastic[] = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; +static std::once_flag applyOnce; + namespace { G4Mutex theHPInelastic = G4MUTEX_INITIALIZER; @@ -117,12 +119,14 @@ G4ParticleHPInelastic::~G4ParticleHPInelastic() void G4ParticleHPInelastic::ClearData() { - if (theInelastic[indexP] != nullptr) { - for (auto const& p : *(theInelastic[indexP])) { - delete p; + for (G4int i=0; i<6; ++i) { + if (theInelastic[i] != nullptr) { + for (auto const& p : *(theInelastic[i])) { + delete p; + } + delete theInelastic[i]; + theInelastic[i] = nullptr; } - delete theInelastic[indexP]; - theInelastic[indexP] = nullptr; } } @@ -217,22 +221,26 @@ const std::pair G4ParticleHPInelastic::GetFatalEnergyCheckLe void G4ParticleHPInelastic::BuildPhysicsTable(const G4ParticleDefinition& projectile) { - if (fLock[indexP]) { + // only one object destroy all list of final state models + std::call_once(applyOnce, [this]() { isFirst = true; }); + + G4int nelm = (G4int)G4Element::GetNumberOfElements(); + if (isFirst && nelm != numEle) { G4AutoLock l(&theHPInelastic); - if (fLock[indexP]) { - isFirst = true; - fLock[indexP] = false; + if (nelm != numEle) { + for (G4int i=0; i<6; ++i) { fLock[i] = false; } } l.unlock(); } - - G4int nelm = (G4int)G4Element::GetNumberOfElements(); - G4int n0 = numEle; - numEle = nelm; - if (!isFirst || nelm == n0) { return; } + if (fLock[indexP]) { return; } // extra elements should be initialized G4AutoLock l(&theHPInelastic); + if (fLock[indexP]) { return; } + + fLock[indexP] = true; + G4int n0 = numEle; + numEle = nelm; if (nullptr == theInelastic[indexP]) { theInelastic[indexP] = new std::vector; diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticURR.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticURR.cc index 08be2a030c..a8d35e88ea 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticURR.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticURR.cc @@ -97,6 +97,8 @@ G4HadFinalState* G4ParticleHPInelasticURR::ApplyYourself( const G4HadProjectile& } } // end if find element } // end element loop + if (isotopeJ == -1) { return theFinalState; } + // Check whether the energy is out of the URR limits for the given element if ( kineticEnergy < (*URRlimits).at(elementI).first || kineticEnergy > (*URRlimits).at(elementI).second ) { // Call inelastic final state in G4ParicleHPChannel and SELECT ISOTOPE (to be improved in the future) @@ -114,7 +116,8 @@ G4HadFinalState* G4ParticleHPInelasticURR::ApplyYourself( const G4HadProjectile& } aNucleus.SetIsotope( target_isotope ); } else { - // the energy is inside the limits of the URR and the isotope has to be found, calls the final state for the found element and isotope + // the energy is inside the limits of the URR and the isotope has to be found, + // calls the final state for the found element and isotope theFinalState = (*G4ParticleHPManager::GetInstance()->GetInelasticFinalStates( aTrack.GetDefinition() ))[elementI] ->ApplyYourself( isotopeJ, Z, A, aTrack ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_CALENDF.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_CALENDF.cc index 5c8905a8ea..51d9204479 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_CALENDF.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_CALENDF.cc @@ -147,7 +147,7 @@ G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetCorrelatedIsoCrossSectionPT if ( kineticEnergy < Emin || kineticEnergy > Emax ) { // if the kinetic energy is outside of the URR limits for the given isotope, it finds the smooth cross section G4int indexEl = (G4int)ele->GetIndex(); - G4int isotopeJ = -1; // index of isotope in the given element + G4int isotopeJ = 0; // index of isotope in the given element G4int n_isotopes = (G4int)ele->GetNumberOfIsotopes(); for ( G4int j = 0; j < n_isotopes; j++ ) { if ( A == (G4int)( ele->GetIsotope(j)->GetN() ) ) { @@ -213,7 +213,9 @@ G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetCorrelatedIsoCrossSectionPT ///-------------------------------------------------------------------------------------- G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetIsoCrossSectionPT( const G4DynamicParticle* dp, G4int MTnumber, - const G4Element* ele,G4double &kineticEnergy , std::map< std::thread::id, G4double > &random_number_cache, std::thread::id &id ) { + const G4Element* ele,G4double &kineticEnergy, + std::map< std::thread::id, G4double >& random_number_cache, + std::thread::id &id ) { energy_cache[id] = kineticEnergy; if ( kineticEnergy < Emin || kineticEnergy > Emax ) { // if the kinetic energy is outside of the URR limits for the given isotope, it finds the smooth cross section @@ -226,18 +228,20 @@ G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetIsoCrossSectionPT( const G4 break; } } + if (isotopeJ == -1) { return 0.0; } G4double frac = ele->GetRelativeAbundanceVector()[isotopeJ]; G4double weightedelasticXS; G4double weightedcaptureXS; G4double weightedinelasticXS; - if (G4ParticleHPManager::GetInstance()->GetNeglectDoppler()) { - weightedelasticXS = (*G4ParticleHPManager::GetInstance()->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); - weightedcaptureXS = (*G4ParticleHPManager::GetInstance()->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); - weightedinelasticXS = ((*G4ParticleHPManager::GetInstance()->GetInelasticFinalStates(dp->GetDefinition()))[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ )) * barn; + auto manHP = G4ParticleHPManager::GetInstance(); + if (manHP->GetNeglectDoppler()) { + weightedelasticXS = (*manHP->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + weightedcaptureXS = (*manHP->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + weightedinelasticXS = (*manHP->GetInelasticFinalStates(dp->GetDefinition()))[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ) * barn; } else { - weightedelasticXS = this->GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); - weightedcaptureXS = this->GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); - weightedinelasticXS = this->GetDopplerBroadenedInelasticXS( dp, indexEl, isotopeJ ); + weightedelasticXS = GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); + weightedcaptureXS = GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); + weightedinelasticXS = GetDopplerBroadenedInelasticXS( dp, indexEl, isotopeJ ); } xsela_cache[id] = weightedelasticXS / frac; xscap_cache[id] = weightedcaptureXS / frac; @@ -245,11 +249,11 @@ G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetIsoCrossSectionPT( const G4 if ( Z < 88 ) { xsfiss_cache[id] = 0.0; } else { - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) { - G4double weightedfissionXS = (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + if ( manHP->GetNeglectDoppler() ) { + G4double weightedfissionXS = (*manHP->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); xsfiss_cache[id] = weightedfissionXS / frac; } else { - G4double weightedfissionXS = this->GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); + G4double weightedfissionXS = GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); xsfiss_cache[id] = weightedfissionXS / frac; } } @@ -278,7 +282,7 @@ G4double G4ParticleHPIsoProbabilityTable_CALENDF::GetIsoCrossSectionPT( const G4 } else if (MTnumber == 3) { // inelastic cross section return xsinela_cache[id]; } else { - G4cout << "Reaction was not found, returns 0." << G4endl; + //G4cout << "Reaction was not found, returns 0." << G4endl; return 0; } } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_NJOY.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_NJOY.cc index 23327b724b..a71dbcb614 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_NJOY.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoProbabilityTable_NJOY.cc @@ -140,6 +140,8 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetCorrelatedIsoCrossSectionPT( c } } energy_cache[id] = kineticEnergy; + auto manHP = G4ParticleHPManager::GetInstance(); + if ( kineticEnergy < Emin || kineticEnergy > Emax ) { // if the kinetic energy is outside of the URR limits for the given isotope, it finds the smooth cross section G4int indexEl = (G4int)ele->GetIndex(); @@ -150,26 +152,27 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetCorrelatedIsoCrossSectionPT( c break; } } + if (isotopeJ == -1) { return 0.0; } G4double frac = ele->GetRelativeAbundanceVector()[isotopeJ]; G4double weightedelasticXS; G4double weightedcaptureXS; - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) { - weightedelasticXS = (*G4ParticleHPManager::GetInstance()->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); - weightedcaptureXS = (*G4ParticleHPManager::GetInstance()->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + if ( manHP->GetNeglectDoppler() ) { + weightedelasticXS = (*manHP->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + weightedcaptureXS = (*manHP->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); } else { - weightedelasticXS = this->GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); - weightedcaptureXS = this->GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); + weightedelasticXS = GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); + weightedcaptureXS = GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); } xsela_cache[id] = weightedelasticXS / frac; xscap_cache[id] = weightedcaptureXS / frac; if ( Z < 88 ) { xsfiss_cache[id] = 0.0; } else { - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) { - G4double weightedfissionXS = (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + if ( manHP->GetNeglectDoppler() ) { + G4double weightedfissionXS = (*manHP->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); xsfiss_cache[id] = weightedfissionXS / frac; } else { - G4double weightedfissionXS = this->GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); + G4double weightedfissionXS = GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); xsfiss_cache[id] = weightedfissionXS / frac; } } @@ -224,15 +227,16 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetCorrelatedIsoCrossSectionPT( c break; } } + if (isotopeJ == -1) { return 0.0; } G4double frac = ele->GetRelativeAbundanceVector()[isotopeJ]; G4double weightedelasticXS; G4double weightedcaptureXS; - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) { - weightedelasticXS = (*G4ParticleHPManager::GetInstance()->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); - weightedcaptureXS = (*G4ParticleHPManager::GetInstance()->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + if ( manHP->GetNeglectDoppler() ) { + weightedelasticXS = (*manHP->GetElasticFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + weightedcaptureXS = (*manHP->GetCaptureFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); } else { - weightedelasticXS = this->GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); - weightedcaptureXS = this->GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); + weightedelasticXS = GetDopplerBroadenedElasticXS( dp, indexEl, isotopeJ ); + weightedcaptureXS = GetDopplerBroadenedCaptureXS( dp, indexEl, isotopeJ ); } G4double ela1 = theElasticData->at(indexE - 1)->at(indexP1); G4double ela2 = theElasticData->at(indexE)->at(indexP2); @@ -245,14 +249,14 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetCorrelatedIsoCrossSectionPT( c if ( Z < 88 ) { xsfiss_cache[id] = 0.0; } else { - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) { - G4double weightedfissionXS = (*G4ParticleHPManager::GetInstance()->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); + if ( manHP->GetNeglectDoppler() ) { + G4double weightedfissionXS = (*manHP->GetFissionFinalStates())[indexEl]->GetWeightedXsec( kineticEnergy, isotopeJ ); G4double fissionXS = weightedfissionXS / frac; G4double fiss1 = theFissionData->at(indexE - 1)->at(indexP1); G4double fiss2 = theFissionData->at(indexE)->at(indexP2); xsfiss_cache[id] = theInt.Lin( kineticEnergy, ene1, ene2, fiss1, fiss2 ) * fissionXS; } else { - G4double weightedfissionXS = this->GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); + G4double weightedfissionXS = GetDopplerBroadenedFissionXS( dp, indexEl, isotopeJ ); G4double fissionXS = weightedfissionXS / frac; G4double fiss1 = theFissionData->at(indexE - 1)->at(indexP1); G4double fiss2 = theFissionData->at(indexE)->at(indexP2); @@ -267,7 +271,7 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetCorrelatedIsoCrossSectionPT( c } else if ( MTnumber == 18 ) { // fission cross section return xsfiss_cache[id]; } else { - G4cout << "Reaction was not found, returns 0." << G4endl; + //G4cout << "Reaction was not found, returns 0." << G4endl; return 0; } } @@ -279,7 +283,7 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetIsoCrossSectionPT( const G4Dyn if ( kineticEnergy < Emin || kineticEnergy > Emax ) { // if the kinetic energy is outside of the URR limits for the given isotope, it finds the smooth cross section G4int indexEl = (G4int)ele->GetIndex(); - G4int isotopeJ = -1; // index of isotope in the given element + G4int isotopeJ = 0; // index of isotope in the given element for ( G4int j = 0; j < (G4int)ele->GetNumberOfIsotopes(); j++ ) { if ( A == (G4int)ele->GetIsotope(j)->GetN() ) { isotopeJ = j; @@ -355,7 +359,7 @@ G4double G4ParticleHPIsoProbabilityTable_NJOY::GetIsoCrossSectionPT( const G4Dyn if ( rand <= theProbability2->at(indexP2) ) break; } G4int indexEl = (G4int)ele->GetIndex(); - G4int isotopeJ = -1; // index of isotope in the given element + G4int isotopeJ = 0; // index of isotope in the given element for ( G4int j = 0; j < (G4int)ele->GetNumberOfIsotopes(); j++ ) { if ( A == (G4int)ele->GetIsotope(j)->GetN() ) { isotopeJ = j; diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc index ac5a42cdcc..6c008f49a4 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc @@ -63,11 +63,11 @@ G4ParticleHPJENDLHEData::G4ParticleHPJENDLHEData() G4PhysicsVector* pointerPhysicsVector = itA.second; if (pointerPhysicsVector != nullptr) { delete pointerPhysicsVector; - itA.second = NULL; + itA.second = nullptr; } } delete pointer_map; - itZ.second = NULL; + itZ.second = nullptr; } } mIsotope.clear(); @@ -215,14 +215,17 @@ G4double G4ParticleHPJENDLHEData::getXSfromThisIsotope(G4int Z, G4int A, G4doubl G4double aXSection = 0.0; G4PhysicsVector* aPhysVec; - if (mIsotope.find(Z)->second->find(A) != mIsotope.find(Z)->second->end()) { - aPhysVec = mIsotope.find(Z)->second->find(A)->second; + auto isoZ = mIsotope.find(Z); + if (isoZ == mIsotope.end()) { return aXSection; } + auto isoA = isoZ->second->find(A); + if (isoA != isoZ->second->end()) { + aPhysVec = isoA->second; aXSection = aPhysVec->Value(ek); } else { // Select closest one in the same Z G4int delta0 = 99; // no mean for 99 - for (auto it = mIsotope.find(Z)->second->cbegin(); it != mIsotope.find(Z)->second->cend(); ++it) + for (auto it = isoZ->second->begin(); it != isoZ->second->end(); ++it) { G4int delta = std::abs(A - it->first); if (delta < delta0) delta0 = delta; @@ -231,17 +234,25 @@ G4double G4ParticleHPJENDLHEData::getXSfromThisIsotope(G4int Z, G4int A, G4doubl // Randomize of selection larger or smaller than A if (G4UniformRand() < 0.5) delta0 *= -1; G4int A1 = A + delta0; - if (mIsotope.find(Z)->second->find(A1) != mIsotope.find(Z)->second->cend()) { - aPhysVec = mIsotope.find(Z)->second->find(A1)->second; + auto isoA1 = isoZ->second->find(A1); + G4bool ok = false; + if (isoA1 != isoZ->second->end()) { + aPhysVec = isoA1->second; + ok = true; } else { A1 = A - delta0; - aPhysVec = mIsotope.find(Z)->second->find(A1)->second; + auto isoA2 = isoZ->second->find(A1); + if (isoA2 != isoZ->second->end()) { + aPhysVec = isoA2->second; + ok = true; + } + } + if (ok) { + aXSection = aPhysVec->Value(ek); + // X^(2/3) factor + aXSection *= G4Pow::GetInstance()->A23(1.0 * A / A1); } - - aXSection = aPhysVec->Value(ek); - // X^(2/3) factor - aXSection *= G4Pow::GetInstance()->A23(1.0 * A / A1); } return aXSection; diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScattering.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScattering.cc index 62174fbb92..9815bba43d 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScattering.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScattering.cc @@ -239,11 +239,12 @@ G4ParticleHPThermalScattering::readAnE_P_E_isoAng(std::istream* file) // for in } aData->sum_of_probXdEs = total; + G4double norm = (total > 0.0) ? 1.0/total : 0.0; // Normalize CDF aData->secondary_energy_cdf_size = (G4int)aData->secondary_energy_cdf.size(); for (G4int i = 0; i < aData->secondary_energy_cdf_size; ++i) { - aData->secondary_energy_cdf[i] /= total; + aData->secondary_energy_cdf[i] *= norm; } return aData; @@ -338,14 +339,20 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject G4double total = theXSection->GetCrossSection(dp, theElement, theMaterial); G4double inelastic = theXSection->GetInelasticCrossSection(dp, theElement, theMaterial); + auto inelELM = inelasticFSs->find(ielement); + G4bool mayBeInel = (inelELM != inelasticFSs->end()); + auto coheELM = coherentFSs->find(ielement); + G4bool mayBeCohe = (coheELM != coherentFSs->end()); + auto incoELM = incoherentFSs->find(ielement); + G4bool mayBeInco = (incoELM != incoherentFSs->end()); + G4double random = G4UniformRand(); - if (random <= inelastic / total) { + if ((total*random <= inelastic && mayBeInel) || (!mayBeCohe && !mayBeInco)) { // Inelastic std::vector v_temp; v_temp.clear(); - for (auto it = inelasticFSs->find(ielement)->second->cbegin(); - it != inelasticFSs->find(ielement)->second->cend(); ++it) + for (auto it = inelELM->second->begin(); it != inelELM->second->end(); ++it) { v_temp.push_back(it->first); } @@ -358,11 +365,11 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject std::vector* vNEP_EPM_TH = nullptr; if (tempLH.first != 0.0 && tempLH.second != 0.0) { - vNEP_EPM_TL = inelasticFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; - vNEP_EPM_TH = inelasticFSs->find(ielement)->second->find(tempLH.second / kelvin)->second; + vNEP_EPM_TL = inelELM->second->find(tempLH.first / kelvin)->second; + vNEP_EPM_TH = inelELM->second->find(tempLH.second / kelvin)->second; } else if (tempLH.first == 0.0) { - auto itm = inelasticFSs->find(ielement)->second->cbegin(); + auto itm = inelELM->second->begin(); vNEP_EPM_TL = itm->second; ++itm; vNEP_EPM_TH = itm->second; @@ -370,7 +377,7 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject tempLH.second = itm->first; } else if (tempLH.second == 0.0) { - auto itm = inelasticFSs->find(ielement)->second->cend(); + auto itm = inelELM->second->end(); --itm; vNEP_EPM_TH = itm->second; --itm; @@ -399,9 +406,9 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject G4double sint = std::sqrt(1 - mu * mu); theParticleChange.SetMomentumChange(sint * std::cos(phi), sint * std::sin(phi), mu); } - else if (random - <= (inelastic + theXSection->GetCoherentCrossSection(dp, theElement, theMaterial)) - / total) + else if (mayBeCohe && + (!mayBeInco || random*total + <= (inelastic + theXSection->GetCoherentCrossSection(dp, theElement, theMaterial)))) { // Coherent Elastic @@ -410,8 +417,7 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject // T_L and T_H std::vector v_temp; v_temp.clear(); - for (auto it = coherentFSs->find(ielement)->second->cbegin(); - it != coherentFSs->find(ielement)->second->cend(); ++it) + for (auto it = coheELM->second->begin(); it != coheELM->second->end(); ++it) { v_temp.push_back(it->first); } @@ -426,21 +432,21 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject std::vector*>* pvE_p_TH = nullptr; if (tempLH.first != 0.0 && tempLH.second != 0.0) { - pvE_p_TL = coherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; - pvE_p_TH = coherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; + pvE_p_TL = coheELM->second->find(tempLH.first / kelvin)->second; + pvE_p_TH = coheELM->second->find(tempLH.first / kelvin)->second; } else if (tempLH.first == 0.0) { - pvE_p_TL = coherentFSs->find(ielement)->second->find(v_temp[0])->second; - pvE_p_TH = coherentFSs->find(ielement)->second->find(v_temp[1])->second; + pvE_p_TL = coheELM->second->find(v_temp[0])->second; + pvE_p_TH = coheELM->second->find(v_temp[1])->second; tempLH.first = tempLH.second; tempLH.second = v_temp[1]; } else if (tempLH.second == 0.0) { - pvE_p_TH = coherentFSs->find(ielement)->second->find(v_temp.back())->second; + pvE_p_TH = coheELM->second->find(v_temp.back())->second; auto itv = v_temp.cend(); --itv; --itv; - pvE_p_TL = coherentFSs->find(ielement)->second->find(*itv)->second; + pvE_p_TL = coheELM->second->find(*itv)->second; tempLH.second = tempLH.first; tempLH.first = *itv; } @@ -500,14 +506,13 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject G4double sint = std::sqrt(1 - mu * mu); theParticleChange.SetMomentumChange(sint * std::cos(phi), sint * std::sin(phi), mu); } - else { + else if (mayBeInco) { // InCoherent Elastic // T_L and T_H std::vector v_temp; v_temp.clear(); - for (auto it = incoherentFSs->find(ielement)->second->cbegin(); - it != incoherentFSs->find(ielement)->second->cend(); ++it) + for (auto it = incoELM->second->cbegin(); it != incoELM->second->cend(); ++it) { v_temp.push_back(it->first); } @@ -526,34 +531,32 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject // Interpolate TL and TH anEPM_TL_E = create_E_isoAng_from_energy( aTrack.GetKineticEnergy(), - incoherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second); + incoELM->second->find(tempLH.first / kelvin)->second); anEPM_TH_E = create_E_isoAng_from_energy( aTrack.GetKineticEnergy(), - incoherentFSs->find(ielement)->second->find(tempLH.second / kelvin)->second); + incoELM->second->find(tempLH.second / kelvin)->second); } else if (tempLH.first == 0.0) { // Extrapolate T0 and T1 anEPM_TL_E = create_E_isoAng_from_energy( aTrack.GetKineticEnergy(), - incoherentFSs->find(ielement)->second->find(v_temp[0])->second); + incoELM->second->find(v_temp[0])->second); anEPM_TH_E = create_E_isoAng_from_energy( aTrack.GetKineticEnergy(), - incoherentFSs->find(ielement)->second->find(v_temp[1])->second); + incoELM->second->find(v_temp[1])->second); tempLH.first = tempLH.second; tempLH.second = v_temp[1]; } else if (tempLH.second == 0.0) { // Extrapolate Tmax-1 and Tmax + std::size_t nn = v_temp.size(); + if (nn < 2) { return &theParticleChange; } + anEPM_TL_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoELM->second->find(v_temp[nn - 2])->second); anEPM_TH_E = create_E_isoAng_from_energy( aTrack.GetKineticEnergy(), - incoherentFSs->find(ielement)->second->find(v_temp.back())->second); - auto itv = v_temp.cend(); - --itv; - --itv; - anEPM_TL_E = create_E_isoAng_from_energy( - aTrack.GetKineticEnergy(), incoherentFSs->find(ielement)->second->find(*itv)->second); - tempLH.second = tempLH.first; - tempLH.first = *itv; + incoELM->second->find(v_temp.back())->second); } // E_isoAng for aTemp and aTrack.GetKineticEnergy() @@ -665,8 +668,12 @@ G4ParticleHPThermalScattering::sample_inelastic_E_mu(G4double pE, std::vector pE_P_E_isoAng_limit(2, nullptr); if (energyLH.first != 0.0 && energyLH.second != 0.0) { - pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[map_energy.find(energyLH.first)->second]; - pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[map_energy.find(energyLH.second)->second]; + auto u = map_energy.find(energyLH.first); + if (u != map_energy.end()) + pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[u->second]; + auto w = map_energy.find(energyLH.second); + if (w != map_energy.end()) + pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[w->second]; } else if (energyLH.first == 0.0) { pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[0]; @@ -846,7 +853,7 @@ E_isoAng G4ParticleHPThermalScattering::create_E_isoAng_from_energy(G4double ene E_isoAng* panEPM_T_EH = nullptr; if (energyLH.first != 0.0 && energyLH.second != 0.0) { - for (auto iv = vEPM->cbegin(); iv != vEPM->cend(); ++iv) { + for (auto iv = vEPM->begin(); iv != vEPM->end(); ++iv) { if (energyLH.first == (*iv)->energy) { panEPM_T_EL = *iv; ++iv; @@ -954,7 +961,7 @@ G4ParticleHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng( std::vector v_energy; v_energy.clear(); G4int i = 0; - for (auto itv = vNEP_EPM->cbegin(); itv != vNEP_EPM->cend(); ++itv) { + for (auto itv = vNEP_EPM->begin(); itv != vNEP_EPM->end(); ++itv) { v_energy.push_back((*itv)->energy); map_energy.insert(std::pair((*itv)->energy, i)); i++; @@ -966,25 +973,34 @@ G4ParticleHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng( E_P_E_isoAng* pE_P_E_isoAng_EH = nullptr; if (energyLH.first != 0.0 && energyLH.second != 0.0) { - pE_P_E_isoAng_EL = (*vNEP_EPM)[map_energy.find(energyLH.first)->second]; - pE_P_E_isoAng_EH = (*vNEP_EPM)[map_energy.find(energyLH.second)->second]; + auto u = map_energy.find(energyLH.first); + if (u != map_energy.end()) + pE_P_E_isoAng_EL = (*vNEP_EPM)[u->second]; + auto w = map_energy.find(energyLH.second); + if (w != map_energy.end()) + pE_P_E_isoAng_EH = (*vNEP_EPM)[w->second]; } else if (energyLH.first == 0.0) { pE_P_E_isoAng_EL = (*vNEP_EPM)[0]; pE_P_E_isoAng_EH = (*vNEP_EPM)[1]; } - if (energyLH.second == 0.0) { + else if (energyLH.second == 0.0 && i >= 2) { + pE_P_E_isoAng_EL = (*vNEP_EPM)[i - 2]; pE_P_E_isoAng_EH = (*vNEP_EPM).back(); - auto itv = vNEP_EPM->cend(); - --itv; - --itv; - pE_P_E_isoAng_EL = *itv; } G4double sE; G4double sE_L; G4double sE_H; + E_isoAng anE_isoAng; + // extreme case - there is no possibility to sample + if (nullptr == pE_P_E_isoAng_EL || nullptr == pE_P_E_isoAng_EL) { + anE_isoAng.n = 1; + anE_isoAng.isoAngle.push_back(0.0); + return std::pair(pE, anE_isoAng); + } + sE_L = get_secondary_energy_from_E_P_E_isoAng(rand_for_sE, pE_P_E_isoAng_EL); sE_H = get_secondary_energy_from_E_P_E_isoAng(rand_for_sE, pE_P_E_isoAng_EH); @@ -994,7 +1010,6 @@ G4ParticleHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng( E_isoAng E_isoAng_L = create_E_isoAng_from_energy(sE, &(pE_P_E_isoAng_EL->vE_isoAngle)); E_isoAng E_isoAng_H = create_E_isoAng_from_energy(sE, &(pE_P_E_isoAng_EH->vE_isoAngle)); - E_isoAng anE_isoAng; // For defeating warning message from compiler anE_isoAng.n = 1; anE_isoAng.energy = sE; // never used @@ -1018,25 +1033,25 @@ G4ParticleHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng( void G4ParticleHPThermalScattering::buildPhysicsTable() { // Is rebuild of physics table a necessity - if (nMaterial == G4Material::GetMaterialTable()->size() - && nElement == G4Element::GetElementTable()->size()) + std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + if (nMaterial == numberOfMaterials && nElement == numberOfElements) { return; } - nMaterial = G4Material::GetMaterialTable()->size(); - nElement = G4Element::GetElementTable()->size(); + auto theMaterialTable = G4Material::GetMaterialTable(); + auto theElementTable = G4Element::GetElementTable(); + nMaterial = numberOfMaterials; + nElement = numberOfElements; dic.clear(); std::map co_dic; // Searching Nist Materials - static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr; - if (theMaterialTable == nullptr) theMaterialTable = G4Material::GetMaterialTable(); - std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); for (std::size_t i = 0; i < numberOfMaterials; ++i) { G4Material* material = (*theMaterialTable)[i]; - auto numberOfElements = (G4int)material->GetNumberOfElements(); - for (G4int j = 0; j < numberOfElements; ++j) { + auto nelm = (G4int)material->GetNumberOfElements(); + for (G4int j = 0; j < nelm; ++j) { const G4Element* element = material->GetElement(j); if (names.IsThisThermalElement(material->GetName(), element->GetName())) { G4int ts_ID_of_this_geometry; @@ -1061,8 +1076,6 @@ void G4ParticleHPThermalScattering::buildPhysicsTable() } // Searching TS Elements - auto theElementTable = G4Element::GetElementTable(); - std::size_t numberOfElements = G4Element::GetNumberOfElements(); for (std::size_t i = 0; i < numberOfElements; ++i) { const G4Element* element = (*theElementTable)[i]; if (names.IsThisThermalElement(element->GetName())) { diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc index 77dc825d1c..a08f36d5da 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc @@ -41,11 +41,15 @@ #include #include +G4ParticleHPThermalScatteringNames* G4ParticleHPThermalScatteringData::names = nullptr; +std::vector* G4ParticleHPThermalScatteringData::indexOfThermalElement = nullptr; +std::map, G4int>* G4ParticleHPThermalScatteringData::dic = nullptr; + G4ParticleHPThermalScatteringData::G4ParticleHPThermalScatteringData() : G4VCrossSectionDataSet("NeutronHPThermalScatteringData") { // Upper limit of neutron energy - emax = 4 * eV; + emax = 4 * CLHEP::eV; SetMinKinEnergy(0 * MeV); SetMaxKinEnergy(emax); @@ -54,31 +58,49 @@ G4ParticleHPThermalScatteringData::G4ParticleHPThermalScatteringData() element_cache = nullptr; material_cache = nullptr; - indexOfThermalElement.clear(); + if (nullptr == names) { + isInitializer = true; + indexOfThermalElement = new std::vector; + names = new G4ParticleHPThermalScatteringNames(); + dic = new std::map, G4int>; - names = new G4ParticleHPThermalScatteringNames(); + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + coherent = new std::map*>; + incoherent = new std::map*>; + inelastic = new std::map*>; + + hpmanager->RegisterThermalScatteringCoherentCrossSections(coherent); + hpmanager->RegisterThermalScatteringIncoherentCrossSections(incoherent); + hpmanager->RegisterThermalScatteringInelasticCrossSections(inelastic); + } } G4ParticleHPThermalScatteringData::~G4ParticleHPThermalScatteringData() { - clearCurrentXSData(); + if (!isInitializer) return; + + clearCurrentXSData(coherent); + clearCurrentXSData(incoherent); + clearCurrentXSData(inelastic); delete names; + delete dic; + delete indexOfThermalElement; + names = nullptr; + dic = nullptr; + indexOfThermalElement = nullptr; } G4bool G4ParticleHPThermalScatteringData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, G4int /*A*/, const G4Element* element, const G4Material* material) { - G4double eKin = dp->GetKineticEnergy(); - if (eKin > 4.0 * eV // GetMaxKinEnergy() - || eKin < 0 // GetMinKinEnergy() - || dp->GetDefinition() != G4Neutron::Neutron()) + if (dp->GetKineticEnergy() > emax) return false; - if (dic.find(std::pair((G4Material*)nullptr, element)) - != dic.end() - || dic.find(std::pair(material, element)) != dic.end()) + if (dic->find(std::pair((G4Material*)nullptr, element)) + != dic->end() + || dic->find(std::pair(material, element)) != dic->end()) return true; return false; @@ -98,82 +120,63 @@ G4double G4ParticleHPThermalScatteringData::GetIsoCrossSection(const G4DynamicPa return xs; } -void G4ParticleHPThermalScatteringData::clearCurrentXSData() +void G4ParticleHPThermalScatteringData::clearCurrentXSData(std::map*>* ptr) { - if (coherent != nullptr) { - for (auto it = coherent->cbegin(); it != coherent->cend(); ++it) { - if (it->second != nullptr) { - for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { - delete itt->second; - } + if (nullptr == ptr) return; + for (auto it = ptr->begin(); it != ptr->end(); ++it) { + auto p = it->second; + if (nullptr != p) { + for (auto itt = p->begin(); itt != p->end(); ++itt) { + delete itt->second; } - delete it->second; + delete p; } - coherent->clear(); - } - - if (incoherent != nullptr) { - for (auto it = incoherent->cbegin(); it != incoherent->cend(); ++it) { - if (it->second != nullptr) { - for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { - delete itt->second; - } - } - delete it->second; - } - incoherent->clear(); - } - - if (inelastic != nullptr) { - for (auto it = inelastic->cbegin(); it != inelastic->cend(); ++it) { - if (it->second != nullptr) { - for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { - delete itt->second; - } - } - delete it->second; - } - inelastic->clear(); } + delete ptr; } G4bool G4ParticleHPThermalScatteringData::IsApplicable(const G4DynamicParticle* aP, const G4Element* anEle) { - G4bool result = false; - - G4double eKin = aP->GetKineticEnergy(); // Check energy - if (eKin < emax) { - // Check Particle Species - if (aP->GetDefinition() == G4Neutron::Neutron()) { - // anEle is one of Thermal elements - auto ie = (G4int)anEle->GetIndex(); - for (int it : indexOfThermalElement) { - if (ie == it) return true; - } - } - } + if (aP->GetKineticEnergy() > emax) + return false; - return result; + // anEle is one of Thermal elements + auto ie = (G4int)anEle->GetIndex(); + for (auto const& it : *indexOfThermalElement) { + if (ie == it) return true; + } + return false; } void G4ParticleHPThermalScatteringData::BuildPhysicsTable(const G4ParticleDefinition& aP) { - if (&aP != G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, - "Attempt to use NeutronHP data for particles other than neutrons!!!"); + if (&aP != G4Neutron::Neutron()) { + G4ExceptionDescription ed; + ed << "Neutron thermal scattering cannot be applied to " << aP.GetParticleName(); - // std::map < std::pair < G4Material* , const G4Element* > , G4int > dic; - // - dic.clear(); - if (G4Threading::IsMasterThread()) clearCurrentXSData(); + G4Exception("G4ParticleHPThermalScatteringData::BuildPhysicsTable","hp0001", + FatalException, ed, " run stopped"); + return; + } + + // Common initialisation for all threads + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + verbose = hpmanager->GetVerboseLevel(); + + coherent = hpmanager->GetThermalScatteringCoherentCrossSections(); + incoherent = hpmanager->GetThermalScatteringIncoherentCrossSections(); + inelastic = hpmanager->GetThermalScatteringInelasticCrossSections(); + + // The initialisation is performed only in the master thread + if (!isInitializer) + return; std::map co_dic; - // Searching Nist Materials - static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr; - if (theMaterialTable == nullptr) theMaterialTable = G4Material::GetMaterialTable(); + // Searching Materials + auto const theMaterialTable = G4Material::GetMaterialTable(); std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); for (std::size_t i = 0; i < numberOfMaterials; ++i) { G4Material* material = (*theMaterialTable)[i]; @@ -191,107 +194,82 @@ void G4ParticleHPThermalScatteringData::BuildPhysicsTable(const G4ParticleDefini co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); } - dic.insert(std::pair, G4int>( + dic->insert(std::pair, G4int>( std::pair(material, element), ts_ID_of_this_geometry)); } } } // Searching TS Elements - auto theElementTable = G4Element::GetElementTable(); + auto const theElementTable = G4Element::GetElementTable(); std::size_t numberOfElements = G4Element::GetNumberOfElements(); for (std::size_t i = 0; i < numberOfElements; ++i) { const G4Element* element = (*theElementTable)[i]; if (names->IsThisThermalElement(element->GetName())) { - if (names->IsThisThermalElement(element->GetName())) { - G4int ts_ID_of_this_geometry; - G4String ts_ndl_name = names->GetTS_NDL_Name(element->GetName()); - if (co_dic.find(ts_ndl_name) != co_dic.cend()) { - ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; - } - else { - ts_ID_of_this_geometry = (G4int)co_dic.size(); - co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); - } + G4int ts_ID_of_this_geometry; + const G4String ts_ndl_name = names->GetTS_NDL_Name(element->GetName()); + if (co_dic.find(ts_ndl_name) != co_dic.cend()) { + ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; + } + else { + ts_ID_of_this_geometry = (G4int)co_dic.size(); + co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); + } - dic.insert(std::pair, G4int>( - std::pair((G4Material*)nullptr, element), + dic->insert(std::pair, G4int>( + std::pair((G4Material*)nullptr, element), ts_ID_of_this_geometry)); + } + } + + if (0 < verbose) { + G4cout << "##T## Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements " + "are registered for " << dic->size() << " materials." << G4endl; + + if (dic->empty()) return; + + for (const auto& it : *dic) { + if (it.first.first != nullptr) { + G4cout << " Material " << it.first.first->GetName() << " - Element " + << it.first.second->GetName() << ", internal thermal scattering id " << it.second + << G4endl; + } + else { + G4cout << " Element " << it.first.second->GetName() << ", internal thermal scattering id " + << it.second << G4endl; } } + G4cout << G4endl; } + + // Read Cross Section Data files + const G4String dirName = hpmanager->GetNeutronHPPath() + "/ThermalScattering"; - G4cout << G4endl; - G4cout << "Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements " - "are registered." - << G4endl; - for (const auto& it : dic) { - if (it.first.first != nullptr) { - G4cout << "Material " << it.first.first->GetName() << " - Element " - << it.first.second->GetName() << ", internal thermal scattering id " << it.second - << G4endl; - } - else { - G4cout << "Element " << it.first.second->GetName() << ", internal thermal scattering id " - << it.second << G4endl; - } - } - G4cout << G4endl; + G4String ndl_filename; + G4String full_name; - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + for (const auto& it : co_dic) { + ndl_filename = it.first; + G4int ts_ID = it.second; - coherent = hpmanager->GetThermalScatteringCoherentCrossSections(); - incoherent = hpmanager->GetThermalScatteringIncoherentCrossSections(); - inelastic = hpmanager->GetThermalScatteringInelasticCrossSections(); + // Coherent + full_name = dirName + "/Coherent/CrossSection/" + ndl_filename; + auto coh_amapTemp_EnergyCross = readData(full_name); + coherent->insert(std::pair*>( + ts_ID, coh_amapTemp_EnergyCross)); - if (G4Threading::IsMasterThread()) { - if (coherent == nullptr) - coherent = new std::map*>; - if (incoherent == nullptr) - incoherent = new std::map*>; - if (inelastic == nullptr) - inelastic = new std::map*>; - - // Read Cross Section Data files - - G4String dirName; - if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) - throw G4HadronicException( - __FILE__, __LINE__, - "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - G4String baseName = G4FindDataDir("G4NEUTRONHPDATA"); - - dirName = baseName + "/ThermalScattering"; - - G4String ndl_filename; - G4String full_name; - - for (const auto& it : co_dic) { - ndl_filename = it.first; - G4int ts_ID = it.second; - - // Coherent - full_name = dirName + "/Coherent/CrossSection/" + ndl_filename; - auto coh_amapTemp_EnergyCross = readData(full_name); - coherent->insert(std::pair*>( - ts_ID, coh_amapTemp_EnergyCross)); - - // Incoherent - full_name = dirName + "/Incoherent/CrossSection/" + ndl_filename; - auto incoh_amapTemp_EnergyCross = readData(full_name); - incoherent->insert(std::pair*>( + // Incoherent + full_name = dirName + "/Incoherent/CrossSection/" + ndl_filename; + auto incoh_amapTemp_EnergyCross = readData(full_name); + incoherent->insert(std::pair*>( ts_ID, incoh_amapTemp_EnergyCross)); - // Inelastic - full_name = dirName + "/Inelastic/CrossSection/" + ndl_filename; - auto inela_amapTemp_EnergyCross = readData(full_name); - inelastic->insert(std::pair*>( + // Inelastic + full_name = dirName + "/Inelastic/CrossSection/" + ndl_filename; + auto inela_amapTemp_EnergyCross = readData(full_name); + inelastic->insert(std::pair*>( ts_ID, inela_amapTemp_EnergyCross)); - } - hpmanager->RegisterThermalScatteringCoherentCrossSections(coherent); - hpmanager->RegisterThermalScatteringIncoherentCrossSections(incoherent); - hpmanager->RegisterThermalScatteringInelasticCrossSections(inelastic); } } @@ -319,28 +297,26 @@ G4ParticleHPThermalScatteringData::readData(const G4String& full_name) return aData; } -void G4ParticleHPThermalScatteringData::DumpPhysicsTable(const G4ParticleDefinition& aP) -{ - if (&aP != G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, - "Attempt to use NeutronHP data for particles other than neutrons!!!"); -} +void G4ParticleHPThermalScatteringData::DumpPhysicsTable(const G4ParticleDefinition&) +{} G4double G4ParticleHPThermalScatteringData::GetCrossSection(const G4DynamicParticle* aP, const G4Element* anE, const G4Material* aM) { G4double result = 0; - G4int ts_id = getTS_ID(aM, anE); - + if (ts_id == -1) return result; G4double aT = aM->GetTemperature(); - G4double Xcoh = GetX(aP, aT, coherent->find(ts_id)->second); - G4double Xincoh = GetX(aP, aT, incoherent->find(ts_id)->second); - G4double Xinela = GetX(aP, aT, inelastic->find(ts_id)->second); + auto u = coherent->find(ts_id); + G4double Xcoh = (u != coherent->end()) ? GetX(aP, aT, u->second) : 0.0; + auto v = incoherent->find(ts_id); + G4double Xincoh = (v != incoherent->end()) ? GetX(aP, aT, v->second) : 0.0; + auto w = inelastic->find(ts_id); + G4double Xinela = (w != inelastic->end()) ? GetX(aP, aT, w->second) : 0.0; result = Xcoh + Xincoh + Xinela; @@ -353,8 +329,12 @@ G4double G4ParticleHPThermalScatteringData::GetInelasticCrossSection(const G4Dyn { G4double result = 0; G4int ts_id = getTS_ID(aM, anE); + if (ts_id == -1) return result; G4double aT = aM->GetTemperature(); - result = GetX(aP, aT, inelastic->find(ts_id)->second); + auto ptr = inelastic->find(ts_id); + if (ptr != inelastic->end()) { + result = GetX(aP, aT, ptr->second); + } return result; } @@ -364,8 +344,10 @@ G4double G4ParticleHPThermalScatteringData::GetCoherentCrossSection(const G4Dyna { G4double result = 0; G4int ts_id = getTS_ID(aM, anE); + if (ts_id == -1) return result; G4double aT = aM->GetTemperature(); - result = GetX(aP, aT, coherent->find(ts_id)->second); + auto u = coherent->find(ts_id); + if (u != coherent->end()) { result = GetX(aP, aT, u->second); } return result; } @@ -375,71 +357,65 @@ G4double G4ParticleHPThermalScatteringData::GetIncoherentCrossSection(const G4Dy { G4double result = 0; G4int ts_id = getTS_ID(aM, anE); + if (ts_id == -1) return result; G4double aT = aM->GetTemperature(); - result = GetX(aP, aT, incoherent->find(ts_id)->second); + auto u = incoherent->find(ts_id); + if (u != incoherent->end()) { result = GetX(aP, aT, u->second); } return result; } G4int G4ParticleHPThermalScatteringData::getTS_ID(const G4Material* material, const G4Element* element) { - G4int result = -1; - if (dic.find(std::pair((G4Material*)nullptr, element)) - != dic.end()) - return dic.find(std::pair((G4Material*)nullptr, element)) - ->second; - if (dic.find(std::pair(material, element)) != dic.end()) - return dic.find(std::pair(material, element))->second; - return result; + auto it = dic->find(std::pair((G4Material*)nullptr, element)); + if (it != dic->end()) { return it->second; } + auto jt = dic->find(std::pair(material, element)); + if (jt != dic->end()) { return jt->second; } + return -1; } G4double G4ParticleHPThermalScatteringData:: GetX(const G4DynamicParticle* aP, G4double aT, std::map* amapTemp_EnergyCross) { - G4double result = 0; - if (amapTemp_EnergyCross->empty()) return result; + if (amapTemp_EnergyCross->empty()) + return 0.0; G4double eKinetic = aP->GetKineticEnergy(); + auto it_begin = amapTemp_EnergyCross->begin(); + G4double Tmin = it_begin->first; + std::size_t n = amapTemp_EnergyCross->size(); - if (amapTemp_EnergyCross->size() == 1) { - if (std::fabs(aT - amapTemp_EnergyCross->cbegin()->first) / amapTemp_EnergyCross->begin()->first - > 0.1) - { - G4cout - << "G4ParticleHPThermalScatteringData:: The temperature of material (" << aT / kelvin - << "K) is different more than 10% from temperature of thermal scattering file expected (" - << amapTemp_EnergyCross->begin()->first << "K). Result may not be reliable." << G4endl; - } - result = amapTemp_EnergyCross->begin()->second->GetXsec(eKinetic); - return result; + // special cases + if (n == 1 || aT <= Tmin) { + return it_begin->second->GetXsec(eKinetic); } - auto it = amapTemp_EnergyCross->cbegin(); - for (it = amapTemp_EnergyCross->cbegin(); it != amapTemp_EnergyCross->cend(); ++it) { - if (aT < it->first) break; - } - if (it == amapTemp_EnergyCross->cbegin()) { - ++it; // lower than the first - } - else if (it == amapTemp_EnergyCross->cend()) { - --it; // upper than the last + // high temperature + auto it_end = amapTemp_EnergyCross->end(); + --it_end; + G4double Tmax = it_end->first; + if (aT >= Tmax) { + return it_end->second->GetXsec(eKinetic); + } + + // linear interpolation between two temperature values + ++it_begin; + auto it = it_begin; + G4double TH = Tmin; + for (;;) { + TH = it->first; + if (aT <= TH || it == it_end) break; + ++it; } - G4double TH = it->first; G4double XH = it->second->GetXsec(eKinetic); - - if (it != amapTemp_EnergyCross->cbegin()) --it; + --it; G4double TL = it->first; + if (TH == TL) return XH; + G4double XL = it->second->GetXsec(eKinetic); - - if (TH == TL) throw G4HadronicException(__FILE__, __LINE__, "Thermal Scattering Data Error!"); - - G4double T = aT; - G4double X = (XH - XL) / (TH - TL) * (T - TL) + XL; - result = X; - - return result; + return (aT - TL) * (XH - XL) / (TH - TL) + XL; } void G4ParticleHPThermalScatteringData::AddUserThermalScatteringFile(const G4String& nameG4Element, diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc index cd2af24f4a..755a0f0dbc 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc @@ -44,40 +44,10 @@ G4ParticleHPThermalScatteringNames::G4ParticleHPThermalScatteringNames() { - // -------------------------------------------------------------------------------------------------------------------------- - // Old Geant4 naming - before 23/03/2022 - TSL linked to ENDF/BVII.1 nuclear cross-section - // G4NDL4.5 - // -------------------------------------------------------------------------------------------------------------------------- - /*names.insert ( std::pair < G4String , G4String > ( "TS_Aluminium_Metal" , "al_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Beryllium_Metal" , "be_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Be_of_Beryllium_Oxide" , "be_beo" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite" , "graphite" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Heavy_Water" , "d_heavy_water" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Water" , "h_water" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Zirconium_Hydride" , "h_zrh" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Polyethylene" , "h_polyethylene" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Iron_Metal" , "fe_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Uranium_Dioxide" , "o_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Beryllium_Oxide" , "o_beo" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U_of_Uranium_Dioxide" , "u_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U235_of_Uranium_Dioxide" , "u235_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U238_of_Uranium_Dioxide" , "u238_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Zr_of_Zirconium_Hydride" , "zr_zrh" ) ); - //// ENDF-B71 - - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Para_Hydrogen" , "h_para_h2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Ortho_Hydrogen" , "h_ortho_h2" ) ); - - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Para_Deuterium" , "d_para_d2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Ortho_Deuterium" , "d_ortho_d2" ) ); - - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Liquid_Methane", "h_l_ch4" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Solid_Methane", "h_s_ch4" ) ); */ - - // -------------------------------------------------------------------------------------------------------------------------- + // -------------------------------------------------------------------------------------------- // New Geant4 naming - after 23/03/2022 - TSL linked to JEFF-3.3 nuclear cross-section G4NDL4.6 - // -------------------------------------------------------------------------------------------------------------------------- + // -------------------------------------------------------------------------------------------- /// 23/03/2022 - Added by L. Thulliez (CEA-Saclay) names.insert( std::pair("TS_Benzene", "h_benzen")); /// ENDF/BVIII.0 and ENDF/BVII.1 diff --git a/source/processes/hadronic/models/pre_equilibrium/History b/source/processes/hadronic/models/pre_equilibrium/History index 09c6605cc2..a6e5a55fd2 100644 --- a/source/processes/hadronic/models/pre_equilibrium/History +++ b/source/processes/hadronic/models/pre_equilibrium/History @@ -6,6 +6,33 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-04 Vladimir Ivanchenko (hadr-pre-V11-03-04) +- G4PreCompoundFragment, G4PreCompoundNucleon, G4PreCompoundIon - updated + computation of inverse x-section, added factor to x-section proposed by + Dostorovsy. + +## 2025-05-22 Vladimir Ivanchenko (hadr-pre-V11-03-03) +- G4PreCompoundFragment, G4PreCompoundProton, G4PreCompoundDeuteron, + G4PreCompoundTriton, G4PreCompoundHe3, G4PreCompoundAlpha - use new + utility G4DeexPrecoUtility. + +## 2025-03-05 Vladimir Ivanchenko (hadr-pre-V11-03-02) +- G4VPreCompoundFragment, G4PreCompoundFragment, G4HETCFragment, - use the + new utility class G4VSIntegration, which allows to simplify code, + results are practically not affected. + +## 2025-02-15 Vladimir Ivanchenko (hadr-pre-V11-03-01) +- G4PreCompoundFragment - updated algorithms of integration of probabilities + and sampling of final state (expected more accurate spectra of particles). + +## 2025-01-26 Vladimir Ivanchenko (hadr-pre-V11-03-00) +- G4PreCompoundModel, G4PreCompoundTransition, G4PreCompoundEmission - introduced + verbose flag and extended printout needed to debug, removed old commented + prinout lines; added an option to use alternative precompound models, + which may be done via configuration without change of interface to consumer code. +- G4PreCompoundInterface, G4PreCompoundTransitionInt, G4PreCompoundEmissionInt - + new classes with alternative precompound model. + ## 2024-09-09 Vladimir Ivanchenko (hadr-pre-V11-02-03) - G4PreCompoundFragment, G4VPreCompoundFragment - use G4InterfaceToXS class instead of obsolete G4XSectionXS diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmission.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmission.hh index 385f46d043..64c26d3e46 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmission.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmission.hh @@ -96,6 +96,7 @@ private: G4bool fUseAngularGenerator; G4int fModelID; + G4int fVerbose{1}; }; inline G4double diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmissionInt.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmissionInt.hh new file mode 100644 index 0000000000..11014dc568 --- /dev/null +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundEmissionInt.hh @@ -0,0 +1,116 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// GEANT4 Class header file +// +// File name: G4PreCompoundEmissionInt +// +// Author: V.Ivantchenko, 25 January 2025 +// +// Class Description: +// Model implementation for pre-equilibrium emission of a light fragment +// from an excited nucleus. It is an alternative to the default model. +// + +#ifndef G4PreCompoundEmissionInt_h +#define G4PreCompoundEmissionInt_h 1 + +#include "G4VPreCompoundFragment.hh" +#include "G4ReactionProduct.hh" +#include "G4Fragment.hh" +#include "G4PreCompoundFragmentVector.hh" + +class G4VPreCompoundEmissionFactory; +class G4Pow; +class G4NuclearLevelData; + +class G4PreCompoundEmissionInt +{ +public: + + explicit G4PreCompoundEmissionInt(G4int verb); + + ~G4PreCompoundEmissionInt(); + + void SetDefaultModel(); + + void SetHETCModel(); + + G4ReactionProduct* PerformEmission(G4Fragment& aFragment); + + inline G4double GetTotalProbability(const G4Fragment& aFragment); + + inline void SetOPTxs(G4int); + + inline void UseSICB(G4bool); + + G4PreCompoundEmissionInt(const G4PreCompoundEmissionInt& right) = delete; + const G4PreCompoundEmissionInt& operator= + (const G4PreCompoundEmissionInt& right) = delete; + G4bool operator==(const G4PreCompoundEmissionInt& right) const = delete; + G4bool operator!=(const G4PreCompoundEmissionInt& right) const = delete; + +private: + + void AngularDistribution(G4VPreCompoundFragment* theFragment, + const G4Fragment& aFragment, + G4double kineticEnergy); + + G4double rho(G4int p, G4int h, G4double gg, + G4double E, G4double Ef) const; + + G4Pow* g4calc; + G4NuclearLevelData* fNuclData; + + G4PreCompoundFragmentVector* theFragmentsVector{nullptr}; + G4VPreCompoundEmissionFactory* theFragmentsFactory{nullptr}; + + // Momentum of emitted fragment + G4ThreeVector theFinalMomentum; + G4double fFermiEnergy; + + G4bool fUseAngularGenerator; + + G4int fModelID; + G4int fVerbose; +}; + +inline G4double +G4PreCompoundEmissionInt::GetTotalProbability(const G4Fragment& aFragment) +{ + return theFragmentsVector->CalculateProbabilities(aFragment); +} + +inline void G4PreCompoundEmissionInt::SetOPTxs(G4int opt) +{ + theFragmentsVector->SetOPTxs(opt); +} + +inline void G4PreCompoundEmissionInt::UseSICB(G4bool use) +{ + theFragmentsVector->UseSICB(use); +} + +#endif diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundFragment.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundFragment.hh index 205d313987..158a4382c5 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundFragment.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundFragment.hh @@ -49,18 +49,10 @@ public: ~G4PreCompoundFragment() override = default; - // ================================================ - // Methods for calculating the emission probability - // ================================================ - - // Calculates the total (integrated over kinetic energy) emission - // probability of a fragment - G4double CalcEmissionProbability(const G4Fragment& aFragment) override; - - G4double SampleKineticEnergy(const G4Fragment& aFragment) override; - + // inverse cross section for a channel G4double CrossSection(G4double ekin); + // the value of the recent inverse cross section for a channel G4double RecentXS() const { return recentXS; }; G4PreCompoundFragment(const G4PreCompoundFragment &right) = delete; @@ -69,25 +61,12 @@ public: G4bool operator==(const G4PreCompoundFragment &right) const = delete; G4bool operator!=(const G4PreCompoundFragment &right) const = delete; -protected: - - virtual G4double - ProbabilityDistributionFunction(G4double ekin, - const G4Fragment & aFragment) = 0; - private: - // This method performs integration for probability function over - // fragment kinetic energy - G4double IntegrateEmissionProbability(G4double low, G4double up, - const G4Fragment & aFragment); - G4double GetOpt0(G4double ekin) const; G4int lastA{0}; - G4double muu{0.0}; - G4double probmax{0.0}; G4double recentXS{0.0}; }; diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundInterface.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundInterface.hh new file mode 100644 index 0000000000..18caba004d --- /dev/null +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundInterface.hh @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// GEANT4 Class header file +// +// File name: G4PreCompoundInterface +// +// Author: V.Ivantchenko, 20 January 2025 +// +// Class Description: +// Model implementation for pre-equilibrium decay model. +// It is an alternative to the default model. +// + +#ifndef G4PreCompoundInterface_h +#define G4PreCompoundInterface_h 1 + +#include "G4VPreCompoundModel.hh" +#include "G4Fragment.hh" +#include "G4ReactionProductVector.hh" +#include "G4ReactionProduct.hh" +#include "G4ExcitationHandler.hh" + +class G4PreCompoundEmissionInt; +class G4VPreCompoundTransitions; +class G4NuclearLevelData; +class G4ParticleDefinition; + +class G4PreCompoundInterface : public G4VPreCompoundModel +{ +public: + + G4PreCompoundInterface(); + + ~G4PreCompoundInterface() override; + + G4ReactionProductVector* DeExcite(G4Fragment& aFragment) override; + + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void InitialiseModel() override; + + void ModelDescription(std::ostream& outFile) const override; + void DeExciteModelDescription(std::ostream&) const override; + + G4PreCompoundInterface(const G4PreCompoundInterface &) = delete; + const G4PreCompoundInterface& operator= + (const G4PreCompoundInterface &right) = delete; + G4bool operator==(const G4PreCompoundInterface &right) const = delete; + G4bool operator!=(const G4PreCompoundInterface &right) const = delete; + +private: + + void BreakUpFragment(G4Fragment&, G4ReactionProductVector*); + + inline + void PerformEquilibriumEmission(const G4Fragment&, + G4ReactionProductVector*) const; + + G4PreCompoundEmissionInt* theEmission{nullptr}; + G4VPreCompoundTransitions* theTransition{nullptr}; + G4NuclearLevelData* fNuclData{nullptr}; + + G4double fLowLimitExc{0.0}; + G4double fHighLimitExc{DBL_MAX}; + + G4bool isActive{true}; + G4bool isInitialised{false}; + + G4int minZ{9}; + G4int minA{17}; + G4int fVerbose{1}; +}; + +inline void G4PreCompoundInterface::PerformEquilibriumEmission( + const G4Fragment& aFragment, + G4ReactionProductVector* result) const +{ + auto deexResult = GetExcitationHandler()->BreakItUp(aFragment); + for (auto & frag : *deexResult) { result->push_back(std::move(frag)); } + delete deexResult; +} + +#endif + diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundModel.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundModel.hh index 0aa337dde6..da491cdeb1 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundModel.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundModel.hh @@ -28,8 +28,8 @@ // Class Description // Model implementation for pre-equilibrium decay models in geant4. // To be used in your physics list, in case you neeed this kind of physics. -// Can be used as a stand-allone model, but also in conjunction with an intra-nuclear -// transport, or any of the string-parton models. +// Can be used as a stand-allone model, but also in conjunction with +// an intra-nuclear transport, or any of the string-parton models. // Class Description - End // // Modified: @@ -54,6 +54,7 @@ #include "G4ReactionProduct.hh" #include "G4ExcitationHandler.hh" +class G4PreCompoundInterface; class G4PreCompoundEmission; class G4VPreCompoundTransitions; class G4NuclearLevelData; @@ -65,19 +66,24 @@ public: explicit G4PreCompoundModel(G4ExcitationHandler* ptr = nullptr); - virtual ~G4PreCompoundModel(); + ~G4PreCompoundModel() override; - virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & thePrimary, - G4Nucleus & theNucleus) final; + G4HadFinalState* ApplyYourself(const G4HadProjectile& thePrimary, + G4Nucleus& theNucleus) override; - virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment) final; + G4ReactionProductVector* DeExcite(G4Fragment& aFragment) override; - virtual void BuildPhysicsTable(const G4ParticleDefinition&) final; + void BuildPhysicsTable(const G4ParticleDefinition&) override; - virtual void InitialiseModel() final; + void InitialiseModel() override; - virtual void ModelDescription(std::ostream& outFile) const final; - virtual void DeExciteModelDescription(std::ostream& outFile) const final; + void ModelDescription(std::ostream& outFile) const override; + void DeExciteModelDescription(std::ostream& outFile) const override; + + G4PreCompoundModel(const G4PreCompoundModel &) = delete; + const G4PreCompoundModel& operator=(const G4PreCompoundModel &right) = delete; + G4bool operator==(const G4PreCompoundModel &right) const = delete; + G4bool operator!=(const G4PreCompoundModel &right) const = delete; private: @@ -85,39 +91,37 @@ private: void PerformEquilibriumEmission(const G4Fragment & aFragment, G4ReactionProductVector * result) const; - G4PreCompoundModel(const G4PreCompoundModel &) = delete; - const G4PreCompoundModel& operator=(const G4PreCompoundModel &right) = delete; - G4bool operator==(const G4PreCompoundModel &right) const = delete; - G4bool operator!=(const G4PreCompoundModel &right) const = delete; - - G4PreCompoundEmission* theEmission = nullptr; - G4VPreCompoundTransitions* theTransition = nullptr; - G4NuclearLevelData* fNuclData = nullptr; + G4PreCompoundInterface* fInterface{nullptr}; + G4PreCompoundEmission* theEmission{nullptr}; + G4VPreCompoundTransitions* theTransition{nullptr}; + G4NuclearLevelData* fNuclData{nullptr}; const G4ParticleDefinition* proton; const G4ParticleDefinition* neutron; - G4double fLowLimitExc = 0.0; - G4double fHighLimitExc = DBL_MAX; + G4double fLowLimitExc{0.0}; + G4double fHighLimitExc{DBL_MAX}; + G4double fFermiBreakUpExc{DBL_MAX}; - G4bool useSCO = false; - G4bool isInitialised = false; - G4bool isActive = true; + G4bool useSCO{false}; + G4bool isInitialised{false}; + G4bool isActive{true}; + G4bool usePrecoInterface{false}; - G4int minZ = 3; - G4int minA = 5; - G4int modelID = -1; + G4int minZ{3}; + G4int minA{5}; + G4int modelID{-1}; + G4int fVerbose{1}; G4HadFinalState theResult; }; inline void G4PreCompoundModel::PerformEquilibriumEmission( - const G4Fragment & aFragment, - G4ReactionProductVector * result) const + const G4Fragment& aFragment, + G4ReactionProductVector* result) const { - G4ReactionProductVector* deexResult = - GetExcitationHandler()->BreakItUp(aFragment); - result->insert(result->end(),deexResult->begin(), deexResult->end()); + auto deexResult = GetExcitationHandler()->BreakItUp(aFragment); + for (auto & frag : *deexResult) { result->push_back(std::move(frag)); } delete deexResult; } diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitions.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitions.hh index 5cde5fff5e..e7182aeb4f 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitions.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitions.hh @@ -72,6 +72,7 @@ private: G4double FermiEnergy; G4double r0; // Nuclear radius + G4int fVerbose{1}; }; #endif diff --git a/examples/extended/parallel/TBB/B2b/include/B2bDetectorConstruction.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitionsInt.hh similarity index 50% rename from examples/extended/parallel/TBB/B2b/include/B2bDetectorConstruction.hh rename to source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitionsInt.hh index e476b19f61..58d4e96732 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2bDetectorConstruction.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4PreCompoundTransitionsInt.hh @@ -23,67 +23,61 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// GEANT4 Class header file +// +// File name: G4PreCompoundTransitionInt +// +// Author: V.Ivantchenko, 25 January 2025 +// +// Class Description: +// Model implementation for pre-equilibrium transition inside a nucleus. +// It is an alternative to the default model. // -/// \file B2bDetectorConstruction.hh -/// \brief Definition of the B2bDetectorConstruction class -#ifndef B2bDetectorConstruction_h -#define B2bDetectorConstruction_h 1 +#ifndef G4PreCompoundTransitionsInt_h +#define G4PreCompoundTransitionsInt_h 1 -#include "tls.hh" +// Compute transition probailities: +// TransitionProb1 => probability of transition with \Delta N = +1 +// number of excitons will be increased on 2 +// TransitionProb2 => probability of transition with \Delta N = -1 +// number of excitons will be decreased on 2 +// TransitionProb3 => probability of transition with \Delta N = 0 +// number of excitons will be the same -#include "G4VUserDetectorConstruction.hh" +#include "G4VPreCompoundTransitions.hh" #include "globals.hh" -class G4VPhysicalVolume; -class G4LogicalVolume; -class G4Material; -class G4UserLimits; -class G4GlobalMagFieldMessenger; +class G4ParticleDefinition; +class G4Fragment; +class G4NuclearLevelData; -class B2bDetectorMessenger; - -/// Detector construction class to define materials, geometry -/// and global uniform magnetic field. - -class B2bDetectorConstruction : public G4VUserDetectorConstruction +class G4PreCompoundTransitionsInt : public G4VPreCompoundTransitions { - public: - B2bDetectorConstruction(); - virtual ~B2bDetectorConstruction(); +public: - public: - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4PreCompoundTransitionsInt(G4int verb); - // Set methods - void SetTargetMaterial(G4String); - void SetChamberMaterial(G4String); - void SetMaxStep(G4double); - void SetCheckOverlaps(G4bool); + ~G4PreCompoundTransitionsInt() override = default; - private: - // methods - void DefineMaterials(); - G4VPhysicalVolume* DefineVolumes(); + G4double CalculateProbability(const G4Fragment & aFragment) override; + + void PerformTransition(G4Fragment & aFragment) override; + + G4PreCompoundTransitionsInt(const G4PreCompoundTransitionsInt&) = delete; + const G4PreCompoundTransitionsInt& operator= + (const G4PreCompoundTransitionsInt& right) = delete; + G4bool operator==(const G4PreCompoundTransitionsInt& right) const = delete; + G4bool operator!=(const G4PreCompoundTransitionsInt& right) const = delete; - // data members - G4LogicalVolume* fLogicTarget; // pointer to the logical Target - G4LogicalVolume* fLogicChamber; // pointer to the logical Chamber +private: - G4Material* fTargetMaterial; // pointer to the target material - G4Material* fChamberMaterial; // pointer to the chamber material + const G4ParticleDefinition* proton; + G4NuclearLevelData* fNuclData; - G4UserLimits* fStepLimit; // pointer to user step limits - - B2bDetectorMessenger* fMessenger; // detector messenger - - static G4ThreadLocal G4GlobalMagFieldMessenger* fMagFieldMessenger; - // magnetic field messenger - - G4bool fCheckOverlaps; // option to activate checking of volumes overlaps + G4double FermiEnergy; + G4double r0; // Nuclear radius + G4int fVerbose; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4VPreCompoundFragment.hh b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4VPreCompoundFragment.hh index d57c0042ba..63c2734da8 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4VPreCompoundFragment.hh +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/include/G4VPreCompoundFragment.hh @@ -47,43 +47,34 @@ #include "G4Fragment.hh" #include "G4ReactionProduct.hh" #include "G4Pow.hh" +#include "G4VSIntegration.hh" class G4NuclearLevelData; class G4DeexPrecoParameters; class G4VCoulombBarrier; class G4InterfaceToXS; -class G4VPreCompoundFragment +class G4VPreCompoundFragment : G4VSIntegration { public: explicit G4VPreCompoundFragment(const G4ParticleDefinition*, G4VCoulombBarrier*); - virtual ~G4VPreCompoundFragment(); - - friend std::ostream& - operator<<(std::ostream&, const G4VPreCompoundFragment*); - friend std::ostream& - operator<<(std::ostream&, const G4VPreCompoundFragment&); - - // ===================== - // Pure Virtual methods - // ===================== - + ~G4VPreCompoundFragment() override; + // Run time initialization method G4bool Initialize(const G4Fragment& aFragment); - // Methods for calculating the emission probability - // ------------------------------------------------ - // Calculates the total (integrated over kinetic energy) emission // probability of a fragment - virtual G4double CalcEmissionProbability(const G4Fragment&) = 0; + virtual G4double CalcEmissionProbability(const G4Fragment&); // sample kinetic energy of emitted fragment - virtual G4double SampleKineticEnergy(const G4Fragment&) = 0; + virtual G4double SampleKineticEnergy(const G4Fragment&); + G4double ProbabilityDensityFunction(G4double energy) override; + inline G4ReactionProduct* GetReactionProduct() const; G4int GetA() const { return theA; } @@ -116,6 +107,11 @@ public: //for superimposed Coulomb Barrier for inverse cross sections void UseSICB(G4bool use) { useSICB = use; } + friend std::ostream& + operator<<(std::ostream&, const G4VPreCompoundFragment*); + friend std::ostream& + operator<<(std::ostream&, const G4VPreCompoundFragment&); + G4VPreCompoundFragment(const G4VPreCompoundFragment &right) = delete; const G4VPreCompoundFragment& operator= (const G4VPreCompoundFragment &right) = delete; @@ -124,6 +120,10 @@ public: protected: + virtual G4double + ProbabilityDistributionFunction(G4double, const G4Fragment&) + { return 0.0; }; + virtual G4double GetAlpha() const = 0; virtual G4double GetBeta() const { return -theCoulombBarrier; } @@ -132,6 +132,7 @@ protected: G4DeexPrecoParameters* theParameters; G4Pow* g4calc; G4InterfaceToXS* fXSection{nullptr}; + const G4Fragment* pFragment{nullptr}; G4int theA; G4int theZ; diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/sources.cmake b/source/processes/hadronic/models/pre_equilibrium/exciton_model/sources.cmake index 3ddfbd69c4..d48cf3490d 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/sources.cmake +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/sources.cmake @@ -19,15 +19,18 @@ geant4_add_module(G4had_preequ_exciton G4PreCompoundDeuteron.hh G4PreCompoundEmission.hh G4PreCompoundEmissionFactory.hh + G4PreCompoundEmissionInt.hh G4PreCompoundFragment.hh G4PreCompoundFragmentVector.hh G4PreCompoundHe3.hh + G4PreCompoundInterface.hh G4PreCompoundIon.hh G4PreCompoundModel.hh G4PreCompoundNeutron.hh G4PreCompoundNucleon.hh G4PreCompoundProton.hh G4PreCompoundTransitions.hh + G4PreCompoundTransitionsInt.hh G4PreCompoundTriton.hh G4VPreCompoundEmissionFactory.hh G4VPreCompoundFragment.hh @@ -49,15 +52,18 @@ geant4_add_module(G4had_preequ_exciton G4PreCompoundDeuteron.cc G4PreCompoundEmission.cc G4PreCompoundEmissionFactory.cc + G4PreCompoundEmissionInt.cc G4PreCompoundFragment.cc G4PreCompoundFragmentVector.cc G4PreCompoundHe3.cc + G4PreCompoundInterface.cc G4PreCompoundIon.cc G4PreCompoundModel.cc G4PreCompoundNeutron.cc G4PreCompoundNucleon.cc G4PreCompoundProton.cc G4PreCompoundTransitions.cc + G4PreCompoundTransitionsInt.cc G4PreCompoundTriton.cc G4VPreCompoundEmissionFactory.cc G4VPreCompoundFragment.cc @@ -70,6 +76,7 @@ geant4_module_link_libraries(G4had_preequ_exciton G4hadronic_mgt G4hadronic_util G4hepgeometry + G4hepnumerics G4heprandom G4partman PRIVATE diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4HETCFragment.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4HETCFragment.cc index e6de6a2519..00c4715c4c 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4HETCFragment.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4HETCFragment.cc @@ -48,7 +48,8 @@ G4double G4HETCFragment::CalcEmissionProbability(const G4Fragment& fp) if (GetEnergyThreshold() <= 0.0) { theEmissionProbability = 0.0; return 0.0; - } + } + pFragment = &fp; // Coulomb barrier is the lower limit // of integration over kinetic energy theEmissionProbability = diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundAlpha.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundAlpha.cc index 1d9a639b6d..6e92897282 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundAlpha.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundAlpha.cc @@ -43,6 +43,7 @@ #include "G4PreCompoundAlpha.hh" #include "G4CoulombBarrier.hh" #include "G4Alpha.hh" +#include "G4DeexPrecoUtility.hh" G4PreCompoundAlpha::G4PreCompoundAlpha() : G4PreCompoundIon(G4Alpha::Alpha(), new G4CoulombBarrier(4, 2)) @@ -51,7 +52,7 @@ G4PreCompoundAlpha::G4PreCompoundAlpha() G4double G4PreCompoundAlpha::FactorialFactor(G4int N, G4int P) const { return static_cast(((N-4)*(P-3)*(N-3)*(P-2))*((N-2)*(P-1)*(N-1)*P)) - /144.0; + /12.0; } G4double G4PreCompoundAlpha::CoalescenceFactor(G4int A) const @@ -61,24 +62,7 @@ G4double G4PreCompoundAlpha::CoalescenceFactor(G4int A) const G4double G4PreCompoundAlpha::GetAlpha() const { - G4double C = 0.0; - if (theFragZ <= 30) - { - C = 0.10; - } - else if (theFragZ <= 50) - { - C = 0.1 - (theFragZ-30)*0.001; - } - else if (theFragZ < 70) - { - C = 0.08 - (theFragZ-50)*0.001; - } - else - { - C = 0.06; - } - return 1.0+C; + return 1.0 + G4DeexPrecoUtility::AlphaCValue(theResZ); } G4double G4PreCompoundAlpha::GetRj(G4int nParticles, G4int nCharged) const diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundDeuteron.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundDeuteron.cc index ae4321e32e..ffbb02bf90 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundDeuteron.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundDeuteron.cc @@ -42,6 +42,7 @@ #include "G4PreCompoundDeuteron.hh" #include "G4CoulombBarrier.hh" #include "G4Deuteron.hh" +#include "G4DeexPrecoUtility.hh" G4PreCompoundDeuteron::G4PreCompoundDeuteron() : G4PreCompoundIon(G4Deuteron::Deuteron(), new G4CoulombBarrier(2, 1)) @@ -69,15 +70,5 @@ G4double G4PreCompoundDeuteron::GetRj(G4int nParticles, G4int nCharged) const G4double G4PreCompoundDeuteron::GetAlpha() const { - G4double C = 0.0; - if (theFragZ >= 70) - { - C = 0.10; - } - else - { - C = ((((0.15417e-06*theFragZ) - 0.29875e-04)*theFragZ - + 0.21071e-02)*theFragZ - 0.66612e-01)*theFragZ + 0.98375; - } - return 1.0 + 0.5*C; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(theResZ)*0.5; } diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmission.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmission.cc index ef988b072c..923c786f89 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmission.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmission.cc @@ -103,6 +103,7 @@ void G4PreCompoundEmission::SetHETCModel() G4ReactionProduct* G4PreCompoundEmission::PerformEmission(G4Fragment & aFragment) { + G4ReactionProduct* res = nullptr; // Choose a Fragment for emission G4VPreCompoundFragment * thePreFragment = theFragmentsVector->ChooseFragment(); @@ -113,11 +114,9 @@ G4PreCompoundEmission::PerformEmission(G4Fragment & aFragment) << "while trying to de-excite\n" << aFragment << G4endl; throw G4HadronicException(__FILE__, __LINE__, ""); + return res; } - //G4cout << "Chosen fragment: " << G4endl; - //G4cout << *thePreFragment << G4endl; - // Kinetic Energy of emitted fragment G4double kinEnergy = thePreFragment->SampleKineticEnergy(aFragment); kinEnergy = std::max(kinEnergy, 0.0); @@ -136,7 +135,14 @@ G4PreCompoundEmission::PerformEmission(G4Fragment & aFragment) // Now we can calculate the four momentum // both options are valid and give the same result but 2nd one is faster G4LorentzVector Emitted4Momentum(theFinalMomentum,EmittedMass + kinEnergy); - + + if (2 < fVerbose) { + G4cout << " Emitted Z=" + << thePreFragment->GetZ() << " A=" << thePreFragment->GetA() + << " Ekin(MeV)=" << kinEnergy << " 4-mom C.M.S.: " + << Emitted4Momentum << G4endl; + } + // Perform Lorentz boost G4LorentzVector Rest4Momentum = aFragment.GetMomentum(); Emitted4Momentum.boost(Rest4Momentum.boostVector()); @@ -168,13 +174,13 @@ G4PreCompoundEmission::PerformEmission(G4Fragment & aFragment) aFragment.SetMomentum(Rest4Momentum); // Create a G4ReactionProduct - G4ReactionProduct * MyRP = thePreFragment->GetReactionProduct(); + res = thePreFragment->GetReactionProduct(); // Set the creator model ID aFragment.SetCreatorModelID(fModelID); - if (MyRP != nullptr) MyRP->SetCreatorModelID(fModelID); + if (res != nullptr) { res->SetCreatorModelID(fModelID); } - return MyRP; + return res; } void G4PreCompoundEmission::AngularDistribution( diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmissionInt.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmissionInt.cc new file mode 100644 index 0000000000..65a7148349 --- /dev/null +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundEmissionInt.cc @@ -0,0 +1,295 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// GEANT4 Class file +// +// File name: G4PreCompoundEmissionInt +// +// Author: V.Ivantchenko, 25 January 2025 +// + +#include "G4PreCompoundEmissionInt.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4Pow.hh" +#include "G4Exp.hh" +#include "G4Log.hh" +#include "Randomize.hh" +#include "G4RandomDirection.hh" +#include "G4PreCompoundEmissionFactory.hh" +#include "G4HETCEmissionFactory.hh" +#include "G4HadronicException.hh" +#include "G4NuclearLevelData.hh" +#include "G4DeexPrecoParameters.hh" +#include "G4PhysicsModelCatalog.hh" + +G4PreCompoundEmissionInt::G4PreCompoundEmissionInt(G4int verb) + : fVerbose(verb) +{ + theFragmentsFactory = new G4PreCompoundEmissionFactory(); + theFragmentsVector = + new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); + g4calc = G4Pow::GetInstance(); + fNuclData = G4NuclearLevelData::GetInstance(); + G4DeexPrecoParameters* param = fNuclData->GetParameters(); + fFermiEnergy = param->GetFermiEnergy(); + fUseAngularGenerator = param->UseAngularGen(); + fModelID = G4PhysicsModelCatalog::GetModelID("model_PRECO"); +} + +G4PreCompoundEmissionInt::~G4PreCompoundEmissionInt() +{ + delete theFragmentsFactory; + delete theFragmentsVector; +} + +void G4PreCompoundEmissionInt::SetDefaultModel() +{ + if (theFragmentsFactory) { delete theFragmentsFactory; } + theFragmentsFactory = new G4PreCompoundEmissionFactory(); + if (theFragmentsVector) { + theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector()); + } else { + theFragmentsVector = + new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); + } +} + +void G4PreCompoundEmissionInt::SetHETCModel() +{ + if (theFragmentsFactory) delete theFragmentsFactory; + theFragmentsFactory = new G4HETCEmissionFactory(); + if (theFragmentsVector) { + theFragmentsVector->SetVector(theFragmentsFactory->GetFragmentVector()); + } else { + theFragmentsVector = + new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector()); + } +} + +G4ReactionProduct* +G4PreCompoundEmissionInt::PerformEmission(G4Fragment& aFragment) +{ + G4ReactionProduct* res = nullptr; + // Choose a Fragment for emission + G4VPreCompoundFragment* thePreFragment = + theFragmentsVector->ChooseFragment(); + if (thePreFragment == nullptr) { + G4cout << "G4PreCompoundEmission::PerformEmission : " + << "I couldn't choose a fragment while trying to de-excite\n" + << aFragment << G4endl; + throw G4HadronicException(__FILE__, __LINE__, ""); + return res; + } + + // Kinetic Energy of emitted fragment + G4double kinEnergy = thePreFragment->SampleKineticEnergy(aFragment); + kinEnergy = std::max(kinEnergy, 0.0); + + // Calculate the fragment momentum (three vector theFinalMomentum) + if(fUseAngularGenerator) { + AngularDistribution(thePreFragment,aFragment,kinEnergy); + } else { + G4double pmag = + std::sqrt(kinEnergy*(kinEnergy + 2.0*thePreFragment->GetNuclearMass())); + theFinalMomentum = pmag*G4RandomDirection(); + } + + // Mass of emittef fragment + G4double EmittedMass = thePreFragment->GetNuclearMass(); + // Now we can calculate the four momentum + // both options are valid and give the same result but 2nd one is faster + G4LorentzVector Emitted4Momentum(theFinalMomentum,EmittedMass + kinEnergy); + + if (2 < fVerbose) { + G4cout << " Emitted Z=" + << thePreFragment->GetZ() << " A=" << thePreFragment->GetA() + << " Ekin(MeV)=" << kinEnergy << " 4-mom C.M.S.: " + << Emitted4Momentum << G4endl; + } + + // Perform Lorentz boost + G4LorentzVector Rest4Momentum = aFragment.GetMomentum(); + Emitted4Momentum.boost(Rest4Momentum.boostVector()); + + // Set emitted fragment momentum + thePreFragment->SetMomentum(Emitted4Momentum); + + // Residual nucleus + Rest4Momentum -= Emitted4Momentum; + + // Update nucleus parameters + // Z and A + G4int prodZ = thePreFragment->GetZ(); + G4int prodA = thePreFragment->GetA(); + G4int Z = aFragment.GetZ_asInt() - prodZ; + G4int A = aFragment.GetA_asInt() - prodA; + + // Number of excitons + G4int np = aFragment.GetNumberOfParticles() - prodA; + np = std::min(std::max(np, 0), A); + G4int nz = aFragment.GetNumberOfCharged() - prodZ; + nz = std::min(std::max(nz, 0), np); + + // update fragment + aFragment.SetZandA_asInt(Z, A); + aFragment.SetNumberOfExcitedParticle(np, nz); + + // Update nucleus momentum + // A check on consistence of Z, A, and mass will be performed + aFragment.SetMomentum(Rest4Momentum); + + // Create a G4ReactionProduct + res = thePreFragment->GetReactionProduct(); + + // Set the creator model ID + aFragment.SetCreatorModelID(fModelID); + if (res != nullptr) { res->SetCreatorModelID(fModelID); } + + return res; +} + +void G4PreCompoundEmissionInt::AngularDistribution( + G4VPreCompoundFragment* thePreFragment, + const G4Fragment& aFragment, + G4double ekin) +{ + G4int p = aFragment.GetNumberOfParticles(); + G4int h = aFragment.GetNumberOfHoles(); + G4double U = aFragment.GetExcitationEnergy(); + + // Emission particle separation energy + G4double Bemission = thePreFragment->GetBindingEnergy(); + + G4double gg = (6.0/pi2)*fNuclData->GetLevelDensity(aFragment.GetZ_asInt(), + aFragment.GetA_asInt(),U); + + // Average exciton energy relative to bottom of nuclear well + G4double Eav = 2*p*(p+1)/((p+h)*gg); + + // Excitation energy relative to the Fermi Level + G4double Uf = std::max(U - (p - h)*fFermiEnergy , 0.0); + // G4double Uf = U - KineticEnergyOfEmittedFragment - Bemission; + + G4double w_num = rho(p+1, h, gg, Uf, fFermiEnergy); + G4double w_den = rho(p, h, gg, Uf, fFermiEnergy); + if (w_num > 0.0 && w_den > 0.0) + { + Eav *= (w_num/w_den); + Eav += - Uf/(p+h) + fFermiEnergy; + } + else + { + Eav = fFermiEnergy; + } + + // VI + JMQ 19/01/2010 update computation of the parameter an + // + G4double an = 0.0; + G4double Eeff = ekin + Bemission + fFermiEnergy; + if(ekin > DBL_MIN && Eeff > DBL_MIN) { + + G4double zeta = std::max(1.0,9.3/std::sqrt(ekin/CLHEP::MeV)); + + // This should be the projectile energy. If I would know which is + // the projectile (proton, neutron) I could remove the binding energy. + // But, what happens if INC precedes precompound? This approximation + // seems to work well enough + G4double ProjEnergy = aFragment.GetExcitationEnergy(); + + an = 3*std::sqrt((ProjEnergy+fFermiEnergy)*Eeff)/(zeta*Eav); + + G4int ne = aFragment.GetNumberOfExcitons() - 1; + if ( ne > 1 ) { an /= static_cast(ne); } + + // protection of exponent + if ( an > 10. ) { an = 10.; } + } + + // sample cosine of theta and not theta as in old versions + G4double random = G4UniformRand(); + G4double cost; + + if(an < 0.1) { cost = 1. - 2*random; } + else { + G4double exp2an = G4Exp(-2*an); + cost = 1. + G4Log(1-random*(1-exp2an))/an; + if(cost > 1.) { cost = 1.; } + else if(cost < -1.) {cost = -1.; } + } + + G4double phi = CLHEP::twopi*G4UniformRand(); + + // Calculate the momentum magnitude of emitted fragment + G4double pmag = + std::sqrt(ekin*(ekin + 2.0*thePreFragment->GetNuclearMass())); + + G4double sint = std::sqrt((1.0-cost)*(1.0+cost)); + + theFinalMomentum.set(pmag*std::cos(phi)*sint,pmag*std::sin(phi)*sint, + pmag*cost); + + // theta is the angle wrt the incident direction + G4ThreeVector theIncidentDirection = aFragment.GetMomentum().vect().unit(); + theFinalMomentum.rotateUz(theIncidentDirection); +} + +G4double G4PreCompoundEmissionInt::rho(G4int p, G4int h, G4double gg, + G4double E, G4double Ef) const +{ + // 25.02.2010 V.Ivanchenko added more protections + G4double Aph = (p*p + h*h + p - 3.0*h)/(4.0*gg); + + if ( E - Aph < 0.0) { return 0.0; } + + G4double logConst = (p+h)*G4Log(gg) + - g4calc->logfactorial(p+h-1) - g4calc->logfactorial(p) + - g4calc->logfactorial(h); + + // initialise values using j=0 + + G4double t1=1; + G4double t2=1; + G4double logt3 = (p+h-1) * G4Log(E-Aph) + logConst; + const G4double logmax = 200.; + if(logt3 > logmax) { logt3 = logmax; } + G4double tot = G4Exp( logt3 ); + + // and now sum rest of terms + // 25.02.2010 V.Ivanchenko change while to for loop and cleanup + G4double Eeff = E - Aph; + for(G4int j=1; j<=h; ++j) + { + Eeff -= Ef; + if(Eeff < 0.0) { break; } + t1 *= -1.; + t2 *= static_cast(h+1-j)/static_cast(j); + logt3 = (p+h-1) * G4Log( Eeff) + logConst; + if(logt3 > logmax) { logt3 = logmax; } + tot += t1*t2*G4Exp(logt3); + } + + return tot; +} diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundFragment.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundFragment.cc index 5a170f88e8..4b6ec87a41 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundFragment.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundFragment.cc @@ -40,64 +40,15 @@ #include "G4InterfaceToXS.hh" #include "G4IsotopeList.hh" #include "Randomize.hh" +#include "G4VSIntegration.hh" G4PreCompoundFragment::G4PreCompoundFragment(const G4ParticleDefinition* p, G4VCoulombBarrier* aCoulBarrier) : G4VPreCompoundFragment(p, aCoulBarrier) {} -G4double G4PreCompoundFragment::CalcEmissionProbability(const G4Fragment& fr) -{ - theEmissionProbability = (Initialize(fr)) ? - IntegrateEmissionProbability(theMinKinEnergy, theMaxKinEnergy, fr) : 0.0; - /* - G4cout << "## G4PreCompoundFragment::CalcEmisProb " - << "Zf= " << fr.GetZ_asInt() - << " Af= " << fr.GetA_asInt() - << " Elow= " << theMinKinEnergy - << " Eup= " << theMaxKinEnergy - << " prob= " << theEmissionProbability - << " index=" << index << " Z=" << theZ << " A=" << theA - << G4endl; - */ - return theEmissionProbability; -} - -G4double -G4PreCompoundFragment::IntegrateEmissionProbability(G4double low, G4double up, - const G4Fragment& fr) -{ - static const G4double den = 1.0/CLHEP::MeV; - G4double del = (up - low); - G4int nbins = del*den; - nbins = std::max(nbins, 4); - del /= static_cast(nbins); - G4double e = low + 0.5*del; - probmax = ProbabilityDistributionFunction(e, fr); - //G4cout << " 0. e= " << e << " y= " << probmax << G4endl; - - G4double sum = probmax; - for (G4int i=1; i 1 && 0 < index && theResA != lastA) { lastA = theResA; @@ -107,8 +58,14 @@ G4double G4PreCompoundFragment::CrossSection(G4double ekin) recentXS = GetOpt0(ekin); } else if (OPTxs == 1) { G4int Z = std::min(theResZ, ZMAXNUCLEARDATA); - //G4double e = std::max(ekin, lowEnergyLimitMeV[Z]); - recentXS = fXSection->GetElementCrossSection(ekin, Z)/CLHEP::millibarn; + const G4double lim = 2*CLHEP::MeV; + const G4double Kmin = 20*CLHEP::keV; + G4double e = lowEnergyLimitMeV[Z]; + if (e == 0.0) { e = lim; } + G4double K = std::max(ekin, Kmin); + e = std::max(e, K); + recentXS = fXSection->GetElementCrossSection(e, Z)/CLHEP::millibarn; + recentXS *= GetAlpha()*(1.0 + GetBeta()/K); } else if (OPTxs == 2) { recentXS = G4ChatterjeeCrossSection::ComputeCrossSection(ekin, @@ -132,39 +89,3 @@ G4double G4PreCompoundFragment::GetOpt0(G4double ekin) const // with the rest of the options return 1.e+25*CLHEP::pi*r0*r0*theResA13*GetAlpha()*(1.0 + GetBeta()/ekin); } - -G4double G4PreCompoundFragment::SampleKineticEnergy(const G4Fragment& fragment) -{ - G4double delta = theMaxKinEnergy - theMinKinEnergy; - static const G4double toler = 1.25; - probmax *= toler; - G4double prob, T(0.0); - CLHEP::HepRandomEngine* rndm = G4Random::getTheEngine(); - G4int i; - for(i=0; i<100; ++i) { - T = theMinKinEnergy + delta*rndm->flat(); - prob = ProbabilityDistributionFunction(T, fragment); - /* - if(prob > probmax) { - G4cout << "G4PreCompoundFragment WARNING: prob= " << prob - << " probmax= " << probmax << G4endl; - G4cout << "i= " << i << " Z= " << theZ << " A= " << theA - << " resZ= " << theResZ << " resA= " << theResA << "\n" - << " T= " << T << " Tmax= " << theMaxKinEnergy - << " Tmin= " << limit - << G4endl; - for(G4int i=0; iflat() <= prob) { break; } - } - /* - G4cout << "G4PreCompoundFragment: i= " << i << " Z= " << theZ - << " A= " << theA <<" T(MeV)= " << T << " Emin(MeV)= " - << theMinKinEnergy << " Emax= " << theMaxKinEnergy << G4endl; - */ - return T; -} - diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc index b173f747e3..05a8776bbd 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundHe3.cc @@ -43,6 +43,7 @@ #include "G4PreCompoundHe3.hh" #include "G4CoulombBarrier.hh" #include "G4He3.hh" +#include "G4DeexPrecoUtility.hh" G4PreCompoundHe3::G4PreCompoundHe3() : G4PreCompoundIon(G4He3::He3(), new G4CoulombBarrier(3, 2)) @@ -50,7 +51,8 @@ G4PreCompoundHe3::G4PreCompoundHe3() G4double G4PreCompoundHe3::FactorialFactor(G4int N, G4int P) const { - return static_cast(((N-3)*(P-2)*(N-2))*((P-1)*(N-1)*P))/12.0; + return static_cast(((N-3)*(P-2)*(N-2))*((P-1)*(N-1)*P)) + /6.0; } G4double G4PreCompoundHe3::CoalescenceFactor(G4int A) const @@ -70,23 +72,6 @@ G4double G4PreCompoundHe3::GetRj(G4int nParticles, G4int nCharged) const G4double G4PreCompoundHe3::GetAlpha() const { - G4double C = 0.0; - if (theFragZ <= 30) - { - C = 0.10; - } - else if (theFragZ <= 50) - { - C = 0.1 - (theFragZ - 30)*0.001; - } - else if (theFragZ < 70) - { - C = 0.08 - (theFragZ - 50)*0.001; - } - else - { - C = 0.06; - } - return 1.0 + C*(4.0/3.0); + return 1.0 + G4DeexPrecoUtility::AlphaCValue(theResZ)*4.0/3.0; } diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundInterface.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundInterface.cc new file mode 100644 index 0000000000..7574669e6b --- /dev/null +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundInterface.cc @@ -0,0 +1,254 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// GEANT4 Class file +// +// File name: G4PreCompoundInterface +// +// Author: V.Ivantchenko, 20 January 2025 +// + +#include "G4PreCompoundInterface.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4PreCompoundEmissionInt.hh" +#include "G4PreCompoundTransitionsInt.hh" +#include "G4DeexPrecoParameters.hh" +#include "G4ParticleDefinition.hh" +#include "G4Proton.hh" +#include "G4Neutron.hh" + +#include "G4NucleiProperties.hh" +#include "G4NuclearLevelData.hh" +#include "G4DeexPrecoParameters.hh" +#include "Randomize.hh" +#include "G4DynamicParticle.hh" +#include "G4ParticleTypes.hh" +#include "G4ParticleTable.hh" +#include "G4LorentzVector.hh" +#include "G4Exp.hh" +#include "G4PhysicsModelCatalog.hh" + +//////////////////////////////////////////////////////////////////////////////// + +G4PreCompoundInterface::G4PreCompoundInterface() + : G4VPreCompoundModel(new G4ExcitationHandler(),"PRECO_I") +{ + fNuclData = G4NuclearLevelData::GetInstance(); +} + +//////////////////////////////////////////////////////////////////////////////// + +G4PreCompoundInterface::~G4PreCompoundInterface() +{ + delete theEmission; + delete theTransition; + delete GetExcitationHandler(); +} + +//////////////////////////////////////////////////////////////////////////////// + +void G4PreCompoundInterface::BuildPhysicsTable(const G4ParticleDefinition&) +{ + InitialiseModel(); +} + +//////////////////////////////////////////////////////////////////////////////// + +void G4PreCompoundInterface::InitialiseModel() +{ + if (isInitialised) { return; } + isInitialised = true; + + G4DeexPrecoParameters* param = fNuclData->GetParameters(); + + fLowLimitExc = param->GetPrecoLowEnergy(); + fHighLimitExc = param->GetPrecoHighEnergy(); + fVerbose = param->GetVerbose(); + + if (param->PrecoDummy()) { + isActive = false; + } else { + theEmission = new G4PreCompoundEmissionInt(fVerbose); + theEmission->SetOPTxs(param->GetPrecoModelType()); + theTransition = new G4PreCompoundTransitionsInt(fVerbose); + } + + GetExcitationHandler()->Initialise(); +} + +//////////////////////////////////////////////////////////////////////////////// + +G4ReactionProductVector* G4PreCompoundInterface::DeExcite(G4Fragment& frag) +{ + G4ReactionProductVector* res = new G4ReactionProductVector; + if (!isInitialised) { InitialiseModel(); } + + // decays by de-excitation + G4double U = frag.GetExcitationEnergy(); + G4int Z = frag.GetZ_asInt(); + G4int A = frag.GetA_asInt(); + if (1 < fVerbose) { + G4cout << "### G4PreCompoundInterface::DeExcite Z=" << Z << " A=" << A + << " U(MeV)=" << U << G4endl; + } + if (!isActive || Z < minZ || A < minA || + U < fLowLimitExc*A || U > A*fHighLimitExc || + 0 < frag.GetNumberOfLambdas()) { + PerformEquilibriumEmission(frag, res); + return res; + } + // decays by precompound model + BreakUpFragment(frag, res); + return res; +} + +void G4PreCompoundInterface::BreakUpFragment(G4Fragment& frag, + G4ReactionProductVector* res) +{ + // check initial fragment and number of excitons is not defined + G4double U = frag.GetExcitationEnergy(); + G4int Z = frag.GetZ_asInt(); + G4int A = frag.GetA_asInt(); + if (Z < minZ || A < minA || U < fLowLimitExc*A) { + PerformEquilibriumEmission(frag, res); + return; + } + + const G4double ldfact = 3.0/CLHEP::pi2; + const G4double eperex = 20.0*CLHEP::MeV; + + // number of excitons may be defined or not defined + G4int np = frag.GetNumberOfParticles(); + G4int nz = frag.GetNumberOfCharged(); + if (0 == np) { + np = G4lrint(U/eperex); + np = std::min(np, A); + frag.SetNumberOfParticles(np); + nz = G4lrint((np*Z)/(G4double)A); + nz = std::min(std::min(nz, np), Z); + frag.SetNumberOfExcitedParticle(np, nz); + } + + // main loop over fragments + for (G4int i=0; i<50; ++i) { + if (Z < minZ || A < minA || U < fLowLimitExc*A) { + break; + } + + // eqNum is the number of particle, not excitons + G4int eqNum = + G4lrint(std::sqrt(ldfact*U*fNuclData->GetLevelDensity(Z, A, U))); + if (2 < fVerbose) { + G4cout << " 1st loop " << i << ". Z=" << Z << " A=" << A + << " U(MeV)=" << U << " Npart=" << np << " Nch=" << nz + << " eqExcitationNumber=" << eqNum << G4endl; + } + if (np <= eqNum) { break; } + + // Loop for transitions, it is performed while there are + // preequilibrium transitions and is completed by emission + G4bool isTransition = false; + G4bool isEquilibrium = false; + + for (G4int j=0; j<20; ++j) { + G4double transProbability = + theTransition->CalculateProbability(frag); + G4double P1 = theTransition->GetTransitionProb1(); + G4double P2 = theTransition->GetTransitionProb2(); + G4double P3 = theTransition->GetTransitionProb3(); + if (2 < fVerbose) { + G4cout << " 2nd loop " << j << ". Npart=" << np << " P1=" << P1 + << " P2=" << P2 << " P3=" << P3 << G4endl; + } + if (np <= eqNum || P1 <= P2+P3) { + isEquilibrium = true; + break; + } + + G4double emissionProbability = + theEmission->GetTotalProbability(frag); + + // Sum of all probabilities + G4double totalProb = emissionProbability + transProbability; + + // Select subprocess + if (totalProb*G4UniformRand() > emissionProbability) { + isTransition = true; + theTransition->PerformTransition(frag); + isEquilibrium = (np <= eqNum); + } else { + isTransition = false; + auto product = theEmission->PerformEmission(frag); + res->push_back(product); + + // new parameters of the residual fragment + U = frag.GetExcitationEnergy(); + Z = frag.GetZ_asInt(); + A = frag.GetA_asInt(); + } + np = frag.GetNumberOfParticles(); + nz = frag.GetNumberOfCharged(); + if (!isTransition || isEquilibrium) { break; } + } + if (isEquilibrium) { break; } + } + PerformEquilibriumEmission(frag, res); +} + +//////////////////////////////////////////////////////////////////////////////// +// Documentation +//////////////////////////////////////////////////////////////////////////////// + +void G4PreCompoundInterface::ModelDescription(std::ostream& outFile) const +{ + outFile + << "The GEANT4 precompound model is considered as an extension of the\n" + << "hadron kinetic model. It gives a possibility to extend the low energy range\n" + << "of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n" + << "provides a ”smooth” transition from kinetic stage of reaction described by the\n" + << "hadron kinetic model to the equilibrium stage of reaction described by the\n" + << "equilibrium deexcitation models.\n" + << "The initial information for calculation of pre-compound nuclear stage\n" + << "consists of the atomic mass number A, charge Z of residual nucleus, its\n" + << "four momentum P0 , excitation energy U and number of excitons n, which equals\n" + << "the sum of the number of particles p (from them p_Z are charged) and the number of\n" + << "holes h.\n" + << "At the preequilibrium stage of reaction, we follow the exciton model approach in ref. [1],\n" + << "taking into account the competition among all possible nuclear transitions\n" + << "with ∆n = +2, −2, 0 (which are defined by their associated transition probabilities) and\n" + << "the emission of neutrons, protons, deuterons, thritium and helium nuclei (also defined by\n" + << "their associated emission probabilities according to exciton model)\n" + << "\n" + << "[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n" + << "\n"; +} + +void G4PreCompoundInterface::DeExciteModelDescription(std::ostream& outFile) const +{ + outFile << "description of precompound model as used with DeExcite()" << "\n"; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc index 099504ea57..f0eb4264a4 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundIon.cc @@ -72,13 +72,10 @@ ProbabilityDistributionFunction(G4double eKin, G4double gj = g1; - G4double A0 = (P*P+H*H+P-3*H)/(4.0*g0); - G4double A1 = std::max(0.0,(A0*g0 + A*(A-2*P-1)*0.25)/g1); - - G4double E0 = U - A0; + G4double E0 = U ; if (E0 <= 0.0) { return 0.0; } - G4double E1 = std::max(0.0,theMaxKinEnergy - eKin - A1); + G4double E1 = std::max(0.0,theMaxKinEnergy - eKin); G4double Aj = A*(A+1)/(4.0*gj); G4double Ej = std::max(0.0,efinal - Aj); diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundModel.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundModel.cc index 6e15569e50..1c6c2a4587 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundModel.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundModel.cc @@ -47,6 +47,7 @@ #include "G4PreCompoundModel.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" +#include "G4PreCompoundInterface.hh" #include "G4PreCompoundEmission.hh" #include "G4PreCompoundTransitions.hh" #include "G4GNASHTransitions.hh" @@ -103,9 +104,8 @@ void G4PreCompoundModel::InitialiseModel() if(isInitialised) { return; } isInitialised = true; - //G4cout << "G4PreCompoundModel::InitialiseModel() started" << G4endl; - G4DeexPrecoParameters* param = fNuclData->GetParameters(); + fVerbose = param->GetVerbose(); fLowLimitExc = param->GetPrecoLowEnergy(); fHighLimitExc = param->GetPrecoHighEnergy(); @@ -115,33 +115,40 @@ void G4PreCompoundModel::InitialiseModel() minZ = param->GetMinZForPreco(); minA = param->GetMinAForPreco(); - theEmission = new G4PreCompoundEmission(); - if(param->UseHETC()) { theEmission->SetHETCModel(); } - theEmission->SetOPTxs(param->GetPrecoModelType()); + if (param->PrecoDummy() || eDeexcitation == param->GetPreCompoundType()) { + isActive = false; + } + else if (ePrecoInterface == param->GetPreCompoundType()) { + usePrecoInterface = true; + fInterface = new G4PreCompoundInterface(); + } + else { + theEmission = new G4PreCompoundEmission(); + if (param->UseHETC()) { theEmission->SetHETCModel(); } + theEmission->SetOPTxs(param->GetPrecoModelType()); - if(param->UseGNASH()) { theTransition = new G4GNASHTransitions; } - else { theTransition = new G4PreCompoundTransitions(); } - theTransition->UseNGB(param->NeverGoBack()); - theTransition->UseCEMtr(param->UseCEM()); - - if(param->PrecoDummy()) { isActive = false; } + if (param->UseGNASH()) { theTransition = new G4GNASHTransitions; } + else { theTransition = new G4PreCompoundTransitions(); } + theTransition->UseNGB(param->NeverGoBack()); + theTransition->UseCEMtr(param->UseCEM()); + } GetExcitationHandler()->Initialise(); } //////////////////////////////////////////////////////////////////////////////// -G4HadFinalState* +G4HadFinalState* G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, - G4Nucleus & theNucleus) -{ + G4Nucleus & theNucleus) +{ const G4ParticleDefinition* primary = thePrimary.GetDefinition(); if(primary != neutron && primary != proton) { G4ExceptionDescription ed; ed << "G4PreCompoundModel is used for "; if(primary) { ed << primary->GetParticleName(); } G4Exception("G4PreCompoundModel::ApplyYourself()","had0033",FatalException, - ed,""); + ed,""); return nullptr; } @@ -150,12 +157,12 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, if(primary == proton) { Zp = 1; } G4double timePrimary=thePrimary.GetGlobalTime(); - G4int A = theNucleus.GetA_asInt(); G4int Z = theNucleus.GetZ_asInt(); - + //G4cout << "### G4PreCompoundModel::ApplyYourself: A= " << A << " Z= " << Z - // << " Ap= " << Ap << " Zp= " << Zp << G4endl; + // << " Ap= " << Ap << " Zp= " << Zp << G4endl; + // 4-Momentum G4LorentzVector p = thePrimary.Get4Momentum(); G4double mass = G4NucleiProperties::GetNuclearMass(A, Z); @@ -168,7 +175,7 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, anInitialState.SetNumberOfHoles(1,0); anInitialState.SetCreationTime(thePrimary.GetGlobalTime()); anInitialState.SetCreatorModelID(modelID); - + // call excitation handler G4ReactionProductVector* result = DeExcite(anInitialState); @@ -177,8 +184,8 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, theResult.SetStatusChange(stopAndKill); for(auto const & prod : *result) { G4DynamicParticle * aNewDP = new G4DynamicParticle(prod->GetDefinition(), - prod->GetTotalEnergy(), - prod->GetMomentum()); + prod->GetTotalEnergy(), + prod->GetMomentum()); G4HadSecondary aNew = G4HadSecondary(aNewDP); G4double time = std::max(prod->GetFormationTime(), 0.0); aNew.SetTime(timePrimary + time); @@ -187,8 +194,6 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, theResult.AddSecondary(aNew); } delete result; - - //return the filled particle change return &theResult; } @@ -196,22 +201,25 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary, G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment) { - if(!isInitialised) { InitialiseModel(); } + if (!isInitialised) { InitialiseModel(); } + if (usePrecoInterface) { return fInterface->DeExcite(aFragment); } - G4ReactionProductVector * Result = new G4ReactionProductVector; + G4ReactionProductVector* result = new G4ReactionProductVector(); G4double U = aFragment.GetExcitationEnergy(); G4int Z = aFragment.GetZ_asInt(); G4int A = aFragment.GetA_asInt(); - //G4cout << "### G4PreCompoundModel::DeExcite" << G4endl; - //G4cout << aFragment << G4endl; + if (1 < fVerbose) { + G4cout << "### G4PreCompoundModel::DeExcite Z=" << Z << " A=" << A + << " U(MeV)=" << U << G4endl; + } // Conditions to skip pre-compound and perform equilibrium emission if (!isActive || (Z < minZ && A < minA) || U < fLowLimitExc*A || U > A*fHighLimitExc || 0 < aFragment.GetNumberOfLambdas()) { - PerformEquilibriumEmission(aFragment, Result); - return Result; + PerformEquilibriumEmission(aFragment, result); + return result; } // main loop @@ -219,29 +227,22 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment) const G4double ldfact = 12.0/CLHEP::pi2; const G4int countmax = 1000; for (;;) { - //G4cout << "### PreCompound loop over fragment" << G4endl; - //G4cout << aFragment << G4endl; U = aFragment.GetExcitationEnergy(); Z = aFragment.GetZ_asInt(); A = aFragment.GetA_asInt(); - G4int eqExcitonNumber = + G4int eqExcitonNumber = G4lrint(std::sqrt(ldfact*U*fNuclData->GetLevelDensity(Z, A, U))); - // - // G4cout<<"Neq="<GetTransitionProb1(); G4double P2 = theTransition->GetTransitionProb2(); G4double P3 = theTransition->GetTransitionProb3(); - //G4cout<<"#0 P1="< A*fHighLimitExc || ne <= 0) { + PerformEquilibriumEmission(aFragment, result); + return result; } G4double emissionProbability = theEmission->GetTotalProbability(aFragment); - //G4cout<<"#1 TotalEmissionProbability="<PerformTransition(aFragment); } else { - //G4cout<<"#3 Emission"<push_back(theEmission->PerformEmission(aFragment)); + result->push_back(theEmission->PerformEmission(aFragment)); } // Loop checking, 05-Aug-2015, Vladimir Ivanchenko } while (isTransition); // end of do loop @@ -310,11 +308,11 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment) << "current G4Fragment: \n" << aFragment; G4Exception("G4PreCompoundModel::DeExcite()","had0034",JustWarning, ed,""); - PerformEquilibriumEmission(aFragment, Result); - return Result; + break; } } // end of for (;;) loop - return Result; + PerformEquilibriumEmission(aFragment, result); + return result; } //////////////////////////////////////////////////////////////////////////////// @@ -342,7 +340,7 @@ void G4PreCompoundModel::ModelDescription(std::ostream& outFile) const << "their associated emission probabilities according to exciton model)\n" << "\n" << "[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n" - << "\n"; + << "\n"; } //////////////////////////////////////////////////////////////////////////////// diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundNucleon.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundNucleon.cc index 452d773a1f..43b9d2f34e 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundNucleon.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundNucleon.cc @@ -62,13 +62,10 @@ ProbabilityDistributionFunction(G4double eKin, G4double g0 = sixoverpi2*fNucData->GetLevelDensity(theFragZ, theFragA, U); G4double g1 = sixoverpi2*fNucData->GetLevelDensity(theResZ, theResA, 0.0); - G4double A0 = (P*P+H*H+P-3*H)/(4.0*g0); - G4double A1 = (A0 - 0.5*P)/g1; - - G4double E0 = U - A0; + G4double E0 = U; if (E0 <= 0.0) { return 0.0; } - G4double E1 = U - eKin - theBindingEnergy - A1; + G4double E1 = U - eKin - theBindingEnergy; if (E1 <= 0.0) { return 0.0; } G4double rj = GetRj(P, aFragment.GetNumberOfCharged()); diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc index f552283f00..4516eae3bb 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundProton.cc @@ -44,6 +44,7 @@ #include "G4PreCompoundProton.hh" #include "G4CoulombBarrier.hh" #include "G4Proton.hh" +#include "G4DeexPrecoUtility.hh" G4PreCompoundProton::G4PreCompoundProton() : G4PreCompoundNucleon(G4Proton::Proton(), new G4CoulombBarrier(1, 1)) @@ -60,16 +61,6 @@ G4double G4PreCompoundProton::GetRj(G4int nParticles, G4int nCharged) const G4double G4PreCompoundProton::GetAlpha() const { - G4double C = 0.0; - if (theResZ >= 70) - { - C = 0.10; - } - else - { - C = ((((0.15417e-06*theResZ) - 0.29875e-04)*theResZ - + 0.21071e-02)*theResZ - 0.66612e-01)*theResZ + 0.98375; - } - return 1.0 + C; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(theResZ); } diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTransitions.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTransitions.cc index b2157a0003..3c3d73d9f5 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTransitions.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTransitions.cc @@ -81,11 +81,11 @@ CalculateProbability(const G4Fragment & aFragment) G4double U = aFragment.GetExcitationEnergy(); TransitionProb2 = 0.0; TransitionProb3 = 0.0; - /* - G4cout << "G4PreCompoundTransitions::CalculateProbability H/P/N/Z/A= " - << H << " " << P << " " << N << " " << Z << " " << A <GetParameters(); + FermiEnergy = param->GetFermiEnergy(); + r0 = param->GetTransitionsR0(); +} + +G4double G4PreCompoundTransitionsInt:: +CalculateProbability(const G4Fragment & aFragment) +{ + // Number of Particles + G4int P = aFragment.GetNumberOfParticles(); + // Number of Excitons + //G4int N = P+H; + // Nucleus + G4int A = aFragment.GetA_asInt(); + G4int Z = aFragment.GetZ_asInt(); + G4double U = aFragment.GetExcitationEnergy(); + TransitionProb2 = 0.0; + TransitionProb3 = 0.0; + /* + G4cout << "G4PreCompoundTransitions::CalculateProbability H/P/N/Z/A= " + << H << " " << P << " " << N << " " << Z << " " << A <GetLevelDensity(Z, A, U); + if (useCEMtr) { + // Relative Energy (T_{rel}) + G4double RelativeEnergy = 1.6*FermiEnergy + U/G4double(2*P); + + // Sample kind of nucleon-projectile + G4bool ChargedNucleon(false); + if(G4lrint(P*G4UniformRand()) <= aFragment.GetNumberOfCharged()) { + ChargedNucleon = true; + } + + // Relative Velocity: + // ^2 + G4double RelativeVelocitySqr; + if (ChargedNucleon) { + RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::proton_mass_c2; + } else { + RelativeVelocitySqr = 2*RelativeEnergy/CLHEP::neutron_mass_c2; + } + // + G4double RelativeVelocity = std::sqrt(RelativeVelocitySqr); + + // Proton-Proton Cross Section + G4double ppXSection = + (10.63/RelativeVelocitySqr - 29.92/RelativeVelocity + 42.9) + * CLHEP::millibarn; + // Proton-Neutron Cross Section + G4double npXSection = + (34.10/RelativeVelocitySqr - 82.20/RelativeVelocity + 82.2) + * CLHEP::millibarn; + + // Averaged Cross Section: \sigma(V_{rel}) + G4double xs = (ChargedNucleon) ? + ((Z-1)*ppXSection + (A-Z)*npXSection)/G4double(A-1) : + ((A-Z-1)*ppXSection + Z*npXSection)/G4double(A-1); + + // Fermi relative energy ratio + G4double FermiRelRatio = FermiEnergy/RelativeEnergy; + + // This factor is introduced to take into account the Pauli principle + G4double PauliFactor = 1.0 - 1.4*FermiRelRatio; + if (FermiRelRatio > 0.5) { + G4double x = 2.0 - 1.0/FermiRelRatio; + PauliFactor += 0.4*FermiRelRatio*x*x*std::sqrt(x); + } + // Interaction volume + G4double xx = 2*r0 + CLHEP::hbarc/(CLHEP::proton_mass_c2*RelativeVelocity); + G4double Vint = CLHEP::pi*xx*xx*xx/0.75; + + // Transition probability for \Delta n = +2 + TransitionProb1 = std::max(0.0, xs*PauliFactor + *std::sqrt(2.0*RelativeEnergy/CLHEP::proton_mass_c2)/Vint); + + //JMQ 281009 phenomenological factor in order to increase + // equilibrium contribution + // G4double factor=5.0; + // TransitionProb1 *= factor; + + // GE = g*E where E is Excitation Energy + G4double Fph = G4double(P*(P - 1))*0.5; + + if(!useNGB) { + + // F(p+1,h+1) + G4double Fph1 = Fph + P; + + static const G4double plimit = 100; + + //JMQ/AH bug fixed: if (U-Fph < 0.0) + if (GE > Fph1) { + G4double x0 = GE-Fph; + G4double x1 = (2*P + 1)*G4Log(x0/(GE-Fph1)); + if(x1 < plimit) { + x1 = G4Exp(x1)*TransitionProb1/x0; + + // Transition probability for \Delta n = -2 (at F(p,h) = 0) + TransitionProb2 = std::max(0.0, (2*P*P*(2*P + 1)*(P - 1))*x1/x0); + + // Transition probability for \Delta n = 0 (at F(p,h) = 0) + TransitionProb3 = std::max(0.0, ((2*P+1)*(3*P-1))*x1); + } + } + } + + } else { + //JMQ: Transition probabilities from Gupta's work + // GE = g*E where E is Excitation Energy + TransitionProb1 = std::max(0.0, U*(4.2e+12 - 3.6e+10*U/G4double(2*P+1))) + /(16*CLHEP::c_light); + + if (!useNGB) { + TransitionProb2 = (2*(2*P-1)*(P-1)*P*P)*TransitionProb1/(GE*GE); + } + } + return TransitionProb1 + TransitionProb2 + TransitionProb3; +} + +void G4PreCompoundTransitionsInt::PerformTransition(G4Fragment& frag) +{ + G4int A = frag.GetA_asInt(); + G4int Z = frag.GetZ_asInt(); + G4int Npart = frag.GetNumberOfParticles(); + G4int Ncharged = frag.GetNumberOfCharged(); + + G4double ChosenTransition = + G4UniformRand()*(TransitionProb1 + TransitionProb2 + TransitionProb3); + + G4int deltaN = 0; + // Number of excited particles inside the fragment + if (ChosenTransition <= TransitionProb1) { + if (Npart < A) { deltaN = 1; } + } + else if (ChosenTransition <= TransitionProb1+TransitionProb2) { + if (Npart > 0) { deltaN = -1; } + } + if (deltaN != 0) { + if (G4lrint(Npart*G4UniformRand()) <= Ncharged) { + Ncharged += deltaN; + Ncharged = std::min(std::max(Ncharged, 0), Z); + } + } + Npart += deltaN; + Ncharged = std::min(Ncharged, Npart); + + // update fragment + frag.SetNumberOfExcitedParticle(Npart, Ncharged); + if (2 < fVerbose) { + G4cout << " # After transition Npart=" << Npart + << " Ncharged=" << Ncharged << " deltaN=" << deltaN << G4endl; + } +} + diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTriton.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTriton.cc index 27748680cb..212549cb44 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTriton.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4PreCompoundTriton.cc @@ -43,6 +43,7 @@ #include "G4PreCompoundTriton.hh" #include "G4Triton.hh" #include "G4CoulombBarrier.hh" +#include "G4DeexPrecoUtility.hh" G4PreCompoundTriton::G4PreCompoundTriton() : G4PreCompoundIon(G4Triton::Triton(), new G4CoulombBarrier(3, 1)) @@ -50,7 +51,8 @@ G4PreCompoundTriton::G4PreCompoundTriton() G4double G4PreCompoundTriton::FactorialFactor(G4int N, const G4int P) const { - return static_cast(((N-3)*(P-2)*(N-2))*((P-1)*(N-1)*P))/12.0; + return static_cast(((N-3)*(P-2)*(N-2))*((P-1)*(N-1)*P)) + /6.; } G4double G4PreCompoundTriton::CoalescenceFactor(G4int A) const @@ -71,17 +73,6 @@ G4double G4PreCompoundTriton::GetRj(G4int nParticles, G4int nCharged) const G4double G4PreCompoundTriton::GetAlpha() const { - G4double C = 0.0; - if (theFragZ <= 70) - { - C = 0.10; - } - else - { - C = ((((0.15417e-06*theFragZ) - 0.29875e-04)*theFragZ - + 0.21071e-02)*theFragZ - 0.66612e-01)*theFragZ + 0.98375; - } - - return 1.0 + C/3.0; + return 1.0 + G4DeexPrecoUtility::ProtonCValue(theResZ)/3.0; } diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4VPreCompoundFragment.cc b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4VPreCompoundFragment.cc index 30db9dfe79..741693802b 100644 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4VPreCompoundFragment.cc +++ b/source/processes/hadronic/models/pre_equilibrium/exciton_model/src/G4VPreCompoundFragment.cc @@ -60,6 +60,8 @@ G4VPreCompoundFragment::G4VPreCompoundFragment( if (OPTxs == 1) { fXSection = new G4InterfaceToXS(particle, index); } + InitialiseIntegrator(0.005, 0.25, 1.05, CLHEP::MeV, + 0.2*CLHEP::MeV, 5*CLHEP::MeV); } G4VPreCompoundFragment::~G4VPreCompoundFragment() @@ -99,6 +101,7 @@ G4VPreCompoundFragment::Initialize(const G4Fragment& aFragment) || ((theResA > 1) && (theResA == theResZ || theResZ == 0))) { return false; } + pFragment = &aFragment; theResMass = G4NucleiProperties::GetNuclearMass(theResA, theResZ); G4double Ecm = aFragment.GetMomentum().m(); if (Ecm <= theResMass + theMass) { return 0.0; } @@ -130,3 +133,25 @@ G4VPreCompoundFragment::Initialize(const G4Fragment& aFragment) theBindingEnergy = theResMass + theMass - aFragment.GetGroundStateMass(); return true; } + +G4double G4VPreCompoundFragment::CalcEmissionProbability(const G4Fragment& fr) +{ + G4bool ok = Initialize(fr); + theEmissionProbability = 0.0; + if (ok) { + theEmissionProbability = ComputeIntegral(theMinKinEnergy, theMaxKinEnergy); + } + return theEmissionProbability; +} + +G4double G4VPreCompoundFragment::SampleKineticEnergy(const G4Fragment&) +{ + G4double ekin = SampleValue(); + return ekin; +} + +G4double G4VPreCompoundFragment::ProbabilityDensityFunction(G4double ekin) +{ + G4double e = std::max(ekin, 0.02); + return ProbabilityDistributionFunction(e, *pFragment); +} diff --git a/source/processes/hadronic/models/radioactive_decay/History b/source/processes/hadronic/models/radioactive_decay/History index f68f317cbf..31ab30a876 100644 --- a/source/processes/hadronic/models/radioactive_decay/History +++ b/source/processes/hadronic/models/radioactive_decay/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-01-10 Vladimir Ivanchenko (radioactive_decay-V11-02-06) +## 2025-01-10 Vladimir Ivanchenko (radioactive_decay-V11-03-00) - G4RadioactiveDecay - fixed problem 2592 - enable biasing in radioactive decay ## 2024-08-14 Gabriele Cosmo (radioactive_decay-V11-02-05) diff --git a/source/processes/hadronic/models/radioactive_decay/src/G4RadioactiveDecay.cc b/source/processes/hadronic/models/radioactive_decay/src/G4RadioactiveDecay.cc index 9c4babf702..8a8b537270 100644 --- a/source/processes/hadronic/models/radioactive_decay/src/G4RadioactiveDecay.cc +++ b/source/processes/hadronic/models/radioactive_decay/src/G4RadioactiveDecay.cc @@ -878,7 +878,7 @@ G4RadioactiveDecay::DecayIt(const G4Track& theTrack, const G4Step&) currentPosition = theTrack.GetPosition(); fParticleChangeForRadDecay.SetSecondaryWeightByProcess(true); - + G4IonTable* theIonTable; G4ParticleDefinition* parentNucleus; diff --git a/source/processes/hadronic/util/History b/source/processes/hadronic/util/History index 56f0bd569d..574464afe8 100644 --- a/source/processes/hadronic/util/History +++ b/source/processes/hadronic/util/History @@ -7,15 +7,23 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-22 Alberto Ribon (hadr-util-V11-02-07) +## 2025-05-20 Ben Morgan (hadr-util-V11-03-04) +- G4HadronicParameters: Implement pretty-print to ostream to allow users to check + values at runtime, ala G4EmParameters (request from ATLAS). + +## 2025-04-22 Alberto Ribon (hadr-util-V11-03-03) - G4HadronicDeveloperParameters : introduced Getter/Setter for selecting the Bertini model behavior as Geant4 version 11.3 (default) or 11.2. -## 2025-03-05 Vladimir Ivanchenko (hadr-util-V11-02-06) +## 2025-03-31 Vladimir Ivanchenko (hadr-util-V11-03-02) +- G4Nucleus - added move operator suggested by Coverity, make copy constructor and + assignment operator default. + +## 2025-03-05 Vladimir Ivanchenko (hadr-util-V11-03-01) - G4HadronicDeveloperParameters - added limitation of warning printout on change of parameters (NA64 request). -## 2025-01-09 Vladimir Ivanchenko +## 2025-01-09 Vladimir Ivanchenko (hadr-util-V11-03-00) - G4Fragment - added protection against precision loss in computation of a boost vector at rest diff --git a/source/processes/hadronic/util/include/G4HadronicParameters.hh b/source/processes/hadronic/util/include/G4HadronicParameters.hh index 2c50e0d393..52ff075a23 100644 --- a/source/processes/hadronic/util/include/G4HadronicParameters.hh +++ b/source/processes/hadronic/util/include/G4HadronicParameters.hh @@ -50,6 +50,10 @@ class G4HadronicParameters { static G4HadronicParameters* Instance(); ~G4HadronicParameters(); + // printing + void StreamInfo(std::ostream& os) const; + void Dump() const; + inline G4double GetMaxEnergy() const; void SetMaxEnergy( const G4double val ); // Getter/Setter for the upper limit for Geant4 hadronic physics, for any application. @@ -412,4 +416,10 @@ inline G4bool G4HadronicParameters::IsBertiniNucleiModelAs11_2() const { return fBertiniNucleiModelAs11_2; } +inline std::ostream& operator<<(std::ostream& os, const G4HadronicParameters& p) +{ + p.StreamInfo(os); + return os; +} + #endif diff --git a/source/processes/hadronic/util/include/G4HadronicParametersMessenger.hh b/source/processes/hadronic/util/include/G4HadronicParametersMessenger.hh index f894685f8d..831ffe906d 100644 --- a/source/processes/hadronic/util/include/G4HadronicParametersMessenger.hh +++ b/source/processes/hadronic/util/include/G4HadronicParametersMessenger.hh @@ -55,6 +55,7 @@ class G4HadronicParametersMessenger : public G4UImessenger { G4UIcmdWithAnInteger* theVerboseCmd; G4UIcmdWithADoubleAndUnit* theMaxEnergyCmd; G4UIcmdWithABool* theCRCoalescenceCmd; + G4UIcommand* theDumpCmd; }; #endif diff --git a/source/processes/hadronic/util/include/G4Nucleus.hh b/source/processes/hadronic/util/include/G4Nucleus.hh index 4051785ace..4d44d54e84 100644 --- a/source/processes/hadronic/util/include/G4Nucleus.hh +++ b/source/processes/hadronic/util/include/G4Nucleus.hh @@ -59,31 +59,10 @@ class G4Nucleus ~G4Nucleus(); - inline G4Nucleus( const G4Nucleus &right ) - { *this = right; } - - inline G4Nucleus& operator = (const G4Nucleus& right) - { - if (this != &right) { - theA=right.theA; - theZ=right.theZ; - theL=right.theL; - aEff=right.aEff; - zEff=right.zEff; - fIsotope = right.fIsotope; - pnBlackTrackEnergy=right.pnBlackTrackEnergy; - dtaBlackTrackEnergy=right.dtaBlackTrackEnergy; - pnBlackTrackEnergyfromAnnihilation = - right.pnBlackTrackEnergyfromAnnihilation; - dtaBlackTrackEnergyfromAnnihilation = - right.dtaBlackTrackEnergyfromAnnihilation; - theTemp = right.theTemp; - excitationEnergy = right.excitationEnergy; - momentum = right.momentum; - fermiMomentum = right.fermiMomentum; - } - return *this; - } + G4Nucleus(const G4Nucleus&) = default; + G4Nucleus(G4Nucleus&&) = default; + G4Nucleus& operator = (const G4Nucleus&) = default; + G4Nucleus& operator = (G4Nucleus&&) = default; inline G4bool operator==( const G4Nucleus &right ) const { return ( this == (G4Nucleus *) &right ); } diff --git a/source/processes/hadronic/util/src/G4HadronicParameters.cc b/source/processes/hadronic/util/src/G4HadronicParameters.cc index 1f5931a960..335beb6cc4 100644 --- a/source/processes/hadronic/util/src/G4HadronicParameters.cc +++ b/source/processes/hadronic/util/src/G4HadronicParameters.cc @@ -43,6 +43,7 @@ #include "G4HadronicParametersMessenger.hh" #include "G4Threading.hh" #include "G4AutoLock.hh" +#include "G4UnitsTable.hh" G4HadronicParameters* G4HadronicParameters::sInstance = nullptr; @@ -113,6 +114,113 @@ G4bool G4HadronicParameters::IsLocked() const { } +void G4HadronicParameters::StreamInfo( std::ostream& os ) const { + G4long prec = os.precision(5); + + // Lambda function to convert boolean to "true"/"false" string + auto boolToString = [](G4bool value) -> const char* { + return value ? "true" : "false"; + }; + + os << "=======================================================================" << "\n"; + os << "====== Hadronic Physics Parameters ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "Maximum energy for hadronic physics " + << G4BestUnit(fMaxEnergy, "Energy") << "\n"; + os << "Energy threshold for heavy hadrons " + << G4BestUnit(fEnergyThresholdForHeavyHadrons, "Energy") << "\n"; + os << "Neutron kinetic energy threshold for SVT algorithm "; + if (fNeutronEkinThresholdForSVT < 0.0) { + os <<"not set" << "\n"; + } else { + os << G4BestUnit(fNeutronEkinThresholdForSVT, "Energy") << "\n"; + } + os << "Time threshold for radioactive decays "; + if (fTimeThresholdForRadioactiveDecays < 0.0) { + os << "not set" << "\n"; + } else { + os << G4BestUnit(fTimeThresholdForRadioactiveDecays, "Time") << "\n"; + } + + os << "=======================================================================" << "\n"; + os << "====== Model Transition Regions ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "FTF to Cascade transition region " + << G4BestUnit(fMinEnergyTransitionFTF_Cascade, "Energy") << " - " + << G4BestUnit(fMaxEnergyTransitionFTF_Cascade, "Energy") << "\n"; + os << "QGS to FTF transition region " + << G4BestUnit(fMinEnergyTransitionQGS_FTF, "Energy") << " - " + << G4BestUnit(fMaxEnergyTransitionQGS_FTF, "Energy") << "\n"; + os << "INCLXX antiproton model energy range " + << G4BestUnit(fMinEnergyINCLXX_Pbar, "Energy") << " - " + << G4BestUnit(fMaxEnergyINCLXX_Pbar, "Energy") << "\n"; + + os << "=======================================================================" << "\n"; + os << "====== Cross Section Factors ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "Apply cross section factors " << boolToString(fApplyFactorXS) << "\n"; + os << "Nucleon inelastic cross section factor " << fXSFactorNucleonInelastic << "\n"; + os << "Nucleon elastic cross section factor " << fXSFactorNucleonElastic << "\n"; + os << "Pion inelastic cross section factor " << fXSFactorPionInelastic << "\n"; + os << "Pion elastic cross section factor " << fXSFactorPionElastic << "\n"; + os << "Hadron inelastic cross section factor " << fXSFactorHadronInelastic << "\n"; + os << "Hadron elastic cross section factor " << fXSFactorHadronElastic << "\n"; + os << "EM cross section factor " << fXSFactorEM << "\n"; + + os << "=======================================================================" << "\n"; + os << "====== Process Control Parameters ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "Enable integral method for inelastic cross sections " << boolToString(fEnableIntegralInelasticXS) << "\n"; + os << "Enable integral method for elastic cross sections " << boolToString(fEnableIntegralElasticXS) << "\n"; + os << "Enable diffraction dissociation for B > 10 " << boolToString(fEnableDiffDissociationForBGreater10) << "\n"; + os << "Enable neutron general process " << boolToString(fNeutronGeneral) << "\n"; + os << "Enable NUDEX gamma de-excitation " << boolToString(fEnableNUDEX) << "\n"; + os << "Enable coherent charge exchange " << boolToString(fChargeExchange) << "\n"; + + os << "=======================================================================" << "\n"; + os << "====== Particle Production Control ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "Enable B/C particles " << boolToString(fEnableBC) << "\n"; + os << "Enable hyper-nuclei " << boolToString(fEnableHyperNuclei) << "\n"; + os << "Enable cosmic ray coalescence " << boolToString(fEnableCRCoalescence) << "\n"; + + os << "=======================================================================" << "\n"; + os << "====== Model Control Parameters ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "PT table type for URR neutrons "; + // A ternary operation can't be used here as it leads to a C2445 error on Windows with C++20 and newer + if (fTypeTablePT.empty()) { + os << "not set" << "\n"; + } else { + os << fTypeTablePT << "\n"; + } + os << "Bertini angular emissions as in G4 11.2 " << boolToString(fBertiniAngularEmissionsAs11_2) << "\n"; + os << "Bertini nuclei model as in G4 11.2 " << boolToString(fBertiniNucleiModelAs11_2) << "\n"; + os << "Bertini overall behavior as in G4 11.2 " << boolToString(IsBertiniAs11_2()) << "\n"; + + os << "=======================================================================" << "\n"; + os << "====== Debugging Options ========" << "\n"; + os << "=======================================================================" << "\n"; + os << "Verbose level " << fVerboseLevel << "\n"; + os << "Binary cascade debug " << boolToString(fBinaryDebug) << "\n"; + os << "Environment reporting level " << fReportLevel << "\n"; + if (fRelativeDiff < DBL_MAX) { + os << "Environment relative difference level " << fRelativeDiff << "\n"; + } + if (fAbsoluteDiff < DBL_MAX) { + os << "Environment absolute difference level " << fAbsoluteDiff << "\n"; + } + + os << "=======================================================================" << G4endl; + os.precision(prec); +} + + +void G4HadronicParameters::Dump() const { + StreamInfo(G4cout); +} + + void G4HadronicParameters::SetMaxEnergy( const G4double val ) { if ( ! IsLocked() && val > 0.0 ) { fMaxEnergy = val; diff --git a/source/processes/hadronic/util/src/G4HadronicParametersMessenger.cc b/source/processes/hadronic/util/src/G4HadronicParametersMessenger.cc index 5f7ff2c12a..6a233b85d5 100644 --- a/source/processes/hadronic/util/src/G4HadronicParametersMessenger.cc +++ b/source/processes/hadronic/util/src/G4HadronicParametersMessenger.cc @@ -69,6 +69,12 @@ G4HadronicParametersMessenger::G4HadronicParametersMessenger( G4HadronicParamete theCRCoalescenceCmd->SetGuidance( "Enable Cosmic Ray (CR) coalescence." ); theCRCoalescenceCmd->SetParameterName( "EnableCRCoalescence", false ); theCRCoalescenceCmd->SetDefaultValue( false ); + + // This command dumps the hadronic parameters to G4cout + theDumpCmd = new G4UIcommand( "/process/had/printParameters", this ); + theDumpCmd->SetGuidance( "Print all Hadronic parameters." ); + theDumpCmd->AvailableForStates( G4State_PreInit, G4State_Idle ); + theDumpCmd->SetToBeBroadcasted( false ); } @@ -77,6 +83,7 @@ G4HadronicParametersMessenger::~G4HadronicParametersMessenger() { delete theVerboseCmd; delete theMaxEnergyCmd; delete theCRCoalescenceCmd; + delete theDumpCmd; } @@ -91,4 +98,7 @@ void G4HadronicParametersMessenger::SetNewValue( G4UIcommand *command, G4String } else if ( command == theCRCoalescenceCmd ) { theHadronicParameters->SetEnableCRCoalescence( theCRCoalescenceCmd->GetNewBoolValue( newValues ) ); } + else if ( command == theDumpCmd ) { + theHadronicParameters->Dump(); + } } diff --git a/source/processes/scoring/History b/source/processes/scoring/History index 62f3a7657b..6d2a52e6bb 100644 --- a/source/processes/scoring/History +++ b/source/processes/scoring/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-12 Ben Morgan (procscore-V11-02-01) +## 2025-02-12 Ben Morgan (procscore-V11-03-00) - Apply [GitHub PR 80](https://github.com/Geant4/geant4/pull/80) - Changes to `G4EnergySplitter` to ensure that each call to `SplitEnergyInVolumes()` utilizes the correct phantom parameterization. diff --git a/source/run/History b/source/run/History index 1c93a4dee1..ef33512d8e 100644 --- a/source/run/History +++ b/source/run/History @@ -6,7 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-02-25 John Apostolakis (run-V11-02-27) +## 2025-06-10 Seth R Johnson (run-V11-03-01) +- Clear surfaces in G4RunManager::ReinitializeGeometry + +## 2025-02-25 John Apostolakis (run-V11-03-00) - Correct when G4WorkerRunManager's InitializeGeometry calls G4GeometryManager's UndertakeOptimisation to contribute to parallel voxelisation. diff --git a/source/run/src/G4RunManager.cc b/source/run/src/G4RunManager.cc index eca1388bf5..30f659ac9e 100644 --- a/source/run/src/G4RunManager.cc +++ b/source/run/src/G4RunManager.cc @@ -35,6 +35,8 @@ #include "G4CopyRandomState.hh" #include "G4GeometryManager.hh" #include "G4HCofThisEvent.hh" +#include "G4LogicalBorderSurface.hh" +#include "G4LogicalSkinSurface.hh" #include "G4LogicalVolume.hh" #include "G4LogicalVolumeStore.hh" #include "G4MTRunManagerKernel.hh" @@ -1015,13 +1017,15 @@ void G4RunManager::ReinitializeGeometry(G4bool destroyFirst, G4bool prop) { if (destroyFirst && G4Threading::IsMasterThread()) { if (verboseLevel > 0) { - G4cout << "#### Assemblies, Volumes and Solids Stores are wiped out." << G4endl; + G4cout << "#### Assembly, Volume, Solid, and Surface Stores are being cleaned." << G4endl; } G4GeometryManager::GetInstance()->OpenGeometry(); G4AssemblyStore::GetInstance()->Clean(); G4PhysicalVolumeStore::GetInstance()->Clean(); G4LogicalVolumeStore::GetInstance()->Clean(); G4SolidStore::GetInstance()->Clean(); + G4LogicalSkinSurface::CleanSurfaceTable(); + G4LogicalBorderSurface::CleanSurfaceTable(); // remove all logical volume pointers from regions // exception: world logical volume pointer must be kept diff --git a/source/tracking/History b/source/tracking/History index 732db1168e..c8ca2bd806 100644 --- a/source/tracking/History +++ b/source/tracking/History @@ -6,6 +6,24 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-02-04 John Allison (tracking-V11-03-01) +- G4RichTrajectoryPoint.hh: + - Add accessors for Pre and PostStepPointGlobalTime. + - This allows fast access for time windowing feature of trajectory modeling. + +## 2025-01-20 John Allison (tracking-V11-03-00) +- G4VTrajectory and G4VTrajectoryPoint: + - Add AttValues caching: + - GetAttValues returns a shared_ptr that points to the object created by + CreateAttValues if not already created. Thus acts as a cache. + - Smart access function - creates on request and stores for future + access. An invalid shared pointer means "not available". Usage: + const auto trajectoryAttValues = aTrajectory.GetAttValues(); + if (trajectoryAttValues) { ... + then use as a normal pointer, but do not delete - simply allow + to go out of scope. + - Protect copy and move constructors and copy and move assignment operators. + ## 2024-10-28 Makoto Asai (tracking-V11-02-05) - Moving check of cloned trajectory from G4Trackingmanager to G4TrackingMessenger to avoid unnecessary check. diff --git a/source/tracking/include/G4RichTrajectoryPoint.hh b/source/tracking/include/G4RichTrajectoryPoint.hh index 13051ac8ed..dbe4d3a3f3 100644 --- a/source/tracking/include/G4RichTrajectoryPoint.hh +++ b/source/tracking/include/G4RichTrajectoryPoint.hh @@ -98,6 +98,9 @@ class G4RichTrajectoryPoint : public G4VTrajectoryPoint const std::map* GetAttDefs() const override; std::vector* CreateAttValues() const override; + G4double GetPreStepPointGlobalTime() const {return fPreStepPointGlobalTime;} + G4double GetPostStepPointGlobalTime() const {return fPostStepPointGlobalTime;} + private: G4ThreeVector fPosition{0., 0., 0.}; diff --git a/source/tracking/include/G4VTrajectory.hh b/source/tracking/include/G4VTrajectory.hh index 5358b087fa..ea75a3baab 100644 --- a/source/tracking/include/G4VTrajectory.hh +++ b/source/tracking/include/G4VTrajectory.hh @@ -48,6 +48,7 @@ #include #include +#include class G4Step; class G4VTrajectoryPoint; @@ -114,11 +115,31 @@ class G4VTrajectory // checked with G4AttCheck) and delete the list after use. See // G4Trajectory for an example of a concrete implementation of this // method and G4VTrajectory::ShowTrajectory for an example of its use. + // The caller is expected to take ownership of the returned pointer + // and delete it appropriately. virtual std::vector* CreateAttValues() const { return nullptr; } + + // Smart access function - creates on request and stores for future + // access. An invalid shared pointer means "not available". Usage: + // const auto trajectoryAttValues = aTrajectory.GetAttValues(); + // if (trajectoryAttValues) { ... + // then use as a normal pointer, but do not delete - simply allow + // to go out of scope. + std::shared_ptr> GetAttValues() const; // Methods invoked exclusively by G4TrackingManager virtual void AppendStep(const G4Step* aStep) = 0; virtual void MergeTrajectory(G4VTrajectory* secondTrajectory) = 0; + +protected: + G4VTrajectory(const G4VTrajectory& right) = default; + G4VTrajectory& operator=(const G4VTrajectory& right) = default; + G4VTrajectory(G4VTrajectory&&) = default; + G4VTrajectory& operator=(G4VTrajectory&&) = default; + +private: + // Cached att values + mutable std::shared_ptr> fpAttValues; }; #endif diff --git a/source/tracking/include/G4VTrajectoryPoint.hh b/source/tracking/include/G4VTrajectoryPoint.hh index b1b74cad06..646ffbf707 100644 --- a/source/tracking/include/G4VTrajectoryPoint.hh +++ b/source/tracking/include/G4VTrajectoryPoint.hh @@ -43,6 +43,7 @@ #include #include +#include class G4AttDef; class G4AttValue; @@ -83,7 +84,27 @@ class G4VTrajectoryPoint // checked with G4AttCheck) and delete the list after use. See // G4Trajectory for an example of a concrete implementation of this // method and G4VTrajectory::ShowTrajectory() for an example of its use. + // The caller is expected to take ownership of the returned pointer + // and delete it appropriately. virtual std::vector* CreateAttValues() const { return nullptr; } + + // Smart access function - creates on request and stores for future + // access. An invalid shared pointer means "not available". Usage: + // const auto trajectoryPointAttValues = aTrajectoryPoint->GetAttValues(); + // if (trajectoryPointAttValues) { ... + // then use as a normal pointer, but do not delete - simply allow + // to go out of scope. + std::shared_ptr> GetAttValues() const; + +protected: + G4VTrajectoryPoint(const G4VTrajectoryPoint& right) = default; + G4VTrajectoryPoint& operator=(const G4VTrajectoryPoint& right) = default; + G4VTrajectoryPoint(G4VTrajectoryPoint&&) = default; + G4VTrajectoryPoint& operator=(G4VTrajectoryPoint&&) = default; + +private: + // Cached att values + mutable std::shared_ptr> fpAttValues; }; #endif diff --git a/source/tracking/sources.cmake b/source/tracking/sources.cmake index 0c6dd17c48..b0982ab277 100644 --- a/source/tracking/sources.cmake +++ b/source/tracking/sources.cmake @@ -59,6 +59,7 @@ geant4_add_module(G4tracking G4MultiTrackingAction.cc G4VSteppingVerbose.cc G4VTrajectory.cc + G4VTrajectoryPoint.cc G4MultiSteppingAction.cc) geant4_module_compile_definitions(G4tracking PRIVATE G4TRACKING_ALLOC_EXPORT) diff --git a/source/tracking/src/G4RichTrajectory.cc b/source/tracking/src/G4RichTrajectory.cc index 1424d653a8..92e0df7dee 100644 --- a/source/tracking/src/G4RichTrajectory.cc +++ b/source/tracking/src/G4RichTrajectory.cc @@ -100,7 +100,8 @@ G4RichTrajectory::G4RichTrajectory(const G4Track* aTrack) fpRichPointContainer->push_back(new G4RichTrajectoryPoint(aTrack)); } -G4RichTrajectory::G4RichTrajectory(G4RichTrajectory& right) +G4RichTrajectory::G4RichTrajectory(G4RichTrajectory& right) +: G4VTrajectory() { ParticleName = right.ParticleName; PDGCharge = right.PDGCharge; diff --git a/source/tracking/src/G4SmoothTrajectory.cc b/source/tracking/src/G4SmoothTrajectory.cc index b14d285950..c6e0f43151 100644 --- a/source/tracking/src/G4SmoothTrajectory.cc +++ b/source/tracking/src/G4SmoothTrajectory.cc @@ -82,6 +82,7 @@ G4SmoothTrajectory::G4SmoothTrajectory(const G4Track* aTrack) } G4SmoothTrajectory::G4SmoothTrajectory(G4SmoothTrajectory& right) +: G4VTrajectory() { ParticleName = right.ParticleName; PDGCharge = right.PDGCharge; diff --git a/source/tracking/src/G4SmoothTrajectoryPoint.cc b/source/tracking/src/G4SmoothTrajectoryPoint.cc index e800ecc52f..af1d461978 100644 --- a/source/tracking/src/G4SmoothTrajectoryPoint.cc +++ b/source/tracking/src/G4SmoothTrajectoryPoint.cc @@ -58,7 +58,8 @@ G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint( {} G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint& right) - : fPosition(right.fPosition), fAuxiliaryPointVector(right.fAuxiliaryPointVector) + : G4VTrajectoryPoint(), + fPosition(right.fPosition), fAuxiliaryPointVector(right.fAuxiliaryPointVector) {} G4SmoothTrajectoryPoint::~G4SmoothTrajectoryPoint() { delete fAuxiliaryPointVector; } diff --git a/source/tracking/src/G4Trajectory.cc b/source/tracking/src/G4Trajectory.cc index e9ffb3e078..1278fe0464 100644 --- a/source/tracking/src/G4Trajectory.cc +++ b/source/tracking/src/G4Trajectory.cc @@ -76,6 +76,7 @@ G4Trajectory::G4Trajectory(const G4Track* aTrack) } G4Trajectory::G4Trajectory(G4Trajectory& right) +: G4VTrajectory() { ParticleName = right.ParticleName; PDGCharge = right.PDGCharge; diff --git a/source/tracking/src/G4TrajectoryPoint.cc b/source/tracking/src/G4TrajectoryPoint.cc index 8ee62a8564..2ab5d9920d 100644 --- a/source/tracking/src/G4TrajectoryPoint.cc +++ b/source/tracking/src/G4TrajectoryPoint.cc @@ -57,7 +57,9 @@ G4Allocator*& masterTrajectoryPointAllocator() G4TrajectoryPoint::G4TrajectoryPoint(G4ThreeVector pos) { fPosition = pos; } -G4TrajectoryPoint::G4TrajectoryPoint(const G4TrajectoryPoint& right) : fPosition(right.fPosition) {} +G4TrajectoryPoint::G4TrajectoryPoint(const G4TrajectoryPoint& right) +: G4VTrajectoryPoint(), + fPosition(right.fPosition) {} G4TrajectoryPoint::~G4TrajectoryPoint() = default; diff --git a/source/tracking/src/G4VTrajectory.cc b/source/tracking/src/G4VTrajectory.cc index 9ceb9ff5f1..f324ba7dfd 100644 --- a/source/tracking/src/G4VTrajectory.cc +++ b/source/tracking/src/G4VTrajectory.cc @@ -113,3 +113,10 @@ void G4VTrajectory::DrawTrajectory() const pVVisManager->DispatchToModel(*this); } } + +std::shared_ptr> G4VTrajectory::GetAttValues() const { + if (!fpAttValues) { + fpAttValues = std::make_shared>(*CreateAttValues()); + } + return fpAttValues; +} diff --git a/examples/extended/parallel/TBB/B2b/include/B2ActionInitialization.hh b/source/tracking/src/G4VTrajectoryPoint.cc similarity index 72% rename from examples/extended/parallel/TBB/B2b/include/B2ActionInitialization.hh rename to source/tracking/src/G4VTrajectoryPoint.cc index 620e7bed72..31e232bb1b 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2ActionInitialization.hh +++ b/source/tracking/src/G4VTrajectoryPoint.cc @@ -23,28 +23,22 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// G4VTrajectoryPoint class implementation // -/// \file B2ActionInitialization.hh -/// \brief Definition of the B2ActionInitialization class +// Contact: +// Questions and comments to this code should be sent to +// Katsuya Amako (e-mail: Katsuya.Amako@kek.jp) +// Makoto Asai (e-mail: asai@slac.stanford.edu) +// Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp) +// -------------------------------------------------------------------- -#ifndef B2ActionInitialization_h -#define B2ActionInitialization_h 1 +#include "G4VTrajectoryPoint.hh" -#include "G4VUserActionInitialization.hh" +#include "G4AttValue.hh" -class B4DetectorConstruction; - -/// Action initialization class. -/// - -class B2ActionInitialization : public G4VUserActionInitialization -{ - public: - B2ActionInitialization(); - virtual ~B2ActionInitialization(); - - virtual void BuildForMaster() const; - virtual void Build() const; -}; - -#endif +std::shared_ptr> G4VTrajectoryPoint::GetAttValues() const { + if (!fpAttValues) { + fpAttValues = std::make_shared>(*CreateAttValues()); + } + return fpAttValues; +} diff --git a/source/visualization/OpenGL/History b/source/visualization/OpenGL/History index a71aa57c47..609328616e 100644 --- a/source/visualization/OpenGL/History +++ b/source/visualization/OpenGL/History @@ -6,10 +6,60 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-07 Gabriele Cosmo (opengl-V11-02-10) +## 2025-05-23 Andrea Barresi (opengl-V11-03-06) +- G4OpenGLWin32Viewer: + - Added SwitchToMasterThread method to draw trajectories at the end of run in MT mode. + +## 2025-05-12 Andrea Barresi (opengl-V11-03-05) +- G4OpenGLQtViewer.cc: + - Fixed the original pick feature to show pick info window and removed the workaround. + +## 2025-04-29 John Allison (opengl-V11-03-04) +- G4OpenGLQtViewer.cc: + - Restore pick information window (workaround) in the OGLSQt driver. + - For some reason - maybe recent "improvements" - the current pick feature + does not work. Investigation shows that information is picked, as designed, + but the pick information window does not show. So far, we have not + been able to find the problem - hence this workaround. + - This workaround is a single block of code, ll.4630-4661, that can easily + be removed if the original problem is understood and fixed. + - In this workaround, each picked object causes a window of information + to pop up. They are standalone windows, and may be kept or deleted. They + are cleaned up by Qt at end of job. + - Remove some commented out statements left over from the previous tag. + - With the introduction of the new scene tree, there should never be a + reason to use /vis/touchable/set commands. In fact to do so interferes + with the new scene tree. + +## 2025-04-09 John Allison (opengl-V11-03-03) +- G4OpenGLQtViewer.cc: + - Comment out calls to TouchableSetVisibility/Colour. + - No longer needed since the introduction of the new scene tree. + - Actually interferes with the new scene tree. + - Comment out some debug printing to std::cout. + +## 2025-04-07 Gabriele Cosmo (opengl-V11-03-02) - Fixed compilation errors on Windows in G4OpenGLWin32Viewer, triggered when enabling GL WIN32 support, as reported in problem report #2599. +## 2025-02-01 John Allison (opengl-V11-03-01) +- Co-works: visman-V11-03-02. +- G4OpenGLStoredViewer.cc: + - Follow changes in G4ViewParameters. + +## 2025-01-06 John Allison (opengl-V11-03-00) +- Co-works: visman-V11-03-00, interfaces-V11-03-00, modeling-V11-03-00, + visQt3D-V11-03-00, vis_toolssg-V11-03-00, openinventor-V11-03-00, + greps-V11-03-00. +- Re-instate the transparency slider (see lengthy explanation in management/History). +- G4OpenGLImmediateSceneHandler: + - Minor improvement to comment. +- G4OpenGLStoredViewer: + - Initiate kernel visit if TransparencyByDepth or its options change. +- G4OpenGLStoredQtViewer: + - Initiate kernel visit if TransparencyByDepth or its options change. + - (Not sure the Qt viewer needs its own compare function.) + ## 2024-09-13 John Allison (opengl-V11-02-09) - G4OpenGLStoredQtSceneHandler.cc: - G4OpenGLStoredQtSceneHandler::ClearStore(): diff --git a/source/visualization/OpenGL/include/private/G4OpenGLWin32Viewer.hh b/source/visualization/OpenGL/include/private/G4OpenGLWin32Viewer.hh index a0dfeb87ff..ca93ee03c5 100644 --- a/source/visualization/OpenGL/include/private/G4OpenGLWin32Viewer.hh +++ b/source/visualization/OpenGL/include/private/G4OpenGLWin32Viewer.hh @@ -45,6 +45,7 @@ public: virtual ~G4OpenGLWin32Viewer (); void SetView (); void ShowView (); + void SwitchToMasterThread(); protected: void GetWin32Connection (); diff --git a/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc b/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc index 576a3eb80e..d54edb455c 100644 --- a/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc @@ -500,8 +500,8 @@ G4OpenGLQtViewer::~G4OpenGLQtViewer ( if (fSceneTreeWidget != NULL) { if (fSceneTreeWidget->layout() != NULL) { while ((wItem = fSceneTreeWidget->layout()->takeAt(0)) != 0) { - delete wItem->widget(); - delete wItem; + delete wItem->widget(); + delete wItem; } } } @@ -2688,8 +2688,6 @@ void G4OpenGLQtViewer::setCheckComponent(QTreeWidgetItem* item,bool check) const PVPath& fullPath = fTreeItemModels[item->data(0,Qt::UserRole).toInt()]; // If a physical volume if (fullPath.size() > 0) { - SetTouchable(fullPath); - TouchableSetVisibility(fullPath, check); fMouseOnSceneTree = true; } } @@ -3642,7 +3640,7 @@ void G4OpenGLQtViewer::changeColorAndTransparency(QTreeWidgetItem* item,int) { } -void G4OpenGLQtViewer::changeColorAndTransparency(GLuint index, G4Color color) { +void G4OpenGLQtViewer::changeColorAndTransparency(GLuint index, G4Color /*color*/) { // change vis attributes to set new colour G4int iPO = index; @@ -3650,8 +3648,6 @@ void G4OpenGLQtViewer::changeColorAndTransparency(GLuint index, G4Color color) { const PVPath& fullPath = fTreeItemModels[iPO]; // If a physical volume if (fullPath.size()) { - SetTouchable(fullPath); - TouchableSetColour(fullPath, color); fMouseOnSceneTree = true; } } @@ -4628,9 +4624,9 @@ void G4OpenGLQtViewer::updatePickInfosWidget(int aX, int aY) { ed->setVisible((false)); ed->append(newStr.join("")); - std::cout << pickCoutButton->text().toStdString() << " "<< fPickInfosWidget->layout()->count()-1<< std::endl; int tmp = fPickInfosWidget->layout()->count()-1; connect(pickCoutButton, &QPushButton::clicked , [this, tmp](){ this->toggleSceneTreeComponentPickingCout(tmp);}); + } } @@ -4671,6 +4667,7 @@ void G4OpenGLQtViewer::updatePickInfosWidget(int aX, int aY) { } // set picking cout visible fPickInfosScrollArea->setVisible(true); + dial->show(); } @@ -4707,8 +4704,6 @@ void G4OpenGLQtViewer::toggleSceneTreeComponentPickingCout(int pickItem) { void G4OpenGLQtViewer::currentTabActivated(int currentTab) { if (fUiQt->GetViewerTabWidget()->tabText(currentTab) == GetName().data()) { createViewerPropertiesWidget(); -// createPickInfosWidget(); // Causes a /vis/set/touchable command to do with... -// createSceneTreeWidget(); // ...this old scene tree widget (no longer used) } } diff --git a/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc b/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc index ea0b6ce4e7..5d54727ff9 100644 --- a/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc @@ -154,7 +154,9 @@ G4bool G4OpenGLStoredQtViewer::CompareForKernelVisit(G4ViewParameters& lastVP) (lastVP.GetBackgroundColour ()!= fVP.GetBackgroundColour ())|| (lastVP.IsPicking () != fVP.IsPicking ()) || (lastVP.IsSpecialMeshRendering() != fVP.IsSpecialMeshRendering()) || - (lastVP.GetSpecialMeshRenderingOption() != fVP.GetSpecialMeshRenderingOption())) + (lastVP.GetSpecialMeshRenderingOption() != fVP.GetSpecialMeshRenderingOption()) || + (lastVP.GetTransparencyByDepth() != fVP.GetTransparencyByDepth()) + ) return true; // Don't check VisAttributesModifiers if this comparison has been @@ -205,6 +207,10 @@ G4bool G4OpenGLStoredQtViewer::CompareForKernelVisit(G4ViewParameters& lastVP) (lastVP.GetSpecialMeshVolumes() != fVP.GetSpecialMeshVolumes())) return true; + if (lastVP.GetTransparencyByDepth() > 0. && + lastVP.GetTransparencyByDepthOption() != fVP.GetTransparencyByDepthOption()) + return true; + return false; } diff --git a/source/visualization/OpenGL/src/G4OpenGLStoredViewer.cc b/source/visualization/OpenGL/src/G4OpenGLStoredViewer.cc index 1c598ef499..b2fe8cc3f4 100644 --- a/source/visualization/OpenGL/src/G4OpenGLStoredViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLStoredViewer.cc @@ -101,7 +101,8 @@ G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) { (lastVP.IsSpecialMeshRendering() != fVP.IsSpecialMeshRendering()) || (lastVP.GetSpecialMeshRenderingOption() != - fVP.GetSpecialMeshRenderingOption()) + fVP.GetSpecialMeshRenderingOption()) || + (lastVP.GetTransparencyByDepth() != fVP.GetTransparencyByDepth()) ) return true; @@ -141,6 +142,10 @@ G4bool G4OpenGLStoredViewer::CompareForKernelVisit(G4ViewParameters& lastVP) { (lastVP.GetSpecialMeshVolumes() != fVP.GetSpecialMeshVolumes())) return true; + if (lastVP.GetTransparencyByDepth() > 0. && + lastVP.GetTransparencyByDepthOption() != fVP.GetTransparencyByDepthOption()) + return true; + // Time window parameters operate on the existing database so no need // to rebuild even if they change. @@ -151,8 +156,8 @@ void G4OpenGLStoredViewer::DrawDisplayLists () { // We moved these from G4OpenGLViewer to G4ViewParamaters. To avoid // editing many lines below we introduce these convenient aliases. -#define CONVENIENT_DOUBLE_ALIAS(q) const G4double& f##q = fVP.Get##q(); -#define CONVENIENT_BOOL_ALIAS(q) const G4bool& f##q = fVP.Is##q(); +#define CONVENIENT_DOUBLE_ALIAS(q) const G4double& f##q = fVP.GetTimeParameters().f##q; +#define CONVENIENT_BOOL_ALIAS(q) const G4bool& f##q = fVP.GetTimeParameters().f##q; CONVENIENT_DOUBLE_ALIAS(StartTime) CONVENIENT_DOUBLE_ALIAS(EndTime) CONVENIENT_DOUBLE_ALIAS(FadeFactor) diff --git a/source/visualization/OpenGL/src/G4OpenGLWin32Viewer.cc b/source/visualization/OpenGL/src/G4OpenGLWin32Viewer.cc index a8a7766d36..9488e8ad8e 100644 --- a/source/visualization/OpenGL/src/G4OpenGLWin32Viewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLWin32Viewer.cc @@ -71,6 +71,15 @@ void G4OpenGLWin32Viewer::ShowView ( } } +void G4OpenGLWin32Viewer::SwitchToMasterThread() +{ + if (G4Threading::IsMultithreadedApplication()) { + if (fSceneHandler.GetScene() && fSceneHandler.GetScene()->GetEndOfEventModelList().size()) { + fNeedKernelVisit = true; + } + } +} + ////////////////////////////////////////////////////////////////////////////// void G4OpenGLWin32Viewer::GetWin32Connection ( ) diff --git a/source/visualization/OpenInventor/History b/source/visualization/OpenInventor/History index 37e2bf5694..30f1b051e6 100644 --- a/source/visualization/OpenInventor/History +++ b/source/visualization/OpenInventor/History @@ -6,6 +6,29 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-03-06 John Allison (openinventor-V11-03-02) +- G4OpenInventorViewer: + - Implement 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. + +## 2025-02-13 John Allison (openinventor-V11-03-01) +- G4OpenInventorViewer.cc: CompareForKernelVisit: + - Cause kernel visit if viewer start/end time changes. + - This is to take advantage of the new generic time window - modeling-V11-03-04. + +## 2025-01-06 John Allison (openinventor-V11-03-00) +- Co-works: visman-V11-03-00, interfaces-V11-03-00, modeling-V11-03-00, + opengl-V11-03-00, visQt3D-V11-03-00, vis_toolssg-V11-03-00, greps-V11-03-00. +- Re-instate the transparency slider (see lengthy explanation in management/History). +- G4OpenInventorViewer.cc: + - Initiate kernel visit if TransparencyByDepth or its options change. + ## 2024-06-06 Guy Barrand (openinventor-V11-02-01) - G4OpenInventorQtViewer: Qt6: reparent the G4OpenInventorQtExaminerViewer in its own QWidget (and not in the global SoQt::getTopLevelWidget()). diff --git a/source/visualization/OpenInventor/include/private/G4OpenInventorViewer.hh b/source/visualization/OpenInventor/include/private/G4OpenInventorViewer.hh index 7ef3c1dea2..a5125b846a 100644 --- a/source/visualization/OpenInventor/include/private/G4OpenInventorViewer.hh +++ b/source/visualization/OpenInventor/include/private/G4OpenInventorViewer.hh @@ -86,6 +86,7 @@ private: static void lookedAt(SoCamera*,SbVec3f & dir, SbVec3f & up); private: G4bool CompareForKernelVisit(G4ViewParameters&); + G4bool CompareForTransientsRedraw(G4ViewParameters&); void DrawDetector(); private: G4ViewParameters fLastVP; // Memory for making kernel visit decisions. diff --git a/source/visualization/OpenInventor/src/G4OpenInventorViewer.cc b/source/visualization/OpenInventor/src/G4OpenInventorViewer.cc index e99b9ac950..e79c6c4cf0 100644 --- a/source/visualization/OpenInventor/src/G4OpenInventorViewer.cc +++ b/source/visualization/OpenInventor/src/G4OpenInventorViewer.cc @@ -189,12 +189,10 @@ G4bool G4OpenInventorViewer::CompareForKernelVisit(G4ViewParameters& vp) { // needs a kernel visit. (In this respect, it differs from the // OpenGL drivers, where it's done in SetView.) (vp.GetScaleFactor () != fVP.GetScaleFactor ()) || - (vp.GetVisAttributesModifiers() != - fVP.GetVisAttributesModifiers()) || - (vp.IsSpecialMeshRendering() != - fVP.IsSpecialMeshRendering()) || - (vp.GetSpecialMeshRenderingOption() != - fVP.GetSpecialMeshRenderingOption()) + (vp.GetVisAttributesModifiers() != fVP.GetVisAttributesModifiers()) || + (vp.IsSpecialMeshRendering() != fVP.IsSpecialMeshRendering()) || + (vp.GetSpecialMeshRenderingOption()!= fVP.GetSpecialMeshRenderingOption())|| + (vp.GetTransparencyByDepth() != fVP.GetTransparencyByDepth()) ) return true; @@ -228,6 +226,18 @@ G4bool G4OpenInventorViewer::CompareForKernelVisit(G4ViewParameters& vp) { (vp.GetSpecialMeshVolumes() != fVP.GetSpecialMeshVolumes())) return true; + if (vp.GetTransparencyByDepth() > 0. && + vp.GetTransparencyByDepthOption() != fVP.GetTransparencyByDepthOption()) + return true; + + return false; +} + +G4bool G4OpenInventorViewer::CompareForTransientsRedraw(G4ViewParameters& vp) +{ + if (vp.GetTimeParameters() != fVP.GetTimeParameters()) { + return fTransientsNeedRedrawing = true; + } return false; } @@ -383,8 +393,21 @@ G4OpenInventorViewer::lookedAt(SoCamera* camera,SbVec3f & dir, SbVec3f & up) void G4OpenInventorViewer::DrawView () { //G4cout << "debug Iv::DrawViewer " <GetColour()) || (vp.GetBackgroundColour ()!= fVP.GetBackgroundColour ())|| (vp.IsPicking () != fVP.IsPicking ()) || - // Scaling for Open Inventor is done by the scene handler so it + // Scaling for Qt3D is done by the scene handler (is it really????) so it // needs a kernel visit. (In this respect, it differs from the // OpenGL drivers, where it's done in SetView.) (vp.GetScaleFactor () != fVP.GetScaleFactor ()) || - (vp.GetVisAttributesModifiers() != - fVP.GetVisAttributesModifiers()) || - (vp.IsSpecialMeshRendering() != - fVP.IsSpecialMeshRendering()) || - (vp.GetSpecialMeshRenderingOption() != - fVP.GetSpecialMeshRenderingOption()) + (vp.GetVisAttributesModifiers() != fVP.GetVisAttributesModifiers()) || + (vp.IsSpecialMeshRendering() != fVP.IsSpecialMeshRendering()) || + (vp.GetSpecialMeshRenderingOption()!= fVP.GetSpecialMeshRenderingOption())|| + (vp.GetTransparencyByDepth() != fVP.GetTransparencyByDepth()) ) return true; @@ -362,6 +365,18 @@ G4bool G4Qt3DViewer::CompareForKernelVisit(G4ViewParameters& vp) (vp.GetSpecialMeshVolumes() != fVP.GetSpecialMeshVolumes())) return true; + if (vp.GetTransparencyByDepth() > 0. && + vp.GetTransparencyByDepthOption() != fVP.GetTransparencyByDepthOption()) + return true; + + return false; +} + +G4bool G4Qt3DViewer::CompareForTransientsRedraw(G4ViewParameters& vp) +{ + if (vp.GetTimeParameters() != fVP.GetTimeParameters()) { + return fTransientsNeedRedrawing = true; + } return false; } diff --git a/source/visualization/RayTracer/History b/source/visualization/RayTracer/History index a0bf7b47d7..00f3aea60e 100644 --- a/source/visualization/RayTracer/History +++ b/source/visualization/RayTracer/History @@ -6,10 +6,36 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2025-04-12 John Allison (raytracer-V11-02-00) +## 2025-04-12 John Allison (raytracer-V11-03-01) - G4RayTracerXViewer.cc: - Use G4TheMTRayTracer. +## 2025-04-04 John Allison (raytracer-V11-03-00) +- Coworks: visman-V11-03-07, cmake-V11-03-02. +- Introduce RayTracerQt. + - 6 new files and modification of sources.cmake. + - Uses multithreading tracer, G4TheMTRayTracer. +- Other changes (improve Ray Tracer experience): + - G4RayTracerViewer: + - Use G4Timer to estimate fKernelVisitElapsedTimeSeconds. + - Normally it's ProcessView() that takes the time, but for RayTracer it's Trace(). + - Long elapsed times (currently >0.1 s) inhibit fancy options such as zoom in on + and twinkle that require multiple rebuilds. + - G4VRTScanner (and inherited classes): + - Remove misleading and un-used methods: GetGSName() and GetGSNickName(). + - Introduce nicknames (long names still work): + - RT (for RayTracer) + - RTX (for RayTracerX) + - RTQt (for RayTracerQt) +- With multithreading, image construction is quite fast. Maybe 1000x1000 could be + the default. + - Use /vis/open RTqt 1000x1000 + - (Currently the default is 600x600). +- Most vis commands work fine: + - /vis/viewer/set/viewpoint..., /vis/viewer/zoom, vis/viewer/centreAndZoomInOn,... +- Even some of the scene tree actions work. E.g: + - Select you chosen volume, right click, and click on centreAndZoomInOn. + ## 2023-03-22 Ben Morgan (raytracer-V11-01-01) - Export public compile definitions to indicate availablity of specific drivers. Moves to "use on link" model. diff --git a/examples/extended/parallel/TBB/B2b/include/B2EventAction.hh b/source/visualization/RayTracer/include/G4RayTracerQt.hh similarity index 76% rename from examples/extended/parallel/TBB/B2b/include/B2EventAction.hh rename to source/visualization/RayTracer/include/G4RayTracerQt.hh index d3e4f30652..3aa8558bd1 100644 --- a/examples/extended/parallel/TBB/B2b/include/B2EventAction.hh +++ b/source/visualization/RayTracer/include/G4RayTracerQt.hh @@ -24,27 +24,28 @@ // ******************************************************************** // // -/// \file B2EventAction.hh -/// \brief Definition of the B2EventAction class +// +// +// John Allison 4th March 2025 -#ifndef B2EventAction_h -#define B2EventAction_h 1 +#ifndef G4RAYTRACERQT_HH +#define G4RAYTRACERQT_HH -#include "G4UserEventAction.hh" -#include "globals.hh" +// class description: +// +// G4RayTracerQt +// Qt window version of RayTracer - opens Qt window for viewing as well +// as producing jpeg file just like G4RayTracer. -/// Event action class +#include "G4VGraphicsSystem.hh" -class B2EventAction : public G4UserEventAction +class G4RayTracerQt : public G4VGraphicsSystem { - public: - B2EventAction(); - virtual ~B2EventAction(); - - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + public: // with description + G4RayTracerQt(); + ~G4RayTracerQt(); + G4VSceneHandler* CreateSceneHandler (const G4String& ); + G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& ); }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/source/visualization/RayTracer/include/private/G4RTQtScanner.hh b/source/visualization/RayTracer/include/private/G4RTQtScanner.hh new file mode 100644 index 0000000000..1d0af25b61 --- /dev/null +++ b/source/visualization/RayTracer/include/private/G4RTQtScanner.hh @@ -0,0 +1,78 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// + +#ifndef G4RTQtScanner_H +#define G4RTQtScanner_H 1 + +// class description: +// +// G4RTQtScanner +// Provides a sequence of window coordinates suitable for a visible +// window of ever increasing resolution. + +#include "G4VRTScanner.hh" + +#include + +class G4ViewParameters; +class QLabel; +class QImage; + +class G4RTQtScanner: public G4VRTScanner, QScrollArea { + + public: // with description + + G4RTQtScanner(); + virtual ~G4RTQtScanner(); + + // Compiler defaults for copy constructor and assignmemt. + + virtual void Initialize(G4int nRow, G4int nColumn); + // Intialises scanner for window with nRow rows and nColumn columns. + + virtual G4bool Coords(G4int& iRow, G4int& iColumn); + // Supplies coordinate (iRow,iColumn) and returns false when the + // sequence has finished, i.e., on the call *after* suplying the + // last valid coordinate. + + virtual void Draw + (unsigned char red, unsigned char green, unsigned char blue); + // Draw coloured square at current position. + + G4bool GetQtWindow(const G4String& name, G4ViewParameters&); + +protected: + + G4int theNRow, theNColumn, theIRow, theIColumn; + G4int theWindowSizeX, theWindowSizeY; + QLabel* fpImageLabel; + QImage* fpImage; +}; + +#endif diff --git a/source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh b/source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh index 4cc8495149..170762271f 100644 --- a/source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh +++ b/source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh @@ -46,14 +46,6 @@ public: // with description // Compiler defaults for copy constructor and assignmemt. - virtual const G4String& GetGSName() const; - // Get name that acts as graphics system name. - - virtual const G4String& GetGSNickname() const; - // Get name that acts as graphics system nickname. It is this that - // the user specifies on the /vis/open and /vis/sceneHandler/create - // commands. - virtual void Initialize(G4int nRow, G4int nColumn); // Intialises scanner for window with nRow rows and nColumn columns. @@ -63,7 +55,6 @@ public: // with description // last valid coordinate. protected: - G4String theGSName, theGSNickname; G4int theNRow, theNColumn, theIRow, theIColumn; }; diff --git a/source/visualization/RayTracer/include/private/G4RTXScanner.hh b/source/visualization/RayTracer/include/private/G4RTXScanner.hh index 6cfba70fd8..73a883886a 100644 --- a/source/visualization/RayTracer/include/private/G4RTXScanner.hh +++ b/source/visualization/RayTracer/include/private/G4RTXScanner.hh @@ -52,14 +52,6 @@ public: // with description // Compiler defaults for copy constructor and assignmemt. - virtual const G4String& GetGSName() const; - // Get name that acts as graphics system name. - - virtual const G4String& GetGSNickname() const; - // Get name that acts as graphics system nickname. It is this that - // the user specifies on the /vis/open and /vis/sceneHandler/create - // commands. - virtual void Initialize(G4int nRow, G4int nColumn); // Intialises scanner for window with nRow rows and nColumn columns. @@ -75,7 +67,6 @@ public: // with description G4bool GetXWindow(const G4String& name, G4ViewParameters&); protected: - G4String theGSName, theGSNickname; G4int theNRow, theNColumn, theStep, theIRow, theIColumn; // X Window variables... Display* display; diff --git a/source/processes/hadronic/models/lend/include/G4GIDI_mass.hh b/source/visualization/RayTracer/include/private/G4RayTracerQtViewer.hh similarity index 83% rename from source/processes/hadronic/models/lend/include/G4GIDI_mass.hh rename to source/visualization/RayTracer/include/private/G4RayTracerQtViewer.hh index 4256faf2db..be115de28e 100644 --- a/source/processes/hadronic/models/lend/include/G4GIDI_mass.hh +++ b/source/visualization/RayTracer/include/private/G4RayTracerQtViewer.hh @@ -23,14 +23,20 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/* -# <> -# <> -*/ -#ifndef G4GIDI_mass_h_included -#define G4GIDI_mass_h_included 1 +// -double G4GIDI_targetMass( const char *targetSymbol ); -double G4GIDI_Z_AMass( int iZ, int iA ); +// John Allison 4th March 2025 -#endif // End of G4GIDI_mass_h_included +#ifndef G4RAYTRACERQTVIEWER_HH +#define G4RAYTRACERQTVIEWER_HH + +#include "G4RayTracerViewer.hh" + +class G4RayTracerQtViewer: public G4RayTracerViewer { +public: + G4RayTracerQtViewer(G4VSceneHandler&,const G4String& name); + virtual ~G4RayTracerQtViewer(); + void Initialise(); +}; + +#endif diff --git a/source/visualization/RayTracer/include/private/G4VRTScanner.hh b/source/visualization/RayTracer/include/private/G4VRTScanner.hh index 3498a3013d..bdf4298ed1 100644 --- a/source/visualization/RayTracer/include/private/G4VRTScanner.hh +++ b/source/visualization/RayTracer/include/private/G4VRTScanner.hh @@ -44,14 +44,6 @@ public: // with description G4VRTScanner(); virtual ~G4VRTScanner(); - virtual const G4String& GetGSName() const = 0; - // Get name that acts as graphics system name. - - virtual const G4String& GetGSNickname() const = 0; - // Get name that acts as graphics system nickname. It is this that - // the user specifies on the /vis/open and /vis/sceneHandler/create - // commands. - virtual void Initialize(G4int nRow, G4int nColumn) = 0; // Intialises scanner for window with nRow rows and nColumn columns. diff --git a/source/visualization/RayTracer/sources.cmake b/source/visualization/RayTracer/sources.cmake index 0c661dd37c..cc62349c5b 100644 --- a/source/visualization/RayTracer/sources.cmake +++ b/source/visualization/RayTracer/sources.cmake @@ -75,6 +75,7 @@ geant4_module_link_libraries(G4RayTracer # X11 RayTracer only if selected if(GEANT4_USE_RAYTRACER_X11) + geant4_module_sources(G4RayTracer PUBLIC_HEADERS G4RayTracerX.hh @@ -89,4 +90,27 @@ if(GEANT4_USE_RAYTRACER_X11) geant4_module_compile_definitions(G4RayTracer PUBLIC G4VIS_USE_RAYTRACERX) geant4_module_link_libraries(G4RayTracer PRIVATE X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) + +endif() + +# Qt RayTracer only if selected +if(GEANT4_USE_RAYTRACER_QT) + + geant4_module_sources(G4RayTracer + PUBLIC_HEADERS + G4RayTracerQt.hh + PRIVATE_HEADERS + G4RayTracerQtViewer.hh + G4RTQtScanner.hh + SOURCES + G4RayTracerQt.cc + G4RayTracerQtViewer.cc + G4RTQtScanner.cc) + + geant4_module_compile_definitions(G4RayTracer PUBLIC G4VIS_USE_RAYTRACER_QT) + + geant4_module_link_libraries(G4RayTracer PRIVATE G4UIimplementation + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets) + endif() diff --git a/source/visualization/RayTracer/src/G4RTQtScanner.cc b/source/visualization/RayTracer/src/G4RTQtScanner.cc new file mode 100644 index 0000000000..e821ecfbf6 --- /dev/null +++ b/source/visualization/RayTracer/src/G4RTQtScanner.cc @@ -0,0 +1,117 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// + +#include "G4RTQtScanner.hh" + +//#include "G4TheRayTracer.hh" +//#include "G4RayTracerQtViewer.hh" +#include "G4ViewParameters.hh" +#include "G4UImanager.hh" +#include "G4UIQt.hh" + +#include +#include +#include +#include + +#define G4warn G4cout + +G4RTQtScanner::G4RTQtScanner() +: G4VRTScanner() +, theNRow(0), theNColumn(0) +, theIRow(0), theIColumn(0) +, fpImageLabel(nullptr) +, fpImage(nullptr) +{} + +G4RTQtScanner::~G4RTQtScanner() {} + +void G4RTQtScanner::Initialize(G4int nRow, G4int nColumn) { + theNRow = nRow; + theNColumn = nColumn; + theIRow = 0; + theIColumn = -1; +} + +G4bool G4RTQtScanner::Coords(G4int& iRow, G4int& iColumn) +{ + // Increment column and, if necessary, increment row... + ++theIColumn; + if (theIColumn >= theNColumn) { + theIColumn = 0; + ++theIRow; + } + + // Return if finished... + if (theIRow >= theNRow) { + // ...and paint the image + fpImageLabel->setPixmap(QPixmap::fromImage(*fpImage)); + QPainter windowPainter(fpImageLabel); + windowPainter.drawImage(0, 0, *fpImage); + return false; + } + + // Return current row and column... + iRow = theIRow; + iColumn = theIColumn; + return true; +} + +G4bool G4RTQtScanner::GetQtWindow(const G4String& name, G4ViewParameters& vp) +{ + auto UI = G4UImanager::GetUIpointer(); + auto uiQt = dynamic_cast(UI->GetG4UIWindow()); + if (!uiQt) { + G4warn << "G4RTQtScanner::GetQtWindow: RayTracerQt requires G4UIQt" + << G4endl; + return false; + } + uiQt->AddTabWidget(this,QString(name)); + setBackgroundRole(QPalette::Dark); + + theWindowSizeX = vp.GetWindowSizeHintX(); // As used by the ray tracer + theWindowSizeY = vp.GetWindowSizeHintY(); // and to make fpImage + fpImage = new QImage(theWindowSizeX, theWindowSizeY, QImage::Format_RGB32); + fpImageLabel = new QLabel; + fpImageLabel->setPixmap(QPixmap::fromImage(*fpImage)); + setWidget(fpImageLabel); + setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ensureVisible(theWindowSizeX/2, theWindowSizeY/2); + + return true; +} + +void G4RTQtScanner::Draw +(unsigned char red, unsigned char green, unsigned char blue) +// Add a coloured point to the image at current position. +{ + QPainter painter(fpImage); + painter.setPen(QPen(QColor(int(red), int(green), int(blue)))); + painter.drawPoint(theIColumn, theIRow); +} diff --git a/source/visualization/RayTracer/src/G4RTSimpleScanner.cc b/source/visualization/RayTracer/src/G4RTSimpleScanner.cc index 0bfcfaca46..f57f66ea58 100644 --- a/source/visualization/RayTracer/src/G4RTSimpleScanner.cc +++ b/source/visualization/RayTracer/src/G4RTSimpleScanner.cc @@ -31,19 +31,10 @@ G4RTSimpleScanner::G4RTSimpleScanner(): G4VRTScanner(), theNRow(0), theNColumn(0), theIRow(0), theIColumn(0) -{ - theGSName = "RayTracer"; - theGSNickname = "RayTracer"; -} +{} G4RTSimpleScanner::~G4RTSimpleScanner(){} -const G4String& G4RTSimpleScanner::GetGSName() const -{return theGSName;} - -const G4String& G4RTSimpleScanner::GetGSNickname() const -{return theGSNickname;} - void G4RTSimpleScanner::Initialize(G4int nRow, G4int nColumn) { theNRow = nRow; theNColumn = nColumn; diff --git a/source/visualization/RayTracer/src/G4RTXScanner.cc b/source/visualization/RayTracer/src/G4RTXScanner.cc index 9eec2376d2..a38216ba90 100644 --- a/source/visualization/RayTracer/src/G4RTXScanner.cc +++ b/source/visualization/RayTracer/src/G4RTXScanner.cc @@ -48,19 +48,10 @@ G4RTXScanner::G4RTXScanner(): G4VRTScanner(), theNRow(0), theNColumn(0), theStep(0) ,theIRow(0), theIColumn(0) ,display(0), win(0), scmap(0) -{ - theGSName = "RayTracerX"; - theGSNickname = "RayTracerX"; -} +{} G4RTXScanner::~G4RTXScanner() {} -const G4String& G4RTXScanner::GetGSName() const -{return theGSName;} - -const G4String& G4RTXScanner::GetGSNickname() const -{return theGSNickname;} - void G4RTXScanner::Initialize(G4int nRow, G4int nColumn) { theNRow = nRow; theNColumn = nColumn; diff --git a/source/visualization/RayTracer/src/G4RayTracer.cc b/source/visualization/RayTracer/src/G4RayTracer.cc index 6ce2877af8..d2c3e19b90 100644 --- a/source/visualization/RayTracer/src/G4RayTracer.cc +++ b/source/visualization/RayTracer/src/G4RayTracer.cc @@ -34,7 +34,7 @@ G4RayTracer::G4RayTracer(): G4VGraphicsSystem("RayTracer", - "RayTracer", + "RT", RAYTRACER_FEATURES, G4VGraphicsSystem::threeD) , theRayTracer(nullptr) diff --git a/source/visualization/RayTracer/src/G4RayTracerQt.cc b/source/visualization/RayTracer/src/G4RayTracerQt.cc new file mode 100644 index 0000000000..fe4ac86f6a --- /dev/null +++ b/source/visualization/RayTracer/src/G4RayTracerQt.cc @@ -0,0 +1,73 @@ +// +// ******************************************************************** +// * License and Disclaimer * +// * * +// * The Geant4 software is copyright of the Copyright Holders of * +// * the Geant4 Collaboration. It is provided under the terms and * +// * conditions of the Geant4 Software License, included in the file * +// * LICENSE and available at http://cern.ch/geant4/license . These * +// * include a list of copyright holders. * +// * * +// * Neither the authors of this software system, nor their employing * +// * institutes,nor the agencies providing financial support for this * +// * work make any representation or warranty, express or implied, * +// * regarding this software system or assume any liability for its * +// * use. Please see the license in the file LICENSE and URL above * +// * for the full disclaimer and the limitation of liability. * +// * * +// * This code implementation is the result of the scientific and * +// * technical work of the GEANT4 collaboration. * +// * By using, copying, modifying or distributing the software (or * +// * any work based on the software) you agree to acknowledge its * +// * use in resulting scientific publications, and indicate your * +// * acceptance of all terms of the Geant4 Software license. * +// ******************************************************************** +// +// +// +// +// + +#include "G4RayTracerQt.hh" +#include "G4RayTracerFeatures.hh" +#include "G4RayTracerSceneHandler.hh" +#include "G4RayTracerQtViewer.hh" + +#define G4warn G4cerr + +G4RayTracerQt::G4RayTracerQt(): + G4VGraphicsSystem("RayTracerQt", + "RTQt", + RAYTRACER_FEATURES, + G4VGraphicsSystem::threeD) +{} + +G4RayTracerQt::~G4RayTracerQt() +{} + +G4VSceneHandler* G4RayTracerQt::CreateSceneHandler (const G4String& name) { + G4VSceneHandler* pSceneHandler = new G4RayTracerSceneHandler (*this, name); + return pSceneHandler; +} + +G4VViewer* G4RayTracerQt::CreateViewer (G4VSceneHandler& sceneHandler, + const G4String& name) { + G4VViewer* pViewer = new G4RayTracerQtViewer (sceneHandler, name); + if (pViewer) { + if (pViewer->GetViewId() < 0) { + G4warn << + "G4RayTracerQt::CreateViewer: ERROR flagged by negative" + " view id in G4RayTracerQtViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pViewer; + pViewer = 0; + } + } + else { + G4warn << + "G4RayTracerQt::CreateViewer: ERROR: null pointer on new G4RayTracerQtViewer." + << G4endl; + } + return pViewer; +} diff --git a/source/processes/hadronic/models/lend/src/G4GIDI_map.cc b/source/visualization/RayTracer/src/G4RayTracerQtViewer.cc similarity index 65% rename from source/processes/hadronic/models/lend/src/G4GIDI_map.cc rename to source/visualization/RayTracer/src/G4RayTracerQtViewer.cc index 37608dfb8a..7a57be1d39 100644 --- a/source/processes/hadronic/models/lend/src/G4GIDI_map.cc +++ b/source/visualization/RayTracer/src/G4RayTracerQtViewer.cc @@ -23,45 +23,40 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/* -# <> -# <> -*/ -#include "G4GIDI_map.hh" +// -using namespace GIDI; +#include "G4RayTracerQtViewer.hh" -/* -*************************************************************** -*/ -G4GIDI_map::G4GIDI_map( const std::string &dataDirectory ) { +#include "G4VSceneHandler.hh" +#include "G4Scene.hh" +#include "G4TheMTRayTracer.hh" +#include "G4RTJpegMaker.hh" +#include "G4RTQtScanner.hh" +#include "G4UImanager.hh" - smr_initialize( &smr, smr_status_Ok, 0 ); - map = MCGIDI_map_readFile( &smr, NULL, dataDirectory.c_str( ) ); - if( !smr_isOk( &smr ) ) { - smr_print( &smr, 1 ); - throw 1; - } -} -/* -*************************************************************** -*/ -G4GIDI_map::~G4GIDI_map( void ) { - - if( map != NULL ) MCGIDI_map_free( NULL, map ); - smr_release( &smr ); -} -/* -*************************************************************** -*/ -std::string G4GIDI_map::fileName( void ) { - - return( map->mapFileName ); -} -/* -*************************************************************** -*/ -std::string G4GIDI_map::path( void ) { - - return( map->path ); +#include + +G4RayTracerQtViewer::G4RayTracerQtViewer +(G4VSceneHandler& sceneHandler, const G4String& name): +G4RayTracerViewer +(sceneHandler, name, + G4TheMTRayTracer::Instance(new G4RTJpegMaker, new G4RTQtScanner)) +{} + +G4RayTracerQtViewer::~G4RayTracerQtViewer() {} + +void G4RayTracerQtViewer::Initialise() { + + G4RayTracerViewer::Initialise(); + + fVP.SetAutoRefresh(true); + fDefaultVP.SetAutoRefresh(true); + + // Set up Qt Window... + G4RTQtScanner* theQtScanner = (G4RTQtScanner*)theTracer->GetScanner(); + if (!theQtScanner->GetQtWindow(fName,fVP)) { + G4cerr << "G4RayTracerQtViewer::Initialise: No scanner" << G4endl; + fViewId = -1; // This flags an error. + return; + } } diff --git a/source/visualization/RayTracer/src/G4RayTracerViewer.cc b/source/visualization/RayTracer/src/G4RayTracerViewer.cc index 70b61b46b1..3b07f13365 100644 --- a/source/visualization/RayTracer/src/G4RayTracerViewer.cc +++ b/source/visualization/RayTracer/src/G4RayTracerViewer.cc @@ -27,6 +27,8 @@ #include "G4RayTracerViewer.hh" +#include "G4Timer.hh" + #include "G4ios.hh" #include #include @@ -53,7 +55,6 @@ G4RayTracerViewer::G4RayTracerViewer : G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(), name) , fFileCount(0) #ifdef G4MULTITHREADED -#include "G4TheMTRayTracer.hh" , theTracer(aTracer? aTracer: G4TheMTRayTracer::Instance(new G4RTJpegMaker, new G4RTSimpleScanner)) #else , theTracer(aTracer? aTracer: new G4TheRayTracer(new G4RTJpegMaker, new G4RTSimpleScanner)) @@ -103,7 +104,6 @@ void G4RayTracerViewer::SetView() theTracer->SetBackgroundColour(fVP.GetBackgroundColour()); } - void G4RayTracerViewer::ClearView() {} void G4RayTracerViewer::DrawView() @@ -130,10 +130,16 @@ void G4RayTracerViewer::DrawView() else { ProcessView(); } + + // Normally it's ProcessView() that takes the time, but for RayTracer it's Trace() + G4Timer timer; + timer.Start(); std::ostringstream filename; filename << "g4RayTracer." << fShortName << '_' << std::setw(4) << std::setfill('0') << fFileCount++ << ".jpeg"; theTracer->Trace(filename.str()); + timer.Stop(); + fKernelVisitElapsedTimeSeconds = timer.GetRealElapsed(); // Reset call flag called = false; diff --git a/source/visualization/RayTracer/src/G4RayTracerX.cc b/source/visualization/RayTracer/src/G4RayTracerX.cc index a925fa085a..abbdc438f8 100644 --- a/source/visualization/RayTracer/src/G4RayTracerX.cc +++ b/source/visualization/RayTracer/src/G4RayTracerX.cc @@ -37,7 +37,7 @@ G4RayTracerX::G4RayTracerX(): G4VGraphicsSystem("RayTracerX", - "RayTracerX", + "RTX", RAYTRACER_FEATURES, G4VGraphicsSystem::threeD) {} diff --git a/source/visualization/ToolsSG/History b/source/visualization/ToolsSG/History index 12cc253b16..203156a05f 100644 --- a/source/visualization/ToolsSG/History +++ b/source/visualization/ToolsSG/History @@ -6,6 +6,66 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-17 Guy Barrand (vis_toolssg-V11-03-07) +- G4ToolsSGViewer.hh: in mouse_move(), use the event.shift_modifier() method, introduced + in g4tools-V11-03-03, to pass in pan mode. + Suppress then the no more needed fKeyPressed, fKeyShift fields and the related logic. + +## 2025-06-02 Guy Barrand (vis_toolssg-V11-03-06) +- G4ToolsSGViewer.hh: have the GetWindowSize, GetRenderAreaSize methods to retrieve the actual sizes of the "seen/visibl window" and + of the "render area" size. These may return different sizes, for example with Qt/OpenGL on Mac and Windows. +- G4ToolsSGViewer::SetView: use the new GetWindowSize, GetRenderAreaSize methods to set the "marker scale" on G4ToolsSGSceneHandler. +- G4ToolsSGSceneHandler.hh, .cc: handle the fMarkerScale field. Used in AddPrimitive(G4Text). +- G4ToolsSGQtGLESViewer.hh, G4ToolsSGQtZBViewer.hh, G4ToolsSGOffscreenViewer.hh: supress the SetView method no more needed + because of the upper "marker scale" modifications in G4ToolsSGViewer.hh. + +## 2025-05-29 John Allison (vis_toolssg-V11-03-05) +- Allow accumulation of transients (trajectories) during multithreading. +- G4ToolsSGViewer.hh: + - Remove SwitchToVisSubThread and SwitchToMasterThread. + - No action needed on thread switching. +- G4ToolsSGSceneHandler.cc: + - G4ToolsSGSceneHandler::GetOrCreateNode(): + - Remove restriction on multithreading: + - Remove if (!G4Threading::IsMasterThread()) return nullptr; +- Trajectories are stored in the database during the run, and displayed at end + of run. Try "/run/beamOn 1000" (exampleB1). + - All events are displayed at end of run. + - Of course, change of style, time evolution, view cloning, etc., only + operates on kept events, as before. + +## 2025-05-25 John Allison (vis_toolssg-V11-03-04) +- G4ToolsSGSceneHandler.cc: + - Respect line width in vis attributes and view parameters. + +## 2025-03-21 Ben Morgan (vis_toolssg-V11-03-03) +- Modernize g4tools macro-based loops with range-based for. +- Update raw for loops with range-for where possible. + +## 2025-03-06 John Allison (vis_toolssg-V11-03-02) +- G4ToolsSGViewer.hh: + - Implement 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. + +## 2025-02-13 John Allison (vis_toolssg-V11-03-01) +- G4ToolsSGViewer.hh: CompareForKernelVisit: + - Cause kernel visit if viewer start/end time changes. + - This is to take advantage of the new generic time window - modeling-V11-03-04. + +## 2025-01-06 John Allison (vis_toolssg-V11-03-00) +- Co-works: visman-V11-03-00, interfaces-V11-03-00, modeling-V11-03-00, + opengl-V11-03-00, visQt3D-V11-03-00, openinventor-V11-03-00, + greps-V11-03-00. +- Re-instate the transparency slider (see lengthy explanation in management/History). +- G4Qt3DViewer: + - Initiate kernel visit if TransparencyByDepth or its options change. + ## 2024-06-21 Ben Morgan (vis_toolssg-V1-02-02) - Use runtime checks for MT mode. diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh index c8925a8f07..d05bcc46a0 100644 --- a/source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh @@ -75,11 +75,6 @@ public: fSGViewer->set_do_transparency(true); fSGViewer->set_top_to_bottom(false); //if using tools::fpng, tools::toojpeg. } - virtual void SetView() { - //::printf("debug : G4ToolsSGOffscreenViewer::SetView\n"); - fVP.SetGlobalMarkerScale(1); //WARNING: for __APPLE__, the G4ToolsSGQtViewer set it to 2. - parent::SetView(); - } virtual void DrawView() { if (!fNeedKernelVisit) KernelVisitDecision(); diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGQtGLESViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGQtGLESViewer.hh index a867c1514a..ea36db9fcf 100644 --- a/source/visualization/ToolsSG/include/private/G4ToolsSGQtGLESViewer.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGQtGLESViewer.hh @@ -106,27 +106,6 @@ public: fSGViewer->enable_keyboard_focus(); } - virtual void SetView() { -#ifdef __APPLE__ - if(fSGQWidget && fSGViewer) { - if( (2*fSGQWidget->width() == int(fSGViewer->width())) && - (2*fSGQWidget->height() == int(fSGViewer->height())) ){ - // With Qt/Cocoa, the received size in - // tools::sg::glarea::resizeGL is twice the QWidget::[width(),height()]! - // In general it does not pose problem, except when rendering 2D texts. - // In order to have similar sizes than other platforms, we have to double - // their pixel heights. - fVP.SetGlobalMarkerScale(2); - } - } -#endif - parent::SetView(); - } - - virtual void UpdateGUISceneTree() { - if (fUIQt) fUIQt->UpdateSceneTree(fSceneTree); - } - protected: G4UIQt* fUIQt = nullptr; QWidget* fSGQWidget; diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh index da705e8985..07d39da789 100644 --- a/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh @@ -105,27 +105,6 @@ public: fSGViewer->enable_keyboard_focus(); } - virtual void SetView() { -#ifdef __APPLE__ - if(fSGQWidget && fSGViewer) { - if( (2*fSGQWidget->width() == int(fSGViewer->width())) && - (2*fSGQWidget->height() == int(fSGViewer->height())) ){ - // With Qt/Cocoa, the received size in - // tools::sg::glarea::resizeGL is twice the QWidget::[width(),height()]! - // In general it does not pose problem, except when rendering 2D texts. - // In order to have similar sizes than other platforms, we have to double - // their pixel heights. - fVP.SetGlobalMarkerScale(2); - } - } -#endif - parent::SetView(); - } - - virtual void UpdateGUISceneTree() { - if (fUIQt) fUIQt->UpdateSceneTree(fSceneTree); - } - protected: G4UIQt* fUIQt = nullptr; QWidget* fSGQWidget; diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh index 3b8b00cad5..43e23a1371 100644 --- a/source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh @@ -68,6 +68,8 @@ public: void TouchPlotters(tools::sg::node&); + void SetMarkerScale(double); + protected: G4ToolsSGSceneHandler(const G4ToolsSGSceneHandler&); G4ToolsSGSceneHandler& operator=(const G4ToolsSGSceneHandler&){return *this;} @@ -90,7 +92,8 @@ protected: std::vector fpPhysicalVolumeObjects; // Multiple worlds tools::sg::base_freetype* fFreetypeNode; - + double fMarkerScale; + using Region_h1 = std::pair; using Region_h2 = std::pair; std::vector fRegionH1s; diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh index b2ff1e76f3..2c7280de08 100644 --- a/source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh @@ -54,11 +54,8 @@ class G4ToolsSGViewer : public G4VViewer, tools::sg::device_interactor { typedef G4VViewer parent; typedef tools::sg::device_interactor parent_interactor; public: //tools::sg::device_interactor interface. - virtual void key_press(const tools::sg::key_down_event& a_event) { - fKeyPressed = true; - fKeyShift = a_event.key() == tools::sg::key_shift()?true:false; - } - virtual void key_release(const tools::sg::key_up_event&) {fKeyPressed = false;} + virtual void key_press(const tools::sg::key_down_event&) {} + virtual void key_release(const tools::sg::key_up_event&) {} virtual void mouse_press(const tools::sg::mouse_down_event& a_event) { fMousePressed = true; fMousePressedX = a_event.x(); @@ -75,8 +72,7 @@ public: //tools::sg::device_interactor interface. if (fMousePressed) { - if (fKeyPressed && fKeyShift) { // Translation (pan) - + if (a_event.shift_modifier()) { // Translation (pan) const G4double sceneRadius = fSGSceneHandler.GetScene()->GetExtent().GetExtentRadius(); const G4double scale = 300; // Roughly pixels per window, empirically chosen const G4double dxScene = dx*sceneRadius/scale; @@ -124,8 +120,6 @@ public: ,fSGSession(a_session) ,fSGSceneHandler(a_scene_handler) ,fSGViewer(nullptr) - ,fKeyPressed(false) - ,fKeyShift(false) ,fMousePressed(false) ,fMousePressedX(0) ,fMousePressedY(0) @@ -148,8 +142,6 @@ protected: ,fSGSession(a_from.fSGSession) ,fSGSceneHandler(a_from.fSGSceneHandler) ,fSGViewer(nullptr) - ,fKeyPressed(false) - ,fKeyShift(false) ,fMousePressed(false) ,fMousePressedX(0) ,fMousePressedY(0) @@ -214,6 +206,22 @@ public: return; } + {// With Qt/Cocoa/OpenGL, Qt/Windows/OpenGL, the received size in + // tools::sg::glarea::resizeGL is the QWidget::[width(),height()] multiplied by the "devicePixelRatio" + // (with a value of 2 seen on a MacBookPro and 1.5 seen on a Windows laptop). + // In general it does not pose problem, except when rendering 2D texts. + // In order to have similar sizes than other drivers, we adapt their scale accordingly. + unsigned int ww,wh; + if(GetWindowSize(ww,wh)) { + unsigned int raw,rah; + if(GetRenderAreaSize(raw,rah)) { + if(ww!=0) { + double width_ratio = double(raw)/double(ww); + fSGSceneHandler.SetMarkerScale(width_ratio); + } + } + }} + ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// @@ -274,15 +282,23 @@ public: virtual void ClearView() {} virtual void DrawView() { + if (!fNeedKernelVisit) KernelVisitDecision(); G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets). - fLastVP = fVP; ProcessView(); // Clears store and processes scene only if necessary. + if (kernelVisitWasNeeded) { // We might need to do something if the kernel was visited. - } else { + } else { // Or even if it was not! + if (!fTransientsNeedRedrawing) CompareForTransientsRedraw(fLastVP); + if (fTransientsNeedRedrawing) { + ProcessTransients(); + } } + FinishView (); // Flush streams and/or swap buffers. + + fLastVP = fVP; } virtual void ShowView() {FinishView();} @@ -296,31 +312,16 @@ public: } } - virtual void SwitchToVisSubThread() {} - - virtual void SwitchToMasterThread() { - if (G4Threading::IsMultithreadedApplication()) { - // I have not figured out how to draw during a run. - // - // Setting fNeedKernelVisit=true causes scene deletion and a complete rebuild, - // including trajectories, hits, etc. from kept events. - // - // Clearly this is a limitation because even if you run 1000 events you only - // get those kept (default 100), and even worse, if end-if-event-action is - // "refresh", you only get one event (the last I think). - // - // Also, strictly, there is no need to rebuid run-duration models (detector), - // but a complete rebuild is the easiest way (already imeplemented). - // - // Only do this if there are end-of-event models (e.g., trajectories) that - // may require it. - if (fSceneHandler.GetScene() && fSceneHandler.GetScene()->GetEndOfEventModelList().size()) { - fNeedKernelVisit = true; - DrawView(); // Draw trajectories, etc., from kept events - } - } +public: + G4bool GetWindowSize(unsigned int& a_w,unsigned int& a_h) { + if(!fSGViewer) {a_w = 0;a_h = 0;return false;} + return fSGViewer->window_size(a_w,a_h); + } + G4bool GetRenderAreaSize(unsigned int& a_w,unsigned int& a_h) { + if(!fSGViewer) {a_w = 0;a_h = 0;return false;} + fSGViewer->render_area_size(a_w,a_h); + return true; } - //SG_VIEWER* sg_viewer() {return fSGViewer;} protected: void KernelVisitDecision () { @@ -359,16 +360,14 @@ protected: fVP.GetDefaultTextVisAttributes()->GetColour()) || (vp.GetBackgroundColour ()!= fVP.GetBackgroundColour ())|| (vp.IsPicking () != fVP.IsPicking ()) || - // Scaling for Open Inventor is done by the scene handler so it + // Scaling for ToolsSG is done by the scene handler so it // needs a kernel visit. (In this respect, it differs from the // OpenGL drivers, where it's done in SetView.) (vp.GetScaleFactor () != fVP.GetScaleFactor ()) || - (vp.GetVisAttributesModifiers() != - fVP.GetVisAttributesModifiers()) || - (vp.IsSpecialMeshRendering() != - fVP.IsSpecialMeshRendering()) || - (vp.GetSpecialMeshRenderingOption() != - fVP.GetSpecialMeshRenderingOption()) + (vp.GetVisAttributesModifiers() != fVP.GetVisAttributesModifiers()) || + (vp.IsSpecialMeshRendering() != fVP.IsSpecialMeshRendering()) || + (vp.GetSpecialMeshRenderingOption()!= fVP.GetSpecialMeshRenderingOption())|| + (vp.GetTransparencyByDepth() != fVP.GetTransparencyByDepth()) ) return true; @@ -402,15 +401,19 @@ protected: (vp.GetSpecialMeshVolumes() != fVP.GetSpecialMeshVolumes())) return true; + if (vp.GetTransparencyByDepth() > 0. && + vp.GetTransparencyByDepthOption() != fVP.GetTransparencyByDepthOption()) + return true; + + return false; + } + + G4bool CompareForTransientsRedraw(G4ViewParameters& vp) { + if (vp.GetTimeParameters() != fVP.GetTimeParameters()) { + return fTransientsNeedRedrawing = true; + } return false; } -// void keyPressEvent (KeyEvent*); -// void keyReleaseEvent (KeyEvent*); -// void mouseDoubleClickEvent(MouseEvent*); -// void mouseMoveEvent (MouseEvent*); -// void mousePressEvent (MouseEvent*); -// void mouseReleaseEvent (MouseEvent*); -// void wheelEvent (WheelEvent*); protected: void CreateSG(tools::sg::base_camera* a_camera,const G4Vector3D& a_light_dir) { @@ -533,8 +536,6 @@ protected: SG_VIEWER* fSGViewer; G4ViewParameters fLastVP; // Memory for making kernel visit decisions. - G4bool fKeyPressed; - G4bool fKeyShift; G4bool fMousePressed; G4double fMousePressedX, fMousePressedY; diff --git a/source/visualization/ToolsSG/src/G4ToolsSGSceneHandler.cc b/source/visualization/ToolsSG/src/G4ToolsSGSceneHandler.cc index e13c12ce1c..9b981b8ce0 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGSceneHandler.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGSceneHandler.cc @@ -77,6 +77,7 @@ G4ToolsSGSceneHandler::G4ToolsSGSceneHandler (G4VGraphicsSystem& system, const G4String& name) :parent(system, fSceneIdCount++, name) ,fFreetypeNode(0) +,fMarkerScale(1) { //::printf("debug : G4ToolsSGSceneHandler : %lu, %s\n",this,name.c_str()); EstablishBaseNodes(); @@ -122,9 +123,6 @@ void G4ToolsSGSceneHandler::EstablishBaseNodes() tools::sg::separator* G4ToolsSGSceneHandler::GetOrCreateNode() { // Retrieve or create a G4ToolsSGNode node suitable for next solid or primitive - // For time being, avoid errors in MT mode - see G4ToolsSGViewer::SwitchToMasterThread - if (!G4Threading::IsMasterThread()) return nullptr; - if (fReadyForTransients) { // All transients hang from this node tools::sg::separator* sep = new tools::sg::separator; fpTransient3DObjects.add(sep); @@ -246,15 +244,16 @@ void G4ToolsSGSceneHandler::AddPrimitive(const G4Polyline& a_polyline) {tools::sg::draw_style* ds = new tools::sg::draw_style; ds->style = tools::sg::draw_lines; - ds->line_width = 1; + auto visAtts = GetCurrentViewer()->GetApplicableVisAttributes(a_polyline.GetVisAttributes()); + ds->line_width = GetLineWidth(visAtts); // Multiplies by GetGlobalLineWidthScale parentNode->add(ds);} tools::sg::vertices* vtxs = new tools::sg::vertices; vtxs->mode = tools::gl::line_strip(); //polyline parentNode->add(vtxs); - {for (size_t i = 0; i < a_polyline.size(); ++i) { - vtxs->add(float(a_polyline[i].x()),float(a_polyline[i].y()),float(a_polyline[i].z())); + {for (const auto& i : a_polyline) { + vtxs->add(float(i.x()),float(i.y()),float(i.z())); }} } @@ -298,8 +297,8 @@ void G4ToolsSGSceneHandler::AddPrimitive (const G4Polymarker& a_polymarker) currentNode->add(ds); tools::sg::vertices* vtxs = new tools::sg::vertices; vtxs->mode = tools::gl::points(); - {for (size_t i = 0; i < a_polymarker.size(); ++i) { - vtxs->add(float(a_polymarker[i].x()),float(a_polymarker[i].y()),float(a_polymarker[i].z())); + {for (const auto& i : a_polymarker) { + vtxs->add(float(i.x()),float(i.y()),float(i.z())); }} currentNode->add(vtxs); }break; @@ -313,8 +312,8 @@ void G4ToolsSGSceneHandler::AddPrimitive (const G4Polymarker& a_polymarker) } markers->size = diameter; markers->style = tools::sg::marker_circle_line; - for (size_t i = 0; i < a_polymarker.size(); ++i) { - markers->add(float(a_polymarker[i].x()),float(a_polymarker[i].y()),float(a_polymarker[i].z())); + for (const auto& i : a_polymarker) { + markers->add(float(i.x()),float(i.y()),float(i.z())); } currentNode->add(markers);} }break; @@ -328,14 +327,17 @@ void G4ToolsSGSceneHandler::AddPrimitive (const G4Polymarker& a_polymarker) } markers->size = side; markers->style = tools::sg::marker_square_line; - for (size_t i = 0; i < a_polymarker.size(); ++i) { - markers->add(float(a_polymarker[i].x()),float(a_polymarker[i].y()),float(a_polymarker[i].z())); + for (const auto& i : a_polymarker) { + markers->add(float(i.x()),float(i.y()),float(i.z())); } currentNode->add(markers);} }break; } } + +void G4ToolsSGSceneHandler::SetMarkerScale(double a_scale) {fMarkerScale = a_scale;} + void G4ToolsSGSceneHandler::AddPrimitive(const G4Text& a_text) { //::printf("debug : G4ToolsSGSceneHandler::AddPrimitive(const G4Text&) : 000 : \"%s\"\n",a_text.GetText().c_str()); @@ -371,6 +373,7 @@ void G4ToolsSGSceneHandler::AddPrimitive(const G4Text& a_text) MarkerSizeType sizeType; G4double size = GetMarkerSize(a_text, sizeType); + size *= fMarkerScale; {const auto& colour = GetTextColour(a_text); tools::sg::rgba* mat = new tools::sg::rgba(); @@ -566,7 +569,8 @@ void G4ToolsSGSceneHandler::AddPrimitive(const G4Polyhedron& a_polyhedron) {tools::sg::draw_style* ds = new tools::sg::draw_style; ds->style = tools::sg::draw_lines; - ds->line_width = 1; + auto visAtts = GetCurrentViewer()->GetApplicableVisAttributes(a_polyhedron.GetVisAttributes()); + ds->line_width = GetLineWidth(visAtts); // Multiplies by GetGlobalLineWidthScale sep->add(ds);} tools::sg::vertices* vtxs = new tools::sg::vertices; @@ -606,10 +610,10 @@ inline void SetRegionStyles(tools::xml::styles& a_styles, } inline tools::xml::styles::style_t* find_style(tools::xml::styles& a_styles,const std::string& a_name) { - tools_vforit(tools::xml::styles::named_style_t,a_styles.named_styles(),it){ - if((*it).first==a_name) return &((*it).second); + for(auto& style : a_styles.named_styles()) { + if(style.first==a_name) return &(style.second); } - return 0; + return nullptr; } inline void SetPlotterStyles(tools::sg::plots& a_plots, @@ -622,54 +626,51 @@ inline void SetPlotterStyles(tools::sg::plots& a_plots, _tools_styles.add_colormap("default",tools::sg::style_default_colormap()); _tools_styles.add_colormap("ROOT",tools::sg::style_ROOT_colormap()); - {tools_vforcit(G4PlotterManager::NamedStyle,_styles,it) { + for(const auto& [name, style_items] : _styles) { tools::xml::styles::style_t _tools_style; - tools_vforcit(G4PlotterManager::StyleItem,(*it).second,its) { - const G4String& param = (*its).first; + for(const auto& [param, value] : style_items) { if(param.find('.')==std::string::npos) { - const G4String& value = (*its).second; - _tools_style.push_back(tools::xml::styles::style_item_t(param,value)); + _tools_style.push_back(tools::xml::styles::style_item_t(param,value)); } } - _tools_styles.add_style((*it).first,_tools_style); - }} + _tools_styles.add_style(name, _tools_style); + } // sub styles: - {tools_vforcit(G4PlotterManager::NamedStyle,_styles,it) { - tools_vforcit(G4PlotterManager::StyleItem,(*it).second,its) { - const G4String& param = (*its).first; + for(const auto& [name, style_items] : _styles) { + for(const auto& [param, value] : style_items) { std::string::size_type pos = param.rfind('.'); if(pos!=std::string::npos) { - std::string sub_style = (*it).first+"."+param.substr(0,pos); + std::string sub_style = name + "." + param.substr(0,pos); G4String parameter = param.substr(pos+1,param.size()-pos); - const G4String& value = (*its).second; tools::xml::styles::style_t* _tools_style = find_style(_tools_styles,sub_style); - if(_tools_style) { + if(_tools_style) { _tools_style->push_back(tools::xml::styles::style_item_t(parameter,value)); - } else { + } else { tools::xml::styles::style_t _tools_style_2; - _tools_style_2.push_back(tools::xml::styles::style_item_t(parameter,value)); + _tools_style_2.push_back(tools::xml::styles::style_item_t(parameter,value)); _tools_styles.add_style(sub_style,_tools_style_2); - } + } } } - }} + } - {unsigned int number = a_plots.number(); + unsigned int number = a_plots.number(); for(unsigned int index=0;indexfind_field_by_name(parameter); if(!fd) fd = _plotter->find_field_by_name(_plotter->s_cls()+"."+parameter); if(fd) {if(fd->s2value(value)) continue;} @@ -707,15 +708,15 @@ void G4ToolsSGSceneHandler::SetPlotterHistograms(tools::sg::plots& a_plots) { a_plots.clear(); G4UImanager* UI = G4UImanager::GetUIpointer(); if(UI==NULL) return; - {tools_vforcit(Region_h1,fRegionH1s,it) { - tools::sg::plotter* _plotter = a_plots.find_plotter((*it).first); + + for(const auto& [region, hid] : fRegionH1s) { + tools::sg::plotter* _plotter = a_plots.find_plotter(region); if(_plotter) { - int hid = (*it).second; std::ostringstream os; os << hid; std::string cmd("/analysis/h1/get "); cmd += std::string(os.str()); - auto keepControlVerbose = UI->GetVerboseLevel(); + auto keepControlVerbose = UI->GetVerboseLevel(); UI->SetVerboseLevel(0); G4int status = UI->ApplyCommand(cmd.c_str()); UI->SetVerboseLevel(keepControlVerbose); @@ -736,11 +737,11 @@ void G4ToolsSGSceneHandler::SetPlotterHistograms(tools::sg::plots& a_plots) { << G4endl; } } - }} - {tools_vforcit(Region_h2,fRegionH2s,it) { - tools::sg::plotter* _plotter = a_plots.find_plotter((*it).first); + } + + for(const auto& [region, hid] : fRegionH2s) { + tools::sg::plotter* _plotter = a_plots.find_plotter(region); if(_plotter) { - int hid = (*it).second; std::ostringstream os; os << hid; std::string cmd("/analysis/h2/get "); @@ -766,7 +767,7 @@ void G4ToolsSGSceneHandler::SetPlotterHistograms(tools::sg::plots& a_plots) { << G4endl; } } - }} + } } class plots_cbk : public tools::sg::ecbk { @@ -802,8 +803,8 @@ protected: void G4ToolsSGSceneHandler::TouchPlotters(tools::sg::node& a_sg) { tools::sg::search_action sa(G4cout); const tools::sg::search_action::paths_t& paths = tools::sg::find_paths(sa,a_sg); - tools_vforcit(tools::sg::path_t,paths,it) { - tools::sg::plots* _plots = tools::sg::tail(*it); + for(const auto& path : paths) { + tools::sg::plots* _plots = tools::sg::tail(path); if(_plots) { SetPlotterHistograms(*_plots); } diff --git a/source/visualization/management/History b/source/visualization/management/History index a5049c3082..bc5c1df9d3 100644 --- a/source/visualization/management/History +++ b/source/visualization/management/History @@ -6,6 +6,154 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-06-08 John Allison (visman-V11-03-12) +- G4ViewParameters.cc: + - Fix for bug report 2460. + - Fix typo whereby "/vis/viewer/set/lightsMove cam" behaves incorrectly for + "/vis/viewer/set/lightsVector 0 0 1". + +## 2025-06-01 John Allison (visman-V11-03-11) +- Make TSG the "flagship" vis driver. +- G4VisExecutive.icc: + - Make nickname/alias OGL synonymous with TSG. + - Make TSG default for selection by build flags. +- G4VisManager.cc: + - Initialise fDefaultGraphicsSystemName to TSG. + - This is just for consistency, since it is overridden in + G4VisExecutive.icc anyway. + +## 2025-05-27 John Allison (visman-V11-03-10) +- G4VViewer.cc: + - Initialise fTransientsNeedRedrawing(false). + - Previously, this was initialised "true", but it is up to the viewer + to decide if transients (trajectories) need redrawing. + - Testing with OGL, TSG and VTK actually shows no change of behaviour, + but some future developments are affected, so this MR corrects. + +## 2025-05-24 John Allison (visman-V11-03-09) +- Minor improvement to listing of histograms (if any) +- G4VisManager::EndOfRun: + - Print list of histograms even if vis is disabled. + +## 2025-04-06 John Allison (visman-V11-03-08) +- G4VisCommandsSceneAdd: + - Add /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. + +## 2025-04-02 John Allison (visman-V11-03-07) +- Co-works: raytracer-V11-03-00, cmake-V11-03-02. +- G4VisExecutive.icc: Add RayTracerQt. +- G4VisCommandsViewer.cc: /vis/viewer/select: + - Remove subsequent refresh, even for auto-refresh drivers. + - Refresh not required after a select - window systems keep the image. + +## 2025-04-01 John Allison (visman-V11-03-06) +- G4VisCommandsTouchable.cc: + - Disable /vis/touchable/centre... and /twinkle in the case of large process times. + - This was an omission. It is already done for /vis/viewer/interpolate, etc. + - If the time taken to (re-)build is greater than (currently) 0.1 s, fancy + features like zooming in on and twinkling that rely on rebuilds are disabled. + +## 2025-03-21 Ben Morgan (visman-V11-03-05) +- Modernize g4tools macro-based loops with range-based for. +- Update raw for loops with range-for where possible. + +## 2025-02-24 John Allison (visman-V11-03-04) +- Split scene processing into its "permanent" (run-duration models) and "transient" + (end-of-event and end-of-run models) parts. + - This allows us 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, i.e., + leaving the permanent part of the graphical database 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. + - The idea is that the concrete viewer makes the decision in its DrawView(). + Typically, a viewer has CompareForKernelVisit(), to be used when a *complete* + reprocessing is required, and CompareForTransientsRedraw() (say) if only + transient models need reprocessing. +- G4VSceneHandler: + - Introduce virtual void ProcessTransients(). + - Move pertinent code from ProcessScene() to ProcessTransients(). + - ProcessScene() calls ProcessTransients(), i.e., the existing "kernel + visit" processes both permanent and transient models as before. + - Also some re-indentation within ProcessTransients(). +- G4VViewer: + - Introduce void ProcessTransients() and fTransientsNeedRedrawing flag. + +## 2025-02-20 John Allison (visman-V11-03-03) +- G4VVisCommand.cc: + - InterpolateViews(): + - Implement desired time per time step (or desired fps). Computation time + per step may cause this to increase (i.e., fps to fall below this). +- G4VisCommandsViewer.cc: + - /vis/viewer/interpolate: + - Small improvement to guidance consequent on the above. +- G4VisCommandsViewer.cc: + - /vis/viewer/set/timeWindow/displayHeadTime: + - Implement "current as default". This is more rational; prevents surprises. + There might be some minor change of behaviour. + +## 2025-02-01 John Allison (visman-V11-03-02) +- Simplify G4ViewParameters. +- Co-works: opengl-V11-03-01. +- G4ViewParameters.hh/cc: + - Use single G4ModelingParameters::TimeParameters to replace 18 time window + parameters. +- G4VSceneHandler.cc: + - Copy time parameters into modeling parameters. +- G4VisCommandsViewerSet.cc: + - /vis/viewer/set/timeWindow commands: + - Follow changes in G4ViewParameters. + +## 2025-01-13 John Allison (visman-V11-03-01) +- G4VisCommandsViewerSet: + - /vis/viewer/set/transparencyByDepth: improve guidance. + +## 2025-01-06 John Allison (visman-V11-03-00) +- Co-works: modeling-V11-03-00, interfaces-V11-03-00, opengl-V11-03-00, + visQt3D-V11-03-00, vis_toolssg-V11-03-00, openinventor-V11-03-00, + greps-V11-03-00. +- Re-instate the transparency slider. +- The transparency slider, whereby the user could see into the geometry + progressively, was a powerful feature of the OpenGL Qt viewer, but it + suffered a demise when we moved to a generic (new) scene tree. In this + MR we re-implement it in a generic way, i.e., for all drivers. It is moved + from the OpenGL Qt viewer to the Qt GUI (G4UIQt) and uses a new command, + "/vis/viewer/set/transparencyByDepth [option]". G4UIQt issues this + command on signals from the slider. The user may, of course, use this + command directly. +- The command initiates a "kernel visit", which causes a rebuild of the + graphical database. This may sound very heavy, but it is remarkably quick + for reasonable geometries on modern CPUs. (It is envisaged that this + feature is most useful when a detector - or a sub-detector - is being + developed.) +- The design is based on the original design by Laurent Garnier in OpenGL Qt. + Laurent's ideas have been borrowed - thanks, Laurent. It was prompted in + particular by a user, Andrea Barresi, who missed its presence in G4 11.2, + and made some concrete proposals for its reintroduction using existing + commands. In the end I felt it deserved a new command to maximise + efficiency, but I have really appreciated his engagement in the process + of developing this new feature, and one of the algorithms is his + (option 3, "X-ray"). Thank you, Andrea. Unfortunately, it didn't make 11.3. +- G4VisManager: + - Tidy - mainly improved indentation. +- G4VSceneHandler: + - Calculate and maintain fMaxGeometryDepth (new base class data member). + (The base class is G4VGraphicsScene in graphics_reps category. Placing + the data member there makes is accessible to G4PhysicalVolumeModel.) + - Improve some diagnostic printing. +- G4VViewer: + - Follow changes in G4PhysicalVolumeModel + - Use pvModel->GetTotalAllTouchables() + - Tidy +- G4ViewParameters: + - Add TransparencyByDepth and TransparencyByDepthOption. +- G4VisCommandsViewerSet: + - Add /vis/viewer/set/transparencyByDepth. + ## 2024-10-27 John Allison (visman-V11-02-28) - G4VisExecutive.icc: - Remove #include - no longer needed. diff --git a/source/visualization/management/include/G4VSceneHandler.hh b/source/visualization/management/include/G4VSceneHandler.hh index cd3f56c032..bd683237db 100644 --- a/source/visualization/management/include/G4VSceneHandler.hh +++ b/source/visualization/management/include/G4VSceneHandler.hh @@ -319,6 +319,12 @@ protected: // G4OpenGLScenehandler::ProcessScene). virtual void ProcessScene (); + ////////////////////////////////////////////////////////////// + // As above, but transients only. For example, at end of run, in "Idle" + // state, you might wish to re-draw the trajectories with a different + // time window. + virtual void ProcessTransients (); + ////////////////////////////////////////////////////////////// // Default routine used by default AddSolid (). virtual void RequestPrimitives (const G4VSolid& solid); diff --git a/source/visualization/management/include/G4VViewer.hh b/source/visualization/management/include/G4VViewer.hh index 58e7a46389..b4ae5cc2f9 100644 --- a/source/visualization/management/include/G4VViewer.hh +++ b/source/visualization/management/include/G4VViewer.hh @@ -188,7 +188,7 @@ public: // With description const G4SceneTreeItem& GetSceneTree() {return fSceneTree;} G4SceneTreeItem& AccessSceneTree() {return fSceneTree;} void UpdateGUISceneTree(); // A utility - const G4int fMaxNTouchables = 10000; // Limits memory to about 50 MB + const G4int fMaxAllTouchables = 10000; // Limits memory to about 50 MB per PV model G4bool fCurtailDescent = false; // Flag to curtail descent into PV model for scene tree ////////////////////////////////////////////////////////////// @@ -227,6 +227,9 @@ public: // With description void ProcessView (); // Used by DrawView (). Invokes SetView (). The basic logic is here. + void ProcessTransients (); + // Re-draws transients only + protected: ////////////////////////////////////////////////////////////// @@ -263,6 +266,7 @@ protected: ////////////////////////////////////////////////////////////// // Other parameters. G4bool fNeedKernelVisit; // See DrawView() for comments. + G4bool fTransientsNeedRedrawing; // See DrawView() for comments. }; #include "G4VViewer.icc" diff --git a/source/visualization/management/include/G4ViewParameters.hh b/source/visualization/management/include/G4ViewParameters.hh index 61edbf0bd5..6ac92fdce7 100644 --- a/source/visualization/management/include/G4ViewParameters.hh +++ b/source/visualization/management/include/G4ViewParameters.hh @@ -194,27 +194,13 @@ public: // With description RotationStyle GetRotationStyle () const; const std::vector& GetVisAttributesModifiers () const; - G4double GetStartTime () const; - G4double GetEndTime () const; - G4double GetFadeFactor () const; - G4bool IsDisplayHeadTime () const; - G4double GetDisplayHeadTimeX () const; - G4double GetDisplayHeadTimeY () const; - G4double GetDisplayHeadTimeSize () const; - G4double GetDisplayHeadTimeRed () const; - G4double GetDisplayHeadTimeGreen () const; - G4double GetDisplayHeadTimeBlue () const; - G4bool IsDisplayLightFront () const; - G4double GetDisplayLightFrontX () const; - G4double GetDisplayLightFrontY () const; - G4double GetDisplayLightFrontZ () const; - G4double GetDisplayLightFrontT () const; - G4double GetDisplayLightFrontRed () const; - G4double GetDisplayLightFrontGreen () const; - G4double GetDisplayLightFrontBlue () const; + const G4ModelingParameters::TimeParameters& + GetTimeParameters () const; G4bool IsSpecialMeshRendering () const; SMROption GetSpecialMeshRenderingOption () const; - const std::vector& GetSpecialMeshVolumes() const; + const std::vector& GetSpecialMeshVolumes () const; + G4double GetTransparencyByDepth () const; + G4int GetTransparencyByDepthOption () const; // Here Follow functions to evaluate useful quantities as a // function of the radius of the Bounding Extent of the object being @@ -289,27 +275,12 @@ public: // With description void SetRotationStyle (RotationStyle); void ClearVisAttributesModifiers (); void AddVisAttributesModifier(const G4ModelingParameters::VisAttributesModifier&); - void SetStartTime (G4double); - void SetEndTime (G4double); - void SetFadeFactor (G4double); - void SetDisplayHeadTime (G4bool); - void SetDisplayHeadTimeX (G4double); - void SetDisplayHeadTimeY (G4double); - void SetDisplayHeadTimeSize (G4double); - void SetDisplayHeadTimeRed (G4double); - void SetDisplayHeadTimeGreen (G4double); - void SetDisplayHeadTimeBlue (G4double); - void SetDisplayLightFront (G4bool); - void SetDisplayLightFrontX (G4double); - void SetDisplayLightFrontY (G4double); - void SetDisplayLightFrontZ (G4double); - void SetDisplayLightFrontT (G4double); - void SetDisplayLightFrontRed (G4double); - void SetDisplayLightFrontGreen (G4double); - void SetDisplayLightFrontBlue (G4double); + void SetTimeParameters (const G4ModelingParameters::TimeParameters&); void SetSpecialMeshRendering (G4bool); void SetSpecialMeshRenderingOption (SMROption); void SetSpecialMeshVolumes (const std::vector&); + void SetTransparencyByDepth (G4double); + void SetTransparencyByDepthOption (G4int); // Command dumping functions. // For camera commands we need to provide the standard target point from @@ -394,19 +365,12 @@ private: G4bool fPicking; // Request picking. RotationStyle fRotationStyle; // Rotation style. std::vector fVisAttributesModifiers; - G4double fStartTime, fEndTime; // Time range (e.g., for trajectory steps). - G4double fFadeFactor; // 0: no fade; 1: maximum fade with time within range. - G4bool fDisplayHeadTime; // Display head time (fEndTime) in 2D text. - G4double fDisplayHeadTimeX, fDisplayHeadTimeY; // 2D screen coords. - G4double fDisplayHeadTimeSize; // Screen size. - G4double fDisplayHeadTimeRed, fDisplayHeadTimeGreen, fDisplayHeadTimeBlue; - G4bool fDisplayLightFront;// Display light front at head time originating at - G4double fDisplayLightFrontX, fDisplayLightFrontY, fDisplayLightFrontZ, - fDisplayLightFrontT; - G4double fDisplayLightFrontRed, fDisplayLightFrontGreen, fDisplayLightFrontBlue; + G4ModelingParameters::TimeParameters fTimeParameters; // For time-slicing, etc. G4bool fSpecialMeshRendering; // Request special rendering of parameterised volumes SMROption fSpecialMeshRenderingOption; // Special rendering option std::vector fSpecialMeshVolumes; // If empty, all meshes. + G4double fTransparencyByDepth; // Transparency ~= (geometry depth) - fTransparencyByDepth + G4int fTransparencyByDepthOption; // Its option enum { // Constants for geometry mask in ParseGeometry and related functions. fNoValue = 0, diff --git a/source/visualization/management/include/G4ViewParameters.icc b/source/visualization/management/include/G4ViewParameters.icc index 3554d2cf5d..9cd5014f4a 100644 --- a/source/visualization/management/include/G4ViewParameters.icc +++ b/source/visualization/management/include/G4ViewParameters.icc @@ -227,77 +227,9 @@ G4ViewParameters::GetVisAttributesModifiers() const { return fVisAttributesModifiers; } -inline G4double G4ViewParameters::GetStartTime () const { - return fStartTime; -} - -inline G4double G4ViewParameters::GetEndTime () const { - return fEndTime; -} - -inline G4double G4ViewParameters::GetFadeFactor () const { - return fFadeFactor; -} - -inline G4bool G4ViewParameters::IsDisplayHeadTime () const { - return fDisplayHeadTime; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeX () const { - return fDisplayHeadTimeX; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeY () const { - return fDisplayHeadTimeY; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeSize () const { - return fDisplayHeadTimeSize; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeRed () const { - return fDisplayHeadTimeRed; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeGreen () const { - return fDisplayHeadTimeGreen; -} - -inline G4double G4ViewParameters::GetDisplayHeadTimeBlue () const { - return fDisplayHeadTimeBlue; -} - -inline G4bool G4ViewParameters::IsDisplayLightFront () const { - return fDisplayLightFront; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontX () const { - return fDisplayLightFrontX; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontY () const { - return fDisplayLightFrontY; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontZ () const { - return fDisplayLightFrontZ; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontT () const { - return fDisplayLightFrontT; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontRed () const { - return fDisplayLightFrontRed; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontGreen () const { - return fDisplayLightFrontGreen; -} - -inline G4double G4ViewParameters::GetDisplayLightFrontBlue () const { - return fDisplayLightFrontBlue; -} +inline const G4ModelingParameters::TimeParameters& +G4ViewParameters::GetTimeParameters () const +{return fTimeParameters;} inline G4int G4ViewParameters::GetNumberOfCloudPoints () const { return fNumberOfCloudPoints; @@ -313,6 +245,14 @@ inline const std::vector& G4ViewParameters::GetSpecialMeshVolumes() const {return fSpecialMeshVolumes;} +inline G4double G4ViewParameters::GetTransparencyByDepth () const { + return fTransparencyByDepth; +} + +inline G4int G4ViewParameters::GetTransparencyByDepthOption () const { + return fTransparencyByDepthOption; +} + inline void G4ViewParameters::SetDrawingStyle (G4ViewParameters::DrawingStyle style) { fDrawingStyle = style; @@ -500,76 +440,9 @@ inline void G4ViewParameters::ClearVisAttributesModifiers () { fVisAttributesModifiers.clear (); } -inline void G4ViewParameters::SetStartTime (G4double startTime) { - fStartTime = startTime; -} - -inline void G4ViewParameters::SetEndTime (G4double endTime) { - fEndTime = endTime; -} - -inline void G4ViewParameters::SetFadeFactor (G4double fadeFactor) { - fFadeFactor = fadeFactor; -} - -inline void G4ViewParameters::SetDisplayHeadTime (G4bool displayHeadTime) { - fDisplayHeadTime = displayHeadTime; -} - -inline void G4ViewParameters::SetDisplayHeadTimeX (G4double displayHeadTimeX) { - fDisplayHeadTimeX = displayHeadTimeX; -} - -inline void G4ViewParameters::SetDisplayHeadTimeY (G4double displayHeadTimeY) { - fDisplayHeadTimeY = displayHeadTimeY; -} - -inline void G4ViewParameters::SetDisplayHeadTimeSize (G4double displayHeadTimeSize) { - fDisplayHeadTimeSize = displayHeadTimeSize; -} - -inline void G4ViewParameters::SetDisplayHeadTimeRed (G4double displayHeadTimeRed) { - fDisplayHeadTimeRed = displayHeadTimeRed; -} - -inline void G4ViewParameters::SetDisplayHeadTimeGreen (G4double displayHeadTimeGreen) { - fDisplayHeadTimeGreen = displayHeadTimeGreen; -} - -inline void G4ViewParameters::SetDisplayHeadTimeBlue (G4double displayHeadTimeBlue) { - fDisplayHeadTimeBlue = displayHeadTimeBlue; -} - -inline void G4ViewParameters::SetDisplayLightFront (G4bool displayLightFront) { - fDisplayLightFront = displayLightFront; -} - -inline void G4ViewParameters::SetDisplayLightFrontX (G4double displayLightFrontX) { - fDisplayLightFrontX = displayLightFrontX; -} - -inline void G4ViewParameters::SetDisplayLightFrontY (G4double displayLightFrontY) { - fDisplayLightFrontY = displayLightFrontY; -} - -inline void G4ViewParameters::SetDisplayLightFrontZ (G4double displayLightFrontZ) { - fDisplayLightFrontZ = displayLightFrontZ; -} - -inline void G4ViewParameters::SetDisplayLightFrontT (G4double displayLightFrontT) { - fDisplayLightFrontT = displayLightFrontT; -} - -inline void G4ViewParameters::SetDisplayLightFrontRed (G4double displayLightFrontRed) { - fDisplayLightFrontRed = displayLightFrontRed; -} - -inline void G4ViewParameters::SetDisplayLightFrontGreen (G4double displayLightFrontGreen) { - fDisplayLightFrontGreen = displayLightFrontGreen; -} - -inline void G4ViewParameters::SetDisplayLightFrontBlue (G4double displayLightFrontBlue) { - fDisplayLightFrontBlue = displayLightFrontBlue; +inline void G4ViewParameters::SetTimeParameters +(const G4ModelingParameters::TimeParameters& timeParameters) { + fTimeParameters = timeParameters; } inline void G4ViewParameters::SetSpecialMeshRendering (G4bool smr) @@ -581,3 +454,11 @@ inline void G4ViewParameters::SetSpecialMeshRenderingOption (G4ViewParameters::S inline void G4ViewParameters::SetSpecialMeshVolumes (const std::vector& smvs) {fSpecialMeshVolumes = smvs;} + +inline void G4ViewParameters::SetTransparencyByDepth (G4double transparencyByDepth) { + fTransparencyByDepth = transparencyByDepth; +} + +inline void G4ViewParameters::SetTransparencyByDepthOption (G4int transparencyByDepthOption) { + fTransparencyByDepthOption = transparencyByDepthOption; +} diff --git a/source/visualization/management/include/G4VisCommandsSceneAdd.hh b/source/visualization/management/include/G4VisCommandsSceneAdd.hh index c84f1993cb..0c3796dee7 100644 --- a/source/visualization/management/include/G4VisCommandsSceneAdd.hh +++ b/source/visualization/management/include/G4VisCommandsSceneAdd.hh @@ -128,6 +128,23 @@ private: G4UIcmdWithoutParameter* fpCommand; }; +class G4VisCommandSceneAddEndOfRunMacro: public G4VVisCommandScene { +public: + G4VisCommandSceneAddEndOfRunMacro (); + virtual ~G4VisCommandSceneAddEndOfRunMacro (); + G4String GetCurrentValue (G4UIcommand* command); + void SetNewValue (G4UIcommand* command, G4String newValue); +private: + G4VisCommandSceneAddEndOfRunMacro (const G4VisCommandSceneAddEndOfRunMacro&); + G4VisCommandSceneAddEndOfRunMacro& operator = (const G4VisCommandSceneAddEndOfRunMacro&); + struct EndOfRunMacro { + EndOfRunMacro(const G4String& macro): fMacro(macro){}; + void operator()(G4VGraphicsScene&, const G4ModelingParameters*); + G4String fMacro; + }; + G4UIcmdWithAString* fpCommand; +}; + class G4VisCommandSceneAddEventID: public G4VVisCommandScene { public: G4VisCommandSceneAddEventID (); diff --git a/source/visualization/management/include/G4VisCommandsViewerSet.hh b/source/visualization/management/include/G4VisCommandsViewerSet.hh index 0ba1fb8376..6794a1f94d 100644 --- a/source/visualization/management/include/G4VisCommandsViewerSet.hh +++ b/source/visualization/management/include/G4VisCommandsViewerSet.hh @@ -82,6 +82,7 @@ private: G4UIcommand* fpCommandSpecialMeshVolumes; G4UIcmdWithAString* fpCommandStyle; G4UIcmdWith3VectorAndUnit* fpCommandTargetPoint; + G4UIcommand* fpCommandTransparencyByDepth; G4UIcommand* fpCommandUpThetaPhi; G4UIcommand* fpCommandUpVector; G4ThreeVector fUpVector; diff --git a/source/visualization/management/include/G4VisExecutive.icc b/source/visualization/management/include/G4VisExecutive.icc index d9f262c3de..30716e4514 100644 --- a/source/visualization/management/include/G4VisExecutive.icc +++ b/source/visualization/management/include/G4VisExecutive.icc @@ -85,6 +85,10 @@ #include "G4RayTracerX.hh" // no_geant4_module_check #endif +#ifdef G4VIS_USE_RAYTRACER_QT +#include "G4RayTracerQt.hh" // no_geant4_module_check +#endif + #ifdef G4VIS_USE_QT3D #include "G4Qt3D.hh" // no_geant4_module_check #endif @@ -309,14 +313,14 @@ inline void G4VisExecutive::SetDefaultsByBuildFlags() { // 5th, by cpp flags -#if defined G4VIS_USE_OPENGLQT || G4VIS_USE_OPENGLXM ||\ +#if defined G4VIS_USE_TOOLSSG_QT_GLES || G4VIS_USE_TOOLSSG_X11_GLES ||\ + G4VIS_USE_TOOLSSG_XT_GLES || G4VIS_USE_TOOLSSG_WINDOWS_GLES + fDefaultGraphicsSystemName = "TSG"; +#elif defined G4VIS_USE_OPENGLQT || G4VIS_USE_OPENGLXM ||\ G4VIS_USE_OPENGLX || G4VIS_USE_OPENGLWIN32 fDefaultGraphicsSystemName = "OGL"; #elif defined G4VIS_USE_OI || G4VIS_USE_OIX fDefaultGraphicsSystemName = "OI"; -#elif defined G4VIS_USE_TOOLSSG_QT_GLES || G4VIS_USE_TOOLSSG_X11_GLES ||\ - G4VIS_USE_TOOLSSG_XT_GLES || G4VIS_USE_TOOLSSG_WINDOWS_GLES - fDefaultGraphicsSystemName = "TSG"; #elif defined G4VIS_USE_VTK || G4VIS_USE_VTK_QT fDefaultGraphicsSystemName = "Vtk"; #elif defined G4VIS_USE_TOOLSSG_QT_ZB || G4VIS_USE_TOOLSSG_X11_ZB ||\ @@ -356,7 +360,6 @@ void G4VisExecutive::RegisterGraphicsSystems () { RegisterGraphicsSystem(ogliqt); RegisterGraphicsSystem(oglsqt); ogliqt->AddNickname("OGLI"); - oglsqt->AddNickname("OGL"); oglsqt->AddNickname("OGLS"); #endif @@ -370,7 +373,6 @@ void G4VisExecutive::RegisterGraphicsSystems () { oglsxm->AddNickname("OGLSQt_FALLBACK"); # else oglixm->AddNickname("OGLI"); - oglsxm->AddNickname("OGL"); oglsxm->AddNickname("OGLS"); # endif #endif @@ -391,7 +393,6 @@ void G4VisExecutive::RegisterGraphicsSystems () { # if defined(G4VIS_USE_OPENGLQT) || (G4VIS_USE_OPENGLXM) # else oglix->AddNickname("OGLI"); - oglsx->AddNickname("OGL"); oglsx->AddNickname("OGLS"); # endif #endif @@ -406,7 +407,6 @@ void G4VisExecutive::RegisterGraphicsSystems () { oglswin32->AddNickname("OGLSQt_FALLBACK"); # else ogliwin32->AddNickname("OGLI"); - oglswin32->AddNickname("OGL"); oglswin32->AddNickname("OGLS"); # endif #endif @@ -437,6 +437,10 @@ void G4VisExecutive::RegisterGraphicsSystems () { RegisterGraphicsSystem(new G4RayTracerX); #endif +#ifdef G4VIS_USE_RAYTRACER_QT + RegisterGraphicsSystem(new G4RayTracerQt); +#endif + #ifdef G4VIS_USE_QT3D RegisterGraphicsSystem(new G4Qt3D); #endif @@ -500,19 +504,26 @@ void G4VisExecutive::RegisterGraphicsSystems () { #ifdef G4VIS_USE_TOOLSSG_QT_GLES tsg_qt_gles->AddNickname("TSG"); + tsg_qt_gles->AddNickname("OGL"); #elif defined(G4VIS_USE_TOOLSSG_XT_GLES) tsg_xt_gles->AddNickname("TSG"); + tsg_xt_gles->AddNickname("OGL"); #elif defined(G4VIS_USE_TOOLSSG_X11_GLES) tsg_x11_gles->AddNickname("TSG"); + tsg_x11_gles->AddNickname("OGL"); #elif defined(G4VIS_USE_TOOLSSG_WINDOWS_GLES) tsg_windows_gles->AddNickname("TSG"); + tsg_windows_gles->AddNickname("OGL"); #else #ifdef G4VIS_USE_TOOLSSG_QT_ZB tsg_qt_zb->AddNickname("TSG"); + tsg_qt_zb->AddNickname("OGL"); #elif G4VIS_USE_TOOLSSG_WINDOWS_ZB tsg_windows_zb->AddNickname("TSG"); + tsg_windows_zb->AddNickname("OGL"); #else tsg_offscreen->AddNickname("TSG"); + tsg_offscreen->AddNickname("OGL"); #endif #endif diff --git a/source/visualization/management/src/G4PlotterManager.cc b/source/visualization/management/src/G4PlotterManager.cc index e4421e24d1..e78553f5ee 100644 --- a/source/visualization/management/src/G4PlotterManager.cc +++ b/source/visualization/management/src/G4PlotterManager.cc @@ -29,7 +29,6 @@ #include "G4PlotterManager.hh" #include "G4ios.hh" -#include #include G4PlotterManager& G4PlotterManager::GetInstance () { @@ -46,9 +45,9 @@ G4PlotterManager::~G4PlotterManager() { } G4Plotter& G4PlotterManager::GetPlotter(const G4String& a_name) { - tools_vforit(NamedPlotter,fPlotters,it) { - if((*it).first==a_name) { - return (*it).second; + for(auto& plotter : fPlotters) { + if(plotter.first == a_name) { + return plotter.second; } } fPlotters.push_back(NamedPlotter(a_name,G4Plotter())); @@ -56,8 +55,8 @@ G4Plotter& G4PlotterManager::GetPlotter(const G4String& a_name) { } void G4PlotterManager::List() const { - tools_vforcit(NamedPlotter,fPlotters,it) { - G4cout << (*it).first << G4endl; + for(const auto& plotter : fPlotters) { + G4cout << plotter.first << G4endl; } } @@ -66,16 +65,16 @@ void G4PlotterManager::List() const { ////////////////////////////////////////////////////////////////// void G4PlotterManager::ListStyles() const { - tools_vforcit(NamedStyle,fStyles,it) { - G4cout << (*it).first << G4endl; + for(const auto& style : fStyles) { + G4cout << style.first << G4endl; } } G4PlotterManager::Style* G4PlotterManager::FindStyle(const G4String& a_name) { - tools_vforit(NamedStyle,fStyles,it){ - if((*it).first==a_name) return &((*it).second); + for(auto& style : fStyles) { + if(style.first == a_name) return &style.second; } - return 0; + return nullptr; } void G4PlotterManager::SelectStyle(const G4String& a_name) { @@ -86,21 +85,21 @@ void G4PlotterManager::SelectStyle(const G4String& a_name) { } void G4PlotterManager::RemoveStyle(const G4String& a_name) { - tools_vforit(NamedStyle,fStyles,it) { - if((*it).first==a_name) { + for (auto it = fStyles.begin(); it != fStyles.end(); ++it) { + if (it->first == a_name) { fStyles.erase(it); - if(fCurrentStyle==a_name) fCurrentStyle.clear(); + if (fCurrentStyle == a_name) fCurrentStyle.clear(); return; } } } void G4PlotterManager::PrintStyle(const G4String& a_name) const { - tools_vforcit(NamedStyle,fStyles,it) { - if((*it).first==a_name) { - G4cout << (*it).first << ":" << G4endl; - tools_vforcit(StyleItem,(*it).second,its) { - G4cout << " " << (*its).first << " " << (*its).second << G4endl; + for(const auto& style : fStyles) { + if(style.first == a_name) { + G4cout << style.first << ":" << G4endl; + for(const auto& item : style.second) { + G4cout << " " << item.first << " " << item.second << G4endl; } } } @@ -112,9 +111,9 @@ void G4PlotterManager::AddStyleParameter(const G4String& a_parameter,const G4Str G4cout << "G4PlotterManager::AddStyleParameter: style " << fCurrentStyle << " not found." << G4endl; return; } - tools_vforit(StyleItem,(*_style),it) { - if((*it).first==a_parameter) { - (*it).second = a_value; + for(auto& item : *_style) { + if(item.first == a_parameter) { + item.second = a_value; return; } } diff --git a/source/visualization/management/src/G4Scene.cc b/source/visualization/management/src/G4Scene.cc index af785b47c1..f13bbedcf0 100644 --- a/source/visualization/management/src/G4Scene.cc +++ b/source/visualization/management/src/G4Scene.cc @@ -65,9 +65,9 @@ void G4Scene::CalculateExtent () { G4BoundingExtentScene boundingExtentScene; - for (size_t i = 0; i < fRunDurationModelList.size(); i++) { - if (fRunDurationModelList[i].fActive) { - G4VModel* model = fRunDurationModelList[i].fpModel; + for (auto& i : fRunDurationModelList) { + if (i.fActive) { + G4VModel* model = i.fpModel; if (model -> Validate()) { const G4VisExtent& thisExtent = model -> GetExtent (); if (thisExtent != G4VisExtent::GetNullExtent()) { @@ -79,9 +79,9 @@ void G4Scene::CalculateExtent () } } - for (size_t i = 0; i < fEndOfEventModelList.size(); i++) { - if (fEndOfEventModelList[i].fActive) { - G4VModel* model = fEndOfEventModelList[i].fpModel; + for (auto & i : fEndOfEventModelList) { + if (i.fActive) { + G4VModel* model = i.fpModel; if (model -> Validate()) { const G4VisExtent& thisExtent = model -> GetExtent (); if (thisExtent != G4VisExtent::GetNullExtent()) { @@ -93,9 +93,9 @@ void G4Scene::CalculateExtent () } } - for (size_t i = 0; i < fEndOfRunModelList.size(); i++) { - if (fEndOfRunModelList[i].fActive) { - G4VModel* model = fEndOfRunModelList[i].fpModel; + for (auto & i : fEndOfRunModelList) { + if (i.fActive) { + G4VModel* model = i.fpModel; if (model -> Validate()) { const G4VisExtent& thisExtent = model -> GetExtent (); if (thisExtent != G4VisExtent::GetNullExtent()) { diff --git a/source/visualization/management/src/G4VSceneHandler.cc b/source/visualization/management/src/G4VSceneHandler.cc index 69a79a4784..83b307e047 100644 --- a/source/visualization/management/src/G4VSceneHandler.cc +++ b/source/visualization/management/src/G4VSceneHandler.cc @@ -354,9 +354,8 @@ void G4VSceneHandler::AddCompound (const G4THitsMap& hits) { if (mesh && mesh->IsActive()) { MeshScoreMap scoreMap = mesh->GetScoreMap(); const G4String& mapNam = const_cast&>(hits).GetName(); - for(MeshScoreMap::const_iterator i = scoreMap.cbegin(); - i != scoreMap.cend(); ++i) { - const G4String& scoreMapName = i->first; + for(const auto& i : scoreMap) { + const G4String& scoreMapName = i.first; if (scoreMapName == mapNam) { G4DefaultLinearColorMap colorMap("G4VSceneHandlerColorMap"); scoreMapHits = true; @@ -396,10 +395,9 @@ void G4VSceneHandler::AddCompound (const G4THitsMap& hits) { G4VScoringMesh* mesh = scoringManager->GetMesh((G4int)iMesh); if (mesh && mesh->IsActive()) { MeshScoreMap scoreMap = mesh->GetScoreMap(); - for(MeshScoreMap::const_iterator i = scoreMap.cbegin(); - i != scoreMap.cend(); ++i) { - const G4String& scoreMapName = i->first; - const G4THitsMap* foundHits = i->second; + for(const auto& i : scoreMap) { + const G4String& scoreMapName = i.first; + const G4THitsMap* foundHits = i.second; if (foundHits == &hits) { G4DefaultLinearColorMap colorMap("G4VSceneHandlerColorMap"); scoreMapHits = true; @@ -472,8 +470,8 @@ void G4VSceneHandler::AddPrimitive (const G4Polymarker& polymarker) { G4Circle dot (polymarker); dot.SetWorldSize (0.); dot.SetScreenSize (0.1); // Very small circle. - for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) { - dot.SetPosition (polymarker[iPoint]); + for (const auto& iPoint : polymarker) { + dot.SetPosition (iPoint); AddPrimitive (dot); } } @@ -481,8 +479,8 @@ void G4VSceneHandler::AddPrimitive (const G4Polymarker& polymarker) { case G4Polymarker::circles: { G4Circle circle (polymarker); // Default circle - for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) { - circle.SetPosition (polymarker[iPoint]); + for (const auto& iPoint : polymarker) { + circle.SetPosition (iPoint); AddPrimitive (circle); } } @@ -490,8 +488,8 @@ void G4VSceneHandler::AddPrimitive (const G4Polymarker& polymarker) { case G4Polymarker::squares: { G4Square square (polymarker); // Default square - for (std::size_t iPoint = 0; iPoint < polymarker.size (); ++iPoint) { - square.SetPosition (polymarker[iPoint]); + for (const auto& iPoint : polymarker) { + square.SetPosition (iPoint); AddPrimitive (square); } } @@ -682,10 +680,10 @@ void G4VSceneHandler::ProcessScene() return; if(fpScene->GetExtent() == G4VisExtent::GetNullExtent()) - { + { G4Exception("G4VSceneHandler::ProcessScene", "visman0106", JustWarning, "The scene has no extent."); - } + } G4VisManager* visManager = G4VisManager::GetInstance(); @@ -696,16 +694,10 @@ void G4VSceneHandler::ProcessScene() fReadyForTransients = false; - // Reset fMarkForClearingTransientStore. (Leaving - // fMarkForClearingTransientStore true causes problems with - // recomputing transients below.) Restore it again at end... - G4bool tmpMarkForClearingTransientStore = fMarkForClearingTransientStore; - fMarkForClearingTransientStore = false; - // Traverse geometry tree and send drawing primitives to window(s). const std::vector& runDurationModelList = - fpScene->GetRunDurationModelList(); + fpScene->GetRunDurationModelList(); if(runDurationModelList.size()) { if(verbosity >= G4VisManager::confirmations) { @@ -728,9 +720,9 @@ void G4VSceneHandler::ProcessScene() // Create modeling parameters from view parameters... G4ModelingParameters* pMP = CreateModelingParameters(); - for(std::size_t i = 0; i < runDurationModelList.size(); ++i) { - if(runDurationModelList[i].fActive) { - fpModel = runDurationModelList[i].fpModel; + for(const auto& i : runDurationModelList) { + if(i.fActive) { + fpModel = i.fpModel; fpModel->SetModelingParameters(pMP); // Describe to the current scene handler @@ -747,6 +739,9 @@ void G4VSceneHandler::ProcessScene() if (pPVModel) { G4VViewer::SceneTreeScene sceneTreeScene(fpViewer, pPVModel); fpModel->DescribeYourselfTo(sceneTreeScene); + const auto& maxDepth = pPVModel->GetMaxFullDepth(); + if (fMaxGeometryDepth < maxDepth) {fMaxGeometryDepth = maxDepth;} + // This will be the maximum geometry depth for this scene handler } // Reset modeling parameters pointer @@ -761,23 +756,32 @@ void G4VSceneHandler::ProcessScene() } // Some printing - if(verbosity >= G4VisManager::confirmations) { + if(verbosity >= G4VisManager::parameters) { for (const auto& model: runDurationModelList) { if (model.fActive) { auto pvModel = dynamic_cast(model.fpModel); if (pvModel) { - G4int nTouchables = 0; - G4cout << "Numbers of touchables by depth in model \"" + + G4cout << "Numbers of all touchables by depth \"" << pvModel->GetGlobalDescription() << "\":"; - for (const auto& dn : pvModel->GetNumberOfTouchables()) { + for (const auto& dn : pvModel->GetMapOfAllTouchables()) { G4cout << "\n Depth " << dn.first << ": " << dn.second; - nTouchables += dn.second; } - G4cout << "\n Total number of touchables: " << nTouchables << G4endl; + G4cout << "\n Total number of all touchables: " + << pvModel->GetTotalAllTouchables() << G4endl; + + G4cout << "Numbers of touchables drawn by depth \"" + << pvModel->GetGlobalDescription() << "\":"; + for (const auto& dn : pvModel->GetMapOfDrawnTouchables()) { + G4cout << "\n Depth " << dn.first << ": " << dn.second; + } + G4cout << "\n Total number of drawn touchables: " + << pvModel->GetTotalDrawnTouchables() << G4endl; } } } - + } + if(verbosity >= G4VisManager::warnings) { if (fProblematicVolumes.size() > 0) { G4cout << "Problematic volumes:"; for (const auto& prob: fProblematicVolumes) { @@ -787,6 +791,22 @@ void G4VSceneHandler::ProcessScene() } } + ProcessTransients(); +} + +void G4VSceneHandler::ProcessTransients() +{ + // Assumes transient store has already been cleared + + // Reset fMarkForClearingTransientStore. (Leaving + // fMarkForClearingTransientStore true causes problems with + // recomputing transients below.) Restore it again at end... + G4bool tmpMarkForClearingTransientStore = fMarkForClearingTransientStore; + fMarkForClearingTransientStore = false; + + G4VisManager* visManager = G4VisManager::GetInstance(); + G4VisManager::Verbosity verbosity = visManager->GetVerbosity(); + fReadyForTransients = true; // Refresh event from end-of-event model list. @@ -794,75 +814,75 @@ void G4VSceneHandler::ProcessScene() G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState state = stateManager->GetCurrentState(); if(state == G4State_Idle || state == G4State_GeomClosed) - { + { visManager->SetEventRefreshing(true); if(visManager->GetRequestedEvent()) - { + { DrawEvent(visManager->GetRequestedEvent()); - } + } else - { + { G4RunManager* runManager = G4RunManagerFactory::GetMasterRunManager(); if(runManager) - { + { const G4Run* run = runManager->GetCurrentRun(); // Draw a null event in order to pick up models for the scene tree even before a run if (run == nullptr) DrawEvent(0); const std::vector* events = - run ? run->GetEventVector() : 0; + run ? run->GetEventVector() : 0; std::size_t nKeptEvents = 0; if(events) nKeptEvents = events->size(); if(nKeptEvents) - { - if(fpScene->GetRefreshAtEndOfEvent()) { - if(verbosity >= G4VisManager::confirmations) + if(fpScene->GetRefreshAtEndOfEvent()) { + if(verbosity >= G4VisManager::confirmations) + { G4cout << "Refreshing event..." << G4endl; - } + } const G4Event* event = 0; if(events && events->size()) event = events->back(); if(event) DrawEvent(event); - } + } else - { // Accumulating events. + { // Accumulating events. - if(verbosity >= G4VisManager::confirmations) - { - G4cout << "Refreshing events in run..." << G4endl; - } - for(const auto& event : *events) - { - if(event) - DrawEvent(event); - } + if(verbosity >= G4VisManager::confirmations) + { + G4cout << "Refreshing events in run..." << G4endl; + } + for(const auto& event : *events) + { + if(event) + DrawEvent(event); + } - if(!fpScene->GetRefreshAtEndOfRun()) - { - if(verbosity >= G4VisManager::warnings) - { - G4warn << "WARNING: Cannot refresh events accumulated over more" - "\n than one runs. Refreshed just the last run." - << G4endl; - } + if(!fpScene->GetRefreshAtEndOfRun()) + { + if(verbosity >= G4VisManager::warnings) + { + G4warn << "WARNING: Cannot refresh events accumulated over more" + "\n than one runs. Refreshed just the last run." + << G4endl; + } + } } } } } - } visManager->SetEventRefreshing(false); - } + } // Refresh end-of-run model list. // Allow only in Idle or GeomClosed state... if(state == G4State_Idle || state == G4State_GeomClosed) - { + { DrawEndOfRunModels(); - } + } fMarkForClearingTransientStore = tmpMarkForClearingTransientStore; } @@ -995,9 +1015,14 @@ G4ModelingParameters* G4VSceneHandler::CreateModelingParameters () pModelingParams->SetVisAttributesModifiers(vp.GetVisAttributesModifiers()); + pModelingParams->SetTimeParameters(vp.GetTimeParameters()); + pModelingParams->SetSpecialMeshRendering(vp.IsSpecialMeshRendering()); pModelingParams->SetSpecialMeshVolumes(vp.GetSpecialMeshVolumes()); + pModelingParams->SetTransparencyByDepth(vp.GetTransparencyByDepth()); + pModelingParams->SetTransparencyByDepthOption(vp.GetTransparencyByDepthOption()); + return pModelingParams; } @@ -1308,8 +1333,8 @@ std::ostream& operator << (std::ostream& os, const G4VSceneHandler& sh) { os << "Scene handler " << sh.fName << " has " << sh.fViewerList.size () << " viewer(s):"; - for (std::size_t i = 0; i < sh.fViewerList.size (); ++i) { - os << "\n " << *(sh.fViewerList [i]); + for (const auto* i : sh.fViewerList) { + os << "\n " << *i; } if (sh.fpScene) { diff --git a/source/visualization/management/src/G4VViewer.cc b/source/visualization/management/src/G4VViewer.cc index 8b37eecb06..cbbf67db9f 100644 --- a/source/visualization/management/src/G4VViewer.cc +++ b/source/visualization/management/src/G4VViewer.cc @@ -47,7 +47,10 @@ #include G4VViewer::G4VViewer(G4VSceneHandler& sceneHandler, G4int id, const G4String& name) - : fSceneHandler(sceneHandler), fViewId(id), fNeedKernelVisit(true) +: fSceneHandler(sceneHandler) +, fViewId(id) +, fNeedKernelVisit(true) +, fTransientsNeedRedrawing(false) { if (name == "") { std::ostringstream ost; @@ -126,6 +129,17 @@ void G4VViewer::ProcessView() } } +void G4VViewer::ProcessTransients() +{ + // If transients change, e.g., a time window change... + if (fTransientsNeedRedrawing) { + // First, reset the flag - see comment above about recursive calls. + fTransientsNeedRedrawing = false; + fSceneHandler.ClearTransientStore(); + fSceneHandler.ProcessTransients(); + } +} + void G4VViewer::SetViewParameters(const G4ViewParameters& vp) { fVP = vp; @@ -243,26 +257,28 @@ void G4VViewer::InsertModelInSceneTree(G4VModel* model) fCurtailDescent = false; // This is used later in SceneTreeScene::ProcessVolume G4String furtherInfo; + static G4bool firstWarning = true; + G4bool warned = false; if (pvModel) { - struct : public G4PseudoScene { - void ProcessVolume(const G4VSolid&) {++fNTotalTouchables;} - G4int fNTotalTouchables = 0; - } counter; - pvModel->DescribeYourselfTo(counter); // Calls ProcessVolume for every touchable - if (counter.fNTotalTouchables > fMaxNTouchables) { + const auto& nAllTouchables = pvModel->GetTotalAllTouchables(); + if (nAllTouchables > fMaxAllTouchables) { std::ostringstream oss; - oss << counter.fNTotalTouchables << " touchables - too many for scene tree"; + oss << nAllTouchables << " touchables - too many for scene tree"; furtherInfo = oss.str(); - if (G4VisManager::GetInstance()->GetVerbosity() >= G4VisManager::warnings) { - G4ExceptionDescription ed; - ed << pvModel->GetGlobalDescription() << - ":\n Too many touchables (" << counter.fNTotalTouchables - << ") for scene tree. Scene tree for this model will be empty."; - G4Exception("G4VViewer::InsertModelInSceneTree", "visman0404", JustWarning, ed); + if (firstWarning) { + warned = true; + if (G4VisManager::GetInstance()->GetVerbosity() >= G4VisManager::warnings) { + G4ExceptionDescription ed; + ed << pvModel->GetGlobalDescription() << + ":\n Too many touchables (" << nAllTouchables + << ") for scene tree. Scene tree for this model will be empty."; + G4Exception("G4VViewer::InsertModelInSceneTree", "visman0404", JustWarning, ed); + } } fCurtailDescent = true; // This is used later in SceneTreeScene::ProcessVolume } } + if (warned) firstWarning = false; // Find appropriate model auto& modelItems = fSceneTree.AccessChildren(); @@ -302,15 +318,9 @@ G4VViewer::SceneTreeScene::SceneTreeScene(G4VViewer* pViewer, G4PhysicalVolumeMo return; // To keep Coverity happy } - // Describe the model to an empty scene simply to get the numbers of touchables - struct : public G4PseudoScene { - void ProcessVolume(const G4VSolid&) {} - } counter; - fpPVModel->DescribeYourselfTo(counter); // Calls ProcessVolume for every touchable - // Limit the expanded depth to limit the number expanded so as not to swamp the GUI G4int expanded = 0; - for (const auto& dn : fpPVModel->GetNumberOfTouchables()) { + for (const auto& dn : fpPVModel->GetMapOfDrawnTouchables()) { expanded += dn.second; if (fMaximumExpandedDepth < dn.first) fMaximumExpandedDepth = dn.first; if (expanded > fMaximumExpanded) break; diff --git a/source/visualization/management/src/G4VVisCommand.cc b/source/visualization/management/src/G4VVisCommand.cc index 59e3ef611d..7b3cf6026f 100644 --- a/source/visualization/management/src/G4VVisCommand.cc +++ b/source/visualization/management/src/G4VVisCommand.cc @@ -35,6 +35,7 @@ #include "G4UnitsTable.hh" #include #include +#include #include "G4PhysicalVolumeModel.hh" #include "G4LogicalVolume.hh" @@ -301,6 +302,8 @@ void G4VVisCommand::InterpolateViews const G4int safety = (G4int)viewVector.size()*nInterpolationPoints; G4int safetyCount = 0; do { + // Interpret wait time as a minimum time per interation, i.e., a steady frame rate. + auto a = std::chrono::steady_clock::now(); G4ViewParameters* vp = G4ViewParameters::CatmullRomCubicSplineInterpolation(viewVector,nInterpolationPoints); if (!vp) break; // Finished. @@ -311,8 +314,14 @@ void G4VVisCommand::InterpolateViews G4UImanager::GetUIpointer()->ApplyCommand("/vis/ogl/export"); } currentViewer->ShowView(); - if (waitTimePerPointmilliseconds > 0) - std::this_thread::sleep_for(std::chrono::milliseconds(waitTimePerPointmilliseconds)); + if (waitTimePerPointmilliseconds > 0) { + auto b = std::chrono::steady_clock::now(); + auto timeTaken = b - a; + auto timeLeft = std::chrono::milliseconds(waitTimePerPointmilliseconds) - timeTaken; + if (timeLeft > std::chrono::duration::zero()) { + std::this_thread::sleep_for(timeLeft); + } + } } while (safetyCount++ < safety); // Loop checking, 16.02.2016, J.Allison } diff --git a/source/visualization/management/src/G4ViewParameters.cc b/source/visualization/management/src/G4ViewParameters.cc index fe464630ff..59527b9fd3 100644 --- a/source/visualization/management/src/G4ViewParameters.cc +++ b/source/visualization/management/src/G4ViewParameters.cc @@ -85,26 +85,10 @@ G4ViewParameters::G4ViewParameters (): fBackgroundColour (G4Colour(0.,0.,0.)), // Black fPicking (false), fRotationStyle (constrainUpDirection), - fStartTime(-G4VisAttributes::fVeryLongTime), - fEndTime(G4VisAttributes::fVeryLongTime), - fFadeFactor(0.), - fDisplayHeadTime(false), - fDisplayHeadTimeX(-0.9), - fDisplayHeadTimeY(-0.9), - fDisplayHeadTimeSize(24.), - fDisplayHeadTimeRed(0.), - fDisplayHeadTimeGreen(1.), - fDisplayHeadTimeBlue(1.), - fDisplayLightFront(false), - fDisplayLightFrontX(0.), - fDisplayLightFrontY(0.), - fDisplayLightFrontZ(0.), - fDisplayLightFrontT(0.), - fDisplayLightFrontRed(0.), - fDisplayLightFrontGreen(1.), - fDisplayLightFrontBlue(0.), fSpecialMeshRendering(false), - fSpecialMeshRenderingOption(meshAsDefault) + fSpecialMeshRenderingOption(meshAsDefault), + fTransparencyByDepth(0.), + fTransparencyByDepthOption(1) { // Pick up default no of sides from G4Polyhedron. // Note that this parameter is variously called: @@ -270,7 +254,7 @@ void G4ViewParameters::SetViewAndLights fActualLightpointDirection = fRelativeLightpointDirection.x () * xprime + fRelativeLightpointDirection.y () * yprime + - fRelativeLightpointDirection.x () * zprime; + fRelativeLightpointDirection.z () * zprime; } else { fActualLightpointDirection = fRelativeLightpointDirection; } @@ -535,12 +519,12 @@ G4String G4ViewParameters::SceneModifyingCommands() const oss << "\n/vis/viewer/clearCutawayPlanes"; if (fCutawayPlanes.size()) { - for (size_t i = 0; i < fCutawayPlanes.size(); i++) { + for (const auto& fCutawayPlane : fCutawayPlanes) { oss << "\n/vis/viewer/addCutawayPlane " - << G4BestUnit(fCutawayPlanes[i].point(),"Length") - << fCutawayPlanes[i].normal().x() - << ' ' << fCutawayPlanes[i].normal().y() - << ' ' << fCutawayPlanes[i].normal().z(); + << G4BestUnit(fCutawayPlane.point(),"Length") + << fCutawayPlane.normal().x() + << ' ' << fCutawayPlane.normal().y() + << ' ' << fCutawayPlane.normal().z(); } } else { oss << "\n# No cutaway planes defined."; @@ -553,6 +537,9 @@ G4String G4ViewParameters::SceneModifyingCommands() const oss << "\n/vis/viewer/set/lineSegmentsPerCircle " << fNoOfSides; + oss << "\n/vis/viewer/set/transparencyByDepth " + << fTransparencyByDepth << ' ' << fTransparencyByDepthOption; + oss << std::endl; return oss.str(); @@ -709,46 +696,46 @@ G4String G4ViewParameters::TimeWindowCommands() const oss << "\n/vis/viewer/set/timeWindow/startTime " - << fStartTime/ns << " ns "; + << fTimeParameters.fStartTime/ns << " ns "; oss << "\n/vis/viewer/set/timeWindow/endTime " - << fEndTime/ns << " ns "; + << fTimeParameters.fEndTime/ns << " ns "; oss << "\n/vis/viewer/set/timeWindow/fadeFactor " - << fFadeFactor; + << fTimeParameters.fFadeFactor; oss << "\n/vis/viewer/set/timeWindow/displayHeadTime "; - if (!fDisplayHeadTime) { + if (!fTimeParameters.fDisplayHeadTime) { oss << "false"; } else { oss << "true" - << ' ' << fDisplayHeadTimeX - << ' ' << fDisplayHeadTimeY - << ' ' << fDisplayHeadTimeSize - << ' ' << fDisplayHeadTimeRed - << ' ' << fDisplayHeadTimeGreen - << ' ' << fDisplayHeadTimeBlue; + << ' ' << fTimeParameters.fDisplayHeadTimeX + << ' ' << fTimeParameters.fDisplayHeadTimeY + << ' ' << fTimeParameters.fDisplayHeadTimeSize + << ' ' << fTimeParameters.fDisplayHeadTimeRed + << ' ' << fTimeParameters.fDisplayHeadTimeGreen + << ' ' << fTimeParameters.fDisplayHeadTimeBlue; } oss << "\n/vis/viewer/set/timeWindow/displayLightFront "; - if (!fDisplayLightFront) { + if (!fTimeParameters.fDisplayLightFront) { oss << "false"; } else { oss << "true" - << ' ' << fDisplayLightFrontX/mm - << ' ' << fDisplayLightFrontY/mm - << ' ' << fDisplayLightFrontZ/mm + << ' ' << fTimeParameters.fDisplayLightFrontX/mm + << ' ' << fTimeParameters.fDisplayLightFrontY/mm + << ' ' << fTimeParameters.fDisplayLightFrontZ/mm << " mm" - << ' ' << fDisplayLightFrontT/ns + << ' ' << fTimeParameters.fDisplayLightFrontT/ns << " ns" - << ' ' << fDisplayLightFrontRed - << ' ' << fDisplayLightFrontGreen - << ' ' << fDisplayLightFrontBlue; + << ' ' << fTimeParameters.fDisplayLightFrontRed + << ' ' << fTimeParameters.fDisplayLightFrontGreen + << ' ' << fTimeParameters.fDisplayLightFrontBlue; } oss << std::endl; @@ -796,7 +783,9 @@ void G4ViewParameters::PrintDifferences (const G4ViewParameters& v) const { (fAutoRefresh != v.fAutoRefresh) || (fBackgroundColour != v.fBackgroundColour) || (fPicking != v.fPicking) || - (fRotationStyle != v.fRotationStyle) + (fRotationStyle != v.fRotationStyle) || + (fTransparencyByDepth != v.fTransparencyByDepth) || + (fTransparencyByDepthOption != v.fTransparencyByDepthOption) ) G4cout << "Difference in 1st batch." << G4endl; @@ -836,38 +825,38 @@ void G4ViewParameters::PrintDifferences (const G4ViewParameters& v) const { G4cout << "Difference in vis attributes modifiers." << G4endl; } - if (fStartTime != v.fStartTime || - fEndTime != v.fEndTime) { + if (fTimeParameters.fStartTime != v.fTimeParameters.fStartTime || + fTimeParameters.fEndTime != v.fTimeParameters.fEndTime) { G4cout << "Difference in time window." << G4endl; } - if (fFadeFactor != v.fFadeFactor) { + if (fTimeParameters.fFadeFactor != v.fTimeParameters.fFadeFactor) { G4cout << "Difference in time window fade factor." << G4endl; } - if (fDisplayHeadTime != v.fDisplayHeadTime) { + if (fTimeParameters.fDisplayHeadTime != v.fTimeParameters.fDisplayHeadTime) { G4cout << "Difference in display head time flag." << G4endl; } else { - if (fDisplayHeadTimeX != v.fDisplayHeadTimeX || - fDisplayHeadTimeY != v.fDisplayHeadTimeY || - fDisplayHeadTimeSize != v.fDisplayHeadTimeSize || - fDisplayHeadTimeRed != v.fDisplayHeadTimeRed || - fDisplayHeadTimeGreen != v.fDisplayHeadTimeGreen || - fDisplayHeadTimeBlue != v.fDisplayHeadTimeBlue) { + if (fTimeParameters.fDisplayHeadTimeX != v.fTimeParameters.fDisplayHeadTimeX || + fTimeParameters.fDisplayHeadTimeY != v.fTimeParameters.fDisplayHeadTimeY || + fTimeParameters.fDisplayHeadTimeSize != v.fTimeParameters.fDisplayHeadTimeSize || + fTimeParameters.fDisplayHeadTimeRed != v.fTimeParameters.fDisplayHeadTimeRed || + fTimeParameters.fDisplayHeadTimeGreen != v.fTimeParameters.fDisplayHeadTimeGreen || + fTimeParameters.fDisplayHeadTimeBlue != v.fTimeParameters.fDisplayHeadTimeBlue) { G4cout << "Difference in display head time parameters." << G4endl; } } - if (fDisplayLightFront != v.fDisplayLightFront) { + if (fTimeParameters.fDisplayLightFront != v.fTimeParameters.fDisplayLightFront) { G4cout << "Difference in display light front flag." << G4endl; } else { - if (fDisplayLightFrontX != v.fDisplayLightFrontX || - fDisplayLightFrontY != v.fDisplayLightFrontY || - fDisplayLightFrontZ != v.fDisplayLightFrontZ || - fDisplayLightFrontT != v.fDisplayLightFrontT || - fDisplayLightFrontRed != v.fDisplayLightFrontRed || - fDisplayLightFrontGreen != v.fDisplayLightFrontGreen || - fDisplayLightFrontBlue != v.fDisplayLightFrontBlue) { + if (fTimeParameters.fDisplayLightFrontX != v.fTimeParameters.fDisplayLightFrontX || + fTimeParameters.fDisplayLightFrontY != v.fTimeParameters.fDisplayLightFrontY || + fTimeParameters.fDisplayLightFrontZ != v.fTimeParameters.fDisplayLightFrontZ || + fTimeParameters.fDisplayLightFrontT != v.fTimeParameters.fDisplayLightFrontT || + fTimeParameters.fDisplayLightFrontRed != v.fTimeParameters.fDisplayLightFrontRed || + fTimeParameters.fDisplayLightFrontGreen != v.fTimeParameters.fDisplayLightFrontGreen || + fTimeParameters.fDisplayLightFrontBlue != v.fTimeParameters.fDisplayLightFrontBlue) { G4cout << "Difference in display light front parameters." << G4endl; } } @@ -952,8 +941,8 @@ std::ostream& operator << (std::ostream& os, const G4ViewParameters& v) { if (v.IsCutaway()) { os << "\n Cutaway planes: "; - for (size_t i = 0; i < v.fCutawayPlanes.size (); i++) { - os << ' ' << v.fCutawayPlanes[i]; + for (const auto& fCutawayPlane : v.fCutawayPlanes) { + os << ' ' << fCutawayPlane; } } else { @@ -1058,29 +1047,29 @@ std::ostream& operator << (std::ostream& os, const G4ViewParameters& v) { } os << "\nTime window parameters:" - << "\n Start time: " << v.fStartTime/ns << " ns" - << "\n End time: " << v.fEndTime/ns << " ns" - << "\n Fade factor: " << v.fFadeFactor; - if (!v.fDisplayHeadTime) { + << "\n Start time: " << v.fTimeParameters.fStartTime/ns << " ns" + << "\n End time: " << v.fTimeParameters.fEndTime/ns << " ns" + << "\n Fade factor: " << v.fTimeParameters.fFadeFactor; + if (!v.fTimeParameters.fDisplayHeadTime) { os << "\n Head time display not requested."; } else { os << "\n Head time position: " - << v.fDisplayHeadTimeX << ' ' << v.fDisplayHeadTimeY - << "\n Head time size: " << v.fDisplayHeadTimeSize - << "\n Head time colour: " << v.fDisplayHeadTimeRed - << ' ' << v.fDisplayHeadTimeGreen << ' ' << v.fDisplayHeadTimeBlue; + << v.fTimeParameters.fDisplayHeadTimeX << ' ' << v.fTimeParameters.fDisplayHeadTimeY + << "\n Head time size: " << v.fTimeParameters.fDisplayHeadTimeSize + << "\n Head time colour: " << v.fTimeParameters.fDisplayHeadTimeRed + << ' ' << v.fTimeParameters.fDisplayHeadTimeGreen << ' ' << v.fTimeParameters.fDisplayHeadTimeBlue; } - if (!v.fDisplayLightFront) { + if (!v.fTimeParameters.fDisplayLightFront) { os << "\n Light front display not requested."; } else { os << "\n Light front position: " - << v.fDisplayLightFrontX/mm << ' ' << v.fDisplayLightFrontY/mm - << ' ' << v.fDisplayLightFrontZ/mm << " mm" - << "\n Light front time: " << v.fDisplayLightFrontT/ns << " ns" - << "\n Light front colour: " << v.fDisplayLightFrontRed - << ' ' << v.fDisplayLightFrontGreen << ' ' << v.fDisplayLightFrontBlue; + << v.fTimeParameters.fDisplayLightFrontX/mm << ' ' << v.fTimeParameters.fDisplayLightFrontY/mm + << ' ' << v.fTimeParameters.fDisplayLightFrontZ/mm << " mm" + << "\n Light front time: " << v.fTimeParameters.fDisplayLightFrontT/ns << " ns" + << "\n Light front colour: " << v.fTimeParameters.fDisplayLightFrontRed + << ' ' << v.fTimeParameters.fDisplayLightFrontGreen << ' ' << v.fTimeParameters.fDisplayLightFrontBlue; } os << "\nSpecial Mesh Rendering"; @@ -1096,6 +1085,10 @@ std::ostream& operator << (std::ostream& os, const G4ViewParameters& v) { } } } else os << ": off"; + + os << "\nTransparency by depth: " << v.fTransparencyByDepth + << ", option: " << v.fTransparencyByDepthOption; + return os; } @@ -1142,7 +1135,9 @@ G4bool G4ViewParameters::operator != (const G4ViewParameters& v) const { (fPicking != v.fPicking) || (fRotationStyle != v.fRotationStyle) || (fSpecialMeshRendering != v.fSpecialMeshRendering) || - (fSpecialMeshRenderingOption != v.fSpecialMeshRenderingOption) + (fSpecialMeshRenderingOption != v.fSpecialMeshRenderingOption) || + (fTransparencyByDepth != v.fTransparencyByDepth) || + (fTransparencyByDepthOption != v.fTransparencyByDepthOption) ) return true; @@ -1173,31 +1168,31 @@ G4bool G4ViewParameters::operator != (const G4ViewParameters& v) const { if (fVisAttributesModifiers != v.fVisAttributesModifiers) return true; - if (fStartTime != v.fStartTime || - fEndTime != v.fEndTime || - fFadeFactor != v.fFadeFactor) return true; + if (fTimeParameters.fStartTime != v.fTimeParameters.fStartTime || + fTimeParameters.fEndTime != v.fTimeParameters.fEndTime || + fTimeParameters.fFadeFactor != v.fTimeParameters.fFadeFactor) return true; - if (fDisplayHeadTime != v.fDisplayHeadTime) return true; - if (fDisplayHeadTime) { - if (fDisplayHeadTimeX != v.fDisplayHeadTimeX || - fDisplayHeadTimeY != v.fDisplayHeadTimeY || - fDisplayHeadTimeSize != v.fDisplayHeadTimeSize || - fDisplayHeadTimeRed != v.fDisplayHeadTimeRed || - fDisplayHeadTimeGreen != v.fDisplayHeadTimeGreen || - fDisplayHeadTimeBlue != v.fDisplayHeadTimeBlue) { + if (fTimeParameters.fDisplayHeadTime != v.fTimeParameters.fDisplayHeadTime) return true; + if (fTimeParameters.fDisplayHeadTime) { + if (fTimeParameters.fDisplayHeadTimeX != v.fTimeParameters.fDisplayHeadTimeX || + fTimeParameters.fDisplayHeadTimeY != v.fTimeParameters.fDisplayHeadTimeY || + fTimeParameters.fDisplayHeadTimeSize != v.fTimeParameters.fDisplayHeadTimeSize || + fTimeParameters.fDisplayHeadTimeRed != v.fTimeParameters.fDisplayHeadTimeRed || + fTimeParameters.fDisplayHeadTimeGreen != v.fTimeParameters.fDisplayHeadTimeGreen || + fTimeParameters.fDisplayHeadTimeBlue != v.fTimeParameters.fDisplayHeadTimeBlue) { return true; } } - if (fDisplayLightFront != v.fDisplayLightFront) return true; - if (fDisplayLightFront) { - if (fDisplayLightFrontX != v.fDisplayLightFrontX || - fDisplayLightFrontY != v.fDisplayLightFrontY || - fDisplayLightFrontZ != v.fDisplayLightFrontZ || - fDisplayLightFrontT != v.fDisplayLightFrontT || - fDisplayLightFrontRed != v.fDisplayLightFrontRed || - fDisplayLightFrontGreen != v.fDisplayLightFrontGreen || - fDisplayLightFrontBlue != v.fDisplayLightFrontBlue) { + if (fTimeParameters.fDisplayLightFront != v.fTimeParameters.fDisplayLightFront) return true; + if (fTimeParameters.fDisplayLightFront) { + if (fTimeParameters.fDisplayLightFrontX != v.fTimeParameters.fDisplayLightFrontX || + fTimeParameters.fDisplayLightFrontY != v.fTimeParameters.fDisplayLightFrontY || + fTimeParameters.fDisplayLightFrontZ != v.fTimeParameters.fDisplayLightFrontZ || + fTimeParameters.fDisplayLightFrontT != v.fTimeParameters.fDisplayLightFrontT || + fTimeParameters.fDisplayLightFrontRed != v.fTimeParameters.fDisplayLightFrontRed || + fTimeParameters.fDisplayLightFrontGreen != v.fTimeParameters.fDisplayLightFrontGreen || + fTimeParameters.fDisplayLightFrontBlue != v.fTimeParameters.fDisplayLightFrontBlue) { return true; } } @@ -1696,10 +1691,10 @@ INTERPOLATE(plane.d()); d = real; // Only two parameters are interpolated. The others are usually chosen // once and for all by the user for a given series of views - or at least, // if not, they will be interpolated by the default "crude" method above. - INTERPOLATE(fStartTime) - holdingValues.fStartTime = real; - INTERPOLATE(fEndTime) - holdingValues.fEndTime = real; + INTERPOLATE(fTimeParameters.fStartTime) + holdingValues.fTimeParameters.fStartTime = real; + INTERPOLATE(fTimeParameters.fEndTime) + holdingValues.fTimeParameters.fEndTime = real; // Increment counters iInterpolationPoint++; diff --git a/source/visualization/management/src/G4VisCommands.cc b/source/visualization/management/src/G4VisCommands.cc index bee06b5206..8fc48ca60a 100644 --- a/source/visualization/management/src/G4VisCommands.cc +++ b/source/visualization/management/src/G4VisCommands.cc @@ -560,8 +560,8 @@ G4VisCommandVerbose::G4VisCommandVerbose () { G4bool omitable; fpCommand = new G4UIcmdWithAString("/vis/verbose", this); - for (size_t i = 0; i < G4VisManager::VerbosityGuidanceStrings.size(); ++i) { - fpCommand -> SetGuidance(G4VisManager::VerbosityGuidanceStrings[i]); + for (const auto& VerbosityGuidanceString : G4VisManager::VerbosityGuidanceStrings) { + fpCommand -> SetGuidance(VerbosityGuidanceString); } fpCommand -> SetParameterName("verbosity", omitable=true); fpCommand -> SetDefaultValue(""); diff --git a/source/visualization/management/src/G4VisCommandsGeometry.cc b/source/visualization/management/src/G4VisCommandsGeometry.cc index 8998fd3ebd..a5d48129e2 100644 --- a/source/visualization/management/src/G4VisCommandsGeometry.cc +++ b/source/visualization/management/src/G4VisCommandsGeometry.cc @@ -71,8 +71,7 @@ void G4VisCommandGeometryList::SetNewValue(G4UIcommand*, G4String newValue) { G4LogicalVolumeStore *pLVStore = G4LogicalVolumeStore::GetInstance(); G4bool found = false; - for (size_t iLV = 0; iLV < pLVStore->size(); iLV++ ) { - G4LogicalVolume*pLV = (*pLVStore)[iLV]; + for (const auto* pLV : *pLVStore) { const G4String& logVolName = pLV->GetName(); if (newValue == "all" || logVolName == newValue) { const G4VisAttributes* visAtts = pLV->GetVisAttributes(); diff --git a/source/visualization/management/src/G4VisCommandsGeometrySet.cc b/source/visualization/management/src/G4VisCommandsGeometrySet.cc index e9ae97b707..c88837dccc 100644 --- a/source/visualization/management/src/G4VisCommandsGeometrySet.cc +++ b/source/visualization/management/src/G4VisCommandsGeometrySet.cc @@ -46,8 +46,7 @@ void G4VVisCommandGeometrySet::Set G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); G4LogicalVolumeStore* pLVStore = G4LogicalVolumeStore::GetInstance(); G4bool found = false; - for (std::size_t iLV = 0; iLV < pLVStore->size(); ++iLV ) { - G4LogicalVolume* pLV = (*pLVStore)[iLV]; + for (auto* pLV : *pLVStore) { const G4String& logVolName = pLV->GetName(); if (logVolName == requestedName) found = true; if (requestedName == "all" || logVolName == requestedName) { diff --git a/source/visualization/management/src/G4VisCommandsScene.cc b/source/visualization/management/src/G4VisCommandsScene.cc index 588fa23ac5..e21548c419 100644 --- a/source/visualization/management/src/G4VisCommandsScene.cc +++ b/source/visualization/management/src/G4VisCommandsScene.cc @@ -153,11 +153,11 @@ void G4VisCommandSceneActivateModel::SetNewValue (G4UIcommand*, std::vector& runDurationModelList = pScene->SetRunDurationModelList(); - for (size_t i = 0; i < runDurationModelList.size(); i++) { - const G4String& modelName = runDurationModelList[i].fpModel->GetGlobalDescription(); + for (auto& i : runDurationModelList) { + const G4String& modelName = i.fpModel->GetGlobalDescription(); if (searchString == "all" || modelName.find(searchString) != std::string::npos) { any = true; - runDurationModelList[i].fActive = activate; + i.fActive = activate; if (verbosity >= G4VisManager::warnings) { G4warn << "Model \"" << modelName; if (activate) G4warn << "\" activated."; @@ -169,11 +169,11 @@ void G4VisCommandSceneActivateModel::SetNewValue (G4UIcommand*, std::vector& endOfEventModelList = pScene->SetEndOfEventModelList(); - for (size_t i = 0; i < endOfEventModelList.size(); i++) { - const G4String& modelName = endOfEventModelList[i].fpModel->GetGlobalDescription(); + for (auto& i : endOfEventModelList) { + const G4String& modelName = i.fpModel->GetGlobalDescription(); if (searchString == "all" || modelName.find(searchString) != std::string::npos) { any = true; - endOfEventModelList[i].fActive = activate; + i.fActive = activate; if (verbosity >= G4VisManager::warnings) { G4warn << "Model \"" << modelName; if (activate) G4warn << "\" activated."; @@ -185,11 +185,11 @@ void G4VisCommandSceneActivateModel::SetNewValue (G4UIcommand*, std::vector& endOfRunModelList = pScene->SetEndOfRunModelList(); - for (size_t i = 0; i < endOfRunModelList.size(); i++) { - const G4String& modelName = endOfRunModelList[i].fpModel->GetGlobalDescription(); + for (auto& i : endOfRunModelList) { + const G4String& modelName = i.fpModel->GetGlobalDescription(); if (searchString == "all" || modelName.find(searchString) != std::string::npos) { any = true; - endOfRunModelList[i].fActive = activate; + i.fActive = activate; if (verbosity >= G4VisManager::warnings) { G4warn << "Model \"" << modelName; if (activate) G4warn << "\" activated."; diff --git a/source/visualization/management/src/G4VisCommandsSceneAdd.cc b/source/visualization/management/src/G4VisCommandsSceneAdd.cc index 893c2eb5bd..8a76cfff54 100644 --- a/source/visualization/management/src/G4VisCommandsSceneAdd.cc +++ b/source/visualization/management/src/G4VisCommandsSceneAdd.cc @@ -623,6 +623,65 @@ void G4VisCommandSceneAddElectricField::SetNewValue CheckSceneAndNotifyHandlers (pScene); } +////////////// /vis/scene/add/endOfRunMacro /////////////////////////////////////// + +G4VisCommandSceneAddEndOfRunMacro::G4VisCommandSceneAddEndOfRunMacro () { + G4bool omitable; + fpCommand = new G4UIcmdWithAString ("/vis/scene/add/endOfRunMacro", this); + fpCommand -> SetGuidance ("Macro is executed at end of run and when rebuild required."); + fpCommand -> SetGuidance + ("WARNING: some vis commands in the macro cause recursion." + "\n Stick to simple commmands, e.g., which invoke vis manager Draw() methods."); + fpCommand -> SetParameterName ("macro", omitable = false); +} + +G4VisCommandSceneAddEndOfRunMacro::~G4VisCommandSceneAddEndOfRunMacro () { + delete fpCommand; +} + +G4String G4VisCommandSceneAddEndOfRunMacro::GetCurrentValue (G4UIcommand*) { + return ""; +} + +void G4VisCommandSceneAddEndOfRunMacro::SetNewValue (G4UIcommand*, G4String newValue) +{ + G4VisManager::Verbosity verbosity = fpVisManager->GetVerbosity(); + G4bool warn(verbosity >= G4VisManager::warnings); + + G4Scene* pScene = fpVisManager->GetCurrentScene(); + if (!pScene) { + if (verbosity >= G4VisManager::errors) { + G4warn << "ERROR: No current scene. Please create one." << G4endl; + } + return; + } + + auto endOfRunMacro = new EndOfRunMacro(newValue); + G4VModel* model = + new G4CallbackModel(endOfRunMacro); + model->SetType("EndOfRunMacro"); + model->SetGlobalTag("EndOfRunMacro"); + model->SetGlobalDescription("EndOfRunMacro: " + newValue); + const G4String& currentSceneName = pScene -> GetName (); + G4bool successful = pScene -> AddEndOfRunModel(model, warn); + if (successful) { + if (verbosity >= G4VisManager::confirmations) { + G4cout << "EndOfRunMacro has been added to scene \"" + << currentSceneName << "\"." + << G4endl; + } + } + else G4VisCommandsSceneAddUnsuccessful(verbosity); + + CheckSceneAndNotifyHandlers (pScene); +} + +void G4VisCommandSceneAddEndOfRunMacro::EndOfRunMacro::operator() +(G4VGraphicsScene&, const G4ModelingParameters*) +{ + G4UImanager::GetUIpointer()->ApplyCommand("/control/execute " + fMacro); +} + ////////////// /vis/scene/add/eventID /////////////////////////////////////// G4VisCommandSceneAddEventID::G4VisCommandSceneAddEventID () { @@ -2942,9 +3001,9 @@ void G4VisCommandSceneAddUserAction::SetNewValue const std::vector& runDurationUserVisActions = fpVisManager->GetRunDurationUserVisActions(); - for (size_t i = 0; i < runDurationUserVisActions.size(); i++) { - const G4String& name = runDurationUserVisActions[i].fName; - G4VUserVisAction* visAction = runDurationUserVisActions[i].fpUserVisAction; + for (const auto& runDurationUserVisAction : runDurationUserVisActions) { + const G4String& name = runDurationUserVisAction.fName; + G4VUserVisAction* visAction = runDurationUserVisAction.fpUserVisAction; if (newValue == "all" || name.find(newValue) != std::string::npos) { any = true; AddVisAction(name,visAction,pScene,runDuration,verbosity); @@ -2953,9 +3012,9 @@ void G4VisCommandSceneAddUserAction::SetNewValue const std::vector& endOfEventUserVisActions = fpVisManager->GetEndOfEventUserVisActions(); - for (size_t i = 0; i < endOfEventUserVisActions.size(); i++) { - const G4String& name = endOfEventUserVisActions[i].fName; - G4VUserVisAction* visAction = endOfEventUserVisActions[i].fpUserVisAction; + for (const auto& endOfEventUserVisAction : endOfEventUserVisActions) { + const G4String& name = endOfEventUserVisAction.fName; + G4VUserVisAction* visAction = endOfEventUserVisAction.fpUserVisAction; if (newValue == "all" || name.find(newValue) != std::string::npos) { any = true; AddVisAction(name,visAction,pScene,endOfEvent,verbosity); @@ -2964,9 +3023,9 @@ void G4VisCommandSceneAddUserAction::SetNewValue const std::vector& endOfRunUserVisActions = fpVisManager->GetEndOfRunUserVisActions(); - for (size_t i = 0; i < endOfRunUserVisActions.size(); i++) { - const G4String& name = endOfRunUserVisActions[i].fName; - G4VUserVisAction* visAction = endOfRunUserVisActions[i].fpUserVisAction; + for (const auto& endOfRunUserVisAction : endOfRunUserVisActions) { + const G4String& name = endOfRunUserVisAction.fName; + G4VUserVisAction* visAction = endOfRunUserVisAction.fpUserVisAction; if (newValue == "all" || name.find(newValue) != std::string::npos) { any = true; AddVisAction(name,visAction,pScene,endOfRun,verbosity); diff --git a/source/visualization/management/src/G4VisCommandsSceneHandler.cc b/source/visualization/management/src/G4VisCommandsSceneHandler.cc index bc8bd70886..199480c12b 100644 --- a/source/visualization/management/src/G4VisCommandsSceneHandler.cc +++ b/source/visualization/management/src/G4VisCommandsSceneHandler.cc @@ -224,8 +224,7 @@ void G4VisCommandSceneHandlerCreate::SetNewValue (G4UIcommand* command, break; // Match found } else { const auto& nicknames = gs->GetNicknames(); - for (std::size_t i = 0; i < nicknames.size(); ++i) { - const auto& nickname = nicknames[i]; + for (const auto& nickname : nicknames) { if (G4StrUtil::icompare(graphicsSystem, nickname) == 0) { found = true; break; // Match found @@ -277,8 +276,7 @@ void G4VisCommandSceneHandlerCreate::SetNewValue (G4UIcommand* command, G4String fallbackNickname = gsl[iGS]->GetNickname() + "_FALLBACK"; for (iGS = 0; iGS < nSystems; iGS++) { const auto& nicknames = gsl[iGS]->GetNicknames(); - for (std::size_t i = 0; i < nicknames.size(); ++i) { - const auto& nickname = nicknames[i]; + for (const auto& nickname : nicknames) { if (G4StrUtil::icompare(fallbackNickname, nickname) == 0) { fallback = true; break; // Match found @@ -425,8 +423,8 @@ void G4VisCommandSceneHandlerList::SetNewValue (G4UIcommand*, const G4SceneHandlerList& list = fpVisManager -> GetAvailableSceneHandlers (); G4bool found = false; - for (std::size_t iSH = 0; iSH < list.size (); ++iSH) { - const G4String& iName = list [iSH] -> GetName (); + for (const auto* iSH : list) { + const G4String& iName = iSH -> GetName (); if (name != "all") { if (name != iName) continue; } @@ -437,10 +435,10 @@ void G4VisCommandSceneHandlerList::SetNewValue (G4UIcommand*, else { G4cout << " "; } - G4cout << " scene handler \"" << list [iSH] -> GetName () << "\"" - << " (" << list [iSH] -> GetGraphicsSystem () -> GetName () << ")"; + G4cout << " scene handler \"" << iSH -> GetName () << "\"" + << " (" << iSH -> GetGraphicsSystem () -> GetName () << ")"; if (verbosity >= G4VisManager::parameters) { - G4cout << "\n " << *(list [iSH]); + G4cout << "\n " << *iSH; } G4cout << G4endl; } diff --git a/source/visualization/management/src/G4VisCommandsTouchable.cc b/source/visualization/management/src/G4VisCommandsTouchable.cc index 29b87f3bfb..ac127b8cee 100644 --- a/source/visualization/management/src/G4VisCommandsTouchable.cc +++ b/source/visualization/management/src/G4VisCommandsTouchable.cc @@ -314,13 +314,15 @@ void G4VisCommandsTouchable::SetNewValue const G4Point3D& standardTargetPoint = currentScene->GetStandardTargetPoint(); newVP.SetCurrentTargetPoint(newTargetPoint - standardTargetPoint); - // Interpolate - auto keepVisVerbose = fpVisManager->GetVerbosity(); - fpVisManager->SetVerboseLevel(G4VisManager::errors); - if (newVP != saveVP) InterpolateToNewView(currentViewer, saveVP, newVP); - // ...and twinkle - Twinkle(currentViewer,newVP,touchables); - fpVisManager->SetVerboseLevel(keepVisVerbose); + if (currentViewer->GetKernelVisitElapsedTimeSeconds() < 0.1) { + // Interpolate + auto keepVisVerbose = fpVisManager->GetVerbosity(); + fpVisManager->SetVerboseLevel(G4VisManager::errors); + if (newVP != saveVP) InterpolateToNewView(currentViewer, saveVP, newVP); + // ...and twinkle + Twinkle(currentViewer,newVP,touchables); + fpVisManager->SetVerboseLevel(keepVisVerbose); + } if (verbosity >= G4VisManager::confirmations) { G4cout @@ -446,19 +448,23 @@ void G4VisCommandsTouchable::SetNewValue } else if (command == fpCommandTwinkle) { - G4PhysicalVolumeModel::TouchableProperties properties = - G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); - if (properties.fpTouchablePV) { - std::vector> touchables; - touchables.push_back(properties.fTouchableFullPVPath); - auto keepVisVerbose = fpVisManager->GetVerbosity(); - fpVisManager->SetVerboseLevel(G4VisManager::errors); - auto keepVP = currentViewer->GetViewParameters(); - Twinkle(currentViewer,currentViewer->GetViewParameters(),touchables); - SetViewParameters(currentViewer, keepVP); - fpVisManager->SetVerboseLevel(keepVisVerbose); + if (currentViewer->GetKernelVisitElapsedTimeSeconds() < 0.1) { + G4PhysicalVolumeModel::TouchableProperties properties = + G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); + if (properties.fpTouchablePV) { + std::vector> touchables; + touchables.push_back(properties.fTouchableFullPVPath); + auto keepVisVerbose = fpVisManager->GetVerbosity(); + fpVisManager->SetVerboseLevel(G4VisManager::errors); + auto keepVP = currentViewer->GetViewParameters(); + Twinkle(currentViewer,currentViewer->GetViewParameters(),touchables); + SetViewParameters(currentViewer, keepVP); + fpVisManager->SetVerboseLevel(keepVisVerbose); + } else { + G4warn << "Touchable not found." << G4endl; + } } else { - G4warn << "Touchable not found." << G4endl; + G4warn << "Twinkling not available - image construction time too long." << G4endl; } return; diff --git a/source/visualization/management/src/G4VisCommandsViewer.cc b/source/visualization/management/src/G4VisCommandsViewer.cc index fa0f39d377..4b752b474c 100644 --- a/source/visualization/management/src/G4VisCommandsViewer.cc +++ b/source/visualization/management/src/G4VisCommandsViewer.cc @@ -1062,8 +1062,8 @@ void G4VisCommandViewerCreate::SetNewValue (G4UIcommand* command, G4String newVa for (std::size_t ih = 0; ih < nHandlers; ++ih) { G4VSceneHandler* sh = sceneHandlerList [ih]; const G4ViewerList& viewerList = sh -> GetViewerList (); - for (std::size_t iViewer = 0; iViewer < viewerList.size (); iViewer++) { - if (viewerList [iViewer] -> GetShortName () == newShortName ) { + for (const auto* iViewer : viewerList) { + if (iViewer -> GetShortName () == newShortName ) { G4ExceptionDescription ed; ed << "ERROR: Viewer \"" << newShortName << "\" already exists."; @@ -1291,7 +1291,7 @@ G4VisCommandViewerInterpolate::G4VisCommandViewerInterpolate () { parameter -> SetDefaultValue(50); fpCommand -> SetParameter(parameter); parameter = new G4UIparameter("wait-time", 's', omitable = true); - parameter -> SetGuidance("Wait time per interpolated point"); + parameter -> SetGuidance("Minimum time per interpolated point (steady frame rate)"); parameter -> SetDefaultValue("20."); fpCommand -> SetParameter(parameter); parameter = new G4UIparameter("time-unit", 's', omitable = true); @@ -2174,7 +2174,7 @@ void G4VisCommandViewerSelect::SetNewValue (G4UIcommand*, G4String newValue) { // Set pointers, call SetView and print confirmation. fpVisManager -> SetCurrentViewer (viewer); - RefreshIfRequired(viewer); + // Refresh not required after a select - window systems keep the image // Update GUI scene tree (make sure it's in sync) viewer->UpdateGUISceneTree(); diff --git a/source/visualization/management/src/G4VisCommandsViewerSet.cc b/source/visualization/management/src/G4VisCommandsViewerSet.cc index b13f32b9a3..23917eaaaf 100644 --- a/source/visualization/management/src/G4VisCommandsViewerSet.cc +++ b/source/visualization/management/src/G4VisCommandsViewerSet.cc @@ -428,6 +428,25 @@ fViewpointVector (G4ThreeVector(0.,0.,1.)) fpCommandTargetPoint->SetParameterName("x", "y", "z", omitable = false); fpCommandTargetPoint->SetUnitCategory("Length"); + fpCommandTransparencyByDepth = new G4UIcommand + ("/vis/viewer/set/transparencyByDepth", this); + fpCommandTransparencyByDepth -> SetGuidance + ("Set overall transparency by depth in geometry tree."); + fpCommandTransparencyByDepth -> SetGuidance + ("For a volume at depth D, the opacity (alpha) is:" + "\nOption 1: Unwrap: 0 if D <= d (sudden invisibility);" + "\nOption 2: Fade: D - d (fade progresssively layer by layer);" + "\nOption 3: X-ray: as (2), but fade over whole range of depth." + "\nThe opacity calculated here is truncated [0,1] and then" + " multiplies any existing opacity." + "\nSee G4PhysicalVolumeModel.cc:644(approx) for details."); + parameter = new G4UIparameter("d", 'd', omitable = false); + fpCommandTransparencyByDepth -> SetParameter (parameter); + parameter = new G4UIparameter("option", 'i', omitable = true); + parameter -> SetGuidance("1: Unwrap; 2: Fade; 3: X-ray"); + parameter -> SetDefaultValue (1); + fpCommandTransparencyByDepth -> SetParameter (parameter); + fpCommandUpThetaPhi = new G4UIcommand ("/vis/viewer/set/upThetaPhi", this); fpCommandUpThetaPhi -> SetGuidance ("Set up vector."); @@ -520,27 +539,27 @@ fViewpointVector (G4ThreeVector(0.,0.,1.)) parameter = new G4UIparameter ("screenX", 'd', omitable = true); parameter->SetGuidance("-1 < screenX < 1"); parameter->SetParameterRange("screenX >= -1. && screenX <= 1."); - parameter->SetDefaultValue(-0.9); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); parameter = new G4UIparameter ("screenY", 'd', omitable = true); parameter->SetGuidance("-1 < screenY < 1"); parameter->SetParameterRange("screenY >= -1. && screenY <= 1."); - parameter->SetDefaultValue(-0.9); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); parameter = new G4UIparameter ("screenSize", 'd', omitable = true); - parameter->SetDefaultValue(24.); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); parameter = new G4UIparameter ("red", 'd', omitable = true); parameter->SetParameterRange("red >= 0. && red <= 1."); - parameter->SetDefaultValue(0.); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); parameter = new G4UIparameter ("green", 'd', omitable = true); parameter->SetParameterRange("green >= 0. && green <= 1."); - parameter->SetDefaultValue(1.); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); parameter = new G4UIparameter ("blue", 'd', omitable = true); parameter->SetParameterRange("blue >= 0. && blue <= 1."); - parameter->SetDefaultValue(1.); + parameter->SetCurrentAsDefault(true); fpCommandTimeWindowDisplayHeadTime->SetParameter(parameter); fpCommandTimeWindowDisplayLightFront = @@ -646,6 +665,7 @@ G4VisCommandsViewerSet::~G4VisCommandsViewerSet() { delete fpCommandViewpointThetaPhi; delete fpCommandUpVector; delete fpCommandUpThetaPhi; + delete fpCommandTransparencyByDepth; delete fpCommandTargetPoint; delete fpCommandStyle; delete fpCommandSpecialMeshVolumes; @@ -677,8 +697,25 @@ G4VisCommandsViewerSet::~G4VisCommandsViewerSet() { delete fpCommandAll; } -G4String G4VisCommandsViewerSet::GetCurrentValue(G4UIcommand*) { - return ""; +G4String G4VisCommandsViewerSet::GetCurrentValue(G4UIcommand* command) { + + G4VViewer* currentViewer = fpVisManager->GetCurrentViewer(); + const auto& vp = currentViewer->GetViewParameters(); + + if (command == fpCommandTimeWindowDisplayHeadTime) { + const auto& tp = vp.GetTimeParameters(); + return command->ConvertToString(tp.fDisplayHeadTime) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeX) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeY) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeSize) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeRed) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeGreen) + + ' ' + command->ConvertToString(tp.fDisplayHeadTimeBlue); + } + + else { + return ""; + } } void G4VisCommandsViewerSet::SetNewValue @@ -1110,7 +1147,7 @@ void G4VisCommandsViewerSet::SetNewValue else if (command == fpCommandLineSegments) { G4int nSides = G4UIcommand::ConvertToInt(newValue); - nSides = vp.SetNoOfSides(nSides); + vp.SetNoOfSides(nSides); if (verbosity >= G4VisManager::confirmations) { G4cout << "Number of line segments per circle in polygon approximation is " @@ -1120,7 +1157,7 @@ void G4VisCommandsViewerSet::SetNewValue else if (command == fpCommandNumberOfCloudPoints) { G4int nPoints = G4UIcommand::ConvertToInt(newValue); - nPoints = vp.SetNumberOfCloudPoints(nPoints); + vp.SetNumberOfCloudPoints(nPoints); if (verbosity >= G4VisManager::confirmations) { G4cout << "Number of points to be used in cloud representation of volumes is " @@ -1441,6 +1478,19 @@ void G4VisCommandsViewerSet::SetNewValue } } + else if (command == fpCommandTransparencyByDepth) { + G4double transparencyByDepth; + G4int option; + std::istringstream is (newValue); + is >> transparencyByDepth >> option; + vp.SetTransparencyByDepth(transparencyByDepth); + vp.SetTransparencyByDepthOption(option); + if (verbosity >= G4VisManager::confirmations) { + G4cout << "Transparency by depth set to " << transparencyByDepth + << " with option " << option << G4endl; + } + } + else if (command == fpCommandUpThetaPhi) { G4double theta, phi; if (ConvertToDoublePair(newValue, theta, phi)) { @@ -1509,13 +1559,15 @@ void G4VisCommandsViewerSet::SetNewValue std::istringstream iss(newValue); iss >> display >> screenX >> screenY >> screenSize >> red >> green >> blue; - vp.SetDisplayHeadTime(command->ConvertToBool(display)); - vp.SetDisplayHeadTimeX(screenX); - vp.SetDisplayHeadTimeY(screenY); - vp.SetDisplayHeadTimeSize(screenSize); - vp.SetDisplayHeadTimeRed(red); - vp.SetDisplayHeadTimeGreen(green); - vp.SetDisplayHeadTimeBlue(blue); + auto timeParameters = vp.GetTimeParameters(); + timeParameters.fDisplayHeadTime = command->ConvertToBool(display); + timeParameters.fDisplayHeadTimeX = screenX; + timeParameters.fDisplayHeadTimeY = screenY; + timeParameters.fDisplayHeadTimeSize = screenSize; + timeParameters.fDisplayHeadTimeRed = red; + timeParameters.fDisplayHeadTimeGreen = green; + timeParameters.fDisplayHeadTimeBlue = blue; + vp.SetTimeParameters(timeParameters); if (verbosity >= G4VisManager::confirmations) { G4cout << "Display head time flag set: " << vp @@ -1532,18 +1584,20 @@ void G4VisCommandsViewerSet::SetNewValue >> originX >> originY >> originZ >> unitS >> originT >> unitT >> red >> green >> blue; - vp.SetDisplayLightFront(command->ConvertToBool(display)); - vp.SetDisplayLightFrontX - (command->ConvertToDimensionedDouble(G4String(originX + ' ' + unitS))); - vp.SetDisplayLightFrontY - (command->ConvertToDimensionedDouble(G4String(originY + ' ' + unitS))); - vp.SetDisplayLightFrontZ - (command->ConvertToDimensionedDouble(G4String(originZ + ' ' + unitS))); - vp.SetDisplayLightFrontT - (command->ConvertToDimensionedDouble(G4String(originT + ' ' + unitT))); - vp.SetDisplayLightFrontRed(red); - vp.SetDisplayLightFrontGreen(green); - vp.SetDisplayLightFrontBlue(blue); + auto timeParameters = vp.GetTimeParameters(); + timeParameters.fDisplayLightFront = command->ConvertToBool(display); + timeParameters.fDisplayLightFrontX + = command->ConvertToDimensionedDouble(G4String(originX + ' ' + unitS)); + timeParameters.fDisplayLightFrontY + = command->ConvertToDimensionedDouble(G4String(originY + ' ' + unitS)); + timeParameters.fDisplayLightFrontZ + = command->ConvertToDimensionedDouble(G4String(originZ + ' ' + unitS)); + timeParameters.fDisplayLightFrontT + = command->ConvertToDimensionedDouble(G4String(originT + ' ' + unitT)); + timeParameters.fDisplayLightFrontRed = red; + timeParameters.fDisplayLightFrontGreen = green; + timeParameters.fDisplayLightFrontBlue = blue; + vp.SetTimeParameters(timeParameters); if (verbosity >= G4VisManager::confirmations) { G4cout << "Display light front flag set: " << vp @@ -1553,24 +1607,23 @@ void G4VisCommandsViewerSet::SetNewValue else if (command == fpCommandTimeWindowEndTime) { - G4String end_time_string, end_time_unit, - time_range_string, time_range_unit; - std::istringstream iss(newValue); - iss >> end_time_string >> end_time_unit - >> time_range_string >> time_range_unit; - vp.SetEndTime - (command->ConvertToDimensionedDouble - (G4String(end_time_string + ' ' + end_time_unit))); - G4double timeRange = command->ConvertToDimensionedDouble - (G4String(time_range_string + ' ' + time_range_unit)); - if (timeRange > 0.) { - vp.SetStartTime - (vp.GetEndTime() - timeRange); - } + G4String end_time_string, end_time_unit, time_range_string, time_range_unit; + std::istringstream iss(newValue); + iss >> end_time_string >> end_time_unit >> time_range_string >> time_range_unit; + auto endTime = command->ConvertToDimensionedDouble + (G4String(end_time_string + ' ' + end_time_unit)); + auto timeRange = command->ConvertToDimensionedDouble + (G4String(time_range_string + ' ' + time_range_unit)); + auto timeParameters = vp.GetTimeParameters(); + timeParameters.fEndTime = endTime; + if (timeRange > 0.) { + timeParameters.fStartTime = endTime - timeRange; + } + vp.SetTimeParameters(timeParameters); if (verbosity >= G4VisManager::confirmations) { G4cout - << "Time window start time: " << vp.GetStartTime()/ns << " ns" - << ", time window end time: " << vp.GetEndTime()/ns << " ns"; + << "Time window start time: " << vp.GetTimeParameters().fStartTime/ns << " ns" + << ", time window end time: " << vp.GetTimeParameters().fEndTime/ns << " ns"; if (timeRange > 0.) { G4cout << "\n (time range: " << timeRange/ns << " ns)"; } @@ -1579,33 +1632,34 @@ void G4VisCommandsViewerSet::SetNewValue } else if (command == fpCommandTimeWindowFadeFactor) { - vp.SetFadeFactor(command->ConvertToDouble(newValue)); + auto timeParameters = vp.GetTimeParameters(); + timeParameters.fFadeFactor = command->ConvertToDouble(newValue); + vp.SetTimeParameters(timeParameters); if (verbosity >= G4VisManager::confirmations) { - G4cout << "Time window fade factor changed to " << vp.GetFadeFactor() + G4cout << "Time window fade factor changed to " << vp.GetTimeParameters().fFadeFactor << G4endl; } } else if (command == fpCommandTimeWindowStartTime) { - G4String start_time_string, start_time_unit, - time_range_string, time_range_unit; + G4String start_time_string, start_time_unit, time_range_string, time_range_unit; std::istringstream iss(newValue); - iss >> start_time_string >> start_time_unit - >> time_range_string >> time_range_unit; - vp.SetStartTime - (command->ConvertToDimensionedDouble - (G4String(start_time_string + ' ' + start_time_unit))); - G4double timeRange = command->ConvertToDimensionedDouble + iss >> start_time_string >> start_time_unit >> time_range_string >> time_range_unit; + auto startTime = command->ConvertToDimensionedDouble + (G4String(start_time_string + ' ' + start_time_unit)); + auto timeRange = command->ConvertToDimensionedDouble (G4String(time_range_string + ' ' + time_range_unit)); + auto timeParameters = vp.GetTimeParameters(); + timeParameters.fStartTime = startTime; if (timeRange > 0.) { - vp.SetEndTime - (vp.GetStartTime() + timeRange); + timeParameters.fEndTime = startTime + timeRange; } + vp.SetTimeParameters(timeParameters); if (verbosity >= G4VisManager::confirmations) { G4cout - << "Time window start time: " << vp.GetStartTime()/ns << " ns" - << ", time window end time: " << vp.GetEndTime()/ns << " ns"; + << "Time window start time: " << vp.GetTimeParameters().fStartTime/ns << " ns" + << ", time window end time: " << vp.GetTimeParameters().fEndTime/ns << " ns"; if (timeRange > 0.) { G4cout << "\n (time range: " << timeRange/ns << " ns)"; } diff --git a/source/visualization/management/src/G4VisManager.cc b/source/visualization/management/src/G4VisManager.cc index 3ad9309ecb..b0e3ab28db 100644 --- a/source/visualization/management/src/G4VisManager.cc +++ b/source/visualization/management/src/G4VisManager.cc @@ -114,7 +114,7 @@ G4VisManager::Verbosity G4VisManager::fVerbosity = G4VisManager::warnings; G4VisManager::G4VisManager (const G4String& verbosityString) : fVerbose (1) -, fDefaultGraphicsSystemName("OGL") // Override in G4VisExecutive +, fDefaultGraphicsSystemName("TSG") // Override in G4VisExecutive , fDefaultXGeometryString ("600x600-0+0") // Override in G4VisExecutive , fDefaultGraphicsSystemBasis ("G4VisManager initialisation") , fDefaultXGeometryStringBasis("G4VisManager initialisation") @@ -548,6 +548,7 @@ void G4VisManager::RegisterMessengers () { RegisterMessenger(new G4VisCommandSceneAddAxes); RegisterMessenger(new G4VisCommandSceneAddDate); RegisterMessenger(new G4VisCommandSceneAddDigis); + RegisterMessenger(new G4VisCommandSceneAddEndOfRunMacro); RegisterMessenger(new G4VisCommandSceneAddEventID); RegisterMessenger(new G4VisCommandSceneAddExtent); RegisterMessenger(new G4VisCommandSceneAddElectricField); @@ -1347,8 +1348,8 @@ void G4VisManager::GeometryHasChanged () { // Change the world... G4VPhysicalVolume* pWorld = - G4TransportationManager::GetTransportationManager () - -> GetNavigatorForTracking () -> GetWorldVolume (); + G4TransportationManager::GetTransportationManager () + -> GetNavigatorForTracking () -> GetWorldVolume (); if (!pWorld) { if (fVerbosity >= warnings) { G4warn << "WARNING: There is no world volume!" << G4endl; @@ -1364,35 +1365,35 @@ void G4VisManager::GeometryHasChanged () { if (modelList.size ()) { G4bool modelInvalid; do { // Remove, if required, one at a time. - modelInvalid = false; - std::vector::iterator iterModel; - for (iterModel = modelList.begin(); - iterModel != modelList.end(); - ++iterModel) { - modelInvalid = !(iterModel->fpModel->Validate(fVerbosity>=warnings)); - if (modelInvalid) { - // Model invalid - remove and break. - if (fVerbosity >= warnings) { - G4warn << "WARNING: Model \"" - << iterModel->fpModel->GetGlobalDescription () - << - "\" is no longer valid - being removed\n from scene \"" - << pScene -> GetName () << "\"" - << G4endl; - } - modelList.erase (iterModel); - break; - } - } + modelInvalid = false; + std::vector::iterator iterModel; + for (iterModel = modelList.begin(); + iterModel != modelList.end(); + ++iterModel) { + modelInvalid = !(iterModel->fpModel->Validate(fVerbosity>=warnings)); + if (modelInvalid) { + // Model invalid - remove and break. + if (fVerbosity >= warnings) { + G4warn << "WARNING: Model \"" + << iterModel->fpModel->GetGlobalDescription () + << "\" is no longer valid - being removed\n from scene \"" + << pScene -> GetName () + << "\". You may have to re-establish the scene." + << G4endl; + } + modelList.erase (iterModel); + break; + } + } } while (modelInvalid); if (modelList.size () == 0) { - if (fVerbosity >= warnings) { - G4warn << "WARNING: No run-duration models left in this scene \"" - << pScene -> GetName () - << "\"." - << G4endl; - } + if (fVerbosity >= warnings) { + G4warn << "WARNING: No run-duration models left in this scene \"" + << pScene -> GetName () + << "\"." + << G4endl; + } if (pWorld) { if (fVerbosity >= warnings) { G4warn << " Adding current world to \"" @@ -1407,9 +1408,9 @@ void G4VisManager::GeometryHasChanged () { } } else { - pScene->CalculateExtent(); // Recalculate extent - G4UImanager::GetUIpointer () -> - ApplyCommand (G4String("/vis/scene/notifyHandlers " + pScene->GetName())); + pScene->CalculateExtent(); // Recalculate extent + G4UImanager::GetUIpointer () -> + ApplyCommand (G4String("/vis/scene/notifyHandlers " + pScene->GetName())); } } } @@ -1418,10 +1419,10 @@ void G4VisManager::GeometryHasChanged () { if (fpScene && fpScene -> GetRunDurationModelList ().size () == 0) { if (fVerbosity >= warnings) { G4warn << "WARNING: The current scene \"" - << fpScene -> GetName () - << "\" has no run duration models." - << "\n Use \"/vis/scene/add/volume\" or create a new scene." - << G4endl; + << fpScene -> GetName () + << "\" has no run duration models." + << "\n Use \"/vis/scene/add/volume\" or create a new scene." + << G4endl; } // Clean up if (fpSceneHandler) { @@ -1837,8 +1838,8 @@ void G4VisManager::PrintAvailableUserVisActions (Verbosity) const if (fRunDurationUserVisActions.empty()) G4cout << " none" << G4endl; else { G4cout << G4endl; - for (std::size_t i = 0; i < fRunDurationUserVisActions.size(); ++i) { - const G4String& name = fRunDurationUserVisActions[i].fName; + for (const auto& fRunDurationUserVisAction : fRunDurationUserVisActions) { + const G4String& name = fRunDurationUserVisAction.fName; G4cout << " " << name << G4endl; } } @@ -1847,8 +1848,8 @@ void G4VisManager::PrintAvailableUserVisActions (Verbosity) const if (fEndOfEventUserVisActions.empty()) G4cout << " none" << G4endl; else { G4cout << G4endl; - for (std::size_t i = 0; i < fEndOfEventUserVisActions.size(); ++i) { - const G4String& name = fEndOfEventUserVisActions[i].fName; + for (const auto& fEndOfEventUserVisAction : fEndOfEventUserVisActions) { + const G4String& name = fEndOfEventUserVisAction.fName; G4cout << " " << name << G4endl; } } @@ -1857,8 +1858,8 @@ void G4VisManager::PrintAvailableUserVisActions (Verbosity) const if (fEndOfRunUserVisActions.empty()) G4cout << " none" << G4endl; else { G4cout << G4endl; - for (std::size_t i = 0; i < fEndOfRunUserVisActions.size(); ++i) { - const G4String& name = fEndOfRunUserVisActions[i].fName; + for (const auto& fEndOfRunUserVisAction : fEndOfRunUserVisActions) { + const G4String& name = fEndOfRunUserVisAction.fName; G4cout << " " << name << G4endl; } } @@ -2328,16 +2329,12 @@ void G4VisManager::EndOfRun () { if (fIgnoreStateChanges) return; if (G4Threading::IsWorkerThread()) return; - if (!GetConcreteInstance()) return; if (!isValidViewForRun) return; if (isFakeRun) return; + if (fVerbosity >= warnings) PrintListOfPlots(); // Print even if disabled + if (!GetConcreteInstance()) return; G4RunManager* runManager = G4RunManagerFactory::GetMasterRunManager(); - - // For a fake run... - G4int nEventsToBeProcessed = runManager->GetNumberOfEventsToBeProcessed(); - if (nEventsToBeProcessed == 0) return; - const G4Run* currentRun = runManager->GetCurrentRun(); if (!currentRun) return; @@ -2399,8 +2396,6 @@ void G4VisManager::EndOfRun () << G4endl; } - if (fVerbosity >= warnings) PrintListOfPlots(); - if (fEventKeepingSuspended && fVerbosity >= warnings) { G4warn << "WARNING: G4VisManager::EndOfRun: Automatic event keeping was suspended." @@ -2518,8 +2513,8 @@ G4String G4VisManager::VerbosityString(Verbosity verbosity) { void G4VisManager::PrintAvailableVerbosity(std::ostream& os) { os << "Available verbosity options:"; - for (std::size_t i = 0; i < VerbosityGuidanceStrings.size(); ++i) { - os << '\n' << VerbosityGuidanceStrings[i]; + for (const auto& VerbosityGuidanceString : VerbosityGuidanceStrings) { + os << '\n' << VerbosityGuidanceString; } os << "\nCurrent verbosity: " << G4VisManager::VerbosityString(fVerbosity); os << std::endl; diff --git a/source/visualization/modeling/History b/source/visualization/modeling/History index a0f1a6ee55..cac2591a11 100644 --- a/source/visualization/modeling/History +++ b/source/visualization/modeling/History @@ -6,6 +6,97 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2025-04-13 John Allison (modeling-V11-03-08) +- G4PhysicalVolumeModel.cc: + - Fix typo in ModelType. + +## 2025-02-28 John Allison (modeling-V11-03-07) +- G4TrajectoryDrawerUtils.cc: + - Trap trajectories with very long global times, e.g, products of long-lived + radioactive isotopes. + - Draw as non-time-sliced trajectories. + +## 2025-02-24 John Allison (modeling-V11-03-06) +- G4ModelingParameters.hh: + - Implement G4ModelingParameters::TimeParameters::operaator!=. +- G4TrajectoryDrawerUtils.cc" + - Fix bug in fade algorithm. + +## 2025-02-22 John Allison (modeling-V11-03-05) +- G4ModelingParameters.hh: + - TimeParameters: + - Adjust defaul values: + - Set fade factor to 1 (maximum fading) - see G4TrajectoryDrawerUtils.cc. + - Set head time display 2D x-coordinate to zero (centre). + - 2D y-coordinate remains at -0.9 (bottom). +- G4TrajectoriesModel.cc: + - DescribeYourselfTo(sceneHandler): + - Draw display head time if requested and if time windowing is active. + - This is outside the loop over trajectories - it is drawn only once per + processing of the scene. + - Remove Begin/EndDraw around the trajectories loop. + - It restricted what could be drawn inside the loop, for example 2D text, + and anyway doesn't seem to make much speed improvement. +- G4TrajectoryDrawerUtils.cc: + - Add fading of trajectory slices if time windowing is active. + - Makes trajectory slices look like little meteors streaking across + the screen. + +## 2025-02-10 John Allison (modeling-V11-03-04) +- G4TrajectoryDrawerUtils.cc: + - First version of generic time windowing of trajectory slices. + - Draws only slices within the viewer time window. + - Takes advantage of recent ability to access modeling parameters via + static GetCurrentModelingParameters(). + - Also of recently added G4RichTrajectoryPoint::GetPre/PostStepPointGlobalTime(). + - 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. +- G4TrajectoryDrawByEncounteredVolume.cc, G4TrajectoryEncounteredVolumeFilter.cc: + - Use G4VTrajectory::GetAttValues() instead of CreateAttValues(). + - GetAttValues() caches the att values and so speeds repeated visits. + +## 2025-02-04 John Allison (modeling-V11-03-03) +- G4VModel: + - Introduce static data member const G4ModelinParameters* fpCurrentMP + and its static accessor, GetCurrentModelingParameters(). + - Its value is expected to be identical to fpMP set in the scene + handler, but to avoid linking problems, it must *not* be set on + the vis side; it must be set in modeling by any model that + requires it, G4TrajectoriesModel. +- G4TrajectoriesModel.cc: + - Call SetCurrentModelingParameters. + +## 2025-02-01 John Allison (modeling-V11-03-02) +- G4TrajectoryDrawerUtils.cc: + - Clang format (just formatting - no other changes). +- G4ModelingParameters.cc: + - Coverity fix: uninitialised data member. + +## 2025-01-28 John Allison (modeling-V11-03-01) +- G4ModelingParameters.hh and .icc: + - Add struct TimeParameters to G4ModelingParameters. + - This is a prerequisite for "Generic Time-Slicing" for the display of the time + evolution of event(s). With that feature, the display of tracks moving through + time will be available to all vis drivers. (Drivers will still be alllowed to + implement their own time evolution.) + - This MR simply adds the structure to modeling parameters and implements access + functions for the use of future MRs. + +## 2025-01-06 John Allison (modeling-V11-03-00) +- Co-works: visman-V11-03-00, interfaces-V11-03-00, opengl-V11-03-00, + visQt3D-V11-03-00, vis_toolssg-V11-03-00, openinventor-V11-03-00, + greps-V11-03-00. +- Re-instate the transparency slider (see lengthy explanation in management/History). +- G4ModelingParameters: + - Add TransparencyByDepth and TransparencyByDepthOption. +- G4PhysicalVolumeModel.cc: + - Rename some data members and access functions for clarity. + - Distinguish fTotalDrawnTouchables and fTotalAllTouchables. + - Add fMaxFullDepth (includes base path, i.e., from world volume). + - Add code for processing transparency by depth. + - Tidy - mainly improved indentation. + ## 2024-10-22 John Allison (modeling-V11-02-05) - G4PhysicalVolumeModel.cc: - Fixed some ragged indentations. diff --git a/source/visualization/modeling/include/G4ModelingParameters.hh b/source/visualization/modeling/include/G4ModelingParameters.hh index ed958b6064..efdab180ff 100644 --- a/source/visualization/modeling/include/G4ModelingParameters.hh +++ b/source/visualization/modeling/include/G4ModelingParameters.hh @@ -144,6 +144,49 @@ public: // With description PVNameCopyNoPath fPVNameCopyNoPath; }; + struct TimeParameters { + G4double fStartTime = -G4VisAttributes::fVeryLongTime; // ) Start and end time of drawn range, + G4double fEndTime = G4VisAttributes::fVeryLongTime; // ) e.g., for trajectory steps. + G4double fFadeFactor = 1.; // 0: no fade; 1: maximum fade with time within range. + G4bool fDisplayHeadTime = false; // Display head time (fEndTime) in 2D text. + G4double fDisplayHeadTimeX = 0.0; // ) 2D screen coords of head time, + G4double fDisplayHeadTimeY = -0.9; // ) bottom-middle of view. + G4double fDisplayHeadTimeSize = 24.; // Screen size (pixels) of the head time writing. + G4double fDisplayHeadTimeRed = 0.; // ) + G4double fDisplayHeadTimeGreen = 1.; // ) Default colour of head time writing (cyan) + G4double fDisplayHeadTimeBlue = 1.; // ) + G4bool fDisplayLightFront = false; // Display light front at head time originating at... + G4double fDisplayLightFrontX = 0.; // ) + G4double fDisplayLightFrontY = 0.; // ) ...default coordinates and time of origin + G4double fDisplayLightFrontZ = 0.; // ) of light front drawing... + G4double fDisplayLightFrontT = 0.; // ) + G4double fDisplayLightFrontRed = 0.; // ) + G4double fDisplayLightFrontGreen = 1.; // ) ...in this default colour (green) + G4double fDisplayLightFrontBlue = 0.; // ) + G4bool operator != (const TimeParameters& rhs) const { + if (fStartTime != rhs.fStartTime || + fEndTime != rhs.fEndTime || + fFadeFactor != rhs.fFadeFactor || + fDisplayHeadTime != rhs.fDisplayHeadTime || + fDisplayHeadTimeX != rhs.fDisplayHeadTimeX || + fDisplayHeadTimeY != rhs.fDisplayHeadTimeY || + fDisplayHeadTimeSize != rhs.fDisplayHeadTimeSize || + fDisplayHeadTimeRed != rhs.fDisplayHeadTimeRed || + fDisplayHeadTimeGreen != rhs.fDisplayHeadTimeGreen || + fDisplayHeadTimeBlue != rhs.fDisplayHeadTimeBlue || + fDisplayLightFront != rhs.fDisplayLightFront || + fDisplayLightFrontX != rhs.fDisplayLightFrontX || + fDisplayLightFrontY != rhs.fDisplayLightFrontY || + fDisplayLightFrontZ != rhs.fDisplayLightFrontZ || + fDisplayLightFrontT != rhs.fDisplayLightFrontT || + fDisplayLightFrontRed != rhs.fDisplayLightFrontRed || + fDisplayLightFrontGreen != rhs.fDisplayLightFrontGreen || + fDisplayLightFrontBlue != rhs.fDisplayLightFrontBlue + ) return true; + return false; + } + }; + G4ModelingParameters (); G4ModelingParameters (const G4VisAttributes* pDefaultVisAttributes, @@ -183,8 +226,11 @@ public: // With description G4DisplacedSolid* GetCutawaySolid () const; const G4Event* GetEvent () const; const std::vector& GetVisAttributesModifiers() const; + const TimeParameters& GetTimeParameters () const; G4bool IsSpecialMeshRendering () const; - const std::vector& GetSpecialMeshVolumes() const; + const std::vector& GetSpecialMeshVolumes () const; + G4double GetTransparencyByDepth () const; + G4int GetTransparencyByDepthOption () const; // Set functions... void SetWarning (G4bool); @@ -206,8 +252,11 @@ public: // With description void SetCutawaySolid (G4DisplacedSolid* pCutawaySolid); void SetEvent (const G4Event* pEvent); void SetVisAttributesModifiers(const std::vector&); + void SetTimeParameters (const TimeParameters&); void SetSpecialMeshRendering (G4bool); void SetSpecialMeshVolumes (const std::vector&); + void SetTransparencyByDepth (G4double); + void SetTransparencyByDepthOption(G4int); friend std::ostream& operator << (std::ostream& os, const G4ModelingParameters&); @@ -245,8 +294,11 @@ private: G4DisplacedSolid* fpCutawaySolid; // For generic cutaways. const G4Event* fpEvent; // Event being processed. std::vector fVisAttributesModifiers; + TimeParameters fTimeParameters; // Time parameters (for time-slicing). G4bool fSpecialMeshRendering; // Request special rendering of parameterised volumes std::vector fSpecialMeshVolumes; // If empty, all meshes. + G4double fTransparencyByDepth; // Transparency ~= (geometry depth) - fTransparencyByDepth + G4int fTransparencyByDepthOption; // Its option }; std::ostream& operator << diff --git a/source/visualization/modeling/include/G4ModelingParameters.icc b/source/visualization/modeling/include/G4ModelingParameters.icc index be16de8a9b..2ec8550808 100644 --- a/source/visualization/modeling/include/G4ModelingParameters.icc +++ b/source/visualization/modeling/include/G4ModelingParameters.icc @@ -108,6 +108,10 @@ G4ModelingParameters::GetVisAttributesModifiers() const { return fVisAttributesModifiers; } +inline const G4ModelingParameters::TimeParameters& +G4ModelingParameters::GetTimeParameters () const +{return fTimeParameters;} + inline G4bool G4ModelingParameters::IsSpecialMeshRendering () const {return fSpecialMeshRendering;} @@ -115,6 +119,14 @@ inline const std::vector& G4ModelingParameters::GetSpecialMeshVolumes() const {return fSpecialMeshVolumes;} +inline G4double G4ModelingParameters::GetTransparencyByDepth () const { + return fTransparencyByDepth; +} + +inline G4int G4ModelingParameters::GetTransparencyByDepthOption () const { + return fTransparencyByDepthOption; +} + inline void G4ModelingParameters::SetWarning (G4bool value) { fWarning = value; } @@ -181,9 +193,22 @@ inline void G4ModelingParameters::SetVisAttributesModifiers fVisAttributesModifiers = vams; } +inline void G4ModelingParameters::SetTimeParameters +(const G4ModelingParameters::TimeParameters& timeParameters) { + fTimeParameters = timeParameters; +} + inline void G4ModelingParameters::SetSpecialMeshRendering (G4bool smr) {fSpecialMeshRendering = smr;} inline void G4ModelingParameters::SetSpecialMeshVolumes (const std::vector& smvs) {fSpecialMeshVolumes = smvs;} + +inline void G4ModelingParameters::SetTransparencyByDepth (G4double transparencyByDepth) { + fTransparencyByDepth = transparencyByDepth; +} + +inline void G4ModelingParameters::SetTransparencyByDepthOption (G4int option) { + fTransparencyByDepthOption = option; +} diff --git a/source/visualization/modeling/include/G4PhysicalVolumeModel.hh b/source/visualization/modeling/include/G4PhysicalVolumeModel.hh index c023b93dd5..d94373f1eb 100644 --- a/source/visualization/modeling/include/G4PhysicalVolumeModel.hh +++ b/source/visualization/modeling/include/G4PhysicalVolumeModel.hh @@ -242,11 +242,20 @@ public: // With description // G4VTrajectory::ShowTrajectory for an example of the use of // G4Atts. - const std::map& GetNumberOfTouchables() const {return fNTouchables;} + const std::map& GetMapOfDrawnTouchables() const {return fMapDrawnTouchables;} // Number of touchables drawn at each depth. - G4int GetTotalTouchables () {return fTotalTouchables;} - // Total numbere of touchables. + G4int GetTotalDrawnTouchables () {return fTotalDrawnTouchables;} + // Total number of touchables drawn. + + G4int GetMaxFullDepth () const {return fMaxFullDepth;} + // Including base path, i.e., from the world volume + + const std::map& GetMapOfAllTouchables() const {return fMapAllTouchables;} + // Number of all touchables at each depth. + + G4int GetTotalAllTouchables () {return fTotalAllTouchables;} + // Total number of touchables. void SetRequestedDepth (G4int requestedDepth) { fRequestedDepth = requestedDepth; @@ -315,8 +324,12 @@ protected: G4VSolid* fpClippingSolid; ClippingMode fClippingMode; G4int fNClippers; // No of clipping/cutting solids - only 0 or 1 allowed - std::map fNTouchables; // No of touchables at each depth - G4int fTotalTouchables; + std::map fMapDrawnTouchables; // No of touchables drawn at each depth + G4int fTotalDrawnTouchables; + std::map fMapAllTouchables; // No of all touchables at each depth + G4int fTotalAllTouchables; + G4int fMaxFullDepth; // Including base path, i.e., from the world volume + private: diff --git a/source/visualization/modeling/include/G4VModel.hh b/source/visualization/modeling/include/G4VModel.hh index 101377ec22..0e500ea1f8 100644 --- a/source/visualization/modeling/include/G4VModel.hh +++ b/source/visualization/modeling/include/G4VModel.hh @@ -34,6 +34,13 @@ // graphics-system-indepedent description of a Geant4 component. // The key fuctionality of a model is to know how to describe itself // to a scene handler. A scene is a collection of models. +// +// The static data member const fpCurrentMP is provided so that it +// can be access statically: G4VModel::GetCurrentModelingParameters(). +// Its value is expected to be identical to fpMP set in the scene +// handler, but to avoid linking problems, it must *not* be set on +// the vis side; it must be set in modeling by any model that +// requires it, G4TrajectoriesModel. #ifndef G4VMODEL_HH #define G4VMODEL_HH @@ -58,6 +65,8 @@ public: // With description // The main task of a model is to describe itself to the graphics scene. const G4ModelingParameters* GetModelingParameters () const; + static const G4ModelingParameters* GetCurrentModelingParameters (); + // The latter for static access const G4String& GetType() const; // The sub-class should set its type, which could be the class @@ -81,6 +90,7 @@ public: // With description // Set methods for above... void SetModelingParameters (const G4ModelingParameters*); + static void SetCurrentModelingParameters (const G4ModelingParameters*); void SetExtent (const G4VisExtent&); void SetType (const G4String&); void SetGlobalDescription (const G4String&); @@ -103,6 +113,8 @@ private: // assignment not allowed. Keeps CodeWizard happy. G4VModel (const G4VModel&); G4VModel& operator = (const G4VModel&); + + static const G4ModelingParameters* fpCurrentMP; }; #include "G4VModel.icc" diff --git a/source/visualization/modeling/src/G4ModelingParameters.cc b/source/visualization/modeling/src/G4ModelingParameters.cc index d0b5436ae0..7be60f6d5d 100644 --- a/source/visualization/modeling/src/G4ModelingParameters.cc +++ b/source/visualization/modeling/src/G4ModelingParameters.cc @@ -60,7 +60,9 @@ G4ModelingParameters::G4ModelingParameters (): fCutawayMode (cutawayUnion), fpCutawaySolid (0), fpEvent (0), - fSpecialMeshRendering (false) + fSpecialMeshRendering (false), + fTransparencyByDepth (0.), + fTransparencyByDepthOption (1) {} G4ModelingParameters::G4ModelingParameters @@ -89,7 +91,9 @@ G4ModelingParameters::G4ModelingParameters fCutawayMode (cutawayUnion), fpCutawaySolid (0), fpEvent (0), - fSpecialMeshRendering (false) + fSpecialMeshRendering (false), + fTransparencyByDepth (0.), + fTransparencyByDepthOption (1) {} G4ModelingParameters::~G4ModelingParameters () @@ -255,11 +259,14 @@ std::ostream& operator << (std::ostream& os, const G4ModelingParameters& mp) } else { os << "selected meshes"; for (const auto& vol: mp.fSpecialMeshVolumes) { - os << "\n " << vol.GetName() << ':' << vol.GetCopyNo(); + os << "\n " << vol.GetName() << ':' << vol.GetCopyNo(); } } } else os << "off"; + os << "\nTransparency by depth: " << mp.fTransparencyByDepth + << ", option: " << mp.fTransparencyByDepthOption; + return os; } @@ -283,7 +290,9 @@ G4bool G4ModelingParameters::operator != (fCutawayMode != mp.fCutawayMode) || (fpCutawaySolid != mp.fpCutawaySolid) || (fpEvent != mp.fpEvent) || - (fSpecialMeshRendering != mp.fSpecialMeshRendering) + (fSpecialMeshRendering != mp.fSpecialMeshRendering) || + (fTransparencyByDepth != mp.fTransparencyByDepth) || + (fTransparencyByDepthOption != mp.fTransparencyByDepthOption) ) return true; diff --git a/source/visualization/modeling/src/G4PhysicalVolumeModel.cc b/source/visualization/modeling/src/G4PhysicalVolumeModel.cc index aeb1ba6db8..fe0c4a3674 100644 --- a/source/visualization/modeling/src/G4PhysicalVolumeModel.cc +++ b/source/visualization/modeling/src/G4PhysicalVolumeModel.cc @@ -54,6 +54,8 @@ #include #include +#include +#include #define G4warn G4cout @@ -83,7 +85,9 @@ G4PhysicalVolumeModel::G4PhysicalVolumeModel , fpClippingSolid (0) , fClippingMode (subtraction) , fNClippers (0) -, fTotalTouchables (0) +, fTotalDrawnTouchables (0) +, fTotalAllTouchables(0) +, fMaxFullDepth (0) { fType = "G4PhysicalVolumeModel"; @@ -221,7 +225,8 @@ void G4PhysicalVolumeModel::DescribeYourselfTo G4Transform3D startingTransformation = fTransform; - fNTouchables.clear(); // Keeps count of touchable drawn at each depth + fMapDrawnTouchables.clear(); // Keeps count of touchables drawn at each depth + fMapAllTouchables.clear(); // Keeps count of all touchables at each depth VisitGeometryAndGetVisReps (fpTopPV, @@ -229,9 +234,14 @@ void G4PhysicalVolumeModel::DescribeYourselfTo startingTransformation, sceneHandler); - fTotalTouchables = 0; - for (const auto& entry : fNTouchables) { - fTotalTouchables += entry.second; + fTotalDrawnTouchables = 0; + for (const auto& entry : fMapDrawnTouchables) { + fTotalDrawnTouchables += entry.second; + } + + fTotalAllTouchables = 0; + for (const auto& entry : fMapAllTouchables) { + fTotalAllTouchables += entry.second; } // Reset or clear data... @@ -520,7 +530,7 @@ void G4PhysicalVolumeModel::DescribeAndDescend // Create a vis atts object for the modified vis atts. // It is static so that we may return a reliable pointer to it. static G4VisAttributes modifiedVisAtts; - // Initialise it with the current vis atts and reset the pointer. + // Initialise it with the current operational vis atts and reset the pointer. modifiedVisAtts = *pVisAttribs; pVisAttribs = &modifiedVisAtts; const G4VisAttributes& transVisAtts = vam.GetVisAttributes(); @@ -629,6 +639,50 @@ void G4PhysicalVolumeModel::DescribeAndDescend } } + auto currentFullDepth = fCurrentDepth + (G4int)fBaseFullPVPath.size(); + + // Respect transparency by depth set by user + const auto& transparencyByDepthParameter = fpMP->GetTransparencyByDepth(); + const auto& maxDepth = sceneHandler.GetMaxGeometryDepth(); + if (transparencyByDepthParameter > 0 && maxDepth > 0) { + const auto& option = fpMP->GetTransparencyByDepthOption(); + G4double alpha = 1.; // Multiplies pre-existing opacity + switch (option) { + case 1: { // Unwrap - simply make invisible by depth + if (currentFullDepth <= transparencyByDepthParameter) alpha = 0.; + break; + } + case 2: { // Fade a layer at a time + alpha = currentFullDepth - transparencyByDepthParameter; + alpha = std::min(1.,std::max(0.,alpha)); + break; + } + case 3: { // X-ray: progressive transparancy throughout depth + // Algorithm by Andrea Barresi January 2025. + // Linear function from 0 to 1 in the [0,maxdepth] range + // Shift according to k value so that: + // alpha = 1 for all volumes when k = 0, + // alpha = 0 for all volumes when k = maxDepth. + const auto& k = transparencyByDepthParameter; + alpha = G4double(currentFullDepth) / maxDepth - 2 * k / maxDepth + 1; + alpha = std::min(1., std::max(0., alpha)); + } + default: {} + } + if (alpha < 1.) { + // As above, create a vis atts object for the modified vis atts. + // It is static so that we may return a reliable pointer to it. + static G4VisAttributes transparencyByDepthVisAtts; + // Initialise it with the current operational vis atts and reset the pointer. + transparencyByDepthVisAtts = *pVisAttribs; + pVisAttribs = &transparencyByDepthVisAtts; + // Adjust the transparency (multiply any existing opacity) + auto colour = pVisAttribs->GetColour(); + colour.SetAlpha(colour.GetAlpha()*alpha); + transparencyByDepthVisAtts.SetColour(colour); + } + } + // Make decision to draw... G4bool thisToBeDrawn = true; @@ -661,11 +715,16 @@ void G4PhysicalVolumeModel::DescribeAndDescend // Set "drawn" flag (it was true by default) - thisToBeDrawn may be false nodeID.SetDrawn(thisToBeDrawn); + fMapAllTouchables[currentFullDepth]++; // Increment for every touchable at each depth + if (fMaxFullDepth < currentFullDepth) fMaxFullDepth = currentFullDepth; + if (thisToBeDrawn) { // Update path of drawn physical volumes... fDrawnPVPath.push_back(nodeID); + fMapDrawnTouchables[currentFullDepth]++; // Increment for every touchable drawn at each depth + if (fpMP->IsExplode() && fDrawnPVPath.size() == 1) { // For top-level drawn volumes, explode along radius... G4Transform3D centering = G4Translate3D(fpMP->GetExplodeCentre()); @@ -676,15 +735,12 @@ void G4PhysicalVolumeModel::DescribeAndDescend centred.getDecomposition(oldScale, oldRotation, oldTranslation); G4double explodeFactor = fpMP->GetExplodeFactor(); G4Translate3D newTranslation = - G4Translate3D(explodeFactor * oldTranslation.dx(), - explodeFactor * oldTranslation.dy(), - explodeFactor * oldTranslation.dz()); + G4Translate3D(explodeFactor * oldTranslation.dx(), + explodeFactor * oldTranslation.dy(), + explodeFactor * oldTranslation.dz()); theNewAT = centering * newTranslation * oldRotation * oldScale; } - auto fullDepth = fCurrentDepth + (G4int)fBaseFullPVPath.size(); - fNTouchables[fullDepth]++; // Increment for every touchable drawn at each depth - DescribeSolid (theNewAT, pSol, pVisAttribs, sceneHandler); } @@ -712,13 +768,13 @@ void G4PhysicalVolumeModel::DescribeAndDescend // parameters... G4bool cullingCovered = fpMP->IsCullingCovered(); G4bool surfaceDrawing = - fpMP->GetDrawingStyle() == G4ModelingParameters::hsr || - fpMP->GetDrawingStyle() == G4ModelingParameters::hlhsr; + fpMP->GetDrawingStyle() == G4ModelingParameters::hsr || + fpMP->GetDrawingStyle() == G4ModelingParameters::hlhsr; if (pVisAttribs->IsForceDrawingStyle()) { switch (pVisAttribs->GetForcedDrawingStyle()) { - default: - case G4VisAttributes::wireframe: surfaceDrawing = false; break; - case G4VisAttributes::solid: surfaceDrawing = true; break; + default: + case G4VisAttributes::wireframe: surfaceDrawing = false; break; + case G4VisAttributes::solid: surfaceDrawing = true; break; } } G4bool opaque = pVisAttribs->GetColour().GetAlpha() >= 1.; @@ -726,19 +782,19 @@ void G4PhysicalVolumeModel::DescribeAndDescend if (culling) { // 6) ..and culling of invisible volumes is on... if (cullingInvisible) { - // 7) ...and the mother requests daughters invisible - if (daughtersInvisible) daughtersToBeDrawn = false; + // 7) ...and the mother requests daughters invisible + if (daughtersInvisible) daughtersToBeDrawn = false; } // 8) Or culling of covered daughters is requested... if (cullingCovered) { - // 9) ...and surface drawing is operating... - if (surfaceDrawing) { - // 10) ...but only if mother is visible... - if (thisToBeDrawn) { - // 11) ...and opaque... - if (opaque) daughtersToBeDrawn = false; - } - } + // 9) ...and surface drawing is operating... + if (surfaceDrawing) { + // 10) ...but only if mother is visible... + if (thisToBeDrawn) { + // 11) ...and opaque... + if (opaque) daughtersToBeDrawn = false; + } + } } } } @@ -750,7 +806,7 @@ void G4PhysicalVolumeModel::DescribeAndDescend // Descend the geometry structure recursively... fCurrentDepth++; VisitGeometryAndGetVisReps - (pDaughterVPV, requestedDepth - 1, theNewAT, sceneHandler); + (pDaughterVPV, requestedDepth - 1, theNewAT, sceneHandler); fCurrentDepth--; } } diff --git a/source/visualization/modeling/src/G4TrajectoriesModel.cc b/source/visualization/modeling/src/G4TrajectoriesModel.cc index 6a3b640ebc..aeedad00ae 100644 --- a/source/visualization/modeling/src/G4TrajectoriesModel.cc +++ b/source/visualization/modeling/src/G4TrajectoriesModel.cc @@ -43,6 +43,10 @@ #include "G4AttCheck.hh" #include "G4UIcommand.hh" #include "G4VVisManager.hh" +#include "G4Text.hh" +#include "G4SystemOfUnits.hh" + +#include G4TrajectoriesModel::G4TrajectoriesModel () :fpCurrentTrajectory(0) @@ -80,17 +84,15 @@ void G4TrajectoriesModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) return; } + G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + if (!pVVisManager) return; + G4TrajectoryContainer* TC = event -> GetTrajectoryContainer (); if (!TC) return; - G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if (!pVVisManager) return; - - pVVisManager->BeginDraw(); - // The use of Begin/EndDraw (optional methods to improve drawing - // speed) assumes all trajectories are drawn with the same - // transformation. If not, a fatal exception with be raised in - // G4VisManager::DrawT. + // Need to set the static "current" modeling parameters separately + G4VModel::SetCurrentModelingParameters(fpMP); + for (std::size_t iT = 0; iT < TC->entries(); ++iT) { fpCurrentTrajectory = (*TC) [iT]; // Debug trajectory: @@ -100,7 +102,22 @@ void G4TrajectoriesModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) if (fpCurrentTrajectory) sceneHandler.AddCompound (*fpCurrentTrajectory); } - pVVisManager->EndDraw(); + + // If time windowing is active, display head time if requested + const auto& timeParameters = fpMP->GetTimeParameters(); + if (timeParameters.fDisplayHeadTime && timeParameters.fStartTime >= 0.) { + const auto& tp = timeParameters; // Alias + std::ostringstream oss; + oss << std::fixed << std::setprecision(2) << timeParameters.fEndTime/ns << " ns"; + G4Text headTime(oss.str()); + headTime.SetLayout(G4Text::centre); + headTime.SetScreenSize(tp.fDisplayHeadTimeSize); + headTime.SetPosition(G4Point3D(tp.fDisplayHeadTimeX, tp.fDisplayHeadTimeY, 0.)); + G4VisAttributes headTimeVisAtts + (G4Colour(tp.fDisplayHeadTimeRed, tp.fDisplayHeadTimeGreen, tp.fDisplayHeadTimeBlue)); + headTime.SetVisAttributes(&headTimeVisAtts); + pVVisManager->Draw2D(headTime); + } } const std::map* G4TrajectoriesModel::GetAttDefs() const diff --git a/source/visualization/modeling/src/G4TrajectoryDrawByEncounteredVolume.cc b/source/visualization/modeling/src/G4TrajectoryDrawByEncounteredVolume.cc index 2ddb3218ee..a118004e3c 100644 --- a/source/visualization/modeling/src/G4TrajectoryDrawByEncounteredVolume.cc +++ b/source/visualization/modeling/src/G4TrajectoryDrawByEncounteredVolume.cc @@ -61,7 +61,7 @@ G4TrajectoryDrawByEncounteredVolume::Draw(const G4VTrajectory& traj, const G4boo for (G4int iPoint = 0; iPoint < richTrajectory.GetPointEntries(); iPoint++) { G4VTrajectoryPoint* point = richTrajectory.GetPoint(iPoint); if (!point) continue; - std::vector* attValues = point->CreateAttValues(); + const auto attValues = point->GetAttValues(); std::vector::const_iterator iAtt; for (iAtt = attValues->begin(); iAtt != attValues->end(); ++iAtt) { if (iAtt->GetName() == "PostVPath" && diff --git a/source/visualization/modeling/src/G4TrajectoryDrawerUtils.cc b/source/visualization/modeling/src/G4TrajectoryDrawerUtils.cc index 05fe46169a..e0274a8c3f 100644 --- a/source/visualization/modeling/src/G4TrajectoryDrawerUtils.cc +++ b/source/visualization/modeling/src/G4TrajectoryDrawerUtils.cc @@ -27,326 +27,324 @@ // Jane Tinslay, John Allison, Joseph Perl November 2005 // #include "G4TrajectoryDrawerUtils.hh" + +#include "G4AttValue.hh" #include "G4Colour.hh" #include "G4Polyline.hh" #include "G4Polymarker.hh" +#include "G4UIcommand.hh" #include "G4VTrajectory.hh" #include "G4VTrajectoryPoint.hh" +#include "G4RichTrajectoryPoint.hh" +#include "G4VVisManager.hh" #include "G4VisAttributes.hh" #include "G4VisTrajContext.hh" -#include "G4VVisManager.hh" -#include "G4UIcommand.hh" -#include "G4AttValue.hh" +#include "G4VModel.hh" +#include "G4ModelingParameters.hh" #include #define G4warn G4cout -namespace G4TrajectoryDrawerUtils { +namespace G4TrajectoryDrawerUtils +{ - enum TimesValidity {InvalidTimes, ValidTimes}; +enum TimesValidity +{ + InvalidTimes, + ValidTimes +}; - TimesValidity GetPointsAndTimes - (const G4VTrajectory& traj, - const G4VisTrajContext& context, - G4Polyline& trajectoryLine, - G4Polymarker& auxiliaryPoints, - G4Polymarker& stepPoints, - std::vector& trajectoryLineTimes, - std::vector& auxiliaryPointTimes, - std::vector& stepPointTimes) - { - TimesValidity validity = InvalidTimes; - if (context.GetTimeSliceInterval()) validity = ValidTimes; +TimesValidity GetPointsAndTimes(const G4VTrajectory& traj, const G4VisTrajContext& context, + G4Polyline& trajectoryLine, G4Polymarker& auxiliaryPoints, + G4Polymarker& stepPoints, + std::vector& trajectoryLineTimes, + std::vector& auxiliaryPointTimes, + std::vector& stepPointTimes) +{ + TimesValidity validity = InvalidTimes; + if (context.GetTimeSliceInterval()) validity = ValidTimes; - // Memory for last trajectory point position for auxiliary point - // time interpolation algorithm. There are no auxiliary points - // for the first trajectory point, so its initial value is - // immaterial. - G4ThreeVector lastTrajectoryPointPosition; + // Memory for last trajectory point position for auxiliary point + // time interpolation algorithm. There are no auxiliary points + // for the first trajectory point, so its initial value is + // immaterial. + G4ThreeVector lastTrajectoryPointPosition; - // Keep positions. Don't store unless first or different. - std::vector positions; + // Keep positions. Don't store unless first or different. + std::vector positions; - for (G4int iPoint=0; iPointGetPosition(); - G4VTrajectoryPoint* aTrajectoryPoint = traj.GetPoint(iPoint); - const G4ThreeVector& trajectoryPointPosition = - aTrajectoryPoint->GetPosition(); + // Only store if first or if different + if (positions.size() == 0 || trajectoryPointPosition != positions[positions.size() - 1]) { + // Pre- and Post-Point times from the trajectory point... + G4double trajectoryPointPreTime = -std::numeric_limits::max(); + G4double trajectoryPointPostTime = std::numeric_limits::max(); - // Only store if first or if different - if (positions.size() == 0 || - trajectoryPointPosition != positions[positions.size()-1]) { + if (context.GetTimeSliceInterval() && validity == ValidTimes) { - // Pre- and Post-Point times from the trajectory point... - G4double trajectoryPointPreTime = -std::numeric_limits::max(); - G4double trajectoryPointPostTime = std::numeric_limits::max(); - - if (context.GetTimeSliceInterval() && validity == ValidTimes) { - - std::vector* trajectoryPointAttValues = - aTrajectoryPoint->CreateAttValues(); - if (!trajectoryPointAttValues) { - static G4bool warnedNoAttValues = false; - if (!warnedNoAttValues) { - G4warn << - "*************************************************************************" - "\n* WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: no att values." - "\n*************************************************************************" - << G4endl; - warnedNoAttValues = true; - } - validity = InvalidTimes; - } else { - G4bool foundPreTime = false, foundPostTime = false; - for (std::vector::iterator i = - trajectoryPointAttValues->begin(); - i != trajectoryPointAttValues->end(); ++i) { - if (i->GetName() == "PreT") { - trajectoryPointPreTime = - G4UIcommand::ConvertToDimensionedDouble(i->GetValue()); - foundPreTime = true; - } - if (i->GetName() == "PostT") { - trajectoryPointPostTime = - G4UIcommand::ConvertToDimensionedDouble(i->GetValue()); - foundPostTime = true; - } - } - if (!foundPreTime || !foundPostTime) { - static G4bool warnedTimesNotFound = false; - if (!warnedTimesNotFound) { - G4warn << - "*************************************************************************" - "\n* WARNING: G4TrajectoryDrawerUtils::GetPointsAndTimes: times not found." - "\n You need to specify \"/vis/scene/add/trajectories rich\"" - "\n*************************************************************************" - << G4endl; - warnedTimesNotFound = true; - } - validity = InvalidTimes; - } - } - delete trajectoryPointAttValues; // (Must be deleted after use.) - } - - const std::vector* auxiliaries - = aTrajectoryPoint->GetAuxiliaryPoints(); - if (0 != auxiliaries) { - for (size_t iAux=0; iAuxsize(); ++iAux) { - const G4ThreeVector& auxPointPosition = (*auxiliaries)[iAux]; - if (positions.size() == 0 || - auxPointPosition != positions[positions.size()-1]) { - // Only store if first or if different - positions.push_back(trajectoryPointPosition); - trajectoryLine.push_back(auxPointPosition); - auxiliaryPoints.push_back(auxPointPosition); - if (validity == ValidTimes) { - // Interpolate time for auxiliary points... - G4double s1 = - (auxPointPosition - lastTrajectoryPointPosition).mag(); - G4double s2 = - (trajectoryPointPosition - auxPointPosition).mag(); - G4double t = trajectoryPointPreTime + - (trajectoryPointPostTime - trajectoryPointPreTime) * - (s1 / (s1 + s2)); - trajectoryLineTimes.push_back(t); - auxiliaryPointTimes.push_back(t); - } - } - } - } - - positions.push_back(trajectoryPointPosition); - trajectoryLine.push_back(trajectoryPointPosition); - stepPoints.push_back(trajectoryPointPosition); - if (validity == ValidTimes) { - trajectoryLineTimes.push_back(trajectoryPointPostTime); - stepPointTimes.push_back(trajectoryPointPostTime); - } - lastTrajectoryPointPosition = trajectoryPointPosition; + const auto richTrajectoryPoint = dynamic_cast(aTrajectoryPoint); + if (richTrajectoryPoint) { + trajectoryPointPreTime = richTrajectoryPoint->GetPreStepPointGlobalTime(); + trajectoryPointPostTime = richTrajectoryPoint->GetPostStepPointGlobalTime(); + if (trajectoryPointPostTime > 1000000. * context.GetTimeSliceInterval()) { + static G4bool warnedTimeExceeded = false; + if (!warnedTimeExceeded) { + G4Exception("G4TrajectoryUtils::GetPointsAndTimes", "modeling0128", JustWarning, + "Trajectory point times exceed limit (>1000000 time slice)." + "\nNormal trajectory will be drawn."); + warnedTimeExceeded = true; + } + validity = InvalidTimes; + } + } else { + static G4bool warnedNoAttValues = false; + if (!warnedNoAttValues) { + G4Exception("G4TrajectoryUtils::GetPointsAndTimes", "modeling0127", JustWarning, + "Trajectory point times not found. Use G4RichTrajectory:" + "\n /vis/scene/add/trajectories rich"); + warnedNoAttValues = true; + } + validity = InvalidTimes; + } } - } - return validity; - } - static void SliceLine(G4double timeIncrement, - G4Polyline& trajectoryLine, - std::vector& trajectoryLineTimes) - { - // Assumes valid arguments from GetPoints and GetTimes. - - G4Polyline newTrajectoryLine; - std::vector newTrajectoryLineTimes; - - newTrajectoryLine.push_back(trajectoryLine[0]); - newTrajectoryLineTimes.push_back(trajectoryLineTimes[0]); - size_t lineSize = trajectoryLine.size(); - if (lineSize > 1) { - for (size_t i = 1; i < trajectoryLine.size(); ++i) { - G4double deltaT = trajectoryLineTimes[i] - trajectoryLineTimes[i - 1]; - if (deltaT > 0.) { - G4double practicalTimeIncrement = - std::max(timeIncrement, deltaT / 100.); - for (G4double t = - (int(trajectoryLineTimes[i - 1]/practicalTimeIncrement) + 1) * - practicalTimeIncrement; - t <= trajectoryLineTimes[i]; - t += practicalTimeIncrement) { - G4ThreeVector pos = trajectoryLine[i - 1] + - (trajectoryLine[i] - trajectoryLine[i - 1]) * - ((t - trajectoryLineTimes[i - 1]) / deltaT); - newTrajectoryLine.push_back(pos); - newTrajectoryLineTimes.push_back(t); - } - } - newTrajectoryLine.push_back(trajectoryLine[i]); - newTrajectoryLineTimes.push_back(trajectoryLineTimes[i]); + const std::vector* auxiliaries = aTrajectoryPoint->GetAuxiliaryPoints(); + if (0 != auxiliaries) { + for (size_t iAux = 0; iAux < auxiliaries->size(); ++iAux) { + const G4ThreeVector& auxPointPosition = (*auxiliaries)[iAux]; + if (positions.size() == 0 || auxPointPosition != positions[positions.size() - 1]) { + // Only store if first or if different + positions.push_back(trajectoryPointPosition); + trajectoryLine.push_back(auxPointPosition); + auxiliaryPoints.push_back(auxPointPosition); + if (validity == ValidTimes) { + // Interpolate time for auxiliary points... + G4double s1 = (auxPointPosition - lastTrajectoryPointPosition).mag(); + G4double s2 = (trajectoryPointPosition - auxPointPosition).mag(); + G4double t = trajectoryPointPreTime + + (trajectoryPointPostTime - trajectoryPointPreTime) * (s1 / (s1 + s2)); + trajectoryLineTimes.push_back(t); + auxiliaryPointTimes.push_back(t); + } + } + } } - } - trajectoryLine = std::move(newTrajectoryLine); - trajectoryLineTimes = std::move(newTrajectoryLineTimes); + positions.push_back(trajectoryPointPosition); + trajectoryLine.push_back(trajectoryPointPosition); + stepPoints.push_back(trajectoryPointPosition); + if (validity == ValidTimes) { + trajectoryLineTimes.push_back(trajectoryPointPostTime); + stepPointTimes.push_back(trajectoryPointPostTime); + } + lastTrajectoryPointPosition = trajectoryPointPosition; + } } + return validity; +} - static void DrawWithoutTime(const G4VisTrajContext& myContext, - G4Polyline& trajectoryLine, - G4Polymarker& auxiliaryPoints, - G4Polymarker& stepPoints) - { - // Draw without time slice information +static void SliceLine(G4double timeIncrement, G4Polyline& trajectoryLine, + std::vector& trajectoryLineTimes) +{ + // Assumes valid arguments from GetPoints and GetTimes. - G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if (0 == pVVisManager) return; - - if (myContext.GetDrawLine() && myContext.GetLineVisible()) { - G4VisAttributes trajectoryLineAttribs(myContext.GetLineColour()); - trajectoryLineAttribs.SetLineWidth(myContext.GetLineWidth()); - trajectoryLine.SetVisAttributes(&trajectoryLineAttribs); + G4Polyline newTrajectoryLine; + std::vector newTrajectoryLineTimes; - pVVisManager->Draw(trajectoryLine); - } - - if (myContext.GetDrawAuxPts() && myContext.GetAuxPtsVisible() - && (auxiliaryPoints.size() > 0)) { - auxiliaryPoints.SetMarkerType(myContext.GetAuxPtsType()); - auxiliaryPoints.SetSize(myContext.GetAuxPtsSizeType(), myContext.GetAuxPtsSize()); - auxiliaryPoints.SetFillStyle(myContext.GetAuxPtsFillStyle()); - - G4VisAttributes auxiliaryPointsAttribs(myContext.GetAuxPtsColour()); - auxiliaryPoints.SetVisAttributes(&auxiliaryPointsAttribs); - - pVVisManager->Draw(auxiliaryPoints); - } - - if (myContext.GetDrawStepPts() && myContext.GetStepPtsVisible() - && (stepPoints.size() > 0)) { - stepPoints.SetMarkerType(myContext.GetStepPtsType()); - stepPoints.SetSize(myContext.GetStepPtsSizeType(), myContext.GetStepPtsSize()); - stepPoints.SetFillStyle(myContext.GetStepPtsFillStyle()); - - G4VisAttributes stepPointsAttribs(myContext.GetStepPtsColour()); - stepPoints.SetVisAttributes(&stepPointsAttribs); - - pVVisManager->Draw(stepPoints); + newTrajectoryLine.push_back(trajectoryLine[0]); + newTrajectoryLineTimes.push_back(trajectoryLineTimes[0]); + size_t lineSize = trajectoryLine.size(); + if (lineSize > 1) { + for (size_t i = 1; i < trajectoryLine.size(); ++i) { + G4double deltaT = trajectoryLineTimes[i] - trajectoryLineTimes[i - 1]; + if (deltaT > 0.) { + G4double practicalTimeIncrement = std::max(timeIncrement, deltaT / 100.); + for (G4double t = (int(trajectoryLineTimes[i - 1] / practicalTimeIncrement) + 1) + * practicalTimeIncrement; + t <= trajectoryLineTimes[i]; t += practicalTimeIncrement) + { + G4ThreeVector pos = trajectoryLine[i - 1] + + (trajectoryLine[i] - trajectoryLine[i - 1]) + * ((t - trajectoryLineTimes[i - 1]) / deltaT); + newTrajectoryLine.push_back(pos); + newTrajectoryLineTimes.push_back(t); + } + } + newTrajectoryLine.push_back(trajectoryLine[i]); + newTrajectoryLineTimes.push_back(trajectoryLineTimes[i]); } } - static void DrawWithTime(const G4VisTrajContext& myContext, - G4Polyline& trajectoryLine, - G4Polymarker& auxiliaryPoints, - G4Polymarker& stepPoints, - std::vector& trajectoryLineTimes, - std::vector& auxiliaryPointTimes, - std::vector& stepPointTimes) - { - // Draw with time slice information + trajectoryLine = std::move(newTrajectoryLine); + trajectoryLineTimes = std::move(newTrajectoryLineTimes); +} - G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if (0 == pVVisManager) return; +static void DrawWithoutTime(const G4VisTrajContext& myContext, G4Polyline& trajectoryLine, + G4Polymarker& auxiliaryPoints, G4Polymarker& stepPoints) +{ + // Draw without time slice information - if (myContext.GetDrawLine() && myContext.GetLineVisible()) { - G4VisAttributes trajectoryLineAttribs(myContext.GetLineColour()); - trajectoryLineAttribs.SetLineWidth(myContext.GetLineWidth()); + G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + if (0 == pVVisManager) return; - for (size_t i = 1; i < trajectoryLine.size(); ++i ) { - G4Polyline slice; - slice.push_back(trajectoryLine[i -1]); - slice.push_back(trajectoryLine[i]); - trajectoryLineAttribs.SetStartTime(trajectoryLineTimes[i - 1]); - trajectoryLineAttribs.SetEndTime(trajectoryLineTimes[i]); - slice.SetVisAttributes(&trajectoryLineAttribs); - pVVisManager->Draw(slice); - } - } + if (myContext.GetDrawLine() && myContext.GetLineVisible()) { + G4VisAttributes trajectoryLineAttribs(myContext.GetLineColour()); + trajectoryLineAttribs.SetLineWidth(myContext.GetLineWidth()); + trajectoryLine.SetVisAttributes(&trajectoryLineAttribs); - if (myContext.GetDrawAuxPts() && myContext.GetAuxPtsVisible() - && (auxiliaryPoints.size() > 0)) { - G4VisAttributes auxiliaryPointsAttribs(myContext.GetAuxPtsColour()); + pVVisManager->Draw(trajectoryLine); + } - for (size_t i = 0; i < auxiliaryPoints.size(); ++i ) { - G4Polymarker point; - point.push_back(auxiliaryPoints[i]); - point.SetMarkerType(myContext.GetAuxPtsType()); - point.SetSize(myContext.GetAuxPtsSizeType(), myContext.GetAuxPtsSize()); - point.SetFillStyle(myContext.GetAuxPtsFillStyle()); - auxiliaryPointsAttribs.SetStartTime(auxiliaryPointTimes[i]); - auxiliaryPointsAttribs.SetEndTime(auxiliaryPointTimes[i]); - point.SetVisAttributes(&auxiliaryPointsAttribs); - pVVisManager->Draw(point); - } - } + if (myContext.GetDrawAuxPts() && myContext.GetAuxPtsVisible() && (auxiliaryPoints.size() > 0)) { + auxiliaryPoints.SetMarkerType(myContext.GetAuxPtsType()); + auxiliaryPoints.SetSize(myContext.GetAuxPtsSizeType(), myContext.GetAuxPtsSize()); + auxiliaryPoints.SetFillStyle(myContext.GetAuxPtsFillStyle()); - if (myContext.GetDrawStepPts() && myContext.GetStepPtsVisible() - && (stepPoints.size() > 0)) { - G4VisAttributes stepPointsAttribs(myContext.GetStepPtsColour()); + G4VisAttributes auxiliaryPointsAttribs(myContext.GetAuxPtsColour()); + auxiliaryPoints.SetVisAttributes(&auxiliaryPointsAttribs); - for (size_t i = 0; i < stepPoints.size(); ++i ) { - G4Polymarker point; - point.push_back(stepPoints[i]); - point.SetMarkerType(myContext.GetStepPtsType()); - point.SetSize(myContext.GetStepPtsSizeType(), myContext.GetStepPtsSize()); - point.SetFillStyle(myContext.GetStepPtsFillStyle()); - stepPointsAttribs.SetStartTime(stepPointTimes[i]); - stepPointsAttribs.SetEndTime(stepPointTimes[i]); - point.SetVisAttributes(&stepPointsAttribs); - pVVisManager->Draw(point); + pVVisManager->Draw(auxiliaryPoints); + } + + if (myContext.GetDrawStepPts() && myContext.GetStepPtsVisible() && (stepPoints.size() > 0)) { + stepPoints.SetMarkerType(myContext.GetStepPtsType()); + stepPoints.SetSize(myContext.GetStepPtsSizeType(), myContext.GetStepPtsSize()); + stepPoints.SetFillStyle(myContext.GetStepPtsFillStyle()); + + G4VisAttributes stepPointsAttribs(myContext.GetStepPtsColour()); + stepPoints.SetVisAttributes(&stepPointsAttribs); + + pVVisManager->Draw(stepPoints); + } +} + +static void DrawWithTime(const G4VisTrajContext& myContext, G4Polyline& trajectoryLine, + G4Polymarker& auxiliaryPoints, G4Polymarker& stepPoints, + std::vector& trajectoryLineTimes, + std::vector& auxiliaryPointTimes, + std::vector& stepPointTimes) +{ + // Draw with time slice information + + G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); + if (0 == pVVisManager) return; + + const auto& timeParameters = G4VModel::GetCurrentModelingParameters()->GetTimeParameters(); + const auto& viewerStartTime = timeParameters.fStartTime; + const auto& viewerEndTime = timeParameters.fEndTime; + const auto& viewerFadeFactor = timeParameters.fFadeFactor; + + if (myContext.GetDrawLine() && myContext.GetLineVisible()) { + G4VisAttributes trajectoryLineAttribs(myContext.GetLineColour()); + trajectoryLineAttribs.SetLineWidth(myContext.GetLineWidth()); + + for (size_t i = 1; i < trajectoryLine.size(); ++i) { + const auto& sliceStartTime = trajectoryLineTimes[i - 1]; + const auto& sliceEndTime = trajectoryLineTimes[i]; + if (sliceStartTime >= viewerStartTime && sliceEndTime <= viewerEndTime) { + G4Polyline slice; + slice.push_back(trajectoryLine[i - 1]); + slice.push_back(trajectoryLine[i]); + trajectoryLineAttribs.SetStartTime(trajectoryLineTimes[i - 1]); + trajectoryLineAttribs.SetEndTime(trajectoryLineTimes[i]); + if (viewerStartTime >= 0.) { + auto opacityMultiplier = 1. - viewerFadeFactor + * (viewerEndTime - trajectoryLineTimes[i]) / (viewerEndTime - viewerStartTime); + auto colour = myContext.GetLineColour(); + colour.SetAlpha(opacityMultiplier * colour.GetAlpha()); + trajectoryLineAttribs.SetColour(colour); + } + slice.SetVisAttributes(&trajectoryLineAttribs); + pVVisManager->Draw(slice); } } } - void DrawLineAndPoints(const G4VTrajectory& traj, const G4VisTrajContext& context) - { - // Return if don't need to do anything - if (!context.GetDrawLine() && !context.GetDrawAuxPts() && !context.GetDrawStepPts()) return; - - // Get points and times (times are returned only if time-slicing - // is requested). - G4Polyline trajectoryLine; - G4Polymarker stepPoints; - G4Polymarker auxiliaryPoints; - std::vector trajectoryLineTimes; - std::vector stepPointTimes; - std::vector auxiliaryPointTimes; + if (myContext.GetDrawAuxPts() && myContext.GetAuxPtsVisible() && (auxiliaryPoints.size() > 0)) { + G4VisAttributes auxiliaryPointsAttribs(myContext.GetAuxPtsColour()); - TimesValidity validity = GetPointsAndTimes - (traj, context, - trajectoryLine, auxiliaryPoints, stepPoints, - trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes); - - if (validity == ValidTimes) { + for (size_t i = 0; i < auxiliaryPoints.size(); ++i) { + const auto& auxStartTime = auxiliaryPointTimes[i]; + const auto& auxEndTime = auxiliaryPointTimes[i]; + if (auxStartTime >= viewerStartTime && auxEndTime <= viewerEndTime) { + G4Polymarker point; + point.push_back(auxiliaryPoints[i]); + point.SetMarkerType(myContext.GetAuxPtsType()); + point.SetSize(myContext.GetAuxPtsSizeType(), myContext.GetAuxPtsSize()); + point.SetFillStyle(myContext.GetAuxPtsFillStyle()); + auxiliaryPointsAttribs.SetStartTime(auxiliaryPointTimes[i]); + auxiliaryPointsAttribs.SetEndTime(auxiliaryPointTimes[i]); + if (viewerStartTime >= 0.) { + auto opacityMultiplier = 1. - viewerFadeFactor + * (viewerEndTime - auxiliaryPointTimes[i] ) / (viewerEndTime - viewerStartTime); + auto colour = myContext.GetAuxPtsColour(); + colour.SetAlpha(opacityMultiplier * colour.GetAlpha()); + auxiliaryPointsAttribs.SetColour(colour); + } + point.SetVisAttributes(&auxiliaryPointsAttribs); + pVVisManager->Draw(point); + } + } + } - SliceLine(context.GetTimeSliceInterval(), - trajectoryLine, trajectoryLineTimes); - - DrawWithTime(context, - trajectoryLine, auxiliaryPoints, stepPoints, - trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes); - - } else { - - DrawWithoutTime(context, trajectoryLine, auxiliaryPoints, stepPoints); + if (myContext.GetDrawStepPts() && myContext.GetStepPtsVisible() && (stepPoints.size() > 0)) { + G4VisAttributes stepPointsAttribs(myContext.GetStepPtsColour()); + for (size_t i = 0; i < stepPoints.size(); ++i) { + const auto& pointStartTime = stepPointTimes[i]; + const auto& pointEndTime = stepPointTimes[i]; + if (pointStartTime >= viewerStartTime && pointEndTime <= viewerEndTime) { + G4Polymarker point; + point.push_back(stepPoints[i]); + point.SetMarkerType(myContext.GetStepPtsType()); + point.SetSize(myContext.GetStepPtsSizeType(), myContext.GetStepPtsSize()); + point.SetFillStyle(myContext.GetStepPtsFillStyle()); + stepPointsAttribs.SetStartTime(stepPointTimes[i]); + stepPointsAttribs.SetEndTime(stepPointTimes[i]); + if (viewerStartTime >= 0.) { + auto opacityMultiplier = 1. - viewerFadeFactor + * (viewerEndTime - stepPointTimes[i]) / (viewerEndTime - viewerStartTime); + auto colour = myContext.GetStepPtsColour(); + colour.SetAlpha(opacityMultiplier * colour.GetAlpha()); + stepPointsAttribs.SetColour(colour); + } + point.SetVisAttributes(&stepPointsAttribs); + pVVisManager->Draw(point); + } } } } + +void DrawLineAndPoints(const G4VTrajectory& traj, const G4VisTrajContext& context) +{ + // Return if don't need to do anything + if (!context.GetDrawLine() && !context.GetDrawAuxPts() && !context.GetDrawStepPts()) return; + + // Get points and times (times are returned only if time-slicing + // is requested). + G4Polyline trajectoryLine; + G4Polymarker stepPoints; + G4Polymarker auxiliaryPoints; + std::vector trajectoryLineTimes; + std::vector stepPointTimes; + std::vector auxiliaryPointTimes; + + TimesValidity validity = + GetPointsAndTimes(traj, context, trajectoryLine, auxiliaryPoints, stepPoints, + trajectoryLineTimes, auxiliaryPointTimes, stepPointTimes); + + if (validity == ValidTimes) { + SliceLine(context.GetTimeSliceInterval(), trajectoryLine, trajectoryLineTimes); + + DrawWithTime(context, trajectoryLine, auxiliaryPoints, stepPoints, trajectoryLineTimes, + auxiliaryPointTimes, stepPointTimes); + } + else { + DrawWithoutTime(context, trajectoryLine, auxiliaryPoints, stepPoints); + } +} +} // namespace G4TrajectoryDrawerUtils diff --git a/source/visualization/modeling/src/G4TrajectoryEncounteredVolumeFilter.cc b/source/visualization/modeling/src/G4TrajectoryEncounteredVolumeFilter.cc index b538bfd3b9..83fd86e67a 100644 --- a/source/visualization/modeling/src/G4TrajectoryEncounteredVolumeFilter.cc +++ b/source/visualization/modeling/src/G4TrajectoryEncounteredVolumeFilter.cc @@ -55,7 +55,7 @@ G4TrajectoryEncounteredVolumeFilter::Evaluate(const G4VTrajectory& traj) const for (G4int iPoint = 0; iPoint < richTrajectory.GetPointEntries(); iPoint++) { G4VTrajectoryPoint* point = richTrajectory.GetPoint(iPoint); if (!point) continue; - std::vector* attValues = point->CreateAttValues(); + const auto attValues = point->GetAttValues(); std::vector::const_iterator iAtt; for (iAtt = attValues->begin(); iAtt != attValues->end(); ++iAtt) { if (iAtt->GetName() == "PostVPath" && diff --git a/source/visualization/modeling/src/G4VModel.cc b/source/visualization/modeling/src/G4VModel.cc index 8764823da2..1b82776146 100644 --- a/source/visualization/modeling/src/G4VModel.cc +++ b/source/visualization/modeling/src/G4VModel.cc @@ -34,15 +34,22 @@ #include "G4RotationMatrix.hh" #include "G4ModelingParameters.hh" +const G4ModelingParameters* G4VModel::fpCurrentMP = nullptr; + G4VModel::G4VModel (const G4ModelingParameters* pMP): fType ("Other"), fGlobalTag ("Empty"), - fGlobalDescription ("Empty"), - fpMP (pMP) -{} + fGlobalDescription ("Empty") +{ + fpMP = pMP; +} G4VModel::~G4VModel () {} +const G4ModelingParameters* G4VModel::GetCurrentModelingParameters () { + return fpCurrentMP; +} + G4String G4VModel::GetCurrentTag () const { // Override in concrete class if concept of "current" is meaningful. return fGlobalTag; @@ -53,6 +60,10 @@ G4String G4VModel::GetCurrentDescription () const { return fGlobalDescription; } +void G4VModel::SetCurrentModelingParameters (const G4ModelingParameters* pMP) { + fpCurrentMP = pMP; +} + G4bool G4VModel::Validate (G4bool) { return true; }